From 056ba31addf49d5d3a7f01c281d783f2c3b3f6ba Mon Sep 17 00:00:00 2001 From: Daniel Wedul Date: Wed, 20 Dec 2023 16:33:06 -0700 Subject: [PATCH 01/11] Initial v0.50 bump (#1787) * [1772]: Bump the sdk to v0.50.1 (from v0.46.13-pio-2). Reorg the replace lines. Replace jwt since the SDK does that too. * [1772]: Import cosmossdk.io/simapp instead of github.com/cosmos/cosmos-sdk/simapp. Require that in go.mod. Add replaces for store, evidence, feegrant, and upgrade. Bump wasmd to v0.50.0 (from v0.29.0 -> v0.30.0-pio-5) and comment out the replace line. Bump wasmv to v1.5.0 (from v1.2.4). * [1772]: Bump ibc-apps to v7.1.1 (from v6.1.0). * [1772]: Bump ibc-go to v8.0.0 (from v6.2.0). * [1772]: Require cosmossdk.io/store v1.0.1 and change all imports of github.com/cosmos/cosmos-sdk/store to it. * [1772]: Require cosmossdk.io/x/evidence v0.1.0 and replace all imports of github.com/cosmos/cosmos-sdk/x/evidence with it. * [1772]: Require cosmossdk.io/x/feegrant v0.1.0 and replace all imports of github.com/cosmos/cosmos-sdk/x/feegrant with it. * [1772]: Require cosmossdk.io/x/upgrade v0.1.0 and replace all imports of github.com/cosmos/cosmos-sdk/x/upgrade with it. * [1772]: go mod tidy -e * Updates to spec docs (#1773) * Updates to verbiage and reorder the sidebar * Add backticks to ibcratelimit title * Update verbiage in readme * Removing all the page metadata as it's not needed with moving to alphabetical order only * [1772]: Comment out and note all uses of async-icq/v7 stuff. * [1772]: Remove the legacy upgrade proposal stuff that has now been removed. * Remove old wasm proposal handlers (since they don't exist anymore). * [1772]: Switch tmservice import to cmtservice. * [1772]: Fix streaming import. * [1772]: Switch all the capability imports over to ibc-go. * [1772]: Remove the distribution proposal handler since it's gone now. * [1772]: Fix a bunch of the ibc-go imports. * [1772]: Remove the ibc-go gov proposals since they don't exist anymore. * [1772]: Comment out and note the quarantine stuff. * [1772]: Update the proto-update-deps.sh script to get ibc-go v8, and add a TODO in there to check it. * [1772]: Comment out and note the sanction stuff. * [1772]: Fix the imports for the snapshot stuff. * [1772]: Fix uses of simapp/helpers which doesn't exist anymore. * [1772]: Fix pruningtypes import. * [1772]: Fix moved ibc-go GenTx. * [1772]: Fix moved ibc-go tendermin light-client types. * [1772] Fix testutil import. * [1772]: Fix staking test import. * [1772]: Move the SimAppChainID const to pioconfig to get rid of circular dependency. * [1772]: Bump go to 1.21 since one of the ibc libraries requires it. * [1772]: Switch the tendermint loggers to cosmosio. * [1772]: Switch from the experimental maps library to the built-in (added in 1.21). * [1772]: Change calls to CreateDefaultCometConfig (was previously named CreateDefaultTendermintConfig). * Change all tendermint/tendermint imports to cometbft. * [1772]: Switch to cometbft-db (from tm-db). * [1772]: Switch go-metrics to hashicorp (from armon) since that's what the sdk wants now. * [1772]: Include a couple now-unused variables in a TODO comment. * [1772]: Switch to the sdkmath version of all that stuff that was still referenced under sdk (which isn't there anymore). * [1772]: Fix calls to ZeroLogWrapper which doesn't exist anymore and is now more like log.NewCustomLogger. * [1772]: In statesync: fix RoutesMap variable (used to be just Routes). Comment out the block stuff since I'm not sure how to fix that right now. * [1772]: Comment out references to the GetLockedCoinsFn. * [1772]: Fix calls to the moved KVStorePrefixIterator function (now in store/types, was in sdk/types). * [1772]: Switch to github.com/cosmos/gogoproto/proto (from github.com/gogo/protobuf/proto) since that's what the SDK wants a lot now. * [1772]: Apparently it's LegacyDec and LegacyNewDec now instead of Dec and NewDec. * [1772]: Fix new use of log.CreateSDKLogger (forgot the library). * [1772]: Fix references to storetypes.GasMeter (used to be in sdk). * [1772]: Comment out more in the sync info. I was wrong about RoutesMap, that's a type not a global var. That's going to be a pain. * [1772]: Further compilation fix in the oracle relay (var not used). * [1772]: Fix due to changed return type of FeeGranter(). * [1772]: Change back to ReadPageRequest (from ReadPageRequestWithPageKeyDecoded) since that's a custom thing in our sdk fork, and add todos on all of them. * [1772]: Change several import aliases from tm* to cmt* and standardize a couple others. * [1772]: Fix references to storetypes.KVStore (used to be in the SDK). * [1772]: Comment out use of WithVestingLockedBypass. * [1772]: Fix (again) the call to CreateSDKLogger. * [1772]: It's bytes.Equal not bytes.Equals. * [1772]: Maybe finally fix the call to CreateSDKLogger. * [1772]: Comment out call to NewSigVerificationDecorator because the 2nd argument type changed. * [1772]: Fix simtypes alias in the one file where it was different. * [1772]: Fix references to proposal.ParamChange (moved from simtypes). * [1772]: Fix calls to GetOrGenerate which no longer takes in a codec. * [1772]: Fix calls to NewOperationMsg which no longer takes in a codec. * Revert "[1772]: Fix references to proposal.ParamChange (moved from simtypes)." This reverts commit 637fb4d26d4f30fbc54f828a62909ad0607da0d1. * [1772]: Fix uses of LegacyParamChange and NewSimParamChange (used to be ParamChange and NewSimParamChange). * [1772]: Remove reference to authzcodec.Amino which doesn't exist anymore. * [1772]: Implement the new AppModule and add some TOODs for module stuff. * [1772]: Fix the authz, bank, and gov expected keepers to take in a context.Context instead of the sdk version. * [1772]: Fix calls to FundAccount (the bank keeper and context arguments swapped). * [1772]: StoreDecoderRegistry moved into simtypes (from sdk). * [1772]: StakingKeeper.BondDenom(ctx) now returns an error too. * [1772]: Add some todo notes about migrating params stuff. * [1772]: Comment out the FeeHandler stuff (which is custom to our fork, so not yet back in). * [1772]: Comment out the IMsgServiceRouter stuff since that's only in our fork. * [1772]: Fix the ValidatorHooks. Implement AfterUnbondingInitiated (added to the interface). And they all take in a context.Context now (instead of sdk.Context). * [1772]: Fix a lot of the staking keeper stuff that now returns an error (instead of a bool or nothing). * [1772]: Remove uses of sdk.Handler which no longer exists. * Delete uss of sdk.Route and sdk.NewRoute and some related now-unneeded stuff. * [1772]: Fix event attribute stuff since the Key and Value are now strings (instead of byte slices). * [1772]: NewInfiniteGasMeter moved into storetypes (from sdk). * [1772]: Get rid of our CosmosApp interface and just use the sdk's runtime.AppI. * [1772]: Fix a lot of the BeginBlock(er) and EndBlock(er) stuff and delete some unneeded ones. * [1772]: Comment out all the uses of app.BeginBlock and app.EndBlock since they don't exist anymore. * [1772]: Fix use of InitChain (that had a signature change). * [1772]: Delete missed use of sdk.Route. * [1772]: Fix references to govtypes.AttributeValueCategory (no longer exists) with TODOs to make sure it's still correct (might just be 'gov'). * [1772]: Fix uses of GetOperator() and GetDelegatorAddr() since they now return strings but we need them as addresses. Fix calls to LegacyNewDecWithPrec (was NewDecWithPrec). * [1772]: Fix uses of Msg.ValidateBasic and Msg.GetSigners. * [1772]: Fix the marker authz authoriation (signature change on Accept). * [1772]: Comment out the event history stuff (with TODOs). * [1772]: Fix some calls to NewGasMeter (moved to storetypes from sdk). * [1772]: Update the the auto-generated stuff that references the old .Dec and .Int types that no longer exists. * [1772]: Fix reference to storetypes.Iterator (used to have an alias in the sdk). * [1772]: Comment out the uses of our custom gov cli stuff (with TODOs). * [1772]: Update marker send restriction to match new signature (takes in go context instead of sdk one). * [1772]: Remove use of sdk.Querier (it's gone now) and add TODOs to delete the queriers. * [1772]: Fix some uses of sdkmath stuff (mostly just standardize the import to use the sdmkath alias). * [1772]: Fix uses of BaseApp.NewContext (no longer takes in a header). * [1772]: Remove uses of coin and coins IsEqual which has gone away (and the people rejoice). Replaced with just .Equal. * [1772]: Fix uses of msg.Type() and OperationInput.MsgType. * [1772]: Fix references to sdk.KVPair which went away, but there's still types/kv.Pair. * [1772]: Ugh. coin.Equal now has a pointer receiver. So we can't do GetThing().Equal(GetOtherThing()). Gotta two-line it. * [1772]: Fix unused variable (commented out previously for a TODO). * [1772]: Fix updated use of query router func that now wants a reference to an abci.RequestQuery (instead of concrete). * [1772]: Comment out some wasm stuff that'll need fixing. * [1772]: Get rid of all the red squigglies in app.go by fixing several expected keepers and commenting out a ton of stuff. * [1772]: Remove some TODO things from error strings and replace them with 'not yet updated'. * [1772]: Standardize some of the TODO categories. * [1772]: Fix uses of LegacyZeroDec and LegacyOneDec (names changed to add Legacy to them). * [1772]: Remove uses of GetFeePool and SetFeePool since they're not just field things. * [1772]: Fix some of the stuff in app/test_helpers.go. * [1772]: Switch to our own ExitCode type (from server.ErrorCode which no longer exists). * [1772]: Clean up and update the MockCodec. * [1772]: Bump sdk to v0.50.2 (from v0.50.1) and pull in the rosetta library. * [1772]: Fix some command stuf. * [1772]: Drop back to v0.50.1 and comment out the rosetta thing since I was getting compilation errors on the SDK side with v0.50.2 which is needed for rosetta. * [1772]: Fix the testnet command. * [1772]: Remove unneeded import alias. * [1772]: Fix uses of MakeTestEncodingConfig in tests and also a lot of DeliverTx stuff is now commented out. * [1772]: Update the msgfees expected AccountKeeper. * [1772]: Make sim tests complile (and the other tests in the app dir too). * [1772]: Make all the tests in internal compile. * [1772]: Make all the cmd unit tests compile. * [1772]: Rename the ExitCodeError (was just ExitCode) to conform to conventions. * [1772]: Fix test compilations in the testutil dir. * [1772]: Fix all uses of sdkmath.LegacyNewDecWithPrec (used to be just NewDecWithPrec). * [1772]: Make the exchange unit tests compile. * [1772]: Fix an incorrect arg in fmt.Errorf in prepForZeroHeightGenesis. * [1772]: Hold test compilation fixes. * [1772]: Attribute test compilation fixes. * [1772]: ibchooks test compilation fixes. * [1772]: Metadata test compilation fixes. * [1772]: Trigger module test compilation fixes. * [1772]: Reward test compilation fixes. * [1772]: Oracle test compilation fixes. * [1772]: Name test compilation fixes. * [1772]: MsgFees test compilation fixes. * [1772]: ibc-rate-limit test compilation fixes. * [1772]: Marker test compilation fixes. * [1772]: Disable the provenanced version steps of the build/release github actions. * [1772]: Add a build/release step that builds the unit tests. * [1772]: Remove the build_osx test compilation since for some reason it takes twice as long as the unix one and the unix one is good enough there. * [1772]: Add changelog entry. * [1772]: Add categories to each of the TODOs and change a few. * [1772]: Delete the completely unused name querier types stuff. * [1772]: Delete a todo that I already took care of. * [1772]: Move the helpers package into internal and split it up a bit. The exit code went into the command stuff since that's all that used it. --------- Co-authored-by: AJ Webb --- .github/workflows/docker.yml | 2 +- .github/workflows/proto.yml | 2 +- .github/workflows/release.yml | 9 +- .github/workflows/rosetta.yml | 2 +- .github/workflows/sims.yml | 2 +- .github/workflows/test.yml | 2 +- CHANGELOG.md | 1 + Makefile | 4 +- README.md | 2 +- app/app.go | 669 +++++----- app/app_test.go | 61 +- app/export.go | 85 +- app/sim_bench_test.go | 35 +- app/sim_test.go | 172 +-- app/test_helpers.go | 125 +- app/types.go | 44 - app/upgrades.go | 74 +- app/upgrades_test.go | 162 ++- client/rosetta/rosetta-ci/Dockerfile | 2 +- cmd/dbmigrate/cmd/dbmigrate.go | 4 +- cmd/dbmigrate/main.go | 10 +- cmd/dbmigrate/utils/badgerdb.go | 4 +- cmd/dbmigrate/utils/boltdb.go | 4 +- cmd/dbmigrate/utils/cleveldb.go | 4 +- cmd/dbmigrate/utils/migrator.go | 63 +- cmd/dbmigrate/utils/migrator_test.go | 17 +- cmd/dbmigrate/utils/rocksdb.go | 4 +- cmd/errors/errors.go | 12 + cmd/provenanced/cmd/addresses_test.go | 10 +- cmd/provenanced/cmd/config_test.go | 6 +- cmd/provenanced/cmd/docgen_test.go | 15 +- cmd/provenanced/cmd/genaccounts.go | 5 +- cmd/provenanced/cmd/genaccounts_test.go | 28 +- cmd/provenanced/cmd/init.go | 56 +- cmd/provenanced/cmd/pre_upgrade.go | 10 +- cmd/provenanced/cmd/pre_upgrade_test.go | 25 +- cmd/provenanced/cmd/root.go | 50 +- cmd/provenanced/cmd/root_test.go | 9 +- cmd/provenanced/cmd/simulate_test.go | 18 +- cmd/provenanced/cmd/testnet.go | 82 +- cmd/provenanced/cmd/testnet_test.go | 5 +- cmd/provenanced/config/manager.go | 39 +- cmd/provenanced/config/manager_test.go | 27 +- cmd/provenanced/config/toml.go | 4 +- cmd/provenanced/main.go | 11 +- docker/blockchain/Dockerfile | 2 +- docs/Building.md | 2 +- go.mod | 243 ++-- go.sum | 780 +++++------- internal/antewrapper/fee_gas_meter.go | 22 +- internal/antewrapper/fee_gas_meter_test.go | 48 +- internal/antewrapper/handler.go | 14 +- .../antewrapper/min_gas_prices_decorator.go | 4 +- .../min_gas_prices_decorator_test.go | 38 +- internal/antewrapper/msg_fees_decorator.go | 8 +- .../antewrapper/msg_fees_decorator_test.go | 4 +- internal/antewrapper/prov_fee_test.go | 16 +- internal/antewrapper/prov_feegrant_test.go | 35 +- internal/antewrapper/provenance_fee.go | 7 +- internal/antewrapper/testutil_test.go | 62 +- .../tx_gas_limit_decorator_test.go | 22 +- internal/handlers/aggregate_events.go | 8 +- internal/handlers/aggregate_events_test.go | 2 +- .../handlers/bank_send_restriction_test.go | 30 +- internal/handlers/msg_fee_handler.go | 4 +- internal/handlers/msg_fee_handler_test.go | 4 +- internal/handlers/msg_fee_invoker.go | 4 +- internal/handlers/msg_fee_invoker_test.go | 229 ++-- internal/handlers/msg_service_router.go | 7 +- internal/handlers/msg_service_router_test.go | 1125 +++++++++-------- .../handlers/staking_restrictions_hooks.go | 68 +- internal/helpers/maps.go | 15 + internal/helpers/sdk.go | 37 + internal/ibc/ibc.go | 2 +- internal/ibc/ibc_test.go | 11 +- internal/pioconfig/provenanceconfig.go | 4 + internal/provwasm/message_encoders.go | 6 +- internal/provwasm/query_plugins.go | 4 +- internal/provwasm/simulation.go | 44 +- internal/provwasm/stargate_whitelist.go | 2 +- internal/statesync/statesync.go | 24 +- networks/dev/blockchain-dev/Dockerfile | 4 +- networks/ibc/blockchain-ibc/Dockerfile | 4 +- networks/ibc/blockchain-relayer/Dockerfile | 2 +- networks/local/blockchain-local/Dockerfile | 4 +- scripts/no-now-lint.sh | 2 +- scripts/proto-update-deps.sh | 4 +- testutil/assertions/events.go | 4 +- testutil/assertions/events_test.go | 22 +- testutil/ibc/isc4_middleware_mock.go | 8 +- testutil/ibc/testchain.go | 15 +- testutil/mocks/codec.go | 72 +- testutil/network.go | 23 +- x/README.md | 11 +- x/attribute/abci_test.go | 21 +- x/attribute/client/cli/cli_test.go | 152 +-- x/attribute/client/cli/query.go | 8 +- x/attribute/handler.go | 3 +- x/attribute/handler_test.go | 21 +- x/attribute/keeper/genesis.go | 2 +- x/attribute/keeper/genesis_test.go | 14 +- x/attribute/keeper/keeper.go | 20 +- x/attribute/keeper/keeper_test.go | 8 +- x/attribute/keeper/msg_server.go | 2 +- x/attribute/keeper/msg_server_test.go | 11 +- x/attribute/keeper/query_server.go | 2 +- x/attribute/keeper/query_server_test.go | 7 +- x/attribute/module.go | 39 +- x/attribute/simulation/genesis.go | 2 +- x/attribute/simulation/operations.go | 19 +- x/attribute/simulation/operations_test.go | 17 +- x/attribute/simulation/params.go | 6 +- x/attribute/types/codec.go | 3 +- x/attribute/types/expected_keepers.go | 7 +- x/attribute/types/keys.go | 3 - x/exchange/client/cli/cli_test.go | 92 +- x/exchange/client/cli/helpers.go | 7 +- x/exchange/client/cli/query_setup.go | 10 +- x/exchange/client/cli/tx.go | 9 +- x/exchange/client/cli/tx_test.go | 7 +- x/exchange/codec.go | 3 +- x/exchange/events_test.go | 168 +-- x/exchange/expected_keepers.go | 20 +- x/exchange/helpers.go | 16 +- x/exchange/helpers_test.go | 61 - x/exchange/keeper/export_test.go | 6 +- x/exchange/keeper/fulfillment.go | 11 +- x/exchange/keeper/fulfillment_test.go | 4 +- x/exchange/keeper/genesis_test.go | 14 +- x/exchange/keeper/grpc_query.go | 2 +- x/exchange/keeper/keeper.go | 36 +- x/exchange/keeper/market.go | 139 +- x/exchange/keeper/market_test.go | 12 +- x/exchange/keeper/mocks_test.go | 54 +- x/exchange/keeper/msg_server_test.go | 16 +- x/exchange/keeper/orders.go | 41 +- x/exchange/keeper/orders_test.go | 9 +- x/exchange/keeper/params.go | 8 +- x/exchange/keeper/suite_test.go | 17 +- x/exchange/keys.go | 2 +- x/exchange/market.go | 6 +- x/exchange/market_test.go | 6 +- x/exchange/module/module.go | 22 +- x/exchange/msg_test.go | 12 +- x/hold/client/cli/cli_test.go | 11 +- x/hold/client/cli/query.go | 2 +- x/hold/events_test.go | 12 +- x/hold/expected_keepers.go | 8 +- x/hold/keeper/export_test.go | 5 +- x/hold/keeper/genesis_test.go | 16 +- x/hold/keeper/grpc_query.go | 6 +- x/hold/keeper/grpc_query_test.go | 16 +- x/hold/keeper/invariants.go | 3 +- x/hold/keeper/invariants_test.go | 68 +- x/hold/keeper/keeper.go | 14 +- x/hold/keeper/keeper_test.go | 90 +- x/hold/keeper/locked_coins.go | 4 +- x/hold/keeper/locked_coins_test.go | 72 +- x/hold/keeper/mock_keepers_test.go | 13 +- x/hold/locked_coins_test.go | 19 +- x/hold/module/module.go | 22 +- x/hold/simulation/decoder_test.go | 5 +- x/hold/simulation/genesis.go | 2 +- x/ibchooks/hooks.go | 8 +- x/ibchooks/ibc_hooks.go | 10 +- x/ibchooks/ibc_middleware_test.go | 65 +- x/ibchooks/ibc_module.go | 10 +- x/ibchooks/ics4_middleware.go | 8 +- x/ibchooks/keeper/keeper.go | 8 +- x/ibchooks/marker_hooks.go | 8 +- x/ibchooks/marker_hooks_test.go | 8 +- x/ibchooks/module.go | 40 +- x/ibchooks/types/codec.go | 2 - x/ibchooks/types/expected_keepers.go | 6 +- x/ibchooks/types/types.go | 2 +- x/ibchooks/wasm_hook.go | 13 +- x/ibcratelimit/README.md | 50 +- x/ibcratelimit/client/cli/cli_test.go | 18 +- x/ibcratelimit/client/cli/tx.go | 31 +- x/ibcratelimit/codec.go | 3 +- x/ibcratelimit/keeper/keeper.go | 4 +- x/ibcratelimit/keeper/keeper_test.go | 6 +- x/ibcratelimit/keeper/mocks_test.go | 6 +- x/ibcratelimit/keeper/rate_limit.go | 2 +- x/ibcratelimit/keeper/rate_limit_test.go | 2 +- x/ibcratelimit/mocks_test.go | 6 +- x/ibcratelimit/module/ibc_middleware.go | 10 +- x/ibcratelimit/module/ibc_middleware_test.go | 386 +++--- x/ibcratelimit/module/module.go | 35 +- x/ibcratelimit/packet.go | 6 +- x/ibcratelimit/packet_test.go | 2 +- x/ibcratelimit/simulation/decoder_test.go | 5 +- x/ibcratelimit/simulation/genesis.go | 2 +- x/ibcratelimit/simulation/operations.go | 17 +- x/ibcratelimit/simulation/operations_test.go | 13 +- x/marker/abci.go | 6 +- x/marker/abci_test.go | 28 +- x/marker/client/cli/cli_test.go | 250 ++-- x/marker/client/cli/query.go | 4 +- x/marker/client/cli/tx.go | 35 +- x/marker/handler.go | 3 +- x/marker/handler_test.go | 63 +- x/marker/keeper/denom_test.go | 3 +- x/marker/keeper/genesis.go | 2 +- x/marker/keeper/invariants.go | 2 +- x/marker/keeper/invariants_test.go | 13 +- x/marker/keeper/keeper.go | 19 +- x/marker/keeper/keeper_test.go | 213 ++-- x/marker/keeper/marker.go | 11 +- x/marker/keeper/msg_server.go | 2 +- x/marker/keeper/msg_server_test.go | 50 +- x/marker/keeper/params.go | 4 +- x/marker/keeper/proposal_handler.go | 2 +- x/marker/keeper/proposal_handler_test.go | 30 +- x/marker/keeper/querier.go | 6 +- x/marker/keeper/querier_test.go | 15 +- x/marker/keeper/query_server.go | 2 +- x/marker/keeper/send_restrictions.go | 4 +- x/marker/keeper/send_restrictions_test.go | 51 +- x/marker/module.go | 47 +- x/marker/simulation/genesis.go | 12 +- x/marker/simulation/genesis_test.go | 5 +- x/marker/simulation/operations.go | 53 +- x/marker/simulation/operations_test.go | 62 +- x/marker/simulation/params.go | 10 +- x/marker/simulation/proposals.go | 6 +- x/marker/simulation/proposals_test.go | 6 +- x/marker/types/authz.go | 4 +- x/marker/types/authz_test.go | 8 +- x/marker/types/codec.go | 3 +- x/marker/types/expected_keepers.go | 65 +- x/marker/types/key.go | 4 +- x/marker/types/marker.go | 6 +- x/marker/types/marker.pb.go | 9 +- x/marker/types/marker_test.go | 55 +- x/marker/types/msg.go | 6 +- x/marker/types/msg_test.go | 37 +- x/marker/types/params.go | 12 +- x/marker/types/params_test.go | 18 +- x/marker/types/proposals_test.go | 6 +- x/marker/types/send_restrictions_test.go | 18 +- x/marker/types/tx.pb.go | 6 +- x/metadata/client/cli/cli_test.go | 412 +++--- x/metadata/client/cli/query.go | 20 +- x/metadata/client/cli/tx.go | 91 +- x/metadata/handler.go | 3 +- x/metadata/handler_test.go | 15 +- x/metadata/keeper/account_data_test.go | 4 +- x/metadata/keeper/expected_keepers.go | 10 +- x/metadata/keeper/export_test.go | 2 +- x/metadata/keeper/keeper.go | 4 +- x/metadata/keeper/keeper_test.go | 17 +- x/metadata/keeper/mocks_test.go | 19 +- x/metadata/keeper/objectstore.go | 4 +- x/metadata/keeper/querier.go | 6 +- x/metadata/keeper/query_server.go | 2 +- x/metadata/keeper/query_server_test.go | 10 +- x/metadata/keeper/record.go | 4 +- x/metadata/keeper/record_test.go | 14 +- x/metadata/keeper/scope.go | 14 +- x/metadata/keeper/scope_test.go | 17 +- x/metadata/keeper/session.go | 4 +- x/metadata/keeper/session_test.go | 12 +- x/metadata/keeper/signers_test.go | 165 +-- x/metadata/keeper/signers_utils_test.go | 93 +- x/metadata/keeper/specification.go | 16 +- x/metadata/keeper/specification_test.go | 16 +- x/metadata/module.go | 39 +- x/metadata/types/address_test.go | 4 +- x/metadata/types/codec.go | 3 +- x/metadata/types/events.go | 2 +- x/metadata/types/keys.go | 3 - x/metadata/types/msg.go | 4 + x/msgfees/client/cli/cli_test.go | 50 +- x/msgfees/client/cli/query.go | 2 +- x/msgfees/keeper/keeper.go | 12 +- x/msgfees/keeper/keeper_test.go | 38 +- x/msgfees/keeper/msg_server_test.go | 11 +- x/msgfees/keeper/proposal_handler_test.go | 20 +- x/msgfees/keeper/query_server.go | 63 +- x/msgfees/keeper/query_server_test.go | 74 +- x/msgfees/module/module.go | 33 +- x/msgfees/simulation/genesis.go | 8 +- x/msgfees/simulation/genesis_test.go | 5 +- x/msgfees/simulation/params.go | 10 +- x/msgfees/simulation/proposals.go | 4 +- x/msgfees/simulation/proposals_test.go | 12 +- x/msgfees/types/codec.go | 3 +- x/msgfees/types/events_test.go | 6 +- x/msgfees/types/expected_keepers.go | 17 +- x/msgfees/types/fee.go | 10 +- x/msgfees/types/keys.go | 3 - x/msgfees/types/msgs_test.go | 38 +- x/msgfees/types/params.go | 4 +- x/msgfees/types/params_test.go | 12 +- x/msgfees/types/proposals_test.go | 34 +- x/name/client/cli/cli_test.go | 94 +- x/name/client/cli/gov.go | 7 +- x/name/client/cli/query.go | 2 +- x/name/client/cli/tx.go | 35 +- x/name/handler.go | 3 +- x/name/handler_test.go | 25 +- x/name/keeper/keeper.go | 8 +- x/name/keeper/keeper_test.go | 19 +- x/name/keeper/msg_server.go | 2 +- x/name/keeper/msg_server_test.go | 11 +- x/name/keeper/proposal_handler_test.go | 7 +- x/name/keeper/query_server.go | 2 +- x/name/module.go | 37 +- x/name/simulation/genesis.go | 10 +- x/name/simulation/operations.go | 15 +- x/name/simulation/operations_test.go | 13 +- x/name/simulation/params.go | 12 +- x/name/simulation/proposals_test.go | 3 +- x/name/types/keys.go | 3 - x/name/types/querier.go | 28 - x/name/types/querier_test.go | 22 - x/oracle/client/cli/cli_test.go | 26 +- x/oracle/client/cli/tx.go | 35 +- x/oracle/keeper/icq.go | 10 +- x/oracle/keeper/keeper.go | 8 +- x/oracle/keeper/keeper_test.go | 10 +- x/oracle/keeper/mocks_test.go | 6 +- x/oracle/keeper/relay.go | 177 +-- x/oracle/keeper/relay_test.go | 99 +- x/oracle/module/module.go | 39 +- x/oracle/module/module_ibc.go | 16 +- x/oracle/simulation/decoder_test.go | 5 +- x/oracle/simulation/genesis.go | 4 +- x/oracle/simulation/operations.go | 21 +- x/oracle/simulation/operations_test.go | 15 +- x/oracle/types/expected_keepers.go | 6 +- x/oracle/types/genesis.go | 2 +- x/oracle/types/keys.go | 6 +- x/oracle/types/msgs.go | 2 +- x/reward/abci_test.go | 12 +- x/reward/client/cli/cli_test.go | 36 +- x/reward/client/cli/query.go | 2 +- x/reward/handler.go | 3 +- x/reward/keeper/claim_reward_distribution.go | 4 +- x/reward/keeper/keeper.go | 2 +- x/reward/keeper/keeper_test.go | 94 +- x/reward/keeper/msg_server_test.go | 44 +- x/reward/keeper/query_server.go | 2 +- x/reward/keeper/query_server_test.go | 12 +- x/reward/keeper/reward_account_state.go | 14 +- x/reward/keeper/reward_account_state_test.go | 2 +- x/reward/keeper/reward_claim_test.go | 14 +- x/reward/keeper/reward_program.go | 4 +- x/reward/keeper/reward_program_test.go | 16 +- x/reward/keeper/rules.go | 68 +- x/reward/keeper/rules_test.go | 157 +-- x/reward/keeper/time_management.go | 12 +- x/reward/keeper/time_management_test.go | 15 +- x/reward/module/module.go | 37 +- x/reward/simulation/genesis.go | 8 +- x/reward/simulation/operations.go | 19 +- x/reward/simulation/operations_test.go | 10 +- x/reward/types/action_builder.go | 3 +- x/reward/types/expected_keepers.go | 12 +- x/reward/types/keys.go | 3 - x/reward/types/msgs_test.go | 10 +- x/reward/types/reward.go | 85 +- x/reward/types/reward.pb.go | 12 +- x/reward/types/reward_test.go | 10 +- x/trigger/client/cli/cli_test.go | 52 +- x/trigger/client/cli/query.go | 2 +- x/trigger/keeper/event_detector.go | 35 +- x/trigger/keeper/event_detector_test.go | 7 +- x/trigger/keeper/event_listener.go | 4 +- x/trigger/keeper/gas_limit.go | 4 +- x/trigger/keeper/keeper.go | 8 +- x/trigger/keeper/keeper_test.go | 19 +- x/trigger/keeper/msg_server_test.go | 13 +- x/trigger/keeper/query_server.go | 2 +- x/trigger/keeper/queue.go | 4 +- x/trigger/keeper/trigger.go | 4 +- x/trigger/keeper/trigger_dispatcher.go | 5 +- x/trigger/keeper/trigger_dispatcher_test.go | 5 +- x/trigger/keeper/trigger_registry_test.go | 18 +- x/trigger/module/module.go | 37 +- x/trigger/simulation/genesis.go | 14 +- x/trigger/simulation/operations.go | 18 +- x/trigger/simulation/operations_test.go | 13 +- x/trigger/types/genesis.go | 4 +- x/trigger/types/keys.go | 3 - x/trigger/types/msgs.go | 11 +- x/trigger/types/trigger.go | 2 +- x/trigger/types/trigger_test.go | 31 +- 389 files changed, 6084 insertions(+), 6018 deletions(-) delete mode 100644 app/types.go create mode 100644 cmd/errors/errors.go create mode 100644 internal/helpers/maps.go create mode 100644 internal/helpers/sdk.go delete mode 100644 x/name/types/querier.go delete mode 100644 x/name/types/querier_test.go diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index cae8de7780..ace985c4c1 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -28,7 +28,7 @@ jobs: - name: Setup go uses: actions/setup-go@v4 with: - go-version: '1.20' + go-version: '1.21' - name: Go mod vendor run: | diff --git a/.github/workflows/proto.yml b/.github/workflows/proto.yml index 4cb5eaad6b..fea9f33325 100644 --- a/.github/workflows/proto.yml +++ b/.github/workflows/proto.yml @@ -30,7 +30,7 @@ jobs: - name: Setup go uses: actions/setup-go@v4 with: - go-version: '1.20' + go-version: '1.21' - name: Setup Job id: setup run: | diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d6c80ee6cb..20360a6942 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -55,7 +55,7 @@ jobs: version: ${{ steps.vars.outputs.version }} is_release: ${{ steps.vars.outputs.is_release }} prerelease: ${{ steps.vars.outputs.prerelease }} - go_version: '1.20' + go_version: '1.21' build_osx: runs-on: macos-latest @@ -76,6 +76,8 @@ jobs: export WITH_ROCKSDB=false make build-release-zip - name: Provenanced version + # TODO[1760]: github: Re-enable the build_osx provenanced version step. + if: false run: build/provenanced version --long - uses: actions/upload-artifact@v3 with: @@ -108,7 +110,12 @@ jobs: export WITH_CLEVELDB=true make build-release-zip - name: Provenanced version + # TODO[1760]: github: Re-enable the build_linux provenanced version step. + if: false run: build/provenanced version --long + - name: Compile Tests + # TODO[1760]: github: Delete this build_linux Compile Tests step. + run: go test -mod=readonly -timeout 30m -tags='norace ledger test_ledger_mock' -run='ZYX_NOT_A_REAL_TEST_XZY' ./... - uses: actions/upload-artifact@v3 with: name: linux-zip diff --git a/.github/workflows/rosetta.yml b/.github/workflows/rosetta.yml index 35543613bc..6a5788a301 100644 --- a/.github/workflows/rosetta.yml +++ b/.github/workflows/rosetta.yml @@ -32,7 +32,7 @@ jobs: - uses: actions/setup-go@v4 if: ${{ env.GIT_DIFF }} with: - go-version: '1.20' + go-version: '1.21' - name: Go mod vendor if: ${{ env.GIT_DIFF }} run: | diff --git a/.github/workflows/sims.yml b/.github/workflows/sims.yml index ecd7961e8e..6a00dc10a0 100644 --- a/.github/workflows/sims.yml +++ b/.github/workflows/sims.yml @@ -48,7 +48,7 @@ jobs: echo "Setting output: go-cache-key-hash=$go_cache_key_hash" echo "go-cache-key-hash=$go_cache_key_hash" >> "$GITHUB_OUTPUT" outputs: - go-version: '1.20' + go-version: '1.21' should-run: ${{ env.GIT_DIFF }} file-prefix: ${{ steps.def-vars.outputs.file-prefix }} db-cache-key-suffix: sims-db3-${{ steps.def-vars.outputs.db-cache-key-hash }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6eef71126c..7b87f1825c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -70,7 +70,7 @@ jobs: path: ./pkgs.txt.part.03 outputs: should-run: ${{ env.GIT_DIFF }} - go-version: '1.20' + go-version: '1.21' file-prefix: ${{ steps.def-vars.outputs.file-prefix }} diff --git a/CHANGELOG.md b/CHANGELOG.md index a563d3695d..6f87af8bd0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,6 +39,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Features +* Bump cosmos-SDK to `v0.50.2` (from `v0.46.13-pio-2`) [#1772](https://github.com/provenance-io/provenance/issues/1772). * Add the ibcratelimit module [#1498](https://github.com/provenance-io/provenance/issues/1498). * Add CLI commands for the exchange module endpoints and queries [#1701](https://github.com/provenance-io/provenance/issues/1701). * Add CLI command to generate autocomplete shell scripts [#1762](https://github.com/provenance-io/provenance/pull/1762). diff --git a/Makefile b/Makefile index 43282b4424..abccb09a5c 100644 --- a/Makefile +++ b/Makefile @@ -46,11 +46,11 @@ HTTPS_GIT := https://github.com/provenance-io/provenance.git DOCKER := $(shell which docker) DOCKER_BUF := $(DOCKER) run --rm -v $(CURDIR):/workspace --workdir /workspace bufbuild/buf -# Only support go version 1.20 +# Only support go version 1.21 GO_MAJOR_VERSION = $(shell $(GO) version | cut -c 14- | cut -d' ' -f1 | cut -d'.' -f1) GO_MINOR_VERSION = $(shell $(GO) version | cut -c 14- | cut -d' ' -f1 | cut -d'.' -f2) SUPPORTED_GO_MAJOR_VERSION = 1 -SUPPORTED_GO_MINOR_VERSION = 20 +SUPPORTED_GO_MINOR_VERSION = 21 GO_VERSION_VALIDATION_ERR_MSG = Golang version $(GO_MAJOR_VERSION).$(GO_MINOR_VERSION) is not supported, you must use $(SUPPORTED_GO_MAJOR_VERSION).$(SUPPORTED_GO_MINOR_VERSION) # The below include contains the tools target. diff --git a/README.md b/README.md index 48d6e68da9..555e3b1a2e 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ As the [Provenance Blockchain][provenance] and its core modules are based on the Developers can use a local checkout and the make targets `make run` and `make localnet-start` to run a local development network. -Note: Requires [Go 1.20+](https://golang.org/dl/) +Note: Requires [Go 1.21+](https://golang.org/dl/) See Also: [Building](docs/Building.md) diff --git a/app/app.go b/app/app.go index 23d472dd26..94537b6544 100644 --- a/app/app.go +++ b/app/app.go @@ -2,7 +2,6 @@ package app import ( "encoding/json" - "fmt" "io" "net/http" "os" @@ -10,7 +9,6 @@ import ( "strings" "github.com/CosmWasm/wasmd/x/wasm" - wasmclient "github.com/CosmWasm/wasmd/x/wasm/client" wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/gorilla/mux" @@ -18,30 +16,51 @@ import ( "github.com/spf13/cast" "github.com/spf13/viper" - abci "github.com/tendermint/tendermint/abci/types" - "github.com/tendermint/tendermint/libs/log" - tmos "github.com/tendermint/tendermint/libs/os" - dbm "github.com/tendermint/tm-db" - + abci "github.com/cometbft/cometbft/abci/types" + cmtos "github.com/cometbft/cometbft/libs/os" + + "cosmossdk.io/log" + sdkmath "cosmossdk.io/math" + + // "cosmossdk.io/store/streaming" // TODO[1760]: streaming: See if we can use this directly or if we have needed modifications. + storetypes "cosmossdk.io/store/types" + "cosmossdk.io/x/evidence" + evidencekeeper "cosmossdk.io/x/evidence/keeper" + evidencetypes "cosmossdk.io/x/evidence/types" + "cosmossdk.io/x/feegrant" + feegrantkeeper "cosmossdk.io/x/feegrant/keeper" + feegrantmodule "cosmossdk.io/x/feegrant/module" + "cosmossdk.io/x/upgrade" + upgradekeeper "cosmossdk.io/x/upgrade/keeper" + upgradetypes "cosmossdk.io/x/upgrade/types" + + // icq "github.com/cosmos/ibc-apps/modules/async-icq/v7" // TODO[1760]: async-icq + // icqkeeper "github.com/cosmos/ibc-apps/modules/async-icq/v7/keeper" // TODO[1760]: async-icq + // icqtypes "github.com/cosmos/ibc-apps/modules/async-icq/v7/types" // TODO[1760]: async-icq + // "github.com/cosmos/cosmos-sdk/x/quarantine" // TODO[1760]: quarantine + // quarantinekeeper "github.com/cosmos/cosmos-sdk/x/quarantine/keeper" // TODO[1760]: quarantine + // quarantinemodule "github.com/cosmos/cosmos-sdk/x/quarantine/module" // TODO[1760]: quarantine + // "github.com/cosmos/cosmos-sdk/x/sanction" // TODO[1760]: sanction + // sanctionkeeper "github.com/cosmos/cosmos-sdk/x/sanction/keeper" // TODO[1760]: sanction + // sanctionmodule "github.com/cosmos/cosmos-sdk/x/sanction/module" // TODO[1760]: sanction + + dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/cosmos/cosmos-sdk/client/grpc/cmtservice" nodeservice "github.com/cosmos/cosmos-sdk/client/grpc/node" - "github.com/cosmos/cosmos-sdk/client/grpc/tmservice" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/codec/types" + "github.com/cosmos/cosmos-sdk/runtime" "github.com/cosmos/cosmos-sdk/server/api" - "github.com/cosmos/cosmos-sdk/server/config" + serverconfig "github.com/cosmos/cosmos-sdk/server/config" servertypes "github.com/cosmos/cosmos-sdk/server/types" - storetypes "github.com/cosmos/cosmos-sdk/store/types" - "github.com/cosmos/cosmos-sdk/streaming" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" "github.com/cosmos/cosmos-sdk/version" "github.com/cosmos/cosmos-sdk/x/auth" "github.com/cosmos/cosmos-sdk/x/auth/ante" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" - authsims "github.com/cosmos/cosmos-sdk/x/auth/simulation" authtx "github.com/cosmos/cosmos-sdk/x/auth/tx" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "github.com/cosmos/cosmos-sdk/x/auth/vesting" @@ -52,25 +71,16 @@ import ( "github.com/cosmos/cosmos-sdk/x/bank" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - "github.com/cosmos/cosmos-sdk/x/capability" - capabilitykeeper "github.com/cosmos/cosmos-sdk/x/capability/keeper" - capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" "github.com/cosmos/cosmos-sdk/x/crisis" crisiskeeper "github.com/cosmos/cosmos-sdk/x/crisis/keeper" crisistypes "github.com/cosmos/cosmos-sdk/x/crisis/types" distr "github.com/cosmos/cosmos-sdk/x/distribution" - distrclient "github.com/cosmos/cosmos-sdk/x/distribution/client" distrkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper" distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" - "github.com/cosmos/cosmos-sdk/x/evidence" - evidencekeeper "github.com/cosmos/cosmos-sdk/x/evidence/keeper" - evidencetypes "github.com/cosmos/cosmos-sdk/x/evidence/types" - "github.com/cosmos/cosmos-sdk/x/feegrant" - feegrantkeeper "github.com/cosmos/cosmos-sdk/x/feegrant/keeper" - feegrantmodule "github.com/cosmos/cosmos-sdk/x/feegrant/module" "github.com/cosmos/cosmos-sdk/x/genutil" genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" "github.com/cosmos/cosmos-sdk/x/gov" + govclient "github.com/cosmos/cosmos-sdk/x/gov/client" govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" govtypesv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" @@ -86,41 +96,30 @@ import ( paramskeeper "github.com/cosmos/cosmos-sdk/x/params/keeper" paramstypes "github.com/cosmos/cosmos-sdk/x/params/types" paramproposal "github.com/cosmos/cosmos-sdk/x/params/types/proposal" - "github.com/cosmos/cosmos-sdk/x/quarantine" - quarantinekeeper "github.com/cosmos/cosmos-sdk/x/quarantine/keeper" - quarantinemodule "github.com/cosmos/cosmos-sdk/x/quarantine/module" - "github.com/cosmos/cosmos-sdk/x/sanction" - sanctionkeeper "github.com/cosmos/cosmos-sdk/x/sanction/keeper" - sanctionmodule "github.com/cosmos/cosmos-sdk/x/sanction/module" "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" "github.com/cosmos/cosmos-sdk/x/staking" stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - "github.com/cosmos/cosmos-sdk/x/upgrade" - upgradeclient "github.com/cosmos/cosmos-sdk/x/upgrade/client" - upgradekeeper "github.com/cosmos/cosmos-sdk/x/upgrade/keeper" - upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" - icq "github.com/cosmos/ibc-apps/modules/async-icq/v6" - icqkeeper "github.com/cosmos/ibc-apps/modules/async-icq/v6/keeper" - icqtypes "github.com/cosmos/ibc-apps/modules/async-icq/v6/types" - ica "github.com/cosmos/ibc-go/v6/modules/apps/27-interchain-accounts" - icahost "github.com/cosmos/ibc-go/v6/modules/apps/27-interchain-accounts/host" - icahostkeeper "github.com/cosmos/ibc-go/v6/modules/apps/27-interchain-accounts/host/keeper" - icahosttypes "github.com/cosmos/ibc-go/v6/modules/apps/27-interchain-accounts/host/types" - icatypes "github.com/cosmos/ibc-go/v6/modules/apps/27-interchain-accounts/types" - ibctransfer "github.com/cosmos/ibc-go/v6/modules/apps/transfer" - ibctransferkeeper "github.com/cosmos/ibc-go/v6/modules/apps/transfer/keeper" - ibctransfertypes "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types" - ibc "github.com/cosmos/ibc-go/v6/modules/core" - ibcclient "github.com/cosmos/ibc-go/v6/modules/core/02-client" - ibcclientclient "github.com/cosmos/ibc-go/v6/modules/core/02-client/client" - ibcclienttypes "github.com/cosmos/ibc-go/v6/modules/core/02-client/types" - porttypes "github.com/cosmos/ibc-go/v6/modules/core/05-port/types" - ibchost "github.com/cosmos/ibc-go/v6/modules/core/24-host" - ibckeeper "github.com/cosmos/ibc-go/v6/modules/core/keeper" - ibctestingtypes "github.com/cosmos/ibc-go/v6/testing/types" + "github.com/cosmos/ibc-go/modules/capability" + capabilitykeeper "github.com/cosmos/ibc-go/modules/capability/keeper" + capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + ica "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts" + + // icahost "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/host" // TODO[1760]: msg-service-router + icahostkeeper "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/host/keeper" + icahosttypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/host/types" + icatypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/types" + ibctransfer "github.com/cosmos/ibc-go/v8/modules/apps/transfer" + ibctransferkeeper "github.com/cosmos/ibc-go/v8/modules/apps/transfer/keeper" + ibctransfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + ibc "github.com/cosmos/ibc-go/v8/modules/core" + ibcclient "github.com/cosmos/ibc-go/v8/modules/core/02-client" + ibcclienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types" + ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper" + ibctestingtypes "github.com/cosmos/ibc-go/v8/testing/types" appparams "github.com/provenance-io/provenance/app/params" "github.com/provenance-io/provenance/internal/antewrapper" @@ -141,7 +140,7 @@ import ( "github.com/provenance-io/provenance/x/ibchooks" ibchookskeeper "github.com/provenance-io/provenance/x/ibchooks/keeper" ibchookstypes "github.com/provenance-io/provenance/x/ibchooks/types" - ibcratelimit "github.com/provenance-io/provenance/x/ibcratelimit" + "github.com/provenance-io/provenance/x/ibcratelimit" ibcratelimitkeeper "github.com/provenance-io/provenance/x/ibcratelimit/keeper" ibcratelimitmodule "github.com/provenance-io/provenance/x/ibcratelimit/module" "github.com/provenance-io/provenance/x/marker" @@ -180,7 +179,7 @@ var ( DefaultNodeHome string // DefaultPowerReduction pio specific value for power reduction for TokensFromConsensusPower - DefaultPowerReduction = sdk.NewIntFromUint64(1000000000) + DefaultPowerReduction = sdkmath.NewIntFromUint64(1_000_000_000) // ModuleBasics defines the module BasicManager is in charge of setting up basic, // non-dependant module elements, such as codec registration @@ -194,13 +193,8 @@ var ( mint.AppModuleBasic{}, distr.AppModuleBasic{}, gov.NewAppModuleBasic(append( - wasmclient.ProposalHandlers, + []govclient.ProposalHandler{}, paramsclient.ProposalHandler, - distrclient.ProposalHandler, - upgradeclient.LegacyProposalHandler, - upgradeclient.LegacyCancelProposalHandler, - ibcclientclient.UpdateClientProposalHandler, - ibcclientclient.UpgradeProposalHandler, nameclient.RootNameProposalHandler, ), ), @@ -213,13 +207,13 @@ var ( authzmodule.AppModuleBasic{}, groupmodule.AppModuleBasic{}, vesting.AppModuleBasic{}, - quarantinemodule.AppModuleBasic{}, - sanctionmodule.AppModuleBasic{}, + // quarantinemodule.AppModuleBasic{}, // TODO[1760]: quarantine + // sanctionmodule.AppModuleBasic{}, // TODO[1760]: sanction ibc.AppModuleBasic{}, ibctransfer.AppModuleBasic{}, ica.AppModuleBasic{}, - icq.AppModuleBasic{}, + // icq.AppModuleBasic{}, // TODO[1760]: async-icq ibchooks.AppModuleBasic{}, ibcratelimitmodule.AppModuleBasic{}, @@ -259,7 +253,7 @@ var ( ) var ( - _ CosmosApp = (*App)(nil) + _ runtime.AppI = (*App)(nil) _ servertypes.Application = (*App)(nil) ) @@ -309,16 +303,16 @@ type App struct { FeeGrantKeeper feegrantkeeper.Keeper MsgFeesKeeper msgfeeskeeper.Keeper RewardKeeper rewardkeeper.Keeper - QuarantineKeeper quarantinekeeper.Keeper - SanctionKeeper sanctionkeeper.Keeper - TriggerKeeper triggerkeeper.Keeper - OracleKeeper oraclekeeper.Keeper - - IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly - IBCHooksKeeper *ibchookskeeper.Keeper - ICAHostKeeper *icahostkeeper.Keeper - TransferKeeper *ibctransferkeeper.Keeper - ICQKeeper icqkeeper.Keeper + // QuarantineKeeper quarantinekeeper.Keeper // TODO[1760]: quarantine + // SanctionKeeper sanctionkeeper.Keeper // TODO[1760]: sanction + TriggerKeeper triggerkeeper.Keeper + OracleKeeper oraclekeeper.Keeper + + IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly + IBCHooksKeeper *ibchookskeeper.Keeper + ICAHostKeeper *icahostkeeper.Keeper + TransferKeeper *ibctransferkeeper.Keeper + // ICQKeeper icqkeeper.Keeper // TODO[1760]: async-icq RateLimitingKeeper *ibcratelimitkeeper.Keeper MarkerKeeper markerkeeper.Keeper @@ -344,7 +338,8 @@ type App struct { HooksICS4Wrapper ibchooks.ICS4Middleware // the module manager - mm *module.Manager + mm *module.Manager + BasicModuleManager module.BasicManager // simulation manager sm *module.SimulationManager @@ -379,23 +374,25 @@ func New( interfaceRegistry := encodingConfig.InterfaceRegistry bApp := baseapp.NewBaseApp("provenanced", logger, db, encodingConfig.TxConfig.TxDecoder(), baseAppOptions...) - bApp.SetMsgServiceRouter(piohandlers.NewPioMsgServiceRouter(encodingConfig.TxConfig.TxDecoder())) + // TODO[1760]: msg-service-router: Switch back to the PioMsgServiceRouter. + // bApp.SetMsgServiceRouter(piohandlers.NewPioMsgServiceRouter(encodingConfig.TxConfig.TxDecoder())) + bApp.SetMsgServiceRouter(baseapp.NewMsgServiceRouter()) // TODO[1760]: msg-service-router: delete this line. bApp.SetCommitMultiStoreTracer(traceStore) bApp.SetVersion(version.Version) bApp.SetInterfaceRegistry(interfaceRegistry) sdk.SetCoinDenomRegex(SdkCoinDenomRegex) - keys := sdk.NewKVStoreKeys( + keys := storetypes.NewKVStoreKeys( authtypes.StoreKey, banktypes.StoreKey, stakingtypes.StoreKey, minttypes.StoreKey, distrtypes.StoreKey, slashingtypes.StoreKey, govtypes.StoreKey, paramstypes.StoreKey, upgradetypes.StoreKey, feegrant.StoreKey, evidencetypes.StoreKey, capabilitytypes.StoreKey, authzkeeper.StoreKey, group.StoreKey, - ibchost.StoreKey, + // ibchost.StoreKey, // TODO[1760]: ibc-host ibctransfertypes.StoreKey, icahosttypes.StoreKey, - icqtypes.StoreKey, + // icqtypes.StoreKey, // TODO[1760]: async-icq ibchookstypes.StoreKey, ibcratelimit.StoreKey, @@ -406,15 +403,17 @@ func New( msgfeestypes.StoreKey, wasm.StoreKey, rewardtypes.StoreKey, - quarantine.StoreKey, - sanction.StoreKey, + // quarantine.StoreKey, // TODO[1760]: quarantine + // sanction.StoreKey, // TODO[1760]: sanction triggertypes.StoreKey, oracletypes.StoreKey, hold.StoreKey, exchange.StoreKey, ) - tkeys := sdk.NewTransientStoreKeys(paramstypes.TStoreKey) - memKeys := sdk.NewMemoryStoreKeys(capabilitytypes.MemStoreKey) + tkeys := storetypes.NewTransientStoreKeys(paramstypes.TStoreKey) + memKeys := storetypes.NewMemoryStoreKeys(capabilitytypes.MemStoreKey) + + govAuthority := authtypes.NewModuleAddress(govtypes.ModuleName).String() app := &App{ BaseApp: bApp, @@ -436,79 +435,95 @@ func New( app.ParamsKeeper = initParamsKeeper(appCodec, legacyAmino, keys[paramstypes.StoreKey], tkeys[paramstypes.TStoreKey]) // set the BaseApp's parameter store - bApp.SetParamStore(app.ParamsKeeper.Subspace(baseapp.Paramspace).WithKeyTable(paramstypes.ConsensusParamsKeyTable())) + // bApp.SetParamStore(app.ParamsKeeper.Subspace(baseapp.Paramspace).WithKeyTable(paramstypes.ConsensusParamsKeyTable())) // TODO[1760]: params // add capability keeper and ScopeToModule for ibc module app.CapabilityKeeper = capabilitykeeper.NewKeeper(appCodec, keys[capabilitytypes.StoreKey], memKeys[capabilitytypes.MemStoreKey]) // grant capabilities for the ibc and ibc-transfer modules - scopedIBCKeeper := app.CapabilityKeeper.ScopeToModule(ibchost.ModuleName) + scopedIBCKeeper := app.CapabilityKeeper.ScopeToModule("ibc") // TODO[1760]: ibc-host: was ibchost.ModuleName scopedTransferKeeper := app.CapabilityKeeper.ScopeToModule(ibctransfertypes.ModuleName) scopedWasmKeeper := app.CapabilityKeeper.ScopeToModule(wasm.ModuleName) scopedICAHostKeeper := app.CapabilityKeeper.ScopeToModule(icahosttypes.SubModuleName) - scopedICQKeeper := app.CapabilityKeeper.ScopeToModule(icqtypes.ModuleName) + // scopedICQKeeper := app.CapabilityKeeper.ScopeToModule(icqtypes.ModuleName) // TODO[1760]: async-icq scopedOracleKeeper := app.CapabilityKeeper.ScopeToModule(oracletypes.ModuleName) // capability keeper must be sealed after scope to module registrations are completed. app.CapabilityKeeper.Seal() // add keepers - app.AccountKeeper = authkeeper.NewAccountKeeper( - appCodec, keys[authtypes.StoreKey], app.GetSubspace(authtypes.ModuleName), - authtypes.ProtoBaseAccount, maccPerms, AccountAddressPrefix, - ) - - app.BankKeeper = bankkeeper.NewBaseKeeper( - appCodec, keys[banktypes.StoreKey], app.AccountKeeper, app.GetSubspace(banktypes.ModuleName), app.ModuleAccountAddrs(), - ) - stakingKeeper := stakingkeeper.NewKeeper( - appCodec, keys[stakingtypes.StoreKey], app.AccountKeeper, app.BankKeeper, app.GetSubspace(stakingtypes.ModuleName), - ) - app.MintKeeper = mintkeeper.NewKeeper( - appCodec, keys[minttypes.StoreKey], app.GetSubspace(minttypes.ModuleName), &stakingKeeper, - app.AccountKeeper, app.BankKeeper, authtypes.FeeCollectorName, - ) - app.DistrKeeper = distrkeeper.NewKeeper( - appCodec, keys[distrtypes.StoreKey], app.GetSubspace(distrtypes.ModuleName), app.AccountKeeper, app.BankKeeper, - &stakingKeeper, authtypes.FeeCollectorName, - ) - app.SlashingKeeper = slashingkeeper.NewKeeper( - appCodec, keys[slashingtypes.StoreKey], &stakingKeeper, app.GetSubspace(slashingtypes.ModuleName), - ) - app.CrisisKeeper = crisiskeeper.NewKeeper( - app.GetSubspace(crisistypes.ModuleName), invCheckPeriod, app.BankKeeper, authtypes.FeeCollectorName, - ) - - app.FeeGrantKeeper = feegrantkeeper.NewKeeper(appCodec, keys[feegrant.StoreKey], app.AccountKeeper) - app.UpgradeKeeper = upgradekeeper.NewKeeper( - skipUpgradeHeights, keys[upgradetypes.StoreKey], appCodec, homePath, app.BaseApp, - authtypes.NewModuleAddress(govtypes.ModuleName).String(), - ) + // TODO[1760]: account: Put back this call to NewAccountKeeper with fixed arguments. + // app.AccountKeeper = authkeeper.NewAccountKeeper( + // appCodec, keys[authtypes.StoreKey], app.GetSubspace(authtypes.ModuleName), + // authtypes.ProtoBaseAccount, maccPerms, AccountAddressPrefix, + // ) + + // TODO[1760]: bank: Put back this call to NewBaseKeeper with fixed arguments. + // app.BankKeeper = bankkeeper.NewBaseKeeper( + // appCodec, keys[banktypes.StoreKey], app.AccountKeeper, app.GetSubspace(banktypes.ModuleName), app.ModuleAccountAddrs(), + // ) + // TODO[1760]: staking: Put back this call to NewKeeper with fixed arguments. + // stakingKeeper := stakingkeeper.NewKeeper( + // appCodec, keys[stakingtypes.StoreKey], app.AccountKeeper, app.BankKeeper, app.GetSubspace(stakingtypes.ModuleName), + // ) + // TODO[1760]: mint: Put back this call to NewKeeper with fixed arguments. + // app.MintKeeper = mintkeeper.NewKeeper( + // appCodec, keys[minttypes.StoreKey], app.GetSubspace(minttypes.ModuleName), &stakingKeeper, + // app.AccountKeeper, app.BankKeeper, authtypes.FeeCollectorName, + // ) + // TODO[1760]: distr: Put back this call to NewKeeper with fixed arguments. + // app.DistrKeeper = distrkeeper.NewKeeper( + // appCodec, keys[distrtypes.StoreKey], app.GetSubspace(distrtypes.ModuleName), app.AccountKeeper, app.BankKeeper, + // &stakingKeeper, authtypes.FeeCollectorName, + // ) + // TODO[1760]: slashing: Put back this call to NewKeeper with fixed arguments. + // app.SlashingKeeper = slashingkeeper.NewKeeper( + // appCodec, keys[slashingtypes.StoreKey], &stakingKeeper, app.GetSubspace(slashingtypes.ModuleName), + // ) + // TODO[1760]: crisis: Put back this call to NewKeeper with fixed arguments. + // app.CrisisKeeper = crisiskeeper.NewKeeper( + // app.GetSubspace(crisistypes.ModuleName), invCheckPeriod, app.BankKeeper, authtypes.FeeCollectorName, + // ) + + // TODO[1760]: feegrant: Put back this call to NewKeeper with fixed arguments. + // app.FeeGrantKeeper = feegrantkeeper.NewKeeper(appCodec, keys[feegrant.StoreKey], app.AccountKeeper) + // TODO[1760]: upgrade: Put back this call to NewKeeper with fixed arguments. + // app.UpgradeKeeper = upgradekeeper.NewKeeper( + // skipUpgradeHeights, keys[upgradetypes.StoreKey], appCodec, homePath, app.BaseApp, + // authtypes.NewModuleAddress(govtypes.ModuleName).String(), + // ) app.MsgFeesKeeper = msgfeeskeeper.NewKeeper( - appCodec, keys[msgfeestypes.StoreKey], app.GetSubspace(msgfeestypes.ModuleName), authtypes.FeeCollectorName, pioconfig.GetProvenanceConfig().FeeDenom, app.Simulate, encodingConfig.TxConfig.TxDecoder(), interfaceRegistry) + appCodec, keys[msgfeestypes.StoreKey], app.GetSubspace(msgfeestypes.ModuleName), + authtypes.FeeCollectorName, pioconfig.GetProvenanceConfig().FeeDenom, + app.Simulate, encodingConfig.TxConfig.TxDecoder(), interfaceRegistry, + ) - pioMsgFeesRouter := app.MsgServiceRouter().(*piohandlers.PioMsgServiceRouter) - pioMsgFeesRouter.SetMsgFeesKeeper(app.MsgFeesKeeper) + // pioMsgFeesRouter := app.MsgServiceRouter().(*piohandlers.PioMsgServiceRouter) // TODO[1760]: msg-service-router + // pioMsgFeesRouter.SetMsgFeesKeeper(app.MsgFeesKeeper) // TODO[1760]: msg-service-router // NOTE: stakingKeeper above is passed by reference, so that it will contain these hooks restrictHooks := piohandlers.NewStakingRestrictionHooks(&app.StakingKeeper, *piohandlers.DefaultRestrictionOptions) - app.StakingKeeper = *stakingKeeper.SetHooks( - stakingtypes.NewMultiStakingHooks(restrictHooks, app.DistrKeeper.Hooks(), app.SlashingKeeper.Hooks()), - ) + // TODO[1760]: staking: Put back this call to SetHooks once we have the staking keeper again. + _ = restrictHooks + // app.StakingKeeper = *stakingKeeper.SetHooks( + // stakingtypes.NewMultiStakingHooks(restrictHooks, app.DistrKeeper.Hooks(), app.SlashingKeeper.Hooks()), + // ) app.RewardKeeper = rewardkeeper.NewKeeper(appCodec, keys[rewardtypes.StoreKey], app.StakingKeeper, &app.GovKeeper, app.BankKeeper, app.AccountKeeper) - app.AuthzKeeper = authzkeeper.NewKeeper( - keys[authzkeeper.StoreKey], appCodec, app.BaseApp.MsgServiceRouter(), app.AccountKeeper, - ) + // TODO[1760]: authz: Put back this call to NewKeeper with fixed arguments. + // app.AuthzKeeper = authzkeeper.NewKeeper( + // keys[authzkeeper.StoreKey], appCodec, app.BaseApp.MsgServiceRouter(), app.AccountKeeper, + // ) app.GroupKeeper = groupkeeper.NewKeeper(keys[group.StoreKey], appCodec, app.BaseApp.MsgServiceRouter(), app.AccountKeeper, group.DefaultConfig()) // Create IBC Keeper - app.IBCKeeper = ibckeeper.NewKeeper( - appCodec, keys[ibchost.StoreKey], app.GetSubspace(ibchost.ModuleName), app.StakingKeeper, app.UpgradeKeeper, scopedIBCKeeper, - ) + // TODO[1760]: ibc-host: Put back this call to NewKeeper with fixed arguments. + // app.IBCKeeper = ibckeeper.NewKeeper( + // appCodec, keys[ibchost.StoreKey], app.GetSubspace(ibchost.ModuleName), app.StakingKeeper, app.UpgradeKeeper, scopedIBCKeeper, + // ) // Configure the hooks keeper hooksKeeper := ibchookskeeper.NewKeeper( @@ -544,10 +559,11 @@ func New( app.GetSubspace(ibctransfertypes.ModuleName), &rateLimitingTransferModule, app.IBCKeeper.ChannelKeeper, - &app.IBCKeeper.PortKeeper, + app.IBCKeeper.PortKeeper, app.AccountKeeper, app.BankKeeper, scopedTransferKeeper, + govAuthority, ) app.TransferKeeper = &transferKeeper transferModule := ibctransfer.NewIBCModule(*app.TransferKeeper) @@ -568,9 +584,9 @@ func New( ) markerReqAttrBypassAddrs := []sdk.AccAddress{ - authtypes.NewModuleAddress(authtypes.FeeCollectorName), // Allow collecting fees in restricted coins. - authtypes.NewModuleAddress(rewardtypes.ModuleName), // Allow rewards to hold onto restricted coins. - authtypes.NewModuleAddress(quarantine.ModuleName), // Allow quarantine to hold onto restricted coins. + authtypes.NewModuleAddress(authtypes.FeeCollectorName), // Allow collecting fees in restricted coins. + authtypes.NewModuleAddress(rewardtypes.ModuleName), // Allow rewards to hold onto restricted coins. + // authtypes.NewModuleAddress(quarantine.ModuleName), // Allow quarantine to hold onto restricted coins. // TODO[1760]: quarantine authtypes.NewModuleAddress(govtypes.ModuleName), // Allow restricted coins in deposits. authtypes.NewModuleAddress(distrtypes.ModuleName), // Allow fee denoms to be restricted coins. authtypes.NewModuleAddress(stakingtypes.BondedPoolName), // Allow bond denom to be a restricted coin. @@ -591,26 +607,30 @@ func New( app.AccountKeeper, app.AttributeKeeper, app.BankKeeper, app.HoldKeeper, app.MarkerKeeper, ) - pioMessageRouter := MessageRouterFunc(func(msg sdk.Msg) baseapp.MsgServiceHandler { - return pioMsgFeesRouter.Handler(msg) - }) - app.TriggerKeeper = triggerkeeper.NewKeeper(appCodec, keys[triggertypes.StoreKey], app.MsgServiceRouter()) - icaHostKeeper := icahostkeeper.NewKeeper( - appCodec, keys[icahosttypes.StoreKey], app.GetSubspace(icahosttypes.SubModuleName), - app.IBCKeeper.ChannelKeeper, app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper, - app.AccountKeeper, scopedICAHostKeeper, pioMessageRouter, - ) - app.ICAHostKeeper = &icaHostKeeper - icaModule := ica.NewAppModule(nil, app.ICAHostKeeper) - icaHostIBCModule := icahost.NewIBCModule(*app.ICAHostKeeper) - - app.ICQKeeper = icqkeeper.NewKeeper( - appCodec, keys[icqtypes.StoreKey], app.GetSubspace(icqtypes.ModuleName), - app.IBCKeeper.ChannelKeeper, app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper, - scopedICQKeeper, app.BaseApp.GRPCQueryRouter(), - ) - icqModule := icq.NewAppModule(app.ICQKeeper) - icqIBCModule := icq.NewIBCModule(app.ICQKeeper) + // TODO[1760]: msg-service-router: Put the pioMessageRouter back into use (and the ica host module back in). + /* + pioMessageRouter := MessageRouterFunc(func(msg sdk.Msg) baseapp.MsgServiceHandler { + return pioMsgFeesRouter.Handler(msg) + }) + app.TriggerKeeper = triggerkeeper.NewKeeper(appCodec, keys[triggertypes.StoreKey], app.MsgServiceRouter()) + icaHostKeeper := icahostkeeper.NewKeeper( + appCodec, keys[icahosttypes.StoreKey], app.GetSubspace(icahosttypes.SubModuleName), + app.IBCKeeper.ChannelKeeper, app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper, + app.AccountKeeper, scopedICAHostKeeper, pioMessageRouter, + ) + app.ICAHostKeeper = &icaHostKeeper + icaModule := ica.NewAppModule(nil, app.ICAHostKeeper) + icaHostIBCModule := icahost.NewIBCModule(*app.ICAHostKeeper) + */ + + // TODO[1760]: async-icq + // app.ICQKeeper = icqkeeper.NewKeeper( + // appCodec, keys[icqtypes.StoreKey], app.GetSubspace(icqtypes.ModuleName), + // app.IBCKeeper.ChannelKeeper, app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper, + // scopedICQKeeper, app.BaseApp.GRPCQueryRouter(), + //) + // icqModule := icq.NewAppModule(app.ICQKeeper) + // icqIBCModule := icq.NewIBCModule(app.ICQKeeper) // Init CosmWasm module wasmDir := filepath.Join(homePath, "data", "wasm") @@ -643,28 +663,33 @@ func New( // The last arguments contain custom message handlers, and custom query handlers, // to allow smart contracts to use provenance modules. - wasmKeeperInstance := wasm.NewKeeper( - appCodec, - keys[wasm.StoreKey], - app.GetSubspace(wasm.ModuleName), - app.AccountKeeper, - app.BankKeeper, - app.StakingKeeper, - app.DistrKeeper, - app.IBCKeeper.ChannelKeeper, - &app.IBCKeeper.PortKeeper, - scopedWasmKeeper, - app.TransferKeeper, - pioMessageRouter, - app.GRPCQueryRouter(), - wasmDir, - wasmConfig, - supportedFeatures, - authtypes.NewModuleAddress(govtypes.ModuleName).String(), - wasmkeeper.WithQueryPlugins(provwasm.QueryPlugins(querierRegistry, *app.GRPCQueryRouter(), appCodec)), - wasmkeeper.WithMessageEncoders(provwasm.MessageEncoders(encoderRegistry, logger)), - ) - app.WasmKeeper = &wasmKeeperInstance + // TODO[1760]: wasm: Figure out the replacement for NewKeeper. + _, _ = scopedWasmKeeper, supportedFeatures + _, _ = wasmDir, wasmConfig + /* + wasmKeeperInstance := wasm.NewKeeper( + appCodec, + keys[wasm.StoreKey], + app.GetSubspace(wasm.ModuleName), + app.AccountKeeper, + app.BankKeeper, + app.StakingKeeper, + app.DistrKeeper, + app.IBCKeeper.ChannelKeeper, + &app.IBCKeeper.PortKeeper, + scopedWasmKeeper, + app.TransferKeeper, + // pioMessageRouter, // TODO[1760]: msg-service-router + app.GRPCQueryRouter(), + wasmDir, + wasmConfig, + supportedFeatures, + authtypes.NewModuleAddress(govtypes.ModuleName).String(), + wasmkeeper.WithQueryPlugins(provwasm.QueryPlugins(querierRegistry, *app.GRPCQueryRouter(), appCodec)), + wasmkeeper.WithMessageEncoders(provwasm.MessageEncoders(encoderRegistry, logger)), + ) + app.WasmKeeper = &wasmKeeperInstance + */ // Pass the wasm keeper to all the wrappers that need it app.ContractKeeper = wasmkeeper.NewDefaultPermissionKeeper(app.WasmKeeper) @@ -682,86 +707,88 @@ func New( keys[oracletypes.MemStoreKey], app.IBCKeeper.ChannelKeeper, app.IBCKeeper.ChannelKeeper, - &app.IBCKeeper.PortKeeper, + app.IBCKeeper.PortKeeper, scopedOracleKeeper, wasmkeeper.Querier(app.WasmKeeper), ) oracleModule := oraclemodule.NewAppModule(appCodec, app.OracleKeeper, app.AccountKeeper, app.BankKeeper, app.IBCKeeper.ChannelKeeper) - unsanctionableAddrs := make([]sdk.AccAddress, 0, len(maccPerms)+1) - for mName := range maccPerms { - unsanctionableAddrs = append(unsanctionableAddrs, authtypes.NewModuleAddress(mName)) - } - unsanctionableAddrs = append(unsanctionableAddrs, authtypes.NewModuleAddress(quarantine.ModuleName)) - app.SanctionKeeper = sanctionkeeper.NewKeeper(appCodec, keys[sanction.StoreKey], - app.BankKeeper, &app.GovKeeper, - authtypes.NewModuleAddress(govtypes.ModuleName).String(), unsanctionableAddrs) + // TODO[1760]: sanction + // unsanctionableAddrs := make([]sdk.AccAddress, 0, len(maccPerms)+1) + // for mName := range maccPerms { + // unsanctionableAddrs = append(unsanctionableAddrs, authtypes.NewModuleAddress(mName)) + // } + // unsanctionableAddrs = append(unsanctionableAddrs, authtypes.NewModuleAddress(quarantine.ModuleName)) + // app.SanctionKeeper = sanctionkeeper.NewKeeper(appCodec, keys[sanction.StoreKey], + // app.BankKeeper, &app.GovKeeper, + // authtypes.NewModuleAddress(govtypes.ModuleName).String(), unsanctionableAddrs) // register the proposal types govRouter := govtypesv1beta1.NewRouter() govRouter.AddRoute(govtypes.RouterKey, govtypesv1beta1.ProposalHandler). AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(app.ParamsKeeper)). - AddRoute(distrtypes.RouterKey, distr.NewCommunityPoolSpendProposalHandler(app.DistrKeeper)). - AddRoute(upgradetypes.RouterKey, upgrade.NewSoftwareUpgradeProposalHandler(app.UpgradeKeeper)). AddRoute(ibcclienttypes.RouterKey, ibcclient.NewClientProposalHandler(app.IBCKeeper.ClientKeeper)). - AddRoute(wasm.RouterKey, wasm.NewWasmProposalHandler(app.WasmKeeper, wasm.EnableAllProposals)). + // AddRoute(wasm.RouterKey, wasm.NewWasmProposalHandler(app.WasmKeeper, wasm.EnableAllProposals)). // TODO[1760]: wasm AddRoute(nametypes.ModuleName, name.NewProposalHandler(app.NameKeeper)). AddRoute(markertypes.ModuleName, marker.NewProposalHandler(app.MarkerKeeper)). AddRoute(msgfeestypes.ModuleName, msgfees.NewProposalHandler(app.MsgFeesKeeper, app.InterfaceRegistry())) - app.GovKeeper = govkeeper.NewKeeper( - appCodec, keys[govtypes.StoreKey], app.GetSubspace(govtypes.ModuleName), app.AccountKeeper, app.BankKeeper, - &stakingKeeper, govRouter, app.BaseApp.MsgServiceRouter(), govtypes.Config{MaxMetadataLen: 10000}, - ) - app.GovKeeper.SetHooks(govtypes.NewMultiGovHooks(app.SanctionKeeper)) + // TODO[1760]: gov: Put back this call to NewKeeper with fixed arguments. + // app.GovKeeper = govkeeper.NewKeeper( + // appCodec, keys[govtypes.StoreKey], app.GetSubspace(govtypes.ModuleName), app.AccountKeeper, app.BankKeeper, + // &stakingKeeper, govRouter, app.BaseApp.MsgServiceRouter(), govtypes.Config{MaxMetadataLen: 10000}, + // ) + // app.GovKeeper.SetHooks(govtypes.NewMultiGovHooks(app.SanctionKeeper)) // TODO[1760]: sanction // Create static IBC router, add transfer route, then set and seal it ibcRouter := porttypes.NewRouter() ibcRouter. AddRoute(ibctransfertypes.ModuleName, app.TransferStack). AddRoute(wasm.ModuleName, wasm.NewIBCHandler(app.WasmKeeper, app.IBCKeeper.ChannelKeeper, app.IBCKeeper.ChannelKeeper)). - AddRoute(icahosttypes.SubModuleName, icaHostIBCModule). - AddRoute(icqtypes.ModuleName, icqIBCModule). + // AddRoute(icahosttypes.SubModuleName, icaHostIBCModule). // TODO[1760]: ica-host + // AddRoute(icqtypes.ModuleName, icqIBCModule). // TODO[1760]: async-icq AddRoute(oracletypes.ModuleName, oracleModule) app.IBCKeeper.SetRouter(ibcRouter) // Create evidence Keeper for to register the IBC light client misbehavior evidence route - evidenceKeeper := evidencekeeper.NewKeeper( - appCodec, keys[evidencetypes.StoreKey], &app.StakingKeeper, app.SlashingKeeper, - ) + // TODO[1760]: evidence: Put back this call to NewKeeper with fixed arguments. + // evidenceKeeper := evidencekeeper.NewKeeper( + // appCodec, keys[evidencetypes.StoreKey], &app.StakingKeeper, app.SlashingKeeper, + // ) // If evidence needs to be handled for the app, set routes in router here and seal - app.EvidenceKeeper = *evidenceKeeper + // app.EvidenceKeeper = *evidenceKeeper // TODO[1760]: evidence - app.QuarantineKeeper = quarantinekeeper.NewKeeper(appCodec, keys[quarantine.StoreKey], app.BankKeeper, authtypes.NewModuleAddress(quarantine.ModuleName)) + // app.QuarantineKeeper = quarantinekeeper.NewKeeper(appCodec, keys[quarantine.StoreKey], app.BankKeeper, authtypes.NewModuleAddress(quarantine.ModuleName)) // TODO[1760]: quarantine /**** Module Options ****/ // NOTE: we may consider parsing `appOpts` inside module constructors. For the moment // we prefer to be more strict in what arguments the modules expect. var skipGenesisInvariants = cast.ToBool(appOpts.Get(crisis.FlagSkipGenesisInvariants)) + _ = skipGenesisInvariants // TODO[1760]: crisis // NOTE: Any module instantiated in the module manager that is later modified // must be passed by reference here. app.mm = module.NewManager( - genutil.NewAppModule(app.AccountKeeper, app.StakingKeeper, app.BaseApp.DeliverTx, encodingConfig.TxConfig), - auth.NewAppModule(appCodec, app.AccountKeeper, nil), + genutil.NewAppModule(app.AccountKeeper, app.StakingKeeper, app.BaseApp, encodingConfig.TxConfig), + // auth.NewAppModule(appCodec, app.AccountKeeper, nil), // TODO[1760]: auth vesting.NewAppModule(app.AccountKeeper, app.BankKeeper), - bank.NewAppModule(appCodec, app.BankKeeper, app.AccountKeeper), - capability.NewAppModule(appCodec, *app.CapabilityKeeper), - crisis.NewAppModule(&app.CrisisKeeper, skipGenesisInvariants), + // bank.NewAppModule(appCodec, app.BankKeeper, app.AccountKeeper), // TODO[1760]: bank + // capability.NewAppModule(appCodec, *app.CapabilityKeeper), // TODO[1760]: capability + // crisis.NewAppModule(&app.CrisisKeeper, skipGenesisInvariants), // TODO[1760]: crisis feegrantmodule.NewAppModule(appCodec, app.AccountKeeper, app.BankKeeper, app.FeeGrantKeeper, app.interfaceRegistry), - gov.NewAppModule(appCodec, app.GovKeeper, app.AccountKeeper, app.BankKeeper), - mint.NewAppModule(appCodec, app.MintKeeper, app.AccountKeeper, nil), - slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper), - distr.NewAppModule(appCodec, app.DistrKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper), - staking.NewAppModule(appCodec, app.StakingKeeper, app.AccountKeeper, app.BankKeeper), - upgrade.NewAppModule(app.UpgradeKeeper), + // gov.NewAppModule(appCodec, app.GovKeeper, app.AccountKeeper, app.BankKeeper), // TODO[1760]: gov + // mint.NewAppModule(appCodec, app.MintKeeper, app.AccountKeeper, nil), // TODO[1760]: mint + // slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper), // TODO[1760]: slashing + // distr.NewAppModule(appCodec, app.DistrKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper), // TODO[1760]: distr + // staking.NewAppModule(appCodec, app.StakingKeeper, app.AccountKeeper, app.BankKeeper), // TODO[1760]: staking + // upgrade.NewAppModule(app.UpgradeKeeper), // TODO[1760]: upgrade evidence.NewAppModule(app.EvidenceKeeper), params.NewAppModule(app.ParamsKeeper), authzmodule.NewAppModule(appCodec, app.AuthzKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry), groupmodule.NewAppModule(appCodec, app.GroupKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry), - quarantinemodule.NewAppModule(appCodec, app.QuarantineKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry), - sanctionmodule.NewAppModule(appCodec, app.SanctionKeeper, app.AccountKeeper, app.BankKeeper, app.GovKeeper, app.interfaceRegistry), + // quarantinemodule.NewAppModule(appCodec, app.QuarantineKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry), // TODO[1760]: quarantine + // sanctionmodule.NewAppModule(appCodec, app.SanctionKeeper, app.AccountKeeper, app.BankKeeper, app.GovKeeper, app.interfaceRegistry), // TODO[1760]: sanction // PROVENANCE metadata.NewAppModule(appCodec, app.MetadataKeeper, app.AccountKeeper), @@ -769,7 +796,7 @@ func New( name.NewAppModule(appCodec, app.NameKeeper, app.AccountKeeper, app.BankKeeper), attribute.NewAppModule(appCodec, app.AttributeKeeper, app.AccountKeeper, app.BankKeeper, app.NameKeeper), msgfeesmodule.NewAppModule(appCodec, app.MsgFeesKeeper, app.interfaceRegistry), - wasm.NewAppModule(appCodec, app.WasmKeeper, app.StakingKeeper, app.AccountKeeper, app.BankKeeper), + // wasm.NewAppModule(appCodec, app.WasmKeeper, app.StakingKeeper, app.AccountKeeper, app.BankKeeper), // TODO[1760]: wasm rewardmodule.NewAppModule(appCodec, app.RewardKeeper, app.AccountKeeper, app.BankKeeper), triggermodule.NewAppModule(appCodec, app.TriggerKeeper, app.AccountKeeper, app.BankKeeper), oracleModule, @@ -781,10 +808,28 @@ func New( ibcratelimitmodule.NewAppModule(appCodec, *app.RateLimitingKeeper, app.AccountKeeper, app.BankKeeper), ibchooks.NewAppModule(app.AccountKeeper, *app.IBCHooksKeeper), ibctransfer.NewAppModule(*app.TransferKeeper), - icqModule, - icaModule, + // icqModule, // TODO[1760]: async-icq + // icaModule, // TODO[1760]: ica-host ) + // TODO[1760]: app-module: BasicModuleManager: Make sure that this setup has everything we need (it was just copied from the SDK). + // BasicModuleManager defines the module BasicManager is in charge of setting up basic, + // non-dependant module elements, such as codec registration and genesis verification. + // By default it is composed of all the module from the module manager. + // Additionally, app module basics can be overwritten by passing them as argument. + app.BasicModuleManager = module.NewBasicManagerFromManager( + app.mm, + map[string]module.AppModuleBasic{ + genutiltypes.ModuleName: genutil.NewAppModuleBasic(genutiltypes.DefaultMessageValidator), + govtypes.ModuleName: gov.NewAppModuleBasic( + []govclient.ProposalHandler{ + paramsclient.ProposalHandler, + }, + ), + }) + app.BasicModuleManager.RegisterLegacyAminoCodec(legacyAmino) + app.BasicModuleManager.RegisterInterfaces(interfaceRegistry) + // 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. @@ -797,7 +842,7 @@ func New( slashingtypes.ModuleName, evidencetypes.ModuleName, stakingtypes.ModuleName, - ibchost.ModuleName, + // ibchost.ModuleName, // TODO[1760]: ibc-host markertypes.ModuleName, icatypes.ModuleName, attributetypes.ModuleName, @@ -821,11 +866,11 @@ func New( ibcratelimit.ModuleName, ibchookstypes.ModuleName, ibctransfertypes.ModuleName, - icqtypes.ModuleName, + // icqtypes.ModuleName, // TODO[1760]: async-icq nametypes.ModuleName, vestingtypes.ModuleName, - quarantine.ModuleName, - sanction.ModuleName, + // quarantine.ModuleName, // TODO[1760]: quarantine + // sanction.ModuleName, // TODO[1760]: sanction hold.ModuleName, exchange.ModuleName, ) @@ -848,11 +893,11 @@ func New( oracletypes.ModuleName, nametypes.ModuleName, genutiltypes.ModuleName, - ibchost.ModuleName, + // ibchost.ModuleName, // TODO[1760]: ibc-host ibcratelimit.ModuleName, ibchookstypes.ModuleName, ibctransfertypes.ModuleName, - icqtypes.ModuleName, + // icqtypes.ModuleName, // TODO[1760]: async-icq msgfeestypes.ModuleName, wasm.ModuleName, slashingtypes.ModuleName, @@ -865,8 +910,8 @@ func New( markertypes.ModuleName, feegrant.ModuleName, paramstypes.ModuleName, - quarantine.ModuleName, - sanction.ModuleName, + // quarantine.ModuleName, // TODO[1760]: quarantine + // sanction.ModuleName, // TODO[1760]: sanction hold.ModuleName, exchange.ModuleName, ) @@ -892,8 +937,8 @@ func New( authz.ModuleName, group.ModuleName, feegrant.ModuleName, - quarantine.ModuleName, - sanction.ModuleName, + // quarantine.ModuleName, // TODO[1760]: quarantine + // sanction.ModuleName, // TODO[1760]: sanction nametypes.ModuleName, attributetypes.ModuleName, @@ -902,9 +947,9 @@ func New( hold.ModuleName, exchange.ModuleName, // must be after the hold module. - ibchost.ModuleName, + // ibchost.ModuleName, // TODO[1760]: ibc-host ibctransfertypes.ModuleName, - icqtypes.ModuleName, + // icqtypes.ModuleName, // TODO[1760]: async-icq icatypes.ModuleName, ibcratelimit.ModuleName, ibchookstypes.ModuleName, @@ -931,7 +976,7 @@ func New( feegrant.ModuleName, genutiltypes.ModuleName, govtypes.ModuleName, - ibchost.ModuleName, + // ibchost.ModuleName, // TODO[1760]: ibc-host minttypes.ModuleName, paramstypes.ModuleName, slashingtypes.ModuleName, @@ -939,15 +984,15 @@ func New( ibctransfertypes.ModuleName, upgradetypes.ModuleName, vestingtypes.ModuleName, - quarantine.ModuleName, - sanction.ModuleName, + // quarantine.ModuleName, // TODO[1760]: quarantine + // sanction.ModuleName, // TODO[1760]: sanction hold.ModuleName, exchange.ModuleName, ibcratelimit.ModuleName, ibchookstypes.ModuleName, icatypes.ModuleName, - icqtypes.ModuleName, + // icqtypes.ModuleName, // TODO[1760]: async-icq wasm.ModuleName, attributetypes.ModuleName, @@ -964,26 +1009,25 @@ func New( ) app.mm.RegisterInvariants(&app.CrisisKeeper) - app.mm.RegisterRoutes(app.Router(), app.QueryRouter(), encodingConfig.Amino) app.configurator = module.NewConfigurator(app.appCodec, app.BaseApp.MsgServiceRouter(), app.GRPCQueryRouter()) app.mm.RegisterServices(app.configurator) app.sm = module.NewSimulationManager( - auth.NewAppModule(appCodec, app.AccountKeeper, authsims.RandomGenesisAccounts), - bank.NewAppModule(appCodec, app.BankKeeper, app.AccountKeeper), - capability.NewAppModule(appCodec, *app.CapabilityKeeper), + // auth.NewAppModule(appCodec, app.AccountKeeper, authsims.RandomGenesisAccounts), // TODO[1760]: auth + // bank.NewAppModule(appCodec, app.BankKeeper, app.AccountKeeper), // TODO[1760]: bank + // capability.NewAppModule(appCodec, *app.CapabilityKeeper), // TODO[1760]: capability feegrantmodule.NewAppModule(appCodec, app.AccountKeeper, app.BankKeeper, app.FeeGrantKeeper, app.interfaceRegistry), - gov.NewAppModule(appCodec, app.GovKeeper, app.AccountKeeper, app.BankKeeper), - mint.NewAppModule(appCodec, app.MintKeeper, app.AccountKeeper, nil), - staking.NewAppModule(appCodec, app.StakingKeeper, app.AccountKeeper, app.BankKeeper), - distr.NewAppModule(appCodec, app.DistrKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper), - slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper), + // gov.NewAppModule(appCodec, app.GovKeeper, app.AccountKeeper, app.BankKeeper), // TODO[1760]: gov + // mint.NewAppModule(appCodec, app.MintKeeper, app.AccountKeeper, nil), // TODO[1760]: mint + // staking.NewAppModule(appCodec, app.StakingKeeper, app.AccountKeeper, app.BankKeeper), // TODO[1760]: staking + // distr.NewAppModule(appCodec, app.DistrKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper), // TODO[1760]: distr + // slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper), // TODO[1760]: slashing params.NewAppModule(app.ParamsKeeper), evidence.NewAppModule(app.EvidenceKeeper), authzmodule.NewAppModule(appCodec, app.AuthzKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry), groupmodule.NewAppModule(appCodec, app.GroupKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry), - quarantinemodule.NewAppModule(appCodec, app.QuarantineKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry), - sanctionmodule.NewAppModule(appCodec, app.SanctionKeeper, app.AccountKeeper, app.BankKeeper, app.GovKeeper, app.interfaceRegistry), + // quarantinemodule.NewAppModule(appCodec, app.QuarantineKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry), // TODO[1760]: quarantine + // sanctionmodule.NewAppModule(appCodec, app.SanctionKeeper, app.AccountKeeper, app.BankKeeper, app.GovKeeper, app.interfaceRegistry), // TODO[1760]: sanction metadata.NewAppModule(appCodec, app.MetadataKeeper, app.AccountKeeper), marker.NewAppModule(appCodec, app.MarkerKeeper, app.AccountKeeper, app.BankKeeper, app.FeeGrantKeeper, app.GovKeeper, app.AttributeKeeper, app.interfaceRegistry), @@ -1002,7 +1046,7 @@ func New( ibcratelimitmodule.NewAppModule(appCodec, *app.RateLimitingKeeper, app.AccountKeeper, app.BankKeeper), ibchooks.NewAppModule(app.AccountKeeper, *app.IBCHooksKeeper), ibctransfer.NewAppModule(*app.TransferKeeper), - icaModule, + // icaModule, // TODO[1760]: ica-host ) app.sm.RegisterStoreDecoders() @@ -1017,34 +1061,37 @@ func New( app.SetBeginBlocker(app.BeginBlocker) anteHandler, err := antewrapper.NewAnteHandler( antewrapper.HandlerOptions{ - AccountKeeper: app.AccountKeeper, - BankKeeper: app.BankKeeper, - SignModeHandler: encodingConfig.TxConfig.SignModeHandler(), - FeegrantKeeper: app.FeeGrantKeeper, - MsgFeesKeeper: app.MsgFeesKeeper, - SigGasConsumer: ante.DefaultSigVerificationGasConsumer, + AccountKeeper: app.AccountKeeper, + BankKeeper: app.BankKeeper, + TxSigningHandlerMap: encodingConfig.TxConfig.SignModeHandler(), + FeegrantKeeper: app.FeeGrantKeeper, + MsgFeesKeeper: app.MsgFeesKeeper, + SigGasConsumer: ante.DefaultSigVerificationGasConsumer, }) if err != nil { panic(err) } app.SetAnteHandler(anteHandler) - msgfeehandler, err := piohandlers.NewAdditionalMsgFeeHandler(piohandlers.PioBaseAppKeeperOptions{ - AccountKeeper: app.AccountKeeper, - BankKeeper: app.BankKeeper, - FeegrantKeeper: app.FeeGrantKeeper, - MsgFeesKeeper: app.MsgFeesKeeper, - Decoder: encodingConfig.TxConfig.TxDecoder(), - }) + // TODO[1760]: fee-handler: Add the msgfeehandler back to the app. + /* + msgFeeHandler, err := piohandlers.NewAdditionalMsgFeeHandler(piohandlers.PioBaseAppKeeperOptions{ + AccountKeeper: app.AccountKeeper, + BankKeeper: app.BankKeeper, + FeegrantKeeper: app.FeeGrantKeeper, + MsgFeesKeeper: app.MsgFeesKeeper, + Decoder: encodingConfig.TxConfig.TxDecoder(), + }) - if err != nil { - panic(err) - } - app.SetFeeHandler(msgfeehandler) + if err != nil { + panic(err) + } + app.SetFeeHandler(msgFeeHandler) + */ app.SetEndBlocker(app.EndBlocker) - app.SetAggregateEventsFunc(piohandlers.AggregateEvents) + // app.SetAggregateEventsFunc(piohandlers.AggregateEvents) // TODO[1760]: event-history // Add upgrade plans for each release. This must be done before the baseapp seals via LoadLatestVersion() down below. InstallCustomUpgradeHandlers(app) @@ -1081,13 +1128,13 @@ func New( if loadLatest { if err := app.LoadLatestVersion(); err != nil { - tmos.Exit(err.Error()) + cmtos.Exit(err.Error()) } } app.ScopedIBCKeeper = scopedIBCKeeper app.ScopedTransferKeeper = scopedTransferKeeper - app.ScopedICQKeeper = scopedICQKeeper + // app.ScopedICQKeeper = scopedICQKeeper // TODO[1760]: async-icq app.ScopedICAHostKeeper = scopedICAHostKeeper return app @@ -1122,17 +1169,17 @@ func (app *App) GetTxConfig() client.TxConfig { func (app *App) Name() string { return app.BaseApp.Name() } // BeginBlocker application updates every begin block -func (app *App) BeginBlocker(ctx sdk.Context, req abci.RequestBeginBlock) abci.ResponseBeginBlock { - return app.mm.BeginBlock(ctx, req) +func (app *App) BeginBlocker(ctx sdk.Context) (sdk.BeginBlock, error) { + return app.mm.BeginBlock(ctx) } // EndBlocker application updates every end block -func (app *App) EndBlocker(ctx sdk.Context, req abci.RequestEndBlock) abci.ResponseEndBlock { - return app.mm.EndBlock(ctx, req) +func (app *App) EndBlocker(ctx sdk.Context) (sdk.EndBlock, error) { + return app.mm.EndBlock(ctx) } // InitChainer application update at chain initialization -func (app *App) InitChainer(ctx sdk.Context, req abci.RequestInitChain) abci.ResponseInitChain { +func (app *App) InitChainer(ctx sdk.Context, req *abci.RequestInitChain) (*abci.ResponseInitChain, error) { var genesisState GenesisState if err := json.Unmarshal(req.AppStateBytes, &genesisState); err != nil { panic(err) @@ -1177,6 +1224,11 @@ func (app *App) InterfaceRegistry() types.InterfaceRegistry { return app.interfaceRegistry } +// DefaultGenesis returns a default genesis from the registered AppModuleBasic's. +func (a *App) DefaultGenesis() map[string]json.RawMessage { + return a.BasicModuleManager.DefaultGenesis(a.appCodec) +} + // GetKey returns the KVStoreKey for the provided store key. // // NOTE: This is solely to be used for testing purposes. @@ -1213,13 +1265,13 @@ func (app *App) SimulationManager() *module.SimulationManager { // RegisterAPIRoutes registers all application module routes with the provided // API server. -func (app *App) RegisterAPIRoutes(apiSvr *api.Server, apiConfig config.APIConfig) { +func (app *App) RegisterAPIRoutes(apiSvr *api.Server, apiConfig serverconfig.APIConfig) { clientCtx := apiSvr.ClientCtx // Register new tx routes from grpc-gateway. authtx.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter) // Register new tendermint queries routes from grpc-gateway. - tmservice.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter) + cmtservice.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter) // Register node gRPC service for grpc-gateway. nodeservice.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter) @@ -1240,35 +1292,42 @@ func (app *App) RegisterTxService(clientCtx client.Context) { // RegisterTendermintService implements the Application.RegisterTendermintService method. func (app *App) RegisterTendermintService(clientCtx client.Context) { - tmservice.RegisterTendermintService(clientCtx, app.BaseApp.GRPCQueryRouter(), app.interfaceRegistry, app.Query) + cmtservice.RegisterTendermintService(clientCtx, app.BaseApp.GRPCQueryRouter(), app.interfaceRegistry, app.Query) } // RegisterNodeService registers the node query server. -func (app *App) RegisterNodeService(clientCtx client.Context) { - nodeservice.RegisterNodeService(clientCtx, app.GRPCQueryRouter()) +func (app *App) RegisterNodeService(clientCtx client.Context, cfg serverconfig.Config) { + nodeservice.RegisterNodeService(clientCtx, app.GRPCQueryRouter(), cfg) } // RegisterStreamingServices registers types.ABCIListener State Listening services with the App. func (app *App) RegisterStreamingServices(appOpts servertypes.AppOptions) { - // register streaming services - streamingCfg := cast.ToStringMap(appOpts.Get(baseapp.StreamingTomlKey)) - for service := range streamingCfg { - pluginKey := fmt.Sprintf("%s.%s.%s", baseapp.StreamingTomlKey, service, baseapp.StreamingABCIPluginTomlKey) - pluginName := strings.TrimSpace(cast.ToString(appOpts.Get(pluginKey))) - if len(pluginName) > 0 { - logLevel := cast.ToString(appOpts.Get(flags.FlagLogLevel)) - plugin, err := streaming.NewStreamingPlugin(pluginName, logLevel) - if err != nil { - app.Logger().Error("failed to load streaming plugin", "error", err) - os.Exit(1) - } - if err := baseapp.RegisterStreamingPlugin(app.BaseApp, appOpts, app.keys, plugin); err != nil { - app.Logger().Error("failed to register streaming plugin", "error", err) - os.Exit(1) + // TODO[1760]: streaming: Ensure that this change is correct. + if err := app.BaseApp.RegisterStreamingServices(appOpts, app.keys); err != nil { + app.Logger().Error("failed to register streaming plugin", "error", err) + os.Exit(1) + } + /* + // register streaming services + streamingCfg := cast.ToStringMap(appOpts.Get(baseapp.StreamingTomlKey)) + for service := range streamingCfg { + pluginKey := fmt.Sprintf("%s.%s.%s", baseapp.StreamingTomlKey, service, baseapp.StreamingABCIPluginTomlKey) + pluginName := strings.TrimSpace(cast.ToString(appOpts.Get(pluginKey))) + if len(pluginName) > 0 { + logLevel := cast.ToString(appOpts.Get(flags.FlagLogLevel)) + plugin, err := streaming.NewStreamingPlugin(pluginName, logLevel) + if err != nil { + app.Logger().Error("failed to load streaming plugin", "error", err) + os.Exit(1) + } + if err := app.BaseApp.RegisterStreamingServices(appOpts, app.keys, plugin); err != nil { + app.Logger().Error("failed to register streaming plugin", "error", err) + os.Exit(1) + } + app.Logger().Info("streaming service registered", "service", service, "plugin", pluginName) } - app.Logger().Info("streaming service registered", "service", service, "plugin", pluginName) } - } + */ } // RegisterSwaggerAPI registers swagger route with API Server @@ -1304,20 +1363,20 @@ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino paramsKeeper.Subspace(govtypes.ModuleName).WithKeyTable(govtypesv1.ParamKeyTable()) paramsKeeper.Subspace(crisistypes.ModuleName) - paramsKeeper.Subspace(metadatatypes.ModuleName) - paramsKeeper.Subspace(markertypes.ModuleName) - paramsKeeper.Subspace(nametypes.ModuleName) - paramsKeeper.Subspace(attributetypes.ModuleName) - paramsKeeper.Subspace(msgfeestypes.ModuleName) + paramsKeeper.Subspace(metadatatypes.ModuleName) // TODO[1760]: params: Migrate metadata params. + paramsKeeper.Subspace(markertypes.ModuleName) // TODO[1760]: params: Migrate marker params. + paramsKeeper.Subspace(nametypes.ModuleName) // TODO[1760]: params: Migrate name params. + paramsKeeper.Subspace(attributetypes.ModuleName) // TODO[1760]: params: Migrate attribute params. + paramsKeeper.Subspace(msgfeestypes.ModuleName) // TODO[1760]: params: Migrate msgFees params. paramsKeeper.Subspace(wasm.ModuleName) - paramsKeeper.Subspace(rewardtypes.ModuleName) - paramsKeeper.Subspace(triggertypes.ModuleName) + paramsKeeper.Subspace(rewardtypes.ModuleName) // TODO[1760]: params: Migrate reward params. + paramsKeeper.Subspace(triggertypes.ModuleName) // TODO[1760]: params: Migrate trigger params. - paramsKeeper.Subspace(ibctransfertypes.ModuleName) - paramsKeeper.Subspace(ibchost.ModuleName) - paramsKeeper.Subspace(icahosttypes.SubModuleName) - paramsKeeper.Subspace(icqtypes.ModuleName) - paramsKeeper.Subspace(ibchookstypes.ModuleName) + paramsKeeper.Subspace(ibctransfertypes.ModuleName) // TODO[1760]: params: Migrate ibc-transfer params. + // paramsKeeper.Subspace(ibchost.ModuleName) // TODO[1760]: params: Migrate ibc-host params. + paramsKeeper.Subspace(icahosttypes.SubModuleName) // TODO[1760]: params: Migrate ica-host params. + // paramsKeeper.Subspace(icqtypes.ModuleName) // TODO[1760]: params: Migrate icq params. + paramsKeeper.Subspace(ibchookstypes.ModuleName) // TODO[1760]: params: Migrate ibc-hooks params. return paramsKeeper } @@ -1358,11 +1417,11 @@ func (app *App) injectUpgrade(name string) { //nolint:unused // This is designed } // Define a new BeginBlocker that will inject the upgrade. injected := false - app.SetBeginBlocker(func(ctx sdk.Context, req abci.RequestBeginBlock) abci.ResponseBeginBlock { + app.SetBeginBlocker(func(ctx sdk.Context) (sdk.BeginBlock, error) { if !injected { app.Logger().Info("Injecting upgrade plan", "plan", plan) // Ideally, we'd just call ScheduleUpgrade(ctx, plan) here (and panic on error). - // But the upgrade keeper has a migration in v0.46 that changes some store key stuff. + // But the upgrade keeper often its own migration stuff that change some store key stuff. // ScheduleUpgrade tries to read some of that changed store stuff and fails if the migration hasn't // been applied yet. So we're doing things the hard way here. app.UpgradeKeeper.ClearUpgradePlan(ctx) @@ -1371,6 +1430,6 @@ func (app *App) injectUpgrade(name string) { //nolint:unused // This is designed store.Set(upgradetypes.PlanKey(), bz) injected = true } - return app.BeginBlocker(ctx, req) + return app.BeginBlocker(ctx) }) } diff --git a/app/app_test.go b/app/app_test.go index cbf4126006..3e8de81cc8 100644 --- a/app/app_test.go +++ b/app/app_test.go @@ -3,36 +3,35 @@ package app import ( "encoding/json" "fmt" - "os" "sort" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "cosmossdk.io/log" + sdkmath "cosmossdk.io/math" + sdksim "cosmossdk.io/simapp" + + dbm "github.com/cosmos/cosmos-db" sdktypes "github.com/cosmos/cosmos-sdk/codec/types" - sdksim "github.com/cosmos/cosmos-sdk/simapp" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - abci "github.com/tendermint/tendermint/abci/types" - "github.com/tendermint/tendermint/libs/log" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - dbm "github.com/tendermint/tm-db" - markermodule "github.com/provenance-io/provenance/x/marker" markertypes "github.com/provenance-io/provenance/x/marker/types" ) func TestSimAppExportAndBlockedAddrs(t *testing.T) { opts := SetupOptions{ - Logger: log.NewTMLogger(log.NewSyncWriter(os.Stdout)), + Logger: log.NewTestLogger(t), DB: dbm.NewMemDB(), InvCheckPeriod: 0, HomePath: t.TempDir(), SkipUpgradeHeights: map[int64]bool{}, EncConfig: MakeEncodingConfig(), - AppOpts: sdksim.EmptyAppOptions{}, + AppOpts: simtestutil.EmptyAppOptions{}, } app := NewAppWithCustomOptions(t, false, opts) @@ -47,16 +46,16 @@ func TestSimAppExportAndBlockedAddrs(t *testing.T) { app.Commit() // Making a new app object with the db, so that initchain hasn't been called - app2 := New(log.NewTMLogger(log.NewSyncWriter(os.Stdout)), opts.DB, nil, true, - map[int64]bool{}, opts.HomePath, 0, opts.EncConfig, sdksim.EmptyAppOptions{}) + app2 := New(log.NewTestLogger(t), opts.DB, nil, true, + map[int64]bool{}, opts.HomePath, 0, opts.EncConfig, simtestutil.EmptyAppOptions{}) var err error require.NotPanics(t, func() { - _, err = app2.ExportAppStateAndValidators(false, []string{}) + _, err = app2.ExportAppStateAndValidators(false, nil, nil) }, "exporting app state at current height") require.NoError(t, err, "ExportAppStateAndValidators at current height") require.NotPanics(t, func() { - _, err = app2.ExportAppStateAndValidators(true, []string{}) + _, err = app2.ExportAppStateAndValidators(true, nil, nil) }, "exporting app state at zero height") require.NoError(t, err, "ExportAppStateAndValidators at zero height") } @@ -68,16 +67,16 @@ func TestGetMaccPerms(t *testing.T) { func TestExportAppStateAndValidators(t *testing.T) { opts := SetupOptions{ - Logger: log.NewTMLogger(log.NewSyncWriter(os.Stdout)), + Logger: log.NewTestLogger(t), DB: dbm.NewMemDB(), InvCheckPeriod: 0, HomePath: t.TempDir(), SkipUpgradeHeights: map[int64]bool{}, EncConfig: MakeEncodingConfig(), - AppOpts: sdksim.EmptyAppOptions{}, + AppOpts: simtestutil.EmptyAppOptions{}, } app := NewAppWithCustomOptions(t, false, opts) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) initAccts := app.AccountKeeper.GetAllAccounts(ctx) initAddrs := make([]sdk.AccAddress, len(initAccts)) @@ -86,7 +85,7 @@ func TestExportAppStateAndValidators(t *testing.T) { } // Create a few accounts - addrs1 := AddTestAddrs(app, ctx, 10, sdk.NewInt(5_000)) + addrs1 := AddTestAddrs(app, ctx, 10, sdkmath.NewInt(5_000)) require.Len(t, addrs1, 10, "addrs1") managerAddr := addrs1[0] @@ -109,7 +108,7 @@ func TestExportAppStateAndValidators(t *testing.T) { AccessControl: managerAllAccess, Status: markertypes.StatusProposed, Denom: denom, - Supply: sdk.NewInt(1_000_000), + Supply: sdkmath.NewInt(1_000_000), MarkerType: markertypes.MarkerType_RestrictedCoin, SupplyFixed: true, AllowGovernanceControl: true, @@ -121,13 +120,13 @@ func TestExportAppStateAndValidators(t *testing.T) { require.Len(t, markerToAddr, 3, "markerToAddr") // Create some more accounts: - addrs2 := AddTestAddrs(app, ctx, 10, sdk.NewInt(5_000)) + addrs2 := AddTestAddrs(app, ctx, 10, sdkmath.NewInt(5_000)) require.Len(t, addrs2, 10, "addrs2") // Delete one of the markers. require.NoError(t, app.MarkerKeeper.CancelMarker(ctx, managerAddr, "marker2coin"), "canceling marker2coin") require.NoError(t, app.MarkerKeeper.DeleteMarker(ctx, managerAddr, "marker2coin"), "deleting marker2coin") - markermodule.BeginBlocker(ctx, abci.RequestBeginBlock{}, app.MarkerKeeper, app.BankKeeper) + markermodule.BeginBlocker(ctx, app.MarkerKeeper, app.BankKeeper) deletedMarkerAddr := markerToAddr["marker2coin"] markerAddrs := []sdk.AccAddress{markerToAddr["marker1coin"], markerToAddr["marker3coin"]} @@ -144,7 +143,7 @@ func TestExportAppStateAndValidators(t *testing.T) { app.Commit() // Get an export - exported, err := app.ExportAppStateAndValidators(false, nil) + exported, err := app.ExportAppStateAndValidators(false, nil, nil) require.NoError(t, err, "ExportAppStateAndValidators") var genState sdksim.GenesisState @@ -153,7 +152,7 @@ func TestExportAppStateAndValidators(t *testing.T) { var authGenState authtypes.GenesisState require.NoError(t, app.appCodec.UnmarshalJSON(genState[authtypes.ModuleName], &authGenState), "unmarshalling auth gen state") - genAccounts := make([]authtypes.AccountI, len(authGenState.Accounts)) + genAccounts := make([]sdk.AccountI, len(authGenState.Accounts)) for i, acctAny := range authGenState.Accounts { switch acctAny.GetTypeUrl() { case "/cosmos.auth.v1beta1.ModuleAccount": @@ -167,7 +166,7 @@ func TestExportAppStateAndValidators(t *testing.T) { genAccounts[i] = acct } default: - acct, ok := acctAny.GetCachedValue().(authtypes.AccountI) + acct, ok := acctAny.GetCachedValue().(sdk.AccountI) if assert.Truef(t, ok, "casting entry %d to AccountI", i) { genAccounts[i] = acct } @@ -224,7 +223,7 @@ func TestExportAppStateAndValidators(t *testing.T) { }) } -func logAccounts(t *testing.T, accts []authtypes.AccountI, name string) { +func logAccounts(t *testing.T, accts []sdk.AccountI, name string) { t.Helper() for i, acctI := range accts { switch acct := acctI.(type) { @@ -240,7 +239,7 @@ func logAccounts(t *testing.T, accts []authtypes.AccountI, name string) { } } -func toBaseAccounts(t *testing.T, acctsI []authtypes.AccountI, name string) []*authtypes.BaseAccount { +func toBaseAccounts(t *testing.T, acctsI []sdk.AccountI, name string) []*authtypes.BaseAccount { t.Helper() rv := make([]*authtypes.BaseAccount, len(acctsI)) for i, acctI := range acctsI { @@ -249,7 +248,7 @@ func toBaseAccounts(t *testing.T, acctsI []authtypes.AccountI, name string) []*a return rv } -func toBaseAccount(t *testing.T, i int, acctI authtypes.AccountI, name string) *authtypes.BaseAccount { +func toBaseAccount(t *testing.T, i int, acctI sdk.AccountI, name string) *authtypes.BaseAccount { t.Helper() switch acct := acctI.(type) { case *authtypes.ModuleAccount: @@ -276,9 +275,9 @@ func logAddrs(t *testing.T, addrs []sdk.AccAddress, name string) { } } -func assertNoDupeAccountNumbers(t *testing.T, ctx sdk.Context, app *App, accts []authtypes.AccountI, name string) bool { +func assertNoDupeAccountNumbers(t *testing.T, ctx sdk.Context, app *App, accts []sdk.AccountI, name string) bool { t.Helper() - byAcctNum := map[uint64][]authtypes.AccountI{} + byAcctNum := map[uint64][]sdk.AccountI{} acctNums := []uint64{} for _, acct := range accts { acctNum := acct.GetAccountNumber() @@ -296,14 +295,12 @@ func assertNoDupeAccountNumbers(t *testing.T, ctx sdk.Context, app *App, accts [ if !assert.Equalf(t, len(byAcctNum[acctNum]), 1, "%s entries with Account Number %d", name, acctNum) { rv = false logAccounts(t, byAcctNum[acctNum], fmt.Sprintf("byAcctNum[%d]", acctNum)) - lastSet := app.AccountKeeper.GetAccountAddressByID(ctx, acctNum) - t.Logf("GetAccountAddressByID(%d): %s", acctNum, lastSet) } } return rv } -func assertAddrInAccounts(t *testing.T, addr sdk.AccAddress, addrName string, accts []authtypes.AccountI, acctsName string) bool { +func assertAddrInAccounts(t *testing.T, addr sdk.AccAddress, addrName string, accts []sdk.AccountI, acctsName string) bool { t.Helper() for _, acct := range accts { if addr.Equals(acct.GetAddress()) { @@ -313,7 +310,7 @@ func assertAddrInAccounts(t *testing.T, addr sdk.AccAddress, addrName string, ac return assert.Fail(t, fmt.Sprintf("%s address not found in %s", addrName, acctsName), addr.String()) } -func assertAddrNotInAccounts(t *testing.T, addr sdk.AccAddress, addrName string, accts []authtypes.AccountI, acctsName string) bool { +func assertAddrNotInAccounts(t *testing.T, addr sdk.AccAddress, addrName string, accts []sdk.AccountI, acctsName string) bool { t.Helper() for _, acct := range accts { if addr.Equals(acct.GetAddress()) { diff --git a/app/export.go b/app/export.go index 3797b017b8..995608898b 100644 --- a/app/export.go +++ b/app/export.go @@ -5,7 +5,9 @@ import ( "fmt" "log" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" + + storetypes "cosmossdk.io/store/types" sdkcodec "github.com/cosmos/cosmos-sdk/codec/types" servertypes "github.com/cosmos/cosmos-sdk/server/types" @@ -15,16 +17,15 @@ import ( "github.com/cosmos/cosmos-sdk/x/staking" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + "github.com/provenance-io/provenance/internal/helpers" markertypes "github.com/provenance-io/provenance/x/marker/types" ) // ExportAppStateAndValidators exports the state of the application for a genesis // file. -func (app *App) ExportAppStateAndValidators( - forZeroHeight bool, jailAllowedAddrs []string, -) (servertypes.ExportedApp, error) { +func (app *App) ExportAppStateAndValidators(forZeroHeight bool, jailAllowedAddrs, modulesToExport []string) (servertypes.ExportedApp, error) { // as if they could withdraw from the start of the next block - ctx := app.NewContext(true, tmproto.Header{Height: app.LastBlockHeight()}) + ctx := app.NewContextLegacy(true, cmtproto.Header{Height: app.LastBlockHeight()}) // We export at last height + 1, because that's the height at which // Tendermint will start InitChain. @@ -34,7 +35,10 @@ func (app *App) ExportAppStateAndValidators( app.prepForZeroHeightGenesis(ctx, jailAllowedAddrs) } - genState := app.mm.ExportGenesis(ctx, app.appCodec) + genState, err := app.mm.ExportGenesisForModules(ctx, app.appCodec, modulesToExport) + if err != nil { + return servertypes.ExportedApp{}, err + } // filter out marker accounts from auth module export if genState[auth.ModuleName] != nil { @@ -60,7 +64,7 @@ func (app *App) ExportAppStateAndValidators( return servertypes.ExportedApp{}, err } - validators, err := staking.WriteValidators(ctx, app.StakingKeeper) + validators, err := staking.WriteValidators(ctx, &app.StakingKeeper) return servertypes.ExportedApp{ AppState: appState, Validators: validators, @@ -95,13 +99,19 @@ func (app *App) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs []str /* Handle fee distribution state. */ // withdraw all validator commission - app.StakingKeeper.IterateValidators(ctx, func(_ int64, val stakingtypes.ValidatorI) (stop bool) { - _, _ = app.DistrKeeper.WithdrawValidatorCommission(ctx, val.GetOperator()) + ierr := app.StakingKeeper.IterateValidators(ctx, func(_ int64, val stakingtypes.ValidatorI) (stop bool) { + _, _ = app.DistrKeeper.WithdrawValidatorCommission(ctx, helpers.MustGetOperatorAddr(val)) return false }) + if ierr != nil { + panic(fmt.Errorf("could not iterate validators to withdraw commission: %w", ierr)) + } // withdraw all delegator rewards - dels := app.StakingKeeper.GetAllDelegations(ctx) + dels, ierr := app.StakingKeeper.GetAllDelegations(ctx) + if ierr != nil { + panic(fmt.Errorf("could not get all delegations: %w", ierr)) + } for _, delegation := range dels { valAddr, err := sdk.ValAddressFromBech32(delegation.ValidatorAddress) if err != nil { @@ -124,18 +134,30 @@ func (app *App) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs []str ctx = ctx.WithBlockHeight(0) // reinitialize all validators - app.StakingKeeper.IterateValidators(ctx, func(_ int64, val stakingtypes.ValidatorI) (stop bool) { + ierr = app.StakingKeeper.IterateValidators(ctx, func(_ int64, val stakingtypes.ValidatorI) (stop bool) { // donate any unwithdrawn outstanding reward fraction tokens to the community pool - scraps := app.DistrKeeper.GetValidatorOutstandingRewardsCoins(ctx, val.GetOperator()) - feePool := app.DistrKeeper.GetFeePool(ctx) + scraps, err := app.DistrKeeper.GetValidatorOutstandingRewardsCoins(ctx, helpers.MustGetOperatorAddr(val)) + if err != nil { + panic(err) + } + feePool, err := app.DistrKeeper.FeePool.Get(ctx) + if err != nil { + panic(err) + } feePool.CommunityPool = feePool.CommunityPool.Add(scraps...) - app.DistrKeeper.SetFeePool(ctx, feePool) + err = app.DistrKeeper.FeePool.Set(ctx, feePool) + if err != nil { + panic(err) + } - if err := app.DistrKeeper.Hooks().AfterValidatorCreated(ctx, val.GetOperator()); err != nil { + if err = app.DistrKeeper.Hooks().AfterValidatorCreated(ctx, helpers.MustGetOperatorAddr(val)); err != nil { panic(err) } return false }) + if ierr != nil { + panic(fmt.Errorf("could not iterate validators to reinitialize them: %w", ierr)) + } // reinitialize all delegations for _, del := range dels { @@ -162,34 +184,46 @@ func (app *App) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs []str /* Handle staking state. */ // iterate through redelegations, reset creation height - app.StakingKeeper.IterateRedelegations(ctx, func(_ int64, red stakingtypes.Redelegation) (stop bool) { + ierr = app.StakingKeeper.IterateRedelegations(ctx, func(_ int64, red stakingtypes.Redelegation) (stop bool) { for i := range red.Entries { red.Entries[i].CreationHeight = 0 } - app.StakingKeeper.SetRedelegation(ctx, red) + err := app.StakingKeeper.SetRedelegation(ctx, red) + if err != nil { + panic(fmt.Errorf("could not set redelegation for %s: %w", red.DelegatorAddress, err)) + } return false }) + if ierr != nil { + panic(fmt.Errorf("could not iterate redelegations: %w", ierr)) + } // iterate through unbonding delegations, reset creation height - app.StakingKeeper.IterateUnbondingDelegations(ctx, func(_ int64, ubd stakingtypes.UnbondingDelegation) (stop bool) { + ierr = app.StakingKeeper.IterateUnbondingDelegations(ctx, func(_ int64, ubd stakingtypes.UnbondingDelegation) (stop bool) { for i := range ubd.Entries { ubd.Entries[i].CreationHeight = 0 } - app.StakingKeeper.SetUnbondingDelegation(ctx, ubd) + err := app.StakingKeeper.SetUnbondingDelegation(ctx, ubd) + if err != nil { + panic(fmt.Errorf("could not set unbonding delegation for %s: %w", ubd.DelegatorAddress, err)) + } return false }) + if ierr != nil { + panic(fmt.Errorf("could not iterate unbonding delegations: %w", ierr)) + } // Iterate through validators by power descending, reset bond heights, and // update bond intra-tx counters. store := ctx.KVStore(app.keys[stakingtypes.StoreKey]) - iter := sdk.KVStoreReversePrefixIterator(store, stakingtypes.ValidatorsKey) + iter := storetypes.KVStoreReversePrefixIterator(store, stakingtypes.ValidatorsKey) counter := int16(0) for ; iter.Valid(); iter.Next() { addr := sdk.ValAddress(stakingtypes.AddressFromValidatorsKey(iter.Key())) - validator, found := app.StakingKeeper.GetValidator(ctx, addr) - if !found { - panic("expected validator, not found") + validator, err := app.StakingKeeper.GetValidator(ctx, addr) + if err != nil { + panic(fmt.Errorf("validator %s not found: %w", addr, err)) } validator.UnbondingHeight = 0 @@ -197,7 +231,10 @@ func (app *App) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs []str validator.Jailed = true } - app.StakingKeeper.SetValidator(ctx, validator) + err = app.StakingKeeper.SetValidator(ctx, validator) + if err != nil { + panic(fmt.Errorf("could not set validator %s: %w", validator.OperatorAddress, err)) + } counter++ } diff --git a/app/sim_bench_test.go b/app/sim_bench_test.go index a467259039..be6aaacd21 100644 --- a/app/sim_bench_test.go +++ b/app/sim_bench_test.go @@ -6,19 +6,21 @@ import ( "fmt" "os" "testing" + "time" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" - sdksim "github.com/cosmos/cosmos-sdk/simapp" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" "github.com/cosmos/cosmos-sdk/x/simulation" + simcli "github.com/cosmos/cosmos-sdk/x/simulation/client/cli" ) // Profile with: // go test -benchmem -run=^$ github.com/provenance-io/provenance/app -bench ^BenchmarkFullAppSimulation$ -Commit=true -cpuprofile cpu.out func BenchmarkFullAppSimulation(b *testing.B) { b.ReportAllocs() - config, db, dir, logger, skip, err := sdksim.SetupSimulation("goleveldb-app-sim", "Simulation") + config, db, dir, logger, skip, err := setupSimulation("goleveldb-app-sim", "Simulation") if err != nil { b.Fatalf("simulation setup failed: %s", err.Error()) } @@ -36,23 +38,24 @@ func BenchmarkFullAppSimulation(b *testing.B) { } }() - app := New(logger, db, nil, true, map[int64]bool{}, b.TempDir(), sdksim.FlagPeriodValue, MakeEncodingConfig(), sdksim.EmptyAppOptions{}, interBlockCacheOpt()) + app := New(logger, db, nil, true, map[int64]bool{}, b.TempDir(), simcli.FlagPeriodValue, MakeEncodingConfig(), simtestutil.EmptyAppOptions{}, interBlockCacheOpt()) // run randomized simulation - _, _, simParams, simErr := simulation.SimulateFromSeed( + // TODO[1760]: event-history: Add _ return arg back in. + _, simParams, simErr := simulation.SimulateFromSeed( b, os.Stdout, app.BaseApp, - ProvAppStateFn(app.AppCodec(), app.SimulationManager()), + ProvAppStateFn(app.AppCodec(), app.SimulationManager(), app.DefaultGenesis()), simtypes.RandomAccounts, // Replace with own random account function if using keys other than secp256k1 - sdksim.SimulationOperations(app, app.AppCodec(), config), + simtestutil.SimulationOperations(app, app.AppCodec(), config), app.ModuleAccountAddrs(), config, app.AppCodec(), ) // export state and simParams before the simulation error is checked - if err = sdksim.CheckExportSimulation(app, config, simParams); err != nil { + if err = simtestutil.CheckExportSimulation(app, config, simParams); err != nil { b.Fatal(err) } @@ -65,7 +68,7 @@ func BenchmarkFullAppSimulation(b *testing.B) { func BenchmarkInvariants(b *testing.B) { b.ReportAllocs() - config, db, dir, logger, skip, err := sdksim.SetupSimulation("leveldb-app-invariant-bench", "Simulation") + config, db, dir, logger, skip, err := setupSimulation("leveldb-app-invariant-bench", "Simulation") if err != nil { b.Fatalf("simulation setup failed: %s", err.Error()) } @@ -85,23 +88,25 @@ func BenchmarkInvariants(b *testing.B) { } }() - app := New(logger, db, nil, true, map[int64]bool{}, b.TempDir(), sdksim.FlagPeriodValue, MakeEncodingConfig(), sdksim.EmptyAppOptions{}, interBlockCacheOpt()) + app := New(logger, db, nil, true, map[int64]bool{}, b.TempDir(), simcli.FlagPeriodValue, MakeEncodingConfig(), simtestutil.EmptyAppOptions{}, interBlockCacheOpt()) // run randomized simulation - _, lastBlockTime, simParams, simErr := simulation.SimulateFromSeed( + // TODO[1760]: event-history: Add lastBlockTime return arg back in. + lastBlockTime := time.Unix(0, 0) + _, simParams, simErr := simulation.SimulateFromSeed( b, os.Stdout, app.BaseApp, - ProvAppStateFn(app.AppCodec(), app.SimulationManager()), + ProvAppStateFn(app.AppCodec(), app.SimulationManager(), app.DefaultGenesis()), simtypes.RandomAccounts, // Replace with own random account function if using keys other than secp256k1 - sdksim.SimulationOperations(app, app.AppCodec(), config), + simtestutil.SimulationOperations(app, app.AppCodec(), config), app.ModuleAccountAddrs(), config, app.AppCodec(), ) // export state and simParams before the simulation error is checked - if err = sdksim.CheckExportSimulation(app, config, simParams); err != nil { + if err = simtestutil.CheckExportSimulation(app, config, simParams); err != nil { b.Fatal(err) } @@ -111,7 +116,7 @@ func BenchmarkInvariants(b *testing.B) { PrintStats(config, db) - ctx := app.NewContext(true, tmproto.Header{Height: app.LastBlockHeight() + 1, Time: lastBlockTime}) + ctx := app.NewContextLegacy(true, cmtproto.Header{Height: app.LastBlockHeight() + 1, Time: lastBlockTime}) // 3. Benchmark each invariant separately // diff --git a/app/sim_test.go b/app/sim_test.go index 5ebd66a479..ee921dea17 100644 --- a/app/sim_test.go +++ b/app/sim_test.go @@ -13,39 +13,41 @@ import ( "testing" "time" - icqtypes "github.com/cosmos/ibc-apps/modules/async-icq/v6/types" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" - "github.com/tendermint/tendermint/libs/log" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - dbm "github.com/tendermint/tm-db" + abci "github.com/cometbft/cometbft/abci/types" + cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" + "cosmossdk.io/log" + sdksim "cosmossdk.io/simapp" + "cosmossdk.io/store" + storetypes "cosmossdk.io/store/types" + evidencetypes "cosmossdk.io/x/evidence/types" + + // icqtypes "github.com/cosmos/ibc-apps/modules/async-icq/v7/types" // TODO[1760]: async-icq + // "github.com/cosmos/cosmos-sdk/x/quarantine" // TODO[1760]: quarantine + // "github.com/cosmos/cosmos-sdk/x/sanction" // TODO[1760]: sanction + + dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" - sdksim "github.com/cosmos/cosmos-sdk/simapp" - "github.com/cosmos/cosmos-sdk/simapp/helpers" - "github.com/cosmos/cosmos-sdk/store" - storetypes "github.com/cosmos/cosmos-sdk/store/types" - sdk "github.com/cosmos/cosmos-sdk/types" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" "github.com/cosmos/cosmos-sdk/types/module" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" authzkeeper "github.com/cosmos/cosmos-sdk/x/authz/keeper" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" 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" minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" - "github.com/cosmos/cosmos-sdk/x/quarantine" - "github.com/cosmos/cosmos-sdk/x/sanction" "github.com/cosmos/cosmos-sdk/x/simulation" + simcli "github.com/cosmos/cosmos-sdk/x/simulation/client/cli" slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - icagenesistypes "github.com/cosmos/ibc-go/v6/modules/apps/27-interchain-accounts/genesis/types" - icatypes "github.com/cosmos/ibc-go/v6/modules/apps/27-interchain-accounts/types" + capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + icagenesistypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/genesis/types" + icatypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/types" cmdconfig "github.com/provenance-io/provenance/cmd/provenanced/config" "github.com/provenance-io/provenance/internal/pioconfig" @@ -59,7 +61,7 @@ import ( ) func init() { - sdksim.GetSimulatorFlags() + simcli.GetSimulatorFlags() pioconfig.SetProvenanceConfig("", 0) } @@ -70,9 +72,9 @@ type StoreKeysPrefixes struct { } // ProvAppStateFn wraps the sdksim.AppStateFn and sets the ICA GenesisState if isn't yet defined in the appState. -func ProvAppStateFn(cdc codec.JSONCodec, simManager *module.SimulationManager) simtypes.AppStateFn { +func ProvAppStateFn(cdc codec.JSONCodec, simManager *module.SimulationManager, genesisState map[string]json.RawMessage) simtypes.AppStateFn { return func(r *rand.Rand, accs []simtypes.Account, config simtypes.Config) (json.RawMessage, []simtypes.Account, string, time.Time) { - appState, simAccs, chainID, genesisTimestamp := sdksim.AppStateFn(cdc, simManager)(r, accs, config) + appState, simAccs, chainID, genesisTimestamp := simtestutil.AppStateFn(cdc, simManager, genesisState)(r, accs, config) appState = appStateWithICA(appState, cdc) appState = appStateWithICQ(appState, cdc) return appState, simAccs, chainID, genesisTimestamp @@ -105,20 +107,27 @@ func appStateWithICQ(appState json.RawMessage, cdc codec.JSONCodec) json.RawMess if err != nil { panic(fmt.Sprintf("error unmarshalling appstate: %v", err)) } - icqGenJSON, icqGenFound := rawState[icqtypes.ModuleName] - if !icqGenFound || len(icqGenJSON) == 0 { - icqGenState := icqtypes.DefaultGenesis() - rawState[icqtypes.ModuleName] = cdc.MustMarshalJSON(icqGenState) - appState, err = json.Marshal(rawState) - if err != nil { - panic(fmt.Sprintf("error marshalling appstate: %v", err)) - } - } + // TODO[1760]: async-icq + // icqGenJSON, icqGenFound := rawState[icqtypes.ModuleName] + // if !icqGenFound || len(icqGenJSON) == 0 { + // icqGenState := icqtypes.DefaultGenesis() + // rawState[icqtypes.ModuleName] = cdc.MustMarshalJSON(icqGenState) + // appState, err = json.Marshal(rawState) + // if err != nil { + // panic(fmt.Sprintf("error marshalling appstate: %v", err)) + // } + // } return appState } +func setupSimulation(dirPrefix string, dbName string) (simtypes.Config, dbm.DB, string, log.Logger, bool, error) { + config := simcli.NewConfigFromFlags() + db, dir, logger, skip, err := simtestutil.SetupSimulation(config, dirPrefix, dbName, simcli.FlagVerboseValue, simcli.FlagEnabledValue) + return config, db, dir, logger, skip, err +} + func TestFullAppSimulation(t *testing.T) { - config, db, dir, logger, skip, err := sdksim.SetupSimulation("leveldb-app-sim", "Simulation") + config, db, dir, logger, skip, err := setupSimulation("leveldb-app-sim", "Simulation") if skip { t.Skip("skipping provenance application simulation") } @@ -130,26 +139,27 @@ func TestFullAppSimulation(t *testing.T) { require.NoError(t, os.RemoveAll(dir)) }() - app := New(logger, db, nil, true, map[int64]bool{}, t.TempDir(), sdksim.FlagPeriodValue, MakeEncodingConfig(), sdksim.EmptyAppOptions{}, fauxMerkleModeOpt) + app := New(logger, db, nil, true, map[int64]bool{}, t.TempDir(), simcli.FlagPeriodValue, MakeEncodingConfig(), simtestutil.EmptyAppOptions{}, fauxMerkleModeOpt) require.Equal(t, "provenanced", app.Name()) fmt.Printf("running provenance full app simulation\n") // run randomized simulation - _, _, simParams, simErr := simulation.SimulateFromSeed( + // TODO[1760]: event-history: Add _ return arg back in. + _, simParams, simErr := simulation.SimulateFromSeed( t, os.Stdout, app.BaseApp, - ProvAppStateFn(app.AppCodec(), app.SimulationManager()), + ProvAppStateFn(app.AppCodec(), app.SimulationManager(), app.DefaultGenesis()), simtypes.RandomAccounts, // Replace with own random account function if using keys other than secp256k1 - sdksim.SimulationOperations(app, app.AppCodec(), config), + simtestutil.SimulationOperations(app, app.AppCodec(), config), app.ModuleAccountAddrs(), config, app.AppCodec(), ) // export state and simParams before the simulation error is checked - err = sdksim.CheckExportSimulation(app, config, simParams) + err = simtestutil.CheckExportSimulation(app, config, simParams) require.NoError(t, err) require.NoError(t, simErr) @@ -157,7 +167,7 @@ func TestFullAppSimulation(t *testing.T) { } func TestSimple(t *testing.T) { - config, db, dir, logger, skip, err := sdksim.SetupSimulation("leveldb-app-sim", "Simulation") + config, db, dir, logger, skip, err := setupSimulation("leveldb-app-sim", "Simulation") if skip { t.Skip("skipping provenance application simulation") } @@ -169,17 +179,18 @@ func TestSimple(t *testing.T) { require.NoError(t, os.RemoveAll(dir)) }() - app := New(logger, db, nil, true, map[int64]bool{}, t.TempDir(), sdksim.FlagPeriodValue, MakeEncodingConfig(), sdksim.EmptyAppOptions{}, fauxMerkleModeOpt) + app := New(logger, db, nil, true, map[int64]bool{}, t.TempDir(), simcli.FlagPeriodValue, MakeEncodingConfig(), simtestutil.EmptyAppOptions{}, fauxMerkleModeOpt) require.Equal(t, "provenanced", app.Name()) // run randomized simulation - _, _, _, simErr := simulation.SimulateFromSeed( + // TODO[1760]: event-history: Add _ return arg back in. + _, _, simErr := simulation.SimulateFromSeed( t, os.Stdout, app.BaseApp, - ProvAppStateFn(app.AppCodec(), app.SimulationManager()), + ProvAppStateFn(app.AppCodec(), app.SimulationManager(), app.DefaultGenesis()), simtypes.RandomAccounts, // Replace with own random account function if using keys other than secp256k1 - sdksim.SimulationOperations(app, app.AppCodec(), config), + simtestutil.SimulationOperations(app, app.AppCodec(), config), app.ModuleAccountAddrs(), config, app.AppCodec(), @@ -195,7 +206,7 @@ func TestAppImportExport(t *testing.T) { // uncomment to run in ide without flags. //sdksim.FlagEnabledValue = true - config, db, dir, logger, skip, err := sdksim.SetupSimulation("leveldb-app-sim", "Simulation") + config, db, dir, logger, skip, err := setupSimulation("leveldb-app-sim", "Simulation") if skip { t.Skip("skipping application import/export simulation") } @@ -208,25 +219,27 @@ func TestAppImportExport(t *testing.T) { }() home := t.TempDir() - app := New(logger, db, nil, true, map[int64]bool{}, home, sdksim.FlagPeriodValue, MakeEncodingConfig(), sdksim.EmptyAppOptions{}, fauxMerkleModeOpt) + app := New(logger, db, nil, true, map[int64]bool{}, home, simcli.FlagPeriodValue, MakeEncodingConfig(), simtestutil.EmptyAppOptions{}, fauxMerkleModeOpt) fmt.Printf("running provenance test import export\n") // Run randomized simulation - _, lastBlockTime, simParams, simErr := simulation.SimulateFromSeed( + // TODO[1760]: event-history: Add lastBlockTime return arg back in. + lastBlockTime := time.Unix(0, 0) + _, simParams, simErr := simulation.SimulateFromSeed( t, os.Stdout, app.BaseApp, - ProvAppStateFn(app.AppCodec(), app.SimulationManager()), + ProvAppStateFn(app.AppCodec(), app.SimulationManager(), app.DefaultGenesis()), simtypes.RandomAccounts, // Replace with own random account function if using keys other than secp256k1 - sdksim.SimulationOperations(app, app.AppCodec(), config), + simtestutil.SimulationOperations(app, app.AppCodec(), config), app.ModuleAccountAddrs(), config, app.AppCodec(), ) // export state and simParams before the simulation error is checked - err = sdksim.CheckExportSimulation(app, config, simParams) + err = simtestutil.CheckExportSimulation(app, config, simParams) require.NoError(t, err) require.NoError(t, simErr) @@ -234,12 +247,12 @@ func TestAppImportExport(t *testing.T) { fmt.Printf("exporting genesis...\n") - exported, err := app.ExportAppStateAndValidators(false, []string{}) + exported, err := app.ExportAppStateAndValidators(false, nil, nil) require.NoError(t, err) fmt.Printf("importing genesis...\n") - _, newDB, newDir, _, _, err := sdksim.SetupSimulation("leveldb-app-sim-2", "Simulation-2") + _, newDB, newDir, _, _, err := setupSimulation("leveldb-app-sim-2", "Simulation-2") require.NoError(t, err, "simulation setup failed") defer func() { @@ -247,7 +260,7 @@ func TestAppImportExport(t *testing.T) { require.NoError(t, os.RemoveAll(newDir)) }() - newApp := New(log.NewNopLogger(), newDB, nil, true, map[int64]bool{}, home, sdksim.FlagPeriodValue, MakeEncodingConfig(), sdksim.EmptyAppOptions{}, fauxMerkleModeOpt) + newApp := New(log.NewNopLogger(), newDB, nil, true, map[int64]bool{}, home, simcli.FlagPeriodValue, MakeEncodingConfig(), simtestutil.EmptyAppOptions{}, fauxMerkleModeOpt) var genesisState sdksim.GenesisState err = json.Unmarshal(exported.AppState, &genesisState) @@ -264,8 +277,8 @@ func TestAppImportExport(t *testing.T) { } }() - ctxA := app.NewContext(true, tmproto.Header{Height: app.LastBlockHeight(), Time: lastBlockTime}) - ctxB := newApp.NewContext(true, tmproto.Header{Height: app.LastBlockHeight(), Time: lastBlockTime}) + ctxA := app.NewContextLegacy(true, cmtproto.Header{Height: app.LastBlockHeight(), Time: lastBlockTime}) + ctxB := newApp.NewContextLegacy(true, cmtproto.Header{Height: app.LastBlockHeight(), Time: lastBlockTime}) newApp.mm.InitGenesis(ctxB, app.AppCodec(), genesisState) newApp.StoreConsensusParams(ctxB, exported.ConsensusParams) @@ -287,8 +300,8 @@ func TestAppImportExport(t *testing.T) { {app.keys[evidencetypes.StoreKey], newApp.keys[evidencetypes.StoreKey], [][]byte{}}, {app.keys[capabilitytypes.StoreKey], newApp.keys[capabilitytypes.StoreKey], [][]byte{}}, {app.keys[authzkeeper.StoreKey], newApp.keys[authzkeeper.StoreKey], [][]byte{authzkeeper.GrantKey, authzkeeper.GrantQueuePrefix}}, - {app.keys[quarantine.StoreKey], newApp.keys[quarantine.StoreKey], [][]byte{}}, - {app.keys[sanction.StoreKey], newApp.keys[sanction.StoreKey], [][]byte{}}, + // {app.keys[quarantine.StoreKey], newApp.keys[quarantine.StoreKey], [][]byte{}}, // TODO[1760]: quarantine + // {app.keys[sanction.StoreKey], newApp.keys[sanction.StoreKey], [][]byte{}}, // TODO[1760]: sanction {app.keys[markertypes.StoreKey], newApp.keys[markertypes.StoreKey], [][]byte{}}, {app.keys[msgfeetype.StoreKey], newApp.keys[msgfeetype.StoreKey], [][]byte{}}, @@ -303,16 +316,16 @@ func TestAppImportExport(t *testing.T) { storeA := ctxA.KVStore(skp.A) storeB := ctxB.KVStore(skp.B) - failedKVAs, failedKVBs := sdk.DiffKVStores(storeA, storeB, skp.Prefixes) + failedKVAs, failedKVBs := simtestutil.DiffKVStores(storeA, storeB, skp.Prefixes) require.Equal(t, len(failedKVAs), len(failedKVBs), "unequal sets of key-values to compare") fmt.Printf("compared %d different key/value pairs between %s and %s\n", len(failedKVAs), skp.A, skp.B) - require.Equal(t, 0, len(failedKVAs), sdksim.GetSimulationLog(skp.A.Name(), app.SimulationManager().StoreDecoders, failedKVAs, failedKVBs)) + require.Equal(t, 0, len(failedKVAs), simtestutil.GetSimulationLog(skp.A.Name(), app.SimulationManager().StoreDecoders, failedKVAs, failedKVBs)) } } func TestAppSimulationAfterImport(t *testing.T) { - config, db, dir, logger, skip, err := sdksim.SetupSimulation("leveldb-app-sim", "Simulation") + config, db, dir, logger, skip, err := setupSimulation("leveldb-app-sim", "Simulation") if skip { t.Skip("skipping application simulation after import") } @@ -325,23 +338,25 @@ func TestAppSimulationAfterImport(t *testing.T) { }() home := t.TempDir() - app := New(logger, db, nil, true, map[int64]bool{}, home, sdksim.FlagPeriodValue, MakeEncodingConfig(), sdksim.EmptyAppOptions{}, fauxMerkleModeOpt) + app := New(logger, db, nil, true, map[int64]bool{}, home, simcli.FlagPeriodValue, MakeEncodingConfig(), simtestutil.EmptyAppOptions{}, fauxMerkleModeOpt) // Run randomized simulation - stopEarly, lastBlockTime, simParams, simErr := simulation.SimulateFromSeed( + // TODO[1760]: event-history: Add lastBlockTime return arg back in. + lastBlockTime := time.Unix(0, 0) + stopEarly, simParams, simErr := simulation.SimulateFromSeed( t, os.Stdout, app.BaseApp, - ProvAppStateFn(app.AppCodec(), app.SimulationManager()), + ProvAppStateFn(app.AppCodec(), app.SimulationManager(), app.DefaultGenesis()), simtypes.RandomAccounts, // Replace with own random account function if using keys other than secp256k1 - sdksim.SimulationOperations(app, app.AppCodec(), config), + simtestutil.SimulationOperations(app, app.AppCodec(), config), app.ModuleAccountAddrs(), config, app.AppCodec(), ) // export state and simParams before the simulation error is checked - err = sdksim.CheckExportSimulation(app, config, simParams) + err = simtestutil.CheckExportSimulation(app, config, simParams) require.NoError(t, err) require.NoError(t, simErr) @@ -354,12 +369,12 @@ func TestAppSimulationAfterImport(t *testing.T) { fmt.Printf("exporting genesis...\n") - exported, err := app.ExportAppStateAndValidators(true, []string{}) + exported, err := app.ExportAppStateAndValidators(true, nil, nil) require.NoError(t, err) fmt.Printf("importing genesis...\n") - _, newDB, newDir, _, _, err := sdksim.SetupSimulation("leveldb-app-sim-2", "Simulation-2") + _, newDB, newDir, _, _, err := setupSimulation("leveldb-app-sim-2", "Simulation-2") require.NoError(t, err, "simulation setup failed") defer func() { @@ -367,21 +382,23 @@ func TestAppSimulationAfterImport(t *testing.T) { require.NoError(t, os.RemoveAll(newDir)) }() - newApp := New(log.NewNopLogger(), newDB, nil, true, map[int64]bool{}, home, sdksim.FlagPeriodValue, MakeEncodingConfig(), sdksim.EmptyAppOptions{}, fauxMerkleModeOpt) + newApp := New(log.NewNopLogger(), newDB, nil, true, map[int64]bool{}, home, simcli.FlagPeriodValue, MakeEncodingConfig(), simtestutil.EmptyAppOptions{}, fauxMerkleModeOpt) - newApp.InitChain(abci.RequestInitChain{ + _, err = newApp.InitChain(&abci.RequestInitChain{ AppStateBytes: exported.AppState, Time: lastBlockTime, }) + require.NoError(t, err, "InitChain") - sdksim.FlagGenesisTimeValue = lastBlockTime.Unix() - _, _, _, err = simulation.SimulateFromSeed( + simcli.FlagGenesisTimeValue = lastBlockTime.Unix() + // TODO[1760]: event-history: Add _ return arg back in. + _, _, err = simulation.SimulateFromSeed( t, os.Stdout, newApp.BaseApp, - ProvAppStateFn(app.AppCodec(), app.SimulationManager()), + ProvAppStateFn(app.AppCodec(), app.SimulationManager(), app.DefaultGenesis()), simtypes.RandomAccounts, // Replace with own random account function if using keys other than secp256k1 - sdksim.SimulationOperations(newApp, newApp.AppCodec(), config), + simtestutil.SimulationOperations(newApp, newApp.AppCodec(), config), app.ModuleAccountAddrs(), config, app.AppCodec(), @@ -397,16 +414,16 @@ func TestAppStateDeterminism(t *testing.T) { //sdksim.FlagBlockSizeValue = 100 //sdksim.FlagNumBlocksValue = 50 - if !sdksim.FlagEnabledValue { + if !simcli.FlagEnabledValue { t.Skip("skipping application simulation") } - config := sdksim.NewConfigFromFlags() + config := simcli.NewConfigFromFlags() config.InitialBlockHeight = 1 config.ExportParamsPath = "" config.OnOperation = false config.AllInvariants = false - config.ChainID = helpers.SimAppChainID + config.ChainID = pioconfig.SimAppChainID config.DBBackend = "memdb" config.Commit = true @@ -430,27 +447,28 @@ func TestAppStateDeterminism(t *testing.T) { for j := 0; j < numTimesToRunPerSeed; j++ { var logger log.Logger - if sdksim.FlagVerboseValue { - logger = log.TestingLogger() + if simcli.FlagVerboseValue { + logger = log.NewTestLogger(t) } else { logger = log.NewNopLogger() } db := dbm.NewMemDB() - app := New(logger, db, nil, true, map[int64]bool{}, home, sdksim.FlagPeriodValue, MakeEncodingConfig(), sdksim.EmptyAppOptions{}, interBlockCacheOpt()) + app := New(logger, db, nil, true, map[int64]bool{}, home, simcli.FlagPeriodValue, MakeEncodingConfig(), simtestutil.EmptyAppOptions{}, interBlockCacheOpt()) fmt.Printf( "running provenance non-determinism simulation; seed %d: %d/%d, attempt: %d/%d\n", config.Seed, i+1, numSeeds, j+1, numTimesToRunPerSeed, ) - _, _, _, err := simulation.SimulateFromSeed( + // TODO[1760]: event-history: Add _ return arg back in. + _, _, err := simulation.SimulateFromSeed( t, os.Stdout, app.BaseApp, - ProvAppStateFn(app.AppCodec(), app.SimulationManager()), + ProvAppStateFn(app.AppCodec(), app.SimulationManager(), app.DefaultGenesis()), simtypes.RandomAccounts, // Replace with own random account function if using keys other than secp256k1 - sdksim.SimulationOperations(app, app.AppCodec(), config), + simtestutil.SimulationOperations(app, app.AppCodec(), config), app.ModuleAccountAddrs(), config, app.AppCodec(), diff --git a/app/test_helpers.go b/app/test_helpers.go index 848982362e..2ebf75193f 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -15,24 +15,23 @@ import ( "github.com/rs/zerolog" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" - tmjson "github.com/tendermint/tendermint/libs/json" - "github.com/tendermint/tendermint/libs/log" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - tmtypes "github.com/tendermint/tendermint/types" - dbm "github.com/tendermint/tm-db" + abci "github.com/cometbft/cometbft/abci/types" + cmtjson "github.com/cometbft/cometbft/libs/json" + cmttmtypes "github.com/cometbft/cometbft/proto/tendermint/types" + cmttypes "github.com/cometbft/cometbft/types" + "cosmossdk.io/log" sdkmath "cosmossdk.io/math" + dbm "github.com/cosmos/cosmos-db" codectypes "github.com/cosmos/cosmos-sdk/codec/types" cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" - "github.com/cosmos/cosmos-sdk/server" servertypes "github.com/cosmos/cosmos-sdk/server/types" - sdksim "github.com/cosmos/cosmos-sdk/simapp" "github.com/cosmos/cosmos-sdk/testutil/mock" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/errors" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" @@ -47,19 +46,19 @@ import ( // DefaultConsensusParams defines the default Tendermint consensus params used in // SimApp testing. -var DefaultConsensusParams = &abci.ConsensusParams{ - Block: &abci.BlockParams{ +var DefaultConsensusParams = &cmttmtypes.ConsensusParams{ + Block: &cmttmtypes.BlockParams{ MaxBytes: 200000, MaxGas: 60_000_000, }, - Evidence: &tmproto.EvidenceParams{ + Evidence: &cmttmtypes.EvidenceParams{ MaxAgeNumBlocks: 302400, MaxAgeDuration: 504 * time.Hour, // 3 weeks is the max duration MaxBytes: 10000, }, - Validator: &tmproto.ValidatorParams{ + Validator: &cmttmtypes.ValidatorParams{ PubKeyTypes: []string{ - tmtypes.ABCIPubKeyTypeEd25519, + cmttypes.ABCIPubKeyTypeEd25519, }, }, } @@ -84,7 +83,7 @@ func setup(t *testing.T, withGenesis bool, invCheckPeriod uint) (*App, GenesisSt pioconfig.SetProvenanceConfig("", 0) } - app := New(loggerMaker(), db, nil, true, map[int64]bool{}, t.TempDir(), invCheckPeriod, encCdc, sdksim.EmptyAppOptions{}) + app := New(loggerMaker(), db, nil, true, map[int64]bool{}, t.TempDir(), invCheckPeriod, encCdc, simtestutil.EmptyAppOptions{}) if withGenesis { return app, NewDefaultGenesisState(encCdc.Marshaler) } @@ -121,7 +120,7 @@ func SetLoggerMaker(newLoggerMaker LoggerMakerFn) LoggerMakerFn { func NewDebugLogger() log.Logger { lw := zerolog.ConsoleWriter{Out: os.Stdout} logger := zerolog.New(lw).Level(zerolog.DebugLevel).With().Timestamp().Logger() - return server.ZeroLogWrapper{Logger: logger} + return log.NewCustomLogger(logger) } // NewInfoLogger creates a new logger to stdout with level info. @@ -129,7 +128,7 @@ func NewDebugLogger() log.Logger { func NewInfoLogger() log.Logger { lw := zerolog.ConsoleWriter{Out: os.Stdout} logger := zerolog.New(lw).Level(zerolog.InfoLevel).With().Timestamp().Logger() - return server.ZeroLogWrapper{Logger: logger} + return log.NewCustomLogger(logger) } // NewAppWithCustomOptions initializes a new SimApp with custom options. @@ -140,15 +139,15 @@ func NewAppWithCustomOptions(t *testing.T, isCheckTx bool, options SetupOptions) pubKey, err := privVal.GetPubKey() require.NoError(t, err) // create validator set with single validator - validator := tmtypes.NewValidator(pubKey, 1) - valSet := tmtypes.NewValidatorSet([]*tmtypes.Validator{validator}) + validator := cmttypes.NewValidator(pubKey, 1) + valSet := cmttypes.NewValidatorSet([]*cmttypes.Validator{validator}) // generate genesis account senderPrivKey := secp256k1.GenPrivKey() acc := authtypes.NewBaseAccount(senderPrivKey.PubKey().Address().Bytes(), senderPrivKey.PubKey(), 0, 0) balance := banktypes.Balance{ Address: acc.GetAddress().String(), - Coins: sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(100000000000000))), + Coins: sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 100_000_000_000_000)), } app := New(options.Logger, options.DB, nil, true, options.SkipUpgradeHeights, options.HomePath, options.InvCheckPeriod, options.EncConfig, options.AppOpts) @@ -157,18 +156,19 @@ func NewAppWithCustomOptions(t *testing.T, isCheckTx bool, options SetupOptions) if !isCheckTx { // init chain must be called to stop deliverState from being nil - stateBytes, err := tmjson.MarshalIndent(genesisState, "", " ") + stateBytes, err := cmtjson.MarshalIndent(genesisState, "", " ") require.NoError(t, err) // Initialize the chain - app.InitChain( - abci.RequestInitChain{ + _, err = app.InitChain( + &abci.RequestInitChain{ Validators: []abci.ValidatorUpdate{}, ConsensusParams: DefaultConsensusParams, AppStateBytes: stateBytes, ChainId: options.ChainID, }, ) + require.NoError(t, err, "InitChain") } return app @@ -182,15 +182,15 @@ func Setup(t *testing.T) *App { require.NoError(t, err) // create validator set with single validator - validator := tmtypes.NewValidator(pubKey, 1) - valSet := tmtypes.NewValidatorSet([]*tmtypes.Validator{validator}) + validator := cmttypes.NewValidator(pubKey, 1) + valSet := cmttypes.NewValidatorSet([]*cmttypes.Validator{validator}) // generate genesis account senderPrivKey := secp256k1.GenPrivKey() acc := authtypes.NewBaseAccount(senderPrivKey.PubKey().Address().Bytes(), senderPrivKey.PubKey(), 0, 0) balance := banktypes.Balance{ Address: acc.GetAddress().String(), - Coins: sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(100000000000000))), + Coins: sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 100_000_000_000_000)), } app := SetupWithGenesisValSet(t, "", valSet, []authtypes.GenesisAccount{acc}, balance) @@ -200,7 +200,7 @@ func Setup(t *testing.T) *App { func genesisStateWithValSet(t *testing.T, app *App, genesisState GenesisState, - valSet *tmtypes.ValidatorSet, genAccs []authtypes.GenesisAccount, + valSet *cmttypes.ValidatorSet, genAccs []authtypes.GenesisAccount, balances ...banktypes.Balance, ) GenesisState { // set genesis accounts @@ -223,15 +223,15 @@ func genesisStateWithValSet(t *testing.T, Jailed: false, Status: stakingtypes.Bonded, Tokens: bondAmt, - DelegatorShares: sdk.OneDec(), + DelegatorShares: sdkmath.LegacyOneDec(), Description: stakingtypes.Description{}, UnbondingHeight: int64(0), UnbondingTime: time.Unix(0, 0).UTC(), - Commission: stakingtypes.NewCommission(sdk.ZeroDec(), sdk.ZeroDec(), sdk.ZeroDec()), - MinSelfDelegation: sdk.ZeroInt(), + Commission: stakingtypes.NewCommission(sdkmath.LegacyZeroDec(), sdkmath.LegacyZeroDec(), sdkmath.LegacyZeroDec()), + MinSelfDelegation: sdkmath.ZeroInt(), } validators = append(validators, validator) - delegations = append(delegations, stakingtypes.NewDelegation(genAccs[0].GetAddress(), val.Address.Bytes(), sdk.OneDec())) + delegations = append(delegations, stakingtypes.NewDelegation(genAccs[0].GetAddress().String(), val.Address.String(), sdkmath.LegacyOneDec())) } // set validators and delegations @@ -245,7 +245,7 @@ func genesisStateWithValSet(t *testing.T, } if len(delegations) > 0 { - bondCoins := sdk.NewCoin(sdk.DefaultBondDenom, bondAmt.Mul(sdk.NewInt(int64(len(delegations))))) + bondCoins := sdk.NewCoin(sdk.DefaultBondDenom, bondAmt.MulRaw(int64(len(delegations)))) // add delegated tokens to total supply totalSupply = totalSupply.Add(bondCoins) // add bonded amount to bonded pool module account @@ -272,34 +272,33 @@ func SetupQuerier(t *testing.T) *App { // that also act as delegators. For simplicity, each validator is bonded with a delegation // of one consensus engine unit in the default token of the app from first genesis // account. A Nop logger is set in App. -func SetupWithGenesisValSet(t *testing.T, chainID string, valSet *tmtypes.ValidatorSet, genAccs []authtypes.GenesisAccount, balances ...banktypes.Balance) *App { +func SetupWithGenesisValSet(t *testing.T, chainID string, valSet *cmttypes.ValidatorSet, genAccs []authtypes.GenesisAccount, balances ...banktypes.Balance) *App { t.Helper() app, genesisState := setup(t, true, 5) genesisState = genesisStateWithValSet(t, app, genesisState, valSet, genAccs, balances...) stateBytes, err := json.MarshalIndent(genesisState, "", " ") - require.NoError(t, err) + require.NoError(t, err, "MarshalIndent genesis state") // init chain will set the validator set and initialize the genesis accounts - app.InitChain( - abci.RequestInitChain{ + _, err = app.InitChain( + &abci.RequestInitChain{ Validators: []abci.ValidatorUpdate{}, ConsensusParams: DefaultConsensusParams, AppStateBytes: stateBytes, ChainId: chainID, }, ) + require.NoError(t, err, "InitChain") // commit genesis changes - app.Commit() - app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{ + _, err = app.FinalizeBlock(&abci.RequestFinalizeBlock{ Height: app.LastBlockHeight() + 1, - AppHash: app.LastCommitID().Hash, - ValidatorsHash: valSet.Hash(), + Hash: app.LastCommitID().Hash, NextValidatorsHash: valSet.Hash(), - ChainID: chainID, - }}) + }) + require.NoError(t, err, "FinalizeBlock") return app } @@ -314,8 +313,8 @@ func SetupWithGenesisAccounts(t *testing.T, chainID string, genAccs []authtypes. require.NoError(t, err) // create validator set with single validator - validator := tmtypes.NewValidator(pubKey, 1) - valSet := tmtypes.NewValidatorSet([]*tmtypes.Validator{validator}) + validator := cmttypes.NewValidator(pubKey, 1) + valSet := cmttypes.NewValidatorSet([]*cmttypes.Validator{validator}) return SetupWithGenesisValSet(t, chainID, valSet, genAccs, balances...) } @@ -330,8 +329,8 @@ func GenesisStateWithSingleValidator(t *testing.T, app *App) GenesisState { require.NoError(t, err) // create validator set with single validator - validator := tmtypes.NewValidator(pubKey, 1) - valSet := tmtypes.NewValidatorSet([]*tmtypes.Validator{validator}) + validator := cmttypes.NewValidator(pubKey, 1) + valSet := cmttypes.NewValidatorSet([]*cmttypes.Validator{validator}) // generate genesis account senderPrivKey := secp256k1.GenPrivKey() @@ -339,7 +338,7 @@ func GenesisStateWithSingleValidator(t *testing.T, app *App) GenesisState { balances := []banktypes.Balance{ { Address: acc.GetAddress().String(), - Coins: sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(100000000000000))), + Coins: sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 100_000_000_000_000)), }, } @@ -386,7 +385,11 @@ func createIncrementalAccounts(accNum int) []sdk.AccAddress { // AddTestAddrsFromPubKeys adds the addresses into the App providing only the public keys. func AddTestAddrsFromPubKeys(app *App, ctx sdk.Context, pubKeys []cryptotypes.PubKey, accAmt sdkmath.Int) { - initCoins := sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), accAmt)) + bondDenom, err := app.StakingKeeper.BondDenom(ctx) + if err != nil || bondDenom == "" { + bondDenom = sdk.DefaultBondDenom + } + initCoins := sdk.NewCoins(sdk.NewCoin(bondDenom, accAmt)) for _, pk := range pubKeys { initAccountWithCoins(app, ctx, sdk.AccAddress(pk.Address()), initCoins) @@ -408,7 +411,11 @@ func AddTestAddrsIncremental(app *App, ctx sdk.Context, accNum int, accAmt sdkma func addTestAddrs(app *App, ctx sdk.Context, accNum int, accAmt sdkmath.Int, strategy GenerateAccountStrategy) []sdk.AccAddress { testAddrs := strategy(accNum) - initCoins := sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), accAmt)) + bondDenom, err := app.StakingKeeper.BondDenom(ctx) + if err != nil || bondDenom == "" { + bondDenom = sdk.DefaultBondDenom + } + initCoins := sdk.NewCoins(sdk.NewCoin(bondDenom, accAmt)) for _, addr := range testAddrs { initAccountWithCoins(app, ctx, addr, initCoins) @@ -481,7 +488,7 @@ func NewPubKeyFromHex(pk string) (res cryptotypes.PubKey) { // SetupWithGenesisRewardsProgram initializes a new SimApp with the provided // rewards programs, genesis accounts, validators, and balances. -func SetupWithGenesisRewardsProgram(t *testing.T, nextRewardProgramID uint64, genesisRewards []rewardtypes.RewardProgram, genAccs []authtypes.GenesisAccount, valSet *tmtypes.ValidatorSet, balances ...banktypes.Balance) *App { +func SetupWithGenesisRewardsProgram(t *testing.T, nextRewardProgramID uint64, genesisRewards []rewardtypes.RewardProgram, genAccs []authtypes.GenesisAccount, valSet *cmttypes.ValidatorSet, balances ...banktypes.Balance) *App { t.Helper() // Make sure there's a validator set with at least one validator in it. @@ -489,11 +496,11 @@ func SetupWithGenesisRewardsProgram(t *testing.T, nextRewardProgramID uint64, ge privVal := mock.NewPV() pubKey, err := privVal.GetPubKey() require.NoError(t, err) - validator := tmtypes.NewValidator(pubKey, 1) + validator := cmttypes.NewValidator(pubKey, 1) if valSet == nil { - valSet = tmtypes.NewValidatorSet([]*tmtypes.Validator{validator}) + valSet = cmttypes.NewValidatorSet([]*cmttypes.Validator{validator}) } else { - require.NoError(t, valSet.UpdateWithChangeSet([]*tmtypes.Validator{validator})) + require.NoError(t, valSet.UpdateWithChangeSet([]*cmttypes.Validator{validator})) } } @@ -504,16 +511,22 @@ func SetupWithGenesisRewardsProgram(t *testing.T, nextRewardProgramID uint64, ge stateBytes, err := json.MarshalIndent(genesisState, "", " ") require.NoError(t, err, "marshaling genesis state to json") - app.InitChain( - abci.RequestInitChain{ + _, err = app.InitChain( + &abci.RequestInitChain{ Validators: []abci.ValidatorUpdate{}, ConsensusParams: DefaultConsensusParams, AppStateBytes: stateBytes, }, ) + require.NoError(t, err, "InitChain") - app.Commit() - app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: app.LastBlockHeight() + 1, Time: time.Now().UTC()}}) + _, err = app.FinalizeBlock(&abci.RequestFinalizeBlock{ + Height: app.LastBlockHeight() + 1, + Hash: app.LastCommitID().Hash, + NextValidatorsHash: valSet.Hash(), + Time: time.Now().UTC(), + }) + require.NoError(t, err, "FinalizeBlock") return app } diff --git a/app/types.go b/app/types.go deleted file mode 100644 index eb61e331a5..0000000000 --- a/app/types.go +++ /dev/null @@ -1,44 +0,0 @@ -package app - -import ( - abci "github.com/tendermint/tendermint/abci/types" - - "github.com/cosmos/cosmos-sdk/codec" - "github.com/cosmos/cosmos-sdk/server/types" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/module" -) - -// App implements the common methods for a Cosmos SDK-based application -// specific blockchain. -type CosmosApp interface { - // The assigned name of the app. - Name() string - - // The application types codec. - // NOTE: This shoult be sealed before being returned. - LegacyAmino() *codec.LegacyAmino - - // Application updates every begin block. - BeginBlocker(ctx sdk.Context, req abci.RequestBeginBlock) abci.ResponseBeginBlock - - // Application updates every end block. - EndBlocker(ctx sdk.Context, req abci.RequestEndBlock) abci.ResponseEndBlock - - // Application update at chain (i.e app) initialization. - InitChainer(ctx sdk.Context, req abci.RequestInitChain) abci.ResponseInitChain - - // Loads the app at a given height. - LoadHeight(height int64) error - - // Exports the state of the application for a genesis file. - ExportAppStateAndValidators( - forZeroHeight bool, jailAllowedAddrs []string, - ) (types.ExportedApp, error) - - // All the registered module account addreses. - ModuleAccountAddrs() map[string]bool - - // Helper for the simulation framework. - SimulationManager() *module.SimulationManager -} diff --git a/app/upgrades.go b/app/upgrades.go index 2ddebe28ae..171081948c 100644 --- a/app/upgrades.go +++ b/app/upgrades.go @@ -1,21 +1,23 @@ package app import ( + "context" "fmt" "strings" - "cosmossdk.io/math" + sdkmath "cosmossdk.io/math" + storetypes "cosmossdk.io/store/types" + upgradetypes "cosmossdk.io/x/upgrade/types" + + // icqtypes "github.com/cosmos/ibc-apps/modules/async-icq/v7/types" // TODO[1760]: async-icq "github.com/cosmos/cosmos-sdk/baseapp" - storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" govtypesv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" govtypesv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" - upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" - icqtypes "github.com/cosmos/ibc-apps/modules/async-icq/v6/types" - transfertypes "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types" + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" attributekeeper "github.com/provenance-io/provenance/x/attribute/keeper" attributetypes "github.com/provenance-io/provenance/x/attribute/types" @@ -122,7 +124,7 @@ var upgrades = map[string]appUpgrade{ return vm, nil }, - Added: []string{icqtypes.ModuleName, oracletypes.ModuleName, ibchookstypes.StoreKey, hold.ModuleName, exchange.ModuleName}, + Added: []string{ /* icqtypes.ModuleName, // TODO[1760]: async-icq */ oracletypes.ModuleName, ibchookstypes.StoreKey, hold.ModuleName, exchange.ModuleName}, }, "saffron-rc2": { // upgrade for v1.17.0-rc2 Handler: func(ctx sdk.Context, app *App, vm module.VersionMap) (module.VersionMap, error) { @@ -172,7 +174,7 @@ var upgrades = map[string]appUpgrade{ return vm, nil }, - Added: []string{icqtypes.ModuleName, oracletypes.ModuleName, ibchookstypes.StoreKey, hold.ModuleName, exchange.ModuleName}, + Added: []string{ /* icqtypes.ModuleName, // TODO[1760]: async-icq */ oracletypes.ModuleName, ibchookstypes.StoreKey, hold.ModuleName, exchange.ModuleName}, }, "tourmaline-rc1": { // upgrade for v1.18.0-rc1 Added: []string{ibcratelimit.ModuleName}, @@ -208,13 +210,15 @@ func InstallCustomUpgradeHandlers(app *App) { // If the handler has been defined, add it here, otherwise, use no-op. var handler upgradetypes.UpgradeHandler if upgrade.Handler == nil { - handler = func(ctx sdk.Context, plan upgradetypes.Plan, versionMap module.VersionMap) (module.VersionMap, error) { + handler = func(goCtx context.Context, plan upgradetypes.Plan, versionMap module.VersionMap) (module.VersionMap, error) { + ctx := sdk.UnwrapSDKContext(goCtx) ctx.Logger().Info(fmt.Sprintf("Applying no-op upgrade to %q", plan.Name)) return versionMap, nil } } else { ref := upgrade - handler = func(ctx sdk.Context, plan upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { + handler = func(goCtx context.Context, plan upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { + ctx := sdk.UnwrapSDKContext(goCtx) ctx.Logger().Info(fmt.Sprintf("Starting upgrade to %q", plan.Name), "version-map", vm) newVM, err := ref.Handler(ctx, app, vm) if err != nil { @@ -340,26 +344,53 @@ func removeP8eMemorializeContractFee(ctx sdk.Context, app *App) { // removeInactiveValidatorDelegations unbonds all delegations from inactive validators, triggering their removal from the validator set. // This should be applied in most upgrades. func removeInactiveValidatorDelegations(ctx sdk.Context, app *App) { - unbondingTimeParam := app.StakingKeeper.GetParams(ctx).UnbondingTime - ctx.Logger().Info(fmt.Sprintf("removing all delegations from validators that have been inactive (unbonded) for %d days", int64(unbondingTimeParam.Hours()/24))) + ctx.Logger().Info(fmt.Sprintf("Removing inactive validator delegations.")) + + sParams, perr := app.StakingKeeper.GetParams(ctx) + if perr != nil { + ctx.Logger().Error(fmt.Sprintf("Could not get staking params: %v.", perr)) + return + } + + unbondingTimeParam := sParams.UnbondingTime + ctx.Logger().Info(fmt.Sprintf("Threshold: %d days", int64(unbondingTimeParam.Hours()/24))) + + validators, verr := app.StakingKeeper.GetAllValidators(ctx) + if verr != nil { + ctx.Logger().Error(fmt.Sprintf("Could not get all validators: %v.", perr)) + return + } + removalCount := 0 - validators := app.StakingKeeper.GetAllValidators(ctx) for _, validator := range validators { if validator.IsUnbonded() { inactiveDuration := ctx.BlockTime().Sub(validator.UnbondingTime) if inactiveDuration >= unbondingTimeParam { - ctx.Logger().Info(fmt.Sprintf("validator %v has been inactive (unbonded) for %d days and will be removed", validator.OperatorAddress, int64(inactiveDuration.Hours()/24))) + ctx.Logger().Info(fmt.Sprintf("Validator %v has been inactive (unbonded) for %d days and will be removed.", validator.OperatorAddress, int64(inactiveDuration.Hours()/24))) valAddress, err := sdk.ValAddressFromBech32(validator.OperatorAddress) if err != nil { - ctx.Logger().Error(fmt.Sprintf("invalid operator address: %s: %v", validator.OperatorAddress, err)) + ctx.Logger().Error(fmt.Sprintf("Invalid operator address: %s: %v.", validator.OperatorAddress, err)) continue } - delegations := app.StakingKeeper.GetValidatorDelegations(ctx, valAddress) + + delegations, err := app.StakingKeeper.GetValidatorDelegations(ctx, valAddress) + if err != nil { + ctx.Logger().Error(fmt.Sprintf("Could not delegations for validator %s: %v.", valAddress, perr)) + continue + } + for _, delegation := range delegations { - ctx.Logger().Info(fmt.Sprintf("undelegate delegator %v from validator %v of all shares (%v)", delegation.DelegatorAddress, validator.OperatorAddress, delegation.GetShares())) - _, err = app.StakingKeeper.Undelegate(ctx, delegation.GetDelegatorAddr(), valAddress, delegation.GetShares()) + ctx.Logger().Info(fmt.Sprintf("Undelegate delegator %v from validator %v of all shares (%v).", delegation.DelegatorAddress, validator.OperatorAddress, delegation.GetShares())) + var delAddr sdk.AccAddress + delegator := delegation.GetDelegatorAddr() + delAddr, err = sdk.AccAddressFromBech32(delegator) if err != nil { - ctx.Logger().Error(fmt.Sprintf("failed to undelegate delegator %s from validator %s: %v", delegation.GetDelegatorAddr().String(), valAddress.String(), err)) + ctx.Logger().Error(fmt.Sprintf("Failed to undelegate delegator %s from validator %s: could not parse delegator address: %v.", delegator, valAddress.String(), err)) + continue + } + _, _, err = app.StakingKeeper.Undelegate(ctx, delAddr, valAddress, delegation.GetShares()) + if err != nil { + ctx.Logger().Error(fmt.Sprintf("Failed to undelegate delegator %s from validator %s: %v.", delegator, valAddress.String(), err)) continue } } @@ -367,7 +398,8 @@ func removeInactiveValidatorDelegations(ctx sdk.Context, app *App) { } } } - ctx.Logger().Info(fmt.Sprintf("a total of %d inactive (unbonded) validators have had all their delegators removed", removalCount)) + + ctx.Logger().Info(fmt.Sprintf("A total of %d inactive (unbonded) validators have had all their delegators removed.", removalCount)) } // fixNameIndexEntries fixes the name module's address to name index entries. @@ -389,7 +421,7 @@ func setAccountDataNameRecord(ctx sdk.Context, accountK attributetypes.AccountKe // TODO: Remove with the saffron handlers. func setupICQ(ctx sdk.Context, app *App) { ctx.Logger().Info("Updating ICQ params") - app.ICQKeeper.SetParams(ctx, icqtypes.NewParams(true, []string{"/provenance.oracle.v1.Query/Oracle"})) + // app.ICQKeeper.SetParams(ctx, icqtypes.NewParams(true, []string{"/provenance.oracle.v1.Query/Oracle"})) // TODO[1760]: async-icq ctx.Logger().Info("Done updating ICQ params") } @@ -399,7 +431,7 @@ func updateMaxSupply(ctx sdk.Context, app *App) { ctx.Logger().Info("Updating MaxSupply marker param") params := app.MarkerKeeper.GetParams(ctx) //nolint:staticcheck // Populate new param with deprecated param - params.MaxSupply = math.NewIntFromUint64(params.MaxTotalSupply) + params.MaxSupply = sdkmath.NewIntFromUint64(params.MaxTotalSupply) app.MarkerKeeper.SetParams(ctx, params) ctx.Logger().Info("Done updating MaxSupply marker param") } diff --git a/app/upgrades_test.go b/app/upgrades_test.go index 868ae306a4..2c7c57445f 100644 --- a/app/upgrades_test.go +++ b/app/upgrades_test.go @@ -13,17 +13,19 @@ import ( "github.com/rs/zerolog" "github.com/stretchr/testify/suite" - "github.com/tendermint/tendermint/libs/log" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" + + "cosmossdk.io/log" + sdkmath "cosmossdk.io/math" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" - "github.com/cosmos/cosmos-sdk/server" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" "github.com/cosmos/cosmos-sdk/x/bank/testutil" "github.com/cosmos/cosmos-sdk/x/staking/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + "github.com/provenance-io/provenance/internal/helpers" "github.com/provenance-io/provenance/x/exchange" markertypes "github.com/provenance-io/provenance/x/marker/types" msgfeetypes "github.com/provenance-io/provenance/x/msgfees/types" @@ -56,14 +58,13 @@ func (s *UpgradeTestSuite) SetupSuite() { // Error log lines will start with "ERR ". // Info log lines will start with "INF ". // Debug log lines are omitted, but would start with "DBG ". - logger := zerolog.New(lw).Level(zerolog.InfoLevel) - return server.ZeroLogWrapper{Logger: logger} + return log.NewCustomLogger(zerolog.New(lw).Level(zerolog.InfoLevel)) } defer SetLoggerMaker(SetLoggerMaker(bufferedLoggerMaker)) s.app = Setup(s.T()) s.logBuffer.Reset() s.startTime = time.Now() - s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{Time: s.startTime}) + s.ctx = s.app.BaseApp.NewContextLegacy(false, cmtproto.Header{Time: s.startTime}) } // GetLogOutput gets the log buffer contents. This (probably) also clears the log buffer. @@ -108,12 +109,12 @@ func (s *UpgradeTestSuite) AssertUpgradeHandlerLogs(key string, expInLog, expNot // If you really want to include those in this run, you can try doing stuff with SetModuleVersionMap // prior to calling this AssertUpgradeHandlerLogs function. You'll probably also need to recreate // any old state for that module since anything added already was done using new stuff. - origVersionMap := s.app.UpgradeKeeper.GetModuleVersionMap(s.ctx) + origVersionMap, err := s.app.UpgradeKeeper.GetModuleVersionMap(s.ctx) + s.Require().NoError(err, "GetModuleVersionMap") msgFormat := fmt.Sprintf("upgrades[%q].Handler(...)", key) var versionMap module.VersionMap - var err error s.logBuffer.Reset() testFunc := func() { versionMap, err = handler(s.ctx, s.app, origVersionMap) @@ -250,7 +251,7 @@ func (s *UpgradeTestSuite) CreateAndFundAccount(coin sdk.Coin) sdk.AccAddress { key2 := secp256k1.GenPrivKey() pub2 := key2.PubKey() addr2 := sdk.AccAddress(pub2.Address()) - s.LogIfError(testutil.FundAccount(s.app.BankKeeper, s.ctx, addr2, sdk.Coins{coin}), "FundAccount(..., %q)", coin.String()) + s.LogIfError(testutil.FundAccount(s.ctx, s.app.BankKeeper, addr2, sdk.Coins{coin}), "FundAccount(..., %q)", coin.String()) return addr2 } @@ -260,26 +261,33 @@ func (s *UpgradeTestSuite) CreateValidator(unbondedTime time.Time, status stakin pub := key.PubKey() addr := sdk.AccAddress(pub.Address()) valAddr := sdk.ValAddress(addr) - validator, err := stakingtypes.NewValidator(valAddr, pub, stakingtypes.NewDescription(valAddr.String(), "", "", "", "")) + validator, err := stakingtypes.NewValidator(valAddr.String(), pub, stakingtypes.NewDescription(valAddr.String(), "", "", "", "")) s.Require().NoError(err, "could not init new validator") validator.UnbondingTime = unbondedTime validator.Status = status - s.app.StakingKeeper.SetValidator(s.ctx, validator) + err = s.app.StakingKeeper.SetValidator(s.ctx, validator) + s.Require().NoError(err, "could not SetValidator ") err = s.app.StakingKeeper.SetValidatorByConsAddr(s.ctx, validator) s.Require().NoError(err, "could not SetValidatorByConsAddr ") - err = s.app.StakingKeeper.AfterValidatorCreated(s.ctx, validator.GetOperator()) + err = s.app.StakingKeeper.Hooks().AfterValidatorCreated(s.ctx, valAddr) s.Require().NoError(err, "could not AfterValidatorCreated") return validator } // DelegateToValidator delegates to a validator in the app. func (s *UpgradeTestSuite) DelegateToValidator(valAddress sdk.ValAddress, delegatorAddress sdk.AccAddress, coin sdk.Coin) { - validator, found := s.app.StakingKeeper.GetValidator(s.ctx, valAddress) - s.Require().True(found, "GetValidator(%q)", valAddress.String()) - _, err := s.app.StakingKeeper.Delegate(s.ctx, delegatorAddress, coin.Amount, types.Unbonded, validator, true) + validator, err := s.app.StakingKeeper.GetValidator(s.ctx, valAddress) + s.Require().NoError(err, "GetValidator(%q)", valAddress.String()) + _, err = s.app.StakingKeeper.Delegate(s.ctx, delegatorAddress, coin.Amount, types.Unbonded, validator, true) s.Require().NoError(err, "Delegate(%q, %q, unbonded, %q, true) error", delegatorAddress.String(), coin.String(), valAddress.String()) } +func (s *UpgradeTestSuite) GetOperatorAddr(val stakingtypes.ValidatorI) sdk.ValAddress { + addr, err := helpers.GetOperatorAddr(val) + s.Require().NoError(err, "GetOperatorAddr(%q)", val.GetOperator()) + return addr +} + func (s *UpgradeTestSuite) TestKeysInHandlersMap() { // handlerKeys are all the keys in the upgrades map defined in upgrades.go. handlerKeys := make([]string, 0, len(upgrades)) @@ -498,10 +506,11 @@ func (s *UpgradeTestSuite) TestRemoveInactiveValidatorDelegations() { runnerName := "removeInactiveValidatorDelegations" delegationCoin := sdk.NewInt64Coin("stake", 10000) - delegationCoinAmt := sdk.NewDec(delegationCoin.Amount.Int64()) + delegationCoinAmt := sdkmath.LegacyNewDec(delegationCoin.Amount.Int64()) s.Run("just one bonded validator", func() { - validators := s.app.StakingKeeper.GetAllValidators(s.ctx) + validators, err := s.app.StakingKeeper.GetAllValidators(s.ctx) + s.Require().NoError(err, "GetAllValidators") s.Require().Len(validators, 1, "GetAllValidators after setup") expectedLogLines := []string{ @@ -510,17 +519,20 @@ func (s *UpgradeTestSuite) TestRemoveInactiveValidatorDelegations() { } s.ExecuteAndAssertLogs(runner, expectedLogLines, nil, true, runnerName) - newValidators := s.app.StakingKeeper.GetAllValidators(s.ctx) + newValidators, err := s.app.StakingKeeper.GetAllValidators(s.ctx) + s.Require().NoError(err, "GetAllValidators") s.Require().Len(newValidators, 1, "GetAllValidators after %s", runnerName) }) s.Run("one unbonded validator with a delegation", func() { // single unbonded validator with 1 delegations, should be removed unbondedVal1 := s.CreateValidator(s.startTime.Add(-30*24*time.Hour), stakingtypes.Unbonded) + unbondedVal1Addr := s.GetOperatorAddr(unbondedVal1) addr1Balance := s.app.BankKeeper.GetBalance(s.ctx, addr1, "stake") - s.DelegateToValidator(unbondedVal1.GetOperator(), addr1, delegationCoin) + s.DelegateToValidator(unbondedVal1Addr, addr1, delegationCoin) s.Require().Equal(addr1Balance.Sub(delegationCoin), s.app.BankKeeper.GetBalance(s.ctx, addr1, "stake"), "addr1 should have less funds") - validators := s.app.StakingKeeper.GetAllValidators(s.ctx) + validators, err := s.app.StakingKeeper.GetAllValidators(s.ctx) + s.Require().NoError(err, "GetAllValidators") s.Require().Len(validators, 2, "Setup: GetAllValidators should have: 1 bonded, 1 unbonded") expectedLogLines := []string{ @@ -531,10 +543,11 @@ func (s *UpgradeTestSuite) TestRemoveInactiveValidatorDelegations() { } s.ExecuteAndAssertLogs(runner, expectedLogLines, nil, true, runnerName) - validators = s.app.StakingKeeper.GetAllValidators(s.ctx) + validators, err = s.app.StakingKeeper.GetAllValidators(s.ctx) + s.Require().NoError(err, "GetAllValidators") s.Assert().Len(validators, 1, "GetAllValidators after %s", runnerName) - ubd, found := s.app.StakingKeeper.GetUnbondingDelegation(s.ctx, addr1, unbondedVal1.GetOperator()) - s.Assert().True(found, "GetUnbondingDelegation found") + ubd, err := s.app.StakingKeeper.GetUnbondingDelegation(s.ctx, addr1, unbondedVal1Addr) + s.Assert().NoError(err, "GetUnbondingDelegation found") if s.Assert().Len(ubd.Entries, 1, "UnbondingDelegation entries") { s.Assert().Equal(delegationCoin.Amount, ubd.Entries[0].Balance, "UnbondingDelegation balance") } @@ -543,17 +556,19 @@ func (s *UpgradeTestSuite) TestRemoveInactiveValidatorDelegations() { s.Run("one unbonded validator with 2 delegations", func() { // single unbonded validator with 2 delegations unbondedVal1 := s.CreateValidator(s.startTime.Add(-30*24*time.Hour), stakingtypes.Unbonded) + unbondedVal1Addr := s.GetOperatorAddr(unbondedVal1) addr1Balance := s.app.BankKeeper.GetBalance(s.ctx, addr1, "stake") addr2Balance := s.app.BankKeeper.GetBalance(s.ctx, addr2, "stake") - s.DelegateToValidator(unbondedVal1.GetOperator(), addr1, delegationCoin) - s.DelegateToValidator(unbondedVal1.GetOperator(), addr2, delegationCoin) + s.DelegateToValidator(unbondedVal1Addr, addr1, delegationCoin) + s.DelegateToValidator(unbondedVal1Addr, addr2, delegationCoin) s.Require().Equal(addr1Balance.Sub(delegationCoin), s.app.BankKeeper.GetBalance(s.ctx, addr1, "stake"), "addr1 should have less funds after delegation") s.Require().Equal(addr2Balance.Sub(delegationCoin), s.app.BankKeeper.GetBalance(s.ctx, addr2, "stake"), "addr2 should have less funds after delegation") - var found bool - unbondedVal1, found = s.app.StakingKeeper.GetValidator(s.ctx, unbondedVal1.GetOperator()) - s.Require().True(found, "Setup: GetValidator(unbondedVal1) found") + var err error + unbondedVal1, err = s.app.StakingKeeper.GetValidator(s.ctx, unbondedVal1Addr) + s.Require().NoError(err, "Setup: GetValidator(unbondedVal1) found") s.Require().Equal(delegationCoinAmt.Add(delegationCoinAmt), unbondedVal1.DelegatorShares, "Setup: unbondedVal1.DelegatorShares") - validators := s.app.StakingKeeper.GetAllValidators(s.ctx) + validators, err := s.app.StakingKeeper.GetAllValidators(s.ctx) + s.Require().NoError(err, "GetAllValidators") s.Require().Len(validators, 2, "Setup: GetAllValidators should have: 1 bonded, 1 unbonded") expectedLogLines := []string{ @@ -565,15 +580,16 @@ func (s *UpgradeTestSuite) TestRemoveInactiveValidatorDelegations() { } s.ExecuteAndAssertLogs(runner, expectedLogLines, nil, false, runnerName) - validators = s.app.StakingKeeper.GetAllValidators(s.ctx) + validators, err = s.app.StakingKeeper.GetAllValidators(s.ctx) + s.Require().NoError(err, "GetAllValidators") s.Assert().Len(validators, 1, "GetAllValidators after %s", runnerName) - ubd, found := s.app.StakingKeeper.GetUnbondingDelegation(s.ctx, addr1, unbondedVal1.GetOperator()) - s.Assert().True(found, "GetUnbondingDelegation(addr1) found") + ubd, err := s.app.StakingKeeper.GetUnbondingDelegation(s.ctx, addr1, unbondedVal1Addr) + s.Assert().NoError(err, "GetUnbondingDelegation(addr1) found") if s.Assert().Len(ubd.Entries, 1, "GetUnbondingDelegation(addr1) entries") { s.Assert().Equal(delegationCoin.Amount, ubd.Entries[0].Balance, "GetUnbondingDelegation(addr1) balance") } - ubd, found = s.app.StakingKeeper.GetUnbondingDelegation(s.ctx, addr2, unbondedVal1.GetOperator()) - s.Assert().True(found, "GetUnbondingDelegation(addr2) found") + ubd, err = s.app.StakingKeeper.GetUnbondingDelegation(s.ctx, addr2, unbondedVal1Addr) + s.Assert().NoError(err, "GetUnbondingDelegation(addr2) found") if s.Assert().Len(ubd.Entries, 1, "GetUnbondingDelegation(addr2) entries") { s.Assert().Equal(delegationCoin.Amount, ubd.Entries[0].Balance, "GetUnbondingDelegation(addr2) balance") } @@ -582,20 +598,23 @@ func (s *UpgradeTestSuite) TestRemoveInactiveValidatorDelegations() { s.Run("two unbonded validators to be removed", func() { // 2 unbonded validators with delegations past inactive time, both should be removed unbondedVal1 := s.CreateValidator(s.startTime.Add(-30*24*time.Hour), stakingtypes.Unbonded) - s.DelegateToValidator(unbondedVal1.GetOperator(), addr1, delegationCoin) - s.DelegateToValidator(unbondedVal1.GetOperator(), addr2, delegationCoin) - var found bool - unbondedVal1, found = s.app.StakingKeeper.GetValidator(s.ctx, unbondedVal1.GetOperator()) - s.Require().True(found, "Setup: GetValidator(unbondedVal1) found") + unbondedVal1Addr := s.GetOperatorAddr(unbondedVal1) + s.DelegateToValidator(unbondedVal1Addr, addr1, delegationCoin) + s.DelegateToValidator(unbondedVal1Addr, addr2, delegationCoin) + var err error + unbondedVal1, err = s.app.StakingKeeper.GetValidator(s.ctx, unbondedVal1Addr) + s.Require().NoError(err, "Setup: GetValidator(unbondedVal1) found") s.Require().Equal(delegationCoinAmt.Add(delegationCoinAmt), unbondedVal1.DelegatorShares, "Setup: shares delegated to unbondedVal1") unbondedVal2 := s.CreateValidator(s.startTime.Add(-29*24*time.Hour), stakingtypes.Unbonded) - s.DelegateToValidator(unbondedVal2.GetOperator(), addr1, delegationCoin) - s.DelegateToValidator(unbondedVal2.GetOperator(), addr2, delegationCoin) - unbondedVal2, found = s.app.StakingKeeper.GetValidator(s.ctx, unbondedVal2.GetOperator()) - s.Require().True(found, "Setup: GetValidator(unbondedVal2) found") + unbondedVal2Addr := s.GetOperatorAddr(unbondedVal2) + s.DelegateToValidator(unbondedVal2Addr, addr1, delegationCoin) + s.DelegateToValidator(unbondedVal2Addr, addr2, delegationCoin) + unbondedVal2, err = s.app.StakingKeeper.GetValidator(s.ctx, unbondedVal2Addr) + s.Require().NoError(err, "Setup: GetValidator(unbondedVal2) found") s.Require().Equal(delegationCoinAmt.Add(delegationCoinAmt), unbondedVal2.DelegatorShares, "Setup: shares delegated to unbondedVal2") - validators := s.app.StakingKeeper.GetAllValidators(s.ctx) + validators, err := s.app.StakingKeeper.GetAllValidators(s.ctx) + s.Require().NoError(err, "GetAllValidators") s.Require().Len(validators, 3, "Setup: GetAllValidators should have: 1 bonded, 2 unbonded") expectedLogLines := []string{ @@ -610,15 +629,16 @@ func (s *UpgradeTestSuite) TestRemoveInactiveValidatorDelegations() { } s.ExecuteAndAssertLogs(runner, expectedLogLines, nil, false, runnerName) - validators = s.app.StakingKeeper.GetAllValidators(s.ctx) + validators, err = s.app.StakingKeeper.GetAllValidators(s.ctx) + s.Require().NoError(err, "GetAllValidators") s.Assert().Len(validators, 1, "GetAllValidators after %s", runnerName) - ubd, found := s.app.StakingKeeper.GetUnbondingDelegation(s.ctx, addr1, unbondedVal1.GetOperator()) - s.Assert().True(found, "GetUnbondingDelegation(addr1) found") + ubd, err := s.app.StakingKeeper.GetUnbondingDelegation(s.ctx, addr1, unbondedVal1Addr) + s.Assert().NoError(err, "GetUnbondingDelegation(addr1) found") if s.Assert().Len(ubd.Entries, 1, "GetUnbondingDelegation(addr1) entries") { s.Assert().Equal(delegationCoin.Amount, ubd.Entries[0].Balance, "GetUnbondingDelegation(addr1) balance") } - ubd, found = s.app.StakingKeeper.GetUnbondingDelegation(s.ctx, addr2, unbondedVal1.GetOperator()) - s.Assert().True(found, "GetUnbondingDelegation(addr2) found") + ubd, err = s.app.StakingKeeper.GetUnbondingDelegation(s.ctx, addr2, unbondedVal1Addr) + s.Assert().NoError(err, "GetUnbondingDelegation(addr2) found") if s.Assert().Len(ubd.Entries, 1, "GetUnbondingDelegation(addr2) entries") { s.Assert().Equal(delegationCoin.Amount, ubd.Entries[0].Balance, "GetUnbondingDelegation(addr2) balance") } @@ -627,19 +647,22 @@ func (s *UpgradeTestSuite) TestRemoveInactiveValidatorDelegations() { s.Run("two unbonded validators one too recently", func() { // 2 unbonded validators, 1 under the inactive day count, should only remove one unbondedVal1 := s.CreateValidator(s.startTime.Add(-30*24*time.Hour), stakingtypes.Unbonded) - s.DelegateToValidator(unbondedVal1.GetOperator(), addr1, delegationCoin) - s.DelegateToValidator(unbondedVal1.GetOperator(), addr2, delegationCoin) - var found bool - unbondedVal1, found = s.app.StakingKeeper.GetValidator(s.ctx, unbondedVal1.GetOperator()) - s.Require().True(found, "Setup: GetValidator(unbondedVal1) found") + unbondedVal1Addr := s.GetOperatorAddr(unbondedVal1) + s.DelegateToValidator(unbondedVal1Addr, addr1, delegationCoin) + s.DelegateToValidator(unbondedVal1Addr, addr2, delegationCoin) + var err error + unbondedVal1, err = s.app.StakingKeeper.GetValidator(s.ctx, unbondedVal1Addr) + s.Require().NoError(err, "Setup: GetValidator(unbondedVal1) found") s.Require().Equal(delegationCoinAmt.Add(delegationCoinAmt), unbondedVal1.DelegatorShares, "Setup: shares delegated to unbondedVal1") unbondedVal2 := s.CreateValidator(s.startTime.Add(-20*24*time.Hour), stakingtypes.Unbonded) - s.DelegateToValidator(unbondedVal2.GetOperator(), addr1, delegationCoin) - unbondedVal2, found = s.app.StakingKeeper.GetValidator(s.ctx, unbondedVal2.GetOperator()) - s.Require().True(found, "Setup: GetValidator(unbondedVal2) found") + unbondedVal2Addr := s.GetOperatorAddr(unbondedVal2) + s.DelegateToValidator(unbondedVal2Addr, addr1, delegationCoin) + unbondedVal2, err = s.app.StakingKeeper.GetValidator(s.ctx, unbondedVal2Addr) + s.Require().NoError(err, "Setup: GetValidator(unbondedVal2) found") s.Require().Equal(delegationCoinAmt, unbondedVal2.DelegatorShares, "Setup: shares delegated to unbondedVal1") - validators := s.app.StakingKeeper.GetAllValidators(s.ctx) + validators, err := s.app.StakingKeeper.GetAllValidators(s.ctx) + s.Require().NoError(err, "GetAllValidators") s.Require().Len(validators, 3, "Setup: GetAllValidators should have: 1 bonded, 1 recently unbonded, 1 old unbonded") expectedLogLines := []string{ @@ -656,15 +679,16 @@ func (s *UpgradeTestSuite) TestRemoveInactiveValidatorDelegations() { } s.ExecuteAndAssertLogs(runner, expectedLogLines, notExpectedLogLines, false, runnerName) - validators = s.app.StakingKeeper.GetAllValidators(s.ctx) + validators, err = s.app.StakingKeeper.GetAllValidators(s.ctx) + s.Require().NoError(err, "GetAllValidators") s.Assert().Len(validators, 2, "GetAllValidators after %s", runnerName) - ubd, found := s.app.StakingKeeper.GetUnbondingDelegation(s.ctx, addr1, unbondedVal1.GetOperator()) - s.Assert().True(found, "GetUnbondingDelegation(addr1) found") + ubd, err := s.app.StakingKeeper.GetUnbondingDelegation(s.ctx, addr1, unbondedVal1Addr) + s.Assert().NoError(err, "GetUnbondingDelegation(addr1) found") if s.Assert().Len(ubd.Entries, 1, "GetUnbondingDelegation(addr1) entries") { s.Assert().Equal(delegationCoin.Amount, ubd.Entries[0].Balance, "GetUnbondingDelegation(addr1) balance") } - ubd, found = s.app.StakingKeeper.GetUnbondingDelegation(s.ctx, addr2, unbondedVal1.GetOperator()) - s.Assert().True(found, "GetUnbondingDelegation(addr2) found") + ubd, err = s.app.StakingKeeper.GetUnbondingDelegation(s.ctx, addr2, unbondedVal1Addr) + s.Assert().NoError(err, "GetUnbondingDelegation(addr2) found") if s.Assert().Len(ubd.Entries, 1, "GetUnbondingDelegation(addr2) entries") { s.Assert().Equal(delegationCoin.Amount, ubd.Entries[0].Balance, "GetUnbondingDelegation(addr2) balance") } @@ -673,7 +697,8 @@ func (s *UpgradeTestSuite) TestRemoveInactiveValidatorDelegations() { s.Run("unbonded without delegators", func() { // create a unbonded validator with out delegators, should not remove unbondedVal1 := s.CreateValidator(s.startTime.Add(-30*24*time.Hour), stakingtypes.Unbonded) - validators := s.app.StakingKeeper.GetAllValidators(s.ctx) + validators, err := s.app.StakingKeeper.GetAllValidators(s.ctx) + s.Require().NoError(err, "GetAllValidators") s.Require().Len(validators, 3, "Setup: GetAllValidators should have: 1 bonded, 1 recently unbonded, 1 empty unbonded") expectedLogLines := []string{ @@ -683,7 +708,8 @@ func (s *UpgradeTestSuite) TestRemoveInactiveValidatorDelegations() { } s.ExecuteAndAssertLogs(runner, expectedLogLines, nil, true, runnerName) - validators = s.app.StakingKeeper.GetAllValidators(s.ctx) + validators, err = s.app.StakingKeeper.GetAllValidators(s.ctx) + s.Require().NoError(err, "GetAllValidators") s.Assert().Len(validators, 3, "GetAllValidators after %s", runnerName) }) } @@ -888,13 +914,13 @@ func (s *UpgradeTestSuite) TestAddMarkerNavs() { testcoin := markertypes.NewEmptyMarkerAccount("testcoin", address1.String(), []markertypes.AccessGrant{}) - testcoin.Supply = sdk.OneInt() + testcoin.Supply = sdkmath.OneInt() s.Require().NoError(s.app.MarkerKeeper.AddMarkerAccount(s.ctx, testcoin), "AddMarkerAccount() error") testcoinInList := markertypes.NewEmptyMarkerAccount("testcoininlist", address1.String(), []markertypes.AccessGrant{}) - testcoinInList.Supply = sdk.OneInt() + testcoinInList.Supply = sdkmath.OneInt() s.Require().NoError(s.app.MarkerKeeper.AddMarkerAccount(s.ctx, testcoinInList), "AddMarkerAccount() error") nosupplycoin := markertypes.NewEmptyMarkerAccount("nosupplycoin", @@ -905,7 +931,7 @@ func (s *UpgradeTestSuite) TestAddMarkerNavs() { hasnavcoin := markertypes.NewEmptyMarkerAccount("hasnavcoin", address1.String(), []markertypes.AccessGrant{}) - hasnavcoin.Supply = sdk.NewInt(100) + hasnavcoin.Supply = sdkmath.NewInt(100) s.Require().NoError(s.app.MarkerKeeper.AddMarkerAccount(s.ctx, hasnavcoin), "AddMarkerAccount() error") presentnav := markertypes.NewNetAssetValue(sdk.NewInt64Coin(markertypes.UsdDenom, int64(55)), uint64(100)) s.Require().NoError(s.app.MarkerKeeper.AddSetNetAssetValues(s.ctx, hasnavcoin, []markertypes.NetAssetValue{presentnav}, "test")) diff --git a/client/rosetta/rosetta-ci/Dockerfile b/client/rosetta/rosetta-ci/Dockerfile index 96d739f247..e40e98ed87 100644 --- a/client/rosetta/rosetta-ci/Dockerfile +++ b/client/rosetta/rosetta-ci/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.20-bullseye as build +FROM golang:1.21-bullseye as build ARG VERSION WORKDIR /go/src/github.com/provenance-io/provenance diff --git a/cmd/dbmigrate/cmd/dbmigrate.go b/cmd/dbmigrate/cmd/dbmigrate.go index ef05b38f5e..f41ecdedd4 100644 --- a/cmd/dbmigrate/cmd/dbmigrate.go +++ b/cmd/dbmigrate/cmd/dbmigrate.go @@ -9,7 +9,7 @@ import ( "github.com/spf13/cobra" "github.com/spf13/viper" - tmcli "github.com/tendermint/tendermint/libs/cli" + cmtcli "github.com/cometbft/cometbft/libs/cli" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" @@ -149,7 +149,7 @@ func Execute(command *cobra.Command) error { ctx = context.WithValue(ctx, client.ClientContextKey, &client.Context{}) ctx = context.WithValue(ctx, server.ServerContextKey, server.NewDefaultContext()) - command.PersistentFlags().String(tmcli.HomeFlag, app.DefaultNodeHome, "directory for config and data") + command.PersistentFlags().String(cmtcli.HomeFlag, app.DefaultNodeHome, "directory for config and data") return command.ExecuteContext(ctx) } diff --git a/cmd/dbmigrate/main.go b/cmd/dbmigrate/main.go index 311c87ba70..36508f41e9 100644 --- a/cmd/dbmigrate/main.go +++ b/cmd/dbmigrate/main.go @@ -4,18 +4,20 @@ import ( "errors" "os" - "github.com/cosmos/cosmos-sdk/server" - "github.com/provenance-io/provenance/cmd/dbmigrate/cmd" + cmderrors "github.com/provenance-io/provenance/cmd/errors" ) func main() { rootCmd := cmd.NewDBMigrateCmd() if err := cmd.Execute(rootCmd); err != nil { - var srvErr *server.ErrorCode + var srvErrP *cmderrors.ExitCodeError + var srvErr cmderrors.ExitCodeError switch { + case errors.As(err, &srvErrP): + os.Exit(int(*srvErrP)) case errors.As(err, &srvErr): - os.Exit(srvErr.Code) + os.Exit(int(srvErr)) default: os.Exit(1) } diff --git a/cmd/dbmigrate/utils/badgerdb.go b/cmd/dbmigrate/utils/badgerdb.go index 6987119e27..18f301f6d1 100644 --- a/cmd/dbmigrate/utils/badgerdb.go +++ b/cmd/dbmigrate/utils/badgerdb.go @@ -4,7 +4,7 @@ package utils import ( - tmdb "github.com/tendermint/tm-db" + dbm "github.com/cometbft/cometbft-db" ) // This file is included when built with the badgerdb tag (which matches the tag Tendermint looks for). @@ -13,5 +13,5 @@ import ( // That's all this is doing, just identifying that it was built with that tag and that this DB type is available. func init() { - AddPossibleDBType(tmdb.BadgerDBBackend) + AddPossibleDBType(dbm.BadgerDBBackend) } diff --git a/cmd/dbmigrate/utils/boltdb.go b/cmd/dbmigrate/utils/boltdb.go index be80890982..ff9379612a 100644 --- a/cmd/dbmigrate/utils/boltdb.go +++ b/cmd/dbmigrate/utils/boltdb.go @@ -4,7 +4,7 @@ package utils import ( - tmdb "github.com/tendermint/tm-db" + dbm "github.com/cometbft/cometbft-db" ) // This file is included when built with the boltdb tag (which matches the tag Tendermint looks for). @@ -13,5 +13,5 @@ import ( // That's all this is doing, just identifying that it was built with that tag and that this DB type is available. func init() { - AddPossibleDBType(tmdb.BoltDBBackend) + AddPossibleDBType(dbm.BoltDBBackend) } diff --git a/cmd/dbmigrate/utils/cleveldb.go b/cmd/dbmigrate/utils/cleveldb.go index 48edd4553c..576fe22339 100644 --- a/cmd/dbmigrate/utils/cleveldb.go +++ b/cmd/dbmigrate/utils/cleveldb.go @@ -4,7 +4,7 @@ package utils import ( - tmdb "github.com/tendermint/tm-db" + dbm "github.com/cometbft/cometbft-db" ) // This file is included when built with the cleveldb tag (which matches the tag Tendermint looks for). @@ -13,5 +13,5 @@ import ( // That's all this is doing, just identifying that it was built with that tag and that this DB type is available. func init() { - AddPossibleDBType(tmdb.CLevelDBBackend) + AddPossibleDBType(dbm.CLevelDBBackend) } diff --git a/cmd/dbmigrate/utils/migrator.go b/cmd/dbmigrate/utils/migrator.go index 76eda9656b..19ea3f806e 100644 --- a/cmd/dbmigrate/utils/migrator.go +++ b/cmd/dbmigrate/utils/migrator.go @@ -13,30 +13,31 @@ import ( copier "github.com/otiai10/copy" - tmlog "github.com/tendermint/tendermint/libs/log" - tmdb "github.com/tendermint/tm-db" + dbm "github.com/cometbft/cometbft-db" + + "cosmossdk.io/log" ) const ( // BytesPerMB is the number of bytes in a megabyte. BytesPerMB = 1_048_576 - // unknownDBBackend is mostly a tmdb.BackendType used in output as a string. + // unknownDBBackend is mostly a dbm.BackendType used in output as a string. // It indicates that the backend is unknown. - unknownDBBackend = tmdb.BackendType("UNKNOWN") + unknownDBBackend = dbm.BackendType("UNKNOWN") ) // Note: The PossibleDBTypes variable is a map instead of a slice because trying to append to it was causing one type to // stomp out the append from another type (concurrency issue?). // PossibleDBTypes is a map of strings to BackendTypes representing the Backend types that can be used by this utility. -var PossibleDBTypes = map[string]tmdb.BackendType{} +var PossibleDBTypes = map[string]dbm.BackendType{} func init() { - PossibleDBTypes["goleveldb"] = tmdb.GoLevelDBBackend + PossibleDBTypes["goleveldb"] = dbm.GoLevelDBBackend } // AddPossibleDBType adds a possible db backend type. -func AddPossibleDBType(dbType tmdb.BackendType) { +func AddPossibleDBType(dbType dbm.BackendType) { PossibleDBTypes[string(dbType)] = dbType } @@ -132,10 +133,10 @@ type migrationManager struct { // Entries are set during the call to Migrate and are the return values of each MigrateDBDir call. Summaries map[string]string // SourceTypes is a map of ToConvert entries, to their backend type. - SourceTypes map[string]tmdb.BackendType + SourceTypes map[string]dbm.BackendType // Logger is the Logger to use for logging log messages. - Logger tmlog.Logger + Logger log.Logger // StatusTicker is the ticker used to issue regular status log messages. StatusTicker *time.Ticker @@ -262,7 +263,7 @@ func (m *Migrator) ReadSourceDataDir() error { // to the target type in the StagingDataDir. // It then copies everything in ToCopy from the SourceDataDir to the StagingDataDir. // It then moves the SourceDataDir to BackupDataDir and moves StagingDataDir into place where SourceDataDir was. -func (m *Migrator) Migrate(logger tmlog.Logger) (errRv error) { +func (m *Migrator) Migrate(logger log.Logger) (errRv error) { defer func() { if r := recover(); r != nil { errRv = fmt.Errorf("recovered from panic: %v", r) @@ -352,13 +353,13 @@ func (m *Migrator) Migrate(logger tmlog.Logger) (errRv error) { // startMigratorManager creates a migrationManager and initializes it. // It must later be closed. -func (m Migrator) startMigratorManager(logger tmlog.Logger) (*migrationManager, error) { +func (m Migrator) startMigratorManager(logger log.Logger) (*migrationManager, error) { rv := &migrationManager{ Migrator: m, Status: "starting", TimeStarted: time.Now(), Summaries: map[string]string{}, - SourceTypes: map[string]tmdb.BackendType{}, + SourceTypes: map[string]dbm.BackendType{}, Logger: logger, StatusTicker: time.NewTicker(m.StatusPeriod), StatusKeyvals: noKeyvals, @@ -437,9 +438,9 @@ func (m *migrationManager) MigrateDBDir(dbDir string) (summary string, err error // There's several things that need closing and sometimes calling close can cause a segmentation fault that, // for some reason, doesn't reach the SigChan notification set up in the Migrate method. // So just to have clearer control over closing order, they're all defined at once and closed in a single defer function. - var sourceDB, targetDB tmdb.DB - var iter tmdb.Iterator - var batch tmdb.Batch + var sourceDB, targetDB dbm.DB + var iter dbm.Iterator + var batch dbm.Batch sourceDBType := unknownDBBackend defer func() { m.StatusKeyvals = noKeyvals @@ -464,7 +465,7 @@ func (m *migrationManager) MigrateDBDir(dbDir string) (summary string, err error }() m.Status = "detecting db type" - sourceDBType, ok := tmdb.BackendType(m.Migrator.SourceDBType), true + sourceDBType, ok := dbm.BackendType(m.Migrator.SourceDBType), true if len(m.Migrator.SourceDBType) == 0 { sourceDBType, ok = DetectDBType(dbName, sourceDir) } @@ -488,7 +489,7 @@ func (m *migrationManager) MigrateDBDir(dbDir string) (summary string, err error } // If they're both the same type, just copy it and be done. - targetDBBackendType := tmdb.BackendType(m.TargetDBType) + targetDBBackendType := dbm.BackendType(m.TargetDBType) if sourceDBType == targetDBBackendType { m.Status = "copying db" from := filepath.Join(m.SourceDataDir, dbDir) @@ -509,13 +510,13 @@ func (m *migrationManager) MigrateDBDir(dbDir string) (summary string, err error } m.Status = "opening source db" - sourceDB, err = tmdb.NewDB(dbName, sourceDBType, sourceDir) + sourceDB, err = dbm.NewDB(dbName, sourceDBType, sourceDir) if err != nil { return summaryError, fmt.Errorf("could not open %q source db: %w", dbName, err) } m.Status = "opening target db" - targetDB, err = tmdb.NewDB(dbName, targetDBBackendType, targetDir) + targetDB, err = dbm.NewDB(dbName, targetDBBackendType, targetDir) if err != nil { return summaryError, fmt.Errorf("could not open %q target db: %w", dbName, err) } @@ -799,14 +800,14 @@ func GetDataDirContents(dataDirPath string) ([]string, []string, error) { } // DetectDBType attempts to identify the type database in the given dir with the given name. -// The name and dir would be the same things that would be provided to tmdb.NewDB. +// The name and dir would be the same things that would be provided to dbm.NewDB. // // The return bool indicates whether or not the DB type was identified. // // The only types this detects are LevelDB, RocksDB, and BadgerDB. // If the DB is another type, the behavior of this is unknown. // There's a chance this will return false, but there's also a chance it is falsely identified as something else. -func DetectDBType(name, dir string) (tmdb.BackendType, bool) { +func DetectDBType(name, dir string) (dbm.BackendType, bool) { // Here are the key differences used to differentiate the DB types. // badgerdb: // * In a directory named "dir/name". @@ -849,13 +850,13 @@ func DetectDBType(name, dir string) (tmdb.BackendType, bool) { } // Could also check for a numbered files with the extension ".vlog", but that's expensive. // And for the types involved in here, what's been done should be enough to hopefully prevent false positives. - return tmdb.BadgerDBBackend, true + return dbm.BadgerDBBackend, true } // Now lets check for boltdb. It's a file instead of directory with the same name used by rocksdb and leveldb. dbDir = filepath.Join(dir, name+".db") if fileExists(dbDir) { - return tmdb.BoltDBBackend, true + return dbm.BoltDBBackend, true } // The other two (rocksdb and leveldb) should be in directories named "dir/name.db". @@ -868,23 +869,23 @@ func DetectDBType(name, dir string) (tmdb.BackendType, bool) { // The only statically named file difference between rocksdb and leveldb is IDENTITY with rocksdb. if fileExists(filepath.Join(dbDir, "IDENTITY")) { - return tmdb.RocksDBBackend, true + return dbm.RocksDBBackend, true } // At this point, we assume it's either cleveldb or goleveldb. // Unfortunately, they both use the same files, but possibly with different formats. // Sometimes you can treat a goleveldb as cleveldb and vice versa, but sometimes you can't. // The only way I can think of to differentiate them here is to just try to open them. - // I didn't test like this with the other types because the tmdb.NewDB function will create + // I didn't test like this with the other types because the dbm.NewDB function will create // a db if it doesn't exist which can cause weird behavior if trying with the wrong db type. // Goleveldb and cleveldb are close enough, though that it won't cause problems. - canOpenDB := func(backend tmdb.BackendType) (rv bool) { + canOpenDB := func(backend dbm.BackendType) (rv bool) { defer func() { if r := recover(); r != nil { rv = false } }() - db, err := tmdb.NewDB(name, backend, dir) + db, err := dbm.NewDB(name, backend, dir) if err != nil { return false } @@ -914,11 +915,11 @@ func DetectDBType(name, dir string) (tmdb.BackendType, bool) { return true } - if canOpenDB(tmdb.GoLevelDBBackend) { - return tmdb.GoLevelDBBackend, true + if canOpenDB(dbm.GoLevelDBBackend) { + return dbm.GoLevelDBBackend, true } - if IsPossibleDBType(string(tmdb.CLevelDBBackend)) && canOpenDB(tmdb.CLevelDBBackend) { - return tmdb.CLevelDBBackend, true + if IsPossibleDBType(string(dbm.CLevelDBBackend)) && canOpenDB(dbm.CLevelDBBackend) { + return dbm.CLevelDBBackend, true } return unknownDBBackend, false diff --git a/cmd/dbmigrate/utils/migrator_test.go b/cmd/dbmigrate/utils/migrator_test.go index cd90b43167..00ad17b7c0 100644 --- a/cmd/dbmigrate/utils/migrator_test.go +++ b/cmd/dbmigrate/utils/migrator_test.go @@ -10,7 +10,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" - tmdb "github.com/tendermint/tm-db" + + dbm "github.com/cometbft/cometbft-db" ) type MigratorTestSuite struct { @@ -783,7 +784,7 @@ func (s *MigratorTestSuite) TestDetectDBType() { tDir := s.T().TempDir() s.T().Run("badger", func(t *testing.T) { - expected := tmdb.BadgerDBBackend + expected := dbm.BadgerDBBackend name := "badger1" dataDir := filepath.Join(tDir, "badger") dbDir := filepath.Join(dataDir, name) @@ -796,7 +797,7 @@ func (s *MigratorTestSuite) TestDetectDBType() { }) s.T().Run("rocks", func(t *testing.T) { - expected := tmdb.RocksDBBackend + expected := dbm.RocksDBBackend name := "rocks2" dataDir := filepath.Join(tDir, "rocks") dbDir := filepath.Join(dataDir, name+".db") @@ -816,13 +817,13 @@ func (s *MigratorTestSuite) TestDetectDBType() { s.T().Run("clevel", func(t *testing.T) { // As far as I can tell, you can always open a cleveldb using goleveldb, but not vice versa. // Since DetectDBType checks for goleveldb first, it should return as goleveldb in this test. - expected := tmdb.GoLevelDBBackend + expected := dbm.GoLevelDBBackend name := "clevel3" dataDir := filepath.Join(tDir, "clevel") require.NoError(t, os.MkdirAll(dataDir, 0700), "making data dir") // The reason the other db types aren't done this way (creating the db with NewDB) is that // I didn't want to cause confusion with regard to build tags and external library dependencies. - db, err := tmdb.NewDB(name, tmdb.CLevelDBBackend, dataDir) + db, err := dbm.NewDB(name, dbm.CLevelDBBackend, dataDir) require.NoError(t, err, "NewDB") for i := 0; i < 15; i++ { assert.NoError(t, db.Set([]byte(fmt.Sprintf("%s-key-%d", name, i)), []byte(fmt.Sprintf("%s-value-%d", name, i))), "setting key/value %d", i) @@ -835,13 +836,13 @@ func (s *MigratorTestSuite) TestDetectDBType() { } s.T().Run("golevel", func(t *testing.T) { - expected := tmdb.GoLevelDBBackend + expected := dbm.GoLevelDBBackend name := "golevel8" dataDir := filepath.Join(tDir, "golevel") require.NoError(t, os.MkdirAll(dataDir, 0700), "making data dir") // The reason the other db types aren't done this way (creating the db with NewDB) is that // I didn't want to cause confusion with regard to build tags and external library dependencies. - db, err := tmdb.NewDB(name, expected, dataDir) + db, err := dbm.NewDB(name, expected, dataDir) require.NoError(t, err, "NewDB") for i := 0; i < 15; i++ { assert.NoError(t, db.Set([]byte(fmt.Sprintf("%s-key-%d", name, i)), []byte(fmt.Sprintf("%s-value-%d", name, i))), "setting key/value %d", i) @@ -853,7 +854,7 @@ func (s *MigratorTestSuite) TestDetectDBType() { }) s.T().Run("boltdb", func(t *testing.T) { - expected := tmdb.BoltDBBackend + expected := dbm.BoltDBBackend name := "bolt7" dataDir := filepath.Join(tDir, "bolt") dbFile := filepath.Join(dataDir, name+".db") diff --git a/cmd/dbmigrate/utils/rocksdb.go b/cmd/dbmigrate/utils/rocksdb.go index 21606f53d9..83c113c273 100644 --- a/cmd/dbmigrate/utils/rocksdb.go +++ b/cmd/dbmigrate/utils/rocksdb.go @@ -4,7 +4,7 @@ package utils import ( - tmdb "github.com/tendermint/tm-db" + dbm "github.com/cometbft/cometbft-db" ) // This file is included when built with the rocksdb tag (which matches the tag Tendermint looks for). @@ -13,5 +13,5 @@ import ( // That's all this is doing, just identifying that it was built with that tag and that this DB type is available. func init() { - AddPossibleDBType(tmdb.RocksDBBackend) + AddPossibleDBType(dbm.RocksDBBackend) } diff --git a/cmd/errors/errors.go b/cmd/errors/errors.go new file mode 100644 index 0000000000..586e5ea2eb --- /dev/null +++ b/cmd/errors/errors.go @@ -0,0 +1,12 @@ +package errors + +import "fmt" + +// ExitCodeError contains the exit code for cmd exit, and satisfies the error interface. +type ExitCodeError int + +var _ error = (*ExitCodeError)(nil) + +func (e ExitCodeError) Error() string { + return fmt.Sprintf("exit code: %d", e) +} diff --git a/cmd/provenanced/cmd/addresses_test.go b/cmd/provenanced/cmd/addresses_test.go index f7c9e8a619..c3e758fe31 100644 --- a/cmd/provenanced/cmd/addresses_test.go +++ b/cmd/provenanced/cmd/addresses_test.go @@ -4,7 +4,7 @@ import ( "bytes" "encoding/hex" "fmt" - "io/ioutil" + "io" "testing" "github.com/google/uuid" @@ -70,7 +70,7 @@ func TestMetaaddressTestSuite(t *testing.T) { suite.Run(t, new(MetaaddressTestSuite)) } -func (s MetaaddressTestSuite) TestAddMetaAddressDecoder() { +func (s *MetaaddressTestSuite) TestAddMetaAddressDecoder() { command := cmd.AddMetaAddressDecoder() tests := []struct { @@ -160,7 +160,7 @@ func (s MetaaddressTestSuite) TestAddMetaAddressDecoder() { require.EqualErrorf(t, err, tc.err, "%s - expected error", command.Name()) } else { require.NoErrorf(t, err, "%s - unexpected error", command.Name()) - out, err := ioutil.ReadAll(b) + out, err := io.ReadAll(b) require.NoError(t, err, "%s - unexpected buffer read error", command.Name()) outStr := string(out) for _, str := range tc.inResult { @@ -171,7 +171,7 @@ func (s MetaaddressTestSuite) TestAddMetaAddressDecoder() { } } -func (s MetaaddressTestSuite) TestAddMetaAddressEncoder() { +func (s *MetaaddressTestSuite) TestAddMetaAddressEncoder() { command := cmd.AddMetaAddressEncoder() tests := []struct { @@ -374,7 +374,7 @@ func (s MetaaddressTestSuite) TestAddMetaAddressEncoder() { require.EqualErrorf(t, err, tc.err, "%s - expected error", command.Name()) } else { require.NoErrorf(t, err, "%s - unexpected error", command.Name()) - out, err := ioutil.ReadAll(b) + out, err := io.ReadAll(b) require.NoError(t, err, "%s - unexpected buffer read error", command.Name()) outStr := string(out) for _, str := range tc.inResult { diff --git a/cmd/provenanced/cmd/config_test.go b/cmd/provenanced/cmd/config_test.go index a8a099bec5..1db58bcfca 100644 --- a/cmd/provenanced/cmd/config_test.go +++ b/cmd/provenanced/cmd/config_test.go @@ -17,11 +17,11 @@ import ( "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" - "github.com/tendermint/tendermint/libs/log" + "cosmossdk.io/log" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/server" - sdksim "github.com/cosmos/cosmos-sdk/simapp" + moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" "github.com/provenance-io/provenance/cmd/provenanced/cmd" provconfig "github.com/provenance-io/provenance/cmd/provenanced/config" @@ -51,7 +51,7 @@ func (s *ConfigTestSuite) SetupTest() { pioconfig.SetProvenanceConfig("confcoin", 5) - encodingConfig := sdksim.MakeTestEncodingConfig() + encodingConfig := moduletestutil.MakeTestEncodingConfig() clientCtx := client.Context{}. WithCodec(encodingConfig.Codec). WithHomeDir(s.Home) diff --git a/cmd/provenanced/cmd/docgen_test.go b/cmd/provenanced/cmd/docgen_test.go index 9b92feda7e..83814c2046 100644 --- a/cmd/provenanced/cmd/docgen_test.go +++ b/cmd/provenanced/cmd/docgen_test.go @@ -8,14 +8,17 @@ import ( "strings" "testing" + "github.com/spf13/viper" + "github.com/stretchr/testify/require" + + "cosmossdk.io/log" + "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/server" - sdksim "github.com/cosmos/cosmos-sdk/simapp" + moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" genutiltest "github.com/cosmos/cosmos-sdk/x/genutil/client/testutil" + provenancecmd "github.com/provenance-io/provenance/cmd/provenanced/cmd" - "github.com/spf13/viper" - "github.com/stretchr/testify/require" - "github.com/tendermint/tendermint/libs/log" ) func TestDocGen(t *testing.T) { @@ -129,10 +132,10 @@ func TestDocGen(t *testing.T) { } logger := log.NewNopLogger() - cfg, err := genutiltest.CreateDefaultTendermintConfig(home) + cfg, err := genutiltest.CreateDefaultCometConfig(home) require.NoError(t, err, "Created default tendermint config") - appCodec := sdksim.MakeTestEncodingConfig().Codec + appCodec := moduletestutil.MakeTestEncodingConfig().Codec err = genutiltest.ExecInitCmd(testMbm, home, appCodec) require.NoError(t, err, "Executed init command") diff --git a/cmd/provenanced/cmd/genaccounts.go b/cmd/provenanced/cmd/genaccounts.go index d136033dd7..1a23b8164d 100644 --- a/cmd/provenanced/cmd/genaccounts.go +++ b/cmd/provenanced/cmd/genaccounts.go @@ -168,7 +168,10 @@ contain valid denominations. Accounts may optionally be supplied with vesting pa baseAccount := authtypes.NewBaseAccount(addr, nil, 0, 0) if !vestingAmt.IsZero() { - baseVestingAccount := authvesting.NewBaseVestingAccount(baseAccount, vestingAmt.Sort(), vestingEnd) + baseVestingAccount, err := authvesting.NewBaseVestingAccount(baseAccount, vestingAmt.Sort(), vestingEnd) + if err != nil { + return fmt.Errorf("failed to create new vesting account: %w", err) + } if (balances.Coins.IsZero() && !baseVestingAccount.OriginalVesting.IsZero()) || baseVestingAccount.OriginalVesting.IsAnyGT(balances.Coins) { diff --git a/cmd/provenanced/cmd/genaccounts_test.go b/cmd/provenanced/cmd/genaccounts_test.go index 5b7ed7e3f3..ab27061b3e 100644 --- a/cmd/provenanced/cmd/genaccounts_test.go +++ b/cmd/provenanced/cmd/genaccounts_test.go @@ -11,19 +11,17 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/tendermint/tendermint/libs/log" - + "cosmossdk.io/log" sdkmath "cosmossdk.io/math" - "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/server" - sdksim "github.com/cosmos/cosmos-sdk/simapp" "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" + moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "github.com/cosmos/cosmos-sdk/x/genutil" genutiltest "github.com/cosmos/cosmos-sdk/x/genutil/client/testutil" @@ -71,10 +69,10 @@ func TestAddGenesisAccountCmd(t *testing.T) { t.Run(tc.name, func(t *testing.T) { home := t.TempDir() logger := log.NewNopLogger() - cfg, err := genutiltest.CreateDefaultTendermintConfig(home) + cfg, err := genutiltest.CreateDefaultCometConfig(home) require.NoError(t, err) - appCodec := sdksim.MakeTestEncodingConfig().Codec + appCodec := moduletestutil.MakeTestEncodingConfig().Codec err = genutiltest.ExecInitCmd(testMbm, home, appCodec) require.NoError(t, err) @@ -143,10 +141,10 @@ func TestAddGenesisMsgFeeCmd(t *testing.T) { t.Run(tc.name, func(t *testing.T) { home := t.TempDir() logger := log.NewNopLogger() - cfg, err := genutiltest.CreateDefaultTendermintConfig(home) + cfg, err := genutiltest.CreateDefaultCometConfig(home) require.NoError(t, err) - appCodec := sdksim.MakeTestEncodingConfig().Codec + appCodec := moduletestutil.MakeTestEncodingConfig().Codec err = genutiltest.ExecInitCmd(testMbm, home, appCodec) require.NoError(t, err) @@ -337,9 +335,9 @@ func TestAddGenesisDefaultMarketCmd(t *testing.T) { // Create a new home dir and initialize it. home := t.TempDir() - cfg, err := genutiltest.CreateDefaultTendermintConfig(home) - require.NoError(t, err, "setup: CreateDefaultTendermintConfig(%q)", home) - cdc := sdksim.MakeTestEncodingConfig().Codec + cfg, err := genutiltest.CreateDefaultCometConfig(home) + require.NoError(t, err, "setup: CreateDefaultCometConfig(%q)", home) + cdc := moduletestutil.MakeTestEncodingConfig().Codec err = genutiltest.ExecInitCmd(testMbm, home, cdc) require.NoError(t, err, "setup: ExecInitCmd") @@ -655,9 +653,9 @@ func TestAddGenesisCustomMarketCmd(t *testing.T) { // Create a new home dir and initialize it. home := t.TempDir() - cfg, err := genutiltest.CreateDefaultTendermintConfig(home) - require.NoError(t, err, "setup: CreateDefaultTendermintConfig(%q)", home) - cdc := sdksim.MakeTestEncodingConfig().Codec + cfg, err := genutiltest.CreateDefaultCometConfig(home) + require.NoError(t, err, "setup: CreateDefaultCometConfig(%q)", home) + cdc := moduletestutil.MakeTestEncodingConfig().Codec err = genutiltest.ExecInitCmd(testMbm, home, cdc) require.NoError(t, err, "setup: ExecInitCmd") @@ -815,7 +813,7 @@ func TestAddMarketsToAppState(t *testing.T) { t.Run(tc.name, func(t *testing.T) { fixEmptiesInExchangeGenState(&tc.expExGenState) - appCdc := sdksim.MakeTestEncodingConfig().Codec + appCdc := moduletestutil.MakeTestEncodingConfig().Codec egsBz, err := appCdc.MarshalJSON(&tc.exGenState) require.NoError(t, err, "MarshalJSON initial exchange genesis state") appState := map[string]json.RawMessage{exchange.ModuleName: egsBz} diff --git a/cmd/provenanced/cmd/init.go b/cmd/provenanced/cmd/init.go index 76d64b97a3..235906af43 100644 --- a/cmd/provenanced/cmd/init.go +++ b/cmd/provenanced/cmd/init.go @@ -11,11 +11,12 @@ import ( "github.com/spf13/cobra" - tmos "github.com/tendermint/tendermint/libs/os" - tmrand "github.com/tendermint/tendermint/libs/rand" - "github.com/tendermint/tendermint/types" + cmtos "github.com/cometbft/cometbft/libs/os" + cmtrand "github.com/cometbft/cometbft/libs/rand" + cmttypes "github.com/cometbft/cometbft/types" - errors "cosmossdk.io/errors" + cerrs "cosmossdk.io/errors" + sdkmath "cosmossdk.io/math" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" @@ -25,6 +26,7 @@ import ( "github.com/cosmos/cosmos-sdk/types/module" crisistypes "github.com/cosmos/cosmos-sdk/x/crisis/types" "github.com/cosmos/cosmos-sdk/x/genutil" + genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" govtypesv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" @@ -104,7 +106,7 @@ func Init( // Stop now if the genesis file already exists and an overwrite wasn't requested. genFile := tmConfig.GenesisFile() - if !doOverwrite && tmos.FileExists(genFile) { + if !doOverwrite && cmtos.FileExists(genFile) { return fmt.Errorf("genesis file already exists: %v", genFile) } @@ -113,7 +115,7 @@ func Init( tmConfig.Moniker = moniker if len(chainID) == 0 { - chainID = "provenance-chain-" + tmrand.NewRand().Str(6) + chainID = "provenance-chain-" + cmtrand.NewRand().Str(6) cmd.Printf("chain id: %s\n", chainID) } clientConfig.ChainID = chainID @@ -194,13 +196,13 @@ func createAndExportGenesisFile( moduleName := minttypes.ModuleName var mintGenState minttypes.GenesisState cdc.MustUnmarshalJSON(appGenState[moduleName], &mintGenState) - mintGenState.Minter.Inflation = sdk.ZeroDec() - mintGenState.Minter.AnnualProvisions = sdk.OneDec() + mintGenState.Minter.Inflation = sdkmath.LegacyZeroDec() + mintGenState.Minter.AnnualProvisions = sdkmath.LegacyOneDec() mintGenState.Params.MintDenom = pioconfig.GetProvenanceConfig().BondDenom - mintGenState.Params.InflationMax = sdk.ZeroDec() - mintGenState.Params.InflationMin = sdk.ZeroDec() - mintGenState.Params.InflationRateChange = sdk.OneDec() - mintGenState.Params.GoalBonded = sdk.OneDec() + mintGenState.Params.InflationMax = sdkmath.LegacyZeroDec() + mintGenState.Params.InflationMin = sdkmath.LegacyZeroDec() + mintGenState.Params.InflationRateChange = sdkmath.LegacyOneDec() + mintGenState.Params.GoalBonded = sdkmath.LegacyOneDec() mintGenState.Params.BlocksPerYear = 6311520 // (86400 / 5) * 365.25 appGenState[moduleName] = cdc.MustMarshalJSON(&mintGenState) } @@ -228,7 +230,7 @@ func createAndExportGenesisFile( moduleName := govtypes.ModuleName var govGenState govtypesv1beta1.GenesisState cdc.MustUnmarshalJSON(appGenState[moduleName], &govGenState) - govGenState.DepositParams.MinDeposit = sdk.NewCoins(sdk.NewCoin(pioconfig.GetProvenanceConfig().BondDenom, sdk.NewInt(minDeposit))) + govGenState.DepositParams.MinDeposit = sdk.NewCoins(sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().BondDenom, minDeposit)) appGenState[moduleName] = cdc.MustMarshalJSON(&govGenState) } @@ -267,28 +269,34 @@ func createAndExportGenesisFile( return err } - genDoc := &types.GenesisDoc{} + appGen := &genutiltypes.AppGenesis{} if _, err = os.Stat(genFile); err != nil { if !os.IsNotExist(err) { return err } } else { - genDoc, err = types.GenesisDocFromFile(genFile) + appGen, err = genutiltypes.AppGenesisFromFile(genFile) if err != nil { - return errors.Wrap(err, "Failed to read genesis doc from file") + return cerrs.Wrap(err, "Failed to read genesis doc from file") } } - genDoc.ChainID = chainID - genDoc.AppState = appState - genDoc.Validators = nil - if genDoc.ConsensusParams == nil { - genDoc.ConsensusParams = types.DefaultConsensusParams() + appGen.ChainID = chainID + appGen.AppState = appState + if appGen.Consensus == nil { + appGen.Consensus = &genutiltypes.ConsensusGenesis{ + Validators: nil, + Params: nil, + } + } + appGen.Consensus.Validators = nil + if appGen.Consensus.Params == nil { + appGen.Consensus.Params = cmttypes.DefaultConsensusParams() } - genDoc.ConsensusParams.Block.MaxGas = maxGas + appGen.Consensus.Params.Block.MaxGas = maxGas - if err = genutil.ExportGenesisFile(genDoc, genFile); err != nil { - return errors.Wrap(err, "Failed to export gensis file") + if err = genutil.ExportGenesisFile(appGen, genFile); err != nil { + return cerrs.Wrap(err, "Failed to export gensis file") } cmd.Printf("Genesis file created: %s\n", genFile) diff --git a/cmd/provenanced/cmd/pre_upgrade.go b/cmd/provenanced/cmd/pre_upgrade.go index 7532e0c2f9..31050ca887 100644 --- a/cmd/provenanced/cmd/pre_upgrade.go +++ b/cmd/provenanced/cmd/pre_upgrade.go @@ -6,17 +6,17 @@ import ( "github.com/spf13/cobra" - tmconfig "github.com/tendermint/tendermint/config" + cmtconfig "github.com/cometbft/cometbft/config" - "github.com/cosmos/cosmos-sdk/server" serverconfig "github.com/cosmos/cosmos-sdk/server/config" + cmderrors "github.com/provenance-io/provenance/cmd/errors" "github.com/provenance-io/provenance/cmd/provenanced/config" ) var ( - ErrFail error = server.ErrorCode{Code: 30} - ErrFailRetry error = server.ErrorCode{Code: 31} + ErrFail error = cmderrors.ExitCodeError(30) + ErrFailRetry error = cmderrors.ExitCodeError(31) ) // GetPreUpgradeCmd returns the pre-upgrade command which cosmovisor runs before @@ -97,7 +97,7 @@ func UpdateConfig(cmd *cobra.Command) error { // SafeSaveConfigs calls config.SaveConfigs but returns an error instead of panicking. func SafeSaveConfigs(cmd *cobra.Command, appConfig *serverconfig.Config, - tmConfig *tmconfig.Config, + tmConfig *cmtconfig.Config, clientConfig *config.ClientConfig, verbose bool, ) (err error) { diff --git a/cmd/provenanced/cmd/pre_upgrade_test.go b/cmd/provenanced/cmd/pre_upgrade_test.go index 202461f70a..b3525d21c1 100644 --- a/cmd/provenanced/cmd/pre_upgrade_test.go +++ b/cmd/provenanced/cmd/pre_upgrade_test.go @@ -17,14 +17,15 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - tmconfig "github.com/tendermint/tendermint/config" - "github.com/tendermint/tendermint/libs/log" + cmtconfig "github.com/cometbft/cometbft/config" + "cosmossdk.io/log" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/server" serverconfig "github.com/cosmos/cosmos-sdk/server/config" - sdksim "github.com/cosmos/cosmos-sdk/simapp" + moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" + cmderrors "github.com/provenance-io/provenance/cmd/errors" "github.com/provenance-io/provenance/cmd/provenanced/cmd" "github.com/provenance-io/provenance/cmd/provenanced/config" "github.com/provenance-io/provenance/internal/pioconfig" @@ -85,7 +86,7 @@ func logDir(t *testing.T, path string) { } } -// cmdResult contains the info, results, and output of the an executed command. +// cmdResult contains the info, results, and output of the executed command. type cmdResult struct { Cmd *cobra.Command Home string @@ -112,13 +113,13 @@ func executeRootCmd(t *testing.T, home string, cmdArgs ...string) *cmdResult { rv.Result = cmd.Execute(rv.Cmd) if rv.Result != nil { t.Logf("Execution resulting in error: %v", rv.Result) - var srvErrP *server.ErrorCode - var srvErr server.ErrorCode + var srvErrP *cmderrors.ExitCodeError + var srvErr cmderrors.ExitCodeError switch { case errors.As(rv.Result, &srvErrP): - rv.ExitCode = srvErrP.Code + rv.ExitCode = int(*srvErrP) case errors.As(rv.Result, &srvErr): - rv.ExitCode = srvErr.Code + rv.ExitCode = int(srvErr) default: rv.ExitCode = 1 } @@ -181,7 +182,7 @@ func assertContainsAll(t *testing.T, actual string, expected []string, msgAndArg // makeDummyCmd creates a dummy command with a context in it that can be used to test all the config stuff. func makeDummyCmd(t *testing.T, home string) *cobra.Command { - encodingConfig := sdksim.MakeTestEncodingConfig() + encodingConfig := moduletestutil.MakeTestEncodingConfig() clientCtx := client.Context{}. WithCodec(encodingConfig.Codec). WithHomeDir(home) @@ -216,7 +217,7 @@ func TestPreUpgradeCmd(t *testing.T) { seenNames := make(map[string]bool) // newHome creates a new home directory and saves the configs. Returns full path to home and success. - newHome := func(t *testing.T, name string, appCfg *serverconfig.Config, tmCfg *tmconfig.Config, clientCfg *config.ClientConfig) (string, bool) { + newHome := func(t *testing.T, name string, appCfg *serverconfig.Config, tmCfg *cmtconfig.Config, clientCfg *config.ClientConfig) (string, bool) { require.False(t, seenNames[name], "dir name %q created in previous test", name) seenNames[name] = true home := filepath.Join(tmpDir, name) @@ -229,7 +230,7 @@ func TestPreUpgradeCmd(t *testing.T) { return home, success } // newHomePacked creates a new home directory, saves the configs, and packs them. Returns full path to home and success. - newHomePacked := func(t *testing.T, name string, appCfg *serverconfig.Config, tmCfg *tmconfig.Config, clientCfg *config.ClientConfig) (string, bool) { + newHomePacked := func(t *testing.T, name string, appCfg *serverconfig.Config, tmCfg *cmtconfig.Config, clientCfg *config.ClientConfig) (string, bool) { home, success := newHome(t, name, appCfg, tmCfg, clientCfg) if !success { return home, success @@ -276,7 +277,7 @@ func TestPreUpgradeCmd(t *testing.T) { expInStderr []string expNot []string expAppCfg *serverconfig.Config - expTmCfg *tmconfig.Config + expTmCfg *cmtconfig.Config expClientCfg *config.ClientConfig }{ { diff --git a/cmd/provenanced/cmd/root.go b/cmd/provenanced/cmd/root.go index 9addcb322b..988ec14075 100644 --- a/cmd/provenanced/cmd/root.go +++ b/cmd/provenanced/cmd/root.go @@ -14,11 +14,16 @@ import ( "github.com/spf13/cobra" "github.com/spf13/pflag" - tmcfg "github.com/tendermint/tendermint/config" - tmcli "github.com/tendermint/tendermint/libs/cli" - "github.com/tendermint/tendermint/libs/log" - dbm "github.com/tendermint/tm-db" + cmtconfig "github.com/cometbft/cometbft/config" + cmtcli "github.com/cometbft/cometbft/libs/cli" + "cosmossdk.io/log" + "cosmossdk.io/store" + "cosmossdk.io/store/snapshots" + snapshottypes "cosmossdk.io/store/snapshots/types" + storetypes "cosmossdk.io/store/types" + + dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/debug" @@ -31,15 +36,13 @@ import ( "github.com/cosmos/cosmos-sdk/server" serverconfig "github.com/cosmos/cosmos-sdk/server/config" servertypes "github.com/cosmos/cosmos-sdk/server/types" - "github.com/cosmos/cosmos-sdk/snapshots" - snapshottypes "github.com/cosmos/cosmos-sdk/snapshots/types" - "github.com/cosmos/cosmos-sdk/store" sdk "github.com/cosmos/cosmos-sdk/types" authcmd "github.com/cosmos/cosmos-sdk/x/auth/client/cli" "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" "github.com/cosmos/cosmos-sdk/x/crisis" genutilcli "github.com/cosmos/cosmos-sdk/x/genutil/client/cli" + // rosettacmd "github.com/cosmos/rosetta/cmd" // TODO[1760]: rosetta "github.com/provenance-io/provenance/app" "github.com/provenance-io/provenance/app/params" @@ -50,7 +53,7 @@ import ( const ( // EnvTypeFlag is a flag for indicating a testnet EnvTypeFlag = "testnet" - // Flag used to indicate coin type. + // CoinTypeFlag is a flag for indicating coin type. CoinTypeFlag = "coin-type" ) @@ -65,7 +68,7 @@ func NewRootCmd(sealConfig bool) (*cobra.Command, params.EncodingConfig) { WithLegacyAmino(encodingConfig.Amino). WithInput(os.Stdin). WithAccountRetriever(types.AccountRetriever{}). - WithBroadcastMode(flags.BroadcastBlock). + WithBroadcastMode(flags.BroadcastSync). // TODO[1760]: broadcast: Verify that this is right since BroadcastBlock is gone. WithHomeDir(app.DefaultNodeHome). WithViper("PIO") sdk.SetCoinDenomRegex(app.SdkCoinDenomRegex) @@ -126,22 +129,22 @@ func Execute(rootCmd *cobra.Command) error { rootCmd.PersistentFlags().BoolP(EnvTypeFlag, "t", false, "Indicates this command should use the testnet configuration (default: false [mainnet])") rootCmd.PersistentFlags().String(flags.FlagLogLevel, zerolog.InfoLevel.String(), "The logging level (trace|debug|info|warn|error|fatal|panic)") - rootCmd.PersistentFlags().String(flags.FlagLogFormat, tmcfg.LogFormatPlain, "The logging format (json|plain)") + rootCmd.PersistentFlags().String(flags.FlagLogFormat, cmtconfig.LogFormatPlain, "The logging format (json|plain)") // Custom denom flag added to root command rootCmd.PersistentFlags().String(config.CustomDenomFlag, "", "Indicates if a custom denom is to be used, and the name of it (default nhash)") // Custom msgFee floor price flag added to root command rootCmd.PersistentFlags().Int64(config.CustomMsgFeeFloorPriceFlag, 0, "Custom msgfee floor price, optional (default 1905)") - executor := tmcli.PrepareBaseCmd(rootCmd, "", app.DefaultNodeHome) + executor := cmtcli.PrepareBaseCmd(rootCmd, "", app.DefaultNodeHome) return executor.ExecuteContext(ctx) } func initRootCmd(rootCmd *cobra.Command, encodingConfig params.EncodingConfig) { rootCmd.AddCommand( InitCmd(app.ModuleBasics), - genutilcli.CollectGenTxsCmd(banktypes.GenesisBalancesIterator{}, app.DefaultNodeHome), - genutilcli.GenTxCmd(app.ModuleBasics, encodingConfig.TxConfig, banktypes.GenesisBalancesIterator{}, app.DefaultNodeHome), + // genutilcli.CollectGenTxsCmd(banktypes.GenesisBalancesIterator{}, app.DefaultNodeHome), // TODO[1760]: genutil + // genutilcli.GenTxCmd(app.ModuleBasics, encodingConfig.TxConfig, banktypes.GenesisBalancesIterator{}, app.DefaultNodeHome), // TODO[1760]: genutil genutilcli.ValidateGenesisCmd(app.ModuleBasics), AddGenesisAccountCmd(app.DefaultNodeHome), AddRootDomainAccountCmd(app.DefaultNodeHome), @@ -150,7 +153,7 @@ func initRootCmd(rootCmd *cobra.Command, encodingConfig params.EncodingConfig) { AddGenesisCustomFloorPriceDenomCmd(app.DefaultNodeHome), AddGenesisDefaultMarketCmd(app.DefaultNodeHome), AddGenesisCustomMarketCmd(app.DefaultNodeHome), - tmcli.NewCompletionCmd(rootCmd, true), + cmtcli.NewCompletionCmd(rootCmd, true), testnetCmd(app.ModuleBasics, banktypes.GenesisBalancesIterator{}), debug.Cmd(), ConfigCmd(), @@ -166,15 +169,15 @@ func initRootCmd(rootCmd *cobra.Command, encodingConfig params.EncodingConfig) { // add keybase, auxiliary RPC, query, and tx child commands rootCmd.AddCommand( - rpc.StatusCommand(), + server.StatusCommand(), queryCommand(), txCommand(), - keys.Commands(app.DefaultNodeHome), + keys.Commands(), ) // Add Rosetta command - rootCmd.AddCommand(server.RosettaCommand(encodingConfig.InterfaceRegistry, encodingConfig.Marshaler)) - rootCmd.AddCommand(pruning.PruningCmd(newApp)) + // rootCmd.AddCommand(rosettacmd.RosettaCommand(encodingConfig.InterfaceRegistry, encodingConfig.Marshaler)) // TODO[1760]: rosetta + rootCmd.AddCommand(pruning.Cmd(newApp, app.DefaultNodeHome)) // Disable usage when the start command returns an error. startCmd, _, err := rootCmd.Find([]string{"start"}) if err != nil { @@ -233,9 +236,9 @@ func queryCommand() *cobra.Command { } cmd.AddCommand( - authcmd.GetAccountCmd(), + // authcmd.GetAccountCmd(), // TODO[1760]: auto-cli: Figure out how to still have this. rpc.ValidatorCommand(), - rpc.BlockCommand(), + // rpc.BlockCommand(), // TODO[1760]: auto-cli: Figure out how to still have this. authcmd.QueryTxsByEventsCmd(), authcmd.QueryTxCmd(), ) @@ -274,10 +277,11 @@ func txCommand() *cobra.Command { return cmd } +// AppCreator func(log.Logger, dbm.DB, io.Writer, AppOptions) Application func newApp(logger log.Logger, db dbm.DB, traceStore io.Writer, appOpts servertypes.AppOptions) servertypes.Application { warnAboutSettings(logger, appOpts) - var cache sdk.MultiStorePersistentCache + var cache storetypes.MultiStorePersistentCache if cast.ToBool(appOpts.Get(server.FlagInterBlockCache)) { cache = store.NewCommitKVStoreCacheManager() @@ -332,7 +336,6 @@ func newApp(logger log.Logger, db dbm.DB, traceStore io.Writer, appOpts serverty baseapp.SetSnapshot(snapshotStore, snapshotOptions), baseapp.SetIAVLCacheSize(getIAVLCacheSize(appOpts)), baseapp.SetIAVLDisableFastNode(cast.ToBool(appOpts.Get(server.FlagDisableIAVLFastNode))), - baseapp.SetIAVLLazyLoading(cast.ToBool(appOpts.Get(server.FlagIAVLLazyLoading))), ) } @@ -365,6 +368,7 @@ func createAppAndExport( forZeroHeight bool, jailAllowedAddrs []string, appOpts servertypes.AppOptions, + modulesToExport []string, ) (servertypes.ExportedApp, error) { encCfg := app.MakeEncodingConfig() // Ideally, we would reuse the one created by NewRootCmd. encCfg.Marshaler = codec.NewProtoCodec(encCfg.InterfaceRegistry) @@ -385,7 +389,7 @@ func createAppAndExport( a = app.New(logger, db, traceStore, true, map[int64]bool{}, homePath, cast.ToUint(appOpts.Get(server.FlagInvCheckPeriod)), encCfg, appOpts) } - return a.ExportAppStateAndValidators(forZeroHeight, jailAllowedAddrs) + return a.ExportAppStateAndValidators(forZeroHeight, jailAllowedAddrs, modulesToExport) } // fixDebugPubkeyRawTypeFlag removes the -t shorthand option of the --type flag from the debug pubkey-raw command. diff --git a/cmd/provenanced/cmd/root_test.go b/cmd/provenanced/cmd/root_test.go index abcd69e24f..24a9ec6833 100644 --- a/cmd/provenanced/cmd/root_test.go +++ b/cmd/provenanced/cmd/root_test.go @@ -12,17 +12,18 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "cosmossdk.io/log" + "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/server" serverconfig "github.com/cosmos/cosmos-sdk/server/config" servertypes "github.com/cosmos/cosmos-sdk/server/types" - sdksim "github.com/cosmos/cosmos-sdk/simapp" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" "github.com/provenance-io/provenance/cmd/provenanced/config" ) func TestIAVLConfig(t *testing.T) { - require.Equal(t, getIAVLCacheSize(sdksim.EmptyAppOptions{}), cast.ToInt(serverconfig.DefaultConfig().IAVLCacheSize)) + require.Equal(t, getIAVLCacheSize(simtestutil.EmptyAppOptions{}), cast.ToInt(serverconfig.DefaultConfig().IAVLCacheSize)) } type testOpts map[string]interface{} @@ -184,7 +185,7 @@ func TestWarnAboutSettings(t *testing.T) { // Error log lines will start with "ERR ". // Info log lines will start with "INF ". // Debug log lines are omitted, but would start with "DBG ". - logger := server.ZeroLogWrapper{Logger: zerolog.New(lw).Level(zerolog.InfoLevel)} + logger := log.NewCustomLogger(zerolog.New(lw).Level(zerolog.InfoLevel)) // Make sure the function never panics. require.NotPanics(t, func() { warnAboutSettings(logger, tc.appOpts) }, "warnAboutSettings") diff --git a/cmd/provenanced/cmd/simulate_test.go b/cmd/provenanced/cmd/simulate_test.go index 6c375ba4b3..366d485df3 100644 --- a/cmd/provenanced/cmd/simulate_test.go +++ b/cmd/provenanced/cmd/simulate_test.go @@ -16,7 +16,7 @@ import ( authcli "github.com/cosmos/cosmos-sdk/x/auth/client/cli" bankcli "github.com/cosmos/cosmos-sdk/x/bank/client/cli" - "github.com/provenance-io/provenance/cmd/provenanced/cmd" + provenancecmd "github.com/provenance-io/provenance/cmd/provenanced/cmd" "github.com/provenance-io/provenance/internal/antewrapper" "github.com/provenance-io/provenance/internal/pioconfig" "github.com/provenance-io/provenance/testutil" @@ -52,14 +52,11 @@ func (s *SimulateTestSuite) SetupTest() { s.Require().NoError(err2) s.account2Addr = addr2 - s.floorGasPrice = sdk.Coin{ - Denom: "stake", - Amount: sdk.NewInt(1000), - } + s.floorGasPrice = sdk.NewInt64Coin("stake", 1000) pioconfig.SetProvenanceConfig(s.floorGasPrice.Denom, s.floorGasPrice.Amount.Int64()) s.sendMsgTypeUrl = "/cosmos.bank.v1beta1.MsgSend" - s.sendMsgAdditionalFee = sdk.NewCoin("stake", sdk.NewInt(1)) + s.sendMsgAdditionalFee = sdk.NewInt64Coin("stake", 1) s.T().Log("setting up integration test suite") @@ -111,7 +108,7 @@ func (s *SimulateTestSuite) TestSimulateCmd() { tc := tc s.Run(tc.name, func() { - cmd := cmd.GetCmdPioSimulateTx() + cmd := provenancecmd.GetCmdPioSimulateTx() clientCtx := s.testnet.Validators[0].ClientCtx out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args) @@ -120,7 +117,7 @@ func (s *SimulateTestSuite) TestSimulateCmd() { err = s.cfg.Codec.UnmarshalJSON(out.Bytes(), &result) s.Require().NoError(err) s.Assert().Equal(tc.expectedAdditionalFees, result.AdditionalFees) - expectedTotalFees := sdk.NewCoins(s.sendMsgAdditionalFee.Add(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(int64(result.EstimatedGas)*s.floorGasPrice.Amount.Int64())))) + expectedTotalFees := sdk.NewCoins(s.sendMsgAdditionalFee.Add(sdk.NewCoin(s.cfg.BondDenom, s.floorGasPrice.Amount.MulRaw(int64(result.EstimatedGas))))) s.Assert().Equal(expectedTotalFees, result.TotalFees) }) } @@ -136,9 +133,10 @@ func (s *SimulateTestSuite) GenerateAndSignSend(from string, to string, coins st fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), "--generate-only", - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), } - out, err := clitestutil.ExecTestCLICmd(clientCtx, bankcli.NewSendTxCmd(), args) + addrCdc := s.cfg.Codec.InterfaceRegistry().SigningContext().AddressCodec() + out, err := clitestutil.ExecTestCLICmd(clientCtx, bankcli.NewSendTxCmd(addrCdc), args) s.Require().NoError(err) genFilePath := filepath.Join(tmpDir, fmt.Sprintf("unsigned.%s.%s.%s.json", from, to, coins)) f, err := os.Create(genFilePath) diff --git a/cmd/provenanced/cmd/testnet.go b/cmd/provenanced/cmd/testnet.go index 8fc270055c..fc6e9fbe6b 100644 --- a/cmd/provenanced/cmd/testnet.go +++ b/cmd/provenanced/cmd/testnet.go @@ -13,12 +13,12 @@ import ( "github.com/spf13/cobra" - tmconfig "github.com/tendermint/tendermint/config" - tmos "github.com/tendermint/tendermint/libs/os" - tmrand "github.com/tendermint/tendermint/libs/rand" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - "github.com/tendermint/tendermint/types" - tmtime "github.com/tendermint/tendermint/types/time" + cmtconfig "github.com/cometbft/cometbft/config" + cmtos "github.com/cometbft/cometbft/libs/os" + cmtrand "github.com/cometbft/cometbft/libs/rand" + cmttime "github.com/cometbft/cometbft/types/time" + + sdkmath "cosmossdk.io/math" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" @@ -26,6 +26,7 @@ import ( "github.com/cosmos/cosmos-sdk/crypto/hd" "github.com/cosmos/cosmos-sdk/crypto/keyring" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" + "github.com/cosmos/cosmos-sdk/runtime" "github.com/cosmos/cosmos-sdk/server" srvconfig "github.com/cosmos/cosmos-sdk/server/config" "github.com/cosmos/cosmos-sdk/testutil" @@ -111,7 +112,7 @@ const nodeDirPerm = 0755 func InitTestnet( clientCtx client.Context, cmd *cobra.Command, - nodeConfig *tmconfig.Config, + nodeConfig *cmtconfig.Config, mbm module.BasicManager, genBalIterator banktypes.GenesisBalancesIterator, outputDir, @@ -125,7 +126,7 @@ func InitTestnet( numValidators int, ) error { if chainID == "" { - chainID = "chain-" + tmrand.NewRand().Str(6) + chainID = "chain-" + cmtrand.NewRand().Str(6) } nodeIDs := make([]string, numValidators) @@ -209,8 +210,8 @@ func InitTestnet( return err } - hashAmt := sdk.NewInt(100_000_000_000 / int64(numValidators)) - convAmt := sdk.NewInt(1_000_000_000) + hashAmt := sdkmath.NewInt(100_000_000_000 / int64(numValidators)) + convAmt := sdkmath.NewInt(1_000_000_000) nhashAmt := hashAmt.Mul(convAmt) coins := sdk.Coins{ @@ -223,12 +224,12 @@ func InitTestnet( valTokens := sdk.TokensFromConsensusPower(100, app.DefaultPowerReduction) createValMsg, _ := stakingtypes.NewMsgCreateValidator( - sdk.ValAddress(addr), + sdk.ValAddress(addr).String(), valPubKeys[i], sdk.NewCoin(pioconfig.GetProvenanceConfig().BondDenom, valTokens), stakingtypes.NewDescription(nodeDirName, "", "", "", ""), - stakingtypes.NewCommissionRates(sdk.OneDec(), sdk.OneDec(), sdk.OneDec()), - sdk.OneInt(), + stakingtypes.NewCommissionRates(sdkmath.LegacyOneDec(), sdkmath.LegacyOneDec(), sdkmath.LegacyOneDec()), + sdkmath.OneInt(), ) txBuilder := clientCtx.TxConfig.NewTxBuilder() @@ -245,7 +246,7 @@ func InitTestnet( WithKeybase(kb). WithTxConfig(clientCtx.TxConfig) - if err = tx.Sign(txFactory, nodeDirName, txBuilder, true); err != nil { + if err = tx.Sign(clientCtx.CmdContext, txFactory, nodeDirName, txBuilder, true); err != nil { return err } @@ -271,7 +272,7 @@ func InitTestnet( }), }) - if err := markerAcc.SetSupply(sdk.NewCoin(pioconfig.GetProvenanceConfig().FeeDenom, sdk.NewInt(100_000_000_000).Mul(sdk.NewInt(1_000_000_000)))); err != nil { + if err := markerAcc.SetSupply(sdk.NewCoin(pioconfig.GetProvenanceConfig().FeeDenom, sdkmath.NewInt(100_000_000_000).MulRaw(1_000_000_000))); err != nil { return err } @@ -290,6 +291,7 @@ func InitTestnet( err := collectGenFiles( clientCtx, nodeConfig, chainID, nodeIDs, valPubKeys, numValidators, outputDir, nodeDirPrefix, nodeDaemonHome, genBalIterator, + clientCtx.TxConfig.SigningContext().ValidatorAddressCodec(), ) if err != nil { return err @@ -368,7 +370,7 @@ func initGenFiles( // Set the gov depost denom var govGenState govtypesv1beta1.GenesisState clientCtx.Codec.MustUnmarshalJSON(appGenState[govtypes.ModuleName], &govGenState) - govGenState.DepositParams.MinDeposit = sdk.NewCoins(sdk.NewCoin(chainDenom, sdk.NewInt(10000000))) + govGenState.DepositParams.MinDeposit = sdk.NewCoins(sdk.NewInt64Coin(chainDenom, 10000000)) govGenState.VotingParams.VotingPeriod, _ = time.ParseDuration("360s") appGenState[govtypes.ModuleName] = clientCtx.Codec.MustMarshalJSON(&govGenState) @@ -376,10 +378,10 @@ func initGenFiles( var mintGenState minttypes.GenesisState clientCtx.Codec.MustUnmarshalJSON(appGenState[minttypes.ModuleName], &mintGenState) mintGenState.Params.MintDenom = chainDenom - mintGenState.Minter.AnnualProvisions = sdk.ZeroDec() - mintGenState.Minter.Inflation = sdk.ZeroDec() - mintGenState.Params.InflationMax = sdk.ZeroDec() - mintGenState.Params.InflationMin = sdk.ZeroDec() + mintGenState.Minter.AnnualProvisions = sdkmath.LegacyZeroDec() + mintGenState.Minter.Inflation = sdkmath.LegacyZeroDec() + mintGenState.Params.InflationMax = sdkmath.LegacyZeroDec() + mintGenState.Params.InflationMin = sdkmath.LegacyZeroDec() appGenState[minttypes.ModuleName] = clientCtx.Codec.MustMarshalJSON(&mintGenState) // Set the root names @@ -411,32 +413,10 @@ func initGenFiles( return err } - genDoc := types.GenesisDoc{ - ChainID: chainID, - AppState: appGenStateJSON, - ConsensusParams: &tmproto.ConsensusParams{ - Block: tmproto.BlockParams{ - MaxBytes: 200000, - MaxGas: 60_000_000, - TimeIotaMs: 1000, - }, - Evidence: tmproto.EvidenceParams{ - MaxAgeNumBlocks: 302400, - MaxAgeDuration: 504 * time.Hour, // 3 weeks is the max duration - MaxBytes: 10000, - }, - Validator: tmproto.ValidatorParams{ - PubKeyTypes: []string{ - types.ABCIPubKeyTypeEd25519, - }, - }, - }, - Validators: nil, - } - + appGenesis := genutiltypes.NewAppGenesisWithVersion(chainID, appGenStateJSON) // generate empty genesis files for each validator and save for i := 0; i < numValidators; i++ { - if err := genDoc.SaveAs(genFiles[i]); err != nil { + if err := appGenesis.SaveAs(genFiles[i]); err != nil { return err } } @@ -444,12 +424,13 @@ func initGenFiles( } func collectGenFiles( - clientCtx client.Context, nodeConfig *tmconfig.Config, chainID string, + clientCtx client.Context, nodeConfig *cmtconfig.Config, chainID string, nodeIDs []string, valPubKeys []cryptotypes.PubKey, numValidators int, outputDir, nodeDirPrefix, nodeDaemonHome string, genBalIterator banktypes.GenesisBalancesIterator, + valAddrCodec runtime.ValidatorAddressCodec, ) error { var appState json.RawMessage - genTime := tmtime.Now() + genTime := cmttime.Now() for i := 0; i < numValidators; i++ { nodeDirName := fmt.Sprintf("%s%d", nodeDirPrefix, i) @@ -462,12 +443,13 @@ func collectGenFiles( nodeID, valPubKey := nodeIDs[i], valPubKeys[i] initCfg := genutiltypes.NewInitConfig(chainID, gentxsDir, nodeID, valPubKey) - genDoc, err := types.GenesisDocFromFile(nodeConfig.GenesisFile()) + appGenesis, err := genutiltypes.AppGenesisFromFile(nodeConfig.GenesisFile()) if err != nil { return err } - nodeAppState, err := genutil.GenAppStateFromConfig(clientCtx.Codec, clientCtx.TxConfig, nodeConfig, initCfg, *genDoc, genBalIterator) + nodeAppState, err := genutil.GenAppStateFromConfig(clientCtx.Codec, clientCtx.TxConfig, nodeConfig, initCfg, + appGenesis, genBalIterator, genutiltypes.DefaultMessageValidator, valAddrCodec) if err != nil { return err } @@ -515,12 +497,12 @@ func calculateIP(ip string, i int) (string, error) { func writeFile(name string, dir string, contents []byte) error { file := filepath.Join(dir, name) - err := tmos.EnsureDir(dir, 0755) + err := cmtos.EnsureDir(dir, 0755) if err != nil { return err } - err = tmos.WriteFile(file, contents, 0644) + err = cmtos.WriteFile(file, contents, 0644) if err != nil { return err } diff --git a/cmd/provenanced/cmd/testnet_test.go b/cmd/provenanced/cmd/testnet_test.go index 2578d5130f..1c7f43368a 100644 --- a/cmd/provenanced/cmd/testnet_test.go +++ b/cmd/provenanced/cmd/testnet_test.go @@ -9,6 +9,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "cosmossdk.io/log" + "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/server" @@ -16,7 +18,6 @@ import ( genutiltest "github.com/cosmos/cosmos-sdk/x/genutil/client/testutil" genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" "github.com/provenance-io/provenance/x/exchange" - "github.com/tendermint/tendermint/libs/log" "github.com/provenance-io/provenance/app" "github.com/provenance-io/provenance/internal/pioconfig" @@ -27,7 +28,7 @@ func Test_TestnetCmd(t *testing.T) { encodingConfig := app.MakeEncodingConfig() pioconfig.SetProvenanceConfig("", 0) logger := log.NewNopLogger() - cfg, err := genutiltest.CreateDefaultTendermintConfig(home) + cfg, err := genutiltest.CreateDefaultCometConfig(home) require.NoError(t, err) err = genutiltest.ExecInitCmd(app.ModuleBasics, home, encodingConfig.Marshaler) diff --git a/cmd/provenanced/config/manager.go b/cmd/provenanced/config/manager.go index 0c4ca6bb4a..1e2922ca45 100644 --- a/cmd/provenanced/config/manager.go +++ b/cmd/provenanced/config/manager.go @@ -3,16 +3,13 @@ package config import ( "encoding/json" "fmt" - "io" "os" - "strings" "time" - "github.com/rs/zerolog" "github.com/spf13/cobra" "github.com/spf13/viper" - tmconfig "github.com/tendermint/tendermint/config" + cmtconfig "github.com/cometbft/cometbft/config" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" @@ -94,7 +91,7 @@ func DefaultAppConfig() *serverconfig.Config { } // ExtractTmConfig creates a tendermint config from the command context. -func ExtractTmConfig(cmd *cobra.Command) (*tmconfig.Config, error) { +func ExtractTmConfig(cmd *cobra.Command) (*cmtconfig.Config, error) { v := server.GetServerContextFromCmd(cmd).Viper conf := DefaultTmConfig() if err := v.Unmarshal(conf); err != nil { @@ -112,7 +109,7 @@ func ExtractTmConfig(cmd *cobra.Command) (*tmconfig.Config, error) { } // ExtractTmConfigAndMap from the command context, creates a tendermint config and related string->value map. -func ExtractTmConfigAndMap(cmd *cobra.Command) (*tmconfig.Config, FieldValueMap, error) { +func ExtractTmConfigAndMap(cmd *cobra.Command) (*cmtconfig.Config, FieldValueMap, error) { conf, err := ExtractTmConfig(cmd) if err != nil { return nil, nil, err @@ -122,8 +119,8 @@ func ExtractTmConfigAndMap(cmd *cobra.Command) (*tmconfig.Config, FieldValueMap, return conf, fields, nil } -func DefaultTmConfig() *tmconfig.Config { - rv := tmconfig.DefaultConfig() +func DefaultTmConfig() *cmtconfig.Config { + rv := cmtconfig.DefaultConfig() rv.Consensus.TimeoutCommit = DefaultConsensusTimeoutCommit return rv } @@ -185,7 +182,7 @@ func GetAllConfigDefaults() FieldValueMap { func SaveConfigs( cmd *cobra.Command, appConfig *serverconfig.Config, - tmConfig *tmconfig.Config, + tmConfig *cmtconfig.Config, clientConfig *ClientConfig, verbose bool, ) { @@ -202,7 +199,7 @@ func SaveConfigs( func writeUnpackedConfig( cmd *cobra.Command, appConfig *serverconfig.Config, - tmConfig *tmconfig.Config, + tmConfig *cmtconfig.Config, clientConfig *ClientConfig, verbose bool, ) { @@ -222,7 +219,7 @@ func writeUnpackedConfig( if verbose { cmd.Printf("Writing tendermint config to: %s ... ", confFile) } - tmconfig.WriteConfigFile(confFile, tmConfig) + cmtconfig.WriteConfigFile(confFile, tmConfig) if verbose { cmd.Printf("Done.\n") } @@ -268,7 +265,7 @@ func deleteUnpackedConfig(cmd *cobra.Command, verbose bool) error { func generateAndWritePackedConfig( cmd *cobra.Command, appConfig *serverconfig.Config, - tmConfig *tmconfig.Config, + tmConfig *cmtconfig.Config, clientConfig *ClientConfig, verbose bool, ) { @@ -605,22 +602,10 @@ func applyConfigsToContexts(cmd *cobra.Command) error { serverCtx.Config.SetRoot(clientCtx.HomeDir) // Set the server context's logger using what Viper has now. - var logWriter io.Writer - switch logFmt := serverCtx.Viper.GetString(flags.FlagLogFormat); strings.ToLower(logFmt) { - case tmconfig.LogFormatPlain: - logWriter = zerolog.ConsoleWriter{Out: os.Stderr} - case tmconfig.LogFormatJSON: - logWriter = os.Stderr - default: - return fmt.Errorf("unknown log format: %s", logFmt) - } - logLvlStr := serverCtx.Viper.GetString(flags.FlagLogLevel) - logLvl, perr := zerolog.ParseLevel(strings.ToLower(logLvlStr)) - if perr != nil { - return fmt.Errorf("failed to parse log level (%s): %w", logLvlStr, perr) + serverCtx.Logger, err = server.CreateSDKLogger(serverCtx, cmd.ErrOrStderr()) + if err != nil { + return fmt.Errorf("error creating logger: %w", err) } - logger := zerolog.New(logWriter).Level(logLvl).With().Timestamp().Logger() - serverCtx.Logger = server.ZeroLogWrapper{Logger: logger} // Copy all settings from our viper to the global viper since some stuff uses the global one. if err = viper.MergeConfigMap(serverCtx.Viper.AllSettings()); err != nil { diff --git a/cmd/provenanced/config/manager_test.go b/cmd/provenanced/config/manager_test.go index 1288f3b0ac..ea09d6f956 100644 --- a/cmd/provenanced/config/manager_test.go +++ b/cmd/provenanced/config/manager_test.go @@ -2,7 +2,7 @@ package config import ( "context" - "io/ioutil" + "io" "os" "path/filepath" "testing" @@ -14,14 +14,15 @@ import ( "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" - tmcmds "github.com/tendermint/tendermint/cmd/cometbft/commands" - tmconfig "github.com/tendermint/tendermint/config" - "github.com/tendermint/tendermint/libs/log" + cmtcmds "github.com/cometbft/cometbft/cmd/cometbft/commands" + cmtconfig "github.com/cometbft/cometbft/config" + + "cosmossdk.io/log" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/server" serverconfig "github.com/cosmos/cosmos-sdk/server/config" - sdksim "github.com/cosmos/cosmos-sdk/simapp" + moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" "github.com/provenance-io/provenance/internal/pioconfig" ) @@ -43,7 +44,7 @@ func (s *ConfigManagerTestSuite) SetupTest() { // makeDummyCmd creates a dummy command with a context in it that can be used to test all the manager stuff. func (s *ConfigManagerTestSuite) makeDummyCmd() *cobra.Command { - encodingConfig := sdksim.MakeTestEncodingConfig() + encodingConfig := moduletestutil.MakeTestEncodingConfig() clientCtx := client.Context{}. WithCodec(encodingConfig.Codec). WithHomeDir(s.Home) @@ -61,8 +62,8 @@ func (s *ConfigManagerTestSuite) makeDummyCmd() *cobra.Command { return nil }, } - dummyCmd.SetOut(ioutil.Discard) - dummyCmd.SetErr(ioutil.Discard) + dummyCmd.SetOut(io.Discard) + dummyCmd.SetErr(io.Discard) dummyCmd.SetArgs([]string{}) var err error dummyCmd, err = dummyCmd.ExecuteContextC(ctx) @@ -393,18 +394,18 @@ func (s *ConfigManagerTestSuite) TestPackedConfigTmLoadDefaults() { s.logFile(GetFullPathToPackedConf(dCmd)) s.Require().NoError(loadPackedConfig(dCmd), "loadPackedConfig") - s.Run("tmcmds.ParseConfig", func() { - var tmConfig2 *tmconfig.Config + s.Run("cmtcmds.ParseConfig", func() { + var tmConfig2 *cmtconfig.Config var err error s.Require().NotPanics(func() { - tmConfig2, err = tmcmds.ParseConfig(dCmd) + tmConfig2, err = cmtcmds.ParseConfig(dCmd) }) - s.Require().NoError(err, "tmcmds.ParseConfig") + s.Require().NoError(err, "cmtcmds.ParseConfig") s.Assert().Equal(tmConfig, tmConfig2) }) s.Run("ExtractTmConfig", func() { - var tmConfig2 *tmconfig.Config + var tmConfig2 *cmtconfig.Config var err error s.Require().NotPanics(func() { tmConfig2, err = ExtractTmConfig(dCmd) diff --git a/cmd/provenanced/config/toml.go b/cmd/provenanced/config/toml.go index 4e232099b9..90f02fa816 100644 --- a/cmd/provenanced/config/toml.go +++ b/cmd/provenanced/config/toml.go @@ -4,7 +4,7 @@ import ( "bytes" "text/template" - tmos "github.com/tendermint/tendermint/libs/os" + cmtos "github.com/cometbft/cometbft/libs/os" ) const defaultConfigTemplate = `# This is a TOML config file. @@ -45,5 +45,5 @@ func WriteConfigToFile(configFilePath string, config *ClientConfig) { panic(err) } - tmos.MustWriteFile(configFilePath, buffer.Bytes(), 0644) + cmtos.MustWriteFile(configFilePath, buffer.Bytes(), 0644) } diff --git a/cmd/provenanced/main.go b/cmd/provenanced/main.go index d8ebad995f..5269cffc4d 100644 --- a/cmd/provenanced/main.go +++ b/cmd/provenanced/main.go @@ -4,21 +4,20 @@ import ( "errors" "os" - "github.com/cosmos/cosmos-sdk/server" - + cmderrors "github.com/provenance-io/provenance/cmd/errors" "github.com/provenance-io/provenance/cmd/provenanced/cmd" ) func main() { rootCmd, _ := cmd.NewRootCmd(true) if err := cmd.Execute(rootCmd); err != nil { - var srvErrP *server.ErrorCode - var srvErr server.ErrorCode + var srvErrP *cmderrors.ExitCodeError + var srvErr cmderrors.ExitCodeError switch { case errors.As(err, &srvErrP): - os.Exit(srvErrP.Code) + os.Exit(int(*srvErrP)) case errors.As(err, &srvErr): - os.Exit(srvErr.Code) + os.Exit(int(srvErr)) default: os.Exit(1) } diff --git a/docker/blockchain/Dockerfile b/docker/blockchain/Dockerfile index 832d56cb5d..36f37b783f 100644 --- a/docker/blockchain/Dockerfile +++ b/docker/blockchain/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.20-bullseye as build +FROM golang:1.21-bullseye as build ARG VERSION WORKDIR /go/src/github.com/provenance-io/provenance diff --git a/docs/Building.md b/docs/Building.md index e031ae5ec8..267576918b 100644 --- a/docs/Building.md +++ b/docs/Building.md @@ -21,7 +21,7 @@ Built executables are placed in the `build/` directory. ### Go -Building `provenanced` requires [Go 1.20+](https://golang.org/dl/) (or higher). +Building `provenanced` requires [Go 1.21+](https://golang.org/dl/) (or higher). ### CLevelDB diff --git a/go.mod b/go.mod index 4bf6bae9db..23b8bba721 100644 --- a/go.mod +++ b/go.mod @@ -1,24 +1,37 @@ module github.com/provenance-io/provenance -go 1.20 +go 1.21 require ( cosmossdk.io/errors v1.0.0 + cosmossdk.io/log v1.2.1 cosmossdk.io/math v1.2.0 - github.com/CosmWasm/wasmd v0.29.0 - github.com/CosmWasm/wasmvm v1.2.4 - github.com/armon/go-metrics v0.4.1 - github.com/cosmos/cosmos-proto v1.0.0-beta.1 - github.com/cosmos/cosmos-sdk v0.46.12 + cosmossdk.io/simapp v0.0.0-20231107193120-9814f684b9dd + cosmossdk.io/store v1.0.1 + cosmossdk.io/x/evidence v0.1.0 + cosmossdk.io/x/feegrant v0.1.0 + cosmossdk.io/x/tx v0.12.0 + cosmossdk.io/x/upgrade v0.1.0 + github.com/CosmWasm/wasmd v0.50.0 + github.com/CosmWasm/wasmvm v1.5.0 + github.com/cometbft/cometbft v0.38.2 + github.com/cometbft/cometbft-db v0.9.1 + github.com/cosmos/cosmos-db v1.0.0 + github.com/cosmos/cosmos-proto v1.0.0-beta.3 + github.com/cosmos/cosmos-sdk v0.50.1 github.com/cosmos/go-bip39 v1.0.0 - github.com/cosmos/ibc-apps/modules/async-icq/v6 v6.1.0 - github.com/cosmos/ibc-go/v6 v6.2.0 + github.com/cosmos/gogoproto v1.4.11 + github.com/cosmos/ibc-go/modules/capability v1.0.0 + // github.com/cosmos/ibc-apps/modules/async-icq/v7 v7.1.1 // TODO[1760]: async-icq: Need a v0.50 compatible version. + github.com/cosmos/ibc-go/v8 v8.0.0 + // github.com/cosmos/rosetta v0.50.2 // TODO[1760]: rosetta github.com/ghodss/yaml v1.0.0 github.com/gogo/protobuf v1.3.3 github.com/golang/protobuf v1.5.3 github.com/google/uuid v1.4.0 github.com/gorilla/mux v1.8.1 github.com/grpc-ecosystem/grpc-gateway v1.16.0 + github.com/hashicorp/go-metrics v0.5.2 github.com/otiai10/copy v1.14.0 github.com/rakyll/statik v0.1.7 github.com/regen-network/cosmos-proto v0.3.1 @@ -28,123 +41,135 @@ require ( github.com/spf13/pflag v1.0.5 github.com/spf13/viper v1.17.0 github.com/stretchr/testify v1.8.4 - github.com/tendermint/tendermint v0.34.28 - github.com/tendermint/tm-db v0.6.7 - golang.org/x/exp v0.0.0-20231006140011-7918f672742d + golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa golang.org/x/text v0.14.0 - google.golang.org/genproto/googleapis/api v0.0.0-20231009173412-8bfb1ae86b6c - google.golang.org/grpc v1.59.0 + google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 + google.golang.org/grpc v1.60.0 google.golang.org/protobuf v1.31.0 gopkg.in/yaml.v2 v2.4.0 - ) require ( - cloud.google.com/go v0.110.8 // indirect - cloud.google.com/go/compute v1.23.0 // indirect + cloud.google.com/go v0.110.10 // indirect + cloud.google.com/go/compute v1.23.3 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v1.1.2 // indirect + cloud.google.com/go/iam v1.1.5 // indirect cloud.google.com/go/storage v1.30.1 // indirect - filippo.io/edwards25519 v1.0.0-rc.1 // indirect + cosmossdk.io/api v0.7.2 // indirect + cosmossdk.io/client/v2 v2.0.0-beta.1 // indirect + cosmossdk.io/collections v0.4.0 // indirect + cosmossdk.io/core v0.11.0 // indirect + cosmossdk.io/depinject v1.0.0-alpha.4 // indirect + cosmossdk.io/x/circuit v0.1.0 // indirect + cosmossdk.io/x/nft v0.1.0 // indirect + filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect - github.com/99designs/keyring v1.2.1 // indirect - github.com/ChainSafe/go-schnorrkel v1.0.0 // indirect - github.com/Workiva/go-datastructures v1.0.53 // indirect - github.com/aws/aws-sdk-go v1.44.122 // indirect + github.com/99designs/keyring v1.2.2 // indirect + github.com/DataDog/zstd v1.5.5 // indirect + github.com/aws/aws-sdk-go v1.44.224 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect + github.com/bits-and-blooms/bitset v1.8.0 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v4 v4.2.1 // indirect github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect + github.com/chzyer/readline v1.5.1 // indirect github.com/cockroachdb/apd/v2 v2.0.2 // indirect - github.com/coinbase/rosetta-sdk-go v0.7.9 // indirect - github.com/cometbft/cometbft-db v0.7.0 // indirect - github.com/confio/ics23/go v0.9.0 // indirect + github.com/cockroachdb/errors v1.11.1 // indirect + github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect + github.com/cockroachdb/pebble v0.0.0-20231119032537-b9be64b88e6a // indirect + github.com/cockroachdb/redact v1.1.5 // indirect + github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect github.com/cosmos/btcutil v1.0.5 // indirect - github.com/cosmos/gogoproto v1.4.11 // indirect - github.com/cosmos/gorocksdb v1.2.0 // indirect - github.com/cosmos/iavl v0.19.6 // indirect - github.com/cosmos/ledger-cosmos-go v0.12.2 // indirect + github.com/cosmos/gogogateway v1.2.0 // indirect + github.com/cosmos/iavl v1.0.0 // indirect + github.com/cosmos/ics23/go v0.10.0 // indirect + github.com/cosmos/ledger-cosmos-go v0.13.3 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect - github.com/creachadair/taskgroup v0.3.2 // indirect - github.com/danieljoos/wincred v1.1.2 // indirect + github.com/danieljoos/wincred v1.2.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect github.com/dgraph-io/badger/v2 v2.2007.4 // indirect - github.com/dgraph-io/ristretto v0.1.0 // indirect + github.com/dgraph-io/ristretto v0.1.1 // indirect github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect - github.com/docker/distribution v2.8.2+incompatible // indirect - github.com/dustin/go-humanize v1.0.0 // indirect + github.com/distribution/reference v0.5.0 // indirect + github.com/dustin/go-humanize v1.0.1 // indirect github.com/dvsekhvalnov/jose2go v1.5.0 // indirect - github.com/fatih/color v1.14.1 // indirect - github.com/felixge/httpsnoop v1.0.1 // indirect - github.com/fsnotify/fsnotify v1.6.0 // indirect - github.com/go-kit/kit v0.12.0 // indirect + github.com/emicklei/dot v1.6.0 // indirect + github.com/fatih/color v1.16.0 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/getsentry/sentry-go v0.25.0 // indirect + github.com/go-kit/kit v0.13.0 // indirect github.com/go-kit/log v0.2.1 // indirect - github.com/go-logfmt/logfmt v0.5.1 // indirect + github.com/go-logfmt/logfmt v0.6.0 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect - github.com/gogo/gateway v1.1.0 // indirect - github.com/golang/glog v1.1.2 // indirect + github.com/gogo/googleapis v1.4.1 // indirect + github.com/golang/glog v1.2.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/mock v1.6.0 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/google/btree v1.1.2 // indirect - github.com/google/go-cmp v0.5.9 // indirect + github.com/google/go-cmp v0.6.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/orderedcode v0.0.1 // indirect github.com/google/s2a-go v0.1.7 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.1 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect github.com/googleapis/gax-go/v2 v2.12.0 // indirect - github.com/gorilla/handlers v1.5.1 // indirect - github.com/gorilla/websocket v1.5.0 // indirect - github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect + github.com/gorilla/handlers v1.5.2 // indirect + github.com/gorilla/websocket v1.5.1 // indirect + github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect - github.com/gtank/merlin v0.1.1 // indirect - github.com/gtank/ristretto255 v0.1.2 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect - github.com/hashicorp/go-getter v1.7.0 // indirect + github.com/hashicorp/go-getter v1.7.1 // indirect github.com/hashicorp/go-hclog v1.5.0 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect - github.com/hashicorp/go-plugin v1.4.8 // indirect + github.com/hashicorp/go-plugin v1.6.0 // indirect github.com/hashicorp/go-safetemp v1.0.0 // indirect github.com/hashicorp/go-version v1.6.0 // indirect - github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d // indirect + github.com/hashicorp/golang-lru v1.0.2 // indirect github.com/hashicorp/hcl v1.0.0 // indirect - github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb // indirect - github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3 // indirect + github.com/hashicorp/yamux v0.1.1 // indirect + github.com/hdevalence/ed25519consensus v0.1.0 // indirect + github.com/huandu/skiplist v1.2.0 // indirect + github.com/iancoleman/strcase v0.3.0 // indirect github.com/improbable-eng/grpc-web v0.15.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect - github.com/klauspost/compress v1.17.0 // indirect + github.com/klauspost/compress v1.17.4 // indirect + github.com/kr/pretty v0.3.1 // indirect + github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.7 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect + github.com/linxGnu/grocksdb v1.8.6 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/manifoldco/promptui v0.9.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.19 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect - github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect github.com/minio/highwayhash v1.0.2 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mtibben/percent v0.2.1 // indirect - github.com/oklog/run v1.0.0 // indirect + github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a // indirect + github.com/oklog/run v1.1.0 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/pelletier/go-toml/v2 v2.1.0 // indirect - github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 // indirect + github.com/petermattis/goid v0.0.0-20230904192822-1876fd5063bc // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/prometheus/client_golang v1.14.0 // indirect - github.com/prometheus/client_model v0.3.0 // indirect - github.com/prometheus/common v0.42.0 // indirect - github.com/prometheus/procfs v0.9.0 // indirect + github.com/prometheus/client_golang v1.17.0 // indirect + github.com/prometheus/client_model v0.5.0 // indirect + github.com/prometheus/common v0.45.0 // indirect + github.com/prometheus/procfs v0.12.0 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect - github.com/rs/cors v1.8.2 // indirect + github.com/rogpeppe/go-internal v1.11.0 // indirect + github.com/rs/cors v1.10.1 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/sagikazarmark/locafero v0.3.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect @@ -153,52 +178,52 @@ require ( github.com/spf13/afero v1.10.0 // indirect github.com/subosito/gotenv v1.6.0 // indirect github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect - github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c // indirect github.com/tendermint/go-amino v0.16.0 // indirect - github.com/tidwall/btree v1.5.0 // indirect - github.com/ulikunitz/xz v0.5.10 // indirect - github.com/zondax/hid v0.9.1 // indirect - github.com/zondax/ledger-go v0.14.1 // indirect - go.etcd.io/bbolt v1.3.6 // indirect + github.com/tidwall/btree v1.7.0 // indirect + github.com/ulikunitz/xz v0.5.11 // indirect + github.com/zondax/hid v0.9.2 // indirect + github.com/zondax/ledger-go v0.14.3 // indirect + go.etcd.io/bbolt v1.3.8 // indirect go.opencensus.io v0.24.0 // indirect - go.uber.org/atomic v1.10.0 // indirect - go.uber.org/multierr v1.9.0 // indirect - golang.org/x/crypto v0.14.0 // indirect - golang.org/x/net v0.17.0 // indirect - golang.org/x/oauth2 v0.12.0 // indirect - golang.org/x/sync v0.3.0 // indirect - golang.org/x/sys v0.13.0 // indirect - golang.org/x/term v0.13.0 // indirect + go.uber.org/multierr v1.11.0 // indirect + golang.org/x/crypto v0.16.0 // indirect + golang.org/x/net v0.19.0 // indirect + golang.org/x/oauth2 v0.13.0 // indirect + golang.org/x/sync v0.5.0 // indirect + golang.org/x/sys v0.15.0 // indirect + golang.org/x/term v0.15.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/api v0.143.0 // indirect - google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20231002182017-d307bd883b97 // indirect + google.golang.org/api v0.149.0 // indirect + google.golang.org/appengine v1.6.8 // indirect + google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - nhooyr.io/websocket v1.8.6 // indirect - sigs.k8s.io/yaml v1.3.0 // indirect + gotest.tools/v3 v3.5.1 // indirect + nhooyr.io/websocket v1.8.10 // indirect + pgregory.net/rapid v1.1.0 // indirect + sigs.k8s.io/yaml v1.4.0 // indirect ) -replace github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 - -replace github.com/cosmos/cosmos-sdk => github.com/provenance-io/cosmos-sdk v0.46.13-pio-2 - -replace github.com/cosmos/ibc-go/v6 => github.com/provenance-io/ibc-go/v6 v6.2.0-pio-1 - -// Use cometbft as requied by the SDK at v0.46.13 -replace github.com/tendermint/tendermint => github.com/cometbft/cometbft v0.34.29 - -// Replace broken goleveldb as required by the SDK at v0.46.13 -replace github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 - -replace github.com/99designs/keyring => github.com/cosmos/keyring v1.2.0 - -replace github.com/tecbot/gorocksdb => github.com/cosmos/gorocksdb v1.1.1 - -// Fix upstream GHSA-h395-qcrw-5vmq vulnerability. -// TODO Remove it: https://github.com/cosmos/cosmos-sdk/issues/10409 -replace github.com/gin-gonic/gin => github.com/gin-gonic/gin v1.7.0 - -// TODO: This is also required for https://github.com/provenance-io/provenance/issues/1414 -replace github.com/CosmWasm/wasmd => github.com/provenance-io/wasmd v0.30.0-pio-5 +replace ( + // Use cosmos fork of keyring (because the SDK does). + github.com/99designs/keyring => github.com/cosmos/keyring v1.2.0 + // This is required for https://github.com/provenance-io/provenance/issues/1414 + // TODO[1760]: wasm: Put this CosmWasm/wasmd replace back with an updated version (or delete it). + // github.com/CosmWasm/wasmd => github.com/provenance-io/wasmd v0.30.0-pio-5 + // TODO[1760]: sdk: Put this replace back with an updated version of the sdk from our fork. + // github.com/cosmos/cosmos-sdk => github.com/provenance-io/cosmos-sdk v0.46.13-pio-2 + // TODO[1760]: ibc: Put this ibc-go replace back with an updated version (or delete it). + // github.com/cosmos/ibc-go/v6 => github.com/provenance-io/ibc-go/v6 v6.2.0-pio-1 + // dgrijalva/jwt-go is deprecated and doesn't receive security updates. + // TODO: remove it: https://github.com/cosmos/cosmos-sdk/issues/13134 + github.com/dgrijalva/jwt-go => github.com/golang-jwt/jwt/v4 v4.4.2 + // Fix upstream GHSA-h395-qcrw-5vmq and GHSA-3vp4-m3rf-835h vulnerabilities. + // TODO Remove it: https://github.com/cosmos/cosmos-sdk/issues/10409 + github.com/gin-gonic/gin => github.com/gin-gonic/gin v1.9.1 + // TODO[1760]: proto: Check if we can get rid of this gogo/protobuf replace. + github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 + // replace broken goleveldb + github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 + github.com/tecbot/gorocksdb => github.com/cosmos/gorocksdb v1.1.1 +) diff --git a/go.sum b/go.sum index 1a53025175..0ac27853c1 100644 --- a/go.sum +++ b/go.sum @@ -1,14 +1,12 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw= cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= @@ -34,8 +32,8 @@ cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w9 cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= -cloud.google.com/go v0.110.8 h1:tyNdfIxjzaWctIiLYOTalaLKZ17SI44SKFW26QbOhME= -cloud.google.com/go v0.110.8/go.mod h1:Iz8AkXJf1qmxC3Oxoep8R1T36w8B92yU29PcBhHO5fk= +cloud.google.com/go v0.110.10 h1:LXy9GEO+timppncPIAZoOj3l58LIU9k+kn48AN7IO3Y= +cloud.google.com/go v0.110.10/go.mod h1:v1OoFqYxiBkUrruItNM3eT4lLByNjxmJSV/xDKJNnic= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= @@ -59,7 +57,6 @@ cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUM cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= -cloud.google.com/go/bigtable v1.2.0/go.mod h1:JcVAOl45lrTmQfLj7T6TxyMzIN/3FGGcFm+2xVAli2o= cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= @@ -73,8 +70,8 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute v1.23.0 h1:tP41Zoavr8ptEqaW6j+LQOnyBBhO7OkOMAGrgLopTwY= -cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +cloud.google.com/go/compute v1.23.3 h1:6sVlXXBmbd7jNX0Ipq0trII3e4n1/MsADLK6a+aiVlk= +cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= @@ -114,8 +111,8 @@ cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y97 cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= -cloud.google.com/go/iam v1.1.2 h1:gacbrBdWcoVmGLozRuStX45YKvJtzIjJdAolzUs1sm4= -cloud.google.com/go/iam v1.1.2/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= +cloud.google.com/go/iam v1.1.5 h1:1jTsCu4bcsNsE4iiqNT5SHwrDRCfRmIaaaVFhRveTJI= +cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= @@ -190,81 +187,88 @@ cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xX cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= -collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= +cosmossdk.io/api v0.7.2 h1:BO3i5fvKMKvfaUiMkCznxViuBEfyWA/k6w2eAF6q1C4= +cosmossdk.io/api v0.7.2/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38= +cosmossdk.io/client/v2 v2.0.0-beta.1 h1:XkHh1lhrLYIT9zKl7cIOXUXg2hdhtjTPBUfqERNA1/Q= +cosmossdk.io/client/v2 v2.0.0-beta.1/go.mod h1:JEUSu9moNZQ4kU3ir1DKD5eU4bllmAexrGWjmb9k8qU= +cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s= +cosmossdk.io/collections v0.4.0/go.mod h1:oa5lUING2dP+gdDquow+QjlF45eL1t4TJDypgGd+tv0= +cosmossdk.io/core v0.11.0 h1:vtIafqUi+1ZNAE/oxLOQQ7Oek2n4S48SWLG8h/+wdbo= +cosmossdk.io/core v0.11.0/go.mod h1:LaTtayWBSoacF5xNzoF8tmLhehqlA9z1SWiPuNC6X1w= +cosmossdk.io/depinject v1.0.0-alpha.4 h1:PLNp8ZYAMPTUKyG9IK2hsbciDWqna2z1Wsl98okJopc= +cosmossdk.io/depinject v1.0.0-alpha.4/go.mod h1:HeDk7IkR5ckZ3lMGs/o91AVUc7E596vMaOmslGFM3yU= cosmossdk.io/errors v1.0.0 h1:nxF07lmlBbB8NKQhtJ+sJm6ef5uV1XkvPXG2bUntb04= cosmossdk.io/errors v1.0.0/go.mod h1:+hJZLuhdDE0pYN8HkOrVNwrIOYvUGnn6+4fjnJs/oV0= +cosmossdk.io/log v1.2.1 h1:Xc1GgTCicniwmMiKwDxUjO4eLhPxoVdI9vtMW8Ti/uk= +cosmossdk.io/log v1.2.1/go.mod h1:GNSCc/6+DhFIj1aLn/j7Id7PaO8DzNylUZoOYBL9+I4= cosmossdk.io/math v1.2.0 h1:8gudhTkkD3NxOP2YyyJIYYmt6dQ55ZfJkDOaxXpy7Ig= cosmossdk.io/math v1.2.0/go.mod h1:l2Gnda87F0su8a/7FEKJfFdJrM0JZRXQaohlgJeyQh0= +cosmossdk.io/simapp v0.0.0-20231107193120-9814f684b9dd h1:KwV+LjYFc4N+KwUrPtCfKW6m+zIdCI0kz1Zr+RrDW/Y= +cosmossdk.io/simapp v0.0.0-20231107193120-9814f684b9dd/go.mod h1:qnOJ7OPtF1kNzces9lnB3vpeMhQu4uQE9i+h0+vb+RA= +cosmossdk.io/store v1.0.1 h1:XBDhCqlL+2MUgE8CHWwndKVJ4beX+TyaPIjB5SV62dM= +cosmossdk.io/store v1.0.1/go.mod h1:EFtENTqVTuWwitGW1VwaBct+yDagk7oG/axBMPH+FXs= +cosmossdk.io/x/circuit v0.1.0 h1:IAej8aRYeuOMritczqTlljbUVHq1E85CpBqaCTwYgXs= +cosmossdk.io/x/circuit v0.1.0/go.mod h1:YDzblVE8+E+urPYQq5kq5foRY/IzhXovSYXb4nwd39w= +cosmossdk.io/x/evidence v0.1.0 h1:J6OEyDl1rbykksdGynzPKG5R/zm6TacwW2fbLTW4nCk= +cosmossdk.io/x/evidence v0.1.0/go.mod h1:hTaiiXsoiJ3InMz1uptgF0BnGqROllAN8mwisOMMsfw= +cosmossdk.io/x/feegrant v0.1.0 h1:c7s3oAq/8/UO0EiN1H5BIjwVntujVTkYs35YPvvrdQk= +cosmossdk.io/x/feegrant v0.1.0/go.mod h1:4r+FsViJRpcZif/yhTn+E0E6OFfg4n0Lx+6cCtnZElU= +cosmossdk.io/x/nft v0.1.0 h1:VhcsFiEK33ODN27kxKLa0r/CeFd8laBfbDBwYqCyYCM= +cosmossdk.io/x/nft v0.1.0/go.mod h1:ec4j4QAO4mJZ+45jeYRnW7awLHby1JZANqe1hNZ4S3g= +cosmossdk.io/x/tx v0.12.0 h1:Ry2btjQdrfrje9qZ3iZeZSmDArjgxUJMMcLMrX4wj5U= +cosmossdk.io/x/tx v0.12.0/go.mod h1:qTth2coAGkwCwOCjqQ8EAQg+9udXNRzcnSbMgGKGEI0= +cosmossdk.io/x/upgrade v0.1.0 h1:z1ZZG4UL9ICTNbJDYZ6jOnF9GdEK9wyoEFi4BUScHXE= +cosmossdk.io/x/upgrade v0.1.0/go.mod h1:/6jjNGbiPCNtmA1N+rBtP601sr0g4ZXuj3yC6ClPCGY= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmGfU= -filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= -git.sr.ht/~sircmpwn/getopt v0.0.0-20191230200459-23622cc906b3/go.mod h1:wMEGFFFNuPos7vHmWXfszqImLppbc0wEhh6JBfJIUgw= -git.sr.ht/~sircmpwn/go-bare v0.0.0-20210406120253-ab86bc2846d9/go.mod h1:BVJwbDfVjCjoFiKrhkei6NdGcZYpkDkdyCdg1ukytRA= +filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= +filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= -github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1/go.mod h1:fBF9PQNqB8scdgpZ3ufzaLntG0AG7C1WjPMsiFOmfHM= -github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3/go.mod h1:KLF4gFr6DcKFZwSuH8w8yEK6DpFl3LP5rhdvAb7Yz5I= -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0/go.mod h1:tPaiy8S5bQ+S5sOiDlINkp7+Ef339+Nz5L5XO+cnOHo= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= +github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= +github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/ChainSafe/go-schnorrkel v1.0.0 h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRrLeDnvGIM= -github.com/ChainSafe/go-schnorrkel v1.0.0/go.mod h1:dpzHYVxLZcp8pjlV+O+UR8K0Hp/z7vcchBSbMBEhCw4= -github.com/CosmWasm/wasmvm v1.2.4 h1:6OfeZuEcEH/9iqwrg2pkeVtDCkMoj9U6PpKtcrCyVrQ= -github.com/CosmWasm/wasmvm v1.2.4/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8J7KFtkc= -github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= +github.com/CosmWasm/wasmd v0.50.0 h1:NVaGqCSTRfb9UTDHJwT6nQIWcb6VjlQl88iI+u1+qjE= +github.com/CosmWasm/wasmd v0.50.0/go.mod h1:UjmShW4l9YxaMytwJZ7IB7MWzHiynSZP3DdWrG0FRtk= +github.com/CosmWasm/wasmvm v1.5.0 h1:3hKeT9SfwfLhxTGKH3vXaKFzBz1yuvP8SlfwfQXbQfw= +github.com/CosmWasm/wasmvm v1.5.0/go.mod h1:fXB+m2gyh4v9839zlIXdMZGeLAxqUdYdFQqYsTha2hc= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/DataDog/zstd v1.5.0/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= +github.com/DataDog/zstd v1.5.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ= +github.com/DataDog/zstd v1.5.5/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= +github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= +github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= 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.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/Workiva/go-datastructures v1.0.53 h1:J6Y/52yX10Xc5JjXmGtWoSSxs3mZnGSaq37xZZh7Yig= -github.com/Workiva/go-datastructures v1.0.53/go.mod h1:1yZL+zfsztete+ePzZz/Zb1/t5BnDuE2Ya2MMGhzP6A= -github.com/Zilliqa/gozilliqa-sdk v1.2.1-0.20201201074141-dd0ecada1be6/go.mod h1:eSYp2T6f0apnuW8TzhV3f6Aff2SE8Dwio++U4ha4yEM= github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= -github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= +github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= -github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.44.122 h1:p6mw01WBaNpbdP2xrisz5tIkcNwzj/HysobNoaAHjgo= github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.44.224 h1:09CiaaF35nRmxrzWZ2uRq5v6Ghg/d2RiPjZnSgtt+RQ= +github.com/aws/aws-sdk-go v1.44.224/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= -github.com/aws/aws-sdk-go-v2 v1.2.0/go.mod h1:zEQs02YRBw1DjK0PoJv3ygDYOFTre1ejlJWl8FwAuQo= -github.com/aws/aws-sdk-go-v2/config v1.1.1/go.mod h1:0XsVy9lBI/BCXm+2Tuvt39YmdHwS5unDQmxZOYe8F5Y= -github.com/aws/aws-sdk-go-v2/credentials v1.1.1/go.mod h1:mM2iIjwl7LULWtS6JCACyInboHirisUUdkBPoTHMOUo= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2/go.mod h1:3hGg3PpiEjHnrkrlasTfxFqUsZ2GCk/fMUn4CbKgSkM= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2/go.mod h1:45MfaXZ0cNbeuT0KQ1XJylq8A6+OpVV2E5kvY/Kq+u8= -github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1/go.mod h1:rLiOUrPLW/Er5kRcQ7NkwbjlijluLsrIbu/iyl35RO4= -github.com/aws/aws-sdk-go-v2/service/sso v1.1.1/go.mod h1:SuZJxklHxLAXgLTc1iFXbEWkXs7QRTQpCLGaKIprQW0= -github.com/aws/aws-sdk-go-v2/service/sts v1.1.1/go.mod h1:Wi0EBZwiz/K44YliU0EKxqTCJGUfYTWXrrBwkq736bM= -github.com/aws/smithy-go v1.1.0/go.mod h1:EzMw8dbp/YJL4A5/sbhGddag+NPT7q084agLbB9LgIw= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -274,60 +278,46 @@ github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 h1:41iFGWnSlI2gVpmOtVTJZNodLdLQLn/KsJqFvXwnd/s= github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= -github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= -github.com/btcsuite/btcd v0.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.0.20201114000516-e9c7a5ac6401/go.mod h1:Sv4JPQ3/M+teHz9Bo5jBpkNcP0x6r7rdihlNL/7tTAs= -github.com/btcsuite/btcd v0.22.1 h1:CnwP9LM/M9xuRrGSCGeMVs9iv09uMqwsVX7EeIpgV2c= -github.com/btcsuite/btcd v0.22.1/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y= -github.com/btcsuite/btcd/btcec/v2 v2.1.2/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= +github.com/bits-and-blooms/bitset v1.8.0 h1:FD+XqgOZDUxxZ8hzoBFuV9+cGWY9CslN6d5MS5JVb4c= +github.com/bits-and-blooms/bitset v1.8.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= -github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= +github.com/btcsuite/btcd/btcutil v1.1.3 h1:xfbtw8lwpp0G6NwSHb+UE67ryTFHJAiNuipusjXSohQ= +github.com/btcsuite/btcd/btcutil v1.1.3/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20190207003914-4c204d697803/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts= -github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= -github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/bufbuild/protocompile v0.1.0 h1:HjgJBI85hY/qmW5tw/66sNDZ7z0UDdVSi/5r40WHw4s= -github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= -github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= +github.com/bufbuild/protocompile v0.6.0 h1:Uu7WiSQ6Yj9DbkdnOe7U4mNKp58y9WDMKDn28/ZlunY= +github.com/bufbuild/protocompile v0.6.0/go.mod h1:YNP35qEYoYGme7QMtz5SBCoN4kL4g12jTtjuzRNdjpE= +github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= +github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM= +github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= -github.com/chzyer/logex v1.1.10 h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE= +github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= +github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8= +github.com/chzyer/logex v1.2.1 h1:XHDu3E6q+gdHgsdTPH6ImJMIp436vR6MPtH8gP05QzM= +github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8= +github.com/chzyer/readline v1.5.1 h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI= +github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/chzyer/test v1.0.0 h1:p3BQDXSxOhOG0P9z6/hGnII4LGiEPOYBhs8asl/fC04= +github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/cloudflare-go v0.14.0/go.mod h1:EnwdgGMaFOruiPZRFSgn+TsQ3hQ7C/YWzIGLeu5c304= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= @@ -340,21 +330,25 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= +github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= +github.com/cockroachdb/errors v1.11.1 h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZazG8= +github.com/cockroachdb/errors v1.11.1/go.mod h1:8MUxA3Gi6b25tYlFEBGLf+D8aISL+M4MIpiWMSNRfxw= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= +github.com/cockroachdb/pebble v0.0.0-20231119032537-b9be64b88e6a h1:X736kLTBU9S4kkBma7KBac16E4UBImQmlHLtvPi4VBY= +github.com/cockroachdb/pebble v0.0.0-20231119032537-b9be64b88e6a/go.mod h1:acMRUGd/BK8AUmQNK3spUCCGzFLZU2bSST3NMXSq2Kc= +github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= +github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= +github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= +github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/coinbase/kryptology v1.8.0/go.mod h1:RYXOAPdzOGUe3qlSFkMGn58i3xUA8hmxYHksuq+8ciI= -github.com/coinbase/rosetta-sdk-go v0.7.9 h1:lqllBjMnazTjIqYrOGv8h8jxjg9+hJazIGZr9ZvoCcA= -github.com/coinbase/rosetta-sdk-go v0.7.9/go.mod h1:0/knutI7XGVqXmmH4OQD8OckFrbQ8yMsUZTG7FXCR2M= -github.com/cometbft/cometbft v0.34.29 h1:Q4FqMevP9du2pOgryZJHpDV2eA6jg/kMYxBj9ZTY6VQ= -github.com/cometbft/cometbft v0.34.29/go.mod h1:L9shMfbkZ8B+7JlwANEr+NZbBcn+hBpwdbeYvA5rLCw= -github.com/cometbft/cometbft-db v0.7.0 h1:uBjbrBx4QzU0zOEnU8KxoDl18dMNgDh+zZRUE0ucsbo= -github.com/cometbft/cometbft-db v0.7.0/go.mod h1:yiKJIm2WKrt6x8Cyxtq9YTEcIMPcEe4XPxhgX59Fzf0= -github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= -github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= -github.com/consensys/bavard v0.1.8-0.20210406032232-f3452dc9b572/go.mod h1:Bpd0/3mZuaj6Sj+PqrmIquiOKy397AKGThQPaGzNXAQ= -github.com/consensys/bavard v0.1.8-0.20210915155054-088da2f7f54a/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= -github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1:815PAHg3wvysy0SyIqanF8gZ0Y1wjk/hrDHD/iT88+Q= -github.com/consensys/gnark-crypto v0.5.3/go.mod h1:hOdPlWQV1gDLp7faZVeg8Y0iEPFaOUnCc4XeCCk96p0= +github.com/cometbft/cometbft v0.38.2 h1:io0JCh5EPxINKN5ZMI5hCdpW3QVZRy+o8qWe3mlJa/8= +github.com/cometbft/cometbft v0.38.2/go.mod h1:PIi48BpzwlHqtV3mzwPyQgOyOnU94BNBimLS2ebBHOg= +github.com/cometbft/cometbft-db v0.9.1 h1:MIhVX5ja5bXNHF8EYrThkG9F7r9kSfv8BX4LWaxWJ4M= +github.com/cometbft/cometbft-db v0.9.1/go.mod h1:iliyWaoV0mRwBJoizElCwwRA9Tf7jZJOURcRZF9m60U= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= +github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= @@ -363,86 +357,75 @@ github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSV github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= -github.com/cosmos/cosmos-proto v1.0.0-beta.1 h1:iDL5qh++NoXxG8hSy93FdYJut4XfgbShIocllGaXx/0= -github.com/cosmos/cosmos-proto v1.0.0-beta.1/go.mod h1:8k2GNZghi5sDRFw/scPL8gMSowT1vDA+5ouxL8GjaUE= -github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= +github.com/cosmos/cosmos-db v1.0.0 h1:EVcQZ+qYag7W6uorBKFPvX6gRjw6Uq2hIh4hCWjuQ0E= +github.com/cosmos/cosmos-db v1.0.0/go.mod h1:iBvi1TtqaedwLdcrZVYRSSCb6eSy61NLj4UNmdIgs0U= +github.com/cosmos/cosmos-proto v1.0.0-beta.3 h1:VitvZ1lPORTVxkmF2fAp3IiA61xVwArQYKXTdEcpW6o= +github.com/cosmos/cosmos-proto v1.0.0-beta.3/go.mod h1:t8IASdLaAq+bbHbjq4p960BvcTqtwuAxid3b/2rOD6I= +github.com/cosmos/cosmos-sdk v0.50.1 h1:2SYwAYqd7ZwtrWxu/J8PwbQV/cDcu90bCr/a78g3lVw= +github.com/cosmos/cosmos-sdk v0.50.1/go.mod h1:fsLSPGstCwn6MMsFDMAQWGJj8E4sYsN9Gnu1bGE5imA= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= +github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= +github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ4GUkT+tbFI= +github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= github.com/cosmos/gogoproto v1.4.11 h1:LZcMHrx4FjUgrqQSWeaGC1v/TeuVFqSLa43CC6aWR2g= github.com/cosmos/gogoproto v1.4.11/go.mod h1:/g39Mh8m17X8Q/GDEs5zYTSNaNnInBSohtaxzQnYq1Y= -github.com/cosmos/gorocksdb v1.1.1 h1:N0OqpEKXgsi2qtDm8T1+AlNMXkTm6s1jowYf7/4pH5I= -github.com/cosmos/gorocksdb v1.1.1/go.mod h1:b/U29r/CtguX3TF7mKG1Jjn4APDqh4wECshxXdiWHpA= -github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4Y= -github.com/cosmos/gorocksdb v1.2.0/go.mod h1:aaKvKItm514hKfNJpUJXnnOWeBnk2GL4+Qw9NHizILw= -github.com/cosmos/iavl v0.19.6 h1:XY78yEeNPrEYyNCKlqr9chrwoeSDJ0bV2VjocTk//OU= -github.com/cosmos/iavl v0.19.6/go.mod h1:X9PKD3J0iFxdmgNLa7b2LYWdsGd90ToV5cAONApkEPw= -github.com/cosmos/ibc-apps/modules/async-icq/v6 v6.1.0 h1:4+qVTP35moRUv9vZoJ/eLt86JltdGkRPkb9Fn3jpakU= -github.com/cosmos/ibc-apps/modules/async-icq/v6 v6.1.0/go.mod h1:5ZoCEfvABWqmmWuZw5GW8+wKz59wD1xsMa3b/cn7uEc= -github.com/cosmos/interchain-accounts v0.4.2 h1:BxdzY22uouwe9wGK7h/HbzPNIH89JJ/4+V6n02l3cG4= +github.com/cosmos/iavl v1.0.0 h1:bw6t0Mv/mVCJvlMTOPHWLs5uUE3BRBfVWCRelOzl+so= +github.com/cosmos/iavl v1.0.0/go.mod h1:CmTGqMnRnucjxbjduneZXT+0vPgNElYvdefjX2q9tYc= +github.com/cosmos/ibc-go/modules/capability v1.0.0 h1:r/l++byFtn7jHYa09zlAdSeevo8ci1mVZNO9+V0xsLE= +github.com/cosmos/ibc-go/modules/capability v1.0.0/go.mod h1:D81ZxzjZAe0ZO5ambnvn1qedsFQ8lOwtqicG6liLBco= +github.com/cosmos/ibc-go/v8 v8.0.0 h1:QKipnr/NGwc+9L7NZipURvmSIu+nw9jOIWTJuDBqOhg= +github.com/cosmos/ibc-go/v8 v8.0.0/go.mod h1:C6IiJom0F3cIQCD5fKwVPDrDK9j/xTu563AWuOmXois= +github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= +github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= github.com/cosmos/keyring v1.2.0 h1:8C1lBP9xhImmIabyXW4c3vFjjLiBdGCmfLUfeZlV1Yo= github.com/cosmos/keyring v1.2.0/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= -github.com/cosmos/ledger-cosmos-go v0.12.2 h1:/XYaBlE2BJxtvpkHiBm97gFGSGmYGKunKyF3nNqAXZA= -github.com/cosmos/ledger-cosmos-go v0.12.2/go.mod h1:ZcqYgnfNJ6lAXe4HPtWgarNEY+B74i+2/8MhZw4ziiI= +github.com/cosmos/ledger-cosmos-go v0.13.3 h1:7ehuBGuyIytsXbd4MP43mLeoN2LTOEnk5nvue4rK+yM= +github.com/cosmos/ledger-cosmos-go v0.13.3/go.mod h1:HENcEP+VtahZFw38HZ3+LS3Iv5XV6svsnkk9vdJtLr8= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM= github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creachadair/taskgroup v0.3.2 h1:zlfutDS+5XG40AOxcHDSThxKzns8Tnr9jnr6VqkYlkM= -github.com/creachadair/taskgroup v0.3.2/go.mod h1:wieWwecHVzsidg2CsUnFinW1faVN4+kq+TDlRJQ0Wbk= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= -github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= -github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= -github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= -github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/danieljoos/wincred v1.2.0 h1:ozqKHaLK0W/ii4KVbbvluM91W2H3Sh0BncbUNPS7jLE= +github.com/danieljoos/wincred v1.2.0/go.mod h1:FzQLLMKBFdvu+osBrnFODiv32YGwCfx0SkRa/eYHgec= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= -github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= -github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= -github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= -github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE9iAUlWl9Al3M= -github.com/deepmap/oapi-codegen v1.8.2/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRktEqrX88CvjIw= +github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= +github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgraph-io/ristretto v0.0.3/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgraph-io/ristretto v0.1.0 h1:Jv3CGQHp9OjuMBSne1485aDpUkTKEcUqF+jm/LuerPI= -github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ= +github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= +github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= -github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= -github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= -github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= -github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0= +github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= -github.com/dop251/goja v0.0.0-20211011172007-d99e4b8cbf48/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= -github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= +github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/dvsekhvalnov/jose2go v1.5.0 h1:3j8ya4Z4kMCwT5nXIKFSV84YS+HdqSSO0VsTQxaLAeM= github.com/dvsekhvalnov/jose2go v1.5.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= github.com/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/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= +github.com/emicklei/dot v1.6.0 h1:vUzuoVE8ipzS7QkES4UfxdpCwdU2U97m2Pb2tQCoYRY= +github.com/emicklei/dot v1.6.0/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s= github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -454,89 +437,68 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.m github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/ethereum/go-ethereum v1.10.17/go.mod h1:Lt5WzjM07XlXc95YzrhosmR4J9Ahd6X2wyEV2SvGhk0= -github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= -github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= -github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= -github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= -github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= -github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/color v1.14.1 h1:qfhVLaG5s+nCROl1zJsZRxFeYrHLqWroPOQ8BWiNb4w= -github.com/fatih/color v1.14.1/go.mod h1:2oHN61fhTpgcxD3TSWCgKDiH1+x4OiDVVGH8WlgGZGg= -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-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= -github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= +github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= +github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= -github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= -github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= -github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= +github.com/getsentry/sentry-go v0.25.0 h1:q6Eo+hS+yoJlTO3uu/azhQadsD8V+jQn2D8VvX1eOyI= +github.com/getsentry/sentry-go v0.25.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= 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.7.0 h1:jGB9xAJQ12AIGNB4HguylppmDK1Am9ppF7XnGXXJuoU= -github.com/gin-gonic/gin v1.7.0/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= -github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= -github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= -github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= +github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= +github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= -github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= -github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= +github.com/go-kit/kit v0.13.0 h1:OoneCcHKHQ03LfBpoQCUfCluwd2Vt3ohz+kvbJneZAU= +github.com/go-kit/kit v0.13.0/go.mod h1:phqEHMMUbyrCFCTgH48JueqrM3md2HcAZ8N3XE4FKDg= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= -github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= -github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= -github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-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.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE= -github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= -github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= +github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= +github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= +github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= +github.com/go-playground/validator/v10 v10.14.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/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/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gogo/gateway v1.1.0 h1:u0SuhL9+Il+UbjM9VIE3ntfRujKbvVpFvNB4HbjeVQ0= -github.com/gogo/gateway v1.1.0/go.mod h1:S7rR8FRQyG3QFESeSv4l2WnsyzlCLG0CzBbUUo/mbic= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= -github.com/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= -github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= +github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= +github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= +github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= +github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo= -github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= +github.com/golang/glog v1.2.0 h1:uCdmnmatrKCgMBlM4rMuJZWOkPDqdbZPnrMXDY4gI68= +github.com/golang/glog v1.2.0/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -577,12 +539,10 @@ github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8l github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= -github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -597,11 +557,11 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= @@ -610,6 +570,7 @@ github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIG github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= +github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= @@ -631,17 +592,15 @@ github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm4 github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= -github.com/googleapis/enterprise-certificate-proxy v0.3.1 h1:SBWmZhjUDRorQxrN0nwzf+AHBxnbFjViHQS4P0yVpmQ= -github.com/googleapis/enterprise-certificate-proxy v0.3.1/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= +github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= +github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= @@ -657,54 +616,46 @@ github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+ github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= -github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= +github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE= +github.com/gorilla/handlers v1.5.2/go.mod h1:dX+xVpaxdSw+q0Qek8SSsl3dfMk3jNddUkMzo0GtH0w= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= -github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/graph-gophers/graphql-go v1.3.0/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= +github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= +github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= -github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= -github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= +github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= +github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= -github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= -github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= -github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= -github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= -github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-bexpr v0.1.10/go.mod h1:oxlubA2vC/gFVfX1A6JGp7ls7uCDlfJn732ehYYg+g0= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-getter v1.7.0 h1:bzrYP+qu/gMrL1au7/aDvkoOVGUJpeKBgbqRHACAFDY= -github.com/hashicorp/go-getter v1.7.0/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= +github.com/hashicorp/go-getter v1.7.1 h1:SWiSWN/42qdpR0MdhaOc/bLR48PLuP1ZQtYLRlM69uY= +github.com/hashicorp/go-getter v1.7.1/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= github.com/hashicorp/go-hclog v1.5.0 h1:bI2ocEMgcVlz55Oj1xZNBsVi900c7II+fWDyV9o+13c= github.com/hashicorp/go-hclog v1.5.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-metrics v0.5.2 h1:ErEYO2f//CjKsUDw4SmLzelsK6L3ZmOAR/4P9iS7ruY= +github.com/hashicorp/go-metrics v0.5.2/go.mod h1:KEjodfebIOuBYSAe/bHTm+HChmKSxAOXPBieMLYozDE= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-plugin v1.4.8 h1:CHGwpxYDOttQOY7HOWgETU9dyVjOXzniXDqJcYJE1zM= -github.com/hashicorp/go-plugin v1.4.8/go.mod h1:viDMjcLJuDui6pXb8U4HVfb8AamCWhHGUjr2IrTF67s= +github.com/hashicorp/go-plugin v1.6.0 h1:wgd4KxHJTVGGqWBq4QPB1i5BZNEx9BR8+OFmHDmTk8A= +github.com/hashicorp/go-plugin v1.6.0/go.mod h1:lBS5MtSSBZk0SHc66KACcjjlU6WzEVP/8pwz68aMkCI= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= @@ -712,32 +663,35 @@ github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoD github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= +github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= -github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= +github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb h1:b5rjCoWHc7eqmAS4/qyk21ZsHyb6Mxv/jykxvNTkU4M= -github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= -github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3 h1:aSVUgRRRtOrZOC1fYmY9gV0e9z/Iu+xNVSASWjsuyGU= -github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3/go.mod h1:5PC6ZNPde8bBqU/ewGZig35+UIZtw9Ytxez8/q5ZyFE= -github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= -github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= +github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= +github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= +github.com/hdevalence/ed25519consensus v0.1.0 h1:jtBwzzcHuTmFrQN6xQZn6CQEO/V9f7HsjsjeEZ6auqU= +github.com/hdevalence/ed25519consensus v0.1.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huandu/go-assert v1.1.5 h1:fjemmA7sSfYHJD7CUqs9qTwwfdNAx7/j2/ZlHXzNB3c= +github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0JrPVhn/06U= +github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw= +github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= -github.com/huin/goupnp v1.0.3-0.20220313090229-ca81a64b4204/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= -github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= +github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI= +github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ= @@ -745,23 +699,9 @@ github.com/improbable-eng/grpc-web v0.15.0/go.mod h1:1sy9HKV4Jt9aEs9JSnkWlRJPuPt github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/influxdata/flux v0.65.1/go.mod h1:J754/zds0vvpfwuq7Gc2wRdVwEodfpCFM7mYlOw2LqY= -github.com/influxdata/influxdb v1.8.3/go.mod h1:JugdFhsvvI8gadxOI6noqNeeBHvWNTbfYGtiAn+2jhI= -github.com/influxdata/influxdb-client-go/v2 v2.4.0/go.mod h1:vLNHdxTJkIf2mSLvGrpj8TCcISApPoXkaxP8g9uRlW8= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/influxdata/influxql v1.1.1-0.20200828144457-65d3ef77d385/go.mod h1:gHp9y86a/pxhjJ+zMjNXiQAA197Xk9wLxaz+fGG+kWk= -github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e/go.mod h1:4kt73NQhadE3daL3WhR5EJ/J2ocX0PZzwxQ0gXJ7oFE= -github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= -github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= -github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19ybifQhZoQNF5D8= -github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= -github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= -github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= -github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= -github.com/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.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= +github.com/jhump/protoreflect v1.15.3 h1:6SFRuqU45u9hIZPJAoZ8c28T3nK64BNdp9w6jFonzls= +github.com/jhump/protoreflect v1.15.3/go.mod h1:4ORHmSBmlCW8fh3xHmJMGyul1zNqZK4Elxc8qKP+p1k= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= @@ -771,99 +711,72 @@ github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= -github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jsternberg/zap-logfmt v1.0.0/go.mod h1:uvPs/4X51zdkcm5jXl5SYoN+4RK21K8mysFmDaM/h+o= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0= -github.com/karalabe/usb v0.0.2/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= -github.com/klauspost/compress v1.17.0 h1:Rnbp4K9EjcDuVuHtd0dgA4qNuv9yKDYKK1ulpJwgrqM= -github.com/klauspost/compress v1.17.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= -github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= -github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= -github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= -github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= -github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/lucasjones/reggen v0.0.0-20180717132126-cdb49ff09d77/go.mod h1:5ELEyG+X8f+meRWHuqUOewBOhvHkl7M76pdGEansxW4= +github.com/linxGnu/grocksdb v1.8.6 h1:O7I6SIGPrypf3f/gmrrLUBQDKfO8uOoYdWf4gLS06tc= +github.com/linxGnu/grocksdb v1.8.6/go.mod h1:xZCIb5Muw+nhbDK4Y5UJuOrin5MceOuiXkVUR7vp4WY= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= -github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= -github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= -github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 h1:QRUSJEgZn2Snx0EmT/QLXibWjSUDjKWvXIT19NBVp94= -github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= @@ -877,27 +790,19 @@ github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS4 github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= -github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= -github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76/go.mod h1:x5OoJHDHqxHS801UIuhqGl6QdSAEJvtausosHSdazIo= -github.com/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= @@ -905,70 +810,73 @@ 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.6/go.mod h1:Q2nLGf+594h0CLBs/Mbg6qOr7GtqDK7C2S41udRnToE= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a h1:dlRvE5fWabOchtH7znfiFCcOvmIYgOeAS5ifBXBlh9Q= +github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a/go.mod h1:hVoHR2EVESiICEMbg137etN/Lx+lSrHPTD39Z/uE+2s= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= -github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= 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/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA= +github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= +github.com/onsi/gomega v1.26.0 h1:03cDLK28U6hWvCAns6NeydX3zIm4SF3ci69ulidS32Q= +github.com/onsi/gomega v1.26.0/go.mod h1:r+zV744Re+DiYCIPRlYOTxn0YkOLcAnW8k1xXdMPGhM= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= +github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= +github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.0.3-0.20180606204148-bd9c31933947/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= +github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= github.com/otiai10/copy v1.14.0 h1:dCI/t1iTdYGtkvCuBG2BgR6KZa83PTclw4U5n2wAllU= github.com/otiai10/copy v1.14.0/go.mod h1:ECfuL02W+/FkTWZWgQqXPWZgW9oeKCSQ5qVfSc4qc4w= github.com/otiai10/mint v1.5.1 h1:XaPLeE+9vGbuyEHem1JNk3bYc7KKqyI/na0/mLd/Kks= +github.com/otiai10/mint v1.5.1/go.mod h1:MJm72SBthJjz8qhefc4z1PYEieWmy8Bku7CjcAqyUSM= 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/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4= github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= -github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= -github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= -github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 h1:hDSdbBuw3Lefr6R18ax0tZ2BJeNB3NehB3trOwYBsdU= -github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= -github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= -github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= +github.com/petermattis/goid v0.0.0-20230904192822-1876fd5063bc h1:8bQZVK1X6BJR/6nYUPxQEP+ReTsceJTKizeuwjWOPUA= +github.com/petermattis/goid v0.0.0-20230904192822-1876fd5063bc/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= +github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= -github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -979,41 +887,32 @@ 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.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= -github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= +github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= +github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= -github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= +github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= -github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= +github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= +github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= -github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/provenance-io/cosmos-sdk v0.46.13-pio-2 h1:P+MZTl8x1BoUYgwbXlKu12JRdQ9SIz/ZnASABJmNBek= -github.com/provenance-io/cosmos-sdk v0.46.13-pio-2/go.mod h1:H7JTxq/UEPvM/LSs5bNYvMwmZlVl2NBT5UlqNe8tjEU= -github.com/provenance-io/ibc-go/v6 v6.2.0-pio-1 h1:IQ+H6+PiRJhGmSjNxA+5VmX34M3sWG5iQI99WbKgbeA= -github.com/provenance-io/ibc-go/v6 v6.2.0-pio-1/go.mod h1:ZxvTNnra+3aTGaKeg0GR0C8do06lAVdSGmMJHe2fkOM= -github.com/provenance-io/wasmd v0.30.0-pio-5 h1:SNEZDiCC4LJdcLpINhhz5Jf0zddIQ76QIwScy4uxebM= -github.com/provenance-io/wasmd v0.30.0-pio-5/go.mod h1:z03r/MHY9N+sO95lxNPiOlg4XMqE/rdeyBjYX54CT8o= +github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= +github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= @@ -1023,15 +922,15 @@ 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/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= -github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= +github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= -github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo= +github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.31.0 h1:FcTR3NnLWW+NnTwwhFWiJSZr4ECLpqCm6QsEnyvbV4A= github.com/rs/zerolog v1.31.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= @@ -1048,17 +947,13 @@ github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0 github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= -github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= -github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= @@ -1086,7 +981,6 @@ 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.17.0 h1:I5txKw7MJasPL/BrfkbA0Jyo/oELqVmux4pR/UxOMfI= github.com/spf13/viper v1.17.0/go.mod h1:BmMMMLQXSbcHK6KAOiFLz0l5JHrU89OdIRHvsk0+yVI= -github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= 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= @@ -1095,7 +989,6 @@ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -1106,6 +999,8 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= @@ -1114,57 +1009,33 @@ github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70 github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= -github.com/tendermint/tm-db v0.6.7 h1:fE00Cbl0jayAoqlExN6oyQJ7fR/ZtoVOmvPJ//+shu8= -github.com/tendermint/tm-db v0.6.7/go.mod h1:byQDzFkZV1syXr/ReXS808NxA2xvyuuVgXOJ/088L6I= -github.com/tidwall/btree v1.5.0 h1:iV0yVY/frd7r6qGBXfEYs7DH0gTDgrKTrDjS7xt/IyQ= -github.com/tidwall/btree v1.5.0/go.mod h1:LGm8L/DZjPLmeWGjv5kFrY8dL4uVhMmzmmLYmsObdKE= -github.com/tidwall/gjson v1.12.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= -github.com/tidwall/gjson v1.14.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= -github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= -github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= -github.com/tidwall/sjson v1.2.4/go.mod h1:098SZ494YoMWPmMO6ct4dcFnqxwj9r/gF0Etp19pSNM= -github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= -github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg= -github.com/tklauser/go-sysconf v0.3.5/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= -github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM= +github.com/tidwall/btree v1.7.0 h1:L1fkJH/AuEh5zBnnBbmTwQ5Lt+bRJ5A8EWecslvo9iI= +github.com/tidwall/btree v1.7.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+lC5RZ8IT9rBXDaEDnpnw/Cl+HFiw+v/7Q= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= -github.com/tyler-smith/go-bip39 v1.0.2/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= -github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= -github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= +github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= -github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= -github.com/ulikunitz/xz v0.5.10 h1:t92gobL9l3HE202wg3rlk19F6X+JOxl9BBrCCMYEYd8= +github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= +github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= 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/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= -github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= -github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= -github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/ybbus/jsonrpc v2.1.2+incompatible/go.mod h1:XJrh1eMSzdIYFbM08flv0wp5G35eRniyeGut1z+LSiE= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/zondax/hid v0.9.1 h1:gQe66rtmyZ8VeGFcOpbuH3r7erYtNEAezCAYu8LdkJo= -github.com/zondax/hid v0.9.1/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= -github.com/zondax/ledger-go v0.14.1 h1:Pip65OOl4iJ84WTpA4BKChvOufMhhbxED3BaihoZN4c= -github.com/zondax/ledger-go v0.14.1/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= +github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U= +github.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= +github.com/zondax/ledger-go v0.14.3 h1:wEpJt2CEcBJ428md/5MgSLsXLBos98sBOyxNmCjfUCw= +github.com/zondax/ledger-go v0.14.3/go.mod h1:IKKaoxupuB43g4NxeQmbLXv7T9AlQyie1UpHb342ycI= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= -go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= +go.etcd.io/bbolt v1.3.8 h1:xs88BrvEv273UsB79e0hcVrlUWmS0a8upikMFhSyAtA= +go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= @@ -1181,45 +1052,37 @@ go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqe go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= -go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= 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.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= -go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= +golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= -golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= -golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY= +golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= @@ -1230,9 +1093,8 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI= -golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= -golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= +golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= +golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1259,8 +1121,9 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.13.0 h1:I/DsJXRlw/8l/0c24sM9yb0T4z9liZTduXvdAWYiysY= -golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= +golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1298,21 +1161,17 @@ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -1326,8 +1185,11 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= +golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= 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= @@ -1353,8 +1215,8 @@ golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= -golang.org/x/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4= -golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4= +golang.org/x/oauth2 v0.13.0 h1:jDDenyj+WgFtmV3zYVoi8aE2BwtXFLWOA67ZfNWftiY= +golang.org/x/oauth2 v0.13.0/go.mod h1:/JMhi4ZRXAf4HG9LiNmxvk+45+96RUlVThiH8FzNBn0= 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= @@ -1369,8 +1231,9 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= -golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= +golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1382,7 +1245,6 @@ golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190130150945-aca44879d564/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1392,7 +1254,6 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1403,7 +1264,6 @@ 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-20200107162124-548cf772de50/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1423,24 +1283,18 @@ golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1451,18 +1305,18 @@ golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1471,21 +1325,26 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= -golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= -golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= +golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= 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= @@ -1495,20 +1354,20 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= @@ -1525,6 +1384,7 @@ golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1533,7 +1393,6 @@ golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200108203644-89082a384178/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -1554,7 +1413,6 @@ golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= @@ -1568,7 +1426,9 @@ golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.14.0 h1:jvNa2pY0M4r62jkRQ6RwEZZyPcymeL9XZMLBbV7U2nc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.15.0 h1:zdAyfUGbYmuVokhzVmghFl2ZJh5QhcfebBgmVPFYA+8= +golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1578,12 +1438,6 @@ golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNq golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.6.0/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= -gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= @@ -1633,8 +1487,8 @@ google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.143.0 h1:o8cekTkqhywkbZT6p1UHJPZ9+9uuCAJs/KYomxZB8fA= -google.golang.org/api v0.143.0/go.mod h1:FoX9DO9hT7DLNn97OuoZAGSDuNAXdJRuGK98rSUgurk= +google.golang.org/api v0.149.0 h1:b2CqT6kG+zqJIVKRQ3ELJVLN1PwHZ6DJ3dW8yl82rgY= +google.golang.org/api v0.149.0/go.mod h1:Mwn1B7JTXrzXtnvmzQE2BD6bYZQ8DShKZDZbeN9I7qI= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1642,8 +1496,9 @@ google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7 google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= +google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= 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= @@ -1651,7 +1506,6 @@ google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRn google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= -google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= @@ -1659,7 +1513,6 @@ google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvx google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200108215221-bd8f9a0ef82f/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= @@ -1720,6 +1573,7 @@ google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2 google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= @@ -1754,15 +1608,14 @@ google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqw google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97 h1:SeZZZx0cP0fqUyA+oRzP9k7cSwJlvDFiROO72uwD6i0= -google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97/go.mod h1:t1VqOqqvce95G3hIDCT5FeO3YUc6Q4Oe24L/+rNMxRk= -google.golang.org/genproto/googleapis/api v0.0.0-20231009173412-8bfb1ae86b6c h1:0RtEmmHjemvUXloH7+RuBSIw7n+GEHMOMY1CkGYnWq4= -google.golang.org/genproto/googleapis/api v0.0.0-20231009173412-8bfb1ae86b6c/go.mod h1:Wth13BrWMRN/G+guBLupKa6fslcWZv14R0ZKDRkNfY8= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231002182017-d307bd883b97 h1:6GQBEOdGkX6MMTLT9V+TjtIRZCw9VPD5Z+yHY9wMgS0= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231002182017-d307bd883b97/go.mod h1:v7nGkzlmW8P3n/bKmWBn2WpBjpOEx8Q6gMueudAmKfY= +google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17 h1:wpZ8pe2x1Q3f2KyT5f8oP/fa9rHAKgFPr/HZdNuS+PQ= +google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:J7XzRzVy1+IPwWHZUzoD0IccYZIrXILAQpc+Qy9CMhY= +google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 h1:JpwMPBpFN3uKhdaekDpiNlImDdkUAyiJ6ez/uxGaUSo= +google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 h1:Jyp0Hsi0bmHXG6k9eATXoYtjd6e2UzZ1SCn/wIupY14= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:oQ5rr10WTTMvP4A36n8JpR1OrO1BEiV4f78CneXZxkA= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1802,8 +1655,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= -google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= +google.golang.org/grpc v1.60.0 h1:6FQAR0kM31P6MRdeluor2w2gPaS4SVNrD/DNTxrQ15k= +google.golang.org/grpc v1.60.0/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -1820,6 +1673,7 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= @@ -1836,12 +1690,9 @@ 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/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= -gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -1857,7 +1708,8 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= +gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1866,16 +1718,16 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= -nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= -pgregory.net/rapid v0.5.3 h1:163N50IHFqr1phZens4FQOdPgfJscR7a562mjQqeo4M= +nhooyr.io/websocket v1.8.10 h1:mv4p+MnGrLDcPlBoWsvPP7XCzTYMXP9F9eIGoKbgx7Q= +nhooyr.io/websocket v1.8.10/go.mod h1:rN9OFWIUwuxg4fR5tELlYC04bXYowCP9GX47ivo2l+c= +pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= +pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= -sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= +sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= +sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/internal/antewrapper/fee_gas_meter.go b/internal/antewrapper/fee_gas_meter.go index 7a72920fed..e3c453c95e 100644 --- a/internal/antewrapper/fee_gas_meter.go +++ b/internal/antewrapper/fee_gas_meter.go @@ -3,11 +3,11 @@ package antewrapper import ( "fmt" - "github.com/armon/go-metrics" + "github.com/hashicorp/go-metrics" - "github.com/tendermint/tendermint/libs/log" + "cosmossdk.io/log" - sdkgas "github.com/cosmos/cosmos-sdk/store/types" + storetypes "cosmossdk.io/store/types" "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" @@ -18,7 +18,7 @@ type FeeGasMeter struct { // a context logger reference for info/debug output log log.Logger // the gas meter being wrapped - base sdkgas.GasMeter + base storetypes.GasMeter // tracks amount used per purpose used map[string]uint64 // tracks number of usages per purpose @@ -36,7 +36,7 @@ type FeeGasMeter struct { } // NewFeeGasMeterWrapper returns a reference to a new tracing gas meter that will track calls to the base gas meter -func NewFeeGasMeterWrapper(logger log.Logger, baseMeter sdkgas.GasMeter, isSimulate bool) sdkgas.GasMeter { +func NewFeeGasMeterWrapper(logger log.Logger, baseMeter storetypes.GasMeter, isSimulate bool) storetypes.GasMeter { return &FeeGasMeter{ log: logger, base: baseMeter, @@ -49,10 +49,10 @@ func NewFeeGasMeterWrapper(logger log.Logger, baseMeter sdkgas.GasMeter, isSimul } } -var _ sdkgas.GasMeter = &FeeGasMeter{} +var _ storetypes.GasMeter = &FeeGasMeter{} // GasConsumed reports the amount of gas consumed at Log.Info level -func (g *FeeGasMeter) GasConsumed() sdkgas.Gas { +func (g *FeeGasMeter) GasConsumed() storetypes.Gas { usage := "tracingGasMeter:\n Purpose" for i, d := range g.used { usage = fmt.Sprintf("%s\n - %s (x%d) = %d", usage, i, g.calls[i], d) @@ -69,22 +69,22 @@ func (g *FeeGasMeter) RefundGas(amount uint64, descriptor string) { } // GasConsumedToLimit will report the actual consumption or the meter limit, whichever is less. -func (g *FeeGasMeter) GasConsumedToLimit() sdkgas.Gas { +func (g *FeeGasMeter) GasConsumedToLimit() storetypes.Gas { return g.base.GasConsumedToLimit() } // GasRemaining returns the gas left in the GasMeter. -func (g *FeeGasMeter) GasRemaining() sdkgas.Gas { +func (g *FeeGasMeter) GasRemaining() storetypes.Gas { return g.base.GasRemaining() } // Limit for amount of gas that can be consumed (if zero then unlimited) -func (g *FeeGasMeter) Limit() sdkgas.Gas { +func (g *FeeGasMeter) Limit() storetypes.Gas { return g.base.Limit() } // ConsumeGas increments the amount of gas used on the meter associated with a given purpose. -func (g *FeeGasMeter) ConsumeGas(amount sdkgas.Gas, descriptor string) { +func (g *FeeGasMeter) ConsumeGas(amount storetypes.Gas, descriptor string) { cur := g.used[descriptor] g.used[descriptor] = cur + amount diff --git a/internal/antewrapper/fee_gas_meter_test.go b/internal/antewrapper/fee_gas_meter_test.go index d30767618e..8d0e59e483 100644 --- a/internal/antewrapper/fee_gas_meter_test.go +++ b/internal/antewrapper/fee_gas_meter_test.go @@ -4,11 +4,13 @@ import ( "fmt" "testing" - sdkgas "github.com/cosmos/cosmos-sdk/store/types" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/tendermint/tendermint/libs/log" + + "cosmossdk.io/log" + storetypes "cosmossdk.io/store/types" + + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/provenance-io/provenance/internal/pioconfig" ) @@ -16,20 +18,20 @@ import ( func TestFeeGasMeter(t *testing.T) { pioconfig.SetProvenanceConfig("", 0) casesFeeGas := []struct { - limit sdkgas.Gas - usage []sdkgas.Gas + limit storetypes.Gas + usage []storetypes.Gas fees map[string]sdk.Coin }{ - {limit: 10, usage: []sdkgas.Gas{1, 2, 3, 4}, fees: nil}, - {limit: 1000, usage: []sdkgas.Gas{40, 30, 20, 10, 900}, fees: map[string]sdk.Coin{"/cosmos.bank.v1beta1.MsgSend": sdk.NewCoin(pioconfig.GetProvenanceConfig().FeeDenom, sdk.NewInt(1000000)), "/provenance.marker.v1.MsgAddMarkerRequest": sdk.NewCoin("doge", sdk.NewInt(1000000))}}, - {limit: 100000, usage: []sdkgas.Gas{99999, 1}, fees: map[string]sdk.Coin{"/cosmos.bank.v1beta1.MsgSend": sdk.NewCoin(pioconfig.GetProvenanceConfig().FeeDenom, sdk.NewInt(1000000))}}, - {limit: 100000000, usage: []sdkgas.Gas{50000000, 40000000, 10000000}, fees: map[string]sdk.Coin{"/cosmos.bank.v1beta1.MsgSend": sdk.NewCoin(pioconfig.GetProvenanceConfig().FeeDenom, sdk.NewInt(5555))}}, - {limit: 65535, usage: []sdkgas.Gas{32768, 32767}, fees: nil}, - {limit: 65536, usage: []sdkgas.Gas{32768, 32767, 1}, fees: nil}, + {limit: 10, usage: []storetypes.Gas{1, 2, 3, 4}, fees: nil}, + {limit: 1000, usage: []storetypes.Gas{40, 30, 20, 10, 900}, fees: map[string]sdk.Coin{"/cosmos.bank.v1beta1.MsgSend": sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 1_000_000), "/provenance.marker.v1.MsgAddMarkerRequest": sdk.NewInt64Coin("doge", 1_000_000)}}, + {limit: 100_000, usage: []storetypes.Gas{99999, 1}, fees: map[string]sdk.Coin{"/cosmos.bank.v1beta1.MsgSend": sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 1_000_000)}}, + {limit: 100_000_000, usage: []storetypes.Gas{50_000_000, 40_000_000, 10_000_000}, fees: map[string]sdk.Coin{"/cosmos.bank.v1beta1.MsgSend": sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 5555)}}, + {limit: 65535, usage: []storetypes.Gas{32768, 32767}, fees: nil}, + {limit: 65536, usage: []storetypes.Gas{32768, 32767, 1}, fees: nil}, } for tcnum, tc := range casesFeeGas { - meter := NewFeeGasMeterWrapper(log.TestingLogger(), sdkgas.NewGasMeter(tc.limit), false).(*FeeGasMeter) + meter := NewFeeGasMeterWrapper(log.NewTestLogger(t), storetypes.NewGasMeter(tc.limit), false).(*FeeGasMeter) used := uint64(0) var usedFee sdk.Coins @@ -37,8 +39,8 @@ func TestFeeGasMeter(t *testing.T) { usage := usage used += usage require.NotPanics(t, func() { meter.ConsumeGas(usage, "") }, "Not exceeded limit but panicked. tc #%d, usage #%d", tcnum, unum) - require.Equal(t, used, meter.GasConsumed(), "sdkgas.Gas consumption not match. tc #%d, usage #%d", tcnum, unum) - require.Equal(t, used, meter.GasConsumedToLimit(), "sdkgas.Gas consumption (to limit) not match. tc #%d, usage #%d", tcnum, unum) + require.Equal(t, used, meter.GasConsumed(), "storetypes.Gas consumption not match. tc #%d, usage #%d", tcnum, unum) + require.Equal(t, used, meter.GasConsumedToLimit(), "storetypes.Gas consumption (to limit) not match. tc #%d, usage #%d", tcnum, unum) require.False(t, meter.IsPastLimit(), "Not exceeded limit but got IsPastLimit() true") if unum < len(tc.usage)-1 { require.False(t, meter.IsOutOfGas(), "Not yet at limit but got IsOutOfGas() true") @@ -58,25 +60,25 @@ func TestFeeGasMeter(t *testing.T) { } require.Panics(t, func() { meter.ConsumeGas(1, "") }, "Exceeded but not panicked. tc #%d", tcnum) - require.Equal(t, meter.GasConsumedToLimit(), meter.Limit(), "sdkgas.Gas consumption (to limit) not match limit") - require.Equal(t, meter.GasConsumed(), meter.Limit()+1, "sdkgas.Gas consumption not match limit+1") + require.Equal(t, meter.GasConsumedToLimit(), meter.Limit(), "storetypes.Gas consumption (to limit) not match limit") + require.Equal(t, meter.GasConsumed(), meter.Limit()+1, "storetypes.Gas consumption not match limit+1") assert.Equal(t, meter.FeeConsumed().Sort(), usedFee.Sort(), "FeeConsumed does not match all Fees") - meter2 := NewFeeGasMeterWrapper(log.TestingLogger(), sdkgas.NewGasMeter(100), false).(*FeeGasMeter) - meter2.ConsumeGas(sdkgas.Gas(50), "consume half max") - meter2.ConsumeFee(sdk.NewCoins(sdk.NewCoin(pioconfig.GetProvenanceConfig().FeeDenom, sdk.NewInt(1000000))), "/cosmos.bank.v1beta1.MsgSend", "") + meter2 := NewFeeGasMeterWrapper(log.NewTestLogger(t), storetypes.NewGasMeter(100), false).(*FeeGasMeter) + meter2.ConsumeGas(storetypes.Gas(50), "consume half max") + meter2.ConsumeFee(sdk.NewCoins(sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 1_000_000)), "/cosmos.bank.v1beta1.MsgSend", "") require.Equalf(t, "feeGasMeter:\n limit: 100\n consumed: 50 fee consumed: 1000000nhash", meter2.String(), "expect string output to match") meter2.RefundGas(uint64(20), "refund") require.Equalf(t, "feeGasMeter:\n limit: 100\n consumed: 30 fee consumed: 1000000nhash", meter2.String(), "expect string output to match") require.Equalf(t, "1000000nhash", meter2.FeeConsumed().String(), "expect string output to match") - require.Panics(t, func() { meter2.ConsumeGas(sdkgas.Gas(70)+2, "panic") }) - meter2.ConsumeFee(sdk.NewCoins(sdk.NewCoin(pioconfig.GetProvenanceConfig().FeeDenom, sdk.NewInt(2000000))), "/cosmos.bank.v1beta1.MsgSend", "") + require.Panics(t, func() { meter2.ConsumeGas(storetypes.Gas(70)+2, "panic") }) + meter2.ConsumeFee(sdk.NewCoins(sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 2_000_000)), "/cosmos.bank.v1beta1.MsgSend", "") require.Equalf(t, "feeGasMeter:\n limit: 100\n consumed: 102 fee consumed: 3000000nhash", meter2.String(), "expect string output to match") meter2.RefundGas(uint64(20), "refund") require.Equalf(t, "feeGasMeter:\n limit: 100\n consumed: 82 fee consumed: 3000000nhash", meter2.String(), "expect string output to match") require.Equalf(t, "3000000nhash", meter2.FeeConsumed().String(), "expect string output to match") require.Equalf(t, "map[/cosmos.bank.v1beta1.MsgSend:3000000nhash]", fmt.Sprintf("%v", meter2.FeeConsumedByMsg()), "expect string output to match") - meter2.ConsumeFee(sdk.NewCoins(sdk.NewCoin("doge", sdk.NewInt(2000000))), "/provenance.marker.v1.MsgAddMarkerRequest", "") - meter2.ConsumeFee(sdk.NewCoins(sdk.NewCoin("jackthecat", sdk.NewInt(420))), "/provenance.marker.v1.MsgAddMarkerRequest", "") + meter2.ConsumeFee(sdk.NewCoins(sdk.NewInt64Coin("doge", 2_000_000)), "/provenance.marker.v1.MsgAddMarkerRequest", "") + meter2.ConsumeFee(sdk.NewCoins(sdk.NewInt64Coin("jackthecat", 420)), "/provenance.marker.v1.MsgAddMarkerRequest", "") meter2FeesConsumed := meter2.FeeConsumed() require.Equalf(t, "2000000doge,420jackthecat,3000000nhash", meter2FeesConsumed.String(), "expect string output to match") require.Equalf(t, "2000000doge,420jackthecat", meter2.FeeConsumedForType("/provenance.marker.v1.MsgAddMarkerRequest", "").String(), "expect string output to match") diff --git a/internal/antewrapper/handler.go b/internal/antewrapper/handler.go index a739b76617..bfa1e7f097 100644 --- a/internal/antewrapper/handler.go +++ b/internal/antewrapper/handler.go @@ -1,11 +1,13 @@ package antewrapper import ( + storetypes "cosmossdk.io/store/types" + txsigning "cosmossdk.io/x/tx/signing" + sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/types/tx/signing" cosmosante "github.com/cosmos/cosmos-sdk/x/auth/ante" - authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/keeper" @@ -19,8 +21,8 @@ type HandlerOptions struct { ExtensionOptionChecker cosmosante.ExtensionOptionChecker FeegrantKeeper msgfeestypes.FeegrantKeeper MsgFeesKeeper msgfeestypes.MsgFeesKeeper - SignModeHandler authsigning.SignModeHandler - SigGasConsumer func(meter sdk.GasMeter, sig signing.SignatureV2, params types.Params) error + TxSigningHandlerMap *txsigning.HandlerMap + SigGasConsumer func(meter storetypes.GasMeter, sig signing.SignatureV2, params types.Params) error } func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { @@ -32,8 +34,8 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { return nil, sdkerrors.ErrLogic.Wrap("bank keeper is required for ante builder") } - if options.SignModeHandler == nil { - return nil, sdkerrors.ErrLogic.Wrap("sign mode handler is required for ante builder") + if options.TxSigningHandlerMap == nil { + return nil, sdkerrors.ErrLogic.Wrap("tx signing handler map is required for ante builder") } var sigGasConsumer = options.SigGasConsumer @@ -56,7 +58,7 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { cosmosante.NewSetPubKeyDecorator(options.AccountKeeper), // SetPubKeyDecorator must be called before all signature verification decorators cosmosante.NewValidateSigCountDecorator(options.AccountKeeper), cosmosante.NewSigGasConsumeDecorator(options.AccountKeeper, sigGasConsumer), - cosmosante.NewSigVerificationDecorator(options.AccountKeeper, options.SignModeHandler), + cosmosante.NewSigVerificationDecorator(options.AccountKeeper, options.TxSigningHandlerMap), cosmosante.NewIncrementSequenceDecorator(options.AccountKeeper), } diff --git a/internal/antewrapper/min_gas_prices_decorator.go b/internal/antewrapper/min_gas_prices_decorator.go index 14890c38d8..b5fef35ab5 100644 --- a/internal/antewrapper/min_gas_prices_decorator.go +++ b/internal/antewrapper/min_gas_prices_decorator.go @@ -1,6 +1,8 @@ package antewrapper import ( + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) @@ -59,7 +61,7 @@ func checkTxFeeWithValidatorMinGasPrices(ctx sdk.Context, tx sdk.Tx) error { // Determine the required fees by multiplying each required minimum gas // price by the gas limit, where fee = ceil(minGasPrice * gasLimit). - glDec := sdk.NewDec(int64(gas)) + glDec := sdkmath.LegacyNewDec(int64(gas)) for i, gp := range minGasPrices { fee := gp.Amount.Mul(glDec) requiredFees[i] = sdk.NewCoin(gp.Denom, fee.Ceil().RoundInt()) diff --git a/internal/antewrapper/min_gas_prices_decorator_test.go b/internal/antewrapper/min_gas_prices_decorator_test.go index b9f4654e86..495919d5e9 100644 --- a/internal/antewrapper/min_gas_prices_decorator_test.go +++ b/internal/antewrapper/min_gas_prices_decorator_test.go @@ -3,11 +3,16 @@ package antewrapper_test import ( "testing" - sdk "github.com/cosmos/cosmos-sdk/types" - txtypes "github.com/cosmos/cosmos-sdk/types/tx" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + protov2 "google.golang.org/protobuf/proto" + + cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" + + sdkmath "cosmossdk.io/math" + + sdk "github.com/cosmos/cosmos-sdk/types" + txtypes "github.com/cosmos/cosmos-sdk/types/tx" "github.com/provenance-io/provenance/internal/antewrapper" ) @@ -39,19 +44,34 @@ func (t NonFeeTx) GetMsgs() []sdk.Msg { return nil } -func (t NonFeeTx) ValidateBasic() error { - return nil +func (t NonFeeTx) GetMsgsV2() ([]protov2.Message, error) { + return nil, nil +} + +var _ sdk.Tx = &FeeTxWrapper{} + +// FeeTxWrapper is a wrapper on a txtypes.Tx that also has the GetMsgsV2 func so it satisfies the sdk.Tx interface. +type FeeTxWrapper struct { + txtypes.Tx +} + +func (t FeeTxWrapper) GetMsgsV2() ([]protov2.Message, error) { + return nil, nil +} + +func NewFeeTxWrapper(tx txtypes.Tx) *FeeTxWrapper { + return &FeeTxWrapper{Tx: tx} } func NewFeeTx(gasLimit uint64, fee sdk.Coins) sdk.Tx { - return &txtypes.Tx{ + return NewFeeTxWrapper(txtypes.Tx{ AuthInfo: &txtypes.AuthInfo{ Fee: &txtypes.Fee{ Amount: fee, GasLimit: gasLimit, }, }, - } + }) } func TestAnteHandle(tt *testing.T) { @@ -200,7 +220,7 @@ func TestAnteHandle(tt *testing.T) { name: "decimal min gas rounded up", simulate: false, isCheckTx: true, - minGasPrices: sdk.NewDecCoins(sdk.NewDecCoinFromDec("pcoin", sdk.MustNewDecFromStr("0.15"))), + minGasPrices: sdk.NewDecCoins(sdk.NewDecCoinFromDec("pcoin", sdkmath.LegacyMustNewDecFromStr("0.15"))), tx: NewFeeTx(7, sdk.NewCoins(sdk.NewInt64Coin("pcoin", 1))), expectedInError: []string{"required: 2pcoin"}, }, @@ -242,7 +262,7 @@ func TestAnteHandle(tt *testing.T) { for _, tc := range tests { tt.Run(tc.name, func(t *testing.T) { - ctx := sdk.NewContext(nil, tmproto.Header{}, tc.isCheckTx, nil).WithMinGasPrices(tc.minGasPrices) + ctx := sdk.NewContext(nil, cmtproto.Header{}, tc.isCheckTx, nil).WithMinGasPrices(tc.minGasPrices) terminator := NewTestTerminator() decorator := antewrapper.NewMinGasPricesDecorator() newCtx, err := decorator.AnteHandle(ctx, tc.tx, tc.simulate, terminator.AnteHandler) diff --git a/internal/antewrapper/msg_fees_decorator.go b/internal/antewrapper/msg_fees_decorator.go index 65652e59f9..c32c94cf2b 100644 --- a/internal/antewrapper/msg_fees_decorator.go +++ b/internal/antewrapper/msg_fees_decorator.go @@ -1,10 +1,12 @@ package antewrapper import ( - "github.com/cosmos/cosmos-sdk/simapp/helpers" + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/provenance-io/provenance/internal/pioconfig" msgfeestypes "github.com/provenance-io/provenance/x/msgfees/types" ) @@ -77,7 +79,7 @@ func (mfd MsgFeesDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool // and some network tests won't work without a chain id being set(but they also setup everything with stake denom) so `simapp-unit-testing` chain id is skipped also. // This only needs to work to pio-testnet and pio-mainnet, so this is safe. func isTestContext(ctx sdk.Context) bool { - return len(ctx.ChainID()) == 0 || ctx.ChainID() == SimAppChainID || ctx.ChainID() == helpers.SimAppChainID + return len(ctx.ChainID()) == 0 || ctx.ChainID() == SimAppChainID || ctx.ChainID() == pioconfig.SimAppChainID } // EnsureSufficientFloorAndMsgFees verifies that the given transaction has supplied @@ -93,7 +95,7 @@ func EnsureSufficientFloorAndMsgFees(ctx sdk.Context, feeCoins sdk.Coins, floorG var baseFee sdk.Coins if !floorGasPrice.IsZero() { - baseFee = baseFee.Add(sdk.NewCoin(floorGasPrice.Denom, floorGasPrice.Amount.Mul(sdk.NewIntFromUint64(gas)))) + baseFee = baseFee.Add(sdk.NewCoin(floorGasPrice.Denom, floorGasPrice.Amount.Mul(sdkmath.NewIntFromUint64(gas)))) } reqTotal := baseFee.Add(additionalFees...) diff --git a/internal/antewrapper/msg_fees_decorator_test.go b/internal/antewrapper/msg_fees_decorator_test.go index 19ec4bb672..c382f130f9 100644 --- a/internal/antewrapper/msg_fees_decorator_test.go +++ b/internal/antewrapper/msg_fees_decorator_test.go @@ -3,6 +3,8 @@ package antewrapper_test import ( "fmt" + sdkmath "cosmossdk.io/math" + cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" @@ -38,7 +40,7 @@ func (s *AnteTestSuite) TestMsgFeesDecoratorIgnoresMinGasPrice() { tx, _ := createTestTx(s, sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 100000))) // Set gas price to 1,000,000 stake to make sure it's not being used in the handler. - stakePrice := sdk.NewDecCoinFromDec(sdk.DefaultBondDenom, sdk.NewDec(1_000_000)) + stakePrice := sdk.NewDecCoinFromDec(sdk.DefaultBondDenom, sdkmath.LegacyNewDec(1_000_000)) highGasPrice := []sdk.DecCoin{stakePrice} ctx := s.ctx.WithMinGasPrices(highGasPrice).WithChainID("test-chain") diff --git a/internal/antewrapper/prov_fee_test.go b/internal/antewrapper/prov_fee_test.go index 3c300c36f6..c06efb4717 100644 --- a/internal/antewrapper/prov_fee_test.go +++ b/internal/antewrapper/prov_fee_test.go @@ -32,8 +32,8 @@ func (s *AnteTestSuite) TestProvenanceDeductFeeDecoratorChecksFunds() { // Set account with insufficient funds acc := s.app.AccountKeeper.NewAccountWithAddress(s.ctx, addr1) s.app.AccountKeeper.SetAccount(s.ctx, acc) - coins := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(10))) - err = testutil.FundAccount(s.app.BankKeeper, s.ctx, addr1, coins) + coins := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 10)) + err = testutil.FundAccount(s.ctx, s.app.BankKeeper, addr1, coins) s.Require().NoError(err, "funding account with %s", coins) s.Require().Equal(sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 10)), s.app.BankKeeper.GetAllBalances(s.ctx, addr1), "should have the new balance after funding account") @@ -52,8 +52,8 @@ func (s *AnteTestSuite) TestProvenanceDeductFeeDecoratorChecksFunds() { // Set account with sufficient funds s.app.AccountKeeper.SetAccount(s.ctx, acc) - plusCoins := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(200_000))) - err = testutil.FundAccount(s.app.BankKeeper, s.ctx, addr1, plusCoins) + plusCoins := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 200_000)) + err = testutil.FundAccount(s.ctx, s.app.BankKeeper, addr1, plusCoins) s.Require().NoError(err, "funding account with %s", plusCoins) s.Require().Equal(coins.Add(plusCoins...), s.app.BankKeeper.GetAllBalances(s.ctx, addr1), "Balance before tx") _, err = antehandler(s.ctx, tx, false) @@ -90,8 +90,8 @@ func (s *AnteTestSuite) TestProvenanceDeductFeeDecoratorAdditionalFees() { // Set the account with insufficient funds (base fee coin insufficient) acc := s.app.AccountKeeper.NewAccountWithAddress(s.ctx, addr1) s.app.AccountKeeper.SetAccount(s.ctx, acc) - coins := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(10))) - err = testutil.FundAccount(s.app.BankKeeper, s.ctx, addr1, coins) + coins := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 10)) + err = testutil.FundAccount(s.ctx, s.app.BankKeeper, addr1, coins) s.Require().NoError(err, "funding account with 10stake") decorators := []sdk.AnteDecorator{pioante.NewFeeMeterContextDecorator(), pioante.NewProvenanceDeductFeeDecorator(s.app.AccountKeeper, s.app.BankKeeper, nil, s.app.MsgFeesKeeper)} @@ -110,7 +110,7 @@ func (s *AnteTestSuite) TestProvenanceDeductFeeDecoratorAdditionalFees() { // Set account with sufficient funds for base fees and but not additional fees s.app.AccountKeeper.SetAccount(s.ctx, acc) - err = testutil.FundAccount(s.app.BankKeeper, s.ctx, addr1, sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(200_000)))) + err = testutil.FundAccount(s.ctx, s.app.BankKeeper, addr1, sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 200_000))) s.Require().NoError(err, "funding account with 200000stake") s.Run("insufficient funds for just additional fees", func() { @@ -127,7 +127,7 @@ func (s *AnteTestSuite) TestProvenanceDeductFeeDecoratorAdditionalFees() { // set gas fee and msg fees (steak) // Set account with sufficient funds s.app.AccountKeeper.SetAccount(s.ctx, acc) - err = testutil.FundAccount(s.app.BankKeeper, s.ctx, addr1, sdk.NewCoins(sdk.NewCoin("steak", sdk.NewInt(200)))) + err = testutil.FundAccount(s.ctx, s.app.BankKeeper, addr1, sdk.NewCoins(sdk.NewInt64Coin("steak", 200))) s.Require().NoError(err, "funding account with 200steak") s.Run("sufficient funds", func() { diff --git a/internal/antewrapper/prov_feegrant_test.go b/internal/antewrapper/prov_feegrant_test.go index 4129cbabab..7c727fbc19 100644 --- a/internal/antewrapper/prov_feegrant_test.go +++ b/internal/antewrapper/prov_feegrant_test.go @@ -1,6 +1,7 @@ package antewrapper_test import ( + "context" "fmt" "math/rand" "testing" @@ -9,17 +10,18 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "cosmossdk.io/x/feegrant" + "cosmossdk.io/x/tx/signing" + "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/simulation" - "github.com/cosmos/cosmos-sdk/types/tx/signing" - authsign "github.com/cosmos/cosmos-sdk/x/auth/signing" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + sdksigning "github.com/cosmos/cosmos-sdk/types/tx/signing" "github.com/cosmos/cosmos-sdk/x/auth/tx" "github.com/cosmos/cosmos-sdk/x/bank/testutil" - "github.com/cosmos/cosmos-sdk/x/feegrant" pioante "github.com/provenance-io/provenance/internal/antewrapper" ) @@ -53,11 +55,11 @@ func (s *AnteTestSuite) TestDeductFeesNoDelegation() { priv5, _, addr5 := testdata.KeyTestPubAddr() // Set addr1 with insufficient funds - err := testutil.FundAccount(s.app.BankKeeper, s.ctx, addr1, []sdk.Coin{sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(10))}) + err := testutil.FundAccount(s.ctx, s.app.BankKeeper, addr1, []sdk.Coin{sdk.NewInt64Coin(sdk.DefaultBondDenom, 10)}) s.Require().NoError(err, "funding account 1") // Set addr2 with more funds - err = testutil.FundAccount(s.app.BankKeeper, s.ctx, addr2, []sdk.Coin{sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(defaultGas*10-1))}) + err = testutil.FundAccount(s.ctx, s.app.BankKeeper, addr2, []sdk.Coin{sdk.NewInt64Coin(sdk.DefaultBondDenom, defaultGas*10-1)}) s.Require().NoError(err, "funding account 2") // grant fee allowance from `addr2` to `addr3` (plenty to pay) @@ -173,7 +175,7 @@ func (s *AnteTestSuite) TestDeductFeesNoDelegation() { accNums, seqs = []uint64{acc.GetAccountNumber()}, []uint64{acc.GetSequence()} } - txfg, err := genTxWithFeeGranter(protoTxCfg, msgs, fee, defaultGas, ctx.ChainID(), accNums, seqs, tc.feeAccount, privs...) + txfg, err := genTxWithFeeGranter(ctx, protoTxCfg, msgs, fee, defaultGas, ctx.ChainID(), accNums, seqs, tc.feeAccount, privs...) require.NoError(t, err, "genTxWithFeeGranter") _, err = feeAnteHandler(ctx, txfg, false) // tests only feegrant ante if len(tc.expInErr) == 0 { @@ -198,24 +200,24 @@ func (s *AnteTestSuite) TestDeductFeesNoDelegation() { } } -func genTxWithFeeGranter(gen client.TxConfig, msgs []sdk.Msg, feeAmt sdk.Coins, gas uint64, chainID string, accNums, +func genTxWithFeeGranter(ctx context.Context, gen client.TxConfig, msgs []sdk.Msg, feeAmt sdk.Coins, gas uint64, chainID string, accNums, accSeqs []uint64, feeGranter sdk.AccAddress, priv ...cryptotypes.PrivKey) (sdk.Tx, error) { - sigs := make([]signing.SignatureV2, len(priv)) + sigs := make([]sdksigning.SignatureV2, len(priv)) // create a random length memo r := rand.New(rand.NewSource(time.Now().UnixNano())) - memo := simulation.RandStringOfLength(r, r.Intn(101)) + memo := simtypes.RandStringOfLength(r, r.Intn(101)) signMode := gen.SignModeHandler().DefaultMode() // 1st round: set SignatureV2 with empty signatures, to set correct // signer infos. for i, p := range priv { - sigs[i] = signing.SignatureV2{ + sigs[i] = sdksigning.SignatureV2{ PubKey: p.PubKey(), - Data: &signing.SingleSignatureData{ - SignMode: signMode, + Data: &sdksigning.SingleSignatureData{ + SignMode: sdksigning.SignMode(signMode), }, Sequence: accSeqs[i], } @@ -237,12 +239,13 @@ func genTxWithFeeGranter(gen client.TxConfig, msgs []sdk.Msg, feeAmt sdk.Coins, // 2nd round: once all signer infos are set, every signer can sign. for i, p := range priv { - signerData := authsign.SignerData{ + signerData := signing.SignerData{ ChainID: chainID, AccountNumber: accNums[i], Sequence: accSeqs[i], } - signBytes, err := gen.SignModeHandler().GetSignBytes(signMode, signerData, txb.GetTx()) + txData := signing.TxData{} // TODO[1760]: signing: Base this off of txb.GetTx(). + signBytes, err := gen.SignModeHandler().GetSignBytes(ctx, signMode, signerData, txData) if err != nil { panic(err) } @@ -250,7 +253,7 @@ func genTxWithFeeGranter(gen client.TxConfig, msgs []sdk.Msg, feeAmt sdk.Coins, if err != nil { panic(err) } - sigs[i].Data.(*signing.SingleSignatureData).Signature = sig + sigs[i].Data.(*sdksigning.SingleSignatureData).Signature = sig err = txb.SetSignatures(sigs...) if err != nil { panic(err) diff --git a/internal/antewrapper/provenance_fee.go b/internal/antewrapper/provenance_fee.go index db27a6e0eb..04abcfa755 100644 --- a/internal/antewrapper/provenance_fee.go +++ b/internal/antewrapper/provenance_fee.go @@ -1,7 +1,10 @@ package antewrapper import ( + "bytes" + cerrs "cosmossdk.io/errors" + sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" @@ -155,7 +158,7 @@ func GetFeePayerUsingFeeGrant(ctx sdk.Context, feegrantKeeper msgfeestypes.Feegr // if feegranter set deduct base fee from feegranter account. // this works with only when feegrant enabled. - if feeGranter != nil && !feeGranter.Equals(feePayer) { + if feeGranter != nil && !bytes.Equal(feeGranter, feePayer) { if feegrantKeeper == nil { return nil, sdkerrors.ErrInvalidRequest.Wrap("fee grants are not enabled") } @@ -183,7 +186,7 @@ func CalculateBaseFee(ctx sdk.Context, feeTx sdk.FeeTx, msgfeekeeper msgfeestype } gasWanted := feeTx.GetGas() floorPrice := msgfeekeeper.GetFloorGasPrice(ctx) - amount := floorPrice.Amount.Mul(sdk.NewIntFromUint64(gasWanted)) + amount := floorPrice.Amount.Mul(sdkmath.NewIntFromUint64(gasWanted)) baseFeeToDeduct := sdk.NewCoins(sdk.NewCoin(floorPrice.Denom, amount)) ctx.Logger().Debug("CalculateBaseFee", "gasWanted", gasWanted, diff --git a/internal/antewrapper/testutil_test.go b/internal/antewrapper/testutil_test.go index 26a66dc080..36a36bb4df 100644 --- a/internal/antewrapper/testutil_test.go +++ b/internal/antewrapper/testutil_test.go @@ -7,18 +7,14 @@ import ( "github.com/stretchr/testify/suite" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/tx" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" - sdksim "github.com/cosmos/cosmos-sdk/simapp" "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" + moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" "github.com/cosmos/cosmos-sdk/types/tx/signing" "github.com/cosmos/cosmos-sdk/x/auth/ante" xauthsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" - "github.com/cosmos/cosmos-sdk/x/auth/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" @@ -30,7 +26,7 @@ import ( // TestAccount represents an account used in the tests in x/auth/ante. type TestAccount struct { - acc types.AccountI + acc sdk.AccountI priv cryptotypes.PrivKey } @@ -53,8 +49,11 @@ func createTestApp(t *testing.T, isCheckTx bool) (*simapp.App, sdk.Context) { } else { app = simapp.Setup(t) } - ctx := app.BaseApp.NewContext(isCheckTx, tmproto.Header{}) - app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) + ctx := app.BaseApp.NewContext(isCheckTx) + err := app.AccountKeeper.Params.Set(ctx, authtypes.DefaultParams()) + if err != nil { + panic(err) + } return app, ctx } @@ -66,7 +65,7 @@ func (s *AnteTestSuite) SetupTest(isCheckTx bool) { s.ctx = s.ctx.WithBlockHeight(1) // Set up TxConfig. - encodingConfig := sdksim.MakeTestEncodingConfig() + encodingConfig := moduletestutil.MakeTestEncodingConfig() // We're using TestMsg encoding in some tests, so register it here. encodingConfig.Amino.RegisterConcrete(&testdata.TestMsg{}, "testdata.TestMsg", nil) testdata.RegisterInterfaces(encodingConfig.InterfaceRegistry) @@ -76,12 +75,12 @@ func (s *AnteTestSuite) SetupTest(isCheckTx bool) { anteHandler, err := antewrapper.NewAnteHandler( antewrapper.HandlerOptions{ - AccountKeeper: s.app.AccountKeeper, - BankKeeper: s.app.BankKeeper, - FeegrantKeeper: s.app.FeeGrantKeeper, - SignModeHandler: encodingConfig.TxConfig.SignModeHandler(), - SigGasConsumer: ante.DefaultSigVerificationGasConsumer, - MsgFeesKeeper: s.app.MsgFeesKeeper, + AccountKeeper: s.app.AccountKeeper, + BankKeeper: s.app.BankKeeper, + FeegrantKeeper: s.app.FeeGrantKeeper, + TxSigningHandlerMap: encodingConfig.TxConfig.SignModeHandler(), + SigGasConsumer: ante.DefaultSigVerificationGasConsumer, + MsgFeesKeeper: s.app.MsgFeesKeeper, }, ) @@ -124,7 +123,7 @@ func (s *AnteTestSuite) CreateTestTx(privs []cryptotypes.PrivKey, accNums []uint sigV2 := signing.SignatureV2{ PubKey: priv.PubKey(), Data: &signing.SingleSignatureData{ - SignMode: s.clientCtx.TxConfig.SignModeHandler().DefaultMode(), + // SignMode: s.clientCtx.TxConfig.SignModeHandler().DefaultMode(), // TODO[1760]: signing: same type name diff packages. Signature: nil, }, Sequence: accSeqs[i], @@ -139,21 +138,24 @@ func (s *AnteTestSuite) CreateTestTx(privs []cryptotypes.PrivKey, accNums []uint // Second round: all signer infos are set, so each signer can sign. sigsV2 = []signing.SignatureV2{} - for i, priv := range privs { - signerData := xauthsigning.SignerData{ - ChainID: chainID, - AccountNumber: accNums[i], - Sequence: accSeqs[i], - } - sigV2, err := tx.SignWithPrivKey( - s.clientCtx.TxConfig.SignModeHandler().DefaultMode(), signerData, - s.txBuilder, priv, s.clientCtx.TxConfig, accSeqs[i]) - if err != nil { - return nil, err - } + // TODO[1760]: signing: SignWithPrivKey: Uncomment these lines. + /* + for i, priv := range privs { + signerData := xauthsigning.SignerData{ + ChainID: chainID, + AccountNumber: accNums[i], + Sequence: accSeqs[i], + } + sigV2, err := tx.SignWithPrivKey( + s.clientCtx.TxConfig.SignModeHandler().DefaultMode(), signerData, + s.txBuilder, priv, s.clientCtx.TxConfig, accSeqs[i]) + if err != nil { + return nil, err + } - sigsV2 = append(sigsV2, sigV2) - } + sigsV2 = append(sigsV2, sigV2) + } + */ err = s.txBuilder.SetSignatures(sigsV2...) if err != nil { return nil, err diff --git a/internal/antewrapper/tx_gas_limit_decorator_test.go b/internal/antewrapper/tx_gas_limit_decorator_test.go index f4794091ec..dc0a088f48 100644 --- a/internal/antewrapper/tx_gas_limit_decorator_test.go +++ b/internal/antewrapper/tx_gas_limit_decorator_test.go @@ -3,15 +3,17 @@ package antewrapper_test import ( "testing" + wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/stretchr/testify/assert" - abci "github.com/tendermint/tendermint/abci/types" - wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" + cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" + + sdkmath "cosmossdk.io/math" + cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/auth/signing" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" authztypes "github.com/cosmos/cosmos-sdk/x/authz" govtypesv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" govtypesv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" @@ -116,7 +118,7 @@ func (s *AnteTestSuite) TestNoErrorWhenMaxGasIsUnlimited() { s.Require().NoError(err) // Set gas price (1 atom) - atomPrice := sdk.NewDecCoinFromDec("atom", sdk.NewDec(1)) + atomPrice := sdk.NewDecCoinFromDec("atom", sdkmath.LegacyNewDec(1)) highGasPrice := []sdk.DecCoin{atomPrice} s.ctx = s.ctx.WithMinGasPrices(highGasPrice) @@ -125,8 +127,8 @@ func (s *AnteTestSuite) TestNoErrorWhenMaxGasIsUnlimited() { //Force the !isTestContext(ctx) to be true s.ctx = s.ctx.WithChainID("mainnet") - params := &abci.ConsensusParams{ - Block: &abci.BlockParams{ + params := cmtproto.ConsensusParams{ + Block: &cmtproto.BlockParams{ MaxGas: int64(-1), }, } @@ -142,15 +144,15 @@ func (s *AnteTestSuite) TestErrorOutWhenMaxGasIsLimited() { tx, _ := createTx(s, err, sdk.NewCoins(sdk.NewInt64Coin("atom", 100000))) s.Require().NoError(err) - atomPrice := sdk.NewDecCoinFromDec("atom", sdk.NewDec(1)) + atomPrice := sdk.NewDecCoinFromDec("atom", sdkmath.LegacyNewDec(1)) highGasPrice := []sdk.DecCoin{atomPrice} s.ctx = s.ctx.WithMinGasPrices(highGasPrice) s.ctx = s.ctx.WithIsCheckTx(true) s.ctx = s.ctx.WithChainID("mainnet") - params := &abci.ConsensusParams{ - Block: &abci.BlockParams{ + params := cmtproto.ConsensusParams{ + Block: &cmtproto.BlockParams{ MaxGas: int64(60_000_000), }, } @@ -161,7 +163,7 @@ func (s *AnteTestSuite) TestErrorOutWhenMaxGasIsLimited() { s.Require().ErrorContains(err, "transaction gas exceeds maximum allowed") } -func createTx(s *AnteTestSuite, err error, feeAmount sdk.Coins) (signing.Tx, authtypes.AccountI) { +func createTx(s *AnteTestSuite, err error, feeAmount sdk.Coins) (signing.Tx, sdk.AccountI) { // keys and addresses priv1, _, addr1 := testdata.KeyTestPubAddr() acct1 := s.app.AccountKeeper.NewAccountWithAddress(s.ctx, addr1) diff --git a/internal/handlers/aggregate_events.go b/internal/handlers/aggregate_events.go index eccca48bfb..a0d61c8b57 100644 --- a/internal/handlers/aggregate_events.go +++ b/internal/handlers/aggregate_events.go @@ -1,7 +1,7 @@ package handlers import ( - abci "github.com/tendermint/tendermint/abci/types" + abci "github.com/cometbft/cometbft/abci/types" sdk "github.com/cosmos/cosmos-sdk/types" @@ -14,18 +14,18 @@ import ( // resultEvents will only be populated on success func AggregateEvents(anteEvents []abci.Event, resultEvents []abci.Event) ([]abci.Event, []abci.Event) { if len(resultEvents) == 0 { // tx failed...fix fee event to have the exact fee charged - var txFee []byte + var txFee string var feeEventIndex, feeAttributeIndex int var feeFound, minFeeFound bool for i, event := range anteEvents { if event.Type == sdk.EventTypeTx { for j, attr := range event.Attributes { - if !feeFound && string(attr.Key) == sdk.AttributeKeyFee { + if !feeFound && attr.Key == sdk.AttributeKeyFee { feeEventIndex = i feeAttributeIndex = j feeFound = true } - if !minFeeFound && string(attr.Key) == antewrapper.AttributeKeyMinFeeCharged { + if !minFeeFound && attr.Key == antewrapper.AttributeKeyMinFeeCharged { txFee = attr.Value minFeeFound = true } diff --git a/internal/handlers/aggregate_events_test.go b/internal/handlers/aggregate_events_test.go index 35b30ea850..818e8eaff7 100644 --- a/internal/handlers/aggregate_events_test.go +++ b/internal/handlers/aggregate_events_test.go @@ -4,7 +4,7 @@ import ( "testing" "github.com/stretchr/testify/assert" - abci "github.com/tendermint/tendermint/abci/types" + abci "github.com/cometbft/cometbft/abci/types" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/internal/handlers/bank_send_restriction_test.go b/internal/handlers/bank_send_restriction_test.go index b4a48a4d90..4d4b6dff2a 100644 --- a/internal/handlers/bank_send_restriction_test.go +++ b/internal/handlers/bank_send_restriction_test.go @@ -6,13 +6,13 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + abci "github.com/cometbft/cometbft/abci/types" + cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" - sdksim "github.com/cosmos/cosmos-sdk/simapp" "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" + moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" @@ -30,9 +30,9 @@ func TestBankSend(tt *testing.T) { priv2, _, addr2 := testdata.KeyTestPubAddr() priv3, _, addr3 := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr1, priv1.PubKey(), 0, 0) - acct1Balance := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(1000000000))) + acct1Balance := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 1_000_000_000)) acct2 := authtypes.NewBaseAccount(addr2, priv2.PubKey(), 1, 0) - acct2Balance := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(1000000000))) + acct2Balance := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 1_000_000_000)) acct3 := authtypes.NewBaseAccount(addr3, priv3.PubKey(), 2, 0) app := piosimapp.SetupWithGenesisAccounts(tt, "bank-restriction-testing", @@ -40,8 +40,8 @@ func TestBankSend(tt *testing.T) { banktypes.Balance{Address: addr1.String(), Coins: acct1Balance}, banktypes.Balance{Address: addr2.String(), Coins: acct2Balance}, ) - ctx := app.BaseApp.NewContext(false, tmproto.Header{ChainID: "bank-restriction-testing"}) - app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) + ctx := app.BaseApp.NewContextLegacy(false, cmtproto.Header{ChainID: "bank-restriction-testing"}) + app.AccountKeeper.Params.Set(ctx, authtypes.DefaultParams()) require.NoError(tt, app.NameKeeper.SetNameRecord(ctx, "some.kyc.provenance.io", addr1, false)) require.NoError(tt, app.AttributeKeeper.SetAttribute(ctx, attrtypes.NewAttribute("some.kyc.provenance.io", acct3.Address, attrtypes.AttributeType_Bytes, []byte{}, nil), addr1)) @@ -171,14 +171,18 @@ func TestBankSend(tt *testing.T) { } func ConstructAndSendTx(tt *testing.T, app piosimapp.App, ctx sdk.Context, acct *authtypes.BaseAccount, priv cryptotypes.PrivKey, msg sdk.Msg, expectedCode uint32, expectedError string) { - encCfg := sdksim.MakeTestEncodingConfig() + encCfg := moduletestutil.MakeTestEncodingConfig() fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(NewTestGasLimit()))) acct = app.AccountKeeper.GetAccount(ctx, acct.GetAddress()).(*authtypes.BaseAccount) txBytes, err := SignTxAndGetBytes(NewTestGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct, ctx.ChainID(), msg) require.NoError(tt, err, "SignTxAndGetBytes") - res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) - require.Equal(tt, expectedCode, res.Code, "res=%+v", res) - if len(expectedError) > 0 { - require.Contains(tt, res.Log, expectedError, "DeliverTx result.Log") - } + // TODO[1760]: finalize-block: Uncomment the rest of this func. + _ = txBytes + /* + res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) + require.Equal(tt, expectedCode, res.Code, "res=%+v", res) + if len(expectedError) > 0 { + require.Contains(tt, res.Log, expectedError, "DeliverTx result.Log") + } + */ } diff --git a/internal/handlers/msg_fee_handler.go b/internal/handlers/msg_fee_handler.go index d17ac1d139..137e5f69ca 100644 --- a/internal/handlers/msg_fee_handler.go +++ b/internal/handlers/msg_fee_handler.go @@ -2,7 +2,6 @@ package handlers import ( sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" msgfeestypes "github.com/provenance-io/provenance/x/msgfees/types" @@ -16,6 +15,8 @@ type PioBaseAppKeeperOptions struct { Decoder sdk.TxDecoder } +// TODO[1760]: fee-handler: Uncomment NewAdditionalMsgFeeHandler once the FeeHandler type is back in the SDK. +/* func NewAdditionalMsgFeeHandler(options PioBaseAppKeeperOptions) (sdk.FeeHandler, error) { if options.AccountKeeper == nil { return nil, sdkerrors.ErrLogic.Wrap("account keeper is required for AdditionalMsgFeeHandler builder") @@ -40,3 +41,4 @@ func NewAdditionalMsgFeeHandler(options PioBaseAppKeeperOptions) (sdk.FeeHandler return NewMsgFeeInvoker(options.BankKeeper, options.AccountKeeper, options.FeegrantKeeper, options.MsgFeesKeeper, options.Decoder).Invoke, nil } +*/ diff --git a/internal/handlers/msg_fee_handler_test.go b/internal/handlers/msg_fee_handler_test.go index 8fc88e35bd..034cbd1718 100644 --- a/internal/handlers/msg_fee_handler_test.go +++ b/internal/handlers/msg_fee_handler_test.go @@ -1,5 +1,7 @@ package handlers_test +// TODO[1760]: fee-handler: Uncomment these tests. +/* import ( sdk "github.com/cosmos/cosmos-sdk/types" @@ -66,5 +68,5 @@ func (s *HandlerTestSuite) TestMsgFeeHandlerSetUpIncorrect() { Decoder: nil, }) s.Require().Error(err) - } +*/ diff --git a/internal/handlers/msg_fee_invoker.go b/internal/handlers/msg_fee_invoker.go index 778e3b0bb3..a70d9c8137 100644 --- a/internal/handlers/msg_fee_invoker.go +++ b/internal/handlers/msg_fee_invoker.go @@ -3,6 +3,8 @@ package handlers import ( "fmt" + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" @@ -56,7 +58,7 @@ func (afd MsgFeeInvoker) Invoke(ctx sdk.Context, _ bool) (sdk.Coins, sdk.Events, } // eat up the gas cost for charging fees. (This one is on us, Cheers!, mainly because we don't want to fail at this step, imo, but we can remove this is f necessary) - ctx = ctx.WithGasMeter(sdk.NewInfiniteGasMeter()) + ctx = ctx.WithGasMeter(storetypes.NewInfiniteGasMeter()) consumedFees := feeGasMeter.FeeConsumed() if consumedFees.IsAnyNegative() { diff --git a/internal/handlers/msg_fee_invoker_test.go b/internal/handlers/msg_fee_invoker_test.go index 913ff5d269..568f1a031d 100644 --- a/internal/handlers/msg_fee_invoker_test.go +++ b/internal/handlers/msg_fee_invoker_test.go @@ -5,27 +5,23 @@ import ( "github.com/stretchr/testify/suite" + "cosmossdk.io/log" + storetypes "cosmossdk.io/store/types" + "cosmossdk.io/x/feegrant" + "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/tx" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" - sdksim "github.com/cosmos/cosmos-sdk/simapp" - "github.com/cosmos/cosmos-sdk/simapp/params" - sdkgas "github.com/cosmos/cosmos-sdk/store/types" "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" + moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" "github.com/cosmos/cosmos-sdk/types/tx/signing" xauthsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" "github.com/cosmos/cosmos-sdk/x/auth/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "github.com/cosmos/cosmos-sdk/x/bank/testutil" - "github.com/cosmos/cosmos-sdk/x/feegrant" - - "github.com/tendermint/tendermint/libs/log" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" simapp "github.com/provenance-io/provenance/app" "github.com/provenance-io/provenance/internal/antewrapper" - piohandlers "github.com/provenance-io/provenance/internal/handlers" "github.com/provenance-io/provenance/internal/pioconfig" msgfeetype "github.com/provenance-io/provenance/x/msgfees/types" ) @@ -44,38 +40,42 @@ func (s *HandlerTestSuite) TestMsgFeeHandlerFeeChargedNoRemainingBaseFee() { s.Require().NoError(err, "txEncoder") s.ctx = s.ctx.WithTxBytes(bz) - feeGasMeter := antewrapper.NewFeeGasMeterWrapper(log.TestingLogger(), sdkgas.NewGasMeter(100000), false).(*antewrapper.FeeGasMeter) + feeGasMeter := antewrapper.NewFeeGasMeterWrapper(log.NewTestLogger(s.T()), storetypes.NewGasMeter(100000), false).(*antewrapper.FeeGasMeter) s.Require().NotPanics(func() { msgType := sdk.MsgTypeURL(&testdata.TestMsg{}) - feeGasMeter.ConsumeFee(sdk.NewCoins(sdk.NewCoin(NHash, sdk.NewInt(1000000))), msgType, "") - feeGasMeter.ConsumeBaseFee(sdk.Coins{sdk.NewCoin("atom", sdk.NewInt(100000))}) + feeGasMeter.ConsumeFee(sdk.NewCoins(sdk.NewInt64Coin(NHash, 1_000_000)), msgType, "") + feeGasMeter.ConsumeBaseFee(sdk.Coins{sdk.NewInt64Coin("atom", 100_000)}) }, "panicked on adding fees") s.ctx = s.ctx.WithGasMeter(feeGasMeter) - feeChargeFn, err := piohandlers.NewAdditionalMsgFeeHandler(piohandlers.PioBaseAppKeeperOptions{ - AccountKeeper: s.app.AccountKeeper, - BankKeeper: s.app.BankKeeper, - FeegrantKeeper: s.app.FeeGrantKeeper, - MsgFeesKeeper: s.app.MsgFeesKeeper, - Decoder: encodingConfig.TxConfig.TxDecoder(), - }) - s.Require().NoError(err) - coins, _, err := feeChargeFn(s.ctx, false) - - s.Require().ErrorContains(err, "spendable balance 0nhash is smaller than 1000000nhash: insufficient funds", "feeChargeFn 1") - // fee gas meter has nothing to charge, so nothing should have been charged. - s.Require().True(coins.IsZero(), "coins.IsZero() 1") - - s.Require().NoError(testutil.FundAccount(s.app.BankKeeper, s.ctx, acct1.GetAddress(), sdk.NewCoins(sdk.NewCoin(NHash, sdk.NewInt(900000)))), "fund account") - coins, _, err = feeChargeFn(s.ctx, false) - s.Require().ErrorContains(err, "900000nhash is smaller than 1000000nhash: insufficient funds: insufficient funds", "feeChargeFn 2") - // fee gas meter has nothing to charge, so nothing should have been charged. - s.Require().True(coins.IsZero(), "coins.IsZero() 2") - - s.Require().NoError(testutil.FundAccount(s.app.BankKeeper, s.ctx, acct1.GetAddress(), sdk.NewCoins(sdk.NewCoin(NHash, sdk.NewInt(100000)))), "fund account again") - coins, _, err = feeChargeFn(s.ctx, false) - s.Require().NoError(err, "feeChargeFn 3") - // fee gas meter has nothing to charge, so nothing should have been charged. - s.Require().True(coins.IsAllGTE(sdk.Coins{sdk.NewCoin(NHash, sdk.NewInt(1000000))}), "coins all gt 1000000nhash") + // TODO[1760]: fee-handler: Uncomment all this once the FeeHandler type is back in the SDK. + _ = acct1 + /* + feeChargeFn, err := piohandlers.NewAdditionalMsgFeeHandler(piohandlers.PioBaseAppKeeperOptions{ + AccountKeeper: s.app.AccountKeeper, + BankKeeper: s.app.BankKeeper, + FeegrantKeeper: s.app.FeeGrantKeeper, + MsgFeesKeeper: s.app.MsgFeesKeeper, + Decoder: encodingConfig.TxConfig.TxDecoder(), + }) + s.Require().NoError(err) + coins, _, err := feeChargeFn(s.ctx, false) + + s.Require().ErrorContains(err, "spendable balance 0nhash is smaller than 1000000nhash: insufficient funds", "feeChargeFn 1") + // fee gas meter has nothing to charge, so nothing should have been charged. + s.Require().True(coins.IsZero(), "coins.IsZero() 1") + + s.Require().NoError(testutil.FundAccount(s.ctx, s.app.BankKeeper, acct1.GetAddress(), sdk.NewCoins(sdk.NewInt64Coin(NHash, 900_000))), "fund account") + coins, _, err = feeChargeFn(s.ctx, false) + s.Require().ErrorContains(err, "900000nhash is smaller than 1000000nhash: insufficient funds: insufficient funds", "feeChargeFn 2") + // fee gas meter has nothing to charge, so nothing should have been charged. + s.Require().True(coins.IsZero(), "coins.IsZero() 2") + + s.Require().NoError(testutil.FundAccount(s.ctx, s.app.BankKeeper, acct1.GetAddress(), sdk.NewCoins(sdk.NewInt64Coin(NHash, 100_000))), "fund account again") + coins, _, err = feeChargeFn(s.ctx, false) + s.Require().NoError(err, "feeChargeFn 3") + // fee gas meter has nothing to charge, so nothing should have been charged. + s.Require().True(coins.IsAllGTE(sdk.Coins{sdk.NewInt64Coin(NHash, 1_000_000)}), "coins all gt 1000000nhash") + */ } func (s *HandlerTestSuite) TestMsgFeeHandlerFeeChargedWithRemainingBaseFee() { @@ -89,35 +89,39 @@ func (s *HandlerTestSuite) TestMsgFeeHandlerFeeChargedWithRemainingBaseFee() { panic(err) } s.ctx = s.ctx.WithTxBytes(bz) - feeGasMeter := antewrapper.NewFeeGasMeterWrapper(log.TestingLogger(), sdkgas.NewGasMeter(100000), false).(*antewrapper.FeeGasMeter) + feeGasMeter := antewrapper.NewFeeGasMeterWrapper(log.NewTestLogger(s.T()), storetypes.NewGasMeter(100000), false).(*antewrapper.FeeGasMeter) s.Require().NotPanics(func() { msgType := sdk.MsgTypeURL(&testdata.TestMsg{}) - feeGasMeter.ConsumeFee(sdk.NewCoins(sdk.NewCoin(NHash, sdk.NewInt(1000000))), msgType, "") - feeGasMeter.ConsumeBaseFee(sdk.Coins{sdk.NewCoin("atom", sdk.NewInt(100000))}) // fee consumed at ante handler + feeGasMeter.ConsumeFee(sdk.NewCoins(sdk.NewInt64Coin(NHash, 1_000_000)), msgType, "") + feeGasMeter.ConsumeBaseFee(sdk.Coins{sdk.NewInt64Coin("atom", 100_000)}) // fee consumed at ante handler }, "panicked on adding fees") s.ctx = s.ctx.WithGasMeter(feeGasMeter) - feeChargeFn, err := piohandlers.NewAdditionalMsgFeeHandler(piohandlers.PioBaseAppKeeperOptions{ - AccountKeeper: s.app.AccountKeeper, - BankKeeper: s.app.BankKeeper, - FeegrantKeeper: s.app.FeeGrantKeeper, - MsgFeesKeeper: s.app.MsgFeesKeeper, - Decoder: encodingConfig.TxConfig.TxDecoder(), - }) - s.Require().NoError(err, "NewAdditionalMsgFeeHandler") - - s.Require().NoError(testutil.FundAccount(s.app.BankKeeper, s.ctx, acct1.GetAddress(), sdk.NewCoins(sdk.NewCoin(NHash, sdk.NewInt(1000000)))), "funding account") - coins, _, err := feeChargeFn(s.ctx, false) - s.Require().ErrorContains(err, "spendable balance 0atom is smaller than 20000atom: insufficient funds", "feeChargeFn 1") - // fee gas meter has nothing to charge, so nothing should have been charged. - s.Require().True(coins.IsZero(), "coins.IsZero() 1") - - s.Require().NoError(testutil.FundAccount(s.app.BankKeeper, s.ctx, acct1.GetAddress(), sdk.NewCoins(sdk.NewInt64Coin("atom", 20000), sdk.NewInt64Coin(NHash, 1000000))), "funding account again") - coins, _, err = feeChargeFn(s.ctx, false) - s.Require().Nil(err, "Got error when should have successfully paid all msg fees and swept remaining base fees") - s.Require().True(coins.IsEqual(sdk.Coins{sdk.NewInt64Coin(NHash, 1000000), sdk.NewInt64Coin("atom", 20000)})) - s.Require().NoError(err, "feeChargeFn 2") - expected := sdk.Coins{sdk.NewInt64Coin("atom", 20000), sdk.NewInt64Coin(NHash, 1000000)} - s.Require().Equal(expected, coins, "final coins") + // TODO[1760]: fee-handler: Uncomment all this once the FeeHandler type is back in the SDK. + _ = acct1 + /* + feeChargeFn, err := piohandlers.NewAdditionalMsgFeeHandler(piohandlers.PioBaseAppKeeperOptions{ + AccountKeeper: s.app.AccountKeeper, + BankKeeper: s.app.BankKeeper, + FeegrantKeeper: s.app.FeeGrantKeeper, + MsgFeesKeeper: s.app.MsgFeesKeeper, + Decoder: encodingConfig.TxConfig.TxDecoder(), + }) + s.Require().NoError(err, "NewAdditionalMsgFeeHandler") + + s.Require().NoError(testutil.FundAccount(s.ctx, s.app.BankKeeper, acct1.GetAddress(), sdk.NewCoins(sdk.NewInt64Coin(NHash, 1_000_000))), "funding account") + coins, _, err := feeChargeFn(s.ctx, false) + s.Require().ErrorContains(err, "spendable balance 0atom is smaller than 20000atom: insufficient funds", "feeChargeFn 1") + // fee gas meter has nothing to charge, so nothing should have been charged. + s.Require().True(coins.IsZero(), "coins.IsZero() 1") + + s.Require().NoError(testutil.FundAccount(s.ctx, s.app.BankKeeper, acct1.GetAddress(), sdk.NewCoins(sdk.NewInt64Coin("atom", 20000), sdk.NewInt64Coin(NHash, 1000000))), "funding account again") + coins, _, err = feeChargeFn(s.ctx, false) + s.Require().Nil(err, "Got error when should have successfully paid all msg fees and swept remaining base fees") + s.Require().True(coins.Equal(sdk.Coins{sdk.NewInt64Coin(NHash, 1000000), sdk.NewInt64Coin("atom", 20000)})) + s.Require().NoError(err, "feeChargeFn 2") + expected := sdk.Coins{sdk.NewInt64Coin("atom", 20000), sdk.NewInt64Coin(NHash, 1000000)} + s.Require().Equal(expected, coins, "final coins") + */ } func (s *HandlerTestSuite) TestMsgFeeHandlerFeeChargedFeeGranter() { @@ -131,25 +135,28 @@ func (s *HandlerTestSuite) TestMsgFeeHandlerFeeChargedFeeGranter() { panic(err) } s.ctx = s.ctx.WithTxBytes(bz) - feeGasMeter := antewrapper.NewFeeGasMeterWrapper(log.TestingLogger(), sdkgas.NewGasMeter(100000), false).(*antewrapper.FeeGasMeter) + feeGasMeter := antewrapper.NewFeeGasMeterWrapper(log.NewTestLogger(s.T()), storetypes.NewGasMeter(100000), false).(*antewrapper.FeeGasMeter) s.Require().NotPanics(func() { msgType := sdk.MsgTypeURL(&testdata.TestMsg{}) - feeGasMeter.ConsumeFee(sdk.NewCoins(sdk.NewCoin(NHash, sdk.NewInt(1000000))), msgType, "") - feeGasMeter.ConsumeBaseFee(sdk.Coins{sdk.NewCoin("atom", sdk.NewInt(100000))}) + feeGasMeter.ConsumeFee(sdk.NewCoins(sdk.NewInt64Coin(NHash, 1_000_000)), msgType, "") + feeGasMeter.ConsumeBaseFee(sdk.Coins{sdk.NewInt64Coin("atom", 100_000)}) }, "panicked on adding fees") s.ctx = s.ctx.WithGasMeter(feeGasMeter) - feeChargeFn, err := piohandlers.NewAdditionalMsgFeeHandler(piohandlers.PioBaseAppKeeperOptions{ - AccountKeeper: s.app.AccountKeeper, - BankKeeper: s.app.BankKeeper, - FeegrantKeeper: s.app.FeeGrantKeeper, - MsgFeesKeeper: s.app.MsgFeesKeeper, - Decoder: encodingConfig.TxConfig.TxDecoder(), - }) - - coins, _, err := feeChargeFn(s.ctx, false) - s.Require().Nil(err, "Got error when should not have.") - // fee gas meter has nothing to charge, so nothing should have been charged. - s.Require().True(coins.IsAllGTE(sdk.Coins{sdk.NewCoin(NHash, sdk.NewInt(1000000))})) + // TODO[1760]: fee-handler: Uncomment all this once the FeeHandler type is back in the SDK. + /* + feeChargeFn, err := piohandlers.NewAdditionalMsgFeeHandler(piohandlers.PioBaseAppKeeperOptions{ + AccountKeeper: s.app.AccountKeeper, + BankKeeper: s.app.BankKeeper, + FeegrantKeeper: s.app.FeeGrantKeeper, + MsgFeesKeeper: s.app.MsgFeesKeeper, + Decoder: encodingConfig.TxConfig.TxDecoder(), + }) + + coins, _, err := feeChargeFn(s.ctx, false) + s.Require().Nil(err, "Got error when should not have.") + // fee gas meter has nothing to charge, so nothing should have been charged. + s.Require().True(coins.IsAllGTE(sdk.Coins{sdk.NewInt64Coin(NHash, 1000000)})) + */ } func (s *HandlerTestSuite) TestMsgFeeHandlerBadDecoder() { @@ -163,20 +170,23 @@ func (s *HandlerTestSuite) TestMsgFeeHandlerBadDecoder() { panic(err) } s.ctx = s.ctx.WithTxBytes(bz) - feeGasMeter := antewrapper.NewFeeGasMeterWrapper(log.TestingLogger(), sdkgas.NewGasMeter(100), false).(*antewrapper.FeeGasMeter) + feeGasMeter := antewrapper.NewFeeGasMeterWrapper(log.NewTestLogger(s.T()), storetypes.NewGasMeter(100), false).(*antewrapper.FeeGasMeter) s.ctx = s.ctx.WithGasMeter(feeGasMeter) - feeChargeFn, err := piohandlers.NewAdditionalMsgFeeHandler(piohandlers.PioBaseAppKeeperOptions{ - AccountKeeper: s.app.AccountKeeper, - BankKeeper: s.app.BankKeeper, - FeegrantKeeper: s.app.FeeGrantKeeper, - MsgFeesKeeper: s.app.MsgFeesKeeper, - Decoder: sdksim.MakeTestEncodingConfig().TxConfig.TxDecoder(), - }) - s.Require().NoError(err) - s.Require().Panics(func() { feeChargeFn(s.ctx, false) }, "Bad decoder while setting up app.") + // TODO[1760]: fee-handler: Uncomment all this once the FeeHandler type is back in the SDK. + /* + feeChargeFn, err := piohandlers.NewAdditionalMsgFeeHandler(piohandlers.PioBaseAppKeeperOptions{ + AccountKeeper: s.app.AccountKeeper, + BankKeeper: s.app.BankKeeper, + FeegrantKeeper: s.app.FeeGrantKeeper, + MsgFeesKeeper: s.app.MsgFeesKeeper, + Decoder: moduletestutil.MakeTestEncodingConfig().TxConfig.TxDecoder(), + }) + s.Require().NoError(err) + s.Require().Panics(func() { feeChargeFn(s.ctx, false) }, "Bad decoder while setting up app.") + */ } -func setUpApp(s *HandlerTestSuite, additionalFeeCoinDenom string, additionalFeeCoinAmt int64) (params.EncodingConfig, error) { +func setUpApp(s *HandlerTestSuite, additionalFeeCoinDenom string, additionalFeeCoinAmt int64) (moduletestutil.TestEncodingConfig, error) { pioconfig.SetProvenanceConfig("", 0) encodingConfig := s.SetupTest(s.T()) // setup s.txBuilder = s.clientCtx.TxConfig.NewTxBuilder() @@ -192,8 +202,8 @@ func setUpApp(s *HandlerTestSuite, additionalFeeCoinDenom string, additionalFeeC // returns context and app with params set on account keeper func createTestApp(t *testing.T) (*simapp.App, sdk.Context) { app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) - app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) + ctx := app.BaseApp.NewContext(false) + app.AccountKeeper.Params.Set(ctx, authtypes.DefaultParams()) return app, ctx } @@ -244,7 +254,7 @@ func createTestTxWithFeeGrant(s *HandlerTestSuite, err error, feeAmount sdk.Coin }) s.txBuilder.SetFeeGranter(acct2.GetAddress()) - s.Require().NoError(testutil.FundAccount(s.app.BankKeeper, s.ctx, acct2.GetAddress(), sdk.NewCoins(sdk.NewCoin(NHash, sdk.NewInt(1000000)))), "funding account") + s.Require().NoError(testutil.FundAccount(s.ctx, s.app.BankKeeper, acct2.GetAddress(), sdk.NewCoins(sdk.NewInt64Coin(NHash, 1_000_000))), "funding account") testTx, err := s.CreateTestTx(privs, accNums, accSeqs, s.ctx.ChainID()) s.Require().NoError(err, "CreateTestTx") @@ -252,12 +262,12 @@ func createTestTxWithFeeGrant(s *HandlerTestSuite, err error, feeAmount sdk.Coin } // SetupTest setups a new test, with new app, context, and anteHandler. -func (s *HandlerTestSuite) SetupTest(t *testing.T) params.EncodingConfig { +func (s *HandlerTestSuite) SetupTest(t *testing.T) moduletestutil.TestEncodingConfig { s.app, s.ctx = createTestApp(t) s.ctx = s.ctx.WithBlockHeight(1) // Set up TxConfig. - encodingConfig := sdksim.MakeTestEncodingConfig() + encodingConfig := moduletestutil.MakeTestEncodingConfig() // We're using TestMsg encoding in some tests, so register it here. encodingConfig.Amino.RegisterConcrete(&testdata.TestMsg{}, "testdata.TestMsg", nil) testdata.RegisterInterfaces(encodingConfig.InterfaceRegistry) @@ -287,7 +297,7 @@ func (s *HandlerTestSuite) CreateTestTx(privs []cryptotypes.PrivKey, accNums []u sigV2 := signing.SignatureV2{ PubKey: priv.PubKey(), Data: &signing.SingleSignatureData{ - SignMode: s.clientCtx.TxConfig.SignModeHandler().DefaultMode(), + // SignMode: s.clientCtx.TxConfig.SignModeHandler().DefaultMode(), // TODO[1760]: signing: same type name diff packages. Signature: nil, }, Sequence: accSeqs[i], @@ -302,21 +312,24 @@ func (s *HandlerTestSuite) CreateTestTx(privs []cryptotypes.PrivKey, accNums []u // Second round: all signer infos are set, so each signer can sign. sigsV2 = []signing.SignatureV2{} - for i, priv := range privs { - signerData := xauthsigning.SignerData{ - ChainID: chainID, - AccountNumber: accNums[i], - Sequence: accSeqs[i], - } - sigV2, err := tx.SignWithPrivKey( - s.clientCtx.TxConfig.SignModeHandler().DefaultMode(), signerData, - s.txBuilder, priv, s.clientCtx.TxConfig, accSeqs[i]) - if err != nil { - return nil, err + // TODO[1760]: signing: SignWithPrivKey: Uncomment these lines. + /* + for i, priv := range privs { + signerData := xauthsigning.SignerData{ + ChainID: chainID, + AccountNumber: accNums[i], + Sequence: accSeqs[i], + } + sigV2, err := tx.SignWithPrivKey( + s.clientCtx.TxConfig.SignModeHandler().DefaultMode(), signerData, + s.txBuilder, priv, s.clientCtx.TxConfig, accSeqs[i]) + if err != nil { + return nil, err + } + + sigsV2 = append(sigsV2, sigV2) } - - sigsV2 = append(sigsV2, sigV2) - } + */ err = s.txBuilder.SetSignatures(sigsV2...) if err != nil { return nil, err diff --git a/internal/handlers/msg_service_router.go b/internal/handlers/msg_service_router.go index 2b830bf309..88628e3629 100644 --- a/internal/handlers/msg_service_router.go +++ b/internal/handlers/msg_service_router.go @@ -16,6 +16,7 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/provenance-io/provenance/internal/antewrapper" + "github.com/provenance-io/provenance/internal/helpers" msgfeeskeeper "github.com/provenance-io/provenance/x/msgfees/keeper" ) @@ -29,7 +30,9 @@ type PioMsgServiceRouter struct { } var _ gogogrpc.Server = &PioMsgServiceRouter{} -var _ baseapp.IMsgServiceRouter = &PioMsgServiceRouter{} + +// TODO[1760]: msg-service-router: Make sure any fixes in the SDK's MsgServiceRouter are also considered with our PioMsgServiceRouter. +// var _ baseapp.IMsgServiceRouter = &PioMsgServiceRouter{} // TODO[1760]: msg-service-router // NewPioMsgServiceRouter creates a new PioMsgServiceRouter. func NewPioMsgServiceRouter(decoder sdk.TxDecoder) *PioMsgServiceRouter { @@ -140,7 +143,7 @@ func (msr *PioMsgServiceRouter) RegisterService(sd *grpc.ServiceDesc, handler in return handler(goCtx, req) } - if err = req.ValidateBasic(); err != nil { + if err = helpers.ValidateBasic(req); err != nil { return nil, err } diff --git a/internal/handlers/msg_service_router_test.go b/internal/handlers/msg_service_router_test.go index 3809ae35d9..ac8b614316 100644 --- a/internal/handlers/msg_service_router_test.go +++ b/internal/handlers/msg_service_router_test.go @@ -1,38 +1,34 @@ package handlers_test import ( - "bytes" "fmt" - "os" "strings" "testing" "time" - "github.com/golang/protobuf/proto" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" - "github.com/tendermint/tendermint/libs/log" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - tmtypes "github.com/tendermint/tendermint/types" - dbm "github.com/tendermint/tm-db" + abci "github.com/cometbft/cometbft/abci/types" + cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" + cmttypes "github.com/cometbft/cometbft/types" + "cosmossdk.io/log" + sdkmath "cosmossdk.io/math" + + dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/tx" cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" - sdksim "github.com/cosmos/cosmos-sdk/simapp" - simappparams "github.com/cosmos/cosmos-sdk/simapp/params" "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" + moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" "github.com/cosmos/cosmos-sdk/types/tx/signing" - authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - authztypes "github.com/cosmos/cosmos-sdk/x/authz" "github.com/cosmos/cosmos-sdk/x/bank/testutil" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + govtypesv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" govtypesv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" @@ -110,7 +106,7 @@ func eventAttributesHasSubset(eventAttributes, subset []abci.EventAttribute) boo SubsetLoop: for _, sattr := range subset { for _, eattr := range eventAttributes { - if bytes.Equal(sattr.Key, eattr.Key) && bytes.Equal(sattr.Value, eattr.Value) { + if sattr.Key == eattr.Key && sattr.Value == eattr.Value { continue SubsetLoop } } @@ -148,8 +144,8 @@ func NewEvent(ty string, attrs ...abci.EventAttribute) abci.Event { func NewAttribute(key, value string) abci.EventAttribute { return abci.EventAttribute{ - Key: []byte(key), - Value: []byte(value), + Key: key, + Value: value, } } @@ -166,15 +162,24 @@ func jsonArrayJoin(entries ...string) string { return "[" + strings.Join(entries, ",") + "]" } +func getLastProposal(t *testing.T, ctx sdk.Context, app *piosimapp.App) *govtypesv1.Proposal { + var rv *govtypesv1.Proposal + // TODO: proposals: Figure out how to get the most recent proposal. + // Propbably involves app.GovKeeper.Proposals.Walk(...). + require.NotNil(t, rv, "no gov props found") + return nil +} + func TestRegisterMsgService(t *testing.T) { db := dbm.NewMemDB() // Create an encoding config that doesn't register testdata Msg services. - encCfg := sdksim.MakeTestEncodingConfig() - app := baseapp.NewBaseApp("test", log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, encCfg.TxConfig.TxDecoder()) + encCfg := moduletestutil.MakeTestEncodingConfig() + log.NewTestLogger(t) + app := baseapp.NewBaseApp("test", log.NewTestLogger(t), db, encCfg.TxConfig.TxDecoder()) router := handlers.NewPioMsgServiceRouter(encCfg.TxConfig.TxDecoder()) router.SetInterfaceRegistry(encCfg.InterfaceRegistry) - app.SetMsgServiceRouter(router) + // app.SetMsgServiceRouter(router) // TODO[1760]: msg-service-router require.Panics(t, func() { testdata.RegisterMsgServer( app.MsgServiceRouter(), @@ -195,11 +200,11 @@ func TestRegisterMsgService(t *testing.T) { func TestRegisterMsgServiceTwice(t *testing.T) { // Setup baseapp. db := dbm.NewMemDB() - encCfg := sdksim.MakeTestEncodingConfig() - app := baseapp.NewBaseApp("test", log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, encCfg.TxConfig.TxDecoder()) + encCfg := moduletestutil.MakeTestEncodingConfig() + app := baseapp.NewBaseApp("test", log.NewTestLogger(t), db, encCfg.TxConfig.TxDecoder()) router := handlers.NewPioMsgServiceRouter(encCfg.TxConfig.TxDecoder()) router.SetInterfaceRegistry(encCfg.InterfaceRegistry) - app.SetMsgServiceRouter(router) + // app.SetMsgServiceRouter(router) // TODO[1760]: msg-service-router testdata.RegisterInterfaces(encCfg.InterfaceRegistry) // First time registering service shouldn't panic. @@ -220,7 +225,7 @@ func TestRegisterMsgServiceTwice(t *testing.T) { } func TestFailedTx(tt *testing.T) { - encCfg := sdksim.MakeTestEncodingConfig() + encCfg := moduletestutil.MakeTestEncodingConfig() pioconfig.SetProvenanceConfig(sdk.DefaultBondDenom, 1) // will create a gas fee of 1stake * gas priv, _, addr1 := testdata.KeyTestPubAddr() _, _, addr2 := testdata.KeyTestPubAddr() @@ -230,8 +235,8 @@ func TestFailedTx(tt *testing.T) { []authtypes.GenesisAccount{acct1}, banktypes.Balance{Address: addr1.String(), Coins: acct1Balance}, ) - ctx := app.BaseApp.NewContext(false, tmproto.Header{ChainID: "msgfee-testing"}) - app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) + ctx := app.BaseApp.NewContextLegacy(false, cmtproto.Header{ChainID: "msgfee-testing"}) + require.NoError(tt, app.AccountKeeper.Params.Set(ctx, authtypes.DefaultParams()), "Setting default account params") feeModuleAccount := app.AccountKeeper.GetModuleAccount(ctx, authtypes.FeeCollectorName) gasFeesString := fmt.Sprintf("%v%s", (NewTestGasLimit()), sdk.DefaultBondDenom) @@ -243,13 +248,17 @@ func TestFailedTx(tt *testing.T) { stopIfFailed(tt) tt.Run("no msg-based fee", func(t *testing.T) { - msg := banktypes.NewMsgSend(addr1, addr2, sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(2)))) - fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(NewTestGasLimit()))) - txBytes, err := SignTxAndGetBytes(NewTestGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) - require.NoError(t, err, "SignTxAndGetBytes") - res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) - t.Logf("Events:\n%s\n", eventsString(res.Events, true)) - assert.Equal(t, 5, int(res.Code), "res=%+v", res) + // TODO[1760]: finalize-block: Uncomment these lines. + _ = encCfg + /* + msg := banktypes.NewMsgSend(addr1, addr2, sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 2))) + fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(NewTestGasLimit()))) + txBytes, err := SignTxAndGetBytes(NewTestGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) + require.NoError(t, err, "SignTxAndGetBytes") + res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) + t.Logf("Events:\n%s\n", eventsString(res.Events, true)) + assert.Equal(t, 5, int(res.Code), "res=%+v", res) + */ // Check both account balances after transaction // the 150000stake should have been deducted from account 1, and the send should have failed. @@ -270,25 +279,28 @@ func TestFailedTx(tt *testing.T) { } expEvents = append(expEvents, CreateSendCoinEvents(addr1.String(), feeModuleAccount.GetAddress().String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 150000)))...) - assertEventsContains(t, res.Events, expEvents) + // assertEventsContains(t, res.Events, expEvents) // TODO[1760]: finalize-block }) // Give acct1 150000stake back. - require.NoError(tt, testutil.FundAccount(app.BankKeeper, ctx, acct1.GetAddress(), + require.NoError(tt, testutil.FundAccount(ctx, app.BankKeeper, acct1.GetAddress(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(NewTestGasLimit())))), fmt.Sprintf("funding acct1 with %s", gasFeesString)) tt.Run("10stake fee associated with msg type", func(t *testing.T) { - msg := banktypes.NewMsgSend(addr1, addr2, sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(2)))) + msg := banktypes.NewMsgSend(addr1, addr2, sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 2))) msgbasedFee := msgfeestypes.NewMsgFee(sdk.MsgTypeURL(msg), sdk.NewInt64Coin(sdk.DefaultBondDenom, 10), "", 0) require.NoError(t, app.MsgFeesKeeper.SetMsgFee(ctx, msgbasedFee), "setting fee 10stake") - fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(NewTestGasLimit())+10)) acct1 = app.AccountKeeper.GetAccount(ctx, acct1.GetAddress()).(*authtypes.BaseAccount) - txBytes, err := SignTxAndGetBytes(NewTestGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) - require.NoError(t, err, "SignTxAndGetBytes") - res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) - t.Logf("Events:\n%s\n", eventsString(res.Events, true)) - assert.Equal(t, 5, int(res.Code), "res=%+v", res) + // TODO[1760]: finalize-block: Uncomment these lines. + /* + fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(NewTestGasLimit())+10)) + txBytes, err := SignTxAndGetBytes(NewTestGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) + require.NoError(t, err, "SignTxAndGetBytes") + res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) + t.Logf("Events:\n%s\n", eventsString(res.Events, true)) + assert.Equal(t, 5, int(res.Code), "res=%+v", res) + */ // Check both account balances after transaction // the 150000 should have been deducted from account 1, and the send should have failed. @@ -309,23 +321,23 @@ func TestFailedTx(tt *testing.T) { } expEvents = append(expEvents, CreateSendCoinEvents(addr1.String(), feeModuleAccount.GetAddress().String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(NewTestGasLimit()))))...) - assertEventsContains(t, res.Events, expEvents) + // assertEventsContains(t, res.Events, expEvents) // TODO[1760]: finalize-block }) } func TestMsgService(tt *testing.T) { pioconfig.SetProvenanceConfig(sdk.DefaultBondDenom, 1) // set denom as stake and floor gas price as 1 stake. - encCfg := sdksim.MakeTestEncodingConfig() + encCfg := moduletestutil.MakeTestEncodingConfig() priv, _, addr1 := testdata.KeyTestPubAddr() _, _, addr2 := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr1, priv.PubKey(), 0, 0) - acct1Balance := sdk.NewCoins(sdk.NewCoin("hotdog", sdk.NewInt(1000)), sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(600500))) + acct1Balance := sdk.NewCoins(sdk.NewInt64Coin("hotdog", 1000), sdk.NewInt64Coin(sdk.DefaultBondDenom, 600_500)) app := piosimapp.SetupWithGenesisAccounts(tt, "msgfee-testing", []authtypes.GenesisAccount{acct1}, banktypes.Balance{Address: addr1.String(), Coins: acct1Balance}, ) - ctx := app.BaseApp.NewContext(false, tmproto.Header{ChainID: "msgfee-testing"}) - app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) + ctx := app.BaseApp.NewContextLegacy(false, cmtproto.Header{ChainID: "msgfee-testing"}) + require.NoError(tt, app.AccountKeeper.Params.Set(ctx, authtypes.DefaultParams()), "Setting default account params") feeModuleAccount := app.AccountKeeper.GetModuleAccount(ctx, authtypes.FeeCollectorName) gasFeesString := fmt.Sprintf("%v%s", (NewTestGasLimit()), sdk.DefaultBondDenom) @@ -340,14 +352,18 @@ func TestMsgService(tt *testing.T) { // Sending 100hotdog with fees of 150000stake. // account 1 will lose 100hotdog,150000stake // account 2 will gain 100hotdog - msg := banktypes.NewMsgSend(addr1, addr2, sdk.NewCoins(sdk.NewCoin("hotdog", sdk.NewInt(100)))) - fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 150000)) - txBytes, err := SignTxAndGetBytes(NewTestGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) - require.NoError(t, err, "SignTxAndGetBytes") - res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) - t.Logf("Events:\n%s\n", eventsString(res.Events, true)) - require.Equal(t, abci.CodeTypeOK, res.Code, "res=%+v", res) + // TODO[1760]: finalize-block: Uncomment these lines. + _ = encCfg + /* + msg := banktypes.NewMsgSend(addr1, addr2, sdk.NewCoins(sdk.NewInt64Coin("hotdog", 100))) + fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 150000)) + txBytes, err := SignTxAndGetBytes(NewTestGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) + require.NoError(t, err, "SignTxAndGetBytes") + res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) + t.Logf("Events:\n%s\n", eventsString(res.Events, true)) + require.Equal(t, abci.CodeTypeOK, res.Code, "res=%+v", res) + */ // Check both account balances after transaction addr1AfterBalance := app.BankKeeper.GetAllBalances(ctx, addr1).String() @@ -367,7 +383,7 @@ func TestMsgService(tt *testing.T) { // fee charge in antehandler expEvents = append(expEvents, CreateSendCoinEvents(addr1.String(), feeModuleAccount.GetAddress().String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(NewTestGasLimit()))))...) - assertEventsContains(t, res.Events, expEvents) + // assertEventsContains(t, res.Events, expEvents) // TODO[1760]: finalize-block }) tt.Run("800hotdog fee associated with msg type", func(t *testing.T) { @@ -375,16 +391,19 @@ func TestMsgService(tt *testing.T) { // The send message will have a fee of 800hotdog. // account 1 will lose 100100stake,800hotdog. // account 2 will gain 50hotdog. - msg := banktypes.NewMsgSend(addr1, addr2, sdk.NewCoins(sdk.NewCoin("hotdog", sdk.NewInt(50)))) - fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(NewTestGasLimit())+100), sdk.NewInt64Coin("hotdog", 800)) - msgbasedFee := msgfeestypes.NewMsgFee(sdk.MsgTypeURL(msg), sdk.NewCoin("hotdog", sdk.NewInt(800)), "", 0) + msg := banktypes.NewMsgSend(addr1, addr2, sdk.NewCoins(sdk.NewInt64Coin("hotdog", 50))) + msgbasedFee := msgfeestypes.NewMsgFee(sdk.MsgTypeURL(msg), sdk.NewInt64Coin("hotdog", 800), "", 0) require.NoError(t, app.MsgFeesKeeper.SetMsgFee(ctx, msgbasedFee), "setting fee 800hotdog") acct1 = app.AccountKeeper.GetAccount(ctx, acct1.GetAddress()).(*authtypes.BaseAccount) - txBytes, err := SignTxAndGetBytes(NewTestGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) - require.NoError(t, err, "SignTxAndGetBytes") - res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) - t.Logf("Events:\n%s\n", eventsString(res.Events, true)) - require.Equal(t, abci.CodeTypeOK, res.Code, "res=%+v", res) + // TODO[1760]: finalize-block: Uncomment these lines. + /* + fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(NewTestGasLimit())+100), sdk.NewInt64Coin("hotdog", 800)) + txBytes, err := SignTxAndGetBytes(NewTestGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) + require.NoError(t, err, "SignTxAndGetBytes") + res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) + t.Logf("Events:\n%s\n", eventsString(res.Events, true)) + require.Equal(t, abci.CodeTypeOK, res.Code, "res=%+v", res) + */ addr1AfterBalance := app.BankKeeper.GetAllBalances(ctx, addr1).String() addr2AfterBalance := app.BankKeeper.GetAllBalances(ctx, addr2).String() @@ -412,21 +431,24 @@ func TestMsgService(tt *testing.T) { // swept fee amount expEvents = append(expEvents, CreateSendCoinEvents(addr1.String(), feeModuleAccount.GetAddress().String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 100)))...) - assertEventsContains(t, res.Events, expEvents) + // assertEventsContains(t, res.Events, expEvents) // TODO[1760]: finalize-block }) tt.Run("10stake fee associated with msg type", func(t *testing.T) { - msg := banktypes.NewMsgSend(addr1, addr2, sdk.NewCoins(sdk.NewCoin("hotdog", sdk.NewInt(50)))) + msg := banktypes.NewMsgSend(addr1, addr2, sdk.NewCoins(sdk.NewInt64Coin("hotdog", 50))) msgbasedFee := msgfeestypes.NewMsgFee(sdk.MsgTypeURL(msg), sdk.NewInt64Coin(sdk.DefaultBondDenom, 10), "", 0) require.NoError(t, app.MsgFeesKeeper.SetMsgFee(ctx, msgbasedFee), "setting fee 10stake") - fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(NewTestGasLimit())+111)) acct1 = app.AccountKeeper.GetAccount(ctx, acct1.GetAddress()).(*authtypes.BaseAccount) - txBytes, err := SignTxAndGetBytes(NewTestGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) - require.NoError(t, err, "SignTxAndGetBytes") - res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) - t.Logf("Events:\n%s\n", eventsString(res.Events, true)) - require.Equal(t, abci.CodeTypeOK, res.Code, "res=%+v", res) + // TODO[1760]: finalize-block: Uncomment these lines. + /* + fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(NewTestGasLimit())+111)) + txBytes, err := SignTxAndGetBytes(NewTestGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) + require.NoError(t, err, "SignTxAndGetBytes") + res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) + t.Logf("Events:\n%s\n", eventsString(res.Events, true)) + require.Equal(t, abci.CodeTypeOK, res.Code, "res=%+v", res) + */ addr1AfterBalance := app.BankKeeper.GetAllBalances(ctx, addr1).String() addr2AfterBalance := app.BankKeeper.GetAllBalances(ctx, addr2).String() @@ -454,24 +476,24 @@ func TestMsgService(tt *testing.T) { // swept fee amount expEvents = append(expEvents, CreateSendCoinEvents(addr1.String(), feeModuleAccount.GetAddress().String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 101)))...) - assertEventsContains(t, res.Events, expEvents) + // assertEventsContains(t, res.Events, expEvents) // TODO[1760]: finalize-block }) } func TestMsgServiceMsgFeeWithRecipient(t *testing.T) { pioconfig.SetProvenanceConfig(sdk.DefaultBondDenom, 1) - encCfg := sdksim.MakeTestEncodingConfig() + encCfg := moduletestutil.MakeTestEncodingConfig() priv, _, addr1 := testdata.KeyTestPubAddr() _, _, addr2 := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr1, priv.PubKey(), 0, 0) gasAmt := NewTestGasLimit() + 20_000 - acct1Balance := sdk.NewCoins(sdk.NewCoin("hotdog", sdk.NewInt(1_000)), sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(gasAmt))) + acct1Balance := sdk.NewCoins(sdk.NewInt64Coin("hotdog", 1_000), sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(gasAmt))) app := piosimapp.SetupWithGenesisAccounts(t, "msgfee-testing", []authtypes.GenesisAccount{acct1}, banktypes.Balance{Address: addr1.String(), Coins: acct1Balance}, ) - ctx := app.BaseApp.NewContext(false, tmproto.Header{ChainID: "msgfee-testing"}) - app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) + ctx := app.BaseApp.NewContextLegacy(false, cmtproto.Header{ChainID: "msgfee-testing"}) + require.NoError(t, app.AccountKeeper.Params.Set(ctx, authtypes.DefaultParams()), "Setting default account params") feeModuleAccount := app.AccountKeeper.GetModuleAccount(ctx, authtypes.FeeCollectorName) // Check both account balances before transaction @@ -483,15 +505,19 @@ func TestMsgServiceMsgFeeWithRecipient(t *testing.T) { // Sending 100hotdog coin from 1 to 2. // Will have a msg fee of 800hotdog, 600 will go to 2, 200 to module. - msg := banktypes.NewMsgSend(addr1, addr2, sdk.NewCoins(sdk.NewCoin("hotdog", sdk.NewInt(100)))) - fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(gasAmt)), sdk.NewInt64Coin("hotdog", 800)) - msgbasedFee := msgfeestypes.NewMsgFee(sdk.MsgTypeURL(msg), sdk.NewCoin("hotdog", sdk.NewInt(800)), addr2.String(), 7_500) + msg := banktypes.NewMsgSend(addr1, addr2, sdk.NewCoins(sdk.NewInt64Coin("hotdog", 100))) + msgbasedFee := msgfeestypes.NewMsgFee(sdk.MsgTypeURL(msg), sdk.NewInt64Coin("hotdog", 800), addr2.String(), 7_500) require.NoError(t, app.MsgFeesKeeper.SetMsgFee(ctx, msgbasedFee), "setting fee 800hotdog addr2 75%") - txBytes, err := SignTxAndGetBytes(gasAmt, fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) - require.NoError(t, err, "SignTxAndGetBytes") - res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) - require.Equal(t, abci.CodeTypeOK, res.Code, "res=%+v", res) + // TODO[1760]: finalize-block: Uncomment these lines. + _ = encCfg + /* + fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(gasAmt)), sdk.NewInt64Coin("hotdog", 800)) + txBytes, err := SignTxAndGetBytes(gasAmt, fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) + require.NoError(t, err, "SignTxAndGetBytes") + res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) + require.Equal(t, abci.CodeTypeOK, res.Code, "res=%+v", res) + */ // Check both account balances after transaction addr1AfterBalance := app.BankKeeper.GetAllBalances(ctx, addr1).String() @@ -520,26 +546,26 @@ func TestMsgServiceMsgFeeWithRecipient(t *testing.T) { // fee charged for msg based fee expEvents = append(expEvents, CreateSendCoinEvents(addr1.String(), addr2.String(), sdk.NewCoins(sdk.NewInt64Coin("hotdog", 600)))...) - assertEventsContains(t, res.Events, expEvents) + // assertEventsContains(t, res.Events, expEvents) // TODO[1760]: finalize-block } func TestMsgServiceAuthz(tt *testing.T) { pioconfig.SetProvenanceConfig(sdk.DefaultBondDenom, 1) - encCfg := sdksim.MakeTestEncodingConfig() + encCfg := moduletestutil.MakeTestEncodingConfig() priv, _, addr1 := testdata.KeyTestPubAddr() priv2, _, addr2 := testdata.KeyTestPubAddr() _, _, addr3 := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr1, priv.PubKey(), 0, 0) acct2 := authtypes.NewBaseAccount(addr2, priv2.PubKey(), 1, 0) acct3 := authtypes.NewBaseAccount(addr3, priv2.PubKey(), 2, 0) - initBalance := sdk.NewCoins(sdk.NewCoin("hotdog", sdk.NewInt(10000)), sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(721000))) + initBalance := sdk.NewCoins(sdk.NewInt64Coin("hotdog", 10_000), sdk.NewInt64Coin(sdk.DefaultBondDenom, 721_000)) app := piosimapp.SetupWithGenesisAccounts(tt, "msgfee-testing", []authtypes.GenesisAccount{acct1, acct2, acct3}, banktypes.Balance{Address: addr1.String(), Coins: initBalance}, banktypes.Balance{Address: addr2.String(), Coins: initBalance}, ) - ctx := app.BaseApp.NewContext(false, tmproto.Header{ChainID: "msgfee-testing"}) - app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) + ctx := app.BaseApp.NewContextLegacy(false, cmtproto.Header{ChainID: "msgfee-testing"}) + require.NoError(tt, app.AccountKeeper.Params.Set(ctx, authtypes.DefaultParams()), "Setting default account params") feeModuleAccount := app.AccountKeeper.GetModuleAccount(ctx, authtypes.FeeCollectorName) // Create an authz grant from addr1 to addr2 for 500hotdog. @@ -548,7 +574,7 @@ func TestMsgServiceAuthz(tt *testing.T) { sendAuth := banktypes.NewSendAuthorization(sdk.NewCoins(sdk.NewInt64Coin("hotdog", 500)), nil) require.NoError(tt, app.AuthzKeeper.SaveGrant(ctx, addr2, addr1, sendAuth, &exp1Hour), "Save Grant addr2 addr1 500hotdog") // Set a MsgSend msg-based fee of 800hotdog. - msgbasedFee := msgfeestypes.NewMsgFee(sdk.MsgTypeURL(&banktypes.MsgSend{}), sdk.NewCoin("hotdog", sdk.NewInt(800)), "", 0) + msgbasedFee := msgfeestypes.NewMsgFee(sdk.MsgTypeURL(&banktypes.MsgSend{}), sdk.NewInt64Coin("hotdog", 800), "", 0) require.NoError(tt, app.MsgFeesKeeper.SetMsgFee(ctx, msgbasedFee), "setting fee 800hotdog") // Check all account balances before we start. @@ -561,17 +587,20 @@ func TestMsgServiceAuthz(tt *testing.T) { stopIfFailed(tt) tt.Run("exec one send", func(t *testing.T) { - msg := banktypes.NewMsgSend(addr1, addr3, sdk.NewCoins(sdk.NewCoin("hotdog", sdk.NewInt(100)))) - // tx authz send message with correct amount of fees associated - msgExec := authztypes.NewMsgExec(addr2, []sdk.Msg{msg}) gasAmt := NewTestGasLimit() + 20_000 - fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(gasAmt)), sdk.NewInt64Coin("hotdog", 800)) acct2 = app.AccountKeeper.GetAccount(ctx, acct2.GetAddress()).(*authtypes.BaseAccount) - txBytes, err := SignTxAndGetBytes(gasAmt, fees, encCfg, priv2.PubKey(), priv2, *acct2, ctx.ChainID(), &msgExec) - require.NoError(t, err, "SignTxAndGetBytes") - res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) - require.Equal(t, abci.CodeTypeOK, res.Code, "res=%+v", res) + // TODO[1760]: finalize-block: Uncomment these lines. + _ = encCfg + /* + msg := banktypes.NewMsgSend(addr1, addr3, sdk.NewCoins(sdk.NewInt64Coin("hotdog", 100))) + msgExec := authztypes.NewMsgExec(addr2, []sdk.Msg{msg}) + fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(gasAmt)), sdk.NewInt64Coin("hotdog", 800)) + txBytes, err := SignTxAndGetBytes(gasAmt, fees, encCfg, priv2.PubKey(), priv2, *acct2, ctx.ChainID(), &msgExec) + require.NoError(t, err, "SignTxAndGetBytes") + res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) + require.Equal(t, abci.CodeTypeOK, res.Code, "res=%+v", res) + */ // acct1 sent 100hotdog to acct3 with acct2 paying fees 100000stake in gas, 800hotdog msgfees addr1AfterBalance := app.BankKeeper.GetAllBalances(ctx, addr1).String() @@ -598,19 +627,22 @@ func TestMsgServiceAuthz(tt *testing.T) { expEvents = append(expEvents, CreateSendCoinEvents(addr2.String(), feeModuleAccount.GetAddress().String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(gasAmt))))...) // fee charged for msg based fee expEvents = append(expEvents, CreateSendCoinEvents(addr2.String(), feeModuleAccount.GetAddress().String(), sdk.NewCoins(sdk.NewInt64Coin("hotdog", 800)))...) - assertEventsContains(t, res.Events, expEvents) + // assertEventsContains(t, res.Events, expEvents) // TODO[1760]: finalize-block }) tt.Run("exec two sends", func(t *testing.T) { // send 2 successful authz messages - msg := banktypes.NewMsgSend(addr1, addr3, sdk.NewCoins(sdk.NewCoin("hotdog", sdk.NewInt(80)))) - msgExec := authztypes.NewMsgExec(addr2, []sdk.Msg{msg, msg}) - fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 300000), sdk.NewInt64Coin("hotdog", 1600)) acct2 = app.AccountKeeper.GetAccount(ctx, acct2.GetAddress()).(*authtypes.BaseAccount) - txBytes, err := SignTxAndGetBytes(NewTestGasLimit()*2, fees, encCfg, priv2.PubKey(), priv2, *acct2, ctx.ChainID(), &msgExec) - require.NoError(t, err, "SignTxAndGetBytes") - res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) - require.Equal(t, abci.CodeTypeOK, res.Code, "res=%+v", res) + // TODO[1760]: finalize-block: Uncomment these lines. + /* + msg := banktypes.NewMsgSend(addr1, addr3, sdk.NewCoins(sdk.NewInt64Coin("hotdog", 80))) + msgExec := authztypes.NewMsgExec(addr2, []sdk.Msg{msg, msg}) + fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 300000), sdk.NewInt64Coin("hotdog", 1600)) + txBytes, err := SignTxAndGetBytes(NewTestGasLimit()*2, fees, encCfg, priv2.PubKey(), priv2, *acct2, ctx.ChainID(), &msgExec) + require.NoError(t, err, "SignTxAndGetBytes") + res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) + require.Equal(t, abci.CodeTypeOK, res.Code, "res=%+v", res) + */ // acct1 2x sent 100hotdog to acct3 with acct2 paying fees 200000stake in gas, 1600hotdog msgfees addr1AfterBalance := app.BankKeeper.GetAllBalances(ctx, addr1).String() @@ -638,18 +670,21 @@ func TestMsgServiceAuthz(tt *testing.T) { // fee charged for msg based fee expEvents = append(expEvents, CreateSendCoinEvents(addr2.String(), feeModuleAccount.GetAddress().String(), sdk.NewCoins(sdk.NewInt64Coin("hotdog", 1600)))...) - assertEventsContains(t, res.Events, expEvents) + // assertEventsContains(t, res.Events, expEvents) // TODO[1760]: finalize-block }) tt.Run("not enough fees", func(t *testing.T) { - msg := banktypes.NewMsgSend(addr1, addr3, sdk.NewCoins(sdk.NewCoin("hotdog", sdk.NewInt(100)))) - msgExec := authztypes.NewMsgExec(addr2, []sdk.Msg{msg}) - fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 100000), sdk.NewInt64Coin("hotdog", 799)) acct2 = app.AccountKeeper.GetAccount(ctx, acct2.GetAddress()).(*authtypes.BaseAccount) - txBytes, err := SignTxAndGetBytes(NewTestGasLimit(), fees, encCfg, priv2.PubKey(), priv2, *acct2, ctx.ChainID(), &msgExec) - require.NoError(t, err, "SignTxAndGetBytes") - res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) - require.Equal(t, 13, int(res.Code), "res=%+v", res) + // TODO[1760]: finalize-block: Uncomment these lines. + /* + msg := banktypes.NewMsgSend(addr1, addr3, sdk.NewCoins(sdk.NewInt64Coin("hotdog", 100))) + msgExec := authztypes.NewMsgExec(addr2, []sdk.Msg{msg}) + fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 100000), sdk.NewInt64Coin("hotdog", 799)) + txBytes, err := SignTxAndGetBytes(NewTestGasLimit(), fees, encCfg, priv2.PubKey(), priv2, *acct2, ctx.ChainID(), &msgExec) + require.NoError(t, err, "SignTxAndGetBytes") + res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) + require.Equal(t, 13, int(res.Code), "res=%+v", res) + */ // addr2 pays the base fee, but nothing else is changes. addr1AfterBalance := app.BankKeeper.GetAllBalances(ctx, addr1).String() @@ -665,7 +700,7 @@ func TestMsgServiceAssessMsgFee(tt *testing.T) { pioconfig.SetProvenanceConfig("", 0) pioconfig.ChangeMsgFeeFloorDenom(1, sdk.DefaultBondDenom) - encCfg := sdksim.MakeTestEncodingConfig() + encCfg := moduletestutil.MakeTestEncodingConfig() priv, _, addr1 := testdata.KeyTestPubAddr() _, _, addr2 := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr1, priv.PubKey(), 0, 0) @@ -678,8 +713,8 @@ func TestMsgServiceAssessMsgFee(tt *testing.T) { []authtypes.GenesisAccount{acct1}, banktypes.Balance{Address: addr1.String(), Coins: acct1Balance}, ) - ctx := app.BaseApp.NewContext(false, tmproto.Header{ChainID: "msgfee-testing"}) - app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) + ctx := app.BaseApp.NewContextLegacy(false, cmtproto.Header{ChainID: "msgfee-testing"}) + require.NoError(tt, app.AccountKeeper.Params.Set(ctx, authtypes.DefaultParams()), "Setting default account params") feeModuleAccount := app.AccountKeeper.GetModuleAccount(ctx, authtypes.FeeCollectorName) // Check both account balances before we start. @@ -689,16 +724,20 @@ func TestMsgServiceAssessMsgFee(tt *testing.T) { assert.Equal(tt, "", addr2beforeBalance, "addr2beforeBalance") stopIfFailed(tt) tt.Run("assess custom msg fee", func(t *testing.T) { - msgFeeCoin := sdk.NewInt64Coin(msgfeestypes.UsdDenom, 7) - msg := msgfeestypes.NewMsgAssessCustomMsgFeeRequest("test", msgFeeCoin, addr2.String(), addr1.String(), "") - fees := sdk.NewCoins( - sdk.NewInt64Coin(sdk.DefaultBondDenom, 150000), - sdk.NewInt64Coin(NHash, 1_190_500_001), - ) - txBytes, err := SignTxAndGetBytes(NewTestGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), &msg) - require.NoError(t, err, "SignTxAndGetBytes") - res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) - require.Equal(t, abci.CodeTypeOK, res.Code, "res=%+v", res) + // TODO[1760]: finalize-block: Uncomment these lines. + _ = encCfg + /* + msgFeeCoin := sdk.NewInt64Coin(msgfeestypes.UsdDenom, 7) + msg := msgfeestypes.NewMsgAssessCustomMsgFeeRequest("test", msgFeeCoin, addr2.String(), addr1.String(), "") + fees := sdk.NewCoins( + sdk.NewInt64Coin(sdk.DefaultBondDenom, 150000), + sdk.NewInt64Coin(NHash, 1_190_500_001), + ) + txBytes, err := SignTxAndGetBytes(NewTestGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), &msg) + require.NoError(t, err, "SignTxAndGetBytes") + res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) + require.Equal(t, abci.CodeTypeOK, res.Code, "res=%+v", res) + */ addr1AfterBalance := app.BankKeeper.GetAllBalances(ctx, addr1).String() addr2AfterBalance := app.BankKeeper.GetAllBalances(ctx, addr2).String() @@ -738,7 +777,7 @@ func TestMsgServiceAssessMsgFee(tt *testing.T) { // swept amount expEvents = append(expEvents, CreateSendCoinEvents(addr1.String(), feeModuleAccount.GetAddress().String(), sdk.NewCoins(sdk.NewInt64Coin("nhash", 1015500001)))...) - assertEventsContains(t, res.Events, expEvents) + // assertEventsContains(t, res.Events, expEvents) // TODO[1760]: finalize-block }) } @@ -746,7 +785,7 @@ func TestMsgServiceAssessMsgFeeWithBips(tt *testing.T) { pioconfig.SetProvenanceConfig("", 0) pioconfig.ChangeMsgFeeFloorDenom(1, sdk.DefaultBondDenom) - encCfg := sdksim.MakeTestEncodingConfig() + encCfg := moduletestutil.MakeTestEncodingConfig() priv, _, addr1 := testdata.KeyTestPubAddr() _, _, addr2 := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr1, priv.PubKey(), 0, 0) @@ -759,8 +798,8 @@ func TestMsgServiceAssessMsgFeeWithBips(tt *testing.T) { []authtypes.GenesisAccount{acct1}, banktypes.Balance{Address: addr1.String(), Coins: acct1Balance}, ) - ctx := app.BaseApp.NewContext(false, tmproto.Header{ChainID: "msgfee-testing"}) - app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) + ctx := app.BaseApp.NewContextLegacy(false, cmtproto.Header{ChainID: "msgfee-testing"}) + require.NoError(tt, app.AccountKeeper.Params.Set(ctx, authtypes.DefaultParams()), "Setting default account params") feeModuleAccount := app.AccountKeeper.GetModuleAccount(ctx, authtypes.FeeCollectorName) // Check both account balances before we start. @@ -770,16 +809,20 @@ func TestMsgServiceAssessMsgFeeWithBips(tt *testing.T) { assert.Equal(tt, "", addr2beforeBalance, "addr2beforeBalance") stopIfFailed(tt) tt.Run("assess custom msg fee", func(t *testing.T) { - msgFeeCoin := sdk.NewInt64Coin(msgfeestypes.UsdDenom, 7) - msg := msgfeestypes.NewMsgAssessCustomMsgFeeRequest("test", msgFeeCoin, addr2.String(), addr1.String(), "2500") - fees := sdk.NewCoins( - sdk.NewInt64Coin(sdk.DefaultBondDenom, 150000), - sdk.NewInt64Coin(NHash, 1_190_500_001), - ) - txBytes, err := SignTxAndGetBytes(NewTestGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), &msg) - require.NoError(t, err, "SignTxAndGetBytes") - res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) - require.Equal(t, abci.CodeTypeOK, res.Code, "res=%+v", res) + // TODO[1760]: finalize-block: Uncomment these lines. + _ = encCfg + /* + msgFeeCoin := sdk.NewInt64Coin(msgfeestypes.UsdDenom, 7) + msg := msgfeestypes.NewMsgAssessCustomMsgFeeRequest("test", msgFeeCoin, addr2.String(), addr1.String(), "2500") + fees := sdk.NewCoins( + sdk.NewInt64Coin(sdk.DefaultBondDenom, 150000), + sdk.NewInt64Coin(NHash, 1_190_500_001), + ) + txBytes, err := SignTxAndGetBytes(NewTestGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), &msg) + require.NoError(t, err, "SignTxAndGetBytes") + res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) + require.Equal(t, abci.CodeTypeOK, res.Code, "res=%+v", res) + */ addr1AfterBalance := app.BankKeeper.GetAllBalances(ctx, addr1).String() addr2AfterBalance := app.BankKeeper.GetAllBalances(ctx, addr2).String() @@ -820,7 +863,7 @@ func TestMsgServiceAssessMsgFeeWithBips(tt *testing.T) { // swept amount expEvents = append(expEvents, CreateSendCoinEvents(addr1.String(), feeModuleAccount.GetAddress().String(), sdk.NewCoins(sdk.NewInt64Coin("nhash", 1015500001)))...) - assertEventsContains(t, res.Events, expEvents) + // assertEventsContains(t, res.Events, expEvents) // TODO[1760]: finalize-block }) } @@ -829,7 +872,7 @@ func TestMsgServiceAssessMsgFeeNoRecipient(tt *testing.T) { pioconfig.SetProvenanceConfig("", 0) pioconfig.ChangeMsgFeeFloorDenom(1, sdk.DefaultBondDenom) - encCfg := sdksim.MakeTestEncodingConfig() + encCfg := moduletestutil.MakeTestEncodingConfig() priv, _, addr1 := testdata.KeyTestPubAddr() _, _, addr2 := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr1, priv.PubKey(), 0, 0) @@ -842,8 +885,8 @@ func TestMsgServiceAssessMsgFeeNoRecipient(tt *testing.T) { []authtypes.GenesisAccount{acct1}, banktypes.Balance{Address: addr1.String(), Coins: acct1Balance}, ) - ctx := app.BaseApp.NewContext(false, tmproto.Header{ChainID: "msgfee-testing"}) - app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) + ctx := app.BaseApp.NewContextLegacy(false, cmtproto.Header{ChainID: "msgfee-testing"}) + require.NoError(tt, app.AccountKeeper.Params.Set(ctx, authtypes.DefaultParams()), "Setting default account params") feeModuleAccount := app.AccountKeeper.GetModuleAccount(ctx, authtypes.FeeCollectorName) // Check both account balances before we start. @@ -853,16 +896,20 @@ func TestMsgServiceAssessMsgFeeNoRecipient(tt *testing.T) { assert.Equal(tt, "", addr2beforeBalance, "addr2beforeBalance") stopIfFailed(tt) tt.Run("assess custom msg fee", func(t *testing.T) { - msgFeeCoin := sdk.NewInt64Coin(msgfeestypes.UsdDenom, 7) - msg := msgfeestypes.NewMsgAssessCustomMsgFeeRequest("test", msgFeeCoin, "", addr1.String(), "") - fees := sdk.NewCoins( - sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(NewTestGasLimit())), - sdk.NewInt64Coin(NHash, 1_190_500_001), - ) - txBytes, err := SignTxAndGetBytes(NewTestGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), &msg) - require.NoError(t, err, "SignTxAndGetBytes") - res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) - require.Equal(t, abci.CodeTypeOK, res.Code, "res=%+v", res) + // TODO[1760]: finalize-block: Uncomment these lines. + _ = encCfg + /* + msgFeeCoin := sdk.NewInt64Coin(msgfeestypes.UsdDenom, 7) + msg := msgfeestypes.NewMsgAssessCustomMsgFeeRequest("test", msgFeeCoin, "", addr1.String(), "") + fees := sdk.NewCoins( + sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(NewTestGasLimit())), + sdk.NewInt64Coin(NHash, 1_190_500_001), + ) + txBytes, err := SignTxAndGetBytes(NewTestGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), &msg) + require.NoError(t, err, "SignTxAndGetBytes") + res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) + require.Equal(t, abci.CodeTypeOK, res.Code, "res=%+v", res) + */ addr1AfterBalance := app.BankKeeper.GetAllBalances(ctx, addr1).String() assert.Equal(t, "1000hotdog,1000stake", addr1AfterBalance, "addr1AfterBalance") @@ -898,12 +945,12 @@ func TestMsgServiceAssessMsgFeeNoRecipient(tt *testing.T) { // swept amount expEvents = append(expEvents, CreateSendCoinEvents(addr1.String(), feeModuleAccount.GetAddress().String(), sdk.NewCoins(sdk.NewInt64Coin("nhash", 1015500001)))...) - assertEventsContains(t, res.Events, expEvents) + // assertEventsContains(t, res.Events, expEvents) // TODO[1760]: finalize-block }) } func TestRewardsProgramStartError(t *testing.T) { - encCfg := sdksim.MakeTestEncodingConfig() + encCfg := moduletestutil.MakeTestEncodingConfig() priv, _, addr := testdata.KeyTestPubAddr() //_, _, addr2 := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr, priv.PubKey(), 0, 0) @@ -915,11 +962,11 @@ func TestRewardsProgramStartError(t *testing.T) { []authtypes.GenesisAccount{acct1}, banktypes.Balance{Address: addr.String(), Coins: acct1Balance}, ) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) - app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) + ctx := app.BaseApp.NewContext(false) + require.NoError(t, app.AccountKeeper.Params.Set(ctx, authtypes.DefaultParams()), "Setting default account params") blockTime := ctx.BlockTime() - fundCoins := sdk.NewCoins(sdk.NewCoin(NHash, sdk.NewInt(290500010))) - require.NoError(t, testutil.FundAccount(app.BankKeeper, ctx, acct1.GetAddress(), fundCoins), + fundCoins := sdk.NewCoins(sdk.NewInt64Coin(NHash, 290_500_010)) + require.NoError(t, testutil.FundAccount(ctx, app.BankKeeper, acct1.GetAddress(), fundCoins), "funding acct1 with 290500010nhash") rewardProgram := *rewardtypes.NewMsgCreateRewardProgramRequest( @@ -939,26 +986,30 @@ func TestRewardsProgramStartError(t *testing.T) { Transfer: &rewardtypes.ActionTransfer{ MinimumActions: 0, MaximumActions: 10, - MinimumDelegationAmount: sdk.NewCoin("nhash", sdk.ZeroInt()), + MinimumDelegationAmount: sdk.NewInt64Coin("nhash", 0), }, }, }, }, ) - txBytes, err := SignTxAndGetBytes( - NewTestRewardsGasLimit(), - sdk.NewCoins(sdk.NewInt64Coin("atom", 150), sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 1_190_500_000)), - encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), - &rewardProgram, - ) - require.NoError(t, err, "SignTxAndGetBytes") - res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) - require.True(t, res.IsErr(), "Should return an error: res=%+v", res) + // TODO[1760]: finalize-block: Uncomment these lines. + _, _ = encCfg, rewardProgram + /* + txBytes, err := SignTxAndGetBytes( + NewTestRewardsGasLimit(), + sdk.NewCoins(sdk.NewInt64Coin("atom", 150), sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 1_190_500_000)), + encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), + &rewardProgram, + ) + require.NoError(t, err, "SignTxAndGetBytes") + res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) + require.True(t, res.IsErr(), "Should return an error: res=%+v", res) + */ } func TestRewardsProgramStart(t *testing.T) { - encCfg := sdksim.MakeTestEncodingConfig() + encCfg := moduletestutil.MakeTestEncodingConfig() pioconfig.SetProvenanceConfig("nhash", 0) priv, _, addr := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr, priv.PubKey(), 0, 0) @@ -971,10 +1022,10 @@ func TestRewardsProgramStart(t *testing.T) { []authtypes.GenesisAccount{acct1}, banktypes.Balance{Address: addr.String(), Coins: acct1Balance}, ) - ctx := app.BaseApp.NewContext(false, tmproto.Header{Time: time.Now()}) - app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) - fundCoins := sdk.NewCoins(sdk.NewCoin(pioconfig.GetProvenanceConfig().FeeDenom, sdk.NewInt(290500010))) - require.NoError(t, testutil.FundAccount(app.BankKeeper, ctx, acct1.GetAddress(), fundCoins), + ctx := app.BaseApp.NewContextLegacy(false, cmtproto.Header{Time: time.Now()}) + require.NoError(t, app.AccountKeeper.Params.Set(ctx, authtypes.DefaultParams()), "Setting default account params") + fundCoins := sdk.NewCoins(sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 290_500_010)) + require.NoError(t, testutil.FundAccount(ctx, app.BankKeeper, acct1.GetAddress(), fundCoins), "funding acct1 with 290500010nhash") rewardProgram := *rewardtypes.NewMsgCreateRewardProgramRequest( @@ -994,13 +1045,13 @@ func TestRewardsProgramStart(t *testing.T) { Transfer: &rewardtypes.ActionTransfer{ MinimumActions: 0, MaximumActions: 10, - MinimumDelegationAmount: sdk.NewCoin("nhash", sdk.ZeroInt()), + MinimumDelegationAmount: sdk.NewInt64Coin("nhash", 0), }, }, }, }, ) - app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: 2, Time: time.Now().UTC()}}) + // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: 2, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block txReward, err := SignTx( NewTestRewardsGasLimit(), sdk.NewCoins(sdk.NewInt64Coin("atom", 150), sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 1_190_500_000)), @@ -1011,7 +1062,7 @@ func TestRewardsProgramStart(t *testing.T) { _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), txReward) require.NoError(t, errFromDeliverTx, "SimDeliver") assert.NotEmpty(t, res.GetEvents(), "res.GetEvents()") - app.EndBlock(abci.RequestEndBlock{Height: 2}) + // app.EndBlock(abci.RequestEndBlock{Height: 2}) // TODO[1760]: finalize-block app.Commit() expEvents := []abci.Event{ @@ -1025,7 +1076,7 @@ func TestRewardsProgramStart(t *testing.T) { func TestRewardsProgramStartPerformQualifyingActions(t *testing.T) { pioconfig.SetProvenanceConfig("nhash", 0) - encCfg := sdksim.MakeTestEncodingConfig() + encCfg := moduletestutil.MakeTestEncodingConfig() priv, _, addr := testdata.KeyTestPubAddr() _, _, addr2 := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr, priv.PubKey(), 0, 0) @@ -1038,10 +1089,10 @@ func TestRewardsProgramStartPerformQualifyingActions(t *testing.T) { []authtypes.GenesisAccount{acct1}, banktypes.Balance{Address: addr.String(), Coins: acct1Balance}, ) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) - app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) - fundCoins := sdk.NewCoins(sdk.NewCoin(pioconfig.GetProvenanceConfig().FeeDenom, sdk.NewInt(290500010))) - require.NoError(t, testutil.FundAccount(app.BankKeeper, ctx, acct1.GetAddress(), fundCoins), + ctx := app.BaseApp.NewContext(false) + require.NoError(t, app.AccountKeeper.Params.Set(ctx, authtypes.DefaultParams()), "Setting default account params") + fundCoins := sdk.NewCoins(sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 290_500_010)) + require.NoError(t, testutil.FundAccount(ctx, app.BankKeeper, acct1.GetAddress(), fundCoins), "funding acct1 with 290500010nhash") rewardProgram := *rewardtypes.NewMsgCreateRewardProgramRequest( @@ -1061,13 +1112,13 @@ func TestRewardsProgramStartPerformQualifyingActions(t *testing.T) { Transfer: &rewardtypes.ActionTransfer{ MinimumActions: 0, MaximumActions: 10, - MinimumDelegationAmount: sdk.NewCoin("nhash", sdk.ZeroInt()), + MinimumDelegationAmount: sdk.NewInt64Coin("nhash", 0), }, }, }, }, ) - app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: 2, Time: time.Now().UTC()}}) + // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: 2, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block txReward, err := SignTx( NewTestRewardsGasLimit(), sdk.NewCoins(sdk.NewInt64Coin("atom", 150), sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 1_190_500_000)), @@ -1078,24 +1129,24 @@ func TestRewardsProgramStartPerformQualifyingActions(t *testing.T) { _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), txReward) require.NoError(t, errFromDeliverTx, "SimDeliver") assert.NotEmpty(t, res.GetEvents(), "res.GetEvents()") - app.EndBlock(abci.RequestEndBlock{Height: 2}) + // app.EndBlock(abci.RequestEndBlock{Height: 2}) // TODO[1760]: finalize-block app.Commit() time.Sleep(110 * time.Millisecond) // tx with a fee associated with msg type and account has funds - msg := banktypes.NewMsgSend(addr, addr2, sdk.NewCoins(sdk.NewCoin("atom", sdk.NewInt(50)))) + msg := banktypes.NewMsgSend(addr, addr2, sdk.NewCoins(sdk.NewInt64Coin("atom", 50))) fees := sdk.NewCoins(sdk.NewInt64Coin("atom", 150)) acct1 = app.AccountKeeper.GetAccount(ctx, acct1.GetAddress()).(*authtypes.BaseAccount) seq := acct1.Sequence for height := int64(3); height <= int64(100); height++ { - app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: height, Time: time.Now().UTC()}}) + // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: height, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block require.NoError(t, acct1.SetSequence(seq), "[%d]: SetSequence(%d)", height, seq) tx1, err1 := SignTx(NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) require.NoError(t, err1, "[%d]: SignTx", height) _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), tx1) require.NoError(t, errFromDeliverTx, "[%d]: SimDeliver", height) assert.NotEmpty(t, res.GetEvents(), "[%d]: res.GetEvents()", height) - app.EndBlock(abci.RequestEndBlock{Height: height}) + // app.EndBlock(abci.RequestEndBlock{Height: height}) // TODO[1760]: finalize-block app.Commit() seq = seq + 1 } @@ -1158,7 +1209,7 @@ func TestRewardsProgramStartPerformQualifyingActions(t *testing.T) { } func TestRewardsProgramStartPerformQualifyingActionsRecordedRewardsUnclaimable(t *testing.T) { - encCfg := sdksim.MakeTestEncodingConfig() + encCfg := moduletestutil.MakeTestEncodingConfig() priv, _, addr := testdata.KeyTestPubAddr() _, _, addr2 := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr, priv.PubKey(), 0, 0) @@ -1169,8 +1220,8 @@ func TestRewardsProgramStartPerformQualifyingActionsRecordedRewardsUnclaimable(t "description", 1, acct1.Address, - sdk.NewCoin("nhash", sdk.NewInt(1000_000_000_000)), - sdk.NewCoin("nhash", sdk.NewInt(10_000_000_000)), + sdk.NewInt64Coin("nhash", 1000_000_000_000), + sdk.NewInt64Coin("nhash", 10_000_000_000), time.Now().Add(50*time.Millisecond), uint64(30), 10, @@ -1182,7 +1233,7 @@ func TestRewardsProgramStartPerformQualifyingActionsRecordedRewardsUnclaimable(t Transfer: &rewardtypes.ActionTransfer{ MinimumActions: 0, MaximumActions: 10, - MinimumDelegationAmount: sdk.NewCoin("nhash", sdk.ZeroInt()), + MinimumDelegationAmount: sdk.NewInt64Coin("nhash", 0), }, }, }, @@ -1195,14 +1246,14 @@ func TestRewardsProgramStartPerformQualifyingActionsRecordedRewardsUnclaimable(t []authtypes.GenesisAccount{acct1}, nil, banktypes.Balance{Address: addr.String(), Coins: acct1Balance}, ) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) - app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) - fundCoins := sdk.NewCoins(sdk.NewCoin(pioconfig.GetProvenanceConfig().FeeDenom, sdk.NewInt(290500010))) - require.NoError(t, testutil.FundAccount(app.BankKeeper, ctx, acct1.GetAddress(), fundCoins), + ctx := app.BaseApp.NewContext(false) + require.NoError(t, app.AccountKeeper.Params.Set(ctx, authtypes.DefaultParams()), "Setting default account params") + fundCoins := sdk.NewCoins(sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 290_500_010)) + require.NoError(t, testutil.FundAccount(ctx, app.BankKeeper, acct1.GetAddress(), fundCoins), "funding acct1 with 290500010nhash") // tx with a fee associated with msg type and account has funds - msg := banktypes.NewMsgSend(addr, addr2, sdk.NewCoins(sdk.NewCoin("atom", sdk.NewInt(50)))) + msg := banktypes.NewMsgSend(addr, addr2, sdk.NewCoins(sdk.NewInt64Coin("atom", 50))) fees := sdk.NewCoins(sdk.NewInt64Coin("atom", 150)) acct1 = app.AccountKeeper.GetAccount(ctx, acct1.GetAddress()).(*authtypes.BaseAccount) seq := acct1.Sequence @@ -1210,14 +1261,14 @@ func TestRewardsProgramStartPerformQualifyingActionsRecordedRewardsUnclaimable(t time.Sleep(55 * time.Millisecond) for height := int64(2); height < int64(22); height++ { - app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: height, Time: time.Now().UTC()}}) + // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: height, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block require.NoError(t, acct1.SetSequence(seq), "[%d]: SetSequence(%d)", height, seq) tx1, err1 := SignTx(NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) require.NoError(t, err1, "[%d]: SignTx", height) _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), tx1) require.NoError(t, errFromDeliverTx, "[%d]: SimDeliver", height) assert.NotEmpty(t, res.GetEvents(), "[%d]: res.GetEvents()", height) - app.EndBlock(abci.RequestEndBlock{Height: height}) + // app.EndBlock(abci.RequestEndBlock{Height: height}) // TODO[1760]: finalize-block app.Commit() seq = seq + 1 } @@ -1294,7 +1345,7 @@ func TestRewardsProgramStartPerformQualifyingActionsRecordedRewardsUnclaimable(t } func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAccountFunded(t *testing.T) { - encCfg := sdksim.MakeTestEncodingConfig() + encCfg := moduletestutil.MakeTestEncodingConfig() priv, _, addr := testdata.KeyTestPubAddr() _, _, addr2 := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr, priv.PubKey(), 0, 0) @@ -1305,8 +1356,8 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc "description", 1, acct1.Address, - sdk.NewCoin("nhash", sdk.NewInt(1000_000_000_000)), - sdk.NewCoin("nhash", sdk.NewInt(10_000_000_000)), + sdk.NewInt64Coin("nhash", 1000_000_000_000), + sdk.NewInt64Coin("nhash", 10_000_000_000), time.Now().Add(100*time.Millisecond), uint64(1), 100, @@ -1318,7 +1369,7 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc Transfer: &rewardtypes.ActionTransfer{ MinimumActions: 0, MaximumActions: 10, - MinimumDelegationAmount: sdk.NewCoin("nhash", sdk.ZeroInt()), + MinimumDelegationAmount: sdk.NewInt64Coin("nhash", 0), }, }, }, @@ -1333,14 +1384,14 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc banktypes.Balance{Address: addr.String(), Coins: acct1Balance}, banktypes.Balance{Address: "cosmos1w6t0l7z0yerj49ehnqwqaayxqpe3u7e23edgma", Coins: acct1Balance}, ) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) - app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) - fundCoins := sdk.NewCoins(sdk.NewCoin(pioconfig.GetProvenanceConfig().FeeDenom, sdk.NewInt(290500010))) - require.NoError(t, testutil.FundAccount(app.BankKeeper, ctx, acct1.GetAddress(), fundCoins), + ctx := app.BaseApp.NewContext(false) + require.NoError(t, app.AccountKeeper.Params.Set(ctx, authtypes.DefaultParams()), "Setting default account params") + fundCoins := sdk.NewCoins(sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 290_500_010)) + require.NoError(t, testutil.FundAccount(ctx, app.BankKeeper, acct1.GetAddress(), fundCoins), "funding acct1 with 290500010nhash") // tx with a fee associated with msg type and account has funds - msg := banktypes.NewMsgSend(addr, addr2, sdk.NewCoins(sdk.NewCoin("atom", sdk.NewInt(50)))) + msg := banktypes.NewMsgSend(addr, addr2, sdk.NewCoins(sdk.NewInt64Coin("atom", 50))) fees := sdk.NewCoins(sdk.NewInt64Coin("atom", 150)) acct1 = app.AccountKeeper.GetAccount(ctx, acct1.GetAddress()).(*authtypes.BaseAccount) seq := acct1.Sequence @@ -1348,7 +1399,7 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc //go through 5 blocks, but take a long time to cut blocks. for height := int64(2); height < int64(7); height++ { - app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: height, Time: time.Now().UTC()}}) + // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: height, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block require.NoError(t, acct1.SetSequence(seq), "[%d]: SetSequence(%d)", height, seq) tx1, err1 := SignTx(NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) require.NoError(t, err1, "[%d]: SignTx", height) @@ -1357,7 +1408,7 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc assert.NotEmpty(t, res.GetEvents(), "[%d]: res.GetEvents()", height) // wait for claim period to end (claim period is 1s) time.Sleep(1500 * time.Millisecond) - app.EndBlock(abci.RequestEndBlock{Height: height}) + // app.EndBlock(abci.RequestEndBlock{Height: height}) // TODO[1760]: finalize-block app.Commit() seq = seq + 1 } @@ -1413,47 +1464,50 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc // get the accoutn balances of acct1 balance := app.BankKeeper.GetAllBalances(ctx, acct1.GetAddress()) // claim rewards for the address - app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: 7, Time: time.Now().UTC()}}) - msgClaim := rewardtypes.NewMsgClaimAllRewardsRequest(acct1.Address) - require.NoError(t, acct1.SetSequence(seq), "SetSequence(%d)", seq) - txClaim, errClaim := SignTxAndGetBytes( - NewTestRewardsGasLimit(), - fees, - encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), - msgClaim, - ) - require.NoError(t, errClaim, "SignTxAndGetBytes") - res := app.DeliverTx(abci.RequestDeliverTx{Tx: txClaim}) - require.Equal(t, true, res.IsOK(), "res=%+v", res) - // unmarshal the TxMsgData - var protoResult sdk.TxMsgData - require.NoError(t, proto.Unmarshal(res.Data, &protoResult), "unmarshalling protoResult") - require.Len(t, protoResult.MsgResponses, 1, "protoResult.MsgResponses") - require.Equal(t, protoResult.MsgResponses[0].GetTypeUrl(), "/provenance.reward.v1.MsgClaimAllRewardsResponse", - "protoResult.MsgResponses[0].GetTypeUrl()") - claimResponse := rewardtypes.MsgClaimAllRewardsResponse{} - require.NoError(t, claimResponse.Unmarshal(protoResult.MsgResponses[0].Value), "unmarshalling claimResponse") - assert.Equal(t, sdk.NewInt64Coin("nhash", 50_000_000_000).String(), claimResponse.TotalRewardClaim[0].String(), - "TotalRewardClaim") - if assert.Len(t, claimResponse.ClaimDetails, 1, "ClaimDetails") { - assert.Equal(t, 1, int(claimResponse.ClaimDetails[0].RewardProgramId), "RewardProgramId") - assert.Equal(t, sdk.NewInt64Coin("nhash", 50_000_000_000).String(), - claimResponse.ClaimDetails[0].TotalRewardClaim.String(), "ClaimDetails TotalRewardClaim") - if assert.Len(t, claimResponse.ClaimDetails[0].ClaimedRewardPeriodDetails, 5, "ClaimedRewardPeriodDetails") { - assert.Equal(t, sdk.NewInt64Coin("nhash", 10_000_000_000).String(), - claimResponse.ClaimDetails[0].ClaimedRewardPeriodDetails[0].ClaimPeriodReward.String(), "ClaimPeriodReward") + // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: 7, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block + // TODO[1760]: finalize-block: Uncomment these lines. + /* + msgClaim := rewardtypes.NewMsgClaimAllRewardsRequest(acct1.Address) + require.NoError(t, acct1.SetSequence(seq), "SetSequence(%d)", seq) + txClaim, errClaim := SignTxAndGetBytes( + NewTestRewardsGasLimit(), + fees, + encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), + msgClaim, + ) + require.NoError(t, errClaim, "SignTxAndGetBytes") + res := app.DeliverTx(abci.RequestDeliverTx{Tx: txClaim}) + require.Equal(t, true, res.IsOK(), "res=%+v", res) + // unmarshal the TxMsgData + var protoResult sdk.TxMsgData + require.NoError(t, proto.Unmarshal(res.Data, &protoResult), "unmarshalling protoResult") + require.Len(t, protoResult.MsgResponses, 1, "protoResult.MsgResponses") + require.Equal(t, protoResult.MsgResponses[0].GetTypeUrl(), "/provenance.reward.v1.MsgClaimAllRewardsResponse", + "protoResult.MsgResponses[0].GetTypeUrl()") + claimResponse := rewardtypes.MsgClaimAllRewardsResponse{} + require.NoError(t, claimResponse.Unmarshal(protoResult.MsgResponses[0].Value), "unmarshalling claimResponse") + assert.Equal(t, sdk.NewInt64Coin("nhash", 50_000_000_000).String(), claimResponse.TotalRewardClaim[0].String(), + "TotalRewardClaim") + if assert.Len(t, claimResponse.ClaimDetails, 1, "ClaimDetails") { + assert.Equal(t, 1, int(claimResponse.ClaimDetails[0].RewardProgramId), "RewardProgramId") + assert.Equal(t, sdk.NewInt64Coin("nhash", 50_000_000_000).String(), + claimResponse.ClaimDetails[0].TotalRewardClaim.String(), "ClaimDetails TotalRewardClaim") + if assert.Len(t, claimResponse.ClaimDetails[0].ClaimedRewardPeriodDetails, 5, "ClaimedRewardPeriodDetails") { + assert.Equal(t, sdk.NewInt64Coin("nhash", 10_000_000_000).String(), + claimResponse.ClaimDetails[0].ClaimedRewardPeriodDetails[0].ClaimPeriodReward.String(), "ClaimPeriodReward") + } } - } - app.EndBlock(abci.RequestEndBlock{Height: 7}) + */ + // app.EndBlock(abci.RequestEndBlock{Height: 7}) // TODO[1760]: finalize-block app.Commit() balanceLater := app.BankKeeper.GetAllBalances(ctx, acct1.GetAddress()) // make sure account balance has the tokens balanceChange := balanceLater.AmountOf(pioconfig.GetProvenanceConfig().FeeDenom).Sub(balance.AmountOf(pioconfig.GetProvenanceConfig().FeeDenom)) - assert.Equal(t, sdk.NewInt(50_000_000_000).String(), balanceChange.String(), "balance change") + assert.Equal(t, sdkmath.NewInt(50_000_000_000).String(), balanceChange.String(), "balance change") } func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAccountFundedDifferentDenom(t *testing.T) { - encCfg := sdksim.MakeTestEncodingConfig() + encCfg := moduletestutil.MakeTestEncodingConfig() priv, _, addr := testdata.KeyTestPubAddr() _, _, addr2 := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr, priv.PubKey(), 0, 0) @@ -1464,8 +1518,8 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc "description", 1, acct1.Address, - sdk.NewCoin("hotdog", sdk.NewInt(1000_000_000_000)), - sdk.NewCoin("hotdog", sdk.NewInt(10_000_000_000)), + sdk.NewInt64Coin("hotdog", 1000_000_000_000), + sdk.NewInt64Coin("hotdog", 10_000_000_000), time.Now().Add(100*time.Millisecond), uint64(1), 100, @@ -1477,7 +1531,7 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc Transfer: &rewardtypes.ActionTransfer{ MinimumActions: 0, MaximumActions: 10, - MinimumDelegationAmount: sdk.NewCoin("nhash", sdk.ZeroInt()), + MinimumDelegationAmount: sdk.NewInt64Coin("nhash", 0), }, }, }, @@ -1492,14 +1546,14 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc banktypes.Balance{Address: addr.String(), Coins: acct1Balance}, banktypes.Balance{Address: "cosmos1w6t0l7z0yerj49ehnqwqaayxqpe3u7e23edgma", Coins: acct1Balance}, ) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) - app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) - fundCoins := sdk.NewCoins(sdk.NewCoin(pioconfig.GetProvenanceConfig().FeeDenom, sdk.NewInt(290500010))) - require.NoError(t, testutil.FundAccount(app.BankKeeper, ctx, acct1.GetAddress(), fundCoins), + ctx := app.BaseApp.NewContext(false) + require.NoError(t, app.AccountKeeper.Params.Set(ctx, authtypes.DefaultParams()), "Setting default account params") + fundCoins := sdk.NewCoins(sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 290_500_010)) + require.NoError(t, testutil.FundAccount(ctx, app.BankKeeper, acct1.GetAddress(), fundCoins), "funding acct1 with 290500010nhash") // tx with a fee associated with msg type and account has funds - msg := banktypes.NewMsgSend(addr, addr2, sdk.NewCoins(sdk.NewCoin("atom", sdk.NewInt(50)))) + msg := banktypes.NewMsgSend(addr, addr2, sdk.NewCoins(sdk.NewInt64Coin("atom", 50))) fees := sdk.NewCoins(sdk.NewInt64Coin("atom", 150)) acct1 = app.AccountKeeper.GetAccount(ctx, acct1.GetAddress()).(*authtypes.BaseAccount) seq := acct1.Sequence @@ -1507,7 +1561,7 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc //go through 5 blocks, but take a long time to cut blocks. for height := int64(2); height < int64(7); height++ { - app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: height, Time: time.Now().UTC()}}) + // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: height, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block require.NoError(t, acct1.SetSequence(seq), "[%d]: SetSequence(%d)", height, seq) tx1, err1 := SignTx(NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) require.NoError(t, err1, "[%d]: SignTx", height) @@ -1516,7 +1570,7 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc assert.NotEmpty(t, res.GetEvents(), "[%d]: res.GetEvents()", height) // wait for claim period to end (claim period is 1s) time.Sleep(1500 * time.Millisecond) - app.EndBlock(abci.RequestEndBlock{Height: height}) + // app.EndBlock(abci.RequestEndBlock{Height: height}) // TODO[1760]: finalize-block app.Commit() seq = seq + 1 } @@ -1573,51 +1627,54 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc // get the accoutn balances of acct1 balance := app.BankKeeper.GetAllBalances(ctx, acct1.GetAddress()) // claim rewards for the address - app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: 7, Time: time.Now().UTC()}}) - msgClaim := rewardtypes.NewMsgClaimAllRewardsRequest(acct1.Address) - require.NoError(t, acct1.SetSequence(seq), "SetSequence(%d)", seq) - txClaim, errClaim := SignTxAndGetBytes( - NewTestRewardsGasLimit(), - fees, - encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), - msgClaim, - ) - require.NoError(t, errClaim, "SignTxAndGetBytes") - res := app.DeliverTx(abci.RequestDeliverTx{Tx: txClaim}) - require.Equal(t, true, res.IsOK(), "res=%+v", res) - // unmarshal the TxMsgData - var protoResult sdk.TxMsgData - require.NoError(t, proto.Unmarshal(res.Data, &protoResult), "unmarshalling protoResult") - require.Len(t, protoResult.MsgResponses, 1, "protoResult.MsgResponses") - require.Equal(t, protoResult.MsgResponses[0].GetTypeUrl(), "/provenance.reward.v1.MsgClaimAllRewardsResponse", - "protoResult.MsgResponses[0].GetTypeUrl()") - claimResponse := rewardtypes.MsgClaimAllRewardsResponse{} - require.NoError(t, claimResponse.Unmarshal(protoResult.MsgResponses[0].Value), "unmarshalling claimResponse") - if assert.NotEmpty(t, claimResponse.TotalRewardClaim, "TotalRewardClaim") { - assert.Equal(t, sdk.NewInt64Coin("hotdog", 50_000_000_000).String(), - claimResponse.TotalRewardClaim[0].String(), "TotalRewardClaim") - } - if assert.NotEmpty(t, claimResponse.ClaimDetails, "ClaimDetails") { - assert.Len(t, claimResponse.ClaimDetails, 1, "ClaimDetails") - assert.Equal(t, 1, int(claimResponse.ClaimDetails[0].RewardProgramId), "RewardProgramId") - assert.Equal(t, sdk.NewInt64Coin("hotdog", 50_000_000_000).String(), - claimResponse.ClaimDetails[0].TotalRewardClaim.String(), "ClaimDetails TotalRewardClaim") - if assert.NotEmpty(t, claimResponse.ClaimDetails[0].ClaimedRewardPeriodDetails, "ClaimedRewardPeriodDetails") { - assert.Len(t, claimResponse.ClaimDetails[0].ClaimedRewardPeriodDetails, 5, "ClaimedRewardPeriodDetails") - assert.Equal(t, sdk.NewInt64Coin("hotdog", 10_000_000_000).String(), - claimResponse.ClaimDetails[0].ClaimedRewardPeriodDetails[0].ClaimPeriodReward.String(), "ClaimPeriodReward") + // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: 7, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block + // TODO[1760]: finalize-block: Uncomment these lines. + /* + msgClaim := rewardtypes.NewMsgClaimAllRewardsRequest(acct1.Address) + require.NoError(t, acct1.SetSequence(seq), "SetSequence(%d)", seq) + txClaim, errClaim := SignTxAndGetBytes( + NewTestRewardsGasLimit(), + fees, + encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), + msgClaim, + ) + require.NoError(t, errClaim, "SignTxAndGetBytes") + res := app.DeliverTx(abci.RequestDeliverTx{Tx: txClaim}) + require.Equal(t, true, res.IsOK(), "res=%+v", res) + // unmarshal the TxMsgData + var protoResult sdk.TxMsgData + require.NoError(t, proto.Unmarshal(res.Data, &protoResult), "unmarshalling protoResult") + require.Len(t, protoResult.MsgResponses, 1, "protoResult.MsgResponses") + require.Equal(t, protoResult.MsgResponses[0].GetTypeUrl(), "/provenance.reward.v1.MsgClaimAllRewardsResponse", + "protoResult.MsgResponses[0].GetTypeUrl()") + claimResponse := rewardtypes.MsgClaimAllRewardsResponse{} + require.NoError(t, claimResponse.Unmarshal(protoResult.MsgResponses[0].Value), "unmarshalling claimResponse") + if assert.NotEmpty(t, claimResponse.TotalRewardClaim, "TotalRewardClaim") { + assert.Equal(t, sdk.NewInt64Coin("hotdog", 50_000_000_000).String(), + claimResponse.TotalRewardClaim[0].String(), "TotalRewardClaim") } - } - app.EndBlock(abci.RequestEndBlock{Height: 7}) + if assert.NotEmpty(t, claimResponse.ClaimDetails, "ClaimDetails") { + assert.Len(t, claimResponse.ClaimDetails, 1, "ClaimDetails") + assert.Equal(t, 1, int(claimResponse.ClaimDetails[0].RewardProgramId), "RewardProgramId") + assert.Equal(t, sdk.NewInt64Coin("hotdog", 50_000_000_000).String(), + claimResponse.ClaimDetails[0].TotalRewardClaim.String(), "ClaimDetails TotalRewardClaim") + if assert.NotEmpty(t, claimResponse.ClaimDetails[0].ClaimedRewardPeriodDetails, "ClaimedRewardPeriodDetails") { + assert.Len(t, claimResponse.ClaimDetails[0].ClaimedRewardPeriodDetails, 5, "ClaimedRewardPeriodDetails") + assert.Equal(t, sdk.NewInt64Coin("hotdog", 10_000_000_000).String(), + claimResponse.ClaimDetails[0].ClaimedRewardPeriodDetails[0].ClaimPeriodReward.String(), "ClaimPeriodReward") + } + } + */ + // app.EndBlock(abci.RequestEndBlock{Height: 7}) // TODO[1760]: finalize-block app.Commit() balanceLater := app.BankKeeper.GetAllBalances(ctx, acct1.GetAddress()) balanceChange := balanceLater.AmountOf("hotdog").Sub(balance.AmountOf("hotdog")) // make sure account balance has the tokens - assert.Equal(t, sdk.NewInt(50_000_000_000).String(), balanceChange.String(), "balance change") + assert.Equal(t, sdkmath.NewInt(50_000_000_000).String(), balanceChange.String(), "balance change") } func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAccountFundedDifferentDenomClaimedTogether(t *testing.T) { - encCfg := sdksim.MakeTestEncodingConfig() + encCfg := moduletestutil.MakeTestEncodingConfig() priv, _, addr := testdata.KeyTestPubAddr() _, _, addr2 := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr, priv.PubKey(), 0, 0) @@ -1632,8 +1689,8 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc "description", 1, acct1.Address, - sdk.NewCoin("hotdog", sdk.NewInt(1000_000_000_000)), - sdk.NewCoin("hotdog", sdk.NewInt(10_000_000_000)), + sdk.NewInt64Coin("hotdog", 1000_000_000_000), + sdk.NewInt64Coin("hotdog", 10_000_000_000), time.Now().Add(100*time.Millisecond), uint64(1), 100, @@ -1645,7 +1702,7 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc Transfer: &rewardtypes.ActionTransfer{ MinimumActions: 0, MaximumActions: 10, - MinimumDelegationAmount: sdk.NewCoin("nhash", sdk.ZeroInt()), + MinimumDelegationAmount: sdk.NewInt64Coin("nhash", 0), }, }, }, @@ -1657,8 +1714,8 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc "description", 2, acct1.Address, - sdk.NewCoin("nhash", sdk.NewInt(1000_000_000_000)), - sdk.NewCoin("nhash", sdk.NewInt(10_000_000_000)), + sdk.NewInt64Coin("nhash", 1000_000_000_000), + sdk.NewInt64Coin("nhash", 10_000_000_000), time.Now().Add(100*time.Millisecond), uint64(1), 100, @@ -1670,7 +1727,7 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc Transfer: &rewardtypes.ActionTransfer{ MinimumActions: 0, MaximumActions: 10, - MinimumDelegationAmount: sdk.NewCoin("nhash", sdk.ZeroInt()), + MinimumDelegationAmount: sdk.NewInt64Coin("nhash", 0), }, }, }, @@ -1685,14 +1742,14 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc banktypes.Balance{Address: addr.String(), Coins: acct1Balance}, banktypes.Balance{Address: "cosmos1w6t0l7z0yerj49ehnqwqaayxqpe3u7e23edgma", Coins: acct1Balance}, ) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) - app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) - fundCoins := sdk.NewCoins(sdk.NewCoin(pioconfig.GetProvenanceConfig().FeeDenom, sdk.NewInt(290500010))) - require.NoError(t, testutil.FundAccount(app.BankKeeper, ctx, acct1.GetAddress(), fundCoins), + ctx := app.BaseApp.NewContext(false) + require.NoError(t, app.AccountKeeper.Params.Set(ctx, authtypes.DefaultParams()), "Setting default account params") + fundCoins := sdk.NewCoins(sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 290_500_010)) + require.NoError(t, testutil.FundAccount(ctx, app.BankKeeper, acct1.GetAddress(), fundCoins), "funding acct1 with 290500010nhash") // tx with a fee associated with msg type and account has funds - msg := banktypes.NewMsgSend(addr, addr2, sdk.NewCoins(sdk.NewCoin("atom", sdk.NewInt(50)))) + msg := banktypes.NewMsgSend(addr, addr2, sdk.NewCoins(sdk.NewInt64Coin("atom", 50))) fees := sdk.NewCoins(sdk.NewInt64Coin("atom", 150)) acct1 = app.AccountKeeper.GetAccount(ctx, acct1.GetAddress()).(*authtypes.BaseAccount) seq := acct1.Sequence @@ -1700,7 +1757,7 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc //go through 5 blocks, but take a long time to cut blocks. for height := int64(2); height < int64(7); height++ { - app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: height, Time: time.Now().UTC()}}) + // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: height, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block require.NoError(t, acct1.SetSequence(seq), "[%d]: SetSequence(%d)", height, seq) tx1, err1 := SignTx(NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) require.NoError(t, err1, "[%d]: SignTx", height) @@ -1709,7 +1766,7 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc assert.NotEmpty(t, res.GetEvents(), "[%d]: res.GetEvents()", height) // wait for claim period to end (claim period is 1s) time.Sleep(1500 * time.Millisecond) - app.EndBlock(abci.RequestEndBlock{Height: height}) + // app.EndBlock(abci.RequestEndBlock{Height: height}) // TODO[1760]: finalize-block app.Commit() seq = seq + 1 } @@ -1766,61 +1823,64 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc // get the accoutn balances of acct1 balance := app.BankKeeper.GetAllBalances(ctx, acct1.GetAddress()) // claim rewards for the address - app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: 7, Time: time.Now().UTC()}}) - msgClaim := rewardtypes.NewMsgClaimAllRewardsRequest(acct1.Address) - require.NoError(t, acct1.SetSequence(seq), "SetSequence(%d)", seq) - // needs extra gas - txClaim, errClaim := SignTxAndGetBytes(300000, fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msgClaim) - require.NoError(t, errClaim, "SignTxAndGetBytes") - res := app.DeliverTx(abci.RequestDeliverTx{Tx: txClaim}) - require.Equal(t, true, res.IsOK(), "res=%+v", res) - // unmarshal the TxMsgData - var protoResult sdk.TxMsgData - require.NoError(t, proto.Unmarshal(res.Data, &protoResult), "unmarshalling protoResult") - require.Len(t, protoResult.MsgResponses, 1, "protoResult.MsgResponses") - require.Equal(t, protoResult.MsgResponses[0].GetTypeUrl(), "/provenance.reward.v1.MsgClaimAllRewardsResponse", - "protoResult.MsgResponses[0].GetTypeUrl()") - claimResponse := rewardtypes.MsgClaimAllRewardsResponse{} - require.NoError(t, claimResponse.Unmarshal(protoResult.MsgResponses[0].Value), "unmarshalling claimResponse") - assert.Equal(t, sdk.NewInt64Coin("hotdog", 50_000_000_000).String(), - claimResponse.TotalRewardClaim[0].String(), "TotalRewardClaim") - if assert.NotEmpty(t, claimResponse.ClaimDetails, "ClaimDetails") { - assert.Len(t, claimResponse.ClaimDetails, 2) - - assert.Equal(t, 1, int(claimResponse.ClaimDetails[0].RewardProgramId), "[0].RewardProgramId") + // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: 7, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block + // TODO[1760]: finalize-block: Uncomment these lines. + /* + msgClaim := rewardtypes.NewMsgClaimAllRewardsRequest(acct1.Address) + require.NoError(t, acct1.SetSequence(seq), "SetSequence(%d)", seq) + // needs extra gas + txClaim, errClaim := SignTxAndGetBytes(300000, fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msgClaim) + require.NoError(t, errClaim, "SignTxAndGetBytes") + res := app.DeliverTx(abci.RequestDeliverTx{Tx: txClaim}) + require.Equal(t, true, res.IsOK(), "res=%+v", res) + // unmarshal the TxMsgData + var protoResult sdk.TxMsgData + require.NoError(t, proto.Unmarshal(res.Data, &protoResult), "unmarshalling protoResult") + require.Len(t, protoResult.MsgResponses, 1, "protoResult.MsgResponses") + require.Equal(t, protoResult.MsgResponses[0].GetTypeUrl(), "/provenance.reward.v1.MsgClaimAllRewardsResponse", + "protoResult.MsgResponses[0].GetTypeUrl()") + claimResponse := rewardtypes.MsgClaimAllRewardsResponse{} + require.NoError(t, claimResponse.Unmarshal(protoResult.MsgResponses[0].Value), "unmarshalling claimResponse") assert.Equal(t, sdk.NewInt64Coin("hotdog", 50_000_000_000).String(), - claimResponse.ClaimDetails[0].TotalRewardClaim.String(), "[0].TotalRewardClaim") - if assert.NotEmpty(t, claimResponse.ClaimDetails[0].ClaimedRewardPeriodDetails, "[0].ClaimedRewardPeriodDetails") { - assert.Len(t, claimResponse.ClaimDetails[0].ClaimedRewardPeriodDetails, 5, "[0].ClaimedRewardPeriodDetails") - assert.Equal(t, sdk.NewInt64Coin("hotdog", 10_000_000_000).String(), - claimResponse.ClaimDetails[0].ClaimedRewardPeriodDetails[0].ClaimPeriodReward.String(), "[0].[0].ClaimPeriodReward") - } + claimResponse.TotalRewardClaim[0].String(), "TotalRewardClaim") + if assert.NotEmpty(t, claimResponse.ClaimDetails, "ClaimDetails") { + assert.Len(t, claimResponse.ClaimDetails, 2) + + assert.Equal(t, 1, int(claimResponse.ClaimDetails[0].RewardProgramId), "[0].RewardProgramId") + assert.Equal(t, sdk.NewInt64Coin("hotdog", 50_000_000_000).String(), + claimResponse.ClaimDetails[0].TotalRewardClaim.String(), "[0].TotalRewardClaim") + if assert.NotEmpty(t, claimResponse.ClaimDetails[0].ClaimedRewardPeriodDetails, "[0].ClaimedRewardPeriodDetails") { + assert.Len(t, claimResponse.ClaimDetails[0].ClaimedRewardPeriodDetails, 5, "[0].ClaimedRewardPeriodDetails") + assert.Equal(t, sdk.NewInt64Coin("hotdog", 10_000_000_000).String(), + claimResponse.ClaimDetails[0].ClaimedRewardPeriodDetails[0].ClaimPeriodReward.String(), "[0].[0].ClaimPeriodReward") + } - assert.Equal(t, 2, int(claimResponse.ClaimDetails[1].RewardProgramId), "[1].RewardProgramId") - assert.Equal(t, sdk.NewInt64Coin("nhash", 50_000_000_000).String(), - claimResponse.ClaimDetails[1].TotalRewardClaim.String(), "[1].TotalRewardClaim") - if assert.NotEmpty(t, claimResponse.ClaimDetails[1].ClaimedRewardPeriodDetails, "[1].ClaimedRewardPeriodDetails") { - assert.Len(t, claimResponse.ClaimDetails[1].ClaimedRewardPeriodDetails, 5, "[1].ClaimedRewardPeriodDetails") - assert.Equal(t, sdk.NewInt64Coin("nhash", 10_000_000_000).String(), - claimResponse.ClaimDetails[1].ClaimedRewardPeriodDetails[0].ClaimPeriodReward.String(), "[1].[0].ClaimPeriodReward") + assert.Equal(t, 2, int(claimResponse.ClaimDetails[1].RewardProgramId), "[1].RewardProgramId") + assert.Equal(t, sdk.NewInt64Coin("nhash", 50_000_000_000).String(), + claimResponse.ClaimDetails[1].TotalRewardClaim.String(), "[1].TotalRewardClaim") + if assert.NotEmpty(t, claimResponse.ClaimDetails[1].ClaimedRewardPeriodDetails, "[1].ClaimedRewardPeriodDetails") { + assert.Len(t, claimResponse.ClaimDetails[1].ClaimedRewardPeriodDetails, 5, "[1].ClaimedRewardPeriodDetails") + assert.Equal(t, sdk.NewInt64Coin("nhash", 10_000_000_000).String(), + claimResponse.ClaimDetails[1].ClaimedRewardPeriodDetails[0].ClaimPeriodReward.String(), "[1].[0].ClaimPeriodReward") + } } - } + */ - app.EndBlock(abci.RequestEndBlock{Height: 7}) + // app.EndBlock(abci.RequestEndBlock{Height: 7}) // TODO[1760]: finalize-block app.Commit() balanceLater := app.BankKeeper.GetAllBalances(ctx, acct1.GetAddress()) // make sure account balance has the tokens balanceChangeHotDog := balanceLater.AmountOf("hotdog").Sub(balance.AmountOf("hotdog")) - assert.Equal(t, sdk.NewInt(50_000_000_000).String(), balanceChangeHotDog.String(), "balance change hotdog") + assert.Equal(t, sdkmath.NewInt(50_000_000_000).String(), balanceChangeHotDog.String(), "balance change hotdog") balanceLater = app.BankKeeper.GetAllBalances(ctx, acct1.GetAddress()) // make sure account balance has the tokens balanceChangeNHash := balanceLater.AmountOf("nhash").Sub(balance.AmountOf("nhash")) - assert.Equal(t, sdk.NewInt(50_000_000_000).String(), balanceChangeNHash.String(), "balance change nhash") + assert.Equal(t, sdkmath.NewInt(50_000_000_000).String(), balanceChangeNHash.String(), "balance change nhash") } func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAccountNotFunded(t *testing.T) { - encCfg := sdksim.MakeTestEncodingConfig() + encCfg := moduletestutil.MakeTestEncodingConfig() priv, _, addr := testdata.KeyTestPubAddr() _, _, addr2 := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr, priv.PubKey(), 0, 0) @@ -1831,8 +1891,8 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc "description", 1, acct1.Address, - sdk.NewCoin("nhash", sdk.NewInt(1000_000_000_000)), - sdk.NewCoin("nhash", sdk.NewInt(10_000_000_000)), + sdk.NewInt64Coin("nhash", 1000_000_000_000), + sdk.NewInt64Coin("nhash", 10_000_000_000), time.Now().Add(100*time.Millisecond), uint64(1), 100, @@ -1844,7 +1904,7 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc Transfer: &rewardtypes.ActionTransfer{ MinimumActions: 0, MaximumActions: 10, - MinimumDelegationAmount: sdk.NewCoin("nhash", sdk.ZeroInt()), + MinimumDelegationAmount: sdk.NewInt64Coin("nhash", 0), }, }, }, @@ -1858,14 +1918,14 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc []authtypes.GenesisAccount{acct1}, nil, banktypes.Balance{Address: addr.String(), Coins: acct1Balance}, ) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) - app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) - fundCoins := sdk.NewCoins(sdk.NewCoin(pioconfig.GetProvenanceConfig().FeeDenom, sdk.NewInt(290500010))) - require.NoError(t, testutil.FundAccount(app.BankKeeper, ctx, acct1.GetAddress(), fundCoins), + ctx := app.BaseApp.NewContext(false) + require.NoError(t, app.AccountKeeper.Params.Set(ctx, authtypes.DefaultParams()), "Setting default account params") + fundCoins := sdk.NewCoins(sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 290_500_010)) + require.NoError(t, testutil.FundAccount(ctx, app.BankKeeper, acct1.GetAddress(), fundCoins), "funding acct1 with 290500010nhash") // tx with a fee associated with msg type and account has funds - msg := banktypes.NewMsgSend(addr, addr2, sdk.NewCoins(sdk.NewCoin("atom", sdk.NewInt(50)))) + msg := banktypes.NewMsgSend(addr, addr2, sdk.NewCoins(sdk.NewInt64Coin("atom", 50))) fees := sdk.NewCoins(sdk.NewInt64Coin("atom", 150)) acct1 = app.AccountKeeper.GetAccount(ctx, acct1.GetAddress()).(*authtypes.BaseAccount) seq := acct1.Sequence @@ -1873,7 +1933,7 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc //go through 5 blocks, but take a long time to cut blocks. for height := int64(2); height < int64(7); height++ { - app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: height, Time: time.Now().UTC()}}) + // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: height, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block require.NoError(t, acct1.SetSequence(seq), "[%d]: SetSequence(%d)", height, seq) tx1, err1 := SignTx(NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) require.NoError(t, err1, "[%d]: SignTx", height) @@ -1882,7 +1942,7 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc assert.NotEmpty(t, res.GetEvents(), "[%d]: res.GetEvents()", height) // wait for claim period to end (claim period is 1s) time.Sleep(1500 * time.Millisecond) - app.EndBlock(abci.RequestEndBlock{Height: height}) + // app.EndBlock(abci.RequestEndBlock{Height: height}) // TODO[1760]: finalize-block app.Commit() seq = seq + 1 } @@ -1937,19 +1997,22 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc } // claim rewards for the address - app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: 7, Time: time.Now().UTC()}}) - msgClaim := rewardtypes.NewMsgClaimAllRewardsRequest(acct1.Address) - require.NoError(t, acct1.SetSequence(seq), "SetSequence(%d)", seq) - txClaim, errClaim := SignTxAndGetBytes( - NewTestRewardsGasLimit(), - fees, - encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), - msgClaim, - ) - require.NoError(t, errClaim, "SignTxAndGetBytes") - res := app.DeliverTx(abci.RequestDeliverTx{Tx: txClaim}) - require.Equal(t, true, res.IsErr(), "res=%+v", res) - app.EndBlock(abci.RequestEndBlock{Height: 7}) + // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: 7, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block + // TODO[1760]: finalize-block: Uncomment these lines. + /* + msgClaim := rewardtypes.NewMsgClaimAllRewardsRequest(acct1.Address) + require.NoError(t, acct1.SetSequence(seq), "SetSequence(%d)", seq) + txClaim, errClaim := SignTxAndGetBytes( + NewTestRewardsGasLimit(), + fees, + encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), + msgClaim, + ) + require.NoError(t, errClaim, "SignTxAndGetBytes") + res := app.DeliverTx(abci.RequestDeliverTx{Tx: txClaim}) + require.Equal(t, true, res.IsErr(), "res=%+v", res) + */ + // app.EndBlock(abci.RequestEndBlock{Height: 7}) // TODO[1760]: finalize-block app.Commit() } @@ -1957,7 +2020,7 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc // this tests has transfers from an account which DOES NOT have the minimum delegation // amount needed to get a share func TestRewardsProgramStartPerformQualifyingActionsCriteriaNotMet(t *testing.T) { - encCfg := sdksim.MakeTestEncodingConfig() + encCfg := moduletestutil.MakeTestEncodingConfig() priv, _, addr := testdata.KeyTestPubAddr() _, _, addr2 := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr, priv.PubKey(), 0, 0) @@ -1968,8 +2031,8 @@ func TestRewardsProgramStartPerformQualifyingActionsCriteriaNotMet(t *testing.T) "description", 1, acct1.Address, - sdk.NewCoin("nhash", sdk.NewInt(1000_000_000_000)), - sdk.NewCoin("nhash", sdk.NewInt(10_000_000_000)), + sdk.NewInt64Coin("nhash", 1000_000_000_000), + sdk.NewInt64Coin("nhash", 10_000_000_000), time.Now().Add(100*time.Millisecond), uint64(1), 100, @@ -1983,7 +2046,7 @@ func TestRewardsProgramStartPerformQualifyingActionsCriteriaNotMet(t *testing.T) MaximumActions: 10, MinimumDelegationAmount: sdk.Coin{ Denom: "nhash", - Amount: sdk.NewInt(10_000_000_000)}, + Amount: sdkmath.NewInt(10_000_000_000)}, }, }, }, @@ -1996,14 +2059,14 @@ func TestRewardsProgramStartPerformQualifyingActionsCriteriaNotMet(t *testing.T) []authtypes.GenesisAccount{acct1}, nil, banktypes.Balance{Address: addr.String(), Coins: acct1Balance}, ) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) - app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) - fundCoins := sdk.NewCoins(sdk.NewCoin(pioconfig.GetProvenanceConfig().FeeDenom, sdk.NewInt(290500010))) - require.NoError(t, testutil.FundAccount(app.BankKeeper, ctx, acct1.GetAddress(), fundCoins), + ctx := app.BaseApp.NewContext(false) + require.NoError(t, app.AccountKeeper.Params.Set(ctx, authtypes.DefaultParams()), "Setting default account params") + fundCoins := sdk.NewCoins(sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 290_500_010)) + require.NoError(t, testutil.FundAccount(ctx, app.BankKeeper, acct1.GetAddress(), fundCoins), "funding acct1 with 290500010nhash") // tx with a fee associated with msg type and account has funds - msg := banktypes.NewMsgSend(addr, addr2, sdk.NewCoins(sdk.NewCoin("atom", sdk.NewInt(50)))) + msg := banktypes.NewMsgSend(addr, addr2, sdk.NewCoins(sdk.NewInt64Coin("atom", 50))) fees := sdk.NewCoins(sdk.NewInt64Coin("atom", 150)) acct1 = app.AccountKeeper.GetAccount(ctx, acct1.GetAddress()).(*authtypes.BaseAccount) seq := acct1.Sequence @@ -2011,7 +2074,7 @@ func TestRewardsProgramStartPerformQualifyingActionsCriteriaNotMet(t *testing.T) //go through 5 blocks, but take a long time to cut blocks. for height := int64(2); height < int64(7); height++ { - app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: height, Time: time.Now().UTC()}}) + // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: height, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block require.NoError(t, acct1.SetSequence(seq), "[%d]: SetSequence(%d)", height, seq) tx1, err1 := SignTx(NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) require.NoError(t, err1, "[%d]: SignTx", height) @@ -2019,7 +2082,7 @@ func TestRewardsProgramStartPerformQualifyingActionsCriteriaNotMet(t *testing.T) require.NoError(t, errFromDeliverTx, "[%d]: SimDeliver", height) assert.NotEmpty(t, res.GetEvents(), "[%d]: res.GetEvents()", height) time.Sleep(1100 * time.Millisecond) - app.EndBlock(abci.RequestEndBlock{Height: height}) + // app.EndBlock(abci.RequestEndBlock{Height: height}) // TODO[1760]: finalize-block app.Commit() seq = seq + 1 } @@ -2044,7 +2107,7 @@ func TestRewardsProgramStartPerformQualifyingActionsCriteriaNotMet(t *testing.T) // transfers which map to QualifyingAction map to the delegated address // delegation threshold is met func TestRewardsProgramStartPerformQualifyingActionsTransferAndDelegationsPresent(t *testing.T) { - encCfg := sdksim.MakeTestEncodingConfig() + encCfg := moduletestutil.MakeTestEncodingConfig() priv, pubKey, addr := testdata.KeyTestPubAddr() _, pubKey2, addr2 := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr, priv.PubKey(), 0, 0) @@ -2055,8 +2118,8 @@ func TestRewardsProgramStartPerformQualifyingActionsTransferAndDelegationsPresen "description", 1, acct1.Address, - sdk.NewCoin("nhash", sdk.NewInt(1000_000_000_000)), - sdk.NewCoin("nhash", sdk.NewInt(10_000_000_000)), + sdk.NewInt64Coin("nhash", 1000_000_000_000), + sdk.NewInt64Coin("nhash", 10_000_000_000), time.Now().Add(100*time.Millisecond), uint64(1), 100, @@ -2070,7 +2133,7 @@ func TestRewardsProgramStartPerformQualifyingActionsTransferAndDelegationsPresen MaximumActions: 10, MinimumDelegationAmount: sdk.Coin{ Denom: "nhash", - Amount: sdk.NewInt(100)}, + Amount: sdkmath.NewInt(100)}, }, }, }, @@ -2083,14 +2146,14 @@ func TestRewardsProgramStartPerformQualifyingActionsTransferAndDelegationsPresen []authtypes.GenesisAccount{acct1}, createValSet(t, pubKey, pubKey2), banktypes.Balance{Address: addr.String(), Coins: acct1Balance}, ) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) - app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) - fundCoins := sdk.NewCoins(sdk.NewCoin(pioconfig.GetProvenanceConfig().FeeDenom, sdk.NewInt(290500010))) - require.NoError(t, testutil.FundAccount(app.BankKeeper, ctx, acct1.GetAddress(), fundCoins), + ctx := app.BaseApp.NewContext(false) + require.NoError(t, app.AccountKeeper.Params.Set(ctx, authtypes.DefaultParams()), "Setting default account params") + fundCoins := sdk.NewCoins(sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 290_500_010)) + require.NoError(t, testutil.FundAccount(ctx, app.BankKeeper, acct1.GetAddress(), fundCoins), "funding acct1 with 290500010nhash") // tx with a fee associated with msg type and account has funds - msg := banktypes.NewMsgSend(addr, addr2, sdk.NewCoins(sdk.NewCoin("atom", sdk.NewInt(50)))) + msg := banktypes.NewMsgSend(addr, addr2, sdk.NewCoins(sdk.NewInt64Coin("atom", 50))) fees := sdk.NewCoins(sdk.NewInt64Coin("atom", 150)) acct1 = app.AccountKeeper.GetAccount(ctx, acct1.GetAddress()).(*authtypes.BaseAccount) seq := acct1.Sequence @@ -2099,7 +2162,7 @@ func TestRewardsProgramStartPerformQualifyingActionsTransferAndDelegationsPresen //go through 5 blocks, but take a time to cut blocks > claim period time interval. for height := int64(2); height < int64(7); height++ { - app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: height, Time: time.Now().UTC()}}) + // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: height, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block require.NoError(t, acct1.SetSequence(seq), "[%d]: SetSequence(%d)", height, seq) tx1, err1 := SignTx(NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) require.NoError(t, err1, "[%d]: SignTx", height) @@ -2107,7 +2170,7 @@ func TestRewardsProgramStartPerformQualifyingActionsTransferAndDelegationsPresen require.NoError(t, errFromDeliverTx, "[%d]: SimDeliver", height) assert.NotEmpty(t, res.GetEvents(), "[%d]: res.GetEvents()", height) time.Sleep(1100 * time.Millisecond) - app.EndBlock(abci.RequestEndBlock{Height: height}) + // app.EndBlock(abci.RequestEndBlock{Height: height}) // TODO[1760]: finalize-block app.Commit() seq = seq + 1 } @@ -2149,7 +2212,7 @@ func TestRewardsProgramStartPerformQualifyingActionsTransferAndDelegationsPresen // transfers which map to QualifyingAction map to the delegated address // delegation threshold is *not* met func TestRewardsProgramStartPerformQualifyingActionsThreshHoldNotMet(t *testing.T) { - encCfg := sdksim.MakeTestEncodingConfig() + encCfg := moduletestutil.MakeTestEncodingConfig() priv, pubKey, addr := testdata.KeyTestPubAddr() _, pubKey2, addr2 := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr, priv.PubKey(), 0, 0) @@ -2160,8 +2223,8 @@ func TestRewardsProgramStartPerformQualifyingActionsThreshHoldNotMet(t *testing. "description", 1, acct1.Address, - sdk.NewCoin("nhash", sdk.NewInt(1000_000_000_000)), - sdk.NewCoin("nhash", sdk.NewInt(10_000_000_000)), + sdk.NewInt64Coin("nhash", 1000_000_000_000), + sdk.NewInt64Coin("nhash", 10_000_000_000), time.Now().Add(100*time.Millisecond), uint64(1), 100, @@ -2175,7 +2238,7 @@ func TestRewardsProgramStartPerformQualifyingActionsThreshHoldNotMet(t *testing. MaximumActions: 10, MinimumDelegationAmount: sdk.Coin{ Denom: "nhash", - Amount: sdk.NewInt(100000000)}, + Amount: sdkmath.NewInt(100_000_000)}, }, }, }, @@ -2188,14 +2251,14 @@ func TestRewardsProgramStartPerformQualifyingActionsThreshHoldNotMet(t *testing. []authtypes.GenesisAccount{acct1}, createValSet(t, pubKey, pubKey2), banktypes.Balance{Address: addr.String(), Coins: acct1Balance}, ) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) - app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) - fundCoins := sdk.NewCoins(sdk.NewCoin(pioconfig.GetProvenanceConfig().FeeDenom, sdk.NewInt(290500010))) - require.NoError(t, testutil.FundAccount(app.BankKeeper, ctx, acct1.GetAddress(), fundCoins), + ctx := app.BaseApp.NewContext(false) + require.NoError(t, app.AccountKeeper.Params.Set(ctx, authtypes.DefaultParams()), "Setting default account params") + fundCoins := sdk.NewCoins(sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 290_500_010)) + require.NoError(t, testutil.FundAccount(ctx, app.BankKeeper, acct1.GetAddress(), fundCoins), "funding acct1 with 290500010nhash") // tx with a fee associated with msg type and account has funds - msg := banktypes.NewMsgSend(addr, addr2, sdk.NewCoins(sdk.NewCoin("atom", sdk.NewInt(50)))) + msg := banktypes.NewMsgSend(addr, addr2, sdk.NewCoins(sdk.NewInt64Coin("atom", 50))) fees := sdk.NewCoins(sdk.NewInt64Coin("atom", 150)) acct1 = app.AccountKeeper.GetAccount(ctx, acct1.GetAddress()).(*authtypes.BaseAccount) seq := acct1.Sequence @@ -2203,7 +2266,7 @@ func TestRewardsProgramStartPerformQualifyingActionsThreshHoldNotMet(t *testing. //go through 5 blocks, but take a long time to cut blocks. for height := int64(2); height < int64(7); height++ { - app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: height, Time: time.Now().UTC()}}) + // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: height, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block require.NoError(t, acct1.SetSequence(seq), "[%d]: SetSequence(%d)", height, seq) tx1, err1 := SignTx(NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) require.NoError(t, err1, "[%d]: SignTx", height) @@ -2211,7 +2274,7 @@ func TestRewardsProgramStartPerformQualifyingActionsThreshHoldNotMet(t *testing. require.NoError(t, errFromDeliverTx, "[%d]: SimDeliver", height) assert.NotEmpty(t, res.GetEvents(), "[%d]: res.GetEvents()", height) time.Sleep(1100 * time.Millisecond) - app.EndBlock(abci.RequestEndBlock{Height: height}) + // app.EndBlock(abci.RequestEndBlock{Height: height}) // TODO[1760]: finalize-block app.Commit() seq = seq + 1 } @@ -2233,7 +2296,7 @@ func TestRewardsProgramStartPerformQualifyingActionsThreshHoldNotMet(t *testing. } func TestRewardsProgramStartPerformQualifyingActions_Vote(t *testing.T) { - encCfg := sdksim.MakeTestEncodingConfig() + encCfg := moduletestutil.MakeTestEncodingConfig() priv, _, addr := testdata.KeyTestPubAddr() //_, _, addr2 := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr, priv.PubKey(), 0, 0) @@ -2248,8 +2311,8 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote(t *testing.T) { "description", 1, acct1.Address, - sdk.NewCoin("nhash", sdk.NewInt(1000_000_000_000)), - sdk.NewCoin("nhash", sdk.NewInt(10_000_000_000)), + sdk.NewInt64Coin("nhash", 1000_000_000_000), + sdk.NewInt64Coin("nhash", 10_000_000_000), time.Now().Add(100*time.Millisecond), uint64(30), 10, @@ -2261,7 +2324,7 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote(t *testing.T) { Vote: &rewardtypes.ActionVote{ MinimumActions: 0, MaximumActions: 10, - MinimumDelegationAmount: sdk.NewCoin("nhash", sdk.ZeroInt()), + MinimumDelegationAmount: sdk.NewInt64Coin("nhash", 0), }, }, }, @@ -2274,10 +2337,10 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote(t *testing.T) { []authtypes.GenesisAccount{acct1}, nil, banktypes.Balance{Address: addr.String(), Coins: acct1Balance}, ) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) - app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) - fundCoins := sdk.NewCoins(sdk.NewCoin(pioconfig.GetProvenanceConfig().FeeDenom, sdk.NewInt(290500010))) - require.NoError(t, testutil.FundAccount(app.BankKeeper, ctx, acct1.GetAddress(), fundCoins), + ctx := app.BaseApp.NewContext(false) + require.NoError(t, app.AccountKeeper.Params.Set(ctx, authtypes.DefaultParams()), "Setting default account params") + fundCoins := sdk.NewCoins(sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 290_500_010)) + require.NoError(t, testutil.FundAccount(ctx, app.BankKeeper, acct1.GetAddress(), fundCoins), "funding acct1 with 290500010nhash") coinsPos := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 100000000)) msg, err := govtypesv1beta1.NewMsgSubmitProposal( @@ -2291,7 +2354,7 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote(t *testing.T) { seq := acct1.Sequence time.Sleep(200 * time.Millisecond) - app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: 2, Time: time.Now().UTC()}}) + // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: 2, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block txGov, err := SignTx( NewTestRewardsGasLimit(), sdk.NewCoins(sdk.NewInt64Coin("atom", 150), sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 1_190_500_000)), @@ -2304,25 +2367,24 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote(t *testing.T) { require.NoError(t, errFromDeliverTx, "SimDeliver") assert.NotEmpty(t, res.GetEvents(), "res.GetEvents()") - app.EndBlock(abci.RequestEndBlock{Height: 2}) + // app.EndBlock(abci.RequestEndBlock{Height: 2}) // TODO[1760]: finalize-block app.Commit() seq = seq + 1 - proposal := app.GovKeeper.GetProposals(ctx) - require.NotEmpty(t, proposal, "proposal has to exist") + proposal := getLastProposal(t, ctx, app) // tx with a fee associated with msg type and account has funds - vote1 := govtypesv1beta1.NewMsgVote(addr, proposal[0].Id, govtypesv1beta1.OptionYes) + vote1 := govtypesv1beta1.NewMsgVote(addr, proposal.Id, govtypesv1beta1.OptionYes) for height := int64(3); height < int64(23); height++ { - app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: height, Time: time.Now().UTC()}}) + // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: height, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block require.NoError(t, acct1.SetSequence(seq), "[%d]: SetSequence(%d)", height, seq) tx1, err1 := SignTx(NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), vote1) require.NoError(t, err1, "[%d]: SignTx", height) _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), tx1) require.NoError(t, errFromDeliverTx, "[%d]: SimDeliver", height) assert.NotEmpty(t, res.GetEvents(), "[%d]: res.GetEvents()", height) - app.EndBlock(abci.RequestEndBlock{Height: height}) + // app.EndBlock(abci.RequestEndBlock{Height: height}) // TODO[1760]: finalize-block app.Commit() seq = seq + 1 } @@ -2344,7 +2406,7 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote(t *testing.T) { } func TestRewardsProgramStartPerformQualifyingActions_Vote_InvalidDelegations(t *testing.T) { - encCfg := sdksim.MakeTestEncodingConfig() + encCfg := moduletestutil.MakeTestEncodingConfig() priv1, pubKey1, addr1 := testdata.KeyTestPubAddr() priv2, _, addr2 := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr1, priv1.PubKey(), 0, 0) @@ -2360,8 +2422,8 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_InvalidDelegations(t * "description", 1, acct1.Address, - sdk.NewCoin("nhash", sdk.NewInt(1000_000_000_000)), - sdk.NewCoin("nhash", sdk.NewInt(10_000_000_000)), + sdk.NewInt64Coin("nhash", 1000_000_000_000), + sdk.NewInt64Coin("nhash", 10_000_000_000), time.Now().Add(100*time.Millisecond), uint64(30), 10, @@ -2373,7 +2435,7 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_InvalidDelegations(t * Vote: &rewardtypes.ActionVote{ MinimumActions: 0, MaximumActions: 10, - MinimumDelegationAmount: sdk.NewCoin("nhash", sdk.NewInt(1000)), + MinimumDelegationAmount: sdk.NewInt64Coin("nhash", 1000), }, }, }, @@ -2387,10 +2449,10 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_InvalidDelegations(t * banktypes.Balance{Address: addr1.String(), Coins: acctBalance}, banktypes.Balance{Address: addr2.String(), Coins: acctBalance}, ) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) - app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) - fundCoins := sdk.NewCoins(sdk.NewCoin(pioconfig.GetProvenanceConfig().FeeDenom, sdk.NewInt(290500010))) - require.NoError(t, testutil.FundAccount(app.BankKeeper, ctx, acct2.GetAddress(), fundCoins), + ctx := app.BaseApp.NewContext(false) + require.NoError(t, app.AccountKeeper.Params.Set(ctx, authtypes.DefaultParams()), "Setting default account params") + fundCoins := sdk.NewCoins(sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 290_500_010)) + require.NoError(t, testutil.FundAccount(ctx, app.BankKeeper, acct2.GetAddress(), fundCoins), "funding acct2 with 290500010nhash") coinsPos := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 100000000)) msg, err := govtypesv1beta1.NewMsgSubmitProposal( @@ -2402,7 +2464,7 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_InvalidDelegations(t * fees := sdk.NewCoins(sdk.NewInt64Coin("atom", 150)) time.Sleep(200 * time.Millisecond) - app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: 2, Time: time.Now().UTC()}}) + // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: 2, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block txGov, err := SignTx( NewTestRewardsGasLimit(), sdk.NewCoins(sdk.NewInt64Coin("atom", 150), sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 1_190_500_000)), @@ -2415,26 +2477,25 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_InvalidDelegations(t * require.NoError(t, errFromDeliverTx, "SimDeliver") assert.NotEmpty(t, res.GetEvents(), "res.GetEvents()") - app.EndBlock(abci.RequestEndBlock{Height: 2}) + // app.EndBlock(abci.RequestEndBlock{Height: 2}) // TODO[1760]: finalize-block app.Commit() - proposal := app.GovKeeper.GetProposals(ctx) - require.NotEmpty(t, proposal, "proposal has to exist") + proposal := getLastProposal(t, ctx, app) // tx with a fee associated with msg type and account has funds - vote2 := govtypesv1beta1.NewMsgVote(addr2, proposal[0].Id, govtypesv1beta1.OptionYes) + vote2 := govtypesv1beta1.NewMsgVote(addr2, proposal.Id, govtypesv1beta1.OptionYes) acct2 = app.AccountKeeper.GetAccount(ctx, acct2.GetAddress()).(*authtypes.BaseAccount) seq := acct2.Sequence for height := int64(3); height < int64(5); height++ { - app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: height, Time: time.Now().UTC()}}) + // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: height, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block require.NoError(t, acct2.SetSequence(seq), "[%d]: SetSequence(%d)", height, seq) tx1, err1 := SignTx(NewTestRewardsGasLimit(), fees, encCfg, priv2.PubKey(), priv2, *acct2, ctx.ChainID(), vote2) require.NoError(t, err1, "[%d]: SignTx", height) _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), tx1) require.NoError(t, errFromDeliverTx, "[%d]: SimDeliver", height) assert.NotEmpty(t, res.GetEvents(), "[%d]: res.GetEvents()", height) - app.EndBlock(abci.RequestEndBlock{Height: height}) + // app.EndBlock(abci.RequestEndBlock{Height: height}) // TODO[1760]: finalize-block app.Commit() seq = seq + 1 } @@ -2474,7 +2535,7 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_InvalidDelegations(t * } func TestRewardsProgramStartPerformQualifyingActions_Vote_ValidDelegations(t *testing.T) { - encCfg := sdksim.MakeTestEncodingConfig() + encCfg := moduletestutil.MakeTestEncodingConfig() priv, pubKey, addr := testdata.KeyTestPubAddr() _, pubKey2, _ := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr, priv.PubKey(), 0, 0) @@ -2489,8 +2550,8 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_ValidDelegations(t *te "description", 1, acct1.Address, - sdk.NewCoin("nhash", sdk.NewInt(1000_000_000_000)), - sdk.NewCoin("nhash", sdk.NewInt(10_000_000_000)), + sdk.NewInt64Coin("nhash", 1000_000_000_000), + sdk.NewInt64Coin("nhash", 10_000_000_000), time.Now().Add(100*time.Millisecond), uint64(30), 10, @@ -2502,7 +2563,7 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_ValidDelegations(t *te Vote: &rewardtypes.ActionVote{ MinimumActions: 0, MaximumActions: 10, - MinimumDelegationAmount: sdk.NewCoin("nhash", sdk.NewInt(1000)), + MinimumDelegationAmount: sdk.NewInt64Coin("nhash", 1000), }, }, }, @@ -2515,10 +2576,10 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_ValidDelegations(t *te []authtypes.GenesisAccount{acct1}, createValSet(t, pubKey, pubKey2), banktypes.Balance{Address: addr.String(), Coins: acct1Balance}, ) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) - app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) - fundCoins := sdk.NewCoins(sdk.NewCoin(pioconfig.GetProvenanceConfig().FeeDenom, sdk.NewInt(290500010))) - require.NoError(t, testutil.FundAccount(app.BankKeeper, ctx, acct1.GetAddress(), fundCoins), + ctx := app.BaseApp.NewContext(false) + require.NoError(t, app.AccountKeeper.Params.Set(ctx, authtypes.DefaultParams()), "Setting default account params") + fundCoins := sdk.NewCoins(sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 290_500_010)) + require.NoError(t, testutil.FundAccount(ctx, app.BankKeeper, acct1.GetAddress(), fundCoins), "funding acct1 with 290500010nhash") coinsPos := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 100000000)) msg, err := govtypesv1beta1.NewMsgSubmitProposal( @@ -2532,7 +2593,7 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_ValidDelegations(t *te seq := acct1.Sequence time.Sleep(200 * time.Millisecond) - app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: 2, Time: time.Now().UTC()}}) + // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: 2, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block txGov, err := SignTx( NewTestRewardsGasLimit(), sdk.NewCoins(sdk.NewInt64Coin("atom", 150), sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 1_190_500_000)), @@ -2545,26 +2606,25 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_ValidDelegations(t *te require.NoError(t, errFromDeliverTx, "SimDeliver") assert.NotEmpty(t, res.GetEvents(), "res.GetEvents()") - app.EndBlock(abci.RequestEndBlock{Height: 2}) + // app.EndBlock(abci.RequestEndBlock{Height: 2}) // TODO[1760]: finalize-block app.Commit() seq = seq + 1 - proposal := app.GovKeeper.GetProposals(ctx) - require.NotEmpty(t, proposal, "proposal has to exist") + proposal := getLastProposal(t, ctx, app) // tx with a fee associated with msg type and account has funds - vote1 := govtypesv1beta1.NewMsgVote(addr, proposal[0].Id, govtypesv1beta1.OptionYes) + vote1 := govtypesv1beta1.NewMsgVote(addr, proposal.Id, govtypesv1beta1.OptionYes) // threshold will be met after 10 actions for height := int64(3); height < int64(23); height++ { - app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: height, Time: time.Now().UTC()}}) + // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: height, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block require.NoError(t, acct1.SetSequence(seq), "[%d]: SetSequence(%d)", height, seq) tx1, err1 := SignTx(NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), vote1) require.NoError(t, err1, "[%d]: SignTx", height) _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), tx1) require.NoError(t, errFromDeliverTx, "[%d]: SimDeliver", height) assert.NotEmpty(t, res.GetEvents(), "[%d]: res.GetEvents()", height) - app.EndBlock(abci.RequestEndBlock{Height: height}) + // app.EndBlock(abci.RequestEndBlock{Height: height}) // TODO[1760]: finalize-block app.Commit() seq = seq + 1 } @@ -2592,7 +2652,7 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_ValidDelegations(t *te ) require.NoError(t, err, "RewardDistributionsByAddress") if assert.NotNil(t, byAddress, "byAddress") && assert.NotEmpty(t, byAddress.RewardAccountState, "RewardAccountState") { - assert.Equal(t, sdk.NewCoin("nhash", sdk.NewInt(10_000_000_000)).String(), + assert.Equal(t, sdk.NewInt64Coin("nhash", 10_000_000_000).String(), byAddress.RewardAccountState[0].TotalRewardClaim.String(), "TotalRewardClaim") assert.Equal(t, rewardtypes.RewardAccountState_CLAIM_STATUS_UNCLAIMABLE, byAddress.RewardAccountState[0].ClaimStatus, "ClaimStatus") @@ -2601,7 +2661,7 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_ValidDelegations(t *te // checks to see that votes are coming from an address that has delegated enough coins and is a validator, and gets the multiplier applied func TestRewardsProgramStartPerformQualifyingActions_Vote_ValidDelegations_Multiplier_Present(t *testing.T) { - encCfg := sdksim.MakeTestEncodingConfig() + encCfg := moduletestutil.MakeTestEncodingConfig() priv, pubKey, addr := testdata.KeyTestPubAddr() _, pubKey2, _ := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr, priv.PubKey(), 0, 0) @@ -2612,8 +2672,8 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_ValidDelegations_Multi "description", 1, acct1.Address, - sdk.NewCoin("nhash", sdk.NewInt(1000_000_000_000)), - sdk.NewCoin("nhash", sdk.NewInt(10_000_000_000)), + sdk.NewInt64Coin("nhash", 1000_000_000_000), + sdk.NewInt64Coin("nhash", 10_000_000_000), time.Now().Add(100*time.Millisecond), uint64(30), 10, @@ -2625,7 +2685,7 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_ValidDelegations_Multi Vote: &rewardtypes.ActionVote{ MinimumActions: 0, MaximumActions: 10, - MinimumDelegationAmount: sdk.NewCoin("nhash", sdk.NewInt(1000)), + MinimumDelegationAmount: sdk.NewInt64Coin("nhash", 1000), ValidatorMultiplier: 10, }, }, @@ -2637,10 +2697,10 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_ValidDelegations_Multi //err, bondedVal1, bondedVal2 := createTestValidators(pubKey, pubKey2, addr, addr2) app := piosimapp.SetupWithGenesisRewardsProgram(t, uint64(2), []rewardtypes.RewardProgram{rewardProgram}, []authtypes.GenesisAccount{acct1}, createValSet(t, pubKey, pubKey2), banktypes.Balance{Address: addr.String(), Coins: acct1Balance}) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) ctx.WithBlockTime(time.Now()) - app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) - require.NoError(t, testutil.FundAccount(app.BankKeeper, ctx, acct1.GetAddress(), sdk.NewCoins(sdk.NewCoin("nhash", sdk.NewInt(290500010))))) + require.NoError(t, app.AccountKeeper.Params.Set(ctx, authtypes.DefaultParams()), "Setting default account params") + require.NoError(t, testutil.FundAccount(ctx, app.BankKeeper, acct1.GetAddress(), sdk.NewCoins(sdk.NewInt64Coin("nhash", 290_500_010)))) coinsPos := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 100000000)) msg, err := govtypesv1beta1.NewMsgSubmitProposal( ContentFromProposalType("title", "description", govtypesv1beta1.ProposalTypeText), @@ -2655,35 +2715,34 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_ValidDelegations_Multi ctx.WithBlockTime(time.Now()) time.Sleep(200 * time.Millisecond) - app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: 2, Time: time.Now().UTC()}}) + // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: 2, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block txGov, err := SignTx(NewTestRewardsGasLimit(), sdk.NewCoins(sdk.NewInt64Coin("atom", 150), sdk.NewInt64Coin("nhash", 1_190_500_000)), encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) require.NoError(t, err) _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), txGov) require.NoError(t, errFromDeliverTx) - app.EndBlock(abci.RequestEndBlock{Height: 2}) + // app.EndBlock(abci.RequestEndBlock{Height: 2}) // TODO[1760]: finalize-block app.Commit() seq = seq + 1 - proposal := app.GovKeeper.GetProposals(ctx) + proposal := getLastProposal(t, ctx, app) - require.NotEmpty(t, proposal, "proposal has to exist") // tx with a fee associated with msg type and account has funds - vote1 := govtypesv1beta1.NewMsgVote(addr, proposal[0].Id, govtypesv1beta1.OptionYes) + vote1 := govtypesv1beta1.NewMsgVote(addr, proposal.Id, govtypesv1beta1.OptionYes) assert.NotEmpty(t, res.GetEvents(), "should have emitted an event.") // threshold will be met after 10 actions for height := int64(3); height < int64(23); height++ { - app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: height, Time: time.Now().UTC()}}) + // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: height, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block require.NoError(t, acct1.SetSequence(seq)) tx1, err1 := SignTx(NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), vote1) require.NoError(t, err1) _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), tx1) require.NoError(t, errFromDeliverTx) assert.NotEmpty(t, res.GetEvents(), "should have emitted an event.") - app.EndBlock(abci.RequestEndBlock{Height: height}) + // app.EndBlock(abci.RequestEndBlock{Height: height}) // TODO[1760]: finalize-block app.Commit() seq = seq + 1 } @@ -2692,9 +2751,9 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_ValidDelegations_Multi assert.Len(t, claimPeriodDistributions, 1, "claim period reward distributions should exist") assert.Equal(t, int64(100), claimPeriodDistributions[0].TotalShares, "shares should have accumulated to value of 100 ( 10 action * multiplier (10) shares") assert.Equal(t, false, claimPeriodDistributions[0].ClaimPeriodEnded, "claim period has not ended.") - assert.Equal(t, false, claimPeriodDistributions[0].RewardsPool.IsEqual(sdk.Coin{ + assert.Equal(t, false, claimPeriodDistributions[0].RewardsPool.Equal(sdk.Coin{ Denom: "nhash", - Amount: sdk.ZeroInt(), + Amount: sdkmath.ZeroInt(), }), "claim period has not ended so rewards still haven't been calculated(hence 0 coins)") accountState, err := app.RewardKeeper.GetRewardAccountState(ctx, uint64(1), uint64(1), acct1.Address) @@ -2707,13 +2766,13 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_ValidDelegations_Multi ClaimStatus: rewardtypes.RewardAccountState_CLAIM_STATUS_UNSPECIFIED, }) require.NoError(t, err) - assert.Equal(t, sdk.NewCoin("nhash", sdk.NewInt(10_000_000_000)).String(), byAddress.RewardAccountState[0].TotalRewardClaim.String(), "RewardDistributionsByAddress incorrect") + assert.Equal(t, sdk.NewInt64Coin("nhash", 10_000_000_000).String(), byAddress.RewardAccountState[0].TotalRewardClaim.String(), "RewardDistributionsByAddress incorrect") assert.Equal(t, rewardtypes.RewardAccountState_CLAIM_STATUS_UNCLAIMABLE, byAddress.RewardAccountState[0].ClaimStatus, "claim status incorrect") } // checks to see that votes are coming from an address that has delegated enough coins but is not a validator, hence does not get the multiplier applied func TestRewardsProgramStartPerformQualifyingActions_Vote_ValidDelegations_Multiplier_Present_But_NotValidatorVotes(t *testing.T) { - encCfg := sdksim.MakeTestEncodingConfig() + encCfg := moduletestutil.MakeTestEncodingConfig() priv, pubKey, addr := testdata.KeyTestPubAddr() _, pubKey2, _ := testdata.KeyTestPubAddr() // an address which is not a validator @@ -2727,8 +2786,8 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_ValidDelegations_Multi "description", 1, acct1.Address, - sdk.NewCoin("nhash", sdk.NewInt(1000_000_000_000)), - sdk.NewCoin("nhash", sdk.NewInt(10_000_000_000)), + sdk.NewInt64Coin("nhash", 1000_000_000_000), + sdk.NewInt64Coin("nhash", 10_000_000_000), time.Now().Add(100*time.Millisecond), uint64(30), 10, @@ -2740,7 +2799,7 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_ValidDelegations_Multi Vote: &rewardtypes.ActionVote{ MinimumActions: 0, MaximumActions: 10, - MinimumDelegationAmount: sdk.NewCoin("nhash", sdk.NewInt(1000)), + MinimumDelegationAmount: sdk.NewInt64Coin("nhash", 1000), ValidatorMultiplier: 10, }, }, @@ -2751,11 +2810,11 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_ValidDelegations_Multi rewardProgram.State = rewardtypes.RewardProgram_STATE_PENDING app := piosimapp.SetupWithGenesisRewardsProgram(t, uint64(2), []rewardtypes.RewardProgram{rewardProgram}, []authtypes.GenesisAccount{acct3}, createValSet(t, pubKey, pubKey2), banktypes.Balance{Address: addr.String(), Coins: acct1Balance}, banktypes.Balance{Address: addr3.String(), Coins: acct1Balance}) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) ctx.WithBlockTime(time.Now()) - app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) - require.NoError(t, testutil.FundAccount(app.BankKeeper, ctx, acct1.GetAddress(), sdk.NewCoins(sdk.NewCoin("nhash", sdk.NewInt(290500010))))) - require.NoError(t, testutil.FundAccount(app.BankKeeper, ctx, acct3.GetAddress(), sdk.NewCoins(sdk.NewCoin("nhash", sdk.NewInt(290500010))))) + require.NoError(t, app.AccountKeeper.Params.Set(ctx, authtypes.DefaultParams()), "Setting default account params") + require.NoError(t, testutil.FundAccount(ctx, app.BankKeeper, acct1.GetAddress(), sdk.NewCoins(sdk.NewInt64Coin("nhash", 290_500_010)))) + require.NoError(t, testutil.FundAccount(ctx, app.BankKeeper, acct3.GetAddress(), sdk.NewCoins(sdk.NewInt64Coin("nhash", 290_500_010)))) coinsPos := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 100000000)) msg, err := govtypesv1beta1.NewMsgSubmitProposal( ContentFromProposalType("title", "description", govtypesv1beta1.ProposalTypeText), @@ -2770,35 +2829,34 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_ValidDelegations_Multi ctx.WithBlockTime(time.Now()) time.Sleep(200 * time.Millisecond) - app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: 2, Time: time.Now().UTC()}}) + // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: 2, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block txGov, err := SignTx(NewTestRewardsGasLimit(), sdk.NewCoins(sdk.NewInt64Coin("atom", 150), sdk.NewInt64Coin("nhash", 1_190_500_000)), encCfg, priv3.PubKey(), priv3, *acct3, ctx.ChainID(), msg) require.NoError(t, err) _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), txGov) require.NoError(t, errFromDeliverTx) - app.EndBlock(abci.RequestEndBlock{Height: 2}) + // app.EndBlock(abci.RequestEndBlock{Height: 2}) // TODO[1760]: finalize-block app.Commit() seq = seq + 1 - proposal := app.GovKeeper.GetProposals(ctx) + proposal := getLastProposal(t, ctx, app) - require.NotEmpty(t, proposal, "proposal has to exist") // vote with an account which is not a validator - vote := govtypesv1beta1.NewMsgVote(addr3, proposal[0].Id, govtypesv1beta1.OptionYes) + vote := govtypesv1beta1.NewMsgVote(addr3, proposal.Id, govtypesv1beta1.OptionYes) assert.NotEmpty(t, res.GetEvents(), "should have emitted an event.") // threshold will be met after 10 actions for height := int64(3); height < int64(23); height++ { - app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: height, Time: time.Now().UTC()}}) + // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: height, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block require.NoError(t, acct3.SetSequence(seq)) tx1, err1 := SignTx(NewTestRewardsGasLimit(), fees, encCfg, priv3.PubKey(), priv3, *acct3, ctx.ChainID(), vote) require.NoError(t, err1) _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), tx1) require.NoError(t, errFromDeliverTx) assert.NotEmpty(t, res.GetEvents(), "should have emitted an event.") - app.EndBlock(abci.RequestEndBlock{Height: height}) + // app.EndBlock(abci.RequestEndBlock{Height: height}) // TODO[1760]: finalize-block app.Commit() seq = seq + 1 } @@ -2807,9 +2865,9 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_ValidDelegations_Multi assert.Len(t, claimPeriodDistributions, 1, "claim period reward distributions should exist") assert.Equal(t, int64(10), claimPeriodDistributions[0].TotalShares, "shares should have accumulated to value of 10, ( 10 action leading to 1 share each) (no multiplier is applied) ") assert.Equal(t, false, claimPeriodDistributions[0].ClaimPeriodEnded, "claim period has not ended.") - assert.Equal(t, false, claimPeriodDistributions[0].RewardsPool.IsEqual(sdk.Coin{ + assert.Equal(t, false, claimPeriodDistributions[0].RewardsPool.Equal(sdk.Coin{ Denom: "nhash", - Amount: sdk.ZeroInt(), + Amount: sdkmath.ZeroInt(), }), "claim period has not ended so rewards still haven't been calculated(hence 0 coins)") accountState, err := app.RewardKeeper.GetRewardAccountState(ctx, uint64(1), uint64(1), acct3.Address) @@ -2822,12 +2880,12 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_ValidDelegations_Multi ClaimStatus: rewardtypes.RewardAccountState_CLAIM_STATUS_UNSPECIFIED, }) require.NoError(t, err) - assert.Equal(t, sdk.NewCoin("nhash", sdk.NewInt(10_000_000_000)).String(), byAddress.RewardAccountState[0].TotalRewardClaim.String(), "RewardDistributionsByAddress incorrect") + assert.Equal(t, sdk.NewInt64Coin("nhash", 10_000_000_000).String(), byAddress.RewardAccountState[0].TotalRewardClaim.String(), "RewardDistributionsByAddress incorrect") assert.Equal(t, rewardtypes.RewardAccountState_CLAIM_STATUS_UNCLAIMABLE, byAddress.RewardAccountState[0].ClaimStatus, "claim status incorrect") } func TestRewardsProgramStartPerformQualifyingActions_Delegate_NoQualifyingActions(t *testing.T) { - encCfg := sdksim.MakeTestEncodingConfig() + encCfg := moduletestutil.MakeTestEncodingConfig() priv, pubKey, addr := testdata.KeyTestPubAddr() _, pubKey2, _ := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr, priv.PubKey(), 0, 0) @@ -2842,8 +2900,8 @@ func TestRewardsProgramStartPerformQualifyingActions_Delegate_NoQualifyingAction "description", 1, acct1.Address, - sdk.NewCoin("nhash", sdk.NewInt(1000_000_000_000)), - sdk.NewCoin("nhash", sdk.NewInt(10_000_000_000)), + sdk.NewInt64Coin("nhash", 1000_000_000_000), + sdk.NewInt64Coin("nhash", 10_000_000_000), time.Now().Add(100*time.Millisecond), uint64(30), 10, @@ -2869,10 +2927,10 @@ func TestRewardsProgramStartPerformQualifyingActions_Delegate_NoQualifyingAction banktypes.Balance{Address: addr.String(), Coins: acct1Balance}, ) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) - app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) - fundCoins := sdk.NewCoins(sdk.NewCoin(pioconfig.GetProvenanceConfig().FeeDenom, sdk.NewInt(290500010))) - require.NoError(t, testutil.FundAccount(app.BankKeeper, ctx, acct1.GetAddress(), fundCoins), + ctx := app.BaseApp.NewContext(false) + require.NoError(t, app.AccountKeeper.Params.Set(ctx, authtypes.DefaultParams()), "Setting default account params") + fundCoins := sdk.NewCoins(sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 290_500_010)) + require.NoError(t, testutil.FundAccount(ctx, app.BankKeeper, acct1.GetAddress(), fundCoins), "funding acct1 with 290500010nhash") coinsPos := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 100000000)) msg, err := govtypesv1beta1.NewMsgSubmitProposal( @@ -2886,7 +2944,7 @@ func TestRewardsProgramStartPerformQualifyingActions_Delegate_NoQualifyingAction seq := acct1.Sequence time.Sleep(110 * time.Millisecond) - app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: 2, Time: time.Now().UTC()}}) + // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: 2, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block txGov, err := SignTx( NewTestRewardsGasLimit(), sdk.NewCoins(sdk.NewInt64Coin("atom", 150), sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 1_190_500_000)), @@ -2899,25 +2957,24 @@ func TestRewardsProgramStartPerformQualifyingActions_Delegate_NoQualifyingAction require.NoError(t, errFromDeliverTx, "SimDeliver") assert.NotEmpty(t, res.GetEvents(), "res.GetEvents()") - app.EndBlock(abci.RequestEndBlock{Height: 2}) + // app.EndBlock(abci.RequestEndBlock{Height: 2}) // TODO[1760]: finalize-block app.Commit() seq = seq + 1 - proposal := app.GovKeeper.GetProposals(ctx) - require.NotEmpty(t, proposal, "proposal has to exist") + proposal := getLastProposal(t, ctx, app) // tx with a fee associated with msg type and account has funds - vote1 := govtypesv1beta1.NewMsgVote(addr, proposal[0].Id, govtypesv1beta1.OptionYes) + vote1 := govtypesv1beta1.NewMsgVote(addr, proposal.Id, govtypesv1beta1.OptionYes) for height := int64(3); height < int64(15); height++ { - app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: height, Time: time.Now().UTC()}}) + // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: height, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block require.NoError(t, acct1.SetSequence(seq), "[%d]: SetSequence(%d)", height, seq) tx1, err1 := SignTx(NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), vote1) require.NoError(t, err1, "[%d]: SignTx", height) _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), tx1) require.NoError(t, errFromDeliverTx, "[%d]: SimDeliver", height) assert.NotEmpty(t, res.GetEvents(), "[%d]: res.GetEvents()", height) - app.EndBlock(abci.RequestEndBlock{Height: height}) + // app.EndBlock(abci.RequestEndBlock{Height: height}) // TODO[1760]: finalize-block app.Commit() seq = seq + 1 } @@ -2950,7 +3007,7 @@ func TestRewardsProgramStartPerformQualifyingActions_Delegate_NoQualifyingAction } func TestRewardsProgramStartPerformQualifyingActions_Delegate_QualifyingActionsPresent(t *testing.T) { - encCfg := sdksim.MakeTestEncodingConfig() + encCfg := moduletestutil.MakeTestEncodingConfig() priv, pubKey, addr := testdata.KeyTestPubAddr() _, pubKey2, _ := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr, priv.PubKey(), 0, 0) @@ -2966,8 +3023,8 @@ func TestRewardsProgramStartPerformQualifyingActions_Delegate_QualifyingActionsP "description", 1, acct1.Address, - sdk.NewCoin("nhash", sdk.NewInt(1000_000_000_000)), - sdk.NewCoin("nhash", sdk.NewInt(10_000_000_000)), + sdk.NewInt64Coin("nhash", 1000_000_000_000), + sdk.NewInt64Coin("nhash", 10_000_000_000), time.Now().Add(100*time.Millisecond), uint64(30), 10, @@ -2981,8 +3038,8 @@ func TestRewardsProgramStartPerformQualifyingActions_Delegate_QualifyingActionsP MaximumActions: 10, MinimumDelegationAmount: &minDelegation, MaximumDelegationAmount: &maxDelegation, - MinimumActiveStakePercentile: sdk.NewDecWithPrec(0, 0), - MaximumActiveStakePercentile: sdk.NewDecWithPrec(100, 0), + MinimumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(0, 0), + MaximumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(100, 0), }, }, }, @@ -2997,10 +3054,10 @@ func TestRewardsProgramStartPerformQualifyingActions_Delegate_QualifyingActionsP banktypes.Balance{Address: addr.String(), Coins: acct1Balance}, ) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) - app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) - fundCoins := sdk.NewCoins(sdk.NewCoin(pioconfig.GetProvenanceConfig().FeeDenom, sdk.NewInt(290500010))) - require.NoError(t, testutil.FundAccount(app.BankKeeper, ctx, acct1.GetAddress(), fundCoins), + ctx := app.BaseApp.NewContext(false) + require.NoError(t, app.AccountKeeper.Params.Set(ctx, authtypes.DefaultParams()), "Setting default account params") + fundCoins := sdk.NewCoins(sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 290_500_010)) + require.NoError(t, testutil.FundAccount(ctx, app.BankKeeper, acct1.GetAddress(), fundCoins), "funding acct1 with 290500010nhash") coinsPos := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 100000000)) msg, err := govtypesv1beta1.NewMsgSubmitProposal( @@ -3014,7 +3071,7 @@ func TestRewardsProgramStartPerformQualifyingActions_Delegate_QualifyingActionsP seq := acct1.Sequence time.Sleep(200 * time.Millisecond) - app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: 2, Time: time.Now().UTC()}}) + // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: 2, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block txGov, err := SignTx( NewTestRewardsGasLimit(), sdk.NewCoins(sdk.NewInt64Coin("atom", 150), sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 1_190_500_000)), @@ -3027,19 +3084,18 @@ func TestRewardsProgramStartPerformQualifyingActions_Delegate_QualifyingActionsP require.NoError(t, errFromDeliverTx, "SimDeliver") assert.NotEmpty(t, res.GetEvents(), "res.GetEvents()") - app.EndBlock(abci.RequestEndBlock{Height: 2}) + // app.EndBlock(abci.RequestEndBlock{Height: 2}) // TODO[1760]: finalize-block app.Commit() seq = seq + 1 - proposal := app.GovKeeper.GetProposals(ctx) - require.NotEmpty(t, proposal, "proposal has to exist") + _ = getLastProposal(t, ctx, app) // Just making sure it exists. // tx with a fee associated with msg type and account has funds delAddr, _ := valSet.GetByIndex(0) - delegation := stakingtypes.NewMsgDelegate(addr, delAddr, sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(1000))) + delegation := stakingtypes.NewMsgDelegate(addr.String(), sdk.ValAddress(delAddr).String(), sdk.NewInt64Coin(sdk.DefaultBondDenom, 1000)) for height := int64(3); height < int64(23); height++ { - app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: height, Time: time.Now().UTC()}}) + // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: height, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block require.NoError(t, acct1.SetSequence(seq), "[%d]: SetSequence(%d)", height, seq) tx1, err1 := SignTx(NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), delegation) require.NoError(t, err1, "[%d]: SignTx", height) @@ -3047,7 +3103,7 @@ func TestRewardsProgramStartPerformQualifyingActions_Delegate_QualifyingActionsP require.NoError(t, errFromDeliverTx, "[%d]: SimDeliver", height) assert.NotEmpty(t, res.GetEvents(), "[%d]: res.GetEvents()", height) time.Sleep(100 * time.Millisecond) - app.EndBlock(abci.RequestEndBlock{Height: height}) + // app.EndBlock(abci.RequestEndBlock{Height: height}) // TODO[1760]: finalize-block app.Commit() seq = seq + 1 } @@ -3093,20 +3149,20 @@ func ContentFromProposalType(title, desc, ty string) govtypesv1beta1.Content { } } -func createValSet(t *testing.T, pubKeys ...cryptotypes.PubKey) *tmtypes.ValidatorSet { - validators := make([]*tmtypes.Validator, len(pubKeys)) +func createValSet(t *testing.T, pubKeys ...cryptotypes.PubKey) *cmttypes.ValidatorSet { + validators := make([]*cmttypes.Validator, len(pubKeys)) for i, key := range pubKeys { pk, err := cryptocodec.ToTmPubKeyInterface(key) require.NoError(t, err, "ToTmPubKeyInterface") - validators[i] = tmtypes.NewValidator(pk, 1) + validators[i] = cmttypes.NewValidator(pk, 1) } - return tmtypes.NewValidatorSet(validators) + return cmttypes.NewValidatorSet(validators) } func signAndGenTx( gaslimit uint64, fees sdk.Coins, - encCfg simappparams.EncodingConfig, + encCfg moduletestutil.TestEncodingConfig, pubKey cryptotypes.PubKey, privKey cryptotypes.PrivKey, acct authtypes.BaseAccount, @@ -3126,7 +3182,7 @@ func signAndGenTx( sigV2 := signing.SignatureV2{ PubKey: pubKey, Data: &signing.SingleSignatureData{ - SignMode: encCfg.TxConfig.SignModeHandler().DefaultMode(), + // SignMode: encCfg.TxConfig.SignModeHandler().DefaultMode(), // TODO[1760]: signing: same type name diff packages. Signature: nil, }, Sequence: acct.Sequence, @@ -3138,28 +3194,31 @@ func signAndGenTx( } // Second round: all signer infos are set, so each signer can sign. - signerData := authsigning.SignerData{ - ChainID: chainId, - AccountNumber: acct.AccountNumber, - Sequence: acct.Sequence, - } - sigV2, err = tx.SignWithPrivKey( - encCfg.TxConfig.SignModeHandler().DefaultMode(), signerData, - txBuilder, privKey, encCfg.TxConfig, acct.Sequence) - if err != nil { - return nil, err - } - err = txBuilder.SetSignatures(sigV2) - if err != nil { - return nil, err - } + // TODO[1760]: signing: SignWithPrivKey: Uncomment these lines. + /* + signerData := authsigning.SignerData{ + ChainID: chainId, + AccountNumber: acct.AccountNumber, + Sequence: acct.Sequence, + } + sigV2, err = tx.SignWithPrivKey( + encCfg.TxConfig.SignModeHandler().DefaultMode(), signerData, + txBuilder, privKey, encCfg.TxConfig, acct.Sequence) + if err != nil { + return nil, err + } + err = txBuilder.SetSignatures(sigV2) + if err != nil { + return nil, err + } + */ return txBuilder, nil } func SignTxAndGetBytes( gaslimit uint64, fees sdk.Coins, - encCfg simappparams.EncodingConfig, + encCfg moduletestutil.TestEncodingConfig, pubKey cryptotypes.PubKey, privKey cryptotypes.PrivKey, acct authtypes.BaseAccount, @@ -3181,7 +3240,7 @@ func SignTxAndGetBytes( func SignTx( gaslimit uint64, fees sdk.Coins, - encCfg simappparams.EncodingConfig, + encCfg moduletestutil.TestEncodingConfig, pubKey cryptotypes.PubKey, privKey cryptotypes.PrivKey, acct authtypes.BaseAccount, diff --git a/internal/handlers/staking_restrictions_hooks.go b/internal/handlers/staking_restrictions_hooks.go index 1f6156499a..d81354155b 100644 --- a/internal/handlers/staking_restrictions_hooks.go +++ b/internal/handlers/staking_restrictions_hooks.go @@ -1,13 +1,16 @@ package handlers import ( - "cosmossdk.io/math" + "context" - "github.com/cosmos/cosmos-sdk/simapp/helpers" - sdktypes "github.com/cosmos/cosmos-sdk/types" + sdkmath "cosmossdk.io/math" + + sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + + "github.com/provenance-io/provenance/internal/pioconfig" ) // Assert proper implementation of StakingRestrictions @@ -55,11 +58,13 @@ func NewStakingRestrictionHooks(k *stakingkeeper.Keeper, opts RestrictionOptions } // Verifies that the delegation would not cause the validator's voting power to exceed our staking distribution limits -func (h StakingRestrictionHooks) AfterDelegationModified(ctx sdktypes.Context, _ sdktypes.AccAddress, valAddr sdktypes.ValAddress) error { - valCount := len(h.k.GetLastValidators(ctx)) +func (h StakingRestrictionHooks) AfterDelegationModified(ctx context.Context, _ sdk.AccAddress, valAddr sdk.ValAddress) error { + vals, _ := h.k.GetLastValidators(ctx) // Ignoring error here to treat it as zero validators. + valCount := len(vals) // do not bother with limits on networks this small (or under simulation). - if valCount < 4 || ctx.ChainID() == helpers.SimAppChainID { + sdkCtx := sdk.UnwrapSDKContext(ctx) + if valCount < 4 || sdkCtx.ChainID() == pioconfig.SimAppChainID { return nil } @@ -73,12 +78,12 @@ func (h StakingRestrictionHooks) AfterDelegationModified(ctx sdktypes.Context, _ maxValidatorPercent = h.opts.MinBondedCapPercent } - oldPower := h.k.GetLastValidatorPower(ctx, valAddr) - validator, found := h.k.GetValidator(ctx, valAddr) - if found { + oldPower, _ := h.k.GetLastValidatorPower(ctx, valAddr) // Ignoring error here to treat the old power as zero. + validator, err := h.k.GetValidator(ctx, valAddr) + if err == nil { power := validator.GetConsensusPower(h.k.PowerReduction(ctx)) - currentBond := h.k.TotalBondedTokens(ctx) - maxBond := currentBond.Quo(math.NewInt(100)).MulRaw(int64(maxValidatorPercent * 100)) + currentBond, _ := h.k.TotalBondedTokens(ctx) // Ignoring error here to treat it as zero. + maxBond := currentBond.Quo(sdkmath.NewInt(100)).MulRaw(int64(maxValidatorPercent * 100)) // if the power of this validator is increasing and it is over the maximum bonded token amount then we error out this transaction. if power > oldPower && validator.GetBondedTokens().GT(maxBond) { @@ -95,47 +100,52 @@ func (h StakingRestrictionHooks) AfterDelegationModified(ctx sdktypes.Context, _ return nil } -// Implements sdktypes.ValidatorHooks -func (h StakingRestrictionHooks) BeforeDelegationCreated(_ sdktypes.Context, _ sdktypes.AccAddress, _ sdktypes.ValAddress) error { +// Implements sdk.ValidatorHooks +func (h StakingRestrictionHooks) BeforeDelegationCreated(_ context.Context, _ sdk.AccAddress, _ sdk.ValAddress) error { + return nil +} + +// Implements sdk.ValidatorHooks +func (h StakingRestrictionHooks) AfterValidatorBonded(_ context.Context, _ sdk.ConsAddress, _ sdk.ValAddress) error { return nil } -// Implements sdktypes.ValidatorHooks -func (h StakingRestrictionHooks) AfterValidatorBonded(_ sdktypes.Context, _ sdktypes.ConsAddress, _ sdktypes.ValAddress) error { +// Implements sdk.ValidatorHooks +func (h StakingRestrictionHooks) AfterValidatorRemoved(_ context.Context, _ sdk.ConsAddress, _ sdk.ValAddress) error { return nil } -// Implements sdktypes.ValidatorHooks -func (h StakingRestrictionHooks) AfterValidatorRemoved(_ sdktypes.Context, _ sdktypes.ConsAddress, _ sdktypes.ValAddress) error { +// Implements sdk.ValidatorHooks +func (h StakingRestrictionHooks) AfterValidatorCreated(_ context.Context, _ sdk.ValAddress) error { return nil } -// Implements sdktypes.ValidatorHooks -func (h StakingRestrictionHooks) AfterValidatorCreated(_ sdktypes.Context, _ sdktypes.ValAddress) error { +// Implements sdk.ValidatorHooks +func (h StakingRestrictionHooks) AfterValidatorBeginUnbonding(_ context.Context, _ sdk.ConsAddress, _ sdk.ValAddress) error { return nil } -// Implements sdktypes.ValidatorHooks -func (h StakingRestrictionHooks) AfterValidatorBeginUnbonding(_ sdktypes.Context, _ sdktypes.ConsAddress, _ sdktypes.ValAddress) error { +// Implements sdk.ValidatorHooks +func (h StakingRestrictionHooks) BeforeValidatorModified(_ context.Context, _ sdk.ValAddress) error { return nil } -// Implements sdktypes.ValidatorHooks -func (h StakingRestrictionHooks) BeforeValidatorModified(_ sdktypes.Context, _ sdktypes.ValAddress) error { +// Implements sdk.ValidatorHooks +func (h StakingRestrictionHooks) BeforeDelegationSharesModified(_ context.Context, _ sdk.AccAddress, _ sdk.ValAddress) error { return nil } -// Implements sdktypes.ValidatorHooks -func (h StakingRestrictionHooks) BeforeDelegationSharesModified(_ sdktypes.Context, _ sdktypes.AccAddress, _ sdktypes.ValAddress) error { +// Implements sdk.ValidatorHooks +func (h StakingRestrictionHooks) BeforeDelegationRemoved(_ context.Context, _ sdk.AccAddress, _ sdk.ValAddress) error { return nil } -// Implements sdktypes.ValidatorHooks -func (h StakingRestrictionHooks) BeforeDelegationRemoved(_ sdktypes.Context, _ sdktypes.AccAddress, _ sdktypes.ValAddress) error { +// Implements sdk.ValidatorHooks +func (h StakingRestrictionHooks) BeforeValidatorSlashed(_ context.Context, _ sdk.ValAddress, _ sdkmath.LegacyDec) error { return nil } -// Implements sdktypes.ValidatorHooks -func (h StakingRestrictionHooks) BeforeValidatorSlashed(_ sdktypes.Context, _ sdktypes.ValAddress, _ sdktypes.Dec) error { +// Implements sdk.ValidatorHooks +func (h StakingRestrictionHooks) AfterUnbondingInitiated(_ context.Context, _ uint64) error { return nil } diff --git a/internal/helpers/maps.go b/internal/helpers/maps.go new file mode 100644 index 0000000000..3912b6b091 --- /dev/null +++ b/internal/helpers/maps.go @@ -0,0 +1,15 @@ +package helpers + +// This file houses functions that are in "golang.org/x/exp/maps" but not "maps", but that we want to use. +// If any show up in "maps", delete them from here and switch uses to the official ones. + +// Keys returns the unordered keys of the given map. +// This is the same as the experimental maps.Keys function. +// As of writing, that isn't in the standard library version yet. Once it is, remove this and switch to that. +func Keys[M ~map[K]V, K comparable, V any](m M) []K { + rv := make([]K, 0, len(m)) + for k := range m { + rv = append(rv, k) + } + return rv +} diff --git a/internal/helpers/sdk.go b/internal/helpers/sdk.go new file mode 100644 index 0000000000..c6c3e61980 --- /dev/null +++ b/internal/helpers/sdk.go @@ -0,0 +1,37 @@ +package helpers + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" +) + +// These are functions that would be handy to have in the SDK. +// But since they're not there, they go in here. + +// MustValAddressFromBech32 calls sdk.ValAddressFromBech32 and panics on error. +func MustValAddressFromBech32(operatorAddr string) sdk.ValAddress { + addr, err := sdk.ValAddressFromBech32(operatorAddr) + if err != nil { + panic(err) + } + return addr +} + +// GetOperatorAddr returns the validator's operator address. +func GetOperatorAddr(val stakingtypes.ValidatorI) (sdk.ValAddress, error) { + return sdk.ValAddressFromBech32(val.GetOperator()) +} + +// MustGetOperatorAddr returns the validator's operator address and panics on ierror. +func MustGetOperatorAddr(val stakingtypes.ValidatorI) sdk.ValAddress { + return MustValAddressFromBech32(val.GetOperator()) +} + +// ValidateBasic calls the ValidateBasic on the provided msg if it has that method, otherwise returns nil. +func ValidateBasic(msg sdk.Msg) error { + vmsg, ok := msg.(sdk.HasValidateBasic) + if ok { + return vmsg.ValidateBasic() + } + return nil +} diff --git a/internal/ibc/ibc.go b/internal/ibc/ibc.go index 35e30d3b4f..49845327fe 100644 --- a/internal/ibc/ibc.go +++ b/internal/ibc/ibc.go @@ -5,7 +5,7 @@ import ( "fmt" sdk "github.com/cosmos/cosmos-sdk/types" - channeltypes "github.com/cosmos/ibc-go/v6/modules/core/04-channel/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" ) const IbcAcknowledgementErrorType = "ibc-acknowledgement-error" diff --git a/internal/ibc/ibc_test.go b/internal/ibc/ibc_test.go index cfe78cfa0f..3430f02c11 100644 --- a/internal/ibc/ibc_test.go +++ b/internal/ibc/ibc_test.go @@ -4,13 +4,14 @@ import ( "encoding/json" "testing" + "github.com/stretchr/testify/assert" + sdk "github.com/cosmos/cosmos-sdk/types" - channeltypes "github.com/cosmos/ibc-go/v6/modules/core/04-channel/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + "github.com/provenance-io/provenance/app" "github.com/provenance-io/provenance/internal/ibc" "github.com/provenance-io/provenance/x/ibcratelimit" - "github.com/stretchr/testify/assert" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" ) func TestNewEmitErrorAcknowledgement(t *testing.T) { @@ -55,7 +56,7 @@ func TestNewEmitErrorAcknowledgement(t *testing.T) { for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { - ctx := testApp.BaseApp.NewContext(false, tmproto.Header{}) + ctx := testApp.BaseApp.NewContext(false) ack := ibc.NewEmitErrorAcknowledgement(ctx, tc.err, tc.errCtx...) events := ctx.EventManager().Events() assert.Equal(t, tc.hasEvents, len(events) > 0, "should correctly decide when to emit events") @@ -115,7 +116,7 @@ func TestEmitIBCErrorEvents(t *testing.T) { for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { - ctx := testApp.BaseApp.NewContext(false, tmproto.Header{}) + ctx := testApp.BaseApp.NewContext(false) ibc.EmitIBCErrorEvents(ctx, tc.err, tc.errCtx) events := ctx.EventManager().Events() assert.Equal(t, tc.events, events, "should emit the correct events") diff --git a/internal/pioconfig/provenanceconfig.go b/internal/pioconfig/provenanceconfig.go index 8a124e76f2..3b854c716c 100644 --- a/internal/pioconfig/provenanceconfig.go +++ b/internal/pioconfig/provenanceconfig.go @@ -14,6 +14,10 @@ const ( defaultMinGasPrices = 1905 // DefaultReDnmString is the allowed denom regex expression DefaultReDnmString = `[a-zA-Z][a-zA-Z0-9/\-\.]{2,127}` + + // SimAppChainID hardcoded chainID for simulation. + // Copied from cosmossdk.io/simapp/sim_test.go. We used to use this directly, but now its in a _test.go file. + SimAppChainID = "simulation-app" ) type ProvenanceConfig struct { diff --git a/internal/provwasm/message_encoders.go b/internal/provwasm/message_encoders.go index 1bb11f1d3d..ddcc4214f5 100644 --- a/internal/provwasm/message_encoders.go +++ b/internal/provwasm/message_encoders.go @@ -7,10 +7,12 @@ import ( "github.com/CosmWasm/wasmd/x/wasm" - "github.com/tendermint/tendermint/libs/log" + "cosmossdk.io/log" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + "github.com/provenance-io/provenance/internal/helpers" ) // Encoder describes behavior for provenance smart contract message encoding. @@ -63,7 +65,7 @@ func customEncoders(registry *EncoderRegistry, logger log.Logger) wasm.CustomEnc return nil, sdkerrors.ErrInvalidRequest.Wrap(err.Error()) } for _, msg := range msgs { - if err := msg.ValidateBasic(); err != nil { + if err := helpers.ValidateBasic(msg); err != nil { logger.Error("message validation failed", "err", err) return nil, sdkerrors.ErrInvalidRequest.Wrap(err.Error()) } diff --git a/internal/provwasm/query_plugins.go b/internal/provwasm/query_plugins.go index 878a1b8222..c182bb5bee 100644 --- a/internal/provwasm/query_plugins.go +++ b/internal/provwasm/query_plugins.go @@ -8,7 +8,7 @@ import ( "github.com/CosmWasm/wasmd/x/wasm" wasmvmtypes "github.com/CosmWasm/wasmvm/types" - abci "github.com/tendermint/tendermint/abci/types" + abci "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" @@ -94,7 +94,7 @@ func StargateQuerier(queryRouter baseapp.GRPCQueryRouter, cdc codec.Codec) func( return nil, wasmvmtypes.UnsupportedRequest{Kind: fmt.Sprintf("No route to query '%s'", request.Path)} } - res, err := route(ctx, abci.RequestQuery{ + res, err := route(ctx, &abci.RequestQuery{ Data: request.Data, Path: request.Path, }) diff --git a/internal/provwasm/simulation.go b/internal/provwasm/simulation.go index 57c0ea8852..de70de2c96 100644 --- a/internal/provwasm/simulation.go +++ b/internal/provwasm/simulation.go @@ -10,18 +10,20 @@ import ( "github.com/CosmWasm/wasmd/x/wasm/keeper" "github.com/CosmWasm/wasmd/x/wasm/types" + sdkmath "cosmossdk.io/math" + "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" - "github.com/cosmos/cosmos-sdk/simapp/helpers" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" + moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" "github.com/cosmos/cosmos-sdk/x/bank/testutil" "github.com/cosmos/cosmos-sdk/x/simulation" - simappparams "github.com/provenance-io/provenance/app/params" markersim "github.com/provenance-io/provenance/x/marker/simulation" markertypes "github.com/provenance-io/provenance/x/marker/types" namekeeper "github.com/provenance-io/provenance/x/name/keeper" @@ -45,11 +47,11 @@ type Wrapper struct { func NewWrapper(cdc codec.Codec, keeper *wasm.Keeper, validatorSetSource keeper.ValidatorSetSource, ak authkeeper.AccountKeeperI, bk bankkeeper.Keeper, nk namekeeper.Keeper) *Wrapper { return &Wrapper{ - cdc: cdc, - wasm: wasm.NewAppModule(cdc, keeper, validatorSetSource, ak, bk), - ak: ak, - bk: bk, - nk: nk, + cdc: cdc, + // wasm: wasm.NewAppModule(cdc, keeper, validatorSetSource, ak, bk), // TODO[1760]: wasm: Extra args needed here. + ak: ak, + bk: bk, + nk: nk, } } @@ -69,7 +71,6 @@ func (pw Wrapper) GenerateGenesisState(input *module.SimulationState) { Codes: nil, Contracts: nil, Sequences: nil, - GenMsgs: nil, } _, err := input.Cdc.MarshalJSON(&wasmGenesis) @@ -82,16 +83,17 @@ func (pw Wrapper) GenerateGenesisState(input *module.SimulationState) { // ProposalContents doesn't return any content functions for governance proposals. func (pw Wrapper) ProposalContents(simState module.SimulationState) []simtypes.WeightedProposalContent { - return pw.wasm.ProposalContents(simState) + // return pw.wasm.ProposalContents(simState) // TODO[1760]: wasm: Find replacement for this or delete it. + return nil } // RandomizedParams returns empty list as the params don't change -func (pw Wrapper) RandomizedParams(_ *rand.Rand) []simtypes.ParamChange { - return []simtypes.ParamChange{} +func (pw Wrapper) RandomizedParams(_ *rand.Rand) []simtypes.LegacyParamChange { + return nil } // RegisterStoreDecoder registers a decoder for supply module's types -func (pw Wrapper) RegisterStoreDecoder(sdr sdk.StoreDecoderRegistry) { +func (pw Wrapper) RegisterStoreDecoder(sdr simtypes.StoreDecoderRegistry) { pw.wasm.RegisterStoreDecoder(sdr) } @@ -162,7 +164,7 @@ func SimulateMsgAddMarker(ak authkeeper.AccountKeeperI, bk bankkeeper.Keeper, nk ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { msg := markertypes.NewMsgAddMarkerRequest( denom, - sdk.NewIntFromUint64(1000000000), + sdkmath.NewIntFromUint64(1_000_000_000), node.Address, node.Address, markertypes.MarkerType_Coin, @@ -177,9 +179,9 @@ func SimulateMsgAddMarker(ak authkeeper.AccountKeeperI, bk bankkeeper.Keeper, nk bk.SetSendEnabled(ctx, denom, true) // fund the node account to do all of these txs - fundErr := testutil.FundAccount(bk, ctx, node.Address, sdk.NewCoins(sdk.Coin{ + fundErr := testutil.FundAccount(ctx, bk, node.Address, sdk.NewCoins(sdk.Coin{ Denom: "stake", - Amount: sdk.NewInt(1000000000000000), + Amount: sdkmath.NewInt(1_000_000_000_000_000), })) if fundErr != nil { @@ -243,7 +245,7 @@ func SimulateMsgWithdrawRequest(ak authkeeper.AccountKeeperI, bk bankkeeper.Keep ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { coins := []sdk.Coin{{ Denom: denom, - Amount: sdk.NewIntFromUint64(1000000), + Amount: sdkmath.NewIntFromUint64(1_000_000), }} msg := markertypes.NewMsgWithdrawRequest(node.Address, consumer.Address, denom, coins) msg2, ops, err := markersim.Dispatch(r, app, ctx, ak, bk, node, chainID, msg, nil) @@ -350,7 +352,7 @@ func SimulateMsgExecuteContract(ak authkeeper.AccountKeeperI, bk bankkeeper.View amount, _ := sdk.ParseCoinsNormalized(fmt.Sprintf("100%s", denom)) coins := bk.SpendableCoins(ctx, consumer.Address) - if coins.AmountOf(denom).LT(sdk.NewInt(100)) { + if coins.AmountOf(denom).LT(sdkmath.NewInt(100)) { return simtypes.NoOpMsg("provwasm", "", "not enough coins"), nil, nil } @@ -398,13 +400,13 @@ func Dispatch( panic("no fees") } - txGen := simappparams.MakeTestEncodingConfig().TxConfig - tx, err := helpers.GenSignedMockTx( + txGen := moduletestutil.MakeTestEncodingConfig().TxConfig + tx, err := simtestutil.GenSignedMockTx( r, txGen, []sdk.Msg{msg}, fees, - helpers.DefaultGenTxGas*10, // storing a contract requires more gas than most txs + simtestutil.DefaultGenTxGas*10, // storing a contract requires more gas than most txs chainID, []uint64{account.GetAccountNumber()}, []uint64{account.GetSequence()}, @@ -419,7 +421,7 @@ func Dispatch( panic(err2) } - return simtypes.NewOperationMsg(msg, true, "", &codec.ProtoCodec{}), futures, sdkResponse, nil + return simtypes.NewOperationMsg(msg, true, ""), futures, sdkResponse, nil } // getRandomRootNameRecord finds a random root name record owned by a known account. diff --git a/internal/provwasm/stargate_whitelist.go b/internal/provwasm/stargate_whitelist.go index 9f454d5795..185b8b1c23 100644 --- a/internal/provwasm/stargate_whitelist.go +++ b/internal/provwasm/stargate_whitelist.go @@ -13,7 +13,7 @@ import ( govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1" slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - ibctransfertypes "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types" + ibctransfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" attributetypes "github.com/provenance-io/provenance/x/attribute/types" "github.com/provenance-io/provenance/x/exchange" diff --git a/internal/statesync/statesync.go b/internal/statesync/statesync.go index ee98443506..08b02fc923 100644 --- a/internal/statesync/statesync.go +++ b/internal/statesync/statesync.go @@ -1,26 +1,28 @@ package statesync import ( - tmrpccore "github.com/tendermint/tendermint/rpc/core" - tmrpc "github.com/tendermint/tendermint/rpc/jsonrpc/server" - tmrpctypes "github.com/tendermint/tendermint/rpc/jsonrpc/types" + // cmtrpccore "github.com/cometbft/cometbft/rpc/core" // TODO[1760]: sync-info + // cmtrpc "github.com/cometbft/cometbft/rpc/jsonrpc/server" // TODO[1760]: sync-info + cmtrpctypes "github.com/cometbft/cometbft/rpc/jsonrpc/types" "github.com/cosmos/cosmos-sdk/version" ) func RegisterSyncStatus() { - tmrpccore.Routes["sync_info"] = tmrpc.NewRPCFunc(GetSyncInfoAtBlock, "height") + // TODO[1760]: sync-info: Figure out how to still set a custom route. + // cmtrpccore.Routes["sync_info"] = cmtrpc.NewRPCFunc(GetSyncInfoAtBlock, "height") } -func GetSyncInfoAtBlock(ctx *tmrpctypes.Context, height *int64) (*GetSyncInfo, error) { - block, err := tmrpccore.Block(ctx, height) - if err != nil { - return nil, err - } +func GetSyncInfoAtBlock(ctx *cmtrpctypes.Context, height *int64) (*GetSyncInfo, error) { + // TODO[1760]: sync-info: Figure out the new way to get the current block. + // block, err := cmtrpccore.Block(ctx, height) + // if err != nil { + // return nil, err + // } versionInfo := version.NewInfo() si := &GetSyncInfo{ - BlockHeight: block.Block.Header.Height, - BlockHash: block.Block.Header.Hash().String(), + BlockHeight: 123, // block.Block.Header.Height, // TODO[1760]: sync-info + BlockHash: "finishme", // block.Block.Header.Hash().String(), // TODO[1760]: sync-info Version: versionInfo.Version, } return si, nil diff --git a/networks/dev/blockchain-dev/Dockerfile b/networks/dev/blockchain-dev/Dockerfile index b004efbd68..a77f91486b 100644 --- a/networks/dev/blockchain-dev/Dockerfile +++ b/networks/dev/blockchain-dev/Dockerfile @@ -2,7 +2,7 @@ # Use `make docker-build-dev` to build or `make devnet-start` to # start the test network and `make devnet-stop` to stop it. -FROM golang:1.20-bullseye as build-x86_64 +FROM golang:1.21-bullseye as build-x86_64 WORKDIR /go/src/github.com/provenance-io/provenance ENV GOPRIVATE=github.com/provenance-io RUN apt-get update && apt-get upgrade -y @@ -48,7 +48,7 @@ CMD ["start"] ## Build provenance for ARM -FROM golang:1.20-bullseye as build-arm64 +FROM golang:1.21-bullseye as build-arm64 WORKDIR /go/src/github.com/provenance-io/provenance ENV GOPRIVATE=github.com/provenance-io RUN apt-get update && apt-get upgrade -y diff --git a/networks/ibc/blockchain-ibc/Dockerfile b/networks/ibc/blockchain-ibc/Dockerfile index 9d6d166764..094b42e1ec 100644 --- a/networks/ibc/blockchain-ibc/Dockerfile +++ b/networks/ibc/blockchain-ibc/Dockerfile @@ -3,7 +3,7 @@ # start the test network and `make localnet-stop` to stop it. ## Build provenance for x86_64 -FROM golang:1.20-bullseye as build-x86_64 +FROM golang:1.21-bullseye as build-x86_64 WORKDIR /go/src/github.com/provenance-io/provenance ENV GOPRIVATE=github.com/provenance-io RUN apt-get update && apt-get upgrade -y @@ -52,7 +52,7 @@ CMD ["start"] ## Build provenance for ARM -FROM golang:1.20-bullseye as build-arm64 +FROM golang:1.21-bullseye as build-arm64 WORKDIR /go/src/github.com/provenance-io/provenance ENV GOPRIVATE=github.com/provenance-io RUN apt-get update && apt-get upgrade -y diff --git a/networks/ibc/blockchain-relayer/Dockerfile b/networks/ibc/blockchain-relayer/Dockerfile index 3adc6bc278..9835001b13 100644 --- a/networks/ibc/blockchain-relayer/Dockerfile +++ b/networks/ibc/blockchain-relayer/Dockerfile @@ -1,5 +1,5 @@ ## Build provenance for ARM -FROM golang:1.20-bullseye as build +FROM golang:1.21-bullseye as build WORKDIR / ARG VERSION RUN apt-get update && apt-get upgrade -y && apt-get install -y git diff --git a/networks/local/blockchain-local/Dockerfile b/networks/local/blockchain-local/Dockerfile index fa5e9cdae6..67510f4166 100644 --- a/networks/local/blockchain-local/Dockerfile +++ b/networks/local/blockchain-local/Dockerfile @@ -3,7 +3,7 @@ # start the test network and `make localnet-stop` to stop it. ## Build provenance for x86_64 -FROM golang:1.20-bullseye as build-x86_64 +FROM golang:1.21-bullseye as build-x86_64 WORKDIR /go/src/github.com/provenance-io/provenance ENV GOPRIVATE=github.com/provenance-io RUN apt-get update && apt-get upgrade -y @@ -52,7 +52,7 @@ CMD ["start"] ## Build provenance for ARM -FROM golang:1.20-bullseye as build-arm64 +FROM golang:1.21-bullseye as build-arm64 WORKDIR /go/src/github.com/provenance-io/provenance ENV GOPRIVATE=github.com/provenance-io RUN apt-get update && apt-get upgrade -y diff --git a/scripts/no-now-lint.sh b/scripts/no-now-lint.sh index 8e378b8349..571254c649 100755 --- a/scripts/no-now-lint.sh +++ b/scripts/no-now-lint.sh @@ -84,7 +84,7 @@ filters+=( '^x/reward/simulation/operations\.go:(7[0-9]|8[0-5]):[[:space:]]+now # It's in the header creation for the BeginBlock. # Since it's expected that it might move, and also that additional # such uses might be added, allow it to be on any line number. -filters+=( '^app/test_helpers\.go:[[:digit:]]+:.*tmproto\.Header{' ) +filters+=( '^app/test_helpers\.go:[[:digit:]]+:.*cmtproto\.Header{' ) # The x/marker/client/cli/tx.go file has two legitimate uses due to authz and feegrant grant creation. # Since that file is not involved in any block processing, just ignore the whole file. filters+=( '^x/marker/client/cli/tx\.go:' ) diff --git a/scripts/proto-update-deps.sh b/scripts/proto-update-deps.sh index df751491a2..07950d78f2 100755 --- a/scripts/proto-update-deps.sh +++ b/scripts/proto-update-deps.sh @@ -26,8 +26,10 @@ COSMOS_PROTO_URL="raw.githubusercontent.com/cosmos/cosmos-proto/$( go list -m gi COSMWASM_V1BETA1_TARBALL_URL='github.com/CosmWasm/wasmd/tarball/v0.17.0' # Backwards compatibility. Needed to serialize/deserialize older wasmd protos. COSMWASM_CUR_TARBALL_URL="$( go list -m github.com/CosmWasm/wasmd | sed 's:.* => ::; s: :/tarball/:;' )" IBC_PORT_V1_QUERY_URL='https://raw.githubusercontent.com/cosmos/ibc-go/v2.3.1/proto/ibc/core/port/v1/query.proto' # Backwards compatibility. -IBC_GO_TARBALL_URL="$( go list -m github.com/cosmos/ibc-go/v6 | sed 's:.* => ::; s: :/tarball/:; s:/v6::;')" +# TODO[1760]: proto: Ensure this ibc-go is correct. +IBC_GO_TARBALL_URL="$( go list -m github.com/cosmos/ibc-go/v8 | sed 's:.* => ::; s: :/tarball/:; s:/v8::;')" COSMOS_TARBALL_URL="$( go list -m github.com/cosmos/cosmos-sdk | sed 's:.* => ::; s: :/tarball/:;' )" +# TODO[1760]: proto: Get the cometbft tarball instead of tendermint. TM_TARBALL_URL="$( go list -m github.com/tendermint/tendermint | sed 's:.* => ::; s: :/tarball/:;' )" # gnu tar on ubuntu requires the '--wildcards' flag diff --git a/testutil/assertions/events.go b/testutil/assertions/events.go index 989ae966aa..d1d67cfeb3 100644 --- a/testutil/assertions/events.go +++ b/testutil/assertions/events.go @@ -5,7 +5,7 @@ import ( "github.com/stretchr/testify/assert" - abci "github.com/tendermint/tendermint/abci/types" + abci "github.com/cometbft/cometbft/abci/types" sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -42,7 +42,7 @@ func AttrsToStrings(attrs []abci.EventAttribute) []string { } rv := make([]string, len(attrs)) for i, attr := range attrs { - rv[i] = fmt.Sprintf("[%d]: %q = %q", i, string(attr.Key), string(attr.Value)) + rv[i] = fmt.Sprintf("[%d]: %q = %q", i, attr.Key, attr.Value) if attr.Index { rv[i] += " (indexed)" } diff --git a/testutil/assertions/events_test.go b/testutil/assertions/events_test.go index 2a3607fb9f..2d99f0be11 100644 --- a/testutil/assertions/events_test.go +++ b/testutil/assertions/events_test.go @@ -8,7 +8,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" - abci "github.com/tendermint/tendermint/abci/types" + abci "github.com/cometbft/cometbft/abci/types" ) func TestPrependToEach(t *testing.T) { @@ -67,8 +67,8 @@ func TestPrependToEach(t *testing.T) { func TestEventsToStrings(t *testing.T) { attr := func(key, value string) abci.EventAttribute { return abci.EventAttribute{ - Key: []byte(key), - Value: []byte(fmt.Sprintf("%q", value)), + Key: key, + Value: fmt.Sprintf("%q", value), } } addrAdd := sdk.AccAddress("address_add_event___").String() @@ -142,8 +142,8 @@ func TestEventsToStrings(t *testing.T) { func TestEventToStrings(t *testing.T) { attr := func(key, value string) abci.EventAttribute { return abci.EventAttribute{ - Key: []byte(key), - Value: []byte(fmt.Sprintf("%q", value)), + Key: key, + Value: fmt.Sprintf("%q", value), } } @@ -204,8 +204,8 @@ func TestEventToStrings(t *testing.T) { func TestAttrsToStrings(t *testing.T) { attr := func(key, value string, index bool) abci.EventAttribute { return abci.EventAttribute{ - Key: []byte(key), - Value: []byte(fmt.Sprintf("%q", value)), + Key: key, + Value: fmt.Sprintf("%q", value), Index: index, } } @@ -275,14 +275,14 @@ type equalEventsTestCase struct { func getEqualEventsTestCases() []equalEventsTestCase { attr := func(key, value string) abci.EventAttribute { return abci.EventAttribute{ - Key: []byte(key), - Value: []byte(value), + Key: key, + Value: value, } } attri := func(key, value string) abci.EventAttribute { return abci.EventAttribute{ - Key: []byte(key), - Value: []byte(value), + Key: key, + Value: value, Index: true, } } diff --git a/testutil/ibc/isc4_middleware_mock.go b/testutil/ibc/isc4_middleware_mock.go index 1c536aec13..c176fbc19f 100644 --- a/testutil/ibc/isc4_middleware_mock.go +++ b/testutil/ibc/isc4_middleware_mock.go @@ -2,10 +2,10 @@ package ibc import ( sdk "github.com/cosmos/cosmos-sdk/types" - capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - ibcclienttypes "github.com/cosmos/ibc-go/v6/modules/core/02-client/types" - porttypes "github.com/cosmos/ibc-go/v6/modules/core/05-port/types" - "github.com/cosmos/ibc-go/v6/modules/core/exported" + capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + ibcclienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types" + "github.com/cosmos/ibc-go/v8/modules/core/exported" ) var _ porttypes.ICS4Wrapper = &ICS4WrapperMock{} diff --git a/testutil/ibc/testchain.go b/testutil/ibc/testchain.go index fff7a68c2c..2352ecaba3 100644 --- a/testutil/ibc/testchain.go +++ b/testutil/ibc/testchain.go @@ -2,18 +2,20 @@ package ibc import ( "encoding/json" + "math/rand" "testing" + "time" "github.com/stretchr/testify/suite" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" - ibctesting "github.com/cosmos/ibc-go/v6/testing" - "github.com/cosmos/ibc-go/v6/testing/simapp/helpers" + ibctesting "github.com/cosmos/ibc-go/v8/testing" provenanceapp "github.com/provenance-io/provenance/app" "github.com/provenance-io/provenance/testutil/contracts" @@ -114,14 +116,15 @@ func (chain *TestChain) SendMsgsNoCheck(msgs ...sdk.Msg) (*sdk.Result, error) { // SignAndDeliver signs and delivers a transaction without asserting the results. This overrides the function // from ibctesting func SignAndDeliver( - txCfg client.TxConfig, app *baseapp.BaseApp, _ tmproto.Header, msgs []sdk.Msg, + txCfg client.TxConfig, app *baseapp.BaseApp, _ cmtproto.Header, msgs []sdk.Msg, chainID string, accNums, accSeqs []uint64, priv ...cryptotypes.PrivKey, ) (sdk.GasInfo, *sdk.Result, error) { - tx, _ := helpers.GenTx( + tx, _ := simtestutil.GenSignedMockTx( + rand.New(rand.NewSource(time.Now().UnixNano())), txCfg, msgs, sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 2500)}, - helpers.DefaultGenTxGas, + simtestutil.DefaultGenTxGas, chainID, accNums, accSeqs, diff --git a/testutil/mocks/codec.go b/testutil/mocks/codec.go index 57350d363d..598686342d 100644 --- a/testutil/mocks/codec.go +++ b/testutil/mocks/codec.go @@ -3,11 +3,11 @@ package mocks import ( "errors" - "github.com/gogo/protobuf/proto" + "github.com/cosmos/gogoproto/proto" "github.com/cosmos/cosmos-sdk/codec" - codectypes "github.com/cosmos/cosmos-sdk/codec/types" - sdksim "github.com/cosmos/cosmos-sdk/simapp" + "github.com/cosmos/cosmos-sdk/types/module" + moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" ) // This doesn't yet have injectable errors for all the possible things because they weren't needed yet. @@ -16,7 +16,7 @@ import ( // MockCodec is a wrapper on a codec that allows injection of errors on these functions: // MarshalJSON, MustMarshalJSON, UnmarshalJSON, MustUnmarshalJSON. type MockCodec struct { - Base codec.Codec + codec.Codec MarshalJSONErrs []string UnmarshalJSONErrs []string } @@ -24,8 +24,8 @@ type MockCodec struct { var _ codec.Codec = (*MockCodec)(nil) // NewMockCodec creates a new mock codec based on the standard test encoding config codec. -func NewMockCodec() *MockCodec { - return &MockCodec{Base: sdksim.MakeTestEncodingConfig().Codec} +func NewMockCodec(modules ...module.AppModuleBasic) *MockCodec { + return &MockCodec{Codec: moduletestutil.MakeTestEncodingConfig(modules...).Codec} } // WithMarshalJSONErrs adds the given errors to be returned from MarshalJSON or MustMarshalJSON. @@ -46,50 +46,6 @@ func (c *MockCodec) WithUnmarshalJSONErrs(errMsgs ...string) *MockCodec { return c } -func (c *MockCodec) Marshal(o codec.ProtoMarshaler) ([]byte, error) { - return c.Base.Marshal(o) -} - -func (c *MockCodec) MustMarshal(o codec.ProtoMarshaler) []byte { - return c.Base.MustMarshal(o) -} - -func (c *MockCodec) MarshalLengthPrefixed(o codec.ProtoMarshaler) ([]byte, error) { - return c.Base.MarshalLengthPrefixed(o) -} - -func (c *MockCodec) MustMarshalLengthPrefixed(o codec.ProtoMarshaler) []byte { - return c.Base.MustMarshalLengthPrefixed(o) -} - -func (c *MockCodec) Unmarshal(bz []byte, ptr codec.ProtoMarshaler) error { - return c.Base.Unmarshal(bz, ptr) -} - -func (c *MockCodec) MustUnmarshal(bz []byte, ptr codec.ProtoMarshaler) { - c.Base.MustUnmarshal(bz, ptr) -} - -func (c *MockCodec) UnmarshalLengthPrefixed(bz []byte, ptr codec.ProtoMarshaler) error { - return c.Base.UnmarshalLengthPrefixed(bz, ptr) -} - -func (c *MockCodec) MustUnmarshalLengthPrefixed(bz []byte, ptr codec.ProtoMarshaler) { - c.Base.MustUnmarshalLengthPrefixed(bz, ptr) -} - -func (c *MockCodec) MarshalInterface(i proto.Message) ([]byte, error) { - return c.Base.MarshalInterface(i) -} - -func (c *MockCodec) UnmarshalInterface(bz []byte, ptr interface{}) error { - return c.Base.UnmarshalInterface(bz, ptr) -} - -func (c *MockCodec) UnpackAny(a *codectypes.Any, iface interface{}) error { - return c.Base.UnpackAny(a, iface) -} - func (c *MockCodec) MarshalJSON(o proto.Message) ([]byte, error) { if len(c.MarshalJSONErrs) > 0 { errMsg := c.MarshalJSONErrs[0] @@ -98,7 +54,7 @@ func (c *MockCodec) MarshalJSON(o proto.Message) ([]byte, error) { return nil, errors.New(errMsg) } } - return c.Base.MarshalJSON(o) + return c.Codec.MarshalJSON(o) } func (c *MockCodec) MustMarshalJSON(o proto.Message) []byte { @@ -109,15 +65,7 @@ func (c *MockCodec) MustMarshalJSON(o proto.Message) []byte { panic(errors.New(errMsg)) } } - return c.Base.MustMarshalJSON(o) -} - -func (c *MockCodec) MarshalInterfaceJSON(i proto.Message) ([]byte, error) { - return c.Base.MarshalInterfaceJSON(i) -} - -func (c *MockCodec) UnmarshalInterfaceJSON(bz []byte, ptr interface{}) error { - return c.Base.UnmarshalInterfaceJSON(bz, ptr) + return c.Codec.MustMarshalJSON(o) } func (c *MockCodec) UnmarshalJSON(bz []byte, ptr proto.Message) error { @@ -128,7 +76,7 @@ func (c *MockCodec) UnmarshalJSON(bz []byte, ptr proto.Message) error { return errors.New(errMsg) } } - return c.Base.UnmarshalJSON(bz, ptr) + return c.Codec.UnmarshalJSON(bz, ptr) } func (c *MockCodec) MustUnmarshalJSON(bz []byte, ptr proto.Message) { @@ -139,5 +87,5 @@ func (c *MockCodec) MustUnmarshalJSON(bz []byte, ptr proto.Message) { panic(errors.New(errMsg)) } } - c.Base.MustUnmarshalJSON(bz, ptr) + c.Codec.MustUnmarshalJSON(bz, ptr) } diff --git a/testutil/network.go b/testutil/network.go index b35fab9bb1..7d977e5547 100644 --- a/testutil/network.go +++ b/testutil/network.go @@ -5,16 +5,17 @@ import ( "testing" "time" - tmrand "github.com/tendermint/tendermint/libs/rand" - dbm "github.com/tendermint/tm-db" + cmtrand "github.com/cometbft/cometbft/libs/rand" + pruningtypes "cosmossdk.io/store/pruning/types" + + dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/crypto/hd" "github.com/cosmos/cosmos-sdk/crypto/keyring" - pruningtypes "github.com/cosmos/cosmos-sdk/pruning/types" servertypes "github.com/cosmos/cosmos-sdk/server/types" - sdksim "github.com/cosmos/cosmos-sdk/simapp" testnet "github.com/cosmos/cosmos-sdk/testutil/network" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" @@ -24,13 +25,15 @@ import ( // NewAppConstructor returns a new provenanceapp AppConstructor func NewAppConstructor(encodingCfg params.EncodingConfig) testnet.AppConstructor { - return func(val testnet.Validator) servertypes.Application { + return func(val testnet.ValidatorI) servertypes.Application { + ctx := val.GetCtx() + appCfg := val.GetAppConfig() return provenanceapp.New( - val.Ctx.Logger, dbm.NewMemDB(), nil, true, make(map[int64]bool), val.Ctx.Config.RootDir, 0, + ctx.Logger, dbm.NewMemDB(), nil, true, make(map[int64]bool), ctx.Config.RootDir, 0, encodingCfg, - sdksim.EmptyAppOptions{}, - baseapp.SetPruning(pruningtypes.NewPruningOptionsFromString(val.AppConfig.Pruning)), - baseapp.SetMinGasPrices(val.AppConfig.MinGasPrices), + simtestutil.EmptyAppOptions{}, + baseapp.SetPruning(pruningtypes.NewPruningOptionsFromString(appCfg.Pruning)), + baseapp.SetMinGasPrices(appCfg.MinGasPrices), ) } } @@ -47,7 +50,7 @@ func DefaultTestNetworkConfig() testnet.Config { AppConstructor: NewAppConstructor(encCfg), GenesisState: provenanceapp.ModuleBasics.DefaultGenesis(encCfg.Marshaler), TimeoutCommit: 2 * time.Second, - ChainID: "chain-" + tmrand.NewRand().Str(6), + ChainID: "chain-" + cmtrand.NewRand().Str(6), NumValidators: 4, BondDenom: sdk.DefaultBondDenom, // we use the SDK bond denom here, at least until the entire genesis is rewritten to match bond denom MinGasPrices: fmt.Sprintf("0.000006%s", sdk.DefaultBondDenom), diff --git a/x/README.md b/x/README.md index 0d077d2fb6..71cb3e6972 100644 --- a/x/README.md +++ b/x/README.md @@ -1,21 +1,18 @@ ---- -sidebar_position: 0 ---- - # List of Modules Modules are the code components of the Provenance Blockchain that execute the majority of the business logic for applications. The [Cosmos SDK](https://docs.cosmos.network/v0.47) enables developers to build modules that utilize the core structure of the SDK to allow the modules to function together. To read more about creating modules, refer to the [Cosmos documentation on modules](https://docs.cosmos.network/v0.47/building-modules/intro). -Provenance uses inherited modules from the Cosmos SDK, and has also developed modules that are specific to Provenance. +Provenance Blockchain leverages inherited modules from Cosmos SDK, and has purpose-built custom modules unique to Provenance Blockchain. * [Inherited Cosmos modules](https://docs.cosmos.network/v0.47/build/modules) * [Attribute](./attribute/spec/README.md) - Functions as a blockchain registry for storing \ pairs. * [Exchange](./exchange/spec/README.md) - Facilitates the trading of on-chain assets. * [Hold](./hold/spec/README.md) - Keeps track of funds in an account that have a hold placed on them. -* [ibchooks](./ibchooks/README.md) - Forked from https://github.com/osmosis-labs/osmosis/tree/main/x/ibchooks +* [Ibc Hooks](./ibchooks/README.md) - Forked from https://github.com/osmosis-labs/osmosis/tree/main/x/ibchooks +* [Ibc Rate Limit](./ibcratelimit/README.md) - Forked from https://github.com/osmosis-labs/osmosis/tree/main/x/ibc-rate-limit * [Marker](./marker/spec/README.md) - Allows for the creation of fungible tokens. * [Metadata](./metadata/spec/README.md) - Provides a system for referencing off-chain information. -* [msgfees](./msgfees/spec/README.md) - Manages additional fees that can be applied to tx msgs. +* [Msg Fees](./msgfees/spec/README.md) - Manages additional fees that can be applied to tx msgs. * [Name](./name/spec/README.md) - Provides a system for providing human-readable names as aliases for addresses. * [Oracle](./oracle/spec/README.md) - Provides the capability to dynamically expose query endpoints. * [Reward](./reward/spec/README.md) - Provides a system for distributing rewards to accounts. diff --git a/x/attribute/abci_test.go b/x/attribute/abci_test.go index 7e77120724..7ab6ec3326 100644 --- a/x/attribute/abci_test.go +++ b/x/attribute/abci_test.go @@ -4,15 +4,14 @@ import ( "testing" "time" - "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" sdk "github.com/cosmos/cosmos-sdk/types" simapp "github.com/provenance-io/provenance/app" "github.com/provenance-io/provenance/x/attribute" "github.com/provenance-io/provenance/x/attribute/types" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" ) func TestBeginBlockDeletionOfExpired(t *testing.T) { @@ -25,7 +24,7 @@ func TestBeginBlockDeletionOfExpired(t *testing.T) { now := time.Now() app = simapp.Setup(t) - ctx = app.BaseApp.NewContext(false, tmproto.Header{}) + ctx = app.BaseApp.NewContext(false) ctx = ctx.WithBlockTime(now.Add(-3 * time.Hour)) app.AccountKeeper.SetAccount(ctx, app.AccountKeeper.NewAccountWithAddress(ctx, user1Addr)) @@ -52,11 +51,11 @@ func TestBeginBlockDeletionOfExpired(t *testing.T) { events := ctx.EventManager().Events() assert.Len(t, events, 3) assert.Equal(t, "beginblock", events[2].Type) - assert.Equal(t, sdk.AttributeKeyModule, string(events[2].Attributes[0].Key)) - assert.Equal(t, types.ModuleName, string(events[2].Attributes[0].Value)) - assert.Equal(t, sdk.AttributeKeyAction, string(events[2].Attributes[1].Key)) - assert.Equal(t, types.EventTypeDeletedExpired, string(events[2].Attributes[1].Value)) - assert.Equal(t, types.AttributeKeyTotalExpired, string(events[2].Attributes[2].Key)) - assert.Equal(t, "2", string(events[2].Attributes[2].Value)) + assert.Equal(t, sdk.AttributeKeyModule, events[2].Attributes[0].Key) + assert.Equal(t, types.ModuleName, events[2].Attributes[0].Value) + assert.Equal(t, sdk.AttributeKeyAction, events[2].Attributes[1].Key) + assert.Equal(t, types.EventTypeDeletedExpired, events[2].Attributes[1].Value) + assert.Equal(t, types.AttributeKeyTotalExpired, events[2].Attributes[2].Key) + assert.Equal(t, "2", events[2].Attributes[2].Value) } diff --git a/x/attribute/client/cli/cli_test.go b/x/attribute/client/cli/cli_test.go index ecbc8cd652..4df41610ae 100644 --- a/x/attribute/client/cli/cli_test.go +++ b/x/attribute/client/cli/cli_test.go @@ -13,7 +13,7 @@ import ( "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" - tmcli "github.com/tendermint/tendermint/libs/cli" + cmtcli "github.com/cometbft/cometbft/libs/cli" "github.com/cosmos/cosmos-sdk/client/flags" codectypes "github.com/cosmos/cosmos-sdk/codec/types" @@ -372,12 +372,12 @@ func (s *IntegrationTestSuite) TestGetAccountAttributeCmd() { }{ { name: "should get attribute by name with json output", - args: []string{s.account1Addr.String(), "example.attribute", fmt.Sprintf("--%s=json", tmcli.OutputFlag)}, + args: []string{s.account1Addr.String(), "example.attribute", fmt.Sprintf("--%s=json", cmtcli.OutputFlag)}, expectedOutput: fmt.Sprintf(`{"account":"%s","attributes":[{"name":"example.attribute","value":"ZXhhbXBsZSBhdHRyaWJ1dGUgdmFsdWUgc3RyaW5n","attribute_type":"ATTRIBUTE_TYPE_STRING","address":"%s","expiration_date":null}],"pagination":{"next_key":null,"total":"0"}}`, s.account1Addr.String(), s.account1Addr.String()), }, { name: "should get attribute by name with text output", - args: []string{s.account1Addr.String(), "example.attribute", fmt.Sprintf("--%s=text", tmcli.OutputFlag)}, + args: []string{s.account1Addr.String(), "example.attribute", fmt.Sprintf("--%s=text", cmtcli.OutputFlag)}, expectedOutput: fmt.Sprintf(`account: %s attributes: - address: %s @@ -391,7 +391,7 @@ pagination: }, { name: "should fail to find unknown attribute output", - args: []string{s.account1Addr.String(), "example.none", fmt.Sprintf("--%s=text", tmcli.OutputFlag)}, + args: []string{s.account1Addr.String(), "example.none", fmt.Sprintf("--%s=text", cmtcli.OutputFlag)}, expectedOutput: fmt.Sprintf(`account: %s attributes: [] pagination: @@ -400,7 +400,7 @@ pagination: }, { name: "should fail to find unknown attribute by name with json output", - args: []string{s.account1Addr.String(), "example.none", fmt.Sprintf("--%s=json", tmcli.OutputFlag)}, + args: []string{s.account1Addr.String(), "example.none", fmt.Sprintf("--%s=json", cmtcli.OutputFlag)}, expectedOutput: fmt.Sprintf(`{"account":"%s","attributes":[],"pagination":{"next_key":null,"total":"0"}}`, s.account1Addr.String()), }, } @@ -425,12 +425,12 @@ func (s *IntegrationTestSuite) TestScanAccountAttributesCmd() { }{ { name: "should get attribute by suffix with json output", - args: []string{s.account1Addr.String(), "attribute", fmt.Sprintf("--%s=json", tmcli.OutputFlag)}, + args: []string{s.account1Addr.String(), "attribute", fmt.Sprintf("--%s=json", cmtcli.OutputFlag)}, expectedOutput: fmt.Sprintf(`{"account":"%s","attributes":[{"name":"example.attribute","value":"ZXhhbXBsZSBhdHRyaWJ1dGUgdmFsdWUgc3RyaW5n","attribute_type":"ATTRIBUTE_TYPE_STRING","address":"%s","expiration_date":null}],"pagination":{"next_key":null,"total":"0"}}`, s.account1Addr.String(), s.account1Addr.String()), }, { name: "should get attribute by suffix with text output", - args: []string{s.account1Addr.String(), "attribute", fmt.Sprintf("--%s=text", tmcli.OutputFlag)}, + args: []string{s.account1Addr.String(), "attribute", fmt.Sprintf("--%s=text", cmtcli.OutputFlag)}, expectedOutput: fmt.Sprintf(`account: %s attributes: - address: %s @@ -444,7 +444,7 @@ pagination: }, { name: "should fail to find unknown attribute suffix text output", - args: []string{s.account1Addr.String(), "none", fmt.Sprintf("--%s=text", tmcli.OutputFlag)}, + args: []string{s.account1Addr.String(), "none", fmt.Sprintf("--%s=text", cmtcli.OutputFlag)}, expectedOutput: fmt.Sprintf(`account: %s attributes: [] pagination: @@ -453,7 +453,7 @@ pagination: }, { name: "should get attribute by suffix with json output", - args: []string{s.account1Addr.String(), "none", fmt.Sprintf("--%s=json", tmcli.OutputFlag)}, + args: []string{s.account1Addr.String(), "none", fmt.Sprintf("--%s=json", cmtcli.OutputFlag)}, expectedOutput: fmt.Sprintf(`{"account":"%s","attributes":[],"pagination":{"next_key":null,"total":"0"}}`, s.account1Addr.String()), }, } @@ -478,12 +478,12 @@ func (s *IntegrationTestSuite) TestListAccountAttributesCmd() { }{ { name: "should list all attributes for account with json output", - args: []string{s.account1Addr.String(), fmt.Sprintf("--%s=json", tmcli.OutputFlag)}, + args: []string{s.account1Addr.String(), fmt.Sprintf("--%s=json", cmtcli.OutputFlag)}, expectedOutput: fmt.Sprintf(`{"account":"%[1]s","attributes":[{"name":"example.attribute.count","value":"Mg==","attribute_type":"ATTRIBUTE_TYPE_INT","address":"%[1]s","expiration_date":null},{"name":"example.attribute","value":"ZXhhbXBsZSBhdHRyaWJ1dGUgdmFsdWUgc3RyaW5n","attribute_type":"ATTRIBUTE_TYPE_STRING","address":"%[1]s","expiration_date":null},{"name":"accountdata","value":"YWNjb3VudGRhdGEgc2V0IGF0IGdlbmVzaXM=","attribute_type":"ATTRIBUTE_TYPE_STRING","address":"%[1]s","expiration_date":null}],"pagination":{"next_key":null,"total":"0"}}`, s.account1Addr.String()), }, { name: "should list all attributes for account text output", - args: []string{s.account1Addr.String(), fmt.Sprintf("--%s=text", tmcli.OutputFlag)}, + args: []string{s.account1Addr.String(), fmt.Sprintf("--%s=text", cmtcli.OutputFlag)}, expectedOutput: fmt.Sprintf(`account: %[1]s attributes: - address: %[1]s @@ -528,12 +528,12 @@ func (s *IntegrationTestSuite) TestGetAttributeParamsCmd() { }{ { name: "json output", - args: []string{fmt.Sprintf("--%s=json", tmcli.OutputFlag)}, + args: []string{fmt.Sprintf("--%s=json", cmtcli.OutputFlag)}, expectedOutput: "{\"max_value_length\":128}", }, { name: "text output", - args: []string{fmt.Sprintf("--%s=text", tmcli.OutputFlag)}, + args: []string{fmt.Sprintf("--%s=text", cmtcli.OutputFlag)}, expectedOutput: "max_value_length: 128", }, } @@ -567,7 +567,7 @@ func (s *IntegrationTestSuite) TestAttributeAccountsCmd() { s.Run(tc.name, func() { cmd := cli.GetAttributeAccountsCmd() clientCtx := s.testnet.Validators[0].ClientCtx - tc.args = append(tc.args, fmt.Sprintf("--%s=json", tmcli.OutputFlag)) + tc.args = append(tc.args, fmt.Sprintf("--%s=json", cmtcli.OutputFlag)) out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args) s.Require().NoError(err) s.Require().Equal(tc.expectedOutput, strings.TrimSpace(out.String())) @@ -594,8 +594,8 @@ func (s *IntegrationTestSuite) TestAttributeTxCommands() { "attribute", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErr: false, respType: &sdk.TxResponse{}, @@ -611,8 +611,8 @@ func (s *IntegrationTestSuite) TestAttributeTxCommands() { "test value", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErr: false, respType: &sdk.TxResponse{}, @@ -629,8 +629,8 @@ func (s *IntegrationTestSuite) TestAttributeTxCommands() { "foo", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErr: true, respType: &sdk.TxResponse{}, @@ -647,8 +647,8 @@ func (s *IntegrationTestSuite) TestAttributeTxCommands() { "2050-01-15T00:00:00Z", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErr: false, respType: &sdk.TxResponse{}, @@ -664,8 +664,8 @@ func (s *IntegrationTestSuite) TestAttributeTxCommands() { "test value", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErr: true, respType: &sdk.TxResponse{}, @@ -681,8 +681,8 @@ func (s *IntegrationTestSuite) TestAttributeTxCommands() { "3.14159", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErr: true, respType: &sdk.TxResponse{}, @@ -698,8 +698,8 @@ func (s *IntegrationTestSuite) TestAttributeTxCommands() { "3.14159", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErr: true, respType: &sdk.TxResponse{}, @@ -725,13 +725,13 @@ func (s *IntegrationTestSuite) TestAttributeTxCommands() { } func (s *IntegrationTestSuite) TestAccountDataCmds() { - jsonOut := "--" + tmcli.OutputFlag + "=json" + jsonOut := "--" + cmtcli.OutputFlag + "=json" txFlags := func(from string, firstArgs ...string) []string { return append(firstArgs, "--"+flags.FlagFrom, from, "--"+flags.FlagSkipConfirmation, - "--"+flags.FlagBroadcastMode, flags.BroadcastBlock, - "--"+flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String(), + "--"+flags.FlagBroadcastMode, flags.BroadcastSync, // TODO[1760]: broadcast + "--"+flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String(), jsonOut, ) } @@ -901,8 +901,8 @@ func (s *IntegrationTestSuite) TestUpdateAccountAttributeTxCommands() { "attribute", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErr: false, respType: &sdk.TxResponse{}, @@ -918,8 +918,8 @@ func (s *IntegrationTestSuite) TestUpdateAccountAttributeTxCommands() { "test value", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErr: false, respType: &sdk.TxResponse{}, @@ -937,8 +937,8 @@ func (s *IntegrationTestSuite) TestUpdateAccountAttributeTxCommands() { "10", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErr: true, respType: &sdk.TxResponse{}, @@ -956,8 +956,8 @@ func (s *IntegrationTestSuite) TestUpdateAccountAttributeTxCommands() { "10", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErr: true, respType: &sdk.TxResponse{}, @@ -975,8 +975,8 @@ func (s *IntegrationTestSuite) TestUpdateAccountAttributeTxCommands() { "10", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErr: true, respType: &sdk.TxResponse{}, @@ -994,8 +994,8 @@ func (s *IntegrationTestSuite) TestUpdateAccountAttributeTxCommands() { "nan", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErr: true, respType: &sdk.TxResponse{}, @@ -1013,8 +1013,8 @@ func (s *IntegrationTestSuite) TestUpdateAccountAttributeTxCommands() { "10", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErr: false, respType: &sdk.TxResponse{}, @@ -1058,8 +1058,8 @@ func (s *IntegrationTestSuite) TestDeleteDistinctAccountAttributeTxCommands() { "attribute", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErr: false, respType: &sdk.TxResponse{}, @@ -1075,8 +1075,8 @@ func (s *IntegrationTestSuite) TestDeleteDistinctAccountAttributeTxCommands() { "test value", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErr: false, respType: &sdk.TxResponse{}, @@ -1092,8 +1092,8 @@ func (s *IntegrationTestSuite) TestDeleteDistinctAccountAttributeTxCommands() { "test value", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErr: true, respType: &sdk.TxResponse{}, @@ -1109,8 +1109,8 @@ func (s *IntegrationTestSuite) TestDeleteDistinctAccountAttributeTxCommands() { "test value", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErr: true, respType: &sdk.TxResponse{}, @@ -1126,8 +1126,8 @@ func (s *IntegrationTestSuite) TestDeleteDistinctAccountAttributeTxCommands() { "test value", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErr: false, respType: &sdk.TxResponse{}, @@ -1171,8 +1171,8 @@ func (s *IntegrationTestSuite) TestDeleteAccountAttributeTxCommands() { "attribute", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErr: false, respType: &sdk.TxResponse{}, @@ -1188,8 +1188,8 @@ func (s *IntegrationTestSuite) TestDeleteAccountAttributeTxCommands() { "test value", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErr: false, respType: &sdk.TxResponse{}, @@ -1203,8 +1203,8 @@ func (s *IntegrationTestSuite) TestDeleteAccountAttributeTxCommands() { s.account2Addr.String(), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErr: false, respType: &sdk.TxResponse{}, @@ -1218,8 +1218,8 @@ func (s *IntegrationTestSuite) TestDeleteAccountAttributeTxCommands() { s.account2Addr.String(), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErr: false, respType: &sdk.TxResponse{}, @@ -1245,7 +1245,7 @@ func (s *IntegrationTestSuite) TestDeleteAccountAttributeTxCommands() { } func (s *IntegrationTestSuite) TestPaginationWithPageKey() { - asJson := fmt.Sprintf("--%s=json", tmcli.OutputFlag) + asJson := fmt.Sprintf("--%s=json", cmtcli.OutputFlag) s.T().Run("GetAccountAttribute", func(t *testing.T) { // Choosing page size = 35 because it a) isn't the default, b) doesn't evenly divide 500. @@ -1467,8 +1467,8 @@ func (s *IntegrationTestSuite) TestUpdateAccountAttributeExpirationCmd() { "attribute", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -1482,8 +1482,8 @@ func (s *IntegrationTestSuite) TestUpdateAccountAttributeExpirationCmd() { "test value", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -1497,8 +1497,8 @@ func (s *IntegrationTestSuite) TestUpdateAccountAttributeExpirationCmd() { "test value", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErr: `invalid address: must be either an account address or scope metadata address: "not-a-address"`, }, @@ -1512,8 +1512,8 @@ func (s *IntegrationTestSuite) TestUpdateAccountAttributeExpirationCmd() { "test value", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErr: `unable to parse time "test value" required format is RFC3339 (2006-01-02T15:04:05Z07:00): parsing time "test value" as "2006-01-02T15:04:05Z07:00": cannot parse "test value" as "2006"`, }, @@ -1527,8 +1527,8 @@ func (s *IntegrationTestSuite) TestUpdateAccountAttributeExpirationCmd() { "2050-01-15T00:00:00Z", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -1541,8 +1541,8 @@ func (s *IntegrationTestSuite) TestUpdateAccountAttributeExpirationCmd() { "test value", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, diff --git a/x/attribute/client/cli/query.go b/x/attribute/client/cli/query.go index 236a156fcb..8b9c5b5577 100644 --- a/x/attribute/client/cli/query.go +++ b/x/attribute/client/cli/query.go @@ -84,7 +84,7 @@ func GetAccountAttributeCmd() *cobra.Command { } queryClient := types.NewQueryClient(clientCtx) - pageReq, err := client.ReadPageRequestWithPageKeyDecoded(cmd.Flags()) + pageReq, err := client.ReadPageRequest(cmd.Flags()) // TODO[1760]: cli: ReadPageRequestWithPageKeyDecoded if err != nil { return err } @@ -130,7 +130,7 @@ func ListAccountAttributesCmd() *cobra.Command { } queryClient := types.NewQueryClient(clientCtx) - pageReq, err := client.ReadPageRequestWithPageKeyDecoded(cmd.Flags()) + pageReq, err := client.ReadPageRequest(cmd.Flags()) // TODO[1760]: cli: ReadPageRequestWithPageKeyDecoded if err != nil { return err } @@ -174,7 +174,7 @@ func ScanAccountAttributesCmd() *cobra.Command { } queryClient := types.NewQueryClient(clientCtx) - pageReq, err := client.ReadPageRequestWithPageKeyDecoded(cmd.Flags()) + pageReq, err := client.ReadPageRequest(cmd.Flags()) // TODO[1760]: cli: ReadPageRequestWithPageKeyDecoded if err != nil { return err } @@ -219,7 +219,7 @@ func GetAttributeAccountsCmd() *cobra.Command { } queryClient := types.NewQueryClient(clientCtx) - pageReq, err := client.ReadPageRequestWithPageKeyDecoded(cmd.Flags()) + pageReq, err := client.ReadPageRequest(cmd.Flags()) // TODO[1760]: cli: ReadPageRequestWithPageKeyDecoded if err != nil { return err } diff --git a/x/attribute/handler.go b/x/attribute/handler.go index ee8ae5b715..2351d6df22 100644 --- a/x/attribute/handler.go +++ b/x/attribute/handler.go @@ -9,7 +9,8 @@ import ( ) // NewHandler returns a handler for attribute messages. -func NewHandler(k keeper.Keeper) sdk.Handler { +// TODO[1760]: attribute: Delete the attribute NewHandler. +func NewHandler(k keeper.Keeper) func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { msgServer := keeper.NewMsgServerImpl(k) return func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { diff --git a/x/attribute/handler_test.go b/x/attribute/handler_test.go index eba3bbb6e5..7474ca01cc 100644 --- a/x/attribute/handler_test.go +++ b/x/attribute/handler_test.go @@ -5,7 +5,6 @@ import ( "testing" "github.com/golang/protobuf/proto" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" @@ -20,12 +19,14 @@ import ( nametypes "github.com/provenance-io/provenance/x/name/types" ) +// TODO[1760]: attribute: Migrate the attribute handler tests to the keeper. + type HandlerTestSuite struct { suite.Suite app *app.App ctx sdk.Context - handler sdk.Handler + handler func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) pubkey1 cryptotypes.PubKey user1 string @@ -34,7 +35,7 @@ type HandlerTestSuite struct { func (s *HandlerTestSuite) SetupTest() { s.app = app.Setup(s.T()) - s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{}) + s.ctx = s.app.BaseApp.NewContext(false) s.handler = attribute.NewHandler(s.app.AttributeKeeper) s.pubkey1 = secp256k1.GenPrivKey().PubKey() @@ -67,7 +68,7 @@ type CommonTest struct { expectedEvent proto.Message } -func (s HandlerTestSuite) containsMessage(result *sdk.Result, msg proto.Message) bool { +func (s *HandlerTestSuite) containsMessage(result *sdk.Result, msg proto.Message) bool { events := result.GetEvents().ToABCIEvents() for _, event := range events { typeEvent, _ := sdk.ParseTypedEvent(event) @@ -78,7 +79,7 @@ func (s HandlerTestSuite) containsMessage(result *sdk.Result, msg proto.Message) return false } -func (s HandlerTestSuite) runTests(cases []CommonTest) { +func (s *HandlerTestSuite) runTests(cases []CommonTest) { for _, tc := range cases { s.T().Run(tc.name, func(t *testing.T) { response, err := s.handler(s.ctx, tc.msg) @@ -96,7 +97,7 @@ func (s HandlerTestSuite) runTests(cases []CommonTest) { } } -func (s HandlerTestSuite) TestMsgAddAttributeRequest() { +func (s *HandlerTestSuite) TestMsgAddAttributeRequest() { cases := []CommonTest{ { "should successfully add new attribute", @@ -117,7 +118,7 @@ func (s HandlerTestSuite) TestMsgAddAttributeRequest() { s.runTests(cases) } -func (s HandlerTestSuite) TestMsgUpdateAttributeRequest() { +func (s *HandlerTestSuite) TestMsgUpdateAttributeRequest() { testAttr := types.Attribute{ Address: s.user1, Name: "example.name", @@ -154,7 +155,7 @@ func (s HandlerTestSuite) TestMsgUpdateAttributeRequest() { s.runTests(cases) } -func (s HandlerTestSuite) TestMsgDistinctDeleteAttributeRequest() { +func (s *HandlerTestSuite) TestMsgDistinctDeleteAttributeRequest() { testAttr := types.Attribute{ Address: s.user1, Name: "example.name", @@ -172,13 +173,13 @@ func (s HandlerTestSuite) TestMsgDistinctDeleteAttributeRequest() { types.NewMsgDeleteDistinctAttributeRequest(s.user1, s.user1Addr, "example.name", []byte("value")), []string{s.user1}, "", - types.NewEventDistinctAttributeDelete("example.name", string([]byte("value")), s.user1, s.user1), + types.NewEventDistinctAttributeDelete("example.name", "value", s.user1, s.user1), }, } s.runTests(cases) } -func (s HandlerTestSuite) TestMsgDeleteAttributeRequest() { +func (s *HandlerTestSuite) TestMsgDeleteAttributeRequest() { testAttr := types.Attribute{ Address: s.user1, Name: "example.name", diff --git a/x/attribute/keeper/genesis.go b/x/attribute/keeper/genesis.go index 77cb88b05b..e369f06538 100644 --- a/x/attribute/keeper/genesis.go +++ b/x/attribute/keeper/genesis.go @@ -3,7 +3,7 @@ package keeper import ( "fmt" - "github.com/tendermint/tendermint/libs/log" + "cosmossdk.io/log" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/attribute/keeper/genesis_test.go b/x/attribute/keeper/genesis_test.go index 2ac2c0b28a..da9d8a3b83 100644 --- a/x/attribute/keeper/genesis_test.go +++ b/x/attribute/keeper/genesis_test.go @@ -8,14 +8,13 @@ import ( "github.com/rs/zerolog" "github.com/stretchr/testify/suite" - "github.com/cosmos/cosmos-sdk/server" + "cosmossdk.io/log" + sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - "github.com/provenance-io/provenance/x/attribute/keeper" - "github.com/tendermint/tendermint/libs/log" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/provenance-io/provenance/app" + "github.com/provenance-io/provenance/x/attribute/keeper" "github.com/provenance-io/provenance/x/attribute/types" nametypes "github.com/provenance-io/provenance/x/name/types" ) @@ -45,13 +44,12 @@ func (s *GenesisTestSuite) SetupSuite() { // Error log lines will start with "ERR ". // Info log lines will start with "INF ". // Debug log lines are omitted, but would start with "DBG ". - logger := zerolog.New(lw).Level(zerolog.InfoLevel) - return server.ZeroLogWrapper{Logger: logger} + return log.NewCustomLogger(zerolog.New(lw).Level(zerolog.InfoLevel)) } defer app.SetLoggerMaker(app.SetLoggerMaker(bufferedLoggerMaker)) s.app = app.Setup(s.T()) s.logBuffer.Reset() - s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{}) + s.ctx = s.app.BaseApp.NewContext(false) } // newMockNameKeeper creates a mockNameKeeper backed by this suite's app's name keeper. @@ -79,7 +77,7 @@ func (s *GenesisTestSuite) TestInitGenesisModAcctAndNameRecord() { modAddr := authtypes.NewModuleAddress(types.ModuleName) acct := s.app.AccountKeeper.GetAccount(s.ctx, modAddr) s.Require().NotNil(acct, "GetAccount(%q) (%s module account address)", modAddr.String(), types.ModuleName) - modAcct, isModAcct := acct.(authtypes.ModuleAccountI) + modAcct, isModAcct := acct.(sdk.ModuleAccountI) s.Require().True(isModAcct, "can cast %T to authtypes.ModuleAccountI", acct) s.Assert().Equal(types.ModuleName, modAcct.GetName(), "module account name") }) diff --git a/x/attribute/keeper/keeper.go b/x/attribute/keeper/keeper.go index 034c3093a5..621f5d8946 100644 --- a/x/attribute/keeper/keeper.go +++ b/x/attribute/keeper/keeper.go @@ -7,10 +7,10 @@ import ( "strings" "time" - "github.com/tendermint/tendermint/libs/log" + "cosmossdk.io/log" + storetypes "cosmossdk.io/store/types" "github.com/cosmos/cosmos-sdk/codec" - storetypes "github.com/cosmos/cosmos-sdk/store/types" "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" @@ -104,7 +104,7 @@ func (k Keeper) GetAttributes(ctx sdk.Context, addr string, name string) ([]type func (k Keeper) IterateRecords(ctx sdk.Context, prefix []byte, handle Handler) error { // Init an attribute record iterator store := ctx.KVStore(k.storeKey) - iterator := sdk.KVStorePrefixIterator(store, prefix) + iterator := storetypes.KVStorePrefixIterator(store, prefix) defer iterator.Close() // Iterate over records, processing callbacks. for ; iterator.Valid(); iterator.Next() { @@ -351,7 +351,7 @@ func (k Keeper) UpdateAttributeExpiration(ctx sdk.Context, updateAttribute types func (k Keeper) AccountsByAttribute(ctx sdk.Context, name string) (addresses []sdk.AccAddress, err error) { store := ctx.KVStore(k.storeKey) keyPrefix := types.AttributeNameKeyPrefix(name) - it := sdk.KVStorePrefixIterator(store, keyPrefix) + it := storetypes.KVStorePrefixIterator(store, keyPrefix) defer it.Close() for ; it.Valid(); it.Next() { addressBytes, err := types.GetAddressFromKey(it.Key()) @@ -384,7 +384,7 @@ func (k Keeper) DeleteAttribute(ctx sdk.Context, addr string, name string, value } store := ctx.KVStore(k.storeKey) - iter := sdk.KVStorePrefixIterator(store, types.AddrStrAttributesNameKeyPrefix(addr, name)) + iter := storetypes.KVStorePrefixIterator(store, types.AddrStrAttributesNameKeyPrefix(addr, name)) defer func() { if iter != nil { iter.Close() @@ -462,8 +462,8 @@ func (k Keeper) PurgeAttribute(ctx sdk.Context, name string, owner sdk.AccAddres } // getAddrAttributesKeysByName returns an list of attribute keys for the an account and attribute name -func (k Keeper) getAddrAttributesKeysByName(store sdk.KVStore, acctAddr sdk.AccAddress, attributeName string) (attributeKeys [][]byte) { - it := sdk.KVStorePrefixIterator(store, types.AddrAttributesNameKeyPrefix(acctAddr, attributeName)) +func (k Keeper) getAddrAttributesKeysByName(store storetypes.KVStore, acctAddr sdk.AccAddress, attributeName string) (attributeKeys [][]byte) { + it := storetypes.KVStorePrefixIterator(store, types.AddrAttributesNameKeyPrefix(acctAddr, attributeName)) defer it.Close() for ; it.Valid(); it.Next() { attributeKeys = append(attributeKeys, it.Key()) @@ -477,7 +477,7 @@ type namePred = func(string) bool // Scan all attributes that match the given prefix. func (k Keeper) prefixScan(ctx sdk.Context, prefix []byte, f namePred) (attrs []types.Attribute, err error) { store := ctx.KVStore(k.storeKey) - it := sdk.KVStorePrefixIterator(store, prefix) + it := storetypes.KVStorePrefixIterator(store, prefix) defer it.Close() for ; it.Valid(); it.Next() { attr := types.Attribute{} @@ -565,7 +565,7 @@ func (k Keeper) DeleteExpiredAttributes(ctx sdk.Context, limit int) int { } // addAttributeExpireLookup safely adds attribute expire key to store, if expire date exists, else no-op -func (k Keeper) addAttributeExpireLookup(store sdk.KVStore, attr types.Attribute) { +func (k Keeper) addAttributeExpireLookup(store storetypes.KVStore, attr types.Attribute) { expireKey := types.AttributeExpireKey(attr) if expireKey != nil { store.Set(expireKey, []byte{}) @@ -573,7 +573,7 @@ func (k Keeper) addAttributeExpireLookup(store sdk.KVStore, attr types.Attribute } // deleteAttributeExpireLookup safely removes attribute expire key from store if expire date exists, else no-op -func (k Keeper) deleteAttributeExpireLookup(store sdk.KVStore, attr types.Attribute) { +func (k Keeper) deleteAttributeExpireLookup(store storetypes.KVStore, attr types.Attribute) { expireKey := types.AttributeExpireKey(attr) if expireKey != nil { store.Delete(expireKey) diff --git a/x/attribute/keeper/keeper_test.go b/x/attribute/keeper/keeper_test.go index 795ef671dd..bb2f696e4c 100644 --- a/x/attribute/keeper/keeper_test.go +++ b/x/attribute/keeper/keeper_test.go @@ -9,7 +9,7 @@ import ( "github.com/stretchr/testify/suite" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" @@ -47,7 +47,7 @@ func TestKeeperTestSuite(t *testing.T) { func (s *KeeperTestSuite) SetupTest() { s.app = simapp.Setup(s.T()) s.startBlockTime = time.Now() - s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{Time: s.startBlockTime}) + s.ctx = s.app.BaseApp.NewContextLegacy(false, cmtproto.Header{Time: s.startBlockTime}) s.pubkey1 = secp256k1.GenPrivKey().PubKey() s.user1Addr = sdk.AccAddress(s.pubkey1.Address()) @@ -1272,8 +1272,8 @@ func (s *KeeperTestSuite) TestSetAccountData() { event := events[len(events)-1] s.Assert().Contains(event.Type, "EventAccountDataUpdated", "event type") if s.Assert().Len(event.Attributes, 1, "event attributes") { - s.Assert().Equal("account", string(event.Attributes[0].Key), "attribute key") - s.Assert().Equal(`"`+tc.addr+`"`, string(event.Attributes[0].Value), "attribute value") + s.Assert().Equal("account", event.Attributes[0].Key, "attribute key") + s.Assert().Equal(`"`+tc.addr+`"`, event.Attributes[0].Value, "attribute value") } } }) diff --git a/x/attribute/keeper/msg_server.go b/x/attribute/keeper/msg_server.go index ff005a6e9b..2b6f5edf57 100644 --- a/x/attribute/keeper/msg_server.go +++ b/x/attribute/keeper/msg_server.go @@ -4,7 +4,7 @@ import ( "context" "fmt" - "github.com/armon/go-metrics" + "github.com/hashicorp/go-metrics" "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/attribute/keeper/msg_server_test.go b/x/attribute/keeper/msg_server_test.go index a184eb4e09..6360771091 100644 --- a/x/attribute/keeper/msg_server_test.go +++ b/x/attribute/keeper/msg_server_test.go @@ -5,15 +5,14 @@ import ( "testing" "time" + "github.com/stretchr/testify/suite" + "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - "github.com/stretchr/testify/suite" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - simapp "github.com/provenance-io/provenance/app" "github.com/provenance-io/provenance/x/attribute/keeper" "github.com/provenance-io/provenance/x/attribute/types" @@ -30,17 +29,17 @@ type MsgServerTestSuite struct { pubkey1 cryptotypes.PubKey owner1 string owner1Addr sdk.AccAddress - acct1 authtypes.AccountI + acct1 sdk.AccountI addresses []sdk.AccAddress } func (s *MsgServerTestSuite) SetupTest() { s.app = simapp.Setup(s.T()) - s.ctx = s.app.BaseApp.NewContext(true, tmproto.Header{}) + s.ctx = s.app.BaseApp.NewContext(true) s.ctx = s.ctx.WithBlockHeight(1).WithBlockTime(time.Now()) s.msgServer = keeper.NewMsgServerImpl(s.app.AttributeKeeper) - s.app.AccountKeeper.SetParams(s.ctx, authtypes.DefaultParams()) + s.app.AccountKeeper.Params.Set(s.ctx, authtypes.DefaultParams()) s.app.BankKeeper.SetParams(s.ctx, banktypes.DefaultParams()) s.privkey1 = secp256k1.GenPrivKey() diff --git a/x/attribute/keeper/query_server.go b/x/attribute/keeper/query_server.go index 87b6d0d618..26e4656a6b 100644 --- a/x/attribute/keeper/query_server.go +++ b/x/attribute/keeper/query_server.go @@ -8,7 +8,7 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "github.com/cosmos/cosmos-sdk/store/prefix" + "cosmossdk.io/store/prefix" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/query" diff --git a/x/attribute/keeper/query_server_test.go b/x/attribute/keeper/query_server_test.go index ac59c502cf..3230a3101b 100644 --- a/x/attribute/keeper/query_server_test.go +++ b/x/attribute/keeper/query_server_test.go @@ -14,7 +14,6 @@ import ( "github.com/cosmos/cosmos-sdk/types/query" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" simapp "github.com/provenance-io/provenance/app" "github.com/provenance-io/provenance/testutil" @@ -35,15 +34,15 @@ type QueryServerTestSuite struct { pubkey1 cryptotypes.PubKey owner1 string owner1Addr sdk.AccAddress - acct1 authtypes.AccountI + acct1 sdk.AccountI addresses []sdk.AccAddress } func (s *QueryServerTestSuite) SetupTest() { s.app = simapp.SetupQuerier(s.T()) - s.ctx = s.app.BaseApp.NewContext(true, tmproto.Header{}) - s.app.AccountKeeper.SetParams(s.ctx, authtypes.DefaultParams()) + s.ctx = s.app.BaseApp.NewContext(true) + s.app.AccountKeeper.Params.Set(s.ctx, authtypes.DefaultParams()) s.app.BankKeeper.SetParams(s.ctx, banktypes.DefaultParams()) s.cfg = testutil.DefaultTestNetworkConfig() queryHelper := baseapp.NewQueryServerTestHelper(s.ctx, s.app.InterfaceRegistry()) diff --git a/x/attribute/module.go b/x/attribute/module.go index adc7721408..f1d4bcfdda 100644 --- a/x/attribute/module.go +++ b/x/attribute/module.go @@ -9,7 +9,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" - abci "github.com/tendermint/tendermint/abci/types" + abci "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" @@ -31,6 +31,7 @@ var ( _ module.AppModule = AppModule{} _ module.AppModuleBasic = AppModuleBasic{} _ module.AppModuleSimulation = AppModule{} + // TODO[1760]: app-module: Add more assertions for the new types and clean up stuff no longer needed. ) // AppModuleBasic contains non-dependent elements for the attribute module. @@ -109,6 +110,12 @@ func NewAppModule( } } +// IsOnePerModuleType is a dummy function that satisfies the OnePerModuleType interface (needed by AppModule). +func (AppModule) IsOnePerModuleType() {} + +// IsAppModule is a dummy function that satisfies the AppModule interface. +func (AppModule) IsAppModule() {} + // Name returns the module name. func (AppModule) Name() string { return types.ModuleName @@ -117,21 +124,6 @@ func (AppModule) Name() string { // RegisterInvariants does nothing. func (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} -// Route returns the message routing key for the attribute module. -func (am AppModule) Route() sdk.Route { - return sdk.NewRoute(types.RouterKey, NewHandler(am.keeper)) -} - -// QuerierRoute returns the query route for this module. -func (am AppModule) QuerierRoute() string { - return types.QuerierRoute -} - -// LegacyQuerierHandler returns no sdk.Querier. -func (am AppModule) LegacyQuerierHandler(_ *codec.LegacyAmino) sdk.Querier { - return nil -} - // RegisterServices registers module services. func (am AppModule) RegisterServices(cfg module.Configurator) { types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) @@ -153,14 +145,9 @@ func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.Raw } // BeginBlock returns the begin blocker for the attribute module. -func (am AppModule) BeginBlock(ctx sdk.Context, _ abci.RequestBeginBlock) { - BeginBlocker(ctx, am.keeper) -} - -// EndBlock returns the end blocker for the attribute module. It returns no validator -// updates. -func (AppModule) EndBlock(_ sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate { - return []abci.ValidatorUpdate{} +func (am AppModule) BeginBlock(ctx context.Context) error { + BeginBlocker(sdk.UnwrapSDKContext(ctx), am.keeper) + return nil } // ____________________________________________________________________________ @@ -179,12 +166,12 @@ func (am AppModule) ProposalContents(_ module.SimulationState) []simtypes.Weight } // RandomizedParams creates randomized attribute param changes for the simulator. -func (AppModule) RandomizedParams(r *rand.Rand) []simtypes.ParamChange { +func (AppModule) RandomizedParams(r *rand.Rand) []simtypes.LegacyParamChange { return simulation.ParamChanges(r) } // RegisterStoreDecoder registers a decoder for attribute module's types -func (am AppModule) RegisterStoreDecoder(sdr sdk.StoreDecoderRegistry) { +func (am AppModule) RegisterStoreDecoder(sdr simtypes.StoreDecoderRegistry) { sdr[types.StoreKey] = simulation.NewDecodeStore(am.cdc) } diff --git a/x/attribute/simulation/genesis.go b/x/attribute/simulation/genesis.go index 759081b6ee..901d822838 100644 --- a/x/attribute/simulation/genesis.go +++ b/x/attribute/simulation/genesis.go @@ -26,7 +26,7 @@ func GenMaxValueLength(r *rand.Rand) uint32 { func RandomizedGenState(simState *module.SimulationState) { var maxValueLength uint32 simState.AppParams.GetOrGenerate( - simState.Cdc, MaxValueLength, &maxValueLength, simState.Rand, + MaxValueLength, &maxValueLength, simState.Rand, func(r *rand.Rand) { maxValueLength = GenMaxValueLength(r) }, ) diff --git a/x/attribute/simulation/operations.go b/x/attribute/simulation/operations.go index 6c8ebed521..ce5706c54d 100644 --- a/x/attribute/simulation/operations.go +++ b/x/attribute/simulation/operations.go @@ -6,9 +6,10 @@ import ( "github.com/google/uuid" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" + "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" - "github.com/cosmos/cosmos-sdk/simapp/helpers" sdk "github.com/cosmos/cosmos-sdk/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" @@ -48,31 +49,31 @@ func WeightedOperations( weightMsgSetAccountDataRequest int ) - appParams.GetOrGenerate(cdc, OpWeightMsgAddAttribute, &weightMsgAddAttribute, nil, + appParams.GetOrGenerate(OpWeightMsgAddAttribute, &weightMsgAddAttribute, nil, func(_ *rand.Rand) { weightMsgAddAttribute = simappparams.DefaultWeightMsgAddAttribute }, ) - appParams.GetOrGenerate(cdc, OpWeightMsgUpdateAttribute, &weightMsgUpdateAttribute, nil, + appParams.GetOrGenerate(OpWeightMsgUpdateAttribute, &weightMsgUpdateAttribute, nil, func(_ *rand.Rand) { weightMsgUpdateAttribute = simappparams.DefaultWeightMsgUpdateAttribute }, ) - appParams.GetOrGenerate(cdc, OpWeightMsgDeleteAttribute, &weightMsgDeleteAttribute, nil, + appParams.GetOrGenerate(OpWeightMsgDeleteAttribute, &weightMsgDeleteAttribute, nil, func(_ *rand.Rand) { weightMsgDeleteAttribute = simappparams.DefaultWeightMsgDeleteAttribute }, ) - appParams.GetOrGenerate(cdc, OpWeightMsgDeleteDistinctAttribute, &weightMsgDeleteDistinctAttribute, nil, + appParams.GetOrGenerate(OpWeightMsgDeleteDistinctAttribute, &weightMsgDeleteDistinctAttribute, nil, func(_ *rand.Rand) { weightMsgDeleteDistinctAttribute = simappparams.DefaultWeightMsgDeleteDistinctAttribute }, ) - appParams.GetOrGenerate(cdc, OpWeightMsgSetAccountData, &weightMsgSetAccountDataRequest, nil, + appParams.GetOrGenerate(OpWeightMsgSetAccountData, &weightMsgSetAccountDataRequest, nil, func(_ *rand.Rand) { weightMsgSetAccountDataRequest = simappparams.DefaultWeightMsgSetAccountData }, @@ -270,12 +271,12 @@ func Dispatch( } txGen := simappparams.MakeTestEncodingConfig().TxConfig - tx, err := helpers.GenSignedMockTx( + tx, err := simtestutil.GenSignedMockTx( r, txGen, []sdk.Msg{msg}, fees, - helpers.DefaultGenTxGas, + simtestutil.DefaultGenTxGas, chainID, []uint64{account.GetAccountNumber()}, []uint64{account.GetSequence()}, @@ -290,7 +291,7 @@ func Dispatch( return simtypes.NoOpMsg(sdk.MsgTypeURL(msg), sdk.MsgTypeURL(msg), err.Error()), nil, nil } - return simtypes.NewOperationMsg(msg, true, "", &codec.ProtoCodec{}), nil, nil + return simtypes.NewOperationMsg(msg, true, ""), nil, nil } // getRandomNameRecord finds a random name record owned by a known account. diff --git a/x/attribute/simulation/operations_test.go b/x/attribute/simulation/operations_test.go index f6cb482b3c..13269b83d8 100644 --- a/x/attribute/simulation/operations_test.go +++ b/x/attribute/simulation/operations_test.go @@ -13,9 +13,6 @@ import ( simtypes "github.com/cosmos/cosmos-sdk/types/simulation" "github.com/cosmos/cosmos-sdk/x/bank/testutil" - abci "github.com/tendermint/tendermint/abci/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - "github.com/provenance-io/provenance/app" simappparams "github.com/provenance-io/provenance/app/params" "github.com/provenance-io/provenance/x/attribute/simulation" @@ -31,7 +28,7 @@ type SimTestSuite struct { func (s *SimTestSuite) SetupTest() { s.app = app.Setup(s.T()) - s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{}) + s.ctx = s.app.BaseApp.NewContext(false) } // LogOperationMsg logs all fields of the provided operationMsg. @@ -123,7 +120,7 @@ func (s *SimTestSuite) TestSimulateMsgAddAttribute() { s.LogIfError(s.app.NameKeeper.SetNameRecord(s.ctx, name, accounts[0].Address, false), "SetNameRecord(%q) error", name) // begin a new block - s.app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) + // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) // TODO[1760]: finalize-block // execute operation op := simulation.SimulateMsgAddAttribute(s.app.AttributeKeeper, s.app.AccountKeeper, s.app.BankKeeper, s.app.NameKeeper) @@ -158,7 +155,7 @@ func (s *SimTestSuite) TestSimulateMsgUpdateAttribute() { s.LogIfError(s.app.AttributeKeeper.SetAttribute(s.ctx, attr, accounts[0].Address), "SetAttribute(%q) error", name) // begin a new block - s.app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash, Time: time.Now()}}) + // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash, Time: time.Now()}}) // TODO[1760]: finalize-block // execute operation op := simulation.SimulateMsgUpdateAttribute(s.app.AttributeKeeper, s.app.AccountKeeper, s.app.BankKeeper, s.app.NameKeeper) @@ -190,7 +187,7 @@ func (s *SimTestSuite) TestSimulateMsgDeleteAttribute() { attr := types.NewAttribute(name, accounts[1].Address.String(), types.AttributeType_String, []byte("test"), &expireTime) s.LogIfError(s.app.AttributeKeeper.SetAttribute(s.ctx, attr, accounts[0].Address), "SetAttribute(%q) error", name) // begin a new block - s.app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash, Time: time.Now()}}) + // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash, Time: time.Now()}}) // TODO[1760]: finalize-block // execute operation op := simulation.SimulateMsgDeleteAttribute(s.app.AttributeKeeper, s.app.AccountKeeper, s.app.BankKeeper, s.app.NameKeeper) @@ -223,7 +220,7 @@ func (s *SimTestSuite) TestSimulateMsgDeleteDistinctAttribute() { s.LogIfError(s.app.AttributeKeeper.SetAttribute(s.ctx, attr, accounts[0].Address), "SetAttribute(%q) error", name) // begin a new block - s.app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash, Time: time.Now()}}) + // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash, Time: time.Now()}}) // TODO[1760]: finalize-block // execute operation op := simulation.SimulateMsgDeleteDistinctAttribute(s.app.AttributeKeeper, s.app.AccountKeeper, s.app.BankKeeper, s.app.NameKeeper) @@ -249,7 +246,7 @@ func (s *SimTestSuite) TestSimulateMsgSetAccountData() { r := rand.New(src) accounts := s.getTestingAccounts(r, 3) - s.app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash, Time: time.Now()}}) + // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash, Time: time.Now()}}) // TODO[1760]: finalize-block // execute operation op := simulation.SimulateMsgSetAccountData(s.app.AttributeKeeper, s.app.AccountKeeper, s.app.BankKeeper) @@ -278,7 +275,7 @@ func (s *SimTestSuite) getTestingAccounts(r *rand.Rand, n int) []simtypes.Accoun for i, account := range accounts { acc := s.app.AccountKeeper.NewAccountWithAddress(s.ctx, account.Address) s.app.AccountKeeper.SetAccount(s.ctx, acc) - err := testutil.FundAccount(s.app.BankKeeper, s.ctx, account.Address, initCoins) + err := testutil.FundAccount(s.ctx, s.app.BankKeeper, account.Address, initCoins) s.Require().NoError(err, "[%d]: FundAccount", i) } diff --git a/x/attribute/simulation/params.go b/x/attribute/simulation/params.go index 7b2d502eb4..e704728eda 100644 --- a/x/attribute/simulation/params.go +++ b/x/attribute/simulation/params.go @@ -18,9 +18,9 @@ const ( // ParamChanges defines the parameters that can be modified by param change proposals // on the simulation -func ParamChanges(_ *rand.Rand) []simtypes.ParamChange { - return []simtypes.ParamChange{ - simulation.NewSimParamChange(types.ModuleName, keyMaxValueLength, +func ParamChanges(_ *rand.Rand) []simtypes.LegacyParamChange { + return []simtypes.LegacyParamChange{ + simulation.NewSimLegacyParamChange(types.ModuleName, keyMaxValueLength, func(r *rand.Rand) string { return fmt.Sprintf("%d", GenMaxValueLength(r)) }, diff --git a/x/attribute/types/codec.go b/x/attribute/types/codec.go index d69102c651..14f307cc93 100644 --- a/x/attribute/types/codec.go +++ b/x/attribute/types/codec.go @@ -1,12 +1,11 @@ package types import ( - "github.com/gogo/protobuf/proto" - "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/msgservice" + "github.com/cosmos/gogoproto/proto" ) func RegisterInterfaces(registry types.InterfaceRegistry) { diff --git a/x/attribute/types/expected_keepers.go b/x/attribute/types/expected_keepers.go index 4fc95ce7c2..4313516079 100644 --- a/x/attribute/types/expected_keepers.go +++ b/x/attribute/types/expected_keepers.go @@ -1,16 +1,17 @@ package types import ( + "context" + sdk "github.com/cosmos/cosmos-sdk/types" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" nametypes "github.com/provenance-io/provenance/x/name/types" ) // AccountKeeper defines the expected account keeper used for simulations (noalias) type AccountKeeper interface { - GetAccount(ctx sdk.Context, addr sdk.AccAddress) authtypes.AccountI - GetModuleAccount(ctx sdk.Context, moduleName string) authtypes.ModuleAccountI + GetAccount(ctx context.Context, addr sdk.AccAddress) sdk.AccountI + GetModuleAccount(ctx context.Context, moduleName string) sdk.ModuleAccountI } // NameKeeper defines the expected account keeper used for simulations (noalias) diff --git a/x/attribute/types/keys.go b/x/attribute/types/keys.go index 90988b9b21..3b61a12962 100644 --- a/x/attribute/types/keys.go +++ b/x/attribute/types/keys.go @@ -21,9 +21,6 @@ const ( // RouterKey is the message route for account RouterKey = ModuleName - // QuerierRoute is the querier route for account - QuerierRoute = ModuleName - // AccountDataName is the name of the attribute used to store account data. AccountDataName = "accountdata" ) diff --git a/x/exchange/client/cli/cli_test.go b/x/exchange/client/cli/cli_test.go index f23410121d..3b1b2e24aa 100644 --- a/x/exchange/client/cli/cli_test.go +++ b/x/exchange/client/cli/cli_test.go @@ -15,7 +15,7 @@ import ( "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" - abci "github.com/tendermint/tendermint/abci/types" + abci "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" @@ -29,7 +29,6 @@ import ( authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" bankcli "github.com/cosmos/cosmos-sdk/x/bank/client/cli" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - govcli "github.com/cosmos/cosmos-sdk/x/gov/client/cli" govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" "github.com/provenance-io/provenance/app" @@ -365,7 +364,7 @@ func (s *CmdTestSuite) runTxCmdTestCase(tc txCmdTestCase) { args = append(args, "--"+flags.FlagGas, "250000", "--"+flags.FlagFees, s.bondCoins(10).String(), - "--"+flags.FlagBroadcastMode, flags.BroadcastBlock, + "--"+flags.FlagBroadcastMode, flags.BroadcastSync, // TODO[1760]: broadcast "--"+flags.FlagSkipConfirmation, ) @@ -483,8 +482,8 @@ func (s *CmdTestSuite) getEventAttribute(events []abci.Event, eventType, attribu for _, event := range events { if event.Type == eventType { for _, attr := range event.Attributes { - if string(attr.Key) == attribute { - val := strings.Trim(string(attr.Value), `"`) + if attr.Key == attribute { + val := strings.Trim(attr.Value, `"`) if len(val) > 0 { return val, nil } @@ -616,32 +615,36 @@ func (s *CmdTestSuite) assertGovPropMsg(propID string, msg sdk.Msg) bool { return true } - if !s.Assert().NotEmpty(propID, "proposal id") { - return false - } - expPropMsgAny, err := codectypes.NewAnyWithValue(msg) - if !s.Assert().NoError(err, "NewAnyWithValue(%T)", msg) { - return false - } + // TODO[1760]: gov: Uncomment once we figure out how to query for a gov proposal again. + return false + /* + if !s.Assert().NotEmpty(propID, "proposal id") { + return false + } + expPropMsgAny, err := codectypes.NewAnyWithValue(msg) + if !s.Assert().NoError(err, "NewAnyWithValue(%T)", msg) { + return false + } - clientCtx := s.getClientCtx() - getPropCmd := govcli.GetCmdQueryProposal() - propOutBW, err := clitestutil.ExecTestCLICmd(clientCtx, getPropCmd, []string{propID, "--output", "json"}) - propOutBz := propOutBW.Bytes() - s.T().Logf("Query proposal %s output:\n%s", propID, string(propOutBz)) - if !s.Assert().NoError(err, "GetCmdQueryProposal %s error", propID) { - return false - } + clientCtx := s.getClientCtx() + getPropCmd := govcli.GetCmdQueryProposal() + propOutBW, err := clitestutil.ExecTestCLICmd(clientCtx, getPropCmd, []string{propID, "--output", "json"}) + propOutBz := propOutBW.Bytes() + s.T().Logf("Query proposal %s output:\n%s", propID, string(propOutBz)) + if !s.Assert().NoError(err, "GetCmdQueryProposal %s error", propID) { + return false + } - var prop govv1.Proposal - err = clientCtx.Codec.UnmarshalJSON(propOutBz, &prop) - if !s.Assert().NoError(err, "UnmarshalJSON on proposal %s response", propID) { - return false - } - if !s.Assert().Len(prop.Messages, 1, "number of messages in proposal %s", propID) { - return false - } - return s.Assert().Equal(expPropMsgAny, prop.Messages[0], "the message in proposal %s", propID) + var prop govv1.Proposal + err = clientCtx.Codec.UnmarshalJSON(propOutBz, &prop) + if !s.Assert().NoError(err, "UnmarshalJSON on proposal %s response", propID) { + return false + } + if !s.Assert().Len(prop.Messages, 1, "number of messages in proposal %s", propID) { + return false + } + return s.Assert().Equal(expPropMsgAny, prop.Messages[0], "the message in proposal %s", propID) + */ } // govPropFollowup returns a followup function that identifies the new proposal id, looks it up, @@ -737,7 +740,7 @@ func (s *CmdTestSuite) createOrder(order *exchange.Order, creationFee *sdk.Coin) } args = append(args, "--"+flags.FlagFees, s.bondCoins(10).String(), - "--"+flags.FlagBroadcastMode, flags.BroadcastBlock, + "--"+flags.FlagBroadcastMode, flags.BroadcastSync, // TODO[1760]: broadcast "--"+flags.FlagSkipConfirmation, ) @@ -765,28 +768,33 @@ func (s *CmdTestSuite) createOrder(order *exchange.Order, creationFee *sdk.Coin) // queryBankBalances executes a bank query to get an account's balances. func (s *CmdTestSuite) queryBankBalances(addr string) sdk.Coins { - clientCtx := s.getClientCtx() - cmd := bankcli.GetBalancesCmd() - args := []string{addr, "--output", "json"} - outBW, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, args) - s.Require().NoError(err, "ExecTestCLICmd %s %q", cmd.Name(), args) - outBz := outBW.Bytes() + // TODO[1760]: bank: Uncomment once we know how to query for bank balances again. + return nil + /* + clientCtx := s.getClientCtx() + cmd := bankcli.GetBalancesCmd() + args := []string{addr, "--output", "json"} + outBW, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, args) + s.Require().NoError(err, "ExecTestCLICmd %s %q", cmd.Name(), args) + outBz := outBW.Bytes() - var resp banktypes.QueryAllBalancesResponse - err = clientCtx.Codec.UnmarshalJSON(outBz, &resp) - s.Require().NoError(err, "UnmarshalJSON(%q, %T)", string(outBz), &resp) - return resp.Balances + var resp banktypes.QueryAllBalancesResponse + err = clientCtx.Codec.UnmarshalJSON(outBz, &resp) + s.Require().NoError(err, "UnmarshalJSON(%q, %T)", string(outBz), &resp) + return resp.Balances + */ } // execBankSend executes a bank send command. func (s *CmdTestSuite) execBankSend(fromAddr, toAddr, amount string) { clientCtx := s.getClientCtx() - cmd := bankcli.NewSendTxCmd() + addrCdc := s.cfg.Codec.InterfaceRegistry().SigningContext().AddressCodec() + cmd := bankcli.NewSendTxCmd(addrCdc) cmdName := cmd.Name() args := []string{ fromAddr, toAddr, amount, "--" + flags.FlagFees, s.bondCoins(10).String(), - "--" + flags.FlagBroadcastMode, flags.BroadcastBlock, + "--" + flags.FlagBroadcastMode, flags.BroadcastSync, // TODO[1760]: broadcast "--" + flags.FlagSkipConfirmation, } failed := true diff --git a/x/exchange/client/cli/helpers.go b/x/exchange/client/cli/helpers.go index 442ad96508..bf710ef0cc 100644 --- a/x/exchange/client/cli/helpers.go +++ b/x/exchange/client/cli/helpers.go @@ -16,7 +16,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/version" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - govcli "github.com/cosmos/cosmos-sdk/x/gov/client/cli" + + // govcli "github.com/cosmos/cosmos-sdk/x/gov/client/cli" // TODO[1760]: gov-cli govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" @@ -78,7 +79,9 @@ func govTxRunE[R sdk.Msg](maker msgMaker[R]) func(cmd *cobra.Command, args []str } cmd.SilenceUsage = true - return govcli.GenerateOrBroadcastTxCLIAsGovProp(clientCtx, flagSet, msg) + // return govcli.GenerateOrBroadcastTxCLIAsGovProp(clientCtx, flagSet, msg) // TODO[1760]: gov-cli + _ = msg + return fmt.Errorf("not yet updated") } } diff --git a/x/exchange/client/cli/query_setup.go b/x/exchange/client/cli/query_setup.go index f35e337be7..ef1cd39835 100644 --- a/x/exchange/client/cli/query_setup.go +++ b/x/exchange/client/cli/query_setup.go @@ -185,7 +185,7 @@ func MakeQueryGetMarketOrders(_ client.Context, flagSet *pflag.FlagSet, args []s req.MarketId, errs[0] = ReadFlagMarketOrArg(flagSet, args) req.OrderType, errs[1] = ReadFlagsAsksBidsOpt(flagSet) req.AfterOrderId, errs[2] = flagSet.GetUint64(FlagAfter) - req.Pagination, errs[3] = client.ReadPageRequestWithPageKeyDecoded(flagSet) + req.Pagination, errs[3] = client.ReadPageRequest(flagSet) // TODO[1760]: cli: ReadPageRequestWithPageKeyDecoded return req, errors.Join(errs...) } @@ -223,7 +223,7 @@ func MakeQueryGetOwnerOrders(_ client.Context, flagSet *pflag.FlagSet, args []st req.Owner, errs[0] = ReadStringFlagOrArg(flagSet, args, FlagOwner, "owner") req.OrderType, errs[1] = ReadFlagsAsksBidsOpt(flagSet) req.AfterOrderId, errs[2] = flagSet.GetUint64(FlagAfter) - req.Pagination, errs[3] = client.ReadPageRequestWithPageKeyDecoded(flagSet) + req.Pagination, errs[3] = client.ReadPageRequest(flagSet) // TODO[1760]: cli: ReadPageRequestWithPageKeyDecoded return req, errors.Join(errs...) } @@ -261,7 +261,7 @@ func MakeQueryGetAssetOrders(_ client.Context, flagSet *pflag.FlagSet, args []st req.Asset, errs[0] = ReadStringFlagOrArg(flagSet, args, FlagDenom, "asset") req.OrderType, errs[1] = ReadFlagsAsksBidsOpt(flagSet) req.AfterOrderId, errs[2] = flagSet.GetUint64(FlagAfter) - req.Pagination, errs[3] = client.ReadPageRequestWithPageKeyDecoded(flagSet) + req.Pagination, errs[3] = client.ReadPageRequest(flagSet) // TODO[1760]: cli: ReadPageRequestWithPageKeyDecoded return req, errors.Join(errs...) } @@ -284,7 +284,7 @@ func MakeQueryGetAllOrders(_ client.Context, flagSet *pflag.FlagSet, _ []string) req := &exchange.QueryGetAllOrdersRequest{} var err error - req.Pagination, err = client.ReadPageRequestWithPageKeyDecoded(flagSet) + req.Pagination, err = client.ReadPageRequest(flagSet) // TODO[1760]: cli: ReadPageRequestWithPageKeyDecoded return req, err } @@ -332,7 +332,7 @@ func MakeQueryGetAllMarkets(_ client.Context, flagSet *pflag.FlagSet, _ []string req := &exchange.QueryGetAllMarketsRequest{} var err error - req.Pagination, err = client.ReadPageRequestWithPageKeyDecoded(flagSet) + req.Pagination, err = client.ReadPageRequest(flagSet) // TODO[1760]: cli: ReadPageRequestWithPageKeyDecoded return req, err } diff --git a/x/exchange/client/cli/tx.go b/x/exchange/client/cli/tx.go index 48416d67f3..c9bb8ef1b3 100644 --- a/x/exchange/client/cli/tx.go +++ b/x/exchange/client/cli/tx.go @@ -7,7 +7,8 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" - govcli "github.com/cosmos/cosmos-sdk/x/gov/client/cli" + + // govcli "github.com/cosmos/cosmos-sdk/x/gov/client/cli" // TODO[1760]: gov-cli "github.com/provenance-io/provenance/x/exchange" ) @@ -242,7 +243,7 @@ func CmdTxGovCreateMarket() *cobra.Command { } flags.AddTxFlagsToCmd(cmd) - govcli.AddGovPropFlagsToCmd(cmd) + // govcli.AddGovPropFlagsToCmd(cmd) // TODO[1760]: gov-cli SetupCmdTxGovCreateMarket(cmd) return cmd } @@ -257,7 +258,7 @@ func CmdTxGovManageFees() *cobra.Command { } flags.AddTxFlagsToCmd(cmd) - govcli.AddGovPropFlagsToCmd(cmd) + // govcli.AddGovPropFlagsToCmd(cmd) // TODO[1760]: gov-cli SetupCmdTxGovManageFees(cmd) return cmd } @@ -272,7 +273,7 @@ func CmdTxGovUpdateParams() *cobra.Command { } flags.AddTxFlagsToCmd(cmd) - govcli.AddGovPropFlagsToCmd(cmd) + // govcli.AddGovPropFlagsToCmd(cmd) // TODO[1760]: gov-cli SetupCmdTxGovUpdateParams(cmd) return cmd } diff --git a/x/exchange/client/cli/tx_test.go b/x/exchange/client/cli/tx_test.go index b51ceddd90..8bf8964035 100644 --- a/x/exchange/client/cli/tx_test.go +++ b/x/exchange/client/cli/tx_test.go @@ -4,8 +4,6 @@ import ( "bytes" "sort" - "golang.org/x/exp/maps" - sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" @@ -13,6 +11,7 @@ import ( banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + "github.com/provenance-io/provenance/internal/helpers" "github.com/provenance-io/provenance/x/exchange" "github.com/provenance-io/provenance/x/exchange/client/cli" ) @@ -683,7 +682,7 @@ func (s *CmdTestSuite) TestCmdTxMarketManagePermissions() { } } - addrOrder := maps.Keys(expPerms) + addrOrder := helpers.Keys(expPerms) sort.Slice(addrOrder, func(i, j int) bool { return bytes.Compare(s.accountAddrs[addrOrder[i]], s.accountAddrs[addrOrder[j]]) < 0 }) @@ -715,7 +714,7 @@ func (s *CmdTestSuite) TestCmdTxMarketManagePermissions() { 3: {exchange.Permission_cancel, exchange.Permission_attributes}, } - addrOrder := maps.Keys(expPerms) + addrOrder := helpers.Keys(expPerms) sort.Slice(addrOrder, func(i, j int) bool { return bytes.Compare(s.accountAddrs[addrOrder[i]], s.accountAddrs[addrOrder[j]]) < 0 }) diff --git a/x/exchange/codec.go b/x/exchange/codec.go index 98ea4fcba6..aabffb6502 100644 --- a/x/exchange/codec.go +++ b/x/exchange/codec.go @@ -1,12 +1,11 @@ package exchange import ( - "github.com/gogo/protobuf/proto" - "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/msgservice" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + "github.com/cosmos/gogoproto/proto" ) // RegisterInterfaces registers implementations for the tx messages diff --git a/x/exchange/events_test.go b/x/exchange/events_test.go index 211308e57b..aa161a7f13 100644 --- a/x/exchange/events_test.go +++ b/x/exchange/events_test.go @@ -8,7 +8,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + abci "github.com/cometbft/cometbft/abci/types" sdk "github.com/cosmos/cosmos-sdk/types" @@ -28,13 +28,13 @@ func assertEverythingSet(t *testing.T, tev proto.Message, typeString string) boo rv := assert.Equal(t, expType, event.Type, "%T event.Type", tev) for i, attr := range event.Attributes { rv = assert.NotEmpty(t, attr.Key, "%T event.attributes[%d].Key", tev, i) && rv - rv = assert.NotEqual(t, `""`, string(attr.Key), "%T event.attributes[%d].Key", tev, i) && rv - rv = assert.NotEqual(t, `0`, string(attr.Key), "%T event.attributes[%d].Key", tev, i) && rv - rv = assert.NotEqual(t, `"0"`, string(attr.Key), "%T event.attributes[%d].Key", tev, i) && rv + rv = assert.NotEqual(t, `""`, attr.Key, "%T event.attributes[%d].Key", tev, i) && rv + rv = assert.NotEqual(t, `0`, attr.Key, "%T event.attributes[%d].Key", tev, i) && rv + rv = assert.NotEqual(t, `"0"`, attr.Key, "%T event.attributes[%d].Key", tev, i) && rv rv = assert.NotEmpty(t, attr.Value, "%T event.attributes[%d].Value", tev, i) && rv - rv = assert.NotEqual(t, `""`, string(attr.Value), "%T event.attributes[%d].Value", tev, i) && rv - rv = assert.NotEqual(t, `0`, string(attr.Value), "%T event.attributes[%d].Value", tev, i) && rv - rv = assert.NotEqual(t, `"0"`, string(attr.Value), "%T event.attributes[%d].Value", tev, i) && rv + rv = assert.NotEqual(t, `""`, attr.Value, "%T event.attributes[%d].Value", tev, i) && rv + rv = assert.NotEqual(t, `0`, attr.Value, "%T event.attributes[%d].Value", tev, i) && rv + rv = assert.NotEqual(t, `"0"`, attr.Value, "%T event.attributes[%d].Value", tev, i) && rv } return rv } @@ -379,7 +379,7 @@ func TestNewEventMarketWithdraw(t *testing.T) { event = NewEventMarketWithdraw(marketID, amountWithdrawn, destination, withdrawnBy) } require.NotPanics(t, testFunc, "NewEventMarketWithdraw(%d, %q, %q, %q)", - marketID, amountWithdrawn, string(destination), string(withdrawnBy)) + marketID, amountWithdrawn, string(destination), withdrawnBy) assert.Equal(t, marketID, event.MarketId, "MarketId") assert.Equal(t, amountWithdrawn.String(), event.Amount, "Amount") assert.Equal(t, destination.String(), event.Destination, "Destination") @@ -599,25 +599,25 @@ func TestNewEventParamsUpdated(t *testing.T) { } func TestTypedEventToEvent(t *testing.T) { - quoteBz := func(str string) []byte { - return []byte(fmt.Sprintf("%q", str)) + quoteStr := func(str string) string { + return fmt.Sprintf("%q", str) } cancelledBy := "cancelledBy_________" - cancelledByQ := quoteBz(cancelledBy) + cancelledByQ := quoteStr(cancelledBy) destination := sdk.AccAddress("destination_________") - destinationQ := quoteBz(destination.String()) + destinationQ := quoteStr(destination.String()) withdrawnBy := sdk.AccAddress("withdrawnBy_________") - withdrawnByQ := quoteBz(withdrawnBy.String()) + withdrawnByQ := quoteStr(withdrawnBy.String()) updatedBy := "updatedBy___________" - updatedByQ := quoteBz(updatedBy) + updatedByQ := quoteStr(updatedBy) coins1 := sdk.NewCoins(sdk.NewInt64Coin("onecoin", 1), sdk.NewInt64Coin("twocoin", 2)) - coins1Q := quoteBz(coins1.String()) + coins1Q := quoteStr(coins1.String()) acoin := sdk.NewInt64Coin("acoin", 55) - acoinQ := quoteBz(acoin.String()) + acoinQ := quoteStr(acoin.String()) pcoin := sdk.NewInt64Coin("pcoin", 66) - pcoinQ := quoteBz(pcoin.String()) + pcoinQ := quoteStr(pcoin.String()) fcoin := sdk.NewInt64Coin("fcoin", 33) - fcoinQ := quoteBz(fcoin.String()) + fcoinQ := quoteStr(fcoin.String()) tests := []struct { name string @@ -630,10 +630,10 @@ func TestTypedEventToEvent(t *testing.T) { expEvent: sdk.Event{ Type: "provenance.exchange.v1.EventOrderCreated", Attributes: []abci.EventAttribute{ - {Key: []byte("external_id"), Value: quoteBz("stuff")}, - {Key: []byte("market_id"), Value: []byte("88")}, - {Key: []byte("order_id"), Value: quoteBz("1")}, - {Key: []byte("order_type"), Value: quoteBz("ask")}, + {Key: "external_id", Value: quoteStr("stuff")}, + {Key: "market_id", Value: "88"}, + {Key: "order_id", Value: quoteStr("1")}, + {Key: "order_type", Value: quoteStr("ask")}, }, }, }, @@ -643,10 +643,10 @@ func TestTypedEventToEvent(t *testing.T) { expEvent: sdk.Event{ Type: "provenance.exchange.v1.EventOrderCreated", Attributes: []abci.EventAttribute{ - {Key: []byte("external_id"), Value: quoteBz("something else")}, - {Key: []byte("market_id"), Value: []byte("77")}, - {Key: []byte("order_id"), Value: quoteBz("2")}, - {Key: []byte("order_type"), Value: quoteBz("bid")}, + {Key: "external_id", Value: quoteStr("something else")}, + {Key: "market_id", Value: "77"}, + {Key: "order_id", Value: quoteStr("2")}, + {Key: "order_type", Value: quoteStr("bid")}, }, }, }, @@ -656,10 +656,10 @@ func TestTypedEventToEvent(t *testing.T) { expEvent: sdk.Event{ Type: "provenance.exchange.v1.EventOrderCancelled", Attributes: []abci.EventAttribute{ - {Key: []byte("cancelled_by"), Value: cancelledByQ}, - {Key: []byte("external_id"), Value: quoteBz("outside 8")}, - {Key: []byte("market_id"), Value: []byte("66")}, - {Key: []byte("order_id"), Value: quoteBz("3")}, + {Key: "cancelled_by", Value: cancelledByQ}, + {Key: "external_id", Value: quoteStr("outside 8")}, + {Key: "market_id", Value: "66"}, + {Key: "order_id", Value: quoteStr("3")}, }, }, }, @@ -669,10 +669,10 @@ func TestTypedEventToEvent(t *testing.T) { expEvent: sdk.Event{ Type: "provenance.exchange.v1.EventOrderCancelled", Attributes: []abci.EventAttribute{ - {Key: []byte("cancelled_by"), Value: cancelledByQ}, - {Key: []byte("external_id"), Value: quoteBz("outside 8")}, - {Key: []byte("market_id"), Value: []byte("55")}, - {Key: []byte("order_id"), Value: quoteBz("3")}, + {Key: "cancelled_by", Value: cancelledByQ}, + {Key: "external_id", Value: quoteStr("outside 8")}, + {Key: "market_id", Value: "55"}, + {Key: "order_id", Value: quoteStr("3")}, }, }, }, @@ -688,12 +688,12 @@ func TestTypedEventToEvent(t *testing.T) { expEvent: sdk.Event{ Type: "provenance.exchange.v1.EventOrderFilled", Attributes: []abci.EventAttribute{ - {Key: []byte("assets"), Value: acoinQ}, - {Key: []byte("external_id"), Value: quoteBz("eeeeiiiiiddddd")}, - {Key: []byte("fees"), Value: fcoinQ}, - {Key: []byte("market_id"), Value: []byte("33")}, - {Key: []byte("order_id"), Value: quoteBz("4")}, - {Key: []byte("price"), Value: pcoinQ}, + {Key: "assets", Value: acoinQ}, + {Key: "external_id", Value: quoteStr("eeeeiiiiiddddd")}, + {Key: "fees", Value: fcoinQ}, + {Key: "market_id", Value: "33"}, + {Key: "order_id", Value: quoteStr("4")}, + {Key: "price", Value: pcoinQ}, }, }, }, @@ -709,12 +709,12 @@ func TestTypedEventToEvent(t *testing.T) { expEvent: sdk.Event{ Type: "provenance.exchange.v1.EventOrderFilled", Attributes: []abci.EventAttribute{ - {Key: []byte("assets"), Value: acoinQ}, - {Key: []byte("external_id"), Value: quoteBz("that one thing")}, - {Key: []byte("fees"), Value: fcoinQ}, - {Key: []byte("market_id"), Value: []byte("44")}, - {Key: []byte("order_id"), Value: quoteBz("104")}, - {Key: []byte("price"), Value: pcoinQ}, + {Key: "assets", Value: acoinQ}, + {Key: "external_id", Value: quoteStr("that one thing")}, + {Key: "fees", Value: fcoinQ}, + {Key: "market_id", Value: "44"}, + {Key: "order_id", Value: quoteStr("104")}, + {Key: "price", Value: pcoinQ}, }, }, }, @@ -730,12 +730,12 @@ func TestTypedEventToEvent(t *testing.T) { expEvent: sdk.Event{ Type: "provenance.exchange.v1.EventOrderPartiallyFilled", Attributes: []abci.EventAttribute{ - {Key: []byte("assets"), Value: acoinQ}, - {Key: []byte("external_id"), Value: quoteBz("12345")}, - {Key: []byte("fees"), Value: fcoinQ}, - {Key: []byte("market_id"), Value: []byte("22")}, - {Key: []byte("order_id"), Value: quoteBz("5")}, - {Key: []byte("price"), Value: pcoinQ}, + {Key: "assets", Value: acoinQ}, + {Key: "external_id", Value: quoteStr("12345")}, + {Key: "fees", Value: fcoinQ}, + {Key: "market_id", Value: "22"}, + {Key: "order_id", Value: quoteStr("5")}, + {Key: "price", Value: pcoinQ}, }, }, }, @@ -751,12 +751,12 @@ func TestTypedEventToEvent(t *testing.T) { expEvent: sdk.Event{ Type: "provenance.exchange.v1.EventOrderPartiallyFilled", Attributes: []abci.EventAttribute{ - {Key: []byte("assets"), Value: acoinQ}, - {Key: []byte("external_id"), Value: quoteBz("67890")}, - {Key: []byte("fees"), Value: fcoinQ}, - {Key: []byte("market_id"), Value: []byte("11")}, - {Key: []byte("order_id"), Value: quoteBz("5")}, - {Key: []byte("price"), Value: pcoinQ}, + {Key: "assets", Value: acoinQ}, + {Key: "external_id", Value: quoteStr("67890")}, + {Key: "fees", Value: fcoinQ}, + {Key: "market_id", Value: "11"}, + {Key: "order_id", Value: quoteStr("5")}, + {Key: "price", Value: pcoinQ}, }, }, }, @@ -766,9 +766,9 @@ func TestTypedEventToEvent(t *testing.T) { expEvent: sdk.Event{ Type: "provenance.exchange.v1.EventOrderExternalIDUpdated", Attributes: []abci.EventAttribute{ - {Key: []byte("external_id"), Value: quoteBz("yellow")}, - {Key: []byte("market_id"), Value: []byte("99")}, - {Key: []byte("order_id"), Value: quoteBz("8")}, + {Key: "external_id", Value: quoteStr("yellow")}, + {Key: "market_id", Value: "99"}, + {Key: "order_id", Value: quoteStr("8")}, }, }, }, @@ -778,9 +778,9 @@ func TestTypedEventToEvent(t *testing.T) { expEvent: sdk.Event{ Type: "provenance.exchange.v1.EventOrderExternalIDUpdated", Attributes: []abci.EventAttribute{ - {Key: []byte("external_id"), Value: quoteBz("yellow")}, - {Key: []byte("market_id"), Value: []byte("111")}, - {Key: []byte("order_id"), Value: quoteBz("8")}, + {Key: "external_id", Value: quoteStr("yellow")}, + {Key: "market_id", Value: "111"}, + {Key: "order_id", Value: quoteStr("8")}, }, }, }, @@ -790,10 +790,10 @@ func TestTypedEventToEvent(t *testing.T) { expEvent: sdk.Event{ Type: "provenance.exchange.v1.EventMarketWithdraw", Attributes: []abci.EventAttribute{ - {Key: []byte("amount"), Value: coins1Q}, - {Key: []byte("destination"), Value: destinationQ}, - {Key: []byte("market_id"), Value: []byte("6")}, - {Key: []byte("withdrawn_by"), Value: withdrawnByQ}, + {Key: "amount", Value: coins1Q}, + {Key: "destination", Value: destinationQ}, + {Key: "market_id", Value: "6"}, + {Key: "withdrawn_by", Value: withdrawnByQ}, }, }, }, @@ -803,8 +803,8 @@ func TestTypedEventToEvent(t *testing.T) { expEvent: sdk.Event{ Type: "provenance.exchange.v1.EventMarketDetailsUpdated", Attributes: []abci.EventAttribute{ - {Key: []byte("market_id"), Value: []byte("7")}, - {Key: []byte("updated_by"), Value: updatedByQ}, + {Key: "market_id", Value: "7"}, + {Key: "updated_by", Value: updatedByQ}, }, }, }, @@ -814,8 +814,8 @@ func TestTypedEventToEvent(t *testing.T) { expEvent: sdk.Event{ Type: "provenance.exchange.v1.EventMarketEnabled", Attributes: []abci.EventAttribute{ - {Key: []byte("market_id"), Value: []byte("8")}, - {Key: []byte("updated_by"), Value: updatedByQ}, + {Key: "market_id", Value: "8"}, + {Key: "updated_by", Value: updatedByQ}, }, }, }, @@ -825,8 +825,8 @@ func TestTypedEventToEvent(t *testing.T) { expEvent: sdk.Event{ Type: "provenance.exchange.v1.EventMarketDisabled", Attributes: []abci.EventAttribute{ - {Key: []byte("market_id"), Value: []byte("9")}, - {Key: []byte("updated_by"), Value: updatedByQ}, + {Key: "market_id", Value: "9"}, + {Key: "updated_by", Value: updatedByQ}, }, }, }, @@ -836,8 +836,8 @@ func TestTypedEventToEvent(t *testing.T) { expEvent: sdk.Event{ Type: "provenance.exchange.v1.EventMarketUserSettleEnabled", Attributes: []abci.EventAttribute{ - {Key: []byte("market_id"), Value: []byte("10")}, - {Key: []byte("updated_by"), Value: updatedByQ}, + {Key: "market_id", Value: "10"}, + {Key: "updated_by", Value: updatedByQ}, }, }, }, @@ -847,8 +847,8 @@ func TestTypedEventToEvent(t *testing.T) { expEvent: sdk.Event{ Type: "provenance.exchange.v1.EventMarketUserSettleDisabled", Attributes: []abci.EventAttribute{ - {Key: []byte("market_id"), Value: []byte("11")}, - {Key: []byte("updated_by"), Value: updatedByQ}, + {Key: "market_id", Value: "11"}, + {Key: "updated_by", Value: updatedByQ}, }, }, }, @@ -858,8 +858,8 @@ func TestTypedEventToEvent(t *testing.T) { expEvent: sdk.Event{ Type: "provenance.exchange.v1.EventMarketPermissionsUpdated", Attributes: []abci.EventAttribute{ - {Key: []byte("market_id"), Value: []byte("12")}, - {Key: []byte("updated_by"), Value: updatedByQ}, + {Key: "market_id", Value: "12"}, + {Key: "updated_by", Value: updatedByQ}, }, }, }, @@ -869,8 +869,8 @@ func TestTypedEventToEvent(t *testing.T) { expEvent: sdk.Event{ Type: "provenance.exchange.v1.EventMarketReqAttrUpdated", Attributes: []abci.EventAttribute{ - {Key: []byte("market_id"), Value: []byte("13")}, - {Key: []byte("updated_by"), Value: updatedByQ}, + {Key: "market_id", Value: "13"}, + {Key: "updated_by", Value: updatedByQ}, }, }, }, @@ -880,7 +880,7 @@ func TestTypedEventToEvent(t *testing.T) { expEvent: sdk.Event{ Type: "provenance.exchange.v1.EventMarketCreated", Attributes: []abci.EventAttribute{ - {Key: []byte("market_id"), Value: []byte("14")}, + {Key: "market_id", Value: "14"}, }, }, }, @@ -890,7 +890,7 @@ func TestTypedEventToEvent(t *testing.T) { expEvent: sdk.Event{ Type: "provenance.exchange.v1.EventMarketFeesUpdated", Attributes: []abci.EventAttribute{ - {Key: []byte("market_id"), Value: []byte("15")}, + {Key: "market_id", Value: "15"}, }, }, }, diff --git a/x/exchange/expected_keepers.go b/x/exchange/expected_keepers.go index edea428335..96064af449 100644 --- a/x/exchange/expected_keepers.go +++ b/x/exchange/expected_keepers.go @@ -1,19 +1,18 @@ package exchange import ( - sdk "github.com/cosmos/cosmos-sdk/types" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + "context" + sdk "github.com/cosmos/cosmos-sdk/types" attrtypes "github.com/provenance-io/provenance/x/attribute/types" markertypes "github.com/provenance-io/provenance/x/marker/types" ) type AccountKeeper interface { - GetAccount(ctx sdk.Context, addr sdk.AccAddress) authtypes.AccountI - SetAccount(ctx sdk.Context, acc authtypes.AccountI) - HasAccount(ctx sdk.Context, addr sdk.AccAddress) bool - NewAccount(ctx sdk.Context, acc authtypes.AccountI) authtypes.AccountI + GetAccount(ctx context.Context, addr sdk.AccAddress) sdk.AccountI + SetAccount(ctx context.Context, acc sdk.AccountI) + HasAccount(ctx context.Context, addr sdk.AccAddress) bool + NewAccount(ctx context.Context, acc sdk.AccountI) sdk.AccountI } type AttributeKeeper interface { @@ -21,9 +20,10 @@ type AttributeKeeper interface { } type BankKeeper interface { - SendCoins(ctx sdk.Context, fromAddr, toAddr sdk.AccAddress, amt sdk.Coins) error - SendCoinsFromAccountToModule(ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error - InputOutputCoins(ctx sdk.Context, inputs []banktypes.Input, outputs []banktypes.Output) error + SendCoins(ctx context.Context, fromAddr, toAddr sdk.AccAddress, amt sdk.Coins) error + SendCoinsFromAccountToModule(ctx context.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error + // TODO[1760]: exchange: Put InputOutputCoins back in this expected keeper once our fork is back in place. + // InputOutputCoins(ctx context.Context, inputs []banktypes.Input, outputs []banktypes.Output) error } type HoldKeeper interface { diff --git a/x/exchange/helpers.go b/x/exchange/helpers.go index bf5f4330bb..f87c007b7d 100644 --- a/x/exchange/helpers.go +++ b/x/exchange/helpers.go @@ -51,24 +51,10 @@ func ContainsString(vals []string, toFind string) bool { }) } -// CoinsEquals returns true if the two provided coins are equal. -// -// sdk.Coins.IsEqual will panic if the two have the same number of entries, but different denoms. -// This one will return false in that case instead of panicking. -func CoinsEquals(a, b sdk.Coins) (isEqual bool) { - defer func() { - if r := recover(); r != nil { - isEqual = false - } - }() - return a.IsEqual(b) -} - // CoinEquals returns true if the two provided coin entries are equal. // Designed for use with intersection. // -// We can't just provide sdk.Coin.IsEqual to intersection because that PANICS if the denoms are different. -// And we can't provide sdk.Coin.Equal to intersection because it takes in an interface{} (instead of sdk.Coin). +// We can't provide sdk.Coin.Equal to intersection because it takes in an interface{} (instead of sdk.Coin). func CoinEquals(a, b sdk.Coin) bool { return a.Equal(b) } diff --git a/x/exchange/helpers_test.go b/x/exchange/helpers_test.go index fd9b6d4beb..7f1cda4417 100644 --- a/x/exchange/helpers_test.go +++ b/x/exchange/helpers_test.go @@ -371,67 +371,6 @@ func TestContainsString(t *testing.T) { } } -func TestCoinsEquals(t *testing.T) { - coins := func(coins string) sdk.Coins { - rv, err := sdk.ParseCoinsNormalized(coins) - require.NoError(t, err, "sdk.ParseCoinsNormalized(%q)", coins) - return rv - } - - tests := []struct { - name string - a sdk.Coins - b sdk.Coins - exp bool - }{ - {name: "nil nil", a: nil, b: nil, exp: true}, - {name: "nil empty", a: nil, b: sdk.Coins{}, exp: true}, - {name: "empty nil", a: sdk.Coins{}, b: nil, exp: true}, - {name: "empty empty", a: nil, b: sdk.Coins{}, exp: true}, - {name: "nil one", a: nil, b: coins("1one"), exp: false}, - {name: "one nil", a: coins("1one"), b: nil, exp: false}, - {name: "one one same", a: coins("1one"), b: coins("1one"), exp: true}, - {name: "one one diff amount", a: coins("1one"), b: coins("2one"), exp: false}, - {name: "one one diff denom", a: coins("1one"), b: coins("1two"), exp: false}, - {name: "one one diff both", a: coins("1one"), b: coins("2two"), exp: false}, - {name: "two one first", a: coins("1one,2two"), b: coins("1one"), exp: false}, - {name: "two one second", a: coins("1one,2two"), b: coins("2two"), exp: false}, - {name: "two one neither", a: coins("1one,2two"), b: coins("3three"), exp: false}, - {name: "two two same", a: coins("1one,2two"), b: coins("1one,2two"), exp: true}, - {name: "two two diff first denom", a: coins("1one,2two"), b: coins("1three,2two"), exp: false}, - {name: "two two diff second denom", a: coins("1one,2two"), b: coins("1one,2three"), exp: false}, - { - name: "one one same negative", - a: sdk.Coins{sdk.Coin{Denom: "one", Amount: sdkmath.NewInt(-1)}}, - b: sdk.Coins{sdk.Coin{Denom: "one", Amount: sdkmath.NewInt(-1)}}, - exp: true, - }, - { - name: "one one negative first", - a: sdk.Coins{sdk.Coin{Denom: "one", Amount: sdkmath.NewInt(-1)}}, - b: sdk.Coins{sdk.Coin{Denom: "one", Amount: sdkmath.NewInt(1)}}, - exp: false, - }, - { - name: "one one negative second", - a: sdk.Coins{sdk.Coin{Denom: "one", Amount: sdkmath.NewInt(1)}}, - b: sdk.Coins{sdk.Coin{Denom: "one", Amount: sdkmath.NewInt(-1)}}, - exp: false, - }, - } - - for _, tc := range tests { - t.Run(tc.name, func(t *testing.T) { - var actual bool - testFunc := func() { - actual = CoinsEquals(tc.a, tc.b) - } - require.NotPanics(t, testFunc, "CoinsEquals(%q, %q)", tc.a, tc.b) - assert.Equal(t, tc.exp, actual, "CoinsEquals(%q, %q)", tc.a, tc.b) - }) - } -} - func TestCoinEquals(t *testing.T) { tests := []struct { name string diff --git a/x/exchange/keeper/export_test.go b/x/exchange/keeper/export_test.go index 08a5be52c3..5a4c1fe7da 100644 --- a/x/exchange/keeper/export_test.go +++ b/x/exchange/keeper/export_test.go @@ -1,6 +1,8 @@ package keeper import ( + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/provenance-io/provenance/x/exchange" @@ -40,12 +42,12 @@ func (k Keeper) WithMarkerKeeper(markerKeeper exchange.MarkerKeeper) Keeper { } // GetStore is a test-only exposure of getStore. -func (k Keeper) GetStore(ctx sdk.Context) sdk.KVStore { +func (k Keeper) GetStore(ctx sdk.Context) storetypes.KVStore { return k.getStore(ctx) } // SetOrderInStore is a test-only exposure of setOrderInStore. -func (k Keeper) SetOrderInStore(store sdk.KVStore, order exchange.Order) error { +func (k Keeper) SetOrderInStore(store storetypes.KVStore, order exchange.Order) error { return k.setOrderInStore(store, order) } diff --git a/x/exchange/keeper/fulfillment.go b/x/exchange/keeper/fulfillment.go index be29fe6c73..5b9cd227e2 100644 --- a/x/exchange/keeper/fulfillment.go +++ b/x/exchange/keeper/fulfillment.go @@ -4,10 +4,11 @@ import ( "errors" "fmt" - "github.com/gogo/protobuf/proto" + storetypes "cosmossdk.io/store/types" sdk "github.com/cosmos/cosmos-sdk/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + "github.com/cosmos/gogoproto/proto" "github.com/provenance-io/provenance/x/exchange" markertypes "github.com/provenance-io/provenance/x/marker/types" @@ -24,7 +25,7 @@ func sumAssetsAndPrice(orders []*exchange.Order) (sdk.Coins, sdk.Coins) { } // validateAcceptingOrdersAndCanUserSettle returns an error if the market isn't active or doesn't allow user settlement. -func validateAcceptingOrdersAndCanUserSettle(store sdk.KVStore, marketID uint32) error { +func validateAcceptingOrdersAndCanUserSettle(store storetypes.KVStore, marketID uint32) error { if err := validateMarketIsAcceptingOrders(store, marketID); err != nil { return err } @@ -60,7 +61,7 @@ func (k Keeper) FillBids(ctx sdk.Context, msg *exchange.MsgFillBidsRequest) erro } totalAssets, totalPrice := sumAssetsAndPrice(orders) - if !exchange.CoinsEquals(totalAssets, msg.TotalAssets) { + if !totalAssets.Equal(msg.TotalAssets) { return fmt.Errorf("total assets %q does not equal sum of bid order assets %q", msg.TotalAssets, totalAssets) } @@ -156,7 +157,7 @@ func (k Keeper) FillAsks(ctx sdk.Context, msg *exchange.MsgFillAsksRequest) erro } totalAssets, totalPrice := sumAssetsAndPrice(orders) - if !exchange.CoinsEquals(totalPrice, sdk.Coins{msg.TotalPrice}) { + if !totalPrice.Equal(sdk.Coins{msg.TotalPrice}) { return fmt.Errorf("total price %q does not equal sum of ask order prices %q", msg.TotalPrice, totalPrice) } @@ -255,7 +256,7 @@ func (k Keeper) SettleOrders(ctx sdk.Context, marketID uint32, askOrderIDs, bidO // closeSettlement does all the processing needed to complete a settlement. // It releases all the holds, does all the transfers, collects the fees, deletes/updates the orders, and emits events. -func (k Keeper) closeSettlement(ctx sdk.Context, store sdk.KVStore, marketID uint32, settlement *exchange.Settlement) error { +func (k Keeper) closeSettlement(ctx sdk.Context, store storetypes.KVStore, marketID uint32, settlement *exchange.Settlement) error { // Release the holds!!!! var errs []error for _, order := range settlement.FullyFilledOrders { diff --git a/x/exchange/keeper/fulfillment_test.go b/x/exchange/keeper/fulfillment_test.go index 69967ff5e6..d6aa7f9b3e 100644 --- a/x/exchange/keeper/fulfillment_test.go +++ b/x/exchange/keeper/fulfillment_test.go @@ -1,10 +1,10 @@ package keeper_test import ( - "github.com/gogo/protobuf/proto" - sdk "github.com/cosmos/cosmos-sdk/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + "github.com/cosmos/gogoproto/proto" + "github.com/provenance-io/provenance/x/exchange" markertypes "github.com/provenance-io/provenance/x/marker/types" ) diff --git a/x/exchange/keeper/genesis_test.go b/x/exchange/keeper/genesis_test.go index 4fda0b0dbf..d696498e79 100644 --- a/x/exchange/keeper/genesis_test.go +++ b/x/exchange/keeper/genesis_test.go @@ -153,7 +153,7 @@ func (s *TestSuite) TestKeeper_InitAndExportGenesis() { }, expAccCalls: AccountCalls{ GetAccount: []sdk.AccAddress{s.marketAddr2}, - SetAccount: []authtypes.AccountI{marketAcc(2, "new name")}, + SetAccount: []sdk.AccountI{marketAcc(2, "new name")}, }, }, { @@ -163,8 +163,8 @@ func (s *TestSuite) TestKeeper_InitAndExportGenesis() { }, expAccCalls: AccountCalls{ GetAccount: []sdk.AccAddress{s.marketAddr3}, - NewAccount: []authtypes.AccountI{marketAcc(3, "Name Three")}, - SetAccount: []authtypes.AccountI{marketAcc(3, "Name Three")}, + NewAccount: []sdk.AccountI{marketAcc(3, "Name Three")}, + SetAccount: []sdk.AccountI{marketAcc(3, "Name Three")}, }, }, { @@ -218,8 +218,8 @@ func (s *TestSuite) TestKeeper_InitAndExportGenesis() { }, expAccCalls: AccountCalls{ GetAccount: []sdk.AccAddress{s.marketAddr1, exchange.GetMarketAddress(75), s.marketAddr3}, - NewAccount: []authtypes.AccountI{marketAcc(1, "First")}, - SetAccount: []authtypes.AccountI{marketAcc(1, "First"), marketAcc(75, "New Second Wave")}, + NewAccount: []sdk.AccountI{marketAcc(1, "First")}, + SetAccount: []sdk.AccountI{marketAcc(1, "First"), marketAcc(75, "New Second Wave")}, }, }, { @@ -435,8 +435,8 @@ func (s *TestSuite) TestKeeper_InitAndExportGenesis() { }, expAccCalls: AccountCalls{ GetAccount: []sdk.AccAddress{s.marketAddr1, exchange.GetMarketAddress(420)}, - SetAccount: []authtypes.AccountI{marketAcc(1, "First Market"), marketAcc(420, "THE Market")}, - NewAccount: []authtypes.AccountI{marketAcc(1, "First Market"), marketAcc(420, "THE Market")}, + SetAccount: []sdk.AccountI{marketAcc(1, "First Market"), marketAcc(420, "THE Market")}, + NewAccount: []sdk.AccountI{marketAcc(1, "First Market"), marketAcc(420, "THE Market")}, }, expHoldCalls: HoldCalls{ GetHoldCoin: []*GetHoldCoinArgs{ diff --git a/x/exchange/keeper/grpc_query.go b/x/exchange/keeper/grpc_query.go index 3121452f66..9365fb5363 100644 --- a/x/exchange/keeper/grpc_query.go +++ b/x/exchange/keeper/grpc_query.go @@ -8,7 +8,7 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "github.com/cosmos/cosmos-sdk/store/prefix" + "cosmossdk.io/store/prefix" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/query" diff --git a/x/exchange/keeper/keeper.go b/x/exchange/keeper/keeper.go index 1b99dc55dd..a16819d5ac 100644 --- a/x/exchange/keeper/keeper.go +++ b/x/exchange/keeper/keeper.go @@ -4,18 +4,18 @@ import ( "fmt" "strings" - "github.com/gogo/protobuf/proto" - sdkmath "cosmossdk.io/math" + "cosmossdk.io/store/prefix" + storetypes "cosmossdk.io/store/types" + + // "github.com/cosmos/cosmos-sdk/x/quarantine" // TODO[1760]: quarantine "github.com/cosmos/cosmos-sdk/codec" - "github.com/cosmos/cosmos-sdk/store/prefix" - storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - "github.com/cosmos/cosmos-sdk/x/quarantine" + "github.com/cosmos/gogoproto/proto" "github.com/provenance-io/provenance/x/exchange" ) @@ -114,9 +114,9 @@ func (k Keeper) GetFeeCollectorName() string { } // getAllKeys gets all the keys in the store with the given prefix. -func getAllKeys(store sdk.KVStore, pre []byte) [][]byte { +func getAllKeys(store storetypes.KVStore, pre []byte) [][]byte { // Using a prefix iterator so that iter.Key() is the whole key (including the prefix). - iter := sdk.KVStorePrefixIterator(store, pre) + iter := storetypes.KVStorePrefixIterator(store, pre) defer iter.Close() var keys [][]byte @@ -128,7 +128,7 @@ func getAllKeys(store sdk.KVStore, pre []byte) [][]byte { } // deleteAll deletes all keys that have the given prefix. -func deleteAll(store sdk.KVStore, pre []byte) { +func deleteAll(store storetypes.KVStore, pre []byte) { keys := getAllKeys(store, pre) for _, key := range keys { store.Delete(key) @@ -138,7 +138,7 @@ func deleteAll(store sdk.KVStore, pre []byte) { // iterate iterates over all the entries in the store with the given prefix. // The key provided to the callback will NOT have the provided prefix; it will be everything after it. // The callback should return false to continue iteration, or true to stop. -func iterate(store sdk.KVStore, pre []byte, cb func(key, value []byte) bool) { +func iterate(store storetypes.KVStore, pre []byte, cb func(key, value []byte) bool) { // Using an open iterator on a prefixed store here so that iter.Key() doesn't contain the prefix. pStore := prefix.NewStore(store, pre) iter := pStore.Iterator(nil, nil) @@ -152,7 +152,7 @@ func iterate(store sdk.KVStore, pre []byte, cb func(key, value []byte) bool) { } // getStore gets the store for the exchange module. -func (k Keeper) getStore(ctx sdk.Context) sdk.KVStore { +func (k Keeper) getStore(ctx sdk.Context) storetypes.KVStore { return ctx.KVStore(k.storeKey) } @@ -167,10 +167,10 @@ func (k Keeper) iterate(ctx sdk.Context, pre []byte, cb func(key, value []byte) func (k Keeper) DoTransfer(ctxIn sdk.Context, inputs []banktypes.Input, outputs []banktypes.Output) error { // We bypass the quarantine module here under the assumption that someone creating // an order counts as acceptance of the stuff to receive (that they defined when creating the order). - ctx := quarantine.WithBypass(ctxIn) + ctx := ctxIn // quarantine.WithBypass(ctxIn) // TODO[1760]: quarantine if len(inputs) == 1 && len(outputs) == 1 { // If there's only one of each, we use SendCoins for the nicer events. - if !exchange.CoinsEquals(inputs[0].Coins, outputs[0].Coins) { + if !inputs[0].Coins.Equal(outputs[0].Coins) { return fmt.Errorf("input coins %q does not equal output coins %q", inputs[0].Coins, outputs[0].Coins) } @@ -184,7 +184,9 @@ func (k Keeper) DoTransfer(ctxIn sdk.Context, inputs []banktypes.Input, outputs } return k.bankKeeper.SendCoins(ctx, fromAddr, toAddr, inputs[0].Coins) } - return k.bankKeeper.InputOutputCoins(ctx, inputs, outputs) + // TODO[1760]: exchange: Put this back once we have InputOutputCoins again. + // return k.bankKeeper.InputOutputCoins(ctx, inputs, outputs) + return nil } // CalculateExchangeSplit calculates the amount that the exchange will keep of the provided fee. @@ -265,9 +267,11 @@ func (k Keeper) CollectFees(ctx sdk.Context, marketID uint32, inputs []banktypes marketAddr := exchange.GetMarketAddress(marketID) outputs := []banktypes.Output{{Address: marketAddr.String(), Coins: feeAmt}} - if err := k.bankKeeper.InputOutputCoins(ctx, inputs, outputs); err != nil { - return fmt.Errorf("error collecting fees for market %d: %w", marketID, err) - } + // TODO[1760]: exchange: Put this back once we have InputOutputCoins again. + _ = outputs + // if err := k.bankKeeper.InputOutputCoins(ctx, inputs, outputs); err != nil { + // return fmt.Errorf("error collecting fees for market %d: %w", marketID, err) + // } if !exchangeAmt.IsZero() { if err := k.bankKeeper.SendCoinsFromAccountToModule(ctx, marketAddr, k.feeCollectorName, exchangeAmt); err != nil { return fmt.Errorf("error collecting exchange fee %s (based off %s) from market %d: %w", exchangeAmt, feeAmt, marketID, err) diff --git a/x/exchange/keeper/market.go b/x/exchange/keeper/market.go index 36c1099c43..f80e212fc2 100644 --- a/x/exchange/keeper/market.go +++ b/x/exchange/keeper/market.go @@ -6,6 +6,7 @@ import ( "strings" sdkmath "cosmossdk.io/math" + storetypes "cosmossdk.io/store/types" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" @@ -14,7 +15,7 @@ import ( ) // getLastAutoMarketID gets the last auto-selected market id. -func getLastAutoMarketID(store sdk.KVStore) uint32 { +func getLastAutoMarketID(store storetypes.KVStore) uint32 { key := MakeKeyLastMarketID() value := store.Get(key) rv, _ := uint32FromBz(value) @@ -22,7 +23,7 @@ func getLastAutoMarketID(store sdk.KVStore) uint32 { } // setLastAutoMarketID sets the last auto-selected market id to the provided value. -func setLastAutoMarketID(store sdk.KVStore, marketID uint32) { +func setLastAutoMarketID(store storetypes.KVStore, marketID uint32) { key := MakeKeyLastMarketID() value := uint32Bz(marketID) store.Set(key, value) @@ -30,7 +31,7 @@ func setLastAutoMarketID(store sdk.KVStore, marketID uint32) { // nextMarketID finds the next available market id, updates the last auto-selected // market id store entry, and returns the unused id it found. -func nextMarketID(store sdk.KVStore) uint32 { +func nextMarketID(store storetypes.KVStore) uint32 { marketID := getLastAutoMarketID(store) + 1 for { key := MakeKeyKnownMarketID(marketID) @@ -44,19 +45,19 @@ func nextMarketID(store sdk.KVStore) uint32 { } // isMarketKnown returns true if the provided market id is a market that exists. -func isMarketKnown(store sdk.KVStore, marketID uint32) bool { +func isMarketKnown(store storetypes.KVStore, marketID uint32) bool { key := MakeKeyKnownMarketID(marketID) return store.Has(key) } // setMarketKnown sets the known market id indicator in the store. -func setMarketKnown(store sdk.KVStore, marketID uint32) { +func setMarketKnown(store storetypes.KVStore, marketID uint32) { key := MakeKeyKnownMarketID(marketID) store.Set(key, []byte{}) } // validateMarketExists returns an error if the provided marketID does not exist. -func validateMarketExists(store sdk.KVStore, marketID uint32) error { +func validateMarketExists(store storetypes.KVStore, marketID uint32) error { if !isMarketKnown(store, marketID) { return fmt.Errorf("market %d does not exist", marketID) } @@ -101,7 +102,7 @@ var ( ) // hasFlatFee returns true if this market has any flat fee for a given type. -func hasFlatFee(store sdk.KVStore, marketID uint32, maker flatFeeKeyMakers) bool { +func hasFlatFee(store storetypes.KVStore, marketID uint32, maker flatFeeKeyMakers) bool { rv := false iterate(store, maker.prefix(marketID), func(key, value []byte) bool { rv = true @@ -111,7 +112,7 @@ func hasFlatFee(store sdk.KVStore, marketID uint32, maker flatFeeKeyMakers) bool } // getFlatFee is a generic getter for a flat fee coin entry. -func getFlatFee(store sdk.KVStore, marketID uint32, denom string, maker flatFeeKeyMakers) *sdk.Coin { +func getFlatFee(store storetypes.KVStore, marketID uint32, denom string, maker flatFeeKeyMakers) *sdk.Coin { key := maker.key(marketID, denom) if store.Has(key) { value := string(store.Get(key)) @@ -124,14 +125,14 @@ func getFlatFee(store sdk.KVStore, marketID uint32, denom string, maker flatFeeK } // setFlatFee is a generic setter for a single flat fee coin entry. -func setFlatFee(store sdk.KVStore, marketID uint32, coin sdk.Coin, maker flatFeeKeyMakers) { +func setFlatFee(store storetypes.KVStore, marketID uint32, coin sdk.Coin, maker flatFeeKeyMakers) { key := maker.key(marketID, coin.Denom) value := coin.Amount.String() store.Set(key, []byte(value)) } // validateFlatFee returns an error if the provided fee is not sufficient to cover the required flat fee. -func validateFlatFee(store sdk.KVStore, marketID uint32, fee *sdk.Coin, name string, maker flatFeeKeyMakers) error { +func validateFlatFee(store storetypes.KVStore, marketID uint32, fee *sdk.Coin, name string, maker flatFeeKeyMakers) error { if !hasFlatFee(store, marketID, maker) { return nil } @@ -152,7 +153,7 @@ func validateFlatFee(store sdk.KVStore, marketID uint32, fee *sdk.Coin, name str // getAllFlatFees gets all the coin entries from the store with the given prefix. // The denom comes from the part of the key after the prefix, and the amount comes from the values. -func getAllFlatFees(store sdk.KVStore, marketID uint32, maker flatFeeKeyMakers) []sdk.Coin { +func getAllFlatFees(store storetypes.KVStore, marketID uint32, maker flatFeeKeyMakers) []sdk.Coin { var coins []sdk.Coin iterate(store, maker.prefix(marketID), func(key, value []byte) bool { amt, ok := sdkmath.NewIntFromString(string(value)) @@ -167,7 +168,7 @@ func getAllFlatFees(store sdk.KVStore, marketID uint32, maker flatFeeKeyMakers) // setAllFlatFees is a generic setter for a set of flat fee options. // This will delete all previous options then save the ones provided. I.e. if options doesn't have a // denom that currently exists in the store, those denoms will no longer be in the store after this. -func setAllFlatFees(store sdk.KVStore, marketID uint32, options []sdk.Coin, maker flatFeeKeyMakers) { +func setAllFlatFees(store storetypes.KVStore, marketID uint32, options []sdk.Coin, maker flatFeeKeyMakers) { deleteAll(store, maker.prefix(marketID)) for _, coin := range options { setFlatFee(store, marketID, coin, maker) @@ -175,7 +176,7 @@ func setAllFlatFees(store sdk.KVStore, marketID uint32, options []sdk.Coin, make } // updateFlatFees deletes all the entries with a denom in toDelete, then writes all the toWrite entries. -func updateFlatFees(store sdk.KVStore, marketID uint32, toDelete, toWrite []sdk.Coin, maker flatFeeKeyMakers) { +func updateFlatFees(store storetypes.KVStore, marketID uint32, toDelete, toWrite []sdk.Coin, maker flatFeeKeyMakers) { for _, coin := range toDelete { key := maker.key(marketID, coin.Denom) store.Delete(key) @@ -186,77 +187,77 @@ func updateFlatFees(store sdk.KVStore, marketID uint32, toDelete, toWrite []sdk. } // validateCreateAskFlatFee returns an error if the provided fee is not a sufficient create-ask flat fee. -func validateCreateAskFlatFee(store sdk.KVStore, marketID uint32, fee *sdk.Coin) error { +func validateCreateAskFlatFee(store storetypes.KVStore, marketID uint32, fee *sdk.Coin) error { return validateFlatFee(store, marketID, fee, "ask order creation", createAskFlatKeyMakers) } // getCreateAskFlatFees gets the create-ask flat fee options for a market. -func getCreateAskFlatFees(store sdk.KVStore, marketID uint32) []sdk.Coin { +func getCreateAskFlatFees(store storetypes.KVStore, marketID uint32) []sdk.Coin { return getAllFlatFees(store, marketID, createAskFlatKeyMakers) } // setCreateAskFlatFees sets the create-ask flat fees for a market. -func setCreateAskFlatFees(store sdk.KVStore, marketID uint32, options []sdk.Coin) { +func setCreateAskFlatFees(store storetypes.KVStore, marketID uint32, options []sdk.Coin) { setAllFlatFees(store, marketID, options, createAskFlatKeyMakers) } // updateCreateAskFlatFees deletes all create-ask flat fees to delete then adds the ones to add. -func updateCreateAskFlatFees(store sdk.KVStore, marketID uint32, toDelete, toAdd []sdk.Coin) { +func updateCreateAskFlatFees(store storetypes.KVStore, marketID uint32, toDelete, toAdd []sdk.Coin) { updateFlatFees(store, marketID, toDelete, toAdd, createAskFlatKeyMakers) } // validateCreateBidFlatFee returns an error if the provided fee is not a sufficient create -bid flat fee. -func validateCreateBidFlatFee(store sdk.KVStore, marketID uint32, fee *sdk.Coin) error { +func validateCreateBidFlatFee(store storetypes.KVStore, marketID uint32, fee *sdk.Coin) error { return validateFlatFee(store, marketID, fee, "bid order creation", createBidFlatKeyMakers) } // getCreateBidFlatFees gets the create-bid flat fee options for a market. -func getCreateBidFlatFees(store sdk.KVStore, marketID uint32) []sdk.Coin { +func getCreateBidFlatFees(store storetypes.KVStore, marketID uint32) []sdk.Coin { return getAllFlatFees(store, marketID, createBidFlatKeyMakers) } // setCreateBidFlatFees sets the create-bid flat fees for a market. -func setCreateBidFlatFees(store sdk.KVStore, marketID uint32, options []sdk.Coin) { +func setCreateBidFlatFees(store storetypes.KVStore, marketID uint32, options []sdk.Coin) { setAllFlatFees(store, marketID, options, createBidFlatKeyMakers) } // updateCreateBidFlatFees deletes all create-bid flat fees to delete then adds the ones to add. -func updateCreateBidFlatFees(store sdk.KVStore, marketID uint32, toDelete, toAdd []sdk.Coin) { +func updateCreateBidFlatFees(store storetypes.KVStore, marketID uint32, toDelete, toAdd []sdk.Coin) { updateFlatFees(store, marketID, toDelete, toAdd, createBidFlatKeyMakers) } // validateSellerSettlementFlatFee returns an error if the provided fee is not a sufficient seller settlement flat fee. -func validateSellerSettlementFlatFee(store sdk.KVStore, marketID uint32, fee *sdk.Coin) error { +func validateSellerSettlementFlatFee(store storetypes.KVStore, marketID uint32, fee *sdk.Coin) error { return validateFlatFee(store, marketID, fee, "seller settlement flat", sellerSettlementFlatKeyMakers) } // getSellerSettlementFlatFees gets the seller settlement flat fee options for a market. -func getSellerSettlementFlatFees(store sdk.KVStore, marketID uint32) []sdk.Coin { +func getSellerSettlementFlatFees(store storetypes.KVStore, marketID uint32) []sdk.Coin { return getAllFlatFees(store, marketID, sellerSettlementFlatKeyMakers) } // setSellerSettlementFlatFees sets the seller settlement flat fees for a market. -func setSellerSettlementFlatFees(store sdk.KVStore, marketID uint32, options []sdk.Coin) { +func setSellerSettlementFlatFees(store storetypes.KVStore, marketID uint32, options []sdk.Coin) { setAllFlatFees(store, marketID, options, sellerSettlementFlatKeyMakers) } // updateSellerSettlementFlatFees deletes all seller settlement flat fees to delete then adds the ones to add. -func updateSellerSettlementFlatFees(store sdk.KVStore, marketID uint32, toDelete, toAdd []sdk.Coin) { +func updateSellerSettlementFlatFees(store storetypes.KVStore, marketID uint32, toDelete, toAdd []sdk.Coin) { updateFlatFees(store, marketID, toDelete, toAdd, sellerSettlementFlatKeyMakers) } // getBuyerSettlementFlatFees gets the buyer settlement flat fee options for a market. -func getBuyerSettlementFlatFees(store sdk.KVStore, marketID uint32) []sdk.Coin { +func getBuyerSettlementFlatFees(store storetypes.KVStore, marketID uint32) []sdk.Coin { return getAllFlatFees(store, marketID, buyerSettlementFlatKeyMakers) } // setBuyerSettlementFlatFees sets the buyer settlement flat fees for a market. -func setBuyerSettlementFlatFees(store sdk.KVStore, marketID uint32, options []sdk.Coin) { +func setBuyerSettlementFlatFees(store storetypes.KVStore, marketID uint32, options []sdk.Coin) { setAllFlatFees(store, marketID, options, buyerSettlementFlatKeyMakers) } // updateBuyerSettlementFlatFees deletes all buyer settlement flat fees to delete then adds the ones to add. -func updateBuyerSettlementFlatFees(store sdk.KVStore, marketID uint32, toDelete, toAdd []sdk.Coin) { +func updateBuyerSettlementFlatFees(store storetypes.KVStore, marketID uint32, toDelete, toAdd []sdk.Coin) { updateFlatFees(store, marketID, toDelete, toAdd, buyerSettlementFlatKeyMakers) } @@ -280,7 +281,7 @@ var ( ) // hasFeeRatio returns true if this market has any fee ratios for a given type. -func hasFeeRatio(store sdk.KVStore, marketID uint32, maker ratioKeyMakers) bool { +func hasFeeRatio(store storetypes.KVStore, marketID uint32, maker ratioKeyMakers) bool { rv := false iterate(store, maker.prefix(marketID), func(key, value []byte) bool { rv = true @@ -290,7 +291,7 @@ func hasFeeRatio(store sdk.KVStore, marketID uint32, maker ratioKeyMakers) bool } // getFeeRatio is a generic getter for a fee ratio entry in the store. -func getFeeRatio(store sdk.KVStore, marketID uint32, priceDenom, feeDenom string, maker ratioKeyMakers) *exchange.FeeRatio { +func getFeeRatio(store storetypes.KVStore, marketID uint32, priceDenom, feeDenom string, maker ratioKeyMakers) *exchange.FeeRatio { key := maker.key(marketID, exchange.FeeRatio{Price: sdk.Coin{Denom: priceDenom}, Fee: sdk.Coin{Denom: feeDenom}}) if store.Has(key) { value := store.Get(key) @@ -306,7 +307,7 @@ func getFeeRatio(store sdk.KVStore, marketID uint32, priceDenom, feeDenom string } // setFeeRatio is a generic setter for a fee ratio entry in the store. -func setFeeRatio(store sdk.KVStore, marketID uint32, ratio exchange.FeeRatio, maker ratioKeyMakers) { +func setFeeRatio(store storetypes.KVStore, marketID uint32, ratio exchange.FeeRatio, maker ratioKeyMakers) { key := maker.key(marketID, ratio) value := GetFeeRatioStoreValue(ratio) store.Set(key, value) @@ -314,7 +315,7 @@ func setFeeRatio(store sdk.KVStore, marketID uint32, ratio exchange.FeeRatio, ma // getAllFeeRatios gets all the fee ratio entries from the store with the given prefix. // The denoms come from the keys and amounts come from the values. -func getAllFeeRatios(store sdk.KVStore, marketID uint32, maker ratioKeyMakers) []exchange.FeeRatio { +func getAllFeeRatios(store storetypes.KVStore, marketID uint32, maker ratioKeyMakers) []exchange.FeeRatio { var feeRatios []exchange.FeeRatio iterate(store, maker.prefix(marketID), func(key, value []byte) bool { priceDenom, feeDenom, kerr := ParseKeySuffixSettlementRatio(key) @@ -335,7 +336,7 @@ func getAllFeeRatios(store sdk.KVStore, marketID uint32, maker ratioKeyMakers) [ // setAllFeeRatios is a generic setter for a set of fee ratios. // This will delete all previous options then save the ones provided. I.e. if ratios doesn't have a // price/fee denom pair that currently exists in the store, those pairs will no longer be in the store after this. -func setAllFeeRatios(store sdk.KVStore, marketID uint32, ratios []exchange.FeeRatio, maker ratioKeyMakers) { +func setAllFeeRatios(store storetypes.KVStore, marketID uint32, ratios []exchange.FeeRatio, maker ratioKeyMakers) { deleteAll(store, maker.prefix(marketID)) for _, ratio := range ratios { setFeeRatio(store, marketID, ratio, maker) @@ -343,7 +344,7 @@ func setAllFeeRatios(store sdk.KVStore, marketID uint32, ratios []exchange.FeeRa } // updateFeeRatios deletes all entries with the denom pairs in toDelete, then writes all the toWrite entries. -func updateFeeRatios(store sdk.KVStore, marketID uint32, toDelete, toWrite []exchange.FeeRatio, maker ratioKeyMakers) { +func updateFeeRatios(store storetypes.KVStore, marketID uint32, toDelete, toWrite []exchange.FeeRatio, maker ratioKeyMakers) { for _, ratio := range toDelete { key := maker.key(marketID, ratio) store.Delete(key) @@ -354,7 +355,7 @@ func updateFeeRatios(store sdk.KVStore, marketID uint32, toDelete, toWrite []exc } // getSellerSettlementRatio gets the seller settlement fee ratio for the given market with the provided denom. -func getSellerSettlementRatio(store sdk.KVStore, marketID uint32, priceDenom string) (*exchange.FeeRatio, error) { +func getSellerSettlementRatio(store storetypes.KVStore, marketID uint32, priceDenom string) (*exchange.FeeRatio, error) { ratio := getFeeRatio(store, marketID, priceDenom, priceDenom, sellerSettlementRatioKeyMakers) if ratio == nil { if hasFeeRatio(store, marketID, sellerSettlementRatioKeyMakers) { @@ -365,22 +366,22 @@ func getSellerSettlementRatio(store sdk.KVStore, marketID uint32, priceDenom str } // getSellerSettlementRatios gets the seller settlement fee ratios for a market. -func getSellerSettlementRatios(store sdk.KVStore, marketID uint32) []exchange.FeeRatio { +func getSellerSettlementRatios(store storetypes.KVStore, marketID uint32) []exchange.FeeRatio { return getAllFeeRatios(store, marketID, sellerSettlementRatioKeyMakers) } // setSellerSettlementRatios sets the seller settlement fee ratios for a market. -func setSellerSettlementRatios(store sdk.KVStore, marketID uint32, ratios []exchange.FeeRatio) { +func setSellerSettlementRatios(store storetypes.KVStore, marketID uint32, ratios []exchange.FeeRatio) { setAllFeeRatios(store, marketID, ratios, sellerSettlementRatioKeyMakers) } // updateSellerSettlementRatios deletes all seller settlement ratio entries to delete then adds the ones to add. -func updateSellerSettlementRatios(store sdk.KVStore, marketID uint32, toDelete, toAdd []exchange.FeeRatio) { +func updateSellerSettlementRatios(store storetypes.KVStore, marketID uint32, toDelete, toAdd []exchange.FeeRatio) { updateFeeRatios(store, marketID, toDelete, toAdd, sellerSettlementRatioKeyMakers) } // validateAskPrice validates that the provided ask price is acceptable. -func validateAskPrice(store sdk.KVStore, marketID uint32, price sdk.Coin, settlementFlatFee *sdk.Coin) error { +func validateAskPrice(store storetypes.KVStore, marketID uint32, price sdk.Coin, settlementFlatFee *sdk.Coin) error { ratio, err := getSellerSettlementRatio(store, marketID, price.Denom) if err != nil { return err @@ -426,7 +427,7 @@ func validateAskPrice(store sdk.KVStore, marketID uint32, price sdk.Coin, settle } // calculateSellerSettlementRatioFee calculates the seller settlement fee required for the given price. -func calculateSellerSettlementRatioFee(store sdk.KVStore, marketID uint32, price sdk.Coin) (*sdk.Coin, error) { +func calculateSellerSettlementRatioFee(store storetypes.KVStore, marketID uint32, price sdk.Coin) (*sdk.Coin, error) { ratio, err := getSellerSettlementRatio(store, marketID, price.Denom) if err != nil { return nil, err @@ -442,22 +443,22 @@ func calculateSellerSettlementRatioFee(store sdk.KVStore, marketID uint32, price } // getBuyerSettlementRatios gets the buyer settlement fee ratios for a market. -func getBuyerSettlementRatios(store sdk.KVStore, marketID uint32) []exchange.FeeRatio { +func getBuyerSettlementRatios(store storetypes.KVStore, marketID uint32) []exchange.FeeRatio { return getAllFeeRatios(store, marketID, buyerSettlementRatioKeyMakers) } // setBuyerSettlementRatios sets the buyer settlement fee ratios for a market. -func setBuyerSettlementRatios(store sdk.KVStore, marketID uint32, ratios []exchange.FeeRatio) { +func setBuyerSettlementRatios(store storetypes.KVStore, marketID uint32, ratios []exchange.FeeRatio) { setAllFeeRatios(store, marketID, ratios, buyerSettlementRatioKeyMakers) } // updateBuyerSettlementRatios deletes all buyer settlement ratio entries to delete then adds the ones to add. -func updateBuyerSettlementRatios(store sdk.KVStore, marketID uint32, toDelete, toAdd []exchange.FeeRatio) { +func updateBuyerSettlementRatios(store storetypes.KVStore, marketID uint32, toDelete, toAdd []exchange.FeeRatio) { updateFeeRatios(store, marketID, toDelete, toAdd, buyerSettlementRatioKeyMakers) } // getBuyerSettlementFeeRatiosForPriceDenom gets all the buyer settlement fee ratios in a market that have the give price denom. -func getBuyerSettlementFeeRatiosForPriceDenom(store sdk.KVStore, marketID uint32, priceDenom string) ([]exchange.FeeRatio, error) { +func getBuyerSettlementFeeRatiosForPriceDenom(store storetypes.KVStore, marketID uint32, priceDenom string) ([]exchange.FeeRatio, error) { var ratios []exchange.FeeRatio iterate(store, GetKeyPrefixMarketBuyerSettlementRatioForPriceDenom(marketID, priceDenom), func(key, value []byte) bool { feeDenom := string(key) @@ -477,7 +478,7 @@ func getBuyerSettlementFeeRatiosForPriceDenom(store sdk.KVStore, marketID uint32 } // calcBuyerSettlementRatioFeeOptions calculates the buyer settlement ratio fee options available for the given price. -func calcBuyerSettlementRatioFeeOptions(store sdk.KVStore, marketID uint32, price sdk.Coin) ([]sdk.Coin, error) { +func calcBuyerSettlementRatioFeeOptions(store storetypes.KVStore, marketID uint32, price sdk.Coin) ([]sdk.Coin, error) { ratios, err := getBuyerSettlementFeeRatiosForPriceDenom(store, marketID, price.Denom) if err != nil { return nil, err @@ -507,7 +508,7 @@ func calcBuyerSettlementRatioFeeOptions(store sdk.KVStore, marketID uint32, pric // validateBuyerSettlementFee returns an error if the provided fee is not enough to cover both the // buyer settlement flat and percent fees for the given price. -func validateBuyerSettlementFee(store sdk.KVStore, marketID uint32, price sdk.Coin, fee sdk.Coins) error { +func validateBuyerSettlementFee(store storetypes.KVStore, marketID uint32, price sdk.Coin, fee sdk.Coins) error { flatKeyMaker := buyerSettlementFlatKeyMakers ratioKeyMaker := buyerSettlementRatioKeyMakers flatFeeReq := hasFlatFee(store, marketID, flatKeyMaker) @@ -704,13 +705,13 @@ func (k Keeper) UpdateFees(ctx sdk.Context, msg *exchange.MsgGovManageFeesReques // isMarketActive returns true if the provided market's inactive flag does not exist. // See also isMarketKnown. -func isMarketActive(store sdk.KVStore, marketID uint32) bool { +func isMarketActive(store storetypes.KVStore, marketID uint32) bool { key := MakeKeyMarketInactive(marketID) return !store.Has(key) } // setMarketActive sets whether the provided market is accepting orders. -func setMarketActive(store sdk.KVStore, marketID uint32, active bool) { +func setMarketActive(store storetypes.KVStore, marketID uint32, active bool) { key := MakeKeyMarketInactive(marketID) if active { store.Delete(key) @@ -720,13 +721,13 @@ func setMarketActive(store sdk.KVStore, marketID uint32, active bool) { } // isUserSettlementAllowed gets whether user-settlement is allowed for a market. -func isUserSettlementAllowed(store sdk.KVStore, marketID uint32) bool { +func isUserSettlementAllowed(store storetypes.KVStore, marketID uint32) bool { key := MakeKeyMarketUserSettle(marketID) return store.Has(key) } // SetUserSettlementAllowed sets whether user-settlement is allowed for a market. -func setUserSettlementAllowed(store sdk.KVStore, marketID uint32, allowed bool) { +func setUserSettlementAllowed(store storetypes.KVStore, marketID uint32, allowed bool) { key := MakeKeyMarketUserSettle(marketID) if allowed { store.Set(key, []byte{}) @@ -781,13 +782,13 @@ func (k Keeper) UpdateUserSettlementAllowed(ctx sdk.Context, marketID uint32, al } // storeHasPermission returns true if there is an entry in the store for the given market, address, and permissions. -func storeHasPermission(store sdk.KVStore, marketID uint32, addr sdk.AccAddress, permission exchange.Permission) bool { +func storeHasPermission(store storetypes.KVStore, marketID uint32, addr sdk.AccAddress, permission exchange.Permission) bool { key := MakeKeyMarketPermissions(marketID, addr, permission) return store.Has(key) } // grantPermissions updates the store so that the given address has the provided permissions in a market. -func grantPermissions(store sdk.KVStore, marketID uint32, addr sdk.AccAddress, permissions []exchange.Permission) { +func grantPermissions(store storetypes.KVStore, marketID uint32, addr sdk.AccAddress, permissions []exchange.Permission) { for _, perm := range permissions { key := MakeKeyMarketPermissions(marketID, addr, perm) store.Set(key, []byte{}) @@ -795,7 +796,7 @@ func grantPermissions(store sdk.KVStore, marketID uint32, addr sdk.AccAddress, p } // revokePermissions updates the store so that the given address does NOT have the provided permissions for the market. -func revokePermissions(store sdk.KVStore, marketID uint32, addr sdk.AccAddress, permissions []exchange.Permission) { +func revokePermissions(store storetypes.KVStore, marketID uint32, addr sdk.AccAddress, permissions []exchange.Permission) { for _, perm := range permissions { key := MakeKeyMarketPermissions(marketID, addr, perm) store.Delete(key) @@ -803,13 +804,13 @@ func revokePermissions(store sdk.KVStore, marketID uint32, addr sdk.AccAddress, } // revokeUserPermissions updates the store so that the given address does not have any permissions for the market. -func revokeUserPermissions(store sdk.KVStore, marketID uint32, addr sdk.AccAddress) { +func revokeUserPermissions(store storetypes.KVStore, marketID uint32, addr sdk.AccAddress) { key := GetKeyPrefixMarketPermissionsForAddress(marketID, addr) deleteAll(store, key) } // getUserPermissions gets all permissions that have been granted to a user in a market. -func getUserPermissions(store sdk.KVStore, marketID uint32, addr sdk.AccAddress) []exchange.Permission { +func getUserPermissions(store storetypes.KVStore, marketID uint32, addr sdk.AccAddress) []exchange.Permission { var rv []exchange.Permission iterate(store, GetKeyPrefixMarketPermissionsForAddress(marketID, addr), func(key, _ []byte) bool { rv = append(rv, exchange.Permission(key[0])) @@ -819,13 +820,13 @@ func getUserPermissions(store sdk.KVStore, marketID uint32, addr sdk.AccAddress) } // revokeAllMarketPermissions clears out all permissions for a market. -func revokeAllMarketPermissions(store sdk.KVStore, marketID uint32) { +func revokeAllMarketPermissions(store storetypes.KVStore, marketID uint32) { key := GetKeyPrefixMarketPermissions(marketID) deleteAll(store, key) } // getAccessGrants gets all the access grants for a market. -func getAccessGrants(store sdk.KVStore, marketID uint32) []exchange.AccessGrant { +func getAccessGrants(store storetypes.KVStore, marketID uint32) []exchange.AccessGrant { var rv []exchange.AccessGrant iterate(store, GetKeyPrefixMarketPermissions(marketID), func(key, _ []byte) bool { addr, perm, err := ParseKeySuffixMarketPermissions(key) @@ -843,7 +844,7 @@ func getAccessGrants(store sdk.KVStore, marketID uint32) []exchange.AccessGrant } // setAccessGrants deletes all access grants on a market and sets just the ones provided. -func setAccessGrants(store sdk.KVStore, marketID uint32, grants []exchange.AccessGrant) { +func setAccessGrants(store storetypes.KVStore, marketID uint32, grants []exchange.AccessGrant) { revokeAllMarketPermissions(store, marketID) for _, ag := range grants { grantPermissions(store, marketID, sdk.MustAccAddressFromBech32(ag.Address), ag.Permissions) @@ -969,14 +970,14 @@ func (k Keeper) UpdatePermissions(ctx sdk.Context, msg *exchange.MsgMarketManage type reqAttrKeyMaker func(marketID uint32) []byte // getReqAttrs gets the required attributes for a market using the provided key maker. -func getReqAttrs(store sdk.KVStore, marketID uint32, maker reqAttrKeyMaker) []string { +func getReqAttrs(store storetypes.KVStore, marketID uint32, maker reqAttrKeyMaker) []string { key := maker(marketID) value := store.Get(key) return ParseReqAttrStoreValue(value) } // setReqAttrs sets the required attributes for a market using the provided key maker. -func setReqAttrs(store sdk.KVStore, marketID uint32, reqAttrs []string, maker reqAttrKeyMaker) { +func setReqAttrs(store storetypes.KVStore, marketID uint32, reqAttrs []string, maker reqAttrKeyMaker) { key := maker(marketID) if len(reqAttrs) == 0 { store.Delete(key) @@ -988,7 +989,7 @@ func setReqAttrs(store sdk.KVStore, marketID uint32, reqAttrs []string, maker re // updateReqAttrs updates the required attributes in the store that use the provided key maker by removing then adding // the provided attributes to the existing entries. -func updateReqAttrs(store sdk.KVStore, marketID uint32, toRemove, toAdd []string, field string, maker reqAttrKeyMaker) error { +func updateReqAttrs(store storetypes.KVStore, marketID uint32, toRemove, toAdd []string, field string, maker reqAttrKeyMaker) error { var errs []error curAttrs := getReqAttrs(store, marketID, maker) @@ -1022,36 +1023,36 @@ func updateReqAttrs(store sdk.KVStore, marketID uint32, toRemove, toAdd []string } // getReqAttrsAsk gets the attributes required to create an ask order. -func getReqAttrsAsk(store sdk.KVStore, marketID uint32) []string { +func getReqAttrsAsk(store storetypes.KVStore, marketID uint32) []string { return getReqAttrs(store, marketID, MakeKeyMarketReqAttrAsk) } // setReqAttrsAsk sets the attributes required to create an ask order. -func setReqAttrsAsk(store sdk.KVStore, marketID uint32, reqAttrs []string) { +func setReqAttrsAsk(store storetypes.KVStore, marketID uint32, reqAttrs []string) { setReqAttrs(store, marketID, reqAttrs, MakeKeyMarketReqAttrAsk) } // updateReqAttrsAsk updates the attributes required to create an ask order in the store by removing and adding // the provided entries to the existing entries. // It is assumed that the attributes have been normalized prior to calling this. -func updateReqAttrsAsk(store sdk.KVStore, marketID uint32, toRemove, toAdd []string) error { +func updateReqAttrsAsk(store storetypes.KVStore, marketID uint32, toRemove, toAdd []string) error { return updateReqAttrs(store, marketID, toRemove, toAdd, "create-ask", MakeKeyMarketReqAttrAsk) } // getReqAttrsBid gets the attributes required to create a bid order. -func getReqAttrsBid(store sdk.KVStore, marketID uint32) []string { +func getReqAttrsBid(store storetypes.KVStore, marketID uint32) []string { return getReqAttrs(store, marketID, MakeKeyMarketReqAttrBid) } // setReqAttrsBid sets the attributes required to create a bid order. -func setReqAttrsBid(store sdk.KVStore, marketID uint32, reqAttrs []string) { +func setReqAttrsBid(store storetypes.KVStore, marketID uint32, reqAttrs []string) { setReqAttrs(store, marketID, reqAttrs, MakeKeyMarketReqAttrBid) } // updateReqAttrsBid updates the attributes required to create a bid order in the store by removing and adding // the provided entries to the existing entries. // It is assumed that the attributes have been normalized prior to calling this. -func updateReqAttrsBid(store sdk.KVStore, marketID uint32, toRemove, toAdd []string) error { +func updateReqAttrsBid(store storetypes.KVStore, marketID uint32, toRemove, toAdd []string) error { return updateReqAttrs(store, marketID, toRemove, toAdd, "create-bid", MakeKeyMarketReqAttrBid) } @@ -1184,7 +1185,7 @@ func (k Keeper) UpdateMarketDetails(ctx sdk.Context, marketID uint32, marketDeta } // storeMarket writes all the market fields to the state store (except MarketDetails which are in the account). -func storeMarket(store sdk.KVStore, market exchange.Market) { +func storeMarket(store storetypes.KVStore, market exchange.Market) { marketID := market.MarketId setMarketKnown(store, marketID) setCreateAskFlatFees(store, marketID, market.FeeCreateAskFlat) @@ -1202,7 +1203,7 @@ func storeMarket(store sdk.KVStore, market exchange.Market) { // initMarket is similar to CreateMarket but assumes the market has already been // validated and also allows for the market account to already exist. -func (k Keeper) initMarket(ctx sdk.Context, store sdk.KVStore, market exchange.Market) { +func (k Keeper) initMarket(ctx sdk.Context, store storetypes.KVStore, market exchange.Market) { if market.MarketId == 0 { market.MarketId = nextMarketID(store) } diff --git a/x/exchange/keeper/market_test.go b/x/exchange/keeper/market_test.go index df2417161a..13b6cf3935 100644 --- a/x/exchange/keeper/market_test.go +++ b/x/exchange/keeper/market_test.go @@ -3453,8 +3453,8 @@ func (s *TestSuite) TestKeeper_UpdateMarketActive() { testFunc := func() { err = s.k.UpdateMarketActive(ctx, tc.marketID, tc.active, tc.updatedBy) } - s.Require().NotPanics(testFunc, "UpdateMarketActive(%d, %t, %s)", tc.marketID, tc.active, string(tc.updatedBy)) - s.assertErrorValue(err, tc.expErr, "UpdateMarketActive(%d, %t, %s)", tc.marketID, tc.active, string(tc.updatedBy)) + s.Require().NotPanics(testFunc, "UpdateMarketActive(%d, %t, %s)", tc.marketID, tc.active, tc.updatedBy) + s.assertErrorValue(err, tc.expErr, "UpdateMarketActive(%d, %t, %s)", tc.marketID, tc.active, tc.updatedBy) events := em.Events() s.assertEqualEvents(expEvents, events, "events after UpdateMarketActive") @@ -3635,8 +3635,8 @@ func (s *TestSuite) TestKeeper_UpdateUserSettlementAllowed() { testFunc := func() { err = s.k.UpdateUserSettlementAllowed(ctx, tc.marketID, tc.allow, tc.updatedBy) } - s.Require().NotPanics(testFunc, "UpdateUserSettlementAllowed(%d, %t, %s)", tc.marketID, tc.allow, string(tc.updatedBy)) - s.assertErrorValue(err, tc.expErr, "UpdateUserSettlementAllowed(%d, %t, %s)", tc.marketID, tc.allow, string(tc.updatedBy)) + s.Require().NotPanics(testFunc, "UpdateUserSettlementAllowed(%d, %t, %s)", tc.marketID, tc.allow, tc.updatedBy) + s.assertErrorValue(err, tc.expErr, "UpdateUserSettlementAllowed(%d, %t, %s)", tc.marketID, tc.allow, tc.updatedBy) events := em.Events() s.assertEqualEvents(expEvents, events, "events after UpdateUserSettlementAllowed") @@ -5771,7 +5771,7 @@ func (s *TestSuite) TestKeeper_UpdateMarketDetails() { updatedBy string expErr string expGetAccCall bool - expSetAccCall authtypes.AccountI + expSetAccCall sdk.AccountI }{ { name: "invalid market details", @@ -5870,7 +5870,7 @@ func (s *TestSuite) TestKeeper_UpdateMarketDetails() { func (s *TestSuite) TestKeeper_CreateMarket() { setAccNum := func(id uint64) AccountModifier { - return func(acc authtypes.AccountI) authtypes.AccountI { + return func(acc sdk.AccountI) sdk.AccountI { err := acc.SetAccountNumber(id) s.Require().NoError(err, "SetAccountNumber(%d)", id) return acc diff --git a/x/exchange/keeper/mocks_test.go b/x/exchange/keeper/mocks_test.go index 8b00895d51..fc29cef897 100644 --- a/x/exchange/keeper/mocks_test.go +++ b/x/exchange/keeper/mocks_test.go @@ -1,14 +1,16 @@ package keeper_test import ( + "context" "errors" "fmt" sdkmath "cosmossdk.io/math" + + // "github.com/cosmos/cosmos-sdk/x/quarantine" // TODO[1760]: quarantine + sdk "github.com/cosmos/cosmos-sdk/types" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - "github.com/cosmos/cosmos-sdk/x/quarantine" attrtypes "github.com/provenance-io/provenance/x/attribute/types" "github.com/provenance-io/provenance/x/exchange" @@ -26,7 +28,7 @@ var _ exchange.AccountKeeper = (*MockAccountKeeper)(nil) // MockAccountKeeper satisfies the exchange.AccountKeeper interface but just records the calls and allows dictation of results. type MockAccountKeeper struct { Calls AccountCalls - GetAccountResultsMap map[string]authtypes.AccountI + GetAccountResultsMap map[string]sdk.AccountI HasAccountResultsMap map[string]bool NewAccountModifierMap map[string]AccountModifier } @@ -34,16 +36,16 @@ type MockAccountKeeper struct { // AccountCalls contains all the calls that the mock account keeper makes. type AccountCalls struct { GetAccount []sdk.AccAddress - SetAccount []authtypes.AccountI + SetAccount []sdk.AccountI HasAccount []sdk.AccAddress - NewAccount []authtypes.AccountI + NewAccount []sdk.AccountI } // AccountModifier is a function that can alter an account. -type AccountModifier func(authtypes.AccountI) authtypes.AccountI +type AccountModifier func(sdk.AccountI) sdk.AccountI // NoopAccMod is a no-op AccountModifier. -func NoopAccMod(a authtypes.AccountI) authtypes.AccountI { +func NoopAccMod(a sdk.AccountI) sdk.AccountI { return a } @@ -54,7 +56,7 @@ var _ AccountModifier = NoopAccMod // and/or WithNewAccountResult to dictate results. func NewMockAccountKeeper() *MockAccountKeeper { return &MockAccountKeeper{ - GetAccountResultsMap: make(map[string]authtypes.AccountI), + GetAccountResultsMap: make(map[string]sdk.AccountI), HasAccountResultsMap: make(map[string]bool), NewAccountModifierMap: make(map[string]AccountModifier), } @@ -63,7 +65,7 @@ func NewMockAccountKeeper() *MockAccountKeeper { // WithGetAccountResult associates the provided address and result for use with calls to GetAccount. // When GetAccount is called, if the address provided has an entry here, that is returned, otherwise, nil is returned. // This method both updates the receiver and returns it. -func (k *MockAccountKeeper) WithGetAccountResult(addr sdk.AccAddress, result authtypes.AccountI) *MockAccountKeeper { +func (k *MockAccountKeeper) WithGetAccountResult(addr sdk.AccAddress, result sdk.AccountI) *MockAccountKeeper { k.GetAccountResultsMap[string(addr)] = result return k } @@ -85,7 +87,7 @@ func (k *MockAccountKeeper) WithNewAccountModifier(addr sdk.AccAddress, modifier return k } -func (k *MockAccountKeeper) GetAccount(_ sdk.Context, addr sdk.AccAddress) authtypes.AccountI { +func (k *MockAccountKeeper) GetAccount(_ context.Context, addr sdk.AccAddress) sdk.AccountI { k.Calls.GetAccount = append(k.Calls.GetAccount, addr) if rv, found := k.GetAccountResultsMap[string(addr)]; found { return rv @@ -93,12 +95,12 @@ func (k *MockAccountKeeper) GetAccount(_ sdk.Context, addr sdk.AccAddress) autht return nil } -func (k *MockAccountKeeper) SetAccount(_ sdk.Context, acc authtypes.AccountI) { +func (k *MockAccountKeeper) SetAccount(_ context.Context, acc sdk.AccountI) { k.Calls.SetAccount = append(k.Calls.SetAccount, acc) k.WithGetAccountResult(acc.GetAddress(), acc) } -func (k *MockAccountKeeper) HasAccount(_ sdk.Context, addr sdk.AccAddress) bool { +func (k *MockAccountKeeper) HasAccount(_ context.Context, addr sdk.AccAddress) bool { k.Calls.HasAccount = append(k.Calls.HasAccount, addr) if rv, found := k.HasAccountResultsMap[string(addr)]; found { return rv @@ -106,7 +108,7 @@ func (k *MockAccountKeeper) HasAccount(_ sdk.Context, addr sdk.AccAddress) bool return false } -func (k *MockAccountKeeper) NewAccount(_ sdk.Context, acc authtypes.AccountI) authtypes.AccountI { +func (k *MockAccountKeeper) NewAccount(_ context.Context, acc sdk.AccountI) sdk.AccountI { k.Calls.NewAccount = append(k.Calls.NewAccount, acc) if modifier, found := k.NewAccountModifierMap[string(acc.GetAddress())]; found { return modifier(acc) @@ -122,9 +124,9 @@ func (s *TestSuite) assertGetAccountCalls(mk *MockAccountKeeper, expected []sdk. } // assertSetAccountCalls asserts that a mock keeper's Calls.SetAccount match the provided expected calls. -func (s *TestSuite) assertSetAccountCalls(mk *MockAccountKeeper, expected []authtypes.AccountI, msg string, args ...interface{}) bool { +func (s *TestSuite) assertSetAccountCalls(mk *MockAccountKeeper, expected []sdk.AccountI, msg string, args ...interface{}) bool { s.T().Helper() - return assertEqualSlice(s, expected, mk.Calls.SetAccount, authtypes.AccountI.String, + return assertEqualSlice(s, expected, mk.Calls.SetAccount, sdk.AccountI.String, msg+" SetAccount calls", args...) } @@ -136,9 +138,9 @@ func (s *TestSuite) assertHasAccountCalls(mk *MockAccountKeeper, expected []sdk. } // assertNewAccountCalls asserts that a mock keeper's Calls.NewAccount match the provided expected calls. -func (s *TestSuite) assertNewAccountCalls(mk *MockAccountKeeper, expected []authtypes.AccountI, msg string, args ...interface{}) bool { +func (s *TestSuite) assertNewAccountCalls(mk *MockAccountKeeper, expected []sdk.AccountI, msg string, args ...interface{}) bool { s.T().Helper() - return assertEqualSlice(s, expected, mk.Calls.NewAccount, authtypes.AccountI.String, + return assertEqualSlice(s, expected, mk.Calls.NewAccount, sdk.AccountI.String, msg+" NewAccount calls", args...) } @@ -314,7 +316,7 @@ func (k *MockBankKeeper) WithInputOutputCoinsResults(errs ...string) *MockBankKe return k } -func (k *MockBankKeeper) SendCoins(ctx sdk.Context, fromAddr, toAddr sdk.AccAddress, amt sdk.Coins) error { +func (k *MockBankKeeper) SendCoins(ctx context.Context, fromAddr, toAddr sdk.AccAddress, amt sdk.Coins) error { k.Calls.SendCoins = append(k.Calls.SendCoins, NewSendCoinsArgs(ctx, fromAddr, toAddr, amt)) var err error if len(k.SendCoinsResultsQueue) > 0 { @@ -326,7 +328,7 @@ func (k *MockBankKeeper) SendCoins(ctx sdk.Context, fromAddr, toAddr sdk.AccAddr return err } -func (k *MockBankKeeper) SendCoinsFromAccountToModule(ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error { +func (k *MockBankKeeper) SendCoinsFromAccountToModule(ctx context.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error { k.Calls.SendCoinsFromAccountToModule = append(k.Calls.SendCoinsFromAccountToModule, NewSendCoinsFromAccountToModuleArgs(ctx, senderAddr, recipientModule, amt)) var err error @@ -339,7 +341,7 @@ func (k *MockBankKeeper) SendCoinsFromAccountToModule(ctx sdk.Context, senderAdd return err } -func (k *MockBankKeeper) InputOutputCoins(ctx sdk.Context, inputs []banktypes.Input, outputs []banktypes.Output) error { +func (k *MockBankKeeper) InputOutputCoins(ctx context.Context, inputs []banktypes.Input, outputs []banktypes.Output) error { k.Calls.InputOutputCoins = append(k.Calls.InputOutputCoins, NewInputOutputCoinsArgs(ctx, inputs, outputs)) var err error if len(k.InputOutputCoinsResultsQueue) > 0 { @@ -382,9 +384,9 @@ func (s *TestSuite) assertBankKeeperCalls(mk *MockBankKeeper, expected BankCalls } // NewSendCoinsArgs creates a new record of args provided to a call to SendCoins. -func NewSendCoinsArgs(ctx sdk.Context, fromAddr, toAddr sdk.AccAddress, amt sdk.Coins) *SendCoinsArgs { +func NewSendCoinsArgs(ctx context.Context, fromAddr, toAddr sdk.AccAddress, amt sdk.Coins) *SendCoinsArgs { return &SendCoinsArgs{ - ctxHasQuarantineBypass: quarantine.HasBypass(ctx), + ctxHasQuarantineBypass: false, // quarantine.HasBypass(ctx), // TODO[1760]: quarantine fromAddr: fromAddr, toAddr: toAddr, amt: amt, @@ -399,9 +401,9 @@ func (s *TestSuite) sendCoinsArgsString(a *SendCoinsArgs) string { } // NewSendCoinsFromAccountToModuleArgs creates a new record of args provided to a call to SendCoinsFromAccountToModule. -func NewSendCoinsFromAccountToModuleArgs(ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) *SendCoinsFromAccountToModuleArgs { +func NewSendCoinsFromAccountToModuleArgs(ctx context.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) *SendCoinsFromAccountToModuleArgs { return &SendCoinsFromAccountToModuleArgs{ - ctxHasQuarantineBypass: quarantine.HasBypass(ctx), + ctxHasQuarantineBypass: false, // quarantine.HasBypass(ctx), // TODO[1760]: quarantine senderAddr: senderAddr, recipientModule: recipientModule, amt: amt, @@ -416,9 +418,9 @@ func (s *TestSuite) sendCoinsFromAccountToModuleArgsString(a *SendCoinsFromAccou } // NewInputOutputCoinsArgs creates a new record of args provided to a call to InputOutputCoins. -func NewInputOutputCoinsArgs(ctx sdk.Context, inputs []banktypes.Input, outputs []banktypes.Output) *InputOutputCoinsArgs { +func NewInputOutputCoinsArgs(ctx context.Context, inputs []banktypes.Input, outputs []banktypes.Output) *InputOutputCoinsArgs { return &InputOutputCoinsArgs{ - ctxHasQuarantineBypass: quarantine.HasBypass(ctx), + ctxHasQuarantineBypass: false, // quarantine.HasBypass(ctx), // TODO[1760]: quarantine inputs: inputs, outputs: outputs, } diff --git a/x/exchange/keeper/msg_server_test.go b/x/exchange/keeper/msg_server_test.go index 40e8666f2c..e2718edcac 100644 --- a/x/exchange/keeper/msg_server_test.go +++ b/x/exchange/keeper/msg_server_test.go @@ -4,7 +4,7 @@ import ( "context" "fmt" - abci "github.com/tendermint/tendermint/abci/types" + abci "github.com/cometbft/cometbft/abci/types" sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" @@ -110,7 +110,7 @@ func runMsgServerTestCase[R any, S any, F any](s *TestSuite, td msgServerTestDef // newAttr creates a new EventAttribute with the provided key and value. func (s *TestSuite) newAttr(key, value string) abci.EventAttribute { - return abci.EventAttribute{Key: []byte(key), Value: []byte(value)} + return abci.EventAttribute{Key: key, Value: value} } // eventCoinSpent creates a new "coin_spent" event (emitted by the bank module). @@ -171,7 +171,7 @@ func (s *TestSuite) eventHoldReleased(addr sdk.AccAddress, amount string) sdk.Ev // requireFundAccount calls testutil.FundAccount, making sure it doesn't panic or return an error. func (s *TestSuite) requireFundAccount(addr sdk.AccAddress, coins string) { assertions.RequireNotPanicsNoErrorf(s.T(), func() error { - return testutil.FundAccount(s.app.BankKeeper, s.ctx, addr, s.coins(coins)) + return testutil.FundAccount(s.ctx, s.app.BankKeeper, addr, s.coins(coins)) }, "FundAccount(%s, %q)", s.getAddrName(addr), coins) } @@ -204,14 +204,16 @@ func (s *TestSuite) requireSetAttr(addr sdk.AccAddress, name string, owner sdk.A // requireQuarantineOptIn opts an address into quarantine, requiring it to not error. func (s *TestSuite) requireQuarantineOptIn(addr sdk.AccAddress) { - err := s.app.QuarantineKeeper.SetOptIn(s.ctx, addr) - s.Require().NoError(err, "QuarantineKeeper.SetOptIn(%s)", s.getAddrName(addr)) + // TODO[1760]: quarantine: Uncomment these lines. + // err := s.app.QuarantineKeeper.SetOptIn(s.ctx, addr) + // s.Require().NoError(err, "QuarantineKeeper.SetOptIn(%s)", s.getAddrName(addr)) } // requireSanctionAddress sanctions an address, requiring it to not error. func (s *TestSuite) requireSanctionAddress(addr sdk.AccAddress) { - err := s.app.SanctionKeeper.SanctionAddresses(s.ctx, addr) - s.Require().NoError(err, "SanctionAddresses(%s)", s.getAddrName(addr)) + // TODO[1760]: quarantine: Uncomment these lines. + // err := s.app.SanctionKeeper.SanctionAddresses(s.ctx, addr) + // s.Require().NoError(err, "SanctionAddresses(%s)", s.getAddrName(addr)) } // requireAddFinalizeAndActivateMarker creates a marker, requiring it to not error. diff --git a/x/exchange/keeper/orders.go b/x/exchange/keeper/orders.go index fd7828f500..dec00a25e4 100644 --- a/x/exchange/keeper/orders.go +++ b/x/exchange/keeper/orders.go @@ -5,17 +5,20 @@ import ( "fmt" "strings" - db "github.com/tendermint/tm-db" + dbm "github.com/cometbft/cometbft-db" + + "cosmossdk.io/store/prefix" + storetypes "cosmossdk.io/store/types" - "github.com/cosmos/cosmos-sdk/store/prefix" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/kv" "github.com/cosmos/cosmos-sdk/types/query" "github.com/provenance-io/provenance/x/exchange" ) // getLastOrderID gets the id of the last order created. -func getLastOrderID(store sdk.KVStore) uint64 { +func getLastOrderID(store storetypes.KVStore) uint64 { key := MakeKeyLastOrderID() value := store.Get(key) rv, _ := uint64FromBz(value) @@ -23,7 +26,7 @@ func getLastOrderID(store sdk.KVStore) uint64 { } // setLastOrderID sets the id of the last order created. -func setLastOrderID(store sdk.KVStore, orderID uint64) { +func setLastOrderID(store storetypes.KVStore, orderID uint64) { key := MakeKeyLastOrderID() value := uint64Bz(orderID) store.Set(key, value) @@ -31,7 +34,7 @@ func setLastOrderID(store sdk.KVStore, orderID uint64) { // nextOrderID finds the next available order id, updates the last order id // store entry, and returns the unused id it found. -func nextOrderID(store sdk.KVStore) uint64 { +func nextOrderID(store storetypes.KVStore) uint64 { orderID := getLastOrderID(store) + 1 setLastOrderID(store, orderID) return orderID @@ -116,7 +119,7 @@ func (k Keeper) parseOrderStoreKeyValue(key, value []byte) (*exchange.Order, err // createConstantIndexEntries creates all the key/value index entries for an order that don't change. // See also: createMarketExternalIDToOrderEntry. -func createConstantIndexEntries(order exchange.Order) []sdk.KVPair { +func createConstantIndexEntries(order exchange.Order) []kv.Pair { marketID := order.GetMarketID() orderID := order.GetOrderID() orderTypeByte := order.GetOrderTypeByte() @@ -124,7 +127,7 @@ func createConstantIndexEntries(order exchange.Order) []sdk.KVPair { addr := sdk.MustAccAddressFromBech32(owner) assets := order.GetAssets() - return []sdk.KVPair{ + return []kv.Pair{ { Key: MakeIndexKeyMarketToOrder(marketID, orderID), Value: []byte{orderTypeByte}, @@ -142,19 +145,19 @@ func createConstantIndexEntries(order exchange.Order) []sdk.KVPair { // createMarketExternalIDToOrderEntry creates the market external id to order store entry. // See also createConstantIndexEntries -func createMarketExternalIDToOrderEntry(order exchange.OrderI) *sdk.KVPair { +func createMarketExternalIDToOrderEntry(order exchange.OrderI) *kv.Pair { externalID := order.GetExternalID() if len(externalID) == 0 { return nil } - return &sdk.KVPair{ + return &kv.Pair{ Key: MakeIndexKeyMarketExternalIDToOrder(order.GetMarketID(), externalID), Value: uint64Bz(order.GetOrderID()), } } // getOrderFromStore looks up an order from the store. Returns nil, nil if the order does not exist. -func (k Keeper) getOrderFromStore(store sdk.KVStore, orderID uint64) (*exchange.Order, error) { +func (k Keeper) getOrderFromStore(store storetypes.KVStore, orderID uint64) (*exchange.Order, error) { key := MakeKeyOrder(orderID) value := store.Get(key) if len(value) == 0 { @@ -168,7 +171,7 @@ func (k Keeper) getOrderFromStore(store sdk.KVStore, orderID uint64) (*exchange. } // setOrderInStore writes an order to the store (along with all its indexes). -func (k Keeper) setOrderInStore(store sdk.KVStore, order exchange.Order) error { +func (k Keeper) setOrderInStore(store storetypes.KVStore, order exchange.Order) error { key, value, err := k.getOrderStoreKeyValue(order) if err != nil { return fmt.Errorf("failed to create order %d store key/value: %w", order.GetOrderID(), err) @@ -201,7 +204,7 @@ func (k Keeper) setOrderInStore(store sdk.KVStore, order exchange.Order) error { } // deleteAndDeIndexOrder deletes an order from the store along with its indexes. -func deleteAndDeIndexOrder(store sdk.KVStore, order exchange.Order) { +func deleteAndDeIndexOrder(store storetypes.KVStore, order exchange.Order) { key := MakeKeyOrder(order.OrderId) store.Delete(key) indexEntries := createConstantIndexEntries(order) @@ -294,7 +297,7 @@ func (k Keeper) getPageOfOrdersFromIndex( // When accumulate is set to true the current result should be appended to the result set returned // to the client. func filteredPaginateAfterOrder( - prefixStore sdk.KVStore, + prefixStore storetypes.KVStore, pageRequest *query.PageRequest, afterOrderID uint64, onResult func(key []byte, value []byte, accumulate bool) (bool, error), @@ -403,7 +406,7 @@ func filteredPaginateAfterOrder( } // getOrderIterator is similar to query.getIterator but allows limiting it to only entries after a certain order id. -func getOrderIterator(prefixStore sdk.KVStore, start []byte, reverse bool, afterOrderID uint64) db.Iterator { +func getOrderIterator(prefixStore storetypes.KVStore, start []byte, reverse bool, afterOrderID uint64) dbm.Iterator { if reverse { var end []byte if start != nil { @@ -436,7 +439,7 @@ func getOrderIterator(prefixStore sdk.KVStore, start []byte, reverse bool, after } // validateMarketIsAcceptingOrders makes sure the market exists and is accepting orders. -func validateMarketIsAcceptingOrders(store sdk.KVStore, marketID uint32) error { +func validateMarketIsAcceptingOrders(store storetypes.KVStore, marketID uint32) error { if err := validateMarketExists(store, marketID); err != nil { return err } @@ -463,7 +466,7 @@ func (k Keeper) validateUserCanCreateBid(ctx sdk.Context, marketID uint32, buyer } // validateCreateAskFees makes sure the fees are okay for creating an ask order. -func validateCreateAskFees(store sdk.KVStore, marketID uint32, creationFee *sdk.Coin, settlementFlatFee *sdk.Coin) error { +func validateCreateAskFees(store storetypes.KVStore, marketID uint32, creationFee *sdk.Coin, settlementFlatFee *sdk.Coin) error { if err := validateCreateAskFlatFee(store, marketID, creationFee); err != nil { return err } @@ -471,7 +474,7 @@ func validateCreateAskFees(store sdk.KVStore, marketID uint32, creationFee *sdk. } // validateCreateBidFees makes sure the fees are okay for creating a bid order. -func validateCreateBidFees(store sdk.KVStore, marketID uint32, creationFee *sdk.Coin, price sdk.Coin, settlementFees sdk.Coins) error { +func validateCreateBidFees(store storetypes.KVStore, marketID uint32, creationFee *sdk.Coin, price sdk.Coin, settlementFees sdk.Coins) error { if err := validateCreateBidFlatFee(store, marketID, creationFee); err != nil { return err } @@ -480,7 +483,7 @@ func validateCreateBidFees(store sdk.KVStore, marketID uint32, creationFee *sdk. // getAskOrders gets orders from the store, making sure they're ask orders in the given market // and do not have the same seller as the provided buyer. If the buyer isn't yet known, just provide "" for it. -func (k Keeper) getAskOrders(store sdk.KVStore, marketID uint32, orderIDs []uint64, buyer string) ([]*exchange.Order, error) { +func (k Keeper) getAskOrders(store storetypes.KVStore, marketID uint32, orderIDs []uint64, buyer string) ([]*exchange.Order, error) { var errs []error orders := make([]*exchange.Order, 0, len(orderIDs)) @@ -520,7 +523,7 @@ func (k Keeper) getAskOrders(store sdk.KVStore, marketID uint32, orderIDs []uint // getBidOrders gets orders from the store, making sure they're bid orders in the given market // and do not have the same buyer as the provided seller. If the seller isn't yet known, just provide "" for it. -func (k Keeper) getBidOrders(store sdk.KVStore, marketID uint32, orderIDs []uint64, seller string) ([]*exchange.Order, error) { +func (k Keeper) getBidOrders(store storetypes.KVStore, marketID uint32, orderIDs []uint64, seller string) ([]*exchange.Order, error) { var errs []error orders := make([]*exchange.Order, 0, len(orderIDs)) diff --git a/x/exchange/keeper/orders_test.go b/x/exchange/keeper/orders_test.go index a4b832b005..f57c04e5b4 100644 --- a/x/exchange/keeper/orders_test.go +++ b/x/exchange/keeper/orders_test.go @@ -6,6 +6,7 @@ import ( "strings" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/kv" "github.com/provenance-io/provenance/x/exchange" "github.com/provenance-io/provenance/x/exchange/keeper" @@ -1654,7 +1655,7 @@ func (s *TestSuite) TestKeeper_CancelOrder() { } var expEvents sdk.Events - var expDelKVs []sdk.KVPair + var expDelKVs []kv.Pair if cancelledOrder != nil { event := exchange.NewEventOrderCancelled(cancelledOrder, tc.signer) expEvents = append(expEvents, s.untypeEvent(event)) @@ -1691,9 +1692,9 @@ func (s *TestSuite) TestKeeper_CancelOrder() { s.Assert().NoError(err, "GetOrder(%d) error after cancel") s.Assert().Nil(order, "GetOrder(%d) order after cancel") store := s.getStore() - for i, kv := range expDelKVs { - has := store.Has(kv.Key) - s.Assert().False(has, "[%d]: store.Has(%q) (index entry) after cancel", i, kv.Key) + for i, pair := range expDelKVs { + has := store.Has(pair.Key) + s.Assert().False(has, "[%d]: store.Has(%q) (index entry) after cancel", i, pair.Key) } }) } diff --git a/x/exchange/keeper/params.go b/x/exchange/keeper/params.go index 0ffc7e9394..e27dd7ab01 100644 --- a/x/exchange/keeper/params.go +++ b/x/exchange/keeper/params.go @@ -1,13 +1,15 @@ package keeper import ( + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/provenance-io/provenance/x/exchange" ) // deleteAllParamsSplits deletes all the params splits in the store. -func deleteAllParamsSplits(store sdk.KVStore) { +func deleteAllParamsSplits(store storetypes.KVStore) { keys := getAllKeys(store, GetKeyPrefixParamsSplit()) for _, key := range keys { store.Delete(key) @@ -15,14 +17,14 @@ func deleteAllParamsSplits(store sdk.KVStore) { } // setParamsSplit sets the provided params split for the provided denom. -func setParamsSplit(store sdk.KVStore, denom string, split uint16) { +func setParamsSplit(store storetypes.KVStore, denom string, split uint16) { key := MakeKeyParamsSplit(denom) value := uint16Bz(split) store.Set(key, value) } // getParamsSplit gets the params split amount for the provided denom, and whether the entry existed. -func getParamsSplit(store sdk.KVStore, denom string) (uint16, bool) { +func getParamsSplit(store storetypes.KVStore, denom string) (uint16, bool) { key := MakeKeyParamsSplit(denom) if store.Has(key) { value := store.Get(key) diff --git a/x/exchange/keeper/suite_test.go b/x/exchange/keeper/suite_test.go index 42cbd76985..fa9670d41b 100644 --- a/x/exchange/keeper/suite_test.go +++ b/x/exchange/keeper/suite_test.go @@ -11,10 +11,10 @@ import ( "github.com/rs/zerolog" "github.com/stretchr/testify/suite" - "github.com/tendermint/tendermint/libs/log" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + "cosmossdk.io/log" + sdkmath "cosmossdk.io/math" + storetypes "cosmossdk.io/store/types" - "github.com/cosmos/cosmos-sdk/server" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" @@ -67,18 +67,17 @@ func (s *TestSuite) SetupTest() { // Error log lines will start with "ERR ". // Info log lines will start with "INF ". // Debug log lines are omitted, but would start with "DBG ". - logger := zerolog.New(lw).Level(zerolog.InfoLevel) - return server.ZeroLogWrapper{Logger: logger} + return log.NewCustomLogger(zerolog.New(lw).Level(zerolog.InfoLevel)) } // swap in the buffered logger maker so it's used in app.Setup, but then put it back (since that's a global thing). defer app.SetLoggerMaker(app.SetLoggerMaker(bufferedLoggerMaker)) s.app = app.Setup(s.T()) s.logBuffer.Reset() - s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{}) + s.ctx = s.app.BaseApp.NewContext(false) s.k = s.app.ExchangeKeeper - addrs := app.AddTestAddrsIncremental(s.app, s.ctx, 5, sdk.NewInt(1_000_000_000)) + addrs := app.AddTestAddrsIncremental(s.app, s.ctx, 5, sdkmath.NewInt(1_000_000_000)) s.addr1 = addrs[0] s.addr2 = addrs[1] s.addr3 = addrs[2] @@ -571,7 +570,7 @@ func (s *TestSuite) getAddrStrName(addrStr string) string { } // getStore gets the exchange store. -func (s *TestSuite) getStore() sdk.KVStore { +func (s *TestSuite) getStore() storetypes.KVStore { return s.k.GetStore(s.ctx) } @@ -598,7 +597,7 @@ func (s *TestSuite) dumpExchangeState() []string { } // requireSetOrderInStore calls SetOrderInStore making sure it doesn't panic or return an error. -func (s *TestSuite) requireSetOrderInStore(store sdk.KVStore, order *exchange.Order) { +func (s *TestSuite) requireSetOrderInStore(store storetypes.KVStore, order *exchange.Order) { assertions.RequireNotPanicsNoErrorf(s.T(), func() error { return s.k.SetOrderInStore(store, *order) }, "SetOrderInStore(%d)", order.OrderId) diff --git a/x/exchange/keys.go b/x/exchange/keys.go index feee4d7eda..2cc25a73bc 100644 --- a/x/exchange/keys.go +++ b/x/exchange/keys.go @@ -3,7 +3,7 @@ package exchange import ( "fmt" - "github.com/tendermint/tendermint/crypto" + "github.com/cometbft/cometbft/crypto" sdk "github.com/cosmos/cosmos-sdk/types" ) diff --git a/x/exchange/market.go b/x/exchange/market.go index b2accb2a52..7ca7b61e44 100644 --- a/x/exchange/market.go +++ b/x/exchange/market.go @@ -268,8 +268,6 @@ func (r FeeRatio) Validate() error { // Equals returns true if this FeeRatio has the same price and fee as the provided other FeeRatio. func (r FeeRatio) Equals(other FeeRatio) bool { - // Cannot use coin.IsEqual because it panics if the denoms are different, because that makes perfect sense. - // The coin.Equal(interface{}) function behaves as expected, though, but with the extra casting costs. return r.Price.Equal(other.Price) && r.Fee.Equal(other.Fee) } @@ -295,7 +293,7 @@ func (r FeeRatio) applyLooselyTo(price sdk.Coin) (sdkmath.Int, bool, error) { // ApplyTo attempts to calculate the fee that results from applying this fee ratio to the provided price. func (r FeeRatio) ApplyTo(price sdk.Coin) (sdk.Coin, error) { - rv := sdk.Coin{Denom: "", Amount: sdk.ZeroInt()} + rv := sdk.Coin{Denom: "", Amount: sdkmath.ZeroInt()} amt, wasRounded, err := r.applyLooselyTo(price) if err != nil { return rv, err @@ -311,7 +309,7 @@ func (r FeeRatio) ApplyTo(price sdk.Coin) (sdk.Coin, error) { // ApplyToLoosely calculates the fee that results from applying this fee ratio to the provided price, allowing for the // ratio to not evenly apply to the price. func (r FeeRatio) ApplyToLoosely(price sdk.Coin) (sdk.Coin, error) { - rv := sdk.Coin{Denom: "", Amount: sdk.ZeroInt()} + rv := sdk.Coin{Denom: "", Amount: sdkmath.ZeroInt()} amt, _, err := r.applyLooselyTo(price) if err != nil { return rv, err diff --git a/x/exchange/market_test.go b/x/exchange/market_test.go index 966a2d9496..06990162c7 100644 --- a/x/exchange/market_test.go +++ b/x/exchange/market_test.go @@ -9,11 +9,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "golang.org/x/exp/maps" sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/provenance-io/provenance/internal/helpers" "github.com/provenance-io/provenance/testutil/assertions" ) @@ -3113,7 +3113,7 @@ func TestPermission_Validate(t *testing.T) { } t.Run("all values have a test case", func(t *testing.T) { - allVals := maps.Keys(Permission_name) + allVals := helpers.Keys(Permission_name) sort.Slice(allVals, func(i, j int) bool { return allVals[i] < allVals[j] }) @@ -3290,7 +3290,7 @@ func TestParsePermission(t *testing.T) { } t.Run("all values have a test case", func(t *testing.T) { - allVals := maps.Keys(Permission_name) + allVals := helpers.Keys(Permission_name) sort.Slice(allVals, func(i, j int) bool { return allVals[i] < allVals[j] }) diff --git a/x/exchange/module/module.go b/x/exchange/module/module.go index e25c059426..a1f399d199 100644 --- a/x/exchange/module/module.go +++ b/x/exchange/module/module.go @@ -9,7 +9,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" - abci "github.com/tendermint/tendermint/abci/types" + abci "github.com/cometbft/cometbft/abci/types" sdkclient "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" @@ -28,6 +28,7 @@ var ( _ module.AppModuleBasic = AppModuleBasic{} _ module.AppModule = AppModule{} _ module.AppModuleSimulation = AppModule{} + // TODO[1760]: app-module: Add more assertions for the new types and clean up stuff no longer needed. ) type AppModuleBasic struct { @@ -89,17 +90,14 @@ func NewAppModule(cdc codec.Codec, exchangeKeeper keeper.Keeper) AppModule { } } -// RegisterInvariants registers the invariants for the exchange module. -func (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} - -// Deprecated: Route returns the message routing key for the exchange module, empty. -func (am AppModule) Route() sdk.Route { return sdk.Route{} } +// IsOnePerModuleType is a dummy function that satisfies the OnePerModuleType interface (needed by AppModule). +func (AppModule) IsOnePerModuleType() {} -// Deprecated: QuerierRoute returns the route we respond to for abci queries, "". -func (AppModule) QuerierRoute() string { return "" } +// IsAppModule is a dummy function that satisfies the AppModule interface. +func (AppModule) IsAppModule() {} -// Deprecated: LegacyQuerierHandler returns the exchange module sdk.Querier (nil). -func (am AppModule) LegacyQuerierHandler(_ *codec.LegacyAmino) sdk.Querier { return nil } +// RegisterInvariants registers the invariants for the exchange module. +func (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} // InitGenesis performs genesis initialization for the exchange module. It returns // no validator updates. @@ -142,10 +140,10 @@ func (am AppModule) ProposalContents(_ module.SimulationState) []simtypes.Weight // RandomizedParams returns randomized exchange param changes for the simulator, // of which there are none since this module doesn't use the params module. -func (AppModule) RandomizedParams(_ *rand.Rand) []simtypes.ParamChange { return nil } +func (AppModule) RandomizedParams(_ *rand.Rand) []simtypes.LegacyParamChange { return nil } // RegisterStoreDecoder registers a decoder for exchange module's types -func (am AppModule) RegisterStoreDecoder(sdr sdk.StoreDecoderRegistry) { +func (am AppModule) RegisterStoreDecoder(sdr simtypes.StoreDecoderRegistry) { sdr[exchange.StoreKey] = simulation.NewDecodeStore(am.cdc) } diff --git a/x/exchange/msg_test.go b/x/exchange/msg_test.go index 03c4fa953c..fc591fc8f7 100644 --- a/x/exchange/msg_test.go +++ b/x/exchange/msg_test.go @@ -11,6 +11,7 @@ import ( sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/provenance-io/provenance/internal/helpers" "github.com/provenance-io/provenance/testutil/assertions" ) @@ -19,6 +20,10 @@ const ( bech32Err = "decoding bech32 failed: " ) +type HasGetSigners interface { + GetSigners() []sdk.AccAddress +} + func TestAllMsgsGetSigners(t *testing.T) { // getTypeName gets just the type name of the provided thing, e.g. "MsgGovCreateMarketRequest". getTypeName := func(thing interface{}) string { @@ -133,9 +138,12 @@ func TestAllMsgsGetSigners(t *testing.T) { for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { + smsg, ok := tc.msg.(HasGetSigners) + require.True(t, ok, "%T does not have a .GetSigners method.") + var signers []sdk.AccAddress testFunc := func() { - signers = tc.msg.GetSigners() + signers = smsg.GetSigners() } assertions.RequirePanicEquals(t, testFunc, tc.expPanic, "GetSigners") @@ -159,7 +167,7 @@ func testValidateBasic(t *testing.T, msg sdk.Msg, expErr []string) { t.Helper() var err error testFunc := func() { - err = msg.ValidateBasic() + err = helpers.ValidateBasic(msg) } require.NotPanics(t, testFunc, "%T.ValidateBasic()", msg) diff --git a/x/hold/client/cli/cli_test.go b/x/hold/client/cli/cli_test.go index fec63cfe7a..b30b9ac4c1 100644 --- a/x/hold/client/cli/cli_test.go +++ b/x/hold/client/cli/cli_test.go @@ -11,7 +11,7 @@ import ( "github.com/spf13/cobra" "github.com/stretchr/testify/suite" - tmcli "github.com/tendermint/tendermint/libs/cli" + cmtcli "github.com/cometbft/cometbft/libs/cli" "github.com/cosmos/cosmos-sdk/client/flags" clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" @@ -19,7 +19,6 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/query" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - bankcli "github.com/cosmos/cosmos-sdk/x/bank/client/cli" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" "github.com/provenance-io/provenance/internal/antewrapper" @@ -158,8 +157,8 @@ func (s *IntegrationCLITestSuite) SetupSuite() { s.addr5Desc = "addr without holds and only bond denom" s.addr5Bal, s.addr5Hold, s.addr5Spendable = newAmounts("addr5", "", "") - s.flagAsText = fmt.Sprintf("--%s=text", tmcli.OutputFlag) - s.flagAsJSON = fmt.Sprintf("--%s=json", tmcli.OutputFlag) + s.flagAsText = fmt.Sprintf("--%s=text", cmtcli.OutputFlag) + s.flagAsJSON = fmt.Sprintf("--%s=json", cmtcli.OutputFlag) s.flagOffset = "--" + flags.FlagOffset s.flagLimit = "--" + flags.FlagLimit s.flagReverse = "--" + flags.FlagReverse @@ -507,7 +506,9 @@ func (s *IntegrationCLITestSuite) TestHoldsNotInFromSpendable() { // The purpose of these tests is to make sure that the bank module is // being properly informed of the locked hold funds. cmdGen := func() *cobra.Command { - return bankcli.GetSpendableBalancesCmd() + // TODO[1760]: bank: Put this back once we know how to query spendable balances again. + return nil + // return bankcli.GetSpendableBalancesCmd() } resp := func(balances sdk.Coins) *banktypes.QuerySpendableBalancesResponse { return &banktypes.QuerySpendableBalancesResponse{ diff --git a/x/hold/client/cli/query.go b/x/hold/client/cli/query.go index ee83b97c28..49deb2e113 100644 --- a/x/hold/client/cli/query.go +++ b/x/hold/client/cli/query.go @@ -87,7 +87,7 @@ func QueryCmdGetAllHolds() *cobra.Command { } req := hold.GetAllHoldsRequest{} - req.Pagination, err = client.ReadPageRequestWithPageKeyDecoded(cmd.Flags()) + req.Pagination, err = client.ReadPageRequest(cmd.Flags()) // TODO[1760]: cli: ReadPageRequestWithPageKeyDecoded if err != nil { return err } diff --git a/x/hold/events_test.go b/x/hold/events_test.go index fd1783c6fc..8be71a6bfc 100644 --- a/x/hold/events_test.go +++ b/x/hold/events_test.go @@ -8,7 +8,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + abci "github.com/cometbft/cometbft/abci/types" sdk "github.com/cosmos/cosmos-sdk/types" @@ -125,9 +125,9 @@ func TestTypedEventToEvent(t *testing.T) { expEvent: sdk.Event{ Type: "provenance.hold.v1.EventHoldAdded", Attributes: []abci.EventAttribute{ - {Key: []byte("address"), Value: []byte(addrQ)}, - {Key: []byte("amount"), Value: []byte(coinsQ)}, - {Key: []byte("reason"), Value: []byte(`"test reason"`)}, + {Key: "address", Value: addrQ}, + {Key: "amount", Value: coinsQ}, + {Key: "reason", Value: `"test reason"`}, }, }, }, @@ -137,8 +137,8 @@ func TestTypedEventToEvent(t *testing.T) { expEvent: sdk.Event{ Type: "provenance.hold.v1.EventHoldReleased", Attributes: []abci.EventAttribute{ - {Key: []byte("address"), Value: []byte(addrQ)}, - {Key: []byte("amount"), Value: []byte(coinsQ)}, + {Key: "address", Value: addrQ}, + {Key: "amount", Value: coinsQ}, }, }, }, diff --git a/x/hold/expected_keepers.go b/x/hold/expected_keepers.go index fb22c54e8e..c2dac5ea89 100644 --- a/x/hold/expected_keepers.go +++ b/x/hold/expected_keepers.go @@ -1,11 +1,13 @@ package hold import ( + "context" + sdk "github.com/cosmos/cosmos-sdk/types" - banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + // banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" // TODO[1760]: locked-coins ) type BankKeeper interface { - AppendLockedCoinsGetter(getter banktypes.GetLockedCoinsFn) - SpendableCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins + // AppendLockedCoinsGetter(getter banktypes.GetLockedCoinsFn) // TODO[1760]: locked-coins + SpendableCoins(ctx context.Context, addr sdk.AccAddress) sdk.Coins } diff --git a/x/hold/keeper/export_test.go b/x/hold/keeper/export_test.go index ecd833fa30..1a4a784594 100644 --- a/x/hold/keeper/export_test.go +++ b/x/hold/keeper/export_test.go @@ -2,7 +2,8 @@ package keeper import ( sdkmath "cosmossdk.io/math" - storetypes "github.com/cosmos/cosmos-sdk/store/types" + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/provenance-io/provenance/x/hold" @@ -26,6 +27,6 @@ func (k Keeper) GetStoreKey() storetypes.StoreKey { } // SetHoldCoinAmount exposes this keeper's setHoldCoinAmount function for unit tests. -func (k Keeper) SetHoldCoinAmount(store sdk.KVStore, addr sdk.AccAddress, denom string, amount sdkmath.Int) error { +func (k Keeper) SetHoldCoinAmount(store storetypes.KVStore, addr sdk.AccAddress, denom string, amount sdkmath.Int) error { return k.setHoldCoinAmount(store, addr, denom, amount) } diff --git a/x/hold/keeper/genesis_test.go b/x/hold/keeper/genesis_test.go index 34d6ea8c65..b7eba5ef06 100644 --- a/x/hold/keeper/genesis_test.go +++ b/x/hold/keeper/genesis_test.go @@ -3,6 +3,8 @@ package keeper_test import ( "sort" + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/provenance-io/provenance/x/hold" @@ -119,7 +121,7 @@ func (s *TestSuite) TestKeeper_InitGenesis() { expectedState := expStateEntries(tc.genState) em := sdk.NewEventManager() - ctx := s.sdkCtx.WithEventManager(em) + ctx := s.ctx.WithEventManager(em) testFunc := func() { s.keeper.InitGenesis(ctx, tc.genState) } @@ -149,7 +151,7 @@ func (s *TestSuite) TestKeeper_ExportGenesis() { tests := []struct { name string - setup func(*TestSuite, sdk.KVStore) + setup func(*TestSuite, storetypes.KVStore) expGenState *hold.GenesisState expPanic []string }{ @@ -159,14 +161,14 @@ func (s *TestSuite) TestKeeper_ExportGenesis() { }, { name: "one entry: good", - setup: func(s *TestSuite, store sdk.KVStore) { + setup: func(s *TestSuite, store storetypes.KVStore) { s.requireSetHoldCoinAmount(store, s.addr1, "banana", s.int(99)) }, expGenState: genStateWithHolds(accHold(s.addr1, "99banana")), }, { name: "one entry: bad", - setup: func(s *TestSuite, store sdk.KVStore) { + setup: func(s *TestSuite, store storetypes.KVStore) { s.setHoldCoinAmountRaw(store, s.addr1, "badcoin", "badvalue") s.requireSetHoldCoinAmount(store, s.addr1, "banana", s.int(99)) }, @@ -177,7 +179,7 @@ func (s *TestSuite) TestKeeper_ExportGenesis() { }, { name: "five addrs: all good", - setup: func(suite *TestSuite, store sdk.KVStore) { + setup: func(suite *TestSuite, store storetypes.KVStore) { s.requireSetHoldCoinAmount(store, s.addr1, "banana", s.int(99)) s.requireSetHoldCoinAmount(store, s.addr1, "cucumber", s.int(3)) s.requireSetHoldCoinAmount(store, s.addr1, "durian", s.int(8)) @@ -201,7 +203,7 @@ func (s *TestSuite) TestKeeper_ExportGenesis() { }, { name: "five addrs: several bad", - setup: func(suite *TestSuite, store sdk.KVStore) { + setup: func(suite *TestSuite, store storetypes.KVStore) { s.requireSetHoldCoinAmount(store, s.addr1, "banana", s.int(99)) s.requireSetHoldCoinAmount(store, s.addr1, "cucumber", s.int(3)) s.requireSetHoldCoinAmount(store, s.addr1, "durian", s.int(8)) @@ -240,7 +242,7 @@ func (s *TestSuite) TestKeeper_ExportGenesis() { var genState *hold.GenesisState testFunc := func() { - genState = s.keeper.ExportGenesis(s.sdkCtx) + genState = s.keeper.ExportGenesis(s.ctx) } s.requirePanicContents(testFunc, tc.expPanic, "ExportGenesis") s.Assert().Equal(tc.expGenState, genState, "exported genesis state") diff --git a/x/hold/keeper/grpc_query.go b/x/hold/keeper/grpc_query.go index dc245dce0a..2757252cc9 100644 --- a/x/hold/keeper/grpc_query.go +++ b/x/hold/keeper/grpc_query.go @@ -7,9 +7,9 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - db "github.com/tendermint/tm-db" + dbm "github.com/cometbft/cometbft-db" - storetypes "github.com/cosmos/cosmos-sdk/store/types" + storetypes "cosmossdk.io/store/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/query" @@ -160,7 +160,7 @@ func (k Keeper) paginateAllHolds(ctx sdk.Context, pageRequest *query.PageRequest // getIterator creates an iterator on the provided store with the provided start and direction. // It's copied from query.pagination.go. -func getIterator(prefixStore storetypes.KVStore, start []byte, reverse bool) db.Iterator { +func getIterator(prefixStore storetypes.KVStore, start []byte, reverse bool) dbm.Iterator { if reverse { var end []byte if start != nil { diff --git a/x/hold/keeper/grpc_query_test.go b/x/hold/keeper/grpc_query_test.go index 7f3cb9e935..532ed7410d 100644 --- a/x/hold/keeper/grpc_query_test.go +++ b/x/hold/keeper/grpc_query_test.go @@ -1,6 +1,8 @@ package keeper_test import ( + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/query" @@ -75,7 +77,7 @@ func (s *TestSuite) TestKeeper_GetHolds() { var response *hold.GetHoldsResponse var err error testFunc := func() { - response, err = s.keeper.GetHolds(s.stdlibCtx, tc.request) + response, err = s.keeper.GetHolds(s.ctx, tc.request) } s.Require().NotPanics(testFunc, "GetHolds") s.assertErrorContents(err, tc.expErr, "GetHolds error") @@ -103,7 +105,7 @@ func (s *TestSuite) TestKeeper_GetAllHolds() { // standardSetup puts two denoms on hold for each addrs with incremental amounts. // This is used unless the test has a specific setup function to use instead. - standardSetup := func(s *TestSuite, store sdk.KVStore) { + standardSetup := func(s *TestSuite, store storetypes.KVStore) { s.requireSetHoldCoinAmount(store, s.addr1, "banana", s.int(99)) s.requireSetHoldCoinAmount(store, s.addr1, "cherry", s.int(12)) s.requireSetHoldCoinAmount(store, s.addr2, "banana", s.int(100)) @@ -129,7 +131,7 @@ func (s *TestSuite) TestKeeper_GetAllHolds() { tests := []struct { name string - setup func(s *TestSuite, store sdk.KVStore) + setup func(s *TestSuite, store storetypes.KVStore) request *hold.GetAllHoldsRequest expHolds []*hold.AccountHold expPageResp *query.PageResponse @@ -156,7 +158,7 @@ func (s *TestSuite) TestKeeper_GetAllHolds() { }, { name: "found bad entry", - setup: func(s *TestSuite, store sdk.KVStore) { + setup: func(s *TestSuite, store storetypes.KVStore) { s.requireSetHoldCoinAmount(store, s.addr1, "banana", s.int(99)) s.setHoldCoinAmountRaw(store, s.addr2, "badcoin", "badvalue") }, @@ -168,7 +170,7 @@ func (s *TestSuite) TestKeeper_GetAllHolds() { }, { name: "found bad entry using nextkey", - setup: func(s *TestSuite, store sdk.KVStore) { + setup: func(s *TestSuite, store storetypes.KVStore) { s.requireSetHoldCoinAmount(store, s.addr1, "banana", s.int(99)) s.setHoldCoinAmountRaw(store, s.addr2, "badcoin", "badvalue") }, @@ -183,7 +185,7 @@ func (s *TestSuite) TestKeeper_GetAllHolds() { }, { name: "bad entry but its out of the result range", - setup: func(s *TestSuite, store sdk.KVStore) { + setup: func(s *TestSuite, store storetypes.KVStore) { standardSetup(s, store) s.setHoldCoinAmountRaw(store, s.addr5, "zoinkscoin", "zoinksvalue") }, @@ -300,7 +302,7 @@ func (s *TestSuite) TestKeeper_GetAllHolds() { var response *hold.GetAllHoldsResponse var err error testFunc := func() { - response, err = s.keeper.GetAllHolds(s.stdlibCtx, tc.request) + response, err = s.keeper.GetAllHolds(s.ctx, tc.request) } s.Require().NotPanics(testFunc, "GetAllHolds") s.assertErrorContents(err, tc.expErr, "GetAllHolds error") diff --git a/x/hold/keeper/invariants.go b/x/hold/keeper/invariants.go index 1919f541b7..c167a58a6f 100644 --- a/x/hold/keeper/invariants.go +++ b/x/hold/keeper/invariants.go @@ -5,7 +5,6 @@ import ( "strings" sdk "github.com/cosmos/cosmos-sdk/types" - banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" "github.com/provenance-io/provenance/x/hold" ) @@ -45,7 +44,7 @@ func holdAccountBalancesInvariantHelper(ctx sdk.Context, keeper Keeper) (string, // So, long story short (too late), if the block time is zero, also bypass the vesting locked funds getter. blockTime := ctx.BlockTime() if blockTime.IsZero() { - ctx = banktypes.WithVestingLockedBypass(ctx) + ctx = ctx // banktypes.WithVestingLockedBypass(ctx) // TODO[1760]: locked-coins } var addr sdk.AccAddress var total sdk.Coins diff --git a/x/hold/keeper/invariants_test.go b/x/hold/keeper/invariants_test.go index 014632ff51..ab7697d171 100644 --- a/x/hold/keeper/invariants_test.go +++ b/x/hold/keeper/invariants_test.go @@ -4,6 +4,8 @@ import ( "time" sdkmath "cosmossdk.io/math" + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" vesting "github.com/cosmos/cosmos-sdk/x/auth/vesting/types" @@ -21,18 +23,20 @@ func (s *TestSuite) TestHoldAccountBalancesInvariantHelper() { endTime := startTime.Add(time.Duration(s.initAmount) * time.Second) // Turn addr4 into a vesting account: 1 stake per second. - addr4Acc := s.app.AccountKeeper.GetAccount(s.sdkCtx, s.addr4) + addr4Acc := s.app.AccountKeeper.GetAccount(s.ctx, s.addr4) addr4AccBase, ok := addr4Acc.(*authtypes.BaseAccount) s.Require().True(ok, "can cast addr4 account %T to %T", addr4Acc, addr4AccBase) - addr4Vest := vesting.NewContinuousVestingAccount(addr4AccBase, s.initBal, startTime.Unix(), endTime.Unix()) - s.app.AccountKeeper.SetAccount(s.sdkCtx, addr4Vest) + addr4Vest, err := vesting.NewContinuousVestingAccount(addr4AccBase, s.initBal, startTime.Unix(), endTime.Unix()) + s.Require().NoError(err, "NewContinuousVestingAccount(addr4)") + s.app.AccountKeeper.SetAccount(s.ctx, addr4Vest) // Turn addr5 into a vesting account too: 1 stake per second, but give it some extra funds. - addr5Acc := s.app.AccountKeeper.GetAccount(s.sdkCtx, s.addr5) + addr5Acc := s.app.AccountKeeper.GetAccount(s.ctx, s.addr5) addr5AccBase, ok := addr5Acc.(*authtypes.BaseAccount) s.Require().True(ok, "can cast addr5 account %T to %T", addr5Acc, addr5AccBase) - addr5Vest := vesting.NewContinuousVestingAccount(addr5AccBase, s.initBal, startTime.Unix(), endTime.Unix()) - s.app.AccountKeeper.SetAccount(s.sdkCtx, addr5Vest) + addr5Vest, err := vesting.NewContinuousVestingAccount(addr5AccBase, s.initBal, startTime.Unix(), endTime.Unix()) + s.Require().NoError(err, "NewContinuousVestingAccount(addr5)") + s.app.AccountKeeper.SetAccount(s.ctx, addr5Vest) s.requireFundAccount(s.addr5, "5000"+s.bondDenom) errIns := func(addr sdk.AccAddress, balance, onHold string) string { @@ -41,7 +45,7 @@ func (s *TestSuite) TestHoldAccountBalancesInvariantHelper() { tests := []struct { name string - setup func(s *TestSuite, store sdk.KVStore) + setup func(s *TestSuite, store storetypes.KVStore) time time.Time expMsg string expBroken bool @@ -53,7 +57,7 @@ func (s *TestSuite) TestHoldAccountBalancesInvariantHelper() { }, { name: "error in an entry", - setup: func(s *TestSuite, store sdk.KVStore) { + setup: func(s *TestSuite, store storetypes.KVStore) { s.requireSetHoldCoinAmount(store, s.addr1, "banana", s.int(99)) s.setHoldCoinAmountRaw(store, s.addr1, "badcoin", "badvalue") }, @@ -64,7 +68,7 @@ func (s *TestSuite) TestHoldAccountBalancesInvariantHelper() { }, { name: "one addr has none of a denom", - setup: func(s *TestSuite, store sdk.KVStore) { + setup: func(s *TestSuite, store storetypes.KVStore) { s.requireSetHoldCoinAmount(store, s.addr4, "banana", s.int(5)) }, expMsg: "1 account has 5banana on hold. 1 problem detected: " + errIns(s.addr4, "0banana", "5banana"), @@ -72,7 +76,7 @@ func (s *TestSuite) TestHoldAccountBalancesInvariantHelper() { }, { name: "one addr has insufficient of a denom", - setup: func(s *TestSuite, store sdk.KVStore) { + setup: func(s *TestSuite, store storetypes.KVStore) { s.requireSetHoldCoinAmount(store, s.addr2, "banana", s.int(13)) }, expMsg: "1 account has 13banana on hold. 1 problem detected: " + errIns(s.addr2, "12banana", "13banana"), @@ -80,7 +84,7 @@ func (s *TestSuite) TestHoldAccountBalancesInvariantHelper() { }, { name: "one addr has insufficient of two denoms", - setup: func(s *TestSuite, store sdk.KVStore) { + setup: func(s *TestSuite, store storetypes.KVStore) { s.requireSetHoldCoinAmount(store, s.addr1, "banana", s.int(101)) s.requireSetHoldCoinAmount(store, s.addr1, "cucumber", s.int(4)) }, @@ -90,7 +94,7 @@ func (s *TestSuite) TestHoldAccountBalancesInvariantHelper() { }, { name: "two addrs have insufficient", - setup: func(s *TestSuite, store sdk.KVStore) { + setup: func(s *TestSuite, store storetypes.KVStore) { s.requireSetHoldCoinAmount(store, s.addr1, "banana", s.int(101)) s.requireSetHoldCoinAmount(store, s.addr2, "banana", s.int(14)) }, @@ -101,7 +105,7 @@ func (s *TestSuite) TestHoldAccountBalancesInvariantHelper() { }, { name: "one addr has exact amount", - setup: func(s *TestSuite, store sdk.KVStore) { + setup: func(s *TestSuite, store storetypes.KVStore) { s.requireSetHoldCoinAmount(store, s.addr1, "cucumber", s.int(3)) }, expMsg: "1 account has 3cucumber on hold. No problems detected.", @@ -109,7 +113,7 @@ func (s *TestSuite) TestHoldAccountBalancesInvariantHelper() { }, { name: "one addr has more than hold", - setup: func(s *TestSuite, store sdk.KVStore) { + setup: func(s *TestSuite, store storetypes.KVStore) { s.requireSetHoldCoinAmount(store, s.addr1, "banana", s.int(95)) }, expMsg: "1 account has 95banana on hold. No problems detected.", @@ -117,9 +121,9 @@ func (s *TestSuite) TestHoldAccountBalancesInvariantHelper() { }, { name: "five addrs all have everything on hold", - setup: func(s *TestSuite, store sdk.KVStore) { + setup: func(s *TestSuite, store storetypes.KVStore) { for _, addr := range []sdk.AccAddress{s.addr1, s.addr2, s.addr3, s.addr4, s.addr5} { - for _, coin := range s.bankKeeper.GetAllBalances(s.sdkCtx, addr) { + for _, coin := range s.bankKeeper.GetAllBalances(s.ctx, addr) { s.requireSetHoldCoinAmount(store, addr, coin.Denom, coin.Amount) } } @@ -131,9 +135,9 @@ func (s *TestSuite) TestHoldAccountBalancesInvariantHelper() { }, { name: "five addrs all have everything on hold one has too much though", - setup: func(s *TestSuite, store sdk.KVStore) { + setup: func(s *TestSuite, store storetypes.KVStore) { for _, addr := range []sdk.AccAddress{s.addr1, s.addr2, s.addr3, s.addr4, s.addr5} { - for _, coin := range s.bankKeeper.GetAllBalances(s.sdkCtx, addr) { + for _, coin := range s.bankKeeper.GetAllBalances(s.ctx, addr) { s.requireSetHoldCoinAmount(store, addr, coin.Denom, coin.Amount) } } @@ -147,9 +151,9 @@ func (s *TestSuite) TestHoldAccountBalancesInvariantHelper() { }, { name: "five addrs all have holds but none have enough funds", - setup: func(s *TestSuite, store sdk.KVStore) { + setup: func(s *TestSuite, store storetypes.KVStore) { for _, addr := range []sdk.AccAddress{s.addr1, s.addr2, s.addr3, s.addr4, s.addr5} { - for _, coin := range s.bankKeeper.GetAllBalances(s.sdkCtx, addr) { + for _, coin := range s.bankKeeper.GetAllBalances(s.ctx, addr) { s.requireSetHoldCoinAmount(store, addr, coin.Denom, coin.Amount.Add(sdkmath.OneInt())) } } @@ -166,7 +170,7 @@ func (s *TestSuite) TestHoldAccountBalancesInvariantHelper() { }, { name: "vesting account has lock on some unvested funds", - setup: func(s *TestSuite, store sdk.KVStore) { + setup: func(s *TestSuite, store storetypes.KVStore) { s.requireSetHoldCoinAmount(store, s.addr4, s.bondDenom, s.int(5)) }, time: startTime, @@ -175,7 +179,7 @@ func (s *TestSuite) TestHoldAccountBalancesInvariantHelper() { }, { name: "vesting account has lock on all vested funds", - setup: func(s *TestSuite, store sdk.KVStore) { + setup: func(s *TestSuite, store storetypes.KVStore) { s.requireSetHoldCoinAmount(store, s.addr4, s.bondDenom, s.int(5)) }, time: startTime.Add(5 * time.Second), @@ -184,7 +188,7 @@ func (s *TestSuite) TestHoldAccountBalancesInvariantHelper() { }, { name: "vesting account has lock on some unvested funds at time zero", - setup: func(s *TestSuite, store sdk.KVStore) { + setup: func(s *TestSuite, store storetypes.KVStore) { s.requireSetHoldCoinAmount(store, s.addr4, s.bondDenom, s.int(5)) }, time: zeroTime, @@ -193,7 +197,7 @@ func (s *TestSuite) TestHoldAccountBalancesInvariantHelper() { }, { name: "vesting account has lock on extra funds", - setup: func(s *TestSuite, store sdk.KVStore) { + setup: func(s *TestSuite, store storetypes.KVStore) { s.requireSetHoldCoinAmount(store, s.addr5, s.bondDenom, s.int(5000)) }, time: startTime, @@ -202,7 +206,7 @@ func (s *TestSuite) TestHoldAccountBalancesInvariantHelper() { }, { name: "vesting account has lock on extra funds and some unvested funds", - setup: func(s *TestSuite, store sdk.KVStore) { + setup: func(s *TestSuite, store storetypes.KVStore) { s.requireSetHoldCoinAmount(store, s.addr5, s.bondDenom, s.int(5001)) }, time: startTime, @@ -211,7 +215,7 @@ func (s *TestSuite) TestHoldAccountBalancesInvariantHelper() { }, { name: "vesting account has lock on extra funds and all vested funds", - setup: func(s *TestSuite, store sdk.KVStore) { + setup: func(s *TestSuite, store storetypes.KVStore) { s.requireSetHoldCoinAmount(store, s.addr5, s.bondDenom, s.int(5001)) }, time: startTime.Add(1 * time.Second), @@ -220,7 +224,7 @@ func (s *TestSuite) TestHoldAccountBalancesInvariantHelper() { }, { name: "vesting account has lock on extra funds plus some at time zero", - setup: func(s *TestSuite, store sdk.KVStore) { + setup: func(s *TestSuite, store storetypes.KVStore) { s.requireSetHoldCoinAmount(store, s.addr5, s.bondDenom, s.int(5001)) }, time: zeroTime, @@ -229,7 +233,7 @@ func (s *TestSuite) TestHoldAccountBalancesInvariantHelper() { }, { name: "vesting account has lock on too much at time zero", - setup: func(s *TestSuite, store sdk.KVStore) { + setup: func(s *TestSuite, store storetypes.KVStore) { s.requireSetHoldCoinAmount(store, s.addr5, s.bondDenom, s.int(s.initAmount+5001)) }, time: zeroTime, @@ -238,7 +242,7 @@ func (s *TestSuite) TestHoldAccountBalancesInvariantHelper() { }, { name: "vesting account has lock on too much after end time", - setup: func(s *TestSuite, store sdk.KVStore) { + setup: func(s *TestSuite, store storetypes.KVStore) { s.requireSetHoldCoinAmount(store, s.addr5, s.bondDenom, s.int(s.initAmount+5001)) }, time: endTime.Add(1 * time.Second), @@ -247,7 +251,7 @@ func (s *TestSuite) TestHoldAccountBalancesInvariantHelper() { }, { name: "vesting account has lock on everything after end time", - setup: func(s *TestSuite, store sdk.KVStore) { + setup: func(s *TestSuite, store storetypes.KVStore) { s.requireSetHoldCoinAmount(store, s.addr5, s.bondDenom, s.int(s.initAmount+5000)) }, time: endTime.Add(1 * time.Second), @@ -256,7 +260,7 @@ func (s *TestSuite) TestHoldAccountBalancesInvariantHelper() { }, { name: "vesting account has lock on everything after time zero", - setup: func(s *TestSuite, store sdk.KVStore) { + setup: func(s *TestSuite, store storetypes.KVStore) { s.requireSetHoldCoinAmount(store, s.addr5, s.bondDenom, s.int(s.initAmount+5000)) }, time: zeroTime, @@ -272,7 +276,7 @@ func (s *TestSuite) TestHoldAccountBalancesInvariantHelper() { tc.setup(s, s.getStore()) } - ctx := s.sdkCtx.WithBlockTime(tc.time) + ctx := s.ctx.WithBlockTime(tc.time) var msg string var broken bool testFunc := func() { diff --git a/x/hold/keeper/keeper.go b/x/hold/keeper/keeper.go index 05bdcf7b30..e7dd89d263 100644 --- a/x/hold/keeper/keeper.go +++ b/x/hold/keeper/keeper.go @@ -5,10 +5,10 @@ import ( "fmt" sdkmath "cosmossdk.io/math" + "cosmossdk.io/store/prefix" + storetypes "cosmossdk.io/store/types" "github.com/cosmos/cosmos-sdk/codec" - "github.com/cosmos/cosmos-sdk/store/prefix" - storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/provenance-io/provenance/x/hold" @@ -27,14 +27,14 @@ func NewKeeper(cdc codec.BinaryCodec, storeKey storetypes.StoreKey, bankKeeper h storeKey: storeKey, bankKeeper: bankKeeper, } - bankKeeper.AppendLockedCoinsGetter(rv.GetLockedCoins) + // bankKeeper.AppendLockedCoinsGetter(rv.GetLockedCoins) // TODO[1760]: locked-coins return rv } // setHoldCoinAmount updates the store with the provided hold info. // If the amount is zero, the hold coin entry for addr+denom is deleted. // Otherwise, the hold coin entry for addr+denom is created/updated in the provided amount. -func (k Keeper) setHoldCoinAmount(store sdk.KVStore, addr sdk.AccAddress, denom string, amount sdkmath.Int) error { +func (k Keeper) setHoldCoinAmount(store storetypes.KVStore, addr sdk.AccAddress, denom string, amount sdkmath.Int) error { if len(denom) == 0 { return fmt.Errorf("cannot store hold with an empty denom for %s", addr) } @@ -57,7 +57,7 @@ func (k Keeper) setHoldCoinAmount(store sdk.KVStore, addr sdk.AccAddress, denom } // getHoldCoinAmount gets (from the store) the amount marked as on hold for the given address and denom. -func (k Keeper) getHoldCoinAmount(store sdk.KVStore, addr sdk.AccAddress, denom string) (sdkmath.Int, error) { +func (k Keeper) getHoldCoinAmount(store storetypes.KVStore, addr sdk.AccAddress, denom string) (sdkmath.Int, error) { key := CreateHoldCoinKey(addr, denom) amountBz := store.Get(key) return UnmarshalHoldCoinValue(amountBz) @@ -202,7 +202,7 @@ func (k Keeper) GetHoldCoins(ctx sdk.Context, addr sdk.AccAddress) (sdk.Coins, e } // getHoldCoinPrefixStore returns a kv store prefixed for hold coin entries for the provided address. -func (k Keeper) getHoldCoinPrefixStore(ctx sdk.Context, addr sdk.AccAddress) sdk.KVStore { +func (k Keeper) getHoldCoinPrefixStore(ctx sdk.Context, addr sdk.AccAddress) storetypes.KVStore { pre := CreateHoldCoinKeyAddrPrefix(addr) return prefix.NewStore(ctx.KVStore(k.storeKey), pre) } @@ -238,7 +238,7 @@ func (k Keeper) IterateHolds(ctx sdk.Context, addr sdk.AccAddress, process func( } // getAllHoldCoinPrefixStore returns a kv store prefixed for all hold coin entries. -func (k Keeper) getAllHoldCoinPrefixStore(ctx sdk.Context) sdk.KVStore { +func (k Keeper) getAllHoldCoinPrefixStore(ctx sdk.Context) storetypes.KVStore { return prefix.NewStore(ctx.KVStore(k.storeKey), KeyPrefixHoldCoin) } diff --git a/x/hold/keeper/keeper_test.go b/x/hold/keeper/keeper_test.go index fd37d32570..08e21baf0f 100644 --- a/x/hold/keeper/keeper_test.go +++ b/x/hold/keeper/keeper_test.go @@ -1,7 +1,6 @@ package keeper_test import ( - "context" "fmt" "sort" "strings" @@ -9,11 +8,9 @@ import ( "time" "github.com/stretchr/testify/suite" - "golang.org/x/exp/maps" - - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" sdkmath "cosmossdk.io/math" + storetypes "cosmossdk.io/store/types" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" @@ -22,6 +19,7 @@ import ( "github.com/cosmos/cosmos-sdk/x/bank/testutil" "github.com/provenance-io/provenance/app" + "github.com/provenance-io/provenance/internal/helpers" "github.com/provenance-io/provenance/testutil/assertions" "github.com/provenance-io/provenance/x/hold" "github.com/provenance-io/provenance/x/hold/keeper" @@ -31,8 +29,7 @@ type TestSuite struct { suite.Suite app *app.App - sdkCtx sdk.Context - stdlibCtx context.Context + ctx sdk.Context keeper keeper.Keeper bankKeeper bankkeeper.Keeper @@ -49,16 +46,18 @@ type TestSuite struct { func (s *TestSuite) SetupTest() { s.app = app.Setup(s.T()) - s.sdkCtx = s.app.BaseApp.NewContext(false, tmproto.Header{}) - s.stdlibCtx = sdk.WrapSDKContext(s.sdkCtx) + s.ctx = s.app.BaseApp.NewContext(false) s.keeper = s.app.HoldKeeper s.bankKeeper = s.app.BankKeeper - s.bondDenom = s.app.StakingKeeper.BondDenom(s.sdkCtx) + var err error + s.bondDenom, err = s.app.StakingKeeper.BondDenom(s.ctx) + s.Require().NoError(err, "app.StakingKeeper.BondDenom(s.ctx)") + s.initAmount = 1_000_000_000 - s.initBal = sdk.NewCoins(sdk.NewCoin(s.bondDenom, sdk.NewInt(s.initAmount))) + s.initBal = sdk.NewCoins(sdk.NewCoin(s.bondDenom, sdkmath.NewInt(s.initAmount))) - addrs := app.AddTestAddrsIncremental(s.app, s.sdkCtx, 5, sdk.NewInt(s.initAmount)) + addrs := app.AddTestAddrsIncremental(s.app, s.ctx, 5, sdkmath.NewInt(s.initAmount)) s.addr1 = addrs[0] s.addr2 = addrs[1] s.addr3 = addrs[2] @@ -141,26 +140,26 @@ func (s *TestSuite) getAddrName(addr sdk.AccAddress) string { } // getStore returns the hold state store. -func (s *TestSuite) getStore() sdk.KVStore { - return s.sdkCtx.KVStore(s.keeper.GetStoreKey()) +func (s *TestSuite) getStore() storetypes.KVStore { + return s.ctx.KVStore(s.keeper.GetStoreKey()) } // requireSetHoldCoinAmount calls setHoldCoinAmount making sure it doesn't panic or return an error. -func (s *TestSuite) requireSetHoldCoinAmount(store sdk.KVStore, addr sdk.AccAddress, denom string, amount sdkmath.Int) { +func (s *TestSuite) requireSetHoldCoinAmount(store storetypes.KVStore, addr sdk.AccAddress, denom string, amount sdkmath.Int) { assertions.RequireNotPanicsNoErrorf(s.T(), func() error { return s.keeper.SetHoldCoinAmount(store, addr, denom, amount) }, "setHoldCoinAmount(%s, %s%s)", s.getAddrName(addr), amount, denom) } // setHoldCoinAmountRaw sets a hold coin amount to the provided "amount" string. -func (s *TestSuite) setHoldCoinAmountRaw(store sdk.KVStore, addr sdk.AccAddress, denom string, amount string) { +func (s *TestSuite) setHoldCoinAmountRaw(store storetypes.KVStore, addr sdk.AccAddress, denom string, amount string) { store.Set(keeper.CreateHoldCoinKey(addr, denom), []byte(amount)) } // requireFundAccount calls testutil.FundAccount, making sure it doesn't panic or return an error. func (s *TestSuite) requireFundAccount(addr sdk.AccAddress, coins string) { assertions.RequireNotPanicsNoErrorf(s.T(), func() error { - return testutil.FundAccount(s.app.BankKeeper, s.sdkCtx, addr, s.coins(coins)) + return testutil.FundAccount(s.ctx, s.app.BankKeeper, addr, s.coins(coins)) }, "FundAccount(%s, %q)", s.getAddrName(addr), coins) } @@ -225,7 +224,7 @@ func (s *TestSuite) TestSetHoldCoinAmount() { } tests := []struct { name string - setupStore func(sdk.KVStore) + setupStore func(storetypes.KVStore) addr sdk.AccAddress denom string amount sdkmath.Int @@ -241,7 +240,7 @@ func (s *TestSuite) TestSetHoldCoinAmount() { }, { name: "addr has none of this denom but one of another", - setupStore: func(store sdk.KVStore) { + setupStore: func(store storetypes.KVStore) { s.requireSetHoldCoinAmount(store, s.addr1, "bag", s.int(3)) }, addr: s.addr1, @@ -254,7 +253,7 @@ func (s *TestSuite) TestSetHoldCoinAmount() { }, { name: "another addr has the same denom", - setupStore: func(store sdk.KVStore) { + setupStore: func(store storetypes.KVStore) { s.requireSetHoldCoinAmount(store, s.addr2, "banana", s.int(88)) }, addr: s.addr1, @@ -267,7 +266,7 @@ func (s *TestSuite) TestSetHoldCoinAmount() { }, { name: "update existing entry", - setupStore: func(store sdk.KVStore) { + setupStore: func(store storetypes.KVStore) { s.requireSetHoldCoinAmount(store, s.addr1, "eclair", s.int(3)) s.requireSetHoldCoinAmount(store, s.addr2, "eclair", s.int(500)) }, @@ -281,7 +280,7 @@ func (s *TestSuite) TestSetHoldCoinAmount() { }, { name: "delete existing entry", - setupStore: func(store sdk.KVStore) { + setupStore: func(store storetypes.KVStore) { s.requireSetHoldCoinAmount(store, s.addr1, "blanket", s.int(12)) s.requireSetHoldCoinAmount(store, s.addr2, "blanket", s.int(44)) }, @@ -294,7 +293,7 @@ func (s *TestSuite) TestSetHoldCoinAmount() { }, { name: "zero amount without an existing entry", - setupStore: func(store sdk.KVStore) { + setupStore: func(store storetypes.KVStore) { s.requireSetHoldCoinAmount(store, s.addr2, "blanket", s.int(44)) }, addr: s.addr1, @@ -446,7 +445,7 @@ func (s *TestSuite) TestKeeper_ValidateNewHold() { var err error testFunc := func() { - err = k.ValidateNewHold(s.sdkCtx, tc.addr, tc.funds) + err = k.ValidateNewHold(s.ctx, tc.addr, tc.funds) } s.Require().NotPanics(testFunc, "ValidateNewHold") s.assertErrorContents(err, tc.expErr, "ValidateNewHold") @@ -641,7 +640,7 @@ func (s *TestSuite) TestKeeper_AddHold() { k := s.keeper.WithBankKeeper(bk) em := sdk.NewEventManager() - ctx := s.sdkCtx.WithEventManager(em) + ctx := s.ctx.WithEventManager(em) var err error testFunc := func() { err = k.AddHold(ctx, tc.addr, tc.funds, tc.name) @@ -650,7 +649,7 @@ func (s *TestSuite) TestKeeper_AddHold() { s.assertErrorContents(err, tc.expErr, "AddHold error") - finalHold, _ := k.GetHoldCoins(s.sdkCtx, tc.addr) + finalHold, _ := k.GetHoldCoins(s.ctx, tc.addr) s.Assert().Equal(tc.finalHold.String(), finalHold.String(), "final hold") events := em.Events() @@ -828,7 +827,7 @@ func (s *TestSuite) TestKeeper_ReleaseHold() { } em := sdk.NewEventManager() - ctx := s.sdkCtx.WithEventManager(em) + ctx := s.ctx.WithEventManager(em) var err error testFunc := func() { err = s.keeper.ReleaseHold(ctx, tc.addr, tc.funds) @@ -837,7 +836,7 @@ func (s *TestSuite) TestKeeper_ReleaseHold() { s.assertErrorContents(err, tc.expErr, "ReleaseHold error") - finalHold, _ := s.keeper.GetHoldCoins(s.sdkCtx, tc.addr) + finalHold, _ := s.keeper.GetHoldCoins(s.ctx, tc.addr) s.Assert().Equal(tc.finalHold.String(), finalHold.String(), "final hold") events := em.Events() @@ -911,7 +910,7 @@ func (s *TestSuite) TestKeeper_GetHoldCoin() { var coin sdk.Coin var err error testFunc := func() { - coin, err = s.keeper.GetHoldCoin(s.sdkCtx, tc.addr, tc.denom) + coin, err = s.keeper.GetHoldCoin(s.ctx, tc.addr, tc.denom) } s.Require().NotPanics(testFunc, "GetHoldCoin") s.assertErrorContents(err, tc.expErr, "GetHoldCoin error") @@ -982,7 +981,7 @@ func (s *TestSuite) TestKeeper_GetHoldCoins() { var coins sdk.Coins var err error testFunc := func() { - coins, err = s.keeper.GetHoldCoins(s.sdkCtx, tc.addr) + coins, err = s.keeper.GetHoldCoins(s.ctx, tc.addr) } s.Require().NotPanics(testFunc, "GetHoldCoins") s.assertErrorContents(err, tc.expErr, "GetHoldCoins error") @@ -1119,7 +1118,7 @@ func (s *TestSuite) TestKeeper_IterateHolds() { processed = nil var err error testFunc := func() { - err = s.keeper.IterateHolds(s.sdkCtx, tc.addr, tc.process) + err = s.keeper.IterateHolds(s.ctx, tc.addr, tc.process) } s.Require().NotPanics(testFunc, "IterateHolds") s.assertErrorContents(err, tc.expErr, "IterateHolds error") @@ -1250,7 +1249,7 @@ func (s *TestSuite) TestKeeper_IterateAllHolds() { processed = nil var err error testFunc := func() { - err = s.keeper.IterateAllHolds(s.sdkCtx, tc.process) + err = s.keeper.IterateAllHolds(s.ctx, tc.process) } s.Require().NotPanics(testFunc, "IterateAllHolds") s.assertErrorContents(err, tc.expErr, "IterateAllHolds error") @@ -1287,7 +1286,7 @@ func (s *TestSuite) TestKeeper_GetAllAccountHolds() { } s.Run("no bad entries", func() { - holds, err := s.keeper.GetAllAccountHolds(s.sdkCtx) + holds, err := s.keeper.GetAllAccountHolds(s.ctx) s.Assert().NoError(err, "GetAllAccountHolds error") s.Assert().Equal(expected, holds, "GetAllAccountHolds holds") }) @@ -1310,7 +1309,7 @@ func (s *TestSuite) TestKeeper_GetAllAccountHolds() { "math/big: cannot unmarshal \"dreadvalue\" into a *big.Int", } - holds, err := s.keeper.GetAllAccountHolds(s.sdkCtx) + holds, err := s.keeper.GetAllAccountHolds(s.ctx) s.assertErrorContents(err, expInErr, "GetAllAccountHolds error") s.Assert().Equal(expected, holds, "GetAllAccountHolds holds") }) @@ -1408,9 +1407,10 @@ func (s *TestSuite) TestVestingAndHoldOverTime() { originalVesting := coins(totalSeconds) startTime := time.Unix(0, 0) endTime := startTime.Add(totalDur) - ctx := s.sdkCtx.WithBlockTime(startTime) + ctx := s.ctx.WithBlockTime(startTime) baseAcc := s.app.AccountKeeper.NewAccountWithAddress(ctx, addr).(*authtypes.BaseAccount) - cva := vesting.NewContinuousVestingAccount(baseAcc, originalVesting, startTime.Unix(), endTime.Unix()) + cva, err := vesting.NewContinuousVestingAccount(baseAcc, originalVesting, startTime.Unix(), endTime.Unix()) + s.Require().NoError(err, "NewContinuousVestingAccount") s.app.AccountKeeper.SetAccount(ctx, cva) s.requireFundAccount(addr, originalVesting.String()) @@ -1529,7 +1529,7 @@ func (s *TestSuite) TestVestingAndHoldOverTime() { } // Put all the step values in order. - steps := maps.Keys(stepsMap) + steps := helpers.Keys(stepsMap) sort.Slice(steps, func(i, j int) bool { return steps[i] < steps[j] }) @@ -1542,7 +1542,7 @@ func (s *TestSuite) TestVestingAndHoldOverTime() { assertions.RequireNotPanicsNoErrorf(s.T(), f, "%4ds: "+msg, append([]interface{}{step}, args...)...) } blockTime := startTime.Add(time.Duration(step) * time.Second) - ctx = s.sdkCtx.WithBlockTime(blockTime) + ctx = s.ctx.WithBlockTime(blockTime) action := process[step].action @@ -1551,7 +1551,7 @@ func (s *TestSuite) TestVestingAndHoldOverTime() { amt := coins(action.fund) logf(step, "Adding funds: %s", amtOf(amt)) reqNoPanicNoErr(func() error { - return testutil.FundAccount(s.app.BankKeeper, s.sdkCtx, addr, amt) + return testutil.FundAccount(s.ctx, s.app.BankKeeper, addr, amt) }, "FundAccount(addr, %q)", amt) } if action.delegate < 0 { @@ -1599,13 +1599,13 @@ func (s *TestSuite) TestVestingAndHoldOverTime() { }, "casting addr account to %T", acc) stepResults[i] = &stepResult{ - step: step, - balance: s.app.BankKeeper.GetAllBalances(ctx, addr), - delegated: s.app.BankKeeper.GetAllBalances(ctx, modAddr), - spendable: s.app.BankKeeper.SpendableCoins(ctx, addr), - locked: s.app.BankKeeper.LockedCoins(ctx, addr), - lockedHold: s.keeper.GetLockedCoins(ctx, addr), - lockedVest: s.app.BankKeeper.UnvestedCoins(ctx, addr), + step: step, + balance: s.app.BankKeeper.GetAllBalances(ctx, addr), + delegated: s.app.BankKeeper.GetAllBalances(ctx, modAddr), + spendable: s.app.BankKeeper.SpendableCoins(ctx, addr), + locked: s.app.BankKeeper.LockedCoins(ctx, addr), + lockedHold: s.keeper.GetLockedCoins(ctx, addr), + // lockedVest: s.app.BankKeeper.UnvestedCoins(ctx, addr), TODO[1760]: locked-coins accVesting: acc.GetVestingCoins(blockTime), accVested: acc.GetVestedCoins(blockTime), accDelegatedVesting: acc.GetDelegatedVesting(), diff --git a/x/hold/keeper/locked_coins.go b/x/hold/keeper/locked_coins.go index 9c1969a4be..ea84dd56a7 100644 --- a/x/hold/keeper/locked_coins.go +++ b/x/hold/keeper/locked_coins.go @@ -2,12 +2,12 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" - banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + // banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" // TODO[1760]: locked-coins "github.com/provenance-io/provenance/x/hold" ) -var _ banktypes.GetLockedCoinsFn = Keeper{}.GetLockedCoins +// var _ banktypes.GetLockedCoinsFn = Keeper{}.GetLockedCoins // TODO[1760]: locked-coins // GetLockedCoins gets all the coins that are on hold for the given address. func (k Keeper) GetLockedCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins { diff --git a/x/hold/keeper/locked_coins_test.go b/x/hold/keeper/locked_coins_test.go index c56d9c243e..d7a03d06e4 100644 --- a/x/hold/keeper/locked_coins_test.go +++ b/x/hold/keeper/locked_coins_test.go @@ -32,25 +32,25 @@ func (s *TestSuite) TestKeeper_GetLockedCoins() { }{ { name: "no coins on hold", - ctx: s.sdkCtx, + ctx: s.ctx, addr: addrNoHold, expCoins: nil, }, { name: "some coins on hold", - ctx: s.sdkCtx, + ctx: s.ctx, addr: addrWithHolds, expCoins: s.coins("12acorn,99banana"), }, { name: "with bypass: some coins on hold", - ctx: hold.WithBypass(s.sdkCtx), + ctx: hold.WithBypass(s.ctx), addr: addrWithHolds, expCoins: nil, }, { name: "error getting hold coins", - ctx: s.sdkCtx, + ctx: s.ctx, addr: addrWithBadHold, expPanic: []string{ "failed to read amount of badcoin", addrWithBadHold.String(), @@ -59,7 +59,7 @@ func (s *TestSuite) TestKeeper_GetLockedCoins() { }, { name: "with bypass: error getting hold coins", - ctx: hold.WithBypass(s.sdkCtx), + ctx: hold.WithBypass(s.ctx), addr: addrWithBadHold, expCoins: nil, }, @@ -86,11 +86,12 @@ func (s *TestSuite) TestBank_LockedCoins() { addrVestingAndHolds := sdk.AccAddress("addrVestingAndHolds_") addrWithBadHold := sdk.AccAddress("addrWithBadHold_____") - vestingAccount := vestingtypes.NewPermanentLockedAccount( - s.app.AccountKeeper.NewAccountWithAddress(s.sdkCtx, addrVestingAndHolds).(*authtypes.BaseAccount), + vestingAccount, err := vestingtypes.NewPermanentLockedAccount( + s.app.AccountKeeper.NewAccountWithAddress(s.ctx, addrVestingAndHolds).(*authtypes.BaseAccount), s.coins("100vestcoin"), ) - s.app.AccountKeeper.SetAccount(s.sdkCtx, vestingAccount) + s.Require().NoError(err, "NewPermanentLockedAccount addrVestingAndHolds") + s.app.AccountKeeper.SetAccount(s.ctx, vestingAccount) s.requireFundAccount(addrNoHold, "100acorn,100banana,100badcoin") s.requireFundAccount(addrWithHolds, "100acorn,100banana,100badcoin") s.requireFundAccount(addrWithBadHold, "100acorn,100banana,100badcoin") @@ -112,25 +113,25 @@ func (s *TestSuite) TestBank_LockedCoins() { }{ { name: "no coins on hold", - ctx: s.sdkCtx, + ctx: s.ctx, addr: addrNoHold, expCoins: nil, }, { name: "some coins on hold", - ctx: s.sdkCtx, + ctx: s.ctx, addr: addrWithHolds, expCoins: s.coins("12acorn,99banana"), }, { name: "with bypass: some coins on hold", - ctx: hold.WithBypass(s.sdkCtx), + ctx: hold.WithBypass(s.ctx), addr: addrWithHolds, expCoins: nil, }, { name: "error getting hold coins", - ctx: s.sdkCtx, + ctx: s.ctx, addr: addrWithBadHold, expPanic: []string{ "failed to read amount of badcoin", addrWithBadHold.String(), @@ -139,19 +140,19 @@ func (s *TestSuite) TestBank_LockedCoins() { }, { name: "with bypass: error getting hold coins", - ctx: hold.WithBypass(s.sdkCtx), + ctx: hold.WithBypass(s.ctx), addr: addrWithBadHold, expCoins: nil, }, { name: "vesting and holds", - ctx: s.sdkCtx, + ctx: s.ctx, addr: addrVestingAndHolds, expCoins: s.coins("8banana,100vestcoin"), }, { name: "with bypass: vesting and holds", - ctx: hold.WithBypass(s.sdkCtx), + ctx: hold.WithBypass(s.ctx), addr: addrVestingAndHolds, expCoins: s.coins("100vestcoin"), }, @@ -178,11 +179,12 @@ func (s *TestSuite) TestBank_SpendableCoins() { addrVestingAndHolds := sdk.AccAddress("addrVestingAndHolds_") addrWithBadHold := sdk.AccAddress("addrWithBadHold_____") - vestingAccount := vestingtypes.NewPermanentLockedAccount( - s.app.AccountKeeper.NewAccountWithAddress(s.sdkCtx, addrVestingAndHolds).(*authtypes.BaseAccount), + vestingAccount, err := vestingtypes.NewPermanentLockedAccount( + s.app.AccountKeeper.NewAccountWithAddress(s.ctx, addrVestingAndHolds).(*authtypes.BaseAccount), s.coins("100vestcoin"), ) - s.app.AccountKeeper.SetAccount(s.sdkCtx, vestingAccount) + s.Require().NoError(err, "NewPermanentLockedAccount addrVestingAndHolds") + s.app.AccountKeeper.SetAccount(s.ctx, vestingAccount) s.requireFundAccount(addrNoHold, "100acorn,100banana,100badcoin") s.requireFundAccount(addrWithHolds, "100acorn,100banana,100badcoin") s.requireFundAccount(addrWithBadHold, "100acorn,100banana,100badcoin") @@ -204,25 +206,25 @@ func (s *TestSuite) TestBank_SpendableCoins() { }{ { name: "no coins on hold", - ctx: s.sdkCtx, + ctx: s.ctx, addr: addrNoHold, expCoins: s.coins("100acorn,100banana,100badcoin"), }, { name: "some coins on hold", - ctx: s.sdkCtx, + ctx: s.ctx, addr: addrWithHolds, expCoins: s.coins("88acorn,1banana,100badcoin"), }, { name: "with bypass: some coins on hold", - ctx: hold.WithBypass(s.sdkCtx), + ctx: hold.WithBypass(s.ctx), addr: addrWithHolds, expCoins: s.coins("100acorn,100banana,100badcoin"), }, { name: "error getting hold coins", - ctx: s.sdkCtx, + ctx: s.ctx, addr: addrWithBadHold, expPanic: []string{ "failed to read amount of badcoin", addrWithBadHold.String(), @@ -231,19 +233,19 @@ func (s *TestSuite) TestBank_SpendableCoins() { }, { name: "with bypass: error getting hold coins", - ctx: hold.WithBypass(s.sdkCtx), + ctx: hold.WithBypass(s.ctx), addr: addrWithBadHold, expCoins: s.coins("100acorn,100banana,100badcoin"), }, { name: "vesting and holds", - ctx: s.sdkCtx, + ctx: s.ctx, addr: addrVestingAndHolds, expCoins: s.coins("100acorn,92banana,100badcoin"), }, { name: "with bypass: vesting and holds", - ctx: hold.WithBypass(s.sdkCtx), + ctx: hold.WithBypass(s.ctx), addr: addrVestingAndHolds, expCoins: s.coins("100acorn,100banana,100badcoin"), }, @@ -277,11 +279,11 @@ func (s *TestSuite) TestBank_Send() { store = nil s.Run("send less than balance but more than spendable", func() { - err := s.bankKeeper.SendCoins(s.sdkCtx, fromAddr, toAddr, s.coins("5banana")) + err := s.bankKeeper.SendCoins(s.ctx, fromAddr, toAddr, s.coins("5banana")) s.Assert().EqualError(err, "spendable balance 1banana is smaller than 5banana: insufficient funds", "SendCoins error") - fromBal := s.bankKeeper.GetAllBalances(s.sdkCtx, fromAddr) + fromBal := s.bankKeeper.GetAllBalances(s.ctx, fromAddr) s.Assert().Equal("100acorn,100banana,100coolcoin", fromBal.String(), "GetAllBalances(fromAddr)") - toBal := s.bankKeeper.GetAllBalances(s.sdkCtx, toAddr) + toBal := s.bankKeeper.GetAllBalances(s.ctx, toAddr) s.Assert().Equal("", toBal.String(), "GetAllBalances(toAddr)") }) @@ -290,23 +292,23 @@ func (s *TestSuite) TestBank_Send() { // It's better to release the hold first, then do a send coins without any bypass. // But for this test, I want to see that the bypass is being passed on as expected. - ctx := hold.WithBypass(s.sdkCtx) + ctx := hold.WithBypass(s.ctx) err := s.bankKeeper.SendCoins(ctx, fromAddr, toAddr, s.coins("5banana")) s.Assert().NoError(err, "SendCoins error") - err = s.keeper.ReleaseHold(s.sdkCtx, fromAddr, s.coins("4banana")) + err = s.keeper.ReleaseHold(s.ctx, fromAddr, s.coins("4banana")) s.Assert().NoError(err, "ReleaseHold error") - fromBal := s.bankKeeper.GetAllBalances(s.sdkCtx, fromAddr) + fromBal := s.bankKeeper.GetAllBalances(s.ctx, fromAddr) s.Assert().Equal("100acorn,95banana,100coolcoin", fromBal.String(), "GetAllBalances(fromAddr)") - toBal := s.bankKeeper.GetAllBalances(s.sdkCtx, toAddr) + toBal := s.bankKeeper.GetAllBalances(s.ctx, toAddr) s.Assert().Equal("5banana", toBal.String(), "GetAllBalances(toAddr)") }) s.Run("send exactly spendable", func() { - err := s.bankKeeper.SendCoins(s.sdkCtx, fromAddr, toAddr, s.coins("88acorn")) + err := s.bankKeeper.SendCoins(s.ctx, fromAddr, toAddr, s.coins("88acorn")) s.Assert().NoError(err, "SendCoins error") - fromBal := s.bankKeeper.GetAllBalances(s.sdkCtx, fromAddr) + fromBal := s.bankKeeper.GetAllBalances(s.ctx, fromAddr) s.Assert().Equal(s.coins("12acorn,95banana,100coolcoin").String(), fromBal.String(), "GetAllBalances(fromAddr)") - toBal := s.bankKeeper.GetAllBalances(s.sdkCtx, toAddr) + toBal := s.bankKeeper.GetAllBalances(s.ctx, toAddr) s.Assert().Equal("88acorn,5banana", toBal.String(), "GetAllBalances(toAddr)") }) } diff --git a/x/hold/keeper/mock_keepers_test.go b/x/hold/keeper/mock_keepers_test.go index d4b50c89db..497fad6cc5 100644 --- a/x/hold/keeper/mock_keepers_test.go +++ b/x/hold/keeper/mock_keepers_test.go @@ -1,8 +1,10 @@ package keeper_test import ( + "context" + sdk "github.com/cosmos/cosmos-sdk/types" - banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + // banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" // TODO[1760]: locked-coins "github.com/provenance-io/provenance/x/hold" ) @@ -26,10 +28,11 @@ func (k *MockBankKeeper) WithSpendable(addr sdk.AccAddress, amount sdk.Coins) *M return k } -func (k *MockBankKeeper) AppendLockedCoinsGetter(_ banktypes.GetLockedCoinsFn) { - // Do nothing. -} +// TODO[1760]: locked-coins +// func (k *MockBankKeeper) AppendLockedCoinsGetter(_ banktypes.GetLockedCoinsFn) { +// // Do nothing. +// } -func (k *MockBankKeeper) SpendableCoins(_ sdk.Context, addr sdk.AccAddress) sdk.Coins { +func (k *MockBankKeeper) SpendableCoins(_ context.Context, addr sdk.AccAddress) sdk.Coins { return k.Spendable[string(addr)] } diff --git a/x/hold/locked_coins_test.go b/x/hold/locked_coins_test.go index 3f4a3c66d1..3efcca2dfd 100644 --- a/x/hold/locked_coins_test.go +++ b/x/hold/locked_coins_test.go @@ -5,8 +5,9 @@ import ( "github.com/stretchr/testify/assert" + cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" + sdk "github.com/cosmos/cosmos-sdk/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" ) func TestSendRestrictionContextFuncs(t *testing.T) { @@ -17,37 +18,37 @@ func TestSendRestrictionContextFuncs(t *testing.T) { }{ { name: "brand new mostly empty context", - ctx: sdk.NewContext(nil, tmproto.Header{}, false, nil), + ctx: sdk.NewContext(nil, cmtproto.Header{}, false, nil), exp: false, }, { name: "context with bypass", - ctx: WithBypass(sdk.NewContext(nil, tmproto.Header{}, false, nil)), + ctx: WithBypass(sdk.NewContext(nil, cmtproto.Header{}, false, nil)), exp: true, }, { name: "context with bypass on one that originally was without it", - ctx: WithBypass(WithoutBypass(sdk.NewContext(nil, tmproto.Header{}, false, nil))), + ctx: WithBypass(WithoutBypass(sdk.NewContext(nil, cmtproto.Header{}, false, nil))), exp: true, }, { name: "context with bypass twice", - ctx: WithBypass(WithBypass(sdk.NewContext(nil, tmproto.Header{}, false, nil))), + ctx: WithBypass(WithBypass(sdk.NewContext(nil, cmtproto.Header{}, false, nil))), exp: true, }, { name: "context without bypass", - ctx: WithoutBypass(sdk.NewContext(nil, tmproto.Header{}, false, nil)), + ctx: WithoutBypass(sdk.NewContext(nil, cmtproto.Header{}, false, nil)), exp: false, }, { name: "context without bypass on one that originally had it", - ctx: WithoutBypass(WithBypass(sdk.NewContext(nil, tmproto.Header{}, false, nil))), + ctx: WithoutBypass(WithBypass(sdk.NewContext(nil, cmtproto.Header{}, false, nil))), exp: false, }, { name: "context without bypass twice", - ctx: WithoutBypass(WithoutBypass(sdk.NewContext(nil, tmproto.Header{}, false, nil))), + ctx: WithoutBypass(WithoutBypass(sdk.NewContext(nil, cmtproto.Header{}, false, nil))), exp: false, }, } @@ -61,7 +62,7 @@ func TestSendRestrictionContextFuncs(t *testing.T) { } func TestContextFuncsDoNotModifyProvided(t *testing.T) { - origCtx := sdk.NewContext(nil, tmproto.Header{}, false, nil) + origCtx := sdk.NewContext(nil, cmtproto.Header{}, false, nil) assert.False(t, HasBypass(origCtx), "HasBypass(origCtx)") afterWith := WithBypass(origCtx) assert.True(t, HasBypass(afterWith), "HasBypass(afterWith)") diff --git a/x/hold/module/module.go b/x/hold/module/module.go index af49a69bbc..404e7dcc47 100644 --- a/x/hold/module/module.go +++ b/x/hold/module/module.go @@ -9,7 +9,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" - abci "github.com/tendermint/tendermint/abci/types" + abci "github.com/cometbft/cometbft/abci/types" sdkclient "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" @@ -28,6 +28,7 @@ var ( _ module.AppModule = AppModule{} _ module.AppModuleBasic = AppModuleBasic{} _ module.AppModuleSimulation = AppModule{} + // TODO[1760]: app-module: Add more assertions for the new types and clean up stuff no longer needed. ) type AppModule struct { @@ -42,6 +43,12 @@ func NewAppModule(cdc codec.Codec, holdKeeper keeper.Keeper) AppModule { } } +// IsOnePerModuleType is a dummy function that satisfies the OnePerModuleType interface (needed by AppModule). +func (AppModule) IsOnePerModuleType() {} + +// IsAppModule is a dummy function that satisfies the AppModule interface. +func (AppModule) IsAppModule() {} + type AppModuleBasic struct { cdc codec.Codec } @@ -92,15 +99,6 @@ func (am AppModule) RegisterInvariants(ir sdk.InvariantRegistry) { keeper.RegisterInvariants(ir, am.keeper) } -// Deprecated: Route returns the message routing key for the hold module, empty. -func (am AppModule) Route() sdk.Route { return sdk.Route{} } - -// Deprecated: QuerierRoute returns the route we respond to for abci queries, "". -func (AppModule) QuerierRoute() string { return "" } - -// Deprecated: LegacyQuerierHandler returns the hold module sdk.Querier (nil). -func (am AppModule) LegacyQuerierHandler(_ *codec.LegacyAmino) sdk.Querier { return nil } - // InitGenesis performs genesis initialization for the hold module. It returns // no validator updates. func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) []abci.ValidatorUpdate { @@ -141,10 +139,10 @@ func (am AppModule) ProposalContents(_ module.SimulationState) []simtypes.Weight // RandomizedParams returns randomized hold param changes for the simulator, // of which there are none since this module doesn't use the params module. -func (AppModule) RandomizedParams(_ *rand.Rand) []simtypes.ParamChange { return nil } +func (AppModule) RandomizedParams(_ *rand.Rand) []simtypes.LegacyParamChange { return nil } // RegisterStoreDecoder registers a decoder for hold module's types -func (am AppModule) RegisterStoreDecoder(sdr sdk.StoreDecoderRegistry) { +func (am AppModule) RegisterStoreDecoder(sdr simtypes.StoreDecoderRegistry) { sdr[hold.StoreKey] = simulation.NewDecodeStore(am.cdc) } diff --git a/x/hold/simulation/decoder_test.go b/x/hold/simulation/decoder_test.go index 2acc8c9500..4dd0707018 100644 --- a/x/hold/simulation/decoder_test.go +++ b/x/hold/simulation/decoder_test.go @@ -5,17 +5,18 @@ import ( "github.com/stretchr/testify/assert" - "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/kv" + moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" "github.com/provenance-io/provenance/testutil/assertions" "github.com/provenance-io/provenance/x/hold/keeper" + holdmodule "github.com/provenance-io/provenance/x/hold/module" "github.com/provenance-io/provenance/x/hold/simulation" ) func TestDecodeStore(t *testing.T) { - cdc := simapp.MakeTestEncodingConfig().Codec + cdc := moduletestutil.MakeTestEncodingConfig(holdmodule.AppModuleBasic{}).Codec dec := simulation.NewDecodeStore(cdc) addr0 := sdk.AccAddress("addr0_______________") diff --git a/x/hold/simulation/genesis.go b/x/hold/simulation/genesis.go index b08681887a..c5aad244b4 100644 --- a/x/hold/simulation/genesis.go +++ b/x/hold/simulation/genesis.go @@ -85,7 +85,7 @@ func RandomizedGenState(simState *module.SimulationState) { holdGenState := hold.DefaultGenesisState() simState.AppParams.GetOrGenerate( - simState.Cdc, HoldAccountHolds, &holdGenState.Holds, simState.Rand, + HoldAccountHolds, &holdGenState.Holds, simState.Rand, func(r *rand.Rand) { holdGenState.Holds = RandomAccountHolds(r, simState.Accounts) }, diff --git a/x/ibchooks/hooks.go b/x/ibchooks/hooks.go index 6a524a924d..c95a35eb05 100644 --- a/x/ibchooks/hooks.go +++ b/x/ibchooks/hooks.go @@ -2,10 +2,10 @@ package ibchooks import ( sdk "github.com/cosmos/cosmos-sdk/types" - capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - clienttypes "github.com/cosmos/ibc-go/v6/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v6/modules/core/04-channel/types" - ibcexported "github.com/cosmos/ibc-go/v6/modules/core/exported" + capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" "github.com/provenance-io/provenance/x/ibchooks/types" ) diff --git a/x/ibchooks/ibc_hooks.go b/x/ibchooks/ibc_hooks.go index ab2503de73..e7d19e250d 100644 --- a/x/ibchooks/ibc_hooks.go +++ b/x/ibchooks/ibc_hooks.go @@ -3,11 +3,11 @@ package ibchooks import ( "github.com/cosmos/cosmos-sdk/codec" sdktypes "github.com/cosmos/cosmos-sdk/types" - capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - clienttypes "github.com/cosmos/ibc-go/v6/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v6/modules/core/04-channel/types" - ibcexported "github.com/cosmos/ibc-go/v6/modules/core/exported" - ibckeeper "github.com/cosmos/ibc-go/v6/modules/core/keeper" + capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" + ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper" "github.com/provenance-io/provenance/x/ibchooks/keeper" "github.com/provenance-io/provenance/x/ibchooks/types" diff --git a/x/ibchooks/ibc_middleware_test.go b/x/ibchooks/ibc_middleware_test.go index 1c55a7cc39..55269db451 100644 --- a/x/ibchooks/ibc_middleware_test.go +++ b/x/ibchooks/ibc_middleware_test.go @@ -5,6 +5,23 @@ import ( "fmt" "testing" + abci "github.com/cometbft/cometbft/abci/types" + "github.com/stretchr/testify/suite" + + "cosmossdk.io/log" + sdkmath "cosmossdk.io/math" + + dbm "github.com/cosmos/cosmos-db" + "github.com/cosmos/cosmos-sdk/baseapp" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" + sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" + ibctesting "github.com/cosmos/ibc-go/v8/testing" + "github.com/provenance-io/provenance/app" "github.com/provenance-io/provenance/internal/pioconfig" testutil "github.com/provenance-io/provenance/testutil/ibc" @@ -12,22 +29,6 @@ import ( "github.com/provenance-io/provenance/x/ibchooks/keeper" "github.com/provenance-io/provenance/x/marker/types" markertypes "github.com/provenance-io/provenance/x/marker/types" - - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - - "github.com/stretchr/testify/suite" - - "github.com/cosmos/cosmos-sdk/baseapp" - sdk "github.com/cosmos/cosmos-sdk/types" - - sdksim "github.com/cosmos/cosmos-sdk/simapp" - transfertypes "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v6/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v6/modules/core/04-channel/types" - ibcexported "github.com/cosmos/ibc-go/v6/modules/core/exported" - ibctesting "github.com/cosmos/ibc-go/v6/testing" - "github.com/tendermint/tendermint/libs/log" - dbm "github.com/tendermint/tm-db" ) var ( @@ -80,7 +81,7 @@ func SetupSimApp() (ibctesting.TestingApp, map[string]json.RawMessage) { pioconfig.SetProvenanceConfig(sdk.DefaultBondDenom, 0) db := dbm.NewMemDB() encCdc := app.MakeEncodingConfig() - provenanceApp := app.New(log.NewNopLogger(), db, nil, true, map[int64]bool{}, app.DefaultNodeHome, 5, encCdc, sdksim.EmptyAppOptions{}) + provenanceApp := app.New(log.NewNopLogger(), db, nil, true, map[int64]bool{}, app.DefaultNodeHome, 5, encCdc, simtestutil.EmptyAppOptions{}) genesis := app.NewDefaultGenesisState(encCdc.Marshaler) return provenanceApp, genesis } @@ -118,7 +119,7 @@ func NewTransferPath(chainA, chainB *testutil.TestChain) *ibctesting.Path { func (suite *HooksTestSuite) TestOnRecvPacketHooks() { var ( trace transfertypes.DenomTrace - amount sdk.Int + amount sdkmath.Int receiver string status Status ) @@ -148,7 +149,7 @@ func (suite *HooksTestSuite) TestOnRecvPacketHooks() { receiver = suite.chainB.SenderAccount.GetAddress().String() // must be explicitly changed in malleate status = Status{} - amount = sdk.NewInt(100) // must be explicitly changed in malleate + amount = sdkmath.NewInt(100) // must be explicitly changed in malleate seq := uint64(1) trace = transfertypes.ParseDenomTrace(sdk.DefaultBondDenom) @@ -276,7 +277,7 @@ func (suite *HooksTestSuite) TestFundsAreTransferredToTheContract() { // Check that the contract has no funds localDenom := ibchooks.MustExtractDenomFromPacketOnRecv(suite.makeMockPacket("", "", 0)) balance := suite.chainA.GetProvenanceApp().BankKeeper.GetBalance(suite.chainA.GetContext(), addr, localDenom) - suite.Require().Equal(sdk.NewInt(0), balance.Amount) + suite.Require().Equal(sdkmath.NewInt(0), balance.Amount) // Execute the contract via IBC ackBytes := suite.receivePacket(addr.String(), fmt.Sprintf(`{"marker":{},"wasm":{"contract":"%s","msg":{"echo":{"msg":"test"}}}}`, addr)) @@ -290,7 +291,7 @@ func (suite *HooksTestSuite) TestFundsAreTransferredToTheContract() { // Check that the token has now been transferred to the contract balance = suite.chainA.GetProvenanceApp().BankKeeper.GetBalance(suite.chainA.GetContext(), addr, localDenom) - suite.Require().Equal(sdk.NewInt(1), balance.Amount) + suite.Require().Equal(sdkmath.NewInt(1), balance.Amount) } // If the wasm call wails, the contract acknowledgement should be an error and the funds returned @@ -302,7 +303,7 @@ func (suite *HooksTestSuite) TestFundsAreReturnedOnFailedContractExec() { // Check that the contract has no funds localDenom := ibchooks.MustExtractDenomFromPacketOnRecv(suite.makeMockPacket("", "", 0)) balance := suite.chainA.GetProvenanceApp().BankKeeper.GetBalance(suite.chainA.GetContext(), addr, localDenom) - suite.Require().Equal(sdk.NewInt(0), balance.Amount) + suite.Require().Equal(sdkmath.NewInt(0), balance.Amount) // Execute the contract via IBC with a message that the contract will reject ackBytes := suite.receivePacket(addr.String(), fmt.Sprintf(`{"marker":{},"wasm":{"contract":"%s","msg":{"not_echo":{"msg":"test"}}}}`, addr)) @@ -316,7 +317,7 @@ func (suite *HooksTestSuite) TestFundsAreReturnedOnFailedContractExec() { // Check that the token has now been transferred to the contract balance = suite.chainA.GetProvenanceApp().BankKeeper.GetBalance(suite.chainA.GetContext(), addr, localDenom) fmt.Println(balance) - suite.Require().Equal(sdk.NewInt(0), balance.Amount) + suite.Require().Equal(sdkmath.NewInt(0), balance.Amount) } // After successfully executing a wasm call, the contract should have the funds sent via IBC @@ -328,7 +329,7 @@ func (suite *HooksTestSuite) TestFundTracking() { // Check that the contract has no funds localDenom := ibchooks.MustExtractDenomFromPacketOnRecv(suite.makeMockPacket("", "", 0)) balance := suite.chainA.GetProvenanceApp().BankKeeper.GetBalance(suite.chainA.GetContext(), addr, localDenom) - suite.Require().Equal(sdk.NewInt(0), balance.Amount) + suite.Require().Equal(sdkmath.NewInt(0), balance.Amount) memo := fmt.Sprintf(`{"marker":{},"wasm":{"contract":"%s","msg":{"increment":{}}}}`, addr) @@ -366,7 +367,7 @@ func (suite *HooksTestSuite) TestFundTracking() { // Check that the token has now been transferred to the contract balance = suite.chainA.GetProvenanceApp().BankKeeper.GetBalance(suite.chainA.GetContext(), addr, localDenom) - suite.Require().Equal(sdk.NewInt(2), balance.Amount) + suite.Require().Equal(sdkmath.NewInt(2), balance.Amount) } // custom MsgTransfer constructor that supports Memo @@ -404,7 +405,7 @@ func (suite *HooksTestSuite) GetEndpoints(direction Direction) (sender *ibctesti return sender, receiver } -func (suite *HooksTestSuite) RelayPacket(packet channeltypes.Packet, direction Direction) (*sdk.Result, []byte) { +func (suite *HooksTestSuite) RelayPacket(packet channeltypes.Packet, direction Direction) (*abci.ExecTxResult, []byte) { sender, receiver := suite.GetEndpoints(direction) err := receiver.UpdateClient() @@ -429,7 +430,7 @@ func (suite *HooksTestSuite) RelayPacket(packet channeltypes.Packet, direction D return receiveResult, ack } -func (suite *HooksTestSuite) FullSend(msg sdk.Msg, direction Direction) (*sdk.Result, *sdk.Result, string, error) { +func (suite *HooksTestSuite) FullSend(msg sdk.Msg, direction Direction) (*sdk.Result, *abci.ExecTxResult, string, error) { var sender *testutil.TestChain switch direction { case AtoB: @@ -440,7 +441,7 @@ func (suite *HooksTestSuite) FullSend(msg sdk.Msg, direction Direction) (*sdk.Re sendResult, err := sender.SendMsgsNoCheck(msg) suite.Require().NoError(err) - packet, err := ibctesting.ParsePacketFromEvents(sendResult.GetEvents()) + packet, err := ibctesting.ParsePacketFromEvents(sendResult.Events) suite.Require().NoError(err) receiveResult, ack := suite.RelayPacket(packet, direction) @@ -455,7 +456,7 @@ func (suite *HooksTestSuite) TestAcks() { // Generate swap instructions for the contract callbackMemo := fmt.Sprintf(`{"ibc_callback":"%s"}`, addr) // Send IBC transfer with the memo with crosschain-swap instructions - transferMsg := NewMsgTransfer(sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(1000)), suite.chainA.SenderAccount.GetAddress().String(), addr.String(), callbackMemo) + transferMsg := NewMsgTransfer(sdk.NewInt64Coin(sdk.DefaultBondDenom, 1000), suite.chainA.SenderAccount.GetAddress().String(), addr.String(), callbackMemo) suite.FullSend(transferMsg, AtoB) // The test contract will increment the counter for itself every time it receives an ack @@ -478,7 +479,7 @@ func (suite *HooksTestSuite) TestSendWithoutMemo() { chainBSenderAddress := suite.chainB.SenderAccount.GetAddress() // Sending a packet without memo to ensure that the ibc_callback middleware doesn't interfere with a regular send - transferMsg := NewMsgTransfer(sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(1000)), chainASenderAddress.String(), chainBSenderAddress.String(), "") + transferMsg := NewMsgTransfer(sdk.NewInt64Coin(sdk.DefaultBondDenom, 1000), chainASenderAddress.String(), chainBSenderAddress.String(), "") _, _, ack, err := suite.FullSend(transferMsg, AtoB) suite.Require().NoError(err, "FullSend()") suite.Require().Contains(ack, "result") @@ -488,7 +489,7 @@ func (suite *HooksTestSuite) TestSendWithoutMemo() { suite.Require().NoError(err, "GetMarkerByDenom()") suite.Require().Equal(marker.GetDenom(), denom) - transferMsg = NewMsgTransfer(sdk.NewCoin(denom, sdk.NewInt(100)), chainBSenderAddress.String(), chainASenderAddress.String(), "") + transferMsg = NewMsgTransfer(sdk.NewInt64Coin(denom, 100), chainBSenderAddress.String(), chainASenderAddress.String(), "") _, _, ack, err = suite.FullSend(transferMsg, BtoA) suite.Require().NoError(err, "FullSend()") suite.Require().Contains(ack, "result") @@ -520,7 +521,7 @@ func (suite *HooksTestSuite) TestSendWithoutMemo() { err = chainA.MarkerKeeper.WithdrawCoins(suite.chainA.GetContext(), chainASenderAddress, chainASenderAddress, hotdogs, sdk.NewCoins(sdk.NewInt64Coin(hotdogs, 55))) suite.Require().NoError(err, "chainA WithdrawCoins()") - transferMsg = NewMsgTransfer(sdk.NewCoin(hotdogs, sdk.NewInt(55)), chainASenderAddress.String(), chainBSenderAddress.String(), "") + transferMsg = NewMsgTransfer(sdk.NewInt64Coin(hotdogs, 55), chainASenderAddress.String(), chainBSenderAddress.String(), "") _, _, ack, err = suite.FullSend(transferMsg, AtoB) suite.Require().NoError(err, "AtoB FullSend()") suite.Require().Contains(ack, "result", "FullSend() ack check") diff --git a/x/ibchooks/ibc_module.go b/x/ibchooks/ibc_module.go index d2356ee8a2..3d18156459 100644 --- a/x/ibchooks/ibc_module.go +++ b/x/ibchooks/ibc_module.go @@ -2,11 +2,11 @@ package ibchooks import ( sdk "github.com/cosmos/cosmos-sdk/types" - capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - clienttypes "github.com/cosmos/ibc-go/v6/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v6/modules/core/04-channel/types" - porttypes "github.com/cosmos/ibc-go/v6/modules/core/05-port/types" - ibcexported "github.com/cosmos/ibc-go/v6/modules/core/exported" + capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types" + ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" ) var _ porttypes.Middleware = &IBCMiddleware{} diff --git a/x/ibchooks/ics4_middleware.go b/x/ibchooks/ics4_middleware.go index f746767ba4..5d76f774a4 100644 --- a/x/ibchooks/ics4_middleware.go +++ b/x/ibchooks/ics4_middleware.go @@ -2,10 +2,10 @@ package ibchooks import ( sdk "github.com/cosmos/cosmos-sdk/types" - capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - clienttypes "github.com/cosmos/ibc-go/v6/modules/core/02-client/types" - porttypes "github.com/cosmos/ibc-go/v6/modules/core/05-port/types" - ibcexported "github.com/cosmos/ibc-go/v6/modules/core/exported" + capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types" + ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" ) var _ porttypes.ICS4Wrapper = &ICS4Middleware{} diff --git a/x/ibchooks/keeper/keeper.go b/x/ibchooks/keeper/keeper.go index 0b43bfa67f..bde8a4aefa 100644 --- a/x/ibchooks/keeper/keeper.go +++ b/x/ibchooks/keeper/keeper.go @@ -8,16 +8,16 @@ import ( wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" - "github.com/tendermint/tendermint/crypto/tmhash" - "github.com/tendermint/tendermint/libs/log" + "github.com/cometbft/cometbft/crypto/tmhash" sdkerrors "cosmossdk.io/errors" + "cosmossdk.io/log" + storetypes "cosmossdk.io/store/types" - storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/address" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" - channeltypes "github.com/cosmos/ibc-go/v6/modules/core/04-channel/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" "github.com/provenance-io/provenance/x/ibchooks/types" ) diff --git a/x/ibchooks/marker_hooks.go b/x/ibchooks/marker_hooks.go index 57cd9faa00..4dd0f0aa9a 100644 --- a/x/ibchooks/marker_hooks.go +++ b/x/ibchooks/marker_hooks.go @@ -10,10 +10,10 @@ import ( sdktypes "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - transfertypes "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types" - "github.com/cosmos/ibc-go/v6/modules/core/exported" - ibckeeper "github.com/cosmos/ibc-go/v6/modules/core/keeper" - tendermintclient "github.com/cosmos/ibc-go/v6/modules/light-clients/07-tendermint/types" + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + "github.com/cosmos/ibc-go/v8/modules/core/exported" + ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper" + tendermintclient "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" "github.com/provenance-io/provenance/x/ibchooks/types" markerkeeper "github.com/provenance-io/provenance/x/marker/keeper" diff --git a/x/ibchooks/marker_hooks_test.go b/x/ibchooks/marker_hooks_test.go index 70a6b61eb8..3cd54888cc 100644 --- a/x/ibchooks/marker_hooks_test.go +++ b/x/ibchooks/marker_hooks_test.go @@ -18,10 +18,10 @@ import ( "github.com/cosmos/cosmos-sdk/baseapp" sdk "github.com/cosmos/cosmos-sdk/types" - transfertypes "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v6/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v6/modules/core/04-channel/types" - ibctesting "github.com/cosmos/ibc-go/v6/testing" + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + ibctesting "github.com/cosmos/ibc-go/v8/testing" ) type MarkerHooksTestSuite struct { diff --git a/x/ibchooks/module.go b/x/ibchooks/module.go index 22a5a5d901..936bd5650a 100644 --- a/x/ibchooks/module.go +++ b/x/ibchooks/module.go @@ -9,7 +9,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" - abci "github.com/tendermint/tendermint/abci/types" + abci "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" @@ -28,6 +28,7 @@ import ( var ( _ module.AppModule = AppModule{} _ module.AppModuleBasic = AppModuleBasic{} + // TODO[1760]: app-module: Add more assertions for the new types and clean up stuff no longer needed. ) // AppModuleBasic defines the basic application module used by the ibchooks module. @@ -98,6 +99,12 @@ func NewAppModule(ak authkeeper.AccountKeeper, keeper keeper.Keeper) AppModule { } } +// IsOnePerModuleType is a dummy function that satisfies the OnePerModuleType interface (needed by AppModule). +func (AppModule) IsOnePerModuleType() {} + +// IsAppModule is a dummy function that satisfies the AppModule interface. +func (AppModule) IsAppModule() {} + // Name returns the ibchooks module's name. func (AppModule) Name() string { return types.ModuleName @@ -106,21 +113,6 @@ func (AppModule) Name() string { // RegisterInvariants registers the ibchooks module invariants. func (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} -// Route returns the message routing key for the ibchooks module. -func (AppModule) Route() sdk.Route { return sdk.Route{} } - -// QuerierRoute returns the module's querier route name. -func (AppModule) QuerierRoute() string { - return "" -} - -// LegacyQuerierHandler returns the x/ibchooks module's sdk.Querier. -func (am AppModule) LegacyQuerierHandler(_ *codec.LegacyAmino) sdk.Querier { - return func(sdk.Context, []string, abci.RequestQuery) ([]byte, error) { - return nil, fmt.Errorf("legacy querier not supported for the x/%s module", types.ModuleName) - } -} - // RegisterServices registers a gRPC query service to respond to the // module-specific gRPC queries. func (am AppModule) RegisterServices(cfg module.Configurator) { @@ -144,16 +136,6 @@ func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.Raw return cdc.MustMarshalJSON(genState) } -// BeginBlock returns the begin blocker for the ibchooks module. -func (am AppModule) BeginBlock(_ sdk.Context, _ abci.RequestBeginBlock) { -} - -// EndBlock returns the end blocker for the ibchooks module. It returns no validator -// updates. -func (AppModule) EndBlock(_ sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate { - return []abci.ValidatorUpdate{} -} - // ____________________________________________________________________________ // AppModuleSimulation functions @@ -170,12 +152,12 @@ func (am AppModule) ProposalContents(_ module.SimulationState) []simtypes.Weight } // RandomizedParams creates randomized name param changes for the simulator. -func (AppModule) RandomizedParams(_ *rand.Rand) []simtypes.ParamChange { - return []simtypes.ParamChange{} +func (AppModule) RandomizedParams(_ *rand.Rand) []simtypes.LegacyParamChange { + return nil } // RegisterStoreDecoder registers a decoder for name module's types -func (am AppModule) RegisterStoreDecoder(_ sdk.StoreDecoderRegistry) {} +func (am AppModule) RegisterStoreDecoder(_ simtypes.StoreDecoderRegistry) {} // WeightedOperations returns the all the gov module operations with their respective weights. func (am AppModule) WeightedOperations(_ module.SimulationState) []simtypes.WeightedOperation { diff --git a/x/ibchooks/types/codec.go b/x/ibchooks/types/codec.go index e2aa7ca215..cbfe13da49 100644 --- a/x/ibchooks/types/codec.go +++ b/x/ibchooks/types/codec.go @@ -5,7 +5,6 @@ import ( "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/msgservice" - authzcodec "github.com/cosmos/cosmos-sdk/x/authz/codec" ) func RegisterCodec(cdc *codec.LegacyAmino) { @@ -30,7 +29,6 @@ func init() { // Register all Amino interfaces and concrete types on the authz Amino codec so that this can later be // used to properly serialize MsgGrant and MsgExec instances sdk.RegisterLegacyAminoCodec(amino) - RegisterCodec(authzcodec.Amino) amino.Seal() } diff --git a/x/ibchooks/types/expected_keepers.go b/x/ibchooks/types/expected_keepers.go index 071bf93a36..57a29eaceb 100644 --- a/x/ibchooks/types/expected_keepers.go +++ b/x/ibchooks/types/expected_keepers.go @@ -2,9 +2,9 @@ package types import ( sdk "github.com/cosmos/cosmos-sdk/types" - capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - channeltypes "github.com/cosmos/ibc-go/v6/modules/core/04-channel/types" - "github.com/cosmos/ibc-go/v6/modules/core/exported" + capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + "github.com/cosmos/ibc-go/v8/modules/core/exported" ) type ChannelKeeper interface { diff --git a/x/ibchooks/types/types.go b/x/ibchooks/types/types.go index 5fc01c64b7..1caa213fae 100644 --- a/x/ibchooks/types/types.go +++ b/x/ibchooks/types/types.go @@ -4,7 +4,7 @@ import ( "encoding/json" sdk "github.com/cosmos/cosmos-sdk/types" - channeltypes "github.com/cosmos/ibc-go/v6/modules/core/04-channel/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" ) // Async: The following types represent the response sent by a contract on OnRecvPacket when it wants the ack to be async diff --git a/x/ibchooks/wasm_hook.go b/x/ibchooks/wasm_hook.go index 3bb4186847..a3aaaef5f1 100644 --- a/x/ibchooks/wasm_hook.go +++ b/x/ibchooks/wasm_hook.go @@ -8,13 +8,14 @@ import ( wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" sdkerrors "cosmossdk.io/errors" + sdkmath "cosmossdk.io/math" sdktypes "github.com/cosmos/cosmos-sdk/types" - capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - transfertypes "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v6/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v6/modules/core/04-channel/types" - ibcexported "github.com/cosmos/ibc-go/v6/modules/core/exported" + capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" "github.com/provenance-io/provenance/x/ibchooks/keeper" "github.com/provenance-io/provenance/x/ibchooks/types" @@ -86,7 +87,7 @@ func (h WasmHooks) OnRecvPacketOverride(im IBCMiddleware, ctx sdktypes.Context, return ack } - amount, ok := sdktypes.NewIntFromString(data.GetAmount()) + amount, ok := sdkmath.NewIntFromString(data.GetAmount()) if !ok { // This should never happen, as it should've been caught in the underlaying call to OnRecvPacket, // but returning here for completeness diff --git a/x/ibcratelimit/README.md b/x/ibcratelimit/README.md index 5e0f473793..9a0c7bf353 100644 --- a/x/ibcratelimit/README.md +++ b/x/ibcratelimit/README.md @@ -1,4 +1,4 @@ -# ibcratelimit +# `x/ibcratelimit` ## Notice @@ -125,13 +125,13 @@ As mentioned at the beginning of the README, the go code is a relatively minimal ### Go Middleware To achieve this, the middleware needs to implement the `porttypes.Middleware` interface and the -`porttypes.ICS4Wrapper` interface. This allows the middleware to send and receive IBC messages by wrapping +`porttypes.ICS4Wrapper` interface. This allows the middleware to send and receive IBC messages by wrapping any IBC module, and be used as an ICS4 wrapper by a transfer module (for sending packets or writing acknowledgements). Of those interfaces, just the following methods have custom logic: -* `ICS4Wrapper.SendPacket` forwards to contract, with intent of tracking of value sent via an ibc channel -* `Middleware.OnRecvPacket` forwards to contract, with intent of tracking of value received via an ibc channel +* `ICS4Wrapper.SendPacket` forwards to contract, with intent of tracking of value sent via an ibc channel +* `Middleware.OnRecvPacket` forwards to contract, with intent of tracking of value received via an ibc channel * `Middleware.OnAcknowledgementPacket` forwards to contract, with intent of undoing the tracking of a sent packet if the acknowledgment is not a success * `OnTimeoutPacket` forwards to contract, with intent of undoing the tracking of a sent packet if the packet times out (is not relayed) @@ -194,23 +194,23 @@ Sudo messages can only be executed by the chain. * RecvPacket - Increments the amount used out of the receive quota and checks that the receive is allowed. If it isn't, it will return a RateLimitExceeded error * UndoSend - If a send has failed, the undo message is used to remove its cost from the send quota -All of these messages receive the packet from the chain and extract the necessary information to process the packet and determine if it should be the rate limited. +All of these messages receive the packet from the chain and extract the necessary information to process the packet and determine if it should be the rate limited. -### Necessary information +### Necessary information To determine if a packet should be rate limited, we need: -* Channel: The channel on the Osmosis side: `packet.SourceChannel` for sends, and `packet.DestinationChannel` for receives. +* Channel: The channel on the Osmosis side: `packet.SourceChannel` for sends, and `packet.DestinationChannel` for receives. * Denom: The denom of the token being transferred as known on the Osmosis side (more on that bellow) -* Channel Value: The total value of the chanel denominated in `Denom` (i.e.: channel-17 is worth 10k osmo). +* Channel Value: The total value of the chanel denominated in `Denom` (i.e.: channel-17 is worth 10k osmo). * Funds: the amount being transferred #### Notes on Channel -The contract also supports quotas on a custom channel called "any" that is checked on every transfer. If either the +The contract also supports quotas on a custom channel called "any" that is checked on every transfer. If either the transfer channel or the "any" channel have a quota that has been filled, the transaction will be rate limited. #### Notes on Denom -We always use the the denom as represented on Osmosis. For native assets that is the local denom, and for non-native +We always use the the denom as represented on Osmosis. For native assets that is the local denom, and for non-native assets it's the "ibc" prefix and the sha256 hash of the denom trace (`ibc/...`). ##### Sends @@ -219,7 +219,7 @@ For native denoms, we can just use the denom in the packet. If the denom is inva For non-native denoms, the contract needs to hash the denom trace and append it to the `ibc/` prefix. The contract always receives the parsed denom (i.e.: `transfer/channel-32/uatom` instead of -`ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2`). This is because of the order in which +`ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2`). This is because of the order in which the middleware is called. When sending a non-native denom, the packet contains `transfer/source-channel/denom` as it is built on the `relay.SendTransfer()` in the transfer module and then passed to the middleware. Example result: `ibc/` @@ -229,7 +229,7 @@ This behaves slightly different if the asset is an osmosis asset that was sent t returned to the chain, or if the asset is being received by the chain and originates on the counterparty. In ibc this is called being a "source" or a "sink" respectively. -If the chain is a sink for the denom, we build the local denom by prefixing the port and the channel +If the chain is a sink for the denom, we build the local denom by prefixing the port and the channel (`transfer/local-channel`) and hashing that denom. Example result: `ibc/` If the chain is the source for the denom, there are two possibilities: @@ -242,21 +242,21 @@ We have iterated on different strategies for calculating the channel value. Our * For non-native tokens (`ibc/...`), the channel value should be the supply of those tokens in Osmosis * For native tokens, the channel value should be the total amount of tokens in escrow across all ibc channels -The later ensures the limits are lower and represent the amount of native tokens that exist outside Osmosis. This is -beneficial as we assume the majority of native tokens exist on the native chain and the amount "normal" ibc transfers is -proportional to the tokens that have left the chain. +The later ensures the limits are lower and represent the amount of native tokens that exist outside Osmosis. This is +beneficial as we assume the majority of native tokens exist on the native chain and the amount "normal" ibc transfers is +proportional to the tokens that have left the chain. -This strategy cannot be implemented at the moment because IBC does not track the amount of tokens in escrow across -all channels ([github issue](https://github.com/cosmos/ibc-go/issues/2664)). Instead, we use the current supply on -Osmosis for all denoms (i.e.: treat native and non-native tokens the same way). Once that ticket is fixed, we will +This strategy cannot be implemented at the moment because IBC does not track the amount of tokens in escrow across +all channels ([github issue](https://github.com/cosmos/ibc-go/issues/2664)). Instead, we use the current supply on +Osmosis for all denoms (i.e.: treat native and non-native tokens the same way). Once that ticket is fixed, we will update this strategy. ##### Caching -The channel value varies constantly. To have better predictability, and avoid issues of the value growing if there is +The channel value varies constantly. To have better predictability, and avoid issues of the value growing if there is a potential infinite mint bug, we cache the channel value at the beginning of the period for every quota. -This means that if we have a daily quota of 1% of the osmo supply, and the channel value is 1M osmo at the beginning of +This means that if we have a daily quota of 1% of the osmo supply, and the channel value is 1M osmo at the beginning of the quota, no more than 100k osmo can transferred during that day. If 10M osmo were to be minted or IBC'd in during that period, the quota will not increase until the period expired. Then it will be 1% of the new channel value (~11M) @@ -264,7 +264,7 @@ period, the quota will not increase until the period expired. Then it will be 1% The rate limit middleware wraps the `transferIBCModule` and is added as the entry route for IBC transfers. -The module is also provided to the underlying `transferIBCModule` as its `ICS4Wrapper`; previously, this would have +The module is also provided to the underlying `transferIBCModule` as its `ICS4Wrapper`; previously, this would have pointed to a channel, which also implements the `ICS4Wrapper` interface. This integration can be seen in [osmosis/app/keepers/keepers.go](https://github.com/osmosis-labs/osmosis/blob/main/app/keepers/keepers.go) @@ -278,17 +278,17 @@ A general testing strategy is as follows: * Send some tokens from A->B and some from B->A (so that there are IBC tokens to play with in both sides) * Add the rate limiter on A with low limits (i.e. 1% of supply) * Test Function for chains A' and B' and denom d - * Send some d tokens from A' to B' and get close to the limit. + * Send some d tokens from A' to B' and get close to the limit. * Do the same transfer making sure the amount is above the quota and verify it fails with the rate limit error * Wait until the reset time has passed, and send again. The transfer should now succeed -* Repeat the above test for the following combination of chains and tokens: `(A,B,a)`, `(B,A,a)`, `(A,B,b)`, `(B,A,b)`, +* Repeat the above test for the following combination of chains and tokens: `(A,B,a)`, `(B,A,a)`, `(A,B,b)`, `(B,A,b)`, where `a` and `b` are native tokens to chains A and B respectively. For more comprehensive tests we can also: * Add a third chain C and make sure everything works properly for C tokens that have been transferred to A and to B * Test that the contracts gov address can reset rate limits if the quota has been hit -* Test the queries for getting information about the state of the quotas -* Test that rate limit symmetries hold (i.e.: sending the a token through a rate-limited channel and then sending back +* Test the queries for getting information about the state of the quotas +* Test that rate limit symmetries hold (i.e.: sending the a token through a rate-limited channel and then sending back reduces the rate limits by the same amount that it was increased during the first send) * Ensure that the channels between the test chains have different names (A->B="channel-0", B->A="channel-1", for example) diff --git a/x/ibcratelimit/client/cli/cli_test.go b/x/ibcratelimit/client/cli/cli_test.go index 104b52b435..084d0c035c 100644 --- a/x/ibcratelimit/client/cli/cli_test.go +++ b/x/ibcratelimit/client/cli/cli_test.go @@ -4,7 +4,7 @@ import ( "fmt" "testing" - tmcli "github.com/tendermint/tendermint/libs/cli" + cmtcli "github.com/cometbft/cometbft/libs/cli" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/crypto/hd" @@ -21,7 +21,7 @@ import ( "github.com/provenance-io/provenance/internal/antewrapper" "github.com/provenance-io/provenance/internal/pioconfig" "github.com/provenance-io/provenance/testutil" - ibcratelimit "github.com/provenance-io/provenance/x/ibcratelimit" + "github.com/provenance-io/provenance/x/ibcratelimit" ibcratelimitcli "github.com/provenance-io/provenance/x/ibcratelimit/client/cli" ) @@ -61,7 +61,7 @@ func (s *TestSuite) SetupSuite() { var genBalances []banktypes.Balance for i := range s.accountAddresses { genBalances = append(genBalances, banktypes.Balance{Address: s.accountAddresses[i].String(), Coins: sdk.NewCoins( - sdk.NewCoin("nhash", sdk.NewInt(100000000)), sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(100000000)), + sdk.NewInt64Coin("nhash", 100_000_000), sdk.NewInt64Coin(s.cfg.BondDenom, 100_000_000), ).Sort()}) } var bankGenState banktypes.GenesisState @@ -144,7 +144,7 @@ func (s *TestSuite) TestGetParams() { s.Run(tc.name, func() { clientCtx := s.network.Validators[0].ClientCtx - out, err := clitestutil.ExecTestCLICmd(clientCtx, ibcratelimitcli.GetParamsCmd(), []string{fmt.Sprintf("--%s=json", tmcli.OutputFlag)}) + out, err := clitestutil.ExecTestCLICmd(clientCtx, ibcratelimitcli.GetParamsCmd(), []string{fmt.Sprintf("--%s=json", cmtcli.OutputFlag)}) if len(tc.expectErrMsg) > 0 { s.EqualError(err, tc.expectErrMsg, "should have correct error message for invalid Params request") } else { @@ -187,15 +187,15 @@ func (s *TestSuite) TestParamsUpdate() { clientCtx := s.network.Validators[0].ClientCtx.WithKeyringDir(s.keyringDir).WithKeyring(s.keyring) - flags := []string{ + flagArgs := []string{ fmt.Sprintf("--%s=%s", flags.FlagFrom, tc.signer), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), } - tc.args = append(tc.args, flags...) + tc.args = append(tc.args, flagArgs...) - out, err := clitestutil.ExecTestCLICmd(clientCtx, ibcratelimitcli.GetCmdParamsUpdate(), append(tc.args, []string{fmt.Sprintf("--%s=json", tmcli.OutputFlag)}...)) + out, err := clitestutil.ExecTestCLICmd(clientCtx, ibcratelimitcli.GetCmdParamsUpdate(), append(tc.args, []string{fmt.Sprintf("--%s=json", cmtcli.OutputFlag)}...)) var response sdk.TxResponse marshalErr := clientCtx.Codec.UnmarshalJSON(out.Bytes(), &response) if len(tc.expectErrMsg) > 0 { diff --git a/x/ibcratelimit/client/cli/tx.go b/x/ibcratelimit/client/cli/tx.go index ce43f99f67..0d34550b25 100644 --- a/x/ibcratelimit/client/cli/tx.go +++ b/x/ibcratelimit/client/cli/tx.go @@ -7,12 +7,10 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - sdk "github.com/cosmos/cosmos-sdk/types" - sdktx "github.com/cosmos/cosmos-sdk/types/tx" "github.com/cosmos/cosmos-sdk/version" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - govcli "github.com/cosmos/cosmos-sdk/x/gov/client/cli" + + // govcli "github.com/cosmos/cosmos-sdk/x/gov/client/cli" // TODO[1760]: gov-cli govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" "github.com/provenance-io/provenance/x/ibcratelimit" @@ -58,20 +56,25 @@ func GetCmdParamsUpdate() *cobra.Command { args[0], ) - proposal, govErr := govcli.ReadGovPropFlags(clientCtx, cmd.Flags()) - if govErr != nil { - return govErr - } - proposal.Messages, govErr = sdktx.SetMsgs([]sdk.Msg{msg}) - if govErr != nil { - return govErr - } + // TODO[1760]: gov-cli: Replace this with GenerateOrBroadcastTxCLIAsGovProp once its back. + _, _ = msg, clientCtx + /* + proposal, govErr := govcli.ReadGovPropFlags(clientCtx, cmd.Flags()) + if govErr != nil { + return govErr + } + proposal.Messages, govErr = sdktx.SetMsgs([]sdk.Msg{msg}) + if govErr != nil { + return govErr + } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), proposal) + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), proposal) + */ + return fmt.Errorf("not yet updated") }, } - govcli.AddGovPropFlagsToCmd(cmd) + // govcli.AddGovPropFlagsToCmd(cmd) // TODO[1760]: gov-cli flags.AddTxFlagsToCmd(cmd) return cmd diff --git a/x/ibcratelimit/codec.go b/x/ibcratelimit/codec.go index 40572390f1..109edeb766 100644 --- a/x/ibcratelimit/codec.go +++ b/x/ibcratelimit/codec.go @@ -1,11 +1,10 @@ package ibcratelimit import ( - "github.com/gogo/protobuf/proto" - "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/msgservice" + "github.com/cosmos/gogoproto/proto" ) // RegisterInterfaces registers implementations for the tx messages diff --git a/x/ibcratelimit/keeper/keeper.go b/x/ibcratelimit/keeper/keeper.go index c0df185a76..097fc0a7c5 100644 --- a/x/ibcratelimit/keeper/keeper.go +++ b/x/ibcratelimit/keeper/keeper.go @@ -3,10 +3,10 @@ package keeper import ( "github.com/gogo/protobuf/proto" - "github.com/tendermint/tendermint/libs/log" + "cosmossdk.io/log" + storetypes "cosmossdk.io/store/types" "github.com/cosmos/cosmos-sdk/codec" - storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" diff --git a/x/ibcratelimit/keeper/keeper_test.go b/x/ibcratelimit/keeper/keeper_test.go index 2cd9e6888e..95ea404a47 100644 --- a/x/ibcratelimit/keeper/keeper_test.go +++ b/x/ibcratelimit/keeper/keeper_test.go @@ -3,14 +3,14 @@ package keeper_test import ( "testing" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + "github.com/stretchr/testify/suite" "github.com/cosmos/cosmos-sdk/baseapp" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/provenance-io/provenance/app" "github.com/provenance-io/provenance/x/ibcratelimit" "github.com/provenance-io/provenance/x/ibcratelimit/keeper" - "github.com/stretchr/testify/suite" ) type TestSuite struct { @@ -25,7 +25,7 @@ type TestSuite struct { func (s *TestSuite) SetupTest() { s.app = app.Setup(s.T()) - s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{}) + s.ctx = s.app.BaseApp.NewContext(false) s.ctx = s.ctx.WithBlockHeight(0) s.msgServer = keeper.NewMsgServer(*s.app.RateLimitingKeeper) diff --git a/x/ibcratelimit/keeper/mocks_test.go b/x/ibcratelimit/keeper/mocks_test.go index 0c9569f5ea..1be571b356 100644 --- a/x/ibcratelimit/keeper/mocks_test.go +++ b/x/ibcratelimit/keeper/mocks_test.go @@ -5,9 +5,9 @@ import ( "strings" sdk "github.com/cosmos/cosmos-sdk/types" - transfertypes "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v6/modules/core/02-client/types" - "github.com/cosmos/ibc-go/v6/modules/core/exported" + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + "github.com/cosmos/ibc-go/v8/modules/core/exported" "github.com/provenance-io/provenance/x/ibcratelimit" ) diff --git a/x/ibcratelimit/keeper/rate_limit.go b/x/ibcratelimit/keeper/rate_limit.go index 14f2ab448f..f7170c0c27 100644 --- a/x/ibcratelimit/keeper/rate_limit.go +++ b/x/ibcratelimit/keeper/rate_limit.go @@ -6,7 +6,7 @@ import ( errorsmod "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/ibc-go/v6/modules/core/exported" + "github.com/cosmos/ibc-go/v8/modules/core/exported" "github.com/provenance-io/provenance/x/ibcratelimit" ) diff --git a/x/ibcratelimit/keeper/rate_limit_test.go b/x/ibcratelimit/keeper/rate_limit_test.go index f72fa4b0b5..2f8096b320 100644 --- a/x/ibcratelimit/keeper/rate_limit_test.go +++ b/x/ibcratelimit/keeper/rate_limit_test.go @@ -1,7 +1,7 @@ package keeper_test import ( - "github.com/cosmos/ibc-go/v6/modules/core/exported" + "github.com/cosmos/ibc-go/v8/modules/core/exported" "github.com/provenance-io/provenance/x/ibcratelimit" ) diff --git a/x/ibcratelimit/mocks_test.go b/x/ibcratelimit/mocks_test.go index 93a3c39416..051f765888 100644 --- a/x/ibcratelimit/mocks_test.go +++ b/x/ibcratelimit/mocks_test.go @@ -3,9 +3,9 @@ package ibcratelimit_test import ( "strings" - transfertypes "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v6/modules/core/02-client/types" - "github.com/cosmos/ibc-go/v6/modules/core/exported" + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + "github.com/cosmos/ibc-go/v8/modules/core/exported" ) // MockPacket is a test struct that implements the PacketI interface. diff --git a/x/ibcratelimit/module/ibc_middleware.go b/x/ibcratelimit/module/ibc_middleware.go index d67e5dc18a..cc9c51b5e4 100644 --- a/x/ibcratelimit/module/ibc_middleware.go +++ b/x/ibcratelimit/module/ibc_middleware.go @@ -7,11 +7,11 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - clienttypes "github.com/cosmos/ibc-go/v6/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v6/modules/core/04-channel/types" - porttypes "github.com/cosmos/ibc-go/v6/modules/core/05-port/types" - "github.com/cosmos/ibc-go/v6/modules/core/exported" + capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types" + "github.com/cosmos/ibc-go/v8/modules/core/exported" "github.com/provenance-io/provenance/internal/ibc" "github.com/provenance-io/provenance/x/ibcratelimit" diff --git a/x/ibcratelimit/module/ibc_middleware_test.go b/x/ibcratelimit/module/ibc_middleware_test.go index 2bf5464d98..ff4dcb44eb 100644 --- a/x/ibcratelimit/module/ibc_middleware_test.go +++ b/x/ibcratelimit/module/ibc_middleware_test.go @@ -4,31 +4,30 @@ import ( "encoding/json" "fmt" "os" + "slices" "strconv" "strings" "testing" "time" - bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" - "golang.org/x/exp/slices" - - sdk "github.com/cosmos/cosmos-sdk/types" - transfertypes "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v6/modules/core/02-client/types" - ibctesting "github.com/cosmos/ibc-go/v6/testing" "github.com/stretchr/testify/suite" + "cosmossdk.io/log" sdkmath "cosmossdk.io/math" - sdksim "github.com/cosmos/cosmos-sdk/simapp" + + dbm "github.com/cosmos/cosmos-db" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" + sdk "github.com/cosmos/cosmos-sdk/types" + bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + ibctesting "github.com/cosmos/ibc-go/v8/testing" "github.com/provenance-io/provenance/app" "github.com/provenance-io/provenance/internal/pioconfig" testutil "github.com/provenance-io/provenance/testutil/ibc" "github.com/provenance-io/provenance/x/ibcratelimit" - - "github.com/tendermint/tendermint/libs/log" - dbm "github.com/tendermint/tm-db" ) type MiddlewareTestSuite struct { @@ -54,40 +53,43 @@ func SetupSimApp() (ibctesting.TestingApp, map[string]json.RawMessage) { pioconfig.SetProvenanceConfig(sdk.DefaultBondDenom, 0) db := dbm.NewMemDB() encCdc := app.MakeEncodingConfig() - provenanceApp := app.New(log.NewNopLogger(), db, nil, true, map[int64]bool{}, app.DefaultNodeHome, 5, encCdc, sdksim.EmptyAppOptions{}) + provenanceApp := app.New(log.NewNopLogger(), db, nil, true, map[int64]bool{}, app.DefaultNodeHome, 5, encCdc, simtestutil.EmptyAppOptions{}) genesis := app.NewDefaultGenesisState(encCdc.Marshaler) return provenanceApp, genesis } -func (suite *MiddlewareTestSuite) SetupTest() { - SkipIfWSL(suite.T()) +func (s *MiddlewareTestSuite) SetupTest() { + SkipIfWSL(s.T()) ibctesting.DefaultTestingAppInit = SetupSimApp - suite.coordinator = ibctesting.NewCoordinator(suite.T(), 2) + s.coordinator = ibctesting.NewCoordinator(s.T(), 2) - suite.chainA = &testutil.TestChain{ - TestChain: suite.coordinator.GetChain(ibctesting.GetChainID(1)), + s.chainA = &testutil.TestChain{ + TestChain: s.coordinator.GetChain(ibctesting.GetChainID(1)), } - suite.chainB = &testutil.TestChain{ - TestChain: suite.coordinator.GetChain(ibctesting.GetChainID(2)), + s.chainB = &testutil.TestChain{ + TestChain: s.coordinator.GetChain(ibctesting.GetChainID(2)), } - suite.path = NewTransferPath(suite.chainA, suite.chainB) - suite.coordinator.Setup(suite.path) - - params := suite.chainA.GetProvenanceApp().MintKeeper.GetParams(suite.chainA.GetContext()) - params.InflationMax = sdk.NewDec(0) - params.InflationRateChange = sdk.NewDec(1) - params.InflationMin = sdk.NewDec(0) - suite.chainA.GetProvenanceApp().MintKeeper.SetParams(suite.chainA.GetContext(), params) - suite.chainB.GetProvenanceApp().MintKeeper.SetParams(suite.chainB.GetContext(), params) + s.path = NewTransferPath(s.chainA, s.chainB) + s.coordinator.Setup(s.path) + + params, err := s.chainA.GetProvenanceApp().MintKeeper.Params.Get(s.chainA.GetContext()) + s.Require().NoError(err, "getting mint keeper params") + params.InflationMax = sdkmath.LegacyNewDec(0) + params.InflationRateChange = sdkmath.LegacyNewDec(1) + params.InflationMin = sdkmath.LegacyNewDec(0) + err = s.chainA.GetProvenanceApp().MintKeeper.Params.Set(s.chainA.GetContext(), params) + s.Require().NoError(err, "setting mint keeper params for chainA") + err = s.chainB.GetProvenanceApp().MintKeeper.Params.Set(s.chainB.GetContext(), params) + s.Require().NoError(err, "setting mint keeper params for chainB") } // MessageFromAToB sends a message from chain A to chain B. -func (suite *MiddlewareTestSuite) MessageFromAToB(denom string, amount sdkmath.Int) sdk.Msg { +func (s *MiddlewareTestSuite) MessageFromAToB(denom string, amount sdkmath.Int) sdk.Msg { coin := sdk.NewCoin(denom, amount) - port := suite.path.EndpointA.ChannelConfig.PortID - channel := suite.path.EndpointA.ChannelID - accountFrom := suite.chainA.SenderAccount.GetAddress().String() - accountTo := suite.chainB.SenderAccount.GetAddress().String() + port := s.path.EndpointA.ChannelConfig.PortID + channel := s.path.EndpointA.ChannelID + accountFrom := s.chainA.SenderAccount.GetAddress().String() + accountTo := s.chainB.SenderAccount.GetAddress().String() timeoutHeight := clienttypes.NewHeight(0, 100) memo := "" return transfertypes.NewMsgTransfer( @@ -103,12 +105,12 @@ func (suite *MiddlewareTestSuite) MessageFromAToB(denom string, amount sdkmath.I } // MessageFromAToB sends a message from chain B to chain A. -func (suite *MiddlewareTestSuite) MessageFromBToA(denom string, amount sdkmath.Int) sdk.Msg { +func (s *MiddlewareTestSuite) MessageFromBToA(denom string, amount sdkmath.Int) sdk.Msg { coin := sdk.NewCoin(denom, amount) - port := suite.path.EndpointB.ChannelConfig.PortID - channel := suite.path.EndpointB.ChannelID - accountFrom := suite.chainB.SenderAccount.GetAddress().String() - accountTo := suite.chainA.SenderAccount.GetAddress().String() + port := s.path.EndpointB.ChannelConfig.PortID + channel := s.path.EndpointB.ChannelID + accountFrom := s.chainB.SenderAccount.GetAddress().String() + accountTo := s.chainA.SenderAccount.GetAddress().String() timeoutHeight := clienttypes.NewHeight(0, 100) memo := "" return transfertypes.NewMsgTransfer( @@ -124,67 +126,67 @@ func (suite *MiddlewareTestSuite) MessageFromBToA(denom string, amount sdkmath.I } // Tests that a receiver address longer than 4096 is not accepted -func (suite *MiddlewareTestSuite) TestInvalidReceiver() { +func (s *MiddlewareTestSuite) TestInvalidReceiver() { msg := transfertypes.NewMsgTransfer( - suite.path.EndpointB.ChannelConfig.PortID, - suite.path.EndpointB.ChannelID, - sdk.NewCoin(sdk.DefaultBondDenom, sdkmath.NewInt(1)), - suite.chainB.SenderAccount.GetAddress().String(), + s.path.EndpointB.ChannelConfig.PortID, + s.path.EndpointB.ChannelID, + sdk.NewInt64Coin(sdk.DefaultBondDenom, 1), + s.chainB.SenderAccount.GetAddress().String(), strings.Repeat("x", 4097), clienttypes.NewHeight(0, 100), 0, "", ) - _, ack, _ := suite.FullSendBToA(msg) - suite.Assert().Contains(ack, "error", + _, ack, _ := s.FullSendBToA(msg) + s.Assert().Contains(ack, "error", "acknowledgment is not an error") - suite.Assert().Contains(ack, fmt.Sprintf("ABCI code: %d", ibcratelimit.ErrBadMessage.ABCICode()), + s.Assert().Contains(ack, fmt.Sprintf("ABCI code: %d", ibcratelimit.ErrBadMessage.ABCICode()), "acknowledgment error is not of the right type") } // FullSendBToA does the entire logic from sending a message from chain B to chain A. -func (suite *MiddlewareTestSuite) FullSendBToA(msg sdk.Msg) (*sdk.Result, string, error) { - sendResult, err := suite.chainB.SendMsgsNoCheck(msg) - suite.Assert().NoError(err) +func (s *MiddlewareTestSuite) FullSendBToA(msg sdk.Msg) (*sdk.Result, string, error) { + sendResult, err := s.chainB.SendMsgsNoCheck(msg) + s.Assert().NoError(err) - packet, err := ibctesting.ParsePacketFromEvents(sendResult.GetEvents()) - suite.Assert().NoError(err) + packet, err := ibctesting.ParsePacketFromEvents(sendResult.Events) + s.Assert().NoError(err) - err = suite.path.EndpointA.UpdateClient() - suite.Assert().NoError(err) + err = s.path.EndpointA.UpdateClient() + s.Assert().NoError(err) - res, err := suite.path.EndpointA.RecvPacketWithResult(packet) - suite.Assert().NoError(err) + res, err := s.path.EndpointA.RecvPacketWithResult(packet) + s.Assert().NoError(err) ack, err := ibctesting.ParseAckFromEvents(res.GetEvents()) - suite.Assert().NoError(err) + s.Assert().NoError(err) - err = suite.path.EndpointA.UpdateClient() - suite.Assert().NoError(err) - err = suite.path.EndpointB.UpdateClient() - suite.Assert().NoError(err) + err = s.path.EndpointA.UpdateClient() + s.Assert().NoError(err) + err = s.path.EndpointB.UpdateClient() + s.Assert().NoError(err) return sendResult, string(ack), err } // FullSendAToB does the entire logic from sending a message from chain A to chain B. -func (suite *MiddlewareTestSuite) FullSendAToB(msg sdk.Msg) (*sdk.Result, string, error) { - sendResult, err := suite.chainA.SendMsgsNoCheck(msg) +func (s *MiddlewareTestSuite) FullSendAToB(msg sdk.Msg) (*sdk.Result, string, error) { + sendResult, err := s.chainA.SendMsgsNoCheck(msg) if err != nil { return nil, "", err } - packet, err := ibctesting.ParsePacketFromEvents(sendResult.GetEvents()) + packet, err := ibctesting.ParsePacketFromEvents(sendResult.Events) if err != nil { return nil, "", err } - err = suite.path.EndpointB.UpdateClient() + err = s.path.EndpointB.UpdateClient() if err != nil { return nil, "", err } - res, err := suite.path.EndpointB.RecvPacketWithResult(packet) + res, err := s.path.EndpointB.RecvPacketWithResult(packet) if err != nil { return nil, "", err } @@ -194,11 +196,11 @@ func (suite *MiddlewareTestSuite) FullSendAToB(msg sdk.Msg) (*sdk.Result, string return nil, "", err } - err = suite.path.EndpointA.UpdateClient() + err = s.path.EndpointA.UpdateClient() if err != nil { return nil, "", err } - err = suite.path.EndpointB.UpdateClient() + err = s.path.EndpointB.UpdateClient() if err != nil { return nil, "", err } @@ -207,35 +209,35 @@ func (suite *MiddlewareTestSuite) FullSendAToB(msg sdk.Msg) (*sdk.Result, string } // AssertSend checks that a receive on A from B was successful. -func (suite *MiddlewareTestSuite) AssertReceive(success bool, msg sdk.Msg) (string, error) { - _, ack, err := suite.FullSendBToA(msg) +func (s *MiddlewareTestSuite) AssertReceive(success bool, msg sdk.Msg) (string, error) { + _, ack, err := s.FullSendBToA(msg) if success { - suite.Assert().NoError(err) - suite.Assert().NotContains(ack, "error", + s.Assert().NoError(err) + s.Assert().NotContains(ack, "error", "acknowledgment is an error") } else { - suite.Assert().Contains(ack, "error", + s.Assert().Contains(ack, "error", "acknowledgment is not an error") - suite.Assert().Contains(ack, fmt.Sprintf("ABCI code: %d", ibcratelimit.ErrRateLimitExceeded.ABCICode()), + s.Assert().Contains(ack, fmt.Sprintf("ABCI code: %d", ibcratelimit.ErrRateLimitExceeded.ABCICode()), "acknowledgment error is not of the right type") } return ack, err } // AssertSend checks that a send from A to B was successful. -func (suite *MiddlewareTestSuite) AssertSend(success bool, msg sdk.Msg) (*sdk.Result, error) { - r, _, err := suite.FullSendAToB(msg) +func (s *MiddlewareTestSuite) AssertSend(success bool, msg sdk.Msg) (*sdk.Result, error) { + r, _, err := s.FullSendAToB(msg) if success { - suite.Assert().NoError(err, "IBC send failed. Expected success. %s", err) + s.Assert().NoError(err, "IBC send failed. Expected success. %s", err) } else { - suite.Assert().Error(err, "IBC send succeeded. Expected failure") - suite.ErrorContains(err, ibcratelimit.ErrRateLimitExceeded.Error(), "Bad error type") + s.Assert().Error(err, "IBC send succeeded. Expected failure") + s.ErrorContains(err, ibcratelimit.ErrRateLimitExceeded.Error(), "Bad error type") } return r, err } // BuildChannelQuota creates a quota message. -func (suite *MiddlewareTestSuite) BuildChannelQuota(name, channel, denom string, duration, send_percentage, recv_percentage uint32) string { +func (s *MiddlewareTestSuite) BuildChannelQuota(name, channel, denom string, duration, send_percentage, recv_percentage uint32) string { return fmt.Sprintf(` {"channel_id": "%s", "denom": "%s", "quotas": [{"name":"%s", "duration": %d, "send_recv":[%d, %d]}] } `, channel, denom, name, duration, send_percentage, recv_percentage) @@ -244,23 +246,23 @@ func (suite *MiddlewareTestSuite) BuildChannelQuota(name, channel, denom string, // Tests // Test that Sending IBC messages works when the middleware isn't configured -func (suite *MiddlewareTestSuite) TestSendTransferNoContract() { +func (s *MiddlewareTestSuite) TestSendTransferNoContract() { one := sdkmath.NewInt(1) - _, err := suite.AssertSend(true, suite.MessageFromAToB(sdk.DefaultBondDenom, one)) - suite.Assert().NoError(err) + _, err := s.AssertSend(true, s.MessageFromAToB(sdk.DefaultBondDenom, one)) + s.Assert().NoError(err) } // Test that Receiving IBC messages works when the middleware isn't configured -func (suite *MiddlewareTestSuite) TestReceiveTransferNoContract() { +func (s *MiddlewareTestSuite) TestReceiveTransferNoContract() { one := sdkmath.NewInt(1) - _, err := suite.AssertReceive(true, suite.MessageFromBToA(sdk.DefaultBondDenom, one)) - suite.Assert().NoError(err) + _, err := s.AssertReceive(true, s.MessageFromBToA(sdk.DefaultBondDenom, one)) + s.Assert().NoError(err) } // initializeEscrow sets up the escrow on the chain. -func (suite *MiddlewareTestSuite) initializeEscrow() (totalEscrow, expectedSed sdk.Int) { - provenanceApp := suite.chainA.GetProvenanceApp() - supply := provenanceApp.BankKeeper.GetSupply(suite.chainA.GetContext(), sdk.DefaultBondDenom) +func (s *MiddlewareTestSuite) initializeEscrow() (totalEscrow, expectedSed sdkmath.Int) { + provenanceApp := s.chainA.GetProvenanceApp() + supply := provenanceApp.BankKeeper.GetSupply(s.chainA.GetContext(), sdk.DefaultBondDenom) // Move some funds from chainA to chainB so that there is something in escrow // Each user has 10% of the supply, so we send most of the funds from one user to chainA @@ -272,18 +274,18 @@ func (suite *MiddlewareTestSuite) initializeEscrow() (totalEscrow, expectedSed s sendAmount := transferAmount.QuoRaw(40) // Send from A to B - _, _, err := suite.FullSendAToB(suite.MessageFromAToB(sdk.DefaultBondDenom, transferAmount.Sub(sendAmount))) - suite.Assert().NoError(err) + _, _, err := s.FullSendAToB(s.MessageFromAToB(sdk.DefaultBondDenom, transferAmount.Sub(sendAmount))) + s.Assert().NoError(err) // Send from A to B - _, _, err = suite.FullSendBToA(suite.MessageFromBToA(sdk.DefaultBondDenom, transferAmount.Sub(sendAmount))) - suite.Assert().NoError(err) + _, _, err = s.FullSendBToA(s.MessageFromBToA(sdk.DefaultBondDenom, transferAmount.Sub(sendAmount))) + s.Assert().NoError(err) return transferAmount, sendAmount } -func (suite *MiddlewareTestSuite) fullSendTest(native bool) map[string]string { +func (s *MiddlewareTestSuite) fullSendTest(native bool) map[string]string { quotaPercentage := 5 - suite.initializeEscrow() + s.initializeEscrow() // Get the denom and amount to send denom := sdk.DefaultBondDenom channel := "channel-0" @@ -293,10 +295,10 @@ func (suite *MiddlewareTestSuite) fullSendTest(native bool) map[string]string { denom = denomTrace.IBCDenom() } - provenanceApp := suite.chainA.GetProvenanceApp() + provenanceApp := s.chainA.GetProvenanceApp() // This is the first one. Inside the tests. It works as expected. - channelValue := CalculateChannelValue(suite.chainA.GetContext(), denom, provenanceApp.BankKeeper) + channelValue := CalculateChannelValue(s.chainA.GetContext(), denom, provenanceApp.BankKeeper) // The amount to be sent is send 2.5% (quota is 5%) quota := channelValue.QuoRaw(int64(100 / quotaPercentage)) @@ -305,79 +307,79 @@ func (suite *MiddlewareTestSuite) fullSendTest(native bool) map[string]string { fmt.Printf("Testing send rate limiting for denom=%s, channelValue=%s, quota=%s, sendAmount=%s\n", denom, channelValue, quota, sendAmount) // Setup contract - suite.chainA.StoreContractRateLimiterDirect(&suite.Suite) - quotas := suite.BuildChannelQuota("weekly", channel, denom, 604800, 5, 5) + s.chainA.StoreContractRateLimiterDirect(&s.Suite) + quotas := s.BuildChannelQuota("weekly", channel, denom, 604800, 5, 5) fmt.Println(quotas) - initMsg := CreateRateLimiterInitMessage(suite.chainA, quotas) - addr := suite.chainA.InstantiateContract(&suite.Suite, initMsg, 1) - suite.chainA.RegisterRateLimiterContract(&suite.Suite, addr) + initMsg := CreateRateLimiterInitMessage(s.chainA, quotas) + addr := s.chainA.InstantiateContract(&s.Suite, initMsg, 1) + s.chainA.RegisterRateLimiterContract(&s.Suite, addr) // send 2.5% (quota is 5%) fmt.Printf("Sending %s from A to B. Represented in chain A as wrapped? %v\n", denom, !native) - _, err := suite.AssertSend(true, suite.MessageFromAToB(denom, sendAmount)) - suite.Assert().NoError(err) + _, err := s.AssertSend(true, s.MessageFromAToB(denom, sendAmount)) + s.Assert().NoError(err) // send 2.5% (quota is 5%) fmt.Println("trying to send ", sendAmount) - r, _ := suite.AssertSend(true, suite.MessageFromAToB(denom, sendAmount)) + r, _ := s.AssertSend(true, s.MessageFromAToB(denom, sendAmount)) // Calculate remaining allowance in the quota attrs := ExtractAttributes(FindEvent(r.GetEvents(), "wasm")) used, ok := sdkmath.NewIntFromString(attrs["weekly_used_out"]) - suite.Assert().True(ok) + s.Assert().True(ok) - suite.Assert().Equal(used, sendAmount.MulRaw(2)) + s.Assert().Equal(used, sendAmount.MulRaw(2)) // Sending above the quota should fail. We use 2 instead of 1 here to avoid rounding issues - _, err = suite.AssertSend(false, suite.MessageFromAToB(denom, sdkmath.NewInt(2))) - suite.Assert().Error(err) + _, err = s.AssertSend(false, s.MessageFromAToB(denom, sdkmath.NewInt(2))) + s.Assert().Error(err) return attrs } // Test rate limiting on sends -func (suite *MiddlewareTestSuite) TestSendTransferWithRateLimitingNative() { +func (s *MiddlewareTestSuite) TestSendTransferWithRateLimitingNative() { // Sends denom=stake from A->B. Rate limit receives "stake" in the packet. Nothing to do in the contract - suite.fullSendTest(true) + s.fullSendTest(true) } // Test rate limiting on sends -func (suite *MiddlewareTestSuite) TestSendTransferWithRateLimitingNonNative() { +func (s *MiddlewareTestSuite) TestSendTransferWithRateLimitingNonNative() { // Sends denom=ibc/C053D637CCA2A2BA030E2C5EE1B28A16F71CCB0E45E8BE52766DC1B241B77878 from A->B. // Rate limit receives "transfer/channel-0/stake" in the packet (because transfer.relay.SendTransfer is called before the middleware) // and should hash it before calculating the value - suite.fullSendTest(false) + s.fullSendTest(false) } // Test rate limits are reset when the specified time period has passed -func (suite *MiddlewareTestSuite) TestSendTransferReset() { +func (s *MiddlewareTestSuite) TestSendTransferReset() { // Same test as above, but the quotas get reset after time passes - attrs := suite.fullSendTest(true) + attrs := s.fullSendTest(true) parts := strings.Split(attrs["weekly_period_end"], ".") // Splitting timestamp into secs and nanos secs, err := strconv.ParseInt(parts[0], 10, 64) - suite.Assert().NoError(err) + s.Assert().NoError(err) nanos, err := strconv.ParseInt(parts[1], 10, 64) - suite.Assert().NoError(err) + s.Assert().NoError(err) resetTime := time.Unix(secs, nanos) // Move chainA forward one block - suite.chainA.NextBlock() - err = suite.chainA.SenderAccount.SetSequence(suite.chainA.SenderAccount.GetSequence() + 1) - suite.Assert().NoError(err) + s.chainA.NextBlock() + err = s.chainA.SenderAccount.SetSequence(s.chainA.SenderAccount.GetSequence() + 1) + s.Assert().NoError(err) // Reset time + one second oneSecAfterReset := resetTime.Add(time.Second) - suite.coordinator.IncrementTimeBy(oneSecAfterReset.Sub(suite.coordinator.CurrentTime)) + s.coordinator.IncrementTimeBy(oneSecAfterReset.Sub(s.coordinator.CurrentTime)) // Sending should succeed again - _, err = suite.AssertSend(true, suite.MessageFromAToB(sdk.DefaultBondDenom, sdkmath.NewInt(1))) - suite.Assert().NoError(err) + _, err = s.AssertSend(true, s.MessageFromAToB(sdk.DefaultBondDenom, sdkmath.NewInt(1))) + s.Assert().NoError(err) } // Test rate limiting on receives -func (suite *MiddlewareTestSuite) fullRecvTest(native bool) { +func (s *MiddlewareTestSuite) fullRecvTest(native bool) { quotaPercentage := 4 - suite.initializeEscrow() + s.initializeEscrow() // Get the denom and amount to send sendDenom := sdk.DefaultBondDenom localDenom := sdk.DefaultBondDenom @@ -390,9 +392,9 @@ func (suite *MiddlewareTestSuite) fullRecvTest(native bool) { sendDenom = denomTrace.IBCDenom() } - provenanceApp := suite.chainA.GetProvenanceApp() + provenanceApp := s.chainA.GetProvenanceApp() - channelValue := CalculateChannelValue(suite.chainA.GetContext(), localDenom, provenanceApp.BankKeeper) + channelValue := CalculateChannelValue(s.chainA.GetContext(), localDenom, provenanceApp.BankKeeper) // The amount to be sent is 2% (quota is 4%) quota := channelValue.QuoRaw(int64(100 / quotaPercentage)) @@ -401,77 +403,77 @@ func (suite *MiddlewareTestSuite) fullRecvTest(native bool) { fmt.Printf("Testing recv rate limiting for denom=%s, channelValue=%s, quota=%s, sendAmount=%s\n", localDenom, channelValue, quota, sendAmount) // Setup contract - suite.chainA.StoreContractRateLimiterDirect(&suite.Suite) - quotas := suite.BuildChannelQuota("weekly", channel, localDenom, 604800, 4, 4) - initMsg := CreateRateLimiterInitMessage(suite.chainA, quotas) - addr := suite.chainA.InstantiateContract(&suite.Suite, initMsg, 1) - suite.chainA.RegisterRateLimiterContract(&suite.Suite, addr) + s.chainA.StoreContractRateLimiterDirect(&s.Suite) + quotas := s.BuildChannelQuota("weekly", channel, localDenom, 604800, 4, 4) + initMsg := CreateRateLimiterInitMessage(s.chainA, quotas) + addr := s.chainA.InstantiateContract(&s.Suite, initMsg, 1) + s.chainA.RegisterRateLimiterContract(&s.Suite, addr) // receive 2.5% (quota is 5%) fmt.Printf("Sending %s from B to A. Represented in chain A as wrapped? %v\n", sendDenom, native) - _, err := suite.AssertReceive(true, suite.MessageFromBToA(sendDenom, sendAmount)) - suite.Assert().NoError(err) + _, err := s.AssertReceive(true, s.MessageFromBToA(sendDenom, sendAmount)) + s.Assert().NoError(err) // receive 2.5% (quota is 5%) - _, err = suite.AssertReceive(true, suite.MessageFromBToA(sendDenom, sendAmount)) - suite.Assert().NoError(err) + _, err = s.AssertReceive(true, s.MessageFromBToA(sendDenom, sendAmount)) + s.Assert().NoError(err) // Sending above the quota should fail. We send 2 instead of 1 to account for rounding errors - _, err = suite.AssertReceive(false, suite.MessageFromBToA(sendDenom, sdkmath.NewInt(2))) - suite.Assert().NoError(err) + _, err = s.AssertReceive(false, s.MessageFromBToA(sendDenom, sdkmath.NewInt(2))) + s.Assert().NoError(err) } -func (suite *MiddlewareTestSuite) TestRecvTransferWithRateLimitingNative() { +func (s *MiddlewareTestSuite) TestRecvTransferWithRateLimitingNative() { // Sends denom=stake from B->A. // Rate limit receives "stake" in the packet and should wrap it before calculating the value // types.ReceiverChainIsSource(packet.GetSourcePort(), packet.GetSourceChannel(), data.Denom) should return false => Wrap the token - suite.fullRecvTest(true) + s.fullRecvTest(true) } -func (suite *MiddlewareTestSuite) TestRecvTransferWithRateLimitingNonNative() { +func (s *MiddlewareTestSuite) TestRecvTransferWithRateLimitingNonNative() { // Sends denom=ibc/C053D637CCA2A2BA030E2C5EE1B28A16F71CCB0E45E8BE52766DC1B241B77878 from B->A. // Rate limit receives "transfer/channel-0/stake" in the packet and should turn it into "stake" // types.ReceiverChainIsSource(packet.GetSourcePort(), packet.GetSourceChannel(), data.Denom) should return true => unprefix. If unprefixed is not local, hash. - suite.fullRecvTest(false) + s.fullRecvTest(false) } // Test no rate limiting occurs when the contract is set, but not quotas are condifured for the path -func (suite *MiddlewareTestSuite) TestSendTransferNoQuota() { +func (s *MiddlewareTestSuite) TestSendTransferNoQuota() { // Setup contract - suite.chainA.StoreContractRateLimiterDirect(&suite.Suite) - initMsg := CreateRateLimiterInitMessage(suite.chainA, "") - addr := suite.chainA.InstantiateContract(&suite.Suite, initMsg, 1) - suite.chainA.RegisterRateLimiterContract(&suite.Suite, addr) + s.chainA.StoreContractRateLimiterDirect(&s.Suite) + initMsg := CreateRateLimiterInitMessage(s.chainA, "") + addr := s.chainA.InstantiateContract(&s.Suite, initMsg, 1) + s.chainA.RegisterRateLimiterContract(&s.Suite, addr) // send 1 token. // If the contract doesn't have a quota for the current channel, all transfers are allowed - _, err := suite.AssertSend(true, suite.MessageFromAToB(sdk.DefaultBondDenom, sdkmath.NewInt(1))) - suite.Assert().NoError(err) + _, err := s.AssertSend(true, s.MessageFromAToB(sdk.DefaultBondDenom, sdkmath.NewInt(1))) + s.Assert().NoError(err) } // Test rate limits are reverted if a "send" fails -func (suite *MiddlewareTestSuite) TestFailedSendTransfer() { - suite.initializeEscrow() +func (s *MiddlewareTestSuite) TestFailedSendTransfer() { + s.initializeEscrow() // Setup contract - suite.chainA.StoreContractRateLimiterDirect(&suite.Suite) - quotas := suite.BuildChannelQuota("weekly", "channel-0", sdk.DefaultBondDenom, 604800, 1, 1) - initMsg := CreateRateLimiterInitMessage(suite.chainA, quotas) - addr := suite.chainA.InstantiateContract(&suite.Suite, initMsg, 1) - suite.chainA.RegisterRateLimiterContract(&suite.Suite, addr) + s.chainA.StoreContractRateLimiterDirect(&s.Suite) + quotas := s.BuildChannelQuota("weekly", "channel-0", sdk.DefaultBondDenom, 604800, 1, 1) + initMsg := CreateRateLimiterInitMessage(s.chainA, quotas) + addr := s.chainA.InstantiateContract(&s.Suite, initMsg, 1) + s.chainA.RegisterRateLimiterContract(&s.Suite, addr) // Get the escrowed amount - provenanceApp := suite.chainA.GetProvenanceApp() + provenanceApp := s.chainA.GetProvenanceApp() // ToDo: This is what we eventually want here, but using the full supply temporarily for performance reasons. See calculateChannelValue // escrowAddress := transfertypes.GetEscrowAddress("transfer", "channel-0") - // escrowed := provenanceApp.BankKeeper.GetBalance(suite.chainA.GetContext(), escrowAddress, sdk.DefaultBondDenom) - escrowed := provenanceApp.BankKeeper.GetSupply(suite.chainA.GetContext(), sdk.DefaultBondDenom) + // escrowed := provenanceApp.BankKeeper.GetBalance(s.chainA.GetContext(), escrowAddress, sdk.DefaultBondDenom) + escrowed := provenanceApp.BankKeeper.GetSupply(s.chainA.GetContext(), sdk.DefaultBondDenom) quota := escrowed.Amount.QuoRaw(100) // 1% of the escrowed amount // Use the whole quota coins := sdk.NewCoin(sdk.DefaultBondDenom, quota) - port := suite.path.EndpointA.ChannelConfig.PortID - channel := suite.path.EndpointA.ChannelID - accountFrom := suite.chainA.SenderAccount.GetAddress().String() + port := s.path.EndpointA.ChannelConfig.PortID + channel := s.path.EndpointA.ChannelID + accountFrom := s.chainA.SenderAccount.GetAddress().String() timeoutHeight := clienttypes.NewHeight(0, 100) memo := "" msg := transfertypes.NewMsgTransfer(port, channel, coins, accountFrom, "INVALID", timeoutHeight, 0, memo) @@ -480,59 +482,59 @@ func (suite *MiddlewareTestSuite) TestFailedSendTransfer() { // for this test so that the failure to receive on chain B happens after the second packet is sent from chain A. // That way we validate that chain A is blocking as expected, but the flow is reverted after the receive failure is // acknowledged on chain A - res, err := suite.chainA.SendMsgsNoCheck(msg) - suite.Assert().NoError(err) + res, err := s.chainA.SendMsgsNoCheck(msg) + s.Assert().NoError(err) // Sending again fails as the quota is filled - _, err = suite.AssertSend(false, suite.MessageFromAToB(sdk.DefaultBondDenom, quota)) - suite.Assert().Error(err) + _, err = s.AssertSend(false, s.MessageFromAToB(sdk.DefaultBondDenom, quota)) + s.Assert().Error(err) // Move forward one block - suite.chainA.NextBlock() - err = suite.chainA.SenderAccount.SetSequence(suite.chainA.SenderAccount.GetSequence() + 1) - suite.Assert().NoError(err) - suite.chainA.Coordinator.IncrementTime() + s.chainA.NextBlock() + err = s.chainA.SenderAccount.SetSequence(s.chainA.SenderAccount.GetSequence() + 1) + s.Assert().NoError(err) + s.chainA.Coordinator.IncrementTime() // Update both clients - err = suite.path.EndpointA.UpdateClient() - suite.Assert().NoError(err) - err = suite.path.EndpointB.UpdateClient() - suite.Assert().NoError(err) + err = s.path.EndpointA.UpdateClient() + s.Assert().NoError(err) + err = s.path.EndpointB.UpdateClient() + s.Assert().NoError(err) // Execute the acknowledgement from chain B in chain A // extract the sent packet - packet, err := ibctesting.ParsePacketFromEvents(res.GetEvents()) - suite.Assert().NoError(err) + packet, err := ibctesting.ParsePacketFromEvents(res.Events) + s.Assert().NoError(err) // recv in chain b - res, err = suite.path.EndpointB.RecvPacketWithResult(packet) - suite.Assert().NoError(err) + txRes, err := s.path.EndpointB.RecvPacketWithResult(packet) + s.Assert().NoError(err) // get the ack from the chain b's response - ack, err := ibctesting.ParseAckFromEvents(res.GetEvents()) - suite.Assert().NoError(err) + ack, err := ibctesting.ParseAckFromEvents(txRes.Events) + s.Assert().NoError(err) // manually relay it to chain a - err = suite.path.EndpointA.AcknowledgePacket(packet, ack) - suite.Assert().NoError(err) + err = s.path.EndpointA.AcknowledgePacket(packet, ack) + s.Assert().NoError(err) // We should be able to send again because the packet that exceeded the quota failed and has been reverted - _, err = suite.AssertSend(true, suite.MessageFromAToB(sdk.DefaultBondDenom, sdkmath.NewInt(1))) - suite.Assert().NoError(err) + _, err = s.AssertSend(true, s.MessageFromAToB(sdk.DefaultBondDenom, sdkmath.NewInt(1))) + s.Assert().NoError(err) } -func (suite *MiddlewareTestSuite) TestUnsetRateLimitingContract() { +func (s *MiddlewareTestSuite) TestUnsetRateLimitingContract() { // Setup contract - suite.chainA.StoreContractRateLimiterDirect(&suite.Suite) - msg := CreateRateLimiterInitMessage(suite.chainA, "") - addr := suite.chainA.InstantiateContract(&suite.Suite, msg, 1) - suite.chainA.RegisterRateLimiterContract(&suite.Suite, addr) + s.chainA.StoreContractRateLimiterDirect(&s.Suite) + msg := CreateRateLimiterInitMessage(s.chainA, "") + addr := s.chainA.InstantiateContract(&s.Suite, msg, 1) + s.chainA.RegisterRateLimiterContract(&s.Suite, addr) // Unset the contract param - suite.chainA.RegisterRateLimiterContract(&suite.Suite, []byte("")) - contractAddress := suite.chainA.GetProvenanceApp().RateLimitingKeeper.GetContractAddress(suite.chainA.GetContext()) - suite.Assert().Equal("", contractAddress, "should unregister contract") + s.chainA.RegisterRateLimiterContract(&s.Suite, []byte("")) + contractAddress := s.chainA.GetProvenanceApp().RateLimitingKeeper.GetContractAddress(s.chainA.GetContext()) + s.Assert().Equal("", contractAddress, "should unregister contract") } @@ -552,7 +554,7 @@ func ExtractAttributes(event sdk.Event) map[string]string { return attrs } for _, a := range event.Attributes { - attrs[string(a.Key)] = string(a.Value) + attrs[a.Key] = a.Value } return attrs } diff --git a/x/ibcratelimit/module/module.go b/x/ibcratelimit/module/module.go index 50f84fb4ca..ecdad2a450 100644 --- a/x/ibcratelimit/module/module.go +++ b/x/ibcratelimit/module/module.go @@ -10,7 +10,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" - abci "github.com/tendermint/tendermint/abci/types" + abci "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" @@ -31,6 +31,7 @@ var ( _ module.AppModule = AppModule{} _ module.AppModuleBasic = AppModuleBasic{} _ module.AppModuleSimulation = AppModule{} + // TODO[1760]: app-module: Add more assertions for the new types and clean up stuff no longer needed. ) // AppModuleBasic defines the basic application module used by the ibcratelimit module. @@ -105,6 +106,12 @@ func NewAppModule(cdc codec.Codec, keeper keeper.Keeper, accountKeeper authkeepe } } +// IsOnePerModuleType is a dummy function that satisfies the OnePerModuleType interface (needed by AppModule). +func (AppModule) IsOnePerModuleType() {} + +// IsAppModule is a dummy function that satisfies the AppModule interface. +func (AppModule) IsAppModule() {} + // GenerateGenesisState creates a randomized GenState of the ibcratelimit module. func (am AppModule) GenerateGenesisState(simState *module.SimulationState) { simulation.RandomizedGenState(simState) @@ -116,12 +123,12 @@ func (am AppModule) ProposalContents(_ module.SimulationState) []simtypes.Weight } // RandomizedParams returns randomized module parameters for param change proposals. -func (am AppModule) RandomizedParams(_ *rand.Rand) []simtypes.ParamChange { +func (am AppModule) RandomizedParams(_ *rand.Rand) []simtypes.LegacyParamChange { return nil } // RegisterStoreDecoder registers a func to decode each module's defined types from their corresponding store key -func (am AppModule) RegisterStoreDecoder(sdr sdk.StoreDecoderRegistry) { +func (am AppModule) RegisterStoreDecoder(sdr simtypes.StoreDecoderRegistry) { sdr[ibcratelimit.StoreKey] = simulation.NewDecodeStore(am.cdc) } @@ -140,19 +147,6 @@ func (AppModule) Name() string { // RegisterInvariants does nothing, there are no invariants to enforce func (AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} -// Deprecated: Route returns the message routing key for the ibcratelimit module. -func (am AppModule) Route() sdk.Route { - return sdk.Route{} -} - -// QuerierRoute returns the route we respond to for abci queries -func (AppModule) QuerierRoute() string { return "" } - -// LegacyQuerierHandler returns the ibcratelimit module sdk.Querier. -func (am AppModule) LegacyQuerierHandler(_ *codec.LegacyAmino) sdk.Querier { - return nil -} - // InitGenesis performs the txfees module's genesis initialization It returns // no validator updates. func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, gs json.RawMessage) []abci.ValidatorUpdate { @@ -173,15 +167,6 @@ func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.Raw // ConsensusVersion implements AppModule/ConsensusVersion. func (AppModule) ConsensusVersion() uint64 { return 1 } -// BeginBlock executes all ABCI BeginBlock logic respective to the ibcratelimit module. -func (am AppModule) BeginBlock(_ sdk.Context, _ abci.RequestBeginBlock) {} - -// EndBlock executes all ABCI EndBlock logic respective to the ibcratelimit module. It -// returns no validator updates. -func (am AppModule) EndBlock(_ sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate { - return []abci.ValidatorUpdate{} -} - // RegisterServices registers a GRPC query service to respond to the // module-specific GRPC queries. func (am AppModule) RegisterServices(cfg module.Configurator) { diff --git a/x/ibcratelimit/packet.go b/x/ibcratelimit/packet.go index d9ac1a279d..652e13cd7b 100644 --- a/x/ibcratelimit/packet.go +++ b/x/ibcratelimit/packet.go @@ -6,9 +6,9 @@ import ( errorsmod "cosmossdk.io/errors" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - transfertypes "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v6/modules/core/02-client/types" - "github.com/cosmos/ibc-go/v6/modules/core/exported" + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + "github.com/cosmos/ibc-go/v8/modules/core/exported" ) const ( diff --git a/x/ibcratelimit/packet_test.go b/x/ibcratelimit/packet_test.go index a6f3f6aff0..0cdf6c8e0d 100644 --- a/x/ibcratelimit/packet_test.go +++ b/x/ibcratelimit/packet_test.go @@ -4,7 +4,7 @@ import ( "encoding/json" "testing" - clienttypes "github.com/cosmos/ibc-go/v6/modules/core/02-client/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" "github.com/provenance-io/provenance/x/ibcratelimit" "github.com/stretchr/testify/assert" ) diff --git a/x/ibcratelimit/simulation/decoder_test.go b/x/ibcratelimit/simulation/decoder_test.go index d392eb7f51..94b8889052 100644 --- a/x/ibcratelimit/simulation/decoder_test.go +++ b/x/ibcratelimit/simulation/decoder_test.go @@ -5,16 +5,17 @@ import ( "github.com/stretchr/testify/assert" - "github.com/cosmos/cosmos-sdk/simapp" "github.com/cosmos/cosmos-sdk/types/kv" + moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" "github.com/provenance-io/provenance/testutil/assertions" "github.com/provenance-io/provenance/x/ibcratelimit" + ibcratelimitmodule "github.com/provenance-io/provenance/x/ibcratelimit/module" "github.com/provenance-io/provenance/x/ibcratelimit/simulation" ) func TestDecodeStore(t *testing.T) { - cdc := simapp.MakeTestEncodingConfig().Codec + cdc := moduletestutil.MakeTestEncodingConfig(ibcratelimitmodule.AppModuleBasic{}).Codec dec := simulation.NewDecodeStore(cdc) params := func(contract string) []byte { p := ibcratelimit.NewParams("contract a") diff --git a/x/ibcratelimit/simulation/genesis.go b/x/ibcratelimit/simulation/genesis.go index c0de7a68b2..7097bcc919 100644 --- a/x/ibcratelimit/simulation/genesis.go +++ b/x/ibcratelimit/simulation/genesis.go @@ -29,7 +29,7 @@ func ContractFn(r *rand.Rand, accs []simtypes.Account) string { func RandomizedGenState(simState *module.SimulationState) { var contract string simState.AppParams.GetOrGenerate( - simState.Cdc, Contract, &contract, simState.Rand, + Contract, &contract, simState.Rand, func(r *rand.Rand) { contract = ContractFn(r, simState.Accounts) }, ) diff --git a/x/ibcratelimit/simulation/operations.go b/x/ibcratelimit/simulation/operations.go index ff4010ff85..7f2f3b7afc 100644 --- a/x/ibcratelimit/simulation/operations.go +++ b/x/ibcratelimit/simulation/operations.go @@ -4,9 +4,12 @@ import ( "fmt" "math/rand" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" + + sdkmath "cosmossdk.io/math" + "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" - "github.com/cosmos/cosmos-sdk/simapp/helpers" sdk "github.com/cosmos/cosmos-sdk/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" @@ -34,7 +37,7 @@ func WeightedOperations( weightMsgUpdateParams int ) - appParams.GetOrGenerate(cdc, OpWeightMsgUpdateParams, &weightMsgUpdateParams, nil, + appParams.GetOrGenerate(OpWeightMsgUpdateParams, &weightMsgUpdateParams, nil, func(_ *rand.Rand) { weightMsgUpdateParams = simappparams.DefaultWeightGovUpdateParams }, @@ -92,20 +95,20 @@ func Dispatch( if err != nil { return simtypes.NoOpMsg(sdk.MsgTypeURL(msg), sdk.MsgTypeURL(msg), "unable to generate fees"), nil, err } - err = testutil.FundAccount(bk, ctx, account.GetAddress(), sdk.NewCoins(sdk.Coin{ + err = testutil.FundAccount(ctx, bk, account.GetAddress(), sdk.NewCoins(sdk.Coin{ Denom: pioconfig.GetProvenanceConfig().BondDenom, - Amount: sdk.NewInt(1_000_000_000_000_000), + Amount: sdkmath.NewInt(1_000_000_000_000_000), })) if err != nil { return simtypes.NoOpMsg(sdk.MsgTypeURL(msg), sdk.MsgTypeURL(msg), "unable to fund account"), nil, err } txGen := simappparams.MakeTestEncodingConfig().TxConfig - tx, err := helpers.GenSignedMockTx( + tx, err := simtestutil.GenSignedMockTx( r, txGen, []sdk.Msg{msg}, fees, - helpers.DefaultGenTxGas, + simtestutil.DefaultGenTxGas, chainID, []uint64{account.GetAccountNumber()}, []uint64{account.GetSequence()}, @@ -120,7 +123,7 @@ func Dispatch( return simtypes.NoOpMsg(sdk.MsgTypeURL(msg), sdk.MsgTypeURL(msg), err.Error()), nil, nil } - return simtypes.NewOperationMsg(msg, true, "", &codec.ProtoCodec{}), futures, nil + return simtypes.NewOperationMsg(msg, true, ""), futures, nil } func RandomAccs(r *rand.Rand, accs []simtypes.Account, count uint64) ([]simtypes.Account, error) { diff --git a/x/ibcratelimit/simulation/operations_test.go b/x/ibcratelimit/simulation/operations_test.go index c1d042f344..ac0d4d8b91 100644 --- a/x/ibcratelimit/simulation/operations_test.go +++ b/x/ibcratelimit/simulation/operations_test.go @@ -6,17 +6,16 @@ import ( "math/rand" "strings" - abci "github.com/tendermint/tendermint/abci/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + "github.com/stretchr/testify/suite" sdk "github.com/cosmos/cosmos-sdk/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" "github.com/cosmos/cosmos-sdk/x/bank/testutil" + "github.com/provenance-io/provenance/app" simappparams "github.com/provenance-io/provenance/app/params" "github.com/provenance-io/provenance/x/ibcratelimit" "github.com/provenance-io/provenance/x/ibcratelimit/simulation" - "github.com/stretchr/testify/suite" ) type SimTestSuite struct { @@ -28,7 +27,7 @@ type SimTestSuite struct { func (s *SimTestSuite) SetupTest() { s.app = app.Setup(s.T()) - s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{}) + s.ctx = s.app.BaseApp.NewContext(false) } // LogOperationMsg logs all fields of the provided operationMsg. @@ -64,7 +63,7 @@ func (s *SimTestSuite) TestWeightedOperations() { accs := s.getTestingAccounts(r, 3) // begin a new block - s.app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) + // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) // TODO[1760]: finalize-block expected := []struct { weight int @@ -106,7 +105,7 @@ func (s *SimTestSuite) TestSimulateMsgGovUpdateParams() { accounts := s.getTestingAccounts(r, 3) // begin a new block - s.app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) + // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) // TODO[1760]: finalize-block // execute operation op := simulation.SimulateMsgGovUpdateParams(*s.app.RateLimitingKeeper, s.app.AccountKeeper, s.app.BankKeeper) @@ -191,7 +190,7 @@ func (s *SimTestSuite) getTestingAccounts(r *rand.Rand, n int) []simtypes.Accoun for _, account := range accounts { acc := s.app.AccountKeeper.NewAccountWithAddress(s.ctx, account.Address) s.app.AccountKeeper.SetAccount(s.ctx, acc) - err := testutil.FundAccount(s.app.BankKeeper, s.ctx, account.Address, initCoins) + err := testutil.FundAccount(s.ctx, s.app.BankKeeper, account.Address, initCoins) s.Require().NoError(err) } diff --git a/x/marker/abci.go b/x/marker/abci.go index 789ab31fb7..a0a2a39988 100644 --- a/x/marker/abci.go +++ b/x/marker/abci.go @@ -4,8 +4,6 @@ import ( "fmt" "time" - abci "github.com/tendermint/tendermint/abci/types" - "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" @@ -15,7 +13,7 @@ import ( ) // BeginBlocker returns the begin blocker for the marker module. -func BeginBlocker(ctx sdk.Context, _ abci.RequestBeginBlock, k keeper.Keeper, bk bankkeeper.Keeper) { +func BeginBlocker(ctx sdk.Context, k keeper.Keeper, bk bankkeeper.Keeper) { defer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), telemetry.MetricKeyBeginBlocker) // Iterate through all marker accounts and check for supply above or below expected targets. var err error @@ -26,7 +24,7 @@ func BeginBlocker(ctx sdk.Context, _ abci.RequestBeginBlock, k keeper.Keeper, bk currentSupply := bk.GetSupply(ctx, record.GetDenom()) // If the current amount of marker coin in circulation doesn't match configured supply, make adjustments - if !requiredSupply.IsEqual(currentSupply) { + if !requiredSupply.Equal(currentSupply) { ctx.Logger().Error( fmt.Sprintf("Current %s supply is NOT at the required amount, adjusting %s to required supply level", record.GetDenom(), currentSupply)) diff --git a/x/marker/abci_test.go b/x/marker/abci_test.go index a6f0b05ac5..b26dfe3b07 100644 --- a/x/marker/abci_test.go +++ b/x/marker/abci_test.go @@ -4,20 +4,20 @@ import ( "testing" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + + sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - "github.com/provenance-io/provenance/app" + piosimapp "github.com/provenance-io/provenance/app" "github.com/provenance-io/provenance/x/marker" "github.com/provenance-io/provenance/x/marker/types" ) func TestBeginBlocker(t *testing.T) { - app := app.Setup(t) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + app := piosimapp.Setup(t) + ctx := app.BaseApp.NewContext(false) testmint := &types.MarkerAccount{ BaseAccount: &authtypes.BaseAccount{ @@ -27,31 +27,31 @@ func TestBeginBlocker(t *testing.T) { Status: types.StatusActive, SupplyFixed: true, Denom: "testmint", - Supply: sdk.NewInt(100), + Supply: sdkmath.NewInt(100), } app.MarkerKeeper.SetMarker(ctx, testmint) // Initial supply of testmint must be zero. - require.Equal(t, app.BankKeeper.GetSupply(ctx, "testmint").Amount, sdk.NewInt(0)) + require.Equal(t, app.BankKeeper.GetSupply(ctx, "testmint").Amount, sdkmath.NewInt(0)) - marker.BeginBlocker(ctx, abci.RequestBeginBlock{}, app.MarkerKeeper, app.BankKeeper) + marker.BeginBlocker(ctx, app.MarkerKeeper, app.BankKeeper) // Post begin block the supply must be 100 - require.Equal(t, app.BankKeeper.GetSupply(ctx, "testmint").Amount, sdk.NewInt(100)) + require.Equal(t, app.BankKeeper.GetSupply(ctx, "testmint").Amount, sdkmath.NewInt(100)) // Reset supply to a lower level - testmint.Supply = sdk.NewInt(50) + testmint.Supply = sdkmath.NewInt(50) app.MarkerKeeper.SetMarker(ctx, testmint) - marker.BeginBlocker(ctx, abci.RequestBeginBlock{}, app.MarkerKeeper, app.BankKeeper) + marker.BeginBlocker(ctx, app.MarkerKeeper, app.BankKeeper) // Post begin block the supply must be 0 - require.Equal(t, app.BankKeeper.GetSupply(ctx, "testmint").Amount, sdk.NewInt(50)) + require.Equal(t, app.BankKeeper.GetSupply(ctx, "testmint").Amount, sdkmath.NewInt(50)) // Cancel marker and zero out supply testmint.Status = types.StatusDestroyed - require.NoError(t, app.MarkerKeeper.AdjustCirculation(ctx, testmint, sdk.NewCoin(testmint.Denom, sdk.ZeroInt()))) + require.NoError(t, app.MarkerKeeper.AdjustCirculation(ctx, testmint, sdk.NewInt64Coin(testmint.Denom, 0))) app.MarkerKeeper.SetMarker(ctx, testmint) // Marker should still exist. @@ -60,7 +60,7 @@ func TestBeginBlocker(t *testing.T) { require.NotNil(t, notDeleted) // Purges destroyed status markers - marker.BeginBlocker(ctx, abci.RequestBeginBlock{}, app.MarkerKeeper, app.BankKeeper) + marker.BeginBlocker(ctx, app.MarkerKeeper, app.BankKeeper) // Marker should no longer exist. deleted, err := app.MarkerKeeper.GetMarker(ctx, types.MustGetMarkerAddress("testmint")) diff --git a/x/marker/client/cli/cli_test.go b/x/marker/client/cli/cli_test.go index c407ec461c..7681794bc3 100644 --- a/x/marker/client/cli/cli_test.go +++ b/x/marker/client/cli/cli_test.go @@ -4,7 +4,6 @@ import ( "encoding/base64" "encoding/json" "fmt" - "io/ioutil" "os" "sort" "strings" @@ -17,7 +16,9 @@ import ( "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" - tmcli "github.com/tendermint/tendermint/libs/cli" + cmtcli "github.com/cometbft/cometbft/libs/cli" + + sdkmath "cosmossdk.io/math" "github.com/cosmos/cosmos-sdk/client/flags" sdktypes "github.com/cosmos/cosmos-sdk/codec/types" @@ -29,8 +30,6 @@ import ( authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" govcli "github.com/cosmos/cosmos-sdk/x/gov/client/cli" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - "github.com/provenance-io/provenance/internal/antewrapper" "github.com/provenance-io/provenance/internal/pioconfig" "github.com/provenance-io/provenance/testutil" @@ -112,34 +111,34 @@ func (s *IntegrationTestSuite) SetupSuite() { var genBalances []banktypes.Balance genBalances = append(genBalances, banktypes.Balance{Address: s.accountAddresses[0].String(), Coins: sdk.NewCoins( sdk.NewCoin(cfg.BondDenom, cfg.StakingTokens), - sdk.NewCoin("authzhotdog", sdk.NewInt(100)), - sdk.NewCoin(s.holderDenom, sdk.NewInt(123)), + sdk.NewInt64Coin("authzhotdog", 100), + sdk.NewInt64Coin(s.holderDenom, 123), ).Sort()}) genBalances = append(genBalances, banktypes.Balance{Address: s.accountAddresses[1].String(), Coins: sdk.NewCoins( sdk.NewCoin(cfg.BondDenom, cfg.StakingTokens), - sdk.NewCoin("authzhotdog", sdk.NewInt(100)), - sdk.NewCoin(s.holderDenom, sdk.NewInt(234)), + sdk.NewInt64Coin("authzhotdog", 100), + sdk.NewInt64Coin(s.holderDenom, 234), ).Sort()}) genBalances = append(genBalances, banktypes.Balance{Address: s.accountAddresses[2].String(), Coins: sdk.NewCoins( sdk.NewCoin(cfg.BondDenom, cfg.StakingTokens), - sdk.NewCoin(s.holderDenom, sdk.NewInt(345)), + sdk.NewInt64Coin(s.holderDenom, 345), ).Sort()}) genBalances = append(genBalances, banktypes.Balance{Address: s.accountAddresses[3].String(), Coins: sdk.NewCoins( sdk.NewCoin(cfg.BondDenom, cfg.StakingTokens), - sdk.NewCoin(s.holderDenom, sdk.NewInt(456)), + sdk.NewInt64Coin(s.holderDenom, 456), ).Sort()}) genBalances = append(genBalances, banktypes.Balance{Address: markertypes.MustGetMarkerAddress("testcoin").String(), Coins: sdk.NewCoins( - sdk.NewCoin("testcoin", sdk.NewInt(1000)), + sdk.NewInt64Coin("testcoin", 1000), ).Sort()}) genBalances = append(genBalances, banktypes.Balance{Address: markertypes.MustGetMarkerAddress("lockedcoin").String(), Coins: sdk.NewCoins( - sdk.NewCoin("lockedcoin", sdk.NewInt(1000)), + sdk.NewInt64Coin("lockedcoin", 1000), ).Sort()}) genBalances = append(genBalances, banktypes.Balance{Address: markertypes.MustGetMarkerAddress("propcoin").String(), Coins: sdk.NewCoins( - sdk.NewCoin("propcoin", sdk.NewInt(1000)), + sdk.NewInt64Coin("propcoin", 1000), ).Sort()}) genBalances = append(genBalances, banktypes.Balance{Address: markertypes.MustGetMarkerAddress("authzhotdog").String(), Coins: sdk.NewCoins( - sdk.NewCoin("authzhotdog", sdk.NewInt(800)), + sdk.NewInt64Coin("authzhotdog", 800), ).Sort()}) var bankGenState banktypes.GenesisState @@ -155,7 +154,7 @@ func (s *IntegrationTestSuite) SetupSuite() { var markerData markertypes.GenesisState markerData.Params.EnableGovernance = true markerData.Params.MaxTotalSupply = 1000000 - markerData.Params.MaxSupply = sdk.NewInt(1000000) + markerData.Params.MaxSupply = sdkmath.NewInt(1000000) // Note: These account numbers get ignored. markerData.Markers = []markertypes.MarkerAccount{ { @@ -168,7 +167,7 @@ func (s *IntegrationTestSuite) SetupSuite() { SupplyFixed: true, MarkerType: markertypes.MarkerType_Coin, AllowGovernanceControl: false, - Supply: sdk.NewInt(1000), + Supply: sdkmath.NewInt(1000), Denom: "testcoin", AllowForcedTransfer: false, }, @@ -182,7 +181,7 @@ func (s *IntegrationTestSuite) SetupSuite() { SupplyFixed: true, MarkerType: markertypes.MarkerType_RestrictedCoin, AllowGovernanceControl: false, - Supply: sdk.NewInt(1000), + Supply: sdkmath.NewInt(1000), Denom: "lockedcoin", AllowForcedTransfer: false, }, @@ -196,7 +195,7 @@ func (s *IntegrationTestSuite) SetupSuite() { SupplyFixed: true, MarkerType: markertypes.MarkerType_Coin, AllowGovernanceControl: true, - Supply: sdk.NewInt(1000), + Supply: sdkmath.NewInt(1000), Denom: "propcoin", AllowForcedTransfer: false, }, @@ -210,7 +209,7 @@ func (s *IntegrationTestSuite) SetupSuite() { SupplyFixed: false, MarkerType: markertypes.MarkerType_Coin, AllowGovernanceControl: true, - Supply: cfg.BondedTokens.Mul(sdk.NewInt(int64(cfg.NumValidators))), + Supply: cfg.BondedTokens.MulRaw(int64(cfg.NumValidators)), Denom: cfg.BondDenom, AllowForcedTransfer: false, }, @@ -224,7 +223,7 @@ func (s *IntegrationTestSuite) SetupSuite() { SupplyFixed: true, MarkerType: markertypes.MarkerType_RestrictedCoin, AllowGovernanceControl: false, - Supply: sdk.NewInt(1000), + Supply: sdkmath.NewInt(1000), Denom: "authzhotdog", AccessControl: []markertypes.AccessGrant{ *markertypes.NewAccessGrant(s.accountAddresses[0], []markertypes.Access{markertypes.Access_Transfer, markertypes.Access_Admin}), @@ -243,7 +242,7 @@ func (s *IntegrationTestSuite) SetupSuite() { SupplyFixed: false, MarkerType: markertypes.MarkerType_RestrictedCoin, AllowGovernanceControl: false, - Supply: sdk.NewInt(3000), + Supply: sdkmath.NewInt(3000), Denom: "hodlercoin", AllowForcedTransfer: true, }, @@ -267,7 +266,7 @@ func (s *IntegrationTestSuite) SetupSuite() { SupplyFixed: false, MarkerType: markertypes.MarkerType_Coin, AllowGovernanceControl: true, - Supply: sdk.NewInt(int64(i * 100000)), + Supply: sdkmath.NewInt(int64(i * 100000)), Denom: denom, AllowForcedTransfer: false, }, @@ -454,7 +453,7 @@ func (s *IntegrationTestSuite) TestMarkerQueryCommands() { "get marker params json", markercli.QueryParamsCmd(), []string{ - fmt.Sprintf("--%s=json", tmcli.OutputFlag), + fmt.Sprintf("--%s=json", cmtcli.OutputFlag), }, `{"max_total_supply":"1000000","enable_governance":true,"unrestricted_denom_regex":"","max_supply":"1000000"}`, }, @@ -463,7 +462,7 @@ func (s *IntegrationTestSuite) TestMarkerQueryCommands() { markercli.MarkerCmd(), []string{ "testcoin", - fmt.Sprintf("--%s=json", tmcli.OutputFlag), + fmt.Sprintf("--%s=json", cmtcli.OutputFlag), }, `{"marker":{"@type":"/provenance.marker.v1.MarkerAccount","base_account":{"address":"cosmos1p3sl9tll0ygj3flwt5r2w0n6fx9p5ngq2tu6mq","pub_key":null,"account_number":"8","sequence":"0"},"manager":"","access_control":[],"status":"MARKER_STATUS_ACTIVE","denom":"testcoin","supply":"1000","marker_type":"MARKER_TYPE_COIN","supply_fixed":true,"allow_governance_control":false,"allow_forced_transfer":false,"required_attributes":[]}}`, }, @@ -472,7 +471,7 @@ func (s *IntegrationTestSuite) TestMarkerQueryCommands() { markercli.MarkerCmd(), []string{ "testcoin", - fmt.Sprintf("--%s=text", tmcli.OutputFlag), + fmt.Sprintf("--%s=text", cmtcli.OutputFlag), }, `marker: '@type': /provenance.marker.v1.MarkerAccount @@ -505,7 +504,7 @@ func (s *IntegrationTestSuite) TestMarkerQueryCommands() { markercli.MarkerCmd(), []string{ "lockedcoin", - fmt.Sprintf("--%s=json", tmcli.OutputFlag), + fmt.Sprintf("--%s=json", cmtcli.OutputFlag), }, `{"marker":{"@type":"/provenance.marker.v1.MarkerAccount","base_account":{"address":"cosmos16437wt0xtqtuw0pn4vt8rlf8gr2plz2det0mt2","pub_key":null,"account_number":"9","sequence":"0"},"manager":"","access_control":[],"status":"MARKER_STATUS_ACTIVE","denom":"lockedcoin","supply":"1000","marker_type":"MARKER_TYPE_RESTRICTED","supply_fixed":true,"allow_governance_control":false,"allow_forced_transfer":false,"required_attributes":[]}}`, }, @@ -556,7 +555,7 @@ func (s *IntegrationTestSuite) TestMarkerQueryCommands() { []string{ s.cfg.BondDenom, }, - fmt.Sprintf("amount:\n amount: \"%s\"\n denom: %s", s.cfg.BondedTokens.Mul(sdk.NewInt(int64(s.cfg.NumValidators))), s.cfg.BondDenom), + fmt.Sprintf("amount:\n amount: \"%s\"\n denom: %s", s.cfg.BondedTokens.MulRaw(int64(s.cfg.NumValidators)), s.cfg.BondDenom), }, { name: "account data", @@ -603,8 +602,8 @@ func (s *IntegrationTestSuite) TestMarkerTxCommands() { fmt.Sprintf("--%s=%s", markercli.FlagAllowGovernanceControl, "true"), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, false, &sdk.TxResponse{}, 0, }, @@ -618,8 +617,8 @@ func (s *IntegrationTestSuite) TestMarkerTxCommands() { fmt.Sprintf("--%s=%s", markercli.FlagAllowGovernanceControl, "true"), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, false, &sdk.TxResponse{}, 0, }, @@ -633,8 +632,8 @@ func (s *IntegrationTestSuite) TestMarkerTxCommands() { fmt.Sprintf("--%s=%s", markercli.FlagAllowGovernanceControl, "wrong"), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, true, &sdk.TxResponse{}, 0, }, @@ -648,8 +647,8 @@ func (s *IntegrationTestSuite) TestMarkerTxCommands() { fmt.Sprintf("--%s=%s", markercli.FlagAllowGovernanceControl, "true"), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, true, &sdk.TxResponse{}, 0, }, @@ -660,11 +659,11 @@ func (s *IntegrationTestSuite) TestMarkerTxCommands() { "hotdog", s.testnet.Validators[0].Address.String(), s.accountAddresses[0].String(), - fmt.Sprintf("--%s=%s", markercli.FlagSpendLimit, sdk.NewCoin("stake", sdk.NewInt(100))), + fmt.Sprintf("--%s=%s", markercli.FlagSpendLimit, sdk.NewInt64Coin("stake", 100)), fmt.Sprintf("--%s=%s", markercli.FlagExpiration, getFormattedExpiration(oneYear)), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, false, &sdk.TxResponse{}, 4, }, @@ -677,8 +676,8 @@ func (s *IntegrationTestSuite) TestMarkerTxCommands() { "admin", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, false, &sdk.TxResponse{}, 0, }, @@ -691,8 +690,8 @@ func (s *IntegrationTestSuite) TestMarkerTxCommands() { "mint,burn,transfer,withdraw,deposit", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, false, &sdk.TxResponse{}, 0, }, @@ -703,8 +702,8 @@ func (s *IntegrationTestSuite) TestMarkerTxCommands() { "100hotdog", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, false, &sdk.TxResponse{}, 0, }, @@ -715,8 +714,8 @@ func (s *IntegrationTestSuite) TestMarkerTxCommands() { "100hotdog", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, false, &sdk.TxResponse{}, 0, }, @@ -727,8 +726,8 @@ func (s *IntegrationTestSuite) TestMarkerTxCommands() { "hotdog", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, false, &sdk.TxResponse{}, 0, }, @@ -739,8 +738,8 @@ func (s *IntegrationTestSuite) TestMarkerTxCommands() { "hotdog", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, false, &sdk.TxResponse{}, 0, }, @@ -751,11 +750,11 @@ func (s *IntegrationTestSuite) TestMarkerTxCommands() { "hotdog", s.testnet.Validators[0].Address.String(), s.accountAddresses[0].String(), - fmt.Sprintf("--%s=%s", markercli.FlagSpendLimit, sdk.NewCoin("stake", sdk.NewInt(100))), + fmt.Sprintf("--%s=%s", markercli.FlagSpendLimit, sdk.NewInt64Coin("stake", 100)), fmt.Sprintf("--%s=%s", markercli.FlagExpiration, getFormattedExpiration(oneYear)), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, false, &sdk.TxResponse{}, 0, }, @@ -767,11 +766,11 @@ func (s *IntegrationTestSuite) TestMarkerTxCommands() { s.testnet.Validators[0].Address.String(), s.accountAddresses[0].String(), fmt.Sprintf("--%s=%v", markercli.FlagPeriod, oneHour), - fmt.Sprintf("--%s=%s", markercli.FlagPeriodLimit, sdk.NewCoin("stake", sdk.NewInt(100))), + fmt.Sprintf("--%s=%s", markercli.FlagPeriodLimit, sdk.NewInt64Coin("stake", 100)), fmt.Sprintf("--%s=%s", markercli.FlagExpiration, getFormattedExpiration(oneYear)), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, false, &sdk.TxResponse{}, 0, }, @@ -783,8 +782,8 @@ func (s *IntegrationTestSuite) TestMarkerTxCommands() { "incorrect-denom-blah", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, true, &sdk.TxResponse{}, 0, }, @@ -797,8 +796,8 @@ func (s *IntegrationTestSuite) TestMarkerTxCommands() { "invalid-recipient", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, true, &sdk.TxResponse{}, 0, }, @@ -811,8 +810,8 @@ func (s *IntegrationTestSuite) TestMarkerTxCommands() { s.accountAddresses[0].String(), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, false, &sdk.TxResponse{}, 0, }, @@ -824,8 +823,8 @@ func (s *IntegrationTestSuite) TestMarkerTxCommands() { "200hotdog", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, false, &sdk.TxResponse{}, 0, }, @@ -838,8 +837,8 @@ func (s *IntegrationTestSuite) TestMarkerTxCommands() { "100hotdog", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, true, &sdk.TxResponse{}, 0, }, @@ -852,8 +851,8 @@ func (s *IntegrationTestSuite) TestMarkerTxCommands() { "100hotdog", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, true, &sdk.TxResponse{}, 0, }, @@ -866,8 +865,8 @@ func (s *IntegrationTestSuite) TestMarkerTxCommands() { "hotdog", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, true, &sdk.TxResponse{}, 0, }, @@ -880,8 +879,8 @@ func (s *IntegrationTestSuite) TestMarkerTxCommands() { "100hotdog,200koinz", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, true, &sdk.TxResponse{}, 0, }, @@ -894,8 +893,8 @@ func (s *IntegrationTestSuite) TestMarkerTxCommands() { "100hotdog", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, false, &sdk.TxResponse{}, 0, }, @@ -907,8 +906,8 @@ func (s *IntegrationTestSuite) TestMarkerTxCommands() { fmt.Sprintf("--%s", attrcli.FlagValue), "Not as good as corndog.", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErr: false, respType: &sdk.TxResponse{}, @@ -922,8 +921,8 @@ func (s *IntegrationTestSuite) TestMarkerTxCommands() { "hotdog", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, false, &sdk.TxResponse{}, 0, }, @@ -936,8 +935,8 @@ func (s *IntegrationTestSuite) TestMarkerTxCommands() { fmt.Sprintf("--%s", markercli.FlagGovProposal), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErr: false, respType: &sdk.TxResponse{}, @@ -983,16 +982,19 @@ func (s *IntegrationTestSuite) TestMarkerTxCommands() { args: []string{markertypes.MustGetMarkerAddress("hotdog").String()}, expOut: []string{"value: Not as good as corndog."}, }, - { - name: "gov prop created for account data", - cmd: govcli.GetCmdQueryProposals(), - expOut: []string{ - "'@type': /provenance.marker.v1.MsgSetAccountDataRequest", - "denom: hotdog", - "signer: " + authtypes.NewModuleAddress(govtypes.ModuleName).String(), - "value: Better than corndog.", + // TODO[1760]: gov: Put back once we know how to query proposals again. + /* + { + name: "gov prop created for account data", + cmd: govcli.GetCmdQueryProposals(), + expOut: []string{ + "'@type': /provenance.marker.v1.MsgSetAccountDataRequest", + "denom: hotdog", + "signer: " + authtypes.NewModuleAddress(govtypes.ModuleName).String(), + "value: Better than corndog.", + }, }, - }, + */ } for _, check := range checks { @@ -1097,8 +1099,8 @@ func (s *IntegrationTestSuite) TestMarkerIbcTransfer() { } args = append(args, []string{fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }...) if len(tc.flagPacketTimeoutHeight) > 0 { args = append(args, fmt.Sprintf("--%s=%s", markercli.FlagPacketTimeoutHeight, tc.flagPacketTimeoutHeight)) @@ -1198,8 +1200,8 @@ func (s *IntegrationTestSuite) TestMarkerAuthzTxCommands() { clientCtx := s.testnet.Validators[0].ClientCtx.WithKeyringDir(s.keyringDir).WithKeyring(s.keyring) tc.args = append(tc.args, fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation)) - tc.args = append(tc.args, fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock)) - tc.args = append(tc.args, fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String())) + tc.args = append(tc.args, fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync)) // TODO[1760]: broadcast + tc.args = append(tc.args, fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String())) out, err := clitestutil.ExecTestCLICmd(clientCtx, markercli.GetCmdGrantAuthorization(), tc.args) if len(tc.expectedErr) > 0 { @@ -1294,7 +1296,7 @@ func (s *IntegrationTestSuite) TestMarkerTxGovProposals() { s.Run(tc.name, func() { clientCtx := s.testnet.Validators[0].ClientCtx - p, err := ioutil.TempFile("", "*") + p, err := os.CreateTemp("", "*") tmpFile := p.Name() s.Require().NoError(err) @@ -1306,11 +1308,11 @@ func (s *IntegrationTestSuite) TestMarkerTxGovProposals() { args := []string{ tc.proposaltype, tmpFile, - sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String(), + sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String(), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), fmt.Sprintf("--%s=%s", flags.FlagGas, "500000"), } s.T().Logf("args: %q", args) @@ -1330,7 +1332,7 @@ func (s *IntegrationTestSuite) TestMarkerTxGovProposals() { } func (s *IntegrationTestSuite) TestPaginationWithPageKey() { - asJson := fmt.Sprintf("--%s=json", tmcli.OutputFlag) + asJson := fmt.Sprintf("--%s=json", cmtcli.OutputFlag) // Because other tests might have run before this and added markers, // the s.markerCount variable isn't necessarily how many markers exist right now. @@ -1477,8 +1479,8 @@ func (s *IntegrationTestSuite) TestAddFinalizeActivateMarkerTxCommands() { fmt.Sprintf("--%s=%s", markercli.FlagAllowGovernanceControl, "true"), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, false, &sdk.TxResponse{}, 0, }, @@ -1493,8 +1495,8 @@ func (s *IntegrationTestSuite) TestAddFinalizeActivateMarkerTxCommands() { fmt.Sprintf("--%s=%s", markercli.FlagAllowGovernanceControl, "true"), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, false, &sdk.TxResponse{}, 0, }, @@ -1508,8 +1510,8 @@ func (s *IntegrationTestSuite) TestAddFinalizeActivateMarkerTxCommands() { fmt.Sprintf("--%s=%s", markercli.FlagAllowGovernanceControl, "true"), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, true, &sdk.TxResponse{}, 0, }, @@ -1524,8 +1526,8 @@ func (s *IntegrationTestSuite) TestAddFinalizeActivateMarkerTxCommands() { fmt.Sprintf("--%s=%s", markercli.FlagAllowGovernanceControl, "true"), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, false, &sdk.TxResponse{}, 0, }, @@ -1540,8 +1542,8 @@ func (s *IntegrationTestSuite) TestAddFinalizeActivateMarkerTxCommands() { fmt.Sprintf("--%s=%s", markercli.FlagAllowGovernanceControl, "wrong"), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, true, &sdk.TxResponse{}, 0, }, @@ -1556,8 +1558,8 @@ func (s *IntegrationTestSuite) TestAddFinalizeActivateMarkerTxCommands() { fmt.Sprintf("--%s=%s", markercli.FlagAllowGovernanceControl, "true"), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, true, &sdk.TxResponse{}, 0, }, @@ -1596,8 +1598,8 @@ func (s *IntegrationTestSuite) TestUpdateRequiredAttributesTxCommand() { "newhotdog", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedError: "both add and remove lists cannot be empty", }, @@ -1612,8 +1614,8 @@ func (s *IntegrationTestSuite) TestUpdateRequiredAttributesTxCommand() { fmt.Sprintf("--%s=%s", govcli.FlagDeposit, "blah"), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedError: "invalid deposit: invalid decimal coin expression: blah", }, @@ -1628,8 +1630,8 @@ func (s *IntegrationTestSuite) TestUpdateRequiredAttributesTxCommand() { fmt.Sprintf("--%s=%s", govcli.FlagDeposit, "100jackthecat"), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, }, { @@ -1641,8 +1643,8 @@ func (s *IntegrationTestSuite) TestUpdateRequiredAttributesTxCommand() { fmt.Sprintf("--%s=%s", markercli.FlagRemove, "bar.provenance.io"), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, }, } @@ -1669,8 +1671,8 @@ func (s *IntegrationTestSuite) TestGetCmdUpdateForcedTransfer() { return append(args, fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), ) } @@ -1763,8 +1765,8 @@ func (s *IntegrationTestSuite) TestGetCmdAddNetAssetValues() { return append(args, fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), ) } @@ -1866,13 +1868,13 @@ func (s *IntegrationTestSuite) TestParseAccessGrantFromString() { name: "should succeed to add access type", accessGrantString: fmt.Sprintf("%s,mint;", s.accountAddresses[0].String()), expPanic: false, - expResult: []types.AccessGrant{markertypes.AccessGrant{Address: s.accountAddresses[0].String(), Permissions: []markertypes.Access{markertypes.Access_Mint}}}, + expResult: []types.AccessGrant{{Address: s.accountAddresses[0].String(), Permissions: []markertypes.Access{markertypes.Access_Mint}}}, }, { name: "should succeed to add access type", accessGrantString: fmt.Sprintf("%s,mint;", s.accountAddresses[0].String()), expPanic: false, - expResult: []types.AccessGrant{markertypes.AccessGrant{Address: s.accountAddresses[0].String(), Permissions: []markertypes.Access{markertypes.Access_Mint}}}, + expResult: []types.AccessGrant{{Address: s.accountAddresses[0].String(), Permissions: []markertypes.Access{markertypes.Access_Mint}}}, }, } for _, tc := range testCases { diff --git a/x/marker/client/cli/query.go b/x/marker/client/cli/query.go index 6baa36df59..84d0527656 100644 --- a/x/marker/client/cli/query.go +++ b/x/marker/client/cli/query.go @@ -81,7 +81,7 @@ func AllMarkersCmd() *cobra.Command { } queryClient := types.NewQueryClient(clientCtx) - pageReq, err := client.ReadPageRequestWithPageKeyDecoded(cmd.Flags()) + pageReq, err := client.ReadPageRequest(cmd.Flags()) // TODO[1760]: cli: ReadPageRequestWithPageKeyDecoded if err != nil { return err } @@ -128,7 +128,7 @@ func AllHoldersCmd() *cobra.Command { } id := strings.ToLower(strings.TrimSpace(args[0])) queryClient := types.NewQueryClient(clientCtx) - pageReq, err := client.ReadPageRequestWithPageKeyDecoded(cmd.Flags()) + pageReq, err := client.ReadPageRequest(cmd.Flags()) // TODO[1760]: cli: ReadPageRequestWithPageKeyDecoded if err != nil { return err } diff --git a/x/marker/client/cli/tx.go b/x/marker/client/cli/tx.go index 08304d3b64..8acf02cd56 100644 --- a/x/marker/client/cli/tx.go +++ b/x/marker/client/cli/tx.go @@ -13,6 +13,7 @@ import ( "github.com/spf13/pflag" cerrs "cosmossdk.io/errors" + "cosmossdk.io/x/feegrant" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" @@ -22,12 +23,12 @@ import ( "github.com/cosmos/cosmos-sdk/version" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "github.com/cosmos/cosmos-sdk/x/authz" - "github.com/cosmos/cosmos-sdk/x/feegrant" - govcli "github.com/cosmos/cosmos-sdk/x/gov/client/cli" + + // govcli "github.com/cosmos/cosmos-sdk/x/gov/client/cli" // TODO[1760]: gov-cli govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" govtypesv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" - clienttypes "github.com/cosmos/ibc-go/v6/modules/core/02-client/types" - channelutils "github.com/cosmos/ibc-go/v6/modules/core/04-channel/client/utils" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + channelutils "github.com/cosmos/ibc-go/v8/modules/core/04-channel/client/utils" attrcli "github.com/provenance-io/provenance/x/attribute/client/cli" "github.com/provenance-io/provenance/x/marker/types" @@ -1050,16 +1051,13 @@ func GetCmdUpdateForcedTransfer() *cobra.Command { return err } - err = msg.ValidateBasic() - if err != nil { - return err - } - - return govcli.GenerateOrBroadcastTxCLIAsGovProp(clientCtx, cmd.Flags(), msg) + // return govcli.GenerateOrBroadcastTxCLIAsGovProp(clientCtx, cmd.Flags(), msg) // TODO[1760]: gov-cli + _, _ = msg, clientCtx + return fmt.Errorf("not yet updated") }, } - govcli.AddGovPropFlagsToCmd(cmd) + // govcli.AddGovPropFlagsToCmd(cmd) // TODO[1760]: gov-cli flags.AddTxFlagsToCmd(cmd) return cmd } @@ -1171,11 +1169,6 @@ func GetCmdAddNetAssetValues() *cobra.Command { return err } - msg := types.NewMsgAddNetAssetValuesRequest(denom, clientCtx.From, netAssetValues) - if err := msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), types.NewMsgAddNetAssetValuesRequest(denom, clientCtx.From, netAssetValues)) }, } @@ -1333,7 +1326,7 @@ func ParseBoolStrict(input string) (bool, error) { // See also: generateOrBroadcastOptGovProp func addOptGovPropFlags(cmd *cobra.Command) { cmd.Flags().Bool(FlagGovProposal, false, "submit message as a gov proposal") - govcli.AddGovPropFlagsToCmd(cmd) + // govcli.AddGovPropFlagsToCmd(cmd) // TODO[1760]: gov-cli } // generateOrBroadcastOptGovProp either calls GenerateOrBroadcastTxCLIAsGovProp or GenerateOrBroadcastTxCLI @@ -1353,13 +1346,9 @@ func generateOrBroadcastOptGovProp(clientCtx client.Context, flagSet *pflag.Flag authSetter(clientCtx.GetFromAddress().String()) } - err = msg.ValidateBasic() - if err != nil { - return err - } - if isGov { - return govcli.GenerateOrBroadcastTxCLIAsGovProp(clientCtx, flagSet, msg) + // return govcli.GenerateOrBroadcastTxCLIAsGovProp(clientCtx, flagSet, msg) // TODO[1760]: gov-cli + return fmt.Errorf("not yet updated") } return tx.GenerateOrBroadcastTxCLI(clientCtx, flagSet, msg) } diff --git a/x/marker/handler.go b/x/marker/handler.go index 673b2ac5cc..e4f4a7c673 100644 --- a/x/marker/handler.go +++ b/x/marker/handler.go @@ -10,7 +10,8 @@ import ( ) // NewHandler returns a handler for marker messages. -func NewHandler(k keeper.Keeper) sdk.Handler { +// TODO[1760]: marker: Delete the marker NewHandler. +func NewHandler(k keeper.Keeper) func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { msgServer := keeper.NewMsgServerImpl(k) return func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { diff --git a/x/marker/handler_test.go b/x/marker/handler_test.go index acd3091c6a..5aa9860367 100644 --- a/x/marker/handler_test.go +++ b/x/marker/handler_test.go @@ -5,14 +5,14 @@ import ( "testing" "github.com/golang/protobuf/proto" - - attrtypes "github.com/provenance-io/provenance/x/attribute/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" + cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" + + sdkmath "cosmossdk.io/math" + "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256r1" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" @@ -22,17 +22,20 @@ import ( govtypesv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" "github.com/provenance-io/provenance/app" + attrtypes "github.com/provenance-io/provenance/x/attribute/types" "github.com/provenance-io/provenance/x/marker" "github.com/provenance-io/provenance/x/marker/keeper" "github.com/provenance-io/provenance/x/marker/types" ) +// TODO[1760]: marker: Migrate the marker handler tests to the keeper. + type HandlerTestSuite struct { suite.Suite app *app.App ctx sdk.Context - handler sdk.Handler + handler func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) pubkey1 cryptotypes.PubKey user1 string @@ -45,7 +48,7 @@ type HandlerTestSuite struct { func (s *HandlerTestSuite) SetupTest() { s.app = app.Setup(s.T()) - s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{}) + s.ctx = s.app.BaseApp.NewContext(false) s.handler = marker.NewHandler(s.app.MarkerKeeper) s.pubkey1 = secp256k1.GenPrivKey().PubKey() @@ -71,7 +74,7 @@ func TestInvalidMsg(t *testing.T) { k := keeper.Keeper{} h := marker.NewHandler(k) - res, err := h(sdk.NewContext(nil, tmproto.Header{}, false, nil), testdata.NewTestMsg()) + res, err := h(sdk.NewContext(nil, cmtproto.Header{}, false, nil), testdata.NewTestMsg()) require.Error(t, err) require.Nil(t, res) require.Contains(t, err.Error(), "unrecognized marker message type") @@ -82,7 +85,7 @@ func TestInvalidProposal(t *testing.T) { k := keeper.Keeper{} h := marker.NewProposalHandler(k) - err := h(sdk.NewContext(nil, tmproto.Header{}, false, nil), govtypesv1beta1.NewTextProposal("Test", "description")) + err := h(sdk.NewContext(nil, cmtproto.Header{}, false, nil), govtypesv1beta1.NewTextProposal("Test", "description")) require.ErrorContains(t, err, "unrecognized marker proposal content type: *v1beta1.TextProposal") } @@ -135,7 +138,7 @@ func (s *HandlerTestSuite) TestMsgAddAccessRequest() { cases := []CommonTest{ { name: "setup new marker for test", - msg: types.NewMsgAddMarkerRequest("hotdog", sdk.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0), + msg: types.NewMsgAddMarkerRequest("hotdog", sdkmath.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0), }, { name: "should successfully grant access to marker", @@ -168,7 +171,7 @@ func (s *HandlerTestSuite) TestMsgDeleteAccessMarkerRequest() { cases := []CommonTest{ { name: "setup new marker for test", - msg: types.NewMsgAddMarkerRequest(hotdogDenom, sdk.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0), + msg: types.NewMsgAddMarkerRequest(hotdogDenom, sdkmath.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0), }, { name: "setup grant access to marker", @@ -189,7 +192,7 @@ func (s *HandlerTestSuite) TestMsgActivateMarkerRequest() { cases := []CommonTest{ { name: "setup new marker for test", - msg: types.NewMsgAddMarkerRequest(hotdogDenom, sdk.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0), + msg: types.NewMsgAddMarkerRequest(hotdogDenom, sdkmath.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0), }, { name: "setup finalize marker", @@ -214,7 +217,7 @@ func (s *HandlerTestSuite) TestMsgCancelMarkerRequest() { cases := []CommonTest{ { name: "setup new marker for test", - msg: types.NewMsgAddMarkerRequest(hotdogDenom, sdk.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0), + msg: types.NewMsgAddMarkerRequest(hotdogDenom, sdkmath.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0), }, { name: "setup grant delete access to marker", @@ -239,7 +242,7 @@ func (s *HandlerTestSuite) TestMsgDeleteMarkerRequest() { cases := []CommonTest{ { name: "setup new marker for test", - msg: types.NewMsgAddMarkerRequest(hotdogDenom, sdk.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0), + msg: types.NewMsgAddMarkerRequest(hotdogDenom, sdkmath.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0), }, { name: "setup grant delete access to marker", @@ -268,7 +271,7 @@ func (s *HandlerTestSuite) TestMsgMintMarkerRequest() { cases := []CommonTest{ { name: "setup new marker for test", - msg: types.NewMsgAddMarkerRequest(hotdogDenom, sdk.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0), + msg: types.NewMsgAddMarkerRequest(hotdogDenom, sdkmath.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0), }, { name: "setup grant mint access to marker", @@ -276,7 +279,7 @@ func (s *HandlerTestSuite) TestMsgMintMarkerRequest() { }, { name: "should successfully mint marker", - msg: types.NewMsgMintRequest(s.user1Addr, sdk.NewCoin(hotdogDenom, sdk.NewInt(100))), + msg: types.NewMsgMintRequest(s.user1Addr, sdk.NewInt64Coin(hotdogDenom, 100)), expectedEvent: types.NewEventMarkerMint("100", hotdogDenom, s.user1), }, } @@ -293,7 +296,7 @@ func (s *HandlerTestSuite) TestMsgBurnMarkerRequest() { cases := []CommonTest{ { name: "setup new marker for test", - msg: types.NewMsgAddMarkerRequest(hotdogDenom, sdk.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0), + msg: types.NewMsgAddMarkerRequest(hotdogDenom, sdkmath.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0), }, { name: "setup grant mint access to marker", @@ -301,7 +304,7 @@ func (s *HandlerTestSuite) TestMsgBurnMarkerRequest() { }, { name: "should successfully burn marker", - msg: types.NewMsgBurnRequest(s.user1Addr, sdk.NewCoin(hotdogDenom, sdk.NewInt(100))), + msg: types.NewMsgBurnRequest(s.user1Addr, sdk.NewInt64Coin(hotdogDenom, 100)), expectedEvent: types.NewEventMarkerBurn("100", hotdogDenom, s.user1), }, } @@ -318,7 +321,7 @@ func (s *HandlerTestSuite) TestMsgWithdrawMarkerRequest() { cases := []CommonTest{ { name: "setup new marker for test", - msg: types.NewMsgAddMarkerRequest(hotdogDenom, sdk.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0), + msg: types.NewMsgAddMarkerRequest(hotdogDenom, sdkmath.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0), }, { name: "setup grant access to marker", @@ -334,7 +337,7 @@ func (s *HandlerTestSuite) TestMsgWithdrawMarkerRequest() { }, { name: "should successfully withdraw marker", - msg: types.NewMsgWithdrawRequest(s.user1Addr, s.user1Addr, hotdogDenom, sdk.NewCoins(sdk.NewCoin(hotdogDenom, sdk.NewInt(100)))), + msg: types.NewMsgWithdrawRequest(s.user1Addr, s.user1Addr, hotdogDenom, sdk.NewCoins(sdk.NewInt64Coin(hotdogDenom, 100))), expectedEvent: types.NewEventMarkerWithdraw("100hotdog", hotdogDenom, s.user1, s.user1), }, } @@ -351,7 +354,7 @@ func (s *HandlerTestSuite) TestMsgTransferMarkerRequest() { cases := []CommonTest{ { name: "setup new marker for test", - msg: types.NewMsgAddMarkerRequest(hotdogDenom, sdk.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_RestrictedCoin, true, true, false, []string{}, 0, 0), + msg: types.NewMsgAddMarkerRequest(hotdogDenom, sdkmath.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_RestrictedCoin, true, true, false, []string{}, 0, 0), }, { name: "setup grant access to marker", @@ -367,11 +370,11 @@ func (s *HandlerTestSuite) TestMsgTransferMarkerRequest() { }, { name: "should successfully mint marker", - msg: types.NewMsgMintRequest(s.user1Addr, sdk.NewCoin(hotdogDenom, sdk.NewInt(1000))), + msg: types.NewMsgMintRequest(s.user1Addr, sdk.NewInt64Coin(hotdogDenom, 1000)), }, { name: "should successfully transfer marker", - msg: types.NewMsgTransferRequest(s.user1Addr, s.user1Addr, s.user2Addr, sdk.NewCoin(hotdogDenom, sdk.NewInt(0))), + msg: types.NewMsgTransferRequest(s.user1Addr, s.user1Addr, s.user2Addr, sdk.NewInt64Coin(hotdogDenom, 0)), expectedEvent: types.NewEventMarkerTransfer("0", hotdogDenom, s.user1, s.user2, s.user1), }, } @@ -404,7 +407,7 @@ func (s *HandlerTestSuite) TestMsgSetDenomMetadataRequest() { cases := []CommonTest{ { name: "setup new marker for test", - msg: types.NewMsgAddMarkerRequest(fmt.Sprintf("n%s", hotdogDenom), sdk.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_RestrictedCoin, true, true, false, []string{}, 0, 0), + msg: types.NewMsgAddMarkerRequest(fmt.Sprintf("n%s", hotdogDenom), sdkmath.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_RestrictedCoin, true, true, false, []string{}, 0, 0), }, { name: "setup grant access to marker", @@ -423,10 +426,10 @@ func (s *HandlerTestSuite) TestMsgAddFinalizeActivateMarkerRequest() { denom := "hotdog" rdenom := "restrictedhotdog" denomWithDashPeriod := fmt.Sprintf("%s-my.marker", denom) - msgWithActiveStatus := types.NewMsgAddFinalizeActivateMarkerRequest(denom, sdk.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_Coin, true, true, false, []string{}, []types.AccessGrant{*types.NewAccessGrant(s.user1Addr, []types.Access{types.Access_Mint, types.Access_Admin})}, 0, 0) - msgWithActiveStatusAttr := types.NewMsgAddFinalizeActivateMarkerRequest(rdenom, sdk.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_RestrictedCoin, true, true, false, []string{"attributes.one.com", "attributes.two.com"}, []types.AccessGrant{*types.NewAccessGrant(s.user1Addr, []types.Access{types.Access_Mint, types.Access_Admin})}, 0, 0) + msgWithActiveStatus := types.NewMsgAddFinalizeActivateMarkerRequest(denom, sdkmath.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_Coin, true, true, false, []string{}, []types.AccessGrant{*types.NewAccessGrant(s.user1Addr, []types.Access{types.Access_Mint, types.Access_Admin})}, 0, 0) + msgWithActiveStatusAttr := types.NewMsgAddFinalizeActivateMarkerRequest(rdenom, sdkmath.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_RestrictedCoin, true, true, false, []string{"attributes.one.com", "attributes.two.com"}, []types.AccessGrant{*types.NewAccessGrant(s.user1Addr, []types.Access{types.Access_Mint, types.Access_Admin})}, 0, 0) - accessGrantWrongStatus := types.NewMsgAddFinalizeActivateMarkerRequest(denom, sdk.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_Coin, true, true, false, []string{}, nil, 0, 0) + accessGrantWrongStatus := types.NewMsgAddFinalizeActivateMarkerRequest(denom, sdkmath.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_Coin, true, true, false, []string{}, nil, 0, 0) cases := []CommonTest{ { @@ -446,12 +449,12 @@ func (s *HandlerTestSuite) TestMsgAddFinalizeActivateMarkerRequest() { }, { name: "should fail to ADD,FINALIZE,ACTIVATE new marker, marker already exists", - msg: types.NewMsgAddMarkerRequest(denom, sdk.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0), + msg: types.NewMsgAddMarkerRequest(denom, sdkmath.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0), errorMsg: fmt.Sprintf("marker address already exists for %s: invalid request", types.MustGetMarkerAddress(denom)), }, { name: "should successfully add marker with dash and period", - msg: types.NewMsgAddMarkerRequest(denomWithDashPeriod, sdk.NewInt(1000), s.user1Addr, s.user1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0), + msg: types.NewMsgAddMarkerRequest(denomWithDashPeriod, sdkmath.NewInt(1000), s.user1Addr, s.user1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0), expectedEvent: types.NewEventMarkerAdd(denomWithDashPeriod, types.MustGetMarkerAddress(denomWithDashPeriod).String(), "1000", "proposed", s.user1, types.MarkerType_Coin.String()), }, { @@ -485,7 +488,7 @@ func (s *HandlerTestSuite) TestMsgSetAccountDataRequest() { { name: "should successfully add/finalize/active unrestricted marker", msg: types.NewMsgAddFinalizeActivateMarkerRequest( - denomU, sdk.NewInt(100), + denomU, sdkmath.NewInt(100), s.user1Addr, s.user1Addr, // From and Manager. types.MarkerType_Coin, true, // Supply fixed @@ -503,7 +506,7 @@ func (s *HandlerTestSuite) TestMsgSetAccountDataRequest() { { name: "should successfully add/finalize/active restricted marker", msg: types.NewMsgAddFinalizeActivateMarkerRequest( - denomR, sdk.NewInt(100), + denomR, sdkmath.NewInt(100), s.user1Addr, s.user1Addr, // From and Manager. types.MarkerType_RestrictedCoin, true, // Supply fixed diff --git a/x/marker/keeper/denom_test.go b/x/marker/keeper/denom_test.go index 895b5c9d75..e5c93a997b 100644 --- a/x/marker/keeper/denom_test.go +++ b/x/marker/keeper/denom_test.go @@ -5,7 +5,6 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" simapp "github.com/provenance-io/provenance/app" @@ -25,7 +24,7 @@ type DenomTestSuite struct { func (s *DenomTestSuite) SetupTest() { s.app = simapp.Setup(s.T()) - s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{}) + s.ctx = s.app.BaseApp.NewContext(false) s.app.MarkerKeeper.SetParams(s.ctx, types.DefaultParams()) } diff --git a/x/marker/keeper/genesis.go b/x/marker/keeper/genesis.go index b61106fb53..4c9aafc83f 100644 --- a/x/marker/keeper/genesis.go +++ b/x/marker/keeper/genesis.go @@ -35,7 +35,7 @@ func (k Keeper) InitGenesis(ctx sdk.Context, data *types.GenesisState) { } } else { // no existing account reference so take next account number. - if err := data.Markers[i].SetAccountNumber(k.authKeeper.GetNextAccountNumber(ctx)); err != nil { + if err := data.Markers[i].SetAccountNumber(k.authKeeper.NextAccountNumber(ctx)); err != nil { panic(err) } } diff --git a/x/marker/keeper/invariants.go b/x/marker/keeper/invariants.go index 3500513b02..512b2e08ec 100644 --- a/x/marker/keeper/invariants.go +++ b/x/marker/keeper/invariants.go @@ -36,7 +36,7 @@ func supplyInvariant(mk Keeper, bk bankkeeper.Keeper) sdk.Invariant { currentSupply := bk.GetSupply(ctx, requiredSupply.Denom) // Just log the supply status - if !requiredSupply.IsEqual(currentSupply) { + if !requiredSupply.Equal(currentSupply) { ctx.Logger().Error( fmt.Sprintf("Current %s supply is NOT at the required amount", requiredSupply.Denom), invariantName, currentSupply) diff --git a/x/marker/keeper/invariants_test.go b/x/marker/keeper/invariants_test.go index 84072fa596..35c843b02d 100644 --- a/x/marker/keeper/invariants_test.go +++ b/x/marker/keeper/invariants_test.go @@ -3,12 +3,11 @@ package keeper_test import ( "testing" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - simapp "github.com/provenance-io/provenance/app" + sdk "github.com/cosmos/cosmos-sdk/types" + simapp "github.com/provenance-io/provenance/app" markerkeeper "github.com/provenance-io/provenance/x/marker/keeper" "github.com/provenance-io/provenance/x/marker/types" markertypes "github.com/provenance-io/provenance/x/marker/types" @@ -17,7 +16,7 @@ import ( func TestMarkerInvariant(t *testing.T) { //app, ctx := createTestApp(true) app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) app.MarkerKeeper.SetParams(ctx, markertypes.DefaultParams()) user := testUserAddress("test") @@ -35,7 +34,7 @@ func TestMarkerInvariant(t *testing.T) { }) require.NoError(t, mac.SetManager(user)) - require.NoError(t, mac.SetSupply(sdk.NewCoin(mac.Denom, sdk.OneInt()))) + require.NoError(t, mac.SetSupply(sdk.NewInt64Coin(mac.Denom, 1))) require.NoError(t, app.MarkerKeeper.AddMarkerAccount(ctx, mac)) require.NoError(t, app.MarkerKeeper.SetNetAssetValue(ctx, mac, types.NewNetAssetValue(sdk.NewInt64Coin(types.UsdDenom, 1), 1), "test")) @@ -51,13 +50,13 @@ func TestMarkerInvariant(t *testing.T) { _, isBroken = invariantChecks(ctx) require.False(t, isBroken) - require.NoError(t, app.MarkerKeeper.MintCoin(ctx, user, sdk.NewCoin(mac.GetDenom(), sdk.NewInt(1000)))) + require.NoError(t, app.MarkerKeeper.MintCoin(ctx, user, sdk.NewInt64Coin(mac.GetDenom(), 1000))) // expect pass after mint operation _, isBroken = invariantChecks(ctx) require.False(t, isBroken) - require.NoError(t, app.MarkerKeeper.BurnCoin(ctx, user, sdk.NewCoin(mac.GetDenom(), sdk.NewInt(100)))) + require.NoError(t, app.MarkerKeeper.BurnCoin(ctx, user, sdk.NewInt64Coin(mac.GetDenom(), 100))) // expect pass after burn operation _, isBroken = invariantChecks(ctx) diff --git a/x/marker/keeper/keeper.go b/x/marker/keeper/keeper.go index bfdd3738dd..85854c6a1e 100644 --- a/x/marker/keeper/keeper.go +++ b/x/marker/keeper/keeper.go @@ -3,17 +3,16 @@ package keeper import ( "fmt" - "github.com/tendermint/tendermint/libs/log" - - "cosmossdk.io/math" + "cosmossdk.io/log" + sdkmath "cosmossdk.io/math" + storetypes "cosmossdk.io/store/types" "github.com/cosmos/cosmos-sdk/codec" - storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" - ibctypes "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types" + ibctypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" "github.com/provenance-io/provenance/x/marker/types" ) @@ -180,7 +179,7 @@ func (k Keeper) RemoveMarker(ctx sdk.Context, marker types.MarkerAccountI) { // IterateMarkers iterates all markers with the given handler function. func (k Keeper) IterateMarkers(ctx sdk.Context, cb func(marker types.MarkerAccountI) (stop bool)) { store := ctx.KVStore(k.storeKey) - iterator := sdk.KVStorePrefixIterator(store, types.MarkerStoreKeyPrefix) + iterator := storetypes.KVStorePrefixIterator(store, types.MarkerStoreKeyPrefix) defer iterator.Close() for ; iterator.Valid(); iterator.Next() { @@ -226,7 +225,7 @@ func (k Keeper) RemoveSendDeny(ctx sdk.Context, markerAddr, senderAddr sdk.AccAd // IterateMarkers iterates all markers with the given handler function. func (k Keeper) IterateSendDeny(ctx sdk.Context, handler func(key []byte) (stop bool)) { store := ctx.KVStore(k.storeKey) - iterator := sdk.KVStorePrefixIterator(store, types.DenySendKeyPrefix) + iterator := storetypes.KVStorePrefixIterator(store, types.DenySendKeyPrefix) defer iterator.Close() for ; iterator.Valid(); iterator.Next() { @@ -270,7 +269,7 @@ func (k Keeper) SetNetAssetValue(ctx sdk.Context, marker types.MarkerAccountI, n key := types.NetAssetValueKey(marker.GetAddress(), netAssetValue.Price.Denom) store := ctx.KVStore(k.storeKey) - if math.NewIntFromUint64(netAssetValue.Volume).GT(marker.GetSupply().Amount) { + if sdkmath.NewIntFromUint64(netAssetValue.Volume).GT(marker.GetSupply().Amount) { return fmt.Errorf("volume(%v) cannot exceed marker %q supply(%v) ", netAssetValue.Volume, marker.GetDenom(), marker.GetSupply()) } @@ -286,7 +285,7 @@ func (k Keeper) SetNetAssetValue(ctx sdk.Context, marker types.MarkerAccountI, n // IterateNetAssetValues iterates net asset values for marker func (k Keeper) IterateNetAssetValues(ctx sdk.Context, markerAddr sdk.AccAddress, handler func(state types.NetAssetValue) (stop bool)) error { store := ctx.KVStore(k.storeKey) - it := sdk.KVStorePrefixIterator(store, types.NetAssetValueKeyPrefix(markerAddr)) + it := storetypes.KVStorePrefixIterator(store, types.NetAssetValueKeyPrefix(markerAddr)) defer it.Close() for ; it.Valid(); it.Next() { var markerNav types.NetAssetValue @@ -303,7 +302,7 @@ func (k Keeper) IterateNetAssetValues(ctx sdk.Context, markerAddr sdk.AccAddress // RemoveNetAssetValues removes all net asset values for a marker func (k Keeper) RemoveNetAssetValues(ctx sdk.Context, markerAddr sdk.AccAddress) { store := ctx.KVStore(k.storeKey) - it := sdk.KVStorePrefixIterator(store, types.NetAssetValueKeyPrefix(markerAddr)) + it := storetypes.KVStorePrefixIterator(store, types.NetAssetValueKeyPrefix(markerAddr)) var keys [][]byte for ; it.Valid(); it.Next() { keys = append(keys, it.Key()) diff --git a/x/marker/keeper/keeper_test.go b/x/marker/keeper/keeper_test.go index fa533098e0..af886b3faf 100644 --- a/x/marker/keeper/keeper_test.go +++ b/x/marker/keeper/keeper_test.go @@ -9,21 +9,21 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "cosmossdk.io/math" + sdkmath "cosmossdk.io/math" + "cosmossdk.io/x/feegrant" + + // "github.com/cosmos/cosmos-sdk/x/quarantine" // TODO[1760]: quarantine + "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "github.com/cosmos/cosmos-sdk/x/bank/testutil" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" - "github.com/cosmos/cosmos-sdk/x/feegrant" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" - "github.com/cosmos/cosmos-sdk/x/quarantine" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - simapp "github.com/provenance-io/provenance/app" markerkeeper "github.com/provenance-io/provenance/x/marker/keeper" "github.com/provenance-io/provenance/x/marker/types" @@ -32,7 +32,7 @@ import ( func TestAccountMapperGetSet(t *testing.T) { app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) addr := types.MustGetMarkerAddress("testcoin") user := testUserAddress("test") @@ -79,65 +79,65 @@ func TestAccountMapperGetSet(t *testing.T) { func TestExistingAccounts(t *testing.T) { app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) server := markerkeeper.NewMsgServerImpl(app.MarkerKeeper) addr := types.MustGetMarkerAddress("testcoin") pubkey := secp256k1.GenPrivKey().PubKey() user := testUserAddress("testcoin") manager := testUserAddress("manager") - existingBalance := sdk.NewCoin("coin", sdk.NewInt(1000)) + existingBalance := sdk.NewInt64Coin("coin", 1000) // prefund the marker address so an account gets created before the marker does. app.AccountKeeper.SetAccount(ctx, authtypes.NewBaseAccount(user, pubkey, 0, 0)) - require.NoError(t, testutil.FundAccount(app.BankKeeper, ctx, addr, sdk.NewCoins(existingBalance)), "funding account") + require.NoError(t, testutil.FundAccount(ctx, app.BankKeeper, addr, sdk.NewCoins(existingBalance)), "funding account") require.Equal(t, existingBalance, app.BankKeeper.GetBalance(ctx, addr, "coin"), "account balance must be set") // Creating a marker over an account with zero sequence is fine. - _, err := server.AddMarker(sdk.WrapSDKContext(ctx), types.NewMsgAddMarkerRequest("testcoin", sdk.NewInt(30), user, manager, types.MarkerType_Coin, true, true, false, []string{}, 0, 0)) + _, err := server.AddMarker(ctx, types.NewMsgAddMarkerRequest("testcoin", sdkmath.NewInt(30), user, manager, types.MarkerType_Coin, true, true, false, []string{}, 0, 0)) require.NoError(t, err, "should allow a marker over existing account that has not signed anything.") // existing coin balance must still be present require.Equal(t, existingBalance, app.BankKeeper.GetBalance(ctx, addr, "coin"), "account balances must be preserved") // Creating a marker over an existing marker fails. - _, err = server.AddMarker(sdk.WrapSDKContext(ctx), types.NewMsgAddMarkerRequest("testcoin", sdk.NewInt(30), user, manager, types.MarkerType_Coin, true, true, false, []string{}, 0, 0)) + _, err = server.AddMarker(ctx, types.NewMsgAddMarkerRequest("testcoin", sdkmath.NewInt(30), user, manager, types.MarkerType_Coin, true, true, false, []string{}, 0, 0)) require.Error(t, err, "fails because marker already exists") // replace existing test account with a new copy that has a positive sequence number app.AccountKeeper.SetAccount(ctx, authtypes.NewBaseAccount(user, pubkey, 0, 10)) // Creating a marker over an existing account with a positive sequence number fails. - _, err = server.AddMarker(sdk.WrapSDKContext(ctx), types.NewMsgAddMarkerRequest("testcoin", sdk.NewInt(30), user, manager, types.MarkerType_Coin, true, true, false, []string{}, 0, 0)) + _, err = server.AddMarker(ctx, types.NewMsgAddMarkerRequest("testcoin", sdkmath.NewInt(30), user, manager, types.MarkerType_Coin, true, true, false, []string{}, 0, 0)) require.Error(t, err, "should not allow creation over and existing account with a positive sequence number.") } func TestAccountUnrestrictedDenoms(t *testing.T) { app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) server := markerkeeper.NewMsgServerImpl(app.MarkerKeeper) user := testUserAddress("test") // Require a long unrestricted denom app.MarkerKeeper.SetParams(ctx, types.Params{UnrestrictedDenomRegex: "[a-z]{12,20}"}) - _, err := server.AddMarker(sdk.WrapSDKContext(ctx), types.NewMsgAddMarkerRequest("tooshort", sdk.NewInt(30), user, user, types.MarkerType_Coin, true, true, false, []string{}, 0, 0)) + _, err := server.AddMarker(ctx, types.NewMsgAddMarkerRequest("tooshort", sdkmath.NewInt(30), user, user, types.MarkerType_Coin, true, true, false, []string{}, 0, 0)) require.Error(t, err, "fails with unrestricted denom length fault") require.Equal(t, fmt.Errorf("invalid denom [tooshort] (fails unrestricted marker denom validation [a-z]{12,20})"), err, "should fail with denom restriction") - _, err = server.AddMarker(sdk.WrapSDKContext(ctx), types.NewMsgAddMarkerRequest("itslongenough", sdk.NewInt(30), user, user, types.MarkerType_Coin, true, true, false, []string{}, 0, 0)) + _, err = server.AddMarker(ctx, types.NewMsgAddMarkerRequest("itslongenough", sdkmath.NewInt(30), user, user, types.MarkerType_Coin, true, true, false, []string{}, 0, 0)) require.NoError(t, err, "should allow a marker with a sufficiently long denom") // Set to an empty string (returns to default expression) app.MarkerKeeper.SetParams(ctx, types.Params{UnrestrictedDenomRegex: ""}) - _, err = server.AddMarker(sdk.WrapSDKContext(ctx), types.NewMsgAddMarkerRequest("short", sdk.NewInt(30), user, user, types.MarkerType_Coin, true, true, false, []string{}, 0, 0)) + _, err = server.AddMarker(ctx, types.NewMsgAddMarkerRequest("short", sdkmath.NewInt(30), user, user, types.MarkerType_Coin, true, true, false, []string{}, 0, 0)) // succeeds now as the default unrestricted denom expression allows any valid denom (minimum length is 2) require.NoError(t, err, "should allow any valid denom with a min length of two") } func TestAccountKeeperReader(t *testing.T) { app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) addr := types.MustGetMarkerAddress("testcoin") user := testUserAddress("test") @@ -172,7 +172,7 @@ func TestAccountKeeperReader(t *testing.T) { func TestAccountKeeperManageAccess(t *testing.T) { app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) addr := types.MustGetMarkerAddress("testcoin") // Easiest way to create a valid bech32 address for testing. @@ -187,7 +187,7 @@ func TestAccountKeeperManageAccess(t *testing.T) { *types.NewAccessGrant(admin, []types.Access{types.Access_Admin})}) require.NoError(t, mac.SetManager(user1)) - require.NoError(t, mac.SetSupply(sdk.NewCoin(mac.Denom, sdk.OneInt()))) + require.NoError(t, mac.SetSupply(sdk.NewInt64Coin(mac.Denom, 1))) require.NoError(t, app.MarkerKeeper.AddMarkerAccount(ctx, mac)) require.NoError(t, app.MarkerKeeper.SetNetAssetValue(ctx, mac, types.NewNetAssetValue(sdk.NewInt64Coin(types.UsdDenom, 1), 1), "test")) @@ -249,8 +249,8 @@ func TestAccountKeeperManageAccess(t *testing.T) { require.NoError(t, err) // User2 can adjust supply up/down for a finalized marker - require.NoError(t, app.MarkerKeeper.MintCoin(ctx, user2, sdk.NewCoin("testcoin", sdk.OneInt()))) - require.NoError(t, app.MarkerKeeper.BurnCoin(ctx, user1, sdk.NewCoin("testcoin", sdk.OneInt()))) + require.NoError(t, app.MarkerKeeper.MintCoin(ctx, user2, sdk.NewInt64Coin("testcoin", 1))) + require.NoError(t, app.MarkerKeeper.BurnCoin(ctx, user1, sdk.NewInt64Coin("testcoin", 1))) // Cancel marker and check permission enforcement. require.NoError(t, app.MarkerKeeper.CancelMarker(ctx, user2, "testcoin")) @@ -279,7 +279,7 @@ func TestAccountKeeperManageAccess(t *testing.T) { func TestAccountKeeperCancelProposedByManager(t *testing.T) { app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) addr := types.MustGetMarkerAddress("testcoin") // Easiest way to create a valid bech32 address for testing. @@ -294,7 +294,7 @@ func TestAccountKeeperCancelProposedByManager(t *testing.T) { *types.NewAccessGrant(admin, []types.Access{types.Access_Admin})}) require.NoError(t, mac.SetManager(user1)) - require.NoError(t, mac.SetSupply(sdk.NewCoin(mac.Denom, sdk.OneInt()))) + require.NoError(t, mac.SetSupply(sdk.NewInt64Coin(mac.Denom, 1))) require.NoError(t, app.MarkerKeeper.AddMarkerAccount(ctx, mac)) m, err := app.MarkerKeeper.GetMarker(ctx, addr) @@ -321,7 +321,7 @@ func TestAccountKeeperCancelProposedByManager(t *testing.T) { func TestAccountKeeperMintBurnCoins(t *testing.T) { app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) app.MarkerKeeper.SetParams(ctx, types.DefaultParams()) addr := types.MustGetMarkerAddress("testcoin") user := testUserAddress("test") @@ -334,7 +334,7 @@ func TestAccountKeeperMintBurnCoins(t *testing.T) { mac := types.NewEmptyMarkerAccount("testcoin", user.String(), []types.AccessGrant{*types.NewAccessGrant(user, []types.Access{types.Access_Mint, types.Access_Burn, types.Access_Withdraw, types.Access_Delete, types.Access_Deposit})}) require.NoError(t, mac.SetManager(user)) - require.NoError(t, mac.SetSupply(sdk.NewCoin("testcoin", sdk.NewInt(1000)))) + require.NoError(t, mac.SetSupply(sdk.NewInt64Coin("testcoin", 1000))) require.NoError(t, app.MarkerKeeper.AddMarkerAccount(ctx, mac)) require.NoError(t, app.MarkerKeeper.SetNetAssetValue(ctx, mac, types.NewNetAssetValue(sdk.NewInt64Coin(types.UsdDenom, 1), 1), "test")) @@ -352,7 +352,7 @@ func TestAccountKeeperMintBurnCoins(t *testing.T) { require.NoError(t, err) require.EqualValues(t, m.GetSupply(), sdk.NewInt64Coin("testcoin", 1000)) // entire supply should have been allocated to markeracount - require.EqualValues(t, app.MarkerKeeper.GetEscrow(ctx, m).AmountOf("testcoin"), sdk.NewInt(1000)) + require.EqualValues(t, app.MarkerKeeper.GetEscrow(ctx, m).AmountOf("testcoin"), sdkmath.NewInt(1000)) // perform a successful mint (and check) require.NoError(t, app.MarkerKeeper.MintCoin(ctx, user, sdk.NewInt64Coin("testcoin", 100))) @@ -383,12 +383,12 @@ func TestAccountKeeperMintBurnCoins(t *testing.T) { sdk.NewCoins(sdk.NewInt64Coin("testcoin", 50)))) // verify user has the withdrawn coins - require.EqualValues(t, app.BankKeeper.GetBalance(ctx, user, "testcoin").Amount, sdk.NewInt(50)) + require.EqualValues(t, app.BankKeeper.GetBalance(ctx, user, "testcoin").Amount, sdkmath.NewInt(50)) // verify marker account has remaining coins m, err = app.MarkerKeeper.GetMarker(ctx, addr) require.NoError(t, err) - require.EqualValues(t, app.MarkerKeeper.GetEscrow(ctx, m).AmountOf("testcoin"), sdk.NewInt(950)) + require.EqualValues(t, app.MarkerKeeper.GetEscrow(ctx, m).AmountOf("testcoin"), sdkmath.NewInt(950)) // Fail for burn too much (exceed marker account holdings) require.Error(t, app.MarkerKeeper.BurnCoin(ctx, user, sdk.NewInt64Coin("testcoin", 1000))) @@ -416,12 +416,12 @@ func TestAccountKeeperMintBurnCoins(t *testing.T) { require.NoError(t, app.MarkerKeeper.CancelMarker(ctx, user, "testcoin")) // Set an escrow balance - require.NoError(t, testutil.FundAccount(app.BankKeeper, ctx, addr, sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdk.OneInt()))), "funding account") + require.NoError(t, testutil.FundAccount(ctx, app.BankKeeper, addr, sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 1))), "funding account") // Fails because there are coins in escrow. require.Error(t, app.MarkerKeeper.DeleteMarker(ctx, user, "testcoin")) // Remove escrow balance from account - require.NoError(t, app.BankKeeper.SendCoinsFromAccountToModule(ctx, addr, "mint", sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdk.OneInt()))), "sending coins to module") + require.NoError(t, app.BankKeeper.SendCoinsFromAccountToModule(ctx, addr, "mint", sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 1))), "sending coins to module") // Succeeds because the bond denom coin was removed. require.NoError(t, app.MarkerKeeper.DeleteMarker(ctx, user, "testcoin")) @@ -433,15 +433,15 @@ func TestAccountKeeperMintBurnCoins(t *testing.T) { m, err = app.MarkerKeeper.GetMarker(ctx, addr) require.NoError(t, err) require.EqualValues(t, types.StatusDestroyed, m.GetStatus()) - require.EqualValues(t, m.GetSupply().Amount, sdk.ZeroInt()) + require.EqualValues(t, m.GetSupply().Amount, sdkmath.ZeroInt()) // supply module should also indicate a zero supply - require.EqualValues(t, app.BankKeeper.GetSupply(ctx, "testcoin").Amount, sdk.ZeroInt()) + require.EqualValues(t, app.BankKeeper.GetSupply(ctx, "testcoin").Amount, sdkmath.ZeroInt()) } func TestAccountKeeperGetAll(t *testing.T) { app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) user := testUserAddress("test") mac := types.NewEmptyMarkerAccount("testcoin", @@ -478,16 +478,16 @@ func TestAccountKeeperGetAll(t *testing.T) { func TestAccountInsufficientExisting(t *testing.T) { app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) pubkey := secp256k1.GenPrivKey().PubKey() user := sdk.AccAddress(pubkey.Address()) // setup an existing account with an existing balance (and matching supply) - existingSupply := sdk.NewCoin("testcoin", sdk.NewInt(10000)) + existingSupply := sdk.NewInt64Coin("testcoin", 10000) app.AccountKeeper.SetAccount(ctx, authtypes.NewBaseAccount(user, pubkey, 0, 0)) - require.NoError(t, testutil.FundAccount(app.BankKeeper, ctx, user, sdk.NewCoins(existingSupply)), "funding account") + require.NoError(t, testutil.FundAccount(ctx, app.BankKeeper, user, sdk.NewCoins(existingSupply)), "funding account") //prevSupply := app.BankKeeper.GetSupply(ctx, "testcoin") //app.BankKeeper.SetSupply(ctx, banktypes.NewSupply(prevSupply.Amount.Add(existingSupply.Amount))) @@ -496,7 +496,7 @@ func TestAccountInsufficientExisting(t *testing.T) { mac := types.NewEmptyMarkerAccount("testcoin", user.String(), []types.AccessGrant{*types.NewAccessGrant(user, []types.Access{types.Access_Mint, types.Access_Burn, types.Access_Withdraw, types.Access_Delete})}) require.NoError(t, mac.SetManager(user)) - require.NoError(t, mac.SetSupply(sdk.NewCoin("testcoin", sdk.NewInt(1000)))) + require.NoError(t, mac.SetSupply(sdk.NewInt64Coin("testcoin", 1000))) require.NoError(t, app.MarkerKeeper.AddMarkerAccount(ctx, mac)) require.NoError(t, app.MarkerKeeper.SetNetAssetValue(ctx, mac, types.NewNetAssetValue(sdk.NewInt64Coin(types.UsdDenom, 1), 1), "test")) @@ -524,7 +524,7 @@ func TestAccountInsufficientExisting(t *testing.T) { func TestAccountImplictControl(t *testing.T) { app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) setAcc := func(addr sdk.AccAddress, sequence uint64) { acc := app.AccountKeeper.NewAccountWithAddress(ctx, addr) @@ -543,7 +543,7 @@ func TestAccountImplictControl(t *testing.T) { mac.MarkerType = types.MarkerType_RestrictedCoin require.NoError(t, mac.SetManager(user)) - require.NoError(t, mac.SetSupply(sdk.NewCoin("testcoin", sdk.NewInt(1000)))) + require.NoError(t, mac.SetSupply(sdk.NewInt64Coin("testcoin", 1000))) require.NoError(t, app.MarkerKeeper.AddMarkerAccount(ctx, mac)) require.NoError(t, app.MarkerKeeper.SetNetAssetValue(ctx, mac, types.NewNetAssetValue(sdk.NewInt64Coin(types.UsdDenom, 1), 1), "test")) @@ -570,9 +570,9 @@ func TestAccountImplictControl(t *testing.T) { types.NewAccessGrant(user2, []types.Access{types.Access_Mint, types.Access_Delete, types.Access_Transfer}))) // succeeds for a user with transfer rights - require.NoError(t, app.MarkerKeeper.TransferCoin(ctx, user2, user, user2, sdk.NewCoin("testcoin", sdk.NewInt(10)))) + require.NoError(t, app.MarkerKeeper.TransferCoin(ctx, user2, user, user2, sdk.NewInt64Coin("testcoin", 10))) // fails if the admin user does not have transfer authority - require.Error(t, app.MarkerKeeper.TransferCoin(ctx, user, user2, user, sdk.NewCoin("testcoin", sdk.NewInt(10)))) + require.Error(t, app.MarkerKeeper.TransferCoin(ctx, user, user2, user, sdk.NewInt64Coin("testcoin", 10))) // validate authz when 'from' is different from 'admin' granter := user @@ -580,33 +580,33 @@ func TestAccountImplictControl(t *testing.T) { now := ctx.BlockHeader().Time require.NotNil(t, now, "now") exp1Hour := now.Add(time.Hour) - a := types.NewMarkerTransferAuthorization(sdk.NewCoins(sdk.NewCoin("testcoin", sdk.NewInt(10))), []sdk.AccAddress{}) + a := types.NewMarkerTransferAuthorization(sdk.NewCoins(sdk.NewInt64Coin("testcoin", 10)), []sdk.AccAddress{}) // fails when admin user (grantee without authz permissions) has transfer authority - require.Error(t, app.MarkerKeeper.TransferCoin(ctx, granter, user, grantee, sdk.NewCoin("testcoin", sdk.NewInt(5)))) + require.Error(t, app.MarkerKeeper.TransferCoin(ctx, granter, user, grantee, sdk.NewInt64Coin("testcoin", 5))) // succeeds when admin user (grantee with authz permissions) has transfer authority require.NoError(t, app.AuthzKeeper.SaveGrant(ctx, grantee, granter, a, &exp1Hour)) - require.NoError(t, app.MarkerKeeper.TransferCoin(ctx, granter, user, grantee, sdk.NewCoin("testcoin", sdk.NewInt(5)))) + require.NoError(t, app.MarkerKeeper.TransferCoin(ctx, granter, user, grantee, sdk.NewInt64Coin("testcoin", 5))) // succeeds when admin user (grantee with authz permissions) has transfer authority (transfer remaining balance) - require.NoError(t, app.MarkerKeeper.TransferCoin(ctx, granter, user, grantee, sdk.NewCoin("testcoin", sdk.NewInt(5)))) + require.NoError(t, app.MarkerKeeper.TransferCoin(ctx, granter, user, grantee, sdk.NewInt64Coin("testcoin", 5))) // fails when admin user (grantee with authz permissions) and transfer authority has transferred all coin ^^^ (grant has now been deleted) - require.Error(t, app.MarkerKeeper.TransferCoin(ctx, granter, user, grantee, sdk.NewCoin("testcoin", sdk.NewInt(5)))) + require.Error(t, app.MarkerKeeper.TransferCoin(ctx, granter, user, grantee, sdk.NewInt64Coin("testcoin", 5))) // validate authz when with allow list set now = ctx.BlockHeader().Time require.NotNil(t, now, "now") exp1Hour = now.Add(time.Hour) - a = types.NewMarkerTransferAuthorization(sdk.NewCoins(sdk.NewCoin("testcoin", sdk.NewInt(10))), []sdk.AccAddress{user}) + a = types.NewMarkerTransferAuthorization(sdk.NewCoins(sdk.NewInt64Coin("testcoin", 10)), []sdk.AccAddress{user}) require.NoError(t, app.AuthzKeeper.SaveGrant(ctx, grantee, granter, a, &exp1Hour)) // fails when admin user (grantee with authz permissions) has transfer authority but receiver is not on allowed list - require.Error(t, app.MarkerKeeper.TransferCoin(ctx, granter, user2, grantee, sdk.NewCoin("testcoin", sdk.NewInt(5)))) + require.Error(t, app.MarkerKeeper.TransferCoin(ctx, granter, user2, grantee, sdk.NewInt64Coin("testcoin", 5))) // succeeds when admin user (grantee with authz permissions) has transfer authority with receiver is on allowed list - require.NoError(t, app.MarkerKeeper.TransferCoin(ctx, granter, user, grantee, sdk.NewCoin("testcoin", sdk.NewInt(5)))) + require.NoError(t, app.MarkerKeeper.TransferCoin(ctx, granter, user, grantee, sdk.NewInt64Coin("testcoin", 5))) } func TestForceTransfer(t *testing.T) { app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) setAcc := func(addr sdk.AccAddress, sequence uint64) { acc := app.AccountKeeper.NewAccountWithAddress(ctx, addr) @@ -740,7 +740,7 @@ func TestForceTransfer(t *testing.T) { func TestCanForceTransferFrom(t *testing.T) { app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) setAcc := func(addr sdk.AccAddress, sequence uint64) { acc := app.AccountKeeper.NewAccountWithAddress(ctx, addr) @@ -774,7 +774,7 @@ func TestCanForceTransferFrom(t *testing.T) { func TestMarkerFeeGrant(t *testing.T) { app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) server := markerkeeper.NewMsgServerImpl(app.MarkerKeeper) addr := types.MustGetMarkerAddress("testcoin") @@ -800,16 +800,16 @@ func TestMarkerFeeGrant(t *testing.T) { app.AccountKeeper.SetAccount(ctx, mac) - existingSupply := sdk.NewCoin("testcoin", sdk.NewInt(10000)) - require.NoError(t, testutil.FundAccount(app.BankKeeper, ctx, user, sdk.NewCoins(existingSupply)), "funding accont") + existingSupply := sdk.NewInt64Coin("testcoin", 10000) + require.NoError(t, testutil.FundAccount(ctx, app.BankKeeper, user, sdk.NewCoins(existingSupply)), "funding accont") allowance, err := types.NewMsgGrantAllowance( "testcoin", user, testUserAddress("grantee"), - &feegrant.BasicAllowance{SpendLimit: sdk.NewCoins(sdk.NewCoin("testcoin", sdk.OneInt()))}) + &feegrant.BasicAllowance{SpendLimit: sdk.NewCoins(sdk.NewInt64Coin("testcoin", 1))}) require.NoError(t, err, "basic allowance creation failed") - _, err = server.GrantAllowance(sdk.WrapSDKContext(ctx), allowance) + _, err = server.GrantAllowance(ctx, allowance) require.NoError(t, err, "failed to grant basic allowance from admin") } @@ -821,25 +821,25 @@ func testUserAddress(name string) sdk.AccAddress { func TestAddFinalizeActivateMarker(t *testing.T) { app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) server := markerkeeper.NewMsgServerImpl(app.MarkerKeeper) addr := types.MustGetMarkerAddress("testcoin") pubkey := secp256k1.GenPrivKey().PubKey() user := testUserAddress("testcoin") manager := testUserAddress("manager") - existingBalance := sdk.NewCoin("coin", sdk.NewInt(1000)) + existingBalance := sdk.NewInt64Coin("coin", 1000) // prefund the marker address so an account gets created before the marker does. app.AccountKeeper.SetAccount(ctx, authtypes.NewBaseAccount(user, pubkey, 0, 0)) - require.NoError(t, testutil.FundAccount(app.BankKeeper, ctx, addr, sdk.NewCoins(existingBalance)), "funding account") + require.NoError(t, testutil.FundAccount(ctx, app.BankKeeper, addr, sdk.NewCoins(existingBalance)), "funding account") require.Equal(t, existingBalance, app.BankKeeper.GetBalance(ctx, addr, "coin"), "account balance must be set") // Creating a marker over an account with zero sequence is fine. // One shot marker creation - _, err := server.AddFinalizeActivateMarker(sdk.WrapSDKContext(ctx), types.NewMsgAddFinalizeActivateMarkerRequest( + _, err := server.AddFinalizeActivateMarker(ctx, types.NewMsgAddFinalizeActivateMarkerRequest( "testcoin", - sdk.NewInt(30), + sdkmath.NewInt(30), user, manager, types.MarkerType_Coin, @@ -867,9 +867,9 @@ func TestAddFinalizeActivateMarker(t *testing.T) { require.EqualValues(t, m.GetStatus(), types.StatusActive) // Creating a marker over an existing marker fails. - _, err = server.AddFinalizeActivateMarker(sdk.WrapSDKContext(ctx), types.NewMsgAddFinalizeActivateMarkerRequest( + _, err = server.AddFinalizeActivateMarker(ctx, types.NewMsgAddFinalizeActivateMarkerRequest( "testcoin", - sdk.NewInt(30), + sdkmath.NewInt(30), user, manager, types.MarkerType_Coin, @@ -890,13 +890,13 @@ func TestAddFinalizeActivateMarker(t *testing.T) { require.EqualValues(t, m.GetStatus(), types.StatusActive) // entire supply should have been allocated to marker acount - require.EqualValues(t, app.MarkerKeeper.GetEscrow(ctx, m).AmountOf("testcoin"), sdk.NewInt(30)) + require.EqualValues(t, app.MarkerKeeper.GetEscrow(ctx, m).AmountOf("testcoin"), sdkmath.NewInt(30)) } // Creating a marker over an existing account with a positive sequence number fails. func TestInvalidAccount(t *testing.T) { app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) pubkey := secp256k1.GenPrivKey().PubKey() server := markerkeeper.NewMsgServerImpl(app.MarkerKeeper) user := testUserAddress("testcoin") @@ -905,9 +905,9 @@ func TestInvalidAccount(t *testing.T) { // replace existing test account with a new copy that has a positive sequence number app.AccountKeeper.SetAccount(ctx, authtypes.NewBaseAccount(user, pubkey, 0, 10)) - _, err := server.AddFinalizeActivateMarker(sdk.WrapSDKContext(ctx), types.NewMsgAddFinalizeActivateMarkerRequest( + _, err := server.AddFinalizeActivateMarker(ctx, types.NewMsgAddFinalizeActivateMarkerRequest( "testcoin", - sdk.NewInt(30), + sdkmath.NewInt(30), user, manager, types.MarkerType_Coin, @@ -925,7 +925,7 @@ func TestInvalidAccount(t *testing.T) { func TestAddFinalizeActivateMarkerUnrestrictedDenoms(t *testing.T) { app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) server := markerkeeper.NewMsgServerImpl(app.MarkerKeeper) user := testUserAddress("test") @@ -933,10 +933,10 @@ func TestAddFinalizeActivateMarkerUnrestrictedDenoms(t *testing.T) { // Require a long unrestricted denom app.MarkerKeeper.SetParams(ctx, types.Params{UnrestrictedDenomRegex: "[a-z]{12,20}"}) - _, err := server.AddFinalizeActivateMarker(sdk.WrapSDKContext(ctx), + _, err := server.AddFinalizeActivateMarker(ctx, types.NewMsgAddFinalizeActivateMarkerRequest( "tooshort", - sdk.NewInt(30), + sdkmath.NewInt(30), user, user, types.MarkerType_Coin, @@ -951,9 +951,9 @@ func TestAddFinalizeActivateMarkerUnrestrictedDenoms(t *testing.T) { require.Error(t, err, "fails with unrestricted denom length fault") require.Equal(t, fmt.Errorf("invalid denom [tooshort] (fails unrestricted marker denom validation [a-z]{12,20})"), err, "should fail with denom restriction") - _, err = server.AddFinalizeActivateMarker(sdk.WrapSDKContext(ctx), types.NewMsgAddFinalizeActivateMarkerRequest( + _, err = server.AddFinalizeActivateMarker(ctx, types.NewMsgAddFinalizeActivateMarkerRequest( "itslongenough", - sdk.NewInt(30), + sdkmath.NewInt(30), user, user, types.MarkerType_Coin, @@ -969,9 +969,9 @@ func TestAddFinalizeActivateMarkerUnrestrictedDenoms(t *testing.T) { // Set to an empty string (returns to default expression) app.MarkerKeeper.SetParams(ctx, types.Params{UnrestrictedDenomRegex: ""}) - _, err = server.AddFinalizeActivateMarker(sdk.WrapSDKContext(ctx), types.NewMsgAddFinalizeActivateMarkerRequest( + _, err = server.AddFinalizeActivateMarker(ctx, types.NewMsgAddFinalizeActivateMarkerRequest( "short", - sdk.NewInt(30), + sdkmath.NewInt(30), user, user, types.MarkerType_Coin, @@ -989,10 +989,10 @@ func TestAddFinalizeActivateMarkerUnrestrictedDenoms(t *testing.T) { func TestAddMarkerViaProposal(t *testing.T) { app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) server := markerkeeper.NewMsgServerImpl(app.MarkerKeeper) - newMsg := func(denom string, amt math.Int, manager string, status types.MarkerStatus, + newMsg := func(denom string, amt sdkmath.Int, manager string, status types.MarkerStatus, markerType types.MarkerType, access []types.AccessGrant, allowGov bool, ) *types.MsgAddMarkerRequest { return &types.MsgAddMarkerRequest{ @@ -1022,32 +1022,32 @@ func TestAddMarkerViaProposal(t *testing.T) { }{ { "add marker - valid", - newMsg("test1", sdk.NewInt(100), "", active, coin, []types.AccessGrant{}, true), + newMsg("test1", sdkmath.NewInt(100), "", active, coin, []types.AccessGrant{}, true), nil, }, { "add marker - valid restricted marker", - newMsg("testrestricted", sdk.NewInt(100), "", active, restricted, []types.AccessGrant{}, true), + newMsg("testrestricted", sdkmath.NewInt(100), "", active, restricted, []types.AccessGrant{}, true), nil, }, { "add marker - valid no governance", - newMsg("testnogov", sdk.NewInt(100), user, active, coin, []types.AccessGrant{}, false), + newMsg("testnogov", sdkmath.NewInt(100), user, active, coin, []types.AccessGrant{}, false), nil, }, { "add marker - valid finalized", - newMsg("pending", sdk.NewInt(100), user, finalized, coin, []types.AccessGrant{}, true), + newMsg("pending", sdkmath.NewInt(100), user, finalized, coin, []types.AccessGrant{}, true), nil, }, { "add marker - already exists", - newMsg("test1", sdk.NewInt(0), "", active, coin, []types.AccessGrant{}, true), + newMsg("test1", sdkmath.NewInt(0), "", active, coin, []types.AccessGrant{}, true), fmt.Errorf("marker address already exists for cosmos1ku2jzvpkt4ffxxaajyk2r88axk9cr5jqlthcm4: invalid request"), }, { "add marker - invalid status", - newMsg("test2", sdk.NewInt(100), "", types.StatusUndefined, coin, []types.AccessGrant{}, true), + newMsg("test2", sdkmath.NewInt(100), "", types.StatusUndefined, coin, []types.AccessGrant{}, true), fmt.Errorf("invalid marker status: invalid request"), }, } @@ -1068,7 +1068,7 @@ func TestAddMarkerViaProposal(t *testing.T) { func TestMsgSupplyIncreaseProposalRequest(t *testing.T) { app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) server := markerkeeper.NewMsgServerImpl(app.MarkerKeeper) authority := "cosmos10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn" @@ -1126,7 +1126,7 @@ func TestMsgSupplyIncreaseProposalRequest(t *testing.T) { { name: "invalid authority", amount: sdk.Coin{ - Amount: math.NewInt(100), + Amount: sdkmath.NewInt(100), Denom: "invalid-authority-denom", }, targetAddress: targetAddress, @@ -1137,7 +1137,7 @@ func TestMsgSupplyIncreaseProposalRequest(t *testing.T) { { name: "marker does not exist", amount: sdk.Coin{ - Amount: math.NewInt(100), + Amount: sdkmath.NewInt(100), Denom: "unknown-denom", }, targetAddress: authority, @@ -1148,7 +1148,7 @@ func TestMsgSupplyIncreaseProposalRequest(t *testing.T) { { name: "marker with governance disabled", amount: sdk.Coin{ - Amount: math.NewInt(100), + Amount: sdkmath.NewInt(100), Denom: govDisabledDenom.Denom, }, targetAddress: authority, @@ -1159,7 +1159,7 @@ func TestMsgSupplyIncreaseProposalRequest(t *testing.T) { { name: "marker status is not StatusActive", amount: sdk.Coin{ - Amount: math.NewInt(100), + Amount: sdkmath.NewInt(100), Denom: nonActiveDenom.Denom, }, targetAddress: authority, @@ -1170,7 +1170,7 @@ func TestMsgSupplyIncreaseProposalRequest(t *testing.T) { { name: "all good", amount: sdk.Coin{ - Amount: math.NewInt(100), + Amount: sdkmath.NewInt(100), Denom: beesKnees.Denom, }, targetAddress: authority, @@ -1192,7 +1192,7 @@ func TestMsgSupplyIncreaseProposalRequest(t *testing.T) { } for _, tc := range testCases { - res, err := server.SupplyIncreaseProposal(sdk.WrapSDKContext(ctx), + res, err := server.SupplyIncreaseProposal(ctx, types.NewMsgSupplyIncreaseProposalRequest(tc.amount, tc.targetAddress, tc.authority)) if tc.shouldFail { @@ -1208,7 +1208,7 @@ func TestMsgSupplyIncreaseProposalRequest(t *testing.T) { func TestMsgUpdateRequiredAttributesRequest(t *testing.T) { app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) server := markerkeeper.NewMsgServerImpl(app.MarkerKeeper) authority := authtypes.NewModuleAddress(govtypes.ModuleName) @@ -1293,7 +1293,7 @@ func TestMsgUpdateRequiredAttributesRequest(t *testing.T) { for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { - res, err := server.UpdateRequiredAttributes(sdk.WrapSDKContext(ctx), + res, err := server.UpdateRequiredAttributes(ctx, &tc.updateMsgRequest) if len(tc.expectedError) > 0 { @@ -1321,7 +1321,7 @@ func TestReqAttrBypassAddrs(t *testing.T) { expectedNames := []string{ authtypes.FeeCollectorName, rewardtypes.ModuleName, - quarantine.ModuleName, + // quarantine.ModuleName, // TODO[1760]: quarantine govtypes.ModuleName, distrtypes.ModuleName, stakingtypes.BondedPoolName, @@ -1409,49 +1409,50 @@ type dummyBankKeeper struct{} var _ types.BankKeeper = (*dummyBankKeeper)(nil) -func (d dummyBankKeeper) GetAllBalances(_ sdk.Context, _ sdk.AccAddress) sdk.Coins { return nil } +func (d dummyBankKeeper) GetAllBalances(_ context.Context, _ sdk.AccAddress) sdk.Coins { return nil } -func (d dummyBankKeeper) GetBalance(_ sdk.Context, _ sdk.AccAddress, denom string) sdk.Coin { +func (d dummyBankKeeper) GetBalance(_ context.Context, _ sdk.AccAddress, _ string) sdk.Coin { return sdk.Coin{} } -func (d dummyBankKeeper) GetSupply(_ sdk.Context, _ string) sdk.Coin { return sdk.Coin{} } +func (d dummyBankKeeper) GetSupply(_ context.Context, _ string) sdk.Coin { return sdk.Coin{} } func (d dummyBankKeeper) DenomOwners(_ context.Context, _ *banktypes.QueryDenomOwnersRequest) (*banktypes.QueryDenomOwnersResponse, error) { return nil, nil } -func (d dummyBankKeeper) SendCoins(_ sdk.Context, _, _ sdk.AccAddress, amt sdk.Coins) error { +func (d dummyBankKeeper) SendCoins(_ context.Context, _, _ sdk.AccAddress, _ sdk.Coins) error { return nil } -func (d dummyBankKeeper) SendCoinsFromModuleToAccount(_ sdk.Context, _ string, _ sdk.AccAddress, _ sdk.Coins) error { +func (d dummyBankKeeper) SendCoinsFromModuleToAccount(_ context.Context, _ string, _ sdk.AccAddress, _ sdk.Coins) error { return nil } -func (d dummyBankKeeper) SendCoinsFromAccountToModule(_ sdk.Context, _ sdk.AccAddress, _ string, _ sdk.Coins) error { +func (d dummyBankKeeper) SendCoinsFromAccountToModule(_ context.Context, _ sdk.AccAddress, _ string, _ sdk.Coins) error { return nil } -func (d dummyBankKeeper) MintCoins(_ sdk.Context, _ string, _ sdk.Coins) error { return nil } +func (d dummyBankKeeper) MintCoins(_ context.Context, _ string, _ sdk.Coins) error { return nil } -func (d dummyBankKeeper) BurnCoins(_ sdk.Context, _ string, _ sdk.Coins) error { return nil } +func (d dummyBankKeeper) BurnCoins(_ context.Context, _ string, _ sdk.Coins) error { return nil } func (d dummyBankKeeper) AppendSendRestriction(_ banktypes.SendRestrictionFn) {} func (d dummyBankKeeper) BlockedAddr(_ sdk.AccAddress) bool { return false } -func (d dummyBankKeeper) GetDenomMetaData(_ sdk.Context, _ string) (banktypes.Metadata, bool) { +func (d dummyBankKeeper) GetDenomMetaData(_ context.Context, _ string) (banktypes.Metadata, bool) { return banktypes.Metadata{}, false } -func (d dummyBankKeeper) SetDenomMetaData(_ sdk.Context, _ banktypes.Metadata) {} - -func (d dummyBankKeeper) IterateAllBalances(_ sdk.Context, _ func(sdk.AccAddress, sdk.Coin) bool) {} +func (d dummyBankKeeper) SetDenomMetaData(_ context.Context, _ banktypes.Metadata) {} -func (d dummyBankKeeper) GetAllSendEnabledEntries(_ sdk.Context) []banktypes.SendEnabled { return nil } +func (d dummyBankKeeper) IterateAllBalances(_ context.Context, _ func(sdk.AccAddress, sdk.Coin) bool) { +} -func (d dummyBankKeeper) DeleteSendEnabled(_ sdk.Context, _ string) {} +func (d dummyBankKeeper) GetAllSendEnabledEntries(_ context.Context) []banktypes.SendEnabled { + return nil +} func TestBypassAddrsLocked(t *testing.T) { // This test makes sure that the keeper's copy of reqAttrBypassAddrs diff --git a/x/marker/keeper/marker.go b/x/marker/keeper/marker.go index 7893e50a77..a173400f34 100644 --- a/x/marker/keeper/marker.go +++ b/x/marker/keeper/marker.go @@ -9,8 +9,8 @@ import ( "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - ibctypes "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v6/modules/core/02-client/types" + ibctypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" "github.com/provenance-io/provenance/x/marker/types" ) @@ -545,7 +545,7 @@ func (k Keeper) CancelMarker(ctx sdk.Context, caller sdk.AccAddress, denom strin totalSupply := k.bankKeeper.GetSupply(ctx, m.GetDenom()).Amount escrow := k.bankKeeper.GetBalance(ctx, m.GetAddress(), m.GetDenom()) inCirculation := totalSupply.Sub(escrow.Amount) - if inCirculation.GT(sdk.ZeroInt()) { + if inCirculation.GT(sdkmath.ZeroInt()) { // changing to %v return fmt.Errorf("cannot cancel marker with %v minted coin in circulation out of %v total."+ " ensure marker account holds the entire supply of %s", inCirculation, totalSupply, denom) @@ -597,7 +597,7 @@ func (k Keeper) DeleteMarker(ctx sdk.Context, caller sdk.AccAddress, denom strin totalSupply := k.bankKeeper.GetSupply(ctx, denom).Amount escrow := k.bankKeeper.GetAllBalances(ctx, m.GetAddress()) inCirculation := totalSupply.Sub(escrow.AmountOf(denom)) - if inCirculation.GT(sdk.ZeroInt()) { + if inCirculation.GT(sdkmath.ZeroInt()) { // use %v since %d doesn't apply to Int (wraps big.Int) return fmt.Errorf("cannot delete marker with %v minted coin in circulation out of %v total."+ " ensure marker account holds the entire supply of %s", inCirculation, totalSupply, denom) @@ -836,5 +836,6 @@ func (k Keeper) accountControlsAllSupply(ctx sdk.Context, caller sdk.AccAddress, // if the given account is currently holding 100% of the supply of a marker then it should be able to invoke // the operations as an admin on the marker. - return m.GetSupply().IsEqual(sdk.NewCoin(m.GetDenom(), balance.Amount)) + supply := m.GetSupply() + return supply.Equal(sdk.NewCoin(m.GetDenom(), balance.Amount)) } diff --git a/x/marker/keeper/msg_server.go b/x/marker/keeper/msg_server.go index 1daaece7f6..a3dc44a6fe 100644 --- a/x/marker/keeper/msg_server.go +++ b/x/marker/keeper/msg_server.go @@ -4,7 +4,7 @@ import ( "context" "fmt" - "github.com/armon/go-metrics" + "github.com/hashicorp/go-metrics" "cosmossdk.io/errors" diff --git a/x/marker/keeper/msg_server_test.go b/x/marker/keeper/msg_server_test.go index f63e9fcdec..ff6ed6fe83 100644 --- a/x/marker/keeper/msg_server_test.go +++ b/x/marker/keeper/msg_server_test.go @@ -5,18 +5,20 @@ import ( "testing" "time" - "github.com/golang/protobuf/proto" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/suite" + + abci "github.com/cometbft/cometbft/abci/types" + cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" + + sdkmath "cosmossdk.io/math" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - abci "github.com/tendermint/tendermint/abci/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/suite" + "github.com/cosmos/gogoproto/proto" simapp "github.com/provenance-io/provenance/app" markerkeeper "github.com/provenance-io/provenance/x/marker/keeper" @@ -35,7 +37,7 @@ type MsgServerTestSuite struct { pubkey1 cryptotypes.PubKey owner1 string owner1Addr sdk.AccAddress - acct1 authtypes.AccountI + acct1 sdk.AccountI addresses []sdk.AccAddress } @@ -44,9 +46,7 @@ func (s *MsgServerTestSuite) SetupTest() { s.blockStartTime = time.Now() s.app = simapp.Setup(s.T()) - s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{ - Time: s.blockStartTime, - }) + s.ctx = s.app.BaseApp.NewContextLegacy(false, cmtproto.Header{Time: s.blockStartTime}) s.msgServer = markerkeeper.NewMsgServerImpl(s.app.MarkerKeeper) s.privkey1 = secp256k1.GenPrivKey() @@ -75,7 +75,7 @@ func (s *MsgServerTestSuite) TestMsgAddMarkerRequest() { { name: "successfully ADD new marker", msg: types.MsgAddMarkerRequest{ - Amount: sdk.NewCoin(denom, sdk.NewInt(100)), + Amount: sdk.NewInt64Coin(denom, 100), Manager: s.owner1, FromAddress: s.owner1, Status: types.StatusProposed, @@ -104,7 +104,7 @@ func (s *MsgServerTestSuite) TestMsgAddMarkerRequest() { { name: "fail to ADD new marker, invalid status", msg: types.MsgAddMarkerRequest{ - Amount: sdk.NewCoin(denom, sdk.NewInt(100)), + Amount: sdk.NewInt64Coin(denom, 100), Manager: s.owner1, FromAddress: s.owner1, Status: types.StatusActive, @@ -118,7 +118,7 @@ func (s *MsgServerTestSuite) TestMsgAddMarkerRequest() { { name: "fail to ADD new marker, marker already exists", msg: types.MsgAddMarkerRequest{ - Amount: sdk.NewCoin(denom, sdk.NewInt(100)), + Amount: sdk.NewInt64Coin(denom, 100), Manager: s.owner1, FromAddress: s.owner1, Status: types.StatusProposed, @@ -132,7 +132,7 @@ func (s *MsgServerTestSuite) TestMsgAddMarkerRequest() { { name: "fail to ADD new marker, incorrect nav config", msg: types.MsgAddMarkerRequest{ - Amount: sdk.NewCoin("jackthecat", sdk.NewInt(100)), + Amount: sdk.NewInt64Coin("jackthecat", 100), Manager: s.owner1, FromAddress: s.owner1, Status: types.StatusProposed, @@ -148,7 +148,7 @@ func (s *MsgServerTestSuite) TestMsgAddMarkerRequest() { { name: "successfully Add marker with nav", msg: types.MsgAddMarkerRequest{ - Amount: sdk.NewCoin(navDenom, sdk.NewInt(100)), + Amount: sdk.NewInt64Coin(navDenom, 100), Manager: s.owner1, FromAddress: s.owner1, Status: types.StatusProposed, @@ -179,7 +179,7 @@ func (s *MsgServerTestSuite) TestMsgAddMarkerRequest() { { name: "successfully add marker with dash and period", msg: types.MsgAddMarkerRequest{ - Amount: sdk.NewCoin(denomWithDashPeriod, sdk.NewInt(1000)), + Amount: sdk.NewInt64Coin(denomWithDashPeriod, 1000), Manager: s.owner1, FromAddress: s.owner1, Status: types.StatusProposed, @@ -208,7 +208,7 @@ func (s *MsgServerTestSuite) TestMsgAddMarkerRequest() { { name: "successfully ADD new marker with required attributes", msg: types.MsgAddMarkerRequest{ - Amount: sdk.NewCoin(rdenom, sdk.NewInt(100)), + Amount: sdk.NewInt64Coin(rdenom, 100), Manager: s.owner1, FromAddress: s.owner1, Status: types.StatusProposed, @@ -280,7 +280,7 @@ func (s *MsgServerTestSuite) TestMsgFinalizeMarkerRequest() { {Address: authUser.String(), Permissions: types.AccessList{types.Access_Admin, types.Access_Mint}}, }, ) - validMarker.Supply = sdk.NewInt(1) + validMarker.Supply = sdkmath.NewInt(1) s.Require().NoError(s.app.MarkerKeeper.AddMarkerAccount(s.ctx, validMarker)) s.Require().NoError(s.app.MarkerKeeper.SetNetAssetValue(s.ctx, validMarker, types.NetAssetValue{Price: sdk.NewInt64Coin(types.UsdDenom, 1), Volume: 1}, "test")) @@ -301,7 +301,7 @@ func (s *MsgServerTestSuite) TestMsgFinalizeMarkerRequest() { } for _, tc := range testCases { s.Run(tc.name, func() { - res, err := s.msgServer.Finalize(sdk.WrapSDKContext(s.ctx), + res, err := s.msgServer.Finalize(s.ctx, &tc.msg) if len(tc.expErr) > 0 { @@ -339,7 +339,7 @@ func (s *MsgServerTestSuite) TestUpdateForcedTransfer() { }, Status: status, Denom: denom, - Supply: sdk.NewInt(1000), + Supply: sdkmath.NewInt(1000), MarkerType: types.MarkerType_RestrictedCoin, AllowGovernanceControl: true, AllowForcedTransfer: allowForcedTransfer, @@ -464,11 +464,11 @@ func (s *MsgServerTestSuite) TestUpdateForcedTransfer() { } em := sdk.NewEventManager() - goCtx := sdk.WrapSDKContext(s.ctx.WithEventManager(em)) + ctx := s.ctx.WithEventManager(em) var res *types.MsgUpdateForcedTransferResponse var err error testFunc := func() { - res, err = s.msgServer.UpdateForcedTransfer(goCtx, tc.msg) + res, err = s.msgServer.UpdateForcedTransfer(ctx, tc.msg) } s.Require().NotPanics(testFunc, "UpdateForcedTransfer") @@ -492,7 +492,7 @@ func (s *MsgServerTestSuite) TestUpdateForcedTransfer() { { Type: sdk.EventTypeMessage, Attributes: []abci.EventAttribute{ - {Key: []byte(sdk.AttributeKeyModule), Value: []byte(types.ModuleName)}, + {Key: sdk.AttributeKeyModule, Value: types.ModuleName}, }, }, } @@ -594,7 +594,7 @@ func (s *MsgServerTestSuite) TestUpdateSendDenyList() { for _, tc := range testCases { s.Run(tc.name, func() { - res, err := s.msgServer.UpdateSendDenyList(sdk.WrapSDKContext(s.ctx), + res, err := s.msgServer.UpdateSendDenyList(s.ctx, &tc.msg) if len(tc.expErr) > 0 { @@ -704,7 +704,7 @@ func (s *MsgServerTestSuite) TestAddNetAssetValue() { for _, tc := range testCases { s.Run(tc.name, func() { - res, err := s.msgServer.AddNetAssetValues(sdk.WrapSDKContext(s.ctx), + res, err := s.msgServer.AddNetAssetValues(s.ctx, &tc.msg) if len(tc.expErr) > 0 { diff --git a/x/marker/keeper/params.go b/x/marker/keeper/params.go index 07a331411e..9b2b39cd68 100644 --- a/x/marker/keeper/params.go +++ b/x/marker/keeper/params.go @@ -4,7 +4,7 @@ import ( "fmt" "regexp" - "cosmossdk.io/math" + sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" @@ -37,7 +37,7 @@ func (k Keeper) GetMaxTotalSupply(ctx sdk.Context) (max uint64) { } // GetMaxSupply return the current parameter value for the max allowed supply (or default if unset) -func (k Keeper) GetMaxSupply(ctx sdk.Context) (max math.Int) { +func (k Keeper) GetMaxSupply(ctx sdk.Context) (max sdkmath.Int) { max = types.StringToBigInt(types.DefaultMaxSupply) if k.paramSpace.Has(ctx, types.ParamStoreKeyMaxSupply) { k.paramSpace.Get(ctx, types.ParamStoreKeyMaxSupply, &max) diff --git a/x/marker/keeper/proposal_handler.go b/x/marker/keeper/proposal_handler.go index 5cd0d09b38..0695a266bb 100644 --- a/x/marker/keeper/proposal_handler.go +++ b/x/marker/keeper/proposal_handler.go @@ -195,7 +195,7 @@ func HandleChangeStatusProposal(ctx sdk.Context, k Keeper, c *types.ChangeStatus if m.GetStatus() != types.StatusCancelled { return fmt.Errorf("only cancelled markers can be deleted") } - if err = k.AdjustCirculation(ctx, m, sdk.NewCoin(c.Denom, sdk.ZeroInt())); err != nil { + if err = k.AdjustCirculation(ctx, m, sdk.NewInt64Coin(c.Denom, 0)); err != nil { return fmt.Errorf("could not dispose of marker supply: %w", err) } } diff --git a/x/marker/keeper/proposal_handler_test.go b/x/marker/keeper/proposal_handler_test.go index a6a62a4869..d6ddf03055 100644 --- a/x/marker/keeper/proposal_handler_test.go +++ b/x/marker/keeper/proposal_handler_test.go @@ -17,8 +17,6 @@ import ( "github.com/provenance-io/provenance/internal/pioconfig" markerkeeper "github.com/provenance-io/provenance/x/marker/keeper" markertypes "github.com/provenance-io/provenance/x/marker/types" - - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" ) type IntegrationTestSuite struct { @@ -33,7 +31,7 @@ type IntegrationTestSuite struct { func (s *IntegrationTestSuite) SetupSuite() { s.app = provenance.Setup(s.T()) - s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{}) + s.ctx = s.app.BaseApp.NewContext(false) s.k = markerkeeper.NewKeeper(s.app.AppCodec(), s.app.GetKey(markertypes.ModuleName), s.app.GetSubspace(markertypes.ModuleName), s.app.AccountKeeper, s.app.BankKeeper, s.app.AuthzKeeper, s.app.FeeGrantKeeper, s.app.AttributeKeeper, s.app.NameKeeper, s.app.TransferKeeper, nil) s.accountAddr = sdk.AccAddress(secp256k1.GenPrivKey().PubKey().Address()) } @@ -48,7 +46,7 @@ func (s *IntegrationTestSuite) TestMarkerProposals() { markerType markertypes.MarkerType, allowGov bool, ) *markertypes.MsgAddMarkerRequest { return &markertypes.MsgAddMarkerRequest{ - Amount: sdk.NewCoin(denom, sdk.NewInt(100)), + Amount: sdk.NewInt64Coin(denom, 100), Manager: manager, FromAddress: s.app.MarkerKeeper.GetAuthority(), Status: status, @@ -89,66 +87,66 @@ func (s *IntegrationTestSuite) TestMarkerProposals() { // INCREASE SUPPLY PROPOSALS { "supply increase - valid", - markertypes.NewSupplyIncreaseProposal("title", "description", sdk.NewCoin("test1", sdk.NewInt(100)), s.accountAddr.String()), + markertypes.NewSupplyIncreaseProposal("title", "description", sdk.NewInt64Coin("test1", 100), s.accountAddr.String()), nil, }, { "supply increase - on finalized marker", - markertypes.NewSupplyIncreaseProposal("title", "description", sdk.NewCoin("pending", sdk.NewInt(100)), s.accountAddr.String()), + markertypes.NewSupplyIncreaseProposal("title", "description", sdk.NewInt64Coin("pending", 100), s.accountAddr.String()), nil, }, { "supply increase - marker doesn't exist", - markertypes.NewSupplyIncreaseProposal("title", "description", sdk.NewCoin("test", sdk.NewInt(100)), s.accountAddr.String()), + markertypes.NewSupplyIncreaseProposal("title", "description", sdk.NewInt64Coin("test", 100), s.accountAddr.String()), fmt.Errorf("test marker does not exist"), }, { "supply increase - no governance allowed", - markertypes.NewSupplyIncreaseProposal("title", "description", sdk.NewCoin("testnogov", sdk.NewInt(100)), s.accountAddr.String()), + markertypes.NewSupplyIncreaseProposal("title", "description", sdk.NewInt64Coin("testnogov", 100), s.accountAddr.String()), fmt.Errorf("testnogov marker does not allow governance control"), }, { "supply increase - valid no target", - markertypes.NewSupplyIncreaseProposal("title", "description", sdk.NewCoin("test1", sdk.NewInt(100)), ""), + markertypes.NewSupplyIncreaseProposal("title", "description", sdk.NewInt64Coin("test1", 100), ""), nil, }, // DECREASE SUPPLY PROPOSALS { "supply decrease - valid", - markertypes.NewSupplyDecreaseProposal("title", "description", sdk.NewCoin("test1", sdk.NewInt(100))), + markertypes.NewSupplyDecreaseProposal("title", "description", sdk.NewInt64Coin("test1", 100)), nil, }, { "supply decrease - no governance allowed", - markertypes.NewSupplyDecreaseProposal("title", "description", sdk.NewCoin("testnogov", sdk.NewInt(100))), + markertypes.NewSupplyDecreaseProposal("title", "description", sdk.NewInt64Coin("testnogov", 100)), fmt.Errorf("testnogov marker does not allow governance control"), }, { "supply decrease - marker doesnot exist", - markertypes.NewSupplyDecreaseProposal("title", "description", sdk.NewCoin("test", sdk.NewInt(100))), + markertypes.NewSupplyDecreaseProposal("title", "description", sdk.NewInt64Coin("test", 100)), fmt.Errorf("test marker does not exist"), }, // WITHDRAW PROPOSALS { "withdraw - valid", - markertypes.NewWithdrawEscrowProposal("title", "description", "test1", sdk.NewCoins(sdk.NewCoin("test1", sdk.NewInt(10))), s.accountAddr.String()), + markertypes.NewWithdrawEscrowProposal("title", "description", "test1", sdk.NewCoins(sdk.NewInt64Coin("test1", 10)), s.accountAddr.String()), nil, }, { "withdraw - no governance", - markertypes.NewWithdrawEscrowProposal("title", "description", "testnogov", sdk.NewCoins(sdk.NewCoin("testnogov", sdk.NewInt(1))), ""), + markertypes.NewWithdrawEscrowProposal("title", "description", "testnogov", sdk.NewCoins(sdk.NewInt64Coin("testnogov", 1)), ""), fmt.Errorf("testnogov marker does not allow governance control"), }, { "withdraw - marker doesnot exist", - markertypes.NewWithdrawEscrowProposal("title", "description", "test", sdk.NewCoins(sdk.NewCoin("test", sdk.NewInt(100))), ""), + markertypes.NewWithdrawEscrowProposal("title", "description", "test", sdk.NewCoins(sdk.NewInt64Coin("test", 100)), ""), fmt.Errorf("test marker does not exist"), }, { "withdraw - invalid recpient", - markertypes.NewWithdrawEscrowProposal("title", "description", "test1", sdk.NewCoins(sdk.NewCoin("test1", sdk.NewInt(100))), "bad1address"), + markertypes.NewWithdrawEscrowProposal("title", "description", "test1", sdk.NewCoins(sdk.NewInt64Coin("test1", 100)), "bad1address"), fmt.Errorf("decoding bech32 failed: invalid checksum (expected dpg8tu got ddress)"), }, diff --git a/x/marker/keeper/querier.go b/x/marker/keeper/querier.go index 908cbd1721..e2275ce666 100644 --- a/x/marker/keeper/querier.go +++ b/x/marker/keeper/querier.go @@ -3,7 +3,7 @@ package keeper import ( "strings" - abci "github.com/tendermint/tendermint/abci/types" + abci "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" @@ -13,8 +13,10 @@ import ( "github.com/provenance-io/provenance/x/marker/types" ) +// TODO[1760]: marker: Delete the marker Querier. + // NewQuerier is the module level router for state queries (using the Legacy Amino Codec) -func NewQuerier(keeper Keeper, legacyQuerierCdc *codec.LegacyAmino) sdk.Querier { +func NewQuerier(keeper Keeper, legacyQuerierCdc *codec.LegacyAmino) func(ctx sdk.Context, path []string, req abci.RequestQuery) ([]byte, error) { return func(ctx sdk.Context, path []string, req abci.RequestQuery) ([]byte, error) { switch path[0] { case types.QueryMarkers: diff --git a/x/marker/keeper/querier_test.go b/x/marker/keeper/querier_test.go index 5632bbc349..fa052a56fc 100644 --- a/x/marker/keeper/querier_test.go +++ b/x/marker/keeper/querier_test.go @@ -4,19 +4,18 @@ import ( "fmt" "testing" - simapp "github.com/provenance-io/provenance/app" - "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + abci "github.com/cometbft/cometbft/abci/types" + + simapp "github.com/provenance-io/provenance/app" markerkeeper "github.com/provenance-io/provenance/x/marker/keeper" markertypes "github.com/provenance-io/provenance/x/marker/types" ) func TestNewQuerier(t *testing.T) { app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) cdc := app.LegacyAmino() user := testUserAddress("test") @@ -86,7 +85,7 @@ func TestNewQuerier(t *testing.T) { func TestQuerierAccess(t *testing.T) { app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) user := testUserAddress("test") // create a marker account mac := markertypes.NewEmptyMarkerAccount("testcoin", user.String(), []markertypes.AccessGrant{*markertypes.NewAccessGrant(user, @@ -110,7 +109,7 @@ func TestQuerierAccess(t *testing.T) { func TestQuerierCoins(t *testing.T) { app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) user := testUserAddress("test") // create a marker account mac := markertypes.NewEmptyMarkerAccount("testcoin", user.String(), []markertypes.AccessGrant{*markertypes.NewAccessGrant(user, @@ -134,7 +133,7 @@ func TestQuerierCoins(t *testing.T) { func TestQuerierSupply(t *testing.T) { app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) user := testUserAddress("test") // create a marker account mac := markertypes.NewEmptyMarkerAccount("testcoin", user.String(), []markertypes.AccessGrant{*markertypes.NewAccessGrant(user, diff --git a/x/marker/keeper/query_server.go b/x/marker/keeper/query_server.go index 5b7a027a88..5c09a45c7b 100644 --- a/x/marker/keeper/query_server.go +++ b/x/marker/keeper/query_server.go @@ -7,7 +7,7 @@ import ( "google.golang.org/grpc/status" codectypes "github.com/cosmos/cosmos-sdk/codec/types" - "github.com/cosmos/cosmos-sdk/store/prefix" + "cosmossdk.io/store/prefix" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/query" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" diff --git a/x/marker/keeper/send_restrictions.go b/x/marker/keeper/send_restrictions.go index 8ef4bd3c45..befc375d67 100644 --- a/x/marker/keeper/send_restrictions.go +++ b/x/marker/keeper/send_restrictions.go @@ -1,6 +1,7 @@ package keeper import ( + "context" "fmt" "strings" @@ -15,7 +16,8 @@ const AddressHasAccessKey = "address_has_access" var _ banktypes.SendRestrictionFn = Keeper{}.SendRestrictionFn -func (k Keeper) SendRestrictionFn(ctx sdk.Context, fromAddr, toAddr sdk.AccAddress, amt sdk.Coins) (sdk.AccAddress, error) { +func (k Keeper) SendRestrictionFn(goCtx context.Context, fromAddr, toAddr sdk.AccAddress, amt sdk.Coins) (sdk.AccAddress, error) { + ctx := sdk.UnwrapSDKContext(goCtx) // In some cases, it might not be possible to add a bypass to the context. // If it's from either the Marker or IBC Transfer module accounts, assume proper validation has been done elsewhere. if types.HasBypass(ctx) || fromAddr.Equals(k.markerModuleAddr) || fromAddr.Equals(k.ibcTransferModuleAddr) { diff --git a/x/marker/keeper/send_restrictions_test.go b/x/marker/keeper/send_restrictions_test.go index af01e4b175..9aa053aa4e 100644 --- a/x/marker/keeper/send_restrictions_test.go +++ b/x/marker/keeper/send_restrictions_test.go @@ -7,11 +7,10 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + simapp "github.com/provenance-io/provenance/app" attrTypes "github.com/provenance-io/provenance/x/attribute/types" "github.com/provenance-io/provenance/x/marker" @@ -28,7 +27,7 @@ func TestSendRestrictionFn(t *testing.T) { } app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) ctxWithBypass := types.WithBypass(ctx) owner := sdk.AccAddress("owner_address_______") app.AccountKeeper.SetAccount(ctx, app.AccountKeeper.NewAccountWithAddress(ctx, owner)) @@ -429,7 +428,7 @@ func TestBankSendCoinsUsesSendRestrictionFn(t *testing.T) { addrOther := sdk.AccAddress("other_address_______") app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) app.MarkerKeeper.AddMarkerAccount(ctx, types.NewEmptyMarkerAccount("navcoin", addrNameOwner.String(), []types.AccessGrant{})) app.AccountKeeper.SetAccount(ctx, app.AccountKeeper.NewAccountWithAddress(ctx, addrNameOwner)) err := app.NameKeeper.SetNameRecord(ctx, "kyc.provenance.io", addrNameOwner, false) @@ -523,7 +522,7 @@ func TestBankInputOutputCoinsUsesSendRestrictionFn(t *testing.T) { addrWithAttr2 := sdk.AccAddress("addrWithAttr2_______") app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) app.MarkerKeeper.AddMarkerAccount(ctx, types.NewEmptyMarkerAccount("navcoin", addrManager.String(), []types.AccessGrant{})) app.AccountKeeper.SetAccount(ctx, app.AccountKeeper.NewAccountWithAddress(ctx, addrManager)) err := app.NameKeeper.SetNameRecord(ctx, "rando.io", addrManager, false) @@ -665,7 +664,7 @@ func TestBankInputOutputCoinsUsesSendRestrictionFn(t *testing.T) { for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { - err = app.BankKeeper.InputOutputCoins(ctx, []banktypes.Input{tc.input}, tc.outputs) + // err = app.BankKeeper.InputOutputCoins(ctx, []banktypes.Input{tc.input}, tc.outputs) // TODO[1760]: bank if len(tc.expErr) != 0 { assert.EqualError(t, err, tc.expErr, "InputOutputCoins") } else { @@ -681,7 +680,7 @@ func TestBankInputOutputCoinsUsesSendRestrictionFn(t *testing.T) { func TestNormalizeRequiredAttributes(t *testing.T) { app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) testCases := []struct { name string @@ -815,7 +814,7 @@ func TestQuarantineOfRestrictedCoins(t *testing.T) { // Directly tests the bug described in https://github.com/provenance-io/provenance/issues/1626 app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) owner := sdk.AccAddress("owner_address_______") app.AccountKeeper.SetAccount(ctx, app.AccountKeeper.NewAccountWithAddress(ctx, owner)) reqAttr := "quarantinetest.provenance.io" @@ -872,7 +871,7 @@ func TestQuarantineOfRestrictedCoins(t *testing.T) { // Create two quarantined address: one with the required attributes, one without. optIn := func(t *testing.T, addr sdk.AccAddress) { - require.NoError(t, app.QuarantineKeeper.SetOptIn(ctx, addr), "SetOptIn(%q)", string(addr)) + // require.NoError(t, app.QuarantineKeeper.SetOptIn(ctx, addr), "SetOptIn(%q)", string(addr)) // TODO[1760]: quarantine } addrQWithAttr := sdk.AccAddress("addrQWithReqAttrs____") addrQWithoutAttr := sdk.AccAddress("addrQWithoutReqAttrs____") @@ -967,13 +966,17 @@ func TestQuarantineOfRestrictedCoins(t *testing.T) { if sendErr != nil { return } - amt, acceptErr := app.QuarantineKeeper.AcceptQuarantinedFunds(ctx, tc.toAddr, tc.fromAddr) - if len(tc.expAcceptErr) != 0 { - require.EqualError(t, acceptErr, tc.expAcceptErr, "AcceptQuarantinedFunds") - } else { - require.NoError(t, acceptErr, "AcceptQuarantinedFunds") - assert.Equal(t, tc.amt.String(), amt.String(), "accepted quarantined funds") - } + + // TODO[1760]: quarantine: Uncomment once it's back. + /* + amt, acceptErr := app.QuarantineKeeper.AcceptQuarantinedFunds(ctx, tc.toAddr, tc.fromAddr) + if len(tc.expAcceptErr) != 0 { + require.EqualError(t, acceptErr, tc.expAcceptErr, "AcceptQuarantinedFunds") + } else { + require.NoError(t, acceptErr, "AcceptQuarantinedFunds") + assert.Equal(t, tc.amt.String(), amt.String(), "accepted quarantined funds") + } + */ }) } @@ -987,9 +990,10 @@ func TestQuarantineOfRestrictedCoins(t *testing.T) { require.NoError(t, sendErr, "SendCoins") delErr := app.AttributeKeeper.DeleteAttribute(ctx, toAddr.String(), reqAttr, &attrVal, owner) require.NoError(t, delErr, "DeleteAttribute") - expAcceptErr := noAttrErr(toAddr) - _, acceptErr := app.QuarantineKeeper.AcceptQuarantinedFunds(ctx, toAddr, fromAddr) - require.EqualError(t, acceptErr, expAcceptErr, "AcceptQuarantinedFunds") + // TODO[1760]: quarantine: Uncomment once it's back. + // expAcceptErr := noAttrErr(toAddr) + // _, acceptErr := app.QuarantineKeeper.AcceptQuarantinedFunds(ctx, toAddr, fromAddr) + // require.EqualError(t, acceptErr, expAcceptErr, "AcceptQuarantinedFunds") }) t.Run("attr added after funds quarantined", func(t *testing.T) { @@ -1000,9 +1004,12 @@ func TestQuarantineOfRestrictedCoins(t *testing.T) { sendErr := app.BankKeeper.SendCoins(ctx, fromAddr, toAddr, amt) require.NoError(t, sendErr, "SendCoins") setAttr(t, toAddr) - acceptedAmt, acceptErr := app.QuarantineKeeper.AcceptQuarantinedFunds(ctx, toAddr, fromAddr) - require.NoError(t, acceptErr, "AcceptQuarantinedFunds error") - assert.Equal(t, amt.String(), acceptedAmt.String(), "AcceptQuarantinedFunds amount") + // TODO[1760]: quarantine: Uncomment once it's back. + /* + acceptedAmt, acceptErr := app.QuarantineKeeper.AcceptQuarantinedFunds(ctx, toAddr, fromAddr) + require.NoError(t, acceptErr, "AcceptQuarantinedFunds error") + assert.Equal(t, amt.String(), acceptedAmt.String(), "AcceptQuarantinedFunds amount") + */ }) t.Run("marker restriction applied before quarantine", func(t *testing.T) { diff --git a/x/marker/module.go b/x/marker/module.go index d2a5a677a8..730b3f1328 100644 --- a/x/marker/module.go +++ b/x/marker/module.go @@ -9,7 +9,9 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" - abci "github.com/tendermint/tendermint/abci/types" + abci "github.com/cometbft/cometbft/abci/types" + + feegrantkeeper "cosmossdk.io/x/feegrant/keeper" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" @@ -19,7 +21,7 @@ import ( simtypes "github.com/cosmos/cosmos-sdk/types/simulation" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" - feegrantkeeper "github.com/cosmos/cosmos-sdk/x/feegrant/keeper" + govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper" "github.com/provenance-io/provenance/x/marker/client/cli" "github.com/provenance-io/provenance/x/marker/keeper" @@ -31,6 +33,7 @@ import ( var ( _ module.AppModule = AppModule{} _ module.AppModuleBasic = AppModuleBasic{} + // TODO[1760]: app-module: Add more assertions for the new types and clean up stuff no longer needed. ) // AppModuleBasic contains non-dependent elements for the marker module. @@ -90,7 +93,7 @@ type AppModule struct { accountKeeper authkeeper.AccountKeeper bankKeeper bankkeeper.Keeper feegrantKeeper feegrantkeeper.Keeper - govKeeper types.GovKeeper + govKeeper govkeeper.Keeper attrKeeper types.AttrKeeper registry cdctypes.InterfaceRegistry } @@ -102,7 +105,7 @@ func NewAppModule( accountKeeper authkeeper.AccountKeeper, bankKeeper bankkeeper.Keeper, feegrantKeeper feegrantkeeper.Keeper, - govKeeper types.GovKeeper, + govKeeper govkeeper.Keeper, attrKeeper types.AttrKeeper, registry cdctypes.InterfaceRegistry, ) AppModule { @@ -118,31 +121,22 @@ func NewAppModule( } } +// IsOnePerModuleType is a dummy function that satisfies the OnePerModuleType interface (needed by AppModule). +func (AppModule) IsOnePerModuleType() {} + +// IsAppModule is a dummy function that satisfies the AppModule interface. +func (AppModule) IsAppModule() {} + // Name returns the module name. func (AppModule) Name() string { return types.ModuleName } -// Route returns the message routing key for the marker module. -func (am AppModule) Route() sdk.Route { - return sdk.NewRoute(types.RouterKey, NewHandler(am.keeper)) -} - // RegisterInvariants ensures the total supply in bankKeeper matches amount declared as total in marker configuration func (am AppModule) RegisterInvariants(ir sdk.InvariantRegistry) { keeper.RegisterInvariants(ir, am.keeper, am.bankKeeper) } -// QuerierRoute returns the query route for this module. -func (am AppModule) QuerierRoute() string { - return types.QuerierRoute -} - -// LegacyQuerierHandler returns no sdk.Querier. -func (am AppModule) LegacyQuerierHandler(_ *codec.LegacyAmino) sdk.Querier { - return nil -} - // RegisterServices registers module services. func (am AppModule) RegisterServices(cfg module.Configurator) { types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) @@ -164,14 +158,9 @@ func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.Raw } // BeginBlock returns the begin blocker for the account module. -func (am AppModule) BeginBlock(ctx sdk.Context, req abci.RequestBeginBlock) { - BeginBlocker(ctx, req, am.keeper, am.bankKeeper) -} - -// EndBlock returns the end blocker for the account module. It returns no validator -// updates. -func (AppModule) EndBlock(_ sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate { - return []abci.ValidatorUpdate{} +func (am AppModule) BeginBlock(ctx context.Context) error { + BeginBlocker(sdk.UnwrapSDKContext(ctx), am.keeper, am.bankKeeper) + return nil } // ____________________________________________________________________________ @@ -190,12 +179,12 @@ func (am AppModule) ProposalContents(_ module.SimulationState) []simtypes.Weight } // RandomizedParams creates randomized marker param changes for the simulator. -func (AppModule) RandomizedParams(r *rand.Rand) []simtypes.ParamChange { +func (AppModule) RandomizedParams(r *rand.Rand) []simtypes.LegacyParamChange { return simulation.ParamChanges(r) } // RegisterStoreDecoder registers a decoder for marker module's types -func (am AppModule) RegisterStoreDecoder(_ sdk.StoreDecoderRegistry) { +func (am AppModule) RegisterStoreDecoder(_ simtypes.StoreDecoderRegistry) { // sdr[types.StoreKey] = simulation.NewDecodeStore(am.cdc) } diff --git a/x/marker/simulation/genesis.go b/x/marker/simulation/genesis.go index 47ce08a41c..25dac03894 100644 --- a/x/marker/simulation/genesis.go +++ b/x/marker/simulation/genesis.go @@ -7,7 +7,7 @@ import ( "fmt" "math/rand" - "cosmossdk.io/math" + sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" @@ -24,7 +24,7 @@ const ( ) // GenMaxSupply randomized Maximum amount of supply to allow for markers -func GenMaxSupply(r *rand.Rand) math.Int { +func GenMaxSupply(r *rand.Rand) sdkmath.Int { maxSupply := fmt.Sprintf("%d%d", r.Uint64(), r.Uint64()) return types.StringToBigInt(maxSupply) } @@ -43,21 +43,21 @@ func GenUnrestrictedDenomRegex(r *rand.Rand) string { // RandomizedGenState generates a random GenesisState for marker func RandomizedGenState(simState *module.SimulationState) { - var maxSupply math.Int + var maxSupply sdkmath.Int simState.AppParams.GetOrGenerate( - simState.Cdc, MaxSupply, &maxSupply, simState.Rand, + MaxSupply, &maxSupply, simState.Rand, func(r *rand.Rand) { maxSupply = GenMaxSupply(r) }, ) var enableGovernance bool simState.AppParams.GetOrGenerate( - simState.Cdc, EnableGovernance, &enableGovernance, simState.Rand, + EnableGovernance, &enableGovernance, simState.Rand, func(r *rand.Rand) { enableGovernance = GenEnableGovernance(r) }, ) var unrestrictedDenomRegex string simState.AppParams.GetOrGenerate( - simState.Cdc, UnrestrictedDenomRegex, &unrestrictedDenomRegex, simState.Rand, + UnrestrictedDenomRegex, &unrestrictedDenomRegex, simState.Rand, func(r *rand.Rand) { unrestrictedDenomRegex = GenUnrestrictedDenomRegex(r) }, ) diff --git a/x/marker/simulation/genesis_test.go b/x/marker/simulation/genesis_test.go index a686e92483..275138c2ed 100644 --- a/x/marker/simulation/genesis_test.go +++ b/x/marker/simulation/genesis_test.go @@ -7,9 +7,10 @@ import ( "github.com/stretchr/testify/require" + sdkmath "cosmossdk.io/math" + "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" @@ -32,7 +33,7 @@ func TestRandomizedGenState(t *testing.T) { Rand: r, NumBonded: 3, Accounts: simtypes.RandomAccounts(r, 3), - InitialStake: sdk.NewInt(1000), + InitialStake: sdkmath.NewInt(1000), GenState: make(map[string]json.RawMessage), } diff --git a/x/marker/simulation/operations.go b/x/marker/simulation/operations.go index bc3b8356ad..1aa3681a55 100644 --- a/x/marker/simulation/operations.go +++ b/x/marker/simulation/operations.go @@ -7,17 +7,18 @@ import ( "strconv" "time" - "cosmossdk.io/math" + sdkmath "cosmossdk.io/math" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" - "github.com/cosmos/cosmos-sdk/simapp/helpers" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" "github.com/cosmos/cosmos-sdk/x/bank/testutil" + govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1" "github.com/cosmos/cosmos-sdk/x/simulation" @@ -47,7 +48,7 @@ const ( // WeightedOperations returns all the operations from the module with their respective weights func WeightedOperations( appParams simtypes.AppParams, cdc codec.JSONCodec, protoCodec *codec.ProtoCodec, - k keeper.Keeper, ak authkeeper.AccountKeeper, bk bankkeeper.Keeper, gk types.GovKeeper, attrk types.AttrKeeper, + k keeper.Keeper, ak authkeeper.AccountKeeper, bk bankkeeper.Keeper, gk govkeeper.Keeper, attrk types.AttrKeeper, ) simulation.WeightedOperations { args := &WeightedOpsArgs{ AppParams: appParams, @@ -69,43 +70,43 @@ func WeightedOperations( weightMsgUpdateSendDenyList int ) - appParams.GetOrGenerate(cdc, OpWeightMsgAddMarker, &weightMsgAddMarker, nil, + appParams.GetOrGenerate(OpWeightMsgAddMarker, &weightMsgAddMarker, nil, func(_ *rand.Rand) { weightMsgAddMarker = simappparams.DefaultWeightMsgAddMarker }, ) - appParams.GetOrGenerate(cdc, OpWeightMsgChangeStatus, &weightMsgChangeStatus, nil, + appParams.GetOrGenerate(OpWeightMsgChangeStatus, &weightMsgChangeStatus, nil, func(_ *rand.Rand) { weightMsgChangeStatus = simappparams.DefaultWeightMsgChangeStatus }, ) - appParams.GetOrGenerate(cdc, OpWeightMsgAddAccess, &weightMsgAddAccess, nil, + appParams.GetOrGenerate(OpWeightMsgAddAccess, &weightMsgAddAccess, nil, func(_ *rand.Rand) { weightMsgAddAccess = simappparams.DefaultWeightMsgAddAccess }, ) - appParams.GetOrGenerate(cdc, OpWeightMsgAddActivateFinalizeMarker, &weightMsgAddFinalizeActivateMarker, nil, + appParams.GetOrGenerate(OpWeightMsgAddActivateFinalizeMarker, &weightMsgAddFinalizeActivateMarker, nil, func(_ *rand.Rand) { weightMsgAddFinalizeActivateMarker = simappparams.DefaultWeightMsgAddFinalizeActivateMarker }, ) - appParams.GetOrGenerate(cdc, OpWeightMsgAddMarkerProposal, &weightMsgAddMarkerProposal, nil, + appParams.GetOrGenerate(OpWeightMsgAddMarkerProposal, &weightMsgAddMarkerProposal, nil, func(_ *rand.Rand) { weightMsgAddMarkerProposal = simappparams.DefaultWeightMsgAddMarkerProposal }, ) - appParams.GetOrGenerate(cdc, OpWeightMsgSetAccountData, &weightMsgSetAccountData, nil, + appParams.GetOrGenerate(OpWeightMsgSetAccountData, &weightMsgSetAccountData, nil, func(_ *rand.Rand) { weightMsgSetAccountData = simappparams.DefaultWeightMsgSetAccountData }, ) - appParams.GetOrGenerate(cdc, OpWeightMsgUpdateSendDenyList, &weightMsgUpdateSendDenyList, nil, + appParams.GetOrGenerate(OpWeightMsgUpdateSendDenyList, &weightMsgUpdateSendDenyList, nil, func(_ *rand.Rand) { weightMsgUpdateSendDenyList = simappparams.DefaultWeightMsgUpdateDenySendList }, @@ -153,7 +154,7 @@ func SimulateMsgAddMarker(k keeper.Keeper, ak authkeeper.AccountKeeperI, bk bank denom := randomUnrestrictedDenom(r, k.GetUnrestrictedDenomRegex(ctx)) msg := types.NewMsgAddMarkerRequest( denom, - math.NewIntFromBigInt(math.ZeroInt().BigInt().Rand(r, k.GetMaxSupply(ctx).BigInt())), + sdkmath.NewIntFromBigInt(sdkmath.ZeroInt().BigInt().Rand(r, k.GetMaxSupply(ctx).BigInt())), simAccount.Address, mgrAccount.Address, types.MarkerType(r.Intn(2)+1), // coin or restricted_coin @@ -251,7 +252,7 @@ func SimulateMsgAddFinalizeActivateMarker(k keeper.Keeper, ak authkeeper.Account grants := randomAccessGrants(r, accs, 100, markerType) msg := types.NewMsgAddFinalizeActivateMarkerRequest( denom, - math.NewIntFromBigInt(math.ZeroInt().BigInt().Rand(r, k.GetMaxSupply(ctx).BigInt())), + sdkmath.NewIntFromBigInt(sdkmath.ZeroInt().BigInt().Rand(r, k.GetMaxSupply(ctx).BigInt())), simAccount.Address, mgrAccount.Address, markerType, @@ -285,7 +286,7 @@ func SimulateMsgAddMarkerProposal(k keeper.Keeper, args *WeightedOpsArgs) simtyp msg := &types.MsgAddMarkerRequest{ Amount: sdk.Coin{ Denom: denom, - Amount: math.NewIntFromBigInt(math.ZeroInt().BigInt().Rand(r, k.GetMaxSupply(ctx).BigInt())), + Amount: sdkmath.NewIntFromBigInt(sdkmath.ZeroInt().BigInt().Rand(r, k.GetMaxSupply(ctx).BigInt())), }, Manager: simAccount.Address.String(), FromAddress: k.GetAuthority(), @@ -305,7 +306,11 @@ func SimulateMsgAddMarkerProposal(k keeper.Keeper, args *WeightedOpsArgs) simtyp } // Get the governance min deposit needed - govMinDep := sdk.NewCoins(args.GK.GetDepositParams(ctx).MinDeposit...) + govParams, err := args.GK.Params.Get(ctx) + if err != nil { + return simtypes.NoOpMsg(types.ModuleName, sdk.MsgTypeURL(msg), "failed to get gov params"), nil, err + } + govMinDep := sdk.NewCoins(govParams.MinDeposit...) sender, _ := simtypes.RandomAcc(r, accs) @@ -328,12 +333,12 @@ func SimulateMsgAddMarkerProposal(k keeper.Keeper, args *WeightedOpsArgs) simtyp return opMsg, nil, err } - proposalID, err := args.GK.GetProposalID(ctx) + proposalID, err := args.GK.ProposalID.Next(ctx) if err != nil { return opMsg, nil, err } - votingPeriod := args.GK.GetVotingParams(ctx).VotingPeriod + votingPeriod := govParams.VotingPeriod fops := make([]simtypes.FutureOperation, len(accs)) for i, acct := range accs { whenVote := ctx.BlockHeader().Time.Add(time.Duration(r.Int63n(int64(votingPeriod.Seconds()))) * time.Second) @@ -429,26 +434,26 @@ func Dispatch( } // fund account with nhash for additional fees, if the account exists (100m stake) if sdk.MsgTypeURL(msg) == "/provenance.marker.v1.MsgAddMarkerRequest" && ak.GetAccount(ctx, account.GetAddress()) != nil { - err = testutil.FundAccount(bk, ctx, account.GetAddress(), sdk.NewCoins(sdk.Coin{ + err = testutil.FundAccount(ctx, bk, account.GetAddress(), sdk.NewCoins(sdk.Coin{ Denom: "stake", - Amount: sdk.NewInt(100_000_000_000_000), + Amount: sdkmath.NewInt(100_000_000_000_000), })) if err != nil { return simtypes.NoOpMsg(sdk.MsgTypeURL(msg), sdk.MsgTypeURL(msg), "unable to fund account with additional fee"), nil, err } fees = fees.Add(sdk.Coin{ Denom: "stake", - Amount: sdk.NewInt(100_000_000_000_000), + Amount: sdkmath.NewInt(100_000_000_000_000), }) } txGen := simappparams.MakeTestEncodingConfig().TxConfig - tx, err := helpers.GenSignedMockTx( + tx, err := simtestutil.GenSignedMockTx( r, txGen, []sdk.Msg{msg}, fees, - helpers.DefaultGenTxGas, + simtestutil.DefaultGenTxGas, chainID, []uint64{account.GetAccountNumber()}, []uint64{account.GetSequence()}, @@ -463,7 +468,7 @@ func Dispatch( return simtypes.NoOpMsg(sdk.MsgTypeURL(msg), sdk.MsgTypeURL(msg), err.Error()), nil, nil } - return simtypes.NewOperationMsg(msg, true, "", &codec.ProtoCodec{}), futures, nil + return simtypes.NewOperationMsg(msg, true, ""), futures, nil } // randomUnrestrictedDenom returns a randomized unrestricted denom string value. @@ -584,7 +589,7 @@ type WeightedOpsArgs struct { ProtoCodec *codec.ProtoCodec AK authkeeper.AccountKeeper BK bankkeeper.Keeper - GK types.GovKeeper + GK govkeeper.Keeper AttrK types.AttrKeeper } @@ -637,7 +642,6 @@ func SendGovMsg(args *SendGovMsgArgs) (bool, simtypes.OperationMsg, error) { TxGen: simappparams.MakeTestEncodingConfig().TxConfig, Cdc: args.ProtoCodec, Msg: govMsg, - MsgType: govMsg.Type(), CoinsSpentInMsg: govMsg.InitialDeposit, Context: args.Ctx, SimAccount: args.Sender, @@ -668,7 +672,6 @@ func OperationMsgVote(args *WeightedOpsArgs, voter simtypes.Account, govPropID u TxGen: simappparams.MakeTestEncodingConfig().TxConfig, Cdc: args.ProtoCodec, Msg: msg, - MsgType: msg.Type(), CoinsSpentInMsg: sdk.Coins{}, Context: ctx, SimAccount: voter, diff --git a/x/marker/simulation/operations_test.go b/x/marker/simulation/operations_test.go index f28fea474d..2e9718507e 100644 --- a/x/marker/simulation/operations_test.go +++ b/x/marker/simulation/operations_test.go @@ -7,22 +7,19 @@ import ( "testing" "time" - "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" sdkmath "cosmossdk.io/math" + "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" "github.com/cosmos/cosmos-sdk/x/bank/testutil" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1" - "github.com/provenance-io/provenance/x/marker/keeper" - - abci "github.com/tendermint/tendermint/abci/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/provenance-io/provenance/app" simappparams "github.com/provenance-io/provenance/app/params" + "github.com/provenance-io/provenance/x/marker/keeper" "github.com/provenance-io/provenance/x/marker/simulation" "github.com/provenance-io/provenance/x/marker/types" ) @@ -36,7 +33,7 @@ type SimTestSuite struct { func (s *SimTestSuite) SetupTest() { s.app = app.Setup(s.T()) - s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{}) + s.ctx = s.app.BaseApp.NewContext(false) } // LogOperationMsg logs all fields of the provided operationMsg. @@ -135,7 +132,7 @@ func (s *SimTestSuite) TestSimulateMsgAddMarker() { accounts := s.getTestingAccounts(r, 3) // begin a new block - s.app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) + // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) // TODO[1760]: finalize-block // execute operation op := simulation.SimulateMsgAddMarker(s.app.MarkerKeeper, s.app.AccountKeeper, s.app.BankKeeper) @@ -160,7 +157,7 @@ func (s *SimTestSuite) TestSimulateMsgAddActivateFinalizeMarker() { accounts := s.getTestingAccounts(r, 3) // begin a new block - s.app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) + // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) // TODO[1760]: finalize-block // execute operation op := simulation.SimulateMsgAddFinalizeActivateMarker(s.app.MarkerKeeper, s.app.AccountKeeper, s.app.BankKeeper) @@ -215,12 +212,17 @@ func (s *SimTestSuite) TestSimulateMsgAddMarkerProposal() { depositPeriod := 1 * time.Second resetParams := func(t *testing.T, ctx sdk.Context) { - require.NotPanics(s.T(), func() { - s.app.GovKeeper.SetDepositParams(s.ctx, govtypes.DepositParams{ - MinDeposit: govMinDep, - MaxDepositPeriod: &depositPeriod, - }) - }, "gov SetDepositParams") + // TODO[1760]: gov: Figure out how to set just the deposit params and uncomment this. + _, _ = govMinDep, depositPeriod + /* + require.NotPanics(s.T(), func() { + s.app.GovKeeper.SetDepositParams(s.ctx, govtypes.DepositParams{ + MinDeposit: govMinDep, + MaxDepositPeriod: &depositPeriod, + }) + }, "gov SetDepositParams") + + */ } access := types.AccessGrant{ @@ -243,7 +245,7 @@ func (s *SimTestSuite) TestSimulateMsgAddMarkerProposal() { { name: "no spendable coins", sender: acctZero, - msg: NewMsgAddMarker("test2", sdk.NewInt(100), sdk.AccAddress{}, types.StatusUndefined, types.MarkerType_Coin, []types.AccessGrant{}, true, true, "validAuthority"), + msg: NewMsgAddMarker("test2", sdkmath.NewInt(100), sdk.AccAddress{}, types.StatusUndefined, types.MarkerType_Coin, []types.AccessGrant{}, true, true, "validAuthority"), deposit: sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 5)}, comment: "should not matter", expSkip: true, @@ -255,7 +257,7 @@ func (s *SimTestSuite) TestSimulateMsgAddMarkerProposal() { { name: "not enough coins for deposit", sender: acctOne, - msg: NewMsgAddMarker("test2", sdk.NewInt(100), sdk.AccAddress{}, types.StatusUndefined, types.MarkerType_Coin, []types.AccessGrant{}, true, true, "validAuthority"), + msg: NewMsgAddMarker("test2", sdkmath.NewInt(100), sdk.AccAddress{}, types.StatusUndefined, types.MarkerType_Coin, []types.AccessGrant{}, true, true, "validAuthority"), deposit: acctOneBalancePlusOne, comment: "should not be this", expSkip: true, @@ -284,7 +286,7 @@ func (s *SimTestSuite) TestSimulateMsgAddMarkerProposal() { Address: acctOne.Address, ConsKey: accounts[0].ConsKey, }, - msg: NewMsgAddMarker("test2", sdk.NewInt(100), sdk.AccAddress{}, types.StatusUndefined, types.MarkerType_Coin, []types.AccessGrant{}, true, true, "validAuthority"), + msg: NewMsgAddMarker("test2", sdkmath.NewInt(100), sdk.AccAddress{}, types.StatusUndefined, types.MarkerType_Coin, []types.AccessGrant{}, true, true, "validAuthority"), deposit: acctOneBalance, comment: "this should be ignored", expSkip: true, @@ -296,7 +298,7 @@ func (s *SimTestSuite) TestSimulateMsgAddMarkerProposal() { { name: "all good", sender: accounts[1], - msg: NewMsgAddMarker("test2", sdk.NewInt(100), sdk.AccAddress{}, types.StatusFinalized, types.MarkerType_Coin, []types.AccessGrant{access}, true, true, "cosmos10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn"), + msg: NewMsgAddMarker("test2", sdkmath.NewInt(100), sdk.AccAddress{}, types.StatusFinalized, types.MarkerType_Coin, []types.AccessGrant{access}, true, true, "cosmos10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn"), deposit: sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 5)}, comment: "this is a test comment", expSkip: false, @@ -383,7 +385,7 @@ func (s *SimTestSuite) TestSimulateMsgSetAccountData() { s.Require().NoError(err, "AddFinalizeActivateMarker") // begin a new block - s.app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) + // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) // TODO[1760]: finalize-block args := s.getWeightedOpsArgs() // execute operation @@ -435,7 +437,7 @@ func (s *SimTestSuite) TestSimulateMsgUpdateSendDenyList() { s.Require().NoError(err, "AddFinalizeActivateMarker") // begin a new block - s.app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) + // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) // TODO[1760]: finalize-block args := s.getWeightedOpsArgs() // execute operation @@ -466,7 +468,7 @@ func (s *SimTestSuite) getTestingAccounts(r *rand.Rand, n int) []simtypes.Accoun for _, account := range accounts { acc := s.app.AccountKeeper.NewAccountWithAddress(s.ctx, account.Address) s.app.AccountKeeper.SetAccount(s.ctx, acc) - err := testutil.FundAccount(s.app.BankKeeper, s.ctx, account.Address, initCoins) + err := testutil.FundAccount(s.ctx, s.app.BankKeeper, account.Address, initCoins) s.Require().NoError(err) } @@ -492,16 +494,20 @@ func (s *SimTestSuite) getWeightedOpsArgs() simulation.WeightedOpsArgs { // getLastGovProp gets the last gov prop to be submitted. func (s *SimTestSuite) getLastGovProp() *govtypes.Proposal { - props := s.app.GovKeeper.GetProposals(s.ctx) - if len(props) == 0 { - return nil - } - return props[len(props)-1] + // TODO[1760]: gov: Uncomment when you figure out how to get the last proposal again. + return nil + /* + props := s.app.GovKeeper.GetProposals(s.ctx) + if len(props) == 0 { + return nil + } + return props[len(props)-1] + */ } // freshCtx creates a new context and sets it to this SimTestSuite's ctx field. func (s *SimTestSuite) freshCtx() { - s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{}) + s.ctx = s.app.BaseApp.NewContext(false) } // createTestingAccountsWithPower creates new accounts with the specified power (coins amount). @@ -515,7 +521,7 @@ func (s *SimTestSuite) createTestingAccountsWithPower(r *rand.Rand, count int, p for _, account := range accounts { acc := s.app.AccountKeeper.NewAccountWithAddress(s.ctx, account.Address) s.app.AccountKeeper.SetAccount(s.ctx, acc) - s.Require().NoError(testutil.FundAccount(s.app.BankKeeper, s.ctx, account.Address, initCoins)) + s.Require().NoError(testutil.FundAccount(s.ctx, s.app.BankKeeper, account.Address, initCoins)) } return accounts diff --git a/x/marker/simulation/params.go b/x/marker/simulation/params.go index 7887d12f8d..e836deb978 100644 --- a/x/marker/simulation/params.go +++ b/x/marker/simulation/params.go @@ -20,20 +20,20 @@ const ( // ParamChanges defines the parameters that can be modified by param change proposals // on the simulation -func ParamChanges(_ *rand.Rand) []simtypes.ParamChange { - return []simtypes.ParamChange{ - simulation.NewSimParamChange(types.ModuleName, keyMaxSupply, +func ParamChanges(_ *rand.Rand) []simtypes.LegacyParamChange { + return []simtypes.LegacyParamChange{ + simulation.NewSimLegacyParamChange(types.ModuleName, keyMaxSupply, func(r *rand.Rand) string { return fmt.Sprintf("\"%s\"", GenMaxSupply(r).String()) }, ), - simulation.NewSimParamChange(types.ModuleName, keyEnableGovernance, + simulation.NewSimLegacyParamChange(types.ModuleName, keyEnableGovernance, func(r *rand.Rand) string { return fmt.Sprintf("%v", GenEnableGovernance(r)) }, ), - simulation.NewSimParamChange(types.ModuleName, keyUnrestrictedDenomRegex, + simulation.NewSimLegacyParamChange(types.ModuleName, keyUnrestrictedDenomRegex, func(r *rand.Rand) string { return fmt.Sprintf("\"%s\"", GenUnrestrictedDenomRegex(r)) }, diff --git a/x/marker/simulation/proposals.go b/x/marker/simulation/proposals.go index f283b72e01..ebd7987e70 100644 --- a/x/marker/simulation/proposals.go +++ b/x/marker/simulation/proposals.go @@ -3,7 +3,7 @@ package simulation import ( "math/rand" - "cosmossdk.io/math" + sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" @@ -82,7 +82,7 @@ func SimulateCreateSupplyIncreaseProposalContent(k keeper.Keeper) simtypes.Conte } maxSupply := k.GetMaxSupply(ctx).Sub(k.CurrentCirculation(ctx, m)) - newSupply := math.NewIntFromBigInt(math.ZeroInt().BigInt().Rand(r, maxSupply.BigInt())) + newSupply := sdkmath.NewIntFromBigInt(sdkmath.ZeroInt().BigInt().Rand(r, maxSupply.BigInt())) // TODO: When the simulation tests are fixed to stop breaking supply invariants through incorrect minting, the following check should be removed. if newSupply.GT(k.GetMaxSupply(ctx)) { @@ -107,7 +107,7 @@ func SimulateCreateSupplyDecreaseProposalContent(k keeper.Keeper) simtypes.Conte return nil } currentSupply := k.CurrentEscrow(ctx, m).AmountOf(m.GetDenom()) - if currentSupply.LT(sdk.OneInt()) { + if currentSupply.LT(sdkmath.OneInt()) { return nil } burn := sdk.NewCoin(m.GetDenom(), simtypes.RandomAmount(r, currentSupply)) diff --git a/x/marker/simulation/proposals_test.go b/x/marker/simulation/proposals_test.go index ecca361ebd..07b249d562 100644 --- a/x/marker/simulation/proposals_test.go +++ b/x/marker/simulation/proposals_test.go @@ -7,8 +7,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - sdk "github.com/cosmos/cosmos-sdk/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" @@ -21,7 +19,7 @@ import ( func TestProposalContents(t *testing.T) { app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) // initialize parameters s := rand.NewSource(1) @@ -70,7 +68,7 @@ func addTestMarker(t *testing.T, ctx sdk.Context, app *simapp.App, r *rand.Rand, simAcc, _ := simtypes.RandomAcc(r, accs) server := keeper.NewMsgServerImpl(app.MarkerKeeper) - _, err := server.AddMarker(sdk.WrapSDKContext(ctx), &types.MsgAddMarkerRequest{ + _, err := server.AddMarker(ctx, &types.MsgAddMarkerRequest{ Amount: sdk.NewInt64Coin("simtestcoin", 100), Manager: "", FromAddress: app.MarkerKeeper.GetAuthority(), diff --git a/x/marker/types/authz.go b/x/marker/types/authz.go index 970136c8e8..a3f4f09fac 100644 --- a/x/marker/types/authz.go +++ b/x/marker/types/authz.go @@ -1,6 +1,8 @@ package types import ( + "context" + sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/authz" @@ -25,7 +27,7 @@ func (a MarkerTransferAuthorization) MsgTypeURL() string { } // Accept implements Authorization.Accept. -func (a MarkerTransferAuthorization) Accept(_ sdk.Context, msg sdk.Msg) (authz.AcceptResponse, error) { +func (a MarkerTransferAuthorization) Accept(_ context.Context, msg sdk.Msg) (authz.AcceptResponse, error) { switch msg := msg.(type) { case *MsgTransferRequest: toAddress := msg.ToAddress diff --git a/x/marker/types/authz_test.go b/x/marker/types/authz_test.go index 813906ee48..6738dd65b4 100644 --- a/x/marker/types/authz_test.go +++ b/x/marker/types/authz_test.go @@ -7,21 +7,19 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - simapp "github.com/provenance-io/provenance/app" . "github.com/provenance-io/provenance/x/marker/types" ) var ( - coin1000 = sdk.NewCoin("stake", sdk.NewInt(1000)) - coin500 = sdk.NewCoin("stake", sdk.NewInt(500)) + coin1000 = sdk.NewInt64Coin("stake", 1000) + coin500 = sdk.NewInt64Coin("stake", 500) msgTypeURL = "/provenance.marker.v1.MsgTransferRequest" ) func TestMarkerTransferAuthorization(t *testing.T) { app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) authorization := NewMarkerTransferAuthorization(sdk.NewCoins(coin1000), []sdk.AccAddress{}) t.Run("verify authorization returns valid method name", func(t *testing.T) { diff --git a/x/marker/types/codec.go b/x/marker/types/codec.go index dc82b47f45..744cb22554 100644 --- a/x/marker/types/codec.go +++ b/x/marker/types/codec.go @@ -1,8 +1,6 @@ package types import ( - "github.com/gogo/protobuf/proto" - "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" @@ -10,6 +8,7 @@ import ( authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "github.com/cosmos/cosmos-sdk/x/authz" govtypesv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" + "github.com/cosmos/gogoproto/proto" ) // RegisterInterfaces registers implementations for the tx messages diff --git a/x/marker/types/expected_keepers.go b/x/marker/types/expected_keepers.go index 3326933cd1..ecc5d7d066 100644 --- a/x/marker/types/expected_keepers.go +++ b/x/marker/types/expected_keepers.go @@ -4,67 +4,64 @@ import ( "context" "time" + "cosmossdk.io/x/feegrant" + sdk "github.com/cosmos/cosmos-sdk/types" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "github.com/cosmos/cosmos-sdk/x/authz" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - "github.com/cosmos/cosmos-sdk/x/feegrant" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1" - transfertypes "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types" + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" attrtypes "github.com/provenance-io/provenance/x/attribute/types" ) // AccountKeeper defines the auth/account functionality needed by the marker keeper. type AccountKeeper interface { - GetAllAccounts(ctx sdk.Context) (accounts []authtypes.AccountI) - GetNextAccountNumber(ctx sdk.Context) uint64 - GetAccount(sdk.Context, sdk.AccAddress) authtypes.AccountI - SetAccount(sdk.Context, authtypes.AccountI) - NewAccount(sdk.Context, authtypes.AccountI) authtypes.AccountI - RemoveAccount(ctx sdk.Context, acc authtypes.AccountI) + GetAllAccounts(context.Context) []sdk.AccountI + NextAccountNumber(context.Context) uint64 + GetAccount(context.Context, sdk.AccAddress) sdk.AccountI + SetAccount(context.Context, sdk.AccountI) + NewAccount(context.Context, sdk.AccountI) sdk.AccountI + RemoveAccount(context.Context, sdk.AccountI) } // AuthzKeeper defines the authz functionality needed by the marker keeper. type AuthzKeeper interface { - GetAuthorization(ctx sdk.Context, grantee sdk.AccAddress, granter sdk.AccAddress, msgType string) (authz.Authorization, *time.Time) - DeleteGrant(ctx sdk.Context, grantee sdk.AccAddress, granter sdk.AccAddress, msgType string) error - SaveGrant(ctx sdk.Context, grantee, granter sdk.AccAddress, authorization authz.Authorization, expiration *time.Time) error + GetAuthorization(ctx context.Context, grantee sdk.AccAddress, granter sdk.AccAddress, msgType string) (authz.Authorization, *time.Time) + DeleteGrant(ctx context.Context, grantee sdk.AccAddress, granter sdk.AccAddress, msgType string) error + SaveGrant(ctx context.Context, grantee, granter sdk.AccAddress, authorization authz.Authorization, expiration *time.Time) error } // BankKeeper defines the bank functionality needed by the marker module. type BankKeeper interface { - GetAllBalances(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins - GetBalance(ctx sdk.Context, addr sdk.AccAddress, denom string) sdk.Coin - GetSupply(ctx sdk.Context, denom string) sdk.Coin - DenomOwners(goCtx context.Context, req *banktypes.QueryDenomOwnersRequest) (*banktypes.QueryDenomOwnersResponse, error) + GetAllBalances(context context.Context, addr sdk.AccAddress) sdk.Coins + GetBalance(context context.Context, addr sdk.AccAddress, denom string) sdk.Coin + GetSupply(context context.Context, denom string) sdk.Coin + DenomOwners(context context.Context, req *banktypes.QueryDenomOwnersRequest) (*banktypes.QueryDenomOwnersResponse, error) - SendCoins(ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) error - SendCoinsFromModuleToAccount(ctx sdk.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error - SendCoinsFromAccountToModule(ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error - MintCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) error - BurnCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) error + SendCoins(context context.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) error + SendCoinsFromModuleToAccount(context context.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error + SendCoinsFromAccountToModule(context context.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error + MintCoins(context context.Context, moduleName string, amt sdk.Coins) error + BurnCoins(context context.Context, moduleName string, amt sdk.Coins) error AppendSendRestriction(restriction banktypes.SendRestrictionFn) BlockedAddr(addr sdk.AccAddress) bool - GetDenomMetaData(ctx sdk.Context, denom string) (banktypes.Metadata, bool) - SetDenomMetaData(ctx sdk.Context, denomMetaData banktypes.Metadata) + GetDenomMetaData(context context.Context, denom string) (banktypes.Metadata, bool) + SetDenomMetaData(context context.Context, denomMetaData banktypes.Metadata) - // TODO: Delete the below entries when no longer needed. + // TODO[1760]: bank: Delete the below entries when no longer needed (or change this back to a regular TODO). // IterateAllBalances only used in GetAllMarkerHolders used by the unneeded querier. // The Holding query just uses the DenomOwners query endpoint. - IterateAllBalances(ctx sdk.Context, cb func(address sdk.AccAddress, coin sdk.Coin) (stop bool)) + IterateAllBalances(context context.Context, cb func(address sdk.AccAddress, coin sdk.Coin) (stop bool)) // GetAllSendEnabledEntries only needed by RemoveIsSendEnabledEntries in the quicksilver upgrade. - GetAllSendEnabledEntries(ctx sdk.Context) []banktypes.SendEnabled - // DeleteSendEnabled only needed by RemoveIsSendEnabledEntries in the quicksilver upgrade. - DeleteSendEnabled(ctx sdk.Context, denom string) + GetAllSendEnabledEntries(context context.Context) []banktypes.SendEnabled } // FeeGrantKeeper defines the fee-grant functionality needed by the marker module. type FeeGrantKeeper interface { - GrantAllowance(ctx sdk.Context, granter, grantee sdk.AccAddress, feeAllowance feegrant.FeeAllowanceI) error + GrantAllowance(ctx context.Context, granter, grantee sdk.AccAddress, feeAllowance feegrant.FeeAllowanceI) error } // Note: There is no IBCKeeper interface in here. @@ -85,14 +82,6 @@ type NameKeeper interface { Normalize(ctx sdk.Context, name string) (string, error) } -// GovKeeper defines the gov functionality needed by the marker module sims. -type GovKeeper interface { - GetProposal(ctx sdk.Context, proposalID uint64) (govtypes.Proposal, bool) - GetDepositParams(ctx sdk.Context) govtypes.DepositParams - GetVotingParams(ctx sdk.Context) govtypes.VotingParams - GetProposalID(ctx sdk.Context) (uint64, error) -} - // IbcTransferMsgServer defines the message server functionality needed by the marker module. type IbcTransferMsgServer interface { Transfer(goCtx context.Context, msg *transfertypes.MsgTransfer) (*transfertypes.MsgTransferResponse, error) diff --git a/x/marker/types/key.go b/x/marker/types/key.go index 6c7c43b1e5..e68ef349ab 100644 --- a/x/marker/types/key.go +++ b/x/marker/types/key.go @@ -3,7 +3,7 @@ package types import ( "fmt" - "github.com/tendermint/tendermint/crypto" + "github.com/cometbft/cometbft/crypto" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/address" @@ -20,7 +20,7 @@ const ( RouterKey = ModuleName // QuerierRoute to be used for queries - QuerierRoute = ModuleName + QuerierRoute = ModuleName // TODO[1760]: marker: Delete this variable. // CoinPoolName to be used for coin pool associated with mint/burn activities. CoinPoolName = ModuleName diff --git a/x/marker/types/marker.go b/x/marker/types/marker.go index 9ad448ba31..025b5fa3c9 100644 --- a/x/marker/types/marker.go +++ b/x/marker/types/marker.go @@ -7,6 +7,8 @@ import ( proto "github.com/gogo/protobuf/proto" + sdkmath "cosmossdk.io/math" + cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" @@ -64,7 +66,7 @@ func NewEmptyMarkerAccount(denom, manager string, grants []AccessGrant) *MarkerA AccessControl: grants, Denom: denom, Manager: manager, - Supply: sdk.ZeroInt(), + Supply: sdkmath.ZeroInt(), Status: StatusProposed, MarkerType: MarkerType_Coin, SupplyFixed: true, @@ -468,7 +470,7 @@ func (mnav *NetAssetValue) Validate() error { return err } - if mnav.Price.Amount.GT(sdk.NewInt(0)) && mnav.Volume < 1 { + if mnav.Price.Amount.GT(sdkmath.NewInt(0)) && mnav.Volume < 1 { return fmt.Errorf("marker net asset value volume must be positive value") } diff --git a/x/marker/types/marker.pb.go b/x/marker/types/marker.pb.go index 119a55fea1..ca98c88e55 100644 --- a/x/marker/types/marker.pb.go +++ b/x/marker/types/marker.pb.go @@ -1,13 +1,18 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. // source: provenance/marker/v1/marker.proto +// TODO[1760]: proto: Regenerate this file with updated library references for .Dec and .Int in the protos. +// This file has been manually modified for the v0.50 update. +// The github_com_cosmos_cosmos_sdk_types.Dec and .Int types have moved to the sdkmath library. +// In order to make this code to compile (without needed to update protos and regenerate), this +// file has been manually fixed to use the correct library for those types. + package types import ( cosmossdk_io_math "cosmossdk.io/math" fmt "fmt" _ "github.com/cosmos/cosmos-proto" - github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types1 "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/x/auth/types" _ "github.com/gogo/protobuf/gogoproto" @@ -174,7 +179,7 @@ type MarkerAccount struct { // value denomination and total supply for the token. Denom string `protobuf:"bytes,5,opt,name=denom,proto3" json:"denom,omitempty"` // the total supply expected for a marker. This is the amount that is minted when a marker is created. - Supply github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,6,opt,name=supply,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"supply" json:"total_supply" yaml:"total_supply"` + Supply cosmossdk_io_math.Int `protobuf:"bytes,6,opt,name=supply,proto3,customtype=cosmossdk.io/math.Int" json:"supply" json:"total_supply" yaml:"total_supply"` // Marker type information MarkerType MarkerType `protobuf:"varint,7,opt,name=marker_type,json=markerType,proto3,enum=provenance.marker.v1.MarkerType" json:"marker_type,omitempty" json:"marker_type,omitempty"` // A fixed supply will mint additional coin automatically if the total supply decreases below a set value. This diff --git a/x/marker/types/marker_test.go b/x/marker/types/marker_test.go index 90247ada16..270e45702d 100644 --- a/x/marker/types/marker_test.go +++ b/x/marker/types/marker_test.go @@ -7,6 +7,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" ) @@ -70,16 +72,19 @@ func TestNewEmptyMarkerValidate(t *testing.T) { require.NoError(t, m.SetStatus(StatusActive), "no error expected from setting a valid status") require.EqualValues(t, m.GetManager(), sdk.AccAddress([]byte{}), "manager should be empty on active status") - require.EqualValues(t, m.GetSupply(), sdk.NewCoin("test", sdk.ZeroInt()), "initial supply will be zero") - require.NoError(t, m.SetSupply(sdk.NewCoin("test", sdk.OneInt()))) - require.EqualValues(t, m.GetSupply(), sdk.NewCoin("test", sdk.OneInt()), "supply should be be one") + require.EqualValues(t, m.GetSupply(), sdk.NewInt64Coin("test", 0), "initial supply will be zero") + require.NoError(t, m.SetSupply(sdk.NewInt64Coin("test", 1))) + require.EqualValues(t, m.GetSupply(), sdk.NewInt64Coin("test", 1), "supply should be be one") require.Error(t, - m.SetSupply(sdk.NewCoin("other", sdk.NewInt(1000))), "expected failure setting supply to invalid denom of coin") - require.EqualValues(t, m.GetSupply(), sdk.NewCoin("test", sdk.OneInt()), "supply should be still be one") + m.SetSupply(sdk.NewInt64Coin("other", 1000)), "expected failure setting supply to invalid denom of coin") + require.EqualValues(t, m.GetSupply(), sdk.NewInt64Coin("test", 1), "supply should be still be one") - yaml, merr := m.MarshalYAML() - require.NoError(t, merr, "marshall of yaml should succeed without error") - require.Equal(t, yaml, m.String(), "should use yaml for string() view") + // TODO[1760]: yaml: Decide if we still want this yaml convertion tested. + /* + yaml, merr := m.MarshalYAML() + require.NoError(t, merr, "marshall of yaml should succeed without error") + require.Equal(t, yaml, m.String(), "should use yaml for string() view") + */ if err != nil { t.Fatalf("expect no errors from marker validation: %s", err) @@ -109,95 +114,95 @@ func TestNewMarkerValidate(t *testing.T) { }, { "insufficient supply", - NewMarkerAccount(baseAcc, sdk.NewCoin("test", sdk.ZeroInt()), manager, nil, StatusFinalized, MarkerType_Coin, true, true, false, []string{}), + NewMarkerAccount(baseAcc, sdk.NewInt64Coin("test", 0), manager, nil, StatusFinalized, MarkerType_Coin, true, true, false, []string{}), fmt.Errorf("cannot create a marker with zero total supply and no authorization for minting more"), }, { "invalid status", - NewMarkerAccount(baseAcc, sdk.NewCoin("test", sdk.ZeroInt()), manager, nil, StatusUndefined, MarkerType_Coin, true, false, false, []string{}), + NewMarkerAccount(baseAcc, sdk.NewInt64Coin("test", 0), manager, nil, StatusUndefined, MarkerType_Coin, true, false, false, []string{}), fmt.Errorf("invalid marker status"), }, { "invalid name and address pair", - NewMarkerAccount(baseAcc, sdk.NewCoin("nottest", sdk.OneInt()), manager, nil, StatusProposed, MarkerType_Coin, true, false, false, []string{}), + NewMarkerAccount(baseAcc, sdk.NewInt64Coin("nottest", 1), manager, nil, StatusProposed, MarkerType_Coin, true, false, false, []string{}), fmt.Errorf("address %s cannot be derived from the marker denom 'nottest'", baseAcc.GetAddress()), }, { "invalid marker account permissions", - NewMarkerAccount(baseAcc, sdk.NewCoin("test", sdk.OneInt()), manager, + NewMarkerAccount(baseAcc, sdk.NewInt64Coin("test", 1), manager, []AccessGrant{{Address: MustGetMarkerAddress("foo").String(), Permissions: []Access{Access_Unknown}}}, StatusProposed, MarkerType_Coin, true, false, false, []string{}), fmt.Errorf("invalid access privileges granted: ACCESS_UNSPECIFIED is not supported for marker type MARKER_TYPE_COIN"), }, { "invalid restricted marker account permissions", - NewMarkerAccount(baseAcc, sdk.NewCoin("test", sdk.OneInt()), manager, + NewMarkerAccount(baseAcc, sdk.NewInt64Coin("test", 1), manager, []AccessGrant{{Address: MustGetMarkerAddress("foo").String(), Permissions: []Access{Access_Unknown}}}, StatusProposed, MarkerType_RestrictedCoin, true, false, false, []string{}), fmt.Errorf("invalid access privileges granted: ACCESS_UNSPECIFIED is not supported for marker type MARKER_TYPE_RESTRICTED"), }, { "marker account permissions assigned to self", - NewMarkerAccount(baseAcc, sdk.NewCoin("test", sdk.OneInt()), manager, []AccessGrant{{Address: baseAcc.Address, + NewMarkerAccount(baseAcc, sdk.NewInt64Coin("test", 1), manager, []AccessGrant{{Address: baseAcc.Address, Permissions: []Access{Access_Mint, Access_Admin}}}, StatusProposed, MarkerType_Coin, true, false, false, []string{}), fmt.Errorf("permissions cannot be granted to 'test' marker account: [ACCESS_MINT ACCESS_ADMIN]"), }, { "invalid marker account permissions for type", - NewMarkerAccount(baseAcc, sdk.NewCoin("test", sdk.OneInt()), manager, + NewMarkerAccount(baseAcc, sdk.NewInt64Coin("test", 1), manager, []AccessGrant{{Address: MustGetMarkerAddress("foo").String(), Permissions: []Access{Access_Mint, Access_Admin, Access_Transfer}}}, StatusActive, MarkerType_Coin, true, false, false, []string{}), fmt.Errorf("invalid access privileges granted: ACCESS_TRANSFER is not supported for marker type MARKER_TYPE_COIN"), }, { "invalid marker ibc type fixed supply", - NewMarkerAccount(baseAcc, sdk.NewCoin("ibc/test", sdk.OneInt()), manager, + NewMarkerAccount(baseAcc, sdk.NewInt64Coin("ibc/test", 1), manager, []AccessGrant{{Address: MustGetMarkerAddress("foo").String(), Permissions: []Access{Access_Admin, Access_Withdraw}}}, StatusActive, MarkerType_Coin, true, false, false, []string{}), fmt.Errorf("invalid ibc denom configuration: fixed supply is not supported for ibc marker"), }, { "invalid marker ibc type has mint", - NewMarkerAccount(baseAcc, sdk.NewCoin("ibc/test", sdk.OneInt()), manager, + NewMarkerAccount(baseAcc, sdk.NewInt64Coin("ibc/test", 1), manager, []AccessGrant{{Address: MustGetMarkerAddress("foo").String(), Permissions: []Access{Access_Mint, Access_Admin, Access_Withdraw}}}, StatusActive, MarkerType_Coin, false, false, false, []string{}), fmt.Errorf("invalid ibc denom configuration: ACCESS_MINT is not supported for ibc marker"), }, { "invalid marker ibc type has burn", - NewMarkerAccount(baseAcc, sdk.NewCoin("ibc/test", sdk.OneInt()), manager, + NewMarkerAccount(baseAcc, sdk.NewInt64Coin("ibc/test", 1), manager, []AccessGrant{{Address: MustGetMarkerAddress("foo").String(), Permissions: []Access{Access_Burn, Access_Admin, Access_Withdraw}}}, StatusActive, MarkerType_Coin, false, false, false, []string{}), fmt.Errorf("invalid ibc denom configuration: ACCESS_BURN is not supported for ibc marker"), }, { "valid marker account", - NewMarkerAccount(baseAcc, sdk.NewCoin("test", sdk.OneInt()), manager, nil, StatusProposed, MarkerType_Coin, true, false, false, []string{}), + NewMarkerAccount(baseAcc, sdk.NewInt64Coin("test", 1), manager, nil, StatusProposed, MarkerType_Coin, true, false, false, []string{}), nil, }, { "valid marker account", - NewMarkerAccount(baseAcc, sdk.NewCoin("test", sdk.OneInt()), manager, nil, StatusActive, MarkerType_Coin, true, false, false, []string{}), + NewMarkerAccount(baseAcc, sdk.NewInt64Coin("test", 1), manager, nil, StatusActive, MarkerType_Coin, true, false, false, []string{}), nil, }, { "coin type with forced transfer is invalid", - NewMarkerAccount(baseAcc, sdk.NewCoin("test", sdk.OneInt()), manager, nil, StatusActive, MarkerType_Coin, true, true, true, []string{}), + NewMarkerAccount(baseAcc, sdk.NewInt64Coin("test", 1), manager, nil, StatusActive, MarkerType_Coin, true, true, true, []string{}), fmt.Errorf("forced transfers can only be allowed on restricted markers"), }, { "coin type without forced transfer is ok", - NewMarkerAccount(baseAcc, sdk.NewCoin("test", sdk.OneInt()), manager, nil, StatusActive, MarkerType_Coin, true, true, false, []string{}), + NewMarkerAccount(baseAcc, sdk.NewInt64Coin("test", 1), manager, nil, StatusActive, MarkerType_Coin, true, true, false, []string{}), nil, }, { "restricted type with froced transfer is ok", - NewMarkerAccount(baseAcc, sdk.NewCoin("test", sdk.OneInt()), manager, nil, StatusActive, MarkerType_RestrictedCoin, true, true, true, []string{}), + NewMarkerAccount(baseAcc, sdk.NewInt64Coin("test", 1), manager, nil, StatusActive, MarkerType_RestrictedCoin, true, true, true, []string{}), nil, }, { "restricted type without forced transfer is ok", - NewMarkerAccount(baseAcc, sdk.NewCoin("test", sdk.OneInt()), manager, nil, StatusActive, MarkerType_RestrictedCoin, true, true, false, []string{}), + NewMarkerAccount(baseAcc, sdk.NewInt64Coin("test", 1), manager, nil, StatusActive, MarkerType_RestrictedCoin, true, true, false, []string{}), nil, }, } @@ -218,7 +223,7 @@ func TestNewMarkerValidate(t *testing.T) { func TestNewMarkerMsgEncoding(t *testing.T) { base := authtypes.NewBaseAccountWithAddress(MustGetMarkerAddress("testcoin")) - newMsgMarker := NewMsgAddMarkerRequest("testcoin", sdk.OneInt(), base.GetAddress(), base.GetAddress(), MarkerType_Coin, false, false, false, []string{}, 0, 0) + newMsgMarker := NewMsgAddMarkerRequest("testcoin", sdkmath.OneInt(), base.GetAddress(), base.GetAddress(), MarkerType_Coin, false, false, false, []string{}, 0, 0) require.NoError(t, newMsgMarker.ValidateBasic()) } diff --git a/x/marker/types/msg.go b/x/marker/types/msg.go index 7b96c759e7..6de25ab502 100644 --- a/x/marker/types/msg.go +++ b/x/marker/types/msg.go @@ -12,9 +12,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - feegranttypes "github.com/cosmos/cosmos-sdk/x/feegrant" - ibctransfertypes "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v6/modules/core/02-client/types" + feegranttypes "cosmossdk.io/x/feegrant" + ibctransfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" ) // allRequestMsgs defines all the Msg*Request messages. diff --git a/x/marker/types/msg_test.go b/x/marker/types/msg_test.go index 68e9cb6c64..5cc1d2eb30 100644 --- a/x/marker/types/msg_test.go +++ b/x/marker/types/msg_test.go @@ -7,13 +7,14 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "cosmossdk.io/math" + sdkmath "cosmossdk.io/math" + "cosmossdk.io/x/feegrant" + "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/x/feegrant" - clienttypes "github.com/cosmos/ibc-go/v6/modules/core/02-client/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" ) func TestMsgGrantAllowance(t *testing.T) { @@ -176,7 +177,7 @@ func TestMsgAddMarkerRequestValidateBasic(t *testing.T) { name: "should fail on attributes for non restricted coin", msg: *NewMsgAddMarkerRequest( "hotdog", - sdk.NewInt(100), + sdkmath.NewInt(100), validAddress, validAddress, MarkerType_Coin, @@ -193,7 +194,7 @@ func TestMsgAddMarkerRequestValidateBasic(t *testing.T) { name: "should succeed on attributes for restricted coin", msg: *NewMsgAddMarkerRequest( "hotdog", - sdk.NewInt(100), + sdkmath.NewInt(100), validAddress, validAddress, MarkerType_RestrictedCoin, @@ -210,7 +211,7 @@ func TestMsgAddMarkerRequestValidateBasic(t *testing.T) { name: "should succeed on for restricted coin", msg: *NewMsgAddMarkerRequest( "hotdog", - sdk.NewInt(100), + sdkmath.NewInt(100), validAddress, validAddress, MarkerType_RestrictedCoin, @@ -227,7 +228,7 @@ func TestMsgAddMarkerRequestValidateBasic(t *testing.T) { name: "should succeed on for non-restricted coin", msg: *NewMsgAddMarkerRequest( "hotdog", - sdk.NewInt(100), + sdkmath.NewInt(100), validAddress, validAddress, MarkerType_Coin, @@ -244,7 +245,7 @@ func TestMsgAddMarkerRequestValidateBasic(t *testing.T) { name: "should fail duplicate entries for req attrs", msg: *NewMsgAddMarkerRequest( "hotdog", - sdk.NewInt(100), + sdkmath.NewInt(100), validAddress, validAddress, MarkerType_RestrictedCoin, @@ -286,7 +287,7 @@ func TestMsgAddFinalizeActivateMarkerRequestValidateBasic(t *testing.T) { name: "should fail on invalid marker", msg: MsgAddFinalizeActivateMarkerRequest{ Amount: sdk.Coin{ - Amount: math.NewInt(100), + Amount: sdkmath.NewInt(100), Denom: "", }, Manager: "cosmos1sh49f6ze3vn7cdl2amh2gnc70z5mten3y08xck", @@ -315,7 +316,7 @@ func TestMsgAddFinalizeActivateMarkerRequestValidateBasic(t *testing.T) { name: "should fail on empty access list", msg: *NewMsgAddFinalizeActivateMarkerRequest( "hotdog", - sdk.NewInt(100), + sdkmath.NewInt(100), validAddress, validAddress, MarkerType_Coin, @@ -333,7 +334,7 @@ func TestMsgAddFinalizeActivateMarkerRequestValidateBasic(t *testing.T) { name: "should fail on attributes for non restricted coin", msg: *NewMsgAddFinalizeActivateMarkerRequest( "hotdog", - sdk.NewInt(100), + sdkmath.NewInt(100), validAddress, validAddress, MarkerType_Coin, @@ -351,7 +352,7 @@ func TestMsgAddFinalizeActivateMarkerRequestValidateBasic(t *testing.T) { name: "should succeed", msg: *NewMsgAddFinalizeActivateMarkerRequest( "hotdog", - sdk.NewInt(100), + sdkmath.NewInt(100), validAddress, validAddress, MarkerType_Coin, @@ -369,7 +370,7 @@ func TestMsgAddFinalizeActivateMarkerRequestValidateBasic(t *testing.T) { name: "should succeed for restricted coin with required attributes", msg: *NewMsgAddFinalizeActivateMarkerRequest( "hotdog", - sdk.NewInt(100), + sdkmath.NewInt(100), validAddress, validAddress, MarkerType_RestrictedCoin, @@ -387,7 +388,7 @@ func TestMsgAddFinalizeActivateMarkerRequestValidateBasic(t *testing.T) { name: "should fail when forced tranfers allowed with coin type", msg: *NewMsgAddFinalizeActivateMarkerRequest( "banana", - sdk.NewInt(500), + sdkmath.NewInt(500), validAddress, validAddress, MarkerType_Coin, @@ -423,7 +424,7 @@ func TestMsgSupplyIncreaseProposalRequestGetSigners(t *testing.T) { targetAddress := sdk.AccAddress("input22222222222") amount := sdk.Coin{ - Amount: math.NewInt(100), + Amount: sdkmath.NewInt(100), Denom: "chocolate", } @@ -448,7 +449,7 @@ func TestMsgSupplyIncreaseProposalRequestValidateBasic(t *testing.T) { { name: "negative coin amount", amount: sdk.Coin{ - Amount: math.NewInt(-1), + Amount: sdkmath.NewInt(-1), Denom: "invalid-denom", }, targetAddress: targetAddress, @@ -459,7 +460,7 @@ func TestMsgSupplyIncreaseProposalRequestValidateBasic(t *testing.T) { { name: "invalid target address", amount: sdk.Coin{ - Amount: math.NewInt(100), + Amount: sdkmath.NewInt(100), Denom: "bbq-hotdog", }, targetAddress: "", @@ -470,7 +471,7 @@ func TestMsgSupplyIncreaseProposalRequestValidateBasic(t *testing.T) { { name: "invalid authority", amount: sdk.Coin{ - Amount: math.NewInt(100), + Amount: sdkmath.NewInt(100), Denom: "bbq-hotdog", }, targetAddress: targetAddress, diff --git a/x/marker/types/params.go b/x/marker/types/params.go index e6c412fab1..f446d58e50 100644 --- a/x/marker/types/params.go +++ b/x/marker/types/params.go @@ -6,7 +6,7 @@ import ( yaml "gopkg.in/yaml.v2" - "cosmossdk.io/math" + sdkmath "cosmossdk.io/math" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" ) @@ -43,7 +43,7 @@ func NewParams( maxTotalSupply uint64, enableGovernance bool, unrestrictedDenomRegex string, - maxSupply math.Int, + maxSupply sdkmath.Int, ) Params { return Params{ EnableGovernance: enableGovernance, @@ -124,7 +124,7 @@ func validateIntParam(i interface{}) error { } func validateBigIntParam(i interface{}) error { - _, ok := i.(math.Int) + _, ok := i.(sdkmath.Int) if !ok { return fmt.Errorf("invalid parameter type: %T", i) } @@ -152,10 +152,10 @@ func validateRegexParam(i interface{}) error { return err } -func StringToBigInt(val string) math.Int { - res, ok := math.NewIntFromString(val) +func StringToBigInt(val string) sdkmath.Int { + res, ok := sdkmath.NewIntFromString(val) if !ok { - panic(fmt.Errorf("unable to create math.Int from string: %s", val)) + panic(fmt.Errorf("unable to create sdkmath.Int from string: %s", val)) } return res } diff --git a/x/marker/types/params_test.go b/x/marker/types/params_test.go index 3f6313a360..650ec0a72b 100644 --- a/x/marker/types/params_test.go +++ b/x/marker/types/params_test.go @@ -4,9 +4,11 @@ import ( "regexp" "testing" - "cosmossdk.io/math" - "github.com/provenance-io/provenance/testutil/assertions" "github.com/stretchr/testify/require" + + sdkmath "cosmossdk.io/math" + + "github.com/provenance-io/provenance/testutil/assertions" ) func TestDefaultParams(t *testing.T) { @@ -65,9 +67,9 @@ func TestParamSetPairs(t *testing.T) { require.Error(t, pairs[i].ValidatorFn("foo")) require.Error(t, pairs[i].ValidatorFn(-1000)) require.Error(t, pairs[i].ValidatorFn(1000)) - bigint, _ := math.NewIntFromString("1944674407370955516150") + bigint, _ := sdkmath.NewIntFromString("1944674407370955516150") require.NoError(t, pairs[i].ValidatorFn(bigint)) - require.NoError(t, pairs[i].ValidatorFn(math.NewInt(1000))) + require.NoError(t, pairs[i].ValidatorFn(sdkmath.NewInt(1000))) case string(ParamStoreKeyUnrestrictedDenomRegex): require.Error(t, pairs[i].ValidatorFn(1)) require.Error(t, pairs[i].ValidatorFn("\\!(")) // invalid regex @@ -89,12 +91,12 @@ func TestParamSetPairs(t *testing.T) { } func TestStringToBigInt(t *testing.T) { - require.Equal(t, math.NewIntFromUint64(1), StringToBigInt("1"), "should handle uint64") - require.Equal(t, math.NewIntFromUint64(0), StringToBigInt("0"), "should handle zero") + require.Equal(t, sdkmath.NewIntFromUint64(1), StringToBigInt("1"), "should handle uint64") + require.Equal(t, sdkmath.NewIntFromUint64(0), StringToBigInt("0"), "should handle zero") require.Equal(t, "-1", StringToBigInt("-1").String(), "should handle negative") assertions.AssertPanicEquals(t, func() { StringToBigInt("abc") - }, "unable to create math.Int from string: abc", "should panic on invalid input") - bigNum, _ := math.NewIntFromString("100000000000000000000") + }, "unable to create sdkmath.Int from string: abc", "should panic on invalid input") + bigNum, _ := sdkmath.NewIntFromString("100000000000000000000") require.Equal(t, bigNum, StringToBigInt("100000000000000000000"), "should handle large number that exceeds uint64") } diff --git a/x/marker/types/proposals_test.go b/x/marker/types/proposals_test.go index 35a50a31a2..de209d40d3 100644 --- a/x/marker/types/proposals_test.go +++ b/x/marker/types/proposals_test.go @@ -12,7 +12,7 @@ import ( ) func TestProposalTypeIncreaseSupply_Format(t *testing.T) { - m := NewSupplyIncreaseProposal("title", "description", sdk.NewCoin("test", sdk.NewInt(100)), "") + m := NewSupplyIncreaseProposal("title", "description", sdk.NewInt64Coin("test", 100), "") require.NotNil(t, m) require.Equal(t, RouterKey, m.ProposalRoute()) @@ -30,7 +30,7 @@ func TestProposalTypeIncreaseSupply_Format(t *testing.T) { } func TestProposalTypeDecreaseSupply_Format(t *testing.T) { - m := NewSupplyDecreaseProposal("title", "description", sdk.NewCoin("test", sdk.NewInt(100))) + m := NewSupplyDecreaseProposal("title", "description", sdk.NewInt64Coin("test", 100)) require.NotNil(t, m) require.Equal(t, RouterKey, m.ProposalRoute()) @@ -101,7 +101,7 @@ func TestProposalTypeChangeStatus_Format(t *testing.T) { func TestProposalTypeWithdrawEscrow_Format(t *testing.T) { addr := testAddress() - m := NewWithdrawEscrowProposal("title", "description", "test", sdk.NewCoins(sdk.NewCoin("test", sdk.NewInt(100))), addr.String()) + m := NewWithdrawEscrowProposal("title", "description", "test", sdk.NewCoins(sdk.NewInt64Coin("test", 100)), addr.String()) require.NotNil(t, m) require.Equal(t, RouterKey, m.ProposalRoute()) diff --git a/x/marker/types/send_restrictions_test.go b/x/marker/types/send_restrictions_test.go index f2be345f59..172304542b 100644 --- a/x/marker/types/send_restrictions_test.go +++ b/x/marker/types/send_restrictions_test.go @@ -6,7 +6,7 @@ import ( "github.com/stretchr/testify/assert" sdk "github.com/cosmos/cosmos-sdk/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" ) func TestSendRestrictionContextFuncs(t *testing.T) { @@ -17,37 +17,37 @@ func TestSendRestrictionContextFuncs(t *testing.T) { }{ { name: "brand new mostly empty context", - ctx: sdk.NewContext(nil, tmproto.Header{}, false, nil), + ctx: sdk.NewContext(nil, cmtproto.Header{}, false, nil), exp: false, }, { name: "context with bypass", - ctx: WithBypass(sdk.NewContext(nil, tmproto.Header{}, false, nil)), + ctx: WithBypass(sdk.NewContext(nil, cmtproto.Header{}, false, nil)), exp: true, }, { name: "context with bypass on one that originally was without it", - ctx: WithBypass(WithoutBypass(sdk.NewContext(nil, tmproto.Header{}, false, nil))), + ctx: WithBypass(WithoutBypass(sdk.NewContext(nil, cmtproto.Header{}, false, nil))), exp: true, }, { name: "context with bypass twice", - ctx: WithBypass(WithBypass(sdk.NewContext(nil, tmproto.Header{}, false, nil))), + ctx: WithBypass(WithBypass(sdk.NewContext(nil, cmtproto.Header{}, false, nil))), exp: true, }, { name: "context without bypass", - ctx: WithoutBypass(sdk.NewContext(nil, tmproto.Header{}, false, nil)), + ctx: WithoutBypass(sdk.NewContext(nil, cmtproto.Header{}, false, nil)), exp: false, }, { name: "context without bypass on one that originally had it", - ctx: WithoutBypass(WithoutBypass(sdk.NewContext(nil, tmproto.Header{}, false, nil))), + ctx: WithoutBypass(WithoutBypass(sdk.NewContext(nil, cmtproto.Header{}, false, nil))), exp: false, }, { name: "context without bypass twice", - ctx: WithoutBypass(WithoutBypass(sdk.NewContext(nil, tmproto.Header{}, false, nil))), + ctx: WithoutBypass(WithoutBypass(sdk.NewContext(nil, cmtproto.Header{}, false, nil))), exp: false, }, } @@ -61,7 +61,7 @@ func TestSendRestrictionContextFuncs(t *testing.T) { } func TestContextFuncsDoNotModifyProvided(t *testing.T) { - origCtx := sdk.NewContext(nil, tmproto.Header{}, false, nil) + origCtx := sdk.NewContext(nil, cmtproto.Header{}, false, nil) assert.False(t, HasBypass(origCtx), "HasBypass(origCtx)") afterWith := WithBypass(origCtx) assert.True(t, HasBypass(afterWith), "HasBypass(afterWith)") diff --git a/x/marker/types/tx.pb.go b/x/marker/types/tx.pb.go index 006462f093..49ee4989c4 100644 --- a/x/marker/types/tx.pb.go +++ b/x/marker/types/tx.pb.go @@ -13,8 +13,8 @@ import ( _ "github.com/cosmos/cosmos-sdk/types/msgservice" _ "github.com/cosmos/cosmos-sdk/x/bank/types" github_com_cosmos_cosmos_sdk_x_bank_types "github.com/cosmos/cosmos-sdk/x/bank/types" - _ "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types" - github_com_cosmos_ibc_go_v6_modules_apps_transfer_types "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types" + _ "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + github_com_cosmos_ibc_go_v6_modules_apps_transfer_types "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" proto "github.com/gogo/protobuf/proto" @@ -1239,7 +1239,7 @@ var xxx_messageInfo_MsgTransferResponse proto.InternalMessageInfo // MsgIbcTransferRequest defines the Msg/IbcTransfer request type for markers. type MsgIbcTransferRequest struct { - Transfer github_com_cosmos_ibc_go_v6_modules_apps_transfer_types.MsgTransfer `protobuf:"bytes,1,opt,name=transfer,proto3,customtype=github.com/cosmos/ibc-go/v6/modules/apps/transfer/types.MsgTransfer" json:"transfer"` + Transfer github_com_cosmos_ibc_go_v6_modules_apps_transfer_types.MsgTransfer `protobuf:"bytes,1,opt,name=transfer,proto3,customtype=github.com/cosmos/ibc-go/v8/modules/apps/transfer/types.MsgTransfer" json:"transfer"` Administrator string `protobuf:"bytes,2,opt,name=administrator,proto3" json:"administrator,omitempty"` } diff --git a/x/metadata/client/cli/cli_test.go b/x/metadata/client/cli/cli_test.go index 6f5dd86d08..500f705cdd 100644 --- a/x/metadata/client/cli/cli_test.go +++ b/x/metadata/client/cli/cli_test.go @@ -13,7 +13,7 @@ import ( "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" - tmcli "github.com/tendermint/tendermint/libs/cli" + cmtcli "github.com/cometbft/cometbft/libs/cli" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" @@ -181,11 +181,11 @@ func (s *IntegrationCLITestSuite) SetupSuite() { var genBalances []banktypes.Balance genBalances = append(genBalances, banktypes.Balance{Address: s.accountAddrStr, Coins: sdk.NewCoins( sdk.NewCoin(cfg.BondDenom, cfg.StakingTokens), - sdk.NewCoin("authzhotdog", sdk.NewInt(100)), + sdk.NewInt64Coin("authzhotdog", 100), ).Sort()}) genBalances = append(genBalances, banktypes.Balance{Address: s.user1AddrStr, Coins: sdk.NewCoins( sdk.NewCoin(cfg.BondDenom, cfg.StakingTokens), - sdk.NewCoin("authzhotdog", sdk.NewInt(100)), + sdk.NewInt64Coin("authzhotdog", 100), ).Sort()}) genBalances = append(genBalances, banktypes.Balance{Address: s.user2AddrStr, Coins: sdk.NewCoins( sdk.NewCoin(cfg.BondDenom, cfg.StakingTokens), @@ -200,8 +200,8 @@ func (s *IntegrationCLITestSuite) SetupSuite() { s.Require().NoError(err) genesisState[banktypes.ModuleName] = bankDataBz - s.asJson = fmt.Sprintf("--%s=json", tmcli.OutputFlag) - s.asText = fmt.Sprintf("--%s=text", tmcli.OutputFlag) + s.asJson = fmt.Sprintf("--%s=json", cmtcli.OutputFlag) + s.asText = fmt.Sprintf("--%s=text", cmtcli.OutputFlag) s.includeRequest = "--include-request" s.scopeUUID = uuid.New() @@ -1851,8 +1851,8 @@ func (s *IntegrationCLITestSuite) TestScopeTxCommands() { s.contractSpecID.String(), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -1867,8 +1867,8 @@ func (s *IntegrationCLITestSuite) TestScopeTxCommands() { s.accountAddrStr, fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -1884,8 +1884,8 @@ func (s *IntegrationCLITestSuite) TestScopeTxCommands() { fmt.Sprintf("--%s=%s", cli.FlagSigners, s.accountAddrStr), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -1901,8 +1901,8 @@ func (s *IntegrationCLITestSuite) TestScopeTxCommands() { fmt.Sprintf("--%s", cli.FlagRequirePartyRollup), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -1917,8 +1917,8 @@ func (s *IntegrationCLITestSuite) TestScopeTxCommands() { s.user1AddrStr, fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: "invalid scope id: decoding bech32 failed: invalid separator index -1", }, @@ -1933,8 +1933,8 @@ func (s *IntegrationCLITestSuite) TestScopeTxCommands() { s.user1AddrStr, fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: "invalid spec id: decoding bech32 failed: invalid separator index -1", }, @@ -1949,8 +1949,8 @@ func (s *IntegrationCLITestSuite) TestScopeTxCommands() { s.user1AddrStr, fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: `invalid owners: invalid party "incorrect1,incorrect2": invalid address "incorrect1": decoding bech32 failed: invalid separator index 9`, }, @@ -1961,8 +1961,8 @@ func (s *IntegrationCLITestSuite) TestScopeTxCommands() { "not-valid", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: "decoding bech32 failed: invalid separator index -1", }, @@ -1975,8 +1975,8 @@ func (s *IntegrationCLITestSuite) TestScopeTxCommands() { s.user2AddrStr, fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: "decoding bech32 failed: invalid separator index -1", }, @@ -1989,8 +1989,8 @@ func (s *IntegrationCLITestSuite) TestScopeTxCommands() { s.user2AddrStr, fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: "incorrect command notaddorremove : required remove or update", }, @@ -2003,8 +2003,8 @@ func (s *IntegrationCLITestSuite) TestScopeTxCommands() { s.user2AddrStr, fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: fmt.Sprintf("meta address is not a scope: %s", scopeSpecID), }, @@ -2017,8 +2017,8 @@ func (s *IntegrationCLITestSuite) TestScopeTxCommands() { "notauser", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: "data access address is invalid: notauser", }, @@ -2031,8 +2031,8 @@ func (s *IntegrationCLITestSuite) TestScopeTxCommands() { s.user1AddrStr, fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -2045,8 +2045,8 @@ func (s *IntegrationCLITestSuite) TestScopeTxCommands() { s.user1AddrStr, fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -2060,8 +2060,8 @@ func (s *IntegrationCLITestSuite) TestScopeTxCommands() { s.user2AddrStr, fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: "decoding bech32 failed: invalid separator index -1", }, @@ -2074,8 +2074,8 @@ func (s *IntegrationCLITestSuite) TestScopeTxCommands() { s.user2AddrStr, fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: "incorrect command notaddorremove : required remove or update", }, @@ -2088,8 +2088,8 @@ func (s *IntegrationCLITestSuite) TestScopeTxCommands() { s.user2AddrStr, fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: fmt.Sprintf("meta address is not a scope: %s", scopeSpecID), }, @@ -2102,8 +2102,8 @@ func (s *IntegrationCLITestSuite) TestScopeTxCommands() { "notauser", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: "invalid owners: invalid party address [notauser]: decoding bech32 failed: invalid separator index -1", }, @@ -2114,8 +2114,8 @@ func (s *IntegrationCLITestSuite) TestScopeTxCommands() { scopeID, fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -2126,8 +2126,8 @@ func (s *IntegrationCLITestSuite) TestScopeTxCommands() { scopeID, fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 18, }, @@ -2142,8 +2142,8 @@ func (s *IntegrationCLITestSuite) TestScopeTxCommands() { s.accountAddrStr, fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: "parties can only be optional when require_party_rollup = true", }, @@ -2159,8 +2159,8 @@ func (s *IntegrationCLITestSuite) TestScopeTxCommands() { fmt.Sprintf("--%s", cli.FlagRequirePartyRollup), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: "", expectedCode: 0, @@ -2183,7 +2183,7 @@ func (s *IntegrationCLITestSuite) TestUpdateMigrateValueOwnersCmds() { return fmt.Sprintf("--%s=%s", flags.FlagFrom, addr) } skipConfFlag := fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation) - broadcastBlockFlag := fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock) + broadcastBlockFlag := fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync) // TODO[1760]: broadcast queryCmd := func() *cobra.Command { return cli.GetMetadataScopeCmd() @@ -2512,8 +2512,8 @@ func (s *IntegrationCLITestSuite) TestScopeSpecificationTxCommands() { s.contractSpecID.String(), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -2531,8 +2531,8 @@ func (s *IntegrationCLITestSuite) TestScopeSpecificationTxCommands() { "http://www.blockchain.com/icon.png", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -2546,8 +2546,8 @@ func (s *IntegrationCLITestSuite) TestScopeSpecificationTxCommands() { s.contractSpecID.String(), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: "decoding bech32 failed: invalid bech32 string length 7", }, @@ -2561,8 +2561,8 @@ func (s *IntegrationCLITestSuite) TestScopeSpecificationTxCommands() { specID.String(), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: "invalid contract specification id prefix at index 0 (expected: contractspec, got scopespec)", }, @@ -2576,8 +2576,8 @@ func (s *IntegrationCLITestSuite) TestScopeSpecificationTxCommands() { s.contractSpecID.String(), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: `unknown party type: "badpartytype"`, }, @@ -2588,8 +2588,8 @@ func (s *IntegrationCLITestSuite) TestScopeSpecificationTxCommands() { "notvalid", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: "decoding bech32 failed: invalid separator index -1", }, @@ -2600,8 +2600,8 @@ func (s *IntegrationCLITestSuite) TestScopeSpecificationTxCommands() { specID.String(), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -2612,8 +2612,8 @@ func (s *IntegrationCLITestSuite) TestScopeSpecificationTxCommands() { specID.String(), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 38, }, @@ -2635,8 +2635,8 @@ func (s *IntegrationCLITestSuite) TestAddObjectLocatorCmd() { userURI, fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -2648,8 +2648,8 @@ func (s *IntegrationCLITestSuite) TestAddObjectLocatorCmd() { userURIMod, fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -2661,8 +2661,8 @@ func (s *IntegrationCLITestSuite) TestAddObjectLocatorCmd() { userURIMod, fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -2688,8 +2688,8 @@ func (s *IntegrationCLITestSuite) TestContractSpecificationTxCommands() { "`myclassname`", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -2705,8 +2705,8 @@ func (s *IntegrationCLITestSuite) TestContractSpecificationTxCommands() { fmt.Sprintf("--%s=%s", cli.FlagSigners, s.accountAddrStr), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -2721,8 +2721,8 @@ func (s *IntegrationCLITestSuite) TestContractSpecificationTxCommands() { "myclassname", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -2741,8 +2741,8 @@ func (s *IntegrationCLITestSuite) TestContractSpecificationTxCommands() { "http://www.blockchain.com/icon.png", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -2753,8 +2753,8 @@ func (s *IntegrationCLITestSuite) TestContractSpecificationTxCommands() { specificationID.String(), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -2769,8 +2769,8 @@ func (s *IntegrationCLITestSuite) TestContractSpecificationTxCommands() { "myclassname", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: "decoding bech32 failed: invalid separator index -1", }, @@ -2785,8 +2785,8 @@ func (s *IntegrationCLITestSuite) TestContractSpecificationTxCommands() { "`myclassname`", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: `unknown party type: "badpartytype"`, }, @@ -2797,8 +2797,8 @@ func (s *IntegrationCLITestSuite) TestContractSpecificationTxCommands() { "not-a-id", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: "decoding bech32 failed: invalid separator index -1", }, @@ -2809,8 +2809,8 @@ func (s *IntegrationCLITestSuite) TestContractSpecificationTxCommands() { specificationID.String(), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 38, }, @@ -2838,8 +2838,8 @@ func (s *IntegrationCLITestSuite) TestContractSpecificationScopeSpecAddRemoveTxC "`myclassname`", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -2853,8 +2853,8 @@ func (s *IntegrationCLITestSuite) TestContractSpecificationScopeSpecAddRemoveTxC s.contractSpecID.String(), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -2866,8 +2866,8 @@ func (s *IntegrationCLITestSuite) TestContractSpecificationScopeSpecAddRemoveTxC scopeSpecID.String(), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: "invalid contract specification id : invalid-contract-specid", }, @@ -2879,8 +2879,8 @@ func (s *IntegrationCLITestSuite) TestContractSpecificationScopeSpecAddRemoveTxC scopeSpecID.String(), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: fmt.Sprintf("invalid contract specification id : %s", scopeSpecID.String()), }, @@ -2892,8 +2892,8 @@ func (s *IntegrationCLITestSuite) TestContractSpecificationScopeSpecAddRemoveTxC "invalid-scope-spec-id", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: "invalid scope specification id : invalid-scope-spec-id", }, @@ -2905,8 +2905,8 @@ func (s *IntegrationCLITestSuite) TestContractSpecificationScopeSpecAddRemoveTxC specificationID.String(), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: fmt.Sprintf("invalid scope specification id : %s", specificationID.String()), }, @@ -2918,8 +2918,8 @@ func (s *IntegrationCLITestSuite) TestContractSpecificationScopeSpecAddRemoveTxC scopeSpecID.String(), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -2931,8 +2931,8 @@ func (s *IntegrationCLITestSuite) TestContractSpecificationScopeSpecAddRemoveTxC scopeSpecID.String(), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: "invalid contract specification id : invalid-contract-specid", }, @@ -2944,8 +2944,8 @@ func (s *IntegrationCLITestSuite) TestContractSpecificationScopeSpecAddRemoveTxC scopeSpecID.String(), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: fmt.Sprintf("invalid contract specification id : %s", scopeSpecID.String()), }, @@ -2957,8 +2957,8 @@ func (s *IntegrationCLITestSuite) TestContractSpecificationScopeSpecAddRemoveTxC "invalid-scope-spec-id", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: "invalid scope specification id : invalid-scope-spec-id", }, @@ -2970,8 +2970,8 @@ func (s *IntegrationCLITestSuite) TestContractSpecificationScopeSpecAddRemoveTxC specificationID.String(), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: fmt.Sprintf("invalid scope specification id : %s", specificationID.String()), }, @@ -2983,8 +2983,8 @@ func (s *IntegrationCLITestSuite) TestContractSpecificationScopeSpecAddRemoveTxC scopeSpecID.String(), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -3013,8 +3013,8 @@ func (s *IntegrationCLITestSuite) TestRecordSpecificationTxCommands() { "`myclassname`", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -3030,8 +3030,8 @@ func (s *IntegrationCLITestSuite) TestRecordSpecificationTxCommands() { "validator", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -3047,8 +3047,8 @@ func (s *IntegrationCLITestSuite) TestRecordSpecificationTxCommands() { "investor", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -3064,8 +3064,8 @@ func (s *IntegrationCLITestSuite) TestRecordSpecificationTxCommands() { "badpartytype", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: `unknown party type: "badpartytype"`, }, @@ -3081,8 +3081,8 @@ func (s *IntegrationCLITestSuite) TestRecordSpecificationTxCommands() { "custodian", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: "record specification name cannot be empty", }, @@ -3098,8 +3098,8 @@ func (s *IntegrationCLITestSuite) TestRecordSpecificationTxCommands() { "originator", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: `invalid input specification "record1,typename1": expected 3 parts, have 2`, }, @@ -3115,8 +3115,8 @@ func (s *IntegrationCLITestSuite) TestRecordSpecificationTxCommands() { "servicer,affiliate", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: "record specification result type cannot be unspecified", }, @@ -3133,8 +3133,8 @@ func (s *IntegrationCLITestSuite) TestRecordSpecificationTxCommands() { fmt.Sprintf("--%s=%s", cli.FlagSigners, "incorrect-signer-format"), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: "invalid signer address \"incorrect-signer-format\": decoding bech32 failed: invalid separator index -1", }, @@ -3145,8 +3145,8 @@ func (s *IntegrationCLITestSuite) TestRecordSpecificationTxCommands() { "incorrect-id", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: "decoding bech32 failed: invalid separator index -1", }, @@ -3157,8 +3157,8 @@ func (s *IntegrationCLITestSuite) TestRecordSpecificationTxCommands() { contractSpecID.String(), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: fmt.Sprintf("invalid contract specification id: %v", contractSpecID.String()), }, @@ -3170,8 +3170,8 @@ func (s *IntegrationCLITestSuite) TestRecordSpecificationTxCommands() { fmt.Sprintf("--%s=%s", cli.FlagSigners, s.accountAddrStr), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -3183,8 +3183,8 @@ func (s *IntegrationCLITestSuite) TestRecordSpecificationTxCommands() { fmt.Sprintf("--%s=%s", cli.FlagSigners, s.accountAddrStr), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 38, }, @@ -3220,8 +3220,8 @@ func (s *IntegrationCLITestSuite) TestRecordTxCommands() { contractSpecName, fmt.Sprintf("--%s=%s", flags.FlagFrom, userAddress), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -3235,8 +3235,8 @@ func (s *IntegrationCLITestSuite) TestRecordTxCommands() { s.contractSpecID.String() + "," + contractSpecID.String(), fmt.Sprintf("--%s=%s", flags.FlagFrom, userAddress), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -3251,8 +3251,8 @@ func (s *IntegrationCLITestSuite) TestRecordTxCommands() { userAddress, fmt.Sprintf("--%s=%s", flags.FlagFrom, userAddress), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -3268,8 +3268,8 @@ func (s *IntegrationCLITestSuite) TestRecordTxCommands() { "owner", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -3287,8 +3287,8 @@ func (s *IntegrationCLITestSuite) TestRecordTxCommands() { contractSpecID.String(), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -3306,8 +3306,8 @@ func (s *IntegrationCLITestSuite) TestRecordTxCommands() { contractSpecID.String(), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: "decoding bech32 failed: invalid separator index -1", }, @@ -3325,8 +3325,8 @@ func (s *IntegrationCLITestSuite) TestRecordTxCommands() { contractSpecID.String(), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: "decoding bech32 failed: invalid separator index -1", }, @@ -3344,8 +3344,8 @@ func (s *IntegrationCLITestSuite) TestRecordTxCommands() { contractSpecID.String(), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: `invalid process "hashvalue,methodname": expected 3 parts, have: 2`, }, @@ -3363,8 +3363,8 @@ func (s *IntegrationCLITestSuite) TestRecordTxCommands() { contractSpecID.String(), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: `invalid record input "input1name,typename1,proposed": expected 4 parts, have 3`, }, @@ -3382,8 +3382,8 @@ func (s *IntegrationCLITestSuite) TestRecordTxCommands() { contractSpecID.String(), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: `invalid record output "outputhashvalue": expected 2 parts, have 1`, }, @@ -3401,8 +3401,8 @@ func (s *IntegrationCLITestSuite) TestRecordTxCommands() { contractSpecID.String(), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: fmt.Sprintf(`invalid party "%s,%s": unknown party type: "%s"`, userAddress, userAddress, userAddress), }, @@ -3420,8 +3420,8 @@ func (s *IntegrationCLITestSuite) TestRecordTxCommands() { scopeID.String(), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: fmt.Sprintf("id must be a contract or session id: %s", scopeID.String()), }, @@ -3432,8 +3432,8 @@ func (s *IntegrationCLITestSuite) TestRecordTxCommands() { recordId.String(), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -3462,8 +3462,8 @@ func (s *IntegrationCLITestSuite) TestWriteSessionCmd() { owner, fmt.Sprintf("--%s=%s", flags.FlagFrom, sender), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, ) require.NoError(s.T(), err, "adding base scope") @@ -3484,8 +3484,8 @@ func (s *IntegrationCLITestSuite) TestWriteSessionCmd() { s.contractSpecID.String(), fmt.Sprintf("%s,owner", owner), "somename", fmt.Sprintf("--%s=%s", flags.FlagFrom, sender), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -3498,8 +3498,8 @@ func (s *IntegrationCLITestSuite) TestWriteSessionCmd() { s.contractSpecID.String(), fmt.Sprintf("%s,owner", owner), "somename", fmt.Sprintf("--%s=%s", flags.FlagFrom, sender), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -3512,8 +3512,8 @@ func (s *IntegrationCLITestSuite) TestWriteSessionCmd() { s.contractSpecID.String(), fmt.Sprintf("%s,owner", owner), "somename", fmt.Sprintf("--%s=%s", flags.FlagFrom, sender), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -3526,8 +3526,8 @@ func (s *IntegrationCLITestSuite) TestWriteSessionCmd() { "ChFIRUxMTyBQUk9WRU5BTkNFIQ==", fmt.Sprintf("--%s=%s", flags.FlagFrom, sender), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -3541,8 +3541,8 @@ func (s *IntegrationCLITestSuite) TestWriteSessionCmd() { "ChFIRUxMTyBQUk9WRU5BTkNFIQ==", fmt.Sprintf("--%s=%s", flags.FlagFrom, sender), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -3556,8 +3556,8 @@ func (s *IntegrationCLITestSuite) TestWriteSessionCmd() { "ChFIRUxMTyBQUk9WRU5BTkNFIQ==", fmt.Sprintf("--%s=%s", flags.FlagFrom, sender), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -3569,8 +3569,8 @@ func (s *IntegrationCLITestSuite) TestWriteSessionCmd() { s.contractSpecID.String(), fmt.Sprintf("%s,owner", owner), "somename", fmt.Sprintf("--%s=%s", flags.FlagFrom, sender), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: fmt.Sprintf("invalid address type in argument [%s]", s.scopeSpecID), }, @@ -3582,8 +3582,8 @@ func (s *IntegrationCLITestSuite) TestWriteSessionCmd() { s.contractSpecID.String(), fmt.Sprintf("%s,owner", owner), "somename", fmt.Sprintf("--%s=%s", flags.FlagFrom, sender), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: fmt.Sprintf("argument [%s] is neither a bech32 address (%s) nor UUID (%s)", "invalid", "decoding bech32 failed: invalid bech32 string length 7", "invalid UUID length: 7"), }, @@ -3596,8 +3596,8 @@ func (s *IntegrationCLITestSuite) TestWriteSessionCmd() { "SEVMTE8gUFJPVkVOQU5DRSEK", fmt.Sprintf("--%s=%s", flags.FlagFrom, sender), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -3611,8 +3611,8 @@ func (s *IntegrationCLITestSuite) TestWriteSessionCmd() { "somename", fmt.Sprintf("--%s=%s", flags.FlagFrom, sender), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectErrMsg: `invalid party "` + owner + `,badpartytype": unknown party type: "badpartytype"`, }, @@ -3634,8 +3634,8 @@ func (s *IntegrationCLITestSuite) TestSetAccountDataCmd() { return append(args, fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), ) } @@ -3692,8 +3692,8 @@ func (s *IntegrationCLITestSuite) TestSetAccountDataCmd() { "--" + attrcli.FlagValue, "Some new value.", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.user1AddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 18, }, @@ -3760,8 +3760,8 @@ func (s *IntegrationCLITestSuite) TestCountAuthorizationIntactTxCommands() { s.contractSpecID.String(), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -3776,23 +3776,23 @@ func (s *IntegrationCLITestSuite) TestCountAuthorizationIntactTxCommands() { s.user1AddrStr, fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, { name: "should successfully add count authorization from owner 1 to signer 3", - cmd: authzcli.NewCmdGrantAuthorization(), + cmd: authzcli.NewCmdGrantAuthorization(s.cfg.Codec.InterfaceRegistry().SigningContext().AddressCodec()), args: []string{ s.user3AddrStr, "count", - fmt.Sprintf("--%s=%d", authzcli.FlagAllowedAuthorizations, 1), + // fmt.Sprintf("--%s=%d", authzcli.FlagAllowedAuthorizations, 1), // TODO[1760]: count-authz fmt.Sprintf("--%s=%s", authzcli.FlagMsgType, metadatatypes.TypeURLMsgDeleteScopeRequest), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.user1AddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -3803,23 +3803,23 @@ func (s *IntegrationCLITestSuite) TestCountAuthorizationIntactTxCommands() { scopeID, fmt.Sprintf("--%s=%s", flags.FlagFrom, s.user3AddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 18, }, { name: "should successfully add count authorization from owner 2 to signer 3", - cmd: authzcli.NewCmdGrantAuthorization(), + cmd: authzcli.NewCmdGrantAuthorization(s.cfg.Codec.InterfaceRegistry().SigningContext().AddressCodec()), args: []string{ s.user3AddrStr, "count", - fmt.Sprintf("--%s=%d", authzcli.FlagAllowedAuthorizations, 2), + // fmt.Sprintf("--%s=%d", authzcli.FlagAllowedAuthorizations, 2), // TODO[1760]: count-authz fmt.Sprintf("--%s=%s", authzcli.FlagMsgType, metadatatypes.TypeURLMsgDeleteScopeRequest), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.user2AddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, @@ -3830,8 +3830,8 @@ func (s *IntegrationCLITestSuite) TestCountAuthorizationIntactTxCommands() { scopeID, fmt.Sprintf("--%s=%s", flags.FlagFrom, s.user3AddrStr), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, expectedCode: 0, }, diff --git a/x/metadata/client/cli/query.go b/x/metadata/client/cli/query.go index 790a7af033..6410cca709 100644 --- a/x/metadata/client/cli/query.go +++ b/x/metadata/client/cli/query.go @@ -668,7 +668,7 @@ func outputScopesAll(cmd *cobra.Command) error { if err != nil { return err } - pageReq, e := client.ReadPageRequestWithPageKeyDecoded(cmd.Flags()) + pageReq, e := client.ReadPageRequest(cmd.Flags()) // TODO[1760]: cli: ReadPageRequestWithPageKeyDecoded if e != nil { return e } @@ -724,7 +724,7 @@ func outputSessionsAll(cmd *cobra.Command) error { if err != nil { return err } - pageReq, e := client.ReadPageRequestWithPageKeyDecoded(cmd.Flags()) + pageReq, e := client.ReadPageRequest(cmd.Flags()) // TODO[1760]: cli: ReadPageRequestWithPageKeyDecoded if e != nil { return e } @@ -777,7 +777,7 @@ func outputRecordsAll(cmd *cobra.Command) error { if err != nil { return err } - pageReq, e := client.ReadPageRequestWithPageKeyDecoded(cmd.Flags()) + pageReq, e := client.ReadPageRequest(cmd.Flags()) // TODO[1760]: cli: ReadPageRequestWithPageKeyDecoded if e != nil { return e } @@ -803,7 +803,7 @@ func outputOwnership(cmd *cobra.Command, address string) error { if err != nil { return err } - pageReq, e := client.ReadPageRequestWithPageKeyDecoded(cmd.Flags()) + pageReq, e := client.ReadPageRequest(cmd.Flags()) // TODO[1760]: cli: ReadPageRequestWithPageKeyDecoded if e != nil { return e } @@ -825,7 +825,7 @@ func outputValueOwnership(cmd *cobra.Command, address string) error { if err != nil { return err } - pageReq, e := client.ReadPageRequestWithPageKeyDecoded(cmd.Flags()) + pageReq, e := client.ReadPageRequest(cmd.Flags()) // TODO[1760]: cli: ReadPageRequestWithPageKeyDecoded if e != nil { return e } @@ -871,7 +871,7 @@ func outputScopeSpecsAll(cmd *cobra.Command) error { if err != nil { return err } - pageReq, e := client.ReadPageRequestWithPageKeyDecoded(cmd.Flags()) + pageReq, e := client.ReadPageRequest(cmd.Flags()) // TODO[1760]: cli: ReadPageRequestWithPageKeyDecoded if e != nil { return e } @@ -920,7 +920,7 @@ func outputContractSpecsAll(cmd *cobra.Command) error { if err != nil { return err } - pageReq, e := client.ReadPageRequestWithPageKeyDecoded(cmd.Flags()) + pageReq, e := client.ReadPageRequest(cmd.Flags()) // TODO[1760]: cli: ReadPageRequestWithPageKeyDecoded if e != nil { return e } @@ -991,7 +991,7 @@ func outputRecordSpecsAll(cmd *cobra.Command) error { if err != nil { return err } - pageReq, e := client.ReadPageRequestWithPageKeyDecoded(cmd.Flags()) + pageReq, e := client.ReadPageRequest(cmd.Flags()) // TODO[1760]: cli: ReadPageRequestWithPageKeyDecoded if e != nil { return e } @@ -1053,7 +1053,7 @@ func outputOSLocatorsByURI(cmd *cobra.Command, uri string) error { if err != nil { return err } - pageReq, e := client.ReadPageRequestWithPageKeyDecoded(cmd.Flags()) + pageReq, e := client.ReadPageRequest(cmd.Flags()) // TODO[1760]: cli: ReadPageRequestWithPageKeyDecoded if e != nil { return e } @@ -1093,7 +1093,7 @@ func outputOSLocatorsAll(cmd *cobra.Command) error { if err != nil { return err } - pageReq, e := client.ReadPageRequestWithPageKeyDecoded(cmd.Flags()) + pageReq, e := client.ReadPageRequest(cmd.Flags()) // TODO[1760]: cli: ReadPageRequestWithPageKeyDecoded if e != nil { return e } diff --git a/x/metadata/client/cli/tx.go b/x/metadata/client/cli/tx.go index e8a0d29d76..2ec624ab06 100644 --- a/x/metadata/client/cli/tx.go +++ b/x/metadata/client/cli/tx.go @@ -135,11 +135,6 @@ func WriteScopeCmd() *cobra.Command { ) msg := types.NewMsgWriteScopeRequest(scope, signers) - err = msg.ValidateBasic() - if err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) }, } @@ -175,13 +170,8 @@ func RemoveScopeCmd() *cobra.Command { return err } - msg := *types.NewMsgDeleteScopeRequest(scopeID, signers) - err = msg.ValidateBasic() - if err != nil { - return err - } - - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), &msg) + msg := types.NewMsgDeleteScopeRequest(scopeID, signers) + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) }, } @@ -232,10 +222,7 @@ $ %[1]s tx metadata scope-data-access remove scope1qzhpuff00wpy2yuf7xr0rp8aucqst } else { msg = types.NewMsgDeleteScopeDataAccessRequest(scopeID, dataAccess, signers) } - err = msg.ValidateBasic() - if err != nil { - return err - } + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) }, } @@ -292,10 +279,7 @@ $ %[1]s tx metadata scope-owners remove scope1qzhpuff00wpy2yuf7xr0rp8aucqstsk0cn } else { msg = types.NewMsgDeleteScopeOwnerRequest(scopeID, ownerAddresses, signers) } - err = msg.ValidateBasic() - if err != nil { - return err - } + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) }, } @@ -344,11 +328,6 @@ func UpdateValueOwnersCmd() *cobra.Command { return err } - err = msg.ValidateBasic() - if err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) }, } @@ -390,11 +369,6 @@ func MigrateValueOwnerCmd() *cobra.Command { return err } - err = msg.ValidateBasic() - if err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) }, } @@ -551,11 +525,6 @@ func WriteScopeSpecificationCmd() *cobra.Command { } msg := types.NewMsgWriteScopeSpecificationRequest(scopeSpec, signers) - err = msg.ValidateBasic() - if err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) }, } @@ -623,10 +592,6 @@ icon-url - address to a image to be used as an icon (optional, can onl } msg := types.NewMsgWriteContractSpecificationRequest(contractSpecification, signers) - err = msg.ValidateBasic() - if err != nil { - return err - } return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) }, } @@ -664,10 +629,6 @@ func AddContractSpecToScopeSpecCmd() *cobra.Command { } msg := types.NewMsgAddContractSpecToScopeSpecRequest(contractSpecID, scopeSpecID, signers) - err = msg.ValidateBasic() - if err != nil { - return err - } return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) }, } @@ -796,10 +757,6 @@ ChFIRUxMTyBQUk9WRU5BTkNFIQ==`, version.AppName), Context: context, } writeSessionMsg := types.NewMsgWriteSessionRequest(session, signers) - err = writeSessionMsg.ValidateBasic() - if err != nil { - return err - } return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), writeSessionMsg) }, } @@ -915,22 +872,15 @@ contractspec-name Parties: parties, } writeSessionMsg = types.NewMsgWriteSessionRequest(session, signers) - err = writeSessionMsg.ValidateBasic() - if err != nil { - return err - } default: return fmt.Errorf("id must be a contract or session id: %s", contractOrSessionID.String()) } - msg := *types.NewMsgWriteRecordRequest(record, nil, "", signers, parties) - err = msg.ValidateBasic() - if err != nil { - return err - } + msg := types.NewMsgWriteRecordRequest(record, nil, "", signers, parties) + if writeSessionMsg != nil { - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), writeSessionMsg, &msg) + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), writeSessionMsg, msg) } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), &msg) + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) }, } @@ -996,13 +946,8 @@ owner,originator`, version.AppName), ResponsibleParties: partyTypes, } - msg := *types.NewMsgWriteRecordSpecificationRequest(recordSpecification, signers) - err = msg.ValidateBasic() - if err != nil { - return err - } - - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), &msg) + msg := types.NewMsgWriteRecordSpecificationRequest(recordSpecification, signers) + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) }, } @@ -1036,12 +981,8 @@ func RemoveScopeSpecificationCmd() *cobra.Command { return err } - msg := *types.NewMsgDeleteScopeSpecificationRequest(specificationID, signers) - err = msg.ValidateBasic() - if err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), &msg) + msg := types.NewMsgDeleteScopeSpecificationRequest(specificationID, signers) + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) }, } @@ -1076,10 +1017,6 @@ func RemoveContractSpecificationCmd() *cobra.Command { } msg := types.NewMsgDeleteContractSpecificationRequest(specificationID, signers) - err = msg.ValidateBasic() - if err != nil { - return err - } return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) }, } @@ -1118,10 +1055,6 @@ func RemoveContractSpecFromScopeSpecCmd() *cobra.Command { } msg := types.NewMsgDeleteContractSpecFromScopeSpecRequest(contractSpecID, scopeSpecID, signers) - err = msg.ValidateBasic() - if err != nil { - return err - } return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) }, } diff --git a/x/metadata/handler.go b/x/metadata/handler.go index 1140817eb8..4fcf1f66ca 100644 --- a/x/metadata/handler.go +++ b/x/metadata/handler.go @@ -9,7 +9,8 @@ import ( ) // NewHandler returns a handler for metadata messages. -func NewHandler(k keeper.Keeper) sdk.Handler { +// TODO[1760]: metadata: Delete the metadata NewHandler. +func NewHandler(k keeper.Keeper) func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { msgServer := keeper.NewMsgServerImpl(k) return func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { diff --git a/x/metadata/handler_test.go b/x/metadata/handler_test.go index 48efab6d21..0cf134e18d 100644 --- a/x/metadata/handler_test.go +++ b/x/metadata/handler_test.go @@ -7,29 +7,28 @@ import ( "testing" "github.com/google/uuid" - - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/stretchr/testify/suite" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256r1" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "github.com/stretchr/testify/suite" - "github.com/provenance-io/provenance/app" "github.com/provenance-io/provenance/x/metadata" "github.com/provenance-io/provenance/x/metadata/types" ) +// TODO[1760]: metadata: Migrate the metadata handler tests to the keeper. + type MetadataHandlerTestSuite struct { suite.Suite app *app.App ctx sdk.Context - handler sdk.Handler + handler func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) pubkey1 cryptotypes.PubKey user1 string @@ -42,7 +41,7 @@ type MetadataHandlerTestSuite struct { func (s *MetadataHandlerTestSuite) SetupTest() { s.app = app.Setup(s.T()) - s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{}) + s.ctx = s.app.BaseApp.NewContext(false) s.handler = metadata.NewHandler(s.app.MetadataKeeper) s.pubkey1 = secp256k1.GenPrivKey().PubKey() diff --git a/x/metadata/keeper/account_data_test.go b/x/metadata/keeper/account_data_test.go index a48fb3df35..d8334f047c 100644 --- a/x/metadata/keeper/account_data_test.go +++ b/x/metadata/keeper/account_data_test.go @@ -6,14 +6,14 @@ import ( "github.com/google/uuid" sdk "github.com/cosmos/cosmos-sdk/types" + simapp "github.com/provenance-io/provenance/app" "github.com/provenance-io/provenance/x/metadata/keeper" "github.com/provenance-io/provenance/x/metadata/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" ) func FreshCtx(app *simapp.App) sdk.Context { - return keeper.AddAuthzCacheToContext(app.BaseApp.NewContext(false, tmproto.Header{})) + return keeper.AddAuthzCacheToContext(app.BaseApp.NewContext(false)) } func TestValidateSetAccountData(t *testing.T) { diff --git a/x/metadata/keeper/expected_keepers.go b/x/metadata/keeper/expected_keepers.go index 7676cb1d47..f9d19702eb 100644 --- a/x/metadata/keeper/expected_keepers.go +++ b/x/metadata/keeper/expected_keepers.go @@ -1,23 +1,23 @@ package keeper import ( + "context" "time" sdk "github.com/cosmos/cosmos-sdk/types" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "github.com/cosmos/cosmos-sdk/x/authz" ) // AuthKeeper is an interface with functions that the auth.Keeper has that are needed in this module. type AuthKeeper interface { - GetAccount(ctx sdk.Context, addr sdk.AccAddress) authtypes.AccountI + GetAccount(ctx context.Context, addr sdk.AccAddress) sdk.AccountI } // AuthzKeeper is an interface with functions that the authz.Keeper has that are needed in this module. type AuthzKeeper interface { - GetAuthorization(ctx sdk.Context, grantee, granter sdk.AccAddress, msgType string) (authz.Authorization, *time.Time) - DeleteGrant(ctx sdk.Context, grantee, granter sdk.AccAddress, msgType string) error - SaveGrant(ctx sdk.Context, grantee, granter sdk.AccAddress, authorization authz.Authorization, expiration *time.Time) error + GetAuthorization(ctx context.Context, grantee, granter sdk.AccAddress, msgType string) (authz.Authorization, *time.Time) + DeleteGrant(ctx context.Context, grantee, granter sdk.AccAddress, msgType string) error + SaveGrant(ctx context.Context, grantee, granter sdk.AccAddress, authorization authz.Authorization, expiration *time.Time) error } // AttrKeeper defines the attribute functionality needed by the metadata module. diff --git a/x/metadata/keeper/export_test.go b/x/metadata/keeper/export_test.go index 0e80a5b3d3..c94489c50a 100644 --- a/x/metadata/keeper/export_test.go +++ b/x/metadata/keeper/export_test.go @@ -1,7 +1,7 @@ package keeper import ( - storetypes "github.com/cosmos/cosmos-sdk/store/types" + storetypes "cosmossdk.io/store/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/authz" diff --git a/x/metadata/keeper/keeper.go b/x/metadata/keeper/keeper.go index 6934f0cd02..dee9a832d9 100644 --- a/x/metadata/keeper/keeper.go +++ b/x/metadata/keeper/keeper.go @@ -5,10 +5,10 @@ import ( "github.com/gogo/protobuf/proto" - "github.com/tendermint/tendermint/libs/log" + "cosmossdk.io/log" + storetypes "cosmossdk.io/store/types" "github.com/cosmos/cosmos-sdk/codec" - storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" diff --git a/x/metadata/keeper/keeper_test.go b/x/metadata/keeper/keeper_test.go index 476711063d..3ccc26b5b8 100644 --- a/x/metadata/keeper/keeper_test.go +++ b/x/metadata/keeper/keeper_test.go @@ -5,19 +5,20 @@ import ( "testing" "time" - simapp "github.com/provenance-io/provenance/app" - "github.com/provenance-io/provenance/internal/pioconfig" - "github.com/provenance-io/provenance/x/metadata/types" - metadatatypes "github.com/provenance-io/provenance/x/metadata/types" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/suite" + + cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/suite" + simapp "github.com/provenance-io/provenance/app" + "github.com/provenance-io/provenance/internal/pioconfig" + "github.com/provenance-io/provenance/x/metadata/types" + metadatatypes "github.com/provenance-io/provenance/x/metadata/types" ) type KeeperTestSuite struct { @@ -57,7 +58,7 @@ type KeeperTestSuite struct { func (s *KeeperTestSuite) SetupTest() { pioconfig.SetProvenanceConfig("atom", 0) s.app = simapp.Setup(s.T()) - s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{Time: time.Now()}) + s.ctx = s.app.BaseApp.NewContextLegacy(false, cmtproto.Header{Time: time.Now()}) queryHelper := baseapp.NewQueryServerTestHelper(s.ctx, s.app.InterfaceRegistry()) types.RegisterQueryServer(queryHelper, s.app.MetadataKeeper) s.queryClient = types.NewQueryClient(queryHelper) diff --git a/x/metadata/keeper/mocks_test.go b/x/metadata/keeper/mocks_test.go index ebec82a7ab..ded2b1af43 100644 --- a/x/metadata/keeper/mocks_test.go +++ b/x/metadata/keeper/mocks_test.go @@ -1,6 +1,7 @@ package keeper_test import ( + "context" "fmt" "time" @@ -166,7 +167,7 @@ func (c SaveGrantCall) Key() string { } // GetAuthorization records that a GetAuthorization call has been made and returns the pre-defined value or nil. -func (k *MockAuthzKeeper) GetAuthorization(_ sdk.Context, grantee, granter sdk.AccAddress, msgType string) (authz.Authorization, *time.Time) { +func (k *MockAuthzKeeper) GetAuthorization(_ context.Context, grantee, granter sdk.AccAddress, msgType string) (authz.Authorization, *time.Time) { call := &GetAuthorizationCall{ GrantInfo: GrantInfo{ Grantee: grantee, @@ -180,7 +181,7 @@ func (k *MockAuthzKeeper) GetAuthorization(_ sdk.Context, grantee, granter sdk.A } // DeleteGrant records that a DeleteGrant call has been made and returns the pre-defined value or nil. -func (k *MockAuthzKeeper) DeleteGrant(_ sdk.Context, grantee, granter sdk.AccAddress, msgType string) error { +func (k *MockAuthzKeeper) DeleteGrant(_ context.Context, grantee, granter sdk.AccAddress, msgType string) error { call := &DeleteGrantCall{ GrantInfo: GrantInfo{ Grantee: grantee, @@ -194,7 +195,7 @@ func (k *MockAuthzKeeper) DeleteGrant(_ sdk.Context, grantee, granter sdk.AccAdd } // SaveGrant records that a SaveGrant call has been made and returns the pre-defined value or nil. -func (k *MockAuthzKeeper) SaveGrant(_ sdk.Context, grantee, granter sdk.AccAddress, authorization authz.Authorization, expiration *time.Time) error { +func (k *MockAuthzKeeper) SaveGrant(_ context.Context, grantee, granter sdk.AccAddress, authorization authz.Authorization, expiration *time.Time) error { call := &SaveGrantCall{ Grantee: grantee, Granter: granter, @@ -211,7 +212,7 @@ var _ keeper.AuthKeeper = (*MockAuthKeeper)(nil) // MockAuthKeeper is a mocked keeper.AuthKeeper. type MockAuthKeeper struct { - GetAccountResults map[string]authtypes.AccountI + GetAccountResults map[string]sdk.AccountI GetAccountCalls []*GetAccountCall } @@ -219,7 +220,7 @@ type MockAuthKeeper struct { // Usually followed by calls to WithGetAccountResults. func NewMockAuthKeeper() *MockAuthKeeper { return &MockAuthKeeper{ - GetAccountResults: make(map[string]authtypes.AccountI), + GetAccountResults: make(map[string]sdk.AccountI), GetAccountCalls: nil, } } @@ -240,10 +241,10 @@ func (k *MockAuthKeeper) WithGetAccountResults(entries ...*GetAccountCall) *Mock // GetAccountCall has the inputs of GetAccount and the result associated with that input. type GetAccountCall struct { Addr sdk.AccAddress - Result authtypes.AccountI + Result sdk.AccountI } -func NewGetAccountCall(addr sdk.AccAddress, result authtypes.AccountI) *GetAccountCall { +func NewGetAccountCall(addr sdk.AccAddress, result sdk.AccountI) *GetAccountCall { return &GetAccountCall{ Addr: addr, Result: result, @@ -266,7 +267,7 @@ func (c GetAccountCall) Key() string { } // GetAccount records that a GetAccount call has been made and returns the pre-defined value or nil. -func (k *MockAuthKeeper) GetAccount(_ sdk.Context, addr sdk.AccAddress) authtypes.AccountI { +func (k *MockAuthKeeper) GetAccount(_ context.Context, addr sdk.AccAddress) sdk.AccountI { call := &GetAccountCall{ Addr: addr, Result: nil, @@ -302,7 +303,7 @@ func (a *MockAuthorization) WithAcceptCalls(calls ...sdk.Msg) *MockAuthorization } // Accept records that an Accept call has been made and returns the pre-defined values. -func (a *MockAuthorization) Accept(_ sdk.Context, msg sdk.Msg) (authz.AcceptResponse, error) { +func (a *MockAuthorization) Accept(_ context.Context, msg sdk.Msg) (authz.AcceptResponse, error) { a.AcceptCalls = append(a.AcceptCalls, msg) return a.AcceptResponse, a.AcceptResponseErr } diff --git a/x/metadata/keeper/objectstore.go b/x/metadata/keeper/objectstore.go index 89e937d895..e1f1ced9d4 100644 --- a/x/metadata/keeper/objectstore.go +++ b/x/metadata/keeper/objectstore.go @@ -3,6 +3,8 @@ package keeper import ( "fmt" + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/provenance-io/provenance/x/metadata/types" @@ -64,7 +66,7 @@ func (k Keeper) SetOSLocator(ctx sdk.Context, ownerAddr, encryptionKey sdk.AccAd func (k Keeper) IterateOSLocators(ctx sdk.Context, cb func(account types.ObjectStoreLocator) (stop bool)) error { store := ctx.KVStore(k.storeKey) prefix := types.OSLocatorAddressKeyPrefix - it := sdk.KVStorePrefixIterator(store, prefix) + it := storetypes.KVStorePrefixIterator(store, prefix) defer it.Close() diff --git a/x/metadata/keeper/querier.go b/x/metadata/keeper/querier.go index 1f49d68780..f6da41b5a8 100644 --- a/x/metadata/keeper/querier.go +++ b/x/metadata/keeper/querier.go @@ -5,7 +5,7 @@ import ( "github.com/google/uuid" - abci "github.com/tendermint/tendermint/abci/types" + abci "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" @@ -15,8 +15,10 @@ import ( "github.com/provenance-io/provenance/x/metadata/types" ) +// TODO[1760]: metadata: Delete the metadata Querier. + // NewQuerier creates a querier for auth REST endpoints -func NewQuerier(k Keeper, legacyQuerierCdc *codec.LegacyAmino) sdk.Querier { +func NewQuerier(k Keeper, legacyQuerierCdc *codec.LegacyAmino) func(ctx sdk.Context, path []string, req abci.RequestQuery) ([]byte, error) { return func(ctx sdk.Context, path []string, req abci.RequestQuery) ([]byte, error) { switch path[0] { case types.QueryScope: diff --git a/x/metadata/keeper/query_server.go b/x/metadata/keeper/query_server.go index 9bf81adcbd..0d35c18c2c 100644 --- a/x/metadata/keeper/query_server.go +++ b/x/metadata/keeper/query_server.go @@ -9,7 +9,7 @@ import ( "github.com/google/uuid" - "github.com/cosmos/cosmos-sdk/store/prefix" + "cosmossdk.io/store/prefix" "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" diff --git a/x/metadata/keeper/query_server_test.go b/x/metadata/keeper/query_server_test.go index 3aaa5fde42..a3b0857818 100644 --- a/x/metadata/keeper/query_server_test.go +++ b/x/metadata/keeper/query_server_test.go @@ -7,16 +7,14 @@ import ( "time" "github.com/google/uuid" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/stretchr/testify/suite" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "github.com/stretchr/testify/suite" simapp "github.com/provenance-io/provenance/app" "github.com/provenance-io/provenance/x/metadata/types" @@ -58,7 +56,7 @@ type QueryServerTestSuite struct { func (s *QueryServerTestSuite) SetupTest() { s.app = simapp.Setup(s.T()) - s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{}) + s.ctx = s.app.BaseApp.NewContext(false) queryHelper := baseapp.NewQueryServerTestHelper(s.ctx, s.app.InterfaceRegistry()) types.RegisterQueryServer(queryHelper, s.app.MetadataKeeper) s.queryClient = types.NewQueryClient(queryHelper) diff --git a/x/metadata/keeper/record.go b/x/metadata/keeper/record.go index 2016aab8f3..1d6cc96726 100644 --- a/x/metadata/keeper/record.go +++ b/x/metadata/keeper/record.go @@ -6,6 +6,8 @@ import ( "github.com/gogo/protobuf/proto" + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/provenance-io/provenance/x/metadata/types" @@ -100,7 +102,7 @@ func (k Keeper) IterateRecords(ctx sdk.Context, scopeID types.MetadataAddress, h if err != nil { return err } - it := sdk.KVStorePrefixIterator(store, prefix) + it := storetypes.KVStorePrefixIterator(store, prefix) defer it.Close() for ; it.Valid(); it.Next() { var record types.Record diff --git a/x/metadata/keeper/record_test.go b/x/metadata/keeper/record_test.go index 83270d9522..88c8ad910b 100644 --- a/x/metadata/keeper/record_test.go +++ b/x/metadata/keeper/record_test.go @@ -6,19 +6,17 @@ import ( "time" "github.com/google/uuid" - - "github.com/provenance-io/provenance/app" - simapp "github.com/provenance-io/provenance/app" - "github.com/provenance-io/provenance/x/metadata/keeper" - "github.com/provenance-io/provenance/x/metadata/types" + "github.com/stretchr/testify/suite" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - "github.com/stretchr/testify/suite" + "github.com/provenance-io/provenance/app" + simapp "github.com/provenance-io/provenance/app" + "github.com/provenance-io/provenance/x/metadata/keeper" + "github.com/provenance-io/provenance/x/metadata/types" ) type RecordKeeperTestSuite struct { @@ -92,7 +90,7 @@ func (s *RecordKeeperTestSuite) SetupTest() { } func (s *RecordKeeperTestSuite) FreshCtx() sdk.Context { - return keeper.AddAuthzCacheToContext(s.app.BaseApp.NewContext(false, tmproto.Header{})) + return keeper.AddAuthzCacheToContext(s.app.BaseApp.NewContext(false)) } func TestRecordKeeperTestSuite(t *testing.T) { diff --git a/x/metadata/keeper/scope.go b/x/metadata/keeper/scope.go index 05c9dc37b5..e43fc64723 100644 --- a/x/metadata/keeper/scope.go +++ b/x/metadata/keeper/scope.go @@ -5,6 +5,8 @@ import ( "github.com/gogo/protobuf/proto" + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/provenance-io/provenance/x/metadata/types" @@ -13,7 +15,7 @@ import ( // IterateScopes processes all stored scopes with the given handler. func (k Keeper) IterateScopes(ctx sdk.Context, handler func(types.Scope) (stop bool)) error { store := ctx.KVStore(k.storeKey) - it := sdk.KVStorePrefixIterator(store, types.ScopeKeyPrefix) + it := storetypes.KVStorePrefixIterator(store, types.ScopeKeyPrefix) defer it.Close() for ; it.Valid(); it.Next() { var scope types.Scope @@ -29,7 +31,7 @@ func (k Keeper) IterateScopes(ctx sdk.Context, handler func(types.Scope) (stop b func (k Keeper) IterateScopesForAddress(ctx sdk.Context, address sdk.AccAddress, handler func(scopeID types.MetadataAddress) (stop bool)) error { store := ctx.KVStore(k.storeKey) prefix := types.GetAddressScopeCacheIteratorPrefix(address) - it := sdk.KVStorePrefixIterator(store, prefix) + it := storetypes.KVStorePrefixIterator(store, prefix) defer it.Close() for ; it.Valid(); it.Next() { var scopeID types.MetadataAddress @@ -52,7 +54,7 @@ func (k Keeper) IterateScopesForValueOwner(ctx sdk.Context, valueOwner string, h store := ctx.KVStore(k.storeKey) prefix := types.GetValueOwnerScopeCacheIteratorPrefix(addr) - it := sdk.KVStorePrefixIterator(store, prefix) + it := storetypes.KVStorePrefixIterator(store, prefix) defer it.Close() for ; it.Valid(); it.Next() { var scopeID types.MetadataAddress @@ -73,7 +75,7 @@ func (k Keeper) IterateScopesForScopeSpec(ctx sdk.Context, scopeSpecID types.Met ) error { store := ctx.KVStore(k.storeKey) prefix := types.GetScopeSpecScopeCacheIteratorPrefix(scopeSpecID) - it := sdk.KVStorePrefixIterator(store, prefix) + it := storetypes.KVStorePrefixIterator(store, prefix) defer it.Close() for ; it.Valid(); it.Next() { var scopeID types.MetadataAddress @@ -145,7 +147,7 @@ func (k Keeper) RemoveScope(ctx sdk.Context, id types.MetadataAddress) { if err != nil { panic(err) } - iter := sdk.KVStorePrefixIterator(store, prefix) + iter := storetypes.KVStorePrefixIterator(store, prefix) defer iter.Close() for ; iter.Valid(); iter.Next() { k.RemoveRecord(ctx, iter.Key()) @@ -272,7 +274,7 @@ func (v scopeIndexValues) IndexKeys() [][]byte { // // If both newScope and oldScope are not nil, it is assumed that they have the same ScopeId. // Failure to meet this assumption will result in strange and bad behavior. -func (k Keeper) indexScope(store sdk.KVStore, newScope, oldScope *types.Scope) { +func (k Keeper) indexScope(store storetypes.KVStore, newScope, oldScope *types.Scope) { if newScope == nil && oldScope == nil { return } diff --git a/x/metadata/keeper/scope_test.go b/x/metadata/keeper/scope_test.go index eedf371303..9b272b5e11 100644 --- a/x/metadata/keeper/scope_test.go +++ b/x/metadata/keeper/scope_test.go @@ -10,10 +10,7 @@ import ( "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" - simapp "github.com/provenance-io/provenance/app" - markertypes "github.com/provenance-io/provenance/x/marker/types" - "github.com/provenance-io/provenance/x/metadata/keeper" - "github.com/provenance-io/provenance/x/metadata/types" + sdkmath "cosmossdk.io/math" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" @@ -21,7 +18,11 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "github.com/cosmos/cosmos-sdk/x/authz" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + + simapp "github.com/provenance-io/provenance/app" + markertypes "github.com/provenance-io/provenance/x/marker/types" + "github.com/provenance-io/provenance/x/metadata/keeper" + "github.com/provenance-io/provenance/x/metadata/types" ) type ScopeKeeperTestSuite struct { @@ -86,7 +87,7 @@ func (s *ScopeKeeperTestSuite) SetupTest() { } func (s *ScopeKeeperTestSuite) FreshCtx() sdk.Context { - return keeper.AddAuthzCacheToContext(s.app.BaseApp.NewContext(false, tmproto.Header{})) + return keeper.AddAuthzCacheToContext(s.app.BaseApp.NewContext(false)) } // AssertErrorValue asserts that: @@ -499,7 +500,7 @@ func (s *ScopeKeeperTestSuite) TestValidateWriteScope() { }, }, Denom: "testcoin", - Supply: sdk.NewInt(1000), + Supply: sdkmath.NewInt(1000), MarkerType: markertypes.MarkerType_Coin, Status: markertypes.StatusActive, }) @@ -1057,7 +1058,7 @@ func (s *ScopeKeeperTestSuite) TestValidateDeleteScope() { }, }, Denom: markerDenom, - Supply: sdk.NewInt(1000), + Supply: sdkmath.NewInt(1000), MarkerType: markertypes.MarkerType_Coin, Status: markertypes.StatusActive, }) diff --git a/x/metadata/keeper/session.go b/x/metadata/keeper/session.go index be7d6fc5eb..5ebb0c44a1 100644 --- a/x/metadata/keeper/session.go +++ b/x/metadata/keeper/session.go @@ -6,6 +6,8 @@ import ( "github.com/gogo/protobuf/proto" + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/provenance-io/provenance/x/metadata/types" @@ -89,7 +91,7 @@ func (k Keeper) IterateSessions(ctx sdk.Context, scopeID types.MetadataAddress, if err != nil { return err } - it := sdk.KVStorePrefixIterator(store, prefix) + it := storetypes.KVStorePrefixIterator(store, prefix) defer it.Close() for ; it.Valid(); it.Next() { var session types.Session diff --git a/x/metadata/keeper/session_test.go b/x/metadata/keeper/session_test.go index 690882678b..c0f49e5f89 100644 --- a/x/metadata/keeper/session_test.go +++ b/x/metadata/keeper/session_test.go @@ -6,18 +6,16 @@ import ( "time" "github.com/google/uuid" - - simapp "github.com/provenance-io/provenance/app" - "github.com/provenance-io/provenance/x/metadata/keeper" - "github.com/provenance-io/provenance/x/metadata/types" + "github.com/stretchr/testify/suite" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - "github.com/stretchr/testify/suite" + simapp "github.com/provenance-io/provenance/app" + "github.com/provenance-io/provenance/x/metadata/keeper" + "github.com/provenance-io/provenance/x/metadata/types" ) type SessionKeeperTestSuite struct { @@ -87,7 +85,7 @@ func (s *SessionKeeperTestSuite) SetupTest() { } func (s *SessionKeeperTestSuite) FreshCtx() sdk.Context { - return keeper.AddAuthzCacheToContext(s.app.BaseApp.NewContext(false, tmproto.Header{})) + return keeper.AddAuthzCacheToContext(s.app.BaseApp.NewContext(false)) } func TestSessionKeeperTestSuite(t *testing.T) { diff --git a/x/metadata/keeper/signers_test.go b/x/metadata/keeper/signers_test.go index a2683e9dc7..abebcdce2c 100644 --- a/x/metadata/keeper/signers_test.go +++ b/x/metadata/keeper/signers_test.go @@ -12,14 +12,16 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" + + sdkmath "cosmossdk.io/math" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "github.com/cosmos/cosmos-sdk/x/authz" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" simapp "github.com/provenance-io/provenance/app" "github.com/provenance-io/provenance/internal/pioconfig" @@ -68,7 +70,7 @@ func (s *AuthzTestSuite) SetupTest() { } func (s *AuthzTestSuite) FreshCtx() sdk.Context { - return keeper.AddAuthzCacheToContext(s.app.BaseApp.NewContext(false, tmproto.Header{Time: time.Now()})) + return keeper.AddAuthzCacheToContext(s.app.BaseApp.NewContextLegacy(false, cmtproto.Header{Time: time.Now()})) } // AssertErrorValue asserts that: @@ -754,32 +756,36 @@ func (s *AuthzTestSuite) TestValidateAllRequiredPartiesSigned_CountAuthorization }.Real(), } - msg := &types.MsgDeleteScopeRequest{Signers: []string{accStr(signer)}} - msgTypeURL := types.TypeURLMsgDeleteScopeRequest + // TODO[1760]: count-authz: Uncomment the rest of this test once we have that back in the SDK. + _, _, _, _ = reqParties, availableParties, reqRoles, expDetails + /* + msg := &types.MsgDeleteScopeRequest{Signers: []string{accStr(signer)}} + msgTypeURL := types.TypeURLMsgDeleteScopeRequest - ctx := s.FreshCtx() + ctx := s.FreshCtx() - // first grant: signer can sign for party1 one time. - auth1 := authz.NewCountAuthorization(msgTypeURL, 1) - err := s.app.AuthzKeeper.SaveGrant(ctx, acc(signer), acc(party1), auth1, nil) - s.Require().NoError(err, "SaveGrant signer can sign for party1: 1 use") + // first grant: signer can sign for party1 one time. + auth1 := authz.NewCountAuthorization(msgTypeURL, 1) + err := s.app.AuthzKeeper.SaveGrant(ctx, acc(signer), acc(party1), auth1, nil) + s.Require().NoError(err, "SaveGrant signer can sign for party1: 1 use") - // second grant: signer can sign for party2 two times. - auth2 := authz.NewCountAuthorization(msgTypeURL, 2) - err = s.app.AuthzKeeper.SaveGrant(ctx, acc(signer), acc(party2), auth2, nil) - s.Require().NoError(err, "SaveGrant signer can sign for party2: 2 uses") + // second grant: signer can sign for party2 two times. + auth2 := authz.NewCountAuthorization(msgTypeURL, 2) + err = s.app.AuthzKeeper.SaveGrant(ctx, acc(signer), acc(party2), auth2, nil) + s.Require().NoError(err, "SaveGrant signer can sign for party2: 2 uses") - details, err := s.app.MetadataKeeper.ValidateAllRequiredPartiesSigned(ctx, reqParties, availableParties, reqRoles, msg) - s.Require().NoError(err, "ValidateSignersWithParties error") - s.Assert().Equal(expDetails, details, "ValidateSignersWithParties party details") + details, err := s.app.MetadataKeeper.ValidateAllRequiredPartiesSigned(ctx, reqParties, availableParties, reqRoles, msg) + s.Require().NoError(err, "ValidateSignersWithParties error") + s.Assert().Equal(expDetails, details, "ValidateSignersWithParties party details") - auth1Final, _ := s.app.AuthzKeeper.GetAuthorization(ctx, acc(signer), acc(party1), msgTypeURL) - s.Assert().Nil(auth1Final, "GetAuthorization after only allowed use") + auth1Final, _ := s.app.AuthzKeeper.GetAuthorization(ctx, acc(signer), acc(party1), msgTypeURL) + s.Assert().Nil(auth1Final, "GetAuthorization after only allowed use") - auth2Final, _ := s.app.AuthzKeeper.GetAuthorization(ctx, acc(signer), acc(party2), msgTypeURL) - s.Assert().NotNil(auth2Final, "GetAuthorization after first of two uses") - actual := auth2Final.(*authz.CountAuthorization).AllowedAuthorizations - s.Assert().Equal(1, int(actual), "number of uses left after first of two uses") + auth2Final, _ := s.app.AuthzKeeper.GetAuthorization(ctx, acc(signer), acc(party2), msgTypeURL) + s.Assert().NotNil(auth2Final, "GetAuthorization after first of two uses") + actual := auth2Final.(*authz.CountAuthorization).AllowedAuthorizations + s.Assert().Equal(1, int(actual), "number of uses left after first of two uses") + */ } func TestAssociateSigners(t *testing.T) { @@ -4657,7 +4663,7 @@ func (s *AuthzTestSuite) TestIsWasmAccount() { AccessControl: nil, Status: markertypes.StatusActive, Denom: denom, - Supply: sdk.OneInt(), + Supply: sdkmath.OneInt(), MarkerType: markertypes.MarkerType_Coin, SupplyFixed: false, AllowGovernanceControl: false, @@ -4758,7 +4764,7 @@ func (s *AuthzTestSuite) TestValidateSmartContractSigners() { MsgType: normalMsgType, } } - smartAcc := func(addr string) authtypes.AccountI { + smartAcc := func(addr string) sdk.AccountI { return authtypes.NewBaseAccount(acc(addr), nil, 0, 0) } smartAccCall := func(addr string) *GetAccountCall { @@ -4767,7 +4773,7 @@ func (s *AuthzTestSuite) TestValidateSmartContractSigners() { Result: smartAcc(addr), } } - userAcc := func(addr string) authtypes.AccountI { + userAcc := func(addr string) sdk.AccountI { return authtypes.NewBaseAccount(acc(addr), nil, 0, 1) } userAccCall := func(addr string) *GetAccountCall { @@ -5113,7 +5119,7 @@ func (s *AuthzTestSuite) TestValidateScopeValueOwnerUpdate() { }, Status: markertypes.StatusActive, Denom: "onecoin", - Supply: sdk.OneInt(), + Supply: sdkmath.OneInt(), MarkerType: markertypes.MarkerType_RestrictedCoin, } marker1AddrAcc, marker1AddrErr := markertypes.MarkerAddress(marker1.Denom) @@ -5127,7 +5133,7 @@ func (s *AuthzTestSuite) TestValidateScopeValueOwnerUpdate() { AccessControl: marker1.AccessControl, Status: markertypes.StatusActive, Denom: "twocoin", - Supply: sdk.OneInt(), + Supply: sdkmath.OneInt(), MarkerType: markertypes.MarkerType_RestrictedCoin, } marker2AddrAcc, marker2AddrErr := markertypes.MarkerAddress(marker2.Denom) @@ -5691,7 +5697,7 @@ func (s *AuthzTestSuite) TestValidateScopeValueOwnerChangeFromExisting() { BaseAccount: authtypes.NewBaseAccount(markerAddr, nil, 0, 0), Status: markertypes.StatusActive, Denom: markerDenom, - Supply: sdk.NewInt(1000), + Supply: sdkmath.NewInt(1000), MarkerType: markertypes.MarkerType_RestrictedCoin, AccessControl: []markertypes.AccessGrant{ { @@ -5899,7 +5905,7 @@ func (s *AuthzTestSuite) TestValidateScopeValueOwnerChangeToProposed() { BaseAccount: authtypes.NewBaseAccount(markerAddr, nil, 0, 0), Status: markertypes.StatusActive, Denom: markerDenom, - Supply: sdk.NewInt(1000), + Supply: sdkmath.NewInt(1000), MarkerType: markertypes.MarkerType_RestrictedCoin, AccessControl: []markertypes.AccessGrant{ { @@ -6351,9 +6357,12 @@ func (s *AuthzTestSuite) TestValidateAllRequiredSigned_CountAuthorizations() { ctx := s.FreshCtx() msgTypeURL := sdk.MsgTypeURL(tc.msg) if tc.grantee != nil && tc.granter != nil { - a := authz.NewCountAuthorization(msgTypeURL, tc.count) - err := s.app.AuthzKeeper.SaveGrant(ctx, tc.grantee, tc.granter, a, nil) - s.Require().NoError(err, "SaveGrant") + // TODO[1760]: count-authz: Uncomment the rest of this test once we have that back in the SDK. + /* + a := authz.NewCountAuthorization(msgTypeURL, tc.count) + err := s.app.AuthzKeeper.SaveGrant(ctx, tc.grantee, tc.granter, a, nil) + s.Require().NoError(err, "SaveGrant") + */ } _, err := s.app.MetadataKeeper.ValidateAllRequiredSigned(ctx, tc.owners, tc.msg) @@ -6366,53 +6375,59 @@ func (s *AuthzTestSuite) TestValidateAllRequiredSigned_CountAuthorizations() { // authorization is deleted after one use s.Assert().Nil(auth, "GetAuthorization after only allowed use") } else { - actual := auth.(*authz.CountAuthorization).AllowedAuthorizations - s.Assert().Equal(tc.count-1, actual, "uses left on authorization") + // TODO[1760]: count-authz: Uncomment the rest of this test once we have that back in the SDK. + /* + actual := auth.(*authz.CountAuthorization).AllowedAuthorizations + s.Assert().Equal(tc.count-1, actual, "uses left on authorization") + */ } } }) } s.Run("ensure authorizations are updated", func() { - ctx := s.FreshCtx() - // Two owners (1 & 2), and one signer (3), - // Two authz count authorization - // - count grants: - // granter: 1, grantee: 3, count: 1 - // granter: 2, grantee: 3, count: 2 - // Require signatures from 1 and 2, but sign with 3. - // Ensure both authorizations are applied and updated. - - msg := &types.MsgDeleteScopeRequest{} - msgTypeUrl := sdk.MsgTypeURL(msg) - - // first grant: 3 can sign for 1 one time. - a := authz.NewCountAuthorization(msgTypeUrl, 1) - err := s.app.AuthzKeeper.SaveGrant(ctx, s.user3Addr, s.user1Addr, a, nil) - s.Assert().NoError(err, "SaveGrant 1 -> 3, 1 use") - - // second grant: 3 can sign for 2 two times. - a = authz.NewCountAuthorization(msgTypeUrl, 2) - err = s.app.AuthzKeeper.SaveGrant(ctx, s.user3Addr, s.user2Addr, a, nil) - s.Assert().NoError(err, "SaveGrant 2 -> 3, 2 uses") - - // two owners (1 & 2), and one signer (3) - owners := []string{s.user1, s.user2} - msg.Signers = []string{s.user3} - - // Validate signatures. This should also use both count authorizations. - _, err = s.app.MetadataKeeper.ValidateAllRequiredSigned(ctx, owners, msg) - s.Assert().NoError(err, "ValidateSignersWithoutParties") - - // first grant should be deleted because it used its last use. - auth, _ := s.app.AuthzKeeper.GetAuthorization(ctx, s.user3Addr, s.user1Addr, msgTypeUrl) - s.Assert().Nil(auth, "GetAuthorization 1 -> 3 after only allowed use") - - // second grant should still exist, but only have one use left. - auth, _ = s.app.AuthzKeeper.GetAuthorization(ctx, s.user3Addr, s.user2Addr, msgTypeUrl) - s.Assert().NotNil(auth, "GetAuthorization 2 -> 3 after one use") - actual := auth.(*authz.CountAuthorization).AllowedAuthorizations - s.Assert().Equal(1, int(actual), "number of uses left on 2 -> 3 authorization") + // TODO[1760]: count-authz: Uncomment the rest of this test once we have that back in the SDK. + /* + ctx := s.FreshCtx() + // Two owners (1 & 2), and one signer (3), + // Two authz count authorization + // - count grants: + // granter: 1, grantee: 3, count: 1 + // granter: 2, grantee: 3, count: 2 + // Require signatures from 1 and 2, but sign with 3. + // Ensure both authorizations are applied and updated. + + msg := &types.MsgDeleteScopeRequest{} + msgTypeUrl := sdk.MsgTypeURL(msg) + + // first grant: 3 can sign for 1 one time. + a := authz.NewCountAuthorization(msgTypeUrl, 1) + err := s.app.AuthzKeeper.SaveGrant(ctx, s.user3Addr, s.user1Addr, a, nil) + s.Assert().NoError(err, "SaveGrant 1 -> 3, 1 use") + + // second grant: 3 can sign for 2 two times. + a = authz.NewCountAuthorization(msgTypeUrl, 2) + err = s.app.AuthzKeeper.SaveGrant(ctx, s.user3Addr, s.user2Addr, a, nil) + s.Assert().NoError(err, "SaveGrant 2 -> 3, 2 uses") + + // two owners (1 & 2), and one signer (3) + owners := []string{s.user1, s.user2} + msg.Signers = []string{s.user3} + + // Validate signatures. This should also use both count authorizations. + _, err = s.app.MetadataKeeper.ValidateAllRequiredSigned(ctx, owners, msg) + s.Assert().NoError(err, "ValidateSignersWithoutParties") + + // first grant should be deleted because it used its last use. + auth, _ := s.app.AuthzKeeper.GetAuthorization(ctx, s.user3Addr, s.user1Addr, msgTypeUrl) + s.Assert().Nil(auth, "GetAuthorization 1 -> 3 after only allowed use") + + // second grant should still exist, but only have one use left. + auth, _ = s.app.AuthzKeeper.GetAuthorization(ctx, s.user3Addr, s.user2Addr, msgTypeUrl) + s.Assert().NotNil(auth, "GetAuthorization 2 -> 3 after one use") + actual := auth.(*authz.CountAuthorization).AllowedAuthorizations + s.Assert().Equal(1, int(actual), "number of uses left on 2 -> 3 authorization") + */ }) } @@ -6688,7 +6703,7 @@ func (s *AuthzTestSuite) TestGetMarkerAndCheckAuthority() { }, }, Denom: "testcoin", - Supply: sdk.NewInt(1000), + Supply: sdkmath.NewInt(1000), MarkerType: markertypes.MarkerType_Coin, Status: markertypes.StatusActive, } diff --git a/x/metadata/keeper/signers_utils_test.go b/x/metadata/keeper/signers_utils_test.go index 387ef2625b..84d9411d35 100644 --- a/x/metadata/keeper/signers_utils_test.go +++ b/x/metadata/keeper/signers_utils_test.go @@ -1960,7 +1960,7 @@ func TestNewAuthzCache(t *testing.T) { func TestAuthzCache_Clear(t *testing.T) { c := keeper.NewAuthzCache() - c.AcceptableMap()["key1"] = &authz.CountAuthorization{} + // c.AcceptableMap()["key1"] = &authz.CountAuthorization{} // TODO[1760]: count-authz c.AcceptableMap()["key2"] = &authz.GenericAuthorization{} c.IsWasmMap()["key3"] = true c.IsWasmMap()["key4"] = false @@ -1972,18 +1972,21 @@ func TestAuthzCache_Clear(t *testing.T) { } func TestAuthzCache_SetAcceptable(t *testing.T) { - c := keeper.NewAuthzCache() - grantee := sdk.AccAddress("grantee") - granter := sdk.AccAddress("granter") - msgTypeURL := "msgTypeURL" - authorization := &authz.CountAuthorization{ - Msg: msgTypeURL, - AllowedAuthorizations: 77, - } + // TODO[1760]: count-authz: Uncomment the rest of this test once we have that back in the SDK. + /* + c := keeper.NewAuthzCache() + grantee := sdk.AccAddress("grantee") + granter := sdk.AccAddress("granter") + msgTypeURL := "msgTypeURL" + authorization := &authz.CountAuthorization{ + Msg: msgTypeURL, + AllowedAuthorizations: 77, + } - c.SetAcceptable(grantee, granter, msgTypeURL, authorization) - actual := c.AcceptableMap()[keeper.AuthzCacheAcceptableKey(grantee, granter, msgTypeURL)] - assert.Equal(t, authorization, actual, "the authorization stored by SetAcceptable") + c.SetAcceptable(grantee, granter, msgTypeURL, authorization) + actual := c.AcceptableMap()[keeper.AuthzCacheAcceptableKey(grantee, granter, msgTypeURL)] + assert.Equal(t, authorization, actual, "the authorization stored by SetAcceptable") + */ } func TestAuthzCache_GetAcceptable(t *testing.T) { @@ -1992,17 +1995,22 @@ func TestAuthzCache_GetAcceptable(t *testing.T) { granter := sdk.AccAddress("granter") msgTypeURL := "msgTypeURL" key := keeper.AuthzCacheAcceptableKey(grantee, granter, msgTypeURL) - authorization := &authz.CountAuthorization{ - Msg: msgTypeURL, - AllowedAuthorizations: 8, - } - c.AcceptableMap()[key] = authorization - actual := c.GetAcceptable(grantee, granter, msgTypeURL) - assert.Equal(t, authorization, actual, "GetAcceptable result") + // TODO[1760]: count-authz: Uncomment the rest of this test once we have that back in the SDK. + _, _ = c, key + /* + authorization := &authz.CountAuthorization{ + Msg: msgTypeURL, + AllowedAuthorizations: 8, + } + c.AcceptableMap()[key] = authorization + + actual := c.GetAcceptable(grantee, granter, msgTypeURL) + assert.Equal(t, authorization, actual, "GetAcceptable result") - notThere := c.GetAcceptable(granter, grantee, msgTypeURL) - assert.Nil(t, notThere, "GetAcceptable on an entry that should not exist") + notThere := c.GetAcceptable(granter, grantee, msgTypeURL) + assert.Nil(t, notThere, "GetAcceptable on an entry that should not exist") + */ } func TestAuthzCache_SetIsWasm(t *testing.T) { @@ -2127,26 +2135,30 @@ func TestAddAuthzCacheToContext(t *testing.T) { }) t.Run("context already has an AuthzCache", func(t *testing.T) { - grantee := sdk.AccAddress("grantee") - granter := sdk.AccAddress("granter") - msgTypeURL := "msgTypeURL" - authorization := &authz.CountAuthorization{ - Msg: msgTypeURL, - AllowedAuthorizations: 8, - } - origCache := keeper.NewAuthzCache() - origCache.SetAcceptable(grantee, granter, msgTypeURL, authorization) + // TODO[1760]: count-authz: Uncomment the rest of this test once we have that back in the SDK. + /* + grantee := sdk.AccAddress("grantee") + granter := sdk.AccAddress("granter") + msgTypeURL := "msgTypeURL" + authorization := &authz.CountAuthorization{ + Msg: msgTypeURL, + AllowedAuthorizations: 8, + } + origCache := keeper.NewAuthzCache() + origCache.SetAcceptable(grantee, granter, msgTypeURL, authorization) - origCtx := emptySdkContext().WithValue(keeper.AuthzCacheContextKey, origCache) - newCtx := keeper.AddAuthzCacheToContext(origCtx) + origCtx := emptySdkContext().WithValue(keeper.AuthzCacheContextKey, origCache) + newCtx := keeper.AddAuthzCacheToContext(origCtx) - var newCache *keeper.AuthzCache - testFunc := func() { - newCache = keeper.GetAuthzCache(newCtx) - } - require.NotPanics(t, testFunc, "GetAuthzCache") - assert.Same(t, origCache, newCache, "cache from new context") - assert.Empty(t, newCache.AcceptableMap(), "cache acceptable map") + var newCache *keeper.AuthzCache + testFunc := func() { + newCache = keeper.GetAuthzCache(newCtx) + } + require.NotPanics(t, testFunc, "GetAuthzCache") + assert.Same(t, origCache, newCache, "cache from new context") + assert.Empty(t, newCache.AcceptableMap(), "cache acceptable map") + + */ }) t.Run("context has something else", func(t *testing.T) { @@ -2194,10 +2206,9 @@ func TestGetAuthzCache(t *testing.T) { func TestUnwrapMetadataContext(t *testing.T) { origCtx := emptySdkContext() - goCtx := sdk.WrapSDKContext(origCtx) var ctx sdk.Context testUnwrap := func() { - ctx = keeper.UnwrapMetadataContext(goCtx) + ctx = keeper.UnwrapMetadataContext(origCtx) } require.NotPanics(t, testUnwrap, "UnwrapMetadataContext") var cache *keeper.AuthzCache diff --git a/x/metadata/keeper/specification.go b/x/metadata/keeper/specification.go index f7071037ac..92e294a730 100644 --- a/x/metadata/keeper/specification.go +++ b/x/metadata/keeper/specification.go @@ -5,6 +5,8 @@ import ( "github.com/gogo/protobuf/proto" + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/provenance-io/provenance/x/metadata/types" @@ -13,7 +15,7 @@ import ( // IterateRecordSpecs processes all record specs using a given handler. func (k Keeper) IterateRecordSpecs(ctx sdk.Context, handler func(specification types.RecordSpecification) (stop bool)) error { store := ctx.KVStore(k.storeKey) - it := sdk.KVStorePrefixIterator(store, types.RecordSpecificationKeyPrefix) + it := storetypes.KVStorePrefixIterator(store, types.RecordSpecificationKeyPrefix) defer it.Close() for ; it.Valid(); it.Next() { var recordSpec types.RecordSpecification @@ -58,7 +60,7 @@ func (k Keeper) IterateRecordSpecsForContractSpec(ctx sdk.Context, contractSpecI if err != nil { return err } - it := sdk.KVStorePrefixIterator(store, prefix) + it := storetypes.KVStorePrefixIterator(store, prefix) defer it.Close() for ; it.Valid(); it.Next() { var recordSpecID types.MetadataAddress @@ -163,7 +165,7 @@ func (k Keeper) isRecordSpecUsed(_ sdk.Context, _ types.MetadataAddress) bool { // IterateContractSpecs processes all contract specs using a given handler. func (k Keeper) IterateContractSpecs(ctx sdk.Context, handler func(specification types.ContractSpecification) (stop bool)) error { store := ctx.KVStore(k.storeKey) - it := sdk.KVStorePrefixIterator(store, types.ContractSpecificationKeyPrefix) + it := storetypes.KVStorePrefixIterator(store, types.ContractSpecificationKeyPrefix) defer it.Close() for ; it.Valid(); it.Next() { var contractSpec types.ContractSpecification @@ -182,7 +184,7 @@ func (k Keeper) IterateContractSpecs(ctx sdk.Context, handler func(specification func (k Keeper) IterateContractSpecsForOwner(ctx sdk.Context, ownerAddress sdk.AccAddress, handler func(contractSpecID types.MetadataAddress) (stop bool)) error { store := ctx.KVStore(k.storeKey) prefix := types.GetAddressContractSpecCacheIteratorPrefix(ownerAddress) - it := sdk.KVStorePrefixIterator(store, prefix) + it := storetypes.KVStorePrefixIterator(store, prefix) defer it.Close() for ; it.Valid(); it.Next() { var contractSpecID types.MetadataAddress @@ -371,7 +373,7 @@ func (k Keeper) ValidateWriteContractSpecification(_ sdk.Context, existing *type // IterateScopeSpecs processes all scope specs using a given handler. func (k Keeper) IterateScopeSpecs(ctx sdk.Context, handler func(specification types.ScopeSpecification) (stop bool)) error { store := ctx.KVStore(k.storeKey) - it := sdk.KVStorePrefixIterator(store, types.ScopeSpecificationKeyPrefix) + it := storetypes.KVStorePrefixIterator(store, types.ScopeSpecificationKeyPrefix) defer it.Close() for ; it.Valid(); it.Next() { var scopeSpec types.ScopeSpecification @@ -390,7 +392,7 @@ func (k Keeper) IterateScopeSpecs(ctx sdk.Context, handler func(specification ty func (k Keeper) IterateScopeSpecsForOwner(ctx sdk.Context, ownerAddress sdk.AccAddress, handler func(scopeSpecID types.MetadataAddress) (stop bool)) error { store := ctx.KVStore(k.storeKey) prefix := types.GetAddressScopeSpecCacheIteratorPrefix(ownerAddress) - it := sdk.KVStorePrefixIterator(store, prefix) + it := storetypes.KVStorePrefixIterator(store, prefix) defer it.Close() for ; it.Valid(); it.Next() { var scopeSpecID types.MetadataAddress @@ -408,7 +410,7 @@ func (k Keeper) IterateScopeSpecsForOwner(ctx sdk.Context, ownerAddress sdk.AccA func (k Keeper) IterateScopeSpecsForContractSpec(ctx sdk.Context, contractSpecID types.MetadataAddress, handler func(scopeSpecID types.MetadataAddress) (stop bool)) error { store := ctx.KVStore(k.storeKey) prefix := types.GetContractSpecScopeSpecCacheIteratorPrefix(contractSpecID) - it := sdk.KVStorePrefixIterator(store, prefix) + it := storetypes.KVStorePrefixIterator(store, prefix) defer it.Close() for ; it.Valid(); it.Next() { var scopeSpecID types.MetadataAddress diff --git a/x/metadata/keeper/specification_test.go b/x/metadata/keeper/specification_test.go index 28079ba163..ef2bed54d2 100644 --- a/x/metadata/keeper/specification_test.go +++ b/x/metadata/keeper/specification_test.go @@ -5,20 +5,18 @@ import ( "testing" "github.com/google/uuid" - - simapp "github.com/provenance-io/provenance/app" - "github.com/provenance-io/provenance/x/metadata/keeper" - "github.com/provenance-io/provenance/x/metadata/types" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/stretchr/testify/suite" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "github.com/stretchr/testify/suite" + simapp "github.com/provenance-io/provenance/app" + "github.com/provenance-io/provenance/x/metadata/keeper" + "github.com/provenance-io/provenance/x/metadata/types" ) type SpecKeeperTestSuite struct { @@ -74,7 +72,7 @@ func (s *SpecKeeperTestSuite) SetupTest() { } func (s *SpecKeeperTestSuite) FreshCtx() sdk.Context { - return keeper.AddAuthzCacheToContext(s.app.BaseApp.NewContext(false, tmproto.Header{})) + return keeper.AddAuthzCacheToContext(s.app.BaseApp.NewContext(false)) } func containsMetadataAddress(arr []types.MetadataAddress, newVal types.MetadataAddress) bool { diff --git a/x/metadata/module.go b/x/metadata/module.go index 8fbcc69439..f83e94887d 100644 --- a/x/metadata/module.go +++ b/x/metadata/module.go @@ -9,7 +9,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" - abci "github.com/tendermint/tendermint/abci/types" + abci "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" @@ -38,6 +38,7 @@ const StoreKey = types.StoreKey var ( _ module.AppModule = AppModule{} _ module.AppModuleBasic = AppModuleBasic{} + // TODO[1760]: app-module: Add more assertions for the new types and clean up stuff no longer needed. ) // AppModuleBasic contains non-dependent elements for the metadata module. @@ -106,30 +107,21 @@ func NewAppModule(cdc codec.Codec, keeper keeper.Keeper, accountKeeper authkeepe } } +// IsOnePerModuleType is a dummy function that satisfies the OnePerModuleType interface (needed by AppModule). +func (AppModule) IsOnePerModuleType() {} + +// IsAppModule is a dummy function that satisfies the AppModule interface. +func (AppModule) IsAppModule() {} + // Name returns the module name. func (AppModule) Name() string { return types.ModuleName } -// Route returns the message routing key for the metadata module. -func (am AppModule) Route() sdk.Route { - return sdk.NewRoute(types.RouterKey, NewHandler(am.keeper)) -} - // RegisterInvariants does not register any invariants for the metadata module func (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) { } -// QuerierRoute returns the query route for this module. -func (am AppModule) QuerierRoute() string { - return types.QuerierRoute -} - -// LegacyQuerierHandler returns no sdk.Querier. -func (am AppModule) LegacyQuerierHandler(_ *codec.LegacyAmino) sdk.Querier { - return nil -} - // RegisterServices registers module services. func (am AppModule) RegisterServices(cfg module.Configurator) { types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) @@ -150,15 +142,6 @@ func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.Raw return cdc.MustMarshalJSON(gs) } -// BeginBlock returns the begin blocker for the metadata module. -func (am AppModule) BeginBlock(_ sdk.Context, _ abci.RequestBeginBlock) {} - -// EndBlock returns the end blocker for the metadata module. It returns no validator -// updates. -func (AppModule) EndBlock(_ sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate { - return []abci.ValidatorUpdate{} -} - // ____________________________________________________________________________ // GenerateGenesisState creates a randomized GenState of the metadata module. @@ -173,12 +156,12 @@ func (am AppModule) ProposalContents(_ module.SimulationState) []simtypes.Weight } // RandomizedParams creates randomized metadata param changes for the simulator. -func (AppModule) RandomizedParams(_ *rand.Rand) []simtypes.ParamChange { - return []simtypes.ParamChange{} // simulation.ParamChanges(r) +func (AppModule) RandomizedParams(_ *rand.Rand) []simtypes.LegacyParamChange { + return nil } // RegisterStoreDecoder registers a decoder for metadata module's types -func (am AppModule) RegisterStoreDecoder(_ sdk.StoreDecoderRegistry) { +func (am AppModule) RegisterStoreDecoder(_ simtypes.StoreDecoderRegistry) { // sdr[types.StoreKey] = simulation.NewDecodeStore(am.cdc) } diff --git a/x/metadata/types/address_test.go b/x/metadata/types/address_test.go index 104ba60c90..cae9451e2a 100644 --- a/x/metadata/types/address_test.go +++ b/x/metadata/types/address_test.go @@ -558,8 +558,8 @@ func (s *AddressTestSuite) TestMetadataAddressWithInvalidData() { scopeID := ScopeMetadataAddress(s.scopeUUID) padded := make([]byte, 20) - len, err := scopeID.MarshalTo(padded) - require.EqualValues(t, 17, len) + length, err := scopeID.MarshalTo(padded) + require.EqualValues(t, 17, length) _, err = VerifyMetadataAddressFormat(padded) require.EqualValues(t, fmt.Errorf("incorrect address length (expected: %d, actual: %d)", 17, 20), err) diff --git a/x/metadata/types/codec.go b/x/metadata/types/codec.go index 0d2e3dd60a..51fcafdeb3 100644 --- a/x/metadata/types/codec.go +++ b/x/metadata/types/codec.go @@ -1,12 +1,11 @@ package types import ( - "github.com/gogo/protobuf/proto" - "github.com/cosmos/cosmos-sdk/codec" cdctypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/msgservice" + "github.com/cosmos/gogoproto/proto" ) // RegisterInterfaces registers implementations for the tx messages diff --git a/x/metadata/types/events.go b/x/metadata/types/events.go index 5a175c2462..cebcacd024 100644 --- a/x/metadata/types/events.go +++ b/x/metadata/types/events.go @@ -1,7 +1,7 @@ package types import ( - "github.com/armon/go-metrics" + "github.com/hashicorp/go-metrics" "github.com/cosmos/cosmos-sdk/telemetry" ) diff --git a/x/metadata/types/keys.go b/x/metadata/types/keys.go index 11975ee73f..1cda6e98f7 100644 --- a/x/metadata/types/keys.go +++ b/x/metadata/types/keys.go @@ -15,9 +15,6 @@ const ( // RouterKey to be used for routing msgs RouterKey = ModuleName - // QuerierRoute to be used for queries - QuerierRoute = ModuleName - // DefaultParamspace is the name used for the parameter subspace for this module. DefaultParamspace = ModuleName ) diff --git a/x/metadata/types/msg.go b/x/metadata/types/msg.go index 6d127eb7c2..05073aee49 100644 --- a/x/metadata/types/msg.go +++ b/x/metadata/types/msg.go @@ -42,6 +42,10 @@ const ( type MetadataMsg interface { sdk.Msg + // ValidateBasic runs stateless validation on a Msg. + ValidateBasic() error + // GetSigners returns the addresses of the signers of a Msg. + GetSigners() []sdk.AccAddress // GetSignerStrs returns the bech32 address(es) that signed. GetSignerStrs() []string } diff --git a/x/msgfees/client/cli/cli_test.go b/x/msgfees/client/cli/cli_test.go index 4f617cac8a..4d88677f52 100644 --- a/x/msgfees/client/cli/cli_test.go +++ b/x/msgfees/client/cli/cli_test.go @@ -90,9 +90,9 @@ func (s *IntegrationTestSuite) TestMsgFeesTxGovProposals() { typeArg: "add", title: "test add msg based fee", description: "description", - deposit: sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String(), + deposit: sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String(), msgType: "--msg-type=/provenance.metadata.v1.MsgWriteRecordRequest", - additionalFee: fmt.Sprintf("--additional-fee=%s", sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(12))).String()), + additionalFee: fmt.Sprintf("--additional-fee=%s", sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 12)).String()), recipient: "", bips: "", expectErrMsg: "", @@ -103,9 +103,9 @@ func (s *IntegrationTestSuite) TestMsgFeesTxGovProposals() { typeArg: "add", title: "test update msg based fee", description: "description", - deposit: sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String(), + deposit: sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String(), msgType: "--msg-type=/provenance.metadata.v1.MsgWriteRecordRequest", - additionalFee: fmt.Sprintf("--additional-fee=%s", sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(12))).String()), + additionalFee: fmt.Sprintf("--additional-fee=%s", sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 12)).String()), recipient: "", bips: "", expectErrMsg: "", @@ -116,9 +116,9 @@ func (s *IntegrationTestSuite) TestMsgFeesTxGovProposals() { typeArg: "add", title: "test update msg based fee", description: "description", - deposit: sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String(), + deposit: sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String(), msgType: "--msg-type=/provenance.metadata.v1.MsgWriteRecordRequest", - additionalFee: fmt.Sprintf("--additional-fee=%s", sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(12))).String()), + additionalFee: fmt.Sprintf("--additional-fee=%s", sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 12)).String()), recipient: fmt.Sprintf("--recipient=%s", s.testnet.Validators[0].Address.String()), bips: "", expectErrMsg: "", @@ -129,9 +129,9 @@ func (s *IntegrationTestSuite) TestMsgFeesTxGovProposals() { typeArg: "add", title: "test add msg based fee", description: "description", - deposit: sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String(), + deposit: sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String(), msgType: "--msg-type=invalid", - additionalFee: fmt.Sprintf("--additional-fee=%s", sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(12))).String()), + additionalFee: fmt.Sprintf("--additional-fee=%s", sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 12)).String()), recipient: "", bips: "", expectErrMsg: "unable to resolve type URL invalid", @@ -142,7 +142,7 @@ func (s *IntegrationTestSuite) TestMsgFeesTxGovProposals() { typeArg: "add", title: "test add msg based fee", description: "description", - deposit: sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String(), + deposit: sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String(), msgType: "--msg-type=/provenance.metadata.v1.MsgWriteRecordRequest", additionalFee: fmt.Sprintf("--additional-fee=%s", "blah"), recipient: "", @@ -155,9 +155,9 @@ func (s *IntegrationTestSuite) TestMsgFeesTxGovProposals() { typeArg: "update", title: "test update msg based fee", description: "description", - deposit: sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String(), + deposit: sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String(), msgType: "--msg-type=/provenance.metadata.v1.MsgWriteRecordRequest", - additionalFee: fmt.Sprintf("--additional-fee=%s", sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(12))).String()), + additionalFee: fmt.Sprintf("--additional-fee=%s", sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 12)).String()), recipient: "", bips: "", expectErrMsg: "", @@ -168,9 +168,9 @@ func (s *IntegrationTestSuite) TestMsgFeesTxGovProposals() { typeArg: "update", title: "test update msg based fee", description: "description", - deposit: sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String(), + deposit: sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String(), msgType: "--msg-type=/provenance.metadata.v1.MsgWriteRecordRequest", - additionalFee: fmt.Sprintf("--additional-fee=%s", sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(12))).String()), + additionalFee: fmt.Sprintf("--additional-fee=%s", sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 12)).String()), recipient: fmt.Sprintf("--recipient=%s", s.testnet.Validators[0].Address.String()), bips: "", expectErrMsg: "", @@ -181,9 +181,9 @@ func (s *IntegrationTestSuite) TestMsgFeesTxGovProposals() { typeArg: "update", title: "test update msg based fee", description: "description", - deposit: sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String(), + deposit: sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String(), msgType: "--msg-type=/provenance.metadata.v1.MsgWriteRecordRequest", - additionalFee: fmt.Sprintf("--additional-fee=%s", sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(12))).String()), + additionalFee: fmt.Sprintf("--additional-fee=%s", sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 12)).String()), recipient: fmt.Sprintf("--recipient=%s", s.testnet.Validators[0].Address.String()), bips: fmt.Sprintf("--bips=%s", "5001"), expectErrMsg: "", @@ -194,7 +194,7 @@ func (s *IntegrationTestSuite) TestMsgFeesTxGovProposals() { typeArg: "remove", title: "test update msg based fee", description: "description", - deposit: sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String(), + deposit: sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String(), msgType: "--msg-type=/provenance.metadata.v1.MsgWriteRecordRequest", additionalFee: "", recipient: "", @@ -213,8 +213,8 @@ func (s *IntegrationTestSuite) TestMsgFeesTxGovProposals() { args := []string{ fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), } args = append(args, tc.typeArg, tc.title, tc.description, tc.deposit, tc.msgType) @@ -255,7 +255,7 @@ func (s *IntegrationTestSuite) TestUpdateUsdConversionRateProposal() { title: "title", description: "description", rate: "10", - deposit: sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String(), + deposit: sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String(), expectErrMsg: "", expectedCode: 0, }, @@ -264,7 +264,7 @@ func (s *IntegrationTestSuite) TestUpdateUsdConversionRateProposal() { title: "title", description: "description", rate: "invalid-rate", - deposit: sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String(), + deposit: sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String(), expectErrMsg: "unable to parse nhash value: invalid-rate", expectedCode: 0, }, @@ -287,8 +287,8 @@ func (s *IntegrationTestSuite) TestUpdateUsdConversionRateProposal() { args := []string{ fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), } args = append(args, tc.name, tc.description, tc.rate, tc.deposit) @@ -319,7 +319,7 @@ func (s *IntegrationTestSuite) TestUpdateConversionFeeDenomProposal() { title: "title", description: "description", conversionFeeDenom: "jackthecat", - deposit: sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String(), + deposit: sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String(), expectErrMsg: "", expectedCode: 0, }, @@ -342,8 +342,8 @@ func (s *IntegrationTestSuite) TestUpdateConversionFeeDenomProposal() { args := []string{ fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), } args = append(args, tc.name, tc.description, tc.conversionFeeDenom, tc.deposit) diff --git a/x/msgfees/client/cli/query.go b/x/msgfees/client/cli/query.go index 7a4f2c7486..109570c330 100644 --- a/x/msgfees/client/cli/query.go +++ b/x/msgfees/client/cli/query.go @@ -42,7 +42,7 @@ func AllMsgFeesCmd() *cobra.Command { } queryClient := types.NewQueryClient(clientCtx) - pageReq, err := client.ReadPageRequestWithPageKeyDecoded(cmd.Flags()) + pageReq, err := client.ReadPageRequest(cmd.Flags()) // TODO[1760]: cli: ReadPageRequestWithPageKeyDecoded if err != nil { return err } diff --git a/x/msgfees/keeper/keeper.go b/x/msgfees/keeper/keeper.go index 01c3d7c4fa..7767603795 100644 --- a/x/msgfees/keeper/keeper.go +++ b/x/msgfees/keeper/keeper.go @@ -5,11 +5,11 @@ import ( "golang.org/x/exp/constraints" - "github.com/tendermint/tendermint/libs/log" + "cosmossdk.io/log" + storetypes "cosmossdk.io/store/types" "github.com/cosmos/cosmos-sdk/codec" cdctypes "github.com/cosmos/cosmos-sdk/codec/types" - storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" cosmosauthtypes "github.com/cosmos/cosmos-sdk/x/auth/types" @@ -22,7 +22,9 @@ import ( const StoreKey = types.ModuleName -type baseAppSimulateFunc func(txBytes []byte) (sdk.GasInfo, *sdk.Result, sdk.Context, error) +// TODO[1760]: event-history: Put this back once our version of the SDK is back in with the updated baseapp.Simulate func. +// type baseAppSimulateFunc func(txBytes []byte) (sdk.GasInfo, *sdk.Result, sdk.Context, error) +type baseAppSimulateFunc func(txBytes []byte) (sdk.GasInfo, *sdk.Result, error) // Keeper of the Additional fee store type Keeper struct { @@ -151,7 +153,7 @@ type Handler func(record types.MsgFee) (stop bool) // IterateMsgFees iterates all msg fees with the given handler function. func (k Keeper) IterateMsgFees(ctx sdk.Context, handle func(msgFees types.MsgFee) (stop bool)) error { store := ctx.KVStore(k.storeKey) - iterator := sdk.KVStorePrefixIterator(store, types.MsgFeeKeyPrefix) + iterator := storetypes.KVStorePrefixIterator(store, types.MsgFeeKeyPrefix) defer iterator.Close() for ; iterator.Valid(); iterator.Next() { @@ -215,7 +217,7 @@ func (k Keeper) ConvertDenomToHash(ctx sdk.Context, coin sdk.Coin) (sdk.Coin, er switch coin.Denom { case types.UsdDenom: nhashPerMil := int64(k.GetNhashPerUsdMil(ctx)) - amount := coin.Amount.Mul(sdk.NewInt(nhashPerMil)) + amount := coin.Amount.MulRaw(nhashPerMil) msgFeeCoin := sdk.NewInt64Coin(conversionDenom, amount.Int64()) return msgFeeCoin, nil case conversionDenom: diff --git a/x/msgfees/keeper/keeper_test.go b/x/msgfees/keeper/keeper_test.go index 800b6f8b23..9c4127b865 100644 --- a/x/msgfees/keeper/keeper_test.go +++ b/x/msgfees/keeper/keeper_test.go @@ -6,6 +6,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" + sdkmath "cosmossdk.io/math" + "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" @@ -13,8 +15,8 @@ import ( "github.com/cosmos/cosmos-sdk/x/bank/testutil" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - tmtime "github.com/tendermint/tendermint/types/time" + cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" + cmttime "github.com/cometbft/cometbft/types/time" simapp "github.com/provenance-io/provenance/app" "github.com/provenance-io/provenance/internal/pioconfig" @@ -34,9 +36,9 @@ var bankSendAuthMsgType = banktypes.SendAuthorization{}.MsgTypeURL() func (s *TestSuite) SetupTest() { app := simapp.Setup(s.T()) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) - now := tmtime.Now() - ctx = ctx.WithBlockHeader(tmproto.Header{Time: now}) + ctx := app.BaseApp.NewContext(false) + now := cmttime.Now() + ctx = ctx.WithBlockHeader(cmtproto.Header{Time: now}) queryHelper := baseapp.NewQueryServerTestHelper(ctx, app.InterfaceRegistry()) types.RegisterQueryServer(queryHelper, app.MsgFeesKeeper) queryClient := types.NewQueryClient(queryHelper) @@ -45,7 +47,7 @@ func (s *TestSuite) SetupTest() { s.app = app s.ctx = ctx s.queryClient = queryClient - s.addrs = simapp.AddTestAddrsIncremental(app, ctx, 4, sdk.NewInt(30000000)) + s.addrs = simapp.AddTestAddrsIncremental(app, ctx, 4, sdkmath.NewInt(30000000)) } func (s *TestSuite) TestKeeper() { @@ -81,25 +83,25 @@ func (s *TestSuite) TestKeeper() { func (s *TestSuite) TestConvertDenomToHash() { app, ctx, _ := s.app, s.ctx, s.addrs - usdDollar := sdk.NewCoin(types.UsdDenom, sdk.NewInt(7_000)) // $7.00 == 100hash + usdDollar := sdk.NewInt64Coin(types.UsdDenom, 7_000) // $7.00 == 100hash nhash, err := app.MsgFeesKeeper.ConvertDenomToHash(ctx, usdDollar) s.Assert().NoError(err) - s.Assert().Equal(sdk.NewCoin(pioconfig.GetProvenanceConfig().FeeDenom, sdk.NewInt(175_000_000_000)), nhash) - usdDollar = sdk.NewCoin(types.UsdDenom, sdk.NewInt(70)) // $7 == 1hash + s.Assert().Equal(sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 175_000_000_000), nhash) + usdDollar = sdk.NewInt64Coin(types.UsdDenom, 70) // $7 == 1hash nhash, err = app.MsgFeesKeeper.ConvertDenomToHash(ctx, usdDollar) s.Assert().NoError(err) - s.Assert().Equal(sdk.NewCoin(pioconfig.GetProvenanceConfig().FeeDenom, sdk.NewInt(1_750_000_000)), nhash) - usdDollar = sdk.NewCoin(types.UsdDenom, sdk.NewInt(1_000)) // $1 == 14.2hash + s.Assert().Equal(sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 1_750_000_000), nhash) + usdDollar = sdk.NewInt64Coin(types.UsdDenom, 1_000) // $1 == 14.2hash nhash, err = app.MsgFeesKeeper.ConvertDenomToHash(ctx, usdDollar) s.Assert().NoError(err) - s.Assert().Equal(sdk.NewCoin(pioconfig.GetProvenanceConfig().FeeDenom, sdk.NewInt(25_000_000_000)), nhash) + s.Assert().Equal(sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 25_000_000_000), nhash) - usdDollar = sdk.NewCoin(types.UsdDenom, sdk.NewInt(10)) + usdDollar = sdk.NewInt64Coin(types.UsdDenom, 10) nhash, err = app.MsgFeesKeeper.ConvertDenomToHash(ctx, usdDollar) s.Assert().NoError(err) - s.Assert().Equal(sdk.NewCoin(pioconfig.GetProvenanceConfig().FeeDenom, sdk.NewInt(250_000_000)), nhash) + s.Assert().Equal(sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 250_000_000), nhash) - jackTheCat := sdk.NewCoin("jackThecat", sdk.NewInt(70)) + jackTheCat := sdk.NewInt64Coin("jackThecat", 70) nhash, err = app.MsgFeesKeeper.ConvertDenomToHash(ctx, jackTheCat) s.Assert().Equal("denom not supported for conversion jackThecat: invalid type", err.Error()) s.Assert().Equal(sdk.Coin{}, nhash) @@ -131,7 +133,7 @@ func (s *TestSuite) TestDeductFeesDistributions() { s.Assert().ErrorContains(err, "spendable balance 0jackthecat is smaller than 10jackthecat: insufficient funds") // Account has enough funds to pay account, but not enough to sweep remaining coins - s.Require().NoError(testutil.FundAccount(app.BankKeeper, ctx, acct.GetAddress(), sdk.NewCoins(sdk.NewInt64Coin("jackthecat", 10))), "initial fund") + s.Require().NoError(testutil.FundAccount(ctx, app.BankKeeper, acct.GetAddress(), sdk.NewCoins(sdk.NewInt64Coin("jackthecat", 10))), "initial fund") feeDist = make(map[string]sdk.Coins) feeDist[addrs[1].String()] = sdk.NewCoins(sdk.NewInt64Coin("jackthecat", 10)) remainingCoins = sdk.NewCoins(sdk.NewInt64Coin("jackthecat", 11)) @@ -143,7 +145,7 @@ func (s *TestSuite) TestDeductFeesDistributions() { s.Assert().Equal(balances.String(), sdk.NewCoins(sdk.NewInt64Coin("jackthecat", 10), stakeCoin).String()) // Account has enough to pay funds to account and to sweep the remaining coins - s.Require().NoError(testutil.FundAccount(app.BankKeeper, ctx, acct.GetAddress(), sdk.NewCoins(sdk.NewInt64Coin("jackthecat", 11))), "followup fund") + s.Require().NoError(testutil.FundAccount(ctx, app.BankKeeper, acct.GetAddress(), sdk.NewCoins(sdk.NewInt64Coin("jackthecat", 11))), "followup fund") feeDist = make(map[string]sdk.Coins) feeDist[addrs[1].String()] = sdk.NewCoins(sdk.NewInt64Coin("jackthecat", 10)) remainingCoins = sdk.NewCoins(sdk.NewInt64Coin("jackthecat", 11)) @@ -155,7 +157,7 @@ func (s *TestSuite) TestDeductFeesDistributions() { s.Assert().Equal(balances.String(), sdk.NewCoins(sdk.NewInt64Coin("jackthecat", 20), stakeCoin).String()) // Account has enough to pay funds to account, module, and to sweep the remaining coins - s.Require().NoError(testutil.FundAccount(app.BankKeeper, ctx, acct.GetAddress(), sdk.NewCoins(sdk.NewInt64Coin("jackthecat", 21))), "final fund") + s.Require().NoError(testutil.FundAccount(ctx, app.BankKeeper, acct.GetAddress(), sdk.NewCoins(sdk.NewInt64Coin("jackthecat", 21))), "final fund") feeDist = make(map[string]sdk.Coins) feeDist[""] = sdk.NewCoins(sdk.NewInt64Coin("jackthecat", 10)) feeDist[addrs[1].String()] = sdk.NewCoins(sdk.NewInt64Coin("jackthecat", 10)) diff --git a/x/msgfees/keeper/msg_server_test.go b/x/msgfees/keeper/msg_server_test.go index 8a3b5517b0..065e33dfc9 100644 --- a/x/msgfees/keeper/msg_server_test.go +++ b/x/msgfees/keeper/msg_server_test.go @@ -4,15 +4,14 @@ import ( "testing" "time" + "github.com/stretchr/testify/suite" + "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - "github.com/stretchr/testify/suite" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - simapp "github.com/provenance-io/provenance/app" "github.com/provenance-io/provenance/x/msgfees/keeper" "github.com/provenance-io/provenance/x/msgfees/types" @@ -29,17 +28,17 @@ type MsgServerTestSuite struct { pubkey1 cryptotypes.PubKey owner1 string owner1Addr sdk.AccAddress - acct1 authtypes.AccountI + acct1 sdk.AccountI addresses []sdk.AccAddress } func (s *MsgServerTestSuite) SetupTest() { s.app = simapp.Setup(s.T()) - s.ctx = s.app.BaseApp.NewContext(true, tmproto.Header{}) + s.ctx = s.app.BaseApp.NewContext(true) s.ctx = s.ctx.WithBlockHeight(1).WithBlockTime(time.Now()) s.msgServer = keeper.NewMsgServerImpl(s.app.MsgFeesKeeper) - s.app.AccountKeeper.SetParams(s.ctx, authtypes.DefaultParams()) + s.app.AccountKeeper.Params.Set(s.ctx, authtypes.DefaultParams()) s.app.BankKeeper.SetParams(s.ctx, banktypes.DefaultParams()) s.privkey1 = secp256k1.GenPrivKey() diff --git a/x/msgfees/keeper/proposal_handler_test.go b/x/msgfees/keeper/proposal_handler_test.go index 017e5ca0c0..a5cd74371a 100644 --- a/x/msgfees/keeper/proposal_handler_test.go +++ b/x/msgfees/keeper/proposal_handler_test.go @@ -8,18 +8,16 @@ import ( "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" - "github.com/tendermint/tendermint/crypto/secp256k1" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + "github.com/cometbft/cometbft/crypto/secp256k1" sdk "github.com/cosmos/cosmos-sdk/types" govtypesv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" + provenance "github.com/provenance-io/provenance/app" "github.com/provenance-io/provenance/internal/pioconfig" metadatatypes "github.com/provenance-io/provenance/x/metadata/types" msgfeeskeeper "github.com/provenance-io/provenance/x/msgfees/keeper" msgfeestypes "github.com/provenance-io/provenance/x/msgfees/types" - - provenance "github.com/provenance-io/provenance/app" ) type IntegrationTestSuite struct { @@ -34,7 +32,7 @@ type IntegrationTestSuite struct { func (s *IntegrationTestSuite) SetupSuite() { s.app = provenance.Setup(s.T()) - s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{}) + s.ctx = s.app.BaseApp.NewContext(false) s.k = msgfeeskeeper.NewKeeper(s.app.AppCodec(), s.app.GetKey(msgfeestypes.ModuleName), s.app.GetSubspace(msgfeestypes.ModuleName), "", pioconfig.GetProvenanceConfig().FeeDenom, nil, nil, s.app.InterfaceRegistry()) s.accountAddr = sdk.AccAddress(secp256k1.GenPrivKey().PubKey().Address()) } @@ -54,32 +52,32 @@ func (s *IntegrationTestSuite) TestMsgFeeProposals() { }{ { "add msgfees - valid", - msgfeestypes.NewAddMsgFeeProposal("title add", "description", sdk.MsgTypeURL(writeRecordRequest), sdk.NewCoin("hotdog", sdk.NewInt(10)), "", ""), + msgfeestypes.NewAddMsgFeeProposal("title add", "description", sdk.MsgTypeURL(writeRecordRequest), sdk.NewInt64Coin("hotdog", 10), "", ""), nil, }, { "add msgfees - invalid - cannot add when the same msgfee exists", - msgfeestypes.NewAddMsgFeeProposal("title add", "description", sdk.MsgTypeURL(writeRecordRequest), sdk.NewCoin("hotdog", sdk.NewInt(10)), "", ""), + msgfeestypes.NewAddMsgFeeProposal("title add", "description", sdk.MsgTypeURL(writeRecordRequest), sdk.NewInt64Coin("hotdog", 10), "", ""), msgfeestypes.ErrMsgFeeAlreadyExists, }, { "add msgfees - invalid - validate basic fail", - msgfeestypes.NewAddMsgFeeProposal("title add", "description", sdk.MsgTypeURL(writeScopeRequest), sdk.NewCoin("hotdog", sdk.NewInt(0)), "", ""), + msgfeestypes.NewAddMsgFeeProposal("title add", "description", sdk.MsgTypeURL(writeScopeRequest), sdk.NewInt64Coin("hotdog", 0), "", ""), msgfeestypes.ErrInvalidFee, }, { "update msgfees - valid", - msgfeestypes.NewUpdateMsgFeeProposal("title update", "description", sdk.MsgTypeURL(writeRecordRequest), sdk.NewCoin("hotdog", sdk.NewInt(10)), "", ""), + msgfeestypes.NewUpdateMsgFeeProposal("title update", "description", sdk.MsgTypeURL(writeRecordRequest), sdk.NewInt64Coin("hotdog", 10), "", ""), nil, }, { "update msgfees - invalid - cannot update a non-existing msgfee", - msgfeestypes.NewUpdateMsgFeeProposal("title update", "description", sdk.MsgTypeURL(writeScopeRequest), sdk.NewCoin("hotdog", sdk.NewInt(10)), "", ""), + msgfeestypes.NewUpdateMsgFeeProposal("title update", "description", sdk.MsgTypeURL(writeScopeRequest), sdk.NewInt64Coin("hotdog", 10), "", ""), msgfeestypes.ErrMsgFeeDoesNotExist, }, { "update msgfees - invalid - validate basic fail", - msgfeestypes.NewUpdateMsgFeeProposal("title update", "description", sdk.MsgTypeURL(writeRecordRequest), sdk.NewCoin("hotdog", sdk.NewInt(0)), "", ""), + msgfeestypes.NewUpdateMsgFeeProposal("title update", "description", sdk.MsgTypeURL(writeRecordRequest), sdk.NewInt64Coin("hotdog", 0), "", ""), msgfeestypes.ErrInvalidFee, }, { diff --git a/x/msgfees/keeper/query_server.go b/x/msgfees/keeper/query_server.go index d94333e8f6..a7464eee99 100644 --- a/x/msgfees/keeper/query_server.go +++ b/x/msgfees/keeper/query_server.go @@ -2,16 +2,15 @@ package keeper import ( "context" + "errors" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "github.com/cosmos/cosmos-sdk/store/prefix" + "cosmossdk.io/store/prefix" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/types/query" - "github.com/provenance-io/provenance/internal/antewrapper" "github.com/provenance-io/provenance/x/msgfees/types" ) @@ -53,34 +52,38 @@ func (k Keeper) QueryAllMsgFees(c context.Context, req *types.QueryAllMsgFeesReq } func (k Keeper) CalculateTxFees(goCtx context.Context, request *types.CalculateTxFeesRequest) (*types.CalculateTxFeesResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) + // TODO[1760]: event-history: Put this back once our version of the SDK is back in with the updated baseapp.Simulate func. + /* + ctx := sdk.UnwrapSDKContext(goCtx) - gasInfo, _, txCtx, err := k.simulateFunc(request.TxBytes) - if err != nil { - return nil, sdkerrors.ErrInvalidRequest.Wrap(err.Error()) - } + gasInfo, _, txCtx, err := k.simulateFunc(request.TxBytes) + if err != nil { + return nil, sdkerrors.ErrInvalidRequest.Wrap(err.Error()) + } - gasMeter, err := antewrapper.GetFeeGasMeter(txCtx) - if err != nil { - return nil, err - } - // based on Carlton H's comment this is only for testing, has no real value in practical usage. - baseDenom := k.defaultFeeDenom - if request.DefaultBaseDenom != "" { - baseDenom = request.DefaultBaseDenom - } + gasMeter, err := antewrapper.GetFeeGasMeter(txCtx) + if err != nil { + return nil, err + } + // based on Carlton H's comment this is only for testing, has no real value in practical usage. + baseDenom := k.defaultFeeDenom + if request.DefaultBaseDenom != "" { + baseDenom = request.DefaultBaseDenom + } - minGasPrice := k.GetFloorGasPrice(ctx) - gasAdjustment := request.GasAdjustment - if gasAdjustment <= 0 { - gasAdjustment = 1.0 - } - gasUsed := sdk.NewInt(int64(float64(gasInfo.GasUsed) * float64(gasAdjustment))) - totalFees := gasMeter.FeeConsumed().Add(sdk.NewCoin(baseDenom, minGasPrice.Amount.Mul(gasUsed))) - - return &types.CalculateTxFeesResponse{ - AdditionalFees: gasMeter.FeeConsumed(), - TotalFees: totalFees, - EstimatedGas: gasUsed.Uint64(), - }, nil + minGasPrice := k.GetFloorGasPrice(ctx) + gasAdjustment := request.GasAdjustment + if gasAdjustment <= 0 { + gasAdjustment = 1.0 + } + gasUsed := int64(float64(gasInfo.GasUsed) * float64(gasAdjustment)) + totalFees := gasMeter.FeeConsumed().Add(sdk.NewCoin(baseDenom, minGasPrice.Amount.MulRaw(gasUsed))) + + return &types.CalculateTxFeesResponse{ + AdditionalFees: gasMeter.FeeConsumed(), + TotalFees: totalFees, + EstimatedGas: uint64(gasUsed), + }, nil + */ + return nil, errors.New("not yet updated") } diff --git a/x/msgfees/keeper/query_server_test.go b/x/msgfees/keeper/query_server_test.go index d6e351da04..d9708f7fec 100644 --- a/x/msgfees/keeper/query_server_test.go +++ b/x/msgfees/keeper/query_server_test.go @@ -6,19 +6,20 @@ import ( "github.com/stretchr/testify/suite" + sdkmath "cosmossdk.io/math" + "cosmossdk.io/x/tx/signing" + "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/testutil/network" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/tx/signing" - authsign "github.com/cosmos/cosmos-sdk/x/auth/signing" + sdksigning "github.com/cosmos/cosmos-sdk/types/tx/signing" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "github.com/cosmos/cosmos-sdk/x/authz" banktestutil "github.com/cosmos/cosmos-sdk/x/bank/testutil" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" simapp "github.com/provenance-io/provenance/app" "github.com/provenance-io/provenance/internal/pioconfig" @@ -40,13 +41,13 @@ type QueryServerTestSuite struct { pubkey1 cryptotypes.PubKey user1 string user1Addr sdk.AccAddress - acct1 authtypes.AccountI + acct1 sdk.AccountI privkey2 cryptotypes.PrivKey pubkey2 cryptotypes.PubKey user2 string user2Addr sdk.AccAddress - acct2 authtypes.AccountI + acct2 sdk.AccountI minGasPrice sdk.Coin usdConversionRate uint64 @@ -54,8 +55,8 @@ type QueryServerTestSuite struct { func (s *QueryServerTestSuite) SetupTest() { s.app = simapp.SetupQuerier(s.T()) - s.ctx = s.app.BaseApp.NewContext(true, tmproto.Header{}) - s.app.AccountKeeper.SetParams(s.ctx, authtypes.DefaultParams()) + s.ctx = s.app.BaseApp.NewContext(true) + s.app.AccountKeeper.Params.Set(s.ctx, authtypes.DefaultParams()) s.app.BankKeeper.SetParams(s.ctx, banktypes.DefaultParams()) s.cfg = testutil.DefaultTestNetworkConfig() queryHelper := baseapp.NewQueryServerTestHelper(s.ctx, s.app.InterfaceRegistry()) @@ -64,7 +65,7 @@ func (s *QueryServerTestSuite) SetupTest() { s.minGasPrice = sdk.Coin{ Denom: s.cfg.BondDenom, - Amount: sdk.NewInt(10), + Amount: sdkmath.NewInt(10), } s.usdConversionRate = 7 s.app.MsgFeesKeeper.SetParams(s.ctx, types.NewParams(s.minGasPrice, s.usdConversionRate, pioconfig.GetProvenanceConfig().FeeDenom)) @@ -84,7 +85,7 @@ func (s *QueryServerTestSuite) SetupTest() { s.acct2 = s.app.AccountKeeper.NewAccountWithAddress(s.ctx, s.user2Addr) s.app.AccountKeeper.SetAccount(s.ctx, s.acct2) s.Require().NoError(s.app.MarkerKeeper.AddMarkerAccount(s.ctx, markertypes.NewEmptyMarkerAccount("navcoin", s.acct1.GetAddress().String(), []markertypes.AccessGrant{}))) - s.Require().NoError(banktestutil.FundAccount(s.app.BankKeeper, s.ctx, s.acct1.GetAddress(), sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(100000))))) + s.Require().NoError(banktestutil.FundAccount(s.ctx, s.app.BankKeeper, s.acct1.GetAddress(), sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 100_000)))) } func TestQuerierTestSuite(t *testing.T) { @@ -92,7 +93,7 @@ func TestQuerierTestSuite(t *testing.T) { } func (s *QueryServerTestSuite) TestCalculateTxFees() { - bankSend := banktypes.NewMsgSend(s.user1Addr, s.user2Addr, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(100)))) + bankSend := banktypes.NewMsgSend(s.user1Addr, s.user2Addr, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 100))) simulateReq := s.createTxFeesRequest(s.pubkey1, s.privkey1, s.acct1, bankSend) // do send without additional fee @@ -100,63 +101,63 @@ func (s *QueryServerTestSuite) TestCalculateTxFees() { s.Assert().NoError(err) s.Assert().NotNil(response) s.Assert().True(response.AdditionalFees.Empty()) - expectedTotalFees := sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(int64(response.EstimatedGas)*s.minGasPrice.Amount.Int64()))) + expectedTotalFees := sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, s.minGasPrice.Amount.MulRaw(int64(response.EstimatedGas)))) s.Assert().Equal(expectedTotalFees.String(), response.TotalFees.String()) // do send with an additional fee - sendAddFee := sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(1)) + sendAddFee := sdk.NewInt64Coin(s.cfg.BondDenom, 1) s.Require().NoError(s.app.MsgFeesKeeper.SetMsgFee(s.ctx, types.NewMsgFee("/cosmos.bank.v1beta1.MsgSend", sendAddFee, "", types.DefaultMsgFeeBips))) response, err = s.queryClient.CalculateTxFees(s.ctx.Context(), &simulateReq) s.Assert().NoError(err) s.Assert().NotNil(response) - expectedTotalFees = response.AdditionalFees.Add(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(int64(response.EstimatedGas)*s.minGasPrice.Amount.Int64()))) + expectedTotalFees = response.AdditionalFees.Add(sdk.NewCoin(s.cfg.BondDenom, s.minGasPrice.Amount.MulRaw(int64(response.EstimatedGas)))) s.Assert().Equal(expectedTotalFees, response.TotalFees) s.Assert().Equal(sdk.NewCoins(sendAddFee), response.AdditionalFees) // do multiple sends in tx with fee - bankSend1 := banktypes.NewMsgSend(s.user1Addr, s.user2Addr, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(2)))) - bankSend2 := banktypes.NewMsgSend(s.user1Addr, s.user2Addr, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(3)))) + bankSend1 := banktypes.NewMsgSend(s.user1Addr, s.user2Addr, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 2))) + bankSend2 := banktypes.NewMsgSend(s.user1Addr, s.user2Addr, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 3))) simulateReq = s.createTxFeesRequest(s.pubkey1, s.privkey1, s.acct1, bankSend1, bankSend2) response, err = s.queryClient.CalculateTxFees(s.ctx.Context(), &simulateReq) s.Assert().NoError(err) s.Assert().NotNil(response) - expectedTotalFees = response.AdditionalFees.Add(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(int64(response.EstimatedGas)*s.minGasPrice.Amount.Int64()))) + expectedTotalFees = response.AdditionalFees.Add(sdk.NewCoin(s.cfg.BondDenom, s.minGasPrice.Amount.MulRaw(int64(response.EstimatedGas)))) s.Assert().Equal(expectedTotalFees, response.TotalFees) - s.Assert().Equal(sdk.NewCoins(sdk.NewCoin(sendAddFee.Denom, sendAddFee.Amount.Mul(sdk.NewInt(2)))), response.AdditionalFees) + s.Assert().Equal(sdk.NewCoins(sdk.NewCoin(sendAddFee.Denom, sendAddFee.Amount.MulRaw(2))), response.AdditionalFees) } func (s *QueryServerTestSuite) TestCalculateTxFeesAuthz() { server := markerkeeper.NewMsgServerImpl(s.app.MarkerKeeper) hotdogDenom := "hotdog" - _, err := server.AddMarker(sdk.WrapSDKContext(s.ctx), markertypes.NewMsgAddMarkerRequest(hotdogDenom, sdk.NewInt(100), s.user1Addr, s.user1Addr, markertypes.MarkerType_RestrictedCoin, true, true, false, []string{}, 0, 0)) + _, err := server.AddMarker(s.ctx, markertypes.NewMsgAddMarkerRequest(hotdogDenom, sdkmath.NewInt(100), s.user1Addr, s.user1Addr, markertypes.MarkerType_RestrictedCoin, true, true, false, []string{}, 0, 0)) s.Require().NoError(err) access := markertypes.AccessGrant{ Address: s.user1, Permissions: markertypes.AccessListByNames("DELETE,MINT,WITHDRAW,TRANSFER,ADMIN,BURN"), } - _, err = server.AddAccess(sdk.WrapSDKContext(s.ctx), markertypes.NewMsgAddAccessRequest(hotdogDenom, s.user1Addr, access)) + _, err = server.AddAccess(s.ctx, markertypes.NewMsgAddAccessRequest(hotdogDenom, s.user1Addr, access)) s.Require().NoError(err) - _, err = server.Finalize(sdk.WrapSDKContext(s.ctx), markertypes.NewMsgFinalizeRequest(hotdogDenom, s.user1Addr)) + _, err = server.Finalize(s.ctx, markertypes.NewMsgFinalizeRequest(hotdogDenom, s.user1Addr)) s.Require().NoError(err) - _, err = server.Activate(sdk.WrapSDKContext(s.ctx), markertypes.NewMsgActivateRequest(hotdogDenom, s.user1Addr)) + _, err = server.Activate(s.ctx, markertypes.NewMsgActivateRequest(hotdogDenom, s.user1Addr)) s.Require().NoError(err) - _, err = server.Mint(sdk.WrapSDKContext(s.ctx), markertypes.NewMsgMintRequest(s.user1Addr, sdk.NewCoin(hotdogDenom, sdk.NewInt(1000)))) + _, err = server.Mint(s.ctx, markertypes.NewMsgMintRequest(s.user1Addr, sdk.NewInt64Coin(hotdogDenom, 1000))) s.Require().NoError(err) - _, err = server.Withdraw(sdk.WrapSDKContext(s.ctx), markertypes.NewMsgWithdrawRequest(s.user1Addr, s.user1Addr, hotdogDenom, sdk.NewCoins(sdk.NewCoin(hotdogDenom, sdk.NewInt(10))))) + _, err = server.Withdraw(s.ctx, markertypes.NewMsgWithdrawRequest(s.user1Addr, s.user1Addr, hotdogDenom, sdk.NewCoins(sdk.NewInt64Coin(hotdogDenom, 10)))) s.Require().NoError(err) msgGrant := &authz.MsgGrant{ Granter: s.user1, Grantee: s.user2, Grant: authz.Grant{}, } - err = msgGrant.SetAuthorization(markertypes.NewMarkerTransferAuthorization(sdk.NewCoins(sdk.NewCoin(hotdogDenom, sdk.NewInt(10))), []sdk.AccAddress{s.user1Addr})) + err = msgGrant.SetAuthorization(markertypes.NewMarkerTransferAuthorization(sdk.NewCoins(sdk.NewInt64Coin(hotdogDenom, 10)), []sdk.AccAddress{s.user1Addr})) s.Require().NoError(err) - _, err = s.app.AuthzKeeper.Grant(sdk.WrapSDKContext(s.ctx), msgGrant) + _, err = s.app.AuthzKeeper.Grant(s.ctx, msgGrant) s.Require().NoError(err) - transferRequest := markertypes.NewMsgTransferRequest(s.user1Addr, s.user1Addr, s.user2Addr, sdk.NewCoin(hotdogDenom, sdk.NewInt(9))) + transferRequest := markertypes.NewMsgTransferRequest(s.user1Addr, s.user1Addr, s.user2Addr, sdk.NewInt64Coin(hotdogDenom, 9)) simulateReq := s.createTxFeesRequest(s.pubkey2, s.privkey2, s.acct2, transferRequest) response, err := s.queryClient.CalculateTxFees(s.ctx.Context(), &simulateReq) s.Assert().NoError(err) @@ -174,7 +175,7 @@ func (s *QueryServerTestSuite) TestCalculateTxFeesWithAssessCustomFees() { s.Assert().NoError(err) s.Assert().NotNil(response) s.Assert().Equal(sdk.NewCoins(additionalAccessedFeesCoin), response.AdditionalFees) - expectedGasFees := sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(int64(response.EstimatedGas)*s.minGasPrice.Amount.Int64()))) + expectedGasFees := sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, s.minGasPrice.Amount.MulRaw(int64(response.EstimatedGas)))) s.Assert().Equal(fmt.Sprintf("%s,%s", additionalAccessedFeesCoin.String(), expectedGasFees.String()), response.TotalFees.String()) // do assessCustomFee where custom fee has a message fee associated with it @@ -185,11 +186,11 @@ func (s *QueryServerTestSuite) TestCalculateTxFeesWithAssessCustomFees() { s.Assert().NotNil(response) additionalAccessedFeesCoin = sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 200) s.Assert().Equal(sdk.NewCoins(additionalAccessedFeesCoin), response.AdditionalFees) - expectedGasFees = sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(int64(response.EstimatedGas)*s.minGasPrice.Amount.Int64()))) + expectedGasFees = sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, s.minGasPrice.Amount.MulRaw(int64(response.EstimatedGas)))) s.Assert().Equal(fmt.Sprintf("%s,%s", additionalAccessedFeesCoin.String(), expectedGasFees.String()), response.TotalFees.String()) } -func (s *QueryServerTestSuite) createTxFeesRequest(pubKey cryptotypes.PubKey, privKey cryptotypes.PrivKey, acct authtypes.AccountI, msgs ...sdk.Msg) types.CalculateTxFeesRequest { +func (s *QueryServerTestSuite) createTxFeesRequest(pubKey cryptotypes.PubKey, privKey cryptotypes.PrivKey, acct sdk.AccountI, msgs ...sdk.Msg) types.CalculateTxFeesRequest { theTx := s.cfg.TxConfig.NewTxBuilder() s.Require().NoError(theTx.SetMsgs(msgs...)) s.signTx(theTx, pubKey, privKey, acct) @@ -201,20 +202,21 @@ func (s *QueryServerTestSuite) createTxFeesRequest(pubKey cryptotypes.PubKey, pr } } -func (s *QueryServerTestSuite) signTx(theTx client.TxBuilder, pubKey cryptotypes.PubKey, privKey cryptotypes.PrivKey, acct authtypes.AccountI) { - accountSig := signing.SignatureV2{ +func (s *QueryServerTestSuite) signTx(theTx client.TxBuilder, pubKey cryptotypes.PubKey, privKey cryptotypes.PrivKey, acct sdk.AccountI) { + accountSig := sdksigning.SignatureV2{ PubKey: pubKey, - Data: &signing.SingleSignatureData{ - SignMode: s.cfg.TxConfig.SignModeHandler().DefaultMode(), + Data: &sdksigning.SingleSignatureData{ + SignMode: sdksigning.SignMode(s.cfg.TxConfig.SignModeHandler().DefaultMode()), }, Sequence: acct.GetSequence(), } - signerData := authsign.SignerData{ + signerData := signing.SignerData{ ChainID: s.cfg.ChainID, AccountNumber: acct.GetAccountNumber(), Sequence: acct.GetSequence(), } - signBytes, err := s.cfg.TxConfig.SignModeHandler().GetSignBytes(s.cfg.TxConfig.SignModeHandler().DefaultMode(), signerData, theTx.GetTx()) + txData := signing.TxData{} // TODO[1760]: signing: Base this off of theTx.GetTx(). + signBytes, err := s.cfg.TxConfig.SignModeHandler().GetSignBytes(s.ctx, s.cfg.TxConfig.SignModeHandler().DefaultMode(), signerData, txData) if err != nil { panic(err) } @@ -222,7 +224,7 @@ func (s *QueryServerTestSuite) signTx(theTx client.TxBuilder, pubKey cryptotypes if err != nil { panic(err) } - accountSig.Data.(*signing.SingleSignatureData).Signature = sig + accountSig.Data.(*sdksigning.SingleSignatureData).Signature = sig err = theTx.SetSignatures(accountSig) if err != nil { panic(err) diff --git a/x/msgfees/module/module.go b/x/msgfees/module/module.go index 92e837f9cf..de827fdf2b 100644 --- a/x/msgfees/module/module.go +++ b/x/msgfees/module/module.go @@ -8,7 +8,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" - abci "github.com/tendermint/tendermint/abci/types" + abci "github.com/cometbft/cometbft/abci/types" cerrs "cosmossdk.io/errors" @@ -29,6 +29,7 @@ var ( _ module.AppModule = AppModule{} _ module.AppModuleBasic = AppModuleBasic{} _ module.AppModuleSimulation = AppModule{} + // TODO[1760]: app-module: Add more assertions for the new types and clean up stuff no longer needed. ) // AppModuleBasic defines the basic application module used by the msgfee module. @@ -105,6 +106,12 @@ func NewAppModule(cdc codec.Codec, keeper keeper.Keeper, registry cdctypes.Inter } } +// IsOnePerModuleType is a dummy function that satisfies the OnePerModuleType interface (needed by AppModule). +func (AppModule) IsOnePerModuleType() {} + +// IsAppModule is a dummy function that satisfies the AppModule interface. +func (AppModule) IsAppModule() {} + // Name returns the msgfees module's name. func (AppModule) Name() string { return types.ModuleName @@ -113,19 +120,6 @@ func (AppModule) Name() string { // RegisterInvariants does nothing, there are no invariants to enforce func (AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} -// Deprecated: Route returns the message routing key for the msgfees module. -func (am AppModule) Route() sdk.Route { - return sdk.Route{} -} - -// QuerierRoute returns the route we respond to for abci queries -func (AppModule) QuerierRoute() string { return "" } - -// LegacyQuerierHandler returns the msgfees module sdk.Querier. -func (am AppModule) LegacyQuerierHandler(_ *codec.LegacyAmino) sdk.Querier { - return nil -} - // InitGenesis performs genesis initialization for the msgfees module. It returns // no validator updates. func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) []abci.ValidatorUpdate { @@ -145,13 +139,6 @@ func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.Raw // ConsensusVersion implements AppModule/ConsensusVersion. func (AppModule) ConsensusVersion() uint64 { return 1 } -func (am AppModule) BeginBlock(_ sdk.Context, _ abci.RequestBeginBlock) {} - -// EndBlock does nothing -func (am AppModule) EndBlock(_ sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate { - return []abci.ValidatorUpdate{} -} - // ____________________________________________________________________________ // AppModuleSimulation functions @@ -168,12 +155,12 @@ func (am AppModule) ProposalContents(_ module.SimulationState) []simtypes.Weight } // RandomizedParams creates randomized msgfees param changes for the simulator. -func (AppModule) RandomizedParams(r *rand.Rand) []simtypes.ParamChange { +func (AppModule) RandomizedParams(r *rand.Rand) []simtypes.LegacyParamChange { return simulation.ParamChanges(r) } // RegisterStoreDecoder registers a decoder for msgfees module's types -func (am AppModule) RegisterStoreDecoder(sdr sdk.StoreDecoderRegistry) { +func (am AppModule) RegisterStoreDecoder(sdr simtypes.StoreDecoderRegistry) { sdr[keeper.StoreKey] = simulation.NewDecodeStore(am.cdc) } diff --git a/x/msgfees/simulation/genesis.go b/x/msgfees/simulation/genesis.go index 2839fb9581..99b59c762b 100644 --- a/x/msgfees/simulation/genesis.go +++ b/x/msgfees/simulation/genesis.go @@ -7,6 +7,8 @@ import ( "fmt" "math/rand" + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" @@ -28,18 +30,18 @@ func FloorMinGasPrice(r *rand.Rand) uint64 { func RandomizedGenState(simState *module.SimulationState) { var floorGasPrice uint64 simState.AppParams.GetOrGenerate( - simState.Cdc, FloorGasPrice, &floorGasPrice, simState.Rand, + FloorGasPrice, &floorGasPrice, simState.Rand, func(r *rand.Rand) { floorGasPrice = FloorMinGasPrice(r) }, ) msgFeesGenesis := types.GenesisState{ Params: types.Params{ - FloorGasPrice: sdk.Coin{Amount: sdk.NewIntFromUint64(floorGasPrice), Denom: "blah"}, + FloorGasPrice: sdk.Coin{Amount: sdkmath.NewIntFromUint64(floorGasPrice), Denom: "blah"}, }, MsgFees: []types.MsgFee{ // Adding fees for create marker with asking for a large number of stake to make sure that // the call is failed without the additional fee provided. - types.NewMsgFee(sdk.MsgTypeURL(&markertypes.MsgAddMarkerRequest{}), sdk.NewCoin("stake", sdk.NewInt(100000000000000)), "", types.DefaultMsgFeeBips), + types.NewMsgFee(sdk.MsgTypeURL(&markertypes.MsgAddMarkerRequest{}), sdk.NewInt64Coin("stake", 100_000_000_000_000), "", types.DefaultMsgFeeBips), }, } diff --git a/x/msgfees/simulation/genesis_test.go b/x/msgfees/simulation/genesis_test.go index 5356ab723e..a96545c71d 100644 --- a/x/msgfees/simulation/genesis_test.go +++ b/x/msgfees/simulation/genesis_test.go @@ -5,9 +5,10 @@ import ( "math/rand" "testing" + sdkmath "cosmossdk.io/math" + "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" "github.com/stretchr/testify/require" @@ -29,7 +30,7 @@ func TestRandomizedGenState(t *testing.T) { Rand: r, NumBonded: 3, Accounts: simtypes.RandomAccounts(r, 3), - InitialStake: sdk.NewInt(1000), + InitialStake: sdkmath.NewInt(1000), GenState: make(map[string]json.RawMessage), } diff --git a/x/msgfees/simulation/params.go b/x/msgfees/simulation/params.go index 0a65a137b1..cdd5d2838a 100644 --- a/x/msgfees/simulation/params.go +++ b/x/msgfees/simulation/params.go @@ -6,6 +6,8 @@ import ( "encoding/json" "math/rand" + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" "github.com/cosmos/cosmos-sdk/x/simulation" @@ -19,13 +21,13 @@ const ( // ParamChanges defines the parameters that can be modified by param change proposals // on the simulation -func ParamChanges(_ *rand.Rand) []simtypes.ParamChange { - return []simtypes.ParamChange{ - simulation.NewSimParamChange(types.ModuleName, keyFloorGasPrice, +func ParamChanges(_ *rand.Rand) []simtypes.LegacyParamChange { + return []simtypes.LegacyParamChange{ + simulation.NewSimLegacyParamChange(types.ModuleName, keyFloorGasPrice, func(r *rand.Rand) string { jsonResp, err := json.Marshal(sdk.Coin{ Denom: "stake", - Amount: sdk.NewIntFromUint64(FloorMinGasPrice(r)), + Amount: sdkmath.NewIntFromUint64(FloorMinGasPrice(r)), }) if err != nil { panic("Error happened in JSON marshal") diff --git a/x/msgfees/simulation/proposals.go b/x/msgfees/simulation/proposals.go index db286da0bf..9bc91c4a2c 100644 --- a/x/msgfees/simulation/proposals.go +++ b/x/msgfees/simulation/proposals.go @@ -46,7 +46,7 @@ func SimulateCreateAddMsgFeesProposal(k keeper.Keeper) simtypes.ContentSimulator simtypes.RandStringOfLength(r, 10), simtypes.RandStringOfLength(r, 100), sdk.MsgTypeURL(&attributetypes.MsgAddAttributeRequest{}), - sdk.NewCoin("hotdog", sdk.NewInt(r.Int63n(100000000))), + sdk.NewInt64Coin("hotdog", r.Int63n(100_000_000)), "", "", ) @@ -55,7 +55,7 @@ func SimulateCreateAddMsgFeesProposal(k keeper.Keeper) simtypes.ContentSimulator simtypes.RandStringOfLength(r, 10), simtypes.RandStringOfLength(r, 100), sdk.MsgTypeURL(&attributetypes.MsgAddAttributeRequest{}), - sdk.NewCoin("hotdog", sdk.NewInt(r.Int63n(100000000))), + sdk.NewInt64Coin("hotdog", r.Int63n(100_000_000)), "", "", ) diff --git a/x/msgfees/simulation/proposals_test.go b/x/msgfees/simulation/proposals_test.go index b7aa036af3..830fddb800 100644 --- a/x/msgfees/simulation/proposals_test.go +++ b/x/msgfees/simulation/proposals_test.go @@ -4,23 +4,21 @@ import ( "math/rand" "testing" - "github.com/provenance-io/provenance/internal/pioconfig" - "github.com/provenance-io/provenance/x/msgfees/keeper" - "github.com/provenance-io/provenance/x/msgfees/simulation" - "github.com/provenance-io/provenance/x/msgfees/types" - "github.com/stretchr/testify/require" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" simapp "github.com/provenance-io/provenance/app" simappparams "github.com/provenance-io/provenance/app/params" + "github.com/provenance-io/provenance/internal/pioconfig" + "github.com/provenance-io/provenance/x/msgfees/keeper" + "github.com/provenance-io/provenance/x/msgfees/simulation" + "github.com/provenance-io/provenance/x/msgfees/types" ) func TestProposalContents(t *testing.T) { app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) // initialize parameters s := rand.NewSource(1) diff --git a/x/msgfees/types/codec.go b/x/msgfees/types/codec.go index 59ae05c9b0..89bc32f0ed 100644 --- a/x/msgfees/types/codec.go +++ b/x/msgfees/types/codec.go @@ -1,12 +1,11 @@ package types import ( - proto "github.com/gogo/protobuf/proto" - "github.com/cosmos/cosmos-sdk/codec" cdctypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" govtypesv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" + "github.com/cosmos/gogoproto/proto" ) // ignoring RegisterLegacyAminoCodec registers all the necessary types and interfaces for the diff --git a/x/msgfees/types/events_test.go b/x/msgfees/types/events_test.go index 8fbe380ddc..804d0d6f6a 100644 --- a/x/msgfees/types/events_test.go +++ b/x/msgfees/types/events_test.go @@ -16,9 +16,9 @@ func TestNewEventMsgs(t *testing.T) { assert.Equal(t, 0, len(events.MsgFees)) totalCalls["msgfee_typeurl_z"] = 612 - totalFees["msgfee_typeurl_z"] = sdk.NewCoins(sdk.NewCoin("jackthecat", sdk.NewInt(1000))) + totalFees["msgfee_typeurl_z"] = sdk.NewCoins(sdk.NewInt64Coin("jackthecat", 1000)) totalCalls["msgfee_typeurl_a"] = 406 - totalFees["msgfee_typeurl_a"] = sdk.NewCoins(sdk.NewCoin("jackthecat", sdk.NewInt(5000))) + totalFees["msgfee_typeurl_a"] = sdk.NewCoins(sdk.NewInt64Coin("jackthecat", 5000)) events = NewEventMsgs(totalCalls, totalFees) assert.Equal(t, 2, len(events.MsgFees)) @@ -29,7 +29,7 @@ func TestNewEventMsgs(t *testing.T) { assert.Equal(t, "msgfee_typeurl_z", events.MsgFees[1].MsgType) assert.Equal(t, "1000jackthecat", events.MsgFees[1].Total) - totalFees["not_in_calls_map"] = sdk.NewCoins(sdk.NewCoin("jackthecat", sdk.NewInt(1000))) + totalFees["not_in_calls_map"] = sdk.NewCoins(sdk.NewInt64Coin("jackthecat", 1000)) events = NewEventMsgs(totalCalls, totalFees) assert.Equal(t, 2, len(events.MsgFees)) diff --git a/x/msgfees/types/expected_keepers.go b/x/msgfees/types/expected_keepers.go index be3e7b4a87..ac1e55a30c 100644 --- a/x/msgfees/types/expected_keepers.go +++ b/x/msgfees/types/expected_keepers.go @@ -1,18 +1,21 @@ package types import ( + "context" + + "cosmossdk.io/x/feegrant" + sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" - "github.com/cosmos/cosmos-sdk/x/feegrant" ) // AccountKeeper defines the expected account keeper (noalias) type AccountKeeper interface { - IterateAccounts(ctx sdk.Context, process func(authtypes.AccountI) (stop bool)) - GetAccount(sdk.Context, sdk.AccAddress) authtypes.AccountI - SetAccount(sdk.Context, authtypes.AccountI) - NewAccount(sdk.Context, authtypes.AccountI) authtypes.AccountI + IterateAccounts(ctx context.Context, process func(sdk.AccountI) (stop bool)) + GetAccount(context.Context, sdk.AccAddress) sdk.AccountI + SetAccount(context.Context, sdk.AccountI) + NewAccount(context.Context, sdk.AccountI) sdk.AccountI } // MsgFeesKeeper for additional msg fees. @@ -28,6 +31,6 @@ type MsgFeesKeeper interface { // FeegrantKeeper defines the expected feegrant keeper. type FeegrantKeeper interface { - GetAllowance(ctx sdk.Context, granter sdk.AccAddress, grantee sdk.AccAddress) (feegrant.FeeAllowanceI, error) - UseGrantedFees(ctx sdk.Context, granter, grantee sdk.AccAddress, fee sdk.Coins, msgs []sdk.Msg) error + GetAllowance(ctx context.Context, granter sdk.AccAddress, grantee sdk.AccAddress) (feegrant.FeeAllowanceI, error) + UseGrantedFees(ctx context.Context, granter, grantee sdk.AccAddress, fee sdk.Coins, msgs []sdk.Msg) error } diff --git a/x/msgfees/types/fee.go b/x/msgfees/types/fee.go index 5d3a9f3e18..358e50d723 100644 --- a/x/msgfees/types/fee.go +++ b/x/msgfees/types/fee.go @@ -1,6 +1,8 @@ package types import ( + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -17,12 +19,12 @@ func SplitCoinByBips(coin sdk.Coin, bips uint32) (recipientCoin sdk.Coin, feePay // nothing to calculate if recipient gets 10_000 bips or 100%, short circuit if bips == 10_000 { recipientCoin = coin - feePayoutCoin = sdk.NewCoin(coin.Denom, sdk.NewInt(0)) + feePayoutCoin = sdk.NewInt64Coin(coin.Denom, 0) return recipientCoin, feePayoutCoin, nil } - numerator := sdk.NewDec(int64(bips)) - denominator := sdk.NewDec(10_000) - decAmount := sdk.NewDec(coin.Amount.Int64()) + numerator := sdkmath.LegacyNewDec(int64(bips)) + denominator := sdkmath.LegacyNewDec(10_000) + decAmount := sdkmath.LegacyNewDec(coin.Amount.Int64()) percentage := numerator.Quo(denominator) bipsAmount := decAmount.Mul(percentage).TruncateInt() feePayoutAmount := coin.Amount.Sub(bipsAmount) diff --git a/x/msgfees/types/keys.go b/x/msgfees/types/keys.go index f541a2eaba..e648915863 100644 --- a/x/msgfees/types/keys.go +++ b/x/msgfees/types/keys.go @@ -16,9 +16,6 @@ const ( // RouterKey is the message route for slashing RouterKey = ModuleName - // QuerierRoute defines the module's query routing key - QuerierRoute = ModuleName - // MemStoreKey defines the in-memory store key MemStoreKey = "mem_msgfees" diff --git a/x/msgfees/types/msgs_test.go b/x/msgfees/types/msgs_test.go index d23c5fd6ae..a4f47c0f95 100644 --- a/x/msgfees/types/msgs_test.go +++ b/x/msgfees/types/msgs_test.go @@ -154,7 +154,7 @@ func TestMsgAddMsgFeeProposalRequestValidateBasic(t *testing.T) { name: "Empty type error", msg: MsgAddMsgFeeProposalRequest{ MsgTypeUrl: "", - AdditionalFee: sdk.NewCoin("hotdog", sdk.NewInt(10)), + AdditionalFee: sdk.NewInt64Coin("hotdog", 10), Recipient: "", RecipientBasisPoints: "", Authority: authority, @@ -165,7 +165,7 @@ func TestMsgAddMsgFeeProposalRequestValidateBasic(t *testing.T) { name: "Invalid fee amounts", msg: MsgAddMsgFeeProposalRequest{ MsgTypeUrl: "msgType", - AdditionalFee: sdk.NewCoin("hotdog", sdk.NewInt(0)), + AdditionalFee: sdk.NewInt64Coin("hotdog", 0), Recipient: "", RecipientBasisPoints: "", Authority: authority, @@ -176,7 +176,7 @@ func TestMsgAddMsgFeeProposalRequestValidateBasic(t *testing.T) { name: "Invalid proposal recipient address", msg: MsgAddMsgFeeProposalRequest{ MsgTypeUrl: "msgType", - AdditionalFee: sdk.NewCoin("hotdog", sdk.NewInt(10)), + AdditionalFee: sdk.NewInt64Coin("hotdog", 10), Recipient: "invalid", RecipientBasisPoints: "", Authority: authority, @@ -187,7 +187,7 @@ func TestMsgAddMsgFeeProposalRequestValidateBasic(t *testing.T) { name: "Invalid proposal invalid basis points for address", msg: MsgAddMsgFeeProposalRequest{ MsgTypeUrl: "msgType", - AdditionalFee: sdk.NewCoin("hotdog", sdk.NewInt(10)), + AdditionalFee: sdk.NewInt64Coin("hotdog", 10), Recipient: "cosmos1depk54cuajgkzea6zpgkq36tnjwdzv4afc3d27", RecipientBasisPoints: "10001", Authority: authority, @@ -198,7 +198,7 @@ func TestMsgAddMsgFeeProposalRequestValidateBasic(t *testing.T) { name: "Valid proposal without recipient", msg: MsgAddMsgFeeProposalRequest{ MsgTypeUrl: "msgType", - AdditionalFee: sdk.NewCoin("hotdog", sdk.NewInt(10)), + AdditionalFee: sdk.NewInt64Coin("hotdog", 10), Recipient: "", RecipientBasisPoints: "", Authority: authority, @@ -209,7 +209,7 @@ func TestMsgAddMsgFeeProposalRequestValidateBasic(t *testing.T) { name: "Valid proposal with recipient", msg: MsgAddMsgFeeProposalRequest{ MsgTypeUrl: "msgType", - AdditionalFee: sdk.NewCoin("hotdog", sdk.NewInt(10)), + AdditionalFee: sdk.NewInt64Coin("hotdog", 10), Recipient: "cosmos1depk54cuajgkzea6zpgkq36tnjwdzv4afc3d27", RecipientBasisPoints: "10000", Authority: authority, @@ -220,7 +220,7 @@ func TestMsgAddMsgFeeProposalRequestValidateBasic(t *testing.T) { name: "Valid proposal with recipient without defined bips", msg: MsgAddMsgFeeProposalRequest{ MsgTypeUrl: "msgType", - AdditionalFee: sdk.NewCoin("hotdog", sdk.NewInt(10)), + AdditionalFee: sdk.NewInt64Coin("hotdog", 10), Recipient: "cosmos1depk54cuajgkzea6zpgkq36tnjwdzv4afc3d27", RecipientBasisPoints: "", Authority: authority, @@ -231,7 +231,7 @@ func TestMsgAddMsgFeeProposalRequestValidateBasic(t *testing.T) { name: "Valid proposal with recipient with defined bips", msg: MsgAddMsgFeeProposalRequest{ MsgTypeUrl: "msgType", - AdditionalFee: sdk.NewCoin("hotdog", sdk.NewInt(10)), + AdditionalFee: sdk.NewInt64Coin("hotdog", 10), Recipient: "cosmos1depk54cuajgkzea6zpgkq36tnjwdzv4afc3d27", RecipientBasisPoints: "10", Authority: authority, @@ -242,7 +242,7 @@ func TestMsgAddMsgFeeProposalRequestValidateBasic(t *testing.T) { name: "invalid authority", msg: MsgAddMsgFeeProposalRequest{ MsgTypeUrl: "msgType", - AdditionalFee: sdk.NewCoin("hotdog", sdk.NewInt(10)), + AdditionalFee: sdk.NewInt64Coin("hotdog", 10), Recipient: "cosmos1depk54cuajgkzea6zpgkq36tnjwdzv4afc3d27", RecipientBasisPoints: "10", Authority: "", @@ -269,7 +269,7 @@ func TestMsgAddMsgFeeProposalRequestGetSigners(t *testing.T) { authority := sdk.AccAddress("input111111111111111") msg := MsgAddMsgFeeProposalRequest{ MsgTypeUrl: "msgType", - AdditionalFee: sdk.NewCoin("hotdog", sdk.NewInt(10)), + AdditionalFee: sdk.NewInt64Coin("hotdog", 10), Recipient: "cosmos1depk54cuajgkzea6zpgkq36tnjwdzv4afc3d27", RecipientBasisPoints: "10", Authority: authority.String(), @@ -292,7 +292,7 @@ func TestMsgUpdateMsgFeeProposalRequestValidateBasic(t *testing.T) { name: "Empty type error", msg: MsgUpdateMsgFeeProposalRequest{ MsgTypeUrl: "", - AdditionalFee: sdk.NewCoin("hotdog", sdk.NewInt(10)), + AdditionalFee: sdk.NewInt64Coin("hotdog", 10), Recipient: "", RecipientBasisPoints: "", Authority: authority, @@ -303,7 +303,7 @@ func TestMsgUpdateMsgFeeProposalRequestValidateBasic(t *testing.T) { name: "Invalid fee amounts", msg: MsgUpdateMsgFeeProposalRequest{ MsgTypeUrl: msgType, - AdditionalFee: sdk.NewCoin("hotdog", sdk.NewInt(0)), + AdditionalFee: sdk.NewInt64Coin("hotdog", 0), Recipient: "", RecipientBasisPoints: "", Authority: authority, @@ -314,7 +314,7 @@ func TestMsgUpdateMsgFeeProposalRequestValidateBasic(t *testing.T) { name: "Invalid proposal recipient address", msg: MsgUpdateMsgFeeProposalRequest{ MsgTypeUrl: msgType, - AdditionalFee: sdk.NewCoin("hotdog", sdk.NewInt(10)), + AdditionalFee: sdk.NewInt64Coin("hotdog", 10), Recipient: "invalid", RecipientBasisPoints: "50", Authority: authority, @@ -325,7 +325,7 @@ func TestMsgUpdateMsgFeeProposalRequestValidateBasic(t *testing.T) { name: "Invalid proposal invalid basis points for address", msg: MsgUpdateMsgFeeProposalRequest{ MsgTypeUrl: msgType, - AdditionalFee: sdk.NewCoin("hotdog", sdk.NewInt(10)), + AdditionalFee: sdk.NewInt64Coin("hotdog", 10), Recipient: "cosmos1depk54cuajgkzea6zpgkq36tnjwdzv4afc3d27", RecipientBasisPoints: "10001", Authority: authority, @@ -336,7 +336,7 @@ func TestMsgUpdateMsgFeeProposalRequestValidateBasic(t *testing.T) { name: "Valid proposal without recipient", msg: MsgUpdateMsgFeeProposalRequest{ MsgTypeUrl: msgType, - AdditionalFee: sdk.NewCoin("hotdog", sdk.NewInt(10)), + AdditionalFee: sdk.NewInt64Coin("hotdog", 10), Recipient: "", RecipientBasisPoints: "", Authority: authority, @@ -347,7 +347,7 @@ func TestMsgUpdateMsgFeeProposalRequestValidateBasic(t *testing.T) { name: "Valid proposal with recipient without defined bips", msg: MsgUpdateMsgFeeProposalRequest{ MsgTypeUrl: msgType, - AdditionalFee: sdk.NewCoin("hotdog", sdk.NewInt(10)), + AdditionalFee: sdk.NewInt64Coin("hotdog", 10), Recipient: "cosmos1depk54cuajgkzea6zpgkq36tnjwdzv4afc3d27", RecipientBasisPoints: "", Authority: authority, @@ -358,7 +358,7 @@ func TestMsgUpdateMsgFeeProposalRequestValidateBasic(t *testing.T) { name: "Valid proposal with recipient with defined bips", msg: MsgUpdateMsgFeeProposalRequest{ MsgTypeUrl: msgType, - AdditionalFee: sdk.NewCoin("hotdog", sdk.NewInt(10)), + AdditionalFee: sdk.NewInt64Coin("hotdog", 10), Recipient: "cosmos1depk54cuajgkzea6zpgkq36tnjwdzv4afc3d27", RecipientBasisPoints: "10", Authority: authority, @@ -369,7 +369,7 @@ func TestMsgUpdateMsgFeeProposalRequestValidateBasic(t *testing.T) { name: "invalid authority", msg: MsgUpdateMsgFeeProposalRequest{ MsgTypeUrl: msgType, - AdditionalFee: sdk.NewCoin("hotdog", sdk.NewInt(10)), + AdditionalFee: sdk.NewInt64Coin("hotdog", 10), Recipient: "cosmos1depk54cuajgkzea6zpgkq36tnjwdzv4afc3d27", RecipientBasisPoints: "10", Authority: "", @@ -396,7 +396,7 @@ func TestMsgUpdateMsgFeeProposalRequestGetSigners(t *testing.T) { authority := sdk.AccAddress("input111111111111111") msg := MsgUpdateMsgFeeProposalRequest{ MsgTypeUrl: "msgType", - AdditionalFee: sdk.NewCoin("hotdog", sdk.NewInt(10)), + AdditionalFee: sdk.NewInt64Coin("hotdog", 10), Recipient: "cosmos1depk54cuajgkzea6zpgkq36tnjwdzv4afc3d27", RecipientBasisPoints: "10", Authority: authority.String(), diff --git a/x/msgfees/types/params.go b/x/msgfees/types/params.go index cd96a02364..7d4beb31ea 100644 --- a/x/msgfees/types/params.go +++ b/x/msgfees/types/params.go @@ -3,6 +3,8 @@ package types import ( "fmt" + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" @@ -13,7 +15,7 @@ import ( // cannot be a const unfortunately because it's a custom type. func DefaultFloorGasPrice() sdk.Coin { return sdk.Coin{ - Amount: sdk.NewInt(pioconfig.GetProvenanceConfig().MsgFeeFloorGasPrice), + Amount: sdkmath.NewInt(pioconfig.GetProvenanceConfig().MsgFeeFloorGasPrice), Denom: pioconfig.GetProvenanceConfig().MsgFloorDenom, } } diff --git a/x/msgfees/types/params_test.go b/x/msgfees/types/params_test.go index afcd295072..fcc0e22f43 100644 --- a/x/msgfees/types/params_test.go +++ b/x/msgfees/types/params_test.go @@ -3,6 +3,8 @@ package types import ( "testing" + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" @@ -15,11 +17,11 @@ import ( func TestCreateParams(t *testing.T) { msgFeeParam := NewParams(sdk.Coin{ Denom: "steak", - Amount: sdk.NewInt(2000), + Amount: sdkmath.NewInt(2000), }, uint64(7), pioconfig.GetProvenanceConfig().FeeDenom) assert.Equal(t, sdk.Coin{ Denom: "steak", - Amount: sdk.NewInt(2000), + Amount: sdkmath.NewInt(2000), }, msgFeeParam.FloorGasPrice) assert.Equal(t, uint64(7), msgFeeParam.NhashPerUsdMil) assert.Equal(t, "nhash", msgFeeParam.ConversionFeeDenom) @@ -29,7 +31,7 @@ func TestCreateParams(t *testing.T) { func TestCreateParamSet(t *testing.T) { msgFeeParam := NewParams(sdk.Coin{ Denom: "nhash", - Amount: sdk.NewInt(3000), + Amount: sdkmath.NewInt(3000), }, uint64(7), "nhash") paramsetPair := msgFeeParam.ParamSetPairs() require.Equal(t, 3, len(paramsetPair)) @@ -38,7 +40,7 @@ func TestCreateParamSet(t *testing.T) { func TestValidateMinGasPriceParamI(t *testing.T) { require.NoError(t, validateCoinParam(sdk.Coin{ Denom: "steak", - Amount: sdk.NewInt(2000), + Amount: sdkmath.NewInt(2000), })) } @@ -55,7 +57,7 @@ func TestMsgFeeParamKeyTable(t *testing.T) { require.Panics(t, func() { keyTable.RegisterType(paramtypes.NewParamSetPair(ParamStoreKeyFloorGasPrice, sdk.Coin{ Denom: "nhash", - Amount: sdk.NewInt(5000), + Amount: sdkmath.NewInt(5000), }, validateCoinParam)) }) require.Panics(t, func() { diff --git a/x/msgfees/types/proposals_test.go b/x/msgfees/types/proposals_test.go index 957af57022..7fcb8940b6 100644 --- a/x/msgfees/types/proposals_test.go +++ b/x/msgfees/types/proposals_test.go @@ -35,47 +35,47 @@ func (s *MsgFeesProposalTestSuite) TestAddMsgFeeProposalType() { }{ { "Empty type error", - NewAddMsgFeeProposal("title", "description", "", sdk.NewCoin("hotdog", sdk.NewInt(10)), "", ""), + NewAddMsgFeeProposal("title", "description", "", sdk.NewInt64Coin("hotdog", 10), "", ""), ErrEmptyMsgType.Error(), }, { "Invalid fee amounts", - NewAddMsgFeeProposal("title", "description", msgType, sdk.NewCoin("hotdog", sdk.NewInt(0)), "", ""), + NewAddMsgFeeProposal("title", "description", msgType, sdk.NewInt64Coin("hotdog", 0), "", ""), ErrInvalidFee.Error(), }, { "Invalid proposal details", - NewAddMsgFeeProposal("title", "", msgType, sdk.NewCoin("hotdog", sdk.NewInt(10)), "", ""), + NewAddMsgFeeProposal("title", "", msgType, sdk.NewInt64Coin("hotdog", 10), "", ""), "proposal description cannot be blank: invalid proposal content", }, { "Invalid proposal recipient address", - NewAddMsgFeeProposal("title", "", msgType, sdk.NewCoin("hotdog", sdk.NewInt(10)), "invalid", ""), + NewAddMsgFeeProposal("title", "", msgType, sdk.NewInt64Coin("hotdog", 10), "invalid", ""), "decoding bech32 failed: invalid bech32 string length 7", }, { "Invalid proposal invalid basis points for address", - NewAddMsgFeeProposal("title", "description", msgType, sdk.NewCoin("hotdog", sdk.NewInt(10)), "cosmos1depk54cuajgkzea6zpgkq36tnjwdzv4afc3d27", "10001"), + NewAddMsgFeeProposal("title", "description", msgType, sdk.NewInt64Coin("hotdog", 10), "cosmos1depk54cuajgkzea6zpgkq36tnjwdzv4afc3d27", "10001"), "recipient basis points can only be between 0 and 10,000 : 10001", }, { "Valid proposal without recipient", - NewAddMsgFeeProposal("title", "description", msgType, sdk.NewCoin("hotdog", sdk.NewInt(10)), "", ""), + NewAddMsgFeeProposal("title", "description", msgType, sdk.NewInt64Coin("hotdog", 10), "", ""), "", }, { "Valid proposal with recipient", - NewAddMsgFeeProposal("title", "description", msgType, sdk.NewCoin("hotdog", sdk.NewInt(10)), "cosmos1depk54cuajgkzea6zpgkq36tnjwdzv4afc3d27", "10000"), + NewAddMsgFeeProposal("title", "description", msgType, sdk.NewInt64Coin("hotdog", 10), "cosmos1depk54cuajgkzea6zpgkq36tnjwdzv4afc3d27", "10000"), "", }, { "Valid proposal with recipient without defined bips", - NewAddMsgFeeProposal("title", "description", msgType, sdk.NewCoin("hotdog", sdk.NewInt(10)), "cosmos1depk54cuajgkzea6zpgkq36tnjwdzv4afc3d27", ""), + NewAddMsgFeeProposal("title", "description", msgType, sdk.NewInt64Coin("hotdog", 10), "cosmos1depk54cuajgkzea6zpgkq36tnjwdzv4afc3d27", ""), "", }, { "Valid proposal with recipient with defined bips", - NewAddMsgFeeProposal("title", "description", msgType, sdk.NewCoin("hotdog", sdk.NewInt(10)), "cosmos1depk54cuajgkzea6zpgkq36tnjwdzv4afc3d27", "10"), + NewAddMsgFeeProposal("title", "description", msgType, sdk.NewInt64Coin("hotdog", 10), "cosmos1depk54cuajgkzea6zpgkq36tnjwdzv4afc3d27", "10"), "", }, } @@ -102,42 +102,42 @@ func (s *MsgFeesProposalTestSuite) TestUpdateMsgFeeProposalType() { }{ { "Empty type error", - NewUpdateMsgFeeProposal("title", "description", "", sdk.NewCoin("hotdog", sdk.NewInt(10)), "", ""), + NewUpdateMsgFeeProposal("title", "description", "", sdk.NewInt64Coin("hotdog", 10), "", ""), ErrEmptyMsgType.Error(), }, { "Invalid fee amounts", - NewUpdateMsgFeeProposal("title", "description", msgType, sdk.NewCoin("hotdog", sdk.NewInt(0)), "", ""), + NewUpdateMsgFeeProposal("title", "description", msgType, sdk.NewInt64Coin("hotdog", 0), "", ""), ErrInvalidFee.Error(), }, { "Invalid proposal details", - NewUpdateMsgFeeProposal("title", "", msgType, sdk.NewCoin("hotdog", sdk.NewInt(10)), "", ""), + NewUpdateMsgFeeProposal("title", "", msgType, sdk.NewInt64Coin("hotdog", 10), "", ""), "proposal description cannot be blank: invalid proposal content", }, { "Invalid proposal recipient address", - NewUpdateMsgFeeProposal("title", "", msgType, sdk.NewCoin("hotdog", sdk.NewInt(10)), "invalid", "50"), + NewUpdateMsgFeeProposal("title", "", msgType, sdk.NewInt64Coin("hotdog", 10), "invalid", "50"), "decoding bech32 failed: invalid bech32 string length 7", }, { "Invalid proposal invalid basis points for address", - NewUpdateMsgFeeProposal("title", "description", msgType, sdk.NewCoin("hotdog", sdk.NewInt(10)), "cosmos1depk54cuajgkzea6zpgkq36tnjwdzv4afc3d27", "10001"), + NewUpdateMsgFeeProposal("title", "description", msgType, sdk.NewInt64Coin("hotdog", 10), "cosmos1depk54cuajgkzea6zpgkq36tnjwdzv4afc3d27", "10001"), "recipient basis points can only be between 0 and 10,000 : 10001", }, { "Valid proposal without recipient", - NewUpdateMsgFeeProposal("title", "description", msgType, sdk.NewCoin("hotdog", sdk.NewInt(10)), "", ""), + NewUpdateMsgFeeProposal("title", "description", msgType, sdk.NewInt64Coin("hotdog", 10), "", ""), "", }, { "Valid proposal with recipient without defined bips", - NewUpdateMsgFeeProposal("title", "description", msgType, sdk.NewCoin("hotdog", sdk.NewInt(10)), "cosmos1depk54cuajgkzea6zpgkq36tnjwdzv4afc3d27", ""), + NewUpdateMsgFeeProposal("title", "description", msgType, sdk.NewInt64Coin("hotdog", 10), "cosmos1depk54cuajgkzea6zpgkq36tnjwdzv4afc3d27", ""), "", }, { "Valid proposal with recipient with defined bips", - NewUpdateMsgFeeProposal("title", "description", msgType, sdk.NewCoin("hotdog", sdk.NewInt(10)), "cosmos1depk54cuajgkzea6zpgkq36tnjwdzv4afc3d27", "10"), + NewUpdateMsgFeeProposal("title", "description", msgType, sdk.NewInt64Coin("hotdog", 10), "cosmos1depk54cuajgkzea6zpgkq36tnjwdzv4afc3d27", "10"), "", }, } diff --git a/x/name/client/cli/cli_test.go b/x/name/client/cli/cli_test.go index 58ea91ee49..7218b639ca 100644 --- a/x/name/client/cli/cli_test.go +++ b/x/name/client/cli/cli_test.go @@ -13,7 +13,7 @@ import ( "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" - tmcli "github.com/tendermint/tendermint/libs/cli" + cmtcli "github.com/cometbft/cometbft/libs/cli" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" @@ -196,12 +196,12 @@ func (s *IntegrationTestSuite) TestGetNameParamsCmd() { }{ { "json output", - []string{fmt.Sprintf("--%s=json", tmcli.OutputFlag)}, + []string{fmt.Sprintf("--%s=json", cmtcli.OutputFlag)}, "{\"max_segment_length\":32,\"min_segment_length\":1,\"max_name_levels\":2,\"allow_unrestricted_names\":true}", }, { "text output", - []string{fmt.Sprintf("--%s=text", tmcli.OutputFlag)}, + []string{fmt.Sprintf("--%s=text", cmtcli.OutputFlag)}, `allow_unrestricted_names: true max_name_levels: 2 max_segment_length: 32 @@ -231,17 +231,17 @@ func (s *IntegrationTestSuite) TestResolveNameCommand() { }{ { "query name, json output", - []string{"attribute", fmt.Sprintf("--%s=json", tmcli.OutputFlag)}, + []string{"attribute", fmt.Sprintf("--%s=json", cmtcli.OutputFlag)}, fmt.Sprintf("{\"address\":\"%s\",\"restricted\":false}", s.accountAddr.String()), }, { "query name, text output", - []string{"attribute", fmt.Sprintf("--%s=text", tmcli.OutputFlag)}, + []string{"attribute", fmt.Sprintf("--%s=text", cmtcli.OutputFlag)}, fmt.Sprintf("address: %s\nrestricted: false", s.accountAddr.String()), }, { "query name that does not exist, text output", - []string{"doesnotexist", fmt.Sprintf("--%s=text", tmcli.OutputFlag)}, + []string{"doesnotexist", fmt.Sprintf("--%s=text", cmtcli.OutputFlag)}, "", }, } @@ -270,22 +270,22 @@ func (s *IntegrationTestSuite) TestReverseLookupCommand() { }{ { "query name, json output", - []string{s.accountAddr.String(), fmt.Sprintf("--%s=json", tmcli.OutputFlag)}, + []string{s.accountAddr.String(), fmt.Sprintf("--%s=json", cmtcli.OutputFlag)}, "{\"name\":[\"example.attribute\",\"attribute\"],\"pagination\":{\"next_key\":null,\"total\":\"0\"}}", }, { "query name, text output", - []string{s.accountAddr.String(), fmt.Sprintf("--%s=text", tmcli.OutputFlag)}, + []string{s.accountAddr.String(), fmt.Sprintf("--%s=text", cmtcli.OutputFlag)}, "name:\n- example.attribute\n- attribute\npagination:\n next_key: null\n total: \"0\"", }, { "query name that does not exist, text output", - []string{addr.String(), fmt.Sprintf("--%s=text", tmcli.OutputFlag)}, + []string{addr.String(), fmt.Sprintf("--%s=text", cmtcli.OutputFlag)}, "name: []\npagination:\n next_key: null\n total: \"0\"", }, { "query name that does not exist, json output", - []string{addr.String(), fmt.Sprintf("--%s=json", tmcli.OutputFlag)}, + []string{addr.String(), fmt.Sprintf("--%s=json", cmtcli.OutputFlag)}, "{\"name\":[],\"pagination\":{\"next_key\":null,\"total\":\"0\"}}", }, } @@ -320,8 +320,8 @@ func (s *IntegrationTestSuite) TestGetBindNameCommand() { []string{"bindnew", s.testnet.Validators[0].Address.String(), "attribute", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, false, &sdk.TxResponse{}, 0, }, @@ -331,8 +331,8 @@ func (s *IntegrationTestSuite) TestGetBindNameCommand() { []string{"bindnew", s.testnet.Validators[0].Address.String(), "", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, true, &sdk.TxResponse{}, 1, }, @@ -342,8 +342,8 @@ func (s *IntegrationTestSuite) TestGetBindNameCommand() { []string{"bindnew", s.testnet.Validators[0].Address.String(), "dne", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, false, &sdk.TxResponse{}, 18, }, @@ -382,8 +382,8 @@ func (s *IntegrationTestSuite) TestGetDeleteNameCmd() { []string{"todelete", s.testnet.Validators[0].Address.String(), "attribute", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, false, &sdk.TxResponse{}, 0, }, @@ -393,8 +393,8 @@ func (s *IntegrationTestSuite) TestGetDeleteNameCmd() { []string{"todelete.attribute", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, false, &sdk.TxResponse{}, 0, }, @@ -404,8 +404,8 @@ func (s *IntegrationTestSuite) TestGetDeleteNameCmd() { []string{"dne", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, false, &sdk.TxResponse{}, 18, }, @@ -415,8 +415,8 @@ func (s *IntegrationTestSuite) TestGetDeleteNameCmd() { []string{"example.attribute", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, false, &sdk.TxResponse{}, 4, }, @@ -455,8 +455,8 @@ func (s *IntegrationTestSuite) TestGetModifyNameCmd() { args: []string{"tomodify", s.testnet.Validators[0].Address.String(), "attribute", fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, errMsg: "", respType: &sdk.TxResponse{}, @@ -471,8 +471,8 @@ func (s *IntegrationTestSuite) TestGetModifyNameCmd() { fmt.Sprintf("--%s=%s", namecli.FlagGovProposal, "true"), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, errMsg: "", respType: &sdk.TxResponse{}, @@ -488,8 +488,8 @@ func (s *IntegrationTestSuite) TestGetModifyNameCmd() { fmt.Sprintf("--%s=%s", govcli.FlagDeposit, "invalid"), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, errMsg: "invalid deposit: invalid decimal coin expression: invalid", respType: &sdk.TxResponse{}, @@ -503,8 +503,8 @@ func (s *IntegrationTestSuite) TestGetModifyNameCmd() { fmt.Sprintf("--%s", namecli.FlagUnrestricted), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, errMsg: "", respType: &sdk.TxResponse{}, @@ -518,8 +518,8 @@ func (s *IntegrationTestSuite) TestGetModifyNameCmd() { fmt.Sprintf("--%s", namecli.FlagUnrestricted), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, errMsg: "name cannot be empty", respType: &sdk.TxResponse{}, @@ -546,7 +546,7 @@ func (s *IntegrationTestSuite) TestGetModifyNameCmd() { } func (s *IntegrationTestSuite) TestPaginationWithPageKey() { - asJson := fmt.Sprintf("--%s=json", tmcli.OutputFlag) + asJson := fmt.Sprintf("--%s=json", cmtcli.OutputFlag) s.T().Run("ReverseLookupCommand", func(t *testing.T) { // Choosing page size = 13 because it a) isn't the default, b) doesn't evenly divide 50. @@ -617,8 +617,8 @@ func (s *IntegrationTestSuite) TestCreateRootNameCmd() { fmt.Sprintf("--%s=%s", "owner", s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, false, &sdk.TxResponse{}, 0, }, @@ -631,8 +631,8 @@ func (s *IntegrationTestSuite) TestCreateRootNameCmd() { fmt.Sprintf("--%s=%s", "owner", s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, false, &sdk.TxResponse{}, 0, }, @@ -646,8 +646,8 @@ func (s *IntegrationTestSuite) TestCreateRootNameCmd() { fmt.Sprintf("--%s=%s", "owner", s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, true, &sdk.TxResponse{}, 1, }, @@ -659,8 +659,8 @@ func (s *IntegrationTestSuite) TestCreateRootNameCmd() { fmt.Sprintf("--%s=%s%s", namecli.FlagDeposit, "10", s.cfg.BondDenom), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, true, &sdk.TxResponse{}, 1, }, @@ -672,8 +672,8 @@ func (s *IntegrationTestSuite) TestCreateRootNameCmd() { fmt.Sprintf("--%s=%s%s", namecli.FlagDeposit, "10", s.cfg.BondDenom), fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, true, &sdk.TxResponse{}, 1, }, @@ -688,8 +688,8 @@ func (s *IntegrationTestSuite) TestCreateRootNameCmd() { fmt.Sprintf("--%s=%s", flags.FlagFrom, s.testnet.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), }, true, &sdk.TxResponse{}, 1, }, diff --git a/x/name/client/cli/gov.go b/x/name/client/cli/gov.go index da9f0e4c31..df576c155b 100644 --- a/x/name/client/cli/gov.go +++ b/x/name/client/cli/gov.go @@ -95,12 +95,13 @@ $ %s tx gov submit-legacy-proposal \ Owner: proposalOwner, Restricted: !viper.GetBool(FlagUnrestricted), } - - msg, err := govtypesv1beta1.NewMsgSubmitProposal(&content, deposit, clientCtx.GetFromAddress()) + err = content.ValidateBasic() if err != nil { return err } - if err = msg.ValidateBasic(); err != nil { + + msg, err := govtypesv1beta1.NewMsgSubmitProposal(&content, deposit, clientCtx.GetFromAddress()) + if err != nil { return err } diff --git a/x/name/client/cli/query.go b/x/name/client/cli/query.go index c4a6a537ba..41374a1823 100644 --- a/x/name/client/cli/query.go +++ b/x/name/client/cli/query.go @@ -111,7 +111,7 @@ $ %[1]s query name lookup pb1skjwj5whet0lpe65qaq4rpq03hjxlwd9nf39lk --page=2 --l } queryClient := types.NewQueryClient(clientCtx) - pageReq, err := client.ReadPageRequestWithPageKeyDecoded(cmd.Flags()) + pageReq, err := client.ReadPageRequest(cmd.Flags()) // TODO[1760]: cli: ReadPageRequestWithPageKeyDecoded if err != nil { return err } diff --git a/x/name/client/cli/tx.go b/x/name/client/cli/tx.go index 4efd273189..322543391d 100644 --- a/x/name/client/cli/tx.go +++ b/x/name/client/cli/tx.go @@ -11,10 +11,10 @@ import ( "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/client/tx" sdk "github.com/cosmos/cosmos-sdk/types" - sdktx "github.com/cosmos/cosmos-sdk/types/tx" "github.com/cosmos/cosmos-sdk/version" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - govcli "github.com/cosmos/cosmos-sdk/x/gov/client/cli" + + // govcli "github.com/cosmos/cosmos-sdk/x/gov/client/cli" // TODO[1760]: gov-cli govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" "github.com/provenance-io/provenance/x/name/types" @@ -154,23 +154,24 @@ $ %s tx name modify-name \ var req sdk.Msg if isGov { - var govErr error - proposal, govErr := govcli.ReadGovPropFlags(clientCtx, cmd.Flags()) - if govErr != nil { - return govErr - } - anys, govErr := sdktx.SetMsgs([]sdk.Msg{&modifyMsg}) - if govErr != nil { - return govErr - } - proposal.Messages = anys - req = proposal + // TODO[1760]: gov-cli: Replace this with GenerateOrBroadcastTxCLIAsGovProp once its back. + /* + var govErr error + proposal, govErr := govcli.ReadGovPropFlags(clientCtx, cmd.Flags()) + if govErr != nil { + return govErr + } + anys, govErr := sdktx.SetMsgs([]sdk.Msg{&modifyMsg}) + if govErr != nil { + return govErr + } + proposal.Messages = anys + req = proposal + */ + return fmt.Errorf("not yet updated") } else { req = &modifyMsg } - if err = req.ValidateBasic(); err != nil { - return err - } return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), req) }, @@ -178,7 +179,7 @@ $ %s tx name modify-name \ cmd.Flags().BoolP(FlagUnrestricted, "u", false, "Allow child name creation by everyone") cmd.Flags().Bool(FlagGovProposal, false, "Run transaction as gov proposal") - govcli.AddGovPropFlagsToCmd(cmd) + // govcli.AddGovPropFlagsToCmd(cmd) // TODO[1760]: gov-cli flags.AddTxFlagsToCmd(cmd) return cmd } diff --git a/x/name/handler.go b/x/name/handler.go index c43cf4ce7f..c9d9febdb8 100644 --- a/x/name/handler.go +++ b/x/name/handler.go @@ -10,7 +10,8 @@ import ( ) // Returns a handler for name messages. -func NewHandler(k keeper.Keeper) sdk.Handler { +// TODO[1760]: name: Delete the name NewHandler. +func NewHandler(k keeper.Keeper) func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { msgServer := keeper.NewMsgServerImpl(k) return func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { diff --git a/x/name/handler_test.go b/x/name/handler_test.go index e4da9cdbb7..cb1ec5dbde 100644 --- a/x/name/handler_test.go +++ b/x/name/handler_test.go @@ -5,17 +5,20 @@ import ( "strings" "testing" - "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" - "github.com/cosmos/cosmos-sdk/crypto/keys/secp256r1" "github.com/golang/protobuf/proto" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" + + cerrs "cosmossdk.io/errors" + "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" + "github.com/cosmos/cosmos-sdk/crypto/keys/secp256r1" "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" simapp "github.com/provenance-io/provenance/app" "github.com/provenance-io/provenance/x/name" @@ -23,15 +26,17 @@ import ( nametypes "github.com/provenance-io/provenance/x/name/types" ) +// TODO[1760]: name: Migrate the name handler tests to the keeper. + func TestInvalidMsg(t *testing.T) { k := keeper.Keeper{} h := name.NewHandler(k) - res, err := h(sdk.NewContext(nil, tmproto.Header{}, false, nil), testdata.NewTestMsg()) + res, err := h(sdk.NewContext(nil, cmtproto.Header{}, false, nil), testdata.NewTestMsg()) require.Error(t, err) require.Nil(t, res) - _, _, log := sdkerrors.ABCIInfo(err, false) + _, _, log := cerrs.ABCIInfo(err, false) require.True(t, strings.Contains(log, "unrecognized name message type")) } @@ -80,7 +85,7 @@ func TestCreateName(t *testing.T) { } accs := authtypes.GenesisAccounts{acc1, acc2} app := simapp.SetupWithGenesisAccounts(t, "", accs) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) var nameData nametypes.GenesisState nameData.Bindings = append(nameData.Bindings, nametypes.NewNameRecord("name", addr1, false)) @@ -139,7 +144,7 @@ func TestDeleteName(t *testing.T) { } accs := authtypes.GenesisAccounts{acc1} app := simapp.SetupWithGenesisAccounts(t, "", accs) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) var nameData nametypes.GenesisState nameData.Bindings = append(nameData.Bindings, nametypes.NewNameRecord("name", addr1, false)) @@ -178,7 +183,7 @@ func TestModifyName(t *testing.T) { } accs := authtypes.GenesisAccounts{acc1} app := simapp.SetupWithGenesisAccounts(t, "", accs) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) var nameData nametypes.GenesisState nameData.Bindings = append(nameData.Bindings, nametypes.NewNameRecord("name", addr1, false)) diff --git a/x/name/keeper/keeper.go b/x/name/keeper/keeper.go index b81a2f0394..709f6f97ad 100644 --- a/x/name/keeper/keeper.go +++ b/x/name/keeper/keeper.go @@ -5,10 +5,10 @@ import ( "fmt" "strings" - "github.com/tendermint/tendermint/libs/log" + "cosmossdk.io/log" + storetypes "cosmossdk.io/store/types" "github.com/cosmos/cosmos-sdk/codec" - storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" @@ -232,7 +232,7 @@ func (k Keeper) DeleteRecord(ctx sdk.Context, name string) error { func (k Keeper) IterateRecords(ctx sdk.Context, prefix []byte, handle func(record types.NameRecord) error) error { // Init a name record iterator store := ctx.KVStore(k.storeKey) - iterator := sdk.KVStorePrefixIterator(store, prefix) + iterator := storetypes.KVStorePrefixIterator(store, prefix) defer iterator.Close() // Iterate over records, processing callbacks. for ; iterator.Valid(); iterator.Next() { @@ -325,7 +325,7 @@ func (k Keeper) DeleteInvalidAddressIndexEntries(ctx sdk.Context) { } store := ctx.KVStore(k.storeKey) - iter := sdk.KVStorePrefixIterator(store, types.AddressKeyPrefix) + iter := storetypes.KVStorePrefixIterator(store, types.AddressKeyPrefix) defer func() { if iter != nil { iter.Close() diff --git a/x/name/keeper/keeper_test.go b/x/name/keeper/keeper_test.go index 79d9f9f7c3..e0ca1ae18c 100644 --- a/x/name/keeper/keeper_test.go +++ b/x/name/keeper/keeper_test.go @@ -12,14 +12,13 @@ import ( "github.com/stretchr/testify/suite" "gopkg.in/yaml.v2" + "cosmossdk.io/log" + "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" - "github.com/cosmos/cosmos-sdk/server" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - "github.com/provenance-io/provenance/app" attrtypes "github.com/provenance-io/provenance/x/attribute/types" namekeeper "github.com/provenance-io/provenance/x/name/keeper" @@ -48,10 +47,8 @@ func TestKeeperTestSuite(t *testing.T) { } func (s *KeeperTestSuite) SetupTest() { - app := app.Setup(s.T()) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) - s.app = app - s.ctx = ctx + s.app = app.Setup(s.T()) + s.ctx = s.app.BaseApp.NewContext(false) s.pubkey1 = secp256k1.GenPrivKey().PubKey() s.user1Addr = sdk.AccAddress(s.pubkey1.Address()) s.user1 = s.user1Addr.String() @@ -68,7 +65,7 @@ func (s *KeeperTestSuite) SetupTest() { nameData.Params.MinSegmentLength = 2 nameData.Params.MaxSegmentLength = 16 - app.NameKeeper.InitGenesis(ctx, nameData) + s.app.NameKeeper.InitGenesis(s.ctx, nameData) s.app.AccountKeeper.SetAccount(s.ctx, s.app.AccountKeeper.NewAccountWithAddress(s.ctx, s.user1Addr)) s.app.AccountKeeper.SetAccount(s.ctx, s.app.AccountKeeper.NewAccountWithAddress(s.ctx, s.user2Addr)) @@ -411,7 +408,7 @@ func TestDeleteInvalidAddressIndexEntries(t *testing.T) { // b) I don't want to worry about any of the name records automatically added for the suite runs. provApp := app.Setup(t) - ctx := provApp.NewContext(false, tmproto.Header{}) + ctx := provApp.NewContext(false) getRecordNames := func(records nametypes.NameRecords) []string { rv := make([]string, len(records)) @@ -514,12 +511,12 @@ func TestDeleteInvalidAddressIndexEntries(t *testing.T) { // Error log lines will start with "ERR ". // Info log lines will start with "INF ". // Debug log lines are omitted, but would start with "DBG ". - logger := server.ZeroLogWrapper{Logger: zerolog.New(lw).Level(zerolog.InfoLevel)} + logger := log.NewCustomLogger(zerolog.New(lw).Level(zerolog.InfoLevel)) // And use a fresh event manager. em := sdk.NewEventManager() - tctx := provApp.NewContext(false, tmproto.Header{}).WithEventManager(em).WithLogger(logger) + tctx := provApp.NewContext(false).WithEventManager(em).WithLogger(logger) testFunc := func() { provApp.NameKeeper.DeleteInvalidAddressIndexEntries(tctx) } diff --git a/x/name/keeper/msg_server.go b/x/name/keeper/msg_server.go index 412da52091..d56f131692 100644 --- a/x/name/keeper/msg_server.go +++ b/x/name/keeper/msg_server.go @@ -4,7 +4,7 @@ import ( "context" "fmt" - "github.com/armon/go-metrics" + "github.com/hashicorp/go-metrics" "cosmossdk.io/errors" diff --git a/x/name/keeper/msg_server_test.go b/x/name/keeper/msg_server_test.go index 95d67ac478..5a5f3a0ef7 100644 --- a/x/name/keeper/msg_server_test.go +++ b/x/name/keeper/msg_server_test.go @@ -4,15 +4,14 @@ import ( "encoding/binary" "testing" + "github.com/stretchr/testify/suite" + "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - "github.com/stretchr/testify/suite" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - simapp "github.com/provenance-io/provenance/app" attrtypes "github.com/provenance-io/provenance/x/attribute/types" "github.com/provenance-io/provenance/x/name/keeper" @@ -30,16 +29,16 @@ type MsgServerTestSuite struct { pubkey1 cryptotypes.PubKey owner1 string owner1Addr sdk.AccAddress - acct1 authtypes.AccountI + acct1 sdk.AccountI addresses []sdk.AccAddress } func (s *MsgServerTestSuite) SetupTest() { s.app = simapp.Setup(s.T()) - s.ctx = s.app.BaseApp.NewContext(true, tmproto.Header{}) + s.ctx = s.app.BaseApp.NewContext(true) s.msgServer = keeper.NewMsgServerImpl(s.app.NameKeeper) - s.app.AccountKeeper.SetParams(s.ctx, authtypes.DefaultParams()) + s.app.AccountKeeper.Params.Set(s.ctx, authtypes.DefaultParams()) s.app.BankKeeper.SetParams(s.ctx, banktypes.DefaultParams()) s.privkey1 = secp256k1.GenPrivKey() diff --git a/x/name/keeper/proposal_handler_test.go b/x/name/keeper/proposal_handler_test.go index 38a438f310..d8c752152a 100644 --- a/x/name/keeper/proposal_handler_test.go +++ b/x/name/keeper/proposal_handler_test.go @@ -10,12 +10,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" govtypesv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" + provenance "github.com/provenance-io/provenance/app" namekeeper "github.com/provenance-io/provenance/x/name/keeper" nametypes "github.com/provenance-io/provenance/x/name/types" - - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - - provenance "github.com/provenance-io/provenance/app" ) type IntegrationTestSuite struct { @@ -30,7 +27,7 @@ type IntegrationTestSuite struct { func (s *IntegrationTestSuite) SetupSuite() { s.app = provenance.Setup(s.T()) - s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{}) + s.ctx = s.app.BaseApp.NewContext(false) s.k = namekeeper.NewKeeper(s.app.AppCodec(), s.app.GetKey(nametypes.ModuleName), s.app.GetSubspace(nametypes.ModuleName)) s.accountAddr = sdk.AccAddress(secp256k1.GenPrivKey().PubKey().Address()) s.k.SetNameRecord(s.ctx, "test.root", s.accountAddr, false) diff --git a/x/name/keeper/query_server.go b/x/name/keeper/query_server.go index 6c2ee72d06..26228c21fc 100644 --- a/x/name/keeper/query_server.go +++ b/x/name/keeper/query_server.go @@ -3,7 +3,7 @@ package keeper import ( "context" - "github.com/cosmos/cosmos-sdk/store/prefix" + "cosmossdk.io/store/prefix" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/query" diff --git a/x/name/module.go b/x/name/module.go index 7ed04471f0..dec09cd7a8 100644 --- a/x/name/module.go +++ b/x/name/module.go @@ -9,7 +9,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" - abci "github.com/tendermint/tendermint/abci/types" + abci "github.com/cometbft/cometbft/abci/types" sdkclient "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" @@ -31,6 +31,7 @@ var ( _ module.AppModule = AppModule{} _ module.AppModuleBasic = AppModuleBasic{} _ module.AppModuleSimulation = AppModule{} + // TODO[1760]: app-module: Add more assertions for the new types and clean up stuff no longer needed. ) // AppModuleBasic contains non-dependent elements for the name module. @@ -104,6 +105,12 @@ func NewAppModule( } } +// IsOnePerModuleType is a dummy function that satisfies the OnePerModuleType interface (needed by AppModule). +func (AppModule) IsOnePerModuleType() {} + +// IsAppModule is a dummy function that satisfies the AppModule interface. +func (AppModule) IsAppModule() {} + // Name returns the distribution module's name. func (AppModule) Name() string { return types.ModuleName @@ -112,21 +119,6 @@ func (AppModule) Name() string { // RegisterInvariants registers the distribution module invariants. func (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} -// Route returns the message routing key for the distribution module. -func (am AppModule) Route() sdk.Route { - return sdk.NewRoute(types.RouterKey, NewHandler(am.keeper)) -} - -// QuerierRoute returns the distribution module's querier route name. -func (AppModule) QuerierRoute() string { - return types.QuerierRoute -} - -// LegacyQuerierHandler returns the distribution module sdk.Querier. -func (am AppModule) LegacyQuerierHandler(_ *codec.LegacyAmino) sdk.Querier { - return nil -} - // RegisterServices registers module services. func (am AppModule) RegisterServices(cfg module.Configurator) { types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) @@ -149,15 +141,6 @@ func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.Raw return cdc.MustMarshalJSON(gs) } -// BeginBlock returns the begin blocker for the name module. -func (am AppModule) BeginBlock(_ sdk.Context, _ abci.RequestBeginBlock) {} - -// EndBlock returns the end blocker for the name module. It returns no validator -// updates. -func (AppModule) EndBlock(_ sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate { - return []abci.ValidatorUpdate{} -} - // ____________________________________________________________________________ // AppModuleSimulation functions @@ -174,12 +157,12 @@ func (am AppModule) ProposalContents(_ module.SimulationState) []simtypes.Weight } // RandomizedParams creates randomized name param changes for the simulator. -func (AppModule) RandomizedParams(r *rand.Rand) []simtypes.ParamChange { +func (AppModule) RandomizedParams(r *rand.Rand) []simtypes.LegacyParamChange { return simulation.ParamChanges(r) } // RegisterStoreDecoder registers a decoder for name module's types -func (am AppModule) RegisterStoreDecoder(sdr sdk.StoreDecoderRegistry) { +func (am AppModule) RegisterStoreDecoder(sdr simtypes.StoreDecoderRegistry) { sdr[types.StoreKey] = simulation.NewDecodeStore(am.cdc) } diff --git a/x/name/simulation/genesis.go b/x/name/simulation/genesis.go index f02c5f7c08..744d1df94e 100644 --- a/x/name/simulation/genesis.go +++ b/x/name/simulation/genesis.go @@ -53,31 +53,31 @@ func GenRootNameSegment(r *rand.Rand, minSegmentLength uint32) string { func RandomizedGenState(simState *module.SimulationState) { var maxValueLength uint32 simState.AppParams.GetOrGenerate( - simState.Cdc, MaxSegmentLength, &maxValueLength, simState.Rand, + MaxSegmentLength, &maxValueLength, simState.Rand, func(r *rand.Rand) { maxValueLength = GenMaxSegmentLength(r) }, ) var maxNameLevels uint32 simState.AppParams.GetOrGenerate( - simState.Cdc, MaxSegmentLength, &maxNameLevels, simState.Rand, + MaxSegmentLength, &maxNameLevels, simState.Rand, func(r *rand.Rand) { maxNameLevels = GenMaxNameLevels(r) }, ) var minValueLength uint32 simState.AppParams.GetOrGenerate( - simState.Cdc, MaxSegmentLength, &minValueLength, simState.Rand, + MaxSegmentLength, &minValueLength, simState.Rand, func(r *rand.Rand) { minValueLength = GenMinSegmentLength(r) }, ) var allowUnrestrictedNames bool simState.AppParams.GetOrGenerate( - simState.Cdc, AllowUnrestrictedNames, &allowUnrestrictedNames, simState.Rand, + AllowUnrestrictedNames, &allowUnrestrictedNames, simState.Rand, func(r *rand.Rand) { allowUnrestrictedNames = GenAllowUnrestrictedNames(r) }, ) var rootNameSegment string simState.AppParams.GetOrGenerate( - simState.Cdc, RootNameSegment, &rootNameSegment, simState.Rand, + RootNameSegment, &rootNameSegment, simState.Rand, func(r *rand.Rand) { rootNameSegment = GenRootNameSegment(r, minValueLength) }, ) diff --git a/x/name/simulation/operations.go b/x/name/simulation/operations.go index 0acc4ed1ab..1f1fb5c2fe 100644 --- a/x/name/simulation/operations.go +++ b/x/name/simulation/operations.go @@ -4,9 +4,10 @@ import ( "math/rand" "strings" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" + "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" - "github.com/cosmos/cosmos-sdk/simapp/helpers" sdk "github.com/cosmos/cosmos-sdk/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" @@ -38,19 +39,19 @@ func WeightedOperations( weightMsgModifyName int ) - appParams.GetOrGenerate(cdc, OpWeightMsgBindName, &weightMsgBindName, nil, + appParams.GetOrGenerate(OpWeightMsgBindName, &weightMsgBindName, nil, func(_ *rand.Rand) { weightMsgBindName = simappparams.DefaultWeightMsgBindName }, ) - appParams.GetOrGenerate(cdc, OpWeightMsgDeleteName, &weightMsgDeleteName, nil, + appParams.GetOrGenerate(OpWeightMsgDeleteName, &weightMsgDeleteName, nil, func(_ *rand.Rand) { weightMsgDeleteName = simappparams.DefaultWeightMsgDeleteName }, ) - appParams.GetOrGenerate(cdc, OpWeightMsgModifyName, &weightMsgModifyName, nil, + appParams.GetOrGenerate(OpWeightMsgModifyName, &weightMsgModifyName, nil, func(_ *rand.Rand) { weightMsgModifyName = simappparams.DefaultWeightMsgModifyName }, @@ -169,12 +170,12 @@ func Dispatch( } txGen := simappparams.MakeTestEncodingConfig().TxConfig - tx, err := helpers.GenSignedMockTx( + tx, err := simtestutil.GenSignedMockTx( r, txGen, []sdk.Msg{msg}, fees, - helpers.DefaultGenTxGas, + simtestutil.DefaultGenTxGas, chainID, []uint64{account.GetAccountNumber()}, []uint64{account.GetSequence()}, @@ -189,7 +190,7 @@ func Dispatch( return simtypes.NoOpMsg(sdk.MsgTypeURL(msg), sdk.MsgTypeURL(msg), err.Error()), nil, nil } - return simtypes.NewOperationMsg(msg, true, "", &codec.ProtoCodec{}), nil, nil + return simtypes.NewOperationMsg(msg, true, ""), nil, nil } // getRandomRecord finds a random record owned by a known account. diff --git a/x/name/simulation/operations_test.go b/x/name/simulation/operations_test.go index fd884ffc02..096627df5a 100644 --- a/x/name/simulation/operations_test.go +++ b/x/name/simulation/operations_test.go @@ -12,9 +12,6 @@ import ( simtypes "github.com/cosmos/cosmos-sdk/types/simulation" "github.com/cosmos/cosmos-sdk/x/bank/testutil" - abci "github.com/tendermint/tendermint/abci/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - "github.com/provenance-io/provenance/app" simappparams "github.com/provenance-io/provenance/app/params" "github.com/provenance-io/provenance/x/name/simulation" @@ -30,7 +27,7 @@ type SimTestSuite struct { func (s *SimTestSuite) SetupTest() { s.app = app.Setup(s.T()) - s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{}) + s.ctx = s.app.BaseApp.NewContext(false) } // LogOperationMsg logs all fields of the provided operationMsg. @@ -120,7 +117,7 @@ func (s *SimTestSuite) TestSimulateMsgBindName() { s.LogIfError(s.app.NameKeeper.SetNameRecord(s.ctx, name, accounts[0].Address, false), "SetNameRecord(%q)", name) // begin a new block - s.app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) + // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) // TODO[1760]: finalize-block // execute operation op := simulation.SimulateMsgBindName(s.app.NameKeeper, s.app.AccountKeeper, s.app.BankKeeper) @@ -154,7 +151,7 @@ func (s *SimTestSuite) TestSimulateMsgDeleteName() { s.LogIfError(s.app.NameKeeper.SetNameRecord(s.ctx, name, accounts[0].Address, false), "SetNameRecord(%q)", name) // begin a new block - s.app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) + // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) // TODO[1760]: finalize-block // execute operation op := simulation.SimulateMsgDeleteName(s.app.NameKeeper, s.app.AccountKeeper, s.app.BankKeeper) @@ -186,7 +183,7 @@ func (s *SimTestSuite) TestSimulateMsgModifyName() { s.LogIfError(s.app.NameKeeper.SetNameRecord(s.ctx, name, accounts[0].Address, false), "SetNameRecord(%q)", name) // begin a new block - s.app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) + // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) // TODO[1760]: finalize-block // execute operation op := simulation.SimulateMsgModifyName(s.app.NameKeeper, s.app.AccountKeeper, s.app.BankKeeper) @@ -215,7 +212,7 @@ func (s *SimTestSuite) getTestingAccounts(r *rand.Rand, n int) []simtypes.Accoun for i, account := range accounts { acc := s.app.AccountKeeper.NewAccountWithAddress(s.ctx, account.Address) s.app.AccountKeeper.SetAccount(s.ctx, acc) - err := testutil.FundAccount(s.app.BankKeeper, s.ctx, account.Address, initCoins) + err := testutil.FundAccount(s.ctx, s.app.BankKeeper, account.Address, initCoins) s.Require().NoError(err, "[%d]: FundAccount", i) } diff --git a/x/name/simulation/params.go b/x/name/simulation/params.go index 6fed52321f..8b594818b2 100644 --- a/x/name/simulation/params.go +++ b/x/name/simulation/params.go @@ -21,26 +21,26 @@ const ( // ParamChanges defines the parameters that can be modified by param change proposals // on the simulation -func ParamChanges(_ *rand.Rand) []simtypes.ParamChange { - return []simtypes.ParamChange{ - simulation.NewSimParamChange(types.ModuleName, keyMinSegmentLength, +func ParamChanges(_ *rand.Rand) []simtypes.LegacyParamChange { + return []simtypes.LegacyParamChange{ + simulation.NewSimLegacyParamChange(types.ModuleName, keyMinSegmentLength, func(r *rand.Rand) string { return fmt.Sprintf("%d", GenMinSegmentLength(r)) }, ), - simulation.NewSimParamChange(types.ModuleName, keyMaxSegmentLength, + simulation.NewSimLegacyParamChange(types.ModuleName, keyMaxSegmentLength, func(r *rand.Rand) string { return fmt.Sprintf("%d", GenMaxSegmentLength(r)) }, ), - simulation.NewSimParamChange(types.ModuleName, keyMaxNameLevels, + simulation.NewSimLegacyParamChange(types.ModuleName, keyMaxNameLevels, func(r *rand.Rand) string { return fmt.Sprintf("%d", GenMaxNameLevels(r)) }, ), - simulation.NewSimParamChange(types.ModuleName, keyAllowUnrestricted, + simulation.NewSimLegacyParamChange(types.ModuleName, keyAllowUnrestricted, func(r *rand.Rand) string { return fmt.Sprintf("%v", GenAllowUnrestrictedNames(r)) }, diff --git a/x/name/simulation/proposals_test.go b/x/name/simulation/proposals_test.go index 7447a1b065..e1e53f6933 100644 --- a/x/name/simulation/proposals_test.go +++ b/x/name/simulation/proposals_test.go @@ -5,7 +5,6 @@ import ( "testing" "github.com/stretchr/testify/require" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" @@ -18,7 +17,7 @@ import ( func TestCreateRootNameProposalContents(t *testing.T) { app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + ctx := app.BaseApp.NewContext(false) // initialize parameters s := rand.NewSource(1) diff --git a/x/name/types/keys.go b/x/name/types/keys.go index b50490b1f1..ed448f285c 100644 --- a/x/name/types/keys.go +++ b/x/name/types/keys.go @@ -18,9 +18,6 @@ const ( // RouterKey is the message route for distribution RouterKey = ModuleName - - // QuerierRoute is the querier route for distribution - QuerierRoute = ModuleName ) var ( diff --git a/x/name/types/querier.go b/x/name/types/querier.go deleted file mode 100644 index ed8ad53947..0000000000 --- a/x/name/types/querier.go +++ /dev/null @@ -1,28 +0,0 @@ -package types - -// querier keys -const ( - // The query base for getting the module params - QueryParams = "params" - // The query base for resolving names. - QueryResolve = "resolve" - // The query base for reverse lookup. - QueryLookup = "lookup" -) - -// QueryNameResult contains the address from a name query. -type QueryNameResult struct { - Name string `json:"name"` - Address string `json:"address"` - Restricted bool `json:"restricted"` -} - -// String implements fmt.Stringer -func (r QueryNameResult) String() string { - return r.Name + "->" + r.Address // bech32 string -} - -// QueryNameResults contains a sequence of name records. -type QueryNameResults struct { - Records []QueryNameResult `json:"records"` -} diff --git a/x/name/types/querier_test.go b/x/name/types/querier_test.go deleted file mode 100644 index bb7913452b..0000000000 --- a/x/name/types/querier_test.go +++ /dev/null @@ -1,22 +0,0 @@ -package types - -import ( - "fmt" - "testing" - - "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" -) - -func TestQuerierNameResult(t *testing.T) { - addr := sdk.AccAddress(secp256k1.GenPrivKey().PubKey().Address()) - nr := NewNameRecord("example.name", addr, true) - // check that result can wrap a name record - qnr := QueryNameResult(nr) - require.NotNil(t, qnr) - require.Equal(t, qnr.Name, "example.name") - require.Equal(t, qnr.Address, addr.String()) - require.Equal(t, qnr.Restricted, true) - require.Equal(t, fmt.Sprintf("example.name->%s", addr.String()), qnr.String()) -} diff --git a/x/oracle/client/cli/cli_test.go b/x/oracle/client/cli/cli_test.go index fd36b1cfd6..dfccae8739 100644 --- a/x/oracle/client/cli/cli_test.go +++ b/x/oracle/client/cli/cli_test.go @@ -4,7 +4,7 @@ import ( "fmt" "testing" - tmcli "github.com/tendermint/tendermint/libs/cli" + cmtcli "github.com/cometbft/cometbft/libs/cli" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/crypto/hd" @@ -63,7 +63,7 @@ func (s *IntegrationTestSuite) SetupSuite() { var genBalances []banktypes.Balance for i := range s.accountAddresses { genBalances = append(genBalances, banktypes.Balance{Address: s.accountAddresses[i].String(), Coins: sdk.NewCoins( - sdk.NewCoin("nhash", sdk.NewInt(100000000)), sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(100000000)), + sdk.NewInt64Coin("nhash", 100_000_000), sdk.NewInt64Coin(s.cfg.BondDenom, 100_000_000), ).Sort()}) } var bankGenState banktypes.GenesisState @@ -151,7 +151,7 @@ func (s *IntegrationTestSuite) TestQueryOracleAddress() { s.Run(tc.name, func() { clientCtx := s.network.Validators[0].ClientCtx - out, err := clitestutil.ExecTestCLICmd(clientCtx, oraclecli.GetQueryOracleAddressCmd(), []string{fmt.Sprintf("--%s=json", tmcli.OutputFlag)}) + out, err := clitestutil.ExecTestCLICmd(clientCtx, oraclecli.GetQueryOracleAddressCmd(), []string{fmt.Sprintf("--%s=json", cmtcli.OutputFlag)}) if len(tc.expectErrMsg) > 0 { s.EqualError(err, tc.expectErrMsg, "should have correct error message for invalid QueryOracleAddress") } else { @@ -197,15 +197,15 @@ func (s *IntegrationTestSuite) TestOracleUpdate() { args := []string{ tc.address, } - flags := []string{ + flagArgs := []string{ fmt.Sprintf("--%s=%s", flags.FlagFrom, tc.signer), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), } - args = append(args, flags...) + args = append(args, flagArgs...) - out, err := clitestutil.ExecTestCLICmd(clientCtx, oraclecli.GetCmdOracleUpdate(), append(args, []string{fmt.Sprintf("--%s=json", tmcli.OutputFlag)}...)) + out, err := clitestutil.ExecTestCLICmd(clientCtx, oraclecli.GetCmdOracleUpdate(), append(args, []string{fmt.Sprintf("--%s=json", cmtcli.OutputFlag)}...)) var response sdk.TxResponse marshalErr := clientCtx.Codec.UnmarshalJSON(out.Bytes(), &response) if len(tc.expectErrMsg) > 0 { @@ -270,15 +270,15 @@ func (s *IntegrationTestSuite) TestSendQuery() { tc.channel, tc.query, } - flags := []string{ + flagArgs := []string{ fmt.Sprintf("--%s=%s", flags.FlagFrom, tc.signer), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), } - args = append(args, flags...) + args = append(args, flagArgs...) - out, err := clitestutil.ExecTestCLICmd(clientCtx, oraclecli.GetCmdSendQuery(), append(args, []string{fmt.Sprintf("--%s=json", tmcli.OutputFlag)}...)) + out, err := clitestutil.ExecTestCLICmd(clientCtx, oraclecli.GetCmdSendQuery(), append(args, []string{fmt.Sprintf("--%s=json", cmtcli.OutputFlag)}...)) var response sdk.TxResponse marshalErr := clientCtx.Codec.UnmarshalJSON(out.Bytes(), &response) if len(tc.expectErrMsg) > 0 { diff --git a/x/oracle/client/cli/tx.go b/x/oracle/client/cli/tx.go index ff1a63f0d3..bb20ae7cfd 100644 --- a/x/oracle/client/cli/tx.go +++ b/x/oracle/client/cli/tx.go @@ -10,11 +10,10 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/client/tx" - sdk "github.com/cosmos/cosmos-sdk/types" - sdktx "github.com/cosmos/cosmos-sdk/types/tx" "github.com/cosmos/cosmos-sdk/version" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - govcli "github.com/cosmos/cosmos-sdk/x/gov/client/cli" + + // govcli "github.com/cosmos/cosmos-sdk/x/gov/client/cli" // TODO[1760]: gov-cli govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" "github.com/provenance-io/provenance/x/oracle/types" @@ -61,20 +60,25 @@ func GetCmdOracleUpdate() *cobra.Command { args[0], ) - proposal, govErr := govcli.ReadGovPropFlags(clientCtx, cmd.Flags()) - if govErr != nil { - return govErr - } - proposal.Messages, govErr = sdktx.SetMsgs([]sdk.Msg{msg}) - if govErr != nil { - return govErr - } - - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), proposal) + // TODO[1760]: gov-cli: Replace this with GenerateOrBroadcastTxCLIAsGovProp once its back. + _, _ = msg, clientCtx + /* + proposal, govErr := govcli.ReadGovPropFlags(clientCtx, cmd.Flags()) + if govErr != nil { + return govErr + } + proposal.Messages, govErr = sdktx.SetMsgs([]sdk.Msg{msg}) + if govErr != nil { + return govErr + } + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), proposal) + */ + return fmt.Errorf("not yet updated") }, } - govcli.AddGovPropFlagsToCmd(cmd) + // govcli.AddGovPropFlagsToCmd(cmd) // TODO[1760]: gov-cli flags.AddTxFlagsToCmd(cmd) return cmd @@ -106,9 +110,6 @@ func GetCmdSendQuery() *cobra.Command { channelID, queryData, ) - if err := msg.ValidateBasic(); err != nil { - return err - } return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) }, } diff --git a/x/oracle/keeper/icq.go b/x/oracle/keeper/icq.go index 1845db6ff4..482ca705e8 100644 --- a/x/oracle/keeper/icq.go +++ b/x/oracle/keeper/icq.go @@ -5,14 +5,14 @@ import ( wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" - abcitypes "github.com/tendermint/tendermint/abci/types" + abci "github.com/cometbft/cometbft/abci/types" cerrs "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" - clienttypes "github.com/cosmos/ibc-go/v6/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v6/modules/core/04-channel/types" - host "github.com/cosmos/ibc-go/v6/modules/core/24-host" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + host "github.com/cosmos/ibc-go/v8/modules/core/24-host" "github.com/provenance-io/provenance/x/oracle/types" ) @@ -28,7 +28,7 @@ func (k Keeper) QueryOracle(ctx sdk.Context, query wasmtypes.RawContractMessage, Query: query, } - reqs := []abcitypes.RequestQuery{ + reqs := []abci.RequestQuery{ { Path: "/provenance.oracle.v1.Query/Oracle", Data: k.cdc.MustMarshal(&q), diff --git a/x/oracle/keeper/keeper.go b/x/oracle/keeper/keeper.go index de8c6d8a87..2708d2656f 100644 --- a/x/oracle/keeper/keeper.go +++ b/x/oracle/keeper/keeper.go @@ -3,15 +3,15 @@ package keeper import ( wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" - "github.com/tendermint/tendermint/libs/log" + "cosmossdk.io/log" + storetypes "cosmossdk.io/store/types" "github.com/cosmos/cosmos-sdk/codec" - storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - host "github.com/cosmos/ibc-go/v6/modules/core/24-host" + capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + host "github.com/cosmos/ibc-go/v8/modules/core/24-host" "github.com/provenance-io/provenance/x/oracle/types" ) diff --git a/x/oracle/keeper/keeper_test.go b/x/oracle/keeper/keeper_test.go index cf82a3cba9..f7e99fa338 100644 --- a/x/oracle/keeper/keeper_test.go +++ b/x/oracle/keeper/keeper_test.go @@ -5,17 +5,19 @@ import ( "testing" "time" + "github.com/stretchr/testify/suite" + + cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" + "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/crypto/keyring" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/provenance-io/provenance/app" simapp "github.com/provenance-io/provenance/app" "github.com/provenance-io/provenance/x/oracle/keeper" "github.com/provenance-io/provenance/x/oracle/types" - "github.com/stretchr/testify/suite" - - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" ) type KeeperTestSuite struct { @@ -47,7 +49,7 @@ func (s *KeeperTestSuite) SetupTest() { s.app = app.Setup(s.T()) s.CreateAccounts(4) s.msgServer = keeper.NewMsgServerImpl(&s.app.OracleKeeper) - s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{Time: time.Now().UTC()}) + s.ctx = s.app.BaseApp.NewContextLegacy(false, cmtproto.Header{Time: time.Now().UTC()}) s.ctx = s.ctx.WithBlockHeight(100) queryHelper := baseapp.NewQueryServerTestHelper(s.ctx, s.app.InterfaceRegistry()) diff --git a/x/oracle/keeper/mocks_test.go b/x/oracle/keeper/mocks_test.go index 06719d7eda..2215ec4d41 100644 --- a/x/oracle/keeper/mocks_test.go +++ b/x/oracle/keeper/mocks_test.go @@ -5,9 +5,9 @@ import ( wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" sdk "github.com/cosmos/cosmos-sdk/types" - capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - clienttypes "github.com/cosmos/ibc-go/v6/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v6/modules/core/04-channel/types" + capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" "github.com/provenance-io/provenance/x/oracle/types" ) diff --git a/x/oracle/keeper/relay.go b/x/oracle/keeper/relay.go index e2c91aecd9..d965a80411 100644 --- a/x/oracle/keeper/relay.go +++ b/x/oracle/keeper/relay.go @@ -3,16 +3,17 @@ package keeper import ( "strconv" - abci "github.com/tendermint/tendermint/abci/types" + abci "github.com/cometbft/cometbft/abci/types" cerrs "cosmossdk.io/errors" + // icqtypes "github.com/cosmos/ibc-apps/modules/async-icq/v7/types" // TODO[1760]: async-icq + sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - icqtypes "github.com/cosmos/ibc-apps/modules/async-icq/v6/types" - clienttypes "github.com/cosmos/ibc-go/v6/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v6/modules/core/04-channel/types" + capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" "github.com/provenance-io/provenance/x/oracle/types" ) @@ -31,58 +32,62 @@ func (k Keeper) SendQuery( if !found { return 0, cerrs.Wrapf(channeltypes.ErrChannelNotFound, "port ID (%s) channel ID (%s)", sourcePort, sourceChannel) } - - destinationPort := sourceChannelEnd.GetCounterparty().GetPortID() - destinationChannel := sourceChannelEnd.GetCounterparty().GetChannelID() - - data, err := icqtypes.SerializeCosmosQuery(reqs) - if err != nil { - return 0, cerrs.Wrap(err, "could not serialize reqs into cosmos query") - } - icqPacketData := icqtypes.InterchainQueryPacketData{ - Data: data, - } - - return k.createOutgoingPacket(ctx, sourcePort, sourceChannel, destinationPort, destinationChannel, chanCap, icqPacketData, timeoutTimestamp) + _ = sourceChannelEnd // TODO[1760]: async-icq + + // TODO[1760]: async-icq + // destinationPort := sourceChannelEnd.GetCounterparty().GetPortID() + // destinationChannel := sourceChannelEnd.GetCounterparty().GetChannelID() + // + // data, err := icqtypes.SerializeCosmosQuery(reqs) + // if err != nil { + // return 0, cerrs.Wrap(err, "could not serialize reqs into cosmos query") + // } + // icqPacketData := icqtypes.InterchainQueryPacketData{ + // Data: data, + // } + // + // return k.createOutgoingPacket(ctx, sourcePort, sourceChannel, destinationPort, destinationChannel, chanCap, icqPacketData, timeoutTimestamp) + return 0, cerrs.Wrapf(sdkerrors.ErrNotSupported, "not yet updated") } -func (k Keeper) createOutgoingPacket( - ctx sdk.Context, - sourcePort, - sourceChannel, - destinationPort, - destinationChannel string, - chanCap *capabilitytypes.Capability, - icqPacketData icqtypes.InterchainQueryPacketData, - timeoutTimestamp uint64, -) (uint64, error) { - if err := icqPacketData.ValidateBasic(); err != nil { - return 0, cerrs.Wrap(err, "invalid interchain query packet data") - } - - // get the next sequence - sequence, found := k.channelKeeper.GetNextSequenceSend(ctx, sourcePort, sourceChannel) - if !found { - return 0, cerrs.Wrapf(channeltypes.ErrSequenceSendNotFound, "failed to retrieve next sequence send for channel %s on port %s", sourceChannel, sourcePort) - } - - packet := channeltypes.NewPacket( - icqPacketData.GetBytes(), - sequence, - sourcePort, - sourceChannel, - destinationPort, - destinationChannel, - clienttypes.ZeroHeight(), - timeoutTimestamp, - ) - - if _, err := k.ics4Wrapper.SendPacket(ctx, chanCap, packet.SourcePort, packet.SourceChannel, packet.TimeoutHeight, packet.TimeoutTimestamp, packet.Data); err != nil { - return 0, err - } - - return packet.Sequence, nil -} +// TODO[1760]: async-icq +// func (k Keeper) createOutgoingPacket( +// ctx sdk.Context, +// sourcePort, +// sourceChannel, +// destinationPort, +// destinationChannel string, +// chanCap *capabilitytypes.Capability, +// icqPacketData icqtypes.InterchainQueryPacketData, +// timeoutTimestamp uint64, +// ) (uint64, error) { +// if err := icqPacketData.ValidateBasic(); err != nil { +// return 0, cerrs.Wrap(err, "invalid interchain query packet data") +// } +// +// // get the next sequence +// sequence, found := k.channelKeeper.GetNextSequenceSend(ctx, sourcePort, sourceChannel) +// if !found { +// return 0, cerrs.Wrapf(channeltypes.ErrSequenceSendNotFound, "failed to retrieve next sequence send for channel %s on port %s", sourceChannel, sourcePort) +// } +// +// packet := channeltypes.NewPacket( +// icqPacketData.GetBytes(), +// sequence, +// sourcePort, +// sourceChannel, +// destinationPort, +// destinationChannel, +// clienttypes.ZeroHeight(), +// timeoutTimestamp, +// ) +// +// if _, err := k.ics4Wrapper.SendPacket(ctx, chanCap, packet.SourcePort, packet.SourceChannel, packet.TimeoutHeight, packet.TimeoutTimestamp, packet.Data); err != nil { +// return 0, err +// } +// +// return packet.Sequence, nil +// } // OnAcknowledgementPacket reacts to an Acknowledgement packet. func (k Keeper) OnAcknowledgementPacket( @@ -92,36 +97,38 @@ func (k Keeper) OnAcknowledgementPacket( ) error { switch resp := ack.Response.(type) { case *channeltypes.Acknowledgement_Result: - var ackData icqtypes.InterchainQueryPacketAck - if err := icqtypes.ModuleCdc.UnmarshalJSON(resp.Result, &ackData); err != nil { - return cerrs.Wrap(err, "failed to unmarshal interchain query packet ack") - } - resps, err := icqtypes.DeserializeCosmosResponse(ackData.Data) - if err != nil { - return cerrs.Wrap(err, "could not deserialize data to cosmos response") - } - - if len(resps) < 1 { - return cerrs.Wrap(sdkerrors.ErrInvalidRequest, "no responses in interchain query packet ack") - } - - var r types.QueryOracleResponse - if err = k.cdc.Unmarshal(resps[0].Value, &r); err != nil { - return cerrs.Wrapf(err, "failed to unmarshal interchain query response to type %T", resp) - } - - err = ctx.EventManager().EmitTypedEvent(&types.EventOracleQuerySuccess{ - SequenceId: strconv.FormatUint(modulePacket.Sequence, 10), - Result: string(resp.Result), - Channel: modulePacket.DestinationChannel, - }) - - k.Logger(ctx).Info("interchain query ack response", "sequence", modulePacket.Sequence, "response", r) - - if err != nil { - k.Logger(ctx).Error("interchain query ack response was unable to emit event", "sequence", modulePacket.Sequence, "error", err) - return err - } + // TODO[1760]: async-icq + // var ackData icqtypes.InterchainQueryPacketAck + // if err := icqtypes.ModuleCdc.UnmarshalJSON(resp.Result, &ackData); err != nil { + // return cerrs.Wrap(err, "failed to unmarshal interchain query packet ack") + // } + // resps, err := icqtypes.DeserializeCosmosResponse(ackData.Data) + // if err != nil { + // return cerrs.Wrap(err, "could not deserialize data to cosmos response") + // } + // + // if len(resps) < 1 { + // return cerrs.Wrap(sdkerrors.ErrInvalidRequest, "no responses in interchain query packet ack") + // } + // + // var r types.QueryOracleResponse + // if err = k.cdc.Unmarshal(resps[0].Value, &r); err != nil { + // return cerrs.Wrapf(err, "failed to unmarshal interchain query response to type %T", resp) + // } + // + // err = ctx.EventManager().EmitTypedEvent(&types.EventOracleQuerySuccess{ + // SequenceId: strconv.FormatUint(modulePacket.Sequence, 10), + // Result: string(resp.Result), + // Channel: modulePacket.DestinationChannel, + // }) + // + // k.Logger(ctx).Info("interchain query ack response", "sequence", modulePacket.Sequence, "response", r) + // + // if err != nil { + // k.Logger(ctx).Error("interchain query ack response was unable to emit event", "sequence", modulePacket.Sequence, "error", err) + // return err + // } + return cerrs.Wrapf(sdkerrors.ErrNotSupported, "not yet updated") case *channeltypes.Acknowledgement_Error: err := ctx.EventManager().EmitTypedEvent(&types.EventOracleQueryError{ SequenceId: strconv.FormatUint(modulePacket.Sequence, 10), diff --git a/x/oracle/keeper/relay_test.go b/x/oracle/keeper/relay_test.go index 43e0403663..c80628f7a3 100644 --- a/x/oracle/keeper/relay_test.go +++ b/x/oracle/keeper/relay_test.go @@ -4,16 +4,21 @@ import ( "fmt" "strconv" + "github.com/gogo/protobuf/proto" + + abci "github.com/cometbft/cometbft/abci/types" + + cerrs "cosmossdk.io/errors" + + // icqtypes "github.com/cosmos/ibc-apps/modules/async-icq/v7/types" // TODO[1760]: async-icq + "github.com/cosmos/cosmos-sdk/codec" sdktypes "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - icqtypes "github.com/cosmos/ibc-apps/modules/async-icq/v6/types" - clienttypes "github.com/cosmos/ibc-go/v6/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v6/modules/core/04-channel/types" - proto "github.com/gogo/protobuf/proto" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + "github.com/provenance-io/provenance/x/oracle/keeper" "github.com/provenance-io/provenance/x/oracle/types" - abci "github.com/tendermint/tendermint/abci/types" ) func (s *KeeperTestSuite) TestSendQuery() { @@ -57,8 +62,8 @@ func (s *KeeperTestSuite) TestSendQuery() { } func (s *KeeperTestSuite) TestOnAcknowledgementPacket() { - wasmError := sdkerrors.New("codespace", 2, "jackthecat ran away") - _, code, _ := sdkerrors.ABCIInfo(wasmError, false) + wasmError := cerrs.New("codespace", 2, "jackthecat ran away") + _, code, _ := cerrs.ABCIInfo(wasmError, false) tests := []struct { name string @@ -147,48 +152,56 @@ func (s *KeeperTestSuite) TestOnTimeoutPacket() { } func createICQResponse(cdc codec.Codec, response string) []byte { - oracleResponse := types.QueryOracleResponse{ - Data: []byte("{}"), - } - value, _ := cdc.Marshal(&oracleResponse) - bytes, _ := icqtypes.SerializeCosmosResponse([]abci.ResponseQuery{{ - Value: value, - }}) - - icqPacket := icqtypes.InterchainQueryPacketAck{ - Data: bytes, - } - icqBytes, _ := icqtypes.ModuleCdc.MarshalJSON(&icqPacket) - return icqBytes + // TODO[1760]: async-icq + // oracleResponse := types.QueryOracleResponse{ + // Data: []byte("{}"), + // } + // value, _ := cdc.Marshal(&oracleResponse) + // bytes, _ := icqtypes.SerializeCosmosResponse([]abci.ResponseQuery{{ + // Value: value, + // }}) + // + // icqPacket := icqtypes.InterchainQueryPacketAck{ + // Data: bytes, + // } + // icqBytes, _ := icqtypes.ModuleCdc.MarshalJSON(&icqPacket) + // return icqBytes + return []byte("not yet updated") } func createInvalidICQPacketAck() []byte { - icqPacket := icqtypes.InterchainQueryPacketAck{ - Data: []byte("abc"), - } - icqBytes, _ := icqtypes.ModuleCdc.MarshalJSON(&icqPacket) - return icqBytes + // TODO[1760]: async-icq + // icqPacket := icqtypes.InterchainQueryPacketAck{ + // Data: []byte("abc"), + // } + // icqBytes, _ := icqtypes.ModuleCdc.MarshalJSON(&icqPacket) + // return icqBytes + return []byte("not yet updated") } func createEmptyICQPacketAck() []byte { - bytes, _ := icqtypes.SerializeCosmosResponse([]abci.ResponseQuery{}) - - icqPacket := icqtypes.InterchainQueryPacketAck{ - Data: bytes, - } - - icqBytes, _ := icqtypes.ModuleCdc.MarshalJSON(&icqPacket) - return icqBytes + // TODO[1760]: async-icq + // bytes, _ := icqtypes.SerializeCosmosResponse([]abci.ResponseQuery{}) + // + // icqPacket := icqtypes.InterchainQueryPacketAck{ + // Data: bytes, + // } + // + // icqBytes, _ := icqtypes.ModuleCdc.MarshalJSON(&icqPacket) + // return icqBytes + return []byte("not yet updated") } func createInvalidCosmosResponse() []byte { - bytes, _ := icqtypes.SerializeCosmosResponse([]abci.ResponseQuery{{ - Value: []byte("baddata"), - }}) - - icqPacket := icqtypes.InterchainQueryPacketAck{ - Data: bytes, - } - icqBytes, _ := icqtypes.ModuleCdc.MarshalJSON(&icqPacket) - return icqBytes + // TODO[1760]: async-icq + // bytes, _ := icqtypes.SerializeCosmosResponse([]abci.ResponseQuery{{ + // Value: []byte("baddata"), + // }}) + // + // icqPacket := icqtypes.InterchainQueryPacketAck{ + // Data: bytes, + // } + // icqBytes, _ := icqtypes.ModuleCdc.MarshalJSON(&icqPacket) + // return icqBytes + return []byte("not yet updated") } diff --git a/x/oracle/module/module.go b/x/oracle/module/module.go index 6566a401bd..2a823db534 100644 --- a/x/oracle/module/module.go +++ b/x/oracle/module/module.go @@ -9,7 +9,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" - abci "github.com/tendermint/tendermint/abci/types" + abci "github.com/cometbft/cometbft/abci/types" cerrs "cosmossdk.io/errors" @@ -21,7 +21,7 @@ import ( simtypes "github.com/cosmos/cosmos-sdk/types/simulation" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" - channelkeeper "github.com/cosmos/ibc-go/v6/modules/core/04-channel/keeper" + channelkeeper "github.com/cosmos/ibc-go/v8/modules/core/04-channel/keeper" "github.com/provenance-io/provenance/x/oracle/client/cli" "github.com/provenance-io/provenance/x/oracle/keeper" @@ -33,6 +33,7 @@ var ( _ module.AppModule = AppModule{} _ module.AppModuleBasic = AppModuleBasic{} _ module.AppModuleSimulation = AppModule{} + // TODO[1760]: app-module: Add more assertions for the new types and clean up stuff no longer needed. ) // AppModuleBasic defines the basic application module used by the oracle module. @@ -111,6 +112,12 @@ func NewAppModule(cdc codec.Codec, keeper keeper.Keeper, accountKeeper authkeepe } } +// IsOnePerModuleType is a dummy function that satisfies the OnePerModuleType interface (needed by AppModule). +func (AppModule) IsOnePerModuleType() {} + +// IsAppModule is a dummy function that satisfies the AppModule interface. +func (AppModule) IsAppModule() {} + // GenerateGenesisState creates a randomized GenState of the oracle module. func (am AppModule) GenerateGenesisState(simState *module.SimulationState) { simulation.RandomizedGenState(simState) @@ -123,13 +130,13 @@ func (am AppModule) ProposalContents(_ module.SimulationState) []simtypes.Weight } // RandomizedParams returns randomized module parameters for param change proposals. -func (am AppModule) RandomizedParams(_ *rand.Rand) []simtypes.ParamChange { +func (am AppModule) RandomizedParams(_ *rand.Rand) []simtypes.LegacyParamChange { // currently no module params exist return nil } // RegisterStoreDecoder registers a func to decode each module's defined types from their corresponding store key -func (am AppModule) RegisterStoreDecoder(sdr sdk.StoreDecoderRegistry) { +func (am AppModule) RegisterStoreDecoder(sdr simtypes.StoreDecoderRegistry) { sdr[types.StoreKey] = simulation.NewDecodeStore(am.cdc) } @@ -148,19 +155,6 @@ func (AppModule) Name() string { // RegisterInvariants does nothing, there are no invariants to enforce func (AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} -// Deprecated: Route returns the message routing key for the oracle module. -func (am AppModule) Route() sdk.Route { - return sdk.Route{} -} - -// QuerierRoute returns the route we respond to for abci queries -func (AppModule) QuerierRoute() string { return "" } - -// LegacyQuerierHandler returns the oracle module sdk.Querier. -func (am AppModule) LegacyQuerierHandler(_ *codec.LegacyAmino) sdk.Querier { - return nil -} - // InitGenesis performs genesis initialization for the oracle module. It returns // no validator updates. func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) []abci.ValidatorUpdate { @@ -180,17 +174,6 @@ func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.Raw // ConsensusVersion implements AppModule/ConsensusVersion. func (AppModule) ConsensusVersion() uint64 { return 1 } -// BeginBlock is the `BeginBlocker` function run at the beginning of each block to -// process oracle module updates. -func (am AppModule) BeginBlock(_ sdk.Context, _ abci.RequestBeginBlock) { -} - -// EndBlock The `EndBlocker` abci call is ran at the end of each block. The `EventManager` is monitored -// and `Qualifying Actions` are deduced from newly created events and prior internal state. -func (am AppModule) EndBlock(_ sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate { - return []abci.ValidatorUpdate{} -} - // RegisterServices registers a gRPC query service to respond to the // module-specific gRPC queries. func (am AppModule) RegisterServices(cfg module.Configurator) { diff --git a/x/oracle/module/module_ibc.go b/x/oracle/module/module_ibc.go index 09bd46e7b4..f20dae0c18 100644 --- a/x/oracle/module/module_ibc.go +++ b/x/oracle/module/module_ibc.go @@ -3,14 +3,15 @@ package oracle import ( cerrs "cosmossdk.io/errors" + // icqtypes "github.com/cosmos/ibc-apps/modules/async-icq/v7/types" // TODO[1760]: async-icq + sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - icqtypes "github.com/cosmos/ibc-apps/modules/async-icq/v6/types" - channeltypes "github.com/cosmos/ibc-go/v6/modules/core/04-channel/types" - porttypes "github.com/cosmos/ibc-go/v6/modules/core/05-port/types" - host "github.com/cosmos/ibc-go/v6/modules/core/24-host" - ibcexported "github.com/cosmos/ibc-go/v6/modules/core/exported" + capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types" + host "github.com/cosmos/ibc-go/v8/modules/core/24-host" + ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" "github.com/provenance-io/provenance/x/oracle/types" ) @@ -127,7 +128,8 @@ func (am AppModule) OnRecvPacket( _ channeltypes.Packet, _ sdk.AccAddress, ) ibcexported.Acknowledgement { - return channeltypes.NewErrorAcknowledgement(cerrs.Wrapf(icqtypes.ErrInvalidChannelFlow, "oracle module can not receive packets")) + // return channeltypes.NewErrorAcknowledgement(cerrs.Wrapf(icqtypes.ErrInvalidChannelFlow, "oracle module can not receive packets")) // TODO[1760]: async-icq + return channeltypes.NewErrorAcknowledgement(cerrs.Wrapf(sdkerrors.ErrNotSupported, "not yet updated")) } // OnAcknowledgementPacket implements the IBCModule interface diff --git a/x/oracle/simulation/decoder_test.go b/x/oracle/simulation/decoder_test.go index 1d5013e5e2..f0574a5b8f 100644 --- a/x/oracle/simulation/decoder_test.go +++ b/x/oracle/simulation/decoder_test.go @@ -5,16 +5,17 @@ import ( "github.com/stretchr/testify/assert" - "github.com/cosmos/cosmos-sdk/simapp" "github.com/cosmos/cosmos-sdk/types/kv" + moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" "github.com/provenance-io/provenance/testutil/assertions" + oraclemodule "github.com/provenance-io/provenance/x/oracle/module" "github.com/provenance-io/provenance/x/oracle/simulation" "github.com/provenance-io/provenance/x/oracle/types" ) func TestDecodeStore(t *testing.T) { - cdc := simapp.MakeTestEncodingConfig().Codec + cdc := moduletestutil.MakeTestEncodingConfig(oraclemodule.AppModuleBasic{}).Codec dec := simulation.NewDecodeStore(cdc) tests := []struct { diff --git a/x/oracle/simulation/genesis.go b/x/oracle/simulation/genesis.go index 38669733c5..4c7f553408 100644 --- a/x/oracle/simulation/genesis.go +++ b/x/oracle/simulation/genesis.go @@ -38,13 +38,13 @@ func OracleFn(r *rand.Rand, accs []simtypes.Account) string { func RandomizedGenState(simState *module.SimulationState) { var port string simState.AppParams.GetOrGenerate( - simState.Cdc, Port, &port, simState.Rand, + Port, &port, simState.Rand, func(r *rand.Rand) { port = PortFn(r) }, ) var oracle string simState.AppParams.GetOrGenerate( - simState.Cdc, Port, &port, simState.Rand, + Port, &port, simState.Rand, func(r *rand.Rand) { oracle = OracleFn(r, simState.Accounts) }, ) diff --git a/x/oracle/simulation/operations.go b/x/oracle/simulation/operations.go index 73fe4036e1..c3d4f49405 100644 --- a/x/oracle/simulation/operations.go +++ b/x/oracle/simulation/operations.go @@ -4,16 +4,19 @@ import ( "fmt" "math/rand" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" + + sdkmath "cosmossdk.io/math" + "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" - "github.com/cosmos/cosmos-sdk/simapp/helpers" sdk "github.com/cosmos/cosmos-sdk/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" "github.com/cosmos/cosmos-sdk/x/bank/testutil" "github.com/cosmos/cosmos-sdk/x/simulation" - channelkeeper "github.com/cosmos/ibc-go/v6/modules/core/04-channel/keeper" + channelkeeper "github.com/cosmos/ibc-go/v8/modules/core/04-channel/keeper" simappparams "github.com/provenance-io/provenance/app/params" "github.com/provenance-io/provenance/internal/pioconfig" @@ -38,12 +41,12 @@ func WeightedOperations( weightMsgSendOracleQuery int ) - appParams.GetOrGenerate(cdc, OpWeightMsgUpdateOracle, &weightMsgUpdateOracle, nil, + appParams.GetOrGenerate(OpWeightMsgUpdateOracle, &weightMsgUpdateOracle, nil, func(_ *rand.Rand) { weightMsgUpdateOracle = simappparams.DefaultWeightUpdateOracle }, ) - appParams.GetOrGenerate(cdc, OpWeightMsgSendOracleQuery, &weightMsgSendOracleQuery, nil, + appParams.GetOrGenerate(OpWeightMsgSendOracleQuery, &weightMsgSendOracleQuery, nil, func(_ *rand.Rand) { weightMsgSendOracleQuery = simappparams.DefaultWeightSendOracleQuery }, @@ -128,20 +131,20 @@ func Dispatch( if err != nil { return simtypes.NoOpMsg(sdk.MsgTypeURL(msg), sdk.MsgTypeURL(msg), "unable to generate fees"), nil, err } - err = testutil.FundAccount(bk, ctx, account.GetAddress(), sdk.NewCoins(sdk.Coin{ + err = testutil.FundAccount(ctx, bk, account.GetAddress(), sdk.NewCoins(sdk.Coin{ Denom: pioconfig.GetProvenanceConfig().BondDenom, - Amount: sdk.NewInt(1_000_000_000_000_000), + Amount: sdkmath.NewInt(1_000_000_000_000_000), })) if err != nil { return simtypes.NoOpMsg(sdk.MsgTypeURL(msg), sdk.MsgTypeURL(msg), "unable to fund account"), nil, err } txGen := simappparams.MakeTestEncodingConfig().TxConfig - tx, err := helpers.GenSignedMockTx( + tx, err := simtestutil.GenSignedMockTx( r, txGen, []sdk.Msg{msg}, fees, - helpers.DefaultGenTxGas, + simtestutil.DefaultGenTxGas, chainID, []uint64{account.GetAccountNumber()}, []uint64{account.GetSequence()}, @@ -156,7 +159,7 @@ func Dispatch( return simtypes.NoOpMsg(sdk.MsgTypeURL(msg), sdk.MsgTypeURL(msg), err.Error()), nil, nil } - return simtypes.NewOperationMsg(msg, true, "", &codec.ProtoCodec{}), futures, nil + return simtypes.NewOperationMsg(msg, true, ""), futures, nil } func RandomAccs(r *rand.Rand, accs []simtypes.Account, count uint64) ([]simtypes.Account, error) { diff --git a/x/oracle/simulation/operations_test.go b/x/oracle/simulation/operations_test.go index 9d3eca2d23..6ebd8836bd 100644 --- a/x/oracle/simulation/operations_test.go +++ b/x/oracle/simulation/operations_test.go @@ -6,17 +6,16 @@ import ( "math/rand" "strings" - abci "github.com/tendermint/tendermint/abci/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + "github.com/stretchr/testify/suite" sdk "github.com/cosmos/cosmos-sdk/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" "github.com/cosmos/cosmos-sdk/x/bank/testutil" + "github.com/provenance-io/provenance/app" simappparams "github.com/provenance-io/provenance/app/params" "github.com/provenance-io/provenance/x/oracle/simulation" "github.com/provenance-io/provenance/x/oracle/types" - "github.com/stretchr/testify/suite" ) type SimTestSuite struct { @@ -28,7 +27,7 @@ type SimTestSuite struct { func (s *SimTestSuite) SetupTest() { s.app = app.Setup(s.T()) - s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{}) + s.ctx = s.app.BaseApp.NewContext(false) } // LogOperationMsg logs all fields of the provided operationMsg. @@ -64,7 +63,7 @@ func (s *SimTestSuite) TestWeightedOperations() { accs := s.getTestingAccounts(r, 3) // begin a new block - s.app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) + // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) // TODO[1760]: finalize-block expected := []struct { weight int @@ -107,7 +106,7 @@ func (s *SimTestSuite) TestSimulateMsgUpdateOracle() { accounts := s.getTestingAccounts(r, 3) // begin a new block - s.app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) + // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) // TODO[1760]: finalize-block // execute operation op := simulation.SimulateMsgUpdateOracle(s.app.OracleKeeper, s.app.AccountKeeper, s.app.BankKeeper) @@ -131,7 +130,7 @@ func (s *SimTestSuite) TestSimulateMsgSendQueryOracle() { accounts := s.getTestingAccounts(r, 3) // begin a new block - s.app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) + // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) // TODO[1760]: finalize-block // execute operation op := simulation.SimulateMsgSendQueryOracle(s.app.OracleKeeper, s.app.AccountKeeper, s.app.BankKeeper, s.app.IBCKeeper.ChannelKeeper) @@ -216,7 +215,7 @@ func (s *SimTestSuite) getTestingAccounts(r *rand.Rand, n int) []simtypes.Accoun for _, account := range accounts { acc := s.app.AccountKeeper.NewAccountWithAddress(s.ctx, account.Address) s.app.AccountKeeper.SetAccount(s.ctx, acc) - err := testutil.FundAccount(s.app.BankKeeper, s.ctx, account.Address, initCoins) + err := testutil.FundAccount(s.ctx, s.app.BankKeeper, account.Address, initCoins) s.Require().NoError(err) } diff --git a/x/oracle/types/expected_keepers.go b/x/oracle/types/expected_keepers.go index cf3dbc6cf5..1489af58a4 100644 --- a/x/oracle/types/expected_keepers.go +++ b/x/oracle/types/expected_keepers.go @@ -2,9 +2,9 @@ package types import ( sdk "github.com/cosmos/cosmos-sdk/types" - capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - clienttypes "github.com/cosmos/ibc-go/v6/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v6/modules/core/04-channel/types" + capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" ) // ICS4Wrapper defines the expected ICS4Wrapper for middleware diff --git a/x/oracle/types/genesis.go b/x/oracle/types/genesis.go index c87f3f2456..262faddd3a 100644 --- a/x/oracle/types/genesis.go +++ b/x/oracle/types/genesis.go @@ -2,7 +2,7 @@ package types import ( sdk "github.com/cosmos/cosmos-sdk/types" - host "github.com/cosmos/ibc-go/v6/modules/core/24-host" + host "github.com/cosmos/ibc-go/v8/modules/core/24-host" ) func NewGenesisState(port string, oracle string) *GenesisState { diff --git a/x/oracle/types/keys.go b/x/oracle/types/keys.go index d9456d6b6c..9f6161dd2e 100644 --- a/x/oracle/types/keys.go +++ b/x/oracle/types/keys.go @@ -1,8 +1,6 @@ package types -import ( - icqtypes "github.com/cosmos/ibc-apps/modules/async-icq/v6/types" -) +// import icqtypes "github.com/cosmos/ibc-apps/modules/async-icq/v7/types" // TODO[1760]: async-icq const ( // ModuleName defines the module name @@ -15,7 +13,7 @@ const ( MemStoreKey = "mem_interquery" // Version defines the current version the IBC module supports - Version = icqtypes.Version + Version = "icq-1" // icqtypes.Version // TODO[1760]: async-icq // PortID is the default port id that module binds to PortID = "oracle" diff --git a/x/oracle/types/msgs.go b/x/oracle/types/msgs.go index 04b593dcb2..f9d364d38a 100644 --- a/x/oracle/types/msgs.go +++ b/x/oracle/types/msgs.go @@ -4,7 +4,7 @@ import ( fmt "fmt" sdk "github.com/cosmos/cosmos-sdk/types" - host "github.com/cosmos/ibc-go/v6/modules/core/24-host" + host "github.com/cosmos/ibc-go/v8/modules/core/24-host" ) var ( diff --git a/x/reward/abci_test.go b/x/reward/abci_test.go index 7318f7dd3f..aa71190fca 100644 --- a/x/reward/abci_test.go +++ b/x/reward/abci_test.go @@ -4,12 +4,12 @@ import ( "testing" "time" - simapp "github.com/provenance-io/provenance/app" - "github.com/provenance-io/provenance/x/reward" + "github.com/stretchr/testify/require" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + + simapp "github.com/provenance-io/provenance/app" + "github.com/provenance-io/provenance/x/reward" ) func TestEndBlockWithNoActiveRewards(t *testing.T) { @@ -19,7 +19,7 @@ func TestEndBlockWithNoActiveRewards(t *testing.T) { now := time.Now() app = simapp.Setup(t) - ctx = app.BaseApp.NewContext(false, tmproto.Header{}) + ctx = app.BaseApp.NewContext(false) ctx = ctx.WithBlockHeight(1).WithBlockTime(now) ctx = ctx.WithBlockHeight(2) @@ -35,7 +35,7 @@ func TestBeginBlockWithNoActiveRewards(t *testing.T) { now := time.Now() app = simapp.Setup(t) - ctx = app.BaseApp.NewContext(false, tmproto.Header{}) + ctx = app.BaseApp.NewContext(false) ctx = ctx.WithBlockHeight(1).WithBlockTime(now) ctx = ctx.WithBlockHeight(2) diff --git a/x/reward/client/cli/cli_test.go b/x/reward/client/cli/cli_test.go index 111bac926f..06447885d1 100644 --- a/x/reward/client/cli/cli_test.go +++ b/x/reward/client/cli/cli_test.go @@ -5,7 +5,11 @@ import ( "testing" "time" - tmcli "github.com/tendermint/tendermint/libs/cli" + "github.com/stretchr/testify/suite" + + cmtcli "github.com/cometbft/cometbft/libs/cli" + + sdkmath "cosmossdk.io/math" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/crypto/hd" @@ -17,8 +21,6 @@ import ( authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - "github.com/stretchr/testify/suite" - "github.com/provenance-io/provenance/internal/antewrapper" "github.com/provenance-io/provenance/internal/pioconfig" "github.com/provenance-io/provenance/testutil" @@ -67,11 +69,11 @@ func (s *IntegrationTestSuite) SetupSuite() { var genBalances []banktypes.Balance for i := range s.accountAddresses { genBalances = append(genBalances, banktypes.Balance{Address: s.accountAddresses[i].String(), Coins: sdk.NewCoins( - sdk.NewCoin("nhash", sdk.NewInt(100000000)), sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(100000000)), + sdk.NewInt64Coin("nhash", 100_000_000), sdk.NewInt64Coin(s.cfg.BondDenom, 100_000_000), ).Sort()}) } genBalances = append(genBalances, banktypes.Balance{Address: "cosmos1w6t0l7z0yerj49ehnqwqaayxqpe3u7e23edgma", Coins: sdk.NewCoins( - sdk.NewCoin("nhash", sdk.NewInt(100000000)), sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(100000000))).Sort()}) + sdk.NewInt64Coin("nhash", 100_000_000), sdk.NewInt64Coin(s.cfg.BondDenom, 100_000_000)).Sort()}) var bankGenState banktypes.GenesisState bankGenState.Params = banktypes.DefaultParams() bankGenState.Balances = genBalances @@ -102,8 +104,8 @@ func (s *IntegrationTestSuite) SetupSuite() { MaximumActions: 10, MinimumDelegationAmount: &minimumDelegation, MaximumDelegationAmount: &maximumDelegation, - MinimumActiveStakePercentile: sdk.NewDecWithPrec(0, 0), - MaximumActiveStakePercentile: sdk.NewDecWithPrec(1, 0), + MinimumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(0, 0), + MaximumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(1, 0), }, }, }, @@ -315,7 +317,7 @@ func (s *IntegrationTestSuite) TestQueryRewardPrograms() { s.Run(tc.name, func() { clientCtx := s.network.Validators[0].ClientCtx - out, err := clitestutil.ExecTestCLICmd(clientCtx, rewardcli.GetRewardProgramCmd(), []string{tc.queryTypeArg, fmt.Sprintf("--%s=json", tmcli.OutputFlag)}) + out, err := clitestutil.ExecTestCLICmd(clientCtx, rewardcli.GetRewardProgramCmd(), []string{tc.queryTypeArg, fmt.Sprintf("--%s=json", cmtcli.OutputFlag)}) if len(tc.expectErrMsg) > 0 { s.Assert().EqualError(err, tc.expectErrMsg) } else if tc.byId { @@ -456,7 +458,7 @@ func (s *IntegrationTestSuite) TestQueryClaimPeriodRewardDistributionAll() { s.Run(tc.name, func() { clientCtx := s.network.Validators[0].ClientCtx - out, err := clitestutil.ExecTestCLICmd(clientCtx, rewardcli.GetClaimPeriodRewardDistributionCmd(), append(tc.args, []string{fmt.Sprintf("--%s=json", tmcli.OutputFlag)}...)) + out, err := clitestutil.ExecTestCLICmd(clientCtx, rewardcli.GetClaimPeriodRewardDistributionCmd(), append(tc.args, []string{fmt.Sprintf("--%s=json", cmtcli.OutputFlag)}...)) if len(tc.expectErrMsg) > 0 { s.Assert().EqualError(err, tc.expectErrMsg) } else if tc.byId { @@ -681,12 +683,12 @@ func (s *IntegrationTestSuite) TestGetCmdRewardProgramAdd() { args := []string{ fmt.Sprintf("--%s=%s", flags.FlagFrom, s.network.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), } tc.args = append(tc.args, args...) - out, err := clitestutil.ExecTestCLICmd(clientCtx, rewardcli.GetCmdRewardProgramAdd(), append(tc.args, []string{fmt.Sprintf("--%s=json", tmcli.OutputFlag)}...)) + out, err := clitestutil.ExecTestCLICmd(clientCtx, rewardcli.GetCmdRewardProgramAdd(), append(tc.args, []string{fmt.Sprintf("--%s=json", cmtcli.OutputFlag)}...)) var response sdk.TxResponse marshalErr := clientCtx.Codec.UnmarshalJSON(out.Bytes(), &response) if len(tc.expectErrMsg) > 0 { @@ -726,8 +728,8 @@ func (s *IntegrationTestSuite) TestTxClaimReward() { args := []string{ fmt.Sprintf("--%s=%s", flags.FlagFrom, s.network.Validators[0].Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), } args = append(args, tc.claimRewardArg) out, err := clitestutil.ExecTestCLICmd(clientCtx, rewardcli.GetCmdClaimReward(), args) @@ -798,8 +800,8 @@ func (s *IntegrationTestSuite) TestTxEndRewardProgram() { args := []string{ fmt.Sprintf("--%s=%s", flags.FlagFrom, tc.signer), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), } args = append(args, tc.endRewardProgramId) out, err := clitestutil.ExecTestCLICmd(clientCtx, rewardcli.GetCmdEndRewardProgram(), args) @@ -905,7 +907,7 @@ func (s *IntegrationTestSuite) TestQueryAllRewardsPerAddress() { s.Run(tc.name, func() { clientCtx := s.network.Validators[0].ClientCtx - args := []string{tc.addressArg, tc.stateArg, fmt.Sprintf("--%s=json", tmcli.OutputFlag)} + args := []string{tc.addressArg, tc.stateArg, fmt.Sprintf("--%s=json", cmtcli.OutputFlag)} out, err := clitestutil.ExecTestCLICmd(clientCtx, rewardcli.GetRewardsByAddressCmd(), args) if len(tc.expectErrMsg) > 0 { s.Assert().EqualError(err, tc.expectErrMsg) diff --git a/x/reward/client/cli/query.go b/x/reward/client/cli/query.go index 1d05575a7a..76ec2212ae 100644 --- a/x/reward/client/cli/query.go +++ b/x/reward/client/cli/query.go @@ -174,7 +174,7 @@ func outputClaimPeriodRewardDistributionAll(cmd *cobra.Command) error { if err != nil { return err } - pageReq, err := client.ReadPageRequestWithPageKeyDecoded(cmd.Flags()) + pageReq, err := client.ReadPageRequest(cmd.Flags()) // TODO[1760]: cli: ReadPageRequestWithPageKeyDecoded if err != nil { return err } diff --git a/x/reward/handler.go b/x/reward/handler.go index 75a23b6414..592198df94 100644 --- a/x/reward/handler.go +++ b/x/reward/handler.go @@ -9,7 +9,8 @@ import ( ) // NewHandler returns a handler for reward messages. -func NewHandler(k keeper.Keeper) sdk.Handler { +// TODO[1760]: reward: Delete the reward NewHandler. +func NewHandler(k keeper.Keeper) func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { msgServer := keeper.NewMsgServerImpl(k) return func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { diff --git a/x/reward/keeper/claim_reward_distribution.go b/x/reward/keeper/claim_reward_distribution.go index 35568e8183..cfd88596e5 100644 --- a/x/reward/keeper/claim_reward_distribution.go +++ b/x/reward/keeper/claim_reward_distribution.go @@ -1,6 +1,8 @@ package keeper import ( + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/provenance-io/provenance/x/reward/types" @@ -28,7 +30,7 @@ func (k Keeper) GetClaimPeriodRewardDistribution(ctx sdk.Context, claimPeriodID // IterateClaimPeriodRewardDistributions iterates all epoch reward distributions with the given handler function. func (k Keeper) IterateClaimPeriodRewardDistributions(ctx sdk.Context, handle func(ClaimPeriodRewardDistribution types.ClaimPeriodRewardDistribution) (stop bool)) error { store := ctx.KVStore(k.storeKey) - iterator := sdk.KVStorePrefixIterator(store, types.ClaimPeriodRewardDistributionKeyPrefix) + iterator := storetypes.KVStorePrefixIterator(store, types.ClaimPeriodRewardDistributionKeyPrefix) defer iterator.Close() for ; iterator.Valid(); iterator.Next() { diff --git a/x/reward/keeper/keeper.go b/x/reward/keeper/keeper.go index b6df111153..6f77f57b4b 100644 --- a/x/reward/keeper/keeper.go +++ b/x/reward/keeper/keeper.go @@ -2,7 +2,7 @@ package keeper import ( "github.com/cosmos/cosmos-sdk/codec" - storetypes "github.com/cosmos/cosmos-sdk/store/types" + storetypes "cosmossdk.io/store/types" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper" diff --git a/x/reward/keeper/keeper_test.go b/x/reward/keeper/keeper_test.go index 27aef63a79..c45701612e 100644 --- a/x/reward/keeper/keeper_test.go +++ b/x/reward/keeper/keeper_test.go @@ -5,19 +5,22 @@ import ( "testing" "time" + "github.com/stretchr/testify/suite" + + cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" + + sdkmath "cosmossdk.io/math" + "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/crypto/keyring" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/bank/testutil" "github.com/provenance-io/provenance/app" simapp "github.com/provenance-io/provenance/app" "github.com/provenance-io/provenance/x/reward" "github.com/provenance-io/provenance/x/reward/types" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/suite" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" ) var ( @@ -30,7 +33,8 @@ type KeeperTestSuite struct { app *simapp.App ctx sdk.Context queryClient types.QueryClient - handler sdk.Handler + // TODO[1760]: reward: Get rid of this reward handler and call the desired keeper endpoints directly in these tests. + handler func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) accountAddr sdk.AccAddress accountKey *secp256k1.PrivKey @@ -53,9 +57,9 @@ func (s *KeeperTestSuite) SetupTest() { s.app = app.Setup(s.T()) s.CreateAccounts(4) s.handler = reward.NewHandler(s.app.RewardKeeper) - s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{Time: time.Now().UTC()}) + s.ctx = s.app.BaseApp.NewContextLegacy(false, cmtproto.Header{Time: time.Now().UTC()}) s.createTestValidators(10) - s.Require().NoError(testutil.FundModuleAccount(s.app.BankKeeper, s.ctx, types.ModuleName, sdk.NewCoins(sdk.NewInt64Coin("nhash", 10000000000000))), "funding module") + s.Require().NoError(testutil.FundModuleAccount(s.ctx, s.app.BankKeeper, types.ModuleName, sdk.NewCoins(sdk.NewInt64Coin("nhash", 10000000000000))), "funding module") queryHelper := baseapp.NewQueryServerTestHelper(s.ctx, s.app.InterfaceRegistry()) types.RegisterQueryServer(queryHelper, s.app.RewardKeeper) @@ -96,8 +100,8 @@ func (s *KeeperTestSuite) TestDelegateAgainstInactiveRewardPrograms() { action := types.NewActionDelegate() action.MaximumActions = 10 action.MinimumActions = 1 - action.MinimumActiveStakePercentile = sdk.NewDecWithPrec(0, 0) - action.MaximumActiveStakePercentile = sdk.NewDecWithPrec(1, 0) + action.MinimumActiveStakePercentile = sdkmath.LegacyNewDecWithPrec(0, 0) + action.MaximumActiveStakePercentile = sdkmath.LegacyNewDecWithPrec(1, 0) minimumDelegation := sdk.NewInt64Coin("nhash", 0) maximumDelegation := sdk.NewInt64Coin("nhash", 10) action.MinimumDelegationAmount = &minimumDelegation @@ -127,8 +131,8 @@ func (s *KeeperTestSuite) TestDelegateAgainstInactiveRewardPrograms() { MaximumActions: 10, MinimumDelegationAmount: &minimumDelegation, MaximumDelegationAmount: &maximumDelegation, - MinimumActiveStakePercentile: sdk.NewDecWithPrec(0, 0), - MaximumActiveStakePercentile: sdk.NewDecWithPrec(1, 0), + MinimumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(0, 0), + MaximumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(1, 0), }, }, }, @@ -167,8 +171,8 @@ func (s *KeeperTestSuite) TestNonDelegateAgainstRewardProgram() { action := types.NewActionDelegate() action.MaximumActions = 10 action.MinimumActions = 1 - action.MinimumActiveStakePercentile = sdk.NewDecWithPrec(0, 0) - action.MaximumActiveStakePercentile = sdk.NewDecWithPrec(1, 0) + action.MinimumActiveStakePercentile = sdkmath.LegacyNewDecWithPrec(0, 0) + action.MaximumActiveStakePercentile = sdkmath.LegacyNewDecWithPrec(1, 0) minimumDelegation := sdk.NewInt64Coin("nhash", 0) maximumDelegation := sdk.NewInt64Coin("nhash", 10) action.MinimumDelegationAmount = &minimumDelegation @@ -198,8 +202,8 @@ func (s *KeeperTestSuite) TestNonDelegateAgainstRewardProgram() { MaximumActions: 10, MinimumDelegationAmount: &minimumDelegation, MaximumDelegationAmount: &maximumDelegation, - MinimumActiveStakePercentile: sdk.NewDecWithPrec(0, 0), - MaximumActiveStakePercentile: sdk.NewDecWithPrec(1, 0), + MinimumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(0, 0), + MaximumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(1, 0), }, }, }, @@ -274,8 +278,8 @@ func (s *KeeperTestSuite) TestSingleDelegate() { action := types.NewActionDelegate() action.MaximumActions = 10 action.MinimumActions = 1 - action.MinimumActiveStakePercentile = sdk.NewDecWithPrec(0, 0) - action.MaximumActiveStakePercentile = sdk.NewDecWithPrec(1, 0) + action.MinimumActiveStakePercentile = sdkmath.LegacyNewDecWithPrec(0, 0) + action.MaximumActiveStakePercentile = sdkmath.LegacyNewDecWithPrec(1, 0) minimumDelegation := sdk.NewInt64Coin("nhash", 0) maximumDelegation := sdk.NewInt64Coin("nhash", 100) @@ -306,8 +310,8 @@ func (s *KeeperTestSuite) TestSingleDelegate() { MaximumActions: 10, MinimumDelegationAmount: &minimumDelegation, MaximumDelegationAmount: &maximumDelegation, - MinimumActiveStakePercentile: sdk.NewDecWithPrec(0, 0), - MaximumActiveStakePercentile: sdk.NewDecWithPrec(1, 0), + MinimumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(0, 0), + MaximumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(1, 0), }, }, }, @@ -340,8 +344,8 @@ func (s *KeeperTestSuite) TestMultipleDelegate() { action := types.NewActionDelegate() action.MaximumActions = 10 action.MinimumActions = 1 - action.MinimumActiveStakePercentile = sdk.NewDecWithPrec(0, 0) - action.MaximumActiveStakePercentile = sdk.NewDecWithPrec(1, 0) + action.MinimumActiveStakePercentile = sdkmath.LegacyNewDecWithPrec(0, 0) + action.MaximumActiveStakePercentile = sdkmath.LegacyNewDecWithPrec(1, 0) minimumDelegation := sdk.NewInt64Coin("nhash", 0) maximumDelegation := sdk.NewInt64Coin("nhash", 100) @@ -372,8 +376,8 @@ func (s *KeeperTestSuite) TestMultipleDelegate() { MaximumActions: 10, MinimumDelegationAmount: &minimumDelegation, MaximumDelegationAmount: &maximumDelegation, - MinimumActiveStakePercentile: sdk.NewDecWithPrec(0, 0), - MaximumActiveStakePercentile: sdk.NewDecWithPrec(1, 0), + MinimumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(0, 0), + MaximumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(1, 0), }, }, }, @@ -407,8 +411,8 @@ func (s *KeeperTestSuite) TestDelegateBelowMinimumActions() { action := types.NewActionDelegate() action.MaximumActions = 10 action.MinimumActions = 1 - action.MinimumActiveStakePercentile = sdk.NewDecWithPrec(0, 0) - action.MaximumActiveStakePercentile = sdk.NewDecWithPrec(1, 0) + action.MinimumActiveStakePercentile = sdkmath.LegacyNewDecWithPrec(0, 0) + action.MaximumActiveStakePercentile = sdkmath.LegacyNewDecWithPrec(1, 0) minimumDelegation := sdk.NewInt64Coin("nhash", 0) maximumDelegation := sdk.NewInt64Coin("nhash", 100) @@ -439,8 +443,8 @@ func (s *KeeperTestSuite) TestDelegateBelowMinimumActions() { MaximumActions: 20, MinimumDelegationAmount: &minimumDelegation, MaximumDelegationAmount: &maximumDelegation, - MinimumActiveStakePercentile: sdk.NewDecWithPrec(0, 0), - MaximumActiveStakePercentile: sdk.NewDecWithPrec(7, 1), + MinimumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(0, 0), + MaximumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(7, 1), }, }, }, @@ -499,8 +503,8 @@ func (s *KeeperTestSuite) TestDelegateAboveMaximumActions() { MaximumActions: 0, MinimumDelegationAmount: &minimumDelegation, MaximumDelegationAmount: &maximumDelegation, - MinimumActiveStakePercentile: sdk.NewDecWithPrec(0, 0), - MaximumActiveStakePercentile: sdk.NewDecWithPrec(1, 0), + MinimumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(0, 0), + MaximumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(1, 0), }, }, }, @@ -535,8 +539,8 @@ func (s *KeeperTestSuite) TestDelegateBelowMinimumDelegation() { action := types.NewActionDelegate() action.MaximumActions = 10 action.MinimumActions = 1 - action.MinimumActiveStakePercentile = sdk.NewDecWithPrec(0, 0) - action.MaximumActiveStakePercentile = sdk.NewDecWithPrec(1, 0) + action.MinimumActiveStakePercentile = sdkmath.LegacyNewDecWithPrec(0, 0) + action.MaximumActiveStakePercentile = sdkmath.LegacyNewDecWithPrec(1, 0) minimumDelegation := sdk.NewInt64Coin("nhash", 100) maximumDelegation := sdk.NewInt64Coin("nhash", 200) @@ -567,8 +571,8 @@ func (s *KeeperTestSuite) TestDelegateBelowMinimumDelegation() { MaximumActions: 10, MinimumDelegationAmount: &minimumDelegation, MaximumDelegationAmount: &maximumDelegation, - MinimumActiveStakePercentile: sdk.NewDecWithPrec(0, 0), - MaximumActiveStakePercentile: sdk.NewDecWithPrec(1, 0), + MinimumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(0, 0), + MaximumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(1, 0), }, }, }, @@ -603,8 +607,8 @@ func (s *KeeperTestSuite) TestDelegateAboveMaximumDelegation() { action := types.NewActionDelegate() action.MaximumActions = 10 action.MinimumActions = 1 - action.MinimumActiveStakePercentile = sdk.NewDecWithPrec(0, 0) - action.MaximumActiveStakePercentile = sdk.NewDecWithPrec(1, 0) + action.MinimumActiveStakePercentile = sdkmath.LegacyNewDecWithPrec(0, 0) + action.MaximumActiveStakePercentile = sdkmath.LegacyNewDecWithPrec(1, 0) minimumDelegation := sdk.NewInt64Coin("nhash", 0) maximumDelegation := sdk.NewInt64Coin("nhash", 50) @@ -635,8 +639,8 @@ func (s *KeeperTestSuite) TestDelegateAboveMaximumDelegation() { MaximumActions: 10, MinimumDelegationAmount: &minimumDelegation, MaximumDelegationAmount: &maximumDelegation, - MinimumActiveStakePercentile: sdk.NewDecWithPrec(0, 0), - MaximumActiveStakePercentile: sdk.NewDecWithPrec(1, 0), + MinimumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(0, 0), + MaximumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(1, 0), }, }, }, @@ -671,8 +675,8 @@ func (s *KeeperTestSuite) TestDelegateBelowMinimumPercentile() { action := types.NewActionDelegate() action.MaximumActions = 10 action.MinimumActions = 1 - action.MinimumActiveStakePercentile = sdk.NewDecWithPrec(0, 0) - action.MaximumActiveStakePercentile = sdk.NewDecWithPrec(1, 0) + action.MinimumActiveStakePercentile = sdkmath.LegacyNewDecWithPrec(0, 0) + action.MaximumActiveStakePercentile = sdkmath.LegacyNewDecWithPrec(1, 0) minimumDelegation := sdk.NewInt64Coin("nhash", 0) maximumDelegation := sdk.NewInt64Coin("nhash", 100) @@ -703,8 +707,8 @@ func (s *KeeperTestSuite) TestDelegateBelowMinimumPercentile() { MaximumActions: 10, MinimumDelegationAmount: &minimumDelegation, MaximumDelegationAmount: &maximumDelegation, - MinimumActiveStakePercentile: sdk.NewDecWithPrec(7, 1), - MaximumActiveStakePercentile: sdk.NewDecWithPrec(1, 0), + MinimumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(7, 1), + MaximumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(1, 0), }, }, }, @@ -739,8 +743,8 @@ func (s *KeeperTestSuite) TestDelegateAboveMaximumPercentile() { action := types.NewActionDelegate() action.MaximumActions = 10 action.MinimumActions = 1 - action.MinimumActiveStakePercentile = sdk.NewDecWithPrec(0, 0) - action.MaximumActiveStakePercentile = sdk.NewDecWithPrec(1, 0) + action.MinimumActiveStakePercentile = sdkmath.LegacyNewDecWithPrec(0, 0) + action.MaximumActiveStakePercentile = sdkmath.LegacyNewDecWithPrec(1, 0) minimumDelegation := sdk.NewInt64Coin("nhash", 0) maximumDelegation := sdk.NewInt64Coin("nhash", 100) @@ -771,8 +775,8 @@ func (s *KeeperTestSuite) TestDelegateAboveMaximumPercentile() { MaximumActions: 10, MinimumDelegationAmount: &minimumDelegation, MaximumDelegationAmount: &maximumDelegation, - MinimumActiveStakePercentile: sdk.NewDecWithPrec(0, 0), - MaximumActiveStakePercentile: sdk.NewDecWithPrec(2, 1), + MinimumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(0, 0), + MaximumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(2, 1), }, }, }, diff --git a/x/reward/keeper/msg_server_test.go b/x/reward/keeper/msg_server_test.go index d522b6d636..8381f5b949 100644 --- a/x/reward/keeper/msg_server_test.go +++ b/x/reward/keeper/msg_server_test.go @@ -3,6 +3,8 @@ package keeper_test import ( "time" + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/bank/testutil" @@ -13,7 +15,7 @@ func (s *KeeperTestSuite) TestCreateRewardProgramTransaction() { minimumDelegation := sdk.NewInt64Coin("nhash", 100) maximumDelegation := sdk.NewInt64Coin("nhash", 200) - s.Require().NoError(testutil.FundAccount(s.app.BankKeeper, s.ctx, s.accountAddresses[0], sdk.NewCoins(sdk.NewInt64Coin("nhash", 100000))), "funding account") + s.Require().NoError(testutil.FundAccount(s.ctx, s.app.BankKeeper, s.accountAddresses[0], sdk.NewCoins(sdk.NewInt64Coin("nhash", 100000))), "funding account") msg := types.NewMsgCreateRewardProgramRequest( "title", @@ -34,8 +36,8 @@ func (s *KeeperTestSuite) TestCreateRewardProgramTransaction() { MaximumActions: 10, MinimumDelegationAmount: &minimumDelegation, MaximumDelegationAmount: &maximumDelegation, - MinimumActiveStakePercentile: sdk.NewDecWithPrec(0, 0), - MaximumActiveStakePercentile: sdk.NewDecWithPrec(1, 0), + MinimumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(0, 0), + MaximumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(1, 0), }, }, }, @@ -48,8 +50,8 @@ func (s *KeeperTestSuite) TestCreateRewardProgramTransaction() { s.Assert().Less(0, len(result.GetEvents()), "should have emitted events") s.Assert().Equal(result.Events[len(result.Events)-1].Type, "reward_program_created", "emitted event should have correct event type") s.Assert().Equal(1, len(result.Events[len(result.Events)-1].Attributes), "emitted event should have correct event number of attributes") - s.Assert().Equal(result.Events[len(result.Events)-1].Attributes[0].Key, []byte("reward_program_id"), "should have correct key") - s.Assert().Equal(result.Events[len(result.Events)-1].Attributes[0].Value, []byte("1"), "should have correct value") + s.Assert().Equal(result.Events[len(result.Events)-1].Attributes[0].Key, "reward_program_id", "should have correct key") + s.Assert().Equal(result.Events[len(result.Events)-1].Attributes[0].Value, "1", "should have correct value") program, err := s.app.RewardKeeper.GetRewardProgram(s.ctx, 1) s.Assert().NoError(err, "No error should be returned") @@ -80,8 +82,8 @@ func (s *KeeperTestSuite) TestCreateRewardProgramFailedTransaction() { MaximumActions: 10, MinimumDelegationAmount: &minimumDelegation, MaximumDelegationAmount: &maximumDelegation, - MinimumActiveStakePercentile: sdk.NewDecWithPrec(0, 0), - MaximumActiveStakePercentile: sdk.NewDecWithPrec(1, 0), + MinimumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(0, 0), + MaximumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(1, 0), }, }, }, @@ -130,8 +132,8 @@ func (s *KeeperTestSuite) TestRewardClaimTransaction() { MaximumActions: 1, MinimumDelegationAmount: &minDelegation, MaximumDelegationAmount: &maxDelegation, - MinimumActiveStakePercentile: sdk.NewDecWithPrec(0, 0), - MaximumActiveStakePercentile: sdk.NewDecWithPrec(1, 0), + MinimumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(0, 0), + MaximumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(1, 0), }, }, }, @@ -158,10 +160,10 @@ func (s *KeeperTestSuite) TestRewardClaimTransaction() { s.Assert().Less(0, len(result.GetEvents()), "should have emitted events") s.Assert().Equal(result.Events[len(result.Events)-1].Type, "claim_rewards", "emitted event should have correct event type") s.Assert().Equal(2, len(result.Events[len(result.Events)-1].Attributes), "emitted event should have correct number of attributes") - s.Assert().Equal(result.Events[len(result.Events)-1].Attributes[0].Key, []byte("reward_program_id"), "should have correct key") - s.Assert().Equal(result.Events[len(result.Events)-1].Attributes[0].Value, []byte("1"), "should have correct program id") - s.Assert().Equal(result.Events[len(result.Events)-1].Attributes[1].Key, []byte("rewards_claim_address"), "should have correct key") - s.Assert().Equal(result.Events[len(result.Events)-1].Attributes[1].Value, []byte(s.accountAddresses[0].String()), "should have correct address value") + s.Assert().Equal(result.Events[len(result.Events)-1].Attributes[0].Key, "reward_program_id", "should have correct key") + s.Assert().Equal(result.Events[len(result.Events)-1].Attributes[0].Value, "1", "should have correct program id") + s.Assert().Equal(result.Events[len(result.Events)-1].Attributes[1].Key, "rewards_claim_address", "should have correct key") + s.Assert().Equal(result.Events[len(result.Events)-1].Attributes[1].Value, s.accountAddresses[0].String(), "should have correct address value") } func (s *KeeperTestSuite) TestRewardClaimInvalidTransaction() { @@ -206,8 +208,8 @@ func (s *KeeperTestSuite) TestRewardClaimTransactionInvalidClaimer() { MaximumActions: 1, MinimumDelegationAmount: &minDelegation, MaximumDelegationAmount: &maxDelegation, - MinimumActiveStakePercentile: sdk.NewDecWithPrec(0, 0), - MaximumActiveStakePercentile: sdk.NewDecWithPrec(1, 0), + MinimumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(0, 0), + MaximumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(1, 0), }, }, }, @@ -271,8 +273,8 @@ func (s *KeeperTestSuite) TestClaimAllRewardsTransaction() { MaximumActions: 1, MinimumDelegationAmount: &minDelegation, MaximumDelegationAmount: &maxDelegation, - MinimumActiveStakePercentile: sdk.NewDecWithPrec(0, 0), - MaximumActiveStakePercentile: sdk.NewDecWithPrec(1, 0), + MinimumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(0, 0), + MaximumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(1, 0), }, }, }, @@ -356,8 +358,8 @@ func (s *KeeperTestSuite) TestRewardClaimAllRewardsInvalidAddressTransaction() { MaximumActions: 1, MinimumDelegationAmount: &minDelegation, MaximumDelegationAmount: &maxDelegation, - MinimumActiveStakePercentile: sdk.NewDecWithPrec(0, 0), - MaximumActiveStakePercentile: sdk.NewDecWithPrec(1, 0), + MinimumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(0, 0), + MaximumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(1, 0), }, }, }, @@ -416,8 +418,8 @@ func (s *KeeperTestSuite) TestClaimAllRewardsExpiredTransaction() { MaximumActions: 1, MinimumDelegationAmount: &minDelegation, MaximumDelegationAmount: &maxDelegation, - MinimumActiveStakePercentile: sdk.NewDecWithPrec(0, 0), - MaximumActiveStakePercentile: sdk.NewDecWithPrec(1, 0), + MinimumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(0, 0), + MaximumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(1, 0), }, }, }, diff --git a/x/reward/keeper/query_server.go b/x/reward/keeper/query_server.go index 2c82ba905a..1c18ccb98f 100644 --- a/x/reward/keeper/query_server.go +++ b/x/reward/keeper/query_server.go @@ -7,7 +7,7 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "github.com/cosmos/cosmos-sdk/store/prefix" + "cosmossdk.io/store/prefix" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/types/query" diff --git a/x/reward/keeper/query_server_test.go b/x/reward/keeper/query_server_test.go index 29b67396a6..e1abae2da7 100644 --- a/x/reward/keeper/query_server_test.go +++ b/x/reward/keeper/query_server_test.go @@ -21,8 +21,8 @@ func (s *KeeperTestSuite) TestQueryRewardPrograms() { "description", 1, s.accountAddr.String(), - sdk.NewCoin("nhash", sdk.NewInt(1000_000_000_000)), - sdk.NewCoin("nhash", sdk.NewInt(10_000_000_000)), + sdk.NewInt64Coin("nhash", 1000_000_000_000), + sdk.NewInt64Coin("nhash", 10_000_000_000), time.Now().Add(100*time.Millisecond), uint64(30), 10, @@ -34,7 +34,7 @@ func (s *KeeperTestSuite) TestQueryRewardPrograms() { Transfer: &types.ActionTransfer{ MinimumActions: 0, MaximumActions: 10, - MinimumDelegationAmount: sdk.NewCoin("nhash", sdk.ZeroInt()), + MinimumDelegationAmount: sdk.NewInt64Coin("nhash", 0), }, }, }, @@ -137,8 +137,8 @@ func (s *KeeperTestSuite) TestRewardDistributionsByAddress() { "description", 1, s.accountAddr.String(), - sdk.NewCoin("nhash", sdk.NewInt(1000_000_000_000)), - sdk.NewCoin("nhash", sdk.NewInt(10_000_000_000)), + sdk.NewInt64Coin("nhash", 1000_000_000_000), + sdk.NewInt64Coin("nhash", 10_000_000_000), time.Now().Add(100*time.Millisecond), uint64(30), 10, @@ -150,7 +150,7 @@ func (s *KeeperTestSuite) TestRewardDistributionsByAddress() { Transfer: &types.ActionTransfer{ MinimumActions: 0, MaximumActions: 10, - MinimumDelegationAmount: sdk.NewCoin("nhash", sdk.ZeroInt()), + MinimumDelegationAmount: sdk.NewInt64Coin("nhash", 0), }, }, }, diff --git a/x/reward/keeper/reward_account_state.go b/x/reward/keeper/reward_account_state.go index 0669758e4f..3a52d4a806 100644 --- a/x/reward/keeper/reward_account_state.go +++ b/x/reward/keeper/reward_account_state.go @@ -1,6 +1,8 @@ package keeper import ( + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/provenance-io/provenance/x/reward/types" @@ -36,7 +38,7 @@ func (k Keeper) SetRewardAccountState(ctx sdk.Context, state types.RewardAccount // IterateRewardAccountStates Iterates over the account states for a reward program's claim period func (k Keeper) IterateRewardAccountStates(ctx sdk.Context, rewardProgramID, rewardClaimPeriodID uint64, handle func(state types.RewardAccountState) (stop bool)) error { store := ctx.KVStore(k.storeKey) - iterator := sdk.KVStorePrefixIterator(store, types.GetRewardAccountStateClaimPeriodKey(rewardProgramID, rewardClaimPeriodID)) + iterator := storetypes.KVStorePrefixIterator(store, types.GetRewardAccountStateClaimPeriodKey(rewardProgramID, rewardClaimPeriodID)) defer iterator.Close() for ; iterator.Valid(); iterator.Next() { @@ -54,19 +56,19 @@ func (k Keeper) IterateRewardAccountStates(ctx sdk.Context, rewardProgramID, rew // IterateRewardAccountStatesByAddress Iterates over the account states by address iterator func (k Keeper) IterateRewardAccountStatesByAddress(ctx sdk.Context, addr sdk.AccAddress, handle func(state types.RewardAccountState) (stop bool)) error { store := ctx.KVStore(k.storeKey) - iterator := sdk.KVStorePrefixIterator(store, types.GetAllRewardAccountByAddressPartialKey(types.MustAccAddressFromBech32(addr.String()))) + iterator := storetypes.KVStorePrefixIterator(store, types.GetAllRewardAccountByAddressPartialKey(types.MustAccAddressFromBech32(addr.String()))) return k.IterateRewardAccountStatesByLookUpIndex(ctx, addr, iterator, handle) } // IterateRewardAccountStatesByAddressAndRewardsID Iterates over the account states by address iterator and reward id func (k Keeper) IterateRewardAccountStatesByAddressAndRewardsID(ctx sdk.Context, addr sdk.AccAddress, rewardsID uint64, handle func(state types.RewardAccountState) (stop bool)) error { store := ctx.KVStore(k.storeKey) - iterator := sdk.KVStorePrefixIterator(store, types.GetAllRewardAccountByAddressAndRewardsIDPartialKey(addr, rewardsID)) + iterator := storetypes.KVStorePrefixIterator(store, types.GetAllRewardAccountByAddressAndRewardsIDPartialKey(addr, rewardsID)) return k.IterateRewardAccountStatesByLookUpIndex(ctx, addr, iterator, handle) } // IterateRewardAccountStatesByLookUpIndex iterates reward account states by secondary index // [0x8] :: [addr-bytes::reward program id bytes]::[claim period id bytes] {} -func (k Keeper) IterateRewardAccountStatesByLookUpIndex(ctx sdk.Context, addr sdk.AccAddress, iterator sdk.Iterator, handle func(state types.RewardAccountState) (stop bool)) error { +func (k Keeper) IterateRewardAccountStatesByLookUpIndex(ctx sdk.Context, addr sdk.AccAddress, iterator storetypes.Iterator, handle func(state types.RewardAccountState) (stop bool)) error { defer iterator.Close() for ; iterator.Valid(); iterator.Next() { keyParsed, err := types.ParseRewardAccountLookUpKey(iterator.Key(), addr) @@ -87,7 +89,7 @@ func (k Keeper) IterateRewardAccountStatesByLookUpIndex(ctx sdk.Context, addr sd // IterateAllRewardAccountStates Iterates over the account states for every reward program func (k Keeper) IterateAllRewardAccountStates(ctx sdk.Context, handle func(state types.RewardAccountState) (stop bool)) error { store := ctx.KVStore(k.storeKey) - iterator := sdk.KVStorePrefixIterator(store, types.GetAllRewardAccountStateKey()) + iterator := storetypes.KVStorePrefixIterator(store, types.GetAllRewardAccountStateKey()) defer iterator.Close() for ; iterator.Valid(); iterator.Next() { @@ -105,7 +107,7 @@ func (k Keeper) IterateAllRewardAccountStates(ctx sdk.Context, handle func(state // IterateRewardAccountStatesForRewardProgram Iterates over the account states for a reward program func (k Keeper) IterateRewardAccountStatesForRewardProgram(ctx sdk.Context, rewardProgramID uint64, handle func(state types.RewardAccountState) (stop bool)) error { store := ctx.KVStore(k.storeKey) - iterator := sdk.KVStorePrefixIterator(store, types.GetRewardProgramRewardAccountStateKey(rewardProgramID)) + iterator := storetypes.KVStorePrefixIterator(store, types.GetRewardProgramRewardAccountStateKey(rewardProgramID)) defer iterator.Close() for ; iterator.Valid(); iterator.Next() { diff --git a/x/reward/keeper/reward_account_state_test.go b/x/reward/keeper/reward_account_state_test.go index 68ae2fa05e..b0dccb4b69 100644 --- a/x/reward/keeper/reward_account_state_test.go +++ b/x/reward/keeper/reward_account_state_test.go @@ -2,7 +2,7 @@ package keeper_test import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/tendermint/tendermint/crypto/secp256k1" + "github.com/cometbft/cometbft/crypto/secp256k1" "github.com/provenance-io/provenance/x/reward/types" ) diff --git a/x/reward/keeper/reward_claim_test.go b/x/reward/keeper/reward_claim_test.go index b4df10f54c..aadd5170e1 100644 --- a/x/reward/keeper/reward_claim_test.go +++ b/x/reward/keeper/reward_claim_test.go @@ -1,6 +1,8 @@ package keeper_test import ( + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/provenance-io/provenance/x/reward/types" @@ -42,8 +44,8 @@ func (s *KeeperTestSuite) TestClaimRewards() { MaximumActions: 1, MinimumDelegationAmount: &minDelegation, MaximumDelegationAmount: &maxDelegation, - MinimumActiveStakePercentile: sdk.NewDecWithPrec(0, 0), - MaximumActiveStakePercentile: sdk.NewDecWithPrec(1, 0), + MinimumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(0, 0), + MaximumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(1, 0), }, }, }, @@ -210,8 +212,8 @@ func (s *KeeperTestSuite) TestClaimAllRewards() { MaximumActions: 1, MinimumDelegationAmount: &minDelegation, MaximumDelegationAmount: &maxDelegation, - MinimumActiveStakePercentile: sdk.NewDecWithPrec(0, 0), - MaximumActiveStakePercentile: sdk.NewDecWithPrec(1, 0), + MinimumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(0, 0), + MaximumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(1, 0), }, }, }, @@ -275,8 +277,8 @@ func (s *KeeperTestSuite) TestClaimAllRewardsExpired() { MaximumActions: 1, MinimumDelegationAmount: &minDelegation, MaximumDelegationAmount: &maxDelegation, - MinimumActiveStakePercentile: sdk.NewDecWithPrec(0, 0), - MaximumActiveStakePercentile: sdk.NewDecWithPrec(1, 0), + MinimumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(0, 0), + MaximumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(1, 0), }, }, }, diff --git a/x/reward/keeper/reward_program.go b/x/reward/keeper/reward_program.go index 552cf71de7..80eaf9e510 100644 --- a/x/reward/keeper/reward_program.go +++ b/x/reward/keeper/reward_program.go @@ -3,6 +3,8 @@ package keeper import ( "fmt" + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/provenance-io/provenance/x/reward/types" @@ -76,7 +78,7 @@ func (k Keeper) GetRewardProgram(ctx sdk.Context, id uint64) (rewardProgram type // IterateRewardPrograms iterates all reward programs with the given handler function. func (k Keeper) IterateRewardPrograms(ctx sdk.Context, handle func(rewardProgram types.RewardProgram) (stop bool, err error)) error { store := ctx.KVStore(k.storeKey) - iterator := sdk.KVStorePrefixIterator(store, types.RewardProgramKeyPrefix) + iterator := storetypes.KVStorePrefixIterator(store, types.RewardProgramKeyPrefix) defer iterator.Close() for ; iterator.Valid(); iterator.Next() { diff --git a/x/reward/keeper/reward_program_test.go b/x/reward/keeper/reward_program_test.go index 5e315796fc..5440d5f2a3 100644 --- a/x/reward/keeper/reward_program_test.go +++ b/x/reward/keeper/reward_program_test.go @@ -4,6 +4,8 @@ import ( "strings" "time" + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/bank/testutil" @@ -662,7 +664,7 @@ func (s *KeeperTestSuite) TestGetAllRewardProgramsEmpty() { } func (s *KeeperTestSuite) TestCreateRewardProgram() { - testutil.FundAccount(s.app.BankKeeper, s.ctx, s.accountAddresses[0], sdk.NewCoins(sdk.NewInt64Coin("nhash", 1000000000000))) + testutil.FundAccount(s.ctx, s.app.BankKeeper, s.accountAddresses[0], sdk.NewCoins(sdk.NewInt64Coin("nhash", 1000000000000))) err := s.app.RewardKeeper.CreateRewardProgram(s.ctx, types.RewardProgram{}) s.Assert().Error(err) @@ -697,8 +699,8 @@ func (s *KeeperTestSuite) TestCreateRewardProgram() { MaximumActions: 1, MinimumDelegationAmount: &minDelegation, MaximumDelegationAmount: &maxDelegation, - MinimumActiveStakePercentile: sdk.NewDecWithPrec(0, 0), - MaximumActiveStakePercentile: sdk.NewDecWithPrec(1, 0), + MinimumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(0, 0), + MaximumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(1, 0), }, }, }, @@ -739,8 +741,8 @@ func (s *KeeperTestSuite) TestCreateRewardProgram() { MaximumActions: 1, MinimumDelegationAmount: &minDelegation, MaximumDelegationAmount: &maxDelegation, - MinimumActiveStakePercentile: sdk.NewDecWithPrec(0, 0), - MaximumActiveStakePercentile: sdk.NewDecWithPrec(1, 0), + MinimumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(0, 0), + MaximumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(1, 0), }, }, }, @@ -782,8 +784,8 @@ func (s *KeeperTestSuite) TestCreateRewardProgram() { MaximumActions: 1, MinimumDelegationAmount: &minDelegation, MaximumDelegationAmount: &maxDelegation, - MinimumActiveStakePercentile: sdk.NewDecWithPrec(0, 0), - MaximumActiveStakePercentile: sdk.NewDecWithPrec(1, 0), + MinimumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(0, 0), + MaximumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(1, 0), }, }, }, diff --git a/x/reward/keeper/rules.go b/x/reward/keeper/rules.go index 973bbe82d1..1d18c09e64 100644 --- a/x/reward/keeper/rules.go +++ b/x/reward/keeper/rules.go @@ -18,7 +18,9 @@ import ( // This is similar to the ctx.CacheContext() function, but this keeps the history so we can act on it. func CacheContextWithHistory(ctx sdk.Context) (cc sdk.Context, writeCache func()) { cms := ctx.MultiStore().CacheMultiStore() - cc = ctx.WithMultiStore(cms).WithEventManager(sdk.NewEventManagerWithHistory(ctx.EventManager().GetABCIEventHistory())) + cc = ctx.WithMultiStore(cms) + // TODO[1760]: event-history: Put this back once the event history stuff is back in the SDK. + // cc = cc.WithEventManager(sdk.NewEventManagerWithHistory(ctx.EventManager().GetABCIEventHistory())) writeCache = func() { ctx.EventManager().EmitEvents(cc.EventManager().Events()) @@ -174,43 +176,45 @@ func (k Keeper) RewardShares(ctx sdk.Context, rewardProgram *types.RewardProgram // IterateABCIEvents Iterates through all the ABCIEvents that match the eventCriteria. // Nil criteria means to iterate over everything. func (k Keeper) IterateABCIEvents(ctx sdk.Context, criteria *types.EventCriteria, action func(string, *map[string][]byte) error) error { - for _, event := range ctx.EventManager().GetABCIEventHistory() { - event := event - - // Event type must match the criteria - // nil criteria is considered to match everything - if criteria != nil && !criteria.MatchesEvent(event.Type) { - continue - } + // TODO[1760]: event-history: Put this back once the event history stuff is back in the SDK. + /* + for _, event := range ctx.EventManager().GetABCIEventHistory() { + event := event + + // Event type must match the criteria + // nil criteria is considered to match everything + if criteria != nil && !criteria.MatchesEvent(event.Type) { + continue + } - // Convert the attributes into a map - attributes := make(map[string][]byte) - for _, attribute := range event.Attributes { - attributes[string(attribute.Key)] = attribute.Value - } + // Convert the attributes into a map + attributes := make(map[string][]byte) + for _, attribute := range event.Attributes { + attributes[string(attribute.Key)] = attribute.Value + } - valid := true - if criteria != nil { - // Ensure each attribute matches the required criteria - // If a single attribute does not match then we don't continue with the event - eventCriteria := criteria.Events[event.Type] - for key := range eventCriteria.Attributes { - valid = eventCriteria.MatchesAttribute(key, attributes[key]) - if !valid { - break + valid := true + if criteria != nil { + // Ensure each attribute matches the required criteria + // If a single attribute does not match then we don't continue with the event + eventCriteria := criteria.Events[event.Type] + for key := range eventCriteria.Attributes { + valid = eventCriteria.MatchesAttribute(key, attributes[key]) + if !valid { + break + } } } - } - if !valid { - continue - } + if !valid { + continue + } - err := action(event.Type, &attributes) - if err != nil { - return err + err := action(event.Type, &attributes) + if err != nil { + return err + } } - } - + */ return nil } diff --git a/x/reward/keeper/rules_test.go b/x/reward/keeper/rules_test.go index e9ac9953d8..77219de5c9 100644 --- a/x/reward/keeper/rules_test.go +++ b/x/reward/keeper/rules_test.go @@ -1,18 +1,20 @@ package keeper_test import ( + "context" "errors" + "fmt" "time" - sdksim "github.com/cosmos/cosmos-sdk/simapp" + sdkmath "cosmossdk.io/math" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/bank/testutil" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - "github.com/cosmos/cosmos-sdk/x/staking" "github.com/cosmos/cosmos-sdk/x/staking/keeper" - "github.com/cosmos/cosmos-sdk/x/staking/teststaking" + teststaking "github.com/cosmos/cosmos-sdk/x/staking/testutil" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + simapp "github.com/provenance-io/provenance/app" "github.com/provenance-io/provenance/x/reward/types" ) @@ -42,13 +44,13 @@ func setupEventHistory(s *KeeperTestSuite) { event2, event3, } - eventManagerStub := sdk.NewEventManagerWithHistory(loggedEvents.ToABCIEvents()) - s.ctx = s.ctx.WithEventManager(eventManagerStub) + SetupEventHistory(s, loggedEvents) } func SetupEventHistory(s *KeeperTestSuite, events sdk.Events) { - eventManagerStub := sdk.NewEventManagerWithHistory(events.ToABCIEvents()) - s.ctx = s.ctx.WithEventManager(eventManagerStub) + // TODO[1760]: event-history: Put this back once the event history stuff is back in the SDK. + // eventManagerStub := sdk.NewEventManagerWithHistory(events.ToABCIEvents()) + // s.ctx = s.ctx.WithEventManager(eventManagerStub) } // with delegate @@ -76,8 +78,7 @@ func SetupEventHistoryWithDelegates(s *KeeperTestSuite) { event3, event4, } - eventManagerStub := sdk.NewEventManagerWithHistory(loggedEvents.ToABCIEvents()) - s.ctx = s.ctx.WithEventManager(eventManagerStub) + SetupEventHistory(s, loggedEvents) } func (s *KeeperTestSuite) TestProcessTransactions() { @@ -88,7 +89,7 @@ func (s *KeeperTestSuite) TestProcessTransactions() { s.app.RewardKeeper.SetStakingKeeper(MockStakingKeeper{}) // Create a reward program - s.Require().NoError(testutil.FundAccount(s.app.BankKeeper, s.ctx, s.accountAddr, + s.Require().NoError(testutil.FundAccount(s.ctx, s.app.BankKeeper, s.accountAddr, sdk.NewCoins(sdk.NewInt64Coin("nhash", 1000000))), "funding accountAddr") minDel := sdk.NewInt64Coin("nhash", 1) maxDel := sdk.NewInt64Coin("nhash", 40) @@ -112,8 +113,8 @@ func (s *KeeperTestSuite) TestProcessTransactions() { MaximumActions: 1, MinimumDelegationAmount: &minDel, MaximumDelegationAmount: &maxDel, - MinimumActiveStakePercentile: sdk.NewDecWithPrec(0, 0), - MaximumActiveStakePercentile: sdk.NewDecWithPrec(1, 0), + MinimumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(0, 0), + MaximumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(1, 0), }, }, }, @@ -450,54 +451,56 @@ func (m MockAccountKeeper) GetModuleAddress(moduleName string) sdk.AccAddress { return nil } -func (m MockStakingKeeper) GetAllDelegatorDelegations(ctx sdk.Context, delegator sdk.AccAddress) []stakingtypes.Delegation { +func (m MockStakingKeeper) GetAllDelegatorDelegations(ctx context.Context, delegator sdk.AccAddress) ([]stakingtypes.Delegation, error) { if delegator.String() == "cosmos1v57fx2l2rt6ehujuu99u2fw05779m5e2ux4z2h" || delegator.String() == getOperatorBech32AddressForTestValidator().String() { return []stakingtypes.Delegation{ { DelegatorAddress: "cosmos1v57fx2l2rt6ehujuu99u2fw05779m5e2ux4z2h", ValidatorAddress: "cosmosvaloper15ky9du8a2wlstz6fpx3p4mqpjyrm5cgqh6tjun", - Shares: sdk.NewDec(3), + Shares: sdkmath.LegacyNewDec(3), }, - } + }, nil } return []stakingtypes.Delegation{ {}, - } - + }, fmt.Errorf("mock error: delegator %s not found", delegator) } -func (m MockStakingKeeper) GetDelegation(ctx sdk.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) (delegation stakingtypes.Delegation, found bool) { +func (m MockStakingKeeper) GetDelegation(ctx context.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) (delegation stakingtypes.Delegation, err error) { if delAddr.String() != "cosmos1v57fx2l2rt6ehujuu99u2fw05779m5e2ux4z2h" || valAddr.String() != "cosmosvaloper15ky9du8a2wlstz6fpx3p4mqpjyrm5cgqh6tjun" { - return stakingtypes.Delegation{}, false + return stakingtypes.Delegation{}, fmt.Errorf("mock error: delegator %s not found for %s", delAddr, valAddr) } return stakingtypes.Delegation{ DelegatorAddress: "cosmos1v57fx2l2rt6ehujuu99u2fw05779m5e2ux4z2h", ValidatorAddress: "cosmosvaloper15ky9du8a2wlstz6fpx3p4mqpjyrm5cgqh6tjun", - Shares: sdk.NewDec(3), - }, true + Shares: sdkmath.LegacyNewDec(3), + }, nil } -func (m MockStakingKeeper) GetLastValidatorPower(ctx sdk.Context, operator sdk.ValAddress) (power int64) { - validators := m.GetBondedValidatorsByPower(ctx) +func (m MockStakingKeeper) GetLastValidatorPower(ctx context.Context, operator sdk.ValAddress) (power int64, err error) { + validators, _ := m.GetBondedValidatorsByPower(ctx) for i, v := range validators { power := int64(len(validators) - i) - if v.GetOperator().String() == operator.String() { - return power + if v.GetOperator() == operator.String() { + return power, nil } } - return 0 + return 0, fmt.Errorf("mock error: operator not found %s", operator) } func (s *KeeperTestSuite) createTestValidators(amount int) { - addrDels := simapp.AddTestAddrsIncremental(s.app, s.ctx, amount, sdk.NewInt(10000)) - valAddrs := sdksim.ConvertAddrsToValAddrs(addrDels) + addrDels := simapp.AddTestAddrsIncremental(s.app, s.ctx, amount, sdkmath.NewInt(10000)) + valAddrs := simtestutil.ConvertAddrsToValAddrs(addrDels) + + bondDenom, err := s.app.StakingKeeper.BondDenom(s.ctx) + s.Require().NoError(err, "app.StakingKeeper.BondDenom(ctx)") - totalSupply := sdk.NewCoins(sdk.NewCoin(s.app.StakingKeeper.BondDenom(s.ctx), sdk.NewInt(1000000000))) + totalSupply := sdk.NewCoins(sdk.NewInt64Coin(bondDenom, 1_000_000_000)) notBondedPool := s.app.StakingKeeper.GetNotBondedPool(s.ctx) s.app.AccountKeeper.SetModuleAccount(s.ctx, notBondedPool) - s.Require().NoError(testutil.FundModuleAccount(s.app.BankKeeper, s.ctx, notBondedPool.GetName(), totalSupply), + s.Require().NoError(testutil.FundModuleAccount(s.ctx, s.app.BankKeeper, notBondedPool.GetName(), totalSupply), "funding %s with %s", notBondedPool.GetName(), totalSupply) var validators []stakingtypes.Validator @@ -505,12 +508,13 @@ func (s *KeeperTestSuite) createTestValidators(amount int) { validator := teststaking.NewValidator(s.T(), valAddrs[i], PKs[i]) tokens := s.app.StakingKeeper.TokensFromConsensusPower(s.ctx, int64(1+amount-i)) validator, _ = validator.AddTokensFromDel(tokens) - validator = keeper.TestingUpdateValidator(s.app.StakingKeeper, s.ctx, validator, true) + validator = keeper.TestingUpdateValidator(&s.app.StakingKeeper, s.ctx, validator, true) validators = append(validators, validator) // Create the delegations - bond := stakingtypes.NewDelegation(addrDels[i], valAddrs[i], sdk.NewDec(int64((i+1)*10))) - s.app.StakingKeeper.SetDelegation(s.ctx, bond) + bond := stakingtypes.NewDelegation(addrDels[i].String(), valAddrs[i].String(), sdkmath.LegacyNewDec(int64((i+1)*10))) + err = s.app.StakingKeeper.SetDelegation(s.ctx, bond) + s.Require().NoError(err, "SetDelegation %s", bond) // We want even validators to be bonded if i%2 == 0 { @@ -520,7 +524,8 @@ func (s *KeeperTestSuite) createTestValidators(amount int) { } } - staking.EndBlocker(s.ctx, s.app.StakingKeeper) + _, err = s.app.StakingKeeper.EndBlocker(s.ctx) + s.Require().NoError(err, "staking end blocker") testValidators = validators } @@ -533,10 +538,10 @@ func getTestValidators(start, end int) []stakingtypes.Validator { return validators } -func (m MockStakingKeeper) GetBondedValidatorsByPower(ctx sdk.Context) []stakingtypes.Validator { +func (m MockStakingKeeper) GetBondedValidatorsByPower(ctx context.Context) ([]stakingtypes.Validator, error) { validatorAddress, _ := sdk.ValAddressFromBech32("cosmosvaloper15ky9du8a2wlstz6fpx3p4mqpjyrm5cgqh6tjun") validator, _ := stakingtypes.NewValidator( - validatorAddress, + validatorAddress.String(), PKs[100], stakingtypes.Description{}, ) @@ -544,19 +549,20 @@ func (m MockStakingKeeper) GetBondedValidatorsByPower(ctx sdk.Context) []staking validators = append(validators, validator) validators = append(validators, getTestValidators(4, 6)...) - return validators + return validators, nil } -func (m MockStakingKeeper) GetValidator(ctx sdk.Context, addr sdk.ValAddress) (validator stakingtypes.Validator, found bool) { +func (m MockStakingKeeper) GetValidator(ctx context.Context, addr sdk.ValAddress) (validator stakingtypes.Validator, err error) { validators := getTestValidators(0, 9) + addrStr := addr.String() for _, v := range validators { - if addr.Equals(v.GetOperator()) { - return v, true + if addrStr == v.GetOperator() { + return v, nil } } - return stakingtypes.Validator{}, false + return stakingtypes.Validator{}, fmt.Errorf("mock error: validator not fount %s", addr) } func (s *KeeperTestSuite) TestActionDelegateEvaluatePasses() { @@ -568,8 +574,8 @@ func (s *KeeperTestSuite) TestActionDelegateEvaluatePasses() { maxDelegation := sdk.NewInt64Coin("nhash", 10) action.MinimumDelegationAmount = &minDelegation action.MaximumDelegationAmount = &maxDelegation - action.MinimumActiveStakePercentile = sdk.NewDecWithPrec(4, 1) - action.MaximumActiveStakePercentile = sdk.NewDecWithPrec(1, 0) + action.MinimumActiveStakePercentile = sdkmath.LegacyNewDecWithPrec(4, 1) + action.MaximumActiveStakePercentile = sdkmath.LegacyNewDecWithPrec(1, 0) keeperProvider := MockKeeperProvider{} state := types.NewRewardAccountState(0, 0, "", 0, []*types.ActionCounter{}) @@ -594,8 +600,8 @@ func (s *KeeperTestSuite) TestActionDelegateEvaluateFailsWhenMinimumActionsNotMe maxDelegation := sdk.NewInt64Coin("nhash", 10) action.MinimumDelegationAmount = &minDelegation action.MaximumDelegationAmount = &maxDelegation - action.MinimumActiveStakePercentile = sdk.NewDecWithPrec(5, 1) - action.MaximumActiveStakePercentile = sdk.NewDecWithPrec(1, 0) + action.MinimumActiveStakePercentile = sdkmath.LegacyNewDecWithPrec(5, 1) + action.MaximumActiveStakePercentile = sdkmath.LegacyNewDecWithPrec(1, 0) keeperProvider := MockKeeperProvider{} state := types.NewRewardAccountState(0, 0, "", 0, []*types.ActionCounter{}) @@ -619,8 +625,8 @@ func (s *KeeperTestSuite) TestActionDelegateEvaluateFailsWhenMaximumActionsNotMe maxDelegation := sdk.NewInt64Coin("nhash", 10) action.MinimumDelegationAmount = &minDelegation action.MaximumDelegationAmount = &maxDelegation - action.MinimumActiveStakePercentile = sdk.NewDecWithPrec(5, 1) - action.MaximumActiveStakePercentile = sdk.NewDecWithPrec(1, 0) + action.MinimumActiveStakePercentile = sdkmath.LegacyNewDecWithPrec(5, 1) + action.MaximumActiveStakePercentile = sdkmath.LegacyNewDecWithPrec(1, 0) keeperProvider := MockKeeperProvider{} state := types.NewRewardAccountState(0, 0, "", 0, []*types.ActionCounter{}) @@ -647,8 +653,8 @@ func (s *KeeperTestSuite) TestActionDelegateEvaluateFailsWhenMaximumDelegationAm maxDelegation := sdk.NewInt64Coin("nhash", 1) action.MinimumDelegationAmount = &minDelegation action.MaximumDelegationAmount = &maxDelegation - action.MinimumActiveStakePercentile = sdk.NewDecWithPrec(5, 1) - action.MaximumActiveStakePercentile = sdk.NewDecWithPrec(1, 0) + action.MinimumActiveStakePercentile = sdkmath.LegacyNewDecWithPrec(5, 1) + action.MaximumActiveStakePercentile = sdkmath.LegacyNewDecWithPrec(1, 0) keeperProvider := MockKeeperProvider{} state := types.NewRewardAccountState(0, 0, "", 0, []*types.ActionCounter{}) @@ -673,8 +679,8 @@ func (s *KeeperTestSuite) TestActionDelegateEvaluateFailsWhenMinimumDelegationAm maxDelegation := sdk.NewInt64Coin("nhash", 10) action.MinimumDelegationAmount = &minDelegation action.MaximumDelegationAmount = &maxDelegation - action.MinimumActiveStakePercentile = sdk.NewDecWithPrec(5, 1) - action.MaximumActiveStakePercentile = sdk.NewDecWithPrec(1, 0) + action.MinimumActiveStakePercentile = sdkmath.LegacyNewDecWithPrec(5, 1) + action.MaximumActiveStakePercentile = sdkmath.LegacyNewDecWithPrec(1, 0) keeperProvider := MockKeeperProvider{} state := types.NewRewardAccountState(0, 0, "", 0, []*types.ActionCounter{}) @@ -699,8 +705,8 @@ func (s *KeeperTestSuite) TestActionDelegateEvaluateFailsWhenMinimumActiveStakeP maxDelegation := sdk.NewInt64Coin("nhash", 10) action.MinimumDelegationAmount = &minDelegation action.MaximumDelegationAmount = &maxDelegation - action.MinimumActiveStakePercentile = sdk.NewDecWithPrec(11, 1) - action.MaximumActiveStakePercentile = sdk.NewDecWithPrec(1, 0) + action.MinimumActiveStakePercentile = sdkmath.LegacyNewDecWithPrec(11, 1) + action.MaximumActiveStakePercentile = sdkmath.LegacyNewDecWithPrec(1, 0) keeperProvider := MockKeeperProvider{} state := types.NewRewardAccountState(0, 0, "", 0, []*types.ActionCounter{}) @@ -725,8 +731,8 @@ func (s *KeeperTestSuite) TestActionDelegateEvaluateFailsWhenMaximumDelegationPe maxDelegation := sdk.NewInt64Coin("nhash", 10) action.MinimumDelegationAmount = &minDelegation action.MaximumDelegationAmount = &maxDelegation - action.MinimumActiveStakePercentile = sdk.NewDecWithPrec(5, 1) - action.MaximumActiveStakePercentile = sdk.NewDecWithPrec(1, 0) + action.MinimumActiveStakePercentile = sdkmath.LegacyNewDecWithPrec(5, 1) + action.MaximumActiveStakePercentile = sdkmath.LegacyNewDecWithPrec(1, 0) keeperProvider := MockKeeperProvider{} state := types.NewRewardAccountState(0, 0, "", 0, []*types.ActionCounter{}) @@ -788,8 +794,8 @@ func (s *KeeperTestSuite) TestDetectQualifyingActionsWith1QualifyingAction() { MaximumActions: 1, MinimumDelegationAmount: &minDelegation, MaximumDelegationAmount: &maxDelegation, - MinimumActiveStakePercentile: sdk.NewDecWithPrec(0, 0), - MaximumActiveStakePercentile: sdk.NewDecWithPrec(1, 0), + MinimumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(0, 0), + MaximumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(1, 0), }, }, }, @@ -827,8 +833,8 @@ func (s *KeeperTestSuite) TestDetectQualifyingActionsWith2QualifyingAction() { MaximumActions: 4, MinimumDelegationAmount: &minDelegation, MaximumDelegationAmount: &maxDelegation, - MinimumActiveStakePercentile: sdk.NewDecWithPrec(0, 0), - MaximumActiveStakePercentile: sdk.NewDecWithPrec(1, 0), + MinimumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(0, 0), + MaximumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(1, 0), }, }, }, @@ -839,8 +845,8 @@ func (s *KeeperTestSuite) TestDetectQualifyingActionsWith2QualifyingAction() { MaximumActions: 4, MinimumDelegationAmount: &minDelegation, MaximumDelegationAmount: &maxDelegation, - MinimumActiveStakePercentile: sdk.NewDecWithPrec(0, 0), - MaximumActiveStakePercentile: sdk.NewDecWithPrec(1, 0), + MinimumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(0, 0), + MaximumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(1, 0), }, }, }, @@ -903,8 +909,8 @@ func (s *KeeperTestSuite) TestDetectQualifyingActionsWithNoMatchingQualifyingAct MaximumActions: 1000, MinimumDelegationAmount: &minDelegation, MaximumDelegationAmount: &maxDelegation, - MinimumActiveStakePercentile: sdk.NewDecWithPrec(0, 0), - MaximumActiveStakePercentile: sdk.NewDecWithPrec(1, 0), + MinimumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(0, 0), + MaximumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(1, 0), }, }, }, @@ -1142,8 +1148,7 @@ func SetupEventHistoryWithTransfers(s *KeeperTestSuite) { event1, event2, } - eventManagerStub := sdk.NewEventManagerWithHistory(loggedEvents.ToABCIEvents()) - s.ctx = s.ctx.WithEventManager(eventManagerStub) + SetupEventHistory(s, loggedEvents) } // with vote @@ -1168,10 +1173,12 @@ func SetupEventHistoryWithVotes(s *KeeperTestSuite, sender string) { event2, event3, } - newEvents := loggedEvents.ToABCIEvents() - newEvents = append(newEvents, s.ctx.EventManager().GetABCIEventHistory()...) - eventManagerStub := sdk.NewEventManagerWithHistory(newEvents) - s.ctx = s.ctx.WithEventManager(eventManagerStub) + // TODO[1760]: event-history: Put this back once the event history stuff is back in the SDK. + _ = loggedEvents + // newEvents := loggedEvents.ToABCIEvents() + // newEvents = append(newEvents, s.ctx.EventManager().GetABCIEventHistory()...) + // eventManagerStub := sdk.NewEventManagerWithHistory(newEvents) + // s.ctx = s.ctx.WithEventManager(eventManagerStub) } // transfer @@ -1200,7 +1207,7 @@ func (s *KeeperTestSuite) TestFindQualifyingActionsWithVotes() { criteria := types.NewEventCriteria([]types.ABCIEvent{ { Type: sdk.EventTypeMessage, - Attributes: map[string][]byte{sdk.AttributeKeyModule: []byte(govtypes.AttributeValueCategory)}, + Attributes: map[string][]byte{sdk.AttributeKeyModule: []byte("governance")}, // TODO[1760]: reward: Ensure "governance" is still correct here. }, }) @@ -1440,8 +1447,8 @@ func (s *KeeperTestSuite) TestDetectQualifyingActionsWith1VotingDelegateQualifyi MaximumActions: 1, MinimumDelegationAmount: &minDelegation, MaximumDelegationAmount: &maxDelegation, - MinimumActiveStakePercentile: sdk.NewDecWithPrec(0, 0), - MaximumActiveStakePercentile: sdk.NewDecWithPrec(1, 0), + MinimumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(0, 0), + MaximumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(1, 0), }, }, }, @@ -1489,8 +1496,8 @@ func (s *KeeperTestSuite) TestDetectQualifyingActionsWith1Voting1DelegateQualify MaximumActions: 1, MinimumDelegationAmount: &minDelegation, MaximumDelegationAmount: &maxDelegation, - MinimumActiveStakePercentile: sdk.NewDecWithPrec(0, 0), - MaximumActiveStakePercentile: sdk.NewDecWithPrec(1, 0), + MinimumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(0, 0), + MaximumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(1, 0), }, }, }, diff --git a/x/reward/keeper/time_management.go b/x/reward/keeper/time_management.go index 92058f8549..7cdfb91095 100644 --- a/x/reward/keeper/time_management.go +++ b/x/reward/keeper/time_management.go @@ -4,6 +4,8 @@ import ( "fmt" "time" + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/provenance-io/provenance/x/reward/types" @@ -97,7 +99,7 @@ func (k Keeper) StartRewardProgramClaimPeriod(ctx sdk.Context, rewardProgram *ty } // Get the Claim Period Reward. It should not exceed program balance - claimPeriodAmount := rewardProgram.GetTotalRewardPool().Amount.Quo(sdk.NewInt(int64(rewardProgram.GetClaimPeriods()))) + claimPeriodAmount := rewardProgram.GetTotalRewardPool().Amount.Quo(sdkmath.NewInt(int64(rewardProgram.GetClaimPeriods()))) claimPeriodPool := sdk.NewCoin(rewardProgram.GetTotalRewardPool().Denom, claimPeriodAmount) if rewardProgram.RemainingPoolBalance.IsLT(claimPeriodPool) { claimPeriodPool = rewardProgram.RemainingPoolBalance @@ -242,15 +244,15 @@ func (k Keeper) CalculateRewardClaimPeriodRewards(ctx sdk.Context, maxReward sdk // CalculateParticipantReward for each address/participant func (k Keeper) CalculateParticipantReward(_ sdk.Context, shares int64, totalShares int64, claimRewardPool sdk.Coin, maxReward sdk.Coin) sdk.Coin { - numerator := sdk.NewDec(shares) - denom := sdk.NewDec(totalShares) + numerator := sdkmath.LegacyNewDec(shares) + denom := sdkmath.LegacyNewDec(totalShares) - percentage := sdk.NewDec(0) + percentage := sdkmath.LegacyNewDec(0) if totalShares > 0 { percentage = numerator.Quo(denom) } - pool := sdk.NewDec(claimRewardPool.Amount.Int64()) + pool := sdkmath.LegacyNewDec(claimRewardPool.Amount.Int64()) reward := sdk.NewInt64Coin(claimRewardPool.Denom, pool.Mul(percentage).TruncateInt64()) if maxReward.IsLT(reward) { diff --git a/x/reward/keeper/time_management_test.go b/x/reward/keeper/time_management_test.go index 938109fafe..5d7b6ebdc9 100644 --- a/x/reward/keeper/time_management_test.go +++ b/x/reward/keeper/time_management_test.go @@ -4,10 +4,11 @@ import ( "fmt" "time" + abci "github.com/cometbft/cometbft/abci/types" + sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "github.com/provenance-io/provenance/x/reward/types" - abci "github.com/tendermint/tendermint/abci/types" ) func (s *KeeperTestSuite) TestStartRewardProgram() { @@ -36,7 +37,7 @@ func (s *KeeperTestSuite) TestStartRewardProgram() { s.Assert().Equal(uint64(1), program.CurrentClaimPeriod, "current claim period should be set to 1") s.Assert().Equal(blockTime.Add(time.Duration(program.ClaimPeriodSeconds)*time.Second), program.ClaimPeriodEndTime, "claim period end time should be set") - claimPeriodAmount := program.GetTotalRewardPool().Amount.Quo(sdk.NewInt(int64(program.GetClaimPeriods()))) + claimPeriodAmount := program.GetTotalRewardPool().Amount.QuoRaw(int64(program.GetClaimPeriods())) claimPeriodPool := sdk.NewCoin(program.GetTotalRewardPool().Denom, claimPeriodAmount) reward, err := s.app.RewardKeeper.GetClaimPeriodRewardDistribution(s.ctx, 1, 1) s.Assert().NoError(err) @@ -134,7 +135,7 @@ func (s *KeeperTestSuite) TestStartRewardProgramClaimPeriod() { s.Assert().Equal(uint64(1), program.CurrentClaimPeriod, "current claim period should incremented") s.Assert().Equal(blockTime.Add(time.Duration(program.ClaimPeriodSeconds)*time.Second), program.ClaimPeriodEndTime, "claim period end time should be set") - claimPeriodAmount := program.GetTotalRewardPool().Amount.Quo(sdk.NewInt(int64(program.GetClaimPeriods()))) + claimPeriodAmount := program.GetTotalRewardPool().Amount.QuoRaw(int64(program.GetClaimPeriods())) claimPeriodPool := sdk.NewCoin(program.GetTotalRewardPool().Denom, claimPeriodAmount) reward, err := s.app.RewardKeeper.GetClaimPeriodRewardDistribution(s.ctx, 1, 1) s.Assert().NoError(err) @@ -171,7 +172,7 @@ func (s *KeeperTestSuite) TestStartRewardProgramClaimPeriodUpdatesExpectedEndTim s.Assert().Equal(uint64(4), program.CurrentClaimPeriod, "current claim period should incremented") s.Assert().Equal(blockTime.Add(time.Duration(program.ClaimPeriodSeconds)*time.Second), program.ClaimPeriodEndTime, "claim period end time should be set") - claimPeriodAmount := program.GetTotalRewardPool().Amount.Quo(sdk.NewInt(int64(program.GetClaimPeriods()))) + claimPeriodAmount := program.GetTotalRewardPool().Amount.QuoRaw(int64(program.GetClaimPeriods())) claimPeriodPool := sdk.NewCoin(program.GetTotalRewardPool().Denom, claimPeriodAmount) reward, err := s.app.RewardKeeper.GetClaimPeriodRewardDistribution(s.ctx, 4, 1) s.Assert().NoError(err) @@ -956,8 +957,8 @@ func (s *KeeperTestSuite) TestUpdate() { attr := func(key, value string) abci.EventAttribute { return abci.EventAttribute{ - Key: []byte(key), - Value: []byte(value), + Key: key, + Value: value, } } newEvent := func(typeName string, attributes ...abci.EventAttribute) sdk.Event { @@ -1003,7 +1004,7 @@ func EventsStrings(events sdk.Events) []string { if attr.Index { indexed = " (indexed)" } - rv = append(rv, fmt.Sprintf("[%d]%s[%d]: %q = %q%s", i, event.Type, j, string(attr.Key), string(attr.Value), indexed)) + rv = append(rv, fmt.Sprintf("[%d]%s[%d]: %q = %q%s", i, event.Type, j, attr.Key, attr.Value, indexed)) } } return rv diff --git a/x/reward/module/module.go b/x/reward/module/module.go index 12cfc30ba9..a427f916f6 100644 --- a/x/reward/module/module.go +++ b/x/reward/module/module.go @@ -9,7 +9,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" - abci "github.com/tendermint/tendermint/abci/types" + abci "github.com/cometbft/cometbft/abci/types" cerrs "cosmossdk.io/errors" @@ -32,6 +32,7 @@ import ( var ( _ module.AppModule = AppModule{} _ module.AppModuleBasic = AppModuleBasic{} + // TODO[1760]: app-module: Add more assertions for the new types and clean up stuff no longer needed. ) // AppModuleBasic defines the basic application module used by the reward module. @@ -115,6 +116,12 @@ func NewAppModule(cdc codec.Codec, keeper keeper.Keeper, accountKeeper authkeepe } } +// IsOnePerModuleType is a dummy function that satisfies the OnePerModuleType interface (needed by AppModule). +func (AppModule) IsOnePerModuleType() {} + +// IsAppModule is a dummy function that satisfies the AppModule interface. +func (AppModule) IsAppModule() {} + // GenerateGenesisState creates a randomized GenState of the rewards module. func (am AppModule) GenerateGenesisState(simState *module.SimulationState) { simulation.RandomizedGenState(simState) @@ -127,13 +134,13 @@ func (am AppModule) ProposalContents(_ module.SimulationState) []simtypes.Weight } // RandomizedParams returns randomized module parameters for param change proposals. -func (am AppModule) RandomizedParams(_ *rand.Rand) []simtypes.ParamChange { +func (am AppModule) RandomizedParams(_ *rand.Rand) []simtypes.LegacyParamChange { // currently no module params exist return nil } // RegisterStoreDecoder registers a func to decode each module's defined types from their corresponding store key -func (am AppModule) RegisterStoreDecoder(sdr sdk.StoreDecoderRegistry) { +func (am AppModule) RegisterStoreDecoder(sdr simtypes.StoreDecoderRegistry) { sdr[keeper.StoreKey] = simulation.NewDecodeStore(am.cdc) } @@ -152,19 +159,6 @@ func (AppModule) Name() string { // RegisterInvariants does nothing, there are no invariants to enforce func (AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} -// Deprecated: Route returns the message routing key for the reward module. -func (am AppModule) Route() sdk.Route { - return sdk.NewRoute(types.RouterKey, rewardModule.NewHandler(am.keeper)) -} - -// QuerierRoute returns the route we respond to for abci queries -func (AppModule) QuerierRoute() string { return "" } - -// LegacyQuerierHandler returns the reward module sdk.Querier. -func (am AppModule) LegacyQuerierHandler(_ *codec.LegacyAmino) sdk.Querier { - return nil -} - // InitGenesis performs genesis initialization for the reward module. It returns // no validator updates. func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) []abci.ValidatorUpdate { @@ -186,13 +180,14 @@ func (AppModule) ConsensusVersion() uint64 { return 1 } // BeginBlock is the `BeginBlocker` function run at the beginning of each block to // process rewards module updates. -func (am AppModule) BeginBlock(ctx sdk.Context, _ abci.RequestBeginBlock) { - rewardModule.BeginBlocker(ctx, am.keeper) +func (am AppModule) BeginBlock(ctx context.Context) error { + rewardModule.BeginBlocker(sdk.UnwrapSDKContext(ctx), am.keeper) + return nil } // EndBlock The `EndBlocker` abci call is ran at the end of each block. The `EventManager` is monitored // and `Qualifying Actions` are deduced from newly created events and prior internal state. -func (am AppModule) EndBlock(ctx sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate { - rewardModule.EndBlocker(ctx, am.keeper) - return []abci.ValidatorUpdate{} +func (am AppModule) EndBlock(ctx context.Context) error { + rewardModule.EndBlocker(sdk.UnwrapSDKContext(ctx), am.keeper) + return nil } diff --git a/x/reward/simulation/genesis.go b/x/reward/simulation/genesis.go index a8333efadb..5f56a2bd10 100644 --- a/x/reward/simulation/genesis.go +++ b/x/reward/simulation/genesis.go @@ -46,24 +46,24 @@ func MinActionsFn(r *rand.Rand) uint64 { func RandomizedGenState(simState *module.SimulationState) { var totalRewardsPool sdk.Coin simState.AppParams.GetOrGenerate( - simState.Cdc, TotalRewardsPool, &totalRewardsPool, simState.Rand, + TotalRewardsPool, &totalRewardsPool, simState.Rand, func(r *rand.Rand) { totalRewardsPool = GenTotalRewardsPool(r) }, ) var maxRewardsByAddress sdk.Coin simState.AppParams.GetOrGenerate( - simState.Cdc, MaxRewardByAddress, &maxRewardsByAddress, simState.Rand, + MaxRewardByAddress, &maxRewardsByAddress, simState.Rand, func(r *rand.Rand) { maxRewardsByAddress = GenMaxRewardsByAddress(r) }, ) var maxActions uint64 simState.AppParams.GetOrGenerate( - simState.Cdc, MaxActions, &maxActions, simState.Rand, + MaxActions, &maxActions, simState.Rand, func(r *rand.Rand) { maxActions = MaxActionsFn(r) }, ) var minActions uint64 simState.AppParams.GetOrGenerate( - simState.Cdc, MinActions, &minActions, simState.Rand, + MinActions, &minActions, simState.Rand, func(r *rand.Rand) { minActions = MinActionsFn(r) }, ) diff --git a/x/reward/simulation/operations.go b/x/reward/simulation/operations.go index a1504ba81d..ce0b1e2db8 100644 --- a/x/reward/simulation/operations.go +++ b/x/reward/simulation/operations.go @@ -6,9 +6,12 @@ import ( "math/rand" "time" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" + + sdkmath "cosmossdk.io/math" + "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" - "github.com/cosmos/cosmos-sdk/simapp/helpers" sdk "github.com/cosmos/cosmos-sdk/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" @@ -37,12 +40,12 @@ func WeightedOperations( weightMsgEndRewardProgram int ) - appParams.GetOrGenerate(cdc, OpWeightSubmitCreateRewardsProposal, &weightMsgAddRewardsProgram, nil, + appParams.GetOrGenerate(OpWeightSubmitCreateRewardsProposal, &weightMsgAddRewardsProgram, nil, func(_ *rand.Rand) { weightMsgAddRewardsProgram = simappparams.DefaultWeightSubmitCreateRewards }, ) - appParams.GetOrGenerate(cdc, OpWeightEndRewardsProposal, &weightMsgEndRewardProgram, nil, + appParams.GetOrGenerate(OpWeightEndRewardsProposal, &weightMsgEndRewardProgram, nil, func(_ *rand.Rand) { weightMsgEndRewardProgram = simappparams.DefaultWeightSubmitEndRewards }, @@ -128,20 +131,20 @@ func Dispatch( if err != nil { return simtypes.NoOpMsg(sdk.MsgTypeURL(msg), sdk.MsgTypeURL(msg), "unable to generate fees"), nil, err } - err = testutil.FundAccount(bk, ctx, account.GetAddress(), sdk.NewCoins(sdk.Coin{ + err = testutil.FundAccount(ctx, bk, account.GetAddress(), sdk.NewCoins(sdk.Coin{ Denom: pioconfig.GetProvenanceConfig().BondDenom, - Amount: sdk.NewInt(1_000_000_000_000_000), + Amount: sdkmath.NewInt(1_000_000_000_000_000), })) if err != nil { return simtypes.NoOpMsg(sdk.MsgTypeURL(msg), sdk.MsgTypeURL(msg), "unable to fund account"), nil, err } txGen := simappparams.MakeTestEncodingConfig().TxConfig - tx, err := helpers.GenSignedMockTx( + tx, err := simtestutil.GenSignedMockTx( r, txGen, []sdk.Msg{msg}, fees, - helpers.DefaultGenTxGas, + simtestutil.DefaultGenTxGas, chainID, []uint64{account.GetAccountNumber()}, []uint64{account.GetSequence()}, @@ -156,7 +159,7 @@ func Dispatch( return simtypes.NoOpMsg(sdk.MsgTypeURL(msg), sdk.MsgTypeURL(msg), err.Error()), nil, nil } - return simtypes.NewOperationMsg(msg, true, "", &codec.ProtoCodec{}), futures, nil + return simtypes.NewOperationMsg(msg, true, ""), futures, nil } // SimulateMsgEndRewardsProgram sends a MsgEndRewardProgramRequest for a random existing reward program. diff --git a/x/reward/simulation/operations_test.go b/x/reward/simulation/operations_test.go index 3bdff93034..dce29d5646 100644 --- a/x/reward/simulation/operations_test.go +++ b/x/reward/simulation/operations_test.go @@ -5,8 +5,6 @@ import ( "testing" "github.com/stretchr/testify/suite" - abci "github.com/tendermint/tendermint/abci/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" sdk "github.com/cosmos/cosmos-sdk/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" @@ -27,7 +25,7 @@ type SimTestSuite struct { func (s *SimTestSuite) SetupTest() { s.app = app.Setup(s.T()) - s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{}) + s.ctx = s.app.BaseApp.NewContext(false) } func (s *SimTestSuite) TestWeightedOperations() { @@ -44,7 +42,7 @@ func (s *SimTestSuite) TestWeightedOperations() { accs := s.getTestingAccounts(r, 3) // begin a new block - s.app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) + // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) // TODO[1760]: finalize-block expected := []struct { weight int @@ -74,7 +72,7 @@ func (s *SimTestSuite) TestSimulateMsgAddRewards() { accounts := s.getTestingAccounts(r, 3) // begin a new block - s.app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) + // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) // TODO[1760]: finalize-block // execute operation op := simulation.SimulateMsgCreateRewardsProgram(s.app.RewardKeeper, s.app.AccountKeeper, s.app.BankKeeper) @@ -104,7 +102,7 @@ func (s *SimTestSuite) getTestingAccounts(r *rand.Rand, n int) []simtypes.Accoun for _, account := range accounts { acc := s.app.AccountKeeper.NewAccountWithAddress(s.ctx, account.Address) s.app.AccountKeeper.SetAccount(s.ctx, acc) - err := testutil.FundAccount(s.app.BankKeeper, s.ctx, account.Address, initCoins) + err := testutil.FundAccount(s.ctx, s.app.BankKeeper, account.Address, initCoins) s.Require().NoError(err) } diff --git a/x/reward/types/action_builder.go b/x/reward/types/action_builder.go index 1ae6a0f433..e8cf62f9b0 100644 --- a/x/reward/types/action_builder.go +++ b/x/reward/types/action_builder.go @@ -5,7 +5,6 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" govtypesv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" govtypesv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" @@ -220,7 +219,7 @@ func (v *VoteActionBuilder) GetEventCriteria() *EventCriteria { return NewEventCriteria([]ABCIEvent{ { Type: sdk.EventTypeMessage, - Attributes: map[string][]byte{sdk.AttributeKeyModule: []byte(govtypes.AttributeValueCategory)}, + Attributes: map[string][]byte{sdk.AttributeKeyModule: []byte("governance")}, // TODO[1760]: reward: Ensure "governance" is still correct here. }, { Type: sdk.EventTypeMessage, diff --git a/x/reward/types/expected_keepers.go b/x/reward/types/expected_keepers.go index f4a1e64418..c0ec4e6314 100644 --- a/x/reward/types/expected_keepers.go +++ b/x/reward/types/expected_keepers.go @@ -1,17 +1,19 @@ package types import ( + "context" + sdk "github.com/cosmos/cosmos-sdk/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" ) // StakingKeeper defines a subset of methods implemented by the cosmos-sdk staking keeper type StakingKeeper interface { - GetAllDelegatorDelegations(ctx sdk.Context, delegator sdk.AccAddress) []stakingtypes.Delegation - GetBondedValidatorsByPower(ctx sdk.Context) []stakingtypes.Validator - GetLastValidatorPower(ctx sdk.Context, operator sdk.ValAddress) (power int64) - GetValidator(ctx sdk.Context, addr sdk.ValAddress) (validator stakingtypes.Validator, found bool) - GetDelegation(ctx sdk.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) (delegation stakingtypes.Delegation, found bool) + GetAllDelegatorDelegations(ctx context.Context, delegator sdk.AccAddress) ([]stakingtypes.Delegation, error) + GetBondedValidatorsByPower(ctx context.Context) ([]stakingtypes.Validator, error) + GetLastValidatorPower(ctx context.Context, operator sdk.ValAddress) (power int64, err error) + GetValidator(ctx context.Context, addr sdk.ValAddress) (validator stakingtypes.Validator, err error) + GetDelegation(ctx context.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) (delegation stakingtypes.Delegation, err error) } // AccountKeeper defines the contract needed for AccountKeeper related APIs. diff --git a/x/reward/types/keys.go b/x/reward/types/keys.go index 0a08a6e7cd..4a721aa2fd 100644 --- a/x/reward/types/keys.go +++ b/x/reward/types/keys.go @@ -18,9 +18,6 @@ const ( // RouterKey is the message route for slashing RouterKey = ModuleName - // QuerierRoute defines the module's query routing key - QuerierRoute = ModuleName - RewardIDKeyLength = 8 ClaimPeriodIDLength = 8 ) diff --git a/x/reward/types/msgs_test.go b/x/reward/types/msgs_test.go index 4bf1d91d14..a56421f617 100644 --- a/x/reward/types/msgs_test.go +++ b/x/reward/types/msgs_test.go @@ -7,6 +7,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -38,8 +40,8 @@ func (s *RewardMsgTypesTestSuite) TestMsgCreateRewardProgramRequestValidateBasic MaximumActions: 1, MinimumDelegationAmount: &minimumDelegation, MaximumDelegationAmount: &maximumDelegation, - MinimumActiveStakePercentile: sdk.NewDecWithPrec(0, 0), - MaximumActiveStakePercentile: sdk.NewDecWithPrec(1, 0), + MinimumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(0, 0), + MaximumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(1, 0), }, }, }, @@ -291,8 +293,8 @@ func (s *RewardMsgTypesTestSuite) TestMsgCreateRewardProgramRequestValidateBasic MaximumActions: 0, MinimumDelegationAmount: &minimumDelegation, MaximumDelegationAmount: &maximumDelegation, - MinimumActiveStakePercentile: sdk.NewDecWithPrec(0, 0), - MaximumActiveStakePercentile: sdk.NewDecWithPrec(1, 0), + MinimumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(0, 0), + MaximumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(1, 0), }, }, }, diff --git a/x/reward/types/reward.go b/x/reward/types/reward.go index 69c4771339..205676f41b 100644 --- a/x/reward/types/reward.go +++ b/x/reward/types/reward.go @@ -7,6 +7,9 @@ import ( "strings" time "time" + sdkmath "cosmossdk.io/math" + "github.com/provenance-io/provenance/internal/helpers" + sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" @@ -53,7 +56,7 @@ type RewardAction interface { type ABCIEvent struct { Type string - Attributes map[string][]byte + Attributes map[string][]byte // TODO[1760]: reward: Use strings here since attributes switched to strings. } type EventCriteria struct { @@ -128,7 +131,7 @@ func NewRewardProgram( programEndTimeMax := CalculateEndTimeMax(programStartTime.UTC(), claimPeriodSeconds, claimPeriods, maxRolloverClaimPeriods).UTC() var minimumRolloverAmount sdk.Coin if claimPeriods >= 1 { - minimumRolloverAmount = sdk.NewInt64Coin(totalRewardPool.Denom, Percent(10, totalRewardPool.Amount.Quo(sdk.NewInt(int64(claimPeriods))).Int64())) + minimumRolloverAmount = sdk.NewInt64Coin(totalRewardPool.Denom, Percent(10, totalRewardPool.Amount.QuoRaw(int64(claimPeriods)).Int64())) } return RewardProgram{ @@ -349,37 +352,48 @@ func (ad *ActionDelegate) GetBuilder() ActionBuilder { return &DelegateActionBuilder{} } -func (ad *ActionDelegate) getTokensFromValidator(ctx sdk.Context, provider KeeperProvider, validatorAddr sdk.ValAddress, delegator sdk.AccAddress) (sdk.Dec, bool) { +func (ad *ActionDelegate) getTokensFromValidator(ctx sdk.Context, provider KeeperProvider, validatorAddr sdk.ValAddress, delegator sdk.AccAddress) (sdkmath.LegacyDec, bool) { stakingKeeper := provider.GetStakingKeeper() - delegation, found := stakingKeeper.GetDelegation(ctx, delegator, validatorAddr) - if !found { - return sdk.NewDec(0), found + delegation, err := stakingKeeper.GetDelegation(ctx, delegator, validatorAddr) + if err != nil { + return sdkmath.LegacyNewDec(0), false } - validator, found := stakingKeeper.GetValidator(ctx, validatorAddr) - if !found { - return sdk.NewDec(0), found + validator, err := stakingKeeper.GetValidator(ctx, validatorAddr) + if err != nil { + return sdkmath.LegacyNewDec(0), false } tokens := validator.TokensFromShares(delegation.GetShares()) - return tokens, found + return tokens, true } // The percentile is dictated by the powers of the validators // If there are 5 validators and the first validator matches then that validator is in the 80th percentile // If there is 1 validator then that validator is in the 0 percentile. -func (ad *ActionDelegate) getValidatorRankPercentile(ctx sdk.Context, provider KeeperProvider, validator sdk.ValAddress) sdk.Dec { - validators := provider.GetStakingKeeper().GetBondedValidatorsByPower(ctx) - ourPower := provider.GetStakingKeeper().GetLastValidatorPower(ctx, validator) +func (ad *ActionDelegate) getValidatorRankPercentile(ctx sdk.Context, provider KeeperProvider, validator sdk.ValAddress) sdkmath.LegacyDec { + validators, err := provider.GetStakingKeeper().GetBondedValidatorsByPower(ctx) + if err != nil { + return sdkmath.LegacyNewDec(0) + } + ourPower, err := provider.GetStakingKeeper().GetLastValidatorPower(ctx, validator) + if err != nil { + return sdkmath.LegacyNewDec(0) + } var numBelow int64 numValidators := int64(len(validators)) for i := int64(0); i < numValidators; i++ { v := validators[i] - power := provider.GetStakingKeeper().GetLastValidatorPower(ctx, v.GetOperator()) - if power < ourPower { + vAddr, err := helpers.GetOperatorAddr(v) + if err != nil { + numBelow++ + continue + } + power, err := provider.GetStakingKeeper().GetLastValidatorPower(ctx, vAddr) + if err != nil || power < ourPower { numBelow++ } } - placement := sdk.NewDec(numBelow) - vals := sdk.NewDec(numValidators) + placement := sdkmath.LegacyNewDec(numBelow) + vals := sdkmath.LegacyNewDec(numValidators) percentile := placement.Quo(vals) return percentile @@ -401,26 +415,26 @@ func (ad *ActionDelegate) Evaluate(ctx sdk.Context, provider KeeperProvider, _ R minPercentile := ad.GetMinimumActiveStakePercentile() maxPercentile := ad.GetMaximumActiveStakePercentile() - hasValidDelegationAmount := delegatedHash.IsGTE(*minDelegation) && (delegatedHash.IsLT(*maxDelegation) || delegatedHash.IsEqual(*maxDelegation)) + hasValidDelegationAmount := delegatedHash.IsGTE(*minDelegation) && (delegatedHash.IsLT(*maxDelegation) || delegatedHash.Equal(*maxDelegation)) hasValidActivePercentile := percentile.GTE(minPercentile) && percentile.LTE(maxPercentile) return hasValidDelegationAmount && hasValidActivePercentile } // GetMinimumActiveStakePercentile returns this action's minimum active stake percentile or zero if not defined. -func (ad *ActionDelegate) GetMinimumActiveStakePercentile() sdk.Dec { +func (ad *ActionDelegate) GetMinimumActiveStakePercentile() sdkmath.LegacyDec { if ad != nil { return ad.MinimumActiveStakePercentile } - return sdk.NewDec(0) + return sdkmath.LegacyNewDec(0) } // GetMaximumActiveStakePercentile returns this action's maximum active stake percentile or zero if not defined. -func (ad *ActionDelegate) GetMaximumActiveStakePercentile() sdk.Dec { +func (ad *ActionDelegate) GetMaximumActiveStakePercentile() sdkmath.LegacyDec { if ad != nil { return ad.MaximumActiveStakePercentile } - return sdk.NewDec(0) + return sdkmath.LegacyNewDec(0) } func (ad *ActionDelegate) PreEvaluate(_ sdk.Context, _ KeeperProvider, _ RewardAccountState) bool { @@ -467,7 +481,7 @@ func (at *ActionTransfer) Evaluate(ctx sdk.Context, provider KeeperProvider, _ R return false } // check delegations if and only if mandated by the Action - if sdk.NewCoin(pioconfig.GetProvenanceConfig().BondDenom, sdk.ZeroInt()).IsLT(at.MinimumDelegationAmount) { + if sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().BondDenom, 0).IsLT(at.MinimumDelegationAmount) { // now check if it has any delegations totalDelegations, found := getAllDelegations(ctx, provider, addressSender) if !found { @@ -518,7 +532,7 @@ func (atd *ActionVote) ActionType() string { func (atd *ActionVote) Evaluate(ctx sdk.Context, provider KeeperProvider, _ RewardAccountState, event EvaluationResult) bool { // get the address that voted addressVoting := event.Address - if !sdk.NewCoin(pioconfig.GetProvenanceConfig().BondDenom, sdk.ZeroInt()).IsGTE(atd.MinimumDelegationAmount) { + if !sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().BondDenom, 0).IsGTE(atd.MinimumDelegationAmount) { // now check if it has any delegations totalDelegations, found := getAllDelegations(ctx, provider, addressVoting) if !found { @@ -542,8 +556,8 @@ func (atd *ActionVote) PostEvaluate(ctx sdk.Context, provider KeeperProvider, st // get the address that voted, and see if the multiplier needs to be applied if the vote came from a validator. addressVoting := evaluationResult.Address valAddrStr := sdk.ValAddress(addressVoting) - _, found := provider.GetStakingKeeper().GetValidator(ctx, valAddrStr) - if found && atd.ValidatorMultiplier > 0 { + _, err := provider.GetStakingKeeper().GetValidator(ctx, valAddrStr) + if err == nil && atd.ValidatorMultiplier > 0 { // shares can be negative, as per requirements, and this may lead to negative shares with multiplier. evaluationResult.Shares *= int64(atd.ValidatorMultiplier) } @@ -596,24 +610,27 @@ func (qa *QualifyingAction) GetRewardAction(ctx sdk.Context) (RewardAction, erro // return total coin delegated and boolean to indicate if any delegations are at all present. func getAllDelegations(ctx sdk.Context, provider KeeperProvider, delegator sdk.AccAddress) (sdk.Coin, bool) { stakingKeeper := provider.GetStakingKeeper() - delegations := stakingKeeper.GetAllDelegatorDelegations(ctx, delegator) + delegations, err := stakingKeeper.GetAllDelegatorDelegations(ctx, delegator) // if no delegations then return not found - if len(delegations) == 0 { - return sdk.NewCoin(pioconfig.GetProvenanceConfig().BondDenom, sdk.ZeroInt()), false + if err != nil || len(delegations) == 0 { + return sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().BondDenom, 0), false } - sum := sdk.NewCoin(pioconfig.GetProvenanceConfig().BondDenom, sdk.ZeroInt()) + sum := sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().BondDenom, 0) for _, delegation := range delegations { - val, found := stakingKeeper.GetValidator(ctx, delegation.GetValidatorAddr()) - - if found { + valAddr, err := sdk.ValAddressFromBech32(delegation.GetValidatorAddr()) + if err != nil { + continue + } + val, err := stakingKeeper.GetValidator(ctx, valAddr) + if err == nil { tokens := val.TokensFromShares(delegation.GetShares()).TruncateInt() sum = sum.Add(sdk.NewCoin(pioconfig.GetProvenanceConfig().BondDenom, tokens)) } } - if sum.Amount.Equal(sdk.ZeroInt()) { + if sum.Amount.Equal(sdkmath.ZeroInt()) { return sum, false } return sum, true diff --git a/x/reward/types/reward.pb.go b/x/reward/types/reward.pb.go index 00ef61d6f5..3a3d832dd3 100644 --- a/x/reward/types/reward.pb.go +++ b/x/reward/types/reward.pb.go @@ -1,11 +1,17 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. // source: provenance/reward/v1/reward.proto +// TODO[1760]: proto: Regenerate this file with updated library references for .Dec and .Int in the protos. +// This file has been manually modified for the v0.50 update. +// The github_com_cosmos_cosmos_sdk_types.Dec and .Int types have moved to the sdkmath library. +// In order to make this code to compile (without needed to update protos and regenerate), this +// file has been manually fixed to use the correct library for those types. + package types import ( fmt "fmt" - github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + sdkmath "cosmossdk.io/math" types "github.com/cosmos/cosmos-sdk/types" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" @@ -677,9 +683,9 @@ type ActionDelegate struct { // Maximum amount that the user must have currently delegated on the validator. MaximumDelegationAmount *types.Coin `protobuf:"bytes,4,opt,name=maximum_delegation_amount,json=maximumDelegationAmount,proto3" json:"maximum_delegation_amount,omitempty"` // Minimum percentile that can be below the validator's power ranking. - MinimumActiveStakePercentile github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,5,opt,name=minimum_active_stake_percentile,json=minimumActiveStakePercentile,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"minimum_active_stake_percentile"` + MinimumActiveStakePercentile sdkmath.LegacyDec `protobuf:"bytes,5,opt,name=minimum_active_stake_percentile,json=minimumActiveStakePercentile,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"minimum_active_stake_percentile"` // Maximum percentile that can be below the validator's power ranking. - MaximumActiveStakePercentile github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,6,opt,name=maximum_active_stake_percentile,json=maximumActiveStakePercentile,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"maximum_active_stake_percentile"` + MaximumActiveStakePercentile sdkmath.LegacyDec `protobuf:"bytes,6,opt,name=maximum_active_stake_percentile,json=maximumActiveStakePercentile,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"maximum_active_stake_percentile"` } func (m *ActionDelegate) Reset() { *m = ActionDelegate{} } diff --git a/x/reward/types/reward_test.go b/x/reward/types/reward_test.go index d0c755b0bf..74f03089ec 100644 --- a/x/reward/types/reward_test.go +++ b/x/reward/types/reward_test.go @@ -7,6 +7,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -67,8 +69,8 @@ func (s *RewardTypesTestSuite) TestRewardProgramValidate() { MaximumActions: 1, MinimumDelegationAmount: &minDelegation, MaximumDelegationAmount: &maxDelegation, - MinimumActiveStakePercentile: sdk.NewDecWithPrec(0, 0), - MaximumActiveStakePercentile: sdk.NewDecWithPrec(1, 0), + MinimumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(0, 0), + MaximumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(1, 0), }, }, }, @@ -362,8 +364,8 @@ func (s *RewardTypesTestSuite) TestActionDelegateCreation() { MaximumActions: 1, MinimumDelegationAmount: &minDelegation, MaximumDelegationAmount: &maxDelegation, - MinimumActiveStakePercentile: sdk.NewDecWithPrec(0, 0), - MaximumActiveStakePercentile: sdk.NewDecWithPrec(1, 0), + MinimumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(0, 0), + MaximumActiveStakePercentile: sdkmath.LegacyNewDecWithPrec(1, 0), } s.Assert().Nil(action.Validate(), "validate basic must have no error") s.Assert().Equal("ActionDelegate", action.ActionType(), "must have appropriate action type") diff --git a/x/trigger/client/cli/cli_test.go b/x/trigger/client/cli/cli_test.go index 345b07310a..0aae18df7a 100644 --- a/x/trigger/client/cli/cli_test.go +++ b/x/trigger/client/cli/cli_test.go @@ -5,7 +5,7 @@ import ( "testing" "time" - tmcli "github.com/tendermint/tendermint/libs/cli" + cmtcli "github.com/cometbft/cometbft/libs/cli" "github.com/cosmos/cosmos-sdk/client/flags" codectypes "github.com/cosmos/cosmos-sdk/codec/types" @@ -70,11 +70,11 @@ func (s *IntegrationTestSuite) SetupSuite() { var genBalances []banktypes.Balance for i := range s.accountAddresses { genBalances = append(genBalances, banktypes.Balance{Address: s.accountAddresses[i].String(), Coins: sdk.NewCoins( - sdk.NewCoin("nhash", sdk.NewInt(100000000)), sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(100000000)), + sdk.NewInt64Coin("nhash", 100_000_000), sdk.NewInt64Coin(s.cfg.BondDenom, 100_000_000), ).Sort()}) } genBalances = append(genBalances, banktypes.Balance{Address: "cosmos1w6t0l7z0yerj49ehnqwqaayxqpe3u7e23edgma", Coins: sdk.NewCoins( - sdk.NewCoin("nhash", sdk.NewInt(100000000)), sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(100000000))).Sort()}) + sdk.NewInt64Coin("nhash", 100_000_000), sdk.NewInt64Coin(s.cfg.BondDenom, 100_000_000)).Sort()}) var bankGenState banktypes.GenesisState bankGenState.Params = banktypes.DefaultParams() bankGenState.Balances = genBalances @@ -196,8 +196,8 @@ func (s *IntegrationTestSuite) GenerateAccountsWithKeyrings(number int) { func (s *IntegrationTestSuite) CreateTrigger(id uint64, owner string, event types.TriggerEventI, action sdk.Msg) types.Trigger { actions, _ := sdktx.SetMsgs([]sdk.Msg{action}) - any, _ := codectypes.NewAnyWithValue(event) - return types.NewTrigger(id, owner, any, actions) + anyMsg, _ := codectypes.NewAnyWithValue(event) + return types.NewTrigger(id, owner, anyMsg, actions) } func (s *IntegrationTestSuite) TestQueryTriggers() { @@ -270,7 +270,7 @@ func (s *IntegrationTestSuite) TestQueryTriggers() { s.Run(tc.name, func() { clientCtx := s.network.Validators[0].ClientCtx - out, err := clitestutil.ExecTestCLICmd(clientCtx, triggercli.GetTriggersCmd(), append(tc.args, []string{fmt.Sprintf("--%s=json", tmcli.OutputFlag)}...)) + out, err := clitestutil.ExecTestCLICmd(clientCtx, triggercli.GetTriggersCmd(), append(tc.args, []string{fmt.Sprintf("--%s=json", cmtcli.OutputFlag)}...)) if len(tc.expectErrMsg) > 0 { s.EqualError(err, tc.expectErrMsg, "should have correct error message for invalid QueryTriggers") } else if tc.byId { @@ -413,15 +413,15 @@ func (s *IntegrationTestSuite) TestAddBlockHeightTrigger() { tc.height, messageFile.Name(), } - flags := []string{ + flagArgs := []string{ fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddresses[0].String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), } - args = append(args, flags...) + args = append(args, flagArgs...) - out, err := clitestutil.ExecTestCLICmd(clientCtx, triggercli.GetCmdAddBlockHeightTrigger(), append(args, []string{fmt.Sprintf("--%s=json", tmcli.OutputFlag)}...)) + out, err := clitestutil.ExecTestCLICmd(clientCtx, triggercli.GetCmdAddBlockHeightTrigger(), append(args, []string{fmt.Sprintf("--%s=json", cmtcli.OutputFlag)}...)) var response sdk.TxResponse marshalErr := clientCtx.Codec.UnmarshalJSON(out.Bytes(), &response) if len(tc.expectErrMsg) > 0 { @@ -568,15 +568,15 @@ func (s *IntegrationTestSuite) TestAddTransactionTrigger() { txEventFile.Name(), messageFile.Name(), } - flags := []string{ + flagArgs := []string{ fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddresses[0].String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), } - args = append(args, flags...) + args = append(args, flagArgs...) - out, err := clitestutil.ExecTestCLICmd(clientCtx, triggercli.GetCmdAddTransactionTrigger(), append(args, []string{fmt.Sprintf("--%s=json", tmcli.OutputFlag)}...)) + out, err := clitestutil.ExecTestCLICmd(clientCtx, triggercli.GetCmdAddTransactionTrigger(), append(args, []string{fmt.Sprintf("--%s=json", cmtcli.OutputFlag)}...)) var response sdk.TxResponse marshalErr := clientCtx.Codec.UnmarshalJSON(out.Bytes(), &response) if len(tc.expectErrMsg) > 0 { @@ -710,15 +710,15 @@ func (s *IntegrationTestSuite) TestAddBlockTimeTrigger() { tc.blockTime, messageFile.Name(), } - flags := []string{ + flagArgs := []string{ fmt.Sprintf("--%s=%s", flags.FlagFrom, s.accountAddresses[0].String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), } - args = append(args, flags...) + args = append(args, flagArgs...) - out, err := clitestutil.ExecTestCLICmd(clientCtx, triggercli.GetCmdAddBlockTimeTrigger(), append(args, []string{fmt.Sprintf("--%s=json", tmcli.OutputFlag)}...)) + out, err := clitestutil.ExecTestCLICmd(clientCtx, triggercli.GetCmdAddBlockTimeTrigger(), append(args, []string{fmt.Sprintf("--%s=json", cmtcli.OutputFlag)}...)) var response sdk.TxResponse marshalErr := clientCtx.Codec.UnmarshalJSON(out.Bytes(), &response) if len(tc.expectErrMsg) > 0 { @@ -781,15 +781,15 @@ func (s *IntegrationTestSuite) TestDestroyTrigger() { args := []string{ tc.triggerID, } - flags := []string{ + flagArgs := []string{ fmt.Sprintf("--%s=%s", flags.FlagFrom, tc.signer), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // TODO[1760]: broadcast + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 10)).String()), } - args = append(args, flags...) + args = append(args, flagArgs...) - out, err := clitestutil.ExecTestCLICmd(clientCtx, triggercli.GetCmdDestroyTrigger(), append(args, []string{fmt.Sprintf("--%s=json", tmcli.OutputFlag)}...)) + out, err := clitestutil.ExecTestCLICmd(clientCtx, triggercli.GetCmdDestroyTrigger(), append(args, []string{fmt.Sprintf("--%s=json", cmtcli.OutputFlag)}...)) var response sdk.TxResponse marshalErr := clientCtx.Codec.UnmarshalJSON(out.Bytes(), &response) if len(tc.expectErrMsg) > 0 { diff --git a/x/trigger/client/cli/query.go b/x/trigger/client/cli/query.go index aba2fcb487..b0dd7e2bf4 100644 --- a/x/trigger/client/cli/query.go +++ b/x/trigger/client/cli/query.go @@ -57,7 +57,7 @@ func GetTriggersCmd() *cobra.Command { } var request types.QueryTriggersRequest - request.Pagination, err = client.ReadPageRequestWithPageKeyDecoded(cmd.Flags()) + request.Pagination, err = client.ReadPageRequest(cmd.Flags()) // TODO[1760]: cli: ReadPageRequestWithPageKeyDecoded if err != nil { return err } diff --git a/x/trigger/keeper/event_detector.go b/x/trigger/keeper/event_detector.go index ff26c60fc4..f017bdd5cb 100644 --- a/x/trigger/keeper/event_detector.go +++ b/x/trigger/keeper/event_detector.go @@ -24,23 +24,26 @@ func (k Keeper) DetectBlockEvents(ctx sdk.Context) { // detectTransactionEvents Detects triggers that have been activated by transaction events. func (k Keeper) detectTransactionEvents(ctx sdk.Context) (triggers []types.Trigger) { - detectedTriggers := map[uint64]bool{} - terminator := func(trigger types.Trigger, triggerEvent types.TriggerEventI) bool { - return false - } + // TODO[1760]: event-history: Put this back once the event history stuff is back in the SDK. + /* + detectedTriggers := map[uint64]bool{} + terminator := func(trigger types.Trigger, triggerEvent types.TriggerEventI) bool { + return false + } - for _, event := range ctx.EventManager().GetABCIEventHistory() { - matched := k.getMatchingTriggersUntil(ctx, event.GetType(), func(trigger types.Trigger, triggerEvent types.TriggerEventI) bool { - if _, isDetected := detectedTriggers[trigger.Id]; isDetected { - return false - } - txEvent := triggerEvent.(*types.TransactionEvent) - detected := txEvent.Matches(event) - detectedTriggers[trigger.Id] = detected - return detected - }, terminator) - triggers = append(triggers, matched...) - } + for _, event := range ctx.EventManager().GetABCIEventHistory() { + matched := k.getMatchingTriggersUntil(ctx, event.GetType(), func(trigger types.Trigger, triggerEvent types.TriggerEventI) bool { + if _, isDetected := detectedTriggers[trigger.Id]; isDetected { + return false + } + txEvent := triggerEvent.(*types.TransactionEvent) + detected := txEvent.Matches(event) + detectedTriggers[trigger.Id] = detected + return detected + }, terminator) + triggers = append(triggers, matched...) + } + */ return } diff --git a/x/trigger/keeper/event_detector_test.go b/x/trigger/keeper/event_detector_test.go index 10263b28ba..feb8ccc551 100644 --- a/x/trigger/keeper/event_detector_test.go +++ b/x/trigger/keeper/event_detector_test.go @@ -256,13 +256,14 @@ func (s *KeeperTestSuite) TestDetectBlockEvents() { registered := []types.Trigger{} for _, event := range tc.triggers { actions, _ := sdktx.SetMsgs([]sdk.Msg{&types.MsgDestroyTriggerRequest{Id: 1, Authority: s.accountAddresses[0].String()}}) - any, _ := codectypes.NewAnyWithValue(event) - trigger := s.app.TriggerKeeper.NewTriggerWithID(s.ctx, s.accountAddresses[0].String(), any, actions) + anyMsg, _ := codectypes.NewAnyWithValue(event) + trigger := s.app.TriggerKeeper.NewTriggerWithID(s.ctx, s.accountAddresses[0].String(), anyMsg, actions) s.app.TriggerKeeper.RegisterTrigger(s.ctx, trigger) s.ctx.GasMeter().RefundGas(s.ctx.GasMeter().GasConsumed(), "testing") registered = append(registered, trigger) } - s.ctx = s.ctx.WithEventManager(sdk.NewEventManagerWithHistory(s.ctx.EventManager().GetABCIEventHistory())) + // TODO[1760]: event-history: Put this back once the event history stuff is back in the SDK. + // s.ctx = s.ctx.WithEventManager(sdk.NewEventManagerWithHistory(s.ctx.EventManager().GetABCIEventHistory())) // Action s.app.TriggerKeeper.DetectBlockEvents(s.ctx) diff --git a/x/trigger/keeper/event_listener.go b/x/trigger/keeper/event_listener.go index d6cc23a3a2..e0e795db29 100644 --- a/x/trigger/keeper/event_listener.go +++ b/x/trigger/keeper/event_listener.go @@ -3,6 +3,8 @@ package keeper import ( "encoding/binary" + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" triggertypes "github.com/provenance-io/provenance/x/trigger/types" @@ -40,7 +42,7 @@ func (k Keeper) GetEventListener(ctx sdk.Context, eventName string, order uint64 // IterateEventListeners Iterates through all the event listeners. func (k Keeper) IterateEventListeners(ctx sdk.Context, eventName string, handle func(trigger triggertypes.Trigger) (stop bool, err error)) error { store := ctx.KVStore(k.storeKey) - iterator := sdk.KVStorePrefixIterator(store, triggertypes.GetEventListenerPrefix(eventName)) + iterator := storetypes.KVStorePrefixIterator(store, triggertypes.GetEventListenerPrefix(eventName)) defer iterator.Close() for ; iterator.Valid(); iterator.Next() { diff --git a/x/trigger/keeper/gas_limit.go b/x/trigger/keeper/gas_limit.go index d4ce596b3a..41a8ef6f9c 100644 --- a/x/trigger/keeper/gas_limit.go +++ b/x/trigger/keeper/gas_limit.go @@ -1,6 +1,8 @@ package keeper import ( + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/provenance-io/provenance/x/trigger/types" @@ -44,7 +46,7 @@ func (k Keeper) GetGasLimit(ctx sdk.Context, id types.TriggerID) (gasLimit uint6 // IterateGasLimits Iterates through all the gas limits. func (k Keeper) IterateGasLimits(ctx sdk.Context, handle func(gasLimit types.GasLimit) (stop bool, err error)) error { store := ctx.KVStore(k.storeKey) - iterator := sdk.KVStorePrefixIterator(store, types.GasLimitKeyPrefix) + iterator := storetypes.KVStorePrefixIterator(store, types.GasLimitKeyPrefix) defer iterator.Close() for ; iterator.Valid(); iterator.Next() { diff --git a/x/trigger/keeper/keeper.go b/x/trigger/keeper/keeper.go index ec2ae85c98..53504c587f 100644 --- a/x/trigger/keeper/keeper.go +++ b/x/trigger/keeper/keeper.go @@ -1,11 +1,11 @@ package keeper import ( - "github.com/tendermint/tendermint/libs/log" + "cosmossdk.io/log" + storetypes "cosmossdk.io/store/types" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" - storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/provenance-io/provenance/x/trigger/types" @@ -14,13 +14,13 @@ import ( type Keeper struct { storeKey storetypes.StoreKey cdc codec.BinaryCodec - router baseapp.IMsgServiceRouter + router baseapp.MsgServiceRouter // TODO[1760]: msg-service-router } func NewKeeper( cdc codec.BinaryCodec, key storetypes.StoreKey, - router baseapp.IMsgServiceRouter, + router baseapp.MsgServiceRouter, // TODO[1760]: msg-service-router ) Keeper { return Keeper{ storeKey: key, diff --git a/x/trigger/keeper/keeper_test.go b/x/trigger/keeper/keeper_test.go index 64f1c65888..7a8abeffe2 100644 --- a/x/trigger/keeper/keeper_test.go +++ b/x/trigger/keeper/keeper_test.go @@ -5,6 +5,8 @@ import ( "testing" "time" + storetypes "cosmossdk.io/store/types" + "github.com/cosmos/cosmos-sdk/baseapp" codectypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/crypto/keyring" @@ -17,8 +19,9 @@ import ( "github.com/stretchr/testify/suite" + cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" + sdk "github.com/cosmos/cosmos-sdk/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" ) type KeeperTestSuite struct { @@ -50,7 +53,7 @@ func (s *KeeperTestSuite) SetupTest() { s.app = app.Setup(s.T()) s.CreateAccounts(4) s.msgServer = keeper.NewMsgServerImpl(s.app.TriggerKeeper) - s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{Time: time.Now().UTC()}) + s.ctx = s.app.BaseApp.NewContextLegacy(false, cmtproto.Header{Time: time.Now().UTC()}) s.ctx = s.ctx.WithBlockHeight(100) queryHelper := baseapp.NewQueryServerTestHelper(s.ctx, s.app.InterfaceRegistry()) @@ -59,7 +62,7 @@ func (s *KeeperTestSuite) SetupTest() { s.SetupEventHistory() - s.ctx = s.ctx.WithGasMeter(sdk.NewGasMeter(999999999999)) + s.ctx = s.ctx.WithGasMeter(storetypes.NewGasMeter(999999999999)) } func TestKeeperTestSuite(t *testing.T) { @@ -85,12 +88,14 @@ func (s *KeeperTestSuite) SetupEventHistory() { event2, event3, } - eventManagerStub := sdk.NewEventManagerWithHistory(loggedEvents.ToABCIEvents()) - s.ctx = s.ctx.WithEventManager(eventManagerStub) + // TODO[1760]: event-history: Put this back once the event history stuff is back in the SDK. + _ = loggedEvents + // eventManagerStub := sdk.NewEventManagerWithHistory(loggedEvents.ToABCIEvents()) + // s.ctx = s.ctx.WithEventManager(eventManagerStub) } func (s *KeeperTestSuite) CreateTrigger(id uint64, owner string, event types.TriggerEventI, action sdk.Msg) types.Trigger { actions, _ := sdktx.SetMsgs([]sdk.Msg{action}) - any, _ := codectypes.NewAnyWithValue(event) - return types.NewTrigger(id, owner, any, actions) + anyMsg, _ := codectypes.NewAnyWithValue(event) + return types.NewTrigger(id, owner, anyMsg, actions) } diff --git a/x/trigger/keeper/msg_server_test.go b/x/trigger/keeper/msg_server_test.go index 3fb2ea93f5..7fae5a2034 100644 --- a/x/trigger/keeper/msg_server_test.go +++ b/x/trigger/keeper/msg_server_test.go @@ -3,7 +3,10 @@ package keeper_test import ( "fmt" + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/provenance-io/provenance/x/trigger/types" ) @@ -33,9 +36,9 @@ func (s *KeeperTestSuite) TestCreateTrigger() { for _, tc := range tests { s.Run(tc.name, func() { em := sdk.NewEventManager() - ctx := s.ctx.WithGasMeter(sdk.NewGasMeter(9999999999)).WithEventManager(em) + ctx := s.ctx.WithGasMeter(storetypes.NewGasMeter(9999999999)).WithEventManager(em) response, err := s.msgServer.CreateTrigger(ctx, tc.request) - s.ctx = s.ctx.WithGasMeter(sdk.NewGasMeter(9999999999)) + s.ctx = s.ctx.WithGasMeter(storetypes.NewGasMeter(9999999999)) if len(tc.err) == 0 { s.NoError(err, "should not throw an error for handler") @@ -71,7 +74,7 @@ func (s *KeeperTestSuite) TestDestroyTrigger() { types.MustNewCreateTriggerRequest(owner2, event, []sdk.Msg{&action}), } for i, request := range setupRequests { - s.ctx = s.ctx.WithGasMeter(sdk.NewGasMeter(9999999999)) + s.ctx = s.ctx.WithGasMeter(storetypes.NewGasMeter(9999999999)) _, err := s.msgServer.CreateTrigger(s.ctx, request) s.Require().NoError(err, "Setup[%d]: CreateTrigger", i) } @@ -106,9 +109,9 @@ func (s *KeeperTestSuite) TestDestroyTrigger() { for _, tc := range tests { s.Run(tc.name, func() { em := sdk.NewEventManager() - ctx := s.ctx.WithGasMeter(sdk.NewGasMeter(9999999999)).WithEventManager(em) + ctx := s.ctx.WithGasMeter(storetypes.NewGasMeter(9999999999)).WithEventManager(em) _, err := s.msgServer.DestroyTrigger(ctx, tc.request) - s.ctx = s.ctx.WithGasMeter(sdk.NewGasMeter(9999999999)) + s.ctx = s.ctx.WithGasMeter(storetypes.NewGasMeter(9999999999)) if len(tc.err) == 0 { s.NoError(err, "should not throw an error on valid call to handler for TriggerDestroyRequest") diff --git a/x/trigger/keeper/query_server.go b/x/trigger/keeper/query_server.go index 587e91bbd3..a5090d649f 100644 --- a/x/trigger/keeper/query_server.go +++ b/x/trigger/keeper/query_server.go @@ -6,7 +6,7 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "github.com/cosmos/cosmos-sdk/store/prefix" + "cosmossdk.io/store/prefix" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/query" diff --git a/x/trigger/keeper/queue.go b/x/trigger/keeper/queue.go index fd3924f7de..f20dae7d6f 100644 --- a/x/trigger/keeper/queue.go +++ b/x/trigger/keeper/queue.go @@ -1,6 +1,8 @@ package keeper import ( + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/provenance-io/provenance/x/trigger/types" @@ -89,7 +91,7 @@ func (k Keeper) removeQueueIndex(ctx sdk.Context, index uint64) bool { // iterateQueue Iterates through all the queue items. func (k Keeper) iterateQueue(ctx sdk.Context, handle func(trigger types.QueuedTrigger) (stop bool, err error)) error { store := ctx.KVStore(k.storeKey) - iterator := sdk.KVStorePrefixIterator(store, types.QueueKeyPrefix) + iterator := storetypes.KVStorePrefixIterator(store, types.QueueKeyPrefix) defer iterator.Close() for ; iterator.Valid(); iterator.Next() { diff --git a/x/trigger/keeper/trigger.go b/x/trigger/keeper/trigger.go index 31364e3b9d..2dbe6a0680 100644 --- a/x/trigger/keeper/trigger.go +++ b/x/trigger/keeper/trigger.go @@ -1,6 +1,8 @@ package keeper import ( + storetypes "cosmossdk.io/store/types" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" @@ -40,7 +42,7 @@ func (k Keeper) GetTrigger(ctx sdk.Context, id types.TriggerID) (trigger types.T // IterateTriggers Iterates through all the triggers. func (k Keeper) IterateTriggers(ctx sdk.Context, handle func(trigger types.Trigger) (stop bool, err error)) error { store := ctx.KVStore(k.storeKey) - iterator := sdk.KVStorePrefixIterator(store, types.TriggerKeyPrefix) + iterator := storetypes.KVStorePrefixIterator(store, types.TriggerKeyPrefix) defer iterator.Close() for ; iterator.Valid(); iterator.Next() { diff --git a/x/trigger/keeper/trigger_dispatcher.go b/x/trigger/keeper/trigger_dispatcher.go index a6d63ecb12..7e73a92e48 100644 --- a/x/trigger/keeper/trigger_dispatcher.go +++ b/x/trigger/keeper/trigger_dispatcher.go @@ -3,9 +3,10 @@ package keeper import ( "fmt" + storetypes "cosmossdk.io/store/types" + "github.com/cosmos/cosmos-sdk/baseapp" codectypes "github.com/cosmos/cosmos-sdk/codec/types" - storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" sdktx "github.com/cosmos/cosmos-sdk/types/tx" @@ -47,7 +48,7 @@ func (k Keeper) ProcessTriggers(ctx sdk.Context) { // RunActions Runs all the actions and constrains them by gasLimit. func (k Keeper) runActions(ctx sdk.Context, gasLimit uint64, actions []*codectypes.Any) error { cacheCtx, flush := ctx.CacheContext() - gasMeter := sdk.NewGasMeter(gasLimit) + gasMeter := storetypes.NewGasMeter(gasLimit) cacheCtx = cacheCtx.WithGasMeter(gasMeter) ctx.BlockGasMeter().ConsumeGas(gasLimit, "trigger run attempt") diff --git a/x/trigger/keeper/trigger_dispatcher_test.go b/x/trigger/keeper/trigger_dispatcher_test.go index fa17998ab6..3de32394e7 100644 --- a/x/trigger/keeper/trigger_dispatcher_test.go +++ b/x/trigger/keeper/trigger_dispatcher_test.go @@ -3,8 +3,11 @@ package keeper_test import ( "fmt" + storetypes "cosmossdk.io/store/types" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/provenance-io/provenance/x/trigger/types" ) @@ -279,7 +282,7 @@ func (s *KeeperTestSuite) TestProcessTriggers() { } } s.ctx = s.ctx.WithEventManager(sdk.NewEventManager()) - s.ctx = s.ctx.WithBlockGasMeter(sdk.NewGasMeter(60000000)) + s.ctx = s.ctx.WithBlockGasMeter(storetypes.NewGasMeter(60000000)) if len(tc.panic) > 0 { s.PanicsWithValue(tc.panic, func() { diff --git a/x/trigger/keeper/trigger_registry_test.go b/x/trigger/keeper/trigger_registry_test.go index 64897e239b..d23b89b4db 100644 --- a/x/trigger/keeper/trigger_registry_test.go +++ b/x/trigger/keeper/trigger_registry_test.go @@ -3,8 +3,8 @@ package keeper_test import ( "math" - storetypes "github.com/cosmos/cosmos-sdk/store/types" - sdk "github.com/cosmos/cosmos-sdk/types" + storetypes "cosmossdk.io/store/types" + "github.com/provenance-io/provenance/x/trigger/types" ) @@ -14,38 +14,38 @@ func (s *KeeperTestSuite) TestRegisterTrigger() { tests := []struct { name string trigger types.Trigger - meter sdk.GasMeter + meter storetypes.GasMeter expected int panic *storetypes.ErrorOutOfGas }{ { name: "valid - register with infinite gas meter", - meter: sdk.NewInfiniteGasMeter(), + meter: storetypes.NewInfiniteGasMeter(), trigger: s.CreateTrigger(1, owner, &types.BlockHeightEvent{BlockHeight: uint64(s.ctx.BlockHeight())}, &types.MsgDestroyTriggerRequest{Id: 100, Authority: owner}), expected: 2000000, }, { name: "invalid - register with no gas", - meter: sdk.NewGasMeter(0), + meter: storetypes.NewGasMeter(0), trigger: s.CreateTrigger(1, owner, &types.BlockHeightEvent{BlockHeight: uint64(s.ctx.BlockHeight())}, &types.MsgDestroyTriggerRequest{Id: 100, Authority: owner}), expected: 0, panic: &storetypes.ErrorOutOfGas{Descriptor: "WriteFlat"}, }, { name: "valid - register with no gas for trigger", - meter: sdk.NewGasMeter(14190), + meter: storetypes.NewGasMeter(14190), trigger: s.CreateTrigger(1, owner, &types.BlockHeightEvent{BlockHeight: uint64(s.ctx.BlockHeight())}, &types.MsgDestroyTriggerRequest{Id: 100, Authority: owner}), expected: 0, }, { name: "valid - register with gas", - meter: sdk.NewGasMeter(9999999999), + meter: storetypes.NewGasMeter(9999999999), trigger: s.CreateTrigger(1, owner, &types.BlockHeightEvent{BlockHeight: uint64(s.ctx.BlockHeight())}, &types.MsgDestroyTriggerRequest{Id: 100, Authority: owner}), expected: 2000000, }, { name: "valid - register with maximum gas", - meter: sdk.NewGasMeter(math.MaxUint64), + meter: storetypes.NewGasMeter(math.MaxUint64), trigger: s.CreateTrigger(1, owner, &types.BlockHeightEvent{BlockHeight: uint64(s.ctx.BlockHeight())}, &types.MsgDestroyTriggerRequest{Id: 100, Authority: owner}), expected: 2000000, }, @@ -57,7 +57,7 @@ func (s *KeeperTestSuite) TestRegisterTrigger() { if tc.panic == nil { s.app.TriggerKeeper.RegisterTrigger(s.ctx, tc.trigger) - s.ctx = s.ctx.WithGasMeter(sdk.NewInfiniteGasMeter()) + s.ctx = s.ctx.WithGasMeter(storetypes.NewInfiniteGasMeter()) trigger, err := s.app.TriggerKeeper.GetTrigger(s.ctx, tc.trigger.Id) s.NoError(err, "should add trigger to store in RegisterTrigger") diff --git a/x/trigger/module/module.go b/x/trigger/module/module.go index 6a6a65f7fb..977a574237 100644 --- a/x/trigger/module/module.go +++ b/x/trigger/module/module.go @@ -9,7 +9,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" - abci "github.com/tendermint/tendermint/abci/types" + abci "github.com/cometbft/cometbft/abci/types" cerrs "cosmossdk.io/errors" @@ -33,6 +33,7 @@ var ( _ module.AppModule = AppModule{} _ module.AppModuleBasic = AppModuleBasic{} _ module.AppModuleSimulation = AppModule{} + // TODO[1760]: app-module: Add more assertions for the new types and clean up stuff no longer needed. ) // AppModuleBasic defines the basic application module used by the trigger module. @@ -109,6 +110,12 @@ func NewAppModule(cdc codec.Codec, keeper keeper.Keeper, accountKeeper authkeepe } } +// IsOnePerModuleType is a dummy function that satisfies the OnePerModuleType interface (needed by AppModule). +func (AppModule) IsOnePerModuleType() {} + +// IsAppModule is a dummy function that satisfies the AppModule interface. +func (AppModule) IsAppModule() {} + // GenerateGenesisState creates a randomized GenState of the trigger module. func (am AppModule) GenerateGenesisState(simState *module.SimulationState) { simulation.RandomizedGenState(simState) @@ -121,13 +128,13 @@ func (am AppModule) ProposalContents(_ module.SimulationState) []simtypes.Weight } // RandomizedParams returns randomized module parameters for param change proposals. -func (am AppModule) RandomizedParams(_ *rand.Rand) []simtypes.ParamChange { +func (am AppModule) RandomizedParams(_ *rand.Rand) []simtypes.LegacyParamChange { // currently no module params exist return nil } // RegisterStoreDecoder registers a func to decode each module's defined types from their corresponding store key -func (am AppModule) RegisterStoreDecoder(sdr sdk.StoreDecoderRegistry) { +func (am AppModule) RegisterStoreDecoder(sdr simtypes.StoreDecoderRegistry) { sdr[types.StoreKey] = simulation.NewDecodeStore(am.cdc) } @@ -146,19 +153,6 @@ func (AppModule) Name() string { // RegisterInvariants does nothing, there are no invariants to enforce func (AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} -// Deprecated: Route returns the message routing key for the trigger module. -func (am AppModule) Route() sdk.Route { - return sdk.Route{} -} - -// QuerierRoute returns the route we respond to for abci queries -func (AppModule) QuerierRoute() string { return "" } - -// LegacyQuerierHandler returns the trigger module sdk.Querier. -func (am AppModule) LegacyQuerierHandler(_ *codec.LegacyAmino) sdk.Querier { - return nil -} - // InitGenesis performs genesis initialization for the trigger module. It returns // no validator updates. func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) []abci.ValidatorUpdate { @@ -180,15 +174,16 @@ func (AppModule) ConsensusVersion() uint64 { return 1 } // BeginBlock is the `BeginBlocker` function run at the beginning of each block to // process trigger module updates. -func (am AppModule) BeginBlock(ctx sdk.Context, _ abci.RequestBeginBlock) { - triggerModule.BeginBlocker(ctx, am.keeper) +func (am AppModule) BeginBlock(ctx context.Context) error { + triggerModule.BeginBlocker(sdk.UnwrapSDKContext(ctx), am.keeper) + return nil } // EndBlock The `EndBlocker` abci call is ran at the end of each block. The `EventManager` is monitored // and `Qualifying Actions` are deduced from newly created events and prior internal state. -func (am AppModule) EndBlock(ctx sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate { - triggerModule.EndBlocker(ctx, am.keeper) - return []abci.ValidatorUpdate{} +func (am AppModule) EndBlock(ctx context.Context) error { + triggerModule.EndBlocker(sdk.UnwrapSDKContext(ctx), am.keeper) + return nil } // RegisterServices registers a gRPC query service to respond to the diff --git a/x/trigger/simulation/genesis.go b/x/trigger/simulation/genesis.go index 3a83d15df5..de3ac9d5a9 100644 --- a/x/trigger/simulation/genesis.go +++ b/x/trigger/simulation/genesis.go @@ -175,25 +175,25 @@ func randomTriggerIDs(r *rand.Rand, count int, max int) []uint64 { func RandomizedGenState(simState *module.SimulationState) { var triggerID uint64 simState.AppParams.GetOrGenerate( - simState.Cdc, TriggerID, &triggerID, simState.Rand, + TriggerID, &triggerID, simState.Rand, func(r *rand.Rand) { triggerID = TriggerIDStartFn(r) }, ) var queueStart uint64 simState.AppParams.GetOrGenerate( - simState.Cdc, QueueStart, &queueStart, simState.Rand, + QueueStart, &queueStart, simState.Rand, func(r *rand.Rand) { queueStart = QueueStartFn(r) }, ) var numIniTrig int simState.AppParams.GetOrGenerate( - simState.Cdc, NumIniTrig, &numIniTrig, simState.Rand, + NumIniTrig, &numIniTrig, simState.Rand, func(r *rand.Rand) { numIniTrig = r.Intn(6) }, ) var numIniTrigQueued int simState.AppParams.GetOrGenerate( - simState.Cdc, NumIniTrigQueued, &numIniTrigQueued, simState.Rand, + NumIniTrigQueued, &numIniTrigQueued, simState.Rand, func(r *rand.Rand) { numIniTrigQueued = r.Intn(6) }, ) @@ -204,13 +204,13 @@ func RandomizedGenState(simState *module.SimulationState) { triggerIDs, queueTriggerIDs := randomTriggerAndQueueIDs(simState.Rand, numIniTrig, numIniTrigQueued, int(triggerID)) var triggers []types.Trigger simState.AppParams.GetOrGenerate( - simState.Cdc, Triggers, &triggers, simState.Rand, + Triggers, &triggers, simState.Rand, func(r *rand.Rand) { triggers = RandomNewTriggers(r, simState, simState.Accounts, triggerIDs) }, ) var queuedTriggers []types.QueuedTrigger simState.AppParams.GetOrGenerate( - simState.Cdc, QueuedTriggers, &queuedTriggers, simState.Rand, + QueuedTriggers, &queuedTriggers, simState.Rand, func(r *rand.Rand) { queuedTriggers = RandomNewQueuedTriggers(r, simState, simState.Accounts, queueTriggerIDs) }, @@ -218,7 +218,7 @@ func RandomizedGenState(simState *module.SimulationState) { var gasLimits []types.GasLimit simState.AppParams.GetOrGenerate( - simState.Cdc, GasLimits, &gasLimits, simState.Rand, + GasLimits, &gasLimits, simState.Rand, func(r *rand.Rand) { gasLimits = RandomGasLimits(r, triggers, queuedTriggers) }, ) diff --git a/x/trigger/simulation/operations.go b/x/trigger/simulation/operations.go index 25a96d4fed..33c745a702 100644 --- a/x/trigger/simulation/operations.go +++ b/x/trigger/simulation/operations.go @@ -4,9 +4,11 @@ import ( "fmt" "math/rand" + sdkmath "cosmossdk.io/math" + "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" - "github.com/cosmos/cosmos-sdk/simapp/helpers" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" @@ -37,12 +39,12 @@ func WeightedOperations( weightMsgDestroyTrigger int ) - appParams.GetOrGenerate(cdc, OpWeightMsgCreateTrigger, &weightMsgCreateTrigger, nil, + appParams.GetOrGenerate(OpWeightMsgCreateTrigger, &weightMsgCreateTrigger, nil, func(_ *rand.Rand) { weightMsgCreateTrigger = simappparams.DefaultWeightSubmitCreateTrigger }, ) - appParams.GetOrGenerate(cdc, OpWeightMsgDestroyTrigger, &weightMsgDestroyTrigger, nil, + appParams.GetOrGenerate(OpWeightMsgDestroyTrigger, &weightMsgDestroyTrigger, nil, func(_ *rand.Rand) { weightMsgDestroyTrigger = simappparams.DefaultWeightSubmitDestroyTrigger }, @@ -129,20 +131,20 @@ func Dispatch( if err != nil { return simtypes.NoOpMsg(sdk.MsgTypeURL(msg), sdk.MsgTypeURL(msg), "unable to generate fees"), nil, err } - err = testutil.FundAccount(bk, ctx, account.GetAddress(), sdk.NewCoins(sdk.Coin{ + err = testutil.FundAccount(ctx, bk, account.GetAddress(), sdk.NewCoins(sdk.Coin{ Denom: pioconfig.GetProvenanceConfig().BondDenom, - Amount: sdk.NewInt(1_000_000_000_000_000), + Amount: sdkmath.NewInt(1_000_000_000_000_000), })) if err != nil { return simtypes.NoOpMsg(sdk.MsgTypeURL(msg), sdk.MsgTypeURL(msg), "unable to fund account"), nil, err } txGen := simappparams.MakeTestEncodingConfig().TxConfig - tx, err := helpers.GenSignedMockTx( + tx, err := simtestutil.GenSignedMockTx( r, txGen, []sdk.Msg{msg}, fees, - helpers.DefaultGenTxGas, + simtestutil.DefaultGenTxGas, chainID, []uint64{account.GetAccountNumber()}, []uint64{account.GetSequence()}, @@ -157,7 +159,7 @@ func Dispatch( return simtypes.NoOpMsg(sdk.MsgTypeURL(msg), sdk.MsgTypeURL(msg), err.Error()), nil, nil } - return simtypes.NewOperationMsg(msg, true, "", &codec.ProtoCodec{}), futures, nil + return simtypes.NewOperationMsg(msg, true, ""), futures, nil } func randomTrigger(r *rand.Rand, ctx sdk.Context, k keeper.Keeper) *types.Trigger { diff --git a/x/trigger/simulation/operations_test.go b/x/trigger/simulation/operations_test.go index ab6d9cb232..4be9de1922 100644 --- a/x/trigger/simulation/operations_test.go +++ b/x/trigger/simulation/operations_test.go @@ -9,9 +9,6 @@ import ( "github.com/stretchr/testify/suite" - abci "github.com/tendermint/tendermint/abci/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" @@ -33,7 +30,7 @@ type SimTestSuite struct { func (s *SimTestSuite) SetupTest() { s.app = app.Setup(s.T()) - s.ctx = s.app.BaseApp.NewContext(false, tmproto.Header{}) + s.ctx = s.app.BaseApp.NewContext(false) } // LogOperationMsg logs all fields of the provided operationMsg. @@ -69,7 +66,7 @@ func (s *SimTestSuite) TestWeightedOperations() { accs := s.getTestingAccounts(r, 3) // begin a new block - s.app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) + // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) // TODO[1760]: finalize-block expected := []struct { weight int @@ -112,7 +109,7 @@ func (s *SimTestSuite) TestSimulateMsgCreateTrigger() { accounts := s.getTestingAccounts(r, 3) // begin a new block - s.app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) + // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) // TODO[1760]: finalize-block // bad operation op := simulation.SimulateMsgCreateTrigger(s.app.TriggerKeeper, s.app.AccountKeeper, s.app.BankKeeper) @@ -152,7 +149,7 @@ func (s *SimTestSuite) TestSimulateMsgDestroyTrigger() { s.app.TriggerKeeper.SetGasLimit(s.ctx, trigger.GetId(), 1000) // begin a new block - s.app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) + // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) // TODO[1760]: finalize-block // execute operation op := simulation.SimulateMsgDestroyTrigger(s.app.TriggerKeeper, s.app.AccountKeeper, s.app.BankKeeper) @@ -243,7 +240,7 @@ func (s *SimTestSuite) getTestingAccounts(r *rand.Rand, n int) []simtypes.Accoun for _, account := range accounts { acc := s.app.AccountKeeper.NewAccountWithAddress(s.ctx, account.Address) s.app.AccountKeeper.SetAccount(s.ctx, acc) - err := testutil.FundAccount(s.app.BankKeeper, s.ctx, account.Address, initCoins) + err := testutil.FundAccount(s.ctx, s.app.BankKeeper, account.Address, initCoins) s.Require().NoError(err) } diff --git a/x/trigger/types/genesis.go b/x/trigger/types/genesis.go index 8520913dd0..ce27dc3a63 100644 --- a/x/trigger/types/genesis.go +++ b/x/trigger/types/genesis.go @@ -5,6 +5,8 @@ import ( types "github.com/cosmos/cosmos-sdk/codec/types" sdktx "github.com/cosmos/cosmos-sdk/types/tx" + + "github.com/provenance-io/provenance/internal/helpers" ) var _ types.UnpackInterfacesMessage = (*GenesisState)(nil) @@ -58,7 +60,7 @@ func (gs GenesisState) Validate() error { } for idx, msg := range msgs { - if err = msg.ValidateBasic(); err != nil { + if err = helpers.ValidateBasic(msg); err != nil { return fmt.Errorf("trigger id: %d, msg: %d, err: %w", trigger.GetId(), idx, err) } } diff --git a/x/trigger/types/keys.go b/x/trigger/types/keys.go index 7aebd60244..f24edeb2c4 100644 --- a/x/trigger/types/keys.go +++ b/x/trigger/types/keys.go @@ -17,9 +17,6 @@ const ( // RouterKey is the message route for slashing RouterKey = ModuleName - // QuerierRoute defines the module's query routing key - QuerierRoute = ModuleName - EventOrderLength = 8 TriggerIDLength = 8 QueueIndexLength = 8 diff --git a/x/trigger/types/msgs.go b/x/trigger/types/msgs.go index 3ccdbbc9b4..d62fe75b6b 100644 --- a/x/trigger/types/msgs.go +++ b/x/trigger/types/msgs.go @@ -6,6 +6,8 @@ import ( codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" sdktx "github.com/cosmos/cosmos-sdk/types/tx" + + "github.com/provenance-io/provenance/internal/helpers" ) var _ sdk.Msg = &MsgCreateTriggerRequest{} @@ -69,12 +71,13 @@ func (msg MsgCreateTriggerRequest) ValidateBasic() error { } for idx, action := range actions { - if err = action.ValidateBasic(); err != nil { - return fmt.Errorf("action: %d: %w", idx, err) - } - if err = hasSigners(authorities, action.GetSigners()); err != nil { + if err = helpers.ValidateBasic(action); err != nil { return fmt.Errorf("action: %d: %w", idx, err) } + // TODO[1760]: signers: getting signers now requies a context, so it can' live in this MsgCreateTriggerRequest ValidateBasic(). + // if err = hasSigners(authorities, action.GetSigners()); err != nil { + // return fmt.Errorf("action: %d: %w", idx, err) + // } } return nil } diff --git a/x/trigger/types/trigger.go b/x/trigger/types/trigger.go index d379ce611d..4d19efb5a0 100644 --- a/x/trigger/types/trigger.go +++ b/x/trigger/types/trigger.go @@ -7,7 +7,7 @@ import ( proto "github.com/gogo/protobuf/proto" - abci "github.com/tendermint/tendermint/abci/types" + abci "github.com/cometbft/cometbft/abci/types" codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/trigger/types/trigger_test.go b/x/trigger/types/trigger_test.go index 3270fc13b8..92750c2877 100644 --- a/x/trigger/types/trigger_test.go +++ b/x/trigger/types/trigger_test.go @@ -6,12 +6,13 @@ import ( "github.com/stretchr/testify/assert" + abci "github.com/cometbft/cometbft/abci/types" + "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" - abci "github.com/tendermint/tendermint/abci/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" ) func TestNewTrigger(t *testing.T) { @@ -55,37 +56,37 @@ func TestTransactionEventMatches(t *testing.T) { { name: "valid - two exact events match", event: TransactionEvent{Name: "name", Attributes: []Attribute{{Name: "attr1", Value: "value1"}, {Name: "attr2", Value: "value2"}}}, - event2: abci.Event{Type: "name", Attributes: []abci.EventAttribute{{Key: []byte("attr1"), Value: []byte("value1")}, {Key: []byte("attr2"), Value: []byte("value2")}}}, + event2: abci.Event{Type: "name", Attributes: []abci.EventAttribute{{Key: "attr1", Value: "value1"}, {Key: "attr2", Value: "value2"}}}, shouldMatch: true, }, { name: "valid - only specified attributes need to match match", event: TransactionEvent{Name: "name", Attributes: []Attribute{{Name: "attr1", Value: "value1"}}}, - event2: abci.Event{Type: "name", Attributes: []abci.EventAttribute{{Key: []byte("attr1"), Value: []byte("value1")}, {Key: []byte("attr2"), Value: []byte("value2")}}}, + event2: abci.Event{Type: "name", Attributes: []abci.EventAttribute{{Key: "attr1", Value: "value1"}, {Key: "attr2", Value: "value2"}}}, shouldMatch: true, }, { name: "valid - no attributes", event: TransactionEvent{Name: "name", Attributes: []Attribute{}}, - event2: abci.Event{Type: "name", Attributes: []abci.EventAttribute{{Key: []byte("attr1"), Value: []byte("value1")}, {Key: []byte("attr2"), Value: []byte("value2")}}}, + event2: abci.Event{Type: "name", Attributes: []abci.EventAttribute{{Key: "attr1", Value: "value1"}, {Key: "attr2", Value: "value2"}}}, shouldMatch: true, }, { name: "invalid - event name doesn't match", event: TransactionEvent{Name: "invalid", Attributes: []Attribute{{Name: "attr1", Value: "value1"}, {Name: "attr2", Value: "value2"}}}, - event2: abci.Event{Type: "name", Attributes: []abci.EventAttribute{{Key: []byte("attr1"), Value: []byte("value1")}, {Key: []byte("attr2"), Value: []byte("value2")}}}, + event2: abci.Event{Type: "name", Attributes: []abci.EventAttribute{{Key: "attr1", Value: "value1"}, {Key: "attr2", Value: "value2"}}}, shouldMatch: false, }, { name: "invalid - missing attribute", event: TransactionEvent{Name: "name", Attributes: []Attribute{{Name: "attr1", Value: "value1"}, {Name: "attr2", Value: "value2"}}}, - event2: abci.Event{Type: "name", Attributes: []abci.EventAttribute{{Key: []byte("attr1"), Value: []byte("value1")}, {Key: []byte("attr3"), Value: []byte("value3")}}}, + event2: abci.Event{Type: "name", Attributes: []abci.EventAttribute{{Key: "attr1", Value: "value1"}, {Key: "attr3", Value: "value3"}}}, shouldMatch: false, }, { name: "invalid - attribute value doesn't match", event: TransactionEvent{Name: "name", Attributes: []Attribute{{Name: "attr1", Value: "value1"}, {Name: "attr2", Value: "value2"}}}, - event2: abci.Event{Type: "name", Attributes: []abci.EventAttribute{{Key: []byte("attr1"), Value: []byte("value3")}, {Key: []byte("attr2"), Value: []byte("value2")}}}, + event2: abci.Event{Type: "name", Attributes: []abci.EventAttribute{{Key: "attr1", Value: "value3"}, {Key: "attr2", Value: "value2"}}}, shouldMatch: false, }, } @@ -107,25 +108,25 @@ func TestAttributeMatches(t *testing.T) { { name: "valid - two exact attributes are equal", attr1: Attribute{Name: "attr", Value: "value"}, - attr2: abci.EventAttribute{Key: []byte("attr"), Value: []byte("value")}, + attr2: abci.EventAttribute{Key: "attr", Value: "value"}, shouldMatch: true, }, { name: "valid - attribute matches wildcard", attr1: Attribute{Name: "attr", Value: ""}, - attr2: abci.EventAttribute{Key: []byte("attr"), Value: []byte("value")}, + attr2: abci.EventAttribute{Key: "attr", Value: "value"}, shouldMatch: true, }, { name: "invalid - names don't match", attr1: Attribute{Name: "attr", Value: "value"}, - attr2: abci.EventAttribute{Key: []byte("blah"), Value: []byte("value")}, + attr2: abci.EventAttribute{Key: "blah", Value: "value"}, shouldMatch: false, }, { name: "invalid - values don't match", attr1: Attribute{Name: "attr", Value: "value"}, - attr2: abci.EventAttribute{Key: []byte("attr"), Value: []byte("blah")}, + attr2: abci.EventAttribute{Key: "attr", Value: "blah"}, shouldMatch: false, }, } @@ -192,7 +193,7 @@ func TestTransactionEventValidate(t *testing.T) { } func TestTransactionEventValidateContext(t *testing.T) { - ctx := sdk.NewContext(nil, tmproto.Header{Time: time.Now().UTC()}, false, nil) + ctx := sdk.NewContext(nil, cmtproto.Header{Time: time.Now().UTC()}, false, nil) ctx = ctx.WithBlockHeight(100) tests := []struct { @@ -220,7 +221,7 @@ func TestTransactionEventValidateContext(t *testing.T) { } func TestBlockHeightEventValidateContext(t *testing.T) { - ctx := sdk.NewContext(nil, tmproto.Header{Time: time.Now().UTC()}, false, nil) + ctx := sdk.NewContext(nil, cmtproto.Header{Time: time.Now().UTC()}, false, nil) ctx = ctx.WithBlockHeight(100) tests := []struct { @@ -259,7 +260,7 @@ func TestBlockHeightEventValidateContext(t *testing.T) { func TestBlockTimeEventValidateContext(t *testing.T) { now := time.Now().UTC() - ctx := sdk.NewContext(nil, tmproto.Header{Time: now}, false, nil) + ctx := sdk.NewContext(nil, cmtproto.Header{Time: now}, false, nil) ctx = ctx.WithBlockHeight(100) tests := []struct { From 894abaa16fa0212e99142c22408a11d9ebb0c376 Mon Sep 17 00:00:00 2001 From: Matt Witkowski Date: Wed, 13 Mar 2024 14:49:19 -0400 Subject: [PATCH 02/11] Add PreBlocker to v0.50. (#1859) * Add PreBlocker to app.go * Remove upgradetypes from BeginBlocker. * Add changelog entry. --- CHANGELOG.md | 1 + app/app.go | 12 +++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f87af8bd0..8c814c6862 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -44,6 +44,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ * Add CLI commands for the exchange module endpoints and queries [#1701](https://github.com/provenance-io/provenance/issues/1701). * Add CLI command to generate autocomplete shell scripts [#1762](https://github.com/provenance-io/provenance/pull/1762). * Create CLI commands for adding a market to a genesis file [#1757](https://github.com/provenance-io/provenance/issues/1757). +* Add PreBlocker support for sdk v0.50 [#1760](https://github.com/provenance-io/provenance/issues/1760). ### Improvements diff --git a/app/app.go b/app/app.go index 94537b6544..2a89c804d4 100644 --- a/app/app.go +++ b/app/app.go @@ -830,12 +830,16 @@ func New( app.BasicModuleManager.RegisterLegacyAminoCodec(legacyAmino) app.BasicModuleManager.RegisterInterfaces(interfaceRegistry) + // NOTE: upgrade module is required to be prioritized + app.mm.SetOrderPreBlockers( + upgradetypes.ModuleName, + ) + // 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 app.mm.SetOrderBeginBlockers( - upgradetypes.ModuleName, capabilitytypes.ModuleName, minttypes.ModuleName, distrtypes.ModuleName, @@ -1058,6 +1062,7 @@ func New( // initialize BaseApp app.SetInitChainer(app.InitChainer) + app.SetPreBlocker(app.PreBlocker) app.SetBeginBlocker(app.BeginBlocker) anteHandler, err := antewrapper.NewAnteHandler( antewrapper.HandlerOptions{ @@ -1168,6 +1173,11 @@ func (app *App) GetTxConfig() client.TxConfig { // Name returns the name of the App func (app *App) Name() string { return app.BaseApp.Name() } +// PreBlocker application updates every pre block +func (app *App) PreBlocker(ctx sdk.Context, _ *abci.RequestFinalizeBlock) (*sdk.ResponsePreBlock, error) { + return app.mm.PreBlock(ctx) +} + // BeginBlocker application updates every begin block func (app *App) BeginBlocker(ctx sdk.Context) (sdk.BeginBlock, error) { return app.mm.BeginBlock(ctx) From ab546d804c8e85e7ccf94503e1b918c84839d292 Mon Sep 17 00:00:00 2001 From: Matt Witkowski Date: Wed, 13 Mar 2024 15:55:36 -0400 Subject: [PATCH 03/11] Remove unsupported databases for sdk v0.50. (#1862) * Remove unused databases. * Remove mention of other databases in Changelog. * Remove and update scripts for other databases. * Remove dbmigrate command and util. * Remove some references to cleveldb, badgerdb, and rocksdb. * Remove dbmigrate from Building.md. * Remove dbmigrate from Makefile and update workflows to remove other databses. * Remove dbmigrate from workflow, scripts, and other repo specific files. * Remove cleveldb frrom sims.yml * [1760]: Remove the db cache stuff from sims.yml since there's nothing left for it to cache anymore. --------- Co-authored-by: Daniel Wedul --- .github/workflows/release.yml | 55 -- .github/workflows/sims.yml | 49 +- .gitignore | 1 - .golangci.yml | 2 - CHANGELOG.md | 1 + Makefile | 83 +-- cmd/dbmigrate/cmd/dbmigrate.go | 214 ------ cmd/dbmigrate/main.go | 25 - cmd/dbmigrate/utils/badgerdb.go | 17 - cmd/dbmigrate/utils/boltdb.go | 17 - cmd/dbmigrate/utils/cleveldb.go | 17 - cmd/dbmigrate/utils/migrator.go | 956 ------------------------ cmd/dbmigrate/utils/migrator_test.go | 998 -------------------------- cmd/dbmigrate/utils/rocksdb.go | 17 - docs/Building.md | 112 --- scripts/cleveldb_build_and_install.sh | 120 ---- scripts/no-now-lint.sh | 2 - scripts/rocksdb_build_and_install.sh | 123 ---- scripts/run-sims-with-all-dbs.sh | 4 +- sims.mk | 12 +- 20 files changed, 9 insertions(+), 2816 deletions(-) delete mode 100644 cmd/dbmigrate/cmd/dbmigrate.go delete mode 100644 cmd/dbmigrate/main.go delete mode 100644 cmd/dbmigrate/utils/badgerdb.go delete mode 100644 cmd/dbmigrate/utils/boltdb.go delete mode 100644 cmd/dbmigrate/utils/cleveldb.go delete mode 100644 cmd/dbmigrate/utils/migrator.go delete mode 100644 cmd/dbmigrate/utils/migrator_test.go delete mode 100644 cmd/dbmigrate/utils/rocksdb.go delete mode 100755 scripts/cleveldb_build_and_install.sh delete mode 100755 scripts/rocksdb_build_and_install.sh diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 20360a6942..6a1d7eae9d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -72,8 +72,6 @@ jobs: - name: Build osx binary run: | export VERSION=${{ needs.build_init.outputs.version }} - export WITH_CLEVELDB=false - export WITH_ROCKSDB=false make build-release-zip - name: Provenanced version # TODO[1760]: github: Re-enable the build_osx provenanced version step. @@ -102,12 +100,9 @@ jobs: run: | sudo apt-get update sudo apt-get install -y libgflags-dev libsnappy-dev zlib1g-dev libbz2-dev liblz4-dev libzstd-dev - - name: Build and install cleveldb - run: make cleveldb - name: Build linux binary run: | export VERSION=${{ needs.build_init.outputs.version }} - export WITH_CLEVELDB=true make build-release-zip - name: Provenanced version # TODO[1760]: github: Re-enable the build_linux provenanced version step. @@ -121,40 +116,6 @@ jobs: name: linux-zip path: build/provenance*.zip - build_dbmigrate: - runs-on: ubuntu-20.04 - needs: - - build_init - name: Build dbmigrate - env: - LD_LIBRARY_PATH: /usr/local/lib:/usr/local/lib/x86_64-linux-gnu - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Setup go - uses: actions/setup-go@v4 - with: - go-version: ${{ needs.build_init.outputs.go_version }} - - name: Install deps - run: | - sudo apt-get update - sudo apt-get install -y libgflags-dev libsnappy-dev zlib1g-dev libbz2-dev liblz4-dev libzstd-dev - - name: Build and install cleveldb - run: make cleveldb - - name: Build dbmigrate binary - run: | - export VERSION=${{ needs.build_init.outputs.version }} - export WITH_CLEVELDB=true - export WITH_ROCKSDB=false - export WITH_BADGERDB=false - make build-dbmigrate-zip - - name: dbmigrate --help - run: build/dbmigrate --help - - uses: actions/upload-artifact@v3 - with: - name: dbmigrate-zip - path: build/dbmigrate*.zip - buf_push: needs: - build_init @@ -176,7 +137,6 @@ jobs: needs: - build_init - build_linux - - build_dbmigrate if: needs.build_init.outputs.is_release == 'true' runs-on: ubuntu-latest name: Create Release @@ -216,11 +176,6 @@ jobs: with: name: linux-zip path: build/ - - name: Download dbmigrate zip artifact - uses: actions/download-artifact@v3 - with: - name: dbmigrate-zip - path: build/ - name: Create release items id: create-items run: | @@ -235,16 +190,6 @@ jobs: asset_path: ./build/provenance-linux-amd64-${{ needs.build_init.outputs.version }}.zip asset_name: provenance-linux-amd64-${{ needs.build_init.outputs.version }}.zip asset_content_type: application/octet-stream - - name: Upload dbmigrate zip artifact - if: always() && steps.create-items.outcome == 'success' - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ needs.create_release.outputs.release_url }} - asset_path: ./build/dbmigrate-linux-amd64-${{ needs.build_init.outputs.version }}.zip - asset_name: dbmigrate-linux-amd64-${{ needs.build_init.outputs.version }}.zip - asset_content_type: application/octet-stream - name: Upload release checksum if: always() && steps.create-items.outcome == 'success' uses: actions/upload-release-asset@v1 diff --git a/.github/workflows/sims.yml b/.github/workflows/sims.yml index 6a00dc10a0..5ad2335dd8 100644 --- a/.github/workflows/sims.yml +++ b/.github/workflows/sims.yml @@ -41,9 +41,6 @@ jobs: file_prefix="sim-test-${GITHUB_SHA:0:7}-${GITHUB_RUN_ATTEMPT}" echo "Setting output: file-prefix=$file_prefix" echo "file-prefix=$file_prefix" >> "$GITHUB_OUTPUT" - db_cache_key_hash="${{ hashFiles('scripts/cleveldb_build_and_install.sh') }}" - echo "Setting output: db-cache-key-hash=$db_cache_key_hash" - echo "db-cache-key-hash=$db_cache_key_hash" >> "$GITHUB_OUTPUT" go_cache_key_hash="${{ hashFiles('go.sum') }}" echo "Setting output: go-cache-key-hash=$go_cache_key_hash" echo "go-cache-key-hash=$go_cache_key_hash" >> "$GITHUB_OUTPUT" @@ -51,13 +48,6 @@ jobs: go-version: '1.21' should-run: ${{ env.GIT_DIFF }} file-prefix: ${{ steps.def-vars.outputs.file-prefix }} - db-cache-key-suffix: sims-db3-${{ steps.def-vars.outputs.db-cache-key-hash }} - # In Order: - # * The leveldb repo tarball - # * The directory extracted from the leveldb tarball - db-cache-path: | - leveldb*.tar.gz - leveldb-* go-cache-key-suffix: sims-go3-${{ steps.def-vars.outputs.go-cache-key-hash }} # In Order: # * Go binary directory @@ -79,16 +69,8 @@ jobs: echo " go-version: [${{ needs.setup.outputs.go-version }}]" echo " should-run: [${{ needs.setup.outputs.should-run }}]" echo " file-prefix: [${{ needs.setup.outputs.file-prefix }}]" - echo "db-cache-key-suffix: [${{ needs.setup.outputs.db-cache-key-suffix }}]" - echo " db-cache-path: [${{ needs.setup.outputs.db-cache-path }}]" echo "go-cache-key-suffix: [${{ needs.setup.outputs.go-cache-key-suffix }}]" echo " go-cache-path: [${{ needs.setup.outputs.go-cache-path }}]" - - uses: actions/cache@v3 - name: Load db cache - id: db-cache-setup - with: - key: ${{ runner.os }}-${{ needs.setup.outputs.db-cache-key-suffix }} - path: ${{ needs.setup.outputs.db-cache-path }} - uses: actions/cache@v3 name: Load go cache id: go-cache-setup @@ -101,21 +83,6 @@ jobs: run: | sudo apt-get update sudo apt-get install -y libgflags-dev libsnappy-dev zlib1g-dev libbz2-dev liblz4-dev libzstd-dev wget curl build-essential cmake gcc sqlite3 - - name: Build cleveldb - if: steps.db-cache-setup.outputs.cache-hit != 'true' - run: | - export CLEVELDB_DO_BUILD='true' - export CLEVELDB_DO_INSTALL='false' - export CLEVELDB_DO_CLEANUP='false' - make cleveldb - - name: Install cleveldb - run: | - export CLEVELDB_DO_BUILD='false' - export CLEVELDB_DO_INSTALL='true' - export CLEVELDB_SUDO='true' - export CLEVELDB_DO_CLEANUP='false' - make cleveldb - echo 'WITH_CLEVELDB=true' >> "$GITHUB_ENV" - uses: actions/setup-go@v4 with: go-version: ${{ needs.setup.outputs.go-version }} @@ -198,16 +165,11 @@ jobs: # The test-sim-simple test is pretty quick and should be able to identify glaring problems. # The test-sim-benchmark is handy to have for each db type. test: ["simple", "benchmark"] - db-backend: ["goleveldb", "cleveldb"] + db-backend: ["goleveldb"] os: ["ubuntu-latest"] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - - uses: actions/cache@v3 - name: Load db cache - with: - key: ${{ runner.os }}-${{ needs.setup.outputs.db-cache-key-suffix }} - path: ${{ needs.setup.outputs.db-cache-path }} - uses: actions/cache@v3 name: Load go cache with: @@ -219,15 +181,6 @@ jobs: test_logs="${{ needs.setup.outputs.file-prefix }}-${{ matrix.test }}-${{ matrix.db-backend }}-${{ matrix.os }}" echo "Setting output: test-logs=$test_logs" echo "test-logs=$test_logs" >> "$GITHUB_OUTPUT" - - name: Install cleveldb - if: matrix.db-backend == 'cleveldb' - run: | - export CLEVELDB_DO_BUILD='false' - export CLEVELDB_DO_INSTALL='true' - export CLEVELDB_SUDO='true' - export CLEVELDB_DO_CLEANUP='false' - make cleveldb - echo 'WITH_CLEVELDB=true' >> "$GITHUB_ENV" - uses: actions/setup-go@v4 with: go-version: ${{ needs.setup.outputs.go-version }} diff --git a/.gitignore b/.gitignore index e0a56f83ad..b7b5babd83 100644 --- a/.gitignore +++ b/.gitignore @@ -8,7 +8,6 @@ data/ .idea/ *.swp utils/ -!cmd/dbmigrate/utils .blockade blockade.yaml *.sock diff --git a/.golangci.yml b/.golangci.yml index d679efafdf..7ee16aa53a 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -105,8 +105,6 @@ linters-settings: - github.com/grpc-ecosystem/grpc-gateway - - github.com/otiai10/copy # Used by the dbmigrate only - - github.com/provenance-io/provenance - github.com/rakyll/statik/fs diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c814c6862..3c21ef5290 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -51,6 +51,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ * Add upgrade handler for 1.18 [#1756](https://github.com/provenance-io/provenance/pull/1756). * Updated documentation for each module to work with docusaurus [PR 1763](https://github.com/provenance-io/provenance/pull/1763). * Create a default market in `make run`, `localnet`, `devnet` and the `provenanced testnet` command [#1757](https://github.com/provenance-io/provenance/issues/1757). +* Remove unsupported database types [#1760](https://github.com/provenance-io/provenance/issues/1760). ### Dependencies diff --git a/Makefile b/Makefile index abccb09a5c..8416d659ef 100644 --- a/Makefile +++ b/Makefile @@ -6,23 +6,11 @@ BINDIR ?= $(GOPATH)/bin BUILDDIR ?= $(CURDIR)/build WITH_LEDGER ?= true -WITH_CLEVELDB ?= false -WITH_ROCKSDB ?= false -WITH_BADGERDB ?= false # We used to use 'yes' on these flags, so at least for now, change 'yes' into 'true' ifeq ($(WITH_LEDGER),yes) WITH_LEDGER=true endif -ifeq ($(WITH_CLEVELDB),yes) - WITH_CLEVELDB=true -endif -ifeq ($(WITH_ROCKSDB),yes) - WITH_ROCKSDB=true -endif -ifeq ($(WITH_BADGERDB),yes) - WITH_BADGERDB=true -endif BRANCH := $(shell git rev-parse --abbrev-ref HEAD 2> /dev/null) BRANCH_PRETTY := $(subst /,-,$(BRANCH)) @@ -79,21 +67,6 @@ endif # Build Flags/Tags ############################## -ifeq ($(WITH_CLEVELDB),true) - ifneq ($(have_gcc),true) - $(error gcc not installed for cleveldb support, please install or set WITH_CLEVELDB=false) - else - build_tags += gcc - build_tags += cleveldb - endif -endif -ifeq ($(WITH_ROCKSDB),true) - build_tags += rocksdb -endif -ifeq ($(WITH_BADGERDB),true) - build_tags += badgerdb -endif - ifeq ($(WITH_LEDGER),true) ifeq ($(UNAME_S),openbsd) $(warning OpenBSD detected, disabling ledger support (https://github.com/cosmos/cosmos-sdk/issues/1988)) @@ -114,20 +87,6 @@ else ifeq ($(UNAME_S),linux) cgo_ldflags += -Wl,-rpath,\$$ORIGIN endif -# cleveldb linker settings -ifeq ($(WITH_CLEVELDB),true) - ifeq ($(UNAME_S),darwin) - LEVELDB_PATH ?= $(shell brew --prefix leveldb 2> /dev/null) - # Only do stuff if that LEVELDB_PATH exists. Otherwise, leave it up to already installed libraries. - ifneq ($(wildcard $(LEVELDB_PATH)/.),) - cgo_cflags += -I$(LEVELDB_PATH)/include - cgo_ldflags += -L$(LEVELDB_PATH)/lib - endif - else ifeq ($(UNAME_S),linux) - # Intentionally left blank to leave it up to already installed libraries. - endif -endif - cgo_ldflags += $(CGO_LDFLAGS) cgo_ldflags := $(strip $(cgo_ldflags)) CGO_LDFLAGS := $(cgo_ldflags) @@ -206,17 +165,6 @@ endif .PHONY: install build build-linux run -############################## -# Build DB Migration Tools # -############################## - -install-dbmigrate: go.sum - CGO_LDFLAGS="$(CGO_LDFLAGS)" CGO_CFLAGS="$(CGO_CFLAGS)" $(GO) install $(BUILD_FLAGS) ./cmd/dbmigrate - -build-dbmigrate: validate-go-version go.sum - mkdir -p $(BUILDDIR) - CGO_LDFLAGS="$(CGO_LDFLAGS)" CGO_CFLAGS="$(CGO_CFLAGS)" $(GO) build -o $(BUILDDIR)/ $(BUILD_FLAGS) ./cmd/dbmigrate - ############################## # Release artifacts and plan # ############################## @@ -251,14 +199,10 @@ RELEASE_PIO=$(RELEASE_BIN)/provenanced RELEASE_ZIP_BASE=provenance-$(UNAME_S)-$(ARCH) RELEASE_ZIP_NAME=$(RELEASE_ZIP_BASE)-$(VERSION).zip RELEASE_ZIP=$(BUILDDIR)/$(RELEASE_ZIP_NAME) -DBMIGRATE=$(BUILDDIR)/dbmigrate -DBMIGRATE_ZIP_BASE=dbmigrate-$(UNAME_S)-$(ARCH) -DBMIGRATE_ZIP_NAME=$(DBMIGRATE_ZIP_BASE)-$(VERSION).zip -DBMIGRATE_ZIP=$(BUILDDIR)/$(DBMIGRATE_ZIP_NAME) .PHONY: build-release-clean build-release-clean: - rm -rf $(RELEASE_BIN) $(RELEASE_PLAN) $(RELEASE_CHECKSUM) $(RELEASE_ZIP) $(DBMIGRATE_ZIP) + rm -rf $(RELEASE_BIN) $(RELEASE_PLAN) $(RELEASE_CHECKSUM) $(RELEASE_ZIP) .PHONY: build-release-checksum build-release-checksum: $(RELEASE_CHECKSUM) @@ -299,17 +243,6 @@ $(RELEASE_ZIP): $(RELEASE_PIO) $(RELEASE_WASM) zip -u $(RELEASE_ZIP_NAME) bin/$(LIBWASMVM) bin/provenanced && \ cd .. -$(DBMIGRATE): - $(MAKE) build-dbmigrate - -.PHONY: build-dbmigrate-zip -build-dbmigrate-zip: $(DBMIGRATE_ZIP) - -$(DBMIGRATE_ZIP): $(DBMIGRATE) - cd $(BUILDDIR) && \ - zip -u $(DBMIGRATE_ZIP_NAME) dbmigrate && \ - cd .. - # gon packages the zip wrong. need bin/provenanced and bin/libwasmvm .PHONY: build-release-rezip build-release-rezip: ZIP_FROM = $(BUILDDIR)/$(RELEASE_ZIP_BASE).zip @@ -370,15 +303,7 @@ linkify: update-tocs: scripts/update-toc.sh x docs CONTRIBUTING.md -# Download, compile, and install rocksdb so that it can be used when doing a build. -rocksdb: - scripts/rocksdb_build_and_install.sh - -# Download, compile, and install cleveldb so that it can be used when doing a build. -cleveldb: - scripts/cleveldb_build_and_install.sh - -.PHONY: go-mod-cache go.sum lint clean format check-built linkify update-tocs rocksdb cleveldb +.PHONY: go-mod-cache go.sum lint clean format check-built linkify update-tocs validate-go-version: ## Validates the installed version of go against Provenance's minimum requirement. @@ -406,10 +331,6 @@ PACKAGES_SIMULATION := $(filter %/simulation%,$(PACKAGES)) TEST_PACKAGES=./... TEST_TARGETS := test-unit test-unit-amino test-unit-proto test-ledger-mock test-race test-ledger test-race -ifeq ($(WITH_CLEVELDB),true) - TAGS+= cleveldb -endif - # Test runs-specific rules. To add a new test target, just add # a new rule, customise TAGS, ARGS and/or TEST_PACKAGES ad libitum, and # append the new rule to the TEST_TARGETS list. diff --git a/cmd/dbmigrate/cmd/dbmigrate.go b/cmd/dbmigrate/cmd/dbmigrate.go deleted file mode 100644 index f41ecdedd4..0000000000 --- a/cmd/dbmigrate/cmd/dbmigrate.go +++ /dev/null @@ -1,214 +0,0 @@ -package cmd - -import ( - "context" - "fmt" - "os" - "strings" - - "github.com/spf13/cobra" - "github.com/spf13/viper" - - cmtcli "github.com/cometbft/cometbft/libs/cli" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/server" - - "github.com/provenance-io/provenance/app" - "github.com/provenance-io/provenance/cmd/dbmigrate/utils" - "github.com/provenance-io/provenance/cmd/provenanced/config" -) - -const ( - FlagBackupDir = "backup-dir" - FlagBatchSize = "batch-size" - FlagStagingDir = "staging-dir" - FlagStageOnly = "stage-only" - FlagSourceDbBackend = "source-db-backend" -) - -// NewDBMigrateCmd creates a command for migrating the provenanced database from one underlying type to another. -func NewDBMigrateCmd() *cobra.Command { - // Creating the client context early because the WithViper function - // creates a new Viper instance which wipes out the existing global one. - // Technically, it's not needed for the dbmigrate stuff, but having it - // makes loading all the rest of the config stuff easier. - clientCtx := client.Context{}. - WithInput(os.Stdin). - WithHomeDir(app.DefaultNodeHome). - WithViper("PIO") - - // Allow a user to define the log_level and log_format of this utility through the environment variables - // DBM_LOG_LEVEL and DBM_LOG_FORMAT. Otherwise, we want to default them to info and plain. - // Without this, the config's log_level and log_format are used. - // So, for example, if the config has log_level = error, this utility wouldn't output anything unless it hits an error. - // But that setting is desired mostly for the constant running of a node, as opposed to the single-time run of this utility. - logLevel := "info" - logFormat := "plain" - if v := os.Getenv("DBM_LOG_LEVEL"); v != "" { - logLevel = v - } - if v := os.Getenv("DBM_LOG_FORMAT"); v != "" { - logLevel = logFormat - } - // Ignoring any errors here. If we can't set an environment variable, oh well. - // Using the values from the config file isn't the end of the world, and is preferable to not allowing execution. - _ = os.Setenv("PIO_LOG_LEVEL", logLevel) - _ = os.Setenv("PIO_LOG_FORMAT", logFormat) - - rv := &cobra.Command{ - Use: "dbmigrate ", - Short: "Provenance Blockchain Database Migration Tool", - Long: fmt.Sprintf(`Provenance Blockchain Database Migration Tool -Converts an existing Provenance Blockchain Database to a new backend type. - -Valid values: %s - -Migration process: -1. Copy the current data directory into a staging data directory, migrating any databases appropriately. - The staging directory is named data-dbmigrate-tmp-{timestamp}-{target dbtype} - and by default will be in the {home} directory. -2. Move the current data directory to the backup location. - The backup directory is named data-dbmigrate-backup-{timestamp}-{dbtypes} - and by default will be in the {home} directoyr. -3. Move the staging data directory into place as the current data directory. -4. Update the config file to reflect the new database backend type. -`, strings.Join(utils.GetPossibleDBTypes(), ", ")), - Args: cobra.ExactArgs(1), - PersistentPreRunE: func(command *cobra.Command, args []string) error { - command.SetOut(command.OutOrStdout()) - command.SetErr(command.ErrOrStderr()) - - if command.Flags().Changed(flags.FlagHome) { - homeDir, _ := command.Flags().GetString(flags.FlagHome) - clientCtx = clientCtx.WithHomeDir(homeDir) - } - - if err := client.SetCmdClientContext(command, clientCtx); err != nil { - return err - } - - return config.InterceptConfigsPreRunHandler(command) - }, - RunE: func(command *cobra.Command, args []string) error { - batchSizeMB, err := command.Flags().GetUint(FlagBatchSize) - if err != nil { - return fmt.Errorf("could not parse --%s option: %w", FlagBatchSize, err) - } - - sourceDB, err := command.Flags().GetString(FlagSourceDbBackend) - if err != nil { - return fmt.Errorf("could not parse --%s option: %w", FlagSourceDbBackend, err) - } - - migrator := &utils.Migrator{ - TargetDBType: strings.ToLower(args[0]), - HomePath: client.GetClientContextFromCmd(command).HomeDir, - BatchSize: batchSizeMB * utils.BytesPerMB, - SourceDBType: sourceDB, - } - - migrator.StageOnly, err = command.Flags().GetBool(FlagStageOnly) - if err != nil { - return fmt.Errorf("could not parse --%s flag: %w", FlagStageOnly, err) - } - - migrator.BackupDir, err = command.Flags().GetString(FlagBackupDir) - if err != nil { - return fmt.Errorf("could not parse --%s option: %w", FlagBackupDir, err) - } - - migrator.StagingDir, err = command.Flags().GetString(FlagStagingDir) - if err != nil { - return fmt.Errorf("could not parse --%s option: %w", FlagStagingDir, err) - } - - err = DoMigrateCmd(command, migrator) - if err != nil { - server.GetServerContextFromCmd(command).Logger.Error(err.Error()) - // If this returns an error, the help is printed. But that isn't wanted here. - // But since we got an error, it shouldn't exit with code 0 either. - // So we exit 1 here instead of returning an error and letting the caller handle the exit. - os.Exit(1) - } - return nil - }, - } - rv.Flags().String(FlagBackupDir, "", "directory to hold the backup directory (default {home})") - rv.Flags().String(FlagStagingDir, "", "directory to hold the staging directory (default {home})") - rv.Flags().Uint(FlagBatchSize, 2_048, "(in megabytes) after a batch reaches this size it is written and a new one is started (0 = unlimited)") - rv.Flags().Bool(FlagStageOnly, false, "only migrate/copy the data (do not backup and replace the data directory and do not update the config)") - rv.Flags().String(FlagSourceDbBackend, "", "forces a source database type instead of trying to detect it.") - return rv -} - -// Execute sets up and executes the provided command. -func Execute(command *cobra.Command) error { - ctx := context.Background() - ctx = context.WithValue(ctx, client.ClientContextKey, &client.Context{}) - ctx = context.WithValue(ctx, server.ServerContextKey, server.NewDefaultContext()) - - command.PersistentFlags().String(cmtcli.HomeFlag, app.DefaultNodeHome, "directory for config and data") - - return command.ExecuteContext(ctx) -} - -// DoMigrateCmd does all the work associated with the dbmigrate command (assuming that inputs have been validated). -func DoMigrateCmd(command *cobra.Command, migrator *utils.Migrator) error { - logger := server.GetServerContextFromCmd(command).Logger - logger.Info("Setting up database migrations.") - - err := migrator.Initialize() - if err != nil { - return err - } - logger.Info("Starting migrations.") - err = migrator.Migrate(logger) - if err != nil { - return err - } - if !migrator.StageOnly { - logger.Info("Updating config.") - var oldValue string - oldValue, err = UpdateDBBackendConfigValue(command, migrator.TargetDBType) - if err != nil { - return err - } - logger.Info("Config Updated.", "key", "db_backend", "was", oldValue, "is now", migrator.TargetDBType) - } - logger.Info("Done migrating databases.") - return nil -} - -// UpdateDBBackendConfigValue updates the db backend value in the config file and returns the value it used to be. -func UpdateDBBackendConfigValue(command *cobra.Command, newValue string) (string, error) { - // Warning: This wipes out all the viper setup stuff up to this point. - // It needs to be done so that just the file values or defaults are loaded - // without considering environment variables. - // This is needed, at least, so that the log_level and log_format entries aren't changed. - // It can't be undone because viper.New() overwrites the global Viper instance, and there is no way to set it back to what it was. - // The contexts could get the original viper instance, but there's no guarantee that nothing uses the global functions. - // So I figure it's best to at least keep them all in sync. - // Ideally, it doesn't matter, though, since everything *should* be reloaded the same way (but who really knows). - clientCtx := client.GetClientContextFromCmd(command) - clientCtx.Viper = viper.New() - server.GetServerContextFromCmd(command).Viper = clientCtx.Viper - if err := client.SetCmdClientContext(command, clientCtx); err != nil { - return "", fmt.Errorf("could not set client context: %w", err) - } - - // Now that we have a clean viper, load the config from files again. - if err := config.LoadConfigFromFiles(command); err != nil { - return "", fmt.Errorf("could not load config from files: %w", err) - } - - tmConfig, err := config.ExtractTmConfig(command) - if err != nil { - return "", fmt.Errorf("could not extract Tendermint config: %w", err) - } - oldValue := tmConfig.DBBackend - tmConfig.DBBackend = newValue - config.SaveConfigs(command, nil, tmConfig, nil, false) - return oldValue, nil -} diff --git a/cmd/dbmigrate/main.go b/cmd/dbmigrate/main.go deleted file mode 100644 index 36508f41e9..0000000000 --- a/cmd/dbmigrate/main.go +++ /dev/null @@ -1,25 +0,0 @@ -package main - -import ( - "errors" - "os" - - "github.com/provenance-io/provenance/cmd/dbmigrate/cmd" - cmderrors "github.com/provenance-io/provenance/cmd/errors" -) - -func main() { - rootCmd := cmd.NewDBMigrateCmd() - if err := cmd.Execute(rootCmd); err != nil { - var srvErrP *cmderrors.ExitCodeError - var srvErr cmderrors.ExitCodeError - switch { - case errors.As(err, &srvErrP): - os.Exit(int(*srvErrP)) - case errors.As(err, &srvErr): - os.Exit(int(srvErr)) - default: - os.Exit(1) - } - } -} diff --git a/cmd/dbmigrate/utils/badgerdb.go b/cmd/dbmigrate/utils/badgerdb.go deleted file mode 100644 index 18f301f6d1..0000000000 --- a/cmd/dbmigrate/utils/badgerdb.go +++ /dev/null @@ -1,17 +0,0 @@ -//go:build badgerdb -// +build badgerdb - -package utils - -import ( - dbm "github.com/cometbft/cometbft-db" -) - -// This file is included when built with the badgerdb tag (which matches the tag Tendermint looks for). -// Tendermint does all the heavy lifting, but doesn't expose a way to identify which DB types are available. -// That list would also have MemDB, which we don't want in here anyway. -// That's all this is doing, just identifying that it was built with that tag and that this DB type is available. - -func init() { - AddPossibleDBType(dbm.BadgerDBBackend) -} diff --git a/cmd/dbmigrate/utils/boltdb.go b/cmd/dbmigrate/utils/boltdb.go deleted file mode 100644 index ff9379612a..0000000000 --- a/cmd/dbmigrate/utils/boltdb.go +++ /dev/null @@ -1,17 +0,0 @@ -//go:build boltdb -// +build boltdb - -package utils - -import ( - dbm "github.com/cometbft/cometbft-db" -) - -// This file is included when built with the boltdb tag (which matches the tag Tendermint looks for). -// Tendermint does all the heavy lifting, but doesn't expose a way to identify which DB types are available. -// That list would also have MemDB, which we don't want in here anyway. -// That's all this is doing, just identifying that it was built with that tag and that this DB type is available. - -func init() { - AddPossibleDBType(dbm.BoltDBBackend) -} diff --git a/cmd/dbmigrate/utils/cleveldb.go b/cmd/dbmigrate/utils/cleveldb.go deleted file mode 100644 index 576fe22339..0000000000 --- a/cmd/dbmigrate/utils/cleveldb.go +++ /dev/null @@ -1,17 +0,0 @@ -//go:build cleveldb -// +build cleveldb - -package utils - -import ( - dbm "github.com/cometbft/cometbft-db" -) - -// This file is included when built with the cleveldb tag (which matches the tag Tendermint looks for). -// Tendermint does all the heavy lifting, but doesn't expose a way to identify which DB types are available. -// That list would also have MemDB, which we don't want in here anyway. -// That's all this is doing, just identifying that it was built with that tag and that this DB type is available. - -func init() { - AddPossibleDBType(dbm.CLevelDBBackend) -} diff --git a/cmd/dbmigrate/utils/migrator.go b/cmd/dbmigrate/utils/migrator.go deleted file mode 100644 index 19ea3f806e..0000000000 --- a/cmd/dbmigrate/utils/migrator.go +++ /dev/null @@ -1,956 +0,0 @@ -package utils - -import ( - "errors" - "fmt" - "os" - "os/signal" - "path/filepath" - "sort" - "strings" - "syscall" - "time" - - copier "github.com/otiai10/copy" - - dbm "github.com/cometbft/cometbft-db" - - "cosmossdk.io/log" -) - -const ( - // BytesPerMB is the number of bytes in a megabyte. - BytesPerMB = 1_048_576 - // unknownDBBackend is mostly a dbm.BackendType used in output as a string. - // It indicates that the backend is unknown. - unknownDBBackend = dbm.BackendType("UNKNOWN") -) - -// Note: The PossibleDBTypes variable is a map instead of a slice because trying to append to it was causing one type to -// stomp out the append from another type (concurrency issue?). - -// PossibleDBTypes is a map of strings to BackendTypes representing the Backend types that can be used by this utility. -var PossibleDBTypes = map[string]dbm.BackendType{} - -func init() { - PossibleDBTypes["goleveldb"] = dbm.GoLevelDBBackend -} - -// AddPossibleDBType adds a possible db backend type. -func AddPossibleDBType(dbType dbm.BackendType) { - PossibleDBTypes[string(dbType)] = dbType -} - -// GetPossibleDBTypes gets a slice of strings listing all db types that this can use. -func GetPossibleDBTypes() []string { - rv := make([]string, len(PossibleDBTypes)) - i := 0 - for k := range PossibleDBTypes { - rv[i] = k - i++ - } - sort.Strings(rv) - return rv -} - -// IsPossibleDBType checks if the given dbType string is one that this migrator can handle. -func IsPossibleDBType(dbType string) bool { - _, ok := PossibleDBTypes[dbType] - return ok -} - -// Migrator is an object to help guide a migration. -// TargetDBType must be defined. All others can be left unset, or can use defaults from ApplyDefaults(). -// If using defaults for any directories, you probably need to set HomePath too though. -type Migrator struct { - // HomePath is the path to the home directory (should contain the config and data directories). - HomePath string - // StagingDir is the directory that will hold the staging data directory. - // Default is HomePath - StagingDir string - // BackupDir is the directory that will hold the backup data directory. - // Default is HomePath - BackupDir string - - // TargetDBType is the type of the target (new) DB. - TargetDBType string - - // SourceDBType is the type of the source (old) DB. - SourceDBType string - - // SourceDataDir is the path to the source (current) data directory. - // Default is { HomePath }/data - SourceDataDir string - // StagingDataDir is the path to the staging (new) data directory. - // Default is { StagingDir }/data-dbmigrate-tmp-{timestamp}-{ TargetDBType } - StagingDataDir string - // BackupDataDir is the path to where the current data directory will be moved when done. - // Default is { BackupDir }/data-dbmigrate-backup-{timestamp}-{dbtypes} - BackupDataDir string - - // BatchSize is the threshold (in bytes) after which a batch is written and a new batch is created. - // Batch sizes are measured using only key and value lengths (as opposed to disk space). - // Default is 0 (unlimited) - BatchSize uint - - // StageOnly indicates that only the data migration and data copying should happen. - // If true, the migrator should stop after finishing the staging data directory. - // That is, it won't move the data dir to the backup location, move the staging directory into place, or update the config. - StageOnly bool - - // ToConvert is all of the DB directories to migrate/convert. - // Each entry is relative to the data directory. - ToConvert []string - // ToCopy is all the non-DB files and directories that should be copied from the source to the new data directory. - // Each entry is relative to the data directory. - ToCopy []string - - // Permissions are the permissions to use on any directories created. - // Default is to match the source directory, or else 0700. - Permissions os.FileMode - - // StatusPeriod is the max time period between status messages. - // Must be at least 1 second. Default is 5 seconds. - StatusPeriod time.Duration - // DirDateFormat is the format string used in dated directory names. - // Default is "2006-01-02-15-04-05". - DirDateFormat string -} - -// migrationManager is a struct with information about the status of a migrator. -type migrationManager struct { - Migrator - - // Status is a short message about what's currently going on. - Status string - // TimeStarted is the time that the migration was started. - // This is set during the call to Migrate. - TimeStarted time.Time - // TimeFinished is the time that the migration was finished. - // This is set during the call to Migrate. - TimeFinished time.Time - // Summaries is a map of ToConvert entries, to a short summary string about the migration of that entry. - // Entries are set during the call to Migrate and are the return values of each MigrateDBDir call. - Summaries map[string]string - // SourceTypes is a map of ToConvert entries, to their backend type. - SourceTypes map[string]dbm.BackendType - - // Logger is the Logger to use for logging log messages. - Logger log.Logger - - // StatusTicker is the ticker used to issue regular status log messages. - StatusTicker *time.Ticker - // StopTickerChan is a channel used to stop the regular status log messages. - StopTickerChan chan bool - // StatusKeyvals is a function that returns keyvals used in status log messages. - StatusKeyvals func() []interface{} - - // LogStagingDirError indicates whether or not to log an error about the staging dir existing (for abnormal termination). - LogStagingDirError bool - // SigChan is a channel used to Notify certain os signals. - SigChan chan os.Signal - // StopSigChan is a channel used to stop the special signal handling. - StopSigChan chan bool -} - -// Initialize prepares this Migrator by doing the following: -// 1. Calls ApplyDefaults() -// 2. Checks ValidateBasic() -// 3. Calls ReadSourceDataDir() -func (m *Migrator) Initialize() error { - m.ApplyDefaults() - var err error - if err = m.ValidateBasic(); err != nil { - return err - } - return m.ReadSourceDataDir() -} - -// ApplyDefaults fills in the defaults that it can, for values that aren't set yet. -func (m *Migrator) ApplyDefaults() { - if len(m.StagingDir) == 0 && len(m.HomePath) > 0 { - m.StagingDir = m.HomePath - } - if len(m.BackupDir) == 0 && len(m.HomePath) > 0 { - m.BackupDir = m.HomePath - } - if len(m.SourceDataDir) == 0 && len(m.HomePath) > 0 { - m.SourceDataDir = filepath.Join(m.HomePath, "data") - } - if len(m.DirDateFormat) == 0 { - m.DirDateFormat = "2006-01-02-15-04" - } - if len(m.StagingDataDir) == 0 && len(m.StagingDir) > 0 { - m.StagingDataDir = filepath.Join(m.StagingDir, fmt.Sprintf("data-dbmigrate-tmp-%s-%s", time.Now().Format(m.DirDateFormat), m.TargetDBType)) - } - if len(m.BackupDataDir) == 0 && len(m.BackupDir) > 0 { - m.BackupDataDir = filepath.Join(m.BackupDir, "data-dbmigrate-backup-"+time.Now().Format(m.DirDateFormat)) - } - // If we can't source the data directory, we probably can't read it and an error will be returned from something else. - // For simplicity, we're not really going to care about that error right here, though. - if m.Permissions == 0 && len(m.SourceDataDir) > 0 { - sourceDirInfo, err := os.Stat(m.SourceDataDir) - if err == nil { - // Mask the Mode to get just the permission bits. - m.Permissions = sourceDirInfo.Mode() & 0777 - } - } - if m.Permissions == 0 { - m.Permissions = 0700 - } - if m.StatusPeriod == 0 { - m.StatusPeriod = 5 * time.Second - } -} - -// ValidateBasic makes sure that everything is set in this Migrator. -func (m Migrator) ValidateBasic() error { - if len(m.StagingDir) == 0 { - return errors.New("no StagingDir defined") - } - if len(m.BackupDir) == 0 { - return errors.New("no BackupDir defined") - } - if len(m.TargetDBType) == 0 { - return errors.New("no TargetDBType defined") - } - if !IsPossibleDBType(m.TargetDBType) { - return fmt.Errorf("invalid TargetDBType: %q - must be one of: %s", m.TargetDBType, strings.Join(GetPossibleDBTypes(), ", ")) - } - if len(m.SourceDataDir) == 0 { - return errors.New("no SourceDataDir defined") - } - if len(m.StagingDataDir) == 0 { - return errors.New("no StagingDataDir defined") - } - if len(m.BackupDataDir) == 0 { - return errors.New("no BackupDataDir defined") - } - if m.Permissions == 0 { - return errors.New("no Permissions defined") - } - if m.StatusPeriod < time.Second { - return fmt.Errorf("the StatusPeriod %s cannot be less than 1s", m.StatusPeriod) - } - if len(m.DirDateFormat) == 0 { - return errors.New("no DirDateFormat defined") - } - if len(m.SourceDBType) > 0 && !IsPossibleDBType(m.SourceDBType) { - return fmt.Errorf("invalid SourceDBType: %q - must be one of: %s", m.SourceDBType, strings.Join(GetPossibleDBTypes(), ", ")) - } - return nil -} - -// ReadSourceDataDir gets the contents of the SourceDataDir and populates ToConvert and ToCopy. -// Anything in those two fields prior to calling this, will be overwritten. -// -// Does nothing if SourceDataDir is not set. -func (m *Migrator) ReadSourceDataDir() error { - if len(m.SourceDataDir) > 0 { - var err error - m.ToConvert, m.ToCopy, err = GetDataDirContents(m.SourceDataDir) - if err != nil { - return fmt.Errorf("error reading %q: %w", m.SourceDataDir, err) - } - if len(m.ToConvert) == 0 { - return fmt.Errorf("could not identify any db directories in %s", m.SourceDataDir) - } - } - return nil -} - -// Migrate converts all database dirs in ToConvert from the source underlying type in the SourceDataDir -// to the target type in the StagingDataDir. -// It then copies everything in ToCopy from the SourceDataDir to the StagingDataDir. -// It then moves the SourceDataDir to BackupDataDir and moves StagingDataDir into place where SourceDataDir was. -func (m *Migrator) Migrate(logger log.Logger) (errRv error) { - defer func() { - if r := recover(); r != nil { - errRv = fmt.Errorf("recovered from panic: %v", r) - } - }() - - if err := m.ValidateBasic(); err != nil { - return err - } - - manager, err := m.startMigratorManager(logger) - if err != nil { - return err - } - defer func() { - manager.Logger = logger - manager.Close() - }() - - // Now we can get started. - logger.Info(manager.MakeSummaryString()) - manager.Status = "making staging dir" - err = os.MkdirAll(m.StagingDataDir, m.Permissions) - if err != nil { - return fmt.Errorf("could not create staging data directory: %w", err) - } - manager.LogStagingDirError = true - manager.LogWithRunTime(fmt.Sprintf("Converting %d Individual DBs.", len(m.ToConvert))) - for i, dbDir := range m.ToConvert { - manager.Logger = logger.With( - "db", strings.TrimSuffix(dbDir, ".db"), - "progress", fmt.Sprintf("%d/%d", i+1, len(m.ToConvert)), - ) - manager.Summaries[dbDir], err = manager.MigrateDBDir(dbDir) - if err != nil { - return err - } - } - manager.Logger = logger - - if len(manager.SourceTypes) != 0 { - m.BackupDataDir = m.BackupDataDir + "-" + strings.Join(manager.GetSourceDBTypes(), "-") - } - - manager.LogWithRunTime(fmt.Sprintf("Copying %d items.", len(m.ToCopy))) - for i, entry := range m.ToCopy { - manager.LogWithRunTime(fmt.Sprintf("%d/%d: Copying %s", i+1, len(m.ToCopy), entry)) - if err = copier.Copy(filepath.Join(m.SourceDataDir, entry), filepath.Join(m.StagingDataDir, entry)); err != nil { - return fmt.Errorf("could not copy %s: %w", entry, err) - } - } - - if m.StageOnly { - manager.LogWithRunTime("Stage Only flag provided.", "dir", m.StagingDir) - } else { - manager.Status = "moving old data dir" - manager.StatusKeyvals = func() []interface{} { - return []interface{}{ - "from", m.SourceDataDir, - "to", m.BackupDataDir, - } - } - manager.LogWithRunTime("Moving existing data directory to backup location.", manager.StatusKeyvals()...) - if err = os.Rename(m.SourceDataDir, m.BackupDataDir); err != nil { - return fmt.Errorf("could not back up existing data directory: %w", err) - } - - manager.Status = "moving new data dir" - manager.StatusKeyvals = func() []interface{} { - return []interface{}{ - "from", m.StagingDataDir, - "to", m.SourceDataDir, - } - } - manager.LogWithRunTime("Moving new data directory into place.", manager.StatusKeyvals()...) - if err = os.Rename(m.StagingDataDir, m.SourceDataDir); err != nil { - return fmt.Errorf("could not move new data directory into place: %w", err) - } - manager.StatusKeyvals = noKeyvals - } - manager.LogStagingDirError = false - manager.Finish() - - logger.Info(manager.MakeSummaryString()) - return nil -} - -// startMigratorManager creates a migrationManager and initializes it. -// It must later be closed. -func (m Migrator) startMigratorManager(logger log.Logger) (*migrationManager, error) { - rv := &migrationManager{ - Migrator: m, - Status: "starting", - TimeStarted: time.Now(), - Summaries: map[string]string{}, - SourceTypes: map[string]dbm.BackendType{}, - Logger: logger, - StatusTicker: time.NewTicker(m.StatusPeriod), - StatusKeyvals: noKeyvals, - StopTickerChan: make(chan bool, 1), - SigChan: make(chan os.Signal, 1), - StopSigChan: make(chan bool, 1), - } - // Monitor for the signals and handle them appropriately. - proc, err := os.FindProcess(os.Getpid()) - if err != nil { - return nil, fmt.Errorf("could not identify the running process: %w", err) - } - go func() { - defer func() { - if r := recover(); r != nil { - rv.LogErrorWithRunTime("The signal watcher subprocess encountered a panic.", "panic", fmt.Sprintf("%v", r)) - } - }() - select { - case s := <-rv.SigChan: - signal.Stop(rv.SigChan) - if rv.LogStagingDirError { - rv.LogErrorWithRunTime("The staging directory still exists due to early termination.", "dir", m.StagingDataDir) - } - err2 := proc.Signal(s) - if err2 != nil { - rv.LogErrorWithRunTime("Error propagating signal.", "error", err2) - } - return - case <-rv.StopSigChan: - return - } - }() - signal.Notify(rv.SigChan, os.Interrupt, syscall.SIGTERM, syscall.SIGSEGV, syscall.SIGQUIT) - // Fire up another sub-process for outputting a status message every now and then. - rv.StatusTicker = time.NewTicker(m.StatusPeriod) - go func() { - for { - select { - case <-rv.StatusTicker.C: - rv.LogWithRunTime(fmt.Sprintf("Status: %s", rv.Status), rv.StatusKeyvals()...) - case <-rv.StopTickerChan: - return - } - } - }() - return rv, nil -} - -// MigrateDBDir creates a copy of the given db directory, converting it from one underlying type to another. -func (m *migrationManager) MigrateDBDir(dbDir string) (summary string, err error) { - m.LogWithRunTime("Individual DB Migration: Setting up.") - m.Status = "setting up" - - summaryError := "error" - sourceDir, dbName := splitDBPath(m.SourceDataDir, dbDir) - targetDir, _ := splitDBPath(m.StagingDataDir, dbDir) - - // Define some counters used in log messages, and a function to make it easy to add them all to log messages. - writtenEntries := uint(0) - batchEntries := uint(0) - batchBytes := uint(0) - batchIndex := uint(1) - m.StatusKeyvals = func() []interface{} { - return []interface{}{ - "batch index", commaString(batchIndex), - "batch size (megabytes)", commaString(batchBytes / BytesPerMB), - "batch entries", commaString(batchEntries), - "db total entries", commaString(writtenEntries + batchEntries), - } - } - logWithStats := func(msg string, keyvals ...interface{}) { - m.LogWithRunTime(msg, append(m.StatusKeyvals(), keyvals...)...) - } - - // There's several things that need closing and sometimes calling close can cause a segmentation fault that, - // for some reason, doesn't reach the SigChan notification set up in the Migrate method. - // So just to have clearer control over closing order, they're all defined at once and closed in a single defer function. - var sourceDB, targetDB dbm.DB - var iter dbm.Iterator - var batch dbm.Batch - sourceDBType := unknownDBBackend - defer func() { - m.StatusKeyvals = noKeyvals - // iter before sourceDB because closing the sourceDB might remove things needed for the iterator to close. - if iter != nil { - iter.Close() - } - if sourceDB != nil { - sourceDB.Close() - } - // batch before targetDB because closing the targetDB might remove things needed for the batch to close. - if batch != nil { - batch.Close() - } - if targetDB != nil { - targetDB.Close() - } - // always wrap any error with some extra context. - if err != nil { - err = fmt.Errorf("could not convert %q from %q to %q: %w", dbDir, sourceDBType, m.TargetDBType, err) - } - }() - - m.Status = "detecting db type" - sourceDBType, ok := dbm.BackendType(m.Migrator.SourceDBType), true - if len(m.Migrator.SourceDBType) == 0 { - sourceDBType, ok = DetectDBType(dbName, sourceDir) - } - if !ok { - return summaryError, fmt.Errorf("could not determine db type: %s", filepath.Join(m.SourceDataDir, dbDir)) - } - - if !IsPossibleDBType(string(sourceDBType)) { - return summaryError, fmt.Errorf("cannot read source db of type %q", sourceDBType) - } - m.SourceTypes[dbDir] = sourceDBType - - // In at least one case (the snapshots/metadata db), there's a sub-directory that needs to be created in order to - // safely open a new database in it. - if targetDir != m.StagingDataDir { - m.Status = "making sub-dir" - err = os.MkdirAll(targetDir, m.Permissions) - if err != nil { - return summaryError, fmt.Errorf("could not create target sub-directory: %w", err) - } - } - - // If they're both the same type, just copy it and be done. - targetDBBackendType := dbm.BackendType(m.TargetDBType) - if sourceDBType == targetDBBackendType { - m.Status = "copying db" - from := filepath.Join(m.SourceDataDir, dbDir) - to := filepath.Join(m.StagingDataDir, dbDir) - m.StatusKeyvals = func() []interface{} { - return []interface{}{ - "from", from, - "to", to, - } - } - m.LogWithRunTime("Source and Target DB Types are the same. Copying instead of migrating.", "db type", m.TargetDBType) - if err = copier.Copy(from, to); err != nil { - return summaryError, fmt.Errorf("could not copy db: %w", err) - } - m.Status = "done" - m.LogWithRunTime("Individual DB Migration: Done.") - return "Copied", nil - } - - m.Status = "opening source db" - sourceDB, err = dbm.NewDB(dbName, sourceDBType, sourceDir) - if err != nil { - return summaryError, fmt.Errorf("could not open %q source db: %w", dbName, err) - } - - m.Status = "opening target db" - targetDB, err = dbm.NewDB(dbName, targetDBBackendType, targetDir) - if err != nil { - return summaryError, fmt.Errorf("could not open %q target db: %w", dbName, err) - } - - m.Status = "making iterator" - iter, err = sourceDB.Iterator(nil, nil) - if err != nil { - return summaryError, fmt.Errorf("could not create %q source iterator: %w", dbName, err) - } - - // There's a couple places in here where we need to write and close the batch. But the safety stuff (on errors) - // is needed in both places, so it's pulled out into this anonymous function. - writeAndCloseBatch := func() error { - m.Status = "writing batch" - // Using WriteSync here instead of Write because sometimes the Close was causing a segfault, and maybe this helps? - if err = batch.WriteSync(); err != nil { - // If the write fails, closing the db can sometimes cause a segmentation fault. - targetDB = nil - return fmt.Errorf("could not write %q batch: %w", dbName, err) - } - writtenEntries += batchEntries - m.Status = "closing batch" - err = batch.Close() - if err != nil { - // If closing the batch fails, closing the db can sometimes cause a segmentation fault. - targetDB = nil - // Similarly, calling close a second time can segfault. - batch = nil - return fmt.Errorf("could not close %q batch: %w", dbName, err) - } - return nil - } - summaryWrittenEntries := func() string { - // 13 characters accounts right-justifies the numbers as long as they're under 10 billion (9,999,999,999). - // Testnet's application db (as of writing this) has just over 1 billion entries. - return fmt.Sprintf("Migrated %13s entries from %s to %s.", commaString(writtenEntries), sourceDBType, m.TargetDBType) - } - - m.LogWithRunTime("Individual DB Migration: Starting.", "source db type", sourceDBType) - batch = targetDB.NewBatch() - m.Status = "starting iteration" - for ; iter.Valid(); iter.Next() { - m.Status = "getting entry key" - k := iter.Key() - m.Status = "getting entry value" - v := iter.Value() - if v == nil { - v = []byte{} - } - m.Status = "adding entry to batch" - if err = batch.Set(k, v); err != nil { - return summaryWrittenEntries(), fmt.Errorf("could not set %q key/value: %w", dbName, err) - } - m.Status = "counting" - batchEntries++ - batchBytes += uint(len(v) + len(k)) - if m.BatchSize > 0 && batchBytes >= m.BatchSize { - logWithStats("Writing intermediate batch.") - if err = writeAndCloseBatch(); err != nil { - return summaryWrittenEntries(), err - } - - m.Status = "batch reset" - batchIndex++ - batchBytes = 0 - batchEntries = 0 - logWithStats("Starting new batch.") - batch = targetDB.NewBatch() - } - m.Status = "getting next entry" - } - - m.Status = "done iterating" - if err = iter.Error(); err != nil { - return summaryWrittenEntries(), fmt.Errorf("iterator error: %w", err) - } - - logWithStats("Writing final batch.") - if err = writeAndCloseBatch(); err != nil { - return summaryWrittenEntries(), err - } - - m.Status = "done" - m.LogWithRunTime("Individual DB Migration: Done.", "total entries", commaString(writtenEntries)) - return summaryWrittenEntries(), nil -} - -func (m *migrationManager) Finish() { - m.StopSigChan <- true - m.StopTickerChan <- true - m.StatusTicker.Stop() - m.TimeFinished = time.Now() -} - -// Close closes up shop on a migrationManager. -func (m *migrationManager) Close() { - m.StatusKeyvals = noKeyvals - close(m.StopSigChan) - signal.Stop(m.SigChan) - close(m.SigChan) - if m.LogStagingDirError { - m.LogErrorWithRunTime("The staging directory still exists.", "dir", m.StagingDataDir) - } -} - -// MakeSummaryString creates a multi-line string with a summary of a migration. -func (m migrationManager) MakeSummaryString() string { - var sb strings.Builder - addLine := func(format string, a ...interface{}) { - sb.WriteString(fmt.Sprintf(format, a...) + "\n") - } - addLine("Summary:") - status := "Not Started" - copyHead := " To Copy" - migrateHead := " To Migrate" - switch { - case !m.TimeFinished.IsZero() && !m.TimeStarted.IsZero(): - status = "Finished" - copyHead = "Copied" - migrateHead = " Migrated" - case !m.TimeStarted.IsZero(): - status = "Running" - copyHead = "Copying" - migrateHead = " Migrating" - } - addLine("%16s: %s", "Status", status) - addLine("%16s: %s", "Run Time", m.GetRunTime()) - addLine("%16s: %s", "Data Dir", m.SourceDataDir) - addLine("%16s: %s", "Staging Dir", m.StagingDir) - if m.StageOnly { - addLine("%16s: %s", "Staging Only", "true") - } else { - addLine("%16s: %s", "Backup Dir", m.BackupDataDir) - } - addLine("%16s: %s megabytes", "Batch Size", commaString(m.BatchSize/BytesPerMB)) - addLine("%16s: %s", "Source DB Type", m.SourceDBType) - addLine("%16s: %s", "New DB Type", m.TargetDBType) - addLine("%16s: %s", fmt.Sprintf("%s (%d)", copyHead, len(m.ToCopy)), strings.Join(m.ToCopy, " ")) - if len(m.Summaries) == 0 { - addLine("%16s: %s", fmt.Sprintf("%s (%d)", migrateHead, len(m.ToConvert)), strings.Join(m.ToConvert, " ")) - } else { - addLine("%16s:", fmt.Sprintf("%s (%d)", migrateHead, len(m.ToConvert))) - for _, dbDir := range m.ToConvert { - s, k := m.Summaries[dbDir] - if !k { - s = "UNKNOWN" - } - addLine("%22s: %s", strings.TrimSuffix(dbDir, ".db"), s) - } - } - return sb.String() -} - -// GetRunTime gets a string of the run time of this manager. -// Output is a time.Duration string, e.g. "25m36.910647946s" -func (m migrationManager) GetRunTime() string { - if m.TimeStarted.IsZero() { - return "0.000000000s" - } - if m.TimeFinished.IsZero() { - return time.Since(m.TimeStarted).String() - } - return m.TimeFinished.Sub(m.TimeStarted).String() -} - -// LogWithRunTime is a wrapper on Logger.Info that always includes the run time. -func (m migrationManager) LogWithRunTime(msg string, keyvals ...interface{}) { - m.Logger.Info(msg, append(keyvals, "run time", m.GetRunTime())...) -} - -// LogErrorWithRunTime is a wrapper on Logger.Error that always includes the run time. -func (m migrationManager) LogErrorWithRunTime(msg string, keyvals ...interface{}) { - m.Logger.Error(msg, append(keyvals, "run time", m.GetRunTime())...) -} - -func (m migrationManager) GetSourceDBTypes() []string { - rv := []string{} - for _, dbType := range m.SourceTypes { - found := false - for _, v := range rv { - if v == string(dbType) { - found = true - break - } - } - if !found { - rv = append(rv, string(dbType)) - } - } - sort.Strings(rv) - return rv -} - -// noKeyvals returns an empty slice. It's handy for setting migrationManager.StatusKeyvals -func noKeyvals() []interface{} { - return []interface{}{} -} - -// splitDBPath combine the provided path elements into a full path to a db directory, then -// breaks it down two parts: -// 1) A path to the directory to hold the db directory, -// 2) The name of the db. -// For example: "/foo", "bar/baz.db" will return "/foo/bar" and "baz". -func splitDBPath(elem ...string) (string, string) { - base, name := filepath.Split(filepath.Join(elem...)) - return filepath.Clean(base), strings.TrimSuffix(name, ".db") -} - -// GetDataDirContents gets the contents of a directory separated into database directories and non-database entries. -// The first return value will contain an entry for each database directory (including if they are in sub-directories). -// The second return value will contain all entries (files or directories) under dataDirPath that are not part of a database directory. -// Returned strings are relative to dataDirPath. -// -// Example return values: -// -// return param 1: []string{"application.db", "blockstore.db", "evidence.db", "snapshots/metadata.db", "state.db", "tx_index.db"} -// return param 2: []string{"cs.wal", "priv_validator_state.json", "wasm"} -func GetDataDirContents(dataDirPath string) ([]string, []string, error) { - contents, err := os.ReadDir(dataDirPath) - if err != nil { - return nil, nil, err - } - dbs := make([]string, 0) - nonDBs := make([]string, 0) - // The db dirs can have a TON of files (10k+). Most of them are just numbers with an extension. - // This loop short-circuits when it finds a file that starts with "MANIFEST", which is significantly - // more likely to be closer to the back than the front. So to save lots of iterations, the contents is looped through backwards. - for i := len(contents) - 1; i >= 0; i-- { - entry := contents[i] - switch { - case entry.IsDir(): - // goleveldb, cleveldb, and rocksdb name their db directories with a .db suffix. - if filepath.Ext(entry.Name()) == ".db" { - dbs = append(dbs, entry.Name()) - } else { - subDBs, subNonDBs, err := GetDataDirContents(filepath.Join(dataDirPath, entry.Name())) - if err != nil { - return nil, nil, err - } - if len(subDBs) == 1 && subDBs[0] == "." { - dbs = append(dbs, entry.Name()) - } else { - for _, dbDir := range subDBs { - dbs = append(dbs, filepath.Join(entry.Name(), dbDir)) - } - } - if len(subDBs) > 0 { - for _, nonDBDir := range subNonDBs { - nonDBs = append(nonDBs, filepath.Join(entry.Name(), nonDBDir)) - } - } else { - nonDBs = append(nonDBs, entry.Name()) - } - } - case strings.HasPrefix(entry.Name(), "MANIFEST"): - // badger db does not use the .db suffix on their database directories. - // So to identify them, we have to look for the MANIFEST files. - // HasPrefix is used here instead of == because the other DB types have files that start with MANIFEST- - // and so hopefully this will catch other db types that dont use the .db suffix on their directories. - // The .db test is still also used to save some recursive calls and extra processing. - return []string{"."}, nil, nil - case filepath.Ext(entry.Name()) == ".db": - // boltdb has executable files with a .db extension. - info, err := entry.Info() - if err != nil { - return nil, nil, err - } - // Check if the file has at least one executable bit set. - if info.Mode()&0111 != 1 { - dbs = append(dbs, entry.Name()) - } else { - nonDBs = append(nonDBs, entry.Name()) - } - default: - nonDBs = append(nonDBs, entry.Name()) - } - } - sort.Strings(dbs) - sort.Strings(nonDBs) - return dbs, nonDBs, nil -} - -// DetectDBType attempts to identify the type database in the given dir with the given name. -// The name and dir would be the same things that would be provided to dbm.NewDB. -// -// The return bool indicates whether or not the DB type was identified. -// -// The only types this detects are LevelDB, RocksDB, and BadgerDB. -// If the DB is another type, the behavior of this is unknown. -// There's a chance this will return false, but there's also a chance it is falsely identified as something else. -func DetectDBType(name, dir string) (dbm.BackendType, bool) { - // Here are the key differences used to differentiate the DB types. - // badgerdb: - // * In a directory named "dir/name". - // * There are numbered files with the extension ".vlog". - // * There are numbered files with the extension ".sst" (might possibly be missing if the db is empty). - // * Has the following files: KEYREGISTRY, MANIFEST - // * Might also have files: LOCK - // rocksdb: - // * In a directory named "dir/name.db". - // * There are numbered files with the extension ".log". - // * There are numbered files with the extension ".sst" (might possibly be missing if the db is empty). - // * Has the following files: CURRENT, IDENTITY, LOG, MANIFEST-{6 digits} (multiple), OPTIONS-{6 digits} (multiple) - // * Might also have files: LOCK, LOG.old, LOG.old.{16 digits} (multiple) - // leveldb: - // * In a directory named "dir/name.db". - // * There are numbered files with the extension ".log". - // * There are numbered files with the extension ".ldb" (might possibly be missing if the db is empty). - // * Has the following files: CURRENT, LOG, MANIFEST-{6 digits} (multiple) - // * Might also have files: LOCK, LOG.old - // boltdb: - // * Is an executable file named "dir/name.db" - - // Note: I'm not sure of an easy way to look for files that start or end with certain strings (e.g files ending in ".sst"). - // The only way I know of is to get the entire dir contents and loop through the entries. - // However, specially for large DBs, that can be well over 10k files. - // If the list is sorted (e.g. from os.ReadDir), the ".sst" or ".ldb" files would be one of the first few. - // And stuff like MANIFEST-{numbers} and OPTIONS-{numbers} would be one of the last few. - // But just getting that list is a whole lot of work that should be avoided if possible. - // Additionally, this is only being written with badgerdb, rocksdb, and leveldb in mind. - // - // So in here, rather than being more certain and checking for those types of files, we'll skip those checks and - // put up with possible false positives. Hopefully a false positive would error out at some later point (open or reading). - - // Let's first check for badgerdb since it's the easiest. - dbDir := filepath.Join(dir, name) - if dirExists(dbDir) { - // Since that's a pretty standard dir name, do an easy check for a couple files that should be there. - if !fileExists(filepath.Join(dbDir, "KEYREGISTRY")) || !fileExists(filepath.Join(dbDir, "MANIFEST")) { - return unknownDBBackend, false - } - // Could also check for a numbered files with the extension ".vlog", but that's expensive. - // And for the types involved in here, what's been done should be enough to hopefully prevent false positives. - return dbm.BadgerDBBackend, true - } - - // Now lets check for boltdb. It's a file instead of directory with the same name used by rocksdb and leveldb. - dbDir = filepath.Join(dir, name+".db") - if fileExists(dbDir) { - return dbm.BoltDBBackend, true - } - - // The other two (rocksdb and leveldb) should be in directories named "dir/name.db". - // and should have files CURRENT and LOG - if !dirExists(dbDir) || !fileExists(filepath.Join(dbDir, "CURRENT")) || !fileExists(filepath.Join(dbDir, "LOG")) { - return unknownDBBackend, false - } - - // Okay, assuming it's either a rocksdb or leveldb directory now. - - // The only statically named file difference between rocksdb and leveldb is IDENTITY with rocksdb. - if fileExists(filepath.Join(dbDir, "IDENTITY")) { - return dbm.RocksDBBackend, true - } - - // At this point, we assume it's either cleveldb or goleveldb. - // Unfortunately, they both use the same files, but possibly with different formats. - // Sometimes you can treat a goleveldb as cleveldb and vice versa, but sometimes you can't. - // The only way I can think of to differentiate them here is to just try to open them. - // I didn't test like this with the other types because the dbm.NewDB function will create - // a db if it doesn't exist which can cause weird behavior if trying with the wrong db type. - // Goleveldb and cleveldb are close enough, though that it won't cause problems. - canOpenDB := func(backend dbm.BackendType) (rv bool) { - defer func() { - if r := recover(); r != nil { - rv = false - } - }() - db, err := dbm.NewDB(name, backend, dir) - if err != nil { - return false - } - iter, err := db.Iterator(nil, nil) - if err != nil { - return false - } - // Check up to the first 10 entries. 10 randomly picked to not be t0o big, but bigger than 0 or 1. - i := 0 - for ; iter.Valid(); iter.Next() { - _ = iter.Key() - _ = iter.Value() - i++ - if i >= 10 { - break - } - } - if iter.Error() != nil { - return false - } - if iter.Close() != nil { - return false - } - if db.Close() != nil { - return false - } - return true - } - - if canOpenDB(dbm.GoLevelDBBackend) { - return dbm.GoLevelDBBackend, true - } - if IsPossibleDBType(string(dbm.CLevelDBBackend)) && canOpenDB(dbm.CLevelDBBackend) { - return dbm.CLevelDBBackend, true - } - - return unknownDBBackend, false -} - -// dirExists returns true if the path exists and is a directory. -func dirExists(path string) bool { - info, err := os.Stat(path) - return err == nil && info.IsDir() -} - -// fileExists returns true if the path exists and is a file. -func fileExists(path string) bool { - info, err := os.Stat(path) - return err == nil && !info.IsDir() -} - -// commaString converts a positive integer to a string and adds commas. -func commaString(v uint) string { - str := fmt.Sprintf("%d", v) - if len(str) <= 3 { - return str - } - rv := make([]rune, len(str)+(len(str)-1)/3) - added := 0 - for i, c := range str { - if i != 0 && (len(str)-i)%3 == 0 { - rv[i+added] = ',' - added++ - } - rv[i+added] = c - } - return string(rv) -} diff --git a/cmd/dbmigrate/utils/migrator_test.go b/cmd/dbmigrate/utils/migrator_test.go deleted file mode 100644 index 00ad17b7c0..0000000000 --- a/cmd/dbmigrate/utils/migrator_test.go +++ /dev/null @@ -1,998 +0,0 @@ -package utils - -import ( - "fmt" - "os" - "path/filepath" - "testing" - "time" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "github.com/stretchr/testify/suite" - - dbm "github.com/cometbft/cometbft-db" -) - -type MigratorTestSuite struct { - suite.Suite -} - -func (s *MigratorTestSuite) SetupTest() { - -} - -func TestMigratorTestSuite(t *testing.T) { - suite.Run(t, new(MigratorTestSuite)) -} - -func (s *MigratorTestSuite) TestInitialize() { - tdir := s.T().TempDir() - dbdir := "some.db" - someFile := "somefile.txt" - s.Require().NoError(os.MkdirAll(filepath.Join(tdir, "data", dbdir), 0700), "making dbdir") - s.Require().NoError(os.WriteFile(filepath.Join(tdir, "data", someFile), []byte{}, 0600), "making somefile") - - s.T().Run("ApplyDefaults called before ValidateBasic", func(t *testing.T) { - m := &Migrator{ - TargetDBType: "", // Will cause error. - HomePath: tdir, - } - err := m.Initialize() - require.Error(t, err) - assert.Contains(t, err.Error(), "TargetDBType") - assert.Equal(t, m.SourceDataDir, filepath.Join(tdir, "data")) - }) - - s.T().Run("ReadSourceDataDir not called if ValidateBasic gives error", func(t *testing.T) { - m := &Migrator{ - TargetDBType: "", // Will cause error. - HomePath: tdir, - } - err := m.Initialize() - require.Error(t, err) - assert.Contains(t, err.Error(), "TargetDBType", "err") - assert.Len(t, m.ToConvert, 0, "ToConvert") - assert.Len(t, m.ToCopy, 0, "ToCopy") - }) - - s.T().Run("ReadSourceDataDir called if valid", func(t *testing.T) { - m := &Migrator{ - TargetDBType: "goleveldb", - HomePath: tdir, - SourceDBType: "goleveldb", - } - err := m.Initialize() - require.NoError(t, err) - assert.Len(t, m.ToConvert, 1, "ToConvert") - assert.Contains(t, m.ToConvert, dbdir, "ToConvert") - assert.Len(t, m.ToCopy, 1, "ToCopy") - assert.Contains(t, m.ToCopy, someFile, "ToCopy") - }) -} - -func (s *MigratorTestSuite) TestApplyDefaults() { - defaultDateFormat := "2006-01-02-15-04" - tdir := s.T().TempDir() - dirForPermTest := filepath.Join(tdir, "permissions-test") - permForPermTest := os.FileMode(0750) - s.Require().NoError(os.MkdirAll(dirForPermTest, permForPermTest), "making permissions test dir") - var tests = []struct { - name string - migrator *Migrator - getter func(m *Migrator) interface{} - expected interface{} - }{ - { - name: "staging dir empty home path empty", - migrator: &Migrator{ - HomePath: "", - StagingDir: "", - }, - getter: func(m *Migrator) interface{} { return m.StagingDir }, - expected: "", - }, - { - name: "staging dir empty home path not empty", - migrator: &Migrator{ - HomePath: "homepath", - StagingDir: "", - }, - getter: func(m *Migrator) interface{} { return m.StagingDir }, - expected: "homepath", - }, - { - name: "staging dir not empty home path not", - migrator: &Migrator{ - HomePath: "", - StagingDir: "stagingdir", - }, - getter: func(m *Migrator) interface{} { return m.StagingDir }, - expected: "stagingdir", - }, - { - name: "staging dir not empty home path not empty", - migrator: &Migrator{ - HomePath: "homepath", - StagingDir: "stagingdir", - }, - getter: func(m *Migrator) interface{} { return m.StagingDir }, - expected: "stagingdir", - }, - - { - name: "backup dir empty home path empty", - migrator: &Migrator{ - HomePath: "", - BackupDir: "", - }, - getter: func(m *Migrator) interface{} { return m.BackupDir }, - expected: "", - }, - { - name: "backup dir empty home path not empty", - migrator: &Migrator{ - HomePath: "homepath", - BackupDir: "", - }, - getter: func(m *Migrator) interface{} { return m.BackupDir }, - expected: "homepath", - }, - { - name: "backup dir not empty home path not", - migrator: &Migrator{ - HomePath: "", - BackupDir: "backupdir", - }, - getter: func(m *Migrator) interface{} { return m.BackupDir }, - expected: "backupdir", - }, - { - name: "backup dir not empty home path not empty", - migrator: &Migrator{ - HomePath: "homepath", - BackupDir: "backupdir", - }, - getter: func(m *Migrator) interface{} { return m.BackupDir }, - expected: "backupdir", - }, - - { - name: "source data dir empty home path empty", - migrator: &Migrator{ - HomePath: "", - SourceDataDir: "", - }, - getter: func(m *Migrator) interface{} { return m.SourceDataDir }, - expected: "", - }, - { - name: "source data dir empty home path not empty", - migrator: &Migrator{ - HomePath: "homepath", - SourceDataDir: "", - }, - getter: func(m *Migrator) interface{} { return m.SourceDataDir }, - expected: filepath.Join("homepath", "data"), - }, - { - name: "source data dir not empty home path not", - migrator: &Migrator{ - HomePath: "", - SourceDataDir: "sourcedatadir", - }, - getter: func(m *Migrator) interface{} { return m.SourceDataDir }, - expected: "sourcedatadir", - }, - { - name: "source data dir not empty home path not empty", - migrator: &Migrator{ - HomePath: "homepath", - SourceDataDir: "sourcedatadir", - }, - getter: func(m *Migrator) interface{} { return m.SourceDataDir }, - expected: "sourcedatadir", - }, - - { - name: "dir date format empty", - migrator: &Migrator{ - DirDateFormat: "", - }, - getter: func(m *Migrator) interface{} { return m.DirDateFormat }, - expected: defaultDateFormat, - }, - { - name: "dir date format not empty", - migrator: &Migrator{ - DirDateFormat: "04-15-02-01-2006", - }, - getter: func(m *Migrator) interface{} { return m.DirDateFormat }, - expected: "04-15-02-01-2006", - }, - - { - name: "staging data dir empty staging dir empty", - migrator: &Migrator{ - StagingDir: "", - StagingDataDir: "", - }, - getter: func(m *Migrator) interface{} { return m.StagingDataDir }, - expected: "", - }, - { - name: "staging data dir empty staging dir not empty", - migrator: &Migrator{ - TargetDBType: "targetdb", - StagingDir: "stagingdir", - StagingDataDir: "", - }, - getter: func(m *Migrator) interface{} { return m.StagingDataDir }, - expected: filepath.Join("stagingdir", fmt.Sprintf("data-dbmigrate-tmp-%s-%s", time.Now().Format(defaultDateFormat), "targetdb")), - }, - { - name: "staging data dir not empty staging dir empty", - migrator: &Migrator{ - StagingDir: "", - StagingDataDir: "stagingdatadir", - }, - getter: func(m *Migrator) interface{} { return m.StagingDataDir }, - expected: "stagingdatadir", - }, - { - name: "staging data dir not empty staging dir empty not", - migrator: &Migrator{ - StagingDir: "homepath", - StagingDataDir: "stagingdatadir", - }, - getter: func(m *Migrator) interface{} { return m.StagingDataDir }, - expected: "stagingdatadir", - }, - - { - name: "backup data dir empty staging dir empty", - migrator: &Migrator{ - BackupDir: "", - BackupDataDir: "", - }, - getter: func(m *Migrator) interface{} { return m.BackupDataDir }, - expected: "", - }, - { - name: "backup data dir empty staging dir not empty", - migrator: &Migrator{ - BackupDir: "backupdir", - BackupDataDir: "", - }, - getter: func(m *Migrator) interface{} { return m.BackupDataDir }, - expected: filepath.Join("backupdir", "data-dbmigrate-backup-"+time.Now().Format(defaultDateFormat)), - }, - { - name: "backup data dir not empty staging dir empty", - migrator: &Migrator{ - BackupDir: "", - BackupDataDir: "backupdatadir", - }, - getter: func(m *Migrator) interface{} { return m.BackupDataDir }, - expected: "backupdatadir", - }, - { - name: "backup data dir not empty staging dir empty not", - migrator: &Migrator{ - BackupDir: "homepath", - BackupDataDir: "backupdatadir", - }, - getter: func(m *Migrator) interface{} { return m.BackupDataDir }, - expected: "backupdatadir", - }, - - { - name: "permissions not set source data dir does not exist", - migrator: &Migrator{ - Permissions: 0, - SourceDataDir: "this-definitely-does-not-exist", - }, - getter: func(m *Migrator) interface{} { return m.Permissions }, - expected: os.FileMode(0700), - }, - { - name: "permissions not set source data dir exists", - migrator: &Migrator{ - Permissions: 0, - SourceDataDir: dirForPermTest, - }, - getter: func(m *Migrator) interface{} { return m.Permissions }, - expected: permForPermTest, - }, - { - name: "permissions set source data dir does not exist", - migrator: &Migrator{ - Permissions: 0777, - SourceDataDir: "this-definitely-does-not-exist", - }, - getter: func(m *Migrator) interface{} { return m.Permissions }, - expected: os.FileMode(0777), - }, - { - name: "permissions set source data dir exists", - migrator: &Migrator{ - Permissions: 0775, - SourceDataDir: dirForPermTest, - }, - getter: func(m *Migrator) interface{} { return m.Permissions }, - expected: os.FileMode(0775), - }, - - { - name: "status period not set", - migrator: &Migrator{ - StatusPeriod: 0, - }, - getter: func(m *Migrator) interface{} { return m.StatusPeriod }, - expected: 5 * time.Second, - }, - { - name: "status period set", - migrator: &Migrator{ - StatusPeriod: 10 * time.Second, - }, - getter: func(m *Migrator) interface{} { return m.StatusPeriod }, - expected: 10 * time.Second, - }, - - { - name: "target db type not set unchanged", - migrator: &Migrator{ - TargetDBType: "", - }, - getter: func(m *Migrator) interface{} { return m.TargetDBType }, - expected: "", - }, - { - name: "target db type set unchanged", - migrator: &Migrator{ - TargetDBType: "target type", - }, - getter: func(m *Migrator) interface{} { return m.TargetDBType }, - expected: "target type", - }, - - { - name: "source db type not set unchanged", - migrator: &Migrator{ - SourceDBType: "", - }, - getter: func(m *Migrator) interface{} { return m.SourceDBType }, - expected: "", - }, - { - name: "source db type set unchanged", - migrator: &Migrator{ - SourceDBType: "source type", - }, - getter: func(m *Migrator) interface{} { return m.SourceDBType }, - expected: "source type", - }, - - { - name: "batch size not set unchanged", - migrator: &Migrator{ - BatchSize: 0, - }, - getter: func(m *Migrator) interface{} { return m.BatchSize }, - expected: uint(0), - }, - { - name: "batch size set unchanged", - migrator: &Migrator{ - BatchSize: 1234, - }, - getter: func(m *Migrator) interface{} { return m.BatchSize }, - expected: uint(1234), - }, - - { - name: "to convert not set unchanged", - migrator: &Migrator{ - ToConvert: nil, - }, - getter: func(m *Migrator) interface{} { return m.ToConvert }, - expected: []string(nil), - }, - { - name: "to convert set unchanged", - migrator: &Migrator{ - ToConvert: []string{"foo"}, - }, - getter: func(m *Migrator) interface{} { return m.ToConvert }, - expected: []string{"foo"}, - }, - - { - name: "to copy not set unchanged", - migrator: &Migrator{ - ToCopy: nil, - }, - getter: func(m *Migrator) interface{} { return m.ToCopy }, - expected: []string(nil), - }, - { - name: "to copy set unchanged", - migrator: &Migrator{ - ToCopy: []string{"bar"}, - }, - getter: func(m *Migrator) interface{} { return m.ToCopy }, - expected: []string{"bar"}, - }, - } - - for _, tc := range tests { - s.T().Run(tc.name, func(t *testing.T) { - tc.migrator.ApplyDefaults() - actual := tc.getter(tc.migrator) - assert.Equal(t, tc.expected, actual) - }) - } -} - -func (s *MigratorTestSuite) TestValidateBasic() { - makeValidMigrator := func() *Migrator { - rv := &Migrator{ - HomePath: "testing", - TargetDBType: "goleveldb", - SourceDBType: "goleveldb", - } - rv.ApplyDefaults() - return rv - } - tests := []struct { - name string - modifier func(m *Migrator) - expInError []string - }{ - { - name: "all valid", - modifier: func(m *Migrator) {}, - expInError: nil, - }, - { - name: "StagingDir empty", - modifier: func(m *Migrator) { m.StagingDir = "" }, - expInError: []string{"StagingDir"}, - }, - { - name: "BackupDir empty", - modifier: func(m *Migrator) { m.BackupDir = "" }, - expInError: []string{"BackupDir"}, - }, - { - name: "TargetDBType empty", - modifier: func(m *Migrator) { m.TargetDBType = "" }, - expInError: []string{"TargetDBType"}, - }, - { - name: "TargetDBType not possible", - modifier: func(m *Migrator) { m.TargetDBType = "not-possible" }, - expInError: []string{"TargetDBType", "goleveldb", "\"not-possible\""}, - }, - { - name: "SourceDBType empty", - modifier: func(m *Migrator) { m.SourceDBType = "" }, - expInError: nil, - }, - { - name: "SourceDBType not possible", - modifier: func(m *Migrator) { m.SourceDBType = "not-possible" }, - expInError: []string{"SourceDBType", "goleveldb", "\"not-possible\""}, - }, - { - name: "SourceDataDir empty", - modifier: func(m *Migrator) { m.SourceDataDir = "" }, - expInError: []string{"SourceDataDir"}, - }, - { - name: "StagingDataDir empty", - modifier: func(m *Migrator) { m.StagingDataDir = "" }, - expInError: []string{"StagingDataDir"}, - }, - { - name: "BackupDataDir empty", - modifier: func(m *Migrator) { m.BackupDataDir = "" }, - expInError: []string{"BackupDataDir"}, - }, - { - name: "Permissions empty", - modifier: func(m *Migrator) { m.Permissions = 0 }, - expInError: []string{"Permissions"}, - }, - { - name: "StatusPeriod empty", - modifier: func(m *Migrator) { m.StatusPeriod = 0 }, - expInError: []string{"StatusPeriod"}, - }, - { - name: "StatusPeriod just under 1 second", - modifier: func(m *Migrator) { m.StatusPeriod = time.Second - time.Nanosecond }, - expInError: []string{"StatusPeriod", "999.999999ms", "1s"}, - }, - { - name: "DirDateFormat empty", - modifier: func(m *Migrator) { m.DirDateFormat = "" }, - expInError: []string{"DirDateFormat"}, - }, - } - - for _, tc := range tests { - s.T().Run(tc.name, func(t *testing.T) { - m := makeValidMigrator() - tc.modifier(m) - actual := m.ValidateBasic() - if len(tc.expInError) > 0 { - require.Error(t, actual) - for _, exp := range tc.expInError { - assert.Contains(t, actual.Error(), exp) - } - } else { - require.NoError(t, actual) - } - }) - } -} - -func (s *MigratorTestSuite) TestReadSourceDataDir() { - - s.T().Run("no source data dir", func(t *testing.T) { - m := &Migrator{ - SourceDataDir: "", - ToConvert: []string{"something"}, - ToCopy: []string{"anotherthing"}, - } - err := m.ReadSourceDataDir() - // It shouldn't give an error. - require.NoError(t, err) - // And the ToConvert and ToCopy slices shouldn't have changed. - assert.Len(t, m.ToConvert, 1, "ToConvert") - assert.Contains(t, m.ToConvert, "something", "ToConvert") - assert.Len(t, m.ToCopy, 1, "ToCopy") - assert.Contains(t, m.ToCopy, "anotherthing", "ToCopy") - }) - - s.T().Run("source data dir does not exist", func(t *testing.T) { - m := &Migrator{ - SourceDataDir: "not-gonna-find-me", - ToConvert: []string{"something"}, - ToCopy: []string{"anotherthing"}, - } - err := m.ReadSourceDataDir() - require.Error(t, err) - require.Contains(t, err.Error(), "error reading \"not-gonna-find-me\":", "err") - // And the ToConvert and ToCopy slices should be gone. - assert.Len(t, m.ToConvert, 0, "ToConvert") - assert.Len(t, m.ToCopy, 0, "ToCopy") - }) - - s.T().Run("source data dir has a file but no db", func(t *testing.T) { - tdir := t.TempDir() - someFile := "somefile.txt" - dataDir := filepath.Join(tdir, "data") - require.NoError(t, os.MkdirAll(dataDir, 0700), "making dbdir") - require.NoError(t, os.WriteFile(filepath.Join(dataDir, someFile), []byte{}, 0600), "making somefile") - m := &Migrator{ - SourceDataDir: dataDir, - ToConvert: []string{"something"}, - ToCopy: []string{"anotherthing"}, - } - err := m.ReadSourceDataDir() - require.Error(t, err) - assert.Contains(t, err.Error(), "could not identify any db directories in") - assert.Contains(t, err.Error(), dataDir) - // And the ToConvert and ToCopy slices should be changed. - assert.Len(t, m.ToConvert, 0, "ToConvert") - assert.Len(t, m.ToCopy, 1, "ToCopy") - assert.Contains(t, m.ToCopy, someFile, "ToCopy") - }) - - s.T().Run("source data dir has a db", func(t *testing.T) { - tdir := s.T().TempDir() - dbdir := "some.db" - someFile := "somefile.txt" - dataDir := filepath.Join(tdir, "data") - require.NoError(t, os.MkdirAll(filepath.Join(dataDir, dbdir), 0700), "making dbdir") - require.NoError(t, os.WriteFile(filepath.Join(dataDir, someFile), []byte{}, 0600), "making somefile") - m := &Migrator{ - SourceDataDir: dataDir, - ToConvert: []string{"something"}, - ToCopy: []string{"anotherthing"}, - } - err := m.ReadSourceDataDir() - require.NoError(t, err) - // And the ToConvert and ToCopy slices should be changed. - assert.Len(t, m.ToConvert, 1, "ToConvert") - assert.Contains(t, m.ToConvert, dbdir, "ToConvert") - assert.Len(t, m.ToCopy, 1, "ToCopy") - assert.Contains(t, m.ToCopy, someFile, "ToCopy") - }) -} - -// TODO: Migrate tests -// TODO: migrationManager tests - -func (s *MigratorTestSuite) TestNoKeyvals() { - f := noKeyvals() - s.Require().NotNil(f) - s.Assert().Len(f, 0) -} - -func (s *MigratorTestSuite) TestSplitDBPath() { - tests := []struct { - name string - elem []string - dbPath string - dbName string - }{ - { - name: "absolute path and simple db name", - elem: []string{"/foo/bar", "baz.db"}, - dbPath: "/foo/bar", - dbName: "baz", - }, - { - name: "absolute path and simple db name no suffix", - elem: []string{"/foo/bar", "baz"}, - dbPath: "/foo/bar", - dbName: "baz", - }, - { - name: "absolute path and simple db name weird suffix", - elem: []string{"/foo/bar", "baz.db2"}, - dbPath: "/foo/bar", - dbName: "baz.db2", - }, - { - name: "absolute path and db in sub dir", - elem: []string{"/foo", "bar/baz.db"}, - dbPath: "/foo/bar", - dbName: "baz", - }, - { - name: "absolute path and db in sub dir no suffix", - elem: []string{"/foo", "bar/baz"}, - dbPath: "/foo/bar", - dbName: "baz", - }, - { - name: "absolute path and db in sub dir weird suffix", - elem: []string{"/foo", "bar/baz.db2"}, - dbPath: "/foo/bar", - dbName: "baz.db2", - }, - { - name: "relative path and simple db name", - elem: []string{"foo/bar", "baz.db"}, - dbPath: "foo/bar", - dbName: "baz", - }, - { - name: "relative path and simple db name no suffix", - elem: []string{"foo/bar", "baz"}, - dbPath: "foo/bar", - dbName: "baz", - }, - { - name: "relative path and simple db name weird suffix", - elem: []string{"foo/bar", "baz.db2"}, - dbPath: "foo/bar", - dbName: "baz.db2", - }, - { - name: "relative path and db in sub dir", - elem: []string{"foo", "bar/baz.db"}, - dbPath: "foo/bar", - dbName: "baz", - }, - { - name: "relative path and db in sub dir no suffix", - elem: []string{"foo", "bar/baz"}, - dbPath: "foo/bar", - dbName: "baz", - }, - { - name: "relative path and db in sub dir weird suffix", - elem: []string{"foo", "bar/baz.db2"}, - dbPath: "foo/bar", - dbName: "baz.db2", - }, - } - - for _, tc := range tests { - s.T().Run(tc.name, func(t *testing.T) { - dbPath, dbName := splitDBPath(tc.elem...) - assert.Equal(t, tc.dbPath, dbPath, "dbPath") - assert.Equal(t, tc.dbName, dbName, "dbName") - }) - } -} - -func (s *MigratorTestSuite) TestGetDataDirContents() { - // Setup a temp directory with the following: - // 1) A directory named dbdir1.db with nothing in it - // 2) A directory named dbdir2 with files named MANIFEST, other1.txt, other2.log - // 3) A directory named subdir1 with: - // a) a directory named dbdir3.db with nothing in it - // b) a directory named dbdir4 with files named MANIFEST, other3.txt, other4.log - // c) A file named not-a-db-1.txt - // 4) A directory named subdir2 with files: other5.txt, other6.log - // 5) a file named not-a-db-2.txt - // 6) A directory named subdir3 with: - // a) a directory named subsubdir1 with a file named other7.txt - // b) a directory named subsubdir2 with a file named other8.txt - - tDir := s.T().TempDir() - - s.Require().NoError(os.MkdirAll(filepath.Join(tDir, "dbdir1.db"), 0700), "making dbdir1.db") - - s.Require().NoError(os.MkdirAll(filepath.Join(tDir, "dbdir2"), 0700), "making dbdir2") - s.Require().NoError(os.WriteFile(filepath.Join(tDir, "dbdir2", "MANIFEST"), []byte{}, 0700), "making dbdir2/MANIFEST") - s.Require().NoError(os.WriteFile(filepath.Join(tDir, "dbdir2", "other1.txt"), []byte{}, 0700), "making dbdir2/other1.txt") - s.Require().NoError(os.WriteFile(filepath.Join(tDir, "dbdir2", "other2.log"), []byte{}, 0700), "making dbdir2/other2.log") - - s.Require().NoError(os.MkdirAll(filepath.Join(tDir, "subdir1", "dbdir3.db"), 0700), "making subdir1/dbdir3.db") - s.Require().NoError(os.MkdirAll(filepath.Join(tDir, "subdir1", "dbdir4"), 0700), "making subdir1/dbdir4") - s.Require().NoError(os.WriteFile(filepath.Join(tDir, "subdir1", "dbdir4", "MANIFEST"), []byte{}, 0700), "making subdir1/dbdir4/MANIFEST") - s.Require().NoError(os.WriteFile(filepath.Join(tDir, "subdir1", "dbdir4", "other3.txt"), []byte{}, 0700), "making subdir1/dbdir4/other3.txt") - s.Require().NoError(os.WriteFile(filepath.Join(tDir, "subdir1", "dbdir4", "other4.log"), []byte{}, 0700), "making subdir1/dbdir4/other4.log") - s.Require().NoError(os.WriteFile(filepath.Join(tDir, "subdir1", "not-a-db-1.txt"), []byte{}, 0700), "making subdir1/not-a-db-1.txt") - - s.Require().NoError(os.MkdirAll(filepath.Join(tDir, "subdir2"), 0700), "making subdir2") - s.Require().NoError(os.WriteFile(filepath.Join(tDir, "subdir2", "other5.txt"), []byte{}, 0700), "making subdir2/other5.txt") - s.Require().NoError(os.WriteFile(filepath.Join(tDir, "subdir2", "other6.log"), []byte{}, 0700), "making subdir2/other6.log") - - s.Require().NoError(os.WriteFile(filepath.Join(tDir, "not-a-db-2.txt"), []byte{}, 0700), "making not-a-db-2.txt") - - s.Require().NoError(os.MkdirAll(filepath.Join(tDir, "subdir3", "subsubdir1"), 0700), "making subsubdir1") - s.Require().NoError(os.WriteFile(filepath.Join(tDir, "subdir3", "subsubdir1", "other7.txt"), []byte{}, 0700), "making subdir2/other5.txt") - s.Require().NoError(os.MkdirAll(filepath.Join(tDir, "subdir3", "subsubdir2"), 0700), "making subsubdir2") - s.Require().NoError(os.WriteFile(filepath.Join(tDir, "subdir3", "subsubdir2", "other8.txt"), []byte{}, 0700), "making subdir2/other5.txt") - - s.T().Run("standard use case", func(t *testing.T) { - expectedDbs := []string{"dbdir1.db", "dbdir2", "subdir1/dbdir3.db", "subdir1/dbdir4"} - expectedNonDBs := []string{"subdir1/not-a-db-1.txt", "subdir2", "not-a-db-2.txt", "subdir3"} - - dbs, nonDBs, err := GetDataDirContents(tDir) - - require.NoError(t, err, "calling GetDataDirContents") - - assert.Len(t, dbs, len(expectedDbs), "dbs") - for _, eDB := range expectedDbs { - assert.Contains(t, dbs, eDB, "dbs") - } - - assert.Len(t, nonDBs, len(expectedNonDBs), "nonDBs") - for _, eNonDB := range expectedNonDBs { - assert.Contains(t, nonDBs, eNonDB, "nonDBs") - } - }) - - s.T().Run("directory does not exist", func(t *testing.T) { - _, _, err := GetDataDirContents(tDir + "-nope-not-gonna-exist") - require.Error(t, err, "GetDataDirContents on directory that doesn't exist.") - assert.Contains(t, err.Error(), "no such file or directory", "err") - }) -} - -func (s *MigratorTestSuite) TestDetectDBType() { - tDir := s.T().TempDir() - - s.T().Run("badger", func(t *testing.T) { - expected := dbm.BadgerDBBackend - name := "badger1" - dataDir := filepath.Join(tDir, "badger") - dbDir := filepath.Join(dataDir, name) - require.NoError(t, os.MkdirAll(dbDir, 0700), "making dbDir") - require.NoError(t, os.WriteFile(filepath.Join(dbDir, "KEYREGISTRY"), []byte{}, 0600), "making KEYREGISTRY") - require.NoError(t, os.WriteFile(filepath.Join(dbDir, "MANIFEST"), []byte{}, 0600), "making KEYREGISTRY") - actual, ok := DetectDBType(name, dataDir) - assert.True(t, ok, "DetectDBType bool") - assert.Equal(t, expected, actual, "DetectDBType BackendType") - }) - - s.T().Run("rocks", func(t *testing.T) { - expected := dbm.RocksDBBackend - name := "rocks2" - dataDir := filepath.Join(tDir, "rocks") - dbDir := filepath.Join(dataDir, name+".db") - require.NoError(t, os.MkdirAll(dbDir, 0700), "making dbDir") - require.NoError(t, os.WriteFile(filepath.Join(dbDir, "CURRENT"), []byte{}, 0600), "making CURRENT") - require.NoError(t, os.WriteFile(filepath.Join(dbDir, "LOG"), []byte{}, 0600), "making LOG") - require.NoError(t, os.WriteFile(filepath.Join(dbDir, "IDENTITY"), []byte{}, 0600), "making IDENTITY") - actual, ok := DetectDBType(name, dataDir) - assert.True(t, ok, "DetectDBType bool") - assert.Equal(t, expected, actual, "DetectDBType BackendType") - }) - - // To run this test, you'll need to provide the tag 'cleveldb' to the test command. - // Both make test and the github action should have that tag, but you might need - // to tell your IDE about it in order to use it to run this test. - if IsPossibleDBType("cleveldb") { - s.T().Run("clevel", func(t *testing.T) { - // As far as I can tell, you can always open a cleveldb using goleveldb, but not vice versa. - // Since DetectDBType checks for goleveldb first, it should return as goleveldb in this test. - expected := dbm.GoLevelDBBackend - name := "clevel3" - dataDir := filepath.Join(tDir, "clevel") - require.NoError(t, os.MkdirAll(dataDir, 0700), "making data dir") - // The reason the other db types aren't done this way (creating the db with NewDB) is that - // I didn't want to cause confusion with regard to build tags and external library dependencies. - db, err := dbm.NewDB(name, dbm.CLevelDBBackend, dataDir) - require.NoError(t, err, "NewDB") - for i := 0; i < 15; i++ { - assert.NoError(t, db.Set([]byte(fmt.Sprintf("%s-key-%d", name, i)), []byte(fmt.Sprintf("%s-value-%d", name, i))), "setting key/value %d", i) - } - require.NoError(t, db.Close(), "closing db") - actual, ok := DetectDBType(name, dataDir) - assert.True(t, ok, "DetectDBType bool") - assert.Equal(t, expected, actual, "DetectDBType BackendType") - }) - } - - s.T().Run("golevel", func(t *testing.T) { - expected := dbm.GoLevelDBBackend - name := "golevel8" - dataDir := filepath.Join(tDir, "golevel") - require.NoError(t, os.MkdirAll(dataDir, 0700), "making data dir") - // The reason the other db types aren't done this way (creating the db with NewDB) is that - // I didn't want to cause confusion with regard to build tags and external library dependencies. - db, err := dbm.NewDB(name, expected, dataDir) - require.NoError(t, err, "NewDB") - for i := 0; i < 15; i++ { - assert.NoError(t, db.Set([]byte(fmt.Sprintf("%s-key-%d", name, i)), []byte(fmt.Sprintf("%s-value-%d", name, i))), "setting key/value %d", i) - } - require.NoError(t, db.Close(), "closing db") - actual, ok := DetectDBType(name, dataDir) - assert.True(t, ok, "DetectDBType bool") - assert.Equal(t, expected, actual, "DetectDBType BackendType") - }) - - s.T().Run("boltdb", func(t *testing.T) { - expected := dbm.BoltDBBackend - name := "bolt7" - dataDir := filepath.Join(tDir, "bolt") - dbFile := filepath.Join(dataDir, name+".db") - require.NoError(t, os.MkdirAll(dataDir, 0700), "making dataDir") - require.NoError(t, os.WriteFile(dbFile, []byte{}, 0700), "making dbFile") - actual, ok := DetectDBType(name, dataDir) - assert.True(t, ok, "DetectDBType bool") - assert.Equal(t, expected, actual, "DetectDBType BackendType") - }) - - s.T().Run("empty", func(t *testing.T) { - expected := unknownDBBackend - name := "empty4" - dataDir := filepath.Join(tDir, "empty") - dbDir := filepath.Join(dataDir, name) - require.NoError(t, os.MkdirAll(dbDir, 0700), "making dbDir") - actual, ok := DetectDBType(name, dataDir) - assert.False(t, ok, "DetectDBType bool") - assert.Equal(t, expected, actual, "DetectDBType BackendType") - }) - - s.T().Run("only current", func(t *testing.T) { - expected := unknownDBBackend - name := "only-current5" - dataDir := filepath.Join(tDir, "only-current") - dbDir := filepath.Join(dataDir, name+".db") - require.NoError(t, os.MkdirAll(dbDir, 0700), "making dbDir") - require.NoError(t, os.WriteFile(filepath.Join(dbDir, "CURRENT"), []byte{}, 0600), "making CURRENT") - actual, ok := DetectDBType(name, dataDir) - assert.False(t, ok, "DetectDBType bool") - assert.Equal(t, expected, actual, "DetectDBType BackendType") - }) - - s.T().Run("does not exist", func(t *testing.T) { - expected := unknownDBBackend - name := "does-not-exist6" - dataDir := filepath.Join(tDir, "only-current") - actual, ok := DetectDBType(name, dataDir) - assert.False(t, ok, "DetectDBType bool") - assert.Equal(t, expected, actual, "DetectDBType BackendType") - }) -} - -func (s *MigratorTestSuite) TestDirExists() { - s.T().Run("does not exist", func(t *testing.T) { - assert.False(t, dirExists("does not exist")) - }) - - s.T().Run("containing dir exists", func(t *testing.T) { - tdir := t.TempDir() - dir := filepath.Join(tdir, "nope") - assert.False(t, dirExists(dir)) - }) - - s.T().Run("is file", func(t *testing.T) { - tdir := t.TempDir() - file := filepath.Join(tdir, "filiename.txt") - require.NoError(t, os.WriteFile(file, []byte{}, 0600), "making file") - assert.False(t, dirExists(file)) - }) - - s.T().Run("is dir", func(t *testing.T) { - tdir := t.TempDir() - dir := filepath.Join(tdir, "immadir") - require.NoError(t, os.MkdirAll(dir, 0700), "making dir") - assert.True(t, dirExists(dir)) - }) -} - -func (s *MigratorTestSuite) TestFileExists() { - s.T().Run("does not exist", func(t *testing.T) { - assert.False(t, fileExists("does not exist")) - }) - - s.T().Run("containing dir exists", func(t *testing.T) { - tdir := t.TempDir() - file := filepath.Join(tdir, "nope.tar") - assert.False(t, fileExists(file)) - }) - - s.T().Run("is file", func(t *testing.T) { - tdir := t.TempDir() - file := filepath.Join(tdir, "filiename.txt") - require.NoError(t, os.WriteFile(file, []byte{}, 0600), "making file") - assert.True(t, fileExists(file)) - }) - - s.T().Run("is dir", func(t *testing.T) { - tdir := t.TempDir() - dir := filepath.Join(tdir, "immadir") - require.NoError(t, os.MkdirAll(dir, 0700), "making dir") - assert.False(t, fileExists(dir)) - }) -} - -func (s *MigratorTestSuite) TestCommaString() { - tests := []struct { - v uint - exp string - }{ - {v: 0, exp: "0"}, - {v: 1, exp: "1"}, - {v: 22, exp: "22"}, - {v: 333, exp: "333"}, - {v: 999, exp: "999"}, - {v: 1_000, exp: "1,000"}, - {v: 4_444, exp: "4,444"}, - {v: 55_555, exp: "55,555"}, - {v: 666_666, exp: "666,666"}, - {v: 999_999, exp: "999,999"}, - {v: 1_000_000, exp: "1,000,000"}, - {v: 7_777_777, exp: "7,777,777"}, - {v: 88_888_888, exp: "88,888,888"}, - {v: 999_999_999, exp: "999,999,999"}, - {v: 1_000_000_000, exp: "1,000,000,000"}, - {v: 1_010_101_010, exp: "1,010,101,010"}, - {v: 11_011_011_011, exp: "11,011,011,011"}, - {v: 120_120_120_120, exp: "120,120,120,120"}, - {v: 999_999_999_999, exp: "999,999,999,999"}, - {v: 1_000_000_000_000, exp: "1,000,000,000,000"}, - {v: 1_301_301_301_301, exp: "1,301,301,301,301"}, - {v: 14_814_714_614_514, exp: "14,814,714,614,514"}, - {v: 150_151_152_153_154, exp: "150,151,152,153,154"}, - {v: 999_999_999_999_999, exp: "999,999,999,999,999"}, - {v: 1_000_000_000_000_000, exp: "1,000,000,000,000,000"}, - {v: 1_651_651_651_651_651, exp: "1,651,651,651,651,651"}, - {v: 17_017_017_017_017_017, exp: "17,017,017,017,017,017"}, - {v: 189_189_189_189_189_189, exp: "189,189,189,189,189,189"}, - {v: 999_999_999_999_999_999, exp: "999,999,999,999,999,999"}, - {v: 1_000_000_000_000_000_000, exp: "1,000,000,000,000,000,000"}, - {v: 1_981_981_981_981_981_981, exp: "1,981,981,981,981,981,981"}, - {v: 18_446_744_073_709_551_615, exp: "18,446,744,073,709,551,615"}, - } - - for _, tc := range tests { - s.T().Run(tc.exp, func(t *testing.T) { - act := commaString(tc.v) - assert.Equal(t, tc.exp, act) - }) - } -} diff --git a/cmd/dbmigrate/utils/rocksdb.go b/cmd/dbmigrate/utils/rocksdb.go deleted file mode 100644 index 83c113c273..0000000000 --- a/cmd/dbmigrate/utils/rocksdb.go +++ /dev/null @@ -1,17 +0,0 @@ -//go:build rocksdb -// +build rocksdb - -package utils - -import ( - dbm "github.com/cometbft/cometbft-db" -) - -// This file is included when built with the rocksdb tag (which matches the tag Tendermint looks for). -// Tendermint does all the heavy lifting, but doesn't expose a way to identify which DB types are available. -// That list would also have MemDB, which we don't want in here anyway. -// That's all this is doing, just identifying that it was built with that tag and that this DB type is available. - -func init() { - AddPossibleDBType(dbm.RocksDBBackend) -} diff --git a/docs/Building.md b/docs/Building.md index 267576918b..2d896e4ef2 100644 --- a/docs/Building.md +++ b/docs/Building.md @@ -4,11 +4,8 @@ - [Overview](#overview) - [Prerequisites](#prerequisites) - [Go](#go) - - [CLevelDB](#cleveldb) - - [RocksDB](#rocksdb) - [Building or Installing `provenanced`](#building-or-installing-provenanced) - [Build Options](#build-options) - - [Building `dbmigrate`](#building-dbmigrate) @@ -23,78 +20,6 @@ Built executables are placed in the `build/` directory. Building `provenanced` requires [Go 1.21+](https://golang.org/dl/) (or higher). -### CLevelDB - -By default, `provenanced` is built without CLevelDB support. -Building with CLevelDB support is also possible. See `WITH_CLEVELDB` in [Build Options](#build-options) below. - -To download, build, and install the C LevelDB library on your system: -```console -$ make cleveldb -``` - -
-Environment variables that can control the behavior of this command: - -* `CLEVELDBDB_VERSION` will install a version other than the one defined in the `Makefile`. - Do not include the `v` at the beginning of the version number. - Example: `CLEVELDBDB_VERSION=1.22 make cleveldb`. - The default is `1.23` -* `CLEVELDB_JOBS` will control the number of parallel jobs used to build the library. - The default is the result of the `nproc` command. - More parallel jobs can speed up the build. - Fewer parallel jobs can alleviate memory problems/crashes that can be encountered during a build. -* `CLEVELDB_DO_BUILD` defines whether to build cleveldb. - The default is `true`. -* `CLEVELDB_DO_INSTALL` defines whether to install cleveldb. - The default is `true`. -* `CLEVELDB_SUDO` defines whether to use `sudo` for the installation of the built library. - The difference between `sudo make cleveldb` and `CLEVELDB_SUDO=true make cleveldb` - is that the latter will use `sudo` only for the installation (the download and build still use your current user). - Some systems (e.g. Ubuntu) might require this. - The default is `true` if the `sudo` command is found, or `false` otherwise. -* `CLEVELDB_DO_CLEANUP` defines whether to delete the downloaded and unpacked repo when done. - The default is `true`. -
- -### RocksDB - -By default, `provenanced` is built without RocksDB support. -Building with RocksDB support is also possible. See `WITH_ROCKSDB` in [Build Options](#build-options) below. - -To download, build, and install the RocksDB library on your system: -```console -$ make rocksdb -``` - -
-Environment variables that can control the behavior of this command: - -* `ROCKSDB_VERSION` will install a version other than the one defined in the `Makefile`. - Do not include the `v` at the beginning of the version number. - Example: `ROCKSDB_VERSION=6.17.3 make rocksdb`. - The default is `6.29.4` -* `ROCKSDB_JOBS` will control the number of parallel jobs used to build the library. - The default is the result of the `nproc` command. - More parallel jobs can speed up the build. - Fewer parallel jobs can alleviate memory problems/crashes that can be encountered during a build. -* `ROCKSDB_WITH_SHARED` defines whether to build and install the shared (dynamic) library. - The default is `true`. -* `ROCKSDB_WITH_STATIC` defines whether to build and install the static library. - The default is `false`. -* `ROCKSDB_DO_BUILD` defines whether to build rocksdb. - The default is `true`. -* `ROCKSDB_DO_INSTALL` defines whether to install rocksdb. - The default is `true`. -* `ROCKSDB_SUDO` defines whether to use `sudo` for the installation of the built library. - The difference between `sudo make rocksdb` and `ROCKSDB_SUDO=true make rocksdb` - is that the latter will use `sudo` only for the installation (the download and build still use your current user). - Some systems (e.g. Ubuntu) might require this. - The default is `true` if the `sudo` command is found, or `false` otherwise. -* `ROCKSDB_DO_CLEANUP` defines whether to delete the downloaded and unpacked repo when done. - The default is `true`. -
- ## Building or Installing `provenanced` To build the `provenanced` executable and place it in the `build/` directory: @@ -118,18 +43,6 @@ $ make install A few aspects of `make build` and `make install` can be controlled through environment variables. -* `WITH_CLEVELDB`: Enables/Disables building with CLevelDB support. - The default is `false`. - If this is not `true` the built `provenanced`, executable will not be able to use CLevelDB as a database backend. -* `LEVELDB_PATH`: Defines the location of the leveldb library and includes. - This is only used if compiling with CLevelDB support on a Mac. - The default is the result of `brew --prefix leveldb`. -* `WITH_ROCKSDB`: Enables/Disables building with RocksDB support. - The default is `false`. - If this is not `true` the built `provenanced`, executable will not be able to use RocksDB as a database backend. -* `WITH_BADGERDB`: Enables/Disables building with BadgerDB support. - The default is `false`. - If this is not `true` the built `provenanced`, executable will not be able to use BadgerDB as a database backend. * `WITH_LEDGER`: Enables/Disables building with Ledger hardware wallet support. The default is `true`. If this is not `true` the built `provenanced`, executable will not work with Ledger hardware wallets. @@ -151,28 +64,3 @@ A few aspects of `make build` and `make install` can be controlled through envir These are appended to a list constructed by the Makefile. * `BUILD_FLAGS`: Any extra flags to include when invoking `go build` or `go install.`. These are appended to a list constructed by the Makefile. - -## Building `dbmigrate` - -The `dbmigrate` utility can be used to migrate a node's data directory to a use a different db backend. - -To build the `dbmigrate` executable and place it in the `build/` directory: -```console -$ make build-dbmigrate -``` - -To build the `dbmigrate` executable and place it in your system's default Go `bin/` directory. -```console -$ make install-dbmigrate -``` - -Building `dbmigrate` uses the same [Build Options](#build-options) as `provenanced`. - -The dbmigrate program will: -1. Create a new `data/` directory, and copy the contents of the existing `data/` directory into it, converting the database files appropriately. -2. Back up the existing `data/` directory to `${home}/data-dbmigrate-backup-{timestamp}-{dbtypes}/`. -3. Move the newly created `data/` directory into place. -4. Update the config's `db_backend` value to the new db backend type. - -The `dbmigrate` utility uses the same configs, environment variables, and flags as `provenanced`. -For example, if you have the environment variable PIO_HOME defined, then `dbmigrate` will use that as the `--home` directory (unless a `--home` is provided in the command line arguments). diff --git a/scripts/cleveldb_build_and_install.sh b/scripts/cleveldb_build_and_install.sh deleted file mode 100755 index 5aff3264a0..0000000000 --- a/scripts/cleveldb_build_and_install.sh +++ /dev/null @@ -1,120 +0,0 @@ -#!/bin/bash - -# This script will download, compile, and install leveldb, then clean up. -DEFAULT_CLEVELDB_VERSION='1.23' - -can_sudo='false' -command -v sudo > /dev/null 2>&1 && can_sudo='true' - -if [[ "$1" == '-h' || "$1" == '--help' || "$1" == 'help' ]]; then - echo "Usage: $( basename $0 ) []" - echo 'See https://github.com/facebook/leveldb/releases for version info.' - echo 'The arguments can also be defined using environment variables:' - echo " CLEVELDBDB_VERSION for the . Default is $DEFAULT_CLEVELDB_VERSION." - echo 'Additional parameters definable using environment variables:' - echo " CLEVELDB_JOBS is the number of parallel jobs for make to use. Default is the result of nproc (=$( nproc )), or 1 if nproc isn't availble." - echo ' CLEVELDB_DO_BUILD controls whether to build. Default is true.' - echo ' CLEVELDB_DO_INSTALL controls whether to install. Default is true.' - echo " CLEVELDB_SUDO controls whether to use sudo when installing the built libraries. Default is $can_sudo." - echo ' CLEVELDB_DO_CLEANUP controls whether to delete the downloaded and unpacked repo. Default is true.' - exit 0 -fi - -# Order of precedence for leveldb version: command line arg 1, env var, default. -if [[ -n "$1" ]]; then - CLEVELDB_VERSION="$1" -elif [[ -z "$CLEVELDB_VERSION" ]]; then - CLEVELDB_VERSION="$DEFAULT_CLEVELDB_VERSION" -fi -if [[ -n "$CLEVELDB_VERSION" && "$CLEVELDB_VERSION" =~ ^v ]]; then - echo "Illegal version: [$CLEVELDB_VERSION]. Must not start with 'v'." >&2 - exit 1 -fi - -if [[ -z "$CLEVELDB_JOBS" ]]; then - if command -v nproc > /dev/null 2>&1; then - CLEVELDB_JOBS="$( nproc )" - else - CLEVELDB_JOBS=1 - fi -fi - -if [[ -n "$CLEVELDB_JOBS" && ( "$CLEVELDB_JOBS" =~ [^[:digit:]] || $CLEVELDB_JOBS -lt '1' ) ]]; then - echo "Illegal jobs count: [$CLEVELDB_JOBS]. Must only contain digits. Must be at least 1." >&2 - exit 1 -fi - -# Usage: trueFalseOrDefault -trueFalseOrDefault () { - local k v d - k="$1" - v="${!1}" - d="$2" - if [[ -n "$v" ]]; then - if [[ "$v" =~ ^[tT]([rR][uU][eE])?$ ]]; then - printf 'true' - elif [[ "$v" =~ ^[fF]([aA][lL][sS][eE])?$ ]]; then - printf 'false' - else - echo "Illegal $k value: '$v'. Must be either 'true' or 'false'." >&2 - printf '%s' "$v" - return 1 - fi - else - printf '%s' "$d" - fi - return 0 -} - -CLEVELDB_SUDO="$( trueFalseOrDefault CLEVELDB_SUDO "$can_sudo" )" || exit $? -CLEVELDB_DO_CLEANUP="$( trueFalseOrDefault CLEVELDB_DO_CLEANUP true )" || exit $? -CLEVELDB_DO_BUILD="$( trueFalseOrDefault CLEVELDB_DO_BUILD true )" || exit $? -CLEVELDB_DO_INSTALL="$( trueFalseOrDefault CLEVELDB_DO_INSTALL true )" || exit $? - -# The github action runners need sudo when installing libraries. Brew sometimes does (even though it complains). -# In some situations, though, the sudo program isn't availble. If you've got sudo, this'll default to using it. -# You'll need sudo if the install command fails due to permissions (might manifest as a file does not exist error). -SUDO='' -if [[ "$CLEVELDB_SUDO" == 'true' ]]; then - SUDO='sudo' -fi - -# These are defined in the leveldb CMakeLists.txt file. We don't care about them for this. -LEVELDB_BUILD_TESTS="${LEVELDB_BUILD_TESTS:-OFF}" -LEVELDB_BUILD_BENCHMARKS="${LEVELDB_BUILD_BENCHMARKS:-OFF}" - -set -ex - -# These lines look dumb, but they're here so that the values are clearly in the output (because of set -x). -CLEVELDB_VERSION="$CLEVELDB_VERSION" -CLEVELDB_JOBS="$CLEVELDB_JOBS" -CLEVELDB_SUDO="$CLEVELDB_SUDO" -CLEVELDB_DO_CLEANUP="$CLEVELDB_DO_CLEANUP" -CLEVELDB_DO_BUILD="$CLEVELDB_DO_BUILD" -CLEVELDB_DO_INSTALL="$CLEVELDB_DO_INSTALL" -export LEVELDB_BUILD_TESTS="$LEVELDB_BUILD_TESTS" -export LEVELDB_BUILD_BENCHMARKS="$LEVELDB_BUILD_BENCHMARKS" -TAR_FILE="leveldb-${CLEVELDB_VERSION}.tar.gz" - -if [[ ! -e "$TAR_FILE" ]]; then - wget "https://github.com/google/leveldb/archive/${CLEVELDB_VERSION}.tar.gz" -O "$TAR_FILE" - tar zxf "$TAR_FILE" -fi -TAR_DIR="$( tar --exclude='./*/*/*' -tf "$TAR_FILE" | head -n 1 )" -cd "$TAR_DIR" -[[ -d 'build' ]] || mkdir build -cd build -[[ "$CLEVELDB_DO_BUILD" == 'true' ]] && \ - cmake -DCMAKE_BUILD_TYPE=Release \ - -DLEVELDB_BUILD_TESTS="$LEVELDB_BUILD_TESTS" \ - -DLEVELDB_BUILD_BENCHMARKS="$LEVELDB_BUILD_BENCHMARKS" \ - -DBUILD_SHARED_LIBS=ON \ - .. && \ - cmake --build . -j$CLEVELDB_JOBS -[[ "$CLEVELDB_DO_INSTALL" == 'true' ]] && $SUDO cmake --install . -cd .. -cd .. -if [[ "$CLEVELDB_DO_CLEANUP" == 'true' ]]; then - rm "$TAR_FILE" - rm -rf "$TAR_DIR" -fi diff --git a/scripts/no-now-lint.sh b/scripts/no-now-lint.sh index 571254c649..e9ad585c09 100755 --- a/scripts/no-now-lint.sh +++ b/scripts/no-now-lint.sh @@ -92,8 +92,6 @@ filters+=( '^x/marker/client/cli/tx\.go:' ) # Since it's setting a variable more specifically named than 'now', # we can ignore the specific line, but let it be on any line number. filters+=( '^cmd/provenanced/cmd/testnet\.go:[[:digit:]]+:[[:space:]]+genTime := [[:alnum:]]+\.Now\(\)$' ) -# The dbmigrate migrator has several legitimate uses, and there's nothing in there that affects block processing. -filters+=( '^cmd/dbmigrate/utils/migrator\.go:' ) for filters in "${filters[@]}"; do now_uses="$( grep -vE "$filters" <<< "$now_uses" )" diff --git a/scripts/rocksdb_build_and_install.sh b/scripts/rocksdb_build_and_install.sh deleted file mode 100755 index a61d101e13..0000000000 --- a/scripts/rocksdb_build_and_install.sh +++ /dev/null @@ -1,123 +0,0 @@ -#!/bin/bash - -# This script will download, compile, and install rocksdb, then clean up. -DEFAULT_ROCKSDB_VERSION='6.29.5' - -can_sudo='false' -command -v sudo > /dev/null 2>&1 && can_sudo='true' - -if [[ "$1" == '-h' || "$1" == '--help' || "$1" == 'help' ]]; then - echo "Usage: $( basename $0 ) []" - echo 'See https://github.com/facebook/rocksdb/releases for version info.' - echo 'The arguments can also be defined using environment variables:' - echo " ROCKSDB_VERSION for the . Default is $DEFAULT_ROCKSDB_VERSION." - echo 'Additional parameters definable using environment variables:' - echo " ROCKSDB_JOBS is the number of parallel jobs for make to use. Default is the result of nproc (=$( nproc )), or 1 if nproc isn't availble." - echo ' ROCKSDB_WITH_SHARED controls whether to build and install the shared library. Default is true.' - echo ' ROCKSDB_WITH_STATIC controls whether to build and install the static library. Default is false.' - echo ' ROCKSDB_DO_BUILD controls whether to build. Default is true.' - echo ' ROCKSDB_DO_INSTALL controls whether to install. Default is true.' - echo " ROCKSDB_SUDO controls whether to use sudo when installing the built libraries. Default is $can_sudo." - echo ' ROCKSDB_DO_CLEANUP controls whether to delete the downloaded and unpacked repo. Default is true.' - exit 0 -fi - -# Order of precedence for rocksdb version: command line arg 1, env var, default. -if [[ -n "$1" ]]; then - ROCKSDB_VERSION="$1" -elif [[ -z "$ROCKSDB_VERSION" ]]; then - ROCKSDB_VERSION="$DEFAULT_ROCKSDB_VERSION" -fi -if [[ -n "$ROCKSDB_VERSION" && "$ROCKSDB_VERSION" =~ ^v ]]; then - echo "Illegal version: [$ROCKSDB_VERSION]. Must not start with 'v'." >&2 - exit 1 -fi - -if [[ -z "$ROCKSDB_JOBS" ]]; then - if command -v nproc > /dev/null 2>&1; then - ROCKSDB_JOBS="$( nproc )" - else - ROCKSDB_JOBS=1 - fi -fi - -if [[ -n "$ROCKSDB_JOBS" && ( "$ROCKSDB_JOBS" =~ [^[:digit:]] || $ROCKSDB_JOBS -lt '1' ) ]]; then - echo "Illegal jobs count: [$ROCKSDB_JOBS]. Must only contain digits. Must be at least 1." >&2 - exit 1 -fi - -# Usage: trueFalseOrDefault -trueFalseOrDefault () { - local k v d - k="$1" - v="${!1}" - d="$2" - if [[ -n "$v" ]]; then - if [[ "$v" =~ ^[tT]([rR][uU][eE])?$ ]]; then - printf 'true' - elif [[ "$v" =~ ^[fF]([aA][lL][sS][eE])?$ ]]; then - printf 'false' - else - echo "Illegal $k value: '$v'. Must be either 'true' or 'false'." >&2 - printf '%s' "$v" - return 1 - fi - else - printf '%s' "$d" - fi - return 0 -} - -ROCKSDB_SUDO="$( trueFalseOrDefault ROCKSDB_SUDO "$can_sudo" )" || exit $? -ROCKSDB_WITH_SHARED="$( trueFalseOrDefault ROCKSDB_WITH_SHARED true )" || exit $? -ROCKSDB_WITH_STATIC="$( trueFalseOrDefault ROCKSDB_WITH_STATIC false )" || exit $? -ROCKSDB_DO_CLEANUP="$( trueFalseOrDefault ROCKSDB_DO_CLEANUP true )" || exit $? -ROCKSDB_DO_BUILD="$( trueFalseOrDefault ROCKSDB_DO_BUILD true )" || exit $? -ROCKSDB_DO_INSTALL="$( trueFalseOrDefault ROCKSDB_DO_INSTALL true )" || exit $? - -# The github action runners need sudo when installing libraries. Brew sometimes does (even though it complains). -# In some situations, though, the sudo program isn't availble. If you've got sudo, this'll default to using it. -# You'll need sudo if the install command fails due to permissions (might manifest as a file does not exist error). -SUDO='' -if [[ "$ROCKSDB_SUDO" == 'true' ]]; then - SUDO='sudo' -fi - -BUILD_TARGETS=() -INSTALL_TARGETS=() -if [[ "$ROCKSDB_WITH_SHARED" == 'true' ]]; then - BUILD_TARGETS+=( shared_lib ) - INSTALL_TARGETS+=( install-shared ) -fi -if [[ "$ROCKSDB_WITH_STATIC" == 'true' ]]; then - BUILD_TARGETS+=( static_lib ) - INSTALL_TARGETS+=( install-static ) -fi - -set -ex - -# These lines look dumb, but they're here so that the values are clearly in the output (because of set -x). -ROCKSDB_VERSION="$ROCKSDB_VERSION" -ROCKSDB_JOBS="$ROCKSDB_JOBS" -ROCKSDB_WITH_SHARED="$ROCKSDB_WITH_SHARED" -ROCKSDB_WITH_STATIC="$ROCKSDB_WITH_STATIC" -ROCKSDB_SUDO="$ROCKSDB_SUDO" -ROCKSDB_DO_CLEANUP="$ROCKSDB_DO_CLEANUP" -ROCKSDB_DO_BUILD="$ROCKSDB_DO_BUILD" -ROCKSDB_DO_INSTALL="$ROCKSDB_DO_INSTALL" -TAR_FILE="rocksdb-${ROCKSDB_VERSION}.tar.gz" - -if [[ ! -e "$TAR_FILE" ]]; then - wget "https://github.com/facebook/rocksdb/archive/refs/tags/v${ROCKSDB_VERSION}.tar.gz" -O "$TAR_FILE" - tar zxf "$TAR_FILE" -fi -TAR_DIR="$( tar --exclude='./*/*/*' -tf "$TAR_FILE" | head -n 1 )" -cd "$TAR_DIR" -export DEBUG_LEVEL=0 -[[ "$ROCKSDB_DO_BUILD" == 'true' && "${#BUILD_TARGETS[@]}" > '0' ]] && make -j${ROCKSDB_JOBS} "${BUILD_TARGETS[@]}" -[[ "$ROCKSDB_DO_INSTALL" == 'true' && "${#INSTALL_TARGETS[@]}" > '0' ]] && $SUDO make "${INSTALL_TARGETS[@]}" -cd .. -if [[ "$ROCKSDB_DO_CLEANUP" == 'true' ]]; then - rm "$TAR_FILE" - rm -rf "$TAR_DIR" -fi diff --git a/scripts/run-sims-with-all-dbs.sh b/scripts/run-sims-with-all-dbs.sh index 9ac4529172..cfb0a5babe 100755 --- a/scripts/run-sims-with-all-dbs.sh +++ b/scripts/run-sims-with-all-dbs.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash # This script will run some sim tests: simple, import-export, multi-seed-short, nondeterminism -# using each of the db backends: goleveldb, cleveldb, rocksdb, badgerdb. +# using each of the db backends: goleveldb default_sims='simple import-export multi-seed-short nondeterminism' -default_db_types='goleveldb cleveldb rocksdb badgerdb' +default_db_types='goleveldb' default_output_dir='build/sim-times' if [[ "$#" -ne '0' ]]; then diff --git a/sims.mk b/sims.mk index 5112b54e40..18294feaeb 100644 --- a/sims.mk +++ b/sims.mk @@ -8,7 +8,7 @@ ### ### Environment Variables: ### GO: The command to use to execute go. Default: go -### DB_BACKEND: Dictates which db backend to use: goleveldb, cleveldb, rocksdb, badgerdb. +### DB_BACKEND: Dictates which db backend to use: goleveldb. ### The test-sim-nondeterminism is hard-coded to use memdb though. ### BINDIR: The Go bin directory, defaults to $GOPATH/bin ### SIM_GENESIS: Defines the path to the custom genesis file used by @@ -22,14 +22,8 @@ GO ?= go BINDIR ?= $(GOPATH)/bin SIMAPP = ./app DB_BACKEND ?= goleveldb -ifeq ($(DB_BACKEND),cleveldb) - db_tag = cleveldb -else ifeq ($(DB_BACKEND),rocksdb) - db_tag = rocksdb -else ifeq ($(DB_BACKEND),badgerdb) - db_tag = badgerdb -else ifneq ($(DB_BACKEND),goleveldb) - $(error unknown DB_BACKEND value [$(DB_BACKEND)]. Must be one of goleveldb, cleveldb, rocksdb, badgerdb) +ifneq ($(DB_BACKEND),goleveldb) + $(error unknown DB_BACKEND value [$(DB_BACKEND)]. Must be goleveldb) endif # We have to use a hack to provide -tags with the runsim stuff, but it only allows us to provide one tag. From 8cd9893ef8bc0a2a19bbc6d0dacb4d1b5e587c39 Mon Sep 17 00:00:00 2001 From: Matt Witkowski Date: Thu, 14 Mar 2024 15:28:47 -0400 Subject: [PATCH 04/11] Adds store for crisis module (#1861) * Add changelog entry. * Add umber upgrade with crisis module store. * Add tests for umber. * Update app/upgrades_test.go Co-authored-by: Daniel Wedul * Update app/upgrades.go Co-authored-by: Daniel Wedul * Add rremoveInactiveValidatorDelegations to main upgrade handler. --------- Co-authored-by: Daniel Wedul --- CHANGELOG.md | 1 + app/upgrades.go | 29 +++++++++++++++++++++++++++++ app/upgrades_test.go | 15 +++++++++++++++ 3 files changed, 45 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3c21ef5290..15eaf9f494 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -44,6 +44,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ * Add CLI commands for the exchange module endpoints and queries [#1701](https://github.com/provenance-io/provenance/issues/1701). * Add CLI command to generate autocomplete shell scripts [#1762](https://github.com/provenance-io/provenance/pull/1762). * Create CLI commands for adding a market to a genesis file [#1757](https://github.com/provenance-io/provenance/issues/1757). +* Add store for crisis module for sdk v0.50 [#1760](https://github.com/provenance-io/provenance/issues/1760). * Add PreBlocker support for sdk v0.50 [#1760](https://github.com/provenance-io/provenance/issues/1760). ### Improvements diff --git a/app/upgrades.go b/app/upgrades.go index 171081948c..99ce8a1dd8 100644 --- a/app/upgrades.go +++ b/app/upgrades.go @@ -15,6 +15,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + crisistypes "github.com/cosmos/cosmos-sdk/x/crisis/types" govtypesv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" govtypesv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" @@ -200,6 +201,34 @@ var upgrades = map[string]appUpgrade{ return vm, nil }, }, + "umber-rc1": { // upgrade for v1.19.0-rc1 + Added: []string{crisistypes.ModuleName}, + Handler: func(ctx sdk.Context, app *App, vm module.VersionMap) (module.VersionMap, error) { + var err error + vm, err = runModuleMigrations(ctx, app, vm) + if err != nil { + return nil, err + } + + removeInactiveValidatorDelegations(ctx, app) + + return vm, nil + }, + }, + "umber": { // upgrade for v1.19.0 + Added: []string{crisistypes.ModuleName}, + Handler: func(ctx sdk.Context, app *App, vm module.VersionMap) (module.VersionMap, error) { + var err error + vm, err = runModuleMigrations(ctx, app, vm) + if err != nil { + return nil, err + } + + removeInactiveValidatorDelegations(ctx, app) + + return vm, nil + }, + }, // TODO - Add new upgrade definitions here. } diff --git a/app/upgrades_test.go b/app/upgrades_test.go index 2c7c57445f..2e8d2e51b3 100644 --- a/app/upgrades_test.go +++ b/app/upgrades_test.go @@ -496,6 +496,21 @@ func (s *UpgradeTestSuite) TestTourmaline() { s.AssertUpgradeHandlerLogs("tourmaline", expInLog, nil) } +func (s *UpgradeTestSuite) TestUmberRC1() { + expInLog := []string{ + "INF Starting module migrations. This may take a significant amount of time to complete. Do not restart node.", + "INF removing all delegations from validators that have been inactive (unbonded) for 21 days", + } + + s.AssertUpgradeHandlerLogs("umber-rc1", expInLog, nil) +} + +func (s *UpgradeTestSuite) TestUmber() { + expInLog := []string{} + + s.AssertUpgradeHandlerLogs("umber", expInLog, nil) +} + func (s *UpgradeTestSuite) TestRemoveInactiveValidatorDelegations() { addr1 := s.CreateAndFundAccount(sdk.NewInt64Coin("stake", 1000000)) addr2 := s.CreateAndFundAccount(sdk.NewInt64Coin("stake", 1000000)) From b61e496643d1c41c9e4c25cf78d6808bd5e8e009 Mon Sep 17 00:00:00 2001 From: Carlton Hanna Date: Fri, 15 Mar 2024 08:42:17 -0600 Subject: [PATCH 05/11] [TODOs] sdk-v0.50 app.go (#1844) * app.go account keeper * add bank keeper * add staking, mint, distr, slashing, crisis, feegrant keepers * refactor staking keeper property * add authz keeper * add app modules * fix broken test compile * Add gov keeper * refactor gov keeper init to reflect cosmos pattern * use provenance cosmos-sdk fork, add msg service router * TODO comment, update msg_service_router_test * fix another test * add register hybrid handler logic * todo async-icq * update third party protos * update proto-update-deps to use new proofs location * remove redundant delete * fix ibc version * update protos for library location updates * ica-host app.go todos * ibc-host app.go todo * few more ibc-host app.go todo * Add new cosmos-sdk tag for msg based fee support, add fee handler, add aggregate events function * add todo for issue that is blocking furture development * finish evidence todo * rename todo to line up with other proto todos * Update protobuf and point async-icq to our own version. Still need to figure out internal/tools and documentation for protos. * Add pulsar in case we need it. * Add pulsar script. * Remove pulsar until we need it. * Add swagger. * Update swagger. * Remove doc since it isn't needed. * Improve comment documentation in go.mod * Update statik.go * First changes towards any generation. * Remove make proto-gen-any. * Remove temporary work that was used for proto-gen-any. * Update phony to remove any. * Remove todo since protos are registering now. * Fix prefix address for tests. * Add WasmKeeper so tests can run. * Fix some wasm sim. Still need to resolve message router issues, and may require fork of wasmd. * Fix more wasm deprecations. Add ConsensusParamsKeeper. * Fix prefixes. * Fix validator address for tests. * Add keys for crisis module. * Add fix for ibc legacy param store. * remove use of deprecated authtypes AccountI and use sdk types AccountI * use protocompat.Handler instead of re-writing func sig * remove proofs.proto customization that isn't needed --------- Co-authored-by: Matthew Witkowski --- .golangci.yml | 2 +- CONTRIBUTING.md | 2 +- Makefile | 12 +- app/app.go | 462 +++++----- app/encoding.go | 1 + app/export.go | 2 +- app/sim_test.go | 21 +- app/test_helpers.go | 2 +- app/upgrades.go | 8 +- buf.gen.proto.yaml | 13 + client/docs/statik/statik.go | 2 +- client/docs/swagger-ui/swagger.yaml | 863 ++++-------------- contrib/devtools/proto-tools-installer.sh | 4 +- go.mod | 93 +- go.sum | 200 ++-- .../antewrapper/msg_fees_decorator_test.go | 3 +- internal/handlers/msg_fee_handler.go | 4 +- internal/handlers/msg_fee_handler_test.go | 3 - internal/handlers/msg_fee_invoker_test.go | 162 ++-- internal/handlers/msg_service_router.go | 251 +++-- internal/handlers/msg_service_router_test.go | 4 +- internal/protocompat/protocompat.go | 232 +++++ internal/provwasm/simulation.go | 15 +- proto/buf.gen.gogo.yaml | 8 + proto/buf.gen.swagger.yaml | 10 + proto/provenance/marker/v1/marker.proto | 2 +- proto/provenance/marker/v1/tx.proto | 2 +- proto/provenance/reward/v1/reward.proto | 15 +- scripts/proto-update-deps.sh | 28 +- scripts/protoc-swagger-gen.sh | 14 +- scripts/protocgen-any.sh | 18 - scripts/protocgen.sh | 27 +- third_party/proto/amino/amino.proto | 84 ++ .../v1}/capability.proto | 8 +- .../v1beta1 => capability/v1}/genesis.proto | 12 +- .../cosmos/app/module/v1alpha1/module.proto | 13 - .../cosmos/app/runtime/v1alpha1/module.proto | 65 ++ .../proto/cosmos/app/v1alpha1/config.proto | 19 + .../proto/cosmos/app/v1alpha1/module.proto | 2 +- .../proto/cosmos/auth/module/v1/module.proto | 31 + .../proto/cosmos/auth/v1beta1/auth.proto | 40 +- .../proto/cosmos/auth/v1beta1/genesis.proto | 5 +- .../proto/cosmos/auth/v1beta1/query.proto | 67 +- .../proto/cosmos/auth/v1beta1/tx.proto | 43 + .../proto/cosmos/authz/module/v1/module.proto | 12 + .../proto/cosmos/authz/v1beta1/authz.proto | 20 +- .../proto/cosmos/authz/v1beta1/genesis.proto | 3 +- .../proto/cosmos/authz/v1beta1/query.proto | 2 +- .../proto/cosmos/authz/v1beta1/tx.proto | 24 +- .../proto/cosmos/autocli/v1/options.proto | 124 +++ .../proto/cosmos/autocli/v1/query.proto | 28 + .../proto/cosmos/bank/module/v1/module.proto | 20 + .../proto/cosmos/bank/v1beta1/authz.proto | 14 +- .../proto/cosmos/bank/v1beta1/bank.proto | 36 +- .../proto/cosmos/bank/v1beta1/genesis.proto | 25 +- .../proto/cosmos/bank/v1beta1/query.proto | 185 +++- .../proto/cosmos/bank/v1beta1/tx.proto | 91 +- .../proto/cosmos/base/abci/v1beta1/abci.proto | 19 + .../cosmos/base/node/v1beta1/query.proto | 23 +- .../base/tendermint/v1beta1/query.proto | 49 +- .../base/tendermint/v1beta1/types.proto | 16 +- .../proto/cosmos/base/v1beta1/coin.proto | 30 +- .../cosmos/circuit/module/v1/module.proto | 15 + .../proto/cosmos/circuit/v1/query.proto | 61 ++ third_party/proto/cosmos/circuit/v1/tx.proto | 83 ++ .../proto/cosmos/circuit/v1/types.proto | 49 + .../cosmos/consensus/module/v1/module.proto | 15 + .../proto/cosmos/consensus/v1/query.proto | 27 + .../proto/cosmos/consensus/v1/tx.proto | 46 + .../cosmos/crisis/module/v1/module.proto | 18 + .../proto/cosmos/crisis/v1beta1/genesis.proto | 3 +- .../proto/cosmos/crisis/v1beta1/tx.proto | 42 +- .../proto/cosmos/crypto/ed25519/keys.proto | 18 +- .../proto/cosmos/crypto/hd/v1/hd.proto | 3 + .../cosmos/crypto/keyring/v1/record.proto | 1 + .../proto/cosmos/crypto/multisig/keys.proto | 15 +- .../proto/cosmos/crypto/secp256k1/keys.proto | 16 + .../distribution/module/v1/module.proto | 17 + .../distribution/v1beta1/distribution.proto | 104 ++- .../cosmos/distribution/v1beta1/genesis.proto | 65 +- .../cosmos/distribution/v1beta1/query.proto | 74 +- .../cosmos/distribution/v1beta1/tx.proto | 140 ++- .../cosmos/evidence/module/v1/module.proto | 12 + .../cosmos/evidence/v1beta1/evidence.proto | 25 +- .../cosmos/evidence/v1beta1/genesis.proto | 2 +- .../proto/cosmos/evidence/v1beta1/query.proto | 13 +- .../proto/cosmos/evidence/v1beta1/tx.proto | 13 +- .../cosmos/feegrant/module/v1/module.proto | 12 + .../cosmos/feegrant/v1beta1/feegrant.proto | 48 +- .../cosmos/feegrant/v1beta1/genesis.proto | 5 +- .../proto/cosmos/feegrant/v1beta1/query.proto | 6 +- .../proto/cosmos/feegrant/v1beta1/tx.proto | 28 +- .../cosmos/genutil/module/v1/module.proto | 12 + .../cosmos/genutil/v1beta1/genesis.proto | 10 +- .../proto/cosmos/gov/module/v1/module.proto | 19 + third_party/proto/cosmos/gov/v1/genesis.proto | 26 +- third_party/proto/cosmos/gov/v1/gov.proto | 187 +++- third_party/proto/cosmos/gov/v1/query.proto | 36 +- third_party/proto/cosmos/gov/v1/tx.proto | 145 ++- .../proto/cosmos/gov/v1beta1/genesis.proto | 22 +- .../proto/cosmos/gov/v1beta1/gov.proto | 137 ++- .../proto/cosmos/gov/v1beta1/query.proto | 29 +- third_party/proto/cosmos/gov/v1beta1/tx.proto | 92 +- .../proto/cosmos/group/module/v1/module.proto | 24 + third_party/proto/cosmos/group/v1/query.proto | 34 +- third_party/proto/cosmos/group/v1/tx.proto | 53 +- third_party/proto/cosmos/group/v1/types.proto | 63 +- .../proto/{ => cosmos/ics23/v1}/proofs.proto | 157 ++-- .../proto/cosmos/mint/module/v1/module.proto | 17 + .../proto/cosmos/mint/v1beta1/genesis.proto | 7 +- .../proto/cosmos/mint/v1beta1/mint.proto | 29 +- .../proto/cosmos/mint/v1beta1/query.proto | 19 +- .../proto/cosmos/mint/v1beta1/tx.proto | 43 + .../proto/cosmos/msg/textual/v1/textual.proto | 18 + third_party/proto/cosmos/msg/v1/msg.proto | 10 +- .../proto/cosmos/nft/module/v1/module.proto | 12 + .../proto/cosmos/nft/v1beta1/event.proto | 31 +- .../proto/cosmos/nft/v1beta1/genesis.proto | 6 +- .../proto/cosmos/nft/v1beta1/nft.proto | 2 +- .../proto/cosmos/nft/v1beta1/query.proto | 43 +- third_party/proto/cosmos/nft/v1beta1/tx.proto | 10 +- .../cosmos/orm/module/v1alpha1/module.proto | 6 +- .../cosmos/orm/query/v1alpha1/query.proto | 131 +++ third_party/proto/cosmos/orm/v1/orm.proto | 7 +- .../proto/cosmos/orm/v1alpha1/schema.proto | 22 +- .../cosmos/params/module/v1/module.proto | 12 + .../proto/cosmos/params/v1beta1/params.proto | 7 +- .../proto/cosmos/params/v1beta1/query.proto | 3 +- .../cosmos/quarantine/v1beta1/events.proto | 32 - .../cosmos/quarantine/v1beta1/genesis.proto | 20 - .../quarantine/v1beta1/quarantine.proto | 73 -- .../cosmos/quarantine/v1beta1/query.proto | 100 -- .../proto/cosmos/quarantine/v1beta1/tx.proto | 107 --- third_party/proto/cosmos/query/v1/query.proto | 35 + .../cosmos/reflection/v1/reflection.proto | 27 + .../cosmos/sanction/v1beta1/events.proto | 29 - .../cosmos/sanction/v1beta1/genesis.proto | 17 - .../proto/cosmos/sanction/v1beta1/query.proto | 84 -- .../cosmos/sanction/v1beta1/sanction.proto | 47 - .../proto/cosmos/sanction/v1beta1/tx.proto | 65 -- .../cosmos/slashing/module/v1/module.proto | 15 + .../cosmos/slashing/v1beta1/genesis.proto | 17 +- .../proto/cosmos/slashing/v1beta1/query.proto | 12 +- .../cosmos/slashing/v1beta1/slashing.proto | 55 +- .../proto/cosmos/slashing/v1beta1/tx.proto | 43 +- .../cosmos/staking/module/v1/module.proto | 26 + .../proto/cosmos/staking/v1beta1/authz.proto | 10 +- .../cosmos/staking/v1beta1/genesis.proto | 26 +- .../proto/cosmos/staking/v1beta1/query.proto | 112 ++- .../cosmos/staking/v1beta1/staking.proto | 208 +++-- .../proto/cosmos/staking/v1beta1/tx.proto | 109 ++- .../internal}/kv/v1beta1/kv.proto | 6 +- .../snapshots/v1}/snapshot.proto | 23 +- .../cosmos/store/streaming/abci/grpc.proto | 36 + .../store/v1beta1/commit_info.proto | 12 +- .../{base => }/store/v1beta1/listening.proto | 20 +- .../proto/cosmos/streaming/abci/v1/grpc.proto | 60 -- .../cosmos/tx/signing/v1beta1/signing.proto | 7 +- .../proto/cosmos/tx/v1beta1/service.proto | 143 ++- third_party/proto/cosmos/tx/v1beta1/tx.proto | 30 +- .../cosmos/upgrade/module/v1/module.proto | 15 + .../proto/cosmos/upgrade/v1beta1/query.proto | 2 +- .../proto/cosmos/upgrade/v1beta1/tx.proto | 16 +- .../cosmos/upgrade/v1beta1/upgrade.proto | 32 +- .../cosmos/vesting/module/v1/module.proto | 12 + .../proto/cosmos/vesting/v1beta1/tx.proto | 32 +- .../cosmos/vesting/v1beta1/vesting.proto | 59 +- .../proto/cosmwasm/wasm/v1/authz.proto | 75 +- .../proto/cosmwasm/wasm/v1/genesis.proto | 46 +- third_party/proto/cosmwasm/wasm/v1/ibc.proto | 6 + .../proto/cosmwasm/wasm/v1/proposal.proto | 218 ----- .../cosmwasm/wasm/v1/proposal_legacy.proto | 333 +++++++ .../proto/cosmwasm/wasm/v1/query.proto | 44 +- third_party/proto/cosmwasm/wasm/v1/tx.proto | 372 +++++++- .../proto/cosmwasm/wasm/v1/types.proto | 31 +- third_party/proto/gogoproto/gogo.proto | 4 +- .../proto/ibc/applications/fee/v1/ack.proto | 10 +- .../proto/ibc/applications/fee/v1/fee.proto | 29 +- .../ibc/applications/fee/v1/genesis.proto | 30 +- .../ibc/applications/fee/v1/metadata.proto | 8 +- .../proto/ibc/applications/fee/v1/query.proto | 46 +- .../proto/ibc/applications/fee/v1/tx.proto | 42 +- .../controller/v1/controller.proto | 6 +- .../controller/v1/query.proto | 5 +- .../controller/v1/tx.proto | 54 +- .../genesis/v1/genesis.proto | 42 +- .../interchain_accounts/host/v1/host.proto | 8 +- .../interchain_accounts/host/v1/query.proto | 2 +- .../interchain_accounts/host/v1/tx.proto | 35 + .../interchain_accounts/v1/account.proto | 9 +- .../interchain_accounts/v1/metadata.proto | 8 +- .../interchain_accounts/v1/packet.proto | 2 +- .../ibc/applications/transfer/v1/authz.proto | 8 +- .../applications/transfer/v1/genesis.proto | 17 +- .../ibc/applications/transfer/v1/query.proto | 32 +- .../applications/transfer/v1/transfer.proto | 10 +- .../ibc/applications/transfer/v1/tx.proto | 46 +- .../ibc/applications/transfer/v2/packet.proto | 2 +- .../proto/ibc/core/channel/v1/channel.proto | 41 +- .../proto/ibc/core/channel/v1/genesis.proto | 17 +- .../proto/ibc/core/channel/v1/query.proto | 28 +- .../proto/ibc/core/channel/v1/tx.proto | 138 +-- .../proto/ibc/core/client/v1/client.proto | 86 +- .../proto/ibc/core/client/v1/genesis.proto | 26 +- .../proto/ibc/core/client/v1/query.proto | 2 +- third_party/proto/ibc/core/client/v1/tx.proto | 110 ++- .../ibc/core/commitment/v1/commitment.proto | 12 +- .../ibc/core/connection/v1/connection.proto | 20 +- .../ibc/core/connection/v1/genesis.proto | 7 +- .../proto/ibc/core/connection/v1/query.proto | 6 +- .../proto/ibc/core/connection/v1/tx.proto | 104 ++- .../proto/ibc/core/types/v1/genesis.proto | 11 +- .../lightclients/localhost/v1/localhost.proto | 18 - .../lightclients/localhost/v2/localhost.proto | 16 + .../solomachine/v1/solomachine.proto | 189 ---- .../solomachine/v2/solomachine.proto | 36 +- .../solomachine/v3/solomachine.proto | 99 ++ .../tendermint/v1/tendermint.proto | 57 +- third_party/proto/tendermint/abci/types.proto | 401 ++++---- .../{blockchain => blocksync}/types.proto | 8 +- .../proto/tendermint/consensus/types.proto | 2 +- .../proto/tendermint/consensus/wal.proto | 2 +- .../proto/tendermint/crypto/keys.proto | 2 +- .../proto/tendermint/crypto/proof.proto | 2 +- .../proto/tendermint/libs/bits/types.proto | 2 +- .../proto/tendermint/mempool/types.proto | 2 +- third_party/proto/tendermint/p2p/conn.proto | 2 +- third_party/proto/tendermint/p2p/pex.proto | 2 +- third_party/proto/tendermint/p2p/types.proto | 2 +- .../proto/tendermint/privval/types.proto | 2 +- .../proto/tendermint/rpc/grpc/types.proto | 10 +- .../proto/tendermint/state/types.proto | 36 +- .../proto/tendermint/statesync/types.proto | 2 +- .../proto/tendermint/store/types.proto | 2 +- .../proto/tendermint/types/block.proto | 2 +- .../proto/tendermint/types/canonical.proto | 11 +- .../proto/tendermint/types/events.proto | 2 +- .../proto/tendermint/types/evidence.proto | 2 +- .../proto/tendermint/types/params.proto | 34 +- .../proto/tendermint/types/types.proto | 55 +- .../proto/tendermint/types/validator.proto | 14 +- .../proto/tendermint/version/types.proto | 2 +- x/attribute/client/cli/cli_test.go | 2 +- x/attribute/client/rest/grpc_query_test.go | 2 +- x/attribute/types/attribute.pb.go | 12 +- x/attribute/types/genesis.pb.go | 4 +- x/attribute/types/query.pb.go | 6 +- x/attribute/types/query.pb.gw.go | 22 +- x/attribute/types/tx.pb.go | 20 +- x/exchange/client/cli/cli_test.go | 2 +- x/exchange/client/cli/helpers.go | 2 +- x/exchange/codec.go | 2 +- x/exchange/events.go | 2 +- x/exchange/events.pb.go | 2 +- x/exchange/events_test.go | 2 +- x/exchange/genesis.pb.go | 4 +- x/exchange/keeper/suite_test.go | 2 +- x/exchange/market.go | 2 +- x/exchange/market.pb.go | 4 +- x/exchange/orders.pb.go | 4 +- x/exchange/params.pb.go | 4 +- x/exchange/query.pb.go | 192 ++-- x/exchange/query.pb.gw.go | 52 +- x/exchange/tx.pb.go | 6 +- x/hold/client/cli/cli_test.go | 2 +- x/hold/events.pb.go | 2 +- x/hold/events_test.go | 2 +- x/hold/genesis.pb.go | 4 +- x/hold/hold.pb.go | 4 +- x/hold/query.pb.go | 6 +- x/hold/query.pb.gw.go | 10 +- x/ibchooks/types/genesis.pb.go | 4 +- x/ibchooks/types/params.pb.go | 4 +- x/ibchooks/types/tx.pb.go | 6 +- x/ibcratelimit/event.pb.go | 2 +- x/ibcratelimit/genesis.pb.go | 4 +- x/ibcratelimit/keeper/keeper.go | 2 +- x/ibcratelimit/keeper/msg_server_test.go | 2 +- x/ibcratelimit/params.pb.go | 4 +- x/ibcratelimit/query.pb.go | 6 +- x/ibcratelimit/query.pb.gw.go | 7 +- x/ibcratelimit/tx.pb.go | 6 +- x/marker/client/cli/cli_test.go | 2 +- x/marker/types/accessgrant.go | 2 +- x/marker/types/accessgrant.pb.go | 4 +- x/marker/types/authz.pb.go | 4 +- x/marker/types/codec.go | 2 +- x/marker/types/genesis.pb.go | 4 +- x/marker/types/marker.go | 6 +- x/marker/types/marker.pb.go | 213 +++-- x/marker/types/msg.go | 4 +- x/marker/types/proposals.pb.go | 4 +- x/marker/types/query.pb.go | 6 +- x/marker/types/query.pb.gw.go | 34 +- x/marker/types/si.pb.go | 4 +- x/marker/types/tx.pb.go | 242 ++--- x/metadata/client/cli/cli_test.go | 2 +- x/metadata/client/rest/grpc_query_test.go | 2 +- x/metadata/keeper/keeper.go | 2 +- x/metadata/keeper/record.go | 2 +- x/metadata/keeper/scope.go | 2 +- x/metadata/keeper/session.go | 2 +- x/metadata/keeper/specification.go | 2 +- x/metadata/types/events.pb.go | 2 +- x/metadata/types/genesis.pb.go | 4 +- x/metadata/types/metadata.pb.go | 4 +- x/metadata/types/objectstore.pb.go | 4 +- x/metadata/types/p8e/p8e.pb.go | 2 +- x/metadata/types/query.pb.go | 402 ++++---- x/metadata/types/query.pb.gw.go | 112 ++- x/metadata/types/scope.pb.go | 18 +- x/metadata/types/specification.pb.go | 6 +- x/metadata/types/tx.pb.go | 6 +- x/msgfees/keeper/keeper.go | 2 +- x/msgfees/types/expected_keepers.go | 3 +- x/msgfees/types/genesis.pb.go | 4 +- x/msgfees/types/msgfees.pb.go | 4 +- x/msgfees/types/proposals.pb.go | 4 +- x/msgfees/types/query.pb.go | 14 +- x/msgfees/types/query.pb.gw.go | 13 +- x/msgfees/types/tx.pb.go | 6 +- x/name/client/cli/cli_test.go | 2 +- x/name/types/genesis.pb.go | 4 +- x/name/types/name.pb.go | 4 +- x/name/types/query.pb.go | 6 +- x/name/types/query.pb.gw.go | 13 +- x/name/types/tx.pb.go | 6 +- x/oracle/keeper/relay.go | 167 ++-- x/oracle/keeper/relay_test.go | 82 +- x/oracle/module/module_ibc.go | 5 +- x/oracle/types/codec.go | 2 +- x/oracle/types/event.pb.go | 2 +- x/oracle/types/genesis.pb.go | 4 +- x/oracle/types/keys.go | 4 +- x/oracle/types/query.pb.go | 6 +- x/oracle/types/query.pb.gw.go | 10 +- x/oracle/types/tx.pb.go | 6 +- x/reward/keeper/rules_test.go | 2 +- x/reward/types/genesis.pb.go | 4 +- x/reward/types/query.pb.go | 6 +- x/reward/types/query.pb.gw.go | 19 +- x/reward/types/reward.pb.go | 237 +++-- x/reward/types/tx.pb.go | 14 +- x/reward/types/tx.pb.gw.go | 500 ---------- x/trigger/keeper/keeper.go | 4 +- x/trigger/types/event.pb.go | 2 +- x/trigger/types/genesis.pb.go | 4 +- x/trigger/types/query.pb.go | 6 +- x/trigger/types/query.pb.gw.go | 10 +- x/trigger/types/trigger.go | 2 +- x/trigger/types/trigger.pb.go | 18 +- x/trigger/types/tx.pb.go | 6 +- 352 files changed, 8093 insertions(+), 5676 deletions(-) create mode 100644 buf.gen.proto.yaml create mode 100644 internal/protocompat/protocompat.go create mode 100644 proto/buf.gen.gogo.yaml create mode 100644 proto/buf.gen.swagger.yaml delete mode 100755 scripts/protocgen-any.sh create mode 100644 third_party/proto/amino/amino.proto rename third_party/proto/{cosmos/capability/v1beta1 => capability/v1}/capability.proto (75%) rename third_party/proto/{cosmos/capability/v1beta1 => capability/v1}/genesis.proto (74%) delete mode 100644 third_party/proto/cosmos/app/module/v1alpha1/module.proto create mode 100644 third_party/proto/cosmos/app/runtime/v1alpha1/module.proto create mode 100644 third_party/proto/cosmos/auth/module/v1/module.proto create mode 100644 third_party/proto/cosmos/auth/v1beta1/tx.proto create mode 100644 third_party/proto/cosmos/authz/module/v1/module.proto create mode 100644 third_party/proto/cosmos/autocli/v1/options.proto create mode 100644 third_party/proto/cosmos/autocli/v1/query.proto create mode 100644 third_party/proto/cosmos/bank/module/v1/module.proto create mode 100644 third_party/proto/cosmos/circuit/module/v1/module.proto create mode 100644 third_party/proto/cosmos/circuit/v1/query.proto create mode 100644 third_party/proto/cosmos/circuit/v1/tx.proto create mode 100644 third_party/proto/cosmos/circuit/v1/types.proto create mode 100644 third_party/proto/cosmos/consensus/module/v1/module.proto create mode 100644 third_party/proto/cosmos/consensus/v1/query.proto create mode 100644 third_party/proto/cosmos/consensus/v1/tx.proto create mode 100644 third_party/proto/cosmos/crisis/module/v1/module.proto create mode 100644 third_party/proto/cosmos/distribution/module/v1/module.proto create mode 100644 third_party/proto/cosmos/evidence/module/v1/module.proto create mode 100644 third_party/proto/cosmos/feegrant/module/v1/module.proto create mode 100644 third_party/proto/cosmos/genutil/module/v1/module.proto create mode 100644 third_party/proto/cosmos/gov/module/v1/module.proto create mode 100644 third_party/proto/cosmos/group/module/v1/module.proto rename third_party/proto/{ => cosmos/ics23/v1}/proofs.proto (61%) create mode 100644 third_party/proto/cosmos/mint/module/v1/module.proto create mode 100644 third_party/proto/cosmos/mint/v1beta1/tx.proto create mode 100644 third_party/proto/cosmos/msg/textual/v1/textual.proto create mode 100644 third_party/proto/cosmos/nft/module/v1/module.proto create mode 100644 third_party/proto/cosmos/orm/query/v1alpha1/query.proto create mode 100644 third_party/proto/cosmos/params/module/v1/module.proto delete mode 100644 third_party/proto/cosmos/quarantine/v1beta1/events.proto delete mode 100644 third_party/proto/cosmos/quarantine/v1beta1/genesis.proto delete mode 100644 third_party/proto/cosmos/quarantine/v1beta1/quarantine.proto delete mode 100644 third_party/proto/cosmos/quarantine/v1beta1/query.proto delete mode 100644 third_party/proto/cosmos/quarantine/v1beta1/tx.proto create mode 100644 third_party/proto/cosmos/query/v1/query.proto create mode 100644 third_party/proto/cosmos/reflection/v1/reflection.proto delete mode 100644 third_party/proto/cosmos/sanction/v1beta1/events.proto delete mode 100644 third_party/proto/cosmos/sanction/v1beta1/genesis.proto delete mode 100644 third_party/proto/cosmos/sanction/v1beta1/query.proto delete mode 100644 third_party/proto/cosmos/sanction/v1beta1/sanction.proto delete mode 100644 third_party/proto/cosmos/sanction/v1beta1/tx.proto create mode 100644 third_party/proto/cosmos/slashing/module/v1/module.proto create mode 100644 third_party/proto/cosmos/staking/module/v1/module.proto rename third_party/proto/cosmos/{base => store/internal}/kv/v1beta1/kv.proto (58%) rename third_party/proto/cosmos/{base/snapshots/v1beta1 => store/snapshots/v1}/snapshot.proto (75%) create mode 100644 third_party/proto/cosmos/store/streaming/abci/grpc.proto rename third_party/proto/cosmos/{base => }/store/v1beta1/commit_info.proto (56%) rename third_party/proto/cosmos/{base => }/store/v1beta1/listening.proto (52%) delete mode 100644 third_party/proto/cosmos/streaming/abci/v1/grpc.proto create mode 100644 third_party/proto/cosmos/upgrade/module/v1/module.proto create mode 100644 third_party/proto/cosmos/vesting/module/v1/module.proto delete mode 100644 third_party/proto/cosmwasm/wasm/v1/proposal.proto create mode 100644 third_party/proto/cosmwasm/wasm/v1/proposal_legacy.proto create mode 100644 third_party/proto/ibc/applications/interchain_accounts/host/v1/tx.proto delete mode 100644 third_party/proto/ibc/lightclients/localhost/v1/localhost.proto create mode 100644 third_party/proto/ibc/lightclients/localhost/v2/localhost.proto delete mode 100644 third_party/proto/ibc/lightclients/solomachine/v1/solomachine.proto create mode 100644 third_party/proto/ibc/lightclients/solomachine/v3/solomachine.proto rename third_party/proto/tendermint/{blockchain => blocksync}/types.proto (77%) delete mode 100644 x/reward/types/tx.pb.gw.go diff --git a/.golangci.yml b/.golangci.yml index 7ee16aa53a..4ac136b919 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -97,7 +97,7 @@ linters-settings: - github.com/cosmos/ibc-apps/modules/async-icq/v6/types - github.com/cosmos/ibc-apps/modules/async-icq/v6/keeper - - github.com/gogo/protobuf + - github.com/cosmos/gogoproto - github.com/google/uuid diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 158408d6be..3113363453 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -152,7 +152,7 @@ build, in which case we can fall back on `go mod tidy`. ## Protobuf -We use [Protocol Buffers](https://developers.google.com/protocol-buffers) along with [gogoproto](https://github.com/gogo/protobuf) to generate code for use in Cosmos-SDK. +We use [Protocol Buffers](https://developers.google.com/protocol-buffers) along with [gogoproto](https://github.com/cosmos/protobuf) to generate code for use in Cosmos-SDK. For determinstic behavior around Protobuf tooling, everything is containerized using Docker. Make sure to have Docker installed on your machine, or head to [Docker's website](https://docs.docker.com/get-docker/) to install it. diff --git a/Makefile b/Makefile index 8416d659ef..60538d911d 100644 --- a/Makefile +++ b/Makefile @@ -466,8 +466,8 @@ proto-all: proto-update-deps proto-format proto-lint proto-check-breaking proto- proto-checks: proto-update-deps proto-lint proto-check-breaking proto-check-breaking-third-party proto-regen: proto-format proto-gen update-swagger-docs -containerProtoVer=v0.2 -containerProtoImage=tendermintdev/sdk-proto-gen:$(containerProtoVer) +containerProtoVer=0.14.0 +containerProtoImage=ghcr.io/cosmos/proto-builder:$(containerProtoVer) containerProtoGen=prov-proto-gen-$(containerProtoVer) containerProtoGenSwagger=prov-proto-gen-swagger-$(containerProtoVer) containerProtoFmt=prov-proto-fmt-$(containerProtoVer) @@ -487,12 +487,6 @@ proto-gen: mv .go.mod.bak go.mod go mod tidy -# This generates the SDK's custom wrapper for google.protobuf.Any. It should only be run manually when needed -proto-gen-any: - @echo "Generating Protobuf Any" - $(DOCKER) run --rm -v $(CURDIR):/workspace --workdir /workspace $(containerProtoImage) sh ./scripts/protocgen-any.sh - go mod tidy - proto-swagger-gen: @echo "Generating Protobuf Swagger" if docker ps -a --format '{{.Names}}' | grep -Eq "^${containerProtoGenSwagger}$$"; then \ @@ -537,7 +531,7 @@ proto-update-deps: @echo "Updating Protobuf files" sh ./scripts/proto-update-deps.sh -.PHONY: proto-all proto-checks proto-regen proto-gen proto-format proto-gen-any proto-lint proto-check-breaking proto-check-breaking-third-party proto-update-deps proto-update-check +.PHONY: proto-all proto-checks proto-regen proto-gen proto-format proto-lint proto-check-breaking proto-check-breaking-third-party proto-update-deps proto-update-check ############################## diff --git a/app/app.go b/app/app.go index 2a89c804d4..534a24b8fc 100644 --- a/app/app.go +++ b/app/app.go @@ -34,9 +34,10 @@ import ( upgradekeeper "cosmossdk.io/x/upgrade/keeper" upgradetypes "cosmossdk.io/x/upgrade/types" - // icq "github.com/cosmos/ibc-apps/modules/async-icq/v7" // TODO[1760]: async-icq - // icqkeeper "github.com/cosmos/ibc-apps/modules/async-icq/v7/keeper" // TODO[1760]: async-icq - // icqtypes "github.com/cosmos/ibc-apps/modules/async-icq/v7/types" // TODO[1760]: async-icq + icq "github.com/cosmos/ibc-apps/modules/async-icq/v8" + icqkeeper "github.com/cosmos/ibc-apps/modules/async-icq/v8/keeper" + icqtypes "github.com/cosmos/ibc-apps/modules/async-icq/v8/types" + // "github.com/cosmos/cosmos-sdk/x/quarantine" // TODO[1760]: quarantine // quarantinekeeper "github.com/cosmos/cosmos-sdk/x/quarantine/keeper" // TODO[1760]: quarantine // quarantinemodule "github.com/cosmos/cosmos-sdk/x/quarantine/module" // TODO[1760]: quarantine @@ -60,7 +61,9 @@ import ( "github.com/cosmos/cosmos-sdk/version" "github.com/cosmos/cosmos-sdk/x/auth" "github.com/cosmos/cosmos-sdk/x/auth/ante" + authcodec "github.com/cosmos/cosmos-sdk/x/auth/codec" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" + authsims "github.com/cosmos/cosmos-sdk/x/auth/simulation" authtx "github.com/cosmos/cosmos-sdk/x/auth/tx" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "github.com/cosmos/cosmos-sdk/x/auth/vesting" @@ -71,6 +74,9 @@ import ( "github.com/cosmos/cosmos-sdk/x/bank" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + "github.com/cosmos/cosmos-sdk/x/consensus" + consensusparamkeeper "github.com/cosmos/cosmos-sdk/x/consensus/keeper" + consensusparamtypes "github.com/cosmos/cosmos-sdk/x/consensus/types" "github.com/cosmos/cosmos-sdk/x/crisis" crisiskeeper "github.com/cosmos/cosmos-sdk/x/crisis/keeper" crisistypes "github.com/cosmos/cosmos-sdk/x/crisis/types" @@ -107,7 +113,7 @@ import ( capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" ica "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts" - // icahost "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/host" // TODO[1760]: msg-service-router + icahost "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/host" icahostkeeper "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/host/keeper" icahosttypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/host/types" icatypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/types" @@ -117,7 +123,9 @@ import ( ibc "github.com/cosmos/ibc-go/v8/modules/core" ibcclient "github.com/cosmos/ibc-go/v8/modules/core/02-client" ibcclienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + ibcconnectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types" + ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper" ibctestingtypes "github.com/cosmos/ibc-go/v8/testing/types" @@ -209,11 +217,12 @@ var ( vesting.AppModuleBasic{}, // quarantinemodule.AppModuleBasic{}, // TODO[1760]: quarantine // sanctionmodule.AppModuleBasic{}, // TODO[1760]: sanction + consensus.AppModuleBasic{}, ibc.AppModuleBasic{}, ibctransfer.AppModuleBasic{}, ica.AppModuleBasic{}, - // icq.AppModuleBasic{}, // TODO[1760]: async-icq + icq.AppModuleBasic{}, ibchooks.AppModuleBasic{}, ibcratelimitmodule.AppModuleBasic{}, @@ -245,7 +254,7 @@ var ( attributetypes.ModuleName: nil, markertypes.ModuleName: {authtypes.Minter, authtypes.Burner}, - wasm.ModuleName: {authtypes.Burner}, + wasmtypes.ModuleName: {authtypes.Burner}, rewardtypes.ModuleName: nil, triggertypes.ModuleName: nil, oracletypes.ModuleName: nil, @@ -260,7 +269,7 @@ var ( // WasmWrapper allows us to use namespacing in the config file // This is only used for parsing in the app, x/wasm expects WasmConfig type WasmWrapper struct { - Wasm wasm.Config `mapstructure:"wasm"` + Wasm wasmtypes.WasmConfig `mapstructure:"wasm"` } // SdkCoinDenomRegex returns a new sdk base denom regex string @@ -289,13 +298,13 @@ type App struct { AccountKeeper authkeeper.AccountKeeper BankKeeper bankkeeper.Keeper CapabilityKeeper *capabilitykeeper.Keeper - StakingKeeper stakingkeeper.Keeper + StakingKeeper *stakingkeeper.Keeper SlashingKeeper slashingkeeper.Keeper MintKeeper mintkeeper.Keeper DistrKeeper distrkeeper.Keeper GovKeeper govkeeper.Keeper - CrisisKeeper crisiskeeper.Keeper - UpgradeKeeper upgradekeeper.Keeper + CrisisKeeper *crisiskeeper.Keeper + UpgradeKeeper *upgradekeeper.Keeper ParamsKeeper paramskeeper.Keeper AuthzKeeper authzkeeper.Keeper GroupKeeper groupkeeper.Keeper @@ -305,14 +314,15 @@ type App struct { RewardKeeper rewardkeeper.Keeper // QuarantineKeeper quarantinekeeper.Keeper // TODO[1760]: quarantine // SanctionKeeper sanctionkeeper.Keeper // TODO[1760]: sanction - TriggerKeeper triggerkeeper.Keeper - OracleKeeper oraclekeeper.Keeper - - IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly - IBCHooksKeeper *ibchookskeeper.Keeper - ICAHostKeeper *icahostkeeper.Keeper - TransferKeeper *ibctransferkeeper.Keeper - // ICQKeeper icqkeeper.Keeper // TODO[1760]: async-icq + TriggerKeeper triggerkeeper.Keeper + OracleKeeper oraclekeeper.Keeper + ConsensusParamsKeeper consensusparamkeeper.Keeper + + IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly + IBCHooksKeeper *ibchookskeeper.Keeper + ICAHostKeeper *icahostkeeper.Keeper + TransferKeeper *ibctransferkeeper.Keeper + ICQKeeper icqkeeper.Keeper RateLimitingKeeper *ibcratelimitkeeper.Keeper MarkerKeeper markerkeeper.Keeper @@ -321,7 +331,7 @@ type App struct { NameKeeper namekeeper.Keeper HoldKeeper holdkeeper.Keeper ExchangeKeeper exchangekeeper.Keeper - WasmKeeper *wasm.Keeper + WasmKeeper *wasmkeeper.Keeper ContractKeeper *wasmkeeper.PermissionedKeeper // make scoped keepers public for test purposes @@ -374,9 +384,7 @@ func New( interfaceRegistry := encodingConfig.InterfaceRegistry bApp := baseapp.NewBaseApp("provenanced", logger, db, encodingConfig.TxConfig.TxDecoder(), baseAppOptions...) - // TODO[1760]: msg-service-router: Switch back to the PioMsgServiceRouter. - // bApp.SetMsgServiceRouter(piohandlers.NewPioMsgServiceRouter(encodingConfig.TxConfig.TxDecoder())) - bApp.SetMsgServiceRouter(baseapp.NewMsgServiceRouter()) // TODO[1760]: msg-service-router: delete this line. + bApp.SetMsgServiceRouter(piohandlers.NewPioMsgServiceRouter(encodingConfig.TxConfig.TxDecoder())) bApp.SetCommitMultiStoreTracer(traceStore) bApp.SetVersion(version.Version) bApp.SetInterfaceRegistry(interfaceRegistry) @@ -385,14 +393,14 @@ func New( keys := storetypes.NewKVStoreKeys( authtypes.StoreKey, banktypes.StoreKey, stakingtypes.StoreKey, minttypes.StoreKey, distrtypes.StoreKey, slashingtypes.StoreKey, - govtypes.StoreKey, paramstypes.StoreKey, upgradetypes.StoreKey, feegrant.StoreKey, + govtypes.StoreKey, consensusparamtypes.StoreKey, paramstypes.StoreKey, upgradetypes.StoreKey, feegrant.StoreKey, evidencetypes.StoreKey, capabilitytypes.StoreKey, - authzkeeper.StoreKey, group.StoreKey, + authzkeeper.StoreKey, group.StoreKey, crisistypes.StoreKey, - // ibchost.StoreKey, // TODO[1760]: ibc-host + ibcexported.StoreKey, ibctransfertypes.StoreKey, icahosttypes.StoreKey, - // icqtypes.StoreKey, // TODO[1760]: async-icq + icqtypes.StoreKey, ibchookstypes.StoreKey, ibcratelimit.StoreKey, @@ -401,7 +409,7 @@ func New( attributetypes.StoreKey, nametypes.StoreKey, msgfeestypes.StoreKey, - wasm.StoreKey, + wasmtypes.StoreKey, rewardtypes.StoreKey, // quarantine.StoreKey, // TODO[1760]: quarantine // sanction.StoreKey, // TODO[1760]: sanction @@ -435,63 +443,64 @@ func New( app.ParamsKeeper = initParamsKeeper(appCodec, legacyAmino, keys[paramstypes.StoreKey], tkeys[paramstypes.TStoreKey]) // set the BaseApp's parameter store - // bApp.SetParamStore(app.ParamsKeeper.Subspace(baseapp.Paramspace).WithKeyTable(paramstypes.ConsensusParamsKeyTable())) // TODO[1760]: params + // TODO[1760]: Update upgrade handler + app.ConsensusParamsKeeper = consensusparamkeeper.NewKeeper( + appCodec, + runtime.NewKVStoreService(keys[consensusparamtypes.StoreKey]), + govAuthority, + runtime.EventService{}, + ) + bApp.SetParamStore(app.ConsensusParamsKeeper.ParamsStore) // add capability keeper and ScopeToModule for ibc module app.CapabilityKeeper = capabilitykeeper.NewKeeper(appCodec, keys[capabilitytypes.StoreKey], memKeys[capabilitytypes.MemStoreKey]) // grant capabilities for the ibc and ibc-transfer modules - scopedIBCKeeper := app.CapabilityKeeper.ScopeToModule("ibc") // TODO[1760]: ibc-host: was ibchost.ModuleName + scopedIBCKeeper := app.CapabilityKeeper.ScopeToModule(ibcexported.ModuleName) scopedTransferKeeper := app.CapabilityKeeper.ScopeToModule(ibctransfertypes.ModuleName) - scopedWasmKeeper := app.CapabilityKeeper.ScopeToModule(wasm.ModuleName) + scopedWasmKeeper := app.CapabilityKeeper.ScopeToModule(wasmtypes.ModuleName) scopedICAHostKeeper := app.CapabilityKeeper.ScopeToModule(icahosttypes.SubModuleName) - // scopedICQKeeper := app.CapabilityKeeper.ScopeToModule(icqtypes.ModuleName) // TODO[1760]: async-icq + scopedICQKeeper := app.CapabilityKeeper.ScopeToModule(icqtypes.ModuleName) scopedOracleKeeper := app.CapabilityKeeper.ScopeToModule(oracletypes.ModuleName) // capability keeper must be sealed after scope to module registrations are completed. app.CapabilityKeeper.Seal() + // Obtain prefixes so running tests can use "cosmos" while we use "pb" + addrPrefix := sdk.GetConfig().GetBech32AccountAddrPrefix() + valAddrPrefix := sdk.GetConfig().GetBech32ValidatorAddrPrefix() + consAddrPrefix := sdk.GetConfig().GetBech32ConsensusAddrPrefix() + // add keepers - // TODO[1760]: account: Put back this call to NewAccountKeeper with fixed arguments. - // app.AccountKeeper = authkeeper.NewAccountKeeper( - // appCodec, keys[authtypes.StoreKey], app.GetSubspace(authtypes.ModuleName), - // authtypes.ProtoBaseAccount, maccPerms, AccountAddressPrefix, - // ) - - // TODO[1760]: bank: Put back this call to NewBaseKeeper with fixed arguments. - // app.BankKeeper = bankkeeper.NewBaseKeeper( - // appCodec, keys[banktypes.StoreKey], app.AccountKeeper, app.GetSubspace(banktypes.ModuleName), app.ModuleAccountAddrs(), - // ) - // TODO[1760]: staking: Put back this call to NewKeeper with fixed arguments. - // stakingKeeper := stakingkeeper.NewKeeper( - // appCodec, keys[stakingtypes.StoreKey], app.AccountKeeper, app.BankKeeper, app.GetSubspace(stakingtypes.ModuleName), - // ) - // TODO[1760]: mint: Put back this call to NewKeeper with fixed arguments. - // app.MintKeeper = mintkeeper.NewKeeper( - // appCodec, keys[minttypes.StoreKey], app.GetSubspace(minttypes.ModuleName), &stakingKeeper, - // app.AccountKeeper, app.BankKeeper, authtypes.FeeCollectorName, - // ) - // TODO[1760]: distr: Put back this call to NewKeeper with fixed arguments. - // app.DistrKeeper = distrkeeper.NewKeeper( - // appCodec, keys[distrtypes.StoreKey], app.GetSubspace(distrtypes.ModuleName), app.AccountKeeper, app.BankKeeper, - // &stakingKeeper, authtypes.FeeCollectorName, - // ) - // TODO[1760]: slashing: Put back this call to NewKeeper with fixed arguments. - // app.SlashingKeeper = slashingkeeper.NewKeeper( - // appCodec, keys[slashingtypes.StoreKey], &stakingKeeper, app.GetSubspace(slashingtypes.ModuleName), - // ) - // TODO[1760]: crisis: Put back this call to NewKeeper with fixed arguments. - // app.CrisisKeeper = crisiskeeper.NewKeeper( - // app.GetSubspace(crisistypes.ModuleName), invCheckPeriod, app.BankKeeper, authtypes.FeeCollectorName, - // ) - - // TODO[1760]: feegrant: Put back this call to NewKeeper with fixed arguments. - // app.FeeGrantKeeper = feegrantkeeper.NewKeeper(appCodec, keys[feegrant.StoreKey], app.AccountKeeper) - // TODO[1760]: upgrade: Put back this call to NewKeeper with fixed arguments. - // app.UpgradeKeeper = upgradekeeper.NewKeeper( - // skipUpgradeHeights, keys[upgradetypes.StoreKey], appCodec, homePath, app.BaseApp, - // authtypes.NewModuleAddress(govtypes.ModuleName).String(), - // ) + app.AccountKeeper = authkeeper.NewAccountKeeper(appCodec, runtime.NewKVStoreService(keys[authtypes.StoreKey]), authtypes.ProtoBaseAccount, maccPerms, authcodec.NewBech32Codec(addrPrefix), addrPrefix, govAuthority) + + app.BankKeeper = bankkeeper.NewBaseKeeper( + appCodec, + runtime.NewKVStoreService(keys[banktypes.StoreKey]), + app.AccountKeeper, + app.ModuleAccountAddrs(), + govAuthority, + logger, + ) + + app.StakingKeeper = stakingkeeper.NewKeeper( + appCodec, runtime.NewKVStoreService(keys[stakingtypes.StoreKey]), app.AccountKeeper, app.BankKeeper, govAuthority, authcodec.NewBech32Codec(valAddrPrefix), authcodec.NewBech32Codec(consAddrPrefix), + ) + + app.MintKeeper = mintkeeper.NewKeeper(appCodec, runtime.NewKVStoreService(keys[minttypes.StoreKey]), app.StakingKeeper, app.AccountKeeper, app.BankKeeper, authtypes.FeeCollectorName, govAuthority) + + app.DistrKeeper = distrkeeper.NewKeeper(appCodec, runtime.NewKVStoreService(keys[distrtypes.StoreKey]), app.AccountKeeper, app.BankKeeper, app.StakingKeeper, authtypes.FeeCollectorName, govAuthority) + + app.SlashingKeeper = slashingkeeper.NewKeeper( + appCodec, legacyAmino, runtime.NewKVStoreService(keys[slashingtypes.StoreKey]), app.StakingKeeper, govAuthority, + ) + + app.CrisisKeeper = crisiskeeper.NewKeeper(appCodec, runtime.NewKVStoreService(keys[crisistypes.StoreKey]), app.invCheckPeriod, + app.BankKeeper, authtypes.FeeCollectorName, govAuthority, app.AccountKeeper.AddressCodec()) + + app.FeeGrantKeeper = feegrantkeeper.NewKeeper(appCodec, runtime.NewKVStoreService(keys[feegrant.StoreKey]), app.AccountKeeper) + + app.UpgradeKeeper = upgradekeeper.NewKeeper(skipUpgradeHeights, runtime.NewKVStoreService(keys[upgradetypes.StoreKey]), appCodec, homePath, app.BaseApp, govAuthority) app.MsgFeesKeeper = msgfeeskeeper.NewKeeper( appCodec, keys[msgfeestypes.StoreKey], app.GetSubspace(msgfeestypes.ModuleName), @@ -499,31 +508,25 @@ func New( app.Simulate, encodingConfig.TxConfig.TxDecoder(), interfaceRegistry, ) - // pioMsgFeesRouter := app.MsgServiceRouter().(*piohandlers.PioMsgServiceRouter) // TODO[1760]: msg-service-router - // pioMsgFeesRouter.SetMsgFeesKeeper(app.MsgFeesKeeper) // TODO[1760]: msg-service-router + pioMsgFeesRouter := app.MsgServiceRouter().(*piohandlers.PioMsgServiceRouter) + pioMsgFeesRouter.SetMsgFeesKeeper(app.MsgFeesKeeper) // NOTE: stakingKeeper above is passed by reference, so that it will contain these hooks - restrictHooks := piohandlers.NewStakingRestrictionHooks(&app.StakingKeeper, *piohandlers.DefaultRestrictionOptions) - // TODO[1760]: staking: Put back this call to SetHooks once we have the staking keeper again. - _ = restrictHooks - // app.StakingKeeper = *stakingKeeper.SetHooks( - // stakingtypes.NewMultiStakingHooks(restrictHooks, app.DistrKeeper.Hooks(), app.SlashingKeeper.Hooks()), - // ) + restrictHooks := piohandlers.NewStakingRestrictionHooks(app.StakingKeeper, *piohandlers.DefaultRestrictionOptions) + app.StakingKeeper.SetHooks( + stakingtypes.NewMultiStakingHooks(restrictHooks, app.DistrKeeper.Hooks(), app.SlashingKeeper.Hooks()), + ) app.RewardKeeper = rewardkeeper.NewKeeper(appCodec, keys[rewardtypes.StoreKey], app.StakingKeeper, &app.GovKeeper, app.BankKeeper, app.AccountKeeper) - // TODO[1760]: authz: Put back this call to NewKeeper with fixed arguments. - // app.AuthzKeeper = authzkeeper.NewKeeper( - // keys[authzkeeper.StoreKey], appCodec, app.BaseApp.MsgServiceRouter(), app.AccountKeeper, - // ) + app.AuthzKeeper = authzkeeper.NewKeeper(runtime.NewKVStoreService(keys[authzkeeper.StoreKey]), appCodec, app.BaseApp.MsgServiceRouter(), app.AccountKeeper) app.GroupKeeper = groupkeeper.NewKeeper(keys[group.StoreKey], appCodec, app.BaseApp.MsgServiceRouter(), app.AccountKeeper, group.DefaultConfig()) // Create IBC Keeper - // TODO[1760]: ibc-host: Put back this call to NewKeeper with fixed arguments. - // app.IBCKeeper = ibckeeper.NewKeeper( - // appCodec, keys[ibchost.StoreKey], app.GetSubspace(ibchost.ModuleName), app.StakingKeeper, app.UpgradeKeeper, scopedIBCKeeper, - // ) + app.IBCKeeper = ibckeeper.NewKeeper( + appCodec, keys[ibcexported.StoreKey], app.GetSubspace(ibcexported.ModuleName), app.StakingKeeper, app.UpgradeKeeper, scopedIBCKeeper, govAuthority, + ) // Configure the hooks keeper hooksKeeper := ibchookskeeper.NewKeeper( @@ -535,7 +538,6 @@ func New( app.IBCHooksKeeper = &hooksKeeper // Setup the ICS4Wrapper used by the hooks middleware - addrPrefix := sdk.GetConfig().GetBech32AccountAddrPrefix() // We use this approach so running tests which use "cosmos" will work while we use "pb" wasmHooks := ibchooks.NewWasmHooks(&hooksKeeper, nil, addrPrefix) // The contract keeper needs to be set later app.Ics20WasmHooks = &wasmHooks markerHooks := ibchooks.NewMarkerHooks(nil) @@ -607,35 +609,31 @@ func New( app.AccountKeeper, app.AttributeKeeper, app.BankKeeper, app.HoldKeeper, app.MarkerKeeper, ) - // TODO[1760]: msg-service-router: Put the pioMessageRouter back into use (and the ica host module back in). - /* - pioMessageRouter := MessageRouterFunc(func(msg sdk.Msg) baseapp.MsgServiceHandler { - return pioMsgFeesRouter.Handler(msg) - }) - app.TriggerKeeper = triggerkeeper.NewKeeper(appCodec, keys[triggertypes.StoreKey], app.MsgServiceRouter()) - icaHostKeeper := icahostkeeper.NewKeeper( - appCodec, keys[icahosttypes.StoreKey], app.GetSubspace(icahosttypes.SubModuleName), - app.IBCKeeper.ChannelKeeper, app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper, - app.AccountKeeper, scopedICAHostKeeper, pioMessageRouter, - ) - app.ICAHostKeeper = &icaHostKeeper - icaModule := ica.NewAppModule(nil, app.ICAHostKeeper) - icaHostIBCModule := icahost.NewIBCModule(*app.ICAHostKeeper) - */ - - // TODO[1760]: async-icq - // app.ICQKeeper = icqkeeper.NewKeeper( - // appCodec, keys[icqtypes.StoreKey], app.GetSubspace(icqtypes.ModuleName), - // app.IBCKeeper.ChannelKeeper, app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper, - // scopedICQKeeper, app.BaseApp.GRPCQueryRouter(), - //) - // icqModule := icq.NewAppModule(app.ICQKeeper) - // icqIBCModule := icq.NewIBCModule(app.ICQKeeper) + pioMessageRouter := MessageRouterFunc(func(msg sdk.Msg) baseapp.MsgServiceHandler { + return pioMsgFeesRouter.Handler(msg) + }) + app.TriggerKeeper = triggerkeeper.NewKeeper(appCodec, keys[triggertypes.StoreKey], app.MsgServiceRouter()) + icaHostKeeper := icahostkeeper.NewKeeper( + appCodec, keys[icahosttypes.StoreKey], app.GetSubspace(icahosttypes.SubModuleName), + app.IBCKeeper.ChannelKeeper, app.IBCKeeper.ChannelKeeper, app.IBCKeeper.PortKeeper, + app.AccountKeeper, scopedICAHostKeeper, pioMessageRouter, govAuthority, + ) + app.ICAHostKeeper = &icaHostKeeper + icaModule := ica.NewAppModule(nil, app.ICAHostKeeper) + icaHostIBCModule := icahost.NewIBCModule(*app.ICAHostKeeper) + + app.ICQKeeper = icqkeeper.NewKeeper( + appCodec, keys[icqtypes.StoreKey], + app.IBCKeeper.ChannelKeeper, app.IBCKeeper.ChannelKeeper, app.IBCKeeper.PortKeeper, + scopedICQKeeper, app.BaseApp.GRPCQueryRouter(), govAuthority, + ) + icqModule := icq.NewAppModule(app.ICQKeeper, app.GetSubspace(icqtypes.ModuleName)) + icqIBCModule := icq.NewIBCModule(app.ICQKeeper) // Init CosmWasm module wasmDir := filepath.Join(homePath, "data", "wasm") - wasmWrap := WasmWrapper{Wasm: wasm.DefaultWasmConfig()} + wasmWrap := WasmWrapper{Wasm: wasmtypes.DefaultWasmConfig()} err := viper.Unmarshal(&wasmWrap) if err != nil { panic("error while reading wasm config: " + err.Error()) @@ -663,33 +661,28 @@ func New( // The last arguments contain custom message handlers, and custom query handlers, // to allow smart contracts to use provenance modules. - // TODO[1760]: wasm: Figure out the replacement for NewKeeper. - _, _ = scopedWasmKeeper, supportedFeatures - _, _ = wasmDir, wasmConfig - /* - wasmKeeperInstance := wasm.NewKeeper( - appCodec, - keys[wasm.StoreKey], - app.GetSubspace(wasm.ModuleName), - app.AccountKeeper, - app.BankKeeper, - app.StakingKeeper, - app.DistrKeeper, - app.IBCKeeper.ChannelKeeper, - &app.IBCKeeper.PortKeeper, - scopedWasmKeeper, - app.TransferKeeper, - // pioMessageRouter, // TODO[1760]: msg-service-router - app.GRPCQueryRouter(), - wasmDir, - wasmConfig, - supportedFeatures, - authtypes.NewModuleAddress(govtypes.ModuleName).String(), - wasmkeeper.WithQueryPlugins(provwasm.QueryPlugins(querierRegistry, *app.GRPCQueryRouter(), appCodec)), - wasmkeeper.WithMessageEncoders(provwasm.MessageEncoders(encoderRegistry, logger)), - ) - app.WasmKeeper = &wasmKeeperInstance - */ + wasmKeeperInstance := wasmkeeper.NewKeeper( + appCodec, + runtime.NewKVStoreService(keys[wasmtypes.StoreKey]), + app.AccountKeeper, + app.BankKeeper, + app.StakingKeeper, + distrkeeper.NewQuerier(app.DistrKeeper), + app.IBCKeeper.ChannelKeeper, + app.IBCKeeper.ChannelKeeper, + app.IBCKeeper.PortKeeper, + scopedWasmKeeper, + app.TransferKeeper, + pioMessageRouter, + app.GRPCQueryRouter(), + wasmDir, + wasmConfig, + supportedFeatures, + govAuthority, + wasmkeeper.WithQueryPlugins(provwasm.QueryPlugins(querierRegistry, *app.GRPCQueryRouter(), appCodec)), + wasmkeeper.WithMessageEncoders(provwasm.MessageEncoders(encoderRegistry, logger)), + ) + app.WasmKeeper = &wasmKeeperInstance // Pass the wasm keeper to all the wrappers that need it app.ContractKeeper = wasmkeeper.NewDefaultPermissionKeeper(app.WasmKeeper) @@ -721,7 +714,7 @@ func New( // unsanctionableAddrs = append(unsanctionableAddrs, authtypes.NewModuleAddress(quarantine.ModuleName)) // app.SanctionKeeper = sanctionkeeper.NewKeeper(appCodec, keys[sanction.StoreKey], // app.BankKeeper, &app.GovKeeper, - // authtypes.NewModuleAddress(govtypes.ModuleName).String(), unsanctionableAddrs) + // govAuthority, unsanctionableAddrs) // register the proposal types govRouter := govtypesv1beta1.NewRouter() @@ -732,30 +725,37 @@ func New( AddRoute(nametypes.ModuleName, name.NewProposalHandler(app.NameKeeper)). AddRoute(markertypes.ModuleName, marker.NewProposalHandler(app.MarkerKeeper)). AddRoute(msgfeestypes.ModuleName, msgfees.NewProposalHandler(app.MsgFeesKeeper, app.InterfaceRegistry())) - // TODO[1760]: gov: Put back this call to NewKeeper with fixed arguments. - // app.GovKeeper = govkeeper.NewKeeper( - // appCodec, keys[govtypes.StoreKey], app.GetSubspace(govtypes.ModuleName), app.AccountKeeper, app.BankKeeper, - // &stakingKeeper, govRouter, app.BaseApp.MsgServiceRouter(), govtypes.Config{MaxMetadataLen: 10000}, - // ) - // app.GovKeeper.SetHooks(govtypes.NewMultiGovHooks(app.SanctionKeeper)) // TODO[1760]: sanction + govKeeper := govkeeper.NewKeeper( + appCodec, runtime.NewKVStoreService(keys[govtypes.StoreKey]), app.AccountKeeper, app.BankKeeper, + app.StakingKeeper, app.DistrKeeper, app.BaseApp.MsgServiceRouter(), govtypes.Config{MaxMetadataLen: 10000}, govAuthority, + ) + app.GovKeeper = *govKeeper.SetHooks( + govtypes.NewMultiGovHooks( + // app.SanctionKeeper // TODO[1760]: sanction + ), + ) // Create static IBC router, add transfer route, then set and seal it ibcRouter := porttypes.NewRouter() ibcRouter. AddRoute(ibctransfertypes.ModuleName, app.TransferStack). - AddRoute(wasm.ModuleName, wasm.NewIBCHandler(app.WasmKeeper, app.IBCKeeper.ChannelKeeper, app.IBCKeeper.ChannelKeeper)). - // AddRoute(icahosttypes.SubModuleName, icaHostIBCModule). // TODO[1760]: ica-host - // AddRoute(icqtypes.ModuleName, icqIBCModule). // TODO[1760]: async-icq + AddRoute(wasmtypes.ModuleName, wasm.NewIBCHandler(app.WasmKeeper, app.IBCKeeper.ChannelKeeper, app.IBCKeeper.ChannelKeeper)). + AddRoute(icahosttypes.SubModuleName, icaHostIBCModule). + AddRoute(icqtypes.ModuleName, icqIBCModule). AddRoute(oracletypes.ModuleName, oracleModule) app.IBCKeeper.SetRouter(ibcRouter) // Create evidence Keeper for to register the IBC light client misbehavior evidence route - // TODO[1760]: evidence: Put back this call to NewKeeper with fixed arguments. - // evidenceKeeper := evidencekeeper.NewKeeper( - // appCodec, keys[evidencetypes.StoreKey], &app.StakingKeeper, app.SlashingKeeper, - // ) + evidenceKeeper := evidencekeeper.NewKeeper( + appCodec, + runtime.NewKVStoreService(keys[evidencetypes.StoreKey]), + app.StakingKeeper, + app.SlashingKeeper, + app.AccountKeeper.AddressCodec(), + runtime.ProvideCometInfoService(), + ) // If evidence needs to be handled for the app, set routes in router here and seal - // app.EvidenceKeeper = *evidenceKeeper // TODO[1760]: evidence + app.EvidenceKeeper = *evidenceKeeper // app.QuarantineKeeper = quarantinekeeper.NewKeeper(appCodec, keys[quarantine.StoreKey], app.BankKeeper, authtypes.NewModuleAddress(quarantine.ModuleName)) // TODO[1760]: quarantine @@ -764,29 +764,28 @@ func New( // NOTE: we may consider parsing `appOpts` inside module constructors. For the moment // we prefer to be more strict in what arguments the modules expect. var skipGenesisInvariants = cast.ToBool(appOpts.Get(crisis.FlagSkipGenesisInvariants)) - _ = skipGenesisInvariants // TODO[1760]: crisis // NOTE: Any module instantiated in the module manager that is later modified // must be passed by reference here. - app.mm = module.NewManager( genutil.NewAppModule(app.AccountKeeper, app.StakingKeeper, app.BaseApp, encodingConfig.TxConfig), - // auth.NewAppModule(appCodec, app.AccountKeeper, nil), // TODO[1760]: auth + auth.NewAppModule(appCodec, app.AccountKeeper, nil, app.GetSubspace(authtypes.ModuleName)), vesting.NewAppModule(app.AccountKeeper, app.BankKeeper), - // bank.NewAppModule(appCodec, app.BankKeeper, app.AccountKeeper), // TODO[1760]: bank - // capability.NewAppModule(appCodec, *app.CapabilityKeeper), // TODO[1760]: capability - // crisis.NewAppModule(&app.CrisisKeeper, skipGenesisInvariants), // TODO[1760]: crisis + bank.NewAppModule(appCodec, app.BankKeeper, app.AccountKeeper, app.GetSubspace(banktypes.ModuleName)), + capability.NewAppModule(appCodec, *app.CapabilityKeeper, false), + crisis.NewAppModule(app.CrisisKeeper, skipGenesisInvariants, app.GetSubspace(crisistypes.ModuleName)), feegrantmodule.NewAppModule(appCodec, app.AccountKeeper, app.BankKeeper, app.FeeGrantKeeper, app.interfaceRegistry), - // gov.NewAppModule(appCodec, app.GovKeeper, app.AccountKeeper, app.BankKeeper), // TODO[1760]: gov - // mint.NewAppModule(appCodec, app.MintKeeper, app.AccountKeeper, nil), // TODO[1760]: mint - // slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper), // TODO[1760]: slashing - // distr.NewAppModule(appCodec, app.DistrKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper), // TODO[1760]: distr - // staking.NewAppModule(appCodec, app.StakingKeeper, app.AccountKeeper, app.BankKeeper), // TODO[1760]: staking - // upgrade.NewAppModule(app.UpgradeKeeper), // TODO[1760]: upgrade + gov.NewAppModule(appCodec, &app.GovKeeper, app.AccountKeeper, app.BankKeeper, app.GetSubspace(govtypes.ModuleName)), + mint.NewAppModule(appCodec, app.MintKeeper, app.AccountKeeper, nil, app.GetSubspace(minttypes.ModuleName)), + slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper, app.GetSubspace(slashingtypes.ModuleName), app.interfaceRegistry), + distr.NewAppModule(appCodec, app.DistrKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper, app.GetSubspace(distrtypes.ModuleName)), + staking.NewAppModule(appCodec, app.StakingKeeper, app.AccountKeeper, app.BankKeeper, app.GetSubspace(stakingtypes.ModuleName)), + upgrade.NewAppModule(app.UpgradeKeeper, app.AccountKeeper.AddressCodec()), evidence.NewAppModule(app.EvidenceKeeper), params.NewAppModule(app.ParamsKeeper), authzmodule.NewAppModule(appCodec, app.AuthzKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry), groupmodule.NewAppModule(appCodec, app.GroupKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry), + consensus.NewAppModule(appCodec, app.ConsensusParamsKeeper), // quarantinemodule.NewAppModule(appCodec, app.QuarantineKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry), // TODO[1760]: quarantine // sanctionmodule.NewAppModule(appCodec, app.SanctionKeeper, app.AccountKeeper, app.BankKeeper, app.GovKeeper, app.interfaceRegistry), // TODO[1760]: sanction @@ -796,7 +795,7 @@ func New( name.NewAppModule(appCodec, app.NameKeeper, app.AccountKeeper, app.BankKeeper), attribute.NewAppModule(appCodec, app.AttributeKeeper, app.AccountKeeper, app.BankKeeper, app.NameKeeper), msgfeesmodule.NewAppModule(appCodec, app.MsgFeesKeeper, app.interfaceRegistry), - // wasm.NewAppModule(appCodec, app.WasmKeeper, app.StakingKeeper, app.AccountKeeper, app.BankKeeper), // TODO[1760]: wasm + wasm.NewAppModule(appCodec, app.WasmKeeper, app.StakingKeeper, app.AccountKeeper, app.BankKeeper, nil, app.GetSubspace(wasmtypes.ModuleName)), // TODO[1760]: Need to pass message router instead of nil rewardmodule.NewAppModule(appCodec, app.RewardKeeper, app.AccountKeeper, app.BankKeeper), triggermodule.NewAppModule(appCodec, app.TriggerKeeper, app.AccountKeeper, app.BankKeeper), oracleModule, @@ -808,8 +807,8 @@ func New( ibcratelimitmodule.NewAppModule(appCodec, *app.RateLimitingKeeper, app.AccountKeeper, app.BankKeeper), ibchooks.NewAppModule(app.AccountKeeper, *app.IBCHooksKeeper), ibctransfer.NewAppModule(*app.TransferKeeper), - // icqModule, // TODO[1760]: async-icq - // icaModule, // TODO[1760]: ica-host + icqModule, + icaModule, ) // TODO[1760]: app-module: BasicModuleManager: Make sure that this setup has everything we need (it was just copied from the SDK). @@ -817,18 +816,20 @@ func New( // non-dependant module elements, such as codec registration and genesis verification. // By default it is composed of all the module from the module manager. // Additionally, app module basics can be overwritten by passing them as argument. - app.BasicModuleManager = module.NewBasicManagerFromManager( - app.mm, - map[string]module.AppModuleBasic{ - genutiltypes.ModuleName: genutil.NewAppModuleBasic(genutiltypes.DefaultMessageValidator), - govtypes.ModuleName: gov.NewAppModuleBasic( - []govclient.ProposalHandler{ - paramsclient.ProposalHandler, - }, - ), - }) - app.BasicModuleManager.RegisterLegacyAminoCodec(legacyAmino) - app.BasicModuleManager.RegisterInterfaces(interfaceRegistry) + /* + app.BasicModuleManager = module.NewBasicManagerFromManager( + app.mm, + map[string]module.AppModuleBasic{ + genutiltypes.ModuleName: genutil.NewAppModuleBasic(genutiltypes.DefaultMessageValidator), + govtypes.ModuleName: gov.NewAppModuleBasic( + []govclient.ProposalHandler{ + paramsclient.ProposalHandler, + }, + ), + }) + app.BasicModuleManager.RegisterLegacyAminoCodec(legacyAmino) + app.BasicModuleManager.RegisterInterfaces(interfaceRegistry) + */ // NOTE: upgrade module is required to be prioritized app.mm.SetOrderPreBlockers( @@ -846,7 +847,7 @@ func New( slashingtypes.ModuleName, evidencetypes.ModuleName, stakingtypes.ModuleName, - // ibchost.ModuleName, // TODO[1760]: ibc-host + ibcexported.ModuleName, markertypes.ModuleName, icatypes.ModuleName, attributetypes.ModuleName, @@ -866,17 +867,18 @@ func New( msgfeestypes.ModuleName, metadatatypes.ModuleName, oracletypes.ModuleName, - wasm.ModuleName, + wasmtypes.ModuleName, ibcratelimit.ModuleName, ibchookstypes.ModuleName, ibctransfertypes.ModuleName, - // icqtypes.ModuleName, // TODO[1760]: async-icq + icqtypes.ModuleName, nametypes.ModuleName, vestingtypes.ModuleName, // quarantine.ModuleName, // TODO[1760]: quarantine // sanction.ModuleName, // TODO[1760]: sanction hold.ModuleName, exchange.ModuleName, + consensusparamtypes.ModuleName, ) app.mm.SetOrderEndBlockers( @@ -897,13 +899,13 @@ func New( oracletypes.ModuleName, nametypes.ModuleName, genutiltypes.ModuleName, - // ibchost.ModuleName, // TODO[1760]: ibc-host + ibcexported.ModuleName, ibcratelimit.ModuleName, ibchookstypes.ModuleName, ibctransfertypes.ModuleName, - // icqtypes.ModuleName, // TODO[1760]: async-icq + icqtypes.ModuleName, msgfeestypes.ModuleName, - wasm.ModuleName, + wasmtypes.ModuleName, slashingtypes.ModuleName, upgradetypes.ModuleName, attributetypes.ModuleName, @@ -918,6 +920,7 @@ func New( // sanction.ModuleName, // TODO[1760]: sanction hold.ModuleName, exchange.ModuleName, + consensusparamtypes.ModuleName, ) // NOTE: The genutils module must occur after staking so that pools are @@ -951,14 +954,14 @@ func New( hold.ModuleName, exchange.ModuleName, // must be after the hold module. - // ibchost.ModuleName, // TODO[1760]: ibc-host + ibcexported.ModuleName, ibctransfertypes.ModuleName, - // icqtypes.ModuleName, // TODO[1760]: async-icq + icqtypes.ModuleName, icatypes.ModuleName, ibcratelimit.ModuleName, ibchookstypes.ModuleName, // wasm after ibc transfer - wasm.ModuleName, + wasmtypes.ModuleName, rewardtypes.ModuleName, triggertypes.ModuleName, oracletypes.ModuleName, @@ -967,6 +970,7 @@ func New( paramstypes.ModuleName, vestingtypes.ModuleName, upgradetypes.ModuleName, + consensusparamtypes.ModuleName, ) app.mm.SetOrderMigrations( @@ -980,7 +984,7 @@ func New( feegrant.ModuleName, genutiltypes.ModuleName, govtypes.ModuleName, - // ibchost.ModuleName, // TODO[1760]: ibc-host + ibcexported.ModuleName, minttypes.ModuleName, paramstypes.ModuleName, slashingtypes.ModuleName, @@ -992,12 +996,13 @@ func New( // sanction.ModuleName, // TODO[1760]: sanction hold.ModuleName, exchange.ModuleName, + consensusparamtypes.ModuleName, // TODO[1760]: Is this the correct placement? ibcratelimit.ModuleName, ibchookstypes.ModuleName, icatypes.ModuleName, - // icqtypes.ModuleName, // TODO[1760]: async-icq - wasm.ModuleName, + icqtypes.ModuleName, + wasmtypes.ModuleName, attributetypes.ModuleName, markertypes.ModuleName, @@ -1012,20 +1017,20 @@ func New( authtypes.ModuleName, ) - app.mm.RegisterInvariants(&app.CrisisKeeper) + app.mm.RegisterInvariants(app.CrisisKeeper) app.configurator = module.NewConfigurator(app.appCodec, app.BaseApp.MsgServiceRouter(), app.GRPCQueryRouter()) app.mm.RegisterServices(app.configurator) app.sm = module.NewSimulationManager( - // auth.NewAppModule(appCodec, app.AccountKeeper, authsims.RandomGenesisAccounts), // TODO[1760]: auth - // bank.NewAppModule(appCodec, app.BankKeeper, app.AccountKeeper), // TODO[1760]: bank - // capability.NewAppModule(appCodec, *app.CapabilityKeeper), // TODO[1760]: capability + auth.NewAppModule(appCodec, app.AccountKeeper, authsims.RandomGenesisAccounts, app.GetSubspace(authtypes.ModuleName)), + bank.NewAppModule(appCodec, app.BankKeeper, app.AccountKeeper, app.GetSubspace(banktypes.ModuleName)), + capability.NewAppModule(appCodec, *app.CapabilityKeeper, false), feegrantmodule.NewAppModule(appCodec, app.AccountKeeper, app.BankKeeper, app.FeeGrantKeeper, app.interfaceRegistry), - // gov.NewAppModule(appCodec, app.GovKeeper, app.AccountKeeper, app.BankKeeper), // TODO[1760]: gov - // mint.NewAppModule(appCodec, app.MintKeeper, app.AccountKeeper, nil), // TODO[1760]: mint - // staking.NewAppModule(appCodec, app.StakingKeeper, app.AccountKeeper, app.BankKeeper), // TODO[1760]: staking - // distr.NewAppModule(appCodec, app.DistrKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper), // TODO[1760]: distr - // slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper), // TODO[1760]: slashing + gov.NewAppModule(appCodec, &app.GovKeeper, app.AccountKeeper, app.BankKeeper, app.GetSubspace(govtypes.ModuleName)), + mint.NewAppModule(appCodec, app.MintKeeper, app.AccountKeeper, nil, app.GetSubspace(minttypes.ModuleName)), + staking.NewAppModule(appCodec, app.StakingKeeper, app.AccountKeeper, app.BankKeeper, app.GetSubspace(stakingtypes.ModuleName)), + distr.NewAppModule(appCodec, app.DistrKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper, app.GetSubspace(distrtypes.ModuleName)), + slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper, app.GetSubspace(slashingtypes.ModuleName), app.interfaceRegistry), params.NewAppModule(app.ParamsKeeper), evidence.NewAppModule(app.EvidenceKeeper), authzmodule.NewAppModule(appCodec, app.AuthzKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry), @@ -1043,14 +1048,14 @@ func New( oraclemodule.NewAppModule(appCodec, app.OracleKeeper, app.AccountKeeper, app.BankKeeper, app.IBCKeeper.ChannelKeeper), holdmodule.NewAppModule(appCodec, app.HoldKeeper), exchangemodule.NewAppModule(appCodec, app.ExchangeKeeper), - provwasm.NewWrapper(appCodec, app.WasmKeeper, app.StakingKeeper, app.AccountKeeper, app.BankKeeper, app.NameKeeper), + provwasm.NewWrapper(appCodec, app.WasmKeeper, app.StakingKeeper, app.AccountKeeper, app.BankKeeper, app.NameKeeper, nil, app.GetSubspace(wasmtypes.ModuleName)), // TODO[1760]: Need to pass router instead of nil // IBC ibc.NewAppModule(app.IBCKeeper), ibcratelimitmodule.NewAppModule(appCodec, *app.RateLimitingKeeper, app.AccountKeeper, app.BankKeeper), ibchooks.NewAppModule(app.AccountKeeper, *app.IBCHooksKeeper), ibctransfer.NewAppModule(*app.TransferKeeper), - // icaModule, // TODO[1760]: ica-host + icaModule, ) app.sm.RegisterStoreDecoders() @@ -1078,25 +1083,24 @@ func New( } app.SetAnteHandler(anteHandler) - // TODO[1760]: fee-handler: Add the msgfeehandler back to the app. - /* - msgFeeHandler, err := piohandlers.NewAdditionalMsgFeeHandler(piohandlers.PioBaseAppKeeperOptions{ - AccountKeeper: app.AccountKeeper, - BankKeeper: app.BankKeeper, - FeegrantKeeper: app.FeeGrantKeeper, - MsgFeesKeeper: app.MsgFeesKeeper, - Decoder: encodingConfig.TxConfig.TxDecoder(), - }) - if err != nil { - panic(err) - } - app.SetFeeHandler(msgFeeHandler) - */ + msgFeeHandler, err := piohandlers.NewAdditionalMsgFeeHandler(piohandlers.PioBaseAppKeeperOptions{ + AccountKeeper: app.AccountKeeper, + BankKeeper: app.BankKeeper, + FeegrantKeeper: app.FeeGrantKeeper, + MsgFeesKeeper: app.MsgFeesKeeper, + Decoder: encodingConfig.TxConfig.TxDecoder(), + }) + + if err != nil { + panic(err) + } + + app.SetFeeHandler(msgFeeHandler) app.SetEndBlocker(app.EndBlocker) - // app.SetAggregateEventsFunc(piohandlers.AggregateEvents) // TODO[1760]: event-history + app.SetAggregateEventsFunc(piohandlers.AggregateEvents) // TODO[1760]: event-history // Add upgrade plans for each release. This must be done before the baseapp seals via LoadLatestVersion() down below. InstallCustomUpgradeHandlers(app) @@ -1139,7 +1143,7 @@ func New( app.ScopedIBCKeeper = scopedIBCKeeper app.ScopedTransferKeeper = scopedTransferKeeper - // app.ScopedICQKeeper = scopedICQKeeper // TODO[1760]: async-icq + app.ScopedICQKeeper = scopedICQKeeper app.ScopedICAHostKeeper = scopedICAHostKeeper return app @@ -1236,7 +1240,8 @@ func (app *App) InterfaceRegistry() types.InterfaceRegistry { // DefaultGenesis returns a default genesis from the registered AppModuleBasic's. func (a *App) DefaultGenesis() map[string]json.RawMessage { - return a.BasicModuleManager.DefaultGenesis(a.appCodec) + // TODO[1760] This was changed to ModuleBasics, but it will be removed + return ModuleBasics.DefaultGenesis(a.appCodec) } // GetKey returns the KVStoreKey for the provided store key. @@ -1378,15 +1383,18 @@ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino paramsKeeper.Subspace(nametypes.ModuleName) // TODO[1760]: params: Migrate name params. paramsKeeper.Subspace(attributetypes.ModuleName) // TODO[1760]: params: Migrate attribute params. paramsKeeper.Subspace(msgfeestypes.ModuleName) // TODO[1760]: params: Migrate msgFees params. - paramsKeeper.Subspace(wasm.ModuleName) + paramsKeeper.Subspace(wasmtypes.ModuleName) paramsKeeper.Subspace(rewardtypes.ModuleName) // TODO[1760]: params: Migrate reward params. paramsKeeper.Subspace(triggertypes.ModuleName) // TODO[1760]: params: Migrate trigger params. + // register the key tables for legacy param subspaces + keyTable := ibcclienttypes.ParamKeyTable() + keyTable.RegisterParamSet(&ibcconnectiontypes.Params{}) paramsKeeper.Subspace(ibctransfertypes.ModuleName) // TODO[1760]: params: Migrate ibc-transfer params. - // paramsKeeper.Subspace(ibchost.ModuleName) // TODO[1760]: params: Migrate ibc-host params. - paramsKeeper.Subspace(icahosttypes.SubModuleName) // TODO[1760]: params: Migrate ica-host params. - // paramsKeeper.Subspace(icqtypes.ModuleName) // TODO[1760]: params: Migrate icq params. - paramsKeeper.Subspace(ibchookstypes.ModuleName) // TODO[1760]: params: Migrate ibc-hooks params. + paramsKeeper.Subspace(ibcexported.ModuleName) // TODO[1760]: params: Migrate ibc-host params. + paramsKeeper.Subspace(icahosttypes.SubModuleName) // TODO[1760]: params: Migrate ica-host params. + paramsKeeper.Subspace(icqtypes.ModuleName) // TODO[1760]: params: Migrate icq params. + paramsKeeper.Subspace(ibchookstypes.ModuleName) // TODO[1760]: params: Migrate ibc-hooks params. return paramsKeeper } diff --git a/app/encoding.go b/app/encoding.go index 042ff18e26..7eaf6c0f5a 100644 --- a/app/encoding.go +++ b/app/encoding.go @@ -14,6 +14,7 @@ func MakeEncodingConfig() params.EncodingConfig { encodingConfig := params.MakeTestEncodingConfig() std.RegisterLegacyAminoCodec(encodingConfig.Amino) std.RegisterInterfaces(encodingConfig.InterfaceRegistry) + ModuleBasics.RegisterLegacyAminoCodec(encodingConfig.Amino) ModuleBasics.RegisterInterfaces(encodingConfig.InterfaceRegistry) return encodingConfig diff --git a/app/export.go b/app/export.go index 995608898b..0eea77d93e 100644 --- a/app/export.go +++ b/app/export.go @@ -64,7 +64,7 @@ func (app *App) ExportAppStateAndValidators(forZeroHeight bool, jailAllowedAddrs return servertypes.ExportedApp{}, err } - validators, err := staking.WriteValidators(ctx, &app.StakingKeeper) + validators, err := staking.WriteValidators(ctx, app.StakingKeeper) return servertypes.ExportedApp{ AppState: appState, Validators: validators, diff --git a/app/sim_test.go b/app/sim_test.go index ee921dea17..c40ff33d44 100644 --- a/app/sim_test.go +++ b/app/sim_test.go @@ -24,7 +24,7 @@ import ( storetypes "cosmossdk.io/store/types" evidencetypes "cosmossdk.io/x/evidence/types" - // icqtypes "github.com/cosmos/ibc-apps/modules/async-icq/v7/types" // TODO[1760]: async-icq + icqtypes "github.com/cosmos/ibc-apps/modules/async-icq/v8/types" // "github.com/cosmos/cosmos-sdk/x/quarantine" // TODO[1760]: quarantine // "github.com/cosmos/cosmos-sdk/x/sanction" // TODO[1760]: sanction @@ -107,16 +107,15 @@ func appStateWithICQ(appState json.RawMessage, cdc codec.JSONCodec) json.RawMess if err != nil { panic(fmt.Sprintf("error unmarshalling appstate: %v", err)) } - // TODO[1760]: async-icq - // icqGenJSON, icqGenFound := rawState[icqtypes.ModuleName] - // if !icqGenFound || len(icqGenJSON) == 0 { - // icqGenState := icqtypes.DefaultGenesis() - // rawState[icqtypes.ModuleName] = cdc.MustMarshalJSON(icqGenState) - // appState, err = json.Marshal(rawState) - // if err != nil { - // panic(fmt.Sprintf("error marshalling appstate: %v", err)) - // } - // } + icqGenJSON, icqGenFound := rawState[icqtypes.ModuleName] + if !icqGenFound || len(icqGenJSON) == 0 { + icqGenState := icqtypes.DefaultGenesis() + rawState[icqtypes.ModuleName] = cdc.MustMarshalJSON(icqGenState) + appState, err = json.Marshal(rawState) + if err != nil { + panic(fmt.Sprintf("error marshalling appstate: %v", err)) + } + } return appState } diff --git a/app/test_helpers.go b/app/test_helpers.go index 2ebf75193f..ce9508c446 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -231,7 +231,7 @@ func genesisStateWithValSet(t *testing.T, MinSelfDelegation: sdkmath.ZeroInt(), } validators = append(validators, validator) - delegations = append(delegations, stakingtypes.NewDelegation(genAccs[0].GetAddress().String(), val.Address.String(), sdkmath.LegacyOneDec())) + delegations = append(delegations, stakingtypes.NewDelegation(genAccs[0].GetAddress().String(), sdk.ValAddress(val.Address).String(), sdkmath.LegacyOneDec())) } // set validators and delegations diff --git a/app/upgrades.go b/app/upgrades.go index 99ce8a1dd8..85fef1e7f6 100644 --- a/app/upgrades.go +++ b/app/upgrades.go @@ -9,7 +9,7 @@ import ( storetypes "cosmossdk.io/store/types" upgradetypes "cosmossdk.io/x/upgrade/types" - // icqtypes "github.com/cosmos/ibc-apps/modules/async-icq/v7/types" // TODO[1760]: async-icq + icqtypes "github.com/cosmos/ibc-apps/modules/async-icq/v8/types" "github.com/cosmos/cosmos-sdk/baseapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -125,7 +125,7 @@ var upgrades = map[string]appUpgrade{ return vm, nil }, - Added: []string{ /* icqtypes.ModuleName, // TODO[1760]: async-icq */ oracletypes.ModuleName, ibchookstypes.StoreKey, hold.ModuleName, exchange.ModuleName}, + Added: []string{icqtypes.ModuleName, oracletypes.ModuleName, ibchookstypes.StoreKey, hold.ModuleName, exchange.ModuleName}, }, "saffron-rc2": { // upgrade for v1.17.0-rc2 Handler: func(ctx sdk.Context, app *App, vm module.VersionMap) (module.VersionMap, error) { @@ -175,7 +175,7 @@ var upgrades = map[string]appUpgrade{ return vm, nil }, - Added: []string{ /* icqtypes.ModuleName, // TODO[1760]: async-icq */ oracletypes.ModuleName, ibchookstypes.StoreKey, hold.ModuleName, exchange.ModuleName}, + Added: []string{icqtypes.ModuleName, oracletypes.ModuleName, ibchookstypes.StoreKey, hold.ModuleName, exchange.ModuleName}, }, "tourmaline-rc1": { // upgrade for v1.18.0-rc1 Added: []string{ibcratelimit.ModuleName}, @@ -450,7 +450,7 @@ func setAccountDataNameRecord(ctx sdk.Context, accountK attributetypes.AccountKe // TODO: Remove with the saffron handlers. func setupICQ(ctx sdk.Context, app *App) { ctx.Logger().Info("Updating ICQ params") - // app.ICQKeeper.SetParams(ctx, icqtypes.NewParams(true, []string{"/provenance.oracle.v1.Query/Oracle"})) // TODO[1760]: async-icq + app.ICQKeeper.SetParams(ctx, icqtypes.NewParams(true, []string{"/provenance.oracle.v1.Query/Oracle"})) ctx.Logger().Info("Done updating ICQ params") } diff --git a/buf.gen.proto.yaml b/buf.gen.proto.yaml new file mode 100644 index 0000000000..9dc83cf615 --- /dev/null +++ b/buf.gen.proto.yaml @@ -0,0 +1,13 @@ +version: v1 + +plugins: + + - name: gocosmos + out: . + opt: + - plugins=interfacetype+grpc + + - name: grpc-gateway + out: . + opt: + - logtostderr=true \ No newline at end of file diff --git a/client/docs/statik/statik.go b/client/docs/statik/statik.go index 8c63d27034..75c9bd5acc 100644 --- a/client/docs/statik/statik.go +++ b/client/docs/statik/statik.go @@ -8,6 +8,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\x9cT]k\xdc:\x10}\xdf_1Q\x1e\x92\\\"\xfb&\x81p\xf1\xb5\xfd\x90\xa6\xa5\x81\x94\x06\x92}(\xa5\x14\xd9\x1a{\xa7\x91\xa5E\x92\xf7#!\xff\xbdX\xf6\xae\xb7\xdd\x90BYX\x8f\xe7\x9c9\x1a\x1d\x8d\x9c\x1ep\x0e\x1f\x1f>\xddBe,8/<\x95 \xc9yKE\xeb\xc9h(Z-\x15B\xd1\x92\x92\xc0y>I\x0f\xae?\xbf{\xf8r\xf7\x1ef\xbeQ\xf9$\xed\x1e\xa0\x84\xae3\x86\x9a\xe5\x13\x80t\x86Bv\x01@\xda\xa0\x17P\xce\x84u\xe836}\xf8\xc0\xffc\x03\xe4\xc9+\xcc\xef\x97\xa2\xae\xd1\xc2\xf4&\x8d\xfbL\x8f*\xd2\x8f`Qe\xcc\xf9\xb5B7C\xf4\x0c\xfcz\x8e\x19\xf3\xb8\xf2q\xe9\x1c\x83\x99\xc5*c\xae\xd7\xe0-E!\xbb'A\xa5\xd1\x9bbjD\x8d\xf1\\\xd7\x9b\xeaJ,:\x9c_\x9c\xaf.\xce\xa3\x008zB\x97\xb1\x90a\x10\xff\x9d\xde\xd9\xe5\xea\xec\xf2\x17\xbd\x90\x19\xf5\xc2\xc6\xfa\x18\x82\x9bC\xf8<<\x01\n\xb3\xe2\x8e\x9eH\xd7 \x14\xc6J\xb4\xbc0\xab\xff\xb7\xb8Y\xa0\xad\x94Y&\xc0\x1b\xf3\xc4]i\x8dR\x85\xb0\x8e/\xd0z*\x85\xda\xe7\xf2u\x02=q\x83\xbdL\x86\xe0\x9f\xd3M\x90\x14X\x19\x8b\xe3\xbb\xa8<\xda7\xfb#=CK~O\xb40r\xbdW\xd8\x08[\x93N\xfe\x1d\xdb+D\xf9X[\xd3j\x99\xc0a%\xba\xdf(\xd5\xfd\xa7\xf1\xd6\xaf4\xee'\xac\x0b;\xf9\xc1OI\x0b \xb9;\x0e,OcI\x8b|2\x18^Z\x9a{p\xb6\xdc%\xf1~\xc6\xa3\x1f\x8e\xe5\xdd*\x81\x94\xbfY\xe1\xbc\xd0R(\xa3\x91\xcf-:\xf4o\x14\xf7/K\xd2\xd2,#\xa3\x95\x11\x122\xa8Z]v\x17\xec\xf8\x04\x9e7N\xc51\\\x85{&\xc0\xad\x9d\xc7f\xc8\x97F;\x0f-A\x06\xc3m\x99\xde\\\x85\x9e\x8fGG[\xab\x12`Q\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\x14\x00 \x00swagger-ui-bundle.jsUT\x05\x00\x01\x80Cm8\xec\xfdyw\xdb6\xf68\x8c\xff\xffy\x15\xd7\xfa\xf6\x9b!kZ\xb1\x9d\xa5\xad\x13\xc5\x93\xc5m\xb3g\xe2\xa4\xcb\xa8\x1a\x1fZ\x82,6\x14\xa8\x90\x90m\xb5\xf2\xef\xb5\xff\x0e.\x00\x12$\x01\x10r\xdc\x99\xf9<\xcf\xc3s\xdaX\\\xb0\\\\\\\xdc\xfdn\xc1tI\xc7,\xc9h@\"`!\xfc\xf9?\x00\x00\xbd\xec\xf4w2f=\x18\x0c\x80\xad\x16$\x9b\x02\xb9\\d9+\xe0\xd6-\xd3\xd3y6Y\xa6\x04\x0e\xe5\x1f}\xf5\xf6\x00X\x10\xc2\x01\xf4T7\xfaG\x132M(\xe1-\x8a\xbf\xfa\xf1|\x02\x87\xf2G0\x1c\xe1\x80\x0e\\\x839T\x7f\xf5\x8f/\xe2\xb33\x92\x7f|\xfedI'));&\xe6'\xffs\x15\xb0YRD\xd5\xf4\xd5\xd4s\xc2\x969\xd5\xc0\xa2\x1e\xf0\xeb<\xce\x81\xc1\x00\xfe\xbcz\xf0?\xe5M\xf5*\xd0 \xd7_\xe6W2\x85\x80\x0d\xf3Q\xa8\xda\xe5?\x14t\x1e\xd4^\xe5mg|t\xc3|\xc4\xbb\xa8=\xc4\xb6\x0e \x8fZw\xd3\x03\xd8\xdak\xdf\x96]\x1c\xc0\x9fW\xb5gW\xf5N\xe5\xa8\x08\x1f\xd58N\xd3 S\x83\x8b \x8b@\xfbEC\xfe3\x85\x01l\xedj\x0f\xca\xd6\xaand\x9b\xb4?\x87\x01\x90\x08h\x7f\xcc\xa7\xc5\xff\x98\xc0\xa0\x8ep\x11\xb4@F\xfb\x99\xc4\xc5\xf5\x1a\xde\xe2\xd2\xf7\x05J\xbc\xcb\xb3\x05\xc9\xd9J~\xd9\x86\xd08\xa3\xd3\xe4l\x99\xc7\xa7)\xb1\x80\x85.\xe7D=\xdfm??#\xec\x00\xf2:\xc4\xc2j\x8e|\x0e\xb46\x87\xe6\xe8\x15\x86 Z\x93\xfe\xc9 )^\xab\xbd\xd1\xc25\xfdR+\xc1\xe7\x1a/SV\x1f\x03\x1c\xf8}\xed\xb1\xd6\xb4? X\x04\xbd\xb8\xc7\x81\x1c\x01\xabO/k.Q\xb3;\xd9\x8c\\\x99E\x9e\xb1\x8c\xef\xca\xfe,.\xde^P\xb5F\x02\x9b\xf0\xfbz\xfb\x0b\x18@\xef\xf6$)X/\x02\x1a\xd0>'\x12w\xef\xde\x13\xaf]\x05\xc3\x06~P\xbd\xff\xde\xb2 P\xb0<\x19\xb3^59\x9d\xdc\xd0\xe0\x1b\xd5T\xd4D\xb5ZS\xf5\x8f\xbe\xbdw'\x0c\xbc\xbe3\x0f\x81\xe9+-\xb6\x08S+\xd9\x05PN#\xb6\x02\x02 -XL\xc7\x9c\xbe\xb10\x046\xcb\xb3\x0b\xa0\xe4\x02>\xac\x16\xe4(\xcf\xb3<\xe8=\x8d)\xcd\x18p\xe0B\x0c\xe34.\n\x88\x0b\x88\xcb\x1ezacG\xde\xcct\xaaG\x1c\xc1\xf3\x08)\x15\x0d\xf6\xef\xef\x87\xf5M\x94\xc0\x00\x82\x1c\x06\x90\x85|\x07\xe4\xf5\x1d\x90\xc3\x81\x01y%\x9cZ\x1bO\x1f\x8f\x01\x96M8\x96t\x98\x18\xc1\x8c\xafd9\x04|\x06|\x13\xef>\x00\n\x0f\x81\xf5SB\xcf\xd8\xec\x01\xd0\xedm\xd3G\xa0f\x8d\xc4\x99\x8e\x1e\x18\xdf\xc8\xfb\x15m\x81A\xfd\xe7z\xcd\x89\x11\xe4}\x9d@I4\xe9\x9d\xc7\xe9\x92\xf4 \xa1\x90s\x88\x05y\xff\"OX\xf9F\x18A\xb0\x1bA\xa2 \x10\xf2\xc9\xe5\xfdOd\xc5igk(\x0djo\xda\xb9%\x009.\x18\x08\xb0\xf6*E*\x16h\xdb\\\x1c\x04\xb9\xbc\xcf\xbf\xd6)H\xbd\xcf+\xbf\x1d\xa5\xef\xc4\xfaHJ\xc4\xa0\xc17\xf7\xef70\xadB,N\xca\xff\x9dX\x7f\xf7\xde\x7f\x0e\xe9\xad\x04\x84\xe8\x14\xe3=\x99\x92\x9c\xd0\xb1\"\x1b\x9c\xd7\x81Y\\\xd0\xbf18%\x84BB\x13\x96\xc4iR\x90 \xec@\xb1\\\x90<\x08kop\x12C&\xbd\xd0x\x86l1\x8e\xd3%c\xb65\x18@p\x9e%\x13\xd8\x85\x01\xe7\xd2\xe0\x10zK*N\xedI\x0f\x0e\x9a(\xcc\xe9\x1bg$+\xaep\xab\xe4\xed\xf8\xc7\x04\x0e\xf4s\xe9\xaf[R\x18@\x1cp\xec\xfa6l\xaci&\x1f\xdd\xb9\xfb]\xf3Q\"\x1f\xdd\xbd\x17\x86&>0n\xb3\x05\xea|6p\x05\xc4\x8d\x1e\xc4\xb6\xb9\xae\x87'\x16\x90\xdf\xba\x05t\x99\xa6\xb8\x92\xccr\xf6\x1cs,\xe1\x8ceN\x8a\x82\xcfs\xbe,\x18\x90\x84\xcdH\x0e\xa7D4\x90\xe5\xdaa\x14\x01?\xacz\xb0\xbd1v4\xd0\x8eT\x04\x88o5d@\xab\xd7\xf9\xe8k$\xca\xc8\x19\x16,_\x8eY\x96\x9b\xa0\x0d\x88\x0f\xe9\x92\x1c\x00i3\x85\xd0d\x1c\x0d\x8c%\xbf\x14\xdd6\xb3\x96\xd0fPw[/5\xc87'\xae\xf2PPk|\x88\xd3\xcfk\xc7\x01\x13\x92\xce\xc9 \xc2\xe0\xe4\x84\x1fT\x1b\xf2\x01\xb8\x1b*\xa0\xe7\xae\x83\xd6\xbc\xd5T+|\x85\x1e\xe7y\xbc\xd2x\xc3\"M\xc6D\xdb*\xa0o\x17f=\xae\xc5\xdc\xeb\x8b/\xf9\xceqNbV;\x99\xc20\xd2\xf1\xa4\xaf-9\xe7\xc7\x1b\xdb\xc8<\x14\x03C\x0f\xd5\xee\xc5}-6\xec\x8b\x80\x84^-\xe6\xce\x16\x97U\x8b\xbf\xfa\xb6\x989[,\xaa\x16_\xfa\xb6\x98t\xcf\xfa\xd6-\xd8J\xab\xa6\x7f\xf0m\xda@\n\xb5\xa6\xb7\x82-\xc1\x1c\x91\xe1t\xe4\xd7\xe0\xd2\xb7\xc1\x85g\x83\x85o\x83\x13\xcf\x06\xd3\xee\x15_\xaf\xb1[\xaf\xe6\xc6\xbe\xe3\x9b\xb5\xc6\xa7\xffbA.X7\x16d\xea\x8fD\xfcA\xfbI\xf1\x9c\x95\x9ck,\xee\xbc$+\xc2\xc5\xf5\xa5|\x81N\xc8%\xde(\xc4\x8d\xc7E\x91\x8d\x93\x98%\xe7\xfc\xa3T\xdc|\x9bOH\x8eo\x8d\xf9\x0d\xd5\x06\xef\xba_\xb5\xc0\x07\xd0?&\xfc\xbcJ\xda\xf4c\xca\x05\xc4\xbf\xff\xfd\xe4\xe4\xf9\xeb\xd7\x1f?<~\xf2\xea\xe8\xe4\xf9\x87\xa3\xf7\xf8\xc7\xc9\xdf\xff\xdekS\xd6E\xfb\x8b\x97G\xbf\x1e=\xb3\xbc>1t\xf0\xe6\xd9\xd1/\xd6\x0ff\xed\x0f\xde\xbe\x7fv\xf4\xde\xfa\xc19\x0c\xe0^\xfb\xf6\x1c\x06\xb0\x07\x0f\x1f\xc2\xb9A\xf1\x00\x03\x98\xc3\x0e\x18\x8e\x96\x15*\x9c\xda\xf7O\x8dZ\"\xa8\x8e\xb2\xad\xbd\xd6SC3'\xd7i\xc6F\xcb/\x9c\xd8J\xfa\xd8$g\xc4\xf6\"O\x92|dn\x91\xc8\xa3\xa1lp\xd7o;]\xf2\xd3\xcc\xf6\xf0\xd8q\x12q\xbee\xbd\x86\xdd\xb6\xf4W\x13*_\xc7l\xd6\x9f\xc7\x97\xfc\x90&R\xb2\x84\x1dT\xb4\xf0c\x88\xb3Tx8\x06\xa8O\x13Rh\x06\x0f\x81>\x80\x8c\x8b\x9f\xf90\x1b\xf1\xe3j\x98\xc160\x83\xac)A\x99{\xcd\xf6\xa9s94\x9e\x8c\xf4\x8b\xe4\x0f\x05S\xfcs\x80\x0cE\xc2\xe9\x02#\xc1cq\xba\xf2'^\x1d\x7f\xb2B\x12\x99P\xba\x9c\x9f\x92\xbc\xc6\x82\xba$o\x8a\xd0\x7f\xf4\xe8\x91 \xfc\xa0\x1a\xe5|&\x15\x1c,_\xa9\xbb\xfb\xdf\xdd\xfd\xee\xfe7\xfb\xdf\xdd\xc3\x19\xd2R\x05\xfb&~cn\x85/2m\xe3\xba\x0d|\x0c\x1e\xc2.\x1c\n o\x03\xab\xc9,\xe0\x00\xcec\x97\n\xaf\xc1\x14\xda\xdaxkb\xe2\x1aM\x05rm94\xe4Zs\xe8\x08\xa1\x1e\x1e\x0e`\x87\xe2\xc9^g\xce\x0d/3x\xc4\x01\xe85\xb0w\xd6\x95\x97\xa3z-G\xee\xb9a?\xf8\xb6\xc7\xfc\xda{\xed\x018}c\xc0!P\xce]\xcb\xc5\xd6\xf77\x83m \x9c\xf5n\x087\x9cC\x12\xef%\xa8di\x9d\xf4\xfa/\x8e\xdf\xcf9\x1dhS\xe6\xdf\xf9y\xd1\xbe\xfd\x06\x06\xb0\xdf\xbe\xfd\x9e\x9fR\x95tW\x19K\x8eW\xf3\xd3,\xe5\xeb(\xfe\xea\x8bM\x9d\x19\x8c \xcf\xc4I\xa7^0\x1cm\xaf`\x00\xef9\x8e<\xb3\x1d\x01\x1f\xcd4\x87\xcd\x92\xa2O\xc9%\xf3f\xc6?\xab\x95\xb2\xe8\xa8\x94\xc1\xa4Z(\xbe\x05\xf7j\xcb6\xe4\xdf;\xa8(\x1cB^\x9e!\x19\x1c \x91v\x9e\x86\x99Y\xb2\x9bd\xd4v\xe2z\xd2\xea\xef]T\xc19$\x81~\xcequJ\x9a\x96A\xfd\xe1\xe6>\xb7~\xf4ec\x9f\xb8\x19\x83\x866H\xb3\xf4!\xcexu\xf1\x93\xb9\x0be\x91\xe1C\xb5\"\x82\xd4!\x08\xa3\x85\xdf\x8c~tw'\x0e\xd3\xf7Hk\x87\xefG|\xcb\x90\xe1\xb3\x91a\x08\x0d\xb5\xcc@?\x13\xd5\xf0\xbcF\xf4\xb3\x07\x8c\xd5\xc9\xabCXp)^]\xbcpv\x81\x1a\xa0\xe6\x91\xa3\xb6cB\xd0 \xab\x84\xe8>\xcb\x8e\xc9g\xbc\xa5Z7\xb7\x0d\x1aP\x0b\"\xc5'\x93M\x18\x95X\xe4\x02\x181\xae4(M\xa9M\xbfut\xb9 cF&\x82A\x83,\x87DIE\xa27\xc8\xa6b\xcb\x15\x11\x7f\xfa \xa5\x1b\xf1\xe8\x00\xb5\\\xb6n\x8d\xab\xc8\xaf+_d\xfb\xf5\xcb\xe0\xdeg\x19\xcab\n\xe2r\x11\x96\xed\xb5 \xfdi\x9e\xcd\x8f(\xcbW\xe5\xcb\xc4w\x94/\xbfl\x94\x86\x81\x11} |\x9cR\x8aT\xb7\x96\xdec\xfb\xc19\xb6\xe0\xcb\x07\xa7F\x13\"4\x19\xdeo\x8cL\xff\xf5QSU\xb1\xec\x98\xe5 =s)\xdd\xb4\xc1\xf6\x86\xcf\xe5\x01=\xea\xd5{\x88\xe0c\xff\xe5\xd1\xaf\xc70\x80\xe7\xfc\xef\x9f\x1e\xbf\xfax\xc4\x7f\xfd\xce\x7f\x1d\xbd\xf9\xf0\xfe9\xfe|\x13\xd5\xfaOh\xc1Q\x1f\x06\xcdQe\xcb|Le\xf2\xd9\xb3M\xd3\xd8^\\\x7fQ\x11|''%\x00{|$\x7f\xf6\"\xe8]\xf5\x9cc\x1e\xc7\xe3\x19yO\x8a\x0e\xeb\xa8\xd6\xd5\x96\xe8\x0b?\xc4sOt-e\xbd\x8f\x14\x1fL\xf0\xfc\xd2\xdf\x1c\x88\x17+\xac\xef\xb3L\xc8\xb2a$\x1eI\xc1Q\xfbH\x9e-\xf2\x05\xd74\xca\xfe\xbb\xac\x18\xdaDR\"\xbdx\x04\xa3\xd8\xd2\x01\x98{\xc8\xf2\x0d\xba\x18wv\xc1\x82_#x\x11F\xf0km\xf1\x15\xbd\xf5\\\x133\xa6\xbf\x14-\xbf\xf4\xc7\xf4\x97\x0eL\x7fY\x1b`EI=\x9b6\x0d\xf1\xe5\x0d#\xfc\x90#\xfc\xa8\x8d\xf0/o\x18S\xf6\xbcz\xf8\"Liw\xc1\x82\x1f\xc4z\xfe\xe0\xbf\x9e?8\xd6\xf3\x87\x06\xe5b_\xb6\x96/\xfaI!Z\xc8\x08\xff\xa5\xb4\xb7\x1c\xbd\xa5\xba\x96\x8f_S\xe4\xbelko\xbf\x8a\xe0\x9f\x11\xfc\x12\xc1?\xdaJ\xd3\xe3\xa3\x7f\xa0\xc2\xd4&9\x12\xe2\x10\x1dOb\xe4\xca\xd0\xa3L'6\x1b\xb1\xaf\xcc\xd2\x83\xe2/\xa5q\xe9\x13Y\x15F\x1eR\x8cDr\x83\xd5PN\xf8\x07\xc2\xc7\xadF\x077\x19\x1auN>\xa9\xf4\xf3\x96\xf9\xa3\x80\xe1\xaf\xa0\xcb\xbb\xbb\x93\x86\xb3\xa8q\xef\xa9<\x0c\x86#\xaf\x8e2KG\xea,\xaa\x0c\x18\xff\xf04\xb0 7fm\xf0+\xdeZ\xf0\x95\xd4\xb5\x12\x12\x0cG\xa1_\xbbq\x07r\x08\xa3fR\x883\x0fy@\xd9\x05 \xdb\\\xf3\x93\xea\x8d\xdc\xfc\xc6\x1f\xd5\x1b\xd4\xfc\x86Q\xca9\xac\x84\x9cR\xf5d\x16*\xbfL\xd2\x19~\x8a\xe0|\x04\xfc\xb8O6\x92x6\x92Y\x97\x1d@/\xcc\xc2\xdc\x97OO\x08r74\x8b\xc2\x8d\xe4?7\xb0\xc5\x80\x1e\x06|(W\xd7k\x08)\xf1T\x97\x11\xc9\x9a\x99\x81\x9a\xd9D\xf0\xd2\xca\x91\xf0\x03\xa2\xb2l\xecE\x10\x0b3F\x0c\x0f\x07\x90<\x80\xd8\xeeF\x07r\x1cK\xde\xc6\x90r\xd1\nv \xe6\xb2\x95\xc5\xad\x0e\xd4b\x0b\xbd\x1e\x0b\x96\xc3\xbdQ\x84\x8a\xbb\xe5pw\xc4\xbf\x8c\x80\x84\xa5\xa6$\x86mh+\xe1\xa0%~\xa9K}\xd6zhU\xfb\x936\xab\x8c\x9et~Df\xfc\x17/\x93q\x85\xac\x90\x15+\xe7\x02\x0c\xc7\xc6\x8f\x81\x93\xa5P\x97r\xfe\xf0_X\x05\xfc\xedmx\x04 \x1c:\x1a\x07?u\xa7\xba\xacjOu]\xc1\x01|F\x07F.\xcaKL\x12\xe8L\x86{\x8d\x93\xa8\xfc\xa8}\xdb\x03M\xb2\xfc\x1ax2\xb5;\xb1*\xca\xa4y\x94\x0b_L\x8eR\x11XQ\x83\xe3M\xfd\x0c\xa3\xd5\xbe\x91\xba\xcf\x0c\x9bx\x19\xd0\xb0?\x8f\x17\xd5\xba\xbb\xda\x05m\xd2\x08Q\x0c\x1d\xa06\x10:Ts\x13b\x1d\xd2\xaf\xff\x81!\xa9-\xd0^t\xb4\xeaD\xd0\xeb\x99|\xcd\xf8\xd5\xeb5=\xf7\xf0;N\xd3\x17\xde*\xab\x85\xfbT1\xf0#/9\x1b\xc1\xa1\xb4 \\:\x7f\x95\x14\"\nfB\xc4\xf3_\xeb\xcf_\xc7\x0b\xa1\xbb\xf2\x1a\xce\xc4=\x1ce=\xae\xf9]\x0d\x14O\xdd\xd4\xaa\xe9\xaf\xf9Acf\xdf\x11\x1cwHe\xbe$\xb0%\xf5\xef\x0c-\xcc%Fm\xd9\x18%\xc1\x82j/\xeem\xa0\xa6\x97N\x08o\xa7V#\x06So\xb8\xb6f \xb8y\xf9f\x10\x868\xa1\x00=\x0f\xf4\xbb\x9bN\x10\xec\x93\xf4\xa7f[f\xc7Q\xd2'\x9f\x97qZ\xa0J\xde\xf4\x02\xd3^\xd8Ro\x07\xcc\x93#?\xf7Z\xf2\xee\xe5\x8d\x03\x11M\xa4\xd9\xb5+\x87\x07\xed&+o\xca\xc7\xda\xcd\xe6\xe7''\xb3\xb8\x98\xb5\x1a\xa8n\x97\xaf\xd4\x1e\xac\xd7B\x7f\xcco.\xe5\xb0\nu\xa3\x907\xc6\xea\xc6\x18=\xa5;\x90\xb2\xe9\xc1!\x0d\xd1\xf8\xdb \x1b\xe5Z\x81\x9e}\xe6\xb6\xf9H\\\xac\x06J\x88})#\x04\x1d\xe6\x8f>9'\xf9*\xe8T\xa8\xa8K\xb1B9\xda\x00\x83P\xec\x82Nv\"\xe3@\x98\x91 CNQ8/\x06\x94\xc3\x15o\xeeb\\\xa1\xed(\x00\xf4\xdf\x97\xfdq.\xc2c\x8f\xa8q\xda\x16\xa8\xe5gc\xee\xbc\xf1\xaaZ@\x0b\xcd\xd1\xd5\xbe\x88m\xda\x0d\xdbB\x90\xb4 \x0exg\x0d\x0f\xf9\xe6\xa5xK\xc7\x12\x10\xa9\x05\x81\x01$f\x08\x1b\xa17\x15\xc10\xc6/\x16 \xb6\x8frE*\xd1\xc7\x14<\xa8_\x1c\x9e\x9c\x13\xdd\xc2\xd8\xb4\x00\x9d\xa43\xfe{\x86<\x01\xe9\x9f\x11\xf4\x8a\\\x85\xfc \xbf\xab\xddB\x1cQ\x185\x95\x1ek\x06\x8a \x885V\xf1q\xaa\x11\x13\xbe\xa8\x0b/\xba7w\xd3\xbd-T4\xea\xf1bsM\x02\xe2\x1c\xbbj\xc0\x8c\x8fB\x9f\xa3\xbc\x1e\x1a\xfa\xa4\x86/\xcb\x1e\xdc\x86\xdd\xd2\x9fE\xfa\xbd\x84\x91zC}\xe8:\xd8\xfeY\x0e\xed\x9ff\xc4\xf9\xa7\xb4\x19tl5\x1b\xb4\xce:\xa0U\x8b\x8c\x11*\x02O_\xa1\x15q9\x0b\x99\x97b\xd5X\n\xad\x0d\xf3j\x9c\x91@\xbaZE\xa0\xe2\xfb\nF\x16\x10\xc3\xfb\x98\x9e\x118]\xc1n/\x8cpo\xe19\xb4\x1b\xd5W \x0d5\xe8[z\x1bv\xc3\x08i\xba\xf6\x02\xc5e\x94K\x18\x9f\x16\xe8z\xc8\xe0\xa1\xe4\xd8\xf8\xdb;T\x99pN\n\x16\xe75\xdd&\xa1\x13M\xb5y\x82C\xc3\xc1\xeaX\xa3\xa3\x07\xfe=&I\x1a\x04\x0cv8\x01\xbe\x0d\x94\x8bV!\x97\xcd7\xc3\x9d_JX\xfeb\xc6\x9d_\xbe\x0cwN\xcd\xbaD\x81/\x9aJ\xe9\xf1i\xc1\xf2x\xcc\x9a\x96 K\xb3'\xc4\xe5fz\xe1|z$\x9f\xea\x0f53\xd6\xf0\x1f#\x15`\x1a\x10\x12\xc1K\x8e\x19z\xdc\xc3\x19\xe9\x0c\x04\x82\x86\x15\x86\x93G\x94\x0f4M\xfb\xf0\x932g\x84\xa3\xb6gc\xa3\xcf\x8dL25\x7fY\xadG\xe9![S-U\x1e\xb2\x03\xc8\x85\x8b\xac\x15W\xa4\x8a\x88\x04t\xc80\xecn\x07=\xba\xb2\x11\n\x7f\xbc\xa3jgf\x1c\x15\xadT;\xf3\x9a\xac\x9fu\xc84Q\xe3\x14Z\x937\xbe\x95\x9956\x9bikJ \xaa7\xbd\\M\xa8/\xf4\xc3CbD\xf9Z\xdf\xb3\xb8p&\x02\x80\xa6\xa5S4\xdd\x08\x93o\xa9\x02\x1a\xbd|\xe9\xc6\x12\x9d\x8a\x9dU\x99\xaa\"\xc9V\xeb;-\x11;-\xe1;-{\x00\x89;\x16:\xe6\xdf\xe3bf\xb0\x03 \x1c@b\xd1\xf35vf<\x8a n\xee\xc6\xc4\xa8\xb4\xb5\n\xa3\x89\x17\xc8\xae\xb3=%\xb8\xac\xfbS\x03\xa1uw\xe6\x9d{8\xb9\x89=\xbc\xd9*(\xc8\xa1\xa65\xfb\xf7\xed\xf9\x98\xef\xf9\xd8o\x8fk\x8b8\x9cU\x87\x1c\x95\x87\x1c5\xee\x8b\xd2[\xc5c\xad\x91\xf7\x0dk\xbb\xb2&4iB\x86\x85{V\xd8\xf2SP7\xcb\x86v\x94\xb1\xe8$\x9e\x04\xd4\"\x83\x96\xbb8{\x00[\x01F\x9cKyT\x08\xa4\x18\x8b\xb7'\xb4\x10A&d\xe2\x08\xf2\xedm\xb9\xab\x1e\xd8\xa5\x91\xbc s#L+}\xf5\x8d\x025\xcb7\x86\xaaE\x9d\xf3D\xd7\x12\x8b\xed\xf2\xbd\xa5Y\xcb\nl\xbe\xd5\x98\xb6\x0e\x1dZ\x0e\\$\xe1\x8c\x8e{@,\x8dX(\xaf\x8d\x10\xe4\x12\xe5\xf3\xff\x02\x94\xaf\x0e\x15\xfd\x14)C\x08D\xca\xa2\xb6\x83\x80~\xa0\x94\xc6\xa8\x07\x1e\xcc[6LF\x11'T\xadC\xc226\xbeK\xa8\xa6%\x12\xbb\xe4A\x17\xdd\xa4.m\x12\x9a\xd8\x86\xc9H\x84C\x96c\x8b\xeb\x03;\xcdI\xfc\xa9\xbd\xa06lk\x1d[\xc6\xe5\xfd\x8f\xed\xbe\xc6\xc2Z \x9ai\xb1\x8d/\xdf\x08\xab\x8a+\x01\x8f\xaac\xb5Ka\xd8\xbdQA\xc1\x0d\x11\xa5\x02\x9eC\xb1(\x82\xf2\xe4\x1e6\xbe\xe6\xb4.+\xf67\x1f\xfa3\xbcsI\x03\xe6\xe4\xfa.v\x0dA\x1b\x0e\xa1\xf7\x9e,H\xcc`8\xea\xc1A\xf5\x0b\xbd \x98\xa6\x16\xda\x86^u\x0f\xbf\xe5wX2'\x05\xb4\x9d\x8e\xe7\xd7g\xcaML\xb8\x18\x82\x81\x01\xaf\xf5\x93\xd0q\xba\x9c\x10o.|Ft\xc5W;*\xab\xd1<\xa6,\xf0\x99Hm\xffpPYQ^\x8b\xd9\x13S\x85\x03\xa5\xad\xab\x8d\xec\x83\xb0\x13\xc3\x8e\x08\xa6k2\n\xcd\x91\xe6\xe4\x9c\xe4\xc5&n\xda\x1dp\x9d\x90\xcb\xb7\xd3\xeb\x83\x15\x0eQc\xb8\xb3\xe7\xec&\x8d\x0b\xf6\xfc\x06\xba\xaa0\xb4\xb3\xcb\xeb\x0bS*UT\xb9\xc4\x98+\xcaJ\xb0\xca\x03\xa36\\\xda<\xd1\xa8S A\xbd\xe6\xb2\xb9\x94\xb3\x11\xab\xba\x19\xb1Vl&<\x04\xaa(N\xc5\x02Q \x89\xd0\x98\xf0F]7\"~xP\xd8\x1a4\xa5\x91\xd2\x13\x0fI]\xf5\x0e\x87m\xcc\xd4\xa6z\xde\xb6\xf7s\xfa\xbe\x92\xf4}u\xc3\xf4\x1dU\xc6\x8a\xbc\x8b\x1f\x1au\x17\xda\xddm\xe8\xf5\xfb\xfd\xea.\xa1\x13\xd8\x86@\x08\x15\xeaE\xb2\xe0\xed\xc1\xe9\xaa\xf69Y\xf0\x86{!\x9e\x07\xed\x93`u\xb3'\x81\x1an\xa5\x8b\x84\xaf\xebCi\x9d\x11\xabk\x9d\x11\x8as\x08\x08\xec\xe8}\x87p[\xeb\xcf\xba?0@zW\x18\xe452!n\xf05B\x9d\xf84\xcd\x0c\xb6\x87\xc6\x90\xbd\xcf\x9d\xc6\xa1Rv\xaa\x1d.\xe8R \x02\xb2\xcb\xa7\x91\xb0\x15\xe0\x19S\xdd\x0d\xe1\xe1\xa0\xf4-]\x91`7\x82\xddP\x1eO+\x89\xdcg\x84\x05\xbaU@\x99\x0c\xf8}f\xb8\x8f k\x9f]\xab\xeb\x1c6\xe7eTemy,\xf6-\xf8\xbf:\x92\x0c\x06|.vi@d\x17p\xaf3\x94\xf6D\xb5\xd0\xb5\xf3 4\x13mp\x89\x03\xed\xc3j\xf5\x85\xe7#\x0eGB\xd4@sV7s\x16V\xd8\x8dz\xc3J$\xe0\x90\x93\xf2`k\x03S\xf8\x1a\xf3\xe0iw\xeb*G\xeaT9\xd6%\xc4\x08\x12\xa3\x06\xd1\xbcl\x19l\x8b\x11\xed\xf0\x01\xe4\xfe\x0b\xd4\x92\xd7\x8c\x00\xdc\xfc\x00\xae\x80g\x1co\x03\xa0\x969\xf9\x02\xd9\x0c\xce\x9b8\xec\x95 \x9d9\xd5!\x0d\xe8\xf3E\x7f\x84\x16\xc9\xbf\x98\x03P\xca\x17\x94\xd7c\x1f\x91kuC\x0c\xc1\x8a4\x16F\xf8}\xc8\x1fe\xb8\x1d\x9aU\xc5\x13\xfegy_\x92,\xf9 \x9eq\xe7ed\x91\x81\x8f8%*\x9d\xd3 \x89\xe0\x94\xe0\x9f\x17\xd5\x9fG\xea\xcfSRF\xf4\x887\xb5@\x1e\xf1\xbe\x0c\xf29jH0|\xa1/\x89-\xbb\x04\x9el\xc9|\x89 &v\xf6\xab\xd3\x8e\xdf\x0b\xaa$,\x11\xec\x87*\x7f\x06\xbe~\xe0\xbfk\xee\xdf\xbbw\xe7\x1e\xdc\xe2\xe7\xd9\x9a\x13s\xfb\xc6)\xdfd\xe2M;\x92\xe3^\xd9F\xb7\xbbG\x8f\x1e\xc1\xde\xfdP\xde\xe1O\x02V\xde|\xf8\x10\xf6\xee\x8b\xdc3!\xac\x9b\xce\xf8\xb6P\xa6\xe3._Il\x1en\xc1\xde\xee7w\xbe\xb9\xbb\xf7\xed\xfe]X\xc3\x9d\xfd\xfd\xbd\xfd\xfd{w\xbf\xe1O\xfc\x9c2\x9fZ:\xd2)&\xac\xd7\x8e\xe0\xeb\x92\x86Z4\xd5\xdd>\x8f\xaa\xa3\xb6\x07\xa3\xbb\xe3\xae\x9e\xb7\x9a#4Px\xc5\x18\xa8qY\xe6P\xa5=\x18\xd8}\xce\x12\xf4)\xdc\x92C\x15\x0e;\xc2\xa7\xc21P\xd0\xf0t\x17\xd66\xe7(q\xec\x8d\xe0\xbd\x80\xf5\x1b\x993\x83`:\x1cxF0\xf1\x19>\xe7T\x1c\x1b\xe7K}\x9d,\x0bp :\xdb\x08\xc7gq1{\x9aM\x88\x06\x19u\xcb\xa4\\\xc4\x96\xaa\x90-\x1d\xa4\x9e \xb43\x9e\x1f\x9a\xbe\xaa\x08\xbfw\xc2c\x8d\x84a\x97\x1a3\xa9\x9c\x0b\xcb\xaf\xc9\xf09\x19y}\xb9\xf5\xd6:n\xb05\xceOS\xb4q?/\x8e\xaaT\xd8\xe8\x0egz\xe25\x16[g\xdd\xe0\xd5\xbf\x96\xa3\xa0\xd9\x84|X-\xf8\x96\xdb\x0d\xa1\xb8H\xd8x\x06Au\xbf\xab)~\x8d\xe3\x82\xc0\xdeA\xe7{\xa0\xd1\xfe\xfe\x92&\x9f\x97\xe4\xf93\xfb\x1c\xd5\x85\xcd\x7f\xb7a\xf3\x93l\x8c\x01\xc3G)\xe1\xff\x88\xc96n\x96cp6mVj\x83\xdcR\xdaj\x19\xdf3\x7f\xcd\x97k{\xfb5\x89\xf4\xa3\xef\x16\xbc\x16{\xff5\xee}G\x88\xc8\x07\x12r\xac/\xa4,z=G\xd7\x06\n=V6\xd5\x01\xfe@\x97\xe7\xa6\xc7`\xefMFw\xc8%#\xb4H\xaa@\xc2\x02\xe2\x9c`\x92\xe38M\xb3\x0b2\x81\xb8\x80OdU\xf4\x9b\x89\xb3\x9b\xdd\xf3\x0de-n\xf1\xdc\x98\xc3X\xbf|\xd2\x11\xab\xab\xbb*\x86~iI\x8c;\xde\x94|\xbay\xf1\x01\xcc~\xb1\xea\xc2\x15j\xac\xc3\xa6$C\xb2\xc9Z$\x89\xc6\xc1\x9b>\x08\xad\x0d\xb9\xd5m\xfa\xa5\xcb\xda\xfe=\xf7\xe3\xc5\"]I6\xde\x12\xd1\xaf_W\x91\x83L\xf23\xb0\x03\xb2\xddD\xb0\xe6\x94^\x91\xbc\x16\xde\x7f\xa4\x08!\x96AA\x18\xc4@\xf9>\xa8 \xa7\xc6\x08\x19\x95{\xc2\x89\xfa\xfc*\xe7`\x9f\xfd\x06\xf4\xc4y\xeaot\xda+\xe5kI\xd68\xc3\xa0e\xb41\xe6\x03h@\xeb'4]\xf1&\x85\xd6\x14\xd5\xa4c\xe1\xd4{J\x80s\x0fd\xd2\xf7\xf4\"\xfdd\xe1\xedKu\x0c\x13\x8c\x92f\xa1 \xf5b\x16\xfc\x85;{\xf0\xb5HU\xd8\x1f\xcf\xe2\x9c3/\x8fY@Q\x98\xb1\x8aG\xc7\xa4\xed#\xad\xff\xe2\xbd?&U\xc6\x84\xa48*ic\x9bj\xbc\xf5\xdaa,_9\xf0V\xa9;\x8d4\xf3\xcf\xab\x08z\x7f\xefE\x82]\xb4\xea\x04\xc6\xb18\xe2]{\\\xf6cs\xf57\xa0Y\xd8\x16\x97\xdf\x91\x08>XE\xe6\x9fI\xfc\xe9u\xdc\xd02\n\x06/xGd\xe6\x02\xf9\x92\xa1qqF\xb6\xa1\xfc\x1c;<9I\xe6\xf3%\x92p\x8em''\x8d\x14\xed\x1d)\"\x03lE\xfc\x0e\x9e\x93&\xd2\xf3\xfe\x7f\xe7o\xec\xdd7$\xa6\xe4\x0f\xf6\xef\x192\x1f\xbf\xb7\x0cY\xb2\xf86)\xfa\x95e\x03\x9c\x91@\xc4f\xa1tV\xb9\xcd/H>\xcd\xf2\xb9P\x7f\xc7\xa2\x8d\x8b\x84\xcd \xa6\x90\xd0iB\x13F\xa0H\xfe \xbe;\xf0\xa3[\x8cw&\x0d\xfbE$\x0d\xfb\x8cMp\xfeb\x1c\x94\xf9\xd3\xf9\xb3>\x1f\xd9\xeb%\x8byO\x85\x16\xd6\xd2\xa5\xab\xce\xad\xe9\xed^\x91\x80*-?\xedO\xb3\xfc(\x1e\xcfj\xf1V\xc6@\x06u)R\x8a\xdc\x15m\xa9\x9b\xd4e\x8a\x82\xf6\x03\xe7g\xef\\ \x7f\x90\x8el\xe6\x1fI\x04'|\x9e\x1f\x89G2\x9d\xd2| B\x8a\xcb\x038r\xa9\x88\\\x8bd%!\x1d\x15\x86`{\x00\xfb]\xa2\x14\xda\x85\xe1Q\x95@\xc6p,\xbfN\x8a\"\xa1g\x82 \xc3^?\x91\x95\xc8f\xc1\x86\xd4\x94fR]\x82y\xe6/E\xfcU\xde\x97-\xdc\xbds\x9d\x11\xfc\xd76_\n\x85\xa7\x96\x01\xeau\xbc\xb0\xa6<\xfb\xf8\x85\x96\xc5\x93<\xcb*\x959\xff\x81\xa2s\x19K#\xf26\x85&\x93b\xad\xebb\xa3\xae\xff\xa1'\x85r\xcf\xa9 \xec9\xdd\xa0i\x9c\xc8r1\x89\x19y\x8e/\xaf\x0c\xd5\x0cm\xdfn\xba\xb29\x99g\xe7\xa4S\xd26\xccz\xe5nxBR\xc2'\xe0\xdbtk\xd6\xbeS^m:e\xd1IsA\xdc\x89\xa3\x85\x08Y\x92\x17\xa5G;\x94\xae \xa12\xce\x94\x13\x18\x92\x91l\xd4c,m\xf4\xb0\x8c\x06\x83]\xd1)R\xc6b\n\x14w\xf8\xc8\x96$\xda'\x91\xc4\xb9\x8c\x03\x15\xa6\x8d\x95]'\x1aw\xfa\xe2qr\x17K?<;Q<\x97)c\x12YM\xcbb\xd6RW\x01\x03\xc8\x82\xa5\x83\x06\xca\xe5*p\x02K\xe9\xac\xdb\x8e!\x03\xab\xd4qF\x82\x04cH\xd0p\xc3\xf7n\x04\xbd\x84\x9e\xc7i2\xe1\x94\xf8]\xccf69\x88\xcf&\x85\x01\xc4.\x0fT\xfe\xd2XNy\xc5\xa7\x8c\xd4*\xe5\xfb\xc9\xfe\x01?\x07I0\xae\x16\xd0\xa9(\x9d\xe2\xec\xc7r\xf6\xe2\xd7\x8a\xff\x92\xbb=H9\xbe\x06I\xc5\xcb\xb0\x10\xcf\x8e4\x82\xa9\x81\x07\x90{\x9eR\xd4\xe9Z\"\x1ee\xdfy\xd9\x9b\xe4\x9aZu\xd0\x1a;`\x9c\x92\xd8Y\x94Hk\xbc\xed\x16\xc3\x84?\x84Ym\xc0:\xea\x8d\xb3\xee\xf6k2P\xe7\x04J\x8b,_\xa9\xb8x-t\x11&\x06@\x8e\x86 b\xb1\xfeE\\<\x16\xf44@\x1f\xb6\xfe\xc9 \xa1\xc52'o9\xbd\x0e\xea\xc4[\xb1R\xce\x81\x97\xbd{\xee\xc1\xd6\xf9P?7\xf4\xd1pQ\xec\xd2\x0d\xb6\xb8x\xae41\x9b\xf5\xaf\xf7\xd3\xb12%\xc86\xebA\x9e[\xce\xb67spR\x1a\x11r\x01/\xfde\x9e\x8d\xbc\xd0\xbe\xd4\x89Y;\xdcKo\x1b\x94\x03\xdb\x99E:\x88\x08\xba3\x93\x80a\x82\x19\x86\x19eL6\xf7H\x94}\xea\x80\x80\xb6\xda\x9d{K\xed\x98\x8a\xc11`+?\xd2\xfeI*\xd6Fgk\xa2*\xaf\x03\xb24\xc8\xe15\x1a\xd2r?\xe8\x0c\xce\x9edp\x0c\xd3I\n.\xb9\x0f\xe0\xb3\xc1s\xe8{\x12\x01\xb2W\x8dd\xc0\xaf\x1f\xbf\xb3TO{\xc2\xdf\xd6\x81dS\x0f\xfedO\xfc\x81\xc3oOH&*j\x19\x1f\xac5>\x9c @,\x9d\x9c&l\x8e\xe0PN\xb14\x13.\xc8\xd4\xab\xcf\x9f\xaf\xd3\xe78[Rv\xed._\\\xa7\xcbOd\xf5\xa3`\x8aY\x0b\xba~\xdd\xfezs\xdd\xae\xbc;}\xd9\xdd\xe9 \x13\xa5FK\xa7\xe6*\xc2\x86V\xbe\xcd\xf1\xf8\x93H\xd3\xa9(\xcaW$\x90\xbf\xfc\xb4\xa1?t\xa6x\x14\x15\x90D\xc6\xaaVRJ[\xb3_u6k\xa6m\x1ce\xac\xe5o\xd1\xab\xf8\xc0\xe6\x8eyr\xb2\xc8\xc9\xb9\xc9\x14\xec\x97\x85\xe5\x9f\xbeIQ\xeb\xc5_\x9f8\xf2\xf6fJ\xaa#\x11d\xa5H\xc7\xf0\x87F\xe9\xa8\xb8!\xa5\xbb\\\xfc\xaa\x13\xbd\xcck\n\xbf8\x93R\x7f\x8fz\xed\xe0{>\xa0\x7f\x92`\xd73\xff\xdd?\x9c\xb8z.k\x92\x9b\x8d\x9c\n\x15-\xab\xadt8\x17\xc1\xa9\xc5\x9d\x12d~\xd8\x8b\xe0\xc4\xa1\xbc\xc1\x04pL\xf5\x86\x91/\n\xbc\x11h\xcaU\xb1\xb8I\x04q\x18\xc1\x96T}T~U\xe6\x0eD\x1e\\\x19~\x18$\xb2P\xd7!\xe7\x02\xa4\xf6`g\x0fK~\x1d4\xab\xc9\xf1\xeb\xcae\n\x17zvl\xc6g\x14{U\xf9\xc6\x9fp\x9bW\x93\x1cZ\xa1'\x8a\x8f\x19\x1f\x9b\x82@m\xc8C\xea*\x8b\xb2>c\x16\x95\xd4\x07Q\x97\xb4\xd5\x14\xa4\xa5\xa3@O\xb8\\p\x08\x19\xee6\x93\xbe\xc2\x82\x8f\xd2\xe9\xa6\xd4/\x89\x05\x8d`\xe9\xe4U\xb8D%$\xb6\xc0\xf8\xe9\x01GD\xb9\x9e\x84\xf3#G\xc12\x8c\xe0(\x881\xeb\xc3\x05?'D\x0e\xd7!\xff\xcc7\x9d;cn\x1e\xaa\x95\xa8\xf4W\xe1\xf6\xd9\xba\xff\xc2\xcf\x13\x976\x80c\xea[l\xcc\xf2\x08\x1b\x0c\xf8\x02h\xac\xf3\x8br\xa6\xb2\xbaP\x04\x99\xc9\x96\x83\xbbW$\xde\x0e\xaa$_U\xcb\x07\xda\xdf\x8f\x1e=\xe2\xf4\xe3\x16\x9c\x99\xf7\xf9\xb2\xde\x08\xba\xe9k\x1fY),\x1f\xef\x8f8^\xaci\x1b\xc3Z\xfc\xb1\xc4qI\xbd\xea\xb0\x82\nl\xc3\xb9\x84\xccH\xe8\x15\x07\xf5\xd5\xcdB\xfe\xe5C\xf1\x1d\xe1+\x0d\x070L\" \xbeK\x9e3\x17\xbd\xac\x12k`\xf5\x82Z\x86\x02Z\x9a\xe8:\x12\xdfph\xd1a2\xb2\xd3\xcc\x02M\xb46\xeds\x1c,\xd1-:\xe0\xaf\x15\xf5\x8c\xc6>~ \xd3V4\xa1\xba\xae\xc2\x90\x1f_\x8be1\x0b\x0c\x9eEV\xf2\x12+\xa0e~@\xce\x9c@.w=zmUj\x95[\xb7\x00\xb3\xb0\xd6\xd4+\"'c\x99\xd8Wl\x7f?\xce\x12\xc1S\x82\xc9h\x87\xbc\xa3QX\xe3\xc8\x98\x0fG\xa6.\xe5l\xc0\x86\xb6\x04x\xea\xca\x10\xab%\xf9'5\x115FEKl\xad\xfe\x01F.J]\n\xd9\xcd\xb4\x99wU8\x8d\xf2|\n\x0b\x90\xd1a\x9a\x82W\xc9\x99\xd6\x8e\xb9d\xb7\xe0\xb8\x85\x14\xa9\xe8\xb2\xf9\x1f\"\x7f\x9dJ\xdb\xff\x0e\xec\xc1!L\xfa\x8bLT\x82\x98\x0cSN\x8dZ7\x86|\xe4\x9c\x1f\x9f\x08\x06S\xfc\x0e#\xec9hh\xff&\x95)\\ \xcc\x11L\xbaX\xd2\xab\x08~\xbc693F\x97!vY6+\n\xf5\\\\ \x82z\xfdp\x11\xf9IP\xf6\xb1hF\x12EC\x84\xa6\xd7J\xd8x\xc3\\\xce\xb9%\xb8\xbb24\x1b\x95\xb3\xc3%\x13\x8f03\xf2H\xc4q \x19\x89\x99\xd8\x89&x\xaeM\x17k\x99\xa1U\x02\xe8\xa7$\xc8m\xa0\xd2\x04D&Y\x1e\x8a@b\x0e\xa9\xb2P\xf0]\x9a\x9f\xa7u\x18\x9a_\x1acL\xe5\xd6\x00\x82\x14n\x81 \xb5\x91\xae!\xa1\xce\x1a\xca\x1c3AUtz\xc9D\x93\x08|s\xe7\x0b5B\\.\xf3;|\xef\x8d\xe1\x10\x16\xc3\xe9\x08\xdc!\xeb3\xa1(\x9b\x08\x0b\x8cX\xe8\xfaZ\x99g'\xd4\x04\x13\x8f\x83B\xc0\x01E\x97\x85F\xde\xc7N\xf2\xeep\xf3\xaaU\xfc\x92\x0c\x01\xdf\xcf\xa2\xde\xcc<\x8c\x103v\x1fHV\x9f>\x80%\xa6\xf9\xe1\xb81\x80\xbd\x10\xe2\xe1r\x84hp\x0b5\x0bl\x98lo\x8f\x1c5\xeb@\x13J\x87\xf9H\xa8\xb8\x84/|\x80 \x05\xb7\xb1\xda\x98\x81\x90\xf0\xc7\x8b\x08\xd2\x08\x96\x11\xcc,\x90\x94\xe79\xff\xbf\x08S/\xa1\xc4\xe5?\x16,\x86{\xf0/\x98j\x9c\x8b\xba\xe3h\x0f?\xde357\xab\xda\x99\x99\x11\xf1tSr\x7f\"\xd1m\x86\x14\xfc\x00R\xf8\x17\x92\xfd\x14\xd6`\xc1\xd0\x0b\xed\x93\x82\x05\x8b\x08\xa6\x11\xcc\"8\x0d\x9b\x01\xf8\x1d\xe2\xc7yY\xed\xa3\xf2\x80\xb0\x1f\xb5B\xbdZ\xa6\xbf\xc9\xb5\x08Z!\xc5P\x80O\xb9\xa7\x1eb\x99=Q\xf3\xacslz\x97\x88\xf6\xf5\x0e\xdd*\x8d\xa4\xfa\xcc1\x06\xb7\xa2#\xe9\x92\x16\xf0%\xb5L5\x00\xa8\xbbn\x19\xa2\x81_0\x80\xafH\x90X\xed\xe7\xe0\x14\x17\xc6\x19e \xdd\xa8\xf8C\xbb\x7f\xedW_\xf8\xccv\xecj\xa8\xb6\xa7mct\xe6J\xb5\xe6Im\x10\x90:0\xf9*\xa7|\x06s\xb8\x0dw\xdb-\x8f\xd5\xb3\xfd\xf6\xb3i\xf9\x9d\xcds\x7fa\xf1\x188\x97\xb1CG\xc6\x80a\xe4\x9b\xbb\xf3XZ\xe4\xea \xe6\xc9+\xa9\x9d\x99/\xa4\x18:\xec\xaa\xe7D\xdd5\x1e\xc4`r\xa9\x03\n^\x89\xe3:\x87G\"kt\x0e\x0fa\x0e\x87p\x81\x99\x07\xf2\x08U\x0c\x18g\x8a\x85 X@\xfb,\x13\xf2w\x88ei\xd9\xc6n1\xe8'r\x9c\xfc!z6\xa4\x01\xe9\xd2\xf4\x96\x9a\xda\x0e\x7f\x13\x93\x17\x89\x9f\xa7\xc5\xc4\xed0\xa2\xe5\x01\x99\xb1\x8e< \x0b\x16\xc1\x05\xe1l2\xf3\xc8\x03\xa2 \x1f\x81=\xc6r\xc1\xb4#\xeeKsZ\xbcJ\n\x06\xc3^\x04\xbdQ;\xa9E\xad'\xcf\xa4\x16\x89\xaa\x15_%\xc5\x0f\xcb\xac\xe4\xa4\x9e\x95\xdcq\x9ar\x01\xb6d-1I3\x8e<\xcb\x93\xb3\xc4\xe6\xd9\xa6d.\xde\x13\xed\x8b2\xa1\x04n\xc1\x99!\x14\xd2\n '\x0c6\xcb\xae\xe1k\xbf@\x901\x04\x99d\xabjU\xf3\x1dE\xa00\xb1\x7f\xe5\xc4\xc6\xe0\xa1\x96\x0dvs\x975\xc0c\xe1!\xec\xc2!|\x92\x19\x0cq\x9b\xed\xca\x08SqsW\xa8\x1f\xf7\xc43f\x8c.\x03\xb0'\xd8c\xe8\xfb\xa4\x16\xd3\xfcNe\xcf9aq\x92\xba\x19*\xe5\xdeo})q\x06\n \x14\xdfb\x94\xc08^\xc4\xe3\x84\xad\x84A|\x00\x97Xo\xbb\x195 \xe4A\x14\xb12\xf1R\xd6x\x89\xf4ORrN\xd2\xea]\xfb\"n%~\xe1\x06\x89\x08\x9b\xa8BL\xcbuV^\xf6b\x14\x1c^\x9b\xb8\xdc;7\xd3\x05\x82E\xac\x14~\xad \xa4\xcf13z\x17^\xb9\xe2,k\xdbj\xb3\xf4-H \xcaJ\x1c\x9aU\x03 \xcb,\x992T\\h2\xaf\xcah\xaf^R\xba\x0d\xf1p\x91&c\xe4\xdb\xf6lQ\xbb\xb5\xc1&\xb4 \xf9&d\xa0\xd1\xcbn'8\xfe\x0d\xc9$tjZ\xfeTK\xab'\x9b\xc0\x15\xe6\xf8\xd3\xc8>!%%\x81j\xd7NE\xc1\x19)'(\x16\xcbb\xd6\x05 %\xbcU\x11\xfa\x96]\xae\xc1\xc9\xca \xe1\x1b\x16\xbai%\xe0\x9f\x90\x11\x91dQ\xd9R-;\xbe\xe6\x16\xbc\x8b2\xbb\x96\x16\x11%w*\xe8*l\xe3\x1e\x1e\xe6^%\xd9\xea`\xcb|\xf3:|R\x87\xecn\x04;{\xeeV\x97\x14wWW\xcb\xad\xf5\xb8\x16\xb0\xad\xa1a\x9f\xf0\xc8\xd9\xf1\x05\xb3#\xfbd\x99HnH7\x07\xb1\x17(\x9a@\xee\x00\xf0&\x89W\x1e\xfb'^i\xf7\xe1\x95\x90\xa3\xd9\x91o\xe2\x95vw\x1b\xe4\x19y\xec\x97g\xc4\xdc\x87\xd7\xb4\xce\xaf\x93\xd7\xe3qg\x9e\x91&\x9fx,\x08\xad\xd7\x89\xa6o\xc2v\x11\x8dz\xcb\xbe\xf5\x97\xce\xbf\xa8\xee_9\"Y\xe2\xaf\xac\xfa\xe7\x1e\xddfI\x19\xca\xedi\x17gOJ\xe4\xb3\xaf\xcd\x06\x05a0\x14\xb1\xabB.\x9e\xa8\xa7\xec\xdfW\x04\x86b\xd1\xd6\x8d)\xd0F\xd9)\x9aur\xa5\xfe\xd8 _\xbc\x02\xa1s@\xa1\x04\xc1\xa2\xd7w\xa6\xd7\xad\xec\xdc\x98\xc8_\x92d\xe2\x82\x05:\x9b\x135\xb8\x9c\x1a\x87\xa3s7\x91\xc6\xdcl\x94\x90\xc2\xb4\\I\x81\x12\xf6\x00&\xac\xad\xc1\x9a\xb1v\xe2\x89W\xcf\x8f?X2O\x9c\xa3\x05]\x83\x9cM\x7f5gV<\xc0\xb1\xa3h\xac%-\xa8f\xd2\x8cn\xd3\x7f\x9d\xb3\xe1\x8c\xa9`\x90sV\x05\x83\x9c\xb32\x18\xe4\x9c\x95\x89\"\x9f\xc8\x9c\x91\xda\xbbx\xbf|[\xbd\xa5~\xe1\x8b\xa5\xfd\xed\x89\xb2\xc5i\xb7\xd5\x17\xea\x17>\xaaR{=)\xf3|U\x0f\xcadOOj\xd9\x9f\xf0\x85f\xe2\xa0'\x0d\x89\x19_\xd2\x93\xf4<\xd1r\xf6\xc8\x87z\x0e\x9d'\xb5\xa4:\xa2\x0b=\x03\xce\x13=#N\x04\xf3\xb6\x08\xf4\x84L\xb3\xdcd}\xb4iZh\xe9\xd0\x84\xde\xcc\x0c#\xdb\xca\x8d\x81\xeb\\\x86^hL\x97Y\xbb\x88\xfaC\xe1\x13e\x0e\xad\x15\x0e\x80\x8f\\\xadK=\xe1p\xc4O2s7\x99\xf4\xbb\x10\xaaHs/LT\xbd\xb0S\xf2\x18\xf4Q\x0c]\x06,,R\x1fs\xba\x15\xd7\xc0\x8c\xb0\x85\x1d\xd4q\x86!\x8e\x06\xdfJj\xa0jSe\xe3\x80\x85\x95,\xf3\x80\xf2\x12\x06p\\\xe5\xce2\xcf\x7f+1\xabTj\x8e\x13\xbb\x0f\xa0\x10.\xa6\x05\xfaIJX\x14\xa3R\xfc\xb2\x12\xe4\x0c\xddD\x96%\xf48\x8d\x0f#X6)\x98\x01G\x1fO\x19i\x1d\xef\x9d(\x1a\xd4q\x14\x83\x8c\xbf\x00S\xa5\xf5\x13\x85\xfa\x0e\x84\xcd\xdc\x08k\xee\xc4\x0b\x07\x93:\x0e\xda,J\x88\x839&\xcb\xe4\xd8\xa5\x83\xd1\x80\x82\xf8Rf\x86\x0c\x1a\xbf6DN\xb5Y\x9c('\x9b\x8ceoRY\x91\xa1\x92/\x92~mq9M\xceD\x85\x11\xc4udi\x1fog,\x82\x15\x8b8\xd3\xe0J\xa3~b?\xad*^]\x1d\xe2F\x08KEay\xb2\x1b_\xc2\x04-,\xc8\x1dQ3Ryf\x87O-\x91\x88d\x1cv\xc3\xc6\xc4\xa0\x16\xf7\xcc\xe7\xb6\x8c\xc0jc\xad\xe9q\x96\xb5rV\x16O\x13u)b\x12K\xff\xa5C\x85`\xe2x?PQ\xee\xf8\xd3\xce\xa3\x82\xf4K\x89e\xe5\xc3]\xf4\x8c\xdd\x81\xd8\xfd \xaa\x18\xf9k\x16\xbe\x11_y\x04s\xc4\x1d\xfe\xf2\xdca\x0f\x95@\xe8\xe4\xe1\xd5\x95\xa0\xe3,\x9fvZ\xee\x87SG\xd1\x11\xd0\xd4\x12X\xedq'\x85\x03N5\xdd\x9f\xc8\x96\xd1\xb3k9$\xe6\\)`\xdcvx\x97/a\xd1t\xcb\xcfPs\xdc\xb1\xac\xc2\xa9\xd5\x7f\x01S$/\xf5\x05L\xe0\xd1#\xc8\xdc\xdf\x8d1\x00f\x9b\x1f\xeb\xea\x03\xc72\x8d\xcb\x05\x1d\xdf\xf0\x82\xe2\xb9\xf6\xc0\xea`\xa1_|\xed\x8d\x19]L\x97Z\xf4\xa5M\xe8k^\x89,\xb2\xc7E\x9d.\x85|\xf3ZJUh\xe7\xcbv;\xbe\xba\xf80\xd2\x86/a\x17\x82\x83.\xf5#\x92\x8f\xe1\x00\xd2.$\x079\xf2X\xb8\xa2\x17\x98y?\x13\x87R\xc2Q\x83\xf2S;\x0b\xedn \xe0\x9c\x92co ]l=\xf6K(qaL\xf6c;D\x96\xad\xec\\\xe7\x0e\x8d\xc2\xb2T\x93\xc3\x0e\x17\x92\x96\x9a\xaa\\\xfc\xd4T\xe5\x0co(=9\xc5_U\xd6\xa3e\xa9$\xcf\xf0\x87&5&\xe2\x86\xd4\x97\xc7\xe2W=\xb9\xd7\xd2\x0b\x14G\xcc\xa5Q;c\x18\x06}\xc6\x07$\xec\xfa\\|\xf34\x85_\xb6\xa1l\x03q,\xfc\xf1er\x1ewL\x05\x11N\xf3\x0f\x15qS\x8a\xd9\xd6\x07\xc8\x0b#^j\xbe\x14\x99kc\n\x96\xb3\x83sK\x1b\xc4u\xb8td\xcc\x19\x0b\x13\x9f\xb4\xe5\x89\x8d\xa1`\xe1\xd4$\x8d\xc5 \xa5\xf2F\x05\x92\x0d\x136\xde\xb2c\x18\xc0\xd8\x1c6h[\xd1\xa2>\xf2\xf2\xf8'\x95[\xa6\xdeUT\x83\x9d\x80<\n;-\xde\x12\x0e\xcb\x9b\xcaD\x16\xeb\xe3l\xc7 \xd8\xf0\xe6\xd8\xce\xd3\x95j6\xf4\x07(c\xf0\x88\xe6\x99J\xa4\x07\xea\x9c\x05\"?\x97dK\x91+\xe5\xa3\xe2\xe2\xa5g\x1a\xc3\xa7\xf6\x91\x94\x16\xf4\x86\xedW\xb7\xac\x9a\xf9A\xf1\xe5C!\xd0(V\x10\xb6\xe1\xdc\x86t5sD\xc9DJ\xbe\x15\xbf~ \xfc\x16\xd0\x15\x07\x0b\xab\x0eJ\x1f\x06\x11\xaa\x95\xa3'\x03\xffhg\x00\xe7N\xc4\xeb*\xf3n\xad\xe8\xe5L\xd2\xa3\x05\xbd\xa8\xa83Q\xeeX\x7f\xa2\xe2\x0f,\xe5\x8d5\xb3\xbe\x9en\x07\xf33\xd8\xd9\xf6\x0e\xf6?\xf1a\xff1\xc6\x03\xb6m\xc5\x19\x96\xa5\xcc\x8c\xd8H\x91\x9b>@\xb3\xd1.\xfe\xbd\x8d!c\xbc\x05\x83\xc7\x02\xc7\x87\xb8\xb9\xbf\x92.2\x15s\xdc[j\xd8\x86\x86_\x13\xa7R\x13\xfb+\xd1#\xd5\x91i\xac\x82N\xb7a\xccG\xfd \xc4\xe7r\x1fa\xf5\xac\xb4\xbe\xe3\x0fa\xa8\x8cG\xe9H\xee*.\xd8\x8da[e\x1f(\xf8\x9f\xe7\x86\x11\x8d\x85L\xc8\x1f\x8f#QF}\xcc\x0f\x00\xf1o\x82\xff\xba&2\x15\xd2X\x82\x11\x04\xf8\xe72|\x00\x0b\x0e\x11\xec\xb9\xe0\xbb\xc9k\n\xb5\xa1\x8b\xf1\x9a\xf1n\xd2\xe5N2\xc3 \x8a\x87\x18#!\xc8\xc6RH\xdc\x07|`x[Soat\xe3\xc4\xbc\xb2X0]|s\xeb\x16\xc6\x01\xa3h6i\xa8 :h\xc5\x1c#X\x90\x90\xa7bz\x9c\xdf(\x1e\xc0\n\x1e\xc19\xff\x87S\x82.Y\xe2\x14\x060E\n\xb22+I\xd4\xc5\xbb\x9bK\x92s:\x12\xfdV\xbf\xad \xa4\xcc\xfc\x9d\xfaP\xf4|\x8e\xb4\x0b\x060\xe9\xa0L\xa0\x18|\x05\xb2\x80/\n\xc6\xac\xcfj\x8a\x93\x1c\xd9\x98e\x88g\xdd\xa3\x01,B\x8898\x16\xb8h\xf8o!\xdc\x16*\x07\x85VSR\x0f(\xda2\x85O\x96\xee\xc8\\8\xce8\xa5B\xfcp\xae\x9c\xdc\x87\xa9S\x98\xe1\x0bs\"\x84\xeeG\x8f\xf8\x81\xeeZ\x18>\x80\x13\xa4\xae\x8b\xea\xf5\x10Ns\x12\x7f\xb2\x7fu\"\x05\xb5\xed\x01\x04bK\x85\xf05\x9c\xe0&\xd9)!#\xf7\xd3\xf0\xc4,\xdc\x9a\x177\x15X\xfdH\xaa\x11E;M\x90\x16|ev`\xcc\x97(\x15\xfb\xe1\xa1\xd8\x0f\xb5\x0f\xca\xe5,8%\x90\xef+\xea\xb2#\xa9\xca\x8e1\x8ar\xe3\x94\xa4KTkT\xc7\x89`\xbbI\x8d\x9d_V\xba\x1d\xc08\xce\xca\xbd*\xd5\xdd\xabf\xbe\xeeU\x9cL\\\xb0 \x16\xe2\x0eFj6\xa3\x1b-\xc7\xf1c\xbf|\x91\xb9\x9e/\xb2\x16A_eY[\xba#B0)\xb6\x93 F \xc6\x9a\xbe'\x15\x10~$\xf7l\x82\xeb++\xfd\xc5A!RJ\x8aU\xbf\xe9\x94\x92\xb9\x88GK7@\x8f\x04\x1e)\xa7\xc9[\xb7D\x82\xa8\xca+9A\x92\xa2 \xdf\xccrcY\xa9\xb7])\xe6\x84[\xf5.*\xe5\x94\xce\xfa\x9co\xcas\xaf\xf6\xdf\xb9\xdbw\x16z|.\xdc\xe1>\xb0\xaa\xbe#\xbf\xb5\xb1\xdf\xcd\xf9\xff\xfa\xfa\x8e\x1f\xdcP,Ka\x8e\x9b\x08gk\xf0\xb5oJ\xbe\xba\xea\xe1\x9dfT\xb1+!\xaa\x14\xe1(\x02\xe1\x8f\x03\xb4\xdb\xf7OD\xea \x91;<\x15\xf6e\x8f\xdc\xe1^sz\xeeT&\xac\x842a\xc5{|\xcd\x02Q\xdd\xe6\x88\x05\xadP?K\xeb\xbf\xbb%\x0ci\xda\x89\x14KoM\xbd\x14K>8)\x1c\xfc\xbcHI\xc1,\n\xff\xa2\xe2\xf8\xf9\xd1\xba\xb4\xa9\x12\x06\"o\x93\x19o\x85~\xa2KQ\x18K\xf28\x10\xda\xd3\xea\xe7>|\x0d\x89r\xdcD\x1b\x910V\xb6\x93\x9fZDXu\xc9\xfe\xb5\xf9H\x15\x0bJk\x96}\x14\xf6Y\xf6\x92\xac\xc8\xe4\x98|\x0e\xc2\xcd)3\x19\xeeZ\xb8\x86\xb0?M\x93E\xc0;x\x1d\x8b|:\x1anr\xa2\x9b\xd7p\xb5\x8e\xb9\xba\x933:\\\xa0\xf1L\x95}c\xa10\xfe)%\x86\xe6\xdc\x1bkj\x0bND\x96J45(/\xb5X3\xabm\xa6B\x80\x18Qi\x19\x0e\xf7F]\x8b\x9d\x0b\xd5\x9eXG9\n\x91j\xdd:\x081?\xe9L\x1f+\x12Z\xb5\x10\xcbB)\xb2\x19+\xc9\xb0\xf1=\xb9\xfc\x9e(\xca!|\xc3%\xe5\xc8\xcc\x9c\x0c\x07\xe3kt\x7f\xf7\xcc\xbc\xfc\xa6\xc3\xeb\x04\xdd\x954\xaf\x93\x93eA^\x92U\x01U)\x0bE\xf1\xdaI|m\x9d\xbe\xb7\xd0tc\x8f\x9b7\xff\xec\xafm\xfe\xd5_\xdb\xfc\xc7\x8e8\xb6\x7f0W\x8aXV\x1bA\xbd{~\x83o\xf1.\xafN\xad9CR\xe6\x08\x8b9\xaa\xe2%\x9d\x0d\x9d\x97e\x92\xe5G\xb2\xfe\x19\xfa^9\x15b\xfe\x83\x05}7\xc9n\x02\x0b#\x12\x99*\x8a\xf09\xcd\xe2\xa2\xd3\x0d\x15\xf4\x8e\x12:N\x97\x13R4\xab\xda\x97-\xaa\x176kv\x16\xdb[\x1c\xc7\xe3\x19yO\x8a%\x86Q\x12\x1aaE3\xe9Q\xf8\x91\xe2\xe3Z\xd9.W\x04\x93\x12C\xcc\xce\x14P\xa7P\xadzV\x9e\x8c\xa1\xf4:\x14\xbc\xa1]\x1da-v\xa5y\xa7n:?\xa1\xef\xe5\x07\xc1\x9b.\xa9^i7UW\xa2]\xbb\x98\xaeXx?'Vu)\xbbf\xee,_\xab.\xe4RHg\x1d[uU\xfb\x0c\xdd\\\x87\xbb\x1d\xd9\x90\x00\xc3:\xd5\xbb\xda\x87{\xa3H\xfb\xbb\xe5^\xd8\xbc\xdcfQ+\x19Q\x97-\x8b\xb9\x1f>\xf2\x95\xc2\x15\xfe\x9d\xcbLp\x00\xbf[\x11\xa9v\xd3F{?ws\xba\x9d\x148o\x12\xdd|s\xd2b\xa7\x01y3\xa4\xd3\xa7\xa82\xc6\x81bbz7\xc5\xadj\xa6d\x18&\x8c\xbe\xf6\xa2\xc4Nn\x14\xedp@N\x02\xe43\xbck\x13\xa0\xac\xc3\xd9\xa6N\x83\xf2\xa0\x9a\x91\xfaXZ\x04mD)\xeb\x98\xb2\x99(\xf9\xcc\xb9\x86\xc3o:\xeb*o@i\x94\xf8\x9atR\x19t\xb4\x93\x04F\xc9\xaf\xf6\xb7\xcf\xa5OZ&h\x83\xdbE\x05}\x13\x9c4H\xc9\xef\x1cZ\xcbHC\xb6\x18)\xd0\x92\xe3\x9bq\x01\xc0\xa2NhUE\xb4\xec\xf1\xef\xbb=\xd7\xdc\x1b\x9c\xea,\x16m\xeev\xba s\xe4\xe2\xb2\x88`\x7f\xd02\xe7\xcd \xa9S\xe0\xa3y\x06\xa0sW\x1b\x8c\x13\xf4\xbd(\xa4D\xdb\x961pW\xa8Yj\x90-W:\xc1\xb2'\xd4\x04\xc8\xbc\x8f;{\xb0cHa\x0d\x92{h\xd2X+WP\xa7\xb1\xb5\xc6--_\x8f\x8d\xeb\xe0\x0e\xa9\x81\x97\xa3\xe6\xe8\x90\xff8\x0f\xd7Q\x8c\xe4*\x82-\x1b\xec\xcc\xb1E\xae\x19\x19\xcfx{\x0f^[\xfe\x0f_\x95_\xc7\xc9\x8e\x9b1k\xa2\x9a\x15\x8f\xcf\xcbD\xbd~\xc7o\x86\xc7\xd4\x8a\xf7\xb2\xb5U\x11\xc4\xccq\xfaf\x7f-;P\x8e\xa7\xcd\x0bH[\xbb\xa1\xb4P(t\x98\x0e\xa6\xc0\xe5My\xae\xc5 \xd8\xcf\x98\xa5\xb9*/t#|\xe2p\xeb\x05%5\xe8|\x02~P%R\xdc\xde\x8e \xe3\x0d\xe5\x12\x02hn\xb6\xe7\xf9\xe4Sm\xfa\x84\x81Z<7\x1f\xe1\x03\xa6&\x1f\x918*/v\x03m\x036\xc3\xd3\xf9S\xe1\\\xdc\xc9\x8d\x80\n\xca\xa8s$\x89\xfb\x0be\x08K|\xb8\x12\x906\xb1b\xb8\xeb\xb0\x9a\xa9\x0b\xb3Y\x1a\x13\x83\xeaW\x1d_\xc6h*\xd4r\x02}\xc6\x8a\x882\xb7:\"\xcf\xd8\xcap\x82U\xf01\xf3;~\xb6\x81'\xbe\xc4\x8fX\"N\xf9\x0c7r#\xe2B\xc4\x1e\xdcF\x1f\x1c\x0cDD\x9f\x1c\xf9\xfe[Y\xc1,\xeb\xcc\x9b\xc4\xd1\xe6\x9d\xa8cf\xb7'|@\ni \xc8\xe1\x04\x0c\x12X\xaf!\xe6\x7f\xc5e\x8f\x1c&}\x96 \x15\xbav\x10\x07a\x05)\xf3\xa0\xa4\x93w\x0c;&\xcc,`0\x10\x9e~\x01\xdfl\x85tD\xda\x85\x03c\xa5\x89s\xe9\xd5\xe8>vR\xc5bV\xe1\x06K\xac\xac\xa5\x8c\xa1\xcb\xca\x80\x18\xc1\x16\x9eR\x992\x8b-\xcb4>A\xda<+<\x8ea\x99\xe1\x86\xc9p\xd3*)\x10\x93E\x15\x15\x93\xb6\xcd\xe9$\xa6\x9b1\xf8\xb1\x85\x11\xa4_\xa6\xa7\xca\x9c\xe09\x96!\xda\xa4\xc2\xbcf!F\x11\xb4\xdd\xe5\xaf\xf45\xbe\x9e\xb2N\xda\xf4x\xff^K\xe4\xd6\xd3)\xb4\xd1Zm\xab\xf8\xec\xeb\xe3\xb1\xbc7|\x96\xaa\xb5z\x10B\xd6yZrxmo\x17\xf0HC\xf9\xae\x93\xd8+\xfa\x1d\xba\"\xe0\xf9u\xe5V\x13\x10T\x13tM\xa1\xe4\xaa1 \x96\xd2\xe2\x11\x0c\xb0g\x91\xa8\xa3\x13\xc9'\xcfU\x92\\\xf4\xc6\xd05\x95\x9b(\x08\xeaXk;0\x7f\xf2=0\xddd\xfb\x86x`;\x19K|\xf6\x08 \x1c.\xef\xe72\xc8\xc2E\xa7\xba\x11\xdd\xc1i\xa7\x9d\xa4J\xa4\xe4\xc6\xd3\xb2\xc9u\xa7aE\xb5\x8a\x16\xdb]\xb8\xd9\xee0\x02C\xa0\xe5\xcd\xf0\xdc7\xb0,Y\xee\xb3.\x9b0\xf7_~\xdel@\xb0p\x93\xe3\"\x19\x12\xb5\xabk\x92uP\xa4De\x1d\\JZ\x11\xd6Y\x7f\xa4\x0cY\x832d\x918\xc2\xb2.\xba\xd0-7L+\xabG\x07\x8f\xcf1\x04+\xf9\x8d\xf1/\xde\x81\xe0\xf2\x8a\x1a\xde\x8ee<\x93\x83\xbd\x87\x8bY\x92\x12\xb0:\xe5\x81\xae\x0e@\xdb\x95>\xf3\x04\xfb\xd8\x88\xe6\xf9 ?\xde\x88\xe1\xe3\x8b-\x01\x0e\xfcE:e\xa9s$\x07P\xce\x86\x04E\x07\xed9WUC\xac[\x99_\x85\x89\xb2e\x1d\n\x04\xd0\xb8\xe7-\xf4\xbcJ\xe1!\x16\xac\xb9\x05q\x80U\xfb\x90(\xa7\x18\xa8\x0d\x07*M7R\x04*\xcb\x01$()\x86\xa5$\xb1\xb5\x8b\xc59\xedxeW\x95\xf3\x85\xe5_\xb7K(\xfd\x15\xa6\x8c\xdc.\xae\x81\\\xc5aG\xa1\xf3\x1b\xa3R\x92\xadJ\xbc\x94\x14\xc4\xcbd\x02\xea\xdc\x92\xa9\xe672\xcf\xa6\xbe\xf4\x06d/\xb9\xa4\x00\xa5\xfb\xf5po\xc4%T\xd4\x10\x06K\x15O\x81\xd8\xc5\x8f\xd18H\xab#\x93\x96\x84#\x8f\xc4\xf9\x99v\x93E~-\x85sn\"K\xa3\xa5\xad\xe5u\xb6\xa0\\\xb4\x90\xac\xa3g\x97\x1di\xbb(`\xd7\xaa\xdd C\xbb\x01E\xf533\xfd\xec\xa4\xa8\xc2#\x13]@M\xf2\x8b\"\xb8Kk\xda\xe8\xccN-\xc5\x9eT\xda\x8d\x9a\x83 \xeb(\xe2$\xe1>\xccq\xe4\x99(\xbdx\x08\xe2C\xe9^\xc6\xac\xee\x83e\x96i\xeb\x11\x91\xf4\x8b,g~\xd2\xacb\xa2\x022\xbc3\x8a\x80\x0e\xef\x8c\x10\xcb\xc9p\x7f\x04;@\x87\xfb\x86\x0c\xc1aU\x90\xbc\x91\x95\xc1j\xb1I\x86l\xa4v\xd2\x00\xf6\xdbm6+\xf4\xb9\x1a\xe2\xa0\x1f\xee\x99\x06&8\xd7_e\x8d\x0f\xe1\xd6\xfdR\xfc\xfa!h(\x04m8\xf5\xc2\x89S\xc2\xdfE\xc3+\x0f\xbb\xd1\x17\xe2 \x1fJ\x89\x1bV\xbc\xc8\xc9d9\xde@\x87![\xff\x15=+\x05;G\xd1\x87S(*,\xf9\xf2\xdd\xb6\x0c\xd4\x8a\xe5&\xdfWG@\xca&\x03\xaf\x0f:\x12\x89\xf9\xcc\xc3\xf5\xf4|\xff\xd5\x8b'\x13\xf5s\xec[N%\x8f\xbfu\x0b\xa8\xa6\xbf\xad\x85M\xae\xd7U4\x82\xf8\x05[\x03\xde\xedz-b[\xbd\xc6\xfb\xb2\x8a\xbf\xf8\x02\xa1Y\xea:\xf91OH\x90\xfbz8\x97k\xd6\xf2\xb3\x04\x81\x84\xf3\x84\x06u\xcb\x14\x0c\xfc\xf6u3\x0b\x9f\xf0\xf3\xac\xce\xc4\xdfE\xbcv&Bx\xb6T\xfd\x0bM\xa2\x81Z\xfa=i\xa9\x10\xe4\x95\xd9\x92\xf0\x81\x06\x94\xf6|\xba\x05Y\xe2\xc1\xb9\xe5\x9e\xc0U\x97\x022_\x1f~2\xc1O\x01\x86\xb0W>\x97\x1c\xdf\x1d\x07\xfe\xf5\xf5m\x1e\xec\xff\x06\x9c!\xaef\xa7\x00\x86\xba \\\xce\xe4\x9a\x80\x92X\xe0\x02\x88H@\xd2/\xb29\xb9N\x07\x1c\xbd\x1c\xcd\xcb\xfaR\xffFFJ\xe5\xc7\x8c\x11\xbb\xa5\xb3\xaf,Gq](\xe2\x00]\xb3\xbcy\x81\xf8\x87\xce\\\x08\xc2\xc4\"jr\x90\xfe8\xa3\x05\xcb\x97c\xd4,\xfb\xd1\xf7\xaf,\x8e\xdeI\x99\xcdFD a\x89\x116\xcb\xb3\x0bD\xf1\x0f\xab\x059\xca\xf3,\x0fzG\x97\x0b2fd\x02\xc3\x97\x11\xfc4\x02\xb6\\\xa4\xe4\x00z\xb0\xdd\xcaHk\x19\xc3?\xdd\xd1U\xaf\x88\x8cG\x08#x\xea\x1b`\xf5\x8b\xbb\xcd\xa5\x00[^\xb1A\x19\x17x\xbd\x9a\xfe\x87\xbb\xe9z\xc4V {\xfaUc\xb88\xb7\x15j\x81\\^\xbd\x12\x8f\xea\x1c\x9c\x14\xd7\\zT\xee\xf6\xd6\x13\xb41\xce\x9aY\xdd\xf1-\xe9\xa4/\xf3\xac\xbf\xd0\xb3\xcbW\xdf\x0bm\x13k\xa7.\xb5\x8c\x9eu\xe6\xba'\xf0Hf\xa3<\x10\xc5>\xe0\x10v\xf8\x0f\xbfs\x9fZ\xb6\xf2\xb9\xf4E\xfb\xc9x\xe0\xa3\x14m\xe7\xa5\xf9\xd3\x9f=0\x1f\x8f\xc0\xd3\x94@\x96\x03\x06E\xef\xa4\xc9\xa7r\x0f\x98I\xbc\x18\x14\x1f\xb5\x81@X\x97\xd9\x0b\x16yG\xe2d\xc1A\x94$\xd0\x99SLX\xb0\x13Z\xb0\x98\x8eI6\xd5*\x9e;\x9c\"\x10r\x88\x1e\xf5Ok\xc9>\xf3\xc0\xa6z.\x9bpr\xe8\xfc\xa2\xa8\x96\xea\xd6\xb2\xc6U(\xe5'\xb2*\xac~\x89\xea\xda\xf2\xe3\xca\xf4\x8b\xe5+\x8f\xb7\xf8\xc5\x8c\x11\xae^\x9d\xa8K\xceeB\xa6 %\xef\xf2lAr\xb6\x92\x9c\xaf\x7f+\xfc:#L\x13-7\x19\x83\xbat\x12$\xc2&7j\xe2\xaa\xdb F\xbf\x8a\xdax;\x8fo\xd3uF\x1a\x89\x98#\xe8=\x8d)\xcd\x18o\x1d2\n1\x85\xa4L\xcf\x9b\x93q\x96O\xfa\xbd\x92d\x8ah;\x07\x8bi\xba\xba3\xb7\xa9\xcb\x12\x8d\xd0\xbc\xae\xfa\xa7 \x9d\x04U\xd4]\xf7gW0\x8e\xd9x\x06\x086\xf7\x80\xae\x02\xe5\x9a\xae\x8e\x88X\xea'\x90\xeb\xa7\xf1\x9c\x94\xa1\xc3\x9fD(^\x8c?&d\x1a/S\xf6\x13\xe7\x960\xe7\x8c\xb5\x1b\xfb\x00\xc4\xea\x88\x80\xc3\x8f\xa4\xa9\x98P\x97\x05q2\x94)\xcaS\xab\x15C\x9d\x99t]\xa5\xe4\xa7\xb1P\"\xda\xb1\xa9h\xd3\x7f\xb1\xe0\x1d\x8b\xe0#gL\xde\xdd\\\x95\xaew7Y\xa5\xebm>!9\x99\xbc\x8e\x17\xf0g/\x82\xdeU\xbbV\xd7\xbbk\xd4\xea:\xd7k\x04\xf0\x95\x125\xfc\xed\x90\xadyh\xc9b:\x18F\x8a\x1f\xd2PT\xa6m\xd5\xd0z\xf7o\xaenS\x96\x9d\xe1S\x92I\x95\"}\xb4\xb5{\xa1\xcc\x88\xe0\x1c\xf5f\x95\xbf~g\xae\xdaG\xef\xae_\xfbHo\xb8]\x06\xb5\xd6p-\xf5\xb8\x0f\xb0+\x90U\x9f\x06\xa8\xb8\xd1 \xa7?rv\xbf\x91nDGD+\xf2i\xa30\xd8\xd2\xba\xdc\xe8E\xbe\xb9\x80\xa1\x0e\x90\xa1\x05\xd6\x12\xde\xe57/\xbf\x12\x17\xed\xa1O\xf3l~DY\xbe\x12\xbaRM\xf9\xd3\x8d+\x9b\x15J\x10\xc2\xdf\xa0U%\xc1#\xbf6\xab\x11\x85Z\xb7V3BEH\xe4\x12\xd5?\xb2.+\xdf\xd5\xaf\x99t\xe5$\xfe\xd5\x16\xd4\xd1\xc2\xf4\x9d-\xf2^\x18$\x1a\x84dRh\x84t\x00\x1fX\x1d\xbe\xc3\x99\xaanP\x83zY\xe7\xc0\xb0o#`\xc1\x1b\x16\xc1\xafa\x04o\xaeA\x81\xdb\x82\x1fR`\x13&\xd4\x9ao\xc4\x0dt\x96K\x13m\x8b\xa2i\xce\x86Q?rL>oD3\xb0q\xf5e\x9b.\xbc\xa9\xc3\xcd+T\xe8\\\xab\xc8l\xc67\x0e\xdf\xef\x159\xdc2%\x1b\xac\x8dQ%\x1b@\xa3\x86\xf74A\xd7\x1d\x89y*+\x87=8\xfc*l\x05\x896\x80 0\xb7\x13;t\xb2h\x06\x02\xa7\x02\x9fk\x87\xcd\x06`\xc8\xaf\x03\x06\xda\x00\xc3<^\x18\xf0\x15$\x18Z\x85_\xde|\xd9\x19\x119B\x94\xda(\xa99\xe0\xd6&\xaf\x99\xf3<\x1c\x97I\xc0l1KW\x9c@\xa9|\xcb\xff\x14\xeb\x10\x8a,=e\x0fV\xd5y\xd9|\x16\xc9|\xcd\x14\x0eD1 SWa'Q\xd8\xechB\x1b\x9f\x0e\x96\xd0\x01Au<\x99\x8f\x0bZ\xd7=\xb5\x0c\x1aV\xd4m\x82\xcd\xba\xa8\x9e\nye\x19\xa2N\xef\x8bRL@\x83\x8aP\x1a\xa2\xa2Y\xac\x02\x16\xc4G\xbf\xb0\xd2\xbcbZ\x0e\xd7RT' \x0b\xde\xb3\x08^\x86\x11\xbc\xd7\x97\xca\x14\x08\xe8I\xc4\xcbh\xc06%\x7f\xffe\x9b\xab\x93\xd2\xd8\xd7\xc7\xb8\xe9\xbcy3\xdca\x08r_\x96\xcc8S?\xbc\xff\"\x84\xbd\x11\x0ce\xbe\x18\xca\x14\x862\x85\xa1\xa2\xda\x96\xc2K\xaf\x9aa,x\xc6\"\xf8!\x8c\xe0\xd9\x97s\x10\x0e\xe4{v#\xc8\xf7Wb\x18\xf3\xc7/\xe3dn\x0c\xbf\xfe\xc3HT\xe1\xcf\x86\x88\xf4Jr\xba\xaft\xe8\x10)\xcct\xf1\x10\xedu\x94,D\xb3\x9fW\xff\x95\x88\x84\xc7\xa5\xed!\xbf\xbeb\x81\xb5\x88\x9e\xe6d\x11;\xdf*\xd1\x15K\xf4\xa30 \xaa\x12\xa3\xd8Z\xdd\xdc\x157-R,\xbf\xdaz9#\xa2\x1b\x81\xfd_\x83\xe8\x1e\x91\xa1~{\x01\xca\xf0\xca\x9a[\xb8\xa3\xa2\x86Z/\xd6\xe5e\x89\xde\x95\xae\x11\x82@\x0eS\x18\xa0~)\xde%\xee|S\x0e\x1e\xf7r\x06\x87\"\x91\x8b@\x89\x1cQ\xa2\xba\xb9'n\xee\xb5\xf3\xe5\xeb\x97\xc5e\xd1\x83&\xd4\xce\xe1z\x1a\x827\xf6G\xcf\xec\x8f^\xd9\x1fa\x8e\xaa \xa7\x11\x9c\x10.ZP\xed\xcd/T\xb0.\xa9\xe4A\xb7\xa1g\xd5\xb0\xd6:\xdc\xf8\xf8\xaci\xd4\xf9\xe7o/he\xf2qw\xe6\xa9L\x10v\xd0YY\x1d\xdd\x85\xe6\xf5\xcd[\x1b\xdc\x90\x18\xe2\x94ks\xe1\xe2\xeba\xf5\xb7\xd2Y\x18b6\x9b3\xf1R\xfeV\x92\x89Qe%\xfa\xbfuK\x1b@M\x9fk\x9eli\x1f\xd7l\x03v\x9dT\xff\x84\xcc\x17l\x85br\xf9c\x001\x95\xa2\xf6/\xa4\x9d\xf2\xb41UO\x8dq{\xd1*+\xb5\xb0P\xffM\xb3j-\xe9'\x9a]P\xf8DV\xd0\xfb\x1bl\x03\x81m\xf8[\x0f2\n\xfc\x97\xc2c\x8b\x91\xbc\x06\xbd\xad\n|\xb2\x98~Y\x8b\xc3\x8c\x14\x1ez\xc3\x9a1\xa1\xbeD\x85\xd2ku\xe0V\xad,\x846\x9a\n\xe7\xe0\xa0Z\x87v\x1d\xe6\xda\x1ax*\xd7\xed\x1b\xc7OCZ\x9f\xa9\xccS\xea\xca\xac\xd8\x9a)\xeb\x9ci\xfb\xe8\xae\xcd\xf4\x86\xb4\xfd\xce>\xae\xcf\x1eX!\x91\x07\x06\\k:jZ:\x00])e1Y_uk\xd8\x8dS\xbc9v\xf3\xdf8C\xe25\xc1\xff\x84 \xa1\xbeA62\x0dT\x1b@\x06\x0d\xf8\x1a\x04\x1ap\xa8w\x82\xcc\x16z\xd7j\xc0\xb1\x15\xa8\x8c\xc5\nuxO\xd7\xed\xd3\xf2\xd7\x19a\xefT\xf3o\xa7\x9c\xb4\xd8\x11E\x1b\x7f\xde\xcc\xe4\xed\x17(\xb2\xec(\x99--\xfe\xebu\xdd\xcb\xb0\xaf\xee\xf6\xde\xa3\x93D\xcf\xab\xb3\xc2\xdd\x993'\xfd9E\xff\xde\x94\xcacgk\x1c\x94\xc9\xe9\xf9\xb3k'\xa7O\xae\x9d\x9c\xde\xc5\xc1\x97\x92t<\x99\xd8\x8b\x11\x18\xb6\xa6\x17 S7 \xb7\x82-\x04\xe1\x16\x19N\x9b9\xa4\xeb,zF+[UFK\x0bUy\x1b\xeb`\x97\x0f\xda\xe5\xb73*Jdk\xd5\xb2\xab\x9b?'\x18\xd4\xa2\x1e\xf0\x9f\xd5\xc3V\xf9m\xf5\xe0\x19!\x8bF\xf1\xed\xfa\xc3F\xb3\xeaV\xfd%c\x01\xef\x8c\x1aJ\x8dg\xd4XA\xbc\xbc\xdd\xae \x9eQ\x8f:\xe0\x19\xed\xdb\xeb\x80\xe3CW\x1dp\x16\x144\x82#\x8ey\x05\xbd1\x07\x93\x82\xa2-Yf\xd0\xf6\x96D\x02Nq\xfb\x9f\x88\xb0?\x9bZ\xbd1\xa9\xaawL\x98U\x9a*\xbeH\x9a\xaa\xb8Vg\xbb\xf1d\xe2\xdb\xee\xa4\xc0\x9aq\xac\xac\xbcC\xb7\xb7CH\x026\xa4\xa3\xb0}\xec85\x8a\xe5\xb1\xcd\x8f\x1d\x8b\xfa\xc6x\xec(\x07\xa9Z$\xc1p\xb7yx4\x96>\xa1\x8c\xe4\x05\x19\xb3\x9b]\xfe*\xa3\x12\xf3\xab\xbd.0\xc4/\xbeC6\x94\x98NeS\x18\x9f\x17\xcb~-,0\xf0\x14N\xbfg\xd6'\xe7$_y\xb4\xac\xae\x12\x1dJ#\x8cE\xf5\x0b\x02 \x90\xcd\x93\xa4\xc5\xa6$\xeefZ\x1aHR,OY\x1e\xff\x7f8\xf2o\xc2\x91\xeb\xc6ry\xa2\x08&\xb2\xbai\x14Q<\xa4\xcf1\x85`\xc43G\xab\xe5\x10\x81\x93\xebi\xf4$9H7I=/K\xaf6\xd1q\xafCM\xd3\x1e\\[\xe7T\xdf!Y\xce|y\x819\x0d~.\xbdw:Nf\xde\xee\x93\x95\x8f^\xc2\xd08\xebn\xff/\xd2 \x15\x7f\xadz\x85iZ\x85\xb61\xcf#3t\x90c\xcc\xb9\xafa\xd88\x1d?\x85Xk\xc4\x9b\xea\x80L\xf9\xb0;\xd5[\xc5\x7f^\xfb\xb3\x99\xc2G\xf65\x8f?\x91\xe0\x0bu>8\xfb\xa48FM|J\xdb*\xa01\x8d`\xcaq\xac\xf7\xf7\xbf\x9f\x9c<\x7f\xfd\xfa\xe3\x87\xc7O^\x1d\x9d\x1c\x1f}89\xf9\xfb\xdf{mG\x90\x05\x7f\xbb\xf0P\x1aM:\x11\x81X\xaa5\xb1f\xb5&\x05\x05U([j\x88\xb1\x1c\x9c<4\xa5w<\xae\xf0|\xc1V\"|\xba\x04\xa3\x9f\"b\xd6\xbd\x17\xebJ\xae\x85#\x08\xa3\xcaf\xdf(_G\xd5\xb4\x88\xc8\xea]\xad)\xf3M\xc2}\xee\xa4Kc\xcc;\x10\x8c\xf9xg40\x99j,\xed\xce\xbf@\xa5u!TZg\xb4\xd2d]\xfc\xbfM\x93u\xe6\x86_\xa9\xee3\x14X\xd4\x7f-\xe8pJ\x95\x03\xddBSj-*\xa5\xd6\xa2\xae`R?\xeb\x0f$k\xb0\xa0\xba\xcej\xe1\xa3\xf0Y\xb8\x14>\x8b.\x85\xcf\x82\xaa}\x08\x038\xa7\xf2\x06\xdf\x8a\x88\x92\x11\xb0`N9q\n#\x98\xdf\x9cFh\xfe\x97h\x84\xe67\xa9\x11\x92\xfe\xf7.\xc5\xd0\x9cV~\xfa\x82r\x9f\x19(\xf7\x8aFp\xca\xf7\xc9\xdc\x83\x16\x9flJ\xd8N\xffC\x84\xed\xc2 \xcd\x95 l+>\xde\x13\x1a<\xf7/\xbby\xf4\x05\x84\xed\xad l\x97\x1aa\xe3\xb7\xfaKZ\xcc\x92){\x9c\xa6\xbe\xd1\xfc\x97\xde\x8a\xee\xa7nE\xf7)\xad\x1clO\xf5\xbdvA\xe5\x0d\xb9\xd7Np\xaf\x1d\xd1\x08.8\xb5<\xba\xb9\xbdvt\x93\xbb\xe2\x98\xc5\xe3O0\xe4\x1bb\xd4\xde\x10G\xd7p\x05\xa9\x1b\xe3g$6\x14\xaaG\xbd\x15\xd1\x92r\x93\xf0\x81H\xbcNvv\x1e\x84\xf8\xbd\xf0\xaa\xb2\xef\x058\x04\x99\x84\xc6\x14\xf7W\x1b\xf9\x82\x90O\x1b\x01\x88\x8f\xba2\x1c\xf2_\x86\xec\x1d\xad^\x96\xc5\xac\xab\x97J\xdbP\xae\xaf\x9f\xd6\xa1\xd4\xf4\x95\xce$\xb8\xfb\xb7[\xedD\x1a\x03\xcc\x07\x1e!0\x9bo\xc1\x0e\xecq\x88?\x12j\xc3\x9d\x9d\x10?\xb3\xf1\x05\x98Y\xa5lcH-\xb9\x0f\xf9\x825\xd7\x82_\x86D\xcbu|\xb4\x04S\x96\x9c6\xae\x87\x16o\xd5\xac\x18*\xef\xd6\xcb\x9f3\xe9\xda\xff\x98\x9a\xc5\x93\xd6\xe2=\xe6\xa4\xc8C0\x91\xead\xb4u\x05$\x0c\x05G\xe4^\xbf*\x07I\x87\xd4\x82\x0c\xb8\x19\xba\x1d\x9b\xaa\xe4\xed\xcb\xf0\xa0\x0d84&\xb2\xe4\xd9P\x00*4pT\xa7\x10\xeb\xdfN\x9d\x0f-2\x8aw\xca\xc0X\xdb\xfa\xb3\xc6\xfa\xd3\xeb\xae\x7f\xdb\xfd\xba\xb5\xfeYge*\x1de\x8b4\x19\x93`\xcf\xdd\xa6<\xa66i\x97\xa3\xa1\xa7:\xca\xd4\x95\x0f\x067\xbb3\x9d\xa2\x8d\xd67\x9fF\xb6\xb8\xce,6\xb12}i|\xb6D\xa9\x06\x06m\x82W\x9c\x15q\x83\x8d#\x89\xcf\x91\xc9\x89\xca[\xe9\xe8Q\x0e\xd6\xc7\x15\x8cbq\x11\xa2\x7fe\xd6p\x7f\x08jM\xd7-TeG\x17\xa49\xfa*M\x8f5\xc6\xaf<\x99\xf2\xda\xc9\x84e\xce\xb2:\xc9\xe2\x07\xcd\x83\x10\xeff\xee\xd3\xdd\xbd\x88yc\x11\xb3k\xad\xdfcj\xaa0\xddX\xc3\xcd\xd4V\xa5.\xa9\xad\xb9\xaa\x10\x94\xe3\xeacZMH\x9f\xcc\x86a\xc8\xfa\xcc\xf6,z\xa8\xa3kkAe\xdc\x81\xbe$\xd5\xd1\xa2y~\xb9\x90\x82\x8a=\x977\x10!\xaf%\x13\xccU0\x08\xd5\x92 \xe27y\x07\x13\xe85Y?\x1d\xa9\xd7l3\xb3\x0e\xb1\x9a\xa9\xf1\xec\xcb\xfdNn\xcf\xc8\x84N\xaf\x7f\xc5O\xe4]\xf1\x03\xb2\xdf\n\xd0\x91\xf0\xec\x17\xcb`Q\xd1\x98g(Z\xead\x1e\xba\xb2\xf393\xf3\xf9D\x05\x1c\xa1\xd6\x15\x85\x9a\x01\\\x1a\xa4\xf7c\x1a\xc1S\x93\xde\xf5\xc3\xe3\xa7/-\x9a\xd7O\xfc\xfd#\x0fi\xffq\xe9\xae\xd7\x91?\xb4.\xf3\x7frf\x94\xa9\x98\xe1L\xe7\x84\xb3\xa6\xa3^V\xd1\xbf\\\xfc\xaaS\x07\xbf\x94\x81o\x9d\xa7\xee\xb1\xd0\x03\x1cs\x80<\xa6A\xcb=\xc5\xd2\xe8\xbbnq\xb1D{\xabYR;\x9c\x86\xa8\xa3cCjH\x84k\x85\xa4\x9e\xbe\x8bU\xbc1\x0d#\xa8\\&\xb5\xd0\x88\xe3\xd5\xfc4K\xb1B\x82\xeby\xb3\xadf}|\xfd\xd7':|Z\xaa\x17?\xf9h\x03?\xb9\xb4\x81\x9f\xba\xb4\x81\xbc\x0b\xdd\xb6\xf6D\xb7\xb5E@\xfb\xcf+\x02\xf91\xe2\xcbDM\xe9\xbfdJl\x8f4_\xafH\xe0bE@.8\x91\xb9qE\xa6\xed\xeah_\xaf\x8d6zh0\x06U\xbe\x07\x8b\xe9\xcdi\xdaV\xd8c\xa61\xad\x15\xc4\xbbm\x9a\xc0\xb2\xe7tB.\xc9\xe4\x98|\xf6\x00\x8cF\xe2\xdf\xcb\xa8s\xbf^^\x1c\xfb\xb7\x8e\xc01\xa6\xc2\xf6\xd1\xccc\x82\xdf\x9e\xfa\xa4\x07\x9c\x85Y-H6\xc5\xfc\xda/\x8eQ\xe7\xc8\xff\x10\x16\x1e\x0b\xf8P\xbb\xc4\xdf\xf1\x9d\xde\xdb7\xff-\x13|\xfb\xa6\x9c\xe2\xdb779\xc9\x97du\x0dAC\xf8\x13\xd8\xfa\xa4\x93F\x8f\x1eU\xa3\x10\x98\xfcS\xcc\x89\x1aX\xcc\x1b\xa0\xebI\x0f1\xa1\x89\xb9<\xb8aXB+\xb4\x19,j\xc8\x125W\x9c\xa1\x84\x8ay\xbbYh.Sc\x18\x08\xe7@|6o\xa3oRZR\x04=\x84C\xe8aE\x028\x80^\xd4\xb3c2\x83\x01\xf4\x0czTu} \xa6\xbbp\x9c\xcaR\xfd[{\xe8\xb2\xba-,%\xfc_t3\xdaR%\xa4\xb4I\xe1\x9a\x96^4x\xe6\xf4\xda\x9c%\xc8\x1d\xe0\xc5\xb7}\"\xab/ ?\xcf\xbdVt^\x93C=\xd0\xaa\xdcb\xf5\x94\x9d^\x9d\x89\xb3t\xc3\x0d\x16A\xe6\\\xe0\x06\xae\xb5\x1cT\x1e\xc2>\xe6G\xe4\x98\x02\x07b\xc3\xb6\xb6\x83\xae\x06\xc0\x9a\xb5\x0e\xe4\xc8\xe0\x10\x82LR9l.\x94\xed\x92\xb2\xf4\xad\xa8\x18\x988\x0b2\xe7\xfe {\x9f\x9c\xcd\xd8\x86pS\x84Ig\x84*C\x94\x9b>I\xaeG\x9a\xdes\xab\xdd\x1dl\x83\xc6^\xfcq\xb7D*=\x19\xaeWWh\\\xbe&\x06?\xb9\xde!\xc1\xb9\x91\xcdz\x14yYD\xac\xdc\x1b\x8a\xa5\xc2LY0L]\xe5^5&\x9a3\xb3\x06\xe4\x80\xb9\x1f\x94\xba\xbf\x80\xd6\xfc\xee\xd5\xcb\xe9\x92\xbd\x8a7Q\x0f\x88}\x8d\x1e2\xbb\x11\xec\xecy\xf5\x92\x14G\xf3\x05\xf3\xb11\xc8^4\"\xae\xcb\xe9M\xc9\xfd@.c\x9d\x19\xf5\xe0EmFH\xaf\xd9\x8c\xb3%m\xee\xfc\x8e\xf9<\x0dH\xa5J\x12\xdb^\n\xb0\xe2\xe3\x0d\xf4*\xd8\xfb\x13_\xf6T\xf6\xefK\xa5@\xa3T\x1fI\x10V\x06)W\x06<%\xe5\x98\x88w\x17\xeb\x8a\xdf\xcb\xbc AU\xa7\\T\x12\xe7\xbbR\xcfy\xec%\xb5i2\x97\x99\xddU\x97\xa3\x94\n\x9e\x05\xba\xb9\xcdR!\xefJ?o}V\x8f|^\xc6\xe9&\xc2\xd69)\xc9\x86W\xfb2k\xa6\xc7V\xd3\x1dN\xcdk\x8b\x81Z\xfd\x13L\x97W+\xceDHu\xdf\xcd)\xd6\xab\xb7\xfeN\xc3\x86\xaa\xd5\xcd'\xd6\xaa\x1at\xf9\x8e5>&\xc6<\xa0\xea\xba\xf2\xe4\xf7\xc4.}\x93m\xb8\xdf\xa5\xf8\x81;|\xa3\xd3\xa5\x14Y6\xe7,,\xd5\";xn\xea']V\xc2%m\n\x97\xbc\xefa\x16\x01\x1d9\x05L/\xd6\x8aO\xff%\xf1%n5o\xf4M\x84=T\x8dQc\xa9]\xf3\x98\x1agd\xc7\x8a\xe8 7\xb3z8\xda\xb2\x99MF\xb1!rx\x0e\xa5\x02\xdc\xa6\xe3\xf1_-\xcf\xa1\xbc$r\x05\xfdF\x91o\xcc\xbc \xe8\x1f\xfb5\x9f\xc6\xec\xf5\xb5\xa51\xdf5\x02m\x13\xffb\xae\x93\xa4\xae&m\xabk\xea\xbb6\xb2\xd6Bn8k]\xc7\xa1\xae\x895o\xf1\x8d%O\xd9\xe2\x06ga \xd9\x1f5)\xc1WD\xd0\x8f\x12\x7f\x8c\xe1\xa7\xdd\xab\x0d\xcc\x90\xf5\x82y\x1e\xd8R\xa1\xa4.\xef\xfa\x14\x1f\x9fa]m\x9b>5\xaa\xfcd}\x07\xfe\x9cz\x0e\xddTnZ\xf8\x03c\xa1MUa:\xabU\x98\xee\xcc\xb6\x9c`\\\x90GV\xe4\x00}\x1a\xb1Z:\xc6-\xa9\xa4\xc4I\x04+\xceJ\xafB\x14\x13V\x95\xbf\xa7\x19D\xaee\xf1:\xad\xce\xf2l\xb9\xf8w\xb0\xe2~6\xbc@f\xbb{\xc7P\xd5\xc5\xf9wO\x06\xde\xc8\xb9w\xe9\\\xf8\x95\xb59w\xfe\x99\xe0\xdc\xbb\xf7\xb5~I\xf0\x04\"\x04r\xbd\x86\xe1(\xc4\x18\x06\xccY>\x8c#HFp\x00\x89\x87q\xd0A\xc7\xec0P(\xe8G\x81\xb3:\xe5\xed4?U\x14\x8cD\x90\x04&\x12\xa9.\xcb\xf87\x165f\xf1&r\x06\xd2!\x99py%b\x08V\x9e\xbd<\xdf\x84\x86\xab~\x9e\xd3M{J\x8a\xe3\xe5\xa9g\x81\xcfR\x06\x1c\xd8|\xc2\xcaJ)\xc2\xea,y\xf4J'\xe4\xb7\xb4\xe5y\\&\xc6\xd9 \x9f\x96y\x8a\x0b\xce\x0bm2\xc9\xc05K 3m\x96ay\xd3\xffT\xfbDVo\xa7\x1b\x0c\xa9<\xd483\xb7\x11$o\xc0H(\"\xce\xfd\x8f\xf8\x9aV\x86\xef\xea\xe7-)\xd5\xa7\xdbts5Z\xab\xe4W\x1f\xf9Y\xff\xfe^^g],\xbc7\xae\xb11\x97U\xbb\xefy|\xb9A\xaf/\xd8F*\x8cy|\xb9\xe9\x99\xfa\xa2\x96\x8f\xc8\xab\x13?\xa3Yk\x06p\x08\xef\xa9pa\xf9\xe8'(\xcd\x13z\xfd\xe9\x88\xee\x98\xe8\xcewn9\xd9\x18\x13\x8d!\x8f`n\xbe\xf8\x94,6\x80\x9d\xd6\xfe\xeb\x98\xcd\xfa\xf3\xf82\xb0T$\xb6t\xd6\x14\xbe}\xa5\x04\xcb\x1e\xe3M\x06D\xbb\xe3=\x90\x9fgI\xba\xa1\x99\xa1\x1c\xccO\xd74l|J\x16\x1f)K\xd2\xcd\xba\x15@WC\xdeL\x05%\x12\x82m\xd6_\xdb\xcaa\xc8\x0c\x06\xe6\xfeX\xfc\x89l\xb0\xbc\xacf\x80\xb8\x06J\xf1\xfen\x18\xa5x\x93\x9b\xa3\x14\xff\xeaKP\xea:\x92\xc4?\xbc\xb8[\xad\x84\xd1G\x8aj\xdeZ\xf26\x8c\xac\xec`x\x15;\xcd\xac\xdaeuq\x91.\xab\xc7\xe6i\x05Zja \xd8\xb1\xbb\xb5sY\xcf\xbf\xa3\xec\x7f\xc9\xb8\x19\x04\x1f\x82*\x91e\xd7\x0c\xb5f*\xe9\xa7\xfc\xf6\xd6-\xd8\xde\x8eQH\x95\x0dZ\n\x95\xab\xeb*\x8c \xb6\xbeq\x15\x81^\x06\xe9\xbfhU\xb2|\x93e!5o,\xfe\x9d[\xae\xe5\xd7\xd2\xe1Q\xa2.9N\xcf(K\xfdB\xdf\xa9e9\xd3\xee\x0f\xc0?\xe2Q\xbf\x9c\xd1\x8f\xfae\x89\x95\xd0/e\xba\x89;\x8bS\xa9K\xe8\xf0kE\xaa<\x1c\x1aUD\xa3\xac\xdf\xeb7\xd1B:\xab\xfa\xbd\x9d\xe2\xdb{\x1d\xae\xad`\xdaki\x04\x05j<\x0f9i\x1b\x0c\xe0\x8d\x14s>s\x8c,\xf0\x05\x91\xe6o)=C\xfe\x0b\x16\xb7\x8b\x088)\x80\xf1\xe1\xe6\x9aW~\xf0\\\x97\xa9(\x0f\xad\xcd\x98\n\x15C\xb0!_\xba\xb9\x186\x8b\x8b\xd9\xd3l\xb2\x81\xa3\x0b\x9bU\xd9\x05\xb0\x8a\xf3L\xcf6\xd0\xcd#@\xb9\xbd\x84\x83\xf2`\x00{p\x1bv\xcb\x8d\xe6 ]\xcaL:\xeeT\xf0\xf9\xb9\xf2\xa36\x16\x0ea\xcf\\\xf5\xb6|M\x0c\xcck\xf1\x1b\xdf\xf0\xd1^\xa2\x90~\xe7\xee\x9d\xfd\xef\xf6\xbe\xbds\xefN\x18\x95\xb7\xe1\xe1C\xd8\xbb\x07k`\xf0\xe8\xd1#\xd8\xd9\xbb\x17\xc1\xdd\xfb{\xdf\xde\xbd\xf7\xdd\xee7\xcd\xf7\xeeh\xef\xdd\x89\xe0^\xf5\x1c\xd3\xb9\x07\x0c\xb6\xe1\xce\xb7\xf7\xef\xee\x7f\xb7\xbf\xf7\xdd}Xs\x98\xfe\x8bo\xe9\x7f\xc9\xcf\xf6\xeeG\xb0\xbf\x7f\xf7\xfe\xb7\xfb\xfb\xf7\xca\xe6\x8f\xe5\xe7\xd8M\xf9\xe6\x9d\x08\xee\xec\xdf\xbf\x7f\xf7\xdb\xef\xbe\xdb\xfd.\xd4\x9bpl\xb9@\xe7\x0f(\xd6\xba<\xdc\x10j0\x80;{\xf05\xe4\xb0\x0d\x9fi\xf0\x94\xe0\xa6yJ\x02\x16\x86|F\xf6\xce\xc1sw\xaaKh\xc5\xaf\xd1K}R>\xdd\x943\xc2\x8e:;\xd8\xacq\xcfvCc9k( \xa2\x89\x14\xd6\xee4\x95\xc1|/~\x10\xc9\xc9\xb4\\\x00\xfa\x1b\x1f\xe8p\xaa\x02\xbc?\xd0\xe1+\xfe\xf7\x07i\xb2(\xf8-\x19:*n\xcb\xc0\xea\xf2\xbe\x1e8\x04\x03xF\xf1IB\x8b\x85\xc8\x8d\x8f\x9f\x1cg\xcb\xbc\x9eW\xc6\x04\xb2\x86\x12I\xba\xb7\xd6g\x87\xad\x8fgqBE\xdb\xd2\x96)ng\x94\xc5 F\xa5\xe3\x10\x84\xee\x12c\xc4s\xd3)9M\x93\x0dB#K\x01\xe5#\xb3\xae\x84I\xed\xb38j\xb9\xf7\xfbZ\xff\xedT1\xb7\xcb\x02N\xe1n#\xc3j)M('\x89a\x12A6\xb2\x17\x9f\x06\x10FU\xcd&\xe9)4\xce\xe3\xc5\xcb\xba\x0f\xb2/\x8c\xae\x01\x04\xbe\xeeMXt\x89\x19-X\x88h\x04\x07\x10\xb0\x93\xeb\xec\xd6\xd7\x14\x93\x9btf\xeexn\x07\x92\xdaI\xf5\xbe,\xed\xfc\xde\xd9\xce\x90E@F^\x8d\xbd\xb1\x90\xc3\xe6\xd9\xdc\xb1\xd9\xb6\x88O2.h\xc3\xd32\xac\xf773\xac\x9d\x1b\x1e\xd63\xf7\xb0z\x05\xd2\xc0\x9a\xf1\x03\x0e\xe1\xc5\xf1\xdb7}\xf1(\x99\xae\x84\xdaVRK\xcf\xdc\xa2\xaf\x9c\x04\xf8\xd8\x9a\xc9\xd3\xd2\xdc\xc7N\x0c\"\xf0\xb0\xe4\xe0\x08<\xc2\xbfw\x90\x9d\xf3\xea\xe0\xb3G\x07\x9c\xf5\xd9\x86\xfd\xfb\xf7\xee\xde\xbds\xef\x9b\xfb\xdf\xc16\x04\x843d\xf7C\xf1\xe7\xa3G\xb0\xdf>}\xeb\x0b%[{M\x87\x0bu$\xbe\xae\x8eD\x19\xa8\xc5\xef5\xceD\x91^\xa0|\xd08\x14;\x89\x9a\xec\xb6\xb1\xb0\x0c\xa3o\x0f0\xfc\x161\xa5>p<\xd82s\xf2\x93/M\xdf\xe0\xa73\xbf\xd1\xc0\xa9=\xbf\x93b\x9a\xd0 JO\x9e\xdd~\x817\xdd!:\xd3\xc1\x01\xec\xb4\xfd\xffLfN>*?\xc3\xd5\xb9\x9e>S\x99\xa8\x9c\xa3\xd1\xd2\x0c\x97{\xc7\xcb\xd53\x8d\x0b\xf6\xfc\x9a#+\x8dq\x7f\xd9\xe8n\"~\xc3\x13qn2~\xc3\xb7\xcb\xc5\x06}*Dm\x86\x15\xd9\x9d\x98\xf9:U\x96\x02.u\x8a\xa0Z\xb1\x10\x98\xf6j_\xfe\x89\x15\x8c;\xb23\xf2\x8b\xa8\xec\x8c\x9c`\xef*\xe7~t\xce\xafRDt\x04\x85VI\x15\x959\xa3\x03{J0\xef\xc9\xd1\x1eB\x0e\x07\x90\xab\xd0\xfdc=\x02x_94\x88\xd61\xc7\x81gP\xb0r\xee\xfc\"\xf2Qz\xab\xfe\x15$\xe4:\x8e\x9f\xa2\x9a\xbdW\xeb7\xe4\x9a\xe8\x89\xfd\x1b;\x0d6\xd2k\x87\x88\x82\xaa\x14]]\x0b\xa5e^\xafG\xd3\xdc\xba%\xf8\x8b\x99\x96dU\xe1\xed\xb5\xfc\x11EUmKV\xa5M\xdd\x117s^j\xc1\xe3\xd1\x00v1\x07\x85%\x90\xc8\x02(d\xbefUt\xd1\xce^\xf5\xa5<\xb4Z\xd5\x14\xc1v\xc61\x92/\xb2b\x13\xd3\xe6\xf5\x93|\xf8\x99\xf5\xaa\x12\x03%\n\xec\xc3\xd7\xea\xd7\x0e\xec\x89\x02\x03\x0e\xcb\x9f-\xf5\xa1~)\xa3\x01s\xca\xe5\xeaJ\xbe\xd8V\xd79 \xad\x8d`+\xc1R\x00b]Eh)\x17\xd1\xb30\xd4\x92\x96b\xb3\xf2\xbe\xb3\xe5+\xde{\xe4\xca\xa3\xa1C\xd4l\xb6\xf3\x06i\x84\xb0\xaa\x19\xd0~\xc7\xfe;'\xefo\x0f\xbd\x86\xfd\xac\x84l\xc6!\x1b\xc3\xff\xe5\xb2\x03\xdfz\x1c\x07\x92\x9a\x0b0\xc6\xfc\x1e\x88w\xe0\x10>\xf3\xb9\xc7\"\x1d)Zm\xd4\xcfL\xa5\x8c\xed\x02\xbf\xd3ZbIU^Q \xefm\x9c\x92\xf8\xdc\x87\xf3Rf\xb9!\xefbd8\x94C\xc7bq\x1e\xe5\xa5 \x00J\xff\x12\xc1\xcb~6EgZ\xebg\"?\x89\xe6\x9d\xef}\\\xc3\xbf\x8e\x1f\xf8\x9e\x11\xaa7\xed\xde\xe3y\xf2\xffq-\xbd\xeaK\xf5\xc7+\x1a\xb9\x90\xcd{\x0c?'l\xe6sN)\x99G\xef\xc5\x8do\x9c\xa7S\x01\x02\xed\xf1\xdbL\x96\xb5;W!\xa7\x08Uz\xd8\x89\xd27\xe87\xcb\xba-\xef\xd0q\xbd=\xfc\x8dy,\xc4 Q\x0bZ\x9a\x95\xbd\xe4\xb4\xeb\xe6\xd31T\x9d\x86\x9b\xd9l\xd8|\x95\xc3\xcd\x03\xda\x89\x96g[\x94\xd0\xaeY \xf4\xc7\x9a%A\xbf]3)\xfc\x1a\xe9J\xda\x10\xef\xbd\xac-\x9f\xb8\xf7C\xadiq\xef\x84\x18>\xbe \x86\xaf\x8fH\xf3\xf36TT~\xb9\x03\xa0m\xb8\"P_\xb4\xef?\xcd\xd2\x94 \xa4\x0f\xe0\xd4\xe0\x03\x81\x01b\x1f\x0d\x0f\xf4\xb4\x92\xefX\xfb\xb9\xc8\xcb\xb70<\x91\xa9\x02\x8f\x8c\xa3d\x07P\x18\x1e\xe8Y%\xe7\x86\xe7\xef\xc98\xcb'\x07\x90\x9b\x9e\xc5\xf4\x8c\x1c\xc0\xca0\x89\xf7dAb\xde\xa4\xe1YR\x1c\xc0\xccp\x7f\x9agsLmkK\x97|\x15\x01\xe9\x93\xcbE\x96\xb3\x02\x93\xc4 \xac\xbcr\xfb\xb4\xf5\x96\x05\x81\x82\xe5\xc9\x98i\xf9i\x94 ]\xdbn\x9a\x0f\x8d\xdeQ\xb3u\x15\xfb\x16G\xb0\x8c\xa0hn$L\xc6\x1e\xb00\x82-\xe3\x1e\xe6]\xa7m\xfa\xa7\xa5\x01C=OX&L;\xca\xf3,\x0fz\xaf\x13\x9aL\x132\x01r9&\x0b> \xc8\xc6\xe3e\x9e\x93\xc9\x03\xe0\x93d3\x024\xa3;s\xf5\xe2\x84\x9c\x03\xa1\xe7I\x9eQNu1\x02\x8b\xbf4]\xa6)\x10\xde*\xccIQ\xc4g\x04b:\x81x2Ix\xb3q\n3\x92.\xa6\xcb\x14.\xe2\x9c&\xf4\xac\xe8\xf7\x0c\x14\x9b\xa4\x05q\x90\xfc1\xe7i\x9a\xc0r\xf8\xf7L\xed\xfcfP\x07\x05\xeb\xe7d\x91\xc6c\x12\xdc\xfe\xbf\xc5\xed\xb3\xa8\x9b\xa8AE\xd8\xc6\xc3\xe9\xf6v;\x84\x17\x90\x8a\x85a\x9f\xc6s\x0c\x8dxN\xcf\xe3<\x89)\x83\x9f\x92,\xc5\xe4\xdb\x86\xfc\x92\xad;l\x96g\x17\x90\xf6\xa7y<'\xc5\x87\xec\x1dV\x91\xd9k\xa6b\xd3\xb0\xfa\xcb\x91\x98\x06w\xee\x86f\xdc\xcd\xaf\xdf\xba#K\xa2L~>!\xd3\x84\x12\x95\xfc\x9c\x8bE\xbd\x93\x13R\xbc\xce&\xcb\x94\xf4L\xa4T:I5\\\x9e0\x8f\x12\xe7\xbb\x9ef\xf3yF\x8f.\x19\xa1\x85\xcc\x7f\x8e\xf7\x1bwH1\x8e\x17XS\xf1UB?\xbd\x8b\xb1\xae\xa2J\x9d\xdf\xba]\xcc\xe24\xcd.\x8e>/\xe3TV#d\xfd\xd3e\x92N\xbe\xcf\xf2\xf9\xb3\x98\xc5\xe2\xb5,g$\x97OY&o\x92<\x89\xd3\xe4\x0frL\xe2|,\xda[\xc4y\xa1\xff>#\xec8\x9e/Rr<\x9e\x91\xb9\xf8\xee\xaf\x17\xc7o\xdf\x88\x9d\xd1\xe9\x01\xc6\xf2U\x07\xb3\x8c\xb6*D5\xab\x8eF\xe8\xa8o\xdd\x82^\x86\xbd\xf6D\x11\xb2\x86\xb1\xa0\xb7\xa4b\x9fNzp\x00\\\x82*\xf8\xc6\x8d\x97)\x0b\x03\x16\x86\x8ex\xd7+\x18\xc7l<\x03q8\xb6\x1e\xcb\xef\x1a\xd9\x1b\xae\xf8^\x16\x03J\xa6\xabNH\xc8F\x8e\x05\xc3|$\xf9f-\xa9<\x1c4\xfb\xc6\x1e\xe2<\x8fW\x1bt@d\xb3\xe8]\xa3\xff-\xeaI\n+\xefp\xd4\xeeH\xb0%\x92O\xd2z\x03b\x0eM\xe3\xabr\x84\x1eT\n\xae\xe6\xb3\x9eAB\x0b\x16\xd31\xc9\xa6\xb0RK\xd2\xe7[\xd2\xf5i /\xc6\x01U\xcf\x86\x8b\xb7\xd2\xb2)\xce\xb8\xcb\xb4\xbc$\xec\x8b\x8c\xce8\xdb\xea\x95\x8a\xd9\xac\xde4\xd5Nd\x98`\xf0Cv\xcc<\x0b\x05)\x15\xa3)\x87\xbb\xd2\xfd\xecF\xb0\xacP\x91\xb4\xb3\xf3v [\xe6\xf0\xc5!3$\xe80\x14\xbe\xeb*\xc6N\x879\x17\x0f\xc90\x1f\x89\xf4\x8at\x99\xa6fMt+\x13&\x82\x8cf\xf9\x1c\x0f\x0f\x81s\x03\xb8\x8c\x90N|O}\x91\xd6<\xc1vOIQ\xd2\x9dc\xd9\xc7\x92\x8eo\xbe\x175\x11\xaff\x9b\x99\x9a\x8dT\xe2u\xbc\xf0A'+\xca4\x93\xfa\xba\xf4\xa2\xf5ue\x01_Y\xa1\x8a5\xe5\xee\x84?\xdb\xa5\x84p\xc8\xef\xb1\xcb\x7f\xdb\xa8K\xc5x9^\xa7\xee$s\x1e\x08Y\xd7\x81 U\xda\xfcn\\\xdd\xa5\x18r\xb1\x01\x98\x8aU\xc1\xc8\xfc\xc3lI?\xbdN&\x93\x94\\\xc49\xf1E\x9c\xee\xfd\xcf\xfa\x93\xa4X\xf0\xb3I2\x8eH\x97\x9cp\xe9n\xd4\xf4\xb2\xd3\x82\x05\x1d[\x08\xcd\x93\x01 0\x959\x0b,\xbel`\x14#\xccw\x0d\xe7\xa0\\#\x0e\x80e\xf14\x9btC\xf9\xbcL\xb2\xa5\xaal[I4+55\xc1\x05?[.\xf8D\xfc\x93\xa8+\xe0\xec\xf7Ty\xd4m\xe8\xf5Bc\x06\xa5\x10\x19pK0\xf3\x95\\f~\x82\xf9l<\x8c\xce\xa9N9\xa5\xc0\xe1\xbc\xa7\xfc3\xd0\x8a)V/\x8a\x13\xb2\x0d\x0eu\x9a\x11\x99\x83\xc0p\xec2\xce>\xb0\x91\x1d\x96\xf5^\xfaI\x81\x9dQ\x91\xf8\xfe\xa05\x88\xf6\xfcg\xc9\xd9,M\xcef\xdd\xdc\xa5Z\xe1I6Fu\xab\x99\x01\xd9\xaa\xf8\x8c\x9e!s\xaf\x08N`\xe4\x92=\xcd(#\x94\xa94\xac\x8f\xe0\x1e\xb9S\xc5\x03\xe9\xafX'\xdf\x8d+\xb5\xec0\xba\xd2@\xa4\x83\xab\xfa\x88\x90\x0b\xdf\x8dP=\xb2\x1c\xee\x8e\"\xd44\xecE\xa8@ \xfd\x84R\x92\xff\xf8\xe1\xf5+\x91q\x18\x16\xa8V\x10r\xb2\xa8g\xbb\x80\x87\xf0\x0d\x92\xc9\xdf~\xc3\xfdJ\xa5\xe7\xdc\xd8\x99m\x86\x03\x84\xf7\x94\xaa\xae\xb7\xb7\x8b\x910\xafM+\xd8\xecE\xb05\x86\xf5\x1a\x16\xf0\x08\xbe\x15\xbd\x08\xaa\x80w\x87\xb7\x7f;\xbe\xddg\xa4`\xc18\x8c\xf8\xdb\xfc\x83\xdb\xc3\xaf~\xbb\x18i\xf7\x83\xdem9\xb2\xf5\xbal\x80\"iN\"\xf8[\xefo\xa0\xdcN\x92\x08z\x7f\xeb\xe9?\x97\xc3\x02v\xe0\xee\x08\xb6\xd1)\x9e\xf2g\xbd\x9d\x9d\xdf.\xefp\x99\xbc\xba\xf5\xf5\xed\xdeh\xb8\x18\xb9\x8de\xb8,SQ\x98\xa1\x1f/\x16\x84N\x9e\xce\x92t\x12\xc4\x9a\xc8}\x94\x12\x8efA\xafX\xc4\xb4\x17\x86\xfd\x82\xb0\xc7\x8c\xe5\xc9\xe9\x92\x91\xa0W\xb0\x15\xaa\x03\x86\xbdq\x96f\xf9\x01\xfc\x9f{\xf7\xee=\x80iF\xd9\xce\x05\x11 qO\xb3t\xf2\xa0\x17\xe1\x8a\xe1\x7f\xfa\xabxo4\\\xc0!\xae\xdd\x1d8\x84}8@\x08\xdf\x87C\xb8+\xff\xe6\xf7\xef\xc0\x01l\xdf\xfeW\x10\x07\xa7\x05\xcb\xe31[\xa7I\\\xac\xe9d\xadL\x0fk\xbeg\xd7E0_\x17$g\xe1\xe1z\xc9\xb2p}\x1a\xc4\x05Y\x93\xb3\x84\xae\xb3,\x0dHL\xc3\xc3uN\xe2O\xeb\x15#\xe1z\x8c\x8f\xf9\x81\xb3\x9e\xc5\xf9\x1aE\xdb\xc9:\x8d\x8bb\x9df\x94\xac\xb3\xf9\"]g\xb4`\xeb\x8c\xb2\x84.I\xb8\x9e\x90\xe0tyvF\xf2\xf58\x99\xc7\xe9z\x9c\xc69YO\x03\xbe\xc7\xd7$\x0f\x0f\xd7 M\xd8:\x0d\xc8Y\xcc\xc8\x9a0\x12\x1e\x86\xebI\xb6\x9ed\xcb\xd3\x94\xacI0\x9ee\xeb\xb48L\xa6\xeb\xb4 A2\x0d\x0f\xf9<\xb0\xf6\xe8\x9a.\xe7\xebsB\xd9\xfa2\x18\x93\x05[\x93\xf1z\x11\xa4\xc98a\xeb,g\xe1\x9a\x91\x80N\x8a5*M\xd69\x0d\xc3\x90w\x9d\xa6l\x96g\xcb\xb3\xd9:N\x0b\xb2Nh\x9c\x06\xe9\x8a\x0f\xe5\x92O'\x8b\xf9\xd7\x01\x89\xc73>\xfb\x84p\xb0e\xf3\xf5\x92\x8e\x03\xbe{\xf9\x00\xcf\xd2\xec4N\xd7g\x19\xcb\xd6g\xcb8\x9f\xac\x93`\xba\x9e/\x02\x81\x03\xc5Z\x1b\x04\x0d\x12\xb6F\x95~p\x92\xd11 \x0f\xd7i\xc2\xa1\xb5dk%\xfa\xacY@\xf2i<&k\x92\xd38\x0d\x0f\xc3\xc3u\x11\xae\xd3 \x9e\x9fN\xe25a\xebl\xfci\x9d\xd1\xb3p=\x0f\x92q\x9e! \\\xa3\x8ai-\xd4\x08\xe1\xfaM\xfcfM\x83xN\x8a\x05o)f\xc99Y\x93K\xb6&\x17\xeb$]gl\xbdL\xd3p\x9d\x05\xc8\x16\xad\x17\xc2\x10\xbe\xce\xd7K\xb6>'y\x9eLH\xb8^\x04\xf1\xf8S|F\xd6q\x1e\xcf\x8bu\x9e\x9c\xf3u\xc93F\xc6\x8cp@\xb0l\x9c\xa5\xeb\xe5i\x9a\x8c\xc3u\x1e\xc4 \xc7\x98 \x9ed4]\xf1\x85\x9b\xae\xcf\x92\x82\x91|\xbd 1[\x7f^&y5\xefb\xbc$k\xa1b[\xb3|\xb5\xe6T1\x0c\xd7Ep\xba\xe2\x8b\x1f\xa7d\xb2&\xe9t=\xcbr\xb6N\xce(\x99\xac\x93?\x10<1K\xc6kT\xe7\xacY\xbe\x1c\xb3\xf5\xf2\xb4\x18\xe7\xc9\x82\xad\x97\x0b\x92\xafWt<\xcb3\x9a\xfcA&\xeb\x8b\x84\x8dg!\x87\xe8|\x91\xf2\xc1\xcf\x08]\xcf\x92b=\xcb\xb3\x8b\xe2p\x9d\xc7\xb4H8\xd2\xe4K\xb2\xceW\xeb\xd5\x82\x041\xee\x8f \x99\xae\x93\xc9\x9a\xc6s\xb2\xce\xa6a\xb8^\x064\x18K4\x9f\x90i\xc0\xd9E\x8e'\x19]\xa7\xa4(\xd6\x85\x18#K\xd2p]\x90u\x91\xf0\x05:\x0f\xe2|\x9d\xe4l\x19\xa7\xeb,\x99\xacQm\xca\xd7\xe7\"\x18\xcf\xe2\xfc\x84\x89\x01\x91\x9c\xacgIJ\xd6 \x9b\x85\xeb\xcb,_\xaf\x12\x92N\xc2\xaf$\x01\x9cr~iw\x14r\x16T'9\x8a\xdc| \x97\xecM6!\xc14\x0cC\x91Al\xc1)\x94\xa0\xeb\x9cF\x1c\xf0\xf3c\xaa\x1d\x00{{\x0f`k\xb8\x17\xc1\xed\xe1o\xb7\xff\xbc\x1a\x06\xbf\xedl\x7f=x\xf8\xe8\xe0\xc1\xfa\xb7\xdf\xfa\xd1\xe1\xd6\xad\xbf\xff\xfft\xfa{{\xf8\xdb(\xac\xdfhPhI\xa0\xc7\xbc\xe3\x0cS\x93sR\xff\xb0\x07[x\xceH\x12=.\xa9\xf3\x98\x1fS\xdb\x90\xc26\x12\xe8m\xd8\x1b\x95\x7f\xee\x8f\x90 \xffvyg\xbc\xb5\xb3\xd3So\xf2{\xb7\xbf\xae\xff\xbc\xcdi\xe1\xff\x11-\x8e\x86;;\x8b\xd1\x03\x87\x07\xcf\x14\xb6\x070\xf6e.\x8d2\xda<^|\xc8\x1a|\x97M\xf5as\xb1\xe4\xc7b#\xc9~\xf9\xcapo\x04\x87\xf5\x9f\x07\xd0\xfbDV\x06\x96D)\x06\x0d\xed\xef[\xdb\xdf\xaf\xb7\xbf?\xaa1[\xaf\xe3\x85\x89\xe1k0\x90\xaf\xe3E?)\x84\x96\x04=\x81\x84\xf7\xc3\x06\x1cd\x9dc\xa4\xa2\x82\x0dE\x0b\x89\x89g\xe4\xfd\xd3*\xef\xfd^\xa5\x11\xea\xcfI~F\x02\x93\x14x.\xa3\xe5\xbbG\xc3\xdf\xe4\x8c\x155V\x07\xe2O\x0bK\xf4\xbc2\xecl\xed\x99\x9fM-:]p*=K\xe6o\x11\xc1\x04\x06(~&\x9a\x96RE\x06\x04!\xa6 \xe4\x83\x0b\xf8\xb6\x9e\xd4\x1c\x85\xc2\x07r\xd8..\x8e\xf72\xe3\x14\xc3'8\xfd\\\x8e%\xab\xc62C\x17Y\xe7Ws\x0e\x83\xceP\xf63|k\xaf\xe3\xad\x15\xe7i\x83\xb3\x08h\x99m'\x82\x9c3X\xc12\x82yS\x0d\xad_mTPB\xc7\x8a\x0b\x1d\xb1r\xfe\xc0\xec\x87\xb1H\x9a\xb72s\x83\x06b\xa1\xab\x86\x8d\xdf\x8c\xa5k\x05r\xe5\x86\xef\xa7\x9c\xfbHm\x18a\xc7\x15~ma \xdeI_n\n\xedo[\xe2\xe6\x8e\xee@\xf1\xf7\xa14\xe0M}\xe1\xd0\xba#\xc7\x14\xb7I)\xb9D\x8e\xf4\xfb$%o\xe29\xf9>\xcf\xe6R\xa6y\x96\x14\x8b\xac@\xe3\xeb\x8f$\x9ex\x94\x95W\"\xde\xedi\x92\x12~l\x0fz\xc1\xf0_\x0fF_\x87\x0f\x0e{\xb7\x93>\xb9$c\xa3\xe1\x00\xcb\x9e\x08\xdb\x00g\xea\xebm\x94MT-\xd8\x88\x93\xaa\x9e\x82\xcdh\xb2\xa1F\xaa\x8c\xf9\x19\x94\x12n\x99\xa6m\x08-\xe2b\x1c\xa7O\xe3\x82\xc0\x00\x9e\xd6\xef|/\x07\xd9 \x1a\xd9\xc3\xd3\x80Tf\xe2\xdf\xfa\xc3\x7f\xf5o\x8f\xbe\xfe\xea6\x17%B\x93\xc6*\xa6 K\xfe \x1f\xf3\xb4\xb3\x07\x0e\x802vlK\x8b\x1d\xe3\xc2\x9a\xd0u\xb8ekM18\xd6{\x0e\x8dG\xf0\x19a\x8f\xc7\x9c\xcb\xe7\xd8\x92gi\x9a\xd0\xb3\xf7\xa4Xd\xb4\xe8\x86F\xe3$\xab\x14\xfe\xfd\xa4\xd0\xb4\xff\x9a:\x84/\x8dMcP?\xf6\xccoV\xfa\xa5\xbaCx\x97Wry\xc2\x15,\xceY\xf1s\xc2fAo\xbfW\xea#u\x15*:\xe9\xf5\xc6b\xf7\xf4\xf04\xfd\xf3*\xac\xb0\xd0V\xa8\xc1LlK\xd5N\xd0\x93]\x88&\x8dv\x12K\x1b|\xcb\x06\xd40.s#a\xa9|\x93\xa6.5v\xa1\x0d2CVA\x887\x9b\xb7\xf1dB\xc8\"]\x1d\xb3\x8e\xbaLmJ\xf3\xdeP\x86\xffye\x0eLi\xe0hf09\xd9\x15\xdaU\x1cQ\x1edC6\xc2\xbdr\x08\x13\x92\x12F\x80\xdf\xe1B\x0d\xff\x87\xf3\x03\xe2\x0dj\xcce`\xcaV\xabl\x03\x06\xb2\xa7\xa2!\xbd\x08\x89)`\xd6\x95\x19HV We=\x95Y\xd7r\xa6X\xad\x16\xa4k\xc1\x89\xb0Z\x94\x87\x12 \x1d\x0c\x84F|s\xad\x89\x08\x84}o\xdf\x00R\xc5\xect\x19$\xcdQ\xc2\xe0\xe2\x13\x88#\x15\x03\xebS\xf4\xbd\xf8\x90\x95\xfe\x1c\x1ek$\xbe\xb1\xac\x91\xd6\x9b\x15M\x1a\xa6\xbf\xfa{\xe7\xb2\x92\xe7I@\x83oL>\x12ctH\xba\xf7\xcd\x9e\xe1\xd9T~x\xef\x1b\xa3{\xc5B\xb9f|\xbbkz<)\x1f\xdf5=\x9e\x95\x8f\x8d\xe3:\x97\x8f\xef\xdf36>W.%\xbb\xf7L\x8f\xcfpV{\xdf\x99x\xff\x95\xfc\xf4\x8eqR\xa7\nX\xfbw8\xe2\xd7\x9e\x97\x04\xfa\xa4\xc3w\xe1\xd6-\x0c\xe1P\xbeU\xd2\xb5\xd8\x8c\x8b\x12\xa5M\xa5\xea\x9bQ\xf3\xfa/\xbe\xb0\x170\x80\xf2\x08lO\xe5\xc8\xe0\xc0\xd3\xad\xd9o\xc9\xc8fsL{\xb06`]ndv\xae\n\x047&on\xfc\xd8\xd9\xf8\xd6\x16q\xdaW}(\x95c\x0dtO\xa9\x89\xfa\xc8\x06\x86\xa7\xce\x91\xf2~\x17U\xbf\xfc\xe7\xd4\x7f\x18u\x07\xaeN\x16\xce\xa1\xf8\xd9\x8c\x8b\x18Z\xc4a\x0b\x8br\xc7\xda\xf8\x9dz\xe3wD\xe3NN\xbcn\xa2\x97} \xefQ\x7f\xc8\xca\x87\xeb5 `\xcfk\xc7\x88\x0e-\xab\xfd\x18\x9d\x84\xab\xfc\xdf\xb4b\xbfM\x9a\x15\xd0\xfd\x00\x86\xd4\x92\xf6\xces\xa3\xc1!h\x02AR\x04\x182\xc5Q\xd5\xcaq\xf9\xa05\n?\xb6\x06|\xfc\x0e\xf0\x08'\xf8i\xd6&\x06\x82{k\xd4l\xeb*`\xb3\xc5{\x99k\xc3\x1cR\xceY\x0d\xa9\xc1\xeau\xd5\xdc\x12\xeds\xef\x93\xc5\xe1\xb1s\x7f\x80\xb2\xa7\xc2#\xa8\xc2\xc4{?\xc5\xe9\x92\xc0|Y08%\x90\x92\xa2\x006\x8b)\xc8\x96\xbd\xca\xd9?\xb68fn0\xa6\x87\xf61\x9d\xa1\xc2=\x97\xc3\x12\x8d{\x0d\xeb\xad\xd9\x85\xb4\xfb\xb4@9\xf3\xf6\xbfv\x0e\x7f\x9bl\x07\xbf\xf5\xf9?\xe1\xa1\xb2\x0chRjc\xa01H\xb6\xc7gp\xef,>\xaf\x9b\x8d\xcecP\x14#\x01\xcf<\x87\xf5\xc1\xe4\x9b\xeb7&<\x95\xb6\x02\xe2\xf0)\xb4Cn\x9a\xa4\xc4k\x80\xaf-\x0e\xc5~c\xec\xb1|Iz\xb2n0?D\xa7qZ\xe87\xb6v\xb5\xbf\xf7\x14#o\x1b\xf5\xa9\xe8\xdek\xe0\xcf\xcd\xce\xd1~\xe3\x16\x835\xa8{\xecc\x93/\xfb\x0c\xedw\x9b3\xb7\xdf\xe0\x92\xe2M\xfc&\xe0\x9f\x95\xce\xc2\x8e\x95V\xcd{\x8d\xec\x8d\xc9\xef\xdcoTJ\xd8S\xa2F\x9fe\xaf\xb2\x0b\x92?\x8d\x0b\x12\x84\x11l\xdd\xfe\xd7\xf0\xcf`t8\xdc\xdd\xf9.\xde\x99\x8e\xfe\xfc\xf6j\xa7\xfc\xfb\xae\xc7\xdf{\xfbW\xc3\xf0j\xe4E\x18\xf8\xc8\xbd&\xfc\xde\xea~\xefOL+\xde\xc4\x8f\xce\x8b.\xbc\x86\xf7\xcc\x1a3\xb0\xf9\xf06 \xf9\x1b\x8c\xf0\x95%\xd2\xc1{|[\x94\\\xc0{rvt\x89\xfe\xc8\xae\xa5\x9dfi\x9a]\xc0Bv\xd2\x83m\x93\x03{\xfd\x0co\xc7et\x8e\xec\xba\x9c\xed\xad[\xb5\xdfv\xae\xd6\xc6\xf1\"\xab\x87\x94\xe74\x9b\xac\xa4RY\xa8\x17\x13\xda\x13N\xf2\xf8\x0b\xcdX'\x97\xf3\xb4\x87\xee\xf2\xda\xcd\x9eEU\x99T\xea\xce\x9c\xa0\x9b\xc2\xc4\xf6j\x0c\xc2;J\xbe^`\x84\x8b\xe8\xc8\xa2\"\x8e\xcb\xd5\xca\xedv\xc7X47\x97|\x8e\xa5\xf3\xb1\xf6\xa6d=,oN\xab79q\xb6\xbd\xb6\xa8^\x9bf\xf9\x8f\xe0,\x82\xd3\x08N\"\xb8\x88\xe0(\x82\xcb\x08\x8eG\x0d\xe1\xd59\xf6J\xdfd|\xc5V\x92\x0eYB\xe4\x9f\x9f\x86\xcd\xb9\xbf\x97\xb4\x1e\xa6 I'\x90\x14@3\x06\x8b<;O&x\x02\x98(\xb6j\xf4\xdc5X>\xf1\x8f0\x80WA\x16\xc1\xb9\xc3%\xe1#\x1a8\xc4x>\xfa\xba\x1a\x80\x1c\xc2\xa4\xda:\x93\xae\xd1|\x86\x01\xbc\xe7\xa3\x998F\xf3Y\x1b\xcd\xe7MG3\xeb\x1a\xc2\xf70\x80g|\x083\xc7\x10\xbe\xd7\x86\xf0\xfd\xa6CXV\x00q\x96\x1d\xe1\xa3\xf9\x03S]a\x91\x11\xfbh\xfe\xd0F\xf3\xc7\xa6\xa3\x19W\xa3\x19w\x8d\xe6 \x0c\xe01\x1f\xcd\xd81\x9a'\xdah\x9el:\x9a\xfa\x91\xd85\x9e\x9f\x1c^K\xeaB\xee&\xf8 5\xe41#;\x8c\xcbQ\xd8\xfc\x02\x0e\xe1\xf7\x00Uh\xbd%\x176\xca\xbbo\xc4\xdd\xe7\x82\x88\xda\xf9\"u\xc9\xd9\xfedsb\xa9\xc8l\xfd`\xeb\x9a\xdf\x8f0\x80\xd7\x81\xab\xda\n\xce\xee\xc7\x0d\xc6\xf8c\xf7\x18k\x87g\xd7\x10\x7f\x86\x01\xbc\xed\x1e\xe2\xcf\x1b\x0c\xf1\xe7\xee!\xd6O\xe8\xae1\xbe\xc0\xec\x8d\x9dc|\xb1\xc1\x18_t\x8fQg\xb0\xbaF\xf8k\xc7\xd0N\x91\xf9)\xd90\x9f\x81\xfe\xaax\xd6\xe74\x18\xf6\x12F\xe6E/\x02\xc1g\x8f0\xc9N\xcb\xcc\xdd\xe5\xe9\x01\x9a`\xd5\xb5\xed\xf8U\xc3\xa4_\xd1E\x82#\x0b\x86\xaa\xd6\x97P=|'\x1f\xeaT\xe0Wd\xc0\xf8\xd3\xe7\\\xa8\x8c\xa4\xb9]\xac\x83{\xb0\xfcJDVKC\xde\x95\xe6\x85\x995\x0e,\x99\xc4\xd4\xe5\xac7\xdb\x89\x13\x1a\x83\xdc\x85\x12/a\x00\x1f\xba\x91\xf6\xa5\x0f.H`\xbd\xf4\xa5\xc6V\xab\xb7\xc1{\xa5\x9dF\xc1\xcd))7\xa3/w66X:Az\x05m*\xf6\xb7\x0cZ\xa6\xf8g\x0e\xef\xdb\x97\xf3T\xea\xae\x98U\xbeK\x84\xcf\xd5\xe5<\xc5m\x8b\x7fa~\x12\xd7\x9a\x0b=\x0f\xff\x86K\xf9\xf2\xdb?\xaf\"\xfe\xfdW_\xe5d\xaa;\x03\xac\x16\xe8\xb4F\xfa\xb8\xaf\xc5\x9f\x0b\x91\xcf#!\xf2w\x95\x16\xe6]\xf5\xe4\x10\xfe\xf6\xf0\x907~N\xf2\"\xc9\xe8\xa0\xb7\xd7\xdf\xed\x01\xa1\xe3l\x92\xd0\xb3A\xef\xe3\x87\xefw\xbe\xed\x1d>\xfa\x8dJ\xb7v\xf8\xe5\xf5+ \x97\xb8\xc40\x8e)g>O \x9c\x11\x8a\xc9\x19' B\x94\xfef\xf5~R\xd7yY^\n\xa7\xd3\x9fsQ \xb8\xfd\xdb\xf1\xd7\xbf\xdd\x0e~;\xde\x0e\xbf\xba\xed@\xf6\n\x88\xb2\x84\x94'*C\xddXx\xa6,\xb5\x93\xa7\xa8/\xfb\xe5\xf5\xab#17\xe1J\xe2\xe3\x01r.\xcb\xaa\xd5\xdb\x13\x9b\xe0\xfb<\x9b\x8b\x8d \xdbk\xcfH)\xc5l\x92]\xd2%\xd9%a\x08\x87M?\x98\xa4\xf2\x83\x81\x83F\x8eJ\xe9\xa3\xa9\xa7?q\xba}\x9d\xcb\xcc\x86\x7f\x1at\x85 \x93\x17V\xe2|\x9a\x8d1\xcbN\xbf\xc0\xc6-\xfa\xa5Joi\xdbZ=\xa1\xa4w)MD\x16\x94byZ\xb0<\xd8\x0b\xfb\xc5\"MX\xd0\xbbe\xd2\xc6\x80\xee\x9f\x9eCB\x81\x86@\xfb\xb3\xb8x{A\xcb\xdc7\xb9pS\xc4(\xc3a>R-\x0e\xb8XE\x86\x132\xce&\xe4\xe3\xfb\xe7O\xb3\xf9\"\xa3\x84\xb2 \x1f\xee\x8e\xc2\x11\x0c \xe7T\xe8\xd6-0\xbe\xb37\x12v\xd5\x9e\x0f>\xa9m\xdd^\xb3v\x1a\x1b7m\xb5Z\xc5\xfd\xca\x97\xab\x81\xd0\xd6\x8cD\xca\xfdA\x0f\xb6MO\xc9\x90\x19\x0d\xb3\xfd\xdf\xb3\x84\xe2\xf2\xb4\xa7&S\xf5\xb8\x07\xa5\xe6S\xcb\xb9\xa1r\x17Sr\x01$`\x9a\xb9\"\x82\xde\x92Mw\xbe\xed\x85au\xb7w\x1a\x17\xe4\xfe]\xd3\x18\xaa\xd4A\xed\xae3\x0c6K2Z\x1c\xe3[6\xaf\x9d8]\xccb\xcf\\\x83\xa0\xbb\x8f)m\xe2\xac\x17\xe2\x16J \x07h\x9c\xf3)i\xcf,G\xb6yc\xce \x9be\x93k\x8fF|n\x1b\x8fz\xea\xcdD\xb4\xc7\xc8\xe2\xb3\xbf\n\x9c\x8d!{\x0f\xd2\x80\x99\x8d\x14S~\xec\x8c\xc9I\xa5\x8a\x8d\xe6\xe4\xc7z\xfa+_^b\xf5\x10\xd1\xd8\x96\x1c5\x88\xbd\xeao&x\xbb!\x8d\xf8\x06\x8dL\xfb3\x0f\xb5\xc4k\xfb\xbb\xb7\xcf\"\xe8m\xf7\xc2\x91\xdc\x9f\xa6%\xb5R)\xe6\xda\xd4\x86\x94]\xb5\x95\xb48\xd6\x94J3N\xb8f\x15\xe1\xa2\x9aSN\x97\xcb\xc8F\x1e#\xf5\x91\xd7a\xae\x94b\x96\xbcd^\x04\xd8X\xa0\x063\x8ektL\x9a\xb31\xa5Q\x9e\xcc\x03m\x91~\xc3\xecx\xbd\x13\xb4\xd8\xf4z\xae\xe1Z\xb2\xaay\x0d\x93\xc3\xec\xb4\x82\xd9\xc7\xb6{Yd\xc8\xe3\xe6\xd54ig\x9b\xe8N\xc2z\xfb_\x97;%s\xdd\xb9l\x915\xf7\xdc_9Bi\xffY\x97\xf6\xa5ui=ZK\xbb\xd8ZZ\xbd\xfc\xa7\xf2?\xd5\x83\xb2\x90\x16\x0d\xee\xdd\x0d\xfbO\x96\xd3)\x91\xde\xe2\xd7\xca\x06hN\x88\xd9\x9cfI\xa9\x8c\x92\x99\xc8\x15\x0f\xff\x7f\xf2\xde\xbc\xbbm\x1cK\x14\xff\xbf?\xc55\xa7_\x8a,\xd3\xb4$\xaf\x91\xedx\xb28\xdd\x99\xc9\xf6b\xa7\xea\xd7\xa3\xf2xh\n\x92\xd8\xa1H\x15\x17;\xae\xb2\xe7\xb3\xff\x0e.\x00\x12\x04\x01\x92rR\xd3\xfd\xde\xe3\xc9\x89E\x12\xc4r\x01\\\xdc\xfd\x9e@\x15\xcb\xf2\x13\xf1\x83\x9c\xc7\xa2\xfc\x17$\x0b(\x81p\x047a\x16\xe6\xb0\xc8\xf3\xd5x{{\xe6\x07\xe4:I\xbex\xf30_\x14\xd7^\x98l\xa7\xf4\xbb\xedi\x12d\xdb\xf8\xf1\x16#\x9fRo\x91/\xa3\xd3P\xc4nd\x94\x86\xcb\xf3\xb9A\n\xc7\x90\x1fA\xba\xb9\xe9@\x0c\x9b'`=\xf1\xd3y6\xb94Q$\x157\x97\xa2\xcb\xaeB\x1f\xb2:\xeaq5ED\xcd$\xed\x1f\x94\xb3\n\xc8\x99uG\xe2l\xa2\x99\xa4\x16\x1dS\xe5\x15\x98C[\xd2\x1a\xd8\x12\xc58j\xc4\xca\xca\n\xef\xbb\xc4\xa8'\x14\xd8\xe7\xa4\x1f\xac\x932\x1a\xf1#\x9a\xacB\x19\xcbcf\x1d\xa8nz\xf5#\xcb\xfd\xe0\xcb#\xba\x80\x11\x98\xd9\xb8\xe9/:r\xfa\xb7W\x9b!\xb7\xd0}D\xb3\xc2\xb8\x17[\xd6\x18\xfd\xf6j?\xc5H\xcfk\xb5^\xd4\xb3\xbd\x88\xa8=\xad\xca\xa8\xf2\x84\xc84'\x04\x8b\xac\xc3\x8c\x102x\x06{p\n\x19l\xc1\x1e\x8c1\xf3R\x00'\xb0w\x04\x01\x1cCv\x04\x01E\xe3\xd1$\xa0\x05.\xe5\xda&AKb\xf0\x1b\xee\xa5n\xb6\xa3\x86R\xdb3\x93\xe9\xac\xd4c\xc1\xb0\x8d\xe2:q\xd1\x16\xd0\xd4\xc4\x9eux\x8a\x03\xb75 \xdb\xe5\xdf\x1c\xdcR,h\x8a\xc3\xa3p\x8afOSzb\xc2\x7f\xd1\x9f\x05\xfd\xf9_\x90\xcc\x90Zd\xcfV\xecYV\xacV\x11=\x7f\xf2\x84=O\xf0\xb9\x0b\xe4\xeb\n\x03\x9c\x80\x1fC\xe9\xd8\xe1\xfd=\xe3\xa1\xbf=\x8d\xe8A\\z)\x19\xc8\xb3\xbch\xe5X\xc4EK\xde \xe7\xb2\xe8H\xe9\xde\xa9\x8b\x16\x97\xb0\x8d\x99\x95\xd9\x03\xdb\xacN\xe4\x0b\x1d\xf3y\x1eJ\x91~h\xb2taQ\xaeo\n9\x8f\xc2pQfP\x88\xda<\xf1\xc5E;?/\xe5W\xf3\xd6\xf2f\xd8\x1a\x82\xc5\xf5\xda\xe4\xd9\xc2_\x911\xac\x9aoD\xa07\xed\xcb\xa5\xbfzY\xbe\xef\x8d\x1ef\x88\x9c\x1ew\x06F\x18\xe5>\xb3\xf5\xe7\xb6\xb6\x87X\xbc\xd9Z\xdb\xf9\x8a\x9f\xf4<+\xb5'#V\xd0<\xeb\xdaN6\xb9\xcd\xae\xb3\xcap2\xb1V\x0dg\x8d\xae\x9f\xbf\xf2~\xfe\xca\xfb\xf9+\xf6\xf3WM\xd9\x94\xc7\xfb\xcfl\x8b\xed\x7f\xcb\xed?\xe1D\x87.\x9b\xb3\xadi6,S,d\xf6\x9a\xc7\x99\xec&&z\n~\xb3\xaf\x82+\x11|t}\xbb\xf2\x11h\x9c\xc7\x84\xfeu\\\x1f\x1e\xb3R\xa5\xef\x85\xfc}\xac\x8e_\xf4\x97\x16\xaa0+r\x1ae\xcen\xbb\x14>\x03\x06F\xac\x05\xdf}\xd0\x8c\xac\xd00]\xe2]\xce\x8f\xe1\xb4\x0c\x9e\xa7\x9b\xb0\xb5N\xe0}~\x02\xefK'\xf0\xbe\xee\x04\xde\xef>\x81\x05\xd5\x00'\x80\xa6+)\x0b\x9e\xc7\x8c\x1c]\xe1\xbd\xcb\xe2\xb3\x9e\x02QQpm`2\xe2\xe5\xc9\xe8\xa5\xe3\xb14u\xa2\xc0\xf6\x1b\xe7\xe3\xad\xcfl\x9f\xb2\x15 \x18S\x16\xc6\xac@\x88\x05<\x94\x97\xb0\x86\xebk\xad\xb1\xa2\x98&A\n\x0f\xbc1t\xb4++\xf6\xc2\xac\xec\x96\xfa\xcd\xa0\x16\\U7\xed\x99\x96\xfco\xd2ar\xf4D\xed\xec\x8b\x89\xa7P6\xa9X\xec\xac\xd5\xe44B\xda\xa6#\x87\x8f\x81X \xdb\x89\x95\xa8/\xb1\xf2_\xa5\xac\xe0\xbft\x14\x8aQ\xec\xd8\x8c;\xe2\xb4\xc2=2\xc9\x1b\x9b\xa0\xaf\xe0\xaeI\n\x02\xf2\xc6\x8b\xb4\x1b/(7^\xc4I\xdfH\"}g\x8c\xf4\x9d\xc11DG0\xa3\x1b/\x98\xcc\x9a\xa4\xef\xcc\x10\xd0i\x85\xaa\xa6\xc44\xe7\xb1\xbdj\x9ds\xbaf\x0b3\xfd\x84F\xd0\xf6\xeaQKB\xa2_3\xcd\x92X\x18\x96D\xd8E\xbf\xa2K\x00#\xd5\xfa,\x10fW\xc1'S\xef\xe7\xa3\x19\x00-#\x1ce\x0d]\xc4y_\xa5\xc9\xea\xa2\x1cS\xd6\xe8{\xb9\xe2\xb4\x99V\xca\x95s\x83\x91\xab\xca\xc8\xf5.\x92\xb8\x03\x97\xd3\xac<\xa1-,\xe1\x18\xe6G\xb0\xa4\x8b\xc4<\xa5\x18ZJE\xb27.,\xcbEL{9\xa1\xfd]\xd2_\x97V\x89t\x03\x13\xb5K\x81x'\x9f\x82\x08\xae\x12\x80w\x1d\xf3\xd0\xb1\x19\x85xC\x17.\xbb\xb9\x1f[\xb7`\xa2\xdd\x82a\xb9\x05\x13\xc7\xe5 \x10\xc1\x87cH\x8e\xc0\xa7\xd0\x0c'~}\xbb\xf9\xe6s\x0eQ\x07vU\x01r\x88:]\x16\x7f \xf3\x8d\xb8r\xb7\xab!\xa2[\xae~\xfe\xcaq\x84\xdaq\xf8\xe58B\x8eJB \x95\x14\x0c\x95\x14p\x0c\xe1\x11\x14t\\\xfe\xa4h\xa2\x92\xc2\xa4E\xe2(\x8cLrC \xe3^\xca\xda\xf6\xd2\x17r\x97]H\xfb\xc9NV\\\x08\x9a\x91 \x89\xa7e\xd7\x9c\xe6V\x8bM[\xad\xc9\xe6\xb6o5\x90\xa1\x8b\xe1~\xe5H=\xe5\xbe\x9b\xb1}G\xb1jP\xee;\x8a\x9cW\x1c9\x9b9T\x81N3u\xef\x05.\xcc\xca\x99G\xa4\xb8\xf5\x8c\x02\xc5\xa6\xe3\x08&\xb3K\xfa\xcc\xa9v\xa1\xdf\xc6s2\x8bi\xe3Nl\x92\xe5\xa0\xc5\x8a\x0fNs\xf5\xea\x0f\x98l\x9d\x9d<3\xd3\xe7\x92\x05\x8bb\xb7U1\x060\xae\xbdk\x9eK\xb1\xa9\"\xb4\xd1\xd2r\x15\xb5:G\x97Z\"\xee\xff\xa5\xd3\xfe\xb1\xc7y\xd1~\x9cO\xff\x87\x8e\xf3\x9b2\xcec%\xffi=X\xbb4\xebK\xc4x7-\x18o\xd9\xb5\xeb\xe9)\xbdTw\xfd\xc2\x85\x9b\xda\x89\x8b\x1c\xe2M\xf7Y\x0b=%J\x9d\xc6\n\xed[u\xd5\xdc\xaa\x95|G\xfeT\xfc\x925\x85\xcc~\xecQ\x8a\xa3\xed\x1f\xcb\x9f\x8c\xc3\xde\xf2\xb3,\x9cWl\x92\x1d8p\x1e\xc6\xd3\x94\xc0y\x92.\x8a\n\x01\xfdk\x14\x06$\xce\x08\xbc{sQ>\xfcq\xbb\xfc)tR<\x8d\xd9\x9c\xe4\x92)\xd7\xf9\xdd\xf2:\x89\xb2\xa6\xae\x8a\x97\xae%\xb9\x94\xbek\xea\xae\x1a\x1fp\xcb\xca\xbb7\xd9Y\\,\x19\xda9\xd2\xc2\xcdH\xc4\xe8=\xa9pS\xf3\xe6\x18\x94Z\xc3\x89\xdcp\xbb<\xba\x83\x85u\x93\x7f\x1d\x98|\x11\xc9\x04\xb1\x8e5%\x96\x0b\xd6\x1e\xb34\xd4\xc2\xee\xbd\xbf$\x99M\x9c\xc9\xe0\xb2\xb5\x0355\xf1\xef\x0fL)<8\x82\x18\x8eaH\xffR\x84\x97O\xac+\xba\x15X\x0f1\x0f\xd3\xcb\x85\x9f\xbeL\xa6\xc4\x8e\xd1t.\xd6\xf7\xd7\x1a\x0cG;\xbb{\xfb\x07\x87O\x99}KK_s\xc5\xa6\xadK\xc4\x95\xabq\x84\x00$\x0b5\xab=\x8c\x8bXw-I\x91\xe8\xc9p3\xb4\xb6\xb2\xd2\xb6\xc2\x94\xd7\xc4\xbb\x9aE\xfe<\x83'PPZ\xe5\xa5\x1f,\x08K\xa5@[\xd1\xcbxo\xcaLG\x154\xe8\x17)\xd1$\x80\x06\x11\xa7\x82%m\xc2\x82M\x9c@\xc6\xb2\xb8\x02\xed\xe7\xb55!zV\xed\xea\xc3Vm\xfb\x0d\x8fx\x1fO\xc2\x8e8\xea\x19\x02\xddw\xbc\xabi\xb2|\xf3\xaa\x9d\xa2f\x16\xb2Z\xaeN\xbepTGU\xd4\xd1\xe4\x08\xa1\x91`P\xfa\xf3\xf0:\n\xe3\xb9Yy..\xda`d'\x94\x8b\xecjP\\3\xdbw\xa1\xcd\xa3K\xbe\x02\x9e\x91FC\x08\xa8\x97Y\xe7L\xaf\xd4\xb6vF\x16\xed\xa7\xb1\x98A5\xdd\\\x12bi\xde\x9f\xe8\xd7\xe6\x9f\xf4\xdf\xeb\xb6\xc0\xb4\xb9\xb5\x19\xd1\x9aU4(\xbd92\xec~&qa\x96\xd7\xb0\x81%M\xc4\x03w\x7f#\x98\xda\xdb[\xf9)\x89q\xc3:\xb2vA\xb3\x01p?U\xc5\x0d\x83\x83jI\x91\xd2U\x11\x87q\x84U\xa4\xde*Y\xd9\x8e\x83\xd8\x8a\xf6Y\x98U>y\x02+z\x96\xaa(E\x90\xac\x7fj\xb6%\xb8\xe3\xfa8\xe7$\x7f\x19%\x19\xc9rq\xc6\xbcN\x93%\xed\xf2\x18\xa6\xaeZ\xb4Y\xa6\x9d\xfc\x12\xf4\xfeT\x1b\x97^\x82 \xca\x0b\x99I\xba\x84\x13y\x18\xc2\x9c\xfb\x87\xd5\x81\xd8\xe8\x1c\xfd\x86vLt\xb2\xabsa=\xfb:\x91Z\xc6\x98\xcc\xd6\xce\x0e\xba\xf2T\xcf%7\xba\xf2Y\x07\xa7\xc3V\x98T\xdc\x11V\xf7\xa4\xaa\xfb#\xae\x13\xd4\x8f\xda\xd6\xce.\xb6\n'\xf5\xb7\x86v\x8e\xca@\xfcl\xc5\xe4b\xc5\xe01!\xf7\xdd\x08\x7f\xa9P\x1b\x84W) \xe8\x96\xadvl\xc3nD\x14\xe1KC!ub\xf9]\xafe\xd3\nf&L\xe7\xd1\xb2\xe9\xc9Y\x1b.\xdd/E\x14\x19\x8d\xa5\xf5<\xf8\x02\x9f\xaa\x04\xa4\xdc\xc5\xea\xb0\xac\xbeR\xce{\xe6\x1d9\x06k\xe4\xedy{\x96\xaeMM\xc0\xe6\xab+\x86\x01\xe8\xdf\x13q^~+);\xd0\x19\xe0N\xac/a<\xa5|}J\xb2$\xba!,\xf7Z\x9ca\xae)z#D\xc8\x1ff\xf4n\x95\x92i\x18\xf89a\x9f\xacR\x92\x91\x18\xcbq\xf3\xffs\x9e\xec\x8de}{\x1e\x85~F2\xeb\xb2I.O\xac,\xf0#?\xc5\xb2\xe4\xd7\x82\xc4\x01~\xb7\xf4W\xab0\x9e[\x97\x1d\x92\x11#y\xe5\x82__ \xe1\x8c\xe5\xb9\xc8\x85'\xac\xcc\xe1\xe6}\xc3\xb4\xd3Z\xb6x\xd8 \x0f\x9d\xc1?\xcc\xd0w\xb7b\x1bS\xfb\x87\xcf\xf1\x978\xb9\x8d\x81\xa9.\xc0\xfa\x81\x13\xa8?X\x10f\xb0$9%\x80\x90KD\x03oHf\xac\x0cae\xfe\xf6\xfc\xdd[\\\x04\xde\x0f\xcaju\\\xc8\x17a\xe6\xe5\xfe\x9c\xae8~G'\x0f7:\xfe\xe0\xf1\xed\xf9;>\xa1\xf8Z\xfc\xbe\xbf7\x8b\x96@b\xd3\x15\xb3\x07^c\xb9.\x98[Ky'\xd7\xda\xea*\xa1\xad\xb5Z`,\xbctu[\x1fO\xb9\xf4\x18f+\xef\xd4Q\xf35\xc9\xc7-\xee\xea\xa5\xe4\xc5\x8a\x05k\x0f\xeae\xe5\x85\x8c\xec\x1cs\x1e\x95\x9f\x96\x1f\xf8B\x9e%hB\x8c1 \xaf\xb7\xb8\xaf\x08'\x9e\x90\xcb\x9eK\x93^\xfe\xa4d\xc6LR\x9f\xc6\x82\xf2\x1d\x17\xf8\x92\x0e\xab%-\xd6\x95ii\xe3Rc\x0b\xbb\\\x82b\x81W\x165\xf4@\xea\\\xd9\xbdx\xf4\n\x85\x8dvG\x8em\xdd~\xc9\xd4\xf8j\x8c+\x1f\xee\x1b\xd8\xf2\x1d\xc7cR\xdd&s\xaeM\xdc+\x99\xe3\xda\xfd\xfc^\xf8\x02G\x91\xdb\xfd=\xd8\\\xf6\xe6\xd3\xd9\x0f\xc5C\x1f\xf5\xb0cH\x1c\xdbb\xfda\xc6`\x92\xb3\xd4\x83\xe3ey\x82\xa9\x92\xd3>\xb0\xd1#\xfd\\\x0e\x15_\x0f\xdc%\x80\x19\xda\xb1\xbd\xb7\x7f\xa8\x06\xacO\xf8\xab\xa7CG+7\x08\x8dC\xef\x1f\xa3\xde\x10\x9f\xfe\xe1O\xcd_\xe5\xbel\x13\x89\x0bmD\xdb\xc1\x00\x1c\x81\xab\xf6}\x15\x11\xa7\x17\x81)\xce\xf1\xa5\xf0\xae\xfa\xb0\xb3Y\x90\x08\x05S\xb0Gz\xa5,_\x96\xf1}\x88!\xe1\xcc\xef\xfd\x8e`*\xed1\xd8J:\xb5`bH%\xeb\x19\xc1\xbck\x98\xe3\xa6@\xd5u-\xef\x1a\xe3V\x18%[\xb0\xbcj\x94EbHW\x8e\xa4\x9e;G|\x9c\x06\xe6\xb5_`\xb7\x90\xa7\x16\xf3\xb5\x88\x0e\xa0_\xbe\xaf\xee\xa0t\x1b\xe8\x18\x9bIi\xc6\xb2\xf64c\xd0\xb3i\xe0\xcb+\x14(\xd67W\xa7\x1f\x9f\xf6\xa9\xe0\xa1\x1a/\x1f\xd8\xea\xd4\xd0\xcd:\x91\xb7\xd0\xe6\xfayN\x96\xab\x1c\xf2\x04\xa6\x84\x1d\xf5E\xca\xbc\xd9\x84\xbdni`\xa0*\x03\xaa\xcdl\xf7\xa2^%:u\xbf\x1d\xc9\x0f\xf7\xb5H~4\xfc\xbf\x16\xc9K\x07\xa0^\x1c=\xdc\xd3\x82d\xf7\xa9F\x1a\x1d\xdb\x0d!u\xc1\x1e\xab\xa9M\xfaz]\xa3\xf2\xc1\x05f\xbd\xb2\x02\x0c\xe0\x0d\x99\xf7Z\x8f\xaa\xa6e\x81\xbf\xe8\x0b,\xca\x02\xe7\xfa\x027e\x81\x8f\xfa\x02\xcb\xb2\xc0\x0b}\x81yY\xe0g}\x81;8\x81)\x9cB\"\x92.\xd1\x99\xe5\xd9\x97~7e\x11\xbb\xc6h&\xa5\xb6W_\xe8\x8a\xd7\x9c\xc2\x18\x16\xf4/\xcb\xecd\xa7\xbc\x95\xdf\x1f\x9c\xaa\n\x03\x9b\x8f\x9a\x9ei)\"\xca\x1d:1\x98\x9a|\x03\xf3\xe0^)\x11\x8a\xae&\x11\xd3\xb1\x14\xf6\x1d\xaa\x7f\xe8h(\xb1\x1d\xc0)\xbe\x841\xaa\x81\\\xb8c:!\xac[k\xbf\x85\xa5O\xb14\x8caI\xcb\xd1JB{\x86&yc\x98c\x07\xb0\x9a\x13\x98\xc1i\x07c\x00\x12\x83_\xd1\xb8z\x0b?\xf9B\x96n\x11f\xb5x\x1e]\xe2\xd3\x0c\xf3#\x83\xad\xea\xd6\xba\xbe\xa3W\xe0g\x04\x06\xe3\xcerP\xb7\x8f\xd1L\xa1za\xcd\xc3\xf5k\xb6u\xf8\\\xbd\xb0\xf2\xd1c*\xd7\xc60\x92\xaf\x0ea\xb1Z\x996W\x99\xb8\xccu\x95b)f5C\xe7\xdc\xad\x94\xa3\xfa\x1a5\xdau\x90\xc4\xa1\xd5\xfebr\xd9r\xc3\xea\x02\x88\xb3d\xd47\xca\x86\xa8N\x91\x19\xae\xfe\xd7\xfc\x0d\xaa5]\xc0of.\xfb\xcc\xb6\xef\xbc\x1b\x96\x14\x1b7^u\x87\xb8\xc4a[n\xe6r\x8c\xf4\x89~sM\xff\xdb\xb8\xa6\xaf\x9e<\x01\xdf\xbev\x01\xab5\xa7(\xc9\xbc\xd7\xcci;\xf3\xfe\x02'0\xa2?\xce\xe1\x04v\xe9\x8f\x8fp\x02\x87\xf4\xc7\x0bZf\x9f\xfe\xfa\x19N`\x07K}\x86\x13\xd8\xc7b\x9f\xe8\xdb\xd1\xa1[\x93\xb70Q\xfc\xbaR09\xeeT\x85=n\xc3x\x9a\xdc\xd2!\xb1_\xde;\x0c2q\x82ZL8\x15\xef\xc7\x86\xcf3\x12a\x10e\xfaW\xfd\x14\xdf\x8dAL\x84m\x89\xd9^\x84\x99\xe5\xc8\xa6_Zq\xdb\x9c\x8b\xdb\xe6\xdf(n\xeb\xe2\xbc\\~b\x8f\xf6\xd5\xd3\x16\x03\x81\xd1S\x9eE\xcaN\xeb\x9cT\xda\xceI\xa5\xa6e\xa1e\xa0\xda=\x1aPBEx`\xb0\xb0\x96\xd9(w\xb5\xc7\x7fT\x901h\xd4\x83\xa44r\x1ak9\x9b \x89g\xe1\xbch)q\x9b\x86\xb9x[\x1f\"\x86\xa0g\x07r\xec\xd6T\xb1\xd0=wfym \xd1\xd8\xde\xdb\xd9Q\xa6\xa8\x9a\x91Z\x7f\xf4M\xeavH\x8d\xfb\xd4\x8b7\xe3>\xfd\xff\xc6\xb5\xa7\x8e\xeb\x8f_z\xe52j\x17\x15\xd6\x94%\xc3#\xc8\xb5\x860\xb9\xde\x10\xe6F\xcd\xd4\xa0\xb5NoDr\xeb\xb0\xea+\x0dUx\x8072I/\xb9\xf7\x94\x89\xe3\x01\xbd\x89\x00=\xa8\xde\xef\xef\x0d\x06\x07\xec\xfd\xfe\xde\xde\xce\x1e]I\xfc\xd7\x13`\xf2&z\xb7\xaby.*\x1c\x94\x95\x1d\xb2\xe7\xc3a\x95]J\x14\x1a\xee\x96\xa5v\x86\xb5\xcf\x87\xa3\x83\xf2\xd5p\xef\xa9\x03<\xbf\xd63\x18\x0e\x87\xbb\xc3\xe1\xd0a\x97\x04\xd3&T4\xbe\xba!\xcf\x02\x87\x9d6\xa11\x8a\xfe\x18\xc06\xc1\xb6 l\x9d`\xf9}\x07\x9e=\x83\xa1\xca\xbe\x8b\x8b\"\xbf\xbd\xfd\x9d\xd1\x80~5\x1c\x8cv\x10&FM\xaf\xce\xac\xb6I\xf5k\xd1\x9a\xeeS\xad)\xf8\x0dw6\xdd~bO\xfc\xad\xdf\xfe\xe5\x92\xfe?\xd8zz\xf9\xfb\xd0\xdd\x19>8G\xdbs\xc5\xe0\x8dR\xc5\xdb\xff\xf9/\xb6}:\xfe:\xf1\xb7f\xbc\xf0\xe1\xc3\xfd\xa4\xfc\xe98\xdb\xcaW,\xe7\xec\xeep_+\xb4n7\xc5R\xc4\xa5|\x88\x89\x1d\xf0\x14\xcc\x01\xe3\xd0w\xf6PO\x92{\x01\x1f\xf1\xf3\xdc\x1e\xe0\xb2\x88Dx.F\xabc|\xab\xaf\xcc\x946\x9f\x0c/\xeb\xb9\xaf\xe0\x140\x80\xea\x9b8\xb7\xf3\xd2D\xcf\x85\xe1>\xa5h\x1a\xaf\x86\xf4\xd5\x00\xe3\xb4\x16v\x8cD\x8f\x01\xcc+\n\xb8\xc9\x93\xe3g\xd6\xe5v\x1d8S\xe9\xcd\xbc\xfe\xaai\x02B/\xeb\x895\x06\xeb\x89\xbf\\\x1diB#[\xc7\xf86\xca\xb5/\x9f\xe1\xcb\xb9\xf6\xe5\x0f\xd6\x0f\xf4\xe5\xafE\x92\x1f5b\xd15\xa7\xed\xc6\x88S\x16\xb2\x11\xb6\xac-\xe0V\xba=\x84x\x93K\x06a\x86\x1eK\x9a\xc1\x85\xe1:\xfa\xe0\xd6dVR2Lq\x0c\xe6z#c\xb4`\x149H\xf8W\x06\xe6\xbeKum\x0coH/2\x89/y\xe4\x1bm\x19]\x0c\x91\xfa<95Z\xdb\xc5l\xc0=\xd2\xe9q\xa0[\x1368\x8e@.y\x04\xf3V \x11\xff\xb4q<\nSW~\xbe5\xcd\xa9\xeb\xdd\\\xf8xN\xd3\x9fE\xcc\"\x1d\xbek\xcfgWJ\x1e\x84b\xd4\xfa\xe5\x17\xcb\x81c\x18p\xcd\x16)\xe3,\x86.X\x7f\x1eZ\x8e\n\x99\x9f\xfc(\x9c\x9e\xc5y\x98\xdf\xbddf(>}\x81x3\x99\x92\x8fI\x88j\xea\xc2e\x9ajZ\x17\x96\x0eI/A\xb4\xd4\xb5'\x86\x9ee\xae\x9c\x18\x08\xbb\xc5\x06\xff\xd7\x1c\x03\x84w\xb6\xb1\x12I\xd80\"\x83\xa8v\xea\xc2\x8d\x0e\x19\xb51Ak\xc9\xd8\xa5\xa0\xd6U\xe0\xcbS)\xc1;\x8c\xf5\xf2\x98\xae\x1e\x19E\xeb\x0dn\x8f1K\xfb\xeai\xcbD\xeb{\x87Z\xd1\xfa\x81Z \x13\xad\x0fGj-\x8f\x93\xad\xbb\x92\xf4\xdc ^_t\x89\xd7o\xba\xc4\xeb\xcb.\xf1\xfa\xbcK\xbc~\x07'L\xb6\x8d\x923.\xe3f\n\x13!A7\x8a\xbc\xcd\xa2\xf5\xc5\xba\xf2\xf8+8\x81kI\xd8G\xbf\xb9\xae \xff~\xd7\xa5Q\xaaD\xechY)\x89\xd8\xd1+\xd3f\x82v\x14\x91\xdfA]\xd0~\x87\x82\xf6S\xb8\x831\xc4\x0eJ\xd4\xe9\xb1\x8c\xc2\xa5\x00\x8fp!&G\xc9\xb9Q\xa0X\x98\x04\x8aw\x8c\xc4\xb8c\xe2@!2\xfc\xec\xb8\x80\xb2\xc2\x0d\x9ee,\xe4\x02\xc3\x15\x06\x08\x10\x02y\xf1\xd6\xbe\xe2\"G\xa301\xf5\x02\xa6\x9eJ\xdc\xffi\xc1\xa2Y\xf5\xa5*\xb3\xb8\xeak\xa0\xaa\xc4\xf8\x06Uw\"\xdd\xa0\xdb\x96J\x00\x15\x9a}hP=\xdc\xf0\xa8\x01\xdc\xcc&\xc4\x1c\"\xda\x85W``KtM0R\xdf<\xf22*\x95\xed\x82\x85\x11\x15~\xec?\x9c\xa0\xe1\x0coH\n\xba\xec\xbb%\xf9\xe4\xa0U\xcd\x0f\x0e\x8fF\xf6\xactu?\xde.}\"\x9e\x19\x03\xfe\xaegP\xa7\xf1X\x8b\x99\xea3\xb7\x0b\xc7\x85\xd4N\xbd\x8f\xb0 \xa9\xf7\x1a~\x84\xa4=\x02\x83\xe0o,\x0b&\xe4\xd2\xa6c0\x02)gF\x03\n\x05}\x7f\x0f9w\x88\xa3_K\xd9\xe0\xeb\xc3u0 #\xc6O\xae\xb15\xddG\x15\x8e\xba\xeaU\xdc\xc3\xfa$_\x84\x95\xd1\xfa\x83,on\x9a\x19\xd0\xfab:\x0c\xa3\xb4\x1aq\xd5\xc0\x05r\xe3G\x8em\xb1\xc7U\xf5F# \xcd\xb1Y\xc9\xdc\x11\x93\xb1[\x1d\xaf\xf6\x9d\xa4\x905Q\xe3S\xdd\xe6\xfc\xfe\xa2\xc6^\x9e\xb37\"\x19E\xa3\x01\x91xb\xacMT\xb1\x08\xb3SV\x160\xf1\xf0j\xb9\xd0\x84\xe7C\x91\xd89\xf6\xb2\x15 \xceIDh/2\xcd#\xbc\xfb\xb7,i\x15\xf7\x89\xa3\xcc\xf4\xad. \x8e\xb8x\xa7}\xbb\xa0\x0cmi \\\xd7\x1e\xd25\xa8XH\xff\xfe\x80\xb1lb\x9d\xa5\x80|}H\xc3\xb1\xc6\xdeF\\\x0f\x18\xd5\xd3\xd4l\xeeB\xd8\xf7x\x85j0\xe2\xd4\xb8\xf5\xd3\xd8\xb6p\x95\xde\xa6\xfejE\xd21\x04I\x11M\xe3\x1fr\x98\x13\x16\x17\xd4r\xdc\xa6\x9fa\xb3 \xad\x17\x99@dt{\x0c\xfe\xa1\x86\xf4\xcd\x86[\"\xe3\xf2\xcdGiZ\x7f\x15\xaa\x9bO0\xae\xcd\x944\xcc\xf9\xae\xbe\xc9v\xbc\x81g!\x8d\x9fW\x0c\xdan\x17\x13f\xe6\xfe\x0f\x9d.\xeeU\x1d\x15:\xc1\xa7h\xe3\xcf\x08\x91J\xde\x8eqCE\x02l?\xe6\"\xf7\x0d\xc3\x88\x1f-R\x1c\x1d\xa8RBLy\xd1\xe4\xd1d*\xa0\xa4\x06\x18\xda\x96\"\xb2\x887M\x8e*\xa5\xfcb\xd2\xcaQ\xea\xa1\xa7\x0f\xcf$\x8f\xa6\x1f\xaco\xfa\xc4V\x16\xae\xbdL\x03[\x03\x03\xed\xba\"\x0d[s\xa9tx?\xd6\xfc\xb2\xdb\xcc\x7f\xae\x8b\xf9E\x92D2\xb3\xd9\xab}I\x90\xac\xda\xa7\x0b\xab\x1bu1\x84\xdcv[uZ\xf2+k\x80\xfa\x99-\x9f\xb23\xa6\xf1\xdc\x95\xa2\xe6\xd4\x0b\xab\xd1s4\x87\x13\xba\xb4\xa3\xeb1\xda\xe8P\xb4\x8a\xe4Qj\xc7\x8ekN\xdb_\x1e\x0d\xa2\xdaZ\x89\x1a\xe1\xfe\xd0h\xcf\x9a\x93\xdcb\x91j\xe8\x9cg\xe2\xae\xb9I\xad\xe7A@\xb2\x8c\x9e\x7f\x18\xab\xb9X\xd19#S\xd36\xb5\x90d\xe1u3\x86\x8c\x99\x87\x95\x0e)kn\xe4~Vb\x0dw\x84\xb5\xac\xc4\x1e\xd7\xa4\xbab\xbe\xa5\xc9N\xb7a\x83\xcb\x81\xce\x88,\xb6w\xf6v\xb5\x8a\x91}Uz[\xf0\xe2\xaa\xe7\x02J\x9f\xecCu\xafD\xac\xd1]u\xe4L\xf1\xaf\x96\x9ei\\\xadV\x18\xb0\xb3\x0eS\xb4L\x9b\x93\xfcc\x92Dd\xaa\xe6\x87Xh\xe4\x1a7%2)\x1f\x97'\xeb\xb2\xc1\x1d\x9cy\x98\xde\xea\x13 \x928\x08#r\x91\xfaq\xe6\xb3\xd2O\x9e\xc0\x0d0'\xff\xe1h\xc72YOP\xeem\xa2l\xdb8\xccY6\xcfq;\xe3\xc5<]\xc34\xbf+i\xdb\x8ce\x18\xc3\xbc\x18\xecX\xae}\xa5\x88\xa54\x82\xabu\x1a\xd98\xa9\x9a\x81S\xb0g(\xb5\x0d\x08%\x19\xcd\x9f9.\xdc\xdaH\xfe\x95\xdf\x9e\x18\xc3\xb0?\xa8t\xe6z\xc0 \xfc(\xba\xf6\x83/\xff\xbb \x05\xf1R\x92\x91\\\x11{<\x16\"\xf5\x9a\xe3$\x0fgw\xcf\xa3H\xad\xbd\x1a\xc8\xa5nI\xdd5\xe3\xff1\x1f\xe7j\x98\xd2\x9a\xb2\x9d6\xb8\xf2\x95\xebj\xfa\xd7\xd8\x07\xa2\x19\xcd\xba=i[\xd5R%\x1b\x83v\xdb\xa8\xeb6\xe35\xe2]-\x93\"\xce1\x15\x06lA.\xdf\xb7V{\xd5F\xdej\xe1\xa2\x88G\xeb\xab\x96\xc5\xfe\x18\x8ev-\xc4\x9c\xe2\xb9C\x7ffI\x9a\xdb\xd7\x8e\x0b\xab\xcd\xcdz%Ud\xba*\xaca\xce\xa3\x1a6\xd7\x0b\x17tR\x04:\x9b\xc4\x06\x0fQ\x1f\xe7\xe8jE\xe2i\x18\xcf_\xf2\xd9\xcb\x9a\x0c\x1c\xba\x156\x0b\x96\xb3_xQ2\xbfHVo\xc9\x0d\x89>a\x88'c\xa0\xa3\x1b\x1e\xbd\xd6\x90\x9e(\xf4\xae\x82\"MI\x9cs\xc6\x0c\xf3\x89c\x9e\x03?\xc8E\x1b?3\x16\x0b\x8f\xe4\x88\x8d\xa2\x11g\xcba\n\x03\x8be\x03,VS?',\xb8WD\x97\xd4{\x7fI\xe8\xaa\x14\x0c\\\x1e.\x89\x9dt\x19\xab\x00\x87F\xe6\xadH:K\xd2\xe5g\xac\xf7\xcd\xec=\xa1\x84\x85\x9f\xde\xd9\xa1\x8bF\x0d\xcd\x85\xcct\xa7 *n\xa5F\xcf\xe2)\x8b\x0c\xae\xe7>{D\xbe#\nf \xf1\xaf\xf4\xaf\xedO\x82K\x97\xef\xc2\xe2:\n\x03\x11\xb8\xc6V}>\xfe\xd4\xfc\x95\xd8\xb2\xdf\x19D*R\x9c\x93\\\x1a\x1b\x9f\x90\xac\x03\x8d\xf1\xad8oC\x87\xc2-4I\xfb\xe0\xc4v\xb4\x14z)\x89\x88\x9f\x11\xbb\x89\xa0\x1c\x03\xd6b_\xb6!\xa4Z\x9d\xba\x99\xee@v]\xa1\x86\xf8\xd2\xea&\xb6\xa1\x02i$\x16$\xcf\xd1\x89>M\xc6N\x88\xc2-E\\\xd0\x93\xe2\xd5R\xa1k\xd6\xf3\xa7S\x8a\x9c\xc3x~\x91\xd8w\x8a8\xef\xb6M\xcc\xc9\xa3\x0b\x95h\xf1\xfe\x1e\x16\xc6(Y\xb3\x0e\xb7:\xa1\x88\xbb\x93\x8f\x1c=\x86!b\xf0\xf6\x95HKO\xd7\xc2]9\xad\xba\xd4v\xdaN\x19{\xc3\xa8<}\xf3\xe2\xe4\xd0\x04\xb5\x03-\xfd\x08\xb9|\xd4\xd7\xd6tWG\x8d\x82\xa4\xb3\x06/`\\\xed,2V}\x81^Sn\x8cL\x19\xee\xcb\x9a\xeb\xb4\xcc\x17\xd3\xb2`\x97t,7^\xbd\xaaf\x05m\xfb\x84\xe3\xb9\xcf\x1c\xb5\x97\xe75\xd1\xdbP\xf2\x16\xc3\xec\x05m3\x8c\xe7\xbcQFFb\xa0\x81\x9c\x0b\xe8PZ\xe0]\xb1C\x03\x8b\xbfGm\x08\x17Ji^\x9c`N\xbc!\xd2\x98\xdaQ\xb5\x8ed\x16\x15\xd9\xe2\x85\x02\xd5[\x85\x19\x8a)G\xceT\xca\xcd\xe5\x88/\xf5\xf3g\x16\xb1\x88\x8b\x94L\xc3\xbe\xe5\xb4\xe2>\xbd\xb6\xb0I^\xb0\xfe\x08@\x9f\xe7\xa9\x9f\x93\xf9\xddz}9\xa0}\xd1gOQ\x00\\\x92T\x87\xf8\xc95\xdd:\xbe\xf2Es\xda\xc5GO\xe9G7\xfa\x91\xb5M\x9a\x9f\xf9\xab\x1e\xa9T\x03[\xb3\xe6\\N\x97\xf0[\x8f\xd5\xf5\xd2\x8f\x7f\xc8\xc5\xb2\x06?\xc6&@\x1cP\x10\xc6\xe0c\xe8E\xf25\x87\xdb\x05II\xc1\x87\xe2c\x08\x85\x1c\xaeI\x18\xcf\xc5\xf6\xf4\xe8\xb8\xa6%5\x80\xfds\x19n2\xb2>z\x81\xd6\x19>]C\xce\xb0\x11\xdb{C\xc7l\xb4\xc3q\xc0\x01\x9d!\xbd*\xe9\xf7\x07\x17,\xbf\xa1B\x02FytP\x06r\x13]s\xeaxU\x9c\x8c\x87G\xa84\xc5\xd3.O9\xcc~@\xc1\xf2T\x17\x1f\x07_\x8d\x86\xea\xab\xd0\x14h\xa2\xd4b\xa0\xcd_\x861!\xe4\xf7\xa5\xf6\xa4\xd3[^\xc8tUSWz=@\xd7\x8e\x95\xf5\x0b\xdd\x1d%U|\xaf$\xe5Q\xcf\xe4\xd7,\xe2i\xa9\xa0\xa9\xcc*O\xab1\x8e\x0d]]\xcf\x83\xe8\xbb*D\xc4/\xd9;\xb1\x1b\x18\xd2\xac\x9d@hW\xfa\xae\xd6)\xe3\xfd\x97\xc3JR\xe8H\x86\x00c\xd4\x03U\xddk\x9d\xc3\x7f\xc4\xfc\xad\xd1\xf7\xc7oG\xb3\xd4\x93\xb3\x97J\xc4O}S&\xfc\xd6 \xd0\x9a^Bgx\xfe=\xc6( T\x0d\x86\xe6\xaa\x84\x94\x0bTu\xf2T;\xb6\x9f:.L\xaci\x98\xad\xe8\x01\xf2\x12=\xa9-\x17\xac\xab\xdcOylVz\x1b\xfbyx\xc3\xfc+1\x96c\xf6\x8a\xcd\xf7\xc7\x94\xd0gd\xca\x9eRT\xee\xcf\xd1\x08\xee\xa5\xa94B\x1f\xca\xdd%j\xd8p\xdf\x18K\xdb\x10\x1d\xad4\xfb\xd3ft\x03\\\xd4\xa7\xd8i\x96\x01\x8e{\xe3Y\x0c\x00\xec`\xf0y \x8f=D\xc5\xecX\xfa&\x9e\xf8\x9a\xdc!\x0d\xe8\x08Y\x1d\xe6B\xf5\xd4Y\x87S\xdd\xc31l\xb08\x8e1\xb7\xde\xfb\xa9i\xbc(i\x84\xbd&\"\x80\x13\xa0\xdcU\xd8\xb0\x9aR\xf6\x1bZY\x89\xc8\x9d\x1a\xc4\x81<\xb1\xbe\xfc\x9f\x9acN\xedL\x96\\\xd5\xa7l\xc5\xfa\xf6J\x9c\xea=$L\xcdAmh&\\H \xd4\xd5\xda,\xc9t\xd5\xc4\xabw\x05}\xa1\xea\x8fl\x87\xd9\xf8a\x88\xcc:7#M\x08\xafM~r\x02h\xadf\x9e\x95\xc6\x8c\xb4r\xa7Y\x9e\xac\xa4I\xe9\x00\xda\xfa\x80P\xeaGH(\xcfZ@\xc1\xb0\xea\x0bD\xbd\xbc\xc2\xda\xa3\x13\xa6\x80\xee\xbd\xb8:\xc1\xb1\"i\x86\x99\xc4\xbb\xd7N\x98}d\x85\x19\xdaj\xb4\xd3\xd6\x8c\xfc\xadv\xbf\xd4J\xf7\x96\x9a\xd6\xa6\xa7\x07\xae\x84z\x0c\x0d\x96\xd1\x0c\xf1\x0f\xd3\x84k\xa3\xd3\xeb\x94\x15\x95\xd0\x9aebB\x146\x89//\xb5\x12\xd1j_;.dU\xe7\x98kc\xe6\xf9\xc5|I\xe2\xfce\xe4g\xbd\x1dNd\xb8\xa8\xbe'5\x1f.\x84\x8d!b\xda\x0d\x8fn\x10\x93[\xf5\x18J\x99\xec\xbf\xfc\xd0\xa9\xdda\"\x16\xf9A\x9d\x98\x06\x8c\xa6.\x8f3E&\x18\xfbR>f<\x9e\x8b\x98\xa4\x19\x908H\xa6a<\xafgD\xc8\x17$\xc6\x8d\x87\xc9\xd2\xca\xc3\x0fD\xe0\x17\x1fx\x03\x06e\xb88c\xb9\xc1@/\xd57\xffF\x18\x19\x18\xcc\x04\xf4S\x13\xb5\x88\x85\xc0\x0cCC\x8c\x9b\x1f\x84}n}\xdc<\x9b\xa6\x0f\xac\xa2\x16gp\xbd\x03\x1d\xae\xdb\x17\x0c\xdb=y\x82LO\xb9\x1e\xe4w\xcdC\xbe\x85P\xc3\xd0>\xde\xf5]N\xde\xf2l\xdd1FWA\xcf\xf3\xea1\x1cWv\xcb\xeaV\xfd!\x99\xcd2\x92\xff@\x97@R\xe4\x90\xcc\xe0:)\xe2if\x9a]\xb5MZ9l\x82\x8d\xb6\xfd\x03\xc7\xd8\x0e\xdbs\xfd\xdb\xc9\xeb\x99\xd1\x99!juO!\xd5@\nuE\x80\xae\x08n\xe0\xb1\xee1\x05\xb3\xbe'\xad\x88)oCD\xb4\x00\xcf|\xd8\xbaU4J\xe2\xda\xec\x8f\xf5\xde,\xdd\x04\xa1\xb84\x9f#@\xcb\xe8\x0e\xf7\xf7\xcc\xed\xde*\xf2\xd9a\xdb\xd4od^\x98\x9dq\xbca\xc7\x8ei\x13 \xd4bIh\x83\x1d\n\xac+%\xee\xd1\xed$\x90\xce\xd3\x01\xdc\xc3\x82M\x9c\xde\xe2\x10\xf8\xe1\x8a\xd3\x81\xc7V\xea8\xdem\x1a\xe63/HX\xa7\xdcL\x8d\xe1\x98\x11\x91\x84rZ$\xb9)\x1bUJi\x08\xfag\xf3\x04\x86t`\x18\xbax\xb4\xb7\x07O \x9f\xa4\x1a=\xd7Z#\xd4$^\x85r\xdd<;\xa1\xbc\x95\x89jy^e\x96\xf1#\x0c\xbfB\xf8\xce\x82\xc8O\xe7\x842\xa8~\x0cK\xffk\xb8,\x96\x90\xa1;\xc7\xe0+\xe5\xb3}9\xcd\xf5p\xdfAWNJ6i)\x9e\x12a\xdf\xf7\x1c\xd4\xa2u%J'\x8b\x9c;JH\xcb\xf5\xdb\xb4\x0f\x92\xd6\xdasHe\xbc0\xfb)$,\xd0H\xf31\x9d\x88\xfb{ \x06\x14/\xf7\xb4\"0\x9b\xbd\xd5\xb8\xd6W\x8c\x9e\xa5\x13r\x80\xb4\x9c\xdb\xa1\xc0\xa9\xcd\xb2'\x9a\xedU[\xbe\x1b\xc3\xa3#\xa7\x14\x0d\x1bOB\x14\x88Z~\x16\x84\xa1\xa5\x17\x8b\xb2\x12\x91\x9f\x87\xf1\xb0\xb5\xc8u\x18\xfb\xe9\x9d\xa1\x08H\x12(\xfdq\xc2*A2\xaf\xad\x95\"\x9fm\xb5\x96`\x84vg/^\xdb\xc41\x02\x1c\xaa\xe6\x82l\xd4\xde\x9f \xdb\xea(\x91\xcf\x86\xfb\x11\xe9*\xb3\xd5R\x08\xaa~\x8f\xe0\xc7v\x08.\xc8\xd7\xeeZbx\xf6\xec\x19\x18\xac\xb6\xf9t\xfa\x19\xd9\xdf\xed\xae\xea\xb7.@\n\xa32cE\xa8\xedpzO\x0cp&\xcc\xc6\x1d\x95;\xf5\xe8f.\xcf\x8f\xd6\xf8T\x95\xbe\xeb\xd1\xd7M\x1b\xc7\"\xf6\x16\xd1F\xc6\xe7riz\xfc\xb9\xe2\x10L{5\xba\x94\x98*\x83\xc6\xa1B\x01\xa4\xa4\x189\xc0\xb64\xd3h\x10\xb7\xc4\x94;L\x99\xf0\x1cOn\xe49\xe1\x99,\x91;\xc575\x11\x1d=\xdd\xb7\xca'\x87 b\xa1I\xcf\x1cV\xe1f\xecB\x98\xbd\xf7\xdf\xdb\xb1S\x16K\xf8\xe1\\\xca\xb7\xb6`\xe8\x08\x91\x80(T\xbe\xdcDZ?\xa6\x07 \xe9p\x84@\xcb\x95V8\x00\x8f\xfe$7\xdd\\\x19@\xa2\x8c`m1\xa3\xd7\xcc\xcdm\xf4k\xafk\xf9A\x8bH\x8c\xd9\xdd#\xcf>K\x93%\xe5\x15S\x07\x15\xc35\xae\xac\xc6J\xe5\x15\xfb\xb45\x841\xcc\x95\x15eX!Z\xe1\x13\xaf8\x87'H\xeb\xb8\x069\x83\xe9\xd0\xad\xc4\x17\x92\xf6\x97\xc7\xd9\xc5\x08\xa4\xa7\xadE*\xf5\x04\xe7Z\xb5\x85#?\xcb\xdf\x18>\xc0\xb1O\xf2\xcb\xb6\xd1ky\x97\x1b?* {\xc1\xae0\x08Q\xce\x843Z\xfd\xe8q\x15\xfe\x06d\x12\xb2\xf0l\x86\xd8o\x85\xb4p\xf5%2\x89\n\xd6O\xb1\x14\\\x95\x89\x14\xd8\x89\xc6\xf8\xef\xb4\x8a\xc6\x99*h\x14\xe9!~\xb8q\xa1\x15>\xe0gY\xfd\xd1\x96\xf4\xcc(/@\xb2\xb6\xa2\xd8GL\x18X\xddw\xee+\x9fEO-`\x9bEQ\xe5\x7fc\xfc\xab\xd9o\x8dG\x8a`\xd6\xd4Q\xde\x8dai\x92FX\x00{\xe2\xa5\xc4\x9f~~\x13\xe7\xc3\xfd\x17gv\x0e?\xea\xdc\x18\xf5\xfb\xdc\xa8E\x16\xce\x8e\xa6A#M\x87j\x98#\x08\xe1\x18\x8a#\x0877\xf5L\x19\xf0\xc6px\xa1\x83\xfdG\xad4OQ\x1cp<\x1c\xc2\x16\x04\xadr\x1dQS\xf9!]9\xb4\x9b\xa1\xe3\xb2\xcfa\x93\x03(+\xe7-\xa0\x001V\xc9\x91\xec\x16K\"\xc1j\x0ca\xeb\x84\xf7\xc6\xe5P0 g3lb\xd8\x84\x0c\x9eAQ\x9e$\x05lA\xe60\x7f`\x84\xda3d\xe6\xc2\xad\xad\xb6!\x97\xc4\xf3\x8c\x07\x0b\\1\x1ep\x05\xc7\x90\x1d\xc1\xaa\x0d\xe8P\x03[{>\x1cCz\x04\x9b\x9b~\x1b\xfa\xa0\xc7\x84\x9c\xf7\xa2\xb8\xce\xf2\xd4\xa6|\x82\xef\x02O\x8d\xa1_X8H\xa4\xd6\x8a\x8a\xa0\xf0\xf5e\xc9\x84\xee4f\xba\xdb\x03\xe9\x89\xcaz-\x9a\xeb\x8eE\xc3+{a\xbf\xa6\x1bJ^\x16\x0e\xaa\xe4\x9a&@\xa6\x96\xae\xfa\xb6d6\x18(\xeb\x94smM.]Y\x14V\xb2\xf2L\"\x963\x87K&8\"r\x02\x94\xb8C\xa2\xafK\xa8\x98\xaf;\xe8\xdb~\x83\xae\xc1\xa6W\xc5g\xfd*~a\xff\xb6~\xa7\xbf\xf6\xad\xbb\x97V\xa3\x92W\x96\xde\xb6|\xd6\xa4\xadF\xa4\xa0\x15\x1b\xb6\x9d\xd3\xd3i\x84i!\x1c\xbe \x19+!\xcd\x9f\xcf\xf9M\xcaO\xc3!\x8f\xdaL\xd1\xc6\xde\xbe\x0b!\x9b\xf6\xc4)\x7f\x9a4yF\x94\xfc\xf0\xad\x0b\xfe\xbc\x8d\x9f\xad\xb3\x10t\xd8q\x8d\xc5\x84SH\x91\x07yq\x97\x13\x91\xf1\x9dbU\xf5!WQ\xe5u\x9b\xae\xb6~\xbdl\xeb\x17\x05\xf3;?_x\xcb0.i\xc6\x1e\"[:\x9f\xe8\x1aq\x04 \x8an\xdb\xd0&\xa5\xbd]\xb4\xafu1F\x07\x99$-\xc9\xe5\x03\x11,\xc1X\x82\x9e\xe0\x11e\xa5w\x9e\xc2)\xec\xc2\x98\xdd\x8dv\xe0\x14v\xf8\xdd\xf0\xe9\x10Na\x04c\x93\xe8\x05iE\xd8\x84\x19\x1c\xa3\xb0O\xc8\xeffm4D\x9f\x04\xb8\x11\x1c\xc3ptX\x12rQ\x8b^ \x04\x9da.\xd2'-.m\x8er\x19\xc3\xa7#x\xc2\x88X2\xa1\x83\x1b^:L8@\xd9\x17{g\x08O r\xe0\xf8\x18\xf6\xe1\x1e\xf6w\xe0 %^\x9f\x89\x0cb\xd8\xdd\xec;t\xd7`\xf6).\xb9\x7f<3>\xde\x8d.]e(!\xf6\xbe\xfe\xcc\x97F4\xdc+G4\x1c\xc1=\xd8bL\xf2\x10}:\xc4\xd1`\xf7\x80\x7fw\xcc\x13\x96\xdd\xdf#9+%x\xfb^\xe3\xdf}\xfc\xf8\x8b\xf2ng\x0dh\xd4\x9f\x15\x06\x08\x1d*\x10\x92@\xe6\xd7AV8\"\xef\x1b\xad\x89\x82\x8c\xa5\x92\x1bI`\xd2\x0eQO\x12\x97\xc6X\x94/\xc2\xcfi\xdd;.\xee\xe4!\xc5s\x81\xdc\x9e\x1d\x94i\xe4\\H\x19>\x0f\x98\x18u\x00O\x00\xf3\xc5\xdd\xb3I\xe4\xdc\x0c\xcb%w\x0f<\x95\x1cer\xc4w\x18\x1bg\xf3\x04fM\x8co\xc2\xd2\xdd\x14\xc9M\x19\xa7\xa9M|\x8a\x8aq\x8a^\xbe\x94$\x9f&\x1d\x1d\xb71>\xe7b\x10\x9d\xde\x02$\xdd\x85\xa5\xc9V&\xaeT\xaf\x0c\x04(\xc3\xa2\xa4\xa8=\xa4\xc7\xeb\xe6I\x9f\xce\xf0\xe3&u\x99j\xeeK\x07\x11\x157\x81l7\x8eO\xf9.\xf7\xb8b\xe9\x84\x1e\x0e\xb9w\x1e%\xb7\xe5\x93\xf6y\xd8$U\x84N\x82\x12V\x0dC\xc0\xba\x95y\xa8\xba\xb37\x1b\x1e8\x90{o\xde\x9f\x7f<{yq\xf5\xee\xf9\xffw\xf5\xe2o\x17g\xe7t=\x0dL\xb2\xb8\x139\x89\x0e1\x98\x05\xe9\x9fwy\xf6\x18\x83\xdf\x0b\xdf\x1a\xc5di\xd8a\xa2R\xb3J2\x9fie)\xbd\x00\xb0\xe5\x18N\x92\x1e\x01\x13\xc4\xc5{\xb5\xdb\x94\x1f\x89K\x8f;\x1e\\\xd8\x1dqZi\x96$\xb6c\x14\x87\x12\xca\x901K\xd3'O\x84'x\xf9\xcc\x1eb\xc2\xbcJ\xa9\xd8\\\xaa\x9d\xd9\x0d\xf8\x1864\xb2\x93\xfa\xbab\xf1u\xbe\xbc\xf3\xbf\x96\x91\xa3|\x1b\x05\xcb\xab$\x89\xce\xc3\xdf\xe8t\x1e\x0e\x9fb\xf2\xa1+\xeea\xd3\xb9\xe2\xb5\x13[sJT=\xbf\xb8`\xbb\x87\x1f\x8cT\x7fd\xf3\xf0EZ\x0b\xcc\x16!\xb5\xec Y\xeb\xa3v]\xd1\x91k\xcb\xb8\x06\xfb\xc9st\xf5\xa7\x0d\xb1_\x18\x1cJ+!\x13\xdetY\xa9Xa_hmM\x98\xe1K\xdd\xd5\xad\xcd\xccAV\xec16\x08\x02ZGc\xdf\xd43\xd0\xc9\xb5\xd5\\j\xb5\xd0B\x0c\x933\x0c\xd2\"\xd5\xa5\xbc\x07\x99\xc4\x97FvK\xc8\xa5j\xc7\x83\xad\xcb\xb3\x0f\xdcV\xdc\x84\xee\xcc\xbd0\x13\xe7>7F1\xb3\x812\n\xf7\xff\xa0\xf9\xa3\x97\xcf\x8c\xb9Q\x13\xce\x19_\xe1 \xdf\xb1\x16\xa1Z\xb7is\x91J\xce\x1e'\xb0p\xa1F\xe9I\xc7\xe7\xc6\xa0\xfe.\xbb\xf5W\xc3\xfd\xb6x\x9d\xa0\x06\x0fh\xd3\x13\x11\xad\x9eH6\xd7\xe4=\xc9(\x89]\x99\x0e/\x8b(\x0fW\x11\xa1\x10\x1c\xeeo]\x87\xb9\xf6X\xac)\x1a\x06Gh\xbeK\x8e\xd8\xf2\x1b9p#\xe2\x9f\xba\x98\xb4R\xc7\x7f e\x82\x1cB\x04\x04\x10\xeb`\xd9\x19}W\xb0\xec~#XvF\x8f\x02\xcbn\x03,;\x8e[=\xa2`b\x7ftZ\xb85\xa0\xb5\xbf\xfb]\xa1u\xf8\x8d\xd0\xda\xdf}\x14\xb4\x0e\x1b\xd0:\xd0Ck_y\x9d\xe8\xda\xf9\x83F0\xcc\xe6LX}a\xfc\x16x&\x8f\xa7\xf2(\xb1\xfa\xd5\x8b~S\xb1Z\x890\x90\x90\x1f\xa2\x19\x1e.\xba>M\xa0\xd9(\x96>>\xa1\xbd\xe5w\x9d\x1f\xe3\xeac \xa4\x89\xe4\xcc%\x19(\x1b\xa5\x1b\xd0\x83\xee\x14\x17\xef\xc5\xc7j1\x9b\x9c\xac\xa0\x0f\xb5\n\xbd(Vq\xf1\xc6_\xae\xd3x\x1b\x9d+.^\xef\xf3u\xeam\xa5\x8e\xa1\x1f\x85,.\xde\xfe\x87u\xda\xef\xb4\x1d\x86\xaa\xe2\xf3u*n\xa1\xc6\xa1\x17E\x0e=\xa9rX\x872\x87j4\x17\xfdF\xd3I\xac\x03\x94v\xd1Z\xc6\xfa3\x8b\x0eUz+\x8e\xb51\x14\xd4\x8b0w\xc4M\xb0\xac\xbef\xd3\xa0\xa5\xc9\x1eD\x0c\x12\x1c\xac)\x0cI\x1d\xa9\x93_\x0b?j\x8f\x1f\x01ZiC\x87lA:\x0c\x85\x8df\xeb\xc1\xc3\xcf\x80\xfb{\x8e,KY\x88\xde/\\\x19E\x18g+L+\xd6\xefd2)F\x98\xffRC\xca\xdf\xdaqq>=\xe3f\xd3%]Q\xba\xf3 \x8e\xe4\xfe\x92\xde\xd2\xcf\x83\x85\xbd\xed\xfd>z\xd8\x9e;\xde\xdf\x930\xb6-\xb0Dx\xb0\xb22\x9e\xec\x89\xa5P\xf7<\x0f,\xc7q\xc1:\xe6\xf4\x06\xae+]6\xf4:\\\x0c\xf2\xa4N\xa3\xf6\xef?\xd5*\x8fW;YU\xcfmf{\x8e\xda\x11\x0e\x90\xb1Z.-\xed\xb6\x94\x17\xcc\xd6,i\x9c\xa8\xb9\xf0u\xa7'pY\xef\xfd=\np\x06,\xd5\x9cr4\xeb)>\xee\x8f\x9e\xd2G\x80\xf6\xd1\xa6\xf1\xa6\xf0\x8c\xf7'\xa7\xbfZ\xdd\x84\xaa\xf2\x9d.\x04Je\xe6RH\x07\xb8\x10\x97\xbf\xd2\xf2WR\xfe\xaa6_/\xf1^\x88\xae\x03[t\xf5`\x0e,\xd8\xa2\xcb\xa9\x90%z\xa1\x0b\xbe\xc3\xcc7\x10\x9c\xa5^0\xe1*\xd8\x9ae\n\xd3\xec\x0e\x8e`\xc6\x0ci77gf `4\x991 `0\x99\xb5J\x00i7ia\xd6KZ\xda\x8c\x83\x1f!\x01\x0c\xe1\x18\x8d\x90Q\x02\xe8\xc31\x84f \xa0\x8c\xa5\x82\xa8\x98\x92>\xb1\xc6\xa4\xb6\xb8q.\x82\x92\x9b\xe3\xdbf z\xd3\xba\x7f\xad\xc6\x96\xf5\x90\x1a\x98:\xaf\xad\x11\xc9\xe4\xff[\x1b\x1a\xb66\x84\x1e\xfaz\x0cf=\xbdp\xdf\xd4E\x10\x86\x1cm}\xa5\x10?X\xac\x0f\xda0@\\X\"\xe2\x87\x984\xd99\xba\xa8\xf1\xe5\x1f\x1a\x03\x03\xa9\x91\xfe\xd4\xd8t\xa6\xeacz&IB\x07s\x1c\xcc)\xf9\n\xb2x\xa1'D\xff\xde\xc1\x0c\xe5\xa5O\x7f\xce\xed\xa9\xf7p\xc2\xf5z\xc9\xda\xeeU\xadud\xaf\x17\x17Fu\xc3\x1d\xee\x8e\x96\\\x02\xea!\x9e`P\x9e\xe3c8\x84\x1f)\xfd{\n \x8ca\x08[\x908\x0e\xdahk^\xf4\x1a\xf0\xfb\xb5\x06\xbc;z\xba\xfbt\xff`\xf4\xf4;\x8dz\xd7<\xea\xbc9\xac\x1d\x1c\x16\x03F\xaf\xc1}\xea\xbd?\xbeea\x99\x96j\x0b>y\xf4\xfa|U\x1bQ[J\xc6\x90\xeeB\x04\xc0\xc0e\xa0v!\xe1<\xae\\\xc7h\x87\xbd\xa3\x10\xd8\xed\xd5\x87\xb7\x8f\xee\xc3\xa1\xa1\x0f{#\xf6\x8e\xf6\xe1P\xe9\x83|\x97\xa9t]\x1f\xfb\x1d\xe1\x15\xd7OI}\x02\xff\xfd\xdf\xc4U\x83`\xe6p\x8a\xa9Z\xfe\xfb\xbfs\x97\x9d\x14,\x0c\xe5&=\xb5\xcb\x1dBD\xc4\x11B\x0f\xf6\xf2Q\xeaT!\xc9\xec\\\xf9&\x17\xdf\xe4\xe57\xb9\xf4\x0d)\x9f\x10\xc7`\x03\xecT:\xcf\xd2\xea\x1aaa\x0c\x90\xb9\x96\xfc\xa4\xa4\xc0`K\x8d\xcb/\xae\xb8\x0c\xf3\x9b\x08q\x86\x81\xbb\xa81\xe7\x9cNH8\x19\x13S\"\x80\x0d\x04)\x00\xd2\x95\n\x07\xaa\x85V\xf7\x80P\xd8\x0f\x11\xd5\xe0\xedYO\xb9\x1a\xe1\x92\x19!\xb8A\xaaM\x90\x13\xb2|\xa3\x05\xf7\x89\xe56!\xdcgoX\x12G\x9b\x9bt\xd89\x17\xae\xffxB\xe9\x1e\xe7\x88\x13\xb5\xec\x1b\xd8\x84\xf0\x12~\xd4\xb9v\xebIY\xfd\x88_\xfccF\x0c\x9b\xb0\xb5\x95\x8bq\x1f\xe1\xd2\x1et\x0c\x97~\xf0\xed\x03>\xec\x83\x10\x84\xc6\xa9\x1c\xe3\xd0U\x15\x1cl\xe2\xfa\xb48\xdco.\xab^\x8d\x8e\x0c\x8drK\x0f\x04\xca\xf0\x12\xcf\xfc~\xfdhN\xf6\xb7\xf5\x03\xa9\x8dZg\xfa\xf4cg\xf4Hx\xec\xaa\xfd\xb0\xcd\x00\x91\x1f\x8d\xf0\x11\x8b\xf37\xdc?88\x18\x0d)\x17Q\xbe\xdf\xe9\xd9\xedG\x82\xaf\xd1\xedF\x1f(gc+#\x18\xee7\x87P\x1b\xd5\xcee\xab\x08\x9fv\xfb\xff:\x8c\x06\xcfN\xf8\xe7\xc3\xd1\xa1\xc3E\xe1[\x9cv\\%\xb76\xa5\x12(X\x1d\xc7\xedF\x07\xff\x10\xf4W\x03\x8c\x84\xdb\xd2\xcb#$/\x9bX0T\xb0`\xda\x0e\xa4P\x03\xa4\xd0\x08\xa4\xb0\x07\x90\xbe\x13\xcaD\xdf\xebr\xc5\xa3:\xefG\xc0\x88\x10[\xd2>@\xaf\xd3\x9e\xd8u\x0d\xe4j\xc4fM8\xde\x88\xd8\xaaF\xe4b\x84\xfd\xce\xe8`\x9f\x0e2\x86S\xc6\x08\x0d\x86\x07\xfb\x03\xb8\x87\x18\xc6\xdd\x14\xc8\x1a8\xfa\xd1\xc3a\x83\xb8\xaf\xa1\xf0?n8\xdf\x0f\xd5\xaf\x87\xe9\xebx\x92>\x1b\xed\xf6\xean?\xe8\xf7\xef.\xb6\xdc\xect\x0f\xe4\xde\xd5\xdd\xd7Q\xe2k\xb0\xfb\xe3\xba\x9b`\x95\x95\xa2ac \xb8\xbe^\xdd\xf8^Pktc\xd8\xb7\x1b\xaf\x92\xe2:\"\x8f\x04\xc7ag?\x06\x82\x01\xed\xd7\x8fG\xc2\xa3\xbb\x1f\xc3>\xfd@\xe6\xd9\xc8\xcd\x18\x848\xc8\x86n\x92\xda\x01\xc7\xacXPm\xfbF5 P\x0f\x93\xd8\x81-\x8a\xf2M\x8e(\x899\xc6_\xd8\xe2\xf4\x81\x1b\"\xafBN\x13AI\xc4\x8dc\x92\x15eD\xc4 \x10\xd8\x86\x84\xc9\x81\x8c\xe8\x8d\x16n\xc5b%$\xb5d\xc2?\x10\x921\x161BSc\xa4$AS\x88\xcfJ\x88nm%\x18 \x8e\x93\n\x1a\x90&\x02\xa4\xe1w\x03i\x83\xa8h\xb7`\xd1\x00U\x85%E\x16{{.\xeaQ\x8c\xf9~pv\x10\xe4\xb3(IP\xd2\xcd\xb1\xb5\xbc\xca\xb8\xc9\x7f\xaf\x81\xe8(\x90o\x1e\xcb\xc8e\x92\xe3\xb6\xd1\x9cj\xb6\x87[\xcd\xd9\x90\xcd\x19\x8aH)M\xf5\xf7Z\x03,G*=|z\x0e\xb27\xa5\xfc\x07\x0e\x92\x8fF\x1d$\x1f\xbbf\x90\xc3\xb5\x06\xa9\xa3V\xbey\x90\xbb\xae$\x12\xef5RF\xb3\x88\xd1\x8ev\xa5\xe1\x8e\xaa\xe7\xc3}\xc3\\k\x963\x85\xcc{\xfd\xf4\xb7\x92E\x12d\xfe\x80\xe9_\x1f2\x06\xa8\x0c\x0dP\x19\xe9\xd7\xccN;d\x86\xbd!\xb3\xe6\x11+\xa4\xc72X6\x8c\x06G\x02\xd57\x8e\x07\x0c\x1d\xad\x97\x9d6\xce\x96\x84\x1d%[\x1a7o\xbd=\x18\x9e\xc5\xfa\x83\xa5#J\xef#Op_:n\x88\x10y3\x89z\xc1~\nsLv\xb6\xd3\x01]\xe2\x97\x05\x86(r\x95s\xdf\xa6\xa7\x94\x0f\xcf\x9e\xc1\x80\x9e\xa3\xc5w9\xaf\xd6\xa4\x00\xfeO\x99\xe8\x16*\xe2\x9b&[\xcc\x85D`\x84\x15\x81\xb1\xf6\x8co\xfecf\xfc\x0f!P\x86\xa3\x03\x17\xb6\x86\xa3\xc3\xb5i\x14R\xd3!Q\xd02\x9f\x84\xe1\xb7\xd0/\x7f \xf9\xb23:\xd8\xa7cE\x19B?\xd4\xfe\x07\xd20\x7f \xf3\x88\x81\xfe\x81t\xcc\x1fH\xc6T\xf9\x10\\%\xedA\x8f!\xb7\xcfm\x0f\x12\xa7F\x12}\x13A\xf3\x07\xd23f\x10\xd5\xb7o\xcdHB\xec\xe2\x1eP\xfc'\"~\x0c\xf2\xa7v(\xbeR\xe6\xac\xcb\xab\xa2ji\xdd\xf9RZ\x1a\xf6j\xc9$Ejo\xea\xedc\x06e\x12\x14\xad\xd5T\xe7\xa8\x82du\xb7\x1e\xddR\xa5\x9b\x1c\xa0Cd\xe9\"X\xd9\xd5\xe7\x8a\xa7\x97\x94\xa5\xa42E\x90\x0b\xd0\x0f\xf3\xb2F\xae\xe2HK\x12\x10\x9d\x17\x98\xf7eWz\xa7\xb0\x11 \xa5\xea\xa0\xdc\xad\x8e*\xf26\xc3\x9b\xdcO\xe7$?\xcf\xfd4\xef\xce\x86Z\x9a\xf1\x003\xd6T\xba\xa1o!K\x8a4 k\xb4\x90\xb6\xf5\x97\xd5v\x16O\xbb\xebJ\xeb\xce\x17%\xf4\xeb3*\xd9_\xe5\x18{iK\x9a\xa8\xda\xcbM\xadU.\x12\xb4L\xbf\x95\xea\xe3\xd6\xe3\x1cTn\xa8\x18t\x99+\x07\xb1\xc5\x96\x904 \xb0t \xc3#HxV\x83\xad-4\x0bK`\x13\x10I\"\xae\xa3w\xba\xb8/\xa5\x93\x11eA\x86d\x07X\x18\xaf\xf5\xb2\xfe\xb105\x8aY\xda\x1a\xedk\xf3\xb9d$\xaf\xf2\xb8\xd4Lubf\xf6\x14:\xfa\\\x98B\xef\xd7\x86\x08fa\x14\xad\x87\x084NWkg\xb6\x16\xe9 0\xa4\x06?6\x95\x1d\xa2M\x9f+\xe1\x85\xe6'.\xcf\xba\xd1\x95\x19 $\xde\xaa\x16\xb0\xdcdy\x04\x18\x80\xe8\x18m\x8c\xc5Am\x88\x8ff\xce\xb7\xaa&\x9b\xd1\xe4\xc33\xf9\xb3\x97\x19\xbf\xfb&\xf36\x80\x1d\xdb\xad\xe7\x02NM^\xc5&\xcf\x8fF{\x95\x12`:-\xc9\x9b)\xcb-\xe2T\xe9\x17a9\x00n\xab\x87>\xca\xb5A\x08\xbc\xe8OB\xf8_P\xaca\xb3\x977b\xe4\xd4\xfb@\x07\xfb\x19N`{\xf2\x9f\x9b\xbfl\x0f\xb6\x9e>\xdf\xfa\x0f\x7f\xeb\xb7\xad\xab\xcb\xed\xb9\xc9\xf5\xe6\xd7\xf6\x10\xae\x80\xca\xd9S\xb0\x06\xe8\xf4_O\x13:V\x1e\xd4\xfbfh\xf0\xb5Q\x01x\xa3\x0f\xd0\x96\x03\x8f\x8a3\x84\xed\xce\x1c\x97\x95\x83L\"\xc2\xf3\xeb\xf2:\xb4\xa7P Y`\x9bFb\x07\x07\x9ea4\xef=qD\xef\x1d\xec\xec\xee\xb6!\xdc\x90\xe7\x873\x97\x80r\x93>\x83\xbd\xfd\x9d\xe1\xd3\xae\xc2\xf4b\x89(vh\x7f\xb6\x86\xb43<\x99\xc4h\xe7\xa9\x0b\xc3\xa7C\x17\x86\x87O[\xd0\xba\xb8\x82$\xce\xc3\xb8\xd0\xe7R\x12\x979{\x10\xf0\xbe\xfb R?\x19\xa5z\xf2\xf5O\xd4{\\$\xed-u\xb6\xd2\x9e] \x97\xc9\xfe\xce\xc8\x98BP\\\xfd\xa0\xe2\xfe\xc1]\x8e\xb9\x8f\xc6>lR\xban\x8b\xa7 8>\x86!3t\xd9\xe2\xa3\xd1\xd6\xc0O\xc5\x84\xf3==\xc6c>\xc9\xab\xfd\x1b\xb3D\x15]\xfb\x8c58d\xd9Y\xba\xd2\x1f\xf0\xce\xc4\xad\xe3\x10\xf37\x1a\xec\xf6l}\xb4^\xeb\xf0\xec\x19\xe62\xc0\x00\xdb\x98\xd0 \xa6w\xa3\xc3^\xdd\xc2y\xea\xd7\xaf\x9d\xf5\xfb\x85I\x17F\xa3]\x16\xc2\x03\xf6\xe1 \xed!\xf6n\x8d\xbev\xa0F\x1c\x07O\xd9\xa0\x8b3 \xd2i\x05\xc9\x94\xc0*1x\x91\xc9U\xb2\xf1\xee>b\xbc\x87t\xbc\xbb\xe4\xeb*I\xf3\x0cN\xe0\xf7\x07\x89v,\xc1\x106<\xd2\x1b\x9b7#\xf9E\xb8$I\x91\xc3\xc2g~\xa0\xd7\x84\xc4 B\xe6W\xf0~\xd04\xe0w7\x10D\xc4O\xbf\xa1\x89\xa2\xb9\xe0\x19n\xc5\x18`e\xef\xab\xe8\xc2\xe5#\n>\x95o\x16T\xe3\xc9 \xf3\xe2\xda`\xf9\x8e5\xf5\xd0C\xb6z\xecv\xd4\xab\xcf\xb7!\xaab_\xd4\x97\x81\xc8\x0f\xa17\x955\xa6\xef\x10U\xb2\xa5SF\xcb\xd79\xfc\xb7\xb6\xd0\xac\xab\x94\xd2v\x07\x0f\xa8&l\xa3Z\xac\x8d\x95\xa0\x1d\x03f\x9d\x11\xdf\xc8\xbc\xa6\xb4\x10O\xe5\x9b\xb1\x8av[\x13k\xd0\xeaU4-\xdf\x19\xe6\xc9\xd4\xa9\xda\xe2=\xad\xdf\x8e\xd5,\x89\xad\x1d\xa3M\xa8Y\x15\xcb_\xb6\xb4\x9a\xe8\x1e\xe7\xa9\xcd&Jb\xb3\x00C\xbf\xd4\x9f\xcdx\x12\xda\xe6\xc6Y5f\x04\xb3\xb7b\x1a\x0b\x9bW\x05\xa5X\xe0\x14[\x14\x01\xc4\xed\x08\xc3\xa7b\xdd.D\x92\xecuj;\xed\xfbu\xdah\x16\x89\x88\xc0\xc4L\xd2\xb3\xad\xb0W\x1a\x8a\x01\xfb\xd8\xc6KR\xa6S\xf4\xed\x083\x11\xe9\xd79~@\xb1d$\xe0\x8aA\xc4x\xf6\"\x9e\xf2cv\xe9\xa5El\x9b<\xfc8(\xe4&;v \xf0D\xcfl\x8f\xea\xe6N\\\xfd\x8ev&T\xa7\x98K^\x86U\x1a_\xe9\xa1\xdd\x16P\x12Q \xab\xc8G\x14\xc8b5h+\xa5\xabV~\xe1\xf6o\xc6\x8c\xc2\xc4\x95\xda\x06\xf9\x12\xf4\xc2^\xe2\xean\x08d\xf2K\xc6\x9b\xe6\xe6a\xad.@\xa3\x01\x8eL;\x1a0\x8f^\xfb\xe6A\x05\xd8C\xebN\\h\x858(\x0b\x9c\x15(9\xe1B{\x96\xe6\xe8D\xcaZ\xaa\xab\xee\x86n\xec\xaa\xc5\xc4\x8b\xc9\xd7\xfc\"\x0c\xbe\xb4\x12\xa7b\x9fR\x8a\x80\xd1\xbc\x8d\xb8\xcdM\x93!\x94W\xa8\xc5\x9e\xc1\xb0 \xce\x12\x17\xc4\xcc'\x93\xb2*\xea\x97G\x10onRr-f\x86XR\xe8\xe8F\x98\xfd\x883\x1b\xe4V\x80\x0fe\xf7\x98\x15Z\xa2\x07\x03\xfa_aO%T\xe8\xc2B\xb6\xabG\x00\x9b\xcfF> <\x1c+[\x8e\xd5\\\xd4\xaaM\xbc<\xcc#\x0cJz\x9d&\xb7\x19I-\xfa\x90\xff\xe6a\xf2\x13\x8f\xc47H\x07\xd2\xdf~:\xbf\x11y5\xbd\x1b\x92ft\xfeX$\x93\xf2>+K\xe3\xbb\x1b\xfcn:}\x1bf9\x89\xb1\xde\x1b\xf6\x12\xdd\xd1\xd9\xef\xd9L\xfcL\xc92\xb9!ja\xf6\xf4y\x14\x89\x17\x99xC\x96a.~\xafR\xb2\"q\xa3%\xfe\xf8C\x1c4\xea\x8d\xa4\xea\xccK\x8d\xef\xc0\xc9e\x1dz\xd7a\xdc\x99\\\xa5A\xb5\xae\xd2$ YV~\xccC\xa4HA\xf1\xea\x8d\x04\xb7\xd3\xb6\xf9\x16\xac\xd2\xb6\xa5|\xb6\x98\x86\xe9\xe3z\xc6>\xed\xeaW\xb1\xf4\xb3/=z6\x90\xb6>h\xb8\x10E\xc5o\x15\x19AEO\x90KL\x9c\xcc\x90\x98G\x84\x1a\xa0\x8a\xd8\xda\x90Uu:}\x0f\x06\xb1\x15\x03\xf5\xcb\x8aU\x19C\x83k|\xc4@\x9aH/\xd5\xe2\xd0\xca\xbe\xe6\xa4\x0bk&f\x94\xd8\xc0p\xc7'0\xa4\x88E\xd2\xdeT\x98jx\xc9\x835\xc8\x8f\x9a\xf4DlLx+duZ\xb0\x19\xd7\x07\xa8\xc2{\xb5\xd7Lt\xcfP{\xea\xa8\x02|\x9fb\xdep\xe2\xd7\xb1\xaeof\x961\x17\xd6\x86\x88\xa2\x19\x0b\xd0 \xc3&\x91\xa1\xa1GnHzW\xcb\"\xdd\x95\xda\x0c\x19\xb7x\x92^j\xf8\x1bts\xb1\x19W\xcdp2\x9b\x04\x17B\xc7a:\xb5\xd05s\xf2Z\xde\xbb1\xf15\xc2\xb5 \xc7\xb8\x84cN\x0f;8\xc5\xe0\x14C\x1e\xd98e\x07\x1c\xcb\xb9 )\x85k3\xa9\x9d\xe4-\xa0\x16\x97\x00]\xfb\xa6\xef\x03}6\xc4Y\x9a,[Yv;4\xcc\xc3\x83\xf1\xb8\x8f\xbc\x94dE\x94\xbf.\xe2\x80\xae%\x17\x9f\x04\xc9rU\xe4~\xce\xd9\x94\xce\xcd&6Z\xe3\xe5\x03\xab/#\xf9\xa7GWJgH[q\xed\xa1L\x0c\x88_\xb9wuE\xb2w\xc9\xb4@\xf6\x8d\xf2i\x98:\xd6/\xa2\xfc\x1dY&,soB\x9f\"\xda$\x02\x8b\xbedH\x94\x11\x1d\xe5\xcb<-\x82\xbcH\xc9\xb4D\xb6}\x18\xefGP\x99\xbeBe6\x99s+\xc1<\xb8F\xea]\xc8\xfeM\x1dg\x87C\x06\xb30\xcd\xf2*^\";\x18\xfc\x18X\xf5p\xbb )\x01\xe2\x07\x0bX\xf1\\\xbb\x94\x11\xf0A\x9c%\x9a\xa3\xc3Gk\xb0\xb2SG\x0d\xa0\xd0\xbd\xc6\xd3\xf8~!wYC\x88UR\x8bq\x1dU\xb5\xf9\xc3\xd3\x0dY_\x0e\x8e\xdb\x93\xe4\"Z\x84\x9cW\x08\x81\xd3~\x03F\xfb\x11N\xfb\xe5\x93\xb4\x9d\xee\x03i(^J\xa6E@l\x85\x13\xea\"\x98\xc9\x84R\xcb\x97\xcc\x18R\xa3\x8es\xe1\xf7\x07E %\xb1\x9fu\x91\xb6\x8f\x04L}\x99\xd3\xf5m'z\xb5\x97\xc2\xa7 \xee#\xb6\x87\xc3\x03\xe5@D\xc6\xc6\x1e\xed\xee8zV4\xb6\x87\x83\x01\xa5\xfc\xda\x1a\x00Y\x84'\xd2'$6Z\xabK\x83\xea\x91TLZ\x12\xcc\x18tM\x96\xb4\x1a\xea\xc1\xaeaD\xed\xcc\xf5\x86\x1c\x0b\xd5\xc4G\x8b=\xb6\xf1H>Z\xedq\xac*$\xeb\xfb\x8e\xc9\x9c\xc6`\x8d\xbc=o\xcf\xd2\xad\x12\x8d\xfd\xe1\xd5\x153\xd4\xa4\x7fO\x84\xdb@o\xf0\x8d\x0e\x0e\xd6\x86\x9f\xcc\x85\xca)\xe7j\xb2\xeau\xa7Q\xbf`\xf7\x0ev\x95\xe7!\x7f\xbe\xa7<\xa7{\xc7\x9ap\x9c\xf8\xbe\x88\xa2K%Tx!\x17\xf8,\xd2\x9d\xab\xa524n?E\x13\x04f\x0fx\xe1\xcf\xcb\xcc\xde\xdf\x01R\xd2\x89Bo\x0b\xcc|2\xe6\n\x16\x08c\x8ev\x99q'\nF\xc6\xc8&?\x16\xb0{OGz\xc8>\xdd\xeb\x9cx\x0d\xbd,\x96q\xc2\xdej\xb7E\xca\xb2\\\xc4%\xd8\x1e\xdb\xf7\xd1Su\x96Y\xdf\xf7w\xd41\xb1Uqp\xd89$\xc3\x0c\x85\x0c\xde)\x83w\xb26\xbc\xf5\xb2> !\xef\x0e4#\x91NXJl\xb4\x93\xd4\x82V\x99h\xce0\x89s c\xa42\x84U\x98\xf9\xbc\xab\xbdx0\xc0\xad>\x96\x90\x1f\x14\xfbR\xb5\xa1\x17\xc6\x0b\x92\x86\xfc\x149\x1c:\xcd3-\xb6w\x06\xeaL\x16\xac\xae\xda*\xac\xea\xb2g.\xf8\xd2\x9br\x80\x19\xae\xbd\xa2\xd2\"\xf0\x14I\x83#\x88\xe0\x18*uFD \x80\xe6\xda\xa5\x04t6\x89\x14\x18\xce\xaa\xfa&\xc1%\x8a\xb9\x94G\x94)\x93\x1f\xb4\xebwg\x86C\x879\xc7\x88@\xda\xc9\x0cfU~IJ\x12\xce\x1a\x84\x96_W\x95\xb9P\xa8\x0f\x10\xfbo\x08\xd7\x89\x94\xf8S\xff:\xe2\xb1c\x17aV=9a^\x80\xf5\xf2\xb7i\x98\xd7\xcb\x97Oxy\xa6q\x89\xa2\xe4\xf6\xaf~4\xfb\xb0\"1'\xd3\xeb\x15\xd5K\x94\xb55>,\xabL\xe2\x80\xd8\x16\x89\xa7\x96\x0b\xabvp6\xb5\xf4\x9a\xba\x85\xc3\xc1\x95\x18\xc0y\xee\xe7\xc4#\xf1\x94L\xe9\xcb\xb4\xd4\xc5\xd9S\xd6\x85.\x1d}c\x0e\xb16[E\x0d\xf4\xe2;\x99\x1d*\x1f9\x19.\xaf!\x17,\xd1\xaf\xbf\x86\xf3\xc5\xcf~N\xd2w~\xfa\xc5r\xd56\xe2bIRZn\xdc\xd0\x85\xcfI>n\xa7\x98\xc5\xe6\xd6\x00b!7[\xdf\xfc\xd5\x80\x1c\xb7\xd7P\xa6$\xcb\xd3\xe4\x8eL\x1b\xdd\xef\xddE\xc9\x9f\x86\xf5V\xacS\xec-]@\x8d\x12\xb5\xf1TK\xac\xfe\xa5W\xf6\x0d\xbd\xce4\x80(\x0b(d\xb9B\x08\xd4\x06\xa2\xc7\xc8\x7f\xfc\x10*\xfd\xb3i\x10\xb4\x88Q\xe1M\x19,I\xe1z\xc5\xbf\xea:\xe4\xb1Av\x80\x14Q$6,\xae}W\xdeGyM{\xff]\x0e\xca\x9d\xe1\xc8\xb1\x1f{\x8a\x93\xca=\xabT\x91t\xd1\xe8k\xf6o\xff@w\x90\xb3\x10\xf7\xfe\xd7G\xf6;\xb1\x07.\xd2\x1e\xdf\x00\xccu\xcbk\xa9\x94\xa1flvl\x1f:]\xf2\xbe\x90;~z\xe2l\xfb\x98$\xc2\x16\xc0\xc4@\x0b\x82\xa6\xf9\x1d*8\xf4\xb2;\x19\xc1 \xc3Pz\n6\x05\xd6F\x0bez\xd0\xd2\xef\x1b\x86\"\x1a\x9a\xb2}\xd4D>\xca\xf1h\xa7\xe7\x8cm\x8d\xf6,t\xb7\xc5\xedVP.\xde\x16\x9bH\x03\x1f8\xe6\x1b.I\xa2\xf3\xf07R\xe2\xad:L\xe8vl\xa4o\xad\xdd\xfa((\xab=*\x1a\\&\x16\x9cNi\x9d\x94\xb9I\xc6\xed\xa8@\\%\xfb\xda:-q\xad\xcf\xdc\xba\"\xf6\xe6$\xa7\xf7\x88\xac\xd0\x01\xca\xa7O\xcb\xf1\xa2czu{\x02\xc3\x81C\x0b\xa4$\"~F\x98\x84\xaf)\xa1}\xd0\xa8oc\"\xd2\xa9b\x83\xe9X\x05\x08\xbd\xf2\xdbD-\xd5\x0b\x06\x8fY\xe4 \xeb\xa6\xd6Y\xe8\xa0[\xec1\x8b\x10\xe0\xe8\xc0\x01\xda5\x0f\xbauO\xab\xe8\x03\xce|\x91\x92\x06@\xbbD;\xe2\xfa\x16h\xa5\xdf\x05Zi\x19G\xa9\x114Z\\\xfd\x01\xd6\x88\xc8\x00z\x98\xcd\x92\"\xed\x02Y\x8bT\xf1[\xa0\x96|\x17\xa8%R\xf4\xa9\xd4Q\xf5\xf9\xe2Z\x0bp\xae\xd6\xf1\xb8\x8e\xca\xf4Gg\x81O\xdb\xe4ju\x03\x7fmq\xb3\x98tO\x95.%\xfcy\xb7l\xc4p\x94\xa7v\xb2\xfe9.\xf7\xe8\xd1-s\xb9\xd1#\xc8\x08\x89\xfa\xda\xd1\xcb\x8a\x0e\xb5\xe2\x96\xe1P}\xce\x98\xfd\xe1\xfe\x81c[Y\x1aX\x1a\x9e\xff5\xefH)_k\xca\xdfX\xfe\xc1\xc2\xf1\xb2U\x14\xe6\xb6%J\xcaR\xd8\xd8\xde\x1f8\"a\xf99F\xca\xe8\x03$\xce=\x93\x9a\x05\x98m\x94~\xe1\xda-tr\x84\xc8d\x0d\xafx4FH\xe4\x87\x14s[\xb1\xbf$\x16\x1a\xd1$\xd5=7\x9fDIxi\xd2cK\x9f\xf9\xd5\x17>/\x87\xf2\xd6M\xf6{\x0c\x19\xb3H\xe0\xde\xcb\xb9\xe3\xb0\xa8b,\xb6\xcbi)c\x871\x14\xe2\xb6\xf64\xa9\xd6\xc4\x18\xec)\x89HN\xf0\xbd+\xbd\x92\xd7\x94c\x97\x93(3\x85\xe54\xb5hu\xf84h!\x87\x04\x14\xa7}&>Ja$a\x87\xdc\xfeZH\xa1sM\x94z:9\xf4\xc1\xa9\xc4A\xc0\xb8\xcb^\xa5\xd76\xeb\xa4\xbe\xf5\x9bo\xb4o\x10\x81\xef\xeckw\xdf\xde\xaeJ\xc53Q\xdb\x81Z<\xe3\xc5UYj\xc4\x9f\xab\x12\xbb\x80?W\xeb\x99\xf1\xe7*2X\xa1\xd0\x8ci\xb3\xce\"B\x0f\xc4z\x81\xa9T\xe0\xb5O\xc9\xe4\xbbz\x81\x05+\x10%\xb1\xbe\x82\x1b8\x81\xb4\xfeh\xd9I\xb47t7\xd0<\xc8\xe7Z\xb2\xf9\xe5\"\x8c\xa6)\x89\xc7\x86sx\xe9\xaf\xc6\x10zK\x7f\xd5$\x0b\x80 1\xcf\xfc`A\xcb\xf0\x9f\xfarAR\xc49-\x85?\xf4e\xf2\x045\x9f\xb4\x14\xff\xa9/\x97\xc4\xd1\xdd\x18f\x8dw\x1a\xca\xe5e\xb2\\%1\xa1M'^y\xd3,\xf7\xb1HI\xadl\xedA\xb3|m\x05\x8cA\x03\x1cy\x86\xc7\xa0\x81J\x98\xfd\xe4G\xe1\xb4,Rx\xf5'\x9aN\xa6\xc9\xea\x82\x99De\xa6.\xbd\x8c\xfc,\x1bC`z\xcf\xd7\xe4\x18\xa6\xa6\x12\xef\xc2\xafa<\x86e\xf3\xfd\xab\x0f\xef\xc6\xe07\x9f\x97J>\x8d\xf1\xe9\xd5U\xb6J\x89?\x1d\xc3M}q\xea)\x829>\xfdc\x90Nc\x93\x87L\x12\xf0\x94\xb2\x1e\xf6h\x7f\xbf\x12\x14V\xe2\xa5\x85\x9f}\xb8\x8d\x85\xc8P\x8b\x9cF\xfb\xaa\x9eO\xcf\xa1~!wc\xd8\xd0XA\xa6d\xa6\x7fqu\x95\x91\xc8\xfc\x0e)\x84\xb1\x9a\xbeX\xeb\x10\x9a\x19O\nI\x9cG\xbc\x94T\xbbJ'?\x8e\xfaU\xf3\x85\xdcI\xd5\x88_BU\xa1\xe1\x1cX2C\x03Y\xd2\xd4*\xd3\xeb\xcf\x7ff'\x96vE\xe6\x98^\x994_\xe0\x1ch\xb6\x16NA\xdc|\xbeJ\x93U6\x86B\x03\xff\xe46\xa6|PhZ\xd6P\x01\xa7\x8a\x0b#\xbd\x0f\xea\xc7\x88\x060:`\xa4\xcc\xd0\xfaw\x1d\x97\x06&\x0b\xf0\x15\xe8,\xc0\xd1\x9b\x96\x11\x04:\xde\x19\xd5S)\x84t\xf1\xe4,3\xcf\nm9R2s\\\x88\xc4\xc3\x19:\x98\xc0&\xa0\xd2\xcfqky\x06=\xb6\x84\x05\xe91.\x9f4\x8b1z\xb7^\x10\x9f!\x1d\x14\x96\x921\xe6\xb5\xb6Q([\xd3\xe6\x99\x87}f\x1f\x93OR5\xe3.\x05\xdfTg\x18\xb5\x05\xa3&d\x98\x0eh\xea\x80\xef\x05\xfc\x8c\x84Fl\x8f2\xe2\xc3\x14\xbd\x944\xcb\xb4T\xf2-J\xc3\x9e)\x85\x11S\xef\xdd\xc01L\x8f\xe0fs\xd3\x81\xc5\xe4\xa6n\xd8s\x83\x811\x9b\\\xee\xc0\xad\xf7\xa9\xee\x8f\xf8\xd0\x18 \n\xdf\x88\xb0?\xa3\xf0\xcat=\xa5\x9d\\\xa21\x87\\\xb2\xd9|\xb5.\x96N\xcd\x96\x8c\x02^\x9a\x81e\xc3\xe0\xfeA\xb77\x02\xba\xdag.\xac0\xa9&z4\x05E\x9a\xd2\x03\x10\xfc\x1aK\x13\xd4\xc9\xaa^Fp\xca&C\xb7\x9e\xd2 P\xbbWs\x8f\"\x0f\xae\xa4P\x9a\xa7G\xfa\xf3x\xfa\x89\xc5F\xf8w\xd2\xa9t\xa8\xc6\xe81\x86\"w\x19\x96\xa5\x7f\xf8>\xa0?\xf8:'\x1e\xc3*\xf4\x17b\x1eu\xfc\x12M\xd1\x13_\xf8\x0c\xb8\x94\xa8\xb4\x7f\x7f\xa8*n\" \xd4\xba\xd0-\xdc|\xb5\x00~8h\xce~\x0cj\xdd2\x16\x8d\x87_\x17\xd2\xf1kHg!\x90\x0e\xdb5\xe5\xf2\x90q\xd0T\xc5A\x0c\xdel\xe1\xe39.\xaf\xe9\x12mi\xde9\n\xb6\xf1\x0d\xd8\x86=\xb7e$F\xf9\xbb\xba~\x8c\xe2\xbd\x15\xf3\x81\x99\xd1?cqG\xcbj\xb0\xd3rM\xec\xb4t`\xd5\x07;-;\xb1\xd3\xbc\xc4NK\xc7\x85;\x86\x9d\xee\xe0\x18\x96GpG\xb1\xd3|rW\xc7Nw\x06\xecT\xeb\xd0\xbc\xd7\xfe\xe7{c\xea\xc2B \x81\x9b\xba\xfe\x9c.\xfe:u\xfch&\xb8\xa6Gc\x0bD\x90\x12\x0c\x8d\xc9\xad\xca\xa4i\xf0'\xe8&M%\xb1\xd3\x81\xe3\x9d\xdf-\xaf\x93HO\xe9\xa6\xebU7:\xd4\x9b\x0d\x0d\x0f\xbf\xcd\xd6m\x83C!\xa9\x0c\xd0q\xc1\x7f\x8b\xdd\xdb\xc8 \x81|\xaa\xaa\x19\x19\xd3\xbf\xdf\xb0#bt\xf5\xfe\xb0sdf\x94+E\x12\xe4f]p\n\x13r\x89\x96g\xfe\xb7\xc8\x131\x1e~cxJ\xf8\xbb~\x13\x11\x1aB\x972\x95\x1b\xa9\xechH\x13W`\xe0b\xd8lD\xe1\x11k\x7f\xc0j\xa4\x93I\xfbF\xe8\xddV\x02\xa7`m\x0d,J_u\x8c\xbf\xc6p\xe9$E\x9cUb\xe7+F\x1c\xea9C\xc4\xcb\x8a\x15I\xaf\xb8yq\xc5lU\xd6c\xacR;\x97eqM\xec\x15$\xb1\xd0E\x9a\xc4\x17\x98\x98_\xcb @\x87]\x8a\xb8\x84\x89\x82\x9e\x0b\x03\xd6\x8dY8/D=\x1a\x9f\x81\xda\x93\x87\xbaU\xf1\xa3\xc0\xd6\\\x0e\xaa\xd7\xb9\xc2\x88\xc45(\xd7\xe0Z\x9f\x80\x98\xdc\xa2\xe9r-.w f\xf8\xfe\xb6\x07\xfb\x9d\x9b\\\xb7kj\xa6\xceJ\x98\xd8\x97~\x1c'9\xd0\x86\x11\xc5%)\x14q\x19sH\xbb[\xbe\xcb\xa0\x1a^\x1f\xcaxyt@\xfb\xa0\x81@P\x10\x91b\x04_\xba_S\xb9\"\xe6\xfb\xdb\\\xdd\x9ch\x19\xab\x99c\xe5\xfe\xf02\x9d\xd0\xec\xe3\xc9\xf4\x87x.\x89\x93\xa8>\x04\xdd\x0c\xd9\x03\x17B1 g\xed\xc3\xa9\xe7\x8c\xb9\x06\xa0\xb5\x18\x0d\xab;M\xf2\x99\x16f\xab\x18\xff\xf7\xc3\x8cr\xa8\x98X\xe6\xfe\xbeK\xceT\xc6\xd6\xe6Lm\xccX*\xd2dj\x1b\x10|\x048\xca\xc7\xa5\x9c'\xed\x92\xf30S\xef\xfb{a\x06\xde\xc4\x0b \xefg/\xcc\xde'\xf9\x82EcH\xdd\xda\x0b\x06\x8a>\x04K7=W\xf5An\x83\x0b\x93\xfb4\xa1\xee\x04NBpjbB\xc9\x079\xd5o\xad\x99\x94\xac\x88\xdfo\xdd0\xcf\x1e\xf5\xe8\xc6\xa5\x133\xda;f^\xd61lb\xd4L\xccP\x85\xc5\\\xefL\xcf\xc1\xe6F\xf4[e\x81\x1a\xcby1\x18/\x8c\x83\xa8\x98\x12\xa1\x95\xe9p\x1fG\xef\xe0\xb2\xad\xda\xeb\x07\xae\xc9\xed[S\xb3\\\x9bEM\xee\xe5\xfe\x9c\x9b[\xd3_O\x9eP\x1e>\xa4\x8b\x88\x89\x92\xe9O<\x13M!a\x1f\xd0\xaeJkJ\x86ofa\x94\x93\xd4n]\x91PAn\x8b\xc7J.\xb1v\xaeV*\xad\x93\xe6\x84i\xa2\x16r\xf3\x15\x9c\x0e\x14:\x88\xdf\xf7\xf7hK\xc6\xde/WQ\x18\x84,\x1dIy#\x97 _\xa5\x12\xe5\x8d\xae\x8e\x9e3\x85\xb2A/J\xfc\xe9\xbfs [Y\xe0G~jq1\xbex%\xd3Y\x89m]\xa0s&\xbac\xc6I\xbc\xc5\xbeA\x84LO\xbc|A\xa0\xec\x7f\x14f\x18\x07\xdf\x87,X\x90\xa5\xef\xc1\x1b\xf1*%Y\x12\xdd\xd0\x13!\x99AV\x04\x0b\xe6\xed\xdf\x08l\xe3Y\xcdIe\x86=\xc9r\x15Fd\xfa\xa6\x82\x9c\xcf]\x08,\xd1\x01\xcb\x85\xc9\xa5\xfa\xc1\xd9\xd7\xe6\x07\x02\x9e\xda\x0f(m\xf9\xce_)\x14v\x03\x9etK\xf2\x1d\xa4\xd5X\xd0\x8b\x01k\xac\x95\xdf\xe3{\xf2kA\xe2\x80\x98K,\xfd\xd5\ns\x1f\x98\n\xcc\xfc(\xba\xf6\x83/c9h\x97\xb8\x1e\x94H\xf3\xd0q\xea\x8b+\x9e\xb0\xadx9\xc1m\x8af\x16\x9eh\xa9z\xa6\xf1\x15m6GQ9a\xa8\\\xe7\xa7|\x84q\xed\xf3#\x16,v\xe8H2'R!!U\xae\x08Fj\xd2\xd6\xae\x16\xc3\x9aP\xc9Jz\x15\xde\xab\xb3\xd7\xcf?\xbf\xbd\x10\xfa\x95R\xc1\xdf\xb6\"\xc4j\xa8w3\xbb\x0d1\xb2\x9c:h\x1d\xdc\x03?#0\x1ck\xe7\x03\x83'\x8a~)p\x9c\x0c\x0c1\x02\x0c\xf1\x96\xb1\x9d\x91\xb9\x1d\xb9b\xb5)\xd5G\\\\\x86\xa6\x04\xd3\xa2\xfd\xa6\x86d~N\x93x\x0e\xcc3\x141\x88h\x12\xd7\xcf9\xc3&|\x16J\xe9D\x9b\xba!\xe4y.SA\x0e\xa2\x83u^{\x92;.l\x90^\xf1_\xc49+[K\x17\n\xa2R\xf0\xe6\xf9\x8a\x04\xe1,$\xd3\x12-\"C\xcfQc\x06v\x92RD\x19\xc6\xf3\x88\xf0\x11r_]\x07\x83\xc6\xfba,pn\xed\xad\xa72\xb5k\x84\xb1\xd1\x0d#\\w\x18\x7f{\xfe\xee-\xc7\xde\xb51P\xbci\x1a\x81\xf4\xae\xd1\x7f\xb1\x8f\xc9-\x14\xb6\xe6\xdcb\xc7\xa7V\xaa#\xf0\xf8X\xf5\x05\xac \x93\xbb\xad1\xd7$\xf6\x86\xc3\x9a\x19\xdf\xa1\x96\x96K\xda\xe4\x956\x81'\xf4\xa5\x1aXLn+\xd4\x1e+\xef>\x9f_\\}>?\xbb\xfa\xf8\xe9\xc3\xc7\xb3O\x17\x7f\x1b\xeb\x92\xa1\xfe\xf5\xf9\xf9\xd5\x8b\x0f\x1f\xde\x9e=\x7f\x7f\xf5\xd3\xf3\xb7\x9f\xcf\xc6\xb0\xab/\xf5\xfe\xf3\xbb\xb3Oo^\x8aR\x87\xfaR\x1f?\x9c\xbfA\xd6@)>2\xd4\xfa\xe1\xa7\xb3Oo?<\x7fu\xf6J\xed\xc6\xce\xa8\xf9E\x18\xd3\x85\xf1\xea\xc3;\xc1\x10\xbfD\x19[\x97\xf3\x12H\xb2\xd1P\x7f:\x02'v\x89\xc7\xab\x0e z8\x98NS\xe0\xe2h\xe2\xbd\xfa\xf0\xeey\x9e\xa7\xe1u\x91\x93\xf7\xfe\x92d+?\xe8\xfe6\xd3\x7f\xdb\xf5Y$>\x13\x00\xe8\xf5U \xbez\xc7\xe3\x9d\xbc#\xf9\"\x99\xf2\xef\xf4\x98\xba\x94W\xccP^\xe1\x85\xd9\xcb\"\xcb\x93e\xd9_J\x18\x16\xdeU\xe3\xb9\xb0\x97\xe4^U\x9a/\x9d\x16\xba\x1f\xf0`]\x95s\xa0\xea\xd7fL\x12f[\xbb\x87\x96\x0b\xb3\x16co\xdaw\xa4\xcd\xbc&Y\x98\x877\xc4X\xa7\x1e\xcb\xf5\xab\xfc\xc3\x0dI)\x07E\xa6\xc6\xe1\x9b\x90b\x93\xc9\x95/\xc3F\x06~\xf2/<\x05\xe2\xb0 \xf8L\x1e\xa5x\xa6\xefd\x19*(\xb5\xad\xbd\x01\xee?\x174[\xb4ms\x03\xdf\x9a7\xe8\x9c>\xeb\x08[\xb5\xf0j{\x02N\x14sA\xf9\xd2\xbbi\x00:\x96k\xb1\x88\xad\xd4\x8e;\x0es|\xcd(\xaf\x17\x19\xbf\x92w\x1b\x9c@\xc4\xca\x07\xc6\xf2\xf5\xcd\x06'\x10\xb0/dD7\x99]6lv\xc4\xa5\xe1\xd7jO4\xbeq\xd6\xf8\xf9\xd6\x7f\\\xf9[\xbf\xfd\xf2K1\x18\xbc\x1cl\xe1\xdfW\xfb\xec\xcf!\xbb}\xcdn_\xb3\xdb\xd1\xeb\xd7\xf4\xcf\xce\x01+\xbcs\xf0\x8a\xfdyMo\x87\xaf\xf1\xedh0x\xb9\xc5\xfe\xbe\xc2?\xac\xf0hx\x88o_\x0e\xd8\xed\xeb3z\xbb3\x18\x0c\xe9\xed\xab\x03\xfc\xf6\xf5S\xf6\xf6\xf5\xab\x97x\xfb\xea5\xbb}\xfd\xfa\x95&|Is\x05\xbdyu\xf5\xfc\xe2\xe2\xd3\x9b\x17\x9f/\xce\xae\xde?\x7fw6\x06k\xea\xe7\xfeVJ\xfc \x0f\xa7Vs\xfb}\xfa\xf0\xe1\xa2\xed\xa34Ir\xcdg\xf5/\xae\xce/\x9e\x7f\xba\xb8z\xf9\xd7\xe7\x9f\xb4F\x85Ji^\x0e6\xc1\xfa\xe5\x97-o\xb0\xf5\x14\x81\xfc\xe2\x00\xa19\xe0\xc0\xddg\xd0\xdcy\xcd\xa0\xb9;\xd0t\xa3Z\x1cz\xae\x1e]\x0d\xb3,d\x8e\xd2\xf1\xd4O\xa7\x0c\xff\xeb\x91y\xcbQ=n\xa4\x16\x00\xb4DV\xca\xf7\xa1\xb3\xea\xfa \xa6\xfai'\x13jj!3\xe2\xc00\xf5\x03\xb7\xbd\xb2I~\xe9\xc8\nr\x8d\xd6\x15\x8c\xa8B|3ln7\x13)\x8a\xe6\xcdFS\xcf\xef\xceO\x1c\x1c\xee\xd4\x18\x8a\x1df\xa3\xfc\xd4\xc0W4x\n\x8a\xef\xfc`\xf1\x89\xcc2.\xe1Bi\xc7\x157\x9d\xe264:a\x87\x9e\xcfX&E\x9cK\xf6\xf1\xea\xd8P\x98\x1f\xa2\xb5\x94^.V eZ\xaf\xc6\xae\x7fi\x94\xe7\x10\xb5\xdf\x92\xce\xa7\xf9\xd2K\xc9\x8cI\x91\xe7$\xffD7\xff;\xda\xea'\xe2O\xefl\xc7#\xf1\xaf\x05)\x08z\x04R\xcc\xdc\x86_\xe7$\xffk\x92\xe5\xef\x93i\xe7\x8e(\xbb*}c\xb7:6\x17q+P\xb5\x8dxSRN+3\xb1S&\x94>S+n\x08\xb0\xeb\xfd\xe0\xf1\xf3Z'74M+\xe3\x8c\x94^4'\x12\x95:(T\xc6\xc4\x13!\x97/_\x05I\x9c\x93\xafF\xdfdM\n\x10\x90\xd6S\xeae\x8b\xa4\x88\xa6\x9fWS?'\x08\x14_\x9ft\x18\xf0\xacA-B\x1d\x82\xbe\xc3\xec1\xeb \xb0\xc5\xa8]\xf6\xd5\xe3\x16`\xdcc\x016\x11P\xdbT\xadH:K\xd2%\x1b\xef\x9b\xd9{\x12\x90,\xf3\xd3\xbb~\xfe\xcb\xc4\xbb*\xf0\xcb\x17~\x1e,\x98\x86\x8f'\x8a\xc51\x9ajo\xac\x9f\nk\xe81`\xf8=0\xe0\xc8\x10\xedo\xb8\xfbT\xab?\x1b\x19\xfc6w\xf6\xd4\xf2\x183\xad2\x08\x91\"YN\x93\xa0\x10\xd3\xab J'^{\xe2\xc7\xbb\x84)q\xf4\xb5\xc5\xfeM8\xc7h\x9erf\xe5\x93\xe6{\xaf\xc8H\xfa|\xce\x1b\xde\xfe\xe5\xfal:'\xbfl\xff2\xdd\xf6r\x92\xe5\xb6\xa6\xa0\xf6\x1c\xd0\xf8x\xd0\x8d\xd7\xf0\xa9\x00\xd9\x82\xcc\x8b\x93\xa9\xc1:*\xe69V\x995\xa7~W\x8b8\xedz\x8e\xa5\x16?\x9e\xc7\xb1\x8cK:\x00\xc3Y\xb2,h\x93\xf4\xd2\xc5\x1d\xa5\xd9\xbch\xc5Z\xed\xb6E\xbe\x8c0\x8a\x1c\xda\x8e\xd1;\x07\xc6\xd2{\x8aP(\x1c}V\x00\xf1\x8bi\xfd\xd6\xd6]\x84Q)\xbbv\xd2p\xc8=\x16(\xdc\xf0?\x94db\x02\\\xdd\x0b:\xf7\x95\xd9B\xed=\xa5\xe1\xea2\x0bf\xeb\xc1\x03\xeb\x89\x92\x82a\xf9\xfc\xe9\x0d\xc6\x83\xd2C\xe1\x1c+\x10\x85\x84\xd2\x94A\x8e\xb7\xaf>\xbc\x93\x7f\xb3\xca\xc5\xddE\xf2\x85\xc4\xec\xc6\xcf\xfd\x8b\xd4\x8f\xb3\x19I\xdf\xe4d\x89\x0f_\x87\xbcQ\xba\x9d\x9fG\xd1\xcb$\x8a\x18\xc7\x8bO\x94\xdb\xd7I\xba\x14\x0e\xca\xf4\x9e\x85t\x16O\xde\x91i\xe8ce\xef\xc2%\x1e\x80\xcc\x8d\x9b\x9e\x03S\x8a\xce\xde\xf9+\x97\xfe\xc52\x1f\xfd\x90\x8e\xe1\xd7\x82d\xac\xeb\x1f\xa3b\x1e\xc6\xfc\x0f\xfb\xf2\xfc\xa7\xbf\xbc\xc5\xb5\x8e\x05\xce\x7f\xfa\x0b#\\\xc5\xddG?_\x9c\x93yy\x9b\x84q.n$(\x9c\xff\xf4\x176\xee$e\x83f\xd15^\x14\xb3\x99\xa8\x8b\x82\xfb|A\x08\xfb\x9c\xa2\xa1\x8b\xd4\x0f\xbe\xbc\xe4\x00/\x1f\xb0\xbb\xa4\x08\xb0G\x96\x88\xe7\xe1\xd2y\xcc\x18\x99\x93\xa1(Dl\xd1L\x1f\xb4\x93\xee\xccb\x92iv&\xddK)\xdd\x89\x8d73\xe0\xfb-\xa8,G\x15t\x81\xce\x1b3\xee\x8a\x94`\xc8Q\x17\"\xba\x10'\xd1%\xdd\xee\x1e\xc2\xb5c\xcd\xab8\x91\xa1\xa62\xbcI\x17\x024\x1c\xe9\xb1\x08T\xe2eQ\x18\x10\xfb\xd0\x85\xada\x97!\xafi\xbb\x9b[\xeb\xce3\xd5\x99c\xea{\x04\xc7\xeem\xd8o$xj\xee \xf6\x10\x9e\xd0s\xbf\xb9\\\xea\xee\x07\xf6\xc8PNrd\xb0w\x0de\xb8\xbb\x84\xa2;_\x0fAJ\xb8pG\xe5\xbd8\x0f\xb7o\x8a\xd8\xde;xp\xe5\xe5\xe3B\xd2\xb5\x84\x8c\x1d\xdc\x1d8\xdeL\xd7\xc3=},\xe6&\xee\xee\xda z&\x82E\x99M\xd0\x1e%\xe6&\xc6D\xf6\xc9\x08\xb9\xf6\x93\xa0l\xac\xb92T\x97\x93\xbe3\xb9&\xa4\xba\x98\xf4\xdd\xbd=\xc7\xde\x18\xd4D\x95\xa3\x9d\x03\x87\xc7\xedq\xc1jF\xcf\xd1\x9bG^QR\x8eG\xfb!\xc2\xfe\xee\xaa\x9e\x82\xe3\xa1%\x06\x8f\xb0\xb6\x12\xd1\xc2\xae4>\xfee\xb8\xba\xabPooRK\xfe}\xaa\xa5\xa8\x10\xa8<]L\xe3\xf54\x895\xe1\x18\x90\xdbB\xff\xdb\x9c\xf1Wbl\x9b'\xa5\xaf\x84n\x8e\xcd\xaeK\xbc\x9d\xa1qn\x1d\xed\xe4\xfe\x13!\xf5\x162n#\xb6\x87\x83\xa1c\x1b\xa7\x9a\xb7{@\x11\xbb>\xae\xef\xef\x0f.X~#\x8c/\xf4\n\xe5+7\xd1x\xa9\x88\xe7\x1c\xcf_\x07\xe8\xfd\xe0\xda\x9aQ|c\xa3!Vn\xcf>\xadU\x8ftat#\x89\xddk6e\xb3(\xdd\x01\xc0\x02\xcb\x86\xf1#\x17\x1c\x81g0@\x1e#ET\xf1t08\x18>}:\xda\xdb=\xd8\x1d<}:\xa4,\xc7\x9a4\xfd\xb7d\xb5lM\xa1\x07[0d\xe6\xc0\xd6\xbb0fVs(\x12\x06B\xc9\x0f\xf8\x17\x0cyFi\x90#\xb8 \xb30\x87E\x9e\xaf\xc6\xdb\xdb3? \xd7I\xf2\xc5\x9b\x87\xf9\xa2\xb8\xf6\xc2d\x1b\x15\x99\xdb\xd3$\xc8\xb6\xf1\xe3\xad) \x92)ar\x9f\xd30\xbe\xf1\xd3\xd0\x8f\xf3\x13\xac\xb2\x96:\xa6L\x1bHQ\x8e\xf5\xc4O\xe7\xd9\xe4\x92\x95\x8bi\x15\x9f?\xbd\xa9d\xdfRb\x19\xd8\x84\xa1\xeao\xc4\xea\xc0Qc\xae\xb6\"\x8a`I\xb2\xcc\x9f\x13t\xb4\xcb\x08>\x8f\x93xk)F<%7@\xe2\x9b0Mb\x14\xaf\xd2\x8f\xf1C\x1cG\x06~<\x05\x7f:\x0d)\x80\xfd\x08\x16$Z\xcd\x8a\x08n\xfd4\x0e\xe3y\xe6)n27<,d\x95oHM \xc0\xa8\xbc\x04\x85d\x14\xf6o\x04p\xe0\xa70\x89\x90\x9d\xc2\x8c\xb8\xb3\xd4_\x92\xec\"\xf9\x98\xac\xe0\x84\xceT\xf2\xc8\x8d\xd1\x87\xbe\xe3IC)]CJ\xb7\xeb\x1c\xc9\xd3\xf5Vk\x8bI\xa7x\x03\xedj\xaa\x86\xf7\x998\x03\x1a\x91\x04\xa1\x81\xf4r\xe1\x1d\xd5\xba+\xa4\xc6j.Up\xdat\xb1\x1aW)L\xf0\xd9%\x93\x94\xc6\xcd\xc8\xc0\xd887T\xe9\xdb\xbcu\xcd\xca\x9b\x932\xf2z\xdf\xa3\xdc\xb5_\xa5\x1a\xaf7\xa5\xa6\x0fi\x99\x8ee\xcdJMu2}M\xbf\xaa4\xda\x0bm\xadl\xd6{\xd7\xaaqU\xd7\xd6\x8aa\x0f\xfa\xd7\x8a\xc5;k]\x1b\x9e\xb2\xab\xa2\xae\xc2Od~\xf6u\xd5\xb7\xb6r\x8d\xb2\xcf:\x16i\x0f\xa7F\xb9\xee\xfe\x8e\x8dR\x1b\xaf\x14\x0f\x84^\xbd\xa7\x1fu\xf4\x1dq\xea\xda\x15\xe3WR\xcd\x0c\xcfIf\xe5X@\xd7\x9e0\xea\xe8\xdd\xa4(\xd5\xb9d>\xa6\xe1\x12\x0d\xfc\xfaV]\xedk\xd4\xeb\xe9P\x07\xbe\xd0l/|n\x88\xe5\xa0[\xe2P\xcf\xc4\xa7\xed?\x93O1\x970~S\x16{p\xca\x185\xb1\xbd\xb7\xebx\xec\xbd\x9e\n]\xdf\xfdWs\x8e\xe1\x04J\xc1K9'#\x0e\xd9\xbf=\x7f\xf7\xf6\xeck@V\xfcx\xc5\x97)\xf13\x9cY\xc2\x1f,\xfd\xf4\x0b\x0b\xfc\xc0n9\xe9pR%v\xa1\xe5)\xcc\xec\"\xfe\x12'\xb71\xb0g\x8e\xe5\xc0&/\x85\x95\x9c\x82\xc52\xfe\x89'\xe5)f\xe3\x99b9n\xd9\xe5U^\xa4\xe4<\xf7\x83/\x17\xa9\x8fQ\xc6\x0codk\x19)\xee\x01\xad\x10\x9fe\xb4$\x86\x0d\x14\xc4\x87\xc3\x9f\xd1.K\xe9\xcd\xca_iK|\x0b\xd6 9\xedOj\x8c\xbb\x90\xd6_\x8a\xb1\xb6\xae\xec\x1b9\x1b\x01\xce\xd3&Xc\xd0G\x0c\xc9)e\xd79 .lT\xc1\xfcq\x1e0\xe1\x07\xa3\nM\xd3\xe1(\xa1\xb4\xd6\x8e\x83\xd3%\x8884E\x91\xa0\xd3\x94*>$\xa5\xff\xc8$\xb6wv\x07\x8e\"h\x15\xbe\x83\xf8\xfe`o\x88\x96W\x07{#\xb5\\\xe5j\x82\xe5vx\xb9]\xfew\x8f\xff\xddw$w\xf1G\xecN\xf1T\xe6\xaat\xe9:b{\xd4Hu\x11r\x13\x08\xf5\xb90\x8dP\xa5\\E\x15\x103\xf5\xe6L\x14NX\x0c\xaf&\x92\xc8L\xd2-\xd1\xd3\xb61\xaaeso\x1af+\xca\xc82O\x0fo\xb5\xf032\xfdD\xe6a\x963\x05\x08Z\xeeNbs\x14\x89\xc2&\x8d\xa0\xec\x0f\xf4Y\xdc\xb4\nJ\x99\xaa\xdd\xbb\x12\xcd\x8a\xa1\xa2\x01\x8b\xf6\x05\x8b\x1c/\xbdy\xc3\xcf\xb6\xc6'\xe5\x0b\x17\xeaq\x86\x9a@\xd4\x04\xd4\x14\xe1\xfaz\xc1\x03\xa5\xfc^\x9e\xfa7$\xcd\xc8\xc5m\xf2\x91\x96\xb3\x89w\x95\xfb\xe9\x9c\xe4\xb4+.dJN\x9bf?\x02\xbd\x18}\xad\xbe\x98\xe6\x97\xd9\x99\xc8\x1dj\x14\x03!\x9e\xa3|=\xa6\xd6@\x05\xb8\x00$\xd3M7#X\xd2K3\xfaX\x1d1@]\xe6\xd1\x1c\xff\xcc\xb4H\xd1\xc8\x85\x99s)PH\x95\xf1\xb7-\xef\xce\x8f\xf5 \xa1\xfb\x9a\xafj\xcd\xc0\x1f\xb3\x84\x93o[\xc2\xd0 \xc8U\xdf\x05\xadB\x80\x16\x9a\xa9\x0bw\xa0I\xc6\x04\x1c\xae\xd3\x86\xce\xd7\x0f\x82bYD~^.\x85W\xbcM\x92u\x19pb\xf0\x83\xa8\xd5R\xb2\xad\xfa\xf3/\xe1\xea\x02;\xde\xab!U\x15nj\xe8U\x98\x92 _s\x14\xab\x9e\x95\x9f\xc59I\xdf\x12\xff\xc6\x00\xa6\xd2\xb4W\xd7R\xb5\xed\xaajlf\xcd;\xe3 ]L\xabF\x7fRO\xf1\xe97\x1f\x8d\x86\x93Q\x1fy\xaeyb\xf2\x88\xceC\xdd\xc9\xa8;I3\xc3I\x1aUI\xa6~Ws0a\xcc\xf9\x86\xc9\xd1\xacK\x8c\x04b+\xd9\xa1G\xbe\x92\xa0\xc8\xa5y{\x13\x7fH\xa7\x84\xd3\xedh\xfb\x95}$i\x86\x1b?\xb7\x193&\x13\x94\"\x0f\x91\xdd\xd8\xdd\xf5^\xf5f\x8f\x11\x81n\x0cZ+\xeb\xcd\xb9\xb3\xca\x86\xad\x95-\xfaVfy(\xe9\xf4\xae\xd2$A\x93\xaa7\xaf\xea\xf5\xd6\x17\xd2M\x03\xadH\x1e\x00\xcdF\xd8\xcb\xb3\x1b\x12\xe7\xccl\x01\xe7a\x0c\x89\xa7\x7f\xd3D\xf4\x8dr\xd9\x0b\xee\xde\xa7\xa9\x83\xbfk\x9d\xb2\xa2\xa4\xdb\xfa\x19\x06ku\xe51S@ZOw-\xfcR<\xd6\x1cD7\xdce`\xd1H\xf4I/;\x9a\xe4,\xfbh\xc4\"\x81\xfd\xfe\xe08\x93\x10#H\xe8\xeb\xc2\x94_\x8d\xf3\x81\xd9\xebd\xda0b>\x1a|z\xd3p\xfa\xb1\x1a\xbc\xeeY \x866\x00J\x84o\x0f\xa3|\xa1I\x8b\xb4=\xa3\xe4C\x9f9\x00)6\x84v1\x8b\x0b\x835XI\xfc2\n\x83/\x96>\x90B\xa3\xdcK\xc6\xe6\xf6(\xfe*)\xae#\xd2\xb7r\xa9t\xff&\xde%EF^%\xb7\xf1:e\xd7\xac\xfe]r\xb3V\xd95\xab\xff\xbc\xea_\xb2\xbbj\x90\xf4t\xf6\x06\x92\x8a\xfeu\xc4\x12\xbcbT\xc0\xdc\x05\xeb\xba\xc8s\xb6Cy2H+\x8cWE.?\xc8\xd0\x14K~\x92\x93\xaf\xb9\x9f\x12\x9f?sZ\xbc\xa8[#s\x88K\xf4\xb2\xe98\x05\xa0\xea \xc4\x85\x87s\xe3\xcd\x03\xb3\xceV]'DDJ\xf59\x8bY\xed\xc8b:=\xeeH\x8dx\xa8T\xf2SZ~\x92^\xb6a\x00\x96/\xe8\x11H`=\xb4\xc5\xf9\x8a\xdb0\x8a^\xd5Z4=g\xed\x9bG\xae\xc7AX\x1dO\x81\x94N(tz\x0c\xfey\x14\x95lC\x17\xd5)\x98<=\xe0\xeby\xbc\x15\x12[\\\x14O6\xfcpc\xb4\x82\x89&\xf1\xe5$\xbflC\x8ab\xfcf\xf0\xeb\xc4\x06\xe2B\xf8\xa4\x86i\xd0=\xb7\xb9\xa1<\x87)\xef`\x8f=\xf1\xa0J\x90\xf2\xd4\xe7\xc7{\x7f\xca\xbb\x84g\xe8\xf2\xa3r\xc5H\x83\x9a\xfd\xa1\xdff\x7f(.a\x87\xe8O2\x03|p^\xba@O \xda\xc8\xab\x8dF\x1e\x83\x19\xf2\xccv8D.7\xa4\\\x91~q4\x11K\xf3 \xdf\xdea+\xbc\x99\xebU\x13\xdefR;\xc0\xbe\x05\x1a.X!\xba\xd2$ Y\x86U\xffo\xdaHW\xf5b\xcf\x04M\xe8\x94\xfc\x01d\x88%\xe1\x14V0\x86\xa9\xe32\x80Q\xaa\x0c\x93\xb1\xfa^JP\xd5\xfd\xd2/\xe6\x8b\x9c\xe9\xc2[\xbbyu\xb5*\xd29\xe90\x81\x89*S\x0fc=\x12\x91\xf4\xc2\x8f\xbf\xf4\xcb\x8f\x1d\xd5\xeb,\xef\x0c,!\x0b\x01\xf0\x8d,a#\x85\x97` \xd5$A\xfa\xe8:7!\xb9\xed\x9aK(\x83\xe9\xd1\xd2U\xd0n\xbc\xd5\xaf~1\xfd\x89\x16e\x82\xf0\x99\xf4n\xc3x\x9a\xdc2\xcb\x81\xb2b\x8d\x87%H\x87P\xeea\xe2\x85W\xdcKM_\xb8<\x0eO!\x16!o\x7f\n\xc9-\xc6t\xe5\xfe'?\xb3\xc6\xc7\xc0z\xd1\xdc\x85MffJr?\x8c\xfa\x00\xac\x04\x12\xfb\x84\xb6\xdb\x199\xbb5B\xa6\x0b\x89\xda\x16oCRZIy@\x1bf\xa3\xf8\x85\xe7\x17s\n5\xcc\xa3e\xfb\xcc\x0bT^\x94\xfe\xb7/J\xb5\x93\xcb\xe4\xa6\x13_\x10\xcc\xa7\x1e\xe4o\xe2\x9c\xa4\xb1\x1f \x01\x1d\xdd&\xa8El\xdb\xae=\xc4R\xe5t\xe8\x9bi\xab}\xe1w\"\xd3\xbaF\x9e{\xff\xae\xdd\x90\x92\xbe\xde$#1C\xcah\xd7\xac\xc7?\xbdTS8\xa9\xd5\xf7\xdb?nH\x8d\xbcLVwi8_\xe4`\x07\x0e\x8c\x06\xc3}\xf872\x85\x9f\xfd\xdcT\xec\xefdz\xcb\xea\xabl\xc5\x02\xbaz\xd1E\xb0,\xff\xe3\xf6\xffQ}\xdc0\x1f(\xfa\xcd\x05u\xab\xd6:)\xa9D\xbd,\x91G3t\x02\xc8\x14\x16\xe1\xd9\xbe\xa5\x10\x17\xcdh\x95-\xe1,\xc4\x86\xafl\xeat\xf49plo\xcc\x9f\x0c\x92\x90\x85\xcbaR3Q\xa5$\x958\x81P1Y8\x81\xd0\x01\xc2\x9c\xfe\xda\xa8\xb32}L\xddb+u\xca\xaf\x13\xcf_\xad\xa2;\x9eP\xa9\x95\xbf,+\xaby\xc3\x86z\x82O\\\xe5D`F\xa0\xd4\x11\xc6\xc6\xa9\xc8\xcb\x93rG\x17\xde\x1f\xff\x9b\xe9G\xc2\xf2\xceZ\xd0\x1aKR\xc6c\xacy\x814\xeai0\x92\xd2\x85\x0eGk\xd7\xb4\xa2-x\xb2\x9e\x9e\xfa\x81C9\xc7\xd8\xb4(\xcb\xade\xf7\x95T\x9e\x0f\xf6zV\xc8\xdc.\xb8\x0f\x8a\xe3\x9e\x1b:\xd5\xf3?\x81A\xaf\xda]\x16*\xbc\xde\x9a\xe8i\xea\xc7\xd3diw\xfan\x18\xbak1\xf36\xdb\xf2\x82$\x0e\xfc\xdc\xae\x85\xc4\xc74\xc6cJeX\xce\x95\xe5\x82\xbd\xb9\x19\xc3&\xa4Ne\x0e\xb1\xb3\xff\xf8\xe43\x8dh\x06<\xb5e\xe39Sp\xec6\xe6\xcb\x07\x83\xd5|\x05\x8d\xdcc\xd9o\x87\x83\x81\x03\xa7\xfa\xd2\xd0-ZF\x94V\x06Y\x0d\xe9\xf2\xdd\x188.\xa46\xe5\x9d\x13\xa7\xdd\xd0\xdd\x14\x8c\\\xb6v\x7fh\xb4g\xcdInQ\\\xc1\xacW2q\xd7t\xfc\xb2\x9e\x07\x94aKR%\xdc\xb4\xc9\xf3\xcbBw\x0c^7\xe5\x0cE\xb2i\x0f_P\"\xf1\x11KTsP\x89\"\xeb\x9a\x17\xc7e\xce\x88F\\\x9f>=\xc1\x9d\x11\x9002l\x9aY\x94$iW\xef\x0c]\x0b\xb3\xf7\xfe{\xf4\x81\xd9\xc44\n\x03\xe6\x12\xc3v}\nc\x88\xd7O\xe8!\xe1\xa4Q\xaf\x87J\xe3>\xc3\x99\xa6\x91\x1b\xb4\xc4qn\xf4\xc1 \\R\xcaK\xddh\x98\xd6\x88\xcb\xd4\x93\x9d\xfe=\xd1\xb0n\x9aO\xea\x9d\xa91p\xf2\xa5\xf0\x8c\xba\x05\xd9\xe7\x0c&\xd5\xa9[\x92ofC\x08X\xe3\xd05\xef\x97\x7f\xa0\xe7\xaa\xd9Gr_\x9f\xc8b\xcf\xe4\xc3\xd9\x89\x0eR;Y?\xffZ\x97\x98gO/\xe69\xd0Iy\x98\x87Y\xf3\\\xc4A\xd5\x1f3\xbd\xff\xb0;\xc7\x9e\xd9\x14.cF<\x1ao[\x96\x94\xdeGk%\xcb\x82 \xb9\xd4\xb9\xf7\xa2\\\x7f`\xf0\x06\x8f\x1a\x11\xd8C\xb3\xe7\x1cH\x82']8`!^\x9ad\x97]\x84\xaaT\\\xe3%\xe72\xef<6\xa6f\x02\x0ds\xc21X\x1f,\xd8\x84\xcdMM\xf2oq\xddj\x93l@\xe3\xdc\xc1'\xad\x92\xf9\x99H\xeb\xa2\x8dfB\xaf\x7f?\xfb\xdb\x184\xf6#\xef\xcf\xce^\xe9\xd3\x17\xce\xfc,\xffw\xa2\x86\x873mg\xcc\x1a\x90\xc8A5\xb5n\x0b\xcc[]\x9f\xb6\xf2\x14\xacs\xca\xfdX\x1f\xd1X\x9f\x98e\x1d\x1b!NOk\x04a,\x97\xd5:\xf4\xdaj\x97{lT\xd4\x9bu\xd6R6P]_\xc4\xa5\x9fLq\x86N\xd2K/lNl\x13\xf2s\x92\xffL\xfc/\xeb@\xfeQ\x00\xd90\x84H\x84&<6\x86\x7f\x088zi\x05\x92\xf8uJ\xc8o\x9dBn\xa8*\x8f\xd0\x1e\xd4\xa3\x8b\x9b\xfe\xc2\xd8vO\x9e\x80\x00\x13\xfd\x1d\xd8u\xb6K\\:\x02\xb0\x8d6c\xfc\xee\xef\x0fe\xb8\xe77\xd9Y\x19yC\xfb\xf5Z\xb4\xc9\xef\xdf\"]\xd6W\xadw{\xcf]\xb0\xaa\xc8F\x0d\xf7w\x8e\xf2\xe4xG\x947\xf7^\xbe={\xfe\xe9\xea\xc5\xdfPs\x847\xf8\xeb\xfd\xd9\xcfW\xcf?_\xfc\xf5\xea\xecS\xf5\xe0\xfc\xe3\xd9K\xfa\xe0\xea\xc5\xf3\x8b\x97\x7fm<.\x1f\\\xfc\xf5\xd3\x87\x9f\xdfkJV/J\xc5\x05\xedCLn/(}\x1b\x9f\xa5\xed\x9eg|u4\x97\x0e\xc5A\xda\xa8\xcd+\xff.J\xfc\xe9\xb8%\x83$\xd4\x89y\xb5C\x18/\xf3[z\xa59@\xca^\x91\x8e^\x9c\xafH\xf0\x8d@\xc9\xbe\xbd\xf9o\x06\x81&\xbe^\xef>\xbf\xba\xa6;\xd7j2\x01\x0d\xc4]~\x9c\xadH\xa0i92\x1f\x02\x8dO\xb5\xad\x06\xbac\xa5\xfc\xd4/\xf2\x85\xa6\xd5Y\xedT\xc2\xd2\xb8\x80\x95b\xab\xaa\x18;\xc9\xaa\x92W\xd7w\xcc-\xb37_\xb6\xaf2X\\\xc6\xaeK\xdcY\xba?3\xa5\xc0\xe5\xda\xe1C\xdaH\xed\xfb{\xb4\x0fa6?\xc4\xa1\xef*\xeasMfs\x7f\xc7\xe1\xec\x96\x0b\x16s?5E\xaf\xeaE\x98H5\x0f\xf4\xee\x88\xfb\x0d\x19\x0bO\xf7?\xd03\xb0\xfb\x03\xbd\xf0e\x7f\xb0\xdb7\xdc\xb1\x10nli\x98\xa1\x98[U\x01W\xd3\x0c0\xe6\x16W\xe2\xd6\xd7\\\x92r?c\\@\xb6s\x04\x9b\x9b9\x1cCl\x0c\xb3\x99\x1a3\\3\xafa\x92\xdb)f\xcfK'\xc3\xcbv)\"\xbd2\xd9\x0b\x98\x9f@\xa9[{\xccm\x0fO \xa9?\x9f\x13\x96\xfc\xaa\xf6p\xe1\xa3\xe5J\xfda\x86%\x8b\xbauK\xb6\xde\xdc\x0f\x07{}$c*\xd8$\x93\xd0\x13)_x\xbc\xb5u\xd4\xe4C\xb8\x94~\x12_\xb2\xfc\x83\x92\x19\xb0\xf6\xac\xd8\x1a>z\x8f\x0c\xba\x93\xd1kFS\x0d\xe4\xeaj\xea\xe7\xfe\xd5\x95\xb6_\xa9\x9d;p\n\xf1D\xc3:\xe7\x94u\x16\x8f\xc7`-\xfcla\xd1\x134\xf6\x96\xfe\xea\xd1\xe31\xb8C\xed7\xe2\xf2\x89\xf0v\x06w\xa8]\xfd\xc6\xec\x11\n\xd7\x84\xeeD \x9dlA\xde\xa5!\x85\x86.:\xc6)\xf86*\x93\x12\x9b\xe0\xba tg\x89T\xddc\x94\xb8v\xc0M\xee\xdbZ\xbd'\xde-\xb9^\xf9\xc1\x97\x8fIt7\x0b\xa3\x88\xab\xe4\xa7d\x95\x92\xa0\x99\x17\x14=\xdeW~\xbe\xc8\xb8=I\x15z\x99\x7fY\xde\x9e\xb0\xf4\xb3z\x06\x8f\xb8`\xb1dM\xda\xd8f\xb5p\x91\x9a\xf0tk\xc5>#^\xd4x\xad0\xd6\xad\xfd\x0c\xffG\xfa\xa8\x11\xc64\xfa\xd8\x9c\xad\x13\x18>R_\xab\x9a&\xd4\x07@w\xdd\xf6\x7f\xda\xa7\xe3\xc1\xfdd\xb8\xf5\xf4\xf2\x97\xe9\x8f\xce\x9f\xb7\xbb\xb6\x88\x01\xa3$\x95\xb1\x8f>\xef\xfb\xc6\x86\xfd\xff\xb3\xf7\xef}q\xe3\xc8\xe20\xfe\xff\xbe\x8a\xc2\xe7\x9c\xac=\x18\x03I&\x97\xce\xb0,\x03\x9d\x1d\xce\x06\xc8\x0f\xc8\xcc\xce\xaf\xc3\x971\xb6\xba\xdb\x1b\xb7\xddk\xab\x9b\xb0\x9b<\xaf\xfd\xf9\xa8$\xd9\xb2,\xd9\x86\xb0{.\xcf\xd7\x7f@[\xd6]\xa5RU\xa9.T9\xd3\x18\n\xc9`\xc4*{\xf2\x04\\\xd5EI\xde\xf0A\xb2\xb1\xc7M\x87\x0b\x1e]\x80xX\x80\xc0\x1f`k\x97\xff\xfa\x0f\xf4e\xcfi}\x8c\xc5\xfb\x80\x99\xd2]L\xf5\xcd\x82\xed(\x17\xfa5\x8a\xe9\xa2\xf9z\x8b+\xd8\x18\xf1\n\x86\x03P\xba\x82*\xae}\xc8\xa1\x83\x90\xd2\xb1\xa1`\x1f^Y\xc8\x9dg\xfa\xfd\x99 w\x9e\xe9\x0e\xc6\x05V}\xa6\xd3\x99\xa5\x99*M\xc5%\x81^\x0d^\x18\xb9\x85\xd7&\xa4S7\xf7\xdats\xea&Zj\x8c\xa9\xa1\x96:\xc7\xd4\x95\x96\x8a\xe1\xdd\xea%q\xb9\xe1\x91\xe2m(\xfc9!\xb7W\x08vk\x97\xbb\xe3`\x7fQ\x97\x8c\xbb\xacqw=\xae\xd5\x947\xca\x9e\x84K\xb5X\xee\xf1\xd01j\x96\xf7E\xbeHJ\"\xb3%\x01\x0f*N\\^_\xd8\xc8|A\xa8Z_\x88YV\x8d,\xbf\x90\xf0\x93\xd6\xec\x8ao\x0fw=\x08ZK\xe3=_\xa62\n|c\\9r\xcf6\xfd\xbc\xd8\x9d\x8b\"\xf4\xc1>\xa4n\xc6\xdd\xdbh\xd7~\\\x81P*)\x18/\xf7\xf1Z>\xea\xbc\x967\xac\\\x9b\xa6\xc5z\xa6\xc3\xea\xc1\xe9\xb4T\xb1\x1cVE\xb5\xca\x96j\xe2a\xd5\xe0\xfa[\xaa\x98\x0f\xab\xa2\x82\x8fFn\xa3\x8a\x81\x8235\x05\xf2AV\x0d\n\x89\xfd\xecu/\x95e\xbf|\xce5\xaeG\x88nF`\xb4%\x13}W\xb4arq\xaa\xf49F\xb4v\xbf%T\xe1\xd8\xf2\xd5\xce\x90Au\xf2\x0d;\xdc\xb9>\x1e\x82\xe8[\x97x^\xcdJ\xc8x0l\xf3f\xf0\x03$o<\x94i\x91I\xee\xd2I\xb6\xb9y\xe5]\x19\x07\xcf\x8d\xf2\x90\xd7\x16\xf4\xa8\xa6_?h\x02\xccr\xfb\xfaZ\xb45\xb4\x0d\x1a\xacIQ&\xdc\xef\x92PE\x92IA\x92\xc5\xe4\xf3\xd9\xd4u\xd6;\x81\xe3u\xe7\xd8e9\x9e<\x11\x02:s\x8eW,\xcf~\xcf\x85cF>\xd3\xcb$\xd2n\xb1z\xf4u\xfaUX\x18V\xad\xd5X~\xefDa\x9a\xde\x84\xd1'\xa7\x92\x1eb\xf8Y\xb8!\x8aZ\xcb\xef-\xaa\xc5ka\x07\xc7c(\xb4\x94\xb3\x8de$\x8e4\x06F\x92\x0f\xa2\x85\x9d\x1e+_\x8b\xc2\x97|$*\x08\xe4LZ\x8d}\xa0G}K>\xed\x1a{ie\xf5\x11\x1aT\\]\xdb\xa2X&\x1f=\x10\x89\xfat\xe9w\xc9\xe7Q\xbbjU>\x93Ooo\x9f\xffk{k\xd5N\x93OW\x87\x07\xd9b#.D\x12SRS\xee\n\xb6\x90\xb3 \xb9\xb9B\xc8\xd0\x9e\xdc \x1e$\x93ps\xf3\xaaa\x8d\x10\xf6D\xe5\xfd\xe6YQ\xcd\x03zt\xfd\xbf\x0e\xbd\x81\xd68<\x14\xe3\xd5hL=wU\x07\x89\xdf{f\xcdx\xbb\xa6\xb5\x89\xcc/\x84\x97E\x93<2\xe9;\xb2\x92\x0c\x91\xe0$\xbb\xc2s(S\xfc\xc2u\xd9\xb5Y\x84\x10y\xf5]\xa9F\xfe\xca\x83i\x91/\x00\x9d\x83\x85i\x9aG\xca\xcf\x0fY\x19NI+\xe1\"\xcdo\xb5#\x81\x91\xa3n\xe2\x16\xdc\xa7\x0c\x0d*w\x94\xa1\xe7C\xe2\xe6<~b\xc8\xdb\xea\xa7G\xf0h0x\xce4\x1f\x0c\xceA\xe34\xc8rq\"\x88\n\xcc\x94\x8biRX\x0f\xf9\x1c\xdc\xb3\x8b\xbdg\x97\xd6\xc5\x8e\xeeI\xb0j\x9b{6I\xae\x0d\xc1\x14\x98\xc2\x05\xc2>\x14\xc14\x91Z\xc1\x8c\x86\x13\xaf\xcaoT\xb07\x8c],z\xaf\xf2\xe9?a\xec\xf5\xd2\x98\x16E\x01\xbe\xff\xc2\xce\x15\x01\xeb\x81`G{\x05\x87\x83h=u#e\xee\x8b\x97\xdf{\xae3\xcd\x8bq\x18\xcd\x9dA\xa8\xa8O\xe3\xf5\xd9\xaeY\x10\xf1\xcc\xe2\x06r\xf7\xb5.)\x10\x82\x88W\xaa\x18\xd7\x1dL\x8c#R\xc3\xf8$+T\xcfL\x8d3\xdb\xbaC\xfe\x01\x9e6\\\xe5n4\x84\xban)\x9c\xc3r\x97\xb1D\xb0/\x0c\xc2\xcb\xc6\xd1\xf5T\x04\x8c\x94\x8c\x0dFO[\xa1I\x13\xe7\x0b6\xd0n\x08\x93\xc3J\x7f\xd3\x89\x1c\x11\x93KI#2\x04\x97\x92v\xebx\x9e\xcf\x0d\xe1\x1b\xa3\x82Z\x91\xc6\xe0\xc6\xb0\x19\x96%kgP\xc5\x9fI\xfbs\x1d\xa2G\x8fK\x0c%\xdb\xfen\xee\x96\xac[ld\xb5x\xf6\xab\x17\xcc\x86\xf2\x83b\xa9|\xdd\xef@u\x0di^\x15\x945\xf1@\x06\xe6\xc5I\x1b\x8b\xf3LY\x1c\x86\xceh\xa5\xec\x03#H\xc4=\x88\xf8\x8e\x16\xe8\xcd\xef\x19\xb7qS\x1a\xe5\x1fqA\xd3\xba\x0f\xca\x17\x0d\x18$ \x945 \xac\x0c\x80P\xb6\x00\x01},\x98\x16\x1d\x05\xd3\x86%G\x9bd\xc3J7A\xc1\xa0\x01\xa4\x82B\xa9\xafv*V;\xf5D\x0c\xbd\xe8~(\xa9\xc6\x12\xadp\xb9\x02I<5_\x01={f2\x18\xcb\\\x8b\xb0rwW\x17nrt\xb7\xfbB\xc7M\xdc\xa7D[R\xa9\xaa\xbd\xb8TS\x82\xd5\x87\x88\xbe\x05\x97&\xb8\x8e}\x98\xfb\xb0\xf6a\xe1\xc3\x0c\xf6`\xa9\xaa\x89\xdbhU);n}dD\xa5Y\x94w\x87\xc2\x06\xde\x11\x06\xd9Oa\x04:\xbae\xcf\x0d\x92\xe0\xcd \xb6q\xc6\xb3\x1e\xe3\x8e\x84r8i\x99v\xb0\x1a\x13wf\xd4\x19E\xba3\xe6\xa6\x072F\xef\x1b\x88\xe1\x0fp\xf3\x06n67\xcd\xd46\xab\xd1]\x08G\xacwn\xe8\xce\x91T\xbd\xb9\xf2\xf0\x8em.\xee\xd8\xee\\L\xf3P\x06\x81\xb7_\x0b\x1e\x0b\xb2\xba\x9a]4!\x1a\xcd\x7f\xcd}\\\xc3\x1eTq'\xde\xc0\x066\xb9F\x8e\xc3\xf5\xbc \xce3b\xb8\x14\x06\xb5\xb3\xb9\xbb\xf6\xe1\xce\x879\xb7\xc5\xe3w\xc4\x03\xba\xf6\xd5\x0b~<\x1f\x1f\xfc\x99\xc7j\xa5\xc1\xf9\xf8\xf2\xc3\xf9)\xec\x89\xdd\xf6\x8d\xe7\xb3\xd5'u\x11\x1c\x8d\xdf\x1e|xw \xfd\xfe\xa9ww^\xf5\xf8\x9d~)\xfcL\xbf\x12\xff_\xdf\xdb\xdf\xb4BR<\xb7\xdcm\xec\xe8\xdb<1\\\xf1\xdc\xdf\x94\xd1rH\x85Fm\x8aD1pD\xee\xc5\x0d\xb1\x18\xddd\x83\x00\xad6a&\x1f\xec\x96\xd6+W\xa8\x869O_\xeaGCU\xcchc]}\xb5-\xdc\x0e\xa7}\xd9\x7f\xdep\x05\xa7\x07\x82\xc9\x8cxp\xf8\xda \xb39FQ\xde\xe2(\x10\xa6I\x16\xa6ig\xd7:;\x0eP\xb9&\xeb\xcf\x08r\xa4Q\x9a\x97b\x00\x9d\x05\x9aF\xe6\xdcu\xc5\xe0\n\x86\x0c\x0e\xba\xe6\xde\x93\xa8\x15{\x1a@\xba\xd2\xb0\xd9)\x81d-\xb0\x11s\x03a\xdbu\x8b|V\xed\xab\x05\x90\xd8\x81\xfb\x83GM?\xae\xff\x93U\xbcNh\xe7u*\xcffA$\xa0\xf8\x80\xbaa\xa7+\n\xae\x01\xd6\xa3T\xc5\x88,\xe7\xc9\xdfV9}\xd3\xe1\x8b\x83=7\x05 ?\xd9\xb3\xf0\xd6^\x0di-\\,\x1f\xa5\xb1\xd7C\x1a\xfb\xb7\xcfO_>Fk/:\x14\x0d\xa1j-}\x94i|\xd1\xa3b\xc8\xdb\x9a}k[\x83t\xd8\xa2<\xa3I\xb6j\xdf\x0c\x81\x95\xc5\xe3|0j\xf6\xbb l2\xfcX\xaen\xf8\xb5\xb5\xbb\xf2!\xf4\xe4e>\xe3@\x19+\xbc\xa9#:s\xe5b\xaf\xca\xfa\xf7Y\xc9v\xe50\xd2C\x0c<\x92\xbaH\x83\xea2\xfa\xa67\x851\x0b\x852\xb5\xd9@\xaf\xcd\\\x96\"\xbf\xce@ [\x92\x96FId\xb8\xb5\x9d\xa2p\xa1\x99\xb6l\xa3\xabvx>\xf6\xd0|yp\x93\x17t\x04N\xc8\xfe\x1b\xd0\x1f\xcb\x92%\x0b\x0c\xe11\xce\xe2\x11\x94\xae\x13\xca\x04\x92\xc5\\\xff\xb9\x99\xd4]\xcb1%<\"H\xb3\xaeD&\xeb5\xd6\x1f\xba\xeb\xbd\xa0!\x1b\x89Zg\xc9\x92\xf4\xfax\xa2\xb1\xae\x1f\xd3U1\x02\xe7&]\xe9&\xed\"\xc3a\x98\xbdO\xc3\xbb\x118Q\x98-\xd3\xf0\xae3\xdb\xe5\xbc\xc8W\xb3y\x9d\x9b\xf2\x04K\xa1y\x98\xcd\x08\xcb\x8c?,\x99RT\x01w\"\x8c e\xce\x92/\x96y\x99T\x0b\xe6Du\x82uu\x94Bb\x1e\xd5b\x1dS\xa6\x14\xfc\xb0\x8cQ&\xa0\x96\\a\x9a\xadhF\xc9gzB\xb2\x15\x16\xc2\xb7\x05\xc9V\xb6\xecK\x9c\xf8|i\x9b\xf5\x15v{e\xe9\xa9\x12\x1ek\x04N|\x93v\xcc\xe1Q\x11\xceX\xa6\"\x9c\xd93\xf0\xd9ey\xac\xd3\xca\xb3QRT\x19)\xb1\x80\x16f\xfd\x9cP\x99\xf3sb\x1bG\x11\xce0\xc0\xa3\xc8\x99\xb2\xdf\xf6\xacg\xeb\xaa\xf5|\xdd\xd5\xb8\\w\x96\xb3c\xc1\x8f\x8a|\x89\xb9\xf2\xa5%\xc3\x8ao\xd7\n\x9ec\x91\xd0\x05\xd7\xe3\xc5\x92&\x84\xcd'\xe1\xbf,\xd9\xb2\xa8\xb8[R\x9eQ\xfe\xb6e\x8dE\xb6\xd8\x9a\xa5(r67\x84\xfd7gy\x9bG\xabr\x04\xce\x94\xfd7g9\xce\x96\x08x<\x02\x981\xcb\x9f\xc9\xddQ~\x9b\x8d\xc0\xf9D\xee\xe2\xfc\xd6\x82\xca\xfeL\xee\xde\x17\xa4,y\xbe%\xfbi\xcd\xf8a\xc9s\xad,\xab\xf0\x0e-\x93\x19\x0f2\x92f\xca\x8cs\xe9\xca|Bh\x18\xab\x05\x16\"\xc1^H\xc2\x0c\xcb\xdf\x013U\xe0\xb8\x118\x0b\xf6\xdb>\x07U\x108\x99\x95qW\x1dY\xcfp\xee1gn\x9b~\x9e\x91\xef\x03\x9e\xd3\xba\x11D\x988\x99\xd16\xbb\xef\xc3\x121\xdd\x92\xfd\xb7eY\x95<\xcb\xaa\xb4e\xe1G\x89\xfd\x1ca\x19\x92l&\xf2$\x99\x05\x19\xbd/\xf2\x99\x80\x9b\xa5\xf8i\xcex\x1eRRm\xcb\"\xa4\xa4kKr \xdb\x08\x9c\x12\x7fX2\x11\xf2 \xb7Y\x89?\xec\x99\xf80J\xfe\xcb\x96-\xe5\x91=\xab.\x962\xa5\xb3\x9f4LS\xde\x07\xfe\xcb\x92mU. b\xec\x92\xff2g\xbb$\x9f\xa9\xdc\xd1T\xfe\xb6dM\x16\xa4:\xf3h\xb2 ]\x87\xdde\xbe\x8a\xe6\x87a\x16\x116\xa5\x94\xbdE\xf8\xd6\x91\x9d\x1f0\x98\xd7\xde_\xf6U\xec\x17\xcci\xdf/\x98U\xeeX\xcc\xdb\xb1e\xf1\xda/Q\xa9>Z\xa5\xd4d_3\xcdX\xd1\xcfy\xbaZ\xd4P\xb7\xc6\xd7\xae\xf5\xfc%L(\x87\x96[\xfe\xcb\x92mNp*o\xd9\x7f\xcd\x04\xb4Y`\xcex(\x1e\x85\xa6\n\xa2w|\xe4\xc0\xa6\x90\x18\xb9\x8d8\x04^P\xa6ID\xdc\xa7^\x93\x1dX\xa3j\xdb?\xbe\xa2VE\x93\x94>'2\xd2Z\x1d\xa4\xb0}\x990 p\xad\xa9\xa2~\xf99:\x8f\xf9)\xcc\xe2\x94\\\xe6\xcbwdMRw\x1d\xcc\x1b \x9e\x0f\xeb\xa0]=\xec\xf5{ll\x8e\xa2$t\x9ca@\xcc\xbe\xae\x19\xdb{\xf2\xc4\x98\x1e\xd4\xd5\xb6\\\x01j\xb3X\xb6\x9b7\xb5.5\x88\xdc\x0dc?\xbe|\x01\xe3\x87\xa0\xaa\xdf\xed\x0e1\x97b\x81\xcb|\x80S\xd1\x86\xa4\x98\xfa\xd0\xed;O>b\x00=j}\x95\x16\xde\\D\"\x99\xcc\xaf`\x0f\x96\x9b\x9b>D\x13\xf6&\x82\xfcV\xaf\xed\xe5\xe6\x11 `\x0f\x92V\xc0\xc6#\xc20%\xc9\xa2\x84\x94\x13r\xd50f\xcb\x87\x08\xb3P\xcb\x9d\xed\x1c\xabu[\xa1\xc7\x99\\\x89X2+\x1e\xa7\xd8\x91{\x9d\xcb\x86Wht/v\xbd\x07\xfbfp\xa2E\xb8\xfcqu\xc3\xd6\x11?(\xb5\xf8\x12e\x08\xb3\x9d\xd4\xe5G\xfd7\xd5\xa8\xd4 \xaa}@%Gg'H~\\\x88\xf3\x96W\xe4TGqc\x02\xe4\xa1\x0c\x1b;\x9d}\x16\x01o\x95\xf6\xaa\xea\xeb:\xee\xd9cC\x0d\xc6\xc2\xbf\x1c\x9f\x1e\x9d\xfdr\xfd\xd3\xc1\xe9\xd1\xbb\xb1\x1c\x0bR\xd4r(x\x86p\xbe\xbb\x1e\x9d\x9b\xba\x92\xde\x16\xa3s\xef1\xbc\xb7\xa2dUEf\xc1}\x96\xf2\xd8\x17_\n\x01 \xf3\x04\x90`uI\xe6\x08\x15\xd7\xc1\x93\xd5\xecO\x92\xf5\xf5\xa8U\x81\xec\x10\x96G\x1a\x97u\xca\x87\"\x10\x1f\x85N\n\xbeck\x98\xc0\xba\x1d\x9b\xf7\xd6\xb0\xb6W>\xc4\x93\xd5\x15\xef.n\xc7\xbdVHy\xe8;.\xf4Z\xfb\x03\xd5\x80b\x867\xa8\x9f-\x85bK7\x1aK\xfd8\xfdhB\xcf\x90\x8e\x88\xc86<4\xe9\xfbpF\xfe\xf2k\xcfA\x86\xb7\x17\xfa\xad\x1e+\xdd\xe9Kz-\x9c\x86\x9a\n\xba\x0e\xa2\x19\xfcm\xd2\xe3\x92\xf7$\xaa\xd3\x06UQ\xa0k|$+W\x85\xc0`?\x87\xe9\x8a\x9c\xe4YB\xf3\x02 \xba\xdeq*\xae.\x90T\xc0K\xdcu`\x984\x97\xed\x80\x0d\xcc\xb41\xed:|\xd8$\xac\x82\x82L\x0bR\xce\x95~\x95\x96\xfb@\xd3R/\xf8\x18\x94\xd2\xe8\xebzZ\x87\xecR\x1fm?To_-\x06\x08\x83<\x904\xc5\xd4Ur\xa5\xd1P\xb4\xe6\x94k\xb4^\x17\xab\x94\x94\xd7\xd7\x0d\xdd\xf0\xeb(\x8c\xe6\x04\x13-\xd7\x8b\x85Bp\\_O\x93,\xc6\xdcv\xaa\xa5\xad\xf7W5-\xc8\x04~\x8d\xb7\xb5\xfb\x06\xa8\xd5\xb1`\xb3\xe0ds3\xbbB\x85\x01\xae*s\x0fO\x83\xbe6\x82(_,\x93\x944\x07a\xbaB'\xa2\xfb\x06\x96\x83M\xa1\xe3hT\x0cQ\xc6)\xecI\xddn\xda\x8e\x04\x84\x13\x98\xfc~\xe3\xf5\x18\x07\xa8\x95\xa2\xae\xfe?\xd0\x07q\xaby[ OY\x92\xc7\xda\xe2\xae\xf3:\x86oD\xa9\xec\xc9\xd4)p\xd1!X\x86\x13!\x07G\xf9\xe0\xbe|\xd1Z\xe5#\xcd\x82if\x88M\xdd\x1a\xad\x0d\x1cB:\xd0\xf2\xa5\xa8a\x99o\x01\xa3\x11\x1a^\x12\xb1\xbe\xea>\xa3\x19Doq\xb5\x81B\xb5\x8c\x16V\xd1\xef\xc3\xa2$\x05\xb0\xe9C\xc3\xb2i\xbeB~\x1f6A7K\xd7\xf6Eq\x15L\xa5\xf1g\xebK\x98b$c\xfc\xff\xe5\xcb\x90]\xdf\x9c\x9d\x1b2\xcd\x0bb4\xf7k\xb9\xb1ZK\xcfx\xbd\x93\x94Hm\x9c\x8eI\xca\x1fs\x92\x82r\x89l|\xee\xc3\x8e\xc9\xf5!C+F\x13R\"\xd9K\x93C\xc4if4/\x0dS:\x82\xa4\x9e\xf2\xd6\xb6\xbb\xd7\n\x84SJ\x8a\xff=\x0b\xc0o~\xff\xa7-\x02\xc34\xf7@\x13F\x04\xa0M\x08\"/\xdb$\x18T[z'\xc10q8 \xc5cM\x02\xefA\x9f\xf2\x17\xcb\xd0\x0cJ\x8b\xae` \x8c\x00e\x06\xdc\xe3cs.\x86\x1dy\xf5Y\xd9\xd2\xa0\xe7\x87\xd9\xb0j4\xba\xa4\xda%fU!\xca\xce\x1e\xc3N8g]\x87E\x98\x853R\x8c \xc9\xd6a\x9a\xc4bg0\"\xc5\xb4'\xa0\x8d\xbd\xe9\x95:*=\x84\x13\xe6\xbe\xef:\xc5I\xd9Z(}\"\xdc\xeee\xf2\xfe\x17\xcc\xe5\xeec\xcc\xe5\x8cP\xde\xbb\x01jo\xc2\xcb\xc1\x9e\xdeB\x0d\xef\x15\xe1\xe9\xb6\xfa1!W\xda\x1e\xfd\xea\xdf\xdf\xf3{\xbf\xbb\x93\xce\xbd\xbb\xe6nC\nn1hq\xd6\x8e\x16\xc0\xc12/O\xc2\xcf\xed\xaf+\xf9\xb5\xfd\xa9\xc4OIy\x9c\xbd\x0boH\xda>x\x94\x8f^M\xc7\x9b\xf2\xa5,\xcf\x87l\x11\xd2hN\xe2\x8b(_\x92\xb2\x8e\x0dj\xfc\xbc\xb5\xe5\xb7*C>\x05{\x8bf\xf5x4)\x9d\x10\xa2\x14F\\\xed\xbe\xe1\xa3\x82\x1f 4z\x9ag\xfdz\xcd\x0fN7\x07\xa1\xca\xaf\xea\xecaq\xcf\xf3 \xdb\xdclCr\x15\x82\xfb\xf53\xe1\xdb\x11\xbd\x04\xb2\x9f[[V\xd2\x99\x0b{\xcc\xbc+\xea\x80\xb5\xbe\xb4u\xabP)\xb7$EP~J\x96\x97\xf9'\x92\xd9\xc3\xef\x80\xa2\x11\x0f\xfb\xdc\xc5\x19_l\xcb\xa4\xc3\x1e\xf7\x0cb\xfd\x9a\xc1\x16\x9ft\xbe\x06+}\xfeK\xff\xe1a\x15^\xdb\xa2`r)\xba\xeb\xfc\xdd\xf1\x8cq\xa5\\%\xb6r\xa7V\xaa\xd4w\xbd\xa8=B\x15\x02\x8f\"\xc1C]\xc7a\xc3\x17\x0d\xf6j\xa3\xa9\xf5\x0f\xd3\xb8m\xc8IL\xa1H\x9d\xc30\xfb=\x85(LSX\x10:\xcfc\xc830b\xd4\x96\xcb\x8d{\xcew+&\xa20S\xd8\xf5\x02)x\xd2no\xd0a\x87\x08\xe0\xe2\xe6M%\xf5^\x1f\xa4\x96\xc5H`\x1f\xb4\xaa\\\xf4:\xaf\xd8\xb1\xdd\x7f`}\x9d1 S\x14\xd5\x15jD8\xcdW\xb8\xc0\xb6y\x1b\xc1!\x8dd\xf2\x97\xedr\xedt\x19\xae\x9c\x87]+\x10\xe1\xc8\x18\xd3^\xdd\x9e\xa1\xe6\x8eJ\xd1?\xc7\xd9\xf4\xfeun\xfcs\xbak\x83\xe4<[\x93\x82\x82p\xfbKsX\x16\xc9\"\xa1\xc9\x9ap\xefON\xdf.\xd3\xd6\xb9\xe9\x0c\xec\xfb\x9d\xfb\xfa\xe5\xd0\xadpd\xd4w\xdd'\xb8\xf0\xf4\xf5B\xd7\x1f\x0dE\xfa\xae\xe7:\xc7\xe3\xeb\xf7\xe7g\x97gz\xd0\xd1U+jA\xe3s\xd9%\xc8\x02)\xcc\x12\x8e\x99\xdc\xdd\xef_x\xae\x93L\x8bpA\xf4\x86\xe4S\xe0\x05\xa0\xcdS+\x8f\xc2\x12\xa0I\x10#7\x97ix\x07{\xe0dyF\x1c\x1f\xa3R\xecx\x0d;\x17\xee\xa4\xb0,\"\x96\xed\xaf\xe1:\xe4VE#\xc7\xe7\xa4(\x0dP\xe3/\xa3\xbf$Y\x9c\xdfV\x08\xc3\x0b\xf2%\xc9\\\x1e*\xa0H(q\x9d\x1fx\xd1?T\xc2\xec\xb7{\x1c\xbf\xfe\xf0q[|r0?\x1a\xbc\xba\xc2\x95\x14 \xde\xbe\x81bk\xeb\x8d\x07\"<\x8b\x12oe\x92L\x8a+\xc3\x8d\xa4\x00\xcc\xd2\xd5\x0e\xc4\xaecE\xa0\x1eP\xa3\xb6Zi-#\x02\x16\xa2v\xe9.Kq\x8e\xcf\x8f\x17N\x91\xa0\x03t\x1f\x9a\x9f\x85\x93\xd3I\x88n,\xd1\xfe\x04=\x9fka\xd4\xa5\xe3h7\xfb\xff^D\xfa\x17O=\xd7\xf9D\xeeJs`\xdf\xdd\xdd\xfe83\x96\x8e\x17\x82\x86w\xf1\x07w(\xf9\xe0~>5\xd9$\x17\x13\x871\x11\x05\xd9\xfaky]\xce\xc3\x82\xc4\xd7\xd7\x8el\xd4\xfc\x0d\xef\xfb\x1f8\xa2\\\x8e(\xe7#\xfa\xc7\xd7\xbe\xf1\xd8\x10\xab\xa38\xd2\xf7\x9b\xd7\x90~R\xbe\x97 |6\xf5M\x04\x99O\xf3wy\x14\xa6\x84\x9f#\xbe\xe4\x9e'\xb0u\x82~\x07\xd1\xa1\xacsVG]B\xbb\xb2\x02\xcd\"-T\x18;\\\xc34%8be\xe9F\xc2\x12\x19\x1e\x008\xde5#8773\xd8\x84\xc2\xab\x18\x13F\xc4\xf7\x9dl\xd6\xbd\xf0\xd2\xe2\xea\xf7\xd9\xffx\xb6\xf7y\x0f\xa9\xf4\xe2\xe5C{\xfb\xa8\xa4\xd2\xee\xeeK/\x98\x9a\x899\x93\x07\x17\x13\x9e\xea\x1b\x87\xf9\xbe\x07\x95a6r$V3!='5A\xeeC\"\x03\x84\xa2\x03\xb6\xf6foz\xa25\xdd\xecH\x87\xc6\xcd\x8d~\xcf\xb9\xea\xf5\x80\xf3t\xd74\x03\x18{\xbdw-\x19#b\xcf\x04\n\xcem3X(\x03_\xf2\x18B\x82\xa7!\x0d\xdf\x11\xc6XI\xa0\x13L\x8c\xa5\xf9\xf2Eu\xd4\x9e\x19$a?\x86\xb1\x8cW\x04\n9ju\xcf\xc7=)g\x95\xec]}\xaa\xcb3\x11\xd5J\xa0\xd1*\x11e\x13\xe8\x8eVc\x1d\xbf\x81uy\xfa\xbdY\xd4\xf0\xbdM\xce\xd9\x07\xbe F\xefd\xc8\xbf5W|k\xfc\x9b\x03\x9b\x90\xa1\xbf\xdb8'e\xf6{\na\x14\x91%\x85\x82\xcc\xc8\xe7\x96\xd3[\x01\x11\x02\xa9~\xdb\xa6f[\x14\xa5\xc5\xfd\x9b\xd3x\xc6\xc3\x1el\x07\xdb\x9aH\xc9x\xe2:\xdb\xc1\xb6\x03\x13r\xe5jnu\xaa\xa3\xd6(\x80\xef=\xbe\xe9\xa4\xb8\xe2\xf6\xb8\xb0am\x03z\x8et\xd3\xfcn\xdc3\xe0\x11\xc5\x8d\x8c\xb4\xfd\x90\xec=L(\xb27F\xac\xda2Q\x16\xa2\xad\xd6 \xc9M\xa0\x9f\xefx\xc1\xf4\xa1k\x9b\x07\xfc\xcc\xe7\xec\xa9|\xe1\x81\xa1\xfe\xf1\x15\x83.\xd4\x19\xfe\xa1Gtq\xae\x91\xc4!xAs@\xdd\x1d\xd4\x97'\x90d\x1c\x93\xac0f\x95 c\x0b|\x1c\x06\xd3\xd65I\x1f\xac\xb7\x97DH\x8cf\x84*\xfc0\xef\xb6\xd9\x8d\x07\x0fXz\x7fT\xdf\xa1\xcd\xb5\xfd\xddFs\x90\xdf\xc1\x1fc\xc2\x05iI\x9e\xc19\x89VE\x99\xac\x89\x94\xb8\x92\xcf\x94dq\x92\xcdZ\xc5\xc2\x15\x9d\xe7\x05\xfc\x9c\x84\xd1\x9c\x94i\xb8\x86w9-\x17a\x96\xaf\xe1\x87T\xfe|\xf5\xfa\x8f\xb3E\x98\xa4A\x94/\xfe\xd0\xaa#M\"\x92\x95\x04N\x8e/\xb5oz\xd6\xcb9\xe6\x82w\xa2\x84{r|\xe9\xf5\x949\xcc\x97wE2\x9bSp#\x0f\x9e\xee\xec>\xdbz\xba\xb3\xfb\xca\xd8\xe5\x9e\xaa\xde\x93b\x91\x94\x18\x14,)aN\nrs\x07\xb3\"\xcc(\x89}\x98\x16\x84@>\x05\x06_3\xb6L9\x84\xd9\x1d,IQ\xe6\x19\xe474L\xb2$\x9bA\x08Q\xbe\xbc\x83|\xaaW\xcf\xce\x11(\xf3)\xbd\x0d\x0b\x02a\x16CX\x96y\x94\x84\x94\xc4\x95\x1e/Zf\xc04II .\x9d\x13p.D \xc7\xc36c\x12\xa6\x90d\xed\xca \xc8\x9cp\x9b\xd0y\xbeb(\x9d\x83M\x92g\xbe\xf0s\xcdz(?\xa7\xc9\"\x11\x0d\xb2\xe28\x8b%\xd0\\\xaf{U\x12\x1f\x07\xe5\xc3\"\x8f\x93)\xfbOp\x0e\x96\xab\x9b4)\xe7>\xc4 k\xe9fE\x89\x0f%K\xc4\x05\xf4\xd9(\xb7\xf3\x02J\x92\xa6\xac\x86\x84\x94\xc6\x89\xa9\xfb\x8eE\xf0\n\x80-\x06\x15\xd3\xcbz\x05\xb7\xf3|\xd1\x1cgR\xc2tUdI9'X&\xce\xa1\xcc}\xbd\xfarU\xdd+\xb0\xd2\xd3>\x1a\x1f\x81sp\x01\xc7\x17\x8e\x0f\xbf\x1c_\xfet\xf6\xe1\x12~98??8\xbd\xfc\x15\xce\xde\xc2\xc1\xe9\xaf\xf0\xe7\xe3\xd3#\x1f\xc6\x7fy\x7f>\xbe\xb8\x80\xb3s\xbd\xe6\xe3\x93\xf7\xef\x8e\xc7G>\x1c\x9f\x1e\xbe\xfbpt|\xfa'\xf8\xf1\xc3%\x9c\x9e]\xc2\xbb\xe3\x93\xe3\xcb\xf1\x11\\\x9ea\xfb\xa2\xe6\xe3\xf1\x05\xab\xfbd|~\xf8\xd3\xc1\xe9\xe5\xc1\x8f\xc7\xef\x8e/\x7f\xf5\xe1\xed\xf1\xe5\xe9\xf8\xe2B\xaf\xff\xed\xd99\x1c\xc0\xfb\x83\xf3\xcb\xe3\xc3\x0f\xef\x0e\xce\xe1\xfd\x87\xf3\xf7g\x17c88=\x82\xd3\xb3\xd3\xe3\xd3\xb7\xe7\xc7\xa7\x7f\x1a\x9f\x8cO/\x038>\x85\xd33\x18\xff<>\xbd\x84\x8b\x9f\x0e\xde\xbd\xc3\x96\x0f>\\\xfetvn\xea\xfd\xe1\xd9\xfb_\xcf\x8f\xff\xf4\xd3%\xfct\xf6\xeeh|~\x01?\x8e\xe1\xdd\xf1\xc1\x8f\xef\xc6\xbc\xe5\xd3_\xe1\xf0\xdd\xc1\xf1\x89\x0fG\x07'\x07\x7fb}?\x87\xb3\xcb\x9f\xc6\xe7\x98M\xf4\xfd\x97\x9f\xc6,\xa957\xa7pp\n\x07\x87\x97\xc7g\xa7l\xcc\x87g\xa7\x97\xe7\x07\x87\x97>\\\x9e\x9d_V5\xfdr|1\xf6\xe1\xe0\xfc\xf8\x82\xcd\xde\xdb\xf3\xb3\x13\x1f\xd8R\x9c\xbdeY\x8eO\xdb\x9d>=\x1d\xf3J\xd9\xaa5\x17\xf7\xec\x1c\xdf?\\\x8c\xeb\x9e\x1e\x8d\x0f\xde\x1d\x9f\xfe\xe9\x82uH\xcd\xacC\xcdv\xe3]\x9e%`!\xf7\xa5\xf4\x02\x92\x8c\xc1g\xc4\xe3\xfc\x8a\xf3\xb5J9\x12\x97$\x8d\xc4s2\x1b\x7fn:\xf1S\xe2oAS\xc7\xdd\xd88\xea\x874Z\xb6q\x10R&AE\x04\xaa}\xf9\xab\x0e\xca\x00#dI\xa8\x12\xa6\xc1XU\xa5x\xc26<\x1a\xd0\x19\xbc\x92\xf7w\x95M\x89\xa7\xb2U,\xc1E%\xa4\xcbdA\x1a\xd2.k%|\n\x1b\xd5\xf0$\xa3ZVK\x17\xebCF>/I\xc4N\x992\xa1+\xe1\x83e\xd0\x8a\xe4VI\x97\x14\xd3\\_#o|}\xedT\xf7PUh\x99\x96\xb0\xab9ak\xe1\x94\xcbH%\xda\x00\xc1\x10\xe0h\x17\xad\xccd\xd4\xfa:\xd0G\x1d g\xe7\xaa\xd3\x96\xc6R\xefS\xaf%\xab\x9c\xec\x18\xae\x14\xe5M,7\x9e\xec\xce+*\xe4jz\xb5N\x1aZ$\xf3\xeb\xf3\xaa\xbc\x0f\xbb\x06\x9d=k\x14M\xc3\x04\xa0\xf9]%\xe0\xc4\xb7\xa6~\xe0\nidA\xb2~\"w\xa5\xbb24iu\xa1\x0f\nc\x84\x12\x9f\x90\xfb\xa2G\xe1I\xee\xa2gz\x1e\x19$T\xc1\xc2\xd0S\xd2\xe8\xa9\x8c\x9c\xeb\x86\x93\xb2\xba\xf54h6\xaay*\x90%f\xeb\x06\xf5Y\x0b\xa5\xea\xc9\xd0x\x8cm\x03\ntN\xd5\xdd\n\xa8\x8b\xa2\x85G\xaf\xee\x83\xd9~i\x8e\x0c\xa35\xe5\xe2\xba\x97\x8bw\xb3F\xa2\x90\xf9\x8a\xb7\x04-\xd6\xd5\x94\xb6\xf7-\xf5\xf9\xea\xf9\x90[s|E\xdd\x96\x11?\x06\x9a\x13\\\x88O\x86\xd5\xa3\x8d\xd5\xa3m8\xa3ze\xbc\xd7\xbc\xc2f:\x0f,l\xec\xa0!d%\x1bMhA1\xcd\x80\x94\xcf=\x11Oq\x10\xbf|\x1f\xa5K\x9b\x00\xbb\xbd\xf4D\x89\x92\xc4\xd6\xd6b\x94\x88\xcc\xba\x01u\xb4\xd4{qZ'W(\x11n\xe7\xcf\xb8>\xba\x1et\x9a=\xea\x8e\xa7\x86\x1do\x0d7,Q6\x9d\xe4\x96\xbdc\x0c\xb9\x94\x08\xffqO\x9e\x98\xa6\x85\xf1\xf7[\xbb\\\xc6W[\x08M\xf2+6\xbcb\x92_a<\xf7\xc3\xa4\x88ViX\\90\x92\xa9\x04\xb3\xf9\x90 \x97\x0e;\x08P\xe2\xa3!\x00\xaa)\n\xac!\xf6#\xe56ih\x9f(\xcc\xd3D\xda\xd0\xf2\x0bR\x96\xe1LV!\xdf\xf6\xea/C+*i\x18}\x12\xd5\xf0\xdf{2\xd5P\x85\x14\xc57w\x04\x03\xf0 \x06\x922\xde\x06\xe1m\xca\xe4\xad\xf8\xc2-?\x84\x1f_\xe0~\xd5\xf2\xecn\x91\xafJ\xc7\x83Mpp\xfe\x1f\xacP\xf8\xfd+\xf35\xe3\x0bc\xc8#\x96n\xf2|\xcc\xd2\xf5k\x80\x95H\x7f\xed\x99\xcc'K\xbb\xd8\xc9\xa4\x10\x8d\xda8J\x84\xbb\x1d\xae\xf0j\xd0\x9d\xe2zS\xdc\x19? \x0b\xd7{\x03\x9b\x9b\x14~\x80\xcc\xa8S,g\xa2\x1do \xa4\xec\xbc$\xd4-0\xfeW1\xd9\xbd\xb2\xe9\xed\xd6\xbf\x14\xa5'\xde\x07\x86\xac\xfdF\xb2P\x8f\xc2`\x1ceS\x15\x9em\x94f\xe2{\xe9\xf9\xe0\x9c\x84K\x9b\x10x\x90V\xbc\"Un\x85\xd0\x13\x10e\xf1\xea\xf8\xc2\"\xd2|\xd1\x12\x81\n\x88\xda\xd5E\xf4\xa5H\x7fi\x84\xb4\xd4\x0ei\xc2< \x0ei\xc8\xad\x140\x1a\x99\xd1\xca\xaaL\xfe\xce\xf1\x05\xfbaX\xf4\xd4\xb0\xe8\xb9\xdfH\xae\x16=i\xa6\xf3E\x0f\x9b\x89|\xd1W\xcdD\xbe\xe8es\xd1S\xe3\xf2\xa8C\x1e\xacN\xdb\xf0\x9b\xb2\xb5\xcb\x1d\xa7\xd0\xca\x9c\x98\xeb\xdcK\x1f$\x9b\x9b\x19\xfc\x00\xc5\x1b\x0f\xc8$\x87M\xc0\xf81\xed\xb05\x92o\xd3\xe6l08\xbdx\xaa#\x1c\xa1\xf2\xfcZ\x07\x1bcL6\xa3\xaaS\x0b\xda\xba\x84\xc4m\x18\x0c\xd5\xe0\x8a]\xec\xb9\x8a\xb1\x90,@B\\Q\x1e(\xdc\x90\x1b\xb6[E\xc7Z\x8dj\x10\xb8V\xbe\xaf\xba\x03\x1dF\x83\x9a\xf7\xf4\xea\xbe\x8b`>%\x9e\xebkcZ\x83\xf6t'\x9a\x97\x8c\xf6\x14'\x03\x16\x0eq\xd37\xaa\xb6\x08u\xc7A\xab\x99\xb3\xaf<\xe8L\x15E\x15\xd56\xb8\x87\x92\x8dU;\xbd\xd9\x9ey)\x06!\xed\x0e\x1b\xb1z\x95\x9e\xe9\xab\x015\xf2m!e\x90\xbaB\x16\x8e\x08\xffl\xd0 \xcbcry\xb7D\xd2\xc9d\xfe\x88\xf7Af:\x92;\xa4\xc7zH\xa3\x1e\x83\xe9%\xdfW8\xbb\xd5\xd4\xec\xf1\xab&\x19t^\xb0&&\xbf\xe0l\x1e\xdd\x15\xec\xc3*HJ-7\xb2\xd4\x9a\xde{{\xfeAgPv\x9f=\xf7\xaa\xcb\xd5!z7\xafwv^\xee\xbe~\xfd\xf4\xfb\xe7/\x9f\xef\xbc~\xbd\xfbP6\xc5\xe4\xbf\x1d\xe7\xf1\x0f\x8c(\xc7_\xff\x81\xbe\xf1\xb93\x02\x02?\xec)\xa2\xb0\xfek\xb1{\xf5\xa6\x1b1I\xdc\xde\xba\xd4\xed\xe9\xceC\x80\xfb\xe9K\x9d\xc0\x04\x01\xdd\xdf\x08\xc1l\x13\xe4\x8f\x00\xc1\xd5NH\x1a\x10\x8cU\xa3\xb9cDJ\x83\xc5\x9env\xd0\xca\x00\x9d\xf7\xe0 \xe5]u\xeb\x05\xf9\xdb*)H\xe3\xc5uV4I\x1d/`\x03\xb3xb\x01U\xae\xfc\xe5\x8b\xdc\x8e7 \xdeD6^du\xc6zz\x02[}u=\xfbf\\=`3v(W\x99\xaf\xd6[FT\x0c\x04\xb6?\x06_>N\xdc\xfd\xd1\xe4\xffL>^]}\xf7\xc5\x9d8\xbf\xbf\xf2\xdc\xfd\x91\xbb\xbf\xf1q\xd7\x9b\xfc\x9f\x8f\x1f\xaf\xbe|\xfc\x18x\xdf\xed\x7f\xdc\xf5>\xea\x81Yx\x00\x98\x8f\xb7\xdf\xfd{oH\x07\x8b!S\xc3\x8eI\x17\x8bV\x92t\x01\x98F\"k\xc3\xad\xb0\xc7\xc6\x1ed\x08\xd4%R1JB\x158B\xa64\xdc\x0em\xa0F .?\x8f\x05\xc2\xa3\xc8n$\xea\x9b,A\xf9\xf6H\xa4\xd3<\xf7^\x86\x0e\xf7BD\xf7\xa4\x1f\xcd\xf2\"A\x99pm\xd3\xcaE\x17\xf5\xc1\xb9\xbe&\xe5I\x1e\xafR\xe2\xe8\x1a B\x1bAU\x08AC\x9b\x05Y\xe4\xc9\xdfI|\x11.\x96)y[\xe4\x8b\x8bhN\x16\xa1\x90*\xf0\x8f\x87\xa8,\xf8\x97\x93w\xe3\xcf\x98\x8d\xb3\x10\xf8\xf3/\x8bT+\x94dSR(\xefe\xbbfq\x00\x824\x81i\xd4\xac(z(\xec\x98\x89\x1b\x0b\xdd\xcc}\xf1\xfd\x0b\xcf\xb0\x0f\xf0\xd3\x8b\xd7\x9e\x91\x97\n\xed\xeb\x83\xa0\x10\xd4\xf3(T\xf5\xdaXKFF\xd0\xddZ\xfd\xae\xfdk-|\x19\xb6+\xe1\xa2\x99\xe1qm\xa5,\xa7\x95\xc7\x10F\x8bg\xbd&\x8b0I\xef\xd1\xc2\xaa$\xc5\x1f _\x8c \xca\x17\x83\xda\x12\xfdb,(\xd9\xa2\xc9\x828\xc3[t\xe5\xf5\x95\x17\xd0\xfc\xf8\xe2L\xa8\x84\x19\xf8\x02\x83<\x05\xd1\xc4\xf0\xb6\x06\xc5u\xe3\x95^O\xd3<\xa4\x8f\\u\x92Q2{\xf4\x0e\x0bT\xd8G\xff\x83\xb2\xca*\xf6\x94\xb88\x10 \x8dW\xad\xf2\xa5\xdd~\x13\xdc\xdb\xbcLw'\xa4\xcc\x82mt\x17\x9d\x0frr%\x99\xdeyF\xff3 \xc4f4h3a\xf2AO6\xc14/\x16\xa1\x812\x02\x81\x12V\x13\xd4O\xbcv`\x13\xb8\xa9\xcc\xca\x18\xd5S\xc2%\xf6.)\xdf\xae\xb2\xc8s\x13\xc6c%\\O\xda\xf9\x90}\xca\xf2\xdb\x0c\xb5 \x85K\x1b\xec]\xd7\xd4\xa46\\Xa%\xcb\x0d\x93<2[7\x89\x7f\x00\xa4\xa3\x15U\xd6\xfa\x8ep\xf7\n\xf6\x9b\xaf\xa3\x96)\xa8|r\xd3RP\xcbR \x99\xd9\xb1\x14\xca\x97\"P\xe1\x8035V\xb3Vg\xaa9\xef\x1c[\x16\x00m\xce\xb26\x844\x93\xcf\xa2\xe3\xdb\x0c\xc9\xb0\xcf\x0bC\xc0f\xf60\x1c6\xc3;j\xf3\xf7\x1b\xfc\xbe,\xc841x\xb4b\xcfuU\x03F\xab5g\xba\xe5S\x9b\xad\x16\xe6\xef\xe3\x8aG\xb6\x1c\xe0a\xc7\x01\xceN\x90\xd4C\xa8\xfa\x97\x9c\xe2a\xdf)\xee\xb2Y\xbd\xc3K\xff,\xa7\xe1\x8cM\x8e\xc3\xcd\xa5\xdc\x1b\xd8\x87\x1bF\x96\x8f\xd0>\x16u\x01\xee|\xb8\xe6\xde\xd2\x17\x13\xf6\xdd\xf9\xbcH\xb3r\xc4\xce\x8e\x1b\x96 _\xd1_\xc1\xb5\x85\xc0Q\x0f\x05\xc48\x91\x0d\xf9\xb2\xdc\x11\x83\x07\xd8\x03\xfe\xff\xcb\x17\x98qK\x10\x9f\xa7HU\x0d\xe5\x85\xe5\xe1P\x023\x11\xa9>\xae\x88\xbf\xf5$\x93nn\x9b'\x04\x9e\x0d\xd3\x81ns\xe5\x13\xc9\x1d\xc8\xfd\xb6\xb2\xca\x85\xdf^v\"\xe4V\x9d\xa6\xd6\xf94g\xad\xcf\xef\xdd\xba|\xb6\xac\x8b\xfb\x8d\x0bs\xaf\xf6E\xaeV\xa6\x01\xe4\xb6U;\x91M\xfd\x85\x99\xdc\xee!\xa7\x0f\x199\xad\xec\x19\xb4$\x95\x1b\xf0\xc2N\x9d\xb2\xbe]\xe8q\n\x0e9\xde\xd8\xb8\x98\x1c*\x84\xf7\x97/\xb0T?\xd4$7#\xc6-\xd3\xd5h\x87\x95\xe2H\xa2\xfa){(\xde\x03\x06\xb3h\xa9\xd2\xb5l\xf2a\x03\xff\xd4R\xbc\xc3\xba\x90Jc\x9d\xad\xde&;Wv\x96E}\x0ed\xff:\x0fm\xfd9\x93\xa5\x04D\xd91\xbd|\x16\x93j\xd4\x12\x1d\x1e^UG\x16\x92M\x07l\x04\x07\xd04\xb5\x9dN\x0e\x91\xef\xc1\xff\xcdOg,\xfd\x8c%~b\x7fJ\x9c\x8b\xee\x85\xf9\xdaw\x80\xc9\xa7\xd9\xd9=hw\xbe\xe1\xf3H\x9dA\x8d\x18\x94\x03p\x1byx\xba\x05\xce\xd5\x87\xad\xfa{d\x99.\x86\x15h\x82\xc7{Tw\xe5;\x05\xd1\xa8pa\xf0^\xa2[\x8e\x04\xde\xf7L[\x17j\x94\xcc\xa4h\xa8\x0fQ7\xa9\xcd\x118\x07\xd9\x1d\x9d\xa3\x0dT\x98\xc1\x0dAc7\x0bU\x80\xe1Q\x86\x9e\x08zC\xa5\x8doeH\xee\x11\xcf\x99\x018R\xcc\xdc\xb8 \xffSv\xd4W,\x15&\xcd\xd9\xf9\xdbB\xff\xb7lQo9WV\xa2]\xb8Xa\xc6\xe1M\xcc}\xb7\xf6\xfb\xab\x0fcV\xd1X\xef\xfaW\xe3=\xc8\xd4x\x89'\x05\x8e\x11\xff\xda\x84R\x86\x0d\xb3\x86\x9c+\x97x\xc3s3\x93\x19lL\xa24\x94\x81{M~\x0b\x92,\xc6\xc0*\xceG\xaa\x85c\xd3\xaf\xe1\x00\xcda;.\xa5X\x7f\x92\xba?\xd3\xbe\x1b.-\x7f\xda\xaf&Q\xcd][t\xcf\xd5\xf0\xc8\x9aq\x87\x95V\x9ex\x15\x87\x05O[\x84\x9f\xabxrU\xc6Fb\x85\x1b\x95 hw\xc1`\xd7$\x85\"2OCl\xd8YY~?\x8ds\xd5\xd8\xa0\xbb\xe2\xc4Z\xb1\xeaz\xc5\xb0\xd2\x0dGY>d\x01\x06W\x19/\x12\xca\xdd\xdcc\x9a\x12\xac\xa3\x9ayy\xbb\xd8\xf8\xaaMz\x9dG\xac\xfeI\xf3\xfb\xaeV\xbe$z\x0e\xbb\xd4\x03\xa9&\xe5\x06\x9b*\xc6(D\x06\xa8\x10\xbe\xebL\x1e\x152X\xacJ\xca\xd0g\x08<\x1e\xf2\x9a\x88[)\x8b\x1b\x05#\\\x11\x0eo\xf5\xcc6GD\x16 \xed\xb7\x9f\xe7\xfe\x8f|X\xf9P\xfa`\xf0\xc4\xac\x83\xb9\xabm\x03\x0c!'\"\xe5\n+\x1c$\xc4\xd4l\x01~F\x05'\xb7\x9d\xce\xd5\xd2\xda\xe9\xd2\xd0\xceDo\xb1\x9e\xa1\x8b#U^\xe3\xa9\xc6oc^5\x9f|\x03\xcd\xc3F\x1f eZ\xbe.\xbf\xff\x90E\xe1j6\xa7>\xac\xb2rI\xa2d\x9a\x90\xb8\x1a\x1bv-\x00\xf7\xf7\xb0\x89\x0e\xa2\x1d\xcf\xe4.\x84\xb7\x17\x05\"j5\xa7\xde\xa3&\xdak\xcdq\x82^\xa2\xd4\x19\x98\x90+\xbb\x92\x05\xd7\xc2\xc8<\x0f\xca\xdb\x04UXt9\x97i\xca\xa2\xb0$\xb0k\x8e\xf4/\\\xb0\xa2[t3\xd5\x82>\xa4\xdb\x9f\xb0\xd2\xa7\xbd\x95\xfa\xcdu\xba\x7f\x13\xcf\xee\xd9\x84\xfa\xf6\xf4\x9e\x0d\xca\x9b\x7fc\x99UE\xd4\xf7[\xe1\xb1\xfd\x18.\x97\xe9\x9d\xe8\xe0J\xd7{\xad\x84\xf4\xb9k\n\\\x83,\xd4\xfd\x1a\xc4C/\xc5\xeb-n\xda\xe2y\x95^t\xc9C4r\xc7\xe5Pnnz\x90N\xca+\xad\x8bF\xfc\xa3j\x954\xb1L\x18\xc7J\xcc\xd0N\xe5!\xb6\xe3\xc26$oX\xfc\xce\xa4\xb2\xda\x1aYV\xa7^\x17\x96\xecAU\x0d<\x93\x91[5\x02)~cx\xd3u\x94/\x0e\xfa\xff(\\\x1a\xc8.y(\x90\xaf:8\x02\xaaU\x94\x04\x08/\xa5\x9f\xf6\xae\x074\x87$\x8b\n\xc2\x90\x0d\xfa\xb7\x08\x9c\xd6\x92J\xe4\xea\x9b\xe9/\xd9\x7fZ\x84\x11\x1e\x82\x8d\x04\x0cL\xd7u^\xe7h\xe6\x00\x1b`\x15\xb9&<\xfa\x8du5\xd9\xc3\x03\x88d\x12\x83\xee\x83[\xfd\xdec\x8c\x8dyU\xd0\x08[F\xd8J8M\xf0\xad\xeb\xd4\xbf\x13\xfb\xb7\xdaA\x9a\x0e\xe3\xad\xd6F\x07\x81\xad\xed\xd1\xb3\x156:\xc6\\\x15\xe5\x9ci\xeb\x8ax_g\xf4\xd1\x87\x98~\xe6>y\xd2\xb9/\xda]2\xb7f\x05t\x8a\x0e\xc8\x1a#\xd6\x97G8\x02\x90K\xd8\x9eh\xa3\x0d\xb7J+\x19\x8a\xe8\x8dh\xf0#cC\xaa\x0b\x0eF\x9e\xa6\xb0\xf04\x96\x93!\xb3\xa1\x03\x83\xc6\x04N\xd0\x9bjo\xbc\xb1W:\xa9\xf6\xcc\x16\xb4\xf8\x0e1\x13]\xcbh\x03\xeat\x10,\x9b\xc8\xd26\x8d\xc4\xdd\xf1\xea\xdbx\xbfE\xfc\x19(?I\xe3\xc3H\x8b\x16e\xea\xeba\xbe\xca\xba\x05\x02:\xbboS\xae\xa0\xed\x85m\xc3YRy\x94\x14\xd3`q\xa0R\x87+\x96\x16\x9c\xfd\xf8F\xe3F\xec#4\x1c\xe6\x95\xbaJ\xa3T\xbfI\x80n\x0cD5\x0f4\x99\xfbl\xe7{\xcf\x0b.hA\xc2\x85\xa0H\x82s\x12\xc6\"\x02\x1b\xbe\xffR$T\xbcg\xee\xee\xeb\xefQ\x80y\xb4Z\xa6\xe437\x80\xe3)\x97E\x98\x95\xd3\xbcX\xf0\x8aww0\xf5}X\x96\x97\xf3\"_\xcd\xe6<\xf3\x8b\xe7\x83LMz\x1d\x01\xf28_&T,\xdc9>\xdf\xf1l\xf4\x9fA\xd7\x1e481II\x12\xc6|\xa1|\x84\x07\xaa\xe0\xa7PF\x8b\xbbf\xd24\xc9\x92f\xc0E\xdb9\xbd\xd19\x07\xfa#-\x0f\x08o\xd4~\xb6\x93F\xaf\xec\xf9\x04R*\x8c\xe6\xfb\xea\xb3\x16^d\nd\xe0o\xc2\xc8 \x82P\x1f\x1a,\xb9\x93\xc5\xe8fk\x8b\xf1y\x18v\x1d+`3h-k\xbe\x07\x02\xac1\xca\x8bO$>'\x7f[\x91\x92\x96o\x0b\xf4\xe9mJ\x96\x8bDP/\xcdPlO\xd3\xdb\x92\xcfW\xee\x91\xa5\xf5\xedk\xc7\xeeV\xb7\xd3]\x9b\x0fYq\x11\xc6\x06\x0dn\x8a\xfc\xb6\xe4\xd4\xcb\xc4Y\xef\x04\xbb;\x8e\x0f\xec\xc7\xeb\xc0\xb9\xaa]\x81\x04kR\x94I^y\xf9\xf0\xe1{\x8fk\xd2\n{\xda\x04\x87w\x99\xe8KpW\xed\xd3\x0b\x1a\xa2-\xfc\xac\xdd\x9dT\xd8\xad\xbc\xd0\x8e\x954H\xb29)\x12\x81\x15^\xed\x1aX\xaa\xc8h-\x02(|\x12z\xa6#\xdc\xe0\xcf\x06\x99IL\x05\xfe\xd1=\x0e\x80\xd4uvw\x9f\xefJG6\xed,\\u\xebC\x92\xd1W(i\x025`\x8d\xd7R1e\x03\x98\xfb\xa8\xa1\xc5\x1a}iE\x0d\x0b,l\xf983bg\x10\"6\xee\x82\x8a\xa3C\x0420\x84Q\x05e\x1fSU\xf6k \xd5\x11\x99\xf0\x8b\x8e\x93\xd9\x15\xfc\xeaz\x7f\xea/\x10\x19z\xb7\x0f\xbb/`\x04\xbb/\x9e\xbdzn\x99\x85FW\xd0\xaa\xf4\xcb\x17A\x0c\xe7\xb0\x0f9\x8c\xc4\\\xa4\xf5\x87\x94Q$)\x8c \xf2\xcd\x95\xd4\xb1~\xdc\xf6w\xafF\xe6az\x18\xa62,\xa7/\x0f\x02\x12\x1f\x15a\x92\xa9\x89\x1c\xe7i)\xcdr\xfclh\xa6\xc5\xa4\xa4E~'\x12\xcd+\x82\xf1\xf99\x7fE\x82\x98Dy,\xa2\xc9\xd8N\xaaF\x1eVxZ\xb5\x86B\xb2q\x16\xe5\xa2\xb7\xa4\x95\xf6\xe5\x0b8+:}%\xe5I*\x13\x87 l\xc5\xb5\xa1rD\xab\xe4)\xef\xb2HJL\xd8\xfb\x0dn\xe5\xf7\xdcZW+\x9cg\xa8\xff\xd2\xab\xb8\x0b\xedC\xb3\xef\xc4\xe4A\xdc\xaeoU\xec\xd8\xad\x84RpY\xf4]\x16u\xe7\xe3\x81\xe0\xb0\xe3\xd1\x8d\xfd@d\x14c\xff\xa8\xe4C\xb4\xb9%\xb2\x81\x8a\xc6 \x15\x7f \xf7\x1eII\xe6+\xbf\xd9\"X\x1b\xf9\x8a\x871\xf5\x0c\xc4\x87\x99\xa6\xd2\x9f\xad-\xe5x\xf71r\x80[\x9fJn\xeeC\xe1\xf9\xca9\xe5^\x08\xa6\xdco\xad\x03\x97\x9br\xb9\xa8\x14\xa9\x12\xc1\xd8\xf3+,V\x19\xe3\x15\xdc\xdc-\x1e\\\x81\x0f\x17\x1cT\xecZ(\xe89\x8aO\x00es\xd0A\\\xf5+\xf8\xe0\xad\x01\xec\xc1\xd8\xd5YD\xfd \xf1\xcc\x90{\x07\x7f\xb7\xb6 C\xde2\xb9\xa2dX\xea-gB}\x8cfZ\xba\xd78\xcd\xfcj4gsv\xed*\xef\xf6\x91\x1b\xbfXi!\x05\x01\xa8@Y'\n\xf8kl\xfa\xba\xdb\x8d\xfciX\xd2\x1f\xbb2T`\xa6\xd4\x88\x8a\xcem$\xaa\x03\xc2\xae\xb9\x03\x92\xdf\xdai`-\x8d<\xcc\xc8-\x84\xfcf\xb11\x016\xba\xe0\xce\xbc\xad\xb9\xe6s\x930\xd8p\xe7\xfc\x12\xec\x8ew\x00\x8d\xbe\xd9\x8f\x06-\xe05\x1c\xa0\xdeY|\x9f2n\xf6V#\xfaX~N\xa6(\xe1\xa2ok\x0e\x0e7\x08\x9e\x94f}\x0c\xbe\x86\xca\xc5\x87\xc4\xcb\xe2\x8b\xed\"A|^\xeb%\xd7u\xd1\xb5\xbd\xac8\x01\x95\xc22e\xaf\xfej/\x8eg\xb4R\x98\xbf\xef\xc9/\x9e\xe7\xc3T\xb9-\x1e\xb4\xa67M\xa4\xc8E\xe9\xc6k\x03\x15\xec\x19\xfaP\xf6F(_\x05>\xc7\xcb\x03\xe5\\\xc4\xa8+r\xa6\x18\xe6\xa4\xf2$\xe4a\x87\xf9\x17\x97\xb7^\x7fSk\xd9\x1d4\x9ake4\xa6Ad\xd0\x17\xf0Q>\"\x06\xa3<\x83\x9e<\x01\xaa\x10C\xb8\x06-\xe2Hb\xe4\x98\xa59\x06,\xfc\xd5\x15\x07\x84\xc68\x16n\x8d\xbb\x07\x8d\xf3\xd6\xdawj\xa4?\x0c\xb6\x0c\xeb\xca\xb1\xb2\x86:\xcc\xb2\xa0j\xf9PD\xcfo#\xd8\xc9g\x9b\xbf\x8a\xf87b&;\xc1\x91\x8b\xcd\xcd5\xf4\x8a\x0e\x83AtZi@l\xe6\x93(\xa9e\x05\xe6\x0c\x95R\xf4\x8a\xa3\xcd\x92\xcf\x1b:\xfd\xcb\xf1\xc6\x82k=\xa1w \xbc'\xc3\x1c\xbb2\xd0'\xce\x86\x0f+\xd8\xdc3\xc9\xd3\xd8\x93\x07a\x9a\xf2\x83\xa0\xe4^\xd8\xe4\xee\xe3;\xa6\xf2\x92\xe6\x83\xe30\xd2\x82\x1f\x00Mx\xd9\xdc\xc4\xac\x1dG\n'I\x18\xb9b\x11\x0b$\xa2\xaf\x89*\xe7\xf1\xecb\x04qN`?l\xe7L\x1b\xd6\xbb(\x08)&\xee\x94\xc8T\x9c|\x10\xcdW\x99\x85\xd1\x92\x0f\xea\x0b\x05DP\xf6\xddy\xb99r\xbf\x88\x87\xc1}\xb5B\xbb\x88\x99\x1a\xdc\x1c\x8c \xad\x16-\xf5\x19\x036\xd5\xc0\xc1\x0b\xae\n\xb9\xa3\x81S\xdau\xf4\xca\x83\xbd\xa6\xb9\xf9\x1e\xb2\xd4ZW\xa9\x87\x0bhn\xa4Z\xb4\xc8H^\x86\x06fM\x07\x9d\xc2\xa7\\\x8f\xb4\xbc:\x85*\xf1\x96\xb6\x07xx\xf0\xc9\xd5\x1b o<6\x0c\xb4=\x92\xa28\x9c6\xebJk\xe1\xe9\x0c\xc2\xca>A~\xb7\x171\xb3s$e\x1e|p\xf8pZ.\x92\xf4gF\xe8\x08\x0d\xad\x84\xc8\xb5\xdbI\xa3\xfe\xa8\xb7{\xd5\xd4\x1b\xdc\xda\xa8\xcfW\x1f\x1c\x8d\xe9\xe6}\x85\xa4\xacE\xbfBYI\xcbX//\xe3nH\x18\x07\x8e\x0f\xce\xd1\xf8\xfd\xce\xce\xce3\x8b\x8f3ho\xf0*\xb9\xd7\xfd\x99\x85E\x10\xb1\xb4\x9e<\x11\xbf\x82yX\x1e\x0b~\x0bl\xa1C\xa5\x9b\xe8z\x99&\xed\xd2Wh(\x07{\x03s\xfb\x16X\xb8\xf3\x0d=\xeb\x08\xe0\xd5/O\x92Z\x90\x1bsU\xdf\x94\xd4\xfc&\xdb\xed\x9c\xe3\x92\x0e\xa6\x9a\xbc\xa4\xc2\x8f\xce\xfaN\xcb\xaf\x88\x85\xe6\xbd\xe2;y\xce5\"\x9c\xb4\xee\xe5}P\x15G\x97\xc9\x92\xf4a\x07.\x01h\x1e4uP\x90\xc30\xcbr\n\xac\"\x1f\xd8\xafB\xdcp\xea\xac\x88\xd6r[$i\xbf\xa3C\xb2\x9e\x1b\xf0\x1b\x18s\xbb\x8d\xfd\x86\xc1#7\x88\x0b\x85\x8d\\\xa5\xab\xd01:W\xa1_V\xae8\xdd\x02\x17\xb4P'4\xb6\x1fi+$\x0d\x94\xe2\xdc\xed\xaa;L\xf0**Y\x06\xd3\"_\xe8\xf1\xe3\x00DH\x05\xcb\x16D\"\x85\xebWpT\x8dT\x18\xe3\x0b\xf6\xf1U\"@FmsEX\xbc\xe1\xd1$\xd3\xcd\xdak;\x86\xac\xaa}\xe1\xf9\x90\x0b\xb9\xfb\xfe\xb0\xb3[R\x03\n\xc8\xf0\xa5\x0f\xa7\x94\x14@\xb2\xd8\x16d\xd3D\xdd(G\xb4\xc5y\x86\xd8\x8b\x19\x9e\xdc\xab\x16\xe7m\xe7\xd2A\xb9\x9e1Y-\xc9'\xb4\\$\x80B\xdc\xd4\xa4\xf2>\xf7\nN\x1az\x80'\xe1\x1dn\x15>\x11\x98\x1bQ\x0fF'+Q_\xc0\xf1\x8c\xd1\xa3\xb9,A\xb1\xa3\xc989\xd4\xbc\x8er\x0dm\x1eg\xeb0Mb\xc8\xf2l\x8bW\xbb-N\x1a\xe4s\x1c\x0f\x95\xc5\xb9/\x8e\xe6\xbc\x87\xcdy/xJ.\xf9\xd0v\x10\x10\xb9\x069\x97\x99\xf2\x00\xd2n\xde$\xc0B\xc3\xde\xaf\xa4A\xb6\xf5AU\xae\xdek|S\xd5}\x078\xd1o\xf4\x8c\xd7Axw#\x17E\x8b[\x82{Jl_\xda\xe1\xc2G>F\xf2H}\xbeVz\x18\xf6\x8a\n\xee\xb2\xa4\xda\xa0\x8c\x88\xcc\x95\x0d\xcf\x15\x03,\xce#\xcc|\x9e\x94F\x18\xf8\xce\xc2\x18\xb9@>\x95\xd8j\xd3\xaa\x1b\xc9\xeaF\x0b\xb8:8\x12m\xde\x0c\x9a\xcb \xed\xfd\xa6\xeck\xa7\xc3GR-\x18\xc4\xed\xc1\x05\x0c}p\xc3=\xb6\x19\xd8Z\xfb\xfc\xdb\xb8\xe0n`\xc3\x1d7\x02\xc3\xcd\xbb\xfaH\xb1\xc2\x08\xf4P\x84\xda\x83\x07\xce\x08\xb2\x1eY\x85\x90<\x8c \xe9\xce\xc8v:\x8fgo\x07M\x1f-\x86S)\xca1O\xc3\xc8\xc8\xe4\x1b\xf3Z\x85<\x9b{\xd0vs\x06\xb5\xa4G\x95\x94\xacj\xfc\xd1\x89\x9e\xcb.\x8c\xb5\xf2A\xa2\x8cvL\xa0& \xc3\xa0j\x10\xf1\xa4\x11\xee\x1c\x1a77\xbb\xea^eCjo\xf0l\xcdV\xda3 \x1b\x16H\x9e\xbflm\xf9\xca\xad(:\x82\xac\xef\xcb\x14\xa9\x07\xbe\x19o\xcf\xda\x02\x13\xbc=\x93$q'\x11X\x12z\xd4\xba1\xef\xa6\x95\xd0\xd6\xd2\xe2\"O\xb8\x99\xa2\xf9\xbb\xfc\x96\x14\x87a\xc9\x8d,6\xdc\x893'\x9f\x19w$\xee\xdd\xd9\xff-\xfc\x11\x96Q\x92\xb0\x1f7I\x16\x16w\xf8+,\xc9\x8b\xe7\x98+*\x9f\x8a\xff[OE\xb1\xdd\x17\xe8k\x17k\x90\xbf\x8b\xf0VQ3r l\x82\xe3xZ?P\xcf\xa8\xb2\n\xd0Ng\xe9`\xb2\xde\xf3\xe8d\xb2G]W\x83+\x83\xf2\x81I3\xd7\xca&5X\xe6[\x93\xda\x89\x91\x83&U\x9c\x83\x91\x91\xe2F\xae\xba\x97\x93\xee\x18W\xe3\x80h\xef\xdd\xe6\xe8\xbc&\x84]\xdf\x87\xcf\xc8\\\x85J\x15\xd7C\x1e\xe3\xc4\x19\xb1\x96,\x96)Y\x90\x8c\x92\xb8\x87\xb5\xa9/\xe7\xb8h\\\xfdF\xb2x`g\xaa\xbb\x8c!{\xdb\x1a\x90 \xa9\x02\xc2\x055\xe2\xeeW\x11\xbd\xdf\x8b\x99\xa8\xcd\xbf\xa1\xe9$\x83{\xa8\xaf\xee\xa8\xa5\xcc\xabP\xf1MQ\xab\xb0\xc8\xcbc\x8e\xe2p\x87\x16R6\xcb\xd8\xad\x06\xd2\x192S\x80\x07q\xad\x1f\xb4S 7\xfdJX]\xd5\xb9\xaf\xd2\xb2\x19\xbf \xcc\xb3\x88TB\xb7\x0e\xd2\x8d\xd6*G;\xbe\xa2\x9a\xd5\x16Q\x83r\xa8\x14-Fe\xe0\x16\xacT\x97\x8c\xdb\xee^\xdbJY-\xd3\xd5v\xa5\x84\xae#\x14\xd1\x81\xf6\xd8\xda\xdb\xbcl\xf4\xc7\xca\xe7Z\x9aw;\xdb\xc7\xd8\x8d\xf7\xdc\xf9\xf5%\xf7Z\xfe\xd6\xb6\xe9*S\xf3ToZ\xae:O/\xbf\xcb%%Y\xecz>\xd0V\x0c\xf8\xdf\xd5=U\x03\n~\xcf\xa0\xd4}\xb6\xf3\xcac\xc7\xe1\xf1bA\xe2$\xa4\x04\x13w\x87\x85\x0ex\x8c(\x83F\x04\xf2\xbbf\xe7\xbf\xb9\x1b\x99\xfb\xe2\xf5\x8e\xe7z\x95\xdbN\xc6-a\x98\xc8\x17\xafw\xbfa\xa8\xeb\xcam\xfc\xcb\x1ds\xf0\x84\x17\xa6\x88?\x99\xfb\xea\xa9!\x86\x97n]-\x0e\xf6f\xc6\x95)jSWx\xa0R*E\x867\x9a\xff\xc5\xb4\xa1.y\xdf\x05\\W^\x1b\"_u\xa5\x0f\xb51\xa2\x12\x9f!\xb4\x98W6\xcb\xe1\x85@\x86\xc1W\xb9A\xb0W\x9b\xbaF\x9a\x93\x05~F\xa0sI\xf4p\x11y\"\xce]\x04\x7f\xd8\x83\x1d\xc6&\xb0\xb4\x914H\x96vN[\x90\xba\xa5\x1by\xde\x1b\xe0a\xee`s\xd3p\x1d\x85z>\xaa\x94\x95rq\xc2T\x1c\x8d\x13z\xe5C\xe1N\xbdz\x8c\x1a\xbf&R\x15w\xc9\xdf\x00\xcd\x0d#\x89\xd6i$\x05\x95Z\x07\x86\x11\xb5&\xd1\x1b1\xd3\x8bHaJ\xc2\xc4nD\n\x8aT\xb8\xf1\xe1+\x97\x12tw\xaa\x06,\x967\xce#\\r\x11\xc0\xe1\x92|\xa6\xa7yL\\\xc7\xe9p\x1cn\xd0\x00QT\xaf\x06\xdc\xaf \x83\xd3\xc1\xe6{\xf2\x80\xe7\x97\xeb\xdc=\x16\xb5\x9d\xdfC\xfc_f\xfd\xfe/\xb11\xe3W\xb3D\x05\xad\xd6\x9a\xe4\x94E\x8e[;Z\"B\xf3\xa3\xca\x8f'8\xd1c\xd0\xc8\x077l\x1e\xc4!\xe5\xe1|\xf6`s3\x81\xff\x80\xa7\\\xdd\x01k\x0b\xcay2\xa5.z\xa1\x10\xe2\x17ix-(\\6\x82 \xad\x96qH\xc9\xbb\xf0\x8e\xcd\xf3\x00*\xd7@\xb2cD\x0f\x83\x80u\x19\xde\xa5y\x18w\x84\xfb\xa9;\xf06I)\xe9>\xe5{:`\x10\xc9\x0e\xeb@9\xcfo\xfb\xc9C\xc6\xa0\xb6|B\xf5\xf8>\xe7\xc1\xb4\x94\x04#UE*\x17\xb0\xba\xfby\x06\xc5\xb6\xe1\xae:\x86ke\x1b\xb3\xd9\xc8\x14\xbf\x8e=l\x16\xb2\x91\xe1.\xc5f]\x88s\x17\xcd\xc3lF\x84UW\xff\x0c\xdes\xfe\xda\xbe\xe3\x1d\xe7\x11\xa70|\xe4)\\\xe41\xb9\xd7\x0c\x9a\xb8/c\xd0\xae\xf6\x06vR\xdc\xb1\xd7|\xf7\\\xf37\xa7\xcd\x9f\xb5\x91\x81Vr\x8a\x1b\xcfi\xb3p:Z\xd1\xca\xb1\xc1:m~\xae\xc2J2;\x83+\xee\xa2\xf2\xbf\x1ea\xe2\xf5mH\xc9\x8fd\x9a\x17d\xfc\x99D+\x14l\xd2 \n3\xf1\x8a~.y\"k\x0cOR%m\x1e\x96?\xe5\xe2\x12\xa6\xfa\xfeKB\xe7'\x84\xf2Y[\x86E\xb8 \x94\x14\xe6\xd4\xe3,JW%\xab\x94P\x9ad\xb3\xb7ya.\xf6\xe3\xddqL2\x9a\xd0;\xfc\x1e\xa6i~{Y\xdc\x1d\xd3\xb3\x15\x95\x85\x16\xec\xa8\xafn\x0ddj\xa1\xbf\x96\xcb<+\x89\xb9P\xa9\x16)\x1b\x05\xf8\x1b\x0dg3\x12\x9f\xc9\xb1\x96\xcd\xa1\x97\xac\xbb\x97\xe1\xac\xca{Dh\x98\xa4\xd5\xab)\xfby\x9e\xd3c\xaet\x87r)\xca\xa3Z\x88\xf6\xe6rzo\xc2\x92\xbc\x0f\xd1\xacO\x00@Rw`\x9ad\xf1Q\x95\xc6+!\xd1\xaaH\xe8\xdd\x91\x96U\xa6\xf3i.\xf2x\x15\x89\xa6\xa2<+W\xb2\xdd\xbc9\xc2eH\xe7\xb2\xfcb\xcd\xfd!I\xe3g\xfcM>SRdaz\x94G<_\x92M\xf9^M\xca\xb3\x83\x8bg\xbc\xec\x92D\xd5\x8f\xff,9\xa8\x9c\x932O\xd7$\xbeX\xdd\xd0\x82\x88\xe6Y\x06\xedC+\xbdQS\xf5r\x91\xaf\x8a\xa8\xce|Ay_WE}\x19\x8b,\xaf!>\x82\xa2\x15\x94\xb9\xafLA\xdaQ\xa5'GyA\xd1\x0c\xf1Wt\x87\xf8+\x9aH\xafn\x13cm\xbf\x97\xd0nVa\xb0\x1c\xfd\x08\x17\xecL\x9d\\1\x96bF\xe8q\xe6N\x9c\x05\xa1\xa1\xe3\x83\x83K\xe6T.\x9e5G\xb5\xd4\xf3a\xe2T\xdb\xact\xae<\x1f\x0f\x8d\x12Eh\xffy\xe1\xb9\x93+\xcfC\xc8\xea\xb1\x87\x94\x97\xa0\xc1I\xb8\x0c\x92\xf2$\\\nE%\xec\x93\xeb`\xb0\x06\xaf\xd6\xf4\x16\xc9I&\x12\xb5\xb9A2\x81\xf7\xe4$\\z*9\xea\xab\x98\xe1g\xae\xe0\xd2\x7f\xf7a\x9a\xae\xf7Bj%)\xbf \xb1O\x94\xe7\xf1\x0e+\x93%\xa7\xea]RR\xcf\xf5\xbc\xa0 l\x1f\xb9\x8d\xaet\xdd\xc1\xc8\x08\xa4\xb1\x081A\x959\xd9\x97o\x88\xb8\xaf?/R\x87[5\xd4\x89]r\x19F\x9c\xbbj}\x9b\xe0\x04\x0el\xca\n\xf8r0\xb0j\xce\xbb\xbe\xfc\xffP\xa3\xa87\xa7\xbe<\xe6AX\x8e\xb3\xff\x1a:\x87\xf1\x84|\xf2\x83\xa4d\xffT\x81$ \xca|A\xbe\x11f+\xe0\xd4\x94\x8d\xfbf\xe4\x92\x07\x1d\xba\xf49>\xa5$\xa3,\xc9\x0c\xabz\xc7\x14\x08}\xd3\x9aH6\xd5\xb1K\xbcj\x9f\xf7\xed\xef\xd6~f\x0b\xda&\xd5\xb8\x8b\x92\xfb\"\x8f\x81\x953Tz\"n\xceZ\x1fQ\xa7\xac\xb5\xb5x\\]r+vW\xbb\xd8\n\x1d\x93`1yb]\x8bM\x811\xd2\xcd_Fp\x89\xd1\xf30j\x15\xcb\xe8,V)M\x96aA\xb7\xa7y\xb1\xd8\x8aC\x1a:u\xb6\xbcX\x1c\xb1\x14\xcc\xcapE\x12\xe1q\xb8\xfdy\xeb\xf6\xf6v\x0b\x8b\xac\x8a\x14\xaf\xd7I\xecT~\xda\x8d\x04\xb96U\x06h\x14\n*\x15\xc0\x189\x1aI\x894\xf2\xe5\x9d\x00Z\x1d\xe3\x87\xf5\xe1\xde \x83&dy/\xb0c\xc7\x8a\x9c}\xc3\xa1\xd2\xc6*\xd1\xaa(HF\xdf\x0bR\x84\xd3e'\xcdS\x19A\xc5\xfd^\xbfrY\x99y\x04~1\xf4\xd2k\xd6\xc1\xce\xff\x893#\x14\xe1{\xc5\xff\xe5%\xfe\xe7\x1e\xba\xd8\xaf|\x89D\x0f\xfb9'a,\xf6B4g?\xd0\xcb\xa6\xa3E\xd2\x88z\xc5\xde\x15Wf;\xd7\x00Z\xf7\x9fS\x1e%M\xa5VX\xd1P\x08\xcb/HJ\"\x9a\x17\x9e\x1b\xf5\x05\x82\xac\xb0\"\xee\x8b\xaaBM\x9d\x9fs\x04\x9cHz\x94\x86V\x85\x1e\x15\x9d7Q\xd3d\x8f\xd2\x0c\xab\x8e\xa3\x0cG\xf7\xfc\xef\xeb\x04\xe1\xa35\xc8k\x14\xcdf9\xdd\"qB\xf3\xc2\xd6\x01A\x9e>J\xf3\x7f-\xf3\xac\xa2>8\x18\xe9\xb3\xacm\x86%\x87$\x8dp~\x94\xce\x14\xa2\xbe\x9e\x0e\xf9Vz\xbe\x97\\R\xdbC\xecSh\xccB\xf7\x11\xc5Qr\x8b\xce\x91\xcd\xca\x80\x89\xc3\xe8\x03~M\xa8\xa6d\xdc\x8f1\xce\x05\x8f\xca\x8a \"~b\x19\x9c\x151)H\xccg%X\x90bF\x18\xc3S\xd3\xa9#\xdd\x16K[\xbbx\x08\xb3\xf4mK\xd9\xdd\xd3\xa5\xdf\x00<\xcf\xd7\x97\xbeZ\x87\xf6\xaa7\xde\xe7*\xff7\xa8c\xd3\x96\xbaC\xb3\xc6\xb5\x88#)\xb9K\xf34\xcc\xfd\xee\x0b\x16\xd1\x98n\x0f\x8a0+8\xd8\xfe\x8a\xbb\x86\xf1Wi\xaf#\xc8\xcai\xde\x9e*m\xae\x16|d\x1aG\xfd\x98\xddP\xab6\xac\\\x83\xb57\xb7\xbb\x1e\xd8\xae\xda\xaa\xa8\xb3u,h\xc3\x9f \x84%\xe5\x0c\xe6\x0e,\x06v`{\xbd\xefNv\xb6^_}\xe7}\x0c\xda\xbf\xb6\x93\x80|&\x11#p\xb8\x0b\xb7]\xd3lH\xe9\x87\xb9+\xf1\xc0\xae\x10I\xeb2\x02\xaag\x12\xee\xdaB\x18s\xe3\xb3\xbe\xc6\xf1\x0e\x9a\x07\x0e \xca\xe4\xef\x04~\x80]\xaf\xb9\xfb\x05\x17\xdbf)%\x03\xd7\x93\xad\xb9\xd6\"\n\x1d\xec\x83K\xda!\xe9H\x87\xca]\xdd\xd5\x8d\xaad\xd5Uk\x18bc\x1bV\x83\x1c\x10F\xae\\\xb3\xb6\xf0d0\x15\x97K\xd9\xf0\x9a\xb7\x8f\\W\x1f\xb6\x9a\xbd\x9a\xf2\x0bB\xe7y\xdc\xab\x9f_-\xb7U\xa6.\x9f\x84U\xc6\x18\xfb-\xc6\xd8\x9bU\x07\x80\xc3\x95\xe5J\xdat/\x8f\x87\xf0\xa8\xb9\xda\xfanh\xbc\xdf\xe8r\xc3oCR\xbc\xe1\x0bB=\x974\xd9\xb8\xbe\xe3\xe5Z\x97f>vGd\xd5}\x1d\xb9\x95\xc8\xab\x12\xb2~[O$\xd5)\xeak \x9e\x0c\xc8\xca,\xf8}\xd4n(U\x1b\x89\xfc\x968\xba\x97\xd0\xab]\xbfY)=d\xd3\xeav}\xa0W\xbe\xd031\x82xS\xb0!\x08g[\x15v\xb5\"\xd4 F\x99D\xeb\xa6\xdcoI\xe2\x1fe\x96\xd5.\xda\x85\xa1P\xcd\xb6r3\xf0(\xed\xcb\xfa\x8cK+\xee#\x1e\xa5!V\x97\x99I\xac.@\x1e\xa5\x1dQ\xdd\x006\xa5\xfbf\xc6\xdc\x99;\x1fn|\xb8\xee\xbe\xceku\xac\x11\xd8\xdd\xaa\xc5Qe\xe7\xd7\x8c\xaeSu\xd0\xe9\x9b\x02\xf9\xa0\xd7\xa3\xae\x0c2\xd3FS\x18\xda\xaf\xb5\x06j\x07o\x13:\x97\xaa6\xe5\x80\x91\x19+\xd1p>'Z\xe4\xd0\xab\xf4\xa1#W\x1f\x03b\x17|\x8ekP\x11\xd5\x9f\xaf5\xe3S\x1f\x04\xcd\xdeU\xe9\x8f\xdc;\x83E\xb2\xfe|m\x85\xb6o\xe7\xb0~\xb6\xfbpnt\xca\x80|\xe4c$%\xb4\xbd\xa5\xa1h\xae\x97#\xeeC\x1fe\x8b\xb3\xbaz\x0f\xc7\xc6\xfbg\xd9\x87\xfa\x8a\xb6\xf7\x94\x92S\x82~\x81*\xc4\\]\x02q\xe5\x01W\xd9G\x83\xee\xcf\xa05\x1a\xe5\xc6\xcc\xa0?\xd1\x89\xc6\x9a\x83\xbc\xd0\xd8\x08\xe5z\xda<\xed\xb7>\x8c\xfd\xc1\x13A\x06\xdf{\x81r\xc6+`N\xab\xf3YEl|5\xaflJ\xb7\xf2d\x0e\"\xf4\xab\xcfH\xf8]\xf4\xcc'\xf7\xa2\x10\x02\xe9\xf0\xd0\x07QZ\xfdD\x06\xce\xb2@=\xc6A1\x8c\xbf\xd32\\G\xe8\xd9\x03\xfb\x08C\xfb \xf6\xed\xff\xd5\xea2\xf4^\xcbZuC\xb9w\x94w\x8c\x1d\xfb\x11TPn\xc8\x9fz6\xee!'\xb1\x0d\x8a\x18\x83\x10F\x95i\x10\x9c\xe2x\x0e\xf3l\x9a\xccJ\xb6<\xf6\x85\xc5\xcb,\x06\xb8\x17yAM>\xd0\xe5\xc3\xfd\x10\xd7{\x92\xe7\xef\x04\xf5\x0b\x94O\xe4\x05\xfd\xf1n\xd8\x9a(e\xcd\xee\x00\xba\x02\xd4\xea\x8f\x9c\x0f\xa3\xdej!t\x1fV\xd8?R\x94\xca\x1cL\nK\x14}P\xe9\xeb}\x90]\xe8\xb0\x11\xff\xea5)\xa6>\x0f\x0c\xf2\x9e\xdd\xd8g\xe9\x83\xbc\xee\xb3\xbe\x1a\x93\xbc'^z\x02{8t\x8aU\xb8\x05^\xd0\xf7\x0eV\xc1\xdb\xdd[\xbb>\x96F\xdc\xd9[\xd6\x01z\xa0\x8a\x0e\xca\x11$\xf7F\x04\x86\x9d\xd9\xdc\x82\xbe\xa6\x07e><\x86\xca\x9ck\x192\xaf\xf0~\x17\x1a\x9f\xf0LST\xb4\x1e\xa93\xbc\xbe>&\xa1\xf1~\x80]ik\x90=J\x8f\xb4j\xef\xd5\xb13\x8e#\x9b\xban\xf7\xe0O\x0e\x95\x1b_\x96U\xb2\xc9&\xa8P\xb4\xeb\xee\xd1\xc2\xa7\xc1-\x98\xb4\xfa\xee\xd1\xd0\xc1\xe0\x86\x0c:\x85U;\x1d\x0dh\xc6)M\xbd\x10\xa3\xfa\xe2\x90\xdeK\x04v\xef\xbbw\xa3JW\xf3|5\xa3\x92\xfcA\x8a \x03\x9b\xb4\xcaW\x8a\x81\x9c\xb0\x14E\xe7\xb89\xb2\x06\x9d,\x15\x9c2y\xc9\xe2\xd8\xc6\x08\xe2\xa4\x1eX\x0b\xa6\xcd\xc3r\xce\xc5\xac\xf8\xf30\x8f\x89q@\xa0\xe3y\xc3\xa5\x9aXq\x93\x11\xca\x03Y\x85JQI\xed\xb6Y\xf7NMi\xb7o^\xb7N,\xf3\x9ec\x99\x1ee^\x1d\xda-\xc2y\xe9)+\xab\x16\xc2@\x13\xa9c\x7f8\x98^'\xb2\xa3\x0c\xab\xe6\x0cf7\xf4{\x1f\xe3.\xbe\xffh\xfe\x19\xdb\xf7\x1b\x01\xa5\xb0\x80\xc7P\x90\xb0\xae\xca\x99\x98\x93\xdc0\x95&\xe5\xf0oD\x83\xbc\xd0\xd5c\xa1\xb8\x07T\x97\xd4\x9ah]\xba\xa1\x0d\x04\xd7y1\xa5N\xa4<\xac\x0c\xb8\x02p/Z\xd7\xc1\x8e}\xd0\xf7\x17\xf2i\xcd\x0e'\xfa>W\xf5\x93k\x1d\xff\x07Hj$\xdanH|\x8d:r\x06\x17<\xdc\xcc\xb1V\x1a\xc5\xf8\xcf\xce\xb6\x08K9\xd9Q\x02\x12\xaa\x11\xa2do\xe0\xd2\xde\x9f\xff\x81*\xa9lRz\x95R\x0d\xb3p\xf2\xaf\xd155\\\xa3\xa0\x99\xb2\xf4\xf1\xd2\xb9\xbd\x1f\x88\xd0\x85\xccU(y^y\x9d\xf7A\xb9T7\xe5#\xaa\xe5\xb5;\xbd\x97@x\xff\x83A\xac\x1a\xaa\xa0x\xa7\xd4\\\x8a\xdf\xb5\x7f\xb11\x1e7\xe5p\x95\x05M\x1f\nl\xcc\x8fP\xaa\x0b\x16!\x8d\xe6\xee\xf6\xffq'\xe1\xd6\xdf\xaf\xd8\x9f\x9d\xad\xd7\x9b\x1f\xb7\x82\xab\xef\xbc\xd1\xb6E\x0b\x97\xbb\xa0HJ\x19\x90\x80\xb1\xed\x1c\x92\xb3V\xd0\xc1\xd6)\xcb/P$\x8a\x14\x92\xef\xd6G\xe7Z\xac\x0f\x1f\x9e\xc33\xe6\x9ar^\xc3\xf6\xc1`h\xd47%\xa2s\x13gN\xe9\x12\xd54)]\x96\x8a\xb7\xac\xe3\xaa$\xf7\x90U\xb7\xdce\xf4\xd4)\x0d\xe9\xdd,zd\x8a\xc7\xa1S\xecF\x19-\x8d\x07\xdb\xe6Rp/z\xdf,M\x96\x03\x02\xcfJqj\xe5\xfa\xd1\xa0\x0b\x93\xa9\xeb\xd8\xc65\x7fm\xf7\xc4\x8c\xd6\xf61\xde#W\xf3> \x97\xda\xb6\xf9\xaf\xb7\x8d#\x8a5\x9c\xf8\xddp8\x98\xcf\xd4\xd7\x92p3\xf3\xa6W\xc2\x92\xd0\xd6+\xe7\xc7\xb9E\x12J\x80\xc7\x8b%\xbdC\xfb\x9f\x8az\xc6\xaf\x12N\xf1\x93\xb4\xa8\x92\x89\x9a\x16\xe0a\x18\xcd\xd5:M\x86S\x82O7\x7f\xc2\xb4\x0bi\x9c\xb5\x0c\x8b\x92\\\xe6\x95U\xd5\xc5\xf8\xf2\xfa\xe2\xf0\xa7\xf1I\xc3\x9c\xfa||q\xf6\xee\xe7\xf1\xd1\xf5\xc5\x87\x1f/\xcf\xc7\xc6oj\xda\xd9\xfb\xf1\xf9\xc1\xe5\xf1\xd9\xe9\xf5\xc9\xf8\xf2\xe0\xfa\xe7\x83w\x1fx\x99\xc3w\xe3\x83s\xf6~\x8c\xf9\xde\x1f\x9c\x1f\x9c\\(_\xce\xc7\xff\xbf\x0f\xe3\x8b\xcbF\xca\xc5\xfb\xb3\xd3\x0b^\xfc\xdd\xd9\x9f\x1aYXoO>\\\x1e\\\x8e\x8fZ\xe9\xedw\xa5\"S\x0fD\xdf\xc7'\xef/\x7f\xe5\xe9\xd7\xc7\xa7\x87\xef>\\\x1c\x9f\x9d\xaa\x19\xf0\x93\x9a\xf0\x9f\x17\xcd\x0c\x1f\xce\xdf\xa9\xaf\x17\xef\xc7\x876\x034\xd8\x83\x1b7s\x9f~\xaf\x93\x9d\xb9\xf8\xf2\xea\xb9\xfe%\x91e\x9e\xe9_B\xf1\xe5\xf9S\xfd\xcbJ\x96\xd9i\x15*\xc5\xa7g\xcf^\xe9\x9f\xd2\xea\xd3k\xfdS$\x9b\xfa\xdek\xd0\x8f\x1c&/\xfaT?%\xb6z\xc7\xe8\x8e\x82,\xd30\"\xee\xf6G\xba=\xf3\xc1\x01\xd0\xf1\x96\xcdkc\xad/\xd6Fsh/q\xdd>\x1f+3g\x8d\xaej\x9e\x1c\xcd\xbd\xf5-\xb6\xf9\xa7\x1d]\x18\xe0\x1c\xe0\x03j\xe9?\xb8\xf5\xdbok\x9d\xa1\x85\xde\xc5\xec\xe9\xc2\xf8\xa1]\xe0\x06\xf6\x88\x13\xcd\xbc\xb8! bO_>w\xf4\xc5\xcc\xa9q\x95?\x8b\x86\x9e8P,\xf7?x\xb4\x9f\x86\x0b2\x02K\xf0\xa8%?\n\xac*\x85I\xf9\x97E\xaa[\xfd\x00\x0crL\x80\xf3\xd6)\x89\xb4\x1b\x9b\xfe\x8b\xa6\x0f\x87o\x9d\x1c1\xb9\xddSS\xdcsjR\x12\x16?\xeb\xa7\xed\x83A\xfb\xf8A\xf3q\"\x14D\xdbj\x1c\x03\x96U\x9av\xa1\x91a\x1f)\xdb\xd3\xfd\xbf>\xa8\xfb}\xbb\xc1\xb2\x9c\x9f\xc8\xdd\x08tS\xbd\x87\xcc\x80\xb4\x1d\xfb\x1f:\x03\x1a\x1f{\xcf\x19`\xf0\xab\x10\x96\xdf2\xf6\xcb\xc7\x1d\xbbT{\xbe\x87\x0f\x10eD\x92r\xfe\x96\x01\x9d\xfc\xb7\x18PI\xe8}\xd9[\xdb\x80\x8e\xee= \xce\x9ew \\6^\x0bx\xca\xf1\x1ad\xc3\xb6\xf16\x89\xd9iEd\xbe4\xd9\xa5e\xaen\xd1\x19W\x05Z\xf4\xe5\\|\xda}\xd9\xfa\xb4\x96Ti\x9b\xcc]\x88O/_\xb4\xc8\xdcY\xf5\xa9Ej\xdfI\xc3R\x13\x93{c=\x14dh\x1e\xd51\x04\xe9v\x0ca%w\x1a\xf3xm`\x1e\xd0\x14Q\xfa\x9fA;\xc8\xe6\x18n\xdb\xfcG\xa3\xc8\xaaH\xb5\x12c\x03\x07\xd3(\xc2\x95\xa8\x1be>\x9b\xd8\xa0F!<\xd2\xb5R\x83\xb8\xabF-\x84\xf1\xc9\xbc\xae\xfa\xfaF\xab\xf5\xd0\xc2\xc7\xf1\x8a$\xf3l\xec\xd0'\x13O\xc8\xcb\x95\x84^\xcb\x8bt\xad\xd4\x81\x81\xb3T\x0b!\n\xd3\xca\x9cup\xa9uYq\xe9m\xa9\xe3\xbd\x81\xf3\xe5e\xd3|f)ca\xa0y1D\xb9\xb6Q\x9e\x18\x99\xf1fAS\x8b\xc7\x9d\xec\xbdZ\xbesi\xfe:@\x8a\xd0\x00\x95J\xccz\xbd 4\x14\x87j\xb3\xceS\x8b\xb4\xa2QOm\xde\xda({\xde#\x051\xd6q]r\x81\x8bV\xd7Q\x05\x0c\x95\x80\xc5a\xcb/e\xaa\x8d\xcc\xef\x86\xaa\xb8\xb9;>\xba\xa8\x16R\xc5J\xdc\xa6\x9bH\xab\\zS\xe8\xd3K\xfeV\x19:\xad9\xb8\xc5\xe7\x01\xe6,\xcdGLQe\x937J\x96\x8c\xdc\x99\x10)\x8a\xce\xea\xf8\x95\x9c027g \x85{R\x83\x1c\xd4\x1a\x16\x10\xc3@\xc0\x97/\x90\xb8\x18\xb0\n\xc1\xb6C\x87\xabD\x0bqF\xda\xb1i-\xda$\x1d{\xbez\"h\x91\\\xaa\xa0\x0c\xa7\xe4]\x1e\xc6\xc6h]j4=\xf3T\xf2\xa5a\xf4t\x9e\x8aX\xfb\xe8\xf1-\x0f2r\xcbx\xf6qq\x9fN\x9b\xa7\x8f=)Y\x93t\x042\xa0\x935\xdf\x82\x94e8c\xc4GP\x90\xb0\xcc;\xcc\xe4\xd2$\xc3|\x8b\xb0\xf8\xc4OQ\xf6+`\xc9\xa8\xdb[\xbfmb\xe4 .:\xb3\xcck{\xf2l[\x05\x03\x1d)\xde6\xf7\xc0Uba\x85\xb0\x0f\xce*\xe3\"et\xf2\xc1\xb6VTo\xad\xd0\xe3&\xe0M\xd1\x88\x1bz\xec\xd0\x1fH#}0\xc4\x95\xfb[\xa5\xbf\xa5Hf; a0\xecM\xab\x86d\xe5\x85\xa8\x7f\x7fBus6`\x8f\x82t\x83\xde\xbbO\xa1\xf2\xff2\xed\x00\x8a\x15\xecA\x18L \x8d\xe6\xf6L%f\x12S\xd5\x01`\x98\xed\xe0\xc2\xc0\xe3\xc8'\xaaD\xb2\xb8\xfa)\xec\xc3?\xbe\xc2\x08R{\x91\xa9\xbcT\x14:\xc2f\xb5\xa0\x0fh, 7\xe6mXd\xdc\x91\x84\x98\xa2\xc6:7\xc2tB\x99d\x11\x81\xf5\xb3`w'\xd8\x810\x8b\xe16IS\xb8!P\x90E\xbe&1$\x19\xac\x9f\x07;\xc1\xce\x1bX\x95\x04,r~\x11\xd0s\xc3\xf1|\x0ep\xb6XW\x0c4\x18i>\xedRv\x8e10\xd9\"\x8fI*/ZN\xc2\xa8\xe8\x88*5\xc7\x12\xd5\xcdVO\xee5\xe6\x16C9\xce()\"\xb2\xa4y\x87R\xf5B\x94\xe0\x04\x8cR\xc42\xcaz\x95\xeb8?y\xe5i\xc1\xad\x9dG\xf0\xfb\xf6\xca%x\x1e\xac\x8a\xd4\xaa\xfe\xc5&\x8fq\x15\x11\x83\x88wIFNW\x8b\x1bR\xbc\xcd\x0b\xb4\xcf\xdb\xb7}h\x86\xdd0\x84\xc2\x90\xcf]\xd5\xcd\x0bZ\xd8\\w\xcb\x1b\xb7\x0eT\x8f[\xca\xe8cH>\xac\x8dN3\xe4\x9b\xb0$Gyd\xe5\x1dA\xb8\x00mB\xc8\x08b{\xf6&x\x8c\xa0c\xd3\xb7ac\x04\xeb\xae\xec-\xc0\x18\xc1\xc2\x98\xfd\xab\x17\xd09\xc9\x06\xe8WA\xe3\x8e\x95M\x98\xbd\x03\xec\xe1\xf6\xad\xfc\x1a\xd6\xae*\x9eL\xc1Mz \x0c\xa8$\x02\x0e\xba\xf3\xcf\xcc$\x06\x082\xa3y\xfb\x9f\xe1\x1do\xa6(\xd6t\x0d\x11T\xe5\xbc\x81\xda\x9a\xeac%K\x08?\xcf\xd9\xa4LWi*\xb6\xc8\xcc\xbd\xf3\x95\x14i\x15\xc0\xd2\x96\xdc\xc8\xb5\x91\xbd~ \xfe\x9a'\x99\xeb\x04\x8eZ\x04)\x15FU\xcb\xd8\x93$\xa0\xdcE\x9b\x9c7\x1f\xb5s\x84\x8b iu\xccr\x9a\xef\x93\x89\x0f\x8e kz\xa3?\xcb\xa7\x11\xcf\xaa#\x10\xa8\xfa\x08\xb9! Dc\xbd\x85\x86X\x01\xda\xa1\x8e= #\x13/qV\xc6E\xf1#j\x99\xe4\xdf`9XhWfvS\xaaVr\xcb\xfc`r\xa5\x1dGo\x85>\xda\xa2&\xc6\xd8kZ\xbf\x96\x15Y\xcdh\xc7\nh\x81X\x03\xdfQ5b\xa8\x0f!\x0f\x80\xe2C\xec\xc3\xdc\x87\xb5\x0f\x0b\x1f*k\xdf[\x1f\xc6V\x85\xa1\xba\xed\xdbb\xd0\x86\xc1p\x0bo\xdexP\xde&\x9c\xca\x0f\x96\x05F\xfc\xe2\xc1\xd0\xbb6Z\x14\x96\x04vF\xddk;\xe5\xe7\xd7\xdf\x82\xf2\xae\xa4d1d\xe3\x12\x19\x8c\xf1y7\xdc\xb0\xe7\xa6 a;\x92\x9a\xfa\xd8\xc1\x05lH\xc2\x89\xc9\x8d\x00\x1e\xe9\x05`\x04q\x9e\xfd\x9e\xc2<\\\x13\x08\x81\x0f\x06h.\x0c`\x08\xe4\x99\x0f\xe1M^\xd0$\x9b\x05\xdcaQxS\xac\x96h\xe2\xc1\xda\xb0\x05\x07\x069\x93\xcf\xfbg2\xd3yQ\xc1\xc6\x92\xa2\xa8)d\xc1\xb1N3\x1fi\xe2\xbc\xa2\xf2\xf8P8\xef\x97#E\xaaS\x9e\xa1\xa4\xfc\xade\xee9\x04\x94\xd6\"R\xe8`\xacK\x0dw\xf3\xb6\x87U\x1eb\xe8\xd4\x14\x91\xf0\x12\x91\xf0\xa2\x1fh\xe1\x1bp\xb0\xe9\xf9\x16\xbclz\x86\xe0j\xd3S)\x14\x8au{\xeaw\x99\x1b\x9a\x1el\xf9\xe9\x83[\x0e9\x91K2\xea\x0b\xb6\xbc \xe5*\xa5'\xe1\xd2\x17\xbc5\x83\xf2_\x12:?\xe4\x0e=%\xcaV\xa0\xed\xa5\x0f\x89\x9b\xe2\xf9z\xbfi\x93O\xc5tL9\x1f6\x8c\x96\xd2\x1f\x13[r\xf7\xb0\xaat\x96\xe5\xe6a\xd5\x98\xd8\x19\x83\xa2\xd2\x90\xc7\xc8\xea\xdc\xde\xbb\xaa>bQ\x7f\x10\xbc^>\x18\xbc\"\x05\xbc\x96\x88x9\x9f\xc4\x8f\xba\x88sWP\x04a\x9a\xe2 R\xba\x1e\xf7f\x86\x8c\xcc\x10n\xc9\xf6\x0c\xe4\xa2lO\x9b\xbbZ\"w\xb5\xd4\xcc\x16\\.\xa1\xb8?\xfbdz*l`b\xa0\xe6\xee\xfa\x7f\x1b\x03ez\x1e\xc2T\x99\x9e{3Z\xa6\xa7\x9f\xf92=\xa8Pm`\xba\x16\xd2\xbd\xf6\xac>WW\x885\xe3\xf6\x87\xb4\xfa\xd0\xa2\x83\x1e:\xbd\x15f\xef\x94\x10u=\x96\xa3`\x04\xf6\x08\xf0\xb6\xe7A\x88h\xf7\xfb\xfba\",\xe4\x90,v\xeeW\x0e\xd4\xcdX\xd2|i\xf1\x91cz\xba\xa9g\xf9|\xc5\xe8\xf1&G\xb6\xc6\xdc6\xc9\xa4\xfa\xb4\xae\xf0z|)\xa8O5Xs\xd0\xcf\xde:\xba\x07\xfd\x95Q\xc3\xab\x8an\x13\xb8d\x00bW \xd6\x9d\x9a\x9c\x0d\xbb\x93\xab\xcac\xcfR\x9a\xd0\x074\xff\xcf\x8b!D\x84\x15\x9c\xa7\x8a\xc8X\xd4\xd6=\xc0\xae\xf5\xe1\x90\xdb\xc3~\x8e\x95\x83\x92{-\xafxz\x1f\xaf\x8dx0\x10I&>\xed\x06\x07\xe4\xf1\xfaz\xf4\xba\xbbG5c\xf1\x1aO\x87\x1d\xec!^V\xba\xbb\xbb\x9e\xafK\xfe\x02j\xbb{\x80\x8aL\xed\xa1Sc\xb3\xa1\x83\xcb\xc6>\xae \xd3\xdef\x9e\xd9\x9b\x19\x8a\x11\x86\xec\xfe6\xd0\xab\xbb\xda\x87\x89\xb1\xd4\x841j\xbb\xaf\xafZ\x1f\xaf\xda\x0e2\xe0\xd9\xf7\x0d\x9d{\xab\xb5\xc77^\xec\xffM\xc6\xc1\xf4+\xa8\x03\x0cC\xfaV\xf7LX\xbd}m\xdb\x02\xdc\xd3\x11x\x8fJ\xdcy{\xff~\x8b\x8e\x9fT\xd8l\xaf\x99m\x80\xfe\x10\xdb\x1c+o\xfdO\x1a\xdd\xc4\xe2\xc0F\x0cO\xc5\x83\xf7\x1bi\xcb0\xe9[\xd6\xee\xf0A\xa3\xab\xb4\xa5\xcdC\xe4.\xc1\xef\xbd\x84]\xf6X\xdf\xae'\x7f\xf1\xcf\x18\xe9#\x98\x13\xf0\xb058\xea\x9f\x85\xe9\xc2\xf0iS\xb7v\xd3\xbc\xed\xc1j\xae\x03&\xa5_=\xd7\xfc\xb9`'\xb6\xc9\xcd\x81e\xc9>uAK\xc3\xb8\xef\xbf\xe7h\xffv\xaf\xd1\x1e\xf4\x8c\xb6e\xe0\xf8\xbfa\xd0g]\x83n\x18y\xf6\x1e\x9c\x1d\xe34\x8c\x857\xff\xbe\xab\xf9\x96\xd9io\x17\x86*\xe5\xd9Tn\x8aa*{\xf9P\x95\xbd\x95&\xeb6\xe7\x12\xf1\x06\xc3\xf2YOu)\x12\x96\x0c<\x18\xca3\xe7\xe1r$qW`\xcc1\xc5\x1c\x95\x8e\xa8\x05m\xc2\x1e\xacl\x9c\xc1\xfd\xb4S\xac\x9a)\xe6\xec3\xbc0\xe0\xacD\x9b|M\xa6\xe0\xce\xe0\xc9\x13\x98)\xa1\xc7\xf4w)y\xd2\x93\x85{\xd2~\xf1\x93\xa4iY\x0d\x1bBK\x86{\xc7\xaa\xcf\x89\xf6\x1e3\x98\xa5w\xc6\x0b\xcf;\x1d\x07\xb9\x93\xd4\x87\xe8\x8am\x84\x8c\xad6\xd2X^\x17\x9bJ\xd4)\xd9k\xbe~\xf9b\x8d\x1f\x00\xca\xd6P\xcbLx\xc3\x1d\x1e\x0c\xdd\x0dt\x0e\x8e\xa1\xfcv\x84\x8b\xa52\xf9;w\xda\xe1\x9a\xea\x82=p\x0c\xbe\x97\xc0\xcc#\xa0H\x07\x83\xc8}\xa6\x1f\xaa\xc8Lq-\xfa\x91\xcaH\x01\xcd/\xd0\x12\x96\xb1\xcf\x02<*\x00?\x8eQ\xc8\xa7\xbe\xefi\xdfG\xbcP\xca\xfeD\xa2\xf3\xcd\xfcY\x90/\x8fcw\xc6\xefc<\xd4)\xe5d\x96k]\x136\xa97\xb0\x07)l\x823r`\x13\"\xf3\\2v\xb6\xe0\xb1>\xca\xa0D\x1c@\xe2\x0bLro\x90ko%w\xe8_]\x8bjX\xbe\x9f\xc3\" oR\xd2\xa5\n\x05\x18,\x9d\xe5\x1eU=\xe9\x96\x08\xb0\xa5,\x97aDFpc\xcd\xf8\xb5_\xbap\xfb\x08=\xedo\xbf{\xce\xabv+\xf7>\x15t]{\x12\x91\xec\xc35\x8c\xe0\xd6G5^=R\x1d\x0e\xa2\x9d\xec\"\xa0\xf0\"\xad\xa8u\xa2L+\x9d\x17B\x87!\xdfm\x7f\xe7\xd8\x17y\xac\xb6\xfac\x1es\x9c\xc4\x8b\x9bK\xb1\xc1\xdd\x05I\xf9\x9f\x17g\xa7\\0\xed\xb9cT\x8cW\xab\x81=`\x19\xb86\xbc;\xf6F0f\xfba\x8csi\xc8<\x16\x93\x0c\xa3\xf6\xa7\xf6\x86n\xa5\xb0\xa1|\x163\xaf\xb8\x01\xf9\x07z\xe6m\x8f\xe33\xee\xc4\x9bU\x92J2\xcc\xfd\xec\xf9P(\xc4\xa8\xab\x1c\x90\xf5A\x08\x9f\x0d\xb5\x11\xc3\x11\xa6R\x19\xbd\xfeq\xd7\x0d!\xe0\x84\xea*:\xea\x93\x9bG\x99u\xab0\x16m\xc2\xd32\xc0\xbc\xe1\x9bD>_U\xf8k\x0e\xd3p\x97\xcc\xc6u\x01{p\x14R\x12d\xf9mG\xa8\x9bLRg.\xd1\xd5\x05\xad\xd3F\x83x\xc5Qj\xa3\x0d\xd8\x82\x8bj\x0dyO-c4\xa8O}\xf5\x84\xa0\xad\xbfyuJ{\x1a\xea8c\xb9\xf6F\xd7}\x0b)\n.^\x98\xab~m\xccg\x9ei@\x8d$\x0b\xafI\xdan{\xf4aK\xf5\x04\x83\xa3\xaf\x1d\xab\xa3\xaf\x9d\xa6\xa3\xaf\x9d+T\xe37P\xef\x15%\xda\xfe\x96uR\xa0\x89\xd8\x07\xb9b\x9e\xc3}\xfeP\x0c1\xc9\xcb9Wf\x1fi\xdd\xa4\x9bT\xd2$\xc14\xebR\x9a\x0f+}\xd5\x01\xf4;\xe9\xe7\x07\xca\xea\xf6\xdf\x16\xa5\xce\xed>\x0c\xb9\xfa\x80\xe6\x1d\x8b_K\xd8\xa9\xfc\xb0\x1d_W8x\xednl\x8a\xf7\xc9\xed\x03\xcb\xce\x08D\xa6\xa3\xca\x9c\x9d\xd1J\xdb\x9f\x17\xe9v\x12P\x86\xac\xa6\x96N\xccq\x00\x15\x81\xd8\xe8\xbe\x0f\xb1\xfd\xec\x16\x80\xb0\xd2\xb8C\xd4},\x9a\xb85\xb1md\xa1\xfcm\xd1\xbf\xe7\x8a\xdf\x96\xa5\x96\xd8\xa2\xdfb\xd8V^\x92\xc4V\xednS,\xdc\xa9\xa5\xab\xc2\xb4\xd9b\x9fa\x0c\x97\xbb4\xa0\x1c+\xce\xc1_=\xce\xa8H@>/\xf3\x02\xfd>7\xe7\xbb\xb2\xf1\xcd\xdc\x97\xcf\x9ej\x90P\xdb\x087\xbdO\x19\x9b\xb4\xb57@,\x89\x91]\\n\x00\x12f\x11\xbaUD\nKA\x80\xe8\x11\xb4\x80$\x03\xe2\x01\xde\xea\x03\x9b,T\xb4p\xd1\x1f\xeb\x08\x92,\xca\x8b\x82D\x14\x92l\x9ds\x07x\x1b\x16W\x8e\xe4~3hv\xe7U\xd9(\xb9\xaf\x9f+\xcdT\xc3\x0f\xa6CD\"\x19\xb9\x1d\x805Y\x8f\xda{\x8d\xd15\xc1\xb2\xc8\x17 \x8a4YUdX\x9096\xe9\xca\xfcRm\xbe\xb3\xf6,;?\x861\xbc\x17mEyV\xd2b\xc50\xb3M\x97\x11O \x1f\x0f\x1b\x83\xbc\xd6\xf3y\xe7\xc5\x05*\xcb\x84\xbe\xe5D\"\xa3~1M\x0b.\xf3U\xb5;\x1c\xb4t\xf5\"}\xbfcZ\xa4\x01bB\xd4\xb0\xe3GW\x921\xd8D~\x9aLrv\x16\xe3\xbf=\xa0\xec\xdf\x08\nVG\xee\xe3\xeb\xbf\x04\xf2^>\xdf\xb5\x8c\xaax\x8c\xea_\xbd\xb0\xd4\xce@M\xd7g\"\x9f\x97i\x12%t\x04\x13\xd6\xb1\xe7\x8c\xe0u_>\xff^\xfc\x7f\xe1\xa9\xdeP\x1f\xde\xbb\x0eJR\x99\x97\x17\xbb\x167\x93\xec\x9b\x8e\xea@\xd0=\x9a\xc7\xca`s\xeb\xea\xbb\x91\xb7\xef~\xdc\xfe\xb8\xed\xed\xbb\x93\x8f\x17\x1fK\x0c\xc9\xd9.\x1eb\xf1\xc9\xc1\xd6\xff\x1f+\xe0\xffw\xb6^on\x05W\xdf\x8dX\x05\xdb\xedB\x8c|\xb1\\\xad:\xff\x86\x9e#\xc3r\xae\x87\xf3\xae\xb3\xec\xb3,\x7f[\x91\xe2\xce\x9eg[\xfatDG\xca\xd6l\x7fd\xd9\xc2\x15\x92x\xbb\xb6\\\xa7\xe1)\xeb\x13\x8fH.\xaf\x86w;\nl\x8f\xdc\x8f\xf1\xa6\xf7\xef\xdb\x18\xc8\xbch\x14\xebo\x04{\xac5\xd4*c\xa8\xa6}\xce\xc9\x87M\xe7\x08v\xcd-\xe3D\x8e`\xb7\xf5Q\xf5# \xaa\x9b\x8d\xd4\x8e\xaf3\xaepo\xb3\x94C\x015\xfa\x83s+\xc3m\x1a\xa4\xe2\xd4\xe2\xc2@\x8bp\xd5\xb9I\xf3\x9b\x91#d\x9e\xcb\"\xa7y\x94\xa7\x1e\x87{v\x96\xb8\xab\x8c\x94Q\xb8\x94\xbc\x13\x9bF\xcf7WH\xd2\x92\xe8\x8e\xea\xf6t\xf7\xd8\xf2A<\x981\x1cX\xb7E\xb0b\x1fJO\xeaz\x14\x93\xcc \x91\xac\x1bR-\x99\xad\xda\xd6uS\x84\xa1\xdb$\x03\x94\x90\xba\xacr6_\x93LG\xaf\xf2Ql\x14\x8a\xa0L\xc3rNP\xfc\xec\xd6o\x8c\xb0\xa5\x9cQ\x9f\x17dj\x8a\xfa\xd3J\x91\xbc\xe9\xef\x9a\xd9\xccp\x11u{;\xad\x02\xfaZ\x89g\xf3\xa4\xc8\xb5\x1e\x01\xe5\x0e\x9f\xd9\xbf\x80\xe6\xef\xf2[R\x1c\x86%A)\x8fc\xb1v\x17\xa3\x1f\xc1\xc6\x06\x9d<\xb5\xec\xbe\x82\x94\x94U\xff\xac\xbd\xd1\xf4+V\xf3\xd0\xa7\xb6C\x14*J\x8f\x1d\xf1*\xb17\xad\xbdPW0E\xcd\x82\x176\x83\xdc\xec\xa9\x94\x1a\xf7sn\xc1\xb0\x12\xc1\x91-\xdc\xcc\x02j\x97\xdd\xe6\x1c3\x96c\x9eX\xb8\x8a;\xd8\x83\x9dv\x7f\x10L+\x88f\x84\xd3\x02\xad\xf5\xe5f\xaaR\xb8=\x8e\x8f\xcb\xcf\x1d@s\"B \xfe\xb3Q\xf50\xabJ\xe4\\\xcc\xe7\xf1\x82)RH\xec\x9c\xdap\xd9q\x13\xb9\x84{.\xf6\xbc\n\x0f\xe0\x85H(A\xdd\x87Y\x03\xea\xe5\xef/_ \xe1\x1eu\x95\x8cU\x15\xc8\xf8\xc9\x17DL\xea\x9b\xe3\xf8\\l\xc1h7\xea7ku\xd7\x93\xa7l\x83N\xb6\xdd\xe0;o\xbbq\xf4xo\xe0\x0e~\x80\xb5\x10s\xbc\x81\xbb\xcdM\x0f\x91\xb5\xcbx\xd8\xf5\xe4\xee\xca\x9b\xec\\\xf9\xdc\x12{\xb2{\xe5C\xc9f\xa5\x84}\x98M\xe6\xb8\xef\x19|\xb7]j\xb2\x1c\xff\x8f\x1b\xa3,@\xfaX.=~\xc9\xe1dh\xfe\xa2f_\xb2>\xee\x83++\x15\xa0\xb3#tT\x95\xa4\x1861\xb7\x87A\x87\xb5\xfczf,\xcfs\xc6(\xfc\x15\xbb\x9c\xf7C\x14\x8eq\\z1\xdek\xcf\xf3\xe5@\xf1\x9f\\\xa5\xe5\xe4\xd9\x15\xae\x96Hd+\xb0\x9c<\xbfR\xebe\xff\x9a\xa8\xc0\xb0}8`\xcd\x02<\xe9\x90\x14\x12\xbf=\x84+\x15 @\xf1c?\xab\x8e\x91 \x9a\x87\xc5\x01uw\xc4\xdc\xea\xdfy\xef8GQ\x9f=\xa2\xd5*\xd3\x00?\x11\xa0\x92\xdd\x18\xe9\x0c9\x14g\xdb\xf1\x82r\x99&\xd4\xe5?\xe5\x0cn\xedz\xd2a5Q2x\xbep\"\xc1A\x8e\x1b\xbce\x93\x02\xb6\x18\xfd\xc1\xb7\xd2.7s\xdby\x03\xc5\xd6\xd6\x1b\x0f#{\xe0M\xd9\xa4\xb8B\xcf\x19\xac\xba\x08#\x13\xec\"~\x0d\x9a\x19\xdcf\x0e\x1fB\x06\xd6#\xee\xb7\xc3\xdd\xa9\x03Z\xb8 \xf7j\xe0C\xab\xc4\xd6V\xb7\x94\x19\xd7&\x0bVY9O\xa6\xd4u\x1c\xcf\xc7~\xb2\x89\xceq\xa9\x82\xea\xed\xcb\x17\xc8\xb8\x0e\x1cf\xcb\x84\xce\xfc\xb6)\xa2\x8a\xb2*\xbe\xbabl\xde\xd8\xb7\xbc\xa0*f\xe0\xfa\xa93\x19a\x97\xff\xe0\x85yf~{\xc8\xdeV%)\xc4b\xb36\xca\xf26/b\xfc\xcc\xbe2B\x13\xa7d\x89\xdf\xd9\xab\\\xb5Q\xab\xfcr\xb2S\x81}\xa3.\x86#\x04\x02d_\xf2\"\x99%\x19oP\xc1\x86\xa2\xbb\x88l\x93\x94\x8c*\x98\x95y\xf6\xd5\x97Mp\xb6\xb7\x1d\xd8\x94\xc5F\xe00|\x8dM3b\x01\xab\xaf/3\xb53Q}\x9b\xf2J\x85)B\x1b\xc4KBG\xbd\xac\xa7|\xf0\xe0\x13'\x94\x19R*\xeb\xaf\xae\x0bh\xae2\xca9\x86n\xa5\xd1\xdeX\x17\xd2\xdd\x84\x8b\xd4\xaa<\xa8x\xa0\x85d\x82\x17\xc9=\xe6_C4{9\xd7\xd0c\xee*Zc0K}H\x14p\xdd\x17~1\x12 \xb2I\x05\xb2\xd5\x95/\x0f(o\xc8Q\x8d\xc3\xe92\xd7\x84\xa1#\xa98\x9a\xa1\xa3I\xf8\x96\xe2\x13\xbd\xb9'\xba\xcbS\xd9$\xcb\x1e?\xc64#O7\xb4c\xdb\xa3\x8f\xf1\xe6\xbfos\x1a\x9a\xb2Yv\x85\xffxe\x0b'\x12!\xd0`\x99/\xdd\xaa\xc3bSS\x81\x96F\x8e\xa7\xcc\xbf\xfc\xa8\x14\x7f\x9c\xc9\x97 \xd17F\x95\x08\xa2\xcd\xf3\x94\xf5\xa9\xa6\xa56z\xa2N\x0f\xeb\x95\xa4\x8d\xfa\x94\xbcQ\x0c\xd0o\xf4=\xc8\xd6\x13\x0dW\xd9\xc4V\xad\x0b'3\xfbx\xe0\x8f\xc0\xf97\xcb\xb5\xb6\xfaHhP(\x82\x0da\x16\x1e\xb2M\x05&\xe5V\xf5\xf9*X\xc2\xc7@\x15R\x8c=\x08~\x8d\x99\xccF\x1f\x15\x05Rr\x02\xa1\x84\x1f`U\x91\xaf%;\xe7\xed\xf3\xcd\xca10ZM\xca\x0e\x0d\x9dT\xd2q\xc9$\x9d\xec^\xb1\x1e\x8a_\x1a5w\x8fnK\xa2\xa1>\x11\x93\xc6\x89\x98\x18O\xc4D=\x11\x13\xc3\x89\x98\xe8'b\"O\xc4\xa4\xa1\xde\xd3\x0e\xeei\xba\x9f\x14\x05F=\xb2o@\xd7vMNI\xf1\xa5\x8f\x04\x89\xf0\x8c\x84\xf5%\xd3\xbb\x0e\xcd\x1b\xca\xe5\xd1v>\x0f@\xc6\xc9\x95\xe3\xb7\xd0e\xd8%1s\x85\xdc\x04\x85<\x1c\xb7\x18\xa9\x88B\x07\x81\xb8;\xfa\xc4\xe3\xb4n\"\x1d)\xd0\xcb>\x9f\xf2\x91\x1d\xf9U\x97\xfc\x15\x9d\xc4 \xcc\xcd=%\x8d\x11\x7f\x15\xb9T}\xe7\xc7H\xfd\x05I\x7f\x96\xfeGG\xfe\xcc\xf8J\xf3\\\x92\x10\xcf\x87\x8d4X\xa6\xabY\x92\x95\x93\xec\xaa\x0biR\xb9\x86\xe35\xc9h)\xeby)\xeaQ\xab\xe9>5\xe4)G\x03\xb2\x167\xab\x1d\x1e\xad\x14D\x9fd\x10z\xb0r\xc3Iy\x85\xeb\\z\xb2\x17\xaf\x1c\x94;\x19<_\x82\x11\x17\xab\xd7\xb4\xed\x95\\\xd9h\xfe\x94w\xf94\\\x90\xa3\xa4\\\x864\x9a\x0b\xedd\xb6\x19\xcen\xb3\xcaP\x99{\xc9b]{\xed\xa0*BGY!8m\xceA\xad\x8f\xb1\x9c\x87%\x89\xcf\xc9,))\xd7q`uhS\xc6A\xcd\xb0|\xd5\xfc%l\xfe\xacR]\xaeS\xab\x0d\"\xf1<(\xdd|\x92\\\x89\xe9\xe8\xd9\xe9P\xa3?=\xae\xed\xefLy6HPh\xc3B\xfcR\xba\xed\x0f\xa2\x07>c\xd3;\x17\xaf\xb4/\x9e^'\xbfB/\x19\xf5\xc1\x17kwg\xa7\x02\xe7\x8e\xccH\x06\xb7s\x1c\x91%\xc9b\x92EI\x95M\x01\xf1Iv\x15\xc4J\x0ee\x10\xf2\x97\xa4K\x9a\xfd\x16\xfb\xaam\x95e\x83\xa7\xb6\xda\x91e,\xfd\x19\xd5!\xb5s/\xf3\xb2LnR\xd2\x82M\xe1\x01\xa0 \xa1\x19;\x9e\x10y\xbc\xc7\x11a\x8c\xc9>\"#\xafVf\x97\x9d\x81u0\xba\x8a\x83\xe7\x92&~0\xb0\x95\x0bu\xd6\xbf\xa7\x1b\xe5\x8fw\\)e\xc0M?\n\xa5,\xb2f.\x0e\xc3k\x11\xeb\x0e#m4\xd1G\xa7\xe6\xe2N\xc5\x8e!\x133\xeeI\x10\xadH\xb9\x93\x8b\xafr.\x9f\n\x9c\xc4\xf3\xe0\xad8\x17\x80\x0dD\x9fH\xa1\xf6L\xf4\x8c\x88 \xe6\xc0\xf66/p\xd2\x87\xce3 \xe2\x06T\xb7\xc7\x8flUk\x13V\x17\x16\xf6\x1d\xdc.\x84\xb2*\xb3[g]\x1b\xc3\x86\x8e\xbbNqn83\x08\x8f\xcb\xa7\x02)\xd4\xac1`^\xf9\xe0\xc9\xaeC@\xd1 V\xa0\x80\x96}\x96\xb2Iq\xd5\x01uP\x1f:b\xc2\xdbQ\x85\xe4\xd3u\xfe\xcaG\x92\xcd\xab4\xed\x82\xaa\xeb\x82\x94\xa4\xb1}Gv5Nh\x11[\xb9\xb8\xe4A\x8fg\xad\x8d\xc3\xe5\xe1\xe2\xb2\x94\x91]\xed\xe1Wd\x8e\xe4'\x8c\x97O\x12\x88\xedg~\x1f\x12\xa1\x1e\x0f\x9e\xdb\xde\xd7\xa2{\xd4\x88\x13$Yk]\xd6\x8evC\xbc>\xf6\xa0\xd0\xdb\x0d\xd5v\x8bI\xd8\xbc\x804j\xd9\xaa\xf4;_\xcf\x87S\xe9\xdc\xa3\xa2\x99VG/\xd0\xee\xd3\xdd\xa7\n\xdd+Hw\xf7\xb51\xfe\xc6\xaaC\xdd\xad\xa6\xb9P4\xfc\xe5\x0b8\xab\xecS\x96\xdff[\xb8\x8e\x9a\xf0\x85\x04\x11w\xe9p\x19\x163B\xf1biF\xe8i\x1e\x93\xb7E\xbe8\x16\xf7\xa8n\x81\x97\x84\xfb\x10\x06I\xb6\xce?\x91?\xad\xc2\"&\xf1a\x98\xa67a\xf4 }Cp\x7f\x99\xd8-\x82W\x14\xe6\xbcU\x16\xdf\xd0zc\xef4\xa9\x8a\xb6\xdeER\x8e\xb38)\xe7}\xf8X\xecK\x87\xe6\xcb\x93|U\x92\x0fK)\x94b\xd3C\xf3\xe5e\xbe\x8a\xe6\xe3,6%\x1f\xb2\xf1\xa7\xe2K\xd7\xb6N\xca\x93|M\x1e\xd0\x1dV\xcc\xd4\xb2\x92\xde\xdd\xee\x05\x0d\x0b\xfa\x80\x86\x8f\xf2\xdb\xcc\xd40\xd67\xa0e\xa1\x82{\x94\x14$\xa2\x129\xf4u\xa2>\x1c\xaf\xe5\xe9\xf8.))\xc9\x88M\x0b;k\xe6\x960i\xc0\x03M?T\x94\xd3\x10\x8cXx\xe6\x18\xa1\x8dA\xb4\x19\xde3\xcf\x18\x18\x18\x14\xfc\xc4\nS\x97\xd83J\x95<#\x90\xfb\xc6 0}\xac\xc6[},\x06-\n/M\xca\xe36\x95j\xb9\x16]WV\x80C\x97\xa6\x18\xbc4\xec\x9c\xd5\x9d0w\xe8\x01I4\xb6\xf3\x06r\xf8\xa1v\xd5\xfc\xe4 l\x90 )\x19b\x0fg\\[\x9e\xe6\xcb%\x89]\xef\x0d\xe4\x9b\x9b^\x8d\x1d'\xf9\x95\x0fE[U\x12\xa4\xc2\x10^X7\x90\xa9!\xe3\x03W\xe9!K\xc4Fr@/\x8b\xd5`J\xbe_\xbay\xff\xed\x06\xf7\xdar`\\[\xdaI\xbc)\x84!\xbf\x19\x87\x1f\x1a7\x7f\x1d+\\lnv;\x18B\x8azR\\\xb1Ue\xe4\x9f\xa2\xfd3)\xdajG\xa0\xdc\x15\xa0\x87\xe0'O\xd8\xa6\xe6\xc1\xb3e\xc1n!\xa9\xbe\xd8Xe\x97\xfaU\xe7\xde\xee\x847\xda\x05U\xf3\xb0\xac!\xaa\x0f\x80\x14\xf1E\xbb\xbd\xaeV0\x9e7\xef4C\x98\x0cq\x0el\xab\x08\x0ce\xf5@/\xed\xd6t\xd4|\x9f\xd6Zh\xbd\xbb\xb5\xa4<`k\x81\x0e#{\x91\xa5\xe4\x18\x82\xba\x14\xcf\xdb3\x9ew\xf9-Zw,\x16y\xf6\x90\xe6,U\x0cj\xfb}\xc8\xce\xa1{\xce$6\xd9,\xd93\x8f\xb4\x08\xd7\xa4(\xc9\xe5m\xfe\x9e1\x8c\xc3\x14\x11\xaa\xe6\xf4\xe2U\xa1!m\x8e3J\x8aw$\\\x1bZE\xd7\xe6FYu\xab\xed\xba\x1a\xadp'\xfc\xa0\\&\xc93\x93g\x0f\xfe\xf10_,\xf3\x8c\x11\x03\x05\xe9]\x00\x90'l\x1b\xbf\xb4Q7\xaf\x9fU{\xc9\xc7\x10\xa6C\xea\xcf\xcd\xf5\xff\xce\xfcfa\x8f8\xc6x8{\x042 U\x95\\\xf1:\xb9\x0dd\xcc\xb1\xaah\xcb\xa4\xa33j\x14kUQ\xa1\xc2\xc9\xee6\x86\x02\xe5^M\xe3FL\xccN\xcb\xca\xac\x9b}je/\x08\x1a\xca\x1c\x86\xab\xd9\x9c\n\xd7\xe1\x9d\xb2\x02v\x8aY\xcdr\xd6\xc2&\xd4\x12\x14\x86\xdb\xe4\x14\xf5Y\xf4\xadp\x91<\x1c.\xcc\x164&n\x97S7\x94\x13\xd7_\xbe\x00 \xca\"\x1a\xa7dA2|\xbfM\xb28\xbf}\xa3O+\xdb\xef4@\x9b\xaer\x99gq\x92\xcd>\x94D\x96\x93\xfaG\xd6\x1c\x9e\x0f\xcfxh\x9c \xcbc\x82F\xfd\xfb<\x8c\x1c\xc9\xf0\xe0i\xe8(|\xab5\x8e\xd0-t\x9f\xaa\x163y\x10\x85\xd9\x87\x92\x1c\x9d\x9dT\xe0\x1b\xe7\x11\x1a\xef\x06\xc9b\xc9{\xca/'\x9f<\xb1}\n\xe6a\xf9\x96\x84tUH\x7f'\x1b{\xd6z\x94\xcc\xae\xe3\xf8\xa8\x1d\xdc\x98\xd9\xed\xef\xbekB\xcdwp8'\xd1\xa7\x92Af\x98q\x81?$%\x94\xab%[_\x1e\xc0\x89\xce \x08.IP\xc7\xe82=['E\x9ea7\xb4J\xf56N\xcf.\xc7#\xb8\x9c'%\x8f\x0f\x95\xe5\x14n\xf3\xe2\x13\x08\xa3\xbd\xf4\x0e\xa9\xce,\xcf\xb6f\x8c\xc6I\"\xde\x13\xd6\x8fh\x0ea \xbf\xf1H\xca\xbf\xf9z\xd5\xbf\xa1\xb8\xee7\x1f~K\xf30f\xff\xd1\x08\xfc7\x1f\xa3Q\xfd\xc6\x1ds\xfc\xd6\xd7\xc1\x1f\xf3\xa2\xc8oK\x98\x16\xf9\x02N\xf2\x98\x14Y\xf2\xf7\xa2\xaf\xd4\x1f\xd1^\x14\xfe\xc1\xb5\x0f\xbe\xd6\xd7%\x17\xab\xe94\xf9\x0c(D\x84L\x98\xaf\xcf\x02p\xa24\x89>9z\xbdUE\xfb7y\x9e\x920chq\x89K\x8e\xab\xc3\x16\x07\xd7@$\xa2\x9c\xb7\xb1J\xed\x1a\xa51AU#c\\dE\xedenW\x90\xb036\x0b\xd3\xd6\x874\x89HV\x92z\x9a\xe0Y\xb0\x13\xec,\x0b\x02\xee\xe1\xaa\xa4\xf9\x02~\\%i\xec\xc1\x1789\xbe\xd4\xcao7\xde}\xbb-\x9e\x8eL\xd0~@\xddS_\xbe\xf0[\x82\x0d\xd7 \xe3\x18\xe7Z\xd2\xc8\x0e\x83Z\xb9GjVA\xbfY\x91\x1c\xb5\x93g\x0el\x9a\xfc`\xa1PP\xad\xecM\xbbOF\x92e-\xae\xa0\xab\x8d\x1a\x15$\xa4\x12=\xb9N\x9c\xacM\xea\x1daP\x12z@i\x91\xdc\xac(q3\x1f\x84\xb3\xe47\x8e\xd0\xfe7\xaa\xc2\x84\x93\xcc&2\x05\x85\x9d@Mb\xae\xbdr;'\x95\xd8\x0c\xa4~\xf2\x10\xac\xc2\xef\xe6\x03^\xde\x07\xe7Y\xb0\x83\xaa\xd6\xc9\xa3!\xd3\xd6\xd1}\x90\xd2\x118aJ\xffL\xee\xf4\x90\xbayF\x8b<\x1d\x81\x13\xd1\"m\x7f?!4\x1c\xa1\xdb\x82\xb0\xfd\xf1b\x9eLY\xcd\xa8W\xcd>\xd7C\xb0\xd0:\xb6\x03\x0e\x0dW\xb3\x90&k\x82\xf3\xd3\x86\x12\xf43v\x92\xc7\xc94!\xc5\x05\x0di}\x8d\xd4\xfe\xd4bO%\xa0\x16\xad\x1b\x83\x8aS\xc43dc\x83\xaa\x90PC\xc1\xb0\xf3\xbau\xcd\xf2\x08K\x99\xb9\xaf^\x1b\xd4_2\xf7e+=\xe1j1\xbb\xdcv\xf4\xd9k\xfc\xf7t\xf7\x95\x1e\xfd\x9a\x8b\xe4w\x9f\xeb\xe5W\x98\xfe\xec{\xb3X\xbe4b\x151d\x93h\x92S\x18\x93\xdd+!\\\xa7\xe8\xb5\xf8\"\xb9I\x93l\x86\x1eu\xa6IQ\xd2\xc3y\x92\xc6\x86)_\x8b\xab\xf6\xc4\xedc\xafH\x90d%)\xe8\x8fd\x9a\x17\xc2\xb1D]\xa1q0\x91\xad\xaeB\xd4\xc58\x0dQ_\x8b?3\xe94XM\xb7Z3\xb3ob\xdcl(07+\xeaTaK\xec\x840\x8fI\xa4\xcc\xb8]\xb8\x95\xba\xdc\xee\xba\xe0\xd7\xf7\xdc\x82\xbdCk4\xafh_\xf5\xd1\x88g\x1c\x1cZ$Q\xb4\xdaA\x91s:l2\x97\xd6\x03l\x88\x1c\xae\xba\xcf\x9d\xec\x1a\xee\xdfb\xac\x1b?\xef\\\xf1;v\x12\xf0`\x9b\x08\x89-\x0eK\x0355+\xed\x1eFl\x83\x89\x8e\xe5\xab\xc4\xef\xddK\x87|P\xcfR5\xfbZ\x0cc\xfc\xe6\x0861\xa3\x15\x8b|U\xa6w\xe7d\x99\x86\x11a$?\xe3\xe3N\xc2\xe2\xd3j\xd9DS\xeb\xb6k\x8c\x9e\xf2-\xef \x05\xcfuD\xd2d\x91P\x12_\x92\xcf\x03\x0d<\xe4\x84\x11\x8571K~\xf9\xbda\xe7\xb4\xe6\"\x1c\xe8>\x17\x9e\xa7n\xe1\xeb\x14\x08\xeb\x19\x8a\xf6\x18\xe4\xe4x=\x02\xfb\xe0\xae\xf0\xde\xcf\xf3!v\xf9u(E\xd5||\xeb\x95]-\x8b<\"e\xf9\x01=\x14\x97\x03\xc4e\x0d\xeb\xae\x9d7\x90)\"\xe67\x90\xd9u\xab+\xf0\xb2\xea\xabHS\x98\x02oXm\xf5@\xa5]\x7f|z1>\xbf\xbc>98\xff\xf3\x87\xf7=j\xf6\x88u\x0b\xe9\xd8\xc7\xe7GJ\x11\x84SJ\n6\xa7}\xd1\x0d\x06\xd9\x05\x9c\x9c\xfd<\xbe\x1e\xff\xe5\xf8\xe2\xf2\xf8\xf4O=\x1d\x9a\xf2\x0eL\x85\xb8\xf6\x9f\xd4\xa3\x8b\xf1\xc0\xf9 \x1b\xf3\xf3\x18M_\x8e\xffry}xvz9>\xbd\xeci|\xf5\xe8\x8d\x9f\x8fq-N\xcf\x8e\xc6=m/\x9b\xeb0T\xc9\xe9\x9e\xf2\x9a5\xa6>\x88\x1a\xb3{\x01\x9a\xd3\x05#\x9f\xe7\x94.G\xdb\xdb\xb7\xb7\xb7\xc1\xed\xb3 /f\xdb\xbb\xaf_\xbf\xde\xfe\xcc>kd\xf3\"\xa4s{\x99W\xdb'!\x9d\xe3\x9f\x93wZ\xc9r=3\x16{\xba\xb3\xb3\xb3]\xaeg\n\x01\xfe8C\xed%u\xd5\xe8\xe9\xb5\x0d\xf6\xc9\xc5\xc1r\xc9\x10(\xfe@S\xde\x0f\x19\x0f~\x1f\x85\xe9[y>*\x94P%\x826\xaa\xbfvV\xd3\x1f\xd6N^L\xa9\xad\xb4aI\x17\xac\x8e\x1e\xdb\xdb\x8cQ\x8d=s_\xed\xbc4\xd0\xf1\x99\xfb\xf4\xc5+\xcf\xcd\xdc\x97\xdf{AR\xfe\x1c\xa6I\\\xc9\xe6\x1a\xb9CE\x19\xdee4\x7f{\x12nV\x94\xe6\x99\xd9\xaf_4'\xd1\xa7\x9b\xfc\xb3\xf9k\xb2\xc0\xf8\xfe\xa6O\xf3$\x8e\x89\xa5\xd2\"\x8c\x93\xdc\xf2\x89\xa0\xed\xa6\xe9S\xb9\xbaY$t\xd4\xd2L\xb6i \xe9\xeb\x8d\xe2\xee\x0dv\xc8\xe3\xa0H\xfc.\xc9>10\xac?`x\x04\x99\\\xb8\xce\xab\x97N\xaf\xae\xb2\xde\xcc\n\x95X]\xadR\xa9\x9f\xc8\x93\xf2\xec\x10\xe5mR\xc7\xfc\xd5\xab\x9ev\x0c\xdePZ\xed\x88Q\xf5\xb4\xf4\xba\xd1\x92\xfc\xc5\xc002\x9a\xd2\x8a\x88\x11Ch-P\x18f2\xa1\xa8\x93\x19N\xb8.\xd6\x15\x17N\xcb\xee\xf0\xb7\x82\x84\xf1Y\x96\xde\xf1\xb78)\xc3\x9b\x94\xc4\x8c\xbcb\xfd\x1f\xa1\xcb\n\xe1 \xeb\xd7|%\xc3\x83\xc6\x10\xc2o\xd8\xad\xdfX\xd2\x12h\x0e!\xa3y\x160MH\x1a\xc3mB\xe7\xf9\x8aB\x98\xc1o\xb2\xc1\xdf`\x1efqJ\x8a@\x91\x93\x16$\x8bI\x01!\xb0\x8el\xe5\xac'XC\x00\xc7\\\x90\xc7\xeb+\xe7\xf9*\x8d\xe1\x86\xc0bEY\x171\xd4\xfeo\xc22\x0e\xbd\xf7\xfd\x16\xc0\x19\x9d\x93\xe26)\x19\x99@(\x90\x84\xbd\xab\x1d\xc8\x0b\xf8M\x8e\xf8\xb7\xc0d2n\xd9~$~\xf8\xfc?\xe2\x94\x8b\xbe\xfc\xb7\x98\xf4C\xd1\x97\x7f\xd2\xb4\xcb\xd2#H\x026\xf3\xbf\xeb\xc8?\xb5\xda\x13-\xdb\x9b\x16u\xc8m|\n\xbf\xcb\x99\x11\x94q\xdb\xfc\xbf\xd3J\xb0\xe5\x08\xe95\x9b31\xa9\xdc\xff\"\xe4S\xf8\x8d[~m\x82\xf3[\xd0\x0ckh\x94]::m\x00\xa2Oq\x0b) \x18\xbc/\xf2%\x1aE\x0c\x83\xcc\xa62td\x03^6\xbe\xc8\xa4\n-%\x16\xd1\xa4\xb8b\xc74\xe7\x9a\x1c\x06\x88\x8e/\xee\xeb\xf2\x0e\xcb\xa9D\xf5\x89\x83\xe0\xcd%\xdb\x89\x0c\xfb\xc7\xba5\xedV\xdb\x99T\x99\xafP\xd5\xdeN\xde.u!\x81|zI\xd4&d\xcd\x08\xfdY\xc7\xbe\xa6.V\x9a5\xf5\xf1\xb5\x8f68(\xbc\xa8\x12\xff_\xf6\xfew\xbdm\x1cY\x18\xc4\xbf\xf7U\x94\xf9;\xa7\x0f9\xa6\x15\xc9v\x9cD\x89\xe3\xe3v\xdc\xd3\x997\x89sbg\xfa\x9d\x9f\xc6G\x0f-A\x16'\x12\xa9CRv<\x93\x9c\xeb\xd8o{\x0d{\x01\xfb\xec%\xed^\xc2>(\x00$\x08\x14H\xcaq\xf7\xf4\xec;\xfc\x90X\x04\x88?\x85B\xa1\xaaP\x7f\xc4_\"X\xf5\x8d\x15\xc4\xdf\xee\xfb\xc4\xa6=\x8d\xbd\xeb\xa7\xea\x11\xaa\x8d\x84\xd9a\xf5Z\x1f\x81|\xdd4\x06i)vVn\xc6V\xc1\xb7+$T\x94Ql\xd7/\xe4\xfd\xa9\x1c^m|M\xb3q\xb4\"\xab\xc8vJ\xf2{\xa4\xfd\x10\xce.*\xf8\x1aFI\x10?\x1c;\xd5!\xb1\x08\xe8\xfd\x12|\xa7\xe4\x18\xb7\xcc2\xfb\xe2\x1f*\xf5\x8c\xa9\xc4\xb1]\x88\xa0\xd2f\xa0\xda)cI\xa9\xd5\xa0k7Z\x95T\x15N\xab\xcb\xd26|UO\xe5\x98\xb4/b*\x90\xb3@\x92L\x96\xc8h\x18\xc4\\@\x06\x8f#\x8a\xc4M\xb6\xc1\xc1\xaa\xa7\x95<\xd0X\xf0\x0dv\x06\n\x0bd\xae\xd6\xca%\xabN\x83\xdd\xa6)\x0e\xb9\x8f\x95\x8a2q\x9f\x8e\xcc\x87\x16\x0du\x00\x8f\xb0\x0e\xfeQ\xf0}\x82\xdc*\xda\x1f\xa2\xa0Xa>9\xe5FB\x80N-\xa2\xa4\xba\x9a\xec\xdbwFZl\xb1\x9a\xcf{i\x16#\xec\xc2\xedZE\xadV\xd1z\xff)\xa1\xfb\x89\xdd!%\xb2q\xdc\xa8cjW\x84\x87\x90\xb4\x10\x15\xe1\x04\xc4\x0fg\xcf\x9aK\x08*\x00#\xcd\x8a\xf89\x06Q\xb2\x071\x03\x7f+\xab\xdc\xb3G\x91H\x99\xb9\x95\xfal\xc4\x7f\xa1\xaa\x1e\xffp\xdf\xf8\x96\xd06\xd6\xef^\xc8\xd9y\xc1\x15\x9c\xeb\x0b\xb75\x10\x7f\x132\xa6^\xb7\xd0\xea\x12\x17\x8b\x18\x81'\xab\xaca\x85\xbd\x94\xbd\xceU\xd0I\xd7=\xb7B\x1e\x12b\xf5\x10\x91\x88wUl5\xfe\xe6\xa8^%\xb6\xaa\xc40\x84Z\xfcG\xbc\x8dV\xe9\x9a\xd1T\x07\xff\xc4\x97\x9f\xd8\x9d|\xf7\x89\xdd=\xc4Z\xd17\xcb\"Tf\x1bAV\xac/M\xaa\xbdCo\x08\xdea\xdf\x11y\xd1\x1bb\xf1\xae\x9d\xba\x9bH\xf8\xa3\x80\xfd/\x9c9\xf6=4J\x08\x14u\xf7\x1f\x8d\x0e\x87\x97\x8f\xae\xc3\x0e\xe7\x87\xbaZ\x1e1\"\x96c\xa3._\xc5\x0f\xfdV\xa0\xf4q\xda.\xa0\x1c\xee\xf2\xe2\xe1&@\x11\xe0\xf0U\x8466\xea\xa3\xb7)\x87\x95\xf8\x8dQ1Y/__ D\xf4w\x05\x83S\xbd\x18\x04\x81\x06M\xff\xb0\xff\xe5p7xx\x80V\xf8J\xd3\x8a\x07 \xce\xec\xe2\x8a\xf6\x0fP\x916\x18\xec\x9a\xd7\xe6\xf2z]\xde\xab\xef\xef\x05\x9d=\xda\"BN\xec\xb1\xe4\xbf\xd6l\xcd\x04\xdfP\x8f\xccm\xb7@h\xbbJ\xdb I\x94\x1a\xcf?\xfd\x14+\xe8C\x0csQ\xa9\xb8\xe4\x82\x8ah/z*B!\x11\x014\xb3\x8e@\x92\x04fF\x8a\x8e\xf2\xf7\x0b\xd8\xed\xe3\x95\xdb6x\xe0\xf3&\x86\xc0q5\x93a\xaeB\xf0\x02^\x16x\xa0g\xffs\x87\x16p\x9d\x1fh\xeb\xed\x1a^\xa2\x0e}\xad\x03\xbd\x01\xdb\xed?\xce\xdf\xa6\xeb\xa4h\x97\xa0\xd4R\xd1\xfd\x83n\x86RH3\x94\xdeXH\xfclZ\xdaT\xd77\x89!I d\xaa\xecr\xbb\x08\xed\x8b2\xd9k\xe9\xbc\x88U\xed\xe1\xa9mc\xaf-\x94\x9cEu\x84\xd2\xeeb\xbd\xf1\x8a\xa1\x95\xa9\xea,\x87#\xea\xad\x08\xbf\x88\"\x13\xf5\xcd!\x8c\x8a\xcb\x10\"\xebB\xbb\x11 \xaf\xa51^\x07\x11\x93\x91\x03%\xdej\x03\xa5\xbe)\x07\xda\xecM \x07\xfac\x9aM$-\xe8\x8aM\xf4bH\xe3\xder@Z\xc3(\x98\xf0\x11\x15fJ\x0crH\xf2\xe6\x1e-\xaa\xba!T3\x9aH#\xf4rd\xd8\xf0\x7f\xf0\x9e\x14\xac\xaa2\xbdo9l=\xc1\x82\xa6\xd4\x97\xbf|\x02\x99\x85\xf5_\xd5\x90\x17\x84\x9b\xa2a\xd2\x80\x86\xc9e \xf0\xb0\x0b0\xcfYA\x01\xd2\x05\xc5\xc4 E1[?\xa1\xc0\xf8\xe5\x0b\xd0\x05\x870\xba\x0c\x02\x85\xb0|\xd4\xa6{\"=jy\xe3\xe4\xd8=\x0e,\xa86\x8327\xc7h,\xac7\x96\xc9\x0e\xf9\xf9\xdb\xbe1\xcc\xe5\xec\x0093\xd6\x99.\xf7I]\xc0\xee\xae\x87#\xe7\x07\xea\x86l\xc77x\xc9'\xfe`/\xa0\xb8\x90\xbd}\x9a\x0b\xe1<\x86\xee\xaf\xa9\x8f#\xbd\xff8\xba\xdd\xed\xdeT\xc1\xdeP\x928I\xa7\x8c\x16j&\xf3(\xe3\xa5h/\xccP\x1b\xc0yI_(\xbaU)^M\x0d\x84?ARZ\x06\x0e\xf6\xf8\xde\x92\xc8P\xc0\xcbC\xd8\xdbE\xd5\xc1^\xa9[(`\x08\x1bJ\x9a\x15h\xad<\x15\xd2\xc5`\xf7)y\xdd\xbao\xde\xc2b\x98\xc7\x91`\xa1${si\xb0\xe3k8\x04u\x0d]\xe9V\xeaurB\xfbR\xaf\x81q\x0e\xcb \x80\xf5\xb2 \x86,\xa8+k\xec\xdb\x89\x85\x90\xeae\xde\xc3M\x97[\x18a\xf3\xf7\x18\xaa\x8b\x05|\xdfD\x8dJ\x0fdf,\xf2\x84\xe24\xa15\xe9\xd3\x0c\xe7\xa4\xd4Ex\xb5\x8c8\xa8$\xd2yO\x1a\xf7\xaam~X\x0f\xfe\x9e\xe8w\x01\xc2\x8eK\xf4\x94\x04\xbc\xea\xec\xbe\x08\xb5\xfb\xecI a\x8c>\x83j5\xcff!4\x82\xbe\x93\xbc\xa2\xf7\xe3\xcaJ\xd3\xb2eA&1\xd2a\xe7\xb3\xde\xd5]\xc1\xde\x08u\x12\xcd\xf8b6\x9a\"\xe8\xe5\xac\xf0\xc5\x0f\x0cb\xdd\xe6\xdec\x8e^\x05\x87\xc4\xf5\x9b\xc7yo*\xe6\xa5R \x0e!\xe2EJmm\x16\xba\xc1\xa0\x00\xaam\xfc\x01n\xf2G\xfa\xc6\xff\xef\xbe\xd8\xf8\xfa\xbeG\x94\xc4\xa8\x0b\xc5\xfc\x03\x9b\xac\xb3<\xc6$\x86\xebP\xf8r\xf1\xf7mWB\xb8w\x8d\x8dk\xedX\xc5\x95H\xaabs\xab\x9e\xa7|(\x84s\xb8f\x1c%\xe84z\xda\xce\xd2u\x82~\xbcY\x9a\x16\x8e\x9c\x98\xe6~\xc6I\xce\xa3\xfc\xa3BhmB\xc0\xec`\xf3q\x15\xc4\xb0\x99{\x16&B$fuq\x8e\x01\xcb{ \x94\xfe&u\xec\xc5c\x90\xfc\x1a\x14\xf4}\xe4\xc0\x02\x02\xd9\xd4\xf3\x95\xcc\\V^\x94\xb9\xc6\xa7\xae\xdbb\xdf\xb4u\xd5\x9f\x08\x15\xaar\xd4\xeeyjg|\xd4qV\xe9(\xb9l\x99\x18\xb9\xdb\xaa\xe4w_\xeb\xb2~3\xef^\xa2E\xa1\x19(;\"yH\xc3\x12\x91\x92\xbdL\xf9\xa9l\x9cD\x96,\xe1K\x89\xb9 \x12\xf9\x13\x0fl.\x89\xc8\xdfe.fyh\xf0wE\xc6\x98\xe5\xd8EN\x14\xcd\xb5Y]B\xf0q\xdbh{\xa3\xe8!w)l\xb1:\xc6\xd0\xa8d \xcb7Q\x08\xef\x83\xc7\xa6\xbeD\x08\xefOLY_\xba8\x0e\x1e\x93.\x8e\xcf\x06OZ%\xac\x86k\x04\xce\x06Q\x97\xc0\xbc\x81]G\x19\x17\xf2\xf7\x1ce\\\xc8\xdfw\x94q\xf1\xfe\xc0Q\xb6\x82Cx\x0c\xea:\x9cH\xa2<\x05y\xfd\xbd&iV9\xd9\"\xe4\xb4w\xde\xc8D\xdf\x84\xb0\x0c1\xd1\x1bnKL\xea\x96\xfa\xd7A\x08W\x98kv\x8d\xd9\xe4\xf6\x82\x10\xc6\xfcL\xf1\xef*6\xfbV\x90\x99S\xf4\x05?\x82)\xefo\xccE\xa4\\\xfd\xeaW\x06R\xcfa\x0c/\xe1\xf69\xdc\xba\xb6*\xdf\xa6\xfe\nc_p\xa2,\xa3\xe4/\xe1\x10\xae\xfc\x1b8\x84\xbb\xd1\xede\x08\xb7!\xf0\xc1\x99Z>\xb3\xa1$\x80\xd3\xd1-\xe7\xf5\x974\x11\xe1OI\xc5\x96A\xb7TA\xa0\x18\x9a\xbdf\xbf\x17\xd0\xcfjw\xff\xa0\x9a{\xdc\xb9\xb9\x9b\x0e\xad\x1dtn\xed\xb6Ck\xbb\xed\xad\x9d\ny\xe5\xc6\xbd$\xda\x891i\xe4\x7f\x14\n\xc3\x11\x17K\x86\x80\xd9\xf5&p\x04\x13\x18\xc2i\xad\xba\xe9\xeax/\xcd\xa9\x14\xdb\xc4a^j$\x8a\x10\xbc*\xd3\xb7g\xfa^H\xd3z\x9d\x0d\xe3T\x13Sv\xa5Y\xfcW\x95\xde\x1d\xcf\xdf\xf2\xe5\xf1\x04\xed\xca\xa4-\xda\x0fQ\x1eO\x8e\xd7\xc5\x9c%E\\\xa6bpV\xff1\xcd\x96\xef\xa3,Z\xe6F\xad\xd5jA~\xfe\xbeJ V\xf4V\x19;V\x05\xaf\x97\"!1\x16\x9c\x9c\xbd\xfb\xf1\xf5\xef?~8\x1d\x1f\x7f\xbc\xf8 _\xfd\xf1\xf8\xcd\xebW\xc7\x17\xa7\xf8\x83\xbf=\xfb\xf0\xfa\xff\x7f:>\xe3\x7f\xee\xe2\xcb\xf7\xb2\xbaU\xf0\xe6\xec\xf7g\x1f/\xea\x1f\xe2\xaf\xf3\x9f\xce~\xc6O\xc6\xef\xcf\xde\x7f|\x0f\x87\x8a(|W\x81T\x86\xcf\xf5\x13\x7f\xff\xb1yE\x9f\xca\x92\xdd=\xea\xf2\x1e\xbf\x19\x04\xb5C*\x9f\xa7\xb7\xaf\xf8\xa2\xc6\x1c4\x9d|\x9e\xecm_`\xea\xf9 A\xa1\xa3\xbbE\x1aM\x87\xcdbG\xb9\x16\xdf\xd2;A\xfe\xbb\xf5\xbeH\xaf\xd3u'V\xdf\xd5\xf5\xea\xbe]\x97\x13?\xe3\x7f\xed~\xcb\x18\xa6\xf7\x1d\xc3\x04\xa3=\xaf\x05\xe2\x7f\xcb\x08\xe6\xf7\x19A\x1d\xb1#\x85\xbe\xfdg&\xfe\xaee\xd1\x9ee\x96\x92\x0bV\xa7OZ\x9e\x10nEJn\x13&\x1e\x15\xf5\x92\x8a\x1c{zJ\xacv\xcf\xa26\x89\x89c'{|\xab\x8dW\xe9j\xbd\xf2\xec+\x8c:%\xf0J\xcc0\xaa\xae\xea\xf4\xc3\x13\xc8kT\x9ab\xcaK\x17\xf9\xf1V\x19\x1b\x97\xed\x8fSD=/\xa4\x89\x98gU4\xa0?\x17}i\xc4\xd0S\x17\x97\xd8\xa6E8\xbd\x12\xe1p\x10^\x8d\x1a9\xe8o+NV\x9c\x1c\xc5\x95\x94\xcay\xdcp\xc7X\xb3!\xe2m\xd1cY\xd6XKx\xd2\xf3\xc6\xe8\xf2H\xc4,K?\xb1\x84\xae ,\xa8\xa5[#]e!\xf2RM\xe6l\x19\xd15&\"\xc2E\xb4t\xf8\xfb\x8b\x9b\xb1kV\xf8\xdel\x91\xdeR\xe1\x82d\xc4\xf4uO\xe2x/\xbf\x8d\xae\xafY\xf6\xf1\xf5\x076\xc5\xb8\xcf\x822\x85\xe0E\xe51+t\x063\xcep\x88\x1c;\xbd\x84\xdd\xf2e;\xcd\xcc\xa4\xfe\xea\xe1\x8d\xbc\x9e\x92G\x04\x7f\xf2t\x9dM\xd8P\xe5\x90\xa7\xe1\xc1n\xd8b\x08\xdem\x94%qr\xed\xa8%%\xc1!x\n\x8f\xc4\x91\xbf\x8c\xee\xe0\x8a\xc1\x1a\xddgCXEy\xce\xa6\x90\xa3y\xc5m\x94\x83\x88\x0e\x86J\x8e\x9ce7,\x83\xf7F\x95\xe4\xdf\n\x89ml*\xc2|a\x1eRQ\x9b\xb0C\x0cB\x88z\x18J\x0c\xed+~M\x10a\xafm\x00\xf2\xfb!\xc4j\xdd\x03?\xa2<\x821\x13\x97qH5\x0c\xdf\no\xa8\x1e\xdc C\x88\x88.\\$U\xa7\n\x14\xaf\xf6\xeb\x92\x04\xd6\xb8\x11c\x11X\xc3\xb9\x11\x059(\x13\xab\x91u\xd62\x84\x87\x98\xa0\x9b$Tu.\xac\x8bt\xf5L\x84zu\x11\xb3\xa4x\xedhk\xa6\xd59g\x93\x8c92\x9b\xaf\x9c&\xba\xfc\xb9\xce\xa2\xa4\x18\x8b\xf3\xdfS\x03s`\x1e\x7f\xf2I\xca\xabrp\xa6+\x96K\xfbF |\x16\x01\xac+A\xf5\xa0\xc7\x9e\xa3l.}\x15\xcd\xf7JKy\xc5\xa5 A\xc0\x16p\x04\xf3^\x9dL\x1c\x82\x87\xf2\x06\x9a_\xf2\x1d\x92\xf7\xae\x8a4\n\xfc\xa8\xcc\xf8\xba\xc6\xbbM^\x96V\xbbgEy\x9d\xf3G-:\x89\xfc\xae\x8f\x14 \x87\xb0&\xe9\x8a\xcc\xc1[\xce\xc2\x9f\xa0\x06`*\x97s\x1cs\x08M\x82\x10f\xf5\xf79\xae3\xdf<\xe8\xba\xd5y\xf2\x93r\xf2\xb3\x00\xd3\xec\x99\xf2\x9b\x83&\\\xa5\xd3\xbb\xa1ji\x1d/\xa6\\8{\x15\x15Q\xe0\xaf\x1c\x8a\xcdu\xb6\x18\x8a\xe0\xce\xbe\x87T\xe3c\xb60Y\x0e\xf5\x08\xb8\xc6\x0eD`\xd1\x94e9\xc9\x96\xf2\x07AH\xb2\xcdPR3\xe2N\xdcI\xafB\xb7\xb0\xf9[\"U\xa9\xac\xc1w\xdf\xb7\x10\xb3f\xe2\xb2\xeeH\\l\x93b\xfd\xa9a\xe7\xb0\xcb\xce\xdc\x84\x8a\xd0\xc1\x00\xd4S#lr\xfbL26eI\x11G\x8b\xbc\x9d\xc4\xa5m\xb4\xcdI\xa3\x1eb{M\xee\xb3e6\xd9{r\x83\xb4\xec=\"r~\xc7\x0d\xe4\xd6\xe9\xb4\xdb\x00\xb98\xf3D\xba:\n\xc6\xf6c\xb6hV\n;m\x8f\xb3\xb2\x8fV!\xa1h\xe5\x1b\x8a\x96\xadVt\xd8j\xc57o\xb5\x1a\xbaG\xfa\xbe\x1bO8\xc7\xefF\xf7 f\x08(z\x13g\xd81\xac\xa5\x0e\xa6!8`\xa1\xd5\x12\xc7\xd4\x10\xd6\xee\x9aj\x11\xc7\xeb,\x1e\x12V\x04\xd0\xb8\xc3\xb2\x07\xd8af\xd2U\xf5\xb4\xef\xb0t\x93\x1df'\x9c\xbe\xd7\x0e\xa2\x95\xa8\xff\xdcJ\xb5\xe7a\xb6\xd2o\xe6\xd4\xfa\xbbm\xe3\xbf\xff\xe6\xbc\xff\xf1\xb7\xd9\xe6\xfc\xa5\x8e\xbf\xeaZ\xe4\xc1x\xc7\x99C\x13%\x90\xfe\x9a\x152\xeb\x1f]+\xef\xc6\x7f.:i\xcf\x84\x824\x8d\xf2\xbds\x0c\xae\x9e\xbaR\x15 \xbdh\xbeb\x93\x96\x8a\xabrx-\x15\xa7Ho8\xe68\x96\x0e\xcbQ6\xa0+\xdc\x94W2(}\xcd\xe1\x08\xfe\xf6\x15\x9cR\xc6\x12\xdb\x93\x08AW\xb9\xae\xb7\xb8T-.\xe9\xeaw-\xec\xf9\x95\xd05dD\xa4 \xfe\x8c[4\x97\xb7p\x08\xfeJ\xc3\x07\x1f\xad\xe2\xff\xf65\xe8E\xd3)\xde\x11E\x8b\xff\xe0\xf0\x11\xd6\xfa\x82-\xa3\xdb:%\xae\xaf\xf4\xb2Y/\xce\xcf\x8e\xcf\xf7\xfc\x80\xcb\xb0\xfd\x10\xa2J\xa0\xbe\na\xd2\x13\xb1\xf7\xd9\xf4\x1cul\xbe\xc8\xac\x0cC\xa2\xee\x8c\xcfXV\x08\xeb^\xe2\xbaU\xd1-\x1c\xd5\"\xf6\x89\xa6\xb2\xaa\xa9\xdb@\\\xa6\x9f\xca\xb4\xf4\x87`\x08\xfa\x7f\xfb\x1a\x82,\x0c\xe1\x96\xb2\xe3\xe3[\xee3\x1c\xc2i\xe9\xd1\xe0;\x88\xc89\xd1\xbc\x93\xa8\xf2\xf3|\x85a\xcc+\xd9\xf2\xd1_\xf24 \xa1`\x9f\x8bG\xabE\x14'!\xfc\xee\xd1\xef\x1a\xa8\xbcw\"\x82[\xee\\\xdc\xad\x98g4\xf6y\xe7\xf6\xf6vg\x96f\xcb\x9du\xb6` ?\n\xa6\xb6b\x13\x04\xb5\xba\xa6\\\xb3z3VL\xe6\x8eY }\xfd\xec\xd8'\x18\xd6i\x08\xde*\xcd\xcd\xdb\x0c\xf5\x94d\xf5\x9c.\x97\x12\xfd\x8dc_\xe0i\xe18\xf9e\x9c\x1bt\xf3\xe2`N\xb3!\xac\xfd\xa0g\xbfw}\x9f\xaf\xd2$gD\x03V\x81\xd5\xc0\xd7\xa0\xc7\xf92\xbf\x99[\x02\x8d+\xd3,KYo\xcaO<\xf7\x92#\xf5\x97.\x91B\x1b\xfd\xe5\x0bx\xaes\x0d\xd4\x15\x88\xfc\x02;9\xd5>\xa3\xed X/\xfd\x84\x0e\xcc_\xbe@\x06G\xb0hWw\x83\xa6\xf2v\xd0Z\xe8\xa8\xd2\x86\x8e\xeaqhP\x7f\x13\x16\x85\xa0T\xe0yG\x158\x94\x8c\xc1\xd8=\x00\xa9\n\xb7\xf9zP\xdd\xfd\x03\x00\x8f\xf5\xf2\"*\xd6\xf9\x05\xfb\xec\x9a\x08\x85\xe6\x98\xaai\x03<\xaf\xacQY\xa0l\xfch\x04D\xcb\xc5r\xb7\x89\x9b]\xf5K\xec\x90\x06\xae\xf9\xa6\x0c\x00P\xfb\xc4m\xf2C\xe7\xa6\xd2\x1f%\xdbh!M*\x17\xad#}\x03\x8bL\xa4\xcd\xe6E\x99\xdc\xb9\xc2sp\xfb\x10\xbc\x10\x98H\x16%\xc2\x04\xe0\x0ft\xee\xc5\xbf\xc6S\x96O\xb2x\x85b\x9e\xfe\x91\xf6\xbe\xf6\xa9\xfeA\x93m\x92\x96k\xcb\xf6\x0e\x02\xa0|\x86\x00\xfd\xec\x7f\xf3\x18\xbd\x01\x1a\xd7^\xfd\xf6l\xab\x10\xad\xfe\x14-\x17\x82\x81s\x99\x10\x95\x19\xa7\xc8\xe8\xbb\x98k*\x15!U\xeb&\x12Y\xb3\x89\x84\x91\xbb\xb6v\xb7o\x0d\xac\xd1\xd8\x94\xdedR\xea\x89\xab\x0bk\x0c\x87\x1cM-g\xea\xc6\xc4p\xb2\x19\x91\x0fT\x13X8\xa2^\xcc\xb3\xf46\xe1\xa8\xaa\xd3\x9f 4q\xfe\xb7\xb7\xf4\x8b4\x9a2a\xc8vq\xf6\xfb\xdf\xbf9\x1d\x0b\xeb\x8bs|\xf5\xf1\xfd\xab\xe3\x0b\xfdU3^\x98\x16\xc5\xbf\x14Z\xacUh\x86Flh\xb1=\"\xb4\x11\xa5\xed\x91q\xd2s\x0e\x9e\xd9 *PrH\x16\xe9\xf5\xf5\xe2\x9b\xcc\xd1\x08\xe5\xe5}\xac\xa1\x88e\x93\x064\xf9X@\x8ep\xc9&\x96\xbf\xfcH\xcc\xcc\xd3W\xa0D\x9br\xb2m\xba\x86\x1a\xfd\xbf\x07\xf6\x97\xafK;\xadL}D\x07AG\x03\xfd<\xc3\x8bmi\xae\xcf\x92\x9b\x9aA\x7f!\xcd\x17\x95\xc9?\x92\x1b\xe4e\x95}?\xe7\xbcr\xcd\xe0\x7f\x95\xe6\xc20[\xfdz\x1bq\xc1M\xf5%\xed\xb7e1\x9e\x9e\xd6Z\x90j\xe3\xf1U:\xbd\x1b#\xf6y\xb6,e5&\xb3T\x8d/\xfe\xf4\x9enN2Vx\xbfk4\x18\xd5\x1b<\x7f\x7f\xf6\xee\xfc\xb4\xa9E\xb1\xd3\x9b\x9a\\\xd7\xe1\xc5\xc14\xfe\xe3\xf1\x87\xd7\xc7?\xbc9%\xe6,\xa06\xbe\x91\x08/\xa7\x8d-\xde\xeb\xd8\xbf\xd1\x02\x95R1\xc2\x12\x7f\xb7O\xba\xc2\x0e\x1e\x9b\xf1\xad\x84/\xecc\xb3\xbap\x85}b\xbe\x16\xee$\xfb\x8f\xcd\xf0\xa8\x0b\xe19kjK&b,\xfbf\xf5\x99\x18\xcc\xb3\xc0\xf7\xe2\x82e\x11Fv\xaaWYq\xfe\xdf\x1f]b,\x14\x8c\x9c\x91p\x8e\x1a\xe2\x04\xe4K\xdf\xf4ui\x94\xd2@Sl\xcc\xe3\xbc\xbe-*\xc8:\xdd}Q\xfa\x9a\x87\xca\xd3\xd5l>\xf7\x13\xacdFQ\xe2+u\x17\xc2U\x08c\xe1\xea\xda\xae\xe0\xc50\x10\x98 \x0b\xf3R\x9c\x94\x9e\x8e'V~Z\xf5tr;\x15148\xe4\x1a\xf2\xad\x89J\x88\x9fM\xd5\x80\x96{\x1b\xebk\xdf$\xec\x16\x12\xe9\xa7\xee\xc8\xe7\xa6\x9eMT\xa9\x9b\x8c\xa8\xfbH\xec\xbe\x08\xf3\x13\xf4P\xc4\x10\xb5\xaf\x15B\xdb\x95>K\x07 \x0e[8<\xa4n\xe3\xce\x85\xd8k\xbd?\x11\xdc\x02\x1d#\x8e?\x9f\xe0\x10NF3\xcc\xfas2\xf2\xfe\xfd\xdf\xcb\x8d\x85\xafn8>\x9d\x8cn.\xed/\x8f\xe1\x10>\xa1\xc3\xb4\x7fC\xdc|\x9d\xc1!\xdc\xc0\x11|\x86#\xb8\xf5=\x96\x14Y\xccr/\x80!\x1c\x97~\xd9\xf6g\xe8\xd4\x85\xb1&\x84~\x1f\xfb\xef\xc9\xafyoF\x82@\x8e\xf5\xefQ\x1f?\x86C\x98\xf8\xefeT6v\x0b,\x08\x02\x8c\xe5i\x86\xbc\xe2\xd5\xc7\x98\xb3\x13?\\\xf8\xe3\x10N\xe55\xb7\xb8\x93S\xa8\xa0\xdf1\x8c%\x94\"^}\x16\xc24\x08B\xf8\xcc[\xc0\xbc_\xe5\x02\xf1\x1e?\x89X \xbc\xf5s\x19i\xf4\xb8#\x95\xf9T\x05c0\xb4i8\xba\xef\xbf\x87\xadk\x0c>\x8f[}\xeb\\,\x90\x1a\xda \x0e\xed8\x08a=*\xb8\xa8z\xcc\xff:\xe5\x7fMC |\xa49\xfc\xee\x9c\xf6ObNC\\D\xbej\xb7\xbe\x9a\xa6\xe3\xaeS\xc4Y^V\xd5\x91n8*\xcbU\x1d\xc2\x19\xb1U\xe0\x9a\xdeV(\xd8_I\x1f}\xfc\xff\x84O=\xe6S\xbf\n\xe1ntuI\\\xa8\xa2\x03x\xea\xa7\xbd\xf7\xb0\x0di\xefG\xf8\x1d\x08o\xff\xf3\x00\xe9\xef\x1d\x1d\x80e\xc3(\xf7\xfa)\xb0\x95\xf8\xfb\xfb\xa8\xd5\xddJ\xfc\xc7\x83\xc0\x9dQP\xf6\xf5\x04\xb6\x0e\x1d\x829?\x80\x0f\x02\x99\x9f>\x04/\xb2ds\x10\xc9w\x86\xedDL\xf5f\x83\xdc\xc0\xb6^\xe5\\!\xefg:\x07\xdaxLG\xc9|B\xe5\x85\xe1l\xc1^\xe0[9cd\xb0\x8d\x83A\xe0{\xafO\xc7\xef?\x9c]\x9cy\xf7\x0e\xb0\x11\"g\x92\x92\x894\x84\xc2\xd2z\xbdp\xc5M\xc3P\x82\xeb\x00\x12\x0ci\x89z{\x7f\x8d\xb0\xc0\xa8\x902\xc4/\xf1\xe1\xf32 \x0e\xbc\x84\xfcy \xbf\xe3G\xc0(\xdf\xde\xbe\x14f2\xff\x1d\xfb\x0bl\xed\xcb\x97\xaa5\x1a=\xcd\xa8\xe2\x9d\x17hw\x10\xf4T\nb\x1a\xa4\x99\xb8\x8fP\x95d\xd0\xdd\xcdzq\xa1\x01u\x0bb/\xb5\x8d\x0e&\x1d\xa7GN\x06\xd3\xac\x07\x8btj\xe4$\x8a\x08\xcdy\x8ca\xe8F\xf1%\x0c\xe9\x13\xc1\x0en\xaf\x07 \xad\x97\x1e\x19\x91\xef\xab\xc3hX\xffL\x86\x88:\x82\x08\x86T\xe4\xf8\xce\xd0\xdf\xdb#\xa0\x9f\x8d\xbc\xf1x\x92fl\xe7/\xf98\x9fG\x19\x9b\x8e\xc7\xe2\xa8\xf7]e\x87\xf0\xb7\xaf\xad\x1b\xcf\x01\xd2t$r8\xfa\xa9\xd0\x9c\xfe\xedk\xd02\x1f\x17=\xbd\x9fF\x91%\xeb%\xcb\xb8\xf04\x84-\x7f\x00\xdf\x03E\x01\x94\xf7\xb4\xaa\xb7\xeb\xa8w\x9b\xc5\x85\xaa\xb3\xef\xa8\xa3\x14#\xb5\x82o\xba\xd8\xa9Z.\xb7\xef\xfe\xe3\xc0\xdf\xd2\xb5\xd4\xfc\xddA\xe0\xcbh\xbf\xe0\x89?\xbc\xa6$\x1a\xa8g\x1e\x17p\x08\xd2\xa2\xaeT\xca\x8f\xe3\xfa\xcdG\xe8>U\xf8\x98\x98L}/\xda\xb3!Rj\xe0\xc71I\xc5\x12xyXQ\xc6#b\x15%L]<\xe34M\x98\x9d\xe0\x15\x86\x18\xcc\x0d2\x91\x7f\xa0\x9a\xdb\xf6a\x19V\x8f:Feg\x04\xaf,\xfb\x19\xd4\xfb\xd1\x10z\xc3cr0\xa0\x03R=\xde\xbb\xefv++4\x05\xd3\x8fC\x88\xc4y(\x17>\xf5\x0bS&V\x0f\x1e\x05~\xe2(\x15A\xa6]\xd1\xd2\xe4\x98rx\x01}\xe1\xd7\xfeR\xb8V28\x02\xcf+\x85\x00\xbeP1\xb6\xa4\x05/\xcc\x83\x00^\xc0\xe3\xc7\xbb\xcf\x0e\x90\xbd\x83\x97\xf0\xf8`o\xf0L4\xb4\x0d\x03\xe9\xa8\xc9iKd}\xcc+\x88\x06\x0e\xf6v\xb1\xf3\x887\xf0do\x7fO\xf6/\xeacG0\xc44H\xe2m\xbe\x88'\xcc\xcfC\xec\x04s\xd5D\xb0#\x9b\xd9\xe6\xe3\xdc\x91\x83z\xf1\x02\x06\xfd\x00\xb6\xe1\xe0\xf1\xe3\xbd\x83_v\xb7\x9b\xfa\x11\xa9\xab1\xb1G\x86-3\xe9\xbeT\xd5\x98\x1a\x9c\xb5\x0c\xf1a\x9e\xc6RWs@\xebj\x06\x96ng\"\xeb\x9b\x83\x94\xca\x9a'\xffT\xd6\x10\xcf?\x955\xfa\xf3Oe\x0d>\xffT\xd6\xfcSY\xf3Oe\xcd/\xa6\xacqjj\x06duw\x18\xd1\x03\xc7\xdd\xc9\xe3\xbe\x83o\xd3\xc2\xb3w\x12DQ\xfcL\xdb$\xa5\x0d\xf9\xca\xb7Q1\xef-\xa3\xcf6\xcf J\xe2\xa4\xc3 \xe9\x18\xb0d\xb4\x19\xf2\\}8\xe2b4l\x83\n\xc2\x19\xfb\xcc\x88\xc9\x0f\x1b\xac\x8f\x9e\xc8#4\xb2\x96\xc4\xb9\x9e1c%_\xbf\xceOK\xb9/,\xd27\xe9$Z0)\x1b\x95)Qpo\x9c\xcd\xbc^\xbeZ\xc4\x85\xef\x85\xde\x86\xec\xfb\xde\xde\xaf\xa2Dq\x04\xad\xdd\xa5\x95i\xc8o\xe5+6A\xfa}\x8f\x15\x95\xea\xb2H.hk\xca\x14\xcd\x13,\xc2CH\xfd\x16Q\x923?\nF\xf1e \x13\xef\xa4z\x92\xf3\xeeh-b\x17\x87J)h\xddR\n^v\xff\x89 \xab\\nL\x07/{`\xf2\xc4\x13Zs\xc2Y\xd9\x89\xca\xcdl\xb3\xb0\x93^\xce\x8a\xd7\xcb%\x9b\xc6Q\xc1l~u\xd2\x9b,X\x949j\xcc\xb1\xc6[a4\x7f2\x8f\x92\x84\x19~\x867X\xe3U\x9c\xaf\xa2bb\x98},m\xe5\xe55\x11\xca\xe7\xae\xed@CA\x1e\x0ea\x9b\x9fe6I\xe6'\xcf\xb5\x99:\x85\xce\x90\x01\x9a\xe1\xc5\xb5\x93\x9b\x95A\xd2x\x85\x10\n\x9f\xf0 \xa8\xbd1\xa6s\xd5\xcad\xdf\xc9\\ \xc2Q\xa5\xdeV5\"<\x96\xa7(D\xae\x1a\x9b\xac\xa5\xfd\x18]\n\xad\xed\xe09D\xd95n\xed\xbcR\xec&\xcf\x03\x95C\xa3,\x1d%\xdb\xdb\xe6I'\xf7\xcf\xf5h{{y\xd9\xb6\xd0\x02(\x7f\xe5\x0c&_\x87\x9b^\x92\xde\xb6\xb6\x86\xb5\x9c\x0d\xcd\xe1H(\x13|$\x93\xec\x16\xe6A\x8f\xd3\xbd\xdd\x10R\xfcc\xd0K\x93*\xb4\xf9\x95\x08T\x1f\xf9qo\x95\xe6\x85\xdc\x85Hk\x06\x18\xcfi\xd2\x8b\xa6\xd3\xd3\x1b\x96\x14o\xe2\xbc` C\x9aN.\x86\xd6\x00r{\x93^\xbc\xe4=\x9e\xa3\x17P\xceG\xd6<\xb5\x89>\x06<@=/\x04\xefw\xf54\x07\xf6\x88|ON\xc8C\xaejK\x8c\x1c]\xa5\xd2$c\xd1\xf4\x0e\x03\xee\x89p|(]/|O\xf8&a\xaa\x15\xf7\x88\xf2^\xb4Z\xb1d\x8a\xf9\xe8}\xed\xab\xa0g\xb7\xdc\x86\xc3y/c\xcb\xf4\x86\x89\xc6\x90g\x0e\xcb}\xea\xf4\x1c\x80\xa6\xcc\x959+.\xe2%K\xd7\x85\x86\x11\x9c\xe9\xa8\xbe\x0f\xeaF\xb3\xd6\xf7V\xa4Y\xa4\xd5C\x98VM\xe0_]\xb9\x15\xf7`\x1b\x9doh:\x8a\xeaF\x9a\x1f\xbf\x19\x02k'\x9b]\x1cv\xdc]\x13\"\x1f\xc8\xae\xdb:n\x81\xde\xa6\xec\xce\x13:D\xff\xe0I{V3G\x9e\x8f\x0cie\xea\x17vj8\x91\x90\xa8-\xb5q\xdc\x9b\xb9\xb2\xfe\xfa\xfd\x10\x92^\xc6\xf2tq\xc3\x02\x8cl\x8f\xa9\xfc\x96\xb1\x96\xdfjC\xc0X\x10\x10\x80yF+\x01\x91\x0dDg\x86v&\x90\xe2\x00\xe9|\xf3\x98\xc7\x8f\xcb\xc9Z\xdaT\x91wF\xb2x[[\x9c\xc9\xf3>\xb0\xeb\xd3\xcf+\xa4\x8di-%\xe6\x86s\xb6\xf8<\x95\xb0\x81\x9c\xf3\xe3{\xe1\x82ZN?\xed\xc9\xab7\x11\x9aA^\\\x89w\x9cK\xb10>\"\xc2\"F\xd2A\xc0O\xf0\x161\xeb\x9d\xa3C(\x17ac\xb7\x05\x00\x88l\x9e\xb6\nA&\x8c\xf1B\x88\xee\x0d\xc4g\xae\xdb\x84Zf\x97Nr\xa9\xa6\xeb\xc9\xea\xc9\xc57\x1a\xd1\xee\x9eC\xa69\xd8Cyc\x12\x15\xbe'\xf8)O0\x1dB\xc2\xab\x875\x9e\xd5\xeez5\xbe\xf4]\xb4d\xbf\x8e\x9c\xbdk\"\xa2\xdc\x934~Z\xe6\x0fR\x9aylj\xce\x854c\xdd\x9eKaf\xcf\x14Z\x16.@\xbc\x92\x0e\xc8\xba\xe4&\xe0&lS\x8e`\x01- peF$\xcc\x98'\xae\xf9\"\xbf\x90\xda\xb7\xd2\xccL|`\x1eH_\xad\xaedN\xa5\x92\xf4\xa6\xfeV\xd6\x9bii\xfdB`\xa3\xe2\xb2m\xc5\xcc\xe5Jp\xa7\x96\xb1C\x1el;\xa8D\xae\xf8\xc9\xa5\xe0\x8a-~\xa6\x13R\xb9Y\x94\xd2\xdd3\xf1\x1f\xef\x99\x18Ty\xeb\xd4\xfdr\xbat\xd9v\xed\xf4\xec\x80\xde\xa4O\xcc\xf7\xb1c3\x08\xf4\xb6\xac=\xe4\xbd\x93\x95tGS\x94Ey\x1e_;\xd4Q[\xb8\xb5[L\xaa\x944KE\xb4-\x1c\xef9\x92\x9c\xdf-\xaf\xd2\x05\x15[\x06\xb9\xe9\xe8j2e\xb3\xeby\xfc\x97O\x8be\x92\xae\xfe+\xcb\x0b\x8f<)e:\xd1'!dJ\xbf\xe4\x05\xbdY\x9a\x9dF\xad\xd1\x1a\nq\x86\x18\x0e\xadA(,\xc4r\xe1l\x1b\xf0\x0e\xca\xf3I\xdc\x95\x89\xa2\"\x08d\x98L\x0f\x93\xeeVn\x16_\xeb\xcc~\x9b\xd7\\\x84{\x9e\xc3\xdc\x94rC\xa49\x83PFK\x9f\x85\xa8!\x89{\xb3\xe7\x90\xc3KX<\xb7\xf9\xd2\xb2\xe5\x95\x90=\xd7\x9ap\xbc\xe0\xc2q(\x14!\\\xfe\xf3\xa7\xe510\xf1\xa7B\x98\xf1\xa7A\x88\x8a\x90y9\x86\xa5H\xc2u\x03/a\xf9<\x00I&\xa6!\xead\xe6\xa3eiQ\x95\x8cV\xa8S\x1f\xad\x1c2\xb8\x96a\x0d\x86\xdd\xb2J\xb5\xed\x9eA\x9f\xe6\xd7\x06\xa6nI\xec\x9e\xdd\x03j\xf7\xf8\xbc\xe0\x80s\x8f\xfe`\xf7 \xa8\xd9{<\xc5\xd7\x8f\xf7\x1e\x93)\x1a\xd6\xd4\x98\xa1t\xd7\xcc\xd2U\xae\xb9\xfdV)\xd4\x95_o\xc6f\xb9\xcc\xe2\xc7\x7f\n\xafh\x9c\x19\xea\xef5Jc\xf7\x9d\xff\x1d\xfb^\xd4\xdd\xa8\xd7\x9aof\x9c\x7f`\xd1\xa4\xd0\xf3\x10\xf2\xed\xa2W\xc9e>\xfd6\x9e\xb1\x8c\x85e\xe4\x82wg\x89\xc7\xbc\xbe[\x87e\xca\xf8\xa7\x8f\xbd\xa0>\xbf\x9e\x91\xd3\xbf\xbc\xaf\x0ceD\x05\xa2\xae\xcab\xafR\xb7\x85\xe0\xa9)\xd4u\x06\xfa$gi6a\x1f\xed\x00\x01\xe4j\x19\x1d\xfeX}\xab\x04x\xd6qp,\x04O\xeb\xba>\xbeE-\xab\xf1Z\xcfj\x9c\xd7\xf3#\xb3[X\xd4^\x1a)\x97s.\xd3\xe5z\x03ZkA\xfd\xcb8\x7f\xbf\xce\x98\x85\x15[\xfd&\x95AY\xd3r\xe5\xe2\x8di\xa5\xb9\x86\xa8p_\x82\x92\xf8\xcf\x02\x9b\xbc\x18\x0bc\xf5l\xfe\x90\xae\xafa\x861\x0c\xba\xfe\x07\x91\xcb\x13q\xb5k\x1fjk\x10\xf5+X;nb\xee\xbf\x04\n\xe8z\xc2\xb0\x07n\x9aT'\n^\x84\xef.\xf1\x17\xdf\xb8\xf5_\xbe\x97q\xdc\xed1q\xaf\xe4\xa1\xc9\xf0A\x7f\xd0\xdf\xfb\xc5F\x9a\xf8\x8f\xf7\xefm\x9d\x86\xe2\xd6\xd6`C\xd6\x98\x1eP\xed\x82\xf0\xfc\xf4\xe4\xc3\xe9\xc5\xf8\xd5\xd9\xf8\xdd\xd9\xc5\xf8\xfd\xf1\xf9\xf9\xf8\xe2\xa7\xd7\xe7\xe3\xb3\x0f\xe3?\x9d}\x1c\xff\xfc\xfa\xcd\x9b\xf1\x0f\xa7\xe3\x1f_\x7f8}\xf5\x0d\xees\x0f\xe65O\xc1u\xd7\x12\x0f\xa51\xe0\x01\xed\x92\xf7\xd82\xd0\x92v^\x074\xc3\xbd\xfb\xe4q\xdd^\xf4\xc9\xbe\xfe\xbb\x87)\x13=\x91k\xfe\xbcH3\xe65\x98}\xaa\x05\xed]i\xb3\n\xabV\xd2\xe5U\x9c\xb0\x0fl\xba\x9e\xa0\xd7gkKi\xcd\xdb\xa0j\xe9*N\xa6\"\x8c\xd0 \x1fY\xda\xa9\xb1\xd8\xd1X\xb4Z-\xee\xde\xc6\xd3\xe9\x82\xddF\x9d&\x189Z\x9ap2\x9fwia\xbd\xb1\x1b\x85\xe3 Ps\xe8\xd0g\\\x1bs\xd1\xd3o\xcb\x80\xc9|\xb0V\xf46\x8e\x8aFJO\x92.a\xf4\xb3\xda\xad/\xe7\xb1\x11\xf9\xc4\xb5\x98(38m-\x15\xf1\x16\xff\x88:\x9f0\xa5/\xc5BED*\xe5\xd3\xcf+\x8c\xf9\x00\xc5\x9c\x01K\xe6Q2a\x19\x14)\\1\x88\xca\xe9\xf6\xa8\xe8\x8ajq}\x16\x08C\xd9Z\x0d[+A\x8e\xa9h\x1bS&\xb0\xbf}H72\x99/\xa1g\xc6{j\xfb\xf5\x84pM\xe1\xef\xf1\x9e\xda~\xbd\x92\xa7W\xad\xa0D\x88)\xa9\x8e\x9c\xe1\xda\x8a\x1c(\xe2\xfa[X\xc6\x06&\xb0\xe8F\xe7MVS\x8bNM\xdc\xd0L\x8csAX\xd3\x82,\xd4\xe5]\xebj\x80v}M\xa5O\x95s\x98\xfaA\x08\xb32\x9a\x8dU\x0d\xb4\xa94\xda(\x8a\xd4\xdb\x0d\x15@\xea,\xb6\x06!\xef\xd5\x1e\x91\xfe(\xd9}&\xb23\x9f\xd9W\x14\xe63C\xfd\xc4\x84\xf9I\x08\x03\xda\x8a\x0b\xac]A\xbfu\xad\xe4\xd2\xbd\x92[Y/B;\x02k\xe9d\xf08X\xae\xf3\x82/\x19\xc6\xe2\x05!x\xe5=\xf8\x983\x98\xac\xf3\"]\xc2\xb2\xa4\xe8\xa8e\x88\xf2\xbbd\x02\x91\xf8\x9c\\^#-:\xeb\xa1l`\x0d\xe1\xdf\xca!Dw\x98\xb2}\x1e\xdd0\x88\x12(\x83\x1d\x83\x87jiPvG=\xf8\x89W\xb9K\xd7\xb0\x8c\xf3|\xc5\x16\x0b6\x85\x08PD\x89\x92\xe2\xe8\xdf\x1c\xa3Y\x11\x00P\xa7g\xd9\xfdT\x1a\x804\xce\xcd\x1dFs%E\x1bNSr\x7fA\x9a\xc2~\x85Y\x9cD\x8bEc\x1b\x03\xfb3\x9b|\xe8\xf6\x12\x9c\\\xcd\xc4\xd9 \x93\xa6k\x89\xe1\xb7\xb7]\xc8\x7f#3\xb6\x17\xa3\xc4aD\x92\xb6^\x80\x82\xa6\x92\xfb\xce]m\xe9\x0c\xc8\x15\xf7^\xbf{}Q\xff\x94V\"\xadI\xc3L\xb5hd\xec\xf1|}\x95O\xb2\xf8\x8a\x91\x11\x96\xafKq\x87\n\xf5\"\xe4'\x89$m\x92\x1f\xdc\x9bp\xf2\x93,a\x9f\x8b\x0f]O3\xf5H\x1d\x0f\x05Y\xf58!\xac\x1e*Th})BX\x8f\xd2^\xd4j?sS\xf9)\x11I\xacu+Fz\xb8\xdaJ\xb5C\x1a\x14\xb4 5\x91\x0e\xeb\x8b\xbb\x15\xa3\xe0\x9d^\xc9t\x89\x12\xd8\x8a\xec!\xac\x9d=\x96\xe4\xb6\xddJ\x9f\x95\xf6\xd4\xe2/\x7fn\x9e\xeb\xfaC\x93~@)\xa2\xe1pQ\xa2Ma9\xc3\xeaO\xa3\x0d\x82z\xd6\x89\x06\x7f;l\x90z\xba\x9cQ\xf8&\xe8\x843P\x0d\xcf\xf2&\x01\x81|\xcc\xc2\xc6\xf2\x05\x11)\x87\x0b]\xb4K\xecc\xeb\x0e0&Q\x91\xef\x94!x\xff\xfe\xef\x9c\xb9\xfc\xfc\x88\xff\xac\x07\x93\xff\x06\x89Z\x17\xf1\x1d~i\xd6\x9d\x8d\x14E\x1f\x9bWB\\\x1a(o\xc7\x84\xd8|I\x84\xc2Qfk.\x9f\x87\x9cp\xfa\xad\xd7\x10\x1eh\xa5Mo\xad\x8c\x1f;\xb9a\xb3X\xaf!\x92\xb9\xe2\xb5\x81\xe8\xa6v\xc1\x1c5\xea4\x90{\x89\x91{\x01\xcc\xd7\x8a\x7fm\xa1hS*\xdal^\xbc\xc0\x1b\x93\xc8b\xcbxs\xa8$\xe6\x1cIQ5\xd1\xb7\x9bH\x90\x1d\x17\x8e\x07a\xcd:\xda\xb3mY\xc8\xa3\xca-\xd7%\xba+2\xbe\x91\xf0I\x02^uV\xa1\xf7\x83 \xda\xe3~\xd0\x8bzB\xa3e\x82~cm\xd5\xa6\xf5\x9dkm.u\xc9\xcc0\xf2.\xacP\x97\xc7x_\xa6q9exIq\x19\xa8Y\x83^\xda\x8b/xQ\xc5\x18\x95\x08\xd0|\xda\xd0\xac\x8d\xdd\xf8\x80n\xbc\x18\xf5/I\x04)zBz\xf5k\xb0l\x18AWB\xca\xfc\xa2\x87j\x18\xc9\x80\x87\x15T\x88\x13\xc88\xec\x1fDq\xf8`J\xbc\x10\n\x15\x00\xb9\x8b\xf2S\\\x10\xd5(\xb7&}\xc0\x11xq\x12\x17q\xb4\x107P\n,*\xabr\x91\x82\xae\x9b\x83!\xa6\x1c\xbf\x89\xd3u.\xd3)gl\xc2\xe2\x1b6\x85\xab;]\xffP\x8b\xec\xaakM\xcb\xd1w\x81e\xb5g\x9f8\x9cQ-\xdb{y\xb1i\x1e\x19\xca\x84\x9frG\x1d\xc0#\xd3\x98]\xb8Q\x1cA=b\x02\xe5\x90\x86r\x0d\x1cA^\x1e\x07e\xc5j\xf5)}5GJ\x8a\xba\x13y\x06\n\x97Q \xaf\x1f\xfb5\xcb\x95\x82KXh\xc3kW\x8d\xf4\xaa\x0bL\xee!\xe8y\xc0\x17\xd6\xa3i~A4\xa6\x08z_\x18\x9fp\x1c\xe3@,\xf8\xaf\x9d5\xc7\xaa\x9d>G\x96d\xb3\xadS\xed{\xa7\xbd\x9c\x96\x0f\xa8\x84\x0e\x9e>\xe2\x08\x92\xb6t\x87\xa5G\x1f\xbe\xae\x0f^_\x0cm\x80Ay\xb6%\xfe\x9e2\xf0\xde\xdc\xfc\xb6\xcd\xbcag l\xbf\xe5\xa9\x8b\xb6\xf4}\x18j\xb1\x01\xd2\x92\xb0g\xc1s\xd8\xde\xe64={\x1e@*\xe8y\xe1\xb3Qr\x89\xcaT\x87\x1dh\xba\x19\xd4\xb5\x83\xf1\xc9A\xe0{E\xfaq\xb5b\xd9I\x943\x97\x15'}Hv\x02\x0eqA\xaf\x06\xb0C\xd8\x1c\x8bh\x97\x94\xaf\x7f\x81>_\"%\xc6!\xec\x14\xf0\x12R \xcb\x14\xb6\xd1h\x0b]\x81\x12Y\x90r|\x0c\xca\x8f\x12\xd8>\x844\x10\xe0\xe6\x1f'\xf2\xe3\x04v\xf8\xef\x97/1v7\xff\xe3\xd0\xcczU.h\\.U\x8aK\x95\xc1\x0bH\x9f\x07\x10\x8f2\xb4\xa5\x19e|$\xf4a\x17\xb7\xac\x92\xb9D|.\xc2\xc2\xd5\xf7F\x7f\xfe\xf3z\xb7\xdf\x9f\xfe\xf9\xcf\xeb\xe9\xd3~\x7f\x87\xff?\x9b\xcd\xfe\xfc\xe7u\x7fO\xfc\xec\xef\x1d\xf0\x9f3\xb6\x8b?glw\x86\xdfL\xf1\xe7n\x7f&J\xfbL\xfc7\xbb\xdc\xdc`W\xce#\xe9\x15,/\xdaM\xcf\xbabG\x08\x19\x85 \xa9\x03A\xe2\x86\xbdD\xac\x1a\xdee\xc6\x12\x03\xf8\nmo\xa7\x97\xb8v)\xbc\x80\xf8y h\x9e\xcfw\xd7(\xbdD\x0f0\xc76\xdb\x90\xb8U\xdbl\xf0\x9420\xae\x84\xf1J\xcdA\xc6\xd7\x8fI\"\xe3\xd6\xb3\xa0\xe1\x9a4\x04)\x9c\xf6\"\x05\xad\"H\x89[\x83\xa4M\x84US-\x99,ZQ-v\xde\x11(\xdeLXldhx5\xea\x13\xa6\xcf\xa0\xd6[\x04*\xb7\xc5{<\x0f\xb9\xec\xe5\xa7\xd5A\x17c\x1eHs\" \xc7)r`\xd7\x07`\xd7,q]e\x00\x88{9o\x14/\xb4\xbe|A'\xc1\xdaG_i\x94)\xbfO\xd8\xad\x1f\xf7N\xf0\x17\x97\xe38\x0bo\xe0\x13\x7fT\x15\xcc\x8e\xa0\xef\x9ax3\x94\xb3ng\x05\xfbd\x19\xf5\xc6\xba\x04}\x9c\xdf%\x13%,\x9b\x82tM\xd6vUZ\xeb\x95~\xcf\x12\x116\xc0U;\xd7k\xbf\xcf\xd2\xcfw\x97\x8e\xab\xf7\x16\xf9\x18\xad\xff\xdb\xc4\xe1\xcc\xe5F\x81\\\x0c:\x95\xe2_\xeb\xf2\xaf\xb8\xfc\xab\xcd\xc8\x86\xa2\xdd\xb6\xd6\xa1\xc52\xb8y\x92\xa5i\x17\xb5\x01\xdd\xeax\x0d\x11m\xff'\xfe\xb4d\x86jmY\xf8\x8fm\xd2\xecWj\x11\xf4\xd4\x10\x1b\xa2\xfa\xa0\x1f\xf8\x89\x7f\xb0\xff$\xd8\x88{ih\xd0\xdc%b\xf3\xec?i92\xcbKo\x19\xfa\xc8q\x80\nv\x15\xad\x0c\x95.\x06\x8a\x92h\xab\xa2-\xe53\xb4\x95\xfa\x89\xf0kV\xf4\x1c#\x02&h\xae\xaa\xf7\xc7x\x97m\xa7r\xc3\xacim\xdc\xee3\xda0\xe4\xc0\xca2\x14\xa1\xb1n\xed\x15\xa7\x07\xbbm\xd8\xae\xd8\x80<\x84E\x08\x13\x8a\x19@g\x02\xf8\x9e\x0c \xaf1\x8cv\xa9\xc8\xa8Dq\x07x\x1f\xc6\x019E \xfb3@\x1f\xdd\x97\xb0j&%\xc2\x8f\x9a\x9f0\x94nm\xce[\x11\xc5\x9a\xe85\xc7%\xb6\xdb\xbaq\xf08Kq\x87f\xbd\xbf\x96`\xe0\x12\x17?\xb63B\xf4\x04\xc5\xf9\xa0\xbb\xb8\xa0N\"!k!dE\xce\xfb\xdc\xc0\x0bX=w\x1d\xe5\x98\xa7\x96\x8c\xef\x02\xd2)\xba\x18\xdd\x10we\x1c\x00y\x80M\x8c\xf9\ns)\xd9\xbf\n\xe1\x0eC\x1d\x15\x88\xa1\x13\xcc\xca\xe8\x8b8F7\"\x9d\x13\x7fK\xb7\xa6\x99r\x8c]*\x1f^o\x1c`\xea\x9a8Y;\x92\x0c.\x0d\xcb:\xfd\xb9\xcaX\xf4\xc9*\xb1I!:\xa77\x8db\x0b\xa5\xf1V]V\xed\x93\xd8\xbf\xc6j\x9cA\xbd\x13\x9a\x1a\xbe\xfb\x17\xd2\xcdTl\x8bIP\xe1\xd2\xb50\x06p&\xbdl\xea\xb1 \n\xe0\x84\x04\x90\xd0\xf8*\xe2\xa7\xc4\x18+\x86/\xd0\x15\xee\xa3\x85\\\xdar\xe0\x8e\xe1|\xeb\x82\x90\x87\xc8\xa4'<\xcaQCZ\xfe(\xeaN\xe9\xf8\xd7\xbd\x84\x95o\x92\xf35\xc9\x9e\xc4\xac\x9a\x98\xefT\xcc\x97\x84\xa9e>N2\xbf\xf7$\xe8}\x8c\x93\xe2)\x8a\xb1\x0fr^\xee>\xa3B\x80r\xb1\x87\xbe\xc79\xd8\xbf\xaf\xe8)\xe2\xa5~\x93/\xddSz\xac\xbb\xedcr\xeb2b\xa1\xa5q(g\xf8l\x8e0\xf4_\xe6\xc7!$\x1dp\xa4D8x\xfc8\xf03\xc7\xd6M7\xebc\xd0\xa7\xa3RqN\xcd\xbf\n!'&v\x0d\x870\xf2X\x96\xa5\x99\x17\x827Y\x08\x7f5o\xca\xf2\"K\xef0\xb0N\xb4\x16\xef2\x96\xaf\x97\xcc\xbbt\xb9\x08\xdd9\x11&\x06y\x1b\xc3a\x88\xde\xe0ROf\xce\x154\x1aU\xe8F\x86\xb1]\x0f\xbd\xc9\xc5\xed\xd3\xdbt\xca\x9b\xdc\xdab\xda\x0b\x19Z\xd9\xb7\xeb\x99o\xbe|\xc1O3\xb9\x7f\xce\xca\x12\xc7\x1d\xa40r\x98\xc7\xd7\xf3\x9f\xa3\x82eo\xa3\xec\x93\xbd& id\xd5\xeeO\xed\x1f\xac\x89\xd1\x1d\xc1\xe0\x00\x8608\xd8{\xba\xef\x80Bm(\xfc,\xe0S\x12'\xa42\xa5\x10\xb0\x88\xaa\x82(\x90\xd9c\xd6!\xdd\x08\xc6\xfb\x9d-\xd24\xf3\xedr\x15\x96@\x08\x8a \\\xeeo\xca\x84\xed\x18\xe4R\xcb\xd8\x1e\x8b<\xe9\x9c\x8f\xd5_\x9d\xa4k\xf4\xa5W\xf5f\x8b\xf4V\xa4\x1a\xd7j\xb2D\xa4\xc8/\xf3\xb5\xb3d*\xe8W\xed-\x87\xb2\xf8\xb6|\x85.>\xc2\x9d\x05\x7f'\x8cM\x15\x91\xac5(Z\xa3\x8a\xd4\xda\x89 \x8aF\xfbbC\x9cO\xe6l\xba^\xd4G#\xf7\x8f\xf9\x12-\xe9N\x93I*\x87\xca\xacw\\\xae^\x17\xb3\xa7*\xe3|t\x1b\xc5\xc5\xab,\x8a\x13\x0dNr\xaeo\xd3\x8c\xd5\xdb\x9f\xa4S\x96\x99\xe0+{\x13oY\xf5\x8a\xa3\xc4\x1c/\xb2\xe6\x92\x82<\x0bzBE\xf1J\xb4\x15\xd8M\xb3[\x98\xfbU#\x81\xdd\x8fVX\xc3W\x97\xe7\xd7\x95\xdb\xf3\xcb\xa4\x1c[\x88\x8b:e\xb8\xaa8\x08>\xb4+\xd2\x95\x0dG8\xce\x8c\x03\x92\xd7\x17DK\x04\xa9\xa8\xad\xb8\n\xf1 \x14\"4\x03\xcc\xebV4\x06\xdb/w|\x10\xba\xd8f\x89\x1b\xda\x87\xea\xcdaU\x1a`\x14\nW\xdcx\x07 \xc7\xd5m\\\x16B\xeab\xe9%\x17\xc1\x0c\x88\xd8`\xabL\xcd\xe1\x08\xfc\xc8\xd8c\x9d\xf8\x04\xd4\x8d\x8b=\xac\xd6\xc9\xee\xa7\xaa(\xf1\xcc\xd5\x1ah\x9c{Y\x99\xb7\xde\xe4b\"\x94\x01\x8a*!\xd4%\xddRy\xd3\xc2*\xb1\xd06o\xb8N}aX\xb1\x91d'\xf6\xed\n\xa0\xb9xI\xb9\xfa!\x9c\x93\x97\xf7\x1ct\x11\x86.\xf2\x91f#\xbew\x82+B\x81\x9es&\xa2\xe4,zq.\xd8'?\x13\xce\x07\xfa\xb6A\xcd%e\xbb\nztn\xa5*1NKa\xa8W\xf7Mz\x9d\xdcD\x8bx\nI\x9a\xec\x88f\x1f\xc9\xc3a2_'\x9f<39\x9dz\xf0\xb8wLDnk\x02n\x11F\xb0\n!F\xe1\x93\x13p\xbf\xe4bb\xcc\xc7c\x0cY\x1a\x9c\x96\xf1\x97\xfb\x1c\xa3]\xf37?&\x93\xc5qi\x16\xb3\x0bi6\xc7\x1c6\xcdv\xde\xc6\xdc\x16\xbdY\x96.i\xdc\xc0 f\xfc\x94\xd6\x8f<{\xbe\x9aC\x9e\xe0({\xeb$\x9f\xc7\xb3\xc2\x0f \x9a\x15,\x03\x96L\x81\xdd`\xf0\x8f\x00s80\xb48\x10!\xfa\x10X\x02U\xbb\xb4\x8d[F5|z\xf6\xa3h\xd2\"\x0eQyd`nK\x0em\x8c\x0bXn\xda\xdb,\x96\x97{&\xb4\xa5\x8e\xaeJ\xf5\xa5\x8fw\xc0{\xfbT\xed\x9bz\x99\x0ci\x8c\xe9\x9ej\x03\xa2\xb0\xcfT,\xb6\xad\xd5\x16\x93`\xe2$\x84\xd5\xb9 \xdc$r\xc0/L\xe6\xb0b\xba\x98\x93\x8e|\xf5\xcd\xf8\xe3\x0e\x1a\x7f\xab\xd1xj\xc0E\xc9E}\xff=\xd4\xddEp)\n\xc1\x16\x1d\xf1)\x88\xb5\x9eFE\xc4\x97\x1ac s\xa0\xf9}\xb1\xa6\x1d\x89\xa2@\xd2\x92\xa6*\xe4Kx\x1b\x14\xa5\xad\x01\xee\xfb\xef\x914\x06\xa1XT3\x10d\xed\x17\xed\x94q\xa5\x87q\xf2J\xc6\xeb\xdb\x93\x9f\xea\nc\x82\x7fP\x01\xad\xea\xaf+\xce\xcf^bB\n\xae\x8d\xc7\x89\x80\x8e\xee\xfd\xc6\xfe\xf9 \xdf\xee,\x13\x82\x06\xbf^\xc5\x88,\xd5\xdf\xf5\n\xe3u\xa2\xd7)\x7f\x19\xb5\xaa:\xad\x87\x99\x90\x06\x10;\xd6\x8b\x05G\x10+\xccw\xbdq^\xb7K\xc37\"EE\x06\xe4\xf29\xc9AVG\xf4\x04\xcfoC{Th1\xdb|\xa4kxld&7/r\x15eu\x86\x9b\xa1;\xa1 \xfb\xc2\xba\x07U\xac\x9e\xf4\n\xc3\xa0\xa9\xe3*\x1c\x1a\x126;\xfcH\x1d&r\xcf\xb5\x9e\xe4\x97/_\xc2\xa0\xf6k\xb7\xf6k\xbf\xf6\xebi\xfd\xbb\x83\x10\xd8\xf6v`:]\x83\xe0\xb6\x03T>\xbd\xa8q\x17\x0c\xe7\xab\xa0\xa9\xcf\xbc\xb04\x06\xfd\x10\xfa\x1dc\xdb\x9c\xd3PPW*\xed\xc2\x97\xdd;\x97\xf3-e\x05\xc7\xfa\xa9\xef\xf1\xd7\xea\x9d\x17V\x8b\x1eP\xdfH\x9d\x88\xe2\x04\xd2*\xf5\xc6 \xba\xa3\x0d\xe1\xa4f\xe6\x02\x0d\xf3<\xa1\xe7)\x87\x04j\x92\x9e\xc8\xb0\x80\x0c\x87\xfe\xee\xc2N\xea@\xf7\xf3\xc9}\x82\xd4\xf4!\xc8\x82\x9b\x1a\x92~\xa8O\xf2X\x10\xd6\x8e\x13\xbb\xca!\x864\"\x01\x0bXV\x9c\x16\x17\x10\xce\x9c\xab\\\xeaK8x\x8bx\xf2\x89\x1ag\xa7>\xde\xb7\xaf\xb0\xc2v\xa1y\xa3zB|w(\xe6,eZ\x85\x90\xa8\xd9\x96\xe8\x18\x82\xb9d\xdarn6\xa5\x8bo%\x02\x88bS\xdf\xe3\xe3\xa9m\xeb\xe7\xf5AJ\x0b\x01\xa5|\xf2\x83\xe7\x86\xc0\xe3\x1a\xe1\xdb\xb6C\xc88z\x8eDWH\x1d-F\xa9{\xaf\xe3\x98\xdeu\x13I\xfaB\xfbU\xb9\xb0\x08\x07\x16\x0c7D\xe2\x15_$\x91\x93\xa4\x16^\x8a\xb8g\x92%;\xa6\xf4\xa0\xff\xd2\x15:\x99\xd8\x93\xcd\x1a\x02)Mx\xe2\xecd\x9a\x91$\x9f\xef\xc0\xb4\x95\x02\x0d\x01 \xa5\x0dM 1\x8a\x00\x8d\x9er\xfd\xa4r\x832\n(\xa9\x9b\xd0\xfeZ\x9al\x0d\xc3\x0f-\x99\xee\xcb\x17\xa5f\xa8n\xac\xe5\x8c\x87`\x89\xef\xa2\x9d\xb0\xfc$l\xd4\x01\xbd\x16\x97\xc40\x84s\x95q\x81\x13D\xd7<%\x81>T*\xa8@k-p0\xfe\xdf\x7f\xafzq\xb5\x8d|\xb2\x0c\xd0Q\x03\x8d\x13}\xa6\xbe\xc7\xebUJ\x82\x10C|\x18Q\xae\x04\xe4\xaa\x93\xc6\x96\x97q\xfcS\xe5\xf6\x00\x0b\x96\xe7P\xcc\xa3\x04ny\x8de\x94}\xf2\xc4\xb8P\xb9\xaa\xc0\x86\xcd*\xd1\xeeH\xad\x05\xff\x91\xe2\x95\x19\xde!\xa4b\xe1\x91\xbf\x93R\xf94\xc5\x01{A\xa8}_S\xa9HM\x91\x05@J\xa3T\xd38\x9aJ\xb5@or\x10\x1a\x82\xb0X\xc1\x04WP\xae\x8aX\xdaL\x1e\xf1}8*\x05\xbc\xa1<\"\x8f\x1cz-\xfe\x7f?\xd0u\x7f;\xa8\xec$gQ\x02\xd01\xa3\xa4\xdaJ\x9a\xc2C\xe2\x8f\x1a*\xea\xc6\xcbk\x94\xda]\x14?\xb0\xea\xa7\x9b\xa1 \x1ew\"(Z\xc3\xc4\x85\xa6\x80x\x00q\x8e\x81s\xe3\xe5JdH`6\x1d6n b\xcc2\xd2\xca\x8c\x96\x82\xd6\xf7B\xb8#\x8b\xa7Y\x14'^\x083\xb2T\xed\xcf%Y*g\x17\xc2\"\x109S\x8d\x8f\x13N\xaa'\x0deWd\x99\xa467AX\xc6\xbd\xde\x8au-!^\xeb\x8fo\xb3\xb8\xa8]\xbcn\x99/\x91\x08\x96\x9f\xcc\xa88\xb9_\x1b\xd6w\xe2\xbc\x8a\xc6\xb5E\xceP\x18\xeeM;\xc5\xb2\x8e\xeb\x06#\x1a\xef\x8b\x04\xf2\x8c\xab\x8cQ9^\\X\x17\"\xea!|\xeb\xc9X\xc6\x02\xc6\xd5.\xa0A\xac\xb20Pes 24\x00\xd4\xb2!8O\x05\xc4$1\xc1P\xb6\x14*j\xc5Jk\x1c\x8e\xbeBt\x91\xd1@k\xe4\x12\x1d&%qW\xa1\x0ej\x15^\xc2\x80W\xda\x11\xcd\xbe\xf3+\xfa/x\xcc\xad\x95b\xa2f\xd1\"g\x80\xddB\xc6\xf2U\x9a\xe4,\x04ek\x9e\x98\x17\xb0\xb5%n(\xdd\xde\x96\x93\xeb\x8bl\xca\xbc\xbdMw\xe3\xb2\x05\x88\x8aT\x15A\x08W~+5\x13\x08'\x10L\xbc\x17\xe7\x82\xc1\x98\x10\x11!\x9a\x06y\xed\xdcV-\x84\xf9\x8a\xa4 \xee\x8e\xee\x9ai\x93l\xbb\xf5\xb8\xd8\xb4\xdb\xab\xa6n\xab\xc3.\xe9\x89\xbf\xbb\x9d\xfdJ\x9e\x15;\xb1$\xfed7]o\x07\x00\xac`n\xba\xb1\xef*c+\x96L\x15P*/=\xb3D\xe4\x98iP\xa1\xf7\xc6h\xc2\x97\x0b\xe4\x91?F\xc5%\x1cA\xe4\xeb/\x02\xb4\xe3\xab~\xd7-\xb2j\x9f\x1e\xc2( k\xaf.\xb1\x8a\xf0\\J\x1c\x04OCeu`\x8b\x03\xa5\xce\x1f\x88w\x06W \x90^\x9e3|3\xc7%\xa1\x95w{\xc8\x8aU7r\x89\xbc\xcd\xf3\x03\xebR\xdf2\x82\xb1\x18\xf3&\x9d\xd5F*\x03\xf7\xdaWL\xd4\x90Jz\xc1\x1f\xc2\xc9%\xd6b9\xeb\x1c\xbdR\x11\xce\xe3\x9c\xfeh\xe0\xfe\x88U\xcc\xa5,\x87#lIXq(\x89Q\x96\xe1Qi8f\xd8^\x19\xfa)8\x90\xd6\xf0j\x11KvA\x18\x13%R\x92%p\x18\x9d\xfd\x9c\xfcB\xe9\xf0#\x0f\x0b'\xa8S\xa8\xcf\x9c\xde,\x9b\xce\x8an\xa5\x163\xb4\xff\x1cb\x0c\x15\n\xf1\xf6v\x00\xd9(\xbet\xc1\xa0Qak\x19\x0e\x01I\xa6nd\x9c\xc3w~Q\x9d\x9f\x0d:8D\x89H[l\xf9\x99\xca\xd9\x13\x850\x08\x0c@\xec\xa0\xe4cc\x93d~\x14\x08\xe5_\xa3\xfe\xa5\xb6{]\x0b\xdf\xb49S\xeb\xc6\xb5Ib\xcek_Vn\x10\xd2p\x83\xc60A\xd1\x05g\x12\x94\x82\x98\xdb\x00\xadT=(\x02C\xf0l*FRe\xb3\xa2\xdao\xc1\xe5.B=\xe0]Q]\x89\x9c\x11.G|\xe7R\xef\xc5\x85\x88\xa5\xc9\xc9\x1c\x0eM\x99\xa6\xec\xca4}\xcey\xa9<\xd4\x04\x853\xb9\xa6\x9b\x1c\xabM\xeb\x1fM\xcb\x93\x0e\x0e\x0d\xcc\x08\x0dU1\xdav\xb4\x98\x19\xde\xc8@\xfb\x9d\x00]\x9e\xb9\xc6QS\x9d2\xcc`\xf7[1\x15\xa4YJ\xdd\xd0D\x19\x1fY\xe6'\xf5\x1b\x88\xf7\xa4\x01\x12\xe0\xd9*\xd1<\x08(;CC\x0f\xc5\xb9\xdb6@U\xaaV\xbe\x8b\x04\x87\x0dr\xb2B\xc7\xd1\xb0E\x82\xb0\xe3>\xc2\x83\x1b\x99w\x87\x05e\xfd\x1c\xd1\x14s\xf2\xab\x0e\xd3\xbd\xcd\xa2\xd5F\xa7\xbb\xfb8\xef|\xf6g\x8e#\xa2<\x1eR\x8c\xc7\x83\x0c\xa5\x10\xa7[\xc5^NN\xa6\xbe\xc7g\xb3bS\x90\xc2}R\xf7\x97P\xba\xf8f\xc9\x99 \xcb\x87nnP\xf2\xec\xd6\xaf\x0f\\Z3p^c\x16\x9a\xa9\xb6\x8d\xbc\xa5&A\xf2\xd6%,HW4\xfe\xe8\x90P\xc2i\x0d\x14~Z\x9b\xa3\x90SS\x8e.[\x89\xe17R*\x95QS\xafY\xef\xa7B\xa4\xf7\xcd\x0f\xb0\x9e\xb2JQb?\xce/\x0d\x04\xd1U\xba\xf1R\x90\xa4\xb6l\x806\x93\xba\xcf\xd4<\xceG\xe9%\xd4c7kR\x81,\xf4UE\x0d\xa9\xdb\x1c\xee[\xd1K\xab\xcb8\xf3/B%3=\x85F\xc7\xf5\xfe\xca\xe1\xdc\x80\xfa\x1agt]^1\"\x83\x84Hp=\x8a/\xb5\x9d\xde\xbb\x8a\x93\xa9\xa4n\xbc\xa8\xc1#\xa7\xd0\xbd)\xdb!\xa3\xa1\xd0X\xde\x1f\x16\x81\xf2\xfe\xce\x14\xe7Z\x89\x11\xf6Di\xda\xd3\xc5\xddD\x91\x90\x9ao7\xe9z\xc2\x92\xf5\x92e\xbc.\x97\x13lj\xb3\x91k\nEak\x17G\xf6\x1c\xeb\xb3C\xbf\x8f\xf1,K\x97\xfcT\x86Cx\xfb]UV\xcf\xac\x10b\n\x1eG\x82\x05C0\xae\xe5j\xb0\xe3Mti\xa2-\x1b\x90\x88\x99Q\x16\x94\n\x83\x94<\xaa\x1b\xb4,_\xc9Q\xd7?\x97~,\x1d\x0c\x8f\xee}\xd7\x03m~D\xee\xd0\x02\xe23K;M\xbc\xaeZsn:\xf4\xb2\x8e\x84\x9f\xde\x11:\xe1\x94\xd6\x9b\x1b\xf4\x83p\xae\xb1\xb3%\xd3\x93*yA9Y\x08s\x9d{\xba6i\x17\xa7\xd6\xc0\xfcF\x08\xd4?\x96\xaf\xfd\xf2\x04 ;h\xb8\xb7\xe4=\xce\x11\xe7\xcb\xf5 &bv 5(\xf3e\x1dV8(\xbc~E\xd0\x92\xfa,\x87\x9cU\xfbYzd\xb5\x10\x93{\xc3}@\xf3w\x99\x1d~\xc1\xf2\xa1\x996\xb6`\x84u\xf8\x96\xe5\x1d\x90\xdf\x12#\xb0\xca\xcd)\xd4+\x08]Vs\x1b\xc6\xa2\x9aNU\x06\xf9\xe9\x9ca\x87\x0c\xc8\x96\x95\xa1g\xaa\xfbvDd\xafL>\xabG\xcf\xca\xd9B\x04\xb5\xe4\xff\x7f\xf9\x02\xb7q2Mom\xfa\x92\xd2\xe1\xef\x91\x93p93\xd1Y.\xa0\xc4\xb4xZ\xf9N\xf5\xc6h\x89\xfd#\xd2K\x07x\xf0\xcb^\xce\x8a\x8bx\xc9\xd2u\xd1Q\xccI\xd8-\xc4~*N\xb0\xeak\x8c\x87P1@!\xe0\x00d\xa1\xa5\xb7\xc0~_'\x05\xcbn\xa2\xc5=;V\x9f\xd3=\xabR\xa2k}d\xa8\x80\xa9}\xd0*\xffH.\x1f5\xb1\xbe\xd5|\\S\x97fl\x86\xb6\x91\xba\xec=3\xe6k|\x84\xed\xb6\x81\xa4\xb6\xc6\x02\"YX\xe2\x011g\x96d\xe9b\xd1EA\xa4C\xc7g\xbc\xb9\x05\x93?_OQ\xfc\xd0_\xd9\xf8\xc5{['D\x7f\x0f\xd2\x99i\x0e\xc7{\x1b#\x9c\x8f'E|#\xb4\xaf\x91\xfa\xf3[:\xa7/\x08\xe5M\xaaV\xd5\xaeW\xc0\xcbC\x99S\xc9l\x15\x0e\xa1\xda2~+/\xcaz\xe34Q\x93\x17\x97\x12\xe5o\xea\xb6\x87p\xb9\n1\xa4\xd5n\xa0\xf6\xdcr\xc9\xa6\xb1\x08\xce\xd2N\xc2\xea_Ta+*Rh\xd5\xe08X\xb2.za\xb9\xf36\x1c\x82\xf1\x0d9\x08\xbbNm\x18\xf5\xe2\xea|\xe8\x94\xe0lc\xe6\xd9\x11S-Eeb\x9c\xebq\x88\x9a\xf1SY$\xe1\x9d\x82\xe7\xc16\x17\x82q\xbeE\xfa&\xbd\x15 \xc9|\xa7\xfd7\x1a\x11ys\xf6\xd9\xa3\x8d{D9FBj\xa9\xb0\xd3\\#\xca'q\xdcX\xe3*N\xa2\xec\xae\xb9J\x94\xb3\x83\xfd\xe6\x91L\xf2\xdd\xb6\n;-5\x8a\xd9\xe0`\xc1\xda\xea\xec\xb4V\xca\xa2[G9h\x1e\xda\xfd{\xda\\\x95\x1e\xde\xf6\x16\xaf\xefnG6,\x8a\x931\x08\x95B.\xdc \xac\xab'\xb8\"\x81\xed\x0c\xbc\xba\x90\x92S\x11x\xd6r\x11T<\x7f\x1e\x94\x03s\xb6\x0c]p\x17:\xe1\xafz:\x0c\x12\xba\xa0!tBE\xe8\x88\x8e\xd0\x15%\xd5\xa3M\x03k\xb7\xcdd\x11\x15q2h\xed\xbdq\xf7\xaaG\xf5-\xdbl\xeb\xbaq\xbbC'\xd2\x02\x1dh\x9cz\x94\xba\xae\xc1\xe8\xa9mO\x82r\xb1h\x0e\xb2\xa5\x1eN\xb3}I\xb4\xeb\xf4ZD\xa3\xd0R\xd8\xea\x0f\xa5#\xa4n&\x1d\xd1{\xc5\xe5b\xed\x989<\x94\xd1\nE\x120\xdb+\xc4\xfb\x98|J\xd2\xdb\x04\x14\x15\x18\x82\x18\xb6[{\x88V{uJT\x05v(#\xd3Q,W\x07\xb4\xc7F\n\xf6\x99C)/\xdb\xe4\xac\xd3B\x80\x8e\x88\xd1\x08n#\xd7VR\x81\x1d\xcc\xe2\xc5\xe2M\x84z\xba\xf5\xfd{i\xc4j}^\x93\xda\xbcf\xa2\xc7\xbd\x8dzlDX]\x89),\xc0\x0ea\x15\"\xe7\xe4k\x1d\x9b\x92B\xed\x17\xd6[Dy\xf1\x8e\xa1\xa0\xadB#\xf2W\x17i\x81\x92\x92\xfe\xeed\x1e \x9f:\xdd\x1f\xb0\xa6\x0d,\xff,\xcf\xaa\xc8&\xf3\xa5\xa9\xc5\x8bC\x18\xec>QIb\xe0\xe5Kx\x0c\x87\x87p #B\xe3\x9b}\xfef\xb0\x0fG\xb0\xa7^\xed\xf1W{}8\x82}\xf5\xea\x80\xbf\xda\x85#\xd8\x19\xc0\x10vv\x1b\x87\xb4v\x1c\x9fJ\x1bXM\x7f\xa7\x0e\"[\xca\xdf\xc4\x05\x1a-Ov\x9f\xf2\xbd\xec\x0f\x9e\xed\xc2\xf7\x98\x14<\xd0\xac\x99\xeaK\xe1\xfd\xdf\xff\xd7\xff\xe9\xa0\xb2\xe8cTU\x97\x16\x83\x9ak\xd8\xa0\xe9h\xa5\x062p\x0dd\xd08\x10\xa0\x06\xb3k\x0c\x06\x7f\x9b\x1d\xee\xba:\xdc\x95\x1dv&\x9e\x85T\x88>\xa7\x90L\x93$\x12t\xb0\x1f\x1aX\xffB\xf36\xc3x^\xe8\x97YCy\\V}\x1f\xf0\x0f\x03c_\x94\x89\x0d\xeb\xfcVho*\x11\x17\xac\xa9\xa32\xc2\x99\xbe\x9f\xcb\x11\xefh!\xd0\x9a\xf7^N\xaa\x00\xf8z\x95\xd9T8\x8a\x07\xf0\xaf\xb0\xcb7P\xbfI)_\xa5n\xf4K\xf2\xee\xb6#i\x0e\x04\x80\xd7\x91\x93y\x94\x9d\xa4Sv\\\xf8\x9a\x0f\xac\x199Z=\x18b\x9f\x8b\xdd\x8f\x1f\xef>;\x004\xcc\x7fq\x08\x8f\x0f\xf6\x06\xcfj&_\x06.Y\x04m\xdfX\xb8Q_\xa4-\xd6 \xb2{i\xd6\x19Xu\x06\x97!$\x95\xa3\xfa\xce\xe0\xfeF\x1e\x14\xde\x9a3\x19\x103\xd9m\x9f \x1f\xa5c\xe1*4C\xa87\"\xd2\xc2M1\xeb7\xe2G\xda\x81$n?\xa8\x9c\xec\xf5\x8d\xd4r\x11\xe4&\xc7\x0d\xdc\xcb\xb6ksj\x10\xe8\xdb\x01\xc1\xc8\x95h\x84\xcc\x84\xdcbj\xfc\xd66\xdb#\x89T_z\x9b\x1c\xd5\xd6J\xb2\x1a\xd2\xf1\xcc71b\x0fv !\xb0bOY\xa4%j5\x1a\xf1\xa3\xd6\xf47\xed\x87 t\x0c\xbf\x86iI\x0b\xcd\x9a=\x1c\xaa\x91[\xe9\xa8\x11;\xcaA\xf7C\x04\xb0\x81\xa9\xc3\x16lX\xb9\x99\x1d\xc7\xf9\xd0\x0c\x8ci\x03\xf3\xd4\x06\x0b\xada\xf5WQ\x8f\xe7\x06\x87\x10\xd75\xd3\x8a\x91t\x0b\xff\x95\xcdmy\x06\x95\x82\xa1\x01~\\\xb6\xd0t|\xee\xb4\xff\xe3*\xef%\xfab\x96\xac\x99b\xe2\x85\x9c\xe3\xe8\x18t\x03%\xd5Mhs\xbb\xf5\xbd/\xec\x14\xd1\xe5\x9bD\xa3\x04c\x92V\x00\xd71\x89\xf3\xfc\x9c\x10$\x81\xe2/\xeao\xf0:I[\x91:\xd4\xa5\x88\xd0xK\xf5\xc0\xf8\x8f\x1cV\x1d\x9d\xebc\x92RL\xe3]\xc2\x8d\x99\x17\xbd\x81\x01\xae\xec\x93+\x8aAs\x0e\x19\xbc\xe0M(\xd2hW\xba\x91\xd9\x03\"\xbf\x18e\x97\x0e\xfe#E\x0d}\xd9L\x8a\x8e\xbcB_\xaf\xa1@\x8aG_\x08)\xdd\xc8\xce\x0e\x0e\x86\xaf\xde\xce\xae\x10\xb3\x9b\x06\x86\x8c\x956\xb2\xa0\xf3\x18v\x7f\xfd1\xc8\xb60\xf8\xce\xa1\xca\xd2Y\x1f\xd5\x1e=*\xd5y}\xfb\xb8M\x8bQOhly\x9b*\x96\x01\xfb\x8d\xaf\xad\xf3-\xb1\xa9\x8c\x1e\xa0\x01v\xc0O,\xcaMn\x0c\x9a\x05\xef\x0b\xcfijh\xf5|a\xf5\x0d\xa3\xa9\x17\x9a\xa9g};\xbe \x08\xa9C4h\xe4\x85\x1eT@\xa9C\xeb\xde\xc3\xd1\xc4\x98\xfa\xa45 \xc68\xa5\xeeu5\xa3\x9b\x1ei9Nn\xb4\\Pt\xa63LcS\x164\xa9\xd7\x11\x87\x11\x04\xb5\x84*\xf5\xb4 \xb1\x9d\x01\xabfu_Zc\x14Y\x94\xe4\xb34[\ns\x0c\xca3\x06C\x83_\xa8z\x1dl\xa7\xc0d\x9b\x8d^h\xa9*\xe9\x95\xb5\x9a]9*\xb1\x0d\x0f\x9c\xc9\x95[J\xdb\xca\xea\xf2\x983v\x80\xe068\x84\xae\xa2\xc9'\x15\xaaf\xb9^\x14\xf1j\xc1\xa0\x88\x97,w\x86\xbcW\x03\x99\xaf\x93O\xa5\x9bJ9\xba\xea\x8d\xcc\xfaW\x94W\x852ut\x88Y\xf8\xdc\x93M\xbb\xda\xc5\xf3'5Lw\xfc\xd4\x8al\xaeLd\xe1\x05\xa4D\xe0\x8d\xaa+\xdf,\xb6z\xfcZ\x99\x81Ri\x04\x19\x9bj\x88C\x99I\xeakN\xd7\x90`\x14\xf1.\\\xc5\x1c\xf4\x8d5*u3\xafT?/h\xfb%\xc2\x13\x83\xaa\xa6E\xf3h\xcc-RNT3y\xaa\xde\x1d\xea5\xdc\xa9Ff\x8bu>\xd7\x1a\x10\xbf\x0fU\x89\xb2\xbaG\x9b\xedU\xc6J_\xbd\xa8M1J\xf1S\xca\x1d\xa3\x8eg\xe4\xc8\xf4\xd1\x1c\xe9\xbfj\x99\xd3Hnl]\x12\xd7\xfa\xa2p.r-\xc9U\xb5\x7f\x9a\xe7\xb1v\xb1}\xb5\xab\x14\xc2\x88\xd4\xe6\x12j\x99GY\x15\xee\xde\x8a\x14\xa0\x0eL\xeb\xa2\xe3$Z,\xf86\xac\x16y\x9a&\x0cn\xe7,\x81\xdb2\xa9\xd2\xd6!\xf4\xcd\\\x86B\x8bi\x10\xcd\x1au\xdc\xb0\xbb\xbc\x88\x17\x8b\xdaV3\xbb,!C\xb8\x03TB[j\xa5V\x0b\xb5w~,\xd8\x95x\xc3\xe0\xee:\x816']\xa3 \xa5\xdfS\xbd}\xcb\x9d\xac\x1ay}0\xb5\xfd\xd6&)X\x00\xae\xbev\xc4\x98qvk\x8b\xb2t\x97ug\xb3\xa63\x13\x85\x13\xfd\x80\xe1P\xa9\x1dB\xac|\xa3]\xb7\x17!le\x06\"\xd1\xf2Q\xe7#\xc7\xcf\x8c5\xc2\xf3\xe5\x17:q\xbe:Al:\x174\xdf\xaa4\xc2\xb6t;)t\x88\xe25\x82\x02\xb8\x88\"\\cW0\x0c\x93\xc9\xc0\xf4-.\xcb\xd7\x1b\x0dU\x93\x15\x03\\\xf4\xea\xdc\x960!\xb6\xb7A\xdf \x89\x8e\xa9\x1at\xfe\xccd\x14\xed\xd6\x8c-\xd6l\x90Q\xf8\xc2fZ\x10Y\xe1Cn\x12w\x83\xb8\xdc\x8b\xd7\xd6\x98j3\xeb$G_\xcc#\xa9KEiv\x1aM\xe6\xf5\x8aq\x95\xdf~\x92\xb1\x1a.tK\xdf\xab\xf0*\x16D\x93\xa4\xaa\xd2\x8a\xb4\xb4\x1am\x03 \xe7\x069\x8eug\xb4iV\x10M]\x12\x99`\xbe\xc08\x80\xc0F\xc9\xa5U\xf9\xab/\xf3f\xa3\\`\xaeUX\xd34\xc2}\x97\x8b\x84g\x00\x7f\xfb\x86&5\x0c\xd0Sen\x92\xb7\x16\x89\x1d\xb9jq\xfe.z\xe7c\xfa_\xd4b\x14B\x7f\x817w\xdf\x7f/\xd5\x15;\x98\x9b!\xc5\xe8\xd6\xc32\xfc\n^ \xb5\xa7O\xef4\xc7\xba\x0b\xce\xc1\x93\xa7\x81\xcf\x87$\x916\xca\xf3\xf8:\x81!\x16=\xfbV\x9b\xc2\x10\xd2\x10\xb3\xc9\x85\xb0\x0eA\xf5h\xec\xadNv\xbd\xd6\x85\x05\x7f\xb4\xb8 Evg|E{g-B\x90Q\x00I'\xacI\x9a\xcc\xe2\xeb\xb5r\xc3\xea\xd3\xcc\x7f\xe4t\xd2js\xe2\xc2,\xd8C0\xcc\x80\xb5u\x85IT\xda\x8fU\xa7\x93\xb8\xf4Xhw\xb9\x99%Y7\x0f\xdd=\xec\xfa\x90\xab\x91\x88\xd0\x86$\x14\xc3\x8d\x13\xd4\xa35\x0cJ\xa6\xa5.\x0b\x1d!ez\x0d?\x13\xf9\xc1\x05K\x81\x9eZ\xd5*e\xfa\xad\n^\x17\xc9\xd4\xd2\x83\x83 \xc4\x8c\xa8\xa3\xcb\x10\xe2v\xaa\x1aR\x1ap\xce\xf9\xacG\xec\xb2d\xe6\xf9\x8fz\x15${\x05\xf6\xf3\x1c\xd8\xce\xce\xf3@\xb9\xb9z\x91\x07\xdb\xe0oo'A\xa5\x82\xda;0\xe5zM\x8f\xa2\xdc&|o\x96\x88\x9c\xb9XTJ\x1c>o\xb0\x90Q\xeeC\xf0\x02\xd8\xe6\xff\xfcM\xb51K\xa4\xc3\xa68;+\xc7\x81\xe7\xf0\xf5y\x9de\xec\xbcF\x04\xc5G\xf9\xc6\xb1f\xaeD\xf2 \x9eZE`\xa9\x1e\xec\xbd\xc9\x9f\xc8OB3\x01\x95\x03\xfd\x81\xba^\xfe\xfa\xad\xc4I\x88\x1cT&u\x1a\xe9\xeb\x00\xaa\xaa]\xb3\xe2\xec6Q\xd5^\xb1|\x92\xc5\xab\"5\x0c\xa8#\xd7\x07\xef\xa2\xa5\x19\xd3d\xed\xaa{~\xb7\xbcJ\x17y\x87\x93\x89\\cA\x82\xe5\xd1\x9c\xf9\x85\x89\xa7('\xea50\xca@\xe4\xe7\x81bv*\xf1\x9b\xce-G\xae4\x7fpOg\xa1H\xba\x9eQ>\xb6\xfa\xd2\x93M\xa0\xa1\x86\xfd]\x1d\x81\\\xaa\x0e\xcc\xe7\xbe\xfe\x07\x9b\x89n\xe0SJ\xe8\xb4\x9c\xfd]\xbd\x95o\xdc\x15\x8f)\xfe7\xf1\x07\xfb\xe6n\x89iO0\xce\x9e\xde\x17I\xf9\xc1Fd\xc2\xe3\xfb\xa7\xa4v\xa3\xddK\x12\x0c\x19\x92+\\!\xbd#\xc1\x87\xac\xa9\xe5HF\xd9%\xfa8)_\x8a\x08\x05\x12\xf5\x85\xb5$I\x0b\xa0\xf5>\xba1\xfcr\xe8[[R\xdb'B\x10\xd4\xd3\xc8}\xf9\xe2P\xe0![\xefR\x10\xceY\xdbh;\xa1\x05\xcdH\x15!x\xe31\xcb\xdf\xa6\xd35\x9a\x9c\x98K\x89\x8c\x8e.W\x06\"\xde<\xda}v\x81\x88\xbdX9\x17\xae\xdf/\xd6\xd7q\x92\x0f\x1d{\x8be\x99\xab\x08\xb0\xed\xe9z\xc2\xb2|\x08~\x9f\x0b\xbar\xe9\xcd\xe2E\xc1\xb2\xee\xc4\x80\xf5>\xb1\xbbs\xf6_~\xd0c7,\xd3\xc8\xb4\x13\xb4`u_\xb4d\x0bD\xa9mT4d6Q\xb2?z\xb8f\"\x16aw\xb2\xefDg\xd6[\xb2\xec\x9a\xf9N \x19\xc5T\";\xdc\x06X0\xfe\xe1O\x0f\x8d\x08\x9a\x1e\xa3\xf2 N~\x0dtH\xe8pZ\xbf\x06\x805)\xb2.\xc2\xc5B\xe5\xb6k^\x97\x89\xcb\x0f\xf3m%\x94\x0f:\x0b\xe5j2\xa6\\./e\xec\xc9\x95\xaa\x03\xc3{\xfa;\xfb/>\x83\x85uG\xc5\x19\x9b!\x18WS\x0bv\xc3\x16\xc32`|\xadl\xc9\xf2<\xba\xe6Go\xe9\xe6\x8d\xb5\x8c\x1e\xff\xbe\xa2\xb7K\xaf\xd5\xa4\xe1\xb4`\xfb\x97\xfc|\xc5&C(z\x9c\xc98W\xda$\xfc\xf5\x87\x04\xd6\x91\xb28f\xf35\xe8\xc0\xb1\xaaok\xa2\x80\xd8\xa1\xf8b\x15 \xbe\xc4l\xba\xc2G\x87\xf6\xf0\xc9\xae\xa9\xd4\x7fH\xed!Er\x08\xf7\xf8\xff\x15\xf4\x80 \x87\x8e7\xd3\x11\xd2\xe4]q\x8f\xc6\xff\xdc\xab\xfe\xdc\x0f\x02a:\xf3\xf7'_\xb4!\xa3\xeb\xc0\xe8\x80\xc67e\xb41\xc4ZI\xc7\xbd\xa0\x17'S\xf6\xf9l\xe6{\xd2\xe21\x9dA\x84g\xbd\x9f\x07\xa6\x11)\x947\xd1/a\xc7\xe9\xf6\x7fS:q\x1b] \x07ft \xa3:S\x96\xb6\x98\x05\xa1\xf0\xbd\x90\xea\x1e\xf4i\xe7z\xfb\xa1\xab\xc3>\x92\xd8\xed\x0ebB\xadqq3\xe1\x9b\x88\xd0\x90\xd7\xcdh\"\x91i\xdc*'4\xb1\xab\xe5\xef\x970\xc0\x83}\x1b\xbc4\xc3\x18)\x05\x0c!\x1b%\xb0\x0d\x83K\xa3\xea\xae\xac\x8a\xc0\x0b\xc1\xd3kj%X\x80\xbf\x9c\x03\xfc\x1a\x82\x97\xcf\xd3\xf5b\nW\x0c\"\x97Z\xc3O6\xc9$\xe0&~\xbf\xe9\xfdD\x9c\xbdEO\x1c\xfc$\xa1\xd1nu\x1dD}\xb0\xf7TCZ\x071\x0f\x91_\xfcMC\xe6\x1b(\x8dkw\xfa\x14\xf9\x11&@\x9e\xf2s\xeay\"e\xeaj\x11M\x98\x9f\xb0[\xf8\xc0\xaeO?\xaf\xfc$\x04\xef\x9aW\xf7\xbc\x80\xd2\x1b({\xa2\xdf:\x1e.\xa2\xbc@ss\x11Yr\xb1\xc0\x1fy\x19\x16\xd6@+R\xb4\x10\x98\xf6\xd8|\x1d[M\n\xa5\x8b0{U\x0cl\xd0q\xf5\xea\x80l\xd3\xb1\x94k\xae\x8b}JXU\x9a\x16cm\xaa\xa9\xd6\xc1B\x8f:n\x1aB\xd9=oG\xe3\xc8\xbf\xc5$\xe9A\x97\x9d\x90F\x1cs\xb0a\xdb\xe5\x92}\x11\xdd\xa5\xeb\xa2\xdb={)\x88\xfc\x03\xdc\xafS8\xfeP\x1c2}\xbf\xbe\xdb\xef\xbb\xef\xd7\x9fv\x16\xe5\xffW\xe0\xab\xff\xbe\xdb\xca\xc6\x99P\xaahvM\xa3\xa8HaM\xfc\xd0X\xb3& \xb4\xb0\xab\xe6\x98\xa4\xd3\xb8\n\x96hm\xaen\xe7\xa3J/\x90\x86\x90\xf7>\xbe\x7fu|q:~s\xfc\xa7\xb3\x8f\x17-\x8a\x82\xfaQ+\x88\x00\x9e\xa0R\xb9\xa7S\xc2\xc6\xde~|\xfd\xe6\xe2\xb4M\x91\\\xefM\x08\xde\x9b\xf5v\xfe\xd3\xd9\xcf-\x9dX\n\xca^>Oo\x13\x9b\x0e\xa9\xa3b]j\xed\xabO\x8ay\x9c\\\xbb\x1c\xe0\x94\x16\x1f\xdb\x95\x87T\xd5\xc8\xdf\xf8\xd8;\x1ev\x1c\x0e\x19\xe1\xd8\xd8\n\x07 \xf5\xb7g\xafN7\x06\x07\xce\x8d\x06GUi\x99N\x99c\xfa\x18\xea\xdc\x1fy\xbcJ\xee]\xaa\xfb\xab\x84\x0f5\x13\xb1C\xd0\xc6\xd9\xabO#\xfd\xad\x1c\xa5|\xd9\xce\xd7\xcbe\x94\xdd\xe1\x94o\xe7\x91\xc8\x0f\xc4\x7f\xc4\xf99_U\x11\x86}\x9de,)~D<\xd5\xdf\xb8\x98-u\xec<\xdd\xfbUO\x1d\x82\x95\x13de`Z\x97\xe5\x92\xda\xe8T\xa5\x9aS\x07\xf6\xe8Z#\x13\xda\xf2\x86\x04\xb4\xba\xb6&\xc9\x80S\xdd\xb50\xd6\xa5 {\xb4\xd6\x8brw'i\xb6\x8c\x16\xf1_\x19\xba{\x05\xd2\xfe\x1d\xfb\xd6wp\xae\xef\xe0\x00\xcb\xeb\xaf\xf9w 9\xcc\x1a\x0eu\xda\x8d\xa5\xdd\xab.\xa0\xd7SX\xe9\xa6\xb1pT\xff\xe9\x8e\x9e\xd3>kj\xef\x1a\xea\xe5\"0\xa6jo\x1bA\x94\xbaK\x06\xb6\xfc\xdb\x81\x1d\xdfBf\xc3c\xd3\xb8Hk\x18\xd2\x89\x94T\xf2\xcf\xdeAG\xd7/N\xa5\x8c\xa1\xd0jt9\xc0\x14\xf3\xe6d~\x12\x8c\xfa\x97!$\xa3\xc1%zc\xfa&EoTm\xab\xbb!\xd6\x13\xcd\xda\xc2\xa90\x14\xd7\x90#\x16\xfec\xd2\xc8Y\xa4\x0e\xac\xf7\xf8]\xfd\xaf\xce\xb0zb\xd2\x0c\xa9\x96x\x16\xf8^\\\xb0,\xc2\xa5\xb0\xc9\x9b\xe1K\xd9\x06o\xc7\x8a\x9b\xa1\xf4\xfd\xac\x87\x0dk\xc9\xc71{\xdaa\x8d\x9f\xddp\x8a\x8dsI\x8d\xb0\"\xf6\xfa\xab\xe5\x1a=\xb9\x1ce\x97f\xfe\xbdX.b\x93\xa4\x06\xaa\x1f#*Q(\xa1\xc8)NM^\xa5\x1a\x108\xb1[oA\x83 \xedx\xd3\xd9r_\xc4AB?\xe6*\x84\x93\x19oE\x913\xf3=\xbdi4\xc0\xd1R!?\xccb\x02\xa6X\x86Y\x97\xda\xa0\nMr\xb0z\xa6i\xc2\x86b\xdc\x9d\x83^\x878\xb0\x0d\xba\x8f\xa86\x98\x1f;\x08\x03\xeb\xe0\x1e\xd5\x05\xcb\x7f\x05\xfe\xe9\x97VE\xe4xk\xea^\xbe\xdb,Z\x1d+\xfdBC\xee\xe8\x7fH\x85\xc5\xde\xaf\xcb:.Paa\x99\x94\xaf\xcb\xa2\x81Y\x94\xcb\xa2\xbd\xfd\x03Z\x97AD_\xfd\xa7.\xe3\x97\xde\x97$:\xadHw\x81X\x95\xec\x99%\x91,yj\x954i),!c!\x9b\xd9\xb3\xba\x9eH\xb5\xc6\xc0x?\x93\xefwI\x84j\x08S\xfaK\xd8\xb9\xd4\xf4,\x99\xa6g\xd1\xac\x0f\xb3\x10fJ\x06?\x7f\x7fz\xd2M\xefQ\xe6G\xd0\xa2\")\x81\x1b\xa3\xe9\xa2Z\x04-Ru\xa5\x08\xe8\xa3V\n\x01\xc7`>~x\xd3m,\xb2\xb3u\xb6\xd0\xfb\"\xc4\xf6\x86\xce\xfep~\xf6n\xa3\xde\xfe\x92\xa7\xa6\xb4u\x96MY\xc6\xa6\x9a\xee%\xe8\xdc\xff\x87\xd3\xf3\xb37\x7f<}\xb5\xc1\x18P\xf8\xc9X\x9e.n\xd8\xd4\xbb|\xf8\xb1\x8c\xcf?\xfep\xf1\xe1tc\xad\x0c\xad\x8fI\x84\x13\xbd]\x98J\x13\xdab\xde\xa2\xa4Qs=__\x15\x193e>]\xad\x14\x04\x0ehd\xdd\xa1\xf0\xfe\xf8\xc3\xf1\xdb\x87\x9a:\x9f\x9d{\xe6Y\xb4|\x17- \xd0\xc4U\x85\xd7\x84\xd6o]\x15\xdb\x85y\x13\xcc1\x9cg/\xce\xff\xe7\x92\x88 7!tB\xea\xbd\xf0T\xe6\xe7\xcf\xfc$\x9d\"\xd1\xda\x8a\x05g\x0dG\xb0\x16\xaa\x88$Z2\xa17\xeby\xb0\xad\xde\xc6\x89|\xc7?\xde\x11\x05\xaa\x1d\x1f\xf3\xf7\x97_\xc4\xf61\xca\xe9\xea\x02\x8e\xc0\xc3\x19\x8d?/\x17\x1e\x0c\xe5/Z\x7f\xa0i\xf7\x18\xe6\xf3F\xeb$7\xd6dA\x08#\x0f\xa1\xc9\n\x86Wv\x93\x10f\x97A\x08yg\xac9}\xfb\xfe\xe2O\x02w\xc6\xaf\xdf\x9d\xbc\xf9x\xfe\xba\x95\xb0l\x84EoY1O\x89\x1a\x0f\x83Kq2Y\xac\xa7\xect\xb9*\xee\xfe\xc8Ak\xf3-\xc2\x1cx+.y\x1ee\xc2v\x1be\x89\xef\xfd\x1ce \x06\x1el\x02\x08L\xd0\xe4\"I\x0b\xb8f \x17^\x19D\x80c\xfb\x1f\xec\xae\x87\x16d6\n\xe4\x18\x1d\xd7\x81#\x0f\xb3\xe8c\x04@\xce\xd9g/\x84\x9c\xaf\xfd\xba}\xed\xffx\xfc\xe6uE3\xce\x7f\xbd\xe5\x8e\xf3\xb3\xe3\xf3=z\xad5\x05YGH\x04\x84\xfa\x9f0\"\xe7\xb4\xe3\xd1\xe7\xe5\xe2Q\xdc+X^\xf8\xb1\xd8\xde\x1c\x0d\xd6K\x96\x8f\xc5\x96\xa4\xbe\xe4{x\xd2\xe3\x9ca\xc4\xa1\xf3s\x8c\xf3\x8bd\xcc\x10ArB\x18\xb1\x86!6\xdfcl4]c\xb7_R\xd3\xefx\xfb1S\xd6\x8f\x1a\xed\x10m\x95\x8e\x15\x94\x01\x95K\xecV\x18\"\x8e\xb0\x9bh\x11\xf3\xc9\xbd\xe7\xad\xa3\x91\xfb\"\x84\xb4\x835\x18\x87FAR\xe4\xa2\xa2\xc8!(\x0b\x85Ks\xfe\xa4\xd1\x93\x1d\x15\xa5}\x7f\x08\x93\xfco\xdc%\xdavx(\x1cH\xdaq`t\xd9\x15\x07\xbaX\x03\x81\xc5F\xd6\xacCj\xdd\x12\xb0\xdf\x18\xf0\xe7\xa7\x17\x9c\x9b{\x7f\xf6\xee\xfc\xc1\xb8\xb8\xcc\x8c\x07\x035\x1e\xce.\xc3k\x9d\xde\xd2A\xc8\xd6\x0ef\xc3_\xa3\x13\x1d\xc2\x07\x8e\xc0\xd0\xea\xdb\xa0\x15\xd6\xd2dP,\x8e\xfcC\xd1V/!\xcf\xc6\xd2\x90_T\x92? \x9e\xaa\x88\x8au\xce\x19\x16U\xb5zS_\x9bP\x96g,_\xa5I\x8eY\x02\xb2\xa07g\xd1\x94\xa19\xd2\xba\xfc\xfb\xcb\x17K?\xc0\x17c\x824\\\xe3}\xb1\x1d\x8e*i\x08\x91\x8b\xdd_;(\xe4B\xc1\xae\xf7\xc3\"\xbd\x12\xda\x97iTDzPm\xbb\x8e?A\x8a\xed\x1aD\x08^\xc1>\x17\x9cr\x88\xd6\xf8\x112\xe9\x88\x95\xff\xf1\xf1\xf4\xbc\xedJ\x7f\x03\xa4\xfc\xaf\xcd\x902\xd6\x90\xb2U\xec\xf8\xaf5\xcb\x0b9\xe9\xd8\x05\xf9.\xa2\x05\x9f\xf9\xdb\x8f\x17\xc7\x17\xa7\xaf\xfe\x91 \xb0\\\x17Q\xc1\xa6\x1f\x1e\x0e\x10\x929<{\x7f\xfa\xe1\xf8\xe2\xf5\xd9\xbb\xf1\xdb\xd3\x8bc~B||0:\xd5$r9\xa4\"\x01\x92O\xec\x8e\x96\xa6F\xad,\x85\x83[\xeaz\x1eYN\xa0\xe5J(V\x0e\xb5\x0e\xae\xcf\xf3 \x080{dY\xbd\xd2\x0el\xfcI\xab\x90\x8d\x9f\x1eUX\xe2\xaa\xb7\xe0\x87ll\x9f\xaci\xd0M\x1b$\x98\x87\x87>\xc5\x9a\xb0\xa3qOL\xd9\x82I&C'\x87Y\x08\xe9e;\xde\xab\xc9<\xe8\xd6\x7f\x98\xb9\x94{\xbb\xe3T8-;?\xf9\xe9\xf4\xed\x83\xadI>\x993\xeat\xfe&*\x96\xf2s,\xd6\x11\xd5\x13\xfdTT,\x13\xca\x87/_\xb0\x9e\xbc\xb6\x1dR\x1fxc \x83s\xf1\xe6\xb2\x9e\x97$(\x7fv\xbe\xbf\xdd\xa3c\x99=\xdb'4\xdd\xf2\xb67_\xb1I\xccr\xaf\x8b\x1d\x00\xb9\x16!\xb2d\x99\xcf\xd0_?/\xb2\xf5\xa4H3\x12zZ*\xa8HK\x0f\x7fx\x08~\x82mD\x01\xdf\xdb\x98\xdbh\x08\xa9n+\xd0\xe9*\xe1\xa6\x16\x87\x15\xe7\xb8\xff\x8cV\xd8\xef\x99 \x91\x86\x85\xfb\x94\xce>\xf1\x07V\x948\xa9\xb1\xa7\x14\xf6\x93\xde*K',78\xdbU\xc9\xfd\x94\x89\xf6k\xe5S,\xafg\xc0\xaf\xd7\x98c\x8d\xb7\x82\x9f<\x99GI\xc2\x0c\x85\xdb\x0d\xd6x\x15\xe7\xab\xa80\xc35/1\x1di\xed\xd55\x11\x80\xee\xae\xed*\xf7F\xa67\xd8\xb6\xc3_\x83\xd4\xea\\\x1bWJ>s\xe6\xbeW\x97Z\xd7V(R\xf5\x08\xba\x82\x15B(|B\x92\xa9\xbd1\xa6s\xd5h\\\xc1\x1fu\xe1%x\xcez[\xd5\x88V|\xe7O1\xc6\xc1\xaa\xb1\xc9*G\xba\x8c\xd6\xcaQ{\xf0\x9c2lJ\xaa\xe8\xaa\x95\x11S\xb2\xbd\xed\xb8g\xbb\x1emo/[o\xda\xd7\x8e$\x1a\xf2\x06\xe8\xc7j\xe0\xa1\x15\xae:\x84\xcc_\x06!,\xbf\xd3^5\xc7\x86\xd7VG\xff\xc8\x93[\x00\x87\x90\xf8\xcf\xf6\x02\x7f\x16\xe0\xb5l#\xec\xd0\x94\xe1\"\x9e|\xf2#\xff\x0e\xe3\x94\x0ct\xfe\x0f\x86p\x83\xc6`\xbd$\xbdmm\x0dk9\x1b\xc2\xd0\xc2\xb12\x19N\xd8-\xcc\x83\x1e'{\xbb\xfct\xe2\x7f\x0czi\"\x8578\x84\xab\x10\xbb\x8b\xfc\xb8\xb7J\xf3B\xeeB$5\x03d>&\xbdh:=\xbdaI\xf1&\xce\x0b\x96\xb0\x0c\\\x01\x0b\xb5\x06P\xdb=\xe9\xc5K\xde\xe39\x86S\xcdU\xd0c\xf7\xd4&\xfa\x18|tt\xe3\x07\xca\xef\xea\xa6\x87\xf6\x88t\xa7\xa1\xab\x10\xb6\xc4\xc8y_^\x9ad,\x9a\xde\xa1\x1d\xc2d\x1e%\xd7\xcc\x838\x81\x85\xef\x89 \xaf\x1e_>\xf7\x88\xf2^\xb4Z\xb1dz2\x8f\x17S_\xfb*\xe8\xd9-\xb7\xe1p\xde\xcb\xd82\xbda\xa21\x91 \xa7\xdc\xa7\x06\xce\xd6\x16\xb5a|\xac\xb8\x88\x97,]\x17\x1aF\x84\xd0\xaf\x1f\xb8\xfa\xd1g}?\x84\x95q\x06pZ=\x84i\xd5\x04\xfe\xf5\xedq2\x1bM\xebh:\xea\x08\xc2\xcd\x9f\x9b!\xb0v\xb2\xd9\x18\xc9\xb5\xb5kBQ\x02\xb2\xeb\xb6\x8e[\xa0\xb7)\xb3\xb3\xfb\x94dvv\xfb\x8f\xef\xc3\xe2`\xb2\x10\xa4\x95\xa9_\x88|\x1b:\x9b#\xed\xedJK\x08[\xf1\x82\x91\xa2{3;\xa5\x98\xf8\x82\xf3\xc2\xa8\x05\xe3b\x92\xb4\xa4\xe5\xec\xc32\xce7\x8cs[\x8fu\xffd\xef[\x02\xda\x17\xba\xe5\xc0!l\xb9\xcc\xb9w\xfb\xbf\xa4Q\x8e>\x1eY\xa7\x8b\xa5d+\xf3\"\x9c%\x1d\xa1\xc5]\xa8\x8f\x89\xe1\xd40j\x8aw2\x9a\x13\xd8\xe3\x81\xccOC\x88\\\xb5\xa112\x85zn\xa4\xb3}1J/\xfd\x88\xd0\x10\x98\x8f\xd0\x0e\xa2\x8a\xc2Y\xb7=\x8a\xb3ztF\x9e\x0c$\xa3\x1e\xdb\xe0K=x\xeb\xb7\xeeM\xd3\xa4\xda7%`\xd5N\xf0\xf3\x00c\xfav\xd0\x80\xab'\xf3=\xce\x15\xcb\xc8\x1b\x89\x88\xd7 \xd2'\\\xb6exq\x918\xc2^\nM\xc0\xb7R_\x84\xc9\x8e\xe5\xff\x98\x0d\x87\x8b\xdb\x9b\xa1Q5\xe9\xc1>}\xca>1\xe5j\xa9R\xd83St\xca\xfc\x15\xe6\xa1,\xc4\xf0\xa7\xfd.g2\xba\x1f\xe4\xd4\xc9\xbc\x15\xa1d\xa9TP\xf5\x8dX\nb\\\x84\xdf\x19\x84(\xb2\xa3\xa7|\x8aQ\xe2\x82@Jb\xa1\x90\xdaa\x07\x06!J\xe9\xecy\x99o\x12\xc5\xbe\xed\xed\x05\xbc\x80\xc9s\xd7\x81\xc2%\xa4\xb5_\x8c\x16\x97\x0e\x82\xcc\x05w\xc2y\x81O\x01{\x995I\xc7\\\xa6_\x8d\xa6\x0e\xe9XO\xaf\xcd\xbb\xe1\xc2C\xee\xdf\x840\x0da\xc5\x99{QA\x98r\xceQ\x80\xb9\xe1\x9c\xfc\x0d\x0c!\xe6c\xc6@\x17\xfc\xcd\xe8\x92\x9f\xceT\xf8!\xebM\xe6\xaf\xb0\x83y \x00\xc6\x87\xf7\x9d\xfb\x13\xb5>\xf7E\xc2\xbd\xfdN\xbc\x1bq\x14{\xe31\x9a\xb9\x8e\xc7b\xaf\xe0\x9e\xe0\x8c\x88\xfc\xc0\x86z{V\x9cZ\x12\x19\xa2\\Z\xa1\x12V1Zb\x1a\xc3\xbf\x01\x95\xd7\xa3\x82\x0b\xf7\x1b\x9a\xb5k\xf4\xc9\xe4\xc5\xd261\xab9\x10\x16C\x95\x9c0\xc4\x0d\xc1\xab\x9b\xe2\xb6\xc5\x8f\xc10\x94\\&E\xb3\x07B\x06p\x9b\xf7\x7f\xf5\x1d\x8b\x9dv\x81\xc7/lN\x1cBQ7\xa1\xc8Q\x17\xcd>\xb3\xc9\xba`\xf2N\x0b_ \xfb\x81?\xe4ir\xbeb\x13\xed\x95\xfc\xe9\nJ\x11\xfb\x89\xbfO\x862\xe7%\x83=\x87\xa3<\x91\xecX\xad\xc5/c\x0b\\\x9bL\xa3\x0cU\xa9\xec\xf3\x15\x9bH\x07\x05R\x1aj\xc4VfX\xf6TL{(L\xd1rv\x91rx\xcbz\x89^\xc55\xa1\x90Z\xa9_c655\xa1\xa9\x1b\x0c+\xc71\x14 #\xcc\xe5\x04\x11\xbc\x80\xe29D\xdb\xdb\x01\xc4\xa3\xe8\xb2\x96&$\"\x0e\x08\x13d1\x82*N\x14\x06\x7f\xa8_\xcf\x9dD\x939\xa3\\\x8c\x94\xd4\x11\x8f\xfa\x0e\x07\xa5\xdc\x0eP\xbf\x0e\xab;\xce\x80\xb2K\xe0\x8f_\x8f\xb9I\xe5\xacq\xf2\xe9F\x7f9\x1a{\x05\xbd\x7f\xc9\xd8\x8c\xa3<\xdeb\xf3\xedh\xcc\xd2W\xa3\n\x81]n\xc2\x80\x87\xd4F\x7fh\\!\xcd\xb8\x94\x0c\xda[\xa4\xd7\xb2k\xe1\xb6\xea\x9b\x1a\xdc\xfah-J\xb5\xc1h\xcb\xb0\x8c\xf7\x1f/\xc3`\xc7\xd2\xae\xd0\x8aRcP\x95\xbf?]\xef\xa2c\xb8\xd1c\xbd\x9d\xa4\xcbU\x9a`VJ\x0b\x04e\x94\xb6\xf3\"\xcd\x1c\xd6\x01Z\xa0b\xbb\x02\xde\xaa\xd5z\xb1\xeb\x08\xab\xa6\x8c%S\x96\xd9\xa5\xb9\x0c\x1c\xfe\x89\xbd\x8dV+6=I\x93\"\x8a\x13\xaa\xea\xa2\xdc\xbeK\xb6L\xe3\xbf\xb2\xc0\x8fDvr\x91>:F\x1e\xdcJ\xa2\xe5T\x0bfiZ\xbcN\xf8\xda8\x9d\xd9\xf4\x99\x0d\x810\x1c\xe7\x0f1\xf8\xa19\xd0\xdc\x1e\xe8\x02\xc7J7)\xa05\x84\xb5\xfdYd\xdd\x88\x80\xc5\xcb\xba=\xd5Z/\x9a6r\xf6\x02\x0d\xd9(\xc2\xd9\xe2\xf4\x05\xbf\xa8\xe3\x17Tk\xeft\xfe\x02d\xe58\xf3\xfe\x94bf\xd0=\xea7\xb2\xf1uTD\xfa'p\x04\xff$0\xb0\x81y\xbb\xe6\xcc\xdbcj\xbe\xd7$[\x17\xcb\x12\xda\xe5\x0cK\xac\xd6\xd6\xaa5\xca\x01\x11?1\x0b\x16\xb2\xc0\xead\"\x0b\xac>f\xb2\xe0\xc0,X\xe1\xd2\x99\x97\xe4S\xac\xbe2\xde\xcee#O\x9eXC\xbd\x11\xe2\xffc\xf3\xfa|)?y\xfa\xf8\x19\xcd\xe6^\xff\xbal._W+\x1d\xb4C\xe5k\x13\x81\x06\xa3l \x8eR\xa7\"Y=\x9a&\xb9\xad*\xd4\xaf\x18\xf2\x8aM\x12\x1a\xefL\xda\xe1L\xcc\x02?\xeb\x952\xb3\x8a\xe8\xbf\xae\x19\x9594\xe7n\x0d)\x90:\x04\xfd\xd1F:\xab\x19\x06%r\x98\x8b\xda\xdbQ\xfb\xdc?\xb1\xbb!xb\x1f{\xf4A\xa0?\x9224r\xec\xd4#\x07>-\xf5\xd7\"\xee\xc7\xa9Hl\xcf\xe9\x91a\xbf\xf67\xf4u\x0fdn\xf3U\x96\xaer\xf9\xf7$M\n\xf6\xb9h\x81#\xb4\xc2\xf2\xebe\x10\x12\xe1\xd8\xcbb\x7f\xd5+\x89\x9dK9\x8d\x98KC-\x95\x9c\xc2\x0d\x1fp\xc2&\x85\x16\xdb\xa4-\x80\xeb\x8dL\x8eo\x9a_\x7fE31\xe6S\xd1'\xd5\xa3PD?\xbe\x96\xd1\ns\xd0_\xa4\xfc\x04@\xdb\xe7v\xa9\xc1h\xb0}\x9d\xf1\xde\x9a\xba\xc7\xd4\x1f\xf7\x9a|\x0d\xfc\xa4\x8c\xf1D\x146d\xf6Ij7\xee\x0d\xd4d#J\xb2\x01\x15\xf9\xadP\x107t\x1f\x96rl@5\xeeC1Z\xa8\xc5M\xef}\x96\xde\xc4\x9c\x97\xef\xd0\x18 j\xa6Y+j\x82\xe0\xb16\xa3Qn\xf2t_:\xdf@\x97Zh\xd2W\xb1\x81`h$\x0ci\xb4\xf4j\x8c(]r\xc6)\xe7\x8c\x1b=\xa7by\xd9JS&\xd2\xba'\x1670\xc9(\xbd\x0c!\xc3\x7f\x19\x99\x88\xa6i6c\xbc\xacp\xb0\x9f\xc44\x85\xcdc\x830\xde,\xb1C\x9d0\xb8x\x1c\xf58(\x82\x9b|\xeb\xa4\xff>\x14C\xa4\xac\xc5\xda8\xb6\xf6\x93\xe2\x8a\x03'\x12Z~\x8c\xb2G\xa3^\x13=\xb5\xa9J\xb1)U\x11\x14e\xa2\x90\xfb\xe7x\xb1\xf8\xc0&,\xbeA\xa1%o 2&\x81id%\xf9\xa3M\xb8\xda\xbd\x9b\xd2\xd4\xafM\xa4\xa7#y\xdc\x944\xaa\xcb\x06\x0e\xd8e\x1d7\x14 \x8a\xa4\xd3\x96\xa6\xee\x8b8A\x18\xb9n\xdc\xf4\xa7@a#\x0e\xc1\xcb\xd2\xb4p\xdd\\\xa8\xa7\x9d\xa5\xdb\xd8\xec\xc1A\xfa\x1a\xc8\xde\xd7P\x97B\xc9\xedn\xc5c\x03\x8db\xa9\xaaY\x08\xde\xf1j\xe55\xcc}\xde\xabl/x\x7f\xbek\xe6q\x88\xb7\xa2\x81\xc5\xcc\xb4\x1aUTJ\xb3$Z\x12z\x8e\x16\x90{\xd3\xf8\xc6\x92\xe5\xd5\x93\x17w\x0b\xd6\x14\x14i\x15M\xa7\xe8B\xee\x0d\xd8\xb2\x01k'\xe9\"\xcd\x86\xe0\xfd\xff\xa2(r\xe4\xbd\xb3W0\x04\xef\xff\xf9\xdf\xff\xb7\xff\x03<\xf7\xf9\xea\xc5\x9e\x00\\\x08\xdeI\xe9\xa8.\xd7\x96/\x0c\xe6\xbf>\x84\x02\x8e\xc0\xe38\x0f%\xb5\xf0`\xc8\x17\xd1\x0b!g\x0c\x8a9+\xbd\xe3=+\xe4w}b\xb7\xad\xca(\xb5&\xdd\x18f\xb9B[>\xab\xd8o!oW\xdcx\x9c\x7f`\xd1\xa4h\x17.\x9a\x0dI\xf5\xa7\xf3\xd1\xa5\x9e\xf2\x08k\xa7:\xd0\xc2\xdf&N\xfe6i<\xad\x92{\xf0\xb7\xd0*\xd5\xd1'RB\x9eHI+\x9f\x0b\xdd\x89\xb9z6%\xea\xea\xa9\xae\x02:\x9cI\xea\xe9 \xe1&n\x1a\xdcI\xc2\xc5\x1bwz\xda\xd2\xbd\xa8Dl\x01\xa3\x06\x0d\xa8Y\xb5\xed\xde\x1dZM\xfdJ\x06\x95\x91\xb7\x83Yy;\x88\x96\xa9\xe2v0\x85\x17\xc0\x9eC\xba\xbd\x1d \xd7Y\xbb\x1dt1\xb0\xa0\xdf.\xe9h\x9b9 \xd7\xc9TP\xb6XOG\xc5\x87\xea\"\x92\xe36\x89G:d;VL=\xc27\xbb\xc0c\xc6\x8d\x1f\x8e\x99Q\xd4\xddPgW0\xb4\x94\xc6\xf6\x19\x9d\x86\x10\x9b@\x8ag\xe0\x97\xc6[U\xe2\xbf4\x90A+\x13v\x0b\x17w+v*\x12x\xbdcl\n\x11\x88\x0fB(R\x981\x0e\xfd\xa8:#z\xf0s\x94\xc3u|\xc3\x12\x880\xd5\x8d\xaf\x99\x04\xa5\xfcPY'BM>\xe5\xe7\x89q\xe1\x9aZA08\xd6 \xa3-3*\x84\\U\xce\x8b\xc5\xbc]\xe4(\xb0\x1b\xfe\xf3N\xb1\x9f>\xfa\x14\xe0\xcf[?\xc2\x1f\xb7\x82[\xf3\x99\x1f\xf4\x16\xe9\xb5\x0c\xeeR\x9d\x86\xb38\x99j\xc7\x1e\xe70$\xb3Q\x0e\xa0\xd3%\xa1\xdb|_Nx\x08\x89\xff\xe4\x89i\xc8W\xe9\x8c\xeb\x97\x03]\xba\xa4\xaf'\xdc\x03\x99G9^\xb3\x0bG\x89w\xe9\x94\xe5C\x18\xddX\x12\xc2:\x04\xe1V\xa4\x90\xd5w\x10T4\xdb\x16\xb1\x93\x1c'\x838\x94\xd7x\n$x\np\xc4Jz\xf2,\x80\xa1\x8a_\x87\xb1\x89\x9d:\xee\x05\xca\x11\x92\xfd\xec)\xa4\xc6hl[\xfd\xc6\x03\xd0\x81\x8e\x8dwR4,\x0b\xa1U\xd1\x1b4\xb8@\xd26[g\xd0\x84\x1b\xec7\xf1\\\xf5Q\xcbKC\x93\xceO\xd1b\x8cz[\xc4K\xa2\xc4SE;\x8bt\x12-<\xbb\x06[F\xf1\xc2~\xbdL\x93bn\xbfN\xd6\xcb+F\x8ck\x15\xe5\xf9m\x9aM\xed\x92\x8c\xef\x07\xfbu\xce\xa2lBtP0b0\x9c\xef'\xde\x923^gD\x03\xb7\x8c}\xaak`\xdb\x94tN.W\\N*v\xb6\xfe\xab\xce\xb5\x92\xac\xae\xce\xe5\x16p\x04[[\xd9Hp\xce\x98b\x8e\xcf4\xcaX$+T\xe3}p\xfc\x12\xa9\x03\xcf'\\\x8c|\xc3f\xc5\xd0\x0c\xe1U\xabq\x91\xae\xac\n\x19\x9be,\x9f\x8b\n\xb8m\xf3\xb6}\x98\xf5\xac~Q:\xf8\x1c\x9aE\x17)\xfaK\xf7\xeejm\xb4\xee\xc3\xec\xdb\xe1\xe4R\x83\xfa\x83\xc7\xa6u\xbatM\xb7B\xc1E]\xd4W\x9c\x82\xb7\x86\xd6f\xbdY\x9c\xe5\x05\xaa\xf4\xddZ\x1b\x94\x9f\x12\x112\x06\xd3ic}\xferO\x8aS\x1cC/\xeeV\xd5\x89s\x93\xc6S_\xbc\xc7\xa5\x83\xc3v\x0f\x15@`k\xeaX\x8bU\xd2V\xc5T\xfbvW\xf9r\xae\xba\x15\x82{\"a]918\xe2\xc4]\x04\xd3AMy}j\x15\xde\x04F0\xa6o\xa0\xdc\xdd(\x07}\x1f\xcbz\xb3t\xb2\xce\xcds\x86v^~\xf0\xdd\x1f%\xf1\x12c\xdb\xbf.d\x90\xfb\x93t\x9d\x104\xf6*\xcd\xa6,{\xbd\x8c\xae\xd9\xd9\xba@\x06\xbf\xa1\xca\xf9\"\x9e\x10$Y\xab\xf1s<\xa5\x8e\x95\xab\xf4\xf3\x8f\x0b\xf6\xd9Y\xf0\xfb,]\xaf\xc8\xd2\xb3l\x1a'\xd1\xc2Qa\x92.\xd6K\xd7\xdcDan\x17\xcc\xc8\xa1\xcc\xc48n\xe9\x92\xf7i\x1e\x17\xf1\x0d1{^z>\xcf\xe2\xe4\x13]\xf6\x8e]G\xee/1\\\xb1]t\x9d\xc5\xd3\x0f\xd4Xd\xc1iB\x1c\xc5\xb2\xec|\x15%\xee\xc2\"\xca\x08X\xf1\xd2\x13\x84WS\x99\xb3WQ\xec\xeeX\x96\xd3}\xcf\xd2\xa4\xf8\x99\xc5\xd7s\xa2l\x11'\xecd\x11-\x89\xb5\xe7E?9>KW\xd1$.\xee\x88\x02\x1a\xdci\xb6\x9aG\x14\xaa\x14\xd1\xd5y\xfcWb\xedn\xe3izK|\xf0\xd7\xd7\xc9\x94\xc2\xae\xbf\xa6\xe9\x92\x98z\xbcX\x9c\xb9\xc6:[\xa4\xe9\xd4Y\xca\xb9\xd9\x86\xc2,\xfd\xc4^E\xf9<\xca\xb2\xa8\xb1B:\x9b\x91\xdb^\xd4x\x1b\x17,[\xc4\xcb\xd8Y\xa3e\x0c%A(\xcb\xbe\xda\x17p#\xefgv\xf5).\xbc\x10\xbce\xce\xff}\x9b\xfe\x95\xffw\xe6i\x9a\x1e\xa9\x89\xf9\xc4\xeer?\xeb\xe2\xee\x9d\xdauh\xa7\xe3Q\xeba\x0e\x9a:\x11\x13WL\xe6Qv\\\xf8\xfd\xa0W\xa4\x1f\xb90+5\x99\xbc,__ \xc3\x0b\x7f@\xd9\xa4\xa3!\xe8%gf\xf4\xd0\x97X\xa6\xa98\x8d{\xca\xd8\xa2\xf1q\xfe1\x89\x8b\x05\xcb\xf3w\x92i7\xdcs\xf3y\x9a\x15\xf3(\x99*\xad\xd5\xe9\xe7U\x94\xe4\"'\xa3=\xc5\xabh\xf2\xe9:K\xd7|\x8f\xd3\x00\xa8j\x1c\x17E4\x99/\x19Ev\xed\xda'\xb4\xaccW\xc4#\xa4KEA\x8d\xd3\xe4\x7fnR\xf9O]*\x7f`+\x16\x15C*\x8d)\xa1:\xb1;i\x87\xdd\xfd\xc7\xdeiD\x92\xc29F\x81\xa5\x8eC\xba^\xe9\\\x98\xc76W*W\xb6\xfb\xd0~H\x8b\x82\x93\xc2\xa6\x01\x8a:\x9d\x86)\xaav\x1a\xac\xa8z\x8f!\x0b\xf1\xa9i\xc0\xbcF\xa7\xe1\xf2\x8a\x9d\x06\xcb+\xdec\xa8\x1f\xc4y\xd84V\xac\xd2i\xb0X\xb3\xd3h\xb1\xe6=\x86\x8bbg\xd3`/\xd2U\xa7\xa1^\xa4\xabN\x03\xbdHW\x1b\x0d\x93\xf3&\xae\x11\xf2\xb2\x96Ny\x95?FY\x1c5\x11\xca&\xfeG\xafC3\"\xeaib\x87\xd4\xc3[\xf91Z\xc6\x8b\xbb\xae\xf3O\xd7\x05o\xd8\x05\x02Y\xdc\xb2D\xb2V\x0b\xacd\xad\x86\xe5\xf9\x8e\xfe\xe5P\x15\xc4\xf8\xf6\x9b\x84\xaa\xc4\x7fj\x06\xe3K\x85a\xd0`\x1f\xe3\x02\xee\x89\xf0\x80O\xfb\x96\x83\xbc4 \xc2rv\x0b\x1f\xd8\xf5\xe9\xe7\x95\xef\xfd\xe7\xc8\x83m\xc8z\xc7\x17\x17\x1f^\xff\xf0\xf1\xe2t\xfc\xee\xf8\xed\xe9\xf8\xfc\xe2\xf8\xc3\xc5\xf8\xe4\xa7\xe3\x0f\xb0\x0d\xde%]\xa9,\xfe\xdd\xbfXi\xcd\"\"\x1e\xfbZ\x06\x80(_\x96w\xa5\xb9\xf3\xaetkkmG`\xc7\x00\x81\x11\xf1\x9e\xcb\xfd2\xfb\x1a\x1a\xb4\xf9\xeb\x11\xbb\xc4\xb0\xaf\xa8\xdd\x85!\xf8\x91\xf6\xa6\x16H\x9bNs\xdc\xc5\x9e\x10\xf3\x84\xcc\xa3\xfc\x874]\xb0(\x11:\x80\xef\xbf\x87\xad\xaa\xe8\xddz\xc9\xb2xR\x16\xc5\xf9\xbb\xe8\x1dg\xfeT\x05%\xce\x99\x15\x0bx\x01\x83\xb2\xd6\xd9\x0d\xcb\x16i4eS\xab\xaf\x01\xa9\xc0\x03\x89<\x13[\x1f\x87V\xcbo\xa3\xec\xd3z\xf5c\x9a\xbd~\xd5\xaaJ\x13\xd3\xcez\xaf_\x8d\xeb\x88\xc0q\xe0\x90cHj\x85\xb4\xae#@\xce\x8a\xe3\xa2\xc8\xe2\xabu\xc1\xac>\x1d\x8c.f\x9b(\xbf\xf2\x89\xee\x89\xe0\xefM3\xfd\x90\xa6m\xd7\x95\xe5T?\x9c\x9d]\xd8\x93\xfd\xb7C\xcf\xfb\xb7\x0d\xe6i\xf4HB\xd7\x9a&\xd1uXK\xdcK\xf4k\xccT\xed\x8c\x0ePV\xea?\xbc\xfc\xe6\x1f\xc5,'\xf6\xd7Q\xad\xc2\x08U\xc8\xb4Q\x15j ]\x82\x0bF\x8b\x14.\x1f\xa5~\xd0\xf3huc\xe9\x07\xd6\x8b\x14tl\xb3\x0e\xf5\x94\xf6\xff\xe6n\xfc\xf2E\xbcl\xd8@\xfdRE\x1e\xab5\x86!\xfe\xad\x90\xbb\x93\xbe\xb2\xc4\x9d8?Y\xe7E\xba\xac\x16\x15\x01X\x91\x0d\xbc\xc1\x1a\xa2\xf8V\xf5 \x01\xba\xc1*\x1b\xbdtXl9\xc4\\RL\x15{\xa7\xc00#\xc6`<\xaf\x05\xd1\x11\x80ndk\x880\x92\xb6\xe0[a\xe1[\xd1\x8co\xa4\x1f!h8\x94\xf60cW\x9c&T\xbeD\xf5\xf0\xa6\xe2@hw]\x06~l\x913GgP\"x\x8a\xee\xbd\xba\x02\\\x98}\x89\xabb\x13pb\xb9\xe8\xeeT\x9b|\x02y\xf11/\xed>\xd0$Q\x81\xe8\x8eo\x8cK:@\xabzZ\x06\x0e\x9a\xbdQZ\xdfq4\x93\xa4?k\xfb\xa3|\x15M\x1c{\xb5\xfa\xea\xc8\xa0~\xef\xce\xfd\xb5\xc8\xa2\x877\xbc\xe8.O\xed\xe8\xb4\xd3\x8eN\xac\xf6}l:P\xa9\x8c\x8c\xf7\xd8\xa5s\xc4\x8e+|\x9b0\x08Hc\xd0}\x82\x14\x14\x06^Lz\xdaV\xd2(\x86\xdcA\x1d\xf7\xa0\x8b\x0886a.\xf3\x00\xf8\x8a& P\x89\x84\x15\xfaXmH\x15%\xa4\x1a\xc7V\xc7\xf4Mh\x145\x8c\xee==\xf0\xc9\xb71%r\x9e|\xa5\x85\x7fgJ\x94\x06\x9c\xad\nU\xf0\xe3\x06r\x84\x1d\xdb\x04\xc2\xbd\xd9\xab\xa3U' \xee\xddj\x1f\xabG\xc0F1\xb2\xd3\x03\x0c\xfb\x8b\x7f{\x0e\x9fc1J{a\x8d\x93\x9d8d\xc5\x97\xf4>\x12\x17\xe2m\xc8R\xfer\xc8f\"9\xe77\xcaf\x03*lq\xe2\xef\x0e\x1c\x11\xc6\xcdp\xeb2\xcf\x97\xd9\xca\xba\x92\xdc\xb6\x06\xa4\x91lnq\xb1x\xd7\x8bV\xccY\x9a\xa25\xcd\xebW\x95\x0dv\xcd\xdci\xc5\x92i\x9c\\\x7fD\xa3\"\n]\xda\xbe\xc1\xe5\xb7\xb1\xc6\xf0.\x10w\xed\xf2\xcaU\x06C \xf1\x04\xc3\x9aW\xf6B\x94\xfdL\xc5\xb1|\xff=(\x03>\x89\x98>\xeb-\xd7\x8b\"^-\xa8\xb4P\x15\x1e8\xc5=\x82X\xde\x94\xd9\xd8\"\xcc\x81B\x1b(\xf5\xd2UaGEu\xde\xba\xa3\xbbA&\xc4d\xdd\xe5 \xa9\xbb\x1cd#AhG\xe9\xe5\xff\xcb\xde\xbbv\xc7\x8d\x1b\x0d\xc2\xdf\xf3+J\xcc\xacCF4\xad\x8b\xc7c\xb7G\xd1\xeb\xb1\xe5\x8d\xb3\xe3\xcbZ\x9e\xe4\xeci+Z\xaa\x1b\xdd\xcd\x11\x9bdH\xb6de\xac\xe7\xb7\xbf\x07\x85\x0bA\x12 \xc0\xb6<\x93d\x1f|\xb0\xd5$\x88K\xa1P\xa8*\xd4\xe5\xac\x93\xc0\xa4\xd5\x92\xd2B\xdcn\xc1L\x89X\xd0\xcd\x0e\xb1\x8b\xa7\xf9\x197\xa4\xd2\x93\x02\xacPaLU2\xc7[\xf1\x0d\x9e\"\xed\xe7Gj\x82xQ:\x1a\x13\x137\"A\xc3\xa6\xde\x02O{r\xda\x01R\x907\xb3@&\xa0l\xdb!t\x87\xba\xa3#\xac\xb1\xe2k\xe2\xc7\xd3\xbd\xee\x17F\xcc\x12\x7f\xe9\x05\xef%\xa9\xff\x9cW5\x06Mq8\x9f\x84<\xc1b\x19\x99\xecA\xf3\x8c\xd9\x01Nz\xd6\x8c\xe2\x8d~\xb3q_xv\xb8\xf4\x97k\xf0\xc8]\xe7\x9b\xac\xfe\x1b\xeb\xcba\"\xe2\xa0U\xf6\xb6\x8e\xdd\xed\x8c\xbf\x07>QZ$\xc8\x9c1*\xc9\x92:\x89Sn\xb9*\x08\x07et2\x984!?\xf1\xbdI\x8f\xc9\x12\x8eU\xecs\x83\xaeP\xc2\x7fX\xcc\x17EXw\x8d%\x8e\xa20@\xf2\x10\xceoy\xe7\xec\"\xcf|~\xeb\x0e\x04\xdf\x85\xba\x9b\xd8\x0eP\xcd\xb9\xe3*.|\x1ec\xcb\x18\xd5\xe0\x96\x85\xaa5\xd9\xf9_\xc7\xd5kN\xbc'\x92\xa0\xd7\x0dA\xefch\xa8\xa6\x8d\xa8\xf9\x8eW\x13r\x1eu\x16\x99\xbe\xdc\xa0\xc9\xcfF\xb7\x8d\xc3\xee^e\xc1\xa3\xf1\xd3\xe7\xcc!\xc8\xb6\xc6\x06/\x0f\x15\x13\x87\xfa,\xf2\xaaf\xa0\xd7\xec-\xd3\xc6bVmZD\xb2n\xb1\xd6\xc8\x0cY\xe7\xa1e\"\xd6\xfe\\Y4{_Je8\xd2-\xb1\xbe\xdf\xd2N8\xc4\xde.\x99\x7f\xb6\x8da \xd9q\xaf\x19A\x08%Ztex\xb6i*42\xd3N\x0f\xbb\x8e\x07\x9amW\xa5]\x0c\xd5\x15?D>\x13\xaf\x17)G\xfe\xfa\xaaLm7\xb0m\xae\xe7u\x19O\xfbx\xbf\x1b\x91\x80g\xcdy\xd45q\xdc\xf0\xe7\xdd\xfb\x8c\x8a;:\xd3\x0e\x809<3\xdewx\x13 \x19\x93N<==\xb4\x96m\xd6\xab\xf7\x11\xcd\xfb<\x1c\x97\x91\x8fxz\xa2}\x91/\x8f\xee\x88\x98\xc7\x00\xf1\xd3\x0e^J\xb9\xccc\xd9\x92Zi\x8e\x86\xf4b\x86\xb3\x88)\xb1h\x03z\xb9S\xeb:\x84A\xfc4\xa1:z!=D\x11|\x8bI%\xbb\x17\xc2\x0cv]\xbc@Ax\xf9\x0eU\x80\x16\x0d\xa3\xbcu\xbc\xd6\xe6nP\x0bg\xab\x85\xf2\x18\x9e\xaf\xc8\xec\x12\x03K\xf1\xc05,\xf55\xe4\x0b\xf8\xbf\xe8\xa3\x05\xbb\xe0\xfd\xdfH/\x9a\x82Q\xb1\x03\x8a!\xb5A\xac\xf5\xf3\xe8<\xbf\xceHI \x87\xef\xed\x1f\xeeyMX\x89\x04\xd5\xc9\x13 \xf2\x10f6\xae\x98\x16MV,\xb6\xec\xc8\xb7\x1c\xc1\x86#\xdc\xab\xac&e\x16\xa72|\x8b\x8f\xc1%]<`\xc4\xac\x1a\x8cQ3p\xdd\xbb'NPf\xf5\xda\n\x95\xa5\xffF\x8dfK9\xc3&\xa4\x8c\xcb'%\x0b%(?\xea\x03\xc9g\x10\x088\x082r\x0d\x15\x9b\xae/~\xb3\x1a~\x1e\x04\x11\xe7\xb2)\xa3\x83\x87}\xd6zr\x04\x19C4\xbcr\xcb\xe7]r\xc16\xae)7\x99\xc7\x9c\x12\xba9\x89\xdb\x0b\xc3\x9d+s\x0c\x1c\xe1#\xb5G\xec\xd8\xf7\xc2\x86\x02\xb4q\\\xde^\x9c#\x00\xd1p\x8fy\x8f\xcbGk\x96\xc1\x97\xb9)w\xf3+\xd1\x92\xfb\x95\xea\xbf\x98t\x05\x86s\x16\xc9\xa1N0g\x8a\x1a\xe4l\x02\xcd\xadC7\x81,{\xf3uN\x92\xef\xbay\xd6\x94P\x17}\xd4\xfd\xf3\xdb\xd3\x0f=\xc7\x00Z\x9e\xbf}\xfd\xee\xed\xe9\xab\x0f'\x13\xd0\x88\x02'\xaf\xdf}\xf8?\x138\xe8\xbfY\x92\xfa\xc3M\xe1\xc4\xb8\xb7/~;'\x01\xdd\xe8\x11v\x83\xea\xea\xa4\xfak\x9c&s\x11\x15\n\xd1\xd6\xb0 \xf8\xbeN\"9\x05\x98@\x12\xd1\x99\x8a\xa4g\xa5\xef\x1d<\xd2'o\xec\x88\xd4\x067\xf1/\xb5=`\"x\x1f, f\xc68Y\x17\xf5\x8dD\xa4\x97\xf1\xac\xce\xcb\x1b'\x88R\x92o\x9bR\x1f;\xfa\x8d\xb1]\xe7\xd4\xa5\x90\xa7\xed\xb0l`\x90Dl\xa2\x94k8\x82<\xbcS\xd8\x9a7\x07\xdf\x05,Ve\x0f\nm\xf5\xf3\x95\xd6K\xdcpL\xd8\x00\xc5\x81\x94S\x04\xa7Tk\x9fR-\x86\xa9\xdc~\xc4v\xd5\xaf%\x83\x8e\xddb\x82ZK\xfbI\xf5\x01\xdd;\xc6M\xa8\x15\xc8&\x19l_\xac\xb7\xce\xd2\x88\xbd\xfc\x9f$#e2\x93cx\x9e\xc6\x95\xd5! \xf8\xd2j\xb0\xbeO\x9bX?\xad\x89:w\x92\xb8l-\xf9\xeb\xeby\x19\x9aQ\xfb\xe1#\xc6\xe1\xef\xf7rj\x08YB\x97\x81S\xec \xff\xa0\x9fiD\xd1\x94{\x91\xa7\x11,\xbc\x89\xe7.\x08H\x9c\xa1\xfc\x8b\x86\x7fW\xef\xceItIn\xe0\x18\xe2\x88T\xb3\xb8 >>\x08P\xc5T\xe7,G\xaa\x7f\xf8H57\x12\x7f\x8d\x89\xd9\xd51=\xa2\xc7\xc6\x9e\x92+\x9e\xa7\xa9\na\x16\xea\x13q\xd2E)BLr\xc2gQ\x1b\x04 %\xd2\x1e\xe5\x00\xd1\xb7\xcb\xbb`\x92\xaaxD\xf9\xaa\x9a\x13\xa2&\x94\x9a\x88\x94\xd10O\xbc\xae\xc26\x89'\x0dTy\x17u\xf4\xcd7|d\x18\xf4Or\xf83\x7f\x81 \xf1\x85p\xa2\x07\x8b\xc6\x0e\xa3\xf7\x84\x13\x94U\xeb\x05\x86\xda\xf0\xbc\xae\xb9\xc5\x97\xfaA\xb2\xd0\xa9h\xcb\xb2 \xa1\xc2tn3v(\xeeuo\x7f\x17\xec\xf6\xf7Q'\xe0%S\x7f\xe9N\xad\xc2\xec4\xfe\x92\xd7Q\x04lq\n\xf5\x177k\x02\xe4\x98\xf2\xa9\xf5?\xa2G\xbb\xb4!\xf6\x98\x07\x12\x06\x89\x0c\xa2\x92\x14i<#\xfe\x83\xe9\xc7\x8f\x7f\xff&\xfa\xe3\xee\xb1\x1fL?\x9e\xfdr\xfb\xf9\xec\xc12\x04\xef\xe3\xc7o\xeeyJ\xb5vW\x9f\xa5oT\x10\xfd\xf1\xd8?>\xfa\xf8\xf1\xa3\x1f|\xc6m\x1b\xed\xf2\x07g\x01\xb6\xf4\xcd~\xf4\xc7c\x86\x18\xdft\x03\xc2\xeb\xbd`\x85~\x8d\x8fV\xa7n\x96\x06|hF\xdc\x0d\x10?\x184X\xd8,\xef\xb7\xbf\xf9]\xff\xaf\x8e\xb2\xae\xe1*\xd8\x11\xb3(\xf3\xb5Qm\xf2:\xc6T\xde\x85\xff:.Z\x06|\xaf\xe3\xc2AQ\xd3\xaa\x85\xdbL\xb6\xd6y\x1e\x18\xdb8%5\xfb\xe8\x94\xd4\xad!\x9c\x92\xdaa\x08\xadZ\xca\x10\xfa\xcf{q\xa4\xaex\x92r*#\xbc\x8e\x8b>b\xae\xf8\xcbS\xd2am\x9c\x12\x9a\xcd\xa3\x8a\xd4\xecm{\x0d\xc3v\x0e\xea\xa1\xe5\x9fGK\xd2\xd7@\xb3D\xb8\xc3\x0d\xcc\xb9i\xa0\xe6\xe3\xd8\x16T\x8ew\xde\xe0\x8f?g4\xb4g\xa1\x85l\xf2\xf0@VQ<\x9fkF1\xecx\x0e<\x07\x83a\n\xd6\x98\x94\xfd)\xac\xf4Sh6\x94\x8e)\xba\xe2\x99\xe6\xbb\xee\x07\xc0\xb3\xf2\xe9\x9e/\xad\x13\x03Eg\x1a\xe9C\x1ai\xda\xbd\x19\xd3.&~~\x95\xd5>\xe1\x1e\x9b\xfe>ej\xf74\x8a\x8a-P[\\\xdf-\xb5T\xef\x8ae\xc8\xac\xc7c\xbd8s\xf4\xed\n\xab\x8bi}6~?\x0c7\xcd#.\xe9\x9av\xdd-*\xafq\x15D\xeb\xb8\xf0o\xb6\xd8.\xc3\xe3\\\xb3l\xf8\xddD\xf9.\xbb\xc9 \x00k\x0d\x00\\\xf7\x9a\n\x80\xb5\x1e\x00\xbf\xeb\xffE\x87E\x05\x85\xe9\x99\x8e/97\xf3%yo\x1eF\xf3\xa8+\x99\xc2y\xb6J\xd2\xf9\xab\x17:\x99\x0c\xc3Oe\xd2\xab\xfa|\x8c\xb5\xd7\xb5E\xc8\xf6>f\xd8G\xc6B\xd13\xcd\xffO\xd9e\x96_g\xc8s\xf8h\xc2\x0f~\\\x03c\x80\x16I\xca\xa2\xf2H\xd6\xe6\xef\xd1\x1f\xa7\x1f?~|p\xf6\x80Y\x1c\xef\x827au\xd3$#\xccM\x9a>\x0c<\x14<\xb19\xa69\x9b\xc3\xc5\x0d6\x9b\xc9\xf7\xaa\xf3\x87nB'}\xb8k\xf4\x05\xde\xef\xc9\xba\xa8o\xb0\xc1q\xf7\x1b\xde\xefk\xf2\xa96}(\xd4\xd8\xfc\x8f \xff#\x9a'U\x91\xc6hY\xca\xdc\x98\xf0i\xc6\x7fJ\x80\x0e\xce\xec\x93\x01\xa3B\xc4\x90Sz\xde\xbeh\xba\xd1Z\x97\x94\xa2b\xa3\x91\xefW\xcaE\xa5\xb7\xd7\x19)_\xbd\xe8a\xab\xd4\x8b\xa2\xe5\x8c\xae\xef<\x08B\xb8\xc6\xfc\x91\x80\xb1\xc8\xcf\xab|S\xce\xda\x1cE{'\x9d\xf6\xb4\xb6yvJXH\x9d\x92dcL\xab\xf4\xd6\x92\x14\xd03\xdf\xdb\x7f\x88\xd1\x923\xb9\xa1\xe8\xee\xeaW\x97\x92z\xc9$\xf5\xb2\xa5\xbe(\x87-\nY\x8e\xb9\xd2\x90Z\x1f\xb8\x0e/\xf7\x13\x93m\xa1\x1ck+:\x7f\xdc\x8cY\xaf\x8c\x8b#\xc2\x83\xf9(\xcch\xeb!6\xbaO\x1b\x8d\xa3\xa4z\x9do2\xba\xc9Xo\xdf\xed\xb7;+\xe2\x92d57\x90R~\x1ea\x8cr\xe5\x01^\x8e\xca\xd6\x0f<&\xec\xc9\xf7.\x176\x1d\xd5h\xf6\x03Y\xe4%y\xdd\xbaAu3\xe7/}c\xb8H\x0e\x87 h2\xaf\x03FSc\x03\x9e@\xa6\xaf\xc0\xec\x9e\xcc\xf6oby&05\xac\xbd\x84\xb9\xd9V\x8f\xc55\xe4\xc1s\xc6Z#\n\xc8\xfd\xc4\x1b\xd1\x83n\x9b\xddC1JA\x194\xfe\x91\x98\xd5\x8bb\xd5\x1b\x96y)\x87N|\xfd`\xea\xf6V\xae\x95a1\x97Va\xf1\xa6b\xf0\xc6r\x95\x92g\x030\xdbf\x8c\xa8\xc7m\x01\xac\x8e\x94\xb5\xdd\xdd\xb5\x8c&[\xdf)\xc8X\xa4\xc7\x16\xa4\xf6\xf5\x90\xaa|\xa2K\xc7x!\x82\xf7\x0f\x8d\xbb\xd8\x94K\xc2\x87N\xe6r\xf0\x95\xc5\xd5\x14\xc3j\x9eF\xe7EI\xaeHV\xbf\xdb\x94\xcb$3*j[\xc9\x94\xf6\x9e\x02\x81\xef\xe1B\xd2fb\xa6\xcd\xb4\x9c\xfb\x17Sr\xe6\xaa8\x03\x9c\xf8@\xd0\xfa\xe1[\xdaf\xb7\x7f\xc9\xe2 \x85\xcaN\x17\xa9\x86\xfa^\x92\xfa9\x8f\xecW\xc7\xb3\xcbg\xf39\xc9\xe6\x9b\xb5\xebHtVO\x836L\x82~\x9c\x0c\x86\xaf.\x99\xe5$Z\n\xe9\xcf\xbe\x1av\x8f\x18\xeb@\x1a\xae\x81s\x11\xd2*\xcav\x9e\x80\xa2\xe4Z\x88\x08\x87\x06\x8aL\xc1N\x9b\xcf\xa3\xf39\xb9\xd8,_\xbd0\xae\x00\x8e\x0d\x99\x9d\x16L\x7f\xb8y\xf5B\xc4\x9c\x17EcB\xdb\xfd\xc4\xb6\x14\x12\xcd\xf9z\x00y\x1a\xb0!|B\x8e\x9f\x08\xce\xeb\x1d\xdf\xbcC\xc8\xd3\x15i{\xb8\"\x8f.7\xfc\x18\xc4T*\x124\x12\x0b\xa6\xf5\xb4t\xaf0\x8f\xae#\xe8\xf0\xb1\x83\x839q\xf3)n\x1at\x1d\x84\x03\x18\xc4\x19\xe9\xd4=g\xb9]\xbbw\x87\x01\x12\x0e\xb6\xefpT\xecO\x89\xf2n\xa3{'\x19$\xb7\xe19@G\x1e\xcfk$Gi\xff\x15Y&UMJ\xc2\xe8U\xdc\xe5@\xaa\xd5\x9b<;\xad\xe3l\x1e\x97\xf3\xbf\xc5e\x96dK$\xbe\x0e\\\xb0\xf1FB\xa4>,I(\xf2\xc2N\xaat\xd8\xecH\xa2N2\x94;\xb5/\xc6\x86\xda?\xc5\xa7\xdb\x1b\x010G\x97\xeeu\xbf\xde\x9e\x969\x1b\xba\xe9{\xa09gH\x14\xcf\xe7'T\x80\xfc\x91{+2'\xa8\xeeSn\x1e\xb6\xb3\xaf\xb5\xadn\x1a]\xe7Wc\xd2\x8a\x08\xff{C_c1\x90\xc5\x9b\x881\xa4'6\xc9'\xd3<\xf0=\x8a\x00\xbb\x0c4w<\x959\xd1w\xb3\xcd,L~\xb5\xfd\xed?\x8b\x8bzS:\x06\xee\x80\xedW~\xef\xae\xc15\xb0\xf2\x9a\x8bKQ\x06`f\x1f]\xa9\xff\xd8\x05\xcc%\xe7\xa0^\x88$\xba\xeaL\x8d\xe6\xdf\xad\x84kwA\x0d\x1e\x1f\xe8\xc2\xf8\xd1\xe7\xfaP\x11\x87\x8f\xba\x99\x00\xb8[\xddw\x07A\xbb\xfd\x8d.M/\xf3aM\xf2\xecy\\\xc4\x17I\x9a\xd4\x89=u\xc2\xd5\x97&\xa0\x80\x8e\x14\xe6\xb7SQ\xdc\xbb\xc7\xb2Ox<\x8d\x00^\x1b}\xfe\xdcKI\xc1\x9e\x95\x1b\"*\xceXL\xff\x93yR\xc7\x17]\xa7`\x93\x03o\x92g\xaf\xb2E^\xb2(\xf4\x16\x0c\x17\x1a\xb6x`Jz4\xc5\x18\xfb\x04\xdd>\x8c)\xbe+1\xa0\xf7\xccc\x1c\x03\x1cj\x97\xc8G\xb7\x91M\xa4\xce\xc2'Zy\x1el'nI\xaa:/\x89l\xc7i\xf9\xd9\x05[lJ\xda\xc3tZ\xca\x9c\x0d\x13\xc6j\xedi\xeb\x14\xed;G\x9c\xe9\xc7\xab\xb52\x84\xdc7\xe5l`\xa1\xe30!\x90\x19z%\xd6\xd8D\x95\n\xbe2\x84*\x08!\xf1\xcb\xe1\xd0E*\xcc\x9d`\xa5\xd7\x1azr\xda\x18l\x1e\x13Q\x90\x007\x96\x1e\x83*\x16\x93^\x81\x17~\xa8\x87,\xc9\xe6\xad\xaa'\xd9\xbc\x8f\x15\xfd\x81I\xebP ^\xd9B\x7f\xb3\xab\xbb\xd6\xb4\xf1m\x12a\xbf\x1f\xee'\x87\xb8`\xf2\xf5\xcc\xb8\x8eD\x08*\x01\xf7\xb4\x12\x18b>)8\x10\xefg\x11=1\x10\x80\xbe7[\xc5e<\xabI\xe9\x85p\x9f\xa7\xf9\xe2\n\xee\x01\xb1\x04A\xcc\x1b\xa2\xcc\xe3`3\xdaV4Y\xfa\xb9\xddR-\xd2]\xbd\xc5\x98\xf7\xd5\xb0*\xe1\xf3\xe7a\x941\x98\xb8\xe3\x04F\xaa\xef+\x03\xf2[n\xd0\xea\xa82\xe3*3\xbb$\x99&\xd6\x15E\xc5V\xaa\x7f\x91\xb6\x9b2w\x86\x1d\xd4\xdd \xb4v\xd8\xd9\x0bp\x04\xaf\xe3z\x15\xad\x93\xccG\xa7\xad\xd6b\xfd\xc6\xfb\x02\x1dt\xf86\xf8@>\xd5\x83[!\x89fy\x9a\xc6EE|d\xe1\x12\x13bg\xf2e\x0fYs\xb8\xcf_\xb3Y\xe9\x12\xcf\x8aH[\x95\x82\x93CQ\x94\xf4<\x12\xcb/\xb8\x15\x8f\xe4\x96\xe2\xa6\x830>\x01\xee\x8d\xd9q\\\x11\x02\xa2XO8n\xfe\x14\xdcy\xd0\x84\xe2\xeb+B\xf5\xea\xa5\x86\xf7\x9e\xd5\xc9\x15Q\xf2\x08\x91\xe8\"\x9fwRH \x81z(\xbc\x8f\xee\xbb\xdf\xb5\xff\xda\n\x9cW6\xef\xdb\xc7z\x86\xb3\x17f:\xd6\xfb\xea\xb2(\x0e\xfb\xdfv\x1b\xafZ.^}\x0f\xaf\x94\xf5\xf2\xb0+\x15\xcf\xf8\xf3n?\xcc8\xfe\xf0\xdb\xee\xf3\x82\xcf\xad\x1bub\xce\xfa\x17\xe1\xb0\x1f>\xea\x0e`\xc5:z\xdcy|\x85\x8f\x0f\x0e\xba\xe3Z\x8364\xdb\x92u\xdf\xcb\xdfu\xc3\xb9\xf6n3\x17\xaa\x03\xdb\xfe\xc3'\xddQ\x9d\xf3\xee\xbb\xd3\xb9n\x1c\xdb\x92~\x00\xe4N\xe5\x13\x8cQ\xa6\x8b\x1f\xdc\xaa\xf6 \x8e\xba\x9e\xd2\xa7p\x04O\xda\x8f\x9e\xd3Z\x9dj\x97\xc68\xde\xcf\x8c&h\xcc4L&\xcf\xa2\xbb\xf6\x14\x1fu\x93qMZ)\xc8\xba\xac\xae\xce:\xec\xad\xb9Sz\xb6\xca\xa0\x80\x8c\x84\xabO\xfck\x96\x8ew\xd8\xfa\xec\x9d\xd8n!\xf2\xa4\xdd\xbe\x90\x96\xb7\xa9\x06%O\x8b\xa8\x9f5\xdbtv\xc6\xe6\xe8=\xec.\xd1\x14\xf2\x03\x8e\xc0C/~\x16\x8ck\xc2L\x155w$1\x1cC\x0c\x13\x88\xbb\xf6x1\x9a\xe2\x05\xa1T\x95\xd5\xc9\x9a\xf4\xaet{\x13\xa6\xfb~\xd5\x89\xf3@\xc1\x94\x85<6\x01w\xa9D\x07\x98n\xf8\xa8DU\xcd\xd1\xfe\xe8Q\x95`\xc8\x81s\x16\xbdC1\xa0\x88\xcek\x0eD\x1e\x0e\x89e\x87\xffQ\x8d\x88\xf0*\xabsLa\xbd\xc1\x85\"\xb8P\xd9\xb0\xb5\xe4\x07eUuKJ\xc9\xe3:B\xe0\xbe'\xb3<\x9b%)\xf9P\xc6Y\x153\xfeuI\xeawy\x9e\x92\xb9\xbf\x83\xcc\xc1,\xdaT\xe49\x9e\xe6|\x01;\xb3\xce\xa3\x82\x94T\x02\xf5\xdf \xb1\x11\xe4|\x10\xe1`\x7f%I \xe5)\xf2\xe1i\xbd6\xe9\x8d\xf0*d/\x84U\xb4\xc94\xeb\x86\xd6D\x9d\xed)\xf8\xec\x9e\xf4\x15<\x85\xbaI\xfb\xf74\x80\x9a\xab\x81\xf0\xb7\xaf\xbc\x1b\x1e\xec+\xb3\xa5\xf0\xb3\xf1\x96\xc2U\xa4\xcbj\xae\xf3Q\x13f%t\xe9>\x7f\x86\x9d,:_\xe5\x15\xbf\xdb\x18cC\xfc\xb3\x91\xf4\xec\xf8;\xdc\xdeU\x02u\x07\xfd\xde$\x1f)\x9f\x9dj\x9e=\x1f\x06\xdc\x1b3\xe0\x1c$U\x0e^=\x9b\xce.\x88\xef\xdd\x1b\x0fN\xdc\x06mX\xf20{\xfd\x9bW\x93e-\xbb\xf6\xc2\x16\x9e\xe7Y\x1d'\x19)_e\x8b\xbcO\x05z\x07\x83\xf8\x8bN\xf1}\xffl{a\xb3\x88\xc7\x08R%^\xbe\xc2\x11\xbc\xefZ\xa95\xc3}\xa1\xf8(%U;\x88\n\x0f\xe7\xf9\xa2\x15\xd9\x06\xe3\x11\x0d\xf4.\xe6N\x07\xa0\x10\xfdfn\xb4A\xde\xd3\x87\x1e1T#\x82\xd2\xb9\xff\xd8\x93\x8c;\xdfL\xe0E\x87\xeb\x10A\x11\xaa\x1fn\x18\x01B(L\xe0\xb2\xc3\xd4a\xa2\xd4\xd7y\x96\xd4\xb9K\xc4\xc7\xae\x84\xd1\x112\xcf\xd9\xbd8\xedl\xc0\xd2U\x7f\xe8B\x03\xb6\x1f\xa3\xd6\xb8\xfc2\xb4\xab\xaf\xaf\"\x92\xfdcC6\x82T\x8b\x00\x19\x92x\x86L\x08\x95\xf5\x9e\xc7iz\x11\xcf.\xd5\x8a\xb9F~\xa2\x87\xd8\xe0\x9c\x196\xbc!\xd7\xd6ik\xe7\xfc3\xcf\x19R\xfa\xde\xe1w^\x10\xc2&\"Y\xb5)\x89\x92\x14\x97\x03\x02\x93J\xf77\xab\x10=1\xde<\xc6\x13\xee\xd6XG\x17T`!sf\x0dQ\xf9\x1f\xd0\xacY\x8cJ\xdf$\x0b\x8c+1\x89o$#\xad\xb8\x9c\xc6g\xf4\x8bp8\n\x07\x83\xd6\xe9\xe6\xa2. \x9e\xf2\x92(8C\xacc\xc6\x82\\`\x11\xadbT\xaerH>\xa6\x90\xfcQ0\x1f\xba\xee\xd4N\x1c\xd6\xf7\x8bF|\x15]\xc5i\x82&#\x1c\xeb\xfc<\xe4|\xde\x8b\xb7\xaf9A\x11\x96\xec\xad0C\x0dr<\xf1B\x93\xad\x8c\x07\x94\xaa\x93\x18\x83\xa3\x15qU%\xd9\x12b`\x95!M. \xfca\x9e\\\xfd!\xc4\x97\x80\xfdr=\x85\xe8\x07\xdf\x07\x90\x97\xf0\xfd<\xb9\x82\x07\x7f\x8a\xd0-DL\xd0\xb1\xc7YJ\xdb\xc7\x0e_\xe6\xf9@w/\xf3\x9cu\xf62\xcfEg\x99\x1a\x03Z\x89U\xc6\xf9f\xec\xf5\xc3*\xa9`\x1d\xdf\xc0\x05\x81Y\xbc\xa9\x98W\xcd&K\xf0\x02!\xc9\xb38Mo \xcd\xe39\x1dP}\x9dC\x92\xcdIA\xe1\x9b\xd50\xcb\x8b\x84Tt\xc8lL\xdc\x07\xc7\xb0\xa5\x98\x9fX\xdc\x19\xf9\x0b\xd3m\x1bR\xf8 h\xe2\x9ci:\xb0\x9a\x9fRq\xbb\xe0n\xa7\x06\x05\x122H\xe7E\x99\xcfHU!o\xc6\xc3\x99\xfaUt>c\x7f\x1a\x15B\xf4\xeb\xa5~\xe2T\x92\x7f\xe3\xeb\xf2d`\x12\x8c\xa1QSa?\x1d\x12{\x0cSY\x80\x7f\xee\xcf\xd8\x15\x80Y\x07L{X\xb0\x1e\xfaB\x05\xe5\xde7\x17i2\x93\xf1\xbb-\x96)sa,k=[\xd4\x9237\xf3\x85\xf9\"\x14@\xab\xa1\x17E\x9eq\xba\xc3\xd2O1\xac@\x82\xa4d\x1e\x84\xb0\xd0\xb6\xa3\xbfk\xfd\xb1'\x07<\xc3\xd8xvS\x0e\xe0\xc0]!\x1f\x99\x19\x00\xb7\xa6\x12\"r\x84;o}\x93\x82\xfd\x06\x8e\xe0\x95\xb1\x89\x0b*\x82a\x13)\xfe\xab C\x00\\9\"\x89w\xf7d\xa5\"a\x16\xc2E\x08I\xe0\x88\x08\xc6C\x8b\x1bK\xe3\x92^\x07!\\\xdb\x8f.\xb7\xfb\xfcf\x95\x07N Ud\x1c\xce\x08\xa2_X\xdb%\xd6\xcf\xcd\x81\xf8p\xcfD\xe6j\xdc\xed:\"\x83\x8e\x0c\xc6T\xb5\xaf\xd0n{_Q\x96\x7f\xe0\x01\x020\xd4D\xa3\x9191\xd0/!V\xed; '\xaf\xcb\xddc/\xa7u\x8f/9\x0b\xfb\\\xcek\xa1;@\xeb\x98\x9e\xb7n\xeb\xa7F\xf7\xa0;\xde\x93\x10b\x1dD(\xac\x14N\x8e\xb9\xa5\x0d\x86c\xdd\xe0^\x1b\n\xee3\x8ffq\xf6\x9el*\x9e\x19\x8a\x8eb\xd3\xc92C\xc5\x0b2\x8bg+\xc2v:\xad\xa1oQP\xf6M[_6\x8f\x9e\xff\xf9\xe4\xf9\xff:\xfd\xe95\xaa\x16\x99\xf6Q\xdf\xc2\xa6\x97\x93c\xc4\xc7\xe2t\xd8D\xf9\xa6&\xe5\x9f?\xbc\xfe\xd1\xd4Ke\x1b_\x08\xdd\xa8\xbc\xa2\x88\x13b \xb5Q\xe1\xe2Y\xaf\x16\xe9\xba\x90\xa9\x97O\xe2\xce)\x94\x9e\x94A\xa8\xfaWf\xcc\xb1r\xb0e\x10\x8c\x80H\xf5\\\x06\x9c\xe1\x91\xbf\xe5j\x1b\x1c\xec\x85P\xc0.\x1c\xec\xa1S\xf4\xc7\x0c\xfc\x8a\x94W\xa4d\xd5g\xe6\xea\xfa\x99\xe9tWtg\x1dx!h\xaee\xfb4\x03\xb5K\x86F\x0e\x19\xaf\xdd\xd3\xef\x19P\x81\x07\x98r\xd5\x90\xe9'\x94GIV\x91\xb2\xfeP\x12\xc2\x1c\x1b}F\x9d\xe81`\xe4\xd3.X\n\x80P\xb3\xd3kE\xab>\xf2:\xefG|\xfa\x85\xf7O\x87\x8f\xbe\x0d\xf4\xcd\x9b\x8f\xa5\xc6\x0fH\x03$TM*\x1a\xe37|\xed\x98\x95@\xd9DS}\x1a\xa01\x8fN\xb9l\xd0A\xb1\x060\x00\xeb\xb1\xf6;\x98\xc8Z,\xe4+\xcf\xeb\xd7\xb3\xf8\xfb\x82\xab\xbb::?'\xd5\xeb|\xbeI\x89F\xcd\xc3C\xb2f~\xf7\xea\x0d\xc3\xe7b\xbc|4\x7f)\xd5f\x8e\xa1\xd4Z\xd8\xcd\x859\\\xdb\xb4\xeeV\x1d\x0d\xaf\x83r>\xff;\xaaVqA:f\xd3t\xe7\xce\xca\xe4\x82L\x94\x8at\xfa\xa8\xc2\xfa\xc7&)\xc9\xbc=\xe2yR\x15\xf4,v\xfe\x80\xf9\x94\xd5C=4+\x10\xdc\xe1\x12\x84-8\x98\x11W\x7f\x0b\xcd\xaf<\xc0\x14\x16I\\\x89\x90\xb2\xccK\xf5\x8e\x04\x1f\xf4\xb8.\xfd\xddt\xbd*\xf3k\x8c\x80t\xc2\xbfj/\xa9\xde\xbc\xdb O\x95\xcb\xe4\xc7\xdd\x1bJ~\x9b\xdc\xb3S\x14\xa9\xae\xba7\xa41\xaf\xdf\xc5\xde\x0d\x7f\xdem\xbf\xe2\xcf\xbb\x17\xc0\xfc\"\xb9\x97^\x80_$\xf7\xd2\x0b,\xf8\xf3\xee\xc5/\xbbH>x\xa2\xbbH\xce\xfc\xc3\xc7\xddy\xb1\xfb\xe3\xfd\xc3n\xfbW\xbc\xfd\xee\xb5\xfa\x9a_\xabw\xdbY\xf2\xe7\xddy\xb1\x1b\xe4\xde=\xf4\x05\x07\x7fw\xba\xe7\xbc\x99\xeep\xae\xf9\xf05W\xc4\xb4zw\x94\x9f\xf0y\xef\xda\xfa\xb4\xafN\x7f\x0eG\xddh\xda\x97p\x04\x0f\xdb\x8f\x9eQN@\x04\x00|V.\xf1\x12\xa9:\xebD\x18|\xab\xd6\x12\xa1\xeb\xba\x95\xde\xa9\x950\xf4n\\\xe7\xa5\xa9\xf6\x07\xb5\xb6\x88<\xd8\xae\xf2\x9a\xdfb\xcb\xdf\xd3gg\x94g\x9b*\x03.\xe3\x9b3O\xf7\xf4\x87\xcdbA\xca\xde\xbb\x17q\x1d\xff5!\xd7\xbd\x17<\xc7\x87\xee\x03\xd2{\xf82\xcd\xe3\xfa\xf0@\xdf=\xbe|\xf4P\xff\xf2UV?6\xbe\xd9\x7fd|e\xea\xecu\\\xf4\x9e1\x17\x14\xf1\xf8C\xe7-\x8b \xd8\xfb\xe8\x94\xd4\xfdg\xc8\xdf\xf5\x1f\xdf\xac/\xf2\xb4\xf7\xf8\xa7\xc487|\xf5<\x8d\xd7\x05\x99\x9bk\x98\xa6O\xdf\xb5\xe6O\xc9\xbc\xf2\x1e\xc9\xa8\xf8\xeam\xe7\xe3\xbf\x91\xf8R\x02ig?\xd4262,\xef\xab\x10~\x0e\xe1M\x08\xefu\xb7w/B\xbc\xbb\xc9\xe0\x1e\x9c\xf6\x99\xeb\x9f\xf8\xab\xe7\xfdW\xff\xe0\xaf.\xdb\xe7\x03ei_\xe1%\xee\x0b*\xb5\xc31\xbc\xa2\xe3\x90#\x98\xd0\xdfA\x10\xaa\xda\xd3\x17R\x84x\xd1ol\xe7Z\xcd[\xdaa\x9e\xe8\x0c^\xe2\xbdBWJ\xa5\x9f\xbe4\x89\xc1thW~M%\xee\x1fe\xd3\x18\xd5\xf7E\xf7\xe02\xc4\xbf\xa5\x1d\xff\x13\x8e`E[\xe9\xbd\xa5\xe5\x078\xa25\x8e\xe0-\x15\xb8\xf1\xafwz\x05\xc6\x85:\xc1\x8a\x8e\xe2G\x83\xaa\x03[\xf9 \xdb{F\xff\xfa\x01\xb5ToLr\x81\x98\xeeO\xac\xee1\xfcr\x0b\x13Xv'\xff\x13\x1c\xc3\x82v\xbd\xf1_0\x1d\xe7\x04f\xf4w\xcc\x7f\xf7\x1a7\x82F\xf4\xba\xf3z\xfa\xcf3\xd9\xc1\x1b\xee/\xfb\x8bA\xefH\xc7\xb8\xa6\x1d\xfe\x93N\xbf\xdf\xdb\xef\xcc\xbf\xde\xa3\x0d\xde{`!\x18\xcb\xa0\x8f\"\x7f\x85#x\x8f\x9aj\x1d\x9a\xfcU\x0e\xf2\xaf\xfd\x97\xef16#bF\x88~\xed\x0d*\xca\x08`\x92}\xe9\xd9t\x00\xde\xdcbXC\xbf\x14\xbb\xb1D&\xe7}\xd7\x12<\x08u\xe8\x7fn\xeb\xd2p\x9f\xf3\x02\xc7\x9d\x87\xa0t\x9c\xbbvLa\xf6g8\x82\x7f\xc01b\xc6\x1c&P\xc0\x04\xff\xbe$7\xd5\xab\x0c\x03\xe2\xf6:\xfd\x1b\x1c\xc1K8\x16{{\x02\x7f\xee\x01\\h5\xfd\xbf\xd1U\xab\x15\xde\xcf4\x93\xbf!5)1\xc6\x13z\xe8\x9e\xa1%\xfd\x0b\x9c\x8f\xdb\xec\xe4\x93\x91\x1c\xe7\xc1\x93.\x87$8N}\"\xaa\xef\x1e\x8f\x9669<\x12\xe6u\x81W~;\x18Z\xbc\x95\xeb`\xe4\xb8\xf7\x1f\x1b\x92\xc2\x1ety2\xce)?\xd6g\x85=x\xd2}\xbei\xc2\xf62\x0f[\x11A\x97\x1d\xa0\x15%#\x83\n\xdfV\x94\x8d\xe9\x19\x8b\xb2\x81\xce[\x14\x04<\xcc\xc6\xb0{{{}a\x02\xb1\x1e\xe8N\x06\xc1\xeab\xeb\x81v\xd8cX\xb9{\xd4\xf6\xab\x8d\xcb\x9c\xb4\xaeuG\xae\xf0\xe3\xc7z\xcc<\xec\xc9H|\xb0\x8f\x0f\xb7\x1dl\xe2+\xa9\xa0\x99\xc9\x18&\xec\xf7\xbe`\xf0]4\xcc\xa5\xde2\xfed\x1b\xa6\xfeF\xa3Q\xa3@\xaeZi\xd7\xa8L\xe1Z\xc6\xfb\xb0\x0f\x13\xc0\xe0\xfd}\xe2e\xbdc\x93\xa8KA\x1a\x0b\xb9\x82\xc5\xfd\xbc\xbf\xcf\xaebs?i:c\x1d\xa1\x14\xc9\x82\xf7o\x82\xa7\xb0\xbb\x1b\xc3\xf7\xb0y\x1a@\xc5\xcd\x11\xa65\xecB|\xa6?\x17Y\xe3\xfawr@\xa9\xec\x816\xb5/{\xa9\x9f\x06\x90\x8a^L=\x08\xf6\x87\x05\x0c\xcd\xfc\nS\x8a\x11\x96S3\x04\x9d\xdeo\xfb\x85\xefn%a\x0f\xbe\x1f\xf8\xa5\x01A\xbf\xc0\xf7\x91S*\xa6\x15i\x12\xab\x87\xe05*\x16\xaf{Y\xce\xb3\xd3*w1\xb7\x81A\x05c@B\x0d\xd5\xcbzZ\xae\xa6\xf5\xa7=H\x99\xf7$\xea\xe2\xd9\x0dV3\x05\xc9\x1f\x90\xfe1^w\x04N\xd1\x884M\xe9/\xafr\x9b\xc0\xbc^,q\xdayTs\\\x11\xb4\xdedQ}\xc94;3\xd8\xdb)\xb0\xa4k\xd9\x80\xc2\xcf\xfc\xfd'\x07\xc1\x17h\xcf\xbe\xf6\x92\x1bM \xf54\x03\xc3\x88\x18\xbd\xa4\x92l\x91k3\x87\xd1\x92\xe6Km\xee0\xc0\x94\xb5e6\x81C\xfdKT\xdcM\xe0a\xef\xa5\xc659\xb3\x1ao\x82\xb2nSrF\xb9\xb6\xfb\x9a\xfb\xd0~\xd3\xccOs\x96g\x8bdYEi\xbeDs\xc0~=F\x02J5\xdb\x00\xa8f\xa7\x89\x8d\x91`\x97Z\x92 \xcb[\xafDR\xc5\x12\xfe\x04\xfb\xa8\x87f'\x00\xa5\xca\x94\xb0\xee?\x05J&\xcb\xa7\x10\xef\xee\x06\x94F\xd2\ngjkZ\xb2\x89\xa0\xfa\xd3\x91\x12\x92\x95+M\x83)9\x8b\xe2\xa2H\x11\xe5\x06\x0d\xda\xc5\xe9\x1a\xd1\xb5D\xfd6&)f\x17\xee\x1e}\x88\xf7\xb3\\/\xdb}\x8fOY\x05\x8aD\xbd\xf7\xf4!{\x8d\x18\xd8{\x8fO=\xad[>^Vc\x0e\xa8\xca\xe4\x17\x8f\xa8\x99\xf4\x91\xc00]\xa7S\xc2\x9a\x07\x8e21]M\xe3\xd7\xb9vpc\x8f\xc4\xc6\x978\xae\xa5u\xfa\xb3\xc0\xc0`\x90\xce}\xc4:\xbe$\x7f\xae\xeb\xc2\xa7\xc4\x97\xbc\xa4\xaf)Y*\xf2\xaa\xc6\x1f\x06\xd5\xc3\xc5&I\xe7\xef\xc9?6\xa4\xaa\xd5\xe6\xd4\xe7\x06\xd2\xc1r{\xab\x1f\xf1G\xfa\xfa%\xa9\xf2\xf4\xaaU\x9f?\x1a\xac\xcfMM4\x9f\xf17\xfa\xaf+R&q\x9a\xfc\x93\xbc'\x95\xfa\xad\xfa\\\xffe^\xbc\x9a\xab_\xacHZ\x90\xb2\x8a\xe8\xf3\xbbEc7\xdc\x91\xc4\xad\xd6\xeb\x0c\xf0\x84\x9e\x96\x8d\xfa\x84\xfe\x10-\xf7\xe9\xd1\x15w\x1d\xa1\xb5\x8cGQ2\x81\xd2p\xd2\x98\xa3\xe3\xf2.'\xba\xa8<\x1aM\x8e\xe0C\xe8h\x91+\xc8\xc5\xa0Q>W~\xa1\x97N\x94r\xcd\xa7|a\x00=\xf0If\x1anF2\x15k\xceNDx\x0d\x83\xe7wGp\xd0\xb9\xdd\x00^\xb9\xe5\x9c\x7f\xf9\xfc\xd9\xc0A\xb0\xaf\xf5\x90e\xfb\x7fS\xc6\x17)\x19\x00e\xb6Y\x13Q\xc7\xc0\x10,I\x8f.\x01h\x82\x10C\x1d\xd9On\x01\xb0\x1e\xbf\xa8\n\xe9\x96#\x9f\x88-\xd3\x1f\x138Dl\x11\xad\x8c\xc0\x9d:\x9a\xfbY\x08^\xcc\xfd\x8a\xb3\xfe\xd4s\x17\xfb\x18\xde\x9c+\xef\xdaO\xbdRG\x05KL\x05\xb5_Gt?\x1f\x1c*\"\xaf?\x1d\x1c\x82J\x072\xff\xe1\x81\xf2e8<\xf8\xce\x97\xdfn\xfbek\xb4\xe3\xbe\xdc\xba\xcf\xc3\xc3\xc7\xe6O5R{\xfb\xd0o\xbd\x92$\xb2\xd4c\xb7@-\x0dr\x13c@\x1fy\xf6\xdb\x93T\xea\x07\x93\x1b\xf1M\xec\xb6.\x1f\n\x7f\x82\x83\x8e\xb5x\xc3\\\x1e\x9c\xc1q\xfb\xe7\xc4\x98\n\x8d\xb29\xbe\xa6\xf5Cc\xeb\x87\xed\xd6\x0f\xcfP\xff\x1eDW\x07o\x0bRbL\x9aWh^\x12\xd7 \xc6/\xb9y\x9d\xcf5\x1e\x9f*\xa8[\xa9\xddTE\x0b&kP,\x10&\xe8\xf87\x13\xf4#\xf0I\x10\xb0(Qy\xd39s\x84U\xd2r}\xac0\xc7\x96\x174\x86a\xab\xf6'\x01L \xe1W[\xfaE\x1e\x9e\x9e\x9e\xbej\xfd\xc5\xcc\x02\xc9@8K\xdd\x12\x8dC\x00\xfb\x12\x99\xc8\xad\xc0A\xbfnG\x84\x80]\xf0\xce1}P+QZ\xb5\xf3\xff\xfd\xfe\x9b\xff\xf1\xf7{\x7f\xf4\x83\xf3\xdd\xa3\xe9/\x1f\xcfn\x9fN\xbe\xff\xd3\xe7\xe8\xe3\x83\xe3\xf0\xe3\xc7?x\xde}\x96<\xed\\g\x99\x0b\x0df\xb0\\\xe8\xcc\xf3\xb0\xb1\xa1\xdbo\xfa\xad\x95~}\xff<\xf8\xe5 \xbc\x0dD\xd3J\xe6\x12\xff<\xf8\xa3@\x80\xe6\x83\xe9\xf9Y\xf0\xc7o\xf8s\xcb\xc6UF\x851X\xe7~M\x87\xd1\x0f\xa4nX\xdc\xd8v\xa0\xf0\x06\xbd\xfb\xfdtL\xa667\xb66+N\x1fw\xf6\x90\x03q\xc6\xc4\xcaDWA\xdc\xc1\xb1\xe0Vb\xcf\xeel\xb3g?\x7f\x86\x1d\x12\x15q\xbd\xaa\xfa\x8du\xaa\xb3jC\xb1-@Qs\xf1\xea\xfd\nR\xb6\xcf!\xc9\xa0\xd4\x9b\xa8*\xeaXZi\x9a\x1b\xa2\xcc\x03\x87\x85\xf7\xee\xd9\xfbg\xafO>\x9c\xbc?e\x83O\xa2:\xff\xa9(laSD\xb9\xe2\x0eg\xb4\xa7ibP\xa6\x8aB;\x8c\x07\xe9el\x83}\x1cX\x87\x04\xd0\x18j\xdbk\x8aR\x15df\x8c\x13\xa6+t\x95XX\xd1\xdc\xfd\xa35\xa9W9\n]-(\xbb7 i\xfed \x9c\xa8Z4:(]\xc1\x0c4\xbe\xc9\x06]-(\x85\xa1W\xb2D\xe8\xcd\xe0Gz\xa7\x97\xfe\x9b\xf6\xaf\xadT\x96\xa0U[b\xe3\x9a\x0bp*g\x95~\xe6\xef?\xee\x06\xff\x00n\xb6\x86o\xbby(\xea(\xa9\xde>;=t\x125\x98.$/H\x16\x17\x89\x91\x89\xe0Y\x15(\xae\x17\x0d\xae\xd3\xc9\x1ez\x1a\x16<\xa9N\xaf\xe3\xe5\x92\x94\x07#\xc6P\xb1O\xb6\x18\xc3\x81n\x0cy\xf1j\xce\x12\xf0\xd7Q2\x7fY\xe6\xebwq\xbdz\x8d\xf8\xcd\xdcI\xeb(%\xcbxv\xf3\xaa\xff6\xa6o\x97\xa4\x96\xc7\xf9\xfb\xf8z\x84\xf8\xc2\xd9[F}\x8f\xd9Ib\xd7\xd7J\xc9/\x12[\xd7\xbc5\x18!f\xbb\xd5\\+\x11\x8b\xcb&\xa1\xdf;x\xe2$\x83'Nb\xa3z\x89\x12\x19i\xc7p\xef%H^\xa2\xf2\x85\x83\x0c\xca4\xf7\x13\x19\xf0\"\xf6\xf9\x1f\x9b\xb3\xa8\xca\xd7\xc4\xb7\x03\x14\xba+\xc2\xee\x16\xb5uu\x91\xd7\x0c\xd9\x10\xd0>>\x9bK\xdc\x80#\xd8\xd0\x87$\x9e\xad\xd4\x87\x15\x8b\x93Q\xaeQ\xcb\xc5w\xc4\x98\x0dQ\x90\x99~mY\x005D/\xb3\xd4\xa1\xb3\xd9\xc1\xb5F\x96\xaf\x8e\xbe\xf9F\x8emn\xba\x8b\x82\xde\x89m\x0c2+\x0e\xda\xccx\xca\"\x9f\xbd\x17\xc2\xa2uZ\x0e\xac\x9d\xc0\x18\xcc\x92\x15\xafIMJ\x0d\xdb!\x8a\x1cgE\xc7\x19\x07\xb0\xe3\xb0\xe7D\x91r\xe0\x948\xf0\x08;\x9did\x0d\xf6{\xb3<\xab\x93lC4\xa9a\xd4r\xc5]qs\x9f9\x7f\x99\x9cqE\xa1\xddj\x83\x02uK9\xad\xa8tB\xffc\x91\xca3\x8a\xc6\xf8\xf4\x08\xa6\x99ev\xc0\x87\x86\x87\xcb\xb4r\xa8M\x076k\x84\xa6\xfd\x00f}{'\x13\xbd\xd4\x15\x12\x9d\x9f\xe7e\xb2L\xb28U\xc4)\xe6\x96\xa1}\x83\x12\x8cBT\xc2\xf6O\x96\xb7\x9f%L\xe7W\xed\xd6\x81\xe8\\\xab\xbbE\x86\x00Td\xc4\xac-\xf4\xba\xcd\x98\x02\xbc\x80#\x98M\xf7\x1c\x00NKa\x84\x91\xe9\x0d\x15P\xda0*:0\xaa\xac=\x9b\x19%\xfb[\xe4\xe5\x9bm\xcc\xce\x18\xeb\xb6\x04\x0e\x9d\xb9%U\x84ZV\x06\xda\xd7-\x92^\\QzQ\x07\xe0\x15e>\xdf\xcc\x08\x1f\xdc\x15\n\x02\xb3<\xab6\xeb\xf6\xb3\x8a\xcc6eR\xdf\x88g\x9f?\x83\xbf\x9a^\x9d\xa1\xb1\xdb\xd5Y\x08s\xb6\xf3V\xba\x0ca\xddB\x01\xb3A\xc6f\xa5\x909v\xa64\xed\xd0\xbf\xb97\xa0\x03\xc8\x80\x83m\xcd\x14\xf5N\xf5\x81{\x18\x98\x14\xe1\xbar\x03G\\Ab\x9f'X3pt\x8b\\\xa0\x8b\x10\x9d\x16(\xd1M\x1b\xa2;\x0f\x9e\xc2\x8eO\xa7\xe8_\xc0\x11\x9cG\x19\xf9T\xfbA\x10\xcd\xf3\x8c\x04O\xf9\xe4]\xc1%\n\xed\x8f\xb2z\x17,\x00\xa8\xdb\xbcD\x91#>\xa1(um'3\xdd\xc2n\x90N\xce\xc6\x8eZ\x94\xde.\xa3\x0c\xcf\xc9\xb6\xad\x01\x87\xc7\xa7\x91h\xa4+\xa7#QKW\x9e\x8fD7]\x19\x87\x82\xba\"\x17\xf92D\xa7\x95\x0eZ^\xd3\xe5\xa3\x98I\xa1\xe6_\xc2\x11<\xebb\xe6'\x8e\x99;\xf6\xab\x981\xe5\x8a\x87\"\xbf\xdc\x06uu\x85bb\x87\xd7v>\xc5mE\xde\x1be\x1e\x81\xb7\x19*p\xc4\\\n\xc4\xbcq\xfe\xd4q\x9d\xac\xb5\xb6\x150n\xfdJ\x0f\x1b\x8d\xf9K\xef\x89<\x89T\x85\x08G\x8e\xceMQ_E\xbb\xe0J\xd8\x87\xdf\xe9T\xb4\x85P\xd1\xf6\x82Z\x03\xf7\x17\xb6k(\xf8\xf0\x98\x07\xa4b\x11\xa1\\\x15rs\x08\x8d\x06\xab\xdf\xe9jL\xa7D\xb9w\xfc\xfb\xc7\xeb\xb3\x07\xcb\x84]\xfe\x0d\x80u\x9c\xe9\xc1\xe3'\x036\x16\xffo\x98\x1e\xdc\xcd\xd5s\x9a\xc7\xf3S\xa3\xc2\xb0\x94\x9c3\xd3R\xd0\xe6\x0d\xe9\xdb\xf5\xc9\xc6\xe4\xdb\xcb \x90(\xbf43\xf2\x9b2\xa5U6e\xca\\\xc5\x8c\x15\xab:\xae7\x15\xe6$\xc1\xbfl5Y\x8aPQ\x9b\xfe2\x7f\xb1\"\xf1\x9c\x94\xd5\x04\x12\x9fD\xfc\x87\x81B\xe8\x1b\x89\xe1\x08r\xf1\xe5\xd4\xe3y\x84\xee\xd3\x9d\xe7\x19\xf4\x10\x1b\xccC\xf9\xf93\x9c\xfb\xb1\xd9\x0f\xca\xdf\xa0kKM>\xb1\xf8\xe5\x17i~\xc1\x14X\x17\xe8'\x1e\x88\xcd\x1c\xd5+\x929(\xb9)\xc9\xceY{hH\x97G\xf3\xb8\x8e\xd9\xdf\x9b\xc0r\x00]\xf5\"\x01;(\xea\x84\xa63.\x8a4\x99\xa1\x02\xe9\xc1\xcf\x15\x8bO\xc1\\w\xfer\xfa\xf6MT\xc4eE|LA\xb4l\x8c>\xe3\x05\xf91\x8f\xe7C\x0c\xf4-\x1d\x85\x0e\x84\xa2\xe4\x98\x01\x01\x8e(\x85\xc8\xa3\xfc\xe2g0j\xf5\x9dX\x83\x9c\x8d\xf5\x84\xdbl\xeb\xb9\x01\xfd\xe9\xc3a\x91\xf7\xa9\x83\x9b\xe1B2\x9cT\xaaO\x19\xf6\x8c\x94a\xafM\x19\xf6\x18e\xd0\xe3\xaa\xce\xbf\x04\x94\xa5\x15\xe3SC\x8e\x10\xa1\xd6e\xf6@:\x1d\xaf\xf9r@ \xba9\xcd\xe8@\x85\xbf \x9a\xfaGI\xc5\x1d\xa1\xa6\xd9Y\x00\xc7\xac\xd2\x04\xa6\xf4\xff\xb3\x10\x7f\n\xb9\x8b\xe2\x93\xf0U\xd1@\x1d\xf1\xb7\x1b,s\xc0ld\xe0\xa4\xd0Gfy\x99\xf0#C\xc4\x89\x13\xcfd\x9c\xd1\xa3\xadl\xaeVm\xfb\x0dS\xe0\x17\x12\x15I\xf1\xa5\x06,\xcdM\xe3,Oy\xd6\x9a\x97\x98\xf0\xcc||\x90(N\xd3\xfc\xfad]\xd47\x18;\xd8|||\xd9\xcc\x8fE\xf2\x1dJ\x1f\xf5WX\xdd\x04@es\xfdb\xc8\xc8\x1f\xfb9\xcb\xdfp\xc1\xa2k\xa8 \xcd\xe5\xd7y\xff\xe3+\x91~'\x9b\xe5s\xf2\xd3\xfbW\x86\x80P\xa0p\x92\xa8\xcdM\xb8j\xe8\xa6\x99]\x1eX\x1dma\xd0\xfc\x16l\x81\x19\x95\xcf;\xf7\xe4:\xee0\x08\xcdW\xbe\xb9m\xa9rfd\xd4\xde\xbf8C\x97G\x18\xfe\x1d\x8e!\x8f\xd6q\xe1'A\xf4s\x9ed\xbe\x17zt\xf3z\xebMZ'\x0c}\xd4J0\xe9\xd4\xd7\x03`V]M\xc0\x0b\x0d\x06\x99\x15\xbe\xfd\x1f\x07{\x86\xf75{\xbf\xf7\xc4\xf0\x9en\xbfj\x02\xdeg\xaf\x0fP\xa4^\x94\xe9\xc0\x14\xd0\x9e\xe7\xb4M\xab\xe1{\xe0\xceU#\xda\x02\xce73U'7Dx\x85\xd1\xd64\x1b\xb8>\xa1\x9bvg\xa7\x8c\xaa\xcb\xa48\xa1\x88\x9ed\xcba\xab\x82\x9c\x87\xeb\xefo\x0bc\x88V\xe0l\x95\x1d\x83EQ9\xf6/\xa2)\xc6^ny\xe2\xbf\x9d6\x82v\xa3Q\x88\"6\xf84\xa1\xc7\xcf\xc6\x8f\x8d\xeeJ\xa2pc\x1fC\x1a\xd2\x10\xf2 \xd4\x05v\x0e)Oo$0\xeb\x86\x9dB\xa90Y\xa0\xe1\x91~\x14l\x85\xcc\x0e\x0eI6Of\x14\xa3u\xf1R\xbb9o`\x00\x8f\xd3\xdf\x8e\x95Aq\xc3*\xf9\x08\xee\xd4\xf3\xd0\x9d\\[=\xc7\xd6\xfe\xb1!\xa5!\x8203\xa9Y\xe4\xe5Z\x7f\xd0\x0c\x86fM\xfb\xfb9 \xc6X\xb3@\x83\x04\xb1\x9fL\xc9\x19;)\x07\x10|`3\x168\x15\x83\x8c\xc3d\x12\xf9\xf29\x7f\xf9\x01_\x9a\xed;P\xe8{\x80\xf4\xbb\x88\xcb\xfa\xe3\x03\n\xa9\xfbT\"y\x90D5\xa9j\xbf\xb0\x9a|\xf08j\xa6\xf8\x9d\x80J\x04.\x01d\xe4\x1a\xe6\xa1\x06\xa8=\xf6\xd4*\xd6\xb06\xa3\xb8(H6gAu\x92i}\x86\xf6\xbdC\x00\xd6om\xa6\xf4\x94\xe3\xac\xfc\xc40\x1d\x1ez\x98\xe1T\x7f\x07j\x91L\x1bq\x058\xf8V\x98)\xb2*\xd2\xa4\xf6\xbdco\x00\x01\xae\xa0g\x0b\xbc\n\xa1\x1b\x8aB-K\xba\x9b\xa6{\x03G ^ O\xf7\x07j\\\xa0=\x86\x19\x85nl\xf8q\x8e\xe9\x96\x04 db\xe6\xcd\x00\xb2t\x90#\xd7 \x87\xeb\xa6\xe3\x8bu>%f%6e\xab.ZCl\xa8\xf4\xf9PFmP\xa9u?\x0b\xa7(&\x8c3\"\xc4\xb5-\x9d\x8d(\xf2fSG\xb0C\x96\x0c\x08\xcfG\x12\xb0l\xbf{O!\x83\xef\x81<\x85lw7\x10bYC\xb8\x87\xac\x8d\x04gRG\x8b$\xadI9~1\xccZ\xfb[\xc1O\xde3\xb9@@\xd3LI\x8f\x84c\x0fv\xf1(\xf7\xfal\x1d \xa3p\x11BE\x99^}{L\xe1u\x04K\xd8\x85\xeb\xb0\xd9\xd4x\x928\xecj\xed\x94\xbe\xb2\xc1q\x08uT\xad\xf2M:\x7f\x91_gi\x1e\xcf\x9f\xa1Z\x8deg%\xe9\xc2p\xdd.\xed\xc3\xfc\xcc?\xe8eK\xa4Eh\xc5\xf7\x86\x94\xe2Z\xa3\xe6\xb9\xd0\xa7\xeb^\xae\x1a\x8b\xe7\xfe\xcb+\xf1Rc\x0f\xad\xba\x1a\x0b\x9b`\xf9\xec\xcf\xec\x8c\x136\xc1l\x07Ri\xf8m\xf9\xbf\xe9\xea K\xce5)\x97\xe4U\x86\xcf\xde\x96\xb4\x02\x1cA\x8ao\xb8\xc3\xb7C\xc0\x1bh\xd6Zz\xdf\xd8\x11\xdf,\x11\xb2]Y\x7fq3\xda\xfa\xb2E\xad\xfb\xad(B\xf2\xeeg\x90a \xbaK\xab\x9b\x03\xaa\x8c\xf5,2\x08\x82\xaa\x01\xbf_\xf2\xc8\xe85\xfe\x95\xf9\xa4\x97\xa8[6\xd1F}Z\xf9\xe0;\x8d\xc5\xfdZ\xa0\xb5\x169\x97\x02\xc5\xbe\xd5\xbd\xbd\x11\xdf\xf6Ru\x02?\xf5\xe4\xae\xd2\x83\xa3\xed(op\xda\xe8\x83a\x02\x9a\xf4\xee\xdd\x1d\xc0\x8f\"\xdbI \x88?=2\xaf\x14S+y\x94\xad\xe3\xf2RRj f\xae\nUL,!\x17Kn\xa0\x97\x01\xf6\x8d2\xc0~[\x06\xd8?\x1b\x08C(Ng9\xcc\xeb2.\x1c\x0f\x14\x16\x82\xfdi\x00\xd5u\xc2T\xc5QQ\x92+\xe4\x8d3\xf2\xc9\xca6\xce\xe2\x8a\xc0\xded\xb0\x0e\x08\xd3,\x93\x10[\xdb\x84X\x91\xc2\x1e5\x02\x14\x96u@O\x1c\x0c6\xbf\x92\x04\xac\xf9\xfb\xf3gL.\xa7\xdd6q\x10\xc2N\x1c\x95,\xa4\x04\xa6)\x9b\x91\xa2\xce\x07w\xb9Z\x18`\xe0\x08\xf6\x1d\x0d\xb1.J\x12_Zk\xda\xef\x87\xe5\xb5$\xef\xff\x11\x9d~\x7f\x1e\xda\xfb\x17\xb5\xe0\x9a=r[3\x12\xd5{\xcc\x1c\x9fdu\x08\xf4\xe7h8=\xf9u\xc1\xc4\x87\x1c;\x00\xe1\x89\x1d\x08,\xe3lmYjlm\xdfa\x1f(\xa7_<$|\xc6&\xe13\x1c\x96/y8+\xce\x81\x19\xbb\x90<\x9a\xb1\x1f~\xb8\x88\x08z\x92,\xec\x1f\x86\xca\x0ex\x14\x82\x8f\xf9\x1eJ\x8c\xed\x82\x071\x06y\xa1O\xcbt\xf8\"\x0b$\xe0\x1c\x90Q\xb2\xab*2\x8aa<\xa1{]=@|\x16\xaf\xd4\xadw\x07,\xa0[A\xed\x1a HU\xe4YE\xbe\x84\x82\x1c|\xf7\xebn\x8d.\x0598d$\xa47\x13\xa3\x0eP\x14\x84\xdc\xc1\xa1\x1b\xe4HT\xef\xb7\x89\xc8\xfexP=\xfauA\xc5\xc7l\xc9\x0f\xc3\xc0\xe0\x82\xbe\x8c\x8c\x18\x9c\xc3Da\xcd}goN\x82\xe5\xd0\x01\x83\x10$.\x1d;n\x04I\x0b\x0e\x9e\xe0b\x1e\xb0\xbb\xb4\xb8\x9e\xad\xfc\xfd\xc3\xc0\x10\xafFW\x9ai\x1c\xda\xa7\x01w\xb8\xba\xcc\xc4\x8b\x8e\xdd\x01.\x87\x0eh\xce\x1a\xf4s\xae\x94c\x19%J\xc5Z#\x08\xf8\x8f\xe7\xf9\x1c\xc3\xc5\xf2\x9fL]\xc5L@ \x97{Q\xde\xc6G\xf5A\xa8\xbb\x99S\x0b\x1b\xa5\x03\xda \x19\x8b\xf2\xcb\xd1\xeb\xf3\xd0\x02'Q\xeev}\xf0\x16\xd1\x0d\x9c\x89\x0e\x9c\x89\x04'}\x1cv\x93\xcfw\x0b\x82\xf1\xe1\x81\x1d\x8c\x92\x8c\xc6\x17\xe5\xa6\xa8}\x8f=\xf0\xc2^ \xefna]X\xf0 +y$\x9b{#\x86R\xd5y1`\"\xa9\x07\xf9-K\x93\x871S\xa7\xc6o\xa7\xf4\xcc?x\xa2\xd7\xf9i\x02\x18\xdc\xea\xd4D|\xa0v\x85t\x03\\\x16\x92\x10\x07'%![(\x8d\xdbnVB\xa125*{\x06%B>\x98\x07\xfe\xcfU\x9e}\xfe\xb4N?\xdf\xc4\xeb\xf43\xa6\x00\xfdx\xf1\x80\xf1\\_|\xb9\xd3\x8d\x10\xb2\xad9\xe1\xc3\xfd\xffxk\xc2\x81\xc1\xb4/1I\xa0\x06Q\xfe\x1eCi\xe2\xd5\x97\xf7\x00\x83\xa0\xe0M\xba]F\x16\xe6\x04\x99`\x02\xddkTS\xe3\xb3\x01\x13)#\xa3\x85\xbaR\xba9\xd8\xbc\x9b\x00\xcfti\xce\x95\xa5\x19GZ5S\x991+g\x9d9\xaa#i]\x0c3\x19\xeeW\xa4\xfc\x0b\x85\xf1\xd2\x8d\xcaiL\x85\x9d\xf1\x19i\x94ua6\xca2\x0db\xee0\x08Q\xb9e&\xeb\xd4\xfaJ\xdf:zAY\xf6\xb8\x88\x9b4x!\xe1\xc5\xf3\xb9\xb0\x8a\xff\xfc\x99\xb2#\xeb\xfc\x8a\xb4\x9f0\x06\xc5\x10\x99\xc6\xb8/;\xc6Z\xa6 ^\x0d\x82\x0f\xa7\xff\xf93\xd0\xb9\"$\xd7\x9b:\x16\x90D\xc9\xfb\xc6\xd1\xd4x=\xd8\xcf\x15o\xdfo\xe0AA\xd7\x07\x80|\x8a\xb7\x16\xbag/\x08)\x9a\xe7n8\xb4t\xc0\xa1\xaf\x8e\xc87Fcl\xb3\x87\x06\x1f\xe1\xa9\xbc\xd6Z\x92\x1aM\xaf\x7f\xb8y\x97'\x19\xa5\x08\xfd\x18\xb8\x00.n\x0f\x82\xbcw\xb2\x86\x86\xda\x88\xd1\xbf3\xff\xbas\xa3\x84\xbe\xecz1t\xeb\x7f\xce_\x1ej\x0d\x06\xae\x87\xec\x10N\xc4\xa7\xda\xdb\xdcO\xe26W\xf7\xf2T|\xaa\xb5~x>d\xc3p)>\xd5:\x0c>\x13o\x1f\xf7\x8d\x18\x9a+\xdc>4\xe3\xf9|2,'\x8b2(3\x81\x90\x9b\xe8>\x1d0\x1c\x1c\x92\x9b@\x91\x9d\xb4\x154\x08\xd6o\x89\x93\x85 $\xbaw\x94\x8a\xde\xe9|9a\xb6Ny\xfb !\xf5\xba\xab1S\xba\xe8\x1a'\x8a8\x899\x19\xca\x86\xa3\xe5\xdc\x06\xdd %\xad\xb7!L\x87\xb6\xa3\x89\x9a\x9b\x0e\x1ae=\xdb\x8a\x0b\xdd\x9a\xdaV\xf1\xaa!\xb6\xe6\x11f\xcc\xeb\xf85\xa9c\x1c\x1d\xa9\x00\x83}\xadI\x8d\xaa\xcd\xb5_3\xd5B\xc7\x8f\\\xd0\xfc\xcf\x9f[xEk^\xe9)\xd7U\xc8\x9b\x15\xe9l\xafl00\x9e\x85\xf5Y\x10\xde\xf1\xc8m\xc0\\v\x0e\xc7a<\xbb\xd0\x83`)A0\x1ee\x14\x06\xe0\xc2\xc8\x00h\x9f\x8a\xdd\xd7{\xa9a\xcf\x8a\xb8$Y\x8d\xa1\xba5<\xda\x10\x83\xd6\xf1\xf0\xac\xed\xf1\xaa\x95\x84\x9aG\x98B\x17\xf1\x95]\x9b0\xbf\x97\x92\xf9\xbd\x18aE\xfbE\x9f\x18\xd4\xc3\xa2s\xb0\xa5O\xf1\xba\xef\xfd\xa3\x01\xc6\"\x8d\xeb\x9ad\x13\xd0\x04}Yl\xd2\xf4\xe6\x8d\x08g\x84s\x1e\xe1;\xbe\xf0g~\xea\x93\xae\xf6\x1a\xf4\xe3\xc8:\xddh<1\x93\xea]\x99\xaf\x93\x8a\x8c\x18D\xc1\xb5\x86s\x9f`,\x14\xa7\xb1p\xcf\xae7\xe4\xda\x117\x86\xe3\xa3\xf0\xa1\xe0}m\xa5U\xb5\x01\xb8\xa8\xdb`\x08\xcf\xc1U\xc4j&\xf7\xaeL\xd6I\x9d8kA\xdcg\xb9\xf9\xcdg\x99T\x7f\xa9\xf2\x8c\xcb`+\xdd\xfb\xe7L\xde\xed\x89i\x16\x84\x92jn!/\x9b\xb4\xdc`\x1a\x18\xefQ\xe3\x1b\x9fT\xaf\xb9&b\x02W\xba\xd7\xcf\xe6s\\\xb0\xa6\xdaZW\xed\x7f\x92\x8c\x94q\x9d\x97#\xe6\xf5\\\x92d\xe5\xfb\x97\xcd\xd7ns\x13\x1fL@\x93P \xa9\x18\xdb=\x81B\xf7\xf2\x84\xe5\xaeu\x1eq+x\n~\xdc\x1fc\xeb \x95\xdf\x15C\x1f\xa9\x0c\xfd\x9dRap#t\xa3\x8e}A\xae\xb4'\xdb~\xba?\x94fm\xf8\xd3'{\x03\x86M\xb6O\xb7\xcebw\xb0\xf7\x9d\xf9\xd3\xff`s*q\xbfw\x07\xfeJz>\x8c\xe5o\xe8;\xae\xe8k\x97\xbcv\xcfF]_\x9d\x850\xb8N\xea\xd5\xf3\x92\xccIV'qZ\xc11xI6K7s\x82&`U\xbc&\xf7Y\x9cx\x8d+\xb6`\x03\xc4z\xdb\x14yd@hB\xe7\xbe\x81Pm\"p\x9d9\xbd&`G]XML\x01\xecX\xf5\x1e\xb0\x8cyTA\x8d\x177,\xfc=\x9b\xd1\xb6&\x9a\xd0g\xc6\xcf\x06\xd2\x1b\xcd\x9a\xe5\x99h\"\x88\x01\x8aw\xaea\xe0@\x95c/\xf2\xb9>x\xa7.\xcb\xc9\xef\xcc\xbf~\x85\xdb\xbdd\xe8\xb2,\x1e\xf0\xe9]\xc7\x97,\xb7\xf2_N\xdf\xbe\x11N\xbd\xb3\x94\xc4\xe5\xf3x\xb6\"6\xbb\xd6**\xd2\xcd2\xc9\xaa\xa8$\x8bJ\xf9\xb0cB|\xeb\x9aQ\x1eT\xc2R\x9b\x17J\x10\x97z\x95\x18\x92\x99\x9c\xa0X\xd8\x19\xe0<\x9f\xe1\xf0X\x14]\x12\x84\xdd\x19,TX\xf8\xd7C\xeae\xddf2\x84;\x01\xd3f\xba0\xe0\x97~JB\x8c\x9a\xb6\x07m\xd0i\n\xeb \x01N\xd5\xb0cI\x81\x931MM\xd3X\x13\xf2>\x08\xf5\xdf\xad\xf5\xdf1\x9cN\x08~\xc7\x8f.$\xec\x85\xb6~\x9c\xa6o\x17A\xd8\x8d\xf9n\x06\xb55k\x9b\xbc\x11\x1a\xa6<\x17qE^\xe4\xb3 \x9clCi\xf8\xf0\x07IfW[\xa1\xe5\xbdE\xa1\x82\xfe\x8b\xa4\x9aQ1$c\xec\xaa\x86\xebmj\xf3\xd5y\x1d\xcf\xca\\\xcb?\x8b\xb2\xce\xe7$\x15\x94\x86W\xefGE\x01\x854\x9e\xbb\xe4E\x86\x8eos\xdc\xac]b\xf4mv\xd5\x1b&\xdb\xb8\x1d\x8b\xf2\xa5\xee\xc7\xa2\xb8\xba!\x8b\"\xcf\x8a\x9e\x07\x87\xc9\x16\xb4[\x98\xeb\xa0[\x8fc\x1c:D\x91#\xb48v\x882\xac\xf2\xe6\x8e\x1e\xe6f\xb4>\x1b\xa283D\x9d\x0f\x9c}8D1(\xd2\xfd\x00&0\xeb%\x13\xb3\x9d\xe6\xa0\x90^\xc2N\x083\x8b9\x94pl1\x1cd\x8bE\x92\xa2{W\xff~\xde\xc4\x8fT(\x8c\xbe\xee\xaa\x1d\xb0\x0b3\x17\x19R\xdc\xb1]\xd2\xa3E\xfa\xcak9\xc66}\xd1\xd7^\xf2\xa6U\xc2\xa5\xaf\x89\xf1\xe3\x9dy\xf9\x0b^\xdb\x91\x97?g\xebr\x99\x14B\x97\x87<\xa7\xbe\xf25\x8b\xe7U\xd7\x1a\x19\x1d\xb8\xc1\x13\x89\xf8Ibd\xfai\xad\x13tc\x0e\xb1E\xbc\xd5\xbe\xa6\xffl\x04\x9d\x0b1fN\xed\x97\x18\x91\xd1\xcck\x8c\xe03\x1cy\x8c\xdb\xc0?\xe1t\xbf\x9b\xfa\xbd\xcfZn8\xf7\xa8\xb5\xb4\xe2\xd2\xfc\xbe\xe6\x15K\xbbY\x19Rnf\xfe\xd6\xba\x83\x83\xbd\xad\x93\xbb?\xd9Z\xfe\xdfZ\xfa\x1f\x18\xabU\xf6W\xdf\xdc\xb9\x10a\xe2\xc8\x0d\xfaOy\xa2\x9b\xd9\x03TAE\xb3\xb8\xa87%9\xad\xe3\xd9\xe5\x872\x9e\x1186\xbd\xe1\x04\x9d\xfe\x1b\xcd\xf2\xac\xaa\xcb\xcd\x0c\xdd\xdf'\xecYEkR^C\xfan\x06\xec\x99\xe5\xaaA\x1fx+k\x05\xde*Y\xe0\xad\x92\x05\xde*ww\x03\xc8\xa6e;\xf0Vi\xe0\xacqpkRU\xf1\x92`\xae\xc6\xbd\xb3\x90\x99\xd0\xd4\xad\x93J\xa7l7\x11\x8c\xac\xb9\x8bW\x9dUC\xf5\x05\xcf\xedC\x8f`\xf5\xa9\x02:\xfai\xd8q\xa8\x1a\xad\xf5\xfb\xed\xf12\xa9^\x96\x84\xa47o\xe25\xb1\xe7w\x90\x86\xe4S\xd2\xf2\xc7\xd1\xae\x1d;\xc4\xa5\x0b\x9d\x91\x80\x97Q\x92\xcd\xc9\xa7\xb7\x0b\xca\xa5\xfc \xee\xefS\xda\x9d\xcb\x87Y\xf30q\x0d=)WZ4BX#}$\xb1\x12e\xf4i\xf2\x1a\xb9K\x17M?\xc7:\xb80 \x1dX\xe5\x85\xa0f5\x0b\xc1\x13\xe7\x05\xfe\x10\xf9\xf8^\xb4\xbf\x98\x89\x90\xb4\xd5\x83j\xb6\"\xeb\xb8\xfb\xb4\xd5\x88\xf2\xbc\xdd\x95\xda\x0c\xef\xe8\x946\xa7\x1f{\x82cg\xfd= \x9f\xe2u\x91\x12\xefl\x0c\xc6v\xc8\xf7\xc3/ \xc3\xadW\xff\x96*X$G\xc6\xedp\x07\n\xda\xfe6B\xf3\x86~03\n\x87\x8cG\xf9\xc3`\xef\x8c\x9c\xed \xc5T\xef3r%\x91>\xb9F\xab\x8f~'\x1d!TP\xdd~E\xb1g\x90r\x97\xa4\xca\xd3+\xe2w\xb5\x82\x96}[G\xf3\xa4\x8a/R\xc6]-\xe2\x19\xc1\x00Q\xdd1\x84\x18]\xfb\x92<+\x92\xeaC\xbc\x94\xd9C\xfd:\xd0G)\x1e\xa2A\xb34!\x99\\\xc1Nt\xb7\xdfL\xcbxh\xd62\xfah\xed\xffm\x80\x91\xe4\x1e\x05\xba\x8a\x82\xa1\xd4\xa7\xf3\xa9\xc4[\xad\xb7A\x8a\xbb\xf9;\x03SY\xfa\xa9!\x8cb\xe6\xef?2\x06Q\\\x0cEP\xd4\x86\xb0[17\xf9'\x86\x00\x8a\x99\xff\xad\x8e#^s\xbe\xb7\x0d\xd8\x1ce\x0d48\x94\x82A\xae\x06CL\xe5\x8f\xe8\"\xc9\xe6~\xb6I\xd3\x90\x7f\x16\xf0X\x1f\x14\x9f1m\xad\xd2\x04\x7f|\xba\xb9\xa8KB\xdf\xce\xd5\xb7\xe4\x13\x99mj\xb4\xd0\x11\x7f\xd3\xc7\x9d\x18\x8fi\xebA\xabB\x13\xf01\xed=\xa4\x15\xdbJd\xe5g\xc82\x85\xb0\xb3\xe1\x87M\x92\xf2f\xae\xa2w\xcf\xde?{}\xf2\xe1\xe4\xfd\xf9\x0f?\xbd\xfa\xf1\xc5\xc9\xfbS\xd3f\x82#Xi_\xd0\x0f.h\x9b\xef\x99\xd4\x84\xed\xaa\x0f\x10r$-X\x9f\xfd\xdd\x90\x17\xaf\xe6\x13Xc\xe2\xfb\xf6\x86\xc0q+-\xc8\xac\xd1\xe2\xf1\xffY\xd8\x17\xfe\x00\x9d\xfc\x98 \xc5\xfe4\x99\x8e\xdao [\x14\xa5\xbd\xcbm\x17o*n\x0d \x84`\x1d(.\xe8y4\x96fe/l\xf4R\xc8\xc3xt\xef{\x83\xbe\xbb\x94\x08WRi\xcf\x02\x88\xd7\x06\xed/\x89Vy\x85\xbe\xba>\xff\xf3\x082\xfc#@ 3I\x80\xbf\x17\xbf\x8e`\xca\xc5\xdcY\x9e\xca\xe8(\xde\x84\x8a\x13^p\x86_^\xc4\x15y\x17\xd7+\xfe\xa9\xfcy\x04T\xba\xb3/\x80\xaa\x03\xc9\xc7\n\xca\x16e\xd3\xde\x80\xd01\xfc\xe9\xfe\x17\x98\xb8l\xadW{\xb2\xf7h\xdbO\x0f\x1fn\xad\x1f{\xb27` \xf4\xef%\x9a\xa9\xbf\xee\x9c\x1bG\x9bdv\x01\x89\xb8I \xd5\xeb\xb8\x18\x08.\x9e\xc3@\x84\xf0d\xc8\x1dX\x1a\x0chu\xbe\x9b![\x83j\xc8W8\x15\xedj\x87$\x82\xa1\x1fj\x9d\x85\x17C\x9e\xc42C\xa86h\xb4\xe0\xe5\x0f\xf6\x86\xdc\x81\x87Y2E\x14\xbd\xf6I@E\xc1\x02\x8d\xb6\xad\xaa\x1a\x11n\xfdP+5\x89x\xeb\xda\x81\x8b8\xda\x87\xda\xb7\"\x8e\xf6Cm\xc3\"\x8e\xf6C\xed2 o\xf0\x87Z\xafm\xe1\x0e\xfeP\xeb\x98\xed\x94\x08A\xb9\x00\x1e<\x80;\xf9\xb5\x98\x98K\x82^.\x12\xf6b\x98\xcdd,\x92g\xf1'\x99\x93\x8b\xcd\xf2GrE(\xe7\x98d\x8b\xdcR_\xde\xfaO-\xael\xac\xe2\x9f\x93\xaa\xce\xcb\x1b\xb3\xd5\x9a(\x8cy\xb07+|s\x1d\xaa\x16\xcc:|.Y:\xdb\x07U\x1dSi\xc46\xd4\xc2\xb5\xbd\xc6\x0c\xc3\xd2\"\xaf\xf8\xa1$d\x82\x9b\xea\xdc,4\xa9\xa5Z\xe5\xd7/\xe8\x02\x9a31\x89\x12\xa7\xa93\x1c\xd8\xd2Q2M\xa5 FY-h\x91&\x17\xafI\xbd\xca\xe7\xd5\xa4\x8b\xab\x9dd0\x14u\x035\x10\xbcu\xdc\x1d\xc6\\\x93RJ\x14\xca\xc1\x04\xfc\x06eI$\xb7w\xbe$5S\x16\xf0\xceE\x05n\xf3\xad\xd6\xe3\x8f\xfa\xd5Wq\xf5~\x93\xc9\xaa\xecg\xbf\xdau\x19\x17\x05\x99\xbfk\xce&\xfaT\x98\xfa\xac\xe3\xc2\x97\xd5X\x1d\xa5\x89@\x84\xe4\x91\xc0\x89\x1a\x13j\xd1\x01\xc7>fD\xd4T\x8c\xe7s\x7fz\x166\x1cp`\xf9\x80\xe3\\\xf3\x11\x7f \xbf\xdb\x14\xf3\xb8&\x1c\xec\xbe\xda\x94\xde\xd2`\xd0\x11\x87\"\xc1\xbcA\x02\x12\xc2\xd4L\xbd.\xc9\xcd\x04<\xa4L\x03h\xc7Y\x03\xbb\xee@\x14\xe4\xef\xe94\x1a\x9a\xc7\x8c\xf5m\x1f\x82z\x9bV\x87Z-1\xbbBc\x17j\x19\xaa\x8c\x8f!\x83\xfb\xb0\x0f\x13\xd8\x0bBd?\xf6\x9fB\x0e\xdfC\xf6\x14\xf2\xdd\xdd\x00\xcai\x8e73\xadK\xb6\xdc\xc1%\x17\xdd\xbfy\x94\x95 J\xf3e\x13\x86Jc\xbd\xa1\x16\xb39\x8b\xc1Fd\xe8\x90a\xcbtE\xca\x8b\xbc\x1a\x8a\x04\xb1\xd5B\xc9v\x99\xf3_{\xd9l\x0d\xc0\xbf\xcf\x82M\xbd)\x06\xce\x84]\xf0\xce(C\x7ff\x8b\xca&\xcaWX\xcb\x86*\x8dYNKx\x05P\x04dAE\\lk\xd4\x827\xb9\x83*\x13Qr\x83\x08\xd0-B\xfa\x99*\xf4\x99\x9ex\x98F\xb8d\xd70h\xf4\xde\xab\x10\xc0\x04t\x04\xda\xc7\xb0m9\xbf\xc9Qk0\xe9G\xc4\xab\xca\xad\xdcu\xb7\\m\x93P[\x14>\xd1\x9d^\x889\xcc\xc5G\xaeHy3\xce\xb1Y-R\x86<\xe2I\x98\x9d\xbe4$\x1bkU\xb1o*\xde\xb7T\xd4tL-K?\x0f\xc1\x988\xb1[0\x16D\x08\xb3\x10\x16!\x14\xe8\x14\xbf\na\x8d\xee\xab7\xf6\xb1\x80n\x85p\x1a\xc2\xf3\x10.Cx\x16\xc2\xdb\x10\xde\xb9A\xbe[,+\x11o;~\xd0\xadL,V&\xdeje\xbae\xdb\x95\xea\x16\xcch\xdd\xa7A\xf9\xa8\x00\x16C%\x96\xf9r\xb6[\xa4nq\x0fk1T\xec!*l\x85\xa5b\xb8$7x\xd3\xbf\x98.T#\x9a;\x07\xde\xc3\xff,\xe0\xf1\x9d\xd7L\x0f\xe3D\xe3\xd9\xe9\xa3>\xf9\x92\xdc \x0d1%.u-,\xe2\xff\x97o\x93f\xa4\x8f\xbfl@\xe0\x96\x11\xc4V\\\x93H\xd9\n\x9a\x89)\x98\x1b\xa2\xe2m1\x9d\x9f\x85\xa8G[H\xab+\xd5l*\x08Q\x8d\xa6>\xc2\x93\x1dC\xa9\xcc\xf1\xcfu\x88\x87B\xa2\x0dD1\x9b\xe6\xd17\xdf\x94dq\xc6\xb2\x95\xee\xec\x85\xa8=\xdb\xd9gf\xbf\"\xed\x91\xa4\x99\xfb\x0fC\xb4\x0d\xee\xb8\xbe\xd0\x9fU\xf3\xd3\x98 \xd3\xb58\xa7C\xb2\x15J\x1c0\xce\xc5'8\x82\x13\xc4\x1d?\x08\xa2y\x9e91r.Eb\xe4\xe1\x7f\x18m\xc0\xe8&p\x04\x9fD\x10\xf9\xe7p\x04\xf9\xf4\xf4,\xc4\xf8\x95\x0b!\xf7\x9c\x06!\x86\xac\xd4\x9c^\xcf\x83\x10\xdeb\x96\x17\xc4\xb2\x10\x06\xd3\xfa\x8e)\xf1\xd8\x84H\xb6\xf2\xaf\x04\xf5\x9dg\xff\x0d&K\x91^W:\xb2\xf6\x16\xe5\xb6\xd9\xf4\xed\x19\xd2\xb4\x80Y\xb8\xa5d\x19\xd7\xe4\xff$$\x9d\xfb\xa5\xcf\xd8\xd6\"\x08\xc1\xab\xf7\xbc\x10\x0e\x1e\xdd\x05\xcdr\xc9\x81e+\x18x\x9aJ{\xa7,d\x0c=\x83\xef\x1c\x1f\x0e-)\xb8\\\xcb\xbf\n>P\xa0\xbd\xc3\xcc\x06\x19\x8b\xd0\x96a$\xbbw\xff\x0d8K\xe9r\x80\x87\xfb\n\x0b\xf8\x1c%\xbcK\xcc\xddZ\xdc\xc5\xfe8tt\x15\x1c*\x82Q\x89\x9b\xf4\x8b_62\xb8CV\xf0\xf0Ny\\\xc7\xcc\xaaC\xe5\xce&v\x07\x94M\xb2\x91\x87\x98\xb3\x153\x0b\xc6\"c\xde\xc3\x80\xf3\x9e{\x8c\xf7\x8c\xadi\x02m\x85\xc9\x1cw \x9b\xcbq?Ty\xe1\x87\xfb!\xec\\P2s\x12\xf1]\xa4\xfc\xddM\xc05\xb68\xa5Hs)\x9426c>\x0ca\xe7\xfc\xce\x89\xe2\xc3;\xd8\x81\xf0/D\x14Y\xde\xbd\xeb/\x9b\x14[\xc1;\xd86\x92D/\x92,\xa9V\xfe\xc3\xc3;\xc1-\x87D\x89\xb6\xd2\x1b\xd9\xde\x9d\x8c\xec\xf1\x97\x8dl\x1b?sS\x913t\xf4?7\x95\xedp\xf26\x84\xd8\x9e\x98\xd0V\xa6Tj\xa7$\x97\x92\xaf\x87\x8f\x1dB\x1a\x9b\xca\x94\xd2\xbc\x10\xa9\xc8\xc3\xef\xdc\xee\x0e\xba\xc5\x10\x15r\xa8\xdc\xb2\xc4\xf1\x9d\x8b\x83\x9b D\x9b+\x0c\xc9\xcb\xcf\x8d\x82\xeb.\xe6\x8a\xeeBj\xe2\x1f\x852f\xac\xa2\xba\xc8uw\xf8\xdd8mc\xf5\x19\x88\x81[`1\xa5\xd5\x18\x84x\x8d\x1e\x02w\xa1\xae(%\x97\xb4\xa5zb;\x9a<\x1e\xdf\xf9N[\xc2\x11\xac\x85\xc6\xa1\xec\x88m7\xfeR\xbcZ\xf28\xa3K)\xc1\xed\xefo\xb3J\xfb[p\xa4\x02\xdd$l\xb7\xd0En\xc1\x97\xb1\xf1n\xc1`\xcaq\x1el\xc1Pn=\xd0-N>\xb9W\xf7\x1fQ\xe8\xb2\xd4\xd3\x9cA|\x14\xf0\xfd\xbd\xc7\xf6w9\x9a?d\x12\xfa\x16\xfc\xa0\x1c\xd6\x81JO\x0e(\xff\xb7\xa0<\xdfJ\xe1\xffV[\xf2\x7f\xce\x99\xc4\xbb\x85%3\x16c\xa2\xfc\xdd\xd6\xf7}\xe5\x97j\x8b~-Z\xc1\xf8\xb3\xf9\xb8An\xad\xa0\x91\xee\x8c\x9c\xcb9\x18\xcb\x7f9\xe73\xef\x96^\xcfc\xf9+\xd6\xf3\xc8\x93\xe8K\xf8'9\xe2\x91\xfc\x92\x1b\x0e\xdc\x86P\x8e\xe7\x87\xa6\x8fB$(t\xf7\x1e\x8ca\x7f\xa6\x07\xc8\xee\xd0Mu\xe0\xc8\xee8\xb07\x16k\x8a[\x9f\x04}\x03\xe2\x9c\x99\x1d\x96\x81\xcd\x8a\x18\xa4=\xe8\x9bxM&\xc0\xa3.|\xfe<\x14~Q\x94V\xe8Y\x95!\x92\x8f\xfd\xdc2\xfa\xd1Q\x8d\xecVN\x94(\x8d\xb6r\xb2\xd1@\xbbw\x9b(\x8aE\xe4\xaam\x16\xdb1\x1eU\xbc?\x9c\xcc\n\xa4\xf7\xd6\x92\xd4\x82\xd3\xac^\xe6%k\xce\xaf\xd5\x8c\xae\xbf\x0d\xd0U\x83\xec;\x84\xbd4\xec\xecX|\xb72\xd8J\xc9K`\xa1\x0c\xb9\xd2\xfb\xcc-u\xa7Z$\xe8q\xe8\x16\xe0~\x05\xe8. \xc7hno?\x02\xb8\xd6\xf9\xa9Q\x13\"\xd9\x11\xa5\x06>\xb1\x1c\x1f\xaa\xd7n\xcb\x1f`Z\xf3\xfc3_\x11\x14\xef7\xd9\xf3|\x93\x0de\xb0\x1a\x0d\x0buB]\x98\xfbDl\xb0\xaf8)\xde\xd7\x87d\xc8 \x7f\xf4\xb4\xf4K\xdc\xcc\xcbm\x951\xe2\xcf\xb4V\xedeX\xf2\xaa\xaf\x08\x0fA\xe7^es\xf2\xe9W\x03\xc9\x87\xa4\xc0\xe4\xcbj\xe7N0\xf2\xb2\xcd\xfa\x82\x94\x1e\xec4\xbe\xd9p\x0c\xf7\xf7\xc1\x94&\x0d\xee\x04Lt\xb7\xde%t$\xbdkX\x83\xbb\x1f=w@\xd8\x96\xae9\xd8\xc8\xb6\xcc\x92\xc7\x916_C\xd4\xb2\xb3\xb6\xbf\x87\xf2\x9c\xa7TG\x1f\x8c\xa1x\x91_\x08+v\x80}E(\x0d\x03\xa5a\xf1\xda\xe9;\xe8f\xe1y&F\x1e\xach\x8d\xd7\x0b\xec\x1f@\xc6\xbd\xcd\x19Dm\x8bE\x0bf\xd8\x19NY\xa1\x16\xb4\x9b\xd0\x1aqKV\x025\x82\x19sK\xf0\xbb+\x00\xde\xff\xcck\x88!\xcb\xb3\xfb,\x0f0\xf3\x1b\xf3Bp\x19-\xf0!d\x91\xf4\xf1b\xb1\x83\x1b?.1\xf5\xb0\xc5Ys\x1e\xcb'2=\x91\xf0\xd5\xec\xb19\xcd\xf7l\"\xad\xf7\x1fV$s\x82+h\x8cM\xd5\\\x1a\x1a\x88U\xd2\xcd\xca'\\\xed&\x86\xbb]\x7f\xe2\x14\xd0\xf4\xc5\x96E\xb2\xc3\xba\xcc\x15\xdd\xe2\x96\x93D-\xfd\x8c\xc7]\xfc\xb463,\xb0~\x0d\x8e\xbc\x03\x991D\xc3\x06\x97v\xe6\xebvL\x16\xb1\xd2hO\xd1qJP^!\x19\xd5\x19\xe3\x88Z\\\xf5\xae\xc8\xb4\xbf\xdc6xdA$q\xba+\xfesM\xe2)\xe6BW\xc75\xc1\xf0\xbev\x14p\x0c\x1ebY\xe1\xe1\x11\xb3\xc0\x14\xd8\xaet\x81mvp3dJ\xa7\xbf\x02\xb2\xb0\\\xc6\xdb\npV\x84iq[]:\xd5\xc4\x07\xb4\x81\xe8{\xd8\x13!n8U\xfeP&d\x0eu\xce\xf3;C\xdc\xf6\n\x86z\x15\xd7\x90T\xd9\x1fj\xa8W\xa4$;\x9e\x0c\xb7\xd9\x1dFU\xa4 \x95\x18C\xd8\xff\n\x00\xee\x11\xdf\xaf\x05^'>\xb5\xd9c\xfc\xafN\x14\x19''!\x11eN\xb7M]\xb6\x154S\xcd\xac\x95m\xfb\x070\xbe\x81\x06\x8d\xd9\xfe\xe9x\xbb\xda\xdc(\x03~\x890\x0e \xee\xfdkB\xa5\xaa\xe5k\x1c\x07\xaa\xd2h\x0c\xee90\x90\x8d\x97\x18\xa0\xe6p/\xd4\x0bBH\xe1\x04\x15h\xa8\x1c\x93'\x05\x95k\x9eW\xb8\x1f-\x01\xd8\xbf\x00\x1c\xcf7eI\xb2\xad\xa0\xe2\x08\x11!w\xe8\xb4u\xfc\x15\x1f\x04\x7f\xfa\x95tG\xfd\xfeG\xccu\x14\xf5\x89\xf4\x92\xbb\x95\xb6\x9b\x00\xe6\xd7\xb0\xfbU\xe8q\x17\xf4#\x00b\x83\x87:\x97\x99\xda\xc7W\x99\x05')o\x17\x1fn\x8aQ:\x80\x11\x1b[\xd8<|\xa5\x8d\xf8cr1b\xe0\x8e\x83F\xf07a+\xee~\xe0\xe7K\xf25t\x8f\x0d\xcb\x8a\xc9\xf1\xdb\xdc\xeaW\x80\xbf\x12\x14\xe3+\xcc\x86m\x82&\xfc \x9d\xd4\x90\xb8\xb4\xf54\xaa\xadf\xe1\xbe\x07z\x13\xa9\xe8D\xbe\xce\xd9\xc4\x83\x8f\x8c\x99\xc8\x98Y\xf44\xe8\xc6\xc3\x08\xfe\x04>;\xd1\xbf\xc6,gi\x9e\x8d\xa2X\x8e\x93\xfc\xcb\xe9\xdb7<@\x1feMsE6\xfd\x1a\xe7\xab\x88\x8d5b&\xb6\x89H\x97lb\x9f4-\x84 \xce-\x81W\x93\xcc\x97k.\xda\xac( a\xfbH\x14\xd09\xfe\xedW\xc6\x99sM\x19\xc0\xba\xb9\xcf\xb5\x19\xc9\xa0R\xcf\xc9\x11_D\x8ck:h\xf1\xec\x0e\xc2\x06\xed+\x97\xda\xa8\xdc1\xb8v\xb7\x88}i\x8a\xb0\xa6+}\xe9\xe4\xeb\xf6f\x87\x85\x88\x96\xed6\n5\xb6+\x9ekN_\x89\x00b\xf8\x1d\xfba\xfd\xce=\xca\x04\x1b\x8d\xaa\x8a\xf5\x13\x11\x0eI\xa0I\xa3\x9a\x0dB\xf5\x9e\x99\x07\xb3M\xbed\x131]0\xbbV@\x9a\x8c\x11C\xd5\xdfx\xd3\x16\xb6\x1f\xb2\x0c\x1e~\xef\x19Rl\xca8k\xea\xff \xf6\xf7\xb4\xd7\xe5\xd6\x98\xbc\xa2\xb0\xf5\xcb\\\x17O,\x9cT\x99r?P\x99\xf4\xc3\xf7\xfeF\xfepE\xa0$\xf1lE\xe6\x10\xc3*.\xe7\x90&\xeb\xa4\x86|A\xc7\xcbMT\xa0\xdcd\x95g\xa3V\x0eD\xa2DW\xb9>\x87.5\x93zK\x03\x97}&\x92\x08i\x9b\x19oy\x00\xe3\xac\x0f\xc0\x01\x00\x00\xd0_\xfe8M\xfd\xcd\x97\x8e\x0fi\xa0\x88\x97\x13\x82\x0cmfm\xe56p\xcdN\xd0-\xdb\x91\xb4/\xd8\xa9\xbc\xc3Q\x03\xcd:Xv\x04\xa5}\x89\xc4\xb9\x9aE\x1a]\x85o \xab'J\x8e\x0dtu-p\x1f\x1cla\xc7]\xa6\x95\xaa\xd9\x97\x0bPD\x11\x87\xc7P&_]\x89\x99\xf1\xfe\xa8o6\x8e\xd1\xa3\xd4\xe2\x0e\x06Qdh\xb2\x8a\x99 w\\\x08J\xbf\x0e\xd9\xaa\xfe\x98\\\xf8A\x10<\x85\x1d\x9fB\xc0\xaf0\xa9A\xcb\x8c\xff)\x87M\x00\xc4\xaf\xf8\xe5\x87\xf3`\xc6\xdft\x89\x12s\xcbi\n0;\xc5\x11\xe5\x16\x16I\x16\xa7\xe9X\x80\x8d\x071-; %\xd7\x85bL]Hc\xeaQ\x8dm;l\x10\xeer\x01\xb70\xde\x8c\xfa\xdc\xcd\x86\x15\x9ck\xde\xb2;p\xd2G0\xeb\xe7\x12Q\xac\xe2\xb0(\xed+Q\x8ck\xeeO-\x91A\x9d\x8cQEa'\xfe\x04\xfaY\xfeu\xe56p\xb1\xa4\x1d\xb9\xceRTj\x99K\x95cf\xd12!2%\xec\xee\x16\x97\xf8i\xd6\x1a\xd2,\xc0\xf1`\xbc\x1dxo\x90\x8d1&}\xef\xd5\xad\xeel:1J\x07%YT\x13X\x0b4\xd1\xd3sL\xa1<\x81\xe5p\xad&\x05\xd7\x04n,Ue\x04\x9c \\\x88\xaa\xfd\xa9\xb4O 5\x0c\xf9u;By\x93ay\\<\xf8\xc3\x87\x03\xf1\xe0\x87?=x\xfc\xdd\xb6\x9f>\xde:\xa5\xe4\xc1\xf6\x91\xef\xf7\xf7\xb6\xfdt\xff\xbb\xed\x13\x04\xec\x7fIF\xca\xd6+\xa9\x94\xf9\x8d\xe2\xed\xeb\x07\x93\x1b\x95\x98,2LT\x93\x8aY5\xe9\x07\x80\xb5jq\x80Q\x99\xecm\xebV\x9d\xe5Z\x8a\xa1$i\\'W\x04~z\xffc\x08\xd7I\xbd\xca75\xac\xe2\xab$[B\x0c\"\x13E\x84Y\xbe'\xf0\x07\x19\xf4\xf4\x0f\xf2\x1d\x7fZ\xe3S].Bh\xa0\xf8\xa9'\x97\xd6Z\xf5w\x9f2\x89ep\x82^b\x84\x9e \x9f\x0c \xcf\xf3M:\x87,\xaf%DJ\xb2 %\xc9f\x04.\xc8,\xa6X\x93/&\x80\xb3\x16\xb92\x11\xc3:c6\x0d$\x1e\xc4)\x1f!\xe9\x05h\xa3P\xfb\xde\xef=\xb7V7\xc6\xe9 \x9b\xbfwS\xa2\x89o\x8b\xda\x084\xe09\xd5\x98\x9eeA0\xc0\xb1 \xab\x80\x14\x99\x90\xe1U\xa6\x0c\xc2E\xc3 ,{\x8b>\xec\xbfr~\xce\x15\xabz\x1eA\x97\x91\xc6\xca\x10\xf3\x91\xa9C\xe1v\x81\xee\xb8W\xf9\xa4+\xce\xda\xfaKM\xf8\xed\xb6\xd0\x95\xbe\x03!B\xeaWY\x88\xcep\x0c\xbae\xae\x038\x86\x1a&\xd0_\x96:\x80 \xf8\xb4U8\x82W,G\xf8_N\xdf\xbe\xe9\xcf\xdb\xc8O\xf2\xcey\x1b\xb5>U`\x88\xef\xdd@\x90Zq}\xa6\xbd\x85f\x9a7.\x17\x7f\x0f\xfbR5V\xf7\xeb\n\xdc>\xed\xde\xd1\xe91\x1d\xcd\x18\x9b\xac\xe4e\x87\xca\xf6\x89J\x91'YMJNG\xe8\x9e\x87yN*\xacC>%U\x0dI\x06\xf3|\x86\xa1\xa9\xb5\xf9Th\x91\xadh\xce\x14\xcd(\xf9t\xbb\xc9\x16\xf5P\x9e\xe9\x11\xad\x95\xfe\xb21\xf9 \xea\x8c?\xdc\x14\x84\xeb\xfbN>\x15dV\xa3\xaa\x8f}\x14\xc2\x12\xadi\xe9\xbcU\x90\xd1\xc3\xd3\xdbd,\xaf\xcc\xdc\x03\x96|\xe0\xaau\xa3c\x9e\x92\xf7\x80Y(\x92\xe9\xde\x99\xbc!!Q\xb5\xb9\xa8\xea\x12s\xc1\x80\xe7\xc9~\xa6g0\xc1\x0cXHb\x1fx\x01\xd3\x86\xb9a\xdfb\x90~\xeb@\xc3\xd9\x82\x13\x89J\x9b\x8cT\xb3\xb8 >\x91\xc9\x9f\x1e\xfc\xd7\xfe\x83e\x88\xb9\x9d\x94g{\xf8\xec\xbf\xbazP\xd3\xd0\x8a\xc1\xa15\xfdkzg\x1d\xed\xa9\xbd\x7f|\xc0\x1e\xee\xbbv?\x1fdP~\xf6\xeb\xc6\xa4wG\xa3\x95\x11\x9b\x97D\xb3U\\>\xab\xfdZ\xda\x0b\xe9\xe9\n\xcb^\x86\xa6C\xf7u\x1e\xfe\xbc/\x8e_j\xdac\x8a!;\x98\xb9^ \x0e\xfb\xf1{\xfe\x03k\xd0_;t3;M~%\xf8\xcc\x10\xb4:1q\x0d\xf5\x01\xef\xc5K\xcdpsL\xf5\x95\xf3\xc0\x15\x1f\xf0\xda\xb9\x0cA\x1b2Sh\xd2\xec\xa7\x0e\xf4\x01\xc1)\xe01\xdd\x12\x13\x84\x00\xb22q\xe1\x17A\x93@Z\xdb\xda\xad\x9f\x19V#\x86#\xf0\xf1\xee\xc2\xfb\xbe*\xc8l\x1d\x17\xf7);\xf8'/\xa0\xd4\xed\xf7\xd8\x89\x9ep\xd6p\x84\xce\xfc\x1d\xdb\x81\xe9Y\x80i\xcf^\xe43\x0cZ\xea'\x98\xca\xd0\x86B\x1b8\x02\xcf3Q\xffq\x19\xadi[\x1b:|\x84Q\x81\xb7\xaa\xf9t\x83$\x86\xfe\xef\xda\x9c\xd2$n\x92\x18c\xb6\xcf\xfd\xd8h\xe8\xa1\xe3h\x86\xe7\x9eO\x13\xbc\"\xc2\xff\xb9\x93\n\xbf\x7f\x89\xbb\xfbW\xfdu\xe7 \xbd\xdaC\xa3Kr5\x94\x93k=\x94Xk9\x98\xb0K\xa6\x82\xd2~{1\x94X\xeb\x9c%\xba\xd5e\xb3\xbd\x16}jSH\x9d\x88>\xb5\xcd~\x1aL\xf2{:\x94\x13\xeb\xb9\x18\xae\x16J\x97B&\xef\xbfz\xc6\xd3\xea\xbf'\xcb\x93O\x85\xef\xfd\xdd\x9f\xc6\xf7\xffy\xb6;y\xf0\xe0\xf3\x83\x07\x81\x17\x82\x97x\x9a\xef\xder}\xf5\xf3\xe6\x8c\xf5(k\xf7\x9e,\xf0\xf0\xf6\xec2\xb4(x\x03&2M\xe2\xc7,_\x7f\x87\xebGk\x00\xe0\x17\x9c:\x04\xef\x0f\xf2\x1d#\x87\xbd\xe7\x1f\xf8\xa4\x07\x94?\xaf\x8d\x8a(f\xcd\xf1MI\x16\x06K\x0e\xa1\x91\xec\xce\xdf@\xdbE\xc1\x8b\x00\xbc\x86a\xa7\xd2^\x08\xda\x83I\x14\x94\xc8i\xad\xcb(\xa9^\x96\x84\xa47o\xe25\x99\x07~e\x0d\xeeN\xfb\xc2\xb4sJ\xf6#?\x93\x14\xd3~1\xaag\xe2\xda\xc20\x05\xd1\x04\xd6\x9b\xaa\x86\x0b\"Y8\xf0)\x9a\xdc\x7fO\x16\x81\x913U\x0bk\xc5\xe1\xfe\x98\x8f}\x02\x0e\xd9A\x16\x1b\xbc\xa3_\xd9,\xcamW\xa4\x14\x8e\x0b8B\xb1\xdc\xdek\x81\xa1\xb7\xf7\x1c\"E`\xd8\xee)\xf3\x9b\xb5en\xa3\xe5\xca\xf1\xbe\xca\xed\x02\x85\xb6\x96\xd2\xae\x0b8\x86\xdc/BH\xa9 gL.+\xca\xb8\xdb\x01\x8e, =-\xec\xb5A\x15X\xe6v\x88\xc0\x18\xd4\x01\x8e>\x0c%\xae\xdc>p\xc5!\xd0\x1f\xc8\xad\xd7V$[6\x91\xc7\xac\x9d\xdd8\"\x03\x12\x90\x95?\x0f\xe1*\x84\n\xcd\xbb\x1c\x16\x029\xa1M\x9aR\xb6\xeb\n\x8e\xc1\xbfA\x91y.\xfc\x07\x19\x9f\xe8/\x05u\xf1o\x02\xc62/9\xd1\x1dV\x93q\x99\xf6_\x06%\\)\n\x8c\xc6\x88\x80\xee\xa9%OhD\xe9(Bh\xe3_\x850\x0f\x82\x88+\xad\xe0\x18\x96\xf2\xef ,\xbb&]N[\x0ddl\xa3\x11\xbb\x0d\xb6\x00/\x8c\x051l\x01f\x18 j\xb0o@\xe0j\xa4\xa5\xc6\xc5\x98\xd3\xa9\xe9\xa9\xa2\xdeZ\xe7W\x84\n3\xb0t\xc8\xfaE\xf7\xefEK\x1b$\xa4\xe4\n\xd3\xdf\xb8-\xc77\x1c\xae\xd6\xca\xb63\x0b\x84\xc6\x89\xee\xca+\x14R\xd3f\x96\x17\xa12N\x91\x1b\xd0\x9acT\x14\xb9\x94W\xd6\xea\xb7\x81\x03\xe8\xdc\xce+\x10\xc4l\x9c\xc5\xb6Z\x84\xfa@\xab\x005\x15iST\xc4\xf5**\xc9|3#\xfe\xd6C\x00\xf52\x96ytNk\xbc:\x9d\xd6nA\xa2h\xc1\x8c\xfd\xee\xfb\x08F$\xa55\x15>hU7\xcc\x9d\xe4\xb9\xb2$S\xb5'\x7f:\x82=\xd4U\xec\x85\xcdmn\xe0\xd7AG\x1cv\xf2\xa4\xd3\x15q\xb1\xe3\xd7\xd3\xcc\xe1\xb2\xbf[\x86\xe2\xf2\xe8\xca\xad_\x8f1\xb7\xb9\xf5K\xe1\xa5q\xd1\x88\xe4\x17\xd6o\xed7\x12\xdd\"p\xc9\xc6\xb5\x81\x95\x011\xbf5\\\xf8\xf7\x9ejd\xb0W\\\x80T$\xbc\xd7&23\xcfg\xcf\xe3\xd9\x8aL\xe0\x9d\x1e\xb5\xe3\x8b*O75I\x167\x13\xc8\xf5uf)\x89K\xde\x8c\x9b\xd2\x85\xf33;\\\xf1;')\xa9 \xbb\x8a\x98t\xf1\xf7\xdd6\x91-\x94\x16\xcd 6\xa8x\xf4\x93TE\xf0 \xbc\xd5W\xba.\xe3\x82\xd7H\xf45\x96\xa4F2n0\xbfG\xdd\xf7\x04b\xfd[\xf2\xa9.\xe3Y\xfd\xb2\xcc\xd7\xd8\xc8F_M\xde\x06\xb9.\x87r\x19x\xce\xee\x920\x81\xec0\x88W$\x9e\xa3\xa1\x87}\xd3<\x9b\xcdHQO\xc0\x8b\x8b\"Mfh\x8f\xf3\xe0\xe7*\xcfBP\x9f\xdc\xc4\xeb\xd4\x1b\xde/\xc3\xf47\xcd\xe3\xf9)\xdaF\xef\x98\xe3\xaf\xdd:\xdf\x0c\x8a\"\xe8^\x84G\xf6\x80\x91\xce\xb6-_K\x02_\xc5\x0b\xf2c\x1e\xcf\x07=\xb4F\xe1-\xc7\x19#\x0fH\x97\xe1\x1dcF?\xe4\xe8\xa42\x81\x99\xbe\xaa\xb8\x1f\xf9\x8b\xfa\xc9%\xc9&\xb0\xe8\xd3\xa5\xa0k\xb9\xc3\xa7\x08G\xf0\xaa\xaf\x8a\xfc\xd9\xaa4\x17*V\xa2^\x0f\x10\xf5z\xa0cp\xd0\xeeD5J\xa9{\xe6FcMZ\x1enm\x0ds\xf0\xed\xf6\x9f>\xfa\x02C\x1a\xf5\xcd\xaf\xa0Z.\xad\xeb \xdb\x1a\xec\xc0\xb0\xd1\x0e\xe8\x8fI\x93\xc29\x17\n\\3\xba\xf6\x87\xc1\x14\x95h\x12\xa7Q!\x99\xb5\x94 ^1\xe8\xa7\x85lv\x1c\xadI\x1dS\xa4\xe6\x7f\xb24\\6\xe5\xe6f\x1b\xe5f\xdeUnn\xacZ\nf\xd0\xd4Isk\xfb\x08T\x0dl\xfb\x16\x1a!\xd8\xe813\x88i\x9b&\xc3$\xb5\x08;\x8fH\x88\xabL\xb1m\x89\x003\xf8Vhn],\xdag\x98\xee\x04\xb7\xc3\xf0X7[\xf0.\x80\x1d`B,8\x82Y\xcf\xfe\xa2[\xa8x\xcd\xf8\x1d\xfc\xc0\xdfca\xd89\xfb\xf4\xcbm\x08\xb3 \x88\x10\xd6n:\xd7i\"\xe5\xe8M\x08\xbf\xdc\x062c6\xe9\xf8\xa78\nb\x887I;\xc4\x97\xfd+\xe0_624\xe5\xb8\xed\xb8A\x0b.\xa4\xa3\x8b\x81\xa0W]\x13\x89\x94`\xfeqH2h#*\x8b\xbdT\xb9\xe0)(\xe6\x1d\x1d\\\xb5\x9bU;\x9b\x18'\xd1\x9a\x94K\xf2\x82\x90\x82\xae\x98E`\xba\xb5\xc5n\xe2\xad.\x98\xac\xdci|\x16\x04!\xcc\x18]\xa2\x84J\xd6\xe2\xba\x9b\xa9D\x96M\x08\x1eV\xf3\x02\xfaM\x9fG\x10\xc5Y\xd6i=\xc1XTc\x0eu\xeb\x19\xd9z%e\xf7\xdf\xc8\xd8T\xfd\xf5+\x1c\xd8\xf9\xd0\xadl\xd2\\\x90\x8e?&\x1b\x9b\xf0Qgei9+{\xd9\xd6q\x1d\xec^\x82\xe2\xbc\xec8\xa6O\xcf\xec\xea\x9d\xfe\x1d\xa2E\x1c\xe9wC\xa9q\xd2\xb1]+\xa3\xaa \xb3\x10\xaa\xa1})e\x90\xfey\xe2@\x84\xdd\xb4}\x9bi}\xa6,h\x19\xc9\xa5{\x1d\xcf\xca\xdcO\xed\xa4e\x94.E\xe0]\xe3\x87j\x0bR\x03\x0d$\xf2\x0e9\x1dv\xec\x18P\xb4\x04\xea\x8a\x88s/\x0bac\x10\xb3\xb4O%!\xd64d5\\\xfdoJ\xf6oB\xc9\x9a\xa4\xcd\xa3(\x99i/\xd0\xd1\xc6z\x1aa\xda\x08\xd2\xb1qC\xd9\x122d\x06NK<\xdd\xb4w\xf4:\x9f\x93T\xc0\x9d\xedjZ\xc7\x80\xeaN\xbbY\xe5\xed\xed\xbbx\x14\xe3>~\xaf\xc5\xff\x8f\xef5\xfd`\xcc.*\xd2T@\xdf\xf3l\x95\xa4\xf3\x92d\x13]\x8cq\x16e\xb0v3BM\x86l\x95\xe4\xe1&b\"\xca`\x0b$*\xca\xbc\xce\xff\xca\x9fgp\x8c\xbbe\xd3\xde-\x99R\xab\x89P\x8a\xc6\xc4W\xec\x99\xbf\xa7\x04\x8c\x08|\x12\x89\x99i\x94\xcb\xc6\xd3T\xb5\x84e_Ok\xc3\xa5V\xab\n\x1cAB\x913\x13\xa3\xd1\xba\x19t=\xf9~u\xc2\x19\x0fY\xfcm\xf8\xcbC\xdd\xcbJ\x98\xd7i-\xe8RA\x90\xb5\x0d\xcfTM\x91 \xf2\xae\x17i\x9d\xb4\xf6\xcc\xb0M\x86o-\xf3\x9cR\xc1\xdc7\x9a\xba\x81\x8d\xe8t\x1c\xc9I\x08S\xf3hd\\\xac\x11\x81\x89\\\xb8\xb9\xabnP\xf5\xb8$\x19\xc6\xc2\xda\xb1\xa5\x1bB\x1b\x13[\xfb\xa0\x08\xc5dJ\xd4t\x03v\xd5\x08p\xa3\xe3L\xee\x00;K\x17O\xcb38\x86\xc4\xa7\x7f\x0821a\x8fq\xbd\xe8\x83\xc1V\xb8\xe7u\xe2\xcb\x85f\xcdl\xd2t@\x91\xae_\x7f{\xc0\xa9;\x8e;G\x17\xc5\x97\xb1;\xa7g\x81\xd6\x19FL\xccE\xed$\xd9\x04\x19\x15\x92\x81$S\xd3,*\x7fS\x9ei\xef)\xe4\xf0}c\x87~\xef\x1e\xf8\x0c\x03\xf2\xb3\x10|D\xb8\x86lN\xcb\xb3\xe0)\xe4\xbb\xbb\x01\x0b\x911--\xd7\xfbb\x1a\x18\xe0E\xa1\xd7_eu\xd8\x8e\x18\xb3F\x0e\xdb\xaeu\x03A\x945\x82cfi4Q\x9f\x1e\x888\xc9Hu\xd0\xafE\x11\x1cu6\x0dN\xfb\x12Ui\x8dA\xa8\x05\x0f@\xdd\xc9#6\xa4\x98j9\xcd\xd0\xa8\x9eE\x8e-Y\xfe\x85\x1c\xad\xd4\xd0\xe8?\x04\xfalxg*\xc4w\xf4V4\xfa\xb7\x9b\x99\xf7\xd9X\x06o\xf8\xd6\xe5p\xc0\xf1\xf9\xdf\x8b5T\x7f\xfd\n\xdc\x84\x10\xc3\x1e\x0e\x89aZnB\xf0!\xfbZ\x8b{\xc1\x88\xeck\xe5;\xc9\x89<2q\"\x99\xff\xed\x00\xf6\x0cr\"W<\x03Y\x87\x99\x94\xa2\x1bKs\xab\xf2*\x03\x9b\x1a\xb7%f\x0b\x9e\x85\xb0\x08\xa1\x08a\x1e\xc2\nMF\xd7h\xbdv\x03G\x10\x97Kt5T2m\x1d\xa0uYc@!\xabL\x0f\xe8!\xda\xfaI\xf9v\xfdn\x97Z\x141\xf6\xeb\xd29\xf2\x14\x9e.O\x9f\x06P]'L>\x14\xd9, \x86\xce\xb1\xd11LW\xe8\x90\xd5S(\xce\xe1\x08nx\\\x99\x93\xacNJ\xf2\xa1$\x84\xa5\x18\xbe\x11\x86\xf5,\xb50\xad\xf6\x8f\x0d\xa9\xeaWYM\xca\x19)\xea\xbcd\xc9\x86\xe9\x9b\xaa\xc8\xb3\x8a\xb4^\x15\xf8\xaa\xad\xe7b\xd9Jo4\xb22\xcbGl'\xd2\x80\xa10\xea\xd5\x8b\xa4\x9a\x95\xc9:\xc9X~\xbe\xcc\x8d{\x92\xa6~\x06+\x90n\xe9O\xd9x\x83\xdf-\x1a\x98L`\xe1\xf6m\x1bh\x13(\xdc>\xebCu\x02s\xeb\x97\xb7!\xda\xce3\xf6[\xa6\xbe9\xbd\x8e\x97KR\x06\x0e!\xf3\xa0 {h\xadKe\xb15\x86\xf2d\x8aY\"\xb2\xac~\x1bv%\x8cN\xea\x0d*\x8c\xael\x863\xa2\xb0\xe1\xac\xdd\xc0\xd6\xcf\x80\xe1\x1a\xad\xab\xbaL\n\x11\x85\x14\xedl\x06\xadcD\xb1^\x12\xe1&\xfe\xd6y\x13/\x99\xe3/\xc9\xea\x10vJJ\xc2\xda\n|\xe6\xdb\x99\xa9\xcc\xe7\x12\xc1\xcfW]\x91\xf8\x97|Y2\xf4\xd6C\x16\x9f\xaeQ|Qn\x8a\xda\xf7X\x87^\x08K\x97\x19X2\xad\x8e\xc9\xac*\xb5\x18\x96L\xaaF\xc6\x960VI\xebb\xd8\x9f\x8a\xb8\xa5\x93j\x8b\x81\xc3F\x0e\x0d\x93\xb0p\xb9X\x9e\x14V\x9d\x99\x1f\x8ce\xaa\xfe\xbdX#\xfd`\xf2A&@s2\xef\x19O\xe6\xbd\xf6\xc9\xbcg:\x99{kjSE1\x0b\xe97\xf1z\xc0+\x809d\xaf1\n\xbb\xb9\x16\xc6\xe2\x8d(Yf\xe1\xb2\x0c\xb9\x9a\x9dG\x08|\x94\x89\x1eV\xfbFX\xed\xb7a\xb5?\xc4\xc5\x80\x8a\xdb\xe4\x13\x99mj\x16rZa\xcf\x86\x891#\xc2\x04I\x8ay\xc7\x86]\x1aDB\xf0\xfa\xe7\xae\x87O{G*}\xbc\xa9H\xf9\x92\xd4\xb3\x95g\x8d\xc1&V\xd4\xca0\xb0%\x9d@9\\M\x0d\xcaeI)\xac,\xffP\xa8\xb4\xdb\x10\x12\x831\xb7\xf5\xd6\xde\xac\x1f6\xed\xb6\x9a\x1d\x1d\x94\xe6k\xbb\xe4*\xd9\x0b\xfd\xdbF\xcd\xc1\x03\n\x1c\x03\x95\xd4\x0d\xa0\xcd\xb1-\xbe\xcc\x1f\xe2\xa5\xbeV\xd2n3\x87c\xf0\xf87\x1e\x18\xcd\xa4c\x96\xec\xe7\xe0m\x03\xe4\xe7\xf9\xba\x88\xeb\xe4\"I\x93\xfa\xe6u>7\xec\xe2\x8d\xc1\xdb\x96\x96\x05\xbe3\x92\x12\xc6\xaf\x90x\xb6\x92\xdd\x06\xf4\xa8\xb0s\xfa\x8d\xb6\xdbNb\x18\xd8l$&\xc5Z\x12\xc7\xf4[\xdaO\xa3:^Vp\x0c3\xfeg\x00\x13\x98&gc\xcd\xc0[\xce\xb4G\xaa3\xad]\xbb\x8a1\x1cX`\x1c\xfc\x8f\xddF\x0c~\x06\\\x97\xcd\x00\x9e\x17\xaf\xe6\x81\x9f\xe2\xfd_n\xdb\xf0\xa2\x0c\xa3\xc6\x04bk+:W\xedn)PDv\x1b\x11\xe7\x98\xed\x8d\xc2\x18\xba%\x8a\xa0_\x86\xfd\xd2-\x12q\x9c\xfd\xd9Z\xe4\xccL\xdeE\xb1\xf9wQ\x8c\xdaLgg\x01\xd0\x7fwwCH\xa6\x9e\x07\xbb0\x83]|D\xf1\xa5\x18n\x83\xa9\xa9\x9b\xb0D\xf4\xecK\xb0M\xfb\x8aP\xcc\xa4\xa2)\xed\x8a\xa2\xa4C\x04a\xacz\x04s\x16\x8a|\xfcp\x81wK\xe5^:L{m\xeeyA+\xb7:\x9c\xd3\xde\xcc\x89\x9bAQ\xe2\xb31\x17\xc6\xba\x06\x06Z\x7f\xa9\xd66;\xfb\xcaj\xb0\x10\xea\xa8\"\xe9\xc2\xe0'\xac\xde\xb2\x1d\xf6-\x10\xd6\xf1%9aL\x0c\x1cQ\xb2\xc1\x1e=+\x92\xeaC\xbc\x94\xb4\xa1\x92\x7f5\x95\x9d\xf4Vw\xc0\xb2\xea\xf7\x1dj\xce\xd4\xe1\x1b\x9d\xf63^\xb3hMh\x80\x1a\xd9h\xe2v\x07*t8?s\xad\xd9\x85Ic`\xa2\xb5\xa5\xe1@\x96w29$\x99\xe9>KVJh\xa5r\x9a\x9f\x0d*\x9c$\x81\xab\xb47\xf4\xc0x\xb5l\x9a\x9f\x05\xd8Xs\xf8V,,\x8d\xb9i\xceMO\xf0\xebi\xa2W\xf2\x9b\xf9\x0e}\xc3q\x91T\xba`\x81=\x1b\x0d=\xe6\xffK\"\xfaV \xf8\x8f\xd9\x03nK\xd9\x9e*=K\xfa\x84Q(\xf6\xbf\xd5\x9a T\\u\xdf\x7f\x93\xda\xb0\x02\x9a%\xd1\xbalj\xd6z6\xc6}\xa5g\x89\xca\xb4\x12:\xd7CMW\x0b\x16.\x8d\x1d\x1a\xfa~\xba\xf03:\x17*\x88\xa9\x13\xdf\x9a\xa5\x19w\x07\xf6\xe4` \xce\xf1\x7f\x86\xa6\xe7\x0b\x85O\x85\xd14\x1f\n>\x89*2\xdb\x94I\x9d\x90*\x04\"\xee*0JPV\x7f\xb8)\x08{\xca\x14\x08\xcac\xc3I\xc3\xa4\xaej\xb6\"&\xd9\x8c\x89\x9c\x9a;\x11m\xed\x8a\xd7\xee\xdf\x93h\xab\xcf\x98\xdc\xcd\"\x19\xfcT\x1ax\xf2\x05\xd6\x92\xea\x0f}\xa5\x82\x81\x87\x0f\xf4\x87|~\x13\xa2\xb6\xb8\xbc\"\xa5a\xf2s\xaeP\xa6U\xfe\x1a\x97I|\x91\x12\x83S\xed\n\xab\xae\xea\xdapE\xb1\xe4R\xaeP\x93\xe8k\xdd\xb4k\xfd\xb0I\xd2\xb9\xb1\xb2\x08\xe2\xf5)J\xaa\xb7\xcfN\x0f\x03\xbf\xd6\x1c\x147\xe8\xaeO\x1b~\x0b\xc7p.\xef!\x95\x88\xe8\x86 \x83\xef\x8c\xc4bS\xa6\x13cd\xa3YI\xe6$\xab\x938\xad&\x80Z\xf6Ut\x9d\xd4\xab\xe7\xcds8\x06/\xc9f\xe9fN0\x0ca\x15\xaf\xc9}\x16C\xcc\xd0h\xe3\x08l85gy~\x89q\xdeuF\x84\xfd\xf9\xc5\xa8\xfd\x7f\xa7A[z\xb4\x07!T\xb2B\x0fS\xe1\x08*\xca\xf4\xf3\x1a\x12\xed(=7\x80\xf2\x83\\\xaa%\xa9%\x91}\x1f_\x07CQew>\xa8\x91U\x9f\xfb^\xc3\xa4P\x89'\xc3\xd0\xb1Y^\xc3\"\xdfds\x9d\xab\x10\xed\xfb5F\x9e\x94\xd4C\x0f\xbeWmm\xd3k8\x86_na\x02\xaf\xf5\xd5\x7f\xc66\x87t1o\xb0\x86\x10\xd7\xf5\xf3{\x17m\xca\x14v\x8f\x8c\xa6\xa1\x83\xaa\x01F\x93\xcc\x01\x03$\xcd0\xdeT\xb2\x8dm\xbcU\xec\xec{c\x18\x9dF'\xf1\xc6pdr\x1d\xc4\xcf}\xcc\x0cB\xd8\xc9\xa4\xa5\x8d\x88(\x10ql\x0e\xe1]\x1fr\x12joBx\xc7\xd7\x80\xa2\x17J\xc1?\x07Q\x9d\xffT\x14\xa4|\x1eW\xc4\xc7\xa08G\xb0d\xca%=~\xbc\x97*\xfej\xfa\xe6\xccT\xb3\xe4\xd8\xce7b\x14\xa3\xbb=e\xa7\x0ch\xf7\x02\x8e\xe0\x99\xe2\xa9u\xea\xbfR\xc8_\x104\xcf\xdf\xb7\x9ek\x9a{1B+'4\x8a7S\x12%\xd9\x80-ai\x89\xb3\x85\xaa\xbd\x8b|~\xe3\xc9\x18\xb2\x8ca@\xbc\x8b\xd5\xbf\xa3\xc6h_Z\xb4-;\x11\xb5\xd0:\x8a}\x94\xc5k\xfck9e\x7f\x9fQn\xce\xf0>\xc1M\x1e\xb10\xadX\x19&p\xe9\xb3\xbfCx\x11tn;D\xc2\x96\xeb\xb8\xcc|\xef\x9d\x80+\x8f\xd4\xcf\x9a\xc6p\xfdI\x05\xf1\xfa\"Yn\xf2M%\x83\xdb\xd7+\x02<\n3\xee=X\xc5\x15\xac\xf3\x92\xbe\x893\xc83\xd2(\xfa1;\x00~\x91!\xee\xf7z\x88\xb39\xbe.\xe2\xaa\"\xf3\xfbI\xa6|\x8b\xba\x8d\n\xe6 \x8b#\xc6\xfa\x848\x83?$\xd9\x1f\xd8\xdb\xc8\x0bB\x11\\\xebh8\xf6bG\xd5%u\xeb\x8a8\x86\x91\xb9\x1bsCy\xf2\x85\xbd\n\x8cCHJ2\xa7\xbfvH\x84\xb7\xe2'\xeb\xa2\xbe\xf9+3\xf9nH2\xf7\xe2|/>h&\xd8\x06\x06\x856\x9dgQ\xe6W\xc9\x9chI\xb5:\x99\xb7]L\xf3\x98;\xa8@E\x8ev\xf5M\x81\x88\xa2\xd1@\x976\xaf\x0d\xe0[@I\xa3:\x90.\xdf\xcdK\x03d\xa02\x058M\xb48\xec\x85;\xb6vqA\x84\x97\x8c+\x1c\x91!\x041\x18\x15s\x80l\xf2\xbd{\x90Y\xb4\xce%\xf9\x871\x0e\x8d(rl\xd6@h\"3\xc1p-E\xa9\xfcj\xb8\xa6\xcdz\xc4\xd9\x9c\\\xa7f\xa6\xa4\xf1\xc7\xbe\xa9\xc3/\xcc*@\x0f6u\xe8N\x9d\xa0\x9d\xf1;\xcem\xd2\x9e\xae\x9b\x9e~\x0c\xe1]\xc0\x83\xef\x9ct\x1e\x07\xe2\xcc\xc3M\xda\xb6\x80\x97\xe7a`\xf1\xbd\xa43\xfc\xa9\x9f\x8aM\xf9~l\x98/q\x9c\xc8&\x8c\xde\x18\xa0J\x96\xbb\xe0cP\xfb{\xc8\xdeb\x18\xec&goE\xca\x04M\x8b\x06l\xceoC\xfa\x99\xbe\xa7\xe6\x10~\x8ec\x82#\xf8\xa9\xbf6\xfd\x13\x9c\x0d\xee\x9d\n\xe8>\xc3\xc1\x02#\xa17\xf6\xab\xec\x7foHy\xf3\xb6|\x99\x97\xeb\xc0\x7f\x17\x84\xf0\xeew\xed>Z?m\xf7\xac\xcama#\xb20\xb9\x97\x9e\x80ng\xbbMV\x06)/\xdbo\x14K\xa7\x1b\xc5\\\x11\x02\xcd\xb5\x12'A\x15\xa4\xbc\xec$TB+\x99!\x12\xffXp\xe6\x03\x86{\x15\xdf\x02J\x92\xb6:\x84\xa9\x87<\x9e\x87\xf7\x85~\xc9\x82\xd3Rv\xf1\xc7\xfc\xbaa\x17=6\xb0\xca;\x0bD\x9c\xb7\x81f\x1cj75\xcc\x03N1n\xbb\xf9\xfd\x8c\xc7\xd94sj9\xc5fDi\x97,\xae\x14\x91\n*\xc6\x8dL\x85*\xcd@6\xa59*\xdb\xd0\x0d_!c\xe9\xe5\x01\xfc \xee#\xcf\xe6\xa7\xec&\x86\xce\xb2\x9a\xaaUL>\x93;io\xba\xb2\xa1j\xbawF\xc7'\xda\xdb;\x0b(1\x14\x8dz\xbfxM\xcfn3o9zL\xcf\x98\x87\xc7\x83_\xfc\xe9\xdfo\xcfv\x83\xdb\x07K\xd5\xcf\xe3)\x0bs\x81\x862> \x9e\x06T\xb6\xd8T+\xbf\x9c\xee\x9f\xd9}6\x0d*`?\xdd\xe6f~\x16]\x89\xfd\x85\xbcq\xf3sJ\xac\x97\xa1b\xc2\xed\xaf\x86\x8fo\xe0\xc4g\xc3\xef\xf3\xa5\x0d\x9b\xfd\xb3\xb2\x13\xc9\xfd\x17\x99\x1c\xe6\xd6\x0b\xc1[\xda\x02\x81\xd0\xa5O\xa5\x97j9\xe8\xccd\xba\xdb\xd4\xf7\xd0\xb5\xc6\xb2m\xac;\xb9\x1c\xb1\x85\xcd\xae\xef\xc2\xe2\xcb\xd6 ]\xca\x95<\xb6\x19\x93l\x8b\xdfPj\xbe\xa9-\xdf\xd0\x13\xe6\x9d\xcf\x1dLgy\x8a\xb4\xf4\x9d_\xb6\x1f\xd8F\x9b\xe0\xbe[\xe5\x15z\x1e\x96\xf8\xd7\xf0\x17\xcc\x85\x8e\x92s\x14T\x1c\xfap\xc9\xac\xcb\xf1E\x84O\xf3\xe97H\x9e\x138\x86\x9cb\xf4\xe4\x01\xe6\xd4\xf0\x13\xd8\x85\x18\x9d\xf0\x82\xe9F\xf5\x00\x84c\xd8\xb4\\\x99`b\xc8\xbaz\xeb\xa7!hr\xb2\xdf\xfa\xe8\x9bk\xa7\x15\xe3x\x8a!=8H\x8e\xc2\x85\x0b\xc8\xdb\xc7z)R\xb2XX\x8c.j\xe5\x03\xa8E\x97\xb7}oT\xf3 T\x98\xf4K\xfc`;\x0e\xfd\xad\x8cma\xf4/\x8a!1\xc3\xcd\xa4\x83\x9b\xab\xba.\x06p\x87\x19\xf4\n\xdcL\xe4_C\xf8\x96\xe27\"\xb0\xbb\xad\xf6\xcc\x82\x99]\xac\x9caz\x17>\xc9\xae\x99+\x96\xf6\x89\xf0\x1b\x17&\xc6\xf2\xbfy\xf80E\xdd\xc4n\x98e\x8di&i\xa2\xe6nU\x03\x82\x7flH\xf9\x95V\xc86{ &\xb3\x8e\xbd\x8ep|\x08\x03\xf6\x17\x87\xc0\xce>w{\xbbw\x0f\xbc\x8b'?\xbd\x7f\xf5<_\x17yF\xb2\xda\xcf4\xbe\xa7:\xcb\xea\xbc\\\xbf\x88\xeb\xf8_\x12\x00~\xc64\xc1=\x0b\x16F\xa5\xe8\xd8\x11<\xf8\x87D\x13\xfa\xcbiC\x89-a\x1ee\xa7\xe3I\x7f,\xe6o]\xb6\xab\x1ei\x1d\xfc\x05\xfe\x93\x03\x0d\xa8\xbf\xee\x9c\xc5\xe8\xcb\xf9\xf9\x90\x12P\xc4`\xd2\x8a\xc8B-\xf9\xed\xe3q\x81r\xff\x05\x08\x8e\xb9bC\xa9\xcdu\x10*QU\xdf\xa4\x03\x95P/K\xd14\x1d\xf6\xae\xe9\xabr\x86%\x18\x8c_g\x1b!8moZp\x16\x13HP?_%\xeb\x82\"\xd4\xe0\x17|J\x13\xd8\xd0ol\x990X6\xa0 \xec\xec\x1b\xab\x99$\xcb!\xfa\x9f\x0b\xd2\xaf\x0bL\xf2\x1f\xc9\x98\x99\x19\xb06K5\xcc\x88l\xfa\x91\x0e\xbcM\xc6mF=n\xdb\xa5\x04+\xd2\x99\xb6\x8b\xe2\xcd )\xde*\x86\x8d|Op\xc3\xb1\\me\xa4\xb4\x0f\nq\xca\xacY!\xdb\\$\xc5\x8c\xa9\xbc}?\xf3\x86\x0fAQ\xf8n\x19\xb5\x15E\xc1-\xe9\x98r\x95\xf7\xe3\xe8\xce\xcew\xa7\ni\xb7\x0f\xc5\xb6\xe3\x07\xf6{\x82f\xb4\xf0\xd0IP\xcd\xc6\x1dJ\xee;e\xf4\xa1\xd0\xdf\x1e\xad'\xb7}U\x0b]\xdf\xa9\xc7S(K\xe6\x8c\x12\x9e\x9a\xbf\xec\x9ad\x11\x14\xbb\xa6g\xae\xdd\x81\xeat!\xc1\xb0\xff\xa8\xe3\xe5\xac\xdf`[t\xe2\xfd\x0f\x14\xfcM\xed\xfd\x9c'\x99\xefi\x9c\x13\x95w\xd0E\xd8_]#\x9b\x0cid\xe3F#\xdb\xd5\xb9\xb2[\x90\x17I\x85\\!\x99S\xfc\x88g5;\x01\xf3P\x1f\xc3\xdeb\xb8i8_\xb5VF\xf5X/\xb0Krcc\x04\x9cTl\x16M,3\xfd\xb42D\xcc\xafk\x88\x1e\x00W\xeb\xda\xe7(\n\x87\x13\xe6\xd6\xb2Ku\xe2(\x1c\x8e\xe1h8\x8f\xa0\x7f\xe6\x88\xc2\xa2\\2\xa6\x92\xb15M\xb6\xdc\xf1{lc\xca;/7Qhrv\xc1\x81\xa4\xf1\x05I\xbb\xe3`.\xf2_e4\xd1\xe0h\xd6q]&\x9f\xbe2X\xc6&r\xe1M\xb2,2 \x1c\xd3\x83\x84\xb9\xfbQ\x06\xef)\x05U\xcdX=\x0c#2a\xaa\xce\x10\x7f\xe9\xc70\xe0\x8e\x8a``\x8a\xb4#\x9b\xa7\xbe\x90`\x13\xee\x1c\xdb\x8ccB\xfb73\x9e[\xc0\x15\x1c`\x0b\xcaBkn\x02\xc0(\xed\xb3-Q\xc43\xf2\x82\xa4\xc9:\xa9)\x93\xee4\xfd\x94O_\x99\xf8o;o\x0f\x83\x15\x18RX\x0d\xcc\xbeH\x8a\xd1\x93\x9f\xfd\xcbM\xfe3\xc6\x0eu\x9dh\xde\x0d H\xeb\xa1AE\xc7\x1d\x92\xbe}\xc2\x1c\x92\x1e\xe9\x1d\x92\x985\xf9#]~\xff\xd4i%\x05\xec&\x0f\x8e\x7f?=\xfb\xffv\xbe\xb9\xf7\x07?\xf8\xe3n\xf8\xf4\xc8\x93\xf7\x19\xdcp\xb6?\x15\x8d&~L\xa7\x0f\xfe>\x8d\xef\xffs\xef\xfe\x93\x8f\xf7\xa3\xf3\xff:\xdb\xfd\xe6A\x12\xd5\xa4\xaau,\xd7\xb6~\x01O\x0e\xf7\xb7\xb7\xd1?\xd8\xfe\xd3\xc3/0\xefo\xbd\xfa\xb7\xd4\x8a\xca\x00\xa9f\x95\xa6\xdd5\xb5\xec[ a\xcc\x9a\xc1\x84(\x96\x08\x95\x9a|(\xd8\xe6`\"\x14\xb3\xdb\xef\xa2\xef=\x8bw\xa3\x86\xcbbtR\x8c\x84\xc2\x9d\x18\xdc{\xe7\xed1\x16b\x8c\x06\xdfeLx \x80\x89F[q\xeb\xd7\xd4\x10n\xe4\n\xb3-\xdc\xbb\x07;;\x1d\xfd\xea\\D\xc8\xd2\x7f\xb8\xee\xc7\xc6\x8aC\x98z3a\xf6\xac:\xfd\xde\x9c\xb2\xf0\x00<\xb6\xcfP*)\xe5\xa6l\xd1\xbd\\]H\xe3\xb4E\xdb8\xad3\xf42P\x14\xd8W\xf4\x1f\x16\xd3\xa6s}\xd5\xc0\x0bG\xd5\xfc\x94a\x7f\x8e\xc1_il4\x06X\x13\x19\xe0&\x83$\x1bN\xde\"8\x98\xf9t(\xb6$p\xa4^O\xb3\x01{\x0f\xb4\x07\xb0\x9d\xd3R\xa1\xcb\xf3\xd6\x7f\xfel\xbb\x10\x03\x8e\xfd9zN\x0c\x9b\x9b\xb0!X\x9bCy?.\x92\xffEx4\xcc8\x00\x0f\x17\x93\xdf3\xf2\xe0\x98\xfeB8\x19\xc8\xeb\xf0$\x08\xc1c(\xd1\xab+.\xcf;\xb5\xd9\x9dp\xaf\xb6\x08\xc0\xa6\xd6\x1e\x9e\x1d\xa8>\x18\xcc/^\x8c\xde\xce\xf2\x80\x8c\x01\x1aW\xc9L\x8c\x86\x85\xccp\xfd\x1e\x14\xae \xc1@\xc1\xf6[\xcfnAuYT\xc4Uu\x9d\x97\x03a\xcatE\xc8\xb3\x8a\x7f,\x0buA\xd9\xa3\xca\x01z\xa2\xc8\xb5\x8a\x9e\xa9w\x8ep\x04\xde\x0f\x14\xfcN\xf1\xbf\xbc\xe5\x81*-R\xae>R\xa1\xe0r\xf9\xb9\x87a\xdf\xe9\x06\x8eVq\xf5\xf6:\x13'`{x\xb9-_\xb2d\xb3 \xcf)Bi\xfa\xdeS\xa8\xe1{8\xf8\xf6\xd1S\xd8\xdd\xad\x03 ,\xda&\xf3\xca\xa1t\xff{\xd8\x7fD\xb9\xb1=\xc5\xf2\xb1\xe5\x17\xd4q\x0c2\xab\xef:>:\xbeR\xb3\x8ebJ:?\xe4l\xca\xb6\xb3V\x91\x18\x8e\x00s\xce\xd5Q\x91\xc6I\xc6>\xa7\x9c\x1a\x87\xdd\xac$qM\xfcl\x93b|y\xca\x0b\x96l\xda%|/\x1d\xb8\xe8\xdc\xcb@UV\x91iy\x86\xf8\x98\xd1?\xd8\xef\xee\x92sS\xe9f\xcd1)6)\x97\xa43\xfe,\xec;\x92\xa2\xba\xb6IC\xd9\xe1\xc3\xd9\x0d\x99T\x7f \x9d\x9b\xd6\x03\x81\xd6\xed\xc6\x0e\x96\xeb\xa8\xb3\xa5E*gVDk\xfa%r\x9cS:\x1d\x83\xe8\xe5\xe7\xedE\xf8\xfc\x99\x8a(i\x9a_\xbf\x13\x18\x8c\x0fw\xcah\x16\xa7\xa9\xdfEo\xba7\x18\x11 S\x0cv\xbb\xb37b\xc3\x0fy\x809LK&\xcd\xecBLp\x87D\xbb\xfa\xbd\xa0\xcd}\xef\xdf\x8c\xcd)A'\xd0\x16\x9aS\xdc@m\xa7\xae\x95^#\xc7\xe0g}\xc1:\x0b!\xd1*\xc0\x18\x8c \xbe>\x062M\x10\x9f\x15\xad\xb6\x84\x02}\xc5k\xfc\xff\xec\xbdk\x97\x1c\xc7\x95 \xf6]\xbf\"P3KU\x0d\n\x8d\xee\x06@\x11MAt\xa3\xbb\x014\xd4\xe8n\xf6\x03 \x00a\xa0\xac\xcc\xa8\xaaDge&\xf2Q\xdd\x8d\x11\xe6\x90#\x8a\xc2\x83;\xb3\xde\x91\xa8\x91=cy\xd6$H\x00\xb3^\xdb\xeb\xb5\xd7\xf6\x8e\xf7\x1c>\xd6>Gs\xa8\x99\xbf\x80?\xb0\xfe >\x117\"2\xf3\xde\xc8\xac\x02 R\x9c\x1d\xd59\x12\x1by\xe3\x1d7\xee+\xee\xbdqFcp[\xfcSc\xeeB\x81M\xe2o(X%\xf9B\x8e\x97\xbe\x9cjS\xf7\xf8a\xda\x0e\xada4\xd6\xe1j\xd2\x1b^\xf7\xebc6ms\xc2#v\xf4\x88\x01\xe8t1bT\xde.\x01\xbe\x90\xa6\xfe \x9cDs\xd4\x18\xca\xf3\xcb\xa6\x0f\x13\xd2H\n\x88\x9d]\x0foX\x06\xc6\xd1\xc0<.$\x95F'A\xfb\x8b\x93\xaa7\xa8_\xc9\xb1X\xce.|Tf\x17f-\x946\xc0<e\xbe\x9e\x9e5_O\x7f\xc7|\x9d\x9b\x9f\x97q\xc5G\xf5\xc0\xe4\xa0\xd8\x82\x80\xb2\xb9\xf9W40\x12\xd8\x0e_\xe7gO\x96>\xcf\x9d\x9eg\xb2\xd9\xef\xb1\x97o\xb0\xa3\xe2\xcb\xfc+\xecG\xec\xe5\x13\xec%f\xea\x9c:5\x7f\xfae\xd3\xff\xa9\xef\x9c8y\xb2hb~\xfe\xa4nbn\xbe\xdc\x06\xb4\xca^b/\x9f\xb07\xddND\x0bs]\xb9\xb0/\x9f:u\xe2e)S\xcc\xcd\xce\xcb\"\x1d\xf6\xdd\xef\xb2\xb9Y\xf6#\xa6\xbe\xa0\xb5\x97; C89k\x86\xf0\n\x19\xc2\xdc<\x19C\xf3\xd0:\x0d\xac\xc2\xce\xd5\xddh\x14;ns\x14n\xf5\xcd6\x8aaQ\xefV\xdd\xc5Cd\xbdr\xa0\xe2g\x9cD\xf1\x02kE\xd5\x0c{\x96fI\xeef\x91zH\xbb\xf4\xa1\xe8\xab\x16\"4\x85b|\xdfb_VaU3/\x16C \x1bTS=\xfe\xcf\xe6g\x8f\x0f\x8a\x16\xca\xf7\xc4\xd5\xc50\x97\xb2\xad\xadsK'N\xbf\xf22J\x1f\xd3\x97i\x89\xe1m \x8a\xbd[\xe7\x96\xe6\xbes\xe2\x95ib\x8c\x88\x90\x19uY\xeb\xa8-\xf3\x04\xa5\x13jh\xcf\xd1\xcd\xc4+\xe6j'f\x1e-\xf5W\x8b\xc0a\x00f\x95\x9eo_\xf5\x0e\x02E(6P\xbe\xbdF\xb7/l\x9f\x9e\xc3a4\xbe\xfa>\x8f\xbe\x9b0W\xb5\xbd\x93n\xfdY\xe9\x04H\xef\xc8P\xbf{\x02O\xb9H\xc7\xac6/;\x9b,;\x99<\x13\x19\xf9\xf8\x1a\xe33\x03\x9e\xed\xf8#\xde\xee@\xf5\xd2\xbf\x17T\xbc\xfe\x11x\x19\xcf\xa2!Vt\xa6\xe2\xbb\xcc\xf62\x03\xe7@\xca\x9f0\xb0\x05\xf9\x97\xfcc\x9aY2\xb5\xf0A\x97\xb9\xf5t;oC\n\x97\\\x12h\xb52G,~f\xba\x02/\xf6\x0fhp\xf1\xef\xa9\xea\xfb\xd2\x80\xa0\x0b\x1e\xf1\x85\"\xa03\xe3\xe8\xd3\xd1\x01\xf3\x91\xfag\xd6\xe92\xc7\xcc\xb4\x81\x07\xa5\xb2\xe9z&#\xad\"\xe94\x13ef\xb2\xca\xbc\x083E\xbaDSm\xc9\xd0\x02`bA\xc5\x18\x14\x1c=\xda|\xe7);\xbe\x1e\xdcP,.\xb81U\x87\xba\xc8\xb4\xe9\xfeX\xad~\xa7\x7fc\xf5\xe8W4\xf1\x8d\xd4X\x96\xcaj\\\xf6\xb4\xc67M\xd2\x8c\xba\xe4s\xb5{\xde/v\x88\xc5\xd3n\x90\xdc\x9c\xfeL\x1a%Y\xbb\xd3e\xb1\xf9K\x06\xea\x95\x9e\x88\x14{\xf7=\xd8\xc3c\xc7\xeawM\x0e\x04v\x8c\xc5\xd3l\x98\xc1\x8e/\xd8\x99\x8c\xed\xbb\x1e\xdc\xe8\xb2#N\x9b_wotY&\xff?\x9c\x8c\xdbZx\xd14\xa8\x90yi\xfa\xfd\xbb\xc5\xb1\xab\xc0\xee\x96\x1c\xa6\x8c\x7fR\xde,kHu\x9c\x15Y\x17\xcfT\x1e\xce\xbaki0\xadm\xf0H\x1bH\xab\x95\xa8\x8a\xef:\xffV\xe9\xbbA\x0e\xe9\xcc\xa9;\xa9(\xfb3n\x14\xcb\xb7\xf8j\xc0\x92_I\xf1\xa8\xa0\x0c\xea!d[\x8f\xd7go<\xaf\x04\xa49%=(\xc0\x0e\xe8u\xb3\x8d}\x9e8=ka\x9f\x13/\x98\xd5\xe2Fj`H\xad\xbbK\x19o\xd8\x9e?1[1\xb4_L\xa3pS\x1cw\xfd\xa0\x9b3S\xfc\x13\xacN<^\n\xa2P>*=s\xd3\xfc\xb3*\xee\xe5\xd6%p#\xfe[G\xc8s\xa9+\xd4\x11\xa2\\&O\xa9;\xdc\xf9\x8c\xf8o\xf5@\xd9\x14\xaa\xc0*\xa9Kw\x03\xd0K\xean5\xb5\xd5\x9e.\xa7d\x02\xa2w\x0b\x17P\xd4\x1f\x8f\xab\xfcO\xc3i\xe4Mt\x97\x85\xb0q\xa6\x8cM\x8bs\x95\x93JR\xe3\xa7R ~\xd3\xd2\xcf\x91\xb9\"\xbc\xeb\x8cN|.\x1f\x98?2\xdb\xe9\xaa\x82V--a\xaf\xb1Dp\xc2\xd9.\xe3\xf2\xeeDH[l\x81\xc5\xf2\xa3\xcc\xb8\xdcR\x179\x00\xa2\xab4V\x99\x0d\xed\xe8XAE\x8b\xa5\x95\"=x\xb0{\x9e\xee7\x8a\xcd\xce\xb93\xa5\xe6\xe4\x1d\x8a:\n\x16\x9b\x9dlF\x9d\xc7\xe7jJ\x8bl\xe2T\xd6\xb7,\xa5C\xd3\xacT\xa3\x05\x8eO\xd1\x93D\xd4\x10D\x94.\xc3\x0d\x89\xad\xaa\x0c\xa1S?\x06ql\xca\x1d\xdaw@\x9a@\xe4\x11cg\x04\xf75\x88\xd81Od\x01\xb8\xc3\xb2a\x12\xed\x8b-#\xcai\xbb\xb5#\x1a0\xce\xc1\xac\xef\xf8\x01\xf7Z]\xd6\xdaY\xd9\xde\xb9\xb9\xb1\xb9\xb2\xb5\xb8\xb3\xba\xb1~\xf3\xdc\xe2\xea\xda\xcarK\xa2T\xd8e|\x82\x18\x86\x16G\xac8E\x92\xba\xcd\xad\xae]i\xc5\xab[\x88\xb7:\x0f\xecf^\xd9\xaa<\xef\xb4\xcd\xb0\x90\x18j\xeb&\xcd+h\x1e\x81g?\x8c\xe2\x1f\xca\x8bL\x9ed\x87\xccOY\x18eL\xa8\xf9Q\xbfX\xe2\x94\xa9\xa8J\xe6\x87l\xeb\xdc\xd2\xb1\x97O\xcf\xce\x8b\x05/\xd6zc\xf3\xe6\xea\xfa\xe5\xc5\xb5\xd5\xe6\xf5\xd6\xcbR%V\x95\x7fE\xca\x92\x8fT)\x8eU)m\xe6l\x03=`\x90WW2\xd0\xac\xdd:\xde\xb2\xd8>a\x17\xc8\xe7!;\xc3,\x8f\x16\x8cKv>\x0b\xb31!b\x146h\x80\x1d\xd6\x84\xe3J\xd3\xe2\xa1|\x1a\xae\x8e:\nb\xf8\xaa\xf5\xcaWl\xf9@\xda\x16\x877\x14\x95-\x11a\x08\xde.\xc7\xb3]\x1f\xdc`\xaf\xc9)\xf4\xc18\xd6\x9e\xed\xb2\xa1N\xc5z\\f\xe7\x1b\x8a\xee\xc7\xec\x18\xe4\xe2o\x8f\x98\xa1\xbc\x95\x00^\xd9\xf8aA\xb8G\x82R\x0f\x8f\x1e\xc5\xf7\xc8^\xad\x89_\xe2\xfa1@\xf4AG.\x9e\xa7\xad\xee\xd6\n\x0d\xae\x8aL\xe3\xbf\xb4\xf6\x95\xa5\xd2A\xa7\xf9H\xac\x1c\xc4\xdc\xcd\xb8\xc7\x9c\x90\xe5a\xea\x0f\x04\xba\xf7\x9c\x94\x1f\x9b\x9be\xea9d\xa6\x08\xf3\xc8\xd9\xf3\xc3\x01\xcb\x86\\6\x96\xf0>Ox\xe8r\x0f\nH\x80\xf4\xe9c<\xe0\xf2\xa8\xef\xfb\xd9P~\xbe\xc3\x93\xe8\x98h\xd6\x03\x81\xb5z\x8a6\x17w.\xdc\\][[9\xbf\xb8vsqkk\xf1\xea\xcd\xd5\xf5\xe5\x957\xd4\x99\x02\xed\x8e5\xbd\xe5W\x9d\xb2\xdc9\xb1\xa0\x7f\xfc\xc7\x83iu\x1b\xa6\x96p\xc8\xbew\x86\x8d'\xdd\xcb\xc8\x85\xae\xf2H\xf1e\xc0\xbeg6q\x021\x1fr\x19\xc6\xe1\xf7}\xbd&\xec\xd2\xee\xf6\x0e[\xdf\xd8a=\xce\x06\xd2W7a\xd9\xd0 a\xc5\xa5\xc1V\xd0'\xb5\xb8\xa9\xa0Jf\xc9\xab\x0bzyqmw\xe5\xe6\xc6\xee\xce\xcd\x8ds7\xcfn\xec\xae/oO\xbf\x96\xf2\xde \xd8\x92\xb4\xdc\xa7\xd7\xc5\xf4n\xc0\xedV\xd8e^\x97\x0d\x04\x99\xeb|\xfd<\x8b\xd5\xd1R\xfd\xb3\x08\xccE \xc3@\xb9\xc5\x1c9\xc3\x06E\xaa\x83?n\x15\xf8\xe2\xcc\xe4!\xe4\x9a\xdct\xb2a\xe1)8\x90\xa7\xbb\x113\xf0\xaa\xe5\xdf\x9cU\xab]1\xbaZ\x1e\x032Y\xc3\xa8l\x02s\x7fz\x81\xd9&\x16\x13\x07\xe1\xe6\xa5\x91\x7f\xb3\x94\xdf\xce\x05\xe5a\xa3<\xcd\xc4qq\xc2\xe2\x18l\xaf\xbc\xbe\xbb\xb2\xbe\xb4rs}c\xe7\xe6\xe2:\x10\x14\x1c\xe12-\xbb5\x9e>\xf2F\x9f\xef3\x1d\xd6\xa4\x0e\xb9\xf2\x00\xebB>Msk\x9a\xb3\xef\xb2\xf4U\x96\x1f=\xdaa\xfe\xf5\\\x86`\xcau\xba\x9e\x0bN\x05\xf7\xf7\x12R\x16\x8d\xac\xda\x8bO\x054\xbfqC\xe2 \x1bRw\x0bU\xbd\xf6\xa2^\xf4\xd3IVJ\x96rB\xa6\xba\xa9\x10&\xb5%\x1bg/\xae,\xed\xb4\x00k\xc5z\xbcJFy$\xbf\xce\xc5\x01\x9a\xb6\xdf\xafD\xa2\xab\x1f\x9eq\xbe-_\xd9\x81\x826\xe5xEa:b\x87\xa9\x86-\x0cr\x8aa)\x9f(9\x92\x82\xc4\x1d\x07\x12\xa7>\x177\x81\x8dc\xfdv\xfdX\xe5\xa9K3'Q\x1c\xbeu\xbc\xf5\xed/6\xde\xb2\x1a\xc7\xa9\x1a\xc7\xa5\x02 X\xadm\xb9\xa5\x027\xedr\x8b\xc2t\xb9\xe3\x84\xa7\xe2X\xb5U\x88\\/\xe0\x025~(F\xf5C\xe6\x84\x1e\xfb\xa1\x18\xcd\x0fK(\xd4\xa9n\xcd\xb9\xad\x8dK7\xb7V^\xdf]\xddZ\x994W#/\x98\xa9V\xd4c\xf3\xb5P+\xcd\x02\x94o\xa1\xb5Eq\xca\x99\xcb\xd2\xd3O\xdd\xf1\xbc\x1fv\xd9\x0f\xd5\xc8\xd4\"\x88\x115,\x02\xc8\x1b_\xfd*83C'\xdd\xd5\xc9n\xdaz%\xbeyK\xb1\xb4\xb8.H\xdd\xd2\xc6\xfa\xce\xe2\xea\xfa\xcd\xdd\xf5\xe5\x95s\xab\xeb\x13\x96\xc6r%Q6\xc5\xa8e\xa87cB\xa0\xb4<\xe3\x85:\xd8\x98_\x83)kxD+\xd8E 1\x1e_\xd2\x98\x94\x1d\x05\x15I\xfd\xb3y\x0f\x96\x9cP.4OdT\xb2\xa3\x16\xb7$\xe48\x99\x14f=\x9e\xfa \xf7\xa4u\xcfB\x03\xd5\xba..\x97W\xb2I\xe6\xab\xc1\xad\xb2\xe5\xc2|,\x0c\x0fM+\xed\x83W\x99\xa3\xdc\xac\xa2\xe7\x9a\xb8\x98be\xce\x8e\x9c\xa9\x10\xf33\xe6E\x1c\xf0\x91\x1f\xf8if\x99\xfd\xee\xfa\xd6\xca\xf6\xc6\xda\xe5\xc5\xb3k+\xd3\xce\x7f\n\xfaZ\x8fQ\x81\x10\x07\xdb\x16\xff}\xfdk2\xd0\xea\x1f\x18j\x81\\O\xbc\xa3\xab\xc9}.~wo\xd0c\xa3\x7fb\xaa\xd2\xeb\xbdq\xc9\xe4\x9c\x03\x99\xf9\xe2K\xec\x9a\x98\xc7\xd4\xfb&\xd9\xc3\xd4\xfb\xd6(\xd7yZ\xae\xc3;f\xf7\x8b\x93B\xd4\xf3Iq/J\xb8\xd6\xdd\x87\x1d\xd6oW\xe4\xeb\xb0\xd3\xc5\x02\xb7\xd0\x03~\xf4#\xa1\x11\xd0F\x1aL\x1e\x89L\x19\xf6\xa3\x1f\xd5\xe5\x01\xac\x84t(\xd7\xfc\xc2\xab1\x12\x82y\xd2\xe6\xd7\xa3\x1b\xd2\xb79\xd4\xc6\x9dI1\x0b\xcd\xee\x81\x926\x94\xfdn\xf1\x1a\xd7]\x81\x88\x1f\xecLm0\x99\xf9K:\xed\xca\xf7\x92\xcf\x1enF~\x98I\x0f\xfa\xc0Du\x17\xfc\xee\x0cs\xcdW\xd8\xdb3\xaco\xbel\xc9p\xbd\x04\xc7\xe7\xe2y\xe9\x0b2u\x8bb\x91\xd4A\xebM\xbe>\xc5V\xadaR\xd6\x8c\x8a\x85\x12\x13\x1c;\x81\xef9\x99\xf4\xe9\x8aK\x1f\x84\xd6\xe5}K\x15\x9b\xc6\xb3-l\xcf\xbfR\xea\xbd\xd6w\xdb\xa6h\x1dI\x94\xb72\x9f\xb9\x99\x81{\xac^\x9e\x9d\xc3\x98\xab5Y\x0de@U\xe6\x0b\xa9#\xe1.\xf7\xc7<\xe92\xf3\x96\x84L)\"x\xe2\x11|\xcc4*!\x1c\xf9BQ\x0b_(\xad\x0cM)SN'Sr\ni\xcf\xcfw*\x8ew\x96<25\xbe\x93\xf4\x909\xfd\x8c'k\x91\xe3M\x13a \xafk\x93(\xcaVC\x08\xc4>C?\xe9w\xc9\xd1\xf7\x19?\xf4\xb3\x8d\xc5<\x1bB\xb2\x98<\x1b.\xca\xde\xd2\x197\n\xfb\xfe O\xb8\x80Zj\xc6 7)\xdc\x16e*(is\xee\xf9\xa1\xd7\x86\xcb\x0f\xe94\xdeT\x0d\xf2\x1a\x9dan\xb5\x16%O\x94\xa5\xa6\x99\x93\xf1\xcd \x1f\xf8\xa15\x0eD\xfcD?u0&W_\x12\x87t\x81Ez\xb3\xeay\xb7\x03\xcb\xd2\x185\x96\xf2\x80\xbbY$Z\xb4\xbf\x0fY\x93\x95\x16r\xdd\xd4\x0ft?q\xe2E\xdd\xbf\xfdQ\xae\x89\xee!U\xdaa\xdd\x05\x0c(v\xb5\x8a\xf0\x91B\xf8\x13\xa7O\xe2\x9c\x19>\xbc<\xd4\x9e?A\xb2M:\nt\xe2\xf4)\x0c\xca\x0dH\xe6\xd90\xb0&\xb7c`C(\xdbc\xd3\xed{&\xa3J(iWQW6\xbc#\x89\xea&$\xe80\x91D*\x05@\x06\xd1\xdf\xfczX\x93K\xa2L$x9\xff\xa7M6\nj}\xaf\xa7\xcfzY\x93\xf1\xb2Y(s5\x89\xb5\x18\xdb\n\x9d\xacL;\x0c\nQ|/\x1e\x0d\xd9\xd6\xa7\x85\x16\xca\xa5\xcdR\x14\x12\xdc\xd5r\xfaMz5?\xddX\xdc>\xd1\x91 \xcd&>\xb2\xc1\x16\xd8\xf5\x96%\xd3b\xcb\x12\xa6*\xd4\x82\xbc\xdd\x11r\xc8j\xd8\xben\xd2E\xa4]v=\xbbA\xd2\xc1\xc0F\x04\xec5\xe6\xcb\x07\x99\x13\x94\n\xb3![\x99\xfd\xdc\xebdq\xb5\xae5:u\x9c\xcd\xcf\xd2F0\xc5\"8\x0b,\x98\xc9\xa2\x8b\xdb\xe8=gHS+NB#\"\xf4\xeb\x1c\x8d4U\x98\x1a\x0b\xfci\xb0\xc0\x81\xb7[j\xb1 7O ~eX \xc3\x98-X\x907aA\xca^c\xd1\xf3b\x81\x0d\xcb\xd5\x96\xa5So\x19\xfb\xa6\x89F]\xed\n-\xa5#\xca+$\x84d^r\x14d\x8e<\x00\x90Kq\xf5;\xe8+$\x1b\x9e\xc3\x11\x16\x81\x8a\x87\x98\xb7\xf2\x14\xf7\xeb!\xa7\xfa\xaf2\xa9\x97\xfeT:'kT\xca\xc9\xdae\xc1\xcc\xf6\x85\x8d+7\x17ww.\xdc\xdc\xdc\xd8\xdc\xdd\x9c\x90oY\xfb\x95e3\xb1-\x9f\x9f\x9e\xd1L\xca\xb3v+\x1dF\xfbe\x84\x17\xa8Q\xda;\xfbx\xc4P6\xb6V\xaf\xad<\xefH(B'&Op?\x89F\x17\xb7;BW&\xa5\x80\x90\x0c\xc4\x80\x8b\x1c\xc1-x8CV\xbe\xe4\xc4\x1d\x1c\xf8n\xd4%\x1ef\xc9\xe16\xbf\xdd\x9e6\xe3\xba\x96\x0dP\xbaN\xdee8\xb0U\xff\xe4,\xaf\xcf\xd6\xe46H$t\xae\x06\nIe\x159i\xc1 \x17T*\x939\xcfjl\x0c\x95T\xab2\xc7H\xe9\xa5\x1d\xbf#W,\x92[\x1c\xda\xcdG\x85\xa9\xac\x94\xdf\xd4\x9a\x97\x87\x95\xc2}\x8aq\xca\x93.\x86\xa9\xb9R\xebFC\xfca`\xaf\xab\x19\x96u\x9aLm|\xdb\xccET\x0e\xbbL\xd5ot\x9f.xe^?*H3\xb7P\xce\xa6\n\x8f\x93\xf5\xb2\xc8)?\xdaS\xf7Ls\xa7S\x1e\x96\xda\xba\x1b]\x98j[\x7f\x98\x98\x11B\x066\xc3y,\xa1\xb7\x10\xad\xa6?\x8a77\xc4\x9f\xf3/\xe6D\x86\x92Q\xdb\xcfaX\x97,\xd9\xa9\xf1u2\xe7\x10\xde\xeb!o\xfd\n\xaa\x17u \xcfH\x95\x14$z]$\xd6T\x96\xc6\x81\x15\x96\x88\xd7\xb9\xd1-\xe7\x05\xac[\xaa\xb5\x8d\xf3\x1b\xbb;/f\x81,\xc4hf\xdf\xcf\x86\x97\xf2\x0c\xaeG\xa6\xc8\xa8h\xc9\xe4\xd5\xf8\x8c+\x9f\x81\xc0\xb2\xda\x10^\x0b\x9a\xd5\x98N,\xb8\x96L^\xc0\xa5\x8d\xf5s\xab\xe7w\xb7V$/z\xde\x85l\x1a \x18\x16,\xdcG\x8d\xea\xb7+\xc0t\xc1\xf6\xb8\x04\x83\x94s\xf2\xd3E\xb3x\x90\xd4\xad\xfaO\xaf`\xa9\xe7\xa2d\x0bLY\xe0\xbe\xa4\xd2\x0f\x94\x98\xee\xd9\xc3ug\xc4S\\q'2}H\x90`\xd5a\xa9\x9a\xe5\xb8i\xdbS\xde\x0e\xdb'\x89t\x15)\x08\x95\xa1 o\xc3),D9J\xb4z\xbe8\xe2\xafDV\x1a\xab\x04B\xf5\xc7\x8a\x9a\x05\xcb\x967\xcb\xe2\x01\x19\x82\xec\x90Z\xe5\xe8\x08enr\x1f\x8a\xbc#\xd9\xa9\x83p\xa6v/'\xf7\\\xd3\xf1tb\x0b\xd2\xa2l\x0f \xb4\x8d\xec\xe4\x80\xecT\xfb\xcaQh\xe4\xa05?\xcd\x88\x90\xc5\xca\x96\x8b\xe7\x16\xb4\x18\x12\xb6\xa2\xa9\x84-fD\xaa:\x81\x8b)\x9c\xae\x17\xbaXIYt\xac\xe2c\xb9T.\xc9T\xd2\x95/%\x86\xe0\x1b\x9b\xa7\xc3vn#\xb9]\x9c\x17\x91\x92\x12\xeb\xe1o$\xa7S#@H\x11\x80\xce\xcb\x8d\xc24\n\xf8\xcc\xbe\x93\x84\xed\xd6\x95\xc5\xad\xf5\xd5\xf5\xf3\x0b\xcc>2?e\x1e\x8f\x13\xee:\xe00\xeb\xb1}?\x08X\x8f\xeb0\x1e\xed\x91\x19\xf2\x83\x8c\x8d\x9c[Q\xc2\xc6\\g\x9aB7\xe2;\xd3\x04\xbb\x11\xe7\x99\xce`,I\x98?\xa1W\x1b\x8f\xc1\xbf\xca\x9b\x039PF\xa9\xba(\xd7\x95T\xd0\xbc\x97^b\xed6\xbcp\xa1$\xe3(\xe6i\xab\xd3\x99\xd9\xe3_h%\x99\xf4~v\xa30s\xfc0U\x17N\xb2\x87T\x8bI\xdc\"w\xeb\xdf]\xe5\xc1\x98+I(\x08\xa2}\xeem\xc3\xa8\xba,\xed\xa8\xe46\x99\x84\xfb]f9\xe9\xba\x1d\x1f\x9e\n\x95\xb9\xcd\xec\xf4\xc0\xaf\xa3\x07\xddI\xa2B\xfdbh|u\x92\x81\xbc\x08L\x0b\x07\xb79V\xcd\x15f\x8a\\\x9f\xbb\xc1^\xab\xfes\xa1\xe9TMEtT\xa16\x18\xfa\n\xaec\xe7~e\xc6\xa3\xfa\xecL\x9f\x84\xdc\x1c\xf14\x1a\xf1)\xc5fSG \x1e/\xe1\x9b\x9f\xa4Y\xbb\x06G\xac\xb2t\xd3.V\xe4\xbf\xc9\xfc}\x82da3rh\xa2\x84\xb8 \x92D_$\x13\xa9\xeeg1\xa6\x06\xe2\x0b\x9b:\xe3\xa7\xe2?\x10\x1b|\xe4H\xa6\x8c\x95\xcf\xbd\xcf*\x97#2\x9b\xf2\xce\xcc\xc8\x89\xa7h\xa5\xd4\xd2\x91#!\xec\x7f\xddv\x1b\xaf\xd1#s\xb6\xad\xd7\x87\x0b\x99W\x19E\x84\x8a\xa2\xf0\xa5\x11A+F\xe5]\xff\x16\xfbFhD\xfc\x80\xbb\xb9\xf4,\xb0j!]\x95\xe5f\xfe\x94E\xd7\x90\xd6\xceH2\x88\xa4\xaa($\xcd\x8aB5^\xb8\"\xe1\x17\xe3\x99R/\xad\xa0\xb7]\xcd\xcf\x9a\x04)|\x9aj\x9f\x83\x89\x94\x1a\\\xe7\x8e\xe8\xa8\x0c\xd6\xd90\xaayr,\x97%\xa6x\xc1M,C\x968\x0d\xcf\xc9\xd6\x1f\x95\xe2\x80/(\x03\x90>\xeeb\x9f\xaa_\xd4\x89\xae\x97\x1eJ\xd4\x7f\x81%5*\x88\xdc~+hb\xfb\xe5W\xdd\xca\x1d\xe0VMS\xf6s_K\xc8x\x1b[\xa9\xac\x0d\x80\x93_\xcd\x1by\xb0\xa3\x0b\xcc\xb1\x83K\x0f\xde\xd4\xd8(\xcb\xaf\xe6X^\xbf\x95rJ\x1d-\xfa\x86P\x89/\xe3\xf1\xd2\x0f\xebnB\xd3\xa1\x94\xd8Vn\xe7N\xf0}~\x08(\x86\xbe\xd1\xf5\xaa[*j?\x917G\xdf\x80\x15\xa4#K\xdba\xfb$y\xe7:2>\x16\x13\xfd\x8dj\x05I>\xd3\xb7\x10\x16{\x82\x02\xf1\xf3\xa2\xfd0\x98\xd2\x1d\x89Y\xc8emj\n\xfd+\xf4D\x9e$\xea\x02\xb9Y]aZQ\x9at\x8d\x8c\x7f\x8e\xa94u?\x10\xf8Tp\xfb\xc95\x02I\x9f\xfb\xa0\xc4v\xcc\xddv6\x93 ~'\xf4\x8a< \xda\x9d\"\x93\xbf.\xb6\x9b\x04u6\n\xfdk\x1e\xbbL\x14#8\xac\xea\xa2[7\xc6\x00\xfe ,\xdc\x0d\xb8\x934\xbc\x8d\xa1\x7f\xcf\x83dB\xfe\x0f\xa6h3O\x82\x05[\x9e\x16\xfc\x13\x03\xde\x96^\xd1G\x1a\x1e<\xd4?\xf5 \xe9j\x98\xf1\xc4\xe5q\x16%\x0b2=\x0f\xfe*\x96j:\xf9\xb5\xfc#w\x8du\xbf\x1a\xef\xee\xf2/\xe1i\x1c\x85)'C%\x9f\x7f\xfbcu\x13\xee\xf10\xf3\x9d ]`\xad\xd4\x19qEg\x1b\xe2\xe0\xf4O\x91\xb7&\xa7\xf6\xf2OP\xc98[\xa8\xbe\xe2y+\x8d\xc2\xee\x1f\x1c\xff\x83\xc9\xe4\xad\xf9\x94\xdc\xed\xccdC\x1e\xb6\xfb]\xd6o\xb8$\xb0Bj\x96\xc9r\xc8\xa6\xd5\x8c\xb4@x\x1d\xa2\x1d\xcc\xd1\xec\xb2V\x11*\xa4i\x8a\xf9\x08zG\xab\xe1\x0d\xf4\xaa\x1553&Nx\\N\xdf\x01r\x95\x11G\xfcg\x01\xc4p)\x90Ws h\xdf\xa8\x92\x1d6\xebLdT\xd9a,\xa8\x85\x90\xb5n\xc2\x02\xddT\x93\xbb B\xf8\x04\xbcQ\xae#\xb6\x04n\xfaW\xb3I\xe4\xab\xcd\xff\xb9V\xb7\x0d\xaa\xdbh7\xe3N\xb7\xb9\xc6)\xa2\xce\x8c_\xfe\xddm\xb2\x0c\x97\x7fU+qe\xb8pc@\xcc\xd4\xfag\xbb\xd9\xb0\xda5i\xe7\xd3\x04\xd8L\x8a[113\x8d\xd9!u\x10N3v\xd5\xa3\xd5B\xb3\x0d\xd8\xf6S\xb3\xb6\xbc.g<\x98 \xd1)]\xf0nQD\xe6;m&=\xf5\x98\xdc`\xed,\xa2\x88j\x1e\xa0\xa2\x9b\xfa-\xfb\xbf\x90\xb5k\x82\xe7O\xf5\xab \xca\x99\x9f:&\xe7\xab\xf2 \xfa\xed\xda\xe5\xbe\xace\xf3\x85\x9e\xa4\x1a\xf32\xab\xe2M\xdf\x8e7\xf6\xba\xea\xdai\xbaH\xb9t\xe6EG\xca}\xe9x6j7u\xdba\xfb\xf4 \x12\x9c\xa6\xee\xa8N\x9c\xb0\\R\xc9\x00NZ\xc5Q\xa0\x93\xb3\xb3\xb6P\x04\x00\x11\x0bm\xaa\xc6pr\xb6\xe6\xecXB\xb9\xfe\xe9\xc5\xb3}\xcd\x01\x18c\x95T\xb2\xda\xc8\x80gk\x91\xeb\x04 `-4\x9b\x03\xb5\xf7\x834K\xc4N\x92\xf2\xab\xceHU\xed\xb4\x0bi\xa9q,\xbf}bf\xec\xd8g\x0fw\x130Tk\xfb>|op6\x85\xf3S\xb9v\xc0U'^w7_\xa2\x96\x169\x9b\xe9\x87`C\xef`E\xb9\xee\"^O\xe9\xb9\\#\xac\x06*}\x99[\xb9*\xa0\xf2\xb7<\xb7\xe6\x9cFh9\xda\\)\x1f~\x97\xf96\x03\xbf9\x0d~\xfd\x1dIh5\xe2\x87U#>{\x8d\xb5\xa3&\xfb\xbdR!:\x02w\x9f\xab\xd8n\x12\xb4[\xe2CU\x89\x08KV\xfd\xc2\xa8?\x93'\x81@2x\x81]HH\x99\x8a\x84#\xe7%\x04\x03\x89ED\xfd\x06\x9f\x9f2\xe6\x0fx6%\xa6q\x15\x0d\x83\xdf\xdf\x94\xf6\xfc\x05\x19J\xf8\x0d\x9d\xa5v\xef\xe8*\xe1q\xde\xf6\xda\x9f\xf4\xf0\xf0\xbf\xbc\x87\x07e\xb0u\xb1~\x82U\xdb\xef>e\x00\x91\x8e\xad+\xc5sE]\x96\xce\xecn./\xee\xac\xdc\x84\xd8\x86\xed A\x0df\xef\xe0\xb9\xf1j\xb4J\xa1\x04\xd0P\n\xdc\xeb\xce\xc6\xf9\xf3k\xd3\xf6\xfa\\1)8U\x89\x19\xb2\x8a\x05;\x82\x02=\xa2o\xc2=\xf7\xf3\xc9\xd3\xd7\x0d[\xb5\xd9\x1f\xa6\x91\xad\xa7\x90o+ \x16\xea\x8b1e-\xe0\xf8\x15\x8d\xe7\xd09\x9f\xfb\xbe\x91C&\x1b\x95c\xb4[xtNa\xb2f%\x84\xda\xf7C/\xda/.3\x86NZ\x93\x00\x0d\xff\xb2\x99\xc09\x8c\xf2L\xc7uKJ\xbe\xccy\xbc\xe6\x87{\x17\x9ct8\xcd\xfd\xd2\x04\x1b]-\xf4K\x98|\xc4\xae\x9a\xfc\xb6\xb5\x1b[\xf2\xcc\x99\x90\x06\xc4$\x1d\xdaq\x06\x0b\x85\xbb\x10\x1dJ\xe5\xcb\xdd\"\xd1\xacEUq\xa4\x9a`UU\x00\xf4\xb2-|\x07@\xdf\xb1+\x17\xce\xd7'W\xff\xf6 \x89\xbc\xcc\xd8v\x93(\x08v\xc0\xf5.U\xffPw\xe0\xf2[\xc2\x1d\xefp'\x82r\x8a\xb8\"\x1c\xae\xd45!X\xcd\x0e\x8f\xfd\xda\xb8\xf6\xbe5\xf2\n\x0c-'g\xb1\x97d\xaej\x9c>AR\xa34\x86\xb6c\xde(\xdf\xa0l\x07V\xac\xe8\x7f}X\xc1\xd4*\xc5\xe5e\x9cH/\x0b\xc67\xc9\xcf\x06\x9c5\x81&5\xc4\xbdLKp+\xef\xf8c\x0f{\xd8h-\xafU\xde\xc2\xcfT\xee\xe3\x08r\x1f\x17\x9e\xf6y\x8d\x99\x1e\xb2*V\xa9y\xd4\xe9\xb2\xb0\xdd\x91\x8f0\nT\xf4\xc3Ag\x8aG`\xc5\xfeG\x13#D\\Yj\xae\xe1\xd6 0O@k\xa14\x10Bi \x84\xd2\xa0\xa1\x9eV\xa6\x13!\xef\x8b\xe3#+\x9fK\xa2\xd1j\xba=\x8c\xf6\xc3\xef\xf3C\x89\x88u\x0d\xc8\xdca}\xf4:ls\x7f1\x8d&\xeeO\x8e\xa5\xf1\xd8\x19\x16O\\\xa9\xa1,\xd5\xb4Rr\xc0n\xa7\xac\x9e:B\xcc\x12\x93\xef\xc8\xa4\xa2\xf5u\xe7\xe5\x9d\x8cyX\xf65\\\xbb-\xe3\xd0\xe1\xcaA\xd3\xa4M'\x83v\xd9Q\xe6Iw\x16\xf1\xd7P\xaaTs\xd5\xf6^z\xe9\xb9\x1b\xac\x8b\x84\x98\xea.\xbe\xaa\x07N\xff\xb2Z\x95hT7\xc4\xc3\xf4\xb7\xf9j\xa4\xd6\xd8\xca\x8a\x8b( \x107\xa1\xcd\x9bYTs\xfdd\xae\x9dp\x1eIE\x06\xafs\xfaTW\xe3T\x86\xb5\x0cf\xaa95[GX\x85RV\xe4\xb2z\x0c\x9f\x92`2\x85\xe6`z)\xa8p\xa7J\x9f$\xbbh\xc2\x8f\xb1\xc9\x06\x04\x0f\x90\xcc5\x1c\x8d\xd6\x11\xf08\x13\xc4\x8c\xe9\xcc\xf9\x91\xa9\xd8\xe9J\xc4o*\xd1L4|\x9c\xf9w\xfah\x12\xfd\xd3'\x9e\xebwhT\xba\xdd\xf6\xf1\x9b\xc7\x07]\xd6b\xad >\x1c\x13(\x94#\xe9\xa8o\xe8\xa6\xa0\xa2\xbb%\xaa\xda\xf6\x1b\xe6\x18J\xfe\xdav\xba\xf0\xdc@h\x8eP\xdby!\xe7rl\x95\x9f&2\xf3\xa9,l\xac\xe2\xf7\x8b\xd0S\xe0\x9f\x96\xeb\x043\xa9Y\x03\xd7xi\xf9i;\x01\xfd;0Z:\xef\x80\xe1:D\x1a\x0c\x92\x11%g\xc7e*\x92\xa5-t\xacq\xddF5\xb2\xe8\x8b[\xb9f!A\xca\xbd`&\xec\x87\xc5Zn:\x89\x98/\x17\x92\x8cY9u\xd7-\x0b\xc8G\x1eg\xb2\xa8\x96\xac\xff\xd68\xc4@\xae(\x96\xf7\xa7\xb1\xd7O\xc3%d\xbb\x8aWP\x87\x1340\xbb\xe5\xa9\xda\x8d=\x9e\x01m\xc4\x94f\x04M\xf0\x8d\x97\xaf\xfeC\xe1U3\xe5\x97\x84|\x14\xe7\x19\xf7\xb6\xb3\xc3@\xe6#\xae\xad \xd6\xb4\xe5\xf4\xd2(\xc83\x95S;\x99\x89\xa3T\xc6\xea\xd4W\x93\xf1\xf7\xec5v\xbc\xed\xe4Y\xf4#X\xc7\x1f\x0d}\xcf\xe3a\xe78[\xa8\x02:\xc7\xeb\x99O\xab\xef\x1fp\x0f\xf7\\\xbc\x90f\xafidx\x99^\xf0U\xf9\x1fG\xf0\xe0b\x91^\xad\xa7\xd221\xbdm\xa5\x9cN\x97\xb5\x8f\xc8wTZi\xe6d\xbe\x0b\xae\xd3\xe5\x81\xbd\xf4\x12\xf3eZ\xe0v2\x13\x8dy\xd2\x0f\xa2}v\x94\x15\xff\xb8Z\xf9\xd7\x1b\x9d\xc2\xdd\xde>\x17=\xd3IX\x88\x14\xc5 \x960\xc0\xf3\xdaT\xa9\x93\x8d_\x88\x96-\xb0\x86D\xe7\xba\xec\x02\xab\x89q\x13\xbf\xcaQ^`\x83\x06,.\xb3\x9f\x056\xae/I\xa4\xae\x056\xb4\x13\x1f{\x1b\xa5{\xe9\xfa\x95\xa8r\xa6i\x1d\xbf\x18\xc3\x9e\xccM\xef$\xf5UZ\xac\xed\x01\xb4_\xd4{\xa44\x8b&\xa9\x1e^;\xf1\xbb,\xb7SgDX\xb2\xa1\x9fvY\x9d]\xd5\x08\xc1\xa9\xd5\x90\xed\x1aCv\xda\xe9J\xeb\xed\xec\xab\xac\x0f\x8f\xf8\xf5\x8f\x1e\xed0\xf7z\xbfj\xc8\xee7\xbf\x16/\xd8\x9cO3\xa7\xc2 \xe5\xbb\x83\xc1\xcc\xcd\x9b\xd2\xb9\xec\xe6M\xed\x12]\xf2)\x0f:\x1d\xe9a\xa6L\xe2\xbc\xcb\xae\x8b\xba&\xc9\xb2\xdb\xe9\xc8\xf0\x99(\\\x8b\x1co\xa2\xfdL\xff4\x07\xf6g\xe2$\x8a\xd3\"\x93\xc2L\x16\xc1\xc1j\xca5\xc0\x14\x17F\x92G8\x939\x83\xae|\x04U}]\xf5\x1a8*\xbe2\xadH\xb0\x82?\xd4\xe9\xc4p\xc3\x10\x12G\x02{V\"J\x96K\xe6\xe9\xbc\xb4\xd2\xf06<\x92I\x82.\xaby\xf6hO\x88=\xad\x84\x87\x1eOj\xcc\xa6\x8a\xdaL\xbc]a\xc5\xa0Rdq0Q\xaai\xec\x84\x84\x9c\xd1F\xfa\x0b\xf0\x9c\x04\xe0Cm\xe1\xbb\xdd\xda\x9e\xb8z\x90B\"F\x1d?\xa7\xab|\xa3\xd3E)\x19\xee\xb6\x8b.\xcc\x15\xf37\xda\x87\xe7\x1bG\xfaCi\x176\xff\xfc\x1d\xd9/\xfd~G\xf6\xbf8\xd9\xb7\xe8\x85\x9a\x13d\xce\xe0\x0b\xd3\xec\xf0w4\xfbw4\xfb\xab\xa6\xd9\xcf\xe7\x1ag!?\xb5It\xa28='\x13\xb2=\x87\xe3R10\xc4Kt\xba\xaf\x93\xb3\xa7-L\xe3E\xe5\xfb\xfa\xe6\xeeG\xa3\xb7(\xc9{gy/\xa5TA\xbe\xd5~\x86\x85&`\x13\x87\x0f\xfc\x97\x85\xa1\x93\xcc\xd4l\x8a`\xa8)\xed\x19\xcc\x04\xeaB$\xf9tlD\xff\xa6\xf5\x1e\xc2?U/\x91\x0f\xc0w\x1b\xbc7'\xb6f7\x9a\x19h\xb3\n\x03\x13\xbf\x98F!\x9e\xfc\x146L\xf6%\xe6os\xe3jwf\xa2P\x90\xdc\x80g\x96G!m?\xb3\x8c/\xbd\xc4Zz\x10\xe5@\xcdP^\xec\xa6<\xdb\xf1G<\xca\xa5\xbb3<\xb8\x7f\x86\x1d\x99\xeb|\x95+_\x0b\xad1s\x92\xaf\xd3\xd2Y9\x15\xeb\xa1/\xefF\xf9\xbd\xc6\x96\xe7d\xce\x82?r\x06\xfcx:\x1e\x1c=\x18\x05\xaf\xf6\x9c\x94\xbf|\xb2\xbbya}\xfe\xda\xe1\xd9\x13\xce\x95\xadYgy\xd6\xbftkq\xdf\xbd0\xf0W\x97\xceF\xd7\xae\x04\xa1s\xe1\xf5\xd3\xab\xb7V\xf7/]8{r\xd5_\x1c\xf0\xf3si/\xbctzu4\x9c\xf5.,\xbe\xbcvx\xfa\x84w\xc2\xcd\xbd;\x97\xf2\xde\x89\x8b\xe1\xda\x9d\xd5\xfdK\xcb\x8bc\xf7\xc4\xb5p\xd5?;\xef\\\xb9|\xe2\xf5\xd1\xe9\x93\x9b\xdb\xab\xfb\xab\xcb\x8b\x83K;\x8b\xfb\xab\xcb+\xfb\x97\x96V\x07\xee\x85\x8b\x81;\x7f\xf9\xd0\x1b]>\xeb\x9e8\x1b\\=\xb1\xb5}\xf5\x8d\xad\xb8wg\xd6\xe7+s\xf1\xb5s\xc1\xbas\xe5u\x7f\xf5\xfczz\xf5\x8d\xf5;\x9b\xdb\x17\xd3k\x17.e\xee\xe8t\xda;\x1f\xe4\xd7\x0eW\x07\xee\x89\xadS\xbd\xf3\xbb\xa7WG\x17\x87W\xe7\xb3\xd0\x1d\x9d\x9e\xeb\x8d^\xcf\x9c+s\xc3k\xf3\xbb/\xaf\x9e?5\xee\x8dv\xbf\xb3z\xbe\nw\xcf\x9f\xbe\xe3\x88\xbe\xe6O\xbe\xbcz>\xc8\xc5\xdfW\xaf\xec\x0f\x9c+\xa7b\xef|0\xec-\xa7\x83\xab\xa3s\xb7\x9cy\xef\xb0w\xe2r~mi\xee\xf0\xda\x1bg\x83\xabo\xbc^W\xde\xdf\xbcup\xcby\xe3\xe2\xad\xde\xf9\xdd\xc1\xd5\x13\x83\xd3\xab\xb7v\xf7W\xfd\xb3\xb7\xf8\xce\xac\xbf\xbe\xb3\xe8\xaf\x9e\xbf\x16\xf7\xce\xef\x9f^\x1d\xc91\xf9\xab\xe7O\x85kW\xce\xcdz\x17V3\xf7\xc4\xd6ao>\x0b6\xb7/~\x87\xcf\xaf\x8f{\xa3k\xf1\xb5\xc3S\xb7z\xf3\x07c7\x9c;\xbd\xea\x9f\xcd\xaf\x1d\xce\x0d\xbd\x0b[\x87ko\xac\xcf\xba\xa3\xd3\xc9\xb5\xed9\xb3o\xfcDv\xab7\x7fj\xe4\\qso>\xd8\xf3\xce\x0fO\xf7\xb7W\x07\xbd\x91\x9b]}ck\xd6\xf5\xe7\x0eQ\xdb\x87W\xafl\xc5\xde\x1b\xeb\xb8\xdc\x1d\xef\xc2\xc5\xb13\xbf\x9b];\x7f\xee\x8es\xfe\xdc\xa1;:w\n\xd5\xdd\xbb\xfa\xc6zt\xf5\x8d\x8b\x87W\xdf\x08d\xfdb\xfc\xab\xb7\xd6wv\xe7\xc4\xffV\xfd\xb3\xa6-\x18\x93X\x93\x15\xb1&\x87\x9b\xdb\xabw\xd6K\xf5\xd6\xael\x0d\xdd\xf9\xe1\xd0\x0d/\x0e\xc5z]\xda\xb9:\xbbvk\xef\xce\xa5;W\x0f\xd6\x97/\x1d\\\xba\xf3\xfa\xfc\xfa\xf2\xca\xdc\xea\xf2\xee\xfc\xda\xad\xbd\x13\xebw\x06'.\xed\xbc~g\xfd\xce\xe0\xf0\xd2\xce\xa5\x93\xab\xb7N\xber\xf5\xca\xa9\xb8w\xe5\xdc\xec\xb5\xcb[\x87W\xaf\x9c\xbasmt\xfa\xb0\xb7}V\xae\x99s\xe5\xe2\x9cw\xfe\xf2\xc6\xd5+sb\x8dg\xdd\xd1\xb9\xdc\x9d\xbf6vG\xb3\xfe\xea\x85\xadS\xae\xc0\xa1\xf0\xe2\xd8;\x7fn\xf6\xda\xf6\xea\xe0\xea\xfc\xb9\xf4\xea\xec\xdc\xf8\x9a\xc4\xad\x83\xb87\xbau\xf9|\x90]{\xe3\xd2\xe9\xd5[\x8b\xdf\xb9\xb4\xbd:\xb8v\xe1\xb2\x98\xf3\x81{\xb8:\xb8:\xba\x1c:WN\x9e^\xbdu\xf6\x8eX\x0b\xc0\xab\xade\x81g\xde\xf2\xac\xef\\9\xb5w\xed\xca\xb5\xb87\n\xc4X\x8en.\x9d\x1e\xf6F\x81\xd8\x9f\xe0\xf2\x85\x8b\xc3^\xb8>\xea\x9d\xb8\x98m\xde\xda\x1f_\x9d\x0f\x0e\xaf\xce\x1f\x04\xe2oq\xe66\x07\xd1\x99\xd67D\"X\x8a\x82\xc0\x89Sx\xbab\xcd\x0f\xf7\xe4\x1f\xe0\xcb#\xff\\\x0d\xe3\x1c\xfe\xda\xe1\x07\xd9b\xc2!\x0d\xea\xd9<\xcb\"\xe0\x16[\xd2KX6\xa5\xfe+\xb3}\xcb\xb7{\xeb\x82\x11\xa5\xff51Ch\xcf\xecW\xac\xafS\xf6mF\x10G7f3i\xf4mF\x90T\x01H\xef\x81\x02\x10#\x88\xab\x00\x15#\x88\xf4\x13\xb7\x9b\xbf\xbf&\x87m\xdaqLx\xbd\xb10p\xab\x85!3\x16\x06\xae^L\x98}\x95\x85\xec\xbb\x8c\xbf\xca\xc2\xa3G;L\xc5\x0d\x17\x16\x86\x10\xa9\xe1jb\xd9tI\xa3U\xe9#G\xd0\xac:3\xb7\"?l\xb7X\xab3\x93%\xfe\xa8\x8dEg&\xb5\xfc2f\xd5wd\x96#\x9b\x14\nLl \x99R\xdbSb\x1c\xc9\xa8a\xa4|G\xdc\xe9(\x99\x05\x8a\x17\x12K]\xec+\x1aIPj\x0b\x9e\xdfE6\x85\xccj=\x98`9\x98\xd6j\xa0\x11\xa4\xd0\xd6\xebET\x95\x834\x0f\x82\xd4M\xb8\xed\x81)\xfd\x0bM\xc9\xfa2\x96\\q\xbc\xcb\xae\xb7\x8a\xf6e&\x9d<\x08j\xdf\x1e\x93\xc9\xec\x8cg\x8e[k\xf5\xe0 \x88B4\xaf\xad!\xed\x84\xd4J\xf7\x9d\xc1\x80'\xc7\\\x8dn2\xabN\xc8^c\xadcr(l\x81\xb5\xea\xbc\xc6\xa7\x1fG\x9b>3\xe97\x99e\xdc\xc0I\xd3u\xf9XZ\xdc\xf6g\xcc?+\xafj\x95\x7fw'\xbb>\xde\xe8Tb\xfd\xdb\xae\xc5\xceR\xa5\xde\x1e\xf1\x97\x1bE=?\xe0bI\xaa\xfb\x9c9\xbd\x80g\x0b\xacu\x0c\xfeB`\x8f\xa7{Y\x14\x0b\xb8\xfa\x13\x15\x08\x9cd \x9a=6\xf4JW\xb3\xafV\xe8A\xf0;J\x00\xbf\xdf\x1a%\x18\xfa^CV8\xa0\x01{\x9c\xc7K\x90\x8d\xb3\xa1=I\x0b\xf8\x0c\xa0\x93\xd0\x02\x01m\xba\xd2\x9bB\"\x88\xf8Sb\x05\xf1\xdb\x90DC\x0cE\x90\x8brw\xe2\xdf\xd0\xa2|\xabQ!\"k\x19\x94c-\xd9b\x8b< k\x86%\x93\xf1\xbe\xf4\x12;\x12NAe\xc0\xb6*C\xe8\x9b\xa9\xcc\xf5\x1a{\xb6\xe1\xd89\xf3C\xe65\xbb>z(\xedG;\xefL\xd2\xf6\xf5u\x83W\x1b\xec\xa4\x7f\xa2\x83\x1c\x1e\x0d2F\xdc)L :\xc8\xa9\xa85\xb1'\xa6z\x0b\xd8w\xd9\xdc4}0\x99\xd4Q\xbe\xe5\xd2\n\xa3\x90\x0b\x02=mT\xad\xa0\xea~\x98O\x91hob =\x84^\x10\xb9{0\x86\xae\xf9\xe8F\xc11\xf9(\xa5\xfc\xde\xd8\xd6\xf3\xda%t\x0cW\x8c\x0c%\xd7K\\\xc1\\\xca8u\x88=\x11\x97\xbf0\xa7J\xb3\xc3\xa0\xf6yl\xfd\xf3\xfc4\x0e\x9c\xc3\x05\xe9}\xacv\xd1\xf2nG\xf9\xd7`9+1\xc7\x9a\x14J/\x86\x19v\x8d\xc2\xf3;\xb6\xf3\xe2\xd8\xce$T\xf4\xfc\xb1\x1d\x0dK|jZ\xc9\xa9\xa8R\x16\xa1Z\xfb\x89\x13\xc7<\xa9u\xd2{!\xd8S\x1c\xc4vI\x85\xfe\x1d&}}\x98\xd4\x93\x8b\xfeU#\x93\xea\xe5+\xc5\xa5\x8e\xfe&\x98?\xcd\x91Y\x1af\xabF|.\x19t\xeaQp\xd2\x82f\xfc s\x12\xee\xb4*\xb7\xec2\xb5\x936\x1d}\xf1\xc6}\xd1\x02j\xb9r\x86\x8c\xa1j\xaa3Tw\xa1Ws\x80(\xdb\xd4\xe6\xab/z\xb0dV6(-\xc7b\xe9b\x08\x85lo\x81\xeb\xe8\xcc\xba\x17 \xd4jB\x00\xa7<02\x15&\xfc\xb5\xc0\xf8\xcc(\x0f2?\x96V\xa7\xeb\xad\x96\xf4\x0bo\x89S \xaf\xf6j\xb3\xac\xaa\xa3\x17Q\xa4\xedZ/~\xf5\xef\x1bC\x13\x9e_\xa9Q\x0f\x0d^\x16\x1d4\x14\x06\xedF\xafj}\xb9\xa4hte\x14g\x87\xb2\xdd\xfa\xe2\x91\x1e\xab\xdc\x17\xd8?\xf9<\x12{\xcd\xfe\xbd-\xb3u!\xc8\x17\x15\xfa\xc4\x81jt\x0f)Q\x16+\xf9\xab\xad\xa8\x17\xaa1\xab\xac\xc6\xb6\x86\xe5 \x97\x86N8\xe0\xc6?\x05\xfei-/P\x94\xbdV?\xdd(V\"n\xfdt\xd5\x80Z\xf6d\xd6w\xbb\xacu\xecX\xab\xa3DWA\xf6\xaaq\xca\xd3\x054|\x99\x012}R\x1a\xa2 Y1\x91m\x999\xb7)}\xfd\xddnQ\xe8\xb7\xc9\xc2\n|92\x87\xac\xfe\xd5\xa3T\xbd\xd7\xa8\xda\xab\x86\x93BM\xcb\xd4\x81\x9e\x99\n\x8a\x95\x9b\x9a\x18\xf2\xc9'\x91\x1a\x08\x9e\xd6m7\x93\x83p\n*\xe3K\xab\x02\x84\xd7+N3\x939\xc9\x80g3\x80Ei\x83\xf3\xb43\xe1\xa5\x1b\x01\x8f\xd8k\xcc\x9f\xce\xd0\xaf\x7f\xc6\xb7\x06\xe8\n\xb7\xfb\x91\xdd}\x9e\xe0~\xd3\xa4\xc4\xe7\x9a\xf6\x04=\xd4\x93\x97\xe5\xba\x103\x04\x81!\x13\x0f\xbbS\xd3l\x17\xdc\x1a\x12[\x88>\xc2\xff\xeaR\x8f\x85\xd0`.\xd8\x9a':A\xe8g\xbfe\xc1\x9f\x91\xb9\xb2\x17\xc2\xec\xd9d\x86\xcf\x9e\x83\xe9\xb3)\x88\xab\xf3e\xf4\x00\xe8 X`\xad0\x8ab\x1e\xf2\x84\x85Q\xc2\xfb\x9fCe\xd5e\xb0\xce\xb6\xd1\x8c\x98c\xf3\x04\x9d;\xf4\x03/\xe1\x96\x90\xeeIK\x0e\x9a\xbc}U'\x9a\x8d\x86\xdc\x1f\x0c\xe5c\x13ymR\x18\xf1\xebE\x89\xc7\x93\x05eUj\x10H\x9cd\xe0\x87\x0b\xac\xe1\xa1\x92\xd8\xf1\x95\xfa\xf2O\xc9\x04\xb0\x1ee\x8b\xa1?r2\xee} \xc9_\xdfN\x17'\xccO7\xc4Y\xf5\x1a\x84\xc2\xb1\x8e\x19,\x1fL\x85\xf0\x82\xb1\xd4\xe2v\x18\xa5n\xe2\xc7\x99\xbe\x00\x98@6\xef\xda\xce\xc1oO\xe5Q\xab=I\xdb\xd1\x0b8I\xdb\xa9'\x11\xac\xb41\xec5p:\x0e\x95\x8f1,\xfc\xc4\x9dI:F\xe3!\xe8by\xb3\xe3\xc5\x8b\xa6z\x15,\xa2\xa9\x1a\xc6\x82v\x00d\xec\x9b\xe1\xffK\x9dp\xbcZ'\x1c\xcf\xe6j\xe3\xeb*6\x1f\x1c\xcf\xe6j\x93+\x8057\xa2gs\xb5 \x14\x80\xe4\xecw\x15\xe0\xf4+\xa71\xa8\xaf@sd`\xb1\x86\xd8\xfdt\xbc\xaf\xc7OG\xffE\xb4\x91\xe7\xa5\xf5E\xfcQ\xd2\xb5\xa5 \xc1d\xbc\xd6\x8c5!\xee(\xa8\xc4\x1d\xb9\xe0\x15\xe4B\xdc\x91{\xf4h\x87\x05\xd7\xdd\xaaW\x90k\xb9\xe0SK)\xa8\x866\x99\xe5\x84\x11\x81\xdf\x19aF\x115\x9b\xd5\xc5\x1c\x052\xe6(\x99\x19\xf0\xecR\xe4\xf1@HO\x13E\xec\xd2\xf8\x94\x17?7^\xfc\xad\xdf;^z\x15\xfbxKf\x93+2\x87\xfd\xe1\xcc\x1f\xfc\xde\x0f\xca%~p\xfcx\x97\xb5\xa4\x05\xc0\xd6\x96k\xd2\xd8\x1eO\xdd!\x1f9\xa4\xc9\x9aB\xbaQ\xd0\xca\xc8\x14\xee\xaaIo\xf1\xfe\xb6\xac\xf2<\x93N\x14[\xab\xbc\xbf;\xd3\xf7C\xafx\xde\xdbf!\xb8\xdb\x85\x9c\x14\x84\xa1'\xc4 \xa5V8H\xad\xc2\x81\xf3<\xc2\xc1\xd7\xca\x18Uj!\xb9=\xcdJ:\x9f\x98\xff\x94)2\xca\xa7}\xf9\xd8\x81\xc2r\x83\xebK\xe5\xb2T\xc2o\xe7~\xd2\xc4\x99SY.l4\xd2\xb9\x8a\xcbo\xf1~}\xa1\xbe\x99\xc3f\xeds\xf9L\x11`>\xa3nz\x9b\x8d\x832\x8dd\xbb\x05\xecN\x9e\xe4V\x83\xb9b\x08\xa5%\x95\x9aXx\x0c\x857\x13\x7f\xe4g\xfe\x98O\xac0bgX+\x92#i\xd0\x1e\x06\x82\x04\xc2\xab\x902)\xd0\xef\xff~\xc2\xfbuna2 \xa9|\xccx\x00\xe1\x0f\x1a\x07\xcbt\xab=\x10\xb4\xec\x88S\x14sJ\xc5\xccIo\xa7P\xcc\xb8\xa3\x04\xb5\xd6\xdcI\xa1~\xe5[\xa2\x91\x18\x06\x93\xff\x7f,\xf3\xb3\x80\xd7Z<_`\x7f\xd0\xd3\xcd\x9b\x19?\xc8j\xfb\x8b\x05_\x10\xbc\xa8\xb6c\x7f4h\xec7M\xdc\x05\x16\xb6O\xce\xcd5!\x95V/\xe7g\xe3\x83\x86\x8d\xdf\xf7\xbdl8\xb9\xd8Du\x96\x19\x15t\x8d\xf7E\xbfs|4\xe9\xa5=\x95\xbcL\x92\xc2\xc0\x11\xd8<\xa1F/\xca\xb2h\xb4\xc0Zb\xb0\xb5%k\xe2_\xea\\G\x04\x15=\x94\x89\x1a\xfctcq\xfbD\xbbS:\x07\x1e\x8f\x13\xeeJ\xcd\xad\xa6z\xba\xef\xcbL\x84\xae1:J\xbe\xe9\n\xa5\x8c-\xb0#G\x06]y\x06\xcb\xa7+;\x8c9\xbc\x997j2\xf9\xb8N\xca\xcd\xd9]h\\\x99 \x87\xc7\xa3\xb6\xa1\xc6\xe6\x18Bo5\x86\xc6:\xcfelb*\xc0N\x90\xdc\x05\xd6@\x9d\xf5\xaf\xe0F\x8d\xf7)\xfa\x07\\\xa6\xf1\xa12\xfd\x0b\xe5\x14\xa7xL\xbf\xc0\x85\x05v8\xb9\xb8d;\x0b\xccm^\xb4\xa6\xcc\xb1\xb0\xff\x8e\xe0\x0b_n\xfb\x87_r\xfba\x08/v\xf7\xff\xf1m\xa8\x96I\xea\x1e\x8b\xd3\xbf)\xf6T\xbd\xf8X\xbf\xa9P,\xccG=\x9eL,\xe6\x87\x19\x1fLQ\xae\x17E\x01w\xc2\x86rZ\x03\xfc2\xc86\xfe\x92vh\xa6\x91C\xc9\xa9\x13\xef\x02\xd9\x7f\xe9\xd8d\x85O\x8c\xe7\xac\xb5\x0c\x95\xb0s(\xb7d\xe70\xe6\xd4,\xa4\xd7\xa8o\xf6YZ\xa2\xb9w\xc9\x89\xa5Lm\x93\xd0\xab\x1b\x17\x9b\xaaB\x97i\xae\xa46o\xca*\x15\x95\xa3\\\x0b8Um=\xd8\xcd\xa28\x1c\xc4j\x99\x92\x88?\xa9\xa8\xa2\xf1E!q\xc4\xaaE\x8a}n*\xc5\x0fbG(\xac\xb1`\x87EA \x00hx\xd3\x14*\xf1VS.\xf0\xd3\xf2\xc2\x14\xa8Q\x8d\xa6\x87L\xa5\xbf]\xfb\x9e\x18Q\xea\x08\xdd\xfd\x8e\x0c\x90\n\xa8\xc1/\xb7Y\xd6\x84\xe6\xda\xce\xc1J\xd6\x95EN\xce\x9d\xea\xd8\x8c\x7f\xb2\xd0\xec)\xab\xfdO\xc2\xe6N\xd8\x0dm\xf9\xd7kh36\xb0\x19\xc7\xf3.D\xd1^\xbb\xd5\xe3\xfd(\xe1\xdbjy\x14\xd9M\x1b\xd3:\x9a{\xe6a\xc2\xfb0\xcc\x94g\x8bY\x96\xf8\xbd<\xe3m!\x80\xb7\xba\xf6\xdb\xbfN\xb74LlzM\xa7q\x89;\xfe\x87\xd7\x17\x8f]\xfbA:{\xec\xf4\x91\xd7~0s\xe3\xe8\xef\x1f\x1f\xa8d\xc5Ug8\xba\xda\xf5i\x98\x8a\x85\xd1\x88\"\xf0\x94\xae\xf5\xe2\xf2\xf2\xcd\xc5\x9d\x9d\xad\x05v\xbd\x05\x97\xe8\xadj\x86P\x92\xda\x82\xd5\xe6c\xc2C).\x11\xd3(O\\\x8bE\x00\xee\x19\x1a\xfc\x89\xfcBm8s\x06\xee\x0eZ\xd2w\xbc*B\x08\x95;mgE\xd6\xe6\xa4N{\xac\xbb\x94\xach\xabN\xb2\xe7E\xfbaU\xa4\xbbK\x0d\xac\x10\xbbq\x86\x85|\xbf\xb0c\xd6\x08\x8f\xc3l\x14\x88clg}\xd9a\x1c\x0d\x12'\x1e\xf2\xa4\xbeP/\xe1\xce^Z\x0f\x0f\xfcp\xcf\xef\x1f6\x17\xd8\x91\x9b\xbc\xc0Z7{\x81\x13\xeeY\xd2\xa8w\xd4EK;\xb3(\xd0\xae\xcc\x12\x96\xa3\x850w\xff\xafI\x15\x05\xf8\x9fq\x8d\x91\xe3\x8aa\x7fJ\x86\xa6\x01\x04\xb1FN \xd6\xeb\xd9Gx\xd7\x17/m.\xb0\xd6K\xa4|l\xf9\xba\x18J\xccy\xfc\xe7\xb84|\xbf\xf7!\xfd\xae@\x8f\x7fNA\x00\xf8K\nH\x83H>)\xf1\xec\xf1_P\xe0X\x02\xfe\x1b\x02\x90\xb3\xbbGvDz\xa6\xb6\x9e=z\x9f\x02d\x94\xac\xb5\xca(\x85\xf9`,\x02\x90\xe3\xc8\x16?\xb2\x03{\x12\xf8\xd8\x0e\x94\x07\xf2\xd1\x13;P\xf6\xf9\xe8\xa9\x1d\x08\xb3\xf8\x1b;P\xe2\xfc\xa3\x7fm\x07\xca\x85y\xf4?\xda\x81\x12#\x1f\xfd\x1b\nL2\xb9\x02\xbf\xb2A\xc6r\x8e\x0f\x08]\x01\x18L\xe3\xaf(0\x05\xfc\xbfGhE8HEo\x9f\xfc\x84\x02\xee8\x89\xc0\xe7g\xff\xfc?`T\x8c\x06\xd2\xee\xfa)9\xd0\x1a\x80[[\x8c\xe2>\x1c\xf5\x7fO\xaa(\xc8\xcf\xff%\x86\x88S\xf0\xec\xfe=\xf2Y\x10>\x89\x88d\xe9bID\x1fcJ\xe6\x00F\xdf\x7f@\xbe\xfbr\xc1\xee?$\x80(]`\xado\xe3Y\xc4qpxN1#+\xa9s\xe28\x89\x0ej\xc6-@\xfc\xb6u$\x8b\x89\xf4\xac\xb2l\x83\x06|\x80k\xa4.\x10\xcf\x7fI\x0e\xb1\x81\xfco\xa4N\xea\x0f\xe4\xc0\xef\xff\x8cT\x12X\xf0\x07\xe4\xeb\xe1\xa8f\x17\x04DM\xe6\x9f\xe3n2?\xf0$\x8d&L\xd1@\xfe\x07\\'\x17\x02G\xeb\x13\x82Q\xea;!!\xfbn\x14\xfa!\x1c\x14\xcc2\x9d}\x05\xf9\x08S\xf5\x9e\xe3\xee\xb9\x11\xd0\xab\xfb\xefZ\x80Z\xcf\xee\xbdG\xa0\x89\xa4\xbaO1}\xef9\xc9\x98\xcb\xb1<\xc0\xfd\x9du\x92}.1\xfb]\xcc\xbb{\x05\x08\xa3\x1a\x80\x80dS`/\xd9\x13\x80?%\xf3\xee%{\x99\x06\x92%\xab]\xeb\xb3 s\x90\xfd\x81\xcf\x98\xe7\xf6\xbc\xdby$\x97\x1dK\n=\xee:y*W\x0e\x8f\xec\xac\x04q+\xac\xd7\x08\x1b\xc5\xd9\xa1\\\xf4G\x98\x92\xf4\x04~X\x91\x83'a\x94\x8b:oc>qV\x82\x82\xc0Ok\xc0\x99\x9430\xf9\xeb\xa9\xef\xff\x0b\xfd\x0e\xa2\x0c\x1dB\xb6\xcf9\x1co\xd2\x89\x96\xb4\xc8\xbej\x00f6=\x7f\xe0\x02\x05~\x88\x05O\x01\x02\xd1\xf3\xd9/0 \x16\xb0\x1c\xaa\xe1\xc3\xdf\xf3\x07\x91\x17\xc1\xb9\xc4\xb2\x93\x80\xc5\x01l\xe4GX~\x12\xc0\xcc\x1fq\x80ZF\x93\xdeV}~D\xd0\xdd\x1f\xa4\x99#\xb9\xc5_\x90\xa9\xfb\x83,\xf1\xa5,\"\xf4&Q\xe6=rr\x8b2\xd0\xc3{\x98\xd6\xf4\xfcAnF\x8e\xa9W\xcf\x1f\xa83\xfa\xd02)s\xda\x1e\x92\xe5\xd8s\x92h_\x80\xde\xc7\xd4\xa2\x178\xee^\x10\xdd\xe1J\xb8\xfa\x10\xcb,\xb2@z;w\x12 \x7f\x0f\x0b<\x12\xae'%K`5\xa1R\xc2,\x0d\x968*\xa5\x02\xb8\xb5}\xf6\x0b\xb2;\xe5R\x89\xbaT~\xf6\x1e\x96\x02\xa4\xae- \xff\x023\x86^\xb077/\xeb\x90\x03\x12\xec\xcd\x9d\x94\x10BE\x82\xbd\x13\x00\xc1\xc2\xb2LO !\x98\xa1\xf5B\xb1\x18g\x9e\xfd\x183\xda^\xc8o\xe7\xbe$\x07\xf7\xff\xda\x02^\x07\x94~\x8a%\xc0^\x08\x80w\xb1\xbau\xd6\xc8B\xff\x07\xaebd!2nh\xeb\x01\xe9]_i\xdb@\xfb\x99\x0f\xe8E\xe6\x1a\x1d\xf4@J\xf9\xf0>\x05-\xaf \xc8\xcf\x7fa\x81\x04\x12\x82YT/:\xf0\xa0\x0eV4\x04D\xd6\xf9\x19^\x04\xd1\xda\x96\xac\x83%\x11\x01\x91\x07\xd6\xb2\x08\x07\x1e\xd4!\xa8\x10\x1dx\xb2\xce\xcf\x08O\x8f\x0e.\xc8*\x96\x01H2\xfa3r\xf6\xa2\x83\x0b\xcb\xb2\nVo\x05D\xb2\xce\x9fciD4\x06u\xe8.\x1c\x0ce\x9d\x9fa\x92,Z\xdb\x95u\xb0\xbe\" \x92\x95\xfc\x9c\xf0\xfc\xe8`\x08u\xb0\x02$ \xb2\xce\xcf\xc8i\x8e\x0eF~\x08\x04\xea\x01\xa1\xf2\xd1\x81&^\x0f\x08k\x8d\x0e\x0c\xd5}\x80\x15\xb5^t\xb0\x0b{\x8e\x95\x0d\x01\x01<\xc1\x82i/:\xc8\xa1\xce\x7fk\x81\x00\x9e`\xa5S\xb4\x06{\x8e\xb5N\x01\x01<\xf9\xa5\xa55\xa8ci-\x07<\xb1`\xddeY\x85\xd0\x92\xe8@\x9e\xfd\x9f\x11\xca\x16\x1d\\\x06\xd4\xb2\xec\xece\x89[?'\xb49:\x18C\x1dB\x95\xa3\x831\xe0#V\xb6Dk\xb0j\x844F\x07\x97a\xa5\xb1V'Z\x83:XA\x11\x10Xi\x0b\x0e_\x86U\xb3\xec\xf5eXi\x0b\xfa\x8c\xa1\x8e\x05y\xc6\xb0\xd2\x04\x0b\xeae\xe8\xb3\xca\x98\xf6k\xb2o\xf5\x80qO\xb2\xf7\x8f\xf1a=\x0bZ\x10\x95\xb7zF=\xfa\xdf \x84\x8f\x84p\xf7\xec\xad?#\x90:\xc9>Us!R}/\x8d\xc4:\xff\xe0\x07\x96\xefR\x85\xff\x90\xc8#i\x14\x0c\xd3\\\x02\x7fEHv\x1e\xc8m{\x93lu\x1e@j1\x1bH)o\x7fj\x01HM\xf9 \xb6L\x08\x08\xe8\xcax \xce\xe6F\xdf\xb35\xa7@\xb8\xd6\x92\xb6E~\x8a%3\xd7@~J\xea\x80\xfc\x88\x89\xbc\x12G\xefar\xe9:\xb16ta\xf9\xcbu\xe2^\xa2d\xc3\xc7\x98\xd5\xb9N\xac\x9a|\x8c\xf5\x7f\x01R\xb5\xf0\xe8\\'VB\xecc\xcc9\x96\x9c\xd8\xcf\x9c`\xd9\xef\xf7y\xc2\xc3\xccw\x02\xc9\x14~\x82w\xdaubPY\x1e\xff\xe7\x7f\x8f\x1bq\x9d\x04\xb6\xf3-,1\xbaN\"\x15\xd3_\xd3\x05;\x0c\xf8!h\x17X\nqu_\x8f1\x82.\xe9\xf6>\xc5<\xd35\x10Z\x87{\xbe\xd4\xc7\xc9\xb2\x18\x08\xe6YKJW\xf8\x14\xa3\xb4\xab\x01xc\x96J\xaa=V\xc0\\7W\xf3\xa1\xa3\xce\xe34\x95\xc7\xf41f\xf6K\xb0e\x9fb\xb3\x8b\xab\xbe\x93\xfdW\x93\xf9\x18\xcb\xa9K\x02\x1086\x90[R\x1b\xb1\xce\xe6J\x7f\x86\xd6\xc7\xf8\x84.\xf10\xe3\xc9\xb2\x1c\xc4\xc7\x98\x1c\xb9\x12\xe8\xd9\x81K\xfd\xc4\xbe\xdfZ\x9f\xc3D|\xe9\x02\xa8\xd6x{\xdc\xa1\xfc\xfe\x0fdC\x87\x1c$\xe5\xbf\xc4b\x98\x84\x8c\x9c\xc4\x0e]\x1a\n\x12\xfa9\xedF\xaa\xcd\xa4\x17\xb0\xe4\xfd\x82l\x00\xa0\xc6\xaf \xd5\xf0\x13W\x91\x1a,\x9f\nP\xc0\x9d$\x89\xf6\xb56\xf2\xce\xffY_\xc6\xe8\"\xef\xfc_\xd6B\x1eX\xc4\x9e=\xc0\xb2\x8a\x02k\x0d\xf8\x01\x96K\x14\xdcS\x06\x9d\x07X>Z\x92\xf0e%\xd0c\xd9E\xd5\x16L\xf5cL\x9c\x15l[T\xfcs|\x9a\xa0\xd9KF\xd2\xc3B:\xc07\xb5\xb0\x87%u\x00\xef\x18y\xcf\xb2\xba\x92c|\x88\xb5z\xd7\x07=\xd3\xb6\x1f}}\x8c?\xc2\x07\xd2\xf5\x93\x11\xd8^\x9fb\x0b\x82\xeb'\xa9B\x8b\x0f\xb1\xcc\xb5$\xd4\xb7}?\xe5KQ\x98Ey\xb2\x1af|\x908\x923\xde\xc3\x87n)\x88R\xbe\x94'\xc1\xe1r\x94\xf7\x02\xfez\x1ee w\x90-1%\x8b2dc\x82\xbc'\x97\xe6\x97X\x0c\x93\x90\xdc\xcf\xac\xc0\xa5\x08\xac\x89\xcf\xee\x91\xe3\xad \x0b\xb6\x1ap\x03\x83Ey\xd7\x80\x88\xfd\x16@\xb7k`\xa3\x91 Y]\xdbw1\xec\xff\x8a\x02\x80\xd5\x12\x16\x14\x8d\xe2>L\x07Kb\xae|\x19a\xc4\x15\xdd\xb6\xd5\x0c\xf8\x01`\xd7\xdbx_\x8d\x99\x90p\xca(\x1chv\x8bI\xddR\x14\x0e\x92\\ux\x1f\x0b\xbaK\x05\x0f!\x18V\x80\xf0\x11\xb3\xe1\x15-#\xb5t\xdb,\xb4\xfaNw N\"\xb8\xd6\"\xacI\x82r7\xb3C76\xaf\nR@d\x9e(>\xac\xfb\x9e\x02g\xc0\xe7q)\xca\x05?i%\xa2e\xa6\x90\xec!\x99M\xee9I\"W\xe7}26 \x93\xeb\xf3>^\x1f7\xe7\xb1\x84<$s\xcdy*9\xc7C\xacM\xb9y\xa0\x97\x1b\xdbv\x01$\xa7\xf5>\xd6A\x96\x94\xbd\x95\xf0i\xf8~\x0f\xab\x9an.\x84b%\xf9\x126\x92\xc7J\xfe&\xd7:nn\xe4e\xc2\x96s#/\x13\x11+\xd7\xf2\xf2\x03K\x83\x11\\\xe4\x91c\xaf\x84\xbc{O,\x02rn\x90\x92\x90T \x92\"\xe0\xfbX\x8dv\x05y\xe7\xb7\xe3\x84\xbb5\xdb\"\xe1i\xee\xd6mN\x12\x1cjc.\xd6\x80$\xb00\xe7\x12\\\xcd\x93D\x1a\xe6?\xc6J\xb7\x9b'c$\xb3\xd0\xad\xd7E\n\x91\x85N\xbc~d\xea\xba\x87\x0e\xaa|\x83F\x04V}\x83v\x0f_\xc5\xb8\x87\x81\x9b \xda\xf3\xec]L\x90\x97e\xaep\x01z\x13Sc\xaf\x00a\xc1\xd4s\x02}\xa3\x81\x0f\xd8\xb2\xdeh\xd2\xdc\"\x00~\x8aq\xde\xd35(\x00\xc4\xb171QXv\xd2!\\\xb0\xe1\xbd\xf14\xe4\x01f\xea^\xc9>\x8f\x97\xd5\xeb\x05\xd2\xd3\xe0\xd7X\xc8X6Z\x15\xde#\xcf@pc\xcb \xb3cv\xe2\xc1g,\x1e,\xdb\xb5M\xf0\xf5\xf8 >\xb3\x9e\xd7\xb0]z\x1d\x7f\x8a\x8f\xf3\xf2r\x94%\x0e\x984\xdf\xc7\x94\xd7\xf3\xa2,\x05!\xe41FQ\x8f\x0b\x0e\xff1\xd6\xe7\x969p\x1e\xac\x18,\xf3\x00\xae\xbf\xc8\xdc5\x00\xcf\xde+\xe9_\x18i\xbd\xbe\x9f\xc2\xd1\xf9\x00\xbb\xe0,k\x85 \x8f\xc0\xd3\x00\xb28\x17\xe0B\xe9\x03l\xeb\xf5\x86\x0ep\x8a\x9fb!Y@`=\xb1\xcc\xb0\xec;n\xe2g\xbe\xeb\x04\x8bun[\xa52\xa06\xfc\x1a\x0b\xa7\x95\x12B\xd6\xd5mQ,,J\x9eW\x9eT?\xac/\xb2\xa3\xae\xeb\x7f\x8d\x8dx\x9e\xefH2\xfb\x10[\\\x96}g\x14\x815\x86\xc0\xbc\xc90#Gcs\x9e\x80\xa75\x10\xb9h\xd8 N\xad0\xe4\x00\xf8\x03\x07\x04\xe3\xdf\xe0U\xf2\xfc\xd4\x97b\xeeCL\x18=y\x13\xf4 \xc1n\x7f\xec\x83c\x83\x1d\x12\x85\xc6\x94\xfe\x90 \x9a?\x8e\xc2\x03+h\xf9\"\x9ct\x8c5\xde-P\xda\xb1\x1c\xe3\x05n\x94\xc8\x81\xbf\x8b\xf9\x9b\x17\xb8\x89|b\xe0\xd9\xbb\x98\x0f{Q\x10H\x94\xfe}\xdc\xbd\xb9\xa9\xc2:\xb2gD]\xacH*c\x06\xde\x0e\xaf\x06q\xa3Li\xc2?&(\x16eJ\x9f\xc1$[B\x94Pq\x1f\xd3\xa0\xe5([\xb9\x9d\x83>8+:f\x01S\x0c\xae\x01\xd8Z\xc1\xb5\x9d\xf4\xd9}\x8c\x1f+\xb0hX\x0d\xe5\xb0fX\xca\xe1\xcbJ\xd2 \xaa\xc9\x8a\xba\x05\xc2\x83\xd5Fz\"cpU\x01\x1fR8\x9f?\xc1R\x1c\xef\xeb\x860cZ\xd1:\x066\xc3p\x0d\xc07FR\x8bz\xf6\x04o\xc5\x8a \x8b -\x19\x08fy| \x89\xf7\x132\xedA\xaa\x8e\xca\x13l\xe4\x05e\xed \x96\xe2VJ\x86_\xd2\x7f\xe0\x87\x19OdW\x7f\x86 \x13\x87K\xed\xb71\x93\xe2\x01\x0c\x0d\xef8\x0f\xcc\xd0\xf0\xda\xaf\xe8\xe8\x0b\xbc\xc6\\\x03H'B_\x94c\xc6\x04IBR\xb8\x86%@\x99ky{\xe4\x04\xc1\xb6\x91\x08\x7f\x81\xe5\xe3B\x17\xb5\xd7\xbf\xcc\x13\xdc\xc6{\xd8Y\x84\x8fRI{\xdf\xc4\x9cS\x00\xe6NH\x10V\xa3$H\xba\xbe\xbdI\xfa]?\xbf\xc0Z\x9f\x91\x83'-\xef\x9f\xe1\x0b8\x1e\xaa\xce1G^\xd1.\xfe\x0474\x80`\x87\xd1\"\xb0M\x8e\x1b-\x82\xe0`\x0cT\xf4!\xc1\x80\xd8IR\xe0\n\xd8*\xc3\xb5\xf4\xfe\x18Sx\xe5\xb4\xfb9&\xd6+\xc6\xd9\xfbs\xda\x8f\x01\xe1Z\x02$\xb6\xf67\x04p[_\n\x12\xba\xc7o\xd7\x931~[y\x97\xdc\xc7k\xcdo\xa7\x81\x13f\x83,\xb1\x1fT\x00\x07<\xb5\x9f\x16\xa3\x07=\xa6#\xcd\x1dy\xc4\xce\xd8\xaah\xad\xdf6\xa0\x9c\xc3\xb5\xe8}\xcc\x92Vn\xe7~\xe0\xf7\x12?\x97s\xf9)\x16\x18JN\x946\x08\xd8\xae\x1ec\xa5\x81\xdf\x1e\x17\x1b\x8e\xa5h\xaeY\xe0\x07d\xc3\x13Mq\xf1\xa1_\xd1nA\xd8\x10\xc55\x00\xf3m\xaeI\x0e\xd1&W\xd4\xbe=\xc6\xd7&\xbcnCW\xc0tE\xf8\x06|&|i\xe7\x82\xa0\xdb\xb8[\xb0\x96~\x82'\xb0\xa2\"%\xc8IV\xdf y\xc9\x13\xe9R\xff'\xd8A\x8a\x1f\xb8\xa2\xc2\x11\xf2\xd9\x87\xad\xbf\x87\xe9\xd1\x8a\x80\xa4V\x10?\x88\xb9\x9b9:^\x86\xac\xfa\xca\x01${\xf0\x9d@^/S\xdeY\x14\xb03\xd7\xbe\x13\x04\xbe\xbc$T\x96G\xc2d\xcf\x81\x98\x80\xa5\xe6>\x88 \x98\x82\xf6\xf9Hu\xf5K|\xf3\xd0\xef\xfb\x10\xf8\xf8\x9f\xff\x06\xcf\xb3\xdf\xd7\x10Z)\xd0 \xdc\xd59\xcd\xe4\xb1\x9c\xd6\xd7\x00L\xe2\x8a\x01`5\xe2\x9c\x1f\x04\xdc\xc3l \x13\\(ec>X\xec\xea\xdf\x82\x9e\xfa\xb70 p\xc0B\x87\xc5\xaeb\x9e\x18\xeb\xfbA\x16J\xf4x\x0f\x9f\xd3~\x18 \x06\xf0\x9f\xc8\x96\x19\x96\x81\xf5\xb3\xbea\x19\xf8\x10\x9d\x8b\x92E\x10'\xee\x91=\x88\x12\xa7\x1e$\xfdX\x1eb\xc3\x87\x00\xc0\xbd\x00\xe6g\xe7\xa2<\xf1y\x92%p\x0bL\xe6\x14;I\xa6\xfd\x1e\xb0\x10\xdaO\x1cW\xba\xb3\x7fL&& \x92\xa9\xff\x04\xd3, \x12L\xfdc\xbc\x9f\x12rJV\xc2\xc4_\x82^\x96 <\x01 zE\x82\xb0\xe0.@\xf30\n\xb2 \x02\x04}aF$@\xd2\xe1\xfec\xac(I\x08T\xc2\xfb%A0\nl\xfa\x13\xa0\x93P\x0bK\x19\x02t\n\xa6\x85e` \x82\x06\xb1=W\x80\xbe\x03 l\x13\xe8'\x0e\xb0\x97\xb7\x08%HT\xe8\xc3\xbbX\x08?\xa7y\x05\xd9{\xa3\xfbb\x81p\xa0U\xaf\xff\x07\xf3\xe2\xf3\xca\x08\xfd9\xdevm\x9d\xfe\x1c\xb3\x17Y\xc3\x13\x12\x08^\xb8\x81\x81\xe0\x15\x18\xc0\xcd\xed\x13l\x970\xa2\xc9\x13L\xd6\x00$\xf9\xfb\x13L\x8e\x15\x0c\xe6\x8a\x91~\xc0S5Yz\xf3.`0\xc8'\x988\x9c\xd7\x1c\x0b\xab\x17\x03\x0d\xc0\xec\xf7\xbcTd\x1fb\xda4\x00? ,\xac\x0c\x065\xc5\xfd\x11l\xce\xdbXx:\xaf\xaeN0\xa7\x1e\xa8\xab\x13\x82qpc\x80\x9b\x19Hg\xcfgO\xc8\x1e\x83\xbc\xf2\x04s\xaeApK~\xc7\xd3\x1d\x84\xea\x00\x92\x05\n\x8b\x98a\x0b\x10\x10\x98\xec\xc5\x9ckud]\x96U}\xaf\x82\xcf\xb4\xaf\x01X\xc6\xf0G\x0eh^\xb6\xb6\x06~\xe8$\x87\xab\xf6\xd5\x199\x83@\x9d\xe8\xb71j\x0b`\xec@\xca$\xbaw#\x99\xc5\xb4\xf5)\xd6\xd4\xfd\x91\xb4<={\x80Y\xb8?\x8a\xa5\xc3\xec\x7f\xc2\xf8\xb4:\x8a\x03\x1f\xd4\x1f\xe2`\xe2\x87l\xc1v\xf9\xe5\x87\xae2\xb0\xbd\x8d\xafc\xcc\xde\xdd\xc3\x8a\xb7\x84\xa8\xd0\xfd\x0f\xb1\xbe\xec\x87*\x87\x06\x99\xd1\xaa\xc2\x12\x82q\xea;\xd9\x8d0s\x81\xc6<\xc0B\x9c\xca\x08\x0d\xb1\x1a\x98\x81V\x9c\x97,\x8d\xf2\xa4\xae\xd9Uy\x11\xc8M\xf6$\x92X\xc4\x0f\xb3\xc0I\x86\xd2 \xf7\x11\x16\xda\xfc0\xd3A\x14\x1fa!q5\x1c\xfb\xa9/\x1d\xac\xc0fb![\xba\x88\x89qz\x0bK\xe5\xab\x1b@I\xb0m\xd5\x8f@\xf4!X\xabo\xbc0\xc1\xf35\x00\xdf%\xac\x1a\xae\x86\xf9\x92o \xd8\xac\xb5\n'\xf9s\xcc\x07\xd5 \xff\x1c\x0b\x16~\xed*\xf9Z\xca\xfe\x18\xb3\xf9U\xcd\x15\xc9\xe12\\\x11k?\xdaC\x92\xe2|\xea\x87Z\xf0&49\xf5A\xc8}HF\x9d\xfa`#~\x88\xbd_%DZb\x1fb\xca$@c\xfb 2\xfb\x0e\xeb\xfcS\x9f\xe2\xcbp\xdf@\x08\xc1\xcc\xf7\x00-\xb0\xee\xe1+\xc0?`s\xe8\xaa\xbaq\xc1\xac\xdbW\xdf1V\\\xd4\")\x9e\xfa-\x0d\xc0\xeb\xa8l\x1b\x18%\xc0\xb4\xf1\xf7xm/j\x06\x86y\xff-\x0d\xc02\xca-E6\xff_L\x1d/\x1a4\xc5\x87\xe4\x96\x81`}\xea\xa2\xc1!,\x94\xde2\x10\x8c\x90\x17S\x9e\xc0d\xf0\xce\xde\xd2\x90\x7f\xc0\xf2\xc4E\xbdQ\xd8\xa6uKo\x14\xe6\xf8\xdfw\xe2X\x9e!|\xe6\xf64\x00\x930 \x90\x97\xbfX<\xf9\xbe1\x8abo\xa5=\x03\xc1\xab\xf9}\x18/\xe9\x1d>\xe3\xbe\xbf\xafw\x0b\x0b^{\x1a\x80\x91zo\x90@B\xa8O\xb1\x90\xf5}\x15\x0d\x8cwdOE\x03cn\xf5}\x85qX8\xd9S\xd64,\x7f|\xdf`\x03\xa6\xf1{\x06B\xea\x18l\xc0\x82\xd6\x9e\x86\xfc9&\x9b\xc1\xa2\xd6\\\xf0\"\xae\x99\xfc\x02\xf88\x04\x06\x82W8pJ1\x04\xf80\x06\xce q\xe0\x16\x13\xb3\xff5g\xd4\xf3$\xbe`\xdc\x0f\x0c\x04\xabOk*k\xe6\xaf\xb0\xf8\x14h\x00\xdeM\x01\x80\xfc\x8e\x98\x11\x05\xc6\xb3\xccR \xcc\x8exC\xd7\x1c\xf9\xe2\x9a\xbe\xc4\xc23\n\x1cH\xb8\xf61f\xf0kZ\xab\xc7RK\xa0\xed\x00\x98\x85\x98\x986\x1b@\xc6\xf6\xfd\x14\x8b\x18\x12\xd2\x97\xec\xe0}|\xf9 `\n\x84e#\x01\x02\xe1\x81\xa8\xa2\x02\x14\xc8\x95x\x07\xcfH\x06\xd6I\x81\xe5}\x8a)\x89\xb6\xe7|\x80y\x8f\x80e\xb2\xda;\x98\xcb\xa8\x1b\xd2'\xa4\xa7\xc5\xcc\xf1\xa1'\x8a'\x06\x84\x89z\xe0@D\xf2\x13,\xfe\x0b\x00\x98\xa8\xfe5\xb5\x18\x05g\xd5\xb2\xbf\x8f\xa9E\xd0\xd3\x10|\x98\x03\x9d\xe4\xef\xaf\xb0n\x10\xf4\x12\xb0:\xfc\x91\x0d \xea\\\xa7\x80=9\xecGX\xd1\x16\x904\x00D\xc6\x1c\x12`2\x8f\xd1#\xcc\xac\xd6\x8c\xb7!V\xd0\x03\x03\xc1B\xca\x9a!\xbd\xf8\xf8\x05\x06\x82\xa5\xa4\xc0\xe5\xb0\x13\xefb\xd6\x13\xb82\x16\x15\xaf\xc1\x1a\x90F\xb2\xa5\xf0\x99t\xec\xb9R@}\x1f\xb3\x89\xc0\xe48\xc4\x84QB\xc0\xe2AN\x9d\x97x\xda\xe1\x143\xf1\xc0K\xf2T\x03\xc9.x`\xd2x\x87l5\x18!1 \x06\xf2r\x1f\x9fT\xe9\xf2/\x88\xcfY\x81\x07\xe01GhP%.\x80\x90\x81\xb5\xb2\x0d\x89R\x8f\x8a\x85\xc9V\xb7\xec\xedN(\x89)\x80\"\x04\xb0,g\xba\xd1\xc7\x90\x1cj\xd1\xd2\x12\xf7\x03H\xc7J\x91C\xc0\xc1\xf9\xbf\xbc\x14x\x19\xa1\x94t\xd7.\xf9\x8dc\x0b\x85.Ur\x1b\xc7\xb6\x9ej\x11\xed5\x8ei\x87(u.\x88\xa0\x8dw\xb1\xe9VLZy\xe0\xeb,\x7f\xc4\x1f\xbeT\x06\x02|\xdf!\xe7\x85\xf73\xb3|\xa0\x1ec+5\x0d\xf8 FaQ\xa4j+$\xf6\x99\x80\x14!\xadT\x8b\xa4\xb5[-\xcb\xa8iA)r>t\xa9\xf4v\xee\x0f\x8a\x1e1\x11\xb6\x05'`\x8a[\x8a\x9e!\xa1\xa4\nV,\x8c\x0d\x83\xab\xd8\x82%\x1d1\xd4l\x98p^\x84\x98\xe1\xd9\xc8FJ)\x1f\x1f\xe0S_.\xa0\x90\xe9CL\x9c\xcbe\x8c}\xf2\x01\x16\x93D)\x08\x92)\x0d\x19\x0b,P\xa8:-|\xa7\x0feJ\xa1\x1aXG(\x17\xd0\x07\x00\xeb\x04(\xda\x03\xe3.\x8d\xf4 \x82\xd0\n8\\S\xfc\x80\x0bi\xba\x19p\xc1CD\x1a}\xf3C k\xc9'\x80\x9e\xbe\xb4\xee\xbb\xba\x99#\xf2\x9e\xf1 x\x8c\xd7+(\xf9\x04`\xedM\xc1\xe4\x1a<\xc1\xb4&\xe0\xa9\x9a\xacE\xce\xe0\xa9r\\x\x82o\xd4\x03\x9e\xa6\xa5\xab;,\x81\n\xb0\xb6\x13`\x0dZ\xc0\xf8m\xe5\xf7jYc\x01\xd5`\xb25kO\xaa*\x14\xa1U\xa2\x08\x12\xb0 \xe1\x8a\xeeHrA\x94\x80\"\x95\xb8\x0d&\xcdC$\xc7x\x00k\xd9\xb6|\x06\xd7\x92GD\x18\xd0~:T\x1eOJ\x04\x92X{\x12\xa5\xc0R\x01=1\xb4\x91\xec\x00\xa4\x00z\x93X>\x12E3\x1f\x10\xca\x98:Z\xf9\xc6\xf8\xb9\xa6\xafF\x88dh\x8c\x92X\x98ZS\xaa5\xa1\x95\xb5\xdfk\xa4\x81\xc08}ac\x88\x80\x80`J8vz\xbbg\xb3\xc7\xa4z\x82\x041Rc] B\x92vb\xf8\x8c\xc8\x8b\x06\x82\xed\xbbk;\x0b\xac\xf5]\xfcQ\"\x05\xe5\x9a\x99\xa5l\xa0\x9d\xce\x08\xdd6Ng\x84\x86d\xb5\x82\xa4T\x8c\x16l:QP\xa8K\x84=e\x9a\x9d\x7f@hQ\xc9U\x8d\x98v4K&t$K\xe0:\x97hK\x81\x0e1&\x89\xf3\x83,\xd1\xeerdRy\xe2\x19\xc3\x0e9\xb3ybB\x90\xc9\nV|\xd0>\xb2H\xf3\xda\x07\xcd\x02S\xb7\xfa\x1f\xe3\xdb+\x13.\x83g0r\x80\x16\xfc%\xd6\xec\x04\x80\xc3\xe3\x1b\x04v \xc4\x89\xf71\x91\x1e\xc1\xf7w\xf0\x94\n\xfeT\x032\x96\x0dl\x1e\x03\xb0a)Xa\x03\xb0\xb2y\xe0k\x92\x91\x93\xec\x01\xc5z\x0f\xdf\xfd\x8et\xb6\xc5g\x1fa\x99\xf9\x12H\xa0\xd8\xbc7\x82\xcf\x98\xbd\x8eL\xca*l\xe5\x18\xe9H\xe6{\x98\xb1\x8f\xb8\x93\xe6 \xf7\x8a\x07\xb6\xb0\xf2q\x89{~>2Ndoa\x82{\x89\x07\x81\x1f\xeak\x01l\xf4\xbe\xa4\xd5\x01l\x88\x1bi\x00>\xe2\xa3\xa1\xdc\x9c\xb7\xc9\xea\xfb\xae\x0c?\xfb\x18K:*-\xe8=l(\x19\xf9\x9e\xfd\x8d\xa2\x91\xef)\xba\xf0\x14\x13\xd6\x91\xef\xd5\xa4\xcf-\xb2\xc0`\xb2.!\xf0\xc6\x16^\x1b \x82\xd1a \x0e@R]\xf9\x08/\x81\xcc\xc9\xaa\x13\xaf\xde\xc3\x8cq\x14\xb8\x90\xad\x10\xdb\x8fG\x01\xb3\xb4g\x1e\x1a\xa3\xb0\x0c\x1e9\xf8%\xa6M\x12\x02f\x85:\x18\xf8\xfc`\x1f\xbb\xb0'\x9d\x8c?\xc6\xd4:,R\xcc\xd3\xb1\x97r\xc9S\xa0\xce$\x89\x97}]\xdf\xe5|\x86\xb7*4\x10lz_\xd7w9\x9fa\xae\x11\x1a\x08\x96:C\x93r\x96\xf6S\xce9k\x19\xb9Jt\x89Q|\x1d\xc88\xd6\x14B\xf8\x8c\x15\xca\xd0Pw|\xbaT\x82_\xb2\xd4\\{F\xbd\x8fYU\xc8\xf5\xdd+V*D% y\xc7\nQ\xaa\x02\x85\x99\x88g2\xfdu>p2\x7f\xcc\x11\x1fy\x13KW\xba\xdc\xce\xd0w\xf7\xa6*\x16N.u\x99'\x87\xcd%Ko\xf5`KS\xc8S\xaer\"a[AX\x04l[&\x9cf\xdc\xa3A%$\x82\x02\n\x96-\x7fD\xde]\xe7\xfb\xca1\xf9\x07!\x19\x82 \xaf&\xf4\x86\x17\xf1\xd5\x18\xb6\xae\xf9.6\xb8\x85\x1a\x80\x87\x19\xea\x988\x8a\xd9*,\x0e;\x16\x86:\xce\xcd\x06\xb8]\xdfX9\xd6\xcd\x06O\xeb@:4\xccRI\xef\x13\x96\x1aB\x1d\xd6b!\xc9\x03\x00a\xb95\xd4\xc6[\x028\x9f\x01\x06=\xa5\x030\xd1\x0eX\xb7\x0cM\xb8\x03!\xacCexx\x8a\xd5\xbbPj\x0b\xf7\x08\x0e\xc3Cq\x0f1\xf3\x0b}\x10>\x1eb\xa9/\x04\x8c'\x0d\xad+\x93'V\x11Be\xf2\xc4\xea^h|8\xb0\xba\x19\x1a'\x0eZGI)XD\x0e\xf5E2]Du\x97\x8c\xa5\xb5\xb0z\x13L\xc7P\xb9\n&\x03\xb1\xdc \x92M\xb2\\!\x92\xed\xd278dx\xc5\x15\x8emJ\xe5[\x1c\x1b\x19jM\xdbr\x0e@\x1b\xa3\xddh\xb5\xf5!&W\xa1\xd1[\x1fbkZ\xb8\xa6\xce\xc8\x13:8-\xc1c6\xb5\x1e\x9dM\xb8#Y\xd8[\x98\xbb\xadG\xa1\x04\xfa\xe1@\x13w\"l\xac\xebX\x11\"\x9d\x18\x01\x16K\xec\xfam62|\xd0\n\xf0\xe7\xf5(\xab&\x95\xc7\x86\xc9_\x01.\x06\x81)\x7fQ\x06\xc5b\xda\x86b\xe3\x9d\x0d\xe5\x0c\xf7\xc4V\x9e\xa2\x08\x0e\xcclh\xadX&\xcc2\xd6\xa3\x8c\x86\xe2\xd8ZB\xf18\x14\xe1\xa3L\xb9B\x13I\\@\x8c/\xb4\xbd\xa2r\x87\xb6\x03\xc7N}\xbb\xf0\x10\xf4C\xac\xd9\x02\x0cr\x98c\xe3\xd5z\x94aO\x00r\xe8Q\x19\xe3\x0c`[\x19\xabG\x00\xa1\x15\xb2`\x0d\x8dS\xb0by1\xd5U\x05\xca\xc8c\x1dHY\xea\xb2\x0f\x95^\xac\xd6\x95+p\x06\x93\xd7\xf5(\xab\x93\x07\x9f\xfc+[sT(|\xf2\xd7\xb6\xadV\xa2\x00\xf6\xc8\x93\x10\x85\x04v\x18 \x01\xd6\xa9\x01\x06H\x805\x8f\xf5(\xdbL\xb8\xcb=\xf5\xd2\x0b\xb6\xf3\x95\xe0f\xad\x9e\xfc\x1b\xdb\xe4t\xb1\xea\xba>\xb4P\xac->\xe6I\xca\xcbD\x0fOG\x94\x92\x195\xcb\xc8IdlTHc\xa7EOA%\x8b\xe1Y\xa86\xe4\xc1\xd9\xce{*\xe7\xdb\x03+\xb6\x97K\x15\xcdYX\x84.\x18\x8b9C\x83\xd6\x01V\xcb\x15Mb\xd3\x97(Z\x8c\xedO(k7\x05\n\xb7\x1c\xa2#\x8b\"\xae\xcb\xb9\x07\xbb\x8e\x0d\xfa%x\xb1\xeb\xd4XQ*\x86v\x1d\x1b\x1aK%\x8b\xf3\xf4\x1f\xed\x0d\x96\x16\xea\xc75\xb3Ck\xf4\xc0\xc23\x8bn,\x93\x93\xc0\x82\xccXx\xa2,Qeg\xc4Z\xa4J\x15=Y\x86\x81\x99?\xd1\xd6\xe3\x1a\xa9@\x00\x9c P \xf1mPH\xcd\xf1\xf4o\xe9+\xb4\xa1\x8e\x80\xbbG\xa5\x810\x8e\x02\x1d\\\x88M\xc9!?}\xc7Z &Id\xcc4\x8f\x1b\x88\xb2\x02\xabI\xd6T\xd6\x93\xb4\xf4\x9b\xa9|;D\xc8\xd7qx\x9f\x10\x8b\x96\x81\x10;T\xa6\xbc\xd1h/\xe8yr\xaa\xe2\x96K\xc0d\xa8\xaeK\x9e/\xa7\x07\xbfRD\xb5C\x04\x0dy\xa5A\xec\xc3\xf2+1\x0f\xcb,\x9a\xbfG\xbfrH\xda\xf86\xbe\x13\x0es\x9d-\x96\xd8\xb3\xc7\xfa='\xcb.^^\xd6\xcf\x14\x12+\xd8e\xf3\x82!\xb1\x18\x8cM-B\xe6\xc6\xa6\x16Y\xc6\xb1N\xbbe\x19\xc7\x18\xf2\xcf\xd8 \x17t\xb8\n9\xbc\xe3\"\xfe\x1d\xdf\\\x85cm\xcbz\x1f\xdb\xe9\xc3\xb1\x8ee\xb0\xf5\x06. v\x88\xb9\xc4\xb7\x815\x0b{\x9f\xd0\xdd\xb1\xe1\n\x0f\xfe\x9d\xad\xa6~[\xf8?X\x80\xfb\xc6\xe8Oh\xda\xbe\xe6\x99\x04\x15\xf65\xcf\xb4B\x14W\xa3\xb0P\x9b\xc7\xf1\xd5\xe1\x86I\x11\x81\xef*\"\x03\xc1W\x81Q\xdd\xf3\x99\x91\xba\xac%\xeffn\xe8\xf4\x11XF\x894\x00kc*\\\x1b\xef=Dk\xff=\xd6\x89\xa2\xda\x1797\xf4\x9bM\x9f\xe1k\xed\xc8@05\x8a\xe0!\x98g\x1fa\x9a\x13\xe9\xd7\xce\xb0\x93V\xe4\xa5\x91\n{\xc2\x96\xdd\x8d\x15H\xbd\xf0\x19\xde\xff\x88+\x00Y\xf8\xbeZ\xc6G\xd8\x95iC\x1b\xfeI[\x1a\x80\x0f\xa6\nV\xff5\xde\xa9\x0d\x93\xc4\x824e \xd8\xa4\x1d\x81\xb1\xfdC\xcc\xba\"\x9d\xa8\xe7\x116\xc3DC\x81\xfd\x9fc9&\xaa{\xa112\xa6hl\x06\x8f\x02\xbd&d\xeb\x03\xf3(\xe1#\xec\xb4\x13\xe9\xc4\x12o\xd2Z0\x17,\xcbn(O\x98\xcf\xb0\n\x1bi\x006]o\x8c\xf8\xc0\xb1\xceR\x01~\x83\x19\xe8\x86\xf4\x8f\x90\xe9\xa7\xb1M3*@x\xef#%R=\xc2\x86\x9fhT\xfb.\xec\x861\x9e\xe2+\xd2\xc8@\xb0\n`\\)\xb1\xf1i#\xe6\xa1\xf5\xc5U|\xbdo\n\x16E\xb0_Z\x14sx\xf0\xf0\x11\x96\x11\x8c\xef%y\xc5vC\x0e\xeb1\xa1 N\xe2k\xbf\xc8(\x17\x04)\xc0\xb3\xf01\xa6\x14Q\xe2\x81\xb5\xe7mL\x8b$\x04R\x8a\xd8`2\x13\x17\x16>\xa2\xc4\x13\xb8\xff1A\xe4\xc4\x1f\xa8\xec$d#\x13\xf5b\"\xde\xc6(I\x83\x08D\xb9\xc7\xf8>7J$\xa9zLH\xb1\xfd%\xe1\x0d\xa3\\\x90\x01k\xc7\x0fB\x89u\x8a\xa4O\xc8.\x1a\x08!\x94\xeau\x8f\x07\xb8\xca\x86\x11\xf4\xf0\xf6F\x06\x82\xa9\xc8F\xe1s\x8bq\xb2p\xc7%\x8f\x1a\x03\xc8\x81zx\xa97T\xb6\x06\xb2\xd2\xea;\xd9\x9a\xb1\"q\xefbanc\xccu|\x11!2\x12\xa6\x82k\x9f\xfd\x19fe\x1a\xaa\xc2 \xff\x94\xac\xfb\x98'\x9bN\xc2\xc3l\xc8S\xb86\xfc3|\xd4\xb42\x85M\x06B\xd7\x13\xd8\x87\xe7Q\xd1\x01-\x95\x94\xb8\xf2\x14s\xfc\x92}\x82B\x94m\x02\x016\x9d\xc4<\xcfF\x81\xc0\xc61\xf9\x8b\xe13&}1O\\\xc91\xfe\x19\x05\xf82\x1f\xca\x0c\x05\x8c \xd6\xf3Mlt\xd6\x94\xe7\x01\x99>O2\x1eJ\x81\xecM\xac\x85lj\xfe\x8ayu\xac\x01XX\xde\x84\xa7\xd2\xb1\x96\x1b\xc3S\xe9\x98\x1c\xc7Cxu\x00\x1f\x8ax\xa8^q\xa6\xfeX\xf1P=\x17\xfd\x17\xf8&tS\xf6\x8c\xe9z,;\xc6\xfc.\xf63wX\x9b';\x86Q\xe1S\x12\x07N\x08\xef\xc7\x93\xa4i\x00\x82\x84jx\\\x02\x06i\xb7-\xd5$\xd1?j\xf9\xec(\xc6\xff\x11\x16\x92\x05\x104\x7f|\xb2\x04D\xd7\xc2\xa6\x04\x01\xf3\xa4\x9aE\xde\x81\x93 p\xf3#\xb8\x11\xe4\xe0\xd3\xfa\x18\x0bE\x9bA\x9e\xea\x87\xd9?\xc6h#\xaa\x8d\xc2:\x88:l\x1f\x11\x1c \xf24\xdb\x97c\xfc\x08\x8b\xeb\xf1\xc8\xd6\xdaf\x04\xc9\xa8\xc4\n\xcba\x92\xcc\x83\xb1\x90\xb9\xb4\xa1\x10c\xd9\xa6\xbe|\xc5bml\xa4\x04l\xbf\x8a\xa3\\>\xf6\xf81\xde\x95M\xb9\xecO0\xd3\x05S\xe4}\xcc\x0d\xe3DE\x18a\xc2nL\x94\xf7\xb1<\x1d\xc3[\xf5O\xc8y\xd0\x96K\xfa\xdd\xad\xe9\x9b\xbb\xa50&:\x02\xee\xaaw\x83\xad\xe3(\xdf\xb3\x90\xb6-\x97,5%\xaa\x96\xf6\xda^\n\xab4f2e\xe3\xab\x05T\x8e\xd4\xc2\xb2\x96\x84+;\xce\x13\xccu%P\x87Ya\xe9J\x00\xb5\xc5\x10\x0fh3Q\x16\xc37\xe9\x16i\x08>E\x12\x92\xdaq0\xd1Qht\xf8p\xc1j\x19z\xc3\xc0\xd5S\xed\x98\x02m\x96\x1ej'\xd4)\x89\xfaN\xa0\x04\x00\xac\xb3\x08\xa0V3\xde\xc5\xca\x94\x00\xa698\\\xbfKx\x87z\x7f\xed\x1e\x96D7\x93(\x8e\x12\x9dI\xed\x1e\xc6\xcc\x02\xac\x12\xb5\xe1\xfa\xa2a\xf0\x9b\xb7\x80\xea\xb6-N\xf2\x04\x04\x83\x07\x98en\x1a\xa1\x11\xdb\xc6bc\x91\xc6\x86\xc9Mx\x95\x87\xac\xbf\xfc\xfc\x1b,\x96\xc6y\xe8*\x13\x17\x06\xbd\xae9,&\xd7\xb75\x00\xef\xc8\xed\xbal\x8b\xafk:\x87\xcd\x13\xb7\x0d\x9d\xc3\xec\xe2\xb6\xc1\xd9\xb7\xb0\x80\xf9\xbaY\x15\xact\xdf6\xab\x82\xf9\xfc\xed\xdc\xc9x\x12\xfa*3\x01\xc9\x8c*\xe0z\xf4\x98\xeb\xea\xd8\x94\xd7l\xdf\x15\x91\xc2\x02\xd5\xeb\xbb\x1b;\x0b\xec\xdb\xado\xe3*Qf\xf9\x9c\x98\x84KX\x9b\xd0B\xec\xbd\xbf\xfd;\xcc{\xb6\x8c/5\xde\xa0\xc4@0\xc3I\x1c\x0f\x12\x90\xde\xc3;\x91\x94\xb34a\xfa\xb1\xa5c;1\x1a&\x1a\x80u\xf0\xc4\xa4U\xc2'S@\xe4\x94\x1ea^\x9f\x14 \x97hs*s\x12fo[Z\xd9\xc4R\x97\xb9\xfc\xa2\xfd\xab\x1a6\x00\x10\xbc\x0f0]KLR%:\xe6\"\xa9\x12\x19Bq\x97f\x81\xa8JX\x84J\x8atKXQL\x8atK\x18\xf1\x13\x93n\xe9\x03L\x0f\x92R\xba%\xac\xe9l\x99tK\xefc\xa4O\x8aLLX\xd2(]\x03\x92E7 \x97\xb0\xc2\x94\x14\xb9\x98(\xeae>\x10M\xac5IH\xa8\xfd\xe7q\xbd-\x93\x8d [\x18\x13\x03\xc1\x1c%1y\x9a0\x05HL\x9e&\xb2[:O\xd3]\x1b@\xd4\xb9A\x01*O\x13\xa6\x84I)O\x13\x16\xd3\x93R\x9e&<\xa3-\xe3\xa7\x8f\x15\xfb\xc4@0\x03\xdf2~\xfads\x0d\x04\xd3\xd6\xc4\xe4i\xc2\xc6\xb3\x04\xf24\xe15\xd8\x02\xcd\x91\xe0>8\xc3b\xad'\xd1y\x9a0kM\xbc\xc0\xa4\\\"\x87\xdf\xe4p\"\xf8V\xe4p\xa2 \x15\x17Jh\x19\xc8\xe9\x04?9\xf0t+@g\xc9%\xd4\x99;\x81\xc9\x92k\xab\x08\x88K\xc6\xc6A\xdey\x0f\xeb\xae[+\xe7\x05\x91\xc3|5\x81W\xfe\xf1g\x8b\xff\x0fvV\xd6E\xd03r5\xc5vcT\x90<\xb7\x9a\x14\x890\xb0=\")\x12a\x90\xe6U\x0eh\xb2BZ\x90 \xdd\xe8\xc4\x16\xf8\x16\xdb\x84'\x93\x17\x7f\x13\x9d\xd8\xe2\xa7\x04\xe7\x8a\xc4\x16\x98ln\xc98\xba\xcf\xb1\x8e\x95\xc8\xcf\xbf\xa1]DR+'\x8cX\xc6\x88\xe3|]\x18\x8bQ$9\xe6>\xc8}\x820\xa7\xaa\xf7\x84\xb5v%g\x17fTE\x89J\xd4\xfbO\xf1\xfd_\xd1\x91I\xda\x85\xe9\xbfl\xaa\x9c\xb5\x0b\x93\nY\x80\xa6\xed\xc2*\xb5*\x86\xf3v\xe1\xd3b\x8a\x95\x12wa\xb3\x16*\xa3\xf3\x0ea\xf1G\x16;W\x8b\xa7\xe5\x04V:\xc2\x95\"Z\xa9\x10\xf8\x06P\x8c\x13EP\xf6.\xeb:\x97\xf2\x80A)\xc2.D)\x9c{\x8bPf\x9ff\xd4\xb2.\xa2N\x97\x85em\x0d,\xb0\x13[F,\xcfr\x13Z(\x8a\xa0\x8cYx:\xc4\x17\xf1\x01\xa1\xceVG\xc4\xa6B\x85\xf7\x1a\x96\xdad1\x925\x0bK\x04\xaaTur\x98R\xa9B\xa5\xa4WX\x8b\xab\x94\xd0\xf8\x87\x05s\x94\xd3\x8c N \xae\x9b\xc0\xbak\x02\x87\xee\xd7D\x88\xf2\xd3\xea\x83\x8d\xa4\xa2I\xa6CP1\xd0\xe9 \x08\xfa\x05\x90\xf3\x81HQEf\x1bL\x0c\x93jf\x1b\x02\xd6\x81\x0cO \x933 d0WLL\x02\x19\xbc\xe8\x89I \x83iKbn\xd3\xb0&\xb8\xa5uQ\xc2\x95\x8d.J\x04\xde\"/ \x1duqGB\xf0/\xcaC\xaf\x94\xe0\xfe\x03\xac\xde'0\xc6\x8e\xe53\xdc\xf8>\"\x9a]\\r;$<\xc2d\x03!\x04\x19\x85\xf0\x90\xb3[d\xea\xc0\x06\xb5-};E\xebh]\x1b\xfb\xc6l)\xc9\x8b\xec}\xedw\x99\\\x83\x08\xd1&\xb9\x06\x16l\x93\"\xb9\x06\x01\x15\xa9)\x082\x17t \xc7ni\xdf\xc3\xf7\xb0\xa5\xab\xe4db\x81H\xc2zE:\xe2\xc5\x93\xf7d\xbc\xb5\xe8:\xf2a0\xefR\x88\xdc\xc9'd'G*\xaf<65\x08\x00\x84\xaa\xfd\x0d\xcd\x02\xb5\xbdqn\x07\xce*\xa9\x16\xf538\xadX\x9c\x01G\x9f\xe3\xf4\xab$\xe3\x1fb!_\x00\xd4E\x1aa!F\xf0\xc5rQj d\xc9bG]\xc1\xfe\x92\xa0\x99\x04\xe9w\xfd,\xd0\xc4z\xf0\xd3\xdbJ\x96x@\x98\x9f\x80\x80\xaf\xd1\x9f\xd3\xb5Ko\xab\xdc!\x0f\xb0\xb0,!P\xefg\x965\xbf\xad\xfcg\x88\xd4t[\x076`\xb5\xa7\x08\x94x@(\xce\xedR\xf8\x82\xb5^\xe1\xd7o\xab\x0b3 \xb4\xd4D_<\xc04P\x82L \\\x0dPuH\xebJK\xd9{\x98\xd5\x97^\xae'R@=\x08j\xe1g\xa8\xc8.\xd2p\xc0\x86\x02\x85R\x8f\x17\xcb\x16\x06\xd8X\xa4h\x8a\xb0\x11Yn7\xd4#\xa6\xf8\x93;p\x83L\x1e\xf2Oo\xe75\x80\xda\xeb\xa5msk\x89u\xc8\xd4hR\x98#\xa7\x0d\x02I\x03mJ35\xee\x87\x98jogp\xfa\x08 U\x80\xbf\xb0\x01d[\x7fAD\xc6,q\x04\x9f\xe6q\xea\x07r \x7f\x83\x95$]D9_as\\\x9a%\xd2\xeeE\xb2\xdfm\xc3\x01|H\xf0Z\x1dL\xc2r\xf3\x9e~\xb3\x9b\xa8\x0e&\x16\x89\x02\xe0d\x91\x19\xe7=\x9d\xaa\xe7)\xe1\xbayo\x94\x83\x07\xf3S\"[\xe7=\x90\xfa\x9fb\xbb\xa2\x80@_\x84\xc0\xe6=\xcdE\x9f`\xb2\x9c\xe6=\xc3E\xb1^Z\x1c#\xdb\x1a\x990*+H\x11\x05\xcb\xb4\xcb\x11T\xd6\x0e\x8b\xb3d\xaf\xad\x12\n\xdb\xa6 \xd0\xdbu\xeb\xa3\xfd\x1f\xb1-A\x80`\xd3\x9f\x12\xec\x11 \xc8\xf2F8\x86\n\xf6\xa2\xfaj\xee\x96]\x8f\xb0\xd6*\xc0e\xd7#\x8cL\xe5`_\xd2\xb6%\xd2\xb7\xa6\x04r=\xaa\xeb\xa5\x14\xe1k\x19\xa7\x0eY\xb3\x80\xca\xaeGD5\x15p\xedzD\xd4S\x01\xacUPs\xb7^\x0b\xcd\xdd\xe1\xce\xd0\xb1_Bm\xc3e\xd2=\xc2\xf7j\xbf\x83!\xf0\x97\x98\xb8n\xc3v?\xa4\x15\x80}\xd2\xd3\x1a\xcf \xf2\x82OO\x9a\xc7\xf3\xe2;\x91M\xf3\xf8\x84\xf8N\x84\xc7<\xd6\xe4\x05[ \x05H#(\x11XM\x84 \x05\x009\xa0\xd8\x1e\x1b\xd2\x83\x05\xb8j@w\x0d\xb08\xa0\x96\xa6\x87\xca7\xfcWXQ\x9405 |!\x9c\xe6\xb1I\xdbJOSl\xa8!\xa55\xb1\xa2\x86Dp\xcdcE\x0d)\x1d\x8855|J\xc45#\xed\xd8\xb6\xbfn]*b\x90eI\xca\xe1\x94V\xa8\xa6h\x96\xa1\x96)\x9ae\x8e\x9a\xa2\x11\x9e\x9e\xc7z\xad\x89\xc0!@@\xd1\x08\xbb/b\xd6\x88\x19\xc6\xc4\xacachjb\xd6\xac\x90\x9a\xbc\xd7\xe9~\xa8\x8d'D\xba\xb9\x03\x91S\x9f`=q\xc7\x113\xfaA\x86>gN2\x80\x9dy\x17Oh\xc7\x91!\x9aX\xaf\xc8\xe4\xe7\xdf`\xe4\xcf\x94\x9d\x9f\xf8\xea\xef\x18k\"i\xc9@\xb0\xa6\xb1cl\x80\xd8\xfe\x92\x19\x08\x96\xa9\x94zF+H\xdd\x0c#\xbf\xce\x9c\xfcclw\xcdx\xa0\xbcb\xdf\xc5\xeclG\xdb\x8b\xf0 \xcc4\x00\xdb\xcd\xb3!O\xf8I\xd1\xd8=\xb2,\x02\xd4\x8f@b'\xd0\xac\x11\xba3\xe4\xf0\x06*\xa6g\x99\x06`\xb6)\x01\xe9\xa1\xc0\xf7\xdf\xe0\xc3)ac;\xc4w\xf7J\x197\xf1A\x91\xf0:cJ5\x03\xe2[\xbf\xa2/\xf5gC?T\x9e\x8d\x98\xdeU\xb3\x1dbh6\xdcS\xb1\xbdtD\xf5\xe3\xb9\xb0\xb1\xb5.N\x066\xc7d\xc3(\x11X\xf8 \xe6\x1c\x86\xbb\x93\xb6t<\xce\xaf\xb1%\x1a\xa5\xdb\xc0\xc4\xce\x92k\x03\x8bq(\xd1\x06\x99\xa0\xba!\xf9\x84\xe0\xa0\x00\x80\xec\x8d\x15z\x00\x01\xc1\xf8\x88\xa0\xa8\x00\xc2\xbb\xb9XP\xc9\xea\x1e\xe0\xce\"\x0e>B\xd8n\x99\x81\xd7\xee\x03r\xd2\xa3\xb8\x07\xe7\xed],\xd0dQ\xac\xd3\x18\xe3\xa1\xed\x18\xdb\x06\xa6\xed\x99\x81`\xca! *d\xe3)6\x1bdQ\n\xc3\xc6rSVx_\x93\xa3\xb6\xb5\xb8,\x99\xe4\xdb\x84\xb0$\x0e\xec\x91\x05R\\\x9f\xbf\x87\x15.\x0d\xd4\xde\x0b\xefaA\x0d\xc7\xee\x93\xac\xea4t\x9f\xa4W\xd7E@F\xc6HJ\xe2\xfa\xc9\xa5\x9a%\xac\x9f\\\xafe\x89zU\xe5\xd9/\xb0IL_\xc9\xd9z6\xb6\xc1\x8f\xb0\xdc\xbb\x93\xf8q\xc0\x97\xeb\xe8\xb2\x80\xaa\x9a\x96\xe1\x02\xea\x7f\x88]\x06\xb3\xc4\xcf\xd4\xd6~\x84e\xa3,\x89\xf9\x1d\xe5F\xf5gx\x0fw\x8c-\x00k\xbe\x99\xb1\x05\x10\xa2\xa5nz0\xfb\xcf\xd4U\x0f\x96_v\xb4\xf9\x9f\xa0\xb7\xb6\xff\xe3E\xd81\xcf\x0f\xd0>4\x04_\xc0d\xfb>\\\x8c\xdc'\xdb\xb4\x1f\x0d\xb9\xe3U\xf3K\x12\xea\x08\x85\x90w\x13&1\xbb& \x1e\x1f\xba\xdc@\xf0~\xefj\xd1\x07\x8b*\xb9\x96\x960?\xcau\x0d\x0c\x10M\xe9\x00\xfb\x0f\xf0\xb6\xec\xf6\xd4\x93\xca\xf8\xa67W\x80\x7f\xc0s\xde\xed%\\\xc6y\x7f\x86\x97,7\x10L\x13wu\xb4>\xde\xb3\\\x030\xfe\xed\xc2\xa8\xb0\x1c\x93\xc3\x98\xf0\xa9\xcf=\xed:\x809\xc6\xae \xd6\xc7\x04<7\x10LZs\xe3\xca\x89M]y\xe1?\x88\xf9\xe1\xae\x16s\xb0\xd8\x91k\x00V\xd7vM\xc0<\x16as\x03\xc1\x879\xd7\x9e\x85da\x86N\x02\xeen\x98d\xe6& -\x1ern\xde\xc5\xc2\xdaJ.\xdf\xa7\x12\xa0w1\x95\xca\xcbOWY\x80*6\xe5]l\x1e\xcd\xcdC\x18X\xfc\xda\xd5\x11\xf2X\\\xcf5\x00\xbb\xedC\xb0\xed\xc7\x98\xc1\xee\x86\x9e\x8e\xa9\xc5\xef\xe5\x00\xc8\x84\xd4\xe2Ce\xc0:\xa6\x16\xd3sY\x00\x07\xd5\xe2{(c\x8a}\x88\xf1SBt\xb6\xff\x07\xf8\xa8\xed\xaad\x0b\x9fa\x0c\xc95\x00k\xf4\xbb\x86\xc5c\xcd-7\x10L\x04\x9b.\x1cw\xe3\xc2\xb9\x86\xd0\x95\x02f\xa9Wv\xda|\x1f\xdb\x8c\x15\xb8r'KOh\\\xbd\xb3\xc5\x8a\xc5n,\xa4\x81b|\x18\x9eW\xe1\x96\xfa\xd8+\x98\x9c\xeaX91\x9aw?\xc8\x19\xd2%\x8a\xa7\xa4\xc8a\x8ak\xb77\x8e\xf1[MX\x9b\x94E\xd0\xad1\x96awU\x08\x14^\xe4\\}\xc7\xeb*\xbe\x0fm\x15v\x8d\xc1\xfbs, \xe6\x85-\x9cn\x93v\xbf\xc4\x95$\xa4\x187mSa\x10x\x7fb\x99=O\x0c\xa9\xc1\xe7)/?\x02e\x01jRC\x16\\9\x19~F6Z\x03\xb0\xd8\x92k\x0f\xaa_`\x82\xbbkD\x1d\xc2?\x8c\xa8\x83U\xb7\xdc\xbc<\x84\xeb\xecj\xdd\xe83L\xbbr\x03\xc1\xf2w\xae\x9d\xbb0M\xca\x8d\x0b\x17\x96ps-\x0b\x90\xd5\xdeUy\n\x08\xe1V\xdf\xb1.\x97\xef\x1ba\xfd\x11\x96\x9d\xc6N8\x80;\xc8G\xb8\xb9\xb1\x934\\\xab\x8c\x9dD(\xce\xd2c\x01\xaf\xd0\xd8I\xc2H\xe8\xbe\xf0\x9a\x06\xc6\xc2\xb1\x93\xd4\\\xc6\x08\x88o\x0b:\x17\x80\xfa\xb8\xc6\xb1\x16\xa7,\xed%Vz\"\x00\xe0`\x8f\xe5\x86\xb1\x93\x18O\x0clR\x11\xb0\xea\x1d\x03\xbd\xd2-\x97Q7\x0d5\x85*\xa6\xbd\xe62\xca\xc0g-\xa4-\"\xc4\xb6!`H\xd3\"\xaf\x03\x97\xca\x18\xaaH\xfc\xa1/+\xcd\xfa)f\xe1c\xc53\x9e\xe2\x83 \x002\x8a\xef)>\x08\x97A$\xc4\xe4l\x0c\x9f\xf1\xf0\x8a$f\xb8\xeb\"\x87\x19\xee\xa1HaFFe\xea`]H\xb6&%\xaf\xa7\x98\xe3^V\x9e\x9c\xf8\xa6m\x0c\xdfI\xea\x991\xe7j\xb9\x1e`qx\xcc\xb9\xd2W\xb1\n1\xe6A\xe0\xc3\xbd\x02&w\x97y\xa2\xda{\x93\x1c\n\x0d\xfa\x11\xad\x93\xd5\xd5\xc8j\xca\x97\x13\x9bb\xb9T\xc3\xd5\x13\x17u\xd5\xb7y\xec$\x8e\xf2+\xff+,B\xebR\x85\xe5\x07#3}\x04\x04\x13\xe5\xcbZ\x0c\xc7\xc2\xf6X\x030\xee\x8e\xb5\xc4JQ\xdf\xe4\x8e\xb4dz\x1c\x9b\x9c\x8b\x96\x0c\x89\x97\x8dx\x86\x95\xf1\xb1\x81\x10:[\x1b\xef=6o\x17\x92sg\xd8\x16!R\x86ma\xc5z\\\xba\x01\xb6\x90\x8b\xd2-\xb0\x15j\xeeKj\xa0\xbc\x8eZ].\x0e\x17\xd6\x00\xc6w\xfc\xc1\x1dG\xb2\x82G\x18\xf1\xafh\xbfV\xcc\xfd\xf65\x00\xf3\x9d}\xee\xa9\xf3\xf0\x18+\x00W\xb8\x07Q\xbd\x0f\xf1\xe8\xf65\xe4\x1e\xde\x17 \x81C\x89qj\x9f\xfb*[\xcc\xdb\x18\x97\xafht\xc3\xf3\xd9\xd7\x00<\x9f+\x063\xb0\xa0\xb3o \x98\x94\xec\xdb;\xdfO\xac\xa7g?\xe1N6\xb4\x82\xae\x18D\xc2\x87`\xdf \x12\xd6A\x0e\x94'\xd4C\xcc\x04\x0f\xd4\xce<\xfb\x05\x16\xc0\x0e\x94\x13\x14\xd1\x9c\x0e<-\xfe\xe0k\xe67\xf4za\x9b\xc2\x81\x06\xe0\xfd?\xd0\x0f\xb5\x90\xb7o\x0f\xb4\x8eL\x9e\xbb}Cf#\xc06\x90\x03\xf9\x15\xab\x00\x07:\xbd$y\xcb\xf7@\xdfA\x927|\x0f\xd4\xf3d\xe4!\xdd\x03\xfd\xe2\x0bf\x05\x07:\x99\xe0Gx\xaf\xde0\xe8\x80\x95\xef\x03\x03\xc1,\xef\xa0\x88\x0d\xc1l\xea 2\xd6A\xb2\x91:<\x9d\xbc\xdc{\xa0}>\xc8\x83\xbdo\x18L\xc2\xc4\xea\xc0`\x12&\x8a\x07\xc6;\xee#l\x1f<0\n\xd7G\xf8\xb6\xed\xc0\x88\xcc\xa4\xa7q\x0dK>\xd8\xaf%\x00W\x8d\x8d\x0e\x93\xdfC\x03\xc1\xb8yu\x11\x84\x12\x8c\xe6\x87\x0e\xd8\xaf\xf0\xfe\\\xd5$\x0b/\xda\xa1\x06`\xbc\xbc\n\x1d`\xd9\xe6\x10\xda\xc7\xa4\xfd\x90\xcbdBX5\xbb\xaaO\n\x96\xdf\x0f5\x00\x8f\xe7\xea*\xf4\x8b\xef\xa2\x0f}\xe8\x18+\xadW\x0d\xe2a?\x9fC\x03\xc1D\xff\xaaA\x14L \x0f\x0d\xa2`JxU\xd9\x0b\xb1\x08t\xa8\x0c\x86\xa4<\xe8;\x9f\xe1\x83z\xa8\xf4 l\x00\xb8fBQ0\xc2\xdf1\x10LT\xae\x99\x1b\\\x8c\x1ew\x0c\x04\x93\x90k0\x0d\xbc\x8cw\xe03F\x82k\xea\xe5vL\"\xee\xa8\xef\x98\xa6\xdc\xe1\\?\xe2\x89\x19\xc65\x9eDW|/\x1b\xd6?\xa3vM]\x9fb\xc9\xf0\x8e\xfa\x8eq\xe5\x9a\n\x9b\xc6]\xdd\xd1\xc8E\xa6\xa3,\xfe\xa4\x030\xf8\xff=\xee\xe0\x8e?0!c\xf8l^\xd3ar\xf8\xb6\xed\x8e\xc1;|v\xae\x19\xbc\xc3D\xfa\x8e\xc1;|p\xef\xec\xdf\x92k\x85 \xd7\x9d\xfd\x10\x00\xef\xb6\xcc\xf7\xbb\xf2\xaf\xbb]\xd6\xcfC\xe9g\xda\xe6]\x96uY\xd8a\x7fd\n\xb5\xf2\x94\xb34K|7k\xbdj\xbe\x8e\x9d\x84%\xec\x0c\x0b\xdb'\xe7^\xe9T\xbb\x8a\xe4\xf7\xf9\xeftf\xf2\x90\xa7\xae\x13\xf3K^Q\x93\xcf\xf0\x838J\xb2\x94\x9d\xa9\xf6[\xeeTw\x11v\x99\xdfeN\x97\xe5\xec\x0c\xcb\xaa\xdd\x88\x9fh\x84\xcf\xc4Qz\xc99x\xb5\x02\xf5\xfb\xac\xfd\xf2,;sF\x14H\x13w\xc6\x1d:\xc9R\xe4\xf1\xc5\xac\x9dup_\xe2\xd7\x8f\x12\xd6\xce\x8e\x1e}\x95e\xec\xbb,}\xd5VF\xb7<\x07-\xb7Cfo\xbe\xc3\x12\x9e\xe5I\xc8\x8e\xcc\xbdZ\xdb\xc8\xcb\xf3\xb2\x91\xd0\x14v\xd8\x19\x96\xb4\xa36\xb4\x98\x06\xbe\xcb\xdb9;\xca\xe6\xc4\xeat:]v\xe4\x08\x9f\x89\x9d$\xe5\xc9\xcc\xd8 |\xcf\xc9\xf8\x9a\x1f\xee\xb5\x9d\x0e{\xe9%\xd6\x96+!\x16\n\xea\xf0\x99\xc0\x0f\xf7\x96\xa20\xe3a\xc6\xce\x88e<2\xdb\xb1\x8f\xe7\xb4\x1a\x8bhGV\x17K\xc0^\x13\x7f\x9fa\xf3l\x81eG\x8f\x92\x8aw\xc9\x173\xebo\xd5\x97\x93\xeb\xec\xb33lV\xad\xb4\xe8\xf3\xc4<;\xd2\xb4\xa0\xa2\xcc\x91v\xc8\xbe\xc7^\x11\x7f\x86\xec\xbbl\xeed\xe7\xd5\x0e\x19\x81XX\xebd:j.t\xfe\xfe\x83\xf4\xe8\xf1A\x97\xb5X\xab3\x93E\xf2\x0eg\xc9Iy\xfb\x85\xe0\xf0F\xef\x16w\xb3\x19\x8f\xf7\xfd\x90o&Q\xcc\x93\xec\xb0\x9duY\xeb\xe6M\x9e^\x8a\xbc<\xe0\xad.\xc1\xd6 \xe7\x0b\xec\xc8l1\x82N\x97\xc9V\x9c<\xc8\xca\xd3\xac\x99%\xc5\x147\x1a\xc5Q\xc8\xc3,]`\x8en\x89\"\xfb~\xe2\xc4K\xa5\xa2y}\xd14s2\xbe\x19\xe4\x03?L\x17jXA\x1as\xb7\x0e\xc6Tw\xdb<\x90\xb9&\xd2\x05\x96\xd0^\xf4/-J\xf9\xd6Bw\xedu\x9d<\x1b>\xc7\x08\xa2\xe7i;r\xd2\x13Mm;r\x8f\xd2\x05\x96\xd6\xcf+\xe1^\xeer\xd1\xb5[\xbf\xd4\xfaWZ\x84\xc0>P\xf2\xf5n\xcd)\xbcK\xe9l\xdc\x0e\xdb'\xe7\xe7;\x16\xc9\x14@'0\xc87\xa0\x93\x18$\x88W_\x82NaP\xaeA'H\xadT58\x7f\xe2e\x0c\nt_'\xc9\x08]\xdd\xe0\xc9\x13\x9d\xce\xab\xdf20}JX\xbf\x9e\x1c\x08\x02\xc6g\x8a\xc3\xc8^c\x9c\xd96Um\xce\x02\xe3u+j\xe98\xa6\x1d\x0b\x92Mz-\x88t\x95\xd4j\x0e\xfeGw)\xbb \xf3 `G\xce0N\xe59\xc9P$\xcfc~\xc8xG\x93\xa18\x89\xb2(;\x8c\xf9\xcc\xd0I7\xf6CM\x90f\\'\x08\x04Q\x0bA\xd6\xc9\xae\x877\x04S\xb9\x1e\xde@|N\x0d\xb3L\x8b\x04-,-\x02\xfbF\x90J?\xdd\xdew\x06\x03\x9e\xcc\x0b\x8e7\xe3\xa7\x1b\x8b\xdb'\xe4\x9f)O\xc6\xb7\x1b(\x82\x103y\x91\x942\xc5#KtY.\xddJ\xa4\xec\xaa\x93\xe6\xc7\x03&\"\x99\xb0\x90\x00\n\x17^l\xb1\x97{fz\xaek\xcd\x03\xcc\x9f9o0\xefp\xde\xa4=/2+vD\x00\x01 \"\x80$)Y\xd5}\xb0\x96\xad$\"\x10\xd7\x1d;\xf6}'a\x00\x9b*\xfaf\xe7\xbe\x92\x1bl\xbf\x0d\xf1\xed\xd6\x8e\x12\xc6}-\x8cW[\xd1\xde\x07]=\x1d\x13W\x0d\xd8;#\xc5\xe1U^\x10z\x91R\x1c_aP\xfc\xeb\xbb\x9c6\xa2&\xday_\xf6\xa6\x0b!\xdf\x16\xc7\xce\x1cz\xec\xcb\x85\xcdc\xa7\x851\xd5\xf8\xec\xa3\xcc\x94\xf7t\xc8\xb0/\x9fq\x03\xf4\xc5L\xd94s\xb7\x89\x85\xf1o E\xe3\xdf\x12\xfe\xc6\xbfk\xdc\xce\xfe\xac\xd0\xfe\xddLI,e\xffvUw\x8f\x91C\x1d\x82\x83)\x84\x13\xbcXn\x86\x7f\x95\xb8\x17\x87\xed\x85\xf9K\x1f\x89\x15F\xfe\x18\xcee=\xbd\xce=\xfb\xb9MP\x0c\xed6\x93\xc4_\xbf?=#\xe1\x9f\xa3\xe4IY,\x92,\xfc\x99\x18\x88\x8a\x9cR\xd1JZ\x9e\x96\x8c\x1e\xa8Hy\x05!\xe2+ \x91\xd2D\x88\xe4\x9f\x86\xd8\x16\xbf\xe8\x84#\x0d\xaan.\x95-\xee\xceP\x7f7k\x87.\x83}\x7f\xed6\xccvq\xab\x8c'\xdc\x01\xc2+>t\xdf{\x11\xe6\x85\xd3\x06\xfe\xeav#q\x91]\x1d\x92\xbf\xdb\x8e7O\xb2\x03\x7f\xb60\xcc\x0d\xa4[\x93\x1d\x06\xbe\xee\x0e\x1d\xc7\xd8Q3\xa2\x14R\x8a\xe9\xe6\xb1\xba\x14u\x0e\xd3\x91\xa6\x94\xe2\xdf\x92Q\x01\x94\x0d\xb1\x14g\xd8J(\xcb>\xb6P\xbe\x84bn\xfe\xc1c\x7f\xf6}D\xf7|\xd2\x04\x00m\xfdk\x0d\x03\x11#\x03\x92\x96\xf9\xc2\x8e\xc9\x05\xf8\x14\x81\xf3\x1b\xbd\xda\xd6_\xaeQ\x056\xf3\xe6aT\x90l\x00|@}\x88\x18FE\x91-Q\xd6\xbdv\x1cG\xc1v8.X\x8b\xa2H-\xfc\x14!\xd7\xf2\xd3\xf0\xcf\xe4J\xbc\xa1\x84\xc2\n\xc3/;\xfd\xd0>\xe2?\xc8\x7f\xadt\xe5*\x99\xbfJV@o\x8d\x8a\xad\xf2\"\x12\x9f\x15\x0b&2\x7f\x92e\xfe\x95\x9d\xc1c\x18\xc1>d\xb0\x01#\x98\xc0\xa6\xe3\".\x18=\x82\x10\xbe\x82\xec\x11\x84\xeb\xeb\x0e$\xd3\x90V8\x96[\x9b\x86\xc7\xdd\xcd\xa4}\xfaws\xd9\x97\x155\xe3\xd3\xcb=j1\x8b\xd3\xe2\x98\x92\x8b3\xbf\xb0\x13\x87r\x93mV3\xd1^\xff\xac\xe0\xf7\xbf\xff[\xf2\x8c\x9a\x9a\xbdK\xa1\x82\xdc\x06W\x1f\x0f\xe3\xebVe\x91\xef\x84\x8d\\\x99\x81\xbd3\xd6y \x03+\x13%\xf5\x86\xa1Z\xa7GB\xa0\xd5\xe4E\x1d\xde\xd6\xc8\xd7\xe6m\xbev\x18\xf1\xb2\x12\x8f\xe3\xf6*#\xccK[\xe1\x9fB\x89\x7f\xe2\n\xff\x14\x1c\xff\x14\x12\xfe\xc9\x18\xfe\xc9\xe0+(\x1eAF\xf1O<\xcd\xba\xf8'\xd3\xe0\x9f\x04Ug\xb7\xc6?\x127E\xf1\x8f\xdfB/1\xc59]\xd1\x8e\xe9\x88\xaf\x84\xd7?)+E>gV\xa9\x8b\x07\x99\x0e\xa2\xa3MH\xaa\xa2\xfb*N\x88\x15u\x98\xa4Z\xa9\xf1P\xaf\xd4\xd8T)5X\xd1H%\xcdcEz\xa5\xc6\xd6\xef\xab\xd4\x10\xbfd\x91\x7f\xb3\xa1\xa7~\x14\x9d\xfa\xb3\xf7\xf9\xa4&b\x9as\xf9\xb6(\xd2'\xa8\x88\x8b\xd4\x15\xde\x12Lc\xf5u\x12\\Mj\xfa\xbcY\xe7\x90a#\xad\xfa\x92\x97?M\xe2\xc2\x0f\xd1\xdfL\xa3\xbc\x94:;\x08B\xf4V\xc8\xd55_\xa7\x84%\xff\xa9\xfa\xd6(\xe9\x12Q\xf1E\x18\xbf\x9f@(j}\xe6\x87\xc3\xb7c\xbb\xab\x9fKxI\x07\x90C\xbc\xbe\xec\xd8\xa6p\x8cUF\x14l\x91\xa8XQ'\xf1\xd1A\xb4\xff.%\xa8\xf5B\xc0\xedr-\xb1\xb8\x18*ex\xb7\x0e7\x0cI\xc9\xec\x8d_,\xba\xe5LJbU@TA\xa6\xa5\xb0)\x0b\xe7`\xaf\x15\x95\x1e\xb0:\x03\x9cH\xe0\xe9ul+O}J\xf5\xd0\xdb\xc4\x05\xebU\x02\xd5$\xda\xcc4\x9d'SI-\xfd\xb4\xa6-z\x94@\xda\x8e\x83\xf0\xbc\x03e\xe2yO\xae&\x12c\"\x9ekW\xdf\xdcb\\\xcd\"\xc6\xeb\xaf=\xc8\\\xc7\xaa\xf1\x81Z_|\x91\x91\xb9\x10\x13\xecc[0\xb9\xd9\xf8A\xcc!W\x16_\xab\xc6\x17\x99XI\xba\x9b\xf2\x00\xa3jc\xe90\xd5\x8c-\xf0=\x9bUR\xaaa\x02\x83\n\xf7LZ\n\x0c\xf9\xd1q\xd3\xd0\xbf\xf3\xa5\x0b\n\xfe\x94\x98\xd6\x12pX\x13\x98\x99\xc5\x01\xb8\xe4Q\x8f\xc8\x00\xfd\x86,s\xa5%)\x16I\xd0\xdbV\x8a\xee1=\xa2\x15q\x9e\xe9=\xc3\xd8t\x17r\xba\xdd=\x12\x99(J.\x8e\xb2\xab\xe7\xc5\xeb\xb2\x98\xb4\x8d9\xe5\xe7Z!<\xd0\xbdo\xbfko\xe3\xb0C\xcb\x8eY\xfey\x194uo\xa3Pu\xe7\xd0\xcb\xc8\x0e\xc5\x9d\x13\xf6\xdf9\xe1\xe7}\xe7d5\xf1\xa1\xbbu\xa4*\xdf\xd3\x85\xeb\xd6\x0b\x07\xdfNX'\x9e\x87g\n\xa8/\xab\xfb\xabb \xba\x95\x98\xb1\xf8<\xee\x96D\xec\x0ee\x06\x84GW\xa9b\x9c3\xac\x12\xe6\x07\x97dV\x16\x8a\n\xf3\x9e+4\xc5\xf2$~\xba\xf0\xe33\xc5\xf7\x01\x82\x8d\xf5\xd2\xcf\xde\x07\xc9E\xac\x92?.X\x95e\x12\x90\xe8\xe0\xd2_\xa6\x11QU;g\xd5:\xb4\xa1\xaa\xee\x12\xb85q\xc1\xe4\x01\x01\xc9gY\x98\xd2\xad\xb7*]f\xf7\xb3\xb3\xd6g|\xe9\xf8'\xe4\x02\x12\xefu\x16\x90\x8c\x04/\xfd\xb4y\xce\xe9ZG\xb4\xda\x99\xf7\x9e\x08\xe1w\x98\xe5E\x9bu\xa3\x80v\x05{p\x86]\xa8\x90\xd6)\xec\x81\x95\xe0)fw\xd3U\xcd\xef\xa3\n\xdar\x81\xc9f\xdb\xb6?H\xa2\\\x19n2\xbc\xf5(\xeb\x1b\xce\xf0B\xba\x97\xcc\nRl\xe4EF\xfc%\xbf\x08\xe9$\x98\x91k\xe4\x85q@._\xcfm+\\\xfag\xe4\x1e[\x88N\xa1_\x06a\xa2+<\x0f\x03B\x0bu,\xf0 \xdb\xd6\xe7qZ\x16*m\x03\x9f\xcb\x0c\xf6\xeb\x0b\xae\x85DOt7\x1d\x93f[\xf3\x90b\xecK\xf3;\xc1\x0e\xa1\x82V\x98t\n\xb5\xa3)\\lL;(.'\xd0\x8f*/\xae\"b\xb2^\x07\xf4\x1a\x880\x98\x07\x1d\x9d\xb6b\xf72\x026F\xeb\xdf\xfe\xf5\x8f\x96\x90}\xdf\x14\x07\x81\x0e:NN\xf0p\xea:/]\x88(\xc0\xdf|\x85\x1a\xbdfI\xba\xc1O\xb8v\xba\xf6\x17\xfc^p,\xe7#L7 iFf~\xa1\xdb\x0b\xca\x95\x0b\xbcQ\xd5\xa4\x97\x82\xfc\xb7\xd8\x0d\xd3\xf8nw\x88dj\xb8w\x9c\x12\xe1\xec\x1a\xa9\xb0\x06+\xab\xabta\x1a\xf6<6\xf2\xfeA\x98\xa7~1[<\x8f\xc3\"\xf4\xa3\xef9\xcb\xaa`J\xc4\xc3n\xff (\xf8\x12\xf1H\x13\x9c\xa0\x9f\x94\x05\x1b`\xc1\xbaz\x01\xb4\xcd\xc8\x9c\xde\x04B}E\xcehs\x13\x06\x8a\xcf\xe7\xb0\x0f\x01L`\xae\xffhU*\x15\x18\xa5\x8azu\x83\xfd\x86z\xef\x9d\n\x1f(\xa5\x1dZC<\x18p\x07\xc9 \xb24\x9d\xfd@\x05'yRf32\x81es\x04\x86\x83\xb2P5\xd3\xbbW5K>\x01_\xc1p\xcb\xfc\xf8\x04\xcan\x0dr\x99\xfaq\xf0\x8c\xa4\xc5b\x02#\x85t@\xf0\xdbJ\x01\x9c\x80\xda+a\xb8\x83$\xac\x02\xf8jA\xd8\x9c \xc2d\xe2WQ\x9f\x13&z.\xe4\\w:3Y\xfb\xa3!\x12j M\xd5\x15\x90\xd58B\x96L#\x06\xec\xdd\x19\xe8]\xe9 \xefz\x8c\xa7\x15\xe9\xa2\xad\xd2\x90\xbc\xc5\x14\xeb\x95\xb0\xaf\xad\x9e\x18g\xcc\x89\x9d\xee\xed\x05B\x98\xc8\x996\xedh\xd2L\x12\x03VJn\xf8\x17\x0b\x8dW-\xfa\xaf~\xb2\x19\xff\xd4\xd4\x81\\\xc9zS\x818X=f\xaf\xf2\x83\"i!\x04Y\xdbCQd2\x87Z\xd1nY\xbd\x8a\xd1\xc2\xcb\xd3(,l\xeb\xc7\xd8r\x86)\xd3\x15\xad\xc4\xf0\x186a\x9f\x1b\xb3\x11X\x87\x91\xe3\xfd\x94\x84\xb1m\x81\xe5\xc0:\x14`V\xe0\xf2\xcat\x10\xeaM\xa3\xb8\xaa\xa5\xa9\xf5\xc5\x06\x8d\x1d&/\xfa\xe5z\xd8\xb6\xa8\xa8\xf3\xe6=q\xdc4,\xb4#\xafF\x91\xb2\xe5#\xef\n\xf6 \xc5\xb7\x9f\x1b\xf13S\x918 /\xe8\x908!/\xe8\x908>/Pz\xbb\xcfT$N\xce\x0b:*\xcf\x88\xdb\xe9\xd6c\x9d *gf\xa0rf\x9f\x9e\xca1;e\xf6P9x\xa5\xbb=\xc2\x90U\xa1'L\xce\x18\xd3\xd3k\x88M\x9f\xd0\xcbI\xc1\xbe\xaa\xd5Hx\x06\x14gY\xee\xe3{?\x0b\xfd\xd3\x88\xa0\xc8c\x85\x0e\x85R;\xec#\xc8bn\xb3^(\xfa\xd3\x7f\x951O\xfc2\xcbH\xcc\xbf4\xd3j\xd5\xa4\xcfH\xf1\xa4(\xb2\xf0\xb4,\x88m\x05~\xe1o\x9c\xf3>\xfb\xe8\xac\xe6\xc2\xa9\xaf\x06K,\x8d\x05{\xd5\x8d\x82\x91pb\x83\xa9\x0e3\xa66\xc68AZ9\xd1\x97\x9f\xfb\xd1\x04|e\xf1\xb5f\x8f\xabE\x1f\xb4\xa3\x8c\xe3\xc0\xddd_R.\x97\x04\xac\x85\x8e\xe9/\xef\x04\xcd\xdc:\xdc\x00\xfa\xafh\x90\x08\xb4\xbd7T\x9cE8\x8c\xb3\xa8\\\x8b\x9f\x85\xc1\xcb\xa4\x8c\xdb\xc9\xff\xe0\xa32\x19\xdcB^\x0d'\xa4 \xbcH\xf9\xd3\x96\xebcZ\x08%>#\xc7\xcb,\xb2\xfa/^\x15Y\xd7Z\x8b\x1f\xc2(zKf$<\xc7\xcb2\x1f\xb0&\xbd\xa7|\xc8\xa2\xc4\xb2sJ\xdf\xc9^\x15\x1f$\x955{\xe3+\xf5\xdaS\xba\xaf\x1eqk#\xd0\xb5\xab\xf9\xceD\xc4\xd1\x15@/\x19o\x1e\xc6\x81D\xfc\x0d\xa4\xfc\niwyl\xc5F\xdf\xda6LF{h\x8c\x11Vdl\x0b\xb0b\x15`\xe9\x1b\xb3CVO`\xc9\xdc\xaa<>\xa2\x96:zu\xfa7\xb1[\xf3\xc5o>|\x80\xac\xc7\xb0\x11$\xac\xd9n\xa2\xf7Cf\x92\xda_\x0fqj\xa1P\xb7Zz\xe6\x0e\xd4\x08\xb7\xa7Ha\xb31\xf4`\xdf\xa9\xf8\xc4\x8c\xd3\xee\xfc\x98\x0f\xdc7\xcd\xe9\x1e `9\x98\xcf\xc9\xac\x08\xcf\x89\xf8\xd2\x88E\xd0\xfb\xaa}\x92{\xd5\x1d\xb2k\x94|\x92MgW{\x82\x06\x1e5\xb3\x04\x87\xc7\x14\xf4\xf2\xf0g\x0d\n\xe4c\xceo*\x14\x91\xd5|\xc2\x13L\x0d\xd8\xae\xbe\x93\xc8?%\x91\xb1\x9bE\xb1\x8c\xbeA%\xf3\x8d;aa\xd1\x8c\xbd\xd4\xea\x03\x04\xf0&y\xad\xeb0fT 3\xb7k\xda\xa2\x98\x00\xa6o\xe1\x13&p\xeb3\xa0\xe6g[\x8693:C\\!W\xd7\x03\xa7\xdb\xa8\xa7\xb3G\xf6\x8a\x841N\x8e\x905\xf5\x00\x1374\xbe\x0b\x88\xa3\xb4LY\x90`\x83\x8eP\xb7A\xd6S^\x0b\xde\xbd}1\xb1\x0c]7Dg\xa1\x9d\xe1\x8c\xb4\xb5\x17\xdb\xb5d\x8b\xd3\x0c\xd2y5|\xd8\xb4s\xd2Wk\xd89\xf9\xab\xdd\xa9}\xe0\xd5c\x89\x03z\x7f\x0d\xf1\x98\xce\x1a\xda\x06\xd4~\x1bC\xea\xf1\xdb\x95\xc4\xe5\x12\xcd\x11ns\x8e\xe9\xd3\xe2\xe8z\xaf\xf9\xfa\xec\x13\x13\xcfkZ\x8e\xc6\x14V@\x050`\xbf\x06\xa2\x03\xa8\xe2?\x92`B/\xf3\xbd=Hl$\xa6\xfa\xa9\x1c\x86\x1a\xfa\xeb \x9cc\xacH\xb1\x87\x89\xfaq`\xa2\x9fm\x88\x96\xb8}\x93\xe5\xa6\xb5\x05\xb9T\xf1s\xf2\xc3G\xccW\xa2\xcf&\x0e\x86\x83\x83\xb9\x91.\x0c\x9a\x16D\xeb\xf0Q[Ctj\xf4\x88[\xeb\x05\xee\x13\xbb\xce\xf1\xed\xe7&v\x8dtb\xd7H'v\x8dtb\xd7H'v\x8dtb\xd7\x88\x89]\xebQEL\xc0\xaa\x12\xabF\x9f^\xac:\xbb\x8dXU\x12\xac(\xa4\xa7]\xad\xadVy\xdc\x92Z\xdeJy|+\x11\xcf\x9dr?}\xbcM1\xc4)F\x19\xe9\xa3\xa6Q4\xb7\xa5\xeb\xb5\x10\xb2\xa5\x98\x81I\xdbMk\x1f\xa1w\xee1+\xa4p~\xe5\xd8\xed:\x15\xd2\x17\xb0>GI8\x962\x0fE4\xe5a\xf3\xe8\xe3\x9d\xb9\x8b\xdb\x0fYX\x90\xd7qt\xd5\xc0\xbc\xedG\xa7\xabp%\xb0\x1f\x0c\x08\x83\xa1\xb7W\xcc\xc0\x80\x96\xe9\xee\xaa\xd3g\x02\xd9\x85\x1f\x07\x11y\xbd\xea\x88[\xa0;\x14\xd0(\x10\xdf\xfb)O\xe2{\xa1W\x90\xbc\xb0\x0b\x16\xc0^\xb6\x1d\xe0yf`2\xc8\xa6\x00VY\xbe\xf6\xe17m\xaf\xbc\x91vlX\xc1\"9;\x8b\xc8\xf3\xfc \x08\x8b\xaf\x93K0$\x99\x91\x1f\x19\xbf\xb2\xb1\x0f[y\xe9\xdb~\xb9W(F5\x815\x8c'\xc0\xfe2~\xa7\xb6\xc0\x84\x1e\x98\xc7\xa46\x9d\x08W\xf2#\x8fE\xe1|!\x9e\x0e\x82\xd6W\xe5\xa7A\xa3p\xa4\xc3\xea\x14t'w{f\x1bV\xb2\xa9\x80\x15\xf8o\xfa\x08\x05u\xe3\x16\xaa/\xf1\xc1*S\x1d\xf6[\xdd\x02\x02V\xb1\x82\x001\x85\x16\x9e\xe0\xb6\x04\xf5\xdf_~\xa9\x9e\xaa-Ur\\X\x93\x1a\xab\\N\x18\x11\xd8\xf8\xb3\xd2\xeb\x0f@\x0b2d\xae\x8e\xf1o\xbc\xd4\xcf\xc2\xe0]\x1a\xf8\x85.\x08\xc2M\xd7X\xa2\x11\xf8*\xcbo\xb4\xeb\xac\xda\xa5;\x9a\xb2V\x10\x05+\x1e\x86a\xeaxXA%\x0f\x15ie\x88\xb6\"?\x99P\x9f\x0f\x101A\xa5\x9f\x1fx?\x86\x98O\xce\xfa\xba,\n\xb3c#p\xba+\xb3\xad#rY<\xc9\x88\xd2\x15M~JV}\x11\x9e-\xa2\xf0lQ0\xb0\x9a\xf4T\xe1\xee\xab\x97\x9ef\\zz\x13W\xe0\x81\xd2\xd3\x94U\xcc\x0c\xa3@\xf2\xad\x8f\"\x1f\xaa\xf0\xd5SK\x91M\xcer!9\xee\xd9'\xc7\x85s\x13\xa3a-vk\xab\xe7*o^`\x19XS\xbfo\x99fC\xe6%b\x11\xa8\x82R\xf4\xcf\xe9\xc6c\xab|\x13\xf8\x94\xdfqH\x9bX\xb8Rz\xfe\xb4\x15\x01\x15,\x17\xce\xf1_\n\xa2\x06 \x83y8\xbd|\x1e\xacd\x17\x0b\x9ck 3\x12\xe0\xed&\"b\xf6~\xc5\x08\xa2\xfa\xe0\xf5\x7f\xd1q\xae\xe8\x91\xc7\x00\xdb\xbb\xbb\xdc\xbc7~\x9e_$Y\xb0\xf2\xe6\xfd\x11\x9fO\xb1w7\xdb\x0d\xbf,\x12z\xddG\xa4\xa0\xbb\x12\x93\x8b\x8d\x94\xcfu\xc0\xd7\xb1\x08\"8\xf8\x0b\x0ea+|q\xf3\xdd_\xe8\xfdkz\xc2z\x88\xa7\x07\xdd\xe7C\xf6\x85>\x84^\x9e\x83,\xe4\xa1\nf\xda[\xd5\xe0\"\xc8\x8a\x0dF\xf4\xda\x12\x11\xb6\xe4\x94\xf8\x19\xc9\xf8\xbdj\x82\xf7\xdf\xe9\xc6\xc3\xe1\xdd\xea\xca\xbb\xf1u\x87\xd7B\xf0\xd9]u7\xba\xe6\xee\xf6\x8ac\x16\x89\x16.\xcf\xe7\x86\"\x87_m\xab\"\x9c\xbb@6w\x81h\x86#\x99\x01\x08\xc6\xe8\x7fl\xda\xa9a\x08\x81,\xfb\xeb\xd4\x11\xab\x12\x0c\xf6\xfe\xed\xd1\xd1\x1b\xccLK\xe2\x82\xcbR'P\xc6y\x99\xa6IV\x90\x80IR\x08\xa5\x97\xac\xffh\xc1:\xa4\xb0N\x7f\xddN\xfc[\x0f\xaf\x16\x017W8\xed\xb3e\x919\xf6.{\xd1\x002\xb9)c4r\xc6\xab7-\x98\xf4\x1b\xcf\xb4\xab\xccLH_+D\x0b\xb5\x1e\xd5$3c33\xf1e\x95\x82\x92\xaf\x1d\xcf\xe9\xc3\xc4e\xfd\x02$w\xb3\x00\x9d\x99\xa8\xb2\x92\x1b\xb3\xbe\xd1;'O}J\xe3\xd6\xab\xa7\x96\x1e*s\x9d\xd1\x01\x9d\x99\x00\xca\xb4\x9cd\xc8r2Q\xbby9\xd9\xc5=h9\xd9\xeau\x86l\x17\xd5\xec\x15\x06\xb7\xf54\xe5\x15\x87\x9e\x94\xbf\xe2\x11\xa4E\xefT3\x96g\xbe\x17r\xe2\x95\xa7*\x0f\xdbp\xdbK\xd0\x90\xd5\xd0\xa0\x1fL\x15\xe9G\x0d0tM\xb4k\xa9r\xbc\xfa\xf4\x07q\x05LT-\xa7j\xe4\x03\x82\xc8\x19h;\xe5)T\xc7\xa9Q\x07\x8d\xcb\xebxn\xd2\xd5\xe17\x12\x08B\x87\xa0\xba\xbd\xfa\xf2ws\xf6MZY~\xfbp\x03\x85\x82\xde\xaaYGW\xa7\x06 \x96\xf7\x95R>k\xf1\x80$\xa1\xe7\xbc\x8d+u\xe5;pKo\xea\xa2\x11[p\xb8;t\xdb\xa1\xba\x9eT6(\xc2\x9b\xd6\xa3Z4\xa4*U\xef\xfe\x8d\xe2Yw\xe5J\xffhB\x83\xed-\xbd\xd4`\xab\xc3\xd3\x87UQ\xc7\xad\xd9\xaf\x8a\x1e\xe8d\x07\xdb[\x0fu\xd2\x83\xedme\x8ckV\xf4yX\xf2\xc9\xfb\xd9lHX\x8dHym\x9aSyR\x16\x8b\xe7\x05YJ\xb9\xc7\x9b\x15\xea\xec\x0c\x93ZR\xd0\xacR\xa7\xa26\xa6<%3\x1e\xb6\xd0\x9ba?\x98\x90\xeb\xeb\xab\xe7\x01\x89\x8b\xb0\xc0\xa06b\x08\x7f&W\xa8*\xc2\xbe;\x8db`mQ\xf5i\x12\xe7\xe5\x92\xe4?0\x01\xd1JB\xfb\xdea\x17\x8aa\x8b\x0eQX\xe0\xd8Ek\xd0\x9a\xe12_\xcf#\xfft\xd0\x00\x05\n\x97\xd2\xf2\xb1\xbc\x0f\xb0\x8f\xd1\xe0z-%\xea\x0f\xbf\x0f\xf3\x10\x85'k\x9bj*\x8d>\x14FN\xfd\xd9\xfb\xba\xb2:\x1c\x14\xa2QK\xd4^uP\xdd^\x0cCR\xcd\xc00(FO\xab\xd7\xde\xec\xc2\xa5\x98\xbbzT\xca5U\xf6\xa8A\x1f\xf0\xb9j9\xf4\xbb04z\x04\xd3n%\xf1Qv\x95\x94\x05:\x07\xeb+'\xbc2\xf3g\xee\xa9\x1cr\xbd\x99X{}M\x96\xe5\xd2\x8f\xa2\xe4\xe2(\xbbz^\xbc.\x0d\x96P,\x87e\xc1\xeb\x1d\xc4\xfei\xa4\"\xd5\xc4\x83\xf1\x1f\xbc\xb9A\x0b\x12\xad\x10\x0e#\xa8\xebb\x1ag}\xcd\x05\xd6\x1c\x18L\xf6\xbc\xaa\xdc\x1b\x1fv\xc9\xb6`H(\xd9\xb3\xaa\xea\x80!\\UZ\xce\x97\xa8\xc5\xd4\xd7<\xad\x06\xfb\xc6\xa8\x13=a\xdd\x0b\xad\x8e\xbe\xe2\x05\x86e\xaeQf\x8f\xc3\xd8\x01\xab. \xa5?\xd2\xc8%\xfb\x80\x07\x85;BZZ_\xfb\x90\xd5~Z\xa1\xca\x1e\x0f\xb0\xa7\xac\xfe\xdb\xdaM\xbc\xef\x8b\xf7\xb0\x07%\xa5m\x0c>\x7fO(Q\xe5\x859e\xbe\xf4\xb5^\xc3\x1e\x9c0\x16ArS7\xcd\xee\x0d\xec\xc1\xa9\x97G\xe1\x8cP\x9c\xb51rx\x82\xef\xc6\xf7F\xe5\xdf\x8dS\xad\x1a\xb4oZ\xcd\xcd\xc7\xe8\xacO\x05w'}\x0eP\xf5\xdd\xb8\x9f\xd5\x838T>~\x155\xd3\xcc\x1c\xac\xfdX# \x02\xc5l\xc3\x82,\xc1\x82u\x9e}\x8b\xd9\x93v\xae^\n\xf7\x96\x8f\xaa\x1b]2S\xc3\xca\xac\xa0\x13\x1c\xa6\x04\xd5\xf6\xc4#2W>F\xf5ZQv\x86\x1f\xba\x9a\x9er\x0c\xd9x?\xd1~J\x83\xf9h\xdb\xd9\"\xb9\xfe17\xb3F\xedR\xcce\x17\xcd\x9bu-\x1c\x98\x06J\x18\x0d\xa2\x14\x8b\x88\xa7A3\x193=6H1]r 9K\xb3\xf1\xb4\xdd\x02*\xe5\xf5\xaf\x1b\x1e\x10r=\xf4fI\x19\x17\xf6\xad\xceD\x0b\x1c#2\xa0cmg\"7\xcf\xb0\xee$\xc4\xb8zO\x14\xe7W\xa0\xa6\xaf\x96\x0d\xa8\xb3\x18<\xe2Y\x12\xc1,\x89N\xd8\x85\x03\x8d\xdd\x8aN\xd0IK7\x13\xeb\x15\xbap}\x8aq\xc8nO\xda\xe1<\x93}\xa3\x1c\xe3\xb8\x1a\x99\x94\x06\x99P\x82\x8c:%\x9f \xee7\x9fV]\xbd\xf4S/\xcc_\xfa)\xf3\x17R\xd8\x1f\xd2\xe7\xda\x0e\xa5\x8e\x07&o\xd2\xcd\xe7\xa2\xcf\x8fh\x1e\x1bc\x95@G\xcaj\x88ZB\x1fA\xc1O\xe0\x94\xd1\x80}\xd9\x84j\xb6g\x02\x06\xfe\x80>\x99\x7f\x81W\xe6\x04z\xe2T\xa4\xac\xd6\xa2F]?\x84\xc8\x82\xf8\xb5|\xc9\xbe\xc2\xf4%\xc6v\x98\xdb\x94\xec\x94h\xae\xdf\xcc\x04\xd4\xe7\xa3#\x7f!\xa4H\xf2\x97-QV\xff\xbaK\xb2t\x03\x07%jsNo\x02\xe7}\x8b)\xb8\xb7 \xf4\x04\xd7\xaeBEN\xe0\xbd\xb6\xa2.^h#;\x1c\x06\xd8\xbb\x0b,\x7f\x13\xe31m\xc7i}\xdd\xbfJ m\x90o0\x01\xcbj\xdc\x9bm\xb2\xe6\x8e\xee\xad\x8a\"\xab\xef.\xb8\xcbY\x1e\x1a\x07\":\x9f\xf0\xb0\xe2\x98Z\xb2K\xb8\x1a\x0e\x8a\x8c!\x14,c\x1f\xc1y]-\xf5\x13\xdb\xa1\xa4\xe2\xeb:t\xab\x9e9\xb8\x93\x95\xff\x87d/oJ\x0f\xd7\xe0}\x82w=\xa3\xda_\xd7r\x01\x8c7\x80; \xfd\xa9\xbd\x81\xb9$\x03#%\x1a \x83\xa6\x87\xb1\xae\xda\xa5iN\\\xe6y&\xe2\xfb>\xade4\xdc\xff\xe8\xccmk\x8a\xafL + y\xf2 \xf05\x10\xe9\x00\x1c\xef=\xb9\xc2\x1b\xdfH\xa8\xf3\x8b\xa1_\xd8/\x9e\xa5\x97\x93\xe2mg\x06\x03r\x1c\x8bh\xf8fd\x0dm\xdcn\xacmr\x0f\x1e\xc6\xfeI\xd1<\xf9\xd2m\xa0\x06Zw\xcaM@r\x93\x83t\x17\xb8\xf1\xa9\xd1,\xb7Blo\xf4+\xd2\x08\xfc\xf8zP\xbd\xef[\xe0\\\xbd3\x01s\x9d\xf8\xa1/\xf9\xaf|i\xaf\x06\xc1\x03\xdc\xdc\xb5\xa6T\xedG\xa85W\x9be?\x84\x03W0\xcck\xea\xdb\x8e)\x0f\x19C\xe3\n3D\x9d\x12\x0f'\xb5\xe5sY\x0dr\xc0\xa9\x84\xd5h)\xf1\xf0\xc3\x9c\xd0^\x9f\xc7L5\xd4\xfba_\xa4\x90\xc1\x88g\x95 ~Fh\xa7F\x97\xab_\x03Z|t\x03\x8bo\x95\xa5\xf7\xb9\xe8M\x1dD\xb6%\xa9\xe9\xcb\xb5\xd4\x12\x01\xf5Uoi\xb8\xba\xda\xcd\x86\xbe\xac\xab\x92\x95\x94\xdb\x13\x98\xd6!SZ\xf1h\xe9\xaa\x06\x06\x1b\xaf\xf3\xcf\xd0\xa8\xc6e\xa6\x0b\x1d\x03\x16\xcc)\x95\xc1\x1e$H\xecdM\xd3\x91\xccl:\xd2\xf4\x93k\x81\xac_[\xe8\x89W\xab\x98)\x0e4\x94SZ\x83\x85\x83\x84\x9a\xbaZ\\?\xadod\xe9G\xea$\xedyq\x15\x11\x9de)%\xfb\xcf\xb2\xa4\x8c\x83\xa7I\x84\x19\xdc\xff\x7f\x0f\x1e\x9e\xce7\xb7\xbb\xf7t\xeb\xe4\x19\xc6\x92fj\x19\x9dL\"\x9c3\x1bx\xab\xdd\xa8E\x17\xdf\x92O\xfegj\x0d\xd6\x03E\xd9\x10(\xd2\xd8K5\x0dj?\xcf\xe9\x07\xdax\x16\x81\xce\x18.\xd0\x19\xc3\x05:c\xb8@g\x0c\x17\xacf\x0c\x17\xa8\x8d\xe1\x82\xda\x18\xae\xebd\x93r\x0f\x81-\xa5\xb1[\xf0\xe9\x8d\xdd\xcc)\xfe$c7\x15\xed'\x19\xbd(L\xde:\x9e\xc2\x83M\xdbn\x95Q\xf8\xf31\xbf\xe93\xae)jO\xe0\x1es\x11JPO-t\xde\xd98M.\xadc\x03}O!L\xeb%\xcc\xd7i\x8d\xf9M\x88\xe0\xc2\"\xeeX\x9a\x91\x99_\x08i\x80\x1dsI\x8e\\\xc0.\xd7>U\xda0\x86\x8e\xcd\xa7n}\xe3\xc2\xcf\xe20>3\x89\xffE\xdd\x89uW|e\xec\xfd\x94\x84\xb1m\x81^\xe8\x91\xe8{J\xbd\x97t\x16\x1d\xfa\xf3\x97kW\x86\x01\xc3Pd\xb9\xb9\xc9\xb6\x88\xa4\x94#5d\x0b#\x97\xa9\x1f\x07\xcfX\xbd\xbaoOzO\xcf\x9b:\x01\xd4\xcd\x1c!\xfb\x1c \x19_\xa6\xbf\xb3\x16\x9f\xe75\xf4\xef\x0e\x1a\x9f\xad\x83\x86\xc15C\xaf\xa8\x890\x91c\x97\x89\x02~\x93\x87\xde<\xc9\x96\xbe\xa2_\xee\x92\xc1\x03\x9a\xab\xfd1\x84K\xd7\xda\xde\x1eD\x18\xd9\xfb4\x8c\xfd\xec\x8a\xbd\xc1\xecB\xd6\xa9\x9f\x93\xddm\xf1F\xef\xa9\xc1@_\xef\xd2\xa0\xf4\xe4\xe0\x01\x12\xe7\xa12\xdd\x90\x84\xeaJ\x1eS\n\xf6\xc1\n\xe3s?\n\x03\x8b\xc9\xe0\xbbm\x86E\xd4\xfc\xa2\xd4\xd4\\E$\x9a\xdbU\xcaK:\xda|\xba\xa9\x08\xd2\xaf\x90\x07\x04a\xce\xd9\xdc\xc2\x0b\xf3g\xfc\xaf\xe6a\xf8\xcch{\xb7\xca\xbd\xdfL\xef\x0duR~\xe1\xe8\x9e+\xde\xd5u3\x92\xa7I\x9c\x13I\xea\x01R\xa6\\\xcd\xebJ\xde\xc3\xdbnEN\xd2\xb9\xcb\xc6\xf6}\x05\xd6\xd3\"\xb7P\x8b\xdc\x8c\x84R\x15\xf0\xacP\x06<\x8b\xab\x80g\x94\x88\xccX\xc0\xb3\x0c\xbe\x82\xe2\x11d\xeb\xeb\x0e\xc4\xd3\xac\x19\xf0,\xd3\x07<\xab\x15\xf0&\x92\xadJzwx\x95\x17di;M\xdb\\\xfc\xeb\xbb\x9cN\xc7HW1Z\x96\xd9e:v\xc6r\xbf2j\x96\xad8?\xde\x0d^L<\xad\xdb\xf6\x0f\xdd_\x8a\x8d\x0c\xcd\xd1J\x854\xb6\x80}\xc0\xd4\x18\xcd\x06\xacc`\x81t\x9b/\x95x\x0e)\xd5\xe7\xb1\x1d\xf3\xec\x05-XW\xc0]kl\n\x03\x88V\xd3Sag\xfa\xcc/|\x8b}\xe22\x85\x03\xcbZr\x8c}\xb78YWw\x18\xee\xaa\xffn\xe3\xa6\x81\xa8N\xeb\xdd\x8d\xa4\xd3\xba~(j\x84\xd2?\x14q\x1eT\xae\xcc\x98\xb8\xa1\xbe\xf0\x84\x0f\xb3\xd6\xc9:\x91P\x9b\x9are~\x00Ul*\xc59\xc6\x80\xa2\xfb0\x0d\x11|;s\xc2\x98\xcf.\xc4\x02\x94\xf5\x15\x9a\xe7\x0bH\x94\x13\x15S\x8b\xbc\x96\xa6\x9d\xa2\xdb\x8ei\x1b\xb3a{\x93\x0f?\xc8\x9f\xc9\xa6\xc4C6\xc5\xbc#\x03\xb7#6n\xc7\n{\x11W\xaa\xb4\xcc{\x9dq\x17\xf5\xd4\xb1\x1d\xe5\xd6t.\xed!\xfb\xe3Br\xbb\x9d {w\xc6\xef\xdb\x99\x84\xc5\xddeq>\xf7k\x84\xe2\x9b6\x8a%#\x17\xa8G_M\xb5e\x08Mn\x9d\x82\xa8\xa7\x89G\x9de\xa3\xb4}\xa2\xbcrl\xdah\xac\xd9\xb6\x81\xb1\xbai\xeb\xa5\x97\x914\xf2g\xc4\x8e\xc9\x05\xbc%g\x07\x97\xa9m\xfdb\xc1:`D\xc6k\xcb\x05\xeb\xccr:*9\n\x11\xa5\x04\x1f\xf8\xf3\xf7\xa5+\x95\xca\x8e\xd2\x8e\xedqG\n\x1a\xf2\x92Q'4\x0fSX\x8c\xb7v\x95T]\xf9;\xb2\xac\x14\xfb\xfer\xed\xb6\xa5\x82\x99\x0b\xbe\xf7\xee\xcd\xb3'G\x07'\x87\x07/\x0e\x9e\x1e\x1d<;9}\xfd\xea\xe8\xe0\xd5\xd1\xc9\xd1\xdf\xde\xfc\xfbZ\xaa\x88\xe0\xd5\x16\xf5\xf0\xcd\xebW\x87\x07\xbf\xcf\xaa\xeadR\xaa\x98\xac=\xeb\x91\xb8\x10\xeaH\xf1U\x16\x84a\xaf\x93\xef\x9f\xbc}\xfe\xe4\xeb\x17\x07w{du$\xc4 \x0c\x16{\xef\x89\xc2\xa8\xc5\x17K\xad\x069 \xef)\xef\xfe\xcc\x85\xd0H\x11b\x05\xe3V\x94.\xf8\xcd\xf5\xcdnq%\xd72\x8fQ[\xbd\x97\xf0\xd7;\x0f\xa4\xfb6\xa1\xcb\x82y\xf4\x92\xec\xc0\x9f-l\xbdh\x01\xe9>\xef^\x18\x07\xe4\xd2\xfb)gr?-\xd5Gw4\xb1U1\"\x88G.\xd3$+\xf2)#\x80R?\x9f\xf9\xd1S?'\xdf\x84\x11\xa1\xdb\xe8\xd8\x85s\x8c\x1b#.\xd1}\xe9w\xdbAH\xba~\x07-\\loo\xefR\xb2H\x8c\x03\xd7eg\xb43\xe8k\xc3\xb2\x0b\x1b\x8d\xad\xb1L\xd0\xd4\x11\xbd\xecU\x0c5*Z#\x93\xa6W P\xdfd\xc92\xcc\x91r\x89\xed\xed\x9d\xfb\x8e\x0b\x87H\x91\xd7\xa65^^\xf8Y\x91\xff\x102\x0dIlo?\xd8\x1d4\xc3\xd8~8FM\xef\xc3\x07\x9dU\xda\xde\x19\xd6F\x1fpno?TB\xe7\xf6\x8e\xca\xc0%\xb6\xef\xb7_3b\xef\xfeHZ\xe9\xe6H\xc7[\xf7\x1d\x1b\x05n.X\xf8\xaf\xd5\x83\x87P\xbbt\x82\xd2;\x9b\x08'\xb3\x13\xda\xff\xa6\xf8\xe3=ES\xf5~\x18\x92x4T\xa6'\n!|\x15\xac\xe0Da\xd7\x18W\x85\xe1\xfa\xba\x12{\xac\x11\xdcTxL\x19\x94J\x9cm\xd7s\x10\xa2\xb9\xc4\x1e\xa1MzB\x0f\x9bE\x0f;\x8b\xd3\xc6\x8d\x0cYZ\xd9\xfa\x1d\x992\x99C\xec\xe2O\x89;\xbav\xab\xcah]\xf3D\x08*Q\xd7\xc0W:\xb3Y\x17\x0e\xfe\xac\xabg\xb6E\xe2\"\x0b\x890\x9co\xc3\x8f\xbc~\xf2F\xca\x0b\xac\x8e\xd0\xd8\xfb\xa5j\xaf\xf9*\xaaP\x17\x8b\xb9\xda\xdd\x93 \x89)\xdb\xb2f\xa6\xfdoy.F;\xeas\xf1\xb0\x1d\x95\x91\x1d\x8b\x87m\xc1\xb6\x8f\x9c\xc6#\xe9,\xeflb4\xf3\xd8\x1e=tl+,H\xe6\x17\x98CV\x0f\xbb|q(,\xd5\xb3k\xa1\x82>y\x1b\xa9\x11\x11\xc6\xef\xf6U:\x9e\x98\\\x16\x142Gn;u\x00\xed.\xc4\xb6)+\x0b\xcf\xaba\xaf\xb6\xdc\x12\xc2Q\xdf\x86[\xbb\xeau\xdd\xd5\xe2\x95\xedm\x07\xf6\x95\x9coHr\xe81@N\xecv\xa2\xa1Jk\x10\xbb\xb8y!\xaa\x07\x90\xda\xadT\x079S\x16\x94\xf0\x18\xf2G\x0ed\xde\xdc&\\\x182\xcd\xd7\xd7\x8f](\xa6q[\x08!\xa8\x8c\x9b.\xd8\xfd\x91\x9a|\x18\xa9!q{g[\xb3duw\x1a8\xab)\x0e\x96wFGQ\x94l%\xf4q-#$9\x84\xcaES U\xa3\x14\x1c#\x05iBI\x1cv\xa9\xc2\xda\x9e\xde\xb5\x117\xed\x11D\xf0\x18f\x8f\xf46\xc0\xb45\x9bne>\x9d\xad\xaf\x1f;\xb4\xcd\xd2\xa9\xcdU:\x1f2\xe1S\x7f\x970[_\xef\xe9\x16\xaf\x87\x19\x841\xe4Ho\xe4\xd3\xd91\x0b+\xea\xd4r\x0f\xac\xf2\xe1\x03j\xa2\xaak\xe5\xcb/a\xa3\x19\xbbhE\x1c'a\xb3]\xd5\xa9{\xe9\x17\x0bo\xe9_v\xc1\x88\x95\x84q\x1f \xe9\x11\xba\xcd\xb0\x0dq\x1c\xf8\n6a\x9f\x9e8X\xa7C\xdc\xa4\x97 C)7F\"\xea\xf9P\xac\xbds'\xc0\xaf\x83\xfc\x10\x83\xb8SHbD\x9eM k\x0d|\xb3#\xa2\xf3k\x8dPp\xc8\x0e\x88B+\xc1\xc6\x94\xe3\xda}\xf8\x009%/\"\x14\x87\xf1X\xb4\x9c\x9a\x9d\x80\x8dr8o\xb6\xf0\xb3\xa7I@\x9e\x14v\x8ek\xbe\xb33~\xb8K\xbf\x0d\xe11\xec\xecn\x8d\x1e\xb2\x86\xd6a\x84\xe0\x87\xb6\x04\xb6\xdf\xf9\x98V`\x0d\xecn\x8d\xb1s\x9f6p\x7fk{\x8b\xf7\xcf\xeacGt'a\xc2\xdf2/\xbd\xdc\xc5N\xc6\xb4\xcc\x87\x0d\xde\xcc:\x1d\xe7\x06\x1f\xd4W_\xc1h\xd3\x81u\xd8\xdd\xd9\xd9\xda\xbd\x1b\x08\xef\xdc\x1f\x1c vu\xd8\x90\x02\x8b\x83\x12e~\xa5\x0d\x8a*\xdc\xbd7\x90\x19\x13\x1f\xb6\xc4\xf0\xc5\"K.\x802\xef\x98%\x1dO\x80\x05a\x0eqR\x00R\x00\xa7\x11Y\xd3X~dv\xc1\xa2\xf0\x11g\xc5sB/\x81\x07\xc88\x8c\xb7\xb7\xf1\xdf\xed\xdd\x87\xec\xdf\xfb[\xec\xdf\x07\xfc\xfd\x83\x9d\x0eg\xb1\xbb\xe9\x08\xaefHg\xbd\x84\xd4\xaejgd\xd2(\x99\xc6\xf6\xe8\xbec[E\xc2N\xd5\x91\x7ff!\xdbi\xfdlQVn\x9d\x82\xfc\xda\x1eX\xd3\x04o{\xf8\xf9\xd8b\x0c\xd7\xfd-\xc7\xe6\x14@\xed\xc9\x00UCV?mU\xb5\x89\xe9j\x90l\xa7\x90i\x1dK\x1ah\x0c\xa94d-\xe4\x85\\\xa3\x1c\xfe\xa6\xc32\xac\xd8\xa3\xcdQ\xbf\x0d\xf5}:I\xb5(\x9f\xae\xe3\x03\x87Y\x1e:.X\xbe\xd2\xfe\x10\x83ik{i\xf7\xd6)l\x99\x088\x9e_\xaf\xc1\xa0\xf9KDK?\x11\xa2\xb8;0)\x0d\xbb4\xc4\xd5\xf8\xa8s\x0c\xd5z0Le#\x9d\xc3*\x02\xb6\xcdTG\x02$\xd8\x86d6\x13U\x89\xf3U\xf5\xa7\xd2\xb0\xe9\x1bE\x1e\xe5\xf5|\xf56\xd7>\xcep\xdb\xf8\xc6z\xea\xc7\xff\xb1\x80Y\x12\x9f\x93\xac\x00\x0e\xe9E\x02i\x16.\xc3\"<'\x8c\xcdZ\x95\x9a\xef;\xf3\xdb\xbbm\xc91\xc3\xc6\xe3\xed-%\xcd:RJ\x15Z\xec\xd3\x03\xc1>\xdd\xff\xef\x99}\xd2\xb0\xa5\xdb\xbb\xea\x95\x1dw\xc48>\xc7\xca\x94 }~p\xf2\xe6\xed\xeb\xa3\xd7\xed\x80\x15e\x9b\xdfo\x16\xb7\xc5\x01\x9d\xf58g\xb9+\x0b\xde\x15E\\\xe1<3D\xc6@+\x0c-5\x84$w\xe1\xa1S\x90\x17\x84y\x1a\xf9W\xf4v\x88\x93\x18\xf3E\xdb\xe3\x9d\x11\x9a\xf5\x938x\xba\x08\xa3\x00Y\xb7\xc2\xcb3\xcacX?\xf9\xe7>\xf3\xe9\x9dXU\x16J\xee\xfb\xf7C\x18\x07\xc9\x85\x17$3\x14\xa18^\x92\x92\xd8F\x18\xb9\xc8\xc2\x82\xd8\xd6W\xec\xd3\xc7\xa2\x8a\xf7\xcd\x1eC\xd1_\xfdx\x8f\x17\xa1j\xd7\x9bEI\x8e\xe9\x0ds<\xc1\xdf<\x82lc\xe3\x91\x03\x01\x89HA \xaf\x01i\x1aN\xb3c\xbdMYn\xb7`H\x8dI\xf9E\xc1,8)\x9dfD\xad\x889\x95tF\\F\x11J\x90)\x15g\x97-x'\x0ecpcrA\xf9\xbef1s\xff\x8aYZ^\x82\xa6g\x98\xd5\xc2qei\xab\x90p%v|+\x9a\x7f\xa46\x1e\xec\x9c\x08\x0e\xf9\xdb\x0f\xf4\x94\x1f\xbd\x98\xff{\x90\x1d\x8cF\x0f\xd4d\xf1\xb8\x8d\xa0\xb9\xf0`w\xd7\xb1\xd7\xda\x02\x075\xca\xb8\xc1\xfd\xce\x97\xa8\xe4\x84t\x17\x17\xe0\"u_Sfiz\xacX\xf3\x98\xf2\xd5\xa5\xc3\xa4\x04>\x8a\xf31%<^\x9b\x91\x88,\xa4\xf8\xf0\x11\x14BX\xcb\xf7\x03\xbf\xa3\xa8\x01w\x83\xb9\xa8\xfc\xa7\xd0\x8e\xb0\xb5\x0f\x1f\xea\xd6\xd4[\x14\xddt\x8b\x1e>\xd4\xac$\x83N\xdb\xfa\xd9r\xd0\xd5\x82\xd2\x81\xcf\xf3\x83\xb8\\2\xbe\xc1\x96`\x18L\xe6\xd1\x82\xd2=\xac\x93\x83\xd0s\x8d\xe6;y\x1a\x85\x85ma\x8e}\xde!\xb9\xf9 \xed@\x95\xd0ti.\xa7m\xdd\xdc{'\xd3\xe0\xd6\xff]T\xf5\xdf\x92\xa8J\x83\xb2\xb6w\xdb\xef\xc3\x01\x94\x8c__\x94\xd5\xc5e\xbcN\xcfH\xf1FT|=o^\xab\x1aX$\x02\x9d\x01fp\x0e\xf1dMQ\x1b\xad\xa2\xf0)\xa9\x90\xc4y\x91\x95\xb3\"\xc9\xd0\xe4 \xc28/\xfcx\xd6-\xddo\xfe-\xdd\xbe\x93\xe6g\x1c\x0f\xec\x83\xdf6\x00_q\xfdw\xb6nz&9\xfe\xc8V\x17XT\xf7'g\x1f(;P\xb1\x0c\x0f( \xcd\x98\xca-\xc7\x15\xde\xf0[\xfc\x82E\xc6\x80'\x8f\xb5G\x9bc\xc7\xe5>\xb5\x94Z\xc0\x83\x1b\xb5\xb8\x05\xf6\xaa!kp\xd1s6\x17\xba\xb3\xa0\x13m\xe1\xe9\xe1\xe1\xdb2\"/\xc2\\\x11\xec\xe0\xe9\xe1\xe1!%M\x9f\x91Y\xe4\xb3x\xd3\xdd\x80 O\x0f\x0f\xd1\x14\x817\xd1.\x8dB\x12\x17o\xc9\xacP\x97?{\xfd\xd2X\xc8\xe6\xa2->J\xde\x93X=\xf8g~\xe1\x1fe~\x9c\xcfI\xf6\xbc Ku\x1b\xdf\x84\x91f\xe4\xdf\x1e\xbd|\xf1$\x8a\x9e&Q\xc4\"P\xa9\xab\xf4\x95\x7f\x93dK\xee\x85\xa4\xae\xc0\x9c%\xb4U^\x92 \xf4\xd53|\x19. e\x89qs\xbb_\xbe\xf2\x97$x\x95\x04\xe4\xa5\x9f*J\x93@\xb3\xebo\xfc0\x16\xe1O\xd4K\xf3&*\xcfB\xc5|\xd9{\xcdp\x0e\xbf\xff\xd3\x0b\xbc\x8a\xd4m\x1e~\xff\xa7W\xe5\xf2\x94d\xda\xe27\x98%X\x03\x0b\xb4< c\xcd\x80\x0f\xbf\xff\x93 \x90\x0e\xbf\xff\x13\x83\x94$\xd3\x80\xc9!f\\\xfb\xba\x9c\xcf\xb5\x03\xa4\x07\xe5pAH\xa1^\xd5#rY\x1ce\xfe\xec\xfdS\xddQ\xa9jh\x8a\x93rV\xad]Ur\xed\xa2+zb\x07\x945a\x94\xf89|\x05\x0b\xc1s\xc2\xf9\xfa\xba\x8aZ]\xba\x18\xc9~1=W\x18\xbcQ&4\x98\x9e)JN\x91\xacW\x95\x9c\xc0\x1e\x9cR\xa4\x7f\xaa\xba\x90\x80_\xc5'H~\x9e\xd0\xfb\xf7\xc3\x07(\xed\x13\x17f.\xa4\x8e\x0b'\xd3y\xfdn\xee\xc2\x19E~\xd33\xca\x80\xa5.\xa8\xe2\xd2 r]\xd2[=s\xe0d\xba\xc4\xcfC\xfa\xf9\xd2\x85l\xba<\xae\xc5\x9b0\x14a\xf7\n\x804J\xcb\xed\xfbj\xbe\x03\x11w\xe3\xbd_Q\x94:&n\xbc\xbd\xfb\xefv%\xff8v%z\x82\xef\xbec[e\x9c\xcf\x92\x14\xbdU\xda$\\\"\xfc\xf5T\x07\xa6\x123@2\xcd\x8e\x99R`\xe7\x01\x1a\xaff.\xfc\xa2\x97\xf6u\x98\xfaiv<%\xf4\x18\xc9\xf6\xf0\xca\x99\xe8$\xfeF\xd8\xfb\x0c\xed\\\x84\xb1\xa9/(\xa9\xf1v[\xc2\x92W\xc4V\xe35\xa7\xb0\xc6\xaa\xb8%*\x8d\xcf\x9c5\xdf\x16\xd4\xb0p%\xf7\xb7[\xaf\x03\xdez\x1b\x85,8\ni\xd7?\xe7\xef\xdb\xf6\x10K\xd6\xebN\x1b\xb5\x9c\xf1\xf7[\x8e\x97\x93\xd6\xba_\xb1\xb6\x1elvb\xe1\x9dr`m\x8f\xea\x84\xb7\xd6\x1e\xd5\x05\x7f\xdf\x1e\xd5\x01R\x9a\x95\x8c\xbeYx\x89\x85i\x96\xccH\xde\xf2D?\xc4\"\xae\x98k\x16=\x85=\xb0\xf8Gx\xceg\xf6e\xab\xd7\xf7f\x89\xee\x13\xb4\xb0\xdd\x83So\xde,xM\x0f\xc4\x9aY\xda[dW\x1a\x9eW\xe0\xc8C/#y\x12\x9d\x13\xbb\xbdz\xf2\x83\x1e\x1aM\xf6g\x8f\x1ea\xa1\x1e\xccS2C\xfcr<(\x1b\x96x\x88\xfd\xde\x85\xf7z\xd6\xf7\xba\xcb\xd2\x83d\xc7\xf0\x14\xfdQU|\x1c\xdf\x8b\xb7\xe4'F\xd9\x1e\x9c\x93\xb8p\x98\x0fK\xb1 \xb1\xfd\xde\x919\xb4\xa2\xd3\xcd5\xcc\xfcb\xb6\x00\x9cCK\xf9\xd6\x06\xbf7\xbdsF\x15\xb5V\xa8\xbcf\xaf\xa5\xf4\xbb\xe6d*m\xb5\xcd\xe21\xd0a;8\x85\xe6h[\xe0r\xd4\x87\xed@\xe8\xb9\x88w\xa2\x95\x88\xd02\xc4\xb7\xea\x0d8\xe7\xb6\xcb\xc4;\x99\xa9k\\\xe95\xaa\xf2\xd3\xe0.\x89wr\xcex\xcb\x11`\x8c\x9a\x93\x9c\xb1\x97\x9b\x8c\xb5\xac\x05K}p\xc5\x85\x995\x02M`\x1f\n/y\x0f\x13(\xbc\xb9\x1f\xf6\x84@\x87*A\x14?\x1c\xfd\xd5#^\x9d\x02\\\x7fm\x9649H\x96~\x18\xab\x17P<\xfa\x13,?%\xa5?\x124\x1b\x19\xf3\xb5[PP\xf9 \x89)\xfck\x0fF\x8e+\xe2\xff\x94H\x81\xec\xa1I\xb5\x8d\x81*f\x1e\x89\x0b\x92\xd9\\\xa7P\xda\x19\xf2\xe8\x98\xa1\xd8#\x97aas\x06\x7fm\xd3au\xf6\xd0\x1b\x81\xdbX\xefCd\x1f\xd8\x16?w\x1b\xb3\x85\x1f\xc60\xbb\x9aE\xc4B\n\x08Ma\xde\xd8\x14\x82\xf7!d\xda\xd2\x18\xfdK\"Z\x9cc\xc9\x04\"[\x91\x1dP~\x1a\xe7\xb2wYp\xfck>\x9f\x1f\x9fDd\xf7\x84\xdf\xbc6\xe0#\x88k\xd9t\xf8\xc8\x01\xdf\x8e\xa7\xe1\xfaz[9 ?\xf4\x90\xa0\x90\xdc\xad\x8e\xd5\xc8\x05\xd42\xaf\x89}z\xa9\x1b\x93\"z\xe6\xb5\xe9\xf8\xbf\xec\xc5Egl\xf1s\x03\xfd,\x1eD[(\xc4\xe5f\xfbxB\xb5\x13\xa5[\xfc\xbc\xa3\x80\xa9J\xe7\x14\x08(|\xc0C\xe0\xf0\xa3c\xea\xed\xa7\xde\xdeV\x85_54\xca\x80U-\xfa\xb7l7,\x01S\x05\x87\xa9\xaa\x02\xdf.v\x0b\x9b\x92u\x0e\x00'\x01J\xf4L\x0d>\xfa\xc6\x9dz\xd5\xbbv\xc2T\x8er\xaa\xddu)\xbc\x93\x00\xaf\x10\xfcA1\xbd\xcb\xd6\xa0\xf0N.hA\xe1x'\x94\xa2\xa7d\x85wB/\xc81\xfe\xf2\xc5W\xccG\xfdd\xc6\xed\x0d\xe9Eqd\x17(\xc40\x8e\xfc\xed\xb0\x91\xbb\x15o\xaeV\xf5\xac\xc5\xdeI\xa0\x03\x86\xb8\x9e\x14*\xcd\xf9\x9c4\xd7\xaf\xf9\xda\xa5\x9d\xb1\x1b\xb0:X\xf5\xe5\x073\xb4\xec9\xa5\xa7\x19\x89\x87\x00\xc2\"'\xd1\\\x97?\x8f>\xb8\xceo\xd0\xbcj\x7f(\xf1\x04\x12\xaf\xde\x7f\x17\x9e\\L\xc0\x90l\xb1\xaa\x16h\xd3\xb2\x8aGC\x95\x8bg\x18\xc5\"\x0c(\xe9}\xfc\x16/\x98\x11\xde\xcd\xaf\xf8\xef\xbb$\x03^\xb1\xbe\xb2\xde\xc0\xdb\x86\x9b\xdf\xa1wL\x05\xfe1\x03\xff\x11\x85\xef\xd8\x855\xddx\x87\x8d\x93\x8f\xcf<\x91\x01\xfb\xd7\xb3w\xd7\xda\xf9w\xe7\xdd\"2\xea\x1d\x7f\x8dg\xfd\xd0x`\x17<\x82\xe7\xa1\x0b\xe2PX.X'\x0b\xcbq1\xd4\xa9\x0bY\x9d\xc5\xbau*\xd4\xe0Cl\x04\x13\xd6n\x05)\xe2\xcf\x16r1.\xfa\xabf\xfe\xec\xe6\x97\xd5_\xd7.\xbb\xc4\xf5\x93d\xd2>A\xd9\xb1\xbf\xe4\x9b\x97\xbd\xc9e f h?\xfc\xeb\xbcSy!Wf\x84b= \xa7i\xdeco?\x189\xf6\xa1l[\xdb\x1e\x1f\x89\x07\x84\xfa\x17\xac\xdc\x13{)v\xcd\x9cS\xfc=\xec)\xd9T\xa6\x7f\xc6\xb3A\x19\xacf\xad\x9a3G\xba\x97br\xce\xfd \x19C\xefb\xfe\xe7\xa4\xb5&\xb3*\x07U\xb5\xc6\"Y\xcc\x89\xdf.\xcbi\xd9\x11\x9f\xc7\x1a\x05\x93Xp(\xcd}n\x9e#\x04\x97\xbe(v\x92\xc5\"\x13!\x88q\xeaa\x88kG{\xe5\xd41\xb9\x80\xecQ\x17\xba\x04U\xc8n\\\xfa\x86\xdf(\xa8'}\x8b \xd5GNU\x84Z\xe6=v2\xb0D\x86\xe6SoNwy\x88\xb2\x98\xe0\xcdv\x88\xdb\x89?}JA\x93\x0b\x16\xf4m\x82\n\xf5\xc6$\xe7\xf6\xdc\xfb\x13\xac\xc3\xdc\xfb\x01\xff\xff\x0d\xfc\x11\xd6^\xb7\x01\xf2\x8d \x8a\x0e\x1b\x1f3\x13S[\xc6\x15\xdc\xfe}\xec\xd8\xf2+\xa6v\x90L\xe0Y\xc7\x87\x8d.%|\xd3\x9e\x1b]\x9e\xbeM\x16\x04\xd2\x13\x15f\x02I\xf4\xb4\xe9V\xdc\xbe\xc3\x14\x16j@\xeb\xacS=\\\xbb\xa4+\xbc\xf6\xda1\x8e\x1a\xf7\xbbo\xd8|T\x17v)\x0eG\xb5o\x870\x81>\\\xd7\x19\xda\x9a\xfd\x9a\xc9\xeb\xb7\x1fl\x99\xa2\x85\x1ez\xcc\xea\xd9\xc3\x13d\xbf\x97\xc1\xc24-?\x8a\xfa\xa6$\x93\xaa\xea[\x8fa-\x9d\xf1\x10\x8b\x86`\x14\xdf$\xbc\x8a^d\x13\x0e\xe7T\x05\x1e\x9d\x1a\"4\x03o\xd2\x90$\x1f\xb8~m\xa4\xa7\xb1\xce).\xa7\xd7\xc8p9\xeb9\x0f\xb6\x14\xae\xaf\xf7S\x80\xe8!a\xe8\x1f\x90\x98F\xcc\xcbP =\x9b\xeb\xebn--\xa3\x10\x81(r\xf8\x08\x01;\xa6\xa4E.\x88\xf4iy\xcc0\xdf\xc6\x062\x18\x99\x1d\xf7Q\x85Z\xa6\x198\x98KM)\xeb]\xeb\x8f|\xe8\xa1-Ub\x87\xde\xf9\xd0\x8b%\xf3g\xbdg\xf7\xae\x00]\x0f\xc5\xc9\nP\xbc:luw\xbd>v`\x90\xe6i\x93\x08jw a;\x90\xd9\x89i\x07$\x14\x84?o\xa4\"dB\xaf\xf6\xd4\x91\xc7\xb4\x1b\xb6]\x05\x8a\xed\xb9\xaasmo\x0f\x98\x84\x07\xc2\xb8f\x0dk\xa7\x8f\x18\xd6\xc1\x9a@\x18\xcf\x92,\xa3\xb7u\x18\x9f'34K\xd2\xb9\x9a\xdd\xdc\xbe\xb8\xa3\x02\x14z~\xb5;\xf7\xf6}\x95\x9f\xbc\xc2\x86\xbb\xe4f\x01m\xcdc\xce\x9bi\xdb\x02F,\xb0W\xe3\xdd\xac\xe5C\xc2u\x1c\xa6\xdd\x98\xbb\x90\xaa\x08\xa8\xc0\x85\x85\x0b\xe7\xae\xb0\x07Ia\xbf_2\xd4Y\\\xf1\\\xa30Ze\xff|\xc5|Fq E-p\xeb\xd4;E\x13\x96\x0e\xdc(I\xe6\xb3\x9b\xfa!\xa20\xd5>sT\xf3C\x9dJ\x802|a\x9d\xe0<\x82\x00\x1e\xc3\xe9#8\xd5Y\x9a\xa2\x95\xe9\x92\x07\x8c\xbd\xb2}\x9b2#dzz\xecL7\x8f]XLG\x18+\xf0\xca\xc6wN\xed\xa7\xba\xc4\x9f\xb3\xca\x0cu\xd9<\x8ej\x13X\xa6\xf7\xc1da\xdcq\xea\x11\xaca\x97\xe7^L.\x0b\xdbq\xbc \x89\x89\xc6\x1a\xb7\x1alb\x9f\xbbp\xe5\xc2\x82\x07\x82\x82b\xd8\xd0\xae\x1d\xef\xeb\xb7\x07O\xfeL\xc9ezq\xbd=8z\xf7\xf6\x15\xec\xc1l\xb5C\xb6\xd3o%-\xe07\xe90\x90JFW\xe0:\xd8\x87\xc2\xa6\xf7\x14.\x7f\xcc\x97\xbfh_\\\x15\xafk\x8c,I<\xd6\xacB\xe6\x87\xe0'\xe1\xaf\x90\xa1\xd8\xb0rhs\xdb\xfa\xc6?4\x7f\x0d^\xab\xae!QR\x1b\x99Hf\xa0M@7Y\x98\x0c3\x1f\xe1+*\xcd\x11\xaf\x11;cv3L\x8c\x87\x86W\xd3\xe4\x98\x0b\xf5n&:\x8d\x1c/a\x98\xc3NuY\xa1f\x0b?\xf3g\x05\xc9\x9e\xf9\x85?Q\xba\x94q\xfb\x9c\xde\x85H\xbd\xc0/\xd0j\x8aNe\xde\x03\xdfJ$\\\xf5\xa1\x9a\x85'\xde\xdc.\xd0TOA\xf0a\x82\xb4\x12\xb9\xe0\xaeK\n\xac\x1aX\xa5\x90\xe3M\x88\xa7u\x14nLo\x18\x89\xfc\xa4%U\xed\xde\x7f\x82Y\x9b\xde?\x9ef\xc7m,\x1br\x16\xae\xef\xec'M3y`\x13`,\xd4\xac\xd3q H\x04\xe3\xaaB:\x1d\x1c\xc5\xd3\x12t\xfc\x01\xb8\xf3C#t\\fg\xde\x1bX\x87\xcc{kP1\xcd\xc3\xd8\x8f\xa2\xab\xa1\xd2w\x9f+\x8d\x93*j0\xe5\x88\xc5\x1f\x1a\xd1{\xacSr\xab\x92\xd9\xb4\xd5\xc7\xb1,\xa7\xd4\x1ab\xf3\xcfJ\xcchj;m\xbd\x8a\x89\xcc\xeal\xb4\xfc\xa8\x8c\xcb(\xebF\xa9\x8b\x8f<.\x86`V\x1b\x96^u\xf9\x11\x81\xb7\xebP\"\x02\xf7l\xb7\xc0\xf1\xd0\x00\x88E6\x18\x08\xf1\"\\\x84\xb9\x01\xdcB\xa5}\xad\xd0J\xc7\x1eACwn\x0b0\xa9\x953\x8e\x1d\xa3\xd2\xa4_M=dAc{\xfb\xc1}\xae\xa5\x7f\xc0\xff}\xd8\x8cj\xc7\xc3co?\xe4Q\xed\x1e\x8a\xf7;\xfc_\xfe\xfdC\xfe\xfdC\xf6\xfd\x0e%G\xf0\xdf\x11\xffw\xcc\xff\xdd\xe2\xffn\xf3\x7fw\xf8\xbf\xbb\xfc\xdf\xfb\xfc\xdf\x07\xfc_\xde\xde\x88\xb77\xe2\xed\x8dx{#\xde\xdeh[\x19e\x8f9\xdb\x0eY\x8b^0\x1aw\xc2x\x87U\x90J\xbc\x92\x9f\xf2\x10\x8f]\x94(WJ\x02\x82\xfe\xc1-\xc8CD\x88\xe6\x04k\xcc\xd0}\x84\xf1V\xaa\xa0\x19Ul\x91\x0e\x82\x94\x1b\xed\x83\xd0:o\x9f+\xb4\xdc8\xe9n\n?_$\xed{\x0c\xbeVL\xc0\xa2\xc2\xed\xc1z\x9d\xc8\xcf\xc78; \xc5'\xa3\xd1h{4\x1a9\"v>C\x18o\xfd\xf8\x8c\xebH\nYG\xe2\x03\xa6\xb3\x84Y\x12\x10H\xe9dtv\x96\\i]\xc0W,\xba%\xecc4 \x0cy\xca\xa2_\xae\x83m\x17\xb0\xb1\xc7\xca\x1dx\xfc\x18\x10~\n\xf8\x0f0\xda\x1co\xc3:\x8b\x99\xd9\x9b1\x17$\xfc\xcb\xb3\x0c[\xb7\xc3a\xbd`\xa6\x8b\x1b4\xda\xdcR`+\x0dPd\xfe\xc5pP`\xb15\xbc\xcc\xbf\xe0LiX\xcbnM\xe0A\x81\xa7d`\x12\xc3c(\x1f9\xc0-\xb9x\xe4\xd6bZ\xae\xaf\x1f;\x18F\xe2+&kiV\xa8\xc1\xa6<6X\xab\xf9w\xb3\xf4\xea\xeb\x83\xe2\xacM\xc7\xb6\x8a,\\Z&\x85y\x9b\x9bV-\xaa`\x059\x15\xb2u\xbb\x01\xf7\xc2\xca\x8e&\xd6\xdf\xa6:\xbc\xd4\xf6\xc3\xf6{\xba}\xd6\xd4\x82u\xf0YD\xce\xaeXS$\xdb\xfa\xff\xd3Z%\xff\xcf\xfac\x9b/\x8a\xea\xaau\xa5/\xda\xb5f\x03\xb8o\x90\x85\x12\x8aT\xb2\xc0\xc7\x1d\x0e#S\x04k\xb2\xe6O\xc9\xb1\xcd\xbc\xf3~\xfb\xf5\xff\xf8\xb7\xff\xc2\xe2\x9d\xf2\x9fX\xa6l\xe3Zs\x8b\xd3\xb5I\x98;s\x89J\xbe9\x86\xe3\xed0\xca\x807\xfe\x97_\x82\x9dLcZ;GWnA\xfbR\x94_\xca\x07\xb9e\xf9\xd2Z\x809\xec\xc1\xcc\xa3\xb0\xda\xc7\xa0\x81\x04\x8er0eT\x05\x8e\x803\xef6\xe1jE\x96]-w\xc1\xc2\xbc\xeccM\x85HTh\x11\x1ej\xc1\x82Z\x0b+\x8fT\xaem\xfdX\xfc\x18\xffx\xfe\xe3\xfc\xc7\x0c\xfe\xed_\xff\xeb\xff\xf5\xeb\x7f\xfd\xd7\xff\xf3\xb7_\x7f\xfd\xed\xd7\xff\xfc\xdb\xaf\xff\xc3o\xbf\xfe\x8f\xbf\xfd\xfa?\xfd\xf6\xeb\x7f\xf9\xed\xd7\xff\xf9\xb7_\xff\x97\xdf~\xfd_\x7f\xfb\xf5\x7f\xfb\xed\xd7\xff\xfd\xb7_\xff\x9f\xdf\xfe\xf3\xff\xfd\xff\xfe\xfa\xeb\x8f\xe5xs\xfc\x00\xff\xff\xf0\xc7rN\xe6sk\xc8\x19\xbb!M9\xde\xde\xc1(n-vF\x8f\x91g\xe2\x8a~\xd2{I\x0b\xd5q\xafm\xf3 $r\xc3 \xea\x02\x8a\x8d:\xe1%(n\xb1,\x8f\xc4\x01\xe6_Q1x\x14\xc8\xe9\xa7[\x8em\x89z\x96\x81\xa6\x11u\xfaVJ\\_\xa1X*\x17\xe4\xf6\x95\xe76V\xdcg\xf0\x18F\xb0/\xa5#\x1e\x1d\xd7\x06\xcc\xcaV2\x96\xf1\xc7\x1c\xd3\xacl\xe9Iy\xee\x1b\x11\xf9\xddN\xd0\xe493 \x18~j\x0d\xbc\x82O\xc7\xcdM\xe1\xd1\x0f\xb3DM \xf7\xdc)a\x03\xeaK\xbbd6\x15\xf9\xef\x02O\xf7\xc7J\xde_\x06\x8d0\x9eEe\xc0\x82]\xe8@C\xd4\xe9\x03\x8d\n\xed\xff\xa7D\x02\x8e\xba\x07\x0fS;\xbd\xc6\x08\x91\xab\x80\xc3\xed\x0ecc\x99\x06\xe3\x8e\x8c\xa4\xc4/&x\x83\xef:+v\xd9\xb7_\xa3\x91\x96\xb6\xb8\xa9\xb4\xb8\x0e\xdcO\x99`\x05x\xa3\xc0E\x91\x89>\xe4\xf1P[\"S\xf48\xe5a\xfaC\xd8\xdb\x83\x11\xdc\x83M\x05Ca=M\xca\xb8\xa8\x1d\xb7br\xe6\x17\xe19is\x12\x0f/\xc9\xdd\x0f\xbd(>\xc9\xd8\x93\xb8\x98%\xd1\xc78\xb2\xb4i:|\xd1\xfc\xc7<\xb6\xb4\xaf<\xfc\x99|\xbcY\xf0\xd6?\xe6$\xc2\xc2\x8f\xc2Y\xbe\xd2\x1c\x86L!\xfc\x14\x80\xb42\xf2\x19\xb4\xfa\x88\xf6\x17\x19\x99\x7f\xe4\xa5\xcf\x97~\x14\xad4\xfc!\xa3\x17\xad~\xf4\xc5\xa7\xef\xdf\xaf\x06\xfc\x83\xc6/\x9a\xfd\xf8\x13(O\xef~\xf4\xe5'\xc1\xfey\x99~\x84\xa1\xa7w4\xf4\xd8\x1e\x8d)\xb9\xbc\xf4\x8b\xd9\xc2rad\xae.\x0dfZ\xd5S\x8a?\xd5k\"\x1e\xc1\x19\x10\x93\x921\x91e\x0f(z\xa8\xd2\x99\xc5\xd3B\x9f\x19C2\xafO`_\xd8\xe11/\xaa \x9a\xc0q)o\xecL\x8bc!\xc8\xcf:qA >\xbe\xe1jrQ\xa3\xe5\xc2\xf8\x06\xeb\x99)<4`\xd0\x92\x86}K\xea7\x964\x93\x974\x1b\xb8\xa4\x12?\x91a\\\xb3\x04W\x95\xbd\xe1k\x19:,N\xd3\xdd\xadhN\xfc\xec\xdf\x01\xf4\xee\x963\x8d\xc2B \x9e\x1d\x03K\xfd: \x0dGl\x8fw\xda\xbe& D!\xdd\xd7L\xef\x86J\xb4\xae\x90\xc4\x9a\xa1\xf1\x8a\xe5\x9f\x9e\xce,\x9ew\xe2\x9e}\xea\xfc\xf1\x9eC\x99\xe3\x0f\x1f`\x1bu\x1e\x05\xc9\x8b\xba|\x7f\xe2\xdcsac$\xc2:\xd1zc\xac\xe7\x9f\xca\xb5|lH\xaa\xc4\x1a\xf3\xea:\xde\xbeC\xffkT\x92\xcb\x1d[*\xa3\xdc;-\xaf\x8a\xbd\xfd\xaaP\x05r\xe7\xdc\xf7Y\x12\xa8\xde\xb3\x9d\xfd\xfd{\x1e\xb9$3\xdb\xb2\xe8\x1c\x15P3DO\x02\x92\xad\x9a\xd0]\xaa\xe3\x06@\xd3'gOx!\xf14<\x95%\\;\x95\x8a\xfc\xedZ\"\xa7_\xab\x83\xe8\xe1\xe8\xd4\x9f\x9d3K\xff\xdc\x85\x08\xc3T\xcfY8}\x93\x93z\xc0B}\x86gq\x92\x91\xa7>\xc6\xf6\xb3B\x0b&\xf4\xda\x83uZ\xb6,\xa3\"\x8c\xc2\x18\x8b\x96\x8d\xa22\x0eQ\x11\xbf\x0fV\xd9(\xc8\x8bp\xf6\xfe\x8a\xbe\xbf\xe2\xef\xf5CX\x98}\xe4\xcf\x9b\xbbY\xc0>l\x8f\x1fn?\xdc\xbd?~\xb8\x83\xe6\xfe\x8f\x1f?65\x80\xd1g\xeb\x03O\xbc\x1c\x83\xa3\xbb\x10\xc0:Xg:\xfb\x01\x94\xfea\xd0\x06t\x8e\x90Z`J\xce%o\x876\xf2\x85\xbd\xbf\xf6\xe3\x8f\xb9c\xb9\x10\xa84\xd4\xd5\x83\xfe\xeeK\x06\x8b<\xbe\xe7\x9amG\x18y\x0cE\xcd\xb0\x0e\xf9t\xf3\xb8\x82\xf0\xc7\x80\xf1\xd5\xec\x94\x07?\xe12\xa5\x85+>p\x1c\x17\xd6\xd0\xb6\xbf!\xf1\xc2\xa4!\x9b\xc7\x95F.s\xcd\xe4O\xe3\xc1\xa9\xcf1.\x01\xcc\xe1\xab\xae\xe4{\x03\xc6\x8f`\xbe\xbe\xee\xc8;S\x8b\xd8\xe6h\xe8k\xe3\x8f=\xa5D\xbc\xf1\\;nw\xf0|9\xbe\xaaC0\xa2]\x00s\x14J\xe9\x07l%F\x0e\xcf.!-\x1b\x8b1\x1f\xb9\x90V\xad\xee\xc1\xb9\xe3|\x00\xbec,\xa3O{\xfb\xe8\xa0\xeb\xc1\xc19\xecC\xca\xcb6]8\xc7O:#hY.3\x8f\x06kS\xa0F!\xd3\xdct\xa4\x15\xb3\x07a\xb6\xe6\xa5\xd9FW\xb0\x0f\xd3c\x98\x08\x1cT g\xdb\xdc\xa0Z\xcc-\xd1\x08\x1a\xa2\xeb\x06d\xd5\x8d\x08\x01\x89\xac\x8ak\xb2*\xeb\x90U\xb1\x8a\xac\xcaV\xa5\x03\xcc\xf2\xfa\xd4\x8e\xed\xedQ[\xec\x9c\x88\x92q\xbb$\x14%;\xed\x12\x9f\x97\x8c\xee?h\x17\x95\xbchgk\xb3]\x94\xf3\xa2\xadNO\x11/\xb9?\xden\x17\xcdz\x03\xf7U)\x98\x88wrB\xf2\x97IPFD\x97C\x14$\x99\xff/\nW\x10\x8c\xbb\xc7r\xe2\xe9B\x99\xd5\xf9\xdex\x0c\x86v\x8a!o\xe1\xe7\xaf/b\x91\xbe\xb5\nC\x17s\x95\x0d3\xb6 \xdd\x84oP\x83\x10&\xa6\xf3\xcb\xa8\xe0\xa1\x99\x9a\xa0A7e\xbb\xb3Ts\xae|q\x1e\xfd\xa1z/\x96\x0eR-\x8b\xdaY;\xcc\xf4<\x18Y\xa3.E\x92\xd6Y0\xde\xdd\xd9\xdd\x1c\x05-E\x1b\xbdv\xad-o\xf4\xc0\x1b\xb7J\xe8}j\x9d\xfa\xf1OI\xab\xe0\x8c\x16\x1c\xfa\x85\x0b\xe3\x1dxR\x9e\xc1xs\xf4\x006\xefOv\xc6\x93\xf1.\xfc\xe9\xe5\x91t\x10\x86\xe9\ns\xb1\xf4\xde9\xc9\xf20\x89s\xbc*;/?|\x80_\xae]E\x89\x97_\xf8gg${\x17*\x9d\x97x\xb5 (\x02\xdd\x9e\x85\xc5[r\x1e\xb2\xf2\x85\xb2\xfcY\x98\x15W\x13\x08\xba\x85\xa7e\x18\x05G\xe1\x92\xe4\x85\xbfL'p\xd6\xad\xb2\xf4g\x8b0&\x93v\x0c\x85.\x07Ph\x1d\xaf\x82dy\x12\x06,\xcf\x94\x1ao\x06\xc9\xf2U\x12\x10S\x95<%\xb3\x89\xde\x88*\x8b&J5,/\xccMMG\xfeUR\x16\x13\xb0\xbe\xf6s\xf2\x02\xff\xd0\xb4\x14$\xb3\x83\xcb\xd4\x8f\xd9r[Q\x98\xebj.\xfd\xcbg,\xf5( \x8e\xfc3c\xff\xf30*Hf\xaa\x81\xe6\xa4~\x91d\xefp\x9e\x8b\xa2H\xf3\xc9\xbd{IL)^\x01=^\x98\xdc\xab*j\x86\xc5|\x97r\xfdB\xce\xca\xbcH\x96\xfar\x9eO\xf5uJX\xea\xaa\xe7A7\xa9N\xab.\xcfz\xf4\xac\xd4%\xbb\xaa\xea\x13\x92\xbe\x08\xe3\xf7a|\xa6\xaf\x94\xb1\xd6\x9e\xc7\x05\xc9f$-\x92\xacOc[\x7f\xc9\xb0\x97\xb2\x82f\xba\x19\xc9\xd3$\xce\xc9'\xea._$\x17\xe8\xd3M\x02\xbejj\x073\xa8q\xeb\xcb$ \xd1[\x12\x07$\xc3u\xb3\xc8\xa5\xbfL#\xa2\x83`\xe9+\x04\xe5\xe0\x19I\x8b\xc5\x04\xb4{R\xd7\xcf\x87|@\xa7ppY\x10<#\xb9~\x1fi\xbd\xa7\xc9r\x99\xc4\x83j\x97)\xc5\xc3$8,O\x97a\xc1\xa2M\xe4\x13\x98Zg\x04\xd5.i\xc9\xfeIr\xfc\x97e\xd1\xa5\xbf\x92\x94nU\x8e\xfa\x01\xe2\x07X\x89\xcb8\xad\"\xf3g\xc4\xd20\x9eiFrR\xd0>\"\x81\xb0u51C\x17\xad\xa9\xa9\x10\xc6a\x11\xfa\xd1!\xddX\xfd\xd1\x9a\xc7\x86c\x99,\xd3$\xa6|\xcb\xa4\xed<\x05jp\xa2\xfc?%\xd3\xe7^\xeag99D\xb9Y'M p\x82\x89x\x1c\x057\xf1:OF\xac)\xa5X?\xe5\xdd\xf8b\x8d\x1c\x9b\xdeq\x05\xd2\xde\xb1\xa2\xb7+\xed5\x91_\xe5\x05Y\xaa\xc8\x08\xf1T\xd8+\xf5\xf8\xcfU\x0eW\xb5M\xa9\xc7\xf7V\x03kl\x9b\xda\xb3\xd2\x8eJ\\\x1ff~U\xd4J=\xf6K\xdd\xb7x\xc4\x95\x90z\xec\x97\xb6\xb2f\xaeP\xdf\x98\xc6~X\x1d\xdd\xc5)\x1e\xbc]S\xaf\xcc\"\xfd84;\x01\xa9'C\x7f\x97@V\xc4&\xe8\xfb\xa4\xa2\xa7O)=\xdd\xaa\xdd\xfa\xbbEZ\xdb\xa7HRK\xfdS\x15\x9a\x078`\xb2\xdc#\xa5\xc0\x86\xb0\x073\xc7\x85\x13/'\x05\x1bCn\x97\x8e\x0b\x17\x02;=\xc1\x99\xe7^\x94\xf8\x01 0\x8fI\x9d=\x9d6\xb5\x16\xd3CE\x7fZ \xf2\x84\x16KQ\xb0\xe9BX\x8f\xb2\xc4y3^p\xd3\x85\xa4S\"%|ck$:.\xd3\xc0/\xc8\xbb,\xb2-\x0b\x07\xd6-|\x91\xf8A\x18\x9fQ\xe8/s\xdb\xca\xcb\x19\x06~\xd1\xd4>L\xc9\xcc\xa6\x83\xc8:\x83\xc0d)\xcdo\x82\xe4\"\xa6s\x07\x0c\xea\xc1g\xaa\x1d\"\xd6\xe8\xf4+\xda\xe0\xc5\xe8\x81#6\xc0\x81\x0b/C\xd2\xa7\xde\x14\x17\xac'i\xaa\x93\x97V\x91J\xb0\xfeI\xa8\x0d\xcd\x0f\x1c0s9\xb2\xc6\xdfK\x92] \xf8\xab\x9b\xd0\x8bR\xab\xe1\xe5bXj4\xc9\xa3\x89P\xe0\xc0T8\xbceL\x06\xd0x\x89`\xf7\xe1\x03\xf04\x1e\"k\xc7\xe1\xfb0MI\x00YM\x07\xc6 \xfc\x0bk\xe5_ \xc9\xf07\xfd\xf8_\xe0\xc2\xcf\x11\xed\x87\xf3\x90\x04\xbau\xe2x\xe8\xa2\x8b\x18\xba\xe7\xeb\x92bB\x0e\xf2L\xa6\xc8~\xbf\xcb\"\xa5\xac\x0d\xe5\x98\x8dM\xee\xbc\xa0G\x9b\x9d\xa8\xaf\xaf\xdeq\xb0Y3\xd6\xf8\xf0\xc1\xd8\x82\xe2\xfa\xc6K\xed\xb2;\x1d\nlo\xc92)\x08\xfb^M\x81\xab\xd8\x90\xd4\xeb\xbeU}\xa9`)\xe8\xa7\x9d\xd7M\x1c\xec\xc2\x01fb\xb0\x8d\xf3\xbc\xa4\xd5\\\xb8\xa0\x87\xf1@r\x03\xba\x96\x91,\xe9\xa5E\x1c2\xe1\xd8\xde\x19=\xe88\xf0\x8ev\x1c\x8f\x8b\xfd\xde\x93\xab|HC\xf5\xcau\xac\xa0\x99\xb6\xf5\xe1\xae4\xe1\xd8\x1e\xef\xdcwx\xbaM\x03\x95\xd1631\xbb\xed4\xb3s\x03\xacnX\"/C\xb3\xa3J8\x18\xdb;\x9d\xc0\xb0\xb5pq\xd2\x9fb\xb3\xb3\x03\xdc\x83\x1b\x1d\xbe[\xfbp\x7f\xdb\xf1\xe6rL\x94!-\x0e\x9cD{\x9bn7\x89\x9d1\xf3\x07\x1f\xdd\xe7~\xe4c\xeeW>\xbe\xaf\x04\xaf\xc3\xab\xe5i\x12\x0di\xbb\xd7J_\x9d\x8e\xb7\x13\n\x83G\xe9m\xe7\xb2\xe4\x913\xda[\xca\x83\xf4\xee\xb4\x83\xf1\xf2\x19\x8c\xb7\x1d\xef\xcf\x07\x7fk\x96\xb1\xd4\xa1;\xed\xf1\x88\xcc\xa1\xed\x011\x81\xf6\xc3vX\xa1\x94{\x87\xb4\x8d\x13x\xea\xd0\xb6O\xc2\xa2\x82\x94\xe6\xfbs\xfe^\x9d9tg\xdc\xae/2\x87\xb6'\xcc\xb2\x86n\xb5G\xc3R\x86\x8e\xdb\xb5Y\xc6\xd0N\xdc\x87\x0b\xbe\x9a\xed\xb9\x1e\xb0%h\x8f\xf1\x92Wo\xcf\xf5\x90\x8f\xbd]\xff)\x1bL'X\xca{\xb6\xe5\xed\xd7O\x04Bj\xbe~\x0d{\xf0\xb4\x9d$\xf4\x0d\xec\xc1\xfb\xf6\xcb#\xcc\xfb\xd9z\xf9\x12/\x08\x06\xd7\xcd\x92\xe7\xd5\xd5\xd1|\xff\x13\xec\xc1sJ.<\xafQz\xb3\x06\xbd`\x02\xdb:Y\x84A@\xe2\xb6\xca\xff-+-\x927Y\xb8\x0c\x99\xbfM\xb3\xc63\xd4\x03y)g(\x9f\xe7\x07q\xb9d!\x91\x9b\x15_\xd0\x1b\xd2\xb6r\x1c\xfd\x06c\x05\xb3\xabvs\xef\xe4Z\x9dd\xc6\x7fg\xa5I\xba\xa1\xa9\xf0\x0d\xecu\xb4I\xcd\x1a?\xeb\x02\xc2\xbcl\xd6\xfb\x1aW\xf4/\xac\xb1f\xd1\xf7\xb0\x07k_cf\x88\xaf\xa5\x8c/\xad\xbf\xbdy\x18\x07O\x17a\xd4R4|\x0b<\x82odvr\xe6w\xce}X\xdb\x83K\xfb\x0d\xf2fh\xd7\xab&\xd0\x87\xc5\xd8\x82\xba\xe17\xb2\xad\xb0Y*\xc2\x93,\xdf\xd7V\xbav\xbcn\xd0#P\x8aA\xae\x9dv\xddkG\x0eg\xa3\xb1]\x03 !\xbf\xb6\xbfQ\x9b\xd3d\x92\xac\xe2\x9biq\xec\xc2\x9b\xaa=\x1e\x10\x92 \xb7\xf9\x0d\xfd\xf9\x06\x9b\xe9\x04\xc0\xbf\x86 \xbcin\xd9\x0f\xbd|\xbb\xe0\xd9\xdf1\xaf\xf1K\xfbe\x0d\x08&\x1d%fL\xef\xaa'\x9b\xdd\x7f\x07{\xf032\xc5\x0c\xea\x1bP\xeb\x89\x9b\xbb\xb1\x88\x06\x80R4B:\x0b0\xa8\xa5F\x94\xfd\x97\xa6\x19\xfcm`l\x80\xaa\xe1=\xb1I\x7f\xb3\xff^m\xe0\x15\xcb\xe2\x02{p\xc13\xd6\xd1w\xb4$\xb1\xdf\xa1\x91\xc4>\xc6\xd7\xa9\x10\x10f\\\xa5\xfd\xbdby\x85\xa7\xaf\x8e\xa7\x053s\x11\xbf\xf7x\x0e\"\xdc\xb4Xw\x10\xea&)\x17\xb1\x89\x89\x8bT\x90\x0d\x93\xba\xc3\x0f\x1f\x18\xf4\xbdr\xe1\xc0\x1ea6uJ\xa6\xd4\xfd\xd2\xe1\x7f[\xad\x06\xfd\xb6\x86V\xd3b\xfey\x88q\xc8\x95\xd2\xf5\xad\xd6\xbc\xb3\xe0\x1fK\x9e\xe8\xb3\xa0CKXj+\x16e\x97IP\x98\x1fe\xf2\xc8\x81\xbf\xa1\xfe\x1d\xc3\x05&\x18\x06\xa60j\xdf\x8d)7\xfe4\xf88=k\x18\xaf\xe0\xc6\x13\x96\xaaP\xdb\xf3\x1a\xd6\xae\x01\x08A\x83\xe5\xf7\\K(0\x11f\xc1e\xaf\xd9\x05\xa2\xec\xda\x17\x9f\xff\xf9N\xfc\x16%\x0cz\xe8o\xbay\xe4\x18\x0b\xdbv4\xcd)~1d\x8f\x98\xdd\x05]\xff.\\\x0b)\x11\x89\xa9\x9e\x94\xff\xc8\x11{\x82\x87\xcd\x17\xb3\x8a9\x04\x7f#v+dSz7-\x0c\xe70l\xce\xaa\xae\xf73nmi\xdb/M\x81\x0d1\x08\x14=N2\xa2\xef&\xc4\xb0\x18IZ\x87{\x92\x92\xd0w\xf2b\x9c\xf3\x8cj\xa9\xca\xebw\xb3\xe1\xf5\xbb)\xf9\xe6\xbb\x9d)6\"B*\xaf\x13\xe0Y\xdajl\xc0SZ\xfe\x9d](\xcd\x03\xce\xfe\x9a\xbe:\x16\xf8\xc2\xae\x8f\xbc\xb8'\xbe\xad\x0d\xe9\x10\xa9\xab\xd2\x1d]+\xa5|H\xf2}O\xff\xf7-\xdd\xc3N.@\x18\x14I5\xa7T^\x8bXp\\\xf8\xa1\x99\xeeM\xce8h\x15I\xe5\xe3\xdd'\x04)0C\xdf\xfb?\xc8M?\xc5\xa4t_\xb8\x94E\x81=\xf8\x1bF\x90\xdby\xe8\xe0_\x87\xf8\xff\x7fF\xae|\xbc\xc3\xde\xfd\x89\xf1\xe8\xbb\xec\xaf\xbf\xf2\xfc\xc6k\x94\xdf\xdc\xc6e-\xe9\xfc-\x15\xc3`\xb9\xf4kD0\x0b\xfc\xbaWR\xf5\x83\x1d4$2t\xc4\xbe\xedc\xaa;\x1fS\xdd\xf9,[\xda\xcf\xed\xf5f ;\x91\xe8\x16Y\\V\x1d\xe7\xbfPva\xe1\xe7\xcf\xf9\x01p\xc3\xfci\x12\xcf\xfc\xe20\xcd\x88\x1f \x9b#(0\x17\x9d\x85\\n\xbd\xeb2\xd7\x0c\x97\x07\xe8u\xd1\xde\xd3\x958)W\xec\xcc\x91\x7f\xe6\x96q>KR\xda\\.LC-\xd7\xa2\x17\x01a8\xe2/\xf5!!\xe4\x91\x03\x81\xfd\x97)!\xcd\xb4\xe65\x12\"\x98\x8f*\xf0\xf2\"\xc9\xe8\xe5\x12\xf3V\nR7\x13\xd3f\xce\xed\x82L\xe3V;t\x05\x0f\x1bk\xc7Ox7B]\xbf\xfdG%;{Ao\xb5\xf5=\xb47\xdf\x87\x17\xf4TM\xd8?{\xdd\xe4\xea-\x04\xfc\x9e\\}\xd3\xdf\x15Z\xe0\x7f\x87\x16\xf8\xc6\x9c=>0\x1a\xb8\x83\x9b\xa0\x19<-\x8c\xe1\x85ZCA{z\x81t\xdc\x9e\x9c\xba\xc3H\xc6\x9799$\x05\xaa\xb1\x8d|\xda\xf7\xaa\xf0\xc0\x9d\x96\xc2e\x1a\x91!-5\x93\xcd^w\x8eJk\xa3\x19\xc3\xdb\x8dq\x84A\xd4\x07$+\xedZ%\x17\xb0\x0f\x976\xa6\xa5\xfc\xb3}\xc9h\x1d\xe3f\x07d\x1e\xc6D\xa8\xa8'\xf07CqH\xf2 \xfc\xb9Y\xe1\x8c\x14\x92\x8a\xfb\x19\xc9gY\xc8\xd4\n_\x98*\xbe\xf2\x97\xb4\xb1\x7f6\xd5a\xc7 \x9f\xc0_\x1b\xeb\x88\"\x96\xe6b\xdakx\xc5\x1a\x98|q\x11\xbel\xc7<\x16\x8c\xda4.\xa3\xe8\x18c\x99\xfdd\x0b\xba\xd3\xfa\xe5\x9a\xbf\xe9\xae\xbd\xdf1,m}\xc26\xb7\x851\x1d\x17\xac\xef\x0e_\xbfR\x04\x01\xa9\xb4\x0c+\x10?\x9cd#\xc7\x8c\xa3\x18=R\xc5\xe0\xa1,\x05\xa7\xc9\xea\xeb>ib!\xf1\xf0L\xde\x9c \x1a\x1d\xbb`\x9f\xda\x9d\xa4n\x9c\xc4\xffN\xf6\xbf9\xe3\xd5\xecb\x089.\xfaRJ\x87X\x987\xa44;\x06\xf5\x8eK\xfb-\x1c\x0d\x1a\x00\x0e$t\xect\x1a.\xfc\xc4\xb5*\xcf\xbb\xc2\x87\x06XIB\x84\xe9[$\xc6c{g\xd3\x91\x85\x0b.\xbcm\xd4cI\xb6^\xcf1_\xe8\xcb\x1aq\xb3\xbf\xfdb\xe1\x82E\xff\xb1\xf8=;\xe7j\xa6\x1a\x06\xd66\x07\xa9\x00j\xe9xG\xca)\xa2B\xa9\x93\xd8QBaU\xbd\x94\xe0\x073e\xda\xb7\x98\xc5\xe5\xed\x1a\xce(2HV\xa0\xea\xbb\\\x00O\xf1\x11\xed=\xf4\xe6,/\xcb\xe6#(kH\x8d\x1e9\x90W\x16\xe8\x94`/\xa7\x11\x12\xe5HN2\x10V\x1f`Ia\xb8\xda\x8av\x84\xdb\xc2\x9b\x90\x92]\xdd5\xfd\xe5\xda\x13\xa4D\xb3\x10\x83\x03\xd5\x86\x14\x02\x96/\xc28H.P\xc9\\\xfd\xe2BS\x05F\x84}C\xa1\xcdZ\xa0\xb8]v\x8b\xab\xb5\xa3\x83\xa88\x0c\x8akM\xd9H\xe1\x07l\xf2\x18G\\\xe58\xeb\x95n\xe9\x93\xd5T\x04\x88\xca\xda\xaa7\xf9\xbb\x18\"w\xf4Q4\xd1<\xc06\xcf\xbf\xdc\xd4\x14\x0e\x02\x00\xa6K\xb1-?\xbf\x8ag\xcfWR\xc8\x89OY\xfa\x12\xa4\xa5\x07}\xa7\xd6|\x15\xde\xe9UA^\xb0#0\xe4\\F\xdas\x89\xe9\xa5:%\x19\x96\xb4}:\xf9Ro\xd1\xdb\x13\x83/9p\x0f\xb6aC\xe2\xcd\xaf](\xbc\"\xf9\xfa\xaa <3\x9catm\x9e\xfd\xa4\xb0\xe7\xce1|\xf5\x15\x8c\x1e\xc0\x87N\x11\xac\xc3\x88\x17\x8f\xd5\xc5cV\xbc\xab.\xddr\xe8JL\xf3\xf5u\xbc\xa60\xb2\xf2.| \xe3\x9d\x9d\xf6\xfb\x07\x9d\xd7\xe3\x9d\x1d\xf8\x12Z\x89\xa4\xc6<\xc5\xb5\xb8:\xd5\x93\xd1\x0c\x96\xce\xe5\xf1c\xd8\xeev\xd2\xc2\xb6\xa3A\xbd\x8c6\x8dK\xb6\xad_\xb1\xc7\x8fa\xa6\x87wZ\xb0u\xfd\x12v\xb7\xe8\x0bko\xcfB)\xf7\x98\xb7\"\xf6\xcbf\xed\x8cq\x1f\x1e8\xb0\xaemx\xb4)Z\xa6\x80Q\xb5\xcc\xbb\x1aK]Y\xed\xa1\x0b)L7\xdc\xf4\xb5\x82\x7f\x16B\xc7D\x12>Ze\xcc8\x8f@N\x0f\xfb.\x8c\x8b\x07l\x1f\xf7\xe5?&,\x9f\x0b\xdb\x14\xeb\xc9\xd7O\x9f\x1d|\xf3\xa7o\x9f\x7f\xf7\xe7\x17/_\xbd~\xf3\x97\xb7\x87G\xef\xbe\xff\xe1\xaf\x7f\xfbg\xfft\x16\x90\xf9\xd9\"\xfc\xe9}\xb4\x8c\x93\xf4\xefY^\x94\xe7\x17\x97W?o\x8e\xc6[\xdb;\xbb\xf7\x1f<\\\xbfg\xf1h\xdc\x0c\x8f\xf8\x95t\xbe\x84\xaf \x7f\x04\xeb\xeb\xa5\x03\x19K\xc6\xedOK:\xf0\xa9/\x83r\xe9`,c\x95[[\xa4\xc7\xea\x02\xd8\xba\x84U\x01\xff\x01\xb6)\x1a\x13\x8c6E\x9e\\\x16\xf8\xc1vn\xc2\x84!f:^9mfw\x1df:\x8c_g\x8cB\xf7S9:z\xc1v \xa6\xff\xac\xef\xc1\x96\x83\x00c\x13\xba\x13\x14\xe5P\xec9\xda\xbd?\x1a\xed>\xd8d>\xf6\xd3\x92\x9e-\x06\xe9\x14\\w\xc6\xbc\x84\xa1\x0fV>>\xa6\xac\xb9\x80|;\xc4\x8cZ\x08\xff\x0f$\x98\x0f\xf1\xcd\xb8\xfdfWz\xb1\xbb\x05_B\xd8\xe6\xa9*\x8a\xa6{\x14\xaa_\xc9\xd4\xda\xb0d\x08\xdaD\x08\xda\x1dS\xd0\xb2NTE[JzC^\xcd\xc2\xcb\x88\x1f(T\x81<(\x8a\x02\x0cCW\x10\xea\x0f\xe0\x8f\x90PZ\x80b\x06\x85`\x94.\xfc\x88\xaek\xe9\xa8k\xa0\xbf>\xaeY\xb7\x8c^\xcb\x1b\xf7\xbb\xef\xd1~\x06\xf6\xb1\xe3\x11LT\x01\x0bR^e\x83\x96+\x9a\x0e\x10QR2a\xde\"w\xb8\xc3\xfe\xfa\x1e\xa4\x0c\xc3\x04\xf0%\x9f\xc3\xc6\x8cM\x02\x02x\xfcx\x0f6f\x94rX\xa7'\x18f\x18\xd8\x14\xeb\x8fwv\xe1\x8f\x10\"\xc2d\x1d\xb8 \xda\x9b\xc1\xc6\x1e\xcc_\xf9\xaf\xb8\x8c\xa7\xc0\xb6\x18x\xec\x83\x8dY\x04D1o\x92!\xef\x19j\xe9}\xd1\xd6R5\xcf?\x85\x0dX\x1c\xc3\x87=\x18\x8d\xe9\xc1:o\xddp7b\x8a\xb9\x10\xa4)\x9c\xb6\x0b\x17\xac\xda\xac\xb5#B\xe5\x96S\xb2\xb1\xab4bAj^)\xa3G$\xbcd\xac\x8c+\x81%[\xaa\xb8\x12X\xa2\x8a*A\x0b:_\xe4\xbc\xa0\x13l\x82\x99\x9a\x8e\xef\xb7U\xaf\xcc\xd6\xb4mf9\xc7ff\xad\xb7)o\\\x11\xe6\x82\xd9\x9a\xee\xec\xb6\x03]/\xaaO\x1e\xb6?\xe1\xf6\xa6\xe3v\xdfK1\xb7\xce\xac\x99\xc5\xa9&\xa0\xc3\xd5\xa7\x0f\xe8p:D\x1a&%\x1bm\x82\xca\x89IU_M\x8b(UA\x92t\x9e\xb15J\xe5{\xed\n\xb8\xd6\x88\x0d\xb4y\xdc\xd5\xcb\xab\x82\x7f\xb4\xdc\xc9\x84a\x8d\x8b\x05i\xbb@-p\xcb\xcd^\xc1\xbd\xce\xc5+\xb8\xcd\x9a\xbc\xe3L\xde\xc7\xd0\xf1@\xd6\xd7\xcb\x92\xa4x\x1eS\xd4\xd1S\x11\xe7\xfdF\xccN\xe1\xd4\x0c]M\x99xN\x932\x0e\x0e\xc5\xc45\x95\x8a$\x89N\x93K\x8d\xc34bz4\x00\xa8\\\x18\xe9\x1d\x81\x16\x01\xd5\x1b\xef4\x8c\x03\x1e\xf0\x87\x95\xa1\x82\x99\xdd<{p\xeaVn\xd63\x14r|w\xc8\xf6\x9ayUr\xe1[\xb3\x93\xfe\xb0\x85\xe2\xa9\x18s\xda\xfe\x99\xc7\xf6\xf9hQ\xc6\xef_\x86A\x10\x91\x0b?#\x8e\x1d;\x86\xc0i \x06\xf2\x12\xe1FNN\xde\x1e<{\xf7\xd7\x93g\x07\xdf\x1f\xbd~\xfd\xe2\xf0\xe4\xe0\xafG\x07\xaf\x0e\x9f\xbf~u\xf2\xf4\xf5\xcb7\xaf\x0f\x0fNNP\x87\xc7\xbcGsE$\x1c\x90\xc8\xc6M\x97\xd6D=\xe9!\xaa\xdd\xf9\x84\x12;b\xfa\x9ez\x98\\\xffS\xa5*wTf$6?\xaf\x8eXk\x0cO\xc2\xbdK\xd1\x1a\x05\xdfVN\xb5\xf8\x17?\x1e:\xadRk\xbce}$\x89\x0b\xd3\xee\xba\xbf'W\x13\xb0\xe8f\xd1\x19)\xdc\xa2\xf9\x05gTCC\xcb\xc2\x04a\xa6;\xdf\xe6\x90U\xe8\x81\x8dFLx\xc0hz}l\xd7\xd4\xa9\x07txp\xc4t\xb0\xf2\x0b=\xb0\xc9y\x80\x81\xd8&\xd0\x16\x0f\xe5}\x18t\x879\xa37\x1cJ\x91b\xc09\xfe\x1a\xc5JNC\xdb\xa8\x06KU\x9b\xdf\x94\xf1\xac\xf1-\xb1\x0b4\xa0\xd5y\xf9\xaa\x1aQ\x8c\xc0[\xfai-:\xd7jW\xe5\xa7\x1e@\xc7\xde\xb5\xfd\\;^F\x82rF\xec\x0b4\xa35\x0f\x957\xacA\xa0\xc0t4mTg\xeb\x02\x00^p\xfc\xc5qU\x8c,\x01\xb7\x06m\x1cH\x85\xfe\x03\x9a\xd7r\x1f\x00\x08\xfcF\x9b\xd6O\xf1\x9c\x07\x17U\xc0\xedX\x0b\xb7\xe3\xe6\xfd=>\xeeq\x0d\x07Nd&\xde\xc2\xcf_\xa0\xb7\xb6yD(T\xd0W\x19\n\xd3\xa8\x07T\xa9\xdf\x0b\xcf\x9f\x17${\xc1\x9d\xa7\x91\x83X\xdbt\xe1\xc0\x96J\x1cY3\x1f\x9bB:\x9a\xcf\x84\xdc\x0c?\x1e}\x1e\x12\xd52M\x14\xd9\x9f\xc5c\x82\xdc\xbb=`\xcd\x99dB\x18\xd1\x7f*\x07\xcd\x03\x00TY\x80\xeb\"\xfd4\x85\x95\x18\xb0z\xd3\xc5\xbb\xa1\xad\xf0\x18T\xba\xe3\xd13\x02\xceG\x16\x82K\xe2o\x06u\xfe|9\x81\xb9XZ}\xb5\xb7\xc4\x9f\x15\x93:H\xa2\x1as\nn\x8cqi\x12\xcf \x18\xc6\xe5\x96p\xce\xa7u{p\x92\x07\xa9\x8bX5xdw9\xb0\x01\xc2\x82!c\x87\xce\xf8\xbbo\x0c3\xcaW\x99\x91\x96\xb7Q\x0c\x14\xf6\x14q\xf7\x06\x0f\xab\x894\x07\x0c\xcdxE2b\xc4p\xef {(b`\x0bLmW\x97\x18\x9f\x99,.a\xbea\x8c|JN\x7fz\xe9\xa7\x0e\xbdA\xfa\x97\ndZ\x89\xf1\x18\x99fW\xb9\x87V+\xd6\x0f\xa9X\x93\x9a8\x1bB\xe6\xf7RH<\xc6-F\x82&\xd3\xf8x\x85H\xe0\x82\x10Y\x91\x0c\xe9J\xf8br\x013\xef\xa5\x9f\x9a\x19\x05\xe0\x84\x89\xcc\x15\xf7s\x93k\x99)\xc2\xb0\xfc\x08\x93\x80lZx\x94\x1d\x18\xd0x/\xa3\x0d\x12'u`\xc7\x8e\xc9_N~\xf8\x88\xab D \x97\x0c'\xc6/\xf5\xac(\xa8\xc4\xbe\xed\x07aO\x0d\x95\xc8\x0f\xbbm\xa8,\xe4\x08X\x9b.\x04\xde,Y\x9e\x86\xb18M\xb9\xc3r\xea\x9f\xf6&\xc97\xa3\xdf\xa3\xabt\x88L\xa8W\nC\xa6\x9b\xc7^\x91\xbcKS\x92=\xf5sb\xa3\x11P\x15+\xbeW\xec\x86\xa7\x9e\xcd\xcd\xb1\xf5H\xa2\x1aP\xacH\xe7!?\xe7<\xb6y\xac\xcc\xf8-\x1eTT;\xf28\x92&}\x9c\xc1:\xc5u\xa1\x9aU\xba\xcd\xa5L\xc9\x13A+\x0f\xd8\x80!\xb72\xdfN\xdb\xca\xab\x86o7@N\xef\xdfbx\x02\x915\xc7\xe7\xf3v\x07\x82\x05^\x06d\xc5\xcb\xa0\x03T\xc4`\xd6\xa2z\x1a\x02\x06\x8a^\x1c\x13\xa0\x14\x9dL\xe0\xf2\xa3a\xb5o ?j\xeel\xc0n\xf5\x9ef\xba]\xc3\x98\xd1\x06_\xa8\xf2W\x07\xdd\x86\xc6\xcd\xfd\xe8\xbfpi\xaf*\xac0\x8d\xeb\x0c\x0e\x1b\xf7\x9dc\xef\"\xf3S>\xa4\xdeK:\xe3\xf8U\x03h\x03\x04\xbe\xe2\x0e\xca\xa6q\xcf\xb5\xc6\xbbD\xe3K\x14\x10 A\x91\x9d0\x1f\x17\xb4UL\x8e\x1d\n]m\x9ad\xc8P@Z\xaa\xde\xa3\xd9~\xc4\xbd\x88\x87\xa3!\xaci\xa9:\x14Q\xc4t\x8fB\xbf\xd8~\x90\x90\x90\xcfY\xe6\xc8\x16\x89\x92\x87\xb2\xb4\xad\x10\x13\x12\xe4P$\x954\xaa\x96\xd2\x16\x0b\xbf\xe0\xafs\xf0\xb1\x91\xaa\xcc\x0e \x14\x0b\x02\x17\xec\xe4\x00CD\x8e\x0e\x11\xc9\x0f\xef\xe8\xc0\xcez$\xdd<\xf0\xe67\xbcO)\x88\x08\xbd\xafM$\x82\xb6\xf8n\xf1\xc4*\xd7\x8e Q\n\xa2\xce\x8c,\xb26\xb2\xa8%D\xfd\x01\x0e\x9a'S\xce\xa5\xa3J\xe7%?\xe2TN3 9<4)\x16A\xb87)qL\xc2\xd0J5\xf8^\xc4\x12v\x10K\xb1\xc2\xf0A\x16\xcaO\xb3a\x88\xc5\xef\"\x16\x9f!\x16\xb4x\xf5\x99M\xaa\x82\xd9\xe9\x1d\nH\x14\xd5\xca\x88\xa5\xb2\xbe\x0d\x15\x1c\x0d3Mb\x83\x0d\x1dn#\xcdlr\xc3GP\xae\xaf;h\x0e\xdd\xe0M\xca\x9e\xe5\x10\x8f@\xf1\xc8\xcf\x990\xda\x94\xcb\x8b\x9e\xc7v\xe2\x1cS\x8e{\xe6\x17\xb6\xaf \xad\xdb\xcfM\x10\\hBp\x02\xc0~?\x0c\x17\xf6\xa1\xb7\xc2\x80\xde\xd4<\x0e\x08\xf4\xa6a\x81n\x87\xdeP\xca7\x08\x99\x0d\x90\x94fM\x0b\x17\x15.X]^\xd0\x14\x08\x10\njL\xec\xad^\x0e\xf7v\xe2\xbe\xa6|\xfd\x1fg]\x06#\x16\xc1m\xb3C\xabr\x11\x15\xcf\xf5G\\\xe3o\xe2\x01K{c\x99\xe5\xc4+\x93\xc7z\xeaV\x83\x92\xaa\xb05<\xb6\xf9\xbe~\xf4\xd0\x96,\x8b\xb2[m\xce\x9d\xd2jJz\xaa\xd2\x98T\x14\x99\xb3\xa2\x84EEa\xf5RFz6\xb0\x97\xc1\xe1-\xf4\x1e/\xf9ix\x84u\xc9\x8f\xb0\"?2\xa7\x8a\xe6\xe4\xc3W\x90=\x02\x9f\x92\x1f\xe1\xd4o\x92\x1f\xfe\x00\xf2\xe3\x9c\xa7C=\xb0cAl`*$\x0d\xa9\x11\x1a\x93W\xf2\x87O^i\\\x81\x89(m\xd6c\xe9\xd8\x85\xcd\xa2\xca\x1b\xdb4X\xd7|\x14q\xc5] )\x08\xc6\xe6\xfa\xf0\xa1\xa3\xf1\x13jt\xf5R\xcah\xca\xab\x85[\xed\xc8\x1d\xe2Q\x9f\x18\x99\x84\x1f\x80nl4(<\x0d\xc5\xbc\x9ff\xc4\xa7\x07\xcd\xa9\x10\x17\x90\xc1\xa6 \xd2\xc6\xd7\xce\x8b\x85\x99\xcd\xe8k\x1a\xe4\xeb\xb4\xe8\xb3\xe1\x82\x017\x9b\xfc\x08\xe9\x1f\x05\xfd~\xf8\xd6\xbb\xff\xb7\x1f\x94(\xdeB*!\"\x06\x0cZ\x1e\xe0\x1d\x0e\xabI\x1f\xba5\x138\xf7^\x1d\xfcpr\xf4\xed\xdb\xd7?\xbc:9x\xfb\xb6_\x03#\x1e\xcc\x80\xa0\xcf\x92\xa5zR\xff*J\xfc\x80\xa5\xf8Y\xc8j\x84AM\x98\xb5\x1bX\x03\xe6a\xecG\xd1\xd0-\x12@\xd5[\xd9\xdc\xb5\xc9\x02\xb0p\xb42\xd7[b\xaa\x97~\xca(\xe8\xe4M\x96\xa4C\x90\xd5\x10\xf9\xb7\x11\xcf\xf4\xb6\x04M\xac\xd2\xb2\xe3!\x03H\x9a\xdb.\xc93\x8e^\x87\xaf\xca \x92q\xd8\xb2\x0c!\xee\xec\xa6\x87\x02\x8a\xe5\x0dVL\xc8\x81\xd5VG:P\xea[\xb6c\xfam\xf5\xea\xdaV:\xaa\\hCG\xddZ\xc5\xab2\x02-\xd4\x0d\x9b\xac\xa2\x1b\x0d\x8fT\xde!\x0dA\x860\x03\x95\xb4\"\x83\xea\xcbF\x9a\xcd\xea\x05\n\xd8j\x96\x04)\x9a\xd6\xd5\xd6\xaa2\x80Z\x15T*\x91\xc8r\xe6\x1a$\x91\xf0*\xf9\x1a\x067\xe8H\xe9\xf7\xc1n}\x89&\xb6\x9c\x8c\x9b\xc6\x14\x18x\xf4\xea\xf6`\xa7\xd91\x86\x95\xc1yu\x1b\x99&.\xc4\xc7\xc6\xaf\x9bp\xa7\xd0\x19\xb7\xbe\x91\x13\xfdk\x9a\xd5\xba\xee\xcb\x8c}w[\xdb\xbb\xaa\x8a\xa1Y;\xddC\x18\x9b]B\x98\xa261$\xe5ow\x18V\xa9\xa3\x1aoe\xd5\x8f6\xc2.\xc8\xb2\xd5a\xca\xa2j.%\x9d\x8b\xdfG6\x9c\xf3,K~\xaf\xa8\xb2 `9\x93\xd6\xd2O\xa7\xf9\xb1+$\x9fye\xb1\xde\xd8\x96\xee\x9bir\xac|)O\xb2\xb7\x02\xed\x13\xe3z\xf4Ub\xf3\x13\xb0\xdfW\xdd LU_\xf2}\x88W\x8d\xf4I#2\xa1*J\xc4\x81>Z\xc6\xaa\x9e$*\x9c\xe9xQr\x86\x02]\x850$\x96\x93\xa9\xef1Ij\xcb\xf7\xc3D\xec\x0b'F#\xb1\xa0'\xa3\xa5\xb0\x98*N8\xab8\xe1B\x84\x12\x7f\x04 |\x05\xc5#H('\x9cQ\xf8\x92W@wb\x05\x82GcpN\xa7\x13\x17\xa6\xf4\xba\xaf\x00&SY\xae\x0c\x8d\xe5\x85\x11C\x9a\x19\xc3\x08\xcfE\xd7\x036\xd7\x7f\xe8\xfe\x92\x13\x8d\x9f\xe0\xdb\xdeX];[c\x85\x17\xb0\x9c\x14\xa9.U\x07\xc8S{\xca \x9dE\xdbI\x99\xb4\xa3\xca_\x0f\x19g=\xae\xf1\xa64\xdc\xcc\xce0\xcce\xc6b\x86\xb2|7\xda\xb8\xa1\xedX\x9e\x98+\xc5\x9b\xd7#q\x86\x0c\x85.\xd9\xb6)\x87\x94\x9f\xe7\xe1Y<\xa4\xa9\xfeY\xe9'\xc3z\x99`\"\x98-g\xc59\x98\x93\x0c\xc9\xa7\xf2Z\xbd\xfb\xd9\xed{\xa1\xeb\xd8\xf6\x9ef\xb1\x055\xc1\x1a\xb7\xd4\xb9\x8cv\xb6\xdaYyJ\xcc\x1aP\\$O\xf8\x01\x7f\x93$\x11i\xa5{\xc3Yx\xf3\xa4\xccL\xb5\"\xd8\x83{?\xde[\xbfw\xa6\"\x86gZ\xbfi\xdb\xb2`\x1d\xd0\"\x13MG\xed\xc8\x05\xeb\x8b/\xefYf\x94>W\xca>Q\xd0C\xeb\xf0\xfc\x1c\xf4\xcfY\x12\x17\xe4\xb2`1<\xf9\x9b2\xa6\x7fo\x1a{Hu\xe7Ul\x0b\xc1\x9e\xba\x18_\xd0\x9e\xd8m\x0b\xd33_\x99\x84\x19\x0f\xb1\x81\xac\xaf\x9bg\x1aHaI\x94\xf3\xcdH\xce\xf0\x98\x98\xf1{r\xf5&#\xf3\xf0R\x9a3_\x94\xb8\xb3(\xd9J\x8b\xb2\xe8_\x146\x9c\xee\xb2\xf8XZ\x8d\xad[\xa14\xaci.\xafi\xb7\x98\x02_\xc9\xd66o\xadms\x03\x9a\xc4WD\xa9\xfbs\nq\x19\xaeo\xe8\x15\x0b\xbfx\xcb\xd4\xac\x02\xd8)\x05\xcf\x13\x9e\x02\xcb\xe1\x98xa\xfe\xbd\x1f\x85\xc1ADh\x0d\xda\x0e}\x1f1\xc6 Jb\xf2$\x0e\xde2x\xfe3\xb9\xa2\x1d\xf8\xb0\x0e\xf6ZD\xe7\xcf\xe2\x9e MF\xff\xa2T\x01{\xbf\x0f\x96\x05\x13\x98\xd9\xf8\xa7\x03\xeb`\xdd\xb3\x1c\x0cU\xe8\xb8\"\xf0n\xe4\x98\xc1\xe5\xdc\xee\x0f\xcf\x04{`Y\xcd\x85\x113dq\xb9h\x8d\x19e\xc0\xd9\x10\xba\x1c\x03\xdd\xab\x802\xd2\x88\n\x02\xbb\xc0([\xd8a\xb3\xb2O\x87\xb3p\xa1\xa4\\\x92\x97\x91\x88\xf89\xb1K\xf3\x1c\x96=We\xe3\xce\xaf\xef\xf4\xb9\x14P7 \"\x95\x81I\xcd\xd88\x1a(\xaco\x9d\x8e\xc6\xcb\xce\x01\xa1\x9b\xe2\x07\x01]\x830>;J\xec\xb9\x98\xe8\x8d\x06R\x1dd\xa9W\xf9,K\xaf\xefp\xcc\x81\x0by\x8b\xae9\xeb\xc8>\xe7Iv\xe0\xcf\x16\x93^b\x06\x84-7\xb3\xb5\x96\xa2\xac+\xec\xc5\xabk\xb4 I*\xb7f\x84\xa3\x94\x85\x84\x9aWp\xd4\x8e\xc3\xdc\xc4\x0cK?\xfdH\x03\x9e*\xa8`\xfe\x15\x9e\xbf\xcc\x15\xbb\xc0\x9c\x8f\x8diJ\x96~\xfa<.\x92\x1f\xc2b\xf1g\xb1\xdb\x98?5\xf6\xa3 \x9c7+\xe3\x8e\x0e\xd0\x00\xf2\xd1\xe0\xb2-\xd9h\x8ckU$\x88\x12\xfb$y\x82\x95\xe8[\x80B,\x80\x1a\xa5vRg\xd5\xf0\xa9\xa6\xa2\xce\xf0\xed-\xa9\xa8\xd1f\x9b.\xc2\xc0\x7f\xb1\xfd\xc0\xe9\xb34\x16)U<\x91R\x85B+g\xa3\x86H<\x9b\xdf\xa5I\xda\xa3\x83b\xa7\x17\xfdjY(\x16Epr\xdd\x06\xc4\xe4\x02\xbf\xef$gP\xd0\x8a\xe6Y7R\x85\xd1&1)\x8fm\x8dw0\xc7\x85\x84\xdb*\x1fN\xc5\xfaPv\x92\x16\xa5I\x12\x1d\x86?\xd7n\x9d\xcd5\xa1\x97\x9b9\x9d\x04\xa5 \x92.\x01\xdb\x1d\xb7\x8c\xdf\x06\x9c\x15\x90\xc5`\xc6m\x89\x1bc\xe61%\xe3\x1a{\x01g\xf0}\xfa\xb6\x9a/K\xc7T\xfd\xb9\x07#L\xc6$\xb0\x18\xec\xd1\xbbS\x91\x9bIAZ\xc6\xa4I\x83O\xda\x0bB\x9f\x0e=?p\x0dn\x02\xe4 \xad\xddJ\x80\x0e*`\x8fyl~\xd5r\x80\x12\xe6A\x05\xf7\x9dT\x15\xa0^\xceb\x91\x91\xce\x82\x0e\xb90\xe0\x96\xab\x95\xdd\xc9je\xae\xf0\xcb\xeb\\1\xe2\x19\xbe`\xcax\x1e\x8a5\xeb\xf2\x81\xdd%3\x98\x91\xdcf\xd5\x92;Y\xb5\xa4Z5FM\xa8\x9d\xc0VZ\xb8NB\x88n\x0b\x9a{\x8d\x99k|\xac{m\x9b\xa5Z\x1e\xef\xdeW\xc5\xa2\x8b\xed\x9d\xadv\"]\xbf\xbe\x10c{g\xbb\x13^\xaed\xe5\x0f\x1d\x17,\xaf\x9d\xc6\x95N\xc8\x9aX\x9ax\xc5\n\xc4#\x08-\x0c \xd2\xcdx\x80\xef\x05cB8\x8b\xe4{$\x9f\xf9)\xb1 c\x92&\x18Z\x9e\xe5Q\xb0\xb7v\xdb\xd22\xb8\x990\xae\xa2\x06y\xdc\xccj\"\x84\xc7w\x9a\xb90\xd7\x11H\xa9\x8bq\xf2\x84\xb9F\x1761_I#05\x86\x91\xfd\x12\xacSz\xa2\xfcX\xbc\x12YP\x90|sk\x07F\xbcd,\x16\xab\xd9\xc27X\xd7\x8a\xcb\xe5)\xc9\xe47\xf5\xaa\xf2.\n\xef\x8b/\xf8\xc8\xd0\x15\xb2\"wg\x94{)\\\xca\x83\xb2\x00\xcd\xfbP\xc2: \x05\xb2\x89L\xb0\xe3\xc2HM\x13/0\xc6\xa5\xf2\xc8\x9c#\xb3)59\x81\x18\xd6A\xa1y\xa1\xab\xd2\xe4\xcf\x0b\x8d\x06\xa1\x92j/\x99\xc4zII\x8c*\xbc\xf6r}\xdd\x81\x05\xac\xef\x01\xb1S\xba\x0f\xd3\xe5\xb1\x0b\xe78\x97\xd4\x85\xa5\xc3w\xaf;\x02Ml[\x90\xd8\xa2P\x99\x8d\x10\xf8\xf0\xcf\xfaP\xd8\x95\x8b\xd1\x04\xcf8m\xd7\x13Z\xe6\x0c\xc1\xa0\xf0H\\d!\xe91s\xa9\x16\xe5\x84-\xca\x9a}\x05{p\xea\xc5\xe4\xb2\xb0\x1d\xc7\x0b\x12L\x1d&-\xcc\x15K;#\xad\xcd\xc9\xfa\xba~u\xc4CW\xa9\x7f$\xda\x01\xe8\x17H\x91i\xd2\x8e\xe1\xae\xcdSU(\x92P\xdd\xc1\xca4\xc7\xca\x0e\xc2P\x0e_\x0d\xc6\xd6\x9e5\x01koS\x03\xc1\xd6\x04\x8b\xc7V\x17J\xb4\xf2\x02\xeb\x0b\n\x93\x1d5\xc0\xbd\xe9\xde\xe4\xf8\xdeY\x1fc.5TL\xc9q\xb7_#GY\xc6w\xb3(\x9b8m\xdd\xa2\xec\x8di\xf1d\x95Ea\xcba[\x1e;\xccd\xba\x89\x1az\xbaV\xeco\xd4D\x13//O\x19\x15`\x8f\xd1\x97Pz1r\x1ci5\xed\xbd\xcd\x0f{c\xe7\xee\x17\xb4\x86W\xf5\xd9\xb9\x13\xfd\xd7\xfd]\x87\xc7\xe8\xfc\xc6\x9f\x15Iv\xd5=\xc5\n)\xc0\x84\xa2H\xbfM\xa5b\xd1\xe9i\xc6JOO3e\x85 \xc8H\x9e\xb3:\xec\xb7\xb2ZFx/\x19Qw\x94\x15\xe1,\"\xbc\x0e\xfeVV\xcb\xc3\x80W\xa2\xbf\x94U\xca LX\x15\xfaKU\xe5\x14\x8bO\x95E~\xce\xda\xa7?\x94\x15\x82\x90\x95\x07\xa1\xba8\xe1\xc5\xea\x9e\xc33V\x1c\x9e)\x8b\xa3d\xf6\xfe\xefeR\xf01T\x7f*+'\xc1\x15\xab\x96\x04W\xca\nl\xeb\xd4\x1bwZ\x16E\x12\xb3\n\xf8SUi\xe6\xc7\xe7>\xdb\\\xf6S])\xa5\xe0\xcak\xe1oe\xb5\x90\xcf\x8a\xfePVH\xf8\xd6\xd2\x1f\xea\n\x11/\x8f4\xc5gYR\xa6\xa2\x0e\xfe\xa1\xaa\x18\xf8\x05\x03F\xfaCW!\n\xf3\xa2\xaaD\xffPV\x0cX\x95@YH\xd8p\x03\xa2\x1cn@\n?\x8cr^\x05\x7f+\xab\xcd\xd9\xca\x06s\xe5\xaa\x06\xa1\x1f%\x0c\xa6\xd8Ou\xa5s^\xe3\\Y\xcc\xc7\xa9\x1e&_\x05\xe5\xfc\xc9\x12\x0b\xc9R]xJ\x02^~J\x94K4\x0fI\x14`\xd2\xe7\xcc\xb6\xc4\x1f\xea\x8ag2\x98\xd5\x7fj*\x97\x19\x11\x15\xcbL L\xf3$\xc1\\\xb5\xff\x1f{o\xda\x1d7\x92$\x08\xbe\xdd\x8f\xf5+\x9c\xf1\xaa% \x03\x0c1H\x89\x94B\xa2\xd8J%\xb3[\xdd\x99\x92FRVMw0\x8a Fx0PB\x00Q8xdQ\xef\xf5\xcc\xec\xdc\xf7\xee\\=\xf7\xd9\xb3;\xf7\xb1\xc7\xec\xce\xf4\xf4\x87\xce\xfc#\xf3\x07\xf6/\xecs3w\xc0\x017\x07\x10$\x95U\xbbo\xf1\x81D\xf8\x05wssss3s3Q\x08^\xe9B\xc9R\x16I\xc81.\x86\x90\xbd\x18\x92\x99\xdb\x98\xb9Mf\xee`\xe6\x0e\x99y\x1f3\xef\x93\x99\x0f0\xf3\x01\x99\xb9\x8b\x99\xbbd&\xf7qB\xc4\x8b\xad\x80\x04\n\xbe\x92\x85\xcaU\xb6\xb0\xae\xb1\x85l\x85n![\"\xca\x89\x17\xaa\x00\x92X\x92\xc0\x06\xf3\xc4_\xe2\xe4\xe2+Yh\x89K\"X\x92\xeb!\x88V9\xe2\x1c\xbc\xd1ERY\x80\\\x95\xefO\x10\x90\xefOH8\xbe\xe7\x97\xa7\x1cQ\x15_\xa9B\xa1\x7f\")\x04\xbc\x91E\xf8)\x8f\xf0K\xf8J\x16Bh\x85$\xb8\xc2 z/\xb3\xa3\xf7T\x81\xa5\x1f`G\xc5\x0b]`%\xf3\xc9\x89^\xfa\xc9{\x99\x9f\xd0\x1f\xe0Q\x8e\x05x\x94\xdb\n\x04\x99$%\xea\x07]P\xd2m\xf1b) \xb1\x17\xde\xa8\"\x91\x8f\xa40\xf2IR\x18\xc5\x18M\x19\xcb\xc8\x1fTA<0B1y\xac\xa5\n\xe1\xf4\xd2\xdbU\xbc\xca\xca\x85\xa4~X\n*\xba\x17[i^\x9cg\n\xa7\xf1\x95*\x84\xdf\"?\xb2\xf2\x13\x1fg\x00\xde\xc8\"\xc14StU\xbe\x93\xc5T\x11[v|Zp\x8c\xea\x07U\xf0gP\xe2gTV\x82\x03I\xc8\x91$\x08\x85\x84\x84@\x92\x9f \xcf$^\xa8\x02\xd8/\xb2C\xa9\xbf\xc4\xef\x8a\x17\xb2@\x89:v\xc4I\xf9\xb4\x98N\xf9N\x17\x0b\x15~\xe1+Yh\xe9\x87\x88b\xf0F\x16\x89\xf3d\x8a\x13\x82\xafd\xa1\x95/;\xb4\xf2\xe9\xdedI\x1c!I\xc5W\xba\xd0\xa5d\xe0\xe1\x8d,\x92#\xeb\x9d\xe6$\xf3\x9d\xe6\xcb\xa5\x9f\\\xca\"\xf0N\x17\x93\xf3@\xaf\x97\xcc?\x91\xfd\xc80R,Q\xa4\xe0\x9d3\x1b\xf3\x9c!\xd9\xcdH\x92\x9b\xf1\x8b\xac8\xd2\xa8\x1fdA\xc1[`)\xf1F\x16Y`\xfe\x82\xceT[vf\xdb\xb3\xb3@n\x87\xe2\x85.\x90)x\x887\xb2\x08R\xcd\x8c$\x99Y\xe2O\xdf\xcb|\x7fJ\xd2x$\xf0$u\xcf\x11As\x12;\xcf|\xfc\xf0\x99O~\xf9,\x98qW\xfc\xfa\x9c$\x11<\x0c\x83\x95<@\xcaw\xaa\x18\xae$\x9a5Y\xfa\xa7\x92\xbb\x11oT\x910\x88\xb0\x84x\xb1\x15\xf0\x93_K\xfcY\xc0\xa3\xac(Z&Q\x95\x96~\xaa\xf6\xf1\x94\x9c\xe3\x95\x82\xd0\xca\x02\x9d\x95\x9fe<\x89T\x19\xf1N\x16\x8b\xc3\xcbSI\x00\xe5\xbb\xadX1R\xf5\x83*(\xc6\xe4\x87\x95\xd1V\x93\xc8J\x8a\xb8&6\xd2\x9a\xc5\x92\xc8d1M\xec\xcf$=<#\xe7Q\x10\x85\x82:\x90\x05\n\xa2\x9b!\xd5\xad\x94\xb0\xc8\x88P\x05{\x0b2\xa2\xaa]f\xb5w2\x1a\xfb\xae\x1e|\xac\xd2 eMv\xc3~\x18\xc6\xd7\xf8\xe1\xba\xe95j`)\xfdk\xe4\x0c\xeb\xe1\xb5r\xd9\xf7zq\xb4\xa8\x7fp\xff\xbeeL\x8df\x1f\xcal\xe3&\xf2s&\x8doi\x19\xba\xfa\xcaT\x94x\xf2\xc4\x8f\xe2\xe8r\x19\xe7\xe9\xd3\xa7\x84\xa8tn\x95\xaf\xfah\x99v\xe6\xf4\xe0\x8dB;\x06\x82#\xc1\x98\x9e9\x85\x12\xd5RN\x0c\x17\xca\x15\xe3\xb6\x14Dm*\x14\x95\x8aUKA\xc55\x9f5q\xcd\x0c\x19\x8e@0\x1cg\x8eR\xde\xda\n\x02\xd0\xb1 \xbc\xda\n\xfa\xd1\xe5\x88-\x9cD7\xb3{ \xdab;(_\xcd\xdb\xe4\xdd\xeaQ\x9a\x9c\xaa\x7f\x1fk|\xcc\xfaS\xd3wh\xb7\x9a\\\xdd\x94b\xe6\xf4\xd4U\x13\xf6u\x8f\xf5!8j\xefk\x16\xcf\xcbx]\x98\x91`\xc6\xc2OY \x03\x16\x8b\x9a\xef.W\x9cEq\xe6\x83\x8a>\x88\xd2`\xc6\xd5P\x07m~\xb0\xce\xe4\xbd\xc0\xac\xd5\x99#\xdcn\xad;[k\x83\x01\x93\x9f\x00+F\xc7\xef\xee\xf4CBF\x05f\x16\xc3\x8f\xc5\xf0\xeb \x12 \xc5\xb4\x14\xd3\xd2|\xb5\n\x03>cY\xacC\xcdc\xfcb\xc5\xa7\x19\x9f1?B\xe8\x0c\x08g\xb1\xfa\xd3|Q\xbfP8\x87\xa8p\x0e\xd9\x13-\xc8u\xd8\xefw\x05\x0d\xdc\xd6p|\x8f\x85\x05f\x89\x1e\x8fE\xdfC\xf16\xe9y,\xef\x0091AS\xddf\x11.\xe5\x95\x16\x0e7\x18,ey^\x7fl>T\xe8\xa5\xc8q\x93\xea\xe0Q\x80\xdd|%\xae\x89\xe4|\x0d\xc4\xce?>b\xe7\x9d\x11\x9b\xa5At\x1ar\x8c\xbf \xd9\x80\x9ba\xf9M&\xde\x16^Ja\xe8\xf7J\x887\x1cp\xba\xa6\xad\x0e\xdey\x8e\xf1\xeeN\xe4/\xc1\x98\x95\xb8\x9fC=y\xab}\xb1\xedA\x1c\x1cL\xe3\xa8\xb8;qu\xc5\xaa)\xd0\x9bri\xb7c\x9fz\x94\xd1\x99\xd1X\xa7\x16>\x00\x14\x7f)\x90]\xcd\xa4\xa8\x0e%|(\xf1\x8bCw\x0b\x17\x05\xfa\xafk\x12\xb9\xc6\xbbL\xf5\x07\xd0f\xe9\xf0q6q\xeb\x0c\x86>\x01I9\x01\xb1\x05\xd8\x91IY\x80\xa4\xbc\x8cg\xbc\x95\xa3\xb8 \x0cm$\x03\xf9\xca\xef\x95`\xfc\xc2875\xd6V@\xeb\xbbZ;M\xea\xc6\x81UL\xba6*\xf1\xec\xd7_\xcb\xebpd\xf8\xcd\xd61k\\\x17\xf8\xa5h\x1d\xb6\x18\x90?X\xf8\xe9\xab\xf3\xa8\xb8[\x1ev\"\xfd\xac\x99A\x1b\x00\x83\xd6\x8d5c7e\xcf\xd8/\x80t\xc5\xd1\x1a[4q:\xd0<\xe5\x18\x07\xb4\x06\xbb\xbe\x9b-\xdd\x02A\x8a\x95\xa1{X\xe6\x05\x83\x9e\xeb\x17\x8fm\x8f\x18\xd4J\xcc<\x07\x7f\x1e:\x8c\xdb\x97\xa6Xp\xbf\xf1\xf6\xd5\xcb\x01\x9eu\x83\xf9\xa55\\\x80z\xd6\\i`\x1f\xaao~\x1d\x96Z\x1c\xc1\x8eY,\xcf\xa6\xfd\xf2\x1a\xe8\xf2\xee\xb2\xdd\x9cL=\xb7\x862\x157\x1f[\x8fYV\x99\xe9\xac\xfd(\xa6dAb\xef\xec@\x1f\xa9\x9d!*:\x1e8\x1bC\x8f\x15\xb3\xa7\x9c\x87T\xe6\xa6\x80\xd5\x80\x1d\xd6\x8f\xa5\xb0},\xf8\xf4}\x01\xc6\xd4c'y\xc6\x12>\xe5\xc1\x19\x9f\xb1_I\x99\x9f\xb1 \x9a\xf1\x0b\xf6+\xe9\xa0\xe7\xb1\x13\xf4\xed\x05\xf7\xa4k`\xb3\xcf\xee\xf7\xb2\x04\xa5o\xd1r:\xfc\xf6\xe9`\xda\n\xe2\x9d\xbc\x8f\xeaWX\xd3jo\x05\x81v;QG\xd6\x99\xc6vY\x9f\x96\xa5x{\xeb-]t0\xddT\xcf\x0d\xa7\xf4\xff;\xac\xc6\xd7\xf8\xc5\xaf\xd7\xe44:\x1d\xe0\nfa\x1cv\xc4\xd9i\x97f\x99lz\x0en n\x85\x0f\x99\x17\xa0\x9e\xb7\xd6i^\x12\xdd\x16\xcc\xed1%\xfc\x02BK~oX\x9fv\xc6\xfa\x10\xb0\xbe\xee`\xae\xfe\x18X\x1f\xde\x00\xeb\xc3[\xc7z\x85\xc2>:\x93\x04\xfe\xa9\x8dk)V\xca\\\xac\x94N(-J\xaf`\xa5\xcc;\xae\x94\x8d\xd5zpz\xcf\xe5\x99l\xdeL\x8e\x8f\xa2O\xfdY\xa1\xc2\x10\x195\x9e\x0da\x80\xd7\xf9{L^\x139\x8a@\xd3\x06\xb7J\xc8Z\xfa%\x13\xe5\xa7K\xd6\xef\xb0L\xcf\xe4\xa5\xb2\x95\x93zln\xae\xf6y\xb7\xd5.\xe0\xb6(\xc0\xb6\xf8\x05\xadc#\xf5\x83vE\x92\x99>\x87(\xfcQR+y\xfd\xef\xa0pR\x7fu\xc5\x86\xec\x1ed\xc0K\xc6F\x8c\xc3\x85I\xb8\xed\x07\x0cZ\xa5\xb5\x0f\x96o\xcfhJ\x02\x17g\x97J\"\x81\xe8\x84\xe2=\xf0\xd8\x1c`\x92\xa37\x1ep\xb1\x13#+\xfa\xdc\x0f\xc3 :-D\x0e)\x83\x95\x03\x8e\xb9\xd9,H\xf84\x0b/Y\x90\xb2(F65N\x04\xd18\xb9\x84\xc0*_\xaf\x92x\xb5)\x88N\xfa5[\xf9\xd3\xf7\xfe)\x1f\xb0\xafR\xce\xbe.\x1a\x1c\x00\xc3Z\xfct\xdc\xaf\xc5:\x9b\xfaa(\x9aX\x0e\xd8\x1b\xee\xcf\xd82N\xb8\xe0\\\x17Y\xb6\x1a\xdd\xbb7?\x19,\xf9\xbd<\xe5\x9bP{\xb3\xfc\x8eu\x91hx(f<\x19\x07\x13v\x007+\x8b\xcb\xa1*\x0d\x89\xc4\xbb\x05/\xcf:\x15\xa2\x19\xa4`\xe5(\x18\xef\x94%\xfcgy\x90\x80TQ?O!\xdf\x1dd\xa9$\x067b\xdc\xa9\xe0H\xdb\xa5k\xa6+\xe61\xbc3\x92\xa1\x0d*\xb4^\xba\xd6B\x1co\x10\xd7\xdd\xd5#\xc6\x10c,\x91\xa4\xdbm\xee\xa4v\x9b\xbb\x8b\x10\xe11\xdb\x80\x10\x91A\xed\x16ucMV\xeaBb\xbcB\xadM\xe4\xd0\x0e\x9a5nvS}\xea\xc8\xf5\x82\x17\x9f\xae7\xbbAx-\xf0cc\xe9\xf8\xe3\xe1\xa4\xd3@X\x17\xd9\x8e\x0d\xa3\xa5[\xd8\xf6\x05k~\xbf\xeeu\x96&s\xa7\xcdWL\x95\x9e\xc5\xba?\xd5\xe5\x85\xec\x80I\xbb(\xe0\xfc4\xf1\xfa\x1b~zx\xb1*\xef\x81\xf7XGG@\xf2K\xca\xf4\x08\xaf\x9c\x82;\x89\xb7ZJ6\xee\xfd\xea\xaf*\xd7\x1b\xef\xfc\xd3\x1e,\xe0\x16k\xb2L\xef &\x9bpD\xa7W\xa2\xe3\xaa\x07\xf58r6\xe0^\xda\xddwiN\x98a,\x05\xb5+UZx\x07\xd9\x84\xbc\x9a\x9bSR~m8\x01ht\xb0T\x99\xa1\xcf\xfcL\xfb\xfa\xcc\xcfx\x8f\xc6J\xa3&\xcemY7\xe1\xa7\xfcbE\\1\xb6\xa1Q7x\x9e4#+-\xd0/v\xec\xe6\xad\x1a\x91\xb6i\x1bn\xdd\xf6\xd4\xe8\xfd\x088\x9b\xc6=\xb4y+\xc620\x03M\x05$\x98;\xf4\xa8\xa9C]iL\x9b\xd3\xb7\xea/YIs>\xc9\xf6Q\xc5V\xa6xl^;\xa9\xb0}\xc1J\xcf\x07z\xc2\xdc\xd3\xa4b7\xf0C\xd0\xe4x\xa7P\xe9\xdfR\xfb\xbd\xe1\x83\xc1\xee@z\x1e\xb8Vkg\xa5\x8f\xe9\xdd\xfb\xee\xa0\x88\x98@Y\xf3\xb6\x19\x1b\x07\xb2\x9d\x07\xa4}\xef\x83\xfb{\x16\x83]\xdfQ\x92\xb9\xdb\x18\x87aG\x8c\x9d\x1fn\xd3n\xa3\xeb&\xca\xa2\xb3\xbdep\x11Di\xc7I\xad/xuf\x19\x13\xd2\xc3\xd4j\xef\x8b\x9f\x1c\xb1\xdeg\x87\x9f\xbfxyx\xfc\xe5\xb3\x97\xbfe\xf1\xad\x90f~\x16L\xbb\x95])\x0c\xefTZ\xfaS]\xa3\xc2\"\x08g\xcf\xd7\xadu\xca\xb3\xcf\x90\x1a@\x84\x9dj\x9d\xe3/\x0f\xdf\xfc\xda\xe1g\xf6\xaa/\xa2 \x0b\xfc\x10\"\x17\xadY\xf5\xb9\xd6\xddu\xaa&<\x82\xbb\xb4\xaa\xc6\xab\x97\xcf\x0f\xad \x94+\xe8\xc7A\x18~\x89\x8eK;\x80\xa4\xa8\xf6Y0\xbbF-\xf1\xb17\xa8($@j\xc3\xa3E\x9c\x0bp\xc86\xbeZ\xcd*\x10\xed:\xc8z\xbd.\xfd\xfd,\x98]\xa7\x1a|.Zv\x86\xcfW/\xdf>\xfb\xfc\xf0\xf8\x9asB\xd5^\x1b\xc8T#k\x0c=\x87\xa2\xc5\x1c\x8dX\xef\xd5\x8f\x0e\xdf\xbcy\xf1\xd9\xe1\xf1\xa7\xcf\xde\x1e\x12\xbc\x8f\xd9Nh%:\xb0\x10\x93\xe0\x8c\xcf`5}\x9e\xc4\xcb\x86\x15\xd9\xe5[S\xeb\xb7fA\xba\n\xfd\xcb\x97p\xe3\xbb\x13G\xce\x80\xf0j\xf5X]\xac\xab\x1e\x8b\xd6H\xd1\xd4\xce_\x13\x1cgK(\xb9B\xed\x11\xa1\x9a;\xaa\xb8a\x8b\xfa}W\n\xb4\xc7\xd1d-\x15\x17AJ;\xf7\x9b\x0f\x8c\xda\xe2\x88.C\xa6\x19y\xa4\xabP\xd6\xd0\xb5k\xf7\xca\xd2\xa1\x1b\xf4\xc5\xd8;\xd6\xe8N\xad.8\x13\xaa\xa7\xed\xb3\x85c\xa4B\xcb#\xb2\xf4Z\x08\xa9\xed\xc6kt{\xa5q\xa9\n\x84E\xda\xba\xf0+\x98\x87\xce\x1d\xd8\xe8^\x94u[C\xac\xba\x8e\x82\xa8\xbdU\xf5(>\xaf\xdd\xa6_=\xd0\x9f\xba)`\xd4\xd9\x14\x90)\xb1\x97\xe0\x16A\xd3\xd9\xed\xb3\xe2 \x9c\x8d\xd8cw\xc1\x88\xf6y\xe8\xa7\xe9\x88\xfdV\x9c3\x1f\xf4!\x19_\xae\xb2 :eY,C\xcf0\x9f%<\xe5\xc9\x19\x9f\x01\xa6\x88\x9ez\xec\xeb_I\xbf\xf60\x16>n\xd8\xd1\xd1\xdd\x8c\x9dp\x06\x11\xf2A\xb4\x0b3\xdac\xef\xf9\xe5\x80}\x86M\x05\x19\xf3S\xe6G\xa5\xc1\xb4j\x11R\xb8?{,\xca\x9c\x07a\xc8\xd2L\xfc=\xe1\xcc\x9fNy\x9a\x06'a\xd1\xb8n.~\x97vRo{\x94\xd8\x0b\x80\xd6A\xea\xa5\x1e\x90~\xad3;L\xe3\xb9Cs\xa2\xd9\x01\x0b\xc7\xd1D\xca\xe9\xbb\xf7\x83\x95\xa7\xcb\xc0\xa1\xb6C\x10{\xe4\x1e\xebu\x9e_1\x95\x02\xb2\x97q\x9eh\xb6\xc2\xa0 \xcb\x16~\xc4\xe2h\xca\x07\xec\xdd\"H\x05\xe4\xe7a0\xcd\xd8\xd2\xbf\x14s3\xcb\xb9h\xc9\xc7Mm\xd0C\x07\xc8gq0s8\xc6\x95_\xc0\x8b\xc7\xa8\x80S\xb6\xa7Y\xff\xab?\xf2#\xb4\xc7\xe5\xfa\xd3\xde\xac\xbd\xc4\x07\xa42\xeb\xd04?\xcf\xe2\x93 \x9aU-\xee\xd7PA\xd3\x81u\x98f#\x98\xd6\x11+\x13\x88\x95\x8e3;b\x9d\x10U\xee\xdc\x11\xc8Te\xe1\xd0Ml\x05\x8f \x12\xc2\xdc\x9fr\x1bB\xc5g`\x87Q\x9a#\x86eXj\xc9\xb3ENDg\x9f\xe5Y\xfci\x10\xcd^\xfbAb\x89TY\x8dR\x19\xd5\x97\x99\x0f\xcbl:@\xee\x1f\xa6T\xbe\xbb\xa4\xbfw\xf5\xc0\x1c\xd7\x1bC\xbb\x8a\x1cC\"\xb6\xedJg\xf2^h4\xce;X\x8e\xad`\xd8\xc6\xf7\xda\xf5\x80sg\x85!w\xa6fm\x97M\xc7\xf9D\x0c:li\xa9\xc1\xef\xb3\xfe\x881\xcd(\x02\xd8\xd6S\xd6d7\x0d\xc6+\xe0\xac{\x05\xb7\xdc\x86H*\x06\x8a\x92w\xdb\xc1\xc0P\xbfmR\xf4\xe7L\xba\xcfN[\x03\x96\xeaO\xe0\x80\x13q;\x13\xb0\xac\x13@\x99\\_\x81_E\x85\x11\x81 \xd1l\x15\x87\xc1\xf4\x92\xfdJ\n(\xfd\x9e\xc3\xeb\xf9\x82G\xb8\x02O\x81\xdd,\x96\xa6\xa8\x02\xc4x\x89\xb3\xdf\xd0\x9d\x03\x96`\xe4\xd2\x85#^\x042\xb0\x11\xd5C\xf4\xe0\x8be\xcf\x8a\xb2\xdd\xa0/\xddA\xcb\xda\x1d8+(\x1ec\xd0\x93\\|\xc7+*7\xd6m\xe0\x15\xcc-\xbe\x13\xa1\x9fY\xf7\xfb\xea\xb1$p\xa4AY\x83\xaf~\"=\xf3Xo\xc9\x93S\xaeB\x1c\xbd\x8c?\xcbW\xa1\xd8\x90\xf9o\xf2\xcb\xd4qG\xec\xb9\x1f\x89m\x17\x8a\xb1(\x8e6\xb1\x99\x14\x08x\xe62\xe2\xc8\x82Q\xca*:=`\xf8Z\xbf\xf5.\x91\x06-\xf8\xb5\xec<\x96\xf4;\xc5\xed^p\xfa\xa9\xbf\xe4\x18\x06]l\xbd\x9dv\xd6\xc7\x02D+\xf0\xf0*\xf6\x044\x92SE\xa7~\x9eJk\xb2\xf3\xb8.\xb6u\\\xb1\xc5\xd5\x0e\xd3\x8e\xab8\x0e\xc9w\x8b\x15P\xe9\xa7\xd8\x1c\x17\"\xf5=\xbfL\x15\x0b,\x19S\xcb\x0dUeB\xd8 -\x16m\x96\x88:{i\xdd\xf70\xb04F\x83\x15\x10\xf1\xcaH\xb2\x96{\x8e\xe2\x81C\xad\xa5\x96]=\xaaL\xe2\xca{(I{\xe1\xd2\xd6#\xb2\xef\xde\xe0^\x98\xf0\xd5\xcc4\xa5\x9b\x13\xe3\x14\xc0\x0b\x1dV\xa4\xdbz<\xbb1\xe0\xad\x00\xb7\x02\xf5\x9a]]\xb6\x1e\x1524\x9e\xa3\x94\xc4\n\xec\xb5/\xd5[1C\xd1\xa9\x87P\x13\xb4\x82\x86)\x83\xd6\xe3\xe3 \x85J`\xe3\xb7\xb1E\x96&H\xaa\x89\xb4\x97\xed\x1d\xac\x88\xea\xaf\xddG\xda\xde\xa5S\x1fO\xac}\x94\xfe\xc1\xa5\x02\xa9\xb3p\x0b\xfa\x87\xf2\xf8d\xc0\xa3\x9f\xe5<\xe7o\xb4\xa6$\x86\xad}z-\x06\xdc\x11N\xca\x16g\xa3\x0e\xb0\xeb\xc3\xea\xd8\x1e\xd6\x97iF\xa2\xce\xb1\xaeT\xd7y{vB\x90\xb6\x12\xb2M\xe42\xab\xa9T\x93\x06sPV\xa2\x89yXP\x91\xd7\xee\xdc\xe9\xf0e\xf5T.\x11r\xb2]\xcf\"\xeag\xfd}\xb6\xdd\xd6>\xab\xc9,\xdb\x8f\x05L\x9e\x88\xb2q\xc4\xfal\xd8\x81O\x85\xe0\x0b\xfbH\x99\xe2\xeb\xfaA\xf8\x00\xe8\xab\"\xda\xad\xa4t\x9b[C\xe7&|\x0e\x0e\xc4\xbc\xca\xbaP6\xeaQi1\x9fq\x19\xcb\xc7>\x90\xc2\xcaWT\xa9\xb1\n\xec\x80Lv\xdcV\x81^\xe0\x10\xacY\x0evuUs2`\xa6\x7f\x85\xf8\xc4\x88-\xc5\xc9W\xa2\x7fq]]\xf0.\xe2\xd3=\xb1\xb9\xe8\xea)q\n@~_P\xc14\xd0\x14w=\xb7\x06\x91\x9c^\xad-'\xde\x04\x84\xe5\x15c\x97\x88\x9f\xb3cOO\xac\xf8\x10\xc1h\xc8Z&\x85\xe22\xa8_>\x90!O\x9d\x95n\x00\x9e\xb9\xae\xc7VN\xe6\xb1S\xf5\xc2\xd5\xcb%\xec\xb0u\xb5\x08\\EP\xc1\xe6\x0bMI\xbd\x98\xe3\x82\xacB\xef\x1c*\xda=\xd6\xc3\xc0\x07pnr\x06\x83\x81`\x98M\xd1\x16NO\xb0\\\xa15\n\xf3\xd9\xd7\xd8\xc0\xd7\x92\x93\x04f:u\xf5\xf1\xcb@%N-I\x86\x9bj\xe4w\x9a,\x93n`\xd0s\xd6\x12\xd3\x0c\x0co\xca\xe2\x91cs\xe6g\xa7zr\x00F\x0cg\xee\xca\xe0\x96\xc3\xfb;\x10\xdd\xf2v\xc7\xb3\xbdG\xdb\xe2)\x1b\x00\xb1\xd5\xc5.Ek\xfd\x12*5Z\x0b\xc1X\x1f\xeby\x96#$\x8f\xf2%O\xd0\x01\xfe\x86%\xd0\xe8)\xef*]Q[\xf3\x80\x96\xb5\x13b\x82\xc6\xbe\x07\xdf{\xbf\x83[\xe9\xb7D\x93\x8e\x9d'\x1b\xcf\xea\x08\xc4\xf6\xd9\xd0Bv\x18uz\xb8\xc1\xfao\xa3E\x80\xb7\x9e\x14A\xe3M\xa3*\xca\x927\x95\xe0&\xf5 >Iyr&\x86.\xce\xdcp\x0bXK\x1a\xc9\xa0\xbc\xe2P\xad\x12{\x10\xd1]+\xb4\x8fvr\x19:\xc7\xd6\n\x92;\xf0\xf7\x02\x91\x8a\x80\xc7\xf0\xcf\x00Bn\xa4\x98[\x8fYP\x11\xf0\x04\xb4\xcb\xa2\xb3\xc2)N@\xc8f\xb6<\x1a\xc4|\xecO\xf0\xe2\xa7xA\x07G\xb6\xbd\x8ai\"\x11\xbd\xc7u\xeb\xab-\x93\xd8\xa6\x16F\x8a\xe6\xbc6:\x08\xca\xaa +\x04\x04E\xc5F\x91\xe9\x99\xe6a\xabY\xf2\x85\x07C\xec\xbamm\xeaO\x06\x1e\xc7\x04;\xfb\xe2\xe5\x8bw\x8d\xc5?\xb4\\Q\xd5No\xb1\xcb\xb2E\x12\x9f\x83P\x05n\x119w\xdf\xf0Y>\xe5 \xeb\xdde}\x96\x81\x1b\x90\x9e\xc4`>c\xc5V\xc9fy\x82*[\x90 \x05\xdfH\xe3\x9b\x17sT\xaf\x81\xd8g\xe5\xa7)j\xe2DZ\"[\x0e\xd2\xb2\x19\x8f]\xc69\xca5\xf8\xc5*\x0c\xa6A\x16^\x16\x0bf\xc1U\xfb\xd8\xe0\x80\xbd\xab'\x81\xfe-\x8a\xc1B\xb0h\x15\xba!\x1a\x9e\xc5\xd1\xdd\x8c\x9d\xfbQ&:\x91\xf2\x8c\xf9\xd2\x01\x81X'\xa0\xbf\x93\xbd\xc2\x8eL\xfd\x08\x0c?\x80\xb9\x91\x86\x83,\x9ek-7\xb9\x96\x11\xd3\x1f -\x10\xad^\xdc{\xfd\xe6\xd5\xa7\x87\xc7_\xbd\xfc\xcd\x97\xaf~\xfc\xf2\xf8\xd9\xf3w/^\xbd<\xee\xb1>\xfb\xd2\xcf\x16\x83\xc4\x8ff\xf1\xd2q+\xa1\xcd\xb5\xe0\x9e{\xee ]\x85A\xe6\xf4z*\x80o\xe3\xe7k\x93\xdb\x15\xbd\x10\xb5\xe8\xed\x86\x01>\xdd\x00K@\xbb\xbfJ\xe2\x13\xf1\x1ed\x0b\xe63\x1c6|v\xc0>\x83 \x12\xcb5\x8b\xd9\xc2\x8ff!z\x99P\x98\xce\xfa\xec.\x8b\x13\x16g\x0b\x9e0\x1f\xd6 \x88\x18z\x08\xe1Ozh\xd6\xb5\xf2\xd1<\x8a_\x82\x8d\xd54\x06/\xa3 X\x96\x06g\x80:\x85yO\x81q\x1a\x9aM\xf3$\x01\xa3\x03\xc0)\x81\x1c~t\xc9\xf2\xe8}\x14\x9fG\xea\xbb\x1e\xcb\xa3\x90\xa7)\x0b\xb2\x1a\x12\x07\x11;_\x04\xd3\x05\xde \xa4>PAZ\x8f%\xfc\xd4Of\xd0X\x8c+\x06\xbf!\xc1\xd2\x0d\xcd\xd1\xa9\x86\xc0\xd9\x13D\xd9\xc1]\x8b&\x86\xd0\xfe95\xd3\xa0\xca\x01\xd3(\x0e\xc2\xf1\x06\xfa\xddEo)\x96\x87\xd83\x0b\x9d\xa4\xd2`\xc6\xb2\x12\x14\xc9\x80\x8f\xb2\xf8*/\xbd\xbc\x88\xceb4\xdcz\xed'>\x84u\xff\xb2\xf0\xb1\x9b\x15\xac\x84\xf4\xf4@\x124\xf0\x16$\xb6\xae]\x97\xd8\xbbD\xd6\x83]#+(\xb2\xf6\\\xf2X\xeb[\x95\xba\xd2v\xa4\xb2\xfey\xf3\xfa\xb7\x1e\xc0\xb5\x05_\x1bj\xa2\xe6\xd8[\x0bd\xb1^\x8d\x82\xff/1\xe9\x15\xbds\x04\xe5%\xa61P3L\xcdU\xf0}\xcf\x15E\x9c\xed\x8e\x9f\x82\x1a\x89\xa6\x0e\xb5\x1b\x81\xa4\xb9\xa5'\xbb\xb7Y\x9cp6\x8b9zc^\xf8g\x1c%\xf3\xc1L\xc9\x1c\x06\xecK\xff=g\xf2*//#\x8c\x94J\x85\xfa\xe6\x1b\xa4\xday\xf7|\x11\xa7\x1c\xa7&\x05\x99\xb0l7\x1d\x10\xc1k}I'\x0b\x14s\x0d\xed\x13\xba\x0d-\xb6\x84\x17\x19\xaaM\x07A\xaa^\xf5\xb8.\x85\xbbd\x1f$\xd8A\x8aB\x91\xe2\\\x9e\xd5\xa2\xa2\xa8\xc1e18&\x88*\x81\xdf^,\x979\xc4\x83/\xbeZ\xdec\x9a\xc7a\x18\x9f\x07\xd1\xa9rx\x10\x80S\xaa\xbb\xac\xcf\x02T\x1a\xdc\xedy\xacw\x17eL\x83\xbb\xe6\xd8\xe1\xc0%f\xef-\xff\x19(#\xf0\\\xe8\x0e\xe6A\x98\xf1\xa4\xe5\xa8 \xc7\xbba\xdc\xdf\xaa\x1da\xeaZ)Y/\xd7e\xc0\x07\xac\xa7]\x19\x04\x81\x04^\x94,J\x1d\xb0\x9e\xf2\xeb\xd0c\xa3\xe2G\xc0S\x14\x97\xe1\xc0ss\xe0l\x1e\xe7\x118\xa5\xbe\xab&E\x03\x7f\x16\xb3y\x10\x15a\x83\x04\\Q\xf0\xaf\xe4_\x853 \xbcC.\xc5\x1a\x0dp\xd6\xef>\x96\x9dD\xff\x13'\\J\xeaf\x83\xbbuw\xca\xb7\xbf\x1b\xde\x1aE\xf3\xd6\"\x0euo\x9c]tH\xa4d\x13UH\xa0\x1a\x12X\xaed\xa7\x97+)\x0bEQ\xe7\xad\xc8?\xeb\x02(M\xb6y+\x13\xa4W\xacB\xab\xa0\xd0b\xd7\xae\x07\x00/\xe7\xa9:#]>\x199\x8fP\xc4\xfd\xe8\xa1[\xedy\xe4<\xd8\xdb\xead\xe0Y\x1e\xa1\x87\x86\xafC\xe9l\xf0\x91\xeb\xf4\x8a\xd8\xe0\xa4\xad\xf3\xde\x96\xc5\x8a;r\x86\x0f\\\x8d\x8a\xaeq*\xb0\x1d\x084ER6\x8e\xd1c\xad\x16\xbb\x1c\xee\x14@4\x81:\xcdJ\x1c]~\xd7 \xc0\xcdV\x86\xf7~\xe2\xfc\xca\xf6\xd6\xd5Q\xea~\xe2\xfc\xd4?\xf3\xd3i\x12\xac\xb2\xab\x99\x9f\xf9\xee\xbd`i\xc2\xf2\xde\xf8'G\x17\xdb[\x9bG\x17{\x87\x93{\xa7\xf5\"\x01\xb69\xfe\xc9h\xd2wG\xf7N\x97\xe6qk\xdc\x1b\x08Bt\xaf7\xa1\xe1]\x05h\xeaGA\x16|\xc3\xbfJ\xc26a\xd5\x99\xb4\xb5\xf1\xe4\x8e!\xaf\x95\x89cA\x8fRKw\x12\x10j\x05\xfd\x010\xec\xaf\xe6\x0e\x1foM\\\xf6\x94m\x12\xee\x97\x9d\xdc\x95&\xe7N\x04\x12\xc0\xa5\x9fM\x17N\xe0\x8ad4\xd9\x11\x873\x96\x0c2\x9ef\xe8\xb6\xa4\xe7\x9f\xc4y6: \xfd\xe8\xbd\xd86r\xb8\x1d\xae'V\xbe\xb3\xa6\x15e\xb9<\x1e\xd8\xec\xff\x1f\x0e]#\xdci\xc3f\n.\xa2\x07Y\xfcE|\xce\x93\xe7~\xca\x1dpG\x02\xfa\xa3\x03&\x90\x94\x8d\x0c\x1f\x1f\x96\xe5\x15\xaf7\x84]\xca\x9e>r\xb6\x1f\xda\x96\xaf}z\x95\xb0\xdbI\x1c\xeeVG\xb3\xe6\x1a+\xbb\xb7W\x17]|/\xa6\xe4`H\xdelF\xde\x0d$g\xff\xbf1y1\xc7\xf5 \x8e\xba\xd9\x8cw\x03t!d\xb9\x96\xe5\xb8\xbe\xa2)\x84\x13\xeb\xc1r\xa3g\x8f\xf2\xaf\x0b\xcb\xea\x9aCh\x96\xf5\x80\xc5\x03\x19\x94@\x814F\x12\x18 \xd1\x90\xe2y\xa34\x93\xa8\x0e\x96\x91hd\x91\x0d\xa6\x0b?y\x969[\x16%L*\xcb'N\xe4\xb1\xa1\xb2P\x82\x08!\xd9 \x0d\x83)w\x1a\"\xb0\xe4c>\x01\xc5wU\xd8\x7fm\xda\xbb\xfd\xb0\x1d\xc4\xf6cl\x0c;\x9a\x14\xdf\x93\x98T,2\xe9\x02\xea\x80\xc5\x82w\xf7\xd8\x06\x98\x01D\xec\xe9>\x8b\x95Ux\xf1\xa9\xeb\x8e\xe6\xc1^\x9d l\xc1\xbb\x9b\xd0g\x8e\x08\x02\x97\xb4\x92\xf6\xc5b\xe3h[\xbf\xc4Ks\xb65>\xa1\x10\xb97>:\xcag\x0f\xb7\xb66\xc5\xff\xf9|^\xbf\xf4\x96\xa8B[;Xhkgw~t\x94\xcf\xf96\xfc\x9c\xf3m\xf1s{k\x06?\xb7\xb7\xcc&\xe0\xc6\x00|fg:\xc6\xcf\x9c\xd8>\x07\x86~\xe3\x9f\xb4t\n.\xf49\x07#\xbd\xd1\x19\xdf\x85\xe2\xb3\xf9|\xe2\xfe|\xfb\x03y\xc5Oo\xf7d>\x9f@\xc2\xd4\xfe\xa1T~\xa8\x08\xe1sU\x84\x01r\xc5[\xef\xa0V!T\x9f\x99\xf3-\x8e\xff\xe6\x93\x03\x15\xe1\xc9\x91\x9d\xde\xde\xda\x9a\xc9V\xc7\x18\x93)\x9f\xc8\x95~\x85A\xe2\\k\x1b=\xf7\x93\xfaY`\xaa\xf5r\x1c\xa8\xae\x1e\xf4\xf0\x1a<(\x08\xa3z\xfb\xb5~\xcf\xd9\xbe\x0c\x8c\xe0\xc0\xe8\x9c\x83\xfdr\xa40\xe8)F\x8a\xec\x9d\xf6\xae\xbb&\xb8\xe4*\xe7p_t<\xb9\xee2\xde~hc\x08m\xcb\x98\xf2%/G\xdb\x1b\xdf\xfdo\xbf\xf3\xbb\x93\xde\x8dF\xd6\xbc\x9d\xa8\xdd\xdd \x1c\xb1o\x14,\xbe\x0f,\xbe\x0b\xce\x1ez\xbd\x1b\xdd9\xd2h\x9c\x058\x06\x0b\n\x87\x9e\xf1\xd1\xc5T\x1c\x8bf\xbbG\x17\xb3\x87\x9bG\x17\xf3\xdd\xa3\x8b9\xbc\xcc\x8f\xf2\xad\xa1X\x19\xf9\xd6po>\xb9w\xda\x00\xc2u\xc9\xc3M`\xed\x80\xd0\x1a\xa4\x82 \xa9U\xd0\x0c<\x96\xd4a{} \xdew\x9d\xea\xd7{\x7f\xf8;\xbd\x11\xeb=\xab\xad\x9b\xde\x1f\xfe1:\xf9\x8f\xd3\xc9\x7f\x82N\xfe\x1f\xe8\xe4?I'\xffC\x91\xec\x1b\xc9\xff\x88N\xfe\xc7t\xf2?\xa1\x93\xff)\x9d\xfc\xcf\xe8\xe4?-\x92\x9f\x1b\xc9\xff\\$O\x8d\xe4\xbf\"\x92\xeb\xde\xf1{\x7f\xf8\xefD\xf2\xccH\xfe3\"\xb9\xee;\xbe\xf7\x87\x7f\x96N\xfest\xf2\x9f\xa7\x93\xffg\x91\xcc\x8d\xe4\xff\x85N\xfe\x17t\xf2\xbf\xa4\x93\xff\x82H~a$\xffE:\xf9/\xd1\xc9\x7f\x99N\xfeW\"90\x92\xff5\x9d\xfco\xe8\xe4\x7fK'\xffU\x91\xfc\xd2H\xfe\xf7\"92\x92\xffG\x91\xfc\xcaH\xfe\x9f\xe8\xe4\xbfF'\xffu:\xf9o\xd0\xc9\x7f\x8bN\xfe\x0f\"96\x92\xff#\x9d\xfc\xbf\xd2\xc9\xff\x1b\x9d\xfc\xbf\xd3\xc9\xff\x89N\xfe]\x91\xfc\x95\x91\xfc\xb7\xe9\xe4\xbfC'\xff]:\xf9\xff\x14\xc9\xb9\x91\xfc\x7f\xd1\xc9\xff\x99N\xfe/t\xf2\xdf\x13\xc9\xf5\xd8\x01\xbd?\xfc}\x91|i$\xff\x01\x9d\xfc\xa7D\xf23s9\xfc\x9eH\xf7\xcd\xf4\xbf/\xd2\xdf-\x8c\xf4\xff*\xd233\xfd\x1f\x88\xf44\xad\xa7\x7fK\x93\xe5oi\xfa\xfb-Mh\xbf\x05\"n\x90\xb7o\xff\x04\x9d\xfc'\xe9d\x80\x80A\x0c\xbf\xfd3t\xf2\x9f\xa3\x93\xff\x02\x9d\x0c\x84\xd6\xa0\xa8\xdf\xfeY:\xf9\xcf\xd3\xc9\x7f\x91N\x06\x12d\x90\xe5oij\xfd-P&\x83Z\x7f\xfbW\xe9d \x13\x06\xfd\xfd\xf6\xaf\xd1\xc9\x7f\x83N\xfe[t\xf2\xdf\xa6\x93\x81\x04\x19\xf8\xf6\xed_\xa7\x93\xff&\x9d\xfc\xbbt\xf2\xdf\xa1\x93a\xcd\xfe\x9a\x91\xfc\xf7\xe9\xe4\x7fH'\xffc:\x19\x16\xe7\xa9\x91\xfc\x0f\xe8\xe4\x7fD'\xff\x13:\x196\xfb_7\x92\x7f\x8fN\x06\x1e\xc0X\x98\xdf\xfes:\x19\xb6Xc\x07\xfb\xf6_\xd0\xc9\xff\x8aN\xfe7t\xf2\xbf\xa3\x93a\xfb66\xb6o\xff%\x9dLo\x9a\xdf\xd2\xbb\xe3\xb7\xff\x9eN\x86\xed\xe47\x8cd\xd8N~j$\xc3v\xf2\x9bF\xf2\xff!\x92\xdf\x1b\xc9\xff\x89N\x86\x9d\xe0\x0b#\xf9?\xd3\xc9\xbfO'\xff\x01\x99\xfc\xdd\x1f\xa3K\xc3.\x13\x1a\xc9\xff\x85N\xfe\xafd\xf2w\xbfC'\xffq:\x19H\xaf\xc1\x8d|\xf7'\xe9\xe4?M'\xff9:\x196\x01\x83\xa5\xf9\xeeO\xd1\xc9\x7f\x86N\xfe\xf3t2\xd0o\x83I\xf9\xee/\xd1\xc9\x7f\x85N\x06Bm\xf0\x17\xdf\xfde:\xf9\xaf\xd2\xc9@c\xdf\x18\xc9\x7f\x83N\xfe[t2P\xcd\xc4H\xfe\x9bt\xf2\xef\xd2\xc9@\xa8\xdf\x1a\xc9\x7f\x97N\xfe\xfbt\xf2?\xa4\x93\x81\"\x1b\\\xc1w\x7f\x8fN\xfe\x07t\xf2?\xa2\x93\x81\"\xbf3\x92\xff)\x9d\xfc{t2\x90\xde\xccH\xfegt\xf2?\xa7\x93\x81\x98\x1aL\xe1w\xff\x82N\xfeWt\xf2\xbf\xa1\x93\xff\x1d\x9d\xfc\x1f\xe8d\xa0\xb1\x06\x0b\xf9\xdd\xbf\xa4\x93\xff5\x9d\xfco\xe9\xe4\x7fO'\xffG:\x19H\xef\x8f\x8dd \xbd\xe7F2\x90^\x83\xc7\xfd\x0eH\xaf\xc1\xcc~\xf7\x9f\xe8\xd2@z\x7f\xdbH\xfe\xcft\xf2\xef\xd3\xc9@L\xbf1\x92\xff\x0b\x9d\xfc_\xc9\xe4oav^\x98\x1b\x0f\xc0*0v\x9e\xef\xf0\xb8fp.\xdf\x01\xb3\x14\x9b\xe9\xc0X\xde5\xc9\x1b\xec\x1bi\xa9\xd9\xb5)Hi\x8f>\xd7\x16rw\x12\xb0\x11\xce\xd4F`\xa3[\xa9p\x03\xc9Z=\xf6\xa3\x12;R\x96\xdf\x84\xc4M\x9am?l\xf7\xbcG\xabT\n\x0b\xc5}\xd0+x\xba\xea\x04u\xf4\xfa\xc0AA%\xd5\x10~\xa9\x86\x80\x00T(\x87\xcd\xba\xc9a)\xb5\x01\x18Tlmm\x1e]l\xcf\x8f.v\xfc\xcd\xa3\x8b\xfb[G\x17\x0fN6\x8f.v\xb7\x8e.\xf6\xc4\xcb\xde|\xd2\xbfw]%\xa3\xeadt\x93N\xfa\x9b\xdfL\xc6\xcf6\x7f{r\x05\x7f\x7f\xbe\xed}\x80\xb4\xab\xf1\xd6\xe6\xa3\x89x\xc5L\xf9\x02\xa9W\xe3\x9f\xe0\xcf\xad\xcdGlr\xef\x9a\xdd\x8f\xd0Pb-\xb5O\xa1\x939:\xba\xf0\xa7GG\x17'\xc3\xa3\xa3\x8b\xd9\xde\xd1\xd1\xc5\\\xfc\x01\x01\xab\x008B\x1c@\x8e0\x07\xa0#\xd4\x8f.NP\xe0\xba%\x05\xae\xbbsvt\x94\x89\xea'GG\xa2\xae\xbf\x05r\xd9\xf9\xfc\xe8(::J\xa0\xd0\xf6C\xfc\xf7\xe8\xe8(\x1f\xee>\x14%\x86\x0fA\xf9 \x1a\xc2\x7fC\xfc\xb7\x8d\xffv\xf0\xdf}\xfc\xf7\x00\xff\xed\xe2\xbf=\xfc\x87mn=\xc2\x7f>~\x01;\xf7@\xfc\xdb\xd9\xda\xda\xaa\x11\x18\xd46\xf5X\x9fE\xac\xcfz\x16M\xd2\xac\xdf3\x17\x1cH\xa1\xb7\xf7\xe4\xb0\xf7Nh\xa5\x91\x98j\x01\xd4\xb9\x80\xd4|\xf7\x08\xa5\xddG\x17\xa6\xea''5Q\xaak\xa0\x18\xa9}\xd0\xda\xf4\xb3\xcd\xdf>BA;H\xdaQ\xd4~t1\xe36u\xd3\x1az\xad\xf0Zz-\xd0\x18\x8d;\xf7k\xae)\x98\xfcB\x0d\x96S\x8a\xa4\x95Vt\xda\\t&\x8b\xae\xa9>\xb8\xb2\xa9\x12\xdd\xba2naU\xc6\xcd,\xca8R\xf5\xc8R\x8f\x85\x9d\xf4s3Z?wV\xd1\xcf\xd1\xed\x89\xbc\xda}\xcbe\xa9b\x19OQ\xa3\xa7\xe0\xdf\x17`\x03\xc5\x95s0\x9a]\x85\xe1\xd5\xf2*\xe1W\xe9Uvu\xc6]\xf7@\xaa\xef\xc6\x89\xc7\xa6\x1e\xeb\xfd\xb0g\xaa\xff\xd8\xcah\xe8\xb3\xab/\xbe\xb8\xfa\xf2\xea\xcd\xe1\xd5\xdb\xabwW?:\xac5\xc4\xfalnk\xac\xec\xdf\xbcK\xffT\x8d\xb6\xcf\xf79\xc0\x1d\xeb\x87\xd7\xa6\xec\x1b\xce\x06\xd8t \xea\xa6l\x10\xc0\x14\x97\x1d\xb0\x15\x18A#\xe3\xef\x17\x0eG\xd9Z\xa8S\xdc\xb5~d\xbdk}o\xfc\x93\xc1\xa4\xff\xc3{\x03~\xc1\xa7N,z\x10\xc35\xb1\xf2m\xf0\xe2\xf0\xf8\xf5\x9bW\xef^\x81\x91~\x0f\xac\xb8{\xe8\xc8\xd1I\x93\xa9{<\x1c\xa0E\xd3\x88\xf5z\xd7\x85\xc4F >\x18@`\xd6k\x8c\x14\x91~\xcf\x1d\xf7\x8e\x8f\xa7q\xc27\x7f\x9a\x1e\xa7\x0b?\xe1\xb3\xe3c\x9b\x95\xfdu\xa5\nv\xdf6\xed2\x83\xf6s[7\xb0\xa9\xad\x01\x88\xcb\xc2\x87\xcd\xe3\xce\x1de\xde[!JcN{\x05)\xe9\xd2\xe6>\xcb\xd8\x01\x1b\xb2\x11l\xda\xd7\x05\xbf\xa0\x9e\xc4 \xeb\xf88\x8cg~\xba8\x16{\xfdqqg\xe8\xf8\x988v\xb5\xb8OX\x17\xb9*PR\xf0\xa8\x02#\x983\xc7pZ\xcc\xb4\xf3sf\xc0\x8fULN\xf7\xd1\xa6\xb4\x98\xee\xa6@J\xb2VPx\x15\x86\x95.\xbeP\xd8\xfd\xde.\xf0\xbf\x7fx\x16\xc6\xe7\x07\xd5+>0\xc4X\x1b\xf8\xed\x0e\xb4\x01\xcb\xda\x06\xd9\xe4=\xacu\x9c\xe5\"\xeaW\x17#rdC\x8fEb\xe8\xfbh\x8d\xaf\x89\xd82i\x9d\x9c!\x83pS\x02\xd1\xc6\x96\x8c'\xb7\xc4\x88\x0cw(\xf6\x18\x83\xd7h\xcc\xd8*\x0c\xa6\xbc\x0d\xf2\x9d\xd0\x8bf}\x13D\"rN6\x9c\x88=A\xc7\x11N\x04\x9e\xa0\xd4\xd5\xd4M6\x14\xebm\xb0\x8a\xd1WD\x89\x8f`\x1e\xef\xb1\xcd\xcd\x02H\x1e\xdb\xba\xd6\x9e[@\xe9\x174z\x1c\xbb.\xba\x1dG\x93\xf1\xb0m\x0b\xba\xd5\xa1\x146\xaa\xd5\xb1\x08rW\xb91\xf6\x11\xba\xd2u5\x9b\x80\x8d\x01\xb0\x91\x15\xb0\xb1\x04\xac\xd3\xefkH\x12a\xec\xd0\xb1\xf8\xf0\xc4\x85\x08P\xe3X\xc0[F9j_\xdb\x0d\xc3\xddn\x1d\xae\x0d\x89\x12\x15\xf9\xcd\x95G+\xdb-\xa1\xebr\x01\xad\x14\xc9\x8e\xdf\xd2S\x1d\xd9\x9d\x1e\x9e\xe8\xd1\x81\x1b\xf0\x9bQ\xbe<\xe1\x89\x96\x90\x02\xe7\xa9%\x9c\xc4q\xc8}\xe9\xf4M\xf0\xa6\xc7\xc7@\x89\x8e\x8f{2\x10\xc0Hs\xce\xf7}\xceFe\x1d\xc0d\x9c\xf2\x0eb\xfc\x8f\xdc\x07\xdc\xa1>f\x1f\x1a\x16a\xd9\x0fz\x05F\x80\x8c4e\x03\xc1\x034\xeeU7\xdeHnk\xc8\x8a\xc9\x8d\xf7fK\x8f\xb6{7\xae\x8eI\xe5\xdc\xfdV\x90X\xa6\xa5(\x80{\x10\xe9u\xef\xac\xe2w\x9d\xbcI\x06\x8e/b's\xa9\xfa\xaa\x8dT\x11\xb8\x1d\xa2\x05&o\xaa\x05\xe0{(j\xec\xbb\xfe\xc8q\xa4N>\xe6\x13\xb8|\x90wu3k\xa6\x9cI\x8f\xbc\xbc\x00\x87\x95\xf3\x0ea'a\x07,\x1f\xa7\xc0C\x87\x82\xc1\x0c F\x9a\xb1\x1bH\x03w\x87\xf5[ \xf2\x02\x84!`AL\xd8~\xd4*A\xb2\x12\xc6\xd8F\xa3\x87\x15&\xe6\xce\x1d\x96\x8d\xb7&\xe3\xed \xde\x19\x14\xef[\x82\xbd\x13/\xc3\x89\xd8\x82\x8ao5\xdd`\x8e\xa4\x13Q\x88\xb6\x16QAB\xaf\x0d\xb5\xa1qwF]\x8d\xa3\xa064%U\xdbm0\xc4\xaf\x0bd#\x80\x99\x02\x1d\x91n4\x8d\xe1\x0b\x04K\xcd\xe4)\xdbg\x1b\xb9y8,\xce\xf4\x85\xdf\x98\x8dZ\xfc\n\x10\xb0\xf2\x8a\xc7\x03\x96nnZ\xa5\xabs\xd1\xbdqjq}=\x85`\xa18\xbbs\xc1G\xc0\x166\x9e\x8f\xb7&\x02\xb97\x1c\xf1\x06b\x92\xd2\x93\xcdFS\xac\x0f\xe8\xdec\xd6\xef\xa7\xec \x0b\xad\xbdZ\xb1}\xe6\xa8\xae\xb9V\xe7i3\x10\x0d\xaf,\xb9\x0b1IV\xaf\xde\xc5\xd0l\x04\xa5\xe6\x90\x04B\xdco8\xab\xe6\xd1\x8aG\xc6}\xb7\xd3\xbe3\x86Q)\x1bBQ\xe7.\x94\\\xb2}\x96;3\x8f-<\xb6\xc2U\xe1\xb13\x0b\xc5\x04\xba\xabwy f\x12\x0b\x8f\xcd<\x16\xb0+y_\xeeL,\xcae\xf3\x08\x1afP\xd5\xba\xc1\xa1\xad\xf5\xeai}J\xea\x07HT\xd1\xacu\x86\xbc\x01\x8b\xd8~\x04\xca:\xf3\xb5\xa2\xac\xe4\xd5o\xbd\xc3\xfa\xc7T\x7f\xbb\xf1x\xb7\xf4\xad\x9b\xf2r\x16\x8d\xe0C\xea~\x9fH\xaf\x97\x07b\xbd\xd5\xead\xa1\xeb\xa9\x8c \xbfLy\xd9\x8a\xe7ft1\xa6\xb1G\x91\xa5\x15V\xf0Gb\xab+\xdcT=a>\xdbd\xc3bM\xe6\x95\x83\\\x15\xd3\xfb\xfdH\xa2\x90H5\x9b7\xc6!\x17L\xe0\xe4\x1d\\M[\xf8Z\xc5\xd6\xde\x90\x93\xb5n\xc5u1\x9ade\xb7\xa9x\xa7\"\x9d\xd2\x1c \x14\xaa\xab?Sl\xbf\xaeq\x08ew\xea\xcdL%\xdfTO\x9f\x9b\x9c\xc1J\x0f\xac\xfaLy\xf0\xac\x9b\x97\xcc\xaa\xa5\x12\xff\xb2^b\xa1\x97\xc0M\xbb^\xe4\xec\xe6\xc2S\xc5\xa2,=v\xea\xb1K\n\xffO\x04+\xe2PG\xa1c\xc8\xc9\x88\x9cs\xb6\xcfN\xd8\x01\x9b\xb1\x11\xcb\xc9\xba\x87l\x9f\x1d\x17%\xa86.\xc4^/\x1a:\x17\x9c\xcd\x8a\x1d\xb0\x05\x1b\xb1sW\xfc\"8\xa6\xb7\xa2\xb8h\xf5P/~h+\xfe\\5|h.\xe7\xe7bK\x0fA\xd7e\xaedX\xa5!\x9cb\x8a\x8d\xd2\\l'\xe0+\xc5\x83A42>\xc5\xf76.\x8a\x06/A*x\xa964\xd7c'\"e\x8a\"\xdb\x98\x98\xb5\x11\x0bd\xeay%\xc3\x1c\xdb\x86\x13\xb1;lN\x0eM\xcc\xf6{\xb6\xcf.@\x0c\\\xb8\x96\xe9\x1d\x1f\x9f'\xfej\x05\x82jb\xa2\xc4\xf3\x8c\xed\xb3\xb7Z\xb5\xac^\x8d&w\xef\xc5\xb8\x9e5\x9d\x07_\xb1}\xf6\x9e\x1d0>\x00Wr \x11mp\x9a\xfe\x9a\xed\xb3g >-\x8bg4[d\x05\xf6\xa9\xf3\xcac\xaf\x15\x1c/\xdb|^\xd3l\xd0\x06L\xaac\xb6\xee\x9b\xd3w\xfd\xad\xd1\xd8\xea\xe4\xc1o\x9b6\x96\xd9\xdd\x1ev\xf5\xe3zv\xcbf\x1du.M\xb7\xef\x80\x02\xfel\xe6\x80w\xe1\x1a0\xc4\xe3k\xf4\xcd\x9f\xcd\xc0\xabP\x99\"\xb6D4\xca\xf0\x0d\xfb\x8b\xa0jj\xe1\x93\xf0\xad\x037\xba\x99\xae\xa6\x13O$w\xd3\xc8\xed\xb4s~\x9f\x8cX\xfb\xb7\xec\xbae\x00\xbb\x93\xb5}\xc2\x8a\xd06/I\x86\xb9\x93d\xf5\xb6(7\x17\x14\xdf\x90K\xfc\xafo\xf8\xa9L\xaf\xb7\x13\x9a\x1b\xbb\xe0\x01\xb6\xcd\xed\xbf\xd8\xa3?E o}\x93\xae\xf0\x03\x9f\xf9\x99aiZa\x05\xc0\xa3e#+\xf0\xa5\xbf\xa2\xf8\x00-\xd8\xfb\xf2\x84\x1bM,\xf5\"h\x97R/r\xaa\x17y\xcb\x0dn\xe3\xb2\x92\x0f\x12\xf0z\x91\x93J\x11\x10\x81\xd7\x8b\x1c\x1b\x8c\xcf\xa7\xf9|nv\xf8\xbc\x066\xffG\x01?\xaf\x17:,\x9c\xaa\x15\xeb\xde\xe2\x9b\xea\x02\x18\x83\x03v\x88\xfb\xc2\xabyg\xd7k\x8aX'\x1e;\xf4\xd8[\x8f=\xaf\xe3~z\x1e\x80\x0f4R\x8e\x05q\xdc\xceGF:\x93; \x1f\x9c\\f\xfc\x0bd\xf77\xc41P\xfb}u\xc50\xff\xd5|\x9e\xf2\xac\xcc\xc7\xdf\x8d\x1c\x88x8x\xa3:\x01\x00{\xd2\x1b \xfe2\xcbCG\x8f\xe9\x8e\x16:\xcb\xb6\xden\xbcu\x04u\x8f1\x18\x0c\xbce\xaeKl\xfe\xf0\xb5\xb9\xf95H_Y\xd2\xcf\x1a{\x178}\xee\xb1>%y\x86\xda\xb3\xc6\xda|\x10\x81Oq1&x\x03O+K\xe53\x1c\xc2\x9d\xe0\x0fK\xf3KK\xa7/\x9b?\x8b\xfa\xa0~\xc5(\xa9R\x7fA\xd7W\xbcZn\xa9vj\xaf\xf6\x0c5\xfd,\xb4\x8b\x8b\x80/sD\xfb)x{\x85\xb3\xde\x86\x12R\x00\xbb\xfa\xac\x15\xfb\x14\xfb\xf6\\\n\x1b\xec\x9f{U\xb4\xf5\n\xe0aa\xd8\xd8\xd5>\x9bz\xecyy\x14\xb5\x7f\xf858\xb4{\x0f\x88\xf8\x1eC\x15\x94\x0b\xb8\x91!|^\nm<\xf6\xda\x02\xde\x13\xfb\x8a.\xf9\xf8\x0b\xe55P\x0cJ\xfe\xb0J\xaf\x99\xb6\xce\xda\x94\xcf\xed[\xf4\xba\xec\x9c\x0c\xe1\x04\xd3K\xcb\xaa\xb8\x195\x82\n\xa5\x0e\x0d\x8e\xfb\xfdl\xc2\xf6\xc1\x86\x9e\xd7\xee\xa2\xb9\x1fC\xc4\xf5q\x86\xd786\xbe\xf6\xb0\xecv\xb3\x8f(\xf1\xc7\xd0\xe4xn\xe9\xb0\x8f\xf2\xde\x94\x02\"\x08@\xd8\x1d\x16\x9bp\x9c\x82f\x8e:\xcb\x0b6hJ\xf2\xffb=\xcc\x05\xe1H\x9c\xcc\xd5tC\x1b\xa1\x95z\x14\xd1\x8a\x04\xe34\x7f\xccV\x0dJ\n\xc1:M\xc7+\x8b$\x7f\xc3 A\xc0\x00^\x9aG\x9aA\xdb\xcc\xed\xa8\x95\x10\xdfX\x80\x190E\xc1\xc47`4\xa9\x0c\x87R4\xba \xa8\x98\x12\xf0o\xd4\xbc\xab\xa6\xba`-U\xf1P\xea\xdf*\xa0\"\x18\xb9P\x1c\x9eV\xec \x9b[!s\n\x1a\x10\x05\x1f\x8b\"\xe4\x12,\x07g\x16\xf0\xf9n!\xfe \xe1B\xe5%\x1cWg\x80E\x1c\xf0g\xc4|G\x9c`!\x15\xd1+\xb5)~u\x05\xc4 ;\x10=\xdc\xdf\xc7\xd3w.\x1bA\xd4\x84vO\xecJb\x90\xa8\xd0\x14\xfc$\xe1\xfe{#\xc7T\xe1.a{\x03\x9exZ\x1a\x92\x83m\xc6\xac\x89>\x83\xea\x07\xf0wi\x03\xfc1\xb0\\Z\xab4\xe8\xcf\x81\x17\xd3\x8a\x99\x03:\x16\xeb\xe6\\|\xad\xda\xc9@F\xec0R3\xd4D\x91\x01\x06\x8fE\xde\xb1.\xa6\x86\x14\xb2,|\xf3\\/{\x8eF\xdf\x08\xfa\x0e\x1bX\xaao\xa1\xc5\x0f\x81\xe0g?\xa8V\\\x9f\xf4\x13\x87\xcfJ|\xc7\xcd!F\x83\xb5 (\xd0\xdc|\x0b\x03>\x8e'b)E\xec K\xacK\xc9\x87\xa5T\x8fZ(\x9e\xcc\xf1\x01i\xd1\xac\xd9 \xc6q\xbf\x0f\xb1\x0e;\x80(\xf8\xde\x00\xa1\xa23\xaa\x91\xf2\xc7.K0(cf\x04'\x91\xbdKZzg7E\xa0\x05\xf9\xf7\xa9\xfb\xe2\x94\x94\xbcm\x0b\xb3\xc8\x1dbiZ\x9eHf\xeb\xc6\xd0\xb5|\xa7\x953[\x170C\xcbMz\x03`>\x84)-\xc1\xe3\x8f\x0b\xf0}\x1e\xc6~\xb6\xb3-\xb5\x08\x80\x80\xb5\xcc\xdd\xfbt\xe6\x8b({h\xcd\x19\xeeZ\xb3l\x1f\xfb*\xb06\x08Y\xcfC\x7f\xb9\xe23{ \xdb7E^\xe5\xa3\x1b[\x9e\x9e\xafaP\xad&\xdd^E\xf0P\xcb+\xe48\xb5\xf4R\x08afp#Q\nr\xea\xb3!q\xc5\xc8\x00\xa9N-MIrj\xc9J\x17TKVB\x9dZ2\x08r\xeaiRxSK\xfe1\xf7\xdf\x17\xfd\xd8\x18z\xeb-\xc1@.\xc1\xd8\xe1E\x94&\xb1\x1fm\xf8c\xb1*o`\xdaK\xfb\xa0\xd85\xac\xdfn\x81C\xae\x8f\x0dc5\xe9\xf1\x98L\xfb'u\xf6\x18O,,[$6\xe7\xc2\xec\xc6\xd5\x9c\xf6G\xae\xb9\x91o\x00\x03~\x87e\xa8\xea\xb5\x10\xe86\xcb\xd7\x86\xb3\xc6\x9e\xebh\x81\xb6<\xd93\x8b\xe9\x05}\xfd\xc8N\xe5v\\\x07\xae8y\xac\xa7\xd6\x8b\xed\xe2\xd9\x0d\x9a~\x9d\xc4\xcb \xe5\x1f\xa1\xe5\xb7<\xfb\x08\xad\xca\x95uK-o\x1b\x97v\xe5\x8aX\xdf\xc0\xb3\x12\x856.B8gE\x00\xda\xa8\xe1\xf4\x15\xc0\xf1!\xb2\x1c.\x90m\n(\xb6 \x99\x0f\xe9\x06\x96\x95\xd2E0\xcf\x9c\x06D\xd5.\xfe\x03k\xd1\xb64E\xf9\xc0\x89\x8b\xbd\xcb\xde\xb2x\x00\xf8q\xc3\xa2\xa2)-\x99\x8aS\xe1$\xec\xa9\xf4%\xa6\xf6\xbc\x91\xd8\xc0Y\x9f9\xd2\xc8\xfd\x80\xf5\x9e\xdc\x13TM\xfe\xee\xb3\xde\xd3\x9e^Jn\xa0\x82\xa1\x8aD\xe9\xa3Hf\x83\xa6\x10\xe4\xa0\xd4\xc2\xb3\xcfb`\xdf\xc2\xd4)kC\xc7\x138J\x96\xbf\x07\xfej\xc5#\xf0\xef\xe0\xe9\xf84\xc0\xc4\xb8\x92\xa8\xcc\x18\x9c\x0dq\x06\xdd\xd8\xeaB\"\xe0N\x06br\x01\xb5*\xbc4pi\x80*W\xbf2s=`=\x86e\xb5\x072\x0e\xd6\xabN/\x8a3\xe6\xa7ip\x1a\xf1\x19\xcbb\xe6\xb3\x95\x9f\xf0(\xdb\xa0\xf8\x07\xf5\x9ci\xfe\x91\xe8^\xaa\xa7\xf4H\xa3 f\xec\x0d\xe7\x8e\xd6[IT#\xaf\xd2\x02\x8a\x80\xfa\x82\xc1P\x94\xd6\xf5\x9agE\x7f\x14{\xe9P\xbc\xa2zlT\xca\xc2f\x08\x9a\xd7uJ\xb4\x0d\x17\x0d<\xc4\xd0\xe0\x84\xcb\x95\xd7\x1d\xc1\xe7\xaa\x1c\xd1\xd3\xce$\xd3*\xfa\xac]d+~}pK\xc7\xc3\xce\x83\x07\xf2\x80\xdd$\xe8W\xdbyu\x80\xbd;\xbd\x11\xeb\xdd\xf1\x97\xab\xc75\xa2x\xb7wW\xe4\xfc,\x8f\xb3zV\xef.VZ\xc5\xa9\x91\xf5\x04\xb2B\xb3\xceS\xc88\xcd\x1ek\xc1\xfa\xda\x04\xe3\x16\xa9\xb8$^\x92\xb2\x01\xf1*\xc4=\xce\xf8N\xef\xc9\xd3\xbb\x18c\xa1U\xd8\xa6\x04\xccFP>\xe0\xd9\xca\x8e\x92\xd0\xad\x91G}\x08\xf1\xe3\n\xdc\xa5\x19\xc1\xa3\x1dwpx\xc6\xa3\xecp\x19d\x19O(o\x1f\xe6A:\x913\xbd\x08\x0cu\xb5x\"\xe7\xe1\xd0ub\x0f\xfc\x97\xc4\x837%\xc5\x14_\xbc\x0f\x89?N\x82\xacH\xdc\xdd}\x00\x89\x9f\xe5\xab\x90_\xc8\xa4]Hz\x97\xf8Q:\x8f\x93\xa5L\xdd\x83\xd4\xd7~\x9a\xbe[$q~\xba\x90\xe9\x0f!\x1de\xe2x\xb0\x8bu\x97\x1f\xc1\x8a\xb7\xe97\xce4\xdf]6\xc9yL\x9fF\xf9\xe0\\\x0d\x07U \xb8\xd5\x88D.j\x80\xd5\xd8\xca\xcfS\xae\xbd\x1a\xc7&\xfa\x93\x01I\x85\xa2r\x1f\x82\x16\x13\x9e\xe6\xcb\xca{\xe3\xa9,\x1a\xc4Q\xc1\x92\xc5`,\x08 \x89\x1fD=\x8f\x05\x90r\x1c\xa4o\xb3Y\x00r\xfcL\x1b\x18\x1e\x9e\xc1\x119\xd4\x12l\x9c\xc7r`\x88\xc4od\xdb<\x96\xd6\xa5xg\xd2Ztch\x83oN\x0e\xd6\x87\x8f\xf9r\xc7\xe5H\xc7\xbaA/\xed\xd0 y\xa9\x8d\x0ff<\xcd\x92\xf8\x12\x17\xb6\xfc\xd1\xf5\xb3!M\xb7\xc5\x16:u\\OZ\x02$\x830H3\x1e\xf1\xe4\xb9\xd8\x87\xa4\x13\xe1\x1e\x17\x9bi\xcfU\xfbk\x9d\xde\xd2_\x9cZ\xd1d\x19\x9f\xf1/\xe4wjsndj\xf3oV\xd5\xe7\xb9\x9eW\xce9Y\x13F$\x98%\xea\xabz\xae\xed\xab\xd3\xc6\xafN\xc9v\xcb\xdc\x86\x95\xa0\xc8-br\xa5\x9f\xf5\x14\x1d\xdb\xa7\x06\xb6O\x8b:\xd5\x14<\xca\x08\x02\x04gL\xaf\x95\x86\xbb\x10`\xa9\x89\xac\xf7\x04!I\xb3$\x98f=\x92\xaa\xdf\x1f\xba\x03\xbc\xadDZ\x08\xec\xb6z\x9c\xaf\xe3R\x81f\x9cD\xb3\x8d\xf6m\x8d\x15\xa6\x91\x9ci7E3Wg#\xdf]\xae\xb8d%\x9f\xfb\x91\xe0&\xc5>\xc3|6\x0d\xfd4e~\xca\xfc\xe2K\xc4\xb9\xf0C\xe9\x86\x1b\x19\x9e\x05\xf7g\xd2LK\xa6d~\x10VS\xe4y`\xdf\xea\\\x99i\xbb\xbc\xe9E\xaa\x99QS\xbc\xad\xe5h\xe9g\xbe\xd5;Y\xc4/2\x94G\x99\xe34y3}(O\xc1\x16\xa9\x18.\x88}@Q>\xaa@%\xab\x82$\xf3\x98\x8c\x01\x80\xcdT\xa1\xe1U\xc6\x9eG \xfc\xfe\xf8\xc3/\xfa\xdb\x05\x062\x06\x89\x06 \x10\x06\xebc\xac!\xc6:c6Fl#\xf0R\x00V\xb6\xdat`\xe5\xeaH#z4\x10\x10\xa1\xcf3\x12\x01\x87\xc6\x10\x0f\xaa\x03\xaa\xe1x}\xca\x8b/ \xf0\x16\x91A\x949\x05a\xce\xde\x04\x11\x15\xf5\xae\x11\"M\xbdkY\x81\xd5\xaf\xfd4\x0e\xda\x1d\xb8#\xfc\xf7\xeb\xf0\x97\xd0\xa3|\xe6Tn4\x15\x9d\xc5kM=\x14\xc7\xc3\xacHoH\x02n\x8f]\x16\xb1\xfe>\xe8\xc03\xcb\x9c\xd1f\"5\xf8\xc5\xd1\xd4o_D\xcdcJ\x06~\x18\xc6Sg\xcbb\x8an`LQ\xb3\x0d\xedJ\xc8\xc0\xb19F\xb3)\xf9\xbd\xaf\xa2\xd4\x9fs\x87\xb3\xa7O\x9f\x82x\xd2\xaf\x82/\x17\xd3\xf9\x98\xf9\x8f]\x00\x9c\x0f\xdf@\xa8\x06x\xa3>\xf7@\x97\xb6\xbaD\x9b\x1fQ\xa5\xaf\nV\x0c||\x04\xba\x0d\xc4\x81\x01\xe2\"\xe1\x83`\xb5d\xf4\xb7 JW|\x9aU~\x0c\xa6y\x9a\xc5K \x13\xa5t\xa6\x98\xa0q\xbd\xe0\xa4 \xd9\xd5j.*\x11r5\x1c\xd6\x88YI\x8e\xe5\xf2\xa6(\xae]\xfa,to\xa0/\xd2\xc6k=rw6H\xa2\xb6\xef\xea\xeeN+nH\x8eD=\xb0\xefC0\xcb\x17\xcb%\x9f\x05~f\x95jH\x05\x0d\x1a\x19I\xbf3\xe6}7\xfd \xe1\xa2\xbb=\x7f\xda\xa0\x9baRw\xc3\x07\xb3x\n\x922{\xb9Uitt\xca\xb3\xd7\nI^\x81R\x83\xcc\xb0\xba\xb0\x12M\xad\xc0\x92D\xc0\xe4]\xb0\xe4q\x9e\xc9\xe8\x88\xdc+\xfd\x1c\xac\x92x\xca\xd3t\xd2\x835\xfc\xf3\x0fEpIy!x \x0b\xa0\xb1m\x1b\x1dQ\x8f\xa6\x07j\xa4\xdc\xfa\xb3p\x88\x0b_\xea\xb1 \xb8\xd8HG\x9d\xa6O\x80\x12u\xb0\x8a\xd3\xecK\xe9@M\x9c6\xf9 X\x8a%\xf9v\x9a\x04\xab\xccj\xef\xa3\x1eE\xc47\xb6\x9a\xa5\x88LJ\x12\x05\xb3nu\xd1\xa6?\x05\xf3W\x94o\xdb\xf4\xeaOF\xeb\x10\xf4\x07\xf7\x86\x12\x02N\xaf\xe7\xb1\xde'=y\xaa(?\x1c\xd5o\xd9UZ\xa1g\xc2qA\"%\x9b~\xbe\xf0\xa3\x88\x838\xdb\x01{J~\xce\xaaY\xee@\xc0}H\x0f\xb8\x11\xb9\x16\x0e\x07\nn\x93y\xae\x81\xa7\x01tb\xbb\x02\x14\x0b\x16\x82l\x0c\x16b/\x8e\x12\xee\xcf.\xd3\xcc\xcf\xf8t\xe1G\xa7\x1c|\xdd\xcc\x07\xd3\x84\xfb\x19\x97\xa2w\xa7\x97\x02R\xf5\x04`\xc0\x8eq^\x90\x00Yd\x9d\xae*\xd4\xb3~\xc5\x8e`\xd9\xc0\xec\xf1:\xe8%E\xbdt+\xc8d\xc5\xf2d\xfc|\x11\x8430s\xced\x9e\x1d\x8fD-\x94m\xabZv\xc0w\x87SI\xed\x9c\x85\xc7\xb6\x8c\x1bF\xea\x11\xa4\x03\xc43=}\xcf\xf8\xa1\xd8\xed\xe0\x16P\xe2G\xb3x\xe9\xc8@\xb5\xc8m\x14=h4a\xcc\x06i\x9c'S.ob\x08\x8c\xd1\x83sI\x1b\xa5\x812\xe9\x93|\x172%A4\xe3\x17\xaf\xe6\x8e\x0f\x02\xbd\x85\xd3\x97\xe9\xa0pq\x14\xd3b3q\x14\xeb\xd8\x9f\xcd@\xd8\xaad\x14\xb0*\xeb\x89NO.\xba\x1el\x7f\x1bC\x10\xfc\x0e\xfc,\xf3\xa7\x0b(\xe9\xf4\x8a\x85)\x052Ig\x00T\x89\x8c/XX\xa43\x96\xf9\xf5p\x93*&\xa1\xf3\\kR\xb5\x8d\x9a\x19/\x97DGy7q\x80\xd1\xe6MF\x7f\x156\xbd48.\x14\\\xea\x10\xb1 \x11\x0f#\xe4>#\xf6DwM\xd0\xef\xbb\xca\x97@Qo\x0c\xaaA\x8b\xdd>\xd3\xec\xbe\x9aW\xa1\xd8\x8fO\xfc\xe9\xfbF_\xe3\xe2\xf1\x93\xd3\x942\xb8S\x0fq\xacU\x8f\xdc\x86\xc2q:A\x01w\xe2\xa4\xae\xc7\xd2~\xdf\x86p+<\xa2\xe9sG\x1c\xa4\x1b\x8c\x08f\x0d\x16%\x18\x947\xac\xdfhd-M6\x18\xa9\x80t\xd4\xa5\x88\x04\x0d\x94\x86\xe88L#\xca!\x19\xebV=p\x85\xad\x8d\xc8N ?|\xf5'K.;p\x02\x1b\x1dW\x8f\xfe\xa8\x81\xa0RW\xa0Y;\x83\xa3\x9e\x04\xea \xack\xee\xbdz\x94\x91u\xd2\"\xbb\xa0\x1e0\xbc\xde\xb2\x1b\xdfRO\xa3\x01%\xf5\xb4\x98i\xd7\x1f\xe8\xd3p\xdd>%\xe3-\xeajw\xd3s\x9d~m_\xa7_\x1eK\xc6\xc3\xef\xa3w;\xd7\xef\x9d\xf8\xbb\xfd\x91\xfb\xd8j\xebM=\xa0\xb0\x0fA\xe4@\xd8{P\x0f\xcdQWJ\xd8\x98\xa3\xa2\x00\x9b\x07\x91\x1f\x86]\xe8\xc3\x0c\xd8\xb9i\x87\xf3\x825\xb7\xab\xe1oM\xb6\xe7\xf4\x8a\x98\x05:/\x94\xf2p^^aW\xf7W\xb3E\x90\xc2\x0d\xd7\x11\x14\xd0\x94\xc0\xba\x11\xc0\x0e\xec\xc5v[\x80\xee\xd7\xa2\x8a\xed\xc3B6\xed\xc4\x17\xadV\x06a<\xf5\xc3\xb7Y\x9c\xf8\xa7\xbc9\xe6\xda\xd4\x07\x02\xd8\xe6\x15\xa45\xda\x19\xd3U\xca\x95\xef7\xc6^\x97>#\xc0\x9c\xac\x97%9\xc7\xc3?\x9e\xfb\x9d\xc8\x1dd\xf1\x17\xf19O\x9e\xfb\x84\x06Y\xff\xd5\xf9^\x1fS\x97a\x9c^\x14\x7f\xc6W \x9f\x82\xe9ZO\xbb\x97g\xf6Wi\x9b(\xd7\xaa\xf5\x9b\x82M\x1b\xfe\x06ycS/\x119=\xd0\x10\xd5\xbaV7>\xb29\xf7f`\x90\xd0\xcb\x12\x7f\xca+M\xb0\x036\x8d\xa34\x0e\xf9\x002\x1d\xf0w\xa4\x92\xce\xfd$B7\xe0\xb0\xf7w\\SL\x17\x17 \xa9\xc9@%UZb\xb5\xadC\xebR\xea\xb4\x86hA\\\xc5\xf9N\x99\\j\x0cw\x86\x96+\xe5[\xbbd\x00\x98\xc0\\\x1f\xa8\xdc\x03\xc2\xa0\xe9\xf7\x82\x12\x890v\x98\xe1N\xbb4%!\x02\xe8\x8b'\x1e\x04\xd1\x82'A&\x1d\xc1\x0c\xc1\xd2C\xa59\x01\x9a\x99\x04\x9a`\xfd8\xd3\x8cF\x9a\xa0\xc5\x007\xf0\x94\xdc\xea/\xa4\xc1\xb6&r\x86\x8f\x1et\x9a\x9fj\xad\xdd\xebT\x1a>\xba\xef\x96f1\xd7\xac\xaf\x19\xd0ti\xa1M\xe3\xbc3\xa4\x02\xe8\x8bt\x8bK\x82\xbd\xf6[\xea\xf5\x89\x92\xaa\x08\xbc\xac]\x1e\xe0\x0c^H\xa2\x9b?\x88\xe2d\xe9\x87\xc17<\x81k\xa9\xa0\x96s2\xed\x8678.+\x95\x0d\xa5G\x0c\x7f\xe0\xa7\x97\xd1\xd4E\xcf\x04\xfe`\x95\x04\xcb \x0b\xce\xc4\xd6\xa7\x8c`\xd8A\xf5\x13p\xb1z\x0b\x0e\xeb\x19\\\xb3\xc0\xaaF\x89m\x17<\x7f\x8f\xea\xb5\xb5vE\xb1\x1d\x17bQU\x13\xf70Q\xbc>\x84f\x8a\xae\x82\xe5\x8f\xb3\xb7\xf5\xc8\x95Q\x8d\x96\x8146r\xf6\x86\xa0\x9f\x19\xcc\x82t\x15\x97\x89\xbb\x90\xb8\xf4/\x9e\x9d\x16i{*M&lc\xcd\x84\xcf\xc1@\x85'*}[\xac8\x81(\xfe\x9a\xab\xa6\x0d\x91v\xf7(D\x02\xa1\x8f\x7f\x92\x9a\xa8\x049\xf30\xd6\x1dbwC'\xa5>J_\xfa/\xd1_\x05\xba\xe8\x00,\x11Get\xa7\nN?\xee\xdcaA\xfay\x10\x05\xe0\xa2\x1a\x1c\x0dq\xf0\xf2\xe1\xc4\xd2\xdfP\x9bQG'0\xd4\x88\xc3\xde\xb6\x0b\x82[\x18c\x1a\x9cF0\xf5\xbb{;\x9d\x88F\xfb'\xac\xfb\xb3Re\x15\x1f&\x17\x18m6\x05h/\x0d\xe0\x9c!z\xa5\xdbT\xbf7\xb7\xb7\xd6u\xe7\xb1\xc60\xec\xb6\x99\xdadz\xe5\x8c\x03Q\xd0=\xb2pi:\x81>pn\xa3\x9f%b?\xa0\xbd\xd2\x0e\xef\xd7\xfd\xdaH\x02Y\xf7\x98$\x03V\xee\xd1\x01+\x05\x9dm\x86\x0e\xe3\xb4\xb3\x81\x08oCUgX\xec\xe5\xe8\x10\x03n^I\x97\n\x15\x9a\xebjtG\xd1\x1b\xc2\"\xfc\xd5J|\x1d\xf3 l\xe8\xca\x9f\xf4\xb4\xe6\xce\xa8\xe5\xcc\x9bbEt\xd8z\xa0\xda =6\xf7X4\xe6\x13\x88\xe9\x81Nx\xc8K\xe5\xb6\xe3\xea\xad\xe0\xf2\xae%\x16\xe0\xce\x90\xf6K9\xbco\x89 \xfcp\xcf\x1d,y\xb6\x88g)Ejw\x0d\xff\xc0\xa9\xe4\xec\xeaG\xa8\x90^\x0cp,\xac\x96\x9cv]6\xf3re\xa0\xa6\xb1\x9a\xad\xd9(\xa0(G\x12\xcb\x80\xd7\x86\x82!1\xe3\x9a\xdf\x80\x05\xa4\xf2e\x90uXX\xc4Q\n\xec\xbb=vVD*\xf5\xd8\x89\xc7\x8e!\xc8\xec\xa1\xc7.0\x9a\x96\xc7\xde{\xec\x99\xc7^y\x10tk\x0e\xe7/\x9a\xe2c\x00\x11y\xa1\x14i\xb9\xdc\xbd\x0b\xf14\xee\xd6\\#\xe8\x1aW-\x10\xff\x02\x9cu\xea\xc9\xae\x07Qq.\x06\xa7<\xf3 \xf2\xcd\xc5 \x15\xaf\x97\xf0\x8a\x9a\x0d\x0f\x02\xd9\\\xa0\x06\xc5\xf5J\xc1\xcc \xe1i\x1c\x9e\xf1$\x85\xe6_\xc9\xad\xa5H\x15\x8b\xfa\x19SA\xf3\xed\"-Vn\xc0\xd2\xb4\xaa\xa0 &\xf9\x10\x1b\xf2+\xf8\x1e\xf8\xbeq\x02\xb7\xec\xd2>n\xd2K\x91\x08\x8aIb\x9b|-f\xab8\x89C\xe0]_Z&\x9f\xf2\xac\x07\xab6@s<\xd7c\xaf\xc9\xe8%\xa2\x0f\xe8tO\xf0LAi\x808-\xe8 \x9e\xe2\x83\xf1\xd6DP\x80\xb0\x9e\xae\xfa\xbc\x8f\x9e\xa1\xecB!bd\x8a\xb7H\x9c\xde\xf3 \x99\xe6\xa1\x9f\xb0 :\x8b\xa54\xc7c\xbd\xe7/\xde<\xff\xea\x8bgo\x8e_\xbc\xfc\xd1\xab\xe7\xcf\xde\xbdx\xf5\xd2\xa6x\x17\xad\x9e:\x01!\x8bA\xa5\x92\xe8C\x03\x18o\xa9'r6^\xa3J2\xf6\xd8s}^R5/R\x89/\xf8\x90*\xfd\xf4\xd8\x99[x\x15\x14\xeb\xa3Q\xe0\x06\xc7gzV-C\xc5\xbb\x02\x8dh\xa3\xae\x13\x14\xa8[\xe2\x90\xc5\xaa\x10\xf4m:\xb2\x97xT\xc7\x97Rf\xc6F5$s=\x1b\x9a\x17\x9d\xbe\xe5IB\x93\x000\x19&\xa6\xa9\xb8C\x8eV\xad\xa6'l\xdd\x93\xfa\xed\x92\x02\xfd\x8e'lyRT\x0c\xab\xd0\n\xa6\xb8qZ\xe3*5\xa0\xfc\xda\xc12\xbd)5h\xe8\xdc-O\xdf8\x16k,\"'/V\xf3\x16U\x82\xf21\\c>\xa9\xfc\x8f\x93\xe04\x88\xfc\x90T\xf8+n}\xc4\x9e\x99\x99\x92\xd5\x7f \xde\x83`\xb7W?\xcd\xb2\xa7<\xebr\x15T\x0e\xf2U\xc1\xe8\xbdr\xb8\x0b\xbb\xdc\x01[\xa2\xb3\x07\x89\x14\\L\x86I\xf5\xcc//\xfct\x8d/[\xe6\x91r\x12o~\n\xf7\xdb._\xb3\x900\x86\xfd\xa5{\xc00\xaa\xfa\x9d;\xec\x12-\xa5\xd8>{\x0d\xbc\xaa\xb4`\xc0\x1f\xefu\xb4\xc0\x9c\x1e\x86\xa8\xa3\x1cE\x99\x83\x006a\xd4\xae\xf2P\xa2\x15\"N(\x83\x80\xc8w\xee\xb0\x13q\xe6\xd3X#\xaf\xe8\x18|\xa5\xd7\x15\xb0q4j?\xb52M\xa0#\x16\x7f!\x10y\x0bz\x0f6\x02\x1b\xac2\xf9y\x91,\xa1TZRA\xfcW\xf0\xe41\xab\x08\xf5i\xdf\x15f\x7f\xc5\x18Glaf\x14\x87\xe1\x0e\x00\xe6\xc8\xd9\xca\xe5i~\xb6\xbe\xbc\x8fMV\xcd~\x95\x05-\x8b\x1a\x883.A8\xe5\xe1\xf1\xae\xe4d2\xe0d\"\xe4\xd1\xfc2\xc6]\xbdC\xeb\xec\xe9\x85\xa8[\xb6&7\xbfj\x93\xacmi\x11\xe4\xa3\xdcTp\x17\xf1\xcb\x00}\xf5\xfe\x9e\x83\x14\xbd\x95\xf5\xe0\xad\xb0\x93\xdd(\x87.\xf7\xdc\x91\xda\xef4\xb0r9k\x02\xa0%u\x8b\xb0\xb3bE\x9b\x82\x97\xc3\x8f\xd6O\x1f\x82\xd8K\xd8\x93\xdd-\xb1\xa0\xa1\xe3\x1210\xe6\xbe\xd9\xff\x95\xf3\xcc#\xfa\xac\x0b\xbfF,\x00\xd7UV\x12\x1b8\xc7D\xae\xa4]\x81\xe3\xab\xd3\x8e\xf9\x15\xd8\x89\x02\xe7\x9c\xca\x83\xbd\"p\x0e\xcd>\xfbE\xca\xad\x1c\xf1w\x86T \x10q$\xb7h\x99\xea\xe2-\xb1\x97\x83`r0\xf5WY\x9e\xf0\xb7\x99?}\xff.\xf1\xa7\x9a(\xa9\xe2\xab\xa3U#\x15I{D\x94wR\xd1n\xf3\x8aphH\x88\x90\xd2\x9a\x90\x89<\x0b\x07N*\xddm\xe5\xb8\xa9I\x8f\xa4\xca\xa9=hdR\x19\xd50\xc2\x9b\xb8\x81*\x1b\x0d\xa6\xf1L\xe0^\x0eWu \x08D\x84\x8c\xea\x9a\x0e\xa8\xd7\x90\xc7\x93j\x05\xdc\x81\xa5\x90\x02}\x85t\xd7.H\xf7n\x0e\xed\x15e\x1e\xc7#\xd6K\xfcozu\x1ae\x96=\x11\x18\xdf\x9b\x9d\xfb\x1d\xcaf\xc97\x97#\xd6\x13\xffz\x06\x8a\xf3\xc1<\x8eY\x9f\xf1\xc1\x89\x9f\xc0\x7fQ\x0eh\x83\xe8\xca\xec\xdc\x87z\xb7,\xb8\xdd5\xa2B5Hn\xd7\x08\x9c`\xd1\x10\x94\x17q\x02\xc3\xe4\xd6c\xdb5\xbe\x1blu\xb9.\xe9\x04n\xb4b\xa4M\x8a\x1a\xedV<|\x9c@\xfc\xd1qBX\x9b\xb6\x9a\xecD\xe8\xac@\xac\xebV\xf3\x0bd\xf8\x87\x8f\x99\xcf\x9e\xb0\xf41\xeb\xf7}y\x85\xadX\xa0\xfe\xc4\xc3\xf8\xd4\xca=Q\xee\x9a\xea\x13\xcd5KT\xe8EHL\xff\x18\xaa\xc3\x87CT\x1dj\"vT\x1e>\xdc\xfe\xd8\xcaCz\x12\x15\x8f\xa1\xf9\x96\xed\x15Z\xf5\x1ex[\xac\xceC\xe3\xa4\xd26X\xb7-P\xa6\x94#\xda\x00\xda\x96S\xbd\xe3\xb2\xd31x\xc3-\xe6\x06\x8fg\xeb\x1a\x9f\\\xab\xef\x04\xc5\x94\x9f\x18\x91\x97\xa6\xf0\x16\xda\xc8\x98\x9ak\x0e\x1c\x86}\xe7\x0e\x8b\xc7J11\x11\xebr\xdd\x10\xb9\xed\xa8)\xd0\xfc\x01\xe2\xbf\xbc.W\xb9s\x9b\xf9A\xa4V\xc3\xee\x0dV\x83\x82\xb6N\xe6\xd7\\+M{]R\xf6Ulz\x1b\xcae\x88Ju`\xf7R\xbe\xeb\xeby\xf38\xee\xdd\x8e\xaa]\x0d\xd3\x00\xa5\xbc\x0es]l\xa8\x1d\x11+\xcae\xf6\xf46\xf5\xef\xb5\xeb\xa4\x9er\xc8N\xe9\x80\xe6\xb4^t\xd5Y\x953\xeb\xaa\xcaY4\xabr\xce,\xaa\x9c\xda\xe7\x96]5>\xa7\xed\xc1n\xab\x15.I\x8a1\x8d\xa3yp\x9a\x83\xf6\x95\xa6\x1a\xbc\xd0\xce\xd2\xae\xaf\x95\xa7\xa4&\xba\x92\x1b\xdf\x164*i\xe3V\x98\xe2X\xac\x87\xb69\x185\x9c\xea\xb8\xd7;>\xe6\x1c\x0c\x07\x0e4\x07s\x90&\xcer\"\xe9rp\xe6\x87\xb9\xe0h\x16J\"sV\xab\xed\xb1K\xd7\xd3\n\xcab\xd1\x98O\xd8\x01\xe5t]\xe6\x88\x7f\xe8\xb1\x0d\xacO!u\x9f\x8dQ\x9b\x9aM\xca$\xe9\xad\xa3\n\xb1\x1a\x8d\x8f\xa6|\x04\x94\xbe\x1b\x94<\xdd'\x98z*\x80\x8a\x95[>c\xb9F]\xee(J5u\x8c5\xe0*\x992\xdah\xb7\x8a\x05\x07;\x02\xba\xaf\xa2i\xe1\xd4\xe7\xf8\xb8#(\xe6\xf3\x11\xf0\xbe]!!\x89\x04-\xe7F`l\xd0hS\xf1\xa7@\xd7\x97q\x80J\xc4r\xc7|\xd2\xa1\x9e\x896\xe8`T\xd46!\xc6\x14\xeb\x1d\xe0\xed71y\xc98\x98\x08\x1e6pY\\\xfa\xe5\x8d)\xb8b\xae`\x94\xb7\x95s*%\xd2\x97(\x98\x8c\x03i%7\x14\x88\x99\x0c\xd2\x15\xdc|\x0c<6\xa4\xee\xee\x81*-)?\x9b4~V\x8ac\xa3&\xeb\xf8\xb6iG \xa2\xdfzG\xf1\xac\xf0j\xd18\xef\x16:!\xb6\xe3\xb8:\xa1\xf6\x19\xa1\xe7\xb1\xd9\x19<\xccbD(\xc9d\xac6-\xde\n\xdew\xcc\xf0\xc8\x92\xb1',\x12\xd3\x9d\xb9,\x18g\"\xb3z\xd91k\xb8\x08\x07\x1f\x8d\xc1\x81\x05^h\x95\xedn=\x06\xc2\x1b\x8b\xca\xd8\xb4\\\xc5I\xa9\xc9!\x1b\x95\xbaTu\xa3\xac>\x96&\x00t\xb9\xb55+\x88\x0b\xe8\xa9\xec\x03c\xedw\x8b\xba\xdc\xc6\xaa~\xaf\xc6\xb0\xdc\xfc\xeb-\xb7\xad\x9a\xbe\xeeU\x84G7\xebK\xa7[U\xbf\x10\xfc\x14\xcf\xaa\x06\x05\x1b\xe6\xfd\x80\xfe\xf5\x81\xf2\xc6,8\x8b\xa9S\x17z\xe2^:u\xe2z\xba\xd8X\xa6N\xe0R\x84g\xea\xe8\xe6\xd0hG\xb8t~\xfe\x01\x85q:{\xdc\xec\xf5G\x19\x8bi\xa1*\x17N\x88\xce\x88\x8bSc5T\xa4\xc72e\xb4\xc4\xf6Y\xfe\x03vS\x8eY\x9e\xa3\xea\xb1~\x1b\x04\xab\x04\xdb,\xf88\xd2=q\xf9\xbdf\xe7\x01\x1a\xdd\x1f,\xfdU\xbb#hU\x81\x1d\xb0\xcc\xe1\xe3\x08T\xcf\xe2\x7f\x15%\\\xe9|\xc9\xc9+Zi\xf3\n\xff\x07o\xbdc\x0d\xc8\xbd@\xe0\xd516O O\xc5\xbe\xa1Zq\x05\xd7u\x12D\xb3\xf6P\xb6\xddg\x16\x8f=\x8f(S9\x9c\xa8 \x85\xff\xd7<\xd5\xc5(\xda\xe0\x10\xce\xfdv\xba\xdd\xe9 \xadD\xcb\xc8\x98\xe2H\xe6I\\\x0b\xc8\xd5t\xdcF\xff\xed\xe0]\x00\xe6p\x0c\x82d\x0fe\xc4\x13\xd7c\x9f\xc6q\xc8\xfd\xc8\x01V&+}.C\x01\xd4\x05\x81]\xf4m\x8cY\x13\xe4<\xdav\x07A\xc6\x13?\x8big\x8e\xc6\\\xca%\xfa\xc8fAN\x1a\x90\x1bK7\xa5\xe5\xc9!\xbd\xfe\xa7\xf2\x9bur1\xaf\xe3U\xa7c\xb5yX\x9e\xdd\xc6a\x94\xc8\xd7\x0f\xa3f.\x1c\xe6\x08\x1f\x8c\x1f\xac'\xf9\xeaQ}\xddET\xb2\xa5V\x13\xcaV]\xd2\xdbF]\x128Z*%\xf3)J\xe6C\xe7B\x06\x08\xbf\x90\x0e\x12\x99t\x19\x0eh\x0e\x13'R\x02\xf4\xf8\xec\x16\xbe\xf2\xaa\x8d[\xfc1\xc0 \xe8\xc2zF\x9c3y\x89F\xaeN4\xf7tN\xb5\x10\xc5\x82\xa4 \x16\xc9\xdb\xdb\xf2\xc2\x9e8\x9f;\xcb\n\xc71t!b\xd9>\xe3p\x19}i\xe1\x86\xf0T'\xbe\xda\xc2\x85W[\xaft\xaa\xe2f\xe4T\xb05\x91\xcb\x96h\xcc\xc7I\x0bJ\xf5\xc8\x91.\xc9\x02\xe6\xa5R3e !\x03\x7f`/\x040\x9f\x1bzdf*'\x9cs\xe8n2\xb1\xc2\x02\xe0p\x02f\xae\xe7\xf2J*\x1a\xd2\x08\x82\xa9\xe0#\x0e\xc8\xe2l~\x02\xce\xc5\x9c\x128\x1b\xc7\x83Y\x1c\xf1\xc7.(\xe0/\xd8\x81b\xe2\xd0\x1a\xf8\x18%&\xd2\x90\xbd\xf8%\xf6ogVHS\x0e=\xb6p\x96\xb02fp\xddJ\x82\xf9\xb0\xfe\xd1~\xdf\x125K\xcc\x1c\x11\"\xa84\xf7\x9c6`\x03@\xe0\xb4\x123\xdb\x1c=\x8c\xd7\x03\xb9]\x0d'\x0e%B\xc8Py\"GZ%\xed\xb3\xc3\xc1t\xe1'\xcf\xe3\x19\x7f\x969[\xae\xcb\x9e\xee\xb3\x07\x0f\xb6\x1f\xed\x82\xc5\x12{\xb2\xcf\x1e\xec\xee\x0c\x1fA\xf9Cp:9\xee\xf7\xa3\x89\xb4g0\xc0y(\xedG\x0e\xad <+Ax&A\xd8\xef\x9f\xd9\x81v\xd6\x82\x8e\x1a:\x89=\xf0\xd4D\xb8\x02z\xbe\xa3\xad\x9d\x1a\x00\x9dS\x97^P\xe40%4\x15o\xd7\x1d_H~\x00\xbb2\xab\xc8\xee<\xb6,/\x89B\x8c\x90\xa2\xe6\x0d\xf6\xf5\x9a\x96\xe2\xd1\x8e\xd4R\\.O\xe2\x10U\x12\x8f\xee\xdf\x82J\xa2v\xc2)\xf48\xb5-\x1e>[\x91\xc3\xb6\xe9vH\xbe\xcb\xdcb\xc8{(8J\xcd\xf9Bm\xf7`\xfb\xb2\x88\xd3\xcbx\x9a\xc9\xee\xd5\x8d:i\xf5\xa22o\xac\x9b>\xddD\x89\xa8\x97\xd9H\xc6\x95Q\x14,\xd9\x04\x953F~\x16\xbfV\xdaM(B\x95\xc0N\xbf\xf3O'\xb7\xc74\xea\xba\x0e\x8b\x8aC!_\xfdZL\xd8\xac\x90\x98v\xd54\xcc\xbbi.V\x84B\xc2d\xfa\xc2\xfa\xed\x90\x1az\xed\x1b\xe8U;\x97\x14X\xb5\x06\x1a%\x8e+=\xda6i\xa5\xeb\xeaf&\xe7`\x81\x9b\x80\xb3(\xbb\xef50}57\xbb \x92\xc0\xc5\x98c\xac?\x8c\xa1q-wF\xe3\xca)\xb4z\x98\x8f\xbb\\\x8f5\x89[\xbd\xb3\xfc\xd6:\xeb\xc3\xcdrP\x04\x01\xf4CG\xf3j!\xc5h\xda^\x0b\x01\x1a{\xa5\x15\xa1\xe0B\xa6ND[ \xce8\xfa\xa2\x0c\xe2\xe8\xf8x\xc4r\xf0/\x9aQ\xe6|\xc7\x91\xbf\xe4e\x993\xa7n\x02\xfd\xa1*\x1f\x99:q\xfd\x93\xf38\x11\xd5\x9b\xb1L\x0ez\x86\x8a0\xf87\xc2\x7f\xfb,v\n\x8anHE*\xbf\xdf\xf3\xcb\xcf\xbb|\xccb:\x0e\x8b/cA\xc4R`jgv!\xfel\x9cM\xd0\xd6\xb9\xd4\xdc4vm\xe1\xa7/$\x96(X&\xa8\x06\xd1r\xd0\xa2\xaf\xa7\xa5\x18\x01\xd3\x83\xf49\xc8\xaa\xde\xaeT\xc8\x97Zsf\x01\xd9\xaa\x99a6.\xf7\xb1z\x932Y5$\x7f\x1a\xd5\x97\x82\x1c\xd6\xeaB\x9a\xac\x08\xefF-\x19\x19\xa9VO\xc5N\xc2\x9a\xf2\x97Q7\xe5~b|\x12\x13eM\xfcaV\\\xf1i\xc0\xd3zMLUU\xf1\x17Q7\x0c2\xa3f\x18dE\xbd0\xc8\x8cZ\x1a\x0fP\xab\xab\xe5\xc8\x16\xb4\x14\xa2\x9d\x82S0\xda)r\x8av\x8a\x14\xa3\x9dW\xddS\xdfoT!\xeb\xc2_E\x95j+\xae\xd6\xb1\xd8\xde1\xfd\xcb]\xbe\xaa\xc8\xb7\x031\xdcQ\xf01\xa8\x91Q\xd6g=\xd70 \xad\xfc\x863\xc5\xaby\xd7\xaf\xa6\xb5\x98Z\xcc\x1c\xe5\xbc:\xcaXG&\xaf\x0d\xac\xea\xfa\x89\xfc\x0e-\x1e\x95\x8cw-B<8\xc8(0\xce\xd1;E\xf7\xaa@D\xe8\xd5\xb4\xe7)\x98\xf6\xb0B\xd0^!\xae8\xe3\xafp\xcct\x13UHPM\x94l\xf9M\x1cj\xe9\x02\xda\xdd\xb5=\x19\xa1\xdf3\x108P\x9c\x03\xba\xf6/\xf8\x06\xfa\x1c$'\xeb\xd6\x8dG[E\xfc\x1b\x1bx\xd9\x87D\x93\xab+\x91\xaf\xc7*\xc0\xb2o\x8b\xb2\xe0\xc6\xb4\x1e\xca\xe0\xce\x1dV-2\xae\x16\xaa\xce\xfcm\x0cYM\xa0a\x12\xa5>U]\xc6`K\x81\x12\x88.\xcb\xb8\x10\xc0V\x17\xb2\xe3\xae\x8d*Uk9\xee\x02x\xe2_,\x04\"gg\xb8}\xed\xa1\xd8\xdd\x06\xfdR\x0d\xb2\x12\xf2|\xbd\x01\xa6\x86CqX\x18\x88\xe6\xa6)\x88\xf2\xcf\xa1\x1d)\xb0o\xa2R\x0d&\xee\xedY\xcc\x9e\xe9^`\xd6\x1d*\xc1N7O\xef\x01\xb1XR\x9e\x91\xd7g\xe1\xaeQ-\xea\x9d8\x12\xd1\x91\xa4\xa0t\xe2\xf0\xc1)'.\xd3i\x01R\x07)\x071a\x06/\xfbP'\xe5\x10\x9d\\\xdenC\x15\xa0\xfa\x81%\xf0\x07\xdc9\x93\x01\x8f\xb0\x90\n~$\xca\xe0\xad)\x88\xd1\x0d\xfd\x94\x1f\xc8\xd0\xc1Dv;\x14k\x8d\x89)\x04 J\xdej\x1eb\xb5\xa0\xff\xbd\xff\xbeW\xcd\x97\x87\xa2\xfd\xf2\xd20\xc8e'\xeec\xb6\xb9\x99@D\x9f\xfe>\xeb\xfdw V\x00q4\x89 \xd9\xf77j\xb5\x19\xea\xf7%Ik\xbfB\xd8\x12\x95\xc3\xcb\xf0\xd6`\x82\xf2{A\x02\xb8\x18h\xac\xc2<\xe1@\xb3q\xbf\x9f48\xf61\xd0\xb5\xcb>Q\x8b'\x7f\xcb\x17\x18\x86\x86\n8\xae\x8b\xf8Z\x00mc\x1f ]i\x06*)3=\x82\xd3\xbc\xdd\xc5\x8beA7\x9f\xe6\x99f\xc2JwG=\x01\xd8\x8bZ\xb3}\xeb\"QOPD\xdf\xf2\x8b\x15\x13\x8c}\xb8\xba Fe\xaf%>-J\xda\x06\xc0\x14>>f1{\xc2|\xb6\xc9\x86\x8f\x9b\n3\xd9\xb0t\xa7\x07\"\"\xb9?\x04\xa0\xed\xe4\xe3x\xe2j\x0eW\xad\xdd+Z\x83.\x0e'\xa0C\xe9\xf7ckaS\x05\xa9\x1e\xf9\xad\x96>\xb1\x03\x15\x8eN~N\x81\x8fl\x97\xfe\x9a6*#\x9f\xb8M\x9eV\xd0\xc8jo)\xd0(@ao\x03\x1a\xe5\xcdh\x04\xd2\xc4\x8eh\x94\xba,\xc7\x10\x0e\xfd\xbe%\xf0PK`\x03@\x1ah\xe3\xeaJ\xbe\xec\xb3q\xe3DS+\xb3\x9ao\xcd\x9e\xc8\xab{\xe2;\xf2V\x9c\xc4\xd4M\xe9\xfc\xc3 \xcaI\xcfa\xd2c\x81\xf6h(\x1b@\xd5-i\xe4\x0e\x19\xa2\xa2\xc7\xf2\xf1P&~\xc4\xae\x17}\x1fN\xc6\x01\xe0\xb8\xff\xf8F\xfdv=\xd5\x18N\xe05\xf0WJ8\xc9p\x8b\xe6P\xd7\xf3\x8e!\xdd\xc74`\xb2\xdf\x8c\xc9\xb9\xb4/o\xc6\xf5\\\xe9\xc1\xad\xa5B\xd8\x0e:\xac\x05\xc9l\xf9\x02\xbb\xec\x8bAT\x81X\x80\xe3\xb4\x0b=\x0d4,\xedNO5\xee\xdf\x07t\xc8\xc7\x81FO\x9bIi\x88\x88\xe2\xa3\xa7&\xec\xebp2\x8e\x01\xe9\x82k\x10\xd6[\xe9Yq\x15\xb7\xe8\x8c\xa8\xaf\x0c\xf7c\x0f\x10Z\xe4U\x92\x1e\xb3\x0d(&\x15\xe0w\xee\xb0P\x117\x176\xdcp\xb0\x8aW\x8e\xeb\xe1\xa4\xc8_n\x87\x96\xd7X.\xda}\x80.\xeb\xa4\xab\x03\x16\xc9\xa7\xe8|\x89\xd9\xfc\x0f\xe8_7\xe0\xca\xaa\x9a\xff\xbd-y?\x11\xdd\xd2\x0e\xc0\xa9\x9dt\xec|\x93+\x89k1q\xfa\xb7\xd79\xca\x81\xc2\x9b;?\xff\x00\x84\x92;/\xfd\x97x\x0b\x91;;\xf7\xbf\xcf\xb3N\xc1\xf5o\xec\xdf\x8e\x1c\xac\xca:_\x13\xack\xf2\xc6u\"y\x1bl\xb1F.2\x0f,\xe1,fpU\xe6-.\xb9\xb4h\x1cwZuU&\xab\xcd\x7fh\x8642\xc1\x03W\x84\xbf\xfa}\xee~\x9c\xbdP\x93XA\x10)\xd8\xf87`\xa0x\x86\xaf\x12\xab\xa8\xf2\x9b\xa0\n\xb7Ct\x08~\xe5#\xd0\x9b\xdb<\x05\xd2B\x06\x1a\xd5#++j\xe3\xe3\x08x\x10%\x83\x1b\x1e#\xad\xbe\xaf\n\x89@\xc1:\xa1\xa142\x11\xbc\x95\x89h\xdc\xa6\xb3\xca6\xddr \xeb\xc434\xb2\x96-\xfd(\x97\xb7\xfc\x8c\xf5\x10\xd6\xba\xd2\xad\xc7\xa9\x02\x9c\xd2\x00i\x0b\xaf\xdcD\x8fY\xae\x81\xb3\xe0\xc0\xfd\xb2\xa7\xa9\xe4\xc0s\xc5\x81\x8b\xbcT\xe3\xc0surH;\x9c\x1c\x9aN\x0d\x96\x13\x03\x9c\x16R\xf8\xe8p\x02N>\xfa\xfd\xbc\x0b\xdd\xbc\xce(\\O}\x06\xce\x11\x99\xc7\x02\xb0/\x10hHxN\xee@\x0b;a8\x1es\x91\xcb\xc7\xc1\n\xb2\x14\x82\x18 \x93\xc7\xbbk\xe3<\x9e\xa1B8C\xb5\xb3\xa6)B$W\xc1\xbf\xe5)\x0d\x91\xdf_\x03\xf9eo6\x1a{\xd3rd\xc8\xf4\xcf\xe7&#\x9b\x13,r^e\x91\xd3*\x8b\x9c\x16,r^\xfe\"Xd\xb3ekO%G,f\xaa#xn\xb0e\xd9 9\xbb\xe6\xf2\xf2t\"nv\xf5\x07\xf4\xaf[\xda\x03m\xbe\xc1\xe9\xcb3;C\xfa\x82\x9b\xe9K\\\x1aY\x1a\x17_R\xdb\xcd\xb7j\xb1\xf5\\\x84[6m\x88\x16!\xe3\x18\xb4\xdcx\x97B\xd3\xb9\xc7V\x1e\xd8WN\xa5\x81\xa21\x1f\x8b\xa6\xcc3\xd0n(\xc7sf\xfe\x12\xf2\x95\x13\xc6*F\x97\xf5\xc0$\xbc\x99\x97S\x9cF\xe9_\x98\xc4\xad\x04|C\xa9\xa8\x0ep\xaf\xd4*\xa9\xa7\x9d\xad0\xe5\xb1/A3\xbb\xb4`\x9f\xb7<\xb69\x14[\xc3\x99\xbc}2/\x9c\"\xac\xc4\x9b\xa9s\xead\xb1\x1c8\x1a\x00\xd9Y\x83\xe1\xf2\x87\x1a\xf8\xe2H\xb9\xe9m\x87]\xe3\xf5v\xf2\x02%+\xcc\xdd4\x17\x05$\xcct\xc3\xbd}6\x9e\x81\xcb\x8aH\x19\xf1!u\x8f\\\xd4\xc1\x01h \xeeM= nH`\x91\x89tb%}L@\xa8|e\x93\xdfbD\xa3\x1e\xe0?\xect\x94\xf2\x15\xbb\x901\x0d`\xbf^\xa0\xf7\x8d\xd2%2\xac-\xf4\x07\x1b\xe0~%\xbd\x19'\x10M!\x8e2~\x91A,\xa6\xe44u\x0b\xfb\xcd\x04\xe3G\xc4\x88)A\x89BbNlq\xa2[I#\x86\xfb\x96k\xab\xcd\x0d\xc7\x19^\x8c\x94F\xe1\xd6E\x11\x89\xa1\xf3jd-\xe9\xffC5\xcf\xb8\x1da\x14\xff\x8c,\x05\x1f\x043\xbb\xe4O\xfa\xc2d\x8d\xf1\xfc\x01\x03q\xbb\x13\xadaOf\xe3\xb4t\xdb\x8b?\xe2R'ct>\x03W\x9a\xa9t\x80\xc8\x0e\x98\xd2\xec:\xe0P\xdcY\xa0\xe0\xdc\xde \x86\xf6lbnG\xb8\xe2\x1b\x8bbh\xe7\x06Q_\x89Ri\x89R\xa9G\xaf\xaeXF6\x88\x8b;\xc9nCI\x14\xc3\xd5/\xc7C\xf5n\xd7\x90\xf5Gk\x8c\xb7\xdc\xb4gr\\\xe8)\xdc\xc2\xb5\xa1\x087wBy\x9b\xd9\xf4\xfeB\x1d\xb6q+\xa6\xa8\x00\x97\xbc\xb4\x94\xb3\xca\xae.U\xb3\x1c\xe2\x03NOp\xc9E\xb8\x00}\xcd\x05\xf9\xb2\xc5\xfd\xcc\x07OR\xd9\xb4\x03\x95\x85\x95#I\xe1\x1adr0=\xa9Q\xca\xc1\xf4\xc4-\x0d\xa0\xc5\xcf\x02\xd7\xf1G4\x08\xc4\x96)\x9d\xef\x001e\xa3\x12\xa9\x89\xeb\xe38\x8a\xc2\x9bu\xfbvA\xb0\xeb\x14\xb1\x9c\x01\xb1\xbc\xba\x02BY\xec\x9c\x0b\xdd\xabv\x95\x84b\xa2FEU$\x19 \x98 n\xb1\xf5^\xb9\xbcn\xa7r\xa2\x0bD\xff5>\xa6\xe8\x0f4\xaa\xba\x13\x0b\x8cl_\x1d\x92\xce\xc8\x9e\xf3\xa2\xe7&\xea\x1ac)~\xde\n3k2\xad\xc8\xcc\xee\x191\x18\x03\x99^\xbf\xc4\xed\xcb\xf4\xba7]\x15K\x8c\x0epc2\xb9\x1dn\x0c\xc5N/[p\xf0\xd8/\xfe\x8fd$d\xb8X\x1fG\\\xfd/\xd2\xdd:[\xabB\x19val\xb5\x0b7\xc6\xac\xc4M\x99s\xea\xa6\x11S\xa62[\xca\xec_]\x0e\xac\x96)\x14T\x1c\xfc\xa3\n\xf2\xb3\x01\x91\x96\xe8k!w{\xac\x0f\xde\x1eX\x9f\xf5\xee*3\xcf3?\x0cfL\x0dv\x19\xcf\xb8q\xf1\x8d\"I \xee\xeb\xb65\x11Z\x02\xf4\xc2\xb0r\xc7/ES1:X\xf5\xa5\xc9\x14\xb1Q%\xf4\xe14\xc2\x8aC\x8f\xcde\x13f\x19\xd1\x95i\xabS&\xbd4`\xee\x98\xb2\xb7Q\x8f\x18BH\x04\x9c\xfb\x12yj\xce\xb8\xf8=b\x9f\xf1\x8cO3>cy\x14'3\x9e\xf0\x19\x13\x88x%\xb0\x8e\xdd)\"sC\xf8\x9e\\t\xcec\xe7\x8b`\xba`A\xc4\x002K\xff=O\x19F\x1fc3hMpC\xf1\x9c\xa5\xf9t\xca\xd3\xf4\xde\xdc\x0f\xc2<\xe1,X\xae\xe24\x0dNB\xce\x9c\xf3\x05\x8fD\x13wu\xec\xbe\x0b\x13\xeb\x1eE\xcf\xe3(\x0df\x80N\x04m3*?\x1c7\x1f\x1b\xc6 \x15\xbd\xc8\x02\x89\xb5N\x0e\x84'T\x9dc\xac\xf0\x96:\xbbh9S$k\x9d)H\x13\x97\x8fz\x8a\xa8\x8b\xa6\xa5\x90\xe0#\xe9\x89\x9b\x14\xb7JOY\x06\x90k\x06[\x86\xe7\xe3\xfa\xc5\xfc\xea\xe5\xf3\x9b\x03\x88p}\xa5NYm\x91\x96\xad\x86*\xe8\xf9\xfdV\xe7Q\x9c\xca\xd6\xbf\xbd\xd1\xe8\xa2\x1f\xaf\xe28\xe5\x15\x19p\xe8\xa6]\xfc\xd3\xa2\x895H\xad\xcd\x89\xa3\x0eC\xaf\xfd4\xe5\xb3B\x10\xa3\x05\x84\xc6K4\xc1\x9c\xcf\xea\xf1\x8cn\x17~{\x86JG\xcc\xf3\xbd\xf1Qt\x94\x1c\xe5\xdb[\xdb\x0f\xe1\xef\xa3\xc9\xbd\xd3u\xc1\xac\xd0_\xcc:\x89\xfb\x85\xc2\xe2)\x1bnm1\xe5\x80.\x93\x0eX\xb7<\xf6\xe8\x11\x1c\x13\xff\xdb\xef\xfc^O\xde\xff\xcf\xd4=iAq\x9b\x97\x8a\xfc\xcao\xbc}\xf5r\xa0\xc0y\xe9pW6?\x04\xc5Fm\x19\xdd.p\xff_\x83\x9cJ\xcf1~\x19G\x9b\xd3\x98'S<\xc6e\xb1DD\x17o\xf2N>\xea\x85\x8d\xdb\x88\x11o\xd3&\x96\xdf\x0b\x06\xb3 ]\xc5\xa6L\x85p\xa9)\xfaV\xb3\x81\x08 6\xa5\xa2\x9dg\xa7]W\xe0\xcc\x03\xa7B\x1e\xab\xf93\x05\x89#\xf8\xe4AY\x0b\xdbg+\xc5\x96.@\x89P,\xd0\xd4\xb2@\xd3\xe2\xc7\x01\xeb\xe1za#\x06\xbea\ny#\xeb\x8b\xcf\x17\x1d%\xf1u\x86\x0e\xd6R\x9e\xbd\x0b\x96<\xce\xb3\xf6sO!\x00\x8aH\xe1\n\xb7\xe9\xbb\xc4\xa7\x06y\x94\xf0\xb9\x18@\xf9\xcb\x81\x88\xa7\xe0UNt\xe6\xce\x1d\xd6\x8b\xf8E\xf6.\x98\xbe\xef\x81u\x90J\x86\x05\xa4\xba)\x12E\xc5\xf5\xfb/\x8f,\xcb\xbasa\xd9\xff3[\xff\x97\x95\xfe/\xb5\xfe\xb7hpj\xf3@.\xfb\xca\xd8f\x18\xef\xbf\xd0\x98\x8a\xb3\x15B\xc8\x80\x0c\xa7 \xa3\xd7^\x92A\x15\x05.\xf1\xcf\xb9\xd8XE\xb3g\x18\x1ct\x7f\x7f_\xcf\xb9\xba\x92Q\xdb\xcb4\xb1m\x0fvvv\xd8\x88M\x9d\xb9\x83\xa6\xe8z>\x1aGmI\xcc^\xb2}\xf6\xf3\x0f\xd2\xaf\xd6\x90m\xb23\x97}\x82\xd2M%\xaa\xa8\x03\x07t\xde9\x05\"\x18\xec\xd5\x15\x83\x01\xb2}\x0dK<\x16\xb4O\xbbE\xda!\x1e\x0d\xaa\xfb\x1aT\x1d\x0d\x84\x9e\xae\xb0\xabl\xa1h\xbb\xe6\xc4\xae\x8b\nA\x08\xe8W\xb1\xb3\x91\xc6\x03\xd2b\xae\xb2\x8c}'@Hu\x12O\x84\x1e\x0b5 \x05\xfc\xa4$\x9c\xa6\xdf\xa7\xea\x1eT\x839\xbd\x0d\xcd\xdaP\x96\xd5\xd1\x96\xdc\x8b\xd0\\I \x01bp\xec,\xbb4\\Ctn`\xb9\xe5c\x88q\xc6\xf8\x8b\xdf\xb7\xb2\x05\x1a\xbe\x98\xd5\x11\xf3\xd1\xda\\\xb3\xe0\xca\xa4\x01\x87\xd8\x0e\x9e\xb2\xb8\xc9\xb7\x08\xbf\x98r>K\xd9\xd2\xbf\x08\x96\xf9\x92\x15z\x8b\x0c\xa1\xf2}9\x1b\xd9\x1e\xde\xdf\xbb\xffpg\xf7\xfe\xde\xf5\xdbk\x07\xe76\xad\x17\xdd\xd5\xafx\x04bG\xee\xb8\x1d\xcb8R\xc4^\x9c\x14{q.\xdd\xc0Kk\xf258\xe5\xe6\x8d\xd8G\x13\x9bf\xc4\xd7\xdd\xfb\x02\x8b0X\x04\x99\xeaZ\xbb\xc1\xc0i\xf9)b\x0b\x12\xa3W^\x11\x0cr\x00\x99\xd2\x1d\xc2m K\xcb\xe46(\x9f\x83\xf6xW\xeb\xae\xb1\xb32\x044q\xf3\x01\xc2F\x9a\xc9y)\xff23\xd3\xa6\xcc\x10\xda*R\x1f\xed\x15\xa9\xc3\xedm\xb8\x0f\np\x02\x18 \n\x8e]\xae&\x02\xdcz\xff\xf7\x1f\xfc~\xafq\x1d\x9av\xef\x84\x1d\x85\x8e\xb1 \x82\xc178j{\x15D\x96a>\xabK\xb5\xea\xbe;\xd1\x05\x87\x1f\xdc\xe2\xc2N\xe4\xec\x0co\xe2\xdb\x93\xf4]/\x1a\xee\x1d\x1f\xf3\xf4\xcbx\x96\x87\xbcW\xa7\xda2T\x90\x1eJ\xc1EY\x0f\xc4\xd3k\xb2UQF\x00\x89*\xec\xb1X\xbd\x96\x1b\xd0\x07\x93\xdd\x08\x1cq\xb8}Pw\xf3\x1b\xcb\xac\xfb\xdb\x10\x95\xb3\xc8S\x1d\xc0\x90cd\x1f8\x12\x99r\x9c\xd2\xef+\xb5Ca\x9c\xc0\xba\x9f\xbe\xf5\x88\xe9/\xc7\x04\xa8}\x87&\x8b\xd3x\xb9\x8a#A\x0e)8\xa8\xe7\xd9j5b\x97\xc5\x0cZ\xcb\xf9y\xb6\x88\x93\xe0\x1b_\xf4\xe4u\xbc\xcaW#v\xd2\xbd\x1a\xff4\x8bF\xecx\x8d\n\xafV<\x81\x8fA\xcd\xf3n5\xd3\x11;l/\xf9,\xcf\x16/2\xbe\x1c\xb1\x8b\xf6\xc2\xa2\xd9C4{{\xdb^:\x16\xc5\xb7G\xecY{Q\x7f\x15\xfc&\xbf\x14}\x19\xb1\xe7\xed\xc5O\xfc4\x98b\xe9\xf7\xed\xa5\xe5\x91\xe4U{\xc908\xe3ox\xba\x8a\xa3\x94\x8f\xd8\xeb\xf6\nA4\x8fG\xec\x8f\xb4\x17|\x11\xcd\xe3\xe7\x18\xd8\x9d'#\xc6y{\x95\xdf\xc8\x97\xabw\xf1k_\x8c2\xebP>\x8e\xc2 \xe2?\xf2\xc3`\xe6gq\xf2\xa9?;\xe5#\xf6\xaeCE\x85]\xe9\x88}\xb9F\xf1\x11\xfbi{\xe9\x02u\xdf\xe6\xcb\xa5\x9f\\\x8e\xd8\xcb\xf5+} A1G\xec\xcd\xfaU\x11~\x9f\xb5W\\\x04\xa7\x8b08]d\x82\xe1\x18\xb1\x9f\xb5\xd7H$\xa6\xa4#\xf6y\xf7\xd2#\xf6M\xf7\xc2\x9f\xc6\xb3\xcb\x11\xfb\xb4\xbd\xc2\xcaO\xfc%\xcfx\x92\x8e\xd8\x8f\xd6(\xfe&>\x1f\xb1\xdfh\xaf\xc0/\xf84\xcf\xf8\x88\xfdV{\xd9\x05\xf7g\xd0\x91\xdfl/\x0bF\xb4\xe9\x88\xfdZ{Q\xb8\xc5\x17e\x82y\x1d\xb1\x1f\xb6\x97\x8f\xcfxr\x16\xf0\xf3\x11\xfb\xed\xf6\xc2\xf38\xce\xc4\xc2\x8c:,\xb4\xcf\x830\xe3\x89\xb6\x9a\x93\x0e\x95^\x0b\x88\xe3t\xc6\x1d\x8aO\xf3$\x1c\xb1\xa0C\xc9t\xba\xe0K\x81\x83~\x87\xc2o\xb1\xb0\xd6\xf7\xbcC\xade<\xe3\xe1\xe1\x85\xbf\\\x85|\xc4\xc2\x0e5\xbe\x145~\x9c\xf8\xab\x95\xf8\xc6\xb4k\x8d\xe7q\x18\xfa+\xb1F\xd2\xaeUFl\xde\xb5h:b\xab\x0ee\x0f\xa3|)\x9b\x9eu(\x8e\x8c\x8e\xac\xb0\xe8P\x01\xcc6e\xf9\xb3\x0e\xe5\x0bg\xf7\xb2\xce\xb2S\x1dd\xb8F\xec\xb4C\xe9w\xc9\xe5\x8b\xecU\x9e}\x9ag\x99 \xeb\x97\x1d\xea|\xe9'\xefg\xf1y4b\x17\x1dJ\x7f\xea\xa7\xfc\x0b\xff2\xce\xb3\x11{\xdb\xa1\xfc\x8fx\x92\n\xde*\xf1O\x97>\xae\xb7\x11;\xe9^\xf1m\xe6/W#v\xdc\xa1F\xb1a\x1c^d#\xf6\xc5z\x15\x80|~\xd5^\xe7\xb5\xa2\xb7\xf0\x91__\xa3\xc2\x8bh\x1a\xe63~\xb8\\\x89\xd9\xfcq{\xcd\xa2{\x10i\xe4\xc5\x1a\x154\xaap\xda^\xed3\xceW_\x04\xd1\xfb\x11;\xef\x00e\xc1\xff|%H\xda\x1f\x1d\xc8\xd7\xe6\xb2\x02ap\xeb\xc6\n\xeaw\x03i;;}\x96\xa6\\p\xf8\x87E\x87\xc8\xd2\x9d\xe4\xd8\xb4\x9frV;K<\xef\xa4F\x88:\xb5\xf5\x9eh\x8b\xd4\x1c\x8dg\x05\xbc\xd9\xbc|M\xcbW\xbf|\x0d\xcaW\xeal\x8az@\xf9\x8a\x87\xbb\xb0L\x88<6-\x7f\xad\xca\xd7E\xf9zV\xbe.\xd5k\xe3\x89\xf7\x15\x87\xe0\x03\x8f\xa8#/\xe6m\xef\x1a\x11\x8e\x8a\xbc\x9d\xedz\x9e_\xe4\xdd\xdf3\xa2\xe5\x14y\x0f\xef\x1b\xf1\x80\xca<\xe3\xf8\x1d\x96yF_\xa6E\xde\xa3\x9dz\xde\xbc\xcc3\xfa\xb2*\xf3\x1e\xd6\xf3fe\x9e\x01\x97\x85\xca\xbb\xbfe|\xef\xac\xcc3\xda\\\x16y\xc3\xadz\xde\xa9\xca{\xb4c\x8c\xef\xb2\xcc3\xc6pR\xe6\x19\xdf;.\xf3\x8c1\x9c\x17y\xf7\x8d\xbe\x1c\x96y\xc3z\xdeE\x99g\xcc\xfb\xdb2\xcf\x80\xcb\xf32\xcf\x98\xf7\xf7e\x9e1\xef\xcf\xca<\x03.\xaf\xca\xdaq\x07\xdc\xebv\x11G\xab6\xcd5\xd9\x1amW\xc7\xceQzs\xa8\xc5\xe8=}\x10\xa0\xad\x1a\x04D\x10\xa0\xadj3b\x1a5w\xc9\x807\xbfU5\xb2\xf5x\xfd]ugDN48\x81\x1eD\x837\xf0\x03tX7#\xd7\x12\x8e\xa3\x00X)\x8d\xb3\xdb\x87.>\xaa\xdd\x02\xb2\xaaM\xf1\xc1\xaf\xf3\x14Y\x11\x8f\x84)\xc3\xf6\xd4j\x82\x10\xaf\xb4F\xf5\x98\x06z\xc2\xff\x8c\xf9H\xf5-\\j6\xaf\xbe&\x13\xc9\xd0\x19\x14&\xc5\x1b\xd3\xd1\x0c\xc6\xc2\x82D\xff\xda\xaalar\xad\xaf\xb54\xe7\x05ab\x9b\xe7\xac5\xd6\x1a\xec\xe4Y\xe5\xae\x1d\xb1s\xdd\xc7\x01n\x96\x06\xb8\xa9\x0c\x106]\xb7_$\xa9\x86;\xb8\xbfg0\x14.\xe7\xac\xa9\xcc\xb93D|\xc1\x83\x0c\x83\x9b\xd1\x1b\x98\xa3!G\xe2\xac\xf3\x00x\xcf!\x85\x97\xb0|\x0e\xcb^\xcf\x05\x8c\xea\xbe\xec\xc3\n&p\xed\xac\xa7\xcbY\x1f\x96\x8c\x8c\xb0\xaf\x86\x10+\xe6^\x99\xf4-\x0e\xc6\xb5p\xf7\xc7A<\x87\x0e:f,\x06!\xbdM\x1d\xd7E\x0f\n\xcd\x10\x88\xb3@\x17\xadi4\xc0\xab\xe8>\xb0\x01q\x8b)Q\xa4\x19\x944b\x924}\x9f5W\xc9%\xa6\xe0\xfd7!\x1b\xd5\x8d\xcd\xc9\xc6\xb3\x9d/<\xc10{6;\xc9\xe3\xc1B\xd4\x89\x9c!\xab\xc8\xa6NyT\xeb\x07\x12\xef\xd0\x19\xed\xed!)\x15\x14\xf5\xd9\xa6 \xac[\xe2\xef\x9e\xf8\xfbTKh?p\xf3\xc46]Y\xc0\x95\x87\xcd\xec\xcb0\xbf\xb5\x88i\xbc\xcb\x9a\x83A\xa0'\xd0\x92$VI\xe8BO\xb8\xd7\x82u\xa9\x14\xcf\xf9zU\x87r)\x1a\xa9\x96_\xf3N\xb7\xab\xe5+A\xe7\xab\xe5KQ\xbe\xe3\x0e\x12ZQ\xcb\xde Z\xbf\xe3:U^_\xf4^\x9d\xda\xb9h\xad*Y\xde\x88\xf2*;u\x88\xb1ws+\xb3\xf2\xc3[\x1eI;\x8e<\x9aT\x82q\x9e\xe0#\xb1\xee\xe5G\xaf\x18\x05\x17/!\x01\xf7\x9c\xdb*w_1\x0f\xa9(b\x0f`\x1fw\xc9\xc5`Q~p\xcc\xd8\x97\x8e\xdd\x04T\xef\xcf\x0e\x8a\xdd\xc9\xc9\x00\xa3\x8f]S\xa7\x8aG\xea\x87QC\xa7\x9cZ\x17\xed\xa6\xa6\xa13z\xe6*\xb9\xcbg\xad\xac\xfd\xe4\x87:W}\xb82\x1b\xc3\x1b\xa2\xe1\x08\xc2\xe5\xbcb\xf4]{>\x8a\xb5\xf8H\xff\xe0\x11\xd3\x0e\xafi\xc8M\xdb(w;\xbbr\xd5\x94\xa7\x9a\xa0\xf7\xe6 \xc8\x9f\xab\xe8\xf7\xa1q\xce\xd7\xf5\x8c\xa5P\xcc\xa3\xe3t\xd6\x0e\x8fi\xa9\x8b\xea\x84G\x11\x1f\xb6p\xa2)\x0f\xa7<\x98\xd3\xa6`\x85 M\xf0\xe9\xe0\\\xebM\x0bH\x83\xcfCt\xa7\xd4/\xc0\xb5\x08xH\x07\xe7\x9e\xbe\xc6]\xb3\xc5-\xa8\xd2#O\x18z~\xcd\xcd.\xd1\xd0\x91\x0e\xce\x93RZ\x8c\xbcE\xa37\xb9\xfc\x08c\xd8\x82|F\x18\x817\xba\xc2\x98\xa5\x0b\xe2[nq\xe4'\x11\xf1.ps4W\x0fDu\x86p\xcd\xb5=\xac=\x8fV\xc4oH\xede\xde\xc1\xea'c\xf2\x0c\x1at:\x9b\x02v\xe8\x14\xfb\x07\xda\xb5\xe2\xaf}tj\x15\x0e\xb2\xac>\x97\x83\xc6\xe0\xa0\xb9\xbd7\xa0aJcG\xf0\x1f\x19\xba\xbap\xdfPo@o\xfd\xd4\x11\xeed\x9d\xa1\xcb\xeb\xb0\xdd\xa6\xd8\xe2\x07\xce\xa1\xd3\x15\xfbn\xc3\xbb$~\x08\xde\x9d\x17\xd0.\x0fI\xcd\xd6\xf1\x83\x13rk\xd8<1N\"\x9cA\x13\x87\x9f\xd8\x81\x13\x9b\xa9\x01T\xf7e#Xp\xfc\x1d\"\xe6'&\x11\xe8\xdc.\xd5\x8f\xde\x95\x07\x9f\xd4\xf8\x8d\xc8\xb7\x08\xaf\xec\x89 O\xec\xa08uR\x94D\xad#\xff\xd8n\xe4\xfch\xd2\x0f\x9e{\x15\x0e\xce\x8d\x01=\xc3bR(`\x8b9\x19\x8e_\xfb\xb1\x8b:q\x19\x98\x99o\xac\xe2\xf0\x03\x8f\x84\x8f1\x8c\x98`\x1e\xe6\xe0\xa7 \x0d\x16\xb60\xba\x08\xe7\x0f\xe8&=i\xcb<\x81\"Z7\x9f\x85\xe77c\x08\x9b9\x93\xf3\xf9X\xcd\xf1\xaf\xfb\x18\xb8r\xf9i\xc7\xb1\xa4\xf9E@\xe0|\x14\x01\x9e\xd9\xf7#\xf1\xfd[\xb2\x01Gy\xbe\x8c/?\xf9]v\xc6\xe4\xe8\x1fr\xf4\x1f1\xfc\x0e\xfb\xd01\x8d\xb7\xdd8\xc5\xf8\xec\x13i\xb1~\x0dk\xf7\xd98\x7f\x8deQy\xbb*\xfe\x11\xb8\xd7O\xac\x1b\xf6RD.>\xe9\x83\xdc\x14\xdd>t\xcf/\xbbn\x1f\xe6\xdc\xd5Jx\xcc\\\xfaU\x17;=\xfaP\x07\xd1\x84\xb7\x9bc\x8a\xfcY!.V\xa0\x1f\x15=\xd7\xe0\xa1\xa8\xbb\xfa\xfc\x107O\x925Ppv\xfc\x97z\xf2\xf2\x92\x84\x8b/\xfc\xc7\\\xf2~\xf8\xeb\xbaV\xf9R\xad\xcc\x19\xc5b@nq\xa5&\xd4\x1d\xbb\xaes\xa2\xc4\x8c\xaa\x8d\x8f\x86\xe3fQP\x8ar\x07\xceJ\xae\x9ak\xd3\x15FWe\x9dtGI\xce\xca\xcey\xb67\x98\x80e\xd4\\\xe3\xd9\xc9jq\xe9\x07\xd9\x18v\x16\x8b\x9f\xe3\nL\xbc\"\x97\x8f\x841k\x80\x7f\xad>K\xd8\xb3S1\x8f\xceH\x0dTS^\xe7\xf2>Bti\xd2\xdc\xcb\xebH\xd6\x11\xaa\x10\xe48\xcd8$\x82\xe8\x18\x89\xb9\xd4\xc1\x84\xf4\xa6\xea\xb8\x89\xdd\x14\xe9\x07\xa8\x98\xa18Q0\x04\xecG\xbc\xaf\x1a\xb9\xf9#\xc6\xa4\xe0\x93#\xf1D\xc5\xe6\x8b\xc1\x82\xad\xb2\x15\xa5\x8b\x08\x0f\xfb\xfb\x80>r\xfc+a\x1c4\xbd\xe1\xbe[c\x0c-R\x9a\xe4\xc2Y\x0c~\x82\x1e,\x06\xbf\xe1\xffx\xbfr\\E\xc8\x0f\x92):)\xbd\x1c:\xcf\xf6\\G%\x15B\xbb\xba\xeb:j\x11\xa9*Xy\xbf'\xa5\x1e\x15rS\x9d\x1a\x83N\xd3\x1aK\xfe\xe8@G\x98@\xd1<1\xf4\x14\x10w\x1d\x1e\x8aD\x8bg50\x15\xc3u2\x06\xe0\xce\xb1k\x1d5.w\xd3\xb0\xc5\xa8n\x9cL\xee\x8d|\xd9Nro_+\x9aV \xe9\x1c\xb3\x86\x1ao\xc8N\x06x\x84\xbb\x03\xdc@\xce\x95\x8a\x15\xb6i\x91 h\x9a\x92\xca\xa9\xea\x0f=N\xb4R\x83\xd2\x92\xbb\xf2Z\xb57\x91\xa8b\xd6\xd8\xf8\xed\x05UIFm\xb9 A4iI\x90\x0f2\x96\x8b\x99\xc5\xbaf\xa4\x9c\x9d\"\xed\xd5\xac\x18|\x01\xf6\xc1\xef\xf5\x9a\x19\xc0\xc4\x90\xb6C\xfd\x88\xec\xc9\x9c\x02\xb2\xbd\xd9\xeb\xf5\x0be\x19\xc3\x88\x96\xa9\x0e\xd4O\x82\x9cE\x92'q\xc8D\x12\x89\x8d\x0d\x94/b'lb\n\x8d23\x084W\x9a\xd2\xd6\xd3eG\x90.\xc6\x03\x1e}\xc2\xf1\x07\xd7m\xcf\x95\x98x\x8d{\xf7[!\xba\x19\x8b\xa3\x07`\xf1\xc3q\xab\xbe\xea\xc5\xb6\x03\x8b2O#\xdd\x82}\x05\xa2\x81\x08\xc0\x1b\xd9V@!A\xf8\xf5KmMtgu\\\xdcuc\x94\xc1\xf2P\x93\x1b\x1f\xb9\xce4\x8f\\P\x87\x9cG\x12\n\xc3\xb1~%e\xb8\xa1 P\x8c%L\x85\x9aT\x03\x12lg\xd4\xa2\x9dt:\x9c\xa9m\xf5!\xd5gd\xc7\x167[\xb6\xc8Z\x19i\xda\x15\xe5\x86\xd6\xb7\x1e\xd4:\xfb\x7f\xd3\xd8\x87xj\xe8i\xfb\x0bzb\xffo5\xf4'\xea\x180N\xe9B\xc4=\xc66\x94SQ\x8b\x91f\xbb\xb1\xea\x8d\\d\xb9\x1d\xc5\x14\x84\x83\xf7Y\x8a.1\xc7\x17 \x8d\xaf)\x06v\x88\x07\xbf\xd1\x8b_\xfc\xb4\xfa\xac\xfc>O#\xad\xbd\xde\xcc\xf0\x91\xf6z3\xa9^o\x86\xce\xb3-\xd7!M\xd7\xf9ZNX\x1ay\xb5\xca+\x19\xf7ui\x13\xf0> \xa5\x00\x94\xde\x88\x90*\xa4\x06\x16o\x00\x9e\x035&\x98\xe6J\xeeE\xd8G\xbe\x9c\xa2\xdd\xc5\x97(\x88\"M\xd2\x0cPEScl4\xc8\xa3\xd5cl\x1c$\x04\xa9\")\xb6\x8d>V/)\xb5\"\x00\xc2\xaf|\xca\xf8\\\x9e\xaf\xbf\x00'qy\"D\xdb\x9a\x90\x81\x0cv\xe9\x04\xd6\x06\xf3D\x1e\x1d\x9fcgH\xae\xfd%I\xa5n<\xff9HR\x12\xceI\x10\x85\x1a\xad\x05\xc6\x7fC\x83\x1ey\xda\x98\x00z-\xf2\x7f\xe5\x15\x1d\x83\x1a\xaeq\x8a\xf2\xe3\x89\xc8\xa5\xadu)|\xce\xad\xda\x8frU\x95.M\xb5\x06\x92\xfa\xdd\xb1\xe0\\\x94\xb6\x8b5\xec\xc3<\xf2x\x94\x1c\x1e\xff\xeb\x94\xde\xa6G\xd1\x9c:]\x9d\x8e\x92\x8b~\x81;\x888\xe5p\xd6\xba\xb0Q\xec\xe3]\x92\x98x)\x8d_\x93\x94\x8c\xaby2@J|m\x00\xb1\x1e\xccI\x8a\xb7\xbel*\x8b\x06\xfc\xd6\x12\xe1\xbc\x0f\xedf\xbb\x16A\x08\xf5\xdd/\xc21\xc4\x06~\x0cS\xb2\xf2\x9d\xd4\xb4D\x80\xfb\x8e\xc7\xb2b\xef\xc1>\x86\xcf\xa5<\xfe\x0c\xcf\x0e\x1a\xa2\x9e\x1c\x1f\x19\xe6\xd4\xea\xdch2\xbd2\x9c&5\x93J_o\xa8\xc5\xc5\xef\x9a!\x8fLA\xae\xda\x804\xd0\xfe\xdaN\x95,\xb0>\xc1,\x8f\xa8\x15\xf1\x88Zq-D!W\x07\xe1ej\xcaD\x06\x8cf\xbapR\x0c\x93\xaaa\xc0\xa2p\xe1/\xb3\x98\\p#\xdb\xfa\x12/i\xda\"\x0c\xa0\xa2\x0djB\xcd\x07\x9e\xff\x8d\xeb\xa87\xa13\xaccm\xd5\x89\xc1\xf2*\xcbm\xa2\x8aNc'\x1e|\x80\x1e\xc4\x83\x8f\x16i^\xa4\xf7j+\xe8\x10\xa1\x9e\x8b$G\xc1\xf6\x82/\x7f\x18\xa4\x9c\xd0\x84\x1e\x9a\xa0c5E]\x08\x93blF\x93\x17\xf1\x1aOH\xe0\xb8U\x11\xd6v H\xe5\xa8\xb6\x82\xee\x1a\x8f1\x99}\xf8\xee\xe3\x12\x91\xd3\x1e4,\xb3\x96\xe8;\"o\xddt\xcf\xcfM\xf7\xca\xe8xbA\xc44n\x8d\x84\x11#\x11\x987\xda\x88n\xbe\xd6\x92A*\x00\xc3\x01E\x93\"\xa1u\x1d\x17r\xb0\xeb\x84(\x9f6k\x04\xdb\x00T\x82\xce\xba\xde&b\xf4\xd9A\xa32\x99_\xc2\xe9*\x15\xbb5+J\x0c\x01?\x88\xe9\x92\x864f\x0c\xd8\xc7,L\xfd\x15\n\xdd\xc2\xa9gIS\xc5\x95\xe7\x88\xach\xe2\xc4\xee\xc0\x0f\xe7\xf4\xf6x\xc1\xda\xaf\xbe\xdcu\xe1eM\xe3\xe5\x83\x08c\xa7\xeb\xae\x809&{\xd1\x0d\xa8\xe0c\xcb\xd6\xb7{\xec\xd4\xc2\xb4\xec\xfa\xb7\x94\xc8\xf9\xc8;\xd5yx\x11}S\xf7~\xb1p\xc6\xeb%\xeb`\x8b\xf7\xb5\xeb\xae\xb6\xa5\x18u\xd6\xeel\xf4;\x0c\n\xa37tU\xaf\xf8`\xd5\xb1\x9c/v\xd95\xab^\xcb7\x91\xdd\x93\xbb\xd5E\x14\xc0D~\x19\xd7\xccVA\x9c5\xfe\xc0O9@\xd0\xbe\xf1?\xffS\xfe\xec\xd6\xeb\xa3\x8e\x92\x87}}[~\xa9T\xa6y3\xc17e\xb0\xc3S\xb2\x14\xef)%\x9a\xb7\xf0\x92*BX\x95\xce\x94zMOX\xf7\x99\x91\x15\x04\xc2z.\x04\xc8\xf0\xa9\xa8\xe9\xb9\xad8w\xc7\xd4\x0d\xecC\x80\xb9\xa6d\x93\x0c\xde\xee\xe0&&\x8c\x99?\xaf\x93))\x03t\x93,Y\xd3pN\xe7')\x89S\x0d\x0c@H\x04E\xcd\xbf\xfa4\x98\x1bj\xa2C\n\x8f\xa9\xe4\x87:\x90\x820\x06\xefz\xd1j\xcd\xf6\x92\xa9\xa5k\x9ePA\xfbl\xa5qC\xc4\xf2)\x995\xd1Bhb\xce\xf4\xc0Z\x16\xbbfI\xd3\x0fr\xe3\x1c/\xf4#\xbc\x83}X\xb2e^:K\xe7\xbd3\x9d\xb9\xbaKS\xf48\xb9C\xb3(\x14n\x85pw\x87I\xb3ej\x91;\xcd\x8blD\x17h\x9c\xad\xde\xf9\x1e\x96~\x95\x028;+M+\xb7\xa5\xfa\x17\x15\xeb\xed\x93>\x9cT\x8an\xfbp2M\x18\x88o1MW@\x90\xc6\xb3\xe5\xfcIb\xa4(\xbf\xf8\xa5\xcf\xd7mp6\xc3\x83\xd2\x19\xb2\x0fW8m\x8c'\xaeu+\xb5!j$n\xe8\xaf\x9cs\xf5\x0d{dh\xed\xde`\xa7\xf9\x04\"t\xca\xe2\x1e]\x0f\xb9'\xcbU\xcb\"\x9f\x0e\xe5\x8e]Jk\xfa%\xd0\"\xf7+\xc4\x8f\x8b*vuY\xd97 \xb2}\xb8\xc8O\xe3\x074\xd6\x9d\xf2\xd3\x18\xf2\x01Ur\x1e\x82\\\xe0+z\xd7\x9c\x8a\x04\x14R35\xa46\xa8\xf9\xaf\xa7\xd2\xa8\xc4\xba\xbe\xec\x94\xbe\xa6qB\xab\\\xb4\xfa\x91\xa3\x83f;>\x91\xd9@\xde\x1d\x19\x15\xd4\xeaG\xca\x06\xe9`\x1d\xadMZM\xf5\x83\x0c\xb5\x98fn\xd0\xc3\x91\x08\xd3h\x84\x1c\xb5\xb8\x91\x92^l\x94\x1f\xb3\xa5\x1c(\x02q\xde\xde\xd0\xd6\x9e\x96Hx|`l\x91\xdf\xf7\xe1\xb4D\xe8\xf4\xa0Q\x0e\x8c1\x9c\xeaW%\xa6 m\xb4\x02\x91\x1f\xccz\xc1\xedp\xe8\xb5b\x9a%\x14y\xf2gBCy\x81;8\x17?B\xf1L\x81'\xffM\x03\xba$\x18\xa5\x84'\x92\xc4\xd2\x15\x86 \x95\xd9\xc0\xba\xa2\x94\xc4K\xa5\xa54\xbe;\x0c\xd3\xd8\xa7\x89\xcc\x97\xec|p\xfb\xd0i\xb0h,\xa2\x9d\xb3uG\x91\x17\xbaiWxo\x88P\xdbCW\xe1N\xb8v\x86;Kux\xea\xb4\x9eL\n;\x12 \x86X\x1d\xe1[i :z\xf0'i\xb4n\xa1\\\x03i\x00\x95\xa3\x8f\x19\xb7\xa5\x0dU\x05H\xd3\xe1l XP?\xb2\xb8\xd8`*}\xd4\x93p\x98\xd0\x01\x1eJ\xf2\n\x86-\x82\xf9eU\xd3\x14_\x93zb\x020\x83\x821\"L\x8c<\xbc\xf5\xe8:\xc5\xa8\xb4\x0f\xc4J\x06\x9c|\xa0v\x00\x156\xdf\xcd\xb4*vL\xa9\xf6\xd5\x8f\xd4J\x0d\xc4\x96\x140\xecC&\xf0\x16m\xc4\xc5NA\xef\x11\xae\x04\xaf\xa3\xba\xc4s\x86\xcc\x1d\x8b_\x85y\xe4\x12\xc5\xfd:\x1aHg\x9d\x0d\x18=\x07\x1fU\x11\xcfacC\x1b\x17B\xfd\\\x8b\x1c\xffU\xac\xf2\x1b\xcc{@H\xb1\xa4\x15\xf2\x81D\xc08\x8a\xc4\x9e$\xac\xb7w\x91\x97\x13\xe8\xd8\xe9\xd2pn3\x1d\x97\xad\xc8W\xe1\xc5>\xe4d\xabi\xa2 &\x8b\xb9kD6\xf4>tQ\xc3\xf1.\xf2\xba\x96\xd3M\xfd\x04\xe5\xd7\x85J\x18\x1bhw,\xe1\x9dm\xd0f\xb4P\xa3\xcc/0=/\x1f\xb0\x02\xb7\xa2\x10\x1d\x10\x9a\xc7\x01\xda\x96\x8b\xb9\x94\xdaV\x8a\x1b\x1b\xfe\\\\z&\xdfs\x8a\x8d\x0d\x7f6i\x1et\x1f\xbc\xa3\x0d\xd4\xfc\x1b\"\xf7F\x1a\xdfA\x92\x92\x94b\xd6\xf4\x1b?\xbd\x8c\xb2T(\xc5\xa2X\xde\x07\xb4Yy\xf8n\x10\xb7\xd6\xb0\x98\xf9?\x84\x84\x93\x8b8[\xa7-l\xac\xe5G\xe15\xed\x94*\xcc)\x95\xf1Z@~r&\xb0B\xa9B\x03\xbf+?\\\xb9\xaa\xa1\x18\n+\x10W\xb6rny-\x96*.-U3VI\"m\x10\xe8\xd5\xcfEL\xc9\xd57]D@}&\xa6)\xc5\xc6\xc5y\x8f\xfa\x02\x99>\xac+}z\xf0\x16Q\x01\x0e\xc8\xd4%\xbe2el\xcc\x17\xac\x9c\x05\xdb\xe5a\xe2s\xd7\xd7\xfc`@-^#wA\xe4\x11K\xfb@\xc4a\x99\xf6\xb11\xc7\xc2=\x8a\xa3W\x1do\x1f\xae]a\x0e,GA\x1d\xf2 \x06N\xbe\xf6\x00\xa4\xff\x16\x1cVi\xc58<4\xcb\xc6\x1fLJ\xf3\xc7\xf6a\x0c\xe2\xea\xa3R\xd3\xc9Y7\xb9\x83\x04\xf3\xc2\xfe\xd6\x98s\xd1D\x19\xc0\xfctf=\x84Q\xbc\"A\xa9\x07y5\xed\xa8o\xa4n\x1f\x0c\x1e\x7fz\xa0/\xfc\xd0O\x1a\xfd\x13\xf2\xda\x05\xc7o'2iNd\xda\xf9\xd3k\x88L\xda\x82\xc8\x84\xea\x8e\x11\xdbKe\x9csL\x0c\x95\xad\x81\xc9\x89\x17)\x8d\x19e\xe9\xa3\xe3\xb8 h\xf0P\xb2\xdd\xca\xdbC~\xfe\xfd\xa0)\xa8\x92\x80d;\xa2\xcb\x8d\x84\xdb\xb2\xa4\xa0\xd9\xb5\xb1\xd8\xb5\xcd\xfd\x81\xa26\x8b\xed\xbb[\xfd|0\xd9d\xab\x1f\xfb\xb1\x0e\x05\xc10\xcb\x11\xf0\x85GG\x8d\x0b\xf2\x03&\xca\x07\x82\xef!iJW\xeb\xb4\xfb j*\xb5\x01x\xe32\xae\xea%\xad&\x82\xea\x0eR\x94\n\xf6\xe5\x91Woc\x8c7`\xe7\xecc\x9adAzDVt\x0c\x0d\x01-\x18]{\x17yc\x83m\"p\x85\x0e?\x9d\xb8\xe2A\xa1\xab9u,\xc4@\x03q\xac\x95VM\xc0J?sy\xf6\xbcA\xcd+q\x95\x9f\xf1\x8a\x9eI\x89\x0fs(\xf2\xe6\x1d\xea\x01Q\xcb\xa7\xe9D\xaa\x82[\xfb\x0e\x11Z\xe5S\x07\xef8\xa7:[f\xb1\xc8\xfe\xe0\xdc\x0f\xaf#\x8c\x02j\xb3\x15P?\xb9\xdd\x80U\x8b\x99\xb7f\x8a\x95(?\\s\xc8\xd6n\xae\x11\x08rm-\xf8 \x90 \xa6d~\x07q\x16\x86~\xb8\xb4\x89\x01E\xabZc\xf9jU\x95\x1e\xe5\x19\xc6\x0d\xd9\xf0\xe5GL\xf4\xadA9\x0e\xcd\x9a\x85\xb0\xe0\x00\"<\x96\x10O\xfd\xe7\x8d*Z\xc9\xf6\x85\xf9\x06m&\xef\xa4\xa9Q\x10\x0dg\xe8\x14B\x18\x064\xd3W4\x96m\xd32\xc8\xca\x08\xe3\xeb\"\xafns\x1f\xa0(\x85\x1a+\x7f\xa9x\x06\x12\x13\nZ\"\x97\xc7\x85Pjb\xc3B\x0d\xdb|\xfe\xe4\x92\xb9\x8a]E\xa3\xcd0+\x90x!q\x92m\xbc\xcb~\x9b\xde\x01\x9d\xa9j\xba@\x07_m\xf0v\xe2C/1\xb6\xa1BU\xc3\x01\x97O\x9d\x82o\xe5\xad6l\x18\xd8\x87\xb9\xbd\x8a\xd4\x17\xdd\xe4D\xa8\x19\xb1K\xdcq\xd2\x9a\x99\x10\xc0\x957 \x13\xb8\x841\xac\xfb \x8e\x8b\x87\"i\xe3u\xa6\xfa\x11I\xfd\xb0\xabvZ06\xc6\xb1\x18k\xe3\x0b_\xb3\x07T\\MrQ\xc3\xc9\xf1\xae\x90Y\xa4ZV\xd2\xad\xc4\x8eX\x06F\xbaV\xfa\x99-}\xd8\x07\xe2\xf6+\xc97M\xc7\xf0\x8d\xed\xc42;S4\xaeX\x8ai\xb5$z\x99\xd7\x89\xc4\xcb\xdc\xb3\x07\x87\xd1v\xa6\x8d\x11\x1c\xda\x0eQ,E\xc3\x08\xdb\x0e\xab\x15\xd0\x0f1\x9e\xa0\xe1\xe1\xad\xed\xe1\x89\xed\xe1+=0\xa6R\x01\x91c\x9d$=\xb3\xfc\xce\xcal\xd8&?\"hg;\xf1Le\x83\x05\x93\x84v\xb2\xadW\xb7j\xee\xaa\x9f\xf0\x95\xc5\x9a\xb4Nu\xd4\xd1\xa83\xb1\x19\x1a\xe4]\xf9\xad,\x8d\xe9\x8dt\xa7W \xda\xc0\xc3A\xc9\xb2\x90\x07\xbc\x8ey\x90\xbc\xa6\xd7@\xe1:n\x1c:\x0dg\x18a n\xc9{Hr\xd5\xd9\xdf\x177Fm:\x04\xe5\xa8\xc9\xda\x13a\x10\xd7\x11 \xbf@n\x1e!\x14pE\xcb=\x8dE`\xa0(E\x03L\x05\x8bV/]\x17&r\x1dr\xef\xa2` \x9e>\xc8\xb8\xa3\xfaI\x1d\xb9\x99\xa8X\xa2V\xaf~~\x88\xeb\xae\xfaI\x9d|\xd3>\xacC\x17\xc6u\x10|\xd5\xd4\x93\xdc$\x01C\xc9'-\x07\xd2j\xc8\xcd\n\x04\xe2d-x/\xb1w\xd2Z\xb0\xf8R\xad\xb6T\x08\x14J\x06\"K;\x87\xa0\x8f{z\xcc\xa8B\x9dv\xb5\"]\x07\xd6\xc8/<\xec\xa6\xd4\x0bL\xe5\xfd\xacF\x11U\xb0\xb9F\x99\x13or\xea&\x0e*\xb3\x92\xb6`\xac}L:/\xc74\x10\x80\xa9^\x1f\x17\xca\xd8\xc2PB\xcc\xd5\xd0e\xaev\xbc6\xd3\x84T\xc3:\xe5\x1d\x943\xd0\x9f^\xd2\\\xa1\x02\xf3\x88&\x10F)\xac\xe3\xe8\xda\x9fS \xf0\x18\xdf\x7f\x0c\xbcA\x93b\xc8\x86\x0b\x9aH}\xdaE\x8c\x90*\xc7}e%\xc5\xa85\xf4\xb9&H\x0bz,\xf1\xcf\x02\x80Hh\xc5\xebK\xac\x81\xa8\xbc\xeb\x89\xf4B\x90Tm\xe0\x95\x88\xe0\xed\x9dt\x8a4D\xe8\x9dfx}!\xe2\x99\xa7\x85B_\xa8\x9b\n\xee\x02\xcf\x95\xb4\xa4P\xb2\xdb\x19\xe8f\xc0\xb3\xcd\x8f\xcb\xef6\xa0@\xbe\xfc|\xd0\xe0s\x1c !\x88#\xc4\xd4W\xab\x9d{lwa\xd1o \xae\x1d\x1e\x03\x9d\x0egu\xf4\xa9\xaf\xc3\x88\x9b\x9ar\xa0\xc9\xcbd\xcc\xc72\x9a\xb9}\xd8T\x1f\xabz|\xa0\xdc\x1d>\xd7\xd2c\xd1\xd6\xcc\xad\x9b+\xa19]\xdan\xce\x1f\xecs\xa6\xea\xed\xd9\xfd\xbd\xf6\xfa,\xcdMR\xa4L \xbd:R\x8e\xbf\xa5F\xf6\xab\xd1\x94\x0d\x03;\xd5\x0f\xac2W\xd8\x87\xa9}]\xb8\xa9G}e08\xacd\x92\x8f9\x10\x8b\xc8N M\x9d\xea\xfd\xbei\xa4\xef\xf5#E\xaaj\xd3\x16\"|\xa7\xc4p\x07\x81\xb4]\xa1\x12|\x7f R\x9fom\x8fJ\xcf_\x1d\x7f<,?/eU\x1a\xbc>|s\xf0\xe9\xdd\xe9y\xb5\x9fQ\xa5\x1fY\xef\xcd\xa7w\xefJ\xf5\xb6wJ\xf5\x82\x88\xcc\xf1\xc2\x94}\xa9>8\x08\x82\xfc\xd9\x01\xe3 \x8a\xc7 Y\xd0w\xf2]\xf9CWA\xb6\xa1\xfcV\xab\xcd\xb3\xd5\x1a\xb95\xf6\xa5\xfa\xfek\xf9P\xfeP+\xfc\xf5\xe0\xfd\xbb\\q-`\xb0W\x9a\xdb\xfb\xb7Go\xdf\x1f\xbc\xb3-G[0Z \x98x\x84\xbb\xedv\xd9\xb7n\xe9\xd9\x9a\xc4\x18F\xd1w\xba\xf8\xb5\xfc\x14\x93\x19\xcb\xe7\xe2G\xb9\x06\x99\xcf_\x95<\xa5|\xa7[.\xeb~\x93M\xfc\xb4\xea\x06\x1d\x15\x00-\x95\x8b\xb4Z\xdb\xfaDq\x08\xbdRyV\x80\xacT\x9eh\x9cE\xad^\xa1\x01F\xbd-\x15y\x18\x07\xbaL\xaba\x1f\xb6\xcaE\x0c\x81\xb6\xcbE\xf3z[\x97\xf5\xb6\xae\xebm\xad`\x1f\x9eL\xcfn\x87\xc3\x8d\xb3\xdb\xe1\xd3\xb3\xdb\xe1\x8fg\xb7\xc3Wg\xb7\xc3\xc3\x8d\xb3\xdb\xd1\x9b\xb3\xdb\xbd7\x1bg\xb7O\xb7\xcfn\x9f\xeen\x9c\xdd>{s\x96\xbdy\xf3\xe6\x10\xff\x7f3\xbb\x9f\x9ee\xaf\x9f\xb2\x97\xb3\xd7?\xbey3s&\x1dV\xf2\x8a\x97\xb0\x1a\xee\xbd3\x19O\x7f/W\xbb\xff\xdd\xadT{R\x1e\xd6R\x0c\xeb\xe9\xceY\xb69\xdc|\x8a\xff?\xab\xd6\xba\xc3Z\xfd\xb3\xe9\xd9\xec\xec\x1fg\x9f\xab\x8f/\xd8\xe3\xdf\x9d\xc9\xb8s\xdf\xe9\xdcw\xa6d\xe3\xefg\x1b\xb3^\xc7\xfd\xf3\x13\xbf\\\xf3\xbc\xa89\xfd\xbdh\xcfu&\xe3\xff\x98\x0e7\x9e\x91\x8d\xc5\xec\x1f\x9b\x9f\xef\xf9\xf7\xbf\x9fm\xfc_\xcf\xcf\x9e\x9cM\xc6\xff\xf9h\xff\xacw\xf6\xe7\xfe\xf9\xd9\xa0\xf3?g?<>s\xce\\\xf6\xf6\xcc\xfd\xe1\xcfO|\xddYqc<+F\xc3\xc2\x8an\xb4\xc5\xbf+\xd4\xbc\xde\xd4\xa1\xb1\xa9gEK[\x9b-Z\xba}HK8\xbe\x87\x8e\xf5\xc4\xd8\xc3\xf6v\xd1\xd4\xb3\x91\xf2}K\xe9b\xb3\xf4c\xa7E\x87\x1a\xbd\xbaF\xc5,\xc7\xf0\x14^\xec\x0bgI\xf6mg\x0f\x13Zn\xb0\x07cx\xb6\xc7\xca0\xaa\xf8\xd6&\xdc\x0b\x9bF4a\x1c\x0d7\xd1\x9ca\x83U\xea1\xb0\x8cacd\x1d\x98F\xff]\x8c\x82Or\x02\xdd\xb3a\x97\xf7\x9c\x97\xfc\xff\xb0@\xadr\xc1JF\xa3]\xa5(\xc5J\xd5\x82Q\xbe\\\xac(\xe4EjK\xd7X4\xdcT\x8a\x16\xbc\xd6\xb6R\x14\xf3Z\xa3\xa2\xe8\xff\xcfJ\xb6\x94\xd7\x00\x0b\x8a\x97\x1ew\x1f\xc3\x18\xb6\x95i<\xc1\x11\xaa=\x9d\xb1\x92=e8\xff\xe7\x7fc\x9d\x1d\xa5\xe4\xff\xc6:\xeaL\x91*\xb0\xd2\xa7\xc3J\xe93V\xda\xedZ\x17\xe1\xc0\xb8\x08\xb8\xfe\xbb;;[;0\x01\xeet\x87y\x0b_]\x92\xf8U4\xc7\x9c\xa8c\xed\x83\x9d\x9d\xcdg\xbb\xd0\x03\x87!\x0eka\x17^\xbe\x84\x11\xe3uvv\xb76\x87\xe5G\x8f\x18\xbc\xb7\x14o\xd9\x82_\xcb\xed\xe4\x8e\x85\x9a\x043\xee9\x9b;\x8c5\xfb\xa0);\x054\x97;\x85\x17\xb0\xb9\xb3\xfb\x1cN{=\x17\x8e\xa7\xa73\xd8\x87+\xe7\xd4\x85 \x8c`\x0c\xc3>|(\nu\xc4\xe9\xbdV\xc1\xa9\\\x94Dx\xdf\xc7\xc3\x17\x0f\x16~@C\xb2\xa2\xa8,\x0b\xd7Y\x8aN\xb4Q\xe2\xa7huH\x07\x81\x1fR\xb5\x0c6D!:\xd0\x97\xe6^\x1f\xcb[\xedX8\xcf,\xc6i}\xff\x0f\xed\xfbt\x10\x85\xbf\x918\xf4\xc3%w\x8d\xce\x7f\x8a@\x85\xa8U\x12\xed\xeb\x16\x87\xad\xcbQMe\xc4\x18\xb7\x9a\xd1\x99V\xb9{]$\xa4\xab\xcb\x8e\"7\xf0>\xd0\xc15\x8d\x136\x8dG\x8f8$\xba\xf3l\x1d\xf8\x1eF\x1d\x84h\x01\xff\xc1\xba\x84\xb9\x1fS/\xf5\xaf\x91\xc7\xe2IC\xf2\xa4:\xf9\x9b\xe5\x9a@<\xc6`&@o\x89\x97\x06w\xc0d]\x99\x03\x12\xe3E\xb3A\xb0-\x85w\xe0O~w\xd8\xa17\xeb\xb9g\x03\xf9\xed\xcfO\x06\xf4\x96zN8\x1d\xce\xb8\x17\x1b\xef\xc8\x0f\x82\x8dE\x14\xaf\x98\xa4\"\x1a\x04L\xb0I\xa1>Z\xc6\x8e!\x03\xf96L\x9d\x18\xc3B\xe2^\xf1\xcb\xe5\x9b\xb2\x9c\xcf.*z\xcbB>\x13r\x11\x88\xf6%\xccD\x9f20\x1b\xe7?\xe5\xc3}\x081\x12%\x1dx\x97\xd4\xbbz\xe7\x87\xf4\xc7\x98\x92+\x0c{\xc1v\x90\xec\n\x0d\xdc7\x8b\xaf\x7f\x88^\x93l\xcd8Y:o\xe8\xb4\xb4\xba\xd5\xccb\x07?=\x0c]\xea\xb8\xb2iX\xed\xd3\x83\x9f,\x8b\x9d\xdeDE\xc2O\x06\x988\x07\x08\xf2\xc7\xb8\x0e\x17\x83\x94&\xa9\x13\xa3\xa8][\xda\x94,\x81'o\x01g\xe1\xc7I\x9a7\xe8J \x94\xc6\xc0zI\x84\xeef\x90\x92\xe5{\xb2\xc6\xcb[9\xe2\xc7\xe9%\x8d)\x9a\xbb\xc1:\xa6\xd7~\x94%\xc1\x1d\xcc\xa9\x17\x90\x98\xce!\xc9\x16\x0b\xff\x16\xa9b\xf71\xf4 \x86\x1e<\xee*\xc3x\xec\xf6\xe1\x9c\x0f92\x0fy\x1dS\xd6\x8c\x93P/\n\xe7-\xc6,\x07;\x8dg\xb6xr::\xfa\xd1b'\x89\xb7\x0cy>\xb5\xf2\xba\xa2f\x10^\xe8QA\x18\x93Ib+\xdcH\x11q\x8c\xd1\x81\xf1(\x89\xb8\x83\xad\x8fw\xbfB\xed\x06\x11\xbc\x00\x9f\xfd\xe9\xed\xc3\xc8\x15<\x83C\xb0\x8e'\x8e\xb4\x03\x06PW\xf0~/\xf6y|8\x82|\xcfh\xb4=\x1a\x8d\n`\xd3\xdb5\xf5\xd8\x9e\xb8&\x81?\x87\xbf\x9c\x1c\x1f\x15\x11\x0cuv\x8bhp\xb5\xe2\xab\x96)4\x84-E\x92\xc6\x94\xac\xd0\x16\x89\xf8a\x02a\x14n\xacc?\xe4[=o6\xd1\xb6+n=\xd8\xbc2\xd3\x9ai\x96\xecu\xb1d5\x87M\xbc\x7f\xe1\xeb\xd5\x87\xa0\xdc'B8\x1e\xf8 \x17\xfd\x9cP\xc1@\xa1\xaaY\xd1xIaE\xd6k?\\&\xcf\x11\xdb\xc4\xdd\xd6\x1c\x92(\x8b=*.9\xd8&P\xc9\x1aC\xc3\x8c\xaf\x1e\x13\x16\x1d\xc58\xf6\x8a\xdea\xa2\xb7|A3x\x01\x01\xfb\xc3\x17\x14\x9dd\xa6\xd9,\xdf{)\xda&`r!\x1e\x95 \x9c\x12\xb6\xeb\xf9\x0fU#\xae\x03\xcf;\x05\xa3\xd5t\xaa:P\x05}\xf0\xeax\xcd\xb0\x90\xb3MN\xa4\x9e2y\xc4\x11\xf8\x07\xe6\x83N\xc9r|GV\xc1 \x8a\x97\xfd\xcd\xe1ps\x8c\xf0\x13\xa6\xf3u4gm\xf3\xf4\xd2~\xc2\x99\"\xdf\x96\x958\xe0\xe0\xf4\xf0BL\xc2.\x80\x17\xe0\xb1?\x1cv\x12\x17\xfci0\xd3\x9b\xe4!\xf6\xe6\xd5\xeau\xf09\x1d\xfc\x91\xf0\xbb\x95$\x8f\x82\xcc T\xa7X\x13^\xe0p\xbe\x08\xd8\x1e\xc3\x0c_5\xd6i\x1f2\xfe\xa4`\xb0\xca|\x01\x9dK\x14\x83+z\x87!M\xd2i\x84\x17\x7f\xf9\xadM8\x8dfZ\x01(\xb5.\xfe\xa7V\xb2\x94\x102D\x8aMN\xa3\x14JR\x8c\x1c\xf32\x15?{=&Vl d\x98\x80\xa3>\xea\xe7\xa2\xa6\xb5E\xce\xcb\x15\xaf1\x1e\x9d\x83\x87\x00\x02\x16\x9d\x9e\xd8\xf6\x92\x84\x8aSx|\xd6\xc3\xe4C\ng\x8a\x13\x90\x8dY!\xf37\xd3\xd9]J\xc69\x94\x19\xfflSx.\xb2~GZchqyr\xe8D\xees\xd7\xd4Z\xaf\xa7\xb6\xa7\xdd)\xb8\xdb\xb6\xb8he\x08\xf0?\x8f,\x979mz\xd6\xbe\xfc\x19n.}\xc62\x8c\x86\x05#7\xda*\xbe\x8bb\xc3\xb8;7x\x14\xe12\xd6k t>a\xf2\x90f@\xf7!fx\xc5\xd7\xfbm8\xe7\xe6\xcd\xc3\xe7R\x90e\x0b\xa0>d\x95\x1f<\xed\xcf\xba]\xb6!8\xf4b\xba1G\\e$/\xf8c\xcel\xce\xe9\xc2\xf7|V\xec\xe3S\xe4\xfe\x91k\xb3b\xe5\x1b\xc3~\xed\x8bD\xb3r\xc8ZR\xd0q\xb6wpl\xa6\x8d,2\xe7n\xefr[\x01\x0c\xfd$\x84\x96z]\xe81\x82\xdaTe\x93\x13\xc1\x90m\xc5\xad\xbe\x80MC\xff\x9d['u\x1bd\xc8\xbfke\xc0QNjTf\x81\xeb.R\xcc\xda\xcfc\xce\x15\xcf\xe2AL\xd7\x94\xa4N\xf7\x0c\xcdd`\xa3\x94(K\xd7\xf5\x8f\xda\xae\xafE\\A\x89Q)\xd1X\xe2\xf9\xdck2\xf4.\xaby\xb3A\xa8\xa5u\x99Q2M\xae\x11\xeetQ\x08\x95\xbcM1=\xfe\x831\xb8\xf2;;,\x88\x90 \xda\x11+lk\x9b\x93\x13\xfc~\xebX_Dtp5\x97\xbe\x92\xb9\xed\x0c\xfbP\xa6\xffHbY\xf1\xc6\xc8\xad\xef\x96}\x06c\x99\xbb*\x0b\x82v\xa3\xafu\x9f{.\xf0\x0d\xc2O\xdf\xdf\x04q_\xf0<\x1e\x1d\xcc\xce\xc2\xbb\x92\xc8\xe1\x96\xc7\xd7\xa6\xf3~q\xd8#-\xc8\x8f{1\xa5\x97\"^\x8c\x00\xb0+\xce\xb1\x0b2W\x89\x00\x93Z\x08$\xf4o\x19\x0d=\n4Lcm\x94\x80|b\x15\"\x93ji\xa9$\x01\x9dL\xe0\x08\x13\x9c\xd0W'\xc7\x1dd'\xe8\xe0\xca\x0f\xd1\xaaG\x8e\xa0\xdb/6\xd3>\xe3\x0c\x9b\x18\xca_\xcd4*g1\xf95\xbev\x07T1\x9dMq\x8b\x9f&N\xf3\x11P\xd8\x0f\xe8\xdaQ6\x0c\x9b\xbfI\x03C\x84X\xc9\xafv\x18U\xde\x15\x1cP\x9b\xd3\x82\xf1@\xc8\xcfw\xcc\xdcA\xe5\x851lq.)b\xef\x12%\x01g\xb7\xd3\xe9\xb6o\x85\xbf\xd1\xedC\x99\xd11\x98<\x1b\xd9\x816\xdd\xd5^\xcc\xd9\x00\x85\x0b\xd8\xdd4\x1e\xfd\n\xe5(lF\xd8\xecc\x9d \\\xdaem\x86W\xb0\x89Y\x98K\xb04\x9cK\x9d\x80\x10Do\xfc\xf4\xd2\x0f\x81\xc05\x8d/H\xea\xaf\xd8\xcaW\x15<\xa6p \x82sS\xe6\xdb\xb9\xe5\\\\\xbe\x9al\xaf\x11\x98H \x98,\xa5\xceC\x08\x90B\x10\x06z\xeb\x05d\xc5\x11pE\xe2\xab\xa4\x9b\xa7k\xae\xc0\x82\x1dP%\xf1\xa1\x87\xc9\xed\x84bG\x95QCR\xd1\xe9T\xfaL2\xef\xb2$r\xcb\xcc\xe5U\xf4\xe1\xa4\xbd\x1d\xdc\xeb\x0b\xdd\xbc\x9ew\xb9R\xaa\xd0\x15\x18!\xb5\x08\xa2\x1bF.\xd9v\x8d\xe2\xd2\xf8\xcb\xab\xa6#\x7fx\x90u\xce\xf5\xfd1x5\xc0h\x8c\xf6\x1b\xb1\xcb\x03KH\"\x1a\xc3\xb8\xae\x06\x0b]\xa5F\xaep\ng\xa8\xe6\x1a\xb3]*N\x89\xa2\x16+\x93Ou\x8f\xeb\xf2\xb3\xac\xcf\xb5mY\x98k\xd6\x94UG\xcdZ\x88\x9a\xb5\xc7\x98\xda\xdeJ\xbc\x7f6\x13o\x0dY~\xca\xc9r\xf8\x15d\xd9\xcc\xc8\xe8Is\x08\xa2\x86J\x9e\x0d\x03(af\x15\xab\xe5\xc6\x0d\xc5\xc6\xe5\xa2f\xe7\xc4 \xd9\x0en\xd3\xa2\xf6\x84U\xb6M\xae\x03)\xf6cy\na4\xa7\xb0\xca\x92\x02\xdfH\n\x01%I\x8a\xaa{E\xcbV:\xa6\xed\xbb\xa9a\x81\x7fS\xb4a\x9as\x01\xddqQ\x1b\xb6\xea\xc3\xb2\x0fw}\xb8\xe8\xc3y\x1f\xae\xf8e\x94\xe6\xd0~o8\xcc\xff0\x1c\xe6\xcab\x07~\x92\xd2\x90\xe6\xb2\x12\xff\xe5t\xa35\x0d1\xbfx?\xc7~~}\xa3@A\x16\x08~E\xfe\xcc9\x15^\x80jO\xd8Gc\x88u\xc1\x97-\xf8W\x11q\xad\xca\x88:\xefs~\xb5\xcc\xbe\xc1\x84\x03\x01\xd3_\xa9B\xa6\x90:\xf0\xba\xae\xfa\xf0\x85P\x84\x9d\xa2\xf1\xa5\x8b\x17\x1e\xec\x85\xd3\xfa\x19*N\x14\xe4\xa0\xee\xefq3>w\xcb\xc3\x9b\x14\xa3[q~\xec\xbb\x0c\x12\xc6\xd8\xbcn\xfdV \x832\xbfg\x83\xf4\xf3\x1b\x9cS\xf6`-6\x15\x93\xfa\xce1\"w\x0et/'i\x98\n\x80\x1d+}\xb8*\x1f5\xa5{\xc4\x1cR0\x01\xde+\xca^W\x08\x9c\x87\xdc\xb1\xf4\x0b%ob\x96\xce@X\xee\x98%4\xf6YXBr\xcf-\xcf.%Nj\x9f^[\x9f\xae\xacO\x97\x86\x0d\x08\xc2\x8eF\x97\xa7\xf2\x0b\xe4\xc7\x85PY\xb7\x93\x1f3\xa3\xe7\xbf\xf4Vn\x16'\xfbB`\xe6B\x1b\xa9\xf0\xb4\xbb\\(@\x81f\xe7\xa9\xf8~\x7f\xcfhyl\xb5\x84F\xad\x13\xd2\xc1\xb0\x0f^.\x02\x1auP\xea{\x8a\x80\xd7\xe8F\x880n\x03\xb1C'c\xfb\xdcP\xb5\x81\xbfR?l\x84;\xdc\xde\"s\xe1\xd6\xd4y\x85S\xce9F\xc2X\xf8\x94&k\xe2)\xa7\x8f\xaa[\x05td@\x0e\xfa\x8a\xdemp\xd3\xea\x84\xae \xf7\xf0\xc8\xd9\xe9\x8b \xf2\xae\xa4\xd6\x9a\x1d_(l9x\xd7\xb0\xe8\xc3\xbc\x0f\x97}\xb8\xe6w\x05n\x1f\xf7\xc6\xb5\xa0\xd2\xa2\xe8N\x109\x81\xdc\xc8|\xb2\xbf\x97\xf9\xfe\xc57$\xc1\xb7\xc3\xa5e\xf2+\xa6\x04\x88\x97vF\xe9\xba\x91Q2\xe5'a\x80\x17\xe6\xa0\xce\xba\x19\x17\xf8\x9d\xd8\xb3\xad\xbe\xd0\x83sM\xac.P\xbd\x85\xf2\xb1>G\x9b\x9caX\x1beQ\xf9a\x1d\x8e6wD\x8fC\xde\xe3?\xda8\xf4|\x01[\x15\xbb}0\x80\xa1|\xf2\x0b\xfc_[\x19\xab|\xab\xb1\xbd\xda\x06\xbc\xe2\xbe\xb0.\xbe\xf2\x9b4\x8e\xbb\x97%\xdc\xbdVp\x97\xd1\xdb\x1c\x7falR\x1b\xc7\xe6\xc3d^\xf0\x1f\x9c>\x82\x17\xadV\x04.hzC\xa9P\xf8xQ\x10P.\xc0R\xeeD\xc8H\xa3\xc7\xb6\x95H~\xc9\xc5=\x1f\xef\xd99\x9a\x88\x13a\x0dm//@F*%\xf6\xeb\x8a\xd4\xcdU\x0e\xe5\xeb\x84@\xb9N\xf0\n>%Q(h\xa9\x19\xe3\xc2\x97\x05z\x02\xf9\xe5H!\\ \x8ew\x8d\xe4Xj\x9b\xdb\xe0Qe\x04\xba\xb1/\xca$\x9f\xad1\xd2\xb8\x18\xe9\xbc\x874d\xc1]\x81'\x10\xf3{\x13\xac\xc0\x17A\xa9\xc3*\x89\nI\xb5ga\x1e\xde\nI'\xe0\xcc\x1f0G\xd6-\xd6\x1f\xb5\xd8\xb3\x0fQ\x13W\x90\xb1\xaasd-\x9d\xb3\xd1\xa2\xee\x83 \xd9<\xfdn[R]\x15T\xe7f!\xd5$\xf0y\x96g\x0b\x0c\x8a\xab}\xb4\x86Z\xfe9\xf9\xd1\xe9\x01 \xa7\xa9b\x11I\xf3\"\xba\x82\x87\x7f0\xe1\x16\xb7\x08\xa4\x15\xddntP\x04I\xa6\x95\xab.\x8f\x04$.S\xacnW\x12\\b\xf0deC\xdb\xde\xb2N\xbf.h\x89\x1bU\xe22\xfc\xdcg\xe4k\x82+-\x1a\"\xc8\x7f\x8d1\x80\x17\xc7K~=\xcd\x99\x1b\xef2Z!w\xb3B\x86\x92q-\xfe\xc2\xd7[\xe1A\xb3\xd8\x83b\x80\x83\xc4\x83\xbbI\xa0\xbc\xc8\x93ne\xb9\xb3D&\x9d%6F\xbfF\xf1`\xdf\x18\x11\xbe\x8e5\x0c^\x87\x0e1\xea\x16\xac\xe65m0D?\x0ey\xaf\x86]\x9b\xf9\xfe-\x89Y\xc6!X\xc7\x07_3FP\xc7\xd9\xb9q\x88r\xcf\xad\x19\x90aC*\x1b\xce0P\xc5\x1a\xa8j\xe4\xd37\x8d\xbe\x9d\xf2\xc4\xe9x5Y\xe9\x05;\xe4\x1e=\x92\xd6CDc=\xd4\x06b\xe6%\xebxP5{x \x0bdC\x169{\xc1\x1f\xb8}\xb8A\xd4[\xf7z_\xbc\xd9\xeb\xb3\xb3\xe3C\x82\xf3\xbe\xae\x98\xd3TLf\x02\xf4A\xe9\xc1\x1a\xc6\x8c\xb5\x1e\x8b\xb70\xc4\x88\xcc\xf1\xa8\xd8\xe2\x9c\x85M)\x0f\xecA\xed\xcd\xaa\x0fa\x11=\x01\xb6Q\x18\xc7\xb0\xca\xd9\xb8\x96\x83\xe7Zo\xf9\xe6\xc8\xfa\xe6Z\xf0\x8ccA\xed\xd60\xd1M\x17\x90\xee\xd8\xdaix^\x1e!\xb7\x16\xee\x0c%\xe9\xea\x8b\x83\xbbj\xfe\x05\xd5M\xf8\xdc\xfd\n\\e\x9f\x8fB_\xaaj`;\xa3\xb6\xa4\xd3(@W\x8ek\xc9A=P\xbc\xd53'[\xcf\xbe\xfez\x12\xdar\x0bUi!\xc6\xec\xbd\xfb\x9a\x0b\xc76\xe3\xb1\xb0\x1c[\xdc\xa0\xdf\x9a\xf2\x82\xd5\xfb(8\xf6\xd2\x821\xee\xbe\x01,e\x9e\xa5\x00\x8cE\x17\x18\x97\xe6Y\x85D\x19\n\x863\x0e\xa9\xd7\x8d\x83\xb7\xe6\xf9\xd0#1b4\xf6\xe3\xb2\xc3H\x88_u\xf0\xf2}\x94Kt\xfb\xfb\xfb%\xc3\xdfG\x8f\xb8\xf1\xe4\xc4\xca\xefK\x1f\x9f\x82\xe3O\xfcp\x19P\xf8[\x16\xb1\xaab\xedEBJ\xf3,5\x1b\xe9!b\x86\xbe\xd3o\xb1ST\x01\xc3\xb0k\xb69z\xb4P\xd3}\xfb]\x13\xa29\x85v\xd7\xb4\x18\x8fU3\"|W\xb3|\xd0Z\x8a6t\xabC2!>\xaa\xb16e\x9b-\xf6\xa2\xae\xab\x9bvW4\xae\x8a\xfd\xe6}\x98\xeb53\xee/\xca\x90\xfex\x9a\xcd\xdc\xd2\x01\xf3\x01}G\xd4I\xb6h\x11%\x9c\xd1\xa60\x83\xc3`\x93l/m\xa2+\xf1^.\xcal\xc3\x18\x9e\xee\xe4?\x99\xd80t\xe1%\xfb\xaf\xc5]Y\xc4/\xb4}n\xb4\x1d\xb1\xf7\x9eC\xb4\xb1\xe1b\xef\xaf\xda\xc2\x8a )0\xc1f\x1c\x1f^\xbc\x80m\x17z@r\x91*\xdf\x81\x97\xf4\x96\xcc\xa9\xe7\xafH`wiR?*(\x0f\x1c\xbf\x82/f\xbe\x85\xc3RR\x81\xab0\xba \x81&\x1eY\xd3\xdc\xd8\xd3\xd6u}g\xd8)iVPR\xbe\xf5M\x94\xb4\xde\xf0w\xa2\xa4\xf3(\xbbhCI+\x83i\xc1K<\x84\xb4\xeaG\xa1%\xad\x8a\x1aG\xc95o\x0e\xbd\xc6!\xad\xa7\xaa\xdb\\\x87\xd1|\xf1\xdd\x86\xaa\x1a\x1aie\xee\xc4M\xe0n\x85\xf5[\xe7\xc4\x89\x19\xd9l\xd3b}0\x0f2y\n|\x92<\xc8\xe2Ic\xfc\xd8/\x9b:)*\xf5J8\x16\xd5\x10\xf2q\x16\xe6j\x80\xb9\x18G\xc5(N9\x93T5}8\xab\xde]\xd5\xd9U\x86&_j\x8a\x82ZWO\xea[\xd9IiV\xce\x99/\xba\x19z\xdd:^3b1\x88\x9c8\x1ew\xfb\xe4D\x1a\x85\xde\xad\xa7\xc5\xf7\xedM\xa5|\xab\xf8.\x15}\xf8cW\xad\xf4L\xf9\xae\xd4\xd9\xdaS\xea+\xe5\xcfx\xa8\x07\xcf\x8a\xe5x\xe2\xec*\xdd\x0b\xb5\x99\xc7u\xf4\xb7\xcd\xdbHHg\xf7\xf7\xdc\xbe\x8f\xa1y\x8b\x8d\xd5\xcc\xaeD\xe8K^fw\x85\xd5\xba\xd8`\x9e\x95\x0b\x11\xd6\x19\xd6Dp|A\xbfh\x8a\x16\xe1YI\xaf\xb8\xb5\xd3v\x10\xf6\x01\xa0\xafL\x8b>\x9b\xb4\x12\x8dGM1G\xafY\xfb\xc8\xda\xbc\xc1\x8a\xcdV\x10Y\xaef\x91\xd74\x8a\xf1Y\x90\x17p\x95\x89rrn\x8cjw\xd4\xfb\xf6\x04o\xf2C\x14\xf9\xfd\x8b\xb5U\xe2#S:X+\xda\x839\xab\xc0\xe7\xfe\x1f\xdcx\x80\xd1'u%\xc4\xfduI\xe7\x16|{=\x8e\xbe\x14/\xc08/\xc3\xe9gg$y\x191\xde\x0d\xc8\\\xdb\xe6t\xfbp((\x9fS\xae!\x0c\xcd\x0c\xcb\xd1\xe0\xf2`:\x11\xabC\xedtr2\xc2]\x82\x05\x99Y\x94\xe8\xcb\xba\xaeQ\xe1\xacH_ZQr\xf2\xf7\x87@\xa1\xdc\xd1:\xf7f\xc9\x8d\x0d\xba\x93.\xea\xa6,u\x95\x12q\xb3[\xd8\x81\x15gur\x19e\xc1\x1cmu.\xc95\x05\x12\xdeI\xcbk\xbc\x84\x95\xfe\xde\xad\xaf\xbb\xf3{\xc5Buv\x9a\xcf\n\x8d<\x85\x8dg\xa5i1\xean\xa7[\x14\xe8\x9d\xcd\xba\x93n1S\xab&y\xc9ugw|\xed\x85\x11\xd2\xe9\xdd:OZ\xf7\x1c\x96\xf0\x02\xee\xd8\x1f\xf4\x1f\xb7\xd2\x1c\xe7\xa2\xde\xcet9s\x072\xe0\xbb2u;\x9dPp\xe2b\x90'lW]\xd3\xe4:_\xf0\x1b\xe6/\\\x82o\xbb\x7f\x05\xb1/\xb1t\xe7\xb6`T\x0b\x86N\x19\x13\xbfw\x16\xc7\xdb\x91\xf0\xf0;\x9a\x863\xa9cc\xf4\xf4\x0f\xa1q\xe0\xf44W\x82\x15hZ\xd2<\xfc\xc9\xdcy\x99\x1e\x0c\x15\xd1H\xec\xf7\xc2=\xdfN(\xdaV\xe4\xf1\x1c\xdaW\xdet\xcb\x11]D\x84\x07u\xdc\x0c D\xb3W\x13T\xd0\xadH\\\x8b\xdb\xf2[\xc1\xd3\x8bi\xa2\x9d\xc6Z1N+\x03\xa6N\xa4\x1f=\x82%w\xf0,\xaf\xbd_^{\xc8Cq\x84Q\xb8qp\xf2\xea\xed[%\x9eL\x02$\xa6\xe0\x87)\x8d\xd71E\xc7\x87\x04\xc5\xad<\xe8\x9c\\\xda\xa4\x166\xa0\x85<;\x81\xed\xddf \xbb\x82\x15h\x80\xb0RA\xf1\xa4\xdeP\xa9d]\x1f\x1a\xc5\xa8\x0b\x15\xe8Yxp\x94\xd6\xc3z\x18\xff\xd5\xd1Fa,bAQqv\xa0\xcc\xc3\xce\xc8\xa1\xe4\x17\xf2\xb8v2d\x0c-\x03\xa0\x98\x02\x82@\xc4\x92\xb1Wrhn^\xd0\x87\xdd\x9d\xcd=\x11+U}i(k\xb2r\x8e\x15#\xb7J\xfb\xaeE\xde\xe9\x90\xde4\xdf\xaca\xe6 \\B\xc0DL\xf8[F\xcfds/~\x08\x96G\xd4Id\\\xf6T~\xbd\xbfg27>,\x02Y\xb2\xe7\xc5\xafr\x13\x9c\x13\xc1*\xe2\xeb\xfd=W\xeb\xb3\xa7\x18\xa0\x8a=\x93\x91\xaa\xf2'9\xbb\x86o\xca\x1f\xe5\xb6KB\x8cL\xc2\xcd\x07\x8a\x81\xc0\xfd\x80\xce\xdf\x8a:2\x97 \xe7\xdf\x0d\x95O\xf9\xd3|\xe8\xb8v\x052\x88rE\x171\xccG\x8b\xea\x08\xf5\xa7\xd4H\xa8e\xaa!\x10O\xf7,\xf7'\xf2\x17eB\xcb\x97S\xc3\x04\x86b-\x11\x93\x86\xdd\xaev\xe5\x97s\x93t\xf2\xdc$EZ\x12_3#%$V\x11\x82-\x86\x17\x10\xb1?<\x04[\xea\xf8\xd3xf\xa7-?i7\x9c\xdc\x99\x7f\xd5\xad\x1f\x1b\xb1p\xe8\x96\xd9P4\xfb\x95\xd5\x1a\x89%\x95\xb5$X\xa7C\x8dOA\x91\xc9!r\x8a\x8b\xc3\xfc\x86>\xa7\xa0~\xa8P\xd7>\\d),\xa2\x8c\x9drQL\x1f\x94\xc9\xa1He\xf0K\xbf\x9e\xfa\xe0\xa7\xbe1kA\xd3-D\x8b5E\x94\x89\x07\xf46\xa5\xe1\xdc\xa9\x83\x8fo\xea1\x90\xf2|Xg\x95\xe5\x90\xc8\xf7\x85\x8d\xfdI\xf9\xa9M\xe3`\xa5\xccb6?}\xe9l\xea\xf1\x81\xbf>c\x81.\x98h\xe4\x94B/V\xa7\x81tL\x1c$\xf2l\xb9\xc8\x16\x0bN\xba\xeb$3,\x93\xccX\xfc\xf4\xa2 [\x85\xa5@\xa7\x05\xde))\xd8\x07K\x9a\x9e\x84\xfezM\xd3&\x00\xd7\xcc\xd5\xeb{\xb1\xa3\x0c\xd7U\x95\x06:\xd9\x1bD\x00\xf8m\x85c\xd8\xdb\x11\x11p\xc4\xadKi\xb6\xc2:\x80\x1d\xe7\x1b|?w\xcf\x86g\xf1Y\xf8\x7f\xfe\xb7\x9aU\xa0;\xf0\xc39\xbd=^8\xcah\x90\x8a\x1f\xa4N\xc4\xef/\x0c!\xab\"\xd8@2^\x06\xf2\x06\xf6\x9b\xc2\x13\xd8\xe4\x9c\x87^X\xc3q\xc3`0\x00\x1c|o\x1fv\xf4RJ\x1bw3\x04\x91/ A\xea\x90 \xf0B\xc5\x0d\x85\xbd\xfab\xd0\x10#X\x1c\"\xc8\xf8F\x052-\xa0\xe2\xabP!\x0c\xbe_\x01\x15\x81Q\x99\x84\x87\x98\x00\xe7\xea\"\xee\x8aX\x98R\x02\xaa\xa1\x84\xe4\x95\xa1\x01x\x8f\x07\xcc\xefUkAO\xb3\xe6=\xe5\xbc\xe8A\xf7\xf7\xaeJ\xa0\xd4=\x94F\x9c\xfb\xb5\xe6\xe6UB\xf6u\xbb\xda3\xbe\xd8\xfa\x8caE\x0e\xe2\xb1\x1fr\xe1\xb1x\x86\xd1\x92\x1f\xe3U9\xe3XH\xca%\x186)\xa7\xa0\x04(\xd7\xf5\xd8\xdc\x04%(\x9e\x8b\x02~\x05\x82;\x10\x85r|VP\x03G\xa8\xa8x/c\x0e5\xd4]j\xc9tNi\xbe\x92h\x8ev\x953Em\x9d\x9d\xc6\xb1\xa3 \x87\x93\xa4q\xb7_\x81\xf5\x95\x1f\xce\xc7\xc5}n\xe9Y\xae\x90\x1d7\x98w\xd4t\x9e\x98D\xa2\x94\x8b\x00\xca\x07\xbb\xfb/\x82\x00\xfd\x9b\x11\x02\xb9c\xde\xb7\x85A\x95\xb9\xfe\x97\xc3`E\xd6&\x18\xe4\x8e\xb6\xdf\x16\x04\x15\xd7\xd0\x7f=\x08\xd8\x08\x1f\xb4\x13\xc4\xedA\x13\x00|\x19\xbe\x07Ek\xabm\xf0u\x9e\x8cR\xc8\x01&h\xca\x98\x9d\x8f\x1eA\xf7\x7f\xc4\xcd\x1d\xf2\x02E\xb9\xd3\xc5 \x15\xcf\xbaG\xd5\xdf\x9f\xde\xbd\x13\xbf+\xbcv\xf3R7\xac\xb4\xad\xb9uL1\x10Y#\xe0T\xcc\xc1Q\xdaZ\x8d\xe9:\xa6 \x0d\xd3\xb1\xa6%\x8f\x84Q\xe8{$h\x98\x01\x14\xbdv\xffG\x93J\xb3~5\x12D74\xf6HB\x1f\xd02\xaeK\x9b\xc6\xb3\xf5\xfa\xc1\x8d\xe3\xa2\xb6i\xdc#+\x1a<\xb4q\xfd\xc8m\xeb2\xa7\x0b\x92\x05\xe9Iz\x17\xd01tsxu\xff\xe5\xfb\xfd\"\x8a\xfe\xa9\xfb]c?\xd5z\xbf\x97\xf6u\x1agT\xdd\xc7\xa7\xd5\xdf\x1f?\x1d\xca}\xcd\nv\xd4\x97\x17$HJ\xb5\xdf\xd4\n\x0e\xde\x9d\x1c~)]\xb0m\xe4\x87\x0c\xfc[\x12\x90\xeeT\xa4\x13\xf81\x8a\x02J\xc2\x19\xef\xa3\x96\x9cN\xb2\xa12\x03\xed\x17\x93\x1b\x1dQ0&\xc8\x95\xf6\xa00\x91\x00\x1a\x83X\xa56\xdbXG#Z\xf5\xc5\x81=\x96\xeb\xdd\xa6/\x1d\xc9h\xd7\x97\x9c\xd7\x1b\xc3\xbc\xfe\x1d(\x88)C\xe2\xee\x03\x93\x9c\xd6\xb2\xa7\xed\x14\x03\xd54D\xda7\xb4\xa74$\xbfUI]\xa4#u~\x98\xfe;P:\xae\xb4Q5\xd8Z\xcc\x89\xccn\xf5\xba\xa8\xde \x95'q\xa3ylw\x83\x1bB\xf1[\xd4i4C\x19\xad\xdb\x13y\xdesY\x8eN{\xbdh\xe6\xf6\xa1;\x14\x99\xfe\x8d\xe29j=z\x82!\x8b\x1b=\xbfp\x14\x17\xbcQ\xb5+S\xfb\x90\xbby\xf4z\xa4\x9fb\xe6\xb7\x959\x8ev\xddA\x1a}b\x02\xe9+\x92PG@\xa2\xb1\x9a\x0526\x1c\xab\xc8\x85b*\x15I&aO\x0f\x02\x9f$4\xb1\xe1\xe2t\xb3\x0f\xdd\x0b?\xecjR \xe4\x98>\xedC7\xf2R]\x95\x1c\x8e\xd3\xd1\x10\x13Uy\xbaZ%\x88OG\xbb}\xe8^\xd2\xdb\xee\xf7\xbd\x0b0\x8b\xb5\xe5b_\x08\x90\x1f\xe9\xf2\xf0v\xedt\x7fw&\xe3\xe9Fo6q&\xe3\xe1\xfdt\xb4\xf1l\xc6\x8e\xd8\xf3\xd9\x0f\xae3\x19\x9f\x9d\x0d\xe4/VaJ\x0fgXY\xa4\xc4\x9d\xdc\xe7\x15z\xda\xc7\xc5/\xd1\x8c3\x19\x97\x0f\xf2\xa2\x07^\xf9\xecl\xe0L\xc6~\xb8\xb8\x7f\xcb\xfe\x1d\xbdq\xefyQH\xc2\xfb#rt\x7ftp\xe4\xba\x7fV-\xef1.?&\xedU:\xa7O\xcczB\xad\xf0\xbc\x08\"\xf2]\xc4gU\xbf\xcdoF\x18\xa5u:\xbe\xe0`\\\x95\xf9\xa1S\xd5zo\xf6\xcdy\x1am@\x189B\xd8\x07\xc9G\x08\x03\xe4\x1a;2H\xa3w\xd1\x8d\xdc\xd2\x8c\x97\x80 ;\xc8\xc7 b\x00Og}\xe8\xf66\x94+tdX^\x8a\x13\x86\xdf\xa1\x16\xccH\x1fX\xcdE\xc1{\x08\x0b$\x98\x88\xc3l\xf0\xe1\xf8\xe4\xed\xe9\xdb_\x0f\xcf\xdf\x1e\xbdy{\xf4\xf6\xf4\xaf0\x96\x8f\x8e\x0e\x7f:\xa8>\xea\x0eB\x12\x16\xcd\x1d\x91#\x18CZf1\x04is\xd2/\xe33\xa22\x9f\xf1\x86!\x8e\x95\xd3\x10\xb6w1\xe74\xa2\x07t\x95JN#f\xaf\x9b9\x8d\x10~`|\xf3\x18\xbf(\xa3J\xff\x9dx\x0d\x873\x1b\x9d}\xee\x8d\xa1\xe15\xda2\x1b%Bi\xc2\xf8P\xaf\x1c\xf2\x93#r\xc4\xfa\x82\xe4\xc6O\xbdKp\x8c\xca\x03\x8f$T\xd5D\x8e\xb5\xb5@\x01\x0e\"\x9f^<\xe2\x8d\xe5z\xdc6\x8d\x1d\x1d\x1cY\x1b\xcb\x15\xb5\xad\x1a#G\x1a\x8dl\xe1\xf8l\xdcnB\xeb\xf7=\xa0\xc5v\xfe7\x83\xd6\xdb\xa37\xdf\x0eZo\xc3E\x1bh\xd5)\xd0\xf7\x83\xd6\xc67\x05\xd7\xc67\x85\xd7F#\xc0t\xbb\xbdx}8\x18j\xc6\xa2\x9cKe\xbe\xb7\x0f$\xcf\xe95\x810?\xa6\xba\xb4\xcb\x0e\x14\x1e\x083\xb4\x11\x93\x7f\xd6mC\x8d\xff\x8aj\xfcW\xce\x1e)\xff\xb9\x1b\x8e\xe9\xc7\x9f\xbb\x8d\x1c]c\x8b\x93\xca/\xc6\xbb\x9d\xa6\xb3\xfb)\x9c\x9d\xa5\xb3\x9e[z8V{/\xfd\xe0\x0c\"/\xf9\xc1\xe5\x1c\"\xb6\xf0\x83\xf3\xdf\xf7\x0ec\xc6\xdcj7\xa5\xf7\xdd\x89\xebNJ\xac\\\xab\x1b\xdd\xd4_\xd1$%+\xa3)\xcb7\xe7\xd6\x8a\xb0\xe5\xd1\x80\xdeRO0my\xa9/K\xbf\x03\xbf\xa6\x89\x87b\xb85Y\x0b\xf7L\xfd\xb9\x97\xdf\xe0 \x0b\x96\xcf\xc3\xcd\xb9\xb2b\x12j\x9erW1\xf3>\x8c\xe3(v\xba\xafIJs\x9fZ\xca\xcat\xc1\x99|\x91W\xb4\x97NG3\xce\xfc\xf4\xd2\xe9\xe6\x8c{-\x11\xfesk\xd6\x87N:\xdd\x9e\x15f\xb0\xf4\x06X\x07\x0e\xfbo\xf0\xe9\xf4\x95#\xc0\xa0\xf3\xc3\xf3E\x98\x8a\x1ek\x82G\xa9\xe8\xa5\xd3\x9d\x19\x8fO\xd1K\xa7\xbb\xb3>\xa4\xd3\xbd\x99\x89\n\xa3\xca\x15\x03\xdfN\xf7f\x82+\x1d\xf6a\xcb}\x0e\x8b\xc2\xa7r\xeb\xb9\x0b\x0b4\xf0\xd3Q)l\x87u\xb7\xa8\xd3?\x13z\xa5\xd3g3\x04<[\xb3]\xba\x0d?\x80\xb3;\x84\x1f\x10Z\xc3\x19\xf4\xa0\xe7\xa4\xd3\xd1h\xc6\xd0l(\x95\x80\xb8 \xea\x9b\x1bkW\xc4g0\x82M\xc1\x9e\x85\x8bQ\xd5\x1f=\x02o\x90\xd0\xf4\xd4_Q\xc7\x1b,\xc57\x1760\x88\xa6gCa?LR\x12z\xf4x1\xc6\xeeZph\x96M\xc6\x88\xfa\xdb\x93cA\xd7\x8d\x8e\x00\xdf\x8a\x10?\x90\xcc\xf0\x04\xfc\xdf\x8f\xc4t_\xbcP\xac\"L\xe6O\xdf\x0e\x0c\xc5\xcf4\xbe\xab\x0c\x8b\xc3hg\xdb\x1d\xfc\x88\xb6\xc2E\xaf\xe0\x11dd\xd8L>\x97\x1a\xb4(\x18\xba\x07?\xbez}\xf8\xe6\xa7\x9f\xdf\xfe\xe5\x97w\xef\x8f\x8e?\xfc\xd7\xc7\x93\xd3O\xbf\xfe\xf6\xbf\xfe\xfa\xdf\xe4\xc2\x9b\xd3\xc5\xf2\xd2\xff\xe3*X\x85\xd1\xfaoq\x92f\xd77\xb7w\x7f\x1f\x8e6\xb7\xb6wv\xf7\x9e>\xeb=\xd9?\x0b\xcf\xe2\xee\x03%x\xae\xe4\xf9\x1e+\xf6\xc57\xe0\x06J\x1d5^\x8e3\xfa\xe8\x1b\xae\x88B\x1e\x030\xe4\xbeC\xa1\xed\x9e\xa8\xe3 i'\xb9\xfcK\xa5\x19;\x8f\x06\x08\xbb\xdb\x8d7G)\xbc\x80a\xab\xdb\x1f\xd4\x8b\xefj\x1f\x1b)a\x0c\xff\x01OQ\x01]\xc6\xfb\xaf>:\xa3\xb2\x02cz\x16\x9f\x85\xfb3\xa1\xc60\x03=\xb2.K\x86\x91\x80\xb4\x8f\x12\xf3r\x07\x86;\xa1\xdc\xd3{\xf8\x1c\x18\x94\xc9sH{=\x17R\xf8\x0f4\x05\xe3*\x13~\xa5\x13\x88L\x11\xf0\xf2%\x8cv\xe1\x11l\xee\xec\xb8}P\x8b\x9fVK7wv\xe0\x11$\x8c\xec'\x98\x0e\xe4\xc5\x0b\xd8\x85{\xc8rt\x88$:\xa4\xba\xe3U,\xd1\x10dH\\\x82\x03\xfb\x01v\xf1\x9a\xe6\xab\x86\x04c\x18=\xcdu=\xe5\xb6\x86\xda\xb66E)\xbe*|\x0f\x19h\xd4:\xdb\xf9\x9b1\xa6\xdfX\xc4\xd1*\xff\xe2\x04(\x16 \xbd\xc7\xaf\xdf\xd4~\x15C|0)\x87S\xd0\xf67'm\x11:\xe6n.F\x82b@>\xd2Hk2\x0b\xad1`\xe7V\x05;q\xe7g\xd3\x08\x97\x8f-\xfa\xee\x16\xf2|J\xe9\xa6\xaet\xb7R\xb8\xbb\x05\x8f\x00Mr\xd8\x8c\x9c\x88a\xecS\x17z@\xa7\xa9\xf9R\xb5\x8c\xa0[\xfc\x0e\xf1\x1b\x8f\x08\xc6\xb0Y\xa0k\xa9\x9d\xa1\xae\x9d\xedZ\xe1\x8b\x17P\xedqw\x1b\x1b\x1e\x15\xc8\\j\xb9>\xc0\x17/j\x0d\xefn\x97\xdb\xebC\\F\xbc\xfc\xd7Ws\x10f\x89\xb6\xa6\xff+\x87\x9c\xacs\x08F\x85\xe1\x03\x99\xb4\xc8\xe2\xd1`\xf0\xea\xf8\xca3\xdfd\xcf_\x91\xd7\xb8*\xdcx\x1cP\xdb~\xe3\x97\xd2A\xee%\xccv_\xf8\x9c+\x83\xcd\x1ed\"uh0MgE>\xb0\\]\xcb\x01>\xeb\ny\x15\xd5\xb2q\xb3Q\x87\x88\x89\xe3\x87\x10\xdb\xadx\"\xd1$Jj\x16\x8eB\xd6\xcf\x1a\xbb\x96\x9f/\xb2\xd6A\xe6\xa7\xb9\x0fVM\x98!$\xf9\xa1H\x9a\xc1\"\"[\xb4\xca\xdf\x91#Ny[~!\x83S\xd7O\xfc\xb3\\\x8dZ\xec\xfa/\xdc\xc4k\xe2\xc7\xc9\xbf\xd7.\x16\xbe\xbb\x96\x9dJ\xc4\x8c\x0e\xe2\x98\xdc9\x99t\x81\xcco{\xd8\x16\xce\xbel\x0bg\xb8\x85\xf5[7j\xbdu}\xf4\xe7G\xc3!\x85\xe2^\xd1\xbb\x84\xbd]u\xf17\xb5B\xa6\xe9\x8c\xd12\x7f:d\xe7\x0c\xfe\x9d\xcd\xfe\xe9hoXG\x1dW}]\x0d{&R\xd1\x18\xd6\xd1/\xad#\xd1\xae#1\xad#[-\x82\xab\x15\xd5@\xdc\x07_\xc0.\x12\xb0\x8b\x10vF6\xc6\xff7\xd8\xc1\xe5s\xfb\x81\xfb8\xa1\xc6\x0bt\xbdw\xe1\xf7\xdb\xc4\xd6#\xd6\x0f\xc1\x10\x08L9\xc9\xc2\xbe\xb0D\xccIm8Mg\xd6\xfd\xf2mQ\xdeD\xe9\xff\xed<*\xffH\x9ed\xe1\x9c.\xfc\x90\xce\xbfR\xfbb\x81\xc3\xc3\xa1\xea\xd6\xf2\xcd?T\xa6\xbb\x8e\xfc\xb9\x8c/f\xeb]'\xcd\xd94\x7f\xffn\xae\xd1\x7f$Ob\xba\xa4\xb7\xdf\xe5F\xe5\x01\xca3\x1f\x03\xd5`\xbd6\xe7S\xeeW\xa7\xe7\xb3\x19\x11xr\xf6\xc4\x99.\xfd\xd5\xec\x07\xf7\xcfO\xe4\x05\x87\xbez\xac 9\x00\xd2z\xfa\x89\xd4\xbe\x0f\x8dw \xfc\xc2C\x9a\xf2\x86\xd3\x11\xcab\xf2\x16\xe1%\x93K[\x9c\xd8\xac'4\xeb\x9d\xa6\x85!P\\\xb2 *\x9a\xa9\xb5\xf2\xbd\x8f\xe1\x7f\x0e\xc4\xe56Q\x80\xceo\xe1\xaa\xd0-\x19\x13\xf5\xc1\x001\xbc\xd0*.H\xd3~U\x96\xf9J*\x913j\xbc\x83\xb6&1\x0f%(\xd6\x05a\xb0\xea\x01\x1d$Q\x16{\x14z\xac\xc0\x08X:X\x06\xd1\x05 \xc4\xd5_o\x1f\xbaK\x1e\xb9\xaf\xc8D_\x11\xf5\x9fV\xca3\x9b\xd2\xaf\\5i\xd6.\x94_\x08`\x1f\x9eU\xc8 \xec\xc3\xa8r\xad\xb5\x80}\xd8\xda\xac`\x03+\xdb*\x97\xcdY\xd9v\xb9\xec\x92\x95\xed\x94\xcb\xaeY\xd9^\xb9l\xc5\xca\x9e\x96\xcb\x96\xac\xac2\xbe;\xd8\x87\xed\xcaX.XY\xa5\xdfsVV\xe9\xf7\x06\xf6a\xa7\xd2\xc7!\xec\xc3n\xa5\xbd[VV\x99\xdb +\xab\xf4\xf1\x8a\x81\xaf\xe2\x93x\xc5\xca*\xef\x1e\xb0\xb2\xddr\xd91\xe6/\xacT\xfc\x80\x85\x95^N\xb1\xb02\x95\xf7\xb0\xafA\xfa\xe1\x18\xbaggC\xcdQ\xb4\x87O\x88\xe6\xc9S|r\xa1y\xf2\x0c\x9f\xa4\x9a'#\xdeQ\xa8{4\xc2G\xd7\xbaG\x9b\xf8h\xa1{\xb4\x85\x8f\xaa\x0c\x1d\xfbl\xf2\xa1Wu\xd1\xec\xb3\xb5=\x86\xc7gg\xdd\xc7\x9a\xb1\xf3\xbe\xce\xce\xb4\x9d\xf1\xde\x8et\xcfv\xf9\xd4\xceu\x90\xda\xdc\xe2\xad\xbe\xd3?\xe4\xad~\xa8(\x1a\xcaU\xdf\xb2\xf3\xba{\xd7\xedC\xf7\xaf\xec\xbf;\x9a\xe0w\xf1\xe7\xf0\x84\xfdA\xb6\xb7{\xcc\xff?b\xff\xe3W\xfe-\xc2\xaf\xfc\xffc\xac\xbdX`E\xf1\xe7\xcd\x9b\xeeL\x17U\xe3\x8f:\x9d,\xb4\xb6\x95\xabhn\x82\xb2ou-\xeb\xf3\xc8\x19\x9b;;.\xe7\x85n\xbb<\x80\xeff\xb9\xad\xdc\x1a\x19\xab\xef\xee\xecl\xc9\x172\xf1\xc2\xb6\xe6\x05=\xd7\xde\xe1\x8dlo>\xdb~\xb6\xbb\xb7\xf9l\xc7u\xcb\x11q\xbdhNa\x1d\xf9\xa5\x8c\xb9<\x00\xe2\x8a\xdc\xc9L\x0c\xcb\x98\x92\x94\xc6<\x19\xc3\xf0\xf6\x8d\xf8\xe8X\x07\x1c\xe8'1\xd0\xa7\xe5\x95-\xfd\x92\x87\xde\xd9YW\x84u,\xe28\x0e\xf1\xfd\x8d\\Vv\xa1\xa7\x08p\xba\xc8%G\xf5\xc5R\xa2X\xf3x\xe1y\x98n_\x06\xc9\x961\xa7\xdf\x93\xf4r\xb0\"\xb7\x0e\xa6\x0c\x17\xc5\xf7\xf7\xb0\xe9\xcah\xdfW\xfe\xfamxM\x02\x7f\xce\xdbR~\xab\xa1\xb9\x17At\xf3\x8e^\xd3\x00\x99X?9\x8a\x18L\x97\x0e-\x9e\xb8\xd2\x17I)\x93\xbd\xa4w\x81\x08\xc1]:YMLu=%p\x93Ym\xe1\xdb\xff\x8f\xcf\x06\xcds(\x12\xa2pk\x0d\x9e\x845\xae\xdc\x1b\xa4\xf9\xd5\x0c\x8f\x04\xe0?\xe7ARG\x90\x89\x86X?\xac=\x91\xe4!\x18\xa8>\x97}\xc8xg\x19^\\\xab\x8f\xa6\x19\x1b_8%3\xd8\xaf\x06\xc3\x05E\xcd]\xc6gGA1\x868\xd8b\"\x0d%s\xdc\x89\xe2\xf4\x17z\xc7\xb3\xcf\xe4?\xca\x01\xddC\xfa\x9b?\x97\x01\xd5\xf3_\xf7\xf7\xf0T\x86C\x0f\xa3\x8ft\xc1\xdb\x10_\xd5\x16\xc2\xe8U\xb4Z\x93\xf4=\xdb\xce\xbc\x8eR\xa0\xd6\xf4\"\x86\xdd\xe8zu#@\xa9\x14\xa85\xbf \x84\xbcLOd{\xe5\xf0\xb6\x1cu\x1e\xd3`\x85E\xe4\xfaR\xb6F,\x99g\xec\x0d\x92Ra\xaf\xc0K\xb3\x84\xce_\xabOJ\xb1\xfet4\xe2\xa3v3!\xd2\x8b\xdd\x14\xc1~%\x9al\xea\x8at\xc6\xfc~nc\xc4\xf1\x9a\x8d-Q\x83\xa5\x81\x0f/ y\xeeb\xda\x064`\x97\xd9\xfa\x85K\x1f;\xfb\xc1w\xd1\xec\x87\xfb\x8a\x88\xac\x16\xa2\x83\x04\xb3\xbd\x95\x9e\xb0.ydW\x1f\xad\x86\xf8\xf7P\xd5C\x9c Q0\x14x\xdd\xdb\x87\xc8eC\xec\xedW]\xcb\x04\ngV\x10\xbd\xb6\x85\xe3\xd6\x87\xdb\x95\xe4\xf2\x07H]k\xdb\xef\xea$Z\xca\x1c\x08\xb1\x05\xc3>\xfe\xd5\xbe\x8e\x9f\x8c\x0dmm\x96\xa3T\x8d6wQ~\xdf\x1dU\xc3`m>\xdba\xbf\x18\x87RxP0\x96D\xfc\xba\xbf\x87\x9d\xbd\xad\xed\xed\xf2{\xec0\xdeb\xbfx~\x8a\xbc*+\xdf\xadt=\x1am\x8fF#\xebD\xfef\x9c\x08N\xb1\xd2\x0f\xb6\xcc\xbe^\x14__\x15_\xaf\x8a\xaf\xc7\xc5\xd7\xd3\xe2\xebM\xf1\xf5\xd2:\xac7\xc6a=\xf9\xfd,\xfc\x01dT\x13u\xb9\xe57\xb6\x91\xfe^\x0f<\xf2#cs\xcaE\xbf2Y\xa5\\\xf43\xe3m\xcaE\xbf\x01\x06\x99\xae\x0f\xf2/\xf6\xd0\xebl\x1c\xbej\xe7\xd4\xd1\x84B \x0c\xe5\x0b\xdc\xe9<\xeeG\xfd\xe9{N\x07j\xe5\x8cS\xfd$\x12\x92\x96r\x96TV\x12\x83\xf3t\xde9\xfc0\xca\xb0\xec\xbc\xf8z[|\xbd)\xbe^\x14__\x15_\xaf\x8a\xaf\xc7\xc5\xd7\xd3\xe2\xebe\xf1uU|\xbd+\xbe\xae\x8b\xaf\x1f\x8a\xaf\x87\xc5\xd7e\xf1u^|\xbd.\xbe\x9e\x14_\x0f\xc4\xcc\xcc\x89^49\x1f\xd2\xbaJ(7y\x18r\xba\xaaP\xd9^\xcfv\xb3\xd5\xf9$\xc8\xae\xd2\xbf\xafD\x05\xfaM\xaf\x04f+\xf7\x96\x8d\xfdoZc)\x13\x83\xfd\xc5\xc3\xd4\x0e\x12 \x9f\xe7rd\x1d\xf6a\x01hQ\xcdX\x15\xe4Ya\x03\xde\xe3\xe9\xf2\x92[\xf1vA$\xd2\x9c\xbeg'\xc3\xac\x8f\x88\xe9\x1b\xf4\xdc\xb9P\xc1@\xf4\xb5\x00\xd1n$\x1c%\x0e\xbaq\xa8\x7f2\xb7&\xc6\x85\xdcM\x00\x13\x08\xe1%<\x83\"\xed\xd2o0\xc6\xf2\x9fa\x0c\xbf\xc2\x98\x8f\xb2\x13\xf1\x87\x7f\x871\xfch%m\x7fU\xa8Fu\x85\xe8`\x9e\xadJ\xbc\xb7\xe9.\x84\xdf\xfe\xa6\xd5\xdb\xdf\xee\xe3\xc7\x86\x9b\xd9N\x85!\xe3\xa1\xfd\x19H\xde\x16!\x08\x14W\xd3\xc7\x18\xa0\x1dz\xec\x9b\xfeF\xd9\xcf\xb9\x0b;\xe9\x94\xfc\x17'\xed\xf3$\xc6\xbeH\xdeL\x14\x85\xa3\xd1eY\x80\xb0Q~\x92\x1f)G\xe97\x02\x94\xdcYd\xc0H}\xa6\xd9\x90\x87D\xe3\xd9\x82\xccv\xa8 p\xa2\x9ah6\x9c\xe5\x19H\x15T0\xc5n\x04\xeb\xbd\x0d@\x9e$\xa9\xbe{\x8d\x96\xaf\xe8Q\xfd\xf7F?jM\x06{\x90o\xff\xd8\xf8\xb6\xc0\xed\xc2\xe7\xe51z\xbb<~\xdcuM\xf8\x0e\xb2\xf5_\x9b[\xbfg\xad\xff\xc2\xf3\x04r\xbca\xcd\xfe\xe4|dE\xbe)M\"\xb6\xfess\xeb/\x8d\xad\xb7\xc67(\xcb\xee\xb0\x0fO\x9c\xb3\xb0\xe7:\xd3\xdf\xcf\xc2\xd9\x0f\xee\x93\xa5~W\xa9\x1f\x94\xc9\xb3\x9a|\xe1r\xd9DP\x96\x0c&\x90\xa1\x9aA\xb8U@4\x08H\x92\xbeeo\xf0\xfc\xe0\x7f\xce#\xd3\x0d\xfb\x98\x7f;u\x0d{Z\xfd\xa0\xa8~\x16\xcaP0Ct\xffd$^\xfe6c,\x88\xc9k$l\xf5#b\x0c\xc6\xaa\x0b\xb01\xc1\xa7\xfaam'\xc0\xc3\xbc5O\x04\xc4\xc9\x15O7\x1b\xc6\x0cyJ\x18>\xcb\x00o\x80|\xb6\xd3\x13\xe81Y\x0f\x13\xdc38\x88\n0a_\xc7<\x9f\x1d\xf4\xe0\xcfN\xc0\x85I\xbc\xb5\xb0vf\x8ey \x05*\xfa\xc6J\x9f\x19z\x12\xb7 \xdb\x7fk\xc4\xf6\xc7\x98\xac\xa4\xf9~O~rA\xba\xe0\xca\x85\xa4l\xe4\x91\x84\xce\xb4\xc2\x08\xbd\xe4\x02\xda.\xa0\xe7\x0e\x13\xd7v\xb7F\xc8\x04\xd4\x83\x95\xfa(\x15\xf3wv\xb76\x87PD.\xdd\xda\xdeb\xc26*\xa6\xfepF\xc3Mt`Na\x83\xb7\xce\x93\xc9l\x88\xd7z\\\x86c`c\xbc\xdb\x98\xeb\xbc\xde\x0b\xab\xd9\xde>t\x90\x93\xf9\xe4`Zh:\xf5g0\xe6\xa7\xdc\x1fz\xb74\xf5#\xafSmk\xe6\xf2\x8c\xa2\xfa\x86D \x08\xf3\x92\x95t\xba\xfej\x1d%\x89\x7f\x11\x08\xc7\xf71\xf8BU\xc9\x8d@x \xb2n\x13c\xf7\xd9\xb1\xcb\xf3\xbf\x983K\xc1\xbe\xe4\xd7\xa4\x02\x10\xe3\xafin\x01\xe221)\xc5\x95\xd2\xea/B\xb6\xdfx\x8em\xfd{\x9b\x9c\x1e\xe5\xcf\xd8(\xba\xbd..\x97\xdc\x94\x1b\xfc\xb09\x0b\xbb\xd6\x19\xfed\x14\x84MCf\xb8Q\x90\xd4\x8d\x11\xa6\xf7\xb4\xf6\xf1g-\x14\xd1\x1aAq\xbcV\xc9k\xce\x1bTl\x87UE\x96\xe2CY+:\xae2\x90\x85*\x9d\xc0\x0b\x08\xd8\x1f=\x07\x89\xa2\xa3\xe31)oJf\xee\xa0\x88s\xc0P\xc4\x1b\xe4\xf6\x06\\\xcb\xdd\xf1*5\xba\xdc\xbc\x80aR\x9e9\x90\xd3XY/Z\x80\xfaR\xdeN\xder\xa5#F\xfal\x82.\x95\xea]\x98\x80\x87\xdf\xc7\xd0\x9dt\xfb\xe0\x0dr\xbb\x04\xdb\xb1\xc2\xdaXp\x95\xa8\xb8\x1a\x99b33>\x0e5>N\xdfh>\x91\xf1\xbb\x00\xb5K\xee\x13\xa1\x94\xb03sa\xa1\xe2\x06\x0d\x80\xfaA9/\xa9\xf5\x85\x11-\xca\xf4\x99'\xe8\xf7D\x82\xfe\xc7/1k\xbf\xe0\xfdc \x9eG\xd7i\x82Wo\xfc\x04\xe6i\xc2\x10\x02\x8f\x9bN\x9a\xf2\xb4\xa6\x8b\x19\x9f\x99\xf9\xe41OY\x8a\xc3\xb1\xb6\x8a5\xfe\xb4\xc6&K+\xe6w\xec\xfa\xd1\xffU\xd2\xf1\xf1M_\x95\xd9\xd5\xfb\x83|\xc8a\x9fo\xe5\xb0\x0f\x9d\x11F\xc1\xc9\x7f\x0e5\xd9\x82\x13\xc8\xb1\x847Q\xcd\xdb\x9a\x13?U\xa4}\xc1#\xc4\x95\xa5\xdcjVS\xd6|\xd0\x87E\x1f\xed?\xea\xdeR\x0cAQ\xd9\x91?B\x17\x1f\xf9\xa4\xae.C\x85\x9d\xa3h(\xc5\x8dXqI\x92\xcb\x04\xa1\x8b7f\x85o\x06\x02\xeb\xd1#\xb6\x05\x95\x02T\xdb\xdc\xdf\x83P\x84K\xa5\x02\x12\x86\x97 R.\xfb\xa8*u\x85Z\x8aVn_\xa6\xc1\xcc-\xa0\xdf\xfd!\xa6\x8bs\x86\xe3\x15\xf1\xderQ\x8d\xd3\xc2\xb6;\x9a\xc6q\x08\xba\xf2}\x9eR\xdc\x00W\x97\xaf\x1c\xcf*\xab\xde_\x8aU\x96\xc7\xcd\x04\x9cN\xcd\x96I\xa3!\x92\x9f\xb2r\xb9\xaf.\xb0\xc5\xa2\x95\xdf\x1c\xa7\xc4\"\xe0]V\xeeYM\xb9\xf1\x91\xd6H\x1f\x04y\xa5\xe8\xc2%~w\x9aT\x80J\x0e\xd9\xe2$\xd0\xb4\xa3\x145\xb4\xa8\xbe\\\"u\xf9u\xe7*K\xd0\x92\x80\xc0\x05O|\xc3\x13\x98\xdb\x8c\x10\xa1\xa4b\xe5,\xc4e\xe9\xbe\x8d<\xe72\xd8\xc8E\x95=\x135\xc4\x823\xc8\xf8\x0c\xa9\x1d\x0c\x89$\xae\xb5D\x88\x89p\xca\x18\x9c\xcb\xa9?\x9b\xf5\x05\x8d\xe1\x96\x80\x19O\xcb\xce\xffq\xbc\xc7\xdd\xd5b\x07 \xe4\xc7\xbd\xc1\xbe\x15\x1e\x15L\xf0\x90\x89\xe0e\x1dO,\x1d\xd6,\xe77\x9f\x88 N\x13\xc6\xa8\x8a\xaf\xd0\xc5\x8d\xd7\x93\xaf0\x0e\x83S\x81\xd2\xdc\xd4\xa9$|\x1a\xc1\x17\xf4<.z\x1eC\x97\xe1uo_\xed\xdd$\xedHZk\xa2\xee\x89}&g\xe4K\xda\xe2\x14t\xe4QNG\x90\xc9\xe3\x9d3\xd9\xac\xbe[m[\xb5b#\x914\xec\xd3\xa0y\x9fz-\xf7i5\xa7\xb6\x97\xa3o%\xa7vV\xbf\x8a\x9f\xa0\x00\x8eR\x93\xa0`\xfc\x18\xc2\xbb\xddn\x1fq\x02\x95 S\xb6?\xbci\\`3N\xb63\xe2\x87_\x01\xd22N*\x8dq\x04\xcb\x8a%f2\x96q8\xc8x\xa3eF\xbd\x0e\x17\xaf\xb099\x14R\x1e\n\xb2\xe6Y{lR\x8f\xf5\xee?X\xaf \xeb\xbf\x11\xa3\x9a\xd0\xa9\x0b]\x05\xa9\xeac(\xa8\xa5\xf6`.\x1d-e\xf0~\xc9iRx\x00\xdb03\x93\x98i\xc16\xc5l'4\xd9\xe8\xa8\x84\"D[\x1d\x95\xe4)$4B\x12J\xcad\xa6%1\xc1\xb7\xba\x1b\x0c!\xc4W\x9e5\xb8Xy\xfb\xc2g\xca\xc2\x13\xce!\xcd\x9a\x16\xfd\x9fAF\x1a\xd6\x88\xb4X#\x85\"\x84&\x8a\x90\xf3\xbe\xd3xV\xdeA*1\xf091h\xd8\x8c\xae\xd0U\xb6\x82;Q7\xdc\xb4+S-7\xc2\xbe \xf0\xad6\x9cY\x94\xcc\xb7!\xd7(\x89@\x03I\x93\xf4X2\xd5k\xf4m\x84\xaa*-\x0b\xb98F.\x02\x8a\x9eT\x10-\x801/|,i\x048W$Kz!K/'\x95\xf9\x87G\x8f\xf8\xc5\xa4DbT\xe0\xd6\xc1]+i\xe2K\xca\xab\xc1\xc5N*\xc4\xce\xeeKu=\xfed\xee\xa8.\xd2\xe9D\xb5\xff2+\x03sm\x94.\xd4\x8c\xce\x1d\x87\xc7\xbb\x94-\xa3\xfb\x97\x89~*\xb4\xb3\xbe\xa2\xb9\xe5c'O \xa6\xd1\x80\x98}\xec7\x94\xc0\x14\xa1zO[Xy\x15ia|\xdc\x9c1\xf7ui\xbc\x85\x0fy\xbd\xd4\xed\xf3ce\xe0'<\xb4C\xaa\x89\xce.?Uf851\xc3\xd4I\xa7\xfeL@\xcd<\x12{G\xd5X\x11\x15K\xb8\xc8\xd6y\xc4y\xeb\xb0\xee\xc4\xca\xd0$\xe2dZ\xb9R\xf5\x0d\x97\xa8\x90\xaar-\x82,\x9a\xfa\xd3p6\xabL+\xd5\x98\x03\xe6\xe12b\xbb\xd2\x8fR\xab\"\x9b\xb5s\xc43\x02\xb0S\xe8\x1fUOB\xa9\x97V\xcc2q3\x84\xc8\x03\x85}6GZ\x9c\xb0\x13\x08%\x8b\x85\xda\xcbR\x0e\xf2b\xe7\xe5n\x9fr\xfbR\xaadh\x1f$dA_W\xac\x15,\x96{|\x8a\xf1\x80\xde\xa64\x9c;\xf5}\xc4m4\xc7@\xca\xab\x85'~et_\xe4\xf6\xa3z\xb1Z\x07,\x0d\xe9\xd5\xac\x07x\xd9\xd6q(\xecC\x8f\x9aC\xcaX\xa3\x99\xf3h\xe1\x97i\xba\xd6\x04\n\xe7\x0fo\x12C\x0cq\xd1\xdfS\xc1\xec\xd57T\xd1\xb8\xae \xd9zC\xf3\xdb\xdb[\xf6\xf6\x17\xda\xb1+-l\x8e\xec\x0d,\xa3\xf5%\x8d\xedm\xec5Lr\xe1\x07\xa6P\xebzs\x04\xeda\":\xf9\x16\x98%\x1d\xca\x1a\x83\xc4\xd47~d\xbc\xde\x99S/\x9a\xd3O\x1f\xdf\xbe\x8aV\xeb(\xa4a\xea(Q:\xcfzh\xb2\xc0\x18+\xcd\xceM\x07\xdc\x7f\xc2_\xdc5!{NT\xaa\xf1\x05$\xed\xd1\x9e\x8c\xdcQ\xdc\x0f\xa1\xcb;R\x9d\xcd\xf95\x0dZOO\xd0#\xde\x85X(6\xd1H\xf2\xd1#\x10G\x0f\x0dkS\x8cP\xb2\xdbG\xb6\xa0\xfe\x94'\xf03\xd0\xbe\\\xf4I\xd1O\xf2\x8f\xc8\x0f\x9d\xee\xa3\xae[!o}H\xb9go 2U\xb0\x94.\x92\xd1@b\xfa\xfb\xfe\xe4\xd1\xac\xe7\xeeO\x9c\xe9\xef\x8f\xb8\x95\x04\xae\xfa?>?G(\x86V3\x01i0\x159\xe8\xb4i6\x8fb\x156\xabg\x0b \x9b\xe2\x87\xfc\xba\xd7\x89\xa7\xfe\x8c\xb1\xc9-x\xa6\xf8a\x08^\xf8FnU}\x1a\xb9o\xe4\xde\xee\xb6\xd67rk\xb8\xa9\xf1\x8d\xec\x1e\xde\xae\xa9\x97\xd2\xb9\xaag+W\xcb\x14\xdf\x97\xf2\x93$\x7f\xe2\x87-\xc8\xb8\xe1\xcaL\xdc\x94\xf5a\xdd\x87y\x1f.\xfb\xe8\xc9\xa8\x89\x01\xba2X\xe2.\x0d\xe5w\xa8\xf9-\xafSE\xb5Yl\x8a\x92?\xf4\xe9\xdd\x9ar\x9fh\xa2\xe6R\x06\x950\\\xe8\xcf\x10\xb9+\x03=\x02\xe1\xddK\x1du\x04.\x04\xec)\xec\x8bh=\x1c\x10)W\x1a\xd3\x01Y\xaf\x83;'\xeeW#>}6\x0c\xf0\xdc\xech\x8f\x16\x12\xb0\x01\xe6\xfc\xedJ\xbc\xa0Kn\xb7\xf2R\x90\xa1P\xdei\xa0\xe8\xc0Z\xb9f\xcf\x16\xad\xc6t\xa35\x97dC\xa2\xb8\xb3t\xbbj\x01\xce\xb9\x9ac\xe3\x90\xed\xe0Z\xb59\xec\x83\x08\x05\x1fe\xa9s\xd3oa\x94\"A\x91\xc2\x068\x08\x0f{\x00\x88%L a\xdc\xdaB\xbep\xed\xd6\xf3s\x00ga\xabn\xdf\x06\x88\x1cZ\x1d\xad\xe7\n2\xa0Av\x00\x13\xb8`\xaf\x8c\xf9\x9d\x8e\x8a-5 M\xdf\xe3m\xd3\x1a\xe81\x97\x01\xea\\\x0bz\xb6Bl,$^f+\x1a\xa6 \x0f\xe4\x9f^\xfaI\x1fo+\xa8Ei\xc2^V\x90\xad\x10\xbf\x9b\x97\x0f\x14t\xe5\xbd\xd4\x91\x80 $\xab\x02fkmC\x9f\x1d\xd3\xc2\xb3\xd1-]u5\xea\xcd_8\x97m\xe4\xf0\xfa\xc6BSyG\xd7\xa8\xdb\xaf\x8cT{r`\xaa\x0bF\x85\xee\xefQFrB\xae\xfbA:\xd9a\xe7-\x99\xfb\xe1\x92g\xdap\x18\x95\xec\xae\xc8\xedo\xc4O\xbbty\xbb\xb5PS\xe5~p\xa2{#\x97u\xff@ *\xdd\xeb9\xe1-]B\x0f\xab\xac\x05\x82\xe43\xa1\xaf\x0f\x9d\xd8\xa9\xc4\xcd\xccs\x08\x15\x0c\":`\x8c\xc1#\xe1\xe3\x94\xcd\x0dH\x02\xb9|\xd9\xa9\xd8O~\xd6\xef\xd0\x1a\x80\xc6\xa0]\x14\x14-\xba\xe7\xe7\xd8\xfe\xf99R\xe4\x7f|\x86I\x15LZ-\xa89\xe8\x16\x8fC\xe7l?s\x1di\x15\x85\xe2`\x9f\x81vw\xe8\x0e\x16NUp\xee\x832\x0c\\\xbc>l\xba.\xeb\x7f*\xc3\xd9u\x1c\xaa\xda\x8c\xa1\x9aM\xe78\xd5\x14y*\xd5G\xcd6\x9e\xb0*0\x8cl\x87\xa8\xebK%\\\x8aFx\xf9\x9c\xd0\x1cM\xd0@\xf6\xb8\xae\x06\xad\x9a\xc1\xfe\xe33\xbf|\x19\x8b\x83\xa6\x82z\xde%\xf5\xae\xc6\x8aEv\xebM\xab\x92\xf5\x02\xe5\x8b\x8d\xdb\x82\xe8\x1b\x8f\x1d\x0fC6\xf0:\x0f\x1b\xd9\x97\xed}\xde\xdf\x18\xc7\xff\xcc}\xe0~oV\x1a2p\xed|E[\nx\xab2\xb4\x90\xad\xf7\xb4I\x88\x9d\xad\xbd-m\xdc\xa1\xa7\xba\xb0C\xa1\xb3]\xad\xcd\x07\xfft\xbbZ=\x10\xe5\xd5\x83\xc0\x13\xbdVG\xb9\xe0\xf5w\x86\xa5\xd3\xf0\x99\xf2+\x1a\xf8![\x1a\xa7\x82U\xeb\x1a\x19Z\xf8\xe1\xfc\xf5\xf1\xfb\xa3hN\xc7Ui6\xa6\xe1\x9c\xc6c\xf0\x07\xfc[e\x92\xe1*\xca\xc24\xd7\n\x1d\xa4\xbc\x11\x7f\xa0\x7fR~\xfb\x9a\xc6\x89\x1f\x85cH\xaa\xad&x\xc3v~\xc1\xe8\x05\x9d\x7fZ\xcfIJ\x931d\x83r\x89\xe15>\xd2\x93\xec\"\x8d)}\x1b\xa6\xd1\xab(L\x89\x1f\xb2y\x14\xc2\xabB\xa1\xf5\x91\x1a\xcf\xcf?\x1e\x1e\xbc:=\x7f}\xf8\xeb\xe9\xf1\xf1\xbb\x93\xf3\x9f\xde\x1d\xffx\xf0\xee\xfc\xe7\xe3\xe3_\xce\xd1CWk9e\x7fM,\n{\xbbU\xc5\x8ar>\x87\xe7iL\xa9.i\xf8\x92\xa6\xaf\x82(\xa1I\xfaV\x10\xe47q\xb4\xe2\xab\x12\x0f\xccO5\xba\x16\x8aK\xc6*\xc8\xcaM1\xc3@\xb9b\x18\x88e\xa0\xf3|\xcc\xfc\x02\x921\xfbR/\n=?`\xcb_\\h|\xaepH\xeboAL\xf6\xf6\xaa\xd1\xca$5\xa9\xeewNM\xf6\x9e\xea4u\xac\xbc\x1a\xdd,\x13\xe5U\xaa$\x88\xe1\xd3j\xbf\x81(\xaf\xf6\xcb\xe9\xc9\xde3==\xa9\x11\xc35'3\xa3*Y\x9a\xf3\xf2\xcd\xea\xe1w)\xcaG\x95\xf2kQ^\x9d\xeeJ\x94W\xc9\xe4R\x94W\xc1p'\xca\xab`\xb8\xe0\xe5[\xd5\xf6\xcfEy\xb5\xfd\x1bQ^\x9d\xef!*\x18\xdb\xf0n|{6\xc4\xce>D>\xeeP\xb8p/\x07\x87\xd74L\x0fW~\x9a\xd2Xl\xf0\x8f\x94x)\x96\xbf\xf3\x93\x94\x864vVn^\xf7C\x90-\xfd\xf0\xe7\xecB\xd4V\n\x8f\xe39\x8d\x1dR\xad\xfb)\xf5\x83D\xd4.Q\x0bga\xab\xcaj\x9c\xc6\x84\x91d\x12\xa0\x80\xde<\x82\xe4\xc7\xbb#\xb2\xa2\x9a\xfbC\xf69\xf1W\xeb\x80*\xd5\xc7pS\xa72\xecs\x18\xa64~G\xc9u\xb9v\xa6\xaf\xfd\xea\x92\x84\xcbrMCv\xb3\x13\x1a\x94\x07<\x86s}\xcd\x1f\xe9\"\x8a\xe9\xdbp\x9d\x95\xab\xd7]\xb4>#d~\x8e\x92\x02\xb8\x020?\xb1\xb5\xf3\xbd\xbc\xf8U@\x92\xc4\xf1\x8c\xf5O\xe9mZ\xa9|\x89\x95_\x1f\xbf\x97\xd7T\xa2\xaaR\xf2*\n\x17\xfe\x1235\xb4\xab\x99\xb4\xaey\xc1\x17}\xb5f%\xe5\xb1\x96\x0b\xdf\x10/\x8d\xe2\xbb\x16\xb1>\xa5\xc2\x81\xde\xc0\xba\x1a\x98\xb2\x80\xa68\xcd\xf3\x0d!\xc8\xf5iL\xc2\x84\xf0\x1e\xee4\x15\x7fd\xbc\x80\x1f.O\xd2\x98\xa4ty\xe7\\c\xa5\xda\xd8\xc3k?\x8e\xc2\x15\x0dS'0K\xf3\xf8\xed\x8b\xc8\xbf\x99F\x08\x00\xfb\x8cw\xa9\x03\xa8Kb\x9flxY\x1c\xd30\xed\x8eu\xf7 \xbc\xca\x9c\xa6\xc4\x0f\x12k\x15?a\xac\xcf\xdcV\xe7\xd2\x9f\xcfih\xab!\xfc\x02mU\xae\xe8]r\x19\xc5\xa9\x97\xa5\xd6\x01\x05\xe4\x82\x06\xb6\nq\x14\xd09M\xbc\xd8_#\x07e\xa9J\xb24\xf2\"FMRj\xab\x87\x92\x97\x1d\x06\xf4vM\xc2y\x03\x9cH\xb2\x8e\xd6\xd9\xda:=zm\x9f\xde*\x9a\x13{\x05\x19\xb5\xbc\xb1R\x82d\x8c-\xaf\xadj\x14\xfb4LI\x13,\xf1\xce\xfa2\n\xe64\xb6V\x8bi\x92\xd8\xc1\x14S2\x8f\xc2\xe0\xce^\xe7o\x99\x1f\xdb\xdb\xe1\xd3k\xa8\x13\xc5\xd6\x1drM\x82\x8c\xae\xc8ms\x1d\xdf\n\x1d\xac\x13F7\x8duRzk\x1d\x10I\xa3\x95\xef\xd9j\\d\x89\x15t\x81\x7fm]\xef\x98\x06\xf4\x9a4\x10\x0eF\x7f\x16\x0b&\x9f[j-crqa\x87?\xa3\xc2\xd7\xb8]i8o\xe8\xd4\x8b\x02\x8f\xf1\xe1\x0du\xd0P\xae\xa1N\xb2&\xd6\xe5\xf2\xa20\x8d\xa3\x06\xca\x884\xe6\x82\xce/\xac\xe0F\xcf\xe8\x15M\x12\xb2\xb4\x82}\x11D7id]8F\xf9\x82\xa6\xfe\xa2\x9b\xd0:\xecu\x94\xf8aB\xadP\x8c\xa3\x9bFH\xc7\xd1M#\xa4\xe3\xe8\xa6 \xd2 M\x13\xff\xef\x08\x99R\x8d\x8a\x00\xf6\xfa\xf8\xfdA\x9a\xc6\xfeE\x96R\xc6\x1a\xb2s\xaf^E\xf2\x1dy\x8d\xbc\xc2W\x9c\xc2\x8aFgX\x95V\xc4\xd5\x81^\xa3\xb3\xb7W\xad.e\xb0\xaap#e\xb0\xaap\x83q\x08\x9f\xf5a\xb4\xd5\x87\xcd\xbd>lmV,[\x990\xb6\xb9\xa9 \x14\x1d\x0d<\x12~J\xe8\xeb\xe3\xf7\xa8O@\xde%\xf1\xd9\xcc\x91\x0fE\xbd/O\x11Q~\x19\xc5\xb5R\xda\xfcjS\xf3\xc8\xc3+\xda\xf7\xd1\x9cb3\xb2\x00\xa4\xc3\xa0,\x18\xa8U\xab\xca\"~\xd3Zm\x9c\xf1\xae\xd5\x01\xb2\x07\x1d\xee\xb2\xe7\xd4\x0dk1\xf5\xbbHv\xc1V\x9f\xb8F\x05\xcaz \x14C\xac\x06\x9a\x07\xbd\x0dS'/u\xdc>\x8c\x86.\x8f\xe7\xa7\x11?+cu:\x1e\xc8HT\x0b\xc0\xec\xbe\xec\x0b\x86\xe4\xabL\xf6Z\x13\xa6{\x95G-\xc5t\xbc\xaf\x84W\x03\xe35K\xf5\x96\xdax\xd2\x17\x85\\\xa1\xe3\x00\xd9g}I\x12:\xffH\x97~\xc2\xf8X?\n\xe5\xb6\xd0Vg\x9f\x8b\xec\x82\xf1zc\xe8F\xa1\"\xb9X\xbc\x10<\xb2N\xb3\xb8\xfe\xca+^^\xb7\xe5\x87\xfa\xde\x96\x9f9]\xd3pNC\x0f\xd9\xdai7\x8d\xd6*\xda\x86\xf3n\x1fX\xe1/\xf4\xee\x03\xe3\"\xc4O\x862b\x98\xf8\xfb\x03IR\xda\xd5$\xe5\xab\xf7\xea\x95\x9a\xffN\x80\xac\xce\xa1\x1d,\xcbo}#p\xfe\x18d\xb1\x80\x92 \xb2\xaf\xa3\x9bP\x0f\xe7_\xe8\xdd\xa7\xb5\xf8\xfe>\xca\x12\x8aU\x1f\n\xe7\x93\x94\xc4\xdf\x0be_U\xba\xf9\x02X\xe3{\xdf\x15\xdabd\xff,xs\xc9\xf6\xfb\x03\x9c\xf7\xf3\x05\x10\xe7/~W\x90\xcb\xb1}C\x98\x97J*\xe3\xbb\x13\xaa\xbe\xbc07\x9b\xba\xd0^\xa5I{r\xad\xb2\x83[C\xe7C\xb3ZD\xd7r\xf7\xa2G\xc5\xab\xf2\xe1\xabk\x18gim:o {\xd0D\xd3S\x9b\xe3\x105\x19\xa8\x97@k\xa9\x84ki\xb7\x00\xd7\xc4\xac\xb3F0j\xb2\x1c\xd7ymhL \xafe\xde\xb7\x01W\xa0\x94G!:1\x05A\xe9\xceIJ\x90\xbbIa\x02\xe9\x80\xfd\xac\xdeI\x14#b]\xdd\xe4,Y}t\x87\x92\x8f5\x84\xa6\xcd\xfa\xba\xd8\x0e\x1e\x86l\xb3\x99FC\x13^\x82\xbaT5\xf2\xd6\x18\xf3k9\xa8\x9e z\xe39]\x17\xec\xbczX\x07\x87\xe1\xbc}\xf3\x82Z<\xac\x07\xfeR\x13\x9d\xe0\xd7O7\xdc\x96\x10\x85\x8fG\"J|u\xb8h=\xd7df\"1M\xd9\xc4\"\x92\xd3\xa3G\xca\x8e-\x07\xba\x16\x031\xf7\x8e\xab\xe1\xf6AI\x18^\x16\x08\x00\xf9a\xf6.\xc6q\x17\xe1{kMp\x1c\xab>:\x0c\xd1j\x8f\xe7\xa9c\xf2\xcd\xcd`I\xd3\xd7$%\x8e\xcb\x81\xb3\x0f>\xdawEQ@\xe7NTu\x05`X\xbd\xc0,\xc4E\xa5\xac\xd8\x03udO\\X\xf0]V\x8bsbp\x05\x95\x97\xd9\xe7Z\x7f\xfb\xdc\x92GDH\x91m\xb7qn\x8c\x07\xc4\xf3\xb2U\x16\x90\x94\x9e\xdeD\x1f\xd8\xf1\xfb\xdaO\xd6x\xf9\x9c\xe0E\xca\xc2J\x8dn\x1b\xf6;\xa9\xcf\xbf\x83\xd1\xa2\xe6U\x13\x9fo\xb6\xe3[m\xc7s\xa7\x1a\xb0F~\xda\x1c\x1c\xf2\x93\x1fF7\x97\xbew\x89\x8bp\x0d\x13\xbe\"cp\xee\xc4u\xd8\xaa\xa9\xabBd0\xf7\x95\x1bv\xe3\xfa\xea\x1b\x04\xe5&\x02Q\x1dc_\xdf\x15C\n\xf5\xef5\x86\xd9S\xf6]3M\xc1\xad\xdc\x82\\0d\xb81\xad,:5\xd4\x17\xb6\x88\x0c\xd7\xf1\xd8\xdc\x04\x07cj\x05\x14\xc0)\x1b\xbb\x11z\xfe \xa6\x01% un\xdc~~\xe0\xf5\x0d\x01,\xf5\xae\xce\xeda\x06\x0fBu.O\xb6Z\xabo\x8e\xe1\x8f\x1eA\xa7\x85iD\xe5m\x87\x0e\xbc4\x0e~\xa1w\xb8\x1ayJ~\xd8\xd0\xd1\xa2\xcf\xd1s\x80\xf2\x83\xf7\xba\xf9\xbe\xb9t<]XD\xa8\xb1\xa8\xf8*\x1b \xba1\x8b\xdcQ\x1a\xda\xd6HX\x01J\x810\xc1\xaa\xac\x96\xbc\x0d\x1d\x9c\xdf\xc4d\xbd\xa6\xf1I*\xb2~\xa4\xe5\"\xf3\xd5\x01gT0\xd0\x980\xd7\x0d8\xaf\xd3\x0d\xb3\xd5\x05\x8d\xf3\x95c\x0b`\x19\x0b(\xacw\x97\xe7\x8c\xc3\x03\xcc\xdc3`\xf4\xb5%Ms\x93TG\x9cyn\x112\x17\x1d\xefk\x15\xb4+\"?\xfa{\x8dz)\x9eB\x81\xd1\xe1D\xafp}\x8f\xa5_)*\xef=\xd595\xab)\xde#q\xa4\x8a$\xe2V\xb4i\x197\xd5@\xe0\xf8\xe5\\L\x17\xf5\x85\x928\x18\xd60\xd7\xe2\xce\xaf\xcfV\x00\x13\xa0\x0e\x0f8\x92]\x04\xbe\x97SMd\x02\xe2\x01\x99\x17n\xa8\x07\xc9G\xba8\x8d0m_\xbf\x1ab\x0bp\xe1B.\xc8\x0d\xce\xa3\x9b\x90Vc\x96\x16K\xc8\xc4\xb7\xe42\xca\x02!\x06\xb5\x81\xa6\x84I]r\x03\xa9\xae\xac]a\xe4\xd0\xa7\x06\xe8c\xb9\xc8\x86\x16\xd3\x85LL)\x86_\xbf\x0f\x89\x8c\x03\xf0\xb5\x03P.W\xecX\x90\x13\xcb\x94\x8f\xc3\xc7\xafb\x1c}\x08\xf1m\x0c#\x9eG+,\xde\x8e\x90\xc0\xf1\xbdY\x062g\x89\xdb\x80\xf7\xff5\xc8\x8a<;\xe2fLW\xd15-\xa3';\xf9\xbf \x82~\x075\\)\xe2\x80Q\x03iP\x8a\xfc\xe6\xc1^\x0b\x13G\xedR\xa7\x91Xh\xf3\xfb\x1e\xe6\\\x9a@d\x89\xfc\xe2\xac\x8d\xc1V\xd8\xe73_\x81 W8z\xe6!\x8b\xf0\xa0\xfb\xfb\xe0\xb5\xc4\x94\xb9h\x16D\x92\xe4\x04\xc6|\xb05\xf5G`\xb8\x96\x07\x19uD\xb4\xe2Y[\xf1,\xad\\WlZ\xc9\xa0 P\x88\xd0\xb8S\x0ds\xc9ov\xf0\x9d\x80S'V\xcc\x17\x0c\xd3`]WVq_\x17\x95\x17\x04dV\xfa\xd1 \x81\xc60\xca\x96\xd1\x08\xd0\xaf\xca\x83\xa2\x9c\xb6\xb3\xe2\xbc\x7f\xf6\xab:\xa8y\xd9\xce\xa98D\x95{\xa9\xeb>\xac\xf8&w\xfb0e\xbf\x1a \xa9\xfe\x8c\xcf\xb0\xf4+\x0f\xd2Z\xf4\x1bv\x8e\xca\x00+~\x14\x0e\xde\x7f:9=\xfftrx\xfe\xe1\xe3\xf1\x87\xc3\x8f\xa7\x7f\xad\x9f\xafj\xf5\x9f\x0fN\xce\x7f<>~wxpt\xfe\xeb\xc1\xbbO\x87\xf5c\xb7Z\xfd\xe8\xd3\xfb\xc3\x8fo_\xe9\xaag\x9a\xea\x1f\x8eO\xde\x9e\xbe\xfd\xf5\xd0\xf6^\xa2y\xef\xf8\xd7\xc3\x8f\xef\x8e\x0f^\x1f\xbe\xb6\x0d0\xd0\x9eR~\xf2*K\xd2h\x95k;\xc6\xf0\x91.\x0fo\xd7J\x94\xfc\x94&\xe9\xe0\xc2\x0f\xe7NHo\xc4c\xa7\xfb\xbb3')\xb9'\xb1O\xdc\x0d\xcc\x01\x14\x0f\x0eNO?\xbe\xfd\xf1\xd3\xe9\xe1\xf9\xd1\xc1\xfb\xc3\xf3W?\x1f|\xc4\xbc@?\xfc\xb9\xab\xcb\x1ao\x0f\x85\xc1><\xb3\x8e\xd6\x07\xb9x\xfc\xea\x92\xc4\x185\xd1R+I~\xa1w\x96\x1a)\xc6\x1c3=\x0e\x82\xe8\xe6M\x16\x04'^L\xa99\xb6\x0c\xd6\xc3\x08%xjx\x96\x0e\x03\xcbp\x13\xcb\xa3\xbb\xd03w\x9f\xa5\xd1+\x11\x12\xc3\xdcD\x96F\x1f\x02rglE\\\xec\x9b\x9f\xd3 \xf8@\xe6s?\\\x1a;auN\xd6\xc4\xb3\xd6\xb9$\xf1\x89e\xd5\xbcK\x12\x04\x14-\x1c\x8c50\xb4\xc7\x18\"\xb87\x8e\xd6\xb7\xc0\xc2\x0bH\x92\xbc}m\x7f\xceYLS\x8d(H\x8cA\x89\xbc\x88\x01\xc1\x8cV^\x14\xa64\xb4@\x80??\x9c\xfb\x18\xe8\xc3^\xef6}O\xc3\xccZ'\xc6\xc1\x9a\x00%*\xbc\xf3\x13\xdb\x88\xa2xnFO/\x8e\x92\xe48\xf61L\x92\xa1\x0e\xb7\x0c2?\xa4\xa7\xbe\x05\xdey|\\\xc3,\xe6t\x81\x81 \x0dO\xfd\xd8\xdc\xb2\x08\x96c~9\xba \x83\x88\xcck\x91 \xf3\n1Y.\xad\x0bEC\x8f \x04\xc6\xe7\x8b(^Y\x1f\x1e\xd8\xe9\x14\xabr\xd8\xa2\x8f\xf74\xbd\x8c\xe6\xd6*G\xd1\xaf$\xf0\xb9\xff\xa9\x01 \xac\x1a\xe7\x0f\xcc-\xc5dE\x7f\x8cb\x8c\x16i\xa8sI\xc9\x9c\xc6f\xa4\xba\xa4\xfe\xf2\xd2\xdc\x05\x0f`d\x1c\xe4\xa5\xbf\xbc4\xbf\x1b\xd3\x85\xf5\xe1;b!`\x97\xe9*x\x13Y&\x96\xa6\xeb\xc3\xbfe\xfe\xb5\xb1\x86\xefY\x16\xd37/\x10\xden\xbd\xc7\xf0\x8d\xc6\x1a)]\xc6~j>\x81|3\xc4\xaf\xe8\xdd\x07\x12\x93\x95\xb5\x86\x15\xc9\xae\xfc\xd0d\xeet83ov*nd\xd9$e\xba]D(4\x7f2\xec\"~]\x19\x95\xea3\x08a\x08|\xda\xd7\xed\xbe\xca>3$WK\xbe\x052\xd5\xd0C\xe4\x87xVE2\x11\x9b\xf4\x99>?\x84.\xd9L\xac\xac\xe8\xa40\x9d\xe7\x89x\x04\x85r\xbas\xff\xfa\xffa\xefM\xdb\xdb\xc6\x91E\xe1\xef\xf3+`\xde9ij,)\x96\x9d\xc5Q\xe2\xf6u;\xce\xe9\xdc\xc9\xf6\xc6N/\xa3\xf6\xf8\xc0$$\xf1\x84\"8\\d\xbb;\xf9\xef\xef\x83\x02@\x82d\x81\xa4lgf\xeey.?\xd8\"P\x00\xb1\x16\xaa\n\xb58\xfa\xbe\xb7\xb9\xf2\x1e\xfe\xfd\xb7\xf4//\xdc\xdf\xae\xb6\x07\x0f\xf1Q\xe8\xa5\xdbX\xbb\xca\xcf\xc5\x9a\xa2\xee\xd6\x04\xd1DL:\xfd[\x91\x8ab\xf8\x8af\xde\xd2M\xdb/>\x01Ug\xb3\xc9yU\x1f\xbc9\xf1\xa8yVH\x94np\xe0\xd6u'\xe1\x82\x1bkd4\x0e\xa2\x88%b\xbb\x08\x9c<\x9b\x9c\x93m\xc2\xc86 g\xbb\xc8\n/B\x1a{\x00\xbds\xfe\x9cx\xa3\xd1\xf3\x81\xd4\x0c\x1d\x874\xcd`\xe1V\x17\xa6\\\xda\xd5O\xb1\xe6\x90\xce\xb5B\x98\x9a\xf4\xf4\x87\x9b3\xba\x80H\x0d\x8e\xf4\xb7^?a\xe7:`\xb3\x8c\x16\xadgkH\xb8;\x1f\x8c\xe7<9\xa1\xde\xd2\xcd\xeaF\x80E/br \x83~\x81\xfa\x89\x1b\x8d=\xd1x\xb1m\xd3\xc1s\xb3?\xa2\x87Z\xdfQn\xe42\x0f7\x99,\xf1\xfc\xd7\xfb\xd8\x7f\xfb\x96\xcdm_\x82\xaa\x1d\xedkT+7nI\xcd\x1cTC\xb7\xaa\xd0x`\x86#~\xf0\x808r\x06\xc05\x03T\xb2\xe5:)\xcb^G\x19K\xd64\x94\xe9\x83\x8a\xde\xbc\xa9\x13)p\xb3 \xcd\xe1\xf3r*\x82\x14\xfe\x8b\x06\x8bO{4\x0c\x19S\xf5\x83\xa9G\xc6V\xaa\xda\xea2\x13%\x0eI\xa3\x12 \xa2\xc0\xf6\xbf\xdb\x98\xa3\xdc\xaf6\x7f b'\xe1\x0d\xd5c\xb7U\xd5n\xb6\x85r\x86\xc3\x08\x16+20\x99\x91\xad\x0c.\xc1x\x81\x8c\xc8\xa4\x18 ]\x1c\x9d\x9c\xb1\x1c7\xa3\x9ez(\xf9AK\xbc=\xb5.d?\xcb[v\x18F\x15\x87\x1d\xc1Jf\x9c\xbc&UX\xec\xbaH\xef:7\x13[U\xfa\x9e\xe0\xe4\x05\xc9\x9e\x13\xbe\xbd= \xd1\x8c\x9f\x8bI\x98q\x04\x05i\xf5\x9c\xe6\xdcO\xc9\x8c\x9d\xdf\xef\xb6\xb3\x1c{XP\xa4\xbb\x1ec\xa0\x13\x89h\xed\xcd&C\xf2\xdd\x0b\xc9\x1f\x16\x02\xec\x03'Kr\xe6|\xff\xdd\x908/\x1e\xca\xcc\xef\x9d\xf3\xe6\xc1(J;/\x80\xb1\xfc\xde\x01`\xf5\x1b\xf1\xf4=\xdb+a_d\x97\xdc\xbf\xf9\xfeE\x96\xe8b\xc9\xf7/\x1e\xaaDK\x1d^\xd9\xda\xf5\x82\\\xaf\xc2(=\x00\x8eo\xfa\xf0\xe1\xd5\xd5\xd5\xf8jo\xcc\x93\xc5\xc3\xdd\x9d\x9d\x9d\x87\xe9zQ\xb4~\xbdhT5G\xa9x\xe7/\xceT\xf6\xe8\xf0\x85\x1f\xacU\xcb\xe0\xd7y\xf38\xa4 \xa3\n\xfc\xc5\x8a\xc6\n\x1a~!\xd0\x1e\x0f\xa7d\xb6\xdb\x1c\x01\xddi\x8f\x87\x8b\x84\xe7\xba\x9e\xe2\xd56\x1a\xe2 \xd9\x82E\xben\xc4<`\xa1\x9f\xb2L\xd5P\xbe\"%c\x9a\xd0\x95.(1\x8b*\xa6_\x90BY\x82vAM`\xeb\xdc\x11y\xb7\xb0\x90\"wDn\xcacy\xad\x8bdyT\xe5!l\x92\x1e&4\x13\x9a\x84\xe7\xcc9\xcf\xf0\x9c%\xb3\xdcog~#\x08\xa0,0\xad\xbb\xa7,w\xfa\xcc\xf1\x82\xc4\x0b\x81\xc5\xf5\xc2 \xfe@\xb3\xa5\xf8\xed\xb39\xb8n`a\x18\xc4)d/\xc4\x9f`E\xa5\xaf\x07\x08\x80\xa2\xfe\xd3\xe4?\x13\xea\x07,\x02-\xdd\x15M\xc1\x03D\xac\xaaR72\xf0\x93\x877\x0b^\xfc\xd4u\x88\xc244\xebHddJ'\xcd\xb8\xf4\x0d\xc1\xae\xa5\x060\x84;8/(\x1b\xfba6\x07\x0f>\xc4\x1b\x12*\x7f\x99\xc1xk^N:i\x88@\x9c6\\\x9e\"\xf3\xda)\xa2N?p!\xe4\xfcEpV\xd4\x02\x11T\xe8?\xe7/\xa5m\xb5\xf3\"\x0c\xa2\xcf\xe4\xe1\xf7\x0e\x99\x12\xe7\x85\xa3HP\xe7\xfb\x17\x0f\xcb\xdfN\xd9\x95`<\x0f\x12M}\xa9\xe4C\xd9e\xd4\xd3\xed]\x0f\x01T\xc8`Qwoe~q\xe1BO\xeeW\x1f\x9d\xb8\x82(\xe6\x83\x99\x80\xab\n%\xfb\xd0\x0e/\xa2>\xac$Nl\xde\xc1<\xa2S,\xd1p@\xa3\x19\xc9z$=-\x97\xa8\xcfI\x8eK7R5\x85x\x9c\xc1\x86\x02\xa6\n[\xfa\xa4\xce\xbe\xaa0\x83\x0dW>\xb1\xaa\xbe\x9e.\xe3\x0cN\x1e\xd7;+\xe3\x0c\xee=\xae\xc3\xaf\xf1\x15\xa5\xc2\x0c\xee\xd4;\xab\xc2\x0c\xee\xd4 \x91\x1b\xd5\xfc\xfa`\xaa0\x83\x0d\xbb\x8d\x0b)\xb5\xd9{6\x18B\xb8\xc4\x9d\xba\n\xa4\x8a7\xd8\x18\xbe\x13U\xf0\x11\x14\x9c\xf8\xeb\xebB\xa2`r\x0b\xa2\x85\x16{\xf7\xa8\x10\xf9;\xe4l\x19\xa4D\xd0\xf6\x82c%W4%:L,\xb9\xbc!\xff%\xce\xa9H\x9cS\xff5Fn6\xfed\x7f\xd3\x1f(Ka./\xde\xa1'\x83\xb4Z\xfd?36\xbe\xc8\xe8\xe2\\\x1a\xd7(s\xcfl\xac\x97\x85\x1e)\x99jY\x0c\x8a\x1fu&{O\x1dA\x1d\x88\n\x87\xf6\xc1?$\x0e\x81\x0btA\x8f\xa9\x91P\xaa;\x84\xcf \x9c\xda\x96\xb2\xe5\xc0\x8b\xe1\x1a\xc3\x91\x0f\xf6\x89]M\xb4uO6\xfc\xc9\x0eHu\x11\x9b\xd9\xb6\xfa\xce\xc0\xa3\xa4\x15B\x8a\x94\x9fL\x9cA\xa5\x81p\xcf^1\xd158\xf72W\x14\xddu\x86\xb0\xec\x07\xed.M>\xb6x\xdc\x90N\xb6\x133P\xfd\x15\xea!\x19\xf1\x88\xa8m\xa6\xd9\xf8b \xa1!\xda[\xe4\x05\xac\xf2\x07\x0f\xf4\xcfRN#h\xb6\xd7`\x99#a\xa6\xe2W\x87 \xd3\x91\x9b\x0dI\x00>\xb2\x16L\x06\x8e\x85\x88\xc7\x1f\x19\xf5o\xdc\x81v\xa6\xe5\xbe\xc4\xee\x0e\xa0QQ\x9aM \x12\xeb\x99\xa0\xb6v\x16\x97\x9a\xa1:3\xa6\x88\xdf\xe7\xafVKQd\xb6^6\\ \xcd\xc7q^\xc6\xc1\x05\xe7\x92\xa2\xcd\xca\xcfd\xbd\x85*Y\xb7\xa7}i\xbci|l5\x8ey*G\xf0g\xe9\xca\x02\xbe\xd8^\xcd\xa7F5\x97\xb7\xa9\xe6\x1f\x8dj\x16\xdd\xd5\xe8_b5\xbej\x1ca\x19\x8f\x8f.y\x02w\xd3\xe2\x7f\xed\xcc\xcbx|L#i\x0e\xe0x4\x8aCzc\x05)\xfc\xe1h\xc8L&4\x0b\xbc\xcc\xe5|\x1c+\x0f\x85\x8e\xaf\x12<\xcc\xab`\xc6\xe3\x93U\x9c\x05\xe0K\x90\xc9_\x08H\xe4%7q&\x81\xf4o\x0c\xccW >\x9a\x9d$p\xa3\x0e\x91\xfd\x9a\xd9o8\xf5\x99/\xfd\xd6:!\xbc@\xc8\x0f\x0b\xe0[\x96Q\xdf\x04^\xa9\x04\xbc\x80\x8a\x9f\x04\xb0)\x12\xe4\x08\x1c\x96\xe7\xa9\x18\xb0X\xfcG\xb2\xe5L\xe1\xd3$2\x81\x88\x80\xfc Z _$\xa0X\xe6\xc4\xeag\x13\xe8#\xcdX1s \xcd\x98m\xd6N\x19\x03\xf3\x0b'\x85\x1f8\x80lQ*\x7f! \x19\x0d\xa5\xcf\xc9T\xfeB@\xf24\x06I\x8f\x93\xca_M\x90\xb3`\xc5t\xb4$'\x0bV,\xc7B\x1ae<\xfe\x89\x87\xf9\xaa\xec\xdd\x1a^m\xfd\xfb\x99\x06\x99l\xfe\x95\xfce\xd0\x11\x18 \xf6{c\xff^\x8f\xb3\x84z\x9f{\xec\xfd\x1f\x1aeK_\xcb\x82\xe0~\xfdR\x1f\x98{\xf5\x8b\x1a\xb1\xf3\x199 \xea3\xd5\xcc\xc2W\xbe.\xfe\xc8)<\xf4ft\x81\x1du\xd2\xd3{\x00\xba\xfb\xd6 ?\xeap\xc6\xdd\xb5\xcb\xeaMW@\x05>\x06\xb9\xa9/\x86%\xfeA\xba\x1bU\x0e\xdc\xd4\x1e\x01\xb9\x8f\xfc\xcf\x06\x96k\xe0\xcb\x84\xd1\xcf\xcd,\xd9\xb0u\xe03nm6\xcd\xfd\x00\xcb%\xa6\x0c=+]a\xdb\xfbp>$\xaf\x06\xe4U]\x1e\x93\x01\xb1\xd7Vx\x1c\xe7\xe9\xd2E\x86 \x1b\x92W\xb3\xec\\t\xdcB7\xb7v\\j\xac\xdd\xef\x8c\x9cH4Y\xe0\xcb[\xceI\xb0Z|\xf3v\x0d\xc9\xb7\\Us\x9e\xac\xee\xb7\x0b\x1f\x19h\x88\x11'Q?Z\xbap\x9a_\xae\x02)\xb4\xd4\xbfn\xd7\x8d\xc0\x128E\xad \xe9*\xce\x1a\xd7\x8b]g4a\xf4~\xc7\xe1\xb5\n/>\x14\xad\xd3?\x99=$\x01\x82;\x7fj\xe0\xce\x1b\xa0\x9b\xe4\x89\xd0\x87p\xfa\x11\xe5\xfd\xe5%\x07&k\xb8\xa4\xe2\x94Fs\x12<\x1d\xae@\xb0\x0c\xb6\xba\x14\xc7\x1f\x96\xb5\xb4\xd4\x15\xac,\"\x90@\xc6\x14\xc5\xb2>\xb3\x9b\x05\x8b\xf0\xbc0\x88>\xe39\x82\x9e\xc1s\xd4\x1d\n\x96\xa5Ug\xb1<8\x0e\xf1\xac\xab\xcbN\xe1\xcd\xcf\xe84\x89Uf\x95\n\xc5\x89\xad%j5w}\xf3\xff\x80\xff\xbe\xe6WW,\xca\x83\x8c\xad\x90\xf2\xe4\xc7\x9ap\xedW\xd0\xa2\x99\xd1\xd1\xefG\xa3\xbf\x9d\xab\xff\xd3\x8b\xdf\xc6\xbf\x8d~\xf3\xcf\xff\xf2\xe7\x87U\xf0\xbf\"\xb7\x95\xff i\xb5\xd3\x06#B\xfe\x8cJ3\n\xedJ\x1d^\xd0\x199\x03\xf2\xfd\x01\xd9\xa9J0\x02[\xa4\x92\xbfA\xb0\x01\xe4{\xbf\xb4\xc5\xd8\x13|{\x15\x17u\x85\xc4\xf9Oy\x03\xfeW\xf03\xfb\xe5\x0bq\x7f\x05\xf3su\xcf!\x08\x98\xc7\nW\xfeU\xdf\xbd4\xdc\xbc\x16\x04NUFb\x86\x03\xc9\xe8\x824\\C\xea\xcc\x88\xaeX\x1aS\x8f}\xfa\xf8\x9aT\xe3ph\xb9\x94\xbee\xa8e\xc7 [\x07r\x9e\xb9e\x9dRZ[\x1a\xa4\x05,u%\xa99\x17\xb4\xbe\xa5\x9d*\xbcv\xee\xc6\x16\x08\xd5s\x18\x92\xd7Q\x90\x054\xd4t\xbb\xa0%\xe7C\x92\x0c\xc9\xd5@\xfa\xd8o\xfa\xf4\xfb\xda\xe6fP|\xfd\xa4\\\x98\xf0\x8d\xf71\x8b\xce\xe8B\x9a\xdd\x1cE\xfe\x87\xf2\xda*\x85\x0f\xb6,\xf6\xebZ]JA@\xd6\xa5[k\xe9\xa7h\xfe\xd6\xb5@)?\xce\x8a]yN\x0e\xc9\x89X\xdeR\xf3\xebD\xaet\xb2M\xae\xc5/\xb9\xfc\xadKC\x02\xf7@\xe0\x1b\x92\xaf]\x14O\xc7\xc9\xf2\xa68\x82\xe6c\x9ag\x1c\xc2\x88H\xd3\xba\xd6r\xc1x. M\xfe\xe3\x9fr\x14w4\xeb\xd3\xbfSwZ\xa9\" r\x99gY+-\xf7o\xd0\x8dNz\xb3\xa3Q\xff\xe8O\xbc(\x99J\xab\xbeN\x0f\xcc\xd0CCQ+\xd6\xc8\x03l\x83\xb3\xb0\xb8\xd2H\xe0J\x03?\xc7@\xa7\xa7~\x8f\x91t\xc6\x89\x06/\xee\xb3\xa4\xc5T\xcf\x0c)\x11\xd8\xcfP\x0d\xfa\x1ek\x03x\xa7\xfe\xa8N\xa1\x04\xe2\xa2\xd8\x0e\x04\xfdt8\x87\xd5\x8f\x03\xba$\x92\x96\x01\xcb.7P\x7f5&\xc6$6\xdc\xfd\xe3\xebP+\xa2\x08\xa2-\x80x\xf6r\x9a\xe5\xfc\xbe\xe2 \x94H\xdd@-\xa6\x8e\x06\x135\xa29\xc1\xdc\xeccOA'\x9b\xf4\xe4\x9fK,\x0c\xeb\xe8\x90\xbcm\x8e(\xc8\xd4\xc4\x87\xbcz\x9bk~ ]1\xd8\x10(\x01\x85.\xab\x94\xda'\xb9\xd4 \"\xdb\x07\xc4\x01\x15\xa5\xbc}\xc2\xfb\xc6\xcb0\xcc\xc2#\x9f%g\\\xf0\xf9\x81'\xdbA\x0eID\xa6\xfa\xf4\xa9\xd2\x1cf[\x1a\xad\x07\xfa\x03\xf4\x8eZ\x80^\xbfT\x15\x83\xech\xd0\xea\xd3\x1d;\xb5\xfb\xf9s_\x17\xe1Kp\xe2\x80\x93\x16\xb5\xad\xe6J1\xf7\x1c\x1f\x14\x0b\x85\x8f\xa5\xce#\xccRB\xca\x04divP=b\xc1\x7f\x98\x15\x1aYZUL\xd0\x1b\x86\xe2\x98M\x01R?T\xadu\xc0\x0df\x84p]\x83\x9d_)Q\n\x0c\xdc\x89\x1b\xb4\xd1\xc5f \xda\x86\xd3\x12\xbd\xef\xa5\xfcQ\x13\x8aT\xc5[\x18\xff7\x0f\"\xd7qng\xa7O\xca\xa5\xfc\xb3I\xa3 \xce\xf37\x15\x02,\x19{K\x9a\x1ce\xee\x8e\xd8\xbb\x90\xbcM\x1225\xe2^\x10\xeb\xca\xab\xd1\xb7\xbd\xa5\xa6Z\x89\xed~\x97X>\x86\xd3T\x94\x17\x08\xe2\x7f\xc6bs\xa4\x83\x89\xc0\xe8 \x84\x86\x06\x0c\xd8{\x05Z\x1bY\x9c\xd5i\xfbB\x94\xec\xca\xces\x12\x92\x17$\xd5\xb6\x94$\xdc\xde\x1e\xe8fI\x0e6\x19\x92t\x16\x9ew\x912\x8d\xe8\x14\x1e\x0b\x8c\xf0\x14\x9ba1\x8c6i\x0e\x0d\x06e\xdc\xceHv\xb0h\x81\x9b\xc1\xc9\xdf\x8czR7\xe8\xab\x16\xbb\xc5\x16\x00\x19=\xbe\x8c\x82o+\xd7\xefb\x8c\xb8M\xdc\xcb\x15 \x82f\xda\x96%\xb9\x17J\x9a\xdb\xa4\xb3\xbaMh\xe6\x9d\xda\xd4)\xba\xe56\xf1\xacn\x13\x9ay\xa76\xf5\xe0\x03\xb9M\xec\xaa[\x85f\"$\xb3\x9d\x01\x7fW\x14j\x13\xaapE@7`\n,\xa3 \xc4V\x19v\x8b\xf8\xfa-\xde\x95\xda\xd1\x15M\x8c!\xb9\xc6\x83\xe3\xde\x95\x03\xec1\x1f\x97X\x83\xee\xf0\xc9\xcee\xd9\xc1t\xfe\xd4\x8f\xe9\xac\x9f\xfc\xc8\x0co\x80\xade\x8cI\x0b\xcf\x98 >\x00\xf4\x03:\xf3\x08\xc3(Y~4Y\x1f\x7fl\x96 \xe7\x91Yq\x85+\xeb#YN\xed\xecZ;\x1f\x05\xfd\x0cD?\xd3\x01I\xeb\xed\x0e\xa4\xec\x1fX%pU\xf2\xc7\xd7\xc1,8\x07B\xbd\x83\x9d\xb33\x8f\xedW\x8e\x92Z@\xb8`r\x08\x03G L\xad\xdc\xe6\x89`\xcc*\x0c\x1fka\xf8f\xd8A\xecB\x11\xd1\xed9\x90\x81q\xc5dfn\xaa\xd1\xc4\x83M\xd6x\xebZ\x12\xe0\x10\x98\xa6\x87Pb.\xa6\xb0}\xf1\x0dI\xdc\xb5\xa7Hek\xc4\x03\xb2\x15#{\xe3\xcb\x172\x87\xb1\xc0\xf3n\xb5o\xaa_\x9e\x0f\xd0\xca\x1f< \xb1\xa8OL\xc1\\\xfc\xb0\xecR\x91\xd7!\x81\x90\xfbM\x14E\"\xfb\xe9\xa7\xa0\xe0Q\xe9\x94\x98\x1aC85\x07|;\x95k\xa3\xdc\xaa=j\xaf\xc9n\x06\xf6\x9d\x9c\xb2\xacm\x1b\xb7\xdf\x8d\x17\xdf\xdb`\xa3w\xa3`\xdf\xa6|^\x7f\xca\xddrX\xedI\xd1K_u\x81L\xed\xd8\xc5\xdf0\x10k3\x05\x84U\xd4l\x80\x12\xd8\x15\xe3\x98c'\xb2\xf5\xfc\xbd5\xd7]\xb0\xb6\xac\xc2\xda\xb2~\xac\xed\xdd\x99c\nZz-6|\xd6L\xc5\xd1\xe3\xd5\xe6m\x02\x05\xd0\x8f\xbfU\xb5\xa9\xc1\xc6\xf3\x92\x8d/G\x0b/\x16vq\xffx1\xaf\xf25\x03\xbd[\xbc\x07\xcf+\x9f1\xe0\x11\x1aKg\xa5\x05q\xa4B]e\x06\xff\xabIr\x89\xb8#uF{\xa2\xc8\x16 _\x03\xf8\x8c]gJ\xf8\xe8V,>\x03PF(\xe4\x16\xd6\"d\x9b\x04\x03\xe3\x98\xcc\xc9!\xa1P.\xaf\x95SW\x92\x8e\x14\xf2\x1aE\xc2\x1a`\xd1\x81\x10\x0bg]\xdbL\x8a\xffy\x07\x0e\x85\x8b]\x84\xed\x1d%F\xab\x1b\xd5 u\xe6\x91]\x95\x10\xabyC\x9e\xfd\xff\xe9\xe2\x19\x8f\xd6\xf9\x95c\x87[\x01\xd8\x0f\x07iV\xdezvT<\\\xed<'\x11yA\xb2B\xfa\x15mo\x0fH6\x8b\xce\x95\x0e\x87\xcd\xf2\x9c\xf4a\xe7\xda\xf8\xd9\xde<\xe6\xf58\xcdx|\x96P\xefs\x10-\xbaN\xc7\xce6\x81\xc3\x82\xb6&-\x19\xf5\xdboo\xb9\x7f\xd3\xd2\xde\xc4u\x9e6\x1f\xe93\\\xf6\xd9i*C\xea\xa7\x8f&\x8bA6\xe0\x07\xa2\xf4h|\xc7\x03\xf1\xe9\xb3\xba\xcb2\x0e\x86\x87\xa3U:\xea\xf4\xdc]_\xeaj\xeb&n\xe1e\xdd\xe5C\xe2\xac\xd2\x913\xa8\xe3\xda;\xb5\xfb\xe1\xc8\x1d\x0f\x1e.n\xd9\xbe\xb2u\xc9\xb0\x1b\x85kW\xe0\xe3\x8c\x7f\x12\x14$\xe2\x02\xfc\xeb\xbdv\xceF\xa5(\xaa!\x19\x07\xe9\xa7(\xc8B\x96\xa6\xef\xc0\x7f\xd9\xa0k\x1cZ]\x19iQ\x02h@9\x97\x9c\x87\x8cV\\\x17\xcb\x0c\xa5\xc0_z\xe0\xaa\xed\x04\xady\x11\xa4\xef\xe8;7\xab\xa1\x07\xbd2DU \xe80\x9c(s\xc4?\xe5\x83\x07\x84K/\x922\xd2\x05\x99\x82\x08\xbc\x11!\x80HG\xe3`\x96\x99\x04+\xd0\xcf\xca\xc4y\x13_7N\xf7;N\xca\xfe\x0e6)\x0f\xff~\xb7\x8d2\xa8\xec\x94\x11l\x95\xfbl\xf7Cwv4\xfa\xdb\xf9=m\x16g\xf4\xe7\x893\xb08\xc3\xbfCk\xfb\xb5H\xcb\x0b\xfe\xf8\x8a.\xae\xa2 z\xe6\x17\xdb\xb8\xb6\xd8\"y\xf9\x90\xcd\"pq-M\x89\xa5\x14>\x82\xd54\x8b\xec~\x05\xc8m;lpg\x8fw:\xf7\xafej\xbes\xbe#\xdb\xb0\x88\xc8\xb6x\xb9\xe7\x86M\xcc\x86i\x92\xa9\xda\x10q\x08\x87\xecL\xd9\xfcb\xa2l\x8e\xcdE\x97A7\x01?\xa9\xea\xa6\x1b\xdc>\xa4 !(|\xa7B\xda\xff\x07\xf7\xe0[\x13\x84\x9ft\x931\xbb\xce\x12\xeae\xbat\xd9\x1e+s\x8e\xcf\xc2\xbd\x84~\xd9}2\xc0\xec\xe09z\xe8h\x9e\xc1\xb2\xcc\xa3\x19\xabn\xc0s\xcc*=\x9a9?\xb3\xcb\xcfA\x06\xae\xff\x80\x1c\xb9*\xde3\xc8\x7f\xcb\x7f/3W\xf2E\xe6\xac\xd22\xe3\xedi\x99\xfe\xbeL\xe6\x90\xda\xf8jm \x12\xe3`hN3\x8d\x82\x15\xb8\xf8\x02OM\xdcu\x8et\x823$\xe5\xcbI\xe4c|KQ:\xc8\x98\xf4\x14\xd6R\xc7k\x0d\xd3Z\x93\n\xf5g\xad\x05\x9cqa5d\x89\xa0?\xcd\xae\x9c\x15)\xa2\x86\xf2\x0d:S]\x81My\x02\xe6v\xde\\\x0d\xa6k{q\x00\xe6\xfd\x18\xf6\xca\xa0\x8a}\x01Q\x1b\xae\x82\xc8\xe7W\x80\x04\xa5\xa8\x8d\x04csf\xca\x97!i\x02\x14\x83\xdf\x0e\x06#[\xbe\x0e\xaac\x82\xb4\xa5\xa8\xa22\xb4\xc6[o\x9f\xd9\x82\xc6\xa13v^P.\xe2\xe5y\x03d+0a\x90h(\xe2\xe4 \x1aE\x0d\x113\xce)\xa2\\b$5\\D\x91\xbc\xd2.P`\x88\xce\xd1\x8d_qIJ\xee\x8e\x946s\xfc\xdct\xc1,%_\xbb\x93\xba\x0f\xe3\x1c\x97:J\xc7\xcf\x8f\xf6\x8cCE\xbb#~\x86b\xc7\xb0\xdb\xbd\x19h\x13 zY\xc6@5\xeb\xf5\xac\x07\xaa\xe3-\x99\xf7\xf9\x92_\xebHU:,\x1c\xb8\x84\xe7\x95\xd4\xc3R;d\x0c\xc5\x98oj\x8c\x8c!R\x9b\x05\x1d6\xa3)\x98\xaa|\x1b\x88\x95\xe8x\xa1$ nf\x11\xed$\x1a\xecX6\xb2A\x9a\x93\xb2\xff\x98\xcf\x1a\xf1\xc8\xb0\x9aR\xe8f\xb9f\x850\xa8m\x10\x10(\xba\x15\x80^k\x80F\xfeWX\xddx\xe3Tx\x7f\xd5\xbd\xf6o(\xd8\x9fd\xd8\xc16H\x15\x99P\xcfg\xa4\xccFX\xed\x9e*\x90*\xf4P!^\x91\xa7\xdb\xa5\xabJ\xc8!h\xe8[\xaaR\xfd\xc0++\xddc\xd6K\xeb\x9c\xe6\xd0\xb5\x9e6\xa6\xd9\xff\x06\xeb.\x1b\x9b#\xd9\\O\xac\xa7\x8b\x8dj\x9f\xcb1\xca\x8a-uh\xfc\x9e\x96\xdfm\x1d%sR\xcc:aN\xa1F\xf9kJl\xb7\xffU\x8f\x1f]s\xd1M\xcc\x92\xc6m'\xa6\x11\xde.\x9b\x95\xfb\x9d]3/\xcf\xd8{\xf5q7k\xb7mK\xc74\xa5\xb1\x1bv\x1aI\xae\x0b\x85\xf6\x88\xaeZ,\xe4Azh`Ce\xfbk\xe8k\xa2\x14\xbf\xf9\x14G\xa68Xr\xfb=\xd1\x10\xee0\x82\xe7\xc43\xc2\xf7=\x1f@j%\xa9\xdf\xd7\xe6P\xec\x1f9KnNA\xf7\x96'Ga\xe8\xca\x9b\xdb\x99\xe8\xf5\x81\xa0i\xff\xcf\xe9\xfbwc)i\x08\xe67Re\x01D\xd8\xdf\x9d\x83\xda\xcc\x81\xea\xfd\xf9w\x03\xe9\x02`\xe79\x89\xc9\x8b\"\xf4\xd9s\x12oow\x0d\x01Q#\xee\x83\xd6Y\xdc!\xb3$j\xdc\xfdR'\xc3\x1f\xcfy\xb2\x82\x19\x08\xe0g\x9f/\x12\xf5\xd5\xa5\x1ew=\xdeb\xec\xe1\xd2\xb5\x1e;\xcd\xf6,\x95c\xadg\xe0\xe4\xbb\\d\xcbn\xc9*.\xfa\xec\xce\xb5\xe7\xa0\x01\xa8\xf4\xf3u|\x19D>\x1a\x9eO<\x1e\x8f\xb2\x84Ko\xb2\x1e\xa6N\xd0\xaaM]\xa1<\xba\xf0\xc0\xda\xea@\xbfe\xf3Kd\xab\x10`sn\xca\xe3\xe9\xc1\x03\x12\xa0\xdaq\xf8\x06\x13\xdc\xb4\xa3\xaa\x85;\x1b\x88}\x8b\xcc\xbe&\x17\xad\xd5\xe0\xb8\xb1N\x9b4+\xaeZ\x84\xe1x|N\\)'\xe4pG\xa1M\xde\x00{\x0f\xf4\x0f\xc1\x8d\xeeX\xc4\xf2\xc5MD\x11\xd2\xad\xc4Y]\xb8\x1aD\xec4I\xe5]\xa1\xab\xbe6$\x93\x1d\x90\x18\xb5\xdc\xc9\xb8\\\xeai)\x8f1RcK\xb7VbH0\xa9,\xdb/\x91\x0c\xbe\x80e'\xca\xe2\x1a\x1c\xaf\x039\x8b!\xd6\xa3\x16\xf2*x\x03_W\xcfr\xd9\xd4JJ\xf1\xc9&\xa4[\x03E\x01\xb5f\xd9\x81y\xaec\x0d8.\xf3\xca\x8au\xe2\x01\xd9\xda\xaaC\xb6\x926u/\xe8\xdfl\x7f\xda\xb6Fs*\ne\xb1\xd6\x05\xa8\xf4\xab\xa4\xd7\xd66\xed\x1c\xe9\x05\xb6\xc5d\xa5KA\x08\x02\xbd\xb7~\x02\x9a\x06\x1a\x85\xdc\xa3\xed*I+\x1ee\xcbv=\xaa\xae\xaf]1f\xd3n#\x10a\xb5\xdc2C\xe3-\xea\xa0i\xf5\xd32\xaa\xaa\x82>\xdf\x8ej\x0c\xa2~\x9a\xc7\\\xc1\xb0[(3eb*\xdd\x11H \xa99?,\xbbdl\xa2zZ_(\xfc3u\x05\xcd\xe2\xcd\"M\x9dC\xea\xad\x04\x17f5\xce\xe9\xc9\xf1\xc7\x93\xb3\x8b\x97\xef/\xde\xbd?\xbb\xf8ptzzq\xf6\xe3\xeb\xd3\x8b\xf7\x1f/~}\xff\xe9\xe2\xe7\xd7o\xde\\\xfcpr\xf1\xea\xf5\xc7\x93\x97\xce\xed\xbfi\x08K\xeaR\x11\x15o\xb9\x1e\x0d+\xc0\x85\x1f\x94\xe0q\xa0\xf2\xf2^\x0f\x8e\xdf\"\xb3\x90V\xa4\xf6{\x90\xfa\x15\x9c\xe6\xe2\xc7Z\xad\xae\x88K\xc7\x86\x1d\xc8\xaf\x90[\x10\xe9\x9f\xacq\xd3&\xc5 \xe5)Z\xa6\x1f\x92\x8cl\x8b\x92SiN\x01\xd2\xc8\xad\x9d\xba\x9c}0$Y\xb9:*#\x1c\xe2\xee\xd9\xb8\xe9K\xc2\xd0\xa5\x96\x94\x8b2\xf6\xab\x17,d3\x92!\x01\xc4\x03\xea\xd5\xd7\x99[\xbf\xa8 V\xe4\x10\x0c[\xbc\x80\x98=\xb7X@\x08\x90\xc0PDo2\xca\xdbb\xf7OI\xea\x96\xfa\xef\x03\xf9\xd1\xad\xc9\xb0\x16\xe0\xb7]7\xa9\xe0\xc6\x0c{\xf4\xa4b\x8fn-J4\xf7 .\x0ef\xe1\xb9\xe4~\xfa0>rEv\xb36\x80\xda[\xa1,\x8a\x1b\xa5Y\x90l\x9dl\xda\xed\xe5\"r\xbd\x08\xa6$\xefX\x04\xdf\x96\xe8\xb1s\x1c\x06!\x19X\xe8\x9f\x8a\x037\xd7\x01xg\xa8K\xb6\xd2n\xb7\x14\x87&\x16\xf9e9\x9cm\"\xbf2l[\x8b\x14\x12\xa1\xeaJ\x99oU$\xa7\xbf\xaaN\xcc\xe2\xd5\x0ei\xe1\xbf\xc0\xe7\xa3\xb9\xf7\xec\x02\\\xf5-\xaft5\xcd+\xd7r\xa4\xcf!-U\xee\xeez`nt\xbb\xd0\xbcE\xa0\xf8A\x9aoz\x8b\x90\xf6\xbaE\x08;n\x11\xf4/\xfc\xb8\xdap\xb9j\x81E\xc9\xff\xd8\xad\x9e\x12\xd7y6q \x82\xfe\x1fmRp%\xaf\xbe\x1f\xe1w\xb9\x13\x1c\x159nC\xa1\xf7\xbf\x8b\x9c:\xe8\xbe\x1f\xb1\x9c\xf8\xa6fT+\xc5@\x1b\xe2p\xbb\x187$\x07\x9d\x0ed*\x96QnE\xd7V\xac\x85]\xb1\x16\xaa'n(\xc5 \xa1:F\xc9\x8b\x032\xd1\xf2\xb9=G\xf9~ g;\xe7\x03\xe9\xdc\x16\xe644\xb8r\xa9\xc8K5\xd7\x00\xc2\x9b\xe6\xfc4R\xfa\x1efUq\xbc\x94S\xfc_&w\x0f6\x95\xbb\xab-\x9eK\xc9hZ8m\xec\x10Rv\x8c\xfa\xbfD\xfcH7\x92\xfc%\xf5]\xd7E\x92v\x10\xe3\x92\x9e\xc2\x07Z\xda(F%%\xe2\x96\xfc5\xafH\x9d\x1ar\xab\xa8.\xb7B\xa4o\xcd\x15o\x17\x995+\xac\xc9\xc0\xda\xe6\xf1\xb6D\xdbf3#E\xc9Yi\xc1\x89P2\xea\x82\xdb\x8e\xee\xa1\xafY)\xc5\xd8\x90\xfd\xff\x96\x94\xc5\xee.f\xcf\xe4\n\xf8]\x19\xe4X\xda\xf2l\xaeg\xa3A\x9f*v\xc3\xa85\xfd\x90\xf0\xa1\x9dQ\x04Y\xbfv\x90\xd6\xd6\xec\x14\x1cGgC8;i\xdd`\x99\x0dE-\xc5\xe7\xa4\x06\xa9\xbd\x86\xf28B\x17V\xc7\xaa\xe0bU\xd0\x86\x05q\x04\x12T\xd8\x0fQ}M\xf0\"\x9a\xf6d\xdffg\xa5\x95\xbeg\xaer+h_DR\x1d\xca9;\xf9\xe5\xec\xe2\xf8\xfd\xbb\xb3\x93wg\x16G\xacD]1\xc3\xd0X\xa2 \x8bg\x0e\x07\xb8\xcf\xae\xbb\xbcR\xce\xd5M}\x17\\\xc6{UG\xe7\x19K\xca\xfaP\xb8\xaf\x03\xcc\x1d\xa4m14\xdd\xd8\xfe\x8f_\x07\xa7'g\x17o\x8f>\xfe\xf5\xd3\x87\xff\xb7\nH\xdeq\x1c\xdbVCf\xf8\x16\xbc\x1dIp\xdb/\xd7\xcf\xc9\xea\"\xb4\x8f\x1aG\x14\xb5\xcd\x87v\x9c\x809r6W\x89\x19Wz0\xa5\x92\xa0\xb0\x9f\xcf\xe2\x1c\x84\xab\x97V\xe7wp\x0c\x0d\x0b\x973\xed'\x1f(6\xb5\x83\xf8\xdd \xcbn\x90\xb5\xf5\xe6B?\xb0\xe1=\xa9*\xddZ\x15\x0cC}\xcb{\x9d\xe4\x00Qc\xb3\"\xeav3\x99y=\xe8\x02\xf1,\x04E8\xf3z\xa8oIU\xad\x059$\xee\x1c\xa4\xb9su\xe4\x97\xc1cVC\xb2\x1eB$\x9e\xc1@\x86\xe3yK\xb3\xe5xE\xaf\xdd\x95y\xc0\x0b\x80!Y\xd5\xce\xfc\x18|\xf1\xad\x80\xb1h/\xabB:\x95M\xb8(\x11\xe8\x91\x04s\x17CBg\xcbs\xdd\xa2L\xd9B-\xb7\xb7\x07C\x12\x0b\xf2b\xad\xf9|\xed\x81\xc7E\x9c\x7f\x98\x8f]\x7f\xab\x9c`>h\x1a\x03zR\xbaUk\xb2\x89\xf5]\x980\xc2g\xde\xf9\xa0\xcdm>\xf8?\xd2\xe8}^\xfa\x0fi\xd2\xb5\xcdK\x17\x82\xf6\x00\xc3\x7f\x91\x95\\o=\x087<\x05\x9b\xe7^f\xfah\xb5\x84\x9c\xec\xd3\x81bA\xf6vLF\n7\x05\xe6\x92|!\x80\xeb\x96y\x1d\xa8\x98\x94\xf4g\xfb\x9eU'\xef\xdb\xf7?\x9d\\\x9c\xfc\xf2\xfa\xf4\xec\xf5\xbb\xffl9|\x89y\x00w#?\xe3\x1c\xae\xf4\xa9\xbb\x94{\xcd\xae\x11\xaf\xac\xc7E\n\xb1L\xed}\xcd\xeb\xc7\x13\xd8\xc3\xef\xde\xbf<\xe9;\xab\xdd\xe3\x7f\xd7\xfd\xdbB\xa2\x93\xfeT5\xe9IY\x93\x8em\xdbkV\x9bg\xf8-$a\x85\xc5w\x95\xb4H\xd4\xa9b\xe0\x05Qe\xd4\xbbm\xe6Q\xd5s\xcd\xe9\x0b<\xf8\xb0\x19b\x8f\xe1w\xf0\xc4\xde\xfcH\xbaBl\xb6\xf4O\xf8\x9bEt\xedA\xea\xadD\xd7\xa5\x9b'\xd4\xd6W\xb9\x17\xa8\xfb\xe1 \x86\xa7\xae\xfa-8)\xa5\xdb\xbb\xbb{ \x97\xde\xdd\xdd\xad\x0b\xb4\x89\xa1x\xb6_\x1b\xb4\xdau91\x85\xccy\xc7\x81\xbfV\xb6\x1b\x86\x17&\xd60Z$\xe6} \xa8\x89H\xa1\xb7\xb4\xb3\xe7\x82^i*\x89U\xc7FV\xbfu\xa0*x\x0fN \x11\x15\x0f\x81=.N\xde\xfd4%N\x9cp?\x87^ \xe8\xe4\xe7\x93\x1f>\x1c\x1d\xff\xf5\xe2\xf5\xbb7\xaf\xdf\x9d\\\x9c\x9e\xfd\xfa\xe6\xe4tJ\xb6&\xd5F\xd4FJ\x8b\x0b\x9b\xdfE\xa4\xd8\x1b\x13M\xfa\x8e\x8a\x0dL\xb5\x80v\xb9j\xdd0\\?Z\xbc.>\x9d\xcb@\x01\x1b\x88\xf1\xda\xba@\xa1\xc2\x14\xa2U{\xe0k\xd7\xde#\xf0\xe9\xd1y#+\xf8\x9c\x0e\x9e/n\xf1\xbd\xa4\x1f\xd4\xba6\xee\xcd\xf3 \x06\x15\xd8%\xb8\xd8b\xb3\xf8\x1c\xb8\x0d\xbf~G\xda\x8f\x1d\\\x83\xf5n_k\x1e\xbd9@?(p\x97C\xb2\x1e\x0cH2\xae\x07Sq}`\xc3\xf2!\xf8b\xca\xa4\x1f\xa2\x96\xb1\xd3O\x0f\xbfJ\xfa\x91*JTV\x9dT\xa8W\x1f\xdc.\xd4\xbd\xa2\x8a6mM\xfa\xc4(#\x06w\xcd\xdd5l\xfa~\xa5TOW\xfd\xa0\xc57\x16\xd0\xfaZKW\xf5\xa5\xdb\xaf\xbeH\x8a\xcf;\x98Z\xd2\xca\xd8\xb6\xe7\x96k\x9c\x0d\xc8V\xc3\xc7[\x0cV&\x80\xf8\x90\x05.\xcd\xf5\xc1[[|.\x98\xf5\x8d\xa7\x0em\xd7]Y\xdc\x96\x13\xbdj(o\xf1vG\x88\xc5\xe3]\xd4\xb9\xa55r\xc4O\"\xf3A\xc6\x84\xa3\xb4\x8c~\x90Q\xa9\xa4\xd4\xd0\xb1I5\x94\x17|_\x07\xca\xb5\x8c8\xac\x1f?V\x13p+z\xa2\xf3*\xdc\xa2d\xd7PV\xa7\x96\x8bs\xa5dW\xf7\x89\x99*U\xbd\xba#\x80P\xb5\xa5\x9e\xeeU|h\xee=y\\'P\xe68\xe5\x13\xcb\xfa\x1a>9}Y\xdf\xbe\xa2w&\xf5\xea\x96\xaa;\xf5v\xacK%\xfbzO\x05Z\xaa9\xce\x14Xd\x17\xbb\xd2\x07\xc7T\x7f`\xb7\xf2\x97\xe8\xca/\x15H\xcb\xe5rS:\x7fU\xd1 M\xdf\x15\x18u\xc8\xc8\x01 \xc5\xbe\x96:\x89xX\xe8\xc6\x02\x85\xbb\x0b\xe9\x94Z\xaa\xf7(\x12^*\x97Wbf\xd5c\x0d(*B\xf5\xa9\xa2\xb5_]\x82\x17\xcd\xb1\xbbB\xe9$\x8fGi\x96\xe4^\xaf\xebALM\xcb\x88\xf3eq\xf7\xeb\x89\xad\x9c\x06\x19;\xbb\x89YA\xf4\xcb\xbc@i\xc6\xd4\x92\x8d\xd0\x8f\xcd\x8c\xca%l-_\x0e\xdb\x0f4\xf3\x96\xd2\xffZ-?f\x91\x1fD\x8b\xb2\xedH&h\xd6\x80\x03#<\xff\xa3\xf4\xb9\xa5\x15\xeb\xb6&\xb5\xfcW<\xf1\x98\xbc-\xa8dk\xc1\x9f\x18!d(\n\xb9\xa0\xc6|\xb5|\xb5>j\xa9\x80,\xdf'r\xb1\x16C\x9e)\xafOJi \xef\xc71\x0d\xc3K\xea}N\xeb\x1f\xa2ah4\xe3\xe7 \x0c?I\xa4\x0c\xddi\xac\x0c\xabZD[\xe46\xab%z\xbd\xb3\x1c\xed\xe9\xc5\xf66\xbaV\xb2\xd6\x85b'\xdd\xe9\xd0\xb8\xf3\xe9\xaf\x83G\x14\xe6U\xe3\xaa\x14}\n+\x11{!\xcf\xf61\x1ce\xe8g\x0eJ\x82\x0b\x96\xc9\xe5%\xbdl\xb5|\xc6o\xf5\xbeS\x7f\x14v\xd9r\xb7X\x89\n\xc1\xfa\xd8x\x1f\x07)\x04\xbe*f\xb7\xe5lv\xbd\x96\xb6-\xcb!\xd08\xa8B\x08I\xca\xd0F\x13\xfafD\x86%1LV\x97\x1ay\x1f\xf6\xf2eF6\xe8\xf8\x87\x9d\xe9\xb3tl\xb2\xeb\xb6N\x05\xd2\xb8!\x91\x1e\x06b\x1eD\x99-\xa0\x07\xee\xaa^?E\xd4Vl\xa5V\x9b\x83#f\xed\xda>o=\x0e\xc6 \x97\xa4\x91K\x07u\x1c\x86\xee=7o\xd9\xf9\xa0\x96]\xadC#\xa7\n\xdd\xf0\xc1(Y/`2\ne\xaa\xc2\xc2\x83\x016\xbeV\xba\xb2\xc9bo\xed\x808\xa2\xd2\xeb;\x0fu\xdbZ\x0dn\xb9\x1ao\xb5\xf8\x8aq\xd6\xe3f\xa7IZ4_\x83\x12\x83 \x8a\xb8@|.\x96\xe1v,\x87\xa0\xc7\n\x08\xf4\xa4\x07\xe5<\x0f\x86\x15\xc1~\xa1\xaan\xce4\x90\x0543&\xdc\xb5 \x03\xd7\xca\xe5\xbd'\x90\xb78\xecQ\xcf\x18\xa4\xa1flp0H0,b\x08\xe6\xcd\x81\x07a|\x95|\x02i8\xdc\"x\xe3\x93\xb7\x1f\xce~m\xbf>\xb2,hI\x85\xcc\x11\x15\xdeD/\x92*\x81\xbe\x0cB\xdf\xa0\xd2\xb1(\xde\xc8z\xec\x1f\xd2\x8a\x187\xb3\x15\xb1\x9f\xa5\x03\xbd>\xbfi\xf4+\xa2E\xf0\x96ov\\\x02d\x8dmc\x97\xdcII\xbf\x87q\x8c\x0f\x1e\x90\xad\xac\x8d\xa7\xecs\x87\xd0\xc1\x92\xee\x0c\xdb\xef4\xf4S\xb9\xb8, \xbam\xe2\xa0mw\x07\x1d\x01\x05\x08\xe8w\x07\xd1\x9a\x7ff\xff\x99\xd3\xc4g\xbe\xe6\xa9A\x05\x00\xadU\x9a\x93e-!E )\xac\xd6\xf1*\xda\x82a\xd9\xb6\x08\xe8i51\xbf\x05\x1c\xd3W\xba\xa5\xd8\xa2&\xe1\xf9\xf6\x14r%\xdb&\xe3h\x95\x03\xe1\x92\x16\\\xb8e\x93\xb4\x84:p\x99\x8dE\xec\xb3\xe5/V4\xfd\xac\x10U\x9f\xed\xben3\xa7\x04\x1eVuM\xcc\xa3%\xec\x07\xf8\xdb-C \xc4v\xfc\x8e\xf9\xc1\xd6O5~N6 \xd1,9o\x0d`c\xf5\x14\x87\x8dKU\xd2\xb2\xf9\xd0\x18\xe3j=\xf2\xf4\x99\xb3Q\x83\x8c\x93\xa5w\xabL=\xfb\x8d\xa4AM\xca\xc6>\xa5\x81t3[6\x8f\xe8\xe8\x0c\x8d\x1c\x19\xa8\xa1\x0d\xa1VC\xf0 \\\xb5\xf2rpl\xac\xb6\x82\xa5~\xba9K=\x90\x1f\xc2j\xd5B\x8f\xfd\xcdj\x15g\xbe\x1d\x89\x96.w\xbf\x02\xdf\xdb{\x0f\x13\x83\x1d\xeb\xb5n\x80`7;\xd4_\xab\x0f\xf3\x81\xd1H\xaa_X\xf7\xaf~]Q\xbd\xef{\xe5\xceM\xa1\x9e\xe8T\x1b9\xd9\x86\x84\x95\xdeCyP\x011\xc7@I\xaa\x9f\xaa\xa4b\x1f\xe4\xd9\xf0z\xfe\x8e\x89\x0dJ\x93\x9b>\xfb\xb2P\x8e\xc1\xdayH\xe6ME\x80\xcc\xb0\x14\xab\xc2\x0f\xcb\xfb\x11M\xc7\x97\xce\xa8\x0f\xac\xa7\xe1\x97/\xf6\x83\xee\x10\x1f\xa3\xf2;\xd5\xd9jO\xad\\;\x99M\x94 \xb6\x1b\x95>SPk z\x0f\xd0a\xfdI{\xe2\xb8\xc8\xf4\x97 0\xc2\xde\xa6\xa2\xbb\x16\x16i\x08\xbc\xcc\xd6\xa4m1\x17D\xc3\x81\x0c\xd2\x9b\x83\x11\xb8N\x9dJ\xd7[jF\xab\xf7\x04\xc1@\xd5o\xd3\xbeX+\xc7&\x9dW\x11\x10\xe2\xd8\xe6\x1d\x88\xc0\xd5#X\xe5\x03\xeeW\x9f\x1cJ\x17\x98\xb4Ji~\x94\xeb\x1b\xbc\xa6td\xbb\x9e=\xa6\xd9Z\x07\xfe7\xfb]\xe1r\xa1\xb0\xbdGq\x8bw(\xeb\xf6\x80\xf8h\xe3t\xc9\xf3\xb0$K\x8b\xad\x13\xc3\xc4\xa0\xb9\xa25\xf3\xa1\x8c\x82\xacg\xb5\"\n?8 \xd2\x8c\x03\xda\xe5\xbb\xe1\x90x\xb0\xac\xb6|\xf1E\xd1\xa3!\x99\x03\x9f\xde\xbe{\x86$&\x87\x9a7\xeb$e\x01\x91\xd5\xdb\x1aI\x9d\x19\xb8(ab\x17\x81\x95 \xb6\xd5\xc57\x9b\xb4m0$\xb4\x10\xea{\xe2E\xcb$\xe6Cc\xe5\x1e`\xa6=-$\x909\xbb=\xd5O*|Y\x0f)My,5\xd0f\x1fb \xe1,\xect\x93\xb5\x08\xc6m \xcc\xccVii\x11\xb5]dHGo\x0f\x1e\x90\x89r\xa4+\x1d\xc6\x14\x85\x93\xd9\x8e\x85p6\x88\xb1\x03E\xb2\x08\xfc#\n\x88sF~T\xb9\x84\x13\x19\x132%;\xcfI^\xf1\xee\x96\xb7\xfb\xc5^\x1bf\xd9v\xb2\x89\xbbtH\x1c=\xe5\xa6'\xc2\x94\x1c\x92T\xea\xd8H\x8dE\xb9\x1c\xa6$\xbd\x05e\x85\xf8\xbf\xc1\x96#\xbakn\xa1y\xad\xaf\x87\x87\xda\x13A\xdfe*\xb0\xf1\x0f2d\x9b\x1bV\xee?d[,8\xd3#\xda\xe3O\xa8%\x809\xbc(\xf4\x02\xbe:\n\x91\xe0\x90\x845\x19\x81D \xe07\x0b\xc9(\xee\x03p\xaa\xc0\xd4\xe6\xa8\xa0\x8a\xb0@\x15\xd9P\xb7E\xe2\x95\xd0@\x15I\x15\xef}\xac\xcb\x06\\\x18\xe8\xa1\xec#o\xbf2\xc2\x86L\nO\xc2B\xe9Ut\xbf\x1fv\xb24\xe8V\x18\xaa).iEU\xd1m\xc8g\xbb,\xb7\x1d\xc5\xd9\xa4\xd7s\xe2.]\x10\x95\x0f0\xf2URb\xacMP\x9a\xd9\xa4\xc8\x1d\xca\xac\x1a5U%\xa16{Y\xf1 r\xaah\x88\xbb@\xd7OS\x92\x8d\xb9\xdb\xd6Ou\x1a\xbb\xa5\xd9d\x03\x896\xef'\xd1&-\xb2\xba\xd6\x90\xac\x9a\x18\xc4\xc4\xdd\xc5\xfc\x95:1fJ\xcd{E\xdbT\x8bm\xda\xddp8\x0d\xc5\xf0\xfd\x1cdK\xe9]@\x1c\x01!\xca\xa2\x91\xdeR/\xb4\xe2\xfe\x9c+\x1d\xe3-c\x1b\xd8\xd9Y\xf7\x9fy\xb9\xfb>i\x8az\xda0\x08\xeb\xc9\xcb\x14\xc62\xb2\x11\xee\xddZ\xdc\xb7q]4P\x95\x14\x16+|\xd1F2\xe4c\x85\xf4T\xa7[VS\xeb\x95\xafx\xba\xaf\xb8\xd0iA\x06N?_\xc9<\x88h\x18v}\xd9\xec\x05\xca\xf5\xea\xa7\xd5\xf9\xec\xad\xdb\xdf.*\xd5\xdaA\xcc\xd0\x0eb\xa8v\x10+\xb5\x83\x9em\xc8\x16\x0f\xfbI\xb2h\x96Qo\xf9\x91\xcdos\xa2.X\xf6!\xbf\x0c\x03\xafp\x94f\xe9\xb9\xe6\xf2#\xcd\xe5Ov\xda\x18w\x194\xa7w\xedn\xa4\x14\x99\x0e\x0e\x80=\xd3\xaf\xe4\x8f\xaf@I\x8b\xb7\x81\x0c\x04\xd7\xcbv\xc7g\xc8\x98\xd8\x06D\x05\xd5\xb3\x8d\x07||\xc6\xce\xfb|W\xcdl\xdf\x8d\x7f;\xe1s\xf3~\x10\xcc!*)\xe3B9\x86[\xdcQ\x15\xa8\xae\xa6\xae\xa6l+j\xa9\xacPbS\xf9\xfa\xb5\xaf@\xaa1\xb0\x1b\x8fQ/\xcc\x8d!L\xedc\x02\x96\xf0\xb4\xdf\xa6\xb2\x93\x19\x88\xcd\xaa\xc56R*X\xdd\xc9\x96a\x82\xd7l\x1d9\xcd\xb2no\x17\xc9_\xef\xde\n\x94\xb1<\xbdY]rp\xc7*\x7f\x8d\x057\\ys\x9dD\x8c\xdc\x98\xc9U\xed\x00\xba{\xb23\xd9\xd9\xc3{\x95\xfc\xb3Z*\xa3s\xf2\xa4:\xed\xe0W\xf3\x7f\xffo\x9dy\xeb8\xcc*\x04\x0c\xa8\xe6\xcd\x92s\xd8=3~^\xc3|\xe0\xb3\x1dkmy\x01X\x0f\x0cp\xab\x91i\xb1\xb2\x95V\xb2\xcf\x1b\x9d\x90F4\x9b\x19\xc7\xf2\x0e%;0_\x12CR\\Y\x19\xc1\x12\xda\xf6?\x18/\xb53^\x86^\x0e\xb7\x9a9\xed\x0c\xa5\xa9md\x1a\xdf\xba\\\xda\xddvG\xb8\xaa\x0e\xd2\xbf\xca\x04\xd7\x16\xdc\xd5r\xda\xe3\x96\xb4\x08\x02m\xbbS\xd6(\xc5\xd57@-\x8e\xd3\xbf\x891\x17\x1eb\xe4I\xdd3\xba\x0e1\xf2\x14\xb1\xe6*\xcd\xad\xf6'\x0d\x07\xa79x\xa4\xaa~\xbai\xd9\xacd#\xd5S\xabb\x1e_\xfc.6E\xd8D\x12p>%L9\x8f\x0d~g\x10\xef\x97\xaa\x1a\x87:_\x90\xaag\xfc4\xa3Y\xe0I\x1e\xca\x10\x0f\xe5);6\xa3\x19\x9b\xf2\xd0\xbc\xb4NP\xea\xe5\xb4\xd5k{\xd3\xdd\xa9\xe0\xe2\xcb6)\xe5\x8a\xb4\xe3\xb4V\x8b\xa4\xea!\xa8v\xac6EN\xfd*M;*5\x0c2\xfaUX\x1f\xa8\xb6\xfa}\xa6\xa9\xa8\xda\xccW\xc1J\xed\xcfV0\xad\xe6\xd9\xb2\x8a\nP7,\x0d \xc03\xaa7\x18\x12>\xa6\xbe\xff\x81\xf30\x88\x16g\xdc\x0dk\x18\xe1^\x1c \xef\xee>2\x10\xbfD\xfa&\x14o#@\x8a\xb5\xcf\x9a\xe7\x0d\xa9\xc5\xb8o\xe1Q@\x15\xc6eD\xd3|p.\x0eH\xb6L\xf8\x15\xacjA\xd8I\xfd_\xe7\x98F\x11\xcf\x88\xc0<\x84\x12/\xa4iJhJh\xf1%\x07\xc1\xee\xea\xd6\xb8\xd0\xb5\xca\xca%/\xce\x83\xea\x92\xa8\xce\xa1\xa6\x9bM\xf3\x14X\xd3\xac\xdb\xe6G\x9b\xbb\xd4\x10\xfb\xb0R\x9dB5Z\x81\xaa\x8e\xe9-\xf2\x97z7\xc6A\xfa:\xaa`\x17\xe0\xdc\xea\xb5\xe3\xb2\x19\xbcE\xd5k\xb2\xf6\x9en\xd8\x1c\xa3\xea\xba\xc3w\xbc-\xb5\x0b\xa1\xceU\xb5a{\xcc\xea\xdd\xa6\x1e\n\xde\xa6S\x96}\xab\xf6\xe8\xaa-m)1\x88\xc9a\x9b\xa8\x81\xdf\x07j\xb0\x9c\xc5\xfb\xb6\xb3\x189\x8a{\xac\x1a\xe4\x0e\xb5f\x87\xfa\x8e\xfbu\xa5\xc5[\xdb\xad\xfa|%\xf5\n\xab\x83jbbjb\xe2j\xa3\xbb\xcd-\xad\xbeb\xa8\xbc\xa0\x08\xfcc@\x1e\xc9\xf6v\x93\xf8\xaa6\x91\xa2\x9d\xdd\xd4\xf0R\x0b\xec\x1d\x02\xec\xd9\x88\xad\xe2\xecfJ B\xa5\xf1\xb9m\xe2\x10D\x0bW\xfa!\xa8\x93 m\x14|*\xfb\xc9\xaf\"\x96\xbc\xe4^\x0e\x12\x0e\xe55\x89\xaf@HfSb\xd06\x0b\xe38a\x1e\xf5\x96\xacP\xe5\x967P\xdcEn1\x9b\xf2\xc0\x9aT\xb7FX\x1d\xca0^\xceo\xd7{\xde\xd6h$\xc6!\x17\xbd\x1f\x8d~\xbb\xdecNm\xaf\xd5\xce\x02\xab\x8eW\xf3\xf0\xef\xaf\xc4^t\xdb\x1a\x04\xba\xadQ-\xda\xea(\x930\xce\xa3\xea\xd8\xd6j/qK\x8d\xda\xa0\xf7\x82R&\x15b\x03\x0f\x1b\xc0Q4\xea\x14\xb8\xc0\x01\xe7\x19J\xd0\xba\x07\xd1]j\x99\x99\x91Y]k\x86\x07\x0eP.\x06\x86\xf39\xe1\xcfI3\x80\x1d\x89\xea\x9b\xb4\x12\xb5{G\x1a\x03e\xcf }\x0e\xbfh\xb5t\x80\x96~N\"2\"\x01\xf9\x9e\xec<\x1f\x80\xbc\x8bU\xaf\x91\xa2\xd1\x08-\x16\x90\x11\x89T1@\x04\xd5b\x01ZL\xef\xfe\xe89\xc9G\xa3\xe7v^\x1dB\x02\xb71\x8dHK\x1b\xad\xb0\xac$R\x15\xa5\xff\xa9 a\xae\xb3j\x0b\x83\xf4(\xf2XZ\xa5\xc8m\xa7\xacm\x89$\xc9lr\xbe\x89\x96W\xdb\xdc\xf5gIk\xea\n\x06\xea\xb5\x88\x08\xda8\x07i\xe8\x88\xec\x0e\xbcS\x05\xd1\x01*\xf1v\xa6x\x1c\xb1\xeb\xec4\xb8\x0c\x83h\xf1\xdcJ\xa7\x93\xda\xc5X\xa6\x14Z\x9e\x14\xd6q\x12\xe9\x0e\x86d_2A\xe3H\xab)>x@j\xf8\xcc\x80\x90\x11\x0d[\xbeJ\xcaE\\\xc7 \x16c-\xfd\xb4G\xe0\xb6;\xd3\x94\x04\x981,=\x17\x8d\x9e:A\xe1U\x0fx\x1c\xab\x9d[\xcedVWa\xba\x9b\xa8\xe2vD\x81\xc0\xd0\xb7\x15q\xdc\xcb\x85\x8aEj\xfa\x08'\x07\xf1\x1bL\x19h\xb1:x\x16\xef\xcb\xfafqJh\xf3\xb0\x15\x83\xd7\xb5\xd7 (\x02\x07)\xd8\xce\x04\xd1B\x85M\xb4\xb8\xa0k\x9b_Qfv\xdb6\xf2\xf1<\xcc\xd3%\xb4\x82)-\xf4T\xaa\xa1\xf3\x86\x04Gv%+\xbb!e0\xc9`\x08\x85A\x17m\xee\xd6<\x91}%W\xcb d\xc4\xadKT\x8cX\x82 \x97\xe1\xe4E\xa5n-b\xe1 \xa1\x81\xc5Qd\xce\xf8\xf9\x90,\xc7\xcaC\xd7\x99\x9a\x03\x97U\xa6C:\xb53\x87j\xd8\x18;\x1c\x17\xc7v.\xde\xa6\xa9\xd1\x18&lu\x18$Du\x81\x18\x19\xf5\x01h\xde\x19\x96M\x06n\xb1\xa2\xaa!\xf8\xc5qv\xc5\x8f\x92\x05\xf0\xb5\"\xa7\xe2dx\xad\x1c\xefW\x1b|\xc1\"z\x192\x7f*0d5\xa7:\xc4X\xdc\x95\x9f_\xbf{\xf9\xfe\xe7\x8b\x1f\x8f\xde\xbd|s2%\xc1\xd8\xa3\xd1\xa7\x94\xbd|\xff\x96\x1c\x92\xab \xf2\xf9\x15\xc1\xca\xa5,\xfb\xb1Vy\xbb\xe4\xa81\xe1bQT\xc7\xa6\xf1\x85\x13\xdd\xb1\xce\xaa\xd5\x10\x88Sb\xab\xb5\xd6 mV\xdar\xfc\x96U\xb7U\x9a%4\xfeAJ\x1faQ\xf4\x13V\xeb\xdb\x0drH\xf8X\x06\xf0W\xb1\x89\x96\xa0Z-\x0e@\xa8N\x124r\x99\xb1\x81\x16\xd7v5\xe8X\x892o\xdb\"%\n\xbd\xaf&\xadx\x14d<9\xf5\x12\x1e\xca\x88\xe8]\xd3\xaaQf;\x94x\x98\xeb\xb9r\xad\"\x8e\x9b\xbeV\xdb\xda$<\x8a\xc1\x97U\x0c\x89\x93B#\x1dD\x8d\xa2\x8aN\xcc\x11\xe9)\xd3(\x17T\x1b\xd1$0f\x0c\x86\x06\x02\x05\xb4\xc6\xeei\xb7\xcfI\xc7U\"\xce\xf5\xedr\x81\x1eF7\xf18a!\xa3)so+\\(\xde,$\xd7\x12RoEr\xf5S\xc1.\xc4`?K\xe4\x067\x1d\x86\x0eY\x91q\x88\x8c\x03\xc4\xc5\x8a\xe9\x82\xfd\xf2~>O\x99\x0c\xd82\xf6\xb5\xc6\x82\xfe\xa1m4\xe4:z\xc3\xe6\x88\x00\xf5FW\xf5\xeb\x06U\x9d\xf1\xaaX\xf0+\xc1\x82\xceC+;\xbfm\xa9\xf1O\xd5_\xb7\x9a\x89\x92\xf8\xdd\xaf3\xaa\xea\x9acb!~\x1b\xd7\"\xed\x81\x16\xf6\x9e\xe0\x91\x16&\x8f\xeb\xf5\x84\n\xbe\xde\x1e\x0f\xa7\x97q\xbe\xc9\x10B\xd0q\x10\xfd7\x83qi\x8e\xef\xcb\xf7ou\xfc\x8d)I\xda OVqvcT\x9b\xb7\x02\x0b<\xf3!\xcc\x17A\xf4c~)\xb8\xdf~\xc0\x9f\xb2 L\xc5\xd9\xde\x05~\xb2\n\xb2\x8c%S\xf0\x9bg\x05\xfd\x11t\x88\x8a&\x87m\xb0\x05\xef\xe8\x95P\xd5\xf5\xf6/\xe0\xbc\x1e\xd7\x99\xa6\x00g\xb1\xa8e-\xa9\xb5\xf7\xb4\x9e\x9eV\xd4\xc8'\x8f\x9e\xd6\xd5\xc8\x15\x17\xb6[\xff\xbe\xd7-\x03\x01\x8e\xe0\x94\x85r\x08_G\x82\xd9\xa5\xf8\x98+\xd9H>N\x80\x16eE\xa9\xea\xc0c\xf1\xb9\xcd/v\xca\x7f\xb4\xbc\x97\x8e\x0b\xa2\xaa\xc3&\x92\x8eK\xa2\xce\x85X\xe3\xbd\x0c\xad\xea\x02)+\x1dP\xa9\x1f \x94S\x17D\xddu\x04\x94\xa4\xa8\xa2\xb0.F\x9da\xc6\xad=:\xb6\xd1w\"\x9e\x05\xf3\x9b\xa30\xc4\xbeU\xed(*\xf8B\x98\xfbv\xc9W\xbb\xe5Aa^Pk'\xa8Q\x94\x94Ldx\x99D\x8c\x14\x0c-\xd5\xca\x86\x8e\xef\xd5\x06\xc1\xab\xad\x83z\xc5\xb7\xb2A\xc0:\xdf\xf1\x9d\x8d\xcd\x12Z)l\x9b\x81\xc1&\x0d\xae\xf8\xa8n\xfb\x18b\xa6`W\x18hl\x11\xed\xca\xba\xa1\xc6]y\xed\xcd\xae\xf3\x82,\xc5>7\xb0.\xcc&\xcfR.\xbf\x12\x91%\xee\xdc\x14)\xa4C\x12\x0f\x86$\xa8\xf2\xee\xf3\xba\xe1\x15\x14\xbf\xe3\x01\xd6\x90\x05*]\xea\xddz\xdc\xa7@\x1dl{\xa8\x18\x8f\xb6h)\x94\xd78\xdap[*\xa8%\x96\x8d\x98KO\xe6\x85\x90\xe0\xc1\x03\xe2\xa4\xfa\x80\x01\x85/M\xb9\x8a\xac-\xd71\x8f-\xc8W\x8cZ\xf3\xe8l\xce\xeb\x82e\x928N\xa7$'\x87=N\x00\xcd3\x16tt\xd16u}\xff\x91F\x8b\xd6\xa0,`\xdb1\xce\xd8u\xa6d8vP\xb8\xb3\x1d\xfby\x1c\x06\x1e\xcd\xac\xd7\xb5 \x84\xaa?\xe3\n\xcb\x9dI\xb7\xa6C\x92\xc8\xd3\xca\xff\x00\xbb\xcd9\x89|@\xaaI\xe6\xd8\xb9=-rK\xcc\x16\xb6\x9e\xb9-\xbc\xa1\xf8VC\xed\xcf|X\xe4OA\x03\xa5\xe9\xf7\x95\xe0\xcc\x1e\xe9\xc2\x07\xc4\x98$\xb9\x12*\x84\x8dX4H\xb2mh\xe5-\xb1`\x9dv\xd4-k\"\xe6\x174mz\x86\x05\x95\xf3M#o\xc9!\xdep\xd7tKH\xb9,\xed\xb0\xd2\xb7\xc1\x9c{y\xda^iP\x02v\xd5\x99k\x7f \xb0\x86\x8f2\xd7\xe6\x91\xb0]$\x90\x8fa\xe2\x0b+\x80\xe2\xeazH\xf21\x8b\xfcf\x06>\xf9:XC\x9f\xd8=\xa8\x07\x00\x82.!b\x98\x04P\xb723\xf5\xd1\xaf\x8cpu\x14\x07\xe4\x90\xec\x10A\x04g\xfc\x14\xd40\xdcA\xe7~\x0eA\xf2\xee\x85<\xd2h\x02\x1f\xdfPa\x15\xf1]p\x06\x12e)\xec\xe8P\xedh\xb7>\xc6C=\xea\xaau\xf6\xe5\xe8)\x0d\xa7z\xf9\xd0,/^\xcd\x99R\xef\xd5\xae\x87\x9bt]\xf0\xbb\x1e\xd9&-\xee+c\x13\xadV\x90)\xde\x9bX\x0c\x06\xe03W\xb94\x8b\xf5\xf0p\xbb\x03#\xad\xd2\x14\x8f=\x1e\x864N\x99%`k_\xf4\xe6\x8bs\x83L\x89\xd7\x81\xe6\x04\x9c'\xd0W\xcfu\x8a\x90\xf3\xa9\xf5\xb8\xear\xb52\xd4\n\xcb]\xe7V\xf7icX\xbagbQ\x90CIL\x00\xf2\x801!\xd3\xe2\xd7\xf7\x05\x8c+\x01X\xe4\x0f\x15\xa2\x03\x08\xf0Zi\x94\xd5\x99,\xf2\xc1\xd4\x14?\xd9d\xba\x9c{\xc7[\xd2\x84z\x19K\x1ci\x19\xce[\x8e=^\x14\x16\xcb\xa4R4!\xa3\xa2\xb8\x18\x1a\x8c\xeb!=\x84\xb0D\x1d\x1b\xc8)\xd3\x86\xc8\xf4Q\x81\x1eN\xf6\xa5E\xd4\xb9\xc1f\x81;8\xef\xdc\x86DI\x1d\xde\xd2l9^\x05\x91[\x0e{\xc7G\xf2\xaa\x93\x03=\xad\x94L\xcd\xca\xe4\xf4\xb6\xa9\x95\x89\x035\x1a\xb3\xebL\x94\x7f\xf0\x80P\xf2=i\x0d\xc7C\x0c|\xdd\xe2\xa0\x8d\xa86Ri\xff\x92Z\x01\xed\x9aJZ9\x15\xb4\xd6i\xc7xx\x1a\xd0f7FTo\xc1\xe9\x87\xd7\xa7\x87\xf3\x0d\x11\xa0~\xe6%\"\x0c\xe1L\x15\xe8\x9aK\\=\x04\xc7Eb\xc1\x1f\x85!\xd4\x96\xba\x10/\xe8{\xc0 n$\xb8\x0c\xf9\x959\x00\xcb\x99q=U\x91\xa7+\x82\x8d:\xd7\x08\xb6\x91-\x8a\x1a5\xe1\xc2{b\x1d\xfeN\xb1>.\xc5\x93\xb3\xbc\x11\x13T$\x17\xdcKbWB\x00\xe1\xfdx\x1e$\xa9t\x91_(\"\x18I\x95\x82\x9a\xdb)\x12\xb1\xdb{n\xff\xa0\xdd\x16\xca\xd4\xa0+\xf5\x1a+\xea\x86\x8d\x82\xb2\xad\xa5\xeaCuH\xff\xd4\xfc\xd5\xdb\xb3G\xc5`-\x01\x9cl\x18\x9f\xed<'\x91\xb5'{\x92\x13,\x88\xbf6\x1cJ\xc1i\xed6\x89\x80\x1bQ\xa4\x90Fr$ /\x94\xea$%\xdf\x9b\x86b\xf6\xad\x16\x81\x96)\"\xd3\xd4\x8f\\\xceS\x92\x91\x11\x12\xa6\x8a\x90FHi\xfd\x04\x851b\x05\xb8\x91\"\x07\x8c\xbb\xd1\xe0\x9b\x9a\x7f\xec\xef\xedX\x8c\xb0\x8be(\xd5\x9c,\xfc\xfa\x96b{\xb6\"\xb0\x01WVe\x11$%n&\x13\x137\x1a\x14\xfaR\xc6:\x13\xb8\xc2\xf1$\xf1\x98*\xbb\xb6C\x88f#\x93D\xb1)\xd9\xda\x92\xf1mhR(\xda\x7f\xe0i\xa0\xb9\xb4\xad-w\xf2\x84< V 1\x84\x0d\x15\x8d;\x0f\xdb\xa4c\xd8\xac\x17~\x80F\x1e< {\xe0\xe9\xa6\xc9\xdb\xdc\xa1}\xfd\xda\xa1\xb9^\x97\x899\x19W\xec+\xe0\xf2\x8fL\x8b\xe3e0\xf6\xd9\x9c\xe6a\xf6S\xc0\xaeD\xa6$;Pd\xb6\xe5nI\x17\x83\x16_Qc0\xba9\xac\xder\xaa\xd4)\xeak \x84:\x118D\xaf\xa4W\x95\x9c\xa5v{\x13\xe0\x1d]\xb1\xfb\x9dwg\x99e\xf1\xf4\xe1\xc3\xab\xab\xab\xf1\xd5\xde\x98'\x8b\x87\x93g\xcf\x9e=\xbc\x0e\x83\xe8\xb3\xd3\x94\x90!\xf0\xbf\xbc}#\xca\xec?\x8c\xe8\x8a\xa51\xf5\x98\xd3\x94\xa05\xf1\x12\xf5<\x16e?\xb2`\xb1\xcc\xa6\xc4\x91\xaf\xa3%\xbc#>\x9a\xa8\xe7\xe5\xab<\x04O\xd6;H\xb6\xef\x07Y\xb0\xb6d\x86\xc1\"\x12s\xff\x03MY\x18DL|O\xa7\x8d.U\"\xf6\xd10\xe4W\x1f\x19O|\x96@\x99\xf2\x15\x85\x8e\x97\xf4\x92e\x81\x87\xb7b\x15\x87A\x96\xfb\x966&\xf42\xf0^\xf1d%>\x04/\xa39OV\xd8wR\x0fn\x07\xb1Z\xb2, .\xf3\x8cI7\x88N\xe5\x1d\xabJ\xe7\x8b\xa5g\xc2\x8bw\x0c>\xcf\xf8G\x06\xc6\x92\x02\xba|\xc3`\x7f\x0fVy\xb6D\xdb)\xc6\xfcU\xc2\xfe\x91\xb3\xc8\xbb\x99\x12\xa7\xf2\x8e\xd4%\xf2?$|\x1e\x84LA\xab7\x0b\xac\x98\xcf\xd3e0\xcf\x14\xb4x\x1f\xa5\"\x01+p\xc9\xaf\xf1V\xb2E\x10\xe19\x01M\xf1\x8c\x1b4\xd9\xa3\xa1\xf7\x16\x0e`G\xffD\x1a\xe2\xd1\xb8\xd8\x0f\x1e\x8d\xed\x9b\xc1\x0b\x83\x18\xffN\x18\xc4\x1f\xa8\x18tG\xfc\x1c\xc54[Z\xca\x7f\xcca,\x01,\xc9\xd1\x91\xd4\xb5}\x8a\x02\xc1w;\x95w\x0c\x9e\x87\xb3#\x1b?\x98\xcf\xf3\x94\x1ds\xe9\xabsJ\x9cZ\n\xd2\x1b?H$go\xa9\x11\xbc\x9eZ\xf2\xd6\x81m |\xbe\n\"Z\xc1\xef:\xa9\x0d\xbd\xfb\xb9\xa5:|\\}\xbca\xcc_0\xb5\xb7\xf5O\xe4[,dkj\xed\xb8\xd4[\xfb\x81z\x9f\x17 \xcf#_\xd4\x05I\xa3\xcb\"\x0d\xab4\xc2'U\xd0L\x91m\xda\x04\x9b\x9bD4\xfc\xc8R\x9e'\x1eK?\xb2\x7f\xe4A\xc2\xe0\xa3\xb6<\xe4\xe3\xf3 \x0c\xd1\x0f\x88\x8c\xf71\xf5\x02\xf0k#\xdeF\\\xbeZjQ\xa8\x08 -\xa8H\xeew\xdb\xe72\x96|d\xa9\xacB\xfe\xb6V\xa1q\x99\xf1\x86\xc1\x86\x9c\xfb\xc7\x02\x13\x08P\xf12\x02\xbc`\x035\xba\x0b\xc0-\xfd\xe5^\x9e\x8a\x99\xc5\xfb\xc2\xa3\xec\x15]\x05!T\xc5\xa3l4\x877\xb4\xa2(;\x05]\n \x98\x06\xbf\xa3\x03\xa7\xc0\x8e\xfc\xff\xce\xd3\xcc\x04\x1eQH\xb2\x95\xc9\x12\x96y\xcb\xa2\x80|\xb5\x02\xdf\x84eC\xc4\x8b\x05\xf0'\x9a\x04\x12U\x00\xe8Z\xbeZ\x80\x7f\xd6g!\xc0^\xd9\x0eC\xa9\xae\x83\x0fg\xc2Wx\x06\xbe\xc3\xe7\xf8\x0e_L\xf0\xe4]<9\xbc\x89\x97\x8a\xfe\x82\xdf\xa3\x08'\xbe \xf3}\x12\xb0(\x03\xcc\xf0#O\x82\xdf\x05\x9f\x18\x16%y\x99;Z\x16\xd9=\xea\xfa\x89%Y\xe0YjZ\xabL[=\xe0\xb8\xdb\xd1?1\xa8\x84\xfa\xa2:\xd0\x12\x99K\x9a\xb5\x91\xd6RNo\xc2\xca;\x02\xbf\xa4\xd1\x02Ned\x98a8\x8e\xfc\xf5/S\xe2\xc0\xef\x11\xf5\xd7\xa3k\xac\x16\x91\xfb> \x16AT\x02sxG\xe1\x03\x9f\xf1EB\xe3\xa5\x85\x90\x0fVt\xc1L\x92\x01\x12ZI\x86 \"xU\x11\xbe\x86\x80\xd8\xf1X\x8c/\xeb\xcfx*\xbeJ?\xe3_\xf8\xbc\x87'?\xc2\x93Y\x12\xb1\xf0-\xcd\x92\xe0zJ\x1c\xf3\x15\xe9\xad\xcc\x16\x93\xfa\x06\xe4UE\x892\xc9R\xca6\xd9\x9f\xd9\x0d\xdci\xa4P\x95\xfa\x8d\xd6qs\x1a\x8b\xd3^\x01\xaa\x17\x1c\xf2,Xi8\xf8\x89@Iy[\x81;\xcdW\x14:\xcbXr*p?\xac\x0b\xf9>Je\x02V@\xa040\xa6\x95'\x8d~\xb7\x1e6`\x8f\x0e\x05\"v\x14-\x00\xe96\xd2\xb0r\x1cp\x012\xb2+\x9a|f\xc9 \x90\x1c\xf2\xf7\x88\xa1\xb4\x86\xcc|\x1b\x18\x80\xab\xc0\x0ex*\xaf\x085h*o\xa1,\xc0\x05\xd7c\xbeZ\xa15\xf60\xde\xac\xb0?\x07>\xac?\xe3\x0d\x85M\xf1=U\x84\xcb-qV=\xc9R\x9d n\x87\xcb\x96lE\x15\xa2\xc6>\xcf-\xd2\x82(_\xbd\xf72\xba\x86\xf5[\xbe \xdf\xd0R]\xa4\x12\xae\x89\x164O\xbaa\xc73\xa5<\x04\xcd ld\xa7q\x00\xd9\xf2m\xdc6_\xb3d\x1e\xf2+k\xa6\xd8\xe4Z6:%\x8eN\x1a\xc5*\x0d\x1b\x17\x05s\xb6\x0c\xbc\xcf\x11KS\xb3\\\xa6\x13\x91\x821\x0d\xa2\xec\xbd\x92\x08\xc1\xcb\xc8&\x10\x8ai\xc4S6\x018\xf1k4A\x81\xb2e\x81&\xcb\x17\x1cRP\xe7\xb5\xf5\x88\xa4\xda\xcb\x9a\x07v=\xc9^\xaa\xf6)\xeb78\x1c[\xa0\xee\x0e\xe0\xf2}\xc4 \xc1V\x00\x97\xa3\xc8\xac\xa3\xec\x17]\x8f\xf8m\xad\xe2(\xfb\xd5\x80\xfb\xb5\x05\xeeo\x06\xdc\xdf0\xb8\x84\xa5,Y\xb3\xa30^R\xf0\x1bo\xbc\xb7\xc1\xa71\xf3\xb2\x8fby\x9b\xa5\xcaT\xb4,`\xee5+\xc6\xb7\x92\x80\x94\xc07\x9d \xa2r|\x18\x136\x17#(\xfea\xd5\xb1\xf9\xaf2\x17\x1b\xb2\x82\x9ey\x0d+\x0b\x00U\n\x08cP\xba=a1\xa3\x19(\x89A\x81\xe2\xcd\n\xfbR0\xe1N\xf1\x1b\x85\x93<\xe8\xc9u\xc6\xa24\xe0Q\n\x05\xea\x89-%_1\x9a\xe5 3\xcb\xe9$\xb4\x94\xd2oA\x074\xcdCK\x16\xcflR\x94\x04g7\x12\x1c\xf7\xa6\x1e\xb5\xb0\x87)c8\xc3\x9f.i\\!I!\xa1\x95$MC\x1e[\xbe\xa2 \x184\x8fyyH\x13C\xe8SO\xc2\xbe\xa5@N\n\xb9\x84SO\xc2K\xd9\xba\x1b'\x8c\xfaoY\xb6\xe4>\xd4U\xbeb\xf5\x94\xda]\x02\xb8|Ca\xfd\x97l\x1dh\xe1\xa5\xf9\x8aB\xb3\x15.\xe0\x169kKN\x90y\xcb\xb3 \x84\xe5h\xbc\xa1\xf5\xf3X\xd3\x86\xe2\xb7\x95.\x14\x99\xa5\x0c\x02@\xed\"\x884K\x82\xcf,[&<_,\x8dc\xb3\x92\xdevvV\x00\xcd\x03\xb4ZC\xdb)*o\xb8,\x03\x94\xf0\xcf\x96\x95 Y/i\xba\xa4IBeWE\xca\xc8\xd7I\xf8\xa7T!^\xae\x81\xa2\x14\xb7\xaf\x04\x01\xf3&\x88\x98G\xe3\xb2L(\x13Z\x0b\xfc7\x0f\xa2j \x91b-\xf26\xc8\x04\xdd\xb1\n\x8c\xa6\xad\x8a4k1s\xbe\xa1L\xeb\x8c\xf3\xcfL\xd3\xc2\n\xfc\xcaB\x0c\xa7y2\xa7\x1e;\x95X\xc81_1\xe8\x1b\xb1\xd4\xdf\xd0h\x91\xd3\x05\xc0W\x12\x90\x12\x19\xbd\x0c\xa5\xb7&\xb1d\x8c7\x146Y0 \x02\xd4/+\xcc\xaf\x05\x0cv\x96e\xec:;\x02\xfdV\x01\xc6\xae\xb3\x91\xd4v\xb5\x80\xbed\x1eO4\x0e\x00p\xbfH\xb1\x141\x91/\x94h\xc3\xbd\x02\xa0\xa0\xf9\xca\x17\x0c\x92\xa3\x1b!+\xe98$7\xc7%\x019. \xc8E;k\x14t\x91\xd6\x86\x06\n \x13\x05\x94%\xdb\xb6\x7f\x1e\x05\x9e\x8d\xb7Qy?\x04~\x00\xf5\xc1\xdb\xe82\xf0\x03{E\xa0|e@\x83\xaa:\x0e\x9e\xa5\x1fXr\xb2\x92\xc0Y:\x8a\x05\x85\x8a\x11\xbf\xeb#\xe3>\xd7Y\x8f\xca\xeb]\x0c\xf8G-\xaar\xd6#%\xb6\xc2\xc0^\x9b\xb2%g=2dM\x18\xf8\xdb\n\x87\xe8\xacG&\xcb\x88\x15P\xdb\n\x19\xd65\xf32\x9e\x9c\xcc\xe7\xcc\x13xF\xbe\x8e\x18\xbcc5\xb1$\xb5\xb1jk\x96dG\xfe\xfaW\xa8&\xc9@\xf0\x86\xa1\x1d\x91Y\xca\xdd\x00\xb4E\xecVB\xffZ\x83F\xeb\x0e\xd8\xd5\x0f\xfcZ@\xca_\x16\x983\xc0 \nL\xbe\xa0\x90ip\x19\x846n\x18P%>\xacW<\xf1K\x89\x8fxk\x91\xf7\\% \xa9Q\xb7E\xeam\xb4\xc2o\x8cp\x9a\xf1\xba\x90\x95\\\xdb\xef\x87\xafq\x04p\x8d#\x80\xeb\xe3%\x8d\"\x16J\xad[@\x91\xf5$\xec\x1ba\x10}>\xf2\xb2\x1c\x88^\x07^\xa7T\xbe[\xc1\x13/\xe1\xa1\x01.\xdfm\xe0?& \x88\x96\xb0\xcb\x04\x15EC\xe6G\xb3\xd2\xb6\x1aO\x97\xfc\xaa\x00L\x97\xfc\xca\x06x\x16dF\x95\x99x\xb3\x82\xca\xab\\\x05\x89_\xe2^\xaf\xc2\x1f\xc0\xd3\xb6s\xbd\n\xa7\x97\x14U\x98\xb8^\x85\x11\xbe\xc8 \xe7\x17\xf8\x00\xd4\x10\xa5SLAG\x81\x8a\xb3W})\xa4\xe8:\xbc^\x85b\xcd\xea\xf6`J;D\xfa2@\x1as\x83/\xae\x1b|q\xdd4\x17W= \xf9\xf2\xefh]\xbfs\xbe:\x8a\xfc\x0fT\x1cQ\xe5K\xab\x7fT\x8a*\x1f)\x17\x02\x81\xc0\x95\xf5@\x11Dz\x1982Ug`\x84R\xcc!\x04il\x85\xa4Y\x1dil\x806 \xb9\xec\xdb >v\xd6!\x17z\x1b\x84Z\xe1\xad \xb0\xb2m\x10zI[\x8c\xdc\x8a\x85h\xcfWk\xb0WH\xd9\xc6\x8cL\xcd\xc8]\xa4\xaa\x9d*#\x02\x8e?\xb3\x9b\xd4\x0d\x06\xe39ON\xa8\xb7t\xed\n\x84t\\\xae\x08\x19\xe7vgH\x02\xf1\xeb\xc1\x03\xe2\xd2q\xe3\xeb\x12H@\x18\xeax\xdf$@\xc7N\xddu\x02\xc7\xedW[\x82\xfe`\x0e\x15\xa4\xa3\x85Guk\xd7T\x81\xef\xe2>>\x1e\xe3>>vw\xeb\xd5\xcf\xc16\xbdj\xcb\xaa50\xdf\xea\xf8\x05\xa69k\xc3;\x8b\x80\"/\x0e\xc8\xa4\xe6=\xb1i\xaeN@2\x12\x02]\x83o\xd0xIS\xe6\x7fd\x8b \xcd$\x15\xaf\x97\x10\n.\x1e\xe5\xf1~J\x1c\x1eID\x85\xa0)\xfdh\xd7\xf6\x06\xb4r\x11\xe5\xa0e\x90\xf5M@\xd9&\x16LC\xe4\x01^\x9a9\x19\x8f\x7f\x08\xf3\xc4\x19\x12\x07\x04\x01\x10\x1b\xfb-\x8br\x95\xf2\x8a{y\xaa~\xff\x95\xdd\xbc\xe4WQ\xf9\xf6)V\xbf\xdf\xf2\x06\xe8I\xe47'\xab\xa9\xa2\xbf\xa1EV\x8b\x05q\x87\x0b\x12\xfbf*\x0dM\xa7=\x0d\x82Mc\xd4io\xd3\xe0\xc2du\xda\xcfB\xd8\xb0j\x9dV\x8d\\\xf1m\xdb\xb17\x88\x1a\xed\xa6\xa5a\xab\x85b\x0f\xdb\xc4[\x8e\xbb\xb4KP&\x84\xd3\xc2PA\x07\xc7o\xb1\xf3\x92Q\x12\xa4\xf1I\x0b\x14\x8f\x05\xd0%\xcf#\x1f|5\xc4v\xd8\x90\xcd3\x13\xf8\x0d\x9b\xdfn\x94\xbf\xba~m<\xc0\xb2n\x0d\x8a\xfa\x9e\xbb\x16\x07,6\xde\x80~\x9a\x03\xa9\xcd\xfes\xc3\x93J\xac\xe6aH\x96Cbq\x10\xa7\x06\x9fC\xb4xr\xa0]58C\x91\x04|\xa6\x98\xd7!I\xc6\xa5\xea\xba\x8e\xb8\xf3Ry\xb7c\xa9\x0bf\x99\xd5\xfe\xfd \xf9\x8c%N\x93h\xfce3X\xee\x9aE\xa0\x84\x9aNImF\xd8u\x96P/\xd3wtu\xca\xa4%|\xf4\xd6\xa2\xc3\xea_\x0fdF\x0em\xb1\xd3\x06d\x8a\x9a[\x88'\xbd\n\xdam\xde=\x9a2\xe3\xd8\x9bZW\x9a\x1b\xba\x1c\x82\x9d;Y\x923\xe9#\x9e\x8f\x95\xaa\xed\x89\x1f\x80\xc8Q\x9a\xf1\xf82\xb6\xc7R\xfa\xa2\xd5\x07T\x8b\xd1!\xb8\x82\xc7\xb3\x8b\xf6\xc1\x99mo^qd\x96\xc7d\xf1\xe5\xbb}\xb8<\xe9\xed_\x87\xe3\xd6\x12\x17\x8b\xf4\xfc\x8eI\x89\xe0_\xaa6\xe9S\xdc\xd2 \xb5\xa6\x14\x19@n\xa4E{G\x0b\xeaT\x8b\xbdz\xb1t\xe7\x83^\xdd\xd2$TG\x97$m\xd5\xd9!\xd5\x91\x0edFZ\x1c94\\b\xfa\x1f\xf2\xec\x0d\xf8\xd3d\xf5\xe8k\x16\xaf\xa3%\xf1*M\x97a\xd1\x03u\xb5c\xb5\xc1\xc3\x8d\xaf.!\xf5\xae\xcc\x0c\x1e\x99\xc9\xe6\xaf\xbb\xc9\xfbP\x9c\xc9\xc9\x95\x05\xdbc\x94\x9b\xd9\xdf\xab\xf3J!\xce\xfc(\x8f\xdd{u&g\xae\xd2\xeb\xf0\xb1jM=\xdd\x97\xf0\x8f\xea\xbdZ\xaa\xf4\xfa(\xacUz\x9d\xe9Z\xa9A\xab\xc3/\x14|\xdd\x07\xdf\x8d\x1c\xcd\xfa\xe8\\*\x1e\xad>\n\x17e\x84\xaa?\xbe\xd6\xf2\xaej\xe1\xe8g\x0e\xbd\xe4\xe0G\xc0\xa1Q \xdd\xe3\x9dD~\xe5\xfdu\xc6\xf4\x15\x89\x91\xaa\xfd\x0f8\x97\x8a\x95\xf1h\xf4!\xa47\xc6\xcf3ya\x08)a\xe0}\x86\x1fUn\xc7\xe3\xb1,\x91C]>\xcf/Cv\xac\x81\xfd\x84.\xf4\x7f\xd5*\xf9S\xfa7\x90/\xd7A\xa6\x7fC\x8c7\xfd\xf2~]\x02\x15\x8d\xf5\x13\x0e\x1c\x92\x9f\xcb.)<3$\x0e[\xc5Y\x00Q\xcc\x1c\x16y\xc9M\x9c\xe9\x17_\xfdH\x12\x0e\x15\xce5{\x16D\xb1lv\x10\xadi\x18\x00\xd4\xe7\x92_\xfb\xccn>$pO\x02\xbf%k\x16r\xea\xeb\xff\xcc\x7fI3Z\xbe\xbde\x19\xf5\x8d\x94\xa2\xd5+\x93\xd5\x83\x97\xb7\\v\x14^\xde\xe7%\x94\xee\xf5\xaa\xe4\x06c\x9afL\xfe\xc8S\xf9C\xcd\x93\xf8\x0f\x12m\xe2\xc4 _\xe8\xc6&4c\xe5\xc0\x80s>\xc7t\xf1\xeb\xa4\x8c}\x96\x83\"~\xa9\x1a\xd2\x8c\x86\xa1J\xcd/WrV\xd2<\x8d\x99\x9c\xb9,X\xa9P\xd4\xf0\xc6soy,\xc8\x87\xb0xUS\x0c\xbfu\x07\xe1\xa5\x18\x08\xb8\x1f\x0b\x8cE\xba\xe6a\xbe2\x1a{EA\xf6\x0e?\x97\x8c\x85\xcey\x0f)\x91f\x8d\xd8l\xe7|\x9c\xf1Oq\xcc\x92c\x9a2w@\xb6\x05c\x16\x06\x1es\xeb\x9b\x95(\xcbg\x87G\x10\xe3\xb7\x99\x0bv\x98\x19\x8f-\xd9\x1c\x15x\x90;\x8a5Z\x0c\xc1KiFD\xb6\x89s\x0f\x92\x8c\x04\x91*T\x0f\xe3\x0b)P\xe3Cr5K\xce\x8b\x80\xd9\x00Y\xf3\xd2~\xa2PS\x91X\x08\x07\xae\xad\x16\xca\xce\x18\xe2P\x8d/\x12\xce\x81.}\xfd\xb2\xac\x1f\xa9\xe9\xd4^\xd3e\x9ee\xd2\x0c\xf8@\x06\xe0T\xdb\xdbHH\x8d#W\xa6\x08TF\x13FU\x9a\xf1m\xfdK\xf4\xec\xb8\x95\x92\xbf\xd8\x90\x92\xe7(\x13D\x13B\x87pR\\\xcd\xd89.-\xd8\xba\xe9 \xf5\xfb\xd3\xeaGpjtPT\xc7\xeaD\xe8\x07\xa6O\x8b\x0e\xe8\x97U\xcc\xdd\x01}\xa2\xb0z\x17X\x81\xf1;\x01\xfd\x1e@pRt\x00\xbd\x86\xd5\xd5 $\x0f\x96\x0e\xb07\xe2P\xe9\x01\xa3\x0e\x9c^\x90\xc5a\xd4\x03Z\xe2\xe7\x0e\xc0\x0fp\xfat\x01\xf5X/\x1f\xd4\xa9\xd5\x05\xa6O\xb4\x0e\xb8\x8f\xe5i\xd7\x05 'a\x07\xd0\xa9<\x1b{@\xf5\xe8\xc3\xa9:S\xbb\xc0\xe4y\xdb %\xcf\xe2\x0e\xb0\xb3\xf2\x9c\xee\x80\xfc\xc9<|;`\x7fV\x07\xb3\x9d\xbf\x12<\xc0\x1d\x19\xe5\xbfj\x8a\xab\x9do\x94\xfe\x9e.\xdd\xa8M\x82\xac\x9f\xfbf#!\xb8\xd3\xdd\xba\xd9\"\x88(`\xba\x84)\xa2\x19\xde\xdd\x9a!\xc9\xf4\xf6\xa1\xdeU\xaeq\xe4\xe9\xba\xc9p\xbf4X\x81\x8e\xbev\xc9G\xaa\x80@Y\xf6\x01\xb4Nc\x15\xec}7\x1a\x7f[P\xe6\x1d\x80\xdd\x12\x18\xa2\xe6.\xbe\xdb\xdc\xbd\x14\x9cUGc^*\xae\xab\x17X\xd6\xdd\xb9\x97\x9a[\xeb\x01'9\xb9\x1e\x80}F\xf5e\xc1\x01v\x02\xf2\xae\xadkq\xadHz\x8e\xfb\x99\xc1\xf6t\xe1a\xcd\x12\xf5\x81\xeb\xb3\xa8\xcfJV\xaa\xbd\x8f\x16\xef\xb8\xa4g\x1f\x8fLABG\x9b\x8e\x9aB\x86\xbe%\xfa\xf4\xa4\xc5\xbb^\x9f\x9e\x9cU\xd8\xcd\xf6O\xad\xef\xf6)\x19\xe4\xa7\xe3\x1b\xab\xbb}\xe3g\xe0\x88\xdb?\x81\xf8\\\xd3O\x9fO\x1c\xf3\xb8\x93~;\xeeF\x98\x1f@d\xd1\xde\xd2\xa6?\xc4\xa6\x08\x96\n.-q\x9d\xfd'\x0e\x1e\xc8H\xf0M\x17\x10\x90\xa1\xbc%\xba)9\xadf\x01u\x80\x05\xed\xb7?\x17\x83!\xb9\xa8\x94\xbd\x07\xa1/\xdcV\xf3H\x1e\x89\xa5\xdcw\xeb\xd4e\xe3\x8b\x8c.\xd0\xdb1b\x08j\x05\x1fm\x17\x0f\x04z\x18\x90`\x83\xf8\xac\x9f\x08\x96\xfe\xcb\x17\xe2\x9e(\xde^G\x85\n\x0c\x89\xdf\x0d\x16_\xaamh\xae\x820|\xc9B\x961\xcb\xf0\xdc\xfb\xd8Djll\xbd\x8c\xce\x95\xc3Iw0$>4\x0dR\xbb\xfaU\xbcYd\xef\xc7\x90zG\xd9\xfb\xa3}\xd4\x81=o\x11\x18h\xf7nc\x8f\x86\xa1\x8a\xacn@\x97\xcd.~%c\x9aC\xbc\xf8\xe3\x90\xa6\xa9\xcb\xeba@\n\xa9\xb0\xf4\x8f\xd0\xd4\x06a\xd2/\xb1\xe0-\xb0\xec8e\xb9\xcf\xcb\x0b\xed\xca\xadhM\xfd\x8a\xdf\xd3\xa85o,\x9a+\xc4\x0b\x83\xf8\x92\xd3\x04\xf8\xe6>~\xda\xb54\xa9RP\xe9\x94\x1c\x126\xae\xa4\x17\xb7\xa6\xd5\xe4\xaee\x85Mw\xf0-\xa7;\x90^\x86\xcdI\x08\xeec\x12&\x93\xc9\xbf\xc1\xdaM\x98@\xe2\xbeV(\xff\xf6k\xafy\xf1\xc3-79\xb8\x87\xbd\xcf\xecf\n\xf7V\xf5[4\xa2<\x02d\xa0\xe0\xdf\xdce\xe2\xf1\xb2$\xfc+T\x80f\x83/\xb5\x96|\x1a\xb6\xe5\xaeXF[\xb2\xa51\xa8-\x17|\x19\xa0\xd8\x81\xc8\xb8\x16o\xb9\x1f\xcc\x03pA\x90 8wwR\xbf\x18\x14\x8f\xb7\xa4\xc9q5\xf4~\xe7v\xfd\xccnb\x10\x1cH9\xae\xd4\xfd8\x94nm\xa7\xb5x\xa4\x04\x17\x8f\x7ff7\xb7\xf8\xaa/\xb8V\xf3\xa3_\xbe@z\x1e\xd7\x9a\xc2\xc6\xea\x03}\xdbs\xb5\x0c\xbc\xe5\x86\xadi\x19\x83\xfbll%\x05Eg\xf4[b\x00:$\xc1\xb7P\xe9m\xee_\xfcP9I\xbd)qNR\x8f\xa26\x05\xa0=}I\x93)q\x08\x92\xfd\x06\xf4\xad\x9c\xa3$\xe1W\xe27\x02\xf2)\xd6\x00\x9f0\x83\xc6\x8f\xca\xd0\x04 >ZLM^\xf2\xabH\xc3\xc8\x9b\xc7&\x08\x0b\xa7\xc4\x91\xa4\x1a\x92\xfd3\x18K\xbe?E\xb2\xde\xb2(\x9f\x12\xa7\xa2\xf9\xda\x00:\x8a\xe3\xb4\x13H\xb2MS\xe2\xc8\x1fo\xb8\x87\x19O\xbc\xe5\xbf\x7fH\x82\x08\x14\x84\x00?9\x9f\xa2\xc0gQ&\xf0\x89\xdfjg\x80\xa3\xe0\xfd)q~\xa0\xdeg\x9b\x85\xc5\xb3)q\xce\xe8%\x923\xd9\x15}\n\x19\xc5\xcc#&{ba\xc8\xdb\xedf\xe6\x13\xd1M\x8b\xaf\xcb\xc9S5T \xc7\xec\xc7&\xa2\xc1G!ZR\xb4U\xca\xe6\x9b\x99\xbb;S\xb8(L-\x03\xbb\xfb\xb4m%\xef\xedZ\xd6\xf0\xde\x1e|s\xc1\xd0\xf5\xb9\xf7H\xe5Z\xd6\xdd\xdec\x18%\xcc$|O\x8c\xd1\x8f\x1cu\xcb\xb5\xf7\xb4c\xdb\xec\xed\xb7n\x9b\xbdg]{\xe6\xd1N\xc7\x8ey$Z\xfe:J\x19\xea3\xe7\xd1\x93\xb6\xed4\x81\x95\xf3\ns52\x81u\xf3j\x17\xcd\x12\x83\xf9j\x0f\xcd\x12\xady\xf5\x08\xcd\x12My\xf5\x18\xcd\x12\xc3\xf8\xea \x9a%\x06\xf0\xd5S4K\x0c\xde\xab}tC\x88Q{\xf5\x0c\xcd\x9a@\x97w\xd0<9\x1c\xe8x\xec\xc2xL\xd0\x01y$\x06\xe4]\xbe\xb2\xac\xe8 \xccQ+6\xd9\xdd\x15U\xbce\x19\xada\x0e\x9c\xcb\xb3\x9f\xc0\xd2\x0b\xfegvc\xbb\xd1\xcd\x04\xc99\x03\x90s\x19\xec\xf63\xbbir\xa9\xc0\xfcV0\x1ah\xc8\x97\xde\xe3\xab\n\xb9_\x1b\x8d@\xcf~[\xa3\xb4\x7f|\xabld\xa2\xfc\xe1\x93C\x8d\xcc\xc8\x94\xc8\xb0:\xe3y\xc2W\xc7\x8a@\xab\x07DF\x15d7\xa2;\x82YAy\xc0x\xd5\x06eJ\x9cr\xc6\xee\xc1\xc9\xb6\xd4\x11\xfb\xd7s0>\xcd\xa8t\xf7\xc3\x92\x7f\x1d\x03\xd3\\-\xa0\xbb\xc3R\x1bI/\xb5\xa9\xcf\xda\x81<\xb8]\xf4;\xa0\xee\xc4\x96\xdc\x91%\xb2q&\xd5\xb5\xfd?\x86i\xff\xb7X\xf1\xb1\n\x15\xfd\x7f\x8b\xb8\xe9\xdf\x04O\xb00\xa3\xbft\xf1\x84\x1a\xf1JhCv%\x13\x04\x16\x05\xd5\xba\x97\xd5\xfc\x11\x1b\x1b\xc9\x0d\xc6\xaf\x11\xa74\xcc\xe8\xaf\x1b5\xe5\xd7zS~\xad6\xe5W\xbc)5(\x1c\xa8Ws\xff\x86-%\xc8\x91\x86\xff\xdfj\x19 \xce\xf2\xf1\xa0\xb9\xac\x9eu\xd1\x1b\x88\xac\\\x1f\xe0\xcd\xb1\xbe\xc8x\xfc\x86\xadY\xa8\xe2\x02O b`u\x11\xf8\xe0\xf5KdO\x90\xecJ\x84\x8e\xa9\x8a\x91R\x84\xc0\x80 \xa9\" \xc2\xa9U\xa3y\xd8\xb0\xeb\x85\x8co\x83\xe8O^dta~B\xe0\x82q\xc6\xdf\xf0\xabB{\xd3^\xa9\xb6\xfd\xfe\xf4\xf1uQ\x87\x91F\xa6\x88\xda\xfesl{F\xb5}x\xab\x196\xa7\xaf:3\xf5x\xcfS\xb2U3\xa0\xcfS\xf6*\xb8\x14\x13\xb25\xb9\x8f\xb6\x18\x91c\x1e\xd5\x15\xe6\xc51\xff\xf0\xb7\x87\x87\xdf?\xac\xa6\x0b&\xf9\xe1\xdf_\xfc\xb6\xf5\xdb\xe8\xb7Q-\x0f7\xd4?\xfe\xf1\xe4\xf8\xaf\xa7\x9f\xde^\x1c\x9d\x9d}\xbcxw\xf4\xf6dJ\x1cA\xc7\x8c \xe4\xf0\x08b*\xa79\x1a&\xc3\xf7\x8fU\xee\x19\x97\xb1\xb4\xbb\xf0\x081\xe8i\x9ct%\xe6\xd5^\xc6\xd2LTt\x08\x01f\xd88aqH=&\x10\xaaC\x1c\xb2M\xe8\xb8\xd9~\xb2M\xbe;p\xbe#\xdb$\x13?\x9d??\xf8\xae_@s\x1a}dy\xca\x9a=\xe9\x8a\x80\xa8c\x9b\x16\x16\xec.\xd6\xae\xf6\xce\x8aJ 6QL\x93\x94\xbd\x8e \xf0\xe4dg0\x94\xc1\x7f\x80\x8eo\xf6\xc2\xb6/\xeeY\xa4\xf6\xe4\xf1\xe3\xddI\x17\x92\xab\x0fQ\x11\xc7KL\xf6d\x08=\xdc\x91\x91\"wdH/V\x84\xdb\x12ks\xf4\x88< \xc1s\xc2\xc9\x0bB\xd1\x10_E\x8d\xb9\x19f\x90\x93m\xf2h\xe7\xd9\x93!\xa1\x03Y:\x17\xff\xb6\x0f\xc8\xa3\x01\x89\xc4\x7f7\x13\x7f\xd9X\x0b\xa4\x8f2\x97\x0f\x06d\x1b\xcd \xdbd\xd2\x96\xb9\xdb\x96\xb97@f9#\xffq@\x121\x00\xffa\xc6\xa6&\x8d T\x91\xdaD\x17\xc48lo\xab\xf6c\xcdGq\xa0+?5 _\x88\x1b\xa9\x9f/^\x90\xc9\x93\xfb\xc0G\xe6\xac;\x93\xc7\xe3'\xe3]\xe7\xf6\xb5u\xd8,\xb9\x91\xfb\xe8\xc9`(m\x91p\xdb\xa5I\xdd\x9aG{bx40\x8f\xec}\xa8\xe5\xd9\xc6\xa1\xb7\x04;\x1e)kw\xd6\xa2/'\xe0&\x8a\xfb-\xe3\xce)pV\x85\xd5\xbb\x01\xac7\x1b\xe8O\xd4T\x8a\n\xdcL\x06\x11\x1e\x08\xf4\xc7\xed\xe6\x9e\xcd\x16\xa1\xa1\xb4\x04\xf2\x8c|&N\xfd\xc4u\x1e=rDY\xf1\xeb\xb13\xac\xb8\xf3\xb8\xe7\xf8WbB\xf6,\x83\x9f\xa86\x9d\xe6\x97Y\xc2\x04\xd2\xe3EX\xe0\xdb\x7f9\x1b_\\\xb0\xf4-\xf7\xf3\x90\x81!\xdeP\x86\x87\x8b\x98\x97\x01\xa6\xfe\x90\xf0u \x86BG\x1dm\xb6:p#w\xff\xf1n}\xe5\xf1\"\xeb\xd1\x00e#\x02\xabY\x83\x8a\xf7h4M\x1ejM,\xa7\xa2\xa7MIwL\xc5J_\x12\x1dw\xad\xda_\xae\x93\xefyDU\xad-\x83\x18\xb9u\xfb<\x0eK:r'\xd8\x96\x16\x19{O\x1f\x9b\x18T&=\xc1\xc7\x9a\xfes\xc7Z\x9f;-\x07\x9en\x99\n\x1a\x8d|o\xab\x1fU\x016\"n5\xe8\xdd`@\xb2e\xc2\xafH\xc4\xae\x88@2`\xdc\xe0:\xc74\x8axF\x04oJ(\xf1\x04\xc3IhJh\xf1%\x07\xa1~\x14\x17\x8b\x99\xdd\xaf\x95\x95y\xff\x862\xb3e\x1f\xd9\x9c%,\xf2t\xf3\xc4\x87\xc8\x92\xa6\xd1w\x19\xb9d,\"A\x14d\x01\x0d\x83\x94\xf9dD\xd2\xd3\x05\x1b\x93O)+\xeb\x1b\x83\xb4\xa2xu\x07$\xe3\xf2d\xcc\x96l5&\x1f\x19\xf5\xc9J`m\x9a\x11\x15hu~9^\xb1\x87y\xca\xa4\xa8cT~\xc5\xa9\xdf\x8a\xe1\xa3\x91\xb5-~\x1b]A`\xd0\xcb\x95 \xb8\xe1&\xaf\x80\x0b\x08\x95kn\x04C^r\x1e\xa2\x19\xa2\xb1h\x86\x8c\x94\x8bf\xc9\xa3\x15\xcd\xd2\xce\xc5\xb1\xac\x9b\xd5\xa5\xa5\x114\xc2[\x0d\xfdy?Ge\x8bLK\xdb\x90r\x9a:\xb2\x14\x95\xf2Jk\xc7,\xa5xd\xab\x0fr\xa4\xc7F$\x17\xe2\x01\xe0]\xb8\xa6b\x18kW\xbf(\xff\x1e\xd5\x160\x91r\x83\xb1\x99 \x0e\xec\xa2\xec\x1d\xf0F\x83\xa8o\xa2\x14u\x82\xd14\x0d\x16\x10\x9e\xbb\xaf\xb0\xe79\xc9\xc8\x0bB\x93\x05\x88\x94S%\xe6yN\xb2\xedml\xaf\xe8\xa5^\x14\x98e\x88\xe1t\xf1\x89\x84\x04\x91\xe8\xa1j^y,-i\xfa\xfe*R\x8e&o$-')qqN3\xa9\x1b\x1f\xcd\x92\xf3\x1e\xd7\xdd\x86 9~\xe8\xb4\x8d8Q\x9d\xf2\xccN\xa9Q \xdf\x93=\xd1\x1e\xc95\x01\x8e,\xfb\xbdwN\x0e\xab\xaf\xb8\xfb\xd4\x159 ?p\x1e2\x1a\xa1\xa6\x04\x0b\xa2\x0c\xe3\xe7\xcd\xbc\x1b\x84e\xd3\xe9x\x14n}S@\x0e\x89\xbb#\x0e=5\n\x03)\x81\x88\x9b\x88\x0b<\xa2\x80\x8b\xc0\xe6\xf7\x05\xbd\xe3\x8d\xe3H\xf2z\x1dNb\xdc\x99^u\xcd]Y\x8a\xe6\xd58\x00\xe5\xdb\xbdp\xd4\xeeJ\xcb\xd3\xe8\xcb\x17\xb2%\xe8oZ\xd2\xdf\xba\xce\x12j e$\xf5\xb2\x07\x82\x0d\xa8\xbb\xb2\xd5\x0f: \x95\x11\xbd\x8f1\xa9N\xd1\x1d\x87\xc5\xaf\xe0\xad\x96\x91\xa9\x00\x9a\x83\xe3\xd70\xdf\xa6\xe3\xf3\x96%\x0b\xe6\xdfit\xba$OX9\xb1_/\x8b\x02\xed\xacf\x8b\xf3j\xd2\x85\xa1H\xc1N\x1a\xcb\x08\x1b\xd3\xcd\xa6oKV\xb9*\x07O\xcc\xc8)L\x0b>\x81\x06\xa89}f\x0d\x9bL^\x90\x9e\xe6\x97\xa9\x97\x04\x97\xfd\xe7K\xb5\x1d\x97\xa9\x89\xc6\xe4Q\xaa+\xed\xd3\x86,\xb9)\x1a\xd1\xb7\x0d+p\xbeQ\xffZ9\x1ef\xe2\x81q\x1f8.\x92%\xdc\x92F~\xa8\xa8\xe2\xf1e\x10\xf9\x90<\x18\x0cI#\xdbE\xfc\x8c\x10\xb47\x9f*\x1f\xef\xd5\x9f^=qu\xb3\xaa\xbd\x13\xecd\xaf\xa6\x15\x92\x83\x97\x81\xff\x96\xe7Q\xe7]\xab~\xe0\xa3\xe64\xb9\x9b}\xef\xe7 \x0c?2\x8f\x05k\x84\x93h\xfb\xf0U\xcbN\x90[\x0c\xdc\xc3\xa8\xb9j\xf2@M\x7f\xe5\xfaik\xea\xa7hu\x9b\xd1\xf9\x84\xcc\x94)\xb3\xe8\xd5\x8e\x02~\xa3\xaf\xd7\xb17h\xa5\xd7\xcf\xc2jz\x15c\x18\x19\xb6q,\xb2\x9b\xecd5\x7fm\x9c\xf7?0\x16}H\x98GC\x0f\\\x19\xf9\xca[\x7f\xadi\x06H\xc0#\x10\xa3T\x1b%o\xe6\x99\xaf\xb4\xd4\xab\x99v\xa2\x0b\x01\xaa\xf1%\x0d-|\xfd\xd4&\xc6\xc4\x04}\xa7\x06\x14\x1fk\xfb\xb5\xcf\xa1VCY}\xf9[\x02:\xb9\x07\xc6\xd8\x8eK\xe9Z\xfb\xd9\x07\xec\x8b\x14'\x00\xd1\xd9\xd9L]\xe8\xaa\xc4\xc3m\x1c]\x9f\xea\x08&\xcd\xef\xa2\xf2\xebO\x96\xdcl\x00M\xcc\xab \x1a\xc7\xe1\x8dk\x11\xe2`\xcfW\xe2\xd1vo\xc6\xb6G}s9\x06y\x9a<\xb0\x97\xbdk\xb0\xcb\xb3\xccGQ+6r^\xee\x8a\x0e\x8aI?\xb0<\n\xe7\x9a\xfd\xcaDp\xd3\xb5\xc4\xc8o|\xb7\xab\xd1\x18\xf4\xc7#\xedb?\xd2k\xa8z\xe1\xb4T\xef\xc0~\xd3l\xca\xb4q\n\xc8|\xbe\xb6\xaf\xb8\x16\xe9e\x1f\xbc\xb5`\x99\xb4\xb7\xf2\xb5zu_\xec\xa59\x8c\xea\x15\xc7\xf5\x908g\x9cP\xcfci\n\x97\x12W\xb2\xfa\xe2\xf6kHnxN\"\xc6|\x92q\x88\xe0\x1f\xcco\xc8\x1fD]kNI\x96\xe4\x8c|%T\x16\x9f\xf3<\xc9\x96\xc5\xe50\x01\"\x12\xeeF\xe0~q\x00\xf7HcgP\x1c\x04\xf3t|U\xedQ\x9fq\xe8\xa7\xda\xa5\x1f}\xcdi;\x10\xdb\x11qT\x96l\xae\xab\xf6\xa2\x81\xf9\xd1\x96\xe5\xdf^\x0b\xad\x9c\x02\xb6=\xd7^G\xae\xeb\xa8\x1d\xbd\xf6\xdd_\x1cw\x16\nb\xd2AAL\xfa\xef\xfc\xcd(\x08\xaa\xefih\xbb`-\x95{\xbeuX\xc2\x8e0Hp \xe6\x80\xf5R\xad, /e\xba\xce\xc8!\xd4m\xc2\xb6\n\x88:\x84\x84\x1e\x12\x1d\xb1\xfe\xccU\xb4D[~@\x0ee=;dJ\x803u=\xbd*l\xe7\x8a+x\xa7\x10`\xe7UXT\x82\xe2\xb6]\xc5\x16L\xf2\xd6\x96\xeb\x81\xd6\x07\x8c\xe6\xa0\x18\"\xab\xe8\xc1\x95\xbcqN\x0eIN\xa6jY6i\xc8k\xa5\xf9\xc1\xd5\xf5\x99\xca\x01\x1e#q\xff\xf8\xda$\x95\xbb\xee\xd3d\xe0\xe9\x1a~\xc2#`\x10\xc0\xfd\x03\xd1\x88TX\xc7j\xc5\xd5U\xb4l\xac^um^\xb5\xdf\xaf\x16Z\x93\x03\xe5!\xe0~\xb4\x1e\x87v\xa5\xbez'\xc1K\x90ti[\xdcR\xd5\x8f8\xcd\x98U-\xea\x9a\xc7KR\x83\xa9#\x19\xb0>\xd4\x1a\x83\x82\xd3L\xd4K\xf9\xe5\xda\x81T\xa8G\xf2\xb2j\x9bj\xa44\xbf\xddyN\x02\xf2\x82D\x85zf\xb0\xbd\xdd\xc4\x91\xc0\xd3p\xa5\x194$\xd1,8\x07a\x12\x9b\x89\x9f\xe7\xf2\xeeE\xfe\xb6\xb6\xad\x18\xac\xda\x0e\xf9\xb6Sh\xd9\xe7\x05\x00\xca0\x1b\xd4|\x02\x82\xce#\x00\x06\xdb\x7f\x9e\xa4\xf2\xbc\xe9\x89&\x957\xc2\xa7J\xb4\xd6\xd1[(QV\xd0J\x83\xe3#C\x0c\xb9\x08\x8e\x04\x1a\xd6\nv5\x12\xaf\x17\x94\x1aw8v[\xa0\xcaS\xd2\x0e\xb4`\xd9\xcb^\xb5\x01`\x12\xac\x99\x0fd\xd5\xab\x84\xaf:J\xac\x82\xeb j\xc9/\xceS;H\x06\x8a\xdf\x08+\x8dh\xe7f\xd6\xf1\x8fZG@\xee\xc3\xd6f\xca\xed\xdc2k4\x0c\xc1\x05E[~K\xf9B\xf7\xb8\x0d$\xc8n\xfa\x0e\x85\x81\x0b}6\x0f\"V\xa0\xa0\xe6\xce+A\x17,3\xb0\x15\xc4\\k\xc2s\x1b\xfc)\x98 %\x02[\x89\x97,\xf5\x92 \xce0^\x8fV\n\x19\xdaMMPA\xcaPAEP\xa5'\x85[\xe9\x17\xb4H\xea\x86C\xe2\x0d\xc9\x1cCD\xa0['\x0d-L\xcd:\xcf\xc6\x8e\x0bx\xd4\x0eG?\x023\xc4`g\xeb\xb5\xf0\x12\xb1h\x7f\x0cX\x1d\xb83hc,\xda\x88\x16\xc1e+\xe2S>\xb8\xf8\xb0}\x8a\x13\x1d\x1d\xd8\x17\x84\xb1G3\x97\xbb\xde\xc0\xc6\xe5\x14\x87\xdbR\x9e[K\xf2\x82\xf8\xc5\xb9\xb5\xbd\xbd\xec\xea\xb8 \x1b\xfc\xd9\x121+\xd0\x8fRN\x9e\xad\xc1a]\xa6\xfe\xcfE;\xe7\xb3\xf5\xb9\xd5o\xbd~\xc4WV`\x1f\xee\x0d\xc9\xbaC`\xd8O\xfc\x1a\x89\xb1_\x0f\xc9\xaaC\xf2e\xcaW7\x16\x83\xa1\xa9j\xa56%\xfeMp\x14\xd48\x12\xab\xde\x97\x12\xb7\xd7Y\xd8\xed\x81\xa2^\x1aL\xd1\xf8\x90\x04\xb8A\x9a\xd6\xdcn\x0e:\x084\x9a\xb3%\n\x18\x96\x08\xd9@\xc6\xbaeWD)\xaf\xbe\x0d\"\xf0fH\xd8\xb5\xc7b\xd8\xcf\xdc\xf3\xf2$a\xfes\"\x9a\x9f-\x19\x89x4Zi@\x9f\xad \x8b\xd6A\xc2#\xe0\xab\xc5\xa2\x06\xc9^\x1e\x86\x04\x82\x9a\x92\x15KS\xba`\x84F>\xa1\xbe\x0f\x11OhH\x96,\x8c\xe7yH\xaeh\x12\x05\xd1\"\x1dc\xda\xe2,L\x99eQ\x89>\n\xcehV\x1f\xa6s\xbb\xe0\xc3\x83\x9d\x86f\xbb\xd5\xa1\xc8\n\xbf<\x0f\xff#}\xb8\x18\xf6\x13\x1d\xeau3\xf3\xb6\xb7\x9b\x01\x1c\x88d\xfa\x07\xd2\xee\xe1\x808\xaf\xa35M\x02\x1ae\xe4\xa7\x80K\xe1\x15b\x00\xd1H\x91\xf2\xact\xd2\xec\xcc\x1f_\xf1\x1d\x828Hi\x02\xea\xd5\x87\x89\xd0\xa4#\xa8l\xd8A\x95\x13C}L\xbaE\x91\xf6\xd1!\\k\x83<\xb04\xaf\x9a\x0c\x86\x98\x8d\xff`Hr\xd1QO0d\xa0h,\xc5o\xa2\x7f\xdc\x8d\x86\xe4\xe9\x90\xa4\xd8\x01T\x1c>s\xe3;\xcf\xc9|4z> \x01\xa8\xfc\xcd\xe6\xe7-R\xa2\xeaR\xb3\x99\xdd\xa2\x0b\xcf\x1c\x8c\xde\xbe\xe5\x8a\x06\x8b\xae\x8d&C\xa2E\xbc0U\xe4\x90\xec\x80Nvy|F\xe4\x05I\xe0\x86R\xe9\xd2\xb9l\x16\x9dK.~\xf0\x1c\xa7b\xea1V{o\x99\xc6\x9a\x96;\xe6\xc9\xa3.{d\xac\xab\xa6\xec\x06\xd6\x11w\xb3AE\x90u?\xad\xdb{\xba\xffo\xd1\xbcF\x88t\xd9\xbcI#\x02\xbbB7O\xea\x88\x82vK\x07\xba\xfa\x89\x9e\xad\x89\xcb\xca \x8eA\xc3\xb7\x91\xbe(\xe2\xa84D\xac\xd3\xd9\xb9E\x9e\x91\x835\xd0\xc0u\x0c\x1b\x0c\xa0\x88sP\xe0\x83\x8b\x00*\xe5\x13L\x9c\xfc \xd1\x8e\xc6q\x9e.\xdd\x1c_\xbb]\x06\xb4\xdd\xbb\xae>\x06\xba\x7f\xf5^\x14Hr\xeb\xa0.]%\xd5\x9d\x1aDj^` 3\xd9\xfe\xba\xaa\x9e\xc6\x81\x9b-\x9f\x8e\x88\xdb\xdaM\x1321\x1c\xe2j+c\xb3\x83\xaay\x8f\x8c\xebdx\x95\x14i8\xd3\x05\xd4>R\x8f\x14\xb9B=\xacR\x0ff%N\x943\x81\xa0\x9c\x90\x03Q\xf5!I\xc6?\xe4\xf39K\xc8T\x99}\xdaX\xb3CB\xc74\x0c\xb9\xf7)J\xe9\x9c\x15\xf0\xd5A\xee\xbd\xbb \xa9;\xed\xd21\xca\x91\xc3`]h\xa4+e\xe4\x06\x04QL0\xdc\xc6\xb8\x11h\"\xb3+\x02z\xdez\xe1\xa3\xba\xe3\xc5\xc7=\x1e\xdf\xb8\xc9`h\xf52\xf7uP\n\xf2\xdc\xc9\xde\xa3A\xe1\xeek\xf3-\x80\x0c\x88q\xe64\x1bi\xf4\x1d\xd9\xe9\x99TP#\x07\xe4(I\xa8\xe8\xc5\xa08\x99\x9e\x0fH6\x8b\xce!0|t~\x1f;\xa2\x13\xdfO\xf6\xefr\x1c%\"\x13P\x9d)+\xbc\x9f\x96\xed=\xedt\xdcqO-\xab7+\xba\xff\xa3C\xa3M\xfb\xa6H\x14\xabQ\xdd\x05\x16\xc9\x8a4\x82\xd5B\x13\x03\xcf\xccv\xce\xe5\xa9\xa0\x8f '\x88|v\xedH\xcd\xe0d\x0co\xd0\x0e\xf85$\")\xce3\x95\x14\xe7YeSm8\x93\xbb\xbb8\x93\xb0\xff\xb4N\xae\xabS\xfb)\xee\xdap\xff\xe9\x1e\xca%\xec?\xad\x9f\xf2b\xd4\x9d\x99D\xb8\xdaQ\xc0\xb9\xd3d\x19\n\x98\x974cu\x00\xcf\x04xK\xe3z\xfe\xdc\xcc\x7f\x07\x8eD\xea \xb1 \xf2\x91-N\xae\x1b\xb5\xf8&\xc8)\xcb\xea\xf9\xcbJ>Lm\x1dd]\x01\x01\xe9_\x1dde\x82\x00\x86\x91GF\x1dnQ\x1b\x14\xfaS\xc0\xae\xea@7&\xd0\xab\x90\xd3lo\x17\xea\xac\x03^6\x00\x9f\x01\xd4\xb1\xbbA\x1d\xe2\xef\xc4Z\xd3\xde\xc65\x89\xbf\xbb\xbd\xbc\xe7j+a1\xd6\xb7]\xa9\xfb\xb6\x1b\x90G\xf8R\x9d<\xc3tk\x04\x1b\xdbzH\x90\x9aL\xcd\xc9\xb8\x143;-\x91\x0c*^\xf5\x9aHH<}<\xfb)\x83\x07\xc1~\xe0\x00\xa6\xbb\xbf\x06@\xcd\"V\xb0i\x01\xbe\xf3\xf0\x18`\xdd\xbb\xc5\xb2O[93\xbd\x04,\xab\xa4{\xe3j\xd6h\x7f\xa76\xb2bYL\x9e4\x97\xc4K\x9a\xb1q\xc4\xaf6\xc5:\x9a\xdeA&0hj\xbf\xf5\xe9\xfbZ;\x02\xb5\xf9 \xc8\x01{\x8e\x88K\xc9\x08\xf5O+\x98L\x88\x86#\x0e\xa7\xef\xc9\x0e\xf6\x15\x0d\xb7\xbd\x9d\x91\xef\x0fHapnx\x8e\xdei\xaa\xd4}\x95\x1a\x82\x19\xae\xd7W\xdb\xb8\x9a\xcd,j\xbc'\x89\xe1\xe4\x11.\xe3hluEn?\xc3\xc9\xed\x06S\x9a\x93\x03T\x0d&\x85\xf4\x86\x16L\xd8}\x95Y-\xe0\x011\xde\x89G@ \xdb\xcd\xe0\xf0\x92\xb1\xbb\x80\xc6L\x95\xd6Os\xd8\xc5\x94\xa0\xf3[\xd5\x0c\xc9\x06$,\xf1\xb1\xe6|\x80D\xcafQ\x1d#[\xa8+o\xb3\xa9\xda\x7f\x86\xc7\x93\xd8\xdb\xe9\xbe\x1a\xb7R\xbc\x05\x08v\n\x13\xe3\xfb\x18iG\xf4\xbahU\xa1\x90\xfc\xaf$\xbf\xa2YPeL\xec\xbbR\x14\xd9\x85\"\xbb\xe7\x16\xc5\x10\xa2\xe7\x85\x1aW\xd6\xda\x9f;\xea\xe6Ip\xdan0\x1a\x81mu\xd1\x06\xa9Y\xcf]\xf3`\xcd\xe5U\xb4l\xfc\x0b\xb2g2\x06T\xdak\x81^c\xb1p\x05\x95A\xb6\xb7\x13\x08\x16h\xc3\x12\x9aP\x8ef\x89E\xf5\x1d\xcc\x95\x81\xdcNe4\x8f\xa6\x92\x92U\xb8V\x0bip\xeb\x83\xbeyp\xab\x95fa\xc2\xf7\xf6m\x11\xe5\xfap\x83\x81\xab\x83='bS\x92m\xe28\x1b6\xbd+\x12\xcb\xfe3\x1c\xcb\xed?{j \x1bWo+\xd8/\x03j\xf2xH\xaa\x8e\x8aB\x9a.e(\x882\x91\xe6\xd9\xb2\x9a\xb2\xe4i\xcd\xfd\x8f\x18\xa4&\x8cR\xb0\xae86Jku\xa5\x8c&^-\xed\x1f9Knj\x1f\xa0\xd9\xb2Y\x9dH\xad} asRs)T.\xb2l\x0c!P\xc9\x01\xb9\x1c\x92l\x9c\xb0\x94\x87\xebN\x97\xaejr\xc1\xc7\xdd\xd6\x04\xfc\xba\xe9\xa2\xa6\xaf\x9a\xafF\x95r\x1f\xf5\xac\x98\x91C\xb4\xf2b3V<\xac\xc3g\xe6\x0eRIl*y\x16H}.\xad\xd7D\x15\xdf\xf9\x01D\xe0\x96_\x81\x18\xcb\xa6\x1f\x0f\x99\xac\xafZ\xaa\x0d\xfb\x94\x88%\x15TW.\x85\xd0\xc1\xee\x8c\x8e~\xdf\x19=\x1bo\x8f\xce\xb7\xa7\x83\x87A\xf3\x98}8\x9d\xed\x8c\x9e\x9d\xff\xe5\xcf\x0f\x9bG\xed\xc3\xbf\xbb\xbf=\xfc\xed\xe1\xa1{\xb8\xf5\xdb\xc3\xc1\xec\xef\xbf\x1d\xfe\x96\x9e\xffe\xe0\xfev8\xfb;\xfc:\xac\x97\x02\xb3\x04\xe7\x0fgH\x9c\xaf\xe2\xcf\x17\xf1\xe7\xb7\xdf\xc4\xdf\xbf\x8b?\xff\xe5\x9ck\x03\xa1\x99\xf3B\xa4|\xef\x0c\xc9w\xcew\x90\x07q\x80E\x81\x04\xfeF\xf07s\xce\x07\xcd\xd3{\xe6|WV\x15\xd6\x00\xe6\x00\xf0\x1f\xa2\xf8C\xf1\xe7P\xfcy.\xfe\xfc\xaf\xb2\x90W+\x14C\xa1\x12\xfe\x7f95s\n\x1fFd\xb6-\x87\xf4h\xf4\xb7\x8b\xd1\xf9\x1f;\xc3'{_\xeb\xa3\xb0T\x83\x8f\x80\x0e\xdc\xf1_\x06u\xf85ja\xf8\xdftM\xa5!\x1b\xce\x958\x06\x80\xd3\xe0(j\xd6{\xabo\xff\x89\x05\xfa \x88\xcb\x84V.r,\x86\x89s[\x99\x05\x8f\x976\x83\xc8y`\xe3\xdf\x1ch\x84\xd3\x92\x99Zs\xe7-%Uk\xacEE\x83:\x87\xedF\x9d%\xfb\xe8Yri\x93q\xfc\xff\xec\xbd\xeb~\xdbF\x928\xfa}\x9e\xa2\x84\xec8@\x08R\xa4\xe4+mZ\xeb\xc8\xcaF3\x89\xedc\xd93\xbb\x87V\xf4\x87\xc8&\x89\x18\x048\x00\xa8K\xc6\xdeg9\xcfr\x9e\xec\xff\xeb\xaa\xeeF\x03\xe8\x06@\xdb\xc9dv\x07\x1fl\x11\xe8{\xd7\xbd\xab\xab\xe8\xfa:\x17<\x06a\xa6\\\x8d\xc9\xbc\xa2S\x95\xa6\xe4\xb5\xd2\x1b/4R\xa7\x94(\xb7\x1a@\xdde\x0e\xc7\xa1Q)I\xe9\xdb\xec3\xe2\x12\xbaF,-)\x05^\x05i\xb0f9K\xe1\xebm\x1a}M\x19\x05.\x19\x04\"gU-\x81\x80\xc9Q=,<\x01_.\\\xe7\xc81(s[\x94Q\x8b\x14g\\h\xd3\xea|\xe5xp\xc4\xe9\x02\x8c9a\xa8\xd7\x8f(S\xc6&\n\xf3\x9a\x97z4\x1d\x9e\xc3\x04\xff+\xaeV\xbd{\xb7\xbfD\xf2d\x18\xf0%\xa6\xfb\x99@4\xf89 \xe3Z{|\xf5x\x91\xcbA\x9e\x86k\xd7\xf3a\x0fS\x8d\xcb\xb4\xc54\n>\xe6\x06\xf3\x17\xef\xe7\x02&\x90\x91#\xc3\xa5Ew\xbd(\x07\xf0\x16\xcc\xff\xb2\xcc\xf9/\xeb\x02\xc3\x05J\xc1\x17\\\xf8>\x92\x81\xd0\xa4\xd4\xc1\xdfV\xa4\x8e\x1c\x8e\xe0V\x80\x9bV\x18\xc3\x96\xe6\xa9;\xf2T\x10n\xe3\x07(\xa2\xad\xc9N\x1c\xa7\xd2\xc5\xdf?\x8a82e\\\xac-\xfe5\xd7\xd6\xcd\x8b\x82\x91\xffl\x8by\x02\x13py\xe5\xeb\xe9\xf0\xdc\x1b\xe4\xc9\x0f\xc95K\x8f\x83\xcc\xe8>^\x15\x08O|\xa0-\x15\x13\xbb\xaey\x1f@m\xb4x\x19\x81\xab\xa6\x18\xc1\xf0r\xb0\xc6H\xea\xfb?q\x96=\xfd\xe9\xdf\xdf\xed\x9f\xf7\xfe]\xfc\xbfo\xbc\xef\xca\x87\x8dn\x83\xfb\xfb\x0e\xc2\x8e\xea~\xe8\xc3\x81a\xd4{7\xd4\xdd\x9d;\xb0\x9e^\xe3\x8dZ\xb74\xec\x03\xaf&\xd5V#\x91\xd6\xe7\xb0\x87m\xf1-,\x9a\xdf[N\xaf\xcd\x97t\x95&}\xe6\xc3\xb1\x8f\x9e\x87\xfd\x91\x8f\xde\x82\xc3\xc7\xf0\x0c\x9e\xc0F]\x85zfNP\xc6\x1f\x81\xec\xeeK\x1c\xbeD\xf4\xcd\xf4\xd9\xb9\x88/\xdc'tz\xcf\x87\xf4\x12\x9e\xc0{z\xcd\xfb{iP\xaa\xb8^J-\x1e\x13)\xa1\xcaGpY8\xffpJ\xf2\xef\x98\xa9\xbb\xf6\xd2\x87\xf7\xa2\xdf3ZO\xbcw0\xf4\xe1\xd8S\x90\x81\xaf\x8e1\xa1}YM\x98\xb3Y2go_\x9f\xaa E\xee\x99\xe7\xc9\xb5\xb1(\xbd\xda\x82-\xba,\x18_\xf2\x97\x8f\x8bi\x96\x17n\xf1y\x0bG\x15d\xb1K \xfce\xddG[\x95\xf7\x95Uy\xef)\x12\x94f\xec\xfb$\xcb]\xaf\xae\x14\x95\x7f\x7f\xf8\x00\x8e%\xb3\xd6+<\xd7&\x9c(U\x12\x8e\xe7\xce\xb9\xe9[\xe9\x974'\xf4adP\xd5\x11\xec_\x99\xef\x81+\x00\x7fS\x1d\xb2\xa0\xec\xfb\xef\x06\xfb\x9e\x0f?r\x82\x83\xbb\xe8\xc3\x1b\xb9b\xb4\xa1?6\xee$\x88Y\x9e\xc2\x04\xdeL\x9f\xb5\\\xa2?Et<\x15\xd4e\xdezq^\x0d\xffgA\x85_\xd0\x10_\xc3\x04N\x15\xa0\xbd\x80'\xf0\xfa1\xbc\xe0\xa3<\x1d\xccVAz\x9c\xcc\xd9\xb3\xdc}\xe1\xc1S\x18\x1d<\x80#\xf8\x19z\x13pn8\xcf\xc5?O\xa7/\x1a\xc6\nrY\x7f\xee\x97\x8b~ \x19\xc2\x198\x1e\xf4\xe0\xd2\x80\x15\xcf\x8b\x12\xedc\xb9LY\xf0\xbe\xb1T\xdd\xbc\xd4\xfc\xa5\xfe\xd6\x88GO\xe1\xe0\xde=\x99\xeeA\x1b\xbd\xe3H\xc9\xc0\x86\xe8eV\xec\xc3+-vvQ%\x1d\xe4\xc9\xb3\xb3\xe3\xd3\xd3\xf2\x17\xd3\x05b\x0e2\x7f\x93\xbd\xa0\x15\xe6\x08\x9c1\n\xa1\xea\xcd\x98\x83\xbeq\xbe\xdfu%D:\xe9\xfb\x0ez\xf07]\xe8\xeai\x8d\xf0))\x01\xc8\xba\nRb\xf2\xcd\xeb\xdb\x07\xce\xbb9\xccp\xea~)\x08\x9d\x06H\x97^+\x1f\xbf\x9a\x9e\x9c[.E\n:\xc5i\xd6\xac\xe06\xad\xa4\x8a/\xf5/\xbc\x8e\x95L\xf1\x8e\x05//\xb8\xd1/\x8d\xa8\xcf\x1b\xfd\x96\x8b\xd8q\x8dm\xfe\xd2\x80\x02\xdf\"\xc9\xff\x05\x97\x05\xabg\xb3`\xc3x_\x8a\x17!y\xfe\xc5#\x84\xfa\xd6L\xde\xeb\xf0^\x97A\xffR\xe2\xad\\\x92/\x18\xef_\xb4\xbd&\xcb\x9e\x92\xbe\xfeR\xe1\x8aC\x1f\xfeR\x05`\xde\xfc\xf7\xe5\xe6\x8f\xaa\x88\xaf\xad\xe9\xf7u\xf1]u\xf7\xbdW\x11\xb1\x8b/RH)\xc6*\xcb\x94\xa4||\xe9\xd5G\xfd\xfd\x8eb\xfdeQR\xd3A8\xb1[NO\x10\x90\xcb\xb8\xa1\x82w\xab\xd2\xa6\xfa\\9\xabj62\xbb\x18\x0d\xc8\x04e\x05e\xd0\xea\xd8\x04\x8d\xbf\xaa\x88\xb54\xc1&R t\xaf\xbfA\x0f\xfe\xda\x80\x89\xba\xba&\xf43\xfc[\x1a\x16+JP%^p\xdd\xc8i:eU\xd4\x05\x05P\xc3\xa0\x992~\xe2?\x06Lc\x9e\xa7\xc5\x199|\xb6\x1f\xfa\x9c\x88\x92 \x7f\x02\\N\xae\x03\xae\x8aM\xac4'\xec\xbbNhc\xf3&\xd4\x0b\xa6Z\xcc\xe2\x95\xadPh *\x1b @\x96\x87YP\xed#2\xcb\xdd!\xf5\x14+\xe6\x18#\xc1*\x9c\xd1\xb0.\x86\xe0p\xberD\xc0\xc7r]\x0ex\xfc[\x0f\x8f\xad\xb6r\xe2\x18\xa8\xabR\x94/\x14-\xca\x16ij\x0fB>Ht7/phz\xf4\xd5y)ZOSLQ#B\x96\x89\x8a\xc7\xe5E\xec{\xab:q\xber|p\xfexp\xe8\xe0\xd7\xd4FEL\x87<\x96\x83\x18\xdc\xa2\xf2\xe1\x8b~.\xe3)\xba\xd5\xd2\x97\xe1\xf4\xc7du\xac\x18\x1d\xcd6\x91\xdcl\x16\x85\xe24K\x1b\xa1O\xd4\xb0\x81\"\x97\xe2\xb7`\xbb\x14\xc2\xa5\x8aQ\x9e\x8f\x14e\xf8\x18\x02x\xa2\"\x84>\x86\xc0\x9ef\x1d\xfdO\xa6\x81\xc9\x83q\xba=\x17\x086\xdd\x9e7\x8c\x8eB\x93\nQ\x02\xbd&V>\x97\xaa\xc9\x96\xc89H\x11\x0cH\x1d\xf5i\xdc$\xae\xcb\x0eL\xe1\x1c\x85\x82\x90\xd4\xba\xd1\x9c\x93\xd5\xc3\xac\xa2Uu\xf8\x18\"x\x02E\xd6\xf9\xa8Y\\\x9c\xc1\x04\xb2id\x11\x17\x1d9\x16B\xb5\x19\xe1\xf1tF\xd1\x08f\x06\xf1\xd5z\\\xbe\x9c\xc6jf\xe2:zI\xc0\x88\xcb\xd2E\xacNN\xeb2\x86ya[6\xadXW@g_\xf5\x8bHU\xd3\xa2\xa3\xb4\xbe\x9c\x16u\xcem+Z\n\x96T\xdd\x9e\x0dm\xcf\xa6dB\xda\xb4\x1b\x1e0\x04\xf1t\xd3\xa0\xcc\xc7\xd39\xed\xc8\xdc\x12K\xcc\xf8\xb6\x11L;l,\xa1\x82f\x95-\x16\xc8\xe7\xb8\xc09\xf8\x87\x0f\xb0./\\i?\x99\xfaQ\x9f\\CD\xb7R@D\x97U\xc4\x16O\x9a\xf4\xf7\xb9\"\xb0\xd2X\xee\x9e\xcb\xa4\x8a\xb8\x1a\x90=\xc0\xabEx\x92O1\x83\xa2\x162*V\xd2E]V\xd6\xaf=$\x07\x1c\xa8VB+\\)\xe3\x03~]\xe9\xfe\xf8\xf5\xcf\xa5\xf5Y c\xc3\xbe!\xdf\xbbmC\x94\xf0\xcf\xc4\x9f\xbcM)\xff3\xfa\xcb\x17\xd8G4LL\x93+\x0b\xb14\x922\xfc\xc3\xd7\xb1tR\x999\x13\xeat,}+\x18\xfeQ\x9a\xc2\x87\x0f\x107H\xff @\xfc\xaa\x8c\xe8\x16\xc1R>x\x04\xd8\xa2\x03\xf0G\xd1\x90+\xe8\xc1m\x87\x05T\x18\xa1y\x99\xe8\x02\x91\xa2\xd4\x9f@\x83\xe4IU\x99\xce9\xe2(\xa1x[H3\xf5\x05\xb8(\xed\x173\xb6\xc4:\xb5t\x0d\x13\xb8\xe0\x8d\\\xd2\x16a\x9bD\x17E\xedz\x9d\x13\x98\xc0u\xfd\xf5MmR\xdad\nL\xe4\xfdL\x0d\x11\x17\xcf8\n\xafJ\xb4\xa0<\x90z\x1b\x1a\xb9\x06:\xfc\xd0X\x8bA9?\x13\x1c\xa5\x84\xa7\x1a\xdc\x92sN\xb1\x08\xae\xe0\xe77\x1c\x81\x8f\xe8\xbf\x89\xfc>\x86\x1b\x85\xb0\xf4\xca\xf34t\xe2\x0d\x97YM\x99@P_\xac\xdc5\xabu\xbd\xa2\xaeW\xd45\x93]\x17\xb4\x82\xa9\xae\x15q\xc2\x0c\x7f>n\xedu\xad-D\x135+^\xef\xc23\x13\x01)\xca\x90R\xa6\xba\x8e\x15\xb6[ B\xa9.\xbe<\xd2\x7f\x8c\xb5\xba>t%T\x1c\xbc*WY\x903\xf0\x8d]\xa9\x13[<\nso\xe8*\x8b\x0f7\x83M\xb2\xe1\x18\xc9\xdf\xdcH\x17\x96\x95\xd7\xb5[K\x7fx\x08\xffb\x1bE/\xd3\xb71Et\x9e\xbb\xb2\x19\xa3|\x8c\xe0\xe7\x95\x17M\xad\xfa\x8d\xe4A>\xb8\xaf\xb8\xd2\xbc\xe7\x16@H\x7f\x15\n\xed\xbf;\x1eyD\x17\xdf\x04b\xfc\xbb#\x8e\x92\x14\xf1~U4\xac:+\x0d\xe1U\xc1\xfd\x1a\x88`\x87\x85\xf2A.\x89[`=\x8eF{/\xe9?\xdf\"E\x93\xb5\xf2p\xa4\x13\x901g\xa2\xa8\xb1\xc9\x11\x1c\x15\x83\xc1\x8f\x9f*\x02\xee\xdd(xQ\x93\xdcT\xbd\xf6J\xbd\x8a\xb1\n\xad\xb5\x18D!\x9dJ\xd2\xd1*\xe9+\x99\xe5\x98v\x1e\x8dw\xfd\x91\x87^\xb0\xefiA\n\xca.\xff\xba)\x0c\xfaB_w\x06\x84e\xc7\x88q\x03\xf9\xcb\xd3\x10\xf0X\x9c\xef\xfa\xf0\x12\xfb\x92\xb2\xe6Kx\x8a\x12\xe8\xcb~\xdf\x03\xd9\x0e\x1e\xc0\xdeL_\x9e{\x9c\xd4!L\xcd\x98\xfbR\xdc\x7f+:\xe0J\x7f\xf9\xb3O\xa6\xe81<\xc3\x81\xd5>\xf6\xfb\x06Z\xbcG\xe7\xd5'\x16\xc3\xf7c^\xed1<\xf34*\xcb\xc7Pi\x89\xb2\x10\xead\x9a\xaf\x95\xb8\xfb\xf0\xf0\xfe\xdd\x07fM\x8ck\xfc\x87\xf7\xcd\xdff\x18f\xdc\xf8\x89\x83\xf9\x81\xa5\xda\x867\xf9\xd0\xfcm\x0e\x13xP\xbd\x13'\x1f\x8ez\x0f\x0e\xcc\xdf\xb8n9:\xb0\xb4\x8a\x91\xf1\xfa\x16]s\x89~\xc97q\xbf\xbfo.\xc0\x05\xa1\xfd\xe9O\xefn\x0e\x86\xfdw7\x0fN\xce-\xe5.\xb1\xdc\xbb\x9b\x83\x93w\xdb\xc3\xe1\xf0\xe0\xdd\xf6\xbb\xef\x86'\xfc\xdf\xfb\xa3\xf3\xfd\xa5\xb9\xd2\x855\x8f\n\x7f\x92+\x96.\xa2\xe4z\x0c\xceK\xf5'Em\x8c\x19\x9bgp\x1d\xceY\na\x9c\xb3%K3\xc8\x13\xd8\xa4\xc9\x8ceY\x83b\xed\xc4I\xde\xbf\x0c\xb2p\xe6\x8c\xc19\x8d\"\xb6\x0c\"\xd1*\x17\x1dn\x1e\x0e\xc1\x8d\x93\x1c\x02\xc0R\x80h\xb4I\xc28\xf7\x9a\x9a\x0d\xe3\xab \n\xe7}l \x9b\xa6\x17\xd4\xb49\xf1\x9d!\x9d\n\x08\xc55\x82>\xcc\xcc\x9f\xb9\x8e\xfac\x90\xaf\x06\x8b(\xb1\xe5\xae\xe4:\x01\x19\xb5\x07\x8b4Y\x1f\x0bo\x1a\xcd\x9dX>\xca\xad\xf8\xcc|<\x00*\xc6\xfe\xeb ^\n/\xdc\x8b)3\xdaE\xed\xad\x1f[o\xd4A\xd5\x1e\xaeB\x85\xa2I|z\xfe\x18b\x0c\xc4\x9eR\x84X\n]n1hI?\xe5\x9d\xc6\xf6\xbeql\xc5\xb0\n\x89\xc2\x0e\x07\xa9\xe1\x00P}\x93\x02y!\xef\x82<\xf8\x89\xb98\xd5\x03\xf4\xfbC\xceON=)\xf4\xe0\xd8\xa5\x13Su\xe6r\xe9s\xc9\xd6S6@\xca \xeb\x15N;;\xcd\xfe\x99}\xdf\xd5\xb6P\xac\x06\xda\x0e\x1f\xaf:\x0d}\xe1D-\x05\xef\x84\xae\xa9\xb9\xa4jk\xee[I\xaf\xe7y\x1c\xb5\xee\xdd;xt\x9f8\xc7\x93 \xdc\xbb\x7f8z\x84R\x0b\xaf\x08G\xfc\xc5\xc1\x10\xe3\xa2\xdc\xbf{ot\x00\xe24\xad\xde\x96G\x01\xce\xb8\xbc\xea\xba\xa3\xe1\xc1!\xdc\xe1\xbb\xf7\xe4 \x8c\x86(\xc5\x88w1\xffq\xff\xde\xbd\xc3\xfb(X\x89*9\x17\xa0\xb8r0\x06\xf5\xe6\x0b\xc2\xd2K\xfbj\x8a\xf6\x10\x13\x9a\x8f\xe4\xe4#O\x9el\x00\x05\xfa\xbd\xa1\xa78\xd7{\xa0\x0e}\n\xa3!\xdc\x01\\\x9e\x0f\xb4\x1dB\xa0\xa1\xb5\xff\x00b\xe5\x18\x1d*\xf2&\x0c!\xcd\x01\xcf\x02\x05\xb4\xed\x08l\xaf\x1aQM\xcd\xa5\x07\x07\x07\xd0\x83\x07\xf7\xe0\x1bp\x19<\x81\x83\xfb\x1e\xf4\xc1u\x87\x18\xcd\x0c7\xfb\xden=\xbf\xb1\xdd<\x90\xcf\x95\xb8\xfd`I\x89\x82\xb8\x80\x98 Gp\xe22\xd8\x879\x06\x95\x03\xbe\xae\xc2G\x81\xde\xe7\xdec\xdc\x8fk\xf8\x06\x16\xf8\xf91G\xe4 D\x1e\xae6\x95\xban\x06\xbb\x13\x97\xe3\xbe{\x8d~3\xf0\x0d\xf0*._\x99\x8d\xb7\xdb\xc4\x7f\xb4\xc3\x98\x86\xdaz\xce\x18L\x075\xf7a\xe9\xc3-9\xe2\x98\x8c\x9a\xf2\xb9\xd0I\xb6\xb5\xd4\xb5\xf9\x16\xbe|8\xbf\xba\xb2\x7f>\xae\x1b\xc8\xe4\x83\xfb\"(\x85\xeeA\xbd\xf6f\x82\x82\xd0\xf3\xe1\xc4\xbdF<\x86\xa7\xc0'xc\xe8\xea\x86\xf0\x9d\xca\xf1\x89\xfe\x11\xb3\x03_J\x0b\xd1u\xaf\x87\xa1\xa7n\xba\xfa\xfcA\x81\xfb/\xdd\xcb\xddp\xfc\xf4sq\xdc\x87\x0b\x9fC\x9b\xb8>QMr!\x1f\x04\xccK\xe9\xc3\xf5\x0c]\xb6\xa4\xb0\x96#\n\xa3\xa8$\x84\x83U\xc9{\xe1\x92c\\\xe0\x11tN\x83s\x8e\x9e\x02\xd5\xde\x13j\xdd\xb85\xaf\xa0R\xc7)\x06{\x99\xc0{\xd5g\xa2\xd5^{\x84\xd9\x97\xed\xa8\xc5\x91)k\x19\xdcS\x91\x81\xfc\x16\x9e\x88,\xe6\xbc\xd6m\x837\xa8h\xba\x0fy\x81\x1a1G\x0d\xf7\x02c\x82pBn\x02\xda\x98C\x12U\xe4\x84\xfe\x82\x96rk\x1a\x9f\xb5o\x10\xa6\xc7\xd2\xea\xe2\xf8{\xbd\x18\xa1\xb8\xde\xef-P\xda3\xfbb\xc9\x07g\xc6IK\xec\xa3\x8e\x1a=\x96\xc8\xcc\xd1q\xce\x919\x14\xc8<\xe7\x0b\x17j\xc8<\xc70(\xdec\x98\x0bd\xe68\xb8\x81>\x87<\xa9\xe8,\xfd\x02\x04^\xb9K.\xf3\xc2\x1f98\x0e=O8\x15\x9c\xb8\xc7\x0dF(O\xf9\xb4\x13OAj\xafW\x97\xf0\xf4\xe7c\xaf\x17\xf3R\xf5\x84S\xd0\x86\xc7\xef\x9b\x84\xa4\xea\x9b\xadU\x17\xbebi\x16&\xf1\x18\x1c4\xe6X\xb4\xd0\xed,;0\xe5\xb2\x96\x0f] \x1a\xc33;\x9b%\x1f\xb01\xbc4O\xd5b\xb4\x10\xed\xfeh\xfe,\xdb<5\x7f\x16.\xf6\xe3\x8e\x12\xb1\\\xd8\xee2\xb4V\xebv\x90\xb3,\xa7\x98|\xceM\xdc\xef;\xd0#\xd2iJ\x99-\x9f\x8f\x16\x02n\x9b\xcf\xdb8\xa4\x19w\x1b\xdfg\xcdh\xa9\xcd\xe8GW\xe6\xa6\xb9[\xb9k\xf8i\xf3\xab\x83\xac\x0fZ\xbeD\x94n\xac\xa6Y\xf9\x88qn\xeb\x8d\x15\xc1nP,g\x14\x02\xd3\xd5c}$\x15\xffC\xdd\xe3\xcf\x90\xe6\x86\xffy8\xb2d\xbb\xe9\x14\xdfC\xef\xbc<\x1f\xe9\"\xd8\xb6\xabb\xbe\xa6\x0c%\xe5\xb9\xf8\x95\xe6\xc9\x91\xaak\xf3\x16K\xab\x88\xf58i\xeb\xec\xc56\x8a:v%\"\x85vjR;1\xde\xad\xf5\x1dC\x89u\xda\xcb|@\x84 \x0d\xf8\xf2\x16z\xec>|\xf4\x88+\xb7\x03\"Kd\xdd\x97\xde\xc9@q\xaa\xba%\xf3.\xf7\xaa^+\x91,m\x8a5\xd2\x12\x99J%\xb1\xa9e\xf0\x81\x96\xb0\x87>\xd4l\xf8x\x84\x81G\x89w\x1cbzxC\xd8\x99\x18\xf2\x8a\x07\x86L\x90\xa19M1zC\x0c\x853D\xe5\xc89\xa8\xb7\x8cqE\xde\xf5\xf6+\xc29\xd3\x0ckU;\x8ct\x01\x1d\xb1\xc3\xca\x888\xac;1\xe6\xa3\xd1q \x1c\xac\x83\x9b?\xb3[\x14v0\x85\xa9zch:\xd2\xcdW\xa5\xaf\x99\x0c\xf5\x19I\xc9 \x13PV\x1bQ\xd61J\xa4\n3\x8c,\n\xbd\x9e1\x833zLJ\xa9{\xe5\xa3\xc9\x9eMg\xc5\xfd\xff-\xfaQ\x0fm\xc6\xc55\x17\xaf\xd5\x81\xa7)5\xc6\x1a\xed\xd7p\x04\xee\x02\xcb\x16gTk!D\xa9wk!\x8c\x8eEY\xfa\x8c\xc7\x94s\xf3\xed\xe1\x85\xe7\x83\xe5b\xf1\x86k\xd6n\xe0\xc3\xdc\xa3\xb0\xd3\xd39\x1e\xb4\xf3\xffI\x16[a\x1cTr\xe0\x9c\xf2\xff}X\x9d\x17\xafV\x16\xec\x87\x02a\x82\x02\x0f\x8a\x89\xe3\xf9\x97\xcc'6\x083\xfc\x9f\x83e\xab\x8by9Q\x90\xb8\xba[CJ\x19&\xb2\x1ecgw\x02\xa1\x8f9m\xf4IWYld\xf8\n\x030atO\x89\x94\xcdA>\xebpB\x95/)gTKm.)\xe5\xe9\x96a\x94\x8bE\x10e\xcc`\x8a\xa4\x06\x05>6\xe7B\xc9\xbe\x0b\xe30g$\xb1\xd0\xc1s\xbd\xbd9[\x04\xdb(ol\xc9q,@\xf3\xd1\xcc\xce\xeb\x84\xb2\x16sX\xb4l\xa7\x97\xbe\xc6\x0dA\xdef\"\x91\xc8\xb3\x1c\x7f\x1eA\xe8\x06(\x9b\xa8\x01\x046\xea\xc0I\xa4\xe1\x16F\xea\x06x\xb5\xc2\x90wW\x8c8qI\xe3\xe3\x9d\xf1\xbf\xba\x08\x92R0\x83\x9e\xb9Of\xb22\n\xa3/\x86\xc2\xb2\xd7\xe4c\xa9\xde\x1c)U<2W\xdc\xd24\x1bF\x84\xf0\xf2\xfb\xa2\x04\xe6`o&\xd6O\x0e\xfa\xeb`\xa3\xe5\x92\\\x07\x9b\x1a\xdb+\x9d\x85M\xcfKV\xcb\xe2\xb8%\xed\xf5<\x99\x035w\xd94\xe5\x05-\xfe*\xd5d\xa8\xa0q{\xcd\x81\xbfy\xbd\xae,\xf9O\xcba,\x99\xd7Y\xb6\xa1 \x97\xbfR\x1a\xd4\xda\xea\xef5\xeb*fb-\x9fn!0\xe5#\xc6\xee\x96\x82.\xe5\x82\xde\xc5\xec\x1ar\xb7\x80(\x97S\x8e\xcb0\x0e\xd2[\xc7\xf3\x8a\xd7\xcee\x90\xb1\xfbw[-\x07V\xa5\xe8\xde]O$M\xed$\xce^iY)\xcdA\xdd\x0f, \xcf\x0f\x87\xe6\x84\xe7\xf7;\x05\xf47\x1c\xc8(\xde3\x01\"\x9d1\x14\x19\x0bb\x91\xb1 uC7\xf6\xd0\xc2\xaa\xc4O_$ \xc6P\xacB\x17\x8e\xd1\xbeV\xb8\xe6 un\x81*}@\x9f6p\xc9 \x84\xbe\x8c\xd7o\x14\xc7`\xf0\x84\xe6\x81\xf0\xe0)\xad\x1a\xaf.j\xa5\x9eN\x14\xd4\x90\x13\xf4n\xc8p\xa5%\xfe5E\x84\x1f\xd57\xf3n\xdb\x86YfL\xb9\x16\xe0\x03\x84m2\x92\xde\xc0^C\xc3\x16\xed\nt2\x9b\x9bQ\xd0\xaa\xaf\xc8\x95-.\xfb\xf9\xb0?\xfd\x89\x02\xf2\xbd\xeb\x7f\xf5o\x7f\xbc\xf3\xf57\xbd\xc1\xbb\x9f.\xfe\xcf\x87\xff>\xdf\x0f\xa5m\xc5\x12\x88L\xfaw\xccVA\x1a\xccrtD\x81\x15\x0b\xe6,\x85E\xc8\xa29\xc4\xc1\x9a\x99\"h(\xf2_\xb2\xd2\x94\xd1\xda2\xe7\x8ef\x87\xb6iW\xf5msg\xa9\xb93\xc9 \xcc\xd4/f7\xba\x19\xc3F$Ak\x88I\x7fK\xbbqWL\xd0\xde\x16\x7f\xe6I\xcc\xc6\xba\x8d\xca\xe0\x10\xa8?\"6\xbb\xd9\xb0\x0b5Rk\x7fkH'%\x06\xbc\x1a\x849\x85\x88\xa7s\xf9)%/\xa5\xb7y\x92\x9e\xef`D\xab\x8f\x13\xe3\x97u\xda\xca\xc4\xbc\x95\xe8\x9f\xb8\x0e6\xa8\xf6\xfb\xe50\x81\x89\x0c>z\x12\xccV\xed\x81\xb1Us\xc1f\xc3\xe29%\xbb\xa9\x8f\x98n`\xa3G\xb5.\xab \x85\xc0\xd0]\x97\xbe\x18:\x98\xb3\xe9\xc8\xe4\x94T\xf4\x88{ \xc4\x93%\xcb5\xa1\xe4E\xb0f\x99\xcb\xbcz\xff\x9d\xe7:\xcd\x1b:\xef\xb4G\xa1\x9d\x9e\xb1\xc1e2\xbf}\x9b\xb1\xb9\x12\x1e_\xa5\xc9:\xcc\xd8 exC\xbaB\x9c\x9eE)\x0b\xe6\xb7\xc0\xffuL\x87jE\x8b\x18\x90\xad\xd3\x00\x83f[\x1e\xbb\x96\x83j\x0f\x02\x0e8\x84$\x8e\x92`\xde\x05\x05\xf8\xc3\xc5\xa6\x94e\xdb(\xb7Y\xe4\xb1I\xc6W\xa0k\x9b\xb1\xcb\x06X\xa1\xb3\x11\xbc\xdb^n\x9bI'_\xab\xef\xc2\x88\xbdFva\xa6R1\xca?&\xe7$I\x0f\x06|w\x9feZ\xb2c\x12\x97:\x8d0k\x826\x94\x9dj9\xef\xabn\xfdP\x99Q\x91b\xd8-\xa5\xe9l\x98A\xc6\x08t\xf5\xaa\x18\x82B\xa4j\xec4\x95\xa8)K\x05\xe2\xa9\x0e\xeb2\xdc\xd1E\x18\x87\xf9\xb7\xc9\xfc\xb6\x93P\xcf\xd7\x85\xaa\xf1\xb6N\xe3\x10\x19\x97\x91\xc6\xe9UL\x07\x01\x1e\x14\x0d\xbda7\xd8\x90\x9d\xf3i\x17\xc1.\xa3\x04\xc3\xda|\x1b%\x97\x9a~\x15f\xaf\xe4\xdf/\x17B^\x91\xed\xf3\xa2\x9d\xdb_$\xe9\xfay\x90\xa3\xf3\xf4w\xe2\xef\x8e\xfd\xc8\xe2\x9d\xfb\xa2\xcb\x05\x18\xcc\x15-\xaco_\xffp\xa6\xbd\xea\xd8\xad\\>M\x9d\xea\xd4{P\xa0\x0c\xe0\xf5d\xb9\xb4\xebJ\x07\x1an\xc1\x84\xe3\x8cL'\xeaC\x0d\x1a8\x1c\xf3\xf5v\xa7\xc6\xfa6\x97Uh\xbe\x07.\x1f\xbcXT\x1e\xf9\x87\x0f\xb0\xa7u\xd0\xb0f\x80WH+\xb2\xac`\x15\xdb8\xdbn\xb8\xa8\xcf\xe6\xf0\xad\x9c\x0d\xaf\xd9\x16\xfc\xada\x95\xecH!s\x94T\xb7\xd0\xe6\xe2H7(\x90Lf\x9ci\xbb\xce,\x89s\x16\xe7}\x1a\"\x1e\x1a\x9a\xb0LE\xc6\x11u\xb3Z]\x1f\x9c\x9c\xdd\xe4\xfb\x9b(\x08\xe3\xc7\\\x8c\xcfX>y\xfb\xe6\xbb\xfeCG\x05\x97-\xb0H\x86\x8cRo\x06\xbc\x95.\xdd\x18\xaayx\xd1\xf5\xd3\x91@\x8d\xa6qz\xc1f\x13\x85\xb3\x80S\xb6\xfd\x9b\xfe\xf5\xf5u\x9f\xa3x\x7f\x9bFda\x9bWgm\x94`\n\xec \nxI4\xa5\x95\xbf\xca\xeb9!\x8521\xef/\xf2\x1b[@j\xbdPy\x11\x0db\x90\xc8\x04P.\xd6\xa5=\x0dz\xad\xcd\xb6\xe2v\xa7\x9e$\x954`\xe1,\xd9r\x8d1\xc9QdS\xe4\x17x5\x082\xe0\x8bnC\xc8\x1d\xc6\xcc\xb1\xadj\x9d\x85BP-\x91\x97\x0e[\xac\xf3\xd8\x1a%8\x92;\xcfq\xd4\xbeO\xa5\xe5\x17X\xc7g\xebz\x83|\xc5bwk2D\x8b\xe1\xe6D\xfeZh\xd2m \x8ak\x05\x06\xc1Q\xda\xfb\xd85i\x88n^\x98\xf74Kx^\xb1\x84OQ\x956\\yq\xf3i#\xeb\x95\xda\x8b\xddU\x0b*+\xa6/D\xa7\x95\xfb\x0c\xb4\xe7\x00\xbe#\xda\x97\x91\xddB\xd1uQ\x8fj,\n \xae\x15\x9dt\xb4\xe7#\x94\xa8\xbah@\xd5\x9f\xb3$\xfe\x9c\xb6\xfft\xf6\xf2\x05\xf9qX\xa9W\xe9\xbdMY\x98Y-\x18\xf2\xcc\xc5U'\x80\x7f\xff\xe8\xa1\xeaP_\x7f\xa4\x15\xba\xb5\xc4x\xe6\x0f\x06\xf5\xddhK,\xab\xeb\x0d\x92\xd06%\xb7\x85m*S\xed\xccR6gq\x1e\x06QFn\xdf\xc5o\xaeF \xf9\x00\x8a\x00\xb7\xe2\x05\xa1X\xe22\xf9FE\xfe[\xb3|\x95\xcc\xb11\xfaS\xbe'\x87\x19\x86\x7f\xf8t*\xaa\x1cx4I\x18\xef\x1cC\xe9\x9d_\xb57\x18\xf6P\x13\x0ci\x96\xca`i^~\xc3\xec\xf3\xd2o\x19\x98\xb3\xf2\xceI\xd6a\xee\xf8\xb0W,NE\x98\xb2/Vn_\xacv\xd2W\x98;\xf3\xe4\xedfc\xcf\x04\x00\x05\x1a\xdc*\x8f\x0ftF\xef\x8f\xb8\xbcit\xe7\xfb\xe8\xe6r0r\xe2\xc5O\xe7?N\xde\xa8\xe8\x87k\xe9\xf8\x84\x7f\xa8\xc2\xe2\x87\x96\xc5)e\x0b\x96\xa6( \xd0[\x17\xdb)BRj\x1d|\x7f\xf2\xecy\xed\x0b]\xc7\xb7\xc0<\xaa\xdex\xd12\x8a\x92k6G\xb6\xf0\x1f'o I\x81\xb7\x06)\xfb\xdb\x96eyfB\x08\"rR\x83w\xe3nV\x99E\x07\xab\x8c \x83MV{L\xb1!/\xdf\xddq\x0cV\xc3F3B\xabxP\xbam8i\xbam\xc8\x9f\x94.\xdd\x93\x05]\xcb&\xd2\xc3l\"\xd0V\x1d\x0f\xf7\x04\xf3\x9b8\xc6\x06\xec\xcc3\x97\x16P\x83[\x10\xd7\x91\x0d\xaf\x13\x83\xf4 \x16S[W\xeb\xf6\xa6}_\x93\x86\x0d\x951\xf4\xd3\xa3w\xf1\xfe.\xbbY\xdb\xacq\xdb\xd5\xd0b\xa3\x08\x8a\xec\xe2C\xed\xb6\xbf\xfeH\x7f\x07\xb9qc\xa7\xb9A\xd0\xf7*\xf5\xab\x9e\xb5\xf2\xf9\x9c=\x98[\xf9*q\x84\\O\xb8B\xaa\xf3\x04\x1c\xe1\xea#\x95\xe4,\x0f\xf2-'\xb7\x0e\xfd\xe5`jLN\xf3\xe4\xa71\x1c\x0c\x87\xa2t\xf2^\xc5\x8b\xa5\x8fO'\xfc\xab\"\xe7\xe2\xed\x138TU\xe8\x95\xb49\x14\xbfj\x1da\x9118/\xff,\xc7f\xe7\x05\xbe\xce\xb5r\xfc_\x84\x9a\xab\x90\xa9j@\xd5\xd2/4\xf0\xb0\xc1\x82\xe5\xe68rW\"\x16\xa0\x19*tS\xc2\x18\x9c\x8a%\x01\xa7g\x08w\xc6\x1fy@5\x06\x87\x0e\xa7\xa80\xfaX\xcac*|E_\xcd\x8dp\x85m\x0cN\xa1\xd0h\x8dp\x0d\xa3\xf8\xd9*\x00\xf2'Oo[\xcca\xda\xa1\x03o\xdf7eO\x96\xcfG\x98\x05\xe8R\xd7\xd5\xad~odo\xcb\x8c8\xb6l\xc0R\xaa\xe6k#\xfel\xda\x0bM\xfd\x1e\x83\xa3)\x1aT\xa9\x8e\x9ef\xd1\xa8d&\xf4\x10r\xae0\x95\x9dtv:\x95\xfa\xd6\xb9\xe3\x17.P\x85\x1aV\x7f}\x1c\x05\xeb\x0d\x9b\xd7\xbf\x9e\xc6\xf9\xe8\xbe\xb9\x92\xe9\xfdi\x9c\x1f\x1e\x98\x8b\x9b\xde\x7f\x17%\x81\xfd\xc3\xfd\xbb\xe2\x83\xe5z\xea\xba\x93\\\x06\xba\xeb\xc6\x9d;\xc07\xe9/!\xbbn0\xbf\x99\x81\xc0<\x88\xa5\xf4K\x13V\xda0\xe3\x8d7;[\xe9\x8f>\xb4\xc2\x01\xb8\xd5E\x8d\xc4E\xf3@\xebP\x93h-\x11\x9b\xa8\xf8\xbbX\xd9\x11\xa3\x90\x0cB;\x8f\xdd\xd4\xc2\x82$\xcb\"\xf10\xd8L\x99\xe5\x8e\xa1V@$wO\xa0\x07\x8e\x8f\x81\xb1al\xba\x8f\xef\x97\xc6?g\x11\xcbY\xa7\xad\x17EU\x97|\"\x86\xbc\xda\xe5\xf6\x97,\xef\xd4\xb8\xda8\xb9@\xc4F\x82\x8c\x0e\xbb\xf5y\x8e\xcb\xa9R-\x1d\xaf\x82\x9d\x1c\xd0d\x07\x15\x07<77;w\x96\xfb\xca*\x93l\x80\x80\xf2\xea hk_\x08Ym\xb9Y\xe5SI\x96-z\xf4\xacs$\xe7B\xa6\xfc\xe1\xd4\x18\xe3s\xbaqT;\x957\x8c\x11\x9d\";\x98,\xa4u\xd1vkV\xdf\x8f\xba\x83A\xc3 9\xe0)\xb9p\x904\xa32\xfa\xde\x9bM\"\xfaT\xd0\xd5\xe57\x98L\x87\x99\xd8N\xef;\xce\x84\xc5y\x1a\xfe\x16S\xe9\xb6/S\x0eL\x06\xcf\x0fh\x99R\xc51H\x9b\xa1\xc9E\xc8\xb0\x00\x96\xb3\xf8[\xe4\xf3\xcfO~8ys\xc2\xf9%W\xd8}\xa1\x9e\xfb\xe0\xbc|\xf5\xe6\xf4\xe5\x8b3\xfe\xe7\xab\x97g\xf8\xe9\xd5\xdb7\x8ea\x81fZ\x97\xb3(\x89Y\x97\x15\xd7\xa4\xb2\x19ZP\xfc\x86\x15\xbcL\xe6\xb7\xfa)\xdbi\x1cZ\xee\xd8\x1aWP\xa4\xcb\xd7\xc6\xe9\xa9\x97\xf3\xd2\xcb\xf9gNe^9\xf9o\x9a\x14i\x0fc]\xdb\xb0k\x84\x85\xaa1\xae\xaa'\xf6JB\xeb\x18K5D\xd3M\x1a\x94\xcfm\x1a\x8d\x95\x9a\xb2\xc3*\xcf\x07\x9d\xfdi$\xba\xd1\x92\x91\xc5\xa8}\xa1\x1a\x82\x82\xe8\xcb\xe3X\"h5\x9b\xcf\x98R4q\x16N\xd5\xf3\x11\xcc\xd2\xd0\x95\x88c==\x1c\x8e|8\x1c\x1e\xf0\x7f\x0e\xf9?\x0f\xf8?\x0f\x0d\xe82\x1f\xa4l\x1e\xa6\x1d\xd2\x8d\xcb'\\\xa8\xfc.\x97\x9a\x95O\xb7\x96i\x11\xb7\x94\xbb\xa9Pjg\xc9\xdcz@_\x02\xdd\xae\xfb\xd0\x05\xe2\x9a\x95\xa7(\xa1\xa3\xe6\xc6\xcb\xc6;\x80\x1e\x1b|\xafT\xee\x84\xff|M\x06A\x98\xc0\x8c~f\x9b$\xc6{\x9ds\xfe\x1b5\xe7\xae\xab\xaf\xadQ\xcdi-n\x10v@\xb7\xbe \x99\xc3^\x9aml\xa1(\xfc\x9f?\xfe\xf0}\x9eo\xc4<\xec\xa6\x9apG\xcf8\xd0\xb0\xaf\xb9\x14h;\x1e\xb6\xd2\xa7r\x0dB\xc4\xb0\x13\x91\x92\x8f\x02\x9d\x8d\x1br\xc1\xf9Y\x14\xc9m\x13\x9b\xeb\x8a\xa8\xbev\x97\x110#\xa9\xfe0a|qR\xd1\xf8\xdb\xd7?\xa0\xca\x1c\xc2\x11\x84\x03\xed-\x8c\x81\x95\xfdI\xfe\xb3/\xf6\xa3\xcf+\xb5\xf8\xbcH\x93\xa2\xea\xc8\xd0\x0b\xe6\xe9\x97?\xf8257\x19\xbb\x82\xc7\xe0%x;\xe6\xf8\x08\x16\x9d\xa9\xb1|\xd2\xaak\xe8\x0b\x96_'\xe9{i^\x87E\x10Fln\xf2\xfd\x90\x8f\xe8:\x0f\xd7,\xd9v:o\x97\xcf\x17\xeb|\xc3b7Q\xc7Q \x9d\x7fa\xaa\x1d'\x8cg\xd1v\xce\xe8\xf0!)\x9d\xf6p\xc9*\x1c\\\x87\xf9\xea\xb8tND\x15\xd5\x16\xddn\xe46\x96|\xc1\\m\x17\x05\x17!/\x0c>\x00 B;\xf9G\xcb'\xe4\xea\x95\x80:B\x03\x8b\xbb\xb4|\xb8$\xc9+\xc5sWsoO\xb4C\xb7#:\x8a\x1b\xeb/mR\xa9\x99\xd8\"\xf9\x1cl\x92\xe8v\x11F\x91\xc9+X\xfd\xe5:[y\xd1_\xbfk\x90\xb1h\x01G\xf4\xdfXS\xb1>\xeb\xa2l\xec>\x1a\x9a\xae\xaf\xf0\xf7\x0f\xcd\x17\x92\x1e>\xb2\xdc<*\xef\n\x85!\xe6\x84\xb0\xdc\n\x1e2\x8f!)\xbfUQ\x02\xc6\xb5\x9c\xf7\x9f9\xbf\xc3\x87\xd5y$j\x1e\xf5\xf9\xd5!\xeb2\x0df\xef\x19\x9fHg\xd3\x00f\x84\x9b\x9e\xd7e*\x83\x0d+\x8c\xe7\xe1\x8c\x95Zo\xe7\xab\xd4\x01f\x96\xa3\xe4s]zJ\xd9\x86\x05\xad10@\xeb\xa5\xdej\x19d\xeb\xf7\xd2\x9e\x079+Y\xcdN\xcf^\x92\xe1\xac\\\xd6\x1c\x8dg\xce\xa2p\xcd\x15\xb31\xde\x0e\xae}\x97\xc1n\xf6\x0cR-}K\xc7\x90\x8a\xe0\x13\xb6\"\x7fA]\xfde\x1c\xdd\x8e\x8d9\x063\x96\x86A\x14\xfe\xc2\xf8\\vX\xad\xa0v{U>\x86\xbd\xc8\xde\x87\x9b\x17\xdb(\xca,c@p\xe6\x05\xbe\x0f\xe2y\x84\x91Q*V\xf3J\xa3\xba\xc6\x0eL\x04~Q\xf1\xc82\x1f\"\x9f\x8buE\x88\x04\xd3l\xa4%\xdb\xc0R\xd1\xdbZv\xa0{\x82F\x1eV\x89\xb8Xwe\xba !\xdd\x82\xaft\x7f\x0e\xbe\xb6Tq\xe36\xd6RW\xc2\xaf\x9a\x04\xfdP\xb9LQ\x06\xb4\x15\xa7\x93|D[\x01\x0c\xe8\xfbf\xb8\xe2\xcd\x9f+\xf4\x8fm\x81u\xb0{\x9c_\xa1\x84U\x8f\x97A\xefe \x80\xea\x87t\x10f\xe2V\xc1\x95\xa7\x0d\xff\x08\xa6s\x17#\xc4\xc3\xb8:\x07\x8f#\xfb\x84\xa3\xfd\xdc\xcd\xdc\xab\xd2\xa7s\x18\xf3\x9a\xb1^F\xb8x\\y\x9eA\xa5\xe2\x9b\xbd\xf6\xd1~n\xb2\xe0\xe0\x96\x15\xcc\xf0J\x0d\xd1\x10\xff\x8f\x97-\xdf7\x8a<\x0f\x8f\x07\"\xcb\xd6\xdaU\xdc\xdbJ\xda3\x13t\x808|\x98\xc1\x11\xdc\x0e\xb2$\xcd\xdd\x19\xdf\xe0. \x9a\x94\xa9\xf3\x92\xbc\xdd.\xe1 \xac\x95\xb7[\xafw\xd9\xa4\x7f_\xc0\x04\xd6\xd3K\x8b\xc1\x0b\xdd\xbd\n\x80\x9d^`&\x07wY\xbd9\xef^yp\x04K\x99S\x86\xb9\xbc\xa8\x0f FP\xf3Z\xd0\x96\xcf\xb3V5\x86\x1e\xb8\\8p\x06|\xe7/T\x9e\xd2\x0b\x95\x9b\xb4\xb9Q\x03\xd1\xaa\xbd\x91\xfb_&CfQ\xa0\x91\x99\xa9s\xfd:\xe1\x0b\x80n\xe5\xa6\x83 \xcb\xc2e\xec\xfe\xfd#606\xc6\xcdQ\x01\x99\x02\x89\x07x\x8aS\xdc\xf7-\xbd\xd7\xc8W!T\x05\x05\x810\xba\xd1\x9c\x88\xfa\xab\x00\x03\xa0_2\x08\xd4\xe4j9E\xaeD\xdc\x1b\x0do\x82\x81bjp\x04[\xed\xd7X\xffV_\x89\x19\n\xc4u\xe2\x11\x0c\xea\xcc\x01\x8e\xcc\xaf\xc7\xb05\xbc\xae\xf7\xb5\xb0\xf7%\xf9\x14u\xa1~a\xcb\xf2W\xbd\xc1\x8d\xb5A\x11\x18\xea\xa8\xf8s\xac\xa8X\xbd\x1d\xae\xa2\x1b\xb9N\xb1\xb1G\xda\xdfES\x86\x05]\xd9\xdb\xca(\xa5\xbc\xf8\x83N\x8b\xea\x0d\\\x15;K\xb0\x85\x9eU\xcf\x93\x1cy\x8e\xf6\xb3^u\xdd\xd0\xb7.n\xd0 Jop\xa5\xf57\xf5\xd6\x97-\xab]H<\xdaji/\x8be+^\xd6\x91\xad\x04\xd4$\xdc{\xea/4\xa2\x0bo\x93r\xd5\"\xf3U\xa7\xc8\x15\x89h0gi\xe6\x17\x1dY\xb0\xf3m\xfc>N\xaec\xa1k@\xb2A\xf1g\x93&W\xe1\x9c\xcd\x8d\xf8)\xc2\xb1\xe2\x80\x8b\xae\xa6\xb2\xa7\ni\xb7l\xda\"\x8c\x08\xa1\xd1\xa1\x95s\x12\xf9\xces1/\\\xfd\x06\xae*\x80\xba/&o\xd7\xab\xd5\x07z\xedc*\x82*oF!D\xc6\xc2)\xe8\x98\xee.:\xe1\xfd\x0bj]\xbd\xf8s\x8d\x9d\xa2\xff\xc2w\xb4h\xc2\xc0R~9\xe6\x8a?*&\xa8\xba\x07X@\xbc\xe1lF}\x1csE\x9f\xeb\x15\x8e^\xa7>\x9b\x1b\x98@8\xbd\xaeL\x06\x83\xc8\xb8U\x96\x1f{\x18\x0d\xeb\xce\x1d\xc9\xdc\xabw\x1c\x15\x0f?#\x1e~\x06O\xe0V\xe3\xe1g6\xe1\xf6\x18&p;=3\xf0\xefE\x89w\xc7\xd3c\xe2\xdd|\x07N$\xb7\xcd\\\xfe\x1e\xa3\xf8\xde(\x0e\nG0\x97$\x83C\xd6\xca\x87+\x9f\x0bV\x17>,\xab\x8c\xf5cm]\xdec\x07\xe8f\x16\x19\xcc\x9c\xcf\xd0P \x90.\x98\xcf\xff\x9f-Ko_\xa5l\x11\xde\xf0m8r\x0c1\x9e\xc4\xce\xbf/\xf2 \x0c\xe1\x08\x9eA\x0f\xdeW\"\xfc\xe0_\xbf\x8az\xdd\x82\xeb]\xf4nEN\xcd*\x12~Vn#\xb6B\x1c\xa4\x7f\xe0,v\x0c\x07\x06\xa5\x91\x1c(Qi\xa4?ME\x9au\xd29\xdb\xe4\xab1\xdc30\xc1 \x0d\xd6,g\xa9\x18\xc0\x88\x1d\x1a\nEA\x18\xd3j}1]0\xe8\x10L\x05\xda\xbce\xd5\x0ekl\xeeH\xcb\x92\xb1\xffn\xe0N\x7f\x1aL\xcf{\x1e:\xb2N\xffmt\x8e\xf7\xfa,\xbeW 6z\xdf}7\x9d\xfe4}w~\xfe\xcd\xb9gK\\\x03b\x16\xe5\xc2\x94h*m:\x86\xe3\xd4\x0d\xc5Gq\xa5\xda'\xb2\xc5n0!\x85\xbdb\xd6p\x8e\xcd\x97\xa9\x16\xcd\xacZ`/\x1e\xe8[ \x98/\x0c9Z\x15\x1504\x1a\xa5\xab\xae\xc0\xb0$\xdav\x83vF\xa7\xe2\x86;[`=\xfdQ\xc4R\xe4\xf6VB\xb3\x1b`\x08G\xb1\xa88\xa6\x08\x9e@<@\x90n\x0c\xf3\xcdg\x1cA\x0fC\xe7\xef2\xf3`::\x17[3\xf2\xa1/\x02v\x7f\xc6J\x04\xc6\xa0\x14`]\x0ci\xab\xe1\xdd\x8a&HQ\x92\x10\xa3\xc0E\xe8M\xd6\x01tA\xb0Ry\xb9\x0d\x1c\xa9r\xca\xf2\xa2%7\x1b\x89\xe4\x03\xc3\xc7\xd0\xef'm\x8d\x81@\xd0\x90\xa2\x98\xb3i\xd2\x90\xda[>(9LE\x0c\xb6\xc0Cl\xc44\x08\xd3sO\xb28\x9b{\x99\xfet\xb8M-\x1f\xb4\x18\x97\xc1\xe3H\xf2\x86Y\xca\x82\x9c\xa1\x0eg\xd2\xefl\xcf\x95\x08\xe5\xc7\xb7\x8d\xd8b\x91\x9f\x91+y\xe7\x95\xd7\x81\xb6\xc6\x1e\xc9\xd7\x1a\xfcq-\xcc\xbe\xc7\xd5\x87S 4_\x9f\xc6\xb9\xbb\xf5ad\n\xd9`z\xf6\xc2\xecE\xf0\xc2\xcdp\x88\x01b\x1f\x06\xbd\x17\x06\x9a\xcc\xc31\xe3\xab\x8c\xc2\x8c\x8a\x1c\xc8i\xc6P|\xcc\xe8\xd3\x13\xa4\xc7\x8a\xa9\xc1\x91\xda\xc0iv\x8eQ\xf0\xc7\x10N\xb7\xf8g\xeb\xc0\xcc\x18\xa2?\x1cT\xc3\xc6R\xcdm\x08l\xb3\x0f\xe5\xa3\x9b \xec\xa9\x15\xa9\x98\x9a?\xc3\xcc\xf0 \xf6\x84X\x88\x03U{B\xe9\xbd\xd1\x9e\xa0JX4\x96\xe7l\x07{\x02\x8ei\x10.\xe3$e\xba\xe4\xa7dB\xc3G\x1f\x87 \x8d\x0c\x13S\xacl\xbd\x80\xb0D\xbef\xcb\x93\x9b\x8d\xab}\xf10I\xa5n\xae\x085s\x85\xe4\x12\xbc\x83\xba\xe5S~\xc3?eI\x8c\x83=\x11\x9eZ\xc1\xa0\xf8\xe9#f\xb1\xcd\xb1\xf0B\x0e\x06\x17\xea'f\xa5\xc8f\xc1\x86\xbd\n\xf2\x95\xba0\x8b\xa5\x0c\xefy\xf1ml\xab`\xfcR\x1e\xfe\xd6\x90\xd7\xaf\xd5\xad^\xc0c\xbb\xcf\x01]\xd0\xbc\xccXzE\x1e\x9c\xd3syk\xf3\xf2g\xa8f\xfc\x80\xba<]\xbdQ\x17\xed<\xb4\xb6@\x95\x9cv]\x06\xb3\xf7\x14\xc8\xad4`\x98\x98\xa2mV\x07h\x8a\xfd=\xab/I)\x8b*\xe5\x9cJ1-\xb9\xa471<\x81\xf41\xc4\xbd^]\xcb@\xdb\xce4>\xa7e\xc3H\x0bd[\xb7N\x0d\x19VlQ\xb7/S\x16\xbco\x99\xd9\xc2\xcd\xe9\xbe\x88\xaf:\xe3\x7fm8\x14s\x11\x0b\xd3D\xa8\xdfR{E\xabJ\x81\xaaz\x1b\xa2\xa4\xe1\x08\x81R\xc8\x8a\xefF#q\xa8\x1b\x891\x94\xad,.`\x8a\x15\xfb\xa8n\xfc\xf0_n\x88\x89\xbf4jY\xdf\xac\x85\xab\xb2\x01\xd4,\x1a\x18b\x82\x92\xe9\x98\x96\xda(\xa4\xe7\x83<\xf9\xd3\xd9\xcb\x17@9X'\xea\x85k\n\x14\xa3\xe0\"D\x9epAK\xfdg\xce\x9ar\x8f\x84\xa1\xf2[\xe6\x91\x98\xb37\"\xde\x17\x94\xac3\x99\xb0\xced\xfd~\xa3X\x83\xe6\x18\xe4T\xd3\xec\xbc\xc1\xa2\xb8\x97\xd6.\x8e\xf9\xb0\xf1*\xd2g>\xdd\x9cWt\xd0\x08Mf$\xc0\x94\x8f\x98rO\xc5\xac\xb7\x9bg\x92\x0d\x1e\xd9\xac\x93+\xd6\x90o{\x13\xe4\xab1\xdd\x0c\xdc'\xf3\x98\x81\xe0\xb9\x1b\xfb\xc5\x1c\\HK\xae\xd7\x16\x03\xd2\x95\xc8\xf9\xc2\xe7n7\xaf\x18\xf2ADP$i\xa2\x1f\x86B3\xbd\xd0\x8c\x0b\x89.\x89\xa2\x1cJ[\xe7\xcb\x85\x1d2\x11`;\xee\xde\xd0o_r(\x96\x1d\x05\xf3\x86u\x87\x1d\xd6\xbe\xb9\x15\x11}9\xd5X\xa0;kr\x81\xedjF5\xfbEm9\xe0*j\xb2W`\x8f\xb9YDNMm\x08\x15\xb5\xcez\xbd&\xeb'\x07\x8e\x0d\x9e%f\x0d\xc0Q\xc3-f\xc3-\xae\xfau\xde\xbf`>\xff\x87\xed\x1d\x1fm\xd3\xf6u\xd8=\xcd\xc5X\xfd\xc5\xa5\x1c\xc1\x96\xdb\xeciZQ=+\x02\x97\x94:\xb6\x80\n,\x99\xbe\x9bE\x9cR\x08\xb3!\xf1\xf5\x82\xa1\xe7\x94`871tPL=\xd7\x98\xba\xd2\xe1\xf9\xeb\xf2\x9a\xd4\x02 \xf1\xda\x898\xdao\x95vJz\xb9\x90?\xb9bq\xfeC\x98\xe5,F\xfb\xa3\xed\x93\xeb\xac\x93m\xc6\xb6\x1b\x87\xac.\xd6b\xef\xd9m{!lk\x9e\\\xc7m\x05\xdf\xb3\xdb.\xc5f\xab ^2,\x85\x807Of\xdb5\x8b\xf3\x81\xfc\xe3$b\xf8;\xc8\xf3`\xb6\xc2\xda\xae\x93\xc4\xe59u\xad\xa5O\xb1k\x9d\xea\x8c\xbb\xd6+/@\xd7Z\xfazt0A\xc4\x15\xb9;\x16\xaa\x01iO\xb1\x99J\x9b\x80z\x86y[\x8c m\x84\xddV\x12\xa7\n~!R'\x1f\x03\xc9+\xf4\xc3\x12\xc9C\x9e\xadw%r\x80\xc7>\x8c,\x08\xc9 _\x87\xaehH\x02\xb1\x0d\x13\x0d_-\xc8h,i\xc0G{\x8bu\\\xb3\xb5\xa9J6\xe3\xdb\x9c}\n\xbeUju\xc27SO]0\xa7\xdeW1\xb5\n\xeap\x8eT\xc0\x01\x85n`\xd7@I\x99\xbcRD\xd6\x8fd\xad\x8aYJ&\xa8\x19\xff\x8dv\xbe\xb4\x9b\xa0bp \x91F\x90B\xb1Em\xbd\x9a\x01\xac\xc9h\xa8\xb4\xe3\xcfI\x02\xd69\xadW)\xe1\xafQ\xa9\xd63\x94\x1d\x95~\x8d!\xf6\x06\xd9*\\s\xf6\xdd:/\xb9dZ\xc6\xb7%\xeer\x86'\xf2v\xa2%\x06\xdd\x12q'\x90\xadi\x92\xa7\xd9DdH\xab#}!-Ck\x0d\xf6\xa3mo\xbd?C\xee\x17uK\xcb\xac\x82\xd2\xfb\xfa\xb1\x19\xd3\x8c=\x9d\x9ce\x99\x0f\x0e\xff\x831\x87\x1cij\xb56\xa2\xfciv\x12o\xd7\x14\x11\xc3P\xf7\xc3\x07\xdd\xa5\xec\xa3Kq4\x0b\xc8\x89\xe1\x08}\x0b\x12oPD\xb3\x9f@JVR\xfdUb\x04\x94\x9d|\n\x8d`JQ;p\xe12\x11F\xad\xfaQ\x85\xf4(\x1d\xa8Y\xf6F.y1ih\xba\xebU\xda\xd1\xe6\xf1\xb1\xc1,\x89\xb3<\xdd\xce\xd0\xc0=\x99\xe8\xdf\xd0t \x86\xabv \x8e\x8aI\x8d\x0d#3A\xb9\x1d\xea\xb4\x93\xcc#\x0ee\x11\xb6\xaa\x9fh\xf2\xf7\x1a_\x1c\xeb0:)9z\xd7\x8bR\xa2\xc8#Sz!\x07\xcf\xe5K\xed\xb5\xf4\x9b\xb6\xe1\x96!g\x8f\xc4e}\xc8 \x0d\x00\xb3\xc2\x8c\xd58\xb4/\x81[\xc9Bo\xea\xcc\x90\x7fG\xe9\\\xeb`\xe3\x86\xcdc5\xe4\xa4\x91\xf4\xdcz$,\xe9y\x15\xbdE\x80%7\x9f\xc6\xe7\x18W\x9dM\xe3Z\x10\xfc:\xb57\x8c\xca\x90\x87\xa6\xa4\\+\xbaZ\x18\x82G\x15\x83\xa3*2\x1d\x9d\xf3\xb5\xd4\x7f\x8eIX5;\xf0bT6\xb6\n\xae\xc2d\x9b\x8e\xc15\xf4u`\xed\xeb\xa0\xdc\xd7\xc19\x1e3z\x83r\xabx\xc5N\x9a\xd5J#Pg\xe4|\xeb\x9a\xad\x0d\n\xb91&u\xb9\x15\xcf'+:}\xf3\xa5\x13e\xc4\x85\\%\xf2F&Y\xb7\x94\xbf:\x9dF\xe7t\xda\xad\x1f\x91\xceD\xe2\xe8\xe1c\xd8\xc0\x13X\xa8\x067v#\x18o\x11#WL7\x0d\xa7\xe6+.\xf0L\xe7\x0d%\xae0\x97\xe3\xaa\xc1\x12\xb5\xc6\x12\xe1tn\x8b\xef^\xba\x8a\x80W\xde\xec\x12?\x96- \xe3\x13X7\xa9\x1b \xe6\x8a\x0e z'k8\x02>\xa8\x0e>\x83!%\xc0\xce\xd0\xebk\xba\xf4a\xeb\xae\xbcs\xa3\xbb\x99|D\x9clQs[\xbbz \x1fu\xadE\xa76m\xf3\xd7\x8av\x9a\xfb-\x1ex\xdb\x86 \x1f1V\x07O\xbd\x1d\xe1\x17VA\x13Z2\xe9+pk\xbe,)\x9f\xf2\x1a\xd8\x07\xa0\x97Z\xd5J\x18\xd5\\\xfd\xc0H5\xd3)\x17f#\xd5\"\x12$NA\x90\x84\x1dA\x8en\x1ecL\x1e\xcd)\xc1Hd6(R\x1a\xf0\x02\xe7zk\xd3\xd4,\xefg\xe4\x16Q\x8c\xdd/\x06=\x88\x93\x1f\xb7y\x907*\xe6j\xf0\xcc8\xf8\\\x0d^\xe6g\x18\x92\x1e\xcdH\x8f\x06\xc1\x07\x8a\x81V\x0f \xd5@\xc9\xbf\xd1<\xd2\xeb0_\xbd\xc4+R5\xdfI{\xba\xd5L}\xafl]\x8b\x8cg\x0f\x0c!\xf3\x8fC\xec>\x1a\xdd\xab\x10\xa0\x8b\x0b\x96\xfd\x98\xcc\xb7\x11^\xf3\xdf\xad\xcb\xd8\x1d=x\xc0\x17\xd0}t@\xff\x8d\xee\x8b\x9f#\xf1\xff\xa1\xe7\x97\x05[wt\xcf\x1b\xfc\x95\x05\xef\x7f\x0c6]\xfah\x10]}\x99\xc9\xf7p\xe4\xb9U?\x8ePtV\xbd,C^\x0e\xa3\x83\xbb\x95\xf7[j\xea~5Y0\x0d\xfa\xd1\xa8\x1a\xbb\"\xa2\xf2\xd5\xe6g\xf8\xfa^\xd5{d!\xbcG\x0e*\xef\xf1\xdcr\xb0d9_\x91\xf2\xa7y\xc1\xbb\xc2\xec\xe4&gq\x16^F\x95\xcb\x1e\x9c\xedd\x83\xed\"\xcb\x93\xb4\xf2\xe9\x8a,\xca\xa5w\xed\x01d\xab^\x076\xaa)Y\xb8\x88\x8ag\x904\x86%qbx\xaed\xd3V\xd7\xe3\xf2\x98\x97FYg\xc9:\x05\xd6\xc0{\x13(A\xdb\x89\xbf\xa4q\x1bcj\x06\xf9\x88 \x0b?\xe0\x1c\x8e`\xe5.\xc4\xec\x1d\x01\xcf\x8e\xe7a\x0c&\x94}1\xfa\xb6HU\x14\x16\xb37v`8\xf4\xab\x8b Yy\xca\xedAK\xb2\xc1\x9c-\x0c\x83\xf4\xd1?d\xc7m\xb8\xadj\xa8\xee\xa3\x83\xa1\xe7\xaaV\xf1\n\xde\x12o\xbb\xef\x0d1\x96Q\xb1\x963\xb7\xcd\x18\xf1\x00\xf6&\x80\x96\xa5[\x0fs\x7f\xc9\xbb,\x8b\x94\xb1_P\x18\xa4\x17\x9e{\xe5\xf9\xf0\x80\xd6Yc\xff\x1fI~\xdf\xba.\xa6l\xe3\x9f\x8f\x0b\xad\xd0]\x977I\xbb!\xb3\xf4|\x08\x06/NN\x9e\xe3\x01\xba\x0f\x89;u(\x8e\xae\xe3\x83\xb3\n2\xfe\xdf\x92\xe5\xfc\xbf\x8c\xe5\xce\xb9\xdf\x00w\x12\x96n\xb5.j\xeb\x8c>\xf2\xb5x\xc1!\xc6L\xd2\x1a\xcf\x0d^\x1c\xa0`:'\x03\xc4\x1c\x9d\x10\xcc`@\xb0\xb7(\xd2\x7f\\,\xc4\xe1TSP\xe3P\x065\xbeXL\xd99\x8d\xc2\\Zj\x86|U@\xe8\x9b\xbc&\x8c\x0d\x97\x18\xec\x0e\x91\"\xa8-\x02i^\x8b\xe5\xffQ\xdfc\xfa\xbbs\xa2\xf0G\xa3\x87\x96\xc8I\x8dh$\x07\xc6\xae]\xd4\xbe\xf5\x10\xaf\x9d\xf8b1\x82\x1a\x7f\x10\x1c\xab\xc6\x96\x04\xbbz\xe4\xb9N\xb6a\xb3\x90\x95\xd2\x84t\x93\xd8\x10\xf8\x8cb\nj\xe5\x1c?LW(\x84\xf1I3\xa2\xa0}\x8a\x9c\x85PJBHK\\\xcd\xce\xe5\xa9\x1c\x08\x82\xa6\xfb\x90\n\x90T\xe6\x10\xf2\x18\x9a\x86\xe7\x9e\xf2\x1f\x12\x85\x8b\x1c\xf1\x92\x96R7\xe3\xd6T\xf6\xdd\x85\x03Z\xe7\xe1}\xe3\xfas\xf6o\xe6\xba\xc2\xcd\xb3Z-0\xef\xa6\x10\x1a\x86UaBH:w\xab\xef#%\xaf\x18\xa5\x86\xaat\xd0$5DnU\x92\x9b\xe3\xdb\xea\xc8WxxT\x86\x93\xaeR\x00\x1b\\`\xea\x07\x17\xff \xd2\xb1\xae\x1e\x10\x94~\xae\xdbN\xcb\x90\xb2\x04hrojg\xd9\x86\xa3P\x8cr\xe3\xb2A\xd0D\x94+\xe5\x19\x17F\x10\xf0j\xa5\xaa\xd9\x90\x0b\x98Zk\xd6\xc3\xaa<\xd2A\x16\x91|a)\xe8\x9c5 \x94:\x83\xcb\xa7\xa3\xc6\x15Z\x05\xad\x01\xd2\xa4\xc8\xb2W\xf4\xda\xd4b7\xf9B\x1e;4\xcd$F\xe7yT\xf5r\x99\x021\x10\xf1\xa5Y=\xbete\x1c\xc4|\xdb&'WT\x043\xd6\x01\xa0M.\xca%\x00\x18\x9cv\x0d\xb3\x11\xb5\xfe;\x07\x99\x88%\x90\x07\xa2\xb9\x8f\x97\x08\xf6\xf6\xfe\xbb\x9aTF\xfd\xe57(fe!e\\#u>\x84\xb6\xa9\xa3\xdbc)J\xa35\xc4\xeb\x96\x7f\x8d\xb0E\xe7\"$g\xd7\x8b\x9c\xdcE\xd8\xe0\x82S\xbcU\xaf\xe7\x83@r\xa2\xcc~a$\x04\xbc|\x97\xb9)\x8e\x88M\xc3ss*|\xfb\xd2\xa5n\xa4\x8b\\\xe6av\xdbv\xf9\xa0Gg\x80\x92\xbd\x04\xf3\x91]x\x97@\x9b\xec \xe2s \xbeR\xd2s\xeey\"\x11\x03I\xf71_\x93\x99\x1b\xab\x9c8\xc8\xe4D\xfe\x85X\x89\xfd\xc6\xbe,\xee3\x1d0Z>\xff\x88\xd9\x8bD\x0f\xa6\xa9\x9bgi\x80\x10\x1f\xa2f\xcc_\xd4\x91\xc0\x86\x01)YK\xd1\xb7x\xcft/\xb8<\xa1\x14'\xc4H\xbb\xc8\xc5\xa5\x9bt\xcaP9\x9b d7\x0dM\xa8\xd8c\xb8*P\xfb\x0f\xf0\x05$\x94\xaa( \x04D\x8b9\xa3f\xb6\x08\xcc\xf6\x06\x12L\xeeU[\xc9,RQd\x91Wf\x16\xf9fa\x16\x876$uW\xc3\x9b\xce\xf1\xf5\xdd\xa17X\xd4e\x13\x8b\xf9\xe6\x8a\xea\xdcm\x15\x82%\xa5$\xed\xf3\xd6$\x13_\xe2y\x003\xd8\xe6/`\x02\x97\xf5\xd7\xd7\x9c\xbf\xe1!!\xa30;f?\xd4\x13\x98\xc0\x05G\x86\x8b&m\xef\xc6p\x1e%@\xf3\xcaz\xba\x89\xcd\xba\x18\xad\xe7D\xe5\x16\xe1Rx`W\xa5\xf9\x83*\xf4\x85'\x93*\xb8\x1ez\"\xb9U\x95\xca\x83#p/0\x91\x8b\xaen\x1aqm\xc6\xbf\\\xa0j\xea\\\xcc0\xeb\xe2\xe0b&\xa4\xc1K\x9dO a\xc0\xebsK\x1f\xf2\xe9\xf5y\xcd\xca\xc0)\xc0\xca\xe5\xcb\xe9\xa3\xc3\x94O\x04\xd3\x173\xf4\x97,\xf7WA\xe6g,\xf7\xdf\xb3\xdb\xcc\xa7<\x1f\xbe\x98\x8eO\xb7\x0f\x1c\x99\x9e\xce\xe7\xa3\xe9&&\xe0\x16\x82\xbcnZ\xa8\xacu\xb2\xc1 \x8c\xe1\x84\x9c\xcdq\x03\x1c\x1c**L\xa4Em]}\xc3K:{S\xa8uN\xb4e\x16 \xbe\x9e\x9cn\xa1LA\xfa\xd5\xc2\x8d\x0br\x8e\x06\x07\x1a\xae:\xaf\xb3\xab\xec*\x0f\xd1\xc5\x8c\xab\xec\x05\x05\x1frr\xed[\xd5})\x0f\x15z{R+W\x15\x89=\x9f\x82H\xcd\xcb\x8b\xe0d\xe1/\xcc1\xf1\xf6\xb2t\xdc&\x9a\xd1,\x06\xbc\xb5\xfaPjP<&(^W\xcd=dIY\xfap\xed\xf9\x90\x95G\x1a\xe3\xadOe\xf0\xf1|\xd8\xb8b;n(G\xd3\x85\x0f\x89\x9b\x0c\xfe\x03z\x90\x0c\xfe\x8a\xff~\xe7\xc3\x8d\x9c\xf9\x9a\xb3\x90\xb3\xc9J\x98\xa4\xcd\xb0\x16\xa1\x1eTy\xaf\xec#\xe72=O\xb5\xe7\xc3\xfe\xf4\xa7\xa0\xff\xcb\xb0\xff\xe8]\xff\xab\x7f\xfb\xe3\x9d\xaf\xbf\xe9\x0d\xde\xfdt\xf1\x7f>\xfc\xf7\xf9~8\xc8Y\x86\xb9\xd7\xcc\x81Wd\x82\x97\xd9*H\x83Y\xceR\xceW)\xcd\x00,B\x16\xcd!\x0e\xd6\xc6\x9c/\xca\xfa\x94'?$\xd72\xaftyq-sn\xb6\x84t\x9e6\xeb\xd4\x99\xc1\xf1\x11t'$#p\xc5\x98u\xa4\x95\xac\x82\xd6\x10\x93Iv[\x957{[\xfc\x99'1+9\x88\xb5$<\x11\xb7\xa2\xccI\xac\xc0\xa8\xe2\x99\xdf\x1a\xbcF\xc4\x80+i\xc3rS\xb2\xb0\xd6\xb5\x92\xb2C\xbd\xdf\xce\xd9~\x0d\xde}\xa0\xa5\x02\x14\x97sJ\x19\xf2\x13\x0c\xfd\xb1S\xbe\x0c2\x1eQ\xd6bs\x82\x0c\x91\xf9\xbf\x1e\xcd\x14\xbd\xeaL\xddu\xe9\x8bM\x87\xe7>0c\xe86\xadG\xdc\x03q\xee\xb6d\xb9\xe6\x1e\xf7\"X3\xae\xfd\xef\x90!\xaf:\xd7\xa9)\xab\xdcGS\xe6B\xdb\x1e\x19|\x13A]k\x90\xd9\xf8\x95\x04-\xb2 \x0dR\xc6\xe7S\xcd\xdb\xf2,JY0\xbf\x05\xfe\xafc\xba\xcc\\\xc9\xef\xdfi\x80\x06\x7fF(K0\xb5\xd4LM\x81\xec\xd8\x8eY\x93r\x97\xcf6\xdbF\xb6D)x\xff}\xb7\x8c;\xb1\xcb(aZw\x1bO\xa7\xa52\xf8n\x82F\xf1\xf8Z\x15\xb9\x97\xcdT*FW\xa9\xdc\xce?\xf2\x01\xdf\xddg\x99\x96\xac\x96\xdc}:\x8d\xd0\xe0\xc7 \n\xda0\x86\x8cvCP\x04\x9f1\x8cE\x9fQ\x91\x8f\x98\x03\xecm\xce~\xa0\x0b\xbb\x0d3\xc8\x18\x81\xae^\xd5C\x15\xfc\x12'\xd4i*QS| \xc4S\x1d\xd6G\xd54\xdf\xad\xa7E \x0f/JY\x05\xe9\"UC\x12\xa0\xd0\x9c\xdd\x81yZ\x0eE\x91\xd9\xdc\xa0\xa6\xcbG\xf9\x05\x16\x89\x8e\xbe\x8d\x92K\xcd%\xbf\x9a\xecXo\x9f\x17\xed\xdc\xbeL~\xcd\xfb\x90\xe1g:\xf6#\x8bw\xeeK\xcf\x7f\xce\xfb\xab$@\xef\xd8\xad\\>u\xc1\xa2I\x86\xd0z\xd7\xd2mC)\x87\xd4\xba\xd2\x81\x86[\xe8\xf7\xc9\x04\\\xca\xec\xc0:4\xc4\"\xb7\xb9;5\xd6\xb79\xbdB{\x00\x03\x90&\xf1\xf2\xc8?|\x80==S\xb5}\xcd\xd0\x00\xb3\xac\xc8\xb2\x82U\xe8\xd7-\xbe\x95\xb3\xe15\xdbr\xab5\xac\x92\x1d)\x84+hm\x0b\xab1\xa7\xe5\x83\x05K\xf9\xdffI\x9c\xb38\xef\xd3\x10\xf1\xf8\xd6\x12\x04\xadT7\xab\xd5\xf5\xc1\xc9\xd9M\xbe\x8f\x01\xa9\x1es1>c\xf9\xe4\xed\x9b\xef\xfa\x0f1\x04W\x05\x8b\xe4\xe1\x98z3\x10W-Z\xbb1T\xe3\xed\x7f\x0e\x12\xa8\xd14N/\xd8l\xa2\x90\x92<\xee\xdf\xf4\xaf\xaf\xaf\xfb\x1c\xc5\xfb\xdb4\xa2\xe8\xfc\xf3\xea\xac\x8d\x12\x8c\x96a\x8d\x88)\xd1\x94V\xfe*\x8d&!i\xcc\xe6\xfd\x0d)d\xb4\xe44\xf6B\xe5E4\x88AY\x12]\xb1j\xb1.\xedi\xd0km\xb6\x15\xb7;\xf5$\xa9\xa4\x01\x0bg\xc9\x96k\x8cI\x8e\"\x9b\"\xbf\x98t\x17\x82\x0c(\x93]\xa3e\xa2\xcb\x989\xb6\x9d\x9b\xb7\x99\x04\xda\x12&\xb7nq\xc9\xaaY\xa5\x04Gr\xe79\x8e\xda\xf7\xa9\xb4\xfc\x02\xeb\xf8l]o\x90\xafXl\x8aM\xfdQ\x92\xdf\x9c\x88G\xeb8\x7f\x13Pl\x17\"`G\x11P>vQP>\x15\x91\x90o\xb3A\x16\x94\xcf\xc7_\x0bM\xba-A\xc9\xf3\xbe&\xfd\x91\xbfzaS\xcde\xdc\x17\xf2\xba\x1f\n\xaf{u\xb5E:\xdf\x9f+\x1b\xc7`\x91&\xeb\xe3U\x90\x1e's\xe6\xe6\xd3F\xd6+\xb5\x17J\x99`\xcbk\xfa\xd1\xb2\x10\x9dV\xee3\xd0\x9e\x03\xf8\x8eh_Fv\x0bE\xd7E=\xaa\xb1($\xb8Vt\xd2\xd1>\xc7\xf37B\xd5E\x03\xaa\xfe\x9c%\xf1\xe7\xb4\xfd\xa7\xb3\x97/(\x06\xaf\x95z\x95\xde\xdb\x94\x85Y\xab\xe7\x0f\xf9\xf5\xd1\xfd,\x0fU\x87\xfa\xfa#\xad\xd0\xad%\xc6\x08\x94`P\xdf\x8d\xb6\xc4\xb2\xba\xde Q\xda\\F\xf9T\xf1\xcd\xac\x94)\x95\xe9\xbf\xb9\x1a%\xe4\x83\xc2Gv\xa5r4\xc7\x98\x8f\\e\xd7\xf5\xe4NQ\xd6VlL&p\xa5\xf7\xc9\x9c\xd1\xdbd\xce\xfcR\x82\x18`\x9a$\xcc\xbb\xc2l\\z\x06\xf6\x8a\xbd\xc1\xb0\x87\x9a`H\xb3T\x06K\xf3\xf2\x1bf\x9f\x97~\x7f\xf8P_\xa1\x0f\x1f\xc0I\xd6a\xee\xf8\xb0W,NE\x98\xb2/Vn_\xacv\xd2W\x98;\xf3\xe4\xedf#\xed\xbe\x8d\xc8}\xabe\x1a\x87\xa7\xd0\xa7{H\xa6\x8c\xdd\x1f\xdd\\\x0eFN\xbc\xf8\xe9\xfc\xc7\xc9\x1b\xc7+\xefcN\x7f\xa8\xc2\xe2\x07\xe5\x9d\xc1W)[\xb04EI\x80\xde\xba\xd8\x0e\x99V+\x1d|\x7f\xf2\xecy\xed\x0b\xf9\xcbZ`\x1eUoN\xf90&4\x9b#[\xf8\x8f\x937\x90\xa4\xc0[\x939\x873\x13B\x10\x91\x93\x1a|5\x8e\x8f\x0d\xf7\x17\x1d\xac2\x82\x0c6Y\xed\xd3p\xedz\xf2\x8c\xfe\x8ec\xb0\x1a6\x9a\x11Z\xc5\x03B\x1e\xd1~cxb\xfe\xe0\xf6H\x0b\xba\x96M\xa5\x87YT\xa0\xad:\x1e\xdc \xe67q\x8c\x0d\xd8\x99g.-\xa0\x14d\xf8\xed\xeb\xd3\"&\x19\xd7\x91\x0d\xaf\x93\xeeq\xe1:[\xb77\xed\xfb\x9a4l(\xad\xf4\xfe\xbb\xf4\xe8]\xbc\xbf\xcbn\xd66k\xdc\xb4\xda\xe5\x8d\"(\xb2\x8b\x0f\xdd2\xda\x8b\x8d\x1b;\xcd\x0d\x82\xbeWi\xed\x0e\x82|>g\x0f\xe6V\xbe\x9a+_\xfa\xbf\x17\x82\xbbH\xd0-\xae\xeeI%\x99R\xd5SXs\xfe\x17\xe6\nC\xf7\x0d\xf9i\x0c\x07\xc3\xa1\x8c\xfe\xfa^\xfa\x85\x88\x8fO'\xfc\xab\"\xe7\xe2\xed\x138TU\x8a\\\xf8E'\xfcW\xad#,2\x06\xe7\xe5\x9f\xe5\xd8\xec\xbc\xc0\xd7\xb9V\x8e\xffc\x8a\xfc\xaa\xa1\xb1j\x17)/7\x1axDZo\x1b4\xaf\xac\xc7n\xba)a\x0cN\xc5\x92\x80\xd3\xb3\xe4Q\x92\x07Tcp\xceD\xcc\x88P\x06\xa6\x90\xc7T\xf8\x8a\xbe\x9a\x1b\xe1\n\xdb\x18\x9cB\xa1\xd1\x1a\xe1\x1aF\xf1\xb3U\x00\xe4O\x9e\xde\xb6\x98\xc3\xb4C\x07\xde\xbe_=\xc3\xd0\x9f\x8f0\xc3\xe0\xd4\xcd\x94\x174\x97\xca\x91\xbd-3\xe2T\xa3\x1f\xcbGJ\xd5|m\xc4\x9fM{\xa1\xa9\xdfcp4E\x83*\xd5\xd1\xd3,\x1a\x95\xcc\x84\x1eB\xce\x15L`\xaa\xe2\xd5\x9cJ}\xeb\xdc\xf1\x8b(6\x85\x1aV\x7f}\x1c\x05\xeb\x0d\x9b\xd7\xbf\x9e\xc6\xf9\xe8\xbe\xb9\x92\xe9\xfdi\x9c\x1f\x1e\x98\x8b\x9b\xde\x7f\x17%\x81\xfd\xc3\xfd\xbb\xe2\x83%,A\xfbuP\xf9H^\xc0!\x94o\xd2_Bv\xdd`~3\x03\x81y\x10*[\xaf\xb0\xd2\x86\x19o\x9cS\x88\xdd\x87v\xa5\xc4\xc1\xd6\x10C$.\x9a\x07Z\x87\x9aDk\x89\xd8D\xc5 \xd5\xca\x8eP\x94D\xb5\x9d<\x83\x9a\xae\xde)?\xbeu\xb0\xb1:Di\x05`\x82\xa7\xd0\x18\xfd\xd4\xc7\xe8\xa706$\xff\xc1 ^\xc5\xf8\x85\x93z\x97\xad\x17EU\x97|\"u\x9f\xf6J\xfbK\x96wj\\m\x9c\\ b#\xe4f~T\x9a'\xa5{l\xebx\x154\xfbFU:\x96\x1d\xd4\xc2Bs\xe8h\xeb+\xabL\xb2\x01\x02\xca\xab'\x80\xa0\xad}\xe9\xf3\xdb\xe1\x1a\x14\xd4\x02\xdc\xc8\x1e=\xeb\x1c)\xdc\x8d\x88L\x95\xfb\xc5\x18\xe3st\xfc\xcak\xa7\xf2\x861b\xd0\xb2\x0e&\x0bi]\xb4\xe5\xfb\xd3\xf7\xa3\xee`\xd0\x92\xea\x8d\xc9\xc8lfT\xc6\x8b\x89f\x93\x88>\x15\xf23\xfe\xf5'\xd3a&\xb6\xd3\xfb\x8e3\x11\xae\xd2\xbf\xfeT\xba\xed\xcb4\xae\xdf\xf7\x92O\xd3\x94*\x8eA\xda\x0cM.B\x86\x05\xb0\x9c\xc5\xdf\"\x9f\x7f~\xf2\xc3\xc9\x9b\x13\xce/\xb9\xc2\xee\x0b\xf5\xdc\x07\xe7\xe5\xab7\xa7/_\x9c\xf1?_\xbd<\xc3O\xaf\xde\xbeq\x0c\x0b4\xd3\xba\x9c\x89\xf4\x17\xad+\xaeIe\xd2\x13\xdc\xbe\x82\x97\xc9\xfcV?e;\x8dC\xb3+\x96!\x16\xf5G\x1f\"Bnm\x9c\x9ez9/\xbd\x9c\x7f\xe6T\xe6\x95\x93\xff\xa6I\x91\xf60\xd6\xb5\x0d\xbbFX\xa8\x1a\xe3\xaazb\xaf$\xb4\x8e\xb1TC4\xdd\xa4A\xf9\xdc\xa6\xd1X\xa9);\xac\xf2|\xd0\xd9\x9fF\xa2\x1b-\x19Y\x8c\xda\x17\xca\x90D\xb7\\\x84\x96\xc7q,\x83nDm\xa6\x14M\x9c\x85S\xf5|\x04\xb34$/\xd5L\x0f\x87#\x1f\x0e\x87\x07\xfc\x9fC\xfe\xcf\x03\xfe\xcfC\x03\xba\xcc\x07)\x9b\x87)\x05\xd8\xed\xc4\xd2\xb8\xa0.RK]jV>\xddZ\xf6:\x88\x97UwS\xa1\xd4\xce\x92\xb9\xf5\x80\xbe\x04\xba]\xf7\xa1\x0b\xc45+OQBG\xcd&\xeb\xa4|,\xea\x93\x11\xf4\xd8\xe0{\xa5r'\xfc\xe7k2\x08\x02\x86^\xe5?\xb3M\x12g|{\xe7\xfc7j\xce]W_[\xa3\x9a\xd3Z\xd3%\x17\xd0\xad/H\xe6\xb0\x97f\x1b[(\n\xff\xe7\x8f?|\x9f\xe7\x1b1\x0f\xbb\xa9&\xdc\xd13\x0e4\xeck.\x05\xda\x8e\x87\xad\xf4\xa9\\\x83\x101\xecD\xa4\xe4\xa3@g\xe3bN\xa7gQ$\xb7Ml\xae\xeb\x91\xb1\xc4\xee2\x02f$\xd5\x1f&\x8c/N*\x1a\x7f\xfb\xfa\x07G&\xa2\x0f\x07\xda[\x18\x03+\xfb\x93\xfcg_\xecG\x9fWj\xf1y\x91&E\xd5\x91\xa1\x17L\x0f(\x7f\xf0ejn2v\x05\x8f\xf1\xc1$\x97\xcb\xe7\xa3\x8f`\xd1\x99\x1a\xcb'\xad\xba\x86\xbe`\xf9u\x92\xbe\x97\xe6uX\x04a\xc4\xe6&\xdf\x0f\xf9\x88\xaes\x8a\xfe\xfd\x0f\xe9|\xc3b7Q\xc7Q \x9d\x7f\xe1\xe5&'\x8cg\xd1v.\xe2\xd4%\xa5\xd3\x1e.Y\x85\x18\xa5\xec\xb8tND\x15\xd5\x16\xddn\xe46\x96|\xc1\\m\x17\x05\x17!/\x0c>\x00 B;\xf9G\xcb'\xe4\xea\x95\x80:B\x03\x8b\xbb\xb4|0j\xe4 c\xf1\\\x0f\xa6\x9ah\x87n*}\xa0\xf6\xd2&\x95\x9a\x89-\x92\xcf\xc1&\x89n\x17a\x14\x99\xbc\x82\xd5_\xae\x9e\xc1\x163[\x90lQ\x8d\x85\xf6\x07\xd1xiqv\xbai\x94\x9bn\x19\xdd\xbb\xeb\x0d\xc8\x98b\nd\x1b\x1a\xb7\xc0lQ\x14\\\xc0pLQ5\xd5J\x13\xa2Q'\x10\xcd\xa4*\x8d\x9b\xf4\xc6\xe5\x03\xd1|\x13m\xeb\xa9\xfe\xaa\xb6\xd0\xc6\xcd\n\xb5\x18\xef2\x89\xec\xdd\xf2`W\xf9Ml\xe9\x9eQF\xffE*KN\x910\xdc\x9a&\xe7J\xc4\x1b\xcd\xe0I\x11N\xfa\x88k\xd6\xc2\xbf\xe2Y\xee\xa2s\xfd\x8b\xe0E\x9d\xcee\xd7!\xae\x9a5\xdb\xfd,\xc8\x18\x0c\xc7V\xc0\x97\x0dX\x8f\xd7\xe5\x83\x0d\x1d>\xb0\xb7$\x1f-\xd9\x80\xb8z\xd5\x10Y@>\x98\x86\xad\xb9\x18\x0e\xe0\xeea\xfb\x00\xf0J\xac\xcb\xd7\xf4\xf0\xa0\x85\xdb\xc8\xc0\x86\xadm\x06\xd3\xa8\xd73'\xea\x94\x8fY\xf2\x82\xe6\xc9\xe1\xa4F\xf6\xfe\xb9\x0c\x1b\x92<6\x83\xa7\x13\xb8\xfb\x90On\xc6!\xeb\xde\x03\x0f\xd7z\x06}\xb8\xfb\xd0>O\xe5\x95\x8b\x0d\xdc\xbf\xa7\x1ax0,\x1a\xb8\x7f\x0fz0\xb2\xdc\x10\x86\x1d\x1ch\xa9\x97G\x0fT/\xa3\xe1Ac\xf0<\xf9\xa8\x15>|\xe0k\xcb-p\xab#\x045\x96\xb2o\x10\x08\xb0\xe5+\xf1\xe8\x01\xae\xc4'l3\x1f\xe8\x81}\xa0mPp\xd0\x0c\x05\x82\xc4\x98\xa0 \xfd\\(H\x7f\xe7P\x10\xea\x10\xf1\xeb\x83B\xfa\xd9\xa0\xa0F;\xba\x0f\xdf@\x0c=\x93Q\xfd\x0f\xf6_\x82\xdf\x05ER\xe2\x08\xfaz\xea\x94\x8f\xbe\xc6\xca\xf8\n\x15\xab\xa2XVP\xf2\xf2;\xb8w_2\xaa\xc7\xb0\x85'pp\xef\xfec\xe8\xf5\xb6\x1e\x04\xd3-\x86#\xfe\xa3\x03=p]\xfeqt\x1f\x8e\xc0\x19:\"]r\x0f\xb6\x05\x97\x1d\xdd\xf7<\x9b\x87\x8d\xcc\x9e\xd6hFo\xb8E\xd9\x9b\xf0\xfe\xca[\\\xf2ft\x9cR\xceP\xe1\xac\xc8\xb4T\xc5F\xcdRj\x94%\xb6j:I!\xf0=<$\xf9\x8fkNw\xefi\x7f\xdf/\xfe~\xa4\xbd\x1f\x1dh\x1f\x12\x0e\xfb\x87\x8f\xf8\x8c\x12\x0e\xfbw\x0f\xd4[B\xdc\x84\x10W\xbd%l\xc4\xb7\x8f\x86\xea-a\x0f\xbe\x1d\x1d\x1cX\x04xtd\x80>\xc4*\x1dh\xce\xd7P^(BE\x9b\x8b\xd3|K\x0f\x1e\x12\xbdO9T\xfb\x80\x05\x83ib\xb1\xdd*\x82\xc1\xeb\x1e\x0c\xef\x1a+\x8f\x1e\x1d\x00\x0e\xf7)\xdc?\x87\x1e\x7fs\xf0\x10>\xc0\xfdC\xb8\x03\x9dZ\xbew\xef\xe0\xd1}5\xe7{\x0f\x0e\xef\xde5utppWv4:\xd0{\xa2\xbe\xe1\x0e\xdc?\xdcm\x00\xcd\xd6\x87\xb0\xc1v\x80\x10\xd2\xeb\xe9pW2*\xbd}}*\x94\xb1\xb7\xafOa\x1dD\x8b$]3\xab\xdb!\x08\xfb\xc5hx\xc0\x07]\x81P\xdf\xb4\x18w\x87\xf0\x81\x12\xc5\xdd\xbfw\xef\xf0>b\xad\xa8\x9ex\xf0\xe4 \x8cx\x81\xd0\xf3p\xbd\x1e\xd6\xd6ktP[\xb0\xe6u4\x0e\xbc\x03\x01+\x02\x890\x8c\xfbT\x12qs\xe8\x15\x80\xea\x95c7\x96\x15\x95\x96\x88\x05\xd4\x97\xe5\x8e\n\xef\xd8\x94\xb9\x85#K\x98}\x17\xc6!E\xe4:\x02\x87\x93?,~\x99$\x11\x0b\xe2zSG\xe0\xe4\xe9\x96!Y\\\x04QF\x7f9\xfa\xb8\x0b:,\xf5\xa5hw}\xc9\xae\x1e5\xc51,8\x02F\x1e\x18vQ\x87h\xd1\xc2\xc5-&\x0c\xa4[+U\xa5\xc8\x9c\x0fX9\xf1:w\x04MF\x87UgR\xb9ht\xa5\x12\xfa\xd2\xd8\xca_\x89\x0e\xd8\xa2\x18%bD\xba\xe6H\x96\x03<\xb3\xa9\x7f\xe4\xf8B\x99b'\xf6d>\xa6%,qM=\xe3\x83\xcc1\x1c\xa8\x88$\\\xbd\xdbrvL\xd9\xf29GZ\x10+Z\xc0\x13\xd8r\x1e\xb4h2\xe1S\xaa\xe1EC\xa6\x879\xa5$n\xc9\x16\x11\xba\x19\xe6\xb7\xedU\xd3A\xca\x87\xafm\xf9\x12\xf8\xbcQ\x08Skp\x05\x13\x98\xab\xf9\xaea\x02W4\xdf%\xcds O\xe0\x8a\xcfs\xe9\xc1\x8c\xd3\xa4\x15\xf4p8\xf3\xe9\xf2\x9c\xf3\x1b^`-\xd4\xb0\xde\x04\x9a.V`\x08+\xbep\x91^\xdeLp\x88r\x97{\xe4\xdd\xb5W\xaf\x8bj\x02gf\xedDL\xc7o.v\xa1\x8f<\x024\x995\xbe<\xba\x04\x86\x88_\xa1-\xea\xc6\x87\x0f2[\x8fdFJ|,\xb7`\xa8\x9d\x17\"CM\xec\xba\x12)\xf1c \x08\xb5%$\x8fp\xdbW\x8e\x1b#vXn\x94P\xbdN\x8e\x93\xc1:\xb8\xf93\xbb\xcd\x94\xee\xae\xde\x18\x86\xc5\xd1m\x04\xfbU\xb5p\xa6\x84 ^`f\xa8\xb8\xc1m\x93T\xd2443\x15\xaa\xdb\xaf\xb0\x9b\x0d\x8e\xb3\xfe\xd1&\xc0r\xbc\xde m\n}D\xe1\xe9\xb9\x8f\xc86$,\x1b\n\x0c\xf3\xf1\x94\x99\x13\x96K\xf1\xff\x05\x9d\xc1\\\xd3\x7f'T\xe8\x86\xb0\xf1\xa6\"\x00\xdf\xd8\x04\xe0\xb3\xaa\x00|c\x11\x80\xcfp\x8c\xb9^tm\xa5\x1c\xbc\x82\x18<:]\xb9\x87\x0f\x10\x1c\xcf\xe0\x08\x07:\x821\x9c\xa8\x9d9+\xc4\xe0\xb3B\x0c>+\xc4\xe03RJ\xd5[\x12\x83\xcf\xa4\x12 G\xc0es\xe8\xf5(\xc2\xda5Y\x9b\xb1\x8f \x86\x91\xe6\xb4\xc7j\x0e\x035CJ\xba\xa2\xcdp\xd9\xaa\xa0\xf2\x8a\xbd\xde\x12\xabn=\xb8\x82'\xe0\xbe\x87 \xdc@\x1f\x96\\B\xa38\xd5\xb7\xba\x04~\xe5\xc3{N\xa2\xc4\x96]a\xf1^\x9bIl\x96\xc4y\x18ow=\xe6\x03\xe1\x0d7\xe4\x00\xf3\x9bo\xc5Ee+\xcc4\xdc\xf8\xf6\xee\xa1\x18'o\x077\x10\x8e\xc0\xe5\xebz\xa5\x86[]\xd6\x1b\x0f\xe3\xa9q\xd2\xf5\xc7\x83\xa1\xc0\x11\xea\xbfR\xf3\xd2T\xf3R\xaby-\x8f,\xd4\xf6\x188H\xa1\xb7\xf4zk\x1cn\xd6\xc4\xe5\x8f}\x90\xb0\xb1\xb6o8oN\xce\x97\xc3\xd3{\x1b\x04\xc1X\xfb^\x9d\x10B\x98\x8c\xf88\x81\xc8\xbd\xf5a\xc3\xdf]\x8b\xe2\xfc\xdd\xa5x'\x8e\xc4W\xeaH\xfc\xd6\xf3 \x98\xde\x9ec(KXMW\x82\x96\xf0\x17\x86\x9bY 4(\xf7\x18\xe5\x98\xdbsO\xbf\xa6\x85r\x06\x1c\xc1\xf1\xf4Xk\xe6\x12\xc6\xb2\x8b\xe9\xb1\x0f\x97\x16\xc5\x8c\xaf\x06\x06\xf5\xea\xf7\x17^\x93\xc1\x8cou\x99\x16\xdeb/D,\xd5.\x12UE\x8c\xa8\xef\xe7\x1f\xec\xbf\x16\nt\xaet\x95\xe5\xc3\x07X\xf2/^\xfd\x93\x0e\xb7\xe5\xdd\xe3;\xb7\x86'\x90\x19v\xce\xfb\xcc}\xe3Hb\xdd9D\x84\xcf\xd9\xa3\ns\x90B\xc5\x1f\xcak\xd69\x93\xc1#K*\x83\xc3\x87#\xaf\xfdtO\xba\x13\xc8\xebpp\x04\x7f\xffH \x0dAB\x8b\x91\xeb\xc7e\x9d2]\xea\x03\xaeF\xd5\x13\x03\x1e\xb6GI\xb4'\x85HE\xa7\xad~p\xa2|\xe2\xb2Z\xfa\xb3\xd6\xc8p\xd69\x8d\x0e-s\xba[M[D\x81\x05\x1f<\xea2U\xc3\x0cJ\xfaT\x7fD:\x94\x12\x16Qt\xfc\xfbG.\xad\x04\xa83\xd9D\x16\xbc\xf01\x0d,\x9a\x10\xe6\xe9\xe3#\x88\x0c\x82L\xec\xce\xf8\x07\xa0\x98\x81>\x84nDA:g6\xbd\x18\x8aU\xcfv[`\xf3\x19\xeb\xfe7{E\xdb\xdf\xc0,I\xde\x87L\x7fs\x9cln\xd3p\xb9\xca\xdd\x99\x07\x07\xc3\xd1A\xff`8\xba\x0b\xaf\x93u\x10\xc3\xd9*\xbf\x8d\xd6A\xdcT\xe1\x1e\x1d\x9e#\x0f\x99\xa3*O\xfcf\xc4\x99H)w\n\xc4\xd3\x0d\x95\xc3?&\xb0u\xe7>d\xed\xa1)M8SI\xe4\x9d\xb14\x0c\xa2\xf0\x17\x93~\\],E\xa0\xc4v\xd7WZ7O}\xf8P\xbdm\x88pY\xa8n\x05d\x86\x16\xc8L0\xa9\x1e\x88\x06\xc3\x0cB\xf2\xfe\xab\xee2\xeep\xd0\x12\xa8R\x81y\x1c\xac\x9b\x1a\x93\x1auX\x8b4A\x07|\x18\x9e\x9b\xfa\xda\xb6\xf6u\x15D-]\xe1uu\xe8\x813q\xa0\x07\xdbz\x8f\xc2R\x06)W\xb5\x9f-\xadW<#(\xca@\xdft\x18\x8b\xc7\xd4\xd9\x8b\xe0\x85\x1b\x99\" \x89\xaa\xd9\n\x831 \x0dxA&\x00\x03\x14g(\x98?\x86\x1f\x83\x9b\xfe\xb3%\xc3\xc1\xff\x18\xe4\xab\xc1\"J\x92\xd4\x8d\x9a\xa87\x1e\x87\x0c\xe6\xc9:\x08\x8d=\xe8o\xb0\xd7\xe4\x15$'(\xfa\x98\x9cUe\x9b\xea\xd3\xe6\xdd\xe0D\xc1\x8d\xb3C\x87?\x047\x9f\xd3\x9b\x90\xc5v\xe8\xf0sf\xd8\xeaF\xd4\x04\xf4j\xbfu\xa8\xaf\xb5\xd4\x81\xffj2k1L\xc9Y\xebF\xca\xba\x1aP?N\xa9\xab\x04\xfb\x8f\xe1\x9b\xfd\xf2k.\x9a\xed\xff4}\xb7\x1d\x0e\x87\x8f\xf8\xbf\x07\xc3>\xff\xef\x01\xe3\xff>\xa4\x1f\x8b\xc5y\xef\xdf\xf6M\xc7c\xdb\xdf\xeax\xac\x1a\x93\xb9\xfc\xd7'I\xf8\x1dC\xaa\x8b\xfek\xcb\xeb2-\x1c\xc4t\xefk\xd7\xfb\xe6|\x7f\xd9\x16\x8b\\\x1eK\xa0\xbbF\xc9\x9e;\xf4J^\x1ae'\x8d\xf2\xec\xdb4H\xbd\xe3n\xb3,\xb9i\xc8\x1c\xf32+\xb2\x92\xc7c\xbb<\x9eV\xcd\xd3\xb1E\xe4N\xd1U\x00\x1d\x07\xee\xdc\x81\x14m\x97\xf7\x0fG\xe8q\x11C\x0fF\xfa\xc9|\x83X^s\x08\xc1\xca\x16\xc1\x9a\x0e*\x9fbW\x07h\x1c\x12n\x1c\\un0\x1c\xcb\xe3\xcf\xd1\xf0\xe0.|C\xde\x1a8v\x0fz\x90\xf0\x1f\xd8^\x8f\x8e\xf2\xed\xe4'\xa7\xebp\x07w\x87ey(\x84}\xb8\x7f\xb7\xf8\xc7\xf3at\xf0\xd0Z\xc6\x83?\xc2\xfd\xbb\xd62\xe5\xcf!\xfeB\x1f\x84^\xa3\x1bg\xa3\xbd\xban\xf25\x9c\xc6Qh\x89\xbb\x0f1B\x04\xcd\xf4\xe0ny\x84i\xf3$S\xc3\x04R\x9a\x00\xe7\x97\xbc\x03\xfeR\xb5?zt`l\xa0^WTH;\xd8\x0d\xda\xd2O\xea\x90\xb2gw\xf3\xe7@\xc3la\xf9\xedF\xb2J\x91\x86\x0b\x96(\\\xa6z\xfe/\xcb\x19\xb2\xc4\x93\x86[d\xa1\xddAs\x9e\xb4`F\x80V!v\xc3f\x8d\xa9\xc5\x94\xb62\x99L h4\x0d\x83\xd2\xcbCx\x02\\\xbao)\x9c\x90S\xcd\xf0\\\x19\xa7\xc2^\xcf\x0c\xc8p\xbd\n#\xa6\x14'>\x14s\xbb\xd2v\xc7\x81N\xf3x\xe9\x8f\xcc\x19r\xfe`\xdfIK\x8a\x00\xd0\x9d\x04\x85v\xbaS\xbb\xc2\xach\xa3\x8eZz\x8d;\"\xbd\xc1\xd4\x99\xfet\xee\x9c\x97\xcd\x07d;\xe0\xa2l\xcd\x9e\xa3\xda\x12\xa4\xbd\xed\x92\xf0\x0ea\x81\xb0\x1a!%\x1bd\xc96\x9d\xd9\"Fx\xbe,\x18\xca\x82\xe48\x98\x0efI<\x0bD\x10Gv\x0d\xaf\xd9\xf2\xe4f\xe3\xa6\"\xe0\xcf\x07\xc7\xab\x99]\xc1H\xba\xd8`\x11\xc6\xf3\xe3U\x90\x9e\xc6sv\xd3fB\x93\x0f\x87\xd1\\\x87\x0f\x85\x89\xfd\x86\xb3\xa22\xceZ.>\x95,i\x89\xeb\xf9\x02E\x0b\xd7\x98X\xa2\x1c\xda\x1c\xdcx\x10\x05YN\xc3\x7f\n\xb9\xf7\xd8\xe38\xd0\xb8]\x86\xfc\xcc\xbeX\x8aoos\xb6\xd3R\xc8\xd9\xf0\xd5\xc0\x1b\xb4\xb4 \xe4\x95\x858\x83\xf5q&\xe6x\x8b\xc4\xc5\x9fu\xbe\x1a*\x17\x87n\xa6\xebc\xa6j\xf6\x0d\xe0\xd2\x0c\x9e\x88\xc6\xc6\xbd\xb3EY.\xe4\x1b\xe5\x98\xc9\x85\x8d\xea\x89\x88\xfe$\xe8t\x84\xfb\xd4\x92~KQ\xc6\x84\xeb\x8c\x94)?\x99\x0e\x8dq6tyg\x97\xd5j\xbd)\xa3?r\\Hc\n\xdc\x92(\xe8#\xb50\xee%\x7f>\xb6\xedA\x8a\x06W\xd9\x8b\xf1^\x0c\xd8D\xbc\x96\xa5$\xa9\xf2\xc9\x84\xbcA\x92B\xb4+\xcd\x89\x8f\x15}?\x87\x9e\xafdN\xe95\xca<\xa7\xd0=\xa8\x07\xee\xa2Q\xe0\x10\xde$\x9c\xf4\xbdJ\xc2\xb8\xc5\xe6!\x9f.\xb6\x0f\\\xdb\x99lW\xae\xb1\xc6=DjIU\xc4\x13\xd6\x12\xa1~j\xef\x1b\xa7o\xe1\xfajBo\x84\x85\xe8\x8bM\xac?\xb9\xcf\xd7\xf2\xf9w\xdf\x9d\x1b_\xeek\xbb\xfeQ\x1c\x16t=\x13\xf8\xba\xdf\xef\xbf\x8b1\x00\x96\xb3\xca\xf3M6\xde\xdf\xdf\xb0\x1c\xf3\xdd\x0f\xb2\xeb`\xb9d\xe9 L\xf6\xaf\x0e\xf6\xe5\xaf\x9f\xb3$v\xde\xc5\xf3d}\x11\xce\xc7\xe0|%>\xf4\xb7\xa1\xf3\x8e\x0e\xc1\x82\xd2>\xab\xa60\xf2\xc15-\x07\xf4a\xe6\xc1>$\x1dg\xa5?ie{\xb4\xa3\xc0\x0cz\x10\xc17d\xee\x1d\xdc\x83#8\xc08\x0e\xdf`$&\xfe\xbf{\x17\xfa\xf4\xd2C\x95\xd2\xa6\xe0\xd8\x9e\x02Py\x17#\x0e\xac\x08\\\xdf3t\xef\xf5\xf0\x00\xf2 \x10`\x0f\x88L\xd37.\xb1\xa0\x0b\x90\xbe\xd2\x81\x0f\x8f\x1eiPo\xc7\xce\xea\xf3\xd1\x87G\x1d\x8b\x7ft\x9b\xcb\xd9/%5\x90\x84h\x07S\x85|2wK\xf1\x9e\x8dG4\xf2\xb1\x84\xb4\x93\x8c\xc8N\xa4X\xbe\xdd\x8c\xbb[\xbb\xa1h\xd4\x1571\x91*y\xeap\x8c\x8fU|B\x87\xe6\xdcS\xc6\x9d\xdck\x8a\x1d)\x1f\xe1`\xf4|\x9b\x8a\x00\x90q;\xb8\xb3\xf9\x92\xbd\\,2\x96\x9bBz\xeb\xcf'\xed[\x9e\x8c\xc1\x92\xab\x80>\xff\xd7\xb8\x89\xd6\x85q\x9e\xfc%d\xd7\xe5u6]\x9c\xad>\x92Wc\x9c\xf0o\x93m<\x0f\xe3\xe5q\x14\xb28\x7f\xcdf\xb9\xeb\x0dV\x88'\xed+\x14H\x8a\xae\xf8Z\x0f\xc2\xf6j3YM\xe2j{\x95\xc5N\xbcc\xc3Q\x02zm\xa1n0\x05\xf2\x13Xp\x88\n\x91^<\x85\x19\x1cQ\xbc\x01Z\xc91\x04\xe2\xc3\x06\x8e s\x03N/\xf9\x9b\xa2\x00\xb1\xd2\x06\xccn\x80\x81\x19\x8bs\x96\xd6\xb60\xed\xb0\x8b\x99\xdb$]\x94I\xe1>\x1c@\x8f\xa3\x0b\xc7\xaa\x96]\xe7\x85=OL\xefS\xe6\x94\xe5\xc9f\x0c\x81\xbd\xc0:\xb9\n\xe3e\xc7\x0c\xfcP\xd0\x86\xbd\xbd\xfa!\x90|\x1a\xc6\xc3\x81f,\x80\xa7\xb1\x14.\xdfX[Jca\x833N\xbdUN\xb3\xa4\x14?\x90\x7f\x9cDl]s \x04\xc1G[\x17C,\x82\xd0E\x88\x9f\xfd\x17\x1a\x91\xc5\x8f7\xc9\xa6\xcb\xd0\xd0j\xef\x9a\xfb\xa0x\xd7j\xe0\xd4n\x18/\xc5\xc8yo\xea#/k^N\xa4\\\xddd\xe5\xd2l\xde$\x1c\x92wL]\x81\x9bkIN\xa9P\xa0#\xac\x95\x978\x8cc\x96\n\x89\x01\x97y\x86\xc8Bov\x1c\xa3\x00\xadn\x8b\"\xf5T+\xa2\xe6\xc9\x86\x93 \x14\xde\xe2A\x82,\xca\xb4\xfb`\x06W\x83\xb75\x06%\x0drv\x86\x1bQ\x8b\xeah\xa3G\xd2N\xd5\x08N\x96D2e(i \xcb\xaf \x9c\x03\xef\x8ek\xff_\xbb\xed>k@'h\xec\xe8S`M\xc9\xe7\xac\x04^~' \xdc\x15S>\x0d\nw\x86/\x01/\x7f\xa8\xbct\x82\xf9\xfc\xe4\x8a\xc5\xf9\x0fa\x96\xb3Xd\x0c*L.{b\xcaq\xf2\xff\xb2\x98\xcc/\xf8\x9a\xb9%\x9ac\xbc'&E\x1ag\x15fy\x92\xdeV\xad9\x9bm\xb6:\xcb\x83\x9c\xcc<\xa2\x90y\x9d\xb8L\x13\x92 \x08\xe1\xe05\xe3\x85Qj\xd4+\xd7%\x0b\xcaT*>\x0fj\x95\xf9\xe8\x82m\x9e8\x9e\xda\xdc\xea\x82\xb8N\x94\x04s\xc7o\x87 \xeakWE\xb1ql\xeb \xde\x06\x91%\x86=Wq\x1a\x86\xbdI6\x19\xaen\x9b\xe7\xb5|\x18\x86\xe8&K\xdc/,\x16\xdc\x8cRH\x15\x9f\x12T\xf1\xc4\x8bAQ\xce\x06\xf7\xb0\x87\x97\xf3\xc40e\xb0\xf7\xc1*\xc8\x10\x92v].iUL\x06\xa8\xd0\xb8\xde\xa0\xd0\x08\x9aO\x0dZ\xedC\xd2h\xa7 {\xc9\xa4x\xf0\xed\xed\xe9\xdc\xadM!e\x0b\x99\xc1\xef+\xc7\x9b\x8e\x9a\xf2\x05\x83t\x8ek\x1b\x05\xd4\x0c\x05$L&\x850\x99s\x1e\xc3:\x88\xdc \xe4\x98D\x08\xe9\x9c5\xb5+\xf4Cx2\x81\x14\xc8 \x1d\xd0\xff\xdc \x124\xa8\xa8\xd0\xac}\xd9\xa1\xd9D\xb6\xf6L\xae\xebW2\x8aO\xe1\x86\xe5\xb8?}x\xf7.\xf34J\xe5\xbe{\x97}\xf87\xcf\xe4\xc2i\xc5\x9aY\x14\xce\xdewB\x99\xd2\xb1!\x1b\xe4A\xbad\xf9c:\x89q\x9e9\"\xd8L\x1e,_\x04k\xf6\xd8\x13G\x9f\x9b eq\xfe\"\x997$\n\xdfs\xf7\x90\xb1\x8c(\xe0\xd7\xe0z\x15\xceV\xa4&`\x1a\xc8?\xb3[\xfa\xb5fy\xa0~\xcc\xf24R?\x82\x88\x97j\x8c\xfd\x82\x16\xc86h\x94\x90\xa8\xa8\x94\xa2\x10\xf5\x08d\xe52G\x95\xdf\xe3\x9a\x91\xbc\xfa\xc4\x1a5\xd1\x80\xb6\xb9R{\xca?\xd0\x88\xac\xb8\x96\x82\\\xc7\x8d\xeb\xe7k\xd5\xa7\x94\x02pW\x90\x06\xdd\xc5\x0b\xb3\x18\xe4y\x1a^ns\xe6:\x9cv8\"\x85A3\xd9\x12\xc6\xfe\xe2\xce\xf6W\x0e\xf9\xb7n\xc9C:\x1f\xcc\xa2 \xcb8\x90\xb5\x86\xfa\x91\x06\xdf\x06\xb7w\xf9D\x0d\x840-\xdcZ\xdcQ\x9b\x89\x10\x8fW\xber\xc4\xd1j\x87\xbdB\x0c\x88\xe4\xd1J;\xb9\xca$\xac\x10q\x8c>\x95.\x01egJ\x19'\x08\xcf\xc94\xd5\x06}W\xe2\xcac'\xd6\xa5?\x15^\x02\x93\x16c\x164\xab\xd3\xf2Y\xec\xcc\x19\xa9\x16]\xff,3\x9c\x0c\xfa\xb0@/\xeb;\"x\xd9N\xb3\x94(\xa7\xa4<\xf7\xef\\\xdet\x8c>^\xfa\xf3\x11C\xbb\xa2\x94\x91\xf9\"\x83\xf4\xac\xc1\xe8af'\x16V\xf2\x07{!\xe9\x07\xa7^~t\xcb\xdea\x18\x9e\xd1\x18J-\xc5[\xad\xc1f\x13\xdd\x92\xa7 \x8c9\xac\x7f\xf8\x00\xae~\xa2\x1c\x9a\x0f\xa0;\xdd\xc9\x13\xc1\x1b\xe9\x94\xb2\xc8\xc9\xe7\x83sq\xc1\xb2\x1f\x93\xf96\xe2\x92^y_0}\xdbX\xcf\xc8\xa0\xeb\x99\x926m\xdc\xd8\xbd\xeb\x19\x02\xa8\xf0\x0f\x07\xd5\x0f\xa1\xf8pX\xfd\x10\x88\x0f\xf7\xaa\x1f\xb6\xe2\xc3\xfd\xea\x07L\xf6\xe0\x0e+o#,^MJ\x85'G\xbc\x15\x94&\xf1\x0f\xb2\x88\xb9\x87\x0f\x1fT\x1b^P\x94\x17\xcft1\xd3\x90\xf4Y?\x83f\x83b=E\x9c\xd5:\xac\xcb\x9b\xb1-\x97/A,2E\xbdX\xb1h\xc3\xd2l\x90lN\xe7\xe5\xe1\xb6;\x02\xaa\xd1\x0b\x7f:\x0b\xfe\x91\x9c(F\xe7\x89Lj6\xcf:\xa9\x9e\xf1JA\xb5\x92\x9b\x0f..0\xfd\xd9\x05\xc5\\\x1b\xfa\x18\x19R\x16\xf2<\x91#\x11K\x93{g\xe3\xc1D8\xc8\x93\xe52bg\xab\xe4:\xeeJK\xa4\xb0\x1f\x0e6i\xb2i9c\xcc\x85\xd3\xeem\xb2\xcd\x9fa\xdb-\x15b!\xb7-\x9b\x8b\x91\x97\x1cG8$\xd5\xd5\xcd\xab>\xc25;\xc3\x896\x17E\xad\x96s\xae\xd7,K\xa2+6?\xdb^\xe6)k<\x0f\xc53P\xcd?'@;\xf9@$\xc6\xa95\x84!KV\xc9\xb5;u\xd4\x0c2\x87\xec\xd9\xe7>\xec\xd9\x9c\x9a)u\xcfq\x10\xcfXt\xccE\xe2\xae[\x869j\x04\xbdo\xde\xae\xf4\xf64\x7f\xb9\xcdO\xe2\xe02b\xf31\xec\x85B\xa7\xac|\xb1\xb6b\xc8H\x03\xc5\xd8\xdf\xa4\x1c\x10v\x1a\xfb'\x80[\xb6a\xb3\x1d\x80m\x13\x98b\x8a\xea\x0fA\x1be,j\x10\x0c\x7f\xcbU\xe60\x84.\x1b\x7f!\xbf$F\xc9\xc11\x87ejs\xab\xa3M8\xb9a\xb3m\xde)q\"\xec2-F\xed\x9e\xc6\xaf\xd2d\x99\xb2,\x1b7&\xf2n\x18c\x1d\xfb\xba\x0e\xf6\x13\xa1\xe5\x8cEl\x96'\xe9\xaf\x00/]\x08\x13\x1f\xc2\xab _\xd9aK\xdd\x07\xc0\xac\xf6\x1b6\xab\x12\x15.\x9b\xfd\xe9\xcc\xf5\xe8\x12\xb1\xa9\xc4\xd4\xe1\x03Wt\xa6a\xf9\xcdt\xebW\xde\x82_\x0da\x7f\x85\x0d\xb0\x10\xf6\xf2\x1eX\nu\xdf\x06R\xd1\x9b\xb2\x00\xd6 \xc9\xc8>[\x13zZr\x8a\xfb\xa6;\x97\xb57\xca\x11\xc1\x87\xad&\x85\xf8\xc2\x07\x81OA\x7f;5\xcf\xe3=\xbb\x1d\x83\xb3\x0e6Hb\xde$\\\x8c\xce\x1c\xf34\x84\xe8\xdc\xd9]B\x1aJ\xf2A\xb2i\x07\x98\\\xc8)\x1d\x89A\"\xc4\xb4\x9c\xdc\x1d\xe3E\xb8\xcc\xbc\xb63w\n&?Of'7\x9b \xce\xc2\xa4\x834\xc2\x85G\xb6\xf9!\x8c\xdf\x87q\x8bX\xb4\xa5\xe2a\xb6\x89\x82\xdb\x97]\xa5\xa3L\xaf%R\xd9I\xff\x8f\xe6\x9a\x11\xa9\xb6\xdb\x0d\xd7\xa6\x10\xc6\xd7a\xfe#\xa2]\xcb\xeaa'OO\x16\x83\x1f\x83M\xab\xd2\xfe\xb3\xd0\xf4\x17x\x13\xfcOg^\x0b\x8b\x03T4\xc6p\xda\xdc,\x7f\xf2`\xd9\xe9\x86\x05\xa7\xdfV\xef]\xfd\xc9\xa4\xee\x91[\x14-\xfa.\xf4,\xc7\xc2\xdd\xf4g\xce6)\x9b\x059\x17\xf1OI\xf3-^9B]3\xf6\xa5\x15\xa3\xee\x9a\xccS\xf2!\x0e4\x86\xa4\xbdh\xa1\xa7t\xb8JQ\xd6UZTi\xa8\xaa\x8a-j\x19\x96\xaf\xdb \xc4\x82u\xb7X\xb4\xf7R\xd2/;\\\xf0SzU\x8b.\ne\x15\xaaE\xf6\x80\xbaN\xd9B\xf2AW\x81Z\xf4O\xb0\xe8\xc6-\xda(4\xe8\xc7-B\x12X\xd5\xfd\x16\xce\x0ff\x89\x96\x04b<\xd2\xa9}mo\xb0f\xd6\xd5\x9a\xebzB\x04P\xf7_\xd7\x1fa-\x89\xa4\x89V\xb8\xb5\x0b\x8f\"\xf7\xc7\xb6\xabb\n\x9c\xc7\xf0s\xf3\x8c\nm\xba\xcdh\xdf\x11<\xba\x82\xb4v\xb6-\x96P{\xd3\\\xb5tR)*\x97\xde\xb5U\xd7\x0eiUu\xed][uqD\xa7\xaa\x8a\xdf\xcd\xd5\xa4<5\x86\xcb\xf6\x82\x82\x95\x8f\xe1\xba\xbd\xac\xe2\xe3c\xb8h\x19y!$\x8c\xe1e{Y\xad\xe5W\xcd\xa5K\xf2\xd0\x18\x8e\xbb\x94\xd6Z?k.\xaf Och\xd9\x9d\x92\xe44\x86g\xcd\xa5u\xc1r\x0c'\x1d\n\xa3T9\x86\x9b\xe6\xa2\x8bx\x0co\xac%l\x87\xab\xb5\xb7\x1f\xcf=\xbfrO\xe4\xa3\x9b\x0d^mSfJ1\xb9\x92\xe4\x02-\x1d\xb5\xb3\xa9\x12s\xda\xab84\x16t\x00\xdd\xc7J\xdf*\xbc\xa4Z\xd5\xc4\x0c\xaa\xb2\x84\x8d\xf2k\xc6\x05\xcc\x15#&\x00\x13\xa0\\\x14\xbf7\xc7\xaf\xc8\xe6\xf8\x15\xd9\x1c\xbf\"\x9b\xe3Wds\xfc\x8al\x8e_\xfc\xc3Pw\x1a\x8a\xc8\xb9\xcb\x92k\xfa\xb7\xf6\xd9\x9a5\xfadi\xfeX&k\x8cv\\ip\xc7\xf2?\xd9\xe5Jx\x18bq\x992\xa7\x9a\xd6\xc8\xe8\xd4\xf8\x19\x07\xa7d\xa0Z\xb2\xfc\x07$t\x06)\xbe\xab}j\x17\xdbT\xbe\x83\xaa\x1c\x9b\x14\xdf\xc1l\x9b\xa6\\\xbch\x10t\xd1>\xe9\xc6\x98T\xbc\xd1y\x0d\xef\xe8\xb6\xceO\xab\x90Yd\x1dg5r\xa4O\xeb\xd7\xf0\"\x11\xdc\x03D\xf0\x19\xbcS\xe0|\x8d\xe7\xf5_;\xf0ug\xd2Z\x86\x00\x93@\xd5bg\xfc\xa4=T@a\xb3\xe6\xb6\xac\x06\xa3\xa50\\\xfb(\xcf\xa7\xcc88\xd3\x90\xed\x99\x18\x87Nwg>\xccj|\x84Z\xff\x171\x16\xcf\xfftb\x8c \x8b(\x15\xfa\xd5|a\xb0\x8b\xd3\xac\xba\xf0\xc3WL\x91_\x15_?\x82 \xe5 u3\x8fr\xe8\x0f\x1f\xc3\x0c\x9e@\xf6\x18f\xbd\x9e\x07\xd1tv\xae\xd7\x9c\xce\x0ca\x01\xc5R\xc6x\xe1\xd1\xe6\x9c\x8b\x18\xd8\xca-fA\x14 \x96\xc1|\x98\xf2\xba\xe72\xf4b\x84IZ\xc3\xc1,J\xb2N\xeeV\xc2\xc5J\xb7\xfd\xa11\xfc9G\x85\x10\x7f\xbbU\xffz 4\xc3\x8bZ5\xa6\xc77\xe3\xb7\xe0\\_\x96\xe4ub[\x1d\x0d\x9eqwcj\xba\x03;\xa4\xd3\x15\x96\xa6\x1d\x86\x10\xeeb\xf1\x0e\x84\xf1t\xf0\xec\xec\x8d\xbd\x14\xdfm\xed\x04-\x90)m\x1b\xcc`\x98\x0e\x15\xa1)\xd6\xc1\xa9\x81sS\x8aT\x87\xaf]f\xcb\xd0\xd0\xc6\x8a\xe7\xe1U\x8dT\xeb\x8f\xbaV5\x06g\x1e\x06Q\xb2\xecoo\xacWq\xbfH7\x97\xc1\xec\xfd\x1f\xea\xe57Z<9\xa5>^\xcf\xff\x8d\xfaZ\xb1`\xfe)\x9d\xad\x0e\x95\x1c\xe8<\xbb\n\xc2(\xb8\x8c\x18\xea\xfbI\x1a\xfe\"\\\xb8\x9a6\xfbr\x9b\xe7h\xe0\xb5\x0f8\xbf\xdd P\x89\x92\x9d&\x86\xfc\xa0\x8f\xd3k\xa8\x91\xc4\xba\xb9 \xeb\xec\xbc\x02\xd9\xd5\xb2q\xf4\xd7\xe1<_\x8d\xc19\x186\x0cd%\xa2;\xf0R;\x8f`\x9b\xd5e5\xfdY\xa5l1\x06\xe7+\x9c_\xc3 n\xa20~\xff}\xa9\xb0\x05y\x91\xe9~Y\x00\x9c%q\xce\xe2\xdc:\xfbh\x80|\xee\x8c\xfd\xcd\xf5\x06\xeb`S\xcaI\xdex\xfd\xb7\x85~\xce\xda\xcc\xb6\xc8~[\x0e?\x9e\x9d\xbdi=\xf0\x98\x17,\xc1\x1a\xb7D>e\x13X\xcb\x19\x96\xce\"[\x0f\x81*\xa6\xb8\x96\x93\xdb\x92\x91\xaf\xc5\x00\\1{\xd6\xdd\xa1\xe5c\xb3\xb4y\xf8\xd4\xbe}9%\n\xdf\xfeK_\x12\xcf\xbf\xf4\xa5\xff\xc5\xfa\x92\xe0|]4\xa6\xce\x97S\xf2\xeez@\\\xd7/\x06\x1a}|\x93\xa8\x83g\x9bI&\xafim\xe6\xd4\x15\xffR\xda\xccO,\x80\xac\xac\x8dy\xa4\x8b(\xd9\xedU\xb2\xd9n\x1c4,6+u{{\xbb)>\x89\xa8\x13\x14\xee\xce\xde \x0b\x7f\xb1D\x13\xf9\x92:\x10\xef\xb2\x7f\x9d\x06\x9b\xcd\xa7\x08\xbc\x1d\xe4U\xad\xb3\x04\x8e\xc0\xb9\xccc%\x113\x88\x92\xd9{6w`\\\xfd\xb0\x8d\xc5\xa7\xae\xf2\xaa\xf8\xb5\xf3\x14\xb2M\x10kR\xbb\x1c@\xa3\x98\xfe\xcf\"\xe5\xe2\x82\x7f\xa5\xad\xf1W\x1d\x96U\x13|\x1b\xea\x9bG\x8c\xf4\x14\xddkm#\x8f\x85u\xf8_\x92\x0d\xfcK\xb2\x81\x7fI6\xbf\xbddc\xbd7\xc0\x06Y\x9el8\xd4\x07\xcb\x80\xf8\xb0\x99\xff\xc8\xcb\x05\xd2z,:\xb1\x88&\xe8lop\xa9\xff\x9f(\x8e\x94\x1c\xd5?\x8dy\xef\xc6R9\n\x96\x85\x94\x8b\x0b\xceH5\x9am\xf8\xda\x81\x0b8A\x1a\x06\xfd(\xb8d\x91c\xea\x06h\x9c\xd6\x8e\xe4\xf7\x0e]}!>\xfeO\xc2\x93\xd9g\xf2\xe4\x86\xfa\xe6\x11\xff/\xb4\"\xcc8K\xad\xf1\xd4D|\xa9q\xe1PV11\xdb\x99\x89\x0bo\xc5\x87\x1a\x17\xce\xc4\x87\x1a\x17\x8e\xc4\x87\x12\x17\x9e\xc9\xc8G3\x11\xf9\xc8\xc4\x8fg\xbf=?^t\xe5\xc7\xb6\xb0EU*l\xe5\xb9W\"\xafz\x95\x98[}g\x92:\x0fl W$\x16+\x18$1\xa7\xcd\xc7\xab ^\xb6g0\x02\x8d\xcf\xb1A\x1c\xac-\xbaXP\\[\xab\xb0\xe8\xbf\x7fDL`&\xf4\xe3\xfc.\xc3\xbb\xee|H\x9d\x06S\x0fb\xc7\x1b\xa9\x1f\xdf*\x15\xca\x0d\xc8\xe3\xd7\xd2}\x94,M\x91tv\xe8\xbfY8\x08\xda\x14t\x8a\xab\xd0\xc9@B\xc1\x154\x93H\xcd\xe6\xdd\x1a\x80U@\x819\xa25 \x1d\x19\xe4 \xc9w\x96\x99\xc5b\xcd\\s:\xd3\xa0~\xec\xbe\xc3b\x9a7\xb3\xe3Y|P\x84\xfa\xe0\xbf,8\x0ee\xd9)3\xcaN\xc1?@vj6\xe2t1\xf6\xc4U\x00i\x83\xa5\xee\x87\xeeyW\x1bR\x88\x85\xbb\x9d\xd0\x07t\xd2\xcd\x91\xff4g\xeb\xa6\xabH[*Jy\xe0\xda\x8cO\x19\x15\xfe\x96d\xc8\x96\xa3\xf6\xa4do\xb2\x97\xa5\xc0\x19\x8b0\xcaY\xfaIH\xb7\xb77\xc3k?\x96(\xea\x80\xd8g\xef\x7fc\xee\xbfc\xe7r\xe5D\xd4]\xbc~\x94\xdfnXC\x8c\xd8\xa6\xc1\xcc\xbf\xcc`&;\x0c\xa6Q\x8f\xb0\xdd\xbf\xd8\xdd\x088K\xe2<\x08\x9b\x0e\xd9\xf7\xf66h\x95\xe4b\x87\xb5\xdfE\x92\xae\x1b;Nb\x8a\xf2\"o\xa5(6h\xebvS\xa6\xf6mI\x97Z\x16&\xe8t\xc2\xd9v\xba7[\xb1u\xd0z`\x18\xe3\xf2\xb6\xb4\xb5\xd3\xe9\xa6.\xc3\x8c\x81\x95d\x9a\xe6\x9a\x81vy\xad\xe5\xdeK\xf9\x08\xf5\x13\x8e.\x0bN\xea\x7fA\x00\xbd\xcc\xe3VK\xb5\x00P\x8e^\x0b\xfa\xf3\xc8:\x82\xack\xef\\e\xa6\xa3yi\xa3\xee\xac\xcdjR\x96m\xc8\xce\x0fX\xc6\xf1`\xfciC\x15\x1e!\x84H\x1d=B\xeaS*\x00\xc4\xba\xb8e\xeb\xf8'\x8d\xb5e\x0c|\x8b\xe7I\xdc\xe4\x97\xb1\x83\x97\x8as\x8cn\x1bh\n\x9bs\xa25o\x03 \x01\x94t\x18\xf0E 7\x9b%\x1b\xd6\x9f\xb3E\x83/\x87\xa5\x9bMq,q\xc6[\xc9 H\x19l36\x87<\x81e\x1a\xc49\x041\x04\x9bM\x14\x8a\x80\xd3\xf3p\xb1`)\x8bs\x88\xd8\x15\x8b2H\x16\x10\xccf,\xcbx\x95y\x90\x07\x90\xc4p\xc9VA\xb4\xe0\xdf\xf2\x15\x03\x16\xcfy\xa3\xe9\x00N\x82\xd9\n\x9e\xbd:\x85up\x0bs6\x8bx\x7fI\xcc Ia\x9d\xa4\x0cp2\xd9\xa0i\xf7\xf5Q\xf3\xa6R\xf6\xb7m\x98\xb2\x0c\xbbZ$Q\x94\\\x87\xf1R\xb6\x04Dg\x80b\xe1'1\xcb\xe06\xd9\xc25\x9f\x9a\x9ac\x9e\xc0\x19\xa5\xd1\x85\xb7\xa7\x03\x07\xe3\x03\xef\xc6\x81?\x8d\xfb~\xac\xbb\xd64J<\x9f\xcb\x91A2\x9f\x06%\xc5\xbe\xf0\xdb\xb6\xa6w`\x00\x92\xbd\xb5\x05\x8dA\x10oR\xa9\xda\x19\x04\xa7z\x9ft] \xeal\xa3\xa2\xe4b\xbf7\x1b\xd5\xef\xf2<\xc8\xa7?,\x96\xa8\x7f\xb6\x93\xa1\xffy\x17\xb6\xbe\xa8\xda\xdd\xa6T\x8b\xd0\xaaH\x0b\x9aUo2\x905\xeb\xdc\xbb9\xbaw\x93kC\xe5\xe3\xd1\x16\x1a(\xd8\xc1}^h\xdc\xc1&\xfc3\xbb\xe5\xc3hR\xa4#*|\x19d\xe1\xac\xad\xecL9\xd17+\xdb\xb9\xce\x9a\xcc\xda_v\x1db\x06\x93E\x13C\x9a\x05\x19\x031\x0fgl-\x06bh\xb6\x83\x8dV\xce\x02\x1d\xb5&\xe8\xae9AW\xed j\xfaJ\x87\xc8\x1c:+\xec\x10\xf9c'\x0d\x0dHF\x15\x1a\x9a=\x8d&4\xe8\xf6\xf2\xb9LY`9V\x05\xb5\xbf\x08z\x9f\xb1\xbd\xd1\xbf\xb6\xf7\xf7\xb9\xbd\x92U~\xf2\xcev\x928A\xedn\xf3\\|p\xde\xc6\xef\xe3\xe4:Vas4'nTB\xc1\xf1a\xd1\xf5v+t8\x0bo\x1b?\x8d\x1bz\xe0\xf4\x7f\xde\xae7V\x15\xcb\x90h\xe6\x7f\xf8 \xe8\xefR\xba\xfc\x97L\xf9\xbfD\xa6\xe4\x82V\xd2@HU\x1c\x00\xd7A;E\x93\xd0\x14\x17e\xd7,\xcb\x82%k*\x9d\x16\xa5\xb3d\x9b\xce\xac\x02\xd4\xe7\x92\x1e\xdd\xc6\x83\xb3\xb5\x85m\x05\xcc\xd3}\x1b1\x13\xe4\xea\xcfe0{\xbfL\x93m\xd4)\xd5\xe7\xfbm\x80\x1e\xf5\x07\x97\xe7\x1f\x16\x98\xbay\xa7\xa1t#\xaa\xc9\x95\x16t\x7f\xea;w\x8a\xd4\x10\x9c\xe0\xe14\x1c[z\x9c\xfa\x92\xdbX\xd8\xef\"\x94w\x1b\xdc\x83.(u0\xb2\x81\x12\x95\xba\x99\xc4@\x19\xe6\xda\xf7.\xc44\x8d\xcei\xbc\xd9\xe6m1v\x03*\xfb:\xb9n+\xb9\xa5\x92\xc7I\xa3\xb0\x08*\xff$\x1e\x19\x9fp\xc1\xac\xad\xfc\x8c\xca\xff\x18\xa4\xef\xe7\xc9ukX`\xcaB\xe9\xfc C\x9d\xbe\n\xf2U\x9bO\x0e\x08\x17\x96\\\x04W\x12\xa4\xa9\xb9\xc2\x1c Y\x10E8\x85\xcc\xf5v;\xf0\x92\x8fdo$\x11\xf3%9\x9d;\x1e\x9e\x7f}\xba\xe9\xa2\xdb9W\xcb\x19\xea\xean{\x99Y2g\xaaT\xa2\xe2\x04\xbb\x0e\x07B<\x07t\xfe\xff\xff\x0f\\2pz\x8e\xbd\xa5E\x9b\x11\x84\xa2#OU\x16\x19\xcd\xe7\xce\xf1!9\xb7V\xc6\xb4\xb6\x9bF\x87\x98\xd5}\xc3\xf5\xb2y\xd3\x19j\xd0\xb62\xad\xb7\xf4I\xf7\x19\xcb\xf5\x9a\xb3l\x96\x86\x9b\x1c\xa3^7\xcf\xe5\x93\xc7\xa4\x1f\xfc\n\xbd\xa8\xeb\xd6\x96w\xf5\x8b\x8d\xe24\xde}\x0ca\xfc\xd9#\xa0;\x13j\x14\x88\xeec\x07\xc1\xa4\xc1\xf1\xa04\x18\x07\xbe\xc1\x07\x1a\x9dB\xb6mC \xdb\xc0Dx\x8ep\xe5\xabE\xcd*L\x9e\xf2\x92\x06\xfel\x82%\xcf\x87yS\x98\x8a\xae\xde\x83\x9f\xe4g\"\x1fT\xcd[\x0f\xb2\xa1\xfd\xe4\x1d\xc0\xea\xefD\x9f:\x0b\x1a\xa6\x80\xa9\xa6\xc3\xec\xf2\x907m\x97\xd3u\xc1\xa2N\xbbK\xbb\xa67e\xdd\x85+\x91\xfa\x8e\x15\x97\xbcZN\xe3\xc8[6\x0f\xd2%\xcbi\xe3\xede\xe5\xdd\xb7\x8a\xbf<#\x91\xbcmg\x85\xc0ega6\xf6\xc5\no\xfd\x10\xd3L\x87\xadz\xfc\xbf|\n\x8a\xe7\x93\xac\xbe\xffd>\x05\xb0\x9bN\xde\xe9f)\x88\x9e\x7f\x83\xc4\xdc\x0b*\x186\x8cb\xdb%|\x05\xdf\xd1m\xab\xde\x11a\xa9f\x9d`&\xf3a\x0b\xc1w\xb0\xcdXj\xbfP#v\xbfK\xf6RR\xce\x1b4o\xa9\x9c7\xccS*\xe7p\xd4Bs\xe4\xa8m\x8a<\x7f>r\xf0\xb4\x9a\x19\x7f\xeb\x94\xa8\xffp=\xbf\x8bc\x06\x94\\HZ\x95\x0e\xbaM,\xf5\xfcX\xd3\xf39\xda\xd8\xd6\xbe\xbe\xf0\xffK\xb5\xfdv\xed}\x978\x93\xf0;\xd0\xf6\xa3O\xd3\xf6wS\xdf\x17\xbb\x99\x08\x0c\xda\xbe\"z\xedj\x7f\xf2\xab\xaa\xfduc\xa3\xfetP\xfb[N\xccH#\xb1GH,\xd4~\xe7\xdb \x0bg\xe5\xe8\x88\x8e\xbdj\xab\xce\xdb\xac\xc3\xa7]tx\xfb\xb0\xad:\xbc\xadJ\xd0\xb6\x14\xad6\x89O\xd7\xe1?yLU\xdd\xf5\xad\xe4yR}\xb5V\xac\xa8\xaf\x8e\x0f\x1b\xfc\x9f\xeb\xaf\x0d~e\xcd\xc3\xf9\x82\xfa\xabpC\x9f#q\xa7?[j\x10\xafw$\xde\xfe*\xfa\xf1\x17\xdb\xa8WA\x96]'\xe9|\xe7\x8d\xd2\xed\x0c\xbf\xde>\xed\xbe\xfa\xc16O8g\x8bX\xcew!f\xd7\xfd\x8d\x98c\xb7}\xebXZ@P\xc7\xd2\x9f\xb6\xcb_\xc4\n\xf2Y\xde{\xff$V\x10\xd3\x11yy\xc8\x8b\xdf\xbf\x15$\xd5\xac \xf6R \xda\xf7;\x18I\xd2\x16\x99\x8d\x1c\x9b)\xb5\x176gf\xe0\xc14<\xe7\xb2\x85\xaf\x9b@\x9a\xe4V\x94q\x03\xf3n\xa2\xe5\x84Y\xa3\x0b\x94w\xf5\x9f\xc9\xc7aa\x8d\x1b\xb2\xb0\xf98,l>\x0e\x0b\x9b\x8f\xc3\xc2\xe6\xe3\xb0\xb0\xf98,\xc8\xb2R\xfe\xc0\x05Yw!M,\xfc\x8fGw\x1fxf#\xcb\xe2\xb77\xb2l\xbe\xa4\x91\xe5\xf7\xe6\xf80\xff]:>\x04\x9d\x14\xee\x85*\xd9A\xc3\xe3\xbb8\xe3 B\x17\xf8\xb3\x06\xc5\x07\xa3\x98\x0c\x8a\x04d\xae\xd0\xc8\xed5\xae`Bb\xf7\x86$\\%j\xb5f\x16]Wj\xce\xa2\x90\xc5\xf9\xa9H&\xba\x1a\xc8\xdfm\xed,\x8d\xed\x9c\xb1Y\xca\xf2r[\xf4\xae\xad\xbd\xdbJ{R\xacx\x8379\xb0\xb6\xc8Q\xd8\xbfL\xe6\xb7\xceg\xbb\xa7\x04\x9b\x0d\x9d\xb5\xad\x06\xe2O\xfb\xe0\xbe\x84+\x0b]\xdb\x1c\xc3\xf4\xbc\x01\x14\xc5\xe27\xa6\xdb\xd4W\xb51\xb9favkH\xea(\xd7y\xdc\xb8;\xfan\x8c\xe1\xd6X\xee\x1f\xe0\x8e\xf3\xab\x18\x9b\x9a%\xbd\xaeaU@\x85Vi\xa3?\x00\xbbEV\x81]\xa3\xab\xc0\x8e\x11V@\xb0\xe1\xbc\x83\xcdkKS\xec\x96/\x05\x8a0+\x9d\x8c^\"\xa9I\x07\xa3\xd7\x82Jv0zm\xba\x86y\x01\xe9J\xb2\x83\x85lE\xe5w\xb3\x90]Q\xa5\xae\x16\xb25\x9e\x1b\x84\xd9\xcbgg\x87\xcd%9\x89^\xbb^-\xfe\xe01\xd7c1\xea ^o\xc7\x9f\xcd-\xdd\x16-\x11\xf59N\xd9\x9c\xc5y\x18D\x19\xb5T\\\xa4oi\xea\xff\xb2\xf7\xef\xebm\x1b\xc9\xa28\xfa\xffz\x8a\x12fN\x06\x1c\x93\xb0(\xdf\x99(>\x89-\xef8c\xc7\xde\x96\x9d\xcc\xda\x1ao} \xd0$\x11\x83\x00\x02\x80\x944\x89\xdfe?\xcbz\xb2\xdf\xd7\xd5\xdd\xb8\xf6\x0d\x94l\xcb\x19c\xd6r(\xa0\x80\xbeUW\xd7\xbd\xe6\x98\x04\x06I\xfc\"6/\xeci\x0d\x8eu*I\xc8\xe2\xf9\xd9\x91\xc0\x9f\x14\xfc\x96\xfeSg\x98)\xba\x9d\xb9\x07\xdf\xf7\x0d/\x1e\xa1\x15\xe6Cj\x16\xe5\xc2\x82\xb8t9u\x80W\xc5\xdf;\xbaT\xa7\x9c\xad\x1fG![\xbff\x88\xbf\x08\x040\xf4\x0fsC\xe8;y\\/dK\x1dgT\x9a^\x99\xaf\x94?\x06\x07\xdc\x17\xdfm\xca\xd5\xc1\x18\xe8\xed\x16\x1a\x823\xd2\xb9\xbc\xacL\xca\x02\xbd\x0e\xd57\xe8P\xcb\xba\xca4\xe7Ft\x1e/\xab;\x0d\x9dj\xbd\xf5\xd0g\xa7\xff\xa5J\x9b\xc8\xde8\xd6\xb9\\mM\xc3\x14\xaaU\xd9Zj\x868\x86\xb3\x1d=\xbd\\'Z\xd3\x11F%\xc3\xcc9\xdd\xf8s\xfc\xb9\x1ci\xbf\x99\xf5?\xc9R}\xbcy\xf5l\x80{SRo\xd8\xea\x13o\xf2\x98\xe5F\xa9\x19\xd5~\xef\xea\x9f\x17\xd6\x1d}\x9d\xbe#\xac\x83\xd6\xfds\x1a\xb8\\\xd2\xd7\xab\xcei\x1b\xd4/s3F\x077\x88zm\xc7\xe0<\x89\xd3\xb3\xe13\xca6\x1e\xfa\"\xd6\x93\xb8\x87\x93\xf8\x10!5\x0e\\\x81i\xe7\x1b\x01*=\xb0~\"V\xe5:~\x82AB\x98\x01\xe5\xb4\x92\xb4\xb4\x13\xb2ij\xff\xcf\x068\xaf\xb57pe\xf9\x12;X\xf5\x19\xa3E\xa4\xf4\xe71\x15\x17\xa6\x9a\xf8y@UE\xf1\xaeL3\n\xa8\x1b\xa0r8\x11\xf2u\xa6\xdeDa\x7f>\x0dl\xb7\xb5\xb9\xc2 \xfd\xd2\x9f\xe0'/a\x83@\xfe\xd4JE\xfd\xb1\x11\xb0\xda*Z\x04\xcc\x9aV\x8d!\x08h\xe3=\xf9\xf9b\x9b\xa5\xb1b\x98i\xa3\x8dq\x96/}\x16\x18'\xc6r\x8a\xf94\xb4\x08\x87S6\x14\xd9\xda\xd4\xae\xa9d\xf8|(^\x81r\xafqR\x11 \xdb\xf3\xb9\x0bV\xbd6\xbf\xb8\x1bfiF\x98f\xdc\xbf@?B\xaeoi\xab\xe9\xb48\xf3\x8aA\x02B\xea\xf8\x95\x81=`i=\xb4M\xd7\x0e\x14W\xd9\xf0o\x1b\x92\x1b\xc6\xfc\xbf)\x08d~\xee\xafII\xf2\x02}\xe6)#\xc99E\xd4t\xaa9^|\xdce9\xbf\xfaJ\x8c\x19\xd9'\xc5\x96B\x1e\xd4\xdd;\xa3\x9f@f\xbc\x01'\x14\x8fZ>\xf5\xea\xe9\x0bk\xf642\x1cf\x15\xd8`\x02\xf3g=\xcd\xea\x89\xb3:\xc8,\xd8\xa6\x86\x9fA\x07\xbd\x0c\xda+\x86\xfa\x12\\\x1aB\xde*+\xc4\x87 m\xbd\xfduE{\xe9\xa3\xef\x93\x82YWl\xf6\n\x03\xfd\xb2_\xda\xfb\x85O\xe0n\x18\xcd,.W\xb5\xdfd\xf8\x7fl\xd3\xbdK\xec\x81=$\xfb\xa7\xf8\x8fe:W{-\x01W\xc2\xee\xb4\x92\x98\x9d\x9d\xe3 \xd3\xef\"\xe6\x9e\x0e\xcb^\x0df\xa5\xa1\xd1\x13\x12\xacS:]j\xe2\xa03y\xc1\x8a\x04\xef\xe6\xa9\xa2 \xb8\xb84\xadZEt1\x9cc^\xdfV\xe9\xc3\xe8\xdea9\xa2\x1c\xb8\x01s\xfc%\xba\x8a\xb7\x84\xfb\x8c\xd9PD\xaf0*(i\x08gpf\x06\xe6[\xa9\x9a\x19\xf3\x1b\xf5\xce ^\x9a \x1e\x19\xb6\x05p\xdd\xe4% 54\x89\xb5\xf5|\xed\xba\xd4\"\x9d\x8a\xb9OM\x0c\x8bJ]~\x170M\xc4.H\x8dTp\xe7Q\x9au\x94\xd0iO\xaf\x96\x03\xd6^r9\xbd(t\xdal\xea\xbfMM\x97\xf2\xb2\xd4\x15\x84$\xb5\xef\x18\x8e\xae\xc2\x03R5\xe0\xd0f\xb8\x1f\xcf\x03\xf2\x92\xf87<\xeb=\xb0\x859G\xc9H\xc7'eC\xda\xd6&\x887\x1e\xee\xbd\x0c\xf8\xba\x9e\xdb$\xc0\xff4}\xaf\xde\xd2v\xbf\x91\x15_\xb3\xfa\x97\x1d\x81Ej|\x18\x90\x1e\x1fx\xe7\xab\x14\xf9R(K\xc7\xddz\xcc*\xc7\xdd\xf0\n\x1cw{\xe5\x95\x94\x94\xa3\x94\x94W\"\xbb\x97Wj\xe3\x82i$\xc0GS\xd6n\xc3\xea%\x1b\\\x04\x8b\xe4\xb9\x112\xad\x1dq\xd0\x15O\x0d\x19\x0dq\xc1\xf1\xe1\x10R]\xe2\x92\x8d\x88\xf4\xac\\\x00\x15\x0en^\x10\x13?\xd7\xf8\x1f3\xc7\x82\x19\xe8Y2\xce]\xf9\xfa\x82\x1c\xc2\xd8\xcb\xe0\xe4h\xce\xbd\xb6\x02\x81\xc7#C\xdffU\xa4\xba\x16\x8c\xaf\x94\x96M\xad\x17T\x9b{6`S\xaa\xcd\x7fK\x9b|$\xe06\x8a\x91*\x11\xbc\xc5mZm3\xe1\x1covw\xcf\xd1q\x02\xb9H\x9doj\x8a`\x94\xc1/D\n\x019\x06E\x0bp\xb1\xcc\xf4d\xca==\x18K\xca\xcbJDIH\xce_,\xdctd\xf2\x97\x8b\xa0\xf72\xaf\xa0{\x92\xbe\xd5\xf8uXy\xd1C\xc3crx\x15\x1d qA`/g\x1e\xda\x8a\xf1\xc1\xb7t\n\x18\x84\xb9C\xa23\x9d\xcf\x0dv\xba\xa9\x9c\xc7\xf7\xb4\x89\x84\x94\xf5\x8148\xd8P\x04\\1\x0e\xb6\x91KOY0\xaa\xd5\x14\x9e\xe1\xcbsX\xa4cPE\xdf7\x16\xc9WO\x02\xe3\x98\xacF\xdf?\xe8\xd4\x1e\xe9\x89\xcdy\xc46\xaa\xd5y\xc4\xe6\xd3\xe6_\xfb\xe7\xca\xbf\xbe\xf2\xb2M\xb1r\x9d\x9c\x14Y\x9a\x14\x04\xed\xca\x87\xa8\xd3WP3E\xde|\xd6^ev\x1c\xd2\x1a\xba\x9c\xed\xd4\\\xdf\x95\xf8C\xcca\xcf\xf3y\xc8\xe0\xd8T\xb6^hS0\x87R\xa0d\xe9\xc0\xe1!\x92\xd1t\xc1\xa2X\xc4\xe7*C\xdd!\xaa\xff\x12\xfa\xc17\xaf\x9eV\xb2\x9e\x9bu\x03\xa5(A\xd9b.\x03Vr\xeb\x15 \xa3\x9c\x04\xe5\x9bZ\x9f\xd1\x13\xe8t\x0c+\xfe\xd1\xaf\x9c\xd1[\xf6\x93\x8bS\xa7\x95\x84\xe1\x8b\"9\xa6@\xb09\x8b\xe5\xd4\x19\x89\xba\x06\xa2y\x99Lp\xee \xcd\xe6q\x1a\xbc\xc3\x12\xeey\x1a\x9f\x9e\xceK]\x08c\xdbF\xc4\xff\x92B3\x0b\x11\xf1sI\\\x94\xb1\xde\x89\xa9\xce\xc9\xf5\xcc\xa1\x8aD_\x9a\x03\xe4Z\xd69\x19\xb3\x1f\x07X\x15\xd9\xbd\xf7y\x9c\x05\xd0\xd29\xad\x88\x1f\x92\\b\xf53\xed\x19\xbb\xe0\xc9F\x98\xa1\xa0=\xc0\x9b\xd4\x17\xb2\xce\x1b\xd9\xc1\xbb\x12L{\x81\xcc\xc9N\xea\xd1\x86\\d\xfc(\xc3e\xae\xe9\xa2I\xfb\xe1\x8e\xc1\x81u\xe1\xe8G\x1d\x1aGm8\xf3\xa1M\xa0%Y^\xc6;gr\xb1\xa9\xa7\x06=*\x06W\x9c\xdb\xa1X\xa5\x9b8\xac\x08\xe1\x9b,\xf4K\xdb|\xac6\x15\xcd\xeb$\x0e\x9e\xd0\xf9\xa0tI\xea?\xff\xf8\xa3 E\x0fq\x0e\x81?\xdbO\xd9\xf1\xcd\x9f\xf3?\xda\x10aTd\xb1\x7f\xc11\xeb\xb1P\x7f\xb07\xe4\x0f\xa5c\xf8\xdcR\xb2\x8a\xe9\xd4\xc3\x0eM\xca\x9a\xd6\xf0\x06C=T\xd5\x8e\xe5\x93\xac\x7f\xd3\xafx=\x0b3?T\xcax=\xc7\x07\xfc\xc8\x12\x98\xa2\x87\x0c\x98\xf3\x00\xba\\<\xdfPi8\x14\xe4\xe9!\xf8\xde\xbau\xebI\x9a\xbb\x9b1\x14#\x98\x81\xef\xe5\x9d\x9b\xfa\x86B\xa8\n(S\xa1{cL\xa9\xb0\xa2\xa7+\xcf@$\xd7\x974\xafm\xfd\xf9\xea\x10\xf1\xca\xf4\xc7cSE\x97u\xfdb\x92\x96\x8f\xd3\x00I\x12\x86\x87k\xdf[\xd6\xef\x11\x9b\xf4\x1d\x175<\xfa.\x1a\xc0\xe75x\xe3\x98\xd0\xber\xda\xb7{n-\xd2VlO\x1c\xca\x9f\x92\xa4\x9c`\xe4\xd8[JZ\xb6'\xce#~\x13\xa3\xc24y\x85\x80\xeb\x94\x12\xd7 ,\x16\xea\x9c\x81\x8a\x8d\xfb=\x0b\xcf\xd2\xber\x0c\x87]wm\xa3)\x1c,\x0enk_W\xe8p\xf9\x0c\xc3\xe2\xc8\xe8\xf5%.\xa4\x95z\xa7\\\xe0l=8\x98\xe3\xcc\xc1\x90\xf7\xed y\xcb\xa2\x15\xb5\xef\x9a\x92x<\xa2\xe24\x1e\x06\xc7\\\xe0\x96\x8b\x82`1iMn'\xd0E\xaa\x1c\x99f\x96\xd3\x0fm\xe2\xf6\xd1\x18V\xda\xf4\x06v\xcc\xd7\xed>\xf3\xf5\xe6\xd53-\xdf5\xd4)TD&\xd2-\xa0\x1e\x8f%\xa3\xb7\xd2\xa7Xh\x8e\xe7\x98\xe4[\x92\x83\xd8O\xda1a\xf0\xcc\xc0Q\xb1\xcf\x16\x13\xf6\xeeN#+\xe9~1\xafR\x99\xef\xd85\xb6\x1dw\xec[8\xa8\xd1 \x8d!H\xe3S\xd6d5\xeb\x13z\x8f\x1fk\xban8h$\xd4.\xd1\xd5\xf5\xc7\xca}\x9cv\xea1)\xfd(.\x0cy=J\x8c\xa4\xfdP\xab\xf8\xd1Vo\xe8\x92\x85cX_e(S\xd5\xfe& kfc\xa7\xd1G\x8d\xe0\xba7\x8d\xaf\x81S\xf9\xf8_1\xaa\xed\x84_K\xdd\xf4\xb5\xca\xf7\xb6\n\x8e\xc1\x0d<\x04\xe1\x86\xb8]\x95\x99\xae\x03\x18.4\x9f>7\x0e\x8e183\xb80\xb0\xc8\x0c\x8e\xa5'4\x04\x17m\xf2x\x06\x06\xe6\x9c\xf3\xa7\xda\xcc\x89\xf4j\xca+\xba\x98\xb1\xf7\xf5|<\xd2\xcc\x871\xb4\xb2\xea\xd7\xb1MS\x11=\x96\xe7\x97 k\x10|\xed\x0c\xe6\xe6\x06\xd5\xe1-\x97\xf0\x85\x97\xeb?C\xbc{\xdd\xf4\x9f+\xa5\xfe\x13\x9f\xf4\xb4\x96\x91x\"S\x80\xaed\x9a\xd1\x0d\x7f\xd0\xd3\x8c\x16\xfcA\xaf\x8d\x98?\xe8iF\x03\xfe\xa0\x97\x1dy!\x1a\xdf\x7f\xd0}\x94Q\xf1e%\xb4\xa7h}\xec@\x84\xa2\x83\x8a\x9aU\xab\x8f\xafO\xdd\xda\xda\xd6T\xa9\x94\xa5&*\x99\xfd\xac\x99B\xb9\xb0Q\xbcEm\xc5\x9bE\ne\xac\xd0\\\xc7]\xbc\xc9\xe3!\x96-\x9eU\xb9\xad\xce\x90\xcb\x19\xc2LG\xce`!z\xe9\x12o\x93\xc7.\xe6\xe5\x17;5N\x99\xa3\x00\x95\xe4\x99;\x87+\xd1\x14\xca\xe7*\xe5s\xd5\xd4\xe3\x8c\xdc\x91\xc7\x1d\x8f\xd2\xbc\xe7\xf3\x04`\x9d\xe3\x17\xc9|\x7f\xbaT\xba\x86f\x9b\xb3\xa6\xabd\n\x0f\xc1Y\x95eV\xccn\xdeL\x13*Q\n\xbf\x06/JoV\xef9 \xab\xaa\xd7K\x8a\xab\xb4\xb1\xc5\x0d\\\xa8\x15\xa6m\xcb\x9b\xd2\xc6\x16\x08z\xf9K\x14\xc7\xafH@\xa2-\xd2\xb6\xc2\xc2\xec\xa6\x94\xd3\x85\xe2}\xf8\x12\x81\x88;\xb2p\xac\xc7uB`\xdb\xa5\x02\xddr\x95\x03\x96K\x1eZ'\xf3\xb1o/\xa1\xec\xd4\xbc\"[\xa7\xd8\xa9t\xce\x1b\xba\xe3\xf6\xe4\xd3\xed\xab\x9e\x1a\xb1d\x99W\xf8t.\xffM\xde\xe41\xa3Bu\xb1\x83j\xf2TqF^\xb0\xc9s\x92\x94OXj\x08s\x85\x93-%I{\xcc\xf9\x03\x7f\xbb\x1b,4\x97f\x05\xff\xc6f\x0c\x18\x9f\x88~\x16{Q\xf1\x93\xff\x93\xbbB\xfd\xca\x8a)0\xc4K\x1b\xaf\x88\xa3\x80\xd0M\xb2\xd2U\xc9m\xf9dlzy\xc5|\x13\x9fDw\xc3F \x87\xeb\xa4\xd5:\xea\n\xba@=dU\xbf\xac\x12\x92\xb1\x9d]\xb5\x89\x89\xf5\x0c\xf5\xb5\x00\xb5 \xcb\x17\xf3_\xad\x12\x99\x95\xfeR\x9b-F\\\x9d\xdd\xa7\xcdB\xd3~\xa7\xca[\x93\x9a\xdf\xa8\xf7\x9f6\x8bC\x0b\xdc\xc2& \x8c\xe7\xe8\xae\xbei\xe9\xa1!,\xf0\xe5\xcf|L\xa3m|\x0d*\xb2\xc5\x8d\xc5\xe5*5:\xf1\x89+\xc5@M\x816\xcf\xa2\x82\x9e\x8b\xb4ez\x98&c\xc8u9g\xc4\xc5\xd1\x8f\xc7j\xba%\xaf\xa3\x85\xa5\xad2\x98\xc1bTi \xf3Q\xad\x16\xdc\xb9\xb0\xba\xb8XJ\xd1*3\xa4\x05\x9a\xd0\x8b\x9e\x1e/\xb1\xac\x90\x05\x96\xd0+\xcd\xac\xd0\x1b\xaarE\x169@\x01\x83\xb9\xe9JY\xa17T\xdb\xc7\x08\xaa\x91\x8c\xd8\xe3F>D%d\x13\x8a\"3\xa6\xb5\xfd\x06\xa6\xbaB\xde\xab[\x0d\xaf\x8c\x9fR\xa8\xc9\x17p\x856D \xce\xfe^]8\xe9R\x96mYy\xe6\xcf\xc9\xb2-\xad\xe1\x9b\xaaj\xf8F\xaa\x1a\xbe\xbe\xaa\x86\xefFU\xc3\xb7P\xd5\xf0\x8d{5|Y \xcf\x82K\x05m\xe8@\x04\xcb~\x16%~\x0d\\\xfb\xa7\xe4\xd8\xafi\x88\xe0\x10\xee\x9cq\xe6\x8c\x1bPC%\x02J\x0d\xc2\x8e\xb2`\x15\xc5aN4\x944\x1d\xc6\xa9GC\xb8t\xdf\x9aC\xdf\x0c\x90/\xb0p\xb2\x8e%_\xb0\xc38\x0d\x8e\xce3?)\xb4Q\x14\x19?\xb8I\xf6,J\xdeE\x89fFCQ\x04\xd8Y\xf8qAX\n\xfeL\x0dO\xb9\xf4\x0d\x96\xfd\x8c\xfd\x0c\x1dk\x95\xa0[\x06jSes\xcd@\x1f\xf3\x1e\xeb@\x97\x0c\xd4\x04V\x05\x164\xa1\x1aJ1\x9cb\xab\xb7\x15\xb5r\xc8\xe7yz\xa6\x19\xdcY\x14R\xd2\xe0\x1c\xec\xeb\xbccH\xb4\\\x95\x0cjpo7\x85>\x14\x88\xed\x08\\\xab\xbf\xc4\x14\xcf&\xd8\xe7 r8t\xa9\x9aw5\x9d<\x8f\xa3\xe4\xdd\x0f\x83>\xa6\"6:\xad\xa3\xb6\x86rT\xbc\xc8HB \xf6\x91j\x9er\xa3\xf9@\x92JC'xg\xe2)\x1a\xe6{\xce'BcX\xab\x9d\x16y\xba\xfe\xf1\xd8\xfd\xbd\x1b\xcd\x87\x1a\x0f\xa7\x9e\x94\xf7\xe3k\x97\xd0\xb4/\xd4g*\xa1>S \xf5\x99J\xa8\xcfTB}6,GS\xe6vc\x94\xa9\xe4\xeef:\x97\xf3\x05~\xed^sY\xb96@&\xecg\x1f_\xd8\xd7\x9b\xe9\xbe\x08\xfb\xe2\xfap\xc2\xbeP\xa4\xaa\xe1r\xcbT\x05)\x87\xc3@R\x0dc\xc9\xb4\x07\xe9r\x19\x13d1\xd5\xa0L\x82O\x93\xd79\x15\xf8\xf1\xb8T\x03o8\xf0#? Hl\x00.8\xf0\xd19 6\xba|\xfb\x0b\xa3\xe1.\x1b\xa0<\x08\xadU\x12\xabjq\x8cz\x8e\xed\x10s\xea\x1a\x81\xad2q/+P\x8b\xef^\xb0 \xf5\x8b[\xc6\xef\xce+P\x8b\xef\x9e\xb6\xdd\xce*\xc6J\xc3z`\xb8\xbd)w\x02\x15\x9f\xcf\xbc\x90d9 \xfcRW=\xe0\x1c!\xb98\xa4\x06;F0}n\x8bG\x08c\xcak\xf1\x0e\xa1R\x8dn\xe7;\x84\xd0*\xe0^\xf0\x8f\xf0\xe9\xd2\x95\x9c|\x89\xa0~\x1c\xa7g\xaf\xf3\x8b\xa7\xe5\x8b\x8d\x06\x83_\xb3y\x1b\x98-\xe49\xeb0\xff\xfa\x11\x13?\xd5\xe0O\x11\x9c\xb0\xbd\xf94y\x99\xa7\xcb\x9c\x14\x1a,\xf9\x15\x0e\xe1\x9d\xd7P\xea\xa8A\x7fB\xd0\xa6\xeeF\x0d\xfb\na1\xdd\xb7,\xa3\xb7\xb8\x1e#\xc6 %Q\x9ai\xb5@\xcf\xe0\x10\x1e3#_\x15\x02\xae\xd3\x8f\xbd\xa9\xe1\xb3<\x0d7\x81\x1e\xfc7\xee\x8f\x8c\xa9G\x9eEE9r\x1f\x8f\xe1\xc4iT\xd5\xd5\xf5\xee \x1c\xc2\xb6F\x9bc\x1c\xba{<\x86G\x9a\x97\xfe\xddQl9c\xf8n\x0c/4\xca\xab\xef\x9b\xbd<:/ \xeaI\x8b\x91\xfbX\xd3\xcc\xcf\xc8\x04\xd9\xcd\xda\x0f\x0c\xb6YKX\x0d\xfc\x0b\x03\xe6\xf8\xa6\x83\xfc\x91A\x06,w\x9d\x1a\xee\xbf\x19\x9c\x8d\xf2\xf5\x1f\x0c\xd4F\xf9\xfa\xbf\x18(\xc7G\x1d\xe4_\x19d\xe5\xd5\xc1\xb2,h_\xf9?\x9dW\x8e\xf4I^\xfe\xd9ma\xb3^\xfb\xb96\x17\xca\xfff\xaf\x98\x14\xc2\x84\xf2/!\xcf\xe9S\xe3\x86\xda\xa5\xf7\x19f\x8fe)d\xd1\xc4\xf9-\xec\x9b\xdc\x95\xd0\x9d~\xef\x19\xee+\x1e\x9a\x97{\xad\xec>,F\x87\x838\x9c{\xd3\xb9p\xe4\xe8\xe0R\xf43\xf1\x8c\xa1$\xb6\x16R\x10\x1e\x04\xb4\x7f't\xdfI\xd2\x84\x02\xd8\xe69\xb1\x12\xe6\x9b\xaa\xdb*\xe7c}2R\xf9\xf6\\\x06\xe2\xc0\x0dx\x047\xc0\x91\xe9x\xdbP\xea\xd5\x8e\xc2\x99F\x03\xfe\xefZ\x01\xaa\xd4\x80\xaa\xa6\xe0\x9fZ-\xb1\xc0[\x94ngp\xaa\xeea\x83S\xd5\xfa\x98\xb4}K4\xa7w\xab\x84\xd3Z\x0f\xd7\xf0\x9f\xd1\x1c\xf6\xb53\x84\xca!W=M\xffm\xa7x8\x1f:\xfdC0\xb0R\x8d\xab\xeb\xe2\xbf\x1f\xc3c\xba!\x1f\xb3-\xfe\xc7\x1f\xcc\xff\xe4\xf0\xf0\x10\x1e\xd7\xce(\xea\\\x13\x06?\xe8J\x15u\xeb \xd3\xd5S\x15z-\x03\x18\xbaU'\xee\xed\xe9TC\xe8d\x13\x10\xa7~\x18%\xcb\x89\x9fDk_c\x1f\x19\x8d\xe1H\x9bX\xc8`%\x91\xb5\x8d\xea\xcd\xd3$\xcd\xd7\xbe\"\x07\x10&x\xfa\xc5\xcf\x93(Y\xce\xe0qM\"Fc\xf8\xd5\"\xcf\xd1\xb0\xfe4\xd89}\xa9\xca\xab\xc6Bcf\x10M\x83\xff\xb01G\xfc\xaaX\xd4\xd1h\x0c?\xd1y\xfc \xc3=/\x91\xb6E6,\xc1\xf3N\xc24(v\x9f\xd1\x0f\x86YO\xa2$\x84u\x9a\x13\x08EF\x9f+^\xd8\xd6\x0c\x0c\x1f\xb91\xd0\xd5\xd8\xe6\xa99\xeb\xcceq\xeb\xa7\xa6\x18\xa4\xc23u\x1b\xff[\xd7\x86}\xb0\xac\xc5L\xc4\x91\xf6\x0bJ\x8b\xd6O\xda\xe8X\xf6\xb4\x91c\xa7yj\xa87\xd4\x0f\xbaa\xd7R\xc4\x0c~\xb3:\x85yA\x10;\xf1\xa3\xe2Ef\xf0X\x03\xc5+x\xff\x03\xdd%uj\xb8\xa6\xbaL\xeb\xaa\xdb\xd2\x95I\xeb]\x89\xab#\xb9\xcf\xe0\xb9\x86mi*\x12f\xf0R\x0d\xb9H\xa4Ev\xc4e\xcdP5\xb4d\xda\xecE-\x15\x996\x7fQ\xe6\x97\xab\xe7\xdc\xb1\x93q\xe1\x86nr\x17\xe4P\xb1\xe1*l|\xae\xc1\xc1\xbf\xeap\xd0z2\x98M\xfeX\x0d \x1cV5Ly\xda\x91\x1bgB\x03Q\x98\xe5H\xda~\xf5\xda\x16\x15b\x85;\x12\xda\x91\xe31T\x1f\xd1\xe9!\x96\x84\xbb\x83\x91\x90}l\x06s\xafh\xdd\xd1\xacs\xff\xe5\x0b\xafw\xd3\xf0>\x05\xf9\xd9\xcf#\x8a\xf0?3\xed;\xffH\xef\x89a\x18Mx6\x8ca_8Z,HPF[\">\x85\x9d\x11\xdf\xa9\x9e\xe2}3\xfe}\xf5\x15\xbc\xa4\xff\xbc\xc2\x7fLtq\xa7cV((T4Z\xd5\xd8\xff\xd2\x9eo\xec\xa33x\xf5aq\xdf\x96\x98\xf0H\x16\xa6!\x9b\xc1\x13\xc5\xcc\xd7S\x7f\x15S\xfc\xbcRu\xbc\xa4\x12\xf9\xbcL&\xcb<\xddd(ys\xfd\x95\x91\xb3{.\xdeW\xf5\xe8\x17+\xc9Y{Z\xd9\xce\xe20\x92|\xd9\xb5\xad\xec=3(\xacvJn\x9a\xaa\x1f\xb5(k9 \xf6C\xd3wz4\x86\xa7W\xb5\x97\x85 \x1aT\xc1dCw\xf3.\xcd)]'\xaaey\xa6\x19\xe0\xcf\xba\xd6*\xb5\xf1\x0c\x9e\xa9g\xbaJ\xea\xab\x89*\x11\xcc\x90(\xfb\xa0\x8d\xfd\xb0>\xb7[l\xc4Ul\x98\x86-N\x9b#\xd2\x1aK\xb9\xf5a\x06o\xcc@\xfc\x90\xda\x8a\x80\xbf\x97\xfc\xfe\x934w\x19C\xa59\xfc\xfb\x8c\xb4\x95\xce\xdf~\x1b\xa9A\xe4\x86\xad\x19\xbcV\xbf\x82\\\xac\x89\x9a\x10\xf4\xa0\xf8\xdet\xdc\xfe\x1f\x1d\x06\x93J\x17>\x83\xef\xad1\xce@2vq\x1bz\xb9\xc9\x89\xcce\xa8\xca|'w\x19j\x9c\x1c8)\xad\x87y\xb5\x99d\xcf\xf8\xa6\xec?\xaaQ\x85J\x8a\x0b\x8fY\xbc\xba>5\xcc6\xa1\xf3B\xfa\x12Z\xd4\x9e1\xa5\x17\xd2B\xee\x85\xb4\xa8\xbd\x90\xee5S\x19-4\xeeF_b\x8b\xfe\x03\xdd\x8d\xac\xfc~\x86\xc4\xfb\xe7\xf6\x0e-\xe9\x10\x87\x16\xe6\xa6\xd4\xb6\x13\xa9\xa1}K_\xaa\x0d\xd6\xd039\xa7\x14,\\\x9d\x91-5X\x80`QQ\x95=\xd5\xf0\x0d\x0b\x845\xb9\x9ed\x08\xa5s= Y\xd7V\xe9\xd9\xb1\xa9{+\xfe1\x0b\x17\x94-\x03\xcd\xa3e\x94\xf8\xf1\x0b\x9bW0\x12I8\xa2X\xbd\xb1\x84C\xc8\xcc\xb3z\x81K\xc4\xd5\x1d\xc1&\x8fJ\xadU{\xce\x12(Tu`\xab\xae|_j\x8d\xf9\xa7\x9d\xc4\x0b|:\x9f\x1b\x03\xbf\xcf\xe4/\xbe4\x04\x9a\xf3\x1a'?n\xd6\xd9\xeb\x14\x811;\xc4\x07\xb7.\xd7Z\x01\xd6O\xe8\xfc\x8d\x06b\x8d\x16\xb0\xae*(\x05\xd1\x08 \xa7\xba\x1e\n^P\xc5\xb9\xa9?{f\xaf\xa6\xd3\x05>v\x0c\xd0\x1a\xc3r\xcd\xe3\xc8\xe3\xc6ig\xc3\xab\x92\xfb\xba\xabcc\xafX\xd2\x83\xad\xa8\x99],\x8a\xedn\xe9\xdd\xd5\xc8\"{\xfen=\xab\x93\\D\x8a\x02\x04\xef\xc7 :Qg\xdc\xff\xea+\xb8\xf0\x82t\x93\x94\xae\xaeos\xbdY\xbc&\xb93\xd0d\xcc\x1a\x1e\xe3!N\xd4\x941\x94\x98\xef\x97JMT\"\x89r\xec[\xe1^\x982\x89 \x81\xae\x13\x06\x17\xae\xc2\x01\x05z\xacEu\xd7\xac\xb8\xd2V\xc8\xc9\xb4\x08{\x85B\x87!N\xa1\xbb\xcfL\"D\xb0\xb3\x08q=\x03\x19>i\xa6\xb2\x01\xc5\xa6?\xa32\xa3_\xc4\x04q\xed.&hK:\x9b\xb8\x8fK\x1d\x1b<\xb3\x8e\xf4\xdd\xf7c\x94P\xded\x19\xc9\x1f\xf9\x05\x91%W\xd9\x99P-\x86\x13\xaa\xfa\xbb\xe3\xcf\xa0\xc4\xf1g\xaa\xad\x10\x91S_\x94\x16\xff\xb1\xd4H\xcd\xc0\x95\x034\x11\x89Dc`\x14\xf5\xe9\xc6I\xac\xe2PR\x844\xc6\xa1D\x08\xa6\x8fC\xf1\x11F\x1b?\x82u\xf1\xed\x84\xf7\x82w\xecq\x9d\xc6\xc4\x18\xe1AO\xd8\xb2\x99G\xe4\xc3\x9f\x04y3'\x838\x0d\xe8<\x9d\x9e\xb6\x9d\x9d\xa5@\x83\xcd_\xdazUU\x02\x06\x9d\x02J$`\xd0\x98\xa2\xb2\x06\xdf\xca\x9ao\xfbO\xfbXy\x80J\xd8\x1b\x0d\x0e\xb2,\x0d\x91|\x84Wy\x04^7v\x99\x9e\xaa\xcd\x80\x078\xe4\xe5R\xfa\x87[D\xcf\x84\xfb\xb2\xd3-\xea\x96\xd0\x8f\xd8\xe9\";=\xa2\x8f\x7fz\xf8\x98\xc1\xa63J\xf5q\xb2\xad*\xca\xd7\xe6\xa6>\xe6$\xed\xd27b\xa5\xdb\xe1#\xaf\xd2\xb3\xee\xbe\xe6\x83M\x87j*\xa4\x0c\x9d,\x81\xcc\xfb\xf1\x95~\\Z\x9bS\xd7F\xb3\xb4i\x1d\xbb\xe2P^\xe3R\xfd\xc2\xf2\xa5*c\xbc\xaeC\xa2f*\xeb\x93\x1a\xacU\xe3T\x0d\x96[\xc0\xc8\xeb2\xaa\xcb~\xf6\x06\xe3<\x89H\x8cN\xe5\x1f\xb2\x114Q\xb3\xa2\xa1\xeafZECK\x8f$e~qL~\xc3\xec\xb7\xa6\xcc\xa0\xdbF\x8d\xa8f\x9d\x9f1\x1c(\x881=\xbb\xcb\x93}\x85\xb3!\xee\xe4\x93\xa9$ \xc8\xb0\xad\x12\xd5Q\x84\x0cUT\xa5\xdeT\xb8\x8a\x9e\xa3\xcb\xa9BAy\xfe\xb3\x1f\xcb\xf4<\x9d\x04\x96\xef\xdb\x05\x10\xdf\xcb\xcf\x04\xf6\x99\xebu&\xbcJ\xcf\x0c\xc7\xc2\xed\xe9\x9f\xe2X`\x03\xb59\x19(B\xc8\xcf\x04\xe2Q|\xe8?C\xa6\x14\x1eR\xa63\xfd\xf1\xb8\xfa\xe1\xa2\x92\x91+\x1a\x87\x9d\x14\xd6\x94\x88o]#1ap\x9d\xbd\x1a}&H\xdbG\xcc?Q\x02\x13\n\xf0\xe0\xee\xfe\x9f#g \n\x9f\x98\x949\x1a\xc3\xa6O\xca\x15\x82z\x1fp\x91\xe6\xe0\xd2\xaf\xd1 \xaf$p^Bn\x8c\x13\xceR\xff\x16\xa31N\xf4\xfe\xd7\x10\xc07P|\x0d\xc1\x8d\x1b#\x88O\x82\xb7\xcd7O\x02\xf5\xc1B\xb7v\xc4O\xb2\xbe\xb2\x00ei\xa3\xc2 \xf0\xe3\x98k\x0d\xc8\x18N\xe8\xbboE\x11\x87\x18O\xe1\xc8Cs\x85\x1fG\xff\xae\xa5\x07c\x19\x07zE\x1e\xa1\xe3\xed{?\xbfG\xadBz\x865y^\x936\xef\xab\xfa\x1a\xf3$\xaai\x00\xd7X\xe2\xbe\xa3\xdfc\x7f.\xa2\x98PN\x03S-\n\xef%\xaf|\x0b)Z\x0dY E\xac\xce\x9c\xc07\xacVa\n7 \x82o\x0f\x99;n\xc2\xe2\xbbqs\xf39}\xcc\xd6JV]u\xcc4\x19=E\x17\xdd}\x1fC[u\x95\xb5\xcf\x98\x9c\xbf\x8a\x96\xab\x98\xce9\xaf[I$\xc1P\x1d ]\xc6\xff\xf5\xbb\xf7&\x0b\xfd\x92\\\xaf\xfe}\x02e\xdfV\x1f\x90\xc1vV%h\xe87\x14\xa9\x88\x0f\x15\xc3\xb4:.,0\x86\xc4\xc4\xb9\"\x9f\xeaj!&A\x1a\xaa\xca2\x8eQ/v%\xed\x89\xa1Nx\xc5yY57q\xd5^\x1dt]\x9a\x14Z\xd5M\xe71\x07r\xcc\x96i'\xcb\xf5\xc9\x01YYN\xda\xb4\xe4\xc8\xd1\xf5\xfa\x97\x15!qU\x04KG\xd0\xd5_i\xcc\x19\x96=\x80uD\xbf\xa0\xae{\xfa\x9er\x00\xc6M\xd4W\xc3\x99Tpr\xa7\xd7\xe6N\"\x1e9\xcf\xd2\xbc,Z\xc7S\x9f\xbd\x85\x06\xe7\x99\x903\xf8>N\xe7\xee y+[\x83\xf2\"\xc3\x91ST\xa7\xfc@\xc4\x8ad\xdfL\x83\x92\x94\x93\xa2\xcc\x89\xbf\xeeH\xeb\x1d\xf6'ZT\xf5v\xf7\x0e\x0f\xe1,J\xc2\xf4\xccK\xfcm\xb4\xf4\xcb4\xf7\xd6\xc5\xb1\xbf%\xb4\x0f#\xddC7\xefsV$.\x88\x82k\xa3\x87\x1e\xff\xda\x9bW\xcf8\xc61\x0e\xfe\xcd\xabgn\xae\x91\xe9C\x9e\x0c\xa4\x8b\xa6\xbeL\xef\x1dyX/W\xb8\xb6\xc1!8I\x9aP|\x8e\xbcUN(G\x9c\xd2\xdf\x05)\xbf+\xcb<\x9aoJ\xe2V\x9b\xcfa\xb2N\xa3\x1cq\xcd\x00\xd13\xb3\xfb\x1ec$\x9cq\x15\xd3;\x1a\xd7\xdd\x9d\xa7\xe1\x05\xe5\xd9H\x12>ZEq\xe8F\xc8\xa6\x05t\xeb\xba=\xc0\x9c\xac\xd3-\xa9\x01\x1b\x93\x95\x93m\xfa\xae1Y\xa9\xea\xe8}/E\xc9\xeb L\xc9\x95\xbfR1+R\x89Y\xbeJ\xcc\xda\xa8\xc4\xacB%f\xc5\xfcAOb\nx\xca\xc7\xbe\x1cUKZYU\x12B\x98>+\xe0?\x81`\x95\x8f\xc1\x97\x0bV\xd1u\x14\xacr.Xml\x05\xabt\xa8`\x95{\"x\\\x84\xe1\xfc\xc2B\x04\xad\x84\x0e\xde\xd5\\T\x88\xac\xc3\x85\xbc\xa0\xf5QT\xa8\xba'\x02\x10M\x90\xd5k\xcc\xed\xe2-\xe5\x9f{\xad\xbcg]\x14\xf1T\x8f\x18\xfb\xf0\xfa\"#\xac\xd7V\xdd\xace#\xca~\xe4i\\|\x17\x04$+\x7f@\xf5\xaf\x89\x9f30})\xe6v2\xb0\x8f\x11\xba\xedY\xa5@\xf4\x11To\xa4\xdd \x8c\xceO\xa6\xac\x08\xbad\xea4EZ9\xd1\xd3\xe5\xb4d\xde{j\x00\xe1>\xbb\x91BH\xaa\x17\xbd\x1f3\xabs\xafp4\xdd\xad\x96\x82X!\x15\xc4|;A\xacX\xa5\x9b8\xacX\"ka\xc7\xb4/\x1a>M\xdd\xc0@\xe4NH\xff\xb6(\xbf\xcf\xde\xaab\xdb8x\xfdw\x1bN\x84\xd6q\xb0\xeaO9\x14n\xc6\x0e(\xbb\xd7\x86\x97\x07\xbc\xf1\x17\x15\x0f;-\xfa\xe5J4D\x7f\xb6\x9f2D\xe1\xcf\xd9\x1f}\xdch/\xffG\x92\x06\xf5$\xc1F^d\x1e\x19\xd5z\xe9)C\xd2\xc3\x03=yH,\xbdN65\xac!\xa5,\xf3\xd3\xb0\xcc\x13\x8bl\x841\xefm\xd2\xc6-5p\xc8\xdc\\\x06\xa6\x0d]U=\xd6G\xd5l\xf9\x11Zi\xed\x8e1\x89\xdf\xa34$#7\xd5x>\xac\xb1\x98\x8f\x13\xd4d\xd3T\xd1\xc6w\x9d8\xda\x12\xb1\x86\xa6\xca6~\x1d\xbbj\n\"\x91m\xf5\xaf\xbe\x92\xdd\x16Q\xa4\xb27f\xb5\x84\xf7\xb2\xf5D\xdd\xf8)\x1cB\xd1\xac\xf6\xc7\xa6rIJv\x82>b\xe7)\x95p\xc5\xb0\xe9\xacJ\xcd6\xe229\xee\x0c\xd1+T\x1b\xcc\x98\xd9\xe0J\x9a\xb3q\x01\x10\x971O\x16w\x05x\xd5\x88_n\xcf\xb5)q]\xec\xcfI]3\xc4\xe4\x08\xd5i\x0e8b\xa3\xcc\xad\xcb\xa6\xa5\xad\x16\xc3\x89\xab&(L\xb0\x97\\1\xa2\xe065\xc4\xa6\xde\x7f\xc5\x0c\xe6\x1a\xc0\xc6:\x89t\x17\xfc\xe5 \x8eQ\xbeJ#]\xc6\xabA\xc8Q\xe3b\x94\xe8\x92\"Df\xa5\x9a~E\xb5\xd5^\xea`i\xeb|\x94\x1a^\xae\x99y@\x93\x03\xaa\x93y@CP\x18\xf7\xd8a\x11\xcc\xbcd\x8fk\xd0\x1c'\x8a0}U\xfe\xa5\xe1\xdb\xd4B\xc9(\\k\x86b\x0e{o0=i\xbb\xe8\xa8\xc1\xf2\x1d\xba\xb4+\x8dS\xb8\xe1\x88K\xed\x8eS\xa1\xf0\x84\xde\xe39wU\xcd;\xf4 \xd7&\x03\xbc\xa2~\xd8\x04\xbb9\x8f\x1b@]j\xfe\xa1;\x18G\xc9;\xcd<=\xc3\xc7un\x07\xdd\x8c\xb5<\x9bR\xa5gS\xa9b\xa5\x81\xb3\xd3I\xdf\xc3\xa9T{8\x89\x0bYg\xa5\xa7\x93\xb8\xb0|\xc9\xc9\xd4\x00\x15\x027\x18F\xed\x0c\xcepx\x08)<\xac\xf1\xfc\x94'#A'_G\xce\xb8\x80\x99y\xb9\xd0\xad$\x08a\xc5P\x96\xb8\x8e:[\xb1\x1c':6\x15\xd0\x1d\xf8\xb1\xd0\xa6mQ\xafkh`\x91h#\x13\xa1\x8du\x1aZ\x8b\x90iH\x8cC\xaaO%M8/\x0c:I\x803\x07]u\xce\x8c\xa2\xc6\xe1\xa1.m30\xbe\xa4\xabK\x9aa\xd9\x0f\xa5\xaa\xc9\xdc\x15\x0e\xae\xe5\x87\xc0\xfeT\x85\xfeI\xad\x84U\x14\x85n\x15\x83\xde!\xa1K\x8d\xe7;$u\xe9'C\xeaGX\xd6\x99\x83\x98\x85\x98U\x8a\x1a\xb9'-\xfb\xcf\xaf\x85\xa4\x16\xa7\xea\xa0\xdf\x9b\xd6\x03\xf8\x1c2\xb9\x84*w\xacP\xe5\x8e\x15\xaa\xdc\xb1B\x95;V\xa8r\xc7\n\xa5\xe6\x8b\x98?\x91Z\x10\xdcP\xd8\n\xc2\xcaV\x80\xbf\xa6\xb7z\x05\xa4\x17R\x8b\x03\xaa\x07Te\xa5\xc3\x8fo\\X\xd9\x1a\x17\x88\xc4\xb6 C<\xb3hkjo);O)\x0e\x8d}\x914\xc1'+\xf2N%$n\x90\xba<2)\xb9\x12\xe6\xeb\xd3oF\xfd\ns%\x92\xd1m\xf9\x99\x8b*\xec\xe3\xd2/uJ\xeb\xbcO\xb2\xbbK/\xae\xf7h\xd82\n\xb4\x9a\x11\xc8\xcf\x9c\\\xd1Z\xef6\xfa{Q6\x84\xf4\xe8\xa5\xb8\xa4\xc3q\xfa\xac\x1d\xfd\x94\x02\xbf\xe1\n\xdd\x94\xaeF\xb3\xca\x08-Z\xe0RK\x1d*3\x9aP\xfeB\x0d\xc3\xac%\xe6\x02d\xccbb\xe1\x9a\x13\"\xa0Y\xaf\xb8B8\x9d\x12t\x8b\x10v\x9a\xdau\x0dk\xd0\xd4.\xab\xfeYhj/\xf8\x0cVx\xa4\x06\x9dW\xa0\xf6\xf6\xb1S8\x84\x95\x17%\x0b\x92c\xaeS\x8d\"\xe1\x0c\x0ea\xc9\xc5!5\xd4\x11\x1c\x82\xcf8u&\xe2h\x93\xfa\x9d\xd7\xd0\xe4\xdc_g\xb1>\x07\xe0q\x0d\xced%\x0d\xec#8\x84\xadU'\xdeqH\xe1P\xc5\xe5Q%\xfcw\x0c~\x9d\x86$>b\xbd\xd6\x81\xbf`\xe06%\x80^2\xd0*.\xd3TL\xe75\x83\xb7Tp?\x17\x9b\x16i\x97'\xa1Q\xf4\xc8\xbaPP\xf1\x05\xb8g\xee\xc8$/>\x15+\x84\xc5\xb2x\xc7\x9c1<\x7f;\xe6\x8a\xe7\xe7~6r\x7f\x7f\xdfe3\xba\xd7\xafp\x08O\xb9\xc4\x87\x88\xe9\xf4>\xa0\x16\xf1\xeaP?4M=ma\x98#\x94\xe0\x99W`m\xa0hq1r\xbb0T\xccf@KR\x1e\xe3M\xb6AF\xee\xaf\"\xec\xd70\x9b&A2J\x82x\x13\x92W\xc4\x0f_$\xf1E\x8b\xcb\xec^\xf4\xd0\xa3\xc7\xcd\xaf\xf0\x10\xcaJy\x95\xf0;\xa7U\x9fj\xc5V\xce\x9f\xb9\x8d\xcc\x89\xcd\x151\xf5]L\xfb[\xfaI\x85\xe6\x8d9T\xd1^\x9c\xba\xbe\xe8\x01k\xda\xf7V~Q\xad\x1d\x9d\xf2\x90g\xfb\xacnQ\xb9\x14\x07\x95T\x0b\xd2\x9b\xebd\x0c\xcfu\xf3(\x99C\xcdi\xc4\x80\x7f\xc9\xa3\x92hg\xfc\xbd\xde\xfcq\x8e\xbe\xcc\x94v\x9d[\x04\x8a\x89K\xb0\xc0\x94\x1d\xa2l/+&\xf5\xd7\xbf\xe6d\xe1\x08\x97.\xda\xae\x8a\xebQ\xe0;\xddu?Y8\xf05/a\xdcF\x0bTeo\x1a\x16\xff\xd6\xbc\x9a\xb1p\x0d3\xbe&\x16\xaey\xe5\xda\xb8\xb8\xe6\x95\xf2\x1893\xa4\xe0\xd0[{<5%V\xba\xa4YK\\\xc8t\xc9\xd9IqiMKw*\xcd]\xaeQ\xf2)\xe3\xfe\x9aW\xdb\xa4\xc2h\x9by\xf68[(\x8f\x19\x17\x97,v\xbc~V+-(J_\xd6^b\x1c\xeb\xf0q\n1A3\x06A\x05\xe4\x1b\x92\xa2\xf7\xf9\x18\xde\xed\x98\xdc`\x07M>8p\x03\xdc\x0ds#\xd7l,'\xf4K\x9f\xb9\x85+\x03\xff\xafN\xdd>D\xd7\x1f]\xa1\x9a\x7f\xb0n\x7f\xe7}-[\x8bn\xab\xa7\xa7z\x93\xa1\xaa\xf1\x17\xba\x86E\xd5\x1f_\x94)l\xd8&T\xa7\xc4\x18\xce\xcc\xbb\xcdj\xacL\x9dWQ\xf3\xe6\xd0\x1b6Y\xd3\xcet\x84@2\xf1Q\"\x11\xd6\xa8\x19\xcc5[o\xe84\xbe\xb60q\x1b8\x1e\xf5\x94\xb4\xec\xd7|-\x04#E9\x9b\xee-\xef\x1da\xc7(\x88\xc4\xd5\xc7\xe4\xb7^\xd2\xb9\xe6\xd51\xb1\xcb\xf4>\x8a\xf5\x1e\xc3\\\x9b\x83q\xed\xc7\xb5\x83\x81\xc3\x9d=\n\xd0E\xa1 \xe1\xa8^ar\xa43\x1a\x83\x03l\xe9\xbc\xda\x06Uq\x9b?i:\xf1\x9d\x16\xc5+K\x89u\x9a}MV\xfc\xa6Z^S{\xb1c\xa2\xd0\xd5^D>T\x88\x02L\xb5\xfd\"\x0fIN\xc2\x91\x9bhV\x94\x1fB3\xf8I\xb1p\xd5\xd4\x1di\xa6\xee\x91n\xea\xb8h;\x83#\xeb\x99\xd3\xf7e4\xae\x04\xfc+\xb5w\x0e0r\x1e\xc3C8\xf6\xcaT\xc6\x85v\xa2W\xba\x97\xe1\xc0}i\"T\xc8\xb5i\x14<\xf4JpP\x06 :B\xad\xfe\x11,\x17\x064\xa4p\xa4\xad\x87Yo\xdf\x9fR\xe0\xaa\x92j\x95{\x1f\xbc\x94\x05i\xa5\xb7 \xd5fCF \x85u\xe8\xf7\xf7]s\x89\xcc\x9a\xd7TL6T\xffm\x9b\xd0\xea\xbf\xf8\xcdke\x13Z)sG\xacTQ%+UT\xc9J\x15U\xb2RE\x95\xacTQ%+\xa5Mh%lB+\x8c\xc8\xbf-\xb5\x04\xb1g\xbd/W\xe6\xa0\xf6\xedP\xf4]\x91no\xf5\xf1\x0dE[[C\xd1\x97(\x94\x8e\xd1\xca\x14\x85\xa2\xb7\x88d~^\x90\x90oq\x85X\x85\x91\"\x1bt\xdd\x7f\xd9\x04\x1fd\xf2\x12!)\x9c\x1bSk3\x99\xff|\xa9\x16b)\x10S\x91@\x94\x14\xa5\x9f\x04$]\x00\x0b<4\xebC\x12\x1e,\xf9$\x8aQ=\xa52\x8f\x89+\xf1R\x16\xc6g\x91\xc3\xa0y\xe56\xe6\xb5\xe6\xd5] \xca\x0cobydn\xf3R\x9cD\xd5\xe31~\xca\x0f\xbf+^\x93\xf3\xd2\xd5L,\xd7\x1bZ\xf7\xbc\xd3\xe3\x92\xf2\x07\xac\xaa\xbbN\x03!C\xafO\x1b\xa4r\x95\xd9\x02PN\x90\xec\x15\xd7\xea\x88W\x07a\xec\x942@\xb9)\x95\xbd$b\x7f^\xa2\xabWc\xd5\xb4\xb4d\xd6\xc1g\x16YB\xad\xccu\xac^\xc9&\x97$T\x12\x17\xabR\xc2\xf9|5\x98_\x9b;Xz\x8d\x87\xf0\xfb{\xd0\xba\x0fo\x06d>-\xdav\xa3\xd6nT\xbf\x85\xf5A\x06X\xd5\xe8\xc1\\\xfb\xf2\xa1\xa6\x8b\x92\xcf\xc7~I\xb0\xbe\xe8\xebhMt\"\xf4\xba\x9a\x04\x8d4$\xc9\xf5\xd5\xbc(\xc5\xa7\xcb\x92\x8aL\x0d7\xffo\xc3\x87\xe9_\xad \xf6\x9b\x91W\x92\xa2t\x93\x11\x05\xf6O\x1c>#\x93\xc7Q\x91\xa5\x05f\xe6w\xde\xd2\xe3\xe3\xa6_\x96~\xb0\xa2\x07\xb5xI\x05.\xbe%4,\xa1\xdd\xb7\xa4\xe0\xbd~5\xb4G\xec[\xf4h\x82\xd7\xb9\x9f\x14\x0b\x92\xcb\xba\xd6|\xa3\xd75\xeb\xcfI\xdf\xd0(\x8f\xe9*8\xf4\x98u Jx\x9c\xb9\xe9$\xa4[\xf9\xa2\xca\xb1Q\x92\xf3\xf2\xe6\xaa\\\xc7\x16\xban\x0c\xce\xe9\x1e\xf0\xc2\xcaV%;(\xa5\xc9\x0ed\x17K\x80pa\x84\xed\xca?\xb2\xebT\x9f\x94`n\xf1\x8938\x84\x93\x0b\xca\xd0\x15\x9byQ\xe6n\xea\xc5~Q>MBr\xfeb\xe1:7\x9d\x11\xdc\x80\xe9h\x0c\xa7o\xbd_\xd3(q\x9d\x99n\x9b\x8a\x0b\xed\xfc*D\xd5l\x08=\x13\xd4\xc9\xfdpdZv\xe0K\x7f^\x99{\xc8y\x99\xfbA\xf9\x84\xe7oz\x92\xa7k\xde\x8fF7\x98W\xc4\xc8=2\x18\x84\xe8\x85!<\xb43\xcc\xeaG\xe7\xf3\xdc\xc0 i\x9fR\x1aTy]\xd6\x99+\xe8\xc7%\xb7yB\x8b\x17\xf9\x8b\x8c$\x1c3/eIq|\xa3\xc6\x16\xaa\xfa\xec\x06\x07\\\xd8\xa9\x06\x8a\xb88We3hw>\x863\xfd\xa4\x83q\xe2\x9bYf`\x11 #\xff\xb5\x9aM\x91\xcbc\x06g\x83\xc7\xa2|\x81\xb3\xdb\x14\xf1\x94\xe3`)u\xb8\xce\xa8\xfa2\xe7< $%\x96\xd6\x86\xf9\xa6\x84\x8bt\x93\xc3\xd7r/\xda\x99f\x96k\xda\xe7\x06'\x84\xa2\x81\xdbN~\xc8x\xd7\x9b\x14\xe8_7\xb3\xd8\x8f\x92\x9b\x8d\xd9\xff\xc8\x036\xf0k\xc2\x88\xa7\x181\xcc\xe0\xe6\xff\x8d\xd6\xfe\x92\xfc\xebf\x0b\x87\x12\x8f\xbb\xfd\x14\xaeSl\x97\x8e\xd6\xb0\xd1\xa4\xf9\x0e8\xa8Fv\xc0\xd1+\xdb\xd7K\xed!\x80\xf9\x9ed\x9a\xcb\xe6\xb5\xf6\xcf\x7f\x89\xc2r5\x03g\xba\xbf\xff\xff\x93c\" \xe5W7\x94\x073\x1d\xbb\xa8\xd0\xc8\xf0\xb9\xf37a\x94v\xe6\xce\xea\xb8P\x9f\x8d\xf4\x8bzC\x117G\xaa\x1d\xb1tA\xd1h\x1c\xd7O=\x9d\x11]\xado\x96\xacL\xb5\x89\xe8\xc48\xcc\x7f\x88n\x1f\x04O\x17P~\xfc\xbdQ\x9e\xcbtE\xe22o\x0d\xee\xe4\xf5-\xec\xc3C(lw\x80z\xf9\xad\xcd\x7f\x91:\x9c\xf1M\x92\x93 ]&\xd1\xbfIX\x99\x89p\x8e\xbf\x16\x81A\x94\x89\x10A\xee~\x81\xd4\xdd\xd3E\x8a~\xca\xd9/4\xa4\xf8\xd3M\xe4\x06K\x91@\x99\x8a)\xad\x8d\xf7Z\xb7\xa5\xe5\xa5q\xa4\xe1\xc5Vg,\xc0\xb0Tz\x9e*]\xab\xacm\x916UH\x98Yu'\xcb`\x95\xef\xd0}p\xf7\x8e\xc4\x88\xa7\xd7}\xd6\xbe\x9eY\x1c\x95\xeeM\xf7\x9b\x7f\xdd|x\xf2\x7f\xbf}{\xe3\xdb\xd1\xcd\xe5\xc8[DqIr\x0b\x0fK\xfe!\xc7\xa9\xb2\x0dEkY\"\xdc\x8e\xfa\xba\xdd\xdf\xc8\xb6\xbf7\xbf\xf9\xd7\xcd\x1b\xac\x9b\x9c\x11 \xda\x0f\xfb\xf6\x1f\xc6\xaf\xfe\xeb\xa6\xddw7\xb6\xdf\xb5\x9e@\xec\xc0\x9er\\\x80\xc8E0\xef\xf0^$~\xf8\xbdn\xd6\xf8!\xcf\x9d\xd9\xed\x850JuM|\xf0-Li\x13\x0d]Gm\xcb\x9b\xbe\x85\x87\xed?g\xf0\xbb\xe4\xdcg\xb1[\x82\x83\xed?G\xbd\xad'a\x89\xfb\xa01\x1c\xca\xf4\xa6\x01\x1c\xc2IGeSg\xb2\xa5\x7fu\xe2\xac\xe9x\x17c4\x07\xbb\x0b8\x042\x86\xd4]\xd8\xb8\x13\xf3uR)\xeau!]\xec\x14wK\xd6^\xe4\x96\x94uq\x1e\xc5i\x11%\xcb\xd7\xfe\xd2\x81\x19l\xf8\xdd\x17\x19I\xea\xbb>\xbf{L\xe2E\x1b\xdeyM\xe4\xb9\xbe\xe5\x01\x81\xed\xa3\xf7\xfdH\xe2\xba2\x86TeR\x8eLI\xeaX\xfdq\xa4\xe8\xbd\xe7\xad\x81R\x1e\xdf\xa7\x88\x15O&\xf2\x9e\xd2\xad\x95\xbb\xc9\x18b\x85\x92\x0fK\x89\xc3\x0d\x88\xfa\xef\xa3b\xb69\x83us7n\x8c\xa1\xd0\xd9Y(J\xa4'%L@\xe7\xbe\x1dVP\x07\nM\xa1|\xb8l\xb9\xf0\xef\x0c\xe7 ov\xbb\x1aV\x8f\x109\x1d\xac\x9c\x057 ds\x0f7 \xab~ET\xe8\xc4\x80\x05\xec\xcd\x18\xb0\xeb\xc6\xf0kh\xd0\xa6\x0eN\xb4\xc7\xc3\x81\x02o\x91\xe6G~\xb0\xb2\xdb\x1e\xd9 yK\xf7_\xf7\xe4\xa42jfw\xaa\xf0/\xed\xedu\xfc%F\\\xfb\xfb\xaf\xa6o\xe9%\x12\xb6\xde\xfc\xfb^\xdd\xc0\xdf!'\x19\xf1\xd1vB\x99\xbaoVe\x99\x15\xb3\x9b7\x97Q\xb9\xda\xcc\xbd ]\xdf\xfc5M\x8a`\x15G\xc9;\x92\x977[\xf0\xdf6\xbe\xd4\xfc\xe8\xa34\xbb\xc8\xa3\xe5\xaa\x047\x18\xc1\xc1\xfe\xf4\xf6\xe4`\x7fzg\x0c?\xa6 \x1cW\x1f\xf3\x9a\xef<\x8b\x02\x92\x14$\x84M\x12\x92\x1c\xca\x15\x81\xe7O_\x8b\xdbM\xd0\x9b\xd5od\x06X\xd4c3\xb3\x842\x7frw\xdeq\xe3\x08Ab\xaf\x12$\xc8\x08\xcaU\x9e\x9e\xa1\x9d\xe1\xf5EF\x8e\xf2<\xcd]\x87\x9cgL\xdd\xe6\x03\x7fI\x92\"y\x8a(]\x8e*^\xa3\x0fr\xd0\x05\x81\x1b]0\xe1\xa9@\xc4\xc1\xf4w(\xfb\x1f\xca\x19\xf7A\xa9~\xc3\xce\x98\x8fX\x16\xf4\xfe\xc4@S\x9d\x97Vg\xde!\xc5\x1b\xde\x97\xca\x1e\xb1O\xb1\xa9\xfd*z\xc7|\x8d\xa5\x00\xaa\x97\xd1\x0d\xe3[\x98~=\xa2''\x0b]qS\xb8q\x88F\xf8\x12\xbe\xfd\xf6\x10\xa6c:\xc4\xc3\xee\x18E\x8b\xf4P\xe2o\xb4\x1a\x1f\x86\xed5cxw:2\xe1\x82\xc2\xbb)w\xc9\xc8+\xd3g\xe9\x99\xa8D;\xac\x0f\x1f\xdd\x99\xed3,\xfe\xba\xa82\x1b\xd0_\xf7F\x7f\x8e\x82\xaf\xdb/\x05f\xd4\x05f\x84\x17\xfd\x80h8\x81\xe0\xb9\xaa\x8a\xf6\xa8\xe2\xa8\x8e\xceKM1\xef\xb4[\xb2;U\x97\xecN?\xbeZ\x88 t\x9d\xb1\x98-\x8b\xe6z\xddReh>t\xb7Jy\xa7\xd3Sr^\x92\xa4\xe8\x1d\xf6\xef\x99\xe7\xd4\x0c\x9c1\xf0\xa3)1\xd7\xda\x8e\xae\x1bB=e\x9ecG\xeb\xac\xbc0\x94\x89\xef\xc5\xd4\x8a*\xf1\x98S\xb5~'\x12\xfa\xc9\x88\xeb'\xafU\xc5x\xd5\xc8m\xf0\x10\xb1B\x85\x88Q\xc1\xbf(9\xea\x98\xf9S}\x02\xfb\xfc\x0b\x8f\xa3\x02)\x9d\x14\xa1\xf9\xb9\x8f4\x0f{\x8d\xda-\xf4\xf6\xbb\x0c\xaew\xf4\xa9-\xd4\xa7\xad\x9c\"\x0e\x9d\x96\xe9r\xa9\x11>B\xdesY\xfa\xe7\x9e\xeb\x86\xba\xbfQ\x92mJi#\xcc\x04\xee\x04+\x12\xbc\x9b\xa7\xe7\x12MY\xa3\x0b\xfd\x87\xf8\x1e\x1e!\xa8t\x90(tj^\xc9\xac\x9c\x8c\\Q\xc1\xda\xe3\x1f6\x1e\xb7\xa318\xc7$ \x01'\x95mL\xa7\xe7#\xf4Y\x95\xe8\xff\xa49\xa1\xe5&\x93Pj2Q\x94\x93T\xa4\x88\xbeu\xd0\xcb\x0b\xf0%\x17\xb4\xdc\xb0ag\xd4\xb0\xcd\x05-v\xe0.f\x82\xa1\xeeG_}\xd5\xfa[-F$&\x1bD\xc3\x02\x90TC\x18\xb9\x89'$\xc618\xcc9\x03\xad\xcb\x88\x13\xcc\xbaLD^\xc2\x84\xd5PB\x91\xbfOG\x9a\x96\x14\xebCK\\\xdbai\xb2\xad\x94\xc8y\xad\xc2W\x03\xa5\xd6\x9af\x1fS\x1aX\xc9\xb4\x9b\x1a\x94\x8a\xc4\xda\x05IxT6\xce\x15.\x04N\x1e\xe5\xe4\xdct\x0c\xfe\x186*S\x10\xe6\xf3\xe6\xd5*X\xcdA\x8b\x8c\x05\xc2\x00c\x9ci\xc6KX\xea\xf6\x13\x10u M\xd3\xc8\xca\xb5WHg\\\x18\xb5r\"\x19C\xae\x98\xdbF\xf4\"\x96\xf0`k!\x0e\xb3\xaf\xbe\x02\x07\xb5Y\xb8\xdf\xd2z\xa1t\xfa$\xc1\x9a\xe9\xa2\x96\x01\xcf\xc3\xa88>\xf3\x97K\x92\x1f\xa0N\xd6\x87\xaa\x8d\xf3I\x9d\xf9\xf6\x8f?\xd8]L\xcf\xcbi\x11\x8f\xed\xad\xefW w\xabT\x8aj\x88\xc67f\xd8\x0b\x9e=\xea\xab\xaf\xc0m\xf4A\xd1\x83\xddZ\xaa+`\xef \x07\xb0\x1e}tY8h\xb2Y\xcfI\xfe\x9a\xeb\xc7F\xae\xaf\x88\x93\xeb{q\xc90\xdd\x1d}\x9c|\xedU\x12\x86_\xa28~E\x02\x12m\x91;\x91\xd5\xdc\xb7\xce\xc5Ps\xea\x9fxw\x99R\x88G\x97\xda\x83Hd\xa2\x02 \x1b\xee\x84\x1cf*3\x9a\xcd\xeeJ\xab\xed\xe4F\xad|\xd4#q\xa8\x07,%\xf5h\xc4Q=\xd9\xac\x91w\xf5\x81\xe5b\x88:\xf7u\xad \x17\xcd\xc6{53lJoP\x18\x86\xd2\xd84\x1b\x8c\x03\xa1\xff\x9d\x893#'\xbfm\xa2\x9c\x84\x8cT\xe1\xae\xf2\xd9\x19L\xf72\xba\x89x\x8b(/J\xb7\xb3\x01\xb1\x90e\xc1?+jZ\xdam\xc7bTe\xd1\xee\xee\xb4\xfe\x86lo<\x99\x18\xf4\x01\xbc\x05\xec\xce+\xc3q\x9fX\xee\x8f|@V\x8e\xb4\x865\x98\xcb#.?sm\xaf\x9e\xd7 Z{\xfe\xa6%\xaa\x0b\x95\xb7\x1e#\xad\xe9M`Mo\xc2\xea\xb3\xe6\n\x0f\x85\x91\xde`\x95\x07cj\x11\xafX\xa5gGB\xdde(\xef\xc0\xa0\x1f\xa5\xebu\x9a\xd8\xbcs\x81^\xd9\xce\x8fE\x9a\xb0\xcc\xe7O\xd2|m*)\x9b\xbb\xcc\x98\xfc=\x0b\xaaQ\xc2\x9e\n\xc7\n\xc6n\xa8\x01\xcf\xe0\xb0\xc9\xa2\x9c\x9a\x0b\x98\xceM\xf6\xac\xb6\xc1\xc9`\x15Y$Zk6\xd4\xf6#\x83\x95)\xa8\xec3\x85W\x15S\x10\xd8\xea\x06\x06\xbbP\xd0\xf4\x8f\xa2\x9fh\xa4\xf3\xc1{\xf4\x135\xcd$E\xd9\xc8\\hot\x92\x91I\xbbwk\xf3\x93\xa1\xf4X\xc3\xc2\xa3\xc9\x05\x04\x83\x8b\xb65\x8dL\x81\x12R\x97\xe1\xe4\x88\xe1\xafm\x0d\x8ds\x06nSC\xe3\xb8\xb13\xb8\"\xddT&\xa4 \xde\x94!MEC\n-\x93\x12P\x89^\xfd\x81\xef\xea]\xb9H\xf3\xb5\xaf\xed\xe5\x0b8\x04\xf4\x81^!7Rv\x18\x11\xed\x86x \x87\xf0\x82\xbdP\x1a\x10\xf45%\x00\xb47\x8f\xfd\xd2wL5\xf8\x9eS\xe8'\x15t\x94\xd4\xa1\xe5\xea\x97\x9e\xd6\xc3\xae\x19\x0e5\xf8\xaf\xa2\xf3(\x0cD%Y\x17T\x16\xc0\x81t\xab\xc95\xaf\x9f\xe0\x10\xde\xc1Cx\xd7\xe5\xa1\x1cM$\xe7+8\xc4\xc0GW\xd4\xa2\xe8\x12\xf0\x91[Vy{\x95_y\x0c\x87\xb0n~e\xe0\xfb\xcf,\x12Y\xbd\xb1\x80\xf9\xcd\x02\xe6 \x1c\xc2\xdeT\xab)h0z\xcc\xe9\xfeY\x8dOl=:\xec\xe03:v\xda\xc1gM\xbew\x8c\xfd\xe1\xb7\x84(\x87\x86\xe37\xf5\xf7\x04h\xe3koh\x9bo\xea\xf0e\xda\x03\xec\xf5~\x1b\x8e\xf5\xed\xb7\xfa[U\x1b\xe3f\xccB\xd9\x15G\xb1\x02FWL\xd6z\xa4\xe8\xf3\xf6\xb3\xdc\xfbH\x17&\xa8\xb0\x99\xd9\xba$4\xdf\x8c\x12\xa7\xe5\xde }\xe9\ns\xf8\x0fq&\xba\nC\xffSx\xd82#\xd2\x06\xa1\xa2\x070\xeb=T\xf6\xa6=\xb9\xf8au\xc6\x00VF]\xddC\xabT\x0dA\x1ac\xbe\x10\xdaS\xf5\xd9\xa7\xea\xaf\xf3?\xff\xef\xefN\xc3\x8f\xee*f\xb39Y\x9a:\xe9cx9\x86_Q\x0fu\xe2\xc0\x0d\xf8\x15n\x80\xf3\xd6\x19\xc3w\x18\xc2\xb7\xf3\xac\xb5z\x92\xa7\xd9\x84\x9fg\xca)p\xffJ\x1b\x1d\x833\xd2o\xb5\x1d\xa7 $YN\x02\xbfT\xad\xcf\xfbq}\x96\xd6\xdb\xbf\xf1\x16\xc6\x846\xfe\xfep\xab\x15i\x9c\xe4\\g\xdcb\xdbq\xba\xc6\xb0\xa4}~%\x94\xe3\xaf\xae4G\xfa\xb1\x89\x9dgnW\x14o&\x14\x83\x0c\xeeR\xe7\xff\xb0H\xa9~\xfe\xb3\x1f\xeb\xcb\xb0\xc8g\xa8N\xa0\xbf\xa63\xf2X\xcc\xc8\xe3\xff\xf8\x19\xb9\xc2\x1a+;8wV\xdb\xa9\xe1\xe2\xa9!\xca\xe7Zz\xcc\xeb\x9f\xc8\xbei\xc2\x8a\xbd3\xd4\x0b\xc3\x1f\x7f\xc0\xde\x13\xb3$\xab\xed\x87\xca\xf9\x85\xb2+\xea\xb5\x14\xbdw\xbe\x89\xbe\xfdn\xebG1\xa6\xe2@V\xb4\xf8\xe6f\xf4-=\xe6\xe0\x06\xbc\xb1\x88\x8eo^\xc2|\xaa\xc1\x8f\xda7\x8f\x07\xf5\x8eU\xc9\xcd\xde\x8fZ3\xd5\xe0\x94~\xfb0s&\xd82\xbbi\xe3*A6i\x8d9\xfbM9\x98\xd7t,{\xcf\xb5'Z+\xcb\x13\xc6\xdc\xce\x0cY\xed*)\x07\xcb\xebP\x94\x8a\xcc\xd3\xa3\xad$o\xd0uX\xebM\xb8N\xf3'5\x84`\xabf\xf0T\x0d\xd4\xd8Z\xf2\xedVK\x9d\x8c\xd5\xa2\x14\x0f&\xd0p\xb9m\x83\xcfXx\xbd%\xef\xbb\xabV\x84\xd0\xc5+fB\xccc\x7f\xea\x1a\x12\xf5\\^(\x11\x087\xc3\x0b\x0d\xc5:\xd2-\xab\xf5\xba\xd5\x0e\x96\xdd\xba\x88\x06\xa4\xe0\x0e\xd9\x9a\xacVvZ\x1f{\x8d\x8f\x98\xb3\x8e\xd6A\xb3*\xa2\xf6\x8d<\x89\xa5\x84H\xefX\x01G\x816M\x1d\x8en\x9a\x84K\xda\xac\xa9\xc9\xa9\xec\xe0\xc7\xa4,\xa3d\xf9$\xcd\xdd\xa0'g4\x183\xcdD\xd4>k3\xf8\x89\xb96PY\xf5'\xe4U\xd4\xaf %\xa7~\xf6\xae\xca\x89\xf9\xfa\x97R T\xaeT\x81\xca\x95*P\xb9R\x05*W\xaa`\x98+U\xe0\x16\x8d\x8e\x06jO\xe2\xe0\xe3\xfb?-l\xfd\x9f\xbe\x04\x98\x0b@\xfb\x00\xf38\n\xde}j\x87\x17k?$R[?4goevS\xc30\xcb\xe0\x1aU\xferma\xe2m\xfd8\xe2\x85\x1e\xfcu\xe1\x9e\xa4c\xf0\x91\x02UO\xbe'\x8b4'\xfcp\x12\x00\xa8\xb7\xe3\xb3\xe4\xa5 \x7f\xca|::7\xdd\xd1\x18\x12\x8f\xf0?4\xc7\x82\x18\xb4\xf6\x04\xce\xf0\xf4\xd5\x9c\xa3kn\xe1\xe8\xfb\xec\x02\x12*\x837\xda\xcb<\x0d7\xc1\xb0\xb8\xfe\xca\xdb\x8f\x8d\\\x92r\x80\x7f\x94\x19\xc9O\x04 \xae^\xf5\x1a\xeb\xf8\xdb?i,\xbf)\xf6y\xce\xa2\xabme\x93y\x99\x00G)\x10\xe1G\xfc\xd8f\xa9\xa6\xae\xdb\xb1\x8d\x19X\xee\xab\xb2\xc6H+\xa0I\xd3\xc9\xf8\xaat2\x1bU:\x99B\x95N&\xe6\x0f\xe4\x15\xd0Z\xb9c\xaeY\xc6\x98\xfeG\x84\x1e\xfa/\x0f\x1e<\x90 \xe9\"M\xcac\xa6\xcfv\xa2\xd2\x8f\xa3\xa0\x1b\xa2\xd3\xfa34\xd2'\x03\xe3\x00m\x1a!)\x83\xd6\xab\xbb\xa4\xf6\x93\xee\x94\x1fc\xc72\x03\xaf\x18\x02#\xff\xdb\xe9\xd1\x8e\xa5\x9b\xc0L\xb9`\x00\xf5\x82\x81\xfeEP\xb1\x08\xc62@\xc0\x19\x04:\xac\xb6\x17\xd1\xc8u\xc4\xd6V\xf9\x05C#\x94\x06\x9ae\xe1wVyC\x87\xd0\xf2\xfe\xeb\xe39\x01\xf46&C>\x06\x90\xb7yz\xaaI\xca\x00\x9c>\xff\xc0\xcb\xa9\xea\xe3\xe4\x8dI\x06@\xde\x85\xdd\x86;$\xd3\xc0\xd0.M\xf2\xf4l\xd7^\xed\xd2\\\x90\xc6\xfa\x05\xb8l\x92\x02\xd8\xb1\xddV6\x82\x8f\xdf<\xf3\x1a\x1a\x90\x05\xa1\xf4HR\xe6\x17\xb2\x12\xb9&\xdd\xb1\xf0\x01\xee\xc8?d\x0c\x07\x06\xbf%\x10\xee\xbb'\xfb\x9ax\x10q\xa1\x0b\xef\xc9\xd4\xa2\xda\xcf\x9e$\x1f\x83\x1b\x8d\xaa<\x81\xeaL\xd5\xe2\x12N\xbc\x91\xd7\xf1\x19\x7f;\x12N\xb4\x1dOr\xee=\x02\xb3\xc6S\xa3G\x89\xb86\xb2\xa6Z\x0e\xec\xfa\xee\x9a\xd8W\x8b\xbd\x0c\xe2HJ\xb5`\x97\xf0\x0f\x10\xd7P|\x06\xd6lz \x13\x94\xb8vl:\x92(\xa3?]o|^Fb\xa39H\x13\x9b\xf6)\x97\x80\xb6CGx\xcb\x991\x95\xbe\x83\xa6D\x83\x97\xa0\x80\xe5\xdcb\xa6\x1f\x94F\xfdX\xc3t\x93CHS\xbd\x83\x94c\xeb\x88?x\xcbP\x82\xba)\n\x85x\xf7\xba\x89B\x9fT\x83\x19\xc8\x04\x1e* \xb9\x81\x10xP\xdc\xf93\xa8/\x1b\xfc\xbeDK\xd9g\xf9m#5m$\x90k\xaa/\x19\"m0I\x83\x84Q\x99\xe6F\x0d#SF\x92<\xb7P\\2md\xec_\xa4\x9b\xd2\x02\xbf\xb3p\xb9#\xcc \x884\xdcH\x18\xe55\xf8\xf3\xd5\x07\x84\xcaL\x04\x82gv\x8a\x8c\x04\xe6\xe1\x84W9\x9c+\xeb<\xf3\x0b\x93#\xc8h\xa7tj\xb6\xfc\xfc\xa2\xcdL\xeb\x93\xa7C+\xcc\x19gA>\x05\x0c?u\xc7;\x9e\x95\xa5\xe1h\x14\xec}\xd9<\xa2\x94V\xea\x9d\xf6jo\x9f\xaa\x8f\x9f\xf7c,Mgh\x86\xe9\x90\xf4\xa7\x87\xd031\x7f\x1fVg\xaf\xe9+\xcd\x99\x0fx\x08+\xb7\x03\xc5\x1c\xc3\x1a\xae_\x02\x16Co\xc4\xcd\xcc/W\xf8\xbe\xb2\x1f\xc5\xda\x8f\xe3F-F\xbf\x84\xee\xeb\x0d\x7fW\xf5gt\xce\xebFw\xff\xb3UT\x92\xe3\xcc\x0f\x98k;\x99\xe0\n\xabw\x95U\x15Gi\xaa\x01>\xb05)\n\x7fI\xb4\x07\x8b\x16]\x8cC\xc2\x8a\xa0\x93\x90\x04)3\x91;3p\xb0\x12\x8aah\xc1&/\xd0\xdc\x94\xa5QR*\xb9\x1f\xd9\xd8\xb0\xb6\xb5\x8e\xe6i\xaa(W\x07\x7f\xe2\xcd\xa3$t\x19:\xe4R\xbb\xb6\xf3\xe3f\x9dA\x99\x02\x1d\n\xc5\x96\xbc\xd6U\x88\x1fm\xb24\xd4\x04\xb6\x13m\x91C\xe5\xbc\x8c\x8f\x92ZtwJ\x8e%h\x9fEE\xe9E\x05\xfd\x8f\xdb\xd9\x0c\xf6\x9bI\xb2\x97\xb8\x9f\xb0\xc7v\xd5%>\xc4\xd2\x804\xc8!\xfa\xe3&\xe8\xe5\x91c\xcc\xa4\xdd\xa7\xd3\xa4Z\xc6\xd6\xe7v\xde\x19\x9f\x90\x90Z\x13I\x0c\x0fB\xc4\xfd\xc8$\xcd~3\xff\x99 \xd5\x95\xd2\xa86\xd6Z\xd1\xab\xf6+\x06\xda%\xd3\xd6\xad\x94\xda:\x17\xd3k9\xce\x88W\xa4t\xc0\xb1\xb1\x1d \x11\xfcd\xff\xadW\xa6o\xe8va\xf5\x8a\xe0\x06\x10\xaf\x88\xa3\x80\xb8\xd3N\xc7\x04-\x81^\x1d10\xa7\xccm\xf2\xa4-\xa51\xfb\xc2\x17\xbd.\xbf,\xf5\xbaA\x95\xbb\xefO\xa3\xe1\xfd\xe2\xa0jQ\x01\xe9\x12>\x87\xe2\x13u\x12O\xdc\n\xd7\xd0\x93\xb0\xca\x92\xf58\n\x9f\xa7\x9bD\x16Td\xab$\xaf\x95\xe3\xcdl\x1fE\x95\xce\xa837\n\xf0*?R\x7f\xb2\xda\xf3!;J>`\xea/\xd2\x1bT\xfbN\x9d\xe6\xa9s\xbf*\x9d\xcf+)0\x9dH\x13G\xa4\xc3\xbf\xc4\xf8?\x81\xb9\xa39\x04\x93\xb5\xa3\xe2\"M\xa6\x0e\xec\xaeV%\xddv\xb3\xda\x89\x89\x82^\xc8&\x8edR^dD\xb0\xb7\xc8f\xba ?\xfe\xa5\x9f\xd1\xe9\x11\x0b4\xd6\xec\xd4\x03s\xcd\xf4\x9c\xf5J\xab\xf7\xd5\xc4\x85\xa9\x06SZp6\xe22\xe9fR\xe6C`\xa5\x953\xe8\xdb\xf8\xa05\x81\x9bR\x8fm\x80\xaeE}\xc7\xda\xe9z\xa5\xdbB\xcf\x98I\x12@\x8fzU\xa9\xf9\x08\x93^~\x93\xe6\x16cI\xb5co\x91\xa7\xeb\x1f\x8fG\xee\x89C\x0f\xb5(@.\xff\xe6\xafE\x9a8o\x1b\x9c\xe3\xf8\xday:\xd3\x1e\xbd\x10!\x06\xcf\xa2\xe4\x9d&5\xfcug\x10\x13\xf7\xb6* \xfdg\xc9\x18^\x05?\x98H\xf9\xc1\xa8\xe2\x07\x93\x11\xe3|\xf6\xbf\x86\x0d|\x03\xc9\xd7\xb0\xa1\xfc`t\xb2i\xf3\x83\x1b ?(\xf8\xcd\x0f\xc5\x08F#M\x12i\xcc\xb2\xf8\xda_\xa2\x05\x17u1\xa7\x8d\x1bLx\xa5\xccn\xa1X,\xb8B\xe6\xad\xd9\xb2\xc5i\xaf3:5\x98\xb1\x96\xc7\x003\xfd)\xf2F\xb7\x87\xa8\xe6G\xe87^d\xd7\xb9\x87\x9f\x80c\x1a\x14\xadf\xed\xf4\x91\x0fq\xfaH\x07\xa4\xcad eK\x7f\xb9$aE\xb8\x0b]\xc6G\xcc\\lv 11\x0f\xf6\x8aB;\xee*\xdd\x92|\x1b\x913S\x8d\xc1\x17\x1c\xceA\xa1p\xb0\xf56\xad\xad\xb7U(\x9d6\xaa\x1e\xf8$\x9f4z\xe8/\x0bg\x0c\xa5\xc1Y\x98y\xcf\x08\xa7\x92\x08\x1dI\x8c\xb6\xe2\x9dye\xa86M\xd5OT\xc2*_\xb8\x84\x9f\x05\xec\xe4\xb6\x00\xf5(sF\x1d\xe8\x9cl\xd4\xee\n\x00=;F\xf7jbPL\xd9\x95\xe6\"\xe9}\xd3\x85\xef\xaa3A\xa7\x87\x1b\x0e\xf3\xa2S\xcd\x89o\x9a\x90\xda\xef\xc1\xe0\x93j\xf4}\x00\xd6\xc3t\x00\xab\x0f-\x0bN\x992\x86PG\x06\xc4U\xa7\xeb7\xc32b\xb36d\xb0\x15\x17\xf33\x8b, \xe9N1$G\x05\xce\xde%\x0d/\xad\xc6\x06\x1e\xc3\xc6\xd29}g_\x0b\x10\x1b\xcc\xa2\xa7\xc6\xf8[q\x898\\C\nSzE\xe1\x0c\xd2*\x19\x93\xc5\x0bt\x8b%Z/\x9c&\xe4\x8b\xec\xa9\x19u\x9b\xc0/s\xb2\x88\xce\xb1\xb0]\xbd\x0c\xc6\xb7W9Y\xcc\xc0\xf9K\xf5\x12\x8e\xc6\xa2\xd9\x8a\xde0\xda\xa1'\x1a\xb6\xfe\xdbR\xb0&\x08&\xca\x8f\xfeM\xe0\x1bVUDM1o5\x0c\xfa?\xa5u\x9cv\x01L*\x0b!J01\xc9\x1eHm&\xad;\x03\xe5[\x83SI_\xa4\xb3\x12D\xa4\x04\xc7Z\xe4\x10\xd2\xc6\xae^\xc9\xcd\xfa1\x1a\xbe?i$.H\xbcS\xfe\x077VQ!\xb0=\xaf\xff%\xf9\xc4\xe5\xf9}\xde\xea\xc7\xe5S\xf964\xb1\xa8\xed\xed*'\x91\xcc\xc3\x98\x8fb\xe4\x9e$\xc8\xdc\xc0\x1e{[V\xe4\xbf=\xab\xd7\x8a\x81\xd7\x1d8I#\xd7\x83\x89Y\xc7\xa1\x9b\x98tJ\xcev\xe2\x9fc\x8fnE\xdd\x99\xc3(\xa5\xe6\x0c1\x9a\x99\x81\x87J\xffB\xa2\xe5\xaa\x9cAN\xb9\x9dy\x1a\xb3,\xa4I\x9a\xaf}m\xfc\x9ez\xec\xb2\xe4\x00j\xf0\x96wl\x9c\x06\xef\xaad\x04\x94e\x1b\xee\x05l%z\x08\x9f\x0b;\xe9\x83\xce\xca$\xf6\xe7$\xc6\xf3HQ#|\x0cI\xdbT\xbc\xb3/\x03(\xdbW'\x1f\xb4\xb0=\xd8\x1c\x1b\xff\x05\xd7B\xcb\xf84Y\xa4o\xf2\x18\x8f'\xfa\xfb{\xbf /\xfdr\xa5Q8JS+\xa4\xaa\xd4\n\x91*\xb5\x82\xafJ\xad\xb0Q\xa5V(T\xa9\x15\xe2Vj\x05\xb4C\xb7\x01\xea\xdc\x0b\xdcR=\xdd\xbf\x16\xa9\x17zsn\xc5\x11h\xdc(\xbeD%5\xe1\x86\x9eY\xab\xb4\xd0\xe8x\xd8\xa95\xe7\x8b\xb5\xd3q3(\x16\x84\xb64\xd9\xe4jR\xe4\x9c\x00E\x1dx\xf3\xea\x19\x96\xc1-\xd1g\xc1\x81\xb7\xbb$\x80\xd11\xb6vn\xd1\x06\x0c\x85O\x8c\xa5\xd0\x9b\x05\xb8\x12l\x053\xc6\xc2\x00\xac\x85\x81\x98\x0b\x15\xf6\x86~i\x90\x89\x93\x01\x1aM\x00h:\x9e\xf3\x94\x9c\x7f\xfc\x01N\xb9\"\x10\x92-\x89\xe9\xc9c\x905\xd3\xfa\x0b\x14\x93-\x14|\x1c\x9a\xac\xfd\xc8\x08\xefc\xf2<\x87\xb2p\x16\xf1\x1fV\x8cL\xaa\x15/mX\x1e\xa3\x86\x8aq\x94.\x96\xf5*\xfc$*\xa3\x7f\x937y\x99%r\x90\xfb\xbb\x9d8\xc5\x14\x9e\x945\xd4\xb1\xf3L\xb5\xb9\xc9c\x1d\x10\xb3\xd3\x08\xee\xc4\xe4\xe5^\xa2\x0c\xa9\x83bR[S\xca\xd3A\xc7\xcc\xea\x83L\xee\x15x\xcdc\xee\x98\xbc\xcaV\xa8\xa6\xe1\xb1\x8e\x86\xd3\xdeh\xf99\xe4\x984\x829c\x085\x06\xbc\x9a\x19\xd4\x9cZ\xcd9\xd4\xba\x91\xb6\xcfA\x85\xa3\x8d\xfa\xa4\xb8\x949\xb9y8\xb0\xda\xfe\xd7\xedp(T\x87C\xa1:\x1c\n\xd5\xe1P\xa8\x0e\x87\x82\x1d\x0e2\x92_||\x92\xaf\xd7\xa0\x7f!\xf9\xe2\xb2%\xf9\xc2/v\x97 Z\xc6\x1cXo\xa1\xf8Zn\xa1\xeb\xc1_\xf5\xf7\xd6\x17v\xea\xcf\xb2\xb7v\xd6/4u\x0b\x8b4Ugp\xfa\x8f;\xf7\xae\xc7\xa6\x157\xffDB\xd1\x97\x94B\xda\x94BO0\x9f9K\xff`4\xe5\x03\x9fO\x1ed\xd7\xc8 $\x17\x06\"i\\\xf4&\x0b\xfd\x92\xb0\x86e\xc6\xdbO\x9e{\xe8\xd2d\xf2\x03K\x9d\x83\x82\xae\xa5\x96\xfdG\xa9\xd6\x90B\xe9\x8e\x13\xa7~\x18%K\x96\xd5\xb8\xf4\xf8\x9f\xc7\xa5_n\xb4B\"\xc5[g\xe1G1 \x07\xbf\x8bn\x85^\xb0\xc9s\x92\x94\x1cC\x0c\xd2\xeb\xef\xef\xb5\x82(\xba\xde\xb9\x1b\x0f\x0b\xea\xd1\x9e\xe5$tF\xdc\xdb\xb0y\xff/\xbe\xefk\xb3\xa07%W\xfa/\x8e\x0dmw{S\xfe\xbb\xaa\x1a\x7f5\x07$\x8e\x1f\xebU\xfaQ\xb2CN\xfa|XK rf\xaa'|\x9d\xce\xa3\x98\xcc`z0\xb4/N\x94d\x1b\xfbTCut$\x9f\x05\xfe\xba\xf2\xe5,\xf6\x03\xb2J\xe3\x90\xe43p\x18\xea\xc0\xfc\x02J\x7f\xa9y\xab\xbc\xc8\xd0\xbeE\xceu\xdf\xee%*j\x12M\xf5k\xd5\xc1_c\x8aS\xe6\x1b\xe2T\xd8\xe28\xa0U<\x84U\x81qs\x14\x94\xdcn\xf6\x81\x13x_O^*S\xf1R\x99\x8a\x97\xcaT\xbcT\xa6\xe2\xa5\xb2a%\xc53\xca\x15\xb4\xeeb`L\xa6\x89\x9cY\xe0\xc7\xa6\xfbR.,\xfb\xf8\\X\x08\x87\xf0\x84\xb7\xef!\xebAwO\xbb\xcf\xfa@\x1a\xe8\x84\xd7v\xf0\xa4yYse\xc0{\xa7\xe6\x96\xec8%\x11iK\xfb\xa4Wmn\x19|\xc4B\xa3K\xbf$\xd2\n\xae\xe2\x8a\x8a\xa30*\xbfO\xcfg\xb075\x12\x0bGI\xe4#\xc3.\x86+a\x80`P\x02F\x18\xc0\x13\x81H\x95\xc3\xd8?\xacq]4\xa7\xbef\x96\xac\xcdc\xaa\xd3dx\xb6E\x90\x8cD\x9boB;\x14U\xa2\xb7\xa1#\xf8d\xfel\x8c\xcf\x14\xe7\xde\xa34)6k]\xfeD\xa8\x9c\xd62?\xf7\xd7z@\xe6\xb5\x16\x15\xbcf\xb6\x1e8\x1a\xc2\x1eC\xe5\xb7\x96\xf9\xe5\xea\xb9E\x9a\x8e\xcd\x003\x0ep\n\xbfq\x9d\xefYE\x1c\x0dk\n\x9c\x82o\\\xe759/\xbf\xcb\x89o\x02\xcf\x18\xf8*Z\xae\xe2h\xb9*\x1f\xa5\xa1\xd1\x81,d\xef4R\xf0\x99\xde@\xef\xed\x08\x8bg\xe2Z\x91\x92\xe4\xbfD8[\xfe\xf7\x17OC\x92\x94Qy\xe1\xfa\xdc\xe7<\x1fyu\xd9\x94\xc2\x19s\xd3\xf7\xb3\xa8(Gn\xf7\xc8\xea^[,\xa7\xd9\xe8\x1c\xdb*\xae\xcf?\x9a\x93\xdf6\xa4(\x1f\xd9\xf7~\xddBb\xfai\xc4\xccN*Wq[\xf8,\xc8\xde\x98\xd5\x8c\x0c%\n\xd5\x03}\xfbK\xd1>\x12~=\xec\x05\x1c\xc2\x92\x89\xc7z\xc09\x02V\x07\x85\xd1[\xed\xca\xaa6\xcf\xd3\xf0b\x82X`\xf0zpB\xbf\xf4\x19\xe4\x04c6f\x907#8\xec\xdf\x8e\x92\xfa\xdd(\xd1\xd5\xfc\x1a\xc3\x9c.k\xaa\xa9\xae\xb9\xd8m\xb0\xa7\xa7\xc8\xf0\xc3\x0dpW\x0d\xeb\xa3\x03Q\xb2\xf5\xe3\x88e\x070\x0d\x8a\x93\xdf\x0b\x03\xadk\x8b\x0e+? c\xf2\x82\xdfT\x8f\x9d\xee\xbc\x0b:z\xd5\xc8\x8d\xce@\xaa\x91\x13\xab\n\xa3bp\x9a\x1ej\xca\xae\xee\x8e\x86\x13\x96\x91U_P[\x87\x11\x97i\x9b\x84Q\xa9mX\xd5h1\xa0\xc19\xa6\xa0(\x13\x08\xfc$ 1H\xd6\x86u\x04D%\xb50*\xd5PF\xeck\xa4\xa9(\xd3\xe52&O\x05\x99\xd1\xef\xbc\x87\xe0<\xc2\x1ebG\xe8+u\xd5\x02\xcd\xd2\xb3\x0c\x0e\xa6\xf9X\x95\xeb\xf8 \xd6q\xd8i\xbe\xdb\xf1N\xceKq\x8c\x89L\xb4\xc0\xca\x92\xa9?`\xf4U\xe3\xf8\xbf\xd5Oo;\xf1\xad\x89\xeb\xa9(\x81\xc1\xf9Z\x81\x9d\xad\xe4\xcb\x9a}\xa9L\xea\xd4\xbb\xab\xf0.k\xc7\x9c\xd4\x87\xd1\xaay\\\xf6D\x1eq|\n\xdf8m\x02\xe0\xf6\x04\xe0\xf8\xba\xef\xfd\xfe\xbe+\xbfW\xf3\x17\xca\x1f<\xaaz\x10V\xcf\xdf\xb7\x95\x03\xdb\xa6x\xda\xe5\x97\x9b\x98y\x05\x89\xd9\xfdY\xcdLDU\xde\x10T/\xa5B\xbd\xa4\xd0\x1cQ6\xf9\xe6\xf9:\xbe\x19y%)J*\xceJ\xe1(\x83\x8c\xcbf\x02D\xab\x08<\x84\x84\xc7\x80\xd0\x9e\x9e\x9e\xafYu\xb0\xe6M\x99\xe7P\xb4\x00\x97w~\xef\xf0\x10\n\x9db=\x86C\xd8C\x8e\x0f\x93\x17\xfe\xfe\x9e\x8e\xb2\x903M\xc4+HyLY5W'\x1c\xe1fW\xd4\xb0\x1e\x8d\x9b9\xf1\xf5\x9eH\xc5?\xd7\xb1V\xa1\xd7P\x06(\x12\x9cK\x94u@\xe2\x82\xe0\xdc\xb6\x92\xf3\x17x\x0c\xb8\x0e\xce\xb1\xaa[\xfa.i\xbb\x83L\x88\xacEMc\xda\xcf\xb5)\x0d\x17\xf8\xd97\xad7\x14\xd1I\xafXvK\xb7\xe3R\xae$J\xbcE\xe2E\xc9\x82\xe4\xc7X\xe2\x7f\xe4\xe6<\xdaF\x9dg\x8d\xbe\xb7\xa0h|\x8c=\x16/\xa6\xa8\xefT\xcc\x07+\xb0\xf0K\x1e\x95\xe4E\x12_H\xf3]*\xe6EL{kf\x14\n3\xa1\xf7Lj\x19B=~\n\xf4\xcf\xb5\xa44\x99q\xaf\xf0}\xa2\x90\x90\x0d\x8bOw\xd1i]bc\x0c\xa9|\xdc\xa7C\x06\xee\x92N\xed\x0e\xf8\xe3\x0f\x08G\x0c^\xfa\xf96\x03>\x14\xedl\xe8p\xde%\x98\x89\x82`\xa6\x1d\n\xac\x82\xa3\x84=\xa7Bl\xcb\xe0\xea\x95y\xb4vYA6\xbd!\xb6\xb1\x85\x95ek9\x99\xe8\xc7\xba(\xb0\xb3\xc3J\xea\x8eUh\xa8\xa6k\x0c3+\xd9\xf8;v\x8aURc\xbe\x14^\xc2\xfc\xa8\x0c\xc9\xef\xe5\x96\x8e\xeb\xe9J\x7f\xdd+\x10\xd0\x1f\x0f\xee\xdf\x1a\xfd9\x8a\x10\xfc\xf9\x1c\xc2\x189|\x92\x06\x9bK\x96 \xe2$\x88\x15\x94\xa1\x1cB\x98\x068\x0e\x8f\x9c\x93\xe0Q\xba^\xfbI\xe8:A\x9a]\x98Sd\xc9\xa8\xd4\x07\xf3\xcc\xf0\xb8\x12R\xcd\xb4\x95\x9ck\x88\xeb9%W\xe0\xfd\xae\x0e\xce\xac\x8bK:\x8fX\xee&\xd3\x17\xd5T\xb2]\xbf'\xa3\xd2dQ\xaa\xb3\xcb+\xdb)\xc9y\xe9\xe7D](\x11P\x14CTj)\xbb\xf0\x8ezrs\xe2\x87\x8c7b\xb6q5dk$tZ\xd4\xa0V\x89A[\xc52/\x91\x0bT\xb0E\xf2)\xfd\xa0\xe6\xf7\xebP0\xa7\x7f(m\xe8\xa14\x95\x9dJ\xf4\xc9\xf4\xbe\xecX\xa2O\x1eLUqlj\n$\xbc\xd1N$\xa5\x08(\xe3&\xab?U\xd9|\\gE\xfc\x90\xe4EW$\xa5\xe2h\xe9e\x9bb\xe52T\xc3\x84\x9d\xec\xef\xc9?\x9d\xb1x\x9d\xe5\xd1\xc5\x18N\xfe\xf8o\xce\xdf\xb0zf\x9d\xa1\x08n\xc0\xdf\x9c\xbf\x8dx|\xf4\x06M\x12*V\x93\x9e\xaa{\xfbrTC\xb1Wa@\x0e$9C\xc5U\xe6\x17\x8a\x8dP94.\xc6h{\xea\x9c\x1b\xdd)\xf2HR\xe6\x11)\xa8\x90\x04{.\x16\xba\xa1\xc7i\xe6%\xe4\xbctG#/L\x132\xfa\x9a\x8f\xc2d\x8e\xc4L`6\xd6\x91\x15\xefZ\xe3\xc8\x0d\xc7p`R\xcfS\x9e\xedd\xdfP\xa1b\x8dPS\x89#\xa6\xb8(\x12\xad\x1b\xab\xff\x038\xdd\xd5\xde\xc2\x0dpf\x98?m\xcdW[N\x0b\xfa\x84\x00\x02\xbf\x0cV\xa0>Yc\x86\x11\xb8\xc2}{\xc1{XD\x89\x1f\xc7\xaa\x15V\xaf=\xbd\x98\x12%\xf3\xf8\xa1\xd5\xf8\xed*\x06`h\x0e\xf8\xd6\x89GP\xae\xf2\xf4\x8c\xbb\x07u/\xc9<\xfc\x97\xfa/\xfaA\x8e\x8a\xf34\xbc\x90\xa5\xd6\xa1 \xcez\x13\x97Q\xe6\xe7\xe5\xcdE\x9a\xaf'\xa1_\xfa\xcc\xd1\nG\xe6\xbc|q\xfc\x9a\xfd\xdd\xdd\xbb\x1aNa\xa9\xd9\x8f\xc0-|:\xa7\x8e\xb9f_\x82q}\xaa\xfdy:\xc6\x8c\x1c\xf2\xfd\xc9&\x057\xe7\xc51\xf9\x8d\xefN\xdas\xf7\x14\x0e\xe1\xac\xbb;\x97\xc6\xdd |\xf4G\xfd\x8dw\xca7\xacq\xfb\x01\xcf\xf5qd\xdc\x82\xc0\xb7\xe1\x91v\x1b\x02\x9e\x08|\x0f>q0h>J\x8a\xd2O\x02\x92.j\xae\xdb{\x12\xa1\xb0\xd0\xda\xa0\xe7t\x83\x1e\xfe\xffq\x83z\x89\xbf&\xf4\xef\xaf\xcb\x8b\x8c\x1c\xb2{\xf4'\xdf\xb9(P\xf7\xde5\xeem\x90\xe25X\xedq\x10\x98\xb4?F\x8c\x91\xdb\x05m6\x9f\x1e\x9f\xe8\xb5\x87\xc1\xfcg\x8d=\x7f\xa6\xdf\xf3`\xd94\xf0}x!\xf6\xfe|\xe8\xabe\x0f\x1b\x94\xb7#E\xb5 \x84\x97\x13t\x07uo\xfe\xeb_\xc9\xcd\xe5\x18\x1c\xa7\xab\xd8\xe3\xe3/e\xe5\xac\xdb\x1c\x8d\xcf\xb9\x93[\x8aJz\x9b\x8f'\xc4^7F\xefK\xcc\xca\x97\x98\x95O\x11\xb32 Z%B\x95c\xb0\"k\xab\x9a\xd7\x0dp\xab\xcf\x0b\xf1#29\xd5 c\xa0.K\x1b\xb3\x072\xbeD\xc1/\xa0#\\U_\xb0\x1e\x19\xe2J~\x0dCiZ>\x98\x97\xad\xe3-Q\xde\x148\x01\n\xeb\x1f305\xd6\xff\x9aV\xf0n\xba\xa7\xb1\xd0\x17\x8e\x82H\x9b\xf8\x10\xebr\xdd*p\xcc\xa3\xdb\x1b\xb3x\xfd\xf2c\xff\x00\xca7\xbd\xd2\xad\xea\xbc~_\x91\xf64\xec\xa6\x993;\xae\xd4N+\xbcW\xc3\x95h\xc6\x94\xa3M\x1d\x17o\xc5T\x0e\xf2\x98wF[\x89\xc5\\\xe7[Q\x8c\xdb\xa8\xf6R\x16\x8a\xe1d\x16E\x92\x01u\xfcL\xebdY\xb2\x9b\xf7\xce\xa0Z`\x85\xbd\x95 \xb6%\xbbM[jw\x05\xdf\xf5\x8c\xaf\xf9\xc2\xf7} \xbe\xef\xcfg`\xfa\x14gF\xcd\"\x99\xce\x0d\xcb\xb0\x82|@\x90\x00s\xb1\xa8\xc2\x17\xf91\xac\xd1\x96D\xf8\x02'\xf6\xe6\xd8\xd8\x82\x04\x9b<*/\x1e\xd3}\x1d\x95\xa6Z\xc7t+\xe5\xc6x\xdf\x98A\xf9\x9br\x95\xe6\xd1\xbf\xc9\xf7%\xa5\xb0{\xdd@\xb6\xe6\x15\xb0W\xc4Qx\x05\xf60\x8c\xd4\xe5\xc5&\xff\xf8\x03\xfd\x9d\xae\xc4\xea\xc5\xbax\x890\xda\xcd\xb0\x96\x8a+\x89\xa3m\xce\x86z\"\x02m\xd7\x9a\\\x91>\x84\x94u\\\x9b\xdf\xaa\xb1\xad\xd4\xc6\xae\xcaAX\xb7z<~\xbaJq\xf5\x1f\x9b\xeb\xea\x93zo\xc8\xe3T\x03\xb7ht4P\x1f\xad\xd7\xd9wC\x15Xj\xad6\xd9~\xf8\x80\xd2\x88\xfbP\x89*\xf4\xa1\xc9\x87\n\x1a\xf94\xd2\xe45\xbe\xcchD\xfb\x9e+n\xac\xd3\x90\xc4\x942\x8da\x8f\x07\xaaz\xe4<\xf3\x93\x90\x84#\xa1\xea0\xb8\xc6\n\xf8Y\xff\x13\n\n\xd0\xdf\xc3\xf2\xe9\xdd\x98\xb4&\x18iW\xb5&\x87\x89\x11&\x10S\xc8\xe3\xc8\x94\x1a*S\xb8n=ZE\x9f\xba-\xcd F\x99[\xac\xfeK\xee$\xd8\x86\xeaOI7\x9a\xf7\xc3\xf0^6\x11\xbc\x1f\x8e\x0d[E!9&\xf1\xe2Er\x84\xd3j\xe2\xc5\xf4+\x0d\x15\x1bV\xa1\xb5B\xe7C\xf7D\xd2\x89\x07\xac\xf6F\xdes\x0c\x85!\x1a\x90\x0f\xad\xfd\x11s\x80N\xf0\xf5\x94T\xa3\x19\xb4cw\xd8\xaa\xb6\xf3\xf0 \xb8z\xd4\x82\x98p\x08\x991\x956P\x98|\xaa\xe8\xcd\xfe\xfc\xb2U\xe8b\xae.\xdcl\x88F'\xc1\x0c \xea\xf2\xb6\x0d\xb5\xde*\x8a\xc3\x9c$\x943\xfa(M\xebB\x0d\xcd\x0d\xc9\xc2\xcc\xaasM\xc3Q\xdaxi\x05\x9b\xbc@\xa5[\x96F\x892_\x1c\xf4\xb0\xb7\xba\xcb$\xe7?\xed\xe0v\x1fX\xab\x92\x04%\xaa\x1368\x8c\x8b\x95\xed\x12\x1eP\xe4\xd4\xc7\xa0\"|\x17S\xf6\xcb\xbf Ar\x985a\xbb\x87\xa7\x91J\xf5\x85\x02\x990\xb0h\x1d\xd1\x92\xe8\xb5\xee\xc1\xee\xfc\xeey\xde\xfb\x0e\x89k\xb0C\x1d\xaf\x0f$O\\\xf8i=\x10GO\x9b(v\xdc \xbb\x14\x87~\xbf\x1e\xd2\xf83\xf0\xf9\xbb\x96*\xc11\xfb\xa10\xdc_g\xe5\xe0\xe7!\xc1\xf8A\x19m\xc9k\x7f>\xc8VZ\x99aC\xbf\xf4\x0bR\xa2G\x8e\xfc\xc8\xb6\x92Q\xaa^\xa8\xd5\x12\xbd\xdb\x97\x13JP\x13\x98,\xa2\xa5\x02\x8a\x89%\x86\xc0\xce\x00\x13QW\xb9\x86\x9fS\n\xfc\n\xf9\xaa(Y*E\x18G\xc4\xef#\x8b\x18\xa0k\x1b\x12\xef\xc6\x0d\x97~\xba\x02\xb4HS\xd4\x98\xc1\x98R\xf9\xaa\x8d\x99\xc4\x83\xefc\x0b/W\xc9j7\xb2\xce\xb0-^\xffIg\xafq8\xb5\xe0ly\xef\xc6XG\xee\xc4\xd1\x90\xefG%Y#\x9fY\xd3\x9a\xc3\xc3ff\x9d\xc6\xd9\xf2\x10\x1c\xbe\xb3x^\x96\xc1}\xd3\x07\xadt\xba\x16G\xc9;U\x860\xa8\x92\xd9\xf0$8\x8e9\x9dJ[~\xa8\x86\xa5\x1aDD\xc7{\x14F%`\x8c)\xcb\xbe\xc1\x1a\xe1wX\x154\x8dqd\xd7\xa5\xe0\xe7\xc8\xf5Z\x08\xda\xb3\x88'\xe7i5n\xbbBlTW\xb6>l\xc7\xd6\xb9P\xcc\xb1Y<\x92\xcb\x8c\xe8_}\x05\xe9\x18\x8c\xcb\xa0\xa9\x84\xa65\x071b\xab\xad\x94\xd2.M\xa2\xa1\xf55 \xd5\xa6;h\x1d\x06\xda\xc4'\xa4\xa6\x993\xd0\x14\xb3\x14\x14Y\x97\xef\xb4\xf7\xc0(1~\xdef\xa4\x05\x15\xb1z\x12S\xca\x9f\xf4\xa4\xb2H\xbc\"\x13\xbe\x162\xa9l\xc3\x1f\xf4\xda(\xf8\x83\x9eT\x16K\x0dL(\xfe\xb8qS,W\x1b\x98\x16\x1f_<\xcbl\xc53\xbd\xcfn>\x06\xbf\x7f\x92wy\xdfk\xe3\xb3+\x92\x84ozb\xa2\xc2g7\xed\x8b\x8az\x9f\xdd\xbc6X\x1d\xb6\xb7\x8e\x8aG\xcde\x89\xe3\x01\xabE\xc92\xca\x17\xab\xf4\xcc=a\x94\xb3p\xc6@\xde\xd2o\xf7\xe9\xc0\x989Q\x8c\xbb\xe3\xa5+f\xe9\x0dSH\x85\x1a\xdfN\xa8\xb9\xe6\xbc\xbb\x0dc\x9c6\xf8V\xdd!\x1c\x19B\x9f\x9a\xda\xf8\xe6\x92V\xc7\x05J\xb2Q\xdb\xdb\xb7\x03\xe2E\xc5\xf1*=K\x9aK\xdf\x80\xa6\x1c\xc0[\xccB\xa0?\xa0\xed8\x12\xa6\"\x9d\xa7\xe7J\xdeX\xd5L:\xeejX~o\xa9\xfbu=h\x1e\xb4\xc6\xe3\x93\x84Z\x0f\x8e\x90\x9d\xae\x9ax\xb5ZYY2'P\xf6\xa7\xa9]~l\x97]C\x16\xde\xa7T\xa3\x9f\xf5\x06v<\xabc\xe3\x19\x9d\xe1]\xc3\x19\xed\xea\x1e\x82\xf2\x10\x07\xbe\xad\xd0^\xe2\xf06)g\n%\xc6\x9c\x89^\xcc\xa0c\x84\x16G5\xe7\x02\xfc\xa2\x88\x96h\x931\xeb,\xaa\xe3\x806<\xfd\x1aJ\xf8\xa6w*|\x0d%\xa5\xfcj4\xda\xf2<6\xf5\xa1Pj\x82\xed\xaa&s:\xb4d$\xba]%\xfd\xf6V~\xf1\xe2,\x11l\x0c\xd3\x16b\x04\x02\xeeZr\x92\xd3\x13(9\xc9\xdf\xdaF\xc2B\xe3x\xef\xe3D\x1f\x01S\x1bw\x89\xea\xc4&\xda\xc3\x06\x9aCN\xd8\x81\x9a\xc07PV\xb3\x9b\xe8g\x17\x1a+\\\x9e$\x860\xc6\xdc#\xc9fMr\x7f\x8e\xe7a\xebO,&1\xc6\x9a\x88t\xd3o\x04\xd0\xde\xfe\x18x\xf64\xba$X8\xd1\xcd\xbd\xb3<*+\x88\xd1X\xc1d\x12\xfa\xc1w\xe4B\x1a!\".\xdb\xa0<\xa8\x17\xaa\x9a\xff\x92\x87\x9fh\xa6\xa8\xe27(\xeb\xe66P\x89\xee=^ \x12\xd3B\xe5\xbd\x9c\x84\xe2\xea\xf7\xe5\xbd;\xeao\xb3\xc8\xa8\x8c\xae\xd0\"2\xd5\xb9\xb2\xe2U\x80G>\xee\xb9\xa4\x19\x92Z\x8eD$dB\xce\xe0\xf5EF\x8e\xf2<\xcd]\xe7\x91\x9f$i t\xcf\x80\xcf\x8e\x18\xf0\x0b\xf0\xab\xd6T\x825g\xcbT \xf8\xa014c\x87At\x9a4{\xf9\x8a,HN\x92@t\x956\x08+\xbfH\xfeV\xc2\x9c\x90\x04\xd0\xe5\xd4\x8f\xa3\x82\x840\x81b\x93\x91\xdc\x1d\xb5 \xe8\xb0H\xa8+\xb9\x0f\xf5\xfc\xee\x95h\x97N\x11m\x1d\xd8;\xc4\xcc\x9dt\xf2\x90\xc0V\x13\xd2z\xc2\x98}9\x8e@c\x9e\xdc\xa8\xcd\xba\xf2\xcd\xb1$\xe5K\x81|/\x16nd\xe9\x1e\x0dR\x0c\x1c\x82'\x18\xa5.\x1f\xd2W_\xb1\xc21\xa8\x84V\xa0\xcd1\x9dlz\xe0\xe6\xa4((\xf6\xae7E $*W$\x879a\x1fH\xf3\x06\x1e\x8d\x81\xe2\x99\x037\xaa\x86\x14\xabB\xea\xedX\x9fQ\x8c\x87q\xb1s\xad\xfd\xaaa\x97\xd2\xa4(\xf3\x0d\xe5\xcdL\x96o\xbb\xf8\x8c\x9a2\xea\x8b'\xd0K\xd0\xc2\x996b\x1fX7+\xda*M\xc9'.\x05M\x1cq\x87 \x97\xcfT\xd1\xc2(x\x08\xd2\xfb\x1c7f(\xb9\n\xb4<\x94\x8a)n4\x86\xa62b\x0c)\xbd\xa5-\xd7P\xac\xd2M\x1cV\xef\xbc\xc1l\xa5\x96\x95\x03\xb4\x019\x82\xf5\xc0\xed\xa1\x9d\xd7T\"\xaf\xc2\xb70\xa5s\xd5H\xeeY\xf3 \xd3\xb7\xf0\xb0\xfd\xe7\xacg\x1a\xef^Q+\x01;\xdd\xd7\xaa\x02P\xd0\xa03\xcc\x9f\x81\xa5p}\x910\x1f\x80\x9a$\xbc#\x17\x85\x9b#WNZu(F#\x8flI~Q\xb3\x8b\xdaC\xae\xd1b\xe2E\x05\xf2Ac\xb6y\xb2B\xc9\x0c\x01\xe2\x14\x1e\xfd\xedn\xa2\xb9I\xd1\xcf\x94\x9e\x03\xfd\xeeiW\x12:\xddKO\xa8\x9c\x1c\x9d\x10m\xc7\xe4{\xa0\x8f\xb4\x94S\xef\x18\x06\xbb\xc73\xf1\x9e\xae\xd7\x1b\xdc\xa5\xad$\xc3p\x08\xd1\x18H\x83\x89\x8f4\xbc\x8cNa\x06R\xa5\x19\xb4\x07\xf2\x9e%\x88t\xf7E\xdd\x1d|r\xdd\xb4z\xa14WR\xca\x9f\xdc\xef)\xe9\"\xfe\xa4\xa7\xef\xf3\xf9\x83\x9e\xbeo\xc3\x1f\xf4>U\xf0\x07=}_\xcc\x1f\xf4\xf4}\x81T\xdf\xb7@\xf0\xa0s7\xe3\x1f\xb9\xd7t*\x08\xd5\x8a\xc0\xf0\xe3+\x02\xf5e\x8c\x86(\x02\x15\xc1\xfb=\x97\x0c\xad\"0\x96*\x02\x83J\x11\x18\x8f\xc68\xd7\xfb_\xc3\x02\xbe\x81\xf8kXP\x81%8Y\xb4\x15\x81\x0b;E`a\xab\x08\x8c\xec\x15\x81\x01W\x04.yd\xb2\xff=\xaf\xa9n#\xc7\xf1>\n\xdd_\xcb\xaa\xe0E\xc5\x8b\xef\x8eoa\x01\x87\x93\xdak\xa0p\xc6<\x1e\xc7/\x1cz\xae\x9c8a\x1d1\xe5\xbc\xed\xb5\xf3\x9e\xf7\xeeQ\xc7\x13l@\xff\x1c\xe8\xab\x86\xf0\xb3,\x11\xde\x15h@\x15\x8aN\xce\x8f4\xe7G\xbc\xc0\x93\x1b\xbe\"E\x1aoIx\xbc\x99\x979!\xeeI\xb50\x1d\x85\xaed\x85\\\xbar\xf4\x900\xa5\x17(Z\nU\xdb\xf4\x02\xb1T\xa1\xba\xf9\x04\nU\xbd*\xd5F\xe5\xca\xb2\x1d:\xfaa3<\xcf\xfd\x80\xa0\x8d\x18\xb8#\xb9\xaa=F\xb8,\xa9\x90\x1dE\xb4\xebb\x94$$\x9f\x18z\xa7l\n\x1d&\xad\xdb\xda\x0d\xe1\x9c\x12k' z}\xa4\x99#\xa7\xcc\xb5\x9d\xb1\xcb|\x96\xc6\x98\xf8\xec/w\xef\xde5h\\\x17iR\x1e\xb3o:Q\xe9\xc7Q\xb0C\x9a4\xf5`\xc2\xfa\x90jp\x893GG\x99\x1a/\xa9`^h\xa7(\xdd\xe4\x01\x99\xc1\x91\xbc\xbb\xa3Q\x8d\x80\xe7\x94H\x9f\x8b<\xd0\xe7J\xc3\xb4\x95\x0fw\xc7i\xcf\xa2\x8e\x1b\x0bi2\xd9\xae\xd1=\xe9dj\x80\xa2\xf2\xe4\xa9\x8b\xa7\x8e/\xd8\xf2,'\x81_\xea\x99X\xe0\x02\xe6\nm\xa9^T\xa0I\xf5\x1d~\xe8\x9d\xc7\xad&\x85\x9b\x1b>\x91)\xf3\x1f5\xaf-\xe5\xdc\x03?\xfe.\x8e\x96\xc9\x0c\x9c2\xcd\x0c\xf8I\xaf\x8cr\xff\xc9\xf2\x15\xf7\x9c\xd8\xf7\x0e\xc8\xda\xc03\x1amQ,\x026\xf3(\xfe\xff\x82>\x19p\x08\xce<\x8dC=n\xeaw'\x08\xad\x84&\x0d\x04\xb4I\xca\x86G;Vk\xa5\xde~\xa6=\xa3\xef\x17\xa7\x1c\x99\xee\xfb9\xe7dv'\xcc`K\xa3\xa0A\xa7r\xdd\xb0AIy\x80\x1f<\x7f\xd7s:\xf6sc\xee\xb1\x0c\x81w\xef\xb9\xaa\xcb/\xc7\xddT\x00\x16(\xc7\x03\xbd\xd0V\x99\xc0\x0dp\xf0WN\x7f\x9d\xd2_\xbe\xae'F7\x07!\x0f\x1b-\xf1m\xbf\x00\x83\xd5\xab!\x9b\xf1:\x84\x0d\xcd\x00\x86+\x9a\xdb\xe2\x0e\x02\x81\xa1%\xeeIa\xf0 \xe0Q\xdc\x0b\xb8\xa1\xb3\xa8\x8dd\xd62\xf6\xa46\xa8U\x87\xcc\x99\xf1\xb8\xe7'\xe4\xff\xfc?\xa7\xfdV\xf9\xb1\x0f\xa4\xc4\xea@J\xf9\x81\xa4&\xb2\x18\x8dw>\xe1%b\xbd\"\x8e\x02B{s\xa0,\x08+\xae-/\n\x99\xc2CH\xbd2\xfd\xf1\xb8\xfa\x81S\x9a\xf2 \xb2\x8a\x80\xbc\x0c\x19\x07\xb1\xaf,\x1cU\xac\xc9\x074\x99\xb3{\xf7\xee\xe9i\x07h\xe9\x07\xd8\x1c \x0c\x97\x92K\x92G\x18:\xc6\xc1d\x12l\x86\xda\xf1\xfc\xf3U\xbb\x10\xd4\xbc\xaal\x7f\x1e\xd3\x13\xefX0\x816;\xd5f\xce\x9do\xe0\xef\xf0\xed\xa59]\xc9Q`\"\xd75\xa9\xd6EuZ\xd3\xe9>\x8d\x1e\xaa\x8c\xb5$\xd3\x82D\x1f\xabA\x8c\xe4\x19Is\xb5\xb2\xbf^\xe5z\xa2\x0e\x0c&\xdf\xda\xae\xe8\xaf\x1d\x8am\x88\x197\x91,\x1b\x1f)\xa4W\x9a\xd8\xed+E3\xb0F5\x18\x82n G9T@\xa2\x89\xd2\xdc\x8c\x19\xd5\xa0\x81n\x06\xa7 #\xca\x01(\x92\xad@W\xda\xfc\xe9*\xd1\x11U\xaa\x03\xd0\xf1\xa7/\xe8\xd8\xb8.\x89\x8eL\x9f\xfd\x99\xa3\xe3\xab\xabD\xc7$-\x07 \xa3\x01\xad>\xbf#\x11\x0d\x14Wv\x02\xbe\xba\xec XW\xff\xba\x94 \xa0\xaf\x08\x0e\xe2\xb4\xd0\x94K}\xef\xec\xe0G\x98\x19\xfd\x08\x99\xe1\xee\xba9Pe\xca\xcc\x90\x99\xd4M*\xe2O\xa41\xe4\x99*\x86^z\x971\xa8\xdc\xbc\xac\xdc\xc6\xa0\xf2\xf42\xbbR\x01W\xe1G\x83E\xffd&\xf4\xb7^\x94\x84\xe4\xfc\xc5\xc2\x95\xa4\x12j^\xa6\xd8\xa0%\xcf\xeci\xe1\xfa\x03\xdci\xac\x1c\xe0\xd6\x03\xdcw\xcc&y(p\xe7\xb1\xd2u\xc4\x81h\x02?\x83C\xd8R\xd2~\xb98\x17\xd8\xc5\xbb\x02\xe0\n\"l`wg\x06`\xedo/\x13\xe0d\xd5GK;3\xe8\xe7C\x1b\x9d\x0b\xb5\xeb\x82!\xc4\xaf\xf6L\xf0\xe1\x9bC\xd8\x18\xc8L\xbf\xc2\xd3\x89\xe7yo\xb5#pN\x9c1\xac\x85\xdem\xbd\x9b\xae\x1b:\xfa\xeef\x90\xa9Y\xdf\x0d\xd6:o\xa8\xcc\xb5:\xbd7\x98q\xc1\x18\x97\x05\x95\xe2\xb96\xe2\x98\xfbF\x8f\xd0\x7fX\xaa\xab)\xec\xcf~l\xb4R\nX\xceB\xc9+\x1d\x8aK\x91\xcb\x8a=\xaad\xce\x0c\x1e\xee\x1ej+\x0c\xfb\x1a\x13&m\xa9B\xa9K\xc5\x1b\xb6v\xa3\xa0\xda6C4\x11\x01=\xd4\xfc\x12\xe9\x8c\xc1>\xa51\xb4\xa4\xd8\x80K\xb1V\x078\x0bvN\xb4\x9ex\xd0\x10f\x0d\\\x87\x9dh\x0e\xb5\xe8\xeb\x1bU\x1fcpZ\xf17\xad\xe7\xbd\xbb\x1dy\x14o}\xb6\xb1mr\xc93UI\x9e\x91J\xf2\xf4U\x92\xe7F%y\x16*\xc9S]\xad \xeb\xc5qRy\xd4\xcd\xea0\x9c\xe9\xfe\xe7\"\x80\xde\x9d\xd3\xff]?\x19TR\x14\xa1/\xf4)e\xd0\xf4\x03\xc8\xa0;\xe6\xf8\x87\xeb\"\x83\xdaH\x89\xc9@i5\xddAZ5\xcb\x8a\xfe0Yqc+\xda\x16\x18D\xdb\x0d\x15\xd1{\x03\xb0d\xc4{\xe8\x9f\\E\xa4\x18J\x07\xa0\x06S\x9f\x0d$n\xc4yP\x81\xce\xc2K\x8d\x83/\xd2|\xedk\x95\xb6\xc0\xb7#\x7f\xe1|m\x94\xaa\xb654F\xaa\x1a\xc0\xd7\xd2 \x15\x9f\xfec\xc8\xa7\xb1\x1c\x1c|\x03\\\xa8d\xe1vKR\xd6\x0bG\xf7\xb6\xfeE\x94,\xafL\xf2\xc6\xa9\x19C%\x81\xf3\x95\xb8\x02\x11\x9cw\xf1\xa7\xb4\xdc\xb9\x97\x17\xde\xca/\xcc-\xe9\xe7\xeb\x14\x8fe\x18\x83i.)Y<_\xc7\xe8\xfa\xb7\xfa\x0f\xd9\x13vS\x07;m\x0c\xe3\x84\x83\x81\xf1h\xae\xbd\xf3?\xff\x8f\xfe\xcf\xc1\x14\xe2\xce\x0c\x9c1\x1c\x97y\x94,\xddT\xe7M\xdaL\x94T!\xe8Vw\xe6\x9e\x99&\x83K\xaa[\x03\xa7\xdf\xf2II4=\xbc\x9c\xc2\xcb\\\xfa\xeb:(\xbc\xc6Pz\xe2}I <}\x86\xa7k\x91\xe0I\x14Qj\x8d\xc3&\xd3\x13?\x1e\xfa\xd8\x92T\x8f\x7f\xf6%*\xd9\xb4z\x8c\x87\xc0\x15ef\xe2{\xb2\x97\x0d\xc9*\x05S\xd9\xd9yI3W\x92\x1c\xf9\xa2k\x80|}<\x8be:\xd5\x94?\xe8\xe9T#\xfe\xa0\xa7S\xf5\xf9\x83\x9eNu\xc3\x1f\xf4t\xaa\x05\x7f\xd0B\xf2X\x8d\xe4\xf1\xc7G\xf2\xe0\x8a\xb2\x14\xa5*\x05f\xcf\xbbF\xa6\xc0\xcc\x87+0\x95Y\x8a6R\xc5edR\\~\xb2,Ei\xf2:\xbfH7%\xa6\xdfV\x03'\x1c\xf8\x91\x9f\x04$6\x00\xe7\xcc\xab%\xf1\xe71 \xb5\x01\xfe\x86\xba\xdd\xea\xb3\xb1U\xa8<\xbf\x98\xa4\x1buT\xb7\xb6R\xfb|S\x96\xf6Y\xd1\x9dy\x99\x00o\xef\xf4\x94\xfe\x11\xe0\x84\xd8\x147\x97\x1f\xcb\x94\x0fd\x93\x8aa]\x1f\xaa\x9f6\x1dT\xd4\xfc\x1b\x83\xf3:\xbf\x80\xa8\x84tS\x82\xccdfp\xdd\xd4\x17\xf7\xaeX#V\x12\xaak?i\xe1\xe7\x0c\x9e\xf0\x1d\xd0\xa8\x86\xd6\x01o`\xa8\x19\x9c\xe3\xe8\x0c\xf6jc!&\xc8\xa8\x0f\x95\xebYp\xfc\xcb\xa1\xf2\xe5P\xb9\xbe\x87\xca\xfc\"\xf3\x0bC\x91\x16\xe2E\xc5\xf1\x99\xbf\\\x92\xfc\xc0t\x94\xb0\\?\x1a\x12\x86P~\\\xa4\xc7\xab\xf4L{\xe2\x94\xba\xc3\xa0\x19XP\x8f\xd6\x0bVQ\x1c\xe6$A\xa1\x0e\xcb\xfc\x98?bG\xa6\xb7$/\xa24\x99d\xb9\xbf\\\xfb\xca\x13,\x1d\x7f\x88\xe6NO\xd7\xa4(\xfc%\x01\xc5\xfd\xc9\xc4_\xcf\xa3\xe5&\xdd\xa8\x0b~X\xcd\xa5\x12hu\xab\x0e\x0ey\x83\xb4\x18\xca\x14\x18\xc6\xe2\n@]\xea\x06\x13\xc7\xa8>\x94\x99\xdb\n\xd2\x90\xd4\xad\x15\x0c\xf5X\"V? \xa9\xa4a\xf9j\x9a\x91\xc4\xcf\"\xf6\xea\"\"qXP6 IK\x98\x13\xc8rR\x90\xa4\xc4\x8a\xd4+\x02\x85\xbf&\xc0\xf1\x1c\xd2\x1c^d$\xf9\xee\xe5\xd3\xc6\xb8\xeeY\x8e\xdc9\xdedY\x9a\x97$\x14\x0b*z\xe7\xe7d\xc0\xf8\xf8\xd4\xa0\xf0\xf57\xe7\xc0\xdbw\xfeV\xcdR\xb9J\x0b\x02\xe5\xca/a\xed\x97\xc1j\xc0g\xf9\xb4\xcd\xe0\x96\xb7\xef%l\xf6\xdcE\x9a\x039\xf7\xd7YL\xc6\xbb~k\x1f\xbf5\xf2\x1c\x11\xd3BI\xb0\xc5\x16\xd5\xee\xf3\x0f\xb0\xdf\xae\xdf\xf6^GE\x11%\xcb\xcfgs;\xafWt\x87\xa5\xdb($a\xe3u\x08SR`\xad\xdd\"#A\xb4\xb8\x00\x9f\x1eoQg'X\xef$\xbe#\xa3$\x8c\x02\xbf$\xd5\xd7$\x1b\xb9\xdd\x00|\xd9\x83\x97\x11\x10Z5I\xed\x85\x04q\xf2\xcb<\x0e\xc5\xa6\x96=c|\xca\xe7\xc7\xfd_c\xd5\xe5\xe0\xdc\xf4l\x97\x0c\xd48\xae\xfd8\xae0Q \x96\xe5\xf2\x9cm\x12\x9a\xd9u\xb7\x03\x07\x13\xb6\xe3\x7f\xafY\x92v\x8a\xa0\x8f \xc9\x9eE\xc9\xbb\xcf]\xbd\xdd\x18\x87\x0d\xb2pq]\xa9\xde\x96F/1\xe1\xa0$\xe7\xe50$\xf3\x8d\xb8\x93\xa4\xa8\xe1\x96\x88V\xb5N\x05\x1e\x1a<5\xa11\xd9^\x96\x93-I\xca\xc7\xacG\xae\x84\x92*\xf3\x9b\xae\xb0\xa2[\x89\x15\xddn\xb2\xf4N\x0c\xb4\x8b\xd9&=>\xdbT\xe9g\xa9n\x1f\xe3j\xf7\x1d\x89)\xb6\xb9\xb8+F\xacLk\x0b\xa1s=B\xe7\xed\x19\x94O\x86R\x8a\xe6k\x1b\xd9\xb0RJ UU\xc1\xf3u\x9c\x143pVe\x99\xcdn\xde<;;\xf3\xcenyi\xbe\xbcy\xb0\xbf\xbf\x7f\x13_\x93\xbf\xf4\xcf8J\xdeI\xdf\x9c>x\xf0\xe0&\x16 \x94\xbc\xabM\xf0\x93\xa5\x05rc3p\xfcy\x91\xc6\x1be\xf9{^\x05QQ\xbcF\x94?\xdc\xef\xa3\x7f\x17\x99\xd5\xd3J\x16\x85\xc5\xbc^\xac\xe7i,\x9d\xdamD\xce\xbeO\xcfg\xe0\xec\xc3>\x1c\xd0\xff\x93\x0c\x06\x0bNm\x928\x0d\xdeu\xd3\xd3\xe9z\x97\xb1<\xe0\x12\xa4\x9b\x81\xf3|z\xc7\xbb\x0f\xf7\x7f\x98\xde\xfe\xf9\x8ew\xf7\xd1\xf46\x1cx\xf7\xf6o\xc1\xf4\xc0\xbb{\xf7\x0eLa\xba\x0fS\xb8\xe7\xdd\xbau\x1b\xa6p\x97?\xbd\x0bw\xbc\xbb?\xdf]\x1dl'\xde\xfd\xfd\xe9\xa3\xfbp\xcb\xbbw\xe76\xdc\xf7\xee=\xb8\x07\xb7\xe8K\xb7\x82\xa9w\xb0\x7f\x8b\x0e\x07\xf0\xd9\x01\x1cx\xd3\x07\x0f~\xbe\xff\xc3\xed`\xe2\xdd\xb9s\x0b\xf6'S\xf0\xee\xde\xbe;\x99\xc2\x14\x1fM\xef\x05\xfb\xe0\xdd\xb9\xfd\xc0\xbb}p\x9f\xde\xbb\xf5\xc0{p\x87>\xbd\xb5\x7f/\xa60\xf7\xbc[\xf7\xef=\xba\xe3\xdd\xbdw\x00\xd3\xfb\xde\xfd\xbbS\xb8\xeb\xdd\xb9\x03\xd3\x07p\xcf\x9b\xc2\xf4\xc1\xea\x8ew?\xa0\x9f\x80}\x98\xd2\xcfL\xe8W`J\xbf3\xa9>swB\xbf\x13xw\x0enO\xbc\xe9\xdd{\xde\x83;\xb7&\xde\xbd;\xec\x07m\xee\xee\xcf\x0fh\x97\x1eM\xef\xc1}\xdaG\x98\xde\xf5n\xdd9\x80\xfb\xc0&\xec\xdf\x9d\xf9\x1f\x8d>\xf8\xca_\x9bu\xff\x93\xac\xe0\xf3\xe9\x01\xdc\xff\xe1\xfe\xcfw\x10l\x10\n\x7f\x82\xd5\x97\xe4\xb9\xb8\xc4\xe2\xdf\xf6n\xdd\xbe\x0f\xd3\xdb\xde\xfd\xdb\x0f\x82\x89w\xfb\xee\x03\xfa\xff\x93\xa9wp ~\xdd}p\x0f\xf6\x9fQ4\x98z\xf7\xa7\x0f\xe2\xc9\x81w\xf7\xce\x94\n`\x07\xdaW\xf0Q\xe3\x1f\x04\xa0\x98B\x1f\xc7\x07\xde\xbd;\xf7'\xb7\xbc\xe9\x9d \xfd\xf9\x00\x7f\x1e\x04\xb2\x97\xee\x8b\x97\xaa\xdb\x80\xb7\xc5\xcf\xaa\x83\xf7\xbd\xe9\xfd[1vor\xcb\xdb\xbf5\x0dto\x80\xe8z\xf5\x9ca\x1a\xed\x1d\xf6\x89b\xc2\xf4\x0e]k\xf1;P\xbe\xf2)0AY,\xf7\x12\xf8p\xcb;\xb8\x03\xd3\xfdgw\xbd\xe9\xfe\x038\xf0\xee\xdc\x0f&\xde\xc1\xdd\xfb\x13\xef\xe0\x1e\xffqo\x1f\x17\xf7\xc1\xbd\x07\xe2\x81wo\x7f\x8a\xff}p\xf7\x01\xec\xc7\xf7\xbc\xfb\xb7\xe0\x9e\xf7`\xff~@!\xbc\x83{S\xfc\xef\xbd}:[\xf4\xc5x\xd2\x80\x99\x08 \xfa\xe9)\xb6\x83\xdf\x11\xed\xd2\x15\xec4\xfcL\xf4\xf3\xd3\xce\xfa\xa4\x1fyy\x89\xa9\xbf\xe7\xdd\x9e\xde\x07\x9c\xf8\xc0;\xb8w0\x11\x93\xc6~<\xb8\xf7\x00\xf6\x0b\x9c\xcc{\xfbS\x9c\xc8\xbb8\x91\x0f\xf6\xef\x03\x9d\xce\x00\x97@\xcc\x14\xfb\x81/q\xa0I\x05\xd4XQ\xfc\x14N8[\x81~\x93\xb8\xf3\xe9t\xc7\xd8\xc1\xc9=oz{\xfa\x81\xe6\xfd6\x1c\xdcV\xcd;/\xcbqe\xd3\xfd\x00\xeemo\xffp\xc7\xbb\x7f+\xbe\xe5!)\xba\xf3\xe0\xd9}\xb8\x1bO\xee\x02\xfb\xdf\xd4\xbb=\x9d\xd0\x7f\x9eQ(\x98\xde\xfa\xe1`\xfa\xf3\xbdO0t\x16\xf1~e#\xdf\x87\xe9\xfd\xd5\xed\xed\xe4`5\xb9\xbd=\xf8\xf7\xf3[pw{\xb0\x9a\xde\xff\xf9\xee\x0f\xb7\xfe\xbd\xbe\x05\xf7V\xd3\x83\xed\xe4\xe0\x87\xbb\xdb\xff\x8f\xbdw[r\xe4F\x16\x04\xdf\xfb+\x90l\x9d*\xb2x\xc9d\xd6E\x123\xb3\xb2\xd5j\xe9\xb4\xd6T\xdd2\xa9\xfa\xcc\xce\x90\xacj0\x08\x92\xa1\x8c\x9b\x10\x08ff 5\xd6\x0fk\xfb\x03\xbb\x0f;f\xbb/\xfb0k\xf3\xb2f\xfb\x0b\xf3)\xfd%kp\x07\x107D0\x98U\xea\xd3\xe7LS\xb2\xca\x08\x04.\x0e\xc0\xe1\xeep8\xdc\xcf\xeb\x9d\x1d|\x1c\xc5\x84Q\x18D\xfd\xf3O\x07\x13\x9a\xa6\xfe6\xaa\x9f+G\xfd\xe9\xd9Y\xd5\xa6\xd47\x1f\x9e9\xce\x95\xd5\x87\xe9s\xc7\xb9\xb2\xfa\xf0\xb4\xbaCK\xf1\xc3\xf3j\x13\x81\xf3F\xa5\xdd\x9b\xa9\xba\x9e}\xee0u\xdddA\x80\x9f\x9f\xbb\x82\xedxq\x18\xc6QH\xf9\x8d\xce4\xad\x1c\xc5\xba\xd4$\x9ekP\xd5\x0f\xce\x10R\xee\x91+\xf5\x19\xdeX\x04\xd1\xbb\xf5[\x0c\xd7\x95\xd0}\x8b~\xd6_D|\xc3\xe0\xc3|\xa9S\xfc(\xf0#\xf6*^3rEN\xa6\xa5T<\x0d\x85G\x9d\xbeR\"(\x1e\xba\xaa'\x9d\x8aJv\x86\xa7\xa7\xe6\xc5\xb4x\x9f\xc4[N\x93\x9d\xfe\\x/\xa0S\xbd\xf7\x1b\xe7-\xa9^\n\xe6y=rrE\xc4}\xc2\xe2\x0d\xea\x8c\xfa\xa0\xb1\x19\xc1\xc1qOOWoP\xedL\xc4nIV\xe9\x89J\xa3:\xcd\x8b\xb9\xc9\xe6\xd7\xbb\xa6\x92c\x93\x9c\x056-\xad\x8d\xba\xbd\x1e\xef\xc1\xd5\xc9\x8c\xb3~0gK\x03O\xcaD\x1f\xae\x1e\xfe\xfc\xbe\xba\xa4`\x08r\xf3\x11\x95\xb5UY\xc5\xfb\xc5\xa6G\x84\x15*\x1c\x95j\xb2\xa0tR~\xa9Z\xcb\xfa+\xb80\xc9\x06D\xecx|\x0b\xfd\xfe\x8a\xf3\x98\xf7{\xff\x81\xc7\xd1\x96\xfc\x993\x85\xdet\x15\xb0?\xe3\xa1\xa4\x18\x11o\xc7\xbc\x1b\xb8\x9c\x7f\xea\xa1\x13\x8e\xea\xbd0\x8b\x9f\x18\xabF\x8d\x8cM\x1a\x8c\x88\x02[\xab\xe7!\x87V\xe4\xdc\xb0\xfb\xb4_\xfc6\x98lb\xfe\x15\xf5v\xb9-{m\xd5`sy\x99y\xb4\x84i\xc4\xa6\xcd\x1b\xd7Z\xbf\xbe3+\xc4\xd2\xaa\x10\xc6\xa6\x01W\xd4\xef\x8a\xb4\xde\xf93\x8a\xb8\x82\xc1\x87zj\xaa1\xa1\xfcp\x9dj\x06#\x8d\x99\x9e\xae\x18\xf29\xd5\x91\x16\xedU3\x1eK\xd3~4\x18\x91H\xd3\x89&@\xf4\xa1Z\xb7\xde\x01:!\xb6W\xd6\x94~@\x14\x86\xcea=\xe5\xf5\xa4RZG\xe4\x1b\xb3\xbc?\xe2\xb8D\x15\xbax6\xfa\xa0\xa1\xea\x06\xe2\x03\x06\x0c+\xee2l\xe0\xf7+\xe6B\xd1\xa7M\xe1u\x92 ?H\x0dC\xfe\x15\xf9(|\xbd\x81\xa1?u\x1e\x07\xf85%\xa6%\xb1)D\xfeE!\x01\x9c\x8e\xc4\xa6\x97[&~\xcb\x19U\x14<\xb6/\x0ebZ\xec\xb6\xaf$\xa7nS\xe3\xe0\xba\x9b\x98\x93\xbe\xe9e\x0e\xe1Hk\xfc\x03\x16m\xc5n\x04B\xca\xd9\x08D\x92^\xef\x82\xc4\xe3\xf1\xc5\x80P2\xbc\"|\xce\xe6\xfeR1@\xb6T\x8d\xf8\xc3!\xb6\x84]r#\"-\xcea\x1d\xfa\x8f\x0b\xf7x\x9a\x03>\x1c\xfa\xe4\x92\xc4\x17\x03\xd2\xc3\xa5\x80\x8e\xf3m\x17\xc85\xf6\xaa\x80\xa0\x06\x19U\x16s\x0ej`\x9a5\x8c\xc1Q#\xf0\x91\xb0s\xb2\xa3\xa9\x0bC\xd5\xa7,b\xa9G\x13\xf6j\xed\x92=U\x0e\xce\x92\x80z\xec\xabH\xf8\xc2g\xa9K\x12U\xd9\xb0\x9a\xdf\x8b0\xa8\x8b\xa4?\x17\xb4\xfa\x19J\"?e\xb1`o!\xa6\xd5a\xed~\xef2/\xf3rQ\xd8\x88\xbe\x1f\x95\xeb\x03\x95QG\xb2\xd3\xbb<-\xd4\xda#C\x92b\xf6r\xed\x1eR\xc4.5\xb2\xb9Xj9\xeb\x9a\xf4.\x13\xce^^\xaa\xe2P9\xed\xc3g-\x17\xc0u\xe6\xcbS\xf8zy\xaar\x16\x00 3\xd2\xebR\xb02\x0e\x1b\x16y\xae\x85=R2`\xe0\xe2\x0f\xdeH\x91F\x08\x1d;\x17\x8ekjkX\x1b\x8e\xc305\xeb\x93\x80F\xdb\xef8\xdb\xf8wu\xc9)Q\xe4\x9a\x86\xa9K(Q\xdf\xc1\xc9\x0c\xf8\x9f\xd1\x19'i\x12\xf8\xa2\x7f\xbaH\x87\xa7\xdb\xc1@\x87\xf2\x86H\xde\xbc\x1f\xe0\x12\xc6\x1e\xbe\xf5\xb2T\xc4\xe1\x88x\xf3\xb3\xe5\xc0\xfa\xb1p\xe5\x99\xab,\xcb\xca8\xd4\xed\x17U7\x1f\xe3\xd1\xe3U\xef1\x19\x92\x1d\x0c\xbb\xdf\x8f\xfb\x9b\xc1@\x8d\xf8\xe3\xde\xe3R)\xa7)ia\xc6\xd5\xbc\xad\xd5L\xc1\x0c\xf6\xa3\xc9\xce\xdf\xee\x02\x88p\xf4\xe8\x11)\xbcj\xc3\xd5B\xca\x88\xcc\x133\xd90\xeb\x1e\x15}o\x80n)\xfa\xf6\xd3\xa0\x15\x83\x1c\x88\xa1\x87DK\xeb\xd9d\xc7\xe8\xda\x8f\xb6\xb5%\xd8\xbabv\xaa\x0d@\xc7\xdd\xb7l\xcf\x02\xecb\xb95S\xf1\x91k\xd1Yum\xad\xef\xbap\x00c\xda\x1bM\xeev\"\x0c\xfe\x98\xc1\xb1\xed\xe5\x8e\x93\xd3\x97=X\\;\xfe\x12<\n8\x87k\x95\x05\x01\x13o\x03?\x15\xdd T\x168\x08S\xa1\xa2#G#\x0b\x9a\xa7\x13\xea\xf3\x05\x0b\xbbC\x17\xf8\xd5Y\xca+\xa9A\xd6\x0cU\xe0\xd7;\x19s%\xaa\xad\xdd\xc3\xd5&\x98\xaa\xb9v2\xc0\xdee\x1c\xe8e\x03\x95\x93\x97dJ\xae\xc9c\x92\n\xca\x05\xaeP\xf3 \x96&FTu#L \xbc#'!n\x99\x04E\xb5`[\xdf\xa9\xcfE\x06!\x80\x0c\\\x93\x1e\xa2bR\x9d\x99\xbc\xe6N\xe0\x9a\xe1<\xe9\x17jW;\xe659\x07\xe1\xf1%\x05\x1b\x10\x03\x07R*\xce6\x06\x06\x0c\xf3\x15\xbb(\"\x8c\xc1\x11\xcb\x8cV+\xf0C\xba\xed\"\xb2\x9b\x01|LR\xee\x95 M\xb9\xa7\x01\xad\x8fS\xf6\xd0!oX\xbd~\xb85Q\xcf\xfa\x8f \x0d\xf4hc-4P\xf3\x80\xcc\xd5$\xa0]1.\xe1\xc7\xbd\xc7\xeaO\x86\xeb\xbfH\xbf\xc9i\xaf\xb0\xd0+#\x04\x11D\xbb\xd3C\xc8^'\x16X\xcb\x113\xd5T\x8f\xe2\x81G@\xa3\xb27\xd5r\x0c4\x0d\xf5\xac\xe2\xf5\xfd\x11\xd0\xa8\xecM\xb5\x1c\x03MC=\xfc\x08Pxm\x9e\xf9Q p\xd7\xa8v\xa2\xd8\x1d\xb8\x94\xd8i.E\x03\x7f\x1bi\x0eu\xaf\xd6\x8d`wb\x0c\xa93\xa43\x98\xa3\xca\xac\xea\x90\x1d\xd3\xb7]\xad|\x1d\xe5\x1e\xda\xb3\xf5G\xee\xd9qh\xbc\xae\x96O\x05\x8f\x1d\xa2jc\x15\x98\xbf\xa1\x96# q\xd7s\x8c\xe0\xc5BG\xe9# \xa8\x97_\xb3\xa0{\xf3k\x16\xb8\xca\x1f\x01\x80\xa3\x06?J\xbbC\xe0G\xa9\xab\xfc\x11\x108j\x08)\xaf\x0b\x15\x8d5\xa8\xdc\xce\x1a\x8e\x00\xc2UG\x9a\xad\x0e\xad\xb5\x1c#\xb3U\xf3f\x1e>V\xebN\x8e\xa8;i\xab\xbb&`\xee(_\xaf\xb4.\xf1\x90D\xa1\x1b\xa9\xec\xa4Vj'\xb5\x88P\x12\\9\x88l\x1ao\xc4\xd1M@\x81\x94\\whM=\xd6);\xbb\x13\x1d\x07\xad2T\x95\xf1\x11a`N\xcb\xbaTV\xac\xaa^\x93\xa0\xdb\x0f\xae\x87\xaeVu\xae\xd9R\xd3\xe3KU\xe2\xa0\x14\xf7\xf2\xb1\xa3\x99#\x16\x85\xca_SB\xc5\xb1\x88b\xc1\xder\xb69\x04\xad\xe1D\x7f\xc8\xc2\x15\xe3\x08\x9f\xbf&C2\x1dLD\xac\x1d\x938N\x97\x95\x88\xdb\xdbD\x9cm\xc0\x10\xdb\xc9\xc4P\xea\xcdV\xdf\xac\xc9Kr\x06G\xa6\x9c\x0c\xafHof\xf5\x0c\xf0u0\"\x8f\xd5\n2\xea\x1f\x03\xffX\xd5\xfe\xd2\n\xfd\xbf\xdeD\x8fuL\xdf\xc7=\xe2\xaf\xaf\xac\xc4\xff\xb8\xf7rn>\xf5\x96Jxw.:;.\x80Y]wD\xba3eI\xf8\xf1\xe5\x8eW\xc1M\xc7)Kz\xb0N\x14\x1fn\xce\xa22\xc0\xec_\xa6\x0c\x9a\xaeeSY.\xe3\xa0^\\m\xa1\xa1|k\xcf\x8e\xc0\x9f8PM\x9dj@\xeaT\xc4\xd6|\x14\xea\x07>\xcc\x0fNX;j\xe1l\xd6\xa6\xde\x17,\xac-\x0e\x0b\xcc\x11\x1dt\xe9Kl=4\xf2v\xf1\xc1CE\xb3Fr|o\xefR\xd7\xc5\x105-\x06\x92\xe3|\x01\xe3\xabC\xb4\xa2\xde\x0d\xac\x90\xbf\xfe\xaf\xffM\xe1|e\xb0\xd6\xc7\xc8(\x0e\xcd\xd9\xfa\x08\xcd\xdbZ\xd4D\x9c#\xf6^\xeb\x9a\xb0\xb9>N>rC\x7fL\x0d\xc2Q\xc3Q\x02\xf3\xba\xb2\xe9+\x1f\x03\xa5\xe4\x8ad\xc5\xf3\xc3.\xcb\xa8_\xe4\xa4\x84\xf5]\xc4\xa9\x90}8\x8c\xc8\xcb+\"\xf4\xe9\x1a\x19\x93s\xc5\xc7\x15\x9b.+\xcaP\x13\x05\xd6\x07F\x0b\x85/FmU\xd2X\x89\xb9B\xbf\x82\xc6\xea\xac\x9c\xac\x99\xa5iU\x15\xafh\xcf\x8a\xf5\x9c\x97\xda\xd4 Z\xab\x85=Tip\xc5\xb9\xd4\xcf\xf78P\x03ri\x8f\x0f\xa1\xa9\x8a\n\xd5*\xd9\xecya\xaf.\xa7\xe4SS<\xa8\xcd \xf5\x03\x0f\xfa\xea\xc6]1\xb9\"\xf3\xda\x94\xcd{@\xa8{\xe8\xdb\xff\xec\xf9\xc0q\xf03\xef)\xden\xb2\xbcpg\xe1l\xc38\x8b<\x08\x13\x0f\x19?ug\xd4S\xaa3}\xe6\xced\xe9\xa2\xa0~`\xf2~\xde\x0c\xdc\xb9\xce3=k\x82\x0e\x8e-C\x16 \x03\xdft\xea\xce\x9a\x86\x94\x0b8\x06\xb49\xcf\xdd9\x03?\xba\xf17\xf7&\xd7\xd3\xc1\xb2\x94iy\xc4q\xbf\xc3z\xaahd\xc5\xcb\x84\xdc\x1ej+\x92pvA\x18\xb9$\xb1F\xc6\x0b\xc2\x86\xc3A\xa1\n\x8c$\x12\xcf\xd9r~\xb6\x1c\x11x\x98.]\xa6W\xc5\x03vm\xe5Q\"\x10.n\x84Gi.\xf8\x04\x9a\x02D\xe66X\x01\xa2-\x13\xdfg\x01K\xfb\xbd\xde``\xe1\x16\xe4\x92D\x17D(\xf0\xf9\\,\xfb\xac\xd1\x84\xe3\x03n\xc3\x95,A\x1a\xbb\xc6\x8a\x160\xd7\x84i;\x17\x1c\xcb:\xe1SC6\xb3\xd4\xcae\x01\xa9\x830\xb1I\xca=s\x88\xde?]D\xa7[\xbc\xf6:\x11\xdc\x0f]\xe2m\xc0\xf6,p\xde\xdeRm\xa532?\x1b\x91\xa9\x03?\xf3\xbb\xd8\xf32^\x82CWm\xc2h\x0c\x8f\x14X\xa3\xa2\xbd$\x9b\xb0h?\xb2\x1d\xff\xd8\xc6\xafO\xab\xb6\xaa\xdaJ\xe6y\x93\x91\x0c3\xa7\xb6\xbe\x0b\x0b)\x9c\xe6\xa6#\x12\x8c\xe0\x18\xbb~\x04\xfd\xec\x9c\x9c(\x82<\xf1v\x94\x7f\x19\xaf\xd9\x17\xa2\x7f\x96\x9f\x17\x8f\xa7\xf5\"\x9fO\xebE\xa6\xedE\xb4G}f\x1d\xe4\xf7\x96\xb3^{\x11j\x96x\xa1\x8b#2_\x0eF\xa4\x9f\xc1\xd5b:\"S\xe07gDJ\xf2\xfc\xb3:T\x19\xc8}\x8d\xcd\xc0r\x0c\xc8\x15\xa1\x93$N_\xd1\xbb\x11\x8a\x01\x8a\xc1]\x90\x94\\\x92@\xb1\xb0\xe9\x19\xd4L\x01E\x0b\xb5\xa7\x83\x0b\x92\x0e\x87naR\x873\x0c|\x8f\xf5\xcfG$\x1b\x8c4[\x86C}\xf3\x05\x9a\x1a\x91\xd4\xa0\xb9Y\xf4\xe4\x9a\x8c\xa7dF\xfa>l7\xd9\xde\xa7H\x07\xa5\xac\xa7)\xda8\x18\xe9;\xd8\xd0F%\xc7\x1c%Xo 2m\xe3\xc7+\xb2\x19(X\x1c\x14\xb0\x1bq(\xd0=\xf0'\x82Q=p\xa1\xb8\xccF\x0b\xb4\xa4~\xc9\xd8\xd2\xca)\xd2J\x9aKM\xd3\x12M\xac\x954\x0d8\x85*Z=\xde+\x89R\xd4\xca%\x8dR\x92\xaa\xc0J[.a\xcf\xfc\xa0\x03jY\xd3\x82\xc6\xe2\x82\xf0\x82pt\xd2\xef\xab\xf5\xed\xf7\xf9\xa8`R]\xa56\x88\xe3\x83\x8b\x01\x10 \xaeQ'68S\xb7\xd40\xbfb\xc3\xaa\xe4(o\\\xe1Q>\x14 \xde\xa1=c\xde=\x9bx\xc8[\xef/N\xf9\\6W\xcf\xa6U{B\xaa\xd3\xab\x86\xf8h\xed\xff\xec\xfc\xccIA\xd3\x9c\xbc\xd4\xccp\x14t\x9apB\xe4\x80\xf5\x88\xecFd?\"\xe1\x88l\xbb\xd1\xc5\x03\xa4\xf4\x01t1\xa8\xd3\xc5\xd4\xd0E\x0f\xe8b0\"g\xedt\xd1\xeb@\x17\x13rE\x02K\x17\x15\xd1\xf2\x90.n\xc8%\xc6p\xe8?=G\x8a\xb6\x86\xac\x15\xea\xb8Ac\x9c)R\xa4\xf5\xe0\x82lj\xb4\x12\xc8\x80\xaf\x00\xde\x1c\x80f\x0fM(\xc1R\xc7m\x1ca\xfc)\x03\xa4\x82px\xa5(\xc3G\x04\x0fZ\xb6\xf5\xed`\x1c7\xea\x91\"\xc8\xe4\x9a\xf4\xc3:`\x16(%O@\x86^\x0fSw\x83\x02|\x1a<\x07d\x17\x03\x05\x8c\x93\xad\xd8\xd2\x9a)9J[\xde\xb1U\xbc\xacoX\xcdtD\xbcA\x99M\xa4\x93|s2\xdf\"w\xa8\xa6\xb9.\xbe\xe8\xb8\x9c\xa1\xc3\xe4\x0d\xfc?\xecK\xe9\x8a7m>\x1eS\xf1[\x99\n\x10\xccB\x17\xb4\xc7\x8eR\x92\xb6\xa1>\x92\xff\xf8\xc7\xf3\x9f\"g\xf1\x1b8K\xce\x99\xfc\x1agr\xf2\x1f\xffh\xfe\xe3\x1f\xe2?\xe9/\xc4\x7f\xfcv\xfe\xe3\xbb\xf8\x8f\xff7\xe5?\x0fA\xc1F\xfc\x83\x01\x8fpw\x07n>\xec\x0e.\"\x97\x84_\x90H\xed\xe0JX\x01\x08\x16\xcf\xa3\xe5\xc0\xce\xba\x99\x07\xbd\x03\x11f\x00]\xbb\x10\x91{\x8b\xfb\xd7\x1a\x0d\x90\xcaK\xdb\x0c\x18\x80\xfar\xc2{d\xb5\xf4\xa4b\xf8LJ\x0b\xd9\xaa\xd5\x816\xb1\xfc\xa2\x9a\xddx\xd6B}\xb5\xe8\xdfz\xc5c\x17\xa4\x06\x85\xf5\xc7\x8cB\n$t\x85\x8b\xe6F\x1cF2\x0f\xe8\x8a\x05#r2\x053\x1cGUE\xfdV\xb9\xae\xe9\x88$Z\xce\x0e\x14IMM5}`'z\xfb\xcc\x06#r\xb2\xa9^$\xd2\x93\x9d\x0f\x05\x18%\x0e\\\xdd\x04\x04\xa4\x96\xe4\x95K\x8c\x0en\xd6I\xbeaw\x9c\xc348Q\xd1\xdbpo8\xac}\x06/Q\xb9\xb2\x83:\x15\x1an0\xa0']\xe0%\x0e\x98[\xa0%\xfa\nmK\x90\xc3\x96\x0e\x11\xdd)\xdc% *^\x93>lG\xe7\xcbAG8+\xb4\xbf\x19\x12\x81\x0eh\xda\x82\xcdv\x006\xeb\x08V\xa3\x8e\xc6\xfc\xac\xae\xc6eEh~\x06\xa0\x96j\xac\xfa\xa50\x8c\x1f\x0c}\x95U~\x8cQ\x1d\x8f\xbd\x06\xb8\xe0\xe2\x8a\x82\x1eh\x02\xd0&\x886\xab\xd7x\xfei9\xc8\x97]\x91ji\x83\xf5l\x80\xf2\x8c\x9b\xd3\x9b\xdcs[,\x97@\xac\xf6<_$q\xd2\xcf\x03\xbe\xc4\xf9\xbe3\x8b\x04\x9cg]\x17\x13fJ\xac\xe1\xa8%\xe5p\xa3\x87p\xb5\x1c\x1f\xba\xe6\xf0\x98\xee\xe1\xab\x0e\x0e\xd6Z\xc3|\x1b\xccj\x98\x12\xb7\x14\xe2#G-\xf6\xc9\x1ft\xa3\x84\xc4\xd1\xcbC\xb8u\x10q\xea4\xb2\x96\xd2\x0567\x95n\x83\xae\x05\xb2\nT\x1f$W\xd9d\xbb\xbf\xe6\xcd^\xfdruo\x7f>\xee\x0f\x16\xf3\xc5\xf2\xe7\xf7\xc3\xeb'\x93O\x16o\xe4h\xf6\xeb\xcb\x93\xc5b9\x00E\xf0b\xf1\xc9\xb4\xf71\xf6\x10\x0ey\xa5\xb8\xbb\xef\xb0\xb7()\xcf\x1a\xb6\x0dy\xce\xef\xd9\xf6\xab\xbb\x04\xc4]\xb8&\xd4\x7f#\xe7=\x08\xd2\xb8\x88\xfa\x83\xf9\xf2\xf1\xa27\x19\x9d\\\x8f{\xfafO\xaf\x87\xc1\xb7\xb8\xb9\xdb\x83\xa6\x82\xcbA_\x95*_t\xaeC\xd31n\x97\x9d\x804[\xa5\x82\xf7\xa7\x0e\xbc\x1cL\xd2\x98w\x0cN\xaa\xeb+\x9ck\x9a\x13@W\xbd\xa5\xeeI\xec\xdf\xa0\xff\xc9\x03\xc7\xa5g\xe4\xa3\xc2h\xa3\x82\x04_\xfa\xeb\x11\xe9m{j\xe7\xbb\xb1\x92Q\x9e\x17E\x933$\x98\xbb\x92\xc0\x1e\xa3\xc0\xee\xa6+\xd5\xed\xdd\xce\x9c\xd5\xba\xf3\x93\xe2\x86\xb2\xafH>\x14\xb0\xd2{eo\xf9\x12\xe8\xb2\x18\x8f\x9bk#\x06\n\xc1\xee\x84\xdeLP\xbd\xd9\x1b\x1c\xdc\x1b\x9a\x9f\xd5\x80\x9f\x8d@OF\xf3\xdd\xc6f\x12\xd0T|\x13\xad\xd9\x1d~\xf7\xb4\x0c\xb7g\x81\x11\x8d/@|\xdfL\xd8\x1d\xf3\xfa\x19\xe8-\n\xa5^\xa2\xfa\xfc \x95-\xfe4e\x83N5\xd3\xd9\xe2\xcf\x8a%\x99\xde\x98\x06#\x92\xa0>\x8d\x0cI2\x9f.\xf5\xe0v\x08EG\x0e\xf1\x99\xe2\xef=\xb8q>\xbeo\xd6L\xadc\x07\xb5\xb6\xc5\xb1\xde\xb5\xb8\x91\xcc\xcf\x97\x1d\xa2\xe7\x91\xc3\xf2b\xf1\xf7\xd0\xee=d\xeaT\x0f\xba\x15\xf9\xdb\xcc\xce!>_\xfc\x1d\xe0\xf9\xc5\x9f\x82)\x80\x05\x93/\x921I\xe6O\x0d\x8a6\xabR\xcc/-ho\xfa\x01\xb9$Y!\xe1!\xfd}\xc8t\xd9\x95\xf6K,\xa9\x12aT\x04\x0d(\x8d\x91\x98}\xdd\xf4\xd9\x08\\\x1b\xa4#bR\x04\xea\xb4\xdb)\xe6\x07 7&\xd5\x1cZ\x9c.\x86c\xb9\x98,&rq\x8d\xff\xc9\x93\x93\x93\x139\x1a\xc9\xf1\xf8\xb4~\x98q\xba\xe8\xf7=)B\xc9e2X\x0cN\xb7~\xfd`\xa3>w\xde\x8c\xf4\xfe\xfb\x7fsL\x11W\x1f\xfe_\xc7\x87D}\xf8\x7f\x1c\x1fD8#\xbd\xbf\xfe/\xffw\xaf\xf4\xa5\xc1\xda\xa6\x8b4\x95\xcbQ.iIk\xab\x8a\xbe}\x1a\xe4\xa5\xd2\xde\xa8\xc8\nS\xcd\n\xd3&VXc\xc4v\xd3\x94v\xe7\xc7\x19)\x97;\xcc\x96I\x91\xed*,\xcd,\xdb\x85\x95 gQ9/U\xafx\xd0<\xc8Oz\xfa=<\xa3\xb9&\x01\x99\x91\xc0J\xc3\xf1\xa8\xdd\xf6\xac\xfa\xd3\xd2\x97?\x17\x13\x11\x7f\x1b\xdf2\xfe%MY\xbfbtS\xfc\xa9e\xc6'\x82\xa5\xa2O\x07\x16^Z0\xbf\x18\x8eA\xec\xfe\xef\xff_oPH\x9d\xfc|>z\x0f\x1f\xfe\xfa\x97\xffZ\xfc\xd2\x9f_\x9f,\x07\x7f\xfd\xcb\x7f\x85\x8f\x9fL'\x93\xfa\xd7\x9f\x9f\xe9\xb2\x9fL\xd5\x7f\xc5\x0c#[\xef\xa8T\xee\x8d\x9c\xbf\x19/\x07\xe3\xf1\xb8\xaf\x1e\xe4'\x83\xd3m\x085\xfc\xf5/\xff\xfb'\xe7\x95\xbc\x8bt0\x1e\xf7\x17i)\xdb\xffV\xcb6\x7f3^\xa4\xaa\xd2>>\xd5\xb3\x83\xff\x96\\mM?\x8an\xd5\x12\x8d\xf9\xe3\xde\xd2E\x1c }[\xa7\x08\xa7\xf3\xf1\"\xc5\xdd\xd1\xf2\xd4\xb5\xc3\xa2m\x16\x8a'}a\x0e\x02\x01\x7f\x8d`\x0e\xd3~\xe2#\x120\x85\xbc\x85N\xd6\xdb\xc8\x0e\x98^\xdb\xad\x04\xd0em\x10k\x13\x914WF\x91<\x80\xde\xf8\xceM\x9b=\x92\x1d\x91\xfb\x11Y\x8d\xc8\xdb\x11\xb9\xfd0\x82t\xab5\xbf\xab&\xc2\xb4\xd2\xc4`u.\xc5\x9a\xccFaK\xaer\x88a\xe8\xb60tx\xfct;\xdf\xea\x9c\xe4\xf2\x8al\x06\x17d;\x1e\xb7\x9c(\x99_a\x0c\xb6\n\xb9P\xae\xd2\x9b\x14\xd8_\xd9\x15<\xe8,[\xb1\x19v\xe1\x82(\xc1\xca\x03\xc2\x18\x97vAz\xe3\x13\xe3\x86\xc7\x1f\x0c.\xda\x87\xd9\xfc\xc0\xd7\x07\xb9\"'\xb4\xafPX\xefN\xc6d\xaa\x05\xc2\xd4\xeeW\xa6#rO\xaeH\xef1NL\n\xa6\x89\xa0:\xc0\xb2\x01\x1e[']\xe6\xc3\xfcT\xeb{U\xc3zDB\xf57\xe9\x06\xb5\xf9\xc1\xa0\xb4\xcdc_\xcd\x83\x9a\xcaQeJ\xc9f\xa0\xa7\xf4\xa8\x06\x89\x06z7I\xfdh\x1b0\x18\x8a{\xd5R\xa1r\x95\xb69f\x18\x8a\xbf\x1c\xe0{rM\xfao\xe7;\\j\xc5\xe3\xca\xcc\x91<\";\xb46\xc8\x89 Z\xc4\xce\xcf\x97\x15\xb6\x91\xf5\x0b\x02\x80\x9e`G\xb9\xa7K\xd0&\x7f\x0c\x10\xce\x1e\x08\xc2t\xa9X^qI\x1d^+\xae\x9fj\xca\x8f2V \xbe\xd1\xe5WW\x836\xfd\xf6\xe4\x9a\xdc\x1e\xb3\xcf1?\x18\xc5V\x1d\xb4\xeb\x97\xc4\xe9\xcc\x0e\xddQ%\x11ug\xc4\x11\x07\xbb\xed\xa7\xf7J\x9b\xce\x85\xc0j5T\x8b\x03VH\xff0\x02\xf4\xfe\xfa\x97\xff\xe2\x8a\xa0\xea\xfa\xbd',H\xd9G\xad\xfa\xa3\xee\xc1\xc0\xc0\xbc\xea\xf8\x15\xe4\xa9\xdb\xdb[\xf9\x1b\xb9\x98-N\x17\xa7N\xb9\xc9o\xd4L\x9f\xbe\xb9\\\x9c\xd2E\xfa\xe4\xe5\xa9\x91\x90\xda\xc5#Z3^7F\xe8s\x87^CX\x0b.7\x06\xab\xce&\xe82\xaa\xf9\x9c*\xe3\xc1\x8c\x9c4\xc4\xae`!\xf5[>\x8b[_\x08\xc6\x9b+\xd7\xf2\xf2\xd7Q!0g\xd3\xdd\x16\xf3Ko}\xe1\xed\x14\x92l\x99x}\x9f\xb0\xfeA\xa1\xc1\xa3)#\xbd\x8c\x07\xbd\xd9Add\xc7\xacy%\xb2\xccH4\x81\xc8dl\xfd\x9a\xddu\\\xf60\xaa\xd0\x83?\xf1\xc0\x11\xf9\xa6\xfak:w*\xfe\xe0\xc2n{6\x1c\x08\x98\xb5\xbf\xaf\xa1\xe8)\x90D\x0cjF\x18\x96\xafTB\xbf\xb0\xa3z\xa3s\x9c\xfa\xa3\x92[\x9b\xa6\x9f\xe3\x0c\xcc~j\xfcb63Sg\x8ez\xb9\xea\xb4\xe8\xf2\xf5\x11\x0b\xfc\xe8&\x9d\x11V\x1f\x12\x9a\x89X}U\xcb\xa4\x1c\x93\xda\x15L\xea\xd8\x8d\x0co:\x80*\xeee\n;\x80:|jg\x12eA\xab\xe2E\xdf\xc3i\xd8\xe3\x14,\x95\xee]\x96J\xce\xb1\xaemk\xee;\x1e|\x14\xb6+\xa0o\xb9\xffX\xe7\x1f\xb9\xdb\xa0\x1eXD\x822);\xea\x14\x04\xea\xd1\xb7\xd0\xb5\xdc\x9d\xabr\xb6 \x9f[Vw\xfa\xe6\x92\xce_.\xd2\xa5a\x0d\xdb\x01\x1a\x87\xea+\xa3\xbb\xf1xD\xfc~\x9a;\x18P\x89\xc3\xe1@\xc9\xc6\x90\x0bR\n\x9b\xaf\xbc\xad\x18k\xcc\xcbv\x01\x9e\xe8\x0e\xac\xe0\x90Q\xc9\xf9}\x85\x1b\x14.\x13(\xf4F\xa1\x7f5\xc91\xda\xee:l\xaf\xf6\xa5=e\x08\x05\xfb\x81\x82yo\x15\x06F\xbc;L\xf1\x88\x99tOo\xa3\xd7\xd0\x9a\xde\x11np\xc7\xba!\x97\xb6Y4\xbe\xcdM\xdf \xce%\x15\xec[\x05\xc6~\xbeYN2\x1e\xa0\xa6J\xdb%\x1b-\x1a|\xd4;T\xf5Y\xb5\xb4\x1e\x11\xef\x18\x12I\x1e\xa4\x0d'E\x8dx\x90\xab\xa5\x93\x8eJq\x92\x0b{\xebN\x05 \xb2\xc0C;f\x1d\x8c\x1d\xd1;m\xcc\xab\x87\xbf{9}`\xd5f&T\xfd\x99\x81\xe8p.E\xb4\x02\xf3\xa1#\xf1\xd0)\xb6\x98\xd6\xbd\xec\x91\xd3\xfb\xf0>\x15h\xe0\xd1\xd0\x8d\xc7\xdd\xe1\x0b\xd0\x92\x1eP=!\xc3|L\x0c\x91\xe8 \x0e\xa9_P8\xb4zh\x9f\x1f:\x8fG \xf2\xd1\xf3w_9\xbb\xcaJgWY\xf9\xec\xca\x1b\xd9\x834}vu\xb0\x9d\xf6m2\xee\xd5\x0eV\x82\xe7\x1e\xe3\xf1\x05pI\xadM9\xb9\xb2\x14\x9a\xe0\xadmC/\xe0Sf\xac\xd7/\x06\x8a-\xdb6:\xed\xe0\xf6:(\xe2\x88\xf89z\xc4\xfa\xe6+\x1a\xc0\xd9\xe2U\x8ew\xfa\xe4\xa4\xdc\xa1'\xe4\x0b\xcb\xc7&?\xa6\xd5\x8fg\x93\xe9\xf3\xc9\xd3Jj5\xd3\x97qr\xcf\xfd\xedN\xf4\xbd\x019?\x9b>'\xff\xcc\xd96\xe6\xf7\xe4\x7f\xa2^\xbcJ\xc9\xe5\x96\xb3\xedo\xd4?\xe3\x1f!e\xe2\xc5\xe1\xcbj5\xaf\xbeyM\xbe\xf5=\x16\xa5l=!\x85\x18\x86j\xdc\xd28\xe3\x1e\x83X\x86\x01\xe6IOC_\x8c\xf5\xcb$\xd9%\x07\xa0T\x15\xa6\xb3\xd3\xd3\xad/v\xd9JAp\xaa B\x80N\xdbF\xe1\xb4\xf4\x0e[\xd1Q\xd9\x80\xbd\xddF(\x9e\xfcI\xf8\x81q\xb0\xae\x9d\xe2W\xac\xc4\x9c\x02v\x9c_\x94v\x9fe\xc6Q*x\xe6\x89\x98\xcfH\\_\x88\x19\x0fR\xf7\xb6\xb5eG\x9b\xeff\x1d\x1f#v\xfb\x1f\xfch\x1d\xdf\xba?\x97\xb7\xda\xae\xcay\xa6\xd6.\x9b\xe9{3\xf5\x1c\xc5X\xac.'\xd0\"\x0c\xbe\xa3\x14\x9d\xf8\xe9\x97A\x9c\xa2\x13\x9ck\x18\x89WT\xec&!\xbd\xebGj\xaf2R\xd2\xfc\x0cvK#\xa2\x1d\nT\xfd\xd5\x17\x7f\xa0KC0\"\xe1\x8b{\x0b\xc51e\xf1\xeeV\xab.\x86\x98\xcb\x8bfz\xf5N\xf0\x07\xc1[\xdbP?\x0dJ\xd0\xb2OGX,\xcc\xce\x8cnV\xa5\xe9\x04\xb7F|\xb5\\\xef\xddX\x8d\xc0w\xc1mc\x8c\xa8\xb1\xfaU\xbe\xb6\nj\x0bf\x02w@\xa0,\xc8\xf3=\x94\xfb\x17\x1a\xe8\xa8\x03] s\x15\xef\x02#,=\xf74\x14\xc1\xb7j8bb\x19\x95\x93'\x1e\x0d\x02\x13%FS\xe9\xc1(\x8f\x86te\xa3! rM\x04\x99\x91\x13\xbco\n\xbe\\\xec\xe8\xa0V\x08\x8c\xc7\x05\xf1\xa3T\xd0\xc8S\x85\xe2\x89\" \xaf\xe9V\x15.\xfa\x83\x9a\xd9\xd1}m\x89R\x7f0Y\xa9\xa7>+\xfaY\xea2\x88%\xd23k\x16\x05\xcc\xcf\xa8V\x01\x86\x9c\xbc\xb6\x0e'\x83\xcd\xb1\xa3\x94 \xe0TH\x9a\xe4\xd0\x0cF\x8e\xb3\x0cw\x17^\x15i\xf8q}(\x90\xffc:Q(f{QH\x9b\x141\xbf\x99T \xcb\x85\n\xd5c3\xa9\xd5\x1c\x18r\xc2ssV\xcb\x91!\xb3~k\xce^b\xc2P\xa4\x90\xe2&.\x83#f\xe6u\x81q\x1e719\xcb=f^\xf2RvZ\xbe\x80\xdb\x11\x85\xc5\xd2<\x1f\x05\x81\x05j\xb3\xef-\xc3me\x14l_\xbf6\x17(\x88,H\x05\xcd\xfbQ\x83]Jy?\"1p\x99C\x9e\xb3H>n06}\x81j\xaa~U\xc0\x1c\x19t\xd6\xbe\x7f\xe2\xf2\xaa\xfd9\xcfPIS\xb2\xabS\xfa\xa4\xabTp\xea\x89WL\xec\xe2u\x07d\xc0\xa0f=S\xae\xd7\x05\xe1Ph\x9e\x1d\x1e\x04R\x94\xc3\"\xe2G*\x9b\x98\xech\xfa\xc7\xdb\xc8F\xa3\x8fP\x14a\xf3hI\xd0#X\x03\xfb6\xb8\xd8\x05Fv'X\xb4\xee\x08#\x80\x87\xf2\x1f\xcb\xc5\xfbf\xe4\xaan\xe7\xde7\xdc\xcc)m\x15\x1a\x16\x98\x91\x18AW]\x1b\x9b^a;\xd1\x1b\x00\x93*\xa4\x90\x0e\x13L@\xde)\x14\xd2\x81F\x90\x99R\xbe\xcd\xc01V\x83\x843(u\x01\xc2\x03\xb6\xce\x0d-\x81\x07q\x19\xe9$\xcd\x12\xc6a\x01\xe2\x0d\xe95\x0b\x98`\xe5\xae\x8c*;2\x8a\n\x84\xa8\xd3\\\x07\x81\x9f\xa4~:k\xdd\xa2\x17\x7f\xd6\xa4K\xebh^b\x90\x04\x98\x83(\x0b\x02%VD\xe4\x9a\xf4&\x93\x9e\x12~1\xbc\xa21\xf6Rl\x1f\xf4\xfcc\x12Y\xd5\xf1\x90D] \xb6V\xecvDN%\x0f\x7f\xc19\xbd/x\xe8\xd25\x0c\xf2\x8e\x18eq5r\x83\xf9\x15\x96\xa1\xdd\xeb\xb0\xceG\"\xc4\x9c\xbb\xc0\x1aU\xd2\x95m:j\xc5\x87q\xfd8\xcb1 p\xff\xe5\x8bh\xfd%MD\xc6\xd9\x11\x03s\"&\xdb ^\xd1\xc0\x11\x9e\xf1\xcfP\xed\xf7l\xcb\xee\xfeL\xc2,\x15dG\xf7\x8c\x88\x1d#\x8f\xb7\x8f\xc9&\xa0[\x92\xb2Z`F\xf3\xcbG\xac\xb23\xbc \xb8T\xc1@\x8a\x81\xcf\x00}\xb9\xb9\x80\x1f\xf1\x08\"\xe9\xad\xd9\xdd \xdf7Eh\xbf\x82\xe1(\x8c9\x94Jl\xb5\xdf\xb2\x1b\x8az#Pw}\x84\xeb\\\xc6H\xb9Wf\x99!}\xec\xe3m+W\xdc\xdc\xdb\x9d/X\x9aP\x8f\xc1\x08\xce\x08\x04dr\xec\x0f\x8a\xfa\x8e\xc3\xdb\x02\xb7\xde\xc5\x86+\x8d\x18W\xa0\x1a9#O\x90\xb2\x98\xf2\xfa\xd5\xb7\x9d\xf0\xcanw\xbb\x80V\xdc\x96\x08,\x86\xa1UE12\xa5\xf95\nb\x95\xe6\x8eiMJ\xd2\xeb\xc4\x81S&\xbe\x10\xe5\xbdb\x87\xbbkzC\xa3J\xa6\xfd\xc1\x9c-\xf30\xba]\x1a\xdd\xd6\x1b=\xba\xc5.\xed\xe8\xce\xa5]\x1a\xaa*xtK\xad\x0b\xa9\x82\x829\xfeu\x01n[\x07\xae\xcb PU\x06d\xe8\xc2\xebU)\x0c\xae\xf9\xb9G\xe4K\xc5>\xbb\x8cH\xb1U=\x92\xfd\x1e0\xdf^M\xc3I\x1a\xe4\xbb\xf5\xbass\xb9\x9a\x0d\xd5hf\"\xa0\x82\xfe`\x94\xc7^\xac\x10\x14\xd4\xaf\xe9\xb9\xd0\xdc\x0bo\x11D\xe0\xf8\x1d\xefDr\xb5\x13W\x94\x17\xef/\x98\xc4\x0b\x98\xf4l\x92\xee\xfc\x8d\xe8+\x12<&\xb8\xed\xf7QrP\xdc\x9c\"\xc1l\xe2\x88n\x1c\x9d\x189\x85\x16\x03\xcfu\xc5\x0e\xce\xc2x\xcf\xfe\xee\x07\x8f\x16oX\x95FR\x0de\xbbv\x13\\p\xe2 _\xc0\xa8\xc3\xb1\n\x8e\xb7j\xc1c\xfdtD\x1c\xd7m\xc9!\x8d\xd9G\x9d\x89m}\xc9tY1\xb5\xe6;\x93\xe4\x1dM;\xcf\xbb\x15\x8e\xd0\x9a\xa3GzdX\x9d|\xb8(\xdc+\xdc\xa5\x81LL'w\x81(e\xe2\x1b\xc3?\x8f\x80\xaa\xc6\x89\x8f\xe3\x80\xae&\x8fk\xb1\xf3\x90\x1b\x1d\\\x87\x96J:\x8f\xa2\x16\xbcE\xe5`\xb2\x83\xce\x0f\xb0\xe2\x07\xc1\x0f\xf0\x96y\xef\xb2\x87\xd1\x95 \xaa \xf5\xdcb`2\xd2{\xd9\xcb\xa3\xf8\xda\x91R+\xbdwy\x8a\x05{/{\xcb\xa3T\xc7%\xf0:\x0c\x05\x8a\xcd\x96\x0bYA\xbe\x1a\xc5\xcb\xfc\xaaC\xa7\xd7G\xfb\xc0\xcd\x97\x87\x84j\xe2G\x84\x0d\x08sk\x03\x84\x16\x98\xc9\x90<\xc6\x08\x0b\xb0\xf5\xc0\xa8`\xed\xf4<\xa7\x16\xf5\xd1+\xa5\xbcW\xa2xMou\x84\x88\xfcQD\xdf\xceS\xdc\xa5\x89\xa2\xd6\xc9\xc8\xfcm\xbe?\x8c\xb4\xda\xa3-f\x06\x14\xe5\x1d\x98\x7f<\x0d@\x14`\x85\xd3+T\xb5\xe3X\xfe\x9e\xb3M\x7f\xd0\x82 ~N\"\xa0R\xedoZ\xcf\x04\xbb\x13\xfdBm\xa8\xb7oROt\x19\xbd\x02\xcc\x1d\x05f\xb3On\x1e9bm\x87Dc\x1e\x07(\xe6g\xf9:\xc2\xf6e\x8a\xbcC\xed&\xdb\xe6\x95\x1b\x13u\xa3K1\x1b'\xabA\xd5\x190\xb6!\xb9\"\xbd\xb7\xab\x80F7\xbd\xae\xaa\x942<]P\xae$\x81[-k\xfb\x12\x85\x93\x9a\xa1\xa5\x8dC\xd2\x1b#s\x9bu\xa4\xfc5\x8c\xe9\x02\xa9Uek`\xd7\xf1k\xadF\xae*f\x89\xbb\xd5\xbc\xc0\x11\xcd\x19b\xa2uT\xf6X\xce\xa8\xb0\x15\xbb\xc3@\x1e\x93\xef\xfe\xf8\xc37\xaf\xbf\xf9\x97\xaf\xde~\xf3\x87\xaf\xbf\xf9\xc37\xaf\xffc7\n\xe6<\xd69\x82\x8c\xa9\xf2z\x8f\x0f\x1a\xfe\xd3\xfe\xf5\xac7\x7f\xd3[>\xb9\xee\xc9\xc7\xf37\x8f\x97O\xae\x1f\xcb\xf9\x9b\xc7\xbd\xab\xcb\x97\x7f^\xa4\xcb\xe1\xe0\x14\x19\xdc\xe9\xfc\xcd\"]\x9c\xf5\x1e\xbf\\\x9c^-\xee\xce\xa6\xe3\xc5\xdd\xf4\xeb\xc5\xdd\xa7_/\x87\xa7\x134\x0fQ\xb3\xdb\xbf\x9e-\x16\xe9\x93+\xf5O\x0foM\xdao\x83\xeb\xde\xa8\xe8\xcbd\xaer+Vy\xd9?\xf9\xdd\x1f\xbf|\xfd\x1f\xbf\xfbj\xa0^u\xeab\x91\x0e\xf3W1\"= \xeeQ\n\x15\xaa\xcf\x83'\x86\xdb\xe2\xbb,Tq\xd9?\x85F{\xe0o\xe6t~6\xfe\x9c\x8e\xdf}1\xfeO\xcb\xfcq\xb6|rZ\xad\xb3\x0c\x81\xb0\xad\xa8^\x9d^\x17\xda\xcb\xf9\xf7\x88\xf4\xb6~\xcfE\x0b\xd5\xa0\x7f\xb9\xa3\x9cz\x82q\x13Q\xddhZ\xfa\x8f\xa2U\x9a\\\xc8G\xbf\x9e\xbe8\xbb\x90\x8f\x02\xa1\x9e\xe1q\x8b\x8f\xe7\x17\xf2\xd1OY\x0c/O\x9f\xc1\xbf\x9f_\xd4\xaf\xdb\xab\x1f\x989tA\xd8\xd2n\xa4\xb0\xf7\xb0\xf8Q\xb2\x8c\x98//PUzb|]\x82\xf2g\xfe\xf4@nE\x10ON\xc4A7\x1bAE\x93\x1b\x8f\x88\xd0\x9a\xbaf\xab\x81\xc0\xaa\x87\x91c\xa91Ut\xe7\x8bh\x0d\x93w\xff\x87x\xcdR0'\xf6At\xd1Zv\x7fD\xa2\x81M\xec\x17h\xfeWh\xa4\xa1\xca\xf5\xb5\x8f\x81\x81\xd6\x0d\n\xab\x1b\xa4M>\x86H\xe3fJ\x89wq!@\xc9\xa1\xa9\xf0\xaa\xc3\xd12\n^\xb7Q\xf0\xdc\xa3pD'4\xed\xf4\xbbP\xe5\x06(\x8e\xc3x\xad\xdf\x8dr\xb2Y\xd1I[\xba\xdd\xbcp\xf5~]\xaf\x8f\xc8*\xd79Z\x0eA\xd0\xb1\xf3C\xd3\x01{\xf89\xef\xb02\xa29\x07/\xb2\xcd\xd3E\x0b\x92t\x01\xf3\xd4X!\xda)\x84\xcb\xdc\x99\xf2\x91\xecg\x0f\x99\xba\xbaX\xd4(m\x14V\xc2\xd1'85\xc3\x86\xe2\xb2j\x11|Adh9\xe1\xb3\x92q\xc5\xe1Ds \x0f\xad\xa8\xaa!\x83\xcc\xef\x18Q5\x1f\xfb.H\xdc8\x12\xf9\x0c\x1e\x1c\x88\x0f\x06\xd9\xe0\xd4\x87\x00l\xf1\xf2\xe3\x81\xfb\xabr\x06\x87\xb4\xa4\x1a^\x9e\x8e\xb4S\xb0I\xffz\xe6G\x82\xf1\x08\xbc\xf4\xd1@Z\xf2\xe7\xc7\x91z\x01\x92\x14\xf3T2\x95-\xe1~\xcaR\x99\xecb\x81^i\xeee\xc2\xe35fO\xe5&\xce\xa25\xd4$\xfd0\x8cW~\xe0\xb3H\xfa\xd1:S}`\xa9\x0ciD\xb7\xb0VU\xb9\x84q%tI\xc1\xbc]\x14\x07\xf1\xf6^z;\xee\xa7\"\xa4\xa9\xf4\xe20\xcc\"_\xdc\xcb\xb5\xcf\x99\x82\xe1^\xb2u\xe6a\xf5\xec\xa7\xccO\xa0\x1e?J\x85/2\xc1dH\xf9\x0d\x13~\xb4\x95i\x1cd\x08\xd1\x9eb\x81T\xae(\xdfR_=\xc4\x99\xf0\x7f\xca\x98\\\xa1\xa20\x95j\xfb\xaedf\xe9\x05\x8cF\xf8\x10\x8b\x1d<\xc4a\x92 \xc6\xe5\x9a\x85\xb1\xc7\xa9\x90k\x9f\x86q\xb4N%\xf4\xdf\xf7R\xb9\x8b\x83\xb5\x1fmS\x19\xf8\xdb\x1d\xb4\x9fP.\"Us\x12d\xe1\n \xca\x92$\x80\xber\xeaC\x13{\x16)y4\x95\xd4\xa3k\x16\xdeK\x8fr\x06\xd0\xc4aB\xa3{\xe9\xf1\x0c\x06{\x1d\x87\x007\xbbK\xe2\x94\xad\xe5\x06\x9aI\xe5&\x88\xd5X\xc9-\x0d\x02\xc6\xef\xe56\xf3\x05\xe5\x00\x8e\xbf\xa6\xf7\xf2\xc6WX\x11\xc9\x88e\xa9\xa0\\\xc67~Do\xa9\xe4\xcc\xf3\x13\x96J\xce\"A\x03\xf5w\xef\xb3\xdbT\xa6;\xff&\xddQ\x89\xce R\x009\xe6B\xa6\xf7\xa9`a*\xe9\x96E\xde\xbd\\1\x1e\xf8\x91\xf4h\xc88\x95\x1e\xa0\x85\xf4\xe2\xcd\x861\x85/\xeb8\x95\n\x05\xa2\xadd\xa9\xa0\x82I\xa6z\n\xe03.\xe4&\x13\xab8\x9074\xdb\xb0H\x06\xd9]\xc6\xefeH\xfd4\x8ed\x18G4\xdd\xc90KY\x16\xca\x88n\xe3{\x8a\xb8\xa6\xa0L\xa8\xcf\xd5\x1f\x80)\xf6|\x1a\xe0\xa8\xdeKA\x85\x88c)|\x16\xad\xa9\x1a\xe1=\x0b\xe4\xde\xa7?\xb2T\xee\xfd \xa0\xeaO\xaa\xd0f\x1f\x03d\xfb\xf8\x9en\x99\x04\xccF4P\xa3\xbfN\xa5\xb7c4\x91\x9e\xdaw\xc85\x8d<&a\xd1\xcam@S5\xb2Y\xaa\xd0,\xda\xc62\xf2\xa3\x1f)L\xb4^\x0e2\xdd\xc5j\xd4\xe2\x80r)b5\x03\"\xbe\xb9\x8f\xa5\x88\xe3 \x95\xb7j\x8d\xca\xdb\x98\xdf\xa4\x922\x1eK\xca\x13*i\xeaS\xb9b\xa9\x90+\xff\x86\xc9U\x00h\xf9\xee\x9d\x1a\xdeDzA\xb6\x92^\x1c\xabU\x19'rCy(7~\xba\x93[\x7f#\xe46\xe3\x99\xf4\xa3M,\x7f\x8cW\xa9\xbc\xf1o}y\xc3\xd9Z\x064Z\xcb\xc0\x0fc\x19\xf8\xd1\x8d\x0cY\x94I\xb5\x18e\x18\xaf\xa9\x8ch\xc8d\xa2\xf06Q_\x938\x15\xf2\xa7$\x8e$\xf7\xbd\x9d\xe4\xd9\x8e\xcb\x94\xdd\xddK\xe1'\xa9\x1a/\xa6\xfe\x89\xe5-\x8d\xb6\xf2V-\xe7[\xff\xc6\x97\xef\xe2\x88\xa9%%W\xfeZ\xae|\x05\xf0J\xad#\xe9\xb1Xa\xb0Z\xaar\x1b\xef\xa5\x1f y\xe3\x872\xf4\x03\x191!\xe3(\x901\xdf\xaa\xe5/\x93l%\x15\xc0\x82\x052\x8bby\xcb\xd6\xf2\xee\xeeN\xde\xdd\xbf\x93\xd4\x93t-)\x93t#\xe9VR_\xd2@\xd2P\xd2H\xd2X\xd2\x9f$\xe5\x92\xa6\x92\nI3Io%\xbd\x93\xf4\x9d\\Q\xb9Z\xc9\xd5Z\xae\x98\\m\xe4j+W;\xb9\xf2\xe5\xeaG\xb9\n\xe5*\x92\xabX\xae\xb8\\\xa5r%\xe4j/W\xb7ru/W\n|\xe9y\xd2[Ko#\xbd\xad\xf4v\xd2\xf3\xa5w#\xbd@z\xa1\xf4\x14)\x94\x1e\x97^&\xbd\xbd\xf4n\xa5w'\xbd{\xe9\xbd\x93k&\xd7?\xca\xf5\x8d\\\x87r\x1d\xcb\xf5;\xc9<\xc9\x98d[\xc9\xb8d\xa9dB\xb2Ln|\xb9\xf9Qnn\xe4&\x94\x9bXn\xb8\xdcR\xb9]\xc9\xedZn\x99\xdcn\xe4v+\xb7jb\xe56\x90\xdbPn#\xb9M\xe4\xf6'\xb9\xe5r\x9b\xca\xad\x9an\xb9\xbd\x95\xdb{\xb9\xbb\x91\xbbP\xee\"\xb9\xe3r'\xe4.\x93\xfeZ\xfaL\xfa\x81\xf4C\xe9G\xd2\x8f\xa5\xff\x93\xf4\xb9\xf4S\xe9\x0b\xf9#\x93?\x86\xf2\xc7X\xfe\x98\xc8\x1b&o\xb6\xf2f'o|y\x13\xca\x9bH\xde$\xf2\x86\xcb\x9b[ys/o\xde\xc9\x80\xca`%\x03O\x06\xbe\x0cnd\xc0e\x90\xca@\xc8 \x93\xc1^\x06j\xa9\xca\xd0\x93\xe1Z\x86L\x86[\x19\xeedx#\xc3@\x86\xa1\x0c\xd5\n\x96a\"\xc3\x9fd\xc8e\x98\xcaP\xc80\x93\xe1^\x86\xb72\xbc\x93\xe1\xbd\x0c\xdf\xc9\x88\xca\xc8\x93\x11\x93\xd1FF[\x19\xf92\nd\x14\xcb(\x91\x11\x97Q&\xa3w2\x0eeBe\xc2d\xb2\x91\xc9V&;\x99\xdc\xc8$\x90I(\x93H&\\&\xa9L\x84Lner/\x7fR4M\xf2X\xf2T\xf2L\xf2[\x99R\x99\xaed\xea\xc9t-S&\xd3\xadLw2\xf5e\xfa\xa3Lod\x1a\xc84\x94i$\xd3X\xa6\\\xa6B\xa6\x99L\xf72\xbd\x93\xe9\xbdL\xdfI\xe1I\xb1\x96b#\xc5V\x8a\x9d\x14?Jq#E E(E$E,E\"\x05\x97BH\xb1\x97\xe2V\x8aw2\xa32\xdb\xca\xecFf\xa9\xcc\xeee\xf6N\xee\xa9\xdc{r\xcf\xe4~+\xf7\xbe\xdcGr\x9f\xc9\xdb\x8d\xbcM\xe5=\x93\xf7B\xbe\xa3\xf2](\xdf\xdd\x0e\x16\xab\xd3\xaa\xe6\xb47\"\xe8\xffoq\xbb\x1c\xfc\xa6\xbf\xb8\xfdy:\x9a>\x7f?0\xba\xcc\xb2:\x14r_\xcf\xe6\x8b\xf1\xc5\xec\xd1\xd5b\xb8\xf8d\xb4\xb8]L\x96\xc3\xdf\x14\nD\xf6\x897Ub4\xa3\xb6B\x94\x19\x96\xf3\xf1dh\xc5\x87\xe5p\xd6\xbf>i\xfa\xb48]\x9c\x0e\xfa\xd7'\x8b\xf5pqz=\xe8_c\xca\xb5\x13\x90\xbaJ\xb7?\xb9>E\xa5\xaej\xff\xf6\xf6v19\xbadsG\xad\xf6\x17\xd4\xc5\x8b\xb1\x05|\xf8\xe87\xbf^\x9c\xfe\xd3\xd5\x7f~\xdb\x1f\xc8\xc7\x9f\x80@Tg\xe1O\xbc\x0du\xc8\x11\xb3@\x8c\x0f\xaf\x03y\x12=\x1a\x7f\xe2\x81&-''Y\xb7\"\xdf\xb3\x80\n\x7f\xcfl\xb9\xcd\x81S\xc8\xa3/\xfa\x117\x99$\x87NX\x9a\x87\xd0\xd2\xf7\x19I\x9a\xa1\xb54\x7fF\x1cZc\xf3\x0b\xb1\xdf\x0d\xc1~\xba\x10\xf7vj\xd4E\x08\x81\xdb\xe4\x03\xe3bX!\xf9\x17\xa2_\"W\x87\xf8\xb4\x00$\xc6\x95r\xba\xe8\x9fn\x0f\xdc\xb7\x8fJ\xf9\x07\xa7\xdb\x03<\x1b\xb9\x80\x0d\x0e#%9\x1b\x90K\xd2\x07\xf2\x14\x95\x92-!?9\xeb8\xa6$\x9fs\x87w8\x976\xf2UU0\xeb\xaa\x84\xf4#pK\xd5(X\xce\x17\xb7\xcb\x06\xc1rG\xd3\xaf\xb3 \xc8\x8b\x9a\"-\x12\xbf\xa3\x9a\x8c\xfb?x;\x16\xb2\x83\x15\xb8a\xf8\x0f1_\x7f\xa90d#\x18\xaf\x023\x9b\xbfY\xa4\xcb'\xd7\xa6JG\x15E\xe6\xdb]\x1e5\xd3S\x94\x06tM\x7f2\x1dR\xec\xca\xdcb\xc94!\xfa]\xcc\xd2?\xc4\xe2\xf7to)\xf6\x1f\xf9\xefb\xa1\xad\xd3Z\xb2\x7f!\xbee4\x15\x7f\x8c\x98\xe9q\xa5\x8c\x9f~S\x9b\xcc\x9c\x92\xf5]\xe7\xf1\xce\x13\x89r'\xba,\xd7\xea\x82\xd3](\xce\xeb`~\xb6,\x1f\xac\xb6J\xf1\xbd\x1f\xe9\x9e\xa6\x1e\xf7\x131Cg=0\xce\xbd\xfd\xaa\x9c\xd8\xa5G\x87\x86\xbe\xa3\x89\xa0\x9d\xf1\x13\x86\x8e\xe7\xd5\xfa\x07\xfb\x00\xc7:@\x9fw89c\x13A\xdb\x1avO\\\xded\xbbA^\xc7\x82\x87\x81\x7f\x827&NL\x0f\x9aWQ\xcdW\xac\xf99\x91\xa7\x0d\x05\xbb\xa0\x92\x01\xf3\x84\xd9\xf1m#Q\xcd\xc09\x88$\n#P\xf8\x08\n\xf9Q\xf6\xcf]\x06\xef\x01\xc7\xbc\xaf\x8abS\xd7C\xae\xc2\xbe\x18Jv\x84-7\xf5=\x06\xc2\xa2\xc1\xa6\xb3T\xe3<\xc1\x8e\xc3q\xf6W\x98\xc5\x8fs\xe6\x87\x1ej;\x8e\xc2W\xb8\x7f\xe9Zy\xbe\x1f\xecX\x7fq\x94\xbb6R\xf4g\xfb\xc0\x06\x1f\x80A\x0d\x8d4\xce\xa7\xde\x8a\xfd-fT\xef\xd5\xba\xce\xe9\xeb\xf2\xd6\xaek3E\x0d\x00\x96\xed\xd8\xde\x83\xe6\xd88N\xd3\x0d\x82\xe74;\xe1\x0f\x87\xe2\xb8\x89\xef\xfd\xa6k\x93\x8dh\xf0'\xfe\x80E\x9d\xf1\x00\xf7S\xb9\xc2\x13\xc6\xc3(\x8d\xfb\xa8\x00\xbe>uY\xc3VX\x91\xad\xa2A\x1e5\xf9\xbf\xe3,a\xd1\x9a\xad?\x96\xedI\xc6;S\x99?\xf1.4\xa6tO'\xe3\x0dJ\xa2\"\xb6:\xf7\xb8V\x80\xacn\x9ak\x1f\xec\x90\x94}\xc3d0\xa5=\xed+\x10\xcc\xbdGM\x05!\xf4}G\xaf \x0f\\*\xd0\xb2qv\x9e\xfb\xf4~D\xc3\xe4\x02\xe21=\xeav\xcd\xea\xd85R\xbd6\x05\xed?tN\x8c\xbe\xae\xa8P(\xe7\xc3\x05\xd1\x07\xe7XU\xb5\x83\xa3\xf8\x9f\xcc\x12\xc2\x12\xf6#^`}\xcd\xa9\x1f\xf8\xd1\xf6\x87\x80B\xcc\xf6.\xe3S\xae\xb6\x8bl\xe4V\xd1\x97\x17\xb7\xdb\xe1zS\xf3\xeeAy8,Nb\xd1\x19$\xc7X\x1e\x01J\xef\xb4M\xe1Q\xd4\xe0\x1a\x87\xab\xe3i'/F\x8a\xfa\xda\x94\xf7#\xedh\x11c$\xf16?\xa5\x1a\xb0x\x92\xfb\xe5\x84\xbb\xc0\xf9`\xbc7\xbeeFd\xbe\xc4(>\xfd\xa2\xdbx\x1d\x8a\xeaC\xa3a\x1b\x8c\xc8<\x0fa\xde\x1b\x91\x1e\x04\xa4\x86\xf02\xea-\xf0S\xd1s\x85(\x9d\x973Bm\x9f\x7f@m;\xaek9?\xfb\x80Z\xe0\x93\xaeg\xdaZ\x8f\xbb\xbc \xcbm\xea8\xaf\xd4\xd1\x00;\xa3k?\xda\x9aBO\x1f\xd0pP\xa9\xe3\x99{\xf6v\"\x0c\xa0.\x93\xef\xf9\x03\xda\x12t\x15\xd8\x1e~\xda\xa9\x87k\xb6)\x0em\x15m\xdc\x85\x8aPA\xb1\xcf+\x81\x0d\x97\xee\x98x\xd5\x05\x8a\x14<\x0b\xacW\xb6\x8a\xcb){\xdd\x81\xa1\x1b\x1bF.\x89o\xaf)\xb0\xe1pP\xa8BG\x92\x9f\xb3%\xc4\xe7\x82\x87\xe9\xd2%\x8e\xd1@\xcc\x08\xe6<\x87\xf3\x85\xf9r\xa0\xa9\xd2\xa0BzrJa\x9fh\xc1\xad\x11\x04\x82\xf0\xdf\xb1\xaa\x835\x87\xe6\xcd\xf6E{\xfb-\x00\xbee\xe2\xfb,`)\x1e\xa3\xa3\xa3\x04\xec$\xbaH\x10\xe8\x10\xe1dzA(\xb9\xd4GHl\x12\xf8\x91j\x98\"Q\xbd\xf1\x93\xaf\xc2D\xdc\x7f\xebG,\xedS\x08m@\xc9\xcb+\x12\xa1\x17\xfe\x93>\x9b\x88\x1fv\xfeF\xcc\xe9\x12\xae\xdb\xac\x82\x9bo\xa25\x8b\x84\xfb\xfa\x13\x00\xccq\xe0\xe1F\x08\xd4\x12\xcf\xf9Ru\x91\xc2\xf1\xe6\xc9tpA\xf8p\xe8\x90\x130\xea\x85\xf0\xb7;\xa1`\xcfF\x84M\xfc\x14@4\xb0[\xbe\x90\x19\xb9\xaa\x8f\x9dQ_\x07\xa6\xa7y1\xda\xa86W\x8da%#2\x1c\xdaAB\xaa\xa1\xb9RB9\x8b@\xe8\xad\xd7\xda\x12\x0e&\x1f\xe7\xda\xe7\n\x9f\xcaq\xa5\xcc\x0420S]D\x0bQ\x8b%\x99\x82q*W\x1f\xb3\xb3\xb3\xcf\x9e/\xe5|\x91\x9d?;\x7f\xb6\xc8\xce\xcf\xce?\xd3\x89\xd5R\x01\x94\xca\xce\xce\xe8\xd9i!,X\x111\xe1\x8e\x91\x03+G\x84W\xc7P\x81\xe8#\xa2\xb9<)\x03\x02\x94\x92\xe1>>\xb3\xc7\x02\xd5\x9b\xf3\xc0\xe55\xab7\xc2I0\x02'\x10\xb98\x9b\x8eHo\x11\xa9\x14\xabU\\\x88\xde \x8f^W.\x9f\x15\x18p\x93Z\x1b\xd6V}\x0e5\x94\xd3\xb3\x82p\xf2e\xbcf_\x88~4 \xd7:,,F\xf9\xf3t<\x14\x08\xfe\xa6P\xbf\xa7j\xe8i\xda\x00\xee\x85)\x19\x13o@\xfe\x89<3\xc7\xb5\x90\x08\xc5y\x95z\xe8\xd5\x8c>\x15\x99\xf1\x07k\xe6\xc1\xdc\xab\xd54\xa4\xef\x8f\x14q\xf3#f\xfe\xbe\xa2w\x05\x024*\x05\xb4Al\x1fz\x1epZ\x86U?@e\x18kM\x9a\xeb\xae\xae\x96\xab\xdf\x8a\x00\x9c\x0dj\xa8X\xac;\xdf7\xfd\xaa\x0e\x08/\xbaUD\x1e\xd6\x1a<\xa0\xb8Y\xc7\xfa\xe7li\xd5`(\x11\xb0\xa5\xa2\xbc\x85.\x14=\x9f\xbd\x1f\x95\xda,K\x1a\xadM\xd7]\xda\xeb\xfe\xa2(\x87g\x8f\xfdC\x90]V\x00\x1b\xa0\xe8w\xe1\xea%k\x83\xfa\x87\x84zGC\x9cr/\x978\x0d\xd0z\x15\xd9\x0c\x85%\xc8\x1e\x0c\xde\x97;\xca\xd3C\xaezKn1\x9d\x00F\xf6\xe4\xa9\x06\x19\x02\xfdA\xf0\xfd\x96z5w\xc2\x0e\x86\x0c\xd2\x1f\xb9\x04\x97\xf8\xa6n\x07\xdfP\x10\xbf$\x91#b/Z\xaa\x9d4\x0c\xf2x\xccr\xbb\x04\xa6\x96\xedq\xdd\xd92Q\xc7\xdeV \xa9j\x19\xa98]],b\xb0\x8c\x1a=\x14\xa9,\x81\x82\xb6\xe2\x92\xd4/\xaf\xffy\xa0V\x01F5\xf0\xf1\x10\xce,\x87`9\x02\xb7\xad\x8acpr]Z\x19Pjj\x1c\xc1\xdb\xc4Q>\x82(\xc7\xa8~\x0c\x1c\x93\x91iQ\x05|\xb7\xf6\x05\x19\x83\xe1\xac\xf6 \x1a(\xd4\xbf \x81\xa2\xbc\xf1p8\x80\x88ne\xc8\x06j*Ax\x03&?\x18\x01\x07;\xb3)gZ\x1c\xaa\xf54\xc5\xfe\xe0\xc8\xa8\x15&e\xf7\xcee\xf3xY\\\n\x8d}\xd4c\x9d\xd5}UUD+\xb4\x8d;J\xb42\xa9\xee\x90\x83\xee%b\xf6\x82\x0e,2c*\x96j\x12\n\"\xcd%y\x96\x9b\xe3L\x1ds\x18\x03^\\\x81\x8f\x9a)\xee\xdb\x9aVW\xbe\x03\xe2j-\xb9x~\x8b\xdd\x1fl\x02rHy\x15\xd2\x97W\xe4Y\xfb\xc6J\x81:\x1c\x1er\x06k\xf5\x9cZ\x86\xe3\xa3<\xf6{C\x8c*\x1d\x8b\nUf\xb5\xaf6\xe6TN\x05\xd4\x96\"\x1e\x91g\xe0\xe8\xc5va\x04[\xd2ZyP\xc2\xb8\xaf'*\x10\xd3\x19\x99\x8b\x91\x86\xd7\xa1<\xd1\xe1\xab\x18\xca\x8c\xa5\xcf\xef\x95\xf0\x96\x8bI\xef\x7f\x194\xecN\xdf\\\xc7F\xe8|C/^\xb1\x84\x11\xb3\xc8Z\xcf\xbe\x81\xec\xccd\xaf\xa3\xbaG\x86\xe4)yI6\x8dh\xadrM\xcf_\xa0\xd7\x96\x18u\x1def\xe0\xa1\x82\xe3s\xcc\x13\xb7\xd6\x04\x92\xf7\x08%\xe7\xbeg5'\xc0\xda\xfa\x9e\xda\x03\x0d\xc8\x98\xa4\x03rI\x9e\xb6V\xa45\x159\xc5\x01C\xf9\x89\xe0~\xd8/\xeej\xff\xac7\xb5\xad\x95\xf1\x82\x8d]\x03a\x16\x17\xe4\xa4?\x1cf\xa8\xd1A\xc1 :\x90\x16g$+\xcdH\xb6\x04\x9b\xbe\xd2$\xa84P\x7f\xd8<5]P\x03\xb5\xa8\x8d:0\xb1\xb8\xa2[\xca\\\x84\x00\x04\xf8\xe6\xd1\x06\xe5R9\x0b\x8aj0\xb5\x10\xb0\xbe\x81\n\x01\x9a\x9e\xb9\xe9\x0b\x90\x9en\xd4\xc5\x87vs<\xce\xc9MF\x86\x8ae_\x03\xeb\x81\x93\xbfn\xc4\x07\x94\xf1\x0e\xea\x93PN\xc3tFhG\xc2\x84\x8a\x85\x0c\x16\xa7\x93\x1c\xfd{\xa29\xf5\xb0\xbb\xc7Q\x9b\xf0\x10\xb5\xd9\x93\x97$l]\x89/\xce\xb5\xb1[\x05\xdb\xf7\xc3\xe1\xa0\xb5\xa0\x1e\\\x85\xeey\xac\xdf\x90\xde\xfd\x81\xa5\xc2\x8f\xb6\x1f\xb2\xfc\xf5f\xa3\x0e\x13\xac\xe4\xbd\x92\xc84\x11\xc8Y\x17\xab\xeaA \xeaaa,\x01\xc9\xf3\x91\xbd\"{\x14\xce X\xed\x9e\\\x92\x10\xc2\x11\x15\xd6\xe2~@fd\x0f\xd4,D\x81m^\x98\x0d\xa8/\x17[T\x1d\xe3b\x0b#\xcd\x0bP-TS|\x17\x8e6\x8cO)\x94`b\xb3\xa39\xe9\xf7K\xe8\x10\x97\xd0!^\x02`\xfd\x12\n\xc4\xcb\xc1\x00\x03\xa09IZ\xfb\\7\x8b=~\xabXc\x03+\x9fLGpW\xe7\x0c\xaf\xa6l\xec&-!\x97d}A\x92C\xb1\x0b6\xf3d\xa9/eE\xb0\xfa\xdbt6\x04\xaeA4SC\xf3sSE\xf3k\xf6\xd0\xb5k\xedtf\\\xfd\xdb\xc9Q{\x14\x93\x98\xcf\xd1\xa88c\xa0A{\xfa\xf4\xd3:\x8dF\xc1\xb3\x03\xde;\xdb-\xa2\xc8\xf1x}\x18\xe8\x12f\xc7K\xc7\x8a\x0dH\xf9\xc0aT>~\xb8\xaa\x9c{v\xe4)y\x99\xa6\xa0\xc1\x9a\x19@\x84g1\".wue^P \xed\xfb~0\xca\x97\xa8\xd5K#\x11\x8f\xbb3\xbf\x02\xa0M\xf1om\x9c\xdb&\xa6T\x190\xc5\x1b\xe6\xd3\xa5=\x1d\xd2K\x0b\x17\x13\xcd\x97\x16F\xac\xd6s\x93\x90!\x01Z\x94\xcd\x93\"}\xb2\xe9t\x9e,\xdd\x8a\x83\x12\xf9L\xff.xd\x99\x17:\x0cJ\x0eq\xbf~F\x86%9Gm\xd8\xd3V\xce\xf4\xec\xbcE\xee\xce\x80N>zD\x9e=G\xc9\x1b\xa4\xf0\xe7\x07\xa4pX jEN/HF.I\xea<|\xac\x88\xd8\xb5Vm{O\x11B\xda\xd8\x1e\x01\xbfrVT\xf5\xab(\xef\x9a\xfe\x93\xbe\x8f\x1b\x80G\x8fH\xff\xe4\x84k\xbb\x10-\x13j\xa1\xac\xe3b\xd8\xf1\xe6\x85\xfaaR\xdb\xa0z:}\x14N\xda\xe4\xcai\x90\x0b \xf5\xf9\x90s\xa9\xf4y\x9b\x90\x86\\9.\xa3\xe6\x80\\\x93\xb1\x12\xa8\x0dzE\xae\x89\xe6\x15\xf4\x02)\xe0\xd9S\xfd\xack\xe0\xe4\xb2\x84\x07\xf5Zlc\xbc0Z\xf5\xce\xc7\xad\x9d?N\x0e\x8d\x0f\xadD\xf0\x83\xa8F&_&c\xd7\x1e\xb3e\\.\xc9\xb3\xcf\x14ZF\xe4%y\xfeic5\xa8em\\b\xbc\x1d\x08b\x15=m\xa0\xa8\x1d\xdegj\x0e\"ry\xa5\x80i\x13\x9e\x9e\xa1\xee3R\xb0?{a\xa2\xa6\xb6\x88\x16\x16\xb4\xda\xd7\xa6\xe3\xf7B\xa9\x07\xa2\x87yj\xa7\xd7\xb534p\x87\xd9\xb2\x9b\x19)\x01c;\"\xf7#\xb2\x1a\x91\xb7#r;\"_\x8d\xc8\xdd\x88\xfc0\"_\x8e\xc8\xcd\x88|\xe1\x10\xe1\x00\x15\x94\x08\xa9q\xd4(\x14\xb6\x8e\xbc\x0d\x1a;=\x89\xaa\x12^\xaa\xa4\x95lB\x03\xd3\x96Q\xfe\xd0\x8dO\xe8B\xaa\xb5\xbe\xcf\xed\xb7\xef\x8aV\xb8gG\x12l\xace\xb6\xe4\x1a\xef\x017\xafV\xd8T\xa2\xffj\xad\xd4\xd07\xca\xd5<\x911I\xf0~fg\xfa\x1e\xf35\xe3l\xfd6\xf0S\xd1$\x97A\x9e\x19\xd972\x82\xdb\x87KlJz\xed\x08\xea*\x0b\x02&Z!\xfdpx\xac\xc9\xd2[\xbd\x07\xbak\xdb\xf7\x81\x81\xce\xe0\x82\x9c\xf4O\xfa`\xb6\x836\x98\xb0\x81\xea\xdfW\xd5AkD[K[\xe9Rkf\xee\xc9\x98\xac\x958\xf3\x0cX\xb6*\xadPhG.\xc9\xb4\x94\xa2\xa4\xa8uQ~\xa7\n?v\x9dg\x1b\xc6\xce\x17,<0\x80_}\xc8\x00\x06\xd5\xdd<\xea\xc5\xc0H\xc1\xec\xf5\x0b\x08\xbdq\xec6\x8a;\xf1\xfb\xeaN\xbc,\xdd\x82e\x965\x808\xab\xefU\xb4}`\xd3\xc6\x00\xf7\xa6y%j\xaf\xfe\x16f\x11\x88\x99\x1a\xf5\xb7Vn'c\"\xc8K\x9c\x14\xa7=X\x15\xba\xa0\xda\x9b\xb4\x08\xaeW\x83v\xf3\x80\xa9|\xf0&\x050\xbd\xb0'\xf9\n\xb7(tD\xee+\xd2:\xd1\xa6xj\\\x8a\xa6g\xf8~\xbc]\xde\x8d^\\?\xa0\x82\xe1KrE\xee\xec.\xe8\x07rI\xbe\xbc ?4)\x18\x14\xe9\xbd\x9b\xffP\xb4\xe3kW.\xdc\x1cP,4+\x15\xea\n\x05\xd5\xf8M#\xc7W_\xb7m\xf2C\xce\x08)HAg\x83&Eo\xeev#\xe7{\xe52\xee\xe6C\xb7\xa4\xb0\xd6\xf7\xf6\xeb\xad5\x1cXuAB\xc5\xaf\xca\x1c\x04q\x91T\xa8\xf5\x831\xf4\xd6bdn\xc7\xa8\xa4\x8cG\x8f\xda\xcd\x0cHY\xf2G\x1c\x07>?$\xe7\xf5q\x03\x9c\x8c\xf4\xde\xe8\xdc\x08\xcc%\xe6L\xc6\xe4\xbc\x14\xb7\xd3f\x98GKcAevi\xb9\x851\xd2Y\xad\x08\xca\xf3\x0bm\xc6\xd9\xcf\x13U\xcb\xcb\n!+\x14(\xa4G\xe8\xd8\xbc1k\x97\x82\xa1\x7fO\x9b\x8bv$\x08\x99\xb6g\x1b\x92sT+\xf43\xb3\x0b\xf4\x14\x17x\xfe\x99{\x08\x87\xc3lPVDd\xc3\xa1\xc2m\x16\xed'\xe6VCjn\xae\x94\xd2 \\c-\xeb\x84\xb3\x8d3?~\xd0\x85R+\x9a\xe3\xf1f\x80\x0b;S\xcb\xb8\xa1\xcey\x0f\xae\xf0\xa6Km\x1a\xd9\x8d\x04\xda\x9b\x19o9\xdb0\xce\"\xafY\xbdIW\x8a\xda9\xe2\xe1\x1f\x14\xa9\xe2*?\xae\x1d\xf9\xd1\x03RTI\x10\xcd\x06d\x8c\x82S\xf1\x08%+\x0b/\xc3+\xf2\xac.M\x15.\xa2\x14\x1b(1~C\xd9\xec\xd7\xe1U\xedx\xc7\xb6;.}k\xd1\xe0\xe6\x82Z \"Z\x86z\xac\xa1.\xf6\xdd\xaf\xf64\xfe\x90\xd9}03SR\xca\x07\xe9\xbcL\xea\x07Q\xe7\xe3\xe8\xf2A\xad,\x9c\xe8\xb7ka\x9f>o\xd3\xc2\xe2\xb5\xb5\x03\xd5\xe4ZW\xb3\x16\x1cd\xe6\x82<}\x9e\xf3`P\xce\x82\xca\x94\\^\x91\x17\x17\x03\xe2\x83\xf1Wci\x17\xd5;\xe9\xfb\xe4%y\x81\x10\xea\xfa\xb4.&.S\xb5\xd4\xae1kg\xd8OG\xe4\xa9\":\xf9\xcd\x90\xfa\xf7\xe7\xea\xbb\xda\xfae$7\xcc\xac\x01H\xf3\xcb&`=?(\x08DG\xeas\xf1:W\x13\x8d\xda}\x8bX\xec\xb8\xc9\xfd\x11\x94\xbev\x0c;\x02\xebG\xaa\x9dv+\xa8\x9c\xc6CH\x1fm\xc2r\x084\x18\xb3\x07u\xd1\xdb\xf9\xc1\x1a\x1ci\xcd\x97\xb5\x0ev\xec\x97\x99\x84&R\xd26\x0b\xbf\xacZ\xdd\xa4>\xc4\x12pd\xee\xe1\x88F\x8bV{\xa7K\xcb\x10\xcd{GG\x86\x8aa\x8e=\xe0\xe8\xf7K\xec\x91\x96\x88\x1a\xd5:|\xbfH\xc8\xe8R\xcb$\xfdg\xcf\xf3\x8b\xb8\xb5U\x17#mz\x81:_\x8eE\xe2\xf2B\xee\xc7x\x17\xc6BQ`\xb31l\xd7\xfcb\xb9F\xb5^\xe1>\xdc/\xb0\x9cM\x17\xb4\xbe\xe9\xfca\xa8\x7f\x00\xf7:\x82|\xdc\xa2\x06V\x9d\x1f\xbd|\xdc\xe5\xad\xa8\xea\xbf\xf2\x12\xef03\x87W\xfc\xe0# \x16\x85;\xdfg\xe7\xd5\xbb\xdd\n\x81O\xdf\\\xf6\xe7:x\x9fvu=_\xa4\x8b\xd3\x97U\xd7n>f^\x9c:\xb2\xbf\\\x9ev#4#B]\xb4&?\xa0\xa8H\xc5\xb5\xa1\xab\xd8o\xd63$e1\xba.\xbbxJvMF\xe4$\xdf\xdc\xedD\x18\xb4\xca;\x89\xa2M\x8apx\xb0[zyu\xc0<\xf4\xc5\x99{\xeb\xe4\xb5\xef<\x9f\xe2\xa6\xae\x9f\xb9H\x97\xa7w\xae\x8a|a\xbe\xaci_Y8{._rz\xdfv\x1c\xf3\xecS\x00\x1a\xa4\x96\x93\x96\x1b)\xe6g.\xa5<='\xb2z\xf5\xc0\xfc4\x18`t\xf9\xf9\xa7\xaaf\xa1d\xb7\xe9\xf9y-\xfb\xfb.\xdb\xdeg\x9f6\xf7\x9c\xd8c\xa5\xeaV\x11-a\xd1\x95\x9e?(\xb6R\x87\"W\xd2\xb5\xd7\x13\x0f\x0eC{\x82h\xc0\xe7\xe9|Zq\xd6\xb7o\x0b\xd5m\xfcm\xc6\xa1U\xb5\xb3e\x1c\x9fx\xa8\xfe\xee\xa6\xf0\xef9\xfc\xfb\x14\xfe}\x06\xff>\x87\x7f_\xc0\xbf\x8c\xae\xb1\xd4\xce\xc2\x03\x1e2z\xfe\x86\xd3P\xbb\xc1P\xff\x86\x14>\xc6\xe0\xd9\x0f\x9e\x00\xd28\x13I\x06\xef\xf09A`\x12\x1eo9K\xa1\xf3\xe8b\x12\x9e\x98g\xe0N\xc5=\x8e\xa6\xf1\x11\xd1\x13f\xd8\x04tY\xb0;A9\xa3\xf0\xbc\xc1\x0b\xaf=\x01~'\x04\xc7gF!g\x06p\xec\xfd5\x8b{\xcb\xc9&\xe6_Qo\xd7o\xb9\x808g\xcb\xf2\x0dP\xad\x95\xfa\x90\x1b76\xb9\x8b\xf9\x8aCr\xcc\x95)\xb5u\xc0\xdb\xb6\xecv\xf9\x16N\x8e\xc1BdL\"\x97\xb7\x88v\xf6\xdc\xf5\xcau\xd1\x8a\xa0\xce\xc8\x04\xb2\xc9\xc2];\x17\xbb\x0bJ[]\xe4\xd8Am\xd7\xd0RA\xbf\xa4\xfa\x08J\x12x\xb0,\x9f\xcc\x06\xcd\x14\xd7\x87\x0b\x1d\xa80\xd6\xbb\n\x87J#\xb7\xfb\x81\x1b\xbfZ;\xea\xb7\xd6J\xady\x030\xef\x1199}3\x1f\xcf$Y\x0e?9EW\x9b\xb4]$\x80\x1b\x08\x14C\xa9\xf6{\xb2\xa7\xf6\x1f\x10\x03\xb5M\xad\x92\xe8\xeb\xe7)Z$\xa6\xe4\x92\xe472[no\x9f\xc0\xb9\x947O\x97\xe6\xdaH\x1b\x9fE\xff\x05\xa0\xb8M\xe1\xd1+\xb9W2\xd7\xb2[\x05\x83\x83\xde\x98\x89\x01\xed\xf4\xcd\xecz<\x9c]\x9bq[\xb7\xb3\xdf\xe7\x9f\x01H\xeb\xd2\x81Y \xbek\x92 {se=S\xdf{\x18b\x0b\xce\xbe\xb8\xbf\xdd\x89\xde\x80\xcc\x9c5\x9f\x15\xaa\xeb\x05l\x839MB\xaf\xed\x06\xb7\xea\xdc\x18w\x0c\x05tq\xdc\xdb\x81\xb9o\xc1\x14D\x14\xeb\x9d\xed\xcdB\xca\x85\xfc\x04\xfc\xb3\xf5\x06\x05\x04\x1a\x91\xc4\x8c\xc3Ia\xd2Z\xeb\x8e\xdb-_:\x8a\x0b@\xe8\x0f\x98)\xec>\xc4L\xa1+\x1c\x8ao\x1c\x80C\xc1\x00\x8b\xf6\x97\x84\x83\xff\x92@4/\xfe\xae\xe0\xed\x9a\xc0\xa3\x81\xbf\x8df$\x99\xa7.\xc0>\x02\xec\x1d!<\xacw(\xd0\xb2\x8f\x00\xe9/\xa3W\x10\xbb\x87\x1e@|\xc0R\xe4\x0fm\xf3\x88n\xa9U\xf6\x8b\xb7\xa2d\xc6\x03\xcbh\x0f4\x05\x8f\x0b\x1fDW\x8c\xa0r\x8e\xdb+}\xfb\xa7Efy\xf4\xc88)\xcfiz\xe0\xa6\xe9p\x83\xbd\xd1\xaa\xa6;Q?4^\xa4\x0b\xdd!\x87F\x83|0q!\x058\x1a\x8909DdHW@7F\xa0\xc9\xc3\xf3+Q\x0f\xc4\x15\x95\\e\xe2p\xabrD\x9a\xf2\xc0{Y\x8a\xa8$\x91Y1\xc5j7\x8f\x19\x97F\xb2F\x8a\xa4\xad!\x8a\xca!\x8aE\xda\xa8\x16\xe9\xb8\xf8Hi\x12\x9b\xd689\xb4\xce\x89\x83\x8a\x11\xd8\xa2to\xbe\x99\x90\x91n\xcd\x97W{\xe9\xcdn\xad\x8e E\xbf8\xc1\x03!\xea\xc1\xad\xec\xd0\xfcj\x8f\x7f\x82QI\xed\xf3a\xea\x13\x9b\xdce\x03\\\xb0\xe2\xea|r\xedw\xd8\x06\xc7j\xd3\xe7\x1b\x13z{M\xdf}\x18d\xees\xe8\xbd\x1c7\xc5b\x14\xc7#\xd7\xe9\x8f\xce\x12\x95\xda\x89*\xe3F~\x91}\xb6\xb5\xd6o\x15\xd0\xfb,\xf7\x08\x06\x96\x85\x8f\x1e\xd9\x89x\xe9t\x9d\xb7)\xee\xc3\x8d\xaep\x03\x05\x87\xc3\xcd\xc1m\xbc\x9d\xb3\xcdQ{w\xdf0\xc6\x8d1\x81lm\x03\xd0\xf9h\x9b,m\xa7\\4\xfb\xeb\xbc\xd2\xd6\xc1\x01\xb9\"\xf8\x90\xbdJ\x866\xe9J<\xa8\xf8\xafc\xb3\xb6K2\xf0\xe9^\xdb\x0dn\xb5\xd1\xed\xa1\x1e\x91B\xaf\x1a-\xedIA$\xceF$\xfb\x10\xb6{\x04@\xdd\xb8]A\x03\xac`3\xd8Z\xf4\x8d2m>J$\x1d\x8f\x13I\xb7!\xf8\x98\xfcs\xddlKK\x0e\x11t\x82\xfc\xd3\x89'$_\x9d\x07A!\x05pZe2\x92\x8f\x8f\"k\xf3\x8d\x1b\xf9m\xd6C\xa8B\xf4x\xe1\xb5\x1b}\x9d`\x0d/\x86\x86\x8d\xf4\x89^a\xa6\xf7\xc5#>\xba\x1c\x81\xd2\xa0j)W4\xd9gE\x1f\x89E\xfb\x03\xd8\x12\x14\x13\x14M/\xdd\xc5\x18\x91\xf6\xab\x08\xb9\xb7b\xa7\x91\x1bu\xdfF\xd8\x82\x81\xd1\xbd\xb9\x8d\xb0\x05\xb0\xf4\xf15=x\x1b\xa1\x08\xee\xbe\x08`X\x83oW\x1d\x8adT\x1e\x8du7d%%\x0ciCX\xd2\x05i\x89\xd9F\xa0\x18\xb2\xb1\xfdW\x02\xfb\xcb\xfc\x02^\xd3\xb1\xe2\x01\xb6s\xb0\xac\x83\xf9\xb4\\\xf8\x03\x1a]_x\xb5\x14\xe4\xa5/\xdb\xee\x0f\xfa\xda-\xf0\xa6\xc8j\xb3f\xb7T\xa5\x8e\xd6<\xe3\xb4\x95\x82\x8d'\xd0\xc9\xc1a\x90J\x17@\x1e=\"t8\xcc/\x88t\x01\xadn\xec\xd3\x06\x9a\xef\xbe\xfdP\xca\xfc!\x92\xf8:x\xb8\x80\x1ch\x94,H\xc6\x9b\x11\xb9\xff\xc7\xfd\x04\xe7\xfd\x04\xef\xa3\x1d\xba6\x8a\xcb-\xdb\x87\xe2\xfd\x04\xb7\x91\x9a\x0f\x1e\xb6.\x8d,\xaf\x8f\xc5\x07\x95s\xf1\xd4\x11=\xceZ\xf37\xde\x14\xcc}\xce\x0fP\x13\x12\xd5\xaaE\x9dH#\x19*\xe8\x90R\x971\\\xdb\x0d(\xeb\\O\xc9\x7f>^\xba\x82%o\xd51>\xb9$\xf4\x82\xf8m^]\x88\xa1Is\x1f._\xa5]._\x99_\xdc\xc1\xbb\x0b9\xe8\xe1\x858i\xa9\xf9\xe9\xcdM\xd7\xfb\\\x9aN\xe0j*\xda\x0c\xa4\xcd\xd2b\xbe\xd0\xd3\x11\xe1f\xf1\x15\x97\xca\x01rSYzu\xa2\x03K\xc9\x1d\xf5\xa8\x8b\x19DY\x8c\xaaQ\xac\x8eP\x1eV\x96\xf3CMw\xb4\xc1\xfb\x85\xec\xef\xf2an\"\xeem\xe3\xdc6\x86\x1f\x8d\x88\x1d\x8e\xb0r\xfe\xf4\xb9#\xc0J\xd4?\xff\xb4\x92L\x1b\xe2\xae\x08vgbc<\x9d\xba#wD\xec\x16\xa7\x1as\x9d\xbbs\xb1\xd4\xa3\x89\xcd\xf4\xd4\x9diE\xbd\x1b\xe1{7&\x8a\xcb\xd3\x86`!k\x16\x98\x1c\xcf\xdd9\xfc\xc8\xd6\xf1\xc2\x9d#\xa4\xdc\xc4\x1ay\xda\x10Q\x86\x85\xc9\x8e\xa6\xbe\xad\xe93w\xb64[\x99\x1c\x9f7\xe5Ht\x8egg\xee\x1c\x81\x1f\xd9^?k\x18h{\x95\xc4\xac-\xcc\xdd0\xe0\xc5\x8b'&k\xc3\xb0S\x1d\x1e\xc8dk \xd1\"\xa8 \xe4\xf2\xaca\\Y$|qo2}\xd6%0J\xf6Q\x02\xa3\xe4^\x90\x9c\x81Q\xa8 \x8cB10JE\x11\x0c\xd9\xf7\x18\x81\x99}\xebG7\x8a@\x17\x16i\x1d\xea\xb4n\xe9\xb3\xb7\x81t\x91\xd8\xb7E\xcc\xd5\xbc\xc3\x1c\xc6\xabb\xbe9z\xf9J\x8d\xa1\xafXI\xf1\xf8f\xd63\xf1hU\x89\xb9\x0d\xa6\xdb\x1b\x15\xe3\xed\xf6\xc0H\x0bM\x9c\xd6T\xd0\xde\xd2\xd6 \xcc\x11\xce\xac7\x98\x9f-]\xe6:Y\xc5\xe7\xf5kE*[=\x86C\x9fG\xc6KLa\xd4KQ]j\x88\x02\x8ez\x8d\x8e\xac\xf6\x15u\xafI\x9c:4y([y\xd4\xdb\xb1\x7ff\xa2\xef\xc3\xe5\x97\xb3\x01\xe6W\xe8R\xd1o\xb9MP1l\x03b\x8f \x97$\xbe \xa2Mx\xe2s\x01\"\xcbI\xc1g\x08\x04\xe2\xd2\xa0\xfc\xa0@\x19!\x10\xce3\x86$N\xf1\xdeb={)w>\x17\xefG\xa5\xe90\x1b\xfd\x8e\xfe\xdb\x0fNIy\n\xf2!G\xf7\xf40\x98\x97\xc4o\xd6\nF8x\x91q1s\x02\xc3\xc9\xe7\x11\x8e\xd3t0\xc0}\x84{W\xd6\x18\xe8\x187z\xaa\xf5\x97`\xef\xd4z\xbb\x9dM\x12\x16\xad\xfdh\x8b7\x04S\xee\xcd\xf5H/\x1b\x06\x95\xe0d\xe8R\xa0\xf7P\xe4\xe1;L\xe8\x0f\x9aF\xff\xd8\x802\xcdaO\x1ct\xc7\xeap\xfcF\xa7\xdc\xd9\xaf\xc8\xb1bB\x9dd\xf1:\xc2\xa4\xb7\xbe\xf0v\xc4mw\xed\xd1\x94\x91\xe9\xd9\xcc\xfd\xe1\xf3\xf3\xa6\x0f/\x1a>m\x1a\xad\xa7\x9f65\xdf4(\xd3\xf3\xc6\x91o\x82\xebE\xd38>w\x8c\n)\x98\xd29vbk\xb6\xa1Y \xda\xcb5\xf9S\xeap\x94\xd5H\xec\"\xcb.\x80\x1c\x192\x06T\x89\xd7]7G\x83\xc1\xc5@\xd1&'G\x8e\xf4e\nE\x82\xd4\xb6L\xe8\xbb\xe2UJ\xa3\xad\xf4!\xa3Z\x87\x83Q\xce\x82\xca\xf6\xe2\x1f \xe2w\x1e\x8b\xaa2\xc8\xc9;\xa7\x0d\x17E\xe2v[?=\xbc\xd8\xff\x82\xf1\x81\xd1#\xe1h\x8f\xc8\x89p;\x9a\x85\xd3\xcb\xb3\xd2\xf5TSYyV\x9c\x88ck\x98\x1e\xacA\xbb(9\xa0\xc6\xb0\xf4\x19U^>\x9eS\x12\x7f<>\xac\xb9\xb0~\xd4\x1c\xcd\xfb\x9d\xd4\x189\"\x15\xab\xc9\xedE\xce\x14+\x1e\x92iC\xe8\xd9\xe2\xefC4\x1d\xec\x90\xfe\x9d\xe4[\xe1\x1d\xe5kh\xabE O\xdaw\xbd\xc5\xdf{\xf70\xd7Xzi|\n1SG\x87\x81\xd7\x80\xa7\xf1F\x1c\x02\xbc\x03\xd0N\xa3\x11\x0d\xeb\xc1\x13\xb7C0\x1ch\xdfiv\x17\x0f\x87\xe8\x19\x9a\x93\x96;\xdf\xb1\xa2rq\xe3\xfd\x1b$U\xf1\xc7RF\xd8\xa5\xc5\xb59\xb8\x0e\x9c\xa2\xc0<\x7f\xfe\x02\xfdP\x13\xbd\x19;+\xf4\xaa\xb7X\x9c,z\xbf\xfe\xe4\x9f\x1e=\xee\x0f\x9e\x0cG\x93\xd3\xd9\xc5\xe5\xd5\xcb\xeb\xdf\xcc\x97o\xde\xfe\xf9g\xf9\xfe?\x8f{f\xe3\xd2\x1bt\xbboQ6\xb4Z\x92\xabb$\xa9\xca\xe5\x8b.d\xd5\xd2\xd4\x96\xad\x8a\x92\x9bk\xa4\xf3\xf3\x06\xbf\x8b\x07(\xeep\x18\xe3\xc5\xdf:j\xf9\x8d\x8e1\xf1\xb6\xf0\xf9\xf3\x17\n)\xcc]\xb0(\xbf\x88\xd0\xc4\xc8\x8c\x8fg\x85\x10\xc3+r>r2w\xcd?\xb4\xc3J7\xca\xebM\x15\xf8\xf4\xea\xb6B\xbb\x90\x96N+\x14\xa2\xf2 \xb6\xf9\xc7/\n\xf3k]\x1c\xb6\xb1_5\xbf5\x0fuo\xb1\xe8\x99aV\x1b\xc1\x8f\xb3\xea\x8eE\xe4\xd29F\xb3\xa0\xa0c\x89\x1c\xe3*\xc8\xee \xb3\x11\x01\x0f=\xbc\xb4\xa1\xcc\x0c\xb5\xfa\xfcE\x93+\xa1\x8b\x81*\xe8\"w\xa4,rE\xe8\x12\xc3\xd7\xc1_\xb3\x0b\xb0\x84\xac\xdc\xa7)D \x81\x93\xbf\xe6\x8d,\x85sx\xb8\xceH\x0fAIU=\xd4\x85>>\\\xc0\x19+\xa8\xae\xf2\x00\xb6\xe5\xc5\xd7\x85_4\x84\xed!\xa4\xd9i\x85_\x08\x93?'\x8bh9\x04\x93]\xd2k7Q1\x91|\x9a,S\x0e1\xa6\\\xde\xa5\xb5u\xd2uU\xc4E\xca\x93G\xfd\xfd;Z\x1cJ\xb2\xadu>m\x91\xb1\xcf\x1b\xd6N\xdaN\xf2\xdb\xed\xd7R\xf4^\x06w\x91[\xb257\xfe\xcb9\"\xf3u \xce\x94\xbc$g\x18\\\xa0\xda6\xd8.\xcf\xc0)\x96\xd3\xa7\xb9\x82\xee|0\x02\x03\xca\xab\x83\xd7\xdcL\xaef\x9f\xe7~\xee\xed\x8c*\x9c\xd3|\xab\xb9\x00\xd0\x01\xaeC`\x9ec\xdc0\xb8\x99n\xda\xaa\x81\xcc\x15!\xa8\x05\x0d\xf3\xd1\xa74T\x93\xc7O\xb2\x08\xce\xc9\x98\xa4\xa3FF\xacWt:\"\x1c\x0f\x89\x1c@\x9a%\x97\xe2A~\x8c\x8e\xe4u\x0b\x10>.k\xf4v\xdd\xd8\x19TC\xb6\xf6\xd7\xb6\x80\xceH\x9c\xf7\x161\x0f\xda\x0dY[Xj\x96\n\\\xd2T\xc3\xea@\x11\x9b\x01\xd1\xc4\x82b\xef?\x9a\x8d\x17\xbc\xd8P\xa8\xd7$\x1e\x8f\xc9\xcc:\xc1/|\x84\xe7\x18\x1d6]\x82\xa7\xe7&\xa1%\xfa\xc0\x18J\x04wSxjou\xe6}\xd6\xc1\xd4;\"\xd7zF1\x06\xaa\xd6%T\xe6\xd8\xa2K\xbb\x15\nk6 m3\x8c{\xef\xf6\x98\xd6\xb6\xcb*\xb4\xf8@\xc3\x97\x02\xef\xb0\xdd\xd7\xd6qv02P\xa2\x90Y\x01\xe7A\xad\xfco\x963h\xdf\xfd\xff*\x8c\xa1\xb1\xed\x7f\x13|\xe1\xd9\xd3\x0elAg\xfa[p\x85g\x0d\xee0\xdb\x98\xc2\xc9\x95\xae\xe7\xef\x8e-4\xf5&\xe7\n\xad9\x8e`\n\x1a\x0b\x1f\xce\x13t\x05\xff` \x9dX\x82\x1f\xa5\x7fc\x96\xa0Z\xfc\x07K\xa8\xfcZX\xc2\x8b\x06w\xc3\x7f\x0b\x96\xd0\xd8\xf6\xbf \x96\xa0\xdd\x9e\xb5\xb3\x04\x9d\xe9o\xc1\x12tS\xffNXBSor\x96\xd0\x9a\xe3\x08\x96\xf0b\xfa\x81,AW\xf0\x0f\x96\xd0\x89%\x84\x94\xdf\xfc\x8dy\x024\xf9o\x8c)\xd8\xe46\xd3 \xb3f\x89\x0d\x00\xc50\x00\x14\xa8\xfaT\xea\x8b\xe76\xf5\xf33\x9b\x8a\x9e\xe9X\xd53\xdd\xd1Q\xb9\n\xfeR\xeb\x03\x9b\xa1-}-=mH\x0fZY\x98\xe7Z\xc6\xc2u4\x85\x97\x0c\x1a\xc8\xbb\xc8\xc9;\xeaZ\x03\x18\x89j6\x8a\xa1\x95=\x97\xaaU\x0f:\xdc\x16\x81\xd2`5\x0f\xf7\x9a\xfa\xa8\x10\x1e\xeb\xab\xa7\xcf\xc85\x8c\x02\xf4x\xaa\xf0\xe3i!\x9a\x1f\xb6\xee\x80\x91\x16U\x10H%bt;o\xda\xd1\xd5D\x85\x1c\x91u\xe1\x0c9>G\xa7\xb0\x1e\xc0\xc7\xfb\xda[\xad\xad\x80\xf7\xe3\xdc\x15\xf3\xc9t\xa0\xd0\xbc\xbe|<\x1a\xc1J\x9d\x91\xcc1!4\xc25\xe5t\x07\xbff\x81\x1f\xa63\xe27\x10\x97\x07\xd8Z\xe4RO\xf5\xdap+\xe2l\x9a\x0f\xce\x12\x17Nm\x06uF\xa9C*&\xb0\x01\xc0\xb1O>@\\\xfb\xbb\xdcW>z\x84\xfd\xd3s\xa4\xbax]7\xb7\xb0\x01\x05\x90\xad\xa3C\xea\xd3\xfe\x1b9\x7f\xb3X,\x07\xfd\xc5b\xb1\x18\x00\x83>9\xcc\xf9U\xb6(?K\xd5\xb1\xf8\x80\xcc\x18s\x08\xe3\xdc\xd4\xde\x07}p\xfc\xe1\xc0O\x9du\xe0\x87+2_\x0e\xcc\xee\xac\xfe\xbd\xe0V\xd4E\x0e\xe2\xc3\xe8Xv\x0cR\xa7\xcb\xeb\x87\x84\x8d\xac\xac\x1b\xdc=\xd6\x1c\xa1\xba\x17S\xbd\x93s\x7f\xa9\x06\xaf\xde\x03\xa8p\x96W\x9d&\xb8\x9d\xa9H\xfe\x95%ZXCqm\x07\x90\xd9\x08x\x1fc1\x1d\xbbhJa/\x9b\x17M\xcbU\x1d\xc5\xba\x9e\x92\x97\x07\x8c\\N\x1c\xf8ZM\x83 \xd6\xad\xb54EGo\xb9\x16\xd4\xa60\xc8~9K#k\xa7\x93\xe5v:\xf4\x82\xf0\xe3\xa3\xa3\xf3\xc3\x81\xd7\xa6\x0d\x02}\x87\xa2M\x81\xd5y\xf7\xc0\xeahG\x04\xfd\xd4\xe4\x8e\xab\xe1B\xd7\x8a}\xae\x96cT\x11k2\xe3\x05\x10\x05#-\x12\xe1\x1c5\xc65\x8f\x96\xcd\xe4\xaf\x1bMk\xaf\xfc\x12D9\xad\xaah%|\x0e\x82\x11\xbb \x86\x8e\x98\x1e\xb9\xb4\x08Y$f\xe4\xacN8\xda`\x84\xa8\xcd3\xe2\x82\xb1\x94\xb1\x99~\xcf\xe3\xe5\x04\xdan\xec\x08~\xd6\xd2\xc7\x87R\xf2\xd8\xc1\x80\xb3\xd57\x0f\xa0\xf1\x05\"\xcaK\x04\x94~\xc4\xc0\xe4\x05Y\xe4\xecY\xd5u\x99\xd1\x99|\xe6\xd0\x99\x14\xe2\x8a\x9e\x8d?\x9f\x9c\x80\xf2\xf4\xc9pqzum\x15\xa6\xc3\xdf\xe49\x96\xfd\xebY\xfe6^\xfe|6z1}_\xf8>\xb8\xee_\xcf\x16\x93\xa3J\x0c\x9e\x0c^\x9e\xd6\xf56\x05\xd8&\x8b\xf1\xf2\xe7\xe9\xe8\xfc\xf9\xfb\xc1\xac?\x7fs\xf9rqwv6^\xdc\x9d\x9f-U\xd9\x87\xf3\x91\x92n\xa7U\xc2z\xd1\xa8}\xd0\xd4\xa3_\xa5\x16\x9b\xa2\x13\xaa\x97\xbd\x82(\x04\xaa\x90H\xab\x0f)\xb8\xab?\xe9s\x9b9\xab\xc5\xa1,\x94U\xbb\xa1l~\xb6\xd4\x8dL\xf5\xd5~\x0f\xac\x08\x02\xb5\xe7:\xb1\x02C\xd1/W?(\x8ba\x1dd\xef\xd6\xfd\xc3\xc1]Be\x1d\x1c^\x96\x02|\xe69(\x8e\xd6[\xba\xc2S\xb2\xaa\xe3\xc3\xa3[\xed\xb2\xcb8\xb0\xb2\x87zF\xf2[\x98\x03E\xedN04i\x94\x874\xb5\x13\x986M`/\xa4~ b \x87m\x93\xe9\xfdc2K\xbf\x8f:\x99iu2?\x0e\x91.\xd2\xa6y\xcf\x8b1N\xe7:\xf6\xeb\x8e\xe8(\xa5\xfa\x0fD\xe6\xa4\xab\x18CwR\x0f\x0b\x99?>\x04\xd6\xf48\xfe\x05\xb7u\xf0\x17#\x94\xfa\x18\xffs\x0d>\x1d\xads\xbb\x8d\x80\xb2[\x16\xc3\x1f\xfdo\xb2\xd3\xd1E\x9f\x9ec\x04R\x81\xd9\xd4_(\xee\xd3;\xf8\xa3\x9b\xf6C\xfcW\xbfE\x1b\xa8\xc7O\xf0\x95\xfb\xa9\xf9;Y1f\x13'w\x89W|\xces\x05\xb7\xef\xd4s\xb0\xc6\nq\x19\xc0\x13\xf6-Lyb\xfeB\xa9P\xfc\x84 Y\xa2V\x85z\x8c\xd8-|\x8a6\xf8\xc7\xc7\x7f!\x16i\x14a\x7f\xe2\x84\xfe\x94\xb1 \xf6n`+\xa4\x92\x92\xd8DD\x85b\\\xa4\xf0\x9e2\xbe\xf7=\x86\x8fij\xe2\xa1\x9a\x81I}\xb6\xc7\x8f\xbe~G\xb8\xd2\x10\xffD!&\xc74\xb1C`_ \x0b\xfa\x84\xec p\xca\xa9\xfeD\x188V\xe8\x19\x12;?\x0dY\x9a\x82\x06\x8a\xf4D\xf4\xf4\xfc\xd33x\xc2\x16\x05\xccr\xc6\x01\xae=\x0bC\xe8/\x0e\xc1-\x86t\xbd\xf3\x10j\xf5w\x9c\xa5L#\xca]\x18\xf0\xc4\xb3`\x15^\xb1T\x88\xd3\xf8\xee\xe9\xe7\x93\xe7g<\x7fDd\\\xfbYx'8b\xe8&\xc1?\xf8 \xb1\x82j$\x16\x82z\xbb\x90E\xf8v\xab\xfe]\xb1tG1\xf4\xec\xca\x17^\xeccX\xde8\x80\xb9\xf6h\xa0g\xdd\xdb\xf1\x18\x83\xda\xe2\xd3\x98\xdd \x16\xa566o8f{\x16\x89\x15\xf7\x05\x1bS!X\xb4f\x98\x1d \x0c<\xee\x01\xa8u\x10\xd1q\x12\xd0\xfb\xd4\x8f\xb6\xda\xbf\xa3IR\xb9\xa9\x1f!\xea\xaf\x05T\xbe\xde\xaf\xd4\x1f\xb6>\xbfQ\x7f7\xd4c\xc2GX6\xcc\x84\xf9\x8d\xb6:\x84\xaf\x9f\x02zma*\xb7\xbe\xc0?\xef\xc28\xe1\xb1 \xc0\xbb\x154\x80\xbav\x1e\xae\x04=+~\x82\x7f\xb8^\x13\xde\x0b\xfd\x17\x97\x85@L\xfa\x91BK?\xe2\xdb\x0d\xbbO(\x16\x08h*60\xe0j\xd5\xe0\xa2\xa0[\x8dD\xa1M\xe17:%G\xa5\x10\xeb\n\xd3\xf1\x8e\x05zYE8wa\x16\xea8\xbf\xe1\x1e\xa0\x03\x19[=\xc4\x88; \x0dB\xfc\x9bPN\xdf\xbd\x03\xa4K\x02*L4\xe3\x84\xc7w\x10\x1f8I\xef\x01\xce\x9f2\xc6!\xc1,0\x96\xc6\x19\xc7\x95\xc5\x11iyz\x1fA^.\xf4\xb2a^\x1c\xad\x03\x7f\x83KL\xaf\x88t\x8bk\xf0\xe6>\xc1\xf4\x10\xa6*\x8d\x835\xc5\xc0\xc5I,\xfc\x0d4\x96\xe2\xc4\xa4\x82Q\x00+\xc5\xee\xa8\xd74\x01\xc7)\xb0\xc2\xa2-\xc0\x94\xad\xa1\x81,\xe2\x8c\xc2r\xcc\xc4\xf9\xd9\x19DaVx\xc6}D\xd0\xbd\xcfn\xc79\xf4\xb7l\xe5a\xf6[Aq\xf5\xdd{\xfe\xed= \xc3\xdd\xc6GD\xbf\xe3\xf0\xe9>L\xb7\xbc\xb7|8\xff( \xf9\x9f\x0e&\xbf\x7f\xfd\xea\xdb\xb7\xaf\xbf\xf8\xe7\xb7\xdf\x7f\xf5p\x01\xb8\xa2Eq+\x17+A\xf8I~CE+^\xc8Ic0}\n\xc7\x1aE3\x05\x14\x97\x9f\xea;\x8dN\x97\x0e\x06\x17\xa7\x15\x8d\\\x8a\xe5@u\x04\x98\xac3?\x9d\xbeW\x99\x1f\xce*\x8b\x97v\x1c\x04\xab\xc0\x0f\xeb\xfa\xf8\xa7\x9f\xb9\xb9\xa3w(Z8\xde8\xdd\xb8/\xa9<}\xee\xd6Iy\x9a}\xbai\xa6\xbf1f(9\x93\xf1\x0c'+\x1cI\xa0rA\xf1\xe7\xde\x1dF\xaa \xe6\xd3\xa5b %\xdd\x14\xb9&\xa0\xa1\xf8&\x12}\x95\xc1\xe85\x06#2}\x01\x01\xd6\x8b_Gd\x8aa\xb6\n\x97\x81\xfc~\xa4j\xa1}\xa0\xcc\xb4\xff\xe2\xf9\xf3\xa7OK;\xf2\xa0\xcc\xb6\xea\xc4\x1am6\xc0p\xa8\xb1k)2\xe9X\xf1\x01\x05J\xb5\xa7%\x98\xf8\\eY\xb6\x00\xe1\x14\x95\\\x0e\xec\x1e\xfd\xc2\xfe\xeb\xca\xb3\xac\x05\xb5\x99c\xf2\x95\xe0\xe1\xf6[v\xa7>\xfd1k\x88\xca\x01\x07*iC\xc4\x0e\x1am\xbf\xe3l\xe3\xdf\xcd\xd4\x8e$\xdaft\xcb\xc6.\xed\x8b\x1f\xdd\xf8\x9b\xfb\xc6\xf8*7\xaf)\xdf21sJ\x03\xe2>\x89!\xa8\x08\xe3\xee\n\x809\xa63\xd2\xfb\xeb_\xfe\xcf\xbf\xfe\xe5\xff\xfa\xeb_\xfe\x8f\xbf\xfe\xe5\xbf\xb8\xd4]\xfev\x17`\xfc\x91(\x0b\x1cJ\xa8\xfc\x8clF\xce\xab\xa7\x1c\xa5W/\x0e\x938b\x91p\x8e\xb5\x17s\xe6JW?\x9e\x05\x10\x8a\xa5\x07\x9e\xe4z\xa3<\xea\x8b\xda\x1c\x19+\x19|\x03\xc9E1\"x\xd7\x83\x88{\x1f\xca\x05v\xbb^\x8e\xaeV\xfc\\=\xd8\xa3\x0eA\xfd\xa0\xe7\x08\x83\xe8\x98mto\xd7\x05th\xbe72\xce\xf7\xd4\x06\xd9@`\x1aV\xcf;F\xd7\xc8 {;T2\x890\xb0}\x0f\n\x9fu\x90\xbeB\xd0\xa6\x91\x8e\xa5\xdb\x0dv\x1c\xc7\x83\xc0\x17\x02w\x94b\xa7\xe8\x00)\xc5\x00&y\\\x8e<\x14K5FH!\xc2\x87\x0dHR\x08\xef\x82\xbaP\x07\xfc\xbfr\xbf\xfd\x83,\x14?\xfe\xbb$\x0b-\xcb\xae\x0d\xab\xff\xce0\xc6q\x1d\xbe\x801\x8e\xaf\xff\xc0\x18\xf8=\x04cj\xe9\xe4(F\x82\x0c\xa1\x13\x0d\xfd8\xf4\xffCh~'0?\x94\xd4\x1f\xa2\xf1\xff\n4\x1d\xb6]\xf9\xd2\xe4\xc5}IU\x98w\xaffS\x0b\x83#&jf\x1e\xfez<\x8e\xeeQ?\xbf^s\x86\x07\x04\x943\xcc\xc5\x85\xef\xa1\xde\x97\xa6>N&\xcd\xd6>h=A\xc9\xbaZ\xfb\xf8\x07\x93|\x18\x99\x95\x1d\xda\x12:\xac\xe25\x8c&\xb6\xbc\xca\x84\xd0z{\x1a\xed\xf1D\xcb\xa3\x890\xca|\x16 T\xa6{~\x19\x9b\xbc8\xd0\x7f\xb6<\xce\xf0\xc4+W\xef\xe7\xa7]\x82\x1a\x1cZ\xe39\x18\xf3bNE\x8cZ}d\xe9k\xa6$ d\xf2\x1b\xd4\xf3\xfb\xf8\xdd\xc7\xc32\xcc\x05\xb5\xb0\x80\x99S\x0b\x06\x03\xb6\xf1Y\xb0N\x99\x8e\x11\xb5-\x00\xbf\xf1\xb7\x19\xd72\x01\x96P\xb2\x81>\x1b\xd0\n\xf1\xdd\x14\xfe\x05yl\x87\x87k\xa0X\xde=\x87\x7fA\xe9\xaf\xd6\x83\xf9\xab\x0f\xe2l\x9f\xf3\xf5\xa3\xfe\xc2,\xf8!\x0c\xbf\x1f%x.\x88a\xdbz7+\xa8\x04\xacw\xe0\x81mY\x84IP,\xa4x\xde\x12\x9aC6\x08\xe5\xa6\xfe\xfe\x94\xe1\xf1I\xc8\xa2\xcc\xfc\xf5\x05\xf6>d\xbaC\x11\x9e+F1\xce+\xceN\x9c\x08\x0bil\xc7%\xce\x84\x06\xcd\x9c\xad\xe1\x9fxk0\xef'\xf5\x0f\x9e\xe9q\xc8\xc8\xb3\x15\n\xb6\xf0\x0f\xb5\xe7\x00\xa6\xca\x94\x05\xfa<%\xdd\xd1u\x0c\xc7IiH\x03\x80\"\xd7\xc9\xa7 \xf5\x10\xdc4\xa1XPp\xff\x86\xe9\xa7\x18\x89N*\xee\x11\xdb1\x08]/\xcd\xc2\x90\xe2)\x05\x06\x9d\xd3R\xa7z0\xd8,`$\x05\x0b\x93@\x1f8*\"`V\x90P\x13\x0f\x0f(\xb4\x9a\x195gG\x82\xe3\xbf\x14)\xa0\x80\xbc0\xd6\x19\xf4`\x8f\xc7<{\x7f\x8d\x07\xb3\xb7+\xdes\x04\x8a\x03\xa3\xb0^\xba\x87^\xe0\xd2\x0d\xc46\xb8GQ\xd9<\xafQ.5\xaff&i\xe4\x87T0/\x0epm\xe8\xf706c\xac\x13\x04\xa7Qj\xd0\xd7\x92\x81\xc2\xea\xf5\xb9&\x16^\xe0' \xc5.\xaf\xd9F\x0b\xd1)\x9c\xe5\xb0 \xf0\x93\x14\x17\x87\x1f\xd8E\x81\xcb\x04\xcf\xcb\x0c\xdc\xf0`\x84\xe9\x1b\x86G\x9a\xda\xf6\x1e\xe8\xaf\xfdK\xf9\x96\xd3\xb5\xaf\x97'\x9cnq|J\x11\x97\x99\xa0\x862\x84\x06\xb2\xc2_\xa1+O\xe2\xe0~\x1b\xdbG\xcb5\xe9\xda\xa7A\xb1 n\x90N\xe01q\x8e9\x10\x01\n\x9e\xee\xc3U\xac\x0fq\xef\x84\xf9k\x1a\x05\xabzx\xd0\x1d\x14\x061\xed\\\xef}\x06\xe8\xbc\x87\xae;f=\x82Y\xdf\xb0\xdf\x06z=o\xd8\x97j\x12_Q\xc1\xfd;\x93\xa0\xc5\x88\xd70{z\xb819\xd5\x94U\xbdF\xfb8\xd8\xb3b\xc9\xdf\xf9\x9bM\x96\xb2o\x958\xa3\x99\xb2JL\xed\xde\xf3\x15\xd2\x0bH\x144\x12\x90\x13S\xbe\x0e\xe2XC\xf4u\x16y_\xe4\x8f\xbf\xcd\x1f\xff9\x7f\xfc\x1e\x1f\xff\x99fi\xea\xd3\xe8\xb7A\xa6\xe1|\xc5\xf8\x96\x15\x1e\xff`E\x8aW1Ovq\x10o\xef\xf1\xfd\x8f\x9b\x8d\xa1\xc5\xa87,\x80\xf3C\xc2\xbc,\xa0\xbc\xdc\x97\x1f\x92\xb8\x98\xe9\xb5\xb1\x84`\xaf3\xbe\xca\x02%\xb4\xb8F\x1d\"r\xf4B=\x8f!\x8b\xb4e\x89z\xe6\x1c\x97P\x08\"\x0f\x9a(l8\x05\xc4\x0f-^\xe3\xe9f\x08\x04\x99\xad\x91\x04\x84a\x16\xf8h\xea\x81\xa7\xb0H\x92\xd1\xd8!\xdektN\xe8z\xad\xabMv4\x121\x92b\xae\x89L\xc8\x91\x00\xea\x83\xdc\x04\xa8\x1e&\xfc\x84\xe44\xbc\xb7\x98\x1aj\"\x17j\xd2\xa6\xde\xcd\xa3%s!\x92\xb7\xd0\xa0p\xa8\xa1\xcd\"\xcd\x90\xf0 \x00t\x8cU\x0cc\xf5k\x14\x8b\x1c\xd2\x1a\n$\x9e\xc7\xb4m\x80%\xeb4\xf0\xb7\xfa\x01\xbfd\"V\x12q\xc0\xb4,A\xbd\x1b\xc5`\x10\xefW[K\xbcV1\xd7\x90y,\x08\xd4x\xe9\xf9V\xafj<\xcc\xeb\x8ey78\x94V\xc0\x08(2!/`Hvm\xad^\x8cB\x82\xfa\xab\x97\xa9\x17\xc7|\x8d\x89\x9a:A3\x8a!\x8cW4e\x86g\xd2\xd436>\xe6L\xcf \x84M00\xd3w~\x98!`\xaa\x8a\x8d\x9a \x16y\xf7&A\xd59Nw\xfe\x06\xea[1\xbd\xd2V>\n\x1e(!\x16\x96/ZB\xa9\xbfc\xc3o\xe1E\xed\xffz\x95u\x1d\xf3\xb1Z <\x89\x03j7\x1f\xf5\xe41\n+i\xfe9\xe1\xb11\x9e\xc3\x04\xce\x14)4\xf4\x05f\x07\xbb\x80\x8b\x1d\x12Pf\\#k\xf5\xe2\x08\x18'&\xf1\\\xa8]\x03\x97\xd5Y\xf7~\xaa\xf7,\xc8\x14\xd9z\xcbB\xcd\x06Y\xc0\xf6\x16j#\x04\xf8(\xfc\xaa\xbf\xe3XQ<\\\xf9\xf0nF\xa0 z)V=\xb6#\x82\xaf\xc5bq$\xc6\x1b\x1a\xfaA\xfejP\xdb\xbe\x8c\xe9\xfa\xc7,\x15y\x9a\xe0L\x8bA\xfa]c1\xbc\xed)\xf7i\x94\xe7\xbe\xb5h\xb6A\xd9\x03Z\xda\xc2\x06i\x0b\x1b$`\x9dc\x83?E\xb9\xd0\x08eY\xe4#\xe34 %i\xb5@8u9M\x1a\x950Y\x9e8D-?\x82va\x99\xdf\x00 7\x98\x00;\xb5\x1b\xd8\xa9)\xb1L\x17\xbaa\xf7\x89\x929R\xfd\x92&\x10X]\xbf)n\x00\xcf\x96\xd4\x02%\xcd\xc7,`\x8a\xd6\x8d\x0b\xecI\xd5\xcd\x82\xd0\x8ac\xf8\xae:\x99S\xe1@K3\xf9\xe4\x05\xb16P\x1c\xb3\x84\xef\xbc\x1d\x8d\"\x16\xa0\x00\x84=\xbdw\xa4Asw\xd0\x8f;\xe8\x07\xca\x1f*7\xfc\x03_\xee\xe1\x0b\x18|\xbf\x8b\xe3\x90Fk%09d\x94\xac \xa3\xf4P8\x81U\xaa\x97\xb4\x15{Vl\xcf\x02-k\xdbM\x9a\x17\x07Y\x18\xa56\x13\xbe[r\xad?kQm\xcd\xa28\xb4Y\xd7,\xd1:\x0d+\xcb\xe7l\x1a\x1es>\x07\xbbG\xf5\xc05ykbA\x81\xc2\x1f-q\x17H{\xc4\xc4\xce\xf7n\"\xad\x17\x0b\xecV.\xb0\xfaT\xb5\x05-\xef\x83T\x8a]g\xea\xc50j\xf5\\\xe0\xba!\xbd\xb3_\xfc\xc8>\xc6{\xb55\x81U\x03\x8dFqNL\xa3,\x1f\x07#\xad\xf3\xf8\xd6\xa6\xf1\xf8\xd6\x8e!\n\xcc\x06w\n\xe23\xb7\xbd\xe0\xb6\x17\xb8\xe7\x05\x03\xc5\xfc\xb5\x00\x95\xde\x13\xfb\xef\x98\xde[\xf8Z\x8f\x07\xe8e\xb5\x80 \xb5L\xc2\xbeh\xe2\x03\xa2\x88V\xe2\xe9 \xffV\x96L\xb3\xa4\x9ar\x1f\x86Lp\x1f\xe4\xf1}N}\x0e\x8b\xcex\x83\xe3.\xf0\xa3\x9b\x99\x99\xe3\xbb0\x98i\xebzH\xb7\xe2\xba\xfa`G\x03\xaa\x9cA\x8e\xde\xb2`?I\x8a&\x8f\x81\xd3\n\x89T#7\x9b\xab\x9d\x17$\x1a\x8f/\x06\xa8\xe8\x8c\xb6=ru\x05\xa6\xa6\xf1\x86\x88\xb9\xb9}:\x87[\x98\xeaO\xe5f\xd9\x88\xb0\xb9J^6x\xdf2\xa6\x9b\x95\x83\x0d7\xe4^\xbb-\xae\xebp\x93h\xf5\x16^\xa6\xad\xb7\xaf\xbdc\xfb\x11a\x03\xf2\xc7\xd5\x8f\xcc\x13\x85\xf0\xf2;\x9a\xfe\xf16\xfa\x8e+\xd1A\xdcO<\x1a\xc0\xe0i\xcf\xd1\xba\xd7l\x1e-\x1d\x9eT\x8c\xc9N\xc3\x91\x0d\xd1\x80o\xc0\xbb\xdc\xcf\x8b\x9f\xe7\x8bt\xf1\xc3\xf2\x89\xd4\x7f\x17\xef\x17\xefO\xb7a\xbdG\x89*p\xf9O\x95\xec\xff\xf4\xd2\x99y\x0d\xd6jk*\xe8x\xbe\x18/n'\x8b\xec\xec\xec\xb7\x9f\x8e\x17\xd9\xd7_\x7f\xfd\xf5\xf2\xd4q\xf2\x08%\xd4\x12\xc7\x12\xcb\xe1'\x8e\\{\xc8\xd5\xbf\x9e\xe1\xff\x1b\xb9\x13\x03\x91\xa4\xd7\x12o\xd6H\xc1\x02\x89\xd7-\xa4\xe7\xaf\xe5]\x98$\x83\x99\x9c\xbf\xa1\xe3wK9\xa7\xe3w\xc3\xc9b\xbc\x1c\xf6\xafg\x90\xa6\xdefK\xf9\xc9`P5\xb7#\xda\xb3\x154\xb6\xb8\x1d\xe2\"\x93`\x829se\xde\xaa\xccs\xd5\xcd\xb3\xb3\xb1\xfas~\xa6\xfe\xfd\xe2l\x91M_|\xa6\xfe\xfd\xec\xec\xabEv\x8e\x9f\xcf\xcf\xce?W\xff>\xdf,\xb2\xa7ggg\xcb\xd3m\xbd\xca{rEz\x06 \x8b\xf8\xff\x03hf\x15.\x18%m\xed\xe3D\xc9\x0f\x8a\x86\x90\xeb\x03\x16\xe5\xa4\x803XC\xdd\xa9\xee{2\xeb^\x0b\x03\xc0\xda\xe1f\x13\x10\xd1x\xa6\x18,\x18\xe1\x15\xbe\x81M\xa1\xee\x86]\x13\xe4:\xef\xec\xac\x05\xd2&\xea\xb3r\xc3\xedoH\xff\x0b%\xb5M\xfc\x14\xfe\xf6Y\xa3\x85\xa1%Sj\xd1\x9f\xe1=z]\xc6\x98\xb0_\x10\x01\x11\xe7\x0d \x13\xc3\xe1\x80Ds\x81\xebU,\xeb\xcb\x95\x14\xdc\xf5\xd5{\xd3\xb4\xba\x11\xe4\x0d\x8f\xc3vG\x80\n\xda\xb7m\x07\xae\x85:{J\x00\xd9\xf8\x11[\x17\xe7\xec\xd6\x8f\xd6\xf1-\xb9\x06{\x002\xd3\xef\xe5&\x9d6\x83v\xe4o\x9d\x8d*\xc8\xbe\"W\x84\xf2m\x06\x86`&\x92\xfcK\x8c\x0d_\xf0B`\xb3\xcc\xcf\x96\xe4\xba\xfc:#o\x9b\x02\x9a\xde\x95\x0c`\x9b&\x95\xe4\x10\xdfV\xc7\xd2\xfc\xde\xbb\xbd5\xdcM\xf6\x8c\xa7\xaa\x8bW\xa47\x9d\x9cM\xd4\xae\xfan\xc2Y\x18\xef\xd9Z\xc7\xbd>\xf9\n\x9ck|5Y\xc7\x1e\x80\xad^?\x87~\xe5i\x93(^\xb3\xd7\xf7 \xb3\xb6\x9bw\x13?\xfd!K\x92\x98\x0b\xa8\xead:\"wu0\xd4(\xfe@\x8aU\xb9\xc7\xe2\xcb\x06\xbf~\xeaw\xd3\xf2\xed\x8b\x0eu\xff\x11\xf2\xfcN\xe7\xf9\x9a\xd3ms\xde\xef \xef\xef_\xbf\xfa\xf6\xb5>p\xfc\nO\xa5\xdd\xd9_C\xf6?\xd4,\xad\xcd\xef\x95\xfd\xfe5\xe8\x83\xdc\xb9\xbe\xc1\\4dk\x95\xf5\x15M\xdc\xf9~\xb4\xfc\x1a(\xd27\xe4\xbaRLM\xddW\x93W\xf1;H\xfcB\x08\xae\x12g\xe4\x1bw}\x7f\x80v_\xb3\xbb\x86\xde}\x0f\xdf\xbfD\x8b|w\x96\xdf\xe1\xd8\xfe\xf1\xd5wp[\xda\x9d\xe9[\xc8\xf4?\xbf\xfa\xf6\xf7B$\xdf\xb3\x9f2\x966T\xf7\xa7r\x0f\xbf\x85\x1e\x96\x0b\x92\x19\xf9\xd6]\xf8'h\x86Ej\xff\xf6\xa7\xef\x1b\xfa\xfcu\xb9\x85\x9f\xa0\x05[\x86\xcc\xc8O\xee\xb5\xe4\xe4\x17\xdf5-Z\x85\xf6\xef\x14\xf5\xfd\xff\xd9\xfb\xda\xae\xb8m%\xe0\xef\xf7W\x0c~zR\xfb\xe05\x90\xa4\xb7\xed\x06\xc2!\xb0ii\x03\xe4\x02i\xdaK\xf3p\xcc\xaev\xd7\xc1k\xed\xe3\x17^z\xcb\x7f\x7f\x8eF\x92-\xdb\x92\xec%iz?\\\x7fHXk$K\xa3\x91\xe6E\xa3\x99`\x9c\x92\x8a\x88\xdc\xea\x18\xdb\x10\xc4\xff\x8f@\x98D\xd8\x16S\xfe\x08\xe8mBRI\xc1(c1\xc27\x94\xdb.\xd5\xc8\x87u\xf0\x15\xeb\xa0\x1eK\xbf\xc0\x0e\xbc\n\xa2\xc5\x92\xf7\x1b\x95\x14=\xe4\x8f\x08\xc9G\xc9\xa8\xf0P\xb0u=\xf4{\x84\x9e\x91\\ ${u\x7f\x1e\xce\x18\xb5\xea\xe1\x7fRZ\xef\xb7\x80\x7f\x83\x1d8c=\xa7in^\x97?\xa3T\xdc\x9e\x82\xe6\xae\xf6Kc\xa7\xffE\xf4\x85m\x10\xeat\xf0\xfdr\xaf\xdc\x88\x8e\xe8Ds\xf7\x8d!\xfd\x07\x8c\x8c\xa6\xed\xd4W\xb0\x03\x86\x95\xffo\xd8\x81\x89\xbe\xe8W\xd8\x81\xb9\xbe\xe8_\x18wM[D\x08\xec\x80F\xa4cON0(\xa0\xb6,aez\xcf;@F\x05;\x10\xbb\xffy\xf0\xe1\xe2\x03\xa3\xceq\x98\xbbW\x188\xeb\xca\xcd\xf1\xdf\x04\xffM\xf1_\xeay\x06\xdeH\xed\xdf\x89\xf4\xdf\x89\xb0\xd5\x10\xff-\xf0\xdf\xcc\xf8\x85\xd0\xfe\x85\xc2^\x9c\x11Cb\"\xc0[\x81\x96\xc21\xb1\xb0\xb3\xa9\xadpi+\x9c\xd8\n\xe7\xb6\xc2\x1b[\xe1\xc2V8\xb3\x15\xde\xdb\n\xafl\x18\xba\xb4\x15\xde\x12\x8bB;R\xc8\xa2r\xa0\x91.A\xd2\xa3\xa0\x8a\xf7PZ\x93T\xef\"\xe1\xe4\xc3\xbdD>\x98d7\xed\x97J\xcf\x12\xe1(V\xb9Gq\xa7\x1aSkg\xb5\xd6\xb8a\xb99}uh\xf8\x98R\xc6*\xb1\x97\x85ZI\xfb)\xa5LVB\xfaw\xde\x9d\x8d.\xdf\x9e\x9e\xbc>|3\x92\x9fz\xf2\x04\xa6\x81\xfa\xde\x17\x9b\x14\x0f\x82'\xfa}\xb9wz\xb8\x87\x0d\xfab\x9b\xaa\x17\x1f\xec\x9d\xcbb\xdc\xa8\xe4\xfbw\xc7?\x1f\x9f\xbc?f\x8d\x9f\x9f\xec\x9f\xbc9C\xa5a\xcb\xe7;\xd648\xdb{=\xba|}rz\xf9\xd3\xbf\xde\x8dN\x7f\x93\xa5\xcbF\xe9\xf9\xe8\xe8\xed\x9b\xbd\xf3QY}\xc2\x01\xde\xffx\xf2ftyp\xb2\xff\xeeht|.\x0b\x17\xbc\xf0tt\xfe\xee\xf4\xf8\xf2\xe0\xe4H\x16\xcc\x9a\x05\x97\xafO\xf7~P\xab\xde\xb7 \x0e\x8f\xde\x9e\x9c\x96\xe57\xbc\xfc\xf5\xc9\xe9\xfe\xe8\xf2\xd5\xc9A\xd9\xe3\xab\x1aR\xce\xf6\x8e\x0f\xcf\x0f\xff\xcd\xbav\xe4\x8b\x8dI\x96\xfd<\x1a\xbd\xbd\xdc?9>\x1f\x1d\x9f\xfb\x9ciV\xc4\xf1\xee\xf4\xf0\xf2t\xf4\xc3\xe8\xd7\xb7\xac\xe1\x9c *0\x0c\x11\x91i\xd5f\xfc\x05\xdfa7=\x9cZ\x0c\xecI\xb4\xbc\x0dy%\xa7OT\xdb\xf8Z\xb8%Uh\x80\xd8M\x88\x0f\x8c\xd7\xc6.%>D<\xb3\x97\x84\xcbnf\nX^\x82\x85\xe5_Y\xab\x02\xd7Z2\xa5^\xd2]\x8f\xed\xb3Gj\x97\xd2\x12\xb2P\xebx\xb8\x9a\x0e\xf8\xa2(\x87\xbe\xb3\xc3\xa4\x88\x12\x11c7!\x1e\xd6b-U\xf0UmF\xad\x08Oy\xed\x88\x94\xbf`\xecRQ\x9b\x12\x15\xbe\xaa\xcd&\n\xc9S6\x13\xbbgD[\xe8!\x01\xf0\x8e\x95.Wr\xee\xb8\x85\x94\x1b\x96RB\xfe \xb8*\xab\xb7\xc2\x82\xca\xcb\xdc\xa9\xe7\xf3\xadu\xaa\xdd\xfd\x0c\xdc\xed\x84\xf46\x18\x94J\xbe)&\x82\xfa\x08\xbf\xeb\xa1\xc6Z%\x9f\x07K\xce\xb1<\xbd\xb7\xf4\x04dv\x08\x92\xa0<.:\xb6?\x8f\xe2\x89\xc9\x9c\x01h\xd1\x1b\x87\xf9x\x8ey8\xbaZ\xa7ENR&\x92c\xe8rs\x93\xab \xfb-\xe9\xba\x9e\xac>\xdd8XiF\xd8S\xfa\xf0\x0c!g\x1a\xd3\x9e\xfc\xcd\xb0\xc8$\xea\xce\x16\xa6)]\x0c\x1bv\xf6\xe6\xf3\xd0c\x06\xac\x94\x06\x9f86\xb3p\xa1>\x9f:\x14\xf3\xc4\x89\xae\x97\xd85\x9a\xd8\xf4\x9d<\xef\xbf&\xa5a\x96K2\xf61\xdbNf\xe4\x13M\xc1\xbd\xe1\x1b\x12\xca\x04\xdb|$/\xb77\xc4\x1f\x0e\xac#7\xb8\xee\x9a\xbfn\xeae\x0f\xfb\xc8k\xdb\x92\x85&\xd1\x98\xd1\x0ej\xb4\x03r\x0b\xef\xcc\xc3dO\x1a\xa4$[\xd2$C\x1b$\x1b\xacT\xb4\x1d\x1f\xd2\x80.I\xe2:?\x8c\xce\x1dq/e\xc86\xe7\x0d\xc6\x18_\x8c\xe7a\x9a\x91|\xa7\xc8\xa7\x83\xef|D\x89/\xd2\x9a\x06\x19I&.#@\x8fGE\xa9>\xf3\x08Jb\xd3\xb1\xef\xf5\xc0%\xfb\x92\xcb\x06}\xe0\xf1\x18\x83\xafS\xba8\xc33D\xb6\xcf8e\xdf\x9d\x9ek\xd3\xdc\xa7\xf2v\xfc\x93'\x90\x97\xc6 !\xa8\xe3\x95y\x9e^\x94uIg\xdap\x1d\xc7\xf3\x82+:\xb9\xf7L[x\xa2\x16L\xa34\x93\xcdc1\x13\xc4k\xdb3\xa3\xc7\xf7\xfc\xbc0G\xe9oW\\\xb1\x81\xa1\xb8\xbf\xe4]l\xb6\xefw\x81\xde\xc8]7\xd70 \xd8v\x8c\x00\xca-\xads\xe2~\xbd\x9d\xdd\xcc^n\xcf\x80\xa2\x8f\xf0\x0e\x06~k\x0f\xd3\xf5\x9c\x97\xdb\x1b\xb3\x97\xdb\x1b\x0c\xfck\x03#$\x01\x86\xdb:\x13.\x19.j\x91\x18\x82\xc9\xbd\xe62\x82\xbe\x9e\x9d\\\xdczW\x97/\xb7Qo{\xb9\x1d-f\x90\xa5\xe3\x1dg{\xa3\xf1\xe6\x0eh\x82^\xf2;aL\xd2\xdc\xdd\xf266\x9c\x97_{\x9e\xa6\x83\xc0\xd4T\xae7\xed\xf3N\xea\x11o'\xb6\x07W36\x86\xe7\xa3\xfe{\xa3 \xd4\x1f\xc5Ir\xc3\xde\xf9\xe7\x9fl\xd1\x12\x1f\x8e\x82\xb3\x1fO\xde_\x8e\xde\x8c\xb8\xac/_\xec\x9f\x1c\xd5_\x9c\x8f~=\xf7\xbb\xa9\xa1\xf1\xf9\xa3\xe0\xf5\xe1\x9b\xf3\xd1\xe9\xe5\xde\xfe\xfe\xe8\xed\xb9y\xf5\xd5s.\xd5\x8b\xb4\xaf\x0fWFE\xa9\xfd\xee4\xb4\xdfs\x8d\xf6{\x8e\xb1l D\xe8U6&t\n\xe70\x14\x07\x9d\xa6\x86\x88\xa6!\xc2\xd5h')\x16W$UM\xdd\xa4<\x02\xe2\xc7\xba-\x9f\x07\x0ep\x1c.\x0c)O\xf5\x88\xf9\xd8\x12\xb3\x1a\x973\x9b\xcf\xcf\x17\x04]+\xd8\xff\xc1\x94\xa6\xa3pN<\x95\x0c\x8eQ\xfdT\xdf\x9cb\xe8/\x8d\xcfJ9\x7f\x86 \xce\x03\xc6\x99\xf6\xab\xe3 \xed\x91H\xaer\x07\xcewJi/S\xfb\xf1\xb1\xb3\x89R&\xb3@f\x8a`\\\x05\x969\xe1\xb9\x1al\xf9\x7f\xa5\xf4Q\x91m\xddA\xa7{J\x8a%M\x1a\x13\xc2\xe7\xa3\x83\xfd\xf3\xf3\x8e!\x18\x8eH\xe4\x13\xc61\xbd%\x93\xf3p\x96\x0d!\xb1\xa9f>\xac%\xe4\"\xfd\x80\x01\xff\xd8\x1f]\x8b\x80\x8d\x80\xab\xb2k#\xach\xc2/ \xa2$#i\xbe7\xf9\x18\x8eI\x923&\xdeG\xc4\x01\\i\xed\xba\xae\xb37\xcdI:Bg:\x06\x90p\xc1\xe0\xb3\xc9\x94\xcd\xf97c\xadk\xff]\x9b\x12\x1eT\xb0%\xd3\xf0\xd7\xca1]\xf9C\x0f\xbb\xb6\xb1\xbd1\x0br\x92\xe5.Q\x97\x10\x97\x0eV\xd2\x9d*M=\x18\xc74\xe1\xaa\xa0m\x03\xaba\x99'9\xa9:P\x06\xe8c\x1d\xf4\xc1y\x12\xe7/\x1c\xcf\x93\xa6*\x99\xeaA\xdd\xf7\xb9\xb8X\xfeS\x1fO\xd9\xde\x0f>8\xc0$G\xf9\xe2+\xfe\xc2\xafW\xa8\x82J~\x01,\xa8\xdf\xdd\x81\x84\x0d\x93-\xe2\x90\xd1\xa3}[\xddZ\x85\x0b\x9c\xae\xc8\x05V\xd6\x07\xedpiO8\xda\x13.\xea \x17\xf6\x84+\x1e\xcd\xf2\xca]\xbe>;<\x82j\xc5a\xba\xb6>\x86\xf4v\xcc\x15\xdd\xc3\xda\xe4\x1b\xb5.\xa0\x89\x0e\xfa\x970.z\x82_\x13\xb2d#\xd2\xc7ki>\x82\x15T(\x18\x0253\x04\xd0\xebJ\xea\x83\x8ebl.\xc2\xd2\x11\xac@_\xd6n\xb4\xc8\xec\x92(k\x84\x17\xc5\x07/H\xc2\x05\xf1\x91\xf4\xf2\x00\x0f\x98\x82<\x8d\x16\xae\xe7\xf3\xa0\x85u\xbe\xeaC\x16H\xd4\xf2\x04P\xfc7\"\x8f'\xeb\xc8\x02\x89\x1e\x91J\xb3\xc9m\xf7\x94\x18\x96hJ\xe6_W\x1a\x92\x07d\xb8\x85Q\xe4o\x87G?8\xca\x8e&\x05\x9d0\x88&\x1e\xd29\xfb\x8b\x13\x14w^\xab\xbc]1\xa0]\x10.\x97\xf1=\x1e.\xbf%.?\x8e#\xfcG\xc2\xff\n\xcbL\x12\x91\x07/\xa1\xe0\xbcA\x95PD\xb5\x88\xa3\xc9\"c\xc8\xc7\x90\x12Q\xf7\xa0\x93\xca\xe1\xf1\xdbw\xe7\xbaa\xf2\xbb\x0e\n:\xf0f\x1d\xb7\xb6\x0bs\xf9\x05E b\xad`\x7fy\x1eF\xc5\x8d\x92B\xe3\xc7\xa0{\xd8\xc8\xb0\xb9D3\xec\xc4\x07\xc7Qp\xd5\xd9\xa2\x9d\xcb\x83\x18\xaeB(\x18)\xf8\nY6\xf6d\xad\x1c(\xa7\x03\xfe\x9b\x0d\xcfM!J`\x8f\xfd\x8d\x7f]\x13\xcf\xe8P\xd9|\xd8G\x05#d\x04\x87\xff\xa4\x9dl\xcf\xc3\xa3\xb6'O\xe0\xdf\\\n\xa0^\x8f\x99\x079\xfb8P\xac\xfe\xebc\xaa\xf7\x1b\x18\x88\xc1\xad\x95d\xc0\xa9`E\"\x00\xd1\xcc\x19V\xee_\xa7\x1chN\xf8\x18+\xa4\x12\x82\xb4\xd3w\xcc\xa0\xb6\x86\x97~\x15RPn\x0eT\x04\xc1\x1d{\xaa,0\xdc\x80\xc8m7kw\xe4\xc2\xa4 |\xe8\xa6b\xf5\xc1\xb0\xa2\\\xe6\xfe\xd7g\x18#\xa8\xe3L\xaby\xea\xd5@\xf7\xea\x82N\xd3T\xf3i\xaf\xf8\xd4\xf3\xd5\x93\x01\xba\xb4\xc8h\xea\xb3\x82\xb8\x0f\x9d\x83\xb1\x97\xb6$@\xad\x94alb\xa5\x03\xa5\x03U2\x04b?\xd7\x92wM\xfa\xc8Tl\x13:b\xed\x99\xa9\x07\xf9}[\xa6:\xc3\x80>\x07'G\x0e7\x87\xb0\xc1\xbe\xc0\xef\xa6AB\xeer.X\xbf\xf0Z\x0c\x98W\x14\xa1B\x92R\x18;&n\xc2\xb5\x9a\xa4\xd4\x8f\x14\x8d\xff\x049CU\xe6\xf9p\xcajX:\xde\x9a ]\x97\xf5\xb3`\xbcxr\x17d\xa2\xb1\xbe'|}g\xa3\x8f\xf4\xddG\xf2\xee#u\x87\x1d\x924f#\xe4Qqa\x07\x9c\xdf\xef\x9e\x8d\xd7\x06\x83\xdf\xef\x9e\x11\xc6\x88K\xf3\xceZ\xa5\xeb\xe3\xdetH,\xf7\x0b\xa0\xed\x0b\xab\xd4\x0fr\xcaO1<\xc8\xe7)\xbd\xc5\x83\x1d\xa68\x8e\xd2\x94\xa6\xae#\x8b!\xca \xa19\x84%\xf2M\xce\xb0\xe5\xf7Z\xbd\xc5AU_t\x19\x0b\xd7~t\x12\xa5\xf9}\xf5E\xde\x90\x0f\xe1\x15M1N\x8d\x81x\x8c(]\xab\x1d9t\"J\xb5\xbd\xde\xbb#\xecp\x98GcnHa\xc2\x8a\xce\xec\xd2\x84\xeb\xb6\xe6\xe8\xec\xb1\xa55\xac\xde\x9c\xdb%w\xb2\xf6\x04\x19\x18\x1a\xa8NtV\xdd\x1b\xc1t\xb3M>f\xcc\xcf\x91\x9a\xf7\x08\xba\x916/1\xd4M\xdf\x1e\xf0,\xbb\\HK\xf8\x19J} x\xf5#\x06\xc5a\x98\xed\x04k\x9b\x9eW\xb7w\xbf:9\xf8M\x88\xcb\x95\\\xbd\xcb\xf7J\x18B\xc2\xb4\x03\x92L\xf8\x99Xj:$\xb2\x0bdH_\\\\_\x9b\xe0\x7f\x03\x99-\xb8\x14N\xb6\x1d%\x7f\xb7}\xd5\xac\xc9\x91\xa3\x80+\xea\xf0^\xf3\x9b2\x06W \xfd\x14\xf0\x93\xe6\x13\xb6}\xa3\x95\x8b\x1f\xef\xe9{P\xdeC*8kJ\xbc\x17\xb8\xef\x15u\xae\xc2\x0dL\xb4\x86h\xca]x\xd8T\x1f\x13\x97rnB\x8d\xdc\xe4\x80T\x85\x9c\x9dP\x91\x8c\x98\x1a\xfa\xc60\xb3\xb0\xdae\x18\xc4\xacCG\xc1\x11\xb2-\xf8'~\x9e\x904<\xf0_\x80\x8a\xa6\x17\x1e\x845\x02\xe9\x81C\x90\xf4\x82A\xfb\xcd0b^\xef\xb9V\xc2\x80\x7f\xe3]:\xf3e\xaaK\x1f\xc2\x15&Z4\x88G\xb3\xea\xd9-#\xf2\xd2\x94\xd8\xaa\xf9\xc0\xd6dF\xf2}\x9aL\xa3Y/\x1b\xd8\x1e7\xd2r\xdfdMly\xd6\"\x06\x8aj\xb7ij\xb2rW\x95.\xcf\xfaf\xc3\xc9\xe4GJ\xaf\xfb\xf2\x7f\xfd\xd9\x03\"\x1c\x8f\xa3v\xf8\xa9\xd4\x9f\x7f\xe2^\x84'Sh\xc6\xcc=\xcdU\x8cj\xf3ju\xc1\xf4\xfd\xda\x99\x97^\x90n4\x9b\xad\xd4\xae\x1c\xc5\x85F\xa7Q\x1a\xde\x8b\xe3V\xdb\xc6\xa6\xd1\x0fW\xdbZ\xed\xe5\x832\x16\x9e\xce\xb6\x0c\x8b\x9c\x8a\xa2G\xc5W\x16\xfev\xfcpS\xdeSvs\x1f\x9c\xcbK\x92\x1d\xd1 \x0f\xd3S\xef\xfc\x0d7\xe0\xa9\xa9\x02\x94\xd5)O\x8cb7q\x9f7o\x15PQ\xf0\xb4Y\x10\x89\x82g\xcd\x82P\x14|\xd3,(D\xc1?\x9b\x05\x99(\xd8T%f\xf6b\x8b\xbd(\xdf\x94:F\xdc\x9ey\xf5\x06, *T\xe0\xe9\xb1.\xa8\xaf\x88\xaf\xd6\xf4\x0dlF\xd8\x05\x81\x9f\xb1\x95\xee\xca\x9e\xe5\xb6k\x9e\xee\xa6\x0f4\x10\x1f\xf6\xdc|\x1ee\xdc]\x95\x15\x84\xcd\x027\x0f./\xd1Twy\x89\xccb\xd3\x87T\x01\xf2;\xd3\x88P\xd0%\xbb>\xba\xaf\xab\xe0\xc5\x82\x93\xb4\xb4\x88\x99 \"[/\xaa\x8554]\xc3\xe4`lM\x0dM7<\x01\x0f\x0e3z6\xa7\xb7f\x92[Zmh\xe6\x01,;\x87\x18\xf7Et\x94Li\xba\xe01 ;\x88\xc2\xd2\xa1\xb1\xeds\x0bz\x15\xc5d\x08[OWm\x96\x8aqz\x96\x91N:q1\xed\x84\x98wB\xc4rg\xf8D\x0cXx\x08\xc9\xaes\xba|\x0c\x9a\xc2\x1eh\xfa\xaf\x1e@Q\x0e@\xa7\xb3\xd5\xde<|\xf0|\xe5*\xc2\x83[\xb5Y\nS\n\xa3\xcbe)\xec\xc0\x18\xdf\xfe\xbd\n\x8d\x0fy\xf0SF\x13\x14\x15\xc2Kn\xa1D&\xad\xbc\xbd\xa24&a\xd2|\x8d\xe1\x03\x9b/\xb9\xe9\xb1\xf1\xf65M\x17\x1a.-u\xa8{\xa6*\xb5T\"*KZ:Q$JZzW(\xab\xe8\xb4\xa8{\x9d\xde\x95\x89\x82\xd67bQ\xd0\xd2\xbb\xb8\x94\xd7\x14\x88\xa6\x08>n\xbc]\x8aF\xb6\x9a\x8dp\x01\xed\xdb\xc6\xdb\xb9\x04\xdfj\xf5\xf3F\x16\xb5\x86\xb6\x90%\x9b\xdf\xb4\x061\x13\x89\x8a\xb5\n\xe1\xfd\x97U\x08\x97\xe5\xba`=\x08\xa2\xecT\x84\x85\xf6\x95\xa20\xb9\xf7\x1b\x90\x96bN\xad\x86\xa6x\xa1\x0f7\xe5\x9b8\xcar\x15\x82\x91\xb5\xedw\x98\xdc\xd7i\xf5\xaa\xe5*t\xa3w\xf2\xa1\xc9\xfe\xf9\x86\xb6]\xcd:\xff\x1c:\x7fK\xb5\x97:\x7f\xd6,\xd0\xe9\xfc\xaaF\xfe\xa9:\x7f\xac\xb4U\xe9\xfcuK\x80Q\xe7/\xd3J\x1dD\x93#\x1eG\xb6\x05\xf9\xd7\xa9\xff\x93([\x86\xf9x~\xc8t\x860\xe6\xceP\xc6:\xdc\npc\x07\xe2^\xd2\x92\xc0\xf5\x1a\x17\x1aCS7\xe9\xe4\x9d:\x16\xff\xf7\xd9J\x90\x84\xbb\xd0\xc3\x97Z\x17~:\x90\x18\xd5\x90h\x91\xd8W\xb0\xcb\x14\x08;5\x1c\x0e\xe4AN\x7f\xe2\xd7\xaa9{g?]\xd3a\xbb\xf4\x8b\xb4|.F\x17\xbb\xfc~i\xe9\xfe\x18a\xb8\x9a\xbf\xe0\xa6\x80>*\xa9\x0f\xb4=\xe3\x06\xc6\xd3\x06\xac\x9di6c\x02\xfa\xb88x\xa8\xc5\xc2\xe3\xf9\xaa7_\xc0\x18\xb6\xa1x\x01\xe3\xf5u\x0f\xe2\x8b\xf1\x07\xb5\xe6\xc5X\x13kQ\xc6Y\xc4S\xe5\x1d\x03\xf3\xc3=\xae\x93\x01\x8e\xc38\x16\\\x90\xf8p\xc1\xea\x96\xc1$\xb8\x9e\x96\x96\xdbQ\xaf\xc3\"\xe9\xae\xaez\x8er\x92\x17\xfbh \xa2`\x92\x80G\xec\x0e\x18\xa0\x88\x81X\xbeC\xba4,<\xd1\x9a\xec\x15\xe3\xb2\xf2\x9d\x90\x90\xb4\xc7Sl\x1c\xa3\xa4X\xac0\x16\x81\xe7\xd6\x17\xf5\x1f@\x9bvK\x14a\xf4\xf4%\xe4\x89\xbf\x81/\xf6c?+\x08\x0f]\x8c\x96\xf6b\xb4\x9c\x87J\x99\xb8\x8b\x87N\x08\x8f\xf3d\x8c\\\x07\x82\x85\xa6\x01I\x8a\x85\xd92\xcd:G93\xdd\x15\x7f\xb8\x1e\x0c\xf1\xac\xb7\xe82U#Ou\x1d~\"c\xf3s\xea`;V\xbe\x02u\x8b\x1a\x95\x91Jw\xc1\x89\x12\xcc\x07\x84\xd7\xab;\xee%`\x90\xa8Zm\xda\xa3\x96\xb8\x9b\x80\x82ff\xe5]P\xd1\xaceF@\xb69Z,\xf3{q\xa5b\xcd\xc2\xa2\xa0\xc6\xcb\x90\xc8\xd5\xfd\xc0X\xcft\xbb\xd3\xb8\x86b\xdc\xfch\xba8\x08\xf3Pn\x80\x11\xba\xbb\xaf\xb9\xce\xeb\xb2 JD\x0c\xda\x8e\x83\xa3\xdcu\x0e1\x91\xa4]\x10\xa9\xed\xb7b\x8b5Q\x89\xd5\x82\xc6\xea\x0eEs\x96\x9e}\x12\x1d\xadNC\xad\xa9\xeb\x92\x90e~\xaf!\xc4\xfa dk\xd3\x84\xa0\x85|\xdf\x03Q\xcb0\xcbni:\x91\xb8\xe7R-CFU2\x94\xb9\x07\xffk\xf0\xd9\xbd\xc2\x16Q\xf2\x06[\x1b\xda\xfcK'\xe4\x8a\x16\xc9\x98\x9cG\x0bB\x8b|\x08\xcf\xbe\xb1@+\xa1\xe7\xacb\xe9_0\xdb\xad\xd7\x9fU\x02\x95\x16\xcf^\x02(1\xdc]\xef-dJ\xf3\xe8c\xad\x1e<\xae\x06Bc_\xcc\xd1\xf7\xf5\xc2\xdf\xaa\xf2R\x1ady\x98\x0b!\xc0(\x9c\x1d\xe6D'\x9cY\x1c\xae\xd2 #\xf9\x19k\xba\xba\xdao\x8d\n :hg\x91ri\x88Kj\x19\xc9\xb98f\xacd\xf2\xefW\xb0g\x184w\x98b\x03\xef'\x8fj\xc6k\xbd\x1f\xb0\xcax\xe5\xa5<\x11\xce\xe4/\x19o8\x994\x07\xbb\xcaX\xfb\x04\xc4\x10T\x06;p\xe9J\x8a\xeb\x12\x8a\x04\x06\x048w\xcaslau\x1e\x8d\x80\xd5U\x10\x0d\x1az`\xa1\xdfx\xff\x82\x01\xe2B7^\x9c\x15\x1f\xaefF\xdbH\xed\xe5_\xa3-\x95\xd6\xd7\xf7Q\x1c\x9f\x921\x89n\xf0\xb4,\xeb\xa1@\x19\xe7J\x92\xde\xda\x8e\xd0\xa2\x94]\x8f\x89\x7f\xfc\x9d\x9cN\x9bB\xa0\x92\xa3~*:\xf9\xd9\x17\xb2\xa0\xdau\xc4>\xba$?=\xec\xa7KR\x84\xedV\xed\"\x84\xebR'C\x84\xeaR'\x0b\x842\x99OC\xbc\x11,\xb4\xbeP\xd5\xfa\xec\x06\xd4\"\x88\x92)I\xb9\xf8\xe0FA\x94\x93E\xd6\xedhV?Q\xe9\xe1s\xf6\x8ag\xf7\xef\xf0\x1f\xcbP\xb7\xb5\x88W\xd0\xa6h\xb3&\xbc\xec\xd2v\xe7\xd2\xd3\xed\x13\xb5\xddy\xd7\xc6\xaeH\xd5\xe1\xeaR5T\x92\xb5R;\xecQKf\xdf\xed\xbe\xb7/\xd6\x9c\x85\x96\xa1\xad=\x1b\xa2\xbf\xd7\xa0kz1\xfd\x9b\xf5\xe2\x8ey\x14\x0eW\xdc\xedc\x8dGC\x99\x04\x98]\x91\xfd-\xfet=\xd8\x86\xad\xea^\xca$X\x84KE\x10\xf2\x81v\x11^$\x84\xe6\xb4n\x96\xcf:.\x96\xc9\xd9\xb75\x0f\xe2\x13K\xdc\x10xZ\xd7\x9e\x92\x8b|J \x06\xaf\xf1\xf0[/\xd6J\xb6p\xab\x80'\xeb\x82j\xe5\x9d\x8f\x8b\xe5\xc5\xe6\x07\xbe\xe3\xc1:P\xcb\xdd\xe4\xce{Y\x1dsi\x1f-2\xa2\x0e\xa2T}\xbf>f4\x19\xf0\xed|\xc0\xf4\xeb\x01\xdb.\xad\x0e\x81\xa6\xeeY\xdd\xcd\xa0\xfbd\x05Z\xa7+\x1dF*)]\xf7]\x81\xfd\x04{\xf9\x94$\xa3\xaaO|)\xd8)\xc7\xde\x1dy\x9e\x13Y\x96\xbf\x19\xc7V\xf3\x124\xa6\xf6*O\xe0*O\x06\xd9\x02\xb4\xb3<\xe0\xfaH\xc7\x86K\x93\xfd8\x1a_\xf7\x10^\xd4\xa7\xc4^\xa5\x87\xb9]\x88\xb3\x11\x9d\x03\x03pL\x9e\xa8^\x90S~\xf4\xf3X\xd4\xad\x84\xb6p2\x01\x07\xd6\xab\xcd\xab\xc1\xf8\xb8\x1b\xa1\xf1[%B\x91#\x08\xbdM?06\xee\xbd\xc9\x04\xd8g\xb5\xc3\xef\xb4\xb4\xbc-R\xb2\x8a\xb5\xa5r;\xebeo\xf9\xdf\x81\xdf\xca\x07~\xabj\xa9\xff;(\xd3?\x7f\xd1AY\x97\xceB{\x1d\xa7\xd5\x0f\xca\x0c\xa7\x0bx\xf2%\xf4\x9b\xb4\x9f~\x13\xf69\xcc\xea\x10#\xc2\x9e\x1ba\xba\xbaX/Dz\xa5f\xda\xcfX.\x82\x08$\xb6\xdbFuA\x9d\xbb\xc6MS\xba\xf8\xe9\xccs)jYx\xff\xd3\xc9S\x9e`e\x1a\xc6\x999\xe1\x0b\xe8\xa5\xf9\xb2\x1d\xdb\x81\xd7\xaaB}\xb7I\xe1\xd3L\xe4\xa5\x07\xf1\xa3\xf7\xec\xde{\xb2\\\xa1\x9fl\x1f\xb7X\xc6\xd9\xc2\xc9H\x8esrN\xcf\xc2\xc52\xeee#\xaf\xbc\xbb\\\xf6\xe5\x19\xdb\x1cxm\x8e'\xcf%5w \xfd\xdd`\xa2\xb5\xcb\x1bEF\xd2\xf2\x990\xb4:\x0f\x93ILNVi\xfb\xa6\xccw\xdc\xed\xbb\xa1\x0c^\xe7\x03\xe8\x1b\xbd\x85\xe132\x80\xcf\xe9y\xb9V1\x81\x86\x9dO\x9d\xc3\xf2e\x9bdtw\xb4\xeb8\xf8B\x86\xbc\xffbN\x96\xbb\xce9\xb9\xcb\xf7R\x12>\x92\x9b\xd4\x0c\x0c& \xda\x93\xe50R\x9b+\x06\x04c\x1d\xf6\x08\x9e\xc4\xd8M\x16\xfda\x0d\xcfkF\xbddX\xac\x05d\xc3\x1fi\x94\xb8\x8c}x\xfd8\x97EGm\xb0\x89\xfa\x06\xa0\xad\xf5(w\xbe.\x11\x1f\x81\x1fu\xe3E\x1e\x86\xe2E\x87\x7fz\xc1\x818\x91F\xa7\x89\n,\xad\x17\xf0\x10\x92\xb58\x02\x8f\xef\xc2g\xbdt\xd3\xec\xa6\xe9n\x8c\xf8h\x98e\xd1,a\x8c\xcc.\xa6\xd7\x92>o\xf1\xfc\xceMuE\xe4y\xb6\xef\xf3\x95\xa6bJ\x03]~\n\x03'&=\xf3\xc2c(8\xb4Ta\xac\xe9\x1dH.R]\xa0\x89\xd6\x1b\xc9\x90\xeb$X\xa7x\xda\xc5\x9aK\xd1\x83XO\x9ck\x19\xfe7_@\x02\xdbj\xa2\x7f3\xf6@\x99\xb9\xfc\"1`\x0e\x90P\x99tG\xd2\xf0\n\x05\x8a\xdaO\x91|,e\n\xdb4\x9a\x15\x12hm\xb3L\xda\xc7P\xce\xe3\\\xa6\xc1m\x1a\xe5%D\x99}\xaaI\xa7\x845xM\xee\x19\xfe\xf5\x0b\xbe\xff$\xa8\xd6X>\xa1V\x85\x91\x07\x01u\x15\xd2\xe0\x99\xc3R\xf1\x9eG\x07l{\x157\xb6\x9b\xe6\xc5r\xa6\xd8\x14<\x02F\xbd \x14\x05[\x9b\xdf|\xab\x0f\x86Q|\x91\xbbOn{\x99\xf7\x92\x8a\xb5+{\xad\x9f\xb3\x04\x8f\xf5T\x8b\x80\x95\x9b\xc2\xa1\xed\x87IBs`\xeb\x12B\xce\xfb \xccj\xa1\xd8\xdas\xd2!\x90'}\xbd:\xb0\xa3D\xed\xd9)\x99\x92\x94$\xe32D\xdc<\xca`\x1ef\xc9\xd79\\\x11\x92@\xc4\xaf\xb1D\x19\x99\xc0\x00\xb2bIR\xd7\xabA\xb0\xa1\x90I\x87\xf8\xb0\x86\xc7\x0dJB\xc9Z\x10\x1fm8\xbb\\P\x81\x86F\x0d\xfa\x86X\x843\xc2\x98\x1f'\xfa\x93i\xcb-\xc7\xa2y$\xab9d\x93`I\xd2,\xcarSX\x05\xc9\x14\x92\xee\xd3\xbdd\xa5\xe3kU\x1f\xd0o,=s\xaf\xb0\x1e\xd2~=dO\xe9\x06\xf7\x92U\xe1\x82x\xe9\xcd\x86\xe1\xaa\x12\x9aGS\xbc\xe68,\xb7oxYU|\xf2\xa4\x02J\xf1\x88\xa8G\xbe\x066\xd8!\x08p1\xf8\xaeZP\xe1\xcb\x92\x91\x0e\xf4\xeayUd29\xb7\x89\x12\x13-%?\x93\xfb\x03zk7\xa0\xca\xa7\"\x0f\xa9C\x8a\xda\xfa pFI\xceS\xc20\xf1\xfe\x9a\xdcsdNi:&\xc7\x12\xed\xbe\xc85e0\x10\xb2.\xbe\x8a\x8b\xf4\x91\xfdcUM\xf4\xbbb?\xb8\x86\x80\xf0\x11\xe9\xd7\x1f\x1eQs\x1b6\xbd\x92\x86\xba\x84\x0f\xf9\xc8\x05^\xc4\x06/F\x83V-\x03\xfc\x8a\x84=\xb5\x0f'\xc1\x84\xf2\xf1Z*\xdb\x97^.L)\x8a\xed\xa5\x1b\x0d\xf2I\x82(\x13\xbc\x8e\xdf\xd1a\x02L\xd5)\xab\x9f\x19\xdb\x07\xcd\xcb\\\x87\xddGtg\xd3\xd7\xcf\xbf|\x90\x0e\xa6q\x91\xcd\xfbN#TS\x99\xf3\x9a\xb6\xb4\x13Hf\x8c!\xc7\xab\xb4\xafEk.\x1a\xb2}NOXz\xea\x97\x93\xd4\xa7cI\xc3\xc4$\xce\x18D|Z\xe5r\xad\xfeS\xca\xba\xec5\x9f\x98_\xa0\x86\x03\x1b\xc6J\x0c\xe3^$\x91d&--K\xec8\x81\x04\x0d\xb31\x7f!Wx\x14E\x9e\xa4\xac\x08\x0c\xa2X\xfe\xfeR\x0c\xe8\xf1i3{\x07\xdf\xc1\xa9\xee\xe5\"(\xdd\xe6\x98<\xd6f\x8c\xd8\x8en_\xa9Aj\xcd\x87\x9d\"\xa81r1\xb2\n\xf4=A\x07?\x83\xe8|\xc6\x84O w\xcb\x94d\x19\x93\xda\x17E\x96\x03\x89\xf29I\xe1\x8a\xf0\x06h\xaa\xc8\xd2>\x06\x1dv`\xbd\xfc\x90\x862I\xa5\"U\xba?\xe7N\xae\xc8\xdb\xa8\xe8Pz\xd4\x8ei\x92\xe5i1\xcei\xaaS[\xe4#g\xc0L\xef\x95F\xda\x8e8\xa0>R\xff\xb4\xbbA\xa9\xba\xec\xd0\x94\x8cICK\x92{\xbb\x02\x1bYM\xa2\x86]\xd0\xbe\x17\xf3>DUN\x8a\xe5l:\xeb\xa4\xc3t\xcf\xf2T\xa0a\xbd\xf2\x81\xf630\xbf\x8f\xe2\xf8S-\xcch\x95\xab\x8b!\xaeb`n\xdc\xbf\xe8\xb2\x97X\xac\xc9\x7f\x89K\xac\xdcH;\xb7\xd0D\\\xc6\xab\x8dF\xbf}\xe2\xe8k\x8b\xff\xcf?\xcb\x8c\x85\xb84+g[\xc5\x01\xb7Q\xd2[\x8f1\xddi\xf6!\xa9<}\xb5\x93Q~\xac1}I\xb7\x01\xb5\xe74\xbdK\x16\x9f\x83\xbc\xb8t#{k\x92Xzw\xf1o8\x97\x10\xb9\xbe\xec\xf4\xe5*\x91\x15J\x8a\x04R\xb1k\xbfM\x82\xec\x95\"\x9b\xbc\xbaG\xf5\xc6\xe68\xc3\xa3-TUNP\x1f\xb1\x9c\xef\x8a\x90\x0fB\xab2\x03\x16\x02\xd0\xde\\\x86PQ\xb2,\xf2S25\xc3\xc5}\xcd1\xf2\x916\x9c\xff\xf4I\x1aUZ\x7f\x89\x07y\x19\x96<\xf5\x98\xb8\xb3\xa9XA\xec&aR\x9a\x84\x13n\x12\xc6\xac\x85\xf6\xcfK\x1d\xca\x08\xf4\x80~/\x8e\xa0\x18\xc7\x07G\x12\x85S\x1aQ}pJ\xa2\xc0d\xd1u\xa2\xc0\x83\xfb\x16Q4\xde\xf2y\xe7\xed\x8b\xb9\xe5?\xe4k9G\xd6\xd3\xffqG\x0cKt\xf3\x86]\xcb\xdc\x95_/\x1d\x01\xc4o\xfd\xbe\x06C\x08\xfb\xb6g\x88\x17\x0eC#\x910\xba\x98v\x0c\x89\x95\xd3\x8e.0\x1c\x96\xe3a?\x8c=)z\xb5T\xadB\x99\xba\xb4(r\xaeueb\xe8\xba\"\xf3=\xd8\xd6\xdd\xd7\xad\xcd\x06D{\x93h\x8b\xc2\xad-\xa3\x0d\"w\n\xd9\xc1\n\x97\xf8W\xc7\x99\xa5\xe5\xae\xa0\xdc\xd3\x9d\xd1\xdd\x92\x8cs2QM\xfcmBIa\x07\x8e\xc3\xe3v\x01cz\xce\x85\xf0\xf09\xbb_\\\xd1\xf8\x83\xa6~\x04;\xb0\xf1\x7f\x7f\xcf\xd6\xff\xfc=[\xffjc\xd6\x86\x08\x11\xe2b\xb0\xfea\xf3\xeebs\xf0}8\x98~X\xffjC\xe3\xe6T \xe4\xe6\xd5\xc5\xe6\x96\x01\"\xe3\x10\xf4bs\xf0\xad\x01\x841A\xcc\xad\x7f\xa8\x93\x1d\xd8\xde\xaa\xa4f\xa9\xe9\x81B\xe7:\x11NM;R'\xc3\xd7\xed\xa6\xa6\xfa\xa62\x12OY\x0d\xf5\x7f}\x9b\xac\xa4\xdd,\xdb\x80\xc6x\xf6\xcb\xfey-\xe7\xd9\x91\xd6\xa7y\x949\x9e.\xec\xf2\xa4R\"+\x16,\xd3\xe4\xb4\xc1\xe7\xb0\x03Ga>\x0f\x16\xe1\x9dF\xac+K#\x8d\xf8\xd2\xef\xb6'\xef\xf028`\xdbNBou\xf2\xa7r^\x07\xea\xb9\xd8L\xaf\x7fH\xddC&\xba1\x1e\xa8\xac\xad\xf1\xac\x18\xb5 \xd2d\xddiz\xa7\xea{\xa3\x89\x9e\x08\xd2\xac\xa0\xc9\x97nK\xd3\xc2\xeat\xebX\xa2\xbe\x93\xe1\xba\xab5\xde\xed\x16\xd0hD\xa0BC\xaa\x066\xc0Z}\xf2\x04&B`\xf3@{i\xe5AM\x13\xa4\xb1\xcdc.\x15KF\xa9\x9b2\xa8PmBdF)\xdc\xbdQ\xe5/\xffF'U\x93\x17\x1a\xec\xc0\x8cm\x86\xbb\x90\xc3:\x8f)\xd6u\xc6\x0c\xcd\x0cJk\x9a)\xac\x12\xe6\x13\x18\xc2\xba\xe6\xf3D\xb8\xdc\xf2\x84~\x11\xe6\xf33\x1f\x97\x16\"\x1d\xb4\xe5,\x90\xcdp&\xc1`\x17bW\xe4!u\x9f\xa2\x86\xba\x0bOa\x08\xdf1l\x84\nX\x8a\xfdk\xd0\xb3\xfaK\xf5\x8ci0\x17\xed\xa1>\x1e\xd1\xf9\x10a6\x99\xc2\x87\x0c\x85\x13\xf4w\xd7\x0b\x1cSn\xb2\xd3\x96--e\x13\xb4\xd9\xebIH\x9fpLo\xa8K\xbc\xc6v\x02\xea\"\xbe\xea\xf6w\xb4\\_b|2\xb2Jv\x8ca*\xe9\xdbx\xa0\x17_\xa8x\xdcr\x9e26\xae\xa1Js\xa75\x91;\xe5#;M`\x00\xb1\xb5gJ\xc0\xbd\x98\x11W\xc2T\xb6\x9c\xff\xb5\xcdu\xb7%zB\xc0\x00\xc6\xac\xac\xad\x04\xd8\xfax\xdb\xa9\xf4/l\xe1\xff/k\xf9\xc6\x8c9\xca\x18\xd5f$\x17\x82\x99{\xeb\xf7\xdc\x05K_V\x18\x80\x8b\xb8\xea\xbe\x9c\xba\x84]\xb8q\x13\x1fBYi\xec\xa1\x05\xdf\xb8a\xae6\xab\xa3\xce\x9d?S\x08i\x02\x98\x1dk\x17\xae\xf89\x82\xdb\xa4\xb4b\xb5\xaf\xdf\xf5\x99/\xf3JHx\x1c\x06\xcb\x8cR\xd5\xa5\x8c\xe7\xe4\xe2.\x10L63EJQ\x1bP\x086\xf3\xdaV\xfe.\xb3\x86\xa80\xe6_k\x13N\xee\xf90\xad\xf0\xa9W\x14\x01g\xd6F,\xe2^\xb42c\xed\xcf\\\xb9\xa6\x00\xfb=\x17l\x86b\x8c\xaeq\xcf\xd7\xf4\xdc\xe8\xc5\x95c\xe4\xe8\x1ccbn\xfa0s\x85\x15\x06\xf7\xec\xb54\x88 \xe6f\xe0Y\xb0]\xb6[;\x8b\xf0\xee}\x18\xe5\xdc\xfd\x8cq\x98\xb9{\xef\xa6\x81x-[B\xc3{\xe8\xe3&\xee\xe4i\x18\xc5\xc8K\xd1em\x17\x9b\x96/a\x08\x13L\xe0\xd7\xffhT\xb1\x00#\"0)\x98\xc4B&o_\xf1\xebG\xb1X\x15\xd5\xd2ic\x87}\xbd\xf7\xb9\xafn2v\xa1\x80!\x8c\xdc\x85kH\xf0U{\xa9\xb8\x87IW \x1f\x12\xf7\xd9\x96\xa8\xdc\xa1\xe5I\xe7\xc2z\xf7\x9c`#\x8c\xe3\xe0c\xe6\x0c\xe1\xf9\xf3\xe7~\xab\xb0\xc8\xe7\x1b!6\x9aq\xa8\xa7\xcf\x9e\xea\xa1\xd0\x88\xc7a\x9e}\xffL\x0f\x93\x92I1&i&\xc1\x0c\x1f\xccd\xe2! \xf7\x8d\x01nI\xc6\x83\xdb4\\\x0ej]|\xf6\xfd?[\xf0\xfc\x10)k\x8e\xa5\xdd\x01 8'\xf1\xb2\xec\xe9\xd3g\xed\x01I\xc0\xda\xb8\xbf7\x82\xd5\x87\xfe|\xb3\x8dE \xd9\x18\xfd\xf3\xcd-3(C@mH\xcf\x9b&\x06'\xd8\x98\x10\xb2\x1c\xc4Qr\x1d%\xb3\xfa\xb8\x9eo\xb61[\x83V\x06\xf7|\xb3\x8d\x83\x1al\x1c\xde\xd3\"\x97\xc0m\xcc\xd6\x80\xcb|K\x83<\x9c\xe1\x1c.I\x1a|\xcc\xee\xb0\xf2\xb7}+7+\xb6'~Bo\x93\x98\x86\x93A\x91\xc6r\x96\xbekA\x914\xad\x93\xc6\xd6\xd3v\x1f\x18\x10\xdeG\x18\xe4i\x98dS\x9a.H\x9am\xcc)\xbd\x16-?mO\x95\xa1R\xedGB\xf3\x01\x9d\x0eP\xc9\x16\x0d\xb5\xc9\xa3OC\xcb0\x0d\x17$'\xe9\x80&\x84Nec\xed\x89\xeb\xd3\x18\xd3d\x96\x03\xe9\x0e*\xdbj\xcf+kK]\x04[\xedE\xc0@\x1ak\xffi\x9bN\x19Ts\xe9?m\x13(\x8f\x9dP'\xcd\xf6\x8c\n(\xba\xccxV* \xd9\xee\x1c\xa7\xdb\xc6\xce\xa0YF\x02N\x1d\xea\xd36\xbd \xa8\xe6h\xdb\xd4$\x00[\x03n\x0f%\xa6\x8dm\xe6\xbb6Rh\x98=knn\xed\xceq\xa8\"\x9f\x0f\xc8]N\x92\x8cAo\xe0\x06\xda\xdct44\x83\x95\xcb\xe3\xc5l\x83\xf1\xa0\xabp|\x9d\xc9\xd5\xa7\xc1F\xb3\xce<\xcf\x97\x03\xd6\x01YG\xc3M\x9au\xd4\x89\xd6\x90C\x13\xbc\xda\x1c\xd8vQ\xf6\xad\x8dVs\xc5\x8c\xa7X+\xfb\xd8\x8d\x8b\x94\xfc\xbf\x82d\xf9\xe0\x8aN\xee\x07d\x12\xe5\xb4\xdc\x93\x9e\xb5\xf7\x04[\xed\xb2\xc3m\x8aiV\x13\xdd\xac\xb2\x1d\x95\x9fl\x13\xaf\xa1n\xf9\xb5\xf6\xb2\xc0\x1a5n\xf1\xcc\x80\xfc\xda\x04\x19F\xdb`\x7f\xcf\x0d(m\x92\xe1s\x03y \xe3Sh\xb8E\xbe\xedmJ[OO\xfb\x86\x8f\"\xb0\x82C\\HQN\x16%\xde\x0d\x0b\xa0YQE\x98F\x04\xd1\xd6Q\xa38p\x1b\x93D\x91\x01\xe3\xcd\x06\x16az\xcd\x98\xa1\xfc\xaea2[\xd5\xe8\x84\xc4r\x80\xcf\x0d\x84\xd5\xacD\x938J\xc8\x00\xaf\xb6\x859M\x07W\xe1dF\xe4\x97\x0d\xb4\xd6l\xa4df\xd5B4\xac\x89f\xcd\x1b\x9e\x02r\x90\xe5\xe1bYV\xd6\xec\x00 \xd6\x8aINjs\xb2\xd5\x1ef\x86\xb71\xb3\x8d\xa9\xc0\xdf\xd6\xf7m\"\x910\xb5\xad\xba=\xbd\x8c\x06\x9b\xdcF\xd3\x18\x83R[\xd2\xec\x94\x08\xd3\xe04\x9a\xcd\n\xc1\x1aD\xfeT#U\"\x9cF\x9c~\xde&k\x99\xd5\xeecc\xb4m\xc8\"\x8f\xe2\xba\x8c\xdc\x9e\xc4\x9b\x88\xdc\xd6`\x9e\x1b`RJ\xf3A\x94|$\xe3\xbc\xec\xdcw%\xa46]\x0d5^\xd8I\xdc\xa8fly\xd0\xd4\x8e\xda\xb5\xa5\xad9\xbd \x8d[Z\xfc\x06M\x0e\xeb\xb0U\xbb8S\xbf43\x8d\x92 ,\xf8\x0d\xa1\xaf\x1dX\x07\x02\xeb\xe0|\x1d4\x0d\xbdR\xd7V\xfa'\xff\xa2\xc15\xb9\xb7\xe6O\x16\x95\xc5\x11\x0e\x83v\x95\xcb[\x0f>\xd0 %\x19\x8do\x08St\xeb\x17\x1d)+\x8d\x98\n\xbe\xb5\xf9\x0d\xc7\xee\xc3\x07\xef\x1f\x0f\xde\x8b\x7fll\xfc\x1f\xc8h\x91\x8e\xc9Q\xb8\\F\xc9\xec\xdd\xe9\x9b\x9d*\xc3\xe1\xe0\xaaH&1[\xe7\xc1\"\\\xfe\xff\x00\x00\x00\xff\xffPK\x07\x08-\xe3\xb5\x97=9\x05\x00\xf7\x0c\x1b\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x00 \x00swagger-ui-standalone-preset.jsUT\x05\x00\x01\x80Cm8\xec\xbdys\xdc6\x9a0\xfe\xff|\x8aG|w\x152M\xd1\xdd\xad\xc3:,k\x1d\xc7\x9e\xf5\xbb\xf1Q\x963\xf3\x9b\xb7\xa3UQl\xb4\x9a1\x9b\xec\xe1!Y\x13i?\xfb\xaf\xf0\x00 \x01\x10 \xd9\xb2\xb33\xbb5\xacT\xac\x06A\xdcx\xeec\x0b\x16U\x1a\x95q\x96\xba\xa5\x0f\xc4\x83\xdf\xfe\x00\x00\xe0dW\xbf\x92\xa8t\xe0\xf4\x14\xca\xbb5\xc9\x16@\xbe\xac\xb3\xbc,`{\xdb\xf4v\x95\xcd\xab\x84\xc0\x19\xff#\x10\xb5O\x81\xb8\x1e\x1c\x83#\xba\x91?\x9a\x93E\x9c\x12\xda\"\xfb+\x08Ws8\xe3?\xdc\xd9\x05\x0e\xe8\xb8k0g\xe2\xaf\xe0\xfc6\xbc\xbe&\xf9\xcfo\xce\xcb0\x9d\x87I\x96\x92\x0f9)HY\x0f\xa1\xec\xab\xf3\x87\x07\xb7\\\xc6\x85\xdf,\x89X\x8e\x9c\x94U\x9eJK%^\xd0\xe7&\xcc\x81\xc0)\xfc\xf6p\xf2\x87\xbaPT\x85\xd4\xcd\xe5\xca\xf4\x89\x17\xe0\x92Y~\xe1\x89v\xe9\x0f\xb1b'JU\xdavLG7\xcb/h\x17\xcaKl\xeb\x18r\xbfU\x9a\x1c\xc3\xd6\xa4]\xcc\xbb8\x86\xdf\x1e\x94w\x0fj\xa7|T%\x1dU\x14&\x89\x1b\x8b\xc1\xf9\x10\xfb \xfdJ=\xfa3\x81S\xd8\x1aK/\xea\xd6\x9anx\x9bi\xb0\x82S(}H\x83\x88N\x8b\xfe1\x87S\xf5\x10\xfa\xd0Z\xb24\xc8\xf8\xf9\xbc\xbf\x87\xf7x\x1c\x02vL>\xe4\xd9\x9a\xe4\xe5\x1d\xff\xb2\xbdBQ\x96.\xe2\xeb*\x0f\xaf\x12bY\x96\xb4Z\x11\xf1~\xdc~\x7fM\xcac\xc8\xd5\x15\xf3\x9a9\xd29\xa4\xca\x1c\xf4\xd1\x8b\x13R\xd2\xa3^\x06\x97\x97\xa4x+\xeeK\xeb\xac\xc9\x8f\xd8 :\xd7\xb0JJu\x0cp<\xec\xeb\x01{\x9d\x06s\x97\xf8\xe0\x84\x0e]d\x1f\x88:\xbdL\xdf\"\xbd;\xde\x0c\xdf\x99u\x9e\x95\x19\xbd\xa9\xc12,\xde\xdf\xa6b\x8f\xd8i\xc2\xef\xd5\xf6\xd7p\n\xce\x93y\\\x94\x8e\x0f\xa9\x9b\x06\x14pL\xc7\x07\xac\xda\x83;\xd3\xceG*\xf7\xefT\x05\x81\xa2\xcc\xe3\xa8tN\x94[\x99\xc3)\xa4\xee\xfe\xd4S\xf7\x94^\xa8\x99\xf39N\xe7\x8e\x0fNN\x8a,\xb9!\xf4\xcf(K\x8b2\xaf\":\n'N\x8b2L#\xf2~A\x7f\xads2\x8f\xa3\xb0$\xec\x935\x05\x1b)\xd6\xe3[s^\xde%\xf8\xb2\xa0\x7f\xbcH\xe2\xb0 \x85s\xa1\xf6\x9ca\xcfE\x14&a\x8eu\xc9_+\x92F\xf8\xdd*\\\xaf\xe3\xf4\xda\xb9h\xe6PJ`\xb4s\xf9\xe9dS\x1f\xaa\x936\x9c\xa1\xb7\x8c^\x9a\xdf\x1e|\xb1=\x9f\xc9]\xe1\x12/Xd\xf9\xab0Z\xbau\xd3\xadvE+;\x138==\x858\x88\xd39\xf9\xf2~\xe1\x12\xcf\x83r\x99g\xb7\x90\x92[\xc8\xdd\xef~N?\xa7\xd9m\n\xd9\x1a\xa1\x9e\xf3\x1d\x8c\x80\xc0\x08\xbes .`EJ\x88S\x06\xd8c\xac\x90-X\x9d\x92\xd5\xf9\xcb\x8b\xb7?!l\x0f\xbe\xf3\xb4\x8b\xe6\x03\x05\xcaA\x19^3\xc8\x81\xbf\xe8\xe6\xd1\x99\xb1?\xee\xef!\xad\x92\x84\xbf\xe3\x1b\x8a\xaf\xc5\xdf\xf7\xf7\x83\xae\xca\xd6X\xed\x9c\xb7X\x9f\x0bl\xb3\xf9%\xb7\xda\xba\xf4`\xbd\x81\xbc\xd5\xe6\x80a\xb3\xd2Ou>\xf5\xd1\xc3j\xcd/}\xd6\xfcL\xf2y\x8b_j-\xf9\xb0bE\xa5@\xad+\x1fd8\x057\xc5\x0f\x94\xd2\xfa\x83\n\xf1\x9f\x8f\xbf`\xeb\xf4\x14R\n\xea\xe4\xf3\x96\x1a\xce\x9bq\xcd\xd2Yy1\xf0h\xd2\xa7\x9a\x9d\x97y\x9c^\xbb\xc4\xa3\x18\xb2lUzh\x1f\xa8\xca\xf3\x81\x1f\xe9\xac>\xd2\xf5\xb9\xb2\x1dm\xd0F%\x1e:\xba\xc8\x87\x85\x0f\x89\x0fk\x1f\x96\x8c\x06\x81\"x\xdd\xa6r\xe83\xaf+\xfc\xd1\\\xe1\xa6\xaepn\xaepWW\xf8`\xaep]W\xf8\xc1\\\x81\x12\x88\x94\x0b\xc8\xe1\x18n\xe8\xbf3\"N\x17A\x1a\xf8\x81\x12\xf3\xae(\xfe\xed\xc1k\xe8\x0ds\x8b\x97\xbc\xc5\x98\x9eB\xd1Z\\\xb7f\xfe\xe8\nN\xe1\xb2i\x19\xbf\x91\x7f\xe3\xa7'\xadO\xe9\xf5w#Dvx\x98\x10hz\xb8?\x94Lv]\n\xec\xb7\x96\xf4\xdd\x8a\xfe\xef&\x8b\xe70F\x90\xb9\x9aE\x17\x1e\xe5\xa0\xe0\x18Ro\x16]\xf8@\xe9\xa2kZm\x01g\x10\xba R\xc6\xc7p\x87L\x98\xe9\x0e'X\xef5\x7f\x83\xf4\x96\x0f \xfd&\xf1Y\x87\x95\xbb\xf2\xe9\xa1\xa0P\x1e\xb7\xe1g\xcf\x87\xcbYt\x01[\xa7\x90\xe0\xcdu/\xb1\xc6\xda\xf3YOW\xf2[\x17\x7f\x9dB\xa2\x81\xd5f)\xf2 bw9\xf6\xe9I\x83S\x98\xd0?\xfeHI:\xfa\xc79\x9c\xc2\x1e\xfd\xe3\x03\x9c\xc2!\xfd\xe3\x07Z\xe7\x80\xfe\xf5g8\x85]\xac\xf53\x9c\xc2\x01V\xfbH\xdfN\x0f}\xe5\xc6\x17\x9b\xdd\xce]\xe3\xed\xdc\xd3\x8b\xf9\xed\xd4\xef\x1b\xbd\x9dO\x9c'\xd7\xed\xcb\xa9\xf7n`]@b\xe38\xaa\xca\xdc\xd2\xb3\x1c;\xda\xa8\xf3\x8c\x02H\xd2>\\\x1c\xde:N\x83b\xdd\x10F\xa7\xe0\x00\xfd\"\xa5\x18\xe7\x14\x91\x0f\xef(\xf7(%\x90\x84\x11q+\x1f\x9c\xed\xbfVYy\xe2x\x88\x99\xbe\xf3|\x08a\x04\xces\xfamL\xffz\xf6\xc4\xe1d\x9b\xf3\xdc\xb1m\xeffD)\xe7\x8b\xe5\xf2\x94a \xe2\x86\x9e\x0f\xb9\x9b\x07\x1f`\x04y\xf0\x1a\xbe\x87\xd8\xed\xa4\xd2\x04\x1f\xe580+/\\:\x07\xeb\"\x11\\#\x12\x94\xd9O\xd9-\xc9_\x86\x05q\x91{$A\xb1N\xe2\x12\xbf\x0e\x12\x92^\x97Kx\x0e\xbb\xeat=\x1f\x1c\xb6\x86\x94!\xe9C\xdc}\xe8\xc9\xa9R\xc6\xac\xce\xe9\xce\x89\xbbz\x1b\xa7\xf3\xec\x96n\"\xfb+x\x1b\x96Kz\x97\xf1\xdf3\xf1\xfe\xd8\xf2yA\x92\x05\xfd\x98\xfe\xab\x7f\x8a\xef\x8eA\xc0\x01\xd7\x11\x84\xe82.\x1c\xcf\xf5z\xf0\xe05\xc7\x83\xd7\x8f\xc0\x83G\x9d\xa4\xca\xbe\x8e&\xd9\x8d;\xfa\xdfC\xaa\xd8\x89\xb8\x03\x9d\x16\xa0Kb\x90m\xc9\x1b[o0#\xa5\x91d\xe5\x7f\xf27\xed\xe5\xcc\xe9\\b\xfa\xbf\x01\xfb/\xaf^6\xf8p\xbf\xc8\xf3\xf0.\x88\x0b\xfc\xd7\xdcX:\xb8\xb1\xff\xe57E\x9e\xf2\xb0\xb3J9nN\x17\xd0\xbe\x04;\xf2\xe9nM^\xe5y\x96\xbb\xce\xcb0\xfd\xae\x04\x8a\xdd)k\xbd\xcc\xe6\x90\xa5\x00\xec\xac\x9aey\x9bB\xb0\xa6\x15E\xb4e\xb9Vt\xb5\x9a\x1e\x94\xf3\x95\xdfi\x9f\xd0\xf6\xd2\xce\xd3\x89wq\xec\x03\xb9 \x13\xcfuXq\xd3\xfee\xd9\xc7\xbf\xcc\xfb\xf8\x97\x9b>\xfe\xe5\xae\x8f\x7fi\x18\x9c?\xdb\x19\x9c\xe5\xa6\xec\x08\xe5aV}\x8c\xce\x15o\x99\xb2Ns\xc1:\xd9x\xa5.\xdee\xa9\xf1.\x8ckY#3\xa0q-W\xc8\xb5loC\x88\x8c\x05\xbb\xbc\x94\xd5\xa1,\x0b\xf2\n\xc7\x90\"3\xb3b\x8c\xc3Rc^\x9a\xd3\x8f\xb5\xcf\xb0\xb6`rh#Y\xcd\xf7\\\xd7\xdc\xc8\xe9)\xb2:\xdd\x92$\x90H\xc6F\x90d\xa7\xd2\xc5C\xaf'\x05: Dr\xecf\xda?\xa0Oq\x1b#T\n\xf3\xebjE\xd2\xb2\xe0\xb4e\xdfw\xf4\x89\xc2\x82\xc0\xf8\xb8\xb7\x1eH\x02{r\x0be{\x0b\xf5\x07[\x9el\xde\xb2K\x0c\x94\xb5\xfe`\xe3\xd3\xc74\xae\xd0\xd4\xa6\xe7\xa1\xf3m\xab1\xba\xa1\xd6/\xecm\xd5\xea\x95p\xbdN\xee\xb8\xf2\xaf\xde@s\x8b\x0f\xe6u\x11\\\x87\"!\x904!\xb2J\xa5n\xcaE\xce\xfc\xa6\x93\x9b\xcfl\xdc<~\xe6\xba\xab\xe0&\xce\xcb*L\xf0\xe25\xbf\x10\x96x\x9cW\x17\xbc\xfeG\xfa\xcd%\xfd\xdf\x16\xb2\xfc(\x0f`\xdc~\xe2yV\x8e\xfe\x1f\x85\x8b\x9f\xeab3.dk\x953\x1cu\xa8#4\x8a\xa2\x8c\xca\xc3f\xaa$X\xb06\xf7=83W\x96\xd5n\x16\xccE!H\xee\x96\x9e\x8f\xb0'\xa3gtk\x8c\xdc.jL=\x03Y\x04\xcd!\xaa\xeaf\xd5\x0d\x91 \x9f\x87V\x7f\xce5)\x1d\n\xbc\x91\xb8r\n\xf1\xcb@>\xbe\x88\"R\x14Y\xce\x08\x8a\xa2Z\xd3\xfd \xf3-\x0bA\xe1\xdc\x84IEx\xdb\xf4\xd0\x95\x0cY\xa5\x01\xbe\xf0\xfcMI\x0e\xf9\x08l\xa5\xee\xf4\xc8\xb3\xf3\xfd|\x0cO)\x9e0+~\x7f{\xe0\x8a\xcb\xf6\x82\xa2\xe6\xb6S\xa4 w\xd1\xbe\xa0\xea\xfa{A\xd8\xcc\xb3\x9f\xd8o\xe4\x1f\x9a\x1a\xb4\x8f\\\xb4\xebWS\xa3\x06u\xc8\x92K\x82j\xcb%\xda\xdd\xb3\xb0\x85\xa9\xbb7\xf5\x14dk>\xf4\x82\xc5\x0e\x16\xbcF\xecNh5\x99t\xef\xbf:\xb5\xf1\x01;b\x1b\x9f-I\xe67\xb1L\xa8\x9b0\xdf\xa2\x17\xb7}iT\x1a<\x05\xc6k\xd8\xaeL\xdf\xa0\xfb\xf8`uX\xff\x8d\n\x8dne\xba\xb2rCd\x82\x88\x9bc\x1f2\x1f*\x1fB\x1f\n3\xa8\xa4@d\xcbHc!\x03\xd0\xc6\xb9\n\x8fL\xc9T\x88\xe8\x1c\xc9-p\x18\xf76N\x99B\x8e|\x89\x08SJgQT\xe59\x99\x9f\x00\x9dd\xb9$\x90f\xe9\xceJT\x9c\x93\x1b \xe9M\x9cg)\xc5\xffH\x0e\xd3J\x8b*I\x80\xd0VaE\x8a\"\xbc&\x10\xa6s\x08\xe7sTe\x87 ,I\xb2^T \xdc\x86y\x1a\xa7\xd7E\xa0\x9f\n\xfa\x90\xa4 \x1dD*E;3}\xb1.\xcct>}(\x86\x1f\x9bi\x11W]\nR\xcb\x80\x9f\xfck\xf1\xe4\xda`\xdedz\xf8A^\xcc\x92\xd1\xe8\xc2X\xeb\xc1\xf3\xbc \x0dW(\x91}\x93\xde\x84y\x1c\xa6%\xfc)\xce\x92\x10)\x99\xd6WmJ\x8c\xdd\xb2(X\xe4\xe1\x8a\x14\x9f\xb2\x0f\xd9\x9aQ\x1a\xd1\x1f\xcc\x1f\x0e\x82\x01}\x16!OM\x9c\xae\xa4\xac\xeeW\xec\x0b\xb6bvaa\xa3\xd8\xa5\x8eS\xca8\x90`]\x15K7\xed\x10V\xab\xb35_\xacD\x9d\nW\xf2\xca@.\x0b\xe2tI\xf2\x98\x83\xed\xdd}O\xfd\x84\xb1\xe8\x93C\x1d\x03p\x1e}\xf2\xd4\xd8\x16e\xbf*\xe9M=?\xdaK\xec\x86\x0d\x91\xeb\xf9x\x0b\xc7'\x10\xc13\x10\x1c\xd0 D\xa3\x91\xbe\x88\xe2\xc8\x17\xb3H[\xc2\xa4io\xb6`\xcc\xb1Vt\n\xa1R \xa3\xc2f\x94|\xff \xb1\x80\xf9\x16\x8b\x97x\x9e\xccY\xd0\xef\xd4\x91U\x1c\xfb\"\x9b@\x89\xbbP/@\xa9\xec\x16\xb3,(\x83\x9c\x84\xf3\xf0*a@\x98\x1bi\xf0\x92S\xd8\x9a\xb4\xea\xdf\xe6q\xa9\xd6\xafKD}Z\x18&Iv\xfb\xefa\xb2x\xbf&)7\xbdS\x1bRk\xd4\xad\xb5>\xac\x9b\xcc\xd2\x88\xb8\x0eA\x83\xa8u\xf7r\xae[P\xc3\xd0\xf6\xfd=+\xbd\x14\x138/\xc3\x92\x04$\x9d\x13\xb4\xd6\xc9\x83\x94|)?\xc5\xd1gw\xc9\x86\xd0\xdd\xe9\xb2\xbd\x87%m\xcd5\x89\xf2\xccTb\"\xf3b\x8e\x18\xd7\xbf\xc7\xd7\xcb?\x87%\xc9\xdf\x86\xf9\xe7\x16 \xa9\x18\x06j\x86\x83\xfd\xa4\xa5$\xd5\xd4\x17b)w\xab\xde\xfdfB\x9e?h*sR\x94yvG\xe6\xad\xe1\x0f\x1e\xa2$\xcea\xa3\x15\xe7\x14G\xab |\x0c\xf3i\x8e\x98\xfaeP\x8f\x8d\xd60-D]Acu4a\xa12\x113@\xfe\xfd\xa7\xd0X\x9f\xd9&A\xabx\x1d\xdb)m\\p\xc9\xbf\xea\xa3\xfc\xb1C\x86?\xaa$\x11\x17\x16\xcf\xbe/\xdf#\xe2\xcb}\x7f\x13499\xda\xb3\xea\x8a\xec\xbb!\x8e=\xaetN\xd7\xb56\n\xeb\xa3\x8a7\x1c\xdf\xde\xc1\x9e\x01\x8f\xbf\x0d\xcbe\xb0\n\xbfv\xeds7\xde|\x02\xd2\x80\xcc\xe3\xd9\xb73\x88LZ2\x90\xb5\xfb\x87a\x10\xa7\x87\x1b/\xf0\xdf\x85A\x1c64!\xaci+\xc1J8\x93\xee\xa0\xcd\x19\xe3\xdb\x8f\xa8S\xc8\xb5\xb5U\xba\x1d\xf2-\xebg\x9a\x85\xeec\xf7\xdeb\xaeg\x16$\xee\xeb\x06\x96\x8c\x90>:\xf4\\\xa7\xc8#\xdd\xd4\x81\x92\xd3\xb5\xd0\xb6\xcc\x98\x1dI[\xfd\xe5:\x0e\x8c \xf4\xb8=\x8a#j\xca'\x06-\x08\x838-\xd6$*\xcf\xb3*\x8f\xc8\x90C \x08S\xe9f\xf96K \xc1\xa5\x87&\x12=\xb2Y`\xa4\xea\xa9\x8e\x10\x7ffn\xea\x83CYB\x07\xf5@q\xf3\x9b\x1e \x8a\xbc\xe8\xadm\x8c\x97\xa4\xcf\xaa\xe6\x8b\x8a\xd7;\x03\\\xa1\x92i\xb1\x8a\xe0\xd7,N\xdd\xda\xda\xd7\xc3\xf6\x90\xe2\xcd\xe1\xac\x86\x07p\x0c\xa1\xf8\xa9\x94\xc6\xcd\x818\x06wN\x12R\x12|\xefK\xaf\x14K\x8fF\xf2.\xd3[\xf56u0\xd2\xe2.\x1a\xef\x19e;894\xab\x90\xc1\x91\xf8\x08\xb9\xffot\x0d\x7fo\xc0\xb01\xd66_\xbd\x03\x93\xa2\xd9M\xdd\x83\x03\xcf\xc7\xf7\xe3\x86 \xb69\x98\x18\xaf\xe9\xe4@7\xf3\x0b\x8d\xaeT\x9f\xc9\x9d\xd9\xff''\x0b\xf3\x8b\xcb\xcb\x82$\xf6wx]\x8f[ \xcb\xe4%VX\xb7M&[\x83\x9c,\xa4\xcdh7\x13\x0dk\xe63\xb9\xd3\xf6\x14$\x96\xbc\x0d\x1ar!\x962\xc2\x88\xb6\xbc\x92>\xff\xf2/\xec\xf8\x1cC\xd5^\x1c\xfa\xea\x18\xca\xf6\x0b\xdc\x03\x83v\x1b\xb7 m\x97\xaf\xf3l]\x1cChX\xff\xec6%\xf917j\x12\x8f\xd9\xfbI\xb2]\x91\xc4\x1cA\x94\x93\xb0$\xaf\x12\xb2bn\x15}\x94 \x9e\xf1\xda\x17\xa25\xa2\x84\x9e\xc6*I\x0c\xb3\xe0o\xd4\xc1QZ\x83\xdfNY\xdc/\x1e\x14\xc3\xe4\x10\xd3\xc3CP\x03\xef\xae\xb9\xef\xc7\xc2\xf3!\x12\x85 3\x98\x1c\x01\xa1\xfb\xee\xf9 \x8bM\x03v\x84\x05\x1c8\xaeK\xda\xd5\x18\xf2Q+b\x19\x02\xa5\x8c\x810\xe6\xbb\xb7\xbd\x0d[\xa1v5]V\xeeV\xcc\x93\x11\xfd\x1fOZ\xcb\xb7\x84S\xd05\xe8\xb0\x03\xd3\xf6\xca0Y\xc7\xd2\x83*\x88\x96q2\xcfQ\xa4\xa1\xa1%\x94\xb9\xd2\xdaKx\x0e\x13\x13YQ\x0b\xb3\xe6\xc2\xac\xcd]\xd25bb\xac\x1bx\x06\xcb\x13\xb8\x19\x8d<\x98\xcfn.\xe4\xd1\xcdn`\x04S\x83\xfco\xec\xabc\x9a\xab'\xb05\x13\xee\x15\xc8=q\xe8z\xb5\x84\xe4\xc0\x97\x07\x8dO\x94\x9a\x16\xf1#\x9e\x8b;O\xdeD\\xi\x07\xee\xe8\x0et\x0cM\x08\x80\xe9ig\xee\x03c\xfc/\x0eP\x8a\x9e\x96\x14g7\x17\xc7\xaf/\xcc\xeb0*\xb3\xfcn\x90G\xa4v\xc9\x82\xab8\x9d\xbb\xdc\x07\xc9L8\x93@(\xd75/\xc5E\x10%YJ^\xa4\xf3\x8fL\xdc\xfd\x1f\xa4\x97\xb9n\xe6\x18p%\xbd\xcf\xa0,\xfd\x87\xdf\x03\xfa\x07?\xe7e\xc0\xa0\x8a\xcf4\xfb\xebB\x9f?\x1d\xc0f\xf0\xa2\xaa\x0d\x9brTd\x8a\x86\xdb@\x02m\x9b\xe8\x15n\xbfB\xc1\x03\x0e\xbb}j(\x12\xed\x9a\x8b\xb79\xd0\xa9\x14\xa03\x17@\x87\xdd\x9a\xfax\xc80h\xa9\xc3 \xb6\xde\xec\xe0#\x1e\x97\xcft\x0d\xb6\x0c\xef<\x0d\xdaT\x16h\xc3\xca\x15\x15\x11%\xb6T9P\x02g\xb0\xa6\xc5\xa7\x90\xd0\x7f\x8e\xc5/Z\xd7\x00\x9d\xee6\x84Nw\x1e\xac\x87@\xa7\xbb^\xe8t]C'\xbaz+\x06\x9dV\xf0\x0c\xeeN`E\xa1\xd3\xf5l\xa5B\xa7\x95\x05:)\x03\xba\x1et\xff\xf9\xddX\xfa0\x17@\xe0F\x95\x13\xd3\xc3\x1f\x17\x7f\n\x93xn:\xfe\x9bP\xa4\x8a\xbc\x88\x1d\x10AJ00&\xf7\xaa\x10\xc0\x7f\x80~\xe2T\xd2\x0e\x1f\x98Y\xc0\xdd\x83~\xa9@\x87\xb3\x03c%\xcc\xa0+wS\x8f\"P8\xe6\x87\xb0\x99\x8aq\xec\xfa\xc09%\xa6\xab\x8a\x8d\x04ef\x10\xd3\x0b\xc3R\xae!-H\xf9)^\x91\xac*a\x192\xb1\xc5\x15!\xdcK\x97\xcc\x9dn\x91|\xd5\xdfA\x94\x900\xff\x8a.B\xb3\xfc%\xc5s\xd0\x8c\xbe\xd6\xda4Et\xf9\xc6\x06\xc8\xc6\xbf\xcd(\xd3\xb5\x95\"\x880\xb4C\xf7\xb1)\xf6{\xda\xed\x94r\xa4\xec\x0b\xf5\x9a 9\x87\xd1\xa7\xd5\xdc\x1c\xb4l@8\x92l\xb5\x0e\xbd=\xb4\xdb\xe2\n,s[\x16\x10\xf1\xb0eg\x7f\xcdsHm\xb2\x04\xe9 \x9e\xc9?Z\xc4{\xa7\x80(\xad=\x18\xea\xfa\x03\x06\x95\xdb\x06\xa5\x1c\xde3\xf5\xe7\xb1\x04\x85\xa0w`\xb4\x8b\xca\xb6\x8a\xae\xa6\xa2-\x98\nu\xa6i\xfe\xd1\xfeV\xd3@Q\x0c\xb931]\xfe\xb6\x8e\x8e\xf9? J\xe4M\xd5\xeaY:9z\xe0\x83(K\xa3\xb0t#\xb4/\xc4\xb6}\x88D\xa5\xedmX\xba^\x9f\x96\xcet]\xb7\x166j\x96\"\x89\xd0]\x1b\xd4\xe28F\x83uC\x8d\x0f)\x01\x18\xd5\xfaerb;\xe7\xf8\x01\x85\x92\x91X\xd7\x13\x18\x8d\x12x\x86\xdf\xe0\x82\x14\xb3\xe4\"\xc8\xab\xd4\xb5X\xbc\x8a\xa5\x90\xbb\xec\xb9%\xc0%|\xec\x8e\x9a\xf6N\x865\xbc\x92\x0b[Jk\xbd\x1d\xdeP\x85 \x90\xf1d\xc6F\xe9\xa9\x95_\xf8\xc3\xbb\xb1\x830\xf1\xe4n\xd9\x864\xe2\xe9\x87^\xe2\xe9\xef\x08d\xb5\x83\x0c7\xed\xdd\xc3FC\x80V\x07\xc2\x1a\xa0\xbb\x03\xfb\xec\x8do\x1e\xf4\x05{\xe8\xbc\x89s\xbb*qQ\xa5\x92&3\xa44%%x;\x9b\xbbq\x15\x8b\xd3\xb8\xd6:\x0e\xe2\xf1(E\xc0hW\x03\xed<1`\xe9V5J\x1d\xdba\x01\x9d\xcf\xe4\x04Rx\xd6\"\xceO \xa5\xc41\x99\xa5\xb4+\x95@N5\xe28\xe2ZVr+\x96\xcf\xf3a\x82th\x0d\x05\xef\xef\x01\xa3s\x84\xeeR\xa1~\xe7\x92D2\xaf:=\xa6\xc4&p\x9bs)\xde\x06\xee\x85\xd2l\x1c\x94q\x89\xd6\x1f\xceU\x9e\xdd\x16$wh!\xff\xbb\x89\xba\x94\xde\xf0\xf0\x1bq\x10\xe6\xd77\x0c\x7f@\x1cp\xbbAd\xbe\xa4\xdfE]\x1b\xdf\xdd\xe0w\xf3\xf9OqQ\x92\x14\xdb\xbda/Q\xd9\xc0\xfe^,\xc4\x9f9Ye7D\xaf\xccJ_$\x89xQ\x887d\x15\x97\xe2\xefuN\xd6$m\xf5\xc4\x8b\xdf\xa7Q\xab\xddDj\xae\x97\xa1\x98]\xa8\xabw\x15\xa7\xf38\xbd\xeeVR\xe9T\xeb:\xcf\"R\x14\xf5\xc7\xb1f%\xedh[\x14\xdd\xce\x07x\xc89O\x1c\xed\xb3\xe5\x0f\x18\xd9&\\\x88\x91R\xe22y&\xc8\x81\xb3\xe1\xbd\xf9\xd3\xab\xcb7\xef^\xbfy\xf7\xe6\xd3_\xb0\xc6\x04\x9e\xd8V\x9a|)I\xda\x8a\x8bh[\x02\xa6\x9dk\xd3Q6\xf9-.\x0d[:7S-\x9f]\xe2y\x0d\xed\x04\xcf o\xd6\xae\x9c\xc5\x94\xc5\x9e\xa5\x17LD\x1a_|\xfb+$J%9\x9d\xd9]\xa5\x15\xd4\x8fYj\x8c=\xd35\xac:5v\x063n1\x95 N\xa3\xa4\x9a\x93\xa1\xa1\xcb(\xa7_\xf7\xa5\xbc~\xe0\xc6\x0fC[2D@3\x8c_<\x84\x85\xc7C\xe5.\xfdk{[\x84\xc6ce\xf8\xe7\xf66\xe4\xc2\x12\xbd\xd5\n\x1d_\xca\xde\xea\x9c\x06\xbeY\xc4IIr\xb7\xf3-IN(\x11\x17\xa2\x17\n\xfb\x06\xc11z\x0d, \xd4\xe3\xa740d\x0b\x08\xa1\x88\x96d\x15\x06\xf0F\xbcb\xf1\x0d)>\xc8\x16PT\xd1\x12[(Z\xc4a\xe0\x18\x8e\xe3\x12C\x1b\xae\xd6qB\xe6o\x9a\x95\xab8\x0b\xeb\x88\x018>\xcc.\xf4\x0f^}i\x7f \xd6\xd3\xf8\x01E\xcco\xc3u\x17E\nB0\xc4n\x90\xd1\xae\x80>l\xb1\x8e\x8dZv|\xcf\xc3j\xdak\xf0`\x9b\xf6\n\x8b0I\xae\xc2\xe8s+V.}d\x89{\xfdA\x07\xce\x17O:cW\xf1b\x86\xd7\x94\xf9P\x8a\x9e\x9a2C\x0c\xc3vw\x14\x90\x97\x0c\x90\x13\x83Z\xea\x04J\x86\xf9J\x0e\xbd\x1b\xc6W\n\xaf\xa8k\xff@\x12\x0d\xab\xe7\xc55\x9e\x16\xcb\x99\x90/\xb7\xf8+\x0c~|\xf5\xfa\xc5\xcf?}\xaa\xe5b\xa1`\x19:N\x848\x0d\xea07\xf1\xb5\xef\xf2\x80G\x01\xa4\x18\x97\xb6\x8e\xb3\xb1AyF\x9f\xab\x9c\x84\x9f\xdb\xaf\xba\x9c\xe1K\xada\xbd\xab\xc9f]q}\xa8\xa5/\x19\xc8\xfc9\xcf\xd2k`\x9e\x81\x08AD\x97x~\xce\x194\xe1\xbbP\xb3v]F\x01\xcc^\x81\x02vN\x0c\xd6N\xceM \xf3\xe5\x0b\xc8\x0d\xc9\xefz\x80\xa7\xc0\xb3\xb2\x1bN\xa8\x01*\x0dn\x9e\xd7\x916\x05XDn\x88\x83\xc6\x02\xdc,\xa7\x802N\xaf\x13\xc2g\xc8Mq=\xca\xa0\x95a\x9c\n\x98\xab\xbcm\xf9\xec!wA\x1e=\x8dl\xd3i\xd4\x81B\xb59P\xb8i\x9b\x81\xf4\xae5~q\x8f\xc9-\x84\xae\x01o1\xf4id\x89\x05\x1c?\xd6\x1d\xd3\x14\x11\x83\xcc\xa4\xb1M\x1bj\xab\xf8\xdb \xcaP2Ho\x05\xc6\xe4\x81Om\x16\xe9\x83}\xf9j\xcdl\xe9C\xac\x83\xad^},s\xee\x16\x06\xa1\x9b\xb2\xaf\x9a\x0e\xce\x0b\x8a$\x8e\x88{\xe8\xc3\xce\xa4o(\xdd\x0e\xf5{\xbb\xff+\x1d\xea\x87-\xeb?\x80\xd5\xf9\xb7:\xf7\xfb&?U\xe6\xdf\x12\xa7\x8f\xa3\xec\xb3\x9eC:@/+\xb7=\\7+\xf5\xf1\xa3&F\x1d4z\xfaQ\xcf\xd8\x91\x86\xda\xb8a\xfcJj\x19\xc3\xc1\xc8\xb21\xac`\xeaO8\xdc\x0e\xeeR\x81\x9e]G\xe6C\x1e\xaf\xe22\xbe\x19\xbcL*\xa1i\x04\x1d\xf8\xc2p\xbdX\xfc\xc5\xf6\x05a\xe5\xed#\xaeS\xb2FPW-\x16x\xe9\xcb\xfaG]\xed\xc1\xab\xddaR\xf7\xe0\xd0\x0b\xd8{\xb3@es\x0b\x06\x03\xe9\x8e\x1b(9-s=\x80\x08\x06\xf6\x97\x17o\x7fz%\xc2\xae9u\x82\xaa\xb0\xc8d\xdb\xc3U\x98\x7f\xe6\xa6?\xf8\x93\xc7V;mb%\xd1\xfat\xcd\xdc\x8a\xa7`be\x1ef\xb0p\x9bF\xcex\x02\x8c\xba\xa4\xc6b,\xf7\xa4\xe3\xf9\xf5\x90\xd7e\x95\x93\xf32\x8c>\x7f\xcaCth\xb4\xbc\x11\x86\x9cK9\x01X\x86q\x88\xb1\xac\xa05\xd1EYXhy\xbc\x8c\x0eY\xb2\xf6\xaa\xff\xca;,\x9c\xd8 \xe4HZ\xb9\xd5\xf2&W_\x8a\xb9\x0e\xa3U\xea}\x1a\x81s\x0c\x8e\x91f!h%\xd1\xb7 >l1\x07\x9dz\x1f(\x85C\x9a|$\xa6\xed\xd0s\x0b\xca\x94\xd6\xa0\x84\n\xbd\xf6\x026\xf7\x1d\x96\xcdK]\x95Z\x08>K\xdd\xe9x\xeaiV\xf7B\x01\x8a\xef\xf7w'\xe8\x88\xbe\xbf\xdb\xaa\xd7\xc8\xcb\xb1\xde.\xaf\xb7\xc7\xff\xdd\xe7\xff\x1ex\x92\xc5\xcbc\xc5\x9dv/\xc66(S\xcc\xda\xdc lCip,\xd4\xcc\xd6\xdc\xa9\xa5\x9ed\x00\xe7\xeeY\xeap3;Mm\xa0\xdd\x85!ru\xcd\xc4.\x17\x82\xcf\xb8\xa3Q\n#\xc8\xbd\xe6\x00\xef\x1e<>\xae\xce\xe3\x03\xfapV\xea\x11a\x89$%\x8a\x1e\xc4\x84\x87\xf7oE\x1f\xcax\xb9\xce\xb0n\x10=\x99\x05\x8c\xfdg\xf4\xe4\xea\x9bDO6\xdd\x8f\xbfOPa\xd3H\xf0ZF$N,7v\x91dY\xde7:\xcb\xd0\xe2\xe2]\xf8\x0e\x15\xce#\x14#\x8c\xe1\x18\\\xa1\xc1\xc81OZ\xbfD\xc1.\xaa\xe9\x0f\x10\xdcw@\xd5\x10\xb4|\xd4\x9a @X+\x18\xad\xb7\xba\xcc\x13xs\xf5h\xac\xe6_R\xe5\xb2!\x05\xdb\xf27\xfa\x18D\xd7]\xa6\x0b\xad1\xf4\xe4Nh\x0f\xc3\x1a\x9b\xdf6\x92\xdd\xe1#Ah\xb0\xe1`\x14E\xaf\xfc\x0c\x90N\xd6\x9dw0\x0e\"\x9b\x00\xb1\xa6\x12\xd8\x04\x1f\x0e\xbb.qoB\x99\xded2\x8f\x0dTf\x8f\xaefQ\xdaO\xc6\xbd\xb7\xce\x02\x0d\x1e\x15\xd6\xae\x8f^l\x85\xfc\xe2\xf2Z}\xf0\x0c+\xb62\x06VbNm\x19m\xea>\x16\xbe\xdc\xf0\xa8:\xa1k\xa4\xd7\xb0\xed\xca\x87\xc2\xe7\x99\xf0\x0c\x95(\x1e\x8efcC\x00\xe9\x04\xdf\xe8&G\xd9\xb0\xcc{\x1d\x9a/2+.\xba4\x9fZu\x83q\x80\xcf\x8c\x12xv\xbf\x96\xc5(\"\xcf\x98\x07\x00S\x1c\x17|X y\xc0\xe41\xf2\xab\xc2\x87)\x93\xb5\x9eu\xe3BhF\x96\xd4\xf8\x90q\x80\xfa@\xa0/\x16\xa9\xb1\x1d}6}\xc7Xn\x98\x91U\xbf=\x18\x15\xd0\x8f\xbf\x04\xc3.\x9f\xa2\xeb5y\xf01\xedo\x13p\xfd# \xa3\x92\x07L\xff?\x0e\xcf\x84\xec\x9c\xc0M\\\xc4%,\xcbr}\xfc\xe4\xc9\"\x8c\xc8U\x96}\x0e\xae\xe3rY]\x05q\xf6$\xa7\xdf=\x99gQ\xf1\x04?\xde\x99\x93(\x9b\x93>\x81\x9c\x999\xe6\xa3\x91\xc7,\xd5\x9d\xed0\xbf.f\x17X\x8f\xa4\xb4\x89\x9f?\xbey\x99\xad\xd6YJRY\xaf\x96\xc3\x08&\xba\xf2\x8c\xb5\xa1\x06\x7f\x17\xa2\x89,\x1f\x1e9\xbe\x89\x1a_\xf4\x87\x8b?i]\xff\x18\xe4\x10\xee\xba\xaa\x8e\xc1\xf4\xb83\xfa\xba\x0fq;\xacz\xdcs\xea\x06\x9d\x1b\x89\x82\xb2q4\x8f`\xe5\xebb\xf1I\x87\xf7\xcc <\xac^\xb8?\xb4\xff\x12\xeb,\xb7&\xc1\xb78(\x97a\xf9\x11[+\x98\xd8E)z\x1d&\x05Z>\xba\x18H[y\xf7)\xaf\xf8\xab\xb1\xfe\x8a+\x17r\x11\xcfW\xfdn\x19w\x9a\x8f\x88\xb9)\xf9\xf6\xb46^\xf0\x03>\x04\xa5\x9a\xfdO\xe0\x94\x1f\x94\x8d6P\x94v(\xa5\x9e|\xbf\xa5n\xd7\xf7\xf0iI\xe0\x8a 7W\xd9\xbcJ\x08,\xf2l\x05i6'\xc1\xaf\x85__D\xee\xf4\x1ah\xdf\xeb\xcd\xfd[X\x95\xcb,\x07\x80\xd7$\xcf\x8a\x02^\\e\xd5\xe7e8\x8f\x7f%Kx\xb6\xc0\xc2\x7fc\xff\x04Y~\xfd\x1c\x9e \x88\xd4\x94\xb5\x1a\x15\xf6H\x8aA\x12{\xf9\xa4uu\xb9\x1c\xaa\xc5?CC\\\xb4\xb2\xe4A\x93X\x0f\xef\x94\xf2\xb2\xbe\x10\xed\x98+\xd0le\x11|\xfa\xcb\x87W?^\xbe\xf8\xf8\xf1\xc5_.\xcf\x7f\xfe\xf0\xe1\xfd\xc7Op\x06\xd3\xc9\xde\xd3\xbd\xc3\xdd\x83\xbd\xa7p\x0c\x93\xf1\xd3\xdd\xa7{\x93\xc3\xa9\x96\xef\xd6\xd2ah\xc5\x95\x94\xe2\xa4\xc3yF_7\x86\x17\x1f\xc3\xf4Z\xf0\xc9\x14(%\xf1\x1cI\xd190Os\x865:\xcc+l\xb3p\x85\xbd\xd3\xcfqZ\x1e\nCc/\xb8\xbcDl\x7fy\x89!,\x1a\xf9\xea\xb1b*\x82l7o\x00}\x9c\xe8a\xe7\x18\x8c\xe5\xb8\xd3\xa1\x85y=\n\x1b\xc5\x06\xc2\x88\xcb5O\x80\x07\xc4\x97\x95 \x85\x9an\xa0i\xba\xbd6H\xde\x1b\x14\x0d6\x12\x0b\xeb\xb7\x15\x10\xcaN\x89MZ0\x1c\xc9=\x9d\x8b\xda,\xb9\\\x12\xe6\x86\xb2\x88\xf3\xa2\xac\x11?\xac\xaa\x02\xedgB(Z\xd1j\xe5G\x10A\xf6x\x08\x0f\xb63\x105\x01i\x0cr\x1c\xcb\xd6Db\xfd,\x0c\xaae\x0d\x89\xd9l\xe8;!\xb5Q\xe7\xcdm\x87BnR\xdf\x91~\xda\x9c\x89\x16\xcf-W\xe5lo\x03\x91\xcf\x83\xfc\xae\x1dK\xbb\x83\xedFW\xbf\xe0\xea\xae$?\xe1\x89\xf6\xd1\x0co\x0c\x98\xeb\xba)\x86g\x8d4K\xbf\xaa\xdfe\x8bEA\xca\xef\xe8\x11\xc8*4G\xbf\xca\xaat^\xd8vW\xef\x936\x0e#p1\xf7\xf0\xd8\xb3\xf6\xc3\xee\xdc\xf0~0\x00A#cI\xa5\x00n\xa7<\xf0o\x0b(\xd4F.\xd6*x\x81\x8fM\xc5t\x99\xcd#\xe9\x04L\xa4\x0b\x10\xd1\nk\x06H;\xaf\x8a\xc1\xd0O\xd9\xfdc\x93R\xb1\xc5\xd8tx \x1a>\xc7\x05\xad\xf3\xc9\xdf\xdf3\xe7P\xa7*\x17\x87][\xbfU\x04q\xf1\x8a\xc3\x0d7\xb58`\x7f\xe7\x08\xd0\xe2H`\x83!\x056\x94\x1a\xf6\x98n\x12H\xf8t\x0c\xf70g\x1bg\xf6\xd7\x02\x8e\\]\x16T\xa8d\x86\x8e\xb7y\\\x12\xd7\x02U\xd9'u\x96\x02\x97\xf9\x042#\xfc\xb1\x0f\xb1\xf7\xe8\xed\xf2\xfaL\x1f\xc5C\xd7\xb2\xa8\x15\xba\x141uH\xb3j\xd5\x08\xdc\xc3\xd2%\xc2\xe7\xc9\x166c\x08\x906\x9a]Iu\x82\xb8\xf8SLX\xda\xfdv\xb1\xc9\"L\xaa%\x8f\xb4!0\xdb\xa3\xad\xa9\x99-\xd5R\x0e\x11\x1dK\x1caX\xe2\x9b:\xd9f\xd7*pj\xb3\x1eIW(\xc2\x1c\xc3\xfb\x9d\x9cx\xb5\xa2\xcf\x8a Q\xbd\xe5\x84E\x14\xc7\x8eY\xc9\xc5j$a\x19\xa7\x93\xce*Wq\x1a\xe6w\x96* )w\xcd\xe8\x845\x82d^W/U\xb9\xd8\xe9\xac\xc1\x08\xed\xdeQ\xfc\xec\x96\x9eu\xc1\xa1\xe9.*\xa6\xdd\xe3\x89\x8a\x9d\x9e\x1a\xe5br\x90\x90\xbe:;\x1d\x95\xa0\x19\xf7\x14\xbe\xef^\xc1%\xf9\xd2\xdfJ\n\xcf\x9f?\x07\x83?\x114\xdb\x19\x16\xe4`\xaf\xbf\xa9\x1f\xfa\x16\xb2\xd37\x1c\xa0v\x0c\x19\xba1\xc0\x990\x96\xac\x86Ph\xf6SvK\xf2\x97aA0\x03\x19F\xa1k}\xaa\xebR\xcd\xe0\xeb\xa6\x8bc\x11w\xab\x9c\x11\x03\xec\xe7F\x14\x14\xfd\xf9\x02 \xe6\x83:\xbd\x93\x98*\x8b\xfe\xb8\x01\x01eM1\xf2\x05\xdb1l\xa3E\xdc\x92R\xee\x10\x85\x81\xdc?\x0eyNx.K\xe4\xce\xf0\x8d\"\xa2\xa3\xd8}\xa7.9D\x90F+Ie\x1ekp\x94\xfa\xdcB\x82\x852\xc6j1G\xce\xa5\x1ccQ\x88\x04D\xa5\xfa\xe5\x08i\xfd\x94\"\xc0\xb2#\x88\x82\x98e\xdc\xb9\x0e\xc0C\xe0\xc8]\xb7OF\x13\xf6h\\\x99\xc2J\x91\x86}\xda\x99\xc01\\k'\xcarB\x8c\xc2'\xde0\x81m\xa4u|\x8b\x9c\xc1\x86t\x1b\xf1\x85d\x10\xcac\xee\xc0\x19\x1e\x86\xae*\x8d\xe5\x0f\xe7Z\x8d\x95\x93\xb0(\xdfX>\xc0\xb9c\x12%\xfb\xec\x8d\xbc\xcbM\x98\xd4\x84\xbd`WD\xa0\x8a\x9c\x93W\xadP\x14\xe6\x1b\xad\xaf\xbf\x05\x98d,5\x8b%\xbc_(\x1d\\s\x8dB\xa2\x82\xcd[,\xa5\x16`\"\x05\x86\xd1\x18\xffM!\x01'\x04s\x0d\x8c\"=\xc4\x91\x1b\x17Za\x01\xc7ej\xd1\x8eTf\x95\x17\xc4,*\x91\xa0\xd8\xa7L\x18\xd8\xfc\xee\xbdWt\xa5\xa6>\x84\xf0\x04\xff-\xf8\xbf)\xfek\xb8o\xad\"M0k\x1b(\x1f\x06\x0b\x17U\x89\x8c]\xc7<{\xee\xcfo\xd2rr\xf0\xc3+\x97\xc0\xf7r\xb6\x11\xf1\x98\xef\xb9\xd5&H85\xda&\x8d4\x1d\xaaaN \x83g\x10\x9e@6\x1a\x99\x992\xe0\x9d\xe1\xf42\x0f\xc7\x1fQ\xf0\xc1C_-8\x1c\xce`\x07\x16\x9dr\x1d\xd1R\xfd\xa1\x88\xd2\x9dy>\xfb\x1cF|\x81\x8az\xdf\x16tA\xacMr \xbb\xc3\xc2\xd7\xb2\x163\xd89\xe5\xa3\xf1\xf9*X\x80\xb3}mR\x18A\x01\xcf!\xac1I\x08;P\xe08\xf9\xaa=Gf.\xdb\xd9\xe9\x9arM<'<\x88\xed\x9a\xf1\x80kx\x06\xc5 \xac\xbb\x16\x1d\x94\x85\x87\x11\xac=\x16\xa4\x97.\xfe\xbaw\xa5\x81\x9b\xc0\x98\xfc\xbb\xf5\x07\xe3\xeft\xd62\xcbq\x80\x0f1\xa9\xb7+3\xd6\xb3j@vt7k3\xe0[\xf5h\x07\xe8\x061o1J!\xdc\xdf\x9b\xf8\x18\xa1\x04\x97\x90\xb6\x81\xe2\xcd\x05-\xc3\x9b\xa3\x90\xe79\xc4x\x0chqLq\x01\xfea\xee!\xeb\x85\x9d\x19\xfc+L)/7\xb68r\x0bu\xe2\x92|\xe9P=\xe5\xf0\x1c2x\x02\xd3zh\xf8\xabK\xfeP\xb1\xb3W\xb1h\x87\xa3Q\xd5\x05>(\x9aX\x87yA\xde\xa4\xa5K\x82\xa2\xba*\xca\xdc\xa5|B\xe5\xc3\xd4\xf3ar\xd0!7g\xd4\x9a$(\xac\xccu\xcb\x19\xbdi\x98\x8a&\x1c\x00\xf4Dc\x83\x0e\xcde\xcf\xa1\xe1\x8d\xfd\xd5\xfd\x19s\nK\xc7\xc2C\x95\\\xdb\xa0\xd3\xd6\xd3\xd5\xd0\x9e\xec\x06\x03u\x9b\xb2\x11\xd2\xecB 8Q\xb3\xf2L\"\xc6\xb3\xed3\xc1Q\x19D<\xe4\xc4\x8b\xd2M{$\xfam\xc0\xf7\xc0dy\x9bL\xfav\xd8\xa4\x95\xb5\x19\xd4\xf0\x97a\x0d\xff\xd5\xfda\xf3A\x9f\x0fm{\x90VC\x0e\xec\xc0\x83\x93\xf2]\x93\xaeZ}\xb0\xb6\xb7a\xcbu \xc5NS\x0f9\x02~ \x19+!\xed_\xc5\xf9M\xcaO\xc3!\xcb\x84\x93R\xb0\xb1\x7f\xe0C\xc6\xb6=\xf6\xea?m\x9a<+H~\xf8\xda\x03\xff\xaa\x8b\x9fUY\x08\xf4\xe9TXL\xf4\xd5\xa7<\xc8\x0fw%\x91<\xa2[\x85\\E\x85\xfd\x0c\x1b\xd7\x8b\xaeq\xa5RL\xa1\x9af\x1c \xb2\xc5\x10\xf3\x18\x83\x1ab\x14\xddv\x81\xcd\x8c\x85\xf8\xf0E~\x93r\x16\x1bLS\xc5\x83N$\xc6L\x89\xe2A#V\xcaJ\xef\x1e\xc1\x19\xec\xc11\xfb5\xdd\x853\xd8\xe5\xbf&G\x138\x83)\x1c\xdbD/\x08\x91a\x04 \xad\x87[|\x83\xe1Z\x8c\xf8\xc5#\x8f\x8f\x81\x05\xf6kz\xe1kS\xc9p\xf4jY%\xcdh\xb2_\xcfh2\x85{p\xc5\x9c\xe4)Vt\x8a\xd3\xf1\xdeS\xfe\xdd3\xd8\xdf\x9f\x1e\x1dP\x92\x88\x92\xb3\xfbOw\xf7v\xbdo:\xff\xbd\xc7\xcf?\xac\x7f\xedn\xb0\x1ajYhY\xa1Cm\x85\xa4%\xab\xd4%\x0b\xe9\x92\x1d\xec\xef\xef\xee\x03\x06\xf4x\x06\x93\xc9do2\x99J\xcbd\x9c\xa2\x99$\xae\x8d\xb1(_\x84\x9f\xd3\xb6w}\xbc\xc9\x18tl!\xf7\xe7.(>\xa0?\x0f|\x11\xb5x\xc1\xc4\xa8c\xd8\x86\xc9x\xba\x0b\xf7l\x1397\xb3\x7f\xb0;\x1d\xc3={\xb5\xcd\x0c\xc2\xf9w\x1e\x05T\xa3SH\xda\x10\xdf\x06\xa5\xfb)\x12A\x8c\xd8\x15 \x14\xe3\x14\xbc\xbc\xafI>C8,\xee1\xc2\x13\x85\x1b\xf5\x16 \xe9.\x1c\xc7\x0e\x18s\xb32\x10\x04\xf4\x16\x06\xd3\xdcXz\xc0`8\xba\xc9}\xa6\x9a{\xdfCD\xa5\xedEv[\xe8S\xfeE\x82\xda\xb7\xbd\xf0\x81\x04\xe7Iv[\x97t\xef\xc3\xa8l\"\xab`,\xdc.\xbbBT\xdd\xb9#S\xa0\x837\xef\xce?\xbcz\xf9\xe9\xf2\xed\x8b\xff\xef\xf2\x87\xbf|zuN\xcf\xd3\xd8&\x8b;U\x93)\x9b\xcd\x82\xcc\xe5=\xb1\x13\xed\xf9\x8cn\xa4\x88o\x92\xc9\x92\x9e=G<\xb5\x02M\xb6J\xb2\xe3\xb4\xba\x96Y\x00\xd8\x81\xa8\xb3l@8H\xf1\xf0Q\xed\xb5\xe5G\xe21\xc3\x8e\x07\x1f\xf6\xa6\x9cVZd\x99\xebY\xc5\xa1%e\xc8\x98\xa5\xe9\xf6\xb6p\xeb\xad\xcb\xdc\x89\x0f\x13OR*\xb6\x8fjg\x0c4h\xe6\xb0e\x90\x9d\xa8\xe7\xca\xf5\xe8\xc9\xfa\xfc6\xfc\xc2-\xe4P\xc5L\xcf\xd4:\xcb\x92\xf3\xf8o\x14x\x1cN\x8e\xa6\xb4\xe82\xac\xae{M\xb6\xc1\xb6\xb1\x85\xe2\x0c\xa3\x1fo&\xd8\x1e\xe0u$\xb5\x1f5\xe9\x05\x0d\x16\x98\x1dBjW\x1a\x8b2F\xe3\xb9\xa237\xd6\xf1-\xf6\x93<\x9c\xcc\xf66\xff+@{U\xc2\xf3\xb8\xa9e\x17LbF_\x99\xc3\x9c\x16\xbe\xd6\x8a)\xe0)wh7S\xa3\x9d _\x1e\x98\x1a\x01\xc1\xcef\xab\xbf\x81\xed\xa7\xf8\x02Y>D4ca\xd6$\x1bB2\xf3\xbe3\x93\x05`\xde\xd4\x0f\x161\x0b\xea\x86\xc6\x86j\xa1Tb\x00\xf0}\xa7\x05\x17\xe1\xe7\xb4\x08\x17\x83\xe3\xafX2\xb5\xe9\xcdQl\xf1-\x9a\x94\"\xac\x0cjk\xcbmb\xa1\xdd\xdf\xc3V\x19\\\x8a&\x0c\xadG\xd9j\x1d\xe6\xa4\xcf!\x1bd\xf3\xca\xdar\x03\xdb\xd7\xf4QF \xd9\x8b:\xba\xb7P\xac\xb0/\x8c\xb6&\xcc\xf0Eu\\\xee2s\x90\x15{\x8c\x0d'\xf5\xaf\x98\xc5\xa1\xcfdN\x92\x99\xd2\"k\x98Q\x86\xde\xe2t\x8b\xc3\x98\xc5\x17xD\xc9,\xbe\xe8B\"\xa9\xe0\x1cY\xff\xad\x0c$\xf2c\x97\xddZ\x89>\xccw\"\x94zh\x8e\x04g0Q\xe2\xe1Bs^\x84\xf9k\xef\x89\x11l%W\xfe\x94-\xe5\x8fy\xc2}\x06\x06\xdf\xca\x84\xe3\xbf\xc1\x1ee\x80\x8d\xc3?\xa8\x01\x88) )\x0c1\xb3\x18L'\xf8u\xe6\xd5\xc1\xd0!\xb3\xa6\xbc\xfa\xceI\xe2\xa24\x99N\xf2\xe0{\x90-\x04P\xb0YQZ\x0c\x1f\x04\x01m\xa2\xb1\x11>\x98[S\x02$\x18W\x0b!\x0ca\x10\xa4C\xaa\x8b!\x89f\xe9\x85\x95\xdd\x12r)\x05=P\xbch\x86;f>IO\x1d\xa5\x8d\xc2N\x9cW\xdc\x18\xc5\xce\x06\xca \xbc\xfa\x9d\xf6\x8f>\x153\xe6FM8g|E\xf4\xd6\x9e\xb3\x08\xcd\xb9mEg+dg\x8fS\x98\xfb\xa0Pz\x12\xfa\xdc\x1a\xab\xef\x8a\xdbp=9\xe8\xf3\x0c\x17\x0c\x0e\xc6\x8c\xea\xd2\x13\x95F=\x91l\xae\xc9GRP\x12\xbb1\x1d^UI\x19\xaf\x13BWpr\xb0s\x15\x97F\xb4\xa8(\x1a\xc6'h\xbe[\x9e\xb0\xe37\xf5\xe0\x86\xbb&\x11Jm\x8dZ\xd9KA\"\xd1e\x17M\x10\x8b\xa8.\xcb\xee\xf4\x9b.\xcb\xdeW.\xcb\xee\xf4Q\xcb\xb2\xd7Z\x96]\xcfo\x8a\xe82\xb1\x7fLZ\xb8\x0dV\xeb`\xef\x9b\xae\xd6\xe1W\xae\xd6\xc1\xde\xa3V\xeb\xb0\xb5ZO\xcd\xabu\xa0\x15O\xd9?\xfbZ\xf1.\xfbg\xef\xf1kk\x8a\x1f\xd7\xb5\xbah\x9e\xdc\xb5\xc2\x8a\xa6\xa3\x8e\xaa\xc5~\xb6\x02\x08\x9c\xc1\x0b>\x9b1\xa5\xcc\x07\x84\x87\x92\xc7\x93wh\xf2\xe9F+\xf8\x07\x8d`\x98\xcd\x99\xb0\xfa\x1a#\xdb\xf4\\\x9eO\xe3Q\xe2\x0ck\x17\xfd\xa6R\xbd\x91\xda\xd4N*D3<\x8a7\xcda\xb69Y\xc1\x10j\x15\x06Q\xac\xe2\xe1\x9d\xbf\xd8\xa4\xf3.:W<\xbc\xdd_7i\xb7\x93:\x86a\x14\xb2xx\xff\x9f7\xe9\xbf\xd7v\x18\x9a\x86_m\xd2p\x075\x0e\x83(r\x18H\x95\xc3&\x9494\xb3y;l6\xbd\xc4:4v\xd1F\xc6\xfag\x1e\xf9Rx+\x1e\x83\xcd\xbd@~J\xe6\x8e8\x02\xc7\x19j6\x0dF\x9a\xec\x81\x8b\xe4\xd9dmA\xa5T\xa0N\xfeZ\x85Iw`\x170J\x1bzd\x0b\x122\x146\x9a\x9d\x88\x87\xe3\x80\xfb{\x0e,kY\x88\xd9/\\\x9bE\x9c\x16k-xr\x17f\xb2)F\x98\xffRK\xca\xdf9p\x81\x9f\x9es\xb3\xe9\x9a\xae\xa8\xddy\x10Fr\x7f\xc9`\x15\x96\xd1\xd2}\x12\xfc6}xr-2l\x80#\"\xe3\xd6\x8d\xf1\x10\x80,\xc8L\x10\x04\xe0x\x9e\x0f\xce3No\xd4\xe1r\x9e;]\xebb\x91'\xf5\x1a\xb5\x7f\xfb\xad\xd6y<\x05\xb3\xea\x9e\xdb\x0c!\xa2v\x84/\xc8\xb1^/\xaf\xed\xb6\xb4\x17\xcc\xd6,naT\"|\xdd\x11\x03\x8bv\xef\xefQ\x80\x83/b\x1d5\x9b)>\xee\x8f\x9e\xd3\"@\xfbh\xdb|sx\xce\xc7C\xe8_\x9dnBM\xfd^\x17\x02\xad1{-\xa4\x03|H\xeb\xbf\xf2\xfa\xaf\xb8\xfe\xab\xb9|\x83\xc4{\x19\xba\x0e\xec\xd0\xd3\x83!\xcd`\x87\x1e\xa7P\x96\xe8e>T\x1e7\xdf\xc0\x00\xc8B/\x18s\x15\xacb\x99\xc24\xbb\xe3\x13H\x98!\xedh\x94\xd8%\x80\xd1,a\x12\xc0\xc5,\xe9\x94\x00f\x18\xbc,\xe1:sZ\xdb\x0e\x83\x1f!\x01\xcc\xe0\x19\x1a!\xa3\x04\xb0\x82g\x90\xd9%\x802\x94\xc2(\xc2C\"\xbbI}q\xe3\\\\J\x91%\xd7.Ao[\xf7o\xd4\xd9\x9d\x1aR\x03\x03\xaavu\"\x99\xfc\x7fmG\x93\xce\x8e\xd0C\xdf\x0c\xc7l@L\x8b\xb9Y\x93\xb8L|$\xddt\x9f\xf3_\xadVj\x0f\x14\x1d@\x99\x83\xa6\xe4,J\xf9F\xad\x9b\x8f0\xc2\xe0\xb8x\x1d\xa7\x18\x97\xc03\x04d\xe1\xae\x92,r\x81p\x8c\x10\x84\x87\x0f,P\xc7\xcc\xe7\x91t.<\x16\xc9\x11\x92,\xbd\xa6\xfc\xaa\x88Fk\x0f\xa8q\xcf\x00\x85\x18D\xea\xc1\x19\x05\xcc\xac\xd8\x08\x899\x07Ay3\xd9\x9f\x89\xd5\x1db\x94_\xdb\x18K\xa8pGO\xea\n]\xacU,98\xc9\xc1{\x9e\xd7NM\"\xe2 \xe3\xef\xf0\xafA`_r\xeeeg1\xab\xca\"\x9e\xd7A\xa9\xec\xf1I\xf2:\xae\x805^\x86\x02^U'Q\xabJo\x08\xff\xc5/\xdbJ\x0b\x94c\xde\xf2^\xd6k\x18\xdb\xc5\xfb\xbc\xdc\xa0\xcf>\x8e\x8b7y\xb5A\x93_\xab\x8a\x80\xa6\xdb\xdb\x0d\xba\xed\xe5\xb1x\x9b_6h\xf3\x1fN\xd9q>h\xf0\xbd\xdc\x14Z\xf3o\xc4I\xd9,u\x01\x98A\x13s>\xd5\xbd\xa6\x98\xc2\xb1\xdf\xf9T\x97v\xfd\xdf\xf3\xf7\xef\xfa8\n\xbe\"\xe6\x1bJ\xdb9\x06\x11\x0c\xc4\xccr\xcc\xc32<\x06\xdd\x93\x0e\xe9\xa3&oFp\x19\xe6\xb9\x88\x0d\xe6\xf7\xc3R-\xf8*\x05,\xef\xe1\x14\xf6\xc6G\x07\xb6\x90q\xbfv\xe1l!A3I\x92\x1ec\x16\xac\x98\x03\xa3\xce\x97\xd9\x8c\x992@\xa2\xc1)js\xed\x0c\xe40\x87\xde\xcf\xff\xa8S\xfc\x16\x93{3drv\x1bDw\xcb&\xf5t\xb78r\x95\xd8\xa7\xbc\xc1\xb2\xa6+\xa9,\x82\xe3\xb0\xfbG\x98\xab\x1c.F\xe61}\xd3k\xb7\x9ce\x1dS\x8f\x07M\xfdm\xd7\xd4\x15St\x8d\xf1\x90\x877f\xc3\xcbk=^\xc659\xb1m\xd7\xf2Yv\x01#\x98\xee\x1f\xc0\xf7\x90\xcf2S\x90X\xd8t.\x9f\xba\xe6\"4\x12\x13\xd4H\xb0\xd8\x18\xf6H6\x0e#\x01E\x04\xef*NK\xbb}\xc7\x08\xc9 k\xdc\xb7O\xf9]\x9c^c`\x13Lj\x00W\xe4.K\xe7\x82\xf6ak6\xd0\x0b\xf7\xa5*\x82@\xa7\xc8\xc7K!\xbes\xd8\x18\x8ca\x80\xb8\xb0D\xc4\x0f\xb1i\xb2 \xba\xa8\xf1\xe3\x9fY\x03\x03\xe9\x91\xfe\xf4\xd8t\xb6\xe615\x88$t\xb0\xc7\xc1\x9c\x93/ \x8b\x17\x06\xae\xe8\x87\x1ef\x88\xd4>\xfd\x84\xdbS\xef\xe3\x86\x9b\xf5\x92\xca\xed\xd5\xadud\xaf\x17\x1f\xa6\xaa\xe1\x0ewG\x8b/\x00\xf5\x10\xdb\x18\x94\xe7\xd938\x84\xef)\xfd{\x061\x1c\xc3\x04v \xf6<\xb4\xd16\xbc\x184\xe1\x8f\x1bMxoz\xb4wt\xf0tz\xf4\x8df\xbdg\x9f5iOk\x17\xa7\xc5\x16c\xd0\xe4\xde\x0d\xbe\x1f_s\xb0lG\xb5\x03\x9e<\xfa|\xfe\xa4\xcc\xc88\x9dZ\xaer\x7f\xcf\x16`\xec\xb3\xa5\xf6!\xe6<\xae\xdc\xc6t\x97\xbd\xa3+\xb07h\x0c?>z\x0c\x87\x961\xecO\xd9;:\x86Cm\x0c\xf2\xafB\xa7\xeb\x86\xd8\xef\x08\xaf\xb8aJ\xeaS\xf8\xaf\xff*}=\x08&\xe1\xb9O\xfe\xeb\xbf\x88\xcf0\x05\x0bC9\xa2X\xbb\xbe!\xa5\x888RR\xc4^\x17\xe5^\x13\x92\x8c\xe5\xea\x92\xbe!\xe2\x1bR\x7fC\xa4o\xca\xba\x04\x93\x1d\x1b\x03\x985:\xcf\xda\xea\x1a\xd7\xc2\x1a s#\xf9IM\x81\xc1\x8e\x9eeE3\x86\x11\xec\xec\x101\xef\x13<\xda\xe3\x9e\xe9\xd2\x0f\xbe~\xc2\x87C\x00\x02o\x90\xd4s\x9c\xf8\x9a\x82\x83o\xdc\x90\x1e'\x07\xedc5\xa8\xd3\xa9\xa5Sn\xe9\x81\x8b2\xb9@\x9c?l\x1c\xed\xcd\xfe\xbaq \xb5\xa1\x0cf\xc88v\xa7\x8f\\\x8f=}\x1c\xae}A\xe4\xa2)\x16\xb18\x7f\x93\x83\xa7O\x9fN'\x94\x8b\xa8\xdf\xef\x0e\x1c\xf6#\x97\xaf5\xec\xd6\x18.D\xe2Li\x06\x93\x83\xf6\x14\x94Y\xed^t\x8a\xf0\xe9\xb0\xff\xd7A4x~\xca?\x9fL\x0f=.\n\xdf\xe1\xb4\xe3:\xbbu)\x95\x00\xdf\x03\x06\xf3\xec\x05\x07\x7f\x0f\xf0G\x94\x85\x91`[~q\x82\xe4e\x1b\nf\x1a\x14\xcc\xbb\x17)3,Rf]\xa4l\xc0\"}#\x90\x89\xbe\xd7\xf5\x89Gu\xde\xf7\x80\x11!v\xa4{0\x11\xa9\\\x07@\xd7\x0d\x80\xab\x15\x9a\xb5\xd7\xf1F\xf8UX\x81\x8bu\xedw\xa7O\x0f\xe8$S8c\x8c\xd0x\xf2\xf4`\x0c\xf7\x90\xc2q?\x05\xb2\x01\x8c~\xf4t\xd8$\xee\x15\x10\xfe\xfbM\xe7\xdb\x81\xfa\xcd \xbd\n'i\xd9to\xd0p\x87\xad\xfe\xf0\xe1b\xcf\xedA\x0f\x00\xee}\xc3}\x9dd\xa1\x01\xba?n\xb816\xd9(\x1a\xb6\xc6\x82\xeb\x1b4\x8co\xb5j\xadaL\x86\x0e\xe3\xc7\xac\xbaJ\xc8#\x97\xe3\xb0w\x1cc\xc1\x80\x0e\x1b\xc7#\xd7\xa3\x7f\x1c\x93!\xe3@\xe6\xd9\xca\xcdX\x848<\x9d\xa7\x82\xe0\x98\x15\x0b\xaam_\xea\x06\x04:2I=\x96t\xcc\xe6\x88\x12\xdbc\xfce\x1dN\x1fx!H\x13r\xba\x14\x94D\xdaB\x93\xac*#\"N\xa1\x84'\x1039\x90\x15\xbc\xd1\xca\x9dP\xac^I#\x99\xf0w\\\xc9\x14\xabXW\xd3`\xa4$\xad\xa6\x10\x9f\xd5+\xba\xb3\x13c\x808N*\x18\x964\x16K\x9a}\xb3%m\x11\x15\xdd\x16,\x86E\xd5\xd7\x92\x02\x8b\xfd}\x1f\xf5(\xd6|?\xb8;M\x06\\\xb7\xf4\x04\xb4\x96O\x197\xf9\x1f4\x11\x13\x05\xf2\xd5s\x99\xfaLr\xdc5\x9b3\xc3\xf5\xf0\x9b=\x9b\xb0=C\x11)\xa5\xa9>(\x1dl1\x1b\xfb\x91\x166\xd2>\xc9\xc1\x94\xf2\xef8I>\x1b}\x92|\xee\x86IN6\x9a\xa4\x89Z\xf9\xeaI\xee\xf9\x92H|\xd0L\x19\xcd\"f;\xdd\x93\xa6;m\xca'\x07\x96\xbd6\x1cg\xba2\x1f\xcd\xdb\xdfI\x16I+\xf3;l\xff\xe6+cY\x95\x89eU\xa6\xe63\xb3\xdb\xbd2\x93\xc1+\xb3!\x8a\x15\xd2cyY\xb6\xac\x06G\x02\xd4\xb7\xd0\x03\x86\x8e6\xcbN[\xb8%f\xa8d\xc7\xe0\xe6m\xb6\x07C\\lF,=Qz\x1f\x89\xc1+\x19\xdd\x08\x917wJb\x7f\nsL\x86\xdb\xe9\x84.\xf0\xcb\x10C\x14\xf9\x1a\xdew)\x96\xaa\xe0\xf9s\x18S<\x1a~\x13|\xb5!\x05\xf0?e\xa3;\xa8\x88\xaf\xdal\xb1\x17\x12\x81\x915\x04\xc6\xc6;>\xfa\xfb\xec\xf8\xefB\xa0L\xa6O}\xd8\x99L\x0f7\xa7Q\x14\x1d\x12]Z\xe6\x930\xf9\x1a\xfa\xe5w$_v\xa7O\x0f\xe8\\Q\x860\x0c\xb4\xff\x8e4\xcc\xefH\xc2\x04_K{0`\xca\xdd{;\x80\xc4QH\xa2\xaf\"h~Gz\xc6\xbeD\xea\xf5U\x8c$\xc4-\x1e\xb0\x8a\xff@\xc4\x8fE\xfe\xd4\xbd\x8a?i{\xd6\xe7U\xd1\xf4\xb4\xe9~i=M\x06\xf5d\x93\"uw\xf5\xe3c&e\x13\x14m\xd4U\xef\xac\xa2l}\xb7\x19\xdd\xd2\xa4\x9b\x1c\xa3Cd\xed\"\xd8\xd8\xd5\x97\x9a\xa7\x97\x94\xa5\xa41E\x90+\xd0\x0fI\xdd\"Wq\xe45 \x88\xce\x0b\xcc\xfb\xb2/\xbdS\xdc\x8a\x84\xd2\x0cP\x1eVO\x13\xa4\xcb\xf0\xa6\x0c\xf3kR\x9e\x97a^\xf6gC\xad\xcdx\x80\x19kj\xc30\xf7PdU\x1e\x91\x0dz\xc8\xbb\xc6\xcbZ{\x95\xce\xfb\xdb\xcaU\xe7\x8bz\xf5\xd5\x1d\x95\xec\xaf\x08\xc6^\xda\x916Jy92Z\xe5\"A\xcb\xf4[\xb99n=\x12\xc8\x8d\x1b*\x06]\xe6\xcaA\xec\xb1#$M\x0c,]\xc2\xe4\x04b\x9e\xd5`g\x07\xcd\xc2b\x18\x01\x03\x92\x14\xd6\xd1_\xa6\xb8/\xb5\x93\x11eA&d\x17X\x18\xaf\xcd\xb2\xfe\xb105\x9aY\xda\x06\xfd\x1b\xf3\xb9\x14\xa4\xac\xf3\xb8\x94\x8a\xa9N\xca\xcc\x9e2\xcf\x9c\x0bS\xe8\xfd\xba\x00\xc1\"\xc6\xf4\xf6\x1b\x00\x02\x83\xd3\xd5\xc6\x99\xadEz\x02\x0c\xa9\xc1\xd1\xa6vC\x8c\xe9s%\xb8\xd0\xfe\xc4\xe7Y7\xfa2#\x81\xec\xe2$\x07,\xb7Y\x1e\xd1\x87n\xe9t\xff\xa0F\xd4\x96\xf8h\xf6|\xabz\xb2\x19C><\x9b?{\x9d\xf1{h2o\xcb\xb2c\xbfj.\xe0\xdc\xe6Ul\xf3\xfch\xf5\xc7s\x97\x98\xf2\x9d\xf3\xc5b\xa9\x92\xacF\xbf\x1cF\xca\xe0\xe7\x19\xc3\x0dj\x91\xd5*\xfa\xfd`O`\x0c\xe7\xd1\xc4\xcf\xa3\xed\x9b\xa1Tf\x1bl\xe3\xcc\xab%\xba>SF{\xcc\x93\xc8\x8d}h\"{P,gL\x0bo\x87'\x06\x8b}\x04\"L\x93a\x01\"viB\x85\xb6|r\xacB\x96Q\xf8g7\x15)\xeds)\x01\xa6\xd7\x91\xbc\x99\xb2\xdc\"N\x95\xf9\x10\xd6\x13\xe0\xb6z\xe8\xa3\xacLB\xc0\xc5j\x96\xc1\xbfB\xb8\x81\xcd^\xd9\x8a\x91\xa3\x8e\x81N\xf6op\nOf\xff9\xfa\xe5\xc9x\xe7\xe8\xc5\xce\xff\x0bw\xfe\xb6sy\xf1\xe4\xda\xe6z\xf3\xba;\x84+\xa0r\xf6\x0c\x9c1:\xfd\xabiB\x8f\xb5\x02ul\x96\x0e\x7f\xb6*\x00o\xcc\x01\xda\x08\xf0\xa88\x13x\xd2\x9b\xe3\xb2q\x90\x89Ex~S^\x87\xee\x14*1\x0bl\xd3J\xec\xe0\xc1s\x8c\xe6\xbd/P\xf4\xfe\xd3\xdd\xbd\xbd.\x80\x1b\xf3\xfcp\xf6\x1aP_\xd2\xe7\xb0\x7f\xb0;9\xea\xabL\x1f\x96\x88b\x97\x8eggB\x07\xc3\x93ILw\x8f|\x98\x1cM|\x98\x1c\x1eu\x80u\xf1DYZ\xc6ie\xce\xa5$\x1e{\xf6 \xe0c\xaf@\xa4~\xb2J\xf5\xe4\xe7\x1fi\xf4\x98\x10\xaa\xb3Jo/\xdd\xd9\x95\xf0\x98\x1c\xecN\xad)\x04\xc53lU\xfc\xdfy\xc8)\xf7\xd18\x80\x11\xa5\xebvx\n\x82g\xcf`\xc2\x0c]v\xf8l\x8c-\x88\xb4\x89\x9c\xef\x190\x1f;&o\xeeo\xca\x12U\xf4\xdd3\xd6\xe1\x84eg\xe9K\x7f\xc0\x07\x93v\xcf\x83\xef\xdft\xbc7\xb0\xf7\xe9f\xbd\xc3\xf3\xe7\x98\xcb\x00\x03lcB\x83\x94\xfe\x9a\x1e\x0e\x1a\x16\xee\xd3\xb0q\xedn>.L\xba0\x9d\xee\xb1\x10\x1ep\x00\xdbt\x848\xba\x0d\xc6\xda\x03\x1aq\x1e(\x14!\x92\xb4&V\xd2\xdar\xf6\x99p\x86\x19X(i+\x93\xab\xfbu\xd6\x7fy\x8cw\xa6\xe3t'\x13>\xb5\x07\xbfS\xb8&h\xa8\xd4}\xea\x05,\xe8|\xd3q\x19\x90/\xeb,/\x8b:\x85\xf1\xe0\xd6\xf6\x0e5\x8a:f\xc5GZ1\xa5\xd3\x9cY\x86a\xf0y\xd0\xfb\x0b\xc7<\x02\xfb\x89\x15'\xa7\xc0\xefU\xc6\x8c\xae6\xfdb{\x1b\x90\x0d8=\x95\xee\xdd\xc3f\x93\xda\xdd\xf5\\\x16\xb1\xdf\x07'\xcaIX*~m_\xb1\\\xbbOw\x8d\xeb\xb5\xfbt\xcf\xb0`\xb4|_+\xafx\xf9\x81V\x1e\xf2\xf2\xa7\x9e\xc4\x0d\xd4\x07\xbbh/\xe6\x0d\x8f\x0e\xbac\xd0}\xa6\x1c?\x03\x0f\x9f)\xa7sV\xcfk\xad\n\x0d\xa2\x84\x84\xb9\x8b\x87\x9cX\xb3q\xddt\xa7\xd4FQ\x10)\xdd|6\xbe\xf0!\x9fMt\xbb\xff?\xb4\xffRd\xc0t\x0ctWT\x89\xd0\x9c$\x04c\xfc\xc4j\xf95\xa1\x102S\x0b\x97!\xdd\xd7J-,\xb0f\xe8+{_l\xb6\xf7O\xf7,gH\xf9\\_5c\xf8\xfb\x13HwvN\xda\xf0\x17\x05\xa8n9K/p\x01\xa5\xbc\xd1\x1aU\xc9K\xa5,\x9f\xe6+\"\x8ff\xf0\x90\x1b5\x92\x88y\xdad\xc9!\xf4/\xf2\xe8\x8b\xf9\xf4\xe81k\xd8,\xdf\xe5\xe5<,\xc3\xcbK\xe3j\xe4.\xf1\xe0\x0c\xd2\x99E\xbeW\x17\x1f\x83\xb3\x0c\x8b\xa5s\x01\xc7\x90\x06\xabp\xfd\xd8\xf9\xec\x8d-\xe0s\xa2_{\x06\x0e\xf0v\x8b\xa2\x8d`f\xc6D#9\xcb\xe8G!\xe5c\xc7<\xb1\x80\xb0\xc9d\xf7\xb1\x83CP#NH\xec6\xd2N\x8aY\xf3\xaf\x18\xeb\xd3\xb1a\xa8\x9a\xa8a\xd8Hmbbz\xbaY\x0c\x01q\xea\xdbb\x1bT\x12a\x14N\xe3\xb1s\xc6\xd8\"\xaa\x04\xe8\xd8\xe8\xbd\x81\x9d\x98\x1e\xb8\x9d1=l\x1b^\x17\xa7*XB\xf3\xa8\x94:lh\xc6\xd6\xf5\xd8\"\xc1\x0d\xc9\x0b\x8a'j\x0dS]TG\x86sn\xc6\x81\xe3u\xd7\x98\xd0\x1a\xb5]\x8b\xb9\xc6!\xads\xa6,{\x1bO\xa4\xe4K\xf9)\x8e>\xab\xb1\x98;bK\x82\xd8#Q_\x96B\x97\xb6\x08\x0f\x94\x8e\xba\n\xa3\xcf\xc6\x18\x0f\xa2%[\x98\xfb\x9b&\xab$\xb4\xc3J\x9b\xbf\x11\xb1\xb7\xc2.b\x1c\xa3&\x8d{\x02\xd5\xf6$\x80\x14\x16@\x81XI\xb7+X,\xb6\xd8\x93\xdf\xb1\xddb\xbd5}\xe2\x0f\xc0k\x86D+\xe7\xfa\xcd\xac\x83x\x1e\xfa\x86\xda\x93\xdb\xf1\x9b\x0e\xb5\x95{U\x7fzG\xdb\x93\x89\xf1[\x8f\xd6\xb7ir\xc4\xd35\xe0\xde\xd8Z \xcb\xc1\xe9}b\x1ci\x88\x16|\x8a\x1c6\x137\xc1\x83lV\x8dF\x17\xf2-\x99U\x1dq3\xe1[\xac\n\x8bX\xcc\xa5\xc4}\x0bb|\xdd\xc7\xe2? U\xdc\x801 N\xcb,\xda\xee\xde\xa6,\xda\x81\x89*\xc8y\x96B\x13y\x9f\xf5\x91\x8eqJ\x81 \x99q\xae3m\x14\x13\x0f\x86\xe6*\x9by\x86\xe0L\xeb\xf7R3\xe2\xaf\x98e{\xa3\x98\x9c\xa7\x1ek\xfe\xe4 \xb8\xf4\x02L\xa1\xa5\xa2\x84\x1c\x8e\xc1\xcd\xdc\x9cN\xcb\x9734V\x9e\x0f\x99\x1b\xb3H\xb0\xd5\xd0\xccr\x88\x1aL\x8a\xaa!\x01\x88\xd3\x8cc\x04\xde\x80gD\xe3\xa6E\xa1#\x1c\x9a~M\x19b/\xee2\xc5H6\x0fO\x1c\xab\xb8\x85\x01\xf8\xc0%5.1ghKYf\xe8\x98\x9fh\x9e\x13\x1a\x7fJ\x7f\x8f\x15?\xe4f\xee\x03\xb2\xae\xfd^so\xb6\xc6\xb4)\x03\xf3\xb7\xfd\xce\x83\xcb\xa5|\xa3\x1b\x93\xbafZO\xbeH\xa9\xbbwp\xe4\xb9\xce\"\xcb_\x85\x91\x08\xa5\xf5\xa8f%\x1e\xe0H\x17?p\x1e\xe0H\xe7\x0d2\xce\x1b\xe8\x10\x8d\x891\xf6\x9e\x1eJ\x8b\xe2n\xc6\xd0\xf9\x94\xfa\xe2 \xbd\x8d+\xdb\xca\xf4\xf1\x0c\xa6\x94~5\xd8)\x94p\xc6r\x15s\xf3\x8d\xd2g\xc9N\xab$\xa1'\xbcPP\xd7\xf4\xc2W\xa4#\xa8N\x0cy\xe2!\x16g\x15#\xd5\xa6\xa8P\x16v.N\xe4\xf0\x80\x91R\x19\xa1e\xa1Zv\x8b\x01\xd9##]\xcc\x93A\x1a\x12\xa2\xaa\x99 \xd3v\x05\x92V+\xc2_g\xed\xd7\xb7y\\\xb2\x97\xa1\xf2\xee\xc1\x87\x02\x19\xc7\xd8-\xe8\xb0\xe8\xcc\xa2\xe6\x90z\xc1\xf5\x90\xa8\xd3t\xc3\xf8V\xf9\xb00\xb3A\x96]\x89\x1a\xd3\x18\xf3\xe6D\xca\xe6\xecJ\x9bC\xc1\x99\x14\xba\xe8\x182\xce\xe1\xf3\xf7\x14\xae\xa5\xea\xfb\x149\x1c\xb9S\x1e\xc1\x87nh\xd4\x8cAz\xa3\x1d\x06q\x10\x8a\xe6 \x84\x86\x83P\xb4\x0e\x02\x8fa\xde\xde\xf4kR\x1a\xb7\xbc\xa0\xe5\x86\x9dV\x8fB\xd8}\x14Z\x89y\"\xbe\xdb\x11\x1d\x0ff\xc3\xf9\x16 I\x92\xe1\x1c\xdaD\xa9\xc1\x8f\xaf^\xbf\xf8\xf9\xa7O\x9c\xb0\xcc]\x0d\x0e\xb3 \xe7\xc70K\xdd\xfd]O\xcb\xdeO\xbe\xac\x938\x8aK\xfe\xfa)\xdd\x16w\x7f\xf7\x90\xff{\xe4I$\xcf \x18hgP\x05\x8d\x0c\xa9;m p./I\xf16\x9bWZ>\xd6AKG\xdb\x93\x05\\\x8a\xf5C\xea\xd6\x1abwz\xc0AI\xea\xee\x1eq\xaa;u\x0f<\xd7\x11&\x1b\x9f\xc2k\x01Z\x9c\x97\xe7\xe7\x1f\xab\x84\xfc\x14\x17\xa5\xff\xf2\xfc\xfc\xbc\xbcK\xc8\x8f$J\xc2<\xa4#\xa1e\x7f\xa2p\x85UHb\x92\x96\x1fIT\xe2\xcf\x1f\xdf\xbf\x95\xfff\x8d\x8b_\x9f\xb2\xcf$e?\xc22\xfc\x94\x87i\xb1 \xf9\x9b\x92\xac\xb0\xf0u\xcc;\xfd\xf7Oo\x7fz\x91$/\xb3$!8y,\xd1~\xbe\xce\xf2\xd5\xab\x84\xd0[\x8c\xbf\xcf }+J\xde\x92y\x1cbco\xe3\x15\xa1\xe8\x96\xa5\xe9}\x17\xae\xc8\xfc]6'o\xc3\xb5O\xff\xc5:\x1f\xc2\x98\xce\xe1\xaf\x15)\xd8\xd0?$\xd5u\x9c\xf2\x7f\xd8\x97\xe7\x7f\xfa#K&\x87\x15\xce\xff\xf4\xc7w\x88\xa5\xc5\xaf\x0fa\xb9<'\xd7\xf5\xcf,NK\xf1CZ\x85\xf3?\xfd\x91\xcd;\xcb\xd9\xa4\xcf\xd1D\x95\xa1sV@\x97\xfb|I\x08\xfb\xfc\x13eg\xf20\xfa\xfc\x92/x]\xc0~eU\x84#r\x82b\x9d\xc4\xa5\xeb\xf8\x02Z\x8cO0 ~X\xcb\x80\x8b\xd1\xc8\x04g\x11\x1e\xce\x8a\x8b\xf6\xbd\xa7\xe0%\x9fE\x867h0I\xe9\xf2E#\xf4V\xa14\xe6<\xdeJf\xd5\x05\x13\xd2%(\xf9\xa0@\"\x9bE\x94\xab\xc8\x02\\\xd7\x9e\x13\xaf3<\x14\x8e\xfe\xf6P[\x1am*\x96\x13\x02D\x0eH=\x1e\x86\xf5\xd0\x87\x9dI\x1f)e\xbb\xec\xdd\x94`m\"\xd7\x10\x80\x12\xf1\xf72L\xbf+\x81\x0e\x06V\xa4\\fs\xc8R0\xe6\xeaii+7\x1b$\x07-\x83Y\xca\xa9\x0d\xeav\xd2Y\xa8\xc7\xef\x13o\xa6\xbe\x1e\xa1\x87\x19\x16ZR\xa4s\xe3+\xb1\xe3B\xc8\x8b\x80Mlc\xd3\x9f\xa1\xe5\x8eF\x91\xbe\xff\xf4\xde1h\x1aeY\xcc\x83\xfa\xba\xd0^\xb7`\x0d\x1dl\xc9\xa9(w2=\xf4\\'^\xe4\xe1\x8a\xe8\x1d\x89'G\xe8b\x13\xab\"\x92$AA\xc1l0\x8f\x8bu\x12\xdeQ\xac\x97f)q|\x9c\xfb\xa1\x17\x84\xeb5I\xe7/\x97q2g\x99\xca\x83\"\xa7\x80\xd2\xf95\xbc \x8b(\x8f\xd7\xe5\xb1\xe33\xabV\x12DYZ\x92\xb4\xfcs\x9c\xce\xb3\xdb`\x9eEH\\zA\xb6&\xa9\x8bn\x03,j\xa7\xf3\x8c}\xfa\\T ^\x9f2\xc5\xf1\xb3_\x9e\xf0W\x98\x81)\x88\x92\x8cE\x8c/\xf08\xbd>\x81|g\xe7\xc4\x03\xae\x9a\x94t\x8d\xb3l\x96_\xd8\xad\x02\nWS\x89\x9a\xaf5O8\xcf\x94\xd7\x94\xa4\xed\xe7\xa7\x8c\xf0\x89\xabf\x04m\xdb\x0c\x93\xa2\x12\xb7\xf4\xfc:\xdce\xe8\x83\xfa\x9aK$)\xc68e\x0eX\xb4j\xe1\xaaY\x95\x08\xd2\xe0\xc7\x10\xbb\xa9/'\xe8\xed\x07\x87\x02}\xa0\xf7hDb-=~\xae8\x96\xf6\x01?\x9b\xa4\xabx\x17\xbe\xe3\x0e\xce\x1eW\x84\xbb%\xfa\xf5\xb0\x10\xa8\xa9\xb71\xcf.\x11t\xbb\x9e\xeb|&w\x85~\xf2\xd9\xa5U,\xcc7\x1av\x8e\xe1\xa3\xee\xc1\xc5?\x98\xec\xe7\xf1\xa34 #g\xce\xe5e\x94\xe5d\xe7\xd7\xe2\xb2X\x869\x99_^:\xa2O\xf3;\x8a\xe8\x1f;\xa1XL(f\x13\xfa\xed\xa1o:6\xc4\xe9DYZ\x94y\x15\x95Y\xee/\xc3\xe2\xfdm\xfa!\xcf\xd6$/\xef\xfc\xb8\xf8 \xce\xef\xfb\x85\xbf\xe6\xc5o\x8aW5\xbf\xe4\x97\xd9OY\x14&\x84a\x03_\xa0\x05\x9fc\x1e\x99j\xdbl\x95'{^\xb00\xcaTtQKf&\xf6\xfbV\xd6\xcc\x98\xa3\xcau+\xc6#\x9er\xdb\xf9\xb2\xb9\xc6\x18\xd0\x98\x99\xd4\xa0\xb8\xa5\x0d\xcdUfs\xcb\x10PA\xc8,\x94\x17\xbd\xfb\xb7!W9\x9d\x1cy\xee\x96\xec\xeeBq\xcb\xbe\xc7s\xde\xfb\xe0\xb0?\x1c\xbf\xe3\xb0\xa1\xfd\xc9%]\x8a:S>\xf7O\xbaD\x83\xaff\xc8\xbe\x1d\xc5I\xe8\x8d\xb7g\xb6\xaf\xe1\xed\x9a\xa1\xaebHvf\x17\x041@\xda\xee`\x9e\xa5*\xffI\x9f\x07\x06\xbc(\xe0\xc6\xe5m\xe66\x92\x8d\xeb\xad\x9d\x19&\xc2\xfb\x99X\xf7v\xc3[\xb071\xcb\x15[\x9cm\xebF\xd4r\xd7\x02\x89\xb7\xbc[]\xa4K\x08\xd5\xf1\xbb^\xefm2\xed:A\xfd[\xd5%d\xaf\xf3\x11\xff\x9c\xce\xc9\"N\xc9\xdc\xa1H\x84\xc9\x8f\xf8\xabwU\x928Fg1\xa4E;\x119\x0e8\xbf3\x94Jc)g\xc4\xe0\x98\x02QX\xa7\xe6\xd5\xf4\\\xe8\xd1\xca(\n\xbc\x12\xb1\xe7q\xac\x9d\xa1\xb0\x08\xb5\x00\x0e\xab\x80\xc3u+v\xca<\xcfFV\x03KBCP\xe3 m\xdd1T=\x80\xc1D\x02\x8c-\xa8?\x0f\xd3y\xb6r7\xdeM!\x92d\x86\x8a\xaeC \xc2(,]}\x17\xe9xK\x1f\x1c\xef\x92\xd2\x8e\xa3Q*\x92\x04q\xf8\xb1{\xf0x\xb4\xbbk\xbe\n\xfb^M\x8f\xb6/A\xee\xc6\x1c\\\xc7\x9c\xf4\xe3\xf2\x93\xc7\xae\x00\xdd_\xad)fA\xf4\x9bn\x8a7x^\x93\xddn\xaa\xe7\xa8\x9fS\xfd\xef\xa0z\xf6\x9fZ\xf0\xf1\xbe.\xf1\xcb\xcc \xaao\x12\xff\xbb\xf1\xf1\xc1\xc4\xb4\x00\xc1b\xc8>Rn\xc2^ $h\xdb\xe6\x92\x10\xa3\xad\xf3l\x15\x17\x843&\xa5+O\xc4\xea\xc5\xa4y\xb4\"\xd3$\xfdN\x0d\xd2\x9e\x1f\xc29|\xe0}Id\xa5=\xf3!\xea.\xd2\xdalX~\x1e\x04:\xceI\x91%7\x84\x03\xd0\xba\xf0W\x96\x858\xd7\xddZ\x1e\xbe\x82\xff\x98\xec\x99\xa5\x05\x93\xf1#O/\xb3?m\xb2JJk\xc5n\xc6\xffq\xd0L~\x04\x0e\xcc3R\xa4\xdf\x95\x98\xf7g]BN\xae\xc9\x97-\x8b\x8e\x94\x83\xd3\xaf\xba\xd0\xf4\x82b\x8e\xe4\xfe\xabiD\xeep\nO\x82'\x9a|\xc7\x88j\x9d'\xc1\x13\x07f\xe5\x85K\xb4\xbd\x128\xb6\xb5p0\x04o\x93Y~\x81J%\x1f\xb6\xac}@\x0f.7-\xef\xa6z\n\xf3\xe5'A\xa3\xfb@ e\x1b.Tn\xeaN\x0f\x0ft/\xdc\xb8~u\xa8\xbfB\xd2\xceD?\xc4\x01W\xc3 \x85\xd1\xf6\x08\xc8\xeb\xf7g=\xc0DPE\\\xe7\xa8\xed\xd8\xf1\xc0\xaf\xad\x84\x8e2\xd02\x90\xe0\x04\xcb*\xad\xbcFPS\x17I\xe2\x94\xb3f\x8e\xc7\x96\xa1\x9a\x0c\x83*+\x90\xe5\xc3\x91\xb6\x8c!\x9b\xf6\x0ckuWi9I\x0f\xd2\x11\x10\x93\xd9p\xd7N!s\xeb\x1d\xf3:\xb7\xccBPW2A\x9d)@\xb1s\x0f\xff\x1e\xfb\xb7\xc1\xd8\x87\\G\x82h5u\x0f6d\xb6L\x82\x9d\xd4\x9d\x1a\xc9\x9bC\xb3\x01\xc7dl\xf6CAi\xc6c\xc1l\xcc\x1d\x94\x98\xc0G\xfc8Eb\xf4\xb7\x0748j*\xfc\xa6[3:\x97l\xf7\xd0\xbd\x1bC`0\x0f\x84\x98\x87\x9f\x0e)\xf3[v\xb0\xb9U\xb0p\xb5\x08\x06\xbd\xd4Q{;\xb8\x00\xf6\x9a\x94\x92\x84\x89\x0d{C\xbf\x91\xdd\x03}K\x84\xcf\x90\x99\x12\xdd=\xd4\xad\xde\xb9\xcf\xd0\xa1\xceQp\x9f\xa1\xc3\xe9?}\x86\xfeA}\x86(\xaf\x94\xbaO=\x1f\x9c\xb7\xe1\xfa[9\xa1\x1d\xea\xde%\xdc\xebdj\xf6:\xd9\xdb\xd5\x0f ;P\xfa\xf1\x0by\xedG\xfb\x81\x18\xe1o\xc9\x11\x93|\xb628\x06'k\xe4\x0dR\xd5\x8a9\xba\xc4n\x89\xe7\xa1\xa4\xe7\x81\x82\x0c\xc6\xb6\x86\xfd\xc0U_3z\xae\x8f\xc6\xe3\xa7\x93\xa3\xa3\xe9\xfe\xde\xd3\xbd\xf1\xd1\xd1\xa4-nx\xf2\x9f\xee\xd9\xf1\xf8~6\xd99\xba\xf8e\xfe\xbd\xf7/O\xfa\xd6\xc0\xa2\x86\xc1\x10>|:FZxk\xcb%\xd2U\x13\xfa\x13\xc2\xb2\x9f\xc8F\xae13v\xe3hg\xeb\x94\xf9\xee\xe7AI\x8a\x12u\xba\x88\xb1\x84\x0b?\xcb\xffy\xcaC\x97\x96\xf0\xac\xd7\xefd\xc8J\xf5\xad\x82\xed$Xb\xeft\x0c\xf7T\nu:\x08m6\x17\xc2\xec\x84\xd5r\x1e\xa2\xb7\xe1\xc9/\xc1\xfd/3\xf7\xecx\xf6\x9f\xb3_..\xbe\xbfwg\xcew\x17\x9e{v\xec\x9em\xfd2\xf1f\xff\xf9\xcb/\x17\xf7\xbf\xfc\x12x\xdf\x9f\xfd2\xf1~\xb9x\xd2\xbe9O\xfe\xf3\x97\xdb\xef\x1fu@\xb8\x7f_\xa3o\xde\xd2\xc2\xdf\x8bm\xe8>A\x8a9k\xaa\x90bu\xc1U\x96%$L\x9b\x12\xc5Ik\x0bY1z\xbe*q\x9c0\xbaX&\xff\x12_\x10\xb6Cq*d\x88\x1b\xa9\xf9j|\xd4\x96\xe42\xf15\xb9!).\x9d\xf2\x13I\x03!\xe1^\x85_~\x8a\x8b\x92\xa4$o**\x855\xb3/\x8d\xac=\x84|C\xd0\xd5\xd9Xlo\xcc\x04\xda\x9a-8\xedi8\x1bD4k[\x00\xda9L}H\x83Wt-_\xad\xe2\xb2D\xdb{,k\x10\\\xb3\xf2\\\x0d\xa1\xbe\xd5\x16\xbd\xa9\xc3\xa9\xe3\xb7\xea\xfb\x89\xf6}A\xf4\x1av\xa8a3\xd1\x06\x91\xc9\x18\xdd\xc3\x99.\xd7$\x9cH%c\xeduV0K\x8cN\xabm\xf3\xb9\xf2\xd50N\x0f\xea\x8c\xc8*\xee\x8e\xc8 )\x11,\x96\xcd1\x8f&(\x1fsW\xbb\x06\xbf=Pr\x81\xd0\x999M\xd4AwK\xae\x16\xe0k\xee4\xdf*gF.\xedr\xe1\x97i\xa2\xd2x|\x0e\xd9\x14\x97b^\x91!9[\xb0\xb0\x1fb\xf1\x0dY7\xe9\xec\x17\\f\xc7\x1d\xf4~N\xa3\xb0\xba^\x96>Ti\xb1&Q\xbc\x88\xc9\xbc\x9e\x1b\x0e-\x00\xf7;\x9e}\xd7\xf1L\x927\xd6\xdf\x82\xd9t|)\x99 \xefB\xa9\xf6\xd0Z\xe3\xac\xc9\"\xcaW`V^\xd8\xc1.\x83\xcb\xa9\xe75\x0e~\x9a\xed\xb9i\xc9\xba\xfc\xf8\xd2&G\xbfE\x9ah \x7f\xd2\xe5\xca'5\xea\xab\xfb\xb4y\x17\x16\x17r\x82\xde\xb8\xaa}\x92\xb7,\"\xdcD4\xdb\xf6\x91\xed\x84\x92=\xa0J\x813)\xb9\xadG\xbf\xcd2\xe8!\xdct\x1d\xe9\x8d\x83\x0c|\xee\x92@\x0c\x89\x92\xfc\xcd/$\x87}\xfd\xfa2\xae@\xbb\xd2\"\xcaaS\xc4\xc2\x06\x11\x91\x9aOn\xe0\x14fZ\x91\x0f\xe4\xc2X\x91\xf8\xa6\xcet\xb0J\xbb\xbb\x0d\xf3\x94\xcc\x81\xa5\x0b8\xa5\xc8\xbb\x85ZP\xdbjD\x9b\xc7\x06D\x84\xddT\"\xf6\xb0\xde\x1d\xb7)x\x0e\x15vi\x19\x0dsa\x88\xb2\xb4\xc8\x12\xc2\x80\xbf\xeb\xb8i6'\x1e\xd0*\x18>s\x9d\x15E|\x95\x10P\xc8\x84\x15Ye\xf9\x1d$$\xfc\x0csR\x92\xa8$\xf3\x00\xfeu\x0eI=\xeap>\xa7e?\x17\x04\x08\xfbJ\xc7\xf6\xae\x07e\x06q\x1a\xe5\x84\x02\x9b$^\xc5e\xe0\xb4\xb6\xb4\x89\x93j\xa4\xbf\xc4\xf8\xcb<\x8c\x90\x08U\n\\\x91\x0e\xc9v\x932\x14i\x98\xaf\x96^\xb3?\xf9\xf67\xbaY\x82\xc2\xa7(Hy!\xd1\x95&dS25\xd2*\xbb!b\x0et\x98\xb1\xc7\xe3\xbb#\xc2\xa3\x9bNT\xf0#\xa0Y+\x82\x92\xfcKXi57\x10o\x00\xf6\xc9\x96#\xeeYkud}kyS\xfb\x7fQB\xe9w\x81`\xd8\x8c\x0e\xbf\xf4\xcb\xdb\x11w5^\xb0\xfbl$$j\x0c\x901a\x1a\xddQ\xa1s\xcc\xddT\x02k\x94\xea\x97V\xf5\x14\x83\xbdr\xd9T\x0b\x16)\x90T[Q\x15\x98\xaa/\x19<\xd5\xe3-\xab\xb8\xd0p\xa4jlX\x9d@\xb8\xb3C!\x8e!&\x0d\xf0\xc5Hg\xe1E3K\xfa\xab\x99\x17\x9d\xa5R\xc0'\xda\xeeS\xf5\xdf\xc4\xfe\xab\xf6\"I\x86\xf1Vf]{\xebz\xf4\\\x85\xad\x8e97!\xecYf\x1c\xddm\xf3Lg\xf4Q \xa0\xe3\xdc\xed\xed\xce{\xd1\x1e\x92\xb97\xebA'\xe8D\xaf\xccX\xdf\x1en8 \xb6\xb0\xbd\xd0nGLs\xdb'z'\xda\xf9\xc1\xe5\xd0`+\x18y\x9a\xdc\xc2\xd3X0\x83\x1e\xee\xbe Oi\xa1\x8bO\xea\xbbqbotV\xdf\x99\x1dh\xf1\x1d|%\xba\xb6\xd1v\xa8\x93Ag\xd9D\x96\xb6i$\x16'I\xbf\xc6g-\xe2\xcf@\xf9 \x1a\x1f\x8eav\xd17\xd6\x97Y\x95v\x0b\x04tv\xdf\xa6\x1e!\xed\x8dm\x9f\xb3\xc68\x83/\x83!u&z\xee\xd4\x15\x84\x05j?\xbc\xd1\xb8\x11\xfb\x0c;\xc2\x85\xa9_\xf5\x0b 5q.\xcf\xc5!{\xbeO\x0e\x9fz^p^\xe6$\\q\xd7\xdd\xe0# \xe7\xe1\x15Z(\xe0\xef?s\xbfg\xf6\xc1\xe4)\xfa\x86\xfcX\xad\x13\xf2\x85\xa9C1MLP;\xf9\xb1zGS,\xfd\x10\x16\xc5\xa7e\x9eU\xd7K\xa6\xfb\xd8?\x1c\xa4\x83\xed\x0d\xd1d\x0ett#\x92\x99\xb9\x18\x07MyW\x93\x7f\x06\x95?h\xc7\xc4$$\x89\x0b\x8c\xb4\x02\xc2o\x83!\xa1\xb4\xcc\xef\xd4\xa2E\x9c\xc6\xc5\xb2\xcf\xc7\x87>[\x9dK\xa0?\xb5\x96\x8fujG\xed\xa52*{=\x0e\x93r\xa3NQ~\x84\xd6%\x0fD8({\xa3\x80\xfa\xdd5I\xe7qz\x1d]\xed\xecP6\x8f't\x81\x1cW\xd0\xfam\x9b\xf2\x10\x0f \xa2,\xffL\xe6\xdcc\xb5x\x9d\xa3]\xac\xa9XlRIy\\\xd3g\xa7\x86\x00\xa8\xf4y@\xb5\xb7\xc1V\xa8\xe3r\xcb\xb7i\xd5fCB\xee\xe4N\x82\xab<\xbb-\x18\xf12sn\xc6\xc1d\xec\xf8@\xff8\n\x9c\x8b:\xfaW\x13\x0f\x8cA\xc9\xb1\x0f\xfb\x1e\x8f!\xcd\xbci\xb2:\xda\x8f\xda\xdb\xaa\xbe\xa6\xe7e\x88Z\xd9\xeb\xf6pP\xc8\xe2\xee\xeby\x04\xa3 N\x97$\x8f9L\xd8\xd5\xd36\x08\xb1\xa3\xf9\x90\xcc\xc9:'QX\x92c\xbc\xdeO\x0d\x0b\xd8V\x85'\x1c\xfa\xe8z%\xfa\xac\x99\xc6i\xec\xf1\x906\xed\x1aK4\x81h\xf2\xa6(\xde[\x1e\xfcfH\x0c0\xf7\xe1\x86\xf7i\x07\x0cw\xf8\xb1\xe5\xe5\xb5\x114\x03\x97\xaf\x85H\xb23X\xc8N\x1f\xaaW\xda\xf7D\xdcb\"\x0b~\x0dt:\x82\x12\xa6\xe5x\x9b\xcd\xd1\\l\xab\x94\n|\x16V\xd7m\xd7\xd3K(W\xb6\xc5\xfc\xf1\xe8\xf9x_\xbf1PZ\xb5~5X\xc6\xd7\xcb?\x87%\xc9\xdf\x86\xf9\xe7\xf6\x16\xd0'\xc2\x8a\xa2\xdd\x7f\xef\xff`a\x18\xdd\x19L\x0e\xe0\x18&\x07\xbb\x87{\x96UP\x86\x02\\k\xcbh\xd3\x18\xce \x86c\xbe\x16Q\xf3\"\xa2\xe4H\x04\xc7\xb0\xf0\xcd\x8d\xc8\x19\x15[\xef\xbd\x06\x94\x87\xc9\xcb0I\x98\xc0g\xe2\x0b4@\xe6?\xe6a\x9c\xca\x85\x0c\xe2i%\xeaw\x0c3\xa8esR\x94yv\xc7\x0b\xcd;\x92\xe0;\x9e\xe7fN\xa2l\xce\xbd\xablxJ\xa9C?N\xea\xdePB&R\xc1\x00kP-\xbb\xbf\x07\xa7*\x17\x87B\x98$spX@w\\\x9b*\x03\xb3R\x9d\xe2.\x8d\xb8\xb8\x04\x7f_\xe1U\xfe\x90g\x11)\n\xed\xe3,E_\xd1N:O<[\xdd\x94\x92\xfc\xdc41Moe\xd8h>\x9b\xe2\xc9\x99 \xfa.\x8d\xba\xeb1\xf7f\x1cxteG\x87\x94\\\xec\x9f\x95xJ}mE\x07\x0d\x85Q3\x07\xe2\xee\x91\x84\xa4\xbe\xf4\xb7\xe2\x86\xa5?\x0f\x88\x8a\x89g =\xba#G\x8aggGB\xee>\x1a\xe0\xbb\x0dNrc\x1fr\xcf\x97\xb0\x94\xfb\x8as\xe4~k\x1f\x98\xd0\x94 E\x85<\xb5\xe4\\=\xd3_\xd1\xc60f\xbfO\xc5\x1b\xcf\xf3!\x91T\xc5\x83\xf6\xf4R\x05\x8aL\x8en\xdae\"\x1f{\n>\xa4\xbbQ\x89\x9f\x1c\x9e\xa3\xe6@\xc2\x8b\xe8\xbc$V\x8aBN\"0!K*\xc1\xde\xb8\xac\xf7\xe6\x9d\xdc\xcad\xd0l\xae\xa4\xd9\x98&\x91B_\xf4\x03\xf1\x88\xb8\xc6\x1c\x07moc\xf4QA\x0ca\xda\x9b6q\xc4!\xf2\x9c\x969\x06(\xfc\xe0\x96\"\x86\xa5\xc26\xe6n\x03\xbb\x07\xcd\xf3\xd6:vb\xa4?\x0c\xd9\xb4\x04\xcd@t\xd0a\x16\x04\xd5\xdb\x87\xf2y\xa6\x8a\xa0\x98\xcf\xb6~5\xf1o\x84Lv\x82#\x069\x92ln\x89\x02\x02\\\xeao\xe2z\xcd\x98(k$\x05\xe6\nu|\xad\x90\x81\xcd\x82\xad\x1b\xda!\xc7\xa8\xae`&O\x98^\x0e\x95d\x05\x0b\xea\xc6\xa3^\xe0j\xf8\x10\xc2\xe8\xd4$L\xa3\x0f\xc69e\x88\x00\xcd\x7f\xfd\xfa\xf6\xb1\x1bSg4\xf3\xc1q(i\xc1\x10\x80z^F#\xac\xda\x81R\x18IB\xc9\x15\x8bP \xe3c\xcdd)\x8fg\x17\"0<\xc1\xce\xad\x0d\xcf\xb4\xcfz\x17\x05!d\xc4\x9d\xf2\x98\x9a\x8f\x0f\xa2e\x95Z\x18-\xf1\xa0\xb1P \xd29v\xd7M@\xc4\xeb\xe9\x16\xf0\xd0s_\xef\xd0\x04!\x93\xc2\xcd\xc11D\xf5\xa6E>e\xc0\x12\xed8\x98\x17\x8c\xde\xf9\x1a`z\x1b)\xa8\xe8S\xbb\x88\x0b@d?\x0d}2\x1e\x90@\x86\xf2\xado\x81$\xc3\xe0\xf0\x97n\xff(\xc1Abtx%\xab\xb10ld\x85\xfa\xb8\xd0d\xa2\xe1-\xd9O\xbe\x8c\x83\xc6un\x85\x9b%G\xa7\x0d\x0bc\x95Pj\xc0\x1b7A'\xc6SviU\x1aN\"\xda\xeb7\x8e\x05\xf2\xd3\xe7a\x182xe\x9d\x94\x80\xf1_\xbatM\xec\x10\x0d\xe46\xd59\xdd\xdf\x03Q$\x07\x14,Z\x88\x17N\xad T\xd2\x80\x99&{\x18+\\\xd59\xe7\xaa\x90;\x1a\xb8\xa4]\xa8W \xf6\x86\xe6fw\xc8\xd2j\xd3\xa4/\xd9\x94C\xeb\"5\x92EJ\xf2R0p\xad:\x8a\xd4A\xab;e\xe55\x16*\x85\x00I\xbb\x03,\x98\xc8\xec\xe2\x04\xca\x13\x8fN\xa3*\x96,4 \x12\x82t\xd9\xac;\xadyy\xb7\x81d\xaf\x18\xdf\xee\x96J\x1f\xee\xe6\xc4\xfc\xd7\x84\x9b\x93{-{\xac;l:\x8e\xc9\xe5J~0\xcc\xe9\"\xa8%\xae\x9b\x05|\x97U{\xf5\xd2\xbbv\xde\x10\x18\xc7\xe7hL7\x1b+\xc4E#\xf9\xe5\x96JZ\xc5f{)wC\xc2y\xe0\xf8\xe0\xfc\xf8\xea\xc3x<\xde\xb5\xa4F\x83\xf6\x05\xaf\x8b\xed.\xbb\xf8\xda\xb5\xb1\x08\xdc\x13n{\x9b\xff\x15,\xc3\xe2\x0d\xe7\xb7\xc0\xe6\xd3\xf8\x9a\x97IQ\xc7\xda__\xd0\x8bK\xef\xc6\xb0\xda\xbe\xe5,\xac|\xc3\xc8:\xdc\xef\xfa\xe5I\xb5#\xcc\\66-\x1b~\x93\xde\xf6\x15\xf0T\xcd\xdb-\xc9\x8a\xcc\x8f^\xf7a\xcb\x07\x84B\xf3^\xf1]\xedG*5^\xb6\x94\xf2>\xac$\x10\xb1\x8e\xd7\xa4\x0f:0 \x80\x8ah\x9a\x1c\x8a/\xc34\xcdJ\xa0\x0d\xf9\x18\xa7>\xe7\xeaM\x9d\x15\xd1zn\x8b$\xed\x1a:$\xebY\xe4Y\x03cn&\xbb*\xc6\x1e\x19\xdfa\x80\xe4X\xa6\xab\xea\x84\xfb>\xac\x9b\\\xce9nh./\xe8\xd2\x8e\xd2B$\x0d\xd6J*h\x91\xd9|\xf0\x91Zc>\x01\xdd\xfb\x13\x80\xe7\x10\xb4\\A6\x81T\n\x0eM\xa90\xca\x17\xb0\xf0\xd3\x02\x00Rj\x1b\xd1%sr\xd5$\xd3j\xeb[R\xf0}\xd1\xfa\x9d\xe7C\xcc\xe5\xeeg\xc3p\xb7\xa0\x06\xa4#\xc3\xb6>\\\x94$\x07\x92\xcem\xc1*L\xd4\x8d\x84\xa2\xf1\xb0\x98V \xefb\xca\xc3^\xeb\x9c\xb7\x9dK\x07I=c\nZ\"\x9e\xca\xa2H\x00\x89\xb8iH\xe53\xe6\xa9\xa8\x06\xe8\x7f\x1b\xde\xe1Ua\x0b\x81\xb5\x11\xf4\x14PfP\xa0\xb1\x80cM\xd6\xdf\x04\x05a= 9\xa4\xaa\xa3\\C\x9f\"\xd7i\x9a\xa5;\xac\xd9'\x1c\xd3 \x9f\x83\xc1\xbf\xb9A\xae\xb6\xee\x95\xba\xee9+\x89\x05\x1f\x1a[\xf7 f2S\xe6\xe6\xe7\xc6*\x01V\x19\xee~-\x0d\xb2\xed\x0f\xdaq\xf5*\xf1MM\xf7!\xf0R\xd7\xe8\x19\xd5A`\x8e\xdd\xdf\xdc)~}\xb1\xc7\x1e\xe9\xb4\x91<\x92\x9f\x87\xda\x08\xc3\xdeP\x8e\x06_U}A)\x11\x19K\x17\x9e\x99\x05T\x16\x8co\xbd\x03!J9Z|g\xde\x99Y\xaa\x16[\x8d\xac\x86\x91\xb4\xed\x02$ \xd73 \xaaf\xd0\xfc\x1d3\xdd\xd7d_c\xcb\xba\xa0\x05Q-\x18\xc4\xeb\xc1\x04\x0c}\xe7&b#k\xb3\xb5\x1d\xfa\n\x0b\x17\xdc}\xd8\xf0\xc6\x1d\x83A\xf3.?B\xacp\x0cq\x8f\xaa\x8c\"\x1cc\x1c~\xf9\x11\x92\x07c\xee\x05\xf9\xa17\x9d9;\xdb\x8f&\x0b\xd2\x1f Q\x8ey\x19\x8e\x8dL\xbe\xb1\xaeU\xc83:\x85\x89\xf9\xf02I\x8f,) \x1b\xf8\xd1 \x9e\x8b.\x88\x152\xce\x0f/\xb0/\x85\x82\x836 CO\xd5 \xe2I#\xdc\xd9i\x1c\x8d\xba\xda\xae\xd2!\xad+<\x9b\xda\x8bA\xa7!4a\x0c\xc8\xb3\x1f;;\xbe\xa4\x15\xa5\xe4\xab\xa4/\x93\xa4\x1e\xf8\xcb\xa8=k\x0bL\x98\xf6\x8c\x93\xc4\x9dD`A\xca\x1f[\x1a\xf3nZ)\xb6\xa5A\x14\xa4V\x19\x94\xd9O\xd9-\xc9_\x86\x05\xf3\xb0\xd8rg\xce\x92|\xa1\xdc\x11\xd7\xbb\xd3\x7fw\xf0\x8f\xb0\x88\xe2\x98\xfeq\x15\xa7a~\x87\x7f\x85\x059\xd8\xc3ZQ1\xe5\xff\xeeL\xf9g\x93\x83\x84\x88\x16\xc4\xdfyx+\x19\x19\xb9,\xd3\xa2\xa7\x8d\x03\xad\x8cp0\xb59\xe2\x90\xbbm\x8d[\xc1,\xae\x9bt5\x12{@ \xccM\x98 )\x10\xf7\xf6\xb6\x1c\x98\x8e\xb1\xb8\xb5\x8eZ\xc8\xbcr\x19\xde\xe4\x8d \x8bP\x1e3\x10\x8774\x17\xb2Y\xcan)@g\xc8J\x01\"\xe2\xc6>h\\\x0b7\xfdZX]\xb7y&\xd3\xb2)\xd3\x04fiDj\xa1[\x07\xe9F\x1a\x93\xa3\xb1/\x99f\xb5E\xd4 !\x95\xbc\xc5\xa8\x0c\xbc\x82\xb5\xe9\x92\xf1\xdamt\xad\xe4\xdd2\xa8\xb6k\x0bt\x1d\xa0\xf0\x01\xb4\xe7\xd6\xbe\xe6\x852\x1e+\x9fk\xe9\xde\xed\xec\x9f\x9e\xe1~1\x89z\xd3\x1a%\xf7\x8d\xf8[\xbb\xa6U*\xd7\xa9\x7fi\xb5\x9a:\xbd\xfc.\x93\x94\xa4s\xd7\xf3\x81\xb4\"8\xfd\xa1\x19\xa9\x9a\x9b\x11\xb3\xe8\x1f\x8d=\x8a\x0e\xdf\xacVd\x1e\x87%\xd9$\xb5~\x7f\x0e6\xfb\xbe\xf0\x03\xd2\x1b=\xe2\x9b\x0c#u\xf7\x0e\xf7<\xd7\x833\xee\xbf\x8c\xc9\x13\xd1\xb0\xf5p\xff+\xa6z\xd3\x84o>2\x87R\x99\x9a\xd3\xc2\xed\xea\xc1\xc3*\x83k5G\xec\xedPC\xfc\x1275\xb5h\xee\xca\x07\x850\x8a\x0c\xaf\n\xf5M\xf4Uy\x02n\xea\x90\x0d\x0b\x1f4k\xf4\xb8\x95=\xa5\xb2\xf8V\xaa\xdf\xa1B \xc5\x00\xb6\xcc\x1b\xd8k\xfc\\\x17Z\x84\x05\x86#h)\x0bo\xb1\x10Y\n\x16\xf0\xfc\x14\xb3\x14D\xee\x82\xa7\xfc^\xc6\x8d\x93\xd3\x0eDn\xe1.<\xef\x04X\xe4-\x18\x8d\x0c\xea(\xb4\xf3\x91\xa5\xac<\xccP\xc2Q\xe3\x8c\\\xf8\x90\xbb\x89\x94\x02E\xc3\x8f\xbc\xb47\xd3\xfc\xa0\x93\xa6xH\xb4\xb0\x91\x10Tj\x03\x18F\xd4\x9aDo\x96\x14\x8fHa\n\xc2\xc4\xeeA\n\x12]\xa5\xbcx`R\x82\xeeA5\x07\x8b\xd6\xad\xf3\x8b\xb0P\xcc\x9f\xc8\x97\xf2]6'\xaec\xcb\x99\x92ah\x01\xdbx\xb4\xb0\xb8]\x029\x0b\xfb\xcd\x1d\x858\x82g\xcau\x16#\x9bX\xf1w\xb7u\xa1\x90.\xb1!v0\xfdp\xaai\xe5\xc4c\x96\xa8\xa0\xcb\x9aJNY\xe4\xb8i\xe3\xc3\x08u\xfa?V\x1f1x\xe9Zf\x86\x176\x0e\xe6a\x19b\x98\xc2S\x18\x8d2\xf8W\x982s\x07l-(\x96\xf1\xa2t1\x04\x05\x17\xbf\x08\xafkN\xe1\x95\x06m\xd5\x83\x17dW\x05\xc9o\xd0R\xca\xbcx\xd12\xcc\xc3\xa8$\xf9\x8fa\x19\xb6\x82\xfe\xb3V,\x16\xeb\xbd\xf4\x02}X\x9a\x17\x0cai&X\x99\x94{F|(/P\xec\xc0\x15\x94\xa8\xbde\x04\xb0iq\x86\x88\xc5\x1e|3\x1c\xb6^\xe3v\xe4$$p\xec\xaa\xb0&\xc1\xb4\xe4\xf6f\xf6B\xe9\xe8D\xdcO\xdaM\x9d.\xa8C\x8cj\x1c\xca\xdb\xaa\xc4\x84|\xef\xd9\x8e7~\xb1\xb1\xdbze\xbf\x95\xc6\xa6\xffL\xae\xfe#.;:\xb0Th\x1f%\x1bH1\xdf\xa8\xde\xe0\xbb\x80\x8c_\xee\xea\xa2\n\x00\x16\xb8\xd5\xd8lA\xcaO\xf1\x8ad\x15J;\x0c\xdb!U\x182\x80\xa6\xba\xcb\x0e\xfb\xd8<\x98\x96T\xeeA\xba\xb2\x83\xe8\xcaoBeY3h\x9a\xb2f\xaay1\xa7l\\\xfb\xd3}\xfe\xef\xc1\xc6y1;F'\xd2S\x1e\x9a\x92\x8d\xa1\x86\x8f\xa7'P\xc3\x0e\xe7\xdda\x87\xd5X\xe9\x96|WV\xc8 \x84t\xed\x0e\x92,\xc2\xc3~\xdcJaF\x9fe\\\x94Y~g~\x99\xadI\xaa\xb2\x7f\x86J\x98\xf2\xab\xb7\xd6\xeb8\xd1+\xd9\xe6\x0b\xe2\x86K\xf1\x82\x9b3\x7f\x8b\xc9\xcal\x89\xfa\xccV\x1cta\xd8wmxr\xc3\x1dFm\xda\xb8\xb4C\xc5\x9b\xd7\xf1\xde\x0c\x82P\xab=Im\x08\x13\xf3\xb0Ih\x15$\x82B\xbb3\x87\xae\x95\xe3\x83\xf3C\x92]\xd1\x7f_g\xf9\x8a\"=\xe7\xc2;\x01\x16\x16\x13\x13\xf3U\x08\xc0]\xcf\x0b\xe6YJ\x90\xc4E\x8dE\x07\x92\x13z\x97\x98\xe5\x10\xb4\x93\x1f!\xc4)_3\xc693;QV2\x0b/\x86`5,\x91\x0d>\xec\x0b\x93;\x8c\xee\xe0P`\xe0\xd0k\xcb\x0b]=\xc9@\xaf;\xbb$\x1eW\xcf\\\x9f\xb8@h\xd6\xe7>\xdc\xf8p\xe7\xc3\xb5\xde|\x81y\x0f}\x98\x1b\xdc\x92W>\\\xfap\xe5\xc3m/\xbb\x08\x82\x83Z\x83\x08\xb6\xfa\xa2\xc6\x05/\x8c\xf1 \xe8#\xc2\x15v2\x00\x18\xef\x8fe\xec1\x87\xe0k*1C\x8a\x8ej\xd0\xacf/\xfbi\xf8\x86R8i\xad\xdd\xea\xfc\xca\xe2\xfce,\xdddD\xc3Gb\x00vmt\xf9\x05\xbd\xa5G\xe0\xc0\x1bq\xa0\xdb\x95\xce\xe1\xb4^[\n&n\xdaU^Y\xd0\xf1\x0bT\xca5\x82\xedV\x85\xf7p\n/f fNz1s\xfe\xed\xdf\xea\x8b\x85E\xe8\xfc\xf1bvcH\x1a\xfd+\x05\x86L\xdfxc\xe00?S\"\x00\xce\xe0\x1c\xce\xe0\xd6uHZ\xe61)\x10\xa2\xfd\n\xf6\xd4uoX2\xb7<\xbc\xc3\xa9\"\xa2z\x11\xf0\xafio\xef\xdb\x14\xd1\x1bD\xc5W\xf4\x96\xb8o\x18\x19\x8e\"\x0e\xcf\xf3P\xea\xae\x8b\ni\xf5+\xa6>G\xcfj\xf7\xca\x87/>%\x11(\xba\xa5<\x85\x89\xed\xb8\xe2\xabT\xd1\xea\x89\x0fK\xcf\xf3\xe1\x9c\xb6\xf0\x1e\xe1\x8c\xd8 \xec1H\xc3\x15\x93\xad\xbf\xe2x\xfc\xd7\x81P\xe6\xbd\xd5\x9f\xcb\xe3n\xf1[L\xf7\x8bW}\xeb\x15\xdb 1\xb4\x178\xb4_=\x1f\xc2\x19\xa1\x94\xc9\xaf\xf4\xaf/\xf4\xaf\xa5\x0f7f\x11\xdf\xcaj4\xc1\xe6t\x8c\x9bHw\xed\xd6\x15\xd3\xb4\xc8\x14(\x988\x86\xbb\xa6\xba)\xd3\x97x\xf8\xae\x1e\x83A\xb1\xe8\x9bl3A\x90\x89\x97\x14\xc2\xad<\xc0\x7f_\xd0\xa9gt\xea\x97>\xacf\x97\xa6\xf0\xa2,|\x91\x1b\x07\x1f`\x04q\xf0\x1a\xbe\x07wM\xbf{\xe5!\xfc]\x99c\x11\xad\xea\xc2A8\xf7FJH9\xb5\xd0\x0f]\xdfC\x1d\xa7\xa7\xd4\xd2\xe4\xda\x08{\x01\xc1\x8d\xba\xb9\xae\x08\xb3:\xcc\xeb4\xd2\x12}7,\xae\x05\xe4\xb5\x17\xbe+ mk\x0c\x1d\xd6\x81`\x1c\x06\xfd`\xa3\x91X\xe2\xd6\x9aF\xd2\xe30n\x1c\x8c\xd5\x1f\xb9+\xce\xca\x10\xf4S\xf7\xc64\x08DV\x1fX\x9a\x1etb\xe5\x93\xb9\x95\xba\x93}\x16\xa54u\xa7G\x9e]B\xccG\xf3\x14\xb6N-\xcaT\x91\xda{\x1e\xdf8\x9e\x0fN\xf8\xf5j\xd4\xa7m \xa1\xce\xdc\x0b\xc2f\xf2\x1b\x92\xfbS35|\xf4?3\xdd\xa2\xaa\xf6\x9bn\x9a\x19\xa8\x95s\x98\xab\xf1\xcc\xf9A\xa6\x93}\xcf\xdd\xd2)uc&\xf9\xbeu\xb1\xc7\xfa\x0cyB\xc76\")\xda @\x813\x163\x8d\xec\xe5\x9a\xb58\x85\xd0\x83\x94\x1e\xde\x8a\xed_\x88K\xb1\xbd\x0d\x11\x13^\xeb\xc1\x0d\xb8\xf3\"i\xc2\xe7\x16'\x1e\xff\x8e\x12p\xb3b4b\xf1}\xdd\xff\xca\xdc\x08[\xbb\xbfoZ3#\x97h\xb3M\xed\xdd\x9f}s\xaa\xe8\xcel\xfe\x95A\x93\xda\xc5\xf7\x06\xd7\xa4\x94\xb2d\xabV\"\x96c]\x8a\xbd\xe3y+\x91\xc5\x9de\x176\xf9\xae\x9ae\x8b\xf33\x8dW\x85\xf2\xf6L\xfd-\xd1x\xc7\xeag\x9c!?\x83J\x97\xe4n\xb8\xf8\x87\xe6\xc5o%\xe4no\xc5?s\x14\xd7\x03\xee\xcbu\xf8?;G\xb1\xf5\xec\x98\x12/\xfd\xcf\xcd\xa5\xdf\xb9\xcd\xbc\xb7\xf6.+\x16\x8b\xee\x04\xb6\xc1\x04\xd5\xb5<\xb6\xee\xd4RO\xd8,\xd1:{\x96:\xe6\x8c\xb7\x9b\xeda\x9f4m\xb2{\xd0N@\xbf\xfb\xf4\x9f \xe8\xa5\xe7\x7f@\x02\xfa}sR\xc4\x01\x19q-\xe7\xbf\xae`\xb3\x9f\xa4}\xf3@\xe6\xcd\xbe\xc7\x14.\x99y\xe6\x82g\x016\xbf\xa5TOhu\x14\xe1c*DJ\x9c\x82ns\x84 \xd6x6s\x8e\x03\x8e\xc1\xc5\x08\xdb\x98D\xf1e6'/J\xb7\xf0\xe4\xee\x9d\xe7\xc3\xdd\x1f\xa4\xa2e\xe7t\xa5\xdd\x91?r\xf8\x15\xc0!\xa4\xee\xde\xc4s\x13\x0f-i\xbb\x1aK\x1a\xd7\xcb\n\x83\xf4\xfa0\x91\xcc\xae\x1f(eI\xf7\xe1&H\xb3\xdb\xde\xd6\xb0\x96\xb5\xa19\x86\xce\x16\x06\x99\x94\xa2\x9c{\x01\x05zS\x1fb\xfcc\x12d\xe9\x8a]68\xa5\xd4\x07\xc6\xcap\xb3`\x9d\x15%\xbf\x85\x08h&\x18\x81i\x11\x84\xf39&\x1a\x94Se\x197Cj\x00\xc9\xbcE\x10\xafh\x8f\xe7Q\x1e\xaf\xcb\x82\x8e\xac{j\x0by\x0c\xdc\xa1\xdc\x07\xe7{)\xac\x17\x85\x94\xad\x11\xb9\x0e\x9f\x90\x83\xe4\xd4\x16\x1b9\xed\xcb\xc9\xd2\x9c\x84\xf3\xbb\xa2\x0cK\x12-\xc3\xf4\x9a [\x1d\xb9N\x81\xa3r\xbcNK\xf5\"\x08\xd7k\x92\xce_.\xe3d\xeeJ_yA\xbb\xe5\xbe3,\x123\xb1\xc6J\x16MY\xdcS\xab2\xb9\xd3\x94Q\xb2\xa0oN\x84bG\x8f\x99>%\xc4\xd7\xfa\xfe\x18\xd6\x1af\xa0\xb0\xfa\x18\x9a\xecC\x9b\xd1)\xf6\xc1\x9a\x95\x0fVy5},\xce\xf5\xf4\xb996{\xee\xa8\xeb\xd8i\xd7\xda\xdb\xb5\xc5\x04\x9bv\xdd\xd7q\xcf\xeamJ\xe9\xb4\x0c29\xa53\x1ed\xed\xa2O\xbe1u\x89]\xe6YH\x14\xe5\x1e\xea\x9bl\x9e\x857<\xb6U\x16,ZQ\xc4\x05!\x8c9\xc5sRd\xc9\x0d\xf10\x9c-F\xb1[\xc5\x05y\xec\xc2\xb4V\x80-\xcc\x9e\x9d\x04\\\xd1\xad\xef'\x00M\xd4\x9f\xd9\x99\xb2\x0en&9\x963O+N\xdemmQ\x02\xcf\xf9H\xae_}Y#h\x8c\x15\x0f\x9bAS\xb6\xdf\xd6\xda5#u\xa7\x87:A\xd7\xb8v(\xf2\xffA]\xca\x12V\xe3*\xeb\x9dq\x03\x84\xa3\xde\xc5\xb5Q\xd7\x88\xa1\x02\xae\x1b\xc6\xa46\x1eW\x8f\xb12J\x16\xb5\xaeX\x85\x84\x9d\xba5\x15\xcf\xfb\xcb\xb2A\xb9yp\x0e#\xc8\x91Y\xce\xba\xf5\xbc\xf4\x90(\x85\x98\xbf\x9dk*}9|\xd4\xa054\xcb\xae\x89\xecr#\xc2\xb5\xf3}\xec[(\x14\x8e\xba\x8a2\x9d\xd8B\xa9\xf0\x80\x84\x14\x97@\x08Q\x12\x16\x05\x84\x85\xe2%\xfb\xbbLG\x93\xd2\x0bO\xa4\xc9\xbe\xe9\xc4|{W$\xe3Z\xb6\xc8\n\xfe\x02J\xab^\xbc&oS\x96\x1a<\xc5\x18]\\\x9d\x03\xe9h\xd4E\xe8\xe7h\x89\x92Z\x08\xfd\"\xd2\x84\xac\xa0s\x01\x0f\xad\xaeB\xf6\x89\xe4\x95\xbd\x95\x07\x0b\xce\x97\xb1\x80J\xe5\x8c\\l\xb8_\x8f\x03%8WJY\x1d\xea\x1a\xdf\x98\xbf\xda\x1dO\xf5W\x19\x7fE\xe1\x8f\x9c\x86\xb0F|\x86\xdc\xa4\xb5\x89 \x0b\xd4,\x83\xa5\xb2\x1b,iA5\xfe\xd0\xfek#\xf8d\xb9\xea\";\xc1\x163\xc27\x12=\xe7\x14:\x01\xf9\xb2\xceIQ`\xd6\xa4\xaa(\x81\xc4\xe5\x92\xe4p\xc5c\xccf\xb9D\x05\xb1`\xcd\x0e\x8c6\x86J\x1a\xb8\x935s\xccc6\x96\xaa3\x8eJ\xc2\x8d\xed\xe5\x94\xd8-\xd3jC\xa7\xf5\x0d\x0c\x08@\x07\xaa\x91\x96\x85\x95\xd5\xcc\xbd\x0c1,\xd4\xdd\xc6\xfb\xc8\xa8\x11\xb1\xc7g8\xfd\\\xa1CD\xb2\xa1K\\\x83\xcbKJ!}\x93\xfb\xa3\x1aX\xef\x8e\xbfM\xfc\xa4\x03\x93}`\xea\xee\x99\xedz'-\xc5\x12zMS\xe09f\xe1\x07\x0e&\x9eb\x906e\xe5\xbb\xe3\x03\xe3\xf5\x0cMc\x06a\x97\xb6\xce\xb3u\xd1\x845\xa4\x98\xaa\xe4\x01HyIN\x16\x05K\x0d\xc5B\xcc\xad\xe7a\x89\xf9\x0f0Nr&\xad{\xbb\xef\xe2\xef\xd8w\xa4\xba\xdd\x87r\xf4\xa9\xe2# \xa3\xf2e\xb6Zg)\xc1\xbc7\xbf=\xf8J\x95\x82\x94\"EY'\x90\x91\x88\x11%n\xa69\xf4\x90\x04x\xd8\x8f\xdcu\x0e\xf7\xeb\xec\xef|~\x01I\xffZ\x91\x8a\x9c\xf31\xd4V\x15\xbe\x94\x87^\xab\xfb\x92\x87\xa2\x15\x11\x9d|p\xc4\x14T\x01\xa7<\xc9E\x96G\xe4gl\xa8[\xb6f\xe8\xf0u\xf3\xad\x906\x96\x03\x07W\xfa\xe0H]\xab\xe3\x8b\x14\xd8\x17\xcap\xaeP^Qp\x1d)\x85\xaa\x94 \n\x1fb\xb7\x90\x1b\x90Z\xf3\xd4/\xe3\xe2C\x95\x93\xd6\xa9\xe0 D,\x8cB]\xf3\x18B\xf5\xca\xd2\xc6\xa4\xb7\xc5\xb7\x00N\xa9{ ;\xaf\x0b\xf8\xa2\xe1\xbc\xe2mV\xa5%\x99\xf7\xc5\x0d\x14\x14\xb5fc\xa9NC\xdb\xbe6ae\xae/\x1d\x0dm\x18\xe6\xfa\x1f\xc9: #\x16\xa0ph\x1f\xe2n\x18\xea7\x8bm\x86\xec\xf9\xe3\xf7@,\xba\x1c\xac\xfe\x1b7\xfd\xdb\xb7\x1f\xb5\xfd\x04GU\x9e\xe3 \xdd\xdcu\xa2{\x16\xc3\xb2\x9a,\x98#H\xf3\xcburz\x05\x03\xc2\xd4\xf8\x0e\xfa\xdb\x1c\x8c'\xe3\xdd\xdfuQ\x9c\xf3W/?\xbe\xfat\xf9\xe3\xfb\xcbw\xef?]~xq~~\xf9\xe9\xdf\xdf\x9c_\xbe\xffx\xf9\x97\xf7?_\xfe\xf9\xcdO?]\xfe\xf0\xea\xf2\xf5\x9b\x8f\xaf~t\x86\xf4\xa9Q\x12\xd3\x897L*\xd1\x17!\xafu\x97\xcd~z\x14\xfc7T\xb7\xd1I\x8f\xd3\x7f\xba17\xa6\xbb\xba&\x14\n\xae\xb2\xf4\xd5\x97\x92\xa4\x94\xf8-0\xca\xf85)\xb5\x12RD\xe1\x9a\xfcH\xc8\xfa\xa78\xfd\xfc!\xc4\xa4\xcb\x84;\xbb\xb5\x8a\x8be\x98$\xd9\xed\xab\xbfVa\xf2\x1f\xe4\xae\xe0i\x05\xe3d.\x82\xbe\xb0jY^\xb2\xccz$\xb8*3^H\xf28L\xe2\xbf\x91s\x12\xe6\x11ko\x1d\xe6\x85\xfc\xfb\x9a\x94\xe7\xe1j\x9d\x90\xf3hIV\xec;L\xd1\x10\x96\xe4C\x98\x87+\xad\xa4,I\x9e*eo\xe3\xf4'\x91;Z*\x0d\xbf\x18J\xffX\xc5s\xa5\xe0\xc7\xb0$\x9f\xe2\x15Q\n\x99%\x8cR\xf4C\x96%$T;~\x1d'\xeawo\xd2\x92\\#\xad\xd3\x94\xbd\xabVWZ\xd1\xdb8\x8dW\xd5J\x1fn]Fi\xac\x97K\x12}\xe6\xdf\xad\xc8*\x8b\xff\xc6\xba\x8a\x8b7\xabU%\x84~\xa6\xd0>\xe2:_Q\xd6p\xfa\xd4d\xbd\x1e\xd7\xaf\x8fL\xaf3\xfe\xfap\xcf\xf4\xb6\x12\x1f\xef\xee\x9a^\x87\xf5kc\xd7\x05\x7f\xcd9S\xf9\x15\x9d\xdc\xff=\x7f\xff\x8e\xeb\x00\xfa\xec\x19\xec\x9eK\xc2*\x816\xc6\xce\x9b1\xb9-p~\x93\x85\xa4kb\x97\x0d\x11P\x15*+X+\xc6Z\x9d\xf4\xa4\x93\xb2\xa1\xf4:\xedD\xbc\xb8\xeb] \xde\xc8+\x17C\xd6|qy\xe4\x9a2\xfb\xbf\xe7.\xb2]\xaa\xdfj\xdd\xc3\xff\xcf\xde\x9fw\xb7\x8d#\x0f\xa3\xf0\xff\xcf\xa7(\xeb\xc9/C\xb6i\xc5r\x96N\x9c(\x9et\xe2\xa4\xdd\xd9z\xb2\xf42\x8a\xc6\x87\x96 \x8b\x1d\x89TH\xd0\xb62\xf2\xfb\xd9\xdf\x83\x02@\x82$\x00\x82\x8e\xbbg~\xf7^\x9e\xd3\x1d\x8b\x0b\x96B\xa1P{\x85i\x1a\xae;t@E\xb3\xe8\xd8\xaa\xfe\x8d\xbd\xbc\xf70@v4nv4K\x93\xe5O\xef\xdf\xa6S\x92\x125\xef7PO\xab|g\xabr\xe1\x11c*S(VN\xb1\x84,\xe5\x92\xf4\xd9\xbe\xb4}Z\xc0\x8b\x94\x19x\xa3\x8c\xcf\x04oM\x8a\xa6\xde\x93/\x1e\xf1\xfb\xcbp\xe5Q\xccd\x1fe\x14g[\xbe\"\xa6\xf5:\\\x95oB#\xc6 +;D\xf1\xf4C\xe2$\xa2\x80b\x16\xab\x1b\xb8\xa0jV\x0d\x159\xdb\xef\xcf\xa2\x05%J<\xa3\xb1 \x91hA\xefD\xa3\x8d\xf9\xf3\xd9i\x7f\x18N\xe6e\xeb\xc6\x1c\x01\xd2*0J\xc7h\x0dM\xc78{O\xe4^\xd7X#\x9a%\xfe\x18\xc8\xe2$]\xe2 \xc2qn\x08\xef\x03\xa4\x13\xcfcW\xa4m\xc9\xe8\\\xf4\x14e\x05\xdd9\x14}\xe4X\xfd\xf8\x9a{\x91\x13qj\xb6\x8a\x9bu\x97\x10A%^\x87+\x17t2\xa2LJ\xa6\xf9D)\xf2g\xcb\xfdP]W\xe2\xb1\x95\xe5\xa6\x9df&\xd8\xcb\xa0\x12\xd1\x08\xca\x90\xdfa\x97\x7f\xd9\xa8\xcfD=\xabr\xbc\x06\xcb\x9cP\xf7Z\x0f\x84\xa8\xed@\x88D\xa5\xa7\xdd\x00\xf2\xf2n\x1c@\xd4 L\xd9:\xa3d\xf9a\x9e\xc7\x9f_G\xd3\xe9\x82\x9c\x87\xa9]\xe4\x07\x9d\xe5\xce\x04\x13\xd2\x9fJ\xf7I\xc1\x85\xe9K*@\x97Fu/7\xf4H\x86\x0f\x8cyKc\x8fz\xe8\xbfE\x9c$\x8b\xe9\xc3\x1e/_\x8f\xff\xa9\xaf\xe2\xbd\xf1h\x05\x07\xb8v\xb7\xe1\x00\xf6`\x1f!|\x0f\x0e\xe0\x8e\xf8\x9b\xdd\xbf\x0d\xfb\xb0}\xeb_^\xe8\x9dd4\x0d't\xb3\x88\xc2l\x13O7\xd2y{\xc3\xf6\xec&\xf3\x96\x9b\x8c\xa4\xd4?\xd8\xe44\xf17'^\x98\x91\x0d9\x8d\xe2M\x92,<\x12\xc6\xfe\xc1&%\xe1\xe7\xcd\x9a\x12\x7f3\xc1\xc7\xec\xc0\xd9\xcc\xc3t\x83\xf2\xedt\xb3\x08\xb3l\xb3Hb\xb2I\x96\xab\xc5&\x893\xbaIb\x1a\xc59\xf17S\xe2\x9d\xe4\xa7\xa7$\xddL\xa2e\xb8\xd8L\x16aJ63\x8f\xed\xf1\x0dI\xfd\x83M\x14Gt\xb3\xf0\xc8iH\xc9\x86P\xe2\x1f\xf8\x9bi\xb2\x99&\xf9\xc9\x82l\x887\x99'\x9bEv\x10\xcd6\x8b\x8cx\xd1\xcc?`\xf3\x88\xb3<%\x9b8_n\xceHL7\x17\xde\x84\xac\xe8\x86L6+\x0fS4o\x92\x94\xfa\x1bJ\xbcx\x9amPs\xb2Ic\xdf\xf7Y\xd7\x8b\x05\x9d\xa7I~:\xdf\x84\x8b\x8cl\xb0l\xf9b\xcd\x86r\xc1\xa6\x93\x84\xeck\x8f\x84\x939\x9b}D\x18\xd8\x92\xe5&\x8f'\x1e\xdb\xbdl\x80\xa7\x8b\xe4$\\lN\x13\x9alN\xf30\x9dn\"o\xb6Y\xae<\x8e\x03\xd9F\x19D\xecEt3Y\xe4S\xe2\x1d'\xf1\x84\xf8\x07\x9bE\xc4\xa0\x95\xd3\x8d\x14}6\xd4#\xe9,\x9c\x90\x0dI\xe3p\xe1\x1f\xf8\x07\x9b\xcc\xdf,\xbcpy2\x0d7\x84n\x92\xc9\xe7M\x12\x9f\xfa\x9b\xa5\x17M\xd2\x04I\xe0\x06\xf5L\x1b\xaeK\xf07o\xc27\x9b\xd8\x0b\x97$[\xb1\x96B\x1a\x9d\x91\x0d\xb9\xa0\x1br\xbe\x89\x16\x9b\x84n\xf2\xc5\xc2\xdf$\x1e\xb2E\x9b\x15\x8f\xaf\xdc\xa4\x9b\x9cn\xceH\x9aFS\xe2oV^8\xf9\x1c\x9e\x92M\x98\x86\xcbl\x93Fgl]\xd2\x84\x92 %\x0c\x104\x99$\x8bM~\xb2\x88&\xfe&\xf5\xc2\x88a\x8c\x17N\x93x\xb1f\x0b7\xdb\x9cF\x19%\xe9fEB\xba\xf9\x92Gi9\xefl\x92\x93\x0d\xd7\xb3mh\xba\xde0\xaa\xe8\xfb\x9b\xcc;Y\xb3\xc5\x0f\x17d\xba!\x8b\xd9f\x9e\xa4t\x13\x9d\xc6d\xba\x89\xbe\"xB\x1aM6\xa8\xd3\xd9\xa0\xa9a\x93\x9fp\x97\x84M\xbe\"\xe9f\x1dO\xe6i\x12G_\xc9t\x83\xb1\xc4>\x83\xe8r\xb5`\x83\x9f\x93x3\x8f\xb2\xcd\xf7|L\xd1\xce\x06\x87\x11^\xf3z\x8a\xf6\xcc)E\xfb\x14\xab\xfc\xa2AB\xefGR\xbc\xdc\xf4\x86\x99\x06Pw\x06\xae_X\x8b\x8c1\xa6\xd6\xb7N\xf1\xadA\xcb[K\xc6\xd3z\xa7\x01\xc4\"\x83\xc9\x00K\xede\x84za\x00k[\x81\xe2&*H\xa1c\xc9\x84\x8e\\: .1\x19\n\x0fq[\xea\xb9A\x0d\xb1hMU\xdb(\x9a([0\x11\xa7\xc2\x9b\x8d{\x87\x95\x84\xbe$U\xa3\x81\x86\xb8H%\\\xa3\x08J\x80\xf6\xb5l\x12.\x9e\x86\x19\x1b\xd6\x93\xea\x9d\xe7b\x90\xad\xa0\x91\xeaG\x8f\xf6Sn\xe8\xf7n}\xea\x8f\xfe\xd5\xbf5\xfe\xee\xc6-&J4K\x7f\x92~\x16\xc6\x11\x8d\xbe\x92\x8f\xe9\xa2\xb5\x87H\xad_\xabz\xdb0a\xadW\x8b7\xd2\xc9\xd6\x8abp\xa6\xf6\xeck\x8f\xe0SB\x9fL\x18\x97\xcf\xb0%M\x16\x8b(>}G\xb2U\x12g\xed\xd0\xa8\x9dd\xa5\xc2\xbf\x1fe\x8a\xf6_Q\x87\xb0\xa51i\x0c\xaa\xc7\x9e\xfe\xcdR\xbf4\x8b\xe2\xa9\xd7\xaa\xac\x91Wq\xc2e4Li\xf6kD\xe7^o\xafW\xe8#U\x15*\x83\x89\xd7\x9b\xf0\xdd\xc3\xad\xf6\xff\xbe\xf4K,lz\xfe\x01\x98+X\x15\xaa\x1d\xaf'\xba\xe8\x89\xc4\x9b\x1a;\x89\xa1\x8d\x14\x9d\xe64\xe3\xd27\xe2\x17\xca7a\xea*\xb3\xa4\xc5\"O\xa2Y+\xc7\x9aM\x9bx2%d\xb5X\xbf\xa7i\xb4zI\xd65~\xcd\x927\xecZX\xaab\x99[\x94\x81:\xa7L=\xb6ut\xbb\xafZ51\x99N]K\xb7\xd9\xa8\xe4\x8f\xf1q\xb1\xcd\xd4&5\xef5e\xf8\xbf\x19\xb05d\xb1\x86\xa3\x91\xc6\xe4dVh\xe3\x98b\xee\xa1\x17a=D\xd4*\x8a\xc8mv\x87 5<\xa1\x0c\x15o\xe8\xd3V_\x9aU\x90\x91\x86\xec!\x15s\xb1\xa3F\x86\xa2\xdd\xa6\x94\xe2\x80^)\x0c\xb9A-\xeb\xcdp\xddp\xa6\x18\xad\x16\xb4m\xc1)\xb7Z\x94\xd5\x8dMn\xf5P%\xbeU7_n\xdf\xd3T\x94+\x98\x9d6\x83d\x91o\xb1\xd9\x84iM\x18L\xc4g\x1a\xd2\x1f\xa3\x03\xc6\x87\xa4p\xeapX#\xfe\x8da\x8d\x94\xde\x8chR3\xfdU\xdfc\x9bb\"\xfd \xee5\xfc\xfa\xa1\xc8\xbaq\xfbN=<\x05D\xee\x0d\xf4\xb0\xb83\xd0}\xba\x92-\x7f\xbf\xab{\xaa\x0f\x89\xaf\x16_e\x0f\xcf*\x07\x89\n-\xa3\x05\x19\xb3\x16\xf4\xa3\x18\xf5\xe3\x99\x17\x97\x0c\xb8N\xb7\x02\xaa'\x809:\xd7m\xa3\xc1\x01(\"A\x84A\x13\x11\x16Z5\xf2\\.hm\x8d\x95t\xf1<\xc0C\x9c\xe2\xa7Q\x93\x18p\xfe\xad\x9f%K\xd5s\xa2\x8d\xddd\xbd\xac\x95a\x8eb\xc6[\x8db\x8d\xdd\xeb\xb2\xbe%\x9a'\xdf[\x83\xdfc\xeb\xfe\x80\"\x10\xf01\x94\x02T\xef\x97p\x91\x13\x1e\xe8uB`A\xb2\x0c\xe8<\x8cA\xb4\xdck\x8e\xb1\xb9;\xfe0\xf8gv\x18\xd3#\xf3\x98NQ\xe5\x9e\x8aa\xf1\xc6\x9d\x86\xf5Y\xefI\xda~Z\xa0\xa4y\xeb_;\x07\x9f\xa6\xdb\xde\xa7>\xfb\xc7?\x90\xb6\x01EN\xad\x0d4\x04\xc1\xf8\xb8\x0c\xee\xc8\xe0\xfa\xdamt\x0e\x83\x8a!\xe2\x8d;\x0d\xeb\xb5\xceE\xd7mLx*\xd5\xf2+\xd4\xbc\n\xcd\x90\x9bE\x0b\xe24\xc0\x0f\x06\xbfb\xb71\xf6h\x9a\x13N\x1aD\xccR\xb8\xc8\xd4\x1b[\xbb\xca\xdf\x03\xc9\xca\x9bF}\xc2\xbbw\x1a\xf8S\xbd\x8f\xb4\xdb\xb8\xf9`5\n\x1f\xf3\xd8\xc4\xcb.C\xfb\xd9\xe4\xd3\xed68^\xb1\x9f}V\xb8\x0b[VZ6\xef4\xb2w:\xf7s\xb7QIqO\n\x1b}\x9a\xbcJ\xceI\xfa4\xcc\x88\xe7\x07\xb0u\xeb_\xa3\x7f{\xe3\x83\xd1\xee\xce\x83pg6\xfe\xf7\xfd\xcb\x9d\xe2\xef;\x0e\x7f\x0f\xf6.G\xfe\xe5\xd8\x890\xb0\x91;M\xf8\x8d\xd1\x0b\xdf\x9d\x98\x96\xbc\x89\x1b\x9d\xe7]8\x0d\xef\x951t\xa0\xfb\xf0:\x90\xfc\x0e#|f\x08xp\x1e\xdf\x16O\xebpzx\x81\x1e\xc9\xb6\xa5\x9d%\x8bEr\x0e+\xd1I\x0f\xb6u.\xec\xd53\xbc\x19\x9e\xd1:\xb2\xabr\xb67oV~\x9b\xb9Z\x13\xc7\x8b\xac\x1eR\x9e\x93d\xba\x16je\xae`\x8c\xe2\x1ew\x93\xc7_h\xc8:\xbeX.z\xc7\xd0\xf9LyS\xb0\x1e\x867\x17\xe5\x9b<\xc9\x85\xfe\xb5U\xf9\xda,I\x97!5\xbd8\xaf\x8cQ\xec\x00\xc3\xbb\xd3\xca(\xed\xef\x9e\x95\xef\n\xc4\xad\xa7\x1e\x01\x01G\xeet\x950\xa67\xb2f\xe6\\3\x91\xbdT\xcc\x0d\x01\xbf\x8c\xf4\xfd\x83Pe\xf4B\x99\xe0[\xbc_\x15\x9ay\x82\x97H\x16\xd306u\xackJot\x94MN\x92<\xa6&-:\xbbN0\x9c\x8fq$\xcal\xccl\x8d\xb9!\xd4eH&\xa1l\xcb\x8bx\xa6\".\x96X\x06r\xc1\xbe/\xb5i\x95\xcfw[\xbf\xc6\x94\xf1\x92\xf9\xeb\xfe\xf9\xa1\xc1\xc8\x0e\xd2\x00\xd7\xd0B,\xcc\x9e|V\xed\xaa\x9bdvhp\x08\x90\x17O\xef\xad\xd7\x11G6u\xac\xbc\x94\x80\xa7\xc8\x0fD\x7f\xc6/\xda\xed\xcf\xf2\x92\xb4\x88\x1b\xb8{H\xf7 ;\xde\xf88y\\bq\xf6\xe1\xf1\x80c\xe9\xf9\x81\xa1\xfc8h\xf5\xb9 \xb6\xe3\x13F\xd2\xd7\x01\x9c\x16\xb5#0\xb5\xfd\xfb\x00\x0e\xc75\xe1\xd5:\xf6R\xdf\xa4}E\xa7\xe6\x07\xb1\xd4 \xf2\xcfe\xf9 9\xf7w\x82\xd6\xc3,\"\x8b)D\x19\xe6\x0fY\xa5\xc9Y4\xc5\x13@G\xb1e\xa3g\xb6\xc1\xb2\x89\x7f\x85!<\xf3\xa2\x00\xce,N _\xd1\xc4\xc1\xc7\xf3\xd5\xd5\xd9\x00\xc4\x10\xe6\xe5\xd6\x99\xb7\x8d\xe69\x0c\xe1\x0d\x1b\xcd\xdc2\x9a\xe7\xcah\x9ew\x1d\xcd\xb4m\x08\x1fa\x08\xaf\xd8\x10\xea\xa5E\xd4\xeb\xa32\x84\x8f]\x87\x10\x96\x00 \xdbF\xf3\x03\x0c\xe1-\x1bMh\x19\xcd\x0f\xcah~\xe8:\x9aY9\x9aY\xdbh\xbe\xc0\x10\xfe`\xa3\x99YF\xf3E\x19\xcd\x97\xae\xa3\xa9\x1e\x89m\xe3\xf9\xdd\xe2\xb7$/\xe4n\xbc\xdfQC\x1eR\xb2C\x99\x1c\x85\xcd\xaf\xe0\x00~\xf6P\x85\xd6\xcb\x99\xb0Q\xdc}\xc7\xef>\xe5D\xd4\xcc\x17\xc9K\xcc\xf6w\x93\x1bKIf\xab\x07[\xdb\xfc~\x85!|\xf0\"\x0b\xb0qv\xbfv\x18\xe3\xaf\xedc\xac\x1c\x9emC\xfc\x05\x86\xf0\xb9}\x88\xbft\x18\xe2/\xedC\xac\x9e\xd0mc| C8j\x1f\xe3\xcb\x0ec|\xd9>F\x95\xc1j\x1b\xe1\x8b\x96\xa1\x1d#\xf3S\xb0a.\x03}!y\xd6\xa3\xd8\x1b\xf5\"J\x96Y/\x00\xceg\x8f\xfd\x00\xa2\xa6\xa1\xbb\xcd\xd7\x03\x14\xc1\xaam\xdb\xb1\xab\x82I/\xd0I\x82!\x0b\x06\xabV\x97P><\x12\x0fU*\xf0\x02\x190\xf6\xf4)\x13*\x03ap\xe7\xeb`\x1f,\xbb\xa2xJ.\xf6\xa1\xc5g\x90]$M\x93t_\x13/\xa7^\x97\x96x\xb0v\x9cP\x18\xe46\x94\xb8\x01Cx\xdd\x8e\xb47\\pA\x00\xeb\x86+56\xda\xbd5\xfe+\xcdl\nvNI:\x1a}\xbb\xbb\xb1\xc6\xd2 \xc2/\xa8\xab\xd8\xdf0h\xe9\"\xa0\x19\xbco],\x17BwE\x8c\xf2]\xc4\xbd\xae.\x96\x0b\xdc\xb6\xf8\x17\x166\xb2\xad9\xd7\xf3\xb0o\x98\x94/\xbe\xfd\xf7e\xc0\xbe\xbfq#%3\xd5\x1d`\xbdBO\x18\xda\xc7}\xcd\xff\x14%WD\xb9'\xda\x0f\xa7S\xf4M\x0c\x17?\x97O\x0e\xe0o\x8f\x0eX\xe3g$\xcd\xa2$\x1e\xf6\x06\xfd\xdd\x1e\x90x\x92L\xa3\xf8t\xd8\xfb\xf8\xe1\xf9\xce\xfd\xde\xc1\xe3O\xb1pl\x87\xdf^\xbf\x02r\x81K\x0c\x13\x9e\xe2\xf7\x84\xc0)\x89I\x1aR2\x05\x1e\xa4\xf47\xa3\xff\x93\xbc\xa4!LL\xa7\x8f\xa9\xb1\xbd[\x9f\xde\x7f\xf7\xe9\x96\xf7\xe9\xfd\xb6\x7f\xe3\x96\x05\xd9K \xc2\x10\xa2\xd1\xa0\x19\x8c\x08F\xc6B1\x16\x9eJK\xed\xf4)\xea\xcb~{\xfd\xea\x90\xcf\x8d;\x93\xb8\xf8\x80\xb0\x89$\xc2\xc3\xa8l\x8fo\x82\xe7i\xb2\xe4\x1bA\xb4\xd7\x9c\x91T\x8a\x99$\xbb\xa4M\xb2K\xb0\xbcm\xcd\x13&)=a`_\xc9y\x06Pxi\xaaYP\xac\x8e_g\xa2\x0eI=\xa9\x92\xbc\xd8\x12\x94\xe2\xfc\"\x99\x84\xac\xa9~\x86\x8d\x1b\xf4K\xa5\xde\xd2\xb4\xb5z\xa8\xa47\xee\x11y\xf0\x90~\x96\x9fd4\xf5\x06\xbe\xac\x17tS\xa7\x8d\x01\xd5C=\x85(\x86\xd8\x87\xb8^>%\xe5\x8e\x8a\x18g8J\xc7\xb2\xc5!&[\x1bM\xc9$\x99\x92\x8f\xef\x8e\x8a,]^:\xda\x1d\xfbc,\xdd;@u\xa1\xf6\x9d\xc1\x98\xdbU{.\xf8$\xb7us\xcd\x9a\xd9l\xec\xb4\xd5h\x15_\x86+\x07\x7f6\xf19\x12\x83\xea\x8c\x88\x0f\xdb\xd0\x1b\xa2\xb6\xb6\xf9\xb4\x9a\x99T^\x97~\xff\x8f$\x8aqy\x9aS\x13\x19{\xec\x83\x92\xf3\xa9d\xdd\xa0\"n\x17K\xd5yD1W\x04\xd0\xcb\xe9l\xe7~\xcf\xf7\xcb\xbb\xbd\x930#\xf7\xee\xe8\xc6Pf\x10jv\x9d`\xb8Y\x94\xc4\xd9{|\xcb\xe4\xb5\x13.V\xf3\xb0%\x97\xacz\x154\\j\x13\xe7=\x1f\xb7\xd0\x02S\xc1\x85)\xf1\x88\xfa\xccpd\xeb7\xe6\x92\xd0y2\xbd\xf2h\xf8\xe7\xa6\xf1\xc8\xa7\xceLDs\x8c4<\xfd\xb3\xc0Y\x1b\xb2\xf3 5\x98Y\xcb4\xe5\xc6\xce\xe8\x9cT\x94\x8c\xeeQ\x0cF\xbd\x91\xf4\xe6\xa5F\x0f\x11\x85m\xe1\xa5oz\xe5\xdf\xa2\xcc\xd1(\x0e\xd8\x06\x0dt\xfb3\xf5K\x9f\xfa\xff\xd9\xdb\xbdu\x1a@o\xbb\xe7\x8f\xc5\xfe\xd4-\xa9\x91J\x11\xdb\xa6\xd6d\xee\xaa\xac\xa4\xc1\xb1\xa6P\x9a1\xc25- W\xac8\xe5\xb4\xb9\x8ct\xf2\x18\xa9\x8e\xbc\ns\xa9\x143\xa4's\"\xc0:\x8f[d\xcaT:&\xcc\xd9\x98\xd4(\x8d\x96\x9e\xb2H\x9f2\\\xa3c\xb4\xd8\xf4z\xb6\xe1\x1a\x92\xab9\x0d\x93\xc1\xec\xb8\x84\xd9\xd7\xa6{Y\xa0I\xe7\xe6\xd44m\xe6\x9b\xb0\xecd\xf1\xd1\xad\x7f]\xec\x14\xccu\xeb\xb2\x05\xc6\x14t\x7f\xe6\x08\x85\xfdgS\xd8\x976\x85\xf5h#\xecb\x1ba\xf5r\x9f\xca\xff)\x1f\xf0\x94\xdfl\xa7x\xf7\xee\xfb\xfd\x1f\xf2\xd9\x8c\x08\x7fq[\xf5\xa3\xb3\"sSq\xf2\x95x\xa2\xa6\x19\xacX\x8c\xc0%S|o\xc49U\xfe\xe9\x18\x91:nT\x8cr\xca\x06\x89\x94\xae\x1cWjcD\xf59\x0eAaO\xf9T\x94d\xbc\x8bhBL^\x97\xc4\xb8\xbc<\xa4\xaa\x9aL[\xe4K\xe4\x14@-1\xe1c)+S.\xd9zZr\xfdP\xecx\x99\x97\xbe\xaf/\x9b%\xb9\xf4-\xa6\xd6\x16\xc3\xb2\xc5\x17\xae-F\xd6\x16\xb3\xb2\xc5\x1b\xae-&\xed\xb3\xbey\x13\xb6&e\xd3?\xba6\xadI-\xaf4\xbd\xe5mQ.\x87\x8f\x16c\xb7\x06C\xd7\x06\xeb\x898L\x0df\xae\x0d\xce\x1d\x1b\x9c\xb4\xaf\xf8f\x83\xdd:57s\x1d\xdf\xb41>\xf5\x17\xf1R^\x83\x85x\x91\xfc#\xe1\x7f\xc4\x8a3+\xcf\xd5\xcd\xee\xbc$kL\xcf\x17\x8a\x17\xe2)\xb9\xc0\x1b\x19\xbf\xf1$\xcb\x92I\x84\x99!\x00s\xb8\xc4e\x00\x1c`x~\xdc\x97m\xb0\xae\xfbe\x0bl\x00\xfd\xf7\x04k84\xe9\x07\xa6\x19\xf8\xfb\xdf\x8f\x8f\x8f^\xbf\xfe\xf8\xe1\xc9\x0f\xaf\x0e\x8f\x8f>\x1c\xbe\xc3?\x8e\xff\xfew\x8dji\xd5\xfc\xe2\xe5\xe1\xef\x87\xcf\x0c\xaf\xcf5\x1d\xbcyv\xf8\x9b\xf1\x83i\xf3\x83\xb7\xef\x9e\x1d\xbe3~p\x06C\xb8\xdb\xbc\xbd\x86!\x0c\xe0\xd1#]\xb5\xf3S\x18\xc2\x1av@\x93\xaa\x7fi\x90\xf7\x8f\xed5\xae\xf7\xeb\x89$A\xcf\xf9\x9f\\\xa5\x19\x13-?o9\xd8\xb9q\x18\x0b\xbb;\x92\xe4\x0b}\x8bT\x1c\x0dE\x83\xbbn\xdb\xe9=O*\xaf\x7fxh9\x89D\x84\x9bF\xaf^\xa9\x0e%\x0bH{\x98x\\\xa88w\xb0JH*r\x9e\xcb\x94\x05<\xd3\xc6\xeeCLw\x11?\x84h{\xdb\x87t\x14\xf1$\x89\x11\x13\xe8\xcd\xee\xf5\xa9\xd3l\xed\x01\x0d\xaa;:\x06\xa2\n\x98f<\\\x82\xf6\x8f\x8fy\xe9|\xe2\xfd\xc1OW\xf6\xc4\xa9\xe3\xb7\xd6Tb\x85\xf5A)\xe9a\x13\xc1P\xb9\x04\x8f\x1f?6\x995\x84\x92j\x1bb\x11C\xbd\xd9\xc0\x9d\xbd\x07w\x1e\xdc\xfb~\xef\xc1]\x9ca\x19\x99\xf8&|\xa3o\x85MZ\x93\x92\xcf\x04>\"\xcax#\x90\xb7Q\xf1\xe1\x06\x9c?l\xc5\xf2\xeb\xf9\x9c\x0dm|v\x90\xda<\x19jP\x16\x9d\xde\x92Q\x91\x14\x1e\x0da'\xae\x14,\x1cJ\xd0\xd5_&\xf0xXW\xc0\x9a\x06v\xd4\x96\xbd\xf1\x83\x18\xb9\xe3\x86}\xed\xda^\xbd\xaa\x8f\xa1\xbd\x0f\x0e\x80\xab\xc5i\xc4\x986\x97/\xb6\xba\xbf l\x03\x1a\xc5j\xb1\xb4\x8cC\x92\xe5\xe2\x99\xbc`\xac\xde\n\x02\xbf\x9f6\xabT\x83pd\xd6\x9c\x07\xef`\x08{\xcd\xdbo\x9c\xb3\xb6\xf3M\x9d\xa4\xcd6^\xf1\x93N\xbe\xa09\xda\x9e\xc1\x10\xde0\x1cye:\x02\xbe\x1a\x08\xf6<\xca0\xbb\x8833\xfe\\\xae\x94!\x99\xa7\xb4Z\x94\x0b\xc5\xb6\xe0\xa0\xb2l#\xf6\xbd\x85\x8a\xc2\x01\xa4\xc5\x19\x12\x89\xb2\xc0\xd6\xd3\xd0\xe0\x078Mb\xd3\x89\xebH\xab?\xda\xa8\x82uH\x1c\xfd\xac\xe3j\xad\xdcc\x18\xd4\x0fv\xees\xebWW6\xf6\x8b\x9d1\x00S\xd5h\x8a8\xe3\xd4\xc5\xefv5\xe0\xaf\xda\xf4\x1d\x05-\xe7Un\xb5\xc5\x96\xf5\xdd\xfdj\xef\x8e3(o\x90\xd6\x8e\xde`\xedR:ze\xcaM\xa4\x9d\xbb\x92\xb7\xdaiD\xbf8\xc0X\x13\xcc,\xb8\x14\xa7.^Z\xbb(\x92\x01\xa8G\x8e\xdc\x8e \xcf\x95-\x85\xe8>M0]\x83\xb5\x80\xb5\xbc$P\xd1y\xbd\x12\x167\xac\xd5\xe6!\xe7@\xa85\xc3\xfb\x96\xa9^\xd8\xe1\xc5\n3\xd3q\x06\x0d\x92\x14\")\x15 5K2\xe3[.\x0b\xd8\xd3\xcf(\xdd\xf0G\xfb\xe8.o\xeaV\xbb\x8a\xecj\xa6\x083\xc0\xfd\xc5\xb7\xc1\xbdO\x13\x94\xc5$\xc4\xc5\"\x84\xcd\xb5\xa0\x98\x9f\xfd0\xa6\xe9\xbax\x99\xba\x8e\xf2\xc6\xb7\x8dR30\xa2\x0e\x84\x8dSH\x91\xf2V\xe8<\xb6\x1f\xadc\xf3\xbe}pr4h\xe0\"\x14\xef\xd7F\xa6\xfe\xfa\xaa\xa8\xaa\xa8&\x1f\x81e\xb0\xbd\xd1\x918\xa0\xc75\x05t\x00_\xfb/\x0f\x7f\x7f\x0fCx\xca\xfe\xfe\xe5\xc9\xab\x8f\x87\xec\xd7\xcf\xec\xd7\xe1\x9b\x0f\xef\x8e\xf0\xe7\xbb\xa0\xd2\x7f\x14g+\x9e\xed\xbc6\xaa$O\xab\x99\xb9m\xf4\x85\x1d\xf0\xe6\xdc\x0bJ\xcb\xa3g\xe3\x0em\xd6\x1b\"\xdeK\xae\xb7x\xd9Of\x8e\xed\xbc\xf4\n'\x92\xc6\xc0^V\xa7L\xbe8\xb6\xa9\x1b\xdb\xcb\xab/*\x82\xef\xf8\xb84\x8e\xb2\x91\xfc\xbb\x17@\xef\xb2i\xcfQ\xfb\x99\x84\x939yG\xb2\x962\xc7JW[\xbc/\xfc\x10d\xc5\xafB\xd6\xfb\x18\xe3\x83)\x17\x06\x957\x87\xfc\xc5\x12\xeb\xcb\x8a\x0f\xa2\xfc\x99\x14\x1c\xcb\x8f\xc4\xd9\"^\xb0M\xa3\xe8\xdf%\x86HLdB\xcb\x82d\xbc\x02\xa8K\x0f\x89S\x00\xbe\xe8b\xd6\xda\x05\xf1^\x04\xf0\xd2\x0f\xe0Ee\xf1%\xbdu\\\x13=\xa6\xdf\xe0-\xdfp\xc7\xf4\x1b\x16L\xbfQ\x19`II\x1d\x9b\xd6\x0d\xf1\xc65#\xfc\x88!\xfc\xb8\x89\xf07\xae\x19S\xea\xb5\xdd\xf5=|\x13\xa64\xbb \xde\x8f|=\x7ft_\xcf\x1f-\xeb\xf9c\x8dr\xd1o[\xcb\x97\xfd(\xe3-D\x94\xfd\x92\xda[\x86\xdeB]\xcb\xc6\xaf(ro4\xb5\xb7?\x05\xf0\xcf\x00~\x0b\xe0\x1fM\xa5\xe9\xfb\xc3\x7f\xa0\xc2\xd4$9Rj\x11\x1d\x8fCQ+\x83\xd6\x88M\x17\xf6\x95\x18z\x90\xfc\xa50.}&\xebL\xcbC\xf2\x91$\xb26\x88\x1c\xca\xf1gQ\x0b\xab:4\xd2eh\xb1u\xf2Q\xa9\x9f7\xcc\x9f{\x16:+\xe8\xd2\xf6\xee\x84\xe1,\xa8\xdd{*\x0e\x83zm\x1fCG\x91\xa1#y\x16\x95\x06\x8c\x7f8\x1aX\x90\x1b36\xf8\x13k\xcd\xfbI\xe8Z)\xf5F\xe3Ff\x16}\xbby\x0brh\xd2\xe0\x88.\xa8\xdf\xe4\x9a\xbf\x94o\xa4\xfa7~(\xdf\x88\xf5oh\xa5\x9c\x83R\xc8)TOf\xcf\xbe\xabK:\xa3\xcf\x01\x9c\x8dAd\x8a\xed \xf1t\x92Y\xc3\x16\xa0gza\xee\xdb\xa7\xc7\x05\xb9k\x9aEfG\xf2_j\xd8\xa2A\x0f\x0d>\x14\xab\xeb4\x04v\xc29\xa9\xcb\xa8`\xcd\xf4@\x8dL\"xa\xe5H\xd8\x01QZ6\x06\x01\x864\xef>\x84\x1c\x1e\x0d!y\x08\xf9\xf6\xb6\xa9\x11\x10\xe3\x08\xd1S8f\xa2\x15\xec@\xced+\x83\x7f\x15\xc8\xc5\xe6z=\xe2\x85\xa3\xc18@\xc5]8\xda\x1d\xb3/\x03P\x02\xdas\xd8\x86\xa6\x12\x0e\x1a\xe2\x97\xbc\xe4g\x8d\x87\x96\x04s\x0dV\x99g\x83tZ\xa6\xd9\x9f\xbcL\xda\x152B\x96\xaf\x9c\x0d0\x0c\x1b\xbfzV\x96B^\xd2\xf9\xc3}a%\xf0\xb7\xb7\xe11:W\x9b\x1b\x077u\xa7\xbc\x8cjOy]\xc2>\xc7\xcc\xb9P\x1f\xa9i8s\xfbp\xa4E\xbe\xe2w5\x94r}\x8e\xf4z\xa8\xe9\x93j\xbe,\x03\xb8\x05\xbb\x85?\x8b\xf0{\xf1\x03\x89\xce\xf2C\xdb\xc1\xf6\xcfbh\xff\xd4#\xce?\x85\xcd\xa0e\xab\x99\xa0u\xda\x02-\xaa\xaa \xb8\x8a\xc0\xd1WhIm\xceB\xfa\xa5X\xd6\x96BiC\xbf\x1a\xa7\xd4\x13\xaeV\x01\xf4\x9e\xf2(\xde\x8c\x92\x15\x84\xf0.\x8cO \x9c\xaca\x17\x83\x1eAX'w\x83\xea*\xc9\xba#\xb8V~\xa0$\x01\xe0\x9eo\xa2\x1a#.ax\x92\xa1\xeb!\x81G\x82cco\xef\xc4\xd2\x84s\x8c\xc5\"T\xbd\x1f\x89\xa7\x8aj\xf3\x18\x87\x86\x83U\xb1FE\x0f\xfc{B\xa2\x85\xe7\x11\xd8a\x04\xf8\x16\xc4L\xb4\xf2\x99l\xde\x0dw~+`\xf9\x9b\x1ew~\xfb6\xdc9\xd6\xeb\x129\xbe(*\xa5'\xa2\xfaa\xdd2ah\xf6\x84\xda\xdcL\xcf\xadO/\xc4S\xf5\xa1b\xc6\x1a\xfdc,\n\x01\x11\x8f\xd2\x00n\xb0\x95S\xe3\x1eN\x89SIW\xc9\xb5\xb3U`\xe4\x91\xdb\xb4KM\xfb\xe8\xad4g\xf8c]\x05\xf3J\x9f\x9dL2\x15\x7fY\xa5G\xe1![Q-\x95\x1e\xb2CH\xb9\x8b\xac\x11W\x84\x8a\x88z\xf1\x88Q\xae\x14v\xd0\xa3+\x1a\xa3\xf0\xc7:*wf\xc4P\xd1H\xb5\x1bu\x1d\xb4\x93u\xb3\x0e\xe9&\xaa\x9dBc\xf2\xfa\x89\xea56\xdd\xb45\x05\x10\x1e\xa3\xfa\xc3\xc6\x819i\\\xac\xda\x16\xaei\xa1\\\x02/Wf{\x9b\xad\xcd\xf6\xb6C\x14 CuB\x03x\xc1\xe8\xd6\xd5Q\xbd\xee\xe5\xaaC}\xae\x1f\x1eQ-\xcaW\xfa\x9e\x87\xee\xf1lJ\xd3\xf5(wM}\xa2\xeb\xdcX\xbcS\xbe\xb3JSU \xd8ju\xa7%|\xa7%l\xa7E\x0f!1+q\xcfDY\xbc\x14\x173\x82\x1dH`\x1f\x12\x83\x9e\xaf\xb63\xf31V!\xae\xee\xc6D\xab\xb45\n\xa3\xcd\x14\n\xd7\xb5=\x05\xb8\x8c\xfbS\x01\xa1qw\xa6\xad{8\xb9\x8e=\xdcm\x15$\xe4P\xd3\x1a\xfdu{>g{>w\xdb\xe3\xca\"\x8e\xa6\xe5!\x17\x8bC.\xd6\xee\x8b\xc2[\xc5a\xad\x19*\x96\x121\xaeeEhR\x84\x0c\x03\xf7,\xb1\xe5w\xafj\x96\xb5\xd4\xb02\xe8$\xbex\xb1A\x06-vq\xf4\x10\xb6\xbc\x08O\x05\xb5*#(\xb9\xbc\xbdHT]\x84t{[\xec*]\xfdR1\xe5F\x8e -LK}\xf5\xb5\x025I;C\xd5\xa0\xce\xf9\xa2j\x89\xf9v\xf9hh\xd6\xb0\x02\xdd\xb7\x1aQ\xd6\xa1E\xcb\x81\x8b\xc4\x9d\xd1q\x0f\xe0\xd2\x08\x15\x9e\xd3F\xf0R\x81\xf2\xe9\x7f\x01\xcaW\xea\xc8\x17$\xb0\x08!\xe0\xb6\xaa\xa6\x83\x80z\xa0\x14\xc6\xa8\x87\x0e\xcc[4J\xc6\x01#T\x8dC\xc206\xb6KbEK\xc4w\x89\xb1\xf2\xbc\xa4\x9b\xb1M\x9b\x84&\xb6Q2\xe6\xe1\x90\xc5\xd8\xf2\xea\xc0NR\x12~n.\xa8 \xdb\x1a\xc7\x96vy\xffc\xbb\xaf\xb6\xb0F\x82\xa6[l=\x10\xafc\xef\xe1J\xc0\xe3\xf2XmS\x18\xb6oT\x90p\xe3En\x8b\x8dkQ,\xf2\xa0<\xb1\x87\xb5\xafY\xad\xcb\x92\xfdMG\xee\x0c\xefZ\xd0\x805\xbd\xba\x8b]M\xd0\x86\x03\xe8\xbd#+\x12R\x18\x8d{\xb0_\xfe\xe2^\x10\x8aZh\x1bz\xe5=\xfc\x96\xdd\xa1\xd1\x92d\xd0t:^_\x9d)\xd71\xe1|\x08\x1a\x06\xbc\xd2\x8f\xac\xf4\xe3\xca\x85O\xa9\xaa\xf8jFe\xd5\x9a\xc7\x94\x05.\x13\xa9\xec\x1f\x06*#\xca+1{|\xaa\"U\xd2\xba6\xb2\xd7\xa2\xba\xe4\x0e\x0f\xa6\xab3\n\xf5\x91\xa6\xe4\x8c\xa4Y\x177\xed\x16\xb8N\xc9\xc5\xdb\xd9\xd5\xc1\n\x07\xa81\xdc\x19X\xbbY\x84\x19=\xba\x86\xaeJ\x0cm\xed\xf2\xea\xc2\xd4\xeeC\x88\xe1\x91\xb2\xc4\x10;i\"*\xc3\x8d\xeb'ZlUB\xc4Ns\xe9.\xe5tbU\xbb\x11k\xc9f\xc2#\x88%\xc5)Y\xa0X@\xc27\xd6\xd9\x83\xeb\x12?\x1c(l\x05\x9a\xc2H\xe9\x88\x87\xb4\xaaz\x87\x83&f*S=k\xda\xfb\x19}_\n\xfa\xbe\xbcf\xfa\x8e*cI\xde\xf9\x0f\x85\xbas\xed\xee6\xf4\xfa\xfd~y\x97\xc4S\xd8\x06O\x08\x15\xf3B\xcd{\x00=8YW>'+\xcc{\x84I\xe74'\xc1\xf2zO\x029\xdcR\x17 \xdfU\x87\xd28#\x96W:#$\xe7\xe0Q\xd8Q\xfb\xf6\xe1\x96\xd2\x9fq\x7f`\x80\xf4.7\xc8+d\x82\xdf`k\x84:\xf1\xd9\"\xd1\xd8\x1ejCv>wj\x87J\xd1\xa9r\xb8\xa0K\x01\x9e!\xe5\xd3\x80\xdb\n\xf0\x8c)\xef\xfa\xf0hX\xf8\x96.\xa9\xb7\x1b\xc0\xae/\x8e\xa7\xa5@\xeeSB=\xd5* M\x06\xec>\xd1\xdcG\x905\xcf\xae\xe5U\x0e\x9b\xb3\"\xaa\xb2\xb2B\x0d\x85/\x18\x031.\xc3\x1c\xd4r\x07V\x87\x03\xe1Z\x89N\x96\xece\xeeSa\x19((x\xba\x0b\x1b\x93s\x14\x1e\xa1qY\x8d\xd3\x8b\xe1_C5G\xd1w@\xfd\x87\x0c1\x94\x9b\x0f}\xc0\xd7(\xdcR\xdf\xb5\x12\xdcC\xea9\xa5J\x8f\xea%]\x145b\x99\x9a\xffg\xaax\x99\xeb1\x0d\x94UxEG\xd4\x9e(\xb7\xea\xb1\xf2\x96ao\x00o8\xac\xdf\x89\x9c\x19\x14\xd3\xe1\xc0+\x9e\xe8\x1c\x9f3*\x8e\x8d\xb3\x83\xef*Y\x16`\x9fw\xd6 \xc7\xe7a6\x7f\x9aLU\xc8\xc8[:\xe5bT\xaf\nV~\xe8\x08B3\xe3\xf9\x9a\xd6\\M\x11~G\xdccM\xadPji\xa3\xfe5\x1d=\xa5c\xa7/\xb7>\x1b\xc7\x0d\xa6\xc6\xfb\xa2\xea\xc1\xfa(;\x8c\xf3\xa5\x08\xc0Bw8\xdd\x13\xa7\xb1\x98:k\x07\xaf\xfa\xb5p\x98\x8c\x93)\xf9\xb0^\x11@\xd2\x9e\x9dG\xbc\xfeYq\xbf\xad)vM\xc2\x8c\xc0`\xbf\xf5=Ph\x7f?\x8f\xa3/99zf\x9e\xa3\xbc\xb0\xf9\x07\x1d\x9b\x9f&\x13\x0c\x18>\\\x10\xf6\x0f\x9fl\xedf1\x06k\xd3z\xa56\x88-\xa5\xac\x96\xf6=\xfd\xd7l\xb9\xb6\xb7?\xd0@=\xfan\xc2\x07\xbe\xf7?\xe0\xde\xb7\x84\x88\xbc\xa6>\xc3\xfa\x8c\x18=\x1c\xc1\xc1\xd1\xb5\x8aB\x7f\xc8\xfa\xc8C\xfc\x81.\xcfu\x8f\xc1\xde\x9b$\xde!<\x95q\x19H\x98A\x98\x12,\xfa\x86\xd9\xb5\xc9\x14\xc2\x0c>\x93u\xd67\xd5=\x90\xdd\xb3\x0d%\xa2\x8dy9\x89\xd2#$\x80\xa7\xd4\x14W\"/R\xec\x9b}\xd8\xb2\x04x\xb1k\x92\xc4\xb3\xe84w|\xfb<\x8d\xa8\xdb\x9b\x82O\xd7/>\x80\xb9\xa4\x1e\xa8\xe5\x0d+N\xf5\xddH\x86`\x93\x95H\x12\x85\x83\xd7}\xe0\x1b\x1b\xb2\xab\xdb\xd4K\x95\xb5\xdd{\xee\x87\xab\xd5b-\xd8xCD\xbfz]\x06\x162\xc9\xce\xc0\x16\xc8\xb6\x13\xc1\x8aSzI\xf2\x1ax\xff1F\x08\xd1\x042B!\x84\x98\xed\x83\x12rr\x8c\x90\xc4bOXQ\x9f]T\xce\xc1<\xfb\x0e\xf4\xc4z\xeaw:\xed\xa5\xf2\xb5 k\x8caP2\xdah\xf3\x01\xd4\xa0\xc5\xcb)\xb3&y\xfddT\x93\x96\xa5y\x18\xf7@\xa6}G/\xd2\xb7\x06\xde\xbeP\xc7\x10\xce(\xa9\x16\niiG\x03\x05\xbep{\x00\xdf\xf1T\x85\xfd\xc9\x829\xf3Ld\x15\x16\xd6\x97)\xdc\xbdu\x9d\x11\xfcW6_r\x85\xa7\x92\x01\xeau\xb82\xa6<\xfb\xfa\x8d\x96\xc5\xe34IJ\xcd,\xfb\x81\xa2s\x11K\xc3\xf36\xf9:\x93b\xa5\xeb\xacS\xd7\xffP\x93B\xd9\xe7\x94\x11z\x14wh\x1a'\x92\xaf\xa6!%G\xf8\xf22h?c\xcd\xdc\x92}p)Y&g\xed\x92\xb6f\xd6K{\xc3S\xb2 l\x02\xaeM7f\xed:\xe5e\xd7)\xf3N\xea\x0bbO\x1c\xcdE\xc8F\x89\xcb\x03\xe1\n\xe2K\xe3L1\x81\x11\x1d\x8bF\x1d\xc6\xd2D\x0f\xc3h0\xd8\x15\x9d\"E,&Gq\x8b\x8flA\xa2]\x12I\x9c\x898P.\x80-\xcd:\xd1\xbc\xd5\x17\x8f\x91\xbb\\\xf8\xe1\x99\x89\xe2\x99H\x19\x93`\xf0Hk\xc5\xd8\x0c\x86\x10y\xb6\xb2\xdcb\xb92\xbe\\\xc2Y\xb7\x19C\x06F\xa9\xe3\x94z \x03\xb2\xc8\x1b\x9c\x11\x1a@/\x8ay\xb5\xfb\xcfd\xfd3V\x883Cf\x82%\x80-\x1e\xa8\xec\xa5\x99\x98\xf2\x92M\x19\xa9\xd5\x84\xed'\xf3\x07X\xa0\xd4\x9b\x95\x0bhU\x94r\xd6e&f\xcf\x7f-\xd9/\xb1\xdb\xbd \xc3W/)y\x19\xe2\xe3\xd91 `\xa1\xe1\x01\xc4\x9e\x8fc\xd4\xe9\x1a\"\x1eE\xdfi\xd1\x9b\xe0\x9a\xea\x96\xd9\xfa\x0e\x98,Hh-J\xa44\xdet\x8b\xa1\xdc\x1fB\x1c8\xc9yL\xd2\xa3gp BaE\x0c\xe3n\xa0\x9e\x14CQ\xb4S|\x83\xc1\xfb\xc3\xf2\xac\xe0w\xc3\x05\x15\xf5N\xb6\xc4M_pw\xd6\xc9,Iz\xda\xaat\x90\x90\"\x02\xae\xb2ks>\xc0f\x1f\xbfF\xd5\x92c\xb6\xf3\xa4\xe8\x08\xfd\x97\xea|\xd2\xa0\xe9\xc8\xd1\xec\xaeJ\xa0\xec\x86pM\x0fFl\xa9\xd2L\x12 \x84\x03\x07\xad\xaf\xf8\xde \xf0\xf3e8\x90\x7fI\x1d\x0d\x12\xd5}\x88Gj4^\xb3\xa8m\xcb\xf1\x81M>#\x18,\xdbi\x9d#\xd2m\x8dY\x1fN\xeb|%\xd0\x17\xc3J\x88\x87b\x85\xe3\x88\xfe7\xa2\x02\xae\xd6\x81\xfa\xebzQ\"KR\xea\xca\xe7\x1c\x11\xef\x17R\x98\xfd\xdb\xdb\xfda\xdd\x81uT\x1b'\xed\xedWd\xa0\xd6 \x14\xb2\x16[\xa90{\xcdu\x11:\x06@.)\"\x16\xe9\x9f\x87\xd9\x13NO=\x1f\x8f\xa1\xe3c\x12gyJ\xde2z\xedU\x89\xb7d\xa5\xac\x03/zw\xdc\x83\x8d\xf3\xa1zn\xa8\xa3a\xa2\xd8{;\xd8\xc2\xecHjb\xba\xf5\xaf\xf6\xd3\xb22\x05\xc8\xba\xf5 \xce-k\xdb\xdd\x1c\x9c\xa4F\x84\x9c\xc3\x0dw\x99\xa7\x93\x17\xda\xb7:1+\x87{\xe1m\x83r`3\xb3H\x0b\x11\xe1\xc1v\x1e\xc1\x043\x043\xca\xe8l\xee\x01/\xfb\xd4\x02\x01e\xb5[\xf7\x96\x9cI\xc9\xe0\xe8\xb0\x15\x0e\xe0\x9f\xb4dmT\xb6&(\xf3: K\x83\x1c^\xad!%\xf7\x83\xca\xe0\x0c\x04\x83\xa3\x99N\x941\xc9}\x08\xcf5\x9eC\x1fi\x00?\xd0f2\xe0\xd7O~6TO\xfb\xc2\xdeV\x81dR\x0f\xfenN\xfc\x81\xc3oNH$*j\x18\x1f\x8c5>\xac @\x0c\x9d\x9cDt\x89\xe0\x90\x90\x8f\x13\xee\x82\x1c;\xf5\xf9\xcbU\xfa\x9c$yL\xaf\xdc\xe5\xcb\xabt\xf9\x99\xac\x7f\xe4L1i@\xd7\xad\xdb\x17\xd7\xd7\xed\xda\xb9\xd3\x1b\xed\x9d\x1eS^j\xb4\xdc9E\x84M\\\xfa6\x87\x93\xcf\xc8\xbc\x14\x14\xe5'\xea\x89_n\xda\xd0\x1f[S<\xf2\nH\xa6}\xac\x0b\x025!\x0f\xad\xa9,$fGAA}\x10u\xa9FM\xd1\xd4Q\xf8X\xe4\x0c9\x84\x08w\x9bN_a\xc0G\x11%^\xe8\x97\xf8\x82\x06\x10Zy\x15&Qq\x89\xcd\xd3~\xba\xcf\x10Q\xac'e\xfc\xc8\x85\x17\xfa\x01\\x\x0cU\x18\xc4_\xc8\x1c\xae#\xf6\x99k:wB\xec;\xbeVy6\xf74\x9eEF\xf2\x92K\xa0En@\x8e\xac@.v=zm\x95j\x95\x9b7\x01\xb3\xb0V\xd4+<'c\x91\xd8\x97o\x7f7\xce<\xb1\xef\xeeR\x9433\x15\x002\\\x0cu\xf8Ue\x1a\x8e\xb7\x92\x8c\xba\xf2\x9c\xab\x84\xcc\x9ax<\xb9\x8a\xce\xadjx\x9e\x8d2\xf2\x85\x1e>jY9\x13@r\x97e\xe1\xdb\x1c-Cq\x7f\x16\xb1\x93\xc1\x01\xfd\x8a\x8f\xcb\xc4\xb9\xcdA\xfa\xbeb\xedb\x07\xb2\x9af\x17\xe9jy\x8am\x18\xa9\xc0\x94\x87\xca7W7\xb5\xa7\"\x1a\xaa\xf8\xc4\xb6\xe2\x80&pq\x1e\xa5U\xabi\xab\xf7pE\xfe^\x8a\x1a\xa3\x08x\xec\xd2\xf8\xad\xc6e\x02o\xabA0\xa6\xa5\x93\x17\x95n\x19\x86\xf4\xb1\x97\xd5z\xd2\x05A\xc3\xb2\xd2\xf1(\x1a\x17\x0e!\x9a\x81bf\xf2\xca\xd1\xe7\xc5\xa3]G\x89#l9iA\x84\x86x\xf7\xef\xde\x7f\xf0\xe0\xf6\x9d\xbb\x0fx,\xcf\xce\x10\x03ax\x1c\xcc\x9d\xdb\x83{w\xef~\x7f\xef\xae\xef3f\x0f\x1f\xec\xc1M(\xbeQ\xee\xdfa'\xd3\xde\xdd\xbd{w\xee\x0en\xdf\x0d\x80\xc2\xb6h\xea~\x00\x83\xbd\xefy\xf3\xf2\xde\xe0\x9e\xdb42\xe2(\x85\xa4\x02\xc5\x0fm\x15E\xa3\x11\x19\x0b\x01\xa3\xd6\xbb\xfa\xeb\x0b\xba\xba\x08\xde\xec\x0b\x15\xe6p\x18\xb2\xbf\xb9\x15.(\xffD\x9dz\xf1\xd2Q\x1c\xc0\xef-N\x11\xe6\xb9T\x0eCUz\x17\xc7\"g.\xa2\xf2X\x84G\x90\xf3\xd3\xd1HH\xa7\x88\x9e\xd1(\x193\xd4)s-\xb2\x1b\x03\xe7R\xe6\xb5Y\x19\xcd\xf0*\x1fi\x9d!\x16\x1b\xe1;6\xc0\xd3\xb9:\xdd \x9f\xee\x0c\xcfc9\xdd <\x02\x8cm\xda\x9abB\xe0l4\xc1I=\x84\xc9\xf6\xb6\x81![\xc0\x90\x7f\xa7\x17\xc8\x16p\xc0\x9b\x19\x8cq0\x11\xec3\xeeWQN\xea\xbf\xe3|\xb0\x17\xa2g\xd4\x02]\xc9.\xbc\x84IQaIH\xb3\x96\xec8\x18\xc4\x81\x0e~[!\xfb\x7f\xe1\x9a\xf0x\x08\x13]\x98\x8a\x15y\xe4\xc5\xa5Z\xe9\xb1\xf8\xdebp\xaf\xa0\x9b\xe0\xfah\x00\xe8\x88\x1a\xc0\x88u4\xf6+\x1c\x19q\xe1\xc8\xe4%\x9d\x0d\xc8\xc8\x94\x00O^\x11b\xb5 \xff\xb4\"\xa2\xe6\xa8h\xc9\x8d\xd5?@\xcbE\xc9K\"\xbb\x9e6\xb3\xae2\xabQ\x9eMa\x05\":LQ\xf0J9\xd3\xd81\x93\xf7V\x0c\xb7\x90\"em6\xff\x03\xe4\xaf'\xc2\xf6\xbf\x03\x038\x80y\x7f\x95\xf0J\x10\xf3\xd1\x84Q\xa3\xc6\x8d\x11\x1b9\xe3\xc7\xe7\x9c\xc1\xe4\xbf\xfd\x00{\xf6j\xda\xbfyi\n\x97\x02s\x00\xf36\x96\xf42\x80_\xafL\xce\xb4\xd1e\x88]\x86\xcd\x8aB=\x13W<\xafZ?\x9cG~R\x94}\x0c\x9a\x91D\xd2\x10\xae\xe95\x126\xd60\x93snr\xee\xae\x08\xcdF\xe5\xec($\xfc\x11fF\x1e\xf38..#\x11\x1d;Q\x07\xcf\x95\xe9b%3\xb4L\x00\xfd\x84z\xa9 T\x8a\x80H\x04\xcb\x13#\x90\x88E\xaa\xcc$|C\xfd\xf3I\x15\x86\xfa\x97f\x18S\xb95\x04o\x027A\x87\xdaH\xd7\x90PGue\x8e\x96\xa0J:\x1d\x12\xde$\x02_\xdf\xf9J\x8e\x10\x97K\xff\x0e\x1a\xdd\xe1\x00V\xa3\xc5\x18Z\n\xb1sE\xd9\x9c\x9b\xc5\xf8BW\xd7J?;\x1e%>w8(8\x1c0\x94|\xa5\x90\xf7\x99\x95\xbc[\xdc\xbc*\x15\xbf\x04C\xc0\xf63\xaf7\xb3\xf6\x03\xc4\x8c\xdd\x87\x82\xd5\x8f\x1fB\x88i~\x18n\x0ca\xe0C>\n\xc7\x88\x067Q\xb3@F\xc9\xf6\xf6\xd8R\xb3\x0e\x14\xa1t\x94\x8e\xb9\x8a\x8b\xf5\xc8M\"\x98\xe3A\x1f\xcc\xcf\x1e\xaf\x02\x98\x04\x10\x0605@R\x9c\xe7\xec\xffj\xb9z\xb5H\x7f\x93*\x11\xb4x\xb2\x04\xb6\"\x12\x0df\x81c\\\xeaWxS^q\x0eRQp.W\x88?{k\xe03V4\x1fc\x9ck\x0e\xdb\xc6\xd4\xb8\xd0~xs\xa8iA\xd6\xc2!\x15\x1c\xb6\x84\x9a1M \x14\nu\x84\xda\xb6@\xaa\xa8\x84\\!P\xb8\x80.\xa9\x80\x8e\xab\xd6\x10tb\xcf\x86\xf0\x08\"\xdc\xb1>\xbb%h\xbb\x97\xf0-\x1b\xf3\xd7w\x06\xa8\x9d\xe5\xf7\xe8(\x84m\x97rn\x86\xc2\x1f*\xee\x19\x8f\xcc\xe3\x82\x9d(\xac\xa8'5\x93\xe6y\x95\xbb\xe0&\xda\x93\x00\xce\x1b\xe7\xe5/\x7f-;aa$Z\xf8\x08\xce\x10Df\x11)\x81\x03Ht,\x82\xceo\xf2\x97\xffel\x82\x94\xcd\xb4/L\x1cNa\xc6&LF\xa1\x81Lg<\xf8\xc6\x911\xa0\xc4\x9bu=\xa2\x85#\xadC\x0f\x05O\x81\xf6z\xc3\xb1\xd2.\xc3\xed\xec\xac\xe0\x11,\xae,\xb7U\x08\xecn\xa0?\xe0cy\xc0s\xa1y\xc0%\xe5R,c\x14d\"\xce\xfc\x0c\x1e=\xc2#\xbf]L\x9b\xa1\x98\xa6[\xac\xca\x9beT0\x1e\xb3!\xfe\x89\xb4\xd1\x8b`3d\xc2T\xce\xf9 \x06yc[\xad\xf2ZIB\"-k\x01\x92\xbd\x98 \x87\x11\x1a\xcd\x8c\xab\xedm\xfd\x9a\xcf\xbb\x9e\xf2\x8cS\xcc\x88\xc7\x99\x99\x05\x93\x9c\x8cta^\x90K\xe9\x00\xb2\xaaQ\xcbi\x95ZrNj\xc5\x98\xa4:\xd9xyej\xf9\xdf\xacKz\xf9\x9f#\x86\x82\xae\xe9wy\\\xe6Z\x14\x86\xbab\x8e\xa1\x92\xc0\x8f+\x7f\xb8\xbe'&\x8a_\x1d\x0eZH\xe1\x9a1\x14K\xf2\xff }WXr\xee\xb3\x8a\xd5\xf4E\x99\x97P\xc0\x92M\x80\xb1\xee\x13\x93\xf1\xb4\xb3\xa6\xa5]\xcb\xf2\x1f\xd4\xb0\xbc\xd4\x00`\xde\xd8\xe0/\xae\xbc\xc1\xa5\x18\xc3\xa3B\x0b\x9f+\x86 2\xa2\x8e\xdf\x18\x8cu\x0c\xc9\x8b\xeb\xd9\x835U\xaev\x99\x90\xe4!\x06W\x87i\\./\xc3\xea\x19\x05\x12(\xf3\x08\xfd\xc6F\x0ce\xc0\n\xc3H\xd8\x87\x0c-\x01Z4\xaa\xac\x1a\xb68,\xca\x10\x89e\xd3\xe1\xadXv\xde\xa5f\xd7#\xd1)w~c\x91+\xba\xf3\xd2\xb9\xf6\xa5\xfeve\x0d\xac\xa4=n\xd0\x91\x94\xd3\x91\xa8V\xb6\xe8!\xa4\xa2\x84L\xea\x94\"9.\xea\x97\xa0\xe7\xc1X\xadwY\x9f\xdc\xaf\xfaY\xfcrm\x93\xe3L\xa6\xdb\xd4\x0c\xbcN!|\xd5\xe6\xa5\xe7w\x18(\x12(\xb3\xcf$\xfdJ9\x06\x13,@\xa7=}qE0H\x8a\xac\xa0k\x03\xad\x88w\x83\x06\xf0\xd5\x0f\xe0\x86\xdaKL.ZS;\x14P\xa6\x12\xca\xe8_\x19\x94A\x02\xdc\x99\xf2!\xd8\x8b6\x88\xfa\x13\x04\x17\xc9\xac\x0e\xc7\xd4\x98<\x0b\xaa\x8e#\x03)f\x8b\x89Z8\xd6\xa8\xa8\xadZ\n\xe1\xdcg3\xd5AI^\x97en\x9bT\xee\x96\xb6n\xb0\xbe\x99\xa8b!>Q\xf0\xce\xd7v\x1f\x91l\xc4\xc1'\xddS\x0f\xb0\xcc\x1e\xafy\xd6:6\xb5KD\xfbj\x87v\x95FR~f\x19\x83]\xd1\x91\xb4I\x0b\xf8\x92\\\xa6\n\x00\xe4]\xbb\x0cQ\xc3/\x18\xc2O\xd4K\x8c\xf6s\xb0\x8a\x0b\x93$\xa6Q\xdc\xa9\xf8C\xb3\x7f\xe5W\x9f\xfb\xcc\xb6\xecj(\xb7\xa7ic\xb4\xe6J5\xe6I\xad\x11\x90*0\xd9*c\x1e\xea5\xdc\x82;\xcd\x96g\xf2\xd9^\xf3\xd9\xa2\xf8\xce\xe4\xb9\xbf2x\x0c\x9c\x89\xd8\xa1\x0bc~=\x87<\x96\x9a\x88Z\xf6\xe5\x9cxJ\xcaI\x8d\xf0-O\x82\xc8\xa3\x96\x0c\xa3\xb1\xbd\xc6\x03\x1fL*t@\xde3~\\\xa7\xf0\x98g\x8dN\xe1\x11\xac\xe1\x00\xce\x89\xb7\x8b\x0c\xcfY \xe2L\xb1\x10\x04\xf1\xe2>M\xb8\xfc\xedcYZ\xd2\xd9-\x06\xfdD\xdeG_ \xf6\xacI\x03\xd2\xa6\xe9-4\xb5-\xfe&:/\x127O\x8b\xb9\xddaD\xc9\x032%-y@\xd8ArN\x19\x9bL\x1c\xf2\x80(\xc2\x87g\x8e\xb1\xe49\xbc\xc4\x11\xf7\xad9-^E\x19\x85Q/\x80\xde\xb8\x99\xd4\xa2\xd2\x93cR\x8bH\xd6\x8a/\x93\xe2\xfbEVrZ\xcdJn9M\x99\x00[\xb0\x96\xe8+\x83#O\xd2\xe842y\xb6I\x99\x8b\xf5\x14\xf7y\x99P\n7\xe1T\x13\ni\x02P#\xbbF\x05\x06\xdd\xb2k\xb8\xda/\x10d\x84\x83\x8c\xb3U\x95\xaa\xf9&\xbfo\xf4\x0d|\xac:\xb1\x11x\xa4d\x83\xed\xee\xb2\x06x,<\x82]8\x80\xb7\x82\xc7\xc3m\xb6+\"L\xdfJ\xa7\x04\xb4\x00\xf0gD\x1b]\x06`N\xb0Gp=\xe5b\xea\xdf)\xed9\xc74\x8c\x16v\x86J\xba\xf7\x1b_J\xac\x81\x02\x08\xc5\xcf\x18%0 W\xe1$\xa2kn\x10\x1f\xc2{t\xc2\xabG\x0dpy\x10E\xac\x88\xbf\x14\xd5^\xa2\xfd\xe3\x059#\x8b\xf2]\xf3\"n%\x8e\xe1\x06Q\xfa\xd0Z\xee\x00\xf8\xd8\xd6\xba\xd0\x13\x8e\xc6\xec$\xd3w\x13 \xbf\x0b\xae\x8a\xd4\xf7\"\xaa^\x98)y\x0e\xea(F6\x03\x16\x16\xa9\xcf\x19\xdd\xca+`F\xd8\xc2\x0e\xea8}\x1fG\x83o%\x15P5\xa9\xb2v\xc0\xdcJ\x169@9\x84!\x1c\x96\xb9\xb3\xf4\xf3\xdfJ\xf4*\x95\x8a\xe3\xc4\xeeC\xc8\xb8\x8bi\x86~\x92\x02\x16\xd9\xb8\x10\xbf\x8c\x049B7\x91\xb0\x80\x1e\xa3\xf1~\x00a\x9d\x82ip\xf4\xc9\x8c\x92\xc6\xf1\xde\x8a\xa2^\x15G1\xc8\xf8\x1b0UX?Q\xa8oA\xd8\xc8\x8e\xb0\xfaN\x9cp0\xa9\xe2\xa0\xc9\xa2\x848\x98b\xb2L\x86]*\x185(\x88/Ez\xc8\xa0\xf1\xab#r\xca\xcdbE9\xd1d.z\x13\xca\x8a\x08\x95|\x81\xf0k\xcb\x8bi2&\xca\x0f \xaf\"K\xf3x;%\x01,I\xc0\x98\x06[\x1a\xf5\x13\xf3iU\xf2\xea\xf2\x10\xd7BX(\n\x8b\x93]\xbf\x0c\x80J\xbe\xd4\x165\xc3\x0f}3|*\x89D\x04\xe3\xb0\xeb\xd7&\x06\x95\xb8g6\xb70\x00\xa3\x8d\xb5\xa2\xc7 +\xe5\xac\x0c\x9e&\xf2\x92\xc4$\x17\xfeK\x07\x12\xc1\xf8\xf1\xbe/\xa3\xdc\xf1\xa7\x99G\x05\xe1\x97\x92\x8b\xca\x87\xbb\xe8\x19\xbb\x03\xb9\xfd\x93 F\x9a\xee@n\xe0\x1b\xf1\x95\xc7\xb0F\xdca/\xdb\xec\xa1\x02\x08\xad<\xbc\xbc\"t\x9ce\xd3\x9e\x14\xfb\xe1\xd8Rt\x04\x14\xb5\x04V{\xdc\x99\xc0>\xa3\x9a\xf6OD\xcb\xe8\xd9\x15\x8e\xa8>W\nh\xb7\x1d\x80\x0c\xab\xab\xbb\xe5G\xa89nYV\x11 \xea\xbc\x80\x13$/\xd5\x05L\xe0\xf1c\x88\xec\xdf\xcd0\x00f\x9b\x1d\xeb\xf2\x03\xcb2\xcd\x8a\x05\x9d]\xf3\x82\xe2\xb9\xf6\xd0\xe8`\xa1^l\xed\xb5\x19]tW\xa1\x8b2 }\xf5+\x12E\xf6\x98\xa8\xd3\xa6\x90\xaf_\xa1P\x85\xb6\xbel\xb6\xe3\xcb\x8b\x0dcR\xf3%lCpP\x08&G\xf2\x19\xec\xc3\xa4\x0d\xc9A\x8c<\xe7\xae\xe8\x19f\xde\x8f\xf8\xa1\x940\xd4\x88\xd9\xa9\x1d\xf9f\xb7\x04\xb0N\xc9\xb27\x90.6\x1e\xbb%\x948\xd7&\xfb1\x1d\"a#;\xd7\x99E\xa3\x10J59;\x9b\xd98UU9\xfeTT\xe5\x04oH=y\x8c\xbf\xca\xacGa\xa1$\x8f\xf0\x87\"5&\xfc\x86\xd0\x97\xe7\xfcW5\xb9W\xe8\x04\x8a\x0bb\xd3\xa8\x9d\xa2i\xd0C\xc5\"\xb7\xeb3\xf1\xcd\xd1\x14\xfe\xbe e\x13\x88s\xee\x8f/\x92\xf3\xd8c*(w\x9a\x7f$\x89\x9bT\xcc6>@^\x18\xf1R\xf1\xa5\x88l\x1b\x93\xb3\x9c-\x9c\xdb\xa4F\\G\xa1%c\xce\x8c\x9b\xf8&\x1c\x0e|cHXX5I3~B\xc9\xbcQ\x9ed\xc3\xd0\xc6[t\xccXi}\xd8\xa0iE\xb3\xea\xc8\x8b\xe3\x9f\x96n\x99jWA\x05v\x1c\xf2(\xec4xK8(nJ\x13Y\xae\x8e\xb3\x19\x83`\xc2\x9bC3OW\xa8\xd9\xd0\x1f\xa0\x88\xc1\xa3\x8ag*\x15\x1e\xa8k\xe2\xf1\xfc\\\x82-E\xae\x94\x8d\x8a\x89\x97\x8d\x02P\xfa\x91<1\x8f\xa4\xb0\xa0\xd7l\xbf\xaaeU\xcf\x0f\xf2/\x1fq\x81F\xb2\x82\xb0\x0dg&\xa4\xab\xfarJ&R\xf0\xad\xf8\xf5C\xee\xb7\x80\xae8XXuX\xf80\xf0P\xad\x14=\x19\xd8G;C8\xb3\"^[\x99wcE/k\x92\x1e%\xe8EF\x9d\xf1r\xc7\xea\x13\x19\x7f`(o\xac\x98\xf5\xd5t;\x98\x9f\xc1\xcc\xb6\xb7\xb0\xff\x89\x0b\xfb\x8f1\x1e\xb0m*\xce\x10\x1623bc\x8c\xdc\xf4>\x9a\x8dv\xf1\xefm\x0c\x19c-h<\x16\x18>\xe4\xf5\xfd\x95\xb4\x91\xa9\x9c\xe1\x9e\x12s\xc0\x0d\xbf:N\xa5\x1a/Q\x88\x1e\x13\x15\x99f2\xe8t\x1bfl\xd4\x0f}|.\xf6\xd1\x84\x8dkR\xdd\xf1\x070\x92\xc6\xa3\xc9X\xec*&\xd8\xcd`[f\x1f\xc8\xd8\x9fg\xba\x11q\x99\x90=\x9e\x05\xbc\x8c\xfa\x8c\x1d\x00\xfc\xdf\x04\xff\xb5Md\xc1\xa5\xb1\x04#\x08\xf0\xcf\xd0\x7f\x08+\x06\x11\xec9c\xbb\xc9i\n\x95\xa1\xf3\xf1\xea\xf1n\xde\xe6N2\xc5 \x8aG\x18#\xc1\xc9F\xc8%\xee}60\xbc\xad\xa8\xb70\xba\xd1pda\x905\xff\xe6\xe6M\x8c\x03F\xd1l^SA\xb4\xd0\x8a5F\xb0 !\x9f\xf0\xe9-a\x08\xd9CX\xc2c8c\xff0J\xd0&K\x1c\xc3\x10\x16HA\x96z%\x89\xbcXwkAr\x8e\xc7\xbc\xdf\xf2\xb71\x81\x94\x9e\xbf\x93\x1f\xf2\x9e\xcf\x90v\xc1\x10\xe6-\x94 $\x83/A\xe6\xb1E\xc1(\xf6iEq\x92\"\x1b\x13\xfax\xd6=\x1e\xc2\xca\x87\x9c\x81c\x85\x8b\x86\xfff\xdcmaR8(4\x9a\x12z@\xde\x96.|\xb2pGf\xc2q\xc4(\x15\xe2\x87u\xe5\xc4>\x9cX\x85\x19\xb60'\\\xe8~\xfc\x98\x1d\xe8\xb6\x85a\x038A\xea\xba*_\xf7\xe1$%\xe1g\xf3W'BP\xdb\x1e\x82\xc7\xb7\x94\x0f\xdf\xc1 n\x92\x9d\x022b?\x8dN\xf4\xc2\xad~q'\x1c\xab\x1f\x0b5\"o\xa7\x0e\xd2\x8c\xad\xcc\x0e\xcc\xd8\x12M\xf8~x\xc4\xf7C\xe5\x83b93F \xc4\xfb\x92\xba\xec\x08\xaa\xb2\xa3\x8d\xa2\xec\x9c\x924D\xb5Fy\x9cp\xb6\x9bV\xd8\xf9\xb0\xd4\xed\x00\xc6q\x96\xeeU\x13\xd5\xbdj\xea\xea^\xc5\xc8\xc49\xf1r.\xee`\xa4f=\xba\xd1p\x1c\xff\xe1\x96/2U\xf3EV\"\xe8\xcb,k\xa1=\"\x04\x93b[\x99\xe0 Z\x01M\xe9{&\x1c\xc2\x8f\xc5\x9eMp}E\xa5\xbf\xdc\xcbxJI\xbe\xea\xd7\x9dR2\xe5\xf1h\x93\x0e\xe8\x91\xc0c\xe94y\xf3&O\x10Uz%'HR$\xe4\xebYn\x0c+\xf5\xb9-\xc5\x1cw\xab\xdeE\xa5\x9c\xd4Y\x9f\xb1My\xe6\xd4\xfe\x91\xbd}k\xa1\xc7\xa7\x9ce~M\xca\xfa\x8e\xecVg\xbf\x9b\xb3\xff\xf5\xf5\x1d_\xdb\xa1X\x94\xc2\x9c\xd5\x11\xce\xd4\xe0\x07\xd7\x94|U\xd5\xc3\x91bT1+!\xca\x14\xe1(\x02\xe1\x8f}\xb4\xdb\xf7\x8fy\xea \x9e;|\xc1\xed\xcb\x0e\xb9\xc3\x9d\xe6\xf4\xd4\xaaLXre\xc2\x92\x8d\xeb\x03\xf1xu\x9b\x0b\xe25B\xfd\x0c\xad\xffl\x970\x84i'\x90,\xbd1\xf5R.\xf8\xe0(3x\xfdb=6LIA\x0c\n\xff\xac\xe4\xf8\xd9\xd1\x1a\x9aT C\x9e\xb7I\x8f\xb7\\?\xd1\xa6(\xcc\x05y\x1cr\xedi\xf9s\x0f\xbe\x83D:n\xa2\x8d\x88\x1b+\x9b\xc9O\x0d\"\xac\xbcD\xff\xca|\x84\x8a\x05\xa55\xc3>\xf2\xfb4yI\xd6d\xfa\x9e|\xf1\xfc\xee\x94\x99\x8ev\x0d\\\x83\xdf\x9f-\xa2\x95\xc7:x\x1d\xf2|:\nn2\xa2\x9bVp\xb5\x8a\xb9\xaa\x933:\\\xa0\xf1L\x96}c\xd4%\xc2\xc3\x9c+1\x14\xe7\xde\\Q[0\"\x12J\xd1T\xa3\xbcTb\xcd\x8c\xb6\x99\x12\x01rD\xa5\xd0\x1f\x0d\xc6m\x8b\x9dr\xd5\x1e_G1\n\x9ej\xdd8\x08>?\xe1L\x9fK\x12Z\xb6\x90\x8bB)\xa2\x19#\xc90\xf1=\xa9,\xb4\")\x07\xf7\x0d\x17\x94#\xd2s2\x0c\x8c\x1f\x90\x93s\xcc\xbc\xfc\xae\xc5\xeb\x04\xdd\x95\x14\xaf\x93\xe3<#/\xc9:SJYH\x8a\xd7L\xe2k\xea\xf4\x8d\x81\xa6k{\xec\xde\xfc\xab?\xb7\xf9g\x7fn\xf3_[\xe2\xd8\xfeAl)b\x89:\x02R\xed\x9e\xdd`[\xbc\xcd\xabSi\x8e6\xb1?\xc0b\x8e\xb2xIkCgE\x99d\xf1\x91\xac\x7f\x86\xdeg\xb6\xbe\xdd\x07\x0b\xean\x12\xddx\x06F$\xd0U\x14as\x9a\x87Y\xab\x1b*\xa8\x1dE\xf1d\x91OIV\xafj_\xb4(_\xe8\xd6\xec<4\xb78 's\xf2\x8ed\xf9\x02\xf9\xdf8\x00\xc5\xa3\xf0c\x8c\x8f+e\xbbl\x11L\x85ZO\xebL\x01U\n\xd5\xa8g\xe5\xc8\x18\n\xafC\xf4\xb5\xa7fu\x84\xb1\xd8\x95\xe2\x9d\xdau~\\\xdf\xcb\x0e\x82wmR\xbd\xd4n\xca\xaex\xbbf1]\xb2\xf0nN\xac\xf2\x92v\xcd\xd4Z\xbeV^\xc8\xa5\xd0\xd6:\xb6\xf2*\xf7\x19\xba\xb9\x8ev[\xb2!\x01\x86u\xcaw\x95\x0f\x07\xe3@\xf9\xbb\xe1^X\xbf\xecfQ#\x19\x91\x97)\x8b\xb9\x1b>\xb2\x95\xc2\x15\xfe\x99\xc9L\xb0\x0f?\x1b\x11\xa9r\xd3D{\x9f\xb7s\xba\xad\x148\xad\x13\xdd\xb4;i1\xd3\x80\xb4\x1e\xd2\xe9RT\x99\x97%O\xcd\x85~\x0b\x19{(r\xd0G\x18&\x8c\xbe\xf6\xbc\xc4N\xaa\x15\xedp@V\x02\xe44\xbc\xab\x12\xa0\xa8\xc5\xd9\xa6J\x83R\xaf\x9c\x91\xfcXX\x04MD)j\x99\xb2\x9e(9\xcdY\xc5\xe1w\xe6\x14\xce\xdd)\x8d\x14_\x93V*\x83\x8ev\x82\xc0H\xf9\xd5\xfc\xf6\x99\xf0I\x8b8m\xb0\xbb\xa8\xa0o\x82\x95\x06I\xf9\x9dA+\x0c\x14d\xcb\x91\x02\x85\x0c\xdf\xb4\x0b\x00\x06uB\xa3*\xa2a\x8f\x7fl\xf7\\\xb3o\xf0Xe\xb1\xe2\xfan\x8f\xbb0G6.\x8br\xf6\x07-s\xce\x9c\x90<\x05\xbe\xeag\x00*w\xd5a\x9c\xa0\xeeE.%\x9a\xb6\x8c\xae\x8c\x07\x83J\x8dl\xd9\xd2 \x16=\xa1&@\xe4}\xdc\x19\xc0\x8e&\x855\x08\xee\xa1Nc\x8d\\A\x95\xc6V\x1a7\xb4|56\xae\x85;\x8c5\xbc\\\xac\x8f\x0e\xf9\x8f\xf3p-\xc5H.\x03\xd82\xc1N\x1f[d\x9b\x91\xf6\x8c7\xf7\xe0\xb4\xe5\x7fpU\xf9\xb5\x9c\xec\xb8\x19\xa3:\xaa\x19\xf1\xf8\xacH\xd4\xebv\xfcFxL-Y/[[%A\x8c,\xa7o\xf4\xe7\xb2\x03\xc5x\x9a\xbc\x80\xb0\xb5kJ\x0b\xf9\\\x87ia\nl\xde\x94gJ\x9c\x80\xf9\x8c \xf5Uy\xa1\x1d\xe1\x13\x8b[/H\xa9A\xe5\x13\xf0\x832\x91\xe2\xf6v\x00\x91\x87~ \x1c\x02hn6\xe7\xf9dS\xad\xfb\x84\x81\\<;\x1f\xe1\x04\xa6\x1a\x1f\x91X*/\xb6\x03\xad\x03\x9b\xe1\xe8\xfc)q.o\xe5F@\x06eT9\x92\xc4\xfe\x854\x84%.\\ \x08\x9bX6\xda\xb5X\xcd\xe4\x85\xd9,\xb5\x89A\xd5\xab\x8a/34\x15*9\x81\x9ecED\x91[\x1d\x91gfd8\xc1(\xf8\xe8\xf9\x1d7\xdb\xc0\x17W\xe2G\x0d\x11\xa7l\x86\x9d\xdc\x88\x98\x101\x80[\xe8\x83\x83\x81\x88\xe8\x93#\xde\xff,*\x98E\xady\x93\x18\xda\x1c\xf1:ff{\xc2k\xa4\x90\x86\x80\x1cF\xc0 \x81\xcd\x06r\xf6W^\xf4\xc8`\xd2\xa7 W\xa1+\x07\xb1\xe7\x97\x90\xd2\x0fJ8y\xe7\xb0\xa3\xc3\xcc\x0c\x86C\xee\xe9\xe7\xb1\xcd\x96 G\xa4]\xd8\xd7V\x9a8\x13^\x8d\xf6cg\"Y\xcc2\xdc \xc4\xcaZ\xd2\x18\x1a\x96\x06\xc4\x00\xb6\xf0\x94\x8a\xa4Y,,\xd2\xf8x\x93\xfaY\xe1p\x0c\xcb\x0c7\"\xdc\xb4L\nDDQE\xc9\xa4m3:\x89\xe9f4~l~\x00\x93o\xd3SEV\x1e'*\xb2\xea\x95\x8eY\x06B\x87\xd6\x81J8Nu\xfd\x95S\xc3\xa2\x03\x92\xd4\xd7\x12E\x9cqW\x02\xe3\xf3I+1\xbe\x12\xcb&|o7\x1b\xd8\xc2r\x90\xf9\xf66<\x82\xa4\xdcl\x13F\x83\n\xad\x9c8\xc7b,\xf8\x80\xe7X\x84h3\xe1\xe65\x031\n`\xa2\xa3G\x93oT\xd6 \x9b\x1e\xeb\xdfi\x89\xecz:\x896J\xabM\x15\x9fy}\x1c\x96\xf7\x9a\xcfR\xb9V\x0f}\x88ZOK\x06\xaf\xed\xed\x0c\x1e+(\xdfv\x12;E\xbfC[\x04<\xbb.\xedj\x024P\xb5N\xa1\xe0\xaa1 \x96\xd4\xe2Q\x0c\xb0'\x01\xaf\xa3\x13\x88'Oe\x92\\\xf4\xc6P5\x95]\x14\x04U\xac5\x1d\x98\xbf\xbb\x1e\x98v\xb2}M<\xb0\x99\x8c%.{\x84x\x16\x97\xf73\x11da\xa3S\xed\x88n\xe1\xb4'\xad\xa4\x8a\xa7\xe4\xc6\xd3\xb2\xceuO\xfc\x92je\x0d\xb6;\xb3\xb3\xdd~\x00\x9a@\xcbk\xe2\xb9\xbf}Y\x92\xd4e]\xba0\xf7\xdf~\xdet X\xb8\xc9q\x914\x89\xda\xe55MZ(R$\xb3\x0e\x86\x82V\xf8U\xd6\x1f)CT\xa3\x0cQ\xc0\x8f\xb0\xa8\x8d.\xb4\xcb\x0d\x8b\xd2\xeaa\x7f\x99q\xa2\x0b\xac\xe47\xc3\xbfX\x07\x9c\xcb\xcb*x;\x13\xf1L\x16\xf6\x1e\xce\xe7\xd1\x82\x80\xd1)\x0fTu\x00\xda\xae\xd4\x99'\xd8G'\x9a\xe7&$\xfcz-\x86\x8fo\xb6\x04X\xf0\x17\xe9\x94\xa1\xce\x91\x18@1\x1b\xeae-\xb4\xe7LT\x0d1oeve:\xca\x16\xb5(\x10@\xe1\x9e\xb7\xd0\xf3j\x02\x8f\xb0`\xcdM\xc8=\xac\xda\x87e\xf2'\x18\xa8\x0d\xfb2M7R\x84X\x94\x03HPR\xf4\x0bIbk\x17\x8bs\x9a\xf1\xca\xac*g\x0b\xcb\xben\x96P\xfa3L\x19\xa9Y\\\x03\xb1\x8a\xa3\x96B\xe7\xd7F\xa5\x04[\x958))\xa8\x93\xc9\x04\xe4\xb9%R\xcdw2\xcfN\\\xe9\x0d\x88^RA\x01\n\xf7\xeb\xd1`\xcc$T\xd4\x10z\xa1\x8c\xa7@\xecb\xc7h\xeeM\xca#3.\x08G\x1a\xf0\xf3s\xd2N\x16\xd9\x15r\xe7\xdcD\x94F\x9b4\x96\xd7\xda\x82\xf0\x8eJ\x90\xac\xa3g\x97\x19i\xdb(`\xdb\xaa]#C\xdb\x81\xa2\xba\x99\x99~\xb1RT\xee\x91\x89\xd1\xaa:\xf9E\x12\xdc\xd0\x986:2SK\xbe'\xa5v\xa3\xe2 HZ\x8a8 \xb8\x8fR\x1cy\xc4K/\x1e\x00\xffP\xb8\x97\x11\xa3\xfb`\x91e\xdaxD$\xfd,I\xa9\x9b4+>!\x1e\x1d\xdd\x1e\x07\x10\x8fn\x8f\x11\xcb\xe9ho\x0c;\x10\x8f\xf64\x19\x82\xfd\xb2 y-+\x83q\x97\x96;i\x08{\xcd6\xeb\x15\xfal\x0d1\xd0\x8f\x06\xba\x81q\xce\xf5\x85\xa8\xf1\xc1\xdd\xbao\xf0_?z5\x85\xa0 \xa7^Zq\x8a\xfb\xbb(x\xe5b7\xfa6\xed\x82,u\xe0\xdcRG\xe0\xcaK\x02\x99\xad\x0f;\x99\xe0w\x0fC\xd8K\x9fK\x86\xef\x96\x03\xff\xea\xfa6\x07\xf6\xbf\x03g\x88\xab\xd9*\x80\xa1n\x02\x973\xb9\"\xa0\x04\x16\xd8\x00\xc2\x13\x90\xf4\xb3dI\xae\xd2\x01C/K\xf3\xa2\xbe\xd4_\xc8H\xc9\xfc\x989\xe6\xc7\x14\xce\xbe\xa2\x1c\xc5U\xa1\x88\x03\xb4\xcd\xf2\xfa\x05\xe2\x1f[s!p\x13\x0b\xaf\xc9A\xfb\x93$\xceh\x9aOP\xb3\xecF\xdf\x7f28zGE6\x1b\x1e\x81\x84%F\xe8(6j\x0d\x810\x01\xc9\xcd\x818mI\x9c\xcc9\x88\x82\x04Zs\x8aq\x0bv\x14g4\x8c'$\x99)\x15\xcf-N\x11\x089D\x8f\xea\xa7\x95d\x9f\xa9gR=\x17MX9tv\xc5\xa8\x96j\xd7\xb2\xe6e(\xe5g\xb2\xce\x8c~\x89\xf2\xdar\xe3\xca\xd4\x8b\xa6k\x87\xb7\xd8E\xb4\x11\xaeN\x9d\xc8K\xcceJfQL~N\x93\x15I\xe9Zp\xbe\xee\xad\xb0\xeb\x94PE\xb4\xec2\x06y\xa9$\x88\x87Mvj\xe2\xb2\xdd F\xbd\xb2\xcax[\x8fo\xdduJk\x89\x98\x03\xe8=\x0d\xe38\xa1\xacuHb\x08c\x88\x8a\xf4\xbc)\x99$\xe9\xb4\xdf+H&\x8f\xb6\xb3\xb0\x98\xba\xab=s\x9b\xbc\x0c\xd1\x08\xf5\xeb\xb2\x7f\x12\xc5S\xaf\x8c\xbak\xff\xec\x12&!\x9d\xcc\x01\xc1f\x1f\xd0\xa5']\xd3\xe5\x11\x91\x0b\xfd\x04r\xfdq\x88\x81\xbcK\x93\xe5aL\xd35\xd7\x95*\xca\x9fv\\\xe9V(\x81\x0b\x7f\xc3F\x95\x04\x87\xfc\xda\xa4B\x14*\xdd\x1a\xcd\x08%!\x11KT\xfd\xc8\xbc\xacp\x00\x1f\x88p\xe5\xecPmA\x1e-D\xdd\xd9<\xef\x85F\xa2AHF\x99BH\x87\xf0\x9aT\xe1;\x9a\xca\xea\x06\x15\xa8\x17u\x0e4\xfb6\x00\xe2\xbd#\x01\xbc\xf0\x03xw\x05\n\xdc\x14\xfc\x90\x02\xeb0\xa1\xd2|-n\xa0\xb5\\\x1ao\x9b\x17M\xb36\x8c\xfa\x91\xf7\xe4K'\x9a\x81\x8d\xcb/\x9bt\xe1]\x15nN\xa1BgJEf=\xbe\xb1&>Jr\xb8\xa5K6X\x19\xa3L6\x80F\x0d\xe7i\xaa\xcd\x88yJ+\x8798\xfc\xd2o\x04\x89\xd6\x80\xc01\xb7\x15;T\xb2\xa8\x07\x02\xa3\x02\xcf+\x87M\x070\xa4W\x01C\\\x03\xc32\\i\xf0\x15\x04\x18\x1a\x85_\xde}\xdb\x19\x11XB\x94\x9a(Y\x1e\x13\xd5\xc9+\xe6<\x07\xc7e\xea\x11S\xcc\xd2%#P2\xdf\xf2?y7>\xcf\xd2S\xf4`T\x9d\x17\xcdG\x81\xc8\xd7\x1c\xc3>/\x06\xa4\xeb\xcao%\n\xdd\x8e&<\x1eT\xb0\xf8\x16\x08\xca\xe3I\x7f\\\xc4U\xddS\xc3\xa0aD\xdd:\xd8\x8c\x8b\xea\xa8\x90\x97\x96\xa1\xd8\xea}Q\x88 hP\xe1JCT4\xf3U\xc0\x82\xf8\xe8\x17V\x98Wt\xcba[\x8a\xf2$!\xde\x1b\x12\xc0\x0d?\x807\xeaR\xe9\x02\x01\x1d\x89x\x11\x0d\xd8\xa4\xe4o\xbems\xb5R\x1a\xf3\xfah7\x9d3o\x86;\x0cA\xee\xca\x92ig\xea\x86\xf7\xdf\x84\xb0\xd7\x82\xa1\xc4\x15C\x89\xc4P\"14\xe5\xa6\x10\x81\x97N5\xc3\x88\xf7\x8a\x04\xf0\xa3\x1f\xc0\xabo\xe7 ,\xc8\xf7\xeaZ\x90\xef\xcf\xc40\xe2\x8e_\xda\xc9\\\x1b~\xfd\x87\x91\xa8\xc4\x9f\x8e\x88\xf4Lp\xba\xcfT\xe8\x10!\xcc\xb4\xf1\x10\xcdu\x14,D\xbd\x9fg\xff\x95\x88\x84.1\xa6\x87\xec\xfa\x89x\xc6\"z\x8a\x93En}\xab@W,\xd1\x8f\xc2\x00:vr\xb1\xb5\xbc\xb9\xcbo\x1a\xa4Xv5\xf5rZD\xd7\x02\xfb\xbf\x06\xd1\x1d\"C\xdd\xf6\x02\x14\xe1\x95\x15\xb7p\x8b\xf3\xa4\\/\xd2\xe6e\x89\xde\x95\xb6\x11\x02G\x0e]\x18\xa0zI\xde%o}S\x0c\x1e\xf7r\x04\x07<\x91\x0bG\x89\x14Q\xa2\xbc9\xe07\x07\xcd|\xf9\xeaepYt\xa0 \x95s\xb8\x9a\x86\xe0\x9d\xf9\xd1+\xf3\xa3g\xe6G\x98\xa3\xcaK\xe3\x00N(\x13-b\xe5\xcdoT\xb0\x86\xb1\xe0A\xb7\xa1g\xd4\xb0V:\xec||V4\xea\xec\xf3\xb7\xe7qi\xf2\xb1w\xe6\xa8L\xe0i\x9e\xe6Eut\x1b\x9aW7oep#\xaa\x89S\xae\xcc\x85\x89\xaf\x07\xe5\xdfRg\xa1\x89\xd9\xac\xcf\xc4I\xf9[J&Z\x95\x15\xef\xff\xe6Me\x00\x15}\xae~\xb2R\x99\xa0\xda\x06\xcc\xd3\xec\x1f\x93\xe5\x8a\xaeQL.~\x0c!\x8f\x85\xa8\xfd\x1bm\xa6<\xadM\xd5Qc\xdc\\\xb4\xd2J\xcd-\xd4\x7fS\xacZy\xfc9N\xcec\xf8L\xd6\xd0\xfb\x1bl\x03\x85m\xf8[\x0f\x92\x18\xd8/\x89\xc7\x06#y\x05z[%\xf8D1\xfd\xb2\x16\x87\x16)\x1c\xf4\x86\x15cBu\x892\xa9\xd7j\xc1\xadJY\x08e4%\xce\xc1~\xb9\x0e\xcd:\xcc\x955pT\xae\x1b7\x8ey\xa6\xc48\xfb({\x8f\x9a\xf8I\xdcT\x01\xcd\xe2\x00\x16\x0c\xc7z\x7f\xff\xfb\xf1\xf1\xd1\xeb\xd7\x1f?<\xf9\xe1\xd5\xe1\xf1\xfb\xc3\x0f\xc7\xc7\x7f\xff{\xaf\xe9\x08\xb2bog\x0eJ\xa3y;\"\x18\xaa5\x91z\xb5& \x05Y([j\x88\x91\xcd\xe5\x87\xa6\xf4\x8eg\xa0^\xae\xe8\x9a\x87O\x17`tSDL\xdb\xf7bU\xc9\xb5\xb2\x04a\x94\xd9\xeck\xe5\xebb9-\xca\xb3z\x97kJ\\\x93p\x9fY\xe9\xd2\x0c\xf3\x0ex36\xdei\xec\xe9L5\x86v\xd7\xdf\xa0\xd2:\xe7*\xad\xd3\xb8\xd4d\x9d\xff\xbfM\x93uj\x87_\xa1\xee\xd3\x14XT\x7f\xad\xe2\xd1\"\x96\x0et+E\xa9\xb5*\x95Z\xab\xaa\x82I\xfe\xac>\x10\xac\xc1*VuV+\x17\x85\xcf\xca\xa6\xf0Y\xb5)|V\xb1\xdc\x870\x84\xb3X\xdc`[\x11Q2\x00\xe2\xadcF\x9c\xfc\x00\xd6\xd7\xa7\x11Z\xff)\x1a\xa1\xf5uj\x84\x84\xff\xbdM1\xb4\x8eK?}N\xb9O5\x94{\x19\x07p\xcc\xf6\xc9\xda\x81\x16\x9ft%l\xc7\xff!\xc2vn\x85\xe6\x92\x13\xb6%\x1b\xefI\xec=u/\xbby\xf1\x0d\x84\xed3'l\xef\x15\xc2\xc6n\xf5\xf38\x9bG3\xfad\xb1p\x8d\xe6\x7f\xef\xac\xe8~bWt\x1f\xc7\xa5\x83\xed\xb1\xba\xd7\xcecqC\xec\xb5\x13\xdck\x17q\x00\xe7\xd4\x0f\xe0\xe2\xfa\xf6\xda\xc5u\xee\x8a\xf74\x9c|\x86\x11\xdb\x10\xe3\xe6\x86\xb8\xb8\x82+H\xd5\x18?'\xe1\xb4\x89\xcf\xa8\xb7\xa2JRn\xea?\xe4\x89\xd7\xe9\xce\xceC\x1f\xbf\xe7^U\xe6\xbd\x00\x07 \x92\xd0\xe8\xe2\xfe*#_\x11\xf2\xb9\x13\x80\xd8\xa8K\xc3!\xfb\xa5\xc9\xde\xd1\xe8%\xcf\xe6m\xbd(9\xbe\xe5\xfa\xbai\x1d\nM_\xe1L\x82\xbb\x7f\xbb\xd1N\xa00\xc0l\xe0\x01\x02\xb3\xfe\x16\xec\xc0\x80A\xfc1W\x1b\xee\xec\xf8\xf8\x99\x89/\xc0\xcc*E\x1b\xa3\xd8\x90\xfb\x90-X}-\xd8\xa5I\xb4\\\xc5GC0e\xc1i\xe3z(\xf1V\x8d\x8a\xa1\xfcn\xad\xfc\xb9p\xed\xff#\xd6\x8b'\x8d\xc5{\xc2H\x91\x83`\"\xd4\xc9\x98\x1f\xda\xa3\xbe\xcf9\"\xfb\xfa\x959HZ\xa4\x16d\xc0\xf5\xd0m\xd9T\x05o_\x84\x07u\xe0\xd0\x08\xcf\x92gB\x01(\xd1\xc0P\xf5\x18\x8a\xf5o\xa6\xce\x87\x06\x19\xc5;E`\xaci\xfdIm\xfd\xe3\xab\xae\x7f\xd3\xfd\xba\xb1\xfeIke*\x15e\xb3E4!\xde\xc0\xde\xa68\xa6\xba\xb4\xcb\xd0\xd0Q\x1d\xa5\xeb\xca\x05\x83\xeb\xdd\xe9N\xd1Z\xeb\xdd\xa7\x91\xac\xae2\x8b.V\xa6o\x8d\xcf\x16(U\xc3\xa0.x\xc5X\x11;\xd8\x18\x92\xb8\x1c\x99\x8c\xa8|\x16\x8e\x1e\xc5`]\\\xc1b,.\xa2V\xe95h\xb8_{\x95\xa6\xab\x16\xaa\xa2\xa3sZ\x1f}\x99\xa6\xc7\x18\xe3W\x9cLi\xe5d\xc22gQ\x95d\xb1\x83\xe6\xa1\x8fw#\xfb\xe9n_\xc4\xb4\xb6\x88\xd1\x95\xd6\xef\x8fXWa\xba\xb6\x86\xdd\xd4V\x85.\xa9\xa9\xb9R\x10\x14\x0e\xf0L*\xa8\xbd2\x99\x8ea\xc8\xea\xcc\x06\x06=\xd4\xc5\x95\xb5\xa0\"\xee@]\x92\xf2hQ<\xbflH\x11\xf3=\x97\xd6\x10!\xad$\x13Le0H\xac$\x13\xc4o\xd2\x16&\xd0i\xb2n:R\xa7\xd9&z\x1db9S\xed\xd9\x97\xba\x9d\xdc\x8e\x91 \xad^\xff\x92\x9fH\xdb\xe2\x07D\xbf%\xa0\x03\xee\xd9\x8f\xcb`\xb2\xfa\xeag\xc8[je\x1e\xda\xb2\xf3Y3\xf3\xb9D\x05\\\xa0\xd6\x15\x85\x9a!\xbc\xd7H\xef\x87q\x00Otz\xd7\x0fO\x9e\xbe4h^\xdf\xb2\xf7/\x1c\xa4\xfd?\nw\xbd\x96\xfc\xa15\x8f=kF\x99\x92\x19\x8eTN8\xaa;\xeaE%\xfdK\xf9\xaf*upK\x19\xf8\xd9z\xea\x1er=\xc0!\x03\xc8\x1f\xb1\xd7pO14z\xd4..\x16ho4K*\x87\xd3\x08ut\xec\x9f&J\x18!\xa9\xa6\xef\"%o\x1c\xfb\x01\x94.\x93Jh\xc4\xfb\xf5\xf2$Y`\x85\x04\xdb\xf3z[\xb4\x06\x11\xf5\xd7\xdbx\xf4\xa4P/\xbeu\xd1\x06\xbe\xb5i\x03\xdf\xb6i\x03Y\x17\xaam\xed\x8b\x9aE%\x80\xb8\x7fT\x12\xc8\xaf\x01[\xa6X\x97\xfeK\xa4\xc4vH\xf3\xf5\x8cz6V\x04\xc4\x82S\x91\x1b\x97g\xda.\x8f\xf6\xcdFk\xa3\x87\x1acP\xe6{0\x98\xde\xac\xa6m*\xb0GOc\x1a+\x88w\x9b4\x81&G\xf1\x94\\\x90\xe9{\xf2\xc5\x010\n\x89\x7f#\xa2\xce\xddz\xf9\xe9\xbd{\xeb\x08\x1cm*l\x17\xcd\"W\x87pa\x84p\xefn\x1d{!\xa7,\xd2\x94]\xd2I!\x17;\xf6\xde\xa9\xdb\xec:\xbb\xed\xbcI^u\"\xa6\x9d\x9a\xcf\xaa\xb3R >\xce,\xac?/WY\xaa!\xe4\x9c\\ \x052\xae\xee#\xbc\xb86\xd0\xbf\x8a\xb2\x0eK\xbe\"\xd7\xd5/7C\xb8\xf7\xdc\x1b!\xc7r\xb2 \xe3\x9eK\x0f\xa5\xa9\xc3\xb1\xfc\x85Y\xbb\x04\xdb&\xc6\xf2\xba\x9f\xbe\xf2\x12\xc3\xcc\xb91\x8f\x97\xd9e\x94?\xc5\xb0\xc7}\xce\x14\xc2\x01\xe4\x98\x92|\x1fB\xea!\x7f\xd8\x8f2\xc1'J#\xe0\x88\x8e\xb5\x94[\xbd.}wOo\xf5*\x10\xc0\xe2\xf5\xad^\xa6\x8a\x1dP1\x16D\x0d+\x8f\xfd\xabA\xed+\xfb\xb8\xcfD%\x84h\xb4\xebP\xe79)\xed\xad\xb8\x08\xa1\x97\xa0\xc7\xae\x0c\xc4\xcd<\xa5\xd0j\xb3\xde\x96\xbc\xcc\xd9W\xcfD\x95(Q\xfdBW\xd7X^\x92\x92ci\xe9!L\xeaT\x14\xc7\xc4$N\xf9T\xd2S?\x90\xf7f\x8b\x90R\x12{[\xbb\xc2\x12\x83\xdaEM\xd1\x13\xebV\x00\x01\x1c%\xcd\xa8\x13\xba\xc8-\xc4\xfd\xa0\xec\xc0\x87f\x1fJ\x85X\xd86XN\xe4e\x06\xf8%\xaf\x8d\xd6,g\x8b\x0f\xa5\xfaV\xe3\x0e\xed\xc6\x8eH\x8f^\x97\xb4\xc9*\xbbV\xf5 v\x897\x98\xda\x12#k\x0b!4n\x91\x98\xa6Qe\xac.CU\xf4{\xef\xdc\xba9#\xe9\xda\xf1Lq\xe4\x82cK*\xf2\x16.8\x0d\xc0V\xf2\x13\x8a@s\x8e\x03\xbc\xd6\x11~\xa1\x14Z\xe3Z\xa2\xad\x81\x01\xf8uG\x12\xd0\x03\x86\x13]G\xc8\xd4O\xae\x1f\xd4|\x82\x9a\xf0'0\xf5\x19Ok=\xbaT\x8db\xc0d\x9fbNT\xcf`\xde\x00UOz\x80 M\xf4\xe5\xc15\xc3\xe2Z\xa1n\xb0\xa8 KP_q\xeei\x89y\xbb\x89\xaf/S\xa3\x19\x08\xe3@\\6o\xbd\xef\xc2\x92\xc2\xe9!\x1c@\x0f\x19\x1f\xd8\x87^\xd03c2#\xc1=\x8d\x1eU^\xdf\x82\xe96\x1c\x8fE\xa9\xfe\xad\x01\xba\xacn\xa3\xd2\x14\xffE7\xa3-YBJ\x99\x14\xaei\xe1E\x83gN\xaf\xc9Y\x82\xd8\x01N|\xdbg\xb2\xfe\x06\xf2\xf3\xd4iE\x97\x159\xd4\x01\xad\x8a-VM\xd9\xe9\xd4\x19?K;n\xb0\x00\"\xeb\x02\xd7p\xad\xe1\xa0\xf2\x08\xf60?\"\xc3\x14\xd8\xe7\xf9\x90\x1a\xdbAU\x03`\xcdZ\x1b\x01\x84\x03\xf0\"A\xe5\xb09_\xb4K\x8b\xd2\xb7\xbcb`b-\xc8\x9c\xba\x83\xec]t:\xa7\x1d\xe1& \x93\xca\x08\x95\x86(;}\x12\\\x8f0\xbd\xa7F\xbb;\x98\x06\x8d\xbd\xb8\xe3n\x81Tj2\\\xa7\xae\xd0\xb8|E\x0c\xfer\xb5C\x82q#\xddz\xe4yYx\xac\xdc\xbb\x18K\x85\xe9\xb2`\xe8\xbaJ\x9djL\xd4gf\x0c\xc8\x01}?(u\x7f\x03\xad\xf9\xd9\xa9\x97\x93\x9c\xbe\n\xbb\xa8\x07\xf8\xbeF\x0f\x99\xdd\x00v\x06N\xbdD\xd9\xe1rE]l\x0c\xa2\x17\xf5dR\xe4\xf4\xba\xe4\xbe/\x96\xb1\xca\x8c:\xf0\xa2&#\xa4\xd3l&I\x1e\xd7w~\xcb|\x9ex\xb4T%\xf1m/\x04X\xfeq\x07\xbd\n\xf6\xfe\x83+{*\xfaw\xa5R\xa0P\xaa\xaf\xd4\xf3K\x83\x94-\x03\x9eD\x0d\x1d\xf1nc]\xf1{\x917\xc1+\xeb\x94\xf3J\xe2lW\xaa9\x8f\x9d\xa46E\xe6\xd2\xb3\xbb\xf2\xb2\x94R\xc1\xb3@5\xb7\x19*\xe4]\xaa\xe7\xad\xcb\xea\x91/y\xb8\xe8\"l\x9d\xd1\x82l8\xb5/\xb2f:l5\xd5\xe1T\xbf\xb6\x18\xa8\xd5?\xc6ty\x95\xe2L\x94\x96\xf7\xed\x9cb\xb5z\xeb\xcf\xb1_S\xb5Z\xcf$\x0e\xc6A\x0b\x1d3\xc3@\xa2\xa0\x1b\x05\x8e\xaa\x94\xb7\xd5\xfc\xa4P\xb0\x00\x12OG\"\xe5e\x18\x7fgQc\x1ev\x913\x90\x0e\x89\x84\xcbK\x1eC\xb0t\xec\xe5\xa8\x0b\x0d\x97\xfdp\xaf\xd1.=E\xd9\xfb\xfc\xc4\xb1\xc0g!\x03\x0eM>aE\xa5\x14nu\xe6<\xba\xa2\x13r[\xda\xe2<.\x12\xe3t\xc8\xa7\xa5\x9f\xe2\x8a\xf1B]&\xe9\xd9f)`\xa6\xcc\xd2/n\xba\x9fj\x9f\xc9\xfa\xed\xac\xc3\x90\x8aC\x8d1s\x9d y\x0dFB\x1eq\xee~\xc4W\xb42lW?mH\xa9.\xdd.\xba\xab\xd1\x1a%\xbf\xfa\xc8\xcf\xba\xf7\xf7\xf2*\xebb\xe0\xbdq\x8d\xb5\xb9\xac\x9a}/\xc3\x8b\x0e\xbd\xbe$\x9dT\x18\xcb\xf0\xa2\xeb\x99\xfa\xb2\x92\x8f\xc8\xa9\x137\xa3Yc\x06p\x00ob\xee\xc2\xf2\xd5MPZF\xf1\xd5\xa7\xc3\xbb#\xbc;\xd7\xb9\xa5\xa43&jC\x1eA\xdf|\xf69Zu\x80\x9d\xd2\xfe\xeb\x90\xce\xfb\xcb\xf0\xc23T$6tV\x17\xbe]\xa5\x04\xc3\x1ecMzT\xb9\xe3<\x90_\xe7\xd1\xa2\xa3\x99\xa1\x18\xcc\xefW4l|\x8eV\x1fc\x1a-\xbau\xcb\x81.\x87\xdcM\x05\xc5\x13\x82u\xeb\xafi\xe5\xd0d\x06\x03}\x7f4\xfcL:,/\xad\x18 \xae\x80R\xac\xbfkF)\xd6dw\x94b_}\x0bJ]E\x92\xf8\x87\x13w\xab\x940\xfa\x18\xa3\x9a\xb7\x92\xbc\x0d#+[\x18^\xc9NS\xa3vY^L\xa4\x8b\xaa\xb1yJ\x81\x96J\x18\x08vlo\xedL\xd4\xf3o)\xfb_0n\x1a\xc1\x87\xa2J$l\x9b\xa1\xd2L)\xfd\x14\xdf\xde\xbc \xdb\xdb9\n\xa9\xa2AC\xa1ry]\xfa\x01\xe4\xc67.\x03P\xcb \xfd\x17\xadJ\x92vY\x16Z\xf1\xc6b\xdf\xd9\xe5Zv\x85\x16\x8f\x12y\x89q:FY\xaa\x17\xfaN\x85\xc5L\xdb?\x00\xf7\x88G\xf5\xb2F?\xaa\x97!VB\xbd\xa4\xe9&o-N%/\xae\xc3\xaf\x14\xa9\xb2x\xa9\xcaKF4R\x11\xc3\xdb\xfa\x01\xbb2\xe1\xac\xea\xf6\xf6\x04\xdf\x1e\xb4\xb8\xb6\x82n\xafM\x02\xc8P\xe3y\xc0H\xdbp\x08\xef\x84\x98\xf3\x9cad\x86/\xf04\x7f\xa1\xf0\x0c\xf9/X\xdc6\"`\xa5\x00\xda\x87\xdd5\xaf\xec\xe0\xb9*SQ\x1cZ\xdd\x98\n\x19C\xd0\x91/\xed.\x86\xcd\xc3l\xfe4\x99vpt\xa1\xf32\xbb\x00\xd6e\x9a\xab\xd9\x06\xday\x04(\xb6\x17wP\x1e\x0ea\x00\xb7`\xb7\xd8h\x16\xd2%\xcd\xa4\xb3V\x05\x9f\x9b+\x7f*\x8a\xdf\x0e\xf4Uo\x8b\xd7\xf8\xc0\x9c\x16\xbf\xf6\x0d\x1b\xed{\x14\xd2o\xdf\xb9\xbd\xf7`p\xff\xf6\xdd\xdb~P\xdc\x86G\x8f`p\x176@\xe0\xf1\xe3\xc7\xb03\xb8\x1b\xc0\x9d{\x83\xfbw\xee>\xd8\xfd\xbe\xfe\xdem\xe5\xbd\xdb\x01\xdc-\x9fc:w\x8f\xc06\xdc\xbe\x7f\xef\xce\xde\x83\xbd\xc1\x83{\xb0a0\xfd\x17\xdb\xd2\xff\x12\x9f\x0d\xee\x05\xb0\xb7w\xe7\xde\xfd\xbd\xbd\xbbE\xf3\x87\xe2s\xec\xa6x\xf3v\x00\xb7\xf7\xee\xdd\xbbs\xff\xc1\x83\xdd\x07\xbe\xda\x84e\xcby*\x7f\x10c\xad\xcb\x83\x8eP\x83!\xdc\x1e\xc0w\x90\xc26<\x8f\xbd'\x147\xcd\x13\xea\x11\xdfg32w\x0e\x8e\xbbS^\\+~\x85^\xaa\x93r\xe9\xa6\x98\x11v\xd4\xdaA\xb7\xc6\x1d\xdb\xf5\xb5\xe5\xac\xa1 \x88:RX\xb9SW\x06\xb3\xbd\xf8\x9a''Sr\x01\xa8o\xbc\x8eG\x0b\x19\xe0\xfd:\x1e=c\x7f\xbf\x16&\x8b\x8c\xdd\x12\xa1\xa3\xfc\xb6\x08\xac.\xee\xab\x81C0\x84W1>\x89\xe2l\xc5s\xe3\xe3'\xef\x93<\xad\xe6\x95\xd1\x81\xac\xa6D\x12\xee\xad\xd5\xd9a\xeb\x93y\x18\xc5\xbcma\xcb\xe4\xb7\x93\x98\x86\x11F\xa5\xe3\x10\xb8\xee\x12c\xc4S\xdd)9[D\x1dB#\x0b\x01\xe5+1\xae\x84N\xed\xb3:l\xb8\xf7\xbbZ\xff\xcdT15\xcb\x02V\xe1\xae\x93a\xb5\x90&\xa4\x93\xc4( \x1a\x9b\x8bO\x03p\xa3\xaab\x93t\x14\x1a\x97\xe1\xeae\xd5\x07\xd9\x15FW\x00\x02[\xf7:,\xda\xc4\x8c\x06,x4\x82\x05\x08\xd8\xc9Uv\xeb\x87\x18\x93\x9b\xb4f\xeexj\x06\x92<\xd5\xaa}\x19\xda\xf9\xb9\xb5\x9d\x11 \x80\x8e\x9d\x1a{g \x87\xf5\xb3\xb9e\xb3mQ\x97d\\\xd0\x84\xa7aXo\xaegX;\xd7<\xacW\xf6a\xf52\xa4\x81\x15\xe3\x07\x1c\xc0O\xef\xdf\xbe\xe9\xf3G\xd1l\xcd\xd5\xb6\x82Z:\xe6\x16}f%\xc0\x87\xc6L\x9e\x86\xe6\xbe\xb6b\x10\x85G\x05\x07G\xe11\xfe\xbd\x83\xec\x9cS\x07\xcf\x1d:`\xac\xcf6\xec\xdd\xbb{\xe7\xce\xed\xbb\xdf\xdf{\x00\xdb\xe0Q\xc6\x90\xdd\xf3\xf9\x9f\x8f\x1f\xc3^\xf3\xf4\xad.\x94h\xedCT\xaf\xc2h`\x95\xcb\xe5\x95|\xb3\xad\xaeu@J\x1b\xdeV\x82\xa5\x00\xf8\xba\xf2\xd0R&\xa2G\xbe\xaf$-\xc5f\xc5}k\xcb\x97\xac\xf7\xc0\x96GC\x85\xa8\xdel\xe7\x0c\xd2\x80[\xee*1~\xd8\x7f\xeb\xe4\xdd\xed\xa1W\xb0\x9f\x15\x90\x8d\x18ds\xf8\x1f&;\xb0\xad\xc7p \xa9\xb8\x00c\xcc\xef>\x7f\x07\x0e\xe09\x9b{\xce\xd3\x91\xa2\xd5F\xfe\x8cd\xca\xd86\xf0[\xad%\x86T\xe5%\x95p\xde\xc6\x0b\x12\x9e\xb9p^\xd2,7b]\x8c5\x87\xb2oY,\xb6/op\x02 \xf5/\x01\xdc\xe8'3t\xa65~\xc6\xf3\x93(\xde\xf9\xd6s\x96\x14\x1b\xdf+\x88\x81\xb8\xc7\xe8\x80\xc8H\x13\x94\x94\xc8\xcd\xc7\xa9\xab\xcb\xdd\x92z\xbbj\xcaj\x97>\xae\xe0_\xc7\x0e|\xc7\x08\xd5\xebv\xefq<\xf9\xbf^I\xafzC\xfe\xf1,\x0el\xc8\xe6<\x86_#:w9\xa7\xa4\xcc\xa3\xf6b\xc77\xc6\xd3\xc9\x00\x81\xe6\xf8M&\xcb\xca\x9dK\x9fQ\x842=\xec\\\xea\x1b\xd4\x9bE\xdd\x96#t\\o\x0e\xbf3\x8f\x85\x18\xc4kA\x0b\xb3\xb2\x93\x9cv\xd5|:\x9a\xaa\xd3p=\x9b\x0d\x9b/s\xb89@;Q\xf2l\xf3\x12\xda\x15+\x81\xfaX\xb1$\xa8\xb7+&\x85\x17\x81\xaa\xa4\xf5\xf1\xde\x8d\xca\xf2\xf1{?V\x9a\xe6\xf7N\xa8\xe6\xe3s\xaa\xf9\xfa\x82\xd6?oBE\xe6\x97\xdb\x87\xb8 W\x04\xea\xcb\xe6\xfd\xa7\xc9bA\x10\xd2\xfbp\xac)\x90\x81\x01b_5\x0f\xd4\xb4\x92G\x1a\xe7 \x9e\x97o\xa5y\"R\x05^hGI\xf7!\xd3\xe5{\xbb\xbb\xd3O\x9f\xf2\xe9\xfd\xdd\xdd\x1d\xf6\xefl6\xfb\xf4)\xdf\xbd\xcd\x7f\xee\xde\xbe\xc7~\xce\xc8\x1e\xfe\x9c\x91\xbd\x19~3\xc5\x9f{\xbb3\xfet\x97\xf0\x7ffc\xd3\xe0\xcc\x14\xad\x100(\xc9\xa8J\xc7.\xbb\xc1i\xb0\xfb\xa0\xc6\xeb0.\xb2wx\xb1\"\x13J\xa6\x10\x16\xed\xf4\x14c\x8f\xbc\x07\x89\x96\xb0G3\xf0\x94\xf8\x88-\xc5D\xb0\xd9\xc8\xecA\x1cE\xb4\xaf\x11\x1f\xe8\x9e\x864<>\x16\xd9F\x9bX\xa9h\xf1\x84\x14[\x83\x0c\xbb&\x9a\x1aTQP\xb9]\x14\x82M\xaa\xf7yQ\xc4\xbcz\x933\xc4a\xf5f\x86ofUB4\xe9\xb6:\xb7\x1f\xe8\x97\xe7\xce\x83\x96\xe3\x18\xa8\xc8\xcb\xc1Co\x1b\x8e\xeb\xca\xe6\x15\xc6\x0eOT\xe6\x04R\x9c\x80\xf2\xd1V\xc4\xb8\xab\x9b7\xd9\x1f\xb1\x8fJay8\xc6\xec\xaf\x98\x1dA\x95\xfe(\xeb\xf2\xca'\xfe\xed\x07\xb7\xb5\xb3\x1e|_G>\x81\x94\x0f\xeei\x90r\xd0\xc4\xc7\xbd6\xd2!k\xb9pG\xe1\x99\x0e\x15\x17\x98\xb5\xf8&\xe4\xcd\x03\x17\x0b\xb2\xca\xb2\x8c\x8d\xa7s\xc4H\x9dY\x8a\x11\xa8\x15\x03\xe4\x1c\x81\xec-\xd8?sx\x0c+;]F\x9d!\x0f\xd0\xf5\x9b-bAK\xfeX\xa9-6\xc5%n\xb6u\x06C\xd8\x194G\xbd\xe62t\xe3\xfe\xa9\x00C\x08\x07|'\x82\xf4\x8e\xae\xb6\x8dy\x01fx\xfc#\xa9\x0f\x80\xff \xbc\x06\xe8\xf6\xf6\x19<\x82\x956\x11\x00\x1b\xd6\x92\x81ttf\xe0n\x8e\xb1(\xcc\x99\xc6Q\x9c\x01 \xf3\xb1\x89\x13\x18\xc2\x02\x0e \xf3\x8e\x03X\x06p\xc6\x03\x91py\xf7!\xf3\x96\x01\x1c\xe3]\xbe\xfa3\x0d?SK\xe2{b\x92\xae\xd9{'>0\x018\x8aM)\x0b\x10\xa2\x03\xfd\xb3\x93\x94\x84\x9f\x1bO\x9a\xe7\n\xeb\xe8\xd46\n\xb6e;\xd8\x0c\xf0\x93\xc4;\xc5\xd7n\xde\x04oY\xe6\x8c\x9e0\x08Q\xb9-f~\x89K\xa7<\x16\xdf\x18\xdel\xeb\xd1\x06\x050B\x02\xb4\xd0\xb8\x04\xb2\xc8\x08Nb\x89\x0bt\x8c\xfbh\"\x96\xb6\x18\xb8a8\xdf\xba \xda\x13y&N\x10t\xba-~0\xfc_\xff\x9f\xea\x876n\xc8H\xa5\xeas\xa9\xd4_\xdb\x11 /%\x11\xa7\x98&o\xbf\xa0Ml\xdb\xc5\xf0\x08\xd2\x87\xcd\x95C\xd3\xb8GG\xf1\x18\x01\xa7r\x86\xbbZ\xfeOI\xef\xd4\x91\xcc\xdf\x19\xd4y\x83\xe2pkRyQ\x91\xa98^\x9b\xf4\x1e%\x19\xa5\\S\x93\xfc\xa3*\x08\x9f\x1de\x87q\xbe\xe4\x8a\x9f&{\x92\xda\xad\x1db\xe2\x85\xb8VE\x06\xcf\xf7\x85 \xde\xae\xec\x13\xad0\xe6\x9bak.X\xcc\x00z\xec\x0fBz\xfc\xc4\x0d\x9b\xf7\xab\xfd\xe9\x8f\xb4\xcce),\x99\xf2\x15\x06Qch\x10\xeb4\x18h\x9e%m*\x97-\xd2\x8f\x93)aB3\xdek6\x81\xab\x89\xa2w\xb3\x1d\xca\x8d\xd4\xac\x1dZiG\xa3sbk\x9es\xe0\x16\x90A\xc1\xe4\x00\xd2\xfe\x0f\xf9lF\xcaS\xab\xf95\x03\xa3\xc7\x8e\xb7\xb0\x1fe\xb5\xb7Q\x8a\x8d\xccJ\"E\xe2\xa9(\x89\xee\x0f\xfc\xc2X\xdc}\xdf\x1b\x988\xda?''\xabp\xf2\xf9\xe7d\xb1\x9eE\x8b\x05\x0fY\xe9O\xc9*%\x93Z\xedG&O0\x96t\x15\xd29k}4\xc6L\xf1\xf3h1MI,\xbe,~\xb2\xe7e\xb9\xb4)\x99E1\x91\xfb\x0bqr\x91\x84S2\xed\xe9\x14\xab\xa4\xd8a\xfbz\x0e\xa2K\xd1\x19\xda_4\x1e7\x95\xd4\xe6qF\x7f\xc9\x18#\x8716Wk\x08\x83J\x02\x9b\xced\xd4 #\x0c\xea\\t\"\xee\xdf\xd1p\xcb\xb8\xdf\x92~\x94\xb1\xfd4\xe5Q\n\x95\x97\xf8f:\x80\xc8\xcbQ\xe5\xa4\xa7;a\xb7\xb1\xdf\xdd\xbd\xaaZ\x91\xf2\x83\x8d\xd1\x81\xb4]\xb9\xd8\xbe\xb74g\xaa<\xc9\xe5;Z\x87\x17\xa9!\x10\xfa\x05\x91E\x90\x8e\x85;_\xcd\xdf\x84p\x8f\x92H\x16'\xf4\xe2\x9a\xa9\xeb\xf2\xaaX0\xb8_\x97\x818\x16|\x7f\xbf\x15\xc2m\xec\xc4.\xf72\xf0\xb8\x1a\x88\x07\xf1\x17\x9cD\xa1X\xe1\xd2\xe0#H\x1e\xfa<\x85\xe8(\xf2\xc8(\xde\xde\x1e\xfbc\xbdv\x8f\x7f!\x082-h\xebU!\xa0\xd7\xd9\x0d\x1a\xd8.v\xc1^\xfd`\xe3\x8a\x8c;\xdf_\x05^bJii\x18\x8c\xc4{\x07\xc0\x90a\x1f\x12/\xaf\xb8 9M\xae\x97g\x042\x9aF\x13\xaa\xa8\xf6*^X\x0d?\x11\xe9j\x13{\xdf?\xa8\xebF\x94\xe9\x1c7E@&\xbas\x98\xdd\xfb\xbe\xf6\xe5q\xff\x1d \xa7\x8cN\xbe\xa7\xfc@YV_`\x80\xbe\xeb\xf7\x0f\xcfHL\x0f\x97\x11\xa5$mv\x10\xb6\x81Q^%\xd1\x8f2Jb\x92b\xd1M\x8er\x8d\x0ft\x96{\xb1%\xea(\x01\"\xb88\xf6\xee\xef\xfa\x82\x03h\xbe1CA\xfdc\x14\xd3\xfbH\x07\xd9\x9e\xad\x9c\x9f\xcd\x99-85\x1b\xd4\xc0\xb6\xe8G\xf1\x9c\xa4\x11\x15J\xaf\xbb\x1a\xf3\xc0\x8a\xa3\xdd\xdd:\xb1\x06\xa12\xd0 \xd5\xec\xfe\x8am\x9fU\x7fJN\xf2\xd3Er\n\x07\xca\x0f\xaf\x97\xd1\x94\x84\xcb\x9e\x0f\xfbmC\x9f\x06(\xfb\xb3!\xd4w\n\x08\xe1\x88\x81\xb2\x8eK\xe5\xd4\x98X]7\xf9\xb3\x86O\x19\xf7\xd0#i\x9a\xa4=\xc6\xbd.\x92\x8c\xb0?\xa6$\xa3i\xb2f\x7f\xae\xc2\x9c\xdfKI\x96/Iol\x8a\xd6Y\x1a\xd1%\x01\xa1i\x8e\xbd\xbd\x81\xa8a\x81b\xab\xae\xbe\xa0$\x16\x04\xa28\xa3a\x94w\x86\xe5S\xdf\x0f \x13j\x85F\xb6?\x13 OJ\xe5\xb8)\xdaS\xe1!h\x0d\"M\xb0 \xdd\x147i{ym\x8f9q \xa8\xaa\xe2{X\xae\x93^\x89\xc7_\x14xfSJ\x9e\x15\xc5\xdd\xc4\xcb\xacu[*\x15\xce\xc3J\xaa\xc4\xa0N\x04\xdd\xe2\xaa\xd1\xd8\x0f\n\x9d?l\xb3\x86\xab\xd4\x17\xf6\x8b\xaf\x0dJT\xed]RR\xae\xdd\x00\x0e\xb5\x86I\x06\xba\x1c\xeb,zH\xb3\x11\xdf\x9d\xe0\x8aP\xd0\xcf9\xe5Uy&\x85F\xc4KQ\x15\x92\xaa\xdbf\x86\x94\xa6\x19}I\x94\xb8\x83a!\x0c\xd5NK\xcc\x12\\u\xaa\xe8\x1d\xc5g\xe1\"\x9aB\x9c\xc4;\xbc\xd9[\xe2p\x98\xcc\xf3\xf8s\xcf\xb7\xc5\xd3\x18&\"\xb6\xb5\x06n9: \x06\\*A\x02\xee\x15\\L\xc2\xe0\x99\xd7\x86,\x1c\x89\xc4*?\xc6\xc8\x1f\xcf4\xff\xfa\xc7e\xa5\xf9\x9f\xa5j\xf3\xed\xcc#<]\xb1bND\xd8\x10\xa7\xe4#bn\x13\x0c%\xd7\xe3\x06N0e\xa7\xb4z\xe45\xe7\xcb\x16B,\x02\xe7(\xfby\x9c\xcd\xa3\x19\xf5|\x08g\x94\xa4@\xe2)\x10\xc6\xf5\xf7\x10\xd7\xce\x11\xedd:;\x04\x16GU\x97\xb6q\xcb\xc8\x86\x0f\xdf>\xe7M6\x88C^\x1c\x19L\xfa\x8f\x19\xb4 &>\x92\x9b\xf6<\x8d\x84\xae\xbd\x0em!\x85\xcb\xb5:\xa8\x8cw\xc0z{[\xee\x9b\xea3\x9fW\x8fb\xcbP\x1d\x90\x0e\xfb\xea\xaa\x83\xb6\xb5\xda\xa2\x02LH\xb8\xab\xdc\x04n\x92\xa2HV\x8d9,\x99.j\xa4#\x97^\xeeF\xe3\xcf\x15\x1a\xaf\x1b0)\xb8\xa8\x9b7\xe5\x1eVh\xdf\x16\xe1l\xd1\x01\x9b\x02_\xebiHC\xb6\xd4\xa8\xf7b@\xf3v\xf9\x9a:\x12E\x8e\xa4\x05M\x95\xc8\x17\xb36t\x94\xb6\x02\xb8\xff?{\xff\xbe\xdc6\x924\n\xe2\xff\x7fO\x91\xc2o\xc6\x03|\x84h\x92\xba\xd8\xa6M\xeb\x93e\xb9\xc7\xd3\xed\xcbH\xb6\xbb{\xd8\xfa\xa9!\xb2H\xa2\x05\x02l\\(\xab\xc7:\xd1gw\xcf^#\xf6\x01\xf6\x9f=o\xb0O\xb0\xb1\x11\xe7MN\xef\x03\xec+lTV\x15P(T\x01\xa0,\xf7\xec9\xdf\x87\x88nS\xa8B]\xb2\xb2\xb22\xb3\xf2r\xef\x1e\x92F\xc7e\x8bJL\x9a\x16\xfa\xe85\x87\xe7\xd2}C.\xb8\x18\xd4\x9d\x1b\xa9\nU\x17$\x85\x7f\xb8wO\xf7\xba\xe0\xfc\xaaK\xac\x91\x81\xdb\x05\x0c6to\xd7\xf6OO\xf86F\xc3\xe7%\x83\n\xc1\x88\\\x8b\xdf\xe5\n\xe7Y(\xd7\xc9\xffRj\x15u\x1a\x0f3&\x0d vdA@\x11D\xe3\x06.7N\xeb\xb6ix]\x8es\xdf\xc8\xec\x08\xf5P\x19\xd1C\x91\xebN\x1b\xa9\x80.\x02\xd25f\xf1\xa6r\xf3,Hv\\f\xb8\xa9\xc0#\xc8>\xbbl'\x98\x99\xd1qyg\x8eK\x19\xb9\x92SB\xc5\x9fC\x81 \xdfs\x8d'\x0f\x9f\xa3\xd4<\x93 (\x87\xa2z\xc4+]\xf8\xc9[/K\xca.P5]l\xf5\x8b\x94_\n\x86r\xfaT\xd7YBd)\xa9\xd5\x9c\xda\xc91\x95\xcd\xa2\x885\x86z\xb2p\xc3j\x94G_U\xac|\x84\x11<\xdcy\xf8p\xbf\xf7\xd0\xa4/95\xa2n\xae>\x7f2b\xfe\x8dU:N\xf2#\xbb\x87d\xb6B\x9dS\xa6\xf0=(\x1f\x08\xd2\xa9\x9a\x93\xe6\x05\xf1\xa6]z\x08\x88\xb2aQm\x88a%\x80(\x07\x1ac\xa2U\x8dA3!\xcb'\xf6t\x04\x1fQ K\xff\xa5\x9dloSY\xeb\x13\x1d2F\xf7*\xfd5(\xfd\xb5[\xfa\xeba\xf9\xbb}\x17\xd2NG\x9bk\xe0\x86\x9d3\x08U \x0e\xe8!\x92CS\x9e9\xa9h\x0cz\x98\x9f\xb9\xd59}\xac\x87Bn(\xd7H\x8f\xaa\xbd\xf7\xe9\xe9\xa9*+(\xd6/l\x8b\xbe\x16\xef,\xb7XtG\xf7\x0d\x9bI\xce \xb0|\x1f\xef\xfc\xc9\xa5}\xc8#/\x1eV\xdceM\xf3<\xd4\xcf\x93\x0f \xc4$-\xe4.\x18\xc3!\xbf{\xd56\xa0\xcb\x1b\xe3n!%}\x08\xb2\xe0\xaa\x86\x04\x9d\x8e\xf2I\xfe\xa4u`2u\xfc\x93\xb1\xe3\xd2\x05Ln5FY,\xc1z2\x86K\xda\x7f[\xa4\xe0!I\xc10\xea\xf6\xd7\xc2\xb6\x96\xde\xf5\x05\xa1\xab\x86\xf3@\xf5B\xcf\x92\xd94\x17m\xfb\x8a\xce\x9d\xc7Ny0\x0d\xc0\x1a\xa9\x89\xbfL@\xb84\xaer\xae/\xa1\xe0M\xfd\xc9\xa5n\x9c\xad\xfax\xd9\xbc\xc2\x02\xdb\x99\xe6M\xd7\x13\xe2\xbb^1G\xaa\xca\xb4\x1c!Q\xb3\xcd\xd1\xd1\x05u\xc9\xa4\xe5\xdclJ\xaf>\x97\x08 \x8a-l\x8b\x8e\xa7\xb4\xad\x1f\x97\x07\x99\xa7R\xe6\xe3s\x1e+\x02\x8fi\x84\xef\x9a\x0e!\xe5\xe89`]!u\xac0J\xf9\x91\"\xc4\xcf!l\xa5\xec6\xf5i\xa9\x0d\xbb\xa4\xc0\x91\x0f\xa3\x9f\"?\xb4-\xbc\x13\xe9\xf3\x9eyI\xcd\xc1%\x0b\x1a\xdc\x9f\x92\x14>\xb1EQ@\xbc\xd8F\xd9&\xd4X\x94\xd6\xa9Z\x0c\x1a\x8a\x94\xed]\xf5\x00=\x00Lu$\x97H\x91B\\\xb9@[-u\xf2,\xc8\x1c\x06\x9a.\x88\x04\xe5p\x93\xf0\x96\x05\xc5\xa2\xad\xea/\"\xc4\x13Wmt\xd5\x07\xef1qlf\x15\\\n\xdb#\xf0\x8dDI<\x88\xed\x8f\x81\xc5r\xa4\xf4\xa46\xf7\x14\x08uf>\x80\xfa\x81\x82\xb8\x91\x81\xa7\x10\x15p\x8c\x8a\x13\xbf!\xb2\xb2?\x03;c\xd6I\xc5\xe7>\x95\x8e#\x18\xf2\x1f\xe5\x85f\x9b\xc7\xc6\xe9g\xb5\xa6\x96\xe2\xa9\xb4ow:\xb1\xcb\xc1\x81\xab\xbe`Zf\xfefX\xbc!\xdd\xd4\xf3\x03\xae\xe7\xe7\x02\xbc\xa8\xecr\x08A1\xc4\xcc\xa4\x91\x93\x1f\xb3\x85\xa7xn:\x1d}xc0jFA\xb2m\x17\x13\xddFw\xa0\xaam\x0e\x085)q6\x89\xab*p|\xd2\xf5\x82 \x9a\xbc\x0f\x13oF\xdaE\xe1m\xb1+(\xca\xd7\x98\xc5\xc6l\xa7N\xa2\xd55\xaa\xde\x04\xe7c\x97\x83\xe4\x8b\xe0\xbc\x1eSaS\x9c\xf7k\xc2]\xb8M\xc1\x974\xb9\xee\xf0+~\xde\xb9\xc5 K\x19E\xc3ev\xb9{\x13\x9bp\xf4\xb9\x8c\x0c\xbb\xde\xe1\x13\x7f\n=\xd95\x93)\x98\xffd\x910\x17Ql\xc7\x024\xa5\x9dB\x14\xe2\x9d\x02Y\xae\xd2k`J\xe8?i\xe6Bd%9\x13\x02\xe4\xfb\x17\x89\xfd\x7f\xabMrb\x8c\x1dj\xd6\\)=rU\xa1\x98$\xb3\xd2,_V\xf7\\\xce\xcbVD:\x9b\xce\xdej9\xa6\x93v\"I\x8fk\xbfr\xc9\x84\xd9\x93C\xd8\xe9\xe8/\xb20\x1a\xfa8\xe4vq\xc5\xbd\xaaQY\xb6\xadJ\x0f\xf2_\xb2B'f{\xb2^C\xc0\xa5 \x8b\x9d\x9d)\x8c`\xe5\xc5 y\x19\xa2[J_\x17\"e]\xf2;+\xe1\xa0\x9e\x12b\xa43=z\xf2\xf5\xe3\xca\x0d\x9dQ@N\xdd\x98\xffyE\x93-a\xf8\xa8\"\xd3}\xfa$\xd4\x0c\xc5\x8d5\x9f\xf1\x10*\xe2;k\xc7\xcd?qku@G\xec\x92\x18\x86pl\xf3\xcblJ\x10M\xf3\xe4\x04z$TP\x8e\xd4\x9ac`\xfc\xef\xdd\x13\xbd\x98\xdaF>\x99\xa5\x13-\x83\xc6\x88>\x0b\xdb\xa2\xf5\n%\x01\xe6\x15\x11#$\xd2N\"\xd2IS\x95\x97q\xfc\x0b\xdb\xe2u\x02\x92$\x90.\xbc\x10\xaeh\x8d\xa5\x17_Zl\\\xa8\\\x15`\xc3f\x85hw \xd6\x82\xfe\x11\xe1\x95\x19\xde!\xf8l\xe1\x91\xbf\xe3R\xf94\xc2\x01[\x8e+}_R\xa9pMQ\x05\x80:\x8dRI\xe3\xa8*\xd5\x1c\xb9\xc9\xbe\xab\x08\xc2l\x05C\\A\xbe*lic~\xc4\xf7\xe0 \x17\xf0\x86\xfc\x88<0\xe8\xb5\xd0\x0e\xc7\x91u\x7f\xdb\xa8\xec\xd4\xce\"\x07\xa0aFa\xb1\x95$\x85\x07\xc7\x1f1T\xd4\x8d\xe7\xd7(\xa5\xbb\xa8\xb8\x92w\\Q\x10\x9f\xb7\"(R\xc3\x9a\x0bM\x06q\x07\xfc\x04\xc2(\x05\x7f\xb9\n\xc8\x92\x84)\xa9\xd2a\xe5\x06\xc2_\x91\xd67\x10\xb5\x01\xd5\xa2\xb6\x97\x13\xc9\x95\x8f\xae\xc6\x91d8eb\xad&^B\xa07\xd4\x96\x01:\xe0\x0b{\xac\x1af\x0f\x99 }1\xb6\xdfo\xd3\xfe\x98\xfft!\xad\xc9\x13S\xd3\x15\xbfOi\xec\x8b] 5^wI_0\xd3\xb3\x0e\x95n\xe9\xce\xc7%\xc5 \xa0\xa3?N!Z\xa5\xc9\xe8\x8f?Yn\xa9\xb6\x9e\x1f\xa3\x8b\x8c^([\xcc\x90\xb0\xcf\x15r$\x9c\"YJ\xf9\x1dP\x92N\xa3,U\xde\x908\xa6\x92;\x0c\xe1\\\xb9%\x80\xb2\xc3\xb5\xce\x88X<\x0b\xdb\x8a\xc2,\xa4\x03\xb5\xd8m\x92\x08\x88\xca.\xdf\x99\x1e%\xee.\xbc\xe4=\xd6b7\xd8\xa5\x17\x8c\x06,lk\x12\x10/\xccVB\xa7\xb6\x8c\xd6\xdc\xf6\x8d\xc4vn\x1e:\xd7\x96\xce\xfc\xd0O\x16\x96\x0bKm\xf14\xf6\xfc\xd0r!\xd0\x96\x8a\xfdy\xad-\xe5\xb3saB\x89G\xf5\xe3\x90\x92\xeaYM\xd9\xb9\xb6\x8cS\x9b\xb5\xe3\xa2\x85/\xde\x82E\xb2\x96\x10\xaf\xf5\xcf\xafb?-]\xbcn\xa9/\x91\x08\xe6\x9f\x04\xfa\xa8\xf8\xe6\xf5\x9d\x19\xaf\xa2qm\x913d\x86{\xd3\xc68P\x808^2\x18\x91x_\xe4\x11\xc2n\x14N\x88\x00\x0dZ\xbeu\xa3\xb0\x04e=\x9e\x07\x8d\x14\x174v\x15Mrz;\x01B<|\xb3\xbe \x9fs|\x92\xd5\xba\x8e\xa2\xe5\xc5\xf3\xa7\xf8{{\xbb8\xcf\xca\xb58\xfc\x8c+\x8cQ1m\x886~(h\xc1\x7fc\xeb\x84-\x06\xe3b\x17\xe8A\x8cx\xa8\xd1-\xac\xb9+9-3#\xd2\xda\x9c\xab\x171\x89M\xd0\x05\xa1\x12\xe7\xd4*\xcd\xadq(\xfa\xb2\x83\xdd\xees\xa9\\\"\x97\xe8}\xc4\x89\xbb\xf0<.Ux\n}Z\x89\x87_=\xb1\x0b\xfa\xcf\xe3t\xae\x04\x135\xf3\x82\x84\x00v\x0b1IVQ\x98\x10\x17\x84\xady\xa8^\xc0\x96\x96\xb8\xa6\xb4\xd3\xe1\x93C.\xa4\x8b\xedm\xba\x1b\xaf\x1b\x80(H\x15q\\8\xb7\x1b\xa9\x19C8\x86`\xec=;\x17\x14\xc6D\x17L\xb1f\x90s\xe3\xb6j \xcc\xe7Z\nb\xeehYO\x9bx\xdb\x8d\xc7\xc5\xa6\xdd\x9e\xd7u[\x1cva\x97\xfdnw\xf6\x0by\x96\xed\xc4\x9c\xf8k\xbbi{;\x00P T%\x1b\xfb\xaeb\xb2\"\xe1T\x00\xa5\x08P\xae\x96\xb0h\xcd5*\xf4\xee9\x9a\xf0%\x0cy\xf8\x1fcr\x06\x07\x90\xd9\xf2\x0b\xf4n\x92\xfe.[d\x95>\x1d\xc18tK\xaf\xce\xb0\x8a\x08\x1e\xad'x\x12*\x8b\x03\x9b\x1d(e\xfe\x80\xbdS\xb8\x02\x86\xf4\xfc\x9c 1f\xa1 \xb4\xfcn\x0fY\xb1\xe2F.\xe4\xb7y\xb6S\xb9\xd4\xaf\x18\xc1T\x18\xf3Z\x9d\xd5&*\x03\xf3\xda\x17L\xd4P\xbdL\x15\x8f\xc6\xc9\xa5\x90\xc3I\x89\xa3\x17\xd8\xa1\x0d_O?\xea\xd7|T0\x97\xbc\x9c\x07\xccfV\x1cBb\xe4exT\x96\x1d3H\xc5+\xa3t\n\xf6\xb95\xbcX\xc4\x9c]Hy\xc4YnH\xaf\x1f\xf8Vmp\xd2\xb8\x18\x98Y\x83\xedCy\xe6\xfa\xcd\xb2\xe9\xac\xf4\xad\xe4\x8a4\x16\xe7\x1a\"x\x02\xfec\x88:\x1d\x07\xe2qtf\x82A\xad\xc2\xb6b8\x04Z2\xb5\xe61\xdcNlR\x9c\x9f5:8D\x89LZl\xfeY\x97eg\xb03\x17\x9d\x97K\x80\xd8F\xc9\xa7\x8aM\x9c\xf9\x11 \xe4\xbf\xc6\xbd3i\xf7\x9a\x16\xbensF\x95\x1b\xd7:\x899)}Y\xb8Ap\xc3\x0d=\x861\x8a\xce8\x13'gm\xcc\x06h\xb9\xeaA\x10\x18\x8dRY\x84,)lVD\xfb\xf5\xb8\xdcJ\xa8\x07\xbc+*+\x91c\x8d\xcb\x11\xdd\xb9\xba\xf7\xecB\xa4\xa2\xc9\x89\x0d\x0eM\xb1\xa4\xec\x8a%}\xceq\xae<\x94\x04\x85K\xbe\xa6\x9b\x1c\xabu\xeb\xefM\xf3\x93\x0eF\nf\xb8\x8a\xaa\x18m;Z\xc4cL\xdb\x02:?s\x95\xa3\xa68eR\x85\xddo\xc4T\xe0f)eC\x13a|T1?)\xdf@\xbc4GP.\xa2\x9c\xeb\xec\x0c\x15=\x14\xe5n\x9b\x00U\xa8Z\xe9.b\x1c6\xf0\xc92\x1dG\xcd\x16q\xdc\x96\xfb\x08\x0fnd\xde\x0d\x16\x94\xca9R(\xe6\xf8W-\xa6{\x15{\xab\x8dN\xf7\x9a\x1b\x80\xb6g\x7fl8\"\xf2\xe3\xc1\x07?\xe4\xa2\x1d\xd7B4\x89\xbd\x94\x9c,l\x8b\xcefE\xa6\xc0\x85\xfb\xb0\xec/!t\xf1\xf5\x92s\xca,\x1f\xda\xb9A\xf1\xb3[\xbe>0i\xcd\xc0x\x8dI$S\xed*\xf2\xe6\x9a\x04\xce[\xe7\xb00&\x1e\x94!!\x84\xd3\x12(l\xbf4G&\xa7\xfa\x14]\xb6B\xc5o$W*\xa3\xa6^\xb2\xde\xf7\x99Ho\xab\x1f`=a\x95\"\xc4~\x9c\x9f\xef0\xa2+t\xe3\xb9 \xa9\xdb\xb2\x0e\xdaLJ>S\x14\xbb\xc6\xfe\x19\x94\xe3\xd2JR\x01/\xb4EE \xa9\x9b\xdc\xed\x1b\xd1K\xaa\x9bR\xe6\x9f\x87\x81\xadM\xe5\x07\x065\x86\xaf\xbb.\xd7qF\xf3\xfc\x8a\x11\x19$D\x82\xf98:\x93vz\xf7\xc2\x0f\xa7\x9c\xba\xd1\xa2\x1a\x8f\x9cT\xf6\xa6l\x86\x8c\x84B\xe7\xfc\xfe\x908\xc2\xfb;\x16\x14\xa7\x10#\xaa\x13\xd5\xd3\x9e6\xee&\x82\x84\x94|\xbb\x9b\xa3\xd8hL\xaa6rM\xd1Q\xd8\xd2\xc5Qu\x8e\xe5\xd9\xa1\xdf\xc7\xf9,\x8e\x96\xf4T\x86\x11\xbc\xfb\xa7\xa2\xac\x1c1\xdb\xc50\xd8\xed\x02g\x97bpW\xa3M\xb4iB\x1fNc]\x84\xbaz\xa4\x8dI\xeakO\xea\x1a%\xcb\x8dv\xd0\xe5\xcf\xb9\x1bK\x0b\xbb\xa3[_\xf5@\x93\x1bQMd\x01\xfc\xac\xa2\x9c\xd6\xbc.Z3\xee9t\xb2\xce\x98\x9b\xde\x01\xfa\xe0\x14\xc6\x9b\xed\xfbA8\x97\xb8\xd9\x9c\xe7\xf1\x85\xb8 |,\xd0Z\xc7\x00\x91F\xcf&\xe9\xde\xb420\xbb\x16\x02\xe5\x8f\xf9k;\x8f(\xee\xb6Ppo\xf1$\\\x07\x94-\x97'\x18\xb2\xd9\x85\xbaA\xa9/\xcb\xb0\xc2A\xe1\xed+\x9e\xccZu\x96A\xcc*\xfd\x99;d5\xd0\x92[\xc3\xbd\xafg\xef\xe2j\xf4\x85\x8a\x0b\xcd\xb4\xb6\x05%\xaa\xc3\xe7,o_\xfb\xadf\x04\x95ru\n\xe5\nL\x95U\xdf\x86\xb2\xa8\xaaO\x95B~>?\xf6\x9f\xec\xa4\xc8\xb0\x12#H\x84\xec\xd4\x9a\xca\xe1\xf0\x13\x12\xcch\x15\xfc\xf7\xd3'\xb8\xf2\xc3itU\xa5/\xbe>\xb272\x12&_&}\x00\x7f\xc81\xcd\x9f\x16\xaeS\xdds4\xc4~\x816\xc8\x06\xf0\x00\xf2\x9a I\xdf\xf9K\x12eiK)'$W\x10\xd9>;\xc0\x8a\xaf1\x1cB\xc1\xff\xb8\x80\x03\xe0\x85\x15\xb5\x05\xf6\xfb2LI\xbc\xf6\x82[v,>\xd7\xf7,J5]\xcb#C\xfdK\xe9\x83F\xf1\x873\xf9\xa8\x88\xad&\x96\x8fJ\xda\xd2\x98\xcc\x94\xec/\xec\x8d<_\xe5#l\xb7 $\xa55f\x10\x89\xdd\x1c\x0f4s&a\x1c\x05A\x1b\xfd\x90\x0c\x1d;\xa5\xcd\x05\x84\xff\xf9r\x8a\xd2\x87\xfc\xaa\x8a_\xb4\xb7,\xd4\xf4w'\x9d\xa9\xd6p\xb4\xb7s\x84\xf3\xe1$\xf5\xd7\xe8'\xda\xf5\xc4\xcf\xcf\xe9\\\x7f?\xc8/R\xa5\xaa\x1a\x8dV\x91bQm\x15FPl\x99\xe6\\ri\xf7<\n\xc5\xe4\xd9\x9dD\xfe\xb7\xee\xb2G\xe3q\xe5bD\xab}G\xec\xb9\xe5\x92L}\x16\x9b\xa5\x99\x84\x95\xbfP\xb2e\xb2\x01\xa95(\x0e\xe6\xac\x8b\\\x98\xef\xbc\x0d\x87\xa0|\xa3\x1dD\xb5Ni\x18\xe5\xe2\xe2|\xb8M\xde\x9a&\xde\xd9\x14P\xcdGU\xa2\x9f\xc8Q\x88\xea\xd1S\xd8#\xe1\x8d\x82eA\x07R~\xab\x99F\xdfDW,W\x8em\xb4\xfeF\x13\"kA>Zz\xd3\x1eV\x8eq\x90\x1a*l\xd7\xd7\xf0\x92\x89\xef\xd7\xd6\xb8\xf0C/\xbe\xae\xaf\xe2%d\x7f\xb7~$\x93d\xd0Ta\xbb\xa1F:\xeb\xef\x07\xa4\xa9\xcevc\xa5\xd8\xbb2\x94\x83\xe4\x9fm\xc8+\xd9hq\x95\xfbwWwxys\x1b\xf2\xfc\xe8\x18\x19Ee+\x90\x0b\xf7\x07i\xeb\x07.(`3\xff.\xae\xa3\xf8T\x18\x9e5\\\x03\x91\xc7\x8f\x9db`u\xca\x97F\xdc\x85V\xf8+\x9e\x16\x83\x846h\x08\xadP\x11Z\xa2#\xb4EI\xf1H\xd3\xc0\xdaM3 \xbc\xd4\x0f\xfb\x8d\xbd\xd7\xee^\xf1\x88\xbey\x9bM]\xd7nwhEZ\xa0\x05\x8d\x13\x8fP\xe9\x98\x87\xd5\xb8'A8X\xd4\x87\xd8\x12\x0f\xa5\xd96'\xdaez\xcdbQl\xf5\xb4\x9f\xeb4\x84\xba{I\xbc/\x13\xd12\xb6\xca\xc1\xc5\xed\xd213\x1a\xf1X\x85,\xbdQ\xd5'\xc4z\x1f^\x86\xd1U\x08\x82\n\x0c\x81\x0d\xdb\xa8\xc7`\x07l\x99\x12\x15a\x1d\xf2\xb8t:\x8e\xab\x05\xdac#)\xf9(\x92\xc6\xb06)\xe74a\xa0\xd3Dh\x04\xb3\x89k#\xa9\xc0\x0ef~\x10|\xe3\xa1\x96\xce\xbb}/\xb5X-\xcfkV\x9aW\xc0z\xdc\xd9\xa8\xc7Z\x84\x95U\x98\xcc\xfek\x04+\x96f\xdc\x96:^\x98$g\x10\xe3\x0d\xbc$}MP\xce\x16\x81\x11\xe9\xabwQ\x8a\x82\x92\xfc\xeeh\xe11\x8f:\xd9\x1b\xb0\xa4\x0c\xcc\x7f\xe6gUV\x13\xd6\xfa\xc9\x08\xfa\x83\x07\"c\x03<}\n{0\x1a\xc1>\x1c\xc0@\xbc\xd9\xa5o\xfa\xbbp\x00;\xe2\xd5\x0e}\xb5\xd3\x83\x03\xd8\x15\xaf\xf6\xe9\xab\x01\x1c\xc0v\x1f\x86\xb0=\xa8\x1d\x92g8>\x852\xb0\x98\xfev\x19DU!\x7f\x13\x07h\xb4;\x19<\xa4{\xd9\xee?\x1a\xc0=L\x0f\xebH\xb6L\xe5\xa5\xb0\xfe\x9f\xff\xeb\xff4PY\xf40*\xaas{A\xc91\xac_w\xb4\xea\x06\xd27\x0d\xa4_;\x10\xd0\x0df\xa0\x0c\x06\xffV;\x1c\x98:\x1c\xf0\x0e\xdb\x13O\xae\x0f}\xacC2I\x90\x08\xd1\xbd~\xa8`\xfd\x13\xc9\xd7\x0c\xa3y\xa1Wf \xe5qY\xe5}@?t\x94}\x91\xa7l+\xf3[nuS\xb1\xa8`\xb5\x1d\x89\xcb4y?\xe7#\xde\x96\x02\xa0\xd5\xef\xbdD\xab\x01\xa0\xebe\xa7\x85'\x10q0!\xf9\x08\x1dWjt\xf2\xc5\x0cs\xf2n\xb6\"\xa9\x0f\x03\x80\x97\x91\x93\x85\x17\x1fESr\x98\xda\x92\x07\xac\x1aWZ<\xb4\xd1\x98J\xdd{{\x83G\xfb\x80f\xf9OF\xb0\xb7\xbf\xd3\x7fT2\xf8Rp\xa9B\xd0v\x95\x85\xe3)\x9a\xc7\x12D\x06gj\x9d~\xa5N\xff\xcc\x85\xb0pS\xd7\xe6\xd9\xae\xbc\xd1\x9bxh\x89\xa32\x93\xbef&\x83\xe6\x99\xf41\xe5\x85v\xe1\n4C\xa8\xd7\"R]\xaa:\x90\xef\xc3\x0f\xa4\x03\x89]~X\n\xe5@jQ\xdaH\x0d\xf7@fr\\\xc3\xbdtL\x9bS\x82@\xaf\x1a\x0eL\xb7\x12\xa4\x1623\xed\x16\x13\xe3\xafl\xb3\x1d-\x91\xeaq_\x93\x83\xd2ZqV\x83\xbb\x9d\xd9*F\xec\xc06\xde\x94\xa8X\xb1#\xec\xd1B\xb1\x1a\xb5\xf8Qj\xfa\xb3\xf6\x83\xe3\x1a\x86_\xc2\xb4\xb0\x81f\x05w\x87j\xda\xadtP\x8b\x1d\xf9\xa0{.\x02X\xc1\xd4a\x036\xac\xcc\xcc\x8e\xe1|\xa8\x07\xc6\xa2\x86yj\x82\x85\xd4\xb0\xf8E\xca\xd1\xdcX\xc6\xc7\xa8d\x1b\xe4\xa7\xf5\xc2\x7faq\x9b\x9fA\xb9`\xa8\x80\x1f\x97\xcdU\xdd\x9e[\xed\x7f\xbfHB\x87\x9e\x989k&\x98x&\xe7\x18:\x06\xd9\xba\xf12u\xbd\x84\x02>\x1e}\xae\x9a\xdeJ4\xb2\xbd\x8d\x83\xa1\xab\xb7=`bv\xdd\xc0\x90\xb1\x92F\xe6\xb4\x1e\xc3\xe0\xf7\x1f\x03o\x0bC\xef\x8cD\xca\xbc\xf2\xa8v\xf4\xa3\x12\x9d\x97\xb7\x8f\xd9\xb0\x98\xe9 \xcb[\xbeJ\x15E\xb8~\xf5\xeb\xca\xf9\x16V\xa9\x8c\x1c\x9e\x01\xb6\xc1\x0e+\x94[\xbf1\xb4,x\x8f\xf9M\xeb\x86FKL\x1bFR/\xd4S\xcf\xf2v|\xa2!\xa4\xfaq\xd5\xf3Bw*\xa0(+p\xeb\xe1\x14bLy\xd2\x92\x04\xa3\x9cR\xb7\xba\x99)e?/^\x17\x176\x035y\x1f\xcfq\xae\xcf\xcb\xac\xd1\xae#\n#\x04J\xd9T\xca9\x13\xa2j\xda\xf0\x92\xc9}n\x8b\x91\xc6^\x98\xcc\xa2x\xc9\x8c1tn1\x18\x17\xfc\x9d\xa8\xd7\xc2r\nT\xaeY\xe9E/T\x85\xdd\xbcV\xbd\x1fG!\xb5\xe1y3\xb90\x0bi[qY\x1c3\x06\x0e`\xcc\x06\x85\xd0\x857\xb9\x14qj\x96Y\x90\xfa\xab\x80@\xea/Ib\x8cw/\x06\xb2\xc8\xc2\xcb\xdcG%\x1f]\xf1\x86\xa7\xec*L\xadx\x1aWW\x93O[<\xe2\x80apl\xe1}\xe0+\x86;\xb6_ k.\xecc\xe1 \xf8\x9a\xa8\x1bEW\xb6Z\\\xe9\xf1\xa6\xb0\x01\xd58\xdd\xd1\x8e%\xc4\xd1\xd9H\xcak\xae\xaf\xc1\xc1\xc8\x82]\x98\x8a)\xe8kk\x14\xdafZ\xa9|\\\xe8\xad\x97t\x0154\xd5\xa4P\x1e\xb5\x89E\xf2\x89J\x06O\xc5\xbb\x91\\\xc3\x9cgd\x16d\xc9Bj\x80\xfd=\x12%\xc2\xe4\x1e\x0d\xb6W1\xc9\x1d\xf5\xb2&\xbd\xa8\x8e\x9d\x12\xbe\x18e<\xd3\x8fL\x1a\xcd\x81\xfcW)g\x9a\x96\x19\xf3r\xdaZ^\x14\xcaDz\x9c\\\x15\xfb\xa7~\x1e\x9e\x89\xeb+\xdd\xa4hLH\xabLB)\xb1`Z\xc4\xba\xaf\x84 \x10\xe7e\xe5\x9e\xe3\xc8\x0b\x02\xba\x0d\x8bE\x9eF!\x81\xab\x05 \xe1*\xcf\xa8\xb45\x82\x9e\xa5\xe9?U\x89f\x89:n\xd8]\x92\xfaAP\xdajj\x979d4\xbe\x00\x85\xcc\xe6W\xf2\xaa\xb9\xd2;;b\xdcJ\xb4adw\x99@\xab\x93.Q\x90\xdc\xe9\xa9\xdc~\xc5\x97\xac\x18yy0\xa5\xfd\xd6$(T\x00\\|m\x080c\xec\xb6*\xc9\xea\xbb,{\x9a\xd5\x9d\x99(\x9b\xc8\x07\x0c\x85J\xe9\x10J\xf37\xd2m;qa+V\x10I/\x1e\xb5>r\xecXY#<_\xbe\xd0\x89sc\x04\xb1\xeaYP\x7f\xa9R\x0b\xdb\xdc\xe7\x84\xc8\x10\xc5[\x04\x01p\x16B\xb8\xc4\xae`\x0c&\x95\x81\xe9U\xb8,[n\xd4\x15M\x16\xfc/\xe9\x96\xb9-f@\\\xdd\x06=#$Z\xe6i\x90\xf93\x95Q\xac\xb6\xa6l\xb1z{\x0c\x96{=\xe4D\x969\x90\xab\xc4]!.\xb7b\xb5%\x9eZ\x97\x89\x17sH\xcaBQ\x14\x1f{\x93E\xb9\xa2\x94\xe2|\x12\x93\x12.\xb4K\x8b+\xf0*bDSKU\xb9\x0din3\xda\x04@Lgz\xef\xde\x06\x8c\xb6\x9e\x15DK\x97\x10\xbd\xd9\x1c \x18\x04\x10\xd2qxV\xa9|c\xf3\xb4\xb8\x18\xc9X]+\xb7\xa4h\x84\xdb.\x97\x16\x9e\x0e\xfc\xfd3\x9a\x940`\xc7iZ93\xcd\xf5\xf5\xab\x96\xbc\xf6^\xdb\x98X\x16\x95\x18\x84\xa9/\xf0\xe2\xee\xde=\xae\xad\xd8\xc6\xc4\x0c>\x86\xb6\x1e\xe6\x8e\x95x#\xd4\x9c\x1d\xb9\xd5\x1c\xcb\xfe7\xbb\x0f\x06\x8eM\x87\xc4\x91\xd6K\x12\x7f\x1e\xc2\x10\x8bv>\xd7\xa2\xd0\x05\xdf\xc5Tr.x.\xcf\xe6:P\x13\xa4N\x9aH\x0b\xe8\xee+\xe8#\xe7\xcc\x8f\xaf\x95\xaf\xf4\xaeY\x13\x17x\x08@\xad\x07\xd6$\ng\xfe<\xab\xc9$.\x985\xbdl\xd1\xe4\xc1\xb5\xf6\x82\x8c\x0cA1\x02\x96\xd6\x15&^n>V\x9cN\xec\xcec\"]\xe5\xc6\x15\xc9\xba~\xe8\xe6a\x97\x87\\\x8c\x84\xc55\xd4B\xd1\xdd8\xa12\xa5h J\xa6\xb9*k\xc4s\x06\xa60\xa4\x87>B\x86\xb1\x14\xe8\xa7U\xacR,_\xaa\xe0m\x11\xcfn\xfc\xe8\xa1\xe3b:\xd4\xf1\x19\xcbl\xdd@U]\x9d\x02\x9cr>\xde8=\xcb\x99y\xfaG\xb9\n\x92=\x82\xfd<\x86t{\xfb\xb1#|\\-\xcf\x82\x0e\xd8\x9dN\xe8\x14\x1a\xa8\x9d}U\xae\x97\xf4(\xc2i\xc2\xb6f!K\x98\x8bE\xb9\xc4a\xd3\x06 \x0fq\xef\x82\xe5@\x87\xfe\xef\xef\xa2\x8dY(\xbc5\xf1\xec,\xdc\x06\x1e\xc3\xcd\xe32\xcb\xd8z\x8d4\x14\x1f\xe5\x1b\xc3\x9a\x15b\x8f\xc2\xe7\xe0\xa9E\x9c\x8a\xea\xa1\xba7\xe9\x93\xd9\xe8\nU\xde z\xf4\x07\xdd\xed\xf2\xcd\xe7\x12'&r\xe8\xb2\xad\xeb\x91\xbeTM:\xe7\xe7$}s\x15\x8aj\xcfI2\x89\xfdU\x1a)\xf6\xd3\x99\xe9\x83\xd7\xdeR\x0dh\xe2\x99\xea\x9e^//\xa2 iq2i\xd7\x98\x91`~4\xc76Q\xf1\x14\xe5D\xb9\x06\x86\x18\xc8\xec\xc4\x11\xccN!~kC\x0d\xeaW\x1a\x9b\xb6\x99\x87M\xc4\xc2\x14j\x14?\xf2\xd2k\x9b@\xee\xb2\xfa]\x19\x81L\xaa\x0e\x0f0\x82\xdb\x7fY3\x91\xed{r ]/g\xffS\xb9\x95\xcf\xdc\x15}\x1d\xff\x1b\xda\x0fUUs\xa4w\x03\xa3\xdc\xe9mq\x94\x9ek\x9a,xt\xfb\xe4\xc4n<8\xd3B!Fj\x85\x0b$w\xc4\xd8\x10O\xb7\x1a\xe18>C\x07'\xe1H\x91\xa1<\"\xbe\xa8\xacH\xd8\x00g\xb9\x8fv\xfc>\x1f\xfa\xd6\x16W\xf6\xb1\xf0\x03\xe5\x14r\x9f>\x19\xb4d\xc8\xd5\x9b\xf4\x83\x0b\xd24\xdaVX\xa1\xe7\xa3\x88\x0b\xd6\xf99I^E\xd3\x0c\x0dN\xd4\xa5D>G\x16+Yt!/N\xc8\xf7\xde28BnE\x93\x16\x7f]D\x88\x0e\xed\xbdAO\x83q\xc8\xfc\xb0\x80\x0dq\xb7\x18\x04\x1c@\x0cC\xcd\"\x0bSS5\\p\xd1\xa9n`\xb5\xa8\xaa'\x0f|-#\x91\xe3\xaf\x9bx3\xf2M\xe4M+ \xacjID\xce3\xb1\xd0\xc8q|\x88\x03I\xba!\xb9zG\x89@x\x1c\xc7v\xa1IB*\xad\x1c\x97\x1bz\x916\x11\x84\x9d\x87\x06q\x88\x8e\"\xb6\xcbs\xf0\xc3I\x90M\xc9\x10\xc6\xa1=\xe8\xed8g\x12\x12\xfcC\x07\xd3\x1f\x0c\x9c3\x85\xb0-W\x81?\xf1S,\xdf\x1b<\xc0P\x06{\x83\x87\xfc\xdfG\xec\xdf\x9d\xde\x1dM\xe2N7S\x10y\xcc[\x99t\xdf\xbd\xf9\xea\xabo\x8e\xcf\x8f\xde\xbc~\xf1\xf2\xabS|\xf5\xfe\xed\xf3\xc3w\xf2\xab\xda\x9d6\xe8\xed\xfdN;-[M\xbd\xaa\xf6\xd2@\x165\x07\xf3\xf5\x8a\x0c!\xab\x9e\x10+\xef\x9a\x02d\x08v\xcf-\xb6\xa0c\xff\xfdF\xd5\xe2\x02(\x9a?\xd2M\xa3\xf9<\xa87\x0ej\x18\x91&\xabJ>\xa2\xd4\xd4uy12\xfd\xbaYL\xb2K\xce\x19\xe4\xac*\xaf\xa8Y\xff\xfc#63K^\x81\x1cod\xad\x89n\xaeU\xad\n|\x1eA!2\x12\x8dJ\x0ef%l\xec\xef\xa9\x0c\xc8\x97\xc2F^\xa7\x85b'\xa7\xca~\xc8\xe2:\x94\xd1\x8c}U\x1d\x04\xdf\xbca\x83\xae@\xa3i\xd8H\x17\xa1\x18\xac\xa0\xa9\x16\x8b\xde\x19\xba\x9br\x87\x94\x1a\x10\xf9\x1c\x18\xdeQy\xa1\x8f\xb7\">\xdd\xd1\xd6%\xb9N\x90\x91&\xdc\xa3\xc2\xc2\x1d\\\xbc\xc3\xe47C\x16\x14w\x1c\x9e\x9d\x95t.\xa22\xdeZ\x1e\ny\x05%\x0c\x0e\xe9\xd8f]\xa0\x91\x86T\x1d\xc3\xd0\xa7\xb1O\xff\xd2\xe2O\xa3haT}7~\xb9\xd1\x01\xcc \x9a&\x18\xde4\n))\xda2\x1ew\xb7\x1c\x9d:4\xbf\x1cJyK\x96\x87\x98\x90\xfc\xeezE8o\x0c\x1d\xb0\xc4\xed\xaa\x977\xbae\xba\xafn\x18\xec\x86\x9b\xf8\x91~\x0f\xef\xedj\xb7\xf0#\x95\x05\xcbP\x18.\x1a\x0e\xed\xc1\xbecg\x94\xf2\xec;\xb6\xe5\xa7$\xf6\xd2(\xa6\xe8\xd3t\x94\xa7r\xf0\xb2\x1b\xa7F;\xa8\xbb\xba.h&\x8c \xa6#\xa8\xe2EH>\xa6t\x13i\x12\x91\xd3\xdd\x80m\xe3b\xbc\xcc\x87\xbd\x19\xb0%\xf5\x84\n?N\x1a\x1fh\xc1\xba\xdb3\x93\xc0=\xe9\xea\xa3\xc4\x94\xfb$i\xca%\xe8W\x14\x9dEf-\x17\xd7.B}\x04\xe5\xd02N\x81\x98\x06\xae\xf7\x18\x85\xbd\x07;\xbb;\xbc\x7fV\x1f;\xa2\xc8\x82\xce\xdf\xf4-\xf3\xc2L\\\xecd@\xcb2\xd8\xe6\xcdt\xe88\xb7\xf9\xa0\x9e<\x81~\xcf\x81\x0e\xec\xef\xed\xed\xec\xdf\xcd\xa6\xaf\x1c\xa9\xfc\xe0\x18\xf4\x8dg\xea\xc0\xe9\xceI*\x0e\xf9\xe6[Y\xa4\xf3\xeaIjd\xf1H\x03\x8b\x87<\xd1E@L\x0c^l\x13n{\xe4\xdcz'\xf6w\xf4\xd7#\nOV\xa10(\xa4\xb5\x03\xdb+\x92.\xa2z\x034\xc9\x8dl\x0b\xa3\xcd\x0b\x9a:\xf6\xcf0\xc0\xc5\xd8\xfa\x97\x7f\xc9\x87\x83\xaf\xa21\xa5Ng\x9b\xcd\x9b\xae\xf6\x0eJ\xbb\xfd\x1d&\xf5\x0evv\xf9\xbfLM:\xd8ej\xd2\xc1^\xaf\"\x0e\xf7\x1f9B\x14o\xd3Y#C\xad\xc3G\x99E\xf6\xc7\xa1\xddwlK\xdc\xc6\xbf\xf3\xe6\x96s\x06#\xb0~\xc1L\x8d\x1d\xba\xcf\xb7F`\x8d\xd9E\x0b\xfcrf1\x1d\xc1N\xcf\xe1VK\xa5\xe8\xbd\xa2\xa1\xba\xb0\xdd\x1c\xf2y\x9b\x16t\xe89\x80\x01L;`\x9d\x95\x9c\xe3\xb6\xda\xe9\x07d0n\x85\xf6\xee\x80%G\n\xed\xdd\x1d\xc7\x1cx\x8d\x8f\xe4\x01\x9d\xa2^\xd7\x1c\xda\x8f\x1e9\xb65\xf5\xd7Tl\xb0<\xad\x19\xccF\x81\x86\x1fT\n\xd5\x9b\xcc\xaeW\x00\xa0\xd5\xe4%]\xbf\x89\xd0\xd4\xb3\xe6\xe8\xaa\x81'\xb1\xdeV\x813\xe9~\x95\xea\x10\xd3\x95\x9a]\x8e\x13\xc0\x96#\xe6\xb1\xc7\x05I)|\xd1j\xe9\x99\xda(\xca\xd4of\x9b\xb7\xb9\xf5e\x86\xab\x92X\xeb\xc8\x0b\xff\x94\xc2$\n\xd7$N\x81\xa3y\x1a\xc1*\xf6\x97>\x06+\xc4)l*\xd25m\xf7\x81\xe1\xfc\xe9\xef\xe8%\xe8~O\xe5_\xaa\"t\xff\x01\x17\xa1\xfb\xff\xaaE\xe8\x87\x86\x83]}\xcf\x01\xbb\xab\x03,\x05x\xcf\xb1\xad\x97\xc7\xe7oO\xde\xbc{\xa3\x1ez\x9e\xaa\x9e*\x17\xab\xda\xab\n\x15U\xba/F\x8c>?\xf9\xe1>/b9FxXV&\x1e\xa7\xdd\x17\x8f!F\x8b\xb3) HJ\xe4\xac7\xe3h\x1c\x9fir\xa6\n.W\x8d\xed\xaa\xa7\xa3%c\xe5rP\xc7v\xa6b\xbc\xbb\xdc\xca\x1d\xefF<\x05\xdd\xd1\x80\x1b\xd8\x0d\xad\xe7B\xb9\x98{\xe3\x8c3\xb4'\xc6\xec\x93hzVX\xc0\x8c$}\xac\xcf\xb2\x19\xdf\x16\xf1\xf7\x0c\x14\xc5\x80\xf75\x1c\x1b=\x92\xff5(\x8f\xf6\xf4\xa4b_wEG\x99\xc2\xbeco\xb5\xa3\x16\xb78\xd99\x80<.5T\xe9\x00\x82\xa8\xfaz\xc2\xcc7\xab\x10Gsv\xcfaJ\xa2\x8c\x19Z{\x08\x8b{\xf7`\"\xfc\xb44\x1f>\x96\xa3@\xe1j\xe0w\x94,\xe0Z\xb0d!\xff.\xb2'\xd8\xda\xa7OEk\xfa\x05\x9a\xdcv\x81vM<\x12\xb7\xe3\xb3~\xb1\x1c\xba\xe1\x90\x01|\x99\x1c\xe7\xf7\x8ev\xaf\xc0\xe0\x12\xc2\x9a\x18\\\xce\nS.#f\x96\xec)&\x10Km\xcb\xa2\xfb6\xb7\xfa\xbf\xedT*H\xc5pmWg\x9c@ \xb6I\xb5\xdb8\x95\x92^\xe2\xdf\xf4\x94\xff\x15\xe9)\x0d\xe4j\xb0\xa3\xfa\x1dD-8\x18\xc9j7?\xb1j\xcf\xd19I\xdf\x8a\x8aof\xf5A\x92s\x90pZF\xf7\x94\x0b\x11n\xabqt\x06C\x93i\xdf$\n\x934\xce&i\xc4r\xe3\x83\xe4\xb7_.=(\xff-\x1d\xbb\xc3\xf2g\x9c\x08\x1c@\x06\x8aG\xf3\x86\xe0\xef\xdfzK\xcaV\xc7\x9b\xf5\x9e\x1f\x9d\xc2w\x07\xfdH\xf3\x03\xdc\x15\xda\x97\x9e\xe3\xf2\x93h\x8f\x1f\xad(\x0e\x08\xcf\x94\xdd]\xc7\xc5\xfdLe\x03\x177\xed\xa4,\"\x04\xecUI\xb9\xc0\xf2\x82'\xe2~wQq\xcc8:==\xc9XN\xbe\xaa\x19\xc7\xd1\xe9\xe9)eH\x9f\x93I\xe0\xc5\x1e\x9da\xd5E\xe3\xe8\xf4\xf4\x03\x15\xafx\x13ji\xe0\x930=!\x93T_\xfe\xfc\xcd\xab\xdaB6\x17c\xf1\xbb\xe8\x92\x84\xfa\xc1?\xf7R\x8fy\x11\x92\xf8eJ\x96\xfa6^\xf8\x81a\xe4\x7f~\xf7\xea\x9b\xc3 8\x8a\x82\x80L\xf4S\xa7U\x9a\xca_D\xf1\x92k\xbb\xf5\x15N \xfd\xdeX\xe5\x15\x99\xfa\x9e~\x86\xaf\xfc%\xa1b0.n\xf5\xcb\xd7\xde\x92L_GS\xf2\xca[iJ\xa3\xa9a\xd5\xdfz>]\xb1\x9f3\x92\x18\xd6\xe5m\x90\xcd}\xcd|\xd9{\xc3pN?|\xf5\x0d\x1eC\xfa6O?|\xf5:[^\x90\xd8X\xfc\xd6K\x17\xa7\xc4\x80\x0b\xb4<\xf2C\xc3\x80O?|U\x87H\xa7\x1f\xbe\xca\xfdM\x0d5\xa2,\x9e\x10\x16z\xdeP\x83n\x94\xd3\x05!\xa9\x1e\xaa\xef\xc8\xc7\xf4]\xecM.\x8fL[%\xafa(\x8e\xb2I\x0e\xbb\xbc\xe4\x86\xa5\x0b\xf7m\x0cY\xc98\xf05<\x81\xa9\x904a\xdd\xe9\xe8\xf8\xd4k\x17\xe60\x82\xe9x\xad\x18\x9d\xd2g #X\x8c\xe7\x9a\x92sd\xe7u%\x170\x82sJ\xf1\xcfu\xa7\x11\xf0c\x18\xdd\x89\xed\x0bz\xf6~\xfa\x04\x9e}\xe1\xc2\xcc\x85\x95\xe3\xc2\xc58(\xde\x05,\x07s2\x9e\x9f\xb1\xe8\xbaK\x8d/\x03R\xd6kz\xa2\xc7\x0e\\\x8c\xaf\x99\x1a\x99~~\xedB<\xbe>+\xf4\x99\xd0\x96Z7*}\xb4>9\xf4\xbd\xe1~_\xd5\x05e\x82\x954In\xfd\x9d\x07\xfff\xf9\xf4_\x8e\xe5\x93\x99\xd7pl+\x0b\x93I\xb4\xa2\xd2L\xa22o\x1a\xa7m \xdf\x84f\x01\xfcq|\xc6\xae\x00\xfa\x0f\x1c\xdbG\xef\x8f\xbf\x9b\xf5{\x15I~\x1c\x9f\x8d\xd33\xc5\x89^;\x11\x93~\xbf\x16\xf5\xf8\xa2\xea\xc4\x93\xbb5\xc4j\xbfMe\xb7^\xbe\xa1T\xa6;\x11lV\xe9-c\xae\xf6U\xab\xa8\x19\xbe\xae\xdc\xed\x04\x8ckS\xde\xae\xd8[U\xc3\xb0`M\xab\xaf\xa7\x9ct\xa8\xd6\x91k\xf6~W\x1d\xca5\x17,\xd5^\xe7\xfc\xfd\xae\xd3M\x88\xb2e\x97\xbc\xad=\xc7V\xbe:\xe7,\xb1*\xd5^\xf0\xd6T\xf8\\\xf1\xf7*\x01\xfc\x88\x1cf\xae\x8fW\x8eE\x91\x0c{B\x12\xc5\x91\xf0\x18\x8b\xf8\xfd[\xb9\xe8\x10F`\xf1\x8fp\x87\xcf\xecS\xa5\xd77\xf5\xea\xdb\x9f0\x92\xde\x08\xce\xbb\xb3r\x01\xa5\x84[[\xf5\xaa]\xb3\x7f\x9d\xa0\x8e\xc7\xdd\x98$Q\xb0&\xb6\xba\xa6\xf2CX ZY\xe6\x19\xd1\xdd\xcb\xaf\x01\x93\x15\x99 a9\xab\xdd\xc3\xea\x93\xdao\\xc\x96v5\xd9\xfaA\xb2\x0394zl\xf1\xa58!?1\x86\x163_\x8a\xac8\x0b\x12\xdao\x1cY*\xab\x8a\xe55\x1e\xb27*\xf6\xbdl\x9c\xf3\xba\x9aX\x05\xa4s\xc4\xde\xc2\x98\xaf\xe5\xc9\xe4w\xf1,p)\x0e\xdb\xc1)\xa8\x89\xb4J\x7f\xbej\xa2s \xae\xb4\xd2\xee\xb9Q B\xcb\x14\xc7\x01\xf9Y\xe7\xe1\xbc\xcf'\xfa\x1a\xcb\xe6\xa4U\xa0J\x94i\xf7|\xcd\xe4\xc9>.e\xf7\x1c\x00\xe9F\x97\x18\x94e\xe6\xf9\x9ahc\xea\x93\xe0\xc5\x03\xdf\x1b\xcd\xd5'\xbc:E\xb8\xe6\xda3\xac=\x8d\x96\x9e\xdf\x94 \xc4\xb8\x81\xe5\xc7c\xc1.>}b19)\xec0\xdc\xd8[\xc6E\xd1\xbfF\x18\xa4t\x8b)\xf9=d=Fh\xedoc\x0e\xadY\x97\x84)\x89m~\x81\xe0\xd91\x8a\xe6\x94\xc5\x9du\xc9G?\xb5\xb9P\xbf\xd5sX\x1d\x8c\xb4\xb3\xe2\xe6\xff\x070\xb1?\xda\x16\xdfw\xdb\x93\x85\xe7\x870\xb9\x9e\x04\xc4b\xa1\xea\xe9:\xbe\xb4)\x06\x1f\x087\xd0\xd0\x85\xc4\x85 -N\xb0d\x08\x13;6S\x03P\xf7e#Xp\xfc[\x19\x9f\x1f\x9f\xc4\xc4\x94f[<75\xf4\x08\xc2B\x19\x1d=v \xb3\xc3q\xd4\xe9\xe8\"\xc8\x8a\x87n\x12\x1e\xe1&p\xd4p\xad\x9a\xde\xde6\xf6\xb6)\xfe\xea\xb1QF\xac\x1c\xe8\x7ff\xaba \x9c\"\x1c\xa7\xf2\n|\xb9\xd8)\\\x83Rm\xd0I\xa0\x12\xddS\xad\xb7~\xedJ\x9d4\xc2n-\x05S\xab\xc2\x85t\xcf1S\xb4\x8d?X\x184\x84\x01\xe9\x9e_\xd1\x02\xe2t\xcf\xd7,F\x1d\xe9\x9e',{\x04\xe1+l\x13\x86y\xa4{>\xe1\xc6\x94\xf4\xa0xe\x13\xd4]\xd4\x8e\xfcu\xbb\x91\xbb\x86\xc8g X\x9a\xb0{\xae\x0d\x05\x0f\x18\xec5\x9f\x14\xde\x90\xf39\x19\x8e\xdf\xfac\x17\x03M\xb2\x00\xf6bc\x15\x87\x1fL\xd0\x88\xe7\x82\xeefd\x1e\xa6\xe0\xa7 f\xaa\xa9\xa4\xfc \x9c_\xa2%\xd5A[\xe6 $!\xbd\xf9,<\xbf\xd2zGV\xaaM\x87\xba\x84\x82\xf2c\xe0\xca\xc5\xd3\x8ec\x11\xe6\xa1\xf4<~\x8d\x07L\x1f\xcf\xe6\x13\xfe\xfb.\xd9\x80\x93\"\xf3\xed\xadO~g\x88y\xc39\xfa\x87\x0c\xfd\xfb\x14\xbfC\x17\xb6L\xe3m7N>\xbe\xfa\x89\xb4X\xbf\x86\xb5\xbb1\xce\xbf:o\x85\xc9(V\xfc\x12\xf7\xfaq\xed\x86\x9d\xf2\xa8I\xc7.\x88Ma\xb9`\x9d/,\xc7\xc5t\x14\xae\x1c\xd5\xbaU\x14\xa3\xd4F4a\xed\xe6\x98\"\xfeT\x88K-\xd0O\xca\xf1\xb4\xcb_\xe6\x7f\xdd\xb8\xec\x107O\x92\xa9\xf9r\xce\x0e\xff\x92O^\xf6&\x91U\x97\xe5l\xe5\xebJ\xe5\x85\\\x991\x8a\xc5\x80\x9c\xb2-\x8f=\xd8\xddw\xecc\xd9\x86V\x1d\x1f [\xc4\xfc\x16\xa2\xdcO\xb6\x88uu\xac\x0b\x97-\xac\x8f\xa8\x0c5\xd2\x8a\xa9\xec\xca\x19\xf7\x06\x15\xb0\xca\xb5F\xe5\xd4\x83\x94\x92s\xe9\x07\xd9\x18z\x16\xf3?\x87\nL&R\x08_\x0e\xe3<\xf0\xa8\xa7\x96a*\xdfW|\x1e\x98\xb8>\x14\x12Jy\x9d\xcb\xfb\x08\xd1\xa5\xce.\x03\xca\xd6\x89L\x85\x90\x8f\xd3\x88C\x8e\x12.\xcd\xa4\xa0\xc6x\x1a\x8f\xab\xd8%\xb8\xc2\"];?Q\xf0z\xf45\xc6[\xc8\xb3\xf33&\x05KNx\x89\x8c\xcd\xe7]*s\xfe\xd4\xe6\x828\xc5\x93\xed\x18\x97\x13\x7ff\x94\x83\xe6\xc1\xe9Q\x8d-\x1b\x9e8.\x04v\xd0\xfd\n:\x10t\xbf\xc5\xff\xbf\x80\x7f\x86\xadK\x15!\xdf\n\xa6\xe8\xb8\xf41\xb3&\xb5eZ\xc1\xad\xdd\x1f8\xb6\xfcJD\xa3\xcb\x0d\xddY\xc7\xa7\xa5.%z\xa3\xce\x8d\x82\xa7i\x91\x05\x83\xf4\x93\x8e2\x81\xa4z\xea\xb9\xb9\xb4\xef\xb0\xe8\x9bzD\xab\xc0\xa9\x18\xae\x8dl\xd3\xd6\xa5S;j\\\xef\xa6a\xf3Q]\xd9\xf9\xe6\xc8\xd7\xed\x98'\x93i\xc0S\x05\x92\xf6%\xd3\xd4\x0fv\x1fJV\xf0\x95\xbe\x8f\xbb\xcc\xc0\xb9\x8b;\xc8~#\xa3E\xdd\xb4\xbc h\x9a\x92\xcc\xaa\xeaO=F\xb5L\xf6BxsQ\xaf\xbe\xf1y\x15\xb3\xca&j/\xa9\n::\xd6\xdc'\xcaO\xa4\xb7\x9b\x93\x1f\x8a\xe8\x86\x14\n\xf4YSZN\x8f\x91\xf6zV\xb4\xb0\x82\x11D\x9dN3\x07\x98\xd4\xa4p\x10O\xc8(/#\x81tov:n\xa1-\xa3\x18\x81$\xb2\xfd\x08\x01;\xa6\xacE\"\x98\xf4\xb1w\xc6(\xdf\xf6vFKb;l\xe2\n\x8dB3p4\x97\x9a\xd2\xd6\xbb1o\xf9\xa8\x8bG\x97oG\xddu\xdb\x83%\xf6&\x8d{\xf7\xae\x10\xdd\x8c\xc5\xfe\x06X\xbc9nUW\xbd\xd8vP\xa3\xcd\xd3\x88\xb7P\xbf\x02>[\x81\xd8\xf6\xebV@\"A\xf8\xf3V\x97\x83L\xe9\xa5N\x9dgp)\xdd\x1c\xa0\xda^\n \xc84<S l\xc4\xe5\xb6\xa6m\xef\x97m\xe2\x81\x8d\x9fIN\xb38Z\xdaQ\x83\xad\x0c;7\x07F\x90\xe8ma[[\xd6\x17\x01T\xb6\x8a\xb4\xe3\xaa\x86Y\xe8\xcf\xd5\xf7z~A\x02\x9c\x9e\xd8\xa0g\xbf\x06\xa6\x90\x1f\xb9MP\x85:\x9f\x00\xf10\x0f\x80\xb0\xba\x00\xe2\xd1\x9cj.\x0el\x83\xee3]\x1b\xa9\x1d\xd5\xdczk\xe9\xfa\x9d\xa4\xa9\x90\xc8\xa5\x9e\xcbV=\x00\"-u\xe2\xf4\xa6\xa2.\xe4~\x0e\xbb\xfb\xd2\xba\xc5v\xdc}\x0b\x1d\x88\xbb'5wJ3?\xf4\x82\xe0\xba\xad\xba=\xe3\xb7\xc4~\x1e\xc1\x9aJ\xc2\xe2\x0f\x83\xae=4\xddjk\x98\xdd\xca}q(\xab&\x8d\x96\xd7\xfc3\x8fRGT\x84\x95/R\xea\xf8\xab\xca2\xcb\x8f\xce\x9a\x8c\x8al\x94\xad\xf8\xc2\xe3\xe2 u6\x1a\x96\xf9\xae\xf2\x0b\xa2n\xc5\x7fD\x84?\xd8S\xb0\xf1\xb4\x06\x0f\xd3\xb85\x0e\xd2C0\xd5g\xe0\x86<\xd1\x97\xce\x9eV\xdcB\x87]\x82\x86\xed\xfc\xee\x7fX\\\xc68v\x88\x97$\xcd\xd7\xd2m\xe0\x19\xda\x83\xbd\x01\x8f=\xb7\xc3\xff\xdd-\xc7\xaa\xdb{\xc0\xff\xe5\xb1\xea\xf6x\xac\xba\xfd\x1e\xff\x97\x7f\xbf\xcf\xbf\xdf\xe7\xb1\xed\xf6\xf9\xf7\xfb\xfb\xfc_\xde\xce>og\x9f\xb7\xf3\x80\xb7\xf3\xa0\xcf\xff\xe5\xed=\xe0\xed=\xe0\xed=\xe0\xed=\xe0\xed=\xe0\xed=\xe0\xed=x\xa4\x8d\x9d\xc7|j\xdb\xc0\xa2\x11\x8b*\xbeNQ\x1ep\x13\x8f\xe3#\x1e\xae\xb2J\x10\xe5J\xd1\x94\xa0\x17\xb0\x82xH\x06\xd1z`\x8b\xd9\xb5\xf71\x9eJ\x1e\x16#\x8f\x1dR!\x8fr\xa3M\x08\x9a3\xb4\xdc\xe4r|\xe6\xe2\x9c\xf3\xccPy\xa4\x9c\x8c\xf9\xe9\xc6\xf0\x142\xb3v\x80g\xb9\xeb\x14\x99\xa52\x8c\xa2\xe3Sj\xd2\xef\xf7w\xfb\xfd\xbe\xc3r\xf7\x8a;\x91\x13/\x9c\xf3K\x11R\x8e-\xbe\xf6\x02\x7f\n\x93hJ`E'c2\xab\xe4w\xd4\x04\x9e\xb0H\x9dp\x80\xb1~0B,\x8b\xe4\xd9\x01\xdb&\xb0=b\xe5\x0e<}\n\xfd\x1e\xca\x14\x7f\x84~o\xb0\x0b\x1d\x16\xffS\x97|\xcc\xb4'C\x9eSP\xcd\x9c\xbb\xe1\x8ek\xc22CT -\xa52`D\xec]\xb5\xc7\x03\x16;\xa3\x1b{W\\\x10\x8d\num\x1dnP\xcc\xf1\x18\x8e\x84\xf0\x14\xbc\xc7\x0edl]x\x08Z2\xf6:\x9d3\x07\xe3D\xdc\x87\x9eF\x8a\xb0\x8e\xa2,L\x0b\xe7\xac\x90\xcc\xbd\xd4_\x13U|\xe0\xc1\xf8\"x\xaa\x1ar\xf1\xc7\x8e\xe0\xe9\xd3\xa7#\xe8;\xdc\x9b\xb53B\xc3#zb2\x07\xd7\x90\xbdz\xac\xac\xd3\xef\xa7\x84\xdb\x948\x17 \xda\x9a6aQ\xb3n\x1b\x16\xb5\x9a6\xa2\x8eD\x97\xfa\xd0\xad\x00\xe2\x88o\xe7\x84r\x93\x1d\xea\xe6\xe1DM\x99/\xe2[\x10\xd6\x18\x97\xad \xac!\x15\x92(\xec\x84E\x0b%\xac\xf1g\x11\x07\x93dBW\xc5\x0b'\x8b(\xdeH2\xa9\xe5\x06\xf9b`\xd4z+\xf4\x96\xc4\xaaK\xec\xf9\xd9\xc3\xbf\xf0\xe7\x1b\x8d\xbd\xcd\xd0Y\x9b\x16\xfe\xf7\x05G\x1e\xf8\xe1\xe5\xdd\x8f\x9d\xb7\xfa\xc5G\x1f\x05\xd3\xbb\x1f\xfc\xef0\xf0\x99\xff\x91\xdc\xfd\xc8\xd3\xf4\xf7\x18z\x14\xa6\x93(\xf8\x12\xbb\x956MG/\x9a\xff\x82;\x96v\x95\xf8\xbf\x90/7 \xde\xfa\x17\x9c\x83\x9fz\x81?I6\x9aB\x9b\x19\xf8\xbf\x03\x16mLvZ\xc1\x1e\xc9\xfd\"&\xb3/\x0b\xf8d\xe9\x05\xc1F\xa3o3x\xd1\xea\x97\x06=}}\xb9\x19\xe2\xb7\x1a\xbeh\xf6\x8b\x8f?\xbb\xb8\xfb\xc1g\xbf\x07\xd5O\xb2\xd5\x17\x18\xf9\xea\x8eF\x1e\xda\xfb;\x8em-\xbdt\xb2\xb0\\\xe8\xd7\xd7\x96\xc62\xce\xebi\x15\x9dz\x88\x88GH\x02i\xddE\xa2/+\x1aP\xcf\x90\xe7_\x0b\xc7\xc4\x9c\xdaB2\x9b\xf7\xe1@\xd8\xd81\xcf\xa8!\x9a\xb7q}n\xe8\x8c\xc9\x99P\xd8\xc7\x95X\x1f\x10n\x9a\xd5\x9f\x03\x93\xeb\x14-\x17\x06\xb7\x00g\xecV\xdd.\xa0\x15D\xa3&\x88f%\x88\xc62D\xe3\x96\x10\x95\x04\x88\x18C\x95\xf9\x08T\xf6\x86\x832rX\xe8\xa5;\x03hB\xbc\xf8\xdf\xd0\xf3\xce\xa0\xb9\n\xfcT\x8b\x9c\x15\xcbI3\x98\xc4EFh\xf7wUc=\x10z\x8f\xeakv\xb9\x867eU\x8d\x885A\xe3\x14\xcb\xbb\xb8\x98X\x92\x89mYt\x8e\x1a\xa4is\x1d\x02\x92%\x9a\xd0\x01\xe8\x03\x01@\xd9\xd7f$\\\x8bx\x12\x9d\xdc\xceMM\x86\"\x7f\xbb\xe5\xcb\xa9\xd3\x8a\xa8x8:\xfdgkf\xc2\x9f\xb80\xc1p\xd3\x01\x0b\x8b_\xe7u\xbe`\xa1;\xfdy\x18\xc5\xe4\xc8\xc3`}\x96o\xc1\x90\x1ey\xd0\xa1e\xcb,H\xfd\xc0\x0f\xb1hY*\xcaB\x1f\xaf\xda\x0f\xc0\xcaJ\x05I\xeaO.\xaf\xe9\xfbk\xfe\xde<\x84i\xbd\xd3\xfb\xba\xbc\x9a\xb4\xb3\xdd\xc1\xa3\xddG\xfb\x0f\x06\x8f\xf6\xd0\x8e\xff\xe9\xd3\xa7u\x0d`4\xd9b\xbf\xa7\xdd\x04\x83\x9c\xbb\xb0\x80\x0eXs\x93\x85\x00\xaa\xfaX\xf0\xaa\xb8\xdc\x02\xbb\xcb\xbc\xe6\xed\xd0F\xfe`\x1fl\xfd\xf0C\xe2X.,t\xd7\xd0\xf9\x83\x0e\xec\xd7\x0c\x17y\xc0\xce-\xdb\x9e`(1\xd4*C\x07\x92q\xef,\xc7\xf0\xa70E\xad\xe1\x8aG3\xe1*\xa4\xa9+>p\x1c\x17\xb6\xd0h\xbf\xa4\xe0\xc2\xc4\x1f\xbd\xb3\xfc\xe2-v\xebY\x9f\xd2\x83S\x0f0\xd0\x00\x04\xf0\xa4\xaa\xe4\xde\x86\xc1c\x08:\x1dG^\x99B\xa3\x16\xa0\x15\xaf\x8d?FZ\xe5w\xe9\xb9q\xdc\xea\xe098\x9e\x141\x15\xf1\xf2\x9f9\x00\xad\xe8\x07\x0c\x12}\x87g\x89\x90\xc0\xc6b\xc5O\\X\xe5\xad\x8e`\xed8\x8f\x1d\xb8\xee\x06^\x92\xbe\xc4\xb6\xf1>\x83\xf7s\xef\x9e\\\xa4\xc6\xf4\x16\x0f\xdf\x8cSv%S\x84\xf5\xde\x9a\xb1\x06(\xc9\xc4,<\x9f>\x01_1\x96\x93G]>:\xe8bp\xb0\x86\x03X\xf1\xb2\x9e\x0bk\xfc\xa42\x02\xc5,\x99\xb9*X=A\x1a\x85\n\xb3\xe7H\x10\xb3[Q\xb6\xf2\x99\xa9\x92+8\x80\xf1\x19\x0c\x05\x0d\xcau\xb1\xaa\x14\xa8\xd7iK,\x82\x81\xe5\xba\x05Su+>@b\xaa\xc2\x82\xa9\x8a+LU\xa8c\xaa\xe2M\xd9\x80z\xe5|f\x87\xf6\xe0a_U3\xfb\xbchg0P\x8b\"^\xb4\xd7\x7fHIL^&\xc6\x80A\xf1\xf5\\\x1a.f\xda=?'\xc9\xabh\x9a\x05\x18G\x1e\x86\x9a\xa5\x98\x92\x99\x97\x05\xe9P\xbd\x9f\xff\xa7\xea/q\xd2\x8e\xfd.\xff\xca\x85\xa8\xf8i\xa46|L\xd5\xbe'\xd1r\x15\x85\x94\x80\xe8F\x06\x98{B\xf8.}\xe3]GYJ\x17\x8fw\xd8\xb4Y\x8a H\xa8\"_Ny\xb7_S}\x8eW\xe2\x82U@\xbcr\x0b\xc2\x03\xc7\xcb\xe1\xea\x9d*\x9aLl\xca\xf9=\xd4\xa1 \x16\xed\xf5th\xc2\x8a*\xc8\x95\xe5E;j\x91\x97\x17\xed\xabEI^\xf4@>\xda\xf0\xd5\xfe\x9e\x1e\x15'\xbf?*\xcej/\x18\xf3\x91\x91:\xc1\x9f\xd2\xde\x1c\x9b\x1dN\xe8\x88\xe3bA\xa6\x16\xd8\xa4{~\x8e\xce\xe7\xe7\xe7\xc8&\xf4\xdc\x02\x1f\x1d\x9b8\x0e?\xadX\xf5\xfcxTE\x0c\x1d\x98h[\x9e\xd4\x96\x0b)\x1fFTz;\xae\xce\xe5\x92\\\x0f\xc1\x8aI8%\xb1\xe6\xa6\x94\xe3]#3\xb0\x96\xf3c\xac\xe2he\x88?\x03\"UFwN\xd2#\xb1\x85\xcduYd\xf0dE&,!P\x14\xd74\x1c\xb3\xd0\x1fq\xdc\xa2.\xdd\x13\xc4\xb6\x8e\xa20\xf5\xfc\x90T\x1cn\xe4'buO\xa2\xab\xbaZ\x99h1\xa8\xab\xe5\xb1Z\x18\xb57\xb10\x9c\xa9\xb9\xf2\x84U~\x17\xad.\xbc\xb8\xa9\xf2\x8cU~\xe6%\x9c\xde5}\x10\xb0\x0f\xa2\x90r\xeb\x1f\xbc\xc0\x9fzi\x14?\xf3\xa6s\xd2\xf4)&t\xe8\x06\x917\xf5\xc3\xf9i\xea\xa5Y\xa2F\xb2\x97\x9f\x05z/S~\x89\xdd\x9f7\xb0\xf7\x94GZP\x04\xb1\xad%I\x12oN\x90+\xb24J\x01(6A\"P\x9d;T\xf2\xdcQ\xb6o\xf2\x94\xa4\xcf$\xf0\x92\xe4\xb5\xb7$C\xb0\x92+o>'\xf1v\xe6[\xda\xfa7.L\xe0\xc0\xd8\xcf\xc4\xc5$l\x0eO\xc6\xe6\x82\xc5\xe1c!_\xb4b|\xaa\xfe[\xcc\xed\xddv\x9c~8\x8b\x8c#\xbc\x93\x1e\xf8\xc0\xb7'\xf9\xee\xf8=\xba3t\xe2`\xf8\xb7\x99\xe7\x07d\xfa\xaf\x12\x94\x8b\xdd\xd6\xbd\xa5~\x1a\x10c\x0f\xd6\x0b\x04\"\xa4\x11\xd0a\xc1\xe1\xdb\x97\x80l\x88Oi{\xd7r\xcc\x83\xf08rKkq\x84\xae\x95_dE\xcc\xe4\x013A\x9b\x18>\xf1,\xbd\x8f\xdf\xfa\xd3t1\x04\xeb\xe1\xc3\xde\xeacM{\xacz<\xf7\xc3o\xc8,\x1d\x82\xe5ei]\xffE\xfd\x13\x7f\xbeh\xf9AJ>\xa6\x87\x81?\x0f\x87`M\xd0\xdf_\xbfDP9\xdf\xf3\xb7\xff\n\xb01&\xcb(%\x85\xc7n#NZ+\xcb\xe5\xa4v\x8a\x88\xb9\xb5B\xe5_\x92MD,\x8c\x06\xcc\x9cq\xac6\xf7\x11\x89\x1eL\x15\xb2\xa6\nA\xbes\xaa:\x0dE\xea8+\x85H\xba\xb1\x8b&sNIb\xa9\x89(m\x1bl\x8a\x8a\x90;\x15\x8f\xa5\x81\xd3\xd5\xe6Am\xd3\xa2d\xdc\xa7\xcf\xff\xd6\xdf\x91\xad\x96\xa9p\xf2\xc8\xb1\xadrGV\xb3\xf4g\xe6\xd4\xa5J\xbe\x92\x86\x14\xe06\x17o\x83\x87{\x1a\xc1J\x02\x93^\x1ely\x01\x12\xabb\x9f\xa8^\x8c\xb3\xcd0\x8ba\xf5U\xeb\xce\xc2\xabk\x8b\na\x94\\\xb3qWvmy$C\\\x1d\xa7;\xdb\x10b2\x10*\xed3\x89\x8c\x02U\xbd\x8d($\xbaas\x0e\xb6\xca\"=b\x0ey\x0f\xf7\xaa\xfew\xbd}\xa7;\x93\xfd\xe8\xdb\xb4\xd8r\x12\xaa\x01\xeb\xe7Mb\xf0\x88\xbb!>\xe2n\x86|V\x83G\x0ft\x9b\xf4\xf4zy\x11\x05m\x9an\xb2\xf34\xd8\xe1\xaa;\x98\xdby\x1a\xbc\xad\x0d\xce\xd6\x03\xb5q>\xfeG}\xa7\xfb\xf5\xf1\xf7\xe5\xb2 /S>\xe1\xa9\xe5\xd4\x1eXj\xb9G\xeaxXn\xb9=\xf55\xcf-\xa7\xbc\x9d\xe6HR~\xbf\xe6\xefU4\xbd\xe6#T=\xe4\xe6\xfc\xbd:F\x9eV\xae\x82\xed\xec\xb5\x1a\xfe\x92\xa5\x94\x1b\xe83\xcaU\xb0\xed#\x9b\xa8\x1a\xfb\xee\x94\x81E\x95\xd6\x8e\xf9\x08\xd5\xea\x87|U\xd5N\xdf\xb0\xf7j\xf5\x9f\xf0u\xc5\x0d\xf5\x12Fp\xa8\xe6\x90{ #x\xa3\xbe|\x85i\xe1\x94\x97\xefP\x1ed\x18].9\xc2\x92\xbf\x9c\xbey]~\xff\x16FpD\x8f\xf2\xa3n\x82\xaaW\x7fv]\xaeqB\x05G\xdb:_\xf8\xd3) U\x11\xfc5+M\xa3\xb7\xb1\xbf\xf4\x99\xadv\xb9\xc67\xe8\x00\xa6\xcd\xb9_\xae\xf8\x9c\x92{\xdbJp\xf4\xdb1\x99\xfbI\x1a_\xab\xcd\xfd\"\xd7\xaa\xa4\xb9|\xc1J\xa3\xd5\xb6\xa1\xc2{M\x12\xf3r\x8dg\xa6\xf8\x01\xef\xca\xf5~F\x88\xfe\x955V.\xfa\x1eF\xb0\xf53F\x0e\xffY\xca\x08\xa0\xfc\xdd\x9d\xf9\xe1\xf4h\xe1\x07\xd3\xf2\xd7\xdf\x02\x8f\xf18\xa9w\x8d\xe3G\xdf\x03\xd8\x1a\xc1\xa9\xfd\xd2\xfe\xfb\x0d7\x0f\xd33\x91\xed\xe2\xb1@\xd1\xf0K\xd9\xe4\xac^0\xe0\xda\xac\x07\xc6J7N\xd7\xd3\x16V\xd9\xf2\x1bG\xad{\xe3\xc8\xd1\x0f\x0c\x8c\x00H\xa4\xf8\xd2~\xaf\xbf\x9dE\xd7\xd5) HJ\xe0\xfd\x98\x9c\xb9t\x92\xbc=\x1e8,\xc5;\x8a\xf7\xf4\xe7Kl\xa6\x12 \xf9\x06\x86\xf0\xb2\xbcd\x1fj\xb5\x9e \xd9\xd0\xff\xc2|\x0dO\xedw\x05\"\x98\x0d\xd8 K\xa5\x9bV\"|\x96\xbb\xff\x1aF\xf0\x8c\x8e\x98o\x8b\x12\xd6v\xc5\x91]\x02b\x0dBi\x1aI+\x00h\xd5R)\n\xf3\xbb\xba\x19|\xd5\x82\xd5+5<\x12\x8b\xf4\x95\xfd\"_\xc0%\x8b\xf2\x0f#\xb8\xe2\x19\x8d\xe8;Z\xe2\xdb\xbf\xe0\x9d\xdb\x01\xc6c\xc8 \x10f\xe4\xa3\xfd\x9d\xb0\xbc\x93\xe3\x93\xb31a\xb7\xa6\xe2\xf7\x88\xe7\xa8\xc0E\x0bM\x1b\xa1hr\x08\x1f\xed\x1e&\xb6\xd0a6\x0c\x8b\x0e?}b\xd8w\xe2\xc2G\xbb\x8fyv)\x7fR\xf4K\x87\xffm\x0e\x0d\xfa\xed\xcb*_\x0bU`\xfe\xa1\xcd]\xe3R\xeb8\x91;\x93\x87\xcca\xfc\x9a'\x82#th>K}\xc2\xa21\x8a|\xdf\x11<\x05\xff\xb1\x03_\xd9)\x83R<\xf61n\x00\x19\x87\xba\x10\x96b\x05\xeb&\xf0\xe7\xd6\xdb\xe9\x9b\xd2](.|\xcaRY\x19{\xde\xc2\xda\x05\x02!j\xb0\xbc\xa3[>E\xa6\x94\x19\x04\xd8[6#\xd9\x85\x0b'\xff\xf3\x17\xf1[\x94p\xecY\xf8 ]\xbc\xf4\x0c\x0b\xd5k\xd9\xf2\x14\xff\xd2f\x8d\xfc\x19s\xdc\xbd\xd0\xe0\xb5\xa0S\xf9\x90\x08\x1f\xd2\x0b\x16bY\x8f\xa7\xc2n\xe6\xd2\xae\xb1_\x11\x80\n\xab\x8dW\xb6\xca\xa7O\xca\x8e\xe2x[\x8d$sS\x07\x8e\xbf5\xae\xb8\x1a\xee\xe2\x95}\xc1\x9c\xa0c\x1e\xc1 \xe2\x11\x0c\xba\xa5\xdc\x8fl\xf4\x94\xd9b) qe(e;\xc9\x7f%,T#\x0bDa\xc6\x9b\xb8n\xfc\xdfm<~N\xc2\xd8\xf8_a\xe0\xa1\x170\x04>\xa9\x88OJ\x84\xee(&\x95=v\xc4\x9a\xe0f\xcb\xc4\xacB\x8e\xc1\xef\xc5jElJ\xbf\x8cI\xcd>\x8c\xca\xb3*\xea=\xc3\xa5\xf5l\xfb]]\x14,\xc4P\xba\x9ddB_\x0d\x99n1\x96\xb4\x88\x0f\"\xe5(\xaeDN\x17W^+\x9d\xcfX\xaf\xe43\xd6\x93\xbc:\xdd\xca\x14\x89\x94\xd3\x01\xc9\x19\xa9\xac4\xca=\x04\x9b\xf4E)K\xc4\xffOr\xd3\x87\x98\xb4\xe8/.\x15Q`\x04_a\xc4\xa1\xbd]\x07\xff:\xc6\xff\xff\x8d\xbe\xdb\xe7\xaf\xfe\x8c\x15z\x0f\xd9_\xdf\xf1\xf4\x97[\xa1\xfd\xf0!\x02\xd5\xa3\xb3\xb7t\xe2\x82\xe5\xd2\x8f\x91\xbcL\xbb\xf5\x17\xcd|\xbc\x1f\xecEIuE\xc7\x9b\xd9\x19&B\xca0\x11R\xc6T:\xcfTh3\x84\x1dJ\\\x8bl\x17\x90o\xe6\xbfRaa\xe1%/9\xfa\xbb~r\x14\x85\x13/=]\xc5\xc4\x9b\xa2\x90#\xf8/\x17\xcd\xce]n\n\xe623_\x97\x87rt\xd1x\xc8\x95\xe4(W\xac\xcb;o\xee\xca\x99\xfd\xb9\x9d\x91\xe5Z\xf4\x18H\x19\x85\xf8k\xb1E\xd2\xf4\xb1\x03\x0b\xfb\xaf\xe34-'\xbd-HP\x8a\xd9J\x16\xdd$\x8dbB\xa95o\x85\xa4E3!mfm\x93t\x1c*\xedP\x08\x9e\x96`\xc7\xf7w5\xa0Q\x14\xb7d\x15}\xfb9=\xd3:#4^<\x80\xe7tO\x0d\xd9?\xa3j\xea]\x85\xfc^\x92\xeb\x17\xcd]\xa19\xe7\xd7h\xceY\x9b\xd3\xc1\x03\xc6\x01W(\x13\x94\xc3\xed\xf8!<\xd7\xdb\xd3\xd1\x9e\x9e#\x177\x92\xe3\xbb\xd72\xf1YBNI\x9a\x92\xb8AJ\xfb^\x17I\xb2\xd2\x92\xbf\\\x05M\xf6\x05\xdf\x97\xb3\xd7\x01\x94\xf5\xba\xaen\xa1\x0d:O\xa6\x9ao\x91\xca\xaej\xe2F\x99\xf0S\x1b\x93\x96\xfd\xc1>e\x9cN\xedb\xab\xfa\xd5\xafj\x8a}\x92\x0c\xe1\x0f\xe5\ns\x92\xbe\xb9\n\xc5\xf7\xcfI2\x89\xfdUJ\xd1\xe7/u\x15_{K\xda\xd8\xdf\xea\xea\xb0m\x90\x0c\xe1\xbb\x12\x1cQ\xc1R\x06\xa6\xbd\x85\x07l\x8d\x88/\x8e\xc1wjxL!\xa6\x8d\xc3,\x08\xce0\xfe\xcd[[p\x9d\xd6\xdfo\xf8\x9b*\xec\xbd\x8a\x11\x8f\xf2 [\\\x85b:.X\x7f9}\xf3Z\xe3@\xce\xf5EM\xfb\xae\xc4\xfap\x86-=\xe3Y\xe4\x1f\xebb7P\x81\x82sd\xc5a\xef\xebSx\xf3<\xaf\x9c\x1d\xea\x9f\xb9`\x9f\xdb\x95\x94?\x9c\xc1\xffZ6\xe6\x9e\xf3j6i\xc3\x8c\x8b\xbe\xb4\xba!\x16\x1a\x08\xf9\xcc\x8au\xa6\xe3\xd2~\x89c \x03\xc0\x91\x84\x8e\x9dN\xc3\x85\xb7\xdc`\xe9\xa8\xaaz(\xa1\x95\xa4B\x18\xbfFV<\xb4\x07\xfb\x8e\xacZp\xe1u\xa9\x1eK\xc2\xf2f\x86\xd9\xe4\xde\x15\x84\x1b\xff~\xe5\xa5\x0b\x17,\xfa\x0f\xb7S\x81\xc0\xe6J\xc3\x1c\x07\xb6z\xad4\xff\xd2\x0d\xd6\x9ec[K\x92z\xba\xd0\xbb\x1a\xe5m\xa4\xd7\x9a\x8b`\xa4\x8e\xaa\xf3\xf4\xaav\xebI\xa1\xe4\xf3\x93\xe3\x8f) \x13\x9f\xca&\x9f>\xd5\x13D!\xf8\xd4R\xd7 \xa5\x9a\xa8]o\xa5\x9eK\xec\\\xddH\xd6$L\xf9p\xa20\xb1\xa9\xc0\xaf\xec\xc7rW\xf5<\x0e\xe0Q\x9c\xa2\xf7\x91I\xdaC\xb5\x9c\xbe\x90>\xfe\x10\xac7\x16t\xa0\xd3\xf1\xaa\xbc\xa4x\xae\x86j\xb0Z\xf1\xe8\xb4wu\xb0\x0b\x94\x1cR\xd5\x91}}\xfc\xbd68\xf9\xeb\xe3\xe3\xe7C\xd8\xeaWKf^\x92~M\xae[\x9c=\xa0u\xe9\xd0\xa9\xbb\xb85$s$e\x86Fr\x99u\x8a\xde\x14o\xd1\xcd\xc2\x90C\x81e\x01\xc0\xe51J\xe3y\xbd\xa44\xa0\x17\x06{\xac\xbcz\xe1\xb9b\x1d\xd7\xd4\x9d\xa9\\\x93x\xf4\x8b)x\xfcq|\xd6\xad\xe6\xce\xd7\x84p\x9b\x93\xf4[\xe2]n\x02\xf9[\x01dK\x1f\xe3\xa5\xa8M\x8c\x11\xab\xe5\xe73\xc0q\xd5\x06\x1cQ\xf8\"&\xe4\x97\xc6d\x82P4>\xa1\xc7F\xd0\xa5\xc8\x8d\xe6\x146?\xa68\x98\xe8\xef\x19rD\xed\x0c\xab[\xd3\xe4\xca\xbd\x93\x08\x19\xa4'\xc6\xfb\xa6\xe4G\xe6\x89\n\x05]\xac\xcd\xd4\x16\xb2\xc0\xba\xe5\xb5\xc2\x83\xbc\xbaB9\xf7\x90\xb9\xfc2\x94\x02\x84\xf6\x1eug,\xa1J\xef1x\x05\xf30y\xec@\x92g.\xa7\xe7\x867\x9e\xa0\x96\x04\xe5{\xe4*2=O%\x19\x89l\x06\xd0\x87\xfb\x06\x08\xb1\x08\xef~\xc2RY\xc9\x07\x90If\xb5\xb0*\x92\x9c\xd8\xbe}\xa6\xab\xca\xed'_\xe2\xbd\xea \x1a\xb1\x1b:!oV\xcf]+b\\\xbfD\x06\xaf\xfcp\x1a]Q\x88\x16\xbf\ns\x17\x95m\x86\x83\x9aB\x9b\xb5@\x05\x80\xb1\xce+\xa0\x9d\xa8\x8f\x81v\xad1\x1b)|\x8bM\x9e\xe1\x88\xf3Di\x8d\x17 \xe6\xbc7\xb9\x94\xaa!!\xcd\xf9\xe3\xc5\x10\xb9kQ\xa3\xbd\x92\xcdS8\x97\xedn\xf4\x08\xe0\xc0\xdf\x1b-\"\xfa\xbd\x07\x8emy\xc9u8y\xb9\x91\xfd\x86\xf8\x94%GA\x1dL\xab\xef\xda\xd9}<\xba[\xbb\x8f\x9d^\xaf\xc6\x08+\xf9\x0c#\xac\xaa1\x90Y\x12.\xf73\xc4q\xf51\xa7U1\x9fV0\x94\xb6\xb2J\x95}\xbd5D\xd4F\x8c\xa1T\xd6G\x12\xba\x15S\xf9\xe7\xde=4\xa3+\x07v.\x14#\x84eCe\x11\xd9\x12\x92\x82\x97@.Ml\xa9\xe1\x18\xf44\xb0\x02\xa0!h\x17\x05e1+w\xe6\xb0\xc0\x0f\xe1\xef7\xd5\xbb_m\xca\x1b\xf3\xde\xb5\xf9\"R\xd1\xe8\x05o I\x82\xcb\x0d6\xba3\xbbb\x12\x00\xd28XF2\x188\x0e\x1d\xc0\xf8\x8c\xdf\xc5(Yf\x91l\xdf\x86:\x10}f\x8a*W\xc2\xc9\x88\x0c\x0d\xa3V[(\x95Y%\x96\x0f5\x95\x1ceF\x10\xc2\x90\xe5\xc0 \xdb\xf0\x17h]\xb0\xd5wL\xfa\xf6\xc9\x82L.\x87\xd2uB\xabM\xdb\x8aN\xecT\"\xe2}.\x9d\xd8\xfdlKD\xc3!\x14s\x1bUVg\xb3\x81\xdd\x8e\xdc\x08\xc5\x1bZ*\x15\x1d\xb6\xa20M\xf6l\xbb\x06\xdb\xd3==\x97\xb8S\xb1\xf2b2\xfbN_\xb5\xf2bl\xdc\x8e\xfa:\xe1\xd5u\xe9\x89\xe9{\xb5\xf9\x19\x7f\xaf\x0e'\xe0\xcd\xab8\xba\xc2Li%+\xe2r\x85\x85T\xe1\x857I\xa3X\xb1\x85\x9a\xb2\nA\x14\xea\x1bXW\xe3@\\7\xca\xf0mn\xc4\xe7Za\x19\x8d\x87b\x12\x9aD\xfc\xa5\xb7\x1aB\xd4]z+\xbdp?\x8b\xe2co\xb2\xa0u\xf8O}\xbdI\x94\x85):\x1e\xd3\x1f\xfa:i\x84\x04\x90\xd6\xe2?\xf5\xf5\xa20\xb8\x1e\x82&\xe7Y\xb5zn\x9c=\x04\xbf[\xe3\xd3\xf66\x8bI\xa9n\xe9E\xb5~ \x03\x86\xa0\x01\x8e\xbc\xc2C\x98V+\xf8 \xfau\xe5U\xbcn\xf9\x8df\x90q\xb4\xa2\xc7j2\x04\x8d\xf7\x1c\x1b\xd2Q\xe0%\xc9\x10f\xa6r\x8e\x93C\xd0\xac\x13\xab\xf1\xca\xff\xe8\x87C\xd0\xc0\xfe\xf9\x9bWC\xc8\xaa\xef\xd7$N\xfc(\x1c\xc2\xa4Zv~\x9e\xe05\xd6\x10\xd6e\xe4\xd4S\xc8V\xa99\xea\x89\x8e\xacQ3\xf4\x12\x7f~/\x94V\xe9y\xaa\nM\xe2\x02\xb0\x81\xb2\xf5T\x0e\x96\xa5\x13M\xaf\xa2C\xae\xb6~\x1bE\x81\x9a\x8e\x14g\xd1\x9dEY\\W\x8bR\xbd\xfb?\xdc\xef\xdc\x9f\xeb\\{gFA\xc8\xb6,\xe8@\xea\x94\x82\xbd\xff\xe1\xde}K>\x8f\xaa\x0d\x06\xdas\x0d/|i\x1df\x85\x86\x7fN\xa20e\xb9\xb9H\xfe&c7\x88\xb5=\xact\x0b\x05\xd2\xb2\xa4\xd8\x93f\xb3a\x19\xefV\x91\xdb\x99l\xe7c\xc3)\x1b\x88\x9c?]7\x8e\x85\x18\x87\x86\x93\xc4\xe9\xc4$a\xde\x1fb\xc6\x97\xe4\xfamLf\xfeGi\xce\x1c(a\x05(\xf1F@\x996\x03\x85\x0d\xa7\n\x96\x0cK\xf3\xb1U+x50Md\x98j\xa8 ;\xe8(l\x13\x05\xb6\xe5\x05(\xe97\xec \x95\xb1\xd7\x14\xe3b\x84o\xd4M\x17^z\x82\x88\x99\x08d\x17\x8e\x9c\xb05b\n0\xdbW\xa8'm\x87\xbe\x9f\xa0\x9a\x08\x89\xf1a8=a\xf8\xfc5\xb9\xa6\x1dd\xd0\x01{kB\xe7\xcf,yP\xb9C\xff\xc2\xe4\xf2\xf8\xeb\x00,\x0b\x860\xb3\xf1O\x87\x8a2\xf7Qg\x1b\xa2\xe1\x10S\x05M\x9cztYK\xe8\xe2V#g\xacy\xd4\x0c\xd5\x89V\xcc\x90\xdd\x0c\xa1hf\x87b\x08U\x83\x17\xbaV\xe8\x9a\x8b\xa4`j\x13\x8c\x8c\x81\x1d\x96+\xa3\xc6\x7f\xea\x82\xe7\xb8\xb0\xe8\xc6$ ^Bl\xaf~\x0e\xd7&,\xe34\x83\x0eVj@\xfc\n\xa4\x8b\xa3)\x11\x06;u\xf6@\xa5\xad\x81\xee[\xca\xee(\xbd\xacl\x10\xba(\xdetJa\xe0\x87\xf3w\x91\x1d\x88\x89\xdej \xf9F\x96z\x95\xf7\xb2\xf4\xfa\x0e\xc7\xbcp!Q\x04\x8c*\xfb\x96\xb3^u\xa7\x98xP3J\xf1\xa9dM\xa0\xb9x\x10D#(c\x92.\xc9:\xe2\xd1\nS\x17@\x90\xe3\x91z\xdfX\xa6\x0c\xc8O~\x91\x01\xeb\"p S\x01\x9b]q\xb1U\x10\xa6\xda\x0d\xc3|\x19\xa6\xd1\xb7~\xba\xf8Z\xac\xf6\xcb0%q\xe8\x05CX+\xc7,\xe3m\x1b\xf5&B\x87G+\\s\xd7\xc3\xbaA\xe4\xfcp=\xf3/\xf4\xe4M\x00 \x02\x00z\x92Z1\x10/\xf0\xf3\x8b\xf1j\xa1\xbd\xaf\xd31\xdb\xa1M%\xaf\x86y\x0b\xc3\xc1\xae\xd0\xa0Pl\xad (\x07\x12\xac\xaa\xdf\xad\xa2\x95)\xf3\xb5\xc0=\xdc\xbd<\x12|\x15^P\xa7p \xc9\x15~_1B\xaa\xd5\xbfi\x95T\xb2\xc2\x08\x0d\x0f?}\x82\xd8\xb6\x06{h\xcb%\xd16\xdbq5\xf3\xe4w\x1cOx8\x90(\nN\xfd_\x880>V`B\x0f\xb7z\xb3\xa9\x0c\x934\x97^yZAS\xa6o-\xf6\nH\x96\xc6\x86\xebQ\x01\xda\xd2\x98\xb9\xd1kXP/\xb4\xeb\xf8\xf4 2\xfa6\x9f/3:\xce\xff\x1c\xb1\x8cp\xa1\xa0b0\xa2g\xa7\xc6\x02\xb9\xca\xe7P\xce\xa2\xc4\x83\x0fU\x80\xd0\xa7\xc2\xcf\xb7\x84\xc1m\x90\x1cd\xd8m\x82\xe8\xa0Cv\x11\xa8P\x07\x0e\xd0\xe2<\xe8\xf0\xbeb\x92\x05zp\xa6\x8b\x98T\x00\xda\xe6\xc0\x80\xcf\x84V|'\xd0\x8a\x19\xb4tG\x8cx\xda\x03\xac\xe2\xa5\x01z\x98U\xe5\xc0*\xc8\x0c:o\xf8L\xa8\xf9w\x025?\x87\x1a\xe3&\xaa\xb6\x03\xb0)\xe0*\x86O\xd5\x16\x0c\xe7\xdag\xc4\x0fk>\xd7\xfa\x05\x1f\x15?f${\x1f^\xd7\n\xb3\xe5\x05\x89\xe57\x05Ty\x17\xa4\xfb\x87?\xf0\x91\xd1wE\xfe\xf4\x99\xcd8V\xcb\xca\x93\x87y\xd0\x81 \x9dp\x0f\xc5`\xc7\x05\x8d\xc5\n\x9dqM8\xd65\x8a\x9bR\x93CLd\x93\xe8\xa1R\x96\xd0\x89\xc6\x1f\x01d+\x8bkfOq\x0dO\xf2$<\x8f\xe1\xba\xd3q`\n\x9d\x11\xa4\xf6\x8a\x9e\xc9\xe3\xeb3\x17\xd68\x97\x95\x0b\xd7\x0e_\xbd\xea\x0808\xa6\x99C\x98\xb3,\xa5\x06rC\x87?o\"bK\x17\xdd\xc0\xe7\x9c\xbb\xab\xa1\\\xd8\x1c\xbb\xe8\xec\x920\x8d}\x92\xe8\x81!\x9e\x1c(\x17\x0c([\xf6\x12Fp\x8e\xa9\xe9m\xc7\xe9N\xa3\x90<.\x01f\xc9\x0c,%\xd8\\t:f\xe8\x88\x87B\xa9y$\xc6\x01\x98\x01$\x1e:\x89\xabb|\xe6\x91\x88\x07\x0d:lifWhZ\xbbF\x03fN.\xae\xc6\xbd3\x87\"\x9e\x98kO\xcc\xb4\x1e\xac\x06[B\x86+\xb8\x91K[\xac \x01>\x1a\x92\x91\xc9\xcfi\x11+\xba\x0eCb\xdb\xda\xe9[naG\xc2n\xdd\xce\xd8HN\xe1@\xec~\xb8\xf2\xd3\x05\\\x92\xeb\x04\xfenAG\xdcg\xd3\x176qx\x9a[\x17P\xd9d\xddX0\x84S\x17>\xb65?3J\"\xd3R\xc1\x0d\xa5\xb8\x96\xa5\xf2\x1a\xadn\x1b\xeb\x8f@\xad\x8d3\xf7\xe1\xbaw\x8f\xff\xca\x1d\x8b\xabg\xa5\xf5/\xff\x92\x07\n\xd1\x9f\xd3f9)\x97\xf2\x80\xc5\xcdEg\xc3\x18\xcd\x9b\xd3\xb1\xafZ\x80\x1b-\xb2\x89\xc6\xdc\xfa\x0e S\x1e+\xdb\x08me|=\x1a[#k\x08\xd6\xa8g\xc0`k\x88\xc5\x83j\xb8\xa7\x1b\xa3\xc6\xc0\xfa\x03\xc5\xc9\xcaE\xc0\xfd\xf1hxv\x7f\xde$\x9aK\x0d\x91qzV\xed\xb7^\xa6\x0c\xef\x06(=\x9c\xb6 (\xa3\x01-\x1en\x02\x14\x06\x0e\xdb\xea\xb2\xcd\x9c\x8e{\xe8\xe8Ma\xc5\xfe\xee\x9f\xa1\x8dD\x92]0.\xc0\x1e\xd0#Z~\xd1w\x1c \x9a\xf6\xa8\xf7i4p\xee\x1e\xa0\x05\xbe\xea\xf7\xce\xdd\xdc\x80\x0d\x9c\xba\x9bn_\xaf\x07\x18R\x12Y\xb1\xe4\xc7\xa2\x8b\x8b\x98\x95^\\h\x83~z\xd3iL\x92\x84\xd5a\xbf\xb5\xd5b\xc2{\x89\x89\xbe\xa38\xf5'\x01\xe1u\xf0\xb7\xb6Z\xe2Oy%\xfaK[%\x9b\xfa\x11\xabB\x7f\xe9\xaa\\`\xf1\x85\xb6\xc8KX\xfb\xf4\x87\xb6\xc2\xd4g\xe5S__\x1c\xf1b}\xcf\xfe\x9c\x15\xfbsmq\x10M.\x7f\xce\xa2\x94\x8f!\xffS[9\x9a^\xb3j\xd1\xb4\x12P\x05+\xb0\xa5\xd3/\xdcE\x96\xa6Q\xc8*\xe0O]\xa5\x89\x17\xae=\xb6\xb8\xec\xa7\xbe\xd2*\xf5yS\xfc\xb7\xb6\x9a\xcfgE\x7fh+D|i\xe9\x0f}\x85\x80\x97kc\xc6N\xa2`\x1eG\xd9J\xd4\xc1?t\x15\xa7^\xca\x90\x91\xfe0U\x08\xfc$\xcd+\xd1?\xb4\x15\xa7\xac\xcaT[H\xd8p\xa7D;\xdc)I=?Hx\x15\xfc\xad\xad6c\x90\x9d\xce\xb4P\x9d\xfa^\x101\x9cb?\xf5\x95\xd6\xbc\xc6Z[\xcc\xc7\xa9\x1f&\x87\x82v\xfed\x89\x85d\xa9/\xbc S^~A\xb4 \x9a\xf9$\x98\xa2\xe9`l[\xe2\x0f}\xc5\xb9\x8cf\xc5\x9f\x86\xcaYLD\xc5,\xd6\"\xd3,\x8a\xd0+\x93V\xc2\x9f\xfaJ\xf1\x92W\x89\xb5s\\\xf4\xb1x\xd1\xd7\x16\x0eX\xe1@[\xb8\xc3\nw\xb4\x85\xbb\xacpW[\xb8\xc7\n\xf7\xb4\x85\xfb\xacp_[\x88V\x1f\xb4\x98x\xda\xf5\xa0\xef9P\xd8Om\xa5b\x97-\x8c{l\xc1[\xd1\xb7\x90.\x19\xca\xd1\x1f\xba\n\x8c\xc4j \xac?\x8b1\\&-\xc7\x9f\xdaJK\xb6%\xfc\xa5v?\xf8\xe1*c8\x87\xbf\xf4U\x12^A\xbb+//\x18 //\xb4p\xbc$\xd7s\xc2P\x95\xfd\xd4U\n\xbc\x0bN!\xf0\x97\xb6\n\x99\x93\x90\xf5\xc4~j+1h\x05Zp\x05~x\xc9\x8b\xc3K]\x85\xa5\xe7\xb3\x81\xd2\x1f\xfa\n+^\xae]\xe8\xa5\x17_\xf2\xf2X\xdf\x01 3V\x81\x84\x99\xa9\x82\x9frR\"\xfe\xd0W\xe4t[\xe7w\xc8+p\xec\xc5_\xba*\xa1\xc7Ha\xe8iIa\x181\xbfaV\x87\xff\xa1\xab\xc8\x04F\xac\xc6\xc5Z]%\xb6\xbc\xfa\xe3*Z\xa5\xc5F\x12\x7f\x18*\n\xba\x17\x19i^\x94\xa5\x02\xa7\xd9O]%\xd6\x97\xb6\x93\x95\x17{l\x05\xf0\x97\xb6\x8a?I\x05]\xe5\xbf\xb5\xd5D\x15Sq4\xcf9F\xf1\x87\xae\xe2\xcfX\xe3g]Q\xcc&\x12kg\x123(\xc4Z\x08\xc4\xd9\x05\xe3\x99\xe8\x0f]\x056.\xed\x80\x12o\xc9\xfa\xa5?\xb4\x15\n\xd41#NB&\xf9r\xf2\xdf\xfaj\x81\xc0/\xf6S[i\xe9\x05\x0c\xc5X\nN]\x15L\xa3\xc4\xea\xe0Om\xa5\x95\xc7\x07\xb4\xf2\xf4\xa3I\xe3(d$\x95\xfd\xd4W\xba\xe6\x0c<\xfe\xd2V\xc9\x18\xeb\x9ddZ\xe6;\xc9\x96K/\xbe\xe6U\xf0\xb7\xbe\x1a_\x07\xfd~IY\x1c\x95\xd8\xb6R\xe6\xdb\xa2\xa9\x92\xf3\xce\xa9\x89yN\x19\xd9M\xb5$7%\x1f\xd3\\\xa4\x11\x7fh+R\xde\x82\xd5\xa2\xbf\xb4U\x16\xac\\\x9br=\xcd\x8f\xec\xd4tf\xa7>?\x0e\xe9\x0f}\x85T\xc0\x03#L\xeb\xaa0\xaa\x99jIf\x1a{\x93K^\xeeM\xb44\x9e\x11x-u\xcf\x18\x82fZ\xec\\{\xac\xe3\xb5\xa7\xedy\xedO \x13\xa7\xf0\x97\xae\xca\x15\x17r\xae\xf4R\xce\xc4\x8f\x85T\xc9~j+\x05\xfe\xea\xad\xc7\xd7A\xfc\xa1\xab8%3\xc1\xaf\xcf\xb4$\x82\x04\x81\xbf\xe2\x02$\xff\xad\xab\xc6v\x92\x9e5Yzs\xce\xdd,1\x93C\xb5J\xe0\x87\xac\x06\xfda\xaa\xe0\xc5_\xc5\xde\xd4G3f^\xb5x\xa5\xfbh\xe9%\xe2\x1cO\xb4k\xbc\x12\x10Z\x19\xa0\xb3\xf2\xd2\x94\xc4\xa1\xa8C\x7fk\xabE\xc1\xf5\x9c\x13@\xfe\xdbT-\x9f\xa9\xf8CW\x91\xce\xc9\x0bJ\xb3-\xbf\xd2~$\x88kl\"\xadi\xc4\x89L\x1a\xe9\x89\xfd\x9a\xd3\xc3\xb5v\x1d)Q\xc8\xa9\x83\xb6BNtSFuK5\x0c:\"v {\x07:\xa2:\xbbvn3\xdd7\xb9\x07\xfb\xc2\x9e\xecs\xc7\xd1\xdf\xdb\xd8\x01Yx\xe4\xd0\xfe\xe4`\x8cw\xa0\x03\xd6\xd8\x83s\x8f<\xf5\xf6\x97[\x8f\xebcYT\xdckx\xa8\xe7}5V\xb0\xf0\x8b1\xf9\x18\xd7\xda\xa2\x08[\x92\xcfQ\xe9\x03\xb7\x08\xd6\xab\xf5E/3Z\xe3\xc9\x13/\x8c\xc2\xebe\x94%O\x9fj\xb4\xb7\x81Q\xe5\xeb1s\xb9\xb5m\xe1/\xddN\x00\xd4eQ^ym\xe7\xf7\xba\x86zt\xbaX/\x9f\xb7\xa1\"\xbb\xe0\xc5\xaa\xfc\xae\xd7PQ0\xf2\xeb:F\x1e\xf2\xc08X\x91\xdf'\x9b*\xf2 ck\x11\xcf\xd8T\xd1\x0b\xaf\x870\xb5c\xd9\xf6\xef5^`\x9bA\xf9f\xd6\xa4\x82\x17\x8f\xb8\\*\xe2\x99\x14\xe6\xce.DM\xf7\x8b\xca\x15\xccVal\xe0\xc8\xf6\x1d\x0b\xdb\x12n\xdf\xf0\xa3\x05\x1d\x88\xa0\x03\xd6\x8f\x10\xcd\x8a\x94s\xac f\x05\x0b/\x01?\\S\xea\x93{\xcf@\x18\xa5\x98\xc0\x82\x8a\xdd\xfe\x94\x88\xa9vM\xe9C\xc5C\x11\x14\x13I\x8dCC\xb2W\xf1`D\x89\xf2\xa5yV\x1b\xb0B<\xb4\x0b4\xad\xacD\x17\xd0=e\xc8\xbc\xe4\xf3\xa4\xd3\xf71\x16\x99\x02\"\x0c \x8d\xef\x12\xf6.\xc9V\xab\xc0gi>$\xa8\xb9@>\xae\xc8$%S\xf0B\x06\x9d\xaeu\x9b\xebX\xf1\xe4w\xe0<\xd0\xc2\x04\x9e@\x96\x1b\x06L:\x9d\xb6\xa0\x99aj\xc9\x0c\x93\xe2r\xcc\xa2#\x1e\xd3\xb1O\xe8\xaf3\xcb\x05\xaf\x05\xe4\xe8\x02\xcddCJ\xf4T.\x8c.>c\xb2:sx\xf5\xb91\xdc\xe2\xea\xb7\"\x11\x1eb\xf9\xde\xfa\x82;qC$O7@l\xef\xcb#\xb6\xd7\x1a\xb1!\xf1\xc3y@\xe0\x84x\x93\x94s&\x9f\x87\xe5\x9f\xb3\xf0\xa6\xack\x02C\x7fWB\xbce\xd3\xc5/\x99\x19\xb7^c\xe6P\x14zK\x16)K?+\xf5\xf1\x1a\x8d\x9eM\x0f\xc3\xc1\xae\x14\n\x16\xe3\x0d\x97\xde\xe0h\x8a\xad\xdd\x8c}\xe2\x11vp\x95\xc6Z\xb5pc\x1b\xa2W\xab\xcf\x97Gv\xb1\x92\xf4s\xac\x91a\x8d\x7f\x1c\xba\x1b\xb8(\xbc\x92\xbb%\x91\xabu\xb0R\x1fD\x9bk;\x1d\x933Ge0\xe4\x05\x88\x8b\x05\xf0\x0d\xc0\x0e\xab\x94\x05I\xca\xebhJ\x1a9\x8a\xcf\x81\xa1\x89d0\xbe\xf2w%\x18\xff0\xceM\xcc\xb5\x11\xd0\xf2\xa9\xd6L\x93\xdaq`%+\xb3\xad\xd1\x08\x92:T\xbaC\x8e\x8c\xf5\xd98g\x89\xeb\xf2C\xc8\xea\xf7:\xf0 e\xdd\x85\x97H\xd1\x95\xecI+\xd2\x0f\xf5\x0cZ\x17\x19\xb4v\xac\x19|.{\x06\xff\x00\xd2\x15\x85\x1b\x1c\xd1\x1a\xe9@\x8aTW\x11\xd0jL\x0d?o\xeb\x16Q\xd1\xc4\xce`\x810\x1f\x83\x07O \xcd\x19tO\xf6\x866=tR+\xba\xf2\xe9\xd8\x93\x89j\xed\x04@\x12y\xfer\xfa\xe6u\x91?H\x9bYB~6\xdcih\xb2*\x1f~-\xb6Z\x14\xe2\x89\x99o\xcf\xba\xf3\xf2\x16\xe8B)\xda\xef\x8e2R\xe8i\x16\xad\xbb\xb4\xd2\xa4Y\x14\x13\xba\xa0T\x9b\xa9_~\x8c'C\x98\x0f<\xb2\xb7\xfa.\xe4\xab'\xe2\xf4\x96\xd6&\x87U\x17\x8eU\xb1\x14\x8f\x8f\x05\x99\\\xe6`L\\\xb8\xc8R\x88\xc9\x84\xf8k2\x85?&\xe0\xa5\xe0\x87S\xf2\x11\xfe\x98t-\x17\xce1\x99\x0bA\xe7m\x05l\xe6\xd5\xfd]\xb6`\xef1d\xa5\xe5\xc8\x9a\x97\x03\xa4\x1d\x94\x8e\xb3\x86%\x01(\xfb\xd5&\xe5\xd1R\x02\xed\xb4\xa2\x8e\xd0\x9a\xc6\xb6\xd9\x9f\x86\xadxw\xfb-Y\xb4\xb0&\x15\xcfg.\xe9\x7f=\xac\xc6\x8f\xac\xc7\x1f7\xe44Z p9\xb30\x9e\xb4\xc4\xd9Y\x9bf\x817\x1d`\xac\x84;\xe1C\x82\x1c\xd4\xf5\xdb\x01\x1a\xb7D\xbb\x0dswL \xf9\xe8M\xd2\xdf\x11\xeb\x93\xd6X?A\xacO6\xc5\xfa\xc9g`\xfd\xe4\xce\xb1^\xa0p\x86q\xed\x18\xff\xd4\xc4\xb5\xe4;%\xa0;\xa5\x15J\xd3\xda+\xdc)A\xcb\x9d\xb2\xb5\xda\x0cN\x97\x84\xcbdA=9\xfe!|\xe6M\xf3+\x0cZ\xa0\xf0l\x0c\x06,\xc6\x80\x05\xdcs\xe5\x87\x10/\xff\xd0\xd1E\xfb\x95\xec\xf7\x92:\xa5\xef[l\xd35\xf7s[\xd9\x89\x0bAu\xb7\x07\xedv;\x85\xdb4\x07\xdb\xf4\x1f\xb4\x8f+oo$\xafM\xa8\x06B\xd2\xe1\x8f\xd0Z\xe5\x891x\xf2\x02\xf8\xf4 \xfap\x1f\x0b\xf0\x07\x81!f\x00c^2\x84\xfeR\x03@\xe8\xfb^\x18\x02\x13,\xfc\xa4\xbb$I\xe2\xcd\x89\x14\xf8(I\xbd\xc9%\xbaW\xb5j|j\xc8\xff \xcaC\x9b\x11\xa5\xc8\x85\xcc\x85\x04)\xbc\xd6\xe5\x93>6=\x883\xa6\x89D\xa23\xc1\xa4V.\xb0X\xa5\x9e\xc3S.`b&dE\x8f\xbc \xf0\xc3y\x11j\x0dp\xe7xi\x14'0\xf5c2I\x83k\x91\xe4\x85n\x94(\xa6D\xe3\xe2\x1a\xd2\x05\x81\x1fWq\xb4\xda\xa6D'\xf9\x11V\xde\xe4\xd2\x9b\x93.\xbcO\x08\xfc\x987\xd8E\x865\xff\xd3v~\xa4\xfbl\xe2\x05\x01mb\xd9\x85\x13\xe2Ma\x19\xc5\x84r\xae\x8b4]\x0d\xef\xdf\x9f]t\x97\xe4~\x96\x90m\xfcz\xbb\xe8\xc7\xb8I$<\xc48\xd0\xe3\xe8\x0c\x0e\xd0\xd93\xf7W\x15\xef\x18\x91x\xb7 \x85\xacS\"\x9a~\x82\x86\x97\x94\xf1N &?g~\x8cZEY\x9eb|\xb7\x9f&\\\xd4\xf2\x13\xf8\x91vD\xe9(\x0c\xbf\\\x1f\xb9\xbf\xae\xe8\x88Nn\x08\xa9]\xc2\x91&Op\x90\xaf\xe6\xbb\x17~8\xb5\x19\x19\xda\xeak\xc0\x9b\x8b]~r\"F\xaa~\xd7\xabF\x981`\xfc\xba6\xa4\xa3\xe9@v!3a\xbd\xb8k1_\xe1\xf0\xb6\xe7\xb6\xe7p\xe2p\xd0\xee\xa8(\x1d\xa9K\xfay\xdbS\x95\xbeM\x05[\xcf\xd7\xa9\xba(\xaa\x17\x93\x1eb\xd7\xb6\x96\xf2%W>\x8b\x92\x9b{\xef\xe9\xe13\xf1\x12\x92;e\x0fk\xaa\xf0\x9b\xf7\xba*\x85\xbb\xb8\xbe\x16\x14\xd06\xa5 `\x0d S\x84\xe6f\x0c\x9e\xb7\xac\x19\xce.\x99[\xd1\xbas\x8b\xb6I\x97\xacI|m_7x@\x97=\xdeS\xb9\x89\xbaD\x0bk5Bc\xa3\xa8\xb0.9r\x86\xcc\x913\xe4\x8e\x9c\x93\xa6\xdb\x95\x8d\x1c;\xd5\xe7\xa6\xd1\x0f|+n\x953\x82\xce\xc1\x17)O[9\x98\xc7\x8a\x83y\x1b%\xc2c\xd8\xb2}LhPv\xec\xae\xfd\x12\x8a\xbb\x10\x9fyuK\x0b\xd97\x83f\x03gs\xdd\x98Zr\xbd\x18Z\xa8\xad\xb39*\xaf1\xf1\xc5\xb5\x9d\x8d\xfbg\xad&\x02mt;&\x8c\x16\xe1\xa5\x1b\xbf\xaf\xf6\x7f\xd3\x8a\xcc\xcd\xeb\xbd^\xc5=\x8b\xf1|R\xf5\x85p\x00\xdc.\n9?I\xbd~B\xe6\xc7\x1fW\x85k\xba\x05-\xa3\x13\xf1\x9e\xa4\xfc7\x9c\xd3\x14I\xa1\x18\x95\x18[\xff\xf2/R*B\x0b7p\x835\x19\x91\x07\xc8^W\xe1\xc8\"q\xd1\x81\x8b\x11T2W\x1a\x80\xbb4\xc7\x14\x93\x12\xcb\xe1\\rjW\\i1\xb7\xe8*\xe4\xc5\xda\xcc\xb5\xfa\xebJ\\\x82\xfa\xa8O2\x00\x9e{\xa9\x94\xb1g\xea\xa5\xc4\x90\xb4\xa7\xf2%[\xdb\xe2\xdb\x98\xcc\xc9\xc7\x95\xc6\xeb\xd9\x84F\xed\xe0y^\x8f\xac\xfaT\xd1\xe2\xc4n8\xaa\x19\xd2\xd6\x1d\xc3\x8d\xc7\x9e\x98\xbd\x17\"gS{\x86\xd6\x1f\xc5\xac\x0e\xae@]\x05\x0e\xe6\x16#\xaa\x1bP[\x1a\xd3\x14\x89\xae\xfc\x17\xffH\x8a\x88 #v\xc5&g/\x08\x14I\x05F\x94\x95\x0e\xba\xf2\x8b\xc0\x055\xe8\xe7\xad\xccb\xebb\x01\xe5W\xfaw\xd4\xbe\xd5\xdf\xeb\xeewy0\x84[\xb5\xb6.\xc2\xec\xef=tLa\xc5\xfdV\xf6\xcf>\x7fu\xf8\xfa{C\xbc\x87$\xf5R\x7f\xd2\xae\xee\xaa\x08\xb4\xde\xa26\x8f\xf2\xba\xc1\x07\x0b?\x98\x1em\xfa\xd5\x9c\xa4\xcf\x199\xa0;P\xf9\xe6\xfc\xd5\xf1\xc9W\xc7\xcf\xcd\x9f\xbe\x0c\xfd\xd4\xf7\x82\xd3\x14S=l\xf4\xe9\x914\xdcM>\x8dI\x88\xfe\xbd\xe2\x8b7\xaf\x8f\x8e\x8d \xe4[\xe8[?\x08^\xb1p\xaa-@\x92\x7f\xf6\xdc\x9f\xde\xe2+\xda\xd9 \xbb)\xd4\x80\xd4\x84G\x8b(\xa3\xe0\xe0m\xbc_MK\x10m;I\xf5\xbb6\xe3}\xeeOo\xf3\x19v\x17.[\xc3\xe7\xfd\xeb\xd3\xc3\x17\xc7\xe7\xb7\\\x13\xdd\xd7\x1b\x03Y\xd7\xc8\x06S\xcf\xb0\xaa\x94\xcf\xc1z\xf3\xe1\xf8\xe4\xe4\xe5\xf3\xe3\xf3g\x87\xa7\xc7\x1a\xe6\xa7\xda\xce\xc4Htp#\xc6\xfe\x9aLq7\xbd\x88\xa3e\xcd\x8el\xd3\xd7\xcc\xd8\xd7\xd4OV\x81\x87I\xceZ\xb2\xe4\x80\x84W\xfa\x0eT\xbd\xaex\x0c\xd7F\x82\xa6\xb6\xee\x8d\xb2\x9c\x9a\xd8\x9e\xf2\x93\xdf{\x84\xec\x9e;,\x85\x86\x0b;\x1d\x87k\xb4\xc7\xe1\xd9Fw\\\x1aR\xdaz\xdci\xb7\xf25f\x1b\xfc\xfb\x8d\xab+\xd3\x060\x85\x9a\xa1\xddzT\x86\x01}\xc6X*g\xc7\x06\xc3Q\xbe\xc5\x00G\xea\xbb\x11L\xed\xca[ly\xa8\xad\xbd\x11BJ\xa7\xf1\x06\xc3^Il\xaa\x00a\xfenS\xf8\xe5\xccC\xeb\x01l\xb5\xaf\n\xed\xf6\x10\x94\xf7\x91\x1f6\xb7*\x1e\xc1\xe85\x1b\xf5\x8b\x07\xc7\xa3\xda\x02\x86\xadm\x01A\xe8\xbd(\xbb\x88W\x9d\xed\xba\xa5Odo\xf9.\xfc \xadhy6\x9b\xef\xa3\x0c<\xbc\x10I\xc9r\x95\xfa\xe1\x1c\xd2\x88gi\x07\x0fb\x92\x90xM\xa6\x88)t\xa4.\xfc\xf8\xc7\xe4G\x17\xd2\x85\x97\xf2\x03;\xfc\xe1O)\\\x10\x88B\xbc\xa9\xb1\xf8\x8aZpI\xae\xbb\xf0\x9c5\xe5cn:/,,\xa6E\x8b\xf8\x86x\xd3\xc7\xb4\xce\x95\x1f\x04\x90\xa4\xf4\xff\x17\x04\xbc\xc9\x84$,94o\\\xb6\x17\xff\x93>t\xbe\xe9\x11z/\x04\x9a!\xee\xb5\xeeA\xf5\xd7&\xab\x03\x12\xcf=\xa9.4\x1c\xc0d\x1c\x9eqE}\xfbq@!^F\xb6\xee8D\xbd\x87\xe7\x82\xd5z}\xe9RR\xc8^GY,\x19\x0b\xe3\x0dY\xba\xf0B\x88\xc2 \xe9\xc2\xbb\x85\x9fP\xc8\xcf\x02\x7f\x92\xc2\xd2\xbb\xa6k3\xcd\x08m\xc9c\x87Z\xd7ba\x99\xd7\x91?\xb5Q\x8f\x8ct\x0bo\xad\xe3\x86\x80\x93\xf2S\x7f\x01,?\xbc\x13}\x1ch\xf5in\xd6\\\xe3\x86Q\x99Mh\x9a\x97\xa5\xd1\x85\x1fN\xcb&\xf7\x1b\xdcA\xeb\xd3\xfd\x80d$\x98\xa8\x88E(b%cbF\xacs\xcd'\xf7\xeeQd*\xb3p,tm \x8f0?\xc3\xcc\x9b\x10\x13BEk\x12\xc7\xfe\x94\xa3\xd4,\x8e\x96\x1c\xa9\xe8\xd7\x90\xac\xc8\xc4\x9f\xf9\x13\xb40\xef\xc2q\x98d\x0c\xc3RVkI\xd2E4\x85\x10\x93\xd1N#\xbc\x01\xa6-\x06\xde\x8a\x85\xf2\xc4\x91\xf0jhjH\x1c\x97\xdd\\\x94\xb7\x82\x08\xbb\xfb\xe9\x93\x96a\xbc\xcd\xcc\xbe\xc8V!\xedn\xe3\x90q3\xa7\xf00\x11\xa5\xc8`\x1cZ%\x0d\x7f\xaaL7K(\xd9/&\xc8\x160\x8a\x8bAQ2\xceg\x02/\x19\xe9v\xe1\xa7,I\xf9\xb71\x99g\x81\x17\x17\xb6\xf4.=w\x08\xda\x86n\xde\xff\xc6\xbd\xe9 \xea:\xcf\xd7T\xa8\xe1\x8c;\xde\xc7\xfb\xa4\xf3\xf3\x98\x0e\xf60K\xa3g~8}\xeb\xf9\xb1&\x863\xc8\xac\x83G\x8f\x96P\xddf\x19\xcb\x14\xdee\xdc?.)\xff\xedh\xa3\xd0\x8b\x07\xd7Xm\x8c\x19Vxx\x8d\xd5x*\xad\xb9ch8\xf6Z\x98\x8e\xadp\xda\x95\xfe\x9a/\x02\x03{\xc5\x12\x01\xcd\xaa_;0\x1b{gt\xd2\x93\x86\x96jbQ\xcb\x0f\x9d\xd3BG\x00\x9bF\nu\x86\xd3h\xbd\x82\x01\xc4W\xe8\xe6\xd6g\xa4\xa2+(y\xbb\x13\x0c-\xf5\x9b\x16E~\xd6<\xa4w2\xf6Zr\x8f\x80\xfb\x1b\x03\x9b\x9b\x99\x80k\x95\x00\xf2\xd7\xea\x0e|\x1f\xe6V\x04\x94D\xc3*\n\xfc\xc95\xfc1A\x94\xbe$\xf8\xf3jAB\xb6\x03\xe7\x14\xbd\x8b\xadI?Ab|\xcdV\xbff8\x07\x10\x8f=\xc6\x13\xd0\x1f\x14\x19`\xa8\x1b!\x8b*\xcc\xea\xae\xf3\xba\xed\xa0\xcfCT\xf3\xaf'\xcd\xf0d\x11\xadY*\x16\x8f\xf6\xe3\xe6\x1f\xd7~[\xc3+T\x8f\xf8V\x84~a<\xef\xcbbIds\x8b\xb2\x9a\xfc\x01\x9a\xf7\xc4\x05kI\xe29\x11\x89\x97^G\xcf\xb3U@\x0fd\xf25\xb9Nlg\x08G^H\x8f]\xac\x06a\x14n\xb3f\x12$\xe0\xc4\x01\x8d\xc8\xc2r\xa7\x95.\xf5\x90\xe1k\xec\xeb]\xcc-ZXo\xe9U\xc4\xe9w\xc2\x8e{\xca\xe9'\xde\x92P\x14\x1c\xe2\xd1\xdb\xead}LA\xb4\xc2\xa8\xb3\xf4L`Vr\xa2\xea\xc4\xcb\x12nNv\x15\xa9j[\xdb\xa1G\x9c\"L\xdb\x8e\xe088\xdfMw@i\x9c\xf4p\\\xd0\xb7\x97\xe4:\x11,0gL\x0d.\xaa\xc2\x86\xb0\x15ZL\x9bL\x11e\xf6\xd2x\xee\xa1OI\xd7[\xad\x82k\xccE\xe2\xe6\xde \x89\xc1\xd1\x91>(\xd4\x1a\xbe2\xdf\x8f\n\x9b\xb8\xc2\x11%n\xae\\\x18{\x84\xe6\xd3\x1bC\x1ek\xe2G\x83t\xebf\xfbl \xf0\x87>\xd9I\xbb\xfd\xb8\xfel\xc0\x1b\x01n\x04\xea-\x87z\xdd(*\x10f=\xa7\xbb%\x16`WzR[\xd1\xe77\x06\xfd5A#h@X\xb4\x9e\x9f\xfb ~\x84F~\x9a$\xeb\xa0'\xa9U\xa4]6\x0f\xb0\xa4\xaa\xbf\xf5\x18\xf5\x06/\xad\xc6xn\x1c#\x8fY\xce/\x90Z+\xb7p|L\x1f\x1fwI\xf8sF2r\"5\xc51lc\xe95\x9fpK8 c\x9c-\x15`\xb7\x87\xd5\x859\xd90HV\xa2\xf6\x85|\xab.\xf3\xf6p\xae!m\x05d\xeb\xc8%Q\xaeT\xe3\x1a{P(\xd0\xa4*,\x88|p\x94\xf9o\xecY<%/\xc2T\xdb\xaekP\xf5Cg\x04\x83\xa6\xf6A\xd1Y6\x8b\x05\xc0%\"2\x0e\xa1\x03\xfd\x16|*&\x84\x181\xca\xe4\xdf6\x10\xc2\x0d\xa2\xaf\xc8\xb3\xb7\xe2\xda\xedj\x96c\x91\xd07&3\x0cj\xe6\x96\xf6\x850R\x0f\x0b\x93\xf9T\xe4\x172ODh\xef\xf0\x13\x85U\x80\x03\xedk\xdbiT\xe8E\xb6\x865\xf3\xd0\xb0\xaelO\x86\xcc\xf4\x1f5]\x0caI%_\x8e\xfe\xb9\xbf:\xe5]h\xd7\x16=\\\xe4\xeb)*\x050~\x9fR\xc1\xc4\x97.\xee,G\x81\x88\xa7\xdf\xad\x0d\x12o\x8c\xca\xf2\x92\xb5KH\xae\xe0\xc2\x95_\x96\x82\x88`\x8ef\xb9P\x87\xe2<\xd5\xa0'\x12\xdf\xdb+\xd9\x02\x9c8\x8e\x0b+\x9b\xb80\x17?R\xf1c\x89'\xacz-\x82\xbe\x08\xdd\xa9rS\xa2V\xb3\x1d\xd4U\xc8\x83c\x17\xed.XR\nx\xbb\xdb\xedR\x86\xb9\xaa\xdab\xcb\xe3/W\xcc\x1c\x05<\xf8\x915\xf0#\xe7$\x91\x99N\x1cy\xfe\xd3E\xa64'\x13\x8fJ\xb4\xfc\x83A\x14\x92\xffJ\xcb~ \xca\xad\x8d`p5\x80e\xd1\n5\xa9\xd3Y\x80BM\xc1\x0c#\x12j\nD\x04BM\x91p\xd8\xd3\x14\x89(\x83\xba\"\x1eWPS\x84\x91\x04u\xefE\xc8@\x8d\xd62\x8fa\xa6\xf9N\x0er\xa5\xf9\x94\x85\x052N\xcc\xf0\x15\x8f\xc8a*a\xc1\x174\xa5\xdcU\\7\x05\xe6N\xab\x98\xc3jy\xbe\xb0j:\x19\xbb\x10\x96L'C9\x9f\xeag\x10\x0e\xee>\xc9n\x00\x8a[\x13\x17\xac\xf3s\x92\xbc\x8a\xa6Y@,WA?4\xaa\x1f\xca\xd2\xcc\x0d\x1eI\xfc\xf0\xa9\xa3\x1e|\x8aUt\xce\x85\x98dh`\xef\xdeE\xab\x0b/\x1eB$\xfa\xa9\xd42Y\xad\xde(\x84\xd2\xcd\x89\xfc\x8e\x86*\xda\x94\x90\xfa\xa8\xf9\x89\xbb\x05\x14\xe0\x00b\xd0\x8dMX\xd9V\x1c\xb6\xe0\x1f\xbe(\xd5\x03be\x87v\x7f\xf7\xa1\x9a\x03\xd4\x17E{=]^QVT\xc9\x1c\x9a\xe5E\x95l\xa4^^\xb4\xaf\x16%\xdcfU=\xa8&\xcc\x0fWy;\xa3+\x82-\xed\xef1\x9e\x88\xae\xdb\xae\xa3\xb6\x1a\xf0\xf3l\xdf\xd1\xa5*]\x19\xcfg\xd4'\xa6\xe5uN\xeb\xd7\xd9D\xcdoJ\xd0^\xd4r\x07\xd2\xb9a\xba\xff\xb2{.\xf8\x02\xd7\x1d.\xe9\xea\x9c\x7fho\x88\xb8=\x172\xf5\x03\x9br\x9f\xc8v\x9d\x9f#\x13\xd6s!.*\x11\xc7a^E\xb9 \x1d\xea\\B\xc5\xa5|7\n\xdf\xc7\xc1\xd1\xc2\x0b\xe7\xa4\x95+V!\xe6\xa5^<'i\x9dCN\xd4MH\xca\xc4\x00\xb3\x80\x97\xc5\x81JE\xc5\xa3\xf1\x8b\xbeq!\xea\x06\x917=]\x91I\xab\x01GL\x0e\xebR\xa6\xf7\x10\xeb\nA\xeb}\x1c\xa0\x87\xb9\xae\xc64\xba\ni7j\xba\xf3|\x0c\x08\xb7S\xcc\x8e\xd0j\x18z\xb8\xa1\xe7\x9ax\xb3\x88\x89\xc1.\xa6\x98\xb2Mp\xc0\x14\xae\xd87\x99\xd2Y\xe0\xcdrw\x15\x935 \x85t`\x1b\x06.f\xf6>\x0eZ\x0d\\\xea;b\x82W7\x8b\x83\x0d:\xc4\xb1z\xf1\xa4~\xff\x88G\xc0\x89\xa2u\xd0]yqB\xd8\xd7\x8e)\x834\x19[Y\x1cPq\xdb_z1\n\x91\xd6Y\x1ew\xd2\xac\x9c\xa5\\\xd8\x95\x1fN\xa3\xabn\x10\xf1k~\xdcW\x93\x08#\x1f\xdc\xbfoA\xa7Rc\x11%\xa9\xe6\xf5\xcaK\x17\xe6\xeeXmJ\x98\xf8w\x0b?I\xa3\xf8\xba\xfa\x06/v\x98\xcc^-\x93un\\\xac\xb4,\x97\xc5\x1c<\xa0\x83e@KH\xec{\x81\xffK\x0e8]\x86\xde\x9b*\x1am\xb4>b\xd3\xccIz\x14\x853\x7f\x9e\xd8\x0eE\x8c\x84\xa2\xf4\xd8\xa0p\xc1I\x11I\xc7\xc4n\x86r\x899\xef^\xe7\x12Pj\x88v\xc5]\xb2\xf0B\xa7\x0d\xa5\x81<\xb5 \x99\xbe\x0c\xa7\xe4\xe3\xd0\x90\xc2\x1e8\x03$\xe1\xae1\xcb\xb1\x89FE\xe1\x0b?HI\xfc\xc5H+\x03\x7f\xe0]GYZ\xa6k\xacc\x9d\xfd [t\xae<\xd1\x0f\x02\xc9q\x8a\xb4\x90\xa1F\x14'\x14\xd8\xa6\xf8\x92\n@\xab\xfap\xdag\xe9\xa5\xd6\xf9\x88b\xae'\x9dbL;B\xdfF\xa5\xb7\xe3\xea\xa8\xf1\xbe\xcd2\x1a\x98kl\xc29g\xd5\xbc\"L\xd9\xd4\x8cYf\xa0\xb5\xc6\x992\x88T^\x10\xf4\xf3D\x9du\x8b \xd6a\\\xcau\x86f\xa5*\x11Z\xc5\xea\x8e7\x7f\xc4.q\x9a\x08\x02\xde\xa8\xd1\x1d\x1cr\xa2P\xb7\xe9\x0b\x15\xb0\x86\xe0\x9bU\x981k\x7fc\x1a\x03Hg0v1F\xc7`|e\x0bl\x10OkZ\x03z\x9ch(j\xbc\xb7o\x81D\xe2\x06\xec\x8ep\xe86g\x02\xe7\xd7\xa53\x816\x94\xf3\x1c\xe9\xb8\xd0\xf8vK\x10=C>\xe4\xf6@`Z\xce;\x9dy\xc3\x1eb\x80\xd1z\x07\xca\x0f\xbb\xfb.\x11\x13s\xe5\xb8h\x18!n\xae\x89\xf7!\xb6\xf5\xcc\x98pU<\x11\xab\xf8\x8d!i\x9fx\xd0\xc9\x8f\xae\x93\x1f\xce\xb9\x95b\x97\xffIwHVK\x1e\xbc\x9a\x9bqk\xe6\xf9\x01\x99\x1a\xda\xc4\xf3\xde\xebN\xa2\x00\x15\xf3V\x8c\xd9=!S\xdf\xff\xff<\xcf\xab\xb3\xac\x0b\xd0\x11\x80\xe1\xa7y\x9c+\x83\x0f\xa2x\x16\xb5\xf72<`\\=I\x9bb\x17f\xfa\x15TIW\xd3-+}\xa6\xccFh\"\x8eO\x9e\x9aYh\xadE:?\xdd\xfeP\x1f\xdc/5\xb6\x87\xe2\xe1\x1b'\xa50\xad'v.\xe7\xcek\xac\xa4(\x03\xb6j\x98\x03\xcb]\xd94\x054\x07e.S<\x9f\xdd6\xff\xb0\xf6\xb3E\xba\x0c^Dq\xfeQ\xd5uK<7.\x18\x87\x88\xf9\x95\xf2(f\\`\xf4\xf0\n\x86\xa2\xad\xf9;\xd6g\xd3\xdc\xfci1\xbe\xfa\xe9L\xfd\xc4\xbb\x08\xc8t\x08Y}\xc5(d<\xeb\x90\x116I\xd0\xad\xff\x8e\xaf~PO\xb0\xeb\x808uLL63{[\x08b+\xc9\xb0\xcdH\xc2\xd2\xac\xd6\x01RF\x10\xd1\xf4v\x16\x07\xdb\xfcS\xe3\x87)\xaa\x8dY\x9a\xad\x1az\xaa\x01({c\xfeFl\xa5\x02\x94Y\x1c\x98\xab\xb7Z\\\x9e#\xd1pi\xea4\xef7\xffV@\xe4\x19\xbek\xe1\x13\xf8\x93\xcbaem\xf5\x03u\xc1:\xfe\xb8\n\xa2\x984\x05;3\xa2\xc4\xd4_\xb7F\x88\x14\xb5\xd4\xfa\xcd_\xb7\xf17\xe9\xe3*\xf6V+\xf2\x85;a\x13\xd9\xbem_\x91 b\xe6\x8d\xb6\x9c\xd7\x0efA\xfc\xf9\"\x1d\x82\xb5\xd3\xab\xc1\x86+\x7f\x9a.\x9a*%\xf1d\x0831\x90\x1a6#\xa0\xfd\x9d^y\xf39\x89\xe1\xfdK\xc3\xack q\x89\x80'\xac)\xcb\xa9\xfb\x04\x13v\xb7]\x96\xd2^\x11\x8bS\xb7YN\xb3\x8b\xa5\x9f\x0eaaZ\xc1Uw\xe9\xad\xda3\x0b\x92\x04\x9et'A\x14\x8a\x898\xf4\xd3\xfa\xe3\x87q\x06f\x9an\x92\x7f\x1d\x1d\xa5W8\xf73\xc7\x95\x9a\xbe\x91\xa8R\xceCK\xdb_\xbe\xacb\x90Qojd\x18\x94\x02\x80`J~\xccxy\x7f\x15\xce\x1f_x \xd9\xdfu\xfd\x0f\xcf\xde\x9c\\\xf5\xbe\xfej\x1e\x1d\x1e\x1e\x1e\xbe>}\xbf8~??<<|\xb6K\xff&G\x87\xaf\xe8\xbf\xaf\x1e\x04\xfb\x7f\xa5?\xbe\x7f\xf1\xec\xd5\x87\xe3\xf7\xb4\xc2\xfb\xd9\xd5\xad\xfe\xeb\x05\xbf<\xbb\x1f\xf6\x9e\xcd\x16\x1f\x9f\xad~\xba>\xea}\xdc\xbd\x7f\xff\xfe\xfd\xce\xcf\xeb\xdd\xa3\xbf\xac\xfa\xcf{\x8f:\x9dY\xbast\xff\x97\xbd\xfb_\xf7\xf7\xef\xbf\xdfy\xf0\xe8\xfd\xec\xea\xf9l\xef\xe1\xfd\x9f\x1f<\xea\xbc\x8f\x07\xcf\x07'G\x97\x8f\xe8x\xfe\xfc\xdd\xc9\xe9\xbb\xe0\xd5\xe1\xf1\xf1\xe1U\xf8\xe8\xfe\xfd_v\x0e\xe7\xeb\xdd\xfb\xeb\xef_>\xbf\xaf>\xef_\x91\x9f\xfc\xfe\xe5\xe1\xe1\xe1\xf3\x87\xa7\xefO\x9e}\xf8\xf3\xfcY\xf0\xb7W/\x0e\xa3\xbf^=?|w\xf2\xf1\xe2\xbbg\x0ff\x9d\xf5\xdb\xaf\xc3\xe0\xbb\xc3\xbf\x85\xfb\x97\x83\xc9l\xe7\xf0\xd1/\xf7\xdf\xce\xde\x1c=|\xf9\xf2\xfb\xd0\xdf{\xb1\\\x1e>{\xf5\xf0\xc5\xab\xc5\xd5\xbb\xfe\x83\xc9\xa3E\xb8\xf0\xff\xf6M\xff\xe8j}\xfcM?]\xbe}\xde\xfb\xf9\xf4\xeb\x9f\xf7\xe7\xdei\xfa\xed\xfd\xcbW\xdfy\xe1\x87\xe5\xe1\x87\x93\xe7\xef\x83?\xf7\xdf\xac\xb3\xec\xdd\xcb\xd7\xd1\xfe\xe5\xa3\xde\xe9\xc7\xd9\xc3\x9f\x937\xe9\x8b\xfd\xf9\xeel\xd6\x8f\x92\xb7;o\xc2W\x93\x0f\x0f\xa6\xbb\xab_\xa6/\xdf\xa7Y?:\xdc\xfd\xd0{\xfe\xb7\xe8\xeb\xe5\xc7ep\xfc\xfd:}\xfe\xfe\xa7\x9fNw\xd2\xe5\xd7\xcb\x9f\x9fuV\xdf_?\\=\xef\x7fx;{\xf0\xd3\xdb\xe3\xde\xcb\xdd\xde\x9f\xff<\xf1\x9e]\x85\x19\xd9\x9f}\xf5\xcb\xfc\xfat/\xfd\xee\xe5\xfbG\xfbo?<\x88/\x9f\x7f\xfb\xe7\xd7\xdf|\xe8=\xffz\xf7\xc5e\xf4\xf5\xf2\xc5\xea\xf5^\xf4>\\\xfb\x0f\xbf\x8e\xc8\xe1\xe0\xfe_\xbeK\x96\xdf\xfd5\x8b.?\xf6\x12\xff\xa4\xff\xd5\xc3\xf4\x9b\xcb\xd7\xfb\xe4\xd9\xa3\xe4\x9b\xab\xbf\xac\xee__/'\xd7\xde\xdb\xfb\xef\xe2\xb7\x9d\x93\xb7\xcb\x8bW\xaf\xfc\x8f\x93\xbf|\x98\xbf;\xe9{\xef\xff\xf6h'\xfa\xea\xbbd\xfe\xdd_\x0f\xbd\xaf\xf6\x8f\xaf\xe8\xb2\x1c\x9e\xbe\xff\xf0\xe6\xe4\xeb\xbd\xa3\xef_\xbe\x1c}F\xd0\x19\xd2\xbd\xb8N\xc97Lj\xae\xd3.\n\xad\xe2\xc4N5\xf2\x18\xaai\xc6=\x8d\x84\xc34-\xaa\xe9\x1c'\x16;\xf0\xcf`\x87\xd0\x81\xd8\x81\xfb\xb0\x0b\xdb\xd2]\xe9\x8d\x0b\xa4\x9bF\xcf\xaeS\x82\xa6a\xf5\xd7f\xb9\xe9 \xb3\x10\xc4Q2\xcb\x17:*\xe6\xfc:\xee\xf3\\\x14!\xb9\x82\xa8\x92\xe4\xa7\xc6N\x03\xc7I\xa0C+\xb1q*f\xc3x{\xe6BF\xe99%\x06=\x97\x05q\x86\xa7\xd0\xc3\x0b\xe2m\xd8\x85!\xad\x120\xfb\xc5\x00\x9e\xc0\x8c\xfe\xd3\x19\xc1\xae\x83\x90\xf5\xc7iw\xb2\xf0\xe2\xa3hJ\x0eS;p\xce\xe0\xc9\x13\xe8?\x84O\x95\"\xe8@\x9f\x17\x0f\xf4\xc5\x03V\xbc\xaf/\xddq($\xc6I\xa7\x83\xe6\xfa\xf0\xf4)\xf4\xf7\xe1\x1e\x0c\xf6\xf6\xd4\xf7\x0f+\xaf\x07{{pO\x0d-5@)\x9bI\xcf\xe6\xc9\x18\x06K\xe7\xf2\xf4)\xecV;Q\x18\xb3~\xab^\xfa\xbdZ\x90\xed\x9a!\xf6\xf4)\x0cZ\x03\xc0\xd1\xa2\xb4WF\xe0Y\x1c-o\x87\xc2B\x97\xc5\x8d\x12\xe0\x8f\xb0\xc3\xc2=\x8e9>\xf782\xc36\xf8,\xc7\x83G\xff\xe9\x8c\xa0\xbf\xbf\xf3p\xc7\x81\x88\xb1\xe13\x8a\xe0\x99\x8b\xd1n\xb1\x04\x9e\x82\x07\x07\xe0\xc1\xb0x\xa7\xb2\xc0\x0c\xd2>\x1c0@\xa7c\xda\x0d\xdd?\xbc\xd1x\x8c\xc0\x19\x9c\xd1\xcd;&\x0c\xae\xf7`\x7f\x87\xbe\xb0F#\xcbq`\xc8\xb1\xc2\xcf\xd7\xcbf\xed\x0cp\x1d\x1e:\xd016\xdc\xef\x89\x96)b\xe4-\xf3\xae\x06RW\x15\xee=\xbf\x93\xfe)\xf2C\xdb\x92\xec\xb4$E\x91d\xc5\xc9 \xea\xf3\x7f)\x84\xa5\xf8\xab\x92\x9f\xdc{?L\x1f\xb2u<\x90\xff\x18\xb2\x90\x88lQ\xac\xc3gG\xcf\x8f_|\xf5\xe7\x97\x7f\xf9\xfa\x9bW\xaf\xdf\xbc\xfd\xeb\xc9\xe9\xbb\xf7\x1f\xbe\xfd\xee\xfb\xbfy\x17\x93)\x99\xcd\x17\xfeO\x97\xc12\x8cV?\xc7I\x9a\xad\xaf\xfe_\xea\xde\xb4\xc9\x91d9\x0c\xb4\xdd/k\xf6\xfe\xc2~q\xa4\x86\xdd\x99\x83\x04\n@\xdd\xa8F\xd7\xeb\xd7\xd3#55\xd3\xfdl\xaa\x1f\x9fH\x00S\xcaJ\x04\n9\x0dd\x82yTW\xcdT\xafQ\xd2R\xa2H]\xdc\x95(R\x07\x0f\x1d\xe4.IQ\xa4\xb4\x07wy\x99\xed\x9b\xf9#\xfa\x03\xfb\x17\xd6\xc2#\"32#\"\x13\xa8\xaay\xd4\xc2\xac\xbb\x00\xcf\xc88=\xdc=\xdc=\xdc\xafo\xbe\xec\xf5\x07\xbb{\xfb\x07\x87G\xc7\xed\x1d\x8b\xa7\xcbat\xa4\xc8g\xe9\xc1\x13HN\xa0\xdd\xf6\x1cqS+\xc3+b\xc18\x93Q\xd9s\xe8#O\xe7\xec\xe0\x9b\xa9z\x9e\x1d\xa4\xf4\x14\xc35\xc0O\xc0\x1e%c\x0e\xa4\x8b8z\x87\xc4\x13\xa3\xba\x15Q}\x99\xc3W\x178\x1bAO\xd0\x0b\x02\x1e\xac\xb2e\x1a\xac\x97\x98\xf0f\xaf\xaaE\xbb\xca\xef\xe7`\"\x95\xd7s\x9b.\xa6v-;\xfcN\"\xb0x\xad#\xbc\x03=\x0eq\xa3\xe4\xf1\xc8\x87\x8c0\xd3\xfeN\x8b%\xd7\xcc\xc3\xdcD\xf1s\xa4\xe0\xa1\x90\x85+.m\x90\xad@H\xff\xb4G\xb0\xeb \xc2\xd8)] Jr(\xf5\xec\x1f\x1c\xf6\xfb\x07G=\x8a\xd7\xf4 \xba\x8c#\xa6St\xdd\x1f\xf0'\x8c|\xb0\xe7\x03*\x9df\x02\xf3\xed\x88y\x18Q\xfc?\x92p>B\xc8\xa0\n9\x90\x00\x07\xbb\xf0\x08\xa2\xea\xad+>}\x99f+\xe4\xdf\x82\xb1\xd5\xb1d\x0c\xea!\x06\x1d\x0c(jY\xe7\xbaG\xbbZyC\x9eM\xd2\x8d\x897\xab\x0b\xbb\xa7\xa0\x02\x0b\xabM\xe7\xfa\x08>\x84\x80\xca\x02\x942\xa8\x12\x05\xdd\x17v\x9f\xce\xab\xe7\xe8K\xf80\x82\x04\xe7L}F\xd9r\xe7P\x85\xa3\x9f\x10\x9cb\xc3}\x18BO-\xb2\xe6E:\xf4\xb9\xa6\xea\x05K`\x04m\xa8\xe6T@\xc4B^\xbff\x14f\x01\x8f\xf8\x18:s6\x08X\xc0\xd3\xa7#\xe8\xcc\xa9\xe4\xd0\xa6;\x18\xe6t\xdb\x9d`\xf9\xc1\xfe\x01|\x88\xe1\xb2E\x03.\x88\xfa\xe6\xd0\x19\xc1\x91\xa3i\x91\"p\xa4\xb6\x14\x95[\x8a\xf3\x96\xb2\xbc\xa5l\xf3\x96(\x91`7 #\x07\xfb\xda\x87N\xf5\x06\xaa\xe1~3}5\xc2W\x8b\xcc3\x19\x9c\xc2+\xef\x15\x9da\xd8\x81\x1e\x15\xbc\x16\xf9\x9ck\xf44\xc8\xf0>\xf5\xd2Ew\x1d\xbd\xb3\x07\xec\xee[D;Z\xbe\xc8\xaa7\x17KU\xe3\xa8?,U\x15Q$\x94\xf6\x0ce\xe8\xef\xe2 \xad^\x93\xa9\xcdiBq\x9b\"6\x0b\x19\xcf\xd1\x9b\xd6\x1c\xe8\x91w\x9e\xa3\xb7o@o\xf4\xb00\xa07\xc5\xd1\xc1n\xce\xbc\xe5\xd1t\x06{\xb4\xc2\x12\xe8\xf0\xd0\xd1\xe3:\xc5\xe5\x98\x93\xd5H\xdf\x8d\x19/B\xa7\xaf\xa3y~\x85\x12\xd4\x13\xe8\xc1\xed-\xbf#\x8b\x8e\x1b,K\xc4\x13\x14\x8cq\xa7i0\x97\xce0v\xd4\xbbH\xd0-)H^y\xafl\x82>\xf2\xcc\x90\xca\xd0\xe3\x14lJ2\xf2\xc7\xbcJF\xbc\xe7tp\xb8\x0b\xb0\xae\xf92\x8ab\x1b\xbf.\xa3KZz\x87=\xf8\xe4\xd5\xc0q\x81P\\K\xa0\x8cM\x9d\xccq\xe0 \xf4\x91\xf3d\x9d\x0ee\xcb\x1f\x8e\x80\x96\xa7\x07\x82\x11\xee\x94%<\xa5\xfd9\x855\xec@\x02CXW\x10\x89n\x89\xa5CQ,\xa1E\x07\xac\xb6v\x9b\xd6\xb6\xc3j\xcb\xeb\x99\x8b1\xc9\x83(\xb5\x82Om\x82\xb5u\x18\xe6\xca\x8d\x05\xac\xb6\x11,q\xf8\xc8\xbd*E\x96\xe6\xf7F\xd0s\x9c\x13\x08hcG'(\x9f\xb5aQ\x88\xbd\x1e\xa5T\xed\x11\xcc(\xad\xdeAzA\x85\xa7:\x12\x94Qd\x0e\xe0\x96\xbe\xeb\xd3w\x83\x13\xf0\x19\xc5Q\xaa\xcf\x8a\xea\xb3\xbcz_W=\x7f\x15:0\x9b\xc2\xed\x08\xfa\x03\xba\xb1\xae*\x1c\xae\xe1P,+p\xca\xdb6\xf7\xea\x0c\xed\xdd\xc1Q\xe5\xc8[x\x85\x96\x1dk7i\xb2\xb8\x921\xd08\xdb\xc6\xdd\x9f<{\xfd\n\x1d2\xf9W\x9d\x87M\x9e\xe6fXI{S&yMW8\xccwS\xf2\n\xf9\x85\xdd@{[w\xa3\xf1\x9a\xf4\x0e\x92g\xed\xa8\x14\x0d]LPd\x87\xf6\xee\xae\xe2w\x1c\xf0GG{\x8e\xd6\xa57\xfa\xf1\xba\xf4n\xe3\xdd\xde\xa8KU\xd3(H\xf9\x185q\xbbh\xf9\x8a\xe3.\xf3\x11\xa7\xef9\x1b7\x0b\x924^g\xa5\x8eq\xa5j\x94\xcaxM\xd8\xfc\x9c\x12\x03\x161\xc1\xe0\xc3\x11\xdf\xd4(\x8a\x8bP3\xeclT\xf5\x83vN\xa0\x85>\xfaH\xf2\x92Rv\x00f\xee\x0fy\xbc\x0b\x9e\x94\xc0\x85\x16z\xce\n\xa7!\x96\x1f\xc19\xe1\xe34\x18\x85\xde\x83\xef\xb1\x84 u\xda\xf0\x88M\x15\xcb\\n\xa8g\x1e\x84\xderY7\xe4\xfa \xa1\x9f\x16\xfa\x13%]\xbe\xd4\xd2w\x83\xd3\x18l\xd84\x08\xf9L\x9c\xfb2su\xfa\xf1i\xa1\xda[\xf7X\x9ca\xa7:\xe7\xc5\xa9\xf3\xcd\xcd\x9aTN\x9e<\x80\x12\x0bV\xc5\xeeYf1\x8b\xe1\x11\xa4$\xf6.\x96E\xc0\x7f\xe5\xc2V\xd14{\xf2 \xbcb\xb7\x1a\xdb\xfa>\xbc\"\xb4\x8f\xf6\x1d\x17B\xfb\xf8\x00=\xa5\x8b\x0e\xd0\x96\x06\x1bu\xbb\xe07\xfd]\x1d\xc7 \xed\x03\xc7\xb6p\xb6\xd2(\xaez\xea\xb0\xeb\x80\xbb\xa6x\xe1\x94\x89u\x83\xe4\xa5\x98\xebM4\xc89\x85\xd2\x9eUyD\x15\xdc\x8a\xe3\x80\xa5t\xf8\xeew\xf3\xee\xe1\x9d[L\xb7U\x8d\xc9\x12\x97|k7\x9a\xde\x0dWt\xefAWtww_Y\xcb\x81\xd3\xe5w{\xbc$ .\xc3Mj\x92\xd7U\x9a\xca\xd8\x8e\xbbg\xd0\x86\xb8\xfb\xb1\x0b\x16\xabU1\"\xb2V\xd8\xe8\x0e\xa4I\xdb\x08\xa1\x9an\x9a\xeeU\xaf\x94\xf2\xa8\xef\xbd\xaa\x14\xc5p\xeb\xa0:\xbd,F\xfd~5v\xbc\xc7j\x19T\x8b'9J\xf1\xc9\xd3cj\x0b\xbd\x07C{p\xec\xd8F>-\\\xf1\xbe\xd2\xc4e \x068e\x9a,\x91\x88\xceQ\x0d}\xc8t\x9a?K\x8b\xfd<\x80\xce!e\xe9\xc9z\x19\xa4\xb6e9\x1a\xc7-\x1d\xeb!\xe3t\xaap\x9b\xf7\x8e\x0b\x87\xd0\x1aA\xc2\x82\xd5:<\xcf\x91\x9c\x1e\x91=\"\x8e\x93\xab\x89\xe8\x0b\x92%\x86\x1e\xabj\x85\x88R \xe6\x0cm/t\xces\x911We\xd3\xf3o\x9f\xd9F\x82\xee\x9cYC\xa2\xee\xfc\x84\x9e\x8b\xc0\xd7\xe4\x15\xcak^\xbbx&\xf5\xec\xbc\xd2\xb1\xdfnO\x1d\x17\xcf\xa1\xf4\xd0\x14\xdb\x0b\xa7\xebG\xa1\xef\xa5\xf6\xdc^\xa0\x02\x9a\xc2\\<\x89\xce\xf2>\xdc0\x0b\xcc\x15<\x85\x9b\x13\x07\x96\xec\x9e\xd3\xc2\xc5\xb3\xf3l|Cke\xe2\xc2xM't1^\x1b\xf4j\xd2MK\x18B\xb2\xc9\xe6\xd9\x90\xe4<\xe4\x81\x83\xd6w\\Cr(\x0elRO\xb1\xc3\x95\xbd\x19\x88\x8d\x7f\"\xb5\xda\xdf;vl\x8b\xd6n\xb9[\x88\xc65f\xb8\xc0\x8e\xa9`[Fp M7\x19E=\xf5\xda\xf9\xdc\xfe\x89A\xefv\x928\x1f\xda_xW^\xe2\xc7\xc1:\xbd\x9dy\xa9\xe7\xec\x04+u\xd4;\xe3\xcf'\xd7\x83^gr}\xf8b\xbasY-\x12\xb1:\xc7\x9f\x0f\xa7mg\xb8s\xb9RI\xdd\xd8\xeaZ.X;\xb2\xef\xb9\x19K\x12/\x0c\xd2\xe0K\xf2\x83x\xd9t\xf3@\xd8\x92\x98R5\x15\xd7~\xe8Y\xce\xd2y\xb4n\xb4\x12 k\x95\x85\xde>\x1d\xf7\xa6\x0e<\x85\x8e&'\x95\xed9\xdc\xd6\x84\x8a{\xaf\xbb\xa2\xd2\xb3\x1d9\x8e\xb0-1\x0bm\xdcMI\x922\x15\x8e\xe5]DY:\xbcXz\xe1[\x0b\x86\xe0a\xc4<\x19hB\x81M0\xa0\xc0\xe3\xdd=\xbd@\xb4\xbb\xbf\xeblc\x1e\xc6`\xf8\xdd4\xfa$zG\xe2\xe7^Bl\x0c\xd1\xda\xa6C\xa6t \x03\x96W\xe3\x9e\x1a$\xaa`\xbb!\xec\xe9\xc3:\xf4\x0f\xef\x1e\x98\x027Yy4[\xcaUE\xf7\x0e\xaa h\xf8\x04\xefU\xb98\x93\x05\xaad\x8f\x89\x02\x87U\x81\xc2\x03\xae\xfeS%\x81\x98N\xb8\x14\x93e\xc8\x05\xcarIf 8\x85\xa4+\xf2\x87\xe5\x05\xebg\x0d\xb3\x12V\xe6\x0d\x03k\xf2\xa4\x8e\xfal\x80\xaa\xc2<\x92\x93\x1b\x06<\xdfX\x1b,K-\x9a\xc9E}8\x05_\xa4\xfb\xa3\x9b\xa2\xf2\x82\xe0\xc1DS\x19\xaf\xc2\xeaa/\xc3B\x15;\x1aA\xc7\xa3\xdb\xae\xd3\xa3\xbb\xad)~\x80\x89\x9dm.!t\xfa\xdc7\x83\x07\xc1K\xb9\xa2\xb9l\xf2f\n\x90\xd89\x81v;\x84'\x10\x9f8\x10\xf0\x00\x83<\xbcv\xa8\xe6\xc6\x16s\xfa\xa0\x18\xcb9\xa5!~.Z\xed*\xc7\x11\x15\x8f\x83\x1c\xd7TdfX+\xe5\xb2\xdb\x10\x1d\xcd\x87\xac\x88\xdf\xde\xc6\xf0\xa4\xa5\x12 \xae\x86(qW\xf5\xda\x86\x94G$5\xe8m\xc4\xccUB\xd8\x95\xb4$\xef\x95.\x06h\xdbf]\xd4/`\xcc\x9d\x06NE\x07B\x18\xc2\x8c,IJ\x10R\x8ap\xd8\x8c\xa8\x02\xf5\xaa+\x99O\xfa\xb6\x13-D@1\x88\xbb\xe2\xdb\xee^\x95\xe8 \n\xaeO\x92\xb5\xbb\xaf\xcb\x92\x85\x8c\xe0\x8eC\xc8\x0bhu\x83\x04%zSx\x01:\xa5\x01c\xda\x11\xa3H:r+>\xcc]\xe5\x149>\xe5\x88hZF\xb3\xb2\xbe|\xc2\xcb\xc7v\xe8B_:\x9e\xd0w\x93e\xe0\x13\xbb&\x91\xb27N\xa76\xa5\xaaI\x193\xef\xbeR&-H\x93\xa8 0^\xefe!0)\xdfd\xdc\xd7\xe1\x14\x02J\x8dQK\xf9\xe8\x11\x84\xf0\x94\xd9\xf4R<\xd7\x88\xa6\xb6\xd8\x03\xdbv9f\xa4Z\x99_\xf3P\x98YOx\xfbt\x08<\xc5\x1eS\xda\x1e@\x1b\xbd6P\n\x0c\xf9\x03\x1c\xa0\x93\xbf\x84a\xfc\x02\x87\x91\x7f\xfar\xc8_\x0e\xa1\x83\xceXO\xa1\xe7\xb2/#\xad\xd9\xf0\x8aG\xbc`\xac#@\xd6\x11\xc3\x13\x08N\x1c\x88Xh\xb1t\x1c\xd3\x9e\xe8\xfd\x11\xa3;\xe3\xc6~u\xb76\xed\xe2A#.\x19\xe5\xb3\x94m\xb7\x94\x1dp\x1bIO3\n\x18ZJ\x0b\x15\xc4\x16M\x08\xb2`\x8d'\x93lv\xd4\xebu\xe8\xdf\xf9|>\xad\xb8\xa3\xc7\xa2Po\x97\x15\xea\xed\x1e\xcc'\x93lN\x06\xf8sN\x06\xf4\xe7\xa07\xc3\x9f\x83\x9eZ\x05\x9dd\x0b\x9b\xd9\xf5\xc7\xac\x99\x0bSs\xe8\xd85\xfe\xbc\xa1S\xe8\xc3e\x9f\x0e\xe5Jg\xe4\x00\x8b\xcf\xe6\xf3\xa9\xf3\xd5\xe0\xbd\xa52\xf0\xf2`/\xe6\xf3)\x02|sC o(\xcfk~\x9b\xe7Fw,\x16\x89A\x95Y\xb1\x999\xe9\x11\xf6g>=\x15i\xefm\xde\xe9A\xaf7\xe3\xb5\x8e\xb9G\xcd\x94\xd3\xcd[\x0bEL\xc7X\x87\xe5|XU\xff\xce\xa5^\x8e#\xd1\xd5S+\x0f\xed\xe6BX\xad\xbf\xd2\xef%\x8cx\xb6X\x1bGg\x9f\x8e\x8a\x91\xe2\xa0\xe7\xd0\x06\xdf\x05\xeb\xd2\xba\xeb\x9eH\xf9\xa9r\xe9\xb0+\xc2w\xdf\xc6\xd5s\x898\x10V\xa3\x01\x8am\xac;\xb1\xf0\xd1Z\xe3\xc7\xff\xe5\xe7~mj\xddkd\xf5\xccY\xc8JvdS.\x9c\x1f\xf13<\xe2;\x18\xb7\xc72\xdb=\x1a\xf7rC\x02U\x13\x9f\xd31\x8d\xa8F\xde\xd7Pr\x14\xff\xa2\xdc\xdf/\x1d\xb7\xdb\xc1\x14\xe9y\x00O :q\xd81\x87\n\x06\xe98\x98\xa2\xeb\x8dA\x92l:\xcf\xd4`\x83A\xcfU=s\xa3\x96g<\xb9\xf6{\x9d\xc9\xf5\xec`r=;\xeaL\xae\xe7\x07\x93\xeb9~\x99O\xb2^\x9f\x92\x82\xac\xd7?\x9cOw.kpf[zx\x1f\xe4\xb2S\x14\xdfR\xc7a\x96q\x81>\x11]\xdb\n2\xdd}\x12\x0f\x9dJ\x90\x03\xebG?g\x0d\xc1zV!\x14\xd6\x8f\xfe\x96\x1e\xfc\xb7\xf5\xe0\xbf\xa3\x07\xff\x8fz\xf0\xcf\xeb\xc1\xbfI\xc1\x9e\x02\xfe-=\xf8\xdf\xe8\xc1\xffV\x0f\xfewz\xf0\xbf\xd7\x83\xff\x1e\x05?W\xc0\xbfC\xc1\xbe\x02\xfe'\x14\\M\x91j\xfd\xe8\x0f)x\xa6\x80\x7f\x81\x82\xab D\xad\x1f\xfd}=\xf8\x17\xf5\xe0_\xd2\x83\xff\x17\n&\n\xf8\x7f\xd5\x83\x7fW\x0f\xfe==\xf8\x1fP\xf0K\x05\xfc\x0f\xf5\xe0\x7f\xa4\x07\xffc=\xf8\xf7)8P\xc0\xffA\x0f\xfe\x03=\xf8?\xea\xc1\xbfL\xc1\xaf\x14\xf0\x1fQp\xf5\n\xab\xf5\xa3\xff\x89\x82_+\xe0\xffY\x0f\xfe\xa7z\xf0?\xd3\x83\x7fE\x0f\xfeU=\xf8?Qp\xa4\x80\xff\xb3\x1e\xfc\xbf\xe9\xc1\xff\xbb\x1e\xfc\x7f\xe8\xc1\x7f\xac\x07\xff\x1a\x05\xff@\x01\xff\x0b=\xf8_\xea\xc1\xffJ\x0f\xfe\xbf(8S\xc0\xff\xb7\x1e\xfc'z\xf0\x9f\xea\xc1\xff\x9a\x82\xab d\xad\x1f\xfd\x19\x05\xdf(\xe0\xbf\xd0\x83\xff.\x05?S\xb7\xc3oS\xb8\xa7\xc2\x7f\x9d\xc2\xdf,\x14\xf8\x9fSx\xaa\xc2\x7f\x83\xc2\x93jH#\xebk=Y\xfeZO\x7f\xbf\xd6\x13\xda\xaf\x91\x88+\xe4\xed\xeb\xbf\xa3\x07\xff\xbc\x1e\x8c3\xa0\x10\xc3\xaf\x7fA\x0f\xfeE=\xf8\x1f\xe8\xc1Hh\x15\x8a\xfa\xf5\xdf\xd7\x83\x7fI\x0f\xfe\x87z0\x92 \x85,\x7f\xad\xa7\xd6_#eR\xa8\xf5\xd7\xbf\xac\x07#\x99P\xe8\xef\xd7\xffT\x0f\xfe\x15=\xf8W\xf5\xe0\x7f\xa1\x07# R\xf0\xed\xeb\x7f\xa6\x07\xffs=\xf8\xd7\xf4\xe0\x7f\xa9\x07\xe3\x9e\xfd\xab\n\xf8\xd7\xf5\xe0\xdf\xd4\x83\xff\x8d\x1e\x8c\x9b\xf3R\x01\xff\x86\x1e\xfc[z\xf0\xbf\xd5\x83\x91\xd9\xff5\x05\xfc\xdbz0\xca\x00\xca\xc6\xfc\xfaw\xf4`d\xb1\n\x07\xfb\xfaw\xf5\xe0\xdf\xd7\x83\xff@\x0f\xfeC=\x18\xd9\xb7\xc2\xd8\xbe\xfe==X\xcf4\xbf\xd6s\xc7\xaf\xffH\x0fFv\xf2\x93\n\x18\xd9\xc9\x17\n\x18\xd9\xc9_W\xc0\xff'\x05\xbfU\xc0\x7f\xac\x07#'\xf8D\x01\xff\x89\x1e\xfcgz\xf0_h\xc1\xdf\xfc-}i\xe42\xd5\x981\xd6\xd7\x7f\xaa\x07\xff\xb9\x16\xfc\xcd\xcf\xe9\xc1\x7f[\x0fF\xd2\xabH#\xdf\xfc\xbc\x1e\xfc\xf7\xf4\xe0_\xd4\x83\x91 (\"\xcd7\x7fW\x0f\xfe\x05=\xf8\x97\xf4`\xa4\xdf\x8a\x90\xf2\xcd?\xd2\x83\xff\x89\x1e\x8c\x84Z\x91/\xbe\xf9\xc7z\xf0/\xeb\xc1Hc?S\xc0\xbf\xa2\x07\xff\xaa\x1e\x8cT\xb3\x1a\x93\xc1\xfa\xe6\x9f\xeb\xc1\xbf\xa6\x07#\xa1>S\xc0\xffJ\x0f\xfeu=\xf87\xf5`\xa4\xc8\x8aT\xf0\xcd\xbf\xd6\x83\x7fC\x0f\xfe-=\x18)\xf2\x1b\x05\xfc\xef\xf4\xe0\xdf\xd6\x83\x91\xf4VC\xe4X\xdf\xfc{=\xf8w\xf4`$\xa6\x8aP\xf8\xcd\xef\xea\xc1\xbf\xaf\x07\xff\x81\x1e\xfc\x87z\xf0\x7f\xd2\x83\x91\xc6*\"\xe47\xbf\xa7\x07\xff\x07=\xf8?\xea\xc1\x7f\xa4\x07\xffg=\x18I\xef\x0f\x150\x92\xdew\n\x18I\xaf\"\xe3~\x83\xa4W\x11f\xbf\xf9c}i$\xbd?\xa3\x80\xffD\x0f\xfe3=\x18\x89\xe9\x97\n\xf8O\xf5\xe0?\xd7\x82\xbf\xc6\xd5y\xa92\x1e\x9c\xab@\xe1<\xdf\xb0\xe3\x9a\"\xb9|\x83\xc2R\xa4\xc2Q\xb0|\xac\x927\xe4\x1bI\xe1\xcab\xf2\x08a\x8ex\xdb\xab\xe9\xee\xa3Q\x945u\xdc(5\x84tL\xa6\xa5\x17\x9aT\x895J!\x83_\xc8\x81>\x1d\x89\xa2q\xcbx\xf1~\xa3\xeaKo\xde\x12zc\xbcK\x92\xf2\xe4\xdd\xdc\xf2\xc6\x9c\x92\xe4\x81\xa3}\x93\xdb]\xb2\xc2\xee\x82\x1aL\xa6x&\x9b)\x9euv\x12\xf4 \xeb\xf5:\x93\xeb\xc1|r\xbd\xebu&\xd7{\xbd\xc9\xf5\xfeEgr}\xd0\x9b\\\x1f\xd2/\x87\xf3i{\xe7\xae6j\xd1\xc9\xf0>\x9d\xf4:_N\xc7\xcf:?3\xbd\xc5\xff\xbf\x1a\xb8\xef\x11v;\xeeu\x8e\xa7\xf4+{\xc8\xbf \xf4v\xfc9\xfb\xd9\xeb\x1c\xc3t\xe7\x8e\xdd\x0f\x99g\xd8Vv\xae\xdc\x085\x99\\{\xfedr}\xd1\x9fL\xaeg\x87\x93\xc9\xf5\x9c\xfe\x87\nV:\xe1l\xc6q\xca\xd9\x9c\xe3\xa4\xb3Y\x9f\\_0\x85k\x8f+\\\x0f\xe60\x99\xa4\xf4\xf5\x8b\xc9\x84\xbe\xeb\xf5P/;\x9fO&\xe1d\x12c\xa1\xc1\x11\xfbs<\x99d\xfd\x83#Z\xa2\x7f\x84\xd6\x16Z\x11\xfb\xd3g\x7f\x06\xec\xcf.\xfb\xb3\xc7\xfe\xec\xb3?\x07\xec\xcf!\xfb\xc3\xea\xec\x1d\xb3?\x1ek\x81un\x9f\xfe\xd9\xed\xf5\xaaq\xae\x98y\xcd\x826\x0b\xecm0\x9d\xcd\xda\x96\xba\xe1P\x0b=8\xe4\xc3>\xbc\xd0[\xc9\xe8R\xd3I\x9d\xd3\x99\x9a\x1fL\x98\xb6{r\xad\xda\xba<\xad\xe9Mt\x0d-A\x95\x06\x8dU?\xeb\xfc\xcc\x84)\xdaQ\xd3\xceT\xed\x93\xeb\x191\xd9\xd7\xb60\xe4\xf9w2\xe4\xa1\x89l\xbcq\xbf\x96\x92E-\xcb\xed~\x9e\xcer\xb6\x96\x8a\xce\xeb\x8b.x\xd1-\xcd\x07\xb7&\xdb\xa9S\xb5>\xce\x8c\xd6\xc7\x85\xc1\xfa\xa8\xb5\xb5\xe2\x1d\xe8\x8d\x0c\x92\x0b\xbdA\xf2\xaad\x90\xd4\xd7G\x9f\xcd\xca\xaf\xdd\x14&\x96\xf1<\x8fs\x8f\xf3\xdf\xa6\xd3\x86\x96:\xfbt8\xbb].oW\xb71\xb9Mn\xd3\xdb+\xe28\xa7\xdc^9\x8e]\x98\xbb`}`\xa9\xf6NX+\x15}t\xfb\xc9'\xb7\x9f\xde~\xf6\xe2\xf6\xec\xf6\xcd\xedO\xbd\xa8T\x04mX\x9a*+\xfa\xb7\xdc\xa4\x7f\xe2\x8d\xa6\xe6-\x17\xf7\xfb\x87\xf6\xe9\xb0\x7f\xf6\xe6v\xf0\xea\xa3\xdb\xdd\xcf>\xba\xb5O[\xe3\xfe`w\xeaL&\xb37\x7f\xcd\xb1OG\x93\xc9\x05\x92\xf1\xf3\xa9#\xbf\x93\xa4\xb7\x83pv\xbb\x1b\xcfJ\xef\xa4\x8b\xfc\x9dg\x9d\x9fa\xef\x04.\\I\x03\xbb\x97\x8dJ0\xaf\x9b\xcd\x98\x97Y\xe48\xa8\xe6\xf4a\"\xc7a\xd5\x05\x98'@\xeb7:\xd0V;\xcc\x82l\x06_\x12vw\x9b\xe7\xc6\x9cy\xa9w\xae\xcf\x7f\xba\xf0\x92\xc5\x10o\xb6\xc5\xae\xf2p\xe5\xad\xf1\x99\x1d\xd1q\x07\x1a\x0f)\x91f\x0b+(=\xbd\xbb\\\xa6\\\xc6\x11rYU^\xe3\xf6o\xc55\x97\x0bf\x8a\xdb\x8b\xc7\xe1\x03\xed\x9d\xdd\xc4\xec\xc8\xa8\xb3%\x87\xdb\xd9\x92Y\xd6\xcc%\xf1b\x1b-\xc8\x04\x03\xb9\xe8\xa4_1\x13T\xd2U\xfd\xcaD\x18\x7f;f\x1e\xeb\xe3\xfe\xb4\xde\xb4N?\x89\x9c\x0b\x92\xf6\x81e\xed\x92\xc1\xdc\xab\x11\x13x\xca\xf0K\x82\xf2i\x19\xb8\xf0(\x12fe`\x82%\xbd\xf2\x1d\x8f-/u\x1c6\xca\xd2Z\x84\x970\xb5\x9d\xf1d\xfa\xd5\xfb\xdb\xe9\xce%\xd2\xf1\x0f\x1eYR\xb1r3\xb7\xf9}\x07\xa7\xfb\xe1)R\xf4\x89\xed\xdc\xe2\x06\xea\xb69`\xea`M\x1f\xf4\xbb\x1f\x9e2~\xf5\xc1\x9d\xe9z\xcbn\xa1\x0b\x1b%n\xc2\x03\x01o\x1e`\x18\x8d!x\x0e\x13\xfb\xb3\xd2\x8d\x9f\xcdQ'\xcf\xe5\xa6$\xbe\xccs\xb9\xed\x8c?\xefN\xdb\x1f\xect\xc95\xf1m\x8cR\x16\xe0m\xa8\xe2[\xf7\xe5\x8b\xf3\xef\x7f\xf6\xfa\xcdk\xbc\x87j\xe1\xa5\x15\x8b\xdf\xf6Kb\xdf9\xefw\x99\x03W\xd9\x15\x7f\xbb\x99hE\xcc\xd9%\x08\xb7M\xfa)\xed^gl\x9d\x9f\xfbQL:_$\xe7\xc9\xc2\x8b\xc9\xec\xfc\xdct\xa7\xe8\xae*\x05\x8dc\xff\xc6\n\x83\xe6C\xdbf\xb3&\x18\x03\xd2\x96\x85\x87\xac\xe3\xd1\xa3\xdc5\\\xa6I\xe3T\xef\xe6Y\x90\xa5\x0e\x0b\x1e\xc6c\xc6\x90;\xcf\xbe\xce\xfb\xd3:?_F3/Y\x9cSF\x7f\x9e\xc7\x94;?\xd7\x1c\xb9\x14\xbf\xf4\xf2\xf6\xdc\x16\xb5J\x93$\xa6\xa3<\x17\xc1\x1cl\xc5\x83\x0b\xa4\xb33Q\xa6\x0fJ\xde\xca<\xc4P\xbe\xdau\x99\xf4\x85\x7f-\xbf\xba\x82\xd7]N\xd9\x8dU\xe12\xfe\xa0s\xff\xe3\x9f\xce\xfc\xda\xc2i\xf9\n;\x8e0\x90\xc6\xfd\xa0\xe3\xac\xc1\xb1\xa61j\xf6\xb2X\xf9\xe6a\x16;\xa8]\xde\x89L\x18\xeb\xbb\x10\xb2\xdb\xc8\xe8\xc7')\xd7\x08\xf7\xfa&L8\xb8/uh\x12I\xc6\xd3\x07\x12B\xb42\x08\x0b\xd5\"\x89a\xebe\xe0\x93\xa6\x89\xdf\x08\xb9\xf4Bo\xccPH\xbb$-;\x14\xc1\xb6l\xba;\x8b\x04i\x1d\x8c\x1aE\xba\xebh\x8d\xa9\xda\x0bl\xc4k\x15.t:\xf9\x1c\xb9\xd0\xbb\x13\xbb\x15\x93\xf4\x974\xf8\x90\xc7\x13+T\xb6\xe3p:\xee7q\x9f\x87\x1cI\xee\x8b[\x1e\n\xa5t\xa5\x9b\xb1\x0f\xdf\x93Mw\xb2:\xad\x18q\xca\xae\xb9E\xc7\xa7\xd5n\xb7%\x0c\xe1at\xc6\xb4\xe1)^\xb3\x0f\xc7\x01\x9dm\x96\xe0~\x83}m\x1e\xed~\xe3hM\x18\x14\x8bT\xa5\x0e?P\x99n\x96\xdd\x95\xfb7\x12#3r\xb3\x1b\xa1\xa9\xb6;\xf2\xd5Q\x8clb\xb1\xac\xdb\x12\x80e\xcd\x96\x00\x17Q\xb4$^\xc8!\xa7\x94\x0d\xf0T\xae\x16\xb2\x9d\x94\xae \x93\xc8F\xf7\x90)\xb7_\x8c\xd2&\xc0\xb5\xb8$\x1b\xa8\xee\xbf\xdd.0\xd6\xf4-v\xa1f\x03\x16\xdd\xd0\xef\xbe\x101QO\xd3P\xd7\x80\x95\xbbe\x86\x1brv6\xcaoW\xf5\xef\xb7\xedv\x8f\xf6\x1c;\xb4\xf7v\x0f\x9c\xad\x8c\x90\xe63{_\x7f\x1f\xeaPw\x18\x0b\xed\xc3\x83\xc696,s^\x80q\xb3\xcc$\xd0zE\xe0!\xdd]F*\x0c\xb7\x02\xbci\xad\xbe/\xeaH\x04\xb5\xdc\xd5\xd4\x00\xfc\xaed\x84\xe1*\xc3\xda\xbe\xcb\x1f>\x8e\xc4\xf6\xc6\xe9\x14/lx\x86l\x17\nT\x85\xd0^\xfa\x94\xe0\xe4\xd3a\x14\xe0}\xe4Jp\n\xde8AQ\xdc\xa7\x82\xaa\xaf\x91\xc7\x01\xee\xa3Q<2\xdc\xa1P\xe2\xf8p\xbd\xeb\xd1\xde\xd6\xa8 \xc8l`\xa2\xf8\xfd\x928\xf4\xe8\x11\xa6*\x18\x0f\xa6\xec\xd6*\xfd\xde\x9b\xba\x0c\xd8\x9fR~\x96\xb7\xa5\x18\x8e\xa1z\x04J)Af<\xd4Ub<\xdcu\xd6\xfa\x87\xd5\xfbF\xe2:\xa1N\xe5\xd5W\xd5]\x83\xa69\x14wx<\xddd&H\x98\xf8]|e\xf8\x18\xba+`i3b=\xe5\xa3\x0d{\x0e\x96\xbc\xc1(M\x0b\x17f.\xac\xd9\xaep\xe1\xca@1\x91\xee\xca]\xbeAO\x8b\x99\x0b\x0b\x17\"\xb8\xe5w\x0c\xaf\xe8\xa6\xbc\xa9\x1fA\xcd\n\x8a\xb7\xee~\xfak\xbc\xad[]\x91\xeaA\x94Yy\xb6:\x8b\xdeC\xdel>L\x91\x8d\x85dZ\x96\xcb\xfd\x0f\xdea\xb91\xd1\xdf\xcd$\xc6\x07j\xeb\x9e\xa2\xa1>|P\xbf\xaf\xf7b\xea\xf7\xaaV4$\xd5\xbd\xc6 \x1f\x9b\x1e\xf04\xc4\x17D\xf4\xcbh\xae\xde\xd7\x04I8\n\x0d\xb5@.\x1dQF\xe7 &\xfa\x042\x16C\x9aO\xabW:\x13\x96\x11\xbd\xdd\x0e9\x06Q\xa8Z\xbd2\x0e\x10)z<\x13?\x85F1YH\xc9\xf7\x13\x8c\xcd\x8cX/\xc8\xee\x1e\xeb=\xd5\xf6zz\x83\xe8^\xbf\x8a\x12\xc8{\x95@H>\x17\x8e\xaa\x885\xe7\xf0*\".U\xb1\x00\xbdI\x84\xad\xeb\x99\x08\xa2WuOY\x94K\xc5\xdeM\xb5\xc4L.\xc18v\xb5\xc8\xd5\xfd5\xb0B>\xb9q\xe1\xd2\x85\x95\x0e\xfd)\x9a$\xdalT\x17\xf8\x84h\x9e\xbc\x83\x11\x9c\xc3),`\x08\x9e\xf6\xddk\x18\xc1E^BW\xc7\x19e\xf4\xb4\xa2wT\xacY\xc3)\xcc`\x08\xef\x1c\xfak\xa6\x16\x7fA\x8b\xd3Z\xaf\xe5\xe2\xd7\xa6\xe2\xcfD\xc5\xd7\xean~F\xf9\xb9\x8f\xd62u#\xe3&\xf5\xe5`Q\xad\xbe\xba\xd7\xcey\\\xe23\x0c\xd5\\\xb3\xbb\xf2\xf6Zgy\x85+T.\xae\x04;s\\8\xa7\x909S\xfc\x06\x9aU\x1bB\xc4\xa1\xefJ\x0f\xd4\xb1\xb5\xec\x10\x1ea\x90|=\x8dz\x0d#8Cer\x1e\xd9\xc8:?g\x89\x0eg\xe7\xe7\xa6\x0c\xd3_\xc0\x08^H\xaf\x91\xeakzj\x87\xf6\xbe/\xea\x0e\x83o)\x8e\xc3)\xa4,\x984*Vk2H\xbe\x84\x11|\x81Z\xd8\xa28\xd1\xcbD\xc6\xc9\xbe\xb4\xdf\xba\xf0R\xcc\xe3J=&n\"\x03\xb5pQm\xb5\xf6L]\xbe;3F\x95\xd3qc\xec\xb1\xfe\xd4\xb7{\xbc\xaf\xf5\x0b\xc9\xbe}\xbf\x90\xaa\x8c&;\x88`\x01o6\xb3\xd31\x99V'\x83~2\x89\xbey\xb3\x19\x06\xb5* \x94#2\xaf\x8eLq\xe0\x88\xca\xbe\x1a\x99v~\xab\x93\x1b\xde\xcf\xe2\xb3\x91D\xc4\x99i\xe8l\xc48\x7f\x9cbXs[f\xf3t\x8aM\x90\xa6&\x8c\x08m\x8acx\xac\x8fi\xac\xb8\x9ad\x06\xa9\x81\xbbE\x1d\xeb\xa5\x80\xbd^\x95\xdf\xfb*_\xa7\"\xc0@\xe5\xfe9\x8b\xfe\x1e\xd3\x15WytI\x1c\xf8\xc8K\x15G\xd5\x92$\x80a\xd7k%\x81O\xbd\xb5N\x0c\xc8\x9f\xbfB\xa5v\xb5\xc8\x8d\\\x849\xb6T\x8b\\\xcaE\xce\x88\"l\xacJ\xcfQ\x97^-r^*\x82\xca\xf4j\x91\x0bE\xee\xf9^6\x9f\xab\x1d~W\x996\xef\xa7\x02\xf2\xaeZ\xe8z\xe3@\x94g(\x17\x9c\xc25c\x0b\xaf\xe7\x1b\x07\xfe\x13\xb4:v\xe1\xda\x85\x17.<\xab\xa2~\xf2.\xc0\x08|Z\x1d\x96\xef%\x04\xde\x0d\x158p\x06\x98\xcayA[\xa3r\x9e\xd0\xdb[`\xcf_\xcf\xe7 I\x8b\xe7\xecw\xad\x00B?)\x06\x10\xbb\xc0 vy\xf4T\xf6K-\x8f\x1d\xbd\xd0w4\xb7|6\xf5\xb6\xf5\xc2\xa6\xc4=\xc0\xab\x1e\xec\x1bqtY\xbf\xb1\xb5\xa5\xda\x1a\xc2\xd7\x06\xf8Um\xef\"\xbb\x9d\xba\xd0\xd6i\x9d\xf1\xedE\xed\xdbi7\xf4V\x84\xe9/\xf1\x1b\x06jY\x91$\xf1.9\x98\xff0T\x7fc\xe8\xf4\xaa\xbeYfYR\x83\x88\xe6\xef\xcf\xf4\xef\x0bQ\xcd3\xbcvi~\xed\x0b\xe6.P\xcd\x1d&>\xb9Xf\xd3\xfa\x13\x0ch\x8d'\xbd\x96\xd0P\xa0\xb4\xfaE#\xf6 \xe9\xed\x19\xd74\x98\x9b{\x9b\xd7\xf5\x16\xe7\xc3 \xaf\xc1\xed\x08\xe6.<+\x0e\xa2\xe6\x86_b8\xc5\xd7\x88\x88\xaf\xd1T m\xe0Zy\xf0Y\xa1\xb1q\xe1\xa5az\xcf\xcd;\xba\x10\xe3\xcfD\xccJ:\xa83\x11M\xb6\xf4\xa2^v\xbc\xbb\x11\xdb\xe9\x16 3\xf5\x94\xed\xae.i\xdb\xca\x87<\xad\x0e\"\x8cA\xf5\xa5\x89\xb7\xaf v\x85\x15\x8e\xdbm2\x85\x11:\xf5\xa7\x95\xcbq\xce\xb7\xa11\xfbv\x86W;65\xa1@\xd3\xb0\x8cx\xb0\xd7\xd3i\xcc\xfa\xaa\x08\xf5@\xda\x03\x9ewO7\x89\xa8Q\x81G\x10\xa8\xf38gv[\xcd\x89\x123\xef\x19S\xa5.1m\x82M\x1c\xc9\xd2\xd4\xf2\x8d\xf4\xa8Hm\x00#X\x9e\xc0\xba\xc6\xe4\x81\xb9\xb9\xc7k\x83]\xa0e\xfb\xa8\xb1\xc0\xdc(C\xc9\xcbn\xe1lh\xe3\xa0m\xcc\xd03YG\x13i\x1b3\x96[\x88>\x96T\x0c3\x0d]\x14\xe6\x82V%Bg\"+\xea\xd8\x0f\x8dCO>+T4\xf4\xe9il\x0dO`i\x9c\x99K\xb4\xa7\x88\xf91\x98UV\xe8\xce\xb80L_\xe6\xe4\xfa$\x1fox\xae\xf0\xfc\xbb@,J\x11\x7f\x86\x90\xd9\xf4H\x8cP\x86^\x89\xc9\x8c,\x9b3\xce\xe1\x94\xf6p4b\xc7y\x8fW\xc2P\x13\xeb=7\x9b\x9cQE\xa3\xe7 \x171\xf1\xde*OT\x83\xf0\x0d2L\x94\xb2\xfd\xc2\xb7\x1d\xfdF\x16u\x14\x1f\x0dI\x88\xbf7\xa6\x89\xbf@!N\xaaU?\xf5\xefP\xba\x93\x8a\xa9\x03\xba\xa0\xfb\xe6\x1dm\xad\xdc\xc9\x80\xa7lS\xa0\x8c\xd3\xdb\x96\xd8\xf0r\xd8\xf5\x0b\xfa\xecBV{#D[\x16\xdb|'\x97}\xc7\xfc\xd0\xd9\xd4o\xc0\x12\x13\x99)\xe7?(\x82o\x99\x88P\xa6\x91\xfa\xeb\x0e{=}\x0c\xca\xbb\xfbN`\x10\xe1\xc8\x85\xe0\xce\xc7\xe2\xbd\x9e\xfe\xbe\xd0Qc\x97\xd4ZE\xcd\x11\x8b\xefnpHc\xaa\xc6\x08o`G.\x84\x1b\xdc\x0ehf\xb2\x1a\xbd\x816^=)\xc5\xa7\xcf5KR|\xfat\x1c@\x1bX\x8c\xfaqh\xf0>\xbf\xfbl\x9b\xf2\xae\xe8\x8c\x11\n\x0b]s\xe6\xf92y\x11f+\x96\xb0K\xd5R\xf0\xd7.I*\xf1[vfNT\xddEV\xca\x0c\xa4#\x15\xc2J#\xa9\xe5\xc6S\x18V\x0c\xfe.\xc46\xcb\x1b\x94\xd7\xa6\x0dO \xd5XD\xb8'\x1aMh5K\x0c\x0c!\xd0\xe3\xa4\xf7-#M}\x92\x83\x9e\xc8\xe9/c\x91\x9e\xe0f,\x0f\xbf\x86\x89a\x8cN\xf4\xe2D\xea\x15\x8d\x83v\x1b\x13\xc4o@\xc1\x9aB^7N\x84\x81\xb8\xdc\xfd\xa6\xe6\x9eAy\xdc?\xd4_B\xd4'\x0dQme<\x81X\xbf*\x82&\x06\x1b\x9a\xee.\xd7\xf6r\xa8\x8e\xc4\x85\"\xec\x84\xb2\x92\xe8D\x83\xa99\x02\xa3\x00\xca\x9e\xb7\xd0\x19$\xd3\x96ZWJ\xb5\x96(\xbci\xcb.P\x0e\xbe\xbd\x859\xfdoI\xff[\xab\xa5f\x98\xb3\xfc\x94\xb2\x8c\x1c}\x99\xae\x8d\xca0\xba\x9c\xa1r\xce-\xa3\x84\x87~)<\xbe}\xcb\xcf74\xbb\xeb\x8b\xf2\xb3m\xb1*\x90m\xdf\xb0.\"8BUS\x01\xb6\xd6^LB\x0e\xc0\xf7\xd7\xac S,I\x05\x0b\xd5P\x05\xf8Z\xaa\xd2a\xe2\xda\x8d\x0bW\x0e~\x9f1\x03\xf7\x8d\x9e/\xcd\xee\xbb\x8b6&'\"-\xac\xa0\x17\xe9\x89\x03\xb1\xc8\x8a\x12\xea{\x17\xdfy+\xeasS\xec\xe96\xa2\xce\xb6\xdc\xb4?\x0c\xb4#\xe0w\xbab\xae\xa3\xf8\xb6h\xd4\xdd\x15\x1a\xa6\xa4\x1d\xfd\xaa\xec\x16\xe9',\xc3d\x82\xc5\xf4d\xe3|\xfa>^F^\xba;\xe0\xb6w$\xe3\x95\x87\x07{\xfa\x87/\x85\x86E\xf7\xa4\x7f`|dj\xacP\xd9\xe8\x1f=_z\xab5\x99\x99K\x98\xda\xa4\xcfJ\x8db\xa6\xdc\xb1\x0e\x83*o\xea\xeb+\xe9\xeb+\xcfr\xf3G\x05^\xe8\xee\xd5\x07D\x01r\xfbGu58\xae(\x0f\xd0\x18R\x81 \x03H\x05,<(*`a\x0b\xa9\x80\xd1\xfeQ\x85q\x9bG\x05\xfcC\xe2\xbd\xcd\xfb\xd1\xea\xbb\xdbm\xc1\x88o\xc1 '\xf8\xf8\xb3\xd5\xca\xc6tW61\xf7\xc6\x1d\xd9\xec\xcf]#L\xa6fu\xe5F\xfb\xb8F\xf3Ul\xf1\xbeb\xf3\x03\xbe\xcf-6\xc3\xa5d_tr\x18\x1b#\xdd0\x9a\x9177k\x06S\xab\xc0tQx&U\xeba)\xca\xb1\x9e\xb4T\x8f\xc6\xb5\x80\xd2\x10vs\xb8\x98\xe0\x11\xaf\x1a-O>I4~\xba^\x1da\x14\x9f\xfa\xc4\xd3W\xb6+\\Q\x95\xfe\xb1\x98S\\\x8b\xb3\xfbG}'?Zn\xce\x15\xfa\x86\x03Z\x7f\xa3\x03\xdav\xb2eu\xe9P\xf7\x14\xcb \xe3U\x7fx\xa1=\x1eO\x0d\"YHE\xb2\"\x85\xbct\xc8\nq\xff\x97U1-\x9eF\x8e\xb9:\x98\xa4\x8fm\xeeU]\x19\xd2tm;\x19b\xa0<\xe5\xbfQ\xfd$\x99\xbbF\xa0W(\x11>\xc2\xdc\x92{{\xdb\x9cv\xa9\x06E\x8eD\x8e~\x0c0\xe0\xf2\xa1nu\xed\xa6\x99\xba\x9a=!\xf22uW\x1bR\x9b\xca\x92\xf7\xa2\xb1\xd2\x90\x07\x86\x84\xd0\x067\xd9\xbdA\xd5W\x92\xfbP\x0e\xaa'4\xeeC9\xa8\n]\x89^F\xe3N\x94\x8as\x06=t\xf9v\\\x81b0\x0e\xbb\x1axg\x8d\xd0\xa8\x02] 4\xab@g\x08\xad\xe6\xdf\xa3\x07#\x89 \xb2L'\x1a\xb1\x84\xee\xae+4[\xc7\xf8\xbf$\xe4\xd8}\x87\x1dJ\x82\xd2\xbb\xc8\xed\x8b\xd7\x02,\x12\x95\x8a|?\x8eVABD1J\xae\x93hyElV_V*\x8c\xc2FQ_\xc6\xceD\xa5\"\xb9\x90Q\x14\xf3\x9cB\x87\xda\xbcA\xf5\x87\xd2P\xe7c*.;\x96\xb6sM\xc69\xc4>8\x05\x9f\xa2\xba\x9a*\x93\xc7?\x10^\x12Z\xfb\x1e\xdaT\xe7\xb5\x96r\xcd\xca\xa9\xdc\xce\xe4V\xa0\xab\x07\xa7\xd3P\x85\xc6\x03AWE\xbe\xca\x86j\xea]\x0e\xca\xebo\xa8\xc2`\xfe\xafV\x91\xe3\x87\x81\x94\x80\x96MT\x92U_mGovw\x1d;\xb4\x0f\x1d\x17,\xb1&\xa6(5[\xdej\x94j\xe6S\xfc\xf0\x15\x9f\x91\xf4\xe1+\xe5\xcb\xf0@\x15\xf7\x8f\x0c\xa1\xd4\xb6\xb7D\xe4\x82\x87\xb8\xbf\xe7\xf2\xdb)B\xb5\x1e\xd6\x18E#\xaeeW\xb7>p\xa6\x91\x8e#\x9d\xba\x94\xa9Kx~\xb4\xd8\xce\x1cSX[\xd8\\\x8a\xa9\xb9B`\xba\x01\xa9\x0f_\xb57\xd0)\x0b(\xbb\xd4\xc5\xaf\xd2\xad\x86PhV\xcb3\xfewXe\x8bs\xd5\x04\xbf\xdc\xf0\n\xa1A\xc6\xc8\xf8\xe1\xd1c\x99A\x13\xdb\xc7\x95%\xcdW+\x85\x9e;\xd0\x05%\x90Z\x90L\xac\xec\xd4\x90\x07\x17\x89\xd8\x9bh \"\xb8\xc0s\xb8\x85\xe5\x03\xc92\xfd\xa3\x8dn\x83\x1bL[\xb8\xf0\xba@I,\x9d\xa7^|\x96\x86\x1a\xc0)\xa6\xc1mJ|k\xe8\xfe\xce\xf8\xf3\xeex2\x9d\xb6o'c\xfbthwN'\xb3\xb6}:\x9ct'\xb3\xb6s\xea\xdc\xdac\xeb\xf1\xd4\xb1\xe9\xb3\xd3\xd6d\xe0\x8c?\x9fL\xa6\xb7\x93I\xd7\xf9\xf0\xd4\x99\x0c\x9c\xc9\xf4\xd6>\x1d\xe1\x1b\xb7\x93\xf1d\xea\x14_o?p\x9cj^3:\xdc\x9d\xc9\xc4\x9eL\x9c\xd3\xea3\x81\xebGN\x83\x1b\x8a\xe9\xc8\x02\xc5\x0c\xed\x1d\xb0\x9b\xb8\x98N\xf6y4#\x98RV:\x98X\x16r\x14\x11\xfa,.O\x17s\xa2\x8cLGa^GLq\xab\x94C\xff\x83>f\xa2E\xe5y\xaa3A\xc9!%\x18D\x8f:\xd16\x8bH \x8a\xce\x89f\xbf\xf9\x1a\x99I\x06C\xec\xab_\x05\x90,y\"\xf8\x00W5\x84\"\xb4\xa2[\xf1\x14\x026 \n\x8c\x11x\xdf\xf3\x17\xfa\xb8\x07w\xa6\xb4{\xbb\xfa\x83\xc6\xdench\xc3\x1ab\x86\x1b\xb6\xc5\x8f\x92\xe2\x8eK\xdct\x00\xbc\xcf\x11\xad\xd4\")\x9d\xc8\xef:5}\xc35\xfc-mj\x8a\xedL\xd8\xd4\xf4,\xe8\xf0\xae~\x00\xb9X\xe0s\xcb\x07\xe5Q6)\x82\x009\xb9\x15j\xc9\xbcd\xa0\xdd\xf6\xe1 \xcck\xafg'6\x19\xfbS\xa3\xdf\xceR\x90g1\xf7\xd8\xbf5=k\xa1\xbf\x8d\xfa^\xca/s\x97\x1eh\xc5\x074\xac\xd1>\xb6F0\x87SX\xc2\x10Z-{\x0ef\x031g\xa1s\xfc\x9b\xd9k\x17\xe6\xdc\xbekKq\x13\xef\x8d\x87\x06$\xbc\xbb\x97\xc2\xae\xde'doW\xef\xbf\xa2\xca5\xd9\xa6\xc8c\xe8z\xc4\x9cD\x98G\x01\x06\xbcj\xde9w\x9e\xa7\xbc@\x9d\xc2Z,1)\x87\xa8\xaaz\x8c\xdeu\xca7\x91J\xee\xd3\xfd\xb8\x12\xb9\x0e\xee\xd3\xd9\xbd\xdd\xaa2T\xa8\x83\xf4\xa9\xb2\xf7vu\xc4\xe8S/]tW\xdeu\xd3\xb0\xcd\xc2\x98W\xb3\xf5TMA\xcb\xcb\xd5\xaa\x9d\x8aO\xde\x95\x88\x98\xc1+\x13I\xcb#\x93B4\xc9\x13\x9e'\xe8\x0d\xeeA\x1b\x12\x0c\xbc\xe62^\x1c\xd0\xf9\xdeu\\H\xee\x8f\xb6\xc2\x15V\xd1o\xe44V\xf6eb\xde(!\xb4\x01\x05\x9e>\x0c\xa1\xd3wN\xf06K\xd4\xe9\xc0\x10\xda\xed\x88%TW\x90\x85N\x13\xb1\xe9\x91\x0b\xbd\xca$Et\xa4\x9d\x86\xbb\xc7D\xdb\xdbm\xce\xc4_#\xec\x98d\x12\xf8 \xe8\xeb%\x12\xb1w\xe9\xd2\x12\xe8\xa0\x10N`\xd8\x18\xc2\xc1<\x82=\x9d\xa8\xd2\x87\x9d\xaa\"\x0b\xe3\xbbt\x0f\x8f\x0f\x0f\x8ew\xfb\xbb{G\x07\x83\xdd\xfe\xfe!\xd9\xed\x1dm;\x01\xb9\xaa\xfb\x94\xf9^1S\x01\x13\xe3\xa8\x04\x8b_;\x01{\xcc\xc2\xbeu\xe8\xfa\xf7\x1d\xf8\x10\x1d\xeeR\xb1SR:r\xfc7\x92!w\x9d\x0b%^3\xd7&\xe8\xb4\xc3\xaf\xbcW*-\xd8\xf9|\x92\xb4o'I\xfb\x83\xea)\x83Ex\x1ew\xda\xd3\xde\xf5\xb8\xd79\xf6:\xf3i\xfb\x83\x9d@\x15Vv>\xef]\x8c{}\xcdS\x9f=\x8d\xc6\xbd\xce\xa1\xe61\xe5\xe0k/N\xc8\xcb0\xddvI\xe8\x8e\x91\xa3\xbd #`\xbeqR\x95\x10\x05\xb6yc\xa1J\xd3p=\\\xe0\xbf\xd6\xc6\x91\xe6\xd7\xcfN\x8b\xef\xecJ\xb3^\xe8\x89\xd9\xc9\x9e\xdd\x10\xa2\x9b\xa1T\xea\xbd:J\x11\xe4\xae\xa5\x19e\x19\x8f\xda\x95&\xd9e\xb1r2j\x95\x00\x87,\xac6K\x14\xa3\xdd\xc4xN\xf3E\x118\x85\xb9\x9dv\x93e\xe0\x13{\x80j\xa7S\x18\xc0\x10\x8e\xe8\xa8=\xa9X\x84}\xba+r\xf7\x15uK\x03\xb7\xdb\xab\x8a\xd8\x99V \xe7\xa6\x8f\xbdf!\xc9\xcc\x01\x19\xf7a\xb2\x12\xe5W\x86iC)4\xaf\x86\xb2-\x8aGL\x8c\xa1VE\xf1\xfcc\xd3\x172.\xdaf\xf0\x04\"\xe6\xe8\xd4\xc7\xb8q\x81\xed\x8d\xb3)\xbbH\xe6\x9c\x98\xf5\xd1\xa6\xd8\xe7\xdb\xae\x84\x9eN\x18\x82\x0d\xa9\xea\x98L\x08T\x1b\xac\xa7\x86)\xe0\nd\xf2\nT\xef\x1f\x89\x83\x93\xf0\x8d\xd0\xd2\xdeV\xab$\xd5x\x18\x1b\x86\xb1\x8e\x08\xf7e\xae\xe0\x18\x96\xa2\xdfz\xb9\xbe+\xe4\xee\x9f\xe1\x98L\xb7\x8f\x99ne \xc1\xec8~*\x99/\xb9\xd3\x05\x0b\x97!\x9clx<\x18\x92|\x1a\xcd\xb2%\xb1\\\x85\xc1,32,E\x8es\\\xbcs\xbd\x8a\x82/\xc9\xec\xcc[\xad\x97\xe4\xe38Z\x9d\xf9\x0b\xb2\xf2`$=|\x1e\x13/%\x7f\xe3\xd3O^\\c1\x16J\x0d\xbf\xfe\x8d\xd5\xb2\xf2R\x10\xceI,\xfdN\xd4\x9a\xb9\xa1\x1bH\xd7Wk^\x9eh\xf0\xa9\xaf\xa4H \x90\xe7\x87\xf6\xde>=n*H\x85\x8f\x0ev\x9dM\xa3\xb1\xc8|\"\xed\x16\x13\xc9e9\x95\x1a\xcc\xc8\xdc\xcb\x96\xe9\xb0z\xab\xf4;\xea7\x81kj%\"\xf3Q\x8e\x04&\xaa\xcc\xbb'\x90L)\xf3^= \xb2\xa2\xe7d\xe5\x05\xcb-Z\xc8\x12\x12\x7f\x97\xb0\xd5\xe8\xfa\xd1j\xa3\xb6x\xbf\xceg^J:i\xb0\"\xd6\xe6-\xa2\xaf\xc5G^J\x9cn\x1a\xbd<{\xcd\xbc@m\x8d\x1dBs\xda\xc5\xcd\xb9y[\xbd\xcd+=\x9f/#/}\xe0\xaa\x830%\x97\x0f\xdea\x1eD{X#T\x88\x8fX\xe5<\xee\xb6t\x8c\xe9r\x94fQ1\xf8\x0f\xb5\xfd2\xba\xab\x07\xd0\xfaN\\\xe5\xfel#\xb0{.\xc4]\xe6`\x11\xcco\x1c\xadB\x03rC\x8b\x9a\x82H|\x02|>\x8f\xe2\x95g\x88\\EI\x827\xc6\xfc\x91\xe7\x16\xb4!\x98\xa2\x0b\x90\xf6\x12\x92\xc0K\xec]\x90|\x9c\x85\xbecGx\x82\xb2\xd1\x1ek\xfd |\x1bF\xefBxs\xb3&C\xa0\xf5\xa5\xd8\xbb\xba\xa9\xf1M\xc40\xa7J\xa9^u)\x0e\x85\x9e\xf0%\x17\x97\xb2\x9fB\x1f\x8a\x9c\x14\x94\xc9\xe7E\xc6\xfd)\x15\xde\xe4\x9f\x98\xc7\xca8{\xcaR\xe8\xe2\xc5\x81\xf0\xf9\xadY\n\xb4yw9\xfd\xd0\x17\xf1\xb0\x08\xbf\xc4\x17\x10\x8dg/\xf0\xf9\n\xba\xdel\x16\xd0\xc9\xf1\x96\xdfo(?\xc7\xf2AJV\x86\x02h\x14\xe9\x06\xa1\xbf\xccf\xe43\xe2\xcd^\x87\xcb\x1b}\xd1\xb5\\\xf4\x87q\x90\x12ZV/\xe8I\xd3\x9f9e\xdc\x99\x11\xb2^\xdePz\xb6\xfe\xeb\xe4\xc6\xc1#\xff\x07\x1f\xc4dnma\xa5\x94\xe5\x8a\x92ou7\x08g\xe4\xfa\xf5\xdc\xb6\xfe\x8aU\xc9\xcc >\xefM\x16\xa2H\xef\x7f\x1c\xb0\xe0\xb7\x91\xe4\x1a\xae\x176kb\xec\x82hc.f\xc3 \xaf\x8a\xdb6^\x1c{7*\x97\x01\xedy\x01U0\x85\xb7\xf9\xc8l\xed\xbe\xe2\xc1\x06\x14\xcc\xae\xba1\xca\x9fY\xe56\x8b\xfc\xc9E\xf5+*\xd8-\x1cX\x8c\xaf\xa6t%\xe8\xdf\xee\x8c\xacc\xe2{)\x99\xe1\x8d/\xf9Q\xccq\x0d\xd8\x05\xb6\xea\xe3w\x02\xbf\xf0\xf9\x1a\xef\xb9\xcfh\x81\x11\xa46-A\x85B\x83\xd0\x8f\x13\xcd\xb4N\xbe\x03\xb3\xcav\xe9\xd7\x8c\x06W\x90\xbe\xee\xebQ\x01\xaa\x11\x0c\x94y\xf4\x1d\x97\xc5,\xb0o\\\x8c\xb2\xb6\x82\x11\xf4O`\x05O`\xef\x04V\xed\xb6\x03\xb3\xb1U\xee\x12\xa5\x95+:\xb4K}\xb78\xd2\xcfTT6\x91i\x8e?\x0c\x19\xe0\x94\xa7\xb2 \x12v\xbdl\xde\xf5\xc2\x9b\xd7s\xd4\x92\xb1\xaf\xdd\x95\xb7.<5\x9a\xee\xe6\xb2\xf8\xf3:\x9f\x08\x18*ME!\x11M\xe1\xd7\x07lj\x9c\xdas\xfa\x94\xd2q\xd2%a\xb6\xc2\x10\x8c\x82c\xcb\xdf\x87|\xa9B\xca\x0e\x97\xc1\x97\x04\xbb\xe7\xd8\xec5g\xdc\xa3uX\xf3`IX\x8a\x8d\x08\x1d\x9b\xd0\xa5I\x17/_U\x12\xdbU\x19\xbf\x9e\x96\x89\xe1u\x13V\xfe\xd1#\xa6\xb6\x17\x00\xf4h)\xb8\x01{\x8e\x1cF\"C\x8aO\xc6{\xd7x\x04\xd9\x88\xa1\xb2K\xcb\xdf\x1aO\x8d\xb6\xe1\xa9x\xff\xa5\x86\xa7z\xf8|\x13\x86\x19m\xc90\xa3&\x86\x19\xd5\xb3\xf25c\xba\x9b\xf0\xd4\x85\\4\xe7\xa9\xfa\xb23l\x99#\xb4\xbe\xc8\x15\xd26\xfd\xb3\x9b\x9ag\x97(\x86]\xaf\x96\xfa\xc7\x94\x86]b|2\xfd\xf3s|\xbe\x8e\xc9<\xb8\xd6\x97\xb8\xc8kH\xd6\x9eo\xa8\xe6\x1d\x9b\xda0[\xe9\x9f_\xe7\x87d\x03\x03\xcfj\x188\x9a\x07\x1c\x96\xda\xfc\xc7\xc1\xc5\xb3&.\x8e\xd1Y1l\x8c\x15F\xa9wI'\xc7b\xfe\xb1\xf69\x9c\xc29\x15\xcb\x87\x16\xba\xb6;\x94A\xb8p\xc1\xf4\xf37c\xfa\xdc\xba^-\xc3\x043e\x9f\xd3B\xf8\x13o\x03^\x18\x04\x1c\x99)\xa0[\xe5\xdcD|i\xe99\xc5\x07J8\xf0\xef\xed-\\\xd2\xff\xbez\xef2\x08\x0f\\'\xff\xa0e\x18\x96\xc0e\x97\xc7\xe0\xcd\x85\xbf+\xee\x95;u+\x1cbIy\xc3R\x8dZe\xe4\x0c\xf43\x17;\x90\xe5\xa4\xa2\x953?>\xe4\x08U\xfd\xbe\xf8h\xf8\xd3\x8c\xb6>\xdb\xbau\xc1V\xb6n]L\x03/9u\x01%\x9c\xa2\ns\xab\xe7^\x9a\xc6C\xb81T\xee\xc2\x95\x1e\x1b)e?3\xb8XB\xc1\x8a4\xabb\xdfsY\xce6\x9a\x15\x17\xce\x0c\xebb\xdfsa\xb6j\x9f\x97R\nm nk\xd3\x12\x01\x9f\xfa\x17zq\xbbA\x9c~F\xc5ii\xcf\xd0\x9d\xb8\x14\x1b\xf0\x85Y:\xa5}{Q\xb9jh?ct\xa3\xf5b\xfcL\x12\xbcooa-?(Dn*\x8c\x1b\xa6\xab\xd4\x0e}\x8b\x11\x89\xfc\xab\xe8!\xff\xdd\xa58\x1b\\di\xed\xb2\x89\xcf\x15\x8f.YF\x05\xac\x0b\xa54\xda\xd9\xfc\x971\x05K\xf5\xf3\x85\xe8_-\xd3\xae~\xde\x8a\xb78F\x99)\xbd\xf8\xdc\x8c\xf3Q\x0br\xf8l\x9a\xb3,\x14\x9b\xbe\xa0#\xf8\x82>\x91\x80\xcb\xf13<\xf7\xe0\xdf\xf2\xa3\xb7\x14\xfe\x96\x0214f\x82sQ\xbf0\xb5\xa9^\xe4O\xb9\xb3#P;\xef\xca\xce\xe9\xf2\x0cV\x84A1\x00\xbbT\x86\xc1Mv\x19\xe9s\xc5\xe3f\xa6lt\xcd/\x94\xd1\xe3%\xa5\x14|\xa7 \x19\xf5\xa3\xd0\xf7R\n\x1fJt\xf5e\xc3\xb4\xd5\x91Fq\x98\xe4\x0d5\x11\xea\xb2\xb49\x04\xebYx\x93.\x82\xf0\x12|/\x84\x0b\x02\x0b\x12\x13\x83T@;\xedo\xca\x11\xaa\x0d%\xa6s+%r\x0f\xc8g6\xa0\x91|\xe6\xae\xcb\xf8\xbf\xe4\xae\xb1\x12h\xc63&\x94\x17\xf5\x1d]\xd4w\xecT\x96\xb0\x80kl\x85o\xe0\x14\xc6\xfa\xbe\x1b\xfb\xfd\xde\x85kZ\xd1u\xb5\xeb\xef\xb5v\x90\xa5\xd9\x17\x81\xca;\xeci\x19K\xd1\x08Z\xd2s\x05\x82n8vX\xb5:\x01\x1aJ\xfc\xa5\x17{\xb4\xc1!\xb44\xd7\x1b\x83pF\xc2t\x08\xd6$\xad\xdc\xae\xab\x9a\xcb\x00o1\xd4X\xa5h\x7f\xa2\xa2?\xcb&\x13W\xa5<\xc7\xa9\x06\xab\\\x0d\x87\x96<\x05\xf6\xabn1PxK\xec\x0f\x9c\xeeY\x1a\x13O#\xfe\xa3N\x8c~\xb1\xa4\x15\x83\x8a\xf5Jo\xf5\x04\x919\x80\xd24\xcd\xc9\x01=\x05\xd0\xa5\x11\xc7\x1e0\xd1!\xbf\x92k\xb3\xf7\x9c\xee\x17Q\x10\xda\xe8KgYU\xdb\x9a\xf8$\x94\x8c\x19\x84oC4\x08\x1b\xbdD\xd3\xb1\x142\xe0-\xb9I\xec\xd4\x19\xf7\xa6SdyI\xf7\x9c,\xc9\xaa0\xdbr\x80\xa0\xdc\x91\x9bC\x02?\xcaB*\xfd\x84\x12\x0c1\x89\x0d\xab\x0c\xa3-{20%q\x9c\xadS\xcc\x00'\xc0\xfa\x19\xf3\x99\xd3\xbe.4\x14\xf0S2\x957\x95\x87\xf9z\xad\xcd:\xde\xf24l-\x02\"y\xab\xf5m\xa8~r3g\x1b\x1e\x8f\xac\xc7\xd0f\x0epmxl=6\xbe\xf8\x1e\xbd\xa6\xc7dj\x14,7 \x93\xe2z2\xc7\x08%\x94\xad\xf8\xe0\xa5\\\x81B\xfa\xbb\xb9Pv\xc6\x18\xd1\xca\x0c\xf7\x1a\xc4'\xe9\"\xcd\xa48\xb6\xb6\xf9\x0f\x0cty\xee\xcf\xbc\x14\x95RK6\x9d\xb6\xf5\xa45~\xfe\xd1\xb37\xcf\xc6\xf4\xc0)J8\xb9\xe3\xde\xced:\x99>\xdd\xb9t\xc1\x9aN\xa7\xd3\xa7y\xf1\xa7xx\xb5\xa6\xd3\xa7\x16V\xcdW\x13Q\xdf\xe7\xa1k\x96\xd2=\xaed\xc3\xf8\xc5\xf2G\xbb\xb7N\xc1\xc2\x01!T\xd9YpJ1\x90\x0f\x19\x86\xa2\x0b9\x15\x816\xf4\xf1r\x81\xbdd\x89\xb5]T%\xb5zyo\xd1\x13\xd3,T\xbc\xc77no\xa5\xc1\xd5\x8865\x0b%L\xea\xc6w\xf3\xfe$\x9a\xee\x189\xb3~F)E\x19B\xa4\xdf\xd49}\x18\xd2U\xd3\x16\xc9\xc5\xfdd\x08s\x83F.\nS\xe4l\x06e\x13#aC\x08M\x9d@\xca5\x04\xaf\xeey\xd5e\x15\x94\xa9xo\xe0#^\x1d\x1f)\x11\xf2\xc2HL$\x97&\x8a\xcf\xba\x08\xf1\x82 \x12\x89\xcc2\x0f|\x0c\x9fK\xa7$\xbf\x9d`\xa6\x9a\x81\xd14\xce\xd3X*\x95\xd5\xed\x1d\xe1$W\xbc\x94,\x82yZ\x0d\xa8#\x7f*\xc6=\xadKX\xb5|d\x07N\xb3\xc2\x8c~p\xf25gp\xf1\xd1K\xe9z([\n;F\xed\xf5)\xce;\xe3yB\xa1f\xf3\x94\x0b\xa7`=\xd9\xa1T\x8d\xffn\x83\xf5\xd4\x92Kq\x06\xfa\xe8\x11\xb4BZz\x12\xf2\xc7\xe8W\x8c\x17\xc9t\x1b\xcf\xbc\x8aQ\xa3\xd9\xa3\xd5\x92\xf1\x04\x9dr\x8b\xdf]o\xbd&\xe1\x8c\x8a\x0d\xae\x8cO]\x06\x0cJ@\x11\x1d\xccn\xf5\x1c\x17Z\xbdMH\x04]4\x8e\xc9\xf9\xac\x95\xe7K\x9a.i\xa2\x8a\xdd/,\x07\xa7`\x01++=CI\xca\x02\xcb)\xde\x8dq\x85D\xf5|\xfaqo\x08\xd8\x8eiM\xc4\x02\x97\x96\xa5\x15W\xb7\xa4xC.\xa8\"#\xae\x0c\xde\xbd3]\x87\x82\x1a\xa7;-\xcd\xd0\xd0\x0bD\x1a\xf4H6\xa8_9\x0d\x0b\xd5\xb52Q\x16\xf41\xc5\x08\x00\xdd\x04eh8e\x99Px\xaax\xb3\xb5\xc3\xb2\xcc\"\x9c\x89\xcc\x0bW\x00>\xa3\xfc|,A\"\xda\xac\xf894\xb6\xb1\xe0q\xe4\xcd[ef\xe6\xfe\x0b\x863\xe4:}\x13\xf8o\x99\x13J\xba\xe5N\xbc\xaa\x95\x0f+\xc4\x0e\xf5\x1e\xf6\x1c\xda#\x96\x8c\x12\xf2\xd8\xab(\xc9 \xb7\xc79\xe7\xd7V{\xa2\xd0\xb2\x89\x08\xe3\xc1\xd2L\x1agv\xa3g\x94\xf8\xf8]\xb2\nR\xdb\xa2\xd2\x99\xa5\xb5\x9c\x8a\x0f\x15P\xd8\xfaoHT\xeb\xe6\xf1\xa6v\x1e=\xfb\x8a'\xa0[\xbb\x98\"\x91\xb2\xbd\x9e\xa3\x0f\xed\\\xd3\xca\xa5q\xf8\xccf\xdf0\xcb\xe9\xb75\xcb)\x95\xf58\x88\x843\x0b\x7f\xc6\xc4\x9by\x17x\x00\xa7\x04H<\xf7\x97QB\x0c\x91\xee@\x7fl\x00\xc3rT!\xc2M\xa0y\x1c\x0b5=$p\x94\x08\xbb\x92j\x02q\x1b\x8f\xee2\xd4\xc5s\xae\xbe\xe6+\x12'\xa8\xd3\xb0\xfa\xdd\x9ea\xd7\x93\xd0\x8ff\xe8\xe1\x19w\xc5wFr)\xbd\xfa^\x8a\xd9\xd4%K\xb2b*\x85\x02\xf6\"\x87\xd5b\x9f\xd8\x87\xfa\xe1\xa2\xc2a\x08\x99\xcd\xb4\x81E\xecD\xbc\xc8\xc5\x82\x15\xe6\xbe\x06&%\x0c=\x0dm\xe2\xf5 \xc2\x9a\xcb\xf2@\xa2L\xe5@\xba\x88\xa3wH\xc61(\xacm\x85Q\n^\x92\x04\x97!\x99A\x1a\x81\x07,\x14uK'?\x88\xcf\x95\x94\xaa\xbb\xde\xdePdG\x96\x143\xe6\x8a=[\xea-'\xaa\xa1[\xaa\x81\xa9\x80\xdaT\xc0\x10\x94V\x0e\xbc\xdfD\xdb\x08\xaf\xdc\xd6\xc9\x8a\xe2c\xa2R\x86#\x1f\xa5y\x9b.\x89\xc4p\xd9\xee\xa1Ccv<\x91\x01\x9a\xca\xb9\xe2 \xed\xe9\xc6$S\x9dW!$\x96\x91=\xffU\x8a\x1a\xba\xbbg\x88\x18*\x0fG\xb0\xf3\xf2\x00\xadG\xd6\x10\xacG\xdej}R!\x8a\x8f\xad\xc7\xf4\xc9\xcffQZ}d=f/\xad\xa3Dy\xf4\x04\x1f-\xd5w\x9e\xe2\x83\xcb\xf4\xa4\xa0\xa3\xd2\xb0\xb7\xbal\xc5\x89\x17\xa7lH\xbcru\x8f=~d=y\xfax\xea\xec\\\xd6LF\xa5\xc2pL\xaaI\xb4`\xb8m(\x8a\xd2%\xba\x93\xd2\xbc\xf3[\x11\xfd}\xa7\xfb\xe2\x8a\x84\xe9\x8bU\x90\xa6$\xd6)\xf9\xd5\x83t\xccc\xa1.\x02\xe5Z>\xfd\x84\xf6\xee\xbec\x07.&\xd3\x0d\xba\x9f\x15\x14\x93\xb6x\x80\xc0\x1f\xc6A\x9a\x03\xf7\xf6\x8f\x11\xf8Q\xb6^\x92k\x06:\xe8!\xe8M\xec\x85\xc9<\x8aW\x1c\xdaG\xe8\xf7\xbd$y\xb3\x88\xa3\xecr\xc1\xe1\x03\x843\x9d8;\xd8\x05r\xc2\x8f\x00\x9d\xc1j'\xffJ\xca#o\xd2\x9c\x07\xfa\xd3h\x8a\x06a\x1c\x0e\xbb0\xc5X\x0dZ\x89\xe9\x1b\x18\x1bh\xede \x91\xbe*\xc7&}\x93\x91\x96\n\x85\x05\x1f\xc2\x1ac\x92d\xab\xd2\xf7\xdaSY\xd8\x8d\xc2\\$\x0b\xd0\x81\x0e\x01\xb1\x17\x84\x96\x0b\x11B\xce\x83\xe4,\x9d\x05\x11\x957\xe4\x81\x11$*\xb7\xb7`\xb3j\xa8\x18\xe7\x82\x87\x02\x11\xfd\xcd\xc46\x17\x92\xaa\x16\xef\x8a\x874k\xf5M\xf3\xebi\x07\x9bac\x19\xe7\xb8)\xa3c\x9b\xcd^\xb2A\x85\x86{\xe03\x92\xa4qt\xc366\xff\xb1i\xb3\xbe\x9en\xa3\xaf\x90\xed\xb8\xdcN\x1cw\x97A\x92\x92\x90\xc4\xcf)\x1f\xc2\xfd\xe4\x82E(3\xb5\x1c\xc1_\xab\xf4V\xdf\xe2\xdc\x88&\xab\xe8\x8a|\xc2\xdb\xa9\xac\xb9\xf2PZ\x7f\xf5Uy\x9d\xab\xcf\x8a5\xd7\xbe\x89#\xa2\xc2\x92\xaeU\xf9\xa9\xa9\xd5ym\xabsm\xbd\xc5\xd3\x9a\x9d \xc8-\xc3\xe4R?\xab\x10\x19\xdb\xe7\n\xb6\xcf\xf3w\xca\x10v\x94\xa1\x04\xc8b^\xceM4\xdca\x8ec5d]\x7f\xab\xaf\xa0\xeaG=\xa7\xcb\xc2\xe3\x96\x19\x9e0\x1e6\x86\xc8\xa9\xa2R\x8ee\xa9\x16\xcbZ\xcd\\\x0d\x84\x00i\xa7 %\x19#\x8e,E\xbe\xb9Y\x13.I>\xf7B*LR6\x03\x1e\xf8K/I\xc0K\xc0\xcb[\xd2\x1c\x0b\xdf\xf3\x0d\x94\xcb>\x0b\xe2\xcd\x80E\xa3\xe1\x90\xd4\x0b\x96e\x08?\x0e\x8c\xaa^\xcb:$I\xd5\x8c\xe6\xf5r\x9a\x10m\xf5\xf3A\xb7\xa21S~H\xaeS\xa6\x8eR\xc7\xa9\x8af\xf2P\x9eb\xc0\x92|\xb8\xa8\xf5\xc1\xdb\xc0\xc3\xd2\xac\x90\xf2\x94\x10\x17\xdam\xa9\x9a\xf2l\xb8\xa5\xb1g!\xea\xbe\xbf\xfd\xe1\xe7\xfd\xddd\x0ex\xec\x0ci&\xd0\x11\\\x1ec\x051\xb6\x19\xb32b\x13}\xe7\xe2xQk\xddy5\x15'\x1a\xda\xa3.\x9d\x91Z\xbf\xc3\xbe2\xc4\xd3\xd2\x80\xaa8^Y\xf2\xa2%:\xbd.t:RU\xda\x98\x85u3\x82\xb1\x0e\x9bf\xa4\xaew\x0d;\xb0\xdc\xda\x17Q\x106\"\x1c\x9b\xffQu\xfe\xc5E\x0f\x8d\x17s)\xean\xdeY\xe6Zl1m<\xae\nO\xcdM\xe7\xed\xc4\x81\x10\xda#4\x81\x13\xc3\x9a \xaeR;\x7f\xe8{u\xcf1\xc5]o\xb9\x8c|\xbbg\xf0cV0\xa6\xd0\xf57\xa0]13xj\x0eXl\x08\xde\xde\x0f\xc2\xc4\x9b\x13;\x85\xa7O\x9f\xa2v2+O\x9fG\x97\xf3\x04\xb2\x13\x07'.\xc36\xd8\xacF\xfc\xe2\x04^\xde\x8e\xd67,\xb0\x01}\xa5-\n\x96\xa2\x18dl\xd2MS\x1c)S\x9c\x03\xdeSI\x0b\x03s\x06\xdd L\xd6\xc4OK?\xba~\x96\xa4\xd1\x8a\x91\x89\\9\x93/\xd0\xb8ZpZ\x87\xecb7\xe7/i\xd4jlXC0\x92\x1c}\xb8\x1e,.\x05z\xcfMo\xec\xe2h1^\xe3\x89{c\x7f$\x1d\xfb.sw\xbd\xddF+\x90\x88\x0fS\x1cu\x13\x92\xbe\\\xad\xc8,\xf0\xcc\x1e\xae\xdc>\xc3|\x8cx\xcab5&\xb3\xfc\xf1k\xaej\x007\xdb\x98L3\xc0M7iw\x16\xf9\xa8(3\x97[\x97\x12B~_ \xc9k\xcc*\xa7}`\xcc\xa7N\xab\xc2\x8clk:'o\x82\x15\x89\xb2\x14NaM\xc9\xb5[D\x8c\xe7yk\xa6\xccq\xfa\xab\xf7\xdd4bW\xdb\xf9\xe9[$\xb6aQ\x8b\x9a\xe8\x88\xf8Hf\xa0Z\xca-\x7ff\xb6&\xaa\xaf\xf8\x98\xf4[0\x94Q\xa7\xae \xb4\xa1v\xd7Q\x92~\xca\xb3\xf9\xb3\xac?\xc1\x8an\xc93?\x0e\xd6\xa9\xd1\xddG|\x04\x11\xd79\x08V?x\xcc\xefF\xe1\x8a5Woh\xcf\x85\xbf\xbc|\x13\xd3\xab~\x88\xde\x84 \x7f\x18o(f\xc0\xb6,\x17\xac\x0f-~\xa8(\x1a\x0e\xab\xa1\x94K\xb5\xe8W\xc2vP!\xc5\xab~\xbe\xf0\xc2\x90,\xe1\x14l\x1b\xa3\xa7\x90wP~\xe4t\xe9\xbc\xf7\xf5\x03\xaeE\xae\x99\x9d\"\x057\xa9<\xb7\xc0\xd3\x08;1(M\x8a\x01\x0bQ5\x86\xc6E+\nc\xe2\xcdn\x92\xd4K\x89\xbf\xf0\xc2K\x82i\x92\x97\xa3\xddvD\xbe\x8b\xe2\x0e.Z\x06\x0d\x97\xbd@r\xfb\xaa\xdf\x85\x94\x1f_x\xfe[\xe3qV|\xbc\xf82\xd1\xf9\xdb\x89\x8f\xe1\xae=\x14l\xc8\x1f'S\xa6\xdf\x8e\xed\xc4q!i\xb7M\x08\xb7fG4y\xed\x16J\xd9:\x1f\x82\x85y\x89Yzw\xf0\xab\x81\x9b\xa1\xa1\xca\x1a\x1f\x15T\x8e::\"\xa1\x9f\x94\x86\xbb;\x02[h\x17\xeb}\xf4\x1a}\x9e\xe7\xdc\xf5\xa6\xaeL}\x9a@\xf1im\xb8{\xe4O~:\xed\n4k\x16p\xc4'\xc6\xf7(\xd6\xd5\xf7^|\xf2\x14P\x0d\xba\x0b\xdd\x07\xfd\xae{f\xdf[\xdd\x87\xd4\xf9O\xea>\x0d^\xda\xd5\x0f\xf6\xa9\xbfm\x9f\xe2qo\x93\xbbU\xf2\xe7.\xfd\x1a\xdc\xa5_.\xc4\xe3\xfe\x8f\xa3w\xbbw\xef\x1d\xfd\x7f\xf0-\xf7\xb1\xd1\xd5[\xf7A{\xfd\x12U\x0e\x1aw\x0f\xddG/Q\x97J\x98\x84\xa3\xbc\x00\xcc\x83\xd0[.7\xa1\x0f\xccp?\xdf\xe0\xbc`|\xba\xa9\xdfoE\xb7g[Y\xc8\x02\x02\xcedY(!\xcby\x11\xa9?\x0fN\xbc\x08\x12\x0c\x83=\xc4\x02\x92\x0d\xb8\x949\x14y\xb1\xd9\x15`\xf3[Q9\xfb0\x90M3\xf1E\xdd\x03\xe9.#\xdf[\x9e\xa5Q\xec]\x12)\xa2\xa3:)r\xfeTm\x855\xef*\x10aQ.\xb7\xaf\xe5GBa\xc8sn\xa07\x99\x95\xc6\x19a\x87\x7f\x1e\xd2.t\xbai\xf4I\xf4\x8e\xc4\xcf=\x8d\x01Y\xfe\xb5q\xf0R\x10wal+\x8c>\xe2A\x88\xd0\xc0b\x8a\xbd\x0d\x92\xb1\xa9\x1a\x15\x13\x8a\xb14\x9eapm\xb4ai\xe5\x12\xa1m\xa1\x85\xa8\xd2\xb5\xaa\xef\x91\xee\x1e\x81\xf8\xd0*b\xcf'\xa5*\xe0\x14\xfc(L\xa2%\xe9\xe2C\x16\xc0F\x80\xdeyq\x88g%\x1c\xa4\x1aD\x0f\x8c;-W\x170R\x93\xa2I\xaap\xc4j\xda\x87\xc6\xad\xb4\xd1\x1e\xd2+\xe2J\x19\x96\n\xb0\xe4\x06r\xac\xcb\xa3\x14\xda\xfb}\xed\xad\xcfH\xdd\x1e\xdc\xb6G\xe9\x82d\xde\x8b\n\x1c\xa2+\x15\xa9\x01\xc9\x0bG\x12MpS\xac\xb8\x1b\x84\x0b\x12\x07\xd8yt,q%\x98\x1d1'\x93H\xd2\xab\x9f\xa7\x92\xcbH\xddd\x01\xa2\x06\xb7DT\xdb\xde\xc2\xb3\x86.\xcf\xe1F\xcbS~k\xd0\xbf\xc3K\xfd\xfe\x81S8\xc5\xdc\xf1}\xc9}f\x93\x1a\x9a\xec\xcd\xfdc}\x16\xc4\xfe\xb1>\xcf\xcd\xdeAs\xac\xf6\xeaBqK\x04\x0bH-\xc7P\xd2\xeb\xcc\xb3\"zU\x8c\x97R\xd1*g\x13)\x8a5\xe6\xd6\xcb\n\xebWau\xe8z\xc9M\xe8\xf3\xe4\xadYw\x1d\x07\xab \x0d\xae\x08\x9c\xe6.0pZn\x02\x87u\xbc\xef`6\x0c\x1e\x03\xca\xd6\x948pl\x82w\xe5*\xcf\xa4zi\xb1C\x07S\x0e\xc8\xc0\xfd^\x9f\x01\xe9\xd7\x01V\x93w\x15\xfd~\xec\xfd\xde.\x82\xd6,!\xa7\x00\xee!p\x16$\xeb(\x07\xf6\xd1f\xd3]y\xd7\xcf.sX_\xc0\x04\x80\xbd\x19\x939\xba\xa7\x90X\xc0\x0f\xe8\x8e\xa3\x88\x92m\xb9k\x9a\x10i\xef@\x17\xb9\x1du>\xdeE\xa2\xa2\x12>\x99/#9\x97\xf5f\xe8\xc4\xd1$H^y\xafl\x8c\xfb\xcf\xd2x \x96\xa40\x82W\x18\xc3\x153H\x0d\xd8\x9e\x92\x07\xc6\xcb\xc9l\xfd\xe4\xe8\x02\xd9]\xb1 v\x89\x0b~y\x81\x03L\x9dBe\x1f\xbb\xc8?_&\xb9\x8eDv\x04\xb9\xd1\xb8\x83\xbf^\xd3\xc6\x13x\x8c\xa5\x1f\x83\x17\xce\xe01/\xfe\x18|\xe6\xe2sA K\xd0]\xfc\x92\xa4\x0b\x12W\xb5\xe5|\x19\xcbazr\xd1\xc8:?\x17\xd1\x19\xce\xcf-\x16\xaf>\xec\xce\xa3\x18\x9dp \x0cYf)\xcf.B\xe3\x93\xfc[X\x0c#\xe24\x9f]\x0c\xcbh\xd5 s\xd7\n\xa8\x8c\xd1(A\x87c\x82q]R\x1e\xa8\xddW\xee\x13\xb1T\xce\xe7\xe7\xeb8\x9a\x07K\x12\x9f\x9f\x03\x8f\x14^@0$\xa6\xdf\xcd\xd63/%/\xc2+\xbcJ\x9d\x87\x9fx\x90\xbd\xd3\x88\x93\xbb\xba\\\xbcBU+\x89Y\x17A8S\xb1TS\x90.\x95\x8a\xb6r\xe2\xff\xd2\xc3\xa4x(y[\xf1u\x7f\x99\xbc\x08\xb3\x15\x89\xbd\x8b%i\xa2\x07\x9b%j\xd0\xde\x84\xa2\x934g7\xd3\n\xbc\x1f\x18\xe27\xacK\xa5vk\x0ew\xc5n\n\xec\x90\xa58\xf3\xf9q\xdf\xb3)\xae\xa1Ux\xdeM\xa28\xb5\xb5\x04v\x8d\xa9W\x11\xf9\xd7\xb8\xdc\xc3\"\xfbL\x83\xc6}>N\xa7\xc8\xcf\x99\xc4\xed\xd2\x01\xca\x93e<\x88\xf1\xde'\xecE\x96R\xf8T\xd4\xe3\xbb\xb0t!\x1c\xa7S\x17R\x91gD{\xa3\xdctX}\x10\\\xde;\xacRR!\x81\xea\xf3E\x1c\xe9\xd3E\xec\x1d\xf5\x9d\xee\x8a\xa4\x8bh\x96\xe8(\xed\x9e\xf2\x1eg\xd6\xc7\xba\x04\xd3\x9a\xbd\x80g\xc2r\xc9\xf9\xa6\xbbfYl\x0cff,?\x96\x1c\x14J\x89\x1d\x94\xf0\x9d\x0b\x94\x81\xa3J\xcc\x80\x19B\xc9*hL\xdd\xa5?H\xa1o\xb7\x0bW.\xdc\xb8p\xe9\xc2\xca\x85s\x17.\\x\xe7\xc2\xb5\x0bg.\xbcp\xe1\x99\x0b\xaf]\xf8\xc2\x85\xb7.\x86\xb1Z\xe2\xe9KO\xf0\xaf\x98T\xdc\xe2\x020%\xe5\x9cw\xe7\xbai\xc6\xabS\x89\x9eK25\xc5\xfb3\xcct*\x831\xb8\xd3\x08\xce\xba\x97$e\xd1\x87\xcf\xba \xfd\xba\xc2\xaf\xcc\xac\xe1b\x94\xce3f>q\xdcB+\xd3\x8dI\x12-\xafH\xcc\x82\xcc\xbe\xe5\x9c%\x87\xd2=\xfd\x05\x8f\xbc\x144\x04a\xe1\xfc\x97\xfbU\xe5\x04D\xa5\x1e\x94\x1fcp3\xb4\xd6\xbf\xb5#\xa7\xe8\xd2\x88\xf1\xe8\x1b\n\xa4Et\\\xf2%]\xad\xfc\x1c\xfe\x82\x16\xcb\xb8W\xf2%I-\xdc\xb4\x11\xf3\xc5s\\x\xa9\x8dhO\xfb\xc0\xd2\xf2a\x94\xe4\xc2\xfbp\x9e\x93\x13v\x86\x8f\xc6\xbd)\xeaQ\xaap\xd1\xe7\x11\xcb}c\xd6\x08iF&D\x8b\xd8\xb6\x9e\x07\xb1\x9f-\xbd\x18\x82\xf0*\xe2\xaa\x1c\x17\xac\xe7/?{\xfe\x83O\x9e}v\xfe\xf2\xd5O\xbd~\xfe\xec\xcd\xcb\xd7\xafLVwZ\xeb\xa5\xad\x89_\xfe\xbe\x08i]3\x8d\x0f\xd4\x13\xbe\x1a/\x99=2p\xe1\x99\xbc.\x89X\x17n\xc1\xa7bH\x99|\xbap\xe5\xe4y\x07\xe9\xfe\xa8\xd5\xb6\xe1\xe1Y\xbf\xaa\x86\xa1\xb2{\x02\xb5h#\xae\x12\xe4\xa8[\xe0\x90\xc1\xa5\x10\x8dm\xba\xa0\xc9\xa7\n\xbe\x14\n3\x18V\x90\xccqMh\x9ew\xfa\x81\x17\x89\xf9\x03\xa0\xbf\xb0f\x99\xf2\xfb\xe3\xb8VD\xcdu.\xa7\xfa\x7fXR \xdf\xefD\x8e\xc7\xf5\xc4\xb8\x0b\x8d\xd3\x14\xd4.kP\xa6\x06\xba\xcc]\xb8M\xefK\x0dj:\xf7\xc0\xcb7\x0e\xe8\x1e\x0b\xb5\x8b\x17\x88u\xa3\xe2\x97\xe2\xae\x9bi-\xffQ\x1c\\\x06\xa1\xb7\xd4Z\xfb\x85\xb0>\x84/\xd4\x87\\\xd2\x7f\x85\x91\x83\x90\xdb\x8b\x9fj\xd9K\x92nr\x0d\x94\x0f\xf2m.\xe7\xbd\xb5S\x07\xb9\xdc)\xdc\xb0@\x0f\x1c)R\xba\x18*\xd5S[^x\xc9\x16-\x1b\xd6Q\xe3\xda\xa3i\x8a\xf1\xdbMZ3\x900`\xfd\xd5\xf7\x00\xe7\x04\xfd{W\xccM\nF\xf0\x12EU\xee\xbe\xc0~\xbc\x96\xd1\x82=\xb1P\x9a%\xba Q\xea PL\xd8 #\x8fP\xac\xbc\xd4\x0f\x03\xcf\x83\xe7\xf4\xc8'\x89Fn\xde1l\xc5\xdatb\xa3R2\x9f\x9aK9B\x9dC7\x7f\xae\x0ey\x81F\x0f\xccI&\x83\x9f\xe5`>K\x85\x1b\x95\xfdZD\xf1X\x94T\xfa\xfa\xb8\x15j\x7f\xe9\x18\x870S\x1f\xe4g\xe1\x0d&8e\x92-\xdf\x9ej\xb3\xd5\xed}\xa1\x8aj\xe6{,n9\x87\x8e\xba\x86l\x0b\x86\xb8\x05\xc3\xb2\x8cFP\x92 \x99\x8c\x96q)\xb3j7\xde\x92\xa7\xe7\x8an^\x1bg~\xe5*\xa1iki\xc8G\xc1T\x18\x17\xc9[\xa8\xa6=w1\n}P\xefF\x8cH\xdf8w\xbc\x1b\xc5\xd09\xcf\x1d\n~'Mk\xcaW\x8dNhA\xddB\xd6Y\xba\xa3U\xbd\xcb\xf5\xb7\xd6\xcf\xac\xbb\xf0\x121\xf7\xda\xee\x16XP\xd3q\x8e\x18\xb4\xaeT\x93pum\x7f\xa1\x0b\x8c*\xeb\xbe\x86\x10a\xd8*#\x89\x8d\xec\x0b\xcdSN\xbb\";\x13\xa7\x1d\xb5\x15\xe4D\x91\xfdN\xf7\x0cyEd_\xab}\xcer\xc8\x83\x9c\xf0\xfb\xc7\xba\xfc}\xf4\xe4\xaf?\xe1\x0ft'|\xd4Kv}o\x9df19K=\xff\xed\x9b\xd8\xf3%\xb6B\xe48\x1d\x8d\xf6\xa8\x90;#2u\xa7.\xf7\x98\x07\xe5\xfc\x1fj\x89\xa4\xa2c\xd2\x9e\x85#;\xe1\xa1\xb6<\xc6\xd4x4R\x91\xb8\x1f\xed1\x89\xc8\x14\xc9n\xe1F\xa2l\xd8\xf5\xa3\x19\x8a\xddxO\x87\"\x1a-CJ\x02\xcf=\xd6hs\xa3\x02\xe3\xc0\\I\xc1\xe2\x84ln[`\xb1l\x88\xad\x8f\x882\x8f\xa2!X\xb1\xf7\xa5U\xa5Qj\xd9\x0b\x8a\xf1\xd6\xec\x9d\xb7A\xd94\xfe\xf2f\x08\x16\xfdS\x0d-\xecb\x80\x9a\x08s\xb7]x1\xcb\xe1\x16\x7fy\x83\xb4\x81ve\xf6\xce\xc3\xf7\x1eXo\xbbgH\x8d\xaaU\xdc\xa2\x11g\xe5]o\xa0\xd41\x18\x08\x8a[8\x91\xe2o\xeb\xc2\xa0\"w\xa3\xa3n*+:Q\x1a-yhk5\x8df\x17\x9et\x1cS\xf9\x9d\x8cc\x8d\xabi\xa3\xbfN\xc8\x02\x15\xd0}\xdd\xe8{\xc1\x04\xfe\xfe d\xf0\x04\x92\x13h\xb73v\x7f\xad\xd8\xa0\xd9\xd4\xc5\x80\xb7yh\xa2jv\x82J\x1c\xb407\x8bh1\xfd\xdb0\x1c\x1e\xee3\xc3\xa1\xa4ag\xa6\xc3\xc3\x83o\xdbt\xa8_D>V9\xae\xac\x95\xdb\xd4-\x8c\xb4X^\x87\xdaE\xd5;`=\xb0>Y\xe1\x1eA\xd9d\xd1\xb4\x9d\xaa\x1d\x17\xe6f\x8c\x84\x9b\xaf\x0d;\x9em\xebzr\xa7\xbek(&oB\x1fR\x9d]A\x1b*Ks\xc7\x81\xe3\xb0\x1f=\x82`,\xec\x12\x98\xbe\xa1\xf5 f\xd6*\xfe\x1f3\xfc\xe7w\xe5J\x17nS/\x08\xf9n8\xea\xddc7\x88\xd9\x96\xc9\xfc\x96{\xa5\x8e\xd7\xc5E_1\xe7\x88\x08\x17\"\xa06r/\x91\x9d\xbb\xfal\x1eE\xd6\xc3\x18\xda\xc50\x95\xa9\xe4wa\xee\x8a\x0d\x95#b\xc9\xb6\\NDy\xdf\xceW\xee\x92\xba\"\x18\xbb\xc6\x04\xb4\xd4[E\xd7\x1b[r\x16\x9bZrf\xf5\x96\x9c+\x83%\xa7\xd2\xdc\xcd\xa6\x06\x9fK\x9dE\xb5\xac4)\xbf\xb0\xd2\x12\x0c?\n\xe7\xc1e\x86\xb6W=\xd1 \xb9mV\x1f\xf5Z\x04I\xaa#+j\x9akJ\xa2\xe2&a\x05\x84\xc0b<\xb3-\xd1\xa5\xe1RF=\xeb\xfc\x9c\x10t\x1b8\x95b\xcb!\x8c\x1e\xe5(h\xd5\xc5\xbc\xe70\x82\x99P\xc8\\U\xdeva\xe5\xb8RA^,\x1c\xa7S8\xd5\xc5[\xe7O\xe8\x1f\x16\xac\x0d=O\x11:\x821\xb3\xa5\x92i\x01\xe2\x91:\xca3V\x11\xf5B\x9f\x0c\x91\xd0o6K\xae\x1c\x0eL|J\x13\x15\x88\x88|\xcan\x0d7\xb9\x9f\xc8\x8d\xd4\x01{\x03\xaf\x91 \x97\x8df\x8fX\x8c\xadCg\xf7u\xe8\xe7\xf1|\xce\xcf7\x9c\x8a\xf9|\x88\xa2\xef\xa63\xc1i\x84^\xcd\xcd&\xa3\xa5G\x9bR,\x05\xfd\xfb-\xbb\x82X\xce8\x9dn\xf0\x9e\x8a6,\xb6(}[\x9d1\x10\x92w\xc4n\xbe\xd1\xc5\x8b\xc7\xd1\x94\x8a\xb0\x91\x03A\x11\x927\xd0\xcd+{J\xe5\xe4\x81\x88K%4\xfa\x1c\x05\xe3q\xc4]\xe40ie\xdcM\xd6x\xeb1r\xa1\xaf\xbb\xb7\x87\x96\xb4\xb8h6\xaem\x96kc\xc3:\xcf\xf8\xa6eg\n\xc4\xac\xf1~\xe2U\x1e\xd1\xa2v\xdd\x0dt\x82r\xe3\xa0\xbc\xa0\xe6\x15\xd1\xafc}\x1cx\\\xc5Pc#c\xb6!9\xd5\n\xbb\xebH\xd8\x89\x85\xc0\x13\x08\xe9r\x13\x07\xa21\xa1\x0f\xcb\x17\x1dI\xcd%8l4\xc0\xe0\x15\xec2+\xaf\xb7w\x82\x847\xa0/\xb3\xaa\xf9.\x8e\x0bC\x8e\xb6RnJ\x15\xb7\xc9\xaac\xa9\x9b\x80Mnl-\n\xe2\xb2\x08\x92\x86{F\x0d\xf7\x8a6\xb9\x89Un\xaf\"\xaf\xdc\xbf\xf5\x86\x9bVu\xad\xbb%\xdd\xd1\xfd\xfa\xb2\xd1\x8d\xaa\xbf\x14\xfc\xa4\x9fue\x16L\x98\xf7\x1d\xfd\xaf\xf7\xba@\xcch$\xb1\xab:O\xc6K\xe7vP\x85S\xc62\xb7#GGx\xe6\xb6\xec\x0b\xcd\xbc\x08o\xec\xaf\xde3]\x9c,\x1d\xd7_\xa1\x16\xaeb\xccU\x02\xad.3\xdbgq\x88\xf3C#\xadTn\x8c\x08\x9f%:\xa3\xdf\x81\xfb\n\xcc\xdc\xd5\xa9\xea\xd3_\xa3W\xd5\x88\xcd^\x9e\x9b\xb0\x12\x99\xb8h\xaf>p\x80D\xf7+i\xb05\xdeG\xd2\x0b\xe8,d\xa7\xe3\x10-\xcf\xf4o\x19%\x1c\x91\xf4\xce+\x19\xa5\xd5\xeb\xfb\xef\xdd\xedN5\xa8\xf6B}\xd7\x86iy\"~(\xce\x14\xcb\x8aC\xa5\xae\x8b ,\xc5]\xb9\xefQ\x88\xadS\xffX\xa3\x1d(%\x94\xbb\xe3\xa1.`\x9a\x8d\x94\x8a\x07\x0f\xd4\xed\x8d\xce\xd1B\xb3\xcc\x04S6\x92y\x1cUrq\xd5\x9d\xb6Y\xe8v\x14\xddq\x0d\xc7\xa8Gv\x99\x8ax\xea\xb8\xf0\xbd(Z\x12/\xb4Q\x94!E\xb8e,\xc0LA\xe8\x15\xfd\x10c\x96\xf4\xbcG\x07N7HI\xec\xa5\x91>\x90\xe3\xb1\xde}|O\xb9\xcd\xc5\xf6\xe8\xa0\xba\xa3=\xfd\xd6M\xf4\xead_\xbf\xff\xe7\xbc\xcdj\xe5\xcb*^mt\xacV\x0f\xcb\x8b\x878\x8cj\x9e\xcb\x87Q\xf5)\x1e\xe64\xf1\x17\xdf\x1bO\xf2\xe5\xa3\xfa\xb6\x9b\xa8\x10K\x8d\x1e\x94\x8d\xa6\xa4\x17\xb5\xa6$\x0c\xb2T(\xe6\x13\xa6\x98\xf7\xed3\xa4A\x9e}\xc6\x83#\x02\x8f\x16\x8eh\x8e\x0bG!\x11\x0b\xf6\xec\xe4q\xf2\xca\x95\x1bb1\xe0 \xe8\xcc$\xee\xa1S!\xde\xa0\xe1\xbb\x93y{\xda\x97P\xc4\xe9\xa7$\x85a\x11\xbf\xb9\xcdo\xeb\xd1\xf3\xb9}S\x928\xfa\x0e&+\x1bA\x8a\x17\xd1o\x0c\xd2\x10;\xd5\xd1V\x1b\xa4\xf0r\xed\xa5N\x95B\x8c\\R\xb1&t\xe0\x86\xf9\xf2\xa5Z\x07J\xf1\xe1#5$\x0cU\xa0*\xe4\x06\xb3\x05~\xc7\\\x08\xe7|\xa9\x98\x91A\xb5M\xd8\xef\xb0\xbb\xf1\xd48\x178\x0f\xe7\xe8\xe5\xfa\x8e_Ge~4\x94`\x8a\xf9\xa1\x07\xe4\x0b\x18\xc19\x06\x16\xb3\x8b\xc9i]tgQHN\x1c\xb4\xbf\x9f\xc1\xa9\x10\xe2\x983\xf0\x05\xd3\x98p7\xf6\xfc\x17\xe5\xdf\xf6\"\xd7\xa6\\\xbb0\xb3opg,\xf0\xae\x15\x9f\xe6\xebj\xa3\xed\xb6!a\x16]9Mv\xa0\xc2\xdbs^\x83\x0d8\x03\xf2\xda\xebF\x8f\xe3uQoW\xc1\x89k\x8e\x10\xbfz7\xa4\x82]#\x05\xbb*\xc7\x92\x1c\xa9\xb6\xc0\xa2\xd8vx0\xdb:\x9bt\xd5\xd8\x0c| f\x8c\x07\xd8\xb3\xa2\xfbn\x8d\xccW\x89\xb0\x1b3\n8\x1b\xa7,\xcb\x1f\xcb\x9e<=q\xa0\xdd\x8e\xb5\xd4\x0b\x8b\x8e\x80\x17\x9d\x8a\x9c\xab\xf6\x9a\xa9]\xac\xef~\x17\x03\xab\xb9\xe0u/\x13.:\xd5\x1fI\x0bo V\x13\xd3\xb5\x10\x17<&.\xe2\x93~\xf5\xb4Zry\x97\x83\xd8F\xb52/J\xa4J\xc4\x08}y\xfa\xf9\xf9\x8c\xb00\x94A\x14\x9e\x9f\x0f\xc1\xc3\xd0\xa2D\xe7\xccw\x1ez+R\x94\xb9\xb2\xab\x0e\xd0\xef\xcb\xea\x91\xb9\x1dT\x9b\x9cG1}\xbd\x1e\xcb\xf8\xa0\x17\xcc\x0e\x86\x7f\x86\xec\xcf\x08\x02;'\xe8\x8aR\xa4\xf4\xfb-\xb9\xf9x\x93\xc6\x0c\x8e\xe3\xb8\xf9\x08\x04!$(\xd3.\xcc:\xfc\xc5\x98L\x99\xa7s\xce\xc1Hm\xd7\x16^\xf2\x92c\x89\x98\xcb\x98YA\xa4'\xcc\x9f\xcf\x92 J\xaa\xf4 y\x8e\xaa\xaa\xb3\xb5H\xf6R\xa9N-\xc0kU\x1f\xa8\x95s6V\xad\x92\x83EE\xfc\xa7\xf2\xfa\x8a\x92\xc3\xca\xbb\x08\xe3/\xe2w\xe5-\x9e\x13\xa9\xf2\x9e\xc8\x9a\xc4\xde\xe4\xbf\x94w\x13\xe2\xc5J\x93\x0c\xc8\xdfd?\xd4\x17\xd7\xc4\x0fHR}\x93A\xc5\xab\xec\x97\xe6\xdde\x90*o.\x834\x7fo\x19\xa4\xca[\x92\x08PyWz\xc2k\x90 \x9azrAA\xa9'\x7f\x92\xd7\x93C\x94z\xb20\xf1\xa35E\x83\xea,HOx=\x12\xa4\xe4E\x82$F\xa2J\xd5\x9d/\x119\xdaFU{.\xba'\xda\xaf\xb5 \xcb\xba_A\x95*;\xae\xd2\xb1\xc0\xdc1\xb9\xe5MZ\x15\xe4\xdb\xc6\xec\xedL\xef\xd1\xad\x90Qh\x83\xe5(\x0e\xa1\xa5\xdfx\xa4x=\xdf\xb4\xd5\xa4\x92M\x0b\xd4Q.\xcb\xa3\x0cddr\x9b\xa6U\\>\xe1\xed\xe8\xb5\xa3\\\xee\xae\xe4\x86\xc7\xe0\x189\xc6\xd9r\xa7\xf4\xbd\xca\x11\x11{\xe5[\xae\x98S\x8b\xbd\x105\xbf\x10\x94\xe2\xf0\x97\x04f}\x15\xe5\x99\xd0UQH\xe5\xf7\x89\xa5%\xe9g\x8f{[G1b!\xcfP\xdf\xa0\x93\x1cR\x8c\xea\x9f\xcb\x0d\xfac\x90\xd8\x1c\xc52\xdc}4\x9b\xf5:?\n\xb1\xab>Z4\xb9\xbd\xa5\xcf\xe54\x05\xac\xecY^\x16#\x98V\xb3\x18\x9e\xf2\x8b{\xb4\x1d~'\x8ecj\x87\x87\xfe\xb0\xa3b\xd1=\\\xf4\x80\xa2=\xf3\x93\xc5X&\xe3\x1e\xf7q\xc7\x07\xf4E\x17\xbcq\x9f\x03\xbf\xc5\xae\xe7}\xefO\xc7\x11\xe2xvr\xaf~;\xae\xa8\x8c-\xe0\x1d\xf0\x97k8\xb5\x99\x16\xd5\xa1n\x17\x1b\x83\x07\x8f\xa9\xc1\xe4\xac\x1e\x93=\xee^^\x8f\xebyn>c)\x1f\xd9\xc1\x06{\x81\x0b[\x19\xc5.\xf3f\xa0\xaf`\x1a\xc0q\xb2 =\x8d$,\xdd\x9c\x9eJ\xd2\x7f\x86\xe8\xe0\x8d#\x89\x9e\xd6\x93R\x9f!J\xc6\xe24\xb1\xbe\xf6\xa7\xe3\x00\x91.\xba\x03a}\x90\x9e\xe5\x17q\xf3\xce\xd0\xf7\x85\xdf~\xe0\"B\xd3g%\xd0 \xb4\xb0\x18\xb7\x7f?z\x04\xbe n\x0e2\\\xbf\xbb\x8e\xd6\xb6\xe3\xb2E\xe1\xbf\x9c\x0dj\xdeb\xbbH\xd7\x016\xd9'\x9b\x86_\xe1r\x8a,\x97\xa8\xd5\x7fG\xff\xeb\x1eRY\xc5\xf0\x7f\xcco'\xb2\x90\xb4]\x0ci\xc7\x83:\xdf\xe7B\xe2VB\x9c\xdc\xf66G9\xb4w\xa7\xf6W\xef\x91P\xa6\xf6+\xef\x15\xbb\x83\x98\x16I\x1e\xe0\xe1fk\x03\xa9\xbf5z\x18=XYt\xbe\xe3\xb4n)\x1bW\x89\xe4C\x88\xc5\x12\xb9 .:\xc2\x19\xbc\xe0\xca\xc2[PHi\xe18\xd8h\xd7\x95\x85\xac\xa6\xe0\xa1,_6K\xac\xe3B\xc8~\xb5\xdb\xa9\xf3\xed\xf0BIc\x85\xf9\xa3\x90\xf1\xb7p\xa0\xec\x0c_&Va\xe9\xb7\x86*<\x0c\xd1\xd1\xc8+\xdf\x02\xbdy\xc8S\xa0^\xc9\xa0G\xf5\xd0(\x8a\x9a\xe48\xcd|hJF\xf7\n\xc7\x15\xcd\xe09\x82\xb8\x10\xa1\x7f\x01ECM\xd8\xe4\x0dh\xe1F\x18\xce\x8e\xb9L\xcag\x83\xa5d\xc9G5\x00\xe1\xc7\xbb;\xe3<;C\xf9x\x86j\x16M\x136#\x9e\xcb\xf3~\xf3S\x1aC\xfel\x0b\xe4\xe7\xbdi\xd5\xf6\xa6\xe1\xc8@\xe4\xe6=U\x90\xf54\"\xb2W\x16\x91\x93\xb2\x88\x9c\xe4\"\xb2W\xfc\xd2\x88\xc8j\xcd\xc6\x9er\x89\x98\xae\xd4\x86\xd3s\x0f\x96e&\xe4p\xc7\xed\xe5\xcaD\\\xed\xeaw\xf4\xbf\x1e\x86\x07j\xef;\x85v\xff\xb8\n\x8f8\xfcH\x7f\xbfM $..\xcfT\xef\xe0$\xa6\x8bo\xe5b\xdb\x05\x0870mL\x15\xc1\x93\x184\\x\xe7J\xd3\xa5\x0bk\x17\xfd+\xe7\xdcAQ\xa5/u\x0f\xaf\xd0\xba!\xc2\xce\xa9\xcfo\xf0\xb9\x08\xc1X\xc6\xe8\xe2=\xf4\x08\xaf\x97\xe5\x84\xa4QD\x17\xd6\xe2V\x8c\x91\xa1DJ\x07\xbcVj\xd4\xd4\xebC\xad\x80\x88\xd7\x1737\xbb$\x17\x9f{.t\xfa\x945\\\xf1\xcb'\xcb<&\xc2\x9a6\xab\xda\x9c6rX\x8eli\x02\xe1\xaa\xc6o\xf9}e\xfa\xa2P\x04\xe9m\x9e\xbb\xda\xdb\xed\xda\xfb\x93\x90\xbb\xbbI\x11\n\xb4s&;\xee\x8d`\xbc\xc0\x88\x15\xa1p\xe2c\xd4=t\x98\x0d\x0e\xa7V#\xbd\x89O\xcc\x18\x12\xdd\x95KF'\xd6LZ^b\x96|\xe1\x92\xdf\xe0D#>(\x7f\x98\xe9\xa8.R\xec\x8c'4@~=c\xc17\x8a\x80\xc8\xb8\xb7X4\xd8\x88\xf1+\x1e\xcb8\xc6T\nQ\x98\x92\xeb\x14\xf30\xc5\x97\x89\x93\xfbo\xc6,yD\xc00%*P\x88\xae\x89)Et#id\x99\xbe\xf9\xdej\x8a\xc2q\xc5\xeeEr\x9fp\xe3\xa6\x08\xe9\xd0\xd3rV-\x1e\xfeCT\x0f\xa9\x19a\x84\xfc\xccD\x8a\xb4\x1b\xcc\xcc\x9a?\x1e \x13jS\xf9\xd3\x82\x9c\xdd\xd1\xdaXO\x16\xe3\xa4\x08\xda\xcb~\x04\x85MF\xe9>\xbf3\x86X\xa1\xf4\x8a\xffX\xe2\x8f\x9cq\xc5\xdb\xf5e\x81\x0eZZ\x94\xc6\x1b 6-\xc0\x88\x8e\xc3\xa9\x0es*^8\x90u\xe9\xcf\x0dD\xa1\xc4\x9esa\x85\x8b\x14Z \xa5qJ\x12{\xad\xe3\x0fj\xefs\x1a\xc2\xa8\xa2\xe8\xaf\xf9x\xa6\xbd`\x9b\xe1M\xfb\x0d6\xc5g$\x8d\x03rE\n\x8a3\x8b\x08#D\xc1j\xbd$T(\x12h(\x90\xf8\xb1\x96*\x89\x0fk\xda\x9e\xbb\xa0\x1bqe|9\xb5\xff\xafq\x9c\xe5\xcdj\x1aoM\xdf\xf8\xfb\x0f\xd6\xbd\xbc?\xdb\xf5P\xac\x08\xe6n\xe0oh\xd1\xb1\x04)\x04\xaf\xaa\x8a\x81\x85\xca3q\x1a\x93\x8a\x01\xf9`\xbb\xad\x0f\xeaW\xe3\xe7D\x19\xc0R\xfb\x12\x88\x03\xfe\xa64I\x7f\x8e\xc7\xc1\xe8\xe9\x8e\xbeM\xcf\x8e\x1c\x93\x8c\x1f\xe1\\cVF\x9ct\x84x\xb3\x03I\x1elH\xf2\x7f\xd5\xefa\xe9\"\x1asj*\xee\x84y\xccO\xb1\xd5\xe9x\xe2\xe4R:\xac\xb4z\x98\x9fP{]L\xc3\xbf.I\xfa\x19G\xd0\x1f\xd38z\xc5 <\x16LV\xb3\xfd\xef\xa7\xd4\x92\xd2\x0f\xe96X\xe8B%DsXD\xecm\xf1\x88\xbd\x04\x86\"\xa5b#s@\xaf\xb2\xee\xf3\xb33\xba\x1c\xf8\xa5K\x12\xdf[\x17\xfaT\x19\xa8N\x95`,\xcd,H\xc4dP2z\x19\xbc\xd8\xfef\xd1\xec\xdf\x84\x98\xfcl\x16\xc4$\x01\xaf\x08}g\xf4X*\xc5\xbb\x96\x82L\xf1\x10La\x9ea\x81\x12\xcfN\x9f\x1d\x83)ya\xa2t)[\xc2 \xb4\xdb\x01<\x81\xf8\xc4\xc1\x19\xe6\xf9{\xe4B\x01\xde{\x8c\xa0Mg\xff\xe9\x08\xfa(\x05S\x01d\xb7\x8ftgp\x08\"\x03!N@\xc0\n<\x1d\xc1\xdeQ^v\xff\x10\xcb\xd6=\x7f\xf4\x08\xf6\xf6i\x81\x8c\x12\xc6\xc9\x04\x83F\x15\x96\x89\xfe\x01Zr\x80\x12K\x1b\xfb\x1a\xb0*[\xfdJ\xd8\x01\x82uup\xc4\x1f\x88\x0e\x1e\x17_\xf5=D\xe8\xc1~\x0e=\xee\xe5\xd0\xe3\xc3\x1c\xda\x1f\x0c\xf02(\xce\x13\xce\x11\xa5\xe0\xac\xcbe \xce\x9b\xf5\xff\xfe\xc5\x9fY\xb5\xfbPuz\xd78Q\xc8\x18\x8b\x1a\x18\xf6\x0dO\xdan \x91Y\x8a\xcfJt\xe5r\xec\xeeX\xd6\x1b\xbew\xf2\xdb:\xa1\xdd\xef\xdf'\xb0\xa76p=\xad\xd8:?'\xc9\xa7\xd1,[\x12\xabJ\xb5y\x9a 9\x8d\x82\xc3T=\x98K\xaf\xceQ\xc5x}9I\xbd\x94|\x7f\x99]\x06a24l\xdadM|\xd33\xfa\xf1\xb0\xcdd\x08\x99Y\xc8O\xc8\x92\xf8i\x14'C0\x04c\xd2\xbf\xcbR/\x19\xbb\x068\xb6Y\xe6\x13Zs\"\xa6\xc2\xdc\x8f\xbc\xaf\xd1F}\xf5\xf4}U\xf1\xf0;\xfa_\xefU\xf9mn\x87\xf6~\xffX\x89\x90\xcd\xed\x0c:\xbb\x84o\xd3'{J\xa0e\xfeh\x7f\xaf_}\xe4\xe5\x8f\x06J\x90i\xd1\x87\xbd]\xc79\xf9N\xfeL\xe0\x0e\xf8z\xc5O\xca\x98C\x81\x9f\x05s8\xa9\xa0)\xe3\x06_U6\xa7|+G\xa3\x10\x93b\xe6\x05!=\xb65\x1c\xac\x0bC\x1d\xa7eEF$\x93\x19\xbc\xd8(i\xd9\x8fC\x9d\x84\xb9\xd1\xbdB\x99\x07\x1e\xb4X'a\xb1\x1c\x97\xd5 \x93\xdfQ\xbf\xd1q/\x95[B\x97$\xfd$\xf2\xbd\xe5s\xdc\x04\x9b\xc5\xfa\xb3{\x18\x8c\xd8\x8b\x13\xf2\xd3\xde\x8a\xbf\xea\xd8\xb1\x18\xfcv^\x0erC2]|\xdc\xe9t&a\x16/\x87`-\xd2t\x9d\x0cwv\xd6$M\xd2(&\xdd\xe4\x9dwyI\xe2n\x10\xed\\\x0dv\xc4\xaf/\x92(\xb4&\xe1,Z\x9d\x07\xb3!X\x7f\x85?\xe8d\x815 \xd11\xddK\xa3\xf8\x07\xa5:\xa3p\x19\x84\xe5\x1aEAk\x12F^\x96.\x06\x9f\x91Y\x10\x13?-\xde\x1c\xee\xec,\xe9\xbc-\xa2$\x1d\xee\x0ez\xbd\x1dV\xb2\x13\xf3\xa2\xddE\xbaZZ\x93\xf0\xb1v\xd0\x1bQp\xc9\xb5c\xd07hR\xe3\x87\xa9^\x7f\xdc\xdb\xdf\xebi\xb7od\xc4\xdcZ\xf4Q\xbcH\x85\xb5\x120\xfe\xa6\x88\x15=#\xeb\x98\xf8^Jf\xe0\x853\xc9\x91&K\xc8\xac\xdb\xe0C\x03\xf2\xfct\xa9\x98\x87#\xe9\xc9IK\xbbg\xfe\x82\xac\x98uu\xf7\xa8\xf4\xe4\xe3g/?9{\xf6\xf1\x8b\xf3\xb3\xe7\x7f\xed\xc5\xa7\xcf\xb8\xc1vP*\xf3\x93g\xaf_\xc9\xcf\x07\xbd\xdd\xd2\xf3\xe7\xaf?{Q~^~\xff\xa3\x17\x1f?\xfb\xc1'o\xce\xab\xed\xec\xefj\x8b}\xfc\x83O>\x91\x8b\x1d\x95\x8b-#o\x86\xa1\x02\xe8\x97\xea\x83g\xf4P\xc1\x9f=c\x17\xce\xc4\xe3\xc4\x9b\x93O\xc4\xbb\xe2\x87\xae\x80\xa8C\xfa-\x17\x9be\xab5\xc6\x0c\xa4_\xaa\xef\x7f$\x1e\x8a\x1fr\x81\x9f~\xf6\xe9'/\xae}\x82!\xe89\x1e\x96\x86\xf6\xe9\xcbW/?}\xf6I\xddZl8\x87\xe6\xe9K|/D\xd5\x81E\xbfY\xa5gH\xe1\xd8C\xfcZ~\xeaG+\xee{\x12\xd9\x16\xffQ.\xe1\xcdf\xcf\xa5\xf0\xe1X\xb0\x0c\xb3\xee!\xdfI\xfe}\xd5\xab\xfcA>\x9b%0\xbfD\xa5h\xa0\xb3|\xeaJ`/\x9f\xaf\x128iVH\x97_\xf0U\x85\xf2\x1cF0(\x83(\x92\xed\x96A\x14u\xf6\xca\xa0\x85Z\xd7L\xad\xebJ\xad\xeb\x86\xb9\xc2]\xf7z\x9d\xc9u\xefhr\xdd\xfb\xde\xe4\xba\xf7|r\xdd{\xd1\x99\\\xf7?\x9e\\\x1f~\xdc\x99\\\x1f\xedM\xae\x8f\x0e:\x93\xeb\xe3\x8f'\xd9\xc7\x1f\x7f\xfc\x02\xff\xffxz;\x9ed\x1f\x1d\xd1\x97\xb3\x8f\xbe\xf7\xf1\xc7S\xfb\xb4E!\xcf\x19\x84\x96pn\xed\xd3\xe1\xf8\xf3r\xb1\xdb\xcf\x9dJ\xb1\x9dr\xb7.y\xb7\x8e\xf6\xcb\x1ez\xe5R+,\xe5N\xc6\x93\xe9\xe4\xab\xc9\xfb\xea\xe3s\xfa\xf8s\xfbt\xd8\xbam\xb5n[c\xaf\xf3\xe5\xa43m\xb7\x9c\x0fv\x82r\xc9\x8b\xa2\xe4\xf8\xf3\xa2>\xc7>\x1d\xfe\xc4\xb8\xd79\xf6:\xf3\xe9W\x83\xf7\xb7\xec\xfb\x97\x93\xce_9\x99\xecLN\x87\xdf}4\x9a\xb4'\x1f\xb8\xe7\x93n\xeb\x7f\x98|\xf8xbO\x1c\xfa\xf6\xd4\xf9\xf0\x83\x9d@\xc7\"\xde\x19YD\x9f_B\xc33\xe3.\xfb.\x11q\xb5\xaakcU\xc7EM\xbb\x83\x0dj:\xdb\xa6&\xec\xdf\xb6}}alao\xaf\xa8\xea\xb8/}\xdf\x95\x9a\x18\x94~\xeco\xd0\xe03\x83yG+\x9e\xee\x1d\xa1\xb9\x02\xa5K~\xd2>\xc5 9{G0\xa4\xc7\xea'\\\xef\xb0;\x80[`\xc9\x9c\xd91\xbb7@}O\x87\x16j\xd3i\x19B\xa7_\xdb\xb1\xd7\xe6\x998\xca\x15]\xd6\xa4g\xb1\x96s\xc8\x7f\x87\x00\xb9\xc8\x05\x85\xf4\xfb\x07\x12(\xc5BU@?_.\n\n\x19H\xae\xe9\nA\xbd\x81\x04\x9a\xb3R{\x12(f\xa5\xfa\x05\xe8\xbf\xa7\x90]\xe95\xd4}\xec\x16/=\xb6\x1e\xc3\x10\xf6\xa4a\xec`\x0f\xe5\x96&\x14r(u\xe7\xff\xf9y,\xb3/A~\x13\xcb\xc8#E\xaa@\xa1G\xbd\n\xf4\x98)\xabk\x17\xe1\x8b\x9a#\xc6\x93\x11\x1c\xec\xef\xef\xee\xc3)W\\a\x96\xe9\xe7\\\xdfd\xa7\x85\x03j\xf9\x01K\xe9\xd9\xa6\xa7\xb5\x0e\xd6p\x00O\x9fB\x9fJX\xfb\x07\xbb\x83^\xf9\xd1#:\xdf\xbb\x8a\x11\x15\xe4\xd3\xd8[\x90\x13\xd3\x0e\xf6\x0f\x1c\x17^j`\x9f\xb2\x84r\x9f\xc2\x13\x18\xec\x1f\x9c\xc0\xa7\xed\xb6\x03o\xc7\x9f\xd23\xd9k\xfbS\x87\xc7\x19\xe8\xb9\xf0\xb2\x00\xea\x88\xd3\x1b\xad\x1e_hb\xc9;\x08P\x01C\xdeQI\xb7;\x0f\x96$\xf4V\x84\xb2\xf6 \\g)\xde\xdb\x8f\x92 \xc5;\x96i\x97\x9e\x1fd\x18t8\xf0,\xf5\xe2\xb2\x9b\xbc\xda\x97\xe7\xda\xbe0Q\x99\xf7\xb3\xf6\xfd\xef\xeb\xdf\xefF\xe1\x0f\xbd8\x0c\xc2Kv\x96\xcc\x7f\xf2\xeb\xea\xe8y\xca\xeb\xd7-\x0e]\x97\xcf\x94\xd3\"\x15\xd9\x86\x8d\x16\x1a\xf1\xbe1d\x0b?\xa2\x8f \xed^\x918\xa1\xc3x\xf4\x88\xcd\x845\xcb\xd6\xcb\xc0\xf7R~3\xf5'h\x93\xc0\x8eT\x98Q\xca\xe5\x91\x0fC)`\x15{\xb3\\\x12<\x9f\x8a\x96 \x90k\xcfO\xf1b*\xc9U\xba\xb4\x9a\\\xe3n\xc7\x8c+R\xa67m;\x93\xae\xf8\xf6\xc1N\x97\\\x13\xdf\x0e\xc7=\x1e\x03\x8d5\x14,\x97\x9dy\x14\xafdw\xffh\x0e\xe9\x82\x80\xda[*\x8b\xa1\xf4\xf82L\xedx\xdc\x9f\xbal\xafDe\xf8@\xc0\xa5\xb8\x8e\xac\xb5,d#\xc1lhX\xbf\x983\xde\xe6,\xf2\xf3A\x15\x13:\x82\x90E-\xef\xfa\x0b\xe2\xbf\xfd$\x08\xc9\xf7b\xe2\xbd\xa5\xe2[Dw\x90h\n\xef\xdc\x0e\x8a\xaf\xdf\xe7\xad&\xd9\x9a\x8a\xb1d\xd6\xd0hiu+*\xb67\xcf\xfe\xeav\xe8\xa2\xe2\xca\xc0\xb0\xdao\x9e\xfd\xd5\x9a\xc5N\xdfE\x85\xfe\xdf\x12\ny\x16\xd1\x0e\xbf\xd1u8\xef\xa6$I\xed\x18\x03@(K\x9bz\x97\xb0\xf0\xc2\xd9\x92\x80=\x0f\xe2$\xcd+t\xc4$\x94\xfa@[\xc9C*\xa4\xde\xe5\xa7\xde\xda\x85\xb8@\x9b\xc7\xe9\x82\xc4\x84\x1ep=X\xc7\xe4*\x88\xb2dy\x033\xe2/\xbd\x98\xcc \xc9\xe6\xf3\xe0\x1a\xa9\xa2\xf5\x18\xda\x10C\x1b\x1e[R7\x1e;.\\\xb0.\x07\xe6.\xafcB\xab\xb1\x13\xe2G\xe1l\x83>\x8b\xce2\xbf\x87r\xe0\xfc\x92\x96Q\xa5=\xaf\xc4\x92\xe2@U)\xa4\xc8\xdf\xaa\xaa\xe9\x08<\xd1\xa3\x02\xbac\xb0\xd8;\x94\xd8\xf2+\x1e\x888\xb4\x19\xa5<\x08V\x120sz$E\xf5f\xf9\x08\"\xfa\xa7=\x82\xbe\xc3e\x06t\x0e\xf0\xaa\xb6\x15&\xfb=\x19AF\xd7,C\xb9\xa7\xdf\xdf\xeb\xf7\xfb\xc5d\x93\xeb5\xbb\x83\xcf\xa2\x1c\xfc\xe4\xd9\xebW@\xab\xf1\xfc\x94(\xb90A\xdc4\xbca\xab\xe6I4\x84.E\x92\xc6\xc4[\xa1\xc3\x81\x17\x84 \x84Q\xd8Y\xc7A\xc8\xb6z^m\xa2\xab7\xed\xc6$\xc9\x96\x98/\xd53\xad\x99f\xc9>)\x96Lqo\xb9\xe2 \x04\xd0-\xac\xe2,\x833\x1cw\x83\x84\xa7\xdb\x0f%\x0c\xe4\x1a\x9a\x15\x89/ \xac\xbc\xf5:\x08/\x93\x13\xc4\xb6u\x1c]\x053\x8a\xddQ\x16\xfb\x84\xe7o\xa6\x9b@&k\x96\x93\x87\xd8\xa4\x87E[\xf2*xKn\x12;t\x9c|A=x\x02>\xfd\xc3\x164\xc3\x80\x8f\xde\xd4\x95\xe2\x9ce\xd87\x9b\xb0\x90\x94!\xfa\xdb\x04\xecG\xabW\xcfM?\x920Z\xce?\xac\x9b*\xdf\x85\xb9\x8a\xd7Aa\x08\x0cd.\xc3S\xf2\x08#\x91\x95z\x97\xc3\x1bo\xb5\xecF\xf1\xa5;\xe8\xf5\x06C\x9c?\xe6q\xabAsZ7\xbb\xeb\x18$L(2E>\xc0\xa5\xe2\xae0\xf4\xa0\x1d\xe5s\xe7\xc3\x13\x98\xd3?l\xee\x04.Dc\x1fS\x90\x1b\xb07/\xa6\x96\xc1\xe7)\xea]\xe9\x94'y\x8cb\x9e\xde\xa9X\x13\x06\xb0\x99\\\x04t\x8f\xdd\xde\xeaD\xa7\x11x\xecI!`\x95\xe5\x022\x13(\x06o\xc9\x0d&\xe0#\xe3`\xcaB$\xe5\x97~\x83\xe6D>\xea\xe2\x7f\xb9\xd1Y\x8a\x1f2p)\x05\x8d\x92(I\xd1s\x87\xdd\xe8\x12?\xdbmz\xac\xd8\xe5\xc8p\n\xb6\xfc\xc8\xcd\x8f\x9a\xb552Y\xaex\x8d\xca\xe8lz<\xc0\x89\xbd\xa0,\x9en/A\xa8\x18\x85\xc7gmt3\x92$S\x1c\x80\xa8\xacvf>6\xf1\xee\\\x86\x97s\x0e\xd5\x0e\xe1\x84;\x10\x04\xda\xb8\xac\xdc+\xeb\xda\x0e\x1c\x1e}TS[\xbb-\xd7\xa7\xdd)\xb8\xdbv\xd9\xd1\xca\xe0!7\x8bj\x0c~\x9b\xb4\xac}\xf9=\xbc[\x04Td\xe8\xf7\nA\xae\xbf[|\xe7`C\xbf[\xef\x90\x15\xe12\xaa%pv\xbeD\x07\x83\xe6\x89v!\xa6x\xc5\xd6\xfbe8\xa3R*\x9e\x9f\xf8A\x96.\x80\xfc\x90\x16\xdez\xd8\xefu\xbb\x8c\x87\xb0\x0d\x8b\xe1\xc6\x0cq\xa5\x9e\xcd\x0c\x99\x06\x8f{\xc16\x08\xe3\xbe?\xc5\x89\xfb\xd2\x85V\x1f\xbd\xe3\\\xd1\x94@\x0e\xa7\xdc\xbfM\x1aw\x0bf\x8f\xb4 g\xf7|HO\xb9\x83\x10\x9f`\x87\xf3\xb1\x0bo&\x13\x01zj\xf1 !?\x9b\x91\xd0'@\xc24\xbe1\x8a\xd9\xcc\xc7\xacDd\x88\x96\x96\n\x12\xd0\xf28\x8e\xd0\x83\x13Kd$p\x07\xc5\x89\xb4\xfb6\x08g0\x02K\xf4\xc0r\x8b\xcd\x841\xc6\x9a\x04\xca\x9f6\xd3\xa8\\\xc4D\x8c\xd6\xef\x80*\xa6\xd3!\xee\xee\x16\x11\xc2\x1b\x04\x90\xdc\x7fBW\x8f\xb4a\xe8\xf8M\x1a\x18\x8f\x1f+\x99i\x87R\xe5\x03.\x01m\xc2-0\x12m\xc41~\xb3\x17\x86\xb0\xcb\xa4\xa4@D\xb1\xc58\\t\x19Z-k\xf3Z\xd8\x1b\x16\x0b6 \x0b\x94\x91N\xf20\x8a\x03\x9b4\xa7\xbc\x98\x8b\x01\x92\x14p00\xb2~\x89r<\xc9\xb3\xf8\xd1\xd1\xc7\xba\x83pi\x97m\xd2\xbdBL\xcc\xc2\xfc\x04K\xc2\x99\xd0 \xf0\x83\xe8\xbb ]\x04!xpE\xe2\x0b/\x0dVt\xe5\xab\n\x1eS\xa8#.\xb9I\xe3m\x9d1)._M\x96D\xe0T\x9c\x80\xbdK\xa1\xf3\xe0\x07H~\x10\x06r\xed/\xbd\x15C\xc0\x95\x17\xbfM\xac<\x0eqe.X\x16\x85\n\xdd\xcd\x15;\xf2\x195\xf4*:\x9dJ\x9bI\xe6/JGn\xe6\xa5I1\xaf\x8c>\x8c\xb4o6\xef\xeaB7\xaf\xe7*WJ\x15\xba\x02\xe3L\xcd\x97\xd1;J.\xe9v\x8d\xe2R\xff\xcb\xab\xa6#\x7f\xc8\xc8Z\x17\xfa\xf60\x99u\xfd\x1c\x0d\xd1m#F]\xe6)\x08\"\x1a\xc3PU\x83\x85\x8eT\"W8\x85STs\x0d\xe9.\xe5\\\xa2(Ea\xe2\xa9\xee\xb1z~\x16\xe5\x99\xb6-\x0bs\xcd\x9a\xb4\xea\xa8Y\x0bQ\xb3\xf6\x18=\xc1k\x89\xf7\x0f\xcd\xc4[C\x96\x8f\x18Y\x0e\xefA\x96\xcd\x82\x8c\x9e4\x87\xc0K\xc8\xe4\xd9\xd0\x81\x12fV\xb1Zl\xdc\x90o\\v\xd4l\xbd\xb0C\x07\x93\xc76\xd7\xa8\xe5\xb0\xd2\xb6\xc9u \xc5~,\x0f!\x8cf\x04VYR\xe0\x9b\x97\xc2\x92xI\x8a\xaa{I\xcbVb\xd3\xf5\xbb\xa9a\x81\x7fJ\xd2\x86i\xf8\xc2U~I\xf2\xc6\x85K\x17V.\x9c\xbbp\xe1\xc2kf\x8c\xd20\xed7\x06f\xfe}\x033\x97\x16{\x19$) I~Vb\xbfl+Zc\xd4\xd9T\xe8j\xa1\x88\x1e\x9d\xcf\x82\x00pyE\xfc\xcc%\x15\x06@\xb5'\x8c\xd0\x19b]\xc8eLA\x85A\xeb\x1f=R\x04Q\xfbM.\xaf\x96\xc578e\x93\x00\xc3\xca!\x93\x9f:\xd0\\W}\xf8\x84+\xc2>E\x97x\x07\x0d\x1e\xf4\x85O\x0d\xde\x9a'L\x82\xba\xbd\xc5\xcdx\xe2\x94\xbbwZ\xf4\xee\x86\xc9c\xdfJ'a\x88\xd5\xeb\xd6\x8f\x07j\x80\x11\xbc\xa1\x9d\x8cr\x0b\xce\xa7\xf4\xc1\x9ao*z\xea\xbb\x80\x11\xf8\xc5\xa4\xcfs\x92F\xf0<\xd6\xa6\x9c\xecu\x99\xd5\x94\xec\x88\xf9L\xc1)\xbf:\x8eg\xaf\xd789\xdb\xd8X\xdcB\xc9\x9b\x98Og\xc0=w\xcc'4\xe0^;_\xd5\x8475=\xcb\x91T\xfb\xf4\xaa\xf6\xe9M\xed\xd3K\xc3\x06\x04\xeeG\xa3\x0b\"|\x87\xf3\xe3\x92\xab\xac7;?z\xc6$D\x18\x84\xa8\xa9\x1e.\xd6D\xd2\xa1-\xab\xc8\xb4\x07\xecP\x80\x07\x9a\xfd#\xfe\xfd\xf6\x96\xd2\xf2\xb8\xf9\n%\xd2\xc1\xd0\xc5[\xaf\xec\x08h\xd4A\xc9\xefI\x07<\xadL-\x7fX\xaa\xdf\xa6\x91:'pm{t\x9f\x1b\x8a6\xc8W\xf2\x87\xf6p\x9f\xf9[x\x0e\x9c\x99\x1a\xafH\xca\xb9\xc4\xe8Q\x11\xfe\xffc\xee[\xbb\xdb\xb6\x95E\xbf\xf7W\x8cx{\x1c2\x92\x15I~$Qlk\xa5i\xd2z7ur\x9a\xa4\xfbt\xcbj\x16-A6\x1b\x89T\xf9\x88\xed\xbd\xdd\xf3\xed\xfe\xb1\xfb\xcb\xee\xc2\x0c\x00\x82$@\xd2N\xd2\xd6k\xb5\xa1@\x10\xcf\xc1`\xde\x93\xb2d\xe3\xcf\xb5\xdbG\x97\xad\x82\xbf\xe4%\x9c\x82\xfe\xc0\xae\xb7\xd1w\x02\x12\xb6\xf1c\xa4\xc6\x149}\xb6\x8a\xe6\x1f\xa4\xd4\x9a__\xc8l\xb9\xa8kX\xf5\xf2\xa88Z\xc4\x9b\x8f\x02K\x8b\xa2\xb5@r\x02\xb8\x91\xf8\xe4\xff.\xd4\xf9\xc5/$\xc2\xaf_\x97\x86\x9c\xcc\xf2\x0f\x01c\xad\xb9g\xd1\xd5\x93\x14\xee\x9d9\x07\x96\xfa\xee\xf8\x9f\xd2\x13aD\xd8\x98\xf9\x0b~\xf1\x07kN\xcd\x04\xa9\x12\xe8o\xfc ~\x02>\xcc\xa3U\x14\xf2\x95^\x07IR \x9bW\xfe3\xbbKC\x1d\xb3\xa2\xff}\xaey\x9a\xe6X\xdcz\x12_\xf0 \xae\xb3U\x1a\xe0\xd9\xf9\xc0\xaea\xed_\x830q\xd6W\x05\xd5\x1b\xf6\xb9\x19\xdf\x88\x19\xef\x13\xcb\xe5\xf3\x0b\xf2\xd3\x80Mp\xed\xe42yN\xedi08\xc8Y\xcb \x9cG\xeb\x0d\xea_\xd8\x95ec\xf9l\x91\xceS{\xfb\x04\xa2\x18\x96\xd1j\x15]\xb2\x05\x9c]\x83\x8fj\xd0\xd4?\xcbV\xa8\xeca\xebMz\x8d\xca\x0d\"\xfcr\x9c\xa8\xbc\xa6c\xf3\xc6P(\x11\x0dEYeP\xae\xa4\x037DZ\x04T\xca\xa7\xab\x1f+A\x06hB\xb1s\xbc\xd9+k{-b\xd9\x1b\x97\xb7(Hk\xc6\x88\x9e\x81\xa8Qr3\xbfVnV\x80;\x9b\x17c\x93\xe8\xac\xf2Q\x15\xf2\xc4\xd1AH\xb3\x01\xda\xba j\xab\x9c\xae\\\xd4&\xf1d\x81~\xc5\x16\n\xfd\xfe\x81\xc4O\x0f\xce\xbc*\x01d\xa3~\xcaZ]\xccY\xb3\xd4\x93\x88u,\xf9\xc6\x17\xf5\x84\xd2\xc7FB\xe9\xda\xe0\xad\x04\x02H\x859\xa8\xbbi\x86\x05\xd2\x89=\xde\xe9 98IbM\xe9\xc9k0\x1f\xefs8\"\x82ac\xe5EUmN>\x8f\xf6D\x8f\x03\xea\xf1?M\xfeip7\xb2*\xf6(\xc3T\xd3=- \xabM-a\xa5\x8e\x1a\xf3z\xad\x96W\xe8\x0b\xab\xec+i\xd2\x08v\x17\x05\xd8\xfd\xa8\xc1.\xc7\xb7\n~al\x13\x1b\xc7\xf6\xcb\xe4\"\xa7?\x08?\xc2>9\xc5\x9f\x04\xe1\xf9\x8a\xc1\xefY\xc4\xab\x8a\xbdGZ\xa2n\x96\x86\x83t\x1b6\xc3\xdc\xe9\xe78):\x83a95\xbb\x04\x1e-\xc4t\x9f\xff\xd4`\xe2m\xf3\xa9i1\x9eZ\xc9\x88\xf0]\xf5\xd5\xa0\x8d\x18m\xe0\x95\x87d\x03|\x14c\x8dd\x9b-\xce\xa2\xa9\xab\xcbv*\x1aO\x87~\xfb9TrM\x9f\xfcE9\xd0\x7f\x98\xfa3\xafp\xc1\x1c\xa3\xef\x88>\xc9\x16-Rp\xd1\x910\x83\xe3\x1c\x8b\xcf\xcf\xd2\x08]\x89\x1f*Vf\x17\xc6\xf0hO\xfd\xe4l\xc3\xc0\x83#\xfe\xbf\x16\xba\xb2\x80\x14\xda\x11\x19m\x07\xfc\xbb'\x10lo{\xd8\xfb\xd3\xb6k\xc5\x99\x14\x0c\x1b\x87~5\x07\x07\xb0\xebA\x172\xc5R\xa9\x13x\xc1\xae\xfc\x05\x9b\x07k\x7fU\xef\xd2\xa4\xff\xe9K\xf9\x9b\x1b\x95\xe0\xc5N\xb7\xd0ZJ,\xf0!\x8c.C\x10\x11\xd3\x94\xcc\xac\xa6\xeb\xea\xc9\xa8\xc7\xa4~\x8eI\xe9\xe8\xdb0i\xb5\xe1/\x84I\x17Qv\xd6\x06\x93\x96\x06\xd3\x82\x96\xb8\x0dj5\x8f\xc2\x88Z51NGC\xb26\x0c+\x0c\\\xcdXu\x97d\x18\xcd\x8a\xef6X\xd5\xd2H+s'2\x81{#\xac\xdf:\xcf\xdd\x98\xa3\xcd6-V\x07s+\x93\xa7U\xe0'\xb7\xb2x2\x18?\xf6\x8a\xa6N\x9aH\xbd\x14\x8eE7\x84\xbc\x97\x85J\x0c\xb0\x10\xe3(\x19\xc5iw\x92.\xa6\x0fge\xddU\x95\\\xe5`rWS\x14\x94\xba.\xa5\xbc\x95\xdf\x94v\xe1\x9c]\xd1\xcd\xc1\xeb\x8d\xbbl\x06,\xbe\"\xcf\xdd%\xb9}\x12\x92F\xa6w\xe7Q\xfe\xbc;\xd2\xcaw\xf2g)\xe8\xc3\x1f\xfbz\xa5\xc7\xda\xb3Vg\xe7\xa1V_+\x7fL\xa1\x1e\x96\xb5P\x8e7\xce\xbe\xd6\xbd\x10\x9b-IF\xff\xa6\xf9\x18 \xee\xec\xe6\x86\xec\xfb8\x98\xb78X\xcd\xe4J\x80\xbe\xe4ErWX\xad\x8b\x03\xb6\xac\xa5B\x84u\xc6\xb2\x89b\xb8\xe3\x14k\x98g-\x8f\xef\xce^\xdbA\xd4\x0f\x00}eZ\xf4\xd9$\x95h\xbcj\xf29.\x9b\xa5\x8f\xbc\xcdK\xac\xd8l\x05\xe1+1\x8bT\xd3h\xc6gsU@\"\x13\xed\xe6DdP\x14\xdc\x1c\xda\xb3t\xe9\x7f\x99\xc6\xbf\xdfYZ%\xfej\xe3\xb6\xcb?\xbb\xc0\x04\x8af\xf8\xc2\xff\x83\x8c\x078~\xd2wB\xe8\xaf\x0b27Kr\x01\xf9w\x179\x8e\xb9\x14\x15`D\xcb\x10\xfe\xec\x0c%-#\xc6\xbb\x0d\xbeWw8\xbd\x1e\\ \xcc\xe7\x16k\x08C3\xcbv4\xb8<\xd8n\xc4\xf2P;\x1d\x85F\xc8%X\xa0\x99\xa2\xc5\xea\xa6*Q!R\xa4'\xad( \xfd\xbd\x16 \x94\x07\xd0\x96\xde,\xca\xd8\xc0\x998(\x9b\xaa\xa9\xab\x95\x08\xcdnn\x07\x96\xdf\xd5\xc9E\x94\xad\x16h\xabs\xe1\x7fd\xe0\x87\xd7\xd2\xf2\x1a\x95\xb0\xd2\xdf\xbb\xb5\xba[\xe9\x15s\xd1\xd9\x8fjVh\xe4)l\xe1h\xf5\x91\xb9\xda\xd4\xeb\xf1\x84\x06\x13\xef\xfbs\x19;OwM\x93\xfb\xfc\x9e4\xccw\xdc\x82\xcf{~\x05\xb2\xcf=!\xae7\x8c\xbaFh\xbf\xb9\x01g\xe9\xafVg\xfe\xfc\x833\xeb\xc9\xed\x99\x80X\xb7\xda\xeaS\xac=+\xccT\xac\xd1\xd6\x16\xbc\xa7O\xa8\x18\x1f\xcd\xa1d\x10\xa2\xf1=\xdf\xfe\xce\x01\xc6\xe0\xc4\x95\xec\xc2\xbd#H\xfds\xd4< \x98?\x13\xbe\x13\xa2uN+\xf6\xf0 `i\x9a\x97\xdeC\xff\x9b\xca.\x93\xc3{\xd3N\xdeq\xebr#4\xa1'\x13\xdd\xa31\xd9\x82!\xbfS\x9a\xa1s\x94+\xe1\xd0\xcbI\xf7\x91\"~\x94W,\x7fdI(\xd5\xc2\x8a\x7f\xbe\x8a\x12&\xcc\xf8K'\x99_\xe8\x95\x89\xdf\xdc\xc0\xeb\xafr\xf8R\x8f\xcaw\xe1\x87v\x9e\x85\x1a\xfa\xaf\x00\xa9\xc9\xc3P\x90~Z\x18!\xe1KP\x0d#\x94\xf6W\xec\xdc\x9f_\xf7\x94K\x8f\xc8l\xa6m\x18\x99=I\xb1U\x0b\x97E\xdc\xf1\"\x9f\xd1\xfcU\x0f:nIs4\x10tw\x07-z\xcc\xd20\x9ck\x06\xed\x9d\x13m|d\xc1\xdf\xadMC5\xbc\xect\xd63\xfa\xba\x15\xd8=\x19\x0f\x05\x0e\xc8\x8d[\xb8\x07\xa9xH\xc8k\"kiR\x1b\xeb\xe6\xcc!PKNCd\x06\xf8L\xd1\x19\xa0\xa8\xa1\xad\xcd\xb1\xd4\xa8\xa3m3\x04;\xd26\xf8hR\xfc\x05\xfbUPC\xdd[gZ\x1b\xd2\x01\xe4\xb2~1\xc0\xe2\x7f\xb1t\xe7\xae\x81\xa8\x16\x04\x9d6&\xd2;\x8b\xeb\xed'\xe1\xe1\xf7\xd34\x9cI\x19\x1b\xc7\xa7\xaf\x85\xc4\x81\xf0\xa9\x12\x82\xe5`Z\x90<|e\xef\xbc\x88\x0f\x06\x1ak$\xce{\xee\x9e_\x8f(\xdaV\xa4x\x0e\xed+\x8f\xbcbD\x17\x11\xe1A\x1f7_\x90\xccpV\x13\x14\xd0\xad\xfd\xb8\x12\xb7\xe5\xe7\x9c\xa6\x17\xd3D;\x8d\x8df\x9cV\\\x98*\x92\xde\xda\x82sr\xf0,\xee}T\xdc{P\xa18\xc2(\xdc~\xfa\xe6\xd9\xf1\xb1\x16O&\x01?f\x10\x84)\x8b71C\xc7\x87\x04\xd9-\x15tNnmR \x1b\xd0\x82\x9f\x9d\xc0\xee~\xf3\"{\x82\x14hXa\xad\x82\xe6I\xbd\xadc\xc9\xaa<4\x8aQ\x16*\xc03\xf7\xe0(\xecG\xede\xfc\x9dk\x8c\xc2XL\n\xc3d\x86(~G\x0e$\xbd\xa0\xe2\xda\xc9\x901\xa5\x05\xc8\xa7\x80K b\xc9\xd4Wrs\xf3\x82\x1e\xec\xef\x8d\x1e\x8aX\xa9\xfaG\x03Y\x93\x97\x8b<\xfa^\x19\xf7Q\xb2\x04\n\xc5\xd9\xa8YK/\x82\x84\xb6\x100\xfd\x01\xfe\x96\xd131!\x92\xfa!H\x1eQ'\x91\xf1\xd8\x99|\xbc\xb9A\x9e\x9b\xbf\xcc\x03Y\x1eb\xda*\xf9\xab\xd8\x04Q\"XE<\xde\xdc\x90\xd5\x02\x7f\x8b\x01\xaa\xf8;\x19\xa9J\xbdQ\xe4\x1a~)\x7f\x14\xdb.01|j\xf9\x981\nx\xb0b\x8bcQG|\"\xe8wK\xe5\xb7\xf4V\x0d\x1d\xf7.\x07\x06Q\xae\xc9\"\x06j\xb4(\x8e\xd0\x7fJ\x89\x84^\xa6\x1b\x02a\xa1:\x9fH_\x14\x11-m\xa7\x81\x08\x0c\xc5^\"$\x0d\x1c\x158(\xac\x1e\xd3P\xbb\x80<\x08\xf5A\x90\x9bFX8\xb7&\x92\xf3\x89^\xe7 \x0f\xf8\xb8\x0d\xc3'\x1e\xfc\xe0Z<\x8c\xc3|n\xb5\x07\xf4k\x9b8Z\x13E\xc3!\x9d\xe3rW\xc8G\xcb\x96\x1c\xcc-B\xf9\x88\xf3\xfc$\x91aFZH\xac<\x04[\x0c\x07\x10\xf0\x7f(\x04\x1bs\xa3i<\xab\xc7-\xdf\x1b\x0f\x9c<\x99\xdf\x99\xf6/XJ\xaa&T\xc9\xaf\xaa\xe7\x95\xd7\x1a\x8a-\x95\xb5\xe4\xb2N\x07\x06\x9f\x82<\x81C\xe0\xe6\x8aC\xa5\xa1W\x184\x085\xec\xda\x83\xb3,\x85e\x94\xf1[.\x8a\xd9\xad\x128\xe4I\x0c\xbe\xeeU\x93\x1e|\xdf\xb3\xe6+h\xd2B\xb4\xd8S\x04\x99\xb8\xcf\xaeR\x16.\xdc\xea\xf2\xd1\xa1\x1eCV\x9c\x0f\xef\xac\xb4\x1d\x12\xf8\xee\xd8\xd8W\xdaOc\x02\x87Z\xcc,f\xf3\xfd]gS\x8d\x0f\xfc\xe9\xe9\nL\xc1D\x03\xb7\x10z\xb1r\x97r<&.\x12\x89e\xcf\xb2\xe5\x92Pw\x15e\x86E\x94\x19\x8b\x9f\xf3h\x95\xad\xc3B\xa0\xd3\x1c\xee\x02-\xa3\xc19K\xdf\x84\xc1f\xc3\xd2\xa6\x05\xae\x98\xabW\xcfbG\x1b\xae\xa7\x0b\x0dL\xbc7\x88\x00\xf0\xbb\x1a\xc5\xf0pOD\xc0\x91\xf1o\xf4\xd9\n\xeb\x00~\x9do\xd3yvN\x07\xa7\xf1i\xf8\xff\xfe\xaf\x9eU\xc0\xe9\x07\xe1\x82]\xbdZ\xba\xdah\x10\x8b?M\xdd\x80\xf4\x17\x96\x90U\x01lS\xf0\xc0\xc2\"oc\xbf\x0c\x1e\xc0\x88(\x0f3\xb3\x86\xe3\x86~\xbf\x0f8\xf8\xee!\xec\x99\xb9\x946\xeef\xb8Dz\x1e\xbd\xd2Jd\x9c\xec\xd3\xa6\x97\x93Ww^\x9a\xcc\xba,n&\xd0\xf8vieZ\xacJ\xa4\xafJ\xc6\xd7\xf7\x13VE@\x94/\xd7CL\x80\xa8\xba\x80\\\x11sSJ@1\x94\xe0\xbc|4\x00\xefR\xc0\xfcn\xb9\x16t\x0d{\xde\xd5\xee\x8b.8\xbf::\x82\xd2\xcf\x90L\x19\xd86\x1b\xb5\xe3\x18\xef\xf8\xfc\xe8s\x82\x15)\x88{A($\x8f\xea\x1dFK\xbe\x87\xaarN\xb1\xf8)q0\x0e\xc6\xa3W\x98\x00\xf9\xba.\x9f\x9b\xc0\x04\xf9{Q@*\x10\xd2M0\xb9\xa096p\x85\x88\x8az\x19\xd3\xaa1\xde\xad\x11M+L\xf3\x89Hs\xa0])z\xe3\xfc2\x8e]C4\x9c$\x8d+\xd9\xfd>\x04\xe1b\x9c\xabs\x0b\xef\x94\xf7\xd7lu\xdb\xc6\xcd#\xaf\xdb\x17\x91\xe7\xf1Mz\xbdbcp\xd4z9\x7f\xf5q?\x8b\xa2?\xf5\xb8\x1bL\xa7Z\x1f\xf7\xc2\xb1N\xe3\x8c\xe9\xc7\xf8m\xf9\xf7O\xef\x9e\xcbc\xcd\x0b\xf6\xf4\x8f\x97\xfe*)\xd4~Q)x\xfa\xf2\xcd\xf3\xbb\xa2\x85\xbas|\x9b\x81\x7fN\xfc\xe1LE&\x81o\xa2h\xc5\xfcpF}T\xf2\xd2I\nT\xa8\xe1k\xe7^\x8bmL8\xc1\x9a\x82\\\xd2\xad0\x91\x0b4\x06\xb1KmN\xb1 E\xb4\xea\x8b\x16{,\xf7\xbbM_&\x8c\xd1\xae/9\xaf\x17\x96y\xfd\x1d\x10\x88%3\xe2m\xb3\x9aV\xf2\xa6\xed\xe5\xe344\x94\xb5o\xe8\xa1\xd6\x90|*c\xba\xc0\x84\xe9\x820\xfd; :\x12\xd7\xe8\xb2k#\xe0\x04v\x87zS\xc3\xca\"\x17\xee\xe4FU\xe8\x1a_\xe7\xbfD3\xeed\\\xbc\xc7\xf3\x1e\xa8\xf2\xe9i\xdf\x9d\x8c\x83pys\xcc\xff;y\xe1\xddPQ\xe8\x877'\xfe\xc9\xcd\xc9\xd3\x13\xcf\xfbZ7\xb9\xc7\x80\xfc\x98\xadW\xeb\x9c=\xb0K \x8d\xbc\xf3r\x15\xf9_\x84{\xd6\x85\xdb\xa4\x15\xe1\x88\xd6\xedD\x82\x80\xf1t\xda'\x9d\xeaf{\xb3\xcfN\xd2\x18#\xc1\xc8\x11\xc2!H2BX\x1eW\xa8\x91~\x1a\xbd\x8c.\xe5\x89\xe6\xa4\x04L\xf8=>\x06\x11\xfcw:\xeb\x81\xd3\xdd\xceu\xe7\x0c\xe9\x95#q\xc1\xb8d\xf2\xa7h\x91\x1e\xf0\x9a\xcb\x9c\xf4\x10\xa6G0\x11wY\xff\xf5\xab7\xc7o\x8f\x7f~\xfe\xfe\xf8\xe4\xc5\xf1\xc9\xf1\xdb_`,_\x9d<\xff\xeei\xf9\x95\xd3\x0f\xfd0o\xee\xc4?\x811\xb0\"\x85!0\x9b\xcb\xeeFf\x04E2\xe3\x05\x07\x9cZBCX\xe7\xc5Dh\x04\xb7\xe8\x8aIB#\xe6\x9f\xdb \x8d\x10\xees\xb2y\x8c\x0f\xda\xa8\xd8\xdf\x89\xd4p\x89\xd6\xe8\x1c\x92\x1b\x86\x81\xd4hKk\x14\xf0\xa4\x0d\xe2C\xb3l(HN\xfc\x13\xde\x17$\x97A:\xbf\x00\xd7*;\x98\xfb \xd3\xe5\x90cc-\xd0\x16\x07\x81\xcf\xcc\x1dQcJ\x8a\xdb\xa6\xb1\x93\xa7'\xb5\x8d)1m\xab\xc6\xfc\x13\x83<6\xf7x\xb6\x1e7!\xf4\xfb\x12\xab\xc5O\xfeg[\xad\xe3\x93\x17\x9fo\xb5\x8e\xc3e\x9b\xd5\xaab\xa0/\xb7Z\xdb\x9fu\xb9\xb6?\xebzm7.\x98\xe9\xb4\xe7\x9f\x0f\xfa\x03\xc3X\xb4{\xa9H\xf6\xf6 S\xc9\xbc&\x10\xaak\xcaa\x0e\xbfP(\x02fX\x87L\xfe,]C\x99\xfc\n*\xe4\x97\xa2\x8e\xb4\xffy\xdb\xae\xed\xc7\xd7N#A\xd7\xd8\xe2\xa4\xf4\x8b\x93no\xd3\xd9\xcd\x14NO\xd3Y\xd7+\xbc\x1c\xeb\xbd\x17~\x10}H%\xf7=\"\x10\xb1\x85\xfb\xee\xbfn\\N\x8by\xe5n\n\xdf{\x13\xcf\x9b\x14(\xb9V\xea\xdc4X\xb3$\xf5\xd7V+\x96\xcfN\xac\xe5\xe1\xca\x83>\xbbbsA\xb3\xa9\xd2H\x96~\x01r\xcd\x10\x07\xc5\xa23\xd9\x08\xb7L\xf3\xb5\xa7\xf47H\x81\xa9yx\x8a(\xcb'\xa1\xe7'\xf74\xf3\xee\xe7q\x1c\xc5\xae\xf3\xad\x9f2\xe5K\xcbx\x99)(S \xf2\x89v\xd9t8#\xda\xa7\xcb\xa6\xa3\x19y+e\xf4sg\xd6\x83\x0e\x9b\xee\xcer\xf3Wv \xbc\x03\x97\xff\xaf\xff\xee\xed3W,\x83\xc9\xff.\x10\xe1)\xba\xbc \x8aN\xd1e\xd3\xbd\x19\xc5\xa5\xe8\xb2\xe9\xfe\xac\x07l\xfapfC\xc2(p\xc5\x80\xb7\xd3\x873A\x94\x0ez\xb0\xe3=\x81U\xeeK\xb9\xf3\xc4\x83\x15\x1a\xf6\x99\x90\x14\x88\xa8\xd1\xddU\x15\xfd\xd9\xc0\x8bM\x1f\xcfp\xe1\xf9\x9e\xed\xb3]\xb8\x0f\xee\xfe\x00\xee\xe3j\x0df\xd0\x85\xae\xcb\xa6\xc3\xe1\x8c\x83\xd9@\x8a\x00qC\xf4/\xb77\x9e\x88\xcb`]6\x0dzV\x1eFS\xdf\xda\x82e?a\xe9\xdb`\xcd\xdce\xff\\\x93?\n\x0d\xda\xa5\x0b\xce\xd3o\x9e}\xfb\xfc\xc5w\xdf\x1f\xff\xe3\x87\x97?\x9e\xbcz\xfd\xdf?\xbdy\xfb\xee\xe7\x7f\xfe\xcf/\xff\xf2\xcf\xe6\x0b\xb6<\xbf\x08~\xfb\xb0Z\x87\xd1\xe6\xf78I\xb3\x8f\x97W\xd7\xff\x1e\x0cG;\xbb{\xfb\x0f\x1f=\xee>8<\x0dOc\xe7\x96\xec; x\xbe\xc4\x86\xddY\xfbm\xc1\xd3A\xa3b\x9cc\xc7\xc8\xa2\x1e\n)\xf2_H\x1eCa\x9d\x8e\xa8\xe3\"b\xcfr3vi\xbcN1\x00a\x7f\xb7Qk\xc4\xe0\x00\x06\xad4?(\x13\xdf7\xbe\xb6\xe2\xc1\x18\xfe\x0b\x1e\xa1\xf0\xb9\x08\xf6\x9f|q\x06E\xe9\xc5\xf44>\x0d\x0fgB\x86a_\xf4\xa0v[|\x8c\xffc|\x95\xd8\xb7{n\xd1\x07)\xff\xee\xc1\x13\xe0\xab\x9c=\x01\xd6\xedz\xc0\xe0\xbf\xd0\n\x8c\xe4%\xa4\xce\x99\x8b\xfc\x10pt\x04\xc3}\xd8\x82\xd1\xde\x9e\xd7\x03\xbd\xf8Q\xb9t\xb4\xb7\x07[\x90p\xa4\x9f`\x12\x90\x83\x03\xd8\x87\x1b\xf0\x158\x04\x12\x1c\x98\xe9r\x15[4\x00\x19\x087\xc3\x81\xdd\x87}T\xd1|\xd2\x90`\x0c\xc3GJ\xd0Slk`lk$J\xf1S\xe1q\xc8\x97F\xaf\xb3\xab\xbe\x8c1\xe9\xc62\x8e\xd6\xea\xc1\x9d#O\x80\xe8\x1e\x1f\xe7u w[\xa9\x08\x06\xf6\xe0,\x0e!\xd0\xf6Z\x93\xb6\x00\x1d\x93s\x8b\x15\xa1X\x80/k\xc45~\x0d\xae\xb1@\xe7N :\xf1\xe4\xfb\xd3\x00\xb7\x8fo\xfa\xfe\x0eR|Z\xe9\xc8T\xba_*\xdc\xdf\x81-@s\x1c>#7\xe0\x10\xfb\xc8\x83.\xa4SfW\xa8\x16\x01t\x87\xf4\x87\x9fyD0\x86Q\x0e\xae\x85v\x06\xa6vv+\x85\x07\x07P\xeeq\x7f\x17\x1b\x1e\xe6\xc0\\h\xb9:\xc0\x83\x83J\xc3\xfb\xbb\xc5\xf6z\x10\x17\x01O\xfd\xfad\x02\xc2\xca\xceVd\x7f\xc58\x93U\x02\xc1*,\xbc%\x89\x16\xd5x2X\x9c9>\xf1\xca\xb7\x19\xf2\x97\x985\x12\x83[o\x03C\x80\xca\xfc\xb8\x91>z\xae\\\x83\xf9\xe1\x0b\x9f\x90 \xd8\xea6\x16\x88|\xa1\xf3)\x9b\xe5I\xc0\x94\xa8\x96\x16|\xe6\x08f\x15E\xb2q\xb3=\x87\x08\x84\x13\x84\x10\xd7\x1b\xf0\x04\xa2Id\xd3j\x08\nY\xdfo\xecZ\xfe\xdd\xc9P\x07i\x9f\xe6>x5a\x81\x90\xa8;1k^\x16\x11\xce\xa2U\xd2\x0e\x058\xc5SyG\xfa\xa6*\x9c\xf8\x93<\x8cZ\x1c\xfa;\x9e\xe1\x8d\x1f\xc4\xc9\xdf\xeb\x10\x0b\x7f\xdd\x9a\x83\x9a\x89\x19=\x8dc\xff\xda\xf5\xa5\xdb\xa3R\xf4\xf0\x13\xec\xdf\xed\x04\xfbx\x82\xcd'7h}r\x03\xf4\xe1G\x93!\x0d\xe1~`\xd7 \xff\xba\xec\xd6ok%\x9b\xb2\x19Ge\xd1t\xc0o\x19\xfcw6\xfb\xd3\xa1\xde\xb2\x8f&\x9a\xfac9\xd4\x99\xf0\x06\xb6\xeccT\xd8\xc7\xcc\xb8\x8f\x99m\x1f\xf9ne\xb8[Ae\x89{\x10\x89\xb5\x0b\xc4\xda\x05\xb8vV\"&\xfa\xeb\x0fp\xf1\xd6\xbe\xe51N\x98Uun\xf6)\xfcrg\xb8\xf6\x82\x0dB\xb0\xc4\xfe\xd2\xee\xb1\xb0'L\x10\x15\xa2\x0d\xa7lV{\\>/\xc4\xdb\xf0\xfc\xdf\xcd\x8f\xf2\xb7\xe4A\x16.\xd82\x08\xd9\xe2\x13%/5\xcbp\xfbE\xf5*\x19\xe6o\xcb\xcf}\x8c\x82\x85\x8c(V\xd7\xbb\x89\x93\xab\x13\xfa\xfd\xcd\xbc\xa1\x7fK\x1e\xc4\xec\x9c]}\x11U\xca-\xe4f\x01F\xa6\xc1zm.'\xe5Mg\xa6\xb19\nxp\xfa\xc0\x9d\x9e\x07\xeb\xd9}\xef\xeb\x07R\xb3a\xae\x1e\x1bb\x0c\x80\x18\x94\xf3@\x8a\xdd\x07V%\x02i:\xa4\x05o8\x1d\"\x1b&\xd5\x07G\x9c%mq]\xf3\x9e\xd0\x9aw\xcar\x03\xa0\xb8`\x0b\x947Si\xe5K\xdf\xc1\x7f\xce\x8a\xcbS\xa2-:\xa9\xdf\xca\xab[0\"\xea\x81e\xc5P\x93\x95kFY\xaf\xcc\xc7|\"\x92PT\x1au\xd0\xd6\x14\xe6\xb6\xf8\xa4vC\xf8Zu!\xed'Q\x16\xcf\x19ty\x81ua\xd3\xfe\xf9*:\xf3WB\xe7\xd7=\x04\xe7\x9cB\xf5\xe5\xa9\xe7\xf3Wkz\x15\x9c\x87Q\xcc\x9e\xf9\x89\xfe.\xe0\xef\xd8\x97BfO\xb4J\xea~\xd1\xa21]\x06\xe1\"\xbaT@A?\xfb,\xd9\xc4\xc1\xda/\x19\x06\x06\x8d\x98\xd1\xa8N\xf8-y \x07\xff\x17\xe3\xc6\xaa\xbaF\xfe)\x18p\x11\x06\xf8\xe6{\x16\x11!\xc8\xf48}4\x0e\xe3g\xa1\x9eM\x8f\xfd\xf0\x9c\x8dkyo[TQq8^\xc7\xd1y\xec\xaf\xe9P\x84\x18\xfb\x8e\xef\x98\x0c-v\x16-\xae\xb58<\xce\xf3+\x0e\xf9I\x10\x85oR?ek\x16\xa6\x8eVu:\x98\xa9&\\\xe7i\x1cG\x97/\xc4\n\xe7_\x96?`\xea\x0d}\x8bN\xcf\xb7\xfd\xca\xc0\xe6\xebZ\xb1\xba5hD\xd4\x9f\x84\x8eEt\x9c\xe6\xcd\x0f\xb4\x8d\x0f\xeb6\xbe~\xd3\xff\xb0`s\x9b\xc3\x0b\xdej\n\n\x88\x81\x95\xdb0\x14\xbfu(\xe0\xbbc\x84\x82\xbc\xaa\x82\x02^\xd7\n\x04\xc5\xfae \xe0\xc0v\xeb\xaf\x0cf\x10/\xfc`\xc5\x16\x90F\xca\x16B!\x0c\xbb6\xc5\xd8\xc1\xc6\x8f\xfdur\x0b\xab\xd0H\x06T\x0d\xfd\xb5 >\xc5\x0di\xec\x0cW\x1c7\xba\x07\xce7\xabh\xfe\xa1t\xde\xec_\xe1\xf2Mp\x0d\xe4\x02\xbaQ\x0fB\x199x\x8a\x96\x0b\xfc>\x9e\x0egt\x01\x0b\x95\x8b^\xdd\x91\x08\x02#F\xe5\x9f\xd2g\xf5&4w\xbe\xa1\xe5\x00\xfe\xd4;Z\xdd\xba\xcat\xed\xcb\xda8X<\x00\xf6F&\x8b1\xf7\xd1N\xa98\xa3\xda\xe5b\xbfN\xdaW\xac\x9a4\xcb\x15J\x08\x0f\x0e\xe1q\xb1h \x870,i\xb3Vp\x08;\xa3\x12(\xf0\xb2\x9db\xd9\x05/\xdb-\x96-x\xd9^\xb1\xec#/{X,\xbb\xe6e\x8f\x8ae\xe7\xbc\xac4\xbe5\x1c\xc2ni,\xefyY\xa9\xdf3^V\xea\xf7\x12\x0ea\xaf\xd4\xc7\x15\x1c\xc2~\xa9\xbd7\xbc\xac4\xb7\xe7\xbc\xac\xd4\xc7S\xbe|%7\xc4W\xbc\xac\xf4\xedo\xbcl\xbfX\xf6\x01\x93\x15\x96*\x1eca\xa9\x97\x1f\xb1\xb04\x95\xb7ph\x80\xf8\xc1\x18\x9c\xd3\xd3\x81\xe1\x1ez\x88o|\xc3\x9bG\xf8\xe6\xcc\xf0\xe61\xbeI\x0do\x86\xd4Qhz5\xc4W\x1fM\xafF\xf8jiz\xb5\x83\xaf\xca\xd4\x1c\xff\x1b\xd1\xd0\xcbBh\xfe\xb7\xb3;\x86{\xa7\xa7\xce=\xc3\xd8\xa9\xaf\xd3Scg\xd4\xdb\x89\xe9\xdd>M\xed\xbdi\xa5F;\xd4\xeaK\xf3Kj\xf5uI\xc6P\xac\xfa\x8c_\xd6\xce\xb5\xd3\x03\xe7\x17\xfe\xbfk\x96\xe0\xb3\xf8\xe7\xf9\x1b\xfe\x0f\xd2\xbc\xce+\xfa\xff \xff?>\xd2S\x84\x8f\xf4\xffWX{\xb9\xc4\x8a\xe2\x9f\x17/\x9c\x99)\x90\xc6\xeb*\x92\xcc\xc5\xb5%\x0d4Y\x9e\x1c\xd6z\x93\xf5(X\xc6ho\xcf#B\xe8\xca\xa1h\xbd\xa3b[\xca\x02\x19\xab\xef\xef\xed\xed\xc8\x0f2\xf1\xc1\xae\xe1\x033\xc9\xde\xa1FvG\x8fw\x1f\xef?\x1c=\xde\xf3\xbcb\xf8\xdby\xb4`\xb0\x89\x82Bz\\\x8av\xb8\xf6\xafe\xda\x85\xf3\x98\xf9)\x8b)\xf3\xc2\xe0\xea\x85\xf83\xd1\x0d8\xd0wb\xa0\x8f\x8a;[\xf8%o\xbc\xd3SG\xc4p\xcc\x836\x0e\xf0\xfbm\xc5'{\xd0\xd5\x987S\xb0\x92\x9f\xaa\x9b\xa5\x85\xac\xc6\x9d\xc9crG2\"\xb6\x0c0\xfd\xa3\x9f^\xf4\xd7\xfe\x95\x8b\xf9\xc1E\xf1\xcd\x0d\x8c<\x19\xda\xfbC\xb09\x0e?\xfa\xab`Ami\xbf\xf58\xdc\xcbUt\xf9\x92}d+\xa4`\x83\xe4$\xe2kz\xee\xa6\xf9\x1bO\xfa\x1fie\xb2\x97\xf4z%\xe2m\x17\xaeU\x1bE]\xcd\xffkH\xdfU\xe0\xdcrw\xfe\xff\xfca\x919\x87\"\xfb \x19iP\xc6\xd5\xb8\xa40`J'C\xce\xff\xd1\x13\x8a\x88:\xa4\x8c\xe4\xf14\x10Z]q\x16\xd84C\x0f\xeeN\x87\xc8\x99,7]\x1d\x91A/\xff\xcc\xc0\xd5r\xd0\xc8\x94\xff\xb6\xd7\x03\x97\x12\xb8\x95B\x90\xf7eV!\xde\x0foOdt\x98\xf7u7\xcb\x1e\xf8\xd4\x99\x8f\nk\xfd\xd5\xd4\xe7\xe3\x0b\xa7\xd9\x0c\x0e\xcb\x91oA\x13p\x17\xe1\xd9\xd5@\x8c\x03\x0e\xb6\x98H\xf3H\x05;Q\x9c\xfe\xc0\xae)\xd5\x8c\xfaQ\x8c\xde\x1e\xb2\x7f\x06\x0b\x19=]\xfd\xba\xb9\x81G2\xf6y\x18\xfd\xc4\x96\xd4\x86x\xd4[\x08\xa3g\xd1z\xe3\xa7?\xf2\xe3Lu\xb4\x02\xbd\xe6<\xe2\xd0\x8d\xeeV\x97b)\xb5\x02\xbd\xe6\x1d\xe2\xc5\xcb\\Du\x9f<\xbf*\x86\x98\xc7\x9cWa\x1e\xa6\xbe\x98I\x9a\x97,2\xfe\x85\x9f2a\xa7@\xa5Y\xc2\x16\xdf\xeao\n\xc1\xfdL8\xe2\xc4x\x98\x10\xe8\xc5i\n\xe0\xb0\x14:\x96y\"w1)\xe6\xb6\x87\x04\xd7|l\x89f\xaa\xf4\x04\"8\x80\xe4\x89\x879\x1a\xd0j]\xa6\xe6\x17n|\x98\xf8?\xf2\xd0\xda\x87\xfcCD\n\x0b\xd1A\x82\xa9\xdd\nox\x97\x14\xc65Bc!z\x0eu!\xc4\xa9\xe0\x03C\x01\xd7\xddC\x08<>\xc4\xeea\xd9\x9dL\x80\xb0_\xbbD/\xebbo\x9bc\xebJty\x1f4\xce\xce\xd4\xf6\xb7U\x14-\x19\x0e\\\xb1\x15\x87>z\x9c\xd76\xf4okC;\xa3b`\xaa\xe1h\x1f\x99\xf7\xfda9\xf2\xd5\xe8\xf1\x1e\xff\xc5)\x94\xdcm\x82\x93$\xe2\xd7\xcd\x0d\xec=\xdc\xd9\xdd-~\xc7/\xe3\x1d\xfe\x8b\x92Q\xa8\xaa\xbc|\xbf\xd4\xf5p\xb8;\x1c\x0ek'\xf2\xc2:\x11\x9cb\xa9\x1fl\x99?\xbe\xcf\x1f\x9f\xe6\x8f\xaf\xf2\xc7\x0f\xf9\xe3\x8f\xf9\xe3e\xfe\xb8\xa8\x1d\xd6;\xeb\xb0\x1e\xfcz\x1a\xde\x07\x19\xc8D\xdfn\xf9\xc4\x0f\xd27\xd5X#\xbfs2\xa7X\xf4\x0b\xe7U\x8aE\xff\xe4\xb4M\xb1\xe8g\xc0\x88\xd2\xd5A\xfeP\x1fg\x9d\x8f#\xd2\xed\x9b:\x86\xe8'sK\xf9\nO:\x85\xfa\xa8\xbe}Kx\xa0R\xce)\xd5\x7f\x8b\xec\xa3\x85\x04%\xa5\x9d\xc4x<\x9do]\xba\x8c|,;\xcb\x1f\xdf\xe4\x8f\x97\xf9\xe3\xfb\xfc\xf1i\xfe\xf8*\x7f\xfc\x90?\xfe\x98?.\xf2\xc7\xeb\xfcq\x9d?n\xf2\xc7\xe3\xfc\xf1*\x7f<\xcf\x1f/\xf2\xc7\x8f\xf9\xe3\xf3\xfc\xf1713{V\x17C\x82\x07\x839\x8a\x97\xbf\xed\x10\x0bb\xf2\x06\x0e[\xff\x13a\x05c\xdd\xef\xd7\x9a\xcdS\xff\xe3m'@\x91\xdd\x9a'\x02\xe2\xe6\x8a\xa7\xa3\x861\x83\xca\xffB\xb3\x9c\xa3\xfa'\xe2'=\x81.\xe7\xf50\x9b=_\x07Q\x01&\xfcqL\xc9\xeb\xa0\x0b\xffp\xe7\xc4L\xa2\xd2\xa2\xb63{\x98K\xc8A1\xb2V\xfa\x83\x83g\xe65A\xfb\xcf\x8d\xd0~\x0f3\x934+\xf7\xe4\x9fb\xa4s\xaa\\p\xcaV\x1aI\xc8LK\x84\xd0\x111h\xfb\x80\x0e;\x9c]\xdb\xdf\x19\"\x11P\x8dO\x1a!WL\xdf\xec\xef\x8c\x06\x90\x07+\xdd\xd9\xdd\xe1\xcc6\n\xa6^\xbb\xc3\xc1\x08\xbd\x96\x19lS\xeb\x949f[|\xd6%\x1e\x8e/\x1b\xa7\xdd\xc6$\xf3z+\xcce\xbb\x87\xd0AJ\xe6\xdf\xfc\xe2\x99@:\x8df0\xa6[\xee\xb5\xd9\x1bM\xff\x93\xba\xd4\xba=\xf3(}\xa8\xb9!\x11\xfc\xc1\xbee\x05\x99n\xb0\xdeDI\x12\x9c\xad\x84\xb7\xfb\x18\x02!\xaa$\x0b\x10\x8a=\xe64\x11v\x7f\xb8\xf5\xfc\xfc\xd7\xf64Rp(\xe95)\x00\xc4\x90k\x06-@\\D&\x85XRF\xf9E\xc8\xcf\x1b%\xd46\x7f7\"|\xa4\xde\xf1Q8]\x07\xb7K\x1e\xcam\xbalNC\xa7v\x86\xdf[\x19a\xdb\x909l\xe4(u{\x88\xb9/\xa9\xf4\x85a,\x8a\xf8\x99\xb2\xf1/E6\xfe{G\x98\xa2_\xd0\xfe1\xf8\xf39\xdb\xa4 \xaa\xde\xf0\x06^QN0\\\x81{M7MqZ\xd3\xd5\x8cff\xbfy\xecW\x8ad\x87cc\x95\xda\x90\xd3\x06\x83,#\x9b\xdf\xa9\x97\x8f\xfeOA\xc6G\x87\xbe\xcc\xb3\x17\xf4\x07r\xc8a\x8f\x8er\xd8\x83\xce\x10C\xdf\xa8\x9f\x03Cj\xe0\x04\x14\x94P\x13\xe5$\xad\n\xf9\xe9,\xed\x01E\x85+r\xb9\xe5\x14\xa6\xbc\xf9y\x0fV=\xb4\xff\xa8\xbaIq\x00Ea\x87z\x85\xbe=\xf2MU\\\x86\x02;W\x93P\n\x8dX\xae$Q\xbbM\"@-al~\x13\x18\xda\xd1\x8a\x1aZ\xd4?.\xa0:\xa5\xee\\g Z\x12\xf8pF\xa9n([y\x9d\x05\"\x14D\xacDB,\n\xfa\xb6\xec \xf1`C\x0fE\xf6\x9c\xd5\x10\x1b\xceW&\xe2@\xedb\x1c$\xa1\xd6\x12\x91%\xc2)'p\x16\xd3h6\xeb \x1cCf\x80>\xe5`\xa7\xff\x08\xee\xf1t\xb58A\x02\xf8\xf1l\xf0\xa7\xdc\x9b\x823\x1e2\xeb\xbb\xac\xb3\x14[\x875\x8b\xc9\xcc'\"r\xd3\x84\x13\xaa\xe2\x11\x1c\xe5\xf1MS-\x1d{?\xf1\x97\xec\xdb\x92\xb5B\x8d\xe5\x1eM1\xee\xb3\xab\x94\x85\x0b\xb7z\x8e\xc8Fs\x0cYq\xb7\xf0\xc6/\x8d\xeeN>?\x02\x90\xc85V\xba\xd6\xf0\x83\xed\xbc\x7f\xcf\x92\x1f\xa3E\xb6\xaa\xc6.\xfd\xe8\xaf\xb2\xa2w\x1f:\x8a\xf5\xcfY\xfa,\n\x97\xc1\xf97\xd7\xefb\x0c\x86\xdb_D\x97\xe1*\xf2\x17T\x0e\x87\"\x1eB>\x80\xdc\xe9h4\x18j;h\xf8\xd4\xae\xf1*\xdb\x16\x18\x15\xbd\xa2\x92;\xe0C]\x86\xfd%K\xe7\x17^\xc5E+\x9f\x93qJmvU\xd51\x92-\xca\x97\xb8\x9fl\xd8\xfc)\xd6L\xccH2\xf7\xe7\x0dJ\xcb\xe1\xa6^?\xbd`\xe8\x07\x17\xe9\xe9F\xe5\x9f:E\x91y\x14\x80\x9aSM\xbe\x8c\xce\x88\xa8.\xed'\xa9\x9ff \x1c\x1d\xc2\xee\x00\xd3[\x04\xfdl\xb3\xf0S\xf62\xf2\x17Ax\xfe\x06\xdf\xbb\xce\x12\x1d\x17i@\x9c\xb3\xb8e\xb5w\xf1\xcaux\xc1<\n\x93h\xc5\xfa\xa8\x14se\xffo\xd9U\xaa\x91'Y\xbc\xe2@\x86\x17\x07R\x89\xcc\xe5[)\xdcQ\x7f\xf1\xd7+\xea\xc1s\xc3~\xca\xae\xca!\xb4\xa1\xaaF\xfb[\x9d\x1f\x1d\xf2\xcfY\xda\x12\xd2R^\xf78t\xcbw\x15L\x80\xc1\x18\xa6l\xf6\xf7\xc2\x12\xa5s\xaf\x08w~\xfa\xf7\x0c^\x84H\x91\xcb\x1b<\xef\x0b&\x10\x83)9\x93\xd4\xc7\x96\x83\x17\x16[F5\x9a;\xdc\x7fT\xea1\x11#\xd9-\xe2!j\x93\x02I\x92\x0b\x06\x07\xbcL\xbe\xf0\xdc\xa0\x07I\xff\xdd\xebo\x9f\xbe}\xfe\xfe\xd9\xab\x93\x17\xc7\xdf\xbd\xe9\xb5\xdc>\x0c\x0e\x8d\x80\xeccp\xd1\x7f\xbc\xf1\\\xd6\xdf\xf8\xd7\xfc\xa8\xeb(\xde3\xf7\xfa\xf6\xd5w\xdf\xbdl\xdb\xab\xbc9U\x07f\xb5/\x02UEt\xa2\x86\x9c\xf0\x97=\xe8\xc4\xc5\xd1\x05\xc2\xf3t\xe6}\xc5\xf7\xf9\xc1\x83\xff\x03\x14J\xe2G\n\xdb\xf4\xee\xa7\x97\x87\xc9\xa5\x7f~\xce\xe2\xed,\xd8\xe6xg\xe1\xaf\xa2\x90m\xa3N$\xed\xff\x96\xf4\xd7\xfe\xe6\xff\x07\x00\x00\xff\xffPK\x07\x08v\xf2\x8aA\x86\xba\x01\x00\xc5\x87\x08\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00 \x00swagger-ui.cssUT\x05\x00\x01\x80Cm8\xec\xfd{s\xdb8\xb27\x8e\xff\xff\xbc\n=\xbb\x95\x9a\x99\x1dS!EQ\x17\xabf\xeb\xc8\xb1\x93q6r\xc6\xcem\x92\xad\xad)\x8a\x84$\xda\xe0\xe5\x90\xd4\xcdz\xf6\xbd\xff\x8aw\\\x1a $;s\xf6\xf7\xad\xb3\xd9dl\xe2\xd3\x8dFw\x03h4\x00\xb2\x9bl\xed\xe5\x12\xc5\xda\xda;\xfc\x9fN\xe7\xe5\xdf\xfeo'\x08c\xdf\xc6\xde#\xea:I\xd2\xd9\x0c\xbbzW\xef\xfc\xbf\xce\xec\xfac\xe7\x9d\xe7\xa0 A\x9d\xff\xd7Yz\xe9j=\xef:\xa1\xff2@N\x88\xed\xe4%M\xf7\xb7\x97\x8b0H\xb5\x85\xed{x\x7f\x9e\xd8A\xa2%(\xf6\x16\x13'\xc4a|\xfeWs\xde7,\xe3\xdfD\xfd\x9dU\xea\xe3\x03\xf6\x02\xa4\xad\x90\xb7\\\xa5\xe7F\xd7\xb0&\x9a\x9fh)\xda\xa5Z\xe2=\"\xcdv\xef\xd7Izn\xe8\xfa\x8b\x89\xb6E\xf3\x07/\x85K)\xce\xf3\xd0\xdd\x1f|;^z\xc1\xb9N\x95\xd8q\xea9\x18\x9dQ\xcf\x12\xcf\xa5\x9f,\xc20E1\xf5h\x85l\x97y\x14\xd8\x1b\xea\xf7\x049\xa9\x17\x06\x07\xd7K\"l\xef\xcf\xe78t\x1e\xe8\x16\x1b\x87\\K\x99\xf0\xe7=\xe4OJ\x19\xbb\x83!\xf2;\xb4\xa4\x0bo\xe9\xd8Q\xc6\xf0\x8cy\xbc\x8eii}\xdb\x93UZPT\xea0\x90\xdf\xe9\xeb\xd1\x8e\x96+>T\xca\x9d\x87\xbbL\xe4\xdd2\x1f:\x16a\xec\xf3\xca\xfbg\xba\x8f\xd0/1JP\xfa\xaf3\xbe Y\xcf}\x8f)\x01*\xcbf\xb5\x92\xa2(\xfdW=\xb6\xdaQ\x84\xec\xd8\x0e\x1ct^\x14\x01\xd5\x974\xe7\xe7\x9a\x1f>j\x8b\xd0Y'\x9a\x17\x04\xcc\xd4C\x8a\xaa\x04-\x85o\xc1\x16\x95\xf3 \xde\xeb&\x91\xed\xba\xd9l\xa0K\xda\xd0\xb0\x89\xbd`)n@+\xae\x92^\x02,E\xa7\x11\x87p\x9df\xbevnD\xbbr\xec\xed\\\xe4\xc0\x8fh\x972\xb3$\xc2n\x82\xd2C\xd5\xb0\xaei!\xbf\xd3\x1d\xe6\xff\x0e\xb8a\x01\xa3%\n\\h\xda\xac\xe7\x14j\xd6$\x9e\x16\x83a5\xacW\xdd>\xb5\xe7\x18M|{\xa7m=7]\x15\x1d\xa5\xd6\xf2d\xbb\xf2R\xa4\xe5\x83\xf4y\x11y1Sl\xb8\x8cQ\x92\x80\x83\x8f\xd2(Xw\xe1\xbaw\xd9\xeb4\x04\xac\xeb\xac\x90\xf30\x0fwP\x1f\x89m\xd7\x0b\xffu\x92Vd\x0e\x15\xac\xfd9\x8a3\xef-\x19\xe7^\xa9%\x91\x17h@\x17\x14\x10\x85\xeb\x94&:\x94C\x90\xa0\xa1 \xb2cg\x05v\xdfLY\xb9\xc7LJ\x0f\xd3\xc2\xc5\"A\xe9\xb9\xd6cB+\x8aU#K\xf1@s2nX\xdc\x06\x11]\x13\\@\xd2q#[C\xbf\xf00\xd2\xd6\x11\x0em\xb7R\x82pt\xcaG\xed\xcaO\xe9X\x00\xa5\xb6\x87\x13:\nE\xc1Z\x12\x85&k\xdf\xb7\xe3}\x8d\xc0^\x92j^\xca\xf4*\xc7\x0e66\xec\xc4\xb4V\x8b \xed_\xcc$\xe4G\xd8N\x115\x93Rd]\x17\xcd\xd7\xcb\xce\xdf\xa8q! \xb1\xe7v\x96!v\x01\xac\x96\xf7;\x90\xe2\xaf\x8b\xc5\x02\xa2\x98c\xdby\x80)\xd8\xf8\xa7\xa4X\xc6\x9eK\x04Ndx\xdbY\xc7\xf8G\xd7N\xeds\xcf\xb7\x97\xe8e\x14,'Y\xf7\x1d\xf4\xcf\xbc\xcf\x17\xef\xef\xb6\xfa?\xde,\xc3\xe9t:\xbd\xf9\xf0iu\xf5i\x99\xfd\x98\xffs\xfdj\xfau:\x9d^^]\x0e\x07\xef\xb2\x07o~\xbf{\xfd\xe5\xd7\xbb\x8f\xf3\xde7\xdd\xed\xbd\xde\x7f\xbb\xbd\xb8\xf8\xf6f\xec}\xfbp\xf1v\xfe\xe5u\xf0\xed\xf3[\xfc\xf5\xcb\x9d\xe58\x18\xff\x96\x11\xecW\xd1\xe7\xd7+\xfd\xcb\x951{\xef\xdfl\xe6\x1f\xacU\x81\xb7\xfa\xf3\xdf\xa7\xc5\xff.\xb7/\xd1\xaf\x17\xab\xaf\xbd\x14\xbb\xaf.\xbco_\xdch~\xaf{\xc3\xe1\xfa\xe5\xb5w\x11}\xbb\xd4\xbd\xcf\x8f\x9fofW\xc6\xf6\xb6\xf79\xb4?\xad\x06\x8e\xff\xf9#z\xb0>}5\xa3\xf8\xeb#~\xb8\xbe\x1f\xfd|}\xb9\xeb\xbf\x0fV\xa9\xf3\xc6\xc0\xee\x9b\xab%zc$\xf3`6@\x97\xba\xf7\xf5\xcb\xdd\xe6\xab\xffi\x90\xfd>\xff\xf2Y\xff\xfaa\xe4]\xff\xba\x1c\xa07\xc6\xd6}\x93\x8c\xaf\x1f^?\xcc{o\xf1\xf5\xeb\xd5\xcd\xa7W\x17\x97s\xf3-\xbe\xbe\xfc\xb4\xbe\xf1\x8c\xfb\xd9\xc7\xab\xdd\xf5\xa5c\xbd\xbb\xbf2\xde_\xce\xf67\x1f\xb6\xcb\xd9\xfdtw\xf3a\xb4}\xffa\xb4\x9b\xbd\xd2\xb7\xb3\x8f\xe1nv\x19\xeeg\xaf\xa6\xcb\xeb\xea\xef}\x7f\xf9\xdb\xafo\x1f\xbe\xddG\x1f\xee\xae\xbe\xd6\xf28\xfe\x9d\xff\xdb\x87\xb7\xa1\xfb\xeb\xdd\xf6\xbd7\xda\xb8\xa6k\xbe\x0b\x9c\xc7w\xfex\xffm?\xda\xbd\xff\xf8`\xbd{\x9c\xee\xdf=^\xef\xdf\xfd\xfe\xf6\xe1\x9bg<\xa2/\x96\xfe\xf5\xf7e:\x0ff\xf7\x04\xdf\xabo\xbf\xdf\xdc;>\xde\xbao\xf0f\xee]\xec\xbf\xbd\xf9:\xf8\xfa\xe5\xed\xc6\xfd\xfdv|\xed]7:xcl?~\xd2\xc7\xd7\xfeJw\x7f\x9d\x0e\xde\xed\xc7kg_\xdb\xe2~\xde\xd37\xe8\xcd\xeb\xed\xbb\xc7\xab\xf5\xec\xd58\x9d\xe7\xfaY\xa5\xf37\xd6\xe3\xfb\xe0F\xff\xe4\x7f\xa6d\x9e\x07\xb3u\xa9\xd3\xf5\xd7\xde8}g\xaeV\xce\xab\xd1\xee\xdd\xfdt\xe3\x18w\x96\xf3\xe6\xd3\xe6\x93\xff\xf9qn~\xde\x7f\xed}\xfe\xf0\xed\xcb\xd7\xfbk\xef\xa2?\xff\xb2[;\x8fQf{EY\n9\x9c+\xe3\xe6\xfd\xc3\xdd\xe6\xab\xf99\xfd\xf6\xc5\xd2?|\xba\x1d_g\xb6~e=\xd8_n\x07\xb3\x8fw\x97\xef?~\xed\xdf\xe8\x9fz7\xfa\xe7\xd7\xb3\x8f\xaf_\xdf\xdc/{\xb3\xc7o\x97\xb7\xf7\x0f\xdb\x9b\x87\xdb\xfe\xec~\xb9\x9d]]\x13\xfc\xf0\xda1\xefVs\xff\x06\x13\xfc\"\x9a\xdf\xad\x1a\xbf\xcb\xe8\xd2\xf1?\xaf\xdc7\xe3\xfd\xe77\xe3\xcd\xfcR\xf7n\x0b\xfd,?\xbdYm\xdc7\xe3G\xfb\xcdx{}usy}y\xbd\x9d}\xfc\xb4\xfc\xc7\x95\xb1\xfa\xda\xc3\xeb\xbc\xec\xd5\x83\xf7\x9b7\x1d\x95v\x1a\xdc\xbd\xf9\xbc\xb7\x7f\xff\x86\xbf]}\xdb\xcf{\xfa\xd21\xef2\x1d\x0e\xec/\xd6\xa3\xfb\xe6\xf5\xfak\xef\xf3\xdb\xbbK\xdd\xcb\xf0\xef|\x1c}\xbb\x0c\xcd\x9b{g\x7f\xfbpk\xde\xdc\x7f5o\x1f?\xedf\x9f>\xf5n\xef\xdf\xbe\xba\xd5?\xedo.\xa7\xfd\xd9\xc7\xe9vv\x7fe\xce>\\\xd7\xfc\xbe\xbd\x19\xdf\xbb_\x0c<\x0f\xee\x08~w4\xbf\xc7V~\x9bL\xf6w&\xe0\x93\x99\xaf\xbe\x1a\xe7~\xf9\xe9\xe1\xeeM\x81+\xfa]\xde\x0f?\xf6\x97\xbf]\x8e\xfb\xce\x9b\xd7\xf7v\xef\xb3~\xfd\xe6\xf3:\xeb\xef\x8ew\xfd\xf2\xb7\xe4\xe2\xc3\xcfof\xd9\x08q\xff\xe1\xd3\xdd\xc5\xe7_\xef\xed\xaf\x9b\xc7\x97/\x1fG\x97\xef\x92\xcb\xfe\xd2y\xf3\xbb\xf7\xf5j\xfa\xe6\xe2\xfa\x1fo.\x02\xf4\xf2\xe5\xe2u\xb4\x9d.\xb7\xd3\x8b\xf1hj\xbf\xeeE\xf7\xf8\xd3mF~\xf1\xf6\xee\x93u\x15?\xbc].\x97\xbf\xfc\xf2S'F\x11\xb2\xd3\x8e\xde\x11\x8e\xa4\x9a1x\xc6\xc1\xf4\"\x1f\xe6n\x8b\xc1t\xba\x18\xbd\x1c\xaf\xfew0\xfd\xdf\xc1\xf4?u0}\x7f\xf9u\x7fw\xbf\xba\xba\xbb\xcc\x06\xd3\xaf\xfb\xd6\xc1\xafe0m\xf8\xdd\xaa\xf1\xfb\x0f\x1aLo?\xb6\x0e~G\x0d\xa6\xb7\xed\x83\xf3\xf7\x19L7\xaf>\xe8\xc6u6\x18\xcd\xea\xc1\xd4\xbf\xeb\xbf\xb4~\xbex\xfd\xdb\xc5b:{\xed\xbf\x9c],w\xa3\xbb\xe9\x9b/\xaf\x02c:\xf5?,\xcd\xfe\xed\xe0\xe1\xe2\xf2\x1f\xb37\xb3\xcbW\xdb\xebWhv\x8d\xfc\xd7/\xad[{{\xe5E\xd3/\xdbO\xab\xed\xd5\xfd\xecr3\x9f~\xc1_\x1e6\x9f/\xb6\xeb\xd1\xe6\xf6zz1\xbd\xda^\xbc\x8aV\xa3O\x03G\xcf\xc7\xa5+\xfc\xfa\xe3\xc3\x87\xf5\xad\xff\xea\x95\xd2\x00<\xd2\xf2x\x97\x1c\x85\xb3`\x99\x1d~\xef#T\x8f\xbf/\xc7\xf7/\xfb\xb7\xd3\xafw\xbf\xaf\xa2o\xcb\xe9\xf4\xc3\xa7\x87\xff.\x03\xd9\xe6\x7f\xbf\xbdL\xa6\x17\xaf\xaf\xdc/71\xba\xcdF\xe6\xdbj\xe0|\xd9\xbf\x9d\xed\xec_\xeft\xe72\xdc\xbc\xebY\x8f\xef\xfcb\x1c{\x97\x8f\xb5\xe3\xfe\xd7\xdf\xa7\x9b\xd9\x87\xfe\xf6\xddv:\xfa\xcd\\m\xbf~\xb9\x89\xbf\xfd~\xbb\xfc\xea\x7f\x0e\xec/\xfd\xf1\xf5\xfa\xe7\xe1f\x7f\xbd\xb4\xbf\xdc\x8e\xaf\xb1c|\xfcxq\xe3\\\xdd`\xfb\x0d\xbeF\xc1[\xfc\xc9\x8c\xde\x7f~s3\xb0{3\xeb\xdb\xab\xeb\x97\xb9\x8f^f\xfd\xf7\"\xfd\xf6\xfb\xdd\xaa\x19#\x96\xe3\xeb\xb2\xee\xf7\xbe\xf5\xf8\xde\xcf\xc7\xe0M\xd6\xe7\xf31\xf9\xd7\xbb\xf8\xb7\x0fo\xab\xb9\xe2\xeb\xc7\xcf\xd3\xe5mo\xbc\xff\xf6aj\xbc\xbb\xff\x9a~}\xbc\xda\xcd>L\xcd\xf7\x1f\xfa\xbb\x9b\x8f\xcb\xc7\xd9\xfd\xa7\xa4\xec'\x9b\xd9\xe5\xc3f\xf6q\x9a\xce.\xaf\x06\xb3\x8f\xd3\xc1\xec\x9e\x18c_]g\xe3~\xed_\x8d<\x99/\xea^\xad\x1b\xd35\xdd\xbde\xce\xf6\xd6\xc6\xf1\x9d\xcd\xec\xe3\x83\xf5\xfe\xc3h;\xf3F\xfb\x99gd\xf4\xa9cf}\xf1u\xff\xdd\x17\xeb\xf1z\xdf\xf0\xbd{\xf3\xf9\xf1\xab\xf96r~\xbd\x8b\xe6\xbd\xfe2\x1b\xbf\xdf\xfb\xaf\xbd\xb9\xf9Y\xff\xed\xc351Nf\xe3\x00Q\xa7\xcc\x1e\xfb\xff\xc0\xb1\xf9\xf7\xe9\xe0\xd6|\x8b\xbf\xfe~\xb7q\xf0\xddf\xde\xdb\x12\xf3\xe2E87\xef6No\xb5q^]\\\xde\xee\xa7\xfb\xd9\xe5\x95q\xfdju\xf3\xf5\xcbM4\x0f\xb2\xb2eT\xf0\xb9\xb8\xf9\xf81z;\x0fn\xf4\xaf_\xac\xfbo\x9f\xf0\xd5o\x1f\xdef\xfc\xd7\xf6\x17\xfc\xf0\xfe\xe1z7\xbb\xbf\xd6\xdf\x7ft\x1eo\xee\xddW\xb3\xc7\xab\xdd\xdd\xc7o\xaff\x0fo/\xef>^\xeb\xb3\xcb\xe5nv9\xdd\xcf>:;\x82\xdf\xd5\xbcwc\xcc\xbf|^\xbbW\x0d\xbfoo(~z+\xbf|\xee\xac\xe7\x13\xec\xf8\xb8\xf7\xed\xcb\xdd\x1b\xc7\x1f\xa7\xd7\xbf\x16\xba|\xef\x8b\xe7\x85\xdb\xfb\xab\xfd\xec\xfe\xd6\xbay\xbc\xea\xdd\xe8\xd7\x8f\xf9\xbc\xf0p\xbd\xbf}\xb8y=\xbb\xbf\xdd\xbe\xbf\xbc\xda\xce.\xafw7\x8fW^\xc3O\xde\xfa7\x97\xa3\xf0\x1f\x97\xe3_\x7f{\xfc\xf4\xb2\x8d\xa6\xfd\xef\xe2\xe5v:\xbd{5\x9d^O\xa7\xcb\xcb\xe9\x87\xeb\xe9tuu1\xdd]]\xbc\x1c\xddN\xbfd\xe3\xe6\xed\x14\xf8\xdf\xd7\x8b\xe9\xed\x15\xf0\xfc\xfa\xeajzu1\x9d\xce.\x98\x82\x8b\xe9\xe5\xd5\xab\xa9~u7\x9d^]^\xf0<\xef\xae?\xbe\xbe\xf8\xf4\xe5\xea\xc3\xf5\xe6\xa5=\x9dn/\xa7\xb7\xd3WW\xb7\xb3\xbb\xe9\xe5h\x1a\xbe\x0f>~6n?^\x0e\xdf\xbeMV\xbf\x99\x9b\x0f3\xf3\xb7\x97/\xbf)\xcd/\xc6@m\x829*\xbe\xcf\xe6\xd7W\xb7\x0f_\x96\xbd\xe9\xff\xc6\xf7\xff\x7f\x1d\xdf\xab\xce\x01t\x1c\x9e\x8d\xad\x8asV\xcfH\xc9y\xab\x8c!U\xe7\xad\xc7\xcf\xbf\xe2\xed\xb7\x0f\xe3\x0f\xdf~\xbf\xd9\xb8\xbf\xbf\xbd\xcf|\xe9\x9b7{\xb6\xf8Y%\xae\xbfy\xfcj\xce\x1e\xde^\x15I\x97\x99!\x1f\xbf\xdb\xd7\x1d\x0d\xbf\xaf\xad\xfc\x9e-\xbeoOn\x1c\x15\xdf\xdf]\xb6\xf2\xfbN\xf1=\x1a\xbc5\x1f\xb2\x11\xe2\x91M\x96\xe8\x9f.\x93\xd9vv\xff\xe1.\xfc\xfa\x9b\xf5\xe6\xbf\xfb\x1f~\xbb\x99\xdf\xdd\x7f\x9e]\xdd\x1a\x8bWw\x97\xcb\x9f\xbd\xe0\xe5\xe0\xe7\xb7\xc6\xf4\xed\xa7]\xb2\x9c^\xbd\x99NM\xe3b\xfav\xf6A\x7f\xf3\xb5\x18\xcf?|\xfa\xfc\xfe\xee\x1f\xd6\xab\xaf\xd7\xd7\x92\x04J\xb3\x15C\x1f\x8e\xa1\x7f\x03\x8e\xcf\xccCwO=\xe0N\"\xb8\xf4A\x04\xd7\xa3\xcf\xcd\xb8\x98\xfe\x95\xdeZ\xae6\xe6\xe8\x87\xfc\x01\x9dE\x18\xfb\xf4F\xacA\xff\xda\xa3\x7f5\xe9_\xfb\xf4\xaf\x16\xfd\xeb\x80\xfe\x95?\x0b\xb4J}\xba\x15\xf9Nu\xb1\x89\x83|\xdb\xc3\xff\x12\x95\x96\xdbT\xa2\xe2\xc8N\x92m\x18\xbbB@\x8a\xc4\xbcS\xb4K\x85\x85\xeb\x98!,\xb64\xe9G\x1e\xbd\xc7c{\xf4.UH7\x9a>'\x101\xe7\x94\xca\xf3Q\xd4\xb3|\xd7\x93~BKPmK\xd2\x0fW\xf4\xaf\xb4-\xd6\xf8\x94\x0dH\xba7\xd8I\x84\x9cT\xcb\xf7\xd8\x0e\xe2\xf3%b\"M3\x06\xbbq\xb5\x9b\\\x9d0\xb2\x06\xdd\x9e\xf5BF5\xde\x19\x03\x96\xca\x18\x0e\xbb\xc3\xa1\x94\xac\xbf3Y\xaa\xa1\xbc\"s\xd7\xe7\xea1\xcd\xaeiJ\xa9\x06<\xd5`\xd0\x1d\xb4\xc8\xc6\xb7\xc8\xd2\xa5$\xa3\x9d\xc5U\xd3\xeb\xca\x1bd\xedF\\5\x03y5C\xbe\x9a\xa1\xd1\xed\xf7Z\xea\x19r\xf5\xf4\xe5\xf5\x18;\x83#a\xcf,2$\xc5\xc9\xb5C\xedq\xf6< \xf1:E\x934\x8c\xce\xf5I\\zd\xc9M\x9f`\xb4\xc8~'\xce\x0eT\xe7k\xb2\x9f\x1f5/p\xd1.\xfb\xe5\xdf\xff\xe5#\xd7\xb3;\x89\x13#\x14t\xec\xc0\xed\xfc\xe8{Ay\xea\xc0\xd4\x91\xff\xd3A,W\x90<\xa17d\xd4'u\x08\x80P\xadO\x00\x84\xed\xdd\x02\xaaM\xa9g\x00\x84*\x9d\x03\xaa\xaf\xbd\x7f@\x95)t\x11\xa8\xb2\xf6^\x02\xe9Q\xa5\xa3@\xb5\xb5\xf7\x15\x88J\xa9\xbb\xe4\x84\xcf\xdfc\x14\xbaL\xf9\xb0>\xbd3h\xe9G\xfeS\xba\x91\x7fb/\xe2\xe8\x14;\x11G\xa7\xd0\x87\xf8\xba\xd4\xba\x10G\xa7\xd4\x83\xf8\xda\x14:\x10_\x95J\xff\xe1\xabR\xe8>\xbc\x06\x95z\x0f_\x97B\xe7\xe1\x89\xd4\xfa\x8e\xff\xe7w\x9d\xb6^\x82\x9f\xd2K\xf0\x89\xbd\x84\xa3S\xec%\x1c\x9dB/\xe1\xebR\xeb%\x1c\x9dR/\xe1kS\xe8%|U*\xbd\x84\xafJ\xa1\x97\xf0\x1aT\xea%|]\n\xbd\x84'R\xeb%\xf8\xbb\xf4\x12\xb2^\xcf_\x1e\xe8c\xa0\xb4XN\xb8A1y\xce>?W\x9d?\xfd\xbf\x9e\x1f\x85qj\x07)K\x12\xa4\xb6\x17\x00D\xf9s\x82\xac}\xa6;\xf0\xc2d\xd3\xee)\xf2\xc0t\xacH\n2)\xcc\xbe\x85\xa0\xfeirBd\xc7\x89)\x94\x08\x9f&\x11D\xc6IDQ\xce\x97\x9a\x83\x82\x94v\x9d\"\x19t\x1e\x84\xe5O\x13\xa2\xac\xf6sn\x90\x98/\xb54\x8c\x8e\xe6\x93\x86\x11\xc7'\xef4Gs\xe2;\xc5\xbc\xea\xc7G\xf3*\xc88nY\xe7=\x9a\xd7\xf1\x8b\xab\xda*L_P\xaaN`\x98SX ms\n3\x89yNa'\xb1\xd0)\xec\xda\x82\x12\xd5\x11\xa51\xdd\xf1N'\xb2\xdc\xf1\x9c\xc4\x86;\x9e\x97\xccn\xc7s\x93\x99\xedxnmV\x93\x1a\x08\x1f]\x9d\xc8@\xc7s\x12\x1b\xe8x^2\x03\x1d\xcfMf\xa0\xe3\xb91QL\xb7<\xfe\xce\x1f\x83\x07a\x1aqL\x1389O\x94\xc2\xe4zMt\xfc\x18\\\xf1\x08\x92\x13\x84\x05\xa9\x14\xe4%\xe9\xda|[uD\xaa\x98\xfb\xa7\xb4\x03 Ri\x86\xaf\xdc\n\x89\xc0\xf8\x14\x81\x01\"\x15\x811)0\xed\xfb6}\xcf-g9)\x1f\x95\xd18s\xbb\xa7;O+\x9alt\x00\xe8\xb2\xc7\"\xda\xfa^]1\x1e\x00\xd4E\x81\x88~N\xdf_\x86\x18\x94%\"\x0e\xb8\xe2\x90wz\x80>\x7f.\xa2\x0e\x80{\x81\x94\xba\x8e\xef\x8bs;\x9f\xd2\x8f7\x03Av\x8a%\x08\xf2S\x8dA\xb08\xdd\x1e\x04\x93\xd3L\xc2\xa9\x0f\xb2\x8a\x82Y\x14\x86\x9b\xb9\x9d\xcd\xe3'\x98\xca\x7f\x92\xa5\xfc'\x1b\xca\x7f\x06;\xf9O4\x93\xffT+\xc1\x06\xc1'\x19\x04?\xc9 \xf8\xc9\x06\xc1\xcf`\x90'\x0ee\xac\xe6@\x83\xd04Zq\xd5\xaf\xa2\x13\xbc\xe3 \xc3\x05\xc8\x8eA\xb0a\x18\x1c\xd8\xb5\xe3\x07m\x19\xdb{\x06k\x9a&\x87\xf5=\x17\x82Z\x96\xc5A\x01\xd8p8\xe4`\x89\x877\xcd\x85\xef\x128\x1e\x8f9 .\x8c\x0d\xc1m\xdb\xe6%\x0d\xc3\x00\x92\xc1q\x1c\x01k\x00\x8c\x10\x82u\x9b\xdf\xd2d\xc0\x8b~\xf6\x87\xc3\x83P\xf6&g\x85\xd3\xc6:\x0d]%\xd8\xfeQ?\xd3_\x9ce\xb1\xf8Yw\xfc\x93\x80p\xd4B8\x12\x11\x0e[\x08\x87\"\xc2A\x0b\xe1@Dh\xb5\x10Z\"\xc2~\x0ba_Dh\xb6\x10\x9a\"\xc2^\x0baODh\xb4\x10\x1a\"B\xdd\x92\x13\xeaB\xed\xe8\xbd6\xd2\x9e\x98\xd6h%6 \xea|\x8c\xe1\x9c6^\xces\xda3\x1dt\xd8\x82\x88uX\x92\x08p\xd6\x82\x88uV\x92\x08p\xd4\x82\x88uT\x92\x08p\xd2\x82\x88uR\x92H\xa8\x08\xd6AI\"\xc09\x0b\"\xd69I\"\xc01\x0b\"\xd61I\"\xc0)\x0b\"\xd6)I\"\xc0!\x0b\"\xd6!I\"\xc8\x19K*\xd6\x9f(2\xb1+\xf1\x8eH\x11\x82N\x98O`1r\xd9\xc1{\xa8\xf7u~\x9c\xe5\x81\x8bE\xdf0\x07\x82Y\x01\x82\x0f{\x16?\x89\x84\xb1\x1d,\xf9\x81~`\x02\xf3\xf32\xc4<\xd7\xf9\x10@\xee\x11\xc6\xe1\x96\xc6\xf2\xaf\x0e\xa8\xa5\x85\xe0\x7f]\xcc\x17\x86\xcdO\xa8\xd1:\x8e0+\xb0\x85z\x8e\xcdO\xe6\x05w\x90\xc2\xee\x0f\xccE\x0f6J\xe4\x05l\x04\xe2Z\xba>\xe2\xad\xb2\nS\x08\x9d\x99f\xce\xcf\xa9 r\xa4\x0b\xa7v\x10o\x9b.\x1f\x8e\x94\xc1\x10B\x01\x837\xcc\xe1\xd0\xe2\x9b B\xc7\xf6x\xc8\x0b]E\x19<\xc1\x18\xa1\xb9\xc3\xeb$\xb07l@\xa2\xeb\xc6\xbc\xcf\xb3\xce\xa5\x9e\xe35k\x1b]\xef\xf7\xc7|\x08\x03 Mk\x88\\\x91W\x01\xf8\xf1\xc0q\x80 &\xc7\xa3\x04$q\\\x04\x91l\xedd\x85\\\x88`1X,\x16\xbc\xf4%\x01\xa4H4Z\xb8\x0b\xde{K\n\xb8s,\x16\x0e\x9a\x8bH\xa0\xde\xef.\\\xbe\x15d:\x91\"\x10f\x88\xe6\x9aV\xbe\xea\x84&\x80\xde\x7f\xd2\x9d\xc7\xf5\xd0\x1d\xdb\xae\xb7N\xce\xd9\xa1\"6\x18@\xd7\xe8Y1b\xd3\xadq\x8f\x85\x81(\x93EA\xa0>\x032\x00\x8cf\xe8\xac\xe4@R9\xd6\"\x0fc\x067\x1e\x8f\xc7\xc0\xea\xaf\xdew+\xc0y\x92<[iUz!\xd7\x90\xc5:P\xa41\xad\xd8U,\xe0UV\x1bbU\x96\xb5q+\xf7\x16[\xe4\x82*\xe2y\x15\xdb\x81\xa2\x96\xc8\x05kO\xb6\x1cX\xe7\"\xd3Q\"\xff\xe21\"\x17\x03\x90\xb0\x97\x01@\xd0\xd1x\x9c\xc8\xd7\x00\xa4\xc8\xddx\xa8\xdc\xe3\x98\x8c\xdfS\x9c\x8eO\xdd=\xd9\xefT\xa4Sw=\x86\xdb1\xde\xa7\xe0~*\xb9\xbeX'\x12oB\x97d!B\x8f\xe4\x80\x02\x87\xe4p\xb0?\xb20\xa1;r@\xa17\xb2\xc8\x16g|\xb6\x01\x90\xcbN>\xdd\x15\xdbe;\xc2\x13\xfd\xef\xe3\x88\x02\x9fc'!\xc0\xe7X\x88\xd0\xe78\xa0\xc0\xe78\x1c\xecs,L\xe8s\x1cP\xe8s\xc7M\xb9,\xbc6oc \xa2\xa0<\x9e\x06\xfb\x1c\x9b\x80}\xba\xcf\xe1\xe7\xf49|\xb2\xcf\xd1\xfc4\xadx d\xc5\xaeH\xf5\x02/\xe5-\x82\xf8,\xe4d\xa0\xf93\x0eZ\xdeF&\x91\xc0&f\xb6\x84\x08\x03D\xe3\xf2w\xd4\xb5\x0f\xd1\x07\xb8!\xdcn\x8f\xb4-\xd8\x92a\xb5\xc8(\x1cDd\x17\x1e\x08\x9b\x86\xc7\x81\xd6\xe1`\xa0\x818\x14l#&\xee\x15\x9a\x89\xdb\xbe\x17Z\x8a\x0f\xf5\x85\xc6b\xf7\xe2\xebm\xc0v\x83\xa9\x0cl[\"\x1a\x15\x1a\xd1W\xb4!\x8b\x13\x98\x90\x85\xc1\x16\xf4U\x0c\xe8+\xd9\xcfW3\x9f\xafj=68\x16\x1b\xcf?\xc1v\x023\xe1V3aE3\xb18\x81\x99X\x18l&\xacb&\xacd&\xacf&\xacj&6\x9e\x14\x9b \xc3f\xa2\x80\xc9\xcav\xc3\xadf\xd0\xd7\xba\xf3\x87\xe7zG\xef\xf4\xa3]\xa7\x17\xed:\xf4\xa6\xcbD \x05\xd6\xd4\x13\xd54R\xaa F\x815\x99PM\xbd\x92\xbe\xbd]r$Xc_Vc&\xb9\xaeP\x1f\x84\x03k\xb3\xa0\xda\xfa\xa5\xc4m\xb5\xc9p\n\x83\xf0\x01t\xa2lT\xff\xd3\xfcHR\xd9\xf3\xbb\x92\xa0\xb2\xef\xebM-\x95\xb6\x99\xf8x\x87\x12T\xf8,>\xa5\xe0T\n3{\xedi\xfe\x9f\xe8h\xc2\xba\xbe\x83\x9f\x81u}g7\x93\xd6\xd9f\xf4\x13\xbc\x0c\xac\xefOp2\x99?\xe1?\xd1\x9f\x84u}\x07\x7f\x02\xeb\xfa\xce\xfe$\xad\xb3\xcd\xbe'\xf8\x13X\xdf\xf3\xf8\x13Ua\x14\xa3\xfa\x0b\x1e\xda.\xff\xb4E\xfdq.m_~\x08\xa8\xf9\\W\xe2\xc4!\xa6?%\xd2\xcdb@=\xff\xe6\x11\x13\xb0\x15Q\x9f~\x80S\x89E\xa4\xa7W\x9fRb\x8a\xf3\xf0N?\x14\xe9I\xbe>#\xaf\x8f\x0fa\x8b*\x8d\xb2J \xc4-j5\xaaZyD^\xb1QT\xcc\x97fu\xf7\xf2\xba\xf9\xc8\xb8\xa8\xbbW\xd6\x0dD\xceE\xdd\xbd\xaan\x1e\x91\xd7\xdd+\xea\xe6K\xb3\xba\xcb\x86k\xa2\x96\xd7M\x07\x10e\xfdM\xe3\x01L.A\xd5|\xa0<\x97\xa1P\x80&\xd2@\xad\x02\x00Q\xc9P+\x01\xc0\x142\x94j\x00\xca\xab{\xd4\x9a\xb6\xf00>HoS+\xcc\xd0\x07\xde\x99\xb3\x98\x01\xf0\xe7\xc2'\xb3B\xc8-Ko\xcf\x8a\xa5\x0e_\xa4 \x9f\xcf\x1d\xbb\xaa[\xe4\x99u\xf5B\xe7o$\x10\xfb?!\x84\xc0\xc9+9D^Z\xcb!\xec\x08\x8d\x1c\xe2\xbe@\xc8!r\xf8J\x10\x89\xcf75\xc9\xdc\x9e\xa8K\xec\xf9u\xb3\x84\xce_\xcb#\xf6\x7fB\x1eI\x17 \xe5\x11\xf6\x82F\x9e\xb6\x8eP;\xad\xb0/(t\x06\x85p\xb5\xe8!\xbe\xa4\x83\xf8\xd2\xfe\xe1\xb7t\x0f_\xda;|y\xe7\xf0\xdb\xfa\x86\xdf\xde5\xfc\xb6\x9e\xe1\xcb;\x86\xdf\xd6/\xfc\xf6n\xe1\xb7\xf6\n\xbf\xb5S\xf8*}\xc2W\xe8\x12~[\x8f\xf0[;\x84\xaf\xd2\x1f|\x85\xee\xe0\xab\xf6\x06\xffI\x9dA\xe8\xf7X\xe2\xf7X\xea\xf7\xb8\xc5\xef\xb1\xd4\xef\xb1\xdc\xefq\x9b\xdf\xe3v\xbf\xc7m~\x8f\xe5~\x8f\xdb\xfc\x1e\xb7\xfb=n\xf5{\xdc\xea\xf7X\xc5\xef\xb1\x82\xdf\xe36\xbf\xc7\xad~\x8fU\xfc\x1e+\xf8=V\xf5\xfb\xb6\x80\x88&v\x16\xe7\xf6\x82}5j\xf6t\x8e\x16a\x8c\x0e\xe5\xc7{\xcf\xff\xd2\xf9\x0b\xfd\xe5A\x98\xcd\xc1\xc1\xc8\x8e\xcf\xe7a\xbab\x01\x87\xbf=\x86\x99o1\xcfqI\x92I\xc7\x14U\xdc\xf2\x960esqMAYt\xd2N\xb9\x93O\xa3b\x91\x9aRP\xaa\xa6\x18\x12\xac)U\xd8 V\x9d\x8e\x9dl\xa8\x93\x08\xecK\xe5\xf5e\xe2\xfa\xea\xd2\xc2\x82\xc9\x8c[\x17\xc2\x82a\x99`\x98\x12\x8c*u\x03\xd9\xe7\xfc<\xe6S\x81L\xf1\\\xf2A\xc2\xae\xeb\xcd\xdb?4\xd8u\xbd\x94E\x01\xfd\xc5m@`\xa9C\x17k\x0eb\x17\xddn\xaa\xc5\xe1\x96\x81\xc5\xe1\x16Bi\xcb8\\G<\xb6x\xceQ8!^\xfb\x01+A\xfeP\x80\x05+ \x8b8:m\xe1\xed\x90{(\x90\xd8\xde\x87\xeb\xf4<\x7fD\xbc\xfeJ\xa1\x7f\x1c\x18\xdbg=Lf~\xb2\x1c\xf6\x00\x12\x01;\x01\xcfC\xe0\x07\x00\x1046\x89\x83\xbd\x81C\x08\x1d\x82GJ}\x02\x84K\xdd\x02\x10\xa5\xdd3DDR\xe7\xc8\xd73R\xffPp\x10\x85\x01\xd4\xcd\x06:\xa9\xd3\xf8m>\xe3\xb7\xb9\x0c\xcbA\xe41\x1c\x0ev\x18\xbf\xcd_|Uwa\x81ro\x01\xd0rg\xe1\xe4P\xf0\x15\x98F\xee*\xfe\x93<\x05v\n,w\n\xdc\xe6\x14\xb8\xcd)X\x0e\"\xa7\xe0p\xb0S\xe06\xa7\xc0\xaaN\xc1\x02\xe5N\x01\xa0\xe5N\xc1\xc9\xa1\xe0\x140\x8d\xdc)p\x9bSPt\x0b\x8cvu%D\xee\xbd\x0e{5?\xd12\x10\xf9,\xfb\x9dfS\x9a\x08\xe4V\x99\x99aJ\x90\x90E\xc4c^R\xcd^\xa7!\xb5E\x90==7&\x95\x94\xe7F\xc7\xe8\xe4\xd9|\xfa\xb7\xc6\xeb\xf5\xfc\xe7\xea\x85\xa9@\x15\xf9\xe1S\xae\n\xbd\xa9\"\x7f\xe7A\xfd\x13\xc0\xa1\x8c$H\x1ea\xece\xeb\x89\xea\x0b\xe3\x13\xb2\xcc\xf5\xe2\xe2\x95\xff\xe5\x17\xcb\xeb\x9a\x88\x92\x82\xe5\x04|\nH\x90\xc5H@\xf5\xab0\xf6\x1e\xc3 =A\x808\xdc\xb2\xb5s\xfd#/\xdf\xc6vt\xa8\x19d\xbf\x9dg\xffL\xe8_A\xbd\x03\xa4\xc5\xc3 \xfb@P\xaf\x16\xa3\x0d\x8a\x13\x04\xd4_\x15M\xe0\xc7B+6,\x8f\xb6fU\xa3\xd0\x9c\xb4L\xa2R\xd8\xbc2\xb9Z\xcd,\x91\x8c`\x0d\xd8\x1b\x96\xc9K\x91\x9fhIj\xc7)%N\xf1\x19\xfd\xfcyS\x15\xf90\xff9\xff\xbcy\x92\x8f)\x05\x0f\x889\n\\\x805\n\\\x96q\xf6\x88c\x8b\x02\x17bZ\xbe\xe8\x93\xe7[\x14\xb0\xac\xcb\xa7$\xf7\xe2\x11\xc4{n'(\x1b\xc8\x00\xeeU\x11\xcb\xbf~N\xd6P=\x845\x1e\xa3\xd4Y\x81:\xcfKx\xad\x17\x8f\xc9\n\xcag4\xff\x04\xe1Ee\xd0\x8aE\x06\x07\xac\x97A\x85\xc6\xcb\xf9\xe4\xb6\x03\xb84\xa6jxp\x96\xca9T\x86\x02\x98PF\xc9\xf9@6\xc9\xb94&\x01\xf80\xca\xcf9\xc1\xba/uS\xaa\x1e\xd4\x0e\xa9\xe5\x9c\x13\xa8\xe4\xfbu\x92z\x8b=\xd0q\"\xdby`\xfb\x0d\xf1\xac\"\xac\xb2T\"\xedW8\xb6\xf3\xe4\xac\xa8\xbeS?\x01YsF\xa9Q|\x07\xca9\xb1\xfd\x87|\xc8\xd6\x00\x99\xab\xc2\xccQ\xbaE(\xe0+(\x01L\x0d\xd5S\xb6\x8a$\xb2\x1dT1\x83k\xb2\xf3\xd74\x1eh~\xae\x97\xa4\xb17_\xa7H\xc0\xb2\xa0\xa29\x96\x08\xb6\xf7\xe4A\x0da\xc3\xc29\xda,X1\xa3\xbaP\xc3\xaa\xe9Ar{Ul\xd8~\xd4p\xa2\xba\x91\xcc4\x15\xab\xda4<\xaf\xca\x0c43\x89\x11*\x9e\xac\x11\x1a\x96\x84% \xaer;0=\x95\xb4\x04\xd9Qk\x96P_-\x0e\xdf\xea\xccl\xebz\x81\x8d\x8bh\x9c\x88A\xb5\x1c|\xaeO\xca\xffB\x9c\x0c \xa7\x1e\xcb\xc9(9\x19\x10\xa7\x9e\x84\x93\xc9r\xea\x95\x9cz\x10'S\xc2\xa9\xcfr2KN&\xc4\xa9/\xe1d\xb1\x9c\xfa%\xa7>\xc4\xc9\x92p\x1a\xb0\x9c\xac\x92\x93\x05q\x1aH8\x0dYN\x83\x92\xd3\x00\xe24\x94p\x1a\xb1\x9c\x86%\xa7!\xc4i$\xe14f9\x8dJN#\x88\x13\xb6\x93T\xe6\x9cz\xf6?\x96\xe38\xfb\xdf\x84\xf8\x19\x085\x97Y\xd4\xa7\xcb\xd6C\xe5\xbbm7\xe8\\\x9f\xd4$\xe0\xca*\xe7e\xc8\x96o\x0d/\x83\xe0e\x00\xbc\x92U\xec\x05\x0f\x99d\x15i\x80\x966)F\x81\x00\x05)\x89\x0d\x80\xd8\xa0\x88\x0d\x85\\\xdb\x81\xe7O\xe4\xfd\x88\xc6\x9e\xbe\xa4\x86\x18>\xf7\xaaZc\x0e\x0c/\xbe\xcb\xc2\x1a\xac\xe5\xf8\xb55\xcbFmA\xf6\x9c\xcbk\x81\x04\xadK\xafgZa\xe7\xd5W<\x8e^d\xf3\xd4\xa7\xad\xb3a)\x9e\xba\xd4>\xcd\xb8\x7f\xcaj\xfbT\xab\x7f\xbf\x057+\xd1\xf3\xae\xb9a\xee\xcf\xb2\xec\x86Y?\xe3\xca\x1b\xae\xe0\xb9\x17\xdf\"\xfd?\xd7\xfa\x9b\xeabOY\x82\x8b\x18\x1d\xbb\n\x17\xf19a!.bu\xdaZ\\\xac\xa9\x13\x96\xe3\xacY\x9f\x7fE\x0e\xd6\xf0|\x8br\x90\xfd3\xaf\xcb\xc1:\xbe\xd3\xd2\x9c\xb2\xee3\xad\xce)\x9eO^\xa0\x0b\xb8\x9d\xb6F\x170;u\x99.`\xf7\xc4\x95\xba\x80\xeb\xd3\x17\xebB\xc3\x1c\xbb^\xe7\xe7\xeb',\xd9\xe5\xcc\x8e\\\xb5\xcb\x99\x1d\xb9p\x973;r\xed.gv\xe4\xf2]\xce\xec\xc8\x15\xbc\x9c\xd9\x91\x8bx9\xb3#\xd7\xf1rf\xc7/\xe5[\xfc\xf6\x89\xaby\x96\xfb\xe2i\x0bz\x90\xddS\xd6\xf4T\xf7?aY\x0f\xd3\xb3+{\x85\xa5\xbd\xc21\x9a\x9c\xa7\xff\xcc\xcb}\x9e\xdf\xb3\xaf\xf6\xfd?c\xb1\x0fTr\xc2Z\xdf?a5\xf8\xacK}P\x80\xd65\xdfs\xad\xf4\xfd\xa7,\xf4Y\xe2\x13\xd7\xf9\x90\x0cO^\xe6\x9fb\xd7?g\x95\x7f\x9a\xc1\xbf\xe3\"\xdf\xff\x9ek|\x88\xf9\xf3,\xf1!\xce\xcf\xb9\xc2\x87\xf8?\xfb\x02\x1f\xd6\xfd\xb3\xad\xef\xfdgZ\xde\xc3|\x8e^\xdd\xc3lNY\xdc\xc3\x9cN\\\xdb\x8b\xb4t\xca\xd2\xde\xff\xde+{\xa0\x82g\\\xd8\x03\xdc\x9f{]\x0fT\xf1\xbd\x96\xf5\xfe\xf3\xaf\xea\xfd\xe7\\\xd4\x83\xccN\\\xd3\x83\xbcN^\xd2\x83\xdc\x9e\xba\xa2\x07\x99>\xc3\x82^`\x93\xa3\xd7\xf3\xec\xcc\xfc\x94\xe5\xbc\x8c\xd7\xb1\xaby\x19\xafc\x17\xf32^\xc7\xae\xe5e\xbc\x8e]\xca\xcbx\x1d\xbb\x92\x97\xf1:v!/\xe3u\xec:^\xc6\xeb\x84e\xbc\xd4]\x9f\xba\x8a\x97\xae\xae\x8e^\xc4K\x17\x84'\xac\xe1\xfd\xa7-\xe1!\xf2\xe3V\xf0\xa2\xc5:~\xe6\xc5:\xcf\xef\xd9\x17\xeb\xf8\xcfX\xac\x03\x95\x9c\xb0X\xc7',\xea\x9eu\xb1\x0e\n\xd0\xbav{\xae\xc5:~\xcab\x9d%>q\xb1\x0e\xc9\xf0\xe4\xc5\xfa)v\xfds\x16\xeb\xa7\x19\xfc;.\xd6\xf1\xf7\\\xacC\xcc\x9fg\xb1\x0eq~\xce\xc5:\xc4\xff\xd9\x17\xeb\xb0\xee\x9fm\xb1\x8e\x9fi\xb1\x0e\xf39z\xb1\x0e\xb39e\xb1\x0es:q\xb1.\xd2\xd2)\x8bu\xfc\xbd\x17\xeb@\x05\xcf\xb8X\x07\xb8?\xf7b\x1d\xa8\xe2{-\xd6\xf1\xf3/\xd6\xf1s.\xd6Af'.\xd6A^'/\xd6AnO]\xac\x83L\x9fa\xb1.\xb0\xc9\xd1\x8buvf~\xcab]\xc6\xeb\xd8\xc5\xba\x8c\xd7\xb1\x8bu\x19\xafc\x17\xeb2^\xc7.\xd6e\xbc\x8e]\xac\xcbx\x1d\xbbX\x97\xf1:v\xb1.\xe3u\xc2b]\xea\xaeO]\xacKWWG/\xd6\xa5\x0b\xc2\x13\x16\xeb\xf8i\x8bu\x88\x9c[\xac3\xf4\x87\x05\x0e\xed4\x7fG\xce\xe4\x0fz-\xcc@\xe3\x12\x9a\xbf1\xa7\x05\x1b\x94\xd8\x93\xde\x82\xb4\xc8\xdf\x82\xa4.W\x83V\x12\xad\x81+\xbcYH\xfd\xfc\x81\xe6\x1f#\xb2\x7f\x94\xc4\xbe\xba\xc0\xb0l\xc7\x98\xb9\x06\xab\xc9\x86)\xd9\xa8\xd2\xc4\x0e\x12-A\xb1\xb78,\xc2 \xd5\x16\xb6\xef\xe1\xfd\xb9fG\x11FZ\xb2OR\xe4\x9f]`/x\x98\xd9\xce\x87\xfc\xd7\xd7a\x90\x9e\xd9\x1b\x14xq'@\xbb\xea\xe7\xb3\x15\xc2\x1b\x94-r\x9b\x9f:\x01Z\xa3\xb3\xf5|\x1d\xa4\xeb\xb38\x9c\x87ix\x16d\xff$h\x19\xa2\xce\xda;\xb3c\xcf\xc6g\x8d\x14\x8ct\x9c`K\x14\xc6K\xcf>\x83\xc0\xb9t\x9a\xa0E\xc2*J*\x9e\x80\xc7:\xa1\x8b\xa8\xf7\xa0e\x0f(\xa2Wa\x90\x84\xd8N\xce\xfc0\xb0\x9d0\xfbO\x98G\x13,\xa3u\xec\xa1\x98!\xcd\x9fun2\x95\x96\x00\x11}\xad`\x8a\x03\xa3\xf6\xc6\x1e\xa2\xb6\x17\x86\xa3x\x00v\x15R\xa7+\x84\xed\x84&/\x9e\x9dI\xccT\x16\xa9Z5\xf5|D\xd7\x91?\x81\xa0\xf3\xd0\x0d\x03\x8f\xc2^\xe4\x8f:\xb3\x8f\x10\xde\xb1\xb1\x97\xa4!m\x85\xe2\x99\x80bi\xc7\xb6\x1f\x06.-|\xf9\x10\x14\xc9N\x1eP\xbc\xf10\xa6\xfd\x84x\x0e\x91\x95\x8d(>\xa1\xe5\xa56\xf6\x98\x0f_/\x12\xad\xc8\xc3\x91\xc0\xe2\x89\xc2`I\x8f=\xf9;\xafT\xebc\xb0e\x95\nu*\x0c\xd0^6\x88\xaa\xca\xe1\x1f-\x06X#V\xaf\x11\xd25\x8d%M\xb2-r\xc8}\xee\x93\xefT1\xf7E\xf8\xc5\xd6\xa0\x00\x06\x0f\xe8Q\x80\x1e\x0f0)\x00\xf7y\xfa\xc5\xb6/\x17q\xb1\xb5(\x80\xc5\x03\x06\x14`\xc0\x03\x86m\xcd\x1cQ\x80\x11\x0f\x18S\x80\xb1~\xfc\x9b\xba\x19\x8f\x15Z\x84E@Fa1\x90]X\x0cd\x1a\x16\x03Y\xa7U\xe2E\xf1\xb9\xb36\x1b\xb1\x18\xc8L\nm\x1f\xb1\x18\xc8X,&\xb3\x97\x82\xc1\x14F\x05\xba\xbf\x8b\x8d\xe8\xb7\xb5\xc3` \xa0 \xfdv\x0b\xfa\xed\x06l\x11v\x91\x7f\xed\xac\xd5|~\xbb\xf5Z\x1b=b \xa0\xed\xfc#M'\xb6R\xdb\xe0\xc7\x00@+\xe1v+\xe1v+\xe1v+\xb5\x08\xbb\xc8?v\xd6j%\xdcn\xa5\xd6F\x8f\x18\x08h%\xcc[\x89\xc2xA\xb4N\xb5\x18%\xa8\xb9\xdfnG\x11\xb2c;p\x8a/qN4?|d\x1f2&Z\xa7i\x18\x14l\xce\xcfs\xfc\"t\xd6\x89\xe6\x05\x01\xfb\x16`\xa2F\x1eZ~\x86\xed\\\x9fD\xb6\xebz\xc1\x92]\x18\xaf\x8cC\xb9\xd1\xca\xbf>y\xd5\xab\xca\xf8\xd7\x19\xaf\xcc\xaa\xac\xcf\x97\xf5\xab\xb2\x11_f\xd5\xf5\x0d\xf8B\xadW\x17\xf7\xac\x17l\xa1\xa5W\x85\x16\xfb\xa9\xe5\x956\xac)\x87<\xa5\xa1\xd7\xa4\xfcg\x9a\xf3\xcd\xe6\x1cBl;\xf3\xb0\x0d-\xddf\xc5\x15\x93\xf2\x01\xc5\xa4\x84@1-#\x0b\xc8D\xdb@R\xb2\xc0U\xf1\xce\xb9\x12\x90\xfd\xcc\x96{\xc1\n\xc5^ZA\xca_\x15\xe6\x89\x03\xe39\xd9t#q\x1e\xa2\x18\xf2\x1f\xa2\x18r!\xa2\x18\xf2\"\xb2n\xd8\x91\xc8\xea!_\"\xcaAw\"\xcaa\x8f\"E\x10;U\x86j\xf7+JX\xd0\xb5(qA\xef\xa2\x04\x86\x1d\x8c\x16Y\xecc\xbc\xd0\xb0\x9b\x11\xfc$\x9eF\xa0*gS\xf06\x85\xa8d\x95E\x132\x0f\xf4\xa5\x0e\xe8K\xfd\xcf\x97\xba\x9f\xdf\xe6}\xbe\xdc\xf9|\xb9\xef\xf9-\xae\xe7\xabx\x9e\xaf\xe2x~\x9b\xdf\xf9mn\xe7\xb7z\x9d\xaf\xe6t\xac\xbc\x02\x9f\xf3U\\\xce?\xce\xe3`\xe7\xc2R\xe7\xc2R\xe7\xc2R\xe7\xc2R\xe7\xc2m\xce\x85\xe5\xce\x85\xe5\xce\x85[\x9c\x0b\xab8\x17Vq.\xdc\xe6\\\xb8\xcd\xb9p\xabsa5\xe7b\xe5\x158\x17Vq.\xcc9\x17\x05Lc\xdby@\xee\x01\xa34E\xb1\x96D\xb6\x93E^]\x83\xfb>E\x01\xd4\xd2\x8c\x19\x0b\xd7\xba\xba%\"\xf0\xd1\xd2\xe6\xd8\xf72x\xfb\xb8z\x009\xe6\xdf/:F\\\x80\xa2Mb\xa8\x92\\h\x05\xa9\x15f\x83\xba\xaac[\xc2\x11\xb46\x84\xafB\xa1\x1d\x12\x91\xf1\xb1\"s\x04\xad\"\xf3U\x14\"S\x14x\xa5%!\xf6\xdcC\xbe\x8f^u\x16\x0e\x93z)F4\xa6\xdb\xb38\x98\x13F{\x06e)\x98\xfa\x00\x8a\x94;O\xbbT\x1cL$\x18\x0f\xb4\x9e\xc9\x0fk\x89}%\x81}EyY\\\x9b\xb82\xc9\xb0\x92dXQ2\x16g\xb1^\xe5\x05\x0f\x87\x14\xedR\xcdEN\x18\xdb\xe5 Vv\xd1\x9b\xc1\xce\xb8'\xe7\xb6\x93z\x1b\x04\x14\xe4\xcb\\\xe0\xf9*\xdc\xb0k\xe4\xfc\xb9\x80\xff\xc6K\xbc\x145o\x1cMc;H\xbc\xea\\g\x18w\xba\x86\x95t\x90\x9d \xcd\x0b&\xd2R\xbe=\x85\x90\x87p\x9df*:7\xa2]\xc7\x0d\xd3\x14\xb9\x1dg\x1d\xc7(H_eLX\xba$=d\xff\x14Yn-\xddGP\x8e\xc0\xdf\x16\xab\xc1\xda\x15\x81\xd9zk\x90\xe5\\,\xe1o{D9\x1f\xc6\xf8[\x93(\xe7\x03\x19\x7f\xdb'\xca\xf9P\xc6\xdfZd\xfd|0\xe3o\x07\x04\xc0\x84$\x18\x92\x12@U\x8c\x08\xc0\x00\x92qL\x00\xc6\x90\x0c\xc5+\xd4\x1b\xd0I\x9b\xf1\x859\xf2\x85\x93\xdc\"\x0c\x042\n\x0d\x01\xedBC@\xd3\xd0\x10\xd0:\x8c,\xa0\x81h\x0cl#F\x1a\xd0L4\x06\xb6\x14\x8d\x11\x1b\x8b\xc6)\xec\xf6\xab\x8e\xdd\xa5\x15\xfdV#\xfa\xad6\xf4[M\xe8\xb7Z\xd0o5\xa0\xdfn?\xbf\xdd|~\xbb\xf5\xfcv\xe3\xf9j\xb6\xf3\x8f3\x9d\xd8J\xb8\xd5J\xb8\xd5J\xb8\xd5J\xb8\xd5J\xb8\xd5J\xb8\xddJ\xb8\xddJ\xb8\xddJ\xb8\xddJX\xcdJ\x98\xb3\x12\x05\xdb\x1a\x07\x91Z\xb7\xbd\x83H\x9f[\xf3 R\xe4\xb6\x7f\x10ipk\x1d\x84\xaa\xcb<\xa1*e=`\xab\xf5\xaa\xb2\x1ePVq\xe5\xd6\xd0[\xcd\xac\xe8L\x9e\xce\xac\xda`\x9a|Y\xd5\x08\xb3\xcf\x95\xf5+\x9e}\x9e\xa7U\x95q\x0b\xf6\xad6\xa8\xca\x06|\xd9\xb0*\x1b\x02eU\xfb\xb8U\xfeV\x1bUt#\x9en\\\x95\x8d\xf9\xb2,\xe0\x10\xf5\xb7\xad\x96\xae\xbc\xd8\xad\x95\xd35\xb3\xff\xf1\xa0mX\x00\x93\xaaY\x83\xee`0\x18\x0c9d\x9e\xc7.0\xf9b\xbc}\x80?0.\x9aM\x13b/mJ!GmJ!_mJ!w%\xea\x85=\x96\x00@NKH\x06\xf9-Q\x0c\xb9nS\x0cz/Q\x0c90Q\x0c\xf90\xa1\x16\xc8\x8d\x9bb\xd0\x93\x9bb\xd0\x99\x9bb\xd0\x9f\x89b\xc8\xa5 \x9b@^\xdd\x14\xc3\x8eM\xdaD\xe0\xdb\xa4\xeaZ\xdd\x9bh\xab\xcc\xc3\x1bX\xee\xe4\n^\xae\x10\xc6\xe4\x01\x8a\xc4\xf3}\x99\xe3\xfb2\xbf\xf7en\xef\xb7x\xbd/uz_\xea\xf3\xbe\xd4\xe5}\xa9\xc7\xfbR\x87\xf7\xa5\xfe\xeeK\xdd\xdd\x97z\xbb/uv_\xea\xeb\xbe\xd4\xd5}\xa9\xa7\xfbrG\xf7[\xfd\xdc?\xc2\xcd}%/\xf7\xd5\x9d\x1c\xf6g,\xf3g,\xf3g,\xf3g,\xf3g\xdc\xe2\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xee\xcf\xb8\xd5\x9f\xf1\x11\xfe\x8c\x95\xfc\x19S\xfeL!\xc2\x0d\x8a\x178\xdcj\x1b/\xf1\xe6\x18\x1d\xaa\x07\xe7\xe5\x03\x01|\xe5\xb9.\n\x1at\xf1\xbb\x00\x9c8q\x88q\x03.~\x17\x80\xf3H\xaa\x86\xf2;\x1b5p\xc7\xc9\xac\xedZ\xa4\xde\xb1rk;\xb9\xe4;Vvm'\x97~G\xcb\xaf\xedd-\xd8\xf3-\xd8\xb7\xb4`\xcf\xb5`/o\xc1\x9ek\xc1^\xde\x82=\xd3\x82\xfdi\x01-\xebXY\xe8p\x94oQ\x04\n\xeeE\xe1[=\x8cB\xab8\x19I\xa0\xecg\x0c\x91\x92\xab14\n\xde\xc6P\xa88\x1cE\xa2\xeas\x0c\x91\x92\xdb14\n\x9e\xc7P(\xcc\xc1\xaa\x81&\xe7\x92\xfe\x91\x1e\xe9\x1f\xe7\x90\xfe1\xfe\xe8\x1f\xe9\x8e\xfe \xde\xe8\x1f\xef\x8c\xfe\xb1\xbe\xe8\x1f\xed\x8a\xfe \x9e\xe8\x1f\xef\x88\xfe\xb1~\xe8\x1f\xe9\x86*\x1e\x87\x8f\xf48|\x9c\xc7\x1d3\xc7\x92`%\x8f\xc3'x\x1c>\xde\xe3\x8e\x9dki\x02%\x8f\xc3'x\x1c>\xde\xe3\x8e\x9dsi\x02 XKR;\xf5\x9cCq\x055\xcc\xdf\x8d\x91\xb2\xb7Ob\x84\xf3;\xa2\x0d\xaazB\xe3\xecy\x12\xe2uJ\xe0\xaa'4\xae\xf8\xa8~\x0d\xca\x7fU\x18\x8e\x0f\x80\xe0\xd9\xc8\xae$;\x05\x94\x8bOA%-\xa0pE#\x14Z\xa10\xa9\x94M\xf3\x15[\xe6+7\xccWk\x97\x7f\\\xb3\xc4-\xc0\x8a-\xc0\xca-\xc0j-\xc0\\\x0b\xe8N\x92'r\xc3\xc8v\xbct\xcf\xbdu@\x1b7e\xdd1[8\"\n\xd9\xbb\xe9\xda\x90(d/\xc1k\x03\xa2\x90\xbdm\xafYD!{\xad_\xeb\x13\x85\xec\xfb\x034\x93(d_T\xa0\xf5\x88B\xf6\x8d\x08\x9aA\x14rJ\xd0\xad\xa6P\xe7$\xd2{d1{0\"\xd4\x1a\xce\xccy\xfb8L\xed\x14i}\x8b>o\xb0\x08c\xff\xbc(\xfb\xb1o\xb9h\xf9\xd3D\xf0\x1cd7\xd6\xc5\xec\xc6:\xcc\xaex\x0e\xb23L\x89x\x86)\x90\xaf,\x809\x8e$\x12\x1a#\x81\x88e\x01\xc8\xb1\xd7\x93\xc8\xd8\xeb d,\x0b`\x8eC\x89\x8c\xbd\xa1@\xc6\xb2\x00\xe4h\x1a\x12\x19MC cY\xa00\x96\x1e`\xd7\xd2\x88\x0f\x1c<\x8fwI9\x9e\xe6`R\x96\xa7\xfa\x98\x9c\xe9\x89n&ez\xaa\xa7\xc9\x99\x9e\xe8lR\xa6\xad\xfe\xa6\xe0p\n\x93w\xe3\x85\xfes;\xa1\x84\xe1\x89>(\xe1x\xb2\x0b\xcax\x9e\xea\x81\x12\x9e';\xa0\x8c\xe7\xa9\xfe'\xe1\xf9D\xf7\x93z\x1a~nO\x930<\xd1\xd3$\x1cO\xf64\x19\xcfS=M\xc2\xf3dO\x93\xf1<\xd5\xd3$<\xdb=\x8db:\xc7\xb6\xf3\x90EP\xf9y\xce\xf3x9\xb7\x7f\xd4\xcf\xb2?\xdd\xf1O\x10t\x04AG t\x08A\x87 t\x00A\x07 \xd4\x82\xa0\x16\x08\xedC\xd0>\x085!\xa8 B{\x10\xb4\x07B\x0d\x08j\x80P\xdd\x02\xa0:\xdb\xae\xed\xca+\x02\xde\x02\xbbJp\x8e}qf\xe8\xfa\x0b\xded\x05|$\x82\xb3f+\xe0C\x11\x9c5]\x01\x1f\x88\xe0\xac\xf9\n\xb8%\x82\xc3M\xed\x8b\xe0\xac\x19\x0b\xb8)\x82\xb3\xa6,\xe0=\x11\x9c5g\x017Dp\xd0\xa4%\xf6\xaf:{\x93:@v\xacQ\x10\xc3`V`\xae\x1d?h\xcb\xd8\xdeW\x08\xd3dVw\xbe\xe7R\x00\xcbb\x96ad\xe1p\xc8\xacG\x13\x0foP\\\x15s\xefB\xc3\xf95\x0b\x1ad\xdb6#A\x18\x06\x94\x08\x8e\xe3@lH\x08B\x08\xd0E\xae\xdd\n\xb2\xe8g\x7f\x00\xf5\xd7\x80\xc5\x02PV\x8c\xdc\xba\x92\xa1\xde\xd7\x19\x0cQ\xbcX\xf4\x0ds\x00IJ\x81\x86=\x8biN\x18\xdb\xc1\x92\x10c\xc0]\xe9_\x86\x98\xe00\xe7\xae\xd9\xef\x11\xc6\xe1\xb6Dd`H\n\n\xf4\xd7\xc5|a\xd8\x8cy\xa2u\x1c\xe1Z\x10\x0b\xf5\x1c\x9b\xbd\x9c\x90s\xa2qv\x7f`.z\x80\xea\"/\xa8=\xd1\xb5t}\xc4\xe8n\x15\xa6\x14&S\xe0\x9c\xb1\x10]>\xd2aW\xa0Q\xb6\xe9\x0eA\xb7G(\xa8{\x869\x1cZ=\xd6\xb3I\xc0\xd8\x1e\x0f\xfb\xb0\xdf\x11\xb01Bs\x87iW`o\xf6M'5\xe6\xfd> \xcd\x1c\xafQ\x03\xea\xf7\xc7\xec\xcb\n\x88r\xd3\x1a\"\x17\xb4)\x89\x1a\x0f\x1c\x87u\xe1\x1c\x85\x12\x1a\xe8\xb8\x88\x03n\xedd\x85\\\n\xb6\x18,\x16\x0b\x04\xc2(\x15\xa0\xd1\xc2]X \x8eq\xb9\xc5\xc2As\x10H\xf5\x10w\xe1ro'\xc3a\\_\xb1/\x80\xd5-AZkK\xad\x8e<\xe6\xb6\xf3\xb0,\xde\x91ZPH\x83\x90\x8ap\xd4B\xc8\x85$\x15\xe1\xb0\x85\x90\x0bP*\xc2A\x0b!\x17\xaeT\x84V\x0b!\x17\xbcT\x84\xfd\x16B.\x94\xa9\x08\xcd\x16B.\xb0\xa9\x08{-\x84\\\x98S\x11\x1a-\x84\xdc\x0cY\x11\xea\x96\x9c\x90\x0b\x81\xe6K\xad\x8e\x828\xca\xb6\x80\xa8&\x86\xdc\xa7-<\xaa\x89!\x17j\x0b\x96jb\xc8\x8d\xdaB\xa7\x9a\x18r\xa5\xb6@\xaa&\x86\xdc\xa9-\xac\xaa\x89!\x97j\x0b\xb2jb\xc8\xad\xdaB\xae\x9a\x18r\xad\xd6\x00\xact/\x9e\x92\x0f\xc7\xe6K\x8d\x88\xc8x\x02.8\x9b/\xb5&>\xe3\xf1\\\xa86_ju\xb4\xc6\xc3\xb9\xc0m\xbe\x14A\xb90n\xbe\xac\x824\x1e\xcc\x05u\xf3\xa5F\xc5u< \x17\xe2e\x92\xd7Q\x1e\x8f\xe7\x02\xbe\xba\n\x01\x01\x17\xfeU\xba/\x02<\x9e\x00\n\x06+\xc7\x80\xe0\xect9_\x16+\xe4\xc8\x8eQ\x90\xf2\x14D!l\xe3l\xc2\x03\xda\x01D\x98\xf3\xa5\x00\x0c\xc5\x9b\xb5\xa2D$|\xf49_je\x00\n\xe1\xf9X4s\xa3,\x1c\x85\xd0|d:_VA\x00\x87\xe7\xe3\xd4Zz\x11 \x18\xb5\xce\x97U@\nt\x02 \x86\xadk\x11RA\x11me\xb8<\xd4\xe4I\xa0\xf8v\xbe\xd4\xea\x10\x176\x1f\x1b\xedfM\x11\xa1\xf9\xd8\xb7i\x88\x88\x86\x8f\x84\x9b1&\x8b\xe0\x80A \x88\x8b\xf3\x81C\x00\x07\xa2d\xa2\xb3\xc2DP\xcc\x9cu\xd8,l\x86\xc6U>\x82\xaeZ\x91\x87\xab\x10 \x10O/Eh(\xba\xae\xdb \xa0\x81b\xed\x8a\xa6\x0e\xb7\x81\x81\x0d\x88\xbc\xb3a\x87\x08\xbe\x013\x02qxC$R2\x14\x957T\xe2\x0e\x06\xc4\xe8\x0d\x99hT\xe1#\xf6\xf9\xb2\x0e\xd79\x020r\xcf\xef\x97\x17s%t\x07\x9d,\xce\x7fn\xd6N\xec\xbb\xd7rd3\xf3\x8a\xb9\x11\x18\x8a%71\x17\xf0zn\x16sl \x14Cn\xe6.\xd0\xd5\xe4-\xe6W#(v\xdc\xcc^\x80\xe5\xacx6\xdc\xac_\x00\x8bY\\\xcc\xa8,\xa7Xq1A\x01%\xc3\x021C\nE\xb1\xe5\xe2\x86R+U\xe8 Q\\\x0d\xa1\x18r\x81\x05)\x81\x9c#\x81\xa1Xr\xa1\x07\xe1[y8\xd1\xe2\x7f\x05\x86b \x05'\x05E\x0bC\x88\x17;\xdc\x10\x1dI\x1b\xeb-]-C\x90\xecd+h\x92l\xd4\xcax$f\xcc.\x8fH\xb2a+\xe3\xa1\x981\xbbt\"\xc9\x06\xad\x8c\x07b\xc6\xec\xb2\x8a$\xb3Z\x19[b\xc6\xec\x92\x8b$\xeb\xb72\xee\x8b\x19\xb3\xcb1\x92\xcclel\x8a\x19\xb3K5\x92\xac\xd7\xca\xb8'f\xcc.\xe3H2\xa3\x95\xb1!f\xcc.\xf1\x88\xae$\xed 5\x82d\xdc\x96' Ie\x9d\xa4F\xc8\x98\xc3\x1d\xa5J%\xb41\x1f\xca\x99\xc3\x9d\xa5J5\xb41\x1f\xc8\x99\xc3\x1d\xa6JE\xb41\xb7\xe4\xcc\xe1NS\xa5*\xda\x98\xf7\xe5\xcc\xe1\x8eS\xa52\xda\x98\x9br\xe6p\xe7\xa9R\x1dm\xcc{r\xe6p\x07\xaaR!m\xcc\x0d9s\xb8\x13\x95\x81\x9e\x98w\x05 Y\xcb\xa2\xc3e[HW#\n\x8e\xd0\xd2\x00\x0c\x17\xa9\\\x8d\x94=\x174\x02\x8b\"8~$\xd3;\xd2*\xd8(\x12X\xb2\xc0\x01%\x91\x10\x92V\xc0\x84\x95\xc0\xb2\x19\x8e0\xcb\x0c\x92\x94\xb7\x94\xaf \xe4\xac\xd3MR\xceT\x84\x08,\xc9\xe0\x18\x94\xc9NIk\x00\"Q 9\x00\x07\xa5dJK\xae|&4\x05V\x89p\x94J%\xc1\x14\xda!\xadC\x10\xb6Ry\xb3\xf6~@\x06\x9c\xc0\xbaP\x18\xc7V\xa96i\x0d-\xcc\x05\x81-\x95\x98\x93\xf2'q\x82Z\x84i\xbc\x9a\x89B \xbddci\xae\x1a\x85\xb0z\xa9\x12Y/\xd9\xe0ZZ\x93 \xce^\xaa\x84\xdaK6\xda\x96\xd6$\x08\xbc\x97*\xb1\xf7\x92\x0d\xbf\xa55 \"\xf1\xa5J0\xbed\xe3qiM\x82\xd0|\xa9\x12\x9d/\xd9\x00]Z\x93 V_\xaa\x84\xebK6b\x97\xd6$\x08\xde\x97*\xf1\xfb\x92\x0d\xe1\xa55 \xa2\xf9\xa5J@\xbfdcziMpdBl\xf6\xb5\x8fA\x92\x9e\xab\x16\xef\x13\xbb\x83\n\xb5\x89{\xaf\xda\x02\x80\xd8NT\xa8M\xdc\x83\xd5V\x04\xc4\xfe\xa3Bm\xe2^\xac\xb6D 6,\x15j\x13\xf7d\xb55\x03\xb1\xc3\xa9P\x9b\xb87\xab-\"\x88-Q\x85\xda\xc4=ZmUA\xec\xa1*\xd4&\xee\xd5j\xcb\x0cb\xd3U\xa16q\xcfV[wT;l\xe2\xaajDQO\x15\x14\x01\xdbo\x05^\xca\x8c\xe3\x03\xed\xcc\x15\xd0zsN\xcc\xad\x810<\xf9\xad\xbb\x82\xa0\xd8\xbd\x133,\xcb\x19n\xfc\xc6^\x81^\x86X\"\\^\xcap\xe27\xfd\nl\xb1\xc7 \xe6U\x96\x93\xdc\xf8-AR'm\x0c)\x14-$\xb0mX\xd0\x14{\x80b\x9ee9\xc5\x0d\xdaT$%h\xe3I\xa1(\xce\xd0\xc6#\xe1\xb0\x91\xe0\x05\xbd,\x84\xe2 \x9f\xbc\xcb\x08\xaa\xcdI1\xcb\x1a\xc1\xb97\xbbsYjK\xca\x0d\xe2\xc4\xefjR:\x92\xf2#0\x0cW~\xdf\x93PQ\xbec\xd6\xa2\xc6\x02Cq\x85vF\xcbN!g\x08\xf1\x02\xb6M\xc96\xb5p$A\x14_hg\xb5 \xec\x8dd\xcd\x98\x97R\x9c\xa0]WB?s\xbc\x968x\x03ax\xf2\xdb\xb2\x05\x81\x9c\x1d\xcf \xda\xb2%U#\xe7G`h\xed\x01\x9b\xba\x04E\xb5\xaf\xdb\xc2\xb8\x86Q\xbc\xa1\x9d\xdf\x82\x88\xd8\xfc\x15s&A\xb4\xaf\x03\x9b\xc3\x14I\x8b+Q(\x8a3\xb4\x81L\xd1\xb4\x0d\xc74\x8c\x96\x1a\xd8e\xa6\x88\xa43$\x81a\xb8\xf2\xfb\xd0\xa5\x07-\x15b\x02\x12T\xf0\x05\xd2&\xc2\x08\xa18\xa6#\xe5.c,\x0e\x19\xc8#=R\xf6l\xe0\x00U\"\x8a!\xeaC@\xd2\x1a\xa8H\x02b/\n*\xca3CR\xe6Dh\x01\xb1\x16E\x19\xf5\x01#)s\xca 9\xf6\xa2\xb0\x839\x8f\xa4\xa0}y=\x928\xa4>\xc4$\xad\x84\x8a\x19x\xf6\xe2\xc0\x849\xf3\xa4\xd0\x92\x96\xaa\xc4\x91\nyP\xaa\xbd\xb3\x11\xb37_\x898t!\x8eVI\xeb`\x02\x18\xb8\xdf\xc1\xb1Ly\x16Kn\x0f9kQpC\x1d\xdcR\xb1\x85\xbc\x1aQ\xb4C\x9d\xf5j7\x059\x07\xf0\xd5\x88\xc3\x9f\xeax\x98\xbcw\xcb\x99\x0b\xe3!\xfa0\x99\x82\xae\xe4\x15\x89\x03\xa4\xf2\x00\x9a\xb4\x06\"L\xe2Y\x8b#&\xf2\xb4Z\xbb\x19\x889\x1e\xaaD\x18B-\xdb\xf9KY\x8bc*\xea0\x9c\x82 \xa4\xd5\x88\x83,\xf6\xfc\\{ML\xa8\xc5W&\x8e\xba\xe8Sw\xd2\xaa\xf8\xd8\x0b\xe8\x84\xc20\x8c9\xa9\xa7R\x93\xdc\x85\xc5q\x19{\xbcO\xa5\xae\xb6 K\x18\xa8Q\x87\x02Uj\x92\x07&\x92\xc8\xadu\x17\x99\xc0\x08*\x00\xf7\x94#[?\x08\xbe\xdf\x1a\xd9F]\xd4\xedY\xdc{j#\xbb\xd7\x94C\xc5f]\xcc\xbfY7\xb2\xfbu)\xffj\xdd\xc8\xb6\xeaR\xfe\xdd\xba\x91=\xa8K\xf9\x97\xebF\xf6\xb0\xa9\x97\x7f\xbbn\x84\xeb\x06k\x18-R\xae\xd5\xd8\xa0\xcb\xc1\xa6\xe3\x1e\x03\x820&\x8d\x01\x94\x80\xfb4\x04\xd0\x04\xb6h\x08\xa0\x0e<\xa0!\x80N\xf0\x90\x91\x05PL\xdc(&\xce\x06\x16N3\xb1\xc1\x00@\xd5\xc4=\x16\x05\x81L\x06\x04('\xee3\x18@;\xb1\xc5`\x00\xf5\xc4\x03\x06\x03\xe8'\x1e\xb2\xf2\x00\n\x9a7\n\x9a\x87i\x1a\xfa\x9c\x86\xe6\x06\x8b\x00U4\xefq0\x08e\xb2(@I\xf3>\x0b\x02\xb44\xb7X\x10\xa0\xa6\xf9\x80\x05\x01z\x9a\x0f9\x99\x00E\xa5\x8d\xa2\xd20\xe2\xb4\x94\x1aT1\xa8\xa2\xb4Gc \x88IA\x00\xe5\xa4}\n\x01h&\xb5(\x04\xa0\x96t@!\x00\x9d\xa4CZ\x0e@!\x1bF!\x93\x16?\xda@\x1ab\x89@\xbdm\x00\xbdq\x84\x10\x1d\xafL\x96\x0cP\xf0\x86W0K\x05(}\xc3+\x9d\xa5\x02\x0c\xb1\xe1\x0d\xc1R\x01\xc6\xd9\x00\xc6\xe1\x1a\x06Xl\xc5\xce\x125\x11<6\xae\xc0Y\x83!\x02-\xb6\x82\xa6\x12\x96\x10\xa2\x03\xa6\x17\x86\x0c\xb0\xd8\n\x98q\x18*\xc0b+`\x12b\xa8\x00\x8b\xad\x80y\x89\xa1\x02,\xb6\x82\xa6*\xb6a\xc0\xc7\x85l\xfd\xe0\xdb\xf1\xd2\x0bX\xdb\xf8\xb6Q\x95@\x06\xf0\xed^]\x0c\x95\x9aU)\xf0\x95'\xbb_\x15\x02\x9fU\xb2\xad\xaa\x10\xf8Z\x92=\xa8\n\x81\xaf-\xd9\xc3\xbaN\xa0\xa1\xb8j(\x18\xbf\xf8\xd8\xa0\x8a\xc1&\xe3\x1e\x8d\x81 &\x05\x01\x1a\x8f\xfb\x14\x02\xd0\x00\xb6(\x04\xa0\x06<\xa0\x10\x80.\xf0\x90\x96\x03PH\\+\x04\xec\x9b~l\xd0\xe5\xa0J\xe2\x1e\x03\x820&\x8d\x01\x94\x12\xf7i\x08\xa0\x95\xd8\xa2!\x80Z\xe2\x01\x0d\x01\xf4\x12\x0f\x19Y\x00\xc5\xcck\xc5\xc0\xf3\x8c?7\x18\x00\xa8\x9ay\x8fEA \x93\x01\x01\xca\x99\xf7\x19\x0c\xa0\x9d\xb9\xc5`\x00\xf5\xcc\x07\x0c\x06\xd0\xcf|\xc8\xca\x03((\xad\x15\x04\xc4)~j\x90\xa5\xa0j\xd2\x1e\x05\x81\x10&\x89\x00\x94\x92\xf6I\x00\xa0\x91\xd4\"\x01\x80:\xd2\x01 \x00t\x91\x0e)\x19\x00ElhEL\xe4n\xb3\x01\x143Qp\xa4\x0d\xaf-\x96\x0c\xa2\xe248i\xf5\xb4\x0d\xa7\xd4I\xab\xe7m8=OZ=q\xc3\xa9~\xd2\xea\x99\x1b\xde\x1al\x83\x00\x0b\xad\x98Q\xbf\"\x81\x87\xbc\x154 \xd0$\xa0\x85V\xc0\xc4\xc0\x90AT\xfc\\A\x13\x01\x16Z\xf1\xb3\x07M\x03Xh\xc5\xcf'4\x0d`\xa1\x15?\xc3\xd04\x80\x85V\xc0\x9c\xc34(\xb7P\xfb[-\xe9\xd7\nFv\xfer\xce2\x96\x01\xf2-d\xa9 \xe5BA \x84I\"\xc0\xc4\x0b \x00s/$\x00L\xbf\x90\x000\x03C\xc9\x00&a\x08\x84(\x0f\xc3A\x04\xa9\x18\x1e\x07\xc1L\x0e\x06&d8\x14\x98\x93\xe1P`Z\x86C\x81\x99\x19^.09C\xc2D\xf9\x19\x1e#H\xd1\x00@\x08g\xf280Q\xc3\xc3\xc0\\\x0d\x0f\x03\xd35<\x0c\xcc\xd8\x00\xb2\x81I\x1b\x12'\xcc\xdb\x00 A\xea\x06BB@\x13\x00\x82 \x1c\x00\x07\xe6p\x00\x1c\x98\xc6\x01p`&\x07\x92\x0fL\xe6\x90@8\x9f\xc3\"\x04)\x1d\x0e\x06\xa1L\x16\x05&vX\x10\x98\xdbaA`z\x87\x05\x81\x19\x1eN&0\xc9\xc3)\xaa=\xcf\x03kN1\xd5\x03\xeaS-\xdb\x03)Y)\xe1\x03)^)\xe7\x03\x19C)\xed\x03\x19H)\xf3\x03\x1aM-\xf9C\x92*\xe6\x7f8\x92cR@<1D\x0b\x91\xc2\xd3\x9aJ\"\x88#T\xcd\x05q\x84\xaa\xe9 \x8eP5#\xc4\xb7Q9)\xa4\xe5\xdfs\x8f\xe1\xbc\x10Q(H\x0d\x91\x08\x08`\x12\x000AD\x94\x839\"\xa2\x1cL\x13\x11\xe5`\xa6\x88\xac\x1fL\x165\x00Q\xbe\x88E\x08RF\x1c\x0cB\x99,\nL\x1c\xb1 0w\xc4\x82\xc0\xf4\x11\x0b\x023H\x9cL`\x12\x89@\x89\xf2H\x1cD\x90J\xe2q\x10\xcc\xe4``B\x89C\x819%\x0e\x05\xa6\x958\x14\x98Y\xe2\xe5\x02\x93K\x04L\x98_\xe21\x82\x14\x13\x00\x84p&\x8f\x03\x13M<\x0c\xcc5\xf100\xdd\xc4\xc3\xc0\x8c\x13 \x1b\x98t\"pp\xde\x89\x01\x08RO,\n\x02\x99\x0c\x08L@1\x180\x07\xc5`\xc04\x14\x83\x013Q\xac<`2\x8aUPk>\nT\x98ZJ\n\xd2\xa2RV\n\xd0\xacJb\nP\xb6Jn\n\xd0\xbfJz\n0\x89J\x86\n\xb2\x92R\x92\x8a T\xcbS\xb1\x04G\xa4\xaa8R\x80\x12\"\x04\xe7(\x85\x84\x15K\xa6\x98\xb3b\xc9\x14\xd3V,\x99b\xe6\x8ak\x9b(y\xa5\x90\xbdR\xf8&Kd\xeb\x9a_\xc5fPF\xab)\x14%\xb4\x08\x04\x040 \x00\x9c\xcej\xca\xe1lVS\x0e'\xb3\x9ar8\x97E\xd4\x0f\xa7\xb2|f\xad\xc0\"\x0c\x16!Jd\xb10\x08e\xb2(8\x8d\xe5\xf3\xb1=\x0b\xb2X\x10\x9c\xc4\xf2\xf9\x98\x9d\x05\x0d9\x99\xe0\x14V\x83\x12f\xb0X\x88(\x81\xc5\xe1 \x98\xc9\xc1\xe0\xf4\x15\x8b\x82\xb3W,\nN^\xb1(8w\xc5\xc9\x05\xa7\xae\x1a\x988s\xc5aD\x89+\x1e\x08\xe1L\x1e\x07\xa7\xad8\x18\x9c\xb5\xe2`p\xd2\x8a\x83\xc19+^68e\xd5\xe0\x04\x19+\x1a JX1(\x08d2 8]Ec\xe0l\x15\x8d\x81\x93U4\x06\xceU1\xf2\xc0\xa9*FA\n\x99*Hc\xaa\x89*@\x8f\x8ay*^\xb9ji*^\xe1jY*\xde\x08jI*\xde0j9*\xc0X\x8a)\xaa\x86R5C\xc5P\x1c\x95\xa0bi!R\x88\x12\x9c\xae\x94\xd2S\x0c\x9drv\x8a\xa1SNN1t\xca\xb9)\xb6}\xea\xa9)\xbf\x8c\xd4\xa0\xccT]&JL5\x00\xa8\xdcl\xca\xe1\xb4T]\x0cg\xa5\xeab8)U\x17\xc39\xa9\xa6n8%\xe5\xd3k\x04\x16`0\x00QB\xca\xe7\xc3\x7f\x16d2 8\x1d\xe5sq=\x8b\xb1\x18\x0c\x9c\x8c\xf2\xb9\x88\x9d\xc5\x0cYy\xe0TT\x0d\x12f\xa2\x18\x84(\x11\xc5\xc2 \x94\xc9\xa2\xe04\x14\x03\x82\xb3P\x0c\x08NB1 8\x07\xc5\xca\x04\xa7\xa0j\x948\x03\xc5BD (\x0e\x07\xc1L\x0e\x06\xa7\x9fX\x14\x9c}bQp\xf2\x89E\xc1\xb9'N.8\xf5T\xc3\x04\x99'\xaa\\\x94x\xa2A\x10\xc6\xa41p\xda\x89\x82\xc0Y'\n\x02'\x9d(\x08\x9cs\xa2e\x81SN\xb4b\xda3N\x80\xa2\x14\x13N\xbc\xf6\xd4\xf2M\x9cF\x95\xd2M\x9c\x92\x95\xb2M\x9c\xde\x95\x92M\x9c)\x94rM\xbcu\xd4RM5\x9db\xa6\x89\xc6\x1f\x93hb(\x01B\x88\x0e\x9a{T\xd2L4\x95j\x96\x89\xa6RM2\xd1T\xaa9&\xa6]\xa7\xa5\x98\x04\xd9$\\\x85SP6\xa9)\x14e\x93\x08\x04\x040 \x00\x9cMj\xca\xe1lRS\x0eg\x93\x9ar8\x9bD\xd4\x0fg\x930\x13\xd7\xb3\x08\x83E\x88\xb2I,\x0cB\x99,\n\xce&a>\x16gA\x16\x0b\x82\xb3I\x98\x8f\xb2Y\xd0\x90\x93 \xce&5(a6\x89\x85\x88\xb2I\x1c\x0e\x82\x99\x1c\x0c\xce&\xb1(8\x9b\xc4\xa2\xe0l\x12\x8b\x82\xb3I\x9c\\p6\xa9\x81\x89\xb3I\x1cF\x94M\xe2\x81\x10\xce\xe4qp6\x89\x83\xc1\xd9$\x0e\x06g\x938\x18\x9cM\xe2e\x83\xb3I\x0dN\x90M\xa2\x01\xa2l\x12\x83\x82@&\x03\x82\xb3I4\x06\xce&\xd1\x188\x9bDc\xe0l\x12#\x0f\x9cMb\x14\xa4\x90M\x824\xa6\x9aM\x02\xf4\xa8\x98M\xe2\x95\xab\x96M\xe2\x15\xae\x96M\xe2\x8d\xa0\x96M\xe2\x0d\xa3\x96M\x02\x8c\xa5\x98Mj(U\xb3I\x0c\xc5Q\xd9$\x96\x16\"\x85(\xc1\xe9J)\x9b\xc4\xd0)g\x93\x18:\xe5l\x12C\xa7\x9cMb\xdb\xa7\x9eM\xc2eP\x06e\x93\xea2Q6\xa9\x01@\xe5fS\x0eg\x93\xeab8\x9bT\x17\xc3\xd9\xa4\xba\x18\xce&5u\xc3\xd9$L\xaf\x03X\x80\xc1\x00D\xd9$\xcc\x07\xf9,\xc8d@p6 s\xf1;\x8b\xb1\x18\x0c\x9cM\xc2\\l\xceb\x86\xac{U\x1fl?w\x15\x1fV\x00w\x17\x1f\xd4\x00w\x19\x1fR\x01w\x1b\x1f\xd2\x01w\x1d\x1fR\x02w\x1f\x1f\xd2\x02w!\x1fT\x03}\xe7\x1e\xd6\x01}\xe9\x1eT\x00}\xeb\x1ej=}\xed\x1ej:}\xef\x1ej7}\xf1\x1ej4}\xf3\xbelq\xfb\xc1\xcb\x033f\x90\x17UD\xa3\x1d\x05\x01\x07<\x12\x01\x8ey$\x00\x1c\xf6H\x008\xf2\x91\x00p\xf0\xa3d\x00\xc7?\xf6\x00\xabh\x08\xe4q\xe0(\xc8\xc1\xc0\x81\x90C\x81c!\x87\x02\x87C\x0e\x05\x8e\x88\xbc\\\xe0\xa0H\xc0\xe4\xe3\"\x00\x04\x87F\x1e\x07\x8e\x8e<\x0c\x1c y\x188F\xf20p\x98\x04d\x03GJ\x02\xd72XBHp\xbc\x04\x80\xe0\x90 \xe0\xc0Q\x13\xc0\x81\x03'\x80\x03\xc7NH>p\xf8$\x80\xb2\x11\x94\x83\x81\x83(\x8b\x02\xc7Q\x16\x04\x0e\xa5,\x08\x1cMY\x108\xa0r2)l5\xaa\x9ef\x0f\xc8\x83W\xc2\x81\x96@\xc0\xe3l\x03\x80\x87\xd9\xa6\x1c\x1ee\x9brx\x90m\xca\xe11\x96\xa8\x1f\x1eb\xe9\xfd[\xe1\x08\xcb\xc2\xe0\x01\x96A\xc1\xe3+\x03\x82\x87W\x06\x04\x8f\xae\x0c\x08\x1e\\Y\x99\xe0\xb1\xd5gF\x1b\xd1\xd0\xca\xe1\xe0\x91\x95\x85\xc1\x03+\x8b\x82\xc7U\x16\x05\x0f\xab,\n\x1eU9\xb9\xe0A\xd5g\x07\x18\xd1\x98\xca\x03\xe1!\x95\xc3\xc1#*\x07\x83\x07T\x0e\x06\x8f\xa7\x1c\x0c\x1eNy\xd9\xe0\xd1\xd4\xa7\xc6\x1a\xd1`\xca\xa0\xe0\xb1\x94\x06\xc1C)\x8d\x81GR\x1a\x03\x0f\xa44\x06\x1eG\x19y\x14\x86Q\xc1\x88\x89\xeb\xe1F4b\x12\x08x\xc4l\x00\xf0\x88\xd9\x94\xc3#fS\x0e\x8f\x98M9\x96\xdc\xca\x05\xfajr\xc1\xa8\x10\xa6\x95C\xdb7\x12Kf\xae\x1d?\xb4\xf2\x92}I5\xe3\xf3\x80\x0e)\xda\xa5\x9a\x8b\x9c0\xb6S/\x0c\xce\xb1\x17 -]\xc5\xe1z\xb9\xa2 \xd6\x81\x8b\xe2\xac\x98\xa3\xa9K\x18\xc7\x0b51M\x10\x06Ha\xe9s\x00d\xce\xd6Q'\x88\x0d\x91)H\x0e\x91\xe5\xc2+H\xaf\xb0p+\x9b\xe4\x9f\xd4\"\x9eJ\xa5A<\x95B{\xc4\xa2\xe3\x93D\xe7\xa9TD\xe7\xa9\n\xd1)\x8a\xb4D\xd9\xd8[\x06\xe7YT\xc0\x94\xc7dy>Q2\x00\x87\x048(HQ\xac`\xed\x03#E\xed9bA\x18\x08(\x0b\x83)\xc5Q\x90G\xc1\xfbR\\y\x83DF\xbf]D\xffh aaZ-G#`a0$\x0c\x0d\xaa,\x9c\x7f!~\x11\xc6\xfe\xb9cG^jc\xef\x11\xb1P\xccBq\xb8E\xb1c'\x1cr\xcd\"\xd7Q\x04#\x03\x16y\xd2p\x98\x12\xce\xa1\xd4\x12\x00-n\x0c\x00\x16\xb7\x07\x00+\x0c*\xcan\xda\xb8\x98Z;9\xb0\xa4\x99\x1cV\xd2J\x0e\xab\xd0HA{8\xb7\x92\xb5\xe7\x08\x1f\xe4\xb1\x92\xf6pX`8]h\x833\xe6\xc1\n\xd9n>\xab/\xc2 \x8b\xf5\x1e\xd19\x1fR/4\x8b\xa5K\xd6s\x80\x94\x0f\xa1\x17\x06Ql\xf2\xc5=\xa2\xb8\x07\x05\xea\x0b\x93@\x18@\x90\xbe\xe8S\x00\x88\x85E\"\xf8\xe2\x01Q\xdc\x1d\x0d\x01\x06C\x12Q\x00\xda{\xc3\x81\xd5\xbd\x16$\"\xf5g\x9d\xae\xc5\x02\x005a\x04\x9a\x01d\x07\x1a\x01\x99\x82F\x08\xacA\x83`\x83\xb0\x18\xd0&\x0c\x080\x0b\x8d\x10X\x86\x01\x15\x18\x05\xeb(\x8cU\x99\xc9|\xa1\xc5\xfcV\x83q\xb4\xa4\xbd\xfc6s\xf9m\xd6\xf2\x15\x8c\xe5\xb7\xdb\xcaW0\x95\xdff)_\xc1P\xfe\xb1v\x12\x98\x04\x0bM\x82[M\xc2\xd1\x92&\xc1m&\xc1m&\xc1\n&\xc1\xed&\xc1\n&\xc1m&\xc1\n&\xc1\x80I(\x8c\x8f\xecd\x1d\xa3C\xd3O\xb2\xce\x03b\xb2r\n\xd8\x17\x01\x03;\x8e\xc3-\x01\xedq<\xbd\xc0EAZLi\xc5\xcf\xe7Fs\"+m?\xcf\x98\xf86\xc6\x9acG\xe5\xe8\xb0\xb1c\xcf\x0e\xd2\xf3\xe69\x8dO\xe3u\xe0\xd8):\xe4\xc9\x81<5\x82\xce\x83p\x1b\xdb\xd1$\xdc\xa0x\x91\x7f\x9c\xcfs]\x14Lr\xa9\xea\x87\x08c/J\xbcDa\xcc9\xc0\xeaH\x94\xd5\xcb`[4L\xa3EJ\xae\xe3\xbd'\xea\xb9\x1e\x88UU\x9d\x11\x9c\xaem\x05u+\x0c\xf1\x95\xc2|u\x13\xf8\xc7X\xc0W1\x80\xff<\xfa\xf7\x8fT\xbf\xff\xdd\xb4/Q4VW4>F\xd1XE\xd1\xf8y\x14\x8d\x8fT4~\x8a\xa2)\x96U\xb9\xe6\x84Aj{\x01\x8a\x0f\xf5\xa3\xfdy\xe2\xc4!\xc64E\xb1h\xa6\xb7\x12\xecu\x1aN\xc8\x9d\x96\xec\x01\xa3\xddX\xcb\x1e\xf2t\x0c\x0cS\xb0\x86Y{\xe7<\x00bj\xec\xd9\x1buIARPX\x8d9\xf4\x94\x03\x15\x04V\x18M\xcaV\xf8'7\x02\xa0\x84\xdb\xe0\x1f\xdb\x04\xb1\xb4\xf8di\x01JXZ\x0cHK\x8b\x82\xbd\xe8\x10\x85\x89\x97'\x02\x17\xde\x0e\xb9\xff\xd7\xf3\xa30N\xed \x9d\xfcQ\x97\xd8\xf3$\xc4\xeb\x14\x11\x85\x19\xe9y\x8c\x9c\xf4G#\xdau\x88\xbf?\xd1Eg\xc4\xdf\x9f\x14\xcc}\xe0\x04\xcc\x1c\xe7\xcf\x94QAH\x15\x9f\xcc$\xf7\xff\x83\x04\x17\xc9\x88\xff\\\x19)\x01\xb6\x89\x16\x84\xb1o\xb3#u\xf6\x88F\x16\xa370\xa0\xd3\xb0(\xa6#\xc9(>>'X\x0b\xc5\x07J\"\xb9\xe0\x90\x8a\x13\x8d\x85e\xd2)\x88\xa7\xe0m\x8d\xcclt!\x14\x19\nCx\x89\xfd#\x05\x96\xca\xa6jfp\xe6\xe6e\xc3\xbcl\x14f\xa3\xcd\xed\x04\x1d6(N=\xc7\xc6e:;{\xc6\xef\x91l4\xdfsY\xa8\xef\xb9.\xe6\x80i\x18\xb1\xc04\x8c\xb8\xaaS\x9f\xab9\x0fp\x14\x0c~\x00\x9a\x91\xf9\x8ezK\x00\xb4\xb01\x00\x16n\x0f$B\xd1$\x856)8q\xd9P^o\x92vr`q39\xa8\xa0\x95\"\xbb\x1d\xed\xf8e{\xf01\xed\xe1\xc0\xe2\xf6pPA{\xf8\xfa\xcb\xf6PX\xd7\xf3\x0fad;^\xba?7\xb8\xa23\xf6\x01\xf41\xfa\xecq\xf1\xfdym\x8b\xe6\x0f^\x99\x15/f\x90\x92w\xa7kXI\x07ez\xf1\x82IK9'\x86\xbc\xd6J\xfc\xae\xc5\x13\xdaN\xeamP\x03\x19M\x94d\x0c\xd7\xa9\\\xc8p\xcd\xec\x9e-q\xb8=\xe3\x9e@\x82\xe7\xcf\xbf\xa3\xbe\x14\xea\x15\x18|\x95-\x03\xf3S\x11\x9dn\xfe\x9f\x1a\xa8\xab\xa9\xedXQ\x9b\nKC\x95\xf5\x9e\x89Py\xb3\xda@y\x1b\xd9\x16\x18\xdf\xa7\x05\xcd\x06{^+\xa4w\x16R\x98 _\x7f\xb6\xef\xe1/\xe3p{\xd0\xfc\xf0Q\x0b\x93\x9dVd\x0f\xfd0LW^\xb0<_\xc6\xf6>ql\x8c\xea\xb6\xcdm\xe7aa;H\xdbx\x897\xf7p\xd6\xf2r\xc1+)\xa24\x93of\xe5?a;E\xdf~\xd4\x7f\x9a\x88\x9e\x03\x1a\xe5Xu\xba=A\xa7:\x02z:\xe4\xac\xa5\x16^\xdb`\xd7\x89\xe1.\x9b\xeb$\xb7\xc0\x8fFW\xb7HM\x11O\x81:\xcaaI\xc4\xac;\xe6Yu\xc7\x00#\x0d\xdb\xf1\x12\xfd\x7f\xc5A\xbc\xe0\x18\x1f\xe1\xd1OEI\x9d\xa5\x80\x88L \xf2\x9a\xb2\xb4\xcdwz\x90\xeb\xf4\x84\x06o\xf7\x1f\xc0\x17\xb3\x87L0\x1dzAZ\x8fH\xce:N\xc2\xf8\xbc|H#\x93\x95\xed\x86[\x0d\x02N\xea\xc5b\x8c\xb0\x9d\x89\x05\x99\xdd\xc6\xb8\xd3\xb5\x92\x8e\xb3\x9e{\x8e6G\x8f\x1e\x8a\x7f\xec\x1a\x03\xeb\xac;\xea\x9fu\xfb\xfd3\xe3\xa7\xc9\x91x\xb1\x88\xe7\xf6\"\xcd\x04\x0d\x83\x14\x05\xe9\xf9_\xfe\xd2\xf8\x7f\xb8\xd3\n\xe4\xb9\xde\xd1;\xc6 \xdauz\xd1\xaeC\x9e\xf7\xeb\xfd4Q\x86\xe5\x07;c\xdb\xf5\xd6\xc9\xb9\x17\xacP\xec\xa5\x93f\xd2\xe4\xd6\xd1\x93\"\xf3\x99\xe7e\xf4I\x11A\x1a\xba\xfeb\xb2ByN'\xff\xf91\xcf\x98\xee\xce5\xf9\x9cu\x846Ui$\x1a\xcd\xfd\xbb\xd0\xeb\x99\x18Ej_\x10d\xcc\x97\x9a\x1dx\xbe\x9d\xa23\xc1s\xa8/\x11\xa5\xc2\xd0\x89=\xc4IM\xdb\xec(\xd0\n\xa6\xa5~\xd4\xf4Ce\x17\x9d-2\xea\"\x83-\xea\xd5E=\xb6\xc8\xac\x8bL\xb6\xa8_\x17\xf5\xd9\"\xab.\xb2\xd8\xa2\xf1x\\\x17\x8e\xc7c\xa0\x98*\xe7\x00\xbe\xbdk\xa45\xfa\xc3\xfe\xc8\x1c\xf4\x87,\xaa\xf4\xf2\x1aY\xfe\xce\xc3\xbc\xd4\xb3q\x0d\xe3\xb3\x95\x8f\xda:HP\xc3(\xff\x8d\x86\x04(IQf\xa0h\xaf\x15\x11T\xdeM:!\xb3\xaf,\xc2Ej\xb05>\x10\xbf\x9e\x1b\xecB\xa2\xa4k6\xae \xda\x95\x01\xd6\x01c{G`\xcd#\xb0\xfd#\xb0\xd6\x11\xd8\x01\xa3\x17\xe8`\x7fA\x8f\xbd$\xd5b\x94 \xa1q\x08\xc4\x9a{\xf1\x1c\x99\xaf\xd6'94I\xf7\x18i\xe9>B\xc5\xd1*\xa1%\x8b\xed\xa5N\xf4sDm7u\x8f\xdbo\"9&(B\xb1\x9d\x86q\xce\x94\xe0at-A\xfb=\x7f\xd9\xf1\xfc\xe5\x81\x18\xd2\x9b\x9cG\xfe\xab\xeb%\x11\xb6\xf7\xe7s\x1c:\x0f\x02\x1d\x06\x0fI\xc7>\x94\xe7\xe1Mk\x88\\\x17\x9a\x02\xf8\x01k\"-\x95\xd5\x06\x0d\xb6\x0c\xa2\x9c\xf5\x0b\xa9\xc6\x03\xc7Y,\x9e_\xaamlG\x11\x8a\x05\n\xec\x0f\xf4hW\x1a\xf0\\\xef\xe4\x9b&\xa5\x0b\x9d\xeb\x9d^VH\xcd\xf0\xdecVRN\xcf\xf3p7\x01\x9f\xd2\x12\x84Qn\x1a-\xb5\x97Z\x82\x9cL\xeaCe4\x82ymH\xcdO\xb4\x05F;\xf2Y\xf6;%I\x18{\x993V\x99\x18\xaa\xcc\xf5\xe2\xa2\x9a2%:\xa98\x12%N\x88\xd7~0\x01\x9f\n\xc5\x7f\xba\xd8\xe4 \xe0F,\xeai\xfe\x8b\xe6\xa5\xc8O\xaaG\x95E\x0c=\x0b\x97\xb2\x7f\x8c\xea\x9f \x134\x8aB\xc4^\xc2E\x81\xbddR\x9b,\xef\xb9F\xb4\xeb$!\xf6\xdc\"\x1c\xb3\xc6g\x03\xebld\x9cu\xcd\x9f\x84*)\x9d\xb8\x99\xf5\xa9\x1b\x1e:\x1bj\x93\xca$\x8e\x18\xf5I'\xd4;V\xb4\x9b\xe4\xa5\x0b\xdb\xf7\xf0\xfe<\xb1\x83DKP\xec-&U\x1f\x9e\xf7\x0d\xcb\x10\xf2\xee\x06\xa1\xe6\xa2\xc4\xe9$\x91\x1d\x1cH\x03d\xfa>7j\xd5\x9f\x1b\x93\xe2?BV\x9dd\xb3\x84\x82\xa2\\\x85}^\xab\xfdD\xc2\xca\xb71u\xde\xa9_5t[\xcc\x04}]\x9f\xa8HK\xf4\xd1\xdc \x8eWVd\xc7\xb6\x8fR\x14\xff\xf1G6\x15\x90B\xf5\xa2]\xcd\xdf\x8av\x1d\x9db\xef\x87A\x98o\x10P\x82\x0ft]V\xdb\xc6C[\xad\x9a\x06\x1f\x0e\xfc\xca&\x9b\x04\xcch7\xa9\x0e>\x90\xfe`\xa9{\xb9\xc5\xdb\xc3\x82\xedq \xdc\xcd\xc8j(\xba\x02\xd1\x07\xfe\xaa\xeb:\xb3\x10\xe9\xb3\xc3a\xb3\x921\x99E\x8c1\xe6\x16;\x00\x04\x14\xad\xd3M\xedy\x1e8\xa0\xf8\xe9#\xceQ\x0eOV]\xfc\x9c\x8dC\x87\xc6\xdb\xfa\xfc\x90s\x04\xa3\xf3\x85\x17'\xa9\x16.\xf2\xf0\x83a\xdb\xd1;\xfa\x11\xbc\xbaebs\xd5/:9\xe7S\xa7\xf3*\xd7Y\xfc\"\xb3\xbe\xad\x999L\x1eSY\xfa\x8bj\xb5\xd9kV\x9b\x99\x9f\x00kd \x9b\xf3\xfb\x8f\x9a\xa5\xbf\x00\x13=U\x111\xb4.c{\x0f6\xab\xeb%Z\x18\xa1\xa0\x19n\x92\xb5\xef\xdb\xf1\xfe \x1a\xe13\xef\x16h\xa8fQL\x8a\x95'V\xd6\x1a\x95s\xd0\xc4\xf7\x82*\x82\xb5\xb2\xdf A\xd9\x1b\x83\xa3\x9f\xe0~c\x00\xcb\x7f\x83\xe980\xe6(\xd9\xcf\x8e\x01w\xb0=G\xf8\xe9\x1d\xef\xa4\xa9\xfe\xa8f\x95\x922C79,\x0fu\xbd\x1eG\xb9\xc30'\xcc\x1aJ\x02\x95\xfd\x91\x9a\xa1$\x9d[\xc0j\xd5g'J\x95Q\xadi\xeds4\xae\xe8C\x9a\x8f\xd2U\xe8\xca\xe6\xed\\\xcf\xf5\xd6\xe5H'f\xd0A\x16\xa8e\xe3\x05w\x03\x8c\x99\\L\xba\x0b\xe5\xd3ONC\xf5\x04\x9d\xed+\xf2v.\x16\x0b\xc5F\x86\xf9\xd2,3\x80\xe7\xb6\xf5\x97\x92$\xb2\xd3\xd5\x11\xd0?\xfepQ\x14#\xc7N\x11\xa5\xccAD\xf4\xacS{[n~\xbdq\x08\xbdc\x16\xab\x19\xfa\xb7'w\xd0\xc96\x8c]m\x1e#\xfb\xe1<\xffW\xb31\x96\x85c\xaa\xf1R\xb9\x19N\xec\xe8\x0f\x07\xa3h\xc7l\x81\xff\x07\x9a\xaf\x17\xed\xd8\xd3\x9d\xcal\xd8\xcd:,\xbc\xa6\xab\xd4p\xa6\x8b*r\xc8\x16\n\xb1\x17\xe5\xebR\x82\x81\xa9:\xe4<\xdfH\xf3?4\xe9\x90\xd1\xbeZp\xc7\xc8\xad\x18\xe0\xf7\xea\x00\x9f\x98\x95\x9e=\xb2\xe7\xa4\xab\xf6\xad\x19\x19\xcb\xb0m\xc4,5\xe0\xf8\xaab\x19\x85IJ\xbc\x8f\"3p\x7f\xec8c}\xc2\xae\x80\x87\xe6YO\xef\x9f\x19\xfd\xbe0\\\xa1\xb8\n\xa7\x1drN(\xea:\x81\x19(\xb3\n\x1f\xf5p\xf9h9\xd7\xac&\x17\x8em\x98\xbc&{V\xef\xcc\x18\x18g\xfd\x91\x82&\xd7j\x8a,\xaa:\x9e\x17(\xb1\x02\x9b\xd3\xd4\xa8\xc2\xdeE\x18\xa5\x88\x95kl\"\x13\xf1\x9a\xec\x8f\xcf\x06\xbd\xec\xff\xad\x8a,\xd8\xaa\xe92\xaf\xec$v\xa0\xd8j\x9cN\xd4\xa8B\x0dK\xc4:\xe6\xc0\xb0\x17\x0b^\x9d\xe3\xe1\x991\xb4\xcez\x96B\x17_\"5\xc7,\xaa:\x9e\x17(\xb1\x02\x9b\xd3\xd4\xa8\xc2>\xb2Sg\xc5\x88e\xe9\xc8tz\x9c\"G\xfaY\xaf7<3\xc6\n\x8a\xcc\xd9*\xa9\xb2\xa8\xec\x14n\xa0\xd4J\x8cNS\xa7J\x05\x19WF\xae\xb1n\xf4\x00\xb7\xcc\xa6\x1cc\xa4\xe6\x96\x19W%e\x16u\x9d\xc0\x0c\x94Y\x85\xcfi\xaaT\xe1\x1f\xe6\xb1^\xc2H\xa6\xbb\x96m\x0fym\x9agc\xfd\xcc\x18\x0c\xdb\x95Y\xf2U\xd2gQ\xdbi\xfc@\xc1\x15Y\x9d\xa6U\x95*\x88\xb0\xbe>\x15:\x98\xd0\xa2\xa2y\xf6\x07\xce\x14\x8d{\xc0\xab\xa5\xc4\x95(i\xb9\xa8\xefd\x96\x07Hzun\xa7\xe9ZR\x0b!\xa0\xb3B>J\xb8\xa4\x9c\x1aY\xa7[\xfe\xa0\xa5^\x8aQk\xaef\xe1\xe14kD\xb3\xd6*\x9eh^\x90Eq\xd4\xd6b\x1eI\xe7{T:\xb5oU%\xd8{M\n\xd2\x1d\xb9.b\xbc*\xb5\xe7\xa7\xad\x82\xa8\x9a\x8bex\xdd,b\xe3\x1b\xd8\xf3N\xedy\x07{l\x1a\x8d<\x89N\xf1b\x16,\xc7\xaf\xfe\x8a\xfa\xd8\\8\xb7bbv\xf2\x99\xcf\x96\xf5X[C\\\x85\x89\xecb\xdf\xbe`5\xa8WeF\xb4\xa3\xceK\x11)l\xc1\xfe\x1e\xbb\xbdW\x08Q\xfa\xf8\x81\xc9\x90\x81\xbeI\xae\xbe\xb5r\xaf\x1aLJhh\x97\xa28\xb0\xb1\xe6\x86N\"\x87\xe6^\xfdGy\x13\x8a\xb5+\xbd\xcdX\xbb\xa8U\xa5\xb5\x8f7\xa8\xa4)\xdc\x11\x12ik\x84h\xb2ALf\x14h\xd3\xf3\xb6 :\xa6\x01\x020%\x7f\xc4fR\x9f\x9e\xb3\x15\xaa\x939\x0fC\x13\xa3\x1dr\xd6)\xaa\xe0\xf50\x98\xbb\x81\xfc\x9d^\x0ci\xa7;O\x03r\x1c$\xc7\xe5>7.\xcfCw\xaf\xe5;\xb0u,r\xd2\x98\xf7?s \x82\x97\x9ez\x86\\/=P'\x16\xf4V\xfab#\x83T\x9a\"M'A\x189i\xb5\x9bkB\xb3W\x8c\x92(\x0c\x12\x94h^\x100f\x96\"\xb9\xee\xc8\x95[\x82\x9eXN\xa3\xa7u\xc6\xaa\x96,\xec\xf8#I\xedt\x9d\x80{\x0fOeJ<\\\x07n\xe8\xac}\x140\xb9]\xe3\xd8d\xf6X\xcf\xfeH\xaa\xce\xcf>1\x9f\x0f\xcd\xcf\x93UY\xef\xbe\x8e\xfc\xc9\xf36\xb78o\xf5?\xd1Zb<\xfd\xe3\x8f\xc2g\\o\xd3\xf5\xed\xf8\xc1\x0d\xb7\x01\xec]2\xca\x18\x05.\x8a\x91;+9\x80\x9b\x7fE\xa0\x93\xbf\xb9\xcd\xa1\x8f\xc75C-\x10\x9a\x91\xa7\x1c\xa8d\x9e\xd1\xef\xf7\xd1q\x9a\xe1\xf6\x9dT\x1aW\xa9\x85\x9dEThY\xc5t\xa2\x038\xad|g\xc9\xedg\x90\xdc>\x1c%\xf0h<_\xe8\xfd\x89\xe2\xbd'\x15\x89\x9a\xd6\x14\xa9\xf3\xe7h\x13}\xd8qd\xcc\x0d\xddy\x82d\xec\xce\x95\n1'T\xba:N\xd3\x8b\xc5BxbN\xb8\xd3\xaaeSW\xf3\x1b\x0e\xed|\xe4+\x0e\xdd\x93G!\xa9\x0ej6gl\x9b\xfd\xfa\x96\xb7TP\x15F1w\xa6\x0b\xee\xfb\xcc\x95\xef<\xa2)69\xb3\x9f\xca=\xce\xecwx\xe7\x93{\x98C\xab\xe0c\xb5\x8fV(H\n\xf1\xb3\xa0\x83z@\xfd\xa24\x06\xd5/\x89ae;\xd6\x8er\xcd\x15'\x18\x1at\xf3\x96\x86\x16\xban\xb1\xdc\xcf\xba\xddAr.y\xe5-W\xc5{\xc0\x9d\xd0\x05\xd6~2\xf4\xdf\xbb\xbe\xe7\xc4a\xfe\x80|iN\xe9!\xbb\xeaHN_g\xce\xe8\x0c\xd8\x13\xd6Y\x1f\xc8\xdcQ+\xd7y\x89\xf8\xc4S\xee)\xe5\xca\x138tJZj\xe8\x8ezc\x138\xed@n2\xf2\xc6&\x0d\xf8\xd1K=\x8c\xbd\xb5\xdf\xf9\x82\xe6g\xc4\x84/\xe9\x97L\xc4P\xb6\xd9\xd4\xeb\xc5\xed\x90\xdb\xdb+r \xc4+\x88\x88eT\x8f\\\xf3\x9bE6\x83\xdaG \x8ej\x83\xa7\x95\x98s\x1a\x96\xe0P\x13\x07\x93\x8bX'n\x9e\xbe^8i\xa7XQ\xba\xbf+\x1dLzr\x13\xbe\xe7\x92\xa7\x1a-\xb5\xe2\xb8\xb5U,,N\x88D[\x94T/`\xeat\x93a\xd6\xcb\xcf\xe6T\xa0\xe0\x85\xb9\xd5l\xd2\xf8p\xe5\xb3\xe5\x89J\xe2x\x7fq\xd1\"\x9bW\x9a1\xc1x\x8e\xa37\x91\xed\xbc_'\xa9\xb7\xd8W\xe3L\x8d}\xaa7\xfei\xce\xd0\xa2\xf4\xfaQ\xdbH.\xa6,3uD\x8f\xd1\x81\x1e\x03'\xf2,\xfdEs\x18\xb5\xce\xd9\x95\x8c\xa5\xa7O\xf3\x13\xa6g\xc2\x13\xa8T\xb1\xc0\x1fO\xe8\x11\x12-\xcc\xd1\"\x8c\x91 aI\xb5\x93\x8e\x9a\x88Dm5\xdb\x11G\xc8\xb5\xbcG\x01\x07r\xeb \xec<\x0e\xd3\xfc\x87\x8e\x91t\xbc`\xe1\x05^\x8a:\xd94n\xc7g\xc4%\xcf\xc9\xf1\x14\xcd{\x12\xb8\x04x\xb1\xf7i\x9d\x15\xff/\x0e\xbe\xe6\xf3b\x1aF\xe5\x9e\x039;\x0c\xd8{\xb1y\xa6\xa9\xf6\xf3S.\xa0\xff\xfb\xbf*\xf2\x07\xb4_\xc4\xb6\x8f\x92N\xd5\xb0C\x1a\x02\xf7\xa0\xf3R\xf4\xa3\x91\xae\xe3\x80t\x1a\xea\xf9\xbf\xff\xfd_\xcf\xccO\x14\xec\xe7&\xa5N\x93W\xc3\x9c\x02I7\xfb%\x0eq\xa2\xd9\x8e\x83\xa2\xb4\xda\xac)\x87dj\xf3g\x19#\x14<\x85g~\xf5\x83\xe0ED,\xdd!\xf2!K\xcc\xb1\x17<\xa0\xf8`\xe9/\x9a\x17\x86P\xba\x15 H1\xcbc\xb5\x9d\x95y8\xba\xab\xda\xdd \xcc\x93 u\xb8\xe1\x05\xdc\x92\xb2\x06\x9d\x81O\xcf3\xa7\x83\xce\xfaU\xb7\xba\x8b\xea\xeb\xdf$\xc7\xcf6(N\xbc0\xd0\xa2\xd8^\xfa\xf6\x81\xdc\xaa\xa8\x83K\xe4\xb3\xe9?\x9a\xea\x8f?|\x94$\xf6\x12==\x82:u\xde#\xe5&\x06\xfcn\x0f\xf9@\xd8\xcc\\\xa0E>q\xd8\xb4\xcb\xc5\xf4\x82\xc6\xfe\xdd\xf56\xc4\x8bE-\xcbY)\x9dmTb\xde\xc9\x171Mt\\m\x97\xba(\xfbS\x8b\xdb\x8fv\x9d~\x11\xf6\xb2\x8bN\xba\x9ay\x1a\xb4\x9d\xb5&\xaf'\xf5\xc8\x83\x9a\xec\x19A\x93?6h&\xfcH\xbc\x8c\xed\xbd|\x05\x9as\x89\xec\x18\x05\xe9s_e8a\n\x9d\xa7A\xf6WK|\xd1\xc5\xad~\xa9\x19\x8e\xee\x9f\xae\x97\xd8s\x8c\xdc\x7fU\xef\x9b\x08\xc2\xcc\xe5p\xb8En=[uM\x8e\x90y?\x00s\xb9\xc9b\x9aer\xd7\x9fx\x04\xdf&\xc7\x0e\x1c\x84\xd9Sa\x8b\x81> \x97_e\x01i\x12\xb9\n\x0b\x0e|u\xf6:]\x85\xb1\xf7\x88\xe8\xeb\xd8\x13z\xb4\xab\xb8T\x07=\xe5\xa7?y\xe1$\xf5\x16\x89\x86\x05\x0e\xed4\xff\xb6\x0cm>p/\x9e\xa1\xdf,\x0f\x0b\x0fc\xf8\xc8e\x86-w\xaa\x80\xfe\xd9\x1f\x8fu\xd4\x03\x92[T9\xc7Q\xcb\xb8D\xa7\x0d\x9f\xe4\x8aZ\xc0\xb8\xe8\xff\xc7\x0fN4\x83r\x1f\xbcxU\x15\xd7\xb13\xadv\xb8\x03\xe2\x0c\x07l\x0b\x18\xe4\xa4\xf9_F\xdd\x95Y\xec\"\xf3\x98\xb5\x83\xb9\x18P\x0e\x0e\xca\xa2\xd3\\3\x0f\x95s\xce}\x98\xb8\xf7Y\xf6B~w\x8ef\xcc\xa8V\x06-\x0f\x80\x13}E\xcf\xfe\xb4\x89-\xbc\xf5\x0bO*\x05\xeb\xa1\x9e\xfd\xa1X\xcf\xd7i\x1a\x06\xec\xdb}\xc2u\x9a\x0d.\xbc\x02\x0bx\xd7\x0b66\xf6\xdc\x03\xbfVIV\xf6\x03\xeat\xfbI\xc7\x98\xc0O\xdb\x0e\x03\xffu\x81\xb83Fe\xd0{\xc4\xc4\x9b\xa7\x18\xac\xea\x1e:\x7f\xbc\xa7\xcc\xd9\xca\x13\xbb\x8ba\xf6\xa7\xb3\x8e\xf1\x8f\xae\x9d\xda\xe7\x9eo/\xd1\xcbd\xb3\xfcy\xe7\xe3\xc9\xdcN\xd0\xa0\x7f\xf6\xdb\xaf7\xbdo\xfb\x8b\xfe\xfc\xcbn\xed<\xea\x9e\xfd\xeb\x9d\xee\\\x86\x9bw\xa6k\xba{\xcb\x9c\xed\xad\x8d\xe3;\x9b\xd9\xfdt;{5~t}\xc7\xbb\xfe\xf5[\xf4\xedw\xf7\xd5\xdc\\\x8e\xaf\xef\xa7\xcb\xd9\xab\xe9\xbe\xf8{\xfd\xf3\xf5\xab\xe9\xf2\xfar\xb7\xfd\xfa\xfb]x\xfd\xe6v|\xfd\xa0\xeff\xfb\xbe>\xfb\xb8\\\xde\xec\xfb\xfd\x9b\x8f\xf8\xfe\xdd\xfd\xb59\xfb\xa0\xafg\xf7_\xfb\xef\xee\x9d\xed\xfb\xfa\xe7\x07\xf3\xfd\xab\xe9\xf6\xfaU\x7f\x7f\xb3\xef\xefo\xee\x97\xeb\xd9\xbd\xb3\xcf0\xb3\x0f\xf9s\xeb\xe6\x1e'\xef>\xce\xd6\xef?N\xfb\xd7\x97\xb3\xf5\xfb\xcb\x9b\xfbw\x1fj|\x9aa\x9b\x9f\x1f\xcc\xf7\x1f\xa6\xdb\xf9+\xfd\xf1\xdd\xfd\xc3\xf6}\xfe\xdf\xe5\xe3\xd7}V\x9f\x93\xbe\xbb\xbf\xee\xdd\xd4?\x17u\xbc\xfb\x90\xd5\xf1\x90=\xdb\xe5|\xef\x97\xeb\x9b\xc7\xa9U\xfd\xfc\xfe\xa3\xd3\xbf\xbe\xbc\x98\xcd>N\x97\xb3\x8f\xaf\x93\xb2m\xe9l\xdf\xdf\xdd\\\xbe\x1e\\{\xa3\x9f\x7f+\xf4\xf4\xf3O\x9d<\xaf[\x9c\xfc*b\xceN\x10j1\x8a\x90\x9d\x92\xf3ZqS\x9f{#\x84<\xa3\xd9SK|f0\x95(\xa8Y\xb9G\x11\xb2\xe3,Z(F\xa4\xfcEm\xecC\xe6w\xc0\xdd\xff\xe9\xafq\xeaE\x18\xfd\xabJ\xfeZ\xd4\xc15\x0b\xf4V\x80\xd1\x9f\xde]\xe9\xbd\x07.\x89\xd8\xcbg\xd8\xa3\xee\x94 8\x19#\x9d\xbd\xe0\xa5\x94\xdd}\xea\x99\xa4\xfch\xe1?\xb3%\xf5/\xc8\xb7=\xfc\xaf3A\xe9\xc2\xc3HX\x18\xd9I\xb2\x0dcW\x08H\x90\x1d;+aq\xb6\x1e\xa3\x0b\xb3'v\x8clRE:\x91l\xa2\x1dh\xc4\x0c\x8f\xc4\x86\xa1;\xce\xfe\xb4\x0d\x8f\x8b\x85\x9a\x15\xff\xf3\xd5\xd5\xbct&\xdf\x8a\x91\x1b\xbb\xeaO\xd2V\xb4\x81\xea\xd6\xb4\x01\xcbV\xb5\xc1\xf2\xd6\x81\xa0\xaa\x95\x7f\xca0\x00d\x8ar6\x07C\x7fq6\xd6_\x00Y\xb6:\xa5k\xba?jF\xb4\xcbF]0\xe5K\x96\xff\xbb\xa7\xbf8\x1b\xb5\xf2\xeb\xc9\xd9U\xc5\xff6\xf5\x17g\x96\xfe\xe2l\xd8\xcaQ\xeb\xb7HX\x95\xff\xbb\xaf\xbf8\x1b\xb4\xf2kaWs#3k\xff\xab\xd1g\xd1(8\x1403\x07y|\xbc\xd9\x9a\xeaQ\xb7\xe8\xf9\xd5\x137l\x92\x01u\xcb\xbb(\x8e:-\x00\xccMUK\x8aw|\x1d\xf8\xd0\x17\xb8\x1fU\x0f\x11\xce:\xe6\x0f%\x13[r\xe4d\xc2\x9c\xd5\x88QN\"P\xc0\xb3\x9f\xd9rV\xc8y\x98\x87\xbb\x03\x19\xf5\x97+Y`mD\xeez\x08\x1eW*\xd5\xb3?peOx\xfd\x86\x80aD\x1dD\xef\xeb:\xf1\xd1\x8d\xc2\x0e\xe4y\xb9J\xf3,HU\x8bP\xba\xae\x16\x85\x98L\xaag\xff\xaa\x9b\xca/\xa5\xa5t?\xe7\x8a\xfa{\xb7xC\x8f\xf0\x8dJt.K#\xf7\xcb\xf27/Tn7 \xcf\x91\x8f\xca\xedn2\x0ef\xcf|\xd0[Q\x8c\xff\xa1Q\xf6G\xf4\xb2$=_\x02T i!\x97\x08\"\xde\xf1\x90\xf7\x83\xfa\xa7\x13U\xd7\xfe\xca_\x85WFKk;\xcf\x7fB.e0^Y\xf9\x1a\xf8/\xc0\"\xd8Y\xd9q\x82\xd2_\xd6\xe9B\x1b\x9d\xbd0_%\x9be'\xb7\xe0/?\x18\xfa\x0f\x9d\xc2\x82\xbf\xfc0\xfa\xa1\xb3\xf1\xd0\xf6\"\xdc\xfd\xf2\x83\xd9\x19v\x0c\xbd3\xfa\xa1\xb3\xf3q\x90\xfc\xf2\xc3*M\xa3\xf3\x97/\xb7\xdbmwkv\xc3x\xf9\xb2\xa7\xebzV\xc7\x0f/\xcc\xab\x17\xe6\xab\xc8NW\x9d\x85\x87\xf1/?\xbc\xe8\x99}\xa3?\xec_\xfd\x90?\xd0\xe25F\xbf\xfc\x806(\x08]\xf7\x87\x8e\xfb\xcb\x0f\xb3A\xd74\xcd\x8ea\xbd3;\x86\xd1\x1d\x0c\x86\xd8\xc8\x9eh\xd9\xbf\xfdN\xaf\xd3{W<\xce\xc40;\xa3\xac\xec\xf1\x87\x97EMY\xa5/\xcc\xab\xbf\xfc\xd4\xb1\xf4\x17\xcdZ\x93\xd6\xa8\xeb\xd98\\j\xeb\x1d\xf35\x9d \xf9\xa2U\xea\x1e\x8b^\x1dV\xaa^\x03,`\xd8\xe9f\xbaw\xe30\x02\xb8K\x19\x8an\xc1\x8c~\x12V\xe5\x87\xae\x8d\xa9z\xea-m\xae!\xd4\xfe63)\x16\xbf\x9a\xe5\xdcP\x7f\xf3\xc3\xe2\x86\xe2\x937\xf8\xf9\x05JuY\xafm\x81\"\xc8\x07\xe8\xd1\xaeS\x9c\x9c\x92\xbe\x04Z\x8ckUj\xb5\xb1&;\x06g\xf5\xc90\x82O*J\xd8\xd2\x17U\x80{6U\x9e\x9c\x9fk\x95V\xb8\xd2\xba\xe9K>#f\x81=h\x16\xd8O8\x9a\x04\xd5\xff\x94\xd7\xce\xd5\xb1J\xaf8/':*[:\x16\xe96'\x9d\xffQmM\xa7\xeb\xe00AZ\xfe\xf8\x88\x94\xfc\xf3e\x9bd\xc2\xad\xc8\x0f\x83\xf7\xd8c?\x03\xf2\x0d^\x8d\xe8\\\x1eN\xb4Ir\x82[\xf8\xa1+O\xef\x98\xfa\x91g\xea\x85\xb5t\xba\xc4}\xd9$\xb2\x99\x1b\x11<&u\xabc\xb9\xb6\x9e\xfd\x11\x9d\xcc\xe5(\xff\x9e\xba\xcc\x8dK\xf5w\x0f\xe5\xcc\xb44\\.1b\x8fh\xc1\x81\xd7@\x14x\x95\xa6\xccF\xa9N\xd7D\xbe\xc2\xebo\xb8\xe1]\xf8*`u\xe4\xa9\x08\xe8C\x0e$\x03~**\xcf\xf1\x8cu\x17-\x81\xf3=\xe5s\x8eN\x0bc/\xcf\xa6\xe9/\xb2(a\"*\x10\x1b\xaa\xeb\x84\x18\xdbQ\x82\\\xf1\xa9#\x81P\xf9c1\xe7\xf2\xac\x1et\x02\x8d\xdd\xc0\x12\\\xa1=*\xd2k\x0f\xe0\xaa`\xb0\xd7o\x82\xc1\xec\xe7:\x1a\xcc\x83\xea~\xa7\xd7'c\xbd,\x8c3\xf4\xce\xe0\xdd\xa8k\x8d;\xc3n\xdf\xe8\x18f\xd7\x18v\x8c\x1e\xd6\xfa]k\xd4\xe9w\xad\xf1;C\xef\x18#<\xd0\x06m\xf1\x1b\xb7W\x90\x05/\x90\x16\xef\xd7~\xa4\xa5a\xfe60`\xe1\";\x01\xc43\x10\xbfz\x8a:;\xa8u\xfb\\g\x03-\\\xdc\x87\x97\x1f\xe3$\xa0\xd5\xbb\xa5\x8aG+/H\x0f\xc4!\xbb\xfcG\xf6cc\x04T \xab\xd1\x1d!\x7f\xc2\x9f\xe3\xab\x86\xff\xae\x81\xfcN~\x14\x08\xf8\x1eo9<\xaa\x04od\xb85\x84\x1c\x9e\xb8D\x95\xad\xfb\x99\xc3F\xe5\xc9\xb2\x02\x9a\xd4W0ub\xf2\x97\xbdR\x9a\x97M\xc2\xbdz\xc1)1{\xeb\xfc\x0b\x0f`\x9a,\x96b\"7Qh\"\x7f\xef5\xcd\x9e \xd1\x9e\xe5-\x86'\x85Ap\xb2\xe8Y\xdf\x13.\x0f\"\x06:w\xbc\x86S\xd5\x13_\xa3\x0d\xf0;\xe9\xcd\xde\x1c\x9f\xe3\xde_\xce\x92[\xac\x07\x90\xddEo\xdd\xf6\x02\x0e\x0b05\xa8\x0d\x99\xf9\xeaQ\xda\x17*F\xc0e\x97\xfa\x82\xc3Q\x1f\x1c\x02\xde\xc6\xa7>\xd8\xb0\xdf\xeej\x91\xb5\xc5F\xc3\xe3\x98\xd1Q \xf1\xda\x90\xa3\xb8\xe4\xa7\x83\x18&\xad#\x12\xc7\xa6|\x90\x08\x0cLM\x0b\xa3\xfa\nVf\xab\xe6\x15;\x96B\x85\xf3pw\x90\x1e\xdai`T\xc2\x19\x8ca\x95\xcd\xcc\xbe\xcc\xa7\xae\xe4\x08\xb7\xe6Ni\xd5L\xba\xd0\x0b\x87,\xf1\xa4\xce\xf4Ty\xcf\xb4\xf4\xec\x0f\xc4\xac\xa9U\xdb\xdaq\xe0\x05K\x903\xb7|\xab^\xdcR\xddn\x17\x1fV\xe4_Q\x97\x8du\x7f\xcf\xfe)\xa7\xe5\xee<\xb6\x1d\xa4\xe5\xabZjF\x84\xceBEq\x18i\x81\xed\xb3\x87\xb8\xa9\x15I#\x1d@\x9c\xfbx\xa5\x18\xcb\x06\x10(X\xfb\xb2\x0b\x8f9(\x0b\xb1\xed\xf4 \x9e4\xba \x8a7(\x16\\\x1f{\xb6\x0bYd%\xa2\xebW\xf47f@\x06\x9dU\xbf[\x9d%\xaf\xee\x1e\x94\x01E\x8fUcE\x92\xdas\x8c:i\xf55\x16So\x01\xba\"\x9b\xd5\xd2eQ \xf8\x85\xdb u\x1f\x82H\x82i\xc4\x9dNy\xe5\xf0\xeb\xfaKWik\xa3\xdb\xe1^\x0eE\x1c|\x87I\xbbN\xe8G\xeb\xack\xadc\\\x0f\xcd\xfc\x91~\x10_\x1cC\x07\xf5E\x9c\xaa\x9d\x88&l\xce\xf5\x978\x9c\xdbX+\xea\xfa\x8f\xbe%*\x90\xb4\xd6S9\x00\x92g\x9c{\xd50$~=S\xf5\xaa/\xc0\xdd\xcb1C\xe0\xed\xb9\x03@/\xc3\xa12nZ\xb5>?\xaf~\xe0\x99\x94\xc3]\x9a\x9fLJ\xe3\xac?\xd4\xbcX\xafg?\xd6,`\xc0\xf8tu\"\xa5O\xbe\xe2\xab\xd8\x84\x82ZU\xde\xefN2IZ\x12dp\xa7|j\xda\xac\xec\\\x80B\xaa7\xb7)\xe9E\xa2\x91fl\xe9Q{\x0f\x03\xe2\xe6 \xf0V\x9f\x92m\xfe\xea\xc6\x9c\xed\x99\xact\xd5vz\x8cI%\x13\xd7b\xf2c\xf2\x8a\xeb\xb7\x9e\xda\xa9Bf\xae\xaa\xbe\x8c\x93\xb0/\x93\xe0\xce\x02\xc1\x1f\xd52\xf9\x17>Ix\xd2\x97\xcdJ\x86B\xfa?\xfe\xc8grI\xc4\xd1\xd7O\x99\x14\x99\n\xba1\xfa\xef\xb5\x17W\xaf\xc7\x11\x0d\x12\"*\xf86+\x1c\xe0i\x03\xfasCM\xca\xac\xe2\xf6\x97R\xf0\xf2e\xd0V1\n\x0e\xd8o\xae6\xb2\xa0]\x8a\x82\xc4\x0b\x99l2\x81\xf0\x14^\x9csLW\xe5?\xccBT&|m\xfe\x13+\x8d\x91+V\x81\x1f\xa5\xfb?66^\xa3?\xf8\xc4\xb5ID\x03\xe5\xda\x91\x8b\x0e\xb8\x17\x0cJ\xb9\x97\x93=\x15L\x0e\x8f\xe2\xd0\xad\xee%5\xc1<\xffjH\x8c\x80\xab\xee\xfc\xa6^\x1aFs\x9b\xfeb\x0dpE\xa7|s\x0eDZ\xfd\x17~\xcd`\x89\xb1O\xdb%{r\xbe\x07\x14\x98:U\x95\xe7\x06\xd9!U%WB\x8eb\xf9^3\xbbIR\x1c\xb9\x90\xaf_\xd8cD\x95\x84E\xca\x06\xd8\xcc\xe2#\xd1\xca\n\xf5+J\xd61\xae_\xd3\xf7d\xad\xe7m5\x9b\xd6\x9b\x93\xea \x01\xca/r\xa2\xc0e\xaevfO\xd8{\x9dy)\n\\\xf56\xb4\xcc$\xa5\x86\xf8seV\x7f\xb8\x80\xbeJV]h\x12\xdf*\x91\x8b\xd3-f!\xed\xf4\xb3WOw\xeb 8\x99\x0e\xa8\xe3p\xa76\xa9\xbcgG\xcf\x9aJ\x1d\x82\xf6\xd2<\xc0\x92\xbf\x19\xf2\x18\xa1\x8a\xa9\x9f\x93\xa3\xd7\xc8\xd1\x9b\x94\xff!\x94#t\x0b\xea\x04$\xb0\xee(\xcf\x0dR\xbf\x1f#<\xf5\xb4\xbc\xd5$\x89D\xc88\xae_\x1e\xf2\x90\x9c\xe1$\xae\xd5Q\x8b\xa8\xb2qG\x0e:^\xb0\x08\xeb;\x1d\xc0K(\xb3\xf2\xce*\xbf\xee\xd7\xf5m/`\x97urt\x87=\xc4\n\xc0\xb1w\xc6?\x8c\x80g\xc5z\x89\xe0w\xda+\x0f\x0b\x19\x0d\xa0\x02\xf6\xf3\xc8\xc5C\x13z\xd8\x87\x1eZ\xc7\xbf9\xa0\xa0,\xdenU\xad\x8f\x8b\xdbb\xea\xe9C\xdd:\xf2\xa4.\xf4\xee\xf7\\\x0e\x9b\xd5\xeeQ\x1b\x11-\xb6\x80\xae\xc9\x16\xb5\xd2\xef\xbc3\x16\x83\xb1\x03xay7\x9f\xdc\x9f\x02\x98u\xe7v\x824\xe0\xe80\xa9\x0b\x93:\xdbZ\xcf#G)Qh\xcc.\x9bF5\x07O{w/\xc1\x95\xff2\xaad\xc1`\xb5\x1c\xae(\xd6\xef\xe4\xcb\x9d{\xc5\xc0\xc2.\x8d\x93u\xc4\x1dd\xb5\x86\xcc\x01\xb7\xa1;\xea\x8f!\xf3\x92\x92\xe7\xaf\xdbST\x057T\xd9\xebt\xa5\xcd\xd3\xe0i\x01\x0e\xbd6\x7f\x8e\x17U\xc8\xa5,\xeeK\xbba\x80\x0e\xf2\x14rN\xf8\xa4\xa6)M\xd4\xcf\x1a\xbb\x912w\x88\xd7\x040)\xd0&4\xd1\x9a\x97\xe3\x01\x9c\xc0\xe4\xa1\xc1\xdeo(\xd2\x89-\xa7\xe6d\xdc\xe1M)a\x1dl8E3#v\xcd\xcbc\xffV\xb4\x13\x1d\xb7bH\xeb\x8f\x8e\xf3\xc1\xbe\x94\xae\xf5&\x9a\x84\xa0\x08\xa3\xd9\x1b\x90R)Q\x1c\x87q\xc2\x0e\xa8\xd4\x06\x18?Y=y0M\x9c0BIg\xd5{\xfa\x94\x9f\xb3\xd2\\\xb4\x90\x1f\x8b(\x1b\xaa1V\xe9\xc1\x0eXu$\xe2\x92\x9acc\xf4)b^\x80E>\xe5C\xd2\xea\xfaZ\xebd/\xf9&\x15-v\xf9;\xdb\nx\xd3\x0b$e\x8fl\x08\xdf=\x7f\x92]\x05U&\xc4\x8b\x9f\xc0M/\x86\xae\x882\x9f>P\x9e\xb4\x06S\x90\x8c\xd6a\x8f\xba\xac\xa44P+\xb99t\xc7\xb1\xf0\xb7\x03x9\xad\xbc\x971\x02\xeej\x8c~\x9a4\xaf\xc6\x02\xdfAV\x00\x0d\x9e\xd6hH\x0d\xfav\xe0\xff\xb4,\x94\x9d\xee\xf2kaq\xb7\no\x9aTZ\xe5\x1d\xf9J\xef\xff\xbc\xfc\xdb_;I\xb8\x8e\x1d4\xb3\xa3\xc8\x0b\x96\x9f\xee\xde\xfd\xd20\xea:I\xd2\xf5\xed\xe8o/\xff\x7f\x01\x00\x00\xff\xffPK\x07\x08_;\x94/\xe8Y\x00\x00\xa8X\x02\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]w\xdc6\x927~\xefOQ\xab\x8b\x91<\xa3\xb4bgf\xf6<\xda\xf5\x9eu\xec8\xd1\xacck\xfd\xb2\xfb\x99\xe3\x1a=9CYF\x9a\xb2\xe6\x0f\x00\xacp-\xfe\x01@\x9b\xcd\x06U\xbbsx.\x9f\x80\n\xd7MUR@E\x01\xf5\x1a\x03\xfe\x9c\xd3:/W\xa0x\xc87{b\x1f\xbf\xcf\xcb\x0c\x9f\x83h\xfb+\xba\xb8\x81\xafg\x7f\xfc\xe6X>K\xb6\xb8\xe2\x82_,\xf6-\xc9\xdf*L\xb7\xa4\xa4\x98*\x91\x00\x8e\x9f~\xfd\xf5\xf1\xfe\x7f\x07m=\x07\xdad\x19\xa6t\xd9\x14\xed\xdb\xb3\xce\xd34[\xe3\x0d\xea\xbe\x0fP\xef\xb6\xf8\x1c\xc8\xfc\x7fpV\xf7~\xd8VL\xb8:\xef\xb6/\xa8\xaf\xb3. f\xa8\xaa\xd0\xee\xe0\xb7\xbc\xc6\x1b\xcd+\x16 \x04\x99\xe5\xd8\xbf~\xd5T\x85\xfeW\xc5\x9e\xd6U^\xae\x0c\x8f\xf4\xb4\xf8o_\x19\x9e\x02x\x0e\x1f\xdf\xbd>\xab0%M\x95a(\xd1\x06C\xbdF54e\xfes\x83\x8b\x1d\xe4\x0b\\\xd6\xf92\xc7\x94\x0f\x11\xd66\x90\xa5\x91!{\x86\xe2*GE\xfe7\xbcxd|n[\x91\x9ad\xa4\x80y\xb3\\\xe2\n6\x98R\xb4\xc23\xf8\xb0\xce\xa9\xec\x1bl\x1aZCF\xca\x9aM\x0c\xa4S\xa5\xa0\x02#Z\x9b\xdb\"%\x86\xa3\xb3#\xc8\xd6\xa8BY\x8d+\xd6\n\x86\x02\xd1\x1a(^mpY\x03Yr\xd1?\xbe{}L\x81M0#7.T\x85\xb7\x15\xa6\xb8\xb4\xb4\xca\xd8-\x9b\xa2\xd8\xc1\xcf\x0d*\x98\x06\x17B\xbf\xb2)\xae\xc9\x13D!/\xcdL\xae\x99(g+BV\x05\x9eq\x9d\xcd\x9b\xe5\xece#\xa6\xd8\xf5c\xd1\x13\xce\x96\xaeIS,`\x8e\x81\x9b\x1a=!\xc8PI\xca\x15\xff\xa5\xd7\xa7@*(\x89\xfc\xf5\x94\x8f\xc6\x0c\x95@\xf8\xecd\x1a13\xc454[@\xbc\xef\x96vqu\x8b+\xa1\x9a\x0d\xdaR1\xb4\xb8\xe45Q3\x0b\x16x\x99\x979k\x93\x02\xa2FfKR\x14\xe4\x13=\xb7|\xdb\xdf\xc3\xc5r\xdf#6,\xb6\x15\xb9\xcd\x17x\xd1v\x9a\xfd\x11Q\xdal\xf0bfc\xf4\xbc\x84\x1f>|\xb8\x84\xef\xbf\xfb\x00\xa4TSP\xcc\xb1]\x8e\x8b\x05 \xe3\xdb\x7f\x1dN\x8b\x0f\xbb-\xfe\xe9\xaf?\x19_\x00\xb8EE\xc3\xc7\x83\x18o|\n\xa0\x9a\x7f\xa1mE\x16M\x86\x01\x95\x80\xab\x8aT3\x9b\xd4\xfb\xe5\x99\x02\xaa0\x1b\x9f\xe4\x13^0ug(c\xb6\x85\x90\x9bf\xcb\x96\xac\xa6\xa8)\xcc\x11\xc5\x0b\x8b}\xe2\xe3\xca\xf43\x1f\x84\\\xc65\xba\xe5Cp\xd3\x99C\x0b1\x89\x90\xea\x12\xfb\xf7-\xc9\x17\x80J\xf3\xc0\x02) 7\x1f\x15^\x92\n\x9f*\x06\x8c/\xaa\xf3y^\xe4\xf5\x0eJ\x8c\x17|\x18\xcd1p\x93W\xddZz\xc2\xfb\x92\xadQ\xb9\xc2\xfc%>ggp\xf2\x91b\xe5\xc50-\xb1\xe1\xc9l\x96\x18\x9f\xa8D+[\xef\xe7\x15F7\xcc\x06I\xc6\xb3\xc7\xe6\x11\xf5\x86\xd4\xf8\x1cj\xb6\x86,\x9b2\x133\x8c\xf5C\xda\xae\xac\xa9*\\\xd6\xc5\x0e\xd0-\xca\x0b4/\xac\xe6\x92\x8dG\xb2\\\xe6Y\x8e\n\xc7Z6o\x96Pa\xb6\x12\xe1S@\xe5\x82\xd9\x1f\xd9hC\xf1\x82\x0d\xb5\xfd\xbc4\xb2\x9a\xe3U^\x96\xac\xb3\x9f\xf2zmY\\v[<\x13\xe3\x1fms:\xcb\xc8\xc6f\x8d\xdf\xf3\x99J\x81\xd4ka(\xca\xa1\x95\x82\x13&\x1f\xf3\x017\xdbz'\xa7\xf6c\xf3\"\x98\xaf\xd65\xcc-F\x89w\x9au\x02\xf2\xcd\xb6\xc0l\x91\xe5\x13\x06\xe8\x16g\xf92\xcf\x80\xe2\x0d*\xeb<\xa3\xfa\xa9\xc6\xe7\xea\x08\x17H\xcc\xeds\x98\xefj\xd3\xe8\xf2\xf5\x92~d\xe6h\x8e\x011\xa1\xf2E\xc7\xc19\xf0c\xe4\xe2\x8e\xe6\xe4\xd6<\xa6\xa5\n\xe4T\xd0u\xdfG\xb2\xeb\xe7\xe5\xeeZ\xb9G\x94\x19.T\xcd\xf3\xbab\x93\xd8,\xa1\x96\x95Z#PA\xe4\xd0\x03\xa4\xff\xb4\xcc:\xf3\x85FH8\xef\xbb\x85\x03\xf7\xaf\xf5\xea\x0cC\xf3RM\x9c\"\x9fs\xb1\xe5:B\x816\xdb-\xa9\xf8\n\xbeE\xd9\xcdYS\xb2\xff\xb0u[\x8c\x0b\xfd\x0c\x92\x0b\xbd\xd9\xb1!Khja\xd8\x94y\xa0\xcc\xb0\xa2\xc5\"\x17\xb6\x02V\xb8d\x1b\x18.|\xbd&\x0b*\xbb\xa5\xe5\xc7\xe4\x11\x9fP\xdf\xdew\x9f\x11\x1b\xfc\xf0\xe4\x1c.\x99\xfc\xcc.\xc8\xae\xa0V\xe9y /\xfe\xf0\x07\xcb2\xf9\x8a\x10X\x12\x02\xcf`6\x9b\xfd\x8b\xf11&\x0c*w\xe6\x07P\xb9\x9b11^Uds\xb2$\xe4\xb1\xf9\xd1\xd9\xcc\xbc\xfe\xe5K8a\xac>\xf2\x8e| '\xbfc\xbc\x1e\xc3/\x16\x1bn\xe3\xf7\xab]wO\x1d\xba\xfb\x0b\xbaE\x93)\x0f\x9eq\xdf\x90\xb52\x81\x86rz\xf2\x8a\x90YV J\x1d\n\x12\"\xb2\x97D\x1f;/\x9ae0h\xaeU\xdd7\x0e\xd5]\xee\xea5)-\xca\x13R\xbd\"\xe4d6\x9b\x99W\x83Vq'\xd6g\xf8\xe0\xe3j\x8d\xd5*cr!\x94\xfa\xf2\xbb\xf7/\xde]\\~x\xfb\xee\xb1i\x91\x00\xd9\xac\x18\xa8\xf6\x86E\xd3vu\xfe\xd1\xa1\xce\xef\x89Y\x93\\\x95\xe7\xcf\xe0w\xdb\xf9\xec\x15!\xbf\xccf\xb3_\xcd\x0f\xa3rw\xca\xdcP\xf6\xc6V8Q?\xa2\x8a\xaeQ\xc1\x94l\xef\x88M\x85C),\"\xe4\xcb\x81\x00\x1f\xcb\xcd^\x04. \x9f \xfc\xa9\x7fz\x06e^X\x07\xb8].\xc3Hf\x9b[\xaege\x8b\xd5F\x03\xe6\xbb\xbd\xdb\xa5V\x8fOyQ\xc0\\\xef\xf5.\xf0\x125\x05\xf7\xc5\xf4M\x1dk\\\xaa3\xb6\x7f\x9f\xf1\x1f\x98\xbbz\x0c\xa8\xb3\xda\xb1\x95\x90\x8d\x04\xd3\xda F\x88\xbe\xb1vi)\x8b\x9d\xdaW\x1e\x04\x0bZ7\x19\xd0\xb2\xe6n\x9b\xbe!\x1e\xc78>;\xd67%\xd7D%2\xdf\xed\x02\x96#\xfahI\xc8l\x8e*\xde\xd9\xcfg\xbb\xd9\xdf\x8e\x84\x16\xf9\xdeK\xcb\xcf\xbc\x15\xe5\xa2\x1e1\x1el9\xd4>\xf2\x97\xf7o\xdf\xe8\x7fy\xf6\xec\xd93\xf3\x18`\xef\xedc.\xc2\x8f$\xcc\x1cH'H\xec\xeb\x1a*\xbd\x91\n\xaf\x9a\x02Uz~\x87l\xd8+\x0b\xbcw[N\x01o\xe6x\xb1\xd8;0\xa7\xc2\x1d\xd7\xb1C\x86\xe8M\xc7\xa5X\xf2\x8d\xec\xf5\xbf3\xd5]\xcb`B\xeb\xb6u?\x8e~\x82H\xf3sn\xd9\x80\xa0\xec\x86\xd9\xa0\xfd\x86x\x99\x17\xd8\xbcn(\x9bu\x89+JJ\xeb\xb4\x95\x91\xb8e^\xd1\xfa\x8a\x7f\xe1g\xf0\xc4\xcc\xb9}\x81\x0dJ\xf5\xfc\xd3\xf0\x15\x0c\xc0*\xd5\x11\xd7\xe5\xd19\x1c\xe9fm_\x0d3\xd1\xcb\xa3S\x1b?\xde\xbf7h\xc3x\xfe\xab\xe8\xc2\xbfY_`\xfd\x1b<\x1f\xda\xc9\x8b\xa5\xdcp\xf5\xc7\x9a\x18\x0d9\x85O\xb8(\xbe\xba)\xc9\xa7\x92\xdb\x995\xa2\x80 khM6\x81\x93\xab?\xe4O\x85\x03?\x98\x07\xc2xv\xc4a\x03\xd8\xb0\xb9BbH\xeb\x1b\xbb\xe6\x93Q\x8d\xf35)\x16b\x90\x0b\xc9\xc5T\xce\xcbv~\x80\x88\x00\xeaY\x89)\xa3o\x87\x8b0k\x17\xe7\x13f\xd7\x94\n\x0fBC*b\xfa\xd3_\x7fzl\x99HS\x8c\xb9~\x83\xf6a\xc7U\xc5X>\x99=}\xf2\x94\x1eY\x86\xd0\xf0/\x12iR\xc8\x05\x0fC\xd90\x1cE[\xb4\xcaK.\xda\xa1\xdb\xd4\xdbu\xee\x1f\x14\xa1Ci[;\x7f\x96K\x8b\x0e\x97\x11d\xc5A\xec(H\x89?\xd7W7xgFH\xac\xdb\x7f\xe7\xe6\xbf\xd7\xd5\xff5m\xfd\x95\x14l:\xb2\xae\xb2\x7f\xcaX\x18\xa2T\x04\xfc.\xd1\n\xbf\xc3?7\x98\xd63\xf1\xbb\x81\xd9\xcf\x0d\xaev\x9c\x0dc\xcb\x14\x89aCh\x0d\x98G\x98xXj\x06\x17ug*n\xeb\x1d\xe4&\xb0\xa5^\xe3\n\xf3\xef^\x12\xd8\x90\n\xabp\xa3n\x19\xa9I\x8d\x0c\x80\x92\xb72\x9b\xbc\xac\xff\xfcG=\x0f1\x1a\x8d1\x14\xde<\xd7\"\xffG\xd9l\xe6\"X\xa2\"\xa4\x9dp\x9c\xa9\xbf]E\xf3\xa1}\xc5\x99\x99f\xf3'D\x81\xe2\xfa\x14\xf2\x9a\xaa\xc0/\x85\xa6\x14\x83y!ba\x9fr\xda\x1f\x1f\xf6\xc0\xcb\x7f\xb2O\xa8@\xcdwr\xdc\xab\xc1\xa1\xe6\x810\xe0K\x19O\xe3\xaf\x9c=\xd7O\xc6w\x97/\xa4/x\x18A\xd0\xc3\xac\xedC\xd2\xa15C\xa7%4\xa5\x80B\xf0B\x84\xb4\xef\x12A\xe5\x0d\x98\xe0S\xed\xd8\xca\xc8B\x13\xde\x13/\xe4e\x8dW\x9aX\x95\x1a\x89yY\x7f\xf3t\xf0\xab\xb4\xfdA2,p\x8d\xf2\"\xc1\xbe \xf6M\xb0\xaf\xa0\x04\xfbrJ\xb0\xef!%\xd87\xc1\xbe&J\xb0o\x82}9%\xd87\xc1\xbe \xf6M\xb0\xaf\xa0\x04\xfb&\xd87\xc1\xbe \xf65Q\x82}\x13\xec\x9b`\xdf\x04\xfbvh\n\x08.\xc1\xbe\x9c\x12\xec\xfb[\x81}\xb7\xa8B\x1b\\\xe3\xaa\x03\x1d|\xc5-o\x17\xa7\x9d\xdd\xe0\xee*h\x838%\xa6\x89\xa4 \x15\x07\x01yPI\xc2l\x12(j\x01P\x1e\nZ\x0db&\x1c\xd1d\xd3\xde\x05j\xbee\x0b\x1e)\xf9^\x91,\x97\x14\xd7l\xfb\xd5\x17\x17:\xa1l\x8a\xeb\xaeQ\xcc\xcbs\xd1V\xe7o\x15\xfe\xb9\xc9+\xbc8\x87%*z \x9e!H\xa0\x0d\x0ch\x94(\xe43\xe9q\xb0)\x97\x9d\xe1\xaa,\x9b\x0d\xae\xf2L\xfd\x8d\xcf\xb6\x0c\x95\xac?\"*\xb2\xc6\xa5R|S\xb6\x81\xa8\x81\xfby\xc1\xb9\x15\x98\xd2\xbd\nE\xe8\xa6\xa1L\xd578P\x9f}\xf6w\xac\xdc\x01D\xacQo\x91or_\xed\xf2g\x15\xbcjB\x8eE\x90\xb2;\x82%\x18\xdb\x14\x03\xf0R\x84$\xba\x7f\xbaXB\x81\x97\xb5B\xda%\xf4\xae\x9cF\x1e_\x15\x13D4\xc2\xf4<\xdf\x01F\xd9\x1a\xd0v{\x8fZ\xec\xe2\xdf\xfb\xf7m\xba\xec\xbc\xc14\xcaG(\x81\xbaj0\xb0\x7f\xe4\xe5\"\xcfP\x8d[\xa4Ej\x90?(\x07R\x97]^fE\xb3\x18\xb8\x84H\xb4\xd2B]\x83/\xc6\x81\xd3N\x04\x96\x99\xee^:I\x8f\xd9\xc7\x0b:\xf8Z\x83.p/\xba\xc2TB\xdc|z\xed\xe7#\x9br39\x9b\xf2UI\xaaA\xfcZ\xcd\xc6~\x13B3c?\xec\x9c\x90\x02\xa3\xd2\xf6\x01+|\x8b\xab\xde\xab\xb6\x8f'\x9f\x1e~\xb8\xbc\x93?Qa\xfdL\xe8\xf1am\xe0\x92#{\xa4Z\xe0j\x18\xc0r\xe4\x1cL\xa1\x8d\x1a\xadz\x8b\xd8\x7fJn\xc7\xd6\xc3\xecg\xbf\xa0\xc5\xa2\xc2\x94\xfez\xec<\xd7\xbe?\xd6.\xff_\xa2\xfc\x02\x8e\x01\xc2\x9d\x10\xc6K}f\xdd\x91\xf5G\xaao\x0f\xfb\xc4\xba)s!*\xe7\xaa\xb6& 8c\xef>\xc1\xeb\xc9S\x0f\xfc\x12\x0fb\xd2\x0e\xec\xe9\x05Q\xc9\x05\xbc \x03Cgj\xc1\x04\x89\x05\x91i\x05F0\xd6/\xa9`TJATB\x01\xa0\xa20i\xd1/\x9d &\x99\xc0\x06\xf1y\xa5\x12L\x9cH\xe0\x95F0a\x12\x813\x85`\xa2\x04\x821\xe9\x03\xc1\xc9\x03\x13\xa4\x0eL\x9c8\xe0H\x1b\x98 \xe0\x1f\xa2,_\xb0\xdf\xad\x13o\xa0?\x02\xe6\xd7\xa3\x07\x13A\xfc^\x00\xbf\x1b\xde\xf7\x01\xf7\xadZ\x0c\x05\xf6}a}\x13\xa8?\x01\xa4\x1f\x00\xe8\xc7\xc3\xf9\x16\xd0\xdc\x17\xca\x9f\x18\xc8\xb7H\xa4\x1d\xa9Q\x10\xbe\x8a\xbcj\xf8\x19\x00\xfc\x89\xe1{3x\x1f\x0b\xdd\xf3\x88\x80Np=p?-lo\xda\xf89!{\x13\xa6h\x82\xeb\xa7\x05\xeb\xe3\xa1z\x03,\x1f\x05\xca;\x01\xf80\xf8\xdd\x1b|\x0f\x84\xdeC\x80w#\xecn\x96\xc6\x17\xfe\xf4\x83\xdc\x03\x01\xf7\x00\xb8]\xdb\xb5i\xa1v\xd3\xa4\x18\x01\xb3k\xe3\x14F\x90=\x0eb\xb7\xc1\xe9\xd3\x83\xe9\xe3G\x927\x90\xee\x0b\xa3\xf7\x97H\xff\x03\x9e\x11\xe7;\x07\xdc\xba\xc7;\xf7\xed\xa7s\x9b=J\xe76]\x83rO\x13\x83'\xbe\xf0I\x1c\x80bd\x96\xcem\xa6s\x9b{\x8a\x81Z\x8c\xcc\xd2\xb9\xcdC\x9a\x08v\x19\x07\xbcD@/\x93\x80/\x93\xc3/N\x00\xe6\x0e \x98\xbb\x02a\xee\x00\x86 \x01bb\xa1\x18\xab\x0dw\x811\x13\xc21\xbe\x80L $39(\xe3\x86eF\x033\xe9\xdc\xa6S\xb28\xa0F\xcb*\x9d\xdb\x8c\x81l\\\xa0\xcd4\xb0\x8d'\x16\xe1\x84n\x02\xc0\x1b\xe7\xf9\xb9@\x00'\x9d\xdbL\xe76}\xa0\x1d\xa7VC\xe1\x1d\x7f\x80'\x9d\xdb\x1c\xd0\xc4pO:\xb7\xd9\xa5X\xf0G\xcb,\x9d\xdb\x0c\x80\x82\xc6\x80AZv\xe9\xdc\xa6\xf6\x05/\xf8(\x9d\xdb\x9c\x0eLJ\xe76GCM\xd3\x8c9o\xb8\xc9\x1fp\xf2;\xb7)\x0f\xa1tx\xf4v\x91\xf2\xe7^\xed]\xf5\xb7\x9a\xc8b\xb2\xcb~\xe0+\xe7e{{\x96o\x7f8\xa7\xae\x1a\xc7\x11\xb4\xc0\xa39B\x98\xab\xf9\xee*_\x9c\xfd\x92/<\x8e\xe6<\x17\xef|\xbb\xbbxypJGun\x7fJG\xfe \x0e\x90\xa9~z\xdcE\xf9\xe7\xd9S\xdbm\x94\x1d!\x1e)%=\xecS>WR7\x01\x18Y\x98\x9a$3C\x11\xdf.(\xdaQ\x9e\x13\x1f\x1d\xb0\xd1\x8d\x81m&\x9d\xab\xf6\xd9\x84\x8f\x0e~M\xf8\xa8_|\x0d\x12>\x9a\xf0Q\xe3\x93 \x1f\xe5\x94\xf0\xd1CJ\xf8h\xc2GM\x94\xf0\xd1\x84\x8frJ\xf8h\xc2G\x13>\x9a\xf0QA \x1fM\xf8h\xc2G\x13>j\xa2\x84\x8f&|4\xe1\xa3 \x1f\xed\xd0\x14XU\xc2G9%|\xf4\x1f\x01\x1f\xcd\xbb\x06\xdbV\xcb6_(\x04\xaa\x8f\x18\xb6\x9b\xd7=j:\xc7\x1c8\xcd\xf1BF\xe6\x97\x07\x0b\x83\x8c;\xf3\xd8\xd4\x1cc6Xe=N8)\xf2\x1b\x1e\x1c\x1b4D\x1f\x8b\x10\x89\x1cs=v\xcdv\xc1w_5Q\\\xd8`\x81eS7U\x1bDj%m\xea\xb5@v'Du\xa1\x8f/\xb5uEMh\xaf\x16\xec\x9d\xe3l\xfd\xcdS3\xbe\xfb-\xff\xfd\xb2\xc2\xcb\xfc\xb3T1\x85y\xe7\x8f\xf2\x05\x1fXR\x8b\xdd~{\xc8\xeb\xc1\xa2\xb6\xa2\xdfW[.l\x00ng\x8f\x92t5\xe0\x84^\xfb\x1f\xa4\xdaf\x03fA\x97\x8e\xfe\xb9}(\x81\xb3\x07zL\xe0\xacOp\x0f\x128\x9b\xc0Y\xe3\x93 \x9c\xe5\x94\xc0\xd9CJ\xe0l\x02gM\x94\xc0\xd9\x04\xcerJ\xe0l\x02g\x138\x9b\xc0YA \x9cM\xe0l\x02g\x138k\xa2\x04\xce&p6\x81\xb3 \x9c\xed\xd0\x14@Y\x02g9%p\xf6\xb7\x02\xce\x86\x1d\x07\x15\xa0W{O\xdb\x15\xdb\n\xdbokS\xe7\x00kL?\x90\xf7b*g\xa4\xbc\xc5UM\xdb\xbb\xdc\x9e\xabS\xa1\xec1\xf6\xfdz\xfb\xf0h8Q\xd7\xb8|\xee\xc1\xc2\x8aJ\xb3B\x03\x01\x90\x93}\x83\xafS\x85\x13_\xd4\xf3\x90\x1fq\x7f\xaa3\x01\x8c\xdd\x17\x12\xc0h\xf8=\x01\x8c\x1dJ\x00c\x02\x18\xf7\x94\x00\xc6:\x01\x8czJ\x00\xa3\xa2\x040&\x801\x01\x8c\x9e^R\x02\x18[J\x00c\x97\x12\xc0\x98\x00F\x0d%\x80Q\xfbL\x02\x18\x13\xc0h\xa0\x040&\x801\x01\x8c `\xec\xd0\x14`O\x02\x189%\x80\xf1\xb7\x020zT\xc7\x150b\x87\xd3\x84\x87!;{\xe9qP\xa7h\xc1\x03\xeb\x14\xf8\xd8\x07\xc2\xb1\xb6\x0e\xd6)1Nimj\x02\xdd^\x8f\xc58{\x8d\xca\xe7\x1e<\xc6\xc9\x15\x10\x04zYb$^\xf8gOMN\xfc\xb3\x87\x9a\x0e\x18&\xf8S\xffB\x82?\x0d\xbf'\xf8\xb3C \xfeL\xf0\xe7\x9e\x12\xfcY'\xf8SO \xfeT\x94\xe0\xcf\x04\x7f&\xf8\xd3\xd3KJ\xf0gK \xfe\xecR\x82?\x13\xfc\xa9\xa1\x04\x7fj\x9fI\xf0g\x82?\x0d\x94\xe0\xcf\x04\x7f&\xf83\xc1\x9f\x1d\x9a\x02\x8aJ\xf0'\xa7\x04\x7f\xfe#\xc1\x9f\x07\xbb\xe2\x91\xf8gP\xd1\xd7\x0dY4\x05\xbe\x92\xc5n\xa9\x19\xde\xfc\x91?(\x8fl\xd2\xfd\xcd\x9eE!f\xc5\xe7\x9c\xd6\x1c\x03\xe0\xcf\xa9\xea\xb9m\xac \x1a\xe1\xec\xb7\xfbH\xa9\xe3\xa1b\x9b==v\xa9N\xc0T\x02\xa6z\x94\x80\xa9\x04L\xe9)\x01S \x98J\xc0T\x02\xa6\x120\x95\x80\xa9\x04L%`*\x01S-%`*\x01S \x98J\xc0\x94\x89\x120\x95\x80\xa9\x04L%`\xaaCS\x80\x04 \x98\xe2\x94\x80\xa9\xdf\n0%\xc8\xbe;\xe4\xc0Q\x1f\x7fq\x1f\x9a:\xfc\x04\x9c\xcd\xd9\x00?zw\xf9\"\x1d\xa0\xd2\xbc\x90\x0eP\x19~O8U\x87\x12N\x95p\xaa=%\x9c\xaaN8\x95\x9e\x12N\xa5(\xe1T \xa7J8\x95\xa7\x97\x94p\xaa\x96\x12N\xd5\xa5\x84S%\x9cJC \xa7\xd2>\x93p\xaa\x84S\x19(\xe1T \xa7J8U\xc2\xa9:4\x05f\x90p*N \xa7\xfa\xad\xe0TaU\x1b\x07\xa7\x99\xce~a\x13\xd2V\xb4\xb1\x87J}\xbbc\x03\xbc=\xda\xc4\xbea\xff4\x13\xe4\xe5\x92\xb0\x95X\xfe\x99q\x97\x1c\xcdg\x96\x04W\xf9\xd8C?\xb8d\xc2\x83\x0c\xd0\x8e\x1d\xd8\xa9\xad\xb0\x8e3\xa2\xe1\x13\x12\x98\x1c\xd0\xf1\x83sb\xc0\x1c;h\x13\x05\xd9\xf0&\x0c\x0c\x9d\x80\xcd\x04pM$Xc\x0cq\xfbA5\xa3\x80\x9a(\x98\x06PQ\x98\xb4\xe8\x07\xd2\xc4@4\xb6\xc0\xa9\x17@31<\xe3\x05\xceL\x08\xcd8\x81\x99\x89`\x991\xa0L0$3\x01 31\x1c\xe3\x00c&\x87b\xee\x06\x88\x99\x1c\x86\xf1\x07a\xe2 \x18\x8b\xd2]\x00\xccd\xf0\x8b\x1f\xf8\xa2\xf1\xfe\xcc\xf6ub\xe0\xc5\x05\xbb\x8c\x04],\x90\x8b\xd3=q\xc2-~\xfe\xcb\xb4P\x8b\x0bhq\xcb\x14\x07\xb2(\xcb\xaea\xe8\x82X&\x04XF\xc0+zP\xd4\x06\xaeL\x0b\xad\xd8\x81\x95)`\x15/\\\xc0\x01\xa9x\x03*\xe6\xd8g8\x98b\xe6\xa5\x8d3L\x02\xa3\x84(\xcb\x17Bq\xeb\xc4\x1b>\x89\x00O\xf41\x99\x89\x80\x13/\xd8\xc4\x0d\x9a\xf8@&V-\x86\xc2%\xbe`\x89 *\x99\x00( \x80I\xe2A\x12\x0b\x14\xe1\x0b\x90L\x0c\x8fX$\xd2\x8e\xd4(`D\x81 \x1a~\x06XdbP\xc4\x0c\x89\xc4\x02\"<\"\xa0\x13\\\x0f\x87L\x0b\x86\x986~N \xc4\x14\xa95\x81 \xd3B \xf1\x00\x88\x01\xec\x88\x82:\x9c\xb0F\x18\xa8\xe1\x0di\x04\x02\x1a!p\x86\x11\xcc0K\xe3\x1bT\xf6\x032\x02a\x8c\x00\x10C\xdb\xb5i\x01\x0c\xd3\xa4\x18\x01^h\xe3\x14F\xe8\"\x0e\xb8\xb0\x81\x14\xd3C\x14\xe3G\x927<\xe1\x0bN\x8c;B#\xe0\x80\x89\xce\xd1H\xc4\xa2{\x98f/W:%\xd3\xa3tJ\xc65X\xf741\xa8\xe2\x0b\xab\xc4\x01+Ff\xe9\x94L:%\xb3\xa7\x18\x08\xc6\xc8,\x9d\x929\xa4\x89\xe0\x98q\x80L\x04$3 (39,\xe3\x04f\xee\x00\x9a\xb9+p\xe6\x0e\xe0\x99\x10\x80&\x16\xa2\xb1\xdap\x17H3!L\xe3\x0b\xd4\x04B5\x93\x835n\xb8f4`\x93N\xc98%\x8b\x03p\xb4\xac\xd2)\x99\x18(\xc7\x05\xe6L\x03\xe7xb\x14NH'\x00\xd4q\x9eV\x08\x04v\xd2)\x99tJ\xc6\x07\xf2qj5\x14\xf6\xf1\x07~\xd2)\x99\x01M\x0c\x03\xa5S2]\x8a\x05\x85\xb4\xcc\xd2)\x99\x00\x88h\x0cH\xa4e\x97N\xc9h_\xf0\x82\x95\xd2)\x99\xe9@\xa6tJf4\x045\xcd\x98\xf3\x86\xa1\xfc\x81(\xbfk\x86:\x87T\xe0\x0b_.\xc4\xc5\xb2\xdc)t\xc9\x7f\x87\x9f\x1b\\\xe5X\xdc%\xb4\xef\x89\xb2z\xbd\x935\xcf\x9bz-\xdez\xa4d\x7f\xa0\x07j\xba}\xefRO\x18\xf1\x90\x88\xc1\xcaEj\xaf\x00\xb5\x06\x89\xc3F\x87\x8b\x80Q(p\x82I\x1b\xf4\xf9j\x837\xe4\xaa\xc5>,\x98\x93W\x16l\x93\x97\xf5\x9f\xff\xa8y\xa4\xfe|E\xf3\xd5U\x91or\xcd\xe9\"\x98\xae\x8d\xbf\xe1\xab\x8c\xd0\xfaj\x8b\xab\xab\xf9\xae\x1e\x9b\xd6kl\x8c\xf5\xe6\x16W\xf9r'\xda\xc3\x8b\xa7\x7f\xfa\xd3\x93\xff\xf3\xa5\x9a\xa38\xdb>\xfd\xd3\x9fo\x9eL\xdf\xa0\x07\x94-\xe6\x9e\x17z-\xf1j9\xc7\xdf]\xbe\x18\xf0K\x80u\x02\xac\x9d\xd1Z\x9f\x80'$\xc0:\x01\xd6\xc6'\x13`\xcd)\x01\xd6\x87\x94\x00\xeb\x04X\x9b(\x01\xd6 \xb0\xe6\x94\x00\xeb\x04X'\xc0:\x01\xd6\x82\x12`\x9d\x00\xeb\x04X'\xc0\xdaD \xb0N\x80u\x02\xac\x13`\xdd\xa1)\xc0\xc3\x04XsJ\x80\xf5o\x05\xb0v\x96u\x9c\xa3\xf2\xa6\xc5\x91\xe7\xa8@e\x86\xe9\xd9/h\xb1\xa80\xa5\xb6\x92\x8e\xcf\x8b\xe2[\xf9|\x8b,\xf3\xd0\xac\xf8#\xb7\xb7E\x01\x19aV\x8b)\x1b\x01\xcd\xcb\xd5\xbe\xca\xa3\x1ex\xdes\x95??X\xe4Yi\xeba\x80@\x0b\\\x92Mt\xf8\x03m\xf4U)\x059^\xf7 >\xbc y\xd9\xe2\xef\x08jr\x83K\x198\x10\xa2\xe7\xa5\xb0+\xcct\xa1R\nd\xda'\xbfy\xfb\xe1\xbbs\xbe\xd2\x8b\xe7\xe4\x92\x99\xf3\xa8\xc6EYKc\xd2F\x92\xba\x16E\xcbP8X\xfa\xc6h\xbe*Q\xddT\x98\xb6\x19\x1c\xcc\x9d\\\x91\x15\xe1\xd3\xf7p\x15\xee)D\x0d\x13\x05\xe2\xb6\xff/'\x88\x80\x1a\xf2\xf2 \xac\xb5E+\xa9\x14gv\x83zp\x90\xe1\xd0\xfeY:u\xba\xc9 \xc8:\xf8\xecC\xaf\xc4\x9f\xeb\xab\x1b\xbc\x1b\x89\x93\xfb\x95\xf7\xfa_S\xd0MI\xa1\xb4\xcc\xfe)\xa3\xd0\x88R\x11j\xbfD+\xfc\x0e\xff\xdc`Z\xcf\xc4\xef\x06f\xcc\x9c\xed8\x1b\xc6\x96)\x12\xc3\x86\xd0\x1a0\x8f\xed\xf2\x80\xf0\x0c.\xea\xce\"\xb8\xadw\x90[\x8a\x9dV\x98\x07\xfeK\x02\x1bRa\x15\xe8\xd79p5\xa9Ql)Wg\x96\x03@\x9d\xd7\x05\xb6D/y\xf3\\\x8b\xfc\x1fe\xb3\x99\x8b0\xa5\xc2&:\x81pS\x7f\xbb\x8a\xe6\xa6\xfe\x8a33\xad\xa3\x9f\x10\x05\x8a\xebS\xc8k\xaa \x17\nM)\x06\xf3BD\xa1?\xe5\xb4?><\xb2(:\x8b\x89W*\x85\x8e\xc7Yw\x9d{w\xf9b\xd8\x89\x94^\x91\xd2+\x1c\xb3\xf2\x0e\x90 [\"\xa2\xf4\xddL\x03P\xfe\xac&\x82\xfa\xdf\x9aH\xb3\xd7\xaeO\xcb>\xa892\xa1q/\xdf~]bV\xd8$\xe6\xc0\xd2K\xd3\x8e\xa4}\x10\xb5\xc39\x98)\xad\x8d\x9cA\xed:\xc0\x8d\xffj\x80\xd5\xf1\x1e\xb2\xed\xa6\xcb\xb6\xbf-\x8b\x1dG\xde\xc9\x12\xc8rIq\x0d\xa4\x82\xbe\xb8\xd0I\xa1\xa0\xb8\x1e\xea\xeag\xe9j+\xda+k\x89\n\xea\xd4\x96ae\xd4(Q\xc8g\xd2\xe3\xc02\xca\xcepU\x96\xcd\x06Wy\xa6\xfe\xc6wy\x19*Y\x7f\x04\x1a\xb7\xc6\xa5R|S\xb6v\x7f\x10\xf6\xbc\xe0\xdc\n6\x86Z\x15\n\xc8\xb0a\xfe>c\x10\xa6\xcf>\xfb;V\xee`\xa5\xd4\xa8\x97gTzj\x97?\xabf\x96i\x01\x15nIw\x04\xcb\x05iXAm+\xa0\xb0\xee\x9f.\x96P\xe0e\xad\x1c\x0e\xe9\x81\xa8`%\xc7\xf5\xc5\x04\x11\x8d0=\xcfw\x80Q\xb6\x06\xb4\xdd\xde\xa3\x16\xbbn\xc0\xfe}\x9b.;o0\x8d\xf2\x11J\xb8\xa1aN\n\xe4\xe5\"\xcfP\x8d\xdb\x0c\x1f\xa9A\xfe\xa0\x1cH]vy\x99\x15\xcdb\x10\x8aD\xa2\x956\xc5j\xf0\xc5\xf8\x8a\xd2qx\x98\x9b\xd0\xf3\xaa{\xcc>^\xd0\xc1\xd7\x1at\x81Go\xd9Z/\xd6~>\xbd\xf6\xf3\x91M\xb9\x99\x9cM\xf9\xaa$\xd5 oB\xcd\xc6~\x13B3c?\xec\x9c\x90\x02\xa3\xd2\xf6\x01+|\x8b\xab\xde\xab\xb6\x8f'\x9f\x1e~\xb8\xbc\xe3FVX?\x13z|X\x1b\xb8\xe4\x19e\xa4Z\xe0j\xb8!\xd4^a\xfe\xcd\xa4\xda\x18\x1bB9\x9b\xef\xae\xf8\x0e\xd7\x12K\x91\x0e\xa61\x8e\xa2\"'l\x9f\xe8\x1fK\x91\\\x1f\xa9^?\xec8\x8a\xc9\xd9\x8b\xda\x94Z\xa2!\x0e\x87\xcb\x16 \xb1\xbe\xea\x8e\x82L\x19\x03\x998\x02b\x8e\x7f\x84E?<6erTzm\xc8\xe4\x16\xac?\x90\x15\xa5jl\x92\xd2\xee+\xed\xbe\x9c\xce\x9a\x92\x8f\x1b\x1a\x93t\xfcG%[&\xcc\x15\xfb\x8b\x97x\xa1\xcblO\xc0\xb0U\x96KuE>\x95\xb8\xa2g\xbf\xf0\xff\xb3A\x15\x1dC\xf4\x92=\xfb\x96\xbf\xd8\xae\xb6|A-\x8a\xf6\xf6)\xf9QT\xf68\x07\xd4\xd87\xaf\xf3\x8c\xc3\xc4m7\x98\x01\xdf\xdb\xcc\xae W\xba\xe9i\xf7X\xeb\xad\xfc\xf9X>\xdb[\xbb;r\xca\x9f\x1f\xec\xfa\xdd\xfd\x18\x0f\xc3f\xc8\x0f8b\xd2\xbb\x17sAj\xfev\xe3\xee\xed\x9c\x96\x83\x87\xeaG\xcf\x90t\xc3\xa7OFGI\x90Ci\xe0\xa18p\x01I\xe0\xa7>\x17\xa0\x04~l|\xbf\xc2\x94\x8e\x95\xa0(\xf7\xca\xc8MB\xd96\x90 \x82]-A>*\xda\xdb\x92VI\xb4\xae\x9a\x8c5\xb5\x87\xf5yY\xe3\xb25\x82l\xf4j\xb9\xf1\x11M*\x89\xd4\x1b\xd2~\xf7\xe3}\xff\x018\x08s\x83K\xbe\xc9\xed\xe5\xb3\xc86msY|:\xf9\x9cmv\xec\x13t\x86\xcd\x1a>\xb7\xde(\x0f\x1eMX\x1c\xa7\x84\xc5\xed\x7f\xf2Uf\xc2\xe2\xb8/\xd7qh\xda\xad_w\x86\xb0\xdd\\\xbb\x07\xe41\x8fC\x17H\x11{\x96\x8f\x8b\xc39\xed\x98\xcdi\x7f8\xf85\xed\x0f\xbf\xf0\xfe\xd0\xba\xff\x1aL\x1d\xb1\xf9\xea\xce\x92\xfd\x9eL-'\xed\xd6\xac\xbb\x83ak\xf3p\xda\xdc\xd5\x862\xc1y\xee\xdd-$8O\xd2\x1d+\xd7\x0dD%8o\n-&8/\xc1y\xbf-8\xcf\x1cg\xa4W\x1b\\\xa3\x05\xaa\x919\xc2\xf8\xbf\x83\x08#\xfdQ\xbe\xd2\x83\xf4\xb2\x82[S\xc5\xae\x0d[\xe0[V\xdd\x85^_\xa7\xab\xdf\x98|\xe2\xc1F\nU\xc7\x1f\x88\xeb\xd8\xd5\x81\xf6\x01\x0f\xffO\x04?\x9b2\xaf\x1d\xe1F}\xd7\x04\x19;(\xc8#\xb0\xe7\xee\xac gp\xcf\xa3\xcb\x8a|BO\xdd\xa7\x99/\xdbF\x9b\xc4\x84\x10\xad\xf4\xca\xdc\xac\xf2[l.\xb0\xd0\xe5\xc5\x94\xce\xcb\xce@\x83j\xb2y\xac\x0f\x9a\n\xc2\x9f\xb7\xa4\xc4\xf6\x80\xa4k\x1b\xd5\xa5\xce\x96\xca\xb0\xb7W\x14\xa6%%gWQ[\xf2I\xac_O\xbe\xde\xff.\x82\xcb\xa59\xe6(h\xd3\xd8\n\x1d \xaaP.O\x14\xce\x11\xc5W-\xe2\x93\x97\xc2H\xb3\x7f\xe3\x9f\x1bTXc\x9c\x82\xf8\xd7\x13V\xe9c\x99\xd7\xc7T\xeew\x1c\xaf=\x91\x9f\xf4\x19<\xf9\xfa\xffk\xfb\xb8\x17\xc7\xf5>/>\xa4\"\xbe\x9d^\x90\xa5\x18\x1b\xfb*:Y\x85\x99\x97a\xae\x12#\xa8\xed\x01cq\xccX\x1c;*l\x08je\x7f\x06\x7f>\x85z\xdd\xd0sx\x02\xec}\xd1\xb7?{\x8cUT\xe4\x88\xda\xa7\xb1\x8fQ\x11\xe40-\x82\xbc\xa7\xbc+`\xa5HvA\xecK\x8a\x9cr5\xca\xc9\xae~S\x10\xbf\xf7\x847>\xe3\x17\x95\x84\xdeg\xed\xcc/$\xa3\xe1\xc3:\x15\xc8)Zo#\xde\xc8\xd1\"'R\x9e\xa9\xb0\xb3\xfe]\xb7*;K\xcb\xd0n*\x95v'\x1aw&\x8c\xcc\xc4\xc4\xecy\x17]bs&z\x0d\xf47r\xac\x99a_\xf8\xdf\xc4t=\xd9\xef\xc0\xd9/m\xef\x8c\xfc\xf8\x8c\xef\xcc\xb9\xaf\x0d\x13k\x91\xd3m\x81\x0ca\xf1\xf0\x1eZ\xc6\x98l\xa9\xdd\xcf\xc8u\xaeY\xad0e\xbb\x04i]\xd9Hk;\xebb&|i\xe1<\x1a\x8a\xdfp\xff~\xa2\xde\xe9a\xeao\x8e\xed\x03\xf9\x98/\xe2\xddXU\xafx\x1d\x87\xe4N\xf0\xea\x1c^p\xb6\xf0\x9c\x99A=O\xba\xdb\xccI|@\xcf\x7f8\x8a\x86\xf6\x1b|&\xa3\xfc\x9b*>G\xd7\xe4S \xa4\x04\xfcY\x96\x932r\xe3\xbd{\xfe\xe1\xed\x8f\x8feU\xc2\xcct\xd6\x1bD \x84\x8f\x0c~^_\x08 ?\xb7\xb50\x93k\x83\xb4\xa7\xa6\xca\xbf\x80\n?\xbe\xbb\x10q\x8a\x05\xc9\x1a^\x19\xf1\x840\xbf\x81\xed\x84\xbf\xca\xd6(/\x1f\xcbH\x94\x04\xfc\x8c\x9c:\x07\xe0\xf3R\xf8Wl\xa3\no\xb7\xe2\xaf\xc1j\x19bx\x82\x9a*\xbfZ#\xba\xfe2\xba\xf9\x01\xd1\xb5X\x05\xe9\x1a=\xfd\xd3\x9f\x815-\xe0\x8dVa[\xc2\xac\xfd\xfd!\xe1\xc3 N\x0d\xc3\xaa\x12\x9cz\x87\xcau\x03\x81 N\x9dB\x8b NMp\xeao\x0bN\xb5\x9c\xdb\xd8\xe3\xa9\x1eG7\x02\xd0T\xbe\xab\xde\xc79\xb5 \xf5\x87\xe0\xe9\xdf\x1bvj\xf2\xaa\xa2\xf6\x80N\x04\xd4\xe1\xdf8\xd1O\x17La\x85'\x1c\x9e\x1f8\xbb'\xc8\x89yz8q\xe0\xdc\xb8\x0c\x9f\x0d@;\x1d\xf0\x06\xf0\xe2\xa0\xbeX\xa7\x0f\xd2i\xdf\x0e\xec\xc9\x17\xe5\x0c\xd1\xcc\xb4\x08\xa7\x1b\xdf\x0cB7\x9d\x88\x0f\x84b\x9b\xe3\x90\xcd\x89q\xcd8Ts<\xa6\xe9\x81h\xba\x0c\x85 \x0f4\xd3s2\xbb\xc2)\x82\xa6\xc51m\xd3\xdc/Z61\x82\x19\x8f_\xba\xd4\x17\x83]Z\x855 \x97f\xdc\xd29\x0e\xfc\x8c\xd6\xb4\x88\xa5\x1f^iE+\xc3\xfae\x1cI\x13\xe2\x94\xbe(\xa5\x19\xa3\x0c\xebS\x10>95:i\xc3&\xc3\xbaa\x1crQ\xa8$\x97\xde\xc0\xd0\x13\x93\x8cA$\x9d;\x0cEF4r\"\xa5M\x85C\xc6\xa3\x90\xde`\x99\x1d\x81\x9cN\x1f\xd3a\x8f\xa1\xc8\xe38\xdc\xd1S\x91n;7\x0eq\xb4\xe0\x8d\xbe\x10\xc6D\x08F\x020\x12\x80\xf1\xf7\x03`\x0c\xbd\xdc\xde\xf0\x13n\x85\xa5\xc0\x08\xfb{7?~\x18\xbb\x1bqd-(\xf3?\xf0J\xed\xfa\xe0F\xe9\xcf\x9c\xdf\xe0R\xe9Ay\xae\xf2\xe6\xef\xfb\x8e\xed\x11\x91'\x8a\xcb\xc5\x15.\xd1\xbc\xc0\x0b\xdbB\xf8[\x08\x1dY\xbb)H\x17Z\x1d\x92\xdf\xc2\x0f\xf0\x1e\x97\x8b\xefD\x93\xe2z\xcf\xfe\xad1\xbf\x04\x10\xb5s\xd7\x1c-`\x8c\x19WS\x16\xa6W\x07^\xb2\xc5\x9amI\x16\xe7\xf0Q\x9c\x05\xef\xf6(/\xd5m\xee9\x85E\xfb\xac\xf1R\xaaW\xa4\xe2w\xb4\xd1\x9c\x9e\xb6W\xe7\x94\xf8S\xb1c\xbe\x1eS@W\x1b\xb2\xcc\x87\xed\x82M\xc9L\x0e.c\xbb\xefkR\xf1\x9b`\xc4\xcd\x99\xe2\x8e\xc7\x0d*\xf3mS\x88\x0d7\xdf|\xe4\xb4\x97z\x94\x9b\xbeDI>),\xec\x06\xe3\xeda\xac\x7fO\xcf\xb9\xfd\xe9\xbbO\xff|*\xda\xe2 \x0b\xfe\x9c\xd3Zl\xba\xe7(\xbb\xf9\x84\xaa\x85\xa9\xd9\xfe\xe5\x9ed\xd9\xf6~\x99\x17X\xbb\xcb\x93\x0e\xc8\x95\xef\x047\x8d\xf9\xde`\xb9\xb4\xde\xdf\xaf\"0\x1a\x83\xab\xe1\xa5\xf7\xd7\x06\x17\xaew[:\xf4\xd6Z\xa0\\\x18y\x9d\xb5\xe4\x92%\xb7,\xb9e_\xd2-\x0b\xf2p\x0e'\xa8\xce\xcf\xe9\x9a\xden\xbd\xb4\xee\xdfqY\xb3\xbf\xabqj\x9am<\xfe \xbc<\x89\xf5\xd6MU\xd2\xfe)G\xb1/\xe3\x17\x17\xb7\x17\xbfv\xdaj\x99Q\\\xd7y\xb9\xeab\xca\xcf\xcb\xdd\xa04\x02\xdf\xe2\x11,n\xd5\xe5\xee\xced\xbe\x9a\xb7\x9ff\xf4\xd1R\xda2'wX R\xda\xb2\xa4\x94\xb6\xac\x88\xaf\xb4\x9d\xc9\xecY\xe2j\xff\xc6\x80_Hu\xab\x7fn\x1fJ^\xe6\xe0\xd7\xe4e\xde\x81\x97\xe9\x0c\xfe\x19\x8b\x1f\x0f\xa6\x8dxX\x99\xd0\xd61\x93\x7f\xde\x91\x06>\xa1\xb2\xe6\x1bhh\xb63x\x8d\x99\x0b'\x8c_M\x98\xbb\xdac\x87\x8ab\xe8\x8aBd\x8e\xdb\xf0#k>\xafAw\x19)\n\xcc/\x8a\x7f%5\xb7i\x8a:?PTJ\xf3\x0e\xcb\xa1Mi\xdew\xa8\\w\x82rJ\xf3\x9eB\x8b)\xcd;\xa5y\xff#\xa4y\xd3\xad\xdcd^\x05\xdd(\xdcY\xed\xde+\x0e\xda+\x86\x19\x7f>\x16\x9dw\x0d\xb7\x0c\x07\xf7\xe4x$\x14\xe9\xeb\xf2\x1f\x08&\x1fz\xb0A\x99tK\xb1$\x9fp\xcc\xb4\x85\xe4\xa3\x8a\xc8?\x90[\x8a\xdb)\x9c\xee+\xeeS\n \x0d\x1fN\x01\xa4\xc9\x02H\xc3\xc5E\x1bFZ\xf5\xe2H\xedM\x0e\x03\x86]\x9cr\xd8\x91\xfd5\x0f\xc7T3\xd3=\xe3N\xa9\xaaz\x8a;=\x94\xb8\xd3\xc8[\xb74\xab\xdd\xb4\xb9g)\xf0\x13\xbb\xabN\x81\x9f;T\xae;d\x91\x02?Sh1\x05~R\xe0\xe7\xb7\x15\xf8\xd1\xc7}\x9a\xed\xb6\xd8\x99\x03<\x1f\xd8Xx\xcf\x1f\xea\xc5s\xc4\x18\x11o\xf7b9\xda\xbc\xe9\x0e\x97G\xaaK\x0f4\xf8\xd2UH\x97\xee\xc3\xa5K\xa1\x97\x87\x13z\x91\x9bZ9\xe2U\xc8\xa5\x1d\xffm\x88e\xf0\xa2w\x84E\x1bv\x88\x08\xbbh\xb88m\x8e\xa0\x14\xa0\xe9R\n\xd0\xfc\x1d\x04hL\x1d\xe1K^g\xd1\x89?\xcd\xd7]\xff\x8cg\xf9\xda?\xa6\xa8\xca\x81~RT\xe5\x8bFUR\xac\"l#\x98b\x15w\xa8\\\xf7.;\xc5*\xa6\xd0b\x8aU\xa4X\xc5?L\xac\xe2l\xbe\xbb\xeal\x8c\xb5'\xa0\xf8\x83o\x97\xfd\x0c\x94}\xacBf\x9a\xf0\x0d\x9b6^\xa1\x18\xf2\x8e| '\xbfc\xbc\x1e\xc3/\x16\x1bn\xe3\xf7\xab]wO\x1d\xba\xfb\x0b\xbaE\x93)\x0f\x9eq\xdf\x90\xb52\x81\x86rz\xf2\x8a\x90YV J\x1d\n\x12\"\xb2\x97D\x1f;/\x9ae0h\xaeU\xdd7\x0e\xd5]\xee\xea5)-\xca\x13R\xbd\"\xe4d6\x9b\x99W\x83Vq'\xd6g\xf8\xe0\xe3j\x8d\xd5*cr!\x94\xfa\xf2\xbb\xf7/\xde]\\~x\xfb\xee\xb1-\x94\xbb\x1f\xa8\xf6\x86E\xd3vu\xfe\xd1\xa1\xce\xef\x89Y\x93\\\x95\xe7\xcf\xe0w\xdb\xf9\xec\x15!\xbf\xccf\xb3_\xcd\x0f\xa3rw\xca\xdcP\xf6\xc6V8Q?\xa2\x8a\xaeQ\xc1\x94l\xef\x88M\x85C),\"\xe4\xcb\x81\x00\x1f\xcb\xcd^\x04. \x9f \xfc\xa9\x7fz\x06e^X\x07\xb8].\xc3H\xfe\xc0\x8f'd7\xad-V\x1b\x0d\x98\xef\xf6n\x97Z=D\xee\xbc\xde\xebUyw\x0d5\xf8,\xc7\x1a\x97\xea\x8c\xed\xdfg\xfc\x07\xe6\xae\x1e\xab[\x91\x94\x1f\xc7G\x82im\x10#D\xdfX\xbb\xb4\x94\xc5\xae\xadI?\x0c\x16\xb4n2\xa0e\x8duI\xe5\x82x\x1c\xe3\xf8\xecX\xdf\x94\\\x13\x95\xc8|\xb7\xdbF\xe9\x8f\x96\x84\xcc\xe6\xa8\xe2\x9d\xfd|\xb6\x9b\xfd\xedHh\x91\xef\xbd\xb4\xfc\xcc[Q.\xea\x11\xe3\xc1\x96C\xed#\x7fy\xff\xf6\x8d\xfe\x97g\xcf\x9e=3\x8f\x01\xf6\xde>\xe6\"\xfcH\xc2\xcc\x81t\x82\xc4\xbe\xae\xa1m\xacw\xd5\x14\xa8\xd2\xf3;d\xc3^Y\xe0\xbd\xdbr\nx3\xc7\xfcn\x009\xbbO\x85;\xaecg\xbaN\xab\xe3R\x88\x94\xa0\xeb\x7fg\xaa\xbb\x96\xc1\x84\xd6m\xeb~\x1c\xfd\x04\x91\xe6\xe7\xdc\xb2\x01A\xd9\x0d\xb3A\xfb\x0d\xf12/\xb0y\xddP6\xeb\x12W\x94\x94\xd6i+#q\xcb\xbc\xa2\xf5\x15\xff\xc2\xcf\xe0\x89\x99s\xfb\x02\x1b\x94\xea\xf9\xa7\xe1+\x18\x80U\xaa#\xae\xcb\xa3s8\xd2\xcd\xda\xbe\x1af\xa2\x97G\xa76~\xbc\x7fo\xd0\x86\xf1\xfcW\xd1\x85\x7f\xb3\xbe\xc0\xfa7x>\xb4\x93\x17K\xb9\xe1\xea\x8f\xb5\x16@\xf8\x84\x8b\xe2\xab\x9b\x92|\x12\x89hkD\x01\xd9N\xa8\x99'W\x7f\xc8\x9f\n\x07~0\x0f\xf6\x07\x8f\xa48l\x00\x9b\xce\x02\x8a!\xado\xec\x9aOF5\xce\xd7\xa4Xts\xde\xc4T\xce\xcbv~\x80\x88\x00\xeaY\x89)\xa3o\x87\x8b0k\x17\xe7\x13f\xd7\x94\n\x0fBC*b\xfa\xd3_\x7fzl\x99HS\x8c\xb9~\x83\xf6a\xc7U\xc5X>\x99=}\xf2\x94\x1eY\x86\x90\xf8\xaf5\xdfi\x7f\x895L\x91\xa8\x04\xee\x83\x0d=\x9b8A\x83\x8a\xb3@\x1b\xa7\xe5m\x82#\xdb\xdeT\xfd-{L\x93\xf6t\xe4\xf7\xb8\xba\xcd3\xec\x91\xeb5/HvC\xcf\nTc*\x91=]\xba\xd7\xf7\xb8~\xcd\x1f\xf9\x96=\xdf\xde\xa7\xc0\x91e\xfew\xe0\x8c\xb4I\xc9\xfdw\x1f\xa9\xfe=\xd0\x8c'\xde\x8f\xab\xdcx\xab@TN\xcd\x88;\x18\x1d\xc1\xa5-\xaa\xea+\x8a\xeb\xab5F\x0b\xac\x81C\xc1%98\xa5gd9\xd9 N\x0cU\x91\x0d\xa5WdV\x15\xf8\xa8\x0b\xdc*k\x8f_^\xa2\xaa\xa6\xb8\xfe\x81k\xee\xf0s\x8b\x87\xf8\xa0\xbdx\xa9\x1b%\x9a!\"\xaf\x80\xed^,\xb5\xe5\x91Z\xee{_\xd3\xc5\xcd\x15\x7f\xf5\x1a\xf2\x92\xd6\x18-\x0e/~\x1d3\xcc\xeev\x0c\xc8\xb8\xba\xe5\xeb\x88\xee\x8b\xcb,y?y\x02\x9f\xe3kZ\x93\xc2|\xe4\x02\xf3\x07\xe9\x92\xd7\xd8\x01\xbf\x93\xc8\x82\xd0v\xfbe\x9b\xf4 \xd6\nz\xc1\xcccI\x1b\n\x19\xda\x8ad~\x89L\xca?WM!\xef\xd7\xd9V\x84\xd9U\xbb\x88\xa8\xfd\x9e\x02Ee\xff\xc3\xef\xba=\xb5D\"\xbaY\xb5\xcc\xe7k_\x12\xd9]m~\x0cU\xdb[!\x95\x85\xa1\nz\xefa\xb1c\xcb%q\xc0\xaf1\xc1PW\xa8\xa4\xc2\x07\xdc\xa0l\x9d\x97\xdaH8#.\x9d\xd6\xfa+\xf2\xf8\xa4\xa6\x0c&E\x1e,\xfcle\x9d\x9b\xae\xb9\x86\xd0f\x16\xa8\xc6_1~\x86'\xf9.\xcb\xbc6*\x9apF\xdb\x17\x02\xf0\xed \xf8,\x08\x82\xbc\xd6RE^=\x05\xef\xde\x82{\x8dm\x1f\xf3Zk\x15\xf9\x8c#En\x95C\x88\xda\xc1_\xf5\x9ek\xf2\xe0a\xfd\xda\xac\x88\x0f\xd9\x8cl6ym\xb9\x04\x1b|{\xe4\xd5\x13)\x18kN\x94\xb1\x15Vs\xb0a\xea\x12\xfb\xe9\x0b\x89\xc7!ET\x93\x8a~\xa1\x06\x87\xfaXV\xfc\xa2\x7fn\xbf\x814\xf5\xb6\xa9\xf7\x7f\xdbV\xf8V\xa8\xcb\xc0\x8d\x9f\xe2\xff\xe2}hW\xcc/\xd4\x1e\xdan\xbfPK|~\xc8\xbc\x91/\xd4$\xbe\xcd\x17\xb8\xcc\xf0\x17j\xae\x1d\x7f{\xb7\xc7\xe2\x8f2CM(\xae\xaed\xcd\xce\xbb\x96\xaf\xe7\xcc \x83\xd7\xcb#\xde\xa7\x0f\xf3\xb3\xbf\xc2\x92\x88\xa5I\x0b\xe4\x1b\x8f\x1a8\x97*\xf7\x12U\x7fv\xaa\xc3|0\x04\\\x87C\xc0W\xa7\x1eZ\x85 7\xf9\xc3g\x99\xe8\xa7\x82\x92\xdc\xb3\x14\xa8\x8f\xf0\x1d\xff]F6~\xe0N\xdd\x1f\x9eX0LuF\x97\xa7.\x16\x05S\x1a\xb4\xd5\x93\xb8\xe1\x9a\x01\xfc7>\xae0\xfcOCk@\xab\nc{we\xa6\x1a?\xe6.B\xe3\xd6\xf6yJ\xeb\x06#u\xb9\xa5\x10\xfd\xf9v\xfb\x03\xa2\xeb\xfd\xfd\x94\xb2\xec\x01cMm\xabr\xfd\xd9\x901\xe3*\xc4\xf4R\x9c\x04\xe9\x00\x0f\xbc\xb8\xc7Rx\xe2H\xa6CH1\x1c\x97 \x9b\x96\x04eK\xeel\xcc\xdb\x1b\x80i\x07\xbe\xd3\x91t\xcb+\xa8=\npuKj|\xe5\xee\x84 O) @\x12F\\\x06\xeb (E\x01\x02@\xa0\x10\xa0\xd8{=\xe9m\x8a\xba\x84\xcb\xc6zy{\x9f\xbe\x82\xf7\x17\xdf\xbf\xf9\xee\xe5\xd5\x8f\xef\xbf\xbf\xfa\xf0\xff.\xbf\xbb\xfa\xf8\xe6?\xde\xbc\xfd\xef7#8\\\xbe\xfb\xee\xbf\xde~\xf8n\x1c\x87\x17o\x7f\xfc\xf1\xe2\xc3(\x1eo/\xdf\xbe\x7f\xfe\xda\x93\x85:Q2R\x1f\xfe\xf6\xbeO\xef\xf3U\x89\x17?\xd2\xd5\x87\xf6$M-\xd3\xcb(\xff\xc9\x9bS'7\xa3\x17f\xb1Z\xeb\x01\x19\xbf\xe99\xfc\x17\xa9\xada\x91\x01\x99\xbf\xcb9\\r/\x07\x15~\xec\\\xa1\x8c>EL\x9c\x90\xed\xa9\xa0\x8a4\xa5%\x02\xd1\xa7\xb0\xbd\xb2 \xdb\x89\x1f=\xb9\xe3\"}\n\xb4u\x10a\xef\xc0{;\xbf\xa7\x88\xcf\x07\xbe.\xd9\x90\x82b-}\x8a\xd0\x1eDj\x90\x91gT\xa6O1\xe3NQ\xf8\x94P\x14\xfa\xc1!\xfe\xa3C\xec\x87\x0f\x8c\xf4\xf4\xc9+\xee\xd3\xa7:\xdf`Z\xa3\x8d#R\xbf\xa7\x08\x85\xf8\x06Q\xfb\xd4\x862\xdc\x1b\xce>\x8d\x90\xd0\xfbS\xed\x853TT\xd0S\xcc\xb8\x0f\xb7\xb7m\x85\xa20\xb1\xeeRc1.\x08[\xd5\xf7\xc91\xcc\xfb\xd8V\x98y\xcc\xa7\xf2\xd4\xcd&\xe7'\x86\xbc\x98\x89\xc7\xb9\xc3-bj\xfbH\x19\xeb\x8b\x9f\x1f\xd2\xf1[\\\x8fr\xcf~\xee\xf3\x01\x02\xedu\xa8\x9dN\x9e\xfd\x80\x92g\x9f<{7%\xcf\xde\xf54$\xcf>l\x0d\x14\x94<{#\x85O E\xa1\x1f\x1c\xe2?:\xc4~\xf8\xe4\xd9+J\x9e\xbd\xa0p{\x9b<\xfbC\xfa\xd2\x9e=7\x8bW\xb7\xa4\xce\xcb\xd5\xd5\x96|\xf2\xb3\xe1\x81\x1f\"\xcc\x14\xee\xc7\xec\xc3\x90'\xc8\xf4DJ\xe2krB\xc7\xe7K\x05\x10\xb1A\xfa\x9d\x84\x87\xf6`\x9d\x02\x8c8\xe8\xecd\xd6~\x18\xe9VC\xfd\x890^\xcb\"\xcfx\xf186j\x1dc\xae`\x8e\xe8UV\xe4\xb8\xac\xafP]\xa3\xec\xe6\xbea\xabN\x0f\xae<2K\x05\x05\xc8\x02\x81\xf2\x804\x8dx\x11\xe8U\x05\xca\x04\x11r\x81#\xf1XO\x11\x82A\xa4p\xe0\x93\xba\xac\xa7\xd0\x84f=E\xf6\x15F\xf4\x17\xfcR\xa2\xf5\x14h\xb0\x86\xa4\x0c\x983}ZO\xce\xa4j=\xdd\xa7\xd0\xa1&xH~\xc9\xda\xc1l\xfb\xc9\xdd\x83\x14\xee`n\x9e)\xdfz\xf2M\x04\x0ff\xdcK\x1c\x0fN\x0f\xd7Sh\xd2\xb8\x9e\xdc\xa9\xe4z\x8a\x1e\xc8a\x11\x1dE\xd1\xcd\x85\xfaL]\xb2'\xae\xebi\x02A}]\xaa>y\xa6\xbe\xeb\xe9\x9el\x7fL\xbc\x00\xc6)\x19\xc2\xb7V}\x1a\x118R4B\xdb0R\xe3\x10\x1bPR\x14\xb3\xc1\x1eR\xfc\x8cT\x14;p`\xfc\xe0\x81\xb1\x03hT\x00JQD J\x91\xff\x81\x03=\x8d\xd0\xdf\x08\xbd\x85\x1fY\xd0\x93\xc7A\x06=\xddG\xb7\xbd\x8f\x11\xe8\xe9>Dvg\xdd\x9a\xc9\xf7\xfcE0c\xdby\x0d=\x85\x9d\xe2\xd0\xd3}\xa8\xdf\xf7\x1c\x88\x9e\xeeCb\xf7I\x12=\xdd\x87\xac\x01gQ\xf4t\x1fB{\x9ef\xd1\xd3}\x08\x1cv\x1eFO\xfe\xa7d\xf4\xf4\xe5\xfb=fw\xeey,'\x88\xa7\xf9\x08\x8f\x9e\x84G\x11\xa2\xe7H78\xd6\xfd\xfd;\xdax\x06\xa5\x18(\x1a\xe3\x99\x87C`\x8a\xd2\x8e\xd3\x87\"m\x82\xa0\xb4\xe3\x8c\x1e\xd7\x8a\xe2\xa7\xa2\xa2\xd8\x81\x03\xe3\x07\x0f\x8c\x1d@\xf7\xbd\xe3\xdc_\xd5\x19\xaaA\xa19\xfb\xd15=9\x0f\xb4\xe9i\xd4D\x197M\x94%\xbdZ\x16Hs\xfd\x9c\x0f\x8d\x1ehai\xa4}\xfa\n\xbe}\xfd\xf6\xc5\x7f\\]\xbc\xbcz\xf5\xfa\xf9\xf7\x81)\x94C\x1ar{\xfe\xed\xfb\xef\xde\xf8g\x86\xf6i\xc8,0\xcd\xb4OCfo.|\xb3M\xfb\xd4\xe6\x9eN\xa7\xb6\xf8\xad\xb7 1\xb9\x17\xaf\n\xb4j/)W\xb7}|[d\xe4\xe6\xe2e\x14(#\xa85\x03\x90\x8b\x94\x10\xd7\x0b\x87\x14\x9d\xb2\xd4\xa7\xd1\xf3d\xb49\x0eH\xcc8\xa4\xc9\xc4\x8fC\x1a\x04\x05\xe7@\xf5i\xb2>D}\x821\x9b-A/\xf8v\xe7}\xbe\x12i\xdb\xccGS\xb8\x1eO\xabR\xa7\xc6#X\xf3;`\x05\x7f\xff\xed\xd7\xb8>\x89\xd6\xfag\xe1\xdb\x14\x1b~F?,\xca*\x82\xb3\x9f\x10\x95\xdb\xc2Z\xd4*@\xf2\x80}\x10\xaf}\x14\xceO\x1b{\x1bA\xb1\xf7v/b\xdd\x8fY\xed\xf7}\xf1\x7f'\xd6\x0b\x8a\xf0\x80\"\xb4 (F\x17\x82\xa2\xed\xf8(\x032\xc2xl\x9b\xf9\x95\xe3jV=E+\x17F)\x98\x11^<\xfd\xd3\x9f\x9e\xfc\x9f\x98WG*\x1a\xc6)\x1b\xf8m^\xd9\xf6\xe9\x9f\xfe|\xf3\xe4\xefQ\xfc1\x1e\xd9e3/\xf2\xec?\xf0\xae\x17\xd8\xbb\xc1;\xda\xb9\xac)\xce\x8fj(\x16\xb7\xda\xfcWk\x90\x02\xb9\x84&\xde\xf6i\xd4G\x19\xb3\x99o\xe3\xc2\xdb*'U^G\xcf\xe3/*\xbb\x92:D\xd8Hs\x13kh\"\xed\xf8\x08eF\xcf\xcbH\x0b\x1e\xa9P\x18\xa1T\x18g\xbbG(\x17\xc6(\x18\xc6Z\xed\xfb\x13<\xde^\xdf\x99\xb5\x1ek\xab\xc7X\xea\x11\x1f\"\xce\xd2\xc1\x146\xfa\x8bK\x1dw\x16EQ\xa4\xb8a\xa2\xb2}\x18)\xaf\xfcA\xb0@\xa9\xc2\xa4\x99\xef\xfe\x86\xca:/\xf1U\xd8\x8e(l'\x14\xb0\x03\n6\xee\xe1&=x\x85\x0c\xfc\x02\x82\"l_\xf0z\x18\xac,\x88R\x18\xc4\xae~Q\x8a\x838\xe5A\xfcZ\xf7e\xc5\x8cY\xd9\xee`M\x8b_\xcd\xe2\xcck\x94\x92\xc3\x8c\x99\xa0\x11\xab\xd6\x17\x901n\x85\n\x14,P\xa4\x90 x\xa4$\xbe\x01\xee\xd0\xd8\xe9k\xb6\x8a\xbe\xe0g\x01\x9f\xf3\xa3\x80cO(\xca\xc2\xa3\x9d3\xb3\xa8\xae\xf1f\xcbO'\xd6\x0469-0Z\x00\x12\xe7\x10\x9d\xfc\xc49E]\xc0\xb4\x93\xfe\xabW\xbc\xd3\xba\xbb-\xb9\xcb\xcb\xf0\xfa\x9a>\xa3\xc9\x91(#\xdaq\xa5\x0e\xf8$\xbf\xb8\xd3\\\x9cj\x03/\xd5\x81W\xae\x81\x97\x02\xc1\x7f\xa9\x08J1\xf1\xea)x\xf7\x16\xc0;A\xc4\xef{*\xf2\x19@\x8a\xdc*\x87\x10\xb5\x83\xbf\xea\x03\x933\xbc\xd20|\x12.|\\i\xa7\x03\xed9\x14|\x07BP\nD\xc0\xc7\xf0Kk\x88M`\x88LU\x88LJ\x08O?\x18\x95h\xe0\xef6N\x95<\x10\x94&\x10\x9c\x10\x100j\x02&\xb0\xa7'\x13\xd1\xb8\x9f\x07\xe3\x0d\xc6GH\xe0\xe8~\x88\xeb\xe4\x0b\x9as\x08\xdc\x83\x93\x1e\x10\xf6\x93\xc8\x03\xf26\xc0\xd8\x06\x86\xe8\xd0\x89\x1b\xca\xd7^\xacv\xf8\x99\xd4\x9dl\xef\xf32\xe3\xa9\xeftC\xe8Wtq\x03_\xcf\xfe\xf8\xcf\xe9\xfe5\xd7\"\xe3\x96\x0b\xfc\x8a\x0dx\xcf\x105?\x9cg\xf1\x9d\xa5\x02\xa6n\xd2o\x02\x80\xf7\x91~H\xf7\xaf\xf5\xc9}h\xde\xe3\x93~\xb1MR\xba\x7f\xcd\xddA\xf0_\xf0\xd2^\xc9\xa9r\x08Q;\xf8\xab\xfe.\xf6J\xfe\xc7\xa1\xbdz\xe4\xd5\x93\xf0\xc3\xcc\x1e\xc7\x96\xa7\x12\xcf\xfb\xd4\xebT\x0d\x0e\xf5\xe1<\xff\x9b\xee_\xf385;UK\x01g^\xa7j\xd2\xf3\xc4\xeaT\xcd\x85\x9d7\xf5?Y\xea%\x9f\xbf\xaf6l\x98\xed\xa1\xc4\xad[\xf9*/\x91t\x9c\xda\xc7,\x9c$\x83S\xa9\x1c\xb6\xabAl?\xf6-\xce\xd6\xdf<\x95\x12[+G_\x94\xf0\x01\xab[\xdaO\xa1^3Yd\x0d\xebk\xa6jz}\n\xf3\xa6V\x8e\xe0\xfb\x97\xffa\xbb\xf7\xff\x13w9oqUC^CM\x86\xb2\xd8Da\xbe\xe9\x1c\xd75\xae\xe0\xe3\xff\xf5\xd8\x10\xba\xcf\xca\xee{\x96n\xb3\xe3\xe45\x87\xfc\x07r\xba\xcd\xce\xe6\xe3\xa4\xdb\xec\xd2mv\x87\xe4+ \xa4\xdb\xec\x0c\x94\xee\xbc\x90\x94\xee\xbc\xe8P\xba\xf3\xc2\xeb\x9d\xa0\x82\x14a\x91\x07A>\x18|\x9f\xdcQ\xa6>\x05\xda:\x88\xb0w\xe0\x1d\x1c\xd9S\xc4\xe7\x03_\x97lHA\x91\xab>Eh\x0f\"5\xc8\xc83\xc6\xd5\xa7\x98q\xa7(|J(\n\xfd\xe0\x10\xff\xd1!\xf6\xc3\x07\xc6\xcd\xfa\xe4\x15E\xeb\x937 \xaa(B!\xbe!\xe9>\x05\xe3\xc5\x8aFH\xe8\xfd\xa9\xd2\x9d\x17a\x1a\x8bqA\xfe\xae\xef\xbcH\xb7\xd9\xe9(y\xf6\x92\x92g\xdf\xa1\xe4\xd9{\xbd\x93<{\xd7\xb3\x8aB\x1d\xbd\x88\xcf\x07\xe1k\xa0\xa0\xe4\xd9\x1b)|J(\n\xfd\xe0\x10\xff\xd1!\xf6\xc3'\xcf^Q\xf2\xec\x05\x85\xdb\xdb\xe4\xd9\x1f\xd2\x97\xf6\xec\x1f\xe0\xf9\xact\x9b\x9d\x99B\xc7g\xba\xcd\xce\xc54\xddf\x17\"\x17\xa4\xdb\xec\x1c\x14\xd9W\x18\xd1_\xf0K0\xd7S\xa0\xc1\x1a\x922`\xcedt=9S\xd4\xf5t\x9fB\x87\x9a\xe0!\xf9\xa5\xbe\x07\xb3M\xb7\xd9\xb9\x92\xed\xf5\x14\x9a\x82\xaf'wb\xbe\x9e\xa2\x07rXDGQts\xa1>S\x97\xd2mv\x1e4\xc6\xf6\xc7\xc4\x0b`\x9c\x92!|k\xd5\xa7\x11\x81#E#\xb4\x0d#5\x0e\xb1\x01%E1\x1b\xec!\xc5\xcfHE\xb1\x03\x07\xc6\x0f\x1e\x18;\x80F\x05\xa0\x14E\x04\xa2\x14\xf9\x1f\xdf\xd0\xd3\x08\xfd\x8d\xd0[\xf8\x01\x10=y\x1c\x0b\xd1\xd3}t\xdb\xfbP\x86\x9e\xeeCdw\xd6\xad\x99|O\xb3\x043\x0e\xbf\xcb)\xecL\x8c\x9e\xeeC\xfd\xbe\xa7j\xf4t\x1f\x12\xbb\xcf\xe5\xe8\xe9>d\x0d8\xd9\xa3\xa7\xfb\x10\xda\xf3l\x90\x9e\xeeC\xe0\xb0\xd3Ez\xf2?s\xa4\xa7/\xdf\xef1\xbbs\xf7 \x9dp\x0b\x98n\xb3\xe34\xc1@\x08ws\x83R\x0c\x14\x8d\xf1\xcc\xc3!0Ei\xc7\xe9C\x916AP\xdaqF\x8fkE\xf1SQQ\xec\xc0\x81\xf1\x83\x07\xc6\x0e\xa0\xfb\xdeq\xfa\x14W\xd3\x93\xd0\x9co\xf5\xe2.9\x0f\xb4\xe9i\xd4D\x197M\x82J\xb9\xe9i\xf4@\x0bK#\xedSl18=E\x96\x88\xd3Sd\xe18=\x85\x97\x93\xd3\xd3\xa8\"sz\x8a\xdfz\x0b\x9a\xaa \x9d\x9e\x82\xca\xd4\xe9):e\xa9O\xa3\xe7\xc9hs\x1c\x90\x98qH\x93\x89\x1f\x874\x08\n\xce\x81\xea\xd3d}\x88\xfa\x04c6[\x82|\x0b\xf3E\xb0N\xb7\xd9\xf5(\xddf\x17\xe7\x05Ex@\x11Z\x10\x14\xa3\x0bA\xd1v|\x94\x01\x19a<\x82\xef~P\x14\xad\\\x18\xa5`\x88\xbd\x13B\xd1(E\xc38eC\xfc]\x11\x8a\xeeW\xfc1\x1e\xd9\x1d\xdc%\xa1(\xfeN E\xa1\x89\xb7}\x1a\xf5Q\xc6l\xe6\xb7\xf1wN(\xba\x07\xd9\xb7\xe96\xbbC\x8a\x9e\x97\x91\x16D\x9c\xa5\x83)l\xf4\x17\x97:\xee,\x8a\xa2Hq\xc3DM\xb7\xd9Y)\xd8\xb8\x87\x9b\xf4\xe0\x152\xf0\x0b\x08\x8a\xb0}\xc1\xeba\xb0\xb2 Ja\x10\xbb\xfaE)\x0e\xe2\x94\x07\xf1k\xdd\x97\x153fe\xbb\x835-~5\x8b3\xafQJ\x0e3f\x82F\xacZ_@\xc6\xb8\x15*P\xb0@\x91B\x82\xe0\x91\x92\xf8\x06\xb8Cc\xa7\xe96;\xab%wy\x19^_\xd3g4\xa5\xdb\xec\x1c\xd3\xc1s\xa9\x08J1\xf1\xea)x\xf7\x16\xc0;A\xc4\xef{*\xf2\x19@\x8a\xdc*\x87\x10\xb5\x83\xbf\xea\x03\x933\xbc\xd20|\x12.|\\i\xa7\x03\xed9\x14|\x07BP\nD\xc0\xc7\xf0Kk\x88M`\x88LU\x88LJ\x08O?\x18\x95h\xe0\xef6N\x95<\x10\x94&\x10\x9c\x10\x100j\x02&\xb0\xa7'\x13\xd1\xb8\x9f\x07\xe3\x0d\xc6GH\xe0\xe8~\x88\xeb\xe4\x0b\x9a\xffVo\xb3\xf3\x91\xed[q\xfa\x99B\x8d\xdbK\x15\xd8W\x13?\x9c\x8a\xcd\x13\x13V&}o\xcd\xb7W\xc8)\xa1;Z\xbc\xccq\xb1PWH\xe0\x05s1\xe7\xfd\xbb,\xbaO\xdb\xa5\xfe\x1e\xd7\xaf\xd9\\\xaf\xb9\x84\xef0\xdd\x92\x92bu\xd9F\xa5\xfe\x9fwbI*\x8d\x11\xf8\xcf\x06W\xbb\xb3>\x1fxw\xf9b(\xf9\x06\xd7k\xb2\xd8\xcb\xa6,[\xe7\xb1\x9e\xa8\xcfKhJ\xfcy\x8b3\xd6G\\U\xa4j\xe5\xe9\xf6\x90fk\xbc\x19\xd4\x7f7.m\xe6\xc5\x8c7p8\x03-s.#\x0b\xcd\x94\xb5\xbb96wU\x96\x01\x0c\x92a\x81k\x94\x17\x1a\xc3i\xf3\x10\x8c\x9e\x81\xc3#py\x02\xec\xf5\xab\xa62\xfa\x82\x1e\xf6\xcb=\xc5\x04=\x87\x8f\xef^\x9fU\x98\x92\xa6\xca0\x94h#\xe7}S\xe6?7\xb8\xd8\x013\x06u\xbe\xcce\xdc\xa3\x16\xa5\x19\x8d\x0c\xc5\x05\x12U\x8e\x8a\xfcoxa>\xd0\xbf\xadHM2R\xc0\xbcY.q\xa5>\xdaL\xdc\x8b!\xfa\x06\x9b\x86\xb6\xc6 \x90\xd9\xb9*0\xa2\xb5\xb9-Rb8:;\x82l\x8d*\x94\xd5\xb8b\xad`\xbe \x04\x8aW\x1b\\\xb6\x16\xf8\xe3\xbb\xd7\xc7\x14\xb6\xa8^\x1b\xb9q\xa1\xda\x82Q\xe6V\x19\xbbeS\x14;\xf8\xb9A\x05\xd3\xe0B\xe8W6\xc55y\x82(\xe4\xa5\x99\xc95\x13\xe5lE\xc8\xaa\xc03\xae\xb3y\xb3\x9c\xbdl*^1\xe1\xfa\xb1\xe8 gK\xd7\xa4)\x160g+\x88\x91\x1f\x82\x0c\x95\xa4\xcc3T\xf09dn\xf9\x04\xcfV\xb3S\xa6Z^\x0b\xe2hv\xc4\x8c\x19\xbf/%\xcb\xf0\xb6\xc6\x8b\xc7\xb3G\xe6\xd7/J\xd82e\xe7\x19>\x85\x1a\xa3\x0d\x85\x866\x88\xa9C\x94\xd5\xda\xe6\x05\x93\xb4&\\\x19\xf3\xbcD\x95\xd9\x07\xe7W\xb4\xec\xb6X\xde\x95R\xaf\xf1\xce\xdc\xb4\xb0u\xf2J\xa0\x86v\xeb\x81\xd6\xf83\xff\xd4\xcf\xcb\xdd\x0c~ \x9f\xf0-\xaeN\xad\xfe\xd5\xc7w\xaf\x95\xff\xc6X1\xb3m|\x96[P\x0c\xd7\xeb\xba\xde^\x9f\x8a\xff\xd2\xebS \x15\x94D\xfez\xcaGc\x86J |v2\x8d\x98\x19\xe2\x1a\x9a\xad,\x88ji\x17W\xb7\xb8\x12\xaa\xd9\xa0\xad\xbcS\x89K^\x93\xb6**\x8f^\xe6\xe2:\x17d\x8e7.IQ\x90O\xf4\xdc\xf2m\x7f\x0f\x17\xcb}\x8f\xd8\xb0\xd8V\x84y\x0d\x8b\xb6\xd3\xdc\xb7\xa1\xb4\xd9\xe0\x85\xa5\xfa\xea\xef\xd9\xe2\xf4\xc3\x87\x0f\x97\xf0\xfdw\x1f\xd4\x05:\x1f\xdf\xbd\x16sl\xc7\x97g\xb3\x0b\xf4\xd7\xe1\xb4\xf8\xb0\xdb\xe2\x9f\xfe\xfa\x93\xf1\x05\xee)7|<\x88\xf1&\x97\x11\xfe\x85\xb6\x15Y4\x19\x06T\x8a%\xcc\x9cg\xf7{x\xbe/ZB\xf9\x8dA\x88\xe9Lx\x10\x19\xca\x98m!\xe4\xa6\xd9\x82<& sD-Y\x90\xc4U\xe5\xe5\xe3\xbb\xd7\\\xc65\xba\xe5Cp\xd3\x99C\x0b1\x89\x90\xea\x12\xfb\xf7-\xc9\x17\x80J\x1b<$\x04\xe4\xe6\xa3\xc2KR\xe1S\xc5\x80\xf1Eu>\xcf\x8b\xbc\xdeA\x89\xf1\x82\n\xcf\x08\xb8\xc9\xabn\xad\xf9\x9c\xa4df\xb6\\a\xfe\x12\x9f\xb338\xf9H\xb1\xaa\xeb\xc4\xb4\xc4\x86'\xb3Yb|\xa2\x12\xadl\xbd\x9fW\x18\xdd0\x1b$\x19\xcf\x1e\x9bG\xd4\x1bR\xe3sq\xb1\xd8\xb2)31\xc3X?\xa4\xed\xca\x9a\xaa\xc2e]\xec:\xb1{\x8b\xb9\xe4\x17:-\x97y\x96\xa3\xc2\xb1\x96\xcd\x9b%T\x98\xadD\xf8\x94\x97\xba\xc9k\xd5hC\xf1B8}j^\x1aY\xcd\xf1*/K\xd6Y\xe6\xe2Z\x16\x97\xdd\x16\xcf\xc4\xf8G\xdb\x9c\xce2\xb2\xb1Y\xe3\xf7|\xa6R \xf5Z\x18\x8arh\xa5\xe0D8\xa5\x807\xdbz'\xa7\xf6c\xf3\"\x98\xaf\xd65\xcc-F\x89w\x9a\xfb\xe9\xf9f[`\xb6\xc8\xf2 \x03t\x8b\xb3|\x99g@\xf1\x06\x95u\x9e\x19RZ\xf9\\\x1d\xe1\x02yl\xdd|\xbd\xa4\x1f\x999\x9ac@b[\xd3qp\x0e\xfc\x18U\xd6hNn\xcdcZ\xaa@N\x05\xed\x0dq\x1e\x92]?/w\xd7\xfb\xbd\x1b*\x01U\xf3\xbc\xae\xd8$6K\xa8e\xa5\xd6\x08T\x109\xf4\x00\xe9?-\xb3\xce|\xa1\x11\x12\xce\xfbn\xe1\xc0\xfdk\xbd:\xc3\xd0\xbcT\x13\xa7\xc8\xe7\\l\xb9\x8eP\xa0\xcdvK*\xbe\x82oQvs\xd6\x94\xec?l\xdd\x16\xe3B?\x83\xe4Bovl\xc8\x12\x9aZ\x186e\x1e(3\xach\xb1\xc8\x85\xad\x80\x15.q\x85j.<\xdbh\xa9JUZ~L\x1e\xf1 \xf5\xed}\xf7\x19\xb1\xc1\x0fO\xce\xe1\x92\xc9\xcf\xec\x82\xec\n\xea\x96+\x7f\xf1\x87?X\x96\xc9W\x84\xc0\x92\x10x\x06\xb3\xd9\xec_\x8c\x8f1aP\xb93?\x80\xca\xdd\x8c\x89\xf1\xaa\"\x9b\x93%!\x8f\xcd\x8f\xcef\xe6\xf5/_\xc2 c\xf5\x91w\xe4\x039\xf9\x1d\xe3\xf5\x18~\xb1\xd8p\x1b\xbf_\xed\xba{\xea\xd0\xdd_\xd0-\x9aLy\xf0\x8c\xfb\x86\xac\x95 4\x94\xd3\x93W\x84\xcc\xb2\x02Q\xeaP\x90\x10\x91\xbd$\xfa\xd8y\xd1,\x83As\xad\xea\xbeq\xa8\xeerW\xafIiQ\x9e\x90\xea\x15!'\xb3\xd9\xcc\xbc\x1a\xb4\x8a;\xb1>\xc3\x07\x1fWk\xacV\x19\x93\x0b\xa1\xd4\x97\xdf\xbd\x7f\xf1\xee\xe2\xf2\xc3\xdbw\x8fm\xf1\xbe\xfd@\xb57,\x9a\xb6\xab\xf3\x8f\x0eu~O,\x05\xec\x98*\xcf\x9f\xc1\xef\xb6\xf3\xd9+B~\x99\xcdf\xbf\x9a\x1fF\xe5\xee\x94\xb9\xa1\xec\x8d\xadp\xa2~D\x15]\xa3\x82)\xd9\xde\x11\x9b\n\x87RXD\xc8\x97\x03\x01>\x96\x9b\xbd\x08\\@>A\xf8S\xff\xf4\x0c\xca\xbc\xb0\x0ep\xbb\\\x86\x91\xcc6\xb7\\\xcf\xca\x16\xab\x8d\x06\xccw{\xb7K\xad\x1e\xe2bP\xbd\xd7+\xa3d\xcc-\xd17u\xacq\xa9\xce\xd8\xfe}\xc6\x7f`\xee\xea1\xa0\xcej\xc7VBY\xd2P\xcbP\x8c\x10}c\xed\xd2R\x16;\xb5\xaf<\x08\x16\xb4n2\xa0e\x8du!CA<\x8eq|v\xacoJ\xae\x89Jd\xbe\xdb\x05,G\xf4\xd1\x92\x90\xd9\x1cU\xbc\xb3\x9f\xcfv\xb3\xbf\x1d -\xf2\xbd\x97\x96\x9fy+\xcaE=b<\xd8r\xa8}\xe4/\xef\xdf\xbe\xd1\xff\xf2\xec\xd9\xb3g\xe61\xc0\xde\xdb\xc7\\\x84\x1fI\x989\x90N\x90\xd8\xd75\x14\xabp\xeb\xaa)\x90\xa1\xdc\xf6!\x1b\xf6\xca\x02\xef\xdd\x96S\xc0\x9b9^,\xf6\x0e\x8c\x888k\xd9!C\xf4\xa6\xe3R\x888\xf3\xf5\xbf3\xd5]\xcb`B/\xe4\xae>\x8e~\x82H\xf3sn\xd9\x80\xa0\xec\x86\xd9\xa0\xfd\x86x\x99\x17\xd8\xbcn(\x9bu\x89+JJ\xeb\xb4\x95\x918~\x9f\xed\x15\xff\xc2\xcf\xe0\x89\x99s\xfb\x02\xcf\xb0\x90\xcf?\x0d_\xc1\x00\xacR\x1dq]\x1e\x9d\xc3\x91n\xd6\xf6\xd50\x13\xbd<\xb2\xdd$}\xc4\xfb\xf7\x06m\x18\xcf\x7f\x15]\xf87\xeb\x0b\xac\x7f\x83\xe7C;y\xb1\x94\x1b\xae\xfeX\x13\xa3!\xa7\xf0 \x17\xc5W7%\xf9Tr;\xb3\xe6\x97mg\x0d\xad\xc9&pr\xf5\x87\xfc\xa9p\xe0\x07\xf3@\xdd\xaa\xdc\x8a\xc3\x06\xb0as\x85\xc4\x90\xd67v\xcd'\xa3\x1a\xe7kR,d\x89\\.\xb9\x98\xcay\xd9\xce\x0f\x10\x11@=+1e\xf4\xedp\x11f\xed\xe2|\xc2\xec\x9aR\xe1AhHEL\x7f\xfa\xebO\x8f-\x13i\x8a1\xd7o\xd0>\xec\xb8\xaa\x18\xcb'\xb3\xa7O\x9e\xd2#\xcb\x10\x12\xff\xad\xd1\xaa\x03\x1a|\x05\xefqu\x9bgL{\xc7g\x19\xa1\x1bB\xcf\xe6\x88\xe2\xb3=nvv\xfbd\x8ek\xf4\xe4\x8c\xe3x\xf4\xec\x17\x91\x97\xf4\xeb\xb1`\xb3\xda\x1f\x0f\xa5\xcdf\x83\xaa\xdd9|\x8f\x05\xfa\xf4\xedN\xdc\xa4\x0d?7\xb8\xca1\x95P S\xf4*\xbf\xc5\xa5LqRV\x8bl\xb1\xe8\xf3\xc5\xe2\x90\x87|F\x01O\x9dN\x1c?\xfd\xfa\xebc3z\x05\xb4\xc92L\xe9\xb2)\xee\x12\xb62\xe76\x19\x99\x81\x13\xca1'\xd48\xe3\x17\x8e\xe8\x85W\xae\x92UrpJ\x0f\xee\x9c\xa4\xda+\x17\xc9'\x07\xc9\x9e{\xe4T\x17\xb8U\xe6\x99cd\xcd-2\xd4i\x97\xef\x1c\xbfd&5C5^\x9c\xc3\x96\x87\x02\xb9swM\x177\xa2*\xf15\xe4%\xad1Z\x1cO:\xcc\xeev\x0c8\x0b\xf2\x87\x96\xdew\xca\x04^r\x81_\xe1|\xaf\xb1\x03\x9d\xf1\xe3\xac+\xef,{?u\x93>\xd1@A~\xe5\xe9\xa1_n\xde\xd6\xd5^!z\xdf\xc2\xf2\xbe%\xe4\xfb%\xe1-\x0cC\x8b\xc5\x87\x96\x85w\x17\x80\xf7\xf8\xa4_,\xe1\xd7^\x92=\xa8\x19Wf\x95gA\xf5 g\xb4; \xd5\xab\x83\xe0\xb3 \x08\xf2ZK\x15y\xf5\x14\xbc{\x0b\xee5\xb6}\xcck\xadU\xe43\x8e\x14\xb9U\x0e!j\x07\x7f\xd5{\xae\xc9\x83\x87\xedy\xbf\xfe\xa5\xbd\xbdz\xe4\xd5\x93\xf0\xc2\xdc\x1e%\xb8\xa7\x12\xcf\xbb\x82\xf3T\x0d\x0e\xf5\xe1\xacem\xad\xcc\x1aV\x85z\xaa>\xf8\xd6\x90\x9e\xaa=w\x05\xe8\xa9Z\n\xa8\xdfEL\x9c\x90\xed\xa9\xa0\xa0\xeb\x00\xc2\xf6\xca\x82lGJ\xf4\xe4\x8e\x8b\xf4)\xd0\xd6A\x84\xbd\x03\xef\xed\xfc\x9e\">\x1f\xf8\xbadC\n\x8a\xb5\xf4)B{\x10\xa9AF\x9eQ\x99>\xc5\x8c;E\xe1SBQ\xe8\x07\x87\xf8\x8f\x0e\xb1\x1f>0\xd2\xd3'\xaf\xb8O\x9f\xbc\x8f\xa3*\x8aP\x88o\x10\xb5O\xc1\xa7u\x15\x8d\x90\xd0\xfbS\xed\x85\xcb\xcb\x05\xfe\x1c&Z\xd8\xb8\x0f\xb7\xb7\xde\x07|\x15\xdd\xbd\xc6b\\\x10~\xca\xb7\xcd\xbe\xe0g\x80+\xcc<\xe6Sy\xacc\x93\xf3#)^\xcc\xc4\xe3\xdc\xe1\x161\xb5N\xf5\x94%1\xa4@\x0d\xa9\xe3\xb7\xb8\x1e\xe5\x9e\xfd\xdc\xe7\x03\x04\xda\xebP;\x9d<\xfb\x01%\xcf>y\xf6nJ\x9e\xbd\xebiH\x9e}\xd8\x1a((y\xf6F\n\x9f\x12\x8aB?8\xc4\x7ft\x88\xfd\xf0\xc9\xb3W\x94<{A\xe1\xf66y\xf6\x87\xf4\xa5=\xfb\x07X\x1ds?f\x1f\x86_*\x80\x88\x0d\xd2\xb1\x95:\xdb\x0f#\xddj\xa8?\x11\xc6kY\xe4\x19\xaf\xd6\xc9F\xadc\xcc\xf1\x1a\x9eW\xa2F\xe7\x15\xe2\x05D\xef\x1b\xb6\xea\xf4\xe0\xca#\xb3TP\x80,\x10(\x0fH\xd3\x88\x17\x81^U\xa0L\x10!\x178\x12\x8f\xf5\x14!\x18D\n\x07>\xa9\xcbz\nMh\xd6Sd_aD\x7f\xc1/%ZO\x81\x06kH\xca\x809\xd3\xa7\xf5\xe4L\xaa\xd6\xd3}\n\x1dj\x82\x87\xe4\x97\xac\x1d\xcc\xb6\x9f\xdc=H\xe1\x0e\xe6\xe6\x99\xf2\xad'\xdfD\xf0`\xc6\xbd\xc4\xf1\xe0\xf4p=\x85&\x8d\xeb\xc9\x9dJ\xae\xa7\xe8\x81\x1c\x16\xd1Q\x14\xdd\\\xa8\xcf\xd4%{\xe2\xba\x9e&\x10\xd4\xd7\xa5\xea\x93g\xea\xbb\x9e\xee\xc9\xf6\xc7\xc4\x0b`\x9c\x92!|k\xd5\xa7\x11\x81#E#\xb4\x0d#5\x0e\xb1\x01%E1\x1b\xec!\xc5\xcfHE\xb1\x03\x07\xc6\x0f\x1e\x18;\x80F\x05\xa0\x14E\x04\xa2\x14\xf9\x1f8\xd0\xd3\x08\xfd\x8d\xd0[\xf8\x91\x05=y\x1cd\xd0\xd3}t\xdb\xfb\x18\x81\x9e\xeeCdw\xd6\xad\x99|\xcf_\x043\xb6\x9d\xd7\xd0S\xd8)\x0e=\xdd\x87\xfa}\xcf\x81\xe8\xe9>$v\x9f$\xd1\xd3}\xc8\x1ap\x16EO\xf7!\xb4\xe7i\x16=\xdd\x87\xc0a\xe7a\xf4\xe4\x7fJFO_\xbe\xdfcv\xe7\x9e\xc7r\x82x\x9a\x8f\xf0\xe8\xc9v=\x91\x9e\"\xdd\xe0X\xf7\xf7\xefh\xe3\x19\x94b\xa0h\x8cg\x1e\x0e\x81)J;N\x1f\x8a\xb4 \x82\xd2\x8e3z\\+\x8a\x9f\x8a\x8ab\x07\x0e\x8c\x1f<0v\x00\xdd\xf7\x8e\xd3\xe7j+= \xcd\xf9\xde\x1d\xdb%\xe7\x816=\x8d\x9a(\xe3\xa6I\xd0EZz\x1a=\xd0\xc2\xd2H\xfb\x14{\x15\x97\x9e\"/\xe8\xd2S\xe4\xb5]z\n\xbf\xccKO\xa3\xae\xf8\xd2S\xfc\xd6[\xd0T\xd7\x81\xe9)\xe8\x920=E\xa7,\xf5i\xf4<\x19m\x8e\x03\x123\x0ei2\xf1\xe3\x90\x06A\xc19P}\x9a\xac\x0fQ\x9f`\xccfK\x90\xef\xb5h\x11\xac\xf3\x12\x90\xf5\xb24=\x8d\xe9\x93\xc7\xc5jA\xfc\xf4\x97\xb0\xb5\xd7\xad\x05\xf1\xb2]\xcd\xa6\xa3\xbd\x8d\xa0\xd8{\xbb\x17\xb1\xee\xc7\xac\xf6a7\xe7+\x8a\xf3\x82\"<\xa0\x08-\x08\x8a\xd1\x85\xa0h;>\xca\x80\x8c0\x1e\xc17\xef+\x8aV.\x8cR0\xc4\xde\xc8\xafh\x94\xa2a\x9c\xb2!\xfe\xa6~E\xf7+\xfe\x18\x8f\xec\x0en\xf2W\x14\x7f\xa3\xbf\xa2\xd0\xc4\xdb>\x8d\xfa(c6\xf3\xdb\xf8\x1b\xff\x15\xdd\x83\xecJ\xea\x10a#\xcdM\xac\xa1\x89\xb4\xe3#\x94\x19=/#-x\xa4Ba\x84Ra\x9c\xed\x1e\xa1\\\x18\xa3`\x18k\xb5\xefO\xf0x{}g\xd6z\xac\xad\x1ec\xa9G|\x888K\x07S\xd8\xe8/.u\xdcY\x14E\x91\xe2\x86\x89\xca\xf6a\xa4\xbc\xf2\x07\xc1\x02\xa5\n\x93f\xbe\xfb\x1b*\xeb\xbc\xc4Wa;\xa2\xb0\x9dP\xc0\x0e(\xd8\xb8\x87\x9b\xf4\xe0\x152\xf0\x0b\x08\x8a\xb0}\xc1\xeba\xb0\xb2 Ja\x10\xbb\xfaE)\x0e\xe2\x94\x07\xf1k\xdd\x97\x153fe\xbb\x835-~5\x8b3\xafQJ\x0e3f\x82F\xacZ_@\xc6\xb8\x15*P\xb0@\x91B\x82\xe0\x91\x92\xf8\x06\xb8Cc\xa7\xaf\xd9*\xfa\x82\x9f\x05|\xce\x8f\x02\x8e=\xa1(\x0b\x8fv\xce\xcc\xa2\xba\xc6\x9b-?\x9dX\x13\xd8\xe4\xb4\xc0h\x01H\x9cCt\xf2\x13\xe7\x14u\x01\xd3N\xfa\xaf^\xf1N\xeb\xee\xb6\xe4./\xc3\xebk\xfa\x8c&G\xa2\x8ch\xc7\x95:\xe0\x93\xfc\xe2Nsq\xaa\x0d\xbcT\x07^\xb9\x06^\n\x04\xff\xa5\"(\xc5\xc4\xab\xa7\xe0\xdd[\x00\xef\x04\x11\xbf\xef\xa9\xc8g\x00)r\xab\x1cB\xd4\x0e\xfe\xaa\x0fL\xce\xf0J\xc3\xf0I\xb8\xf0q\xa5\x9d\x0e\xb4\xe7P\xf0\x1d\x08A)\x10\x01\x1f\xc3/\xad!6\x81!2U!2)!<\xfd`T\xa2\x81\xbf\xdb8U\xf2@P\x9a@pB@\xc0\xa8 \x98\xc0\x9e\x9eLD\xe3~\x1e\x8c7\x18\x1f!\x81\xa3\xfb!\xae\x93/h\xce!p\x0fNz@\xd8O\"\x0f\xc8\xdb\x00c\x1b\x18\xa2C'n(_{\xb1\xda\xe1gRw\xb2\xbd\xcf\xcb\x8c\xa7\xbe\xd3\x0d\xa1_\xd1\xc5\x0d|=\xfb\xe3?\xa7\xfb\xd7\\\x8b\x8c[.\xf0+6\xe0=C\xd4\xfcp\x9e\xc5w\x96\n\x98\xbaI\xbf \x00\xdeG\xfa!\xdd\xbf\xd6'\xf7\xa1y\x8fO\xfa\xc56I\xe9\xfe5w\x07\xc1\x7f\xc1K{%\xa7\xca!D\xed\xe0\xaf\xfa\xbb\xd8+\xf9\x1f\x87\xf6\xea\x91WO\xc2\x0f3{\x1c[\x9eJ<\xefS\xafS58\xd4\x87\xf3\xfco\xba\x7f\xcd\xe3\xd4\xecT-\x05\x9cy\x9d\xaaI\xcf\x13\xabS5\x17v\xde\xd4\xffd\xa9\x97|\xfe\xbe\xda\xb0a\xb6\x87\x12\xb7n\xe5\xab\xbcD\xd2qj\x1f\xb3p\x92\x0cN\xa5r\xd8\xae\x86_\xd6\xff-\xce\xd6\xdf<\x95\x12[+G_\x94\xf0\x01\xab+\xdbO\xa1^3Yd\x0d\xebk\xa6jz}\n\xf3\xa6V\x8e\xe0\xfb\x97\xffa\xbbX\xfe\x13w9oqUC^CM\x86\xb2\xd8Da\xbe\xe9\x1c\xd75\xae\xe0\xe3\xff\xf5\xd8\x10\xba\xcf\xca\xee{\x96n\xb3\xe3\xe45\x87\xfc\x07r\xba\xcd\xce\xe6\xe3\xa4\xdb\xec\xd2mv\x87\xe4+ \xa4\xdb\xec\x0c\x94\xee\xbc\x90\x94\xee\xbc\xe8P\xba\xf3\xc2\xeb\x9d\xa0\x82\x14a\x91\x07A>\x18|\x9f\xdcQ\xa6>\x05\xda:\x88\xb0w\xe0\x1d\x1c\xd9S\xc4\xe7\x03_\x97lHA\x91\xab>Eh\x0f\"5\xc8\xc83\xc6\xd5\xa7\x98q\xa7(|J(\n\xfd\xe0\x10\xff\xd1!\xf6\xc3\x07\xc6\xcd\xfa\xe4\x15E\xeb\x937 \xaa(B!\xbe!\xe9>\x05\xe3\xc5\x8aFH\xe8\xfd\xa9\xd2\x9d\x17a\x1a\x8bqA\xfe\xae\xef\xbcH\xb7\xd9\xe9(y\xf6\x92\x92g\xdf\xa1\xe4\xd9{\xbd\x93<{\xd7\xb3\x8aB\x1d\xbd\x88\xcf\x07\xe1k\xa0\xa0\xe4\xd9\x1b)|J(\n\xfd\xe0\x10\xff\xd1!\xf6\xc3'\xcf^Q\xf2\xec\x05\x85\xdb\xdb\xe4\xd9\x1f\xd2\x97\xf6\xec\x1f\xe0\xf9\xact\x9b\x9d\x99B\xc7g\xba\xcd\xce\xc54\xddf\x17\"\x17\xa4\xdb\xec\x1c\x14\xd9W\x18\xd1_\xf0K0\xd7S\xa0\xc1\x1a\x922`\xcedt=9S\xd4\xf5t\x9fB\x87\x9a\xe0!\xf9\xa5\xbe\x07\xb3M\xb7\xd9\xb9\x92\xed\xf5\x14\x9a\x82\xaf'wb\xbe\x9e\xa2\x07rXDGQts\xa1>S\x97\xd2mv\x1e4\xc6\xf6\xc7\xc4\x0b`\x9c\x92!|k\xd5\xa7\x11\x81#E#\xb4\x0d#5\x0e\xb1\x01%E1\x1b\xec!\xc5\xcfHE\xb1\x03\x07\xc6\x0f\x1e\x18;\x80F\x05\xa0\x14E\x04\xa2\x14\xf9\x1f\xdf\xd0\xd3\x08\xfd\x8d\xd0[\xf8\x01\x10=y\x1c\x0b\xd1\xd3}t\xdb\xfbP\x86\x9e\xeeCdw\xd6\xad\x99|O\xb3\x043\x0e\xbf\xcb)\xecL\x8c\x9e\xeeC\xfd\xbe\xa7j\xf4t\x1f\x12\xbb\xcf\xe5\xe8\xe9>d\x0d8\xd9\xa3\xa7\xfb\x10\xda\xf3l\x90\x9e\xeeC\xe0\xb0\xd3Ez\xf2?s\xa4\xa7/\xdf\xef1\xbbs\xf7 \x9dp\x0b\x98n\xb3\xe34\xc1@\x08ws\x83R\x0c\x14\x8d\xf1\xcc\xc3!0Ei\xc7\xe9C\x916AP\xdaqF\x8fkE\xf1SQQ\xec\xc0\x81\xf1\x83\x07\xc6\x0e\xa0\xfb\xdeq\xfa\x14W\xd3\x93\xd0\x9co\xf5\xe2.9\x0f\xb4\xe9i\xd4D\x197M\x82J\xb9\xe9i\xf4@\x0bK#\xedSl18=E\x96\x88\xd3Sd\xe18=\x85\x97\x93\xd3\xd3\xa8\"sz\x8a\xdfz\x0b\x9a\xaa \x9d\x9e\x82\xca\xd4\xe9):e\xa9O\xa3\xe7\xc9hs\x1c\x90\x98qH\x93\x89\x1f\x874\x08\n\xce\x81\xea\xd3d}\x88\xfa\x04c6[\x82|\x0b\xf3E\xb0N\xb7\xd9\xf5(\xddf\x17\xe7\x05Ex@\x11Z\x10\x14\xa3\x0bA\xd1v|\x94\x01\x19a<\x82\xef~P\x14\xad\\\x18\xa5`\x88\xbd\x13B\xd1(E\xc38eC\xfc]\x11\x8a\xeeW\xfc1\x1e\xd9\x1d\xdc%\xa1(\xfeN E\xa1\x89\xb7}\x1a\xf5Q\xc6l\xe6\xb7\xf1wN(\xba\x07\xd9\xb7\xe96\xbbC\x8a\x9e\x97\x91\x16D\x9c\xa5\x83)l\xf4\x17\x97:\xee,\x8a\xa2Hq\xc3DM\xb7\xd9Y)\xd8\xb8\x87\x9b\xf4\xe0\x152\xf0\x0b\x08\x8a\xb0}\xc1\xeba\xb0\xb2 Ja\x10\xbb\xfaE)\x0e\xe2\x94\x07\xf1k\xdd\x97\x153fe\xbb\x835-~5\x8b3\xafQJ\x0e3f\x82F\xacZ_@\xc6\xb8\x15*P\xb0@\x91B\x82\xe0\x91\x92\xf8\x06\xb8Cc\xa7\xe96;\xab%wy\x19^_\xd3g4\xa5\xdb\xec\x1c\xd3\xc1s\xa9\x08J1\xf1\xea)x\xf7\x16\xc0;A\xc4\xef{*\xf2\x19@\x8a\xdc*\x87\x10\xb5\x83\xbf\xea\x03\x933\xbc\xd20|\x12.|\\i\xa7\x03\xed9\x14|\x07BP\nD\xc0\xc7\xf0Kk\x88M`\x88LU\x88LJ\x08O?\x18\x95h\xe0\xef6N\x95<\x10\x94&\x10\x9c\x10\x100j\x02&\xb0\xa7'\x13\xd1\xb8\x9f\x07\xe3\x0d\xc6GH\xe0\xe8~\x88\xeb\xe4\x0b\x9a\xffVo\xb3\xf3\x91\xed[q\xfa\x99B\x8d\xdbK\x15\xd8W\x13?\x9c\x8a\xcd\x13\x13V&}o\xcd\xb7W\xc8)\xa1;Z\xbc\xccq\xb1PWH\xe0\x05s1\xe7\xfd\xbb,\xbaO\xdb\xa5\xfe\x1e\xd7\\\xb6ow\xe2\xf6\x81w\x98nII\xb1\xban\xa3R\xff\xcf\xbb\xb1$\x95\xc6\x0c\xfcg\x83\xab\xdd\xd9\x90\xd3P\xf2w\x97/`\x83\xeb5Y\xec\xe5S\xd6\xad\xf3hO\xdc\xe7%4%\xfe\xbc\xc5\x19\xeb'\xae*R\xb5\x12u{I\xb35\xde\x0cj\xc0\x1b\x977\xf3\x82\xc6\x1b8\x9c\x85\x96y\x97\x91\x85f\xda\xda]\x1d\x9b\xcb*K\x01\x06\xc9\xb0\xc05\xca\x0b\x8d\xf1\xb4y F\xef\xc0\xe1\x15\xb8\xbc\x01\xf6\xfaUS\x19\xfdA\x0f\x1b\xe6\x9ef\x82\x9e\xc3\xc7w\xaf\xcf*LISe\x18J\xb4\x91s\xbf)\xf3\x9f\x1b\\\xec\x80\x19\x84:_\xe62\xf6Q\x8b\xf2\x8cF\x86\xe2\x12\x89*GE\xfe7\xbc0\x1f\xea\xdfV\xa4&\x19)`\xde,\x97\xb8R\x1fm&\xee\xc6\x10}\x83MC[\x03\x05\xc8\xec`\x15\x18\xd1\x83\xb9\xb2'Rb8:;\x82l\x8d*\x94\xd5\xb8b\xad`\xbe\x11\x04\x8aW\x1b\\\xb6V\xf8\xe3\xbb\xd7\xc7\x14\xb6\xa8^\x1b\xb9q\xa1\xda\xa2Q\xe6V\x19\xbbeS\x14;\xf8\xb9A\x05\xd3\xe0B\xe8W6\xc55y\x82(\xe4\xa5\x99\xc95\x13\xe5lE\xc8\xaa\xc03\xae\xb3y\xb3\x9c\xbdl*^5\xe1\xfa\xb1\xe8 gK\xd7\xa4)\x160g\xab\x88\x91\x1f\x82\x0c\x95\xa4\xcc3T\xf09dn\xf9\x04\xcfV\xb3S\xa6Z^\x0f\xe2hv\xc4\xcc\x19\xbf3%\xcb\xf0\xb6\xc6\x8b\xc7\xb3G\xe6\xd7/J\xd82e\xe7\x19>\x85\x1a\xa3\x0d\x85\x866\x88\xa9C\x94\xd6\xda\xe6\x05\x93\xb4&\\\x19\xf3\xbcD\x95\xd9\x0f\xe7\xd7\xb4\xec\xb6X\xde\x97R\xaf\xf1\xce\xdc\xb4\xb0u\xf2Z\xa0\x86vk\x82\xd6\xf83\xff\xd4\xcf\xcb\xdd\x0c~ \x9f\xf0-\xaeN\xad>\xd6\xc7w\xaf\x95\x0f\xc7X1\xc3m|\x96[P\x0c\xd7\xeb\xba\xde^\x9f\x8a\xff\xd2\xebS \x15\x94D\xfez\xcaGc\x86J |v2\x8d\x98\x19\xe2\x1a\x9a\xad,\x8aji\x17W\xb7\xb8\x12\xaa\xd9\xa0\xad\xbcW\x89K^\x93\xb62*\x8f`\xe6\xe2J\x17d\x8e9.IQ\x90O\xf4\xdc\xf2m\x7f\x0f\x17\xcb}\x8f\xd8\xb0\xd8V\x84y\x0e\x8b\xb6\xd3\xdc\xbf\xa1\xb4\xd9\xe0\x85\xa5\x02\xeb\xef\xd9\xe2\xf4\xc3\x87\x0f\x97\xf0\xfdw\x1f\xd4%:\x1f\xdf\xbd\x16sl\xc7\x97h\xb3\x1b\xf4\xd7\xe1\xb4\xf8\xb0\xdb\xe2\x9f\xfe\xfa\x93\xf1\x05\xee-7|<\x88\xf1&\x97\x11\xfe\x85\xb6\x15Y4\x19\x06T\x8a%\xcc\x9ck\xf7{x\xbe/\\B\xf9\xadA\x88\xe9Lx\x11\x19\xca\x98m!\xe4\xa6\xd9\x82<* sD-\x99\x90\xc4U\xe9\xe5\xe3\xbb\xd7\\\xc65\xba\xe5Cp\xd3\x99C\x0b1\x89\x90\xea\x12\xfb\xf7-\xc9\x17\x80J\x1bD$\x04\xe4\xe6\xa3\xc2KR\xe1S\xc5\x80\xf1Eu>\xcf\x8b\xbc\xdeA\x89\xf1\x82\n\xef\x08\xb8\xc9\xabn\xad9\x9d\xa4df\xb6\\a\xfe\x12\x9f\xb338\xf9H\xb1\xaa\xed\xc4\xb4\xc4\x86'\xb3Yb|\xa2\x12\xadl\xbd\x9fW\x18\xdd0\x1b$\x19\xcf\x1e\x9bG\xd4\x1bR\xe3sq\xb9\xd8\xb2)31\xc3X?\xa4\xed\xca\x9a\xaa\xc2e]\xec:\xf1{\x8b\xb9\xe4\x97:-\x97y\x96\xa3\xc2\xb1\x96\xcd\x9b%T\x98\xadD\xf8\x94\x97\xbb\xc9k\xd5hC\xf1B\xb8}j^\x1aY\xcd\xf1*/K\xd6Y\xe6\xe6Z\x16\x97\xdd\x16\xcf\xc4\xf8G\xdb\x9c\xce2\xb2\xb1Y\xe3\xf7|\xa6R \xf5Z\x18\x8arh\xa5\xe0D\xb8\xa5\x807\xdbz'\xa7\xf6c\xf3\"\xc8\xbcS\x98[\x8c\x12\xef4\xf7\xd5\xf3\xcd\xb6\xc0l\x91\xe5\x13\x06\xe8\x16g\xf92\xcf\x80\xe2\x0d*\xeb<3\xa4\xb5\xf2\xb9:\xc2\x05\xf2\xd8\xbe\xf9zI?2s4\xc7\x80\xc4\xd6\xa6\xe3\xe0\x1c\xf81\xaa\xb4\xd1\x9c\xdc\x9a\xc7\xb4T\x81\x9c\n\xda[\xe2<$\xbb~^\xee\xae\xf7\xfb7T\x02\xaa\xe6y]\xb1Il\x96P\xcbJ\xad\x11\xa8 r\xe8\x01\xd2\x7fZf\x9d\xf9B#$\x9c\xf7\xdd\xc2\x81\xfb\xd7zu\x86\xa1y\xa9&N\x91\xcf\xb9\xd8r\x1d\xa1@\x9b\xed\x96T|\x05\xdf\xa2\xec\xe6\xac)\xd9\x7f\xd8\xba-\xc6\x85~\x06\xc9\x85\xde\xec\xd8\x90%4\xb50l\xca\xae\xd6X\xad2&\x17B\xa9/\xbf{\xff\xe2\xdd\xc5\xe5\x87\xb7\xef\x1e\xdbb~\xfb\x81joX4mW\xe7\x1f\x1d\xea\xfc\x9eX\x8a\xd81U\x9e?\x83\xdfm\xe7\xb3W\x84\xfc2\x9b\xcd~5?\x8c\xca\xdd)sC\xd9\x1b[\xe1D\xfd\x88*\xbaF\x05S\xb2\xbd#6\x15\x0e\xa5\xb0\x88\x90/\x07\x02|,7{\x11\xb8\x80|\x82\xf0\xa7\xfe\xe9\x19\x94ya\x1d\xe0v\xb9\x0c#\x99mn\xb9\x9e\x95-V\x1b\x0d\x98\xef\xf6n\x97Z=\xc4\xe5\xa0z\xafWF\xc9\x98[\xa2o\xeaX\xe3R\x9d\xb1\xfd\xfb\x8c\xff\xc0\xdc\xd5c@\x9d\xd5\x8e\xad\x84\xb2\xac\xa1\x96\xa1\x18!\xfa\xc6\xda\xa5\xa5,vj_y\x10,h\xddd@\xcb\x1a\xeb\x82\x86\x82x\x1c\xe3\xf8\xecX\xdf\x94\\\x13\x95\xc8|\xb7\x0bX\x8e\xe8\xa3%!\xb39\xaaxg?\x9f\xedf\x7f;\x12Z\xe4{/-?\xf3V\x94\x8bz\xc4x\xb0\xe5P\xfb\xc8_\xde\xbf}\xa3\xff\xe5\xd9\xb3g\xcf\xccc\x80\xbd\xb7\x8f\xb9\x08?\x920s \x9d \xb1\xafk(V\x01\xd7US C\xc9\xedC6\xec\x95\x05\xde\xbb-\xa7\x807s\xbcX\xec\x1d\x18\x11u\xd6\xb2C\x86\xe8M\xc7\xa5\x10\xb1\xe6\xeb\x7fg\xaa\xbb\x96\xc1\x84^\xd8]}\x1c\xfd\x04\x91\xe6\xe7\xdc\xb2\x01A\xd9\x0d\xb3A\xfb\x0d\xf12/\xb0y\xddP6\xeb\x12W\x94\x94\xd6i+#q\xfcN\xdb+\xfe\x85\x9f\xc1\x133\xe7\xf6\x05\x9ee!\x9f\x7f\x1a\xbe\x82\x01X\xa5:\xe2\xba<:\x87#\xdd\xac\xed\xaba&zyd\xbbM\xfa\x88\xf7\xef\x0d\xda0\x9e\xff*\xba\xf0o\xd6\x17X\xff\x06\xcf\x87v\xf2b)7\\\xfd\xb1&FCN\xe1\x13.\x8a\xafnJ\xf2\xa9\xe4vf\xcd/\xdc\xce\x1aZ\x93M\xe0\xe4\xea\x0f\xf9S\xe1\xc0\x0f\xe6\x81\xbaY\xb9\x15\x87\x0d`\xc3\xe6\n\x89!\xado\xec\x9aOF5\xce\xd7\xa4X\xc82\xb9\\r1\x95\xf3\xb2\x9d\x1f \"\x80zVb\xca\xe8\xdb\xe1\"\xcc\xda\xc5\xf9\x84\xd95\xa5\xc2\x83\xd0\x90\x8a\x98\xfe\xf4\xd7\x9f\x1e[&\xd2\x14c\xae\xdf\xa0}\xd8qU1\x96OfO\x9f<\xa5G\x96!$\xfe\xbbE\x15\xda\xe0\x1aw\xb3\x85\xbf\xe2\x96\xf7\\&\x1duX\xe4\xe5\xf90\x94]\xe1\x9f\x9b\xbc\xc2\x8bs\xa8\xab\xa6\xabt\xc3\x86Z\x97BR\xa3U\xaf\xf5\xf7\xb8\xba\xcd3\xc6\xec,#tC\xe8\xd9\x1cQ|\xb6\x87\xef\xcen\x9f\xccq\x8d\x9e\x9c\x95d\x81\xaf\xf2rI\xc4\xeb\xab\xfd\xf1T\xdal6\xa8\xda\x9d\xc3\xf7\xb8~C\x16\xf8\xa2\\\x12\xf8\xb9\xc1\x95\xc2\x1dd\xe0\x06\x18\x0b^\x0dK\xd9J\xb2\xc5B\xd3\x17\x8b\xde\xdb\x8fT\x87\x05\xd2\xd5\x91\xf8\xf8\xe9\xd7_\x1f\x9b\xe12\xa0M\x96aJ\x97Mq\x978\x99tH\xae\x06:\xe9\x92\x91+8A$\xb5\xe9\xbf\xb2VT\xb76\x00\xceF\xf8\x13O-\xa0\xbfG\x94f?\xc4\xac%\xbd\x1dE\xd2\xa7k\xc8Z\xd6|\x9af\xfa_\xde\x90Q\xe7h\xaa\xc8i\x8dK\x9e\xf3\x11\xf5~\x89\xebO\xa42h\xd4\xf1\xae\xc7\x902\xbe\x9b\xadQYb\x1d\xd0\xea\xf1\xb23\xa6\xb7!e~c\xca\xdes0\xe7\xa1\xd1;\x9b&\xf5g\xd75>\xce\xbe\x03T\xdb\xcc\x9d\xe5c\xe1\xd3\xa9\xb7n\xb6\x0b#\x8c\x0e_\x86bt\x8f\xb6\xdb\xab\xe8\x97\xc7\x0c\xc7U\xee\x93\nl|}\xde\xe4\xc5\xe2\xaa\xbf\x1e\x06\xbc\xbe\">\xe6\xd9\xd1\xfa\x02o\xad\xad\x9b\x13\x1c\xad\xc9\x8d\xce1\xef\x1a\x0c\xf2\x19T[\xd3J=F=\x7fL$\xe1m\xc8\xa2)\xb0\x1d\x9e\xf7\xb8B$\xaaQ\xc9\xd7\xf8<\xb5gX\x86\xb5\x99\xadqvC\x1b\xbd\x9f\xdf>\xf5\xa3\x90,\xefl\"\x99\x13\xfc_B\xd2\x0b}\xc9P\xe1\xa2]\xd1\xc5\xcd\xa8\xc1\xd7\nq\xfc>/3^\xab\x94\xf1\xfd\x8a.n\xe0\xeb\xd9\x1f\xbf9>x\xa7\xe7eud<\x90\x9f\xfdO\xc7\x91k\xb3\xa9Z0\xc1\xc8U\x97\x99u\xc0\xc6\x96\x94\xb5O\xc3\x1a\xb8\x91\x8a\xde]\xbe\x18\xee\x1eR>V\xca\xc7r\xcem\x1f<\x0fR>V\xca\xc72>\x99\xf2\xb18\xa5|\xacCJ\xf9X)\x1f\xcbD)\x1f+\xe5cqJ\xf9X)\x1f+\xe5c\xa5|,A)\x1f+\xe5c\xa5|\xac\x94\x8fe\xa2\x94\x8f\x95\xf2\xb1R>V\xca\xc7\xea\xd0\x14\xb91)\x1f\x8bS\xca\xc7\xfa\xad\xe4c\xc5\xe7B\xd1]\x99\xe5\xa5,\xf2b\xc8\x84z/\x9ei\x13\xa1x\xf2\x93|\xd1\x94\xff$\xdf\x91\xbf>\xd8\xf4\xa7^\xf7\xbb$x\xcd )0\xea\x07\x82\x9cP\x9f\xecz \xd2\xd7W\x98\xa2TiARB\xf6\x12\xb2\xb7\xa7\x84\xec%doO \xd9\xab\x13\xb2\xa7\xa7\x84\xec)J\xc8^B\xf6\x12\xb2\xe7\xe9%%d\xaf\xa5\x84\xecu)!{ \xd9\xd3PB\xf6\xb4\xcf$d/!{\x06J\xc8^B\xf6\x12\xb2\x97\x90\xbd\x0eM\x81\xb2$d\x8fSB\xf6\x12\xb2\xb7/\x7f\x8ekzV\xa0\x1a\xd3\xda\n\xf3\xbd\xe6\x8f\xb4\xf7A\xbd\xc7u\x8b\xf8\x89\xb7\xf7\x15\xd5\xbf\xa2\xb86!\x7f\x87l\xe4\x83\x0f\x16\x04\x14\xd7]\x98.\xcb\xb1F\x1elw\x9b\xd8\xae\xd4\xab\xef\x01er\x9c\xd9vFX\x1c\xf7\xd39\xa4\x03\x0f \xc1\x03\x0b\x03\x1fQ\x05\xf9\xc4T\x14\x85\xe2bVf\xfa\xe0\x88e\xaf05>\x06n\x8c\x0c\"p2{\x07P\xbd\xf6\xc6\xca`*\xbc\x0c\"13+C\xa6\\o\xdc\x0c\xc6cg\x10\x8c\x9fYY\xc9\xb8~\x10\x86\x06S\xe3h\x10\x88\xa5A(\x9ef\x1f\xd9-\xd6\xe6\x8b\xa9\xc1\xd4\xb8\x1a\xf8ak0%\xbe\x06\xa316\x88\xc3\xd9`*\xac\x0d\xa2\xf06\xfbt@\x14/\xdc\x98\x1b\xdc\x0d\xee\x06w\x88\xbd\xc1\xdd\xe0o\x10\x88\xc1A\x1c\x0e\xe72\xc1~X\x1cL\x8b\xc7A\x00&\x07\xe1\xb8\x1cD`s\x1e&\xf3\xb1\x07>\x07S`t\xe0\xc2\xe9\xc0\xdf=\xf3\xc0\xeb \xd0\x8b\x0b\xc6\xed\xac\xdc8\xa6\xe7\x81\xddA\x80\x94\x13bx\x10\x84\xe3\xc1\xd4X\x1eD\xe2y\xf6qE\xdd\x98\x1e\xc4\xe3zF~\xacE\x17\xb6\x07\x93\xe1{\xe0\x0fS\x81\x0f\xce\x07aX\x1f\xb8\x82\xf3\x91\x98\x1fx\xf0\xb5\xc4\xff&\xc2\xff J\xb9\xfe8 x\xf42\x02\x0f\x84XL\x10\xecZ\x9d\x0e\x1b\x04\x7f|\x10<1B\xf0\xc6 \xc1O\xeb\xe1x!\x04a\x86`\xc5\x0da*\xec\x10B\xf1C\x18\x89!\x82\x87z\x03\xb0D\xb8\x0b<\x11|d\xb4\xcc\x84\xe9\xb0E\xf0\xc1\x17a\x04\xc6hd\xc8\x1e\xb4\xe1\x8c05\xd6\x08N\xbc\x11b1G#7\xb1G\xb5o\xd7=\xb0G\xb0B$`\xc5 !\n\x874\xb2\xb2\xe2\x93\x10\x8bQ\x1a\xb9 ?\xd0\x125\x9b\x0e\xab\x04/\xbc\x12\"0K\x08\xc3-!\x06\xbb\x84`\xfc\x12\x1c\xab\xad\x03S\x82\x00\\\xc9\x17\xcb\x84\x18<\x13B1M\xb0w<\x06\xdb42\xeb \x87\xbeS\xc6\x0f\xe3\xb4N\x88re\xc79aZ\xac\x13\\x'\xd81O\xe3;\xb1X(L8v\x030Q\x08\xc2E\xa1\x83\x8d\xf6\xe9\x96\xd4y\xb9\xba\xda\x92O\xa6\x02\xca^\x91 \x1b\xa2'H\xdd\xf4|\xb5\xadrR\xe5\xb5\x03\x11\x1b\xd5Z\xbfZ\xa9\x02\x14\xb5\xb5J\xb5\xe0\xac\xa2-Z\xe5%\xff\x16\x87\xc2\xf6\xda\xd8?(\xe2\xdc\x98\xc7(:\x7fU\xcd\xe9\xf0XA\xb5\x0d\x08t\x94n\xc6\x9fk3\xc6\xe8\xd4\xa73\xa2\xd4\xeb\xea\xff\x9a\xa24J\n\xa5f\xf6O\x19\x94E\x94\x8a(\xf4%Z\xe1w\xf8\xe7\x06\xd3z&~70\xfb\xb9\xc1\xd5\x8e\xb3al\x99&1l\x08\xad\x01\xf3\xd0&\x8f\x89\xce\xe0\xa2\xee\xd8\xaam\xbd\x83\xdc\x14\xab\xa8\xd7\xb8\xc2<&^\x12\xd8\x90\n\xab\x18\xb8n}\xaeI\x8d\x0cH\xaa\xb72-u\xeae\xed]c\xb8\x8b7\xcf\xb5\xc8\xffQ6\x9b\xb9\x88\xbc\xa9c2\x9d3\x19\xa6\xfev\x15\x9d\x91\xa6\xac\xaf83\x93\x19\xfb\x84(P\\\x9fB^S\x85HPhJ1\x98\x17\"\xe8\xfa)\xa7\xfd\xf1a\x1f\x17\xda\xa4\x06\xaf\xe3\xbd\x03F\xeda\xdf.#u\xc9z:\xeb\xab(\x9d\xf5Mg}\xf7\x94\xce\xfa\xa6\xb3\xbe{\x9a4G!$?!(7!\x9d\xf5\x1d\x9b\x87\x10\x91\x830I\xfeAx\xeeA:\xeb;&\xd7 $\xcf \"\xc7 \x9d\xf5Mg}\xd3Y_\xdf\x1c\x81I\xf3\x03br\x03\xd2Y_\xd3c\xce\x1c\x80\x00\xfc\xdf\xe7$k\x08\xee\x9f\xce\xfa\xa6\xb3\xbe>\x18~:\xeb\xcbi\x0cN\x9f\xce\xfa\xea89\xb1\xf8X\x1c\xde\xb86\xa4\xb3\xbe\x87\x94\xce\xfaF\xe0\xe7n\xec<\x147\x0f\xc0\xcc\x83\xf1\xf20\xac<\x9d\xf5\x0d\xc3\xc3\xd3Y\xdf\x96\xfe!\xcf\xfa\xdanU\xdf#\xb0\xb3\x1b\xdc]\x05m\xd0\x95\xc40\x914\xa1\x15\xae\x9b\xaa\xe4A% \xabI\xa0\xa8\x05\xb2)7\x93\xb3)_\x95\xa4\x1a\xc4\xaf\xd5l\xec7!43\xf6\xc3\x0e\x8b\x83k>`\x85oq\xd5{\xd5\xf6\xf1\xe4\xd3\xc3\x0f\x97w\xf2%*\xac\x9f =>\xac\x0d\\rd\x8fT\x0b\\\x0d\x03X\xfa\xab\x92'\xd5\x86\xb9l\xc5qX\xdd\x8a_DY\x86_e\x95\x08C\xe9\nm>\x85*^\xd1K\x8c\x02T\x03\x82U~\x8bK\x10\xacMu,t<\x1f)]\xa4J\x16\x8a\xea{\xc8\xa1H\x95,,\x14\x9a\xf5ae\xa6\x0f\xfd[\"aSg\x7f\x80;\x03\x04\"\xb2@\xec\x1dH\x95,b3C 8;\xc4\xca*U\xb2H\x95,b3H .\x8b\x04\xa6\xca$\x81\xa8l\x12\xfbtH\x95,\xc2\xb2K 0\xc3\x04\xe2\xb2L\\&\xd8/\xd3\x04\xa6\xcd6\x81\x80\x8c\x13\x08\xcf:\x81\x88\xcc\x13\x0f\x93\x99*Y\x08\n\xceJ\xb1rK\x95,R%\x8b\x01M\x93\xbd\x02\xfeI\x18\xe0\x93\xc5\x02a\x99,\xe0\x82\x9e#3Z\xc0\x83o\xaada\xa1\xa8\x8c\x17H\x95,$Ee\xc3@PF\x0c\xa4J\x16>\x992p\x17\xd92\xe0#c\xaad1m&\x0d8\xb3i 6\xa3\xc6\xc8-U\xb2\xf0\xcb\xc01rK\x95,<3s 8;\x07R%\x0b-\xc5d\xee\x18\x99\xa5J\x16\x8aR%\x0b\x0d\xa5J\x16\xa9\x92\x85\xf6\x01gD)U\xb2\xd8\xff\xe4\xab\xccT\xc9\xc2\x90\xd6\x90jY\xec\xc92\x9aR-\x0b\xcd\xeb\xa9\x96E@6C\xaae\x91jY\xeci\xd2,\x85\x90\x0c\x85\xa0\xec\x84T\xcbbl&BD\x16\xc2$\x19\x08\xe1\xd9\x07\xa9\x96\xc5\x98l\x83\x90L\x83\x88,\x83T\xcb\"\xd5\xb2H\xb5,|\xb3\x04&\xcd\x10\x88\xc9\x0eH\xb5,L\x8f9\xb3\x00\x022\x00|*5\x84 \xff\xa9\x96E\xaae\xe1\x83\xe2\xa7Z\x16\x9c\xc6 \xf5\xa9\x96\x85\x8e\x93\x13\x8d\x8fE\xe2\x8dkC\xaaeqH\xa9\x96E\x04\x82\xeeF\xcfC\x91\xf3\x00\xd4<\x181\x0fC\xcbS-\x8b0D<\xd5\xb2h)\xd5\xb2\x90\xa4\x0eH\xaf\xbbgiA\x9e7\x1e\x84\xb2\xf7\xc7\x8d\xeb\xaa 8T\xef\xfbS\x96o\x90>\x01^\x88k\x8a8\xbfy\xfb\xe1\xbbs\xbeg\x16\xcf\xc9\xcdg\xce\xf1\x81\x978\x93ny\x8b\xc9t}s-C\x11\xaa\xd07F\xf3U\x89\xea\xa6\xc2\xb4\x9d\x89l\x91Z\x91\x15\xe1\x8e\xf0\xe1~\xb6\x9fJ\xc8&\x83RJ\x7f\x8e\x1c\xd3\xfe,\xd1\xbc}\xa0l\x9e:\xd5\x9bA\xf1 X\xfd\x898x$eaIJYX6\xbbr\x07\x00\xe6p\x05\xfbO\xb9\x1e\x1e[\x17\xb0\x05.\xf0\x8a\xd7\x19:\xfb\xa5\xfd\xf7\x95\xac\xf6\xf3\xebY\x85?\xa1jA-\xa5\xa0:;\xb8\x97\xe2\xfd\x9c\x94\x1f\x983\xf4N\xbc\xdb[\xed\x84\x97$\xb9\x02\xca\xb2\xaa\x11v\x01q\xf7\xb5e\xd5\xe6#k\x97B}C\xf2\xc9\x07\xbb&\xca^?\x8c\x11\xdc*\xf8jle'\xd1-\xfb\xeb\xfa\xbe 2\xf6P\x90\xa3\x9f\x82\\\xbd\x15du\x05\x049{+\xc8\xee\x16\x08\xf2b\xe5\xe3\"\x08\nv\x14\xac\x8a\xe0.\x84\xc3]\x10\x14\xe54X\xf8\xc9P\x9f\xcdu\x10\x14\xee@\xb8R\xb1\x05\xed\x8d\xc7Ke\xef\x84\x01\xd9G=\x85\xad\xda\x0f*-\x1f\xb2\xe4j\x97,\x8e\xa9\xfa7\xfb\x00bN8\\\x1ce\x05\xdb/Z\x14\xd2\x13\xd1X\xc7\xb6\xa1!SC\x96\xfe}\xd8\x94\xe4j\xb7\x145k\xee\xc9\xd5\x16k\xb2\xd2\n\xcf\xd2i6|x\xf7\x07\xa4\xc5\xdf>\x98j\xdc\xf9\xd0/\xd3\xf1\x8e\xb7\xc1\xbfH.\xb7\xa4\xe4r\x7fa\x97\xdb\x86\xb8\x1c8\xd3\xa6\xa1x\xf0`o*\xb6\xbf\xaa\n\x9cP\x13y,l\xd9_\x0cF\":w\xb9}8\xfb\xe5\xc0\xdd\xb4U\x97\xdd\xcf\xf3\xc0-\xc4~\x05vl\x1b\xd2\x8e\xe1\xf0g\xd7\x04L\xab{K\x7fO\xab\xfb\xd0\xcbty\x98\x9d\xc9\xa3\xe1\xe6Z\xe8'\\\xe3\xd3\xf2>\xa0\xb4\xbc\xa7\xe5=zy\xdfK~\xb0\x14\x9b$?x\xb0'y\xfb\xeb]K~'\x8e\xc9\xbe\xbc\xba\xdb\x0f!U{\xde\xba\xef\x89\xec\x99\x0c\x82\x016\xef\xa3\xcb\xed\x91\xd2\xc6\x03\xf5?\xee\xa8\x08\xbda\x1e\xbaW\xf9\x8e\xc2\xb5C\x91v?\x02[{\xd4\x9a\xa6\x9d\xf5\xcba0\xc5\x7f\xa5\xeb~\xc4\xd1k]o|\xa5\xd5NRZ\xed\xd2j\xf7\xb0\xd6\x0c\xb6\x93XT\xe8\x93\xfa\x8b\xcf\xca\xf1\xdf\xf2\x9d\xe7\xb2\xbfj\xf9P\xbcZE\x84, \x03\xa6\x8f\x94~\x1e\xe8*2\xd4[\xd0\xb4\x1d\xc8<\xe4\x159\xbc\xc2l\xfd@\xdf\x13\x18\xfc\xe1\xb0HV_R\xb2\xfa\xc9\xeaOn\xf5\xadF\x9f+\x80\x9aM\xf9%\xff\xbd5\xdc\xe2\xf1\xf6dP\x87#l\xc8\xa2)\xb0\xdetw\x9e\x13\x0c\x1f\xa9\xee=P\xa3\xddUK\x97\xfaIZB\x19\xdd\x8f\xbd\x1fOJG}\xb5\xec\xc9:\x99\xecSi\x9fuY\xa3\xcf\xe6\xb9f\x99\x0dsD\xf1U[\x8b\xcf\x96\xc2\xe0bD\xca\x86N\xc2\xa9\xb7\xb4]\xe1\x12\xcd\x0bl\xe54L\xe7\x05\xe7\x1e\x8aO\x081\xfe\xbc\x161\xb9l\xc9)\xf0\xee\xf2\xc5\x80_Z\xb2\xd2\x92\xf5\xe5\x97\xac8\xe7~\x1f$\xd0\xa1Q<\x91;\xa74'\xa5\xc5\xado\xf7\xe9/\xda\xa7\xdb\x85\x01eY\xb3i\n^\x1db\xcf\x8c\xcf$\xe4Hg\xd3\xb0\x95\x8f=\xd8\xe5a\xdfC\xc7\x12\xd1QEw\x99\x10\x7f\xceeY\xa7},\xb1\xc2\x19\xceo\xb1&uf\xe4ra\x12\x16\x1c\x13\x0b\\\x19j\x8e \x06N\xe9\x049s\xd3<\xe6\x8a\x0be\x03?6\xee8\x9c\xa0`\xc4\xcd\xd2y\xdf|\xb4(\xe4\xcd\xc8\xcd3\x17-\x0c\x81\x93uM\xf5{J\xcdT\xf7Z\x89u\xbc\xcet\xe6h\xbf\x93l_I\xab\xf2\xe0\xd7\xb4*\xdf\xc1\xaal\xdbH\xfec@N\x0e\x0f\x8345\xad\x11?\xe5v\xe5N\xabo\xe7\xf6\xdb\xfdk\xc3l\x18\x05\xe3\xf3\xd8\xe1\x81r\xec\xae\xc6!\xdbGJO\x0f\xd4\xe5p$\xc3Dy\x06F\x9e\x90\xdc\x82!%\xb7`@an\x01x\xa9\xd06\xed;\xe9\xe9\x1d[\xa2ar\xd2\x94_\xa9hB\xf9X\x0dr]G\x06\xbb\x13\xc8\xb9\x1fP\xd2\xfc\x16\x8b\xd3\xbc(\xbb9\x15\x15L)P\xae>\xa0\xa8\xcc\xb5\xf7Jfk\x9c\xdd\x84\x9f\xca\xb3t\xd9\xe9\x1a\x0d\xf8i*\xf0\x0e<%\x8dZS\xec]Rr\x99\x92\xcb\xf4\xb0\\&Z \xba\xc6^n\xd2{\xf1h\xeb\x1b\xf1W\x01\xdf\ns\xb9\xf4\x8f\xc1HF\x8f\x94\n\x1e\xa87$U\xf30&\xd7\xfe\xd3mq\x95\x13\xc7a@\xafib\xb98d\xc9k\xc7\x9b\x829\xceV\xdc\x8b0\x0cF\xc3wl\x14u\x97\xdf\xee\x92\xd9\x19h\x86\x1a\x91\xf2~\x8e\x9cr\xff#\xcfx=\x97z-+\xc2\xd0\x9aT\xfc\x96\x18\xc3\xdb\xfc\xce\x83\x9c\xf2b\xdb\xaa\x8ax\x91\xf1@#\xa0-\xfb2U\xce\xff\xbdQ5Nh\xcdKbk\xb9qWL\xeb\n\x08g`\x9f\x04\xac*\xdb\xa3\n\xb7\xd0D)\xab\x0d\"\xd9\xeb\xb5\xa1V<\xc9x-m\xd7\x0189\x86\xfbG\x8f\xe4\xdf\xfc\xc2\x82cn&\x12hU\xa7\xccK\xcf\xc5\x984\x00\x99n&J7\x13\x0d\xe8\x01\xdcL\xd4\xf7\xbe\xe5\xba\xe7t\xb9\xdd\xd1H\xb5\x14'\xc7ZRr\xac\x93c\x1d\xedX\xef%\xa75\xaa\xf8-\x85\x07\xc5\x1cm.\xcd\xe0\xad^'\xd453\xedC\xb2N\xe4\xbe/\xc3\xc9.\x97\xe7a\xffBko\x1d|PG\x899Q\x1c\xec\x0e:.\xab\x8e=\xd0n\xa7\x1a\x9aajL54\xefP\xb9\xee1\x9ajhN\xa1\xc5TC3\xd5\xd0\xfcm\xd4\xd0\x1c\xe6\xdf\xe2\xdb|\x81\xcb\x0c\xb7\xe1?\xf5\x07s|\xefyQ|'\x1f\xdagZ\x15\x05\xa87\xb5\xb1\xbc\xceK\x8fT?\x1eh\x18\xaf\xaf\x81.\xfd]\xfa\xf2~\xd15H\x97\x8b\xa6\xcbE\x8dO\xa6\xcbE9\xa5\xcbE\x0f)].\x9a.\x175Q\xba\\4].\xca)].j\x1e\xd3\xe9rQA\xe9r\xd1t\xb9h\xba\\\x94S\xba\\\x94S\xba\\\x94S\xba\\TP\xba\\4].\x9a.\x17M\x97\x8b\x0e\xc9\xf7\xa2\xc7t\xb9(\xa7t\xb9\xe8o\xe5r\xd1=\xf5v\x88\n\xbf\x90\xd0T\x1f\x9c9\xd8_\xa7tMN)]s\xff\x93\xaf2\xff\xe1\xd25\xf5\x87\xa5:\xd0f|\xa6f\x17T}w\xf9b\xd8\x89\x94\xb3\x99r6\x9dAN\x9f8!$\x9c7\xe1\xbc\xc6'\x13\xce\xcb)\xe1\xbc\x87\x94p\xde\x84\xf3\x9a(\xe1\xbc \xe7\xe5\x94p\xde\x84\xf3&\x9c7\xe1\xbc\x82\x12\xce\x9bp\xde\x84\xf3&\x9c\xd7D \xe7M8o\xc2y\x13\xce\xdb\xa1)0\xb7\x84\xf3rJ8\xefo\x05\xe7\xb5\x95NH\xc7\xd1\xc3\xce\xfa\xa6\xe3\xe8w\xa8\\\xf7A\xeat\x1c}\n-\xa6\xe3\xe8\xe98\xfao\xeb8\xfa\xb1\xf3<\xfa\xd9/\xea_WkD\xd7\xb6\xbb\xea\x0fN\xa7\xb7\x19Q\x1c\x92\x01R\xee\xff\xc2xi\x0f\xac\xffVN\xabGe[\xd5\xd6d\x04g\x1c\xde'\x90=y\x1a\x82_\x12BL\n\x82=\xd5 *\xd1\x807a`\xe8L3\x98 \xc9 2\xc5\xc0\x08\xcc\xfa%\x18\x8cJ/\x88J.\x00T\x14&-\xfa\xa5\x16\xc4$\x16\xd8\xe0>\xaf\xb4\x82\x89\x93\n\xbcR\n&L(p\xa6\x13L\x94L0&\x95 8\x91`\x824\x82\x89\x93\x08\x1c)\x04\x93'\x10\xdcM\xfa\xc0\xe4\xc9\x03\xfe\xa9\x03q\x89\x03\x16\xa5\xbb\xd2\x06&K\x1a\xf0K\x19\xd0\xc4,\xcc\xf6u\xe2t\x01W\xb2\xc0\xc8T\x01K\xa2\x80\xd3=q& \xf8\xf9/\xd3&\x08\xb8\xd2\x03\xdc2\xc5\xa5\x06(\xcb\xaea\xe8J\x0c\x980-`DR\x80>\x95\xc7\x96\x120mB\x80=\x1d`\x8ad\x00/4\xdb\x91\x08\xe0\x9d\x06`F\xec\xc2S\x00\xcc\xbc\xb4\xd1\xf1I\xc0\xff\x10e\xf9\x02\xffn\x9dx\x83\xfe\x11\x90\xbf\x1eI\x98\x08\xee\xf7\x02\xfb\xddP\xbf\x0f\xd0o\xd5b(\xc8\xef\x0b\xf1\x9b\x00\xfe \xe0\xfd\x00p?\x1e\xda\xb7\x00\xe8\xbe\xb0\xfe\xc4\xa0\xbeE\"\xedH\x8d\x82\xf3U\x14V\xc3\xcf\x00\xe6O\x0c\xe5\x9b\x81\xfcX\x18\x9fG\x04t\x82\xebA\xfci!|\xd3\xc6\xcf \xdf\x9b\xf0E\x13t?-p\x1f\x0f\xdb\x1b \xfa(\x80\xde \xc6\x87A\xf1\xde@| \x0c\x1f\x02\xc2\x1b!x\xb34\xbeP\xa8\x1f\xfc\x1e\x08\xbe\x07@\xef\xda\xaeM\x0b\xbb\x9b&\xc5\x08\xc8]\x1b\xa70\x02\xeeqp\xbb\x0dZ\x9f\x1eX\x1f?\x92\xbcAu_H\xbd\xbfDz\x1c\xed\x0c:\xd7)Or\x0e\x80\x03E\xe9\xe6\x0dI\xe9\x14g:\xc5\xb9\xa7t\x8a3\x9d\xe2\xdcS\x0c\xd8bd\x96Nq\x1e\xd2D\xc0\xcb8\xe8%\x02|\x99\x04~\x99\x1c\x80qB0w\x00\xc2\xdc\x15\x0cs\x07@L\x08\x14\x13\x0b\xc6Xm\xb8\x0b\x8e\x99\x10\x90\xf1\x85d\x02A\x99\xc9a\x19703\x1a\x9aI\xa78\x9d\x92\xc5A5ZV\xe9\x14g\x0ch\xe3\x82m\xa6\x01n<\xd1\x08'x\x13\x00\xdf8O\xd3\x05B8\xe9\x14g:\xc5\xe9\x03\xee8\xb5\x1a\n\xf0\xf8C<\xe9\x14\xe7\x80&\x06|\xd2)\xce.\xc5\xc2?Zf\xe9\x14g\x00\x184\x06\x0e\xd2\xb2K\xa78\xb5/x\x01H\xe9\x14\xe7tpR:\xc59\x1al\x9af\xccy\x03N\xfe\x90\x93\xdf)\xce\xde\xd1\x96\x0e'm]_\xfeP\xaf\x06/\xff\x83\xb4\x86\x95\xa8\x88\x8a\x17\x07\xf71\x02Lp\xf1\xb5vs\xee<\xd5\xb3\"\xb7\xed\x81\x1e\xae\x07z\xf6\x8b\xf8\xef\x15k\xc5v\x98\xe7\x92?\xd6\xbbhr\xafI\xd5\xe9\x15\xb9\x85\x0dY4\x85\xfe\xf2\xc9\xef\xc9\xad`\xf3Hu\xf9\x81\x1e\xe6\xb9%\xfcvl\xa1\x9aC\xdf\xb8'S\xef\xd9AI\xe6V?\x15.\xf8\x86\xb8&\xf2\xf9\xc3u\xca(&8\xf1.%\x02\xaer\xb2\x88L\xc6\xed\xf5\xe95.Wu;\x94\x05{\x10\xec\x87\x82/\xf0\x96\xd0\xbc\xf6\xd3U\xffa\x0fe\xc9\x17&\xd5\xd6&/\xaf$_\x9b\xae\xf4\x80%\xd8@Kp &\xc8\x05^\x02W[I6\xb6]\x99\xf3\x832B\x1b\xd2\x94\x86^\n\xf2`\xe3\x13Hc\xf4\x82\xe4\xfb\x92\xe4\x08jr\x83K\x19\x08\x13\xddQGL\xd9R\x8cJ)\x9c-\xe6\xfa\xe6\xed\x87\xef\xce\xb9\xf7*\x9e\x95n`\xce#u\x17e-\x17\xc86:J\xad \x80\\=\xc5\xc6\xc1\xdc(\xcdW%\xaa\x9b\n\xd3\xd6$\xb3\xad\xd2\x8a\xac\x08_\x9a\xf4\x1efOI?\xe6e\xbei6j\xf4\xf2\xfd\x02\xe2\x9f\x9dPT\xb0q\x8dK\xb6\x1d\xb1N,F\x1b\xf4\xf9\xaa\x9d3\x93\xcdns&=\xfa\xcc\xe5\x16Mq\xb1\x9f3\x951\x0f\x84M\xcc\xfd\x84\x04\xf6\x19\xdb\x1e\x99v\xa5\x17e^\xe7\xa8\x90qh\x18f\x19\xb4\xb4!e\xbd>\x88a\xd7\xa8(v~v\xa5\xfb\xa8\x87U\xe1\x8fOjS~nH\xd5\x18\xe6\xab\xf3\xe38\xc3\xec\x9e_O\x8e\xba-\xae2\xe6\x93\xaeD8\x99\x1f\xd4\xa65\xba\xc1\x1c\x89j\x17!\x91/c\xc2\x06\xe5\xb9s\x8eZ\x99>[FJ\x9a/0\x9b <\xa8\xaf\x1b\x06\xf5\xba\xc2\x94\x8d\x9f\x07\xa2\x1b6b+\xb5k\xfd\x7f\x98rMPq\x08\xbe3?\xb7\x88\x1a0\x15\x80\x972\x0e\"G\xf5\xd7\xb3?\xe9\x9e\xbc\xc55\xb9z`\xbd\x17{|\xb2\x84\xff\xc2r\x0c\xf09\xfd\x81\x0f\x11\xf1\xbf\xdcY\xb3\xc0\xf9]%\x99G\x06\xeb<^\xcc\x86\xaazr\xf6M_U\x1e\xa9_\xc2a\x0cI\xfc\x92\x9e\xea\xbb\xcb\x17\x03~)\xed+\xa5}M\xe6\xed\xa4\xb4\xaf\x94\xf6\xa5\xa7\x94\xf6\xc5)\xa5}\x1dRJ\xfbJi_&Ji_)\xed\x8bSJ\xfbJi_)\xed+\xa5} Ji_)\xed+\xa5}\xa5\xb4/\x13\xa5\xb4\xaf\x94\xf6\x95\xd2\xbeR\xdaW\x87\xa6H\xc1Ii_\x9cR\xda\xd7?B\xdaW'\x05\xaa\xc3\xc7\xb6\x93\xec\xbc\xd1\xe2\xcd\xe2\xb3u\x10\xe7\x9a\xc8\xbb\xc5\x97\xa4:UE\xe8E\xbd\xf8\x1e\xb3#\x91\x07pt\xdaW\xef\x11\x87\xa9\xd9\x0fl\xa3u$\x91\xf7\xa3 \xd3\xc8L\xf9b\xdat1 \xfc\xc9\x17\xb4)b\xea\x91~\x96X\xfb\xd7\xb6\xea\xf3*\xbf\xc5%\xd0\x1a\xd5\x0d\xd5&\x8a\xb5\x9c\x1e\xa9N=\xd0D\xb1\x81V\xbaT\xdf\x03\xfe\xa5\xc4\xb9\xca\x0d\x88sP\xfc\xc7r\xaf\x85`\x94\x07\x82aT\x98\x14J\xf5\x16\x15\x0c\xb1\xc2\xd40\xab\xb7\xb4\x80\x08\xbb\xb2|\xe1V@\x85\\aB\xd8\x15\xd2B\xaf0%\xfc\n\xc9!X\x88\xbcm#a1H\x08\x8da\xc3\xb10%$\x0b\xa9aY\x087|Jx\xd6[\x98\x15\xfc\xc4>2\xb80m\xf0\x81\xa8\x96\xe1P-\xe4\x0d\xd7B,d\x0b\xe1\xb0\xad\xf7\x9c\xa9\xe1\\\xc8\xd8w\x13\xc2\xba\x90\x14\xda\x85\x1d)yc*\xb4\xb8G\x08\x8cU\xbel^\x90\x91\xd2\x8b\x8f\x1f.>\\\xbe\xfdavy\xf5\xf6\xea\xd3\xe5\xec\xd3\xfb\xcb\x8b\xb3\xd3\xf3\xef\xcf\xcf\xde%\x9c\xf5\xee\xec\xe2\xc3\xe5\xf9\xd5\xec\xe2\xec\xe3\xf9\x87\x94\x13\x7f\xfapu\xfe\xfe/\xe9\xe7]\xbc\xbd\xbcL\xaa\xe1\xc7\xb3\x7f;;\xbdJ:\xe5\xfb\xb7\xe7?xO0)\x97\x13\x1c\x88]U1\xb1\xe3K\xd9\x07\xe4\x9d\x94\xdf\xfe\xea\xe1\xd4kA\xf27& e\xff\xd0\xd3\xa7\xb7\xfb\xbb`\xb0+\x04\x9b9\xc8S73\xc8.\xbdv\x18\x1cG]x\xd8\x9bv\xaf=\xfc\xddRj\x18]\x14\x16[\xf9\x16T\xf5\x92\xd0\x81\xdfE^\xe9\x02m\x91\xbe\xbb[\xcb\xc1\xcf\xb8J*|\"g\x1d\xd5s\xb2[9\xf5\xf7@\xadD\x7f\xb2r\xa4\xc5k\xe86\x10\x17\xda\x14m\xcb\xd2\xaaf\x9e\xc8\xdd\xca\x99_\xf2U\xef\x9a\xb1\n\x1a\xf6w\x99\x00\x9dTK5\x08\xec\xd6Q\xfd=_\x0do\x8ar\xe5\xab\xdaMY\x15\xab\x99\x92\x86P\xb1!\xdf\x88\x8e\x1dZvK4\xf9\xe8\xf2\x17\xa5+a\xa4\x13\"\x8b\xca\xdd\xe0\x02?\xdf\xb2\xc0\xf4\\\x12Dj>\xd2\xb9\xe5\xae,`\xf9\xf1\xe2\xf4H\x07Y\x8c*JU\x07\x9e\xd4z\xb3U\x02\x18\xdb\x8a\x97\xabp\x00\xd6\\\xe9e;\xd4(\x91s5V-\xfc\xbd\x81\xe7!?^>\xb2\xf6\xe5\xdeq\x85\xe2\xba\x15\xdf.{\x97\xf3\xb2\xaa\xf7\xafLU\xcf\xc4\xb7\xd8\xec\x8e\xf1z\xaf\xc2\xda\xed\xf5\xba\xe43^\xaes$y-\n\xce^\x8b\xb2\x9c\xc7\x19\xf1\x19V-\x9e\xe6\x82R\xae$,\xcf\x14F\xab\x94\x05%\x9aP\xbd\x14\xd7O\x11BM(\xe7\x00J\xac Y\x14v8K\x96l\x8aV>\x1c\xee\xcc+\xe7\x84\x16t\x9a*\xe9\xa4U\xd5Z^4O\xf4\xb4\xe9+>\xd1\xc3\x86\xe9&f2=\x98\xac\xce\xeb\x86\xe9{\xb7\x16_\xd3\x8d~m/\xeb;\xd6T\xc5\xee\x9e[\xca|jQ\x9bb\xa9\xbb\xd9n\x83\x07u\xec\x0f\x1ci\xd4s\n\xf1<\x81v&\xe1$\x12N\"\xe1$,\xad\x9c\x95T\x9eB)\x93p\x92\xef\xb0(\x8d\x9c@\"cd\x81R\x08d\x12N\"\xe1$\x0cML\xc2I\xd2\xf6!\x86I8\xc9UR\x94\n\x9eJ\x04{\xdf\x0d$\x9c\xb4k$\x9c4\x81\xe4\x8dS\xbc\xa9\x04o\x02\xbd\x9bL\xee\xa6Q\xbb$\x9c\x94F\xe6\x92pRg$\x9c\xa4\xad\x13N2z3\x8a\xde\xb2\xca\nE3Gg\x0d\x82\xb9=\x06&C\xbb&*5\x9e'=)v\xf9\xe5PK'\xba\xf8\x85\x90Jd]\x0e\x89N:q\xc9\xa7G$CX\xe4\xd3\xa2\x90\xbb\xf8cY\xbdQa}\xebo\xbd$\xd8M\xb1j#\x9a`\xe0\xa4\xdf\xf1\xc4{\xeca\x89\x1c\xec'\xdbQ4;\x92`GP\xebI\xa4\xba\x19\x0f\xefj>X\xee\x1a\x8c\x82\xf2\xc7\xc1\xf0\xa3\xfeR,\x16\x0dk[\x13\x9e\xb7\x07\xbd\xbe\xa4\x0c\xf7\xd5TR\x0f4\xb5\xb7\xa2\xdd\x01\xa3\xb1R\xed\xfc\xa6\xab\xcbZ\xb8i\xea\xf5\x93\xd4\xb8'|\x8e?\xb3G_\xb5Go\x19\x0d\xc9\x14z\xa6\xde0\xbem*\x19\xbb\xd0\xdc\x86\xe6\x11:\xa2FF\x1c\x96\xa3\xa5\xf9\x0e\xbf\xe5\x11J\xe6\x83\xf8\xaeR\xe2~P\xdf\xdc\xb4\x8cC\xdd\xc0\xb0\xba`EL[\xc63{\xcb\xb3\xfe\xecp\xa2\xaa\x9f\xcf\x8f\xa3\xb5_\xdd\x18\xe9J\x99KQ\xce\xcd\xdf\xe4\x98\xa4u\x0d\xd5\xe2\xfb-\xab\x8c\xe3\xb7U\x17\xef\x18\xbd\xbd\xcfei+\xd1\xe7;\x17\xaa\x08\xc1\xb6\x15\xae\xfe\xcc\x12\xfd9,\xfe\xc0\xce\x1d1G\x0e\xf7\xae\xcau\x89\xf5\xae<\xd6\xe0:>\x14I\xc5\xc2\xec\x1e\xac>9\xc5\xaf\x83\xd26j\xe5\xdb\xfe\xd3\xf9\x0d\xac\xd8\x0d7\xe8\x96f\xb9\xcc\xc4G\x86\xf1\xd4\x03\xa2.\"\xfc|\xfd\x08\xac\x98\xdfB\xb1\xd9|A/\xda@U\x7f~\xc8\x97\xd6\x19\xc2\xa3\xb2\x87\xd6R\x06\x13\xc4\x7f\x94\xd5\xa2\x9c\x17\x9cu\x01}C\xea\x8b\x03uG\xb2\x8b+\xab\xf9j\xbb\x18\xad<\x14\xea*\x1dQ1\xbac\x92\xcf\xb1\x02}r_A\x9bO\x1c\x14\xf6\xe9|<\xb1\x1d5A.\xd64\xac\xd5$\x95|\xbc\xfa\xe7Qm\xcd~\nk\xff5A8\x10\xa5\x1b8R\n\x1c\x95\xf7\xf1\xe2\x94t\x02\x81t\x02\xb3\x8d\x87\x93XC\xd2 \xc4\x10\x86Y\xf8\xc2)t!\xe9\x04fd\nS\x88\xc2$\x9e\x90t\x02\xf7\xa5\x08'0\x84Y\x08\xc2t~\x90t\x02\xf7\xe1\x06S\xa8\xc1\xcc\xcc \x8e\x18\xcc\xc8\x0bbiAG \x80t\x02\x87\x86\xe0\x03\xb1\xb3\xa4d6\x90t\x02QD\xe0\x14\x1e\x90t\x02}\x87E\x19\xc0\x04\x02\x10\xa3\x82\x97B\xff\x91N \xe9\x04b\x18?\xd2 \x94\xb6\x0f\xd5G:\x81\xae\x92\xa2\x1c\xdfT\x8a\xcf\xfbn \x9d\xc0]#\x9d\xc0 \xb4^\x9c\xd5K%\xf5\x128\xbddJ/\x8d\xd1#\x9d\xc04*\x8ft\x02;;\x04\x89\x97\xa3\xcf%Pxx\x06/I'\xb0\xb4G\xee\xe1\xe6n\xfd!\x83\x80\x98Z\xed\x87r\x01#M@{D*\xe5\xeep\x83a\xb0\x97\xec\xe0\xcdv\xaa0M\x0e%\x8f\x13\x1d,o\x03\x92\x1e\xef\xf4!\x9d\xa4G!5z\xf4\x1fe\x00\xb0-\xab\xe5j\xb7\xf5\x03=\x0fS\xcc\x0b\xe3\x82g\xaa\xe7aZ\xf6h4 1F|\x906\xe2\x83\x88\x0f\xea\x8d\xf8 \xe2\x83z#>\x88\x13\x1f\xe46\xe2\x83\x8c\x11\x1fD|\x10\xf1A\xc8Y\x12\xf1A\x9d\x11\x1fd\x1b\xf1A\xc4\x079\x8c\xf8 \xe71\xc4\x07\x11\x1f\xe41\xe2\x83\x88\x0f\">\x88\xf8 \xcbr\xb0\x1a\xc4\x07I#>\x88\xf8\xa0\xe7\xcb\x07\xd1\x16uS\xf7\xff\xa2-\xea\x0e\xe8\xdcx\x1f\xa5-\xearx\x91\xb6\xa8\xa3-\xea\xfe\xb8[\xd4u`\xeb\xc9\xaf\x1d\xd9\x18\xda\xb7\xce\xf2\xa6!\xc4\x0c\xee\xaa\xe1V\xb3\xc5lY\xa9gP\xf4G\xb5\x8b\x8d\xb9\xee\xf9\xbb~R\xa2\x8f~\xbbX4!\x1aV\xff\xf4\xdcaX\x1f\xbf1 )\x8b\"\xad\xd1 D\x14\x84\x8a\xc0\xac\x91\x0b\x84\xa0N\x1e\xc1XI?\xcci\x89\xd0*\x02M\xcd\x0b\xa6\"\xb1\xd4t(5\xee\xa0\xcc@j\x10G\x9d\xac\xc5\xa5+9\x01\xb5\x1b\x95F\xa4\x9d6\"\xed\xf2\x8c,D\xda\x11i\xe76\"\xed\xa4\x11i\xb7kD\xda\x11i\xe73\"\xed\x88\xb4\x93F\xa4\x1d\x91vD\xda\x11i\xa7\x8cH;\"\xed\x88\xb4#\xd2\xcegD\xda\x11iG\xa4\x1d\x91v\x96\xe5\xa0\x9e\x88\xb4\x93F\xa4\x1d\x91v\xbf\x05\xd2\xae\x0b<\xfb\xea\xdf\x1d0\xda}Q\xc5\x00ud\x8f\xb5p\xd3\xd4\xebA;\xda\x8c\x0d\xc9\x02X\xc8]\xe8\x02D\xc5\x95\xf8\xfd\xa3\"\x84\x0cJ!_\x15r }\xb8\xf1\xde]\xcd\x99\x13\x93\xb0\nya\xda\xf9LQ \xd9\xae\xdd\x89\xfc\xa0.\xaa\xed\xf6\x9do\x94\x90\x8a\x98,\x89\xdfv\xdf\x9f\xde\x9a@4\x0e\x17\xd8\xeb.\xb2\xfa\x14\xdc\xe3.r\xae\x7fo\xbb\xc8\x89\xf1=\xed\xbc\x05 \"\xd8VOJ\x89b_9\xc2\x1b\x14\xc3\xd6F1l\x8aa\xf7F1l\x8aa\xf7F1lN1l\xb7Q\x0c\xdb\x18\xc5\xb0)\x86M1l\xe4,\x89b\xd8\x9dQ\x0c\xdb6\x8aaS\x0c\xdba\x14\xc3v\x1eC1l\x8aa{\x8cb\xd8\x14\xc3\xa6\x186\xc5\xb0-\xcb\x11O\xa4\x18\xb64\x8aaS\x0c\xfb\xf9\xc6\xb0\xb3\xc4\x84\xefj\xceB[I\xfd$~\xef\xa2\xc1\xf2h\x15 ^\x96w\xac\xdai\xef \x14,\xcf}aZ\xfcL\x83\xc0\xb2I\xcf#~\x15M\xb3OZ\xbf \xec9\"\xda<}\xd7(\xb5\x00\xef;\x1d\xb3\x02\x03*\x89\xbaa\xf3\x82\x8b\x87\xe0\xa2a7b\xa2\xa6\xc2\x0e\xbf\xa8\x0b\xb4\xbf@Y\xb5\x9c\x15\x0b\x1d\xdc\xba\xf1\xce\xad\xa0\x13\xf9\x10#\xa4\xee\xac\xfe\xd1J~\x10-\xd4$\xb2\xbc\x81_V\xacz\xa5\xaf\xf95|\xfb-|\xf3\x8b\x9e\xa0\x16\\7V\xbcD\xbc\xc5\xdd3\xb9\xa8\xf7\xcd1\x9cWP\xac\x02\x0b\x9ej\x19q^\xb4\xac=\xd2\x8b\xadr\x8a3\x12\xa8\xf1\x9e\xff\xd3\x87\xab\xb3\xd9\x87\x8b\xab\xf3\x0f\xefg\x9f\xde_^\x9c\x9d\x9e\x7f\x7f~\xf6\xce\xf7}\x10\xbd\x93\x00\xac\xda\x06t ^\xfb\xae\x88<\xe3og\x97\xc8#\xdf~wy\xf5\xf6\xfc=\xf2\xe8\xf7\x1f\xd0\x07\xce~>\xbf\xfa\xeb\xec\xa7\xb3+\xdf)\x06\x03Hj\xaa\xee-\xe1G\xe8y\xec\x9c\x16~Z\x95!:\x8a\xb2pwQ\x96\xdei\\\xe7\x85\xba\x8e\xeb\xf8X\x07r\x9d\x13\xe8F\xee\xc3\xa3\x9dI\xd9\xa4.\xd5\x9f\x8c\x1b?\x95\x89W\xec\x075D1)UVp=5Q+\xeeb\xa47\xbdU~\xc1\xfa\xc3\x82\xca\xd4k}Y\xdf\xb1\xa6*\xaa\xb9=\xa3\x89\x9c\xe9\xbf\xf1^GX\xfa\"U\xfd\xba\xde\xd8\xd5\x0d,z\xb8.\xf7\xb7\xb3\xcb7\xe3?X\xc5?\xea\xc9\xcb\xb4\xc2u\xe7z\xe3\xfa\xe3@\x05DAX{\\\xe9\xfd\x877\xa3\x7f\x0f|\xb4W\xc9}\xef\x1d_\xa3\xffex5\x19\xd0\xb8c\x1c}]\xf5*\xcc0\xd8\xe0\x9f\x82\x9f\xe5%\xd9\xc2z\x12\xfa6l\xabRr\x0b\xb2\xfa\xa2\xfb\x8b\xff\x08\x14\xd6nVed{\xc5\xa8\x9a\x96mzs\xb7\x97\xee\x93^:\xce\xc24\\4\xd5j\xa4\xba7\x95\x98\x93\xa3\x1f\xdb\xb7\xaa\x90y]\xb5ek\xf6\x84\xed\xe0\xce\xf3wGj\x0c\x11\xf3\xc4#\xb3Z\xe7w\x9e\xafc\x0c\x1a\xa3\xbe\x1d\xcc\x1er\xa2<5QS\x83\xd4N0\x93v[\x94\xb6\x08\xe8}\xf6F\xbb-\x02\xee\xcb\xe7\x8f\xb4\xdb\xa2\xfc\xfcN!g\xd5\xb7\xfe\xc7\x8b\xd3QiD\xce\x129\x1b}gc^\\@\xe4,\x91\xb3\xde#\x89\x9c\x95F\xe4\xec\xae\x119K\xe4\xac\xcf\x88\x9c%rV\x1a\x91\xb3D\xce\x129K\xe4\xac2\"g\x89\x9c%r\x96\xc8Y\x9f\x119K\xe4,\x91\xb3D\xceZ\x96\x83b$rV\x1a\x91\xb3D\xce>_r\xd6\xb9y\x17\xed\xb3\x08q7\xd2>\x8b\x07tn\xbc\x8f\xd2>\x8b9\xbcH\xfb,\xd2>\x8b\x7f\xe0}\x16%nu\xf2\xab\x84\xbbB\x1b,\xbe\x94\x88\x98\x9d\xfa\xb1pl\xa5X\xf7I \xe7\xef\x8e\x142&\xf7P4t\xdbNJ\xc8\x0b\xd3\xf2g\x9c\x11\xe2\xc32&1b\xd1\xbc\x8ehl!J6\x052:\"\x85\x87\xf8pLL`r&\x07\x94\xbe\xa0\x14.\x8f#k\x16\x076\x87c\xbf\x0c\x8e\xa4\xfc\x8dh\xa7\x08\xc1\xf8\xa9\x10>\x16\xbeO\x81\xee\x91\xb0}\"d?\x01\xae\x0ffk\xf0H\xae\xc6Sl\x0f\x1a\xcf\xd1\x88v\x06e\xf1\xfc\x8c\xd4\x8e\xe1:+\x96\x9b\x91\xd2I\\gD\xf22\x12;\x8c\xb2 \xdd\xa6?\x153\n*\xcb\x9c\x8f19\x1b\xe3Is1\x0e\x98\x89\xf1Ty\x18\x87\xca\xc2x\xf2\x1c\x8cx\x06\x06b(\xc1\xf6\xf8\x8c\xb9\x17\xd1\xcc\x8b\xe8\xec\xba\xb7\xd4\xac\x8bxs\xf7\xce\xb8\xc8\x99o\xe1\xea\x02H\x1c<\x95\x06'\x18\x9c`p\xe7\xef\x99\x06\x10\x82\xc1 \x06w\x1b\xc1\xe0\xd2\x08\x06\xdf5\x82\xc1 \x06\xf7\x19\xc1\xe0\x04\x83K#\x18\x9c`p\x82\xc1 \x06WF08\xc1\xe0\x04\x83\x13\x0c\xee3\x82\xc1 \x06'\x18\x9c`p\xcbr\x80\xb9\x04\x83K#\x18\x9c`\xf0\xdf\x02\x0c.\xc3o\xbe\xba\xcb\x1f\x07\xb5V\x7f\xd1\x1b\x00w\xc1\xb3\xcd\x97\xdb\xfd\xf7D\xde\x9e\xf6\xe4W\xf5\xff3QR\x08\xf0\xbb\x90\x87u\x84_\xb1ZY7\xd8\xdc\x8ae}\x07\xebz\xb1]\xb9\xb7\xfb\xfdK}\xf7\xd37\xaa\xa0\x17\xa6a\xcf\x97\xeb+\xab\xe5L9gw\xd2>\xbe\xdb\xfd\xb1#]\xb9\xceC\x0d[\xc9/u\x15\x9b/\xab\xe5\xee\x0b\xd4[M\x88\x06\xe2L\x15XS\xd6S\xb9\xc1A\x9b~`\xd5\x92\xdf\x9a\xfb\xaa\x8a\x07U\xfc\xb8\xe2zwk\x9c\xaf\x86\x07#\x9c\xa5O\xc8\xea\xaduY\xcdt\xb9\xcf\x97\xf3Z\xb0\xaa\x0e\xf2Y\xd1\x1b*\xacX\xd7\xdb\xea\xa9\x10\x8f\xd3\xba\xb4\xa1\x0e^\x7ff\x95^\xa1S\xcd1\x00\xba\x98#\x14\x95\xae\\h1\xf8\xfd\x87\xab\xb37rZ\xad\x8e\xedhPq\xfay\xc5\xf5\x9b\xbb[\xb6m\x83\xd1 \xfdZW_4\xfe\x8b\xb6\xe5\xb2*\xf8\xb6am7\xf0\x8ao\xb8e\xbd\xac\xe5;\xd3=\xf5\x1d8\xe9\xc7\xb2*\xd7\xdbu\xb7\xf3\xbb\xa4\xb7z\x86\x83\xd7\xc0*\xf1B\x08>X\xc2\xd6\xc5\xc3\xac{f\xb2=\xdd\xde{\xf8c\xf1 \xeb\xad.%\xab\xfdV\xb8LL\x8d\xc4\x83\xd9?\x90\niq\xbd{m;\xafJ^\x16+\xbd@\x0ec\xfc\xa1\xb3u]\xf1\xdb\x9d\xc5u\xb9g:n\\\xb1\x0fE\x8c*\xf9wc\xff\xc7\xb6n|\xf9O\xc7\xff\xe2:\xf2\x8e\xf1z\xf6\xb4\x8dS+\x03\xf5\x0d\xfcd\x08>\xf9\xc0]\xc9\x1b\xac\xfe)\xe7R\x01\x08\xc0\xf6\x81\xff\xbe\x8a\xb6\xb1\xc5\xf1\xd8\x13\xdf\x9c\xfc9\x19\x14S\xb3\xb9\x14TLO$ \x16#X\xcc\xf5{\xa6\xa9\x08\xc1b\x04\x8b\xb9\x8d`1i\x04\x8b\xed\x1a\xc1b\x04\x8b\xf9\x8c`1\x82\xc5\xa4\x11,F\xb0\x18\xc1b\x04\x8b)#X\x8c`1\x82\xc5\x08\x16\xf3\x19\xc1b\x04\x8b\x11,F\xb0\x98e9\xc0\x1d\x82\xc5\xa4\x11,\xf6\x87\x80\xc5zB\xc9*'\xf4%i\x9d\xd1\x05\x83\xd5m\xb3\xc2\xc1\xbc\xd6\xbb\x17\xde\xd4\xcd\x91\xd1\x8fTR\x8f\x83\xc2\xbeRA\xfa\xaf\x8e\x86\xee\xfdJ\xc6\x90\xc5\x0f\xe2C\xeb+\x1d\x16\xff\xea H\xae1\xc8e 2u\xac\x13\xde2\x87\x0c\xf9\xad\xee\xaf\x9d:\x9b\xd2\x90iy\xc1\xb7m\x00\xe1\xd2'\xbe0mz\xa6\x10\xd7\xc83\xb6\xf1/\x10\xfe:\xf4N\xfdz\x90\x88\x80I\xcfc\xa7q\x1e \x05\xf6GE\x11'@.+\xf5\x96\x1a\x1c\x8c\x14\xe7^#\n|2IK\x0e\x14F\xca+x,\\\xa8,5h\x18kF\xc1o\xd1\xa1CeY\x02\x88\xca\x92\xc3\x88\x91\xf2d\x901!\x98\xa8l\xcf\x90\xa2\xb2\xb4\xc0b\xac\x1d*\xe4\x91\x14^T\x96\x1ad\x8c\x14'&/)\xa1FeI\x01\xc7X\x7f\xef\xc2\x91\xd8\xb0\xa3\xb2\xe4\xe0c\xec\xf9l1!He\xd9\x02\x91\xa6\xb8}\xc2\x91\xca&\x04%\x95e M*K\x0fP\xc6\x1e\x133\xef\x89?Q\x07 V*;T\xc8R\xd9\x01\x02\x97\xcaR\xc2\x97\xca\xd0A\xcc\xd8\xa3d\x858\x91\xa1Le\x19\x03\x9a\xca\xb0aMe\x8e\xef\xab\xf8{!5\xc4\x19\x1b\xd6T\x00\x14\x11\xe8T\xb6w\xb8SY0\xe8\xa9\x0c=\xd9C\x04@\x95\xa5\xcd\n\x93\x83\xa1\xb1^z]\xdf1DHT\x19\xbe\xae\x19\xc3\xa3\xca\xf0AReYC\xa5\xca\xa6\x04Lc\xbd\xad\x8d\x87M\x95M \x9e\x86\x8b\x13W\x8d\x85P\x95\xe5 \xa4*CF\x04\x95E\x83\xaa\xca\x12B\xab\xca\x82\xd1\x10iS\xc2\xac\xca\xe2e\x07\x96]\xb3\x05^\x95Mq6>\x08\xab,\xde\xde \x01Ye\x93\xc2\xb2\xca\x82>\xce\x17\xa2U\x86\x0c\xd4*\xc3\x84k\xbb#\x11A[e\xa8\xbb\x90\x1e\xc0U\x86\x0f\xe3*\xf3\x07s\x95e \xe9*K\n\xec*\xdb'\xbc\xab,\xee\xec\x84P\xaf\xb2\xec\x01_e\x88\x9a\x06\x9f\x94|!`e\xd1@\xb0\xb2)\xe1\xe0@qF~8\x14\x14V6%4\x1c(\x8e\x9b5+o\x80X\xd9\xa40q\xa0<\xf5\xb5\x1c[@@\x84\x8c\x95\xf9c[\xca\xfc\xe1ce\xe9A\xe4@a\xc1\xf0\xb29dB\x909P\x9e\x9am\x06\xd7\xf9\xf2\x05\x9c\x95\xc5\xc3\xce\xcaR\x83\xcf\xca\x12B\xd0\xca\x92\x03\xd1\x83\xd3\x90\xe1he\xe17w$L\xa8\x0c\x1b,\xc4\x06\xa8u\xa9\xa9aj}ZJ\xb0ZY\xd0\x05S\x02\xd7\x81\xe2\xac\xc00\xfe\x91\xc2\x05\xb1#\x8fK\xb5\x0c\x87\xb2\x95e\x0ch\xeb\x02Came\x81\xe0v\xe0\xac\xa9aoe\xf9zuB\x08\\\x17\x8c\x0e\x84+sOfTf\xdd\x9e\xf4\xe3-\xef\xbb\xed\xd9{6\xc8\xd7^\xdb\xd1\xf6\xf6\xfe\x9e\xc3\xef\x0b\xb9\x17\xfc\x11\x94\xbc54[\x0b\xdbJu\xe6\x85\x02s\xee\xcbv\xd8?0\xdaY\x06OG\xc9g\xb9J8\xe9\xc1\xfe\x8f\x17\xa7\xe3\x06\x90\xa0\x16 je{\xbb\xa52\xf3\xaa\xef\x92\xa0\x16\x82\x8aw\x05B\x93y\xf8d\x12\x9e\x04\xb5\x92Yw\x12\xd4\xb2\x0dA\xb3g\xe3\xd8\xf7#\xd8'\xb0\xebY\xa8\xf5t^\x9d\x04\xb5\xf6\xe1\xd2S\x88t4\x8bN\x82Z$\xa8\x85\x9e%%3\xe4$\xa8\x85\xa2\xc4\xa7\xf0\xe1$\xa8\xe5;,\xca~'P\xdf\x18\xb9\xa8\x14\xd2\x9b\x04\xb5HP\x0b\xc3f\x93\xa0\x96\xb4}\x88k\x12\xd4r\x95\x14\xe5\xa8\xa7\x10\xd4$\xa8e\x1b\x82\x8e&A\xad |s\x9clNe\x9a\x13h\xe6d\x8e9\x8d`&A\xad4.\x99\x04\xb5:#A-m;\xbb/*J\xcd*+\x14\xcd\x1c\x9d5\x08\xe6\xf6\xb8\x1b\x1fnk8\xac\xe7\x93\xe2\xa5_\x0e)u\"\x9a_\x08\x1dE\xd6\xe5\x90\x88\xa8\x13\x0b}z\x144\x84\x7f>-\xf2\xb9\x8by\x96\xd5\x1b\x15\xd6\xb7\xfe\xd6K\xc5\xdd\x14\xab6\xa2\x15\x07N\xca\x1fO\xf6\xc7\x1e\x96\xc8\xc1~\x82\x1fE\xed#I}\x04\x9d\x9fD\xe4?\xcd^\xae{\xdeWSI=\xd0\xd4\xde\x8av\x07\x8c\xc6J\xb5]\x9f\xae.k\xe1\xa6\xa9\xd7OR\xe3\x9e\xf09\xfe\xcc\x1e}\xd5\x1e\xbde4$S\xe8\x99z\xc3\xf8\xb6\xa9d\xecBs\x1b\x9aG\xe8\x88\x1a\x19qX\x8e\x96\xe6;\xcc\x98G(\x99\x0f\xe2\xbbJ\x89>B}s\xd32\x0eu\x03\xc3\xea\x82\x151m\x19\xcf\xec-\xcf\xfa\xb3\xc3\x89\xaa~>?\x8e\xd6~uc\xa4+e\xceH97\x7f\x93c\x92\xd6\xbbT\x8b\xef\xb7\xac2\x8e\xdfV]\xbcc\xf4\xf6>\x97\xa5\xadD\x9f\xef\\\xa8\"\x04\xdbV\xb8\xfa3K\xf4\xe7\xb0\xf8\x03;\xd7\xb3\x8d\xb3\xe5\xdeU\xb9.\xb1\xde\x95\xc7\x1a\\\xc7\x87\"\xa9X\x98\xdd\x83\xd5'\xa7\xf8uP\xdaF\xad|\xdb\x7f:\xbf\x81\x15\xbb\xe1\x06\xdd\xd2,\x97\x99\xf8\xc80\x9ez@\xd4E\x84\x9f\xaf\x1f\x81\x15\xf3[(6\x9b/\xe8E\x1b\xa8\xea\xcf\x0f\xf9\xd2:CxT\xf6\xd0Z\xca\xa3\x82\xf8\x8f\xb2Z\x94\xf3\x82\xb3.\xa0o2\x12\xc4\x81\x0eQ\xbf\xb2\x9a\xaf\xb6\x8b\xd1\xcaC\xa1\xae\xd2\x11\x15\xa3;&\xf9\x1c+\xd0'\xb7\x93\xb4\xf9\xc4Aa\x9f\xce\xc7\x13\xdbQ\x13\xe4bM\xc3ZMR\xc9\xc7\xab\x7f\x1e\xc5#w\xac\x9f\xa6rY\xd5\xcd(Lj\x9e\xc6\xe1%\x94g\xf6\xbd\xb1\xd7u\xbdb\x16\xe5\xec\xb8\x81\x0d\xbbc\xcd\xe0\xd4\xd0\xcd\xd3G\x8fo\\i\x01y\x0ds? \x83r\xc45X%\x01\x92\xbaY\xb0f\x1c'\xb9,\xab9{\x03J\xf9\xf6u\xbb\xf8\x0c\xfft\xfc\xcf\x7f\xce\xea\x0d\xf4\xc6\xe9\xe6\xb5y\xf2k\xf7IT.\x82{\xa7\x9b\xd9\xa0Q\xdf\xdd\xf4|\xae\xa4\xc9z!:s\xe8\xf9;s\xab\x7f\xfb\xf2\xbb>Vn\x12\xcf\xeb\x13\xd1\x8d\xc6y\xa3\xf0iX>\x97G\x122\x9ebKp\x8e\x10\xcd\x8d\xfaA\x19&ll,\x15\xfd\x0b\x16\xc6'\x88\xe5fE\x00!\x8e\x01\xc2\x04\x140\xdc\x80T\x91\\\xd7*\x7f2\x12\x08\x13\xb1\xc0`\x81\xc9\xf2\xb8{\xe2\x81\x90\x8c\x08\x06\x8b\x9a*\x8c\x9b\x15\x15\x84D\\\x10R\x91\xc1p\xcf\x9e$\x88\x9b\x15\x1d\x04\x1c>\x089\x11B\xd8\x1b#\x84i(!\xe4\xc2 a\x12R\x18~\x1c\xf0\x02\xb8\x07@\x0b\xe1\x80x!\x1c\x061\x84D\xcc\x10\xa6\xa1\x86\xb1!\x98\xa3pC\xc8\x8b\x1cB\x02v\x08\xe9\xe8!L\xc0\x0f\x11C&V\xeavo\x0c\x11b(\"\xe0\xa7g\x08$\x11\x12gq\xc9hb\xb0\xb4\x14q[l-3b\x8a\x90\x84*Bn\\\x11&\"\x8b\xe1~\x85\x14\xb4\x9d\x88.z\xcb\xe3H1\xdb<\x08#\xe0I<\xc0\xa0\x8c\x90\x863B\x8c?\x9a\x885\x02\xa2\xdc\x00\xe2\x90 q\x84I\xce\xc5\xa3\x8e\x80h\xe5\x04\xe4\x11\xa6b\x8f\x10Q|\xcb\x86?\x02\x1e\x81\x04$\x06 h\x14\x12p^OG\"! \x8b\x84\xa8=\x0b\xdc\x1bN\x14\xf6i\xf9\xe0\xde\xfc\x82\xb0X9X\xdc\xe0\x91O\n\xb6\x1b>\x82B\xb0\x892\xb0\xbd\xdc\xab\xa7\xbc\xa8\x08\xac\xb9J\xaa\x04,\x8f\x91\x1bqn\x03!\xfe\x1a}\x0b\xa3\x85_\x11%\xc5E_q\x85\xa0\x05_#\xc5E\xc5^\xa3\xd5\xc1HA\xe2d^\xb3\\\n!\xf0\xca\x9f\x01M\x14\x95u\x8d:\x03P\x92\xae\x88bp\x83T\xb2\x98+B\xb25\xaf`+R\xaeu\x8aX+R\xaa5\xealL\x07F\x89\xb4f\xb9RX\x9e5z \\\xbf\xc9&\xcc\xdaO\x8d\xc7\xbf\xc4+\x92O\x92\xd5]\x8b\x04\xbdI\x94\xdc\xe4H`rT\xde\xc7\x8bS\x92\x97\x04\x92\x97\xcc6\xb2\xa72\xa6&0\xef-\x10\xcb\x97feKI^\x92\xe4%{\xcb\xca\x8c\xa6\xf0\xa2I\xac(\xc9K\xee\xcb\x85N`B\xb3\xf0\xa0\xe9,(\xc9K\xee\xc3~\xa6p\x9f\x13\x98O\x92\x97$yI\x92\x97\xc42\x9bYy\xcd)\xac&\xc9K\xfa\x0e\x8b2\x99 <&F<1\x85\xc3$yI\x92\x97\xc40\x95$/)m\x1fn\x92\xe4%]%E\xd9\xc8\xa9\\\xa4\xf7\xdd@\xf2\x92\xbbF\xf2\x92\x13x\xc68\xcb\x98\xca1&0\x8c\xc9\xfcb\x1a\xbbH\xf2\x92i|\"\xc9KvF\xf2\x92\xdav\xe4%K{\xe4\x1e|IZ\x87\x0c\x02bj\xb5\x1f\xca\x05\x8c\xa4$\xed\x11\xa9\x94\x9b\n\x0e\x86\xc1^\xe9\x857\xdb]\xa1\x17\x9c\x9e\xd1\x9e\x020':\xe2\xdf\x06\x94`\xde\xe9C:%\x98B\xaa:\xe9?\xca\xd8_[V\xcb\xd5n\xc3we`\xde\x0dH\xb5g\xab\x02cZ\xf7#\xd2\x8eH;iD\xda\x11iG\xa4\x1d\x91v\xca\x88\xb4#\xd2\x8eH;\"\xed|F\xa4\x1d\x91vD\xda\x11igY\x0e\xea\x89H;iD\xda\x11i\xf7[ \xed\xba\xc0\xb3\xaf\xfe\xdd\x01\xa3\xad%U\x0cPG\xf6X\x0b7M\xbd\x1e\xb4\xa3\xcd\xd8\x90}\x01\x0b\xb9\xbb^\x80\xa8\xb8\x12\xbf\x7fTp\x90A)\xe4[B\xae\x9e\x0f7\x14\xbc\xab9\xf3c\x12VI/L;\x9f)*!\x1b\xb7;\x91\x1f\xd4E9\xc0\xbe\xf3\x8d\x12R\x11\x93%\xf1\xdb\xee\xfb\xd3[\x13\x88\xc6\xe1\"\x1b\xf9EV\xa0\x10\x1b\xf8EJ\x08o\xdc\x17?\x19\xb5a\x9f\xb7\x18DT\xdb\xea])\x91\xed+G\xc8\x83\xe2\xda\xda(\xaeMq\xed\xde(\xaeMq\xed\xde(\xae\xcd)\xae\xed6\x8ak\x1b\xa3\xb86\xc5\xb5)\xae\x8d\x9c%Q\\\xbb3\x8ak\xdbFqm\x8ak;\x8c\xe2\xda\xcec(\xaeMqm\x8fQ\\\x9b\xe2\xda\x14\xd7\xa6\xb8\xb6e9b\x8c\x14\xd7\x96Fqm\x8ak?\xdf\xb8\xf6\xbeq\xe2\xbb\x9a\xb3\xd0\xeeR?\x89\xdf\xbb\x08\xb1\xf9\xfa\xe0\xa01j\xa2f\xf6\xef\x12\xe5\xa9)\x9c\x1a\x0fw\x82F\xb4\xd3\x9d\xb4E@k\xb17\xda\xe9\x0ep3\xcc?\xd2Nw\xf23'\x85PT\x1fV\x1f/NG\xa5\x11\xa1H\x84b\xb6\xf7(\x11\x8aD(\xba\x8d\x08EiD(\xee\x1a\x11\x8aD(\xfa\x8c\x08E\"\x14\xa5\x11\xa1H\x84\"\x11\x8aD(*#B\x91\x08E\"\x14\x89P\xf4\x19\x11\x8aD(\x12\xa1H\x84\xa2e9h1\"\x14\xa5\x11\xa1H\x84\xe2\xf3%\x14i\x8f\xbb\xa9\x1b\x88\xd1\x1ew\x07tn\xbc\x8f\xd2\x1ew9\xbcH{\xdc\xd1\x1ew\x7f\xcc=\xee$iu\xf2\xab\xe4\xbaB\x9b\xdb\xbd\x94t\x98\x8d\xd8/\x1c\xdb\xd8\xd5=l\x7f\xfe\xeeH\xd1br\xff\xba\x97\xba<7z\xff\xc2\xb4\xfc\x19\x93\xf7>,c\x12#\x16\xe5\xe7\xa3\xb1\x85(\xd9\x14 \xe7#\x85\x07\xa9y\x1ea\xe6\x9fb\xdf\xba8+\x1fu\x9f\xb28'?\x8d\x92Oc\xe4\xd3 \xf9$>~\x12\x1d\xbf\x07\x1b\x8f \x1b\x19\xcb\xcc\xc5O\xa6\xe2\x9f\x94\x89? \x11\xffT<\xfc\xa1h\xf8'g\xe1\xe3$#\x1c\x97p\\i\x84\xe3\x12\x8eK8.\xe1\xb8\xca\x08\xc7%\x1c\x97p\\\xc2q}F8.\xe1\xb8\x84\xe3\x12\x8ekY\x0e4\x92p\\i\x84\xe3\x12\x8e\xfb[\xc0qe\xf8\xcdWw\xf9\xe3\xa0\xd6\xea/z\xfb\xcb.x\xb6y\xc2\xbd/\x0dw\xb5.+~r\xf7\xcd5\xe3\xc57'EUm\x8b\xd5LNU\xda\x1e\xaeq\x81Vo\xe5\xa1\x17\xdd\x91f}\nD\x81b\x18UeA_\x96z\xd5\x99\xa6\x0d\x08\xabqa/L;\x9f)h\xe5\xf1\x93m\xc1e\x9e\xe0\x02O|\x01e\xe7\xf2&&\x1b\xbd\x07\x8e\xc2\x06wEYX\xbaK\xf6\xa0\xf1\x1dCE\x87]\x05\x9d\xect$\xdaZR\x1bE\x8aC\xcb\xa4\x07XdM\x1a+\xcb\xeafe\xa9\xfc\xb9\xc6\xc8ss\x88\xa6s\xdd\x0fiWP`\x80\xecJ\xd2?>\xdb\x91q\xe4\x15\xdb2\x8d\x88\xbd\xbb<\x83\x9e\xc7\x9f\x8e\xa2\xdc\xb0K\xe7\xeb\xe9cZ\x7f\xe3?^\x9c\x8e\xe7l4\xb6\xd1\xd8\xf6\xcc\xc769W\x0fL\xfe.\xe4\xef\x83QM\xe5g\xc8\x94\xa4\x9b\xeeQ\xec\xe7\xfc\xceQ\xed\xc7\xb2\xe2\xaa(\xfd\xeb\xb3\x1d\xd6l\x87\xd86\xfcDQ^\x19j\xb9\x1a\x07\x98\xcf\x93u\xbd\xd8\xae\xf2*\xb9\no\xcf\x16\xac\xaa=\x90x\xb4\xc3hmQ\xae#a\xf3\xba\x94\xdf\xb6\xa2\\\xc7\xf1\xdd\xf8:k\n\xcef*\xb4\xbd\xdf\x95\xd7\xc5C\xb9\xde\xae\xcd|U\x15)>\xb5\xfb\xb1\\\\+X\x99u\xf1\x90\xa7\x12)\xd7,=x?\xfa\x9ae\x85\xbb\xe6\xb2.V\xb3\xeb\xbaZ\xb0\xa9\x99\x18\xfa\x8a\xa2 q\x937\xac\x99\x8b\xb7\xa6*\x13\n^\xaf]_\x07\xd7\xabz\xfe\xb9\x9dmX3{d\xc5\xb4D\x0dD\x16HW\xbd\xee=\xa7.,\xaa \xe2\xc2\x83s\x10/q5\xac\xa0\xde\xe0\xfa\x9d\xad\xc74\xa2V\xe9}\xed\xfa\xfd\xb9\xbd\xaf\xd5\xcb\x06\xfd\xc6\xb6\xbe\xe2uG79rE\x8f\xb5to+\xc5\x98\xabW\xd5\x91NW)y\x0b\xed\xf6\xba\xdd\x14\x125\xeb\x17\xea>\xb3G\xe7\xdb\xfd7\xf4f\xc7\xbc\xd8\x07\xefu#\x00\xdfy,\xeb\x0b\xdd\xb8y\xd2h;U\xd2=\xd0\x87\xbdgN\x1a\x88i\x10\x06\x1a\x84\xdd\xa7?\xb7A8\x14\xb30\x0f\xa9\xaf\x07vc\xa5=n\xa8!UL\xae\xfb\xbd\n\xfaQ\xf7f\xc8\xeeN\xc9\xba\x1e\xb5\xd0T6 \x11\xf2\x99=\x0e\xaa(\xfemB)]\xcdt(\xde\xb4)k-\x13\xdft\xa6\x0e\x81\x97\x9d5\x12]\x9a\xa3\xbb\xf7\x9dL\xcf\\\x89w\xca\xb2l9k\xd8\xa2kV+\xa3\x95\xe2\xc7\xcf\xecq\x9c\xc89n\xfb\xc0\x89/\x9d)\xf4\xff\xeaL'\xef\xaa\xa4\x7f|\xb6\xaf\xc6\x91\xa7m\xfb\x12\x03D\xf8\xad\x88x\xc4\xc5M\x0d\x9f\xbc\xf7\x1ek\xde\xab\xc7\x83:}_\xb5\xb2\x05\xfb'\xb0\x1bN\x14V\xa3\xfb\xa9~`\xddL\xa9\x8c\x95\xb3\x87\xb2\xe52O\xc4s\x8c\xfdT\xbb\x8fq\xf7\xed\xc1\xa1\x88\x89@\xd7\xed\xbb\xb9\x80=\xea\x0c&\x05\xea\xd1\xebd\x86v\x93\\\x8a\xd5\x0e\xd3\x8e|\x9c\x03\x8d\x8d4\x93f\x1c\xa3_i\xc6q\x80\x19GT'\xe5\x1f\xdb\xa2)*^V\xac\x8f\xda\xcfyy\xc7N~\xe5\xf5L\x13\x05!\x85\x94\xf3\xf6\x7fuE,`~\xcb\xe6\x9f[\x05\xa8B1WB>\xb7E\x0b\xf5\x86\x9b\x04\x9d\xfe\x92\xee\xd8\x94]\xa0>\xe0\xd9\xbe\xd3\xcav\xd67\xc7\xb1\x94\xa6\x8a\x1c+\xf9\x18\x8b\x8f\xe2\xc3\xf2\xe5\xba\x93\x96\xecQ\x8b\xe4\xe6\x0e\x8d|\xec(i\xd7\xeb\xca\x10C\xed\xe0\x8e8\x87\xdb\x8f\x17\xa7\xfd\x90+q\xc4Q9\xc3^\"\x87b\xfa\xf8\xa2\xa1\xf0)\x87\xc2\xd0\xc7W\xff \xf9\xfa\xa0\xf5\xa8\xe9\xc5_\xf3O^\xabQ\xef \xab\xe0\xa8\xbd\xe55v\xcc~\xbb\xe5\xb5y\x8e[q\x84n\xd1\x96\xd7\xaf\xbb\xc7\xb8e\x9c\x97\xd5\xd2Lt\xecaH\x0f\xec\xceO\x17k\x08\xb9\x1a\x0eQr\xadF9\xe1\x18\xceo\xa0\x80\x9b\xa6^\xdb?wL\xbb\xa4\xc1M\x95^\xf4.\xd4US\x8b<\x05\x1f\x16\xa0\xb9\xcd\x17\xd6\xf1J\xc3\xecXg\xe9\xfa.w$'u\xfe\xd6w\x05\x8a\x1a\xa9\xd5K\xabY\x06\x17\xed\xae\xa6\x0f\x1f\x12i\xb6\xc7_\x0c\x9b\xf3\xec^j\xc2\x133G\xed\x8c}\x91\x11\xa5s\xf8\x1e\xa3B\xe4\x89n\xd8\x9c\x95w\x12tS?\xec\xae\xc2\n\xb3\xbbQ\xae\xca\x8c\xbb\xa6\xfc\x8e\xd2\x1a{\xc1\xca\x98\xdb\xe4\xabH|\x8a\xa1\xac\x19\x85\xb6\x9cO\x83Y]\x15\xdfU\xf7\xbe]3\xc1Txw+Sc\x08\xef\x845\xca^\xc3\xdbOW\x1ff\x1f\xcf./>\xbc\xbf\xfc\xdd\xd9\xe9\x0f\xe7\xef\xcf\xbcn\xd6\xc2a)\xf5\xc2\xdc\x1b{\xe08\xabx3\\\\\x13w\xc9\xfa\xd6\xad\xa5\xa4\xc2\xee\x9b\xac7\xd1\xcf\xa0\xa8d\xf6\xf3\xee\xdd\x89Wh84(\xbd\xc8\x9d\xde\xc2*\xae\x96\xc6\xc4\xc54\x88,\x07ZG\x81\xa3\xa9\xa0\xb2\x8c[\xde\xee\x12\x13\xae\x81SYp\x88\n\x0fP\xb4\xfb-\xed~;\xb2\xe7\xb2\xfb\xed`\xea\x81\xfbz\x1b\x153\x9c.\xd2\xc7\x1b}\xbc\xfd\xe6?\xde\x1c_3bp\\2.\xe5}a(j\xb7\xe7\xe7\\_U{\x9a\xe7\xab\xecx*h $\xc9)\xa1\x95\xe8\xc3k-n\xee\x18I\xf7\x8e\xa39\x05\xa7io\x00\xf0\xf7a\xda\x1b\x00ho\x00\xda\x1b\x80\xf6\x06PF{\x03<\xd3\xbd\x010\xab\xa7'\xbf\xda\xefaZL}\xb6\x8b\xa9f\xfaM\xab\xa9\x96E\xa7\xf8\xb4\x9a\xea,\x87VS\xe3\xab\x96\xeesh5u\xe7\x88x\x85h5\x95VSi5\x95VSi5\x95VSi5\xf5\xb9\xaf\xa6f\xa93\xad\xa5\xa6-T\xd1Z\xea\x01\x9d\x1b_\x05\xa4\xb5\xd4\x1c^\xa4\xb5TZK\xfd}\xad\xa5\x06\x96Ro\xb6\xd5\xa2\xf5/\x97Z\xbe\xb2\x90\xf0\xef\xc5Ij\xf1\xd4\xde^\xb5\xb8\xae\xb7\x1cd\x89\xaa\xab\xcb}?\xae\x19\xeb\xef\x965\xf7\x88-\xa1\x9e\xdf\xc0u\xcdo\xa1\xb0\xa70E\xb5\x18N\x12\xc4\xbd\xb1\x163\xabGh\xb7\xf3[\xfb:]\x81\xaab\xe35Kh\xd8\xb2h\x16\xf2\xa5P\xdf\xf4\xb7\xec\xfe\x96\xe9M'\xd8\xe3K\xdd\x0cX\xb0\xf9\xaa4\xcb\xaa\xf2\x19)F\x13\xac\xbe.v\xff\xd8Vf\xf3!-\xc2m\n2\x95*J\xb9\xc6$\x9ch/\xe2\x9aE_\xb9\x98\x10Xw\x95\xab\xbc\xac\x94\x15\x1e\xd4\xa8\xb2\x96p\xc3k\xc0U]\xbd6\xb5z\xe1\xba_\xba\xaarI\xbcz\x04\x7f]\xae\xe4\x00'?\xfe\xa0\xec\xa7ze\xa56\xa1(;\xcf\xf9*\xe4\\F\x1ew\xbf\x17C\x1f=\xbb\x85\xe4\x7f\x8c\xea\xfbL\xbeo\xb2/%\x07\xd6Uw?=\xc47\xa5T\x9ci\xd8\xbc\xdc\x94\xd6\x06f\xf3Z\x89J\x07vK\xebF\x13\xd7(2\xb4\xfey\x9b\xd9\x9d\xcc\xe7\x95\xf0\xbdP\xb6_\x06($\xb8\xcd[\xf9n\xc9Q}\n\xd9\x83lU\xfb\xfd&]\xb6)\x1a\xae\xa5\xc7U\xe9\xf0\xc8\xb8\xb5\xa6-\xfd\xefv\xa6\xfc\xe9\xc0\x8e\xf3vhe\xb1n\xad,\xa0\x82e\x0cq\x9b\x84\x15k1\x1d\xcaP\x14\xf6\x9e\x03\x9c\xd6\xa5\xbd\xd3*\xaf?\xb3J\xefh\xa3\x1af\xa6r2\xad\xd5\xbf\xf5\x93\xa9|h[%\x80\xf7\x1f\xae\xce\xde\xc8\x91Z\x1d\xad\xb5\xde\xd5'\xf7y\xc5\xb5\nv\xb7\x05R\xbb3\xdd\x19\x9a\x16\xc9VB\x1d\xa1\x0b\xb7\xe5\xb2*\xf8\xb6a}DTL\xfb\x97\xf5\xb2\x96\x1a\xd4\xbe\xb0 \xd6\x91j\x1c1\x81\x1c\xd5\xb6~\xf3\xac\xb2\x1a\xbe\xd1\xb4\xfc\xc8\x1e\x01\x1d\xf3\xca\x0c?\x1f\xbe\x94Be\xd8\xb6u\x93\x86ab\xa1\x98 \xa8Y\x04\x93\x93!vW\xd6\xdb6\xb0=_7\x8bq\x1c\x81\xa9\xcb\xceL\xd0t\xdb\x967\xdb\xb9\xb8\xb9#\xa5\xf6V\xdd\x16ga\xc3\x89bxh\x1fTn\xfc\x82\x95\x1f#\xd5M\xad\xa7\xa1\xaa#\xb4%\xd7\xb2\xa0\xde\x94J\n\xb9\xec\x1a\x85\\\xfa\x9f\xb0\xce\xa4\x90\x8b\xfc\xdc\x1c\x0f\x0e\x93\xa2.;#\x0c\x05^(\xf0\xf2\x1b\x0b\xbc\x8c\x1e\x8fi\x1fC\x8e%\x14p/\xa3\xc0\xc4\x15\xa4=\xa25\xa3\x16\xfa8\x9e~wI\xf5\x91\x01\xe77\xf6\xda\x83\xdb\x95z\xbf\xeab\xd5\xea-\\\x87K\x03\x90\xb7\xb5\x14\xe7\xc1x\x8b\xe2<\xca\x0e\xec\xdcx\x84\x82\xe2<9\xbcHq\x1e\x8a\xf3\xfc\xbe\xe2@q\x1fm\x14\xf71Fq\x9f\xa1Q\xdc\xa7\xb7\xd8\x0c\x8e\xe2>\x99\xe2>Y\xf2](\xea#\x8d\xa2>\x14\xf5\xa1\xa8Oo\x14\xf5\xa1\xa8Oo\x14\xf5\xf9-G}\xf0RI\x14\x04\xa2 \xd0\xf3\x0c\x02\x99\xe7\x8a\x82@\x03\x8b~kQ\x10\xc8i\x99b\x19Y\xdcFA\xa0\x1d\x8buke\x14\x04\x92FA \n\x02Q\x10\x88\x82@\xf1\xb8\x05\x05\x81\xcc\xc1\x14\x04\xa2 \x90\xb6 s}\n\x02E\xe7q\xb1\x19\x1c\x05\x81(\x08d\x17\x87\n\x02ei+\x85\x80\xd2\xd6\xd7)\x04t@\xe7\xc6\x83\x17\x14\x02\xca\xe1E\n\x01Q\x08\xe8\xf7\x15\x022\x11\xa0vU\xb4\xb7e\xb5\xec\xe2?r\x16\xa3Oq\xc5x.\xe4\xef\xb2Ve\xf7Ak\x7f\xc5\x9a\x12a]/\xb6+S\xbf\xc1\xea\xfc\xa5>D\x95\xf5\xc2\xb4\xeb\x99.\xcd\xdb\x1e\xb1m\x8f\x0f\xf2\xb6\\Vl1\xbb^\xd5\xf3\xcf\xed\xec\xbe\xac\x16\xf5\xfd\x9e\xdf\x93\xbe\xcf\xc9uY\xcd\xf4\xe56\xac\xc9s-\xcfB\xc0\xa2\xbe\xafx\xb9f\xb3\xbf\x17\xe5j\xb6\xd86\x9eE\x12\x88_Kv\xa2\xd9MS\xccE\x11\xb3E\xbd\xbd^1\xd9\x8eI\xc5E\xab\xbes=\xd5\x92C\\,\xbed\xa6\x1f1k=l\xf4\x94\xc9\xf9\x8d\x18\xce\xaf\xd5\x12\x88y\xe4\\\xb7_>\x84\xc3E\x0c\xdf\xfa\x82\x1c\x1b\xd4\xc5\xbb\xcf\xf0n\xb3\x0f\xfdo\xd1\xf6n!T\x9ep\xa2\xab\xfb\xf1\xe2tT\x9e^\xde5\xff\xa4\xaf\xf0\x1d\xff\xd0Wx\xf6\xaf\xf0\xe4\x17\x9e\x18T\xcaj9+\xab\x9b:\xf0\xde\xbbT\x87\x9d\x8b\xa3\xba\xb7\x9f>W\xab\xa0\xdf\xc8\xd0\xb8\x8c[\x17\xbcn\xcc\x8bm\xf8\xea\xb3\x8a\xd1\xbf?\xdb\x17\x9fh\xd5\xf3\xe8h\xfb\x06\xa1[^4|v\xcb\xca\xe5\xad7L\x17-$\xfe\xae\x85\xc0\xe0\xda\xdb_e5\xa00Q\xb3\xae\xc3\xc8U\xd6\x9b\xb2i\xb9\x98\xda\x17\xd5B\xfc\x99\xc1\x87\x8f\xe2\x07oq\xdbJ\xbcn\x9d\xdb\xc5\x88[\xb8`\x0f35M?p\xc3\xe3\xef5e\xe7\xa2J&`\xd8\x8a/\x9bF\xc6\x0c\xc5\x98/\xbe\xf4\xc4{W\xbe]\x86~\x19\xaf\xf9\xf6v]W\x0b\x16\x88\"\x96\x15\x14 \xa7Z2\x18\xba.\x1e\xd52\x99\x9a\x15A\x01\x9b\x86\xcd\xeb\xb5\xf8\xf6\xad\x1b\xa8j~\x0cW\xb7\xa5\xdf\xe1e\x05\xf3\xba\xfa\xfb\xb6\x92s\x05\x15t\x153\x7f\xef \xbf\\\xca+}'g{?\xcb \xd8/\xeau.\x86s\xd6\xac\xbb\x85ny\xbb\\_\x12\x83\xe2~,\xdb\xd6\x14\xf7]\xc9\xdf\x8aG\xf1\x17w\xbcQu\x8d\xd9\xb6\xe2\xe5\xf4Q\xba\xbf\xff\xa2?\xbe\x167h\xcf>pU\xaeY\xcb\x8b\xf5\x06d\xcdto\x18\xde\xf4\xb2\xd5\xb5\x87\x85\\\x11\xf0\x16\xb6*\xefX\xc5\xda\xb6\x9b\x7f\xba]\xc1\xeb\xf5u\xcb\xeb'\n\xbe\xfe\xac\x810\xd5\xa3\xd4\xc2\x86n\xd8m\xd1\xaa\xe0e_#x\xf5\xb9\\\xf9\x9eaa\xf5V~\xe6\xf7\x85\xb4\x8c\x7fm\xbe\xb7[\xc6\xfd\x9d\xaf\xae\xe6\xe3\xc7Iuv\x19\xbb\x17\xdf\x92w\xf5\\\xad\x08\xd4\x8d\xe1\xb5\xfc\xa5\xc9F\xcd\xeb\xea\xa6\\n\x1b\xb6\x80u\xd9^\xb3\xdb\xb2\xb8\xab\x1d;d\x81\xfc\xfe\x10\x9d\xd5|\xea\xc85\x05\xe6\x98v)K\xe8\x8a9\x86\xa2\xb7\xa0\xeb\x03\x9f\xd9F-@\xdd\xd5\xe5\x02\xb6U\xc5\xc4\xfb\xb5h\x1e\xd5\x8b\x0e\x1aV,\xc6\xeb#\xb6\xbd\xaf\xcdZ\xce/\x97\xdb\xf5+\xd7\x13\xfa\xf5/P\xac\xee\x8b\xc7V8\xbdX\xf9\xc7\x97\xc1\xf3}\xaa*\xe8|\xbc1\xcd\xfc\xc9\xdcuk\xe2aq#]\xa7x9\x9a\xcc\xd8;9\xda\xb6\xae\xab\x92\xd7\x8d^\x85.\x1b\xb7K\xbaGR|O\xdd\x95|g\xcf\xb2\xee=)/f\xd6\xff1\xb3)c\xa1(\xfc\x1e_\xe6\x14*\xa7P\xf9\xc8\x9e$T\x0e\xa8\xe7\xd9\x0e\x16\xa9V\xa9\xfbu\xcd\x16\x0b\xb5\x04\xb9\x1c\xc4\xca\xf5\x17f\x0b\xf7\xe2\x9e\xb9n\x8f{\xde2\xaf\x1bU\x86\\\xbb4x\xae.M\xbe\xc0\xe4\x12\x84\xed\x19\xa7;\xcc\x19\x97\xf5\xba\xaf\xf7\xaf\xde\x91O~\x0cmX!\xe6\x82\xdf\x15Mw\x93\xbe\x85o\xfe{\xe8\xa4\x81[d\xff\xfe\x16\xfe\xe4<\xe3?\x07\x7f\x0c.\x84\xd8_j\xa8\xe5\x10W!'\x83\xcf\xc6\x8f\x17\xa7c7\xd1\x1a \xad\x91<\xf9\x1aI\x88T\xa0\xf8vZ\xf0\x90\xe2\xdb\x07tn<2K\xf1\xed\x1c^\xa4\xf86\xc5\xb7\x7f_\xf1\xed\x97\xb8\xf5\xfe\x93_\xe7u\xd5br\x1b\xed\xefg;\xf8=\xfeh]\x8aO_\x10\xa5\x8e\xb6\x16\xf7\x85\x01^\x98f?\xd3(\xc0]\xb1\x9a\xd9>\xcb\xfa\xb9\x1d\\\xd8\x8fLn\xe2\x8b\xfa\xd1\xd9Q|1)\xf6\x81\x99u1?\xb0\x94\x1f_\xc8\xcf\xd0\xd8\xf8\x07(\xe4_\xc0\x0f/\xdfO\\\xbc\x1f\x8f\xfe\xbd\xa5,\xddg]\xb8\xc7/\xdb\xc7\x17\xed\xd1\xf7:\xbc`\x8f\xbb\xdf\x19\x17\xebQK\xf5\xb1\x85\xfa\xf82=\xae]\xd3\x96\xe8\xa1\xde\xfa\x12\x0f\xa7,\xd0\xe7\\\x9eO]\x9cOX\x9aGw\xb8}\x07\x97\\K\xf2\xf9\x16\xe4\x91\xcb\xf1\xf1\xe6\xe5]\x8a\xc7,\xc4\xe3\x97\xe1\x9d\x15\x1e\xbf\xf9}\xeb\xf4z}\x90-\xc4\x19r\xea\xe3(\xccE\xedc\xd7\xdf\xb2,\xbf\xd1\xea\x1b\xad\xbe9\x7f\x7fN\xabo\xf6\xd7\x88\xaf\x17\xda\xc7\x98'\xc2\xfc\x93\xd7:\xdc3zF\xad\xb2\xf6\xcc\x84\x89\x7fp\xf1\xe2\xb3\xfd\xbd\xb5`+\xb6\x94o\xb0\xf6\xe4W\xfd\x8f\xba\x91\x0d@j\xc9\xbc3'\xbd\xeb\x8b\xea\xbe\xc1\n\xb9\xc2\xd2\xff\xbd\xbe\x81B\x7f\x84u\x17\xebJ\xd2n2\xcf\xea\xe0\x93\xccu\x15}\xdc\xb3\xfd6\xeb\x1b>s\xd4\xd1\xd8\x97x\xf0\xfa\x9a\x85\x1f\x9e\xa0\x92C\xec\"\xd0_H\xf7\xa8\x00$\x06\xb8\x07\x16P\xefr\xfb\xd8\xd1\xf5\xcd#y\xcd\xe6\xb7\x7f\xfe\xd3kV\x89Ay\xd1=\xa1\xb5/\xcc\xa8L\x9c\xd9\x15\xe9&*@\x0dKj\xb2\xf0\x85Z\xbds\xfd\xfd[\xdd\x15\xe9ou{[4aM\x8f)MU\xa5\xea\x99\x98}\x03\xc4\xa4[\xff\xd8\xb09+\xef|\xfa1x\xdf\xf5c\xcb\x18\xef\x16\x9f\xc1\xfa\x83\xb4\xfe\xcc\xaa\x16n\xd9Jj]\x04\xc4;\x8a\xb9\x9c,\xeb\xcf\x8c\x00\x03t_)\xdd\x8c\xba\xb2z\xd7\x91\xfc\xa2.[(\xda\xb6\x9e\x972\xea\xda}\x11\xfb\x8a\xba\xab\xa5@\xc2\xa6\xbeW\x8b\xb0u\x15\x00\xdf\"\xb7\xf4\xbaX\x15\xd5<\xf2v\xcd0@Dd^P}&.\xf1\x82(\x06\xdbK\x12\xc5]\x10\x12.y\x05\\\x90\xf2-S\xc4[0.\xea\x1f\"\xfb\xc3@~+\x17+\x19\xdf\xaa\xed\x07\x8d=H\x01#\xafXT\xc9\xc5\x94\x8a\x17e\xd5\xdazj\xb6\xe9\x9e*W\xa3\x16\x8bR\x16\xcbk38tKa\x12\x86i\xb7%7\xf1\x08ga\xf3\x95\x0c\xc2u/\xec)\xdf\x92\xae\x17\x7f\xdfcV\xab\xd10\xd6\xbe\xec\xa1*\x7fi\xbb\xcfiF\xa9\x93>\x90F\xfa&\x04m\xfd>\xa0\xadp\xbf\x90_F\xae\xaf\n{\xd4\xc2/e8\xbf\x82>^\x9c\xeaa\xb8\xbf\x8f\xb4\x8a1\xfa\x95V10\xaf\x14eo\xe1\xd3\xc7\x1fN\x1a\xd6\xd6\xdbf\xce\xe4\xaa\x84ZF\xddV\xe5?\xb6l\xf5\x08\xe5\x82U\xbc\xbc1\xf1O\xd9o\x03\xd3{\xb9`\xc8\x9a\xb2X\x95\xff'\x94\xa5!g\x04\xf3z\x05\xd7\xdb\x9b\x1b\xd6\x98\x9b\xa6\xc39\xaamJ\xe6C\xbf\xac!\xa0\xfd\xb8bE\x1bd\xe2\x19|u\xf2\x15\xcco\x8b\xa6\x98s\xd6(\x19\xd2U\xd1rh\xd9rmi\xab|\xfa\xf8\xc3\xcbv\xbc^24Y\xa9n6\xef\xbf\xaa(\xeef\xbbZ=\xc2?\xb6\xc5Jxp\xa1\xfck\xf8\x06\xe1\xc9W\x85\x8c]y\x0b\xf9ET\xe5dY\xd7\xcb\x15;\x96>\xbb\xde\xde\x1c\xbf\xd3\xb9\xb6\xbf|\xadZ\"\x8b\xed\xf9'o0\x0cTl\xb2\xae\xcay\xb1\x92\xcf\x90\xff\xca\xaf\xd8\xf1\xf2\xf8H\xb8V\x06\xfc\xbf:\xfeJ\x8c_2r\xa2\xf5'\xbf\x0e\xcd@\xcf+\xd8\xc8\xf4\xda9;\x02\xce\x8au\x0b\xdbv[\x08w\xa8\x10\xde\xa6\\I\x91\x9bZ}\x0e\x95U\xd1\xf8\xf3\x10\xe4\x14\xe7q\xc3\xda\x0e0y\xf4_Z\x8dub\x9e\xc7k\xd8\xb6\xcc\xccEDG\x12/\xd7\xfa\x06\xdeV\x8f\xc7\xf0\xd7\xfa\x9e\xdd\xb1\xe6\xc8;s\x13\xf6\xe9\xe3\x0ff\xc6'\x8a\n&\xfe\xc8\x11\x94\xc1/\xb7\x9co~9R\xff\xdf\xfer\xa4\"N\xfa\xd7#\xd9\x1b\xe7E\x05\xb5|:\x85G\xfc\x052\x0e\xdb\x8d\xf8$x\xdc\x84\xae\xcb\x9a;)F\\pX\x17\x9bVu-Ys^wP\xae|\xb7\x95\xea=\x12\xc8/\xbb\xa9W\xab\xfa\xbe}\x13\xb8\xb7\xffU*\n\x9b\x16\xc1@-X7Z\x7fgn\xd7\xe2\x1b:P\xd0\xdb\n\xfezuu\x01\x7f9\xbb\x82\xba2\x8f\xa0z\xc6\x1e\xe57\x8b?\x11\xec\x7f\x8f\x1f\x8b\xab\xc7\x0d\xfb\xf7\xff\xfd\xef\xde\x13\xc0\xbc\xea+\xdd\xdf\xf4kD\xde\xa1MS/\xb6s&\xc3p\xe2\x15\xe6_\x96\xf8\xaf\xf0v\xb3Y\x95s\xfdN\x16\x93\xacB\xf8LM\xf9\xe6\xc5\\\x8c-u\xfdy\xbb\xe9f0\xd7E\x1b\xca\xf6 '\x80\xc9N(\xeb(C\xe1\xfc\x96\xad\xadgh\xa1\x1e\xa2\xc24\xa9\x0b\xa1\x85\xf2z@WP\x0e\x1f\x0d\xbb\xa9\x1bvd\n\x10\xe5\x16\xbc\xbc.W%\x7f\x84\x8a\xb1\x85\xa1\xe4\xe4\x90\xd7\xdc\x05Z\"\xdb2\xbf-\xaa%\x93'\xc9g\xf6\x18^}j\x19\xdc\xb1\xa6-ehUvO1f\xa9\xfeYT\xc52\xd4\xfa\xeb\x86\xc9%fS\xf0\xf1\xd7\x81\x0f\xdf\x9a\xb37\xc0\xc5;\xe4F\x87\xfd\x0b\xd9\x0e=v\xf5b\x9f\xd6\xa4\xd2?\\\x8a\xfeX\xcb\x19\xb8\x7f.\xa9\xdfe\xd7[1a\x15o\"\xa6WZ\xb8\xb9h\x97\xbf\xdf=\x97\xde\xa2$%+W\xf2\xc5\xf7\x7f\xe0\xe5\xf2\xb8a\xc7\xaa\xff\x17\x9b\xb2=\x9e\xd7\xeb\xd0h|)\x9f\xd4V\x87\x8c%\x0f:\x1a\xa5\xe0\x95N\xf2W\x1f\x16\xea\xd1\xfe\xda\xff\x12\x94\x18\xccu`PR\xd0j\xc9\xadU\x06\xbd\xc4\xb6a\xf3\xf2\xa6\x9cC\xcb\xd6E\xc5\xcb\xb9G;\xf5\x00\xa1\x98\xb1agI?\x8a\xe1\xe8\x9a\x99\xa8\xad5\xc1\xd9\x99\xc7\xe8\x97{q]\xdf\xf9\xfb\xb4v\x81~\x14\xa6\xae\x8b\xfc\xf2\xb6z\xfc\xc5Z\xcb\xa8\xa0h\xaeK\xde\x88\x87\xd8_CgQ\xe6\x1dQ\xacj\xdd\xf5|K#bt\x96/\x1aU\xc3\xeb\xe1\xb4p4\xfd\xebfu\x9e\xaeya\x1e\x9cUy-\xab\xad\xdf#-\xb4\xdb\xcd\xa6n\xe4\x1b|S\xcc?\x9fl+\xf1\x7f\xe2\xbd\xad\xfa\x85\xfb \xd2/z\xff\xc4\xa6\xbe\x81-W\x03\x9b\x19\x1eZ1\xb0\x9aU\x9eb\x05KV\xb1F.\x8e\xaa\x0f-#\xd5\xea,O\xd4G\xddB\xf7\xf5\xce\x1e\n\xd1\xf9\xe1\x9b7pQh\xa6I7\xa5\xe8\x9c^Vp\xfa\xdf\xfe[\xe05\xf9}]\xc3M]\xc3\xb7p||\xec\xcf\x8c\x11\x95)\xaaG\xff\x01E\xf5x,\xaa\xf1}S\xaf_\xdd\xd4\xf5\xd7\xfeC\x8f\x8f\xfd\xef\xbf\xf2\x06^\x89\xa2>\xc9\x86\\\xd5\xaf\xfe\x8b(\xeb\xeb`\xa2O\xa8\xbc\xff\x0c\xfb\xeeO\x11\xdf\xfd[qWds\x1e|+\xe7\x86\xe2*\x19\xe9\xd6\xa9^\x15\x85\x9c+\xa7\xbe;\xbb<\xfdx~q\xf5\xe1\xe3\xd7\xa1e\xfa\xbe\xa3\x86/\xac.\x1dv\xe7?G\xdc\xf9\x97\xda\xefI\xe9\xca7\xdf\xc2\x7f\xd9\\\x1f\x7f_\xd7\xbf\x1e\x1f\x1f\xff\xa7\xff\xe0\xa2z<\x12\xd3Pq\xc6FM\xa2~,\x9a\xf6\xb6X '\x87\x1b\x12r\xe1\xb8\x16\x81*\x947\xa3\n|\xaa\xd6}\x15d\x05\xe5\x03\"\x8f\xfa\xbf\xbe\x85\xaa\\\x85S\xfd\x82\xf5\xf2\xf4\xe4+\xb9\xa8<\xff\xdc\x8d\xc5\xe6C\x03\xae\x1f\xfbi\x97y{\xa8\xb5Q\xf7\xac\xd7del[\xcf\x9c\xe5\xa5cJu\"\xbe\xdf\x8f\xe5\x0fb\xba\xfa\x12\n\xebm'\xde\x84\xa2'\xf8\xde\x0d\xaa\x87\xb8/\xd6\xbdZ\xaa\xd5\xa3\xf9\xae\xdcY,\xe8\xa6\xc9P\xdcp\xe6Z)T&\xd71^\x9e\xbct_J\xbf\x13M\x95\xe5\xd7.0\xdd\xa3\xbf\xba\xa9\xeb\xe3\xeb\xa2\x91\x8d}8y<\xfe?_)/\xcao/gy\xfeOQY\xd5\xafD\x19\xe2u\xe8<\xe4\xdf.?\xbcw\xff\xf2\xed\xb7\xdf~\xeb\xef\x03\xe2\xbc~\xcdE\xf3\x91r\xbb\n5 R\xdfu\xdb\x96\x19`l\xb9]\x15\x9ed\xf5\xddbT\xf0\xa4\x9f\xb6\x1c\xf5)\xb6\xfa\xe9>R\xd3qWq\x85g\xf5\xc6\x9aR\xa8\xe0\xdb/\xff\x9fp\xdd/z1\xa1\x9b\xb6\xd97\xc7\xfd\x80\xe8\xe1\xe7M\xe0\x03\xa4\x98\x7f\x16cP\xffA|S\xae\x98\xff\xbda\xc6\xac\x0b\xd6\xb4u\x15|l\xf5J\x9c$\xdbg\xf2\x0eG\xb2s\xf5 \xa2S\x9a\xe3\xdd\xb9\xb9\xd2|o0\x80`\xad\xbe\x92\xbe\xfc\xea\x0d|\xe5zj\x87n8V\xad\xfc\xea(T\x9el\xdf\xfbb-\xca\xfc\x7fU\x13\xfeG\xf0\x04\xd1\xbe\xd1\xf1\xa9\x8d<\xbf\xd1\x1f\\\xc3\xbe\xa6zC\xd9\xc2=[\xad^\x7f\xae\xea{\x15\xf8\xbd-Z(t,6\xf1\xe1\x1av\xf9\xa3\xd1\xfe\x0b\xea9\xe8\x03K\xba:\xa2\x03{>\xae\n\xd5\xa5\xdd\x17\xfbE>\x8c\xa6\x9f\xdf\xd6\xab\x85\xea\xe4:\x8a,\x1f\xe5Q`\xd57\xb2\xe9G\xc6}\x1dY\x85\xe3\xee\xe5\xfcJ\x8ck\xc6\x85;KCf\xc5\xf4\xdf\xff\xf7\xbf\x7f\x1dx\x90r\xf4\xb9\xe1\x05\xc3\xddN\xbaJ\x14\xf9\xcd\xf1\x9f\xbe\xf9S\xfbU\xa0\x0b\xa9\xff\x0f\xc1\x84C4\xc9*j\xf019\xf3eE\xfcR\xfd\xb6MrbL\xf1\xb6\xb7 \x8e\x1c\xb6`\xe0\xc7mU>(%\x85\x10\x8c\xd4\xdb\xc0\x89}\xc11'J\x00\xa8X\xcd\"\xa9\x18\xbd%91\xdd%\xa3\xfa\x0c\\\xa2\x7f30>\xa249+\x1exFj\x86\xf8\xd3x\x8c)\xb0_\x0cq_\xdc#}U`\xb8Mm\xe4\xc5\xaa\xcc\x1a^_[\xda\x04*oA>\xc82t\x82(\xc9vc\xd8}im\xb4\xe7\xa0g\x15o\x1e\xad\xc4\x97\xc1\xadC\x8c\xc0\xa0H\x85\x86\xad\xd8]QqX3^,\n^\x84\xea;\xa8\xad~\xaft;g\x0f*\xa0\x7f\xf4\x15\x86m\xf6\xc7\xe1\x93j\xad\xfa\xaf\xcaVm\xba-\xb7\xdf.\xe72d\xe1+\xa6\x9b4\xbd\xb4\xa7\xfe\xd5R&\x92\x05r\xc1n\x9az=\xb8\x82\x99\x87\xf4\xddC\xae\x14\xa0\xaa\xd0\xbf\xbb#\xa9^\x91\x17v\xfce\xfdt\xdb\x82\x0f\xbe3D\xbd=i%\xc6P\x97\x06\xf4\xe5\x81\xe6\x07#\xa3\xf9\x01\xcd\x0f\x8c\xd1\xfc`l4?8\xec\xfc\x00\xd5\xf3Q\xf7\x18\xdf\xee\x9d6\xfb\xf3\\\xfd4\xbc\xcbuV*,\x94\x81T\x15\xb0(\xd2\x94\xe4\xd7@\x81vZ\xacN\x81\x0d]?\x90\x1d\x8b\xf3\xa4\xdd\xf8\x80\xfb\x86\xd31\xe5\x1fgy\xdag\xad\x99\xca\xb8+\xdf\xe5&\xed\xed5\xb4\xbf\xbc\x9e\xa2\xe4]i\xe1$Mc\x94\xbc\x0b\x7f\xe4\xe4\xdd\x9d\xe6\xc8@\xce >2-kw\x18\xab\xf1J\x90\xf57\x92\xb2ww\x1cD\xd9\xbb\x98\x17\x1eP\xf6.e\xefz\x8f\xa4\xec]i\x94\xbd\xbbk\x94\xbdK\xd9\xbb>\xa3\xec]\xca\xde\x95F\xd9\xbb\x94\xbdK\xd9\xbb\x94\xbd\xab\x8c\xb2w){\x97\xb2w){\xd7g\x94\xbdK\xd9\xbb\x94\xbd\xeb~@({w\xc7\xb0\x99\x94\x94\xbd+\x8d\xb2w){\xf7yf\xef\xb6\xcd|6\xdc\x1a\xc0W\xef\xdd#\x07u\xefY\x14\xab\xee\x1d\xee\xc1$\xc58nAj&\x97\xa7\x0d\x8b\x96#\xdb\xb0{dR\x1b\x86\x02\xe8\x19[@9\xd4\x18oQ\x0e\xb5\xb2\x03;7\x9e\xfdK9\xd49\xbcH9\xd4\x94CM9\xd4'\xdb\xea\xba\x96\xcd\x99Y\xdcM\xe26c\x9fL\x19\xbe\xfd\xc6\xba\x8b\xec\xec<\xd6\x15&\x93\xaf{W\xee\xcc\xc5L\x87roA\xe6\xaa\x81>\xe1\xd9\xe6g\xf7\x9e\x7ff\xc9\xd9\xc3.\x12H\x99ED\xa10\x81\x1cp]3\x9a%\x1d\x8c\x19w\xc5yck\xb8\xdd\xc02\xb60}\x07\xb0`\x0b\x7f?\xf9CI\xc9;\x88\x1b\xa2\x0c\x9f\xb4\x83\xbd\x81\xca\xc6\xc9:\xa5;M\xa7\x7f\xba#\xe5\xe1\xf2s\x92rs\x92}\x84\xcb\xc9I\xf4\xd3(\x17\xa7t\xa4\xe1\xa0\x9d\x84\xcb\xbfI\xca\xbdA;)\xad\xd9\xa1|\x1b\xbdO\x9d>$\xc0=)\x13\xaf\x99\xc5v\xa5\xb0\x1a\xbd\x9f\x1e\x88\x0f\"\x943\xbe\xa4\x13\x02\x8d\x1f4%\xc3]\xc7W\xcc1E\x18\xa5\xc7T\xd6<%\x9a\x1c\x93\x96\x183\xa8\xe68i\xd65;\n%\xcfb\xda\xech-\xb4\xbcn\xf4\x84L&\xcd\x8a\x8f\xe1\x15\xb3\x13c\x9dE\xf5\xd5\x0bd\xca\xca\x8d\xd6M\x89\xd66\xf7\x95p\xabx\xde_\xcb\xd92[\xc8\xa4]\xca\xbcp\x1e@\x99\x17\xfdOXgR\xe6\x85\xfc\xfc\x1b?\xef\xf8\xfd\xd3F\xa59\x08_\x95\x98\x11\xbc\x02\xed\xabf\x8c23\xf2|.Qf\x06ef\xb8\x8d23\xa4Qf\xc6\xaeQf\x06ef\xf8\x8c23(3C\x1aefPf\x06efPf\x862\xca\xcc\xa0\xcc\x0c\xca\xcc\xa0\xcc\x0c\x9fQf\x06efPf\x06efX\x96\x83\x92\xa7\xcc\x0ci\x94\x99A\x99\x19\xcf33\x83r\x02\xd2\x80k\xca 8\xa0s\xe34;\xe5\x04\xe4\xf0\"\xe5\x04PN\x00\xe5\x04\x9ct\xfcV(\x11\xe0?\x1c\x89\x00?u'\x0e\xf0\xff\xbe<(\xab\x9bZ\xf6P\xb5\xd9Zw\xe5\xae\xac\x10\xee\x7f\xa9\xda\xe0\xb8\x9c>\xfa\xd9\xb2\xfe\xbd\x07\x9e\x07\xc8av\x8ezB\xfe}|\xc9\xc1\x04o\x08\xbd\xf7\xee\xf2 \x89vy\xff]\x02\xf4`\xf0\xf9\xb2\x92\x13y\xf7\x07\xeb\\\xdc\xde\xaa\xdd\xb6\xb3\xcd\xf6\xda\x0b\xf2E\xbd\x0b\x08\x0f\x03\x02\x97\x01\x9c\x87!\xc1\xcb0\x01\x9d \x16\xe6\x8e\x9f\x04\x96\x13s#4\x10\xc7h`\x02J\x13n@\xc1o\xd18\x0d\xe4Bj`\"V\x13,Pj\xabc\xd1\x1a\xd8\x1f\xaf\x81d\xc4&X\x94\x0e\xfd'a6\x90\x1b\xb5\x81D\xdc\x06R\x91\x9bp\xcf\xeep\x1c,v\x03\xb9\xd1\x1b\xc0\xe17\x90\x13\xc1\x81\xbd1\x1c\x98\x86\xe2@.\x1c\x07&!9\xe1\xc7\xa1\x10\x9f\xbcQ,\x07\x0e\x83\xe6\xc0\x01\xf1\x1c8\x0c\xa2\x03\x89\x98\x0eLCubC0\x0e\xd7\x81\xbc\xc8\x0e$`;\x90\x8e\xee\xc0\x04|\x071d~\x8d@x \x07\xc6\x031\x94\x07\xf0\xd33\x04\xd2\x03\x89\xb3\xb8d\xb4'X\x9a\xc4~\x10x\x0f$\xd42#\xe6\x03I\xa8\x0f\xe4\xc6}`\"\xf2\x13\xeeWm\x1c\xfb\x81\xe9\xe8\x8f\xb7\x9c PH\x13L\xc0\x9a \x0dm\x82)x\x13$#N\x10y\xdbF\xb0\x13H@O\xb0\xb8\x13LA\x9e \x15{\x82p\xc3\xa7\xe0O\xde\xc2,\xb8\x08\xfb\xc8\xe00\xa8\xe0\x03Q-\xc3(\x14\xe4\xc5\xa1 \x86DA\x18\x8b\xf2\x9e3\x15\x97\x82\x8c}7\x01\x9b\x82$t\n,|jh\x7f/\xca\x15[\x84\xa3S\xe3h\xf8\xd0\xb0\xdf\xf0\xeaJ`\xf4\x07\xeeo\x99^\xc9\xb1U\x05\xb1\x16\xc4\xaa\xed\xda?C\x7f\x0d\xdf}x\xffnvy\xf5\xf6\xea\xd3\xe5\xec\xd3\xfb\xcb\x8b\xb3\xd3\xf3\xef\xcf\xcf\xde\xa1\xcf\x10\xffJ<\xfc\xfc\xfd_\x90\xc7\x07\x0b7b\x0eIMP\xa2?O\x10\\\xd6\xeaB\xaa\x1b\x83\x85\x0c\xcauv\xf9\xdb\xab\xb2\x9a\xaf\xfc/\xfe\x96\xadn^\xf7\xfa;\x9eN\xd0\x93\x12j_\xe2'h\xda\xf8\x92}\xdc\\\x12;\xfa\x8fe\xdbnUL\xc1\xff*\xb2\xa2\xea}\xa9\x9e\xc5Q\xbbv{7\xa0;n\x04u\xf6\x7f\xe7\xacY\xb7\xe0\xde\x17\xb6\xb7\x88\xe6]\xb6\xb8\xfd\xba\xae\xca\xcf\xcc\xa1\x15\xd2\x1b\xe2\x06C\x82\x8f\xa0\xbf\xaa\xb5]\xfb\xedv]T\xaf\x1bV,$\xd8%gt1\x1f\x01\xc6O\xa0 \x00\xee% \xe00m4\x97\xb5E\xb7L|\xb3\xff\xb1-\x97U\xc1\xb7\x0d\x83W\xec!\xfc\x91\xfc\xe9\xa2n$\xa5\xf9?\xd9\xe3u\xd12\xef\xe0\x0dp\xcf\xae\xdb\x92\xe7X\xed\x1f\xb4X\x17\xebl\x91\xf9mUV\x9fCC\xcf|\xdb\x94\xfcq&\xbfU\xe6A\x05\xc4)5\x8c\xdc\x93\xf1\xe5\x9d-a\xeb\xa2\\E\x83\xe4\xa6(\xd0E\xf9\xdb\xec\x95\xb5\xe9mJSu\xb1\xe6E\xa0\xc2R]#\xf4\xaf\xeeZ\xf5r\xaca\x1dJD\xb50\xda\x93\xd8;4\xae\x96\xb9;GP\xde\xf4?\x1e\xc9\x11U\x1f\x11\x80i\x8c>e\xd9\xeeL\xef\x96[K\xff.\xe6\xa2\x90\x08e\x82\x83b\xc2\x93\xe9N\x92\xd2\x92\x01\x17\xad\xcb\xaa\x93\x9f\xf4\x167\x9cH\xf2\xda(\x11\xb2\x98\x83\xe6\xf5z]\xb6-\xf6\xa5\xd9\x1f>x1Z\x7f\xee\xb3*\x0e\xfc\xca\xeb\xaf9k\n\x1e\x16l\xc5\xde\x15p\x94;h\xa8V\xc2\xb4\x0e\n\x96\xa5\nPHA\x17\x06Wz\xac\xf2{\x17\xf1\xdaC\xf9\x0b\x90>\x03]\xa7\xd8\x92<\xe2\x810\x96\xe2Z\xd0\x977\x9f>V\xb7\x91\x7f\x9e\xdf\x16\xcdR\xce \xa3\xc5\xf4\xb3\xc1#\x90\xc9\\7\x12\xdf\n+\x8c\x02\xac\x8b\x87\xd9\x17v\x80\xa9\xc2\xa0_\xad\x8b\x87r\xbd]\x8f=\x12-L\x8d\x8e\xfd\x93?/*`w\xac\xd1\xaeL\xf6\x8d\xe2M\x9e\x83\x8b\xac\x9a8=\xb5(\xca\xa8\x1e\xad\xccNhX\xd1\xb2\x1dL\xd7\xf2\xb4rR\xb4\xa8\xb8\x13\xb7\x1b\xf1v\x88\xca\x1d#\x1d\x87}\xe3@\xa2\x83\xadZ\x9a\xe7P\x86\x18\xe4\x1f\\O\xe5}\x04\xb3Swj\xe1\xf6\xcb\xba\xacf\xe2C\xd5\xd2\xea\xdf\xe3-\x8cm\xa7\xe3\xaa;\xcb-/[\xf9\x05\x0d\x0b6_\x15\xe3\xa4\x90Qa\xb2\xc7\xe9\xa3M\x81A\x8d W\xfa\xc4\xbf:\x0e\xc74\xa8\xcb\x19\xb0\xbe\xb3\xbaV\x1c\x01\xaf\x97j\x05L\xc6\x1d\xb8I\xb7q\x16U\xac\xad\xb4\x1cw\xf5\x7f\xb2\xfc#f\x0e\xe6s]\xa7\xe7\x97\x0d\xb0\x07u\xc7U\xef\x90s\x8d\xb2\xf2\xbc\xed/WE{+\xdeu&=\xc5G\x13\x17\xe2>\xa8GU\x87\xb3\x06\x979R\x0c\xa2D\xe2\xea\xa6\xf1\xbd \xe7\xc5j\xbe]uQ\x9c\x9b\xad\xf8$s_p[\xd9\x1b;\x08\xdf\xd5[\x0e%\x97\xc9\x1b\xd5\x12\xea;\xf9a\xdb\xad9\xc0\xcf\xb7\xacRMu7\xa0\x19\xae\xe0\xb8\xaf:\x9c\xc7\x1e\x8d\xc6\xa4\xb2\x15\x93\x83E\xc9\x0d'VX\xfd\xcdY\xde\xfdm\xdd\xb2>\xb3\xca}Q\xfb6\x96\xed\x80\xc8\xb4z\x84lZ\xdf\x04gI\x8b\xb2\x0b\xd9\xaauw\x89\x15\xba\xaf:\xb8\x7f\xc7\xf0S-\xdd\xba\xa9\xefYc\xb2!\xcd\xedb\x0b\x19\x86\xf5v[\xb3@+\x9b\xe0\xbe\xdaz\xbb\xe2\xe5fU\xaa\xca\x0d\xaf\xbds\xc2\xe0\xa9\xb3R}\x9c[{\xb5/U\n\x90\x14\xa0\xf6\xee\xd2@z\xd0\xd2\x06M%=h\x943\xffpz\xd0;\xfdB\xa6\xfe9r\xe4\x82*\xd0\x8e5E%\xfb\xec\xca\xed#\xb1gm$\xf6\x9cg\x86\x99\x9a\xb1\xa6\xba-\x89=#\xb2\xd3x\x8e\xcc\xb4)Yi$\xf6\x9c1\x03-%\xfb,)\xf3\x8c\xc4\x9e\xf7\xcd2\x9b\x90a\x96%\xbb,=\xb3\x8c\xc4\x9e\xf7\xc9$K\xc9\"\x9b\x90AFb\xcf$\xf6\x1c\x99%%g\x84\x91\xd83*\xfbkJ\xe6\x17\x89=\xfb\x0e\x8bfx%dwa\xa4\x8cS\xb2\xbaH\xec\x99\xc4\x9e1\x19Z$\xf6,m\x9f,,\x12{v\x95\x14\xcd\xb4\x9a\x9ae\xe5}7\x90\xd8\xf3\xae\x91\xd8\xf3\x84\xec\xa8xfTjVTBFTr6TZ&\x14\x89=\xa7e;\x91\xd8sg$\xf6\xac\x8d\xc4\x9eI\xec\x99\xc4\x9e\xfb\xbfMvn\\\xa6\x98\xc4\x9esx\x91\xc4\x9eI\xec\x99\xc4\x9e-\xb1\xe7\x93_\xbb\xffV\xbfMU\x7f\xee\xc4\x9f-\x18\xcf\xa3\xfb\xdc\x1f\xd2\x95\xb7)\xca\xee-?\x90\x7f\xde\xbd\x90>\xea\xf9\xcb>\xfb\x88\x8eI\xd8\x19N\xbc9\x1a\x9b\xc0,\xee\xe7\x96mN\x17m\xc6I6\x07\xbd Q\x8f\x02\x02wAx\x14\xd0^\x85\xa9\xd0K\xa0\xbc$\x91\xe6\xac\xe0K\x14}\xc9\x0d\xbf\xe0\xf1\x97L\x00\xcc4\x04&P\\\xa2,\xf3\x9e\x18Ln\x10&\x11\x85\xc9\x0c\xc3\xa4\xe10\x89@L\xa8\x0fw\xa8\x0c\x16\x89\xc9\x0c\xc5\xa0\xb0\x98\x8c`\xcc\xbeh\xcc$8&\x13\x1e3\x05\x90 \x14\x86\x16^>\x00$s8L\xe6 \xa0L\x1a*\x93\x1d\x96\xc1\xe22Y\x81\x19<2\x93\x0c\xcd\xa4c3\xd1\xa1\x10'\xb1\xbc7:\x13\x95WFM\xa8\x10\x00M\xca\xac+\x19\xa2 \xbd\x04\xd1\xa2\xca\xb8\xfaeDiR`\x9a\xcc8\xcd4\xa0&\xd4\x83PB\xca\x13\xa1\x1aOi\x1c%\xa2\x9c\x07\xacA\xd3!\x08\xb8& \xaf\x89i\x90NAlbezCm\x99@\x9btg\xe2a\x9bX\xdb&\x007\x13\x91\x9bP\xc82\x1bv\x83\x06op\xe8\x0d\x16\xbeAx9\x1d\xc0IAp\xc2\xb2\xc8Y0\x9cD\x10g?\x14'\xe6\xd0\x04\x1c\xe7\x00@N\xb4v\xde\x9e\x9e\x0f\xcbA\x809\xd3\xd1\x1cOq<*\x7f\x9c\x15\xcf\x89\x01:\x13\x11\x1dOYq\xd9c\x04\xa6\x13\x96<\x0e \x1e\xe7\x86u\xb2\xe3:~`''\xb2\x83\x81v\xd2\xb1\x9d$pg\x02\xba\x93\n\xefDD\x8c\xc3\xb5\xc3\xe2\x14X\x84g\x02\xc4\x93\x88\xf1\x04\x9a;\x05\xe5\xf1\x14\x85\x90-\x9e\x82\xf3\x04\xba|\\\xb28#\xd2\x13\x95+>\x04\xd6\x93\xab/&\xa0=)p\x8f[\x8c8$E\xcc\x9d\x91Z\xdbp\xdf\xbdSD\x88\xa5\xd8\xb0\xa7<\xac\x04qH\x80\x18W\xf3I\xe2\xc3\xc9\xd2\xc3\xd1u\x92\x90\xecp\xaa\xe8p\x92\xe4p\x9a\xe00Znx\x82\xd8pHj8\xea?\xdc\xcd\xdeWd\x18#1\x8c\x13\x18\xce\xd4\xa0\\\xd2\xc2xaa\xbb^{U\xbc;j/I\xe1\x88b \xdf?\xaa\x1c\x95\x12\x8e\xdeJ@{\x052\x8a\x08G\xb5\x14\xe3\x02\xc2\x99[\x96Y:\x18-\x1c\x1c\x95\x0dNo\xe7\xbe\x92\xc1x\xc1\xe0\xf4\xba\x05\xefA6\xa9`\xacPpT&8\xbd\x81\x93%\x82q\x02\xc1\xd1\n\xc5\xc5\x81q\xf7#\xa70\xf0>\xb2\xc0\x18Q`\xb4S\xc2\xf2\x8c\xa9\x8eI\x11\x03\xc6\xbc%\x00-\x05\x1c\x13\x02\x1e\xb4d\x7f\x19\xe0\x0c/*\xbc\x000\xee.@\xba\xf8\xaf\x12\xf8\x0d\x94\xb7\x97\xf4o\xd4G\x80\xf2\x13\xa0D\x7f\xa3\x1d\xde\x18\xde\x99\x80\x96\xfb\xb5\xe5|#\x05\xa2\x05mqR\xbf\x07jv\x8a\xc8\xaf\x1a\xcb\"\x05\xe6\x90\xf8M\x12\xf8=\xa0cP\xd2\xbe\x9dto\xa4\xc0\xa8\xb0o\xd45(\xd9^\x94;p\xef\x04HrZf\xb9\xde\x80X/Z\xaa7\xea\x0b\\\xeb2\x8a\xf4&K\xf4\"\x05z\xe3\x0d\x99&\xce\xabeW\x1d\xe5\xf9\xa5ys\n\xf3\"ey\x93Eym\x01^w\xe3\xfc\x92\xbcy\x05y1r\xbcy\xc5x\x11R\xbc\x93\x84x\x8d\xe8\xae\xab\xbc\xa8\x0c\xef4\x11^\xbd\x1c\xe9(\xcf/\xc1\x8b\x16\xe0\x1d\xb4\x02\xe7\xef\x94N\xb3\xaf\xf0\xbc2\x8c\xfc\xbc2\x9c\x08\xbd\xb2\x0347\x97,\xbd2\xbc8\xbd2\xbb\xa6\xd9\x1a\xd4\x1d\xbb\x97\\\xbd2\x84\xd6mv~$*c\xaf\x0c\xd9\x19 \xd1\x7f\x90Q\xd8^\x19\xca\x87\x18\x91{e\x07lw\xa2\xec}\xb4\xbcW\xec\xe1\x18/~\xaf,*\x81\xafl\xaa\x17\xf6\x95\xc3W\x86\x17\xc5W6\xb5\xb6\x88{\x96M&\x7fX\\L,_YT2_\xd9\xd4\xe6O\x96\xcfW\x86\x13\xd1W\x86\xac\"\x96aO\xb9\x8b\xe9\xe2\xfa\xc1\xe2\n\xbe\x97\xc4\xbe2\x8c\xd0\xbe\xb2D\xc7\xc5\x92A`\xb2\xf3\xb0\x02\xfc\xc1\xe2\xf4\x98>E\x86_YL\x8c_\xd9\xa0\x85\xfbK\xf2+\xcb\xfc\x1a\xc6\x8b\xf4+K\xb9k\x90.\xd8\x1f-O\x15\xb2\x97l\xbf2\xa4\x1f!\xc1\x97\x80\x12\xf2W\x86|\xa0\x8c\xa5\xba\x1d\xd0\xd2\xfe\xa8\xa2,\xf9\x7f\x9cf{o8\x99\x7feO\xe0\x94\x14\xe1\x7fT\x81j\x14\x8e\xc8\xff\xa3JJ\xf3)z\xa3\x00eO\xe4Z\xd4\xd6\x01\xa8\xd2\xcc\xf6\x02\xf1\x0d\x04P\xc5\xe1\x9c\x8b\xdaj@Y\x82CS\xde\x8a0\xc1\xf9\xa9[\x10D\x0b\xbc/\xda\xd0F\x04\xca\xd0\xdb\x11(C\xfa+\xa5\xed\x197(\xe8\nL\xdb\xa6@\x19r\xb3\x02e\xd8\x06N\xdb\xb8\xc0[\\/_\x1f\xa4\xb3\xd371\xf0\x16\xa567\xc0ne\xa0,yC\x03\xff\xd5\xfb\x8d\x0e\xc2\xdb\x1a(\x9b\xb4\xb9A\xb8\xe9\xa8-\x0e\x94\xa5nt\xe0-\xc8z\x10\x10\xdb\x1d(\x9b\xb4\xe9\x81\xbf\x06e\x87\x0f\xf0\xf0\xd6\x07\xca\xa6m\x80\x10l\x0c[\x04\xb6AP6m3\x84\x9d\xa7U\x8a\xa4\x0cUH\xba\x8d\x10\xca6a/\x84\x912\xca\xc7\x8b\xd3q\xddi[\x84\xe1w9m\x8b\xe00\xec\xbb%5qNu`\xda\x16\x01\x91\x10\xe7\xe2\x88\x92\x13\xe1\xf0 p\xb4-\x82\xb1\xd4\xc4\xb6\xe0:iJB[R\"\x1bm\x8b\xb0o\x82\xda\x84\xc4\xb4, i\xf8D4\xda\x16!G\xa2YJ\x82\x19:\xb1\x8c\xb6E\xa0m\x11\xd0\xb3\xa4\xa4\xc4/\xf5\xb9D\xdb\"\xd0\xb6\x08\xb9\x92\xb1\x90y@\xd1\xe4\xab\x84\xa4+\x8c\xe8\x7fJ\x92\x15m\x8b@\xdb\"`\x92\x9fh[\x04i\xfb$1\xd1\xb6\x08\xae\x92\xa2\xc9HS\x92\x90h[\x04\xdb\x10IE\xb4-\x02m\x8b00\xda\x16!-Q\x87\xb6E\xe8\x8c\xb6E\xd0f\xb6\x18\xd8a\x05\x07\x1f\x91C\xd6\xb0\xa7\x06\xf5\xdf\xbb\xcd\x04\xf8\xae\xd8\xbc=,\xed\xb9\xb9\x00x\x98J\xdf\xa6\x03\xbe=\x07\xa4\x1f\xf4\x19\xae\x0d\x06.:?\x0d6\x17\xd0\xc58\x00\xbb\xc1v\x02\x97\xea0Y\x88\xf9\xd2|\xb6\xbb \xd8\xae\xb0mP\x19u\x90~\x1a\xe5j\xba\x9cYuN\x92o\xc1\xb2\x85u\xbd\xd8\xae\x1c+\x12\xdezA4\x9e\x85AK\xa3\xcb9\x83\xc6\x8c\x18P\x0dz(\x1eT?v\xf2K?Do\xae\x8b\x07K\xf87T\xab\x90\xdcu\x1c\x0f\x1eT|xQSqCDu\x11zKU\xd9WuV\xf1&\x18?\xccZo\xef\xd2\x98U\x15\xab5`\xfe$\xa7\x9a\xa5\\s\xecn\x86\xa7$\x8bW\x90\xf1i\xeb\xdf\xaf6\xac\x81MQ6'\xbc)kg:\x81\xb5\x05\xc93\xf1\xccn\x8d\x8c\x83\xfa\xdbl\x0d\xb3\xe6\x18/E\xb3aM[\xb6N<_8v\xb6`U\xed\xc9\xb1K{\xb8\xfa\xd2\x06\xd8\x9e\xf8\xb3\\-\x9f\xd7e\x05\xf2\xf7\xb2\xd2L\xd4n\x89\xeb\xb2\x9a\x8dx\xdf\x89u\xd3j\xcb\xfe\x1e\xb8{\xa5\x8et\xbd-\xca\xea\xf5}\xb9`\x1d\xce\x15\xc5\x8b\x15\xca$\xa6G\xc5\x88\xe4T\x10'(\xf4\xa9\xe7\x7f\x06\xe5 \x18\x11\xf5N\x89\xb2!\x9a\x06QGK\ndX\x16A \x04\x81D# \xb8\x91\x8a \x10\x82@|G\x12\x04\"\x8d \x90]#\x08\x84 \x10\x9f\x11\x04B\x10\x884\x82@\x08\x02!\x08\x84 \x10e\x04\x81\x10\x04B\x10\x08A >#\x08\x84 \x10\x82@\x08\x02\xb1,G@\x9e \x10i\x04\x81\xfc^ \x90dX\xa2\xaeW\x01T\xa2\xaeW\x03HB\x1c>\xe0>\x06l\x848\\\xff\xfd\xf9\"\x11]\x83m\x1b\x02\x11\xa2\x91v\x80s\xa7\xd5\xbdyk\x00\xd18NU\xf3\x99\xcaD\x9f\x85\xd4=#+\x19\xfb\x940h\xb5\nA\xd6\xf5\n\x1d\x80\x14^\xf9xqJ\x01G\xa0\x80ct\xb5\x0d\xb3`\x05\x14p\xa4\x80\xa3\xf7H\n8J\xa3\x80\xe3\xaeQ\xc0\x91\x02\x8e>\xa3\x80#\x05\x1c\xa5Q\xc0\x91\x02\x8e\x14p\xa4\x80\xa32\n8R\xc0\x91\x02\x8e\x14p\xf4\x19\x05\x1c)\xe0H\x01G\n8Z\x96#\xf8C\x01Gi\x14p\xfc\xa3\x06\x1c\xc7\x89\xb5\xae\xb0\xe3O}\x1e\xac >\x16\xab\x95\x95\xfajV\x16\xf9\\\xa9\x9a/\xcb;V\xe9\xbd\x0c\x9d\x91\xc9\xbeD\xfd\xeb\xb3\x8dO\x86\x12\x8f\xf9\x17\x08\xfd(7\xd6\xcd\xacX,\x1a\xd6z\x8eB\xad\x7f`\x96\x10\xc0q\xc9A,\xd6\xfcm\xbc\xe1\xc3K\xff\x12\x96)\xef\xbf\xc35\x9b\xdf\x02\xab\xe6\xf5B\xaeR\xcaG\xdf\xfd\x8a\x9b\x8b\xdb[\xb5\xdbv\xb6\xd9^\x7ff\xde\x9d\xd8\"\xde\x05\x84\x87\x01\x11`\x03\x9c\x87!\xc1\xcb0!\xd8\x16,\xcc\xbd\xe2\x12\xf8\x00\xc9\x1dt\x83x\xe0\x0d&\x04\xdf\xc2\x0d(\xf8-:\x00\x07\xb9\x82p01\x10\x17,P8\x17\x1d\x8c\x83\xfd\x03r\x90\x1c\x94\x0b\x16\xa5\x83\x05I\x819\xc8\x1d\x9c\x83\xc4\x00\x1d\xa4\x06\xe9\xc2=\xbb\x0b\xe0a\x03u\x90;X\x07\xb8\x80\x1d\xe4\x0c\xda\xc1\xde\x81;\x98\x16\xbc\x83\\\x01<\x98\x14\xc4\x0b?\x0e\xd6\x0e\x1d\x91&\x1c \x98\x07\x07\x0c\xe8\xc1a\x82z\x90\x18\xd8\x83i\xc1\xbd\xd8\x10\x8c\x0b\xf0A\xde \x1f$\x04\xfa =\xd8\x07\x13\x02~\x88!\xf3kD\xd0\x0fr\x04\xfe \x16\xfc\x03\xfc\xf4\x0c\x11\x04\x84\xc4Y\\r00X\x9a\x0c\x14\"\x02\x82\x90P\xcb\x8c\x81AH\n\x0eB\xee\x00!L\x0c\x12\x86\xfbU\x1b\x0f\x14\xc2\xf4`\xa1\xb7z[\x17\x0f\x81\x9d>z;\xa0\x03L\x15\x06\xfd\xca\xec\xaf3\xf2H\xb405:\x0ew\x01aw\xac\xd1\xaeL\xf6\x8d\xe2M\x9e\x83\x8b\xac\x9a8=\xb5(\xca\x80>\x84\xb1\xb2\x12O[\xcbv0]\xcb\xd3\xcaI\xd1\xa2\xe2N\xdcn\xc4\xdb!\xf8\xa6\x01\xbc\xe3\xb0o\x1cHt\xb0UK\xf3\x1c\xca\x10\x83\xfc\x83\xeb\xa9\xbc\x8f`v\xeaN-\xdc~Y\x97\xd5L|\xa8\xce\xfa\x0f\xd5=\xde\xc2\xd8v:\xae\xba\xb3\xdc\xf2\xb2\x95_\xd0\xb0`\xf3U\xd1\x04\xd6\x88\xcc\xc6<\xfahS`PU\xa0\xac\xe6L\xbc-\xdbu\xdd\xben\x17\x9f\xe1\x9f\x8e\xff\xf9_\x1d\x87c\x1a\xd4\xe5\x0cX\xdfY]+\x8e\x80\xd7K\xb5\x02&\xe3\x0e2f >\xb3\x9dE\x15\xebz\xdbQ\xc5\xee\xea\xffd\xf9G\xcc\x1c\xcc\xe7\xbaN\xe8+\x1b`\x0f\xea\x8e\xeb\x8d\x88j\xb9\xdd\x92\xe7m\x7f\xb9*\xda[\xf1\xae3z\x1f>\x9a\xb8\x10\xf7A=\xaa:\x9c5\xb8\xcc\x91b\x10%\x12W7\x8d\xefM8/V\xf3\xed\xaa\x8b\xe2\xdcl\xc5'\x99\xfb\x82\xdb\xaa\xbf\x95\xad\xf4]\xbd\xe5Pr\x99\xacQ-\xa1\xbec\xf6\x1eJ\xc7\xf0\xf3-\xabTS\xdd\x0dh\x86+8\xee\xab\x0e\xe7\xb1G\xa31\xa9l\xc5\xe4`Qr\xc3\x89\x15V\x7fs\x96w\x7f[\xb7\xd6v]\xee\x8b\xda\xb7\xb1l\x07D\xa6\xd5#d\xd3\xfa&8KZ\x94]\xc8V\xad\xbbK\xac\xd0}\xd5\xc1\xfd;\x86\x9fj\xe9\xd6M}\xcf\xd4k\xea\x9au\xb7\x8b-d\x18\xd6\xdbm\xcd\x02\xadl\x82\xfbj\xeb\xed\x8a\x97\x9bU\xa9*7\xbc\xf6\xce \x83\xa7\xce\xca\xe6\xe9\xc10\xbd\xfb\xa0\xca\xfaY\x80\x7f\xb3\xbbM\xb1\xd4{\x8c\xed\x0ek\x83\xcb\xf4\x07\x0e%\xfd\xfa?\xeb~\xef\xca\xe9Q\x16\x9c\x08F4\xfe\xd8\x03\x9fy\xd3G\xa2#o\x14\x16\x1c4\xf5?|\x03\xb3\xa9\x85\x19\x8b\xc5\x7fj\xde\xb6h[\xb5\x18xQ,\xd9G\xf6\x8f-k\xf9\xb1\xfa\xddSX\xbf\x15\xa8(V8\x92\xc1\xban90I\xadJ\xdc\xf5\x18\xce\xb9\x15\x86\xda\xf0G(}\x18\x9a\x18C\x99|\x8c\xab\x1a\xd6u\xc3\xcc\x98\xe5\x1a\xd9d_\xdd\xd3\x99[\xff\xc7vlG9\xb5\x90Z\x9a\x15\xd5~\xbb>3\xccZ\x1a>\xbe\xf6\xda\x8e\x9e\x8bA`\xa6\x1e@\xcf\xe1\xf7\x85x_\xf2#(yk`\xf3V\x8e\xa2*\x0e#\x17.\xee\xcbv\xd8?|\x0d\x91\xd9y}2\x1cV\xeaq'}\xceX/\xff\xd8\xfd@\xea\x8f\xa3_I\xfd\x117\xdf\x82 i\xaa\xb3\x92\xfa#\"\xf9\x8c\xe7H<\x9b\x92tF\xea\x8f\x19\x13\xccR\x92\xcb\x92\x12\xcbH\xfdq\xdf$\xb2 dY\x92\xc7\xd2\x13\xc7H\xfdq\x9fD\xb1\x94$\xb1 b\xa4\xfeH\xea\x8f\xa4\xfe\x88M\xf0\xca\x9a\xdc5%\xb1\x8b\xd4\x1f}\x87E\x13\xb8\x12\x92\xb70\xda\x86)I[\xa4\xfeH\xea\x8f\x98\x04,R\x7f\x94\xb6O\x92\x15\xa9?\xbaJ\x8a&RMM\xa2\xf2\xbe\x1bH\xfdq\xd7H\xfdqB\xf2S<\xf1)5\xe9)!\xe1)9\xd9)-\xd1\x89\xd4\x1f\xd3\x92\x99H\xfd\xb1\xb3?\xa4\xfacO\x1d\xf6\x93\x9e\xd7r\xe4}\xb3\x9bV3\xf8\x88\xd4\xc98\xac*\xaeWj\xe1E\x05\x16\x85\xdb\xac\xd0\xb0\xd4xT\xd0\x9eK\xe4\x11\xe4\x1b\xe5\x8d:\xd7\xfa[\xc3\xfe\xb1-\x1b\xb6x\x037\xc5j\x10\x1bs~\xa9\x9b*\xf7Q\xe1\xe3\xcf\xec\xd1W\xf5Q\x9cU\x07V\x0b=\xea7\x8co\x9bJ\xe9\x0b\xaaX\x9f\x8emuQX\xb9z\xb5\x1c-\xf3\xc8\x16\x88\x86\xc6\"\xab\x1f\xc4;\xba\xae\xe4\xe7m}s\xd32 \xb5\x0f\xab\x0b\xd6\xea{\xcbxfoy\xd62\x1cNT\xf5\xf3\xf9q\xb4\x8e\xa0\x1b#]Ym\xd7\xac)\xe7\xe6or\x80\xd0\xf0\x82Z\xc8\xb9e\x95q\xfc\xb6\xea\xd6\xceF3\xe6sY\xda\x8a\xb5m\xefB\xb5\xda\xb4m\x85\xab?\xb3D\x7f\x0e\x8b?\xb0sGqj\x87{W\xe5\xba\xc4zW\x1ek\x00\x00_\xf8Z\xad\xab\xda=X\x93\x11\xdb\xd5(\xde\xaaVQ\xec?\x9d\xdf\xc0\x8a\xddp\x13\xee\xd7\xf1\x7f3\xcf\x95K\xc2\xea\x01Q\x17\x11~\xbe~\x04V\xcco\xa1\xd8l\xbe\xa0\x17\xed |\x7f~\xc8\x97\xd6\x19\xc2\xa3\xb2\x87\xd6\xc0\x9b-\x03\xf1\x1fe\xb5(\xe7\x92\xd1\xd2\xc1!\xedAy\xa0\xeeHvqe5_m\x17\xa3Yl\xa1\xae\xd2E\xe7FwL\xc6z\xadEc1l\x0e\x98\x96Aa\x9f\xce\xdb\xd1\xdd\x1a5AN\xfc\x1b\xd6\xea\xa8\xbc|\xbc\xfa\xe7Q#^\x8fx=\xe2\xf5\x88\xd7\xb3,\x07;E\xbc\x9e4\xe2\xf5\x88\xd7{N\xbc\x1e\xed\xab=u\xd3b\xdaW\xfb\x80\xce\x8d\xef\x08M\xfbj\xe7\xf0\"\xed\xabM\xfbj\xd3\xbe\xda6h~\xf2\xeb\x90\xe2\x0dm\xbam\x81eh\xde\xbcg.aS\x94n\xfc\xfc\xddX\xb5\xeb\xb7\x04\x9d\xfb\xc0\x8dI`Y\x0c\x1d\x0f\x16\x0d\xd1\xe2!\x0d\x1aG\x84:p\xf1\x02sd*.\x1e NFa\xf1\x04T\xf4[\xea\xe3\x1c\xd3\x17\x15X\x13Q\x9b\xc5\xcf\"R\x9c\x80wLJcGW\x1f\xbc\x985\xec\xa6\x0f \x049A\x0f\xf1\x8b\xedJE\xd04\x8e\x07\x05G\xb9\xe0@M\x0f\xb4)\xb5\x8eX\x97:^\xaag\x15o\x1e{\x96\xac\xb2^\xe3\x91\x1d\xfb\xe5\"~\xc3V\xec\xae\xa88\xac\x19/\x16\x05/\x10\x88\xa3\x1e$\x15Un?\xc569\xa9\x0f\x9a\x02\x82\xb9&)-\xaf\xe5&\xd3\xab\x95\xfc\xac\x87\xb6\xac\x96+kr\xf7\xd2\xb5\xde\xdfWL\xfc\xbf\x93\x93\x14\x0f[WZ?\xd1\x11\x9f\x1f\x95|\x1c_K\x14\x9e-`U\xb6\xfc\x90d\x97\xeb\xf4\x13\xd7,jt \x11_\xda\x88\xf8\"\xe2\xab7\"\xbe\x88\xf8\xea\x8d\x88/N\xc4\x97\xdb\x88\xf82F\xc4\x17\x11_D|!gID|uF\xc4\x97mD|\x11\xf1\xe50\"\xbe\x9c\xc7\x10\xf1E\xc4\x97\xc7\x88\xf8\"\xe2\x8b\x88/\"\xbe,\xcbA\xdf\x10\xf1%\x8d\x88/\"\xbe\x88\xf8\xda\xaf\xceY\x89/\x17\xd4\x15\xda \xd9Z\x01\xe8v2s\x84\x0b[\x07\xdfe]@\xbe2\xbb\x82v\xd8\x18\xf7\xfe\xc9\xae\xcb\xe8\x13\x9e9\xdc%\xdc\xfb<\xf7Q\x8e\xa1T\xa8\xf5-\xcc\x12\x11\xe4\x06\xc5\"\xa8\x18\x1a\x16\xcb\xda\xc2\xac\xc8XT\x97*\x88\x8d\xc5\xc1\xb1\x08:\x16\xedb\xcab\x1dMY\x02@\x86\xba!\xca\xb0\x10\x19\xfe\x06*\xcb\x0b\x92\xe1P\xb2$\x98l\x82\x8f0@Y\xb2\x9f\xf2Ae8\xac, ,KpRZ\xb3\xb3\xe1e\xfb\x01f(\xc4\xec`N\xc0rh\x19\xee:\xbebYI\xb54V-+\xad\x86ks6b\x0d\xc5\xac\xedG\xad\xd1\xf6\xd3\xda\x06M\xa5\xed\xa7Q\xce\xfc#l?\x8d\xc0:\x83_BA\xd2sT\x9a\x83\x1d\x1amN\xed\xfc\xa4#\xe6S\x1b1\x9fy>\x97\x88\xf9$\xe6\xd3m\xc4|J#\xe6s\xd7\x88\xf9$\xe6\xd3g\xc4|\x12\xf3)\x8d\x98Ob>\x89\xf9$\xe6S\x191\x9f\xc4|\x12\xf3I\xcc\xa7\xcf\x88\xf9$\xe6\x93\x98Ob>-\xcb\xc1\xdf\x11\xf3)\x8d\x98Ob>\x9f'\xf3I\xdbT\xa7\xed\x01L\xdbT\x1f\xd0\xb9\xf1\x0d\x96i\x9b\xea\x1c^\xa4m\xaai\x9b\xea\xdf\xd76\xd5\x86\xfb\xe7\x0f\x1d\xf2\xdf\x96\xeb\xed\xaa\xe0z\x05{S\xb7\xbb$\xff\xa5>\x04\xcc\xb1-\xb0\x076\xdfr\xd1\xc4\x02xSTm!\x17)\xd5G[\xcb\xcbu!\x7f\\\x16\xa2\x8f\xc8!A\x959\xe0\xf5M\xb9/L\x13\x9f)\x9a\xbf,\xdaYY\xdd\xd4\x11\x1a\xcd\x1cf\xc6R\xf1\xdfb\xa8\x91\xfb\xa4^\xd7[\xae\xdd\xd1\x8f\x9f\xda\x9fN\xa4\xd1[O\x88\x92\x19\xa2\"\xf7E\xc5\x99C+\x160A \x04M\x85Y\xf8\x07\xf8K\xd1\xfe,+b|\xb2.\x1e\xca\xf5v\x0d\xdb\xaa\xe4r\xc5\xfa\xben>\xc3\xbd\x8eL\xaa\x80\x18\x7f\xf0\x03j\x1b\xd6\x88\xca\xb9>@E\xab\x85s\x9f\xa8\xcd\x7f)\xdaOm\xdf0\xbd\xafm}#or1\xe7\x8a!\x98\xd7\x95\x0e.\x0f\x8bR#J\xa4C\xe9\x97C\xd9\xda\xaf\n\x13\xbc8L\xd7Y\x14\xbc\xd8\xd3\x818\x9e\xd1\xdbe\xde\x15\xbc\x90S\xbd\xeaQ\xd6\xa6\x1fjo\x1a\xb9\xed\xaf\xfar\x92Q\xe6j\xb1\xf2\x04\x8a\xc0\x8cPu%\xdfO?~\xba\xbc\n\x84\x01W\xacZ\xf2[\xd84\xec\xa6|P\xcf\xa7\x1c\xba\xc5h\xdf2\xf11\xc3\x99\xaa\x8d\xaa\xc4v\xc5\xcb\xcd\xca\x1783u\xec\xaa0~\xc7\xf6\xf6N|\xdc\x8a)\xc1B\x13E\xdd\xc6\xc8-\x17\xb3\xa4M\xbd\x91C\xe4\xe2\x08\xae\xb7\\V\xd0\xdb\xe2u\xdb\xe7\x0eAY\xb5\x9c\x15^\xb0\xe9\x9a\xcd\x0b\x89\x9cp(Vm=\\\xe6\xf9\xb1]\x0e\xc1@\xcf\x92\xcf\xaa^N\xec+\xb8\xae\xf0C\xbd\x1cVlU/\x07\xa3\xea\xd4\x1e\xe18\x80\xdd\xb1\x8a?c]eY\x8c\xf7W\x84\xcb\x85\x15\x9c7\xe5\xf5\x96\x873pb\xcdU\x16\xc9\x08\x02\\\xd3\x95a\x1c\xa0\xcc\x8b[\xdb\x86\xf2\x85\xb1\xe8\xb0\xd5[0\xd2\xdf\xdb\xa1._V\x0b\xf6\x80\xbd\xfcxv\xec2\xdcSh\xecL\xf7\x90\xd33\xe4'^\xca,.\x19\xf4\x0e\x96&!p\x04\xec\x0d \xb5\xcc\x08}C\x12\xf8\x0d\xb9\xe1o\x98\x08\x80\x87\xfbU\x1b\x87\xc0a:\x08\xee-O\\1\x06\x83C6 \x1c\xf0\\3`\xc0pH\x83\xc3!FsN\x84\xc4\x01Qn\x00\x18\xcb\x04\x8c\xc3$\xe7\xe2\xc1q@\xb4r\x02@\x0eS!r\x08{5\x1fL\x0ex\xa0\x1c\x90P9\xa0\xc1r\xc0y=\x1d0\x87$\xc8\x1c\x82\xa09\xe4\x82\xcd!\x158\x87=\xa1s@\xb87\x01>\x87C\x00\xe8\x80\xa9c\xe0I\xc8\x07\xa3\x03\x06H\x87=\xa0to\x81\\\n\xe1\xf8\xc1t\xc8\x0d\xa7C\x14P\x87\xa9\x90\xba\xb74\xf5\x8d\x1a\xfe\\G\xc0\xea\x10dj!\x08\xad\xc3$p\xdd[T\x10h\x87\xa9P\xbb\xb74\x1d>\xf0_.\x1f\xdc\x0e(\xc0\x1d&@\xee\x90\x06\xba\xc3\x14\xd8\x1d\x92\x81w\x88\xbcm#\x102$\x80\xc8X\xf8\x1d\xa6\x00\xf0\x90\n\xc1C\xb8\xe1S`xoa\x16j\x8e}dpP|\xf0\x81\x90\xd0V\x00\x8c\x87\xbcp<\xc4\x00y\x08C\xf2\xdes\xa6\xc2\xf3\x90\xb1\xef&@\xf4\x90\x04\xd2\x83\x05\xd3\x0f\x0d\xf7\x05>\x88\x82\xed\xe2\x1d&\x92\xd6\x1f\"_C\xee\xb2\xc4\x88\xa6\xa0\x98\xb7\xd5c\xeb\xfflt\x82\x8d\xff:88\xacif\x80@[\xa1\x8a[\xf2m\xea)s\xefGz\xc9\x9a\xbbr\xce\x8e\xbb2H\x82J\x19IP\x91\x04Uo$AE\x12T\xbde\x8d\x84\xa6DA\x93\"\xa0$A\xb5o\xb4sB\xa43K\x943=\xc2I\x12T\xfbD4S\xa2\x99\x13\"\x99$AE\x12T$A\x85\x8dDf\x8dBN\x89@\x92\x04\x95\xef\xb0h\xa41!\xca\x88\x11XJ\x89.\x92\x04\x15IPa\"\x85$A%m\x9fh IP\xb9J\x8aF\xfc\xa6F\xfb\xbc\xef\x06\x92\xa0\xda5\x92\xa0\x9a\x10\xa5\x8bG\xe8R\xa3s \x91\xb9\xe4\xa8\\ZD\x8e$\xa8\xd2\xa2n$A\xd5\x19IPi3\x1a!\xd7\xf5\xc2~\xf7\x95\xd5\xce\x9f\xbc2Q\xae\xd8\xcf\xff\xd3\xb0\x9b7\xf0\xf2\xff>\xb1\x16\x0e\xb5\xd4\xc61\x7f8\xd6R\x1b}hJ\xed\x10\xf3R\x971\x16\xeb\xd0\x91,\xb7\\\x07\x7f\xd0\xc7\xba\xb6\xdc\xfc\x0b\xe3W\x0f\xadJ\xc2\xbba|~+\x06\xf9\x87V\xca\xe9\xd8\x19\x96\x03\x15\x0e\xeb$\xfd\xf3\xd3\x08q \x9dfU\xcf\x84\x05_\xbe\xe8kA\x01\xbd\x81Q@\x0f\xb7 \x04\x14\xd0\xa3\x80\x9e\xf7H\n\xe8I\xa3\x80\xde\xaeQ@\x8f\x02z>\xa3\x80\x1e\x05\xf4\xa4Q@\x8f\x02z\x14\xd0\xa3\x80\x9e2\n\xe8Q@\x8f\x02z\x14\xd0\xf3\x19\x05\xf4(\xa0G\x01=\n\xe8Y\x96#\xb8B\x01=i\x14\xd0\xfb#\x04\xf4\x94\xaa\xa5U\xc4\xe0#R\xfdj\xb2\xc9Ve\xab\xd6\xbc-\xddzy\xc4\xce\x17\xe9\x14!\xfeq\xb8\xc4\x11(\xf1|\xc0\xcf\xeb\xd5\x8a\xc9\xea|\xaf?\xdf\xa5\xce\xf4N[i/\x9a\xb4\x8d>h/\x9a\x03:7\xbe\x8b\n\xedE\x93\xc3\x8b\xb4\x17\x0d\xedE\xf3\xdb\xdc\x8b\xa6\xf7\x86\xac\xc1\xec\xda\xff\xca\xfa\xd3h\xb1\xf75|\xf8\xf8\xee\xec\xe3\xec\xbb\xbf\xcd>\xbd\xbf\xbc8;=\xff\xfe\xfc\xec\xdd\x1b\xe7_\xbb\x85e\xb9\x1a\xbc\xad\xd4\xe4\xb1\xad\x1b\xde7\x1e>\x88\xff\xfb\xee\xd1<\xf0r,y{y\xaa\xe3\xdd)\xd6\xedr\x16\xddo&\xde1\x95\xc5\xbb'\x84v\x93R\x16\xed\x04\x10\xd9\xc5IY\xcc\xb9\xca\xbe\xcc\xe6F\xb2\xc8\xc81HG(\xc3\xed\xf7\xa4\x0c\xe7\x18e\x08\xf7(C;I\x19\xdeU\xcaP\xbbA)K\xf0\x9a\xb2\xa8\xfa\xb7m\x89\xa5\xe3\xc6\xab\xa1\xf5;/u\x1f\x1dU\x7f\x83\xe1\xbe)6\x1b\xd6\x88\xaf\xdc&\x04\x94\xf5&\x06\xc0\xcf\xecQ\xae\xaf\xab)]\xd1Dd\xd5\x8d\xa9\x86\xb6f\x9399\xf7,\xee\xd50\x1f\x08t&\xb7\xfcR^G\xe53\x98V\xb3j\xb0\xcbPR\xc3%J+\xc6\xfd\xee\xb9\x88\xb5\xd7\x00\xd8\x9f\xd9\xe3I\xbf\xc3\x95Fq\xc5'\xf8\xc8\x15\x91\xe2\xb0\x8eJqS\xfavL\xc1\xe2\xf4VMfS\xa6\xb6^G:Ep3&Hh\xcc\xdb\xefN\xcf\x7fTA\x8c\x1f\xeae\xdf\xcd\x85\x8f\xb7s\xbem\x98i\xa4\x940\xac\xd4\x86h\x01\"\x93?\xc82\xbb\xc8\xc8\xaa^\xba\xeb\x88\xab!v\xfe \x06\x83\x85\x9a:\xf87\xe0A\xcd\x11\xdc\x9b\xce\x02f\xc0\x19~\x86\xf4\xf1XkO3SC\\]\xb2m*\x8b\x9c\xa4\xbe\x1dl\xa8\xda\xa8\x94)\xc3\x92\xee~\xb9\xd9\x96i'\xd8I\x155\x1b\xbe\x8a\xaf\xe2H5\xb9gr\x15}i\xc6_\x93<\xba\xb9X\xd4\x0b\x80~.`j.M\xa0\xbc\xa4M\xc5\xb2\xe6\xd3D3jr\xe7\xd4\xe0\xb3j2\xe5\xd5L\xcb\xac \x14\x97\xb8\x8d\xd8\x9e\xd95\xb9\xf3k\x123l2\xe7\xd8\xa4e\xd9$\xe6\xd9\x84\xfap\x97\x81\x83\xcd\xb4\xc9\x9ck\x83\xca\xb6\xc9\x98o\xb3o\xc6\xcd\xa4\x9c\x9bLY7S\xf2n\x02\x85\xa17\n;@\xee\xcd\xe1\xb2o\x0e\x92\x7f\x93\x96\x81\x93=\x07\x07\x9b\x85\x935\x0f\x07\x9f\x89\xa3\xa6\x11 \xb98\xe9\xd98\xd1\xa1\x10\xb7%\xd8\xde\x199\xd1\x05\x01\xd4\x84\n\x91\x97\x932\xebJ\xce\xcd \xbd\x04\xd1\x9b\x80\xe1\xea\x971C'%G's\x96\xce\xb4<\x9dP\x0fBm\xfc51W\xc7S\x1aGm\xfa\x95'_\x07\x9dt\x82\xc8\xd9I\xca\xda\x89\xed\x993%s'V\xa6\x97\xe0\xcd\x94\xbf\x93\xeeL|\x0eO\xacm\x13\xf2x&f\xf2\x84H\xe8l\xd9<\xe8|\x1e\\F\x0f6\xa7\x07\xe1\xe5\xf4\xbc\x9e\x94\xcc\x9e\xf06^Y\xb2{\x12\xf3{\xf6\xcb\xf0\x8994!\xcb\xe7\x00y>\xd1\xday{z\xbel\x1fD\xbe\xcf\xf4\x8c\x1fOq<\xba]W\xd6\xac\x9fX\xde\xcf\xc4\xcc\x1fOY\xf1m\xba\x10\xd9?\xe1-\xbaB\x1bt\xe5\xce\x01\xca\x9e\x05\xe4\xcf\x03\xca\x99 \x84\xc9\x05J\xcf\x06J\xca\x07\x9a\x90\x11\x94\x9a\x13\x14\xd9t+\\;l\x96\x0663hBnPbvP\xa0\xb9S2\x84\x89\xed1X\xb4m=/\xe5\xca\x90\xde\x1fu(\xfe96l5\x15L\"\xa3\x0e\xadM>\xc0\x82\xdd\xb1\x95\xe8arI\xbd\xe0\\\xc2\xe0\xdd\xc4\xcf[\xa0\x85\"\x00\x0f|`\x1a\\\xf5;\xb6,\xab\xef\xc4\xe8u\xd4\xfd\xed\xacZ\x8c\xferz\xcb\xe6\x9f;b{\xd7\xc4d\xc1\x1c\xfb\x8e\xad\xca;\xd6\\=\x04\x16\x0e~(8k\x8e\xecX~\x0bk\xc5M\xfcc\xcb\x1a\xf1\xd9\xa2\xf2\xf4\xf8-k\x99\x1e\xe8\xf6Y8\xd5sKUOF\xa5\xc4u\xa4\x1e\x8b\x1a\xd7VR\xd2\xf8\xbe(y\xeb %\xc8w\xfc\x83^E\x9dK,\x8d+\xe5\xc2B\xf3j\xa8\xea\x8a;\xbeS[\xf1\xc7\xac\x95-@3&\xbd\xf4I\x1f\xab\x16\x13V\\e\xdf:k\xfbvRu\x95\xd6\xa3k\xcd\xa7\\Kr\x90\xb3q\xb5\xc2\x9dz\x10\x96\x97\xd2\x1b}T^\xfd\x93'\x05\xe5u!\xe3>lwo\xf5\x17\xbf\xb6\xe3K\xf7n\xc8'\xb2\x7f\x9c\xfc\xaaP\xc5\xff\xd4Z\x8c\x9e\xdd\x91%+\xf4s\xc9o\xaf\x1e\xdan\x87d\xdd\xc5\xd4\xaa\x9eF\x18\x80?t\xab\xaeCI;'\xd8\xf1/\xc7\x7f2\xaav\xe3\xbd\x95\xedK\xeaC\x9eFF\x12\xbf\xbf\xb2]E\xdacY\x1a\xe1\x13\x84O\xf4F\xf8\x04\xe1\x13\xbd\x11>\xc1 \x9fp\x1b\xe1\x13\xc6\x08\x9f |\x82\xf0 \xe4,\x89\xf0\x89\xce\x08\x9f\xb0\x8d\xf0 \xc2'\x1cF\xf8\x84\xf3\x18\xc2'\x08\x9f\xf0\x18\xe1\x13\x84O\x10>A\xf8\x84e9B\xd9\x84OH#|\xe2\x8f\x80O\xecl\xce5\xf8\x88\xd4R!:J\xa8\xff\xa5\x07?\x15_3\xbb\xf4\xd9\xa3PY\xbd\x19\xaf\x86{\x19\x0c\xcf7\xb9[\xae\x9f6K\x9e\xb6\xd1\x1em\x96|@\xe7\xc6\xb7\xf9\xa5\xbd sx\x916K\xa6\xcd\x92\x7f\x9b\x9b%\xa7\xe3/\xbf\xde\x16\xedm\x04{\xb9z\xb0`\x17\xfe \x9eR{\xdb\xcb1\xb2\xf2\xc4\xfb\x9d\xe2A\x95^#\x84\xf0\x14\xc2S\x08O\xd1Fx\n\xe1)\xbd\x11\x9e\xc2 Oq\x1b\xe1)\xc6\x08O!<\x85\xf0\x14\xe4,\x89\xf0\x94\xce\x08O\xb1\x8d\xf0\x14\xc2S\x1cFx\x8a\xf3\x18\xc2S\x08O\xf1\x18\xe1)\x84\xa7\x10\x9eBx\x8ae9P\x01\xc2S\xa4\x11\x9e\xf2\x87\xc0S\x8a\xd6\x1e\xa2\x86Y\xdb\xe2\xc7.T\xfe \x8f\xedx\x94#`\x95J\xfa\x96]\xec\x96=\xe8\xa7\xf8\xf8\xa5U\xde\x9e\xa4\n\"\xb0\xb7\xdd,\x9bb\xc1\xba\xe8\x9e\xdcc\x83-f\x9bUQ\x9d\xfc*\x1a\x19\n\xf3\xbdUG_\xac\x8aJoL!\x1ac\xf6\x1fZ=\x82.\x0e\xf4e@\x14+\xe6\x11%o\xa5\x07\x9d\xd1@\xab\xd4\x17\xa6\xd1O\x11\x13\xe4\xe9\x917\x85\x1c%\x85\xbd|\xf0\x90\xb1\x00\xe0\xa4\x90&\xfd\xb7\x82\xeb\xc7]\xfc\"\xfdz_\xb4\xc6\xe1\xc3\xb7Zxe\xe3\x7f\x89\xfeh\xf9|\xca\x96\x08\xb2\x8c\x13\xbb;|\xbc8\x1d?\xf3\xb4G\x02EQ\xa3K\x88\x98U8\xa0(*EQ\xbdGR\x14U\x1aEQw\x8d\xa2\xa8\x14E\xf5\x19EQ)\x8a*\x8d\xa2\xa8\x14E\xa5(*EQ\x95Q\x14\x95\xa2\xa8\x14E\xa5(\xaa\xcf(\x8aJQT\x8a\xa2R\x14\xd5\xb2\x1c\x11-\x8a\xa2J\xa3(\xea\x1f!\x8a*\xfe\xd7*`\xf0 )\x9fD\x1d\x89\xb2\x17\xa1MdQF\xbeLTU\xbc\"\xc6\x99\xa2\x19\xe3\xa7\xffK\xa7Yz\x83\xa7[~[7%\x7f\xf4GL?*\xd1t\xd5\x84\xb9\xca\xcdU_\xad\xe6\\\xb9\x14WW\x8b\xed\x9c\x9b\xb0\xa9\xf9fD\x88\x82\xff\xabS\x12\xfc\xad)\xfc\x85q\xc23\x8d\xa7\x16\x8bE\xc3\xda\x94\xad*R|\xa2\x8b*\xf9\x8a\xbd\xd1aO\xe3\x98x\xd0S\x878G\x9e\xa4(&E1\x1d\x86Y\x05\x03\x8abR\x14\xd3{$E1\xa5Q\x14s\xd7(\x8aIQL\x9fQ\x14\x93\xa2\x98\xd2(\x8aIQL\x8abR\x14S\x19E1)\x8aIQL\x8ab\xfa\x8c\xa2\x98\x14\xc5\xa4(&E1-\xcb\x11Q\xa2(\xa64\x8ab\xfe^\xa2\x98\xa9\x11A\xbd\xde!\xd3)\xfdA\xc1Su\xd4 \x8dR\xdd2\xf9\xf7A\xf6\xa43c\xd2*@\xff\xfcl#|\xbd'l\x1bTE\x86t\xcb\xb8\x0bz\xf3\xd6\x03\xa2\xe1\x1e\x19\x81v\xde\xf7\xe8\x1a\x07f\x91\x00\xe0\x92q+z\xad\xd3'M{t\xbcE\xfedF\x00\xb9r\xe3\x99F\x81}\xb27\xbc\xa3\x97\xfa\xba\x05\x81\xfa\x86\xdfk5\xe2b\xb3Y\xa9/-\xb9\x08R\xac\xe0\xab\xbaz\xad\x0b\xf4\xf5\xffy\xbd^\x17\xd5\xa2\x85\xc5V:#P59\x90\xc3wlYVr\x87g=\xd5\xea\xa7P\xdd\x9d,=\xc9\xaa\xbd)\xa5\xe8b\xd5\xca0\x82\xb7\xb5\xbc\xfe\xff\xd9{\xf7\xee6\x8edO\xf0\x7f}\x8aX\xef9#\xe9\x0eE\xdan\xb7o_\xedz\xcf\xd2\x12\xed\xe6\\Y\xd2\x92\x94\xbd\xbds\xeeRE A\xd4\xa8P\x05W\x15(\xb15\xf7\xbb\xcf\xc9W\xbd\x90\x8f\xc8DB\x82\xad\x88?\xba-\xa2**3\xf2\x1d\xbf_D\xc2\x9c\xb5l\xd6\xc2\xfb%\x13\x0e\xb6\xac\xaf\xb26\xc5,+a\x99\x95\xf3\x82A\x06\xb7\xf9\x1d\xb39\x1d\xbb\x86\x11>v\xdb7u%\xa4\xcaZ\xbal\xda\xae)\xf9Zq\xc3X)\x10\x04C\xd2\xe7^tA\x8f\xbaT\xe7v\xa7\x9er\xe8\xf7\xf9\xc0\xbbZ\xe6\x0dT\x9b\xf6I\xb5x2\xcfZ&\x13i\x0flm\xd1w\x95\xaf\x18T5\xfc]\x07\x19\xdb>\\\xb3l\xb6\xe4K\x92\xdcn\xf7\xdf\x15\x05f\x1f\xf2\xd6\xd4\x84m\x1e=\xb2\xb4\xef\x90\xd7\xe6 \xd7\xb3\xc3\xf8{\xce\xd7\xd9Y\xd6\xb2\xf9SYc\x01\x06t\xd4\n\xe9\xd4\x17\x8d5\xef\x9e<\x16OZ\x14\x8e\xde\x87\xa2\xba\xcdg6\xc3u\xfd\xa0f\xab\xea\x8e\xcdaQW+a\xc2\xcb\xe7\xffn=\xf7\x8b\x8dI\xde\xa8}\xabrb\x0b\xbf\xf0Q\x07\x8ft\xb3E\xbb\xac\xab\xf7\x86)\xd1\x1e\x9b\x0e!-`\x8eQ\x87\xa9\xf5\xff\xa7\xcd\xfaW\xfd\xbd\x1c\xa3\x80um\xbe\x95r\xed\xaeY\xcd?i\x9f\x0c^\xa9\xa3\xda\x9c\x9f\x8cE;*\xc3L\x92\xc3k\xc9\xcbE\x15YwE\x10\xb1\xf6(\xe1\xab\xea!\xa8\xde\xa3\xdeMm\xe5\xa2R\x98\x8dJ\xcao\x83l\xaa\xf2\xc9l\x99\xd9\x11\xe8f3[\xca\x0c\x11\xb7y+\xe6\xe1\\]c!<\xe1Y[\xd5\x0d\xcc\x04\xf0\x9cm\xdaj\x95\xb5\xf9\xcc\x01i\xea\x02\xb6\x95\xe1\x01\xbd\xaa\\\xcf\x8a\x9c\xefY\x9a6k\x9d\x03\xd8J\xb0\xf0\xad\xb9\x80 Y \xda \xd0s\x00\xc4R-\x1c\xfa\xb6\xbc\xed\x0e\xe7SZ\xba\x85\x97p\x91\x9ar\x81']$\xa2]\xc4\x11/\x1c\xea\xb8A\xd1\xd4\x8b\x9d\xc9\x17\xa9\xe9\x17\x81\x04\x8c\xc4\x14\x8c0\x12F \x0d\xc3\xd5\x87;\x82\x06\x96\x88\x91\x98\x8a\x81\"c$\xa4c\xecJ\xc8\x88\xa2d$\"e\xc4\xd02\x1c\xca\xe4\x1e\xcbK\xcc\xd8\x0b5c\x7f\xe4\x8c\xbd\xd03\xc2\x08\x1a\xc9)\x1aX\x92FR\x9a\x06\x9e\xa8\x11L\xd5\x08'kx\xa7\xc2\xc7\x08\xbaF\x02\xc2\x86\x87\xb2\x81\xdcP!h\x1b!\xbb\xae`\xea\x86k\x11\xbc\xa9\xee\x18\x82\xbc\x81-_B\x02G\x08\x85#1\x89#\x8e\xc6\xe1\xeaA\x8d\x9f\xc8\x11M\xe5\xb0h\xe3_\xf3\x919R\xd19\xd0\x9c\x04\x04\xa5#\x88\xd4\xe1\xc1`\xa3\x88\x1d>\x9dV\x80'\x11\xbd#\xdc\x98x\x8a\x87\xafn\x114\x8fH\xa2\x87\x0b(KF\xf6@\xd3=p\x84\x0f,\xe5\x03a\xe5p\xdaG\x08\xf1\xc3E\xfdHD\xfe\x08\xa4\x7f\xecF\x00\xf1\x194\x80\x04\xb2\x07\x1a\x88\xb7t\xd6\x9e\x9e\x8e\x0c\x82\xa0\x83\xc4\x13B,\xea\x84\xd3\xd1A IL\n\xf1\xd1B\"\x89!\x16]\xf2d\xe8:\x1c#\xc8!.\x04\xdbE\x10IO\x11IN\x12\xb1\xd3DR\x12E0T\x91p\xb2H\x10]$\x820\x12J\x19q\x92F\xdc\x10>\x1e\xc4\xc7\x12G\"\xa8#\x81\xe4\x11Guc\x08$\x16U\x03r\x06nH\xe0H$\x8e._\xde\xbai$I\x89$\x1e*\xc9~\xc8$\xa9\xfab\x00\xa1$\x84R\xd2\x93J\xa4 \x924\x0fh\x1e\xfexe[\x92\xe6!\xd9\x84\x924Sx\xb3\xf1w\no\x1e\x08\x857Sxs/I\xb1\xb5\x10d-\x08W\xa3\xf0\xe6]\xd1\xb4\x08,- \x92\x16\x8e\xa3Qx\xf3.\xf8Y\x08z\x96\x18;\xc3!g q3,jf\xd8\x10Sx\xf3X\x108\x19v\x97\x14\x8c\x91Qx3\n\x19\x8b\xc1\xc5(\xbc\xd9\xf6\x98\x17\x0b\x0b@\xc20\xc1\xbb!(\x18\x857Sx3\x06\xeb\xa2\xf0f!\xbb\xa0[\x14\xdel\xd2\xe4\xc5\xb3b\xd1,\xeb\xda@\xe1\xcd\xdbB\xe1\xcd\x11\xa8\x95\x1f\xb3\nE\xac\x02\xf0\xaa`\xb4*\x0c\xab\xa2\xf0\xe60t\x8a\xc2\x9b;\xd9\x07\"\x95\xa2\xcf\x05\xa0Qx,*6\xbcyU\xcd7\x05\xbbV\xbe\x97\xc6\x1e\xe1\xfc\x8bx\xf0W\xf5\xdc(\xc8\xb9\xc8\x1b\xe14\x95\xba\xb4\x1f\xa7\x91\xa1r\"\x06I\xcf[\x88T\xbf\x7f1\xa6?\x1e\x7f]=q\xb0\x11\xd2F\xa3\x0e\xa5\xfd\x0c\xa0\x91=L\x1a\xe5-Q!u\xe58\x81\xb7\xaa\xaa\xf1\x1dU\xfd\x1d\xbe\xa9=4\x1b{\x0ccW\xb0\x19o\xcb\xb2\xd94\xd3\xd8ig)1!\x90\xa3\xbe\xd7\xb9f\xf8\\\xab:\xbct\xe65\xdbE\xb0\x9c\x17\xcc\xfd~\xebQ\xbf\x8bg\xd2\xcf\x84O}:\x1a\xa5\x1bUE7\xb3\xbc\xeeKiP\xa85\x8d\xf7\x19\x08\\{<>\xe3\xa1\xed\xc98\x9f\x9d\xfa\xde{\x84\xbd\xad7\x1e\x80\x1d\xc0|W\xab/\x92?\xdb\xb4\xcb\x7fv\xa8\xfbm\x9d\x95\xad#|\xff\xe1\x05k7u\xd9t\xf4\x81\xb7\xa7\x9bvY\xd5\xf9?\xa5O\xfe\x08\x84\x06\xe9\x0d\xe4\x16\x91\xffd|\xcb\xd2\xff\xb3>6F\xe7\xff,>\xfe@\xd7\xfd@\xf1\xda\xa1\x89\x86\xd2~\x06\xb0,\x1b\x1a\xdf\xed.r\xdc\xd1\xea\xff\x0e \x809\xc0y\xa6\x00\xe9\xe0\xd1\x12\n\xd29\x95\x99=5\x8e\x83Kj\xb0\x0e\xfc\x80\x1dD\x80v\xee\nd\xed\x12\x0d\xdcA*\xf0\x0e\"\x01<\xa7\xc2\xc0\xdb[w\x06\xf2 \x18\xccs\xaaR C\x10\xa0\x07\xa9A=\x08\x04\xf6 \x14\xdcs\xf7\xec\x88\xbb\\\x13\x83|\x80\x03\xfa %\xd8\x07;\x03~\x10\x07\xfaA*\xe0\x0f\xa2\xc0?\xf7p\xc0\xde\xed\xba\x17\x10\x10\xf6\x08\x04\xc2~\xc0@\x08\x04\x04!\x0e\x14\xf4M\xc18`\x10\xd2\x82\x83\x10\x00\x10B8H\x08\x11@!b\xca\xc4\xdd\xf8\x9a\x000\x04\x1fh\x08\xf8\xed\x19\x02<\x84\xc0]\\0\x88\xe8\xd4\x86\xbf\xff\x15_\xca\x84\x80\"\x04\x81\x8a\x90\x1aX\x84Hp\xd1\xdd\xafPw\xc1F\x83\x8cV}-\xea>\xd8T`#\xe013\xc0\x80\x8e\x10\x06<\x82\x0f)\x88\x04 \x01\xa1\xd7\xe1\x8cL\x04FB\x94q\xf1\xa0$ j\x19\x01NB,@ \x9e\x1b\xf2\x92\x01\x95\x80\x07+\x01 X\x02\x1a\xb4\x04\x9c\xd5\xc3\xc1K\x08\x020\xc1s{l\" \x13B\xc1L\xd8\x11\xd0\x04\x84y\x03\x80M\xd8\x07\xb8 \x982:FB:\xa0\x130`'\xec\x00xZ\x15\xb6\xde[e\x13\x03\x9f\xe0\x05?!\x16\x00\xb5j\xf3\xdf.\x8b\x02B\xc1s\xc3\xac\xfb\x8e\xd9\x18P\xd4\xaa\xcas\xfbl$`j\xd5&\xf7\x81\x0e\xafY:\xe0\x14P\xe0)D\x00\xa8\x10\x06\xa2B\x0c\x90\n\xc1`*\xf8\xee\xa3\xf5\xdd\x02\x8a\x07\xb9\xb0\xc0*\xc4\x80\xab\x10\n\xb0\x82\xbb\xe21@\xabU\x19\xe2v\xda8\xc0\xd59 \xfc7\xd4&\x05^\xc1\x07\xbe\x82\x1b\x80\xb5\xbe\x13\x0b\xccB\xc2\xbe\x1b\x00\xd0B\x10H\x0b[\xf7\xd8ja\x1f\xd6y\x8d@\xa8P\x84\xe6y\xd6\xb2'm\xbe\xb2YYE::\x0e\xfa\xfcex\xbfde\x0fH\xca\xee(\xca)\xd30\xeb\xee\xb9\xae7%\x9b\x1f\xc3\xb9\xfd\x80Zn\x8a\x82\xf7\xf1\xa1>{S\xce+\xd6\x94\x0f[\xe9\xc7\xccdYz\xfb\xc0#\xe9z\x9aU\xe5\\\xf9\xb1]\x04\xfd\xb7#\xf8\xcf\xd1YW\xd9=d\xebu!|\xa3y)\\02\xc8Y\x15\xd8\xb4\x01\xc5\xe4\xb4\x16\x88-\xdc\xe6w\xac\x815\xabWy#\x83\xc8\xdb\n\xd8\x076\xdbX\xfcG\xfc\xbbj\x8f\xa76Ere\x1cX\x82[f{a\xf3;sF&\x99\xa4\xb2\x96\xc8m\x87P\xf3!\xdb\xc3\xd3\x06]\x1a\xac\x9e\xfc\xb4\xcen\xf3\xd2\xd2\x9fG\x05\xec\x1f\x94\xd0\x04\x13n\xa5\xc1_u\xdc\xb8 \xad\x96\xd2\xba\xb0[7j[\xb2\x0f\xed\xf5;vo\x0f\xb3t\x0e9\xaf\x13\x10\xd3?\xfaRh\x86\x04\xffO\xe5G\xcf\x9aF\x02\x07\xaf\xb3[v!\xc9\x15\xc7\xf2w\x8b2\x99(\xa1\xd5\x91\xf6k\xbe\x8e\xad\xaa\xa6\x05&\xbc\xd1\xc2\x8d\xddG\xda\xdf\xe8x\x8e\xdc6z\xf9`c\x02\xc6(+XU5\xd3\xb0\x85iK\xd5Vmf\x01\xbf\xd1\xc6td\xa0\xf7M\\\xe2\xf3\xc2\x8a\xe2?\xca\xcd\xeaF:Ku\x98\xd5 \xa6\xc7V\xdf\xa1\xa1g\xd5\xa6l\xaf\x852\xdb\xc4\xf1>k\xa0a\xed\x91H\x01\xa0@\xa4F\x90[xg\x9eK?\xf9\xfb\xbc\x19\xf7\x0fD\xfc\xb8$z\xc4\xc7\x8b\x9f\x8e\x079\x05\x86+\xa1\xc0p\n\x0c\xef\x85\x02\xc3)0\xbc\x97\xa4\x1c\x92\x10\xfeH\x10w\x84\x02\xc3w\xe5\x89DpD\x92\xf0C\xc2\xb9!\x14\x18\xbe\x0b\x17$\x84\x07\x12\xc1\x01\xa1\xc0p\n\x0c\xa7\xc0p,\x87#)\x7f#\x86\xbbA\x81\xe1\xb6\xc7\xbc\x1c\x8d\x00~\x06&\xec9\x84\x97A\x81\xe1\x14\x18\x8e\xe1XP`\xb8\x90]x\x14\x14\x18n\xd2\xe4\xe5J\xc4\xf2$\xack\x03\x05\x86o\x0b\x05\x86G\xf0\x1b\xfc\xdc\x86P^C\x00\xa7!\x98\xcf\x10\xc6e\xa0\xc0\xf00\xbe\x02\x05\x86wB\x81\xe1Jt`\xb8\x02q\x07:v\xcee>U\xce\xf6\xa3|\xd5\xdc^\xb7\n\xf4\x18\xbc\xe3:\x04\xbfR\xde\xd3\xa3\xd1\xcbG\x92\xee \xa0<\xd1\xa1%\x8e*\x96Y\x85\x89\xaf\xb2v\xb6\x9cv\xec\xdb\xfc\x8e\x95\\\xd3\xd6\x81 \xaf\xd4\xcc<\x12Fz\xf87X)\x90\xd7\xaa\x9e\xb3z\xea`\xf4\\\xde\x9f\xc2\x1a\xde{LL\xf9TN\xd4>\xe1\xe4\xa3\xfa\x0f\xd7\xbd%?\xcbG$GF\x99c\xc8b{+~\x19\xa7]\xe1\xc3Z\xa9\xd6\x8d?j\x0f\xf3\xc5\x0f\xdf\xdb\xb3\xb0\xe8\xef?\xd06\xa2d,^\x82\x8a\xdaiF\x833\xaa\x01\xa3\xdf\xa7d0\x94\x0c\x86\x92\xc18dG\xf2\x0e\x04\x13x\x9c\xaa(\x19\x0c%\x83\x89%\xf9@\x1c\xd1\x07R\x91} \x8a\xf0\xe3\x1e\x0e\x94\x0c&\x8c\x00\x04\x81$ \x88#\x02\xf9\xa6`\x1c\x19\x08\xd2\x12\x82 \x80\x14\x04\xe1\xc4 \x88 \x07!\xa6LJ\x06#%\x988\xe4\xd4F\xc9`(\x19\xccD\xd2\x10\x8c\x00\xcf\x93\x01\x0c\xd1\x08\xc2\xc8F\xe0c\x07D\x92\x8e\x00\xa1\x97\x92\xc18$\x8a\x94\x04\x94\x0cFI\x14a \x82HK@\xc9`0d&\xd8\x07\xa1 0e\xa4d0i\xc9N\xe0%\x8e\x81\xe2\xdb\x19\x832\xb5\x98\x8e~ADKt\xe7\xde\xf8H\x89\xfe(NQ\x12J(J\x82\xa2$z\xa1( \x8a\x92\xe8%\xe9i(\xe4,\x14t\x12\xa2(\x89]\xcf?\x11\xa7\x9f$g\x9f\xf0\x93\x0fEI\xecr\xe2 9\xef$>\xed\xe0\xce: O:\xd8sN\xe0)'\xf4\x8cCQ\x12# >\xd5P\x94\x04EI\x00EI\xf4BQ\x12\x14%AQ\x12\x14%a\x13\x8a\x92\xa0( \x8a\x92\xa0(\x89\x81\xa4`\xacS\x94\x84\x10\x8a\x92\xf82\xa3$\\\xa7\xc8XZ_G\xe0\x1bi\xdbb\xba%\x0b\xd0PL\xbd\xa0Z\x05\xf1\xfaFU\x1b)\xf3\xb1\xf9v\xac\xe3\x0e\\\xde&\x8c\xc2\xdb_\xaf'\x1c\xe9\x9a\xa9\xdb\x88\xbd\x80\xb2\x91\x9b\xb4{\xf0\x17\xe3\xf5\xa69\x0c\x0c\xcf\xc9\xccE\xf9\xaf0. \xd8a [\x15\xfa\x19\xba\xbb\xdf\xdd\x17Z\xbd\xa0\x11m\xd5\x15\xc5\xd5\xf5\xb2u\xf1uI\xc8\xd8\xf5rv\xbd=\x18\x10\xbd\x18\x10h4\xe0\xda\x1b\x02\xec\x04\x11\xc8\xb4S\x99\xd9=\xe98\xad\xa7F\xa8\xc1\x8fRC\x04R\xed\xae\x00]}\x18\x8b^C0\x82\xedTEW\x1fF\xb1{\x13#\xdb\x80C\xb7!%\xc2\x0d;\xa3\xdc\x10\x87tC*\xb4\x1b\xa2\x10o\xf7p\xc0\xb2}\xf7\x82|\xc3\x1e\xd1o\xd8\x0f\x02\x0e\x81(8\xc4!\xe1\xbe)\x18\x87\x86CZD\x1c\x02Pq\x08G\xc6!\x02\x1dGL\x998\x0ep\x02\x94\x1c|H9\xe0\xb7g\x08\xc4\x1c\x02wq\xc1\xc8\xb9S\x1b\x8e\x11\xec\xcb\xc6\x9e\x94\x15l\xe6\x05\x835Xt0{\xf2\x7f>l\x02\xc3E\xe9\xfa\x02!\xae\xec\x1c\xbd\xd0\xf5\x05@\xd7\x17\x0cdL\xc8\xdf\xe1\xee\x82\x81g\x8d(\xf9J\x88\x92\x9f\xc6\xe1\x15\xea\xf8\xd0\xce\x0d\xabB\xac\xd3#\xa9\xc3\x83(\xf9D\xc9\xef%\xa9##\xc4\x89\x11\xe4\xc0 J\xfe\xae\xce\x8a\x08GE\x12'E\xb8\x83\x82(\xf9\xbb8$B\x9c\x11\x11\x8e\x08\xa2\xe4\x13%\x9f(\xf9D\xc9o\x89\x92\xdf\x0b\x86pN\x94|\xdboD\xc97>C\x94|\xa2\xe4[\x84(\xf9D\xc9'J>Q\xf2\x07\x92\x82\x1eM\x94|!D\xc9\xffr(\xf9CK\xee\xc8\x19\xa7\x8b\x0bb\xb3\xc2\xd3\xc5\x05{4\xae?\xe5>]\\\x90\xc2\x8atq\x01]\\\xf0\xa5\\\\\x907\xcd\x86\xcd\xfb[\x0bP\x81N?\xde\xff\xac\xc2a,\x11O\xb7\xf9\x1d+\xf9h\xceJ\x1dK\xa2\xb4\x8d\x1a\xe2\xa1\xd1$\xdf?T\xcfZ\x82\xa4\xba\xaf?\xd0&\xa2h)!>z\x05EK%\xad\x1eEK\xd9\x95Q\xb4\x94\x07\xd9\xa6h)?\x91\x08R\x91\x89 \x92P\xe4TH\xd1R\xbb\x93\x8c \x90h\x04\xa1d#w\xcf\xa6h\xa98\x02\x12\xc4\x91\x90 \x15\x11 \xa2\xc8H\xee\xe1@\xd1Ra\xe4$\x08$(A\x1cI\xc97\x05\xe3\x88J\x90\x96\xac\x04\x01\x84%\x08'-A\x04q 1eR\xb4\x94\x94`R\x93S\xdb\x9f\"ZJ,fb>\xbba\xac\x04\xe9\x14\xb0\xdc7\xa8\x85b\xa4\x84P\x8cT\xff\x13\xd6\x98\x14#5\x89\x91\xea\\Z)\x82\xa5z\xef\xdc0jjZ;\xb3\xeb\xad{\x88\x82\xab&\xbfRp\x95\xafO\xf7\x12\xea'\xd1\xbe\x10\xabB\xac\x8f$\xa9\x7f\x84\x82\xab(\xb8\xaa\x97\xa4~\x8f\x10\x9fG\x90\xbf\x83\x82\xabv\xf5mD\xf85\x92\xf84\xc2\xfd\x19\x14\\\xb5\x8b\xff\"\xc4w\x11\xe1\xb7\xa0\xe0*\n\xae\xa2\xe0*\n\xaej)\xb8\xaa\x17L\xe8\x10\x05W\xd9~\xa3\xe0*\xe33\x14\\E\xc1U\x16\xa1\xe0*\n\xae\xa2\xe0*\n\xae\x1aH\x8a@\x17\n\xae\x12B\xc1U_Np\xd5\xf0\x80G\xc1U\x14\\E\xc1U\x14\\\x15gE\n\xae\xa2\xe0\xaa?ip\xd5m]m\xd6'w\xdf\xc8\xff\xb8\xce\xcbEu\xf2Q\xfd\xf7\xdc\x15Y\xf53\x7f\xe6\xbc\\T\xa2\x849k@\xbc\x05\\C\xcfLU\x7f\xeb2\xe0\x8e\xc2\xa3:\x15\x0ft\xd5\x0e4(\x8a\xd7\xc9C\x18\x13\xd5Vsgo\x1a\xcd\x12\x13fHJ\x11\xcb\xe7\xfb\xe33\x8d+6\xd7\xd5\x92D\x088\x7f\xaeg\x1cK\xad\xf8\x89o\x95\x1b\x18v\x80)\xdf\x98\xee\xc7\x15u!K39\xdfMB\x97D)\x1e6\xf2YSiV\xac\xcd\xe6Y\x9b\xa5(\x90\x15\x1a\xd1\x1f\x11\x9b\x93\xf2~\x00@t\xbf\xf0\x05\xaem\xb3\xd9R\xc2\xa3v\xa0\xd3jW\x05\x1cFV\x04\xd1\xf2>&\x9b*\x80\x9e\xf1\xe5\xd4\x98\xcd\xde\x0d\x91\xce\xack\x91\x15?A\xd5\xcd2_[\xd45m\xbd\x99\xb5\x9bZ\xae\x83\xb6\xc3\xc8{\xb9O\xadY\xf6\x0e\xd8\x87\xbc\x11\x11x|tTMV4\xc7\xf0\xdb\x92\x95|\xc6\x16vW\xdf\xb4\xa9b\x02\xad\xcb\x1bU\xe0\xf9\x91\xed\xa3\xd5P\x9dhTq\x14\x14\x8c\xb1Uu\xc7\xeb\xbe\xcc\x9b\x81A,z\xf2rV\x0b\xc8OD\xd4\xcd\xc5\x96\xc7\xf6\xcdY\xb6iX_\xb3~\x16\xad\x8a9\xab\xf5\xb7T\xc7\xcf\xf5\x84k\xa5\\.\xb2\xdc\xc4\xb4\x15+\xfa\xb5\xb4DdO\x1a\x0d\x89\xa1>=T\x9b\xcdj4\x0f\x9b)\xcd\xc6\xbeWwQ\x08\xa4\xc4\x14\xcb\x93\x08m\xcc3\xe8\n}W V\x88\xfaU,k\xb8\x8c\xa8\xb7\x02\x9bW\xae\xd0\xaf\xed\x95u\x93\x88\xa4\xec\xa1\xba\x08Z\x11\x8eS\xa4\xd5q{\xd9k)H.V\x02\x86\x14d-qd\x0c)!\x16\xd1E\xf4\xd32\xd4\x08\xb5\xf32\x06\nc]\xaf\x83\x85\xa2\xdfG\xe9\xb3G!\x81\xa1e\xbe\x86\x1b\xd6\xbeg\x03\xb2HV\x9a\x0fU\x99\xb5\x89\x0cS\x91\xe2\xa1v\xe3`L\x89\x93\xde[\x99\xd5^\xcf\x90S\xb5\xbb\xe4\xc3k\xc5\x91|\xc0'V\xb5\xa6|x\x94\x0f\xef\xcb\xc9\x877\xdc):x[\x93'&\x9a\x88\xd0\xd5\x0b\x11\xba\x88\xd0\xd5\x0b\x11\xba\x88\xd0\xd5\x0b\x11\xbaZ\"t\x99\x85\x08]Z\x88\xd0E\x84.\"t!wID\xe8\xea\x84\x08]C!B\x17\x11\xba\x0cB\x84.\xe33D\xe8\"B\x97E\x88\xd0E\x84.\"t\x11\xa1k )\xc85D\xe8\x12B\x84.\"t\xc5\x10`\xf6E\xe8\xa2Dy\xb1Y\xc8(Q\xde\x1e\x8d\xeb\xef\xa3\x94(/\x85\x15)Q\x1e%\xca\xfb2\x12\xe5\xad\xab\x82O\x82\xcd\xf5\xcd\xfd\xb5\xc8)\xd8\x1d+\xa0*\x9f\xcc\x96\x99%R4/\xa5\xb1x7\xe7\xdd2\xf3@\xb4\xfe\xa2\x8dY\x10]\x02\x9f D\xdc&(V8\xbd\x7f3\xa82\"\xe0\x94\xd1G\x08e\xf4\xe9\x7f\xc2\x1a\x932\xfa\xf4\x19}&\xdc\xaaIf\x1f\xd3k'\xa6\xf7(\xb3\xcf@(\xb3O\x1a\xceQ(\x8dC\xfb\xbe\xad\n\xb1\x14\x8e\xa4\xf4\x0d\xca\xecC\x99}zIJ\xcb\x08\xa1d\x04\xd11(\xb3\xcf\xae\xd4\x8b\x08\xdaE\x12\xcaE8\xdd\x822\xfb\xecB\xaf\x08\xa1VD\xd0*(\xb3\x0fe\xf6\xa1\xcc>XZDRJD\x0c\x1d\x822\xfb\xd8\x1e\xf3\xd2\x1e\x02(\x0f\x98\xbc5!T\x07\xca\xecC\x99}0\xb4\x05\xca\xec#d\x17j\x02e\xf61i\xf2\xd2\x0fb\xa9\x07\xd6\xb5\x812\xfbl\x0be\xf6\x89\xa0\x0c\xf8\xe9\x02\xa1T\x81\x00\x9a@0E \x8c\x1e@\x99}\xc2(\x00\x94\xd9\xa7\x13\xca\xec\xa3D\xa7^\xc8\x06\x91\xfb\xe0\x0e\x86\x1e&\x05\x18\x87Bo\xa3\xd1;\xa7\xf7\xa1,>q)R(\x8b\xcf\x1e\x8d\xeb\xcf?CY|RX\x91\xb2\xf8P\x16\x9f//\x8b\x8f\xfc \x7f\xb3hO\xf5\x10\xfft\xe4\xf3\x91\x7f\xe9o_s\xa5\xf2\x11\xff|\xa0\xebN\xa9|:\xf1\x110(\x95OK\xa9|L\x82\x81e\x80R\xf9P*\x9f-\xf1M9\x80\xe0}\x01\xae)!\xa0\xa5 \x82\x03\xe6T\xd6R*\x1fJ\xe5\x13\xc0\x13\x83`\xae\x98S\x15\xa5\xf2\xa1T>\xb1|2\x88\xe3\x94A*^\x19Dq\xcb\xdc\xc3\x81R\xf9\x84q\xcd \x90o\x06q\x9c3\xdf\x14\x8c\xe3\x9dAZ\xee\x19\x04\xf0\xcf \x9c\x83\x06\x11<4\xc4\x94I\xa9|\xa4\x04s\xd4\x9c\xda(\x95\x0f\xa5\xf2\x99H\x1a.\x1b\xe0)Y\x80\xe1\xb4A\x18\xaf\x0d|D\x94H~\x1b \xf4R*\x1f\x87D\xf1\xdf\x80R\xf9(\x89\xe2\xc6A\x10?\x0e(\x95\x0f\x867\x07\xfb\xe0\xce\x01\xa6\x8c\x94\xca'-\xaf\x0e\xbc\xdc:\x88\xe5\xd7Y\xb5Q*\x1f\x1c\x1f\xcf\xaa\x8dR\xf9 yz\x10\xcc\xd5\x03J\xe5c\x94\x18\x1e\x9fU\x19\xa5\xf2\xd1B\xa9|\x0cB\xa9|\xbe\xf8T>Y\xd3T\xb3\\\x9c\xee\xc5bg\x1ed\xdd\x06\xcf\x08\xd1Sf\x1f!\x94\xd9\xa7\xff kL\xca\xecc\xca\xec#\xfe\x19\x91\xd9G\xd2\xbd(\xb3O/\x94\xd9'\x0d\x05)\x94\xd5\xa1]\xe1V\x85XFGR6\x07e\xf6\xa1\xcc>\xbd$ei\x8404\x82\xd8\x19\x94\xd9gW&F\x04\x0b# \x03#\x9c}A\x99}va[\x840-\"X\x16\x94\xd9\x872\xfbPf\x1f,K\")C\"\x86\x1dA\x99}l\x8fyY\x10\x01\x0c\x08L\xde\x9a\x10\xe6\x03e\xf6\xa1\xcc>\x18\x16\x03e\xf6\x11\xb2\x0bS\x812\xfb\x984y\xd9\x08\xb1L\x04\xeb\xda@\x99}\xb6\x852\xfbD0\x08\xfc\xec\x81P\xe6@\x00k \x981\x10\xc6\x16\xa0\xcc>a\x8c\x00\xca\xec\xd3 e\xf6Q\xa2\xd31\xe88\xec\x81\x92\x888m\x05O?l\xb61\xe1\x9ds\xfc\x84\xa4\x04\xa1\xe4?\xe07#%\xff\xd9\xa3q\xfd}\x94\x92\xff\xa4\xb0\"%\xff\xa1\xe4?_P\xf2\x9f\xfb\xeb\xbc\\T'\x1fUb\x12W\xd6\x9f\x81\xe5\xa6\x9c4C\xee\x9f{\xc9\xfc\xea\xa2y\xb73\xa0t\xdaLD4K\x8e \xf19\xf5\xc8\xc1\xa6\x07\xe2\x15\xb7q7\xa28e\xce\xdc>^\xf0!q^\x1fwV\x1foi\x10\x9c\xac\x88}\xa2\xa9\xa0\x8el>\xdeR\xa6\xce\xe4\xe3\xce\xe3\x13V\x1c+4\x942\x83\x8f\xaf\x178\xb3\xf7x\xeb\x13\xda \xacUN\x91\xb5'.gO\xb2\x8c=\xa8|=\xce\xc9\x03\xbc\x13\x08 x\\\x88f\x03t\xbb@,\x9b\xcb\xa1/(CORF\x97\x97\xd3\x95\x9a\xd5\x85\xe7u%bv\xc5q\xbb\x1c\xea\x02s\xf2\xec\xc8\xefJ\xcd\xf0\n\xe4x%fy\x85\xf1\xbc\x02\x99^\xae>\x1c\x91\x85')\xdb\x0b\xc5\xf7J\xc8\xf8\xda\x95\xf3\x15\xc5\xfaJ\xc4\xfb\x8aa~9\x94\xa1\xb3\xee\xec\x81\xfd\xb5?\xfe\xd7^\x18`a\x1c\xb0\xe4,0,\x0f,)\x13\x0c\xcf\x05\x0bf\x83\x85\xf3\xc1\xbcS!.\xbf\xce\xce\x9c0on\x1d\xd4\x86\n\xc1\x0c\x0b\xd9u\x05\xb3\xc3\\\x8b :\xa3\x0e\xae| 9b!,\xb1\xc4<\xb18\xa6\x98\xab\x07\xa1\xb2\xe8D\xb2\xc5,\xdaZT\x06\x9d4\x8c14\xed \xc1\x1a\x0b\xe2\x8d\xf9\x12P\xc4p\xc7|:\xad\x18r\"\x06Y\xb81\xf1,2_\xdd\"\x98d\x91\\2\x17\x16\x9f\x8cO\x86f\x94\xe18eXV\x19\xc2\xca\xe1\xcc\xb2\x10n\x99;'N\x12~Y \xc3l7\x8e\x99\xcf\xa0\x01<\xb3=0\xcd\xbc\xa5\xb3\xf6\xf4t|3\x04\xe3,\x9esfQ\xd7zs\xdf$\xe5\x9d\xf9\x98g\x91\xdc3\x8b.\x7f\xce\x1b\x04\xff\xcc\x9d\xef\xc6\x95\xed&5\x0b-9\x0f\xcd\xceDK\xc9E\xc3\xb0\xd1\xc2\xf9hA\x8c\xb4\x08NZ(+\xcd\x93\xc1\xc6]:,O\x08\xcbM\x8b`\xa7\x05\xf2\xd3\x1c\xd5\x8d\xe1\xa8YT!r\xd6\xc4\xf0\xd4\x1c]\xde\x9f\xaf&!W\xcd\x9b\xabf\x1f|\xb5T}1\x80\xb3\x16\xc2Z3g\xa2\xf1\xe5\xa1\xf1\x9e\xe1q9hp\x07\xe4\xc4\xf9g\x9c\xd9g\xfc%\n\xcf<3\xcc2cP\xe8\xcb;\x13\x94\xc3B\x94i\x92\xbeb+a\x85.\xb8|j\xa2\xb0\xa5\xcc\x15\x94\xb9\x822W\xf4B\x99+(sE/I1\xcd\x10D3\x08\xcf\xa4\xcc\x15\xbb\xa2\x98\x11\x18f\x12\x043\x1c\xbf\xa4\xcc\x15\xbb\xe0\x96!\xa8eb\xcc\x12\x87X&\xc4+\xb1h\xa5\xe1 B\x99+\xc6\x82\xc0'\xb1\xbb\xa4`l\x922W\xa0\x10\xc9\x18<\x922W\xd8\x1e\xf3b\x90\x01\x08$&/C\x08\xfaH\x99+(s\x05\x06c\xa4\xcc\x15BvA\x15)s\x85I\x93\x17G\x8cE\x11\xadk\x03e\xae\xd8\x16\xca\\\x11\x81\x16\xfa\xb1\xc2P\xa40\x00'\x0cF \xc30B\xca\\\x11\x86\nR\xe6\x8aN\xf6\x81\x04\xa6\xe8s\x01( \x1e\x03\xc4d\xaeP\x91}\x03\x1d\x81\x11\x94\xed${\xc54\xe8y\x87\xac\x15\xb6\x18_s\x88\xafz\xd4\x14\xcc+ \xb2\xa6\x0b\xdc\xcd\x8aB\x16YPQ\x9b6k\xbb\xe3\xf4\xa8\xf2\x0f\x8dq\xcc\xffz\xfc\xcdC\xf5\xf4v\xdc\xae6\xe4\xc1\x86\xeb\x0eM5\x94\xf63@V\xb6\xb0\xda O\x8d#\xaarb\xe2\x98\xb0Zg`-\xaa\x9cq\xc1\xb5\x0f\x1b{x\xad/\xc06\xbcX\x0e/V\xca0[p\xd9\xd9\x19c\x8b\xaa\x12\xaaG\xf8\xae\xc0\x08\x8c\xb2\x85\x15_\xfa\xeaf\x99\xaf\xad\nq!\xb6:\xc8V8\xae\x81}\xc8\x9bv\x18L\xdb\x1c\xc3oKV\xb2;V\x8bvP\xdf\xb5+c\xc2\xd9\x9a7\xaa\xd8\xf3#\xfb\x87\xab\xa1J\xd1\xd0b-\x17\x90\xff\xaa\xba\xe36X\xe6\xcd\xc00VMy9\xab\x85\xd7\x96o\x05\xca\xb9$\x15Z\x9f\x9ee\xfc\x14\xd3\xd5\xb0\x0f\xcb\xaa\x8a9\xab\xf5\xf7\xd4\xc0\xc8u\xc2\x05\xeb\xcd-\x00\x8b,7s\x18E\xb2\x8fki\x93\x1dz\xd8h\xd0\x0cu\xea!\xddlV\xe35Q5\xd3C\xd5\x1e\x16\xaf\xb5\x8f\x96\x83*\x1c\x8e\x9a\x83\x1f\xf9\xe1\xf4\x9c\xf7\x0e\x840\xc5\xbdP\x11\xbc\x1c+L\x9b\xd9\xe6\xa2\xf1\x0e\xe0\xad\\/%4Y\x14}\xcb6\xa0\x8a\xd1o!\x1eNt\xd1\x1dNBFU\xa5;\x9cP\xc6\xfc\xe2\xeep\xda\xea\x17=\xff\xadq\xd0\xde\x9a\xe9\xcdL\x13-\xb6\x0d\xfc\x83\xbe\x10\xc4\x83\x1b \xf1\xe0p\x0b\x12\x10\x0f\x8exp\xd6'\x89\x07'\x84xp\xdbB<8\xe2\xc1\xd9\x84xp\xc4\x83\x13B<8\xe2\xc1\x11\x0f\x8expR\x88\x07G<8\xe2\xc1\x11\x0f\xce&\xc4\x83#\x1e\x1c\xf1\xe0\x88\x077\x90\x14\x9c$\xe2\xc1 !\x1e\xdc\x97\xc0\x83\xa3\xeb\x8f\xc2\xee\x96\xa1\xeb\x8f\xf6h\\\xff\xc5=t\xfdQ\n+\xd2\xf5Gt\xfd\xd1\x17q\xfdQs}s\x7f-\x08\xa5'\x1f\xc5\xff\xb9\xae>\x92\xcc\x8a\x1f\xefO\x05Yut\xdbQ\xc3\x07\xae$\xb1*\xd6\xaand\x03\x15Zix\xa0\xebG\x8ch/y\x81\x18\xd1\xc4\x88\xee\x84\x18\xd1\xc4\x88&F\xf4\x0e\x85#FtzF\xb4\xda\x06\x88\x8dR\xcf\x85\x16\xb7\x1f\n\xe4\x93\xff\xb1\xf33\x1b'l\xa2E\x0b!Zt\xff\x13\xd6\x98_\x1c-\xda\x91\x16To\xaf]\xec\xe8\xc9#\x13]\x13\xeat_\x00\xa2D\x8f\x84(\xd1\xbe^\xd9\x0bQ\xa2\x89\x12m\x16\xa2D\x0b!J\xf4\xb6\x10%\x9a(\xd16!J4Q\xa2\x85\x10%\x9a(\xd1D\x89&J\xb4\x14\xa2D\x13%\x9a(\xd1D\x89\xb6 Q\xa2\x89\x12M\x94h\xa2D\x0f$\x05=\x95(\xd1B\x88\x12\xfd%P\xa2\xb3\x01{\x0bBy;\x99\x9d\xb5\xb3cVP\xe2l\xc7\x12b\x89\xb3\xbdG\xe3\xfa\xd9\xc6\xc4\xd9NaE\xe2l\x13g\xfb\xcb\xe1lK\xb6\xdc\xc9G\xb5\xb2bh\xdb\xbfH\xd2\xe26o[\xb1\x191\xc4m\xa9\xe3\x81\xae%1\xb7\xbd\x1c\x0bbn\x13s\xbb\x13bn\x13s\x9b\x98\xdb;\x14\x8e\x98\xdb\x9f\x99\xb9=lq\"p\x1b\x1f \x02w\xff\x13\xd6\x98D\xe0\x1e\x11\xb8\xe56\xdb\xcd\xe0V\xdb\xf9\xda\xcc\xe1n\x89\xbaM\xd4\xed\x80\x85\x9e\xa8\xdbD\xddVB\xd4m\xa2n\x13u\x9b\xa8\xdbD\xdd&\xea6Q\xb7\xb1\xbb$\xa2nwB\xd4\xed\xa1\x10u\x9b\xa8\xdb\x06!\xea\xb6\xf1\x19\xa2n\x13u\xdb\"D\xdd&\xea6Q\xb7\x89\xba=\x90\x144Z\xa2n\x0b!\xea\xf6\x97A\xdd\x164\x9c\x81\x8e uG\xb2t\x14\xe04\x04{\xa7\xf40 \xc26\x11\xb6\x89\xb0-\x84\x08\xdb\xfd\x9f\xf1V$\xc26\x11\xb6\xff\xec\x84m\xcd\xfb;\xf9\xa8\xff\xeb:\x9f\xbb\xc8\xda\xaf\xd5c\x1dM;\xeb\xb8\x83=u\xb0\xfbK>\xb7\xb3\xb5\xb5\xa6\x07\xba\x86\x07J\xd6\xd6\x95\xf1q\xc6\xba:+\xb2X\xf7\xefrQ%\xe5\x87\xd9\x18\xdb^<\x01Afrs\xb5\xf3\xb9\x9evt\xedL\xa7=\xd1\xb9\xae\xd7U\x91\xcf\xee\xaf\xd5\xae,\xb2\xc4\x18\x08\xc1\xfcA\x07\xbf[\xbb\x9f\x15lk9\x86\xf32o\xf3\xac\xe8Y\xbf\x97\xae\xa9\x03\xd1\x99Y\xb9Y\xd9\xa6\xfa'\xf0\xfa\xe2\xd5\xebW\x97\xa7/\xae/\xafN\xaf\xde\\^\xbfyy\xf9\xfa\xec\xd9\xf9O\xe7g\xcf\xd1\xef\\\xbe\xf9\xf1\x97\xf3\xab\xab\x807N\x9f=;{\x1d\xf2\xc2\xc5\xd9\x7f;{\x16\xf2\x82\xeaY\xe8\xe7\x7f;\xbf\xfa\xfb\xf3\x8b\xd3\xdf^Zz\x87\xa47\x07\x9ak\x91\x97Yq\xddfEq\x7f-\xcf \xbbt\xbemmc\x07~\xb3Y\xc9\x04\x08E\xa1\x02e\xd8\x1c\xee\xaa\xd6\xc2S\x00\xc9\x06Z\xe6\x8dm\xd4u\x13\x8d@k\xf8y\x9ekS\x9cA}l\x94^\x81\xac\x1d\xccF6ocV\xce\xc5\xd8\xb4~\xafZo\n\xc1zPX\x13\xafj^\xde\x1eq\xf5w\x95\x9c\xa4X\x9dWs`\xa5\x88\xac\xb2\xd2q\xbb\xa2\xb3\x0fl\xb6iE\xa1,\x8f\n\x17\xb1\x88\x08[f\xeb5+\x1b\x893\xb8F\x9b\x95T\xed\xdb\xf9s\xb9g\xcd\xb5\xd8 \xd9\x11c\xef\x98\x86i\xa7\xe9\x94\xeams\xd7\x01T0\xd5=kd_\xb0\xe1\x9f\xd9M\xc3\xbbR\xfa\xa2\x8d\x14\xdb\x8a\xa7\x1e\xb2\xec\x0d\xb9\x94U\xfa\xa2i\x9d\xb6R\x95\x95\xdbfeu\xcd\xd7\xb2\xeb;\xd6\xee\xa7t\x13\xed\xb6r\xf2'Le\x94c\xe6Z\x8e\x99kV\xeez\xeeL\xb1\xb3\xde*S\xe7\xba\xecv\xd87\x82\x0b\xaa\xb0\x1b\xf9\xbcE\xd9Jq\xe2\xe6U9\xf5Z\xf6\xf2\xa6\x14\x8e\xe2l\xe0n(\xe0\x97\xe6\xf6\xec\x03\x9b\x89\x9dPV\x14l\xae\xbf\xfa\xa8\xad\xd4\xa4a[\xb8\x87\x1b\xfeee\x83\xf2AN_\xc2\x1b\xd5\xbb9\xd4G\xc4\xdeo:\xa15\x8fm\x13\xa7\x9e\x08;|\x8c\xd7\xd7\xf6Y\xe1\x99\xcc\xf9\x06-/\xdb#\xcd\x0e\x80\xb7\xdb\xcb\xc7[\xfe\xdb[\xb9\xa7yk]tX1\xef\xb6q\xd6o\xcefU=\xcf\xcb\xdb\xe2\x1e6\xeb\xb9-FQ\xda\xb5\xaa\x13,\x86\x13U\xba\x13\x89Jj\xaf\xecdo\xe5\xd4$W\xb4\xe9\xde\xebe\xd5^l,\xe1\xe3\xdeQ\x83\xdcx\x9d\xfd\xbfg\xcf\xde\\\xbd\xba\xb8\xbe8\xbb|\xf3\xe2*l\x076}\xf9\xe5\xab\xab\xeb\x8b7\xe6M\x8c\xf3\xc5\xcb7\xcf\x9e\x9d]^\x86\xbf\xf8\xd3\xe9\xf9\x8b7\x17g\x96\xa6\x9cn\x9b\xc2*\xab\x90\xd4\xfd99\x1c\x0b9f)\xf7GI\x01\xa6\xa3H\xc1\xf5{)\xa1\x11SNe\xad\x916k\xc7\xa7!u\xe4\x14\xf8\xa3\xa7 \"\x82\xca]\x81\xac]\xa2\xa3\xa8\xb8\xb4)\"\xa9 2\x9a\xca\xa9\x90\x1b\x17\x1dQ\x05\xbbGUApd\x95S\x95\x8a\xf8\x08\x8a\xae\x82\xd4\x11V\x10\x18e\x05\xa1\x91V\xee\x9e\xddEaa\xa3\xad u\xc4\x15\xe0\xa2\xae e\xe4\x15\xec\x1c}\x05q\x11X\x90*\n\x0b\xa2\"\xb1\xdc\xc3Acp\xbeq\xb3\x97\x88,\xd8cT\x16\xec'2\x0b\x02\xa3\xb3 .B\xcb7\x05\xb7\xa8(-H\x1b\xa9\x05\x01\xd1Z\x00\xc1\x11[\x10\x11\xb5\x85\x982\x1f#\"\xb7 E\xf4\x16\xf8\"\xb8\x00\xbf=CDrA\xe0..8\xa2\xcb\xa9MD{!\xa2\xba \xa0\x94 \xa3\xbb (\xc2\x0bRGyAd\xa4\x97\xbb_5\xfeh/\x88\x8f\xf8\xb2\xea\xe3_\xf4E}A\xb2\xc8/\xc0\x070\x01&\x02\x0c\xc2\xa2\xc0\xc0\x17\xb6\x11\x19\x0d\x06\x08\xbd\x0efx\xa2\xc80\x882.>B\x0c\x10\xb5\x8c\x88\x14\x83\xd8h1p[5]\xd4\x18\xe0#\xc7\x00\x19=\x06\xe8\x082\xc0Y=<\x92\x0c\x82\xa2\xc9\xc0\x19Q\x06\xa9\xa2\xca 4\xb2\x0cv\x8c.\x03\x84y\x03\xa2\xcc`\x1f\x91f\x80)\xa3c$\xa4\x8b:\x03L\xe4\x19\xec\x10}fU\xd8\n\xe6\x99=\x02\x0dRG\xa1\x817\x12\x0db\xa3\xd1\xac\xda\xe4\x19\xd5}\\GD\xa5\x813x\x06\x9c\xd1i\x10\x15\xa1fU\xe5\x8c\\\x83\xd8\xe85\xab6\xb9\x0ftx\xcd\xd2E\xb1\x01*\x92\x0d\"\xa2\xd9 ,\xa2\x0db\xa2\xda 8\xb2\x0d<\xab\xad'\xda\x08\x02\"\x8e\xb0Qn\x10\x13\xe9\x06\xa1\xd1n\xe0\xaexL\xd4\x9bU\xd9 \xa6\x0c;dp\xd1o\xce\x01Q\xde\xba#\xe0 m\x14\x1c\xf8\"\xe1\xc0\x1d\x0dg}'6J\x0e\x12\xf6\xdd\x80h9\x08\x8a\x98\x83A\xd4\xdcXp'p\x0d\x80I\x0ej\x917\xc2\xad\xfd\xb6\x99\xbf;\xfe\xa5\xb9}\xab|\xe5]\xbf\x91\xb0\xf5\xdc\x99v\xb3\x07\xafE\x1a\xd0\x89\xe7dT,\x11u\xa0Y\xfe\xe6\\\x91]4\x01]\xe9\xdf\x0b\xe5\x85\xa4\xbc\x90\xbdP^H\xca\x0b\xd9KR\xd42\x04\xb1\x0cB+)/\xe4\xae\xc8d\x04*\x99\x04\x91\x0cG#)/\xe4.\xe8c\x08\xf2\x18\x81:R^H\xca\x0bIy!\xb1\xa8aR\xc40\x06-\xa4\xbc\x90\xb6\xc7\xbc\xa8`\x00\"\x88\xc9z\x18\x82\x04R^H\xca\x0b\x89A\xf5(/\xa4\x90]\x90;\xca\x0bi\xd2\xe4E\xe7b\x919\xeb\xda@y!\xb7\x85\xf2BF j~4-\x14I\x0b@\xd1\x82\x11\xb40\xf4\x8c\xf2B\x86!d\x94\x17\xb2\x13\xca\x0b\xa9\xa4\xcb\xea\xd5g\xa7\x1a\xe81&`\xba\xb6\\1\xdb\xc7]\x0e\xa7\xa2\x9dSDZ\xd2}\x84\xa7\xe0j\xc69\xb8ND\xa8\xa5#\x13\xd7\xe0\xe4|\xc5\x1f\xbd\x90Q\x8b25\x99\x9a{\x85O\xba\x0fg\xcc\x86\x89\"\xc6\xd1\x8d0\x8c\xe3oZ>`\xf2r\x1cd\xca\xc7\x16+\xa5\x03J^\xe87\xabV\xebM\xcb\xf4\x18\x10\xee'\xf9\xd1\x81\xaa\xace\x83\xe0y9r\xa4\x8b\xa5\xac\x84\xe7A\x04]\x1e\xc3+E\x82\x17n\x9ceV\xce\x8f\xf8>mRF\xf9\xf0@\x9f(R\xdeB\x93\xaf\xd6\xa2\xae}\xedM!\xab\xb2<\xd0\xb4U\xddgo\xeb\x94\xf5\x1fj\x1bV,t?\xd9\xce]60\xb8z\xe6`\xd3\x97\x89\xeao\x9f\"Fe\x91\xfddx\xd5e-/\x1b\xe4;5\xfe\xdb\xf6\xe2m- xA@O\x06\x03\xaf\xfb+a\xe6\x02D\xd6\x82\xb0\xe2$\xc8V\xe0\xceT\x10V\x9c]2\x14`\xb3\x13\x04\x97(:+\xc16\xbb`0\x0e\xcd\x04\x83\xf1\xccH\x1c\x03-\xc41 \x8eA/\xc41 \x8eA/\xc41h\x89c`\x16\xe2\x18h!\x8e\x01q\x0c\x88c\x80\xdc%\x11\xc7\xa0\x13\xe2\x18\x0c\x858\x06\xc410\x08q\x0c\x8c\xcf\x10\xc7\x808\x06\x16!\x8e\x01q\x0c\x88c@\x1c\x83\x81\xa4\xc0{\x89c \x848\x06\xc41\xf0p\x0c\xe4\xd5H\x07\xcf1\xb8\xbe\xb9\xbf\x1e\xde*r\xf2Q]\xb3\xe3\xba\xf3kp~\xd6\x01\xbb\xcd\x8f\xf7\xf2\x12/y!\x88\xbe\x0c\xac\xbf\x03\xa4\xcbC\xb8}\x01S\xa7L\xde\x013\xberi\x84\xb5\x9b\xbf\xa6\x9e\x11\x08\x10@\xf8\x97\xb2#\xed_J\x18\xf9\xdfW\x8f\xc8\x0b\xd2\xc2\x03\x01<\xea\xf8 +$\x1c@JPP\x80\xaf\xbfw!\x03\xd8\xd0\x00)\xc1\x01\x02\xbe\xf1\xd9`\xc2\x04\xa4$\x0b\x16\xd0\xeav \x19\x90\x12\x118 %I\xf8\x80\x94\xf0 \x02\xdf0\xc1_\x9c\xb6\x97\x80\x02)\xfb\n+\x90\xb2\x87\xe0\x02)!!\x06R\xd0\x81\x06\xbe\xa14\x08C\x10}\xd9\x1fn %a\xd0\x81\x14l\xe8\x81\x946,\x00AJh\x18\x82oZ\x0b\xbaN-AH\x82\x14\xef\x95j\x01\x9b=D\x90\x82\x94\xb0]ap\xc0\x82\xaf\x97\x06\\\xae\x16R\xd6\x84!\x0cR\xf0\x81\x0cR\x92\x863H\x89 j\xf0\xf56\xe4Ekq\x01\x0enu-\xf2\xb2\xb5T\xc1\x0eR\x90\xac})\xde\xc0\x07)\x01\xe1\x0fR\xbc\xf7\x17E\x85BH\xf1\xebv^\\\x92(8BJ\x8c\xb1\xf1\x81\x12R\xfc\xf5\x8d\x08\x9a\x90\x12\x15:!\xc5}9L\xb20\n)\xc8`\n)\x98\x90\x8a\xeeID`\x85\x14T+\x84\x07YH\xc1\x87ZHq_\xcd\x96(\xecBJP\xf0\x85\x94]B0\xa4\xf8\x8d\x1d\x10\x8e!%yP\x86\x14DI\x9d#%]\x98\x86\x14o\xb0\x86\x94\x98\x90\x0d\x87:\xedK\xf7]\xd9\x16\x17\xbe\xe1P\xd7j\x9f\x95\xf3\xda\xb6\xc8P\x0e\x87>\xcc\xd5m\xa8\xb0\x0e)\xee\x1b\xa0|\x17\xb8\xc5\x04z8\x94y/q\x8b\x0c\x04q\xe8\xf3^\xe4\x962(D\x8a?4DJh\x80\x88\x94\x800\x11)\xc1\xc1\"\xa3\xd7\x90!#R<\xd7\xba\xf9/\xc7\xc2\x13\xfa\xb1A$Jkh(\x89z-$\xa0D\x8a\xd3\x041\xc1%\x0eu\xa8K\xde\xe2\x02M<\xc3\x05s\xd1[\xd2\xa0\x13\xa5\xd0w\xd9[\xdcuo\xbb]\xf8\x96\xb2W\x07\x84\xa9(\xc5\xe8`\x15)\xb6\xcd\x0c\xd6;\xa0!@\x08\xba\xfc\xcd\xaan\x9a\x8b\xd1t\xfd\x9b\x14L\x01\xbb\x8b\xdft\xd2\xc1LG\x83t\x04B~PZ\xf1N^\xcb\xc8\x1a\xf9\xbb\xcd\xc9/)\xccC\xc2\xb3\xf11\xde\xc7\xb2Q\xe0 \xef\xcas6\xcb\xe7\x0c6k\xeb)\xe4\xb4\xaf\xf8\xac*\x9b\xbci%\x15M\xe0\x08v\xb3\x1au\x0d\xee\xd9\x1b\xe3\xee\xc6\xa7\xa5\x9d\xf96\x8cO9\xfc\xff\x9bj\xc5:(\xa3g\xf4gMS\xcdr\xe1\x98\xd0\x14U\xb3B+\x9d\xdf\x18\xea\xd4\xb3\xe8\xfb\xbf\x08\xfd\xb7\xf9\x1d+\x8d1<\xdd\x97\xb2\xdb\xbc\x14\xc3c\xfb\xf03\xfeV\xf7\xe0( \xe5\xe0\xcfj\xebf\x8a\xda\x91\xe2\xc4\xa3\xdd8t\xc9>\xb4\xd7\xef\x98!I&`\\\x91^\x17\xe4\xa8\xaa\xff\xd36`u)4C\x83\xff\xa7\xf2\xef\xf3\x1e `\x8d\xd7\xd9-\xbb\x90\x999\x8f\xe5\xef\x16e2=+W\xc3\xd5rC2XUM\x0bLx\xc7\x85c]\x90\x1b\xfb\xc5d\xdd\xde;/~\xac\x99\xe8\x08e\x05\xab\xaaf\x1aT1\x8d\xff\xb6j3\x0b\x98\x8f6\xa6\x83\xc7\xde\xe6m\xc1\x1c3\x9f\xf8\xbc\xb0\xa2\xf8\x8fr\xa3\xa7\x10\x9dLj\x00\x19\xd8\xea;4\xb4`\x9c]\x0be\xb6\xd5E\xc4P\xb0\xf6\x08\xf2\xb6\xe9)1\x9bRv\xe6\xb9\xf4\xd7\xbf\xcf\x9bq\xffp\xcf\x93\xa3\xdb3\xc7\x01p\x93T\x97\xa6\x17\xbb\x9b5\xc7qz\x94\x02\xb3\x17J\x81\x19\x10SE)0\xc3\x982\x94\x02sw.L\x18\x0b\x86R`\x9a\x15\xe2x.\xc1\x0c\x17J\x81\xb9\x0b\x87%\x9c\xbdB)0wa\xa9\x84\xf0S\xd0\xcc\x14J\x81I)0\xd1\xbb\xa4`F \xa5\xc0DqFb\xd8\"\x94\x02\xd3\xf6\x98\x97 \x12\xc0\x01\xc1$x\x0c\xe1}P\nLJ\x81\x89ajP\nL!\xbb\xf0/(\x05\xa6I\x93\x97U\x11\xc3\xa7\xa0\x14\x98CAp%(\x05f\x04\xdb\xc1\xcfs\x08e8\x04p\x1b\x82Y\x0da|\x06J\x81\x19\xc6R\xa0\x14\x98\x9dP\nL%:\x05\xa6J\x906\xd0\xe1:E\xfa\xb3\xe5\xb5]\x02\xae\xb5\x06\xa0d\xe2\x93 r\xd9A\xcb\xc3\xe9k\xe7\xb4\x99]b\xcf\x0eG>~\xc7\xeem\x95\x9b \xb3\n\x8a\xcd\xd4\xc2 /\x96\x94wFJtP\xc1_\x1dn+\x1c\\\xb7\x13O\x90\x00b\xf9d\xe6\xc3b_\xf1e\xbc*\xc5 \xb8Z,\x04\xad\xa0\x86qqa\xe0\xa0oX;\xb5\xd5\xef*\xfd\xa7\x96\xdeX\x8b\xach\xbc\xd6\xb2\xb8;\x0cF\x94\xe5Cv\x12U\x19a\xcar\xb3bu>\xd3\x7f\x13s\xc8,+y}\xa4\xafg\xc9Jm\xf8M\xd9\xb9\xd7&\x9bj\x99\x93Gd\xaf\xe8L(\x1dR\x9b\x86\x9b\xfa\x1d\x0b\xb4\xe7X\xfd\x9e\x8d;A\xb6\x0d\xe6-\xf2U\x8e\xb5\xaex\xb6\xcb\x17b\x01\xbc\xa5\xebu\xd8\x83\x15\x97\xa2\xbf\xbeT\xcaZ:Z\x86\x7f:_@\xc1\x16\xad&\x08(\xc6\x80\xde\n\x0b\xaf\xb1\x1c \xf2#\xdc\xce7\xf72\x91R\xb6^\x7fF+\x0ea\xfb\xfe}\x97-\x07o\x88\xdc$L\xd4\x8fO4\xc0\xff#/\xe7\xf9,kY\x87\x1f\xe9\xf4\x19\xfcACDy^\xce\x8a\xcd|\xb2\xd1\xcd\xe4W:\x00o\xd2b\x02\x0e\x1e\xf8\x95\xf9\x824b\xc1\x8c\x94\xbd9\x9f\xe6\x9c\x9bTA\x9c\x0dj\xd6(\xe0^\x0c\xaf~<\xf2!\xa73\\\xe5\xb7eUO\xbc\xf2z4\x8e?!-\xb3k\xc3\xdeTU\xc1\x06T.C\x03\xd6\xec\x8e\xd5\xa3W]\x8d\xa7\x9e\x9e6\\>\xa0}\xd4\xcc<\x12Fz\xf87X)\xf0\xca\xaa\x9e\xb3z\xea\x96\xbb\xcc\xcb\x19{\n2\xc1\xf2\x93f\xfe\x0e\xbe>\xfe\xee/I\xad\x81O\xeb|W\xb5\xec\xfa\xe6\xfeZ/\x9f\xd7\xfc\x0f\xf5\xe4\x1e\xe9\x8f\xe2\x8f\xae\xfc\xce\xbfV-\xfb\xb1\xe3\x9a\xf0\x7f\xd5]F\xe7L\xe6C\x93geI\x80\x13\xc0\xd0\\\xfc\xbd\x83\xb8Fi\x9b\x0d\xfa\x1ehC\x1ch\xcef^\x19\x0fIM\xd8A\xcd\xb4\xe2\xbf\x07,\xb8\x81\xc1\xb7m\xd3\x8b\xb5`\xe0\xa5t\x0c\xbe\xb0?j\x95\x91\x00\x08\xa6\xcb\xd4[O:ga\x80\xc8\x82nY\xbd\xf6\xec0-\xd6\xd6\xf9\x1e\xcc\xc5\x18}E>8l\xdd\xfaa\x03\xb3e\x95\xcf\x98\x06\x95]\xd5E\xd4\xca\x95\xdf\xe8 \xfc\xfa\xea\xea\xec\xfa\xd5\xeb\xab\xf3W/\xbd\xb9}\xa6\xcf\xff\xe3\xcc\x96\x82h\xfc\xdc\xe9\x8f\x97W\xa7\xe7\xb6LG\xe3g_\xbeB>&\x12L^\xffzve~\xa1\xcbd\x84\xaf\xa0;O\xb6\xd7\xce\x18\xd8+m\x86l\xde]L\x9d\xc2\x9b=\xda[\x17\\\xa6\xb9Q\x8d'\xc9\xa1\xdbQ\x1a\xb9\xf7\xf2\xfe~=\x7f\xd93?#\xa8\x89\x86I\xde|\x05\xb7}5\xd0B\xac\xc4^\x88\x95H\xac\xc4^\x88\x95H\xac\xc4^\x88\x95\xd8\x12+\xd1,\xc4J\xd4B\xacDb%\x12+\x11\xb9K\"Vb'\xc4J\x1c\n\xb1\x12\x89\x95h\x10b%\x1a\x9f!V\"\xb1\x12-B\xacDb%\x12+\x91X\x89\x03I\xc1\x10#V\xa2\x10b%~ \xac\xc4\x01\xf6=\xd0c\x04\xab\xb7/\xe6\x96x\xf5\xa7\xbd\x98\xbb/\xfa\xdd\x04\xee2c\xdb\x83\x9b\x93\xe4\xdf&@w\xc22\x87\x91K\x9a!\xbbd\xcc+\xf1\xf0I\x9a\x1e\xf2spI\xac\xf4\x91\xc1\xeb\x0ft%\x0f\x98:r \xf8\x9a\x97$\x12\xe4_\xc2\xdf%\xbb\x13U\xc4I\x16A\x158\x1da\xc4M\x19IN\x1aA\xd5\xcew1\x16\x9eYaz\xc3N\x1e \xa3\x8f\xa0 $\xc1\x14\x92(\x12\x89\x8fF\x82\xb2<\xc6W \x89\xc9$v: \x82P\x82\xaa\x15\x8eT\x82\xaf}\x18\xe3\xc4\xa3\xc6r-\xde\xa8,|}\x18^^\xac\x96\x15\x99\xda\x0f\x99\xddN^\x0f\xab3\xdb\xe9\xe4\x88w\xdd\xa5\xb1[\xb4\xbe\xa9>\xcam'\xc4\x15A\xd1\x0b\xe5\xb6\x03\xdc\xba\xfa%\xe5\xb6\x9bl\xf3\xec\xe4\xb1\xe1VR\x0f\x92\x89\xc2\x96\x88cD\x1cK\xb3\x98\x13q\x8c\x88cf!\xe2\x98\x10\"\x8em\x0b\x11\xc7\x888f\x13\"\x8e\x11qL\x08\x11\xc7\x888F\xc41\"\x8eI!\xe2\x18\x11\xc7\x888F\xc41\x9b\x10q\x8c\x88cD\x1c#\xe2\xd8@R\x90x\x888&\x84\x88cD\x1c;h\xe2\x18\xe5\xac\x0bK\x08F9\xeb\xf6h\\\x7f\x1f\xa5\x9cu)\xacH9\xeb(g\xdd\x97\x90\xb3N\xd0\x8aU\xae:Tv\xba\xe6\xc7{[Z:w\x1a:\xfd\xe2\x03])\"\x11\xfb\xb8\x16D\"&\x121\x91\x88\xa5\x10\x89\xd83\xbc\x89Dl!\x11\xdf\xdc+\x0e\xb1q\x9a \xf6\xb0\x10b\x0f\xf7?a\x8d\xf9\xc5\xb1\x87\x87daO\x9a\xc9n\x9bH\x19%{!bp\x9a\x05\x9a\x88\xc1D\x0c6\x0b\x11\x83\x85\x101x[\x88\x18L\xc4`\x9b\x101\x98\x88\xc1B\x88\x18L\xc4`\"\x06\x131X\n\x11\x83\x89\x18L\xc4`\"\x06\xdb\x84\x88\xc1D\x0c&b0\x11\x83\x07\x92\x82\xa4I\xc4`!D\x0c\xfe\x12\x88\xc1\x07\x97\x96\x91\x88\xbf\xb1\xacJ\"\xfe\xee\xd1\xb8~\xca*\x11\x7fSX\x91\x88\xbfD\xfc\xfd\xb3\x11\x7f\xf9\xf9\x93\x95Y9c'Y\xdb\xd6\xf9\xcd\xa6e'w\xdf\x9c\xa8Et\x9e\xb5\xd9\xc9G\xf5\x0f\x17\xff\xf7T>\xf2\xcf\x88\xbc\xa3\x0ba\xd2q2\xec\x1a\xd2O\x90\x86\xeb\x93\xbe%\x89\xea\xf3\xf9\xa9>{@\xc9\\g\x0c52l\xfdO\x9f%T\xa7\xbfa\xb3\xe5_\xbe\x9dr\xcc\xf5Cm\xc5\xa7F\xe9}Q\xf3\xdd@\xef\x8eg\x8f\xe8)\xbc9\xf9\xd8\xfdY80\x9c\xd3\xb8~R\x0d\xda\xa6\x8f\xe5\xd0\x7f\xa8J\xc8\x14k\xb6\x9f\x8a\xb8^\xa5k<\x8dO\xf5=\xd05?\xd0\xc9\\W3\xe9h\xb2tX\xc5\x04\xd5\x94\xe4\xc9\xb9Us\x83\x04G\xa2\xb3t#w\xe1b\xaa\x1fZ]\xcb.\x9c\xe5\x01\x87g\xf8\xf3d\x81!\xee2q\x97\xff\\\xdce\xcb\xdeg:u\xed\xb0\x03\xda\x9aUi\x1fD\xfb\xa0\xc3\xda\x07\x8d\xb6\x08\xb6n(\xf0\x0f}&\x19-\xfe|\x8a\x943_\xd2]\x0fy\\c\xddY\xe4q\xdd\xa3q\xfd\xbeB\xf2\xb8\xa6\xb0\"y\\\xffH\x1e\xd7\xc1\xe4C\xbeX!av\x8a8\xe2w\xff\xe8|\xb4'\xcd,+O>6\x9b\xc5\"\xff\xe0:\xea\x0f,|\xc9\xe7\xef\xee\xa0?8j\x0e\x8e\xfa\xeap\xfaH\x9dN\x1fKony\xaf\xa34\xdaY\xbf\xc6\xb72\x1c^\x12\x9bdI\xd4o#\xe7\x00\xff\xac\xfa\xfb\xa1\xfb\x03\x826\xa2\xeesR\xa6\x19%\x8a1\xa37\x166\xa7\xd2p\xabeb \x8bp\x8d\xa6\xc9oE$B\xf5\xc3\xb4\x02\xdd\xbb\x87\xb11\x16\x13\x81\xf1\x17\xd4\xb6v\xd4 \xae\xb6\xb6\xa1\x87\xc1\xbc\x1f\x97K|\xdd\\\xb0~\xd7-J\x11\xa9[T\xc1\xc6EDT\xcf\x97v\xe2\xf4\xea\xea\xe2\xfc\xc77Wg\xd7W\xffx}\xe6M\xc7`~\xe9\xcdy\xc0\xd3\x82\xf9\x83~\xfa\xf2\xea\xe2\xfc\xe5\xcf\xf8\xe7\xdf\\\x9c\xe3\x1f>\x7fy\x85\x7f\xf8\xa7\x17\xafN\x03\x1e\x7f}\xf1\xca\x9a \xc3\xf0\xf8\x8f\xff\xb8\xb2\xa6\xf0\xe8\x12g\x047\x96\xcf\xa7\x03\xbd\x13\xf7\xea~\xcdF\x19\x0e\xdaA\x94\x84py7-\xdf\x81\x98V\xde\xa1L\xfa\xafyh\xc8\xe9p\x87Q\xab*v5\x98[\xc7\xe7\xd6\xbc\x81\x9bjS\xcem\xbe<\xf6a\x9d\xcb\xd5\xeaz\x9e\xb5)&\x90\xa0D\x1cW\xb9\x8e]\xce\x86\xaev\xb1w\x17E3\x8eywsvM\xa9xl2\x12s\xcew\x88'r.i\xdaz3k7\xb5\xdc\xb7\xce{\xfcu,Y\xd3T\xb3\\\x84\x95\xc8\xe8\x9a\xd2\x00\xa5HQ%\xcazG\xf7\xb8\xf9\xa7\x8b\x1a\xb9\xb0GB.\xec\xfe'\xac1\xbf8\x17\xb68*\xf0\xfd4\xcaI\xad\xdc\xd2b\xdbO\x9eh\xf2D\x1f\x96'\x1a\x87\xc8\x0f\xb7!\xdd\xf2>\xf0A\xef\x85\xf6;:\xcb\x82\xc7g!\xdc\xe2\xe3|Pu\x9bg\x85\xc1s\xde\xb0\xac\x9e-\xc5\xf0\xbc\xc9\x1a\x91RN\x84\x93\x8f\xf4\xdd0~T\xccK\xb8x\xfe\xf2RYu/\xb5$W{\x98\x1f\x93\\\xed{4\xae\xdfIL\xae\xf6\x14V$W;\xb9\xda\x85\x90\xab\x1d\xedj\xff\xe8\xa3\xd3\x0dL\xdb\x9f\xbcc\x1c\xed|f~4\x00\xd6\xf9!\xea\xb1\xb78\xb9\xdc\xc9\xe5N.w%\xe4rG\x8dtr\xb9o\xe9\"\x97\xbb\xa5\xe7\x90\xcb\x1d\xbed\x97\xbb\x875\x8er\xc4\x9b4\xf4lq\xf2\xcd\x93o\x9e|\xf3\x83\x1f\x9c^k\xe2\xad\x933\x9d\x9c\xe9\xbb\xba\x81\xc9\x99\x9e\xc2\x8a\xe4L'g\xba\x10r\xa6\xbb\x9d\xe9\x0d*\xb9\x88\xc9\x8d\xdeD\xf9\xd1\x879\xe4\xf5^\x7f\xcb\xd5kv\x9e\xffQB\xd7\x83v\xc3DU'\xbf9\xf9\xcd\xc9o\xee}\x9c\xfc\xe6\xe47\x1f \xf9\xcd\xc9o>\x15\xf2\x9b\xf7?a\x8dI~\xf3\xb1\xdf\x98\xd2\xe9\xe6s\x17$\xd8\x9d\x88@\xbe\x065\x9bU\xf5\\B\x80S\x07\xdf\xf4f\x01\xd6\x1c\xfct\xbb\x97<\xd4\xd1\xbdkW\x0f\xf7\x9a\xd5\xab\xbci\xf2\xaa\xf4\xe80WK\x8a\xb5rR\xbc\x85\x00/~$\x80\x8cg\xcf\xce./\x11`\xc4\xe8\xf1_\\\xd8\xcb\xe0\xb9\x1f\xdf\\\xd8\xd1\xa2\xc1s\xcf\xcf^\xbf\xba\x8aJL-\xfaZ1\x87\x12c?2Y\xa0G\x03\xa0\xac\x9eTkq\x85\x99\xc2\x05l0\xe9\xf8\x03\xbc\xe7=\x1d\xfe\xa3\xe39\xaa\x0b\xef\xc5\xd1lV\xb3L\xdd\xca\xc9\xeb\xc5\xcf\xfe\x8b\xae\xaa\xa8\xef\xf0\x9e\xfbt\xf8\x0f\xc3w\xe6\xcc\xf8\x1d\xb1\xe9\x93F\x95\x1e\x88Y\x95\x97\xb0d\x85\xb8\xf5\xb4\xff\x15Wa54\x9eN\xfem(\x0e?\xcet\xcdY3\xd1)f\xe2(#\xee\xd3W?\xa8\xe3\xfe\x8a\xb5\x99\xb8\xed\xa6\x99U\xbc\xd7\xc8]*\xaaDz\x04>\x9d\xfe\xc1P\xa6\x9a\xad\xaa;\xb6U\xa8\xc6P\xaaE]\xad\xb6\x8aU\xb9Z\xab\xad\xb3\xb2Y\xb0Z\x1aX\xbc?\xd49\xb8\xa7\"+\x85\xa7\xde5\x0e\xe4\xc3\xd86\xe1\xf3\xca\xd3\xf1?\x0d\xb5\x17u\xd7\x17\xf6\xb1\xf9\x11,\xf2R\xdd\xac.V\xf26\xefm\x93\x97\xf2\"E\x98\xf1}BQ\xb094m\xd6\xb2c\xb8Z\xe6\xe6\xeb\xd2\xa5\xa8\x0dAV4j7\xde\x0cTH\xe5\xda\xe7#\xfe5\x9fP\x7f\xa72g\x05\xe3\xe3\x11e 1o>\x1d\xfd\xcb`\x87l>\xd7\xc5\x14\xb3K\xa3w2b\xcd\x07Uq\x0dB*\x83\x0c&1\\\xab\xe8\xa9\xf9\xe9\xf4\x0f\xc6)\xe2\xaez\xc7\xdb\xa6a\xe5\xbc\xdf0\xa9\x01;\x18\xc1r\\\xf0W\x16\xd9\x8c\xbf\x9e\xb5\x0c\xd8\x87\xd92+o\xad\xcc\x0e\x10\xd7\xde\xe6M\xb7Y\xcbo\x97m\xe7\x81Q3-\xef\x04%\\\x9c]^]\x9c?\xbbr\xae\xbb\xaa\x15M\x9f\xc3,\x1dr\xd1\xf8\x99[\xbeG\x87\xc5e\xa4UQ0q\x8b\xfet\xd5P\xc8\xb1Q\x9dv\xd4\x0b\x14\x9a\x15\xecV\xde\xb6?\x1etj_;.2\xe2\x10(\xcb\x8a:\x04\x9a^?\xf9E\x14C-\x93t\x0c\xa4c\xa0o\x93\x8c\x19@\\N\xe1\xcd\xc5\x8b\x93\x9a5\xd5\xa6\x9e\xe9`\x8ae\xd6\xc2\xa6\xcc\x7f\xdf\xb0\xe2\x1e\xf29+\xdb|\x91\x8f\x198V\x85b\xd3\xd0\xddYm\xdf^\x89+igU\x017\x1b\xbe\xd1\xd3\x8d&\xd7\x05\xcdX\\m\x9aV\xd3\x16\xc1\xb1\xe1+X\xd6\xb4\xf6oU%\x83\xafN\xbe\x82\xd92\xab\xb3Y\xcb\xeacA\xd2\x117\x947\xecv\xc5z_\xf5\x9b\x8b\x17\x0f\x9b) 7\x16Q\xa8\xee\x9ab\xfbW[\xc3\xe5\xe9\xc2\xbe\xda-\xce-\xf9(k \xb7\xdc\xd5\xcd\xe5-/\x8a\xf5\x1a\xdf\xb7\x8feM\x84\xda\x1e6\xcb\xed\xab\\\xc6W\xd1\xaa\xccgY!\xc6\x90\xfd\xcb\x8f\xd8\xf1\xed\xf1\x117\xad\xf0\x06\x7fu\xfc\x15\x9f\xb6\xca\xaa\x15\xd3\xff\xbae\xf3\xc7S\xe7\xf0P\xceKXsc\xe73v\x04-\xcbV\x0dl\x9aM\xc6\xcd\xb1\xe6\xa7\xfc\xd5:/X\xbf=\xb8\xc9\xcb\xac\xb6\x9d\x19\x81\xef\x00\xd49@\xe3\x12\xf7\xf6O\xcb\xa9\x0er\xb1G\xda\xf0\xe9Vn\x0eyGb\x1fDS\x9f\x96\xf7\xc7\xf0\xf7\xea=\xbbc\xf5\x91s\xe7\xf0\xe6\xe2E\xa3.\x8dV7\xe2\xdb?,fP\x06o\x97m\xbb~{$\xff\xbfy{\xc4wEe\xa5~=\x12\xbdq6\xe0\x0d\x15\xf6j\xf3\xbd\xeff\xadHS\x8e\xef\xb2\xfaN\xdc\xc4/rx\xaf\x1b\xd9\xb5D\xc9\xf9vM\xdd>-\x0e)\xe2r\xeb\x062\xfb\xd6kQ\x89\xdd\xd6SG\xdb\xfe\x0b\x9c/\xfa\x1a\xf1n\xa1\xf3\x84w\x95\x16Ph\xd3lVl\xee8c\xfd\x0b_\x9b\xfe~u\xf5\x1a~>\xbb\xe2\xfb\x065\x04\xe5\x18\x13\xb7\xfd\x83\x99\x0e\xc6e\xeb:\xed\xab\xfb5\xfb\x8f\xff\xfe\x1f\xd6\x17\xba\xfb\x18K\xd5\xdf\xd42\"Zh]W\xf3\xcd\x8c\xf1\xc3\xa1X\xc2\xec\xbb\xa0\x7f\x81\xd3\xf5\xba\xc8g\x99\xb2e\xcd\xe4\x0eU\x92\x9ef\xd9\x8c\xcf-U\xf5n\xb3\xee\xc0\x97\x9b\xac1^\xe9(\xa5r\xb3\x17E'\x14e\x14\xb7\x88\xb5K\xb6\x1a\x8c\xa1\xb9\x1cD\x99\xae\x12\xff\xef\xbb*\x9f\x8fX\xf2\xdb\"\x0b(\xa6\x8f\x9a-\xaa\x9a\x1di\x05\\o\xd6\xe6jWY26\xd7\x1bm1\xe5\xd5w\x8e\x9a\x88\xba\xc8]\xa4\xdc\x00\xf31{\x0c\x8f\xde4\x0c\xeeX\xcdwa\xdcJ\xbc{\x8a\xd4x\xa2\x7ffev\xeb\xaa\xfdM\xcd\xb2w\xe2\xc4)\x15\x1f?\xb6\xf7\xa8\x97U\xcb\x9e\xca\xf3\xd2bS\xce\xe4\x08\xe3\xf5Ps\xd7lS\xd7\x82\x8c0\xa4U\xd9\xa7K\xde\x1f+\x01\xbf\xdb\xd9Tj-\xbb\xd9,\xa0f|%bG\xe2f| Y\xf3\x8f\n\xd8_l\xef\xf4\xb8\xb4\xaa\x12\xe4\nA\xd1\xe7{U\xc7\xe2\xb2}\xd9\xbbk6\xbe\x14#\xb5\x91\xcc.I#\x98\xccR\xf0Ha\x10\x12\x03\x97C\xfb\xb1}\x11\x14{\xff\x1b\xc7\xa4$\xb9\x0e|\xc3\x9d\xaf\xd6\x05[uW\xfa\xab\xabcg\xd0\xb0UV\xb6\xf9\xccr\x10\xda\x83/{*\xd8]\xd2/|:\xbaa\x92\x06\x90\xcf\x07\x1b\x9c\xad}\x8c\x06\x0fo\xaa;{\x9f\xeeo\xcfm-LzL\xc9\xde\x9e\x96\xf7o\xf5\xf6HPQ\xb3\xfa&ok>\x88\xed%4\xaa\xd2kDVT\xaa\xebAfnZ>;\x8b\x85F\x96\xf0\xc6@\xcc\x1e|[\xef\xea,]\xf3\xb5\x1e8E~#\x8a\xad\xd6\x91F\x9f&\xf9\xfc\xb0\xcef\xefN6%\xff?\xben\x9b9\xbcR\xd4Bo\xdf\xd8T\x0b\xd8\xb4rb\xd3\xd3C#\x9c\x16\xf3y.\xe7\n\xb8e%?6\x8b\xc2\xf3s\x96F<\x8d\xfaxyd\x13\x9a\xbfw\xf6!\xe3\x9d\x1f\xbey\n\xafy\xf9\xf9\xbc\xa0\xaa\x92uF\xcfKx\xf6_\xff\xabc\x99\xfc\xa9\xaa`QU\xf0\x03\x1c\x1f\x1f\xff\x1f\xd6\xc7xa\xb2\xf2\xde\xfe@V\xde\x1f\xf3b\xfcTW\xabG\x8b\xaazl\x7f\xf4\xf8\xd8\xbe\xfe\xe5\x0bx\xc4U\xbd\x11\x15\xb9\xaa\x1e\xfd\x17\xae\xeb1|t\xcc\xe1.}\xff\xe9\xb6\xdd\xb7\x1e\xdb\xfd\xb7\xec.Kf<\xf8A\xec\x0d\xf9W\x12X(o\x1e\xfdTU\xc7\xb3\"k\x1a\x8f\x81d\x11\xf9K\xb2\x8e\x83\x17\xede\xb0X\xae3\xdd_<\xa6{}\xdf.\xab\xd2a\xbb8\x7f}\xf5\xea\xe2\xb1\x0b\x0b\xea;\xaa\xfb\xc3\xf2\xd3ns~\xe71\xe7\xcf\x95\x03N\xe0\xa6|\xfa\x03\xfc\x97\xf5\xcd\xf1OU\xf5\xf1\xf8\xf8\xf8?\xed\x0fg\xe5\xfd\x11\xdf\x86\xf27\xd6r\x13\xf5KV7\xcb\xac\xe0FvW\xc4e\xc2i)\x1cE\xc8\x17\x93\x02\xbc)W}\x11D\x01\xc5\x00\x11O\xfdo?@\x99\x17\xce\x0e\xee.\x97\xa5'_ \xee\xc9\xec]7\x17w\x17\x12\xdd\xdc\xf7\xdb.\xbdz\xc8\xe8\x00\xf3\xaeW\x93\xf96\x8de\xcf\xf2\xd0\xb0\xa5:\xe1\xe7\xf7c\xf1\x03\xdf\xae>\x84l\xb0\xda\xf1\x95\x90\xf7\x04\xdb\xda {\x88\xf9c\xdd\xd2R\x16\xf7\xfa\\\xb9\xe5,\xe8\xb6\xc9\x90-Zfr\x0eJ\x11~\x8c\x87'\x0f\xcd\x9fRk\xa2.\xb28\xed\x02S=\xfa\xabEU\x1d\xdfd\xb5\xa8\xec\x87\x93\xfb\xe3\x7f~%\xad(\xce^F}\xf6\xa3\xa8(\xeaW\\\x07_\x0e\x8d\x8f\x888;\xe3/?\xfc\xf0\xc3\x0f\xf6>\xc0\xdf\xeb}.\x99\xf6\xed\xf2m\xac\xd8\x04\xc9s\xdd\xa6a\xda\xb1z\xbb)\xb2\xda\xaco[\x0d\x7fe\xce\xfam\xcb\x11\xb0\xd5\x0d\x9b\xcf\xfb\x0d\xcc\x91\xdc\x8e\x9b\xd4e\x16\xef\xcd`K\xb1\x10\x07\xd9\xb7\xff77\xdd[\xe5L\xe8\xb6m\xc3\xc61\x0f\x105\xfd\x07\xf5\x07\xe2E^0\xfb\xba\xa1\xe7\xac\xd7\xacn\xaa\xd29l\x95'n\x91\xd7M+n\x15\x85\x1f\xe0\x1b\xbb\xe6\xee\x05\xde)\xf5\xf3\xdf\x86\xaf`\x00\xceR}%l\xf9\xd5S\xf8\xca4j\xc7f8\x96\xb5\xfc\xea\xc8\xa5O\xd4\xefe\xb6\xe2:\xffOY\x85\xff\xcb\xf9\x02\xaf\xdf\xe4\xf9\xd0J\x9e/\xd4\x81k\xdc\xd7do\xc8\x1bx\xcf\x8a\xe2\xc9\xbb\xb2z_\x8ayf\x99 pc\xd3\xb4\xd5*pp\x8d\xbb\xfc\x91\xdc\xc0O\xc6A\x1fZ\xa5\x8a\xc3;\xb0\xe5p\x95\xc9.m\xfe\xd8[1\x18u?\x97a\x7f\xc2\xfd&J.\x87r^v\xe3C\xe1dfUr\xc8\x98\xbf#\x8ap\xdc-\xce\x8f\xf8\xbc\xa6M\xb8\xe5\x1a\xd2\x1e\xd3\xff\xf8\xef\xff\xf1\xd81\x90R\xf4\xb9\xf1\x07\xdd\xddN\x98\x8a\xab\xfc\xe6\xf8\xdbo\xbem\xbert!\xf9\xff\xae\xe8\x94|8a\x8f\x03St\xa8\x7f\x0dsVV\xab\x8ep\xb8E\x1d\xd81\x1c%\x9c,Vm\xcaV@\xe3\x1fE\xc9\xd0l1\x19h\x93\xb5\xd9vd\xa8\xac\xa3z{\xc4\x1a\xeb`4\xfe\xf6\xf3>\xd4\xf4` d\x16\x1f\x88\xd3\xfb\xb1\x1d\xbd\xdf[y\x1a\x98\xca\xe6\xd2X\xe3\x85\xc7\x16\xb2\xa8\xa1Lm\xbdx \xd8l\xa5\xe1\xda\x03\x8ciA1\x8b\xc2\x0eZ^\x88dK\xcd0\x1bmQt\x01\xac\xcaWxST\xb3w\xb3e\xd6\xb9p\xc6\xb9.\x8aB\x02\x97\x07\x9f\xefBU\x8b\xe0'\x82\x9f\x08~\x12B\xf0\x93\x10\x82\x9f\xb6\x85\xe0'\x82\x9flB\xf0\x13\xc1OB\x08~\"\xf8\x89\xe0'\x82\x9f\xa4\x10\xfcD\xf0\x13\xc1O\x04?\xd9\x84\xe0'\x82\x9f\x08~\"\xf8i )\xa0\x00\x82\x9f\x84\x10\xfc\xf4g\x81\x9f\xb4\xd0\xcd\x7f#\x19U\x99n\xfeC\x19\x93n\xfe\x93Q\x81\x1dF\xb9CP`\xa7\x83R\x9cRl\xa0\xd73\x89q\xee\x01\x81\xb3\x04\xceZ\x9f$pV\x08\x81\xb3\xdbB\xe0,\x81\xb36!p\x96\xc0Y!\x04\xce\x128K\xe0,\x81\xb3R\x08\x9c%p\x96\xc0Y\x02gmB\xe0,\x81\xb3\x04\xce\x128;\x90\x14@\x19\x81\xb3B\x08\x9c\xfd\xb3\x80\xb3\xae\xd8\xc0\xa6\xcd\xda\xcd\xf0`\xe4\x82,_ixV\xbe\xc5[a\x91\x17\xad\xb8\xb1S\x81\xb3\xe3\xc2<\x81_N/\xfe\xfd\xec\xe2\xfa\xf2\xea\xf4\xea\xcd\xe4\xdaW\xebO\xf0\x04\xde\x94\xa2\x0f\x9f\x9c\x97\xf2\xf0,a,\xb8\x9c\x96\xd6\xf0\x8d\xd7\x17\xaf^\xbf\xba\xdc\xfe\x80\xfe;<\x81\xf32o\xf3\xac\xe0\xf3\xe9\"\xbfUF\x875\xab\xf3j~\x04\x9b\xf5\\\xde{(\xfdsG\xd0V\xefX\xa9/n\x15\x0e\xa1\x9a\xf1\xc3\xde\xb1\xbb ?\x9d\xbf<}q\xfe\xffm\x97\xa4\xfb\x01\x9e\xc0\xb3Q\x11\xba{?\x8f\xa0f\xd9\\\xe6fU\x1f\x16\x1f\xdd\xbaos\xfa\xd1\xd3gW\xe7\xbf\x9eM\xbf(\xff\nO\xe0R\xea\xca\x1b]\x87#\xa87\x05\x93\x0e\xc9\\\x80\xed\xb3\xa9oa\xfa\x89g\xa7/\x9f\x9d\xbdx\xb1]\xaf\xee\x07\xfe\x8al0>\xff\xdc0V\xf6W\x8d\x1e\xc1\x9a\x95\x02\x1d\x98\xb3\xa6\xad\xab{\xf7\xc7\x9e\x9f]^]\xbc\xfa\xc7\xf6\xc7\xba\x1f\xfa\x8f)C\x899O\xccK\xac\x84\x9a\xcd2\xf9Y}\x7fj\xc3\x9b\xbd\xc9\xe7\xac\x16\xb9ZE\x19\xf8\xccU\xce\xa1\xac`\xb1\xa9\xb7n\x80\xcd\xd4\x99_u\x88iX\xec\xef*\x96UK\x1f\x17\xbb\xc8\x8a\xc6\x13\x18\x0b\xc6\xdb\xb7\x1d\xe3\xc6\xf9\x9c\xee\xe3\xce\x87\xba\xee\xe7|Jv\x19\xe7#]{;\x9f\xea\x1aj4\xc9\xa8\xcb\xaf\xfd\xd5\xd4\x13U\xcf\x089~\xc7\xee\x91\x13\x96\"Udj\xafW\x8b\xd0a\xe1\xfdV8\xbf\n\xdc\xed\x18\x18\xc2g};q\xee\x8a\x06\xd6\xf7\xbd\xbaX\x15\xaf\xf8\xce\xbc*\x85S\xabZ,\x1a\xd6BU\xc3\xb8\xb80\xc0\xdc\x1a\xd6&\xefLF\x0f\xa6\xc1\x88\xb2|6;N\xbc\x87\xaa2\xc2\x94\xe5f\xc5\xea|\xa6\xff&\xb6\x05\xb3\xac\xe4\xf5\x91\xee\xdb%+\xb5\xe17e\xe71\x9f,\x0d\xe7B[\xc1\x9a\xa67\xa1\xf41\xcb\xabu\xdf\xb1@{\x8e\xd5\xef\xd9\xb8\x13\x8e\x8a\xc1\xbcE\xbe\xca\xb1\xd6\x15\xcfjv\x87\x8d\xba\"\xd1\x94a\x0fV\\\x90M1aYH\xdf\xe9\xf0O\xe7\x0b(\xd8\xa2\xd5T\x1f\xc5\xfd\xd1\xa7[\x01\x04\xc9\x01\"?\xc2\xed|s\x0f,\x9b-![o\xa5\x01\xf8\x84V\x1c\x12p\xfa\xf7]\xb6\x1c\xbc\xc1-*zh%\x12\x14\x00\x88\xfb\x9c\xe7\xf9,kY\x07 +\x0b\x8a\x07UG\x1a\xaa\xcb\xcbY\xb1\x99O\xce\xae\x99\xfcJ\x87\xc9OZL0<\x06P\x11_\xc3\x07|\xb6\xc9\xe4\xf2\xe6|zg\xfe\xa4\n\xe2\xb8_\xb3FQq\xc4\xf0\xea\xc7#\x1fr\xc7j4\xe5\xb7eUO\x806=\x1a\xc7\x9f\x90\x96\xd9\xb5ao\xaa\xaa`\xa3\xcb\x9f\xbb\xc9g\xf2\x8b\xa1ikv\xc7\xea\x91RW\xb3\xaa\xa7\xa7M\x9a\x0f\xa8]53\x8f\x91\x91\x1e\xfe\x0d\xb5\xfd\xa8\xea9\xab\xa7>\xf8\xcb\xbc\x9c\xb1\xa70\xab\x9aU\xd5\xe6sd\x8e\x7f\xe03k\xd1]Y~s\xaf\xee.\x90XF\xcd\x1a\xbd\xb36\xa4\xf8\x7f\xa0\xabz\xd0\x892lT\xac(rh\xebdTy\xc1D\x0c\x1a\x97\x9cK\x85cR\xc5\xf0\xa8\xdc|\xa9(\xb6\x94\xf8\x84E\xa1\x97+\x95\x80)\x15\xc9\x93\xb2\xb2Kp,\xa9\x9d8RQ\x0c)~p\xb1Y\x11\xc7\x8f\x8aaG\xb98\x0b(nTbf\x14\x8a\x17\x95\x90\x15\xe5\xe5D%bD\xed\xc2\x87\nfC%\xe0B%fByxP\xc9YP\xfb\xe1@%g@\xe1\xf9Oq\xec'\x87\xd1}\xdc\xa7d\xcc'\x1c\xef\xc9\xe0x\xb5\xcf\xaf\x899O>\xc6\xd3\x8e|'\x07\xdb\xc9\xbb=\xf12\x9dp\xfb\x97\xb4,'\x1f\xc7\xc9_\xa68~\x93\x9e\xd9\x0d\n}\xec\xa6\x84\xdc\xa6\x1d\x98Mf>\xa2\x8b\xd7\x94\x96\xd5\xe4\xe64\xa5`4\xa1(9\x1e6\x13\x9a\xcbd\xa7\x1d\x84\xf3\x98\xec\xba\x8c\x10_\x12\x06S\x88\xb1\xb0\xec%\xbfM\xd0\xcc\xa5\x08\xde\x92\x19\x0eM\xc4YB1\x96\xfc|%\x0c[\xc9i\xc5P\xa6\x12\x96\xa7dc)%\xe0(\x050\x94\xe2\xf9I\x0e\x16\x10\x96\x9b\x94\x98\x99\xe4(\x91\xb1\xa7Fq\x92\xb4\x87\xd6\xa0\xcf\xc2HJ\xccG\xb2\xb3\x91b\xb9H\xc2#`*\xb8\x99\x89\x94\x96\x87d;\xf8y9H6\x92\x84\x8d\x7f\x94\x96}\x14\xcf=\xb2\xf0\x8c\xa2XF^FQ\x18\x9f\x08\xcd&\n\xe4\x12\x850\x89\xac<\"{i\xb0|\x0e\x1c\x87(\x90A\x14\xc0\x1f2V--w\xc86(v\xe0\x0d\x19\xfd\x14V\xd6P\x1cg\xc8\xc5\x0fJ\xcf\x0e\xda\xbd'\xa1\x99AX^\xd0x\x89DD\xa2K\x00\x00\x15\x85\xae\xe2\xce\x7f\x99^\x82\x0c\xdd\x92A\x11\xe8\x14\x81N\x11\xe8R(\x02\x9d\"\xd0{\x89\xc1X\xac\xca(\x02}[\x12\xe1-\xbb!.\x11\x98K\x12\xd4%9\xee\xe2E^\xf6\x80\xbd\xec\x0b}\xd9\x03\xfe\x12\x82\xc0\xc4b0\xce9\xdc\x87\xc2$\xc4a\xb0HL \x16\x93\x1c\x8d\xf1\xe31;#2\x14\x81\xee-Y\x1cBcTE\x11\xe81X\x8d\x0f\xadI\x83\xd7 A\x08/f\x13\x80\xdax#\x81\x03\x91\x1b\x8a@\xa7\x08t\x0c\xa6\xe3\xb5j(\xae\x83Gv(\x02}\"\x89q\x1e\x8a@\x1fJ,\xeacTF\x11\xe8\x01\x18\xd0.(\x90Q\x1dE\xa0\x1b_@\xe1F\x14\x81\x9e\x0eE\xa2\x08\xf4\x9d1\xa64}\x0e\x8d3\xe1\x91&\\\x04z>\x9c\xb0G\x07Hq\"\x95\x81)\xfc\xb4\xa3\x82Ud\xf7[M!\xa6=]Pk\x89\xbd\xe1\xc5\xac\xde\xe3cof\x15\x9f4\xab\x92\xef\xbcd\xf4M6\x13q^\xea\x95Q\xc4\xcd\x99P\xfe@W\xe2@#n\xa4 \x0e\x03z\x12]#\xda\xe9\x92\xadxKD\xbe\x8eqy<\xab\xf2A\x9a{\x95O@\xba+\xc6w/\xf3 3+U\x81l\xa7\xf3\x97\xaf\xae\xce\xe4\xbd\xcd\xf29\xb5P\xe7\xc2\x97r^\xb6j\n\xeb\xfcW\xc3y\xcc\xa8Pn\xeb\xcc\x1fk\xf2\xdb2k75k\xba\xe1\xc47\xb1\xb7\xd5m%&\x8d\xf1\xda\x8f@\x93e\xe7F\xa1\xc9\xa6\xd7\x15\xb6,\xb5\x10\xa6L\x98\xb2\xd7\xa1\x8a\x19\xa0@\x982a\xca\xd6' S\x16B\x98\xf2\xb6\x10\xa6L\x98\xb2M\x08S&LY\x08a\xca\x84)\x13\xa6L\x98\xb2\x14\xc2\x94 S&L\x990e\x9b\x10\xa6L\x982a\xca\x84)\x0f$\x05\xbeG\x98\xb2\x10\xc2\x94\xbflLy\x0bO\xd6\x91\x8b\x9f\x19P\xbee\xad(\xcf\x8a\xb5\xd9\xb4\xbaiU\xcezj9\x1c\x02?\xb7\xf9\x1d+\xe5\xd3N}\xdc\xc4\x02\x86\x81M\xd6V\xab\xc7\xf6\xed3\xfb\xb0\xaeJfG\xf3\xc1\x8b\xa7\xf62@V-\x17\x92K \xb1\x8c.\xdf\xd08\xeb\xea\xbdt\x97}\xf3u\xff\xbbX\x98\xaa\xd2\xe5\x0d\x96\x00\x9c\xe3\xa0\xc5\x07t\x96\xab=\xf5M\xd6\xb0k\xd90\"\x11\xb2L\x80\xcb\xff\x9b\xf1\x8dv\xdf\x1eN}b\xd2xS\xe6\xed\xc3F\xb5\x9b\xf3\xf1oTW\xf8\x01\xbe\xf9\xfa\xff\xef\xea\xd6\x17\xc5\xfd\xb6\x00\xde4QbP\xfej!\xfbA\x8f \xc9\xdb\x0c\x1c\x08 \x0c\xcb\xce\x15<\xe4\n\x1ez|\xcb0l\xb1\x1f\xe0{\xbe_\xd84O\xe1\x1b\xe0o\xcbZ}\xef\xed\x93Y\x91g\x8dk\x88\xfa'\n)\xce\xe9B\nr0\xfbn\xd2\x97\xa2\n.\xf3\xbe\x17y#\x0c\xa7\x86\xb1\xfeM\xaf\x9f\xfe\xae\xe3\x1a\xe6\xae$\xfeC\xe9\x9bp0~2^\xa6\xcd\xac\x9dzc3O\xa1F\xd4\x9b\x8d\xea\x17j\xa8\xe43I\xd31\xb7\xaa\xcf|\x83\x85a:\x0bj3\x0e\x07\x92\xcc\xce\xec*\xec\xac2B3|LD\xad\\\xd8I\x8b\x7f`Z\x03\xf179\x10\x1f\xf5H;\xff\xa5\xab\x93E\x9b\x18\xc9\x83\xf1\xf4\xb5q\xd0\xcc\xf3f]d\xf7)\xeae\xedI\xea\x1b]>x\xb5BmnoY\xd3\x8a{A\xc4<\xc9\xfbSWE\xb7*\x99o|V\xe4\xdcN\xa6j\x89\x9di\x82:=4\xe7(\x7f\xe8\xea\xa8\x0f\xc5\xa2\xab\x19h\xad\xe6It \xec\xdf\xb1\x12\x1e\xb1\xdb\xa7\xf0L(\x85S>\xa1\x9946\xf7\xab\x9bj\xbf\x19\xb1\xe5'\xfa\xeb\x10\xc4\xdd;\xf2o\x9a6\xd1,\xf9I\xb0*\x81}\xd0\x08+/\xbdE\xe1\xe9\xd5\xab_\x1e+6\xcd\xcc\xe6\xa3\x00\xdd\x87\x1b\xe1e\x92\x1fWM\xebH\x17\xeaK\x17\xafeS\xe7{5\xda\x9b\x8bs\x01w\xc3\xbc\x9am\x04\x8b\xe7Q\xc5Wx\xa8\x16\x8b'\xb3e\x96\x97\x8f\xd5M\x1d\xca\xd9b\xd13p\xd5\xe4\xa5\xdc\xff\xe4Uy\xdc\xdd\xfc\x14h\x8a\xef\xcd\xa6\xb8^f\xcdr\xdf\xf6\xf8{\xd6,\xe5\xca\xd5,\xb3o\xff\xfa=\xf0\x8f\nWYo\xa4u\xc5w\x81\xc2\x85\xfa\xe6\xe2\xdc\xb6\x82\x9f\xf39Z\x80\xb8m\x05w\xac\xce\x17\xf7\xc2\x986S\x88\xae\xa3?1\xcf\xe7\xe5\xc3V\x01\xf6 \x0d\xe9\x9f\xe7\xf4\xd1\x0e\xb1T\x1a\xde\xce\xec\xab\xa0m\xf5\x13G\xdc\xd1\xa92\x9e\xe6i:\x9c\x12\xbf\x93\xf8\x9d\xdb\x82\x9b\x10\x88\xdfI\xfcN\xdb\x93\xc4\xef\x14B\xfc\xcem!~'\xf1;mB\xfcN\xe2w\n!~'\xf1;\x89\xdfI\xfcN)\xc4\xef$~'\xf1;\x89\xdfi\x13\xe2w\x12\xbf\x93\xf8\x9d\xc4\xef\x1cH\n\xae\x1d\xf1;\x85\x10\xbf\xf3K\xe0wN\xa9$\x9f\x96\xab\xc9\x1b:/o\xf1\xd9\x7f\xb2\xa2\xd0t\xcc\x06\xd4\xdb\xa2\xa3H\xfe\x9b\xca\x08$r\x04)%#\xba\xe6\xdf\xe5\x1b\x0ft\xc5\x0e\x94\xa2y\x93\x15\xdcP\x07\x82,)\xa2\xef\x0e^\x15#oX\x01\x99\x1d\x8dX\x13\x86D\xd5E\xdb2\x8b?U4\xaf\xbb8.\xfe\x97\x87\xfb\xe5\xb1\x96\x14\x9f\xcd\xa4x \xa3(\xeb\x817\xb1\x92\x14\x94*\x8c\x8fHJ`\xaa%o\xe1]\xae\xc6\xc8TL\x0e}j\xe1p%d\x92\x12\x96\x96\xa9\x97\x91!eR\xb2!+h\x9e/\x16\xacfe\xab~\x13\xde\xe5a\xe76:0\xddl\xb8\x1f\xd5\xeb]\xa3t\xd4\xf4n\x14\xf1\xb6\xd0_Ygy-=\xaa\x16g5\x9fVsE<\xdc\x9aT\xb3m\x1e?\x88\xb5\xe4V\xb5\xfbvg\x1c\x99\xa4\x7fpX^\x8d_\x0d\x7f\xd6\xbcGn~\xd6\xb4\xdbvq\x8eH\xf7H,\xd9\x87\xf6\xfa\x1d\x8b\xa5\xc0y\xdd\xc1~\xee\x08\x0cJ\xa1\xe7<\xfe\x9f\n\x1d\xc9\x1a\xc5\x86y\x9d\xdd\xb2\x0be\x01\xf9\xbbE\x99\\\x0c\xb9\x1a\xae\x96\x1b\x92\xc1\xaajZ`\x02s\x10@\xc51\x9c\xb7\x83\xcd\xd9\xba\xbd\x87\xdc\x06\xbf\xb7KV3\x01H\x95\x15\xac\xaa\x9ai\x00\xca\xd8A\xab6\x8b%\xadicn\xec,p\x1f\x1bT|^XQ\xfcG\xb9Y\xddH\xf7\xb9\xc6\xcc\x06\x00\x8d\xad\xbeCC\x8b>\x7f-\x94\xd9\xe6\x88\xf7Y\x03\x0dk\x8f o\x1b\x0d\x056\xb0)e\xa7\x9eKt\xe4}\xde\x8c\xfb\x07\"}\x9b\xda\x8b\xc4\x13{d\xec\xc9\xdf\xc5B\xd9P\x027\"\xf8x\x97\x7f\xec\xe2O\x04\x1f\"\xf8\x98\x85\x08>B\x88\xe0\xb3-D\xf0!\x82\x8fM\x88\xe0C\x04\x1f!D\xf0!\x82\x0f\x11|\x88\xe0#\x85\x08>D\xf0!\x82\x0f\x11|lB\x04\x1f\"\xf8\x10\xc1\x87\x08>\x03IA\xb6 \x82\x8f\x10\"\xf8| \x04\x9f\xc3\xb8\x14\xac/O\x0f\xfc\x1e\xbfc\xf7\xb6\xb2M\xa0T\x85\x9dfjJ\xafY\xbb\xa9K\x99'D\xc2y\x8a\x8a\xd3\x01\xad\xc25u;\xf1\xe1\x08\xe4T\x13\x86\\\xe0\xe9+\xbe\x00W\xa58\xbbV\x8bE\xc3Zn\xa0qqa\xe0Zo\xd8\x08\xb5\xe6\xb6\xfa]\x11\x9f\xb4\xf4\xc6ZdE\xe3\xb5\x96\xc5Qa0\xa2,\x9f\xcd\x8e\x13'\x81\xaa\x8c0e\xb9Y\xb1:\x9f\xe9\xbf\xc9\x9c\x16Y\xc9\xeb#\xbd4KVj\xc3o\xca\xce16\xd9\x0e\x9f\x0bm\x05\xefC\x9d \xa5+i\xd3pS\xbfc\x81\xf6\x1c\xab\xdf\xb3q'P\xb4\xc1\xbcE\xbe\xca\xb1\xd6\x15\xcf\xf6\xe9V\xcc\x08\xb5t\x9a\x0e{\xb0B}7\xc5\x04L\x95.\x92\xe1\x9f\xce\x17P\xb0E\xab\x11}\x05\xf1\xebM\xac\xf0\xf7\xca\x01\"?\xc2\xed|s\x0f,\x9b-![\xaf?\xa3\x15\x878{\xff\xbe\xcb\x96\x837\xb8EE\x0f\xad\xc4D\x032\xe9\x9a\xcc6\xd4!?\xca\x82\xe2A\xd5\x91\x86\xea\xf2rVl\xe6\x93-j&\xbf\xd2'\xef\x19\xb7\x98\x00r\x07\x1ea\xbe\x94\x0ch+\x93\xc9\xe5\xcdy3i\xadI\x15\xc4\xae\xbef\x8dB\xdc\xc5\xf0\xea\xc7#\x1fr\xc7j4\xe5\xb7eUO\xfc\xe9z4\x8e?!-\xb3k\xc3\xdeTU\xc1F\x0c\xaen\xf2\x99\xfcbh\xda\x9a\xdd\xb1z\xa4\xd4\xd5\xac\xea\xe9i\x93\xe6\x03\x06G\xcd\xcccd\xa4\x87\x7f\x83\x95\x02\x83\x14\xc9\xf7\xa6\xae6o:\xa1}\xda)\x90\x04[\xb26k\x1a\xd6J\x17\xa6\x8f\x0b\xfb\x92\xb5\xa7\xfc\xe9_\xc5\xd3\xcaH\x0d\x94\xac\x05\xa1EyBEo\x1d\xad\xe2#\"\xecX\xcb\x03]\xff\x03\xe5\xc3\x96\xac\xbd\x16\x95\xbb\x96\x95;\x0cB\xc6\xba\xceg\x1e(\xe2@R\x8e\xfa\xd9\xa3\x085\x18\xf0\x01\xc2y\xa3\x08vhZn(\x92\x19\x1a\xcb\x0bU\x146\xd19\xf4^`V\xf1\xa2\xb5L\xad\xce\x1a\x0d\xe2=\xfaa\x03wU\xb1Y\x99\xcb+\x7fJ\x00w98w~\xd6\x9d.\x87\xaeN\xbfD\x8a\xc6m\xc6\x87\x06\xb9$\xbfg\xb5\xbd \xd6\x9bz\xb6\xcc:\xfcs\xc9\xa4\xb9\x8c\xcfo\xd6\xf3\xace\xf3\xeb\x9b\xa2\x9a\xbd\xbb^\xb2\xfcv\x19{\xc1,\x04\x1a\xc4\xf4im\x03\xf17P\x7f\xab\x16\xd2\xdd&_0\xcd4R\xe1h\xd6\x1d\x8c\x11i\xb8\x87[\xb3\xf8\xf64'\xf58&{CnP\x04\x17q\xbc\x1c(vd8#q\xb26\x11%\x91(\x89\xbe\xf1\x88]U\x88\x92H\x94D\xb3\x10%Q\x08Q\x12\xb7\x85(\x89DI\xb4 Q\x12\x89\x92(\x84(\x89DI$J\"Q\x12\xa5\x10%\x91(\x89DI$J\xa2M\x88\x92H\x94D\xa2$\x12%q )\xe8aDI\x14B\x94\xc4/\x9b\x92\xf8\xd9\xef\x94534De\x1a;'\xe3\xb5\xf8\xbd\xcb\xa7#\x00\xcd\xae\xfe|\xe2\xfepr\x93\x95\xef`U\xcd7Ew\x8c6\\$+\x15=\xd0\xf59P:\xc6\xd0\x1cC\x99\xe4\xff\x116\x19\xe6D\x1a\xdbD4\xeb\xc8 \xbdX\x0b\x05^Tj\x95}\x90\x9c\xabk~4/v\xcd\xfc\xb3C\xb2\x9a\xe7|\xde\x9a\xf1\x13\xfaSx]\xb3\x85\xbc\"\x94o\xa2\xde\xf2B\xca\xe2\xbd\x85\xbclZ\x96\xcd\x8f\xe1\x97\xecC\xbe\xda\xd8\xeeuT\xd4\x87j\x01\xf2E\xe1?-\x8a\xea}\x87\x1f+\xe7\xa7\xbc\xc0sn\xdb\x08\xb02\xbb)\xd8\xf5mu\xc7j\xd1\xcf]\x06\xdaf<\xf5b\xe3\x88\x0d\x05\xe3\x1d\x82\xc1\xd5\x81\xf9\x02\xfa\x82Ig\xb4\xd8\x80\xd4U!\xfa\x8c\xach\x03\xb9\xf5\xd65\xe9\xdf6\xedO6e\xcdx\x83\xcfZ6\x97\xb7\x9f^\xd7\xec\x96}\x88\xec \xbe\xd6\xcf\xf4\xe6\x0e\xd8\x07\xbe~5\xe2jL}\xf5YV\xe4\xf3\xace#\xd0\xde\xe50\x02X\xd4\xd5\nJn\xf3B\xdf\xd1\xaa\x12f5\xf0\xa87\x9am\xc9\xe8\x9e\xcdj&w\xf3\xcdF\x0c/\xe1\xb9*\xb2\x967\xa7\xc8U\xa6\x0b\x97W6w\xb3,m_-\xd3\x19\xaf\xef\xe1{\xb2\xefJ\x8e\x96\xe0qaQ\xb75Z\x10\xac 9[\xa3\x128)\x82\x84Z(.^?\x9b\xe8#\xaa\x04Q%|8\x01n2%\xaa\x04Q%lO\x12UB\x08Q%\xb6\x85\xa8\x12D\x95\xb0 Q%\x88*!\x84\xa8\x12D\x95 \xaa\x04Q%\xa4\x10U\x82\xa8\x12D\x95 \xaa\x84M\x88*AT \xa2J\x10Ub )`k\xa2J\x08!\xaa\xc4\x9f\x85*\x11\x98.B\xc2\\\xbe4\x11\xfd\x95i\n\x16\xab\x16\x12\xdd\xab\xca\x1e\x18S\x97\xfe\xa8wG|\x84K\xf1\x96\xfa\xe5`\x99\x08\xb6\xc4\x06VU\xe0\x85j\x1c\x19\x17<\x0e\nW\x96\x05\xe7\xab~\xc7@\xca\x9c\nQ\xd9\x14\xecs\x94=\x8fBX\x06\x05\x04\xde*\xfb$\no5\xbd\xae.\xcc\x91Z\x08q%\xc4\xd5\xebn\xf4\x0fL)\x84\xb8\x12\xe2j\x16B\\\x85\x10\xe2\xba-\x84\xb8\x12\xe2j\x13B\\ q\x15B\x88+!\xae\x84\xb8\x12\xe2*\x85\x10WB\\ q%\xc4\xd5&\x84\xb8\x12\xe2J\x88+!\xae\x03I\x81~\x11\xe2*\x84\x10\xd7?\x0b\xe2\xfa\x07\x0dN\x1f\x03\xc2\xac\xcd\xe6Y\x9b\x9d\xdc}s\xa2p\\\xf1\xcf\x8f\xfa\x87k^^\x17D<\xb8c\xe7T*x\x9e\xb5\x19\x7fTv5\xa5\x15\xb82\xc8\x9a\xa6\x9a\xe5]`\xb1\xd8\xb2\xc9\xefh\xbb\xf4\xd3\xee3\xed\x1e:R\x91\xa6\xb3\x8a\x8f\xc5\xb9\xf4\xf2\xa9Ci\x1f\xa4;\x8e\x83WZ\x07%R\x8f\x1d,\x08mq\xb18\x9d+\xa3\x82^\xf5\xc6\x16\x06\xd5\xfdJ\xc5\xec\xcaC\xb4\xc5\xd6[\xca\xb6\xdc\x1c\x03K\xa2\xa0S\x05\x96n7\x80\x96\x8b\xd7\xcf\x08=%\xf4\xd4\xe3:\xdc\x83\xe3\xd15m\x8ff=[/\x9c\xdc*\xc6\xc7\xddtd\xf1\x85\xb4\xa8\xaaw\xb0Y\x8f\x07Y\xe0\xa4\x06\xbb/\x03`\xb6B\xf8\xea0\x9f\xd7'\x1f\xf9\xff6\xae\xe5\xe0g\xd6\xfex\x7f:\x9f\xf3\x81\xd9\xd69\xbb\x93\x19\xfc\xa5un\xf3;V\n\x0f\x85\xb2\xd3#\xd6<6N\xe0\x9d\x9a\x07\xba\xc6\x07:m\x8b\x06<\x90\xd1&\xcar\x9d\xcf\xd3\x8e\x97\xa9\xf8R*\x00\xbc\x11|\x058\x7f\xae\x16\x83\xbc\x91E;\x068\xef\xf9@\xcd\xfc\xdd\xf1\xa9\xec\x06VM|\xd2\xac\x17\xd9L.+\xfcp\xfe~\xc9\xea\xee\xc2A&\x87M\xc7\x0b\xcaKx&\xeej2\x9bG\x81\x1d\xa2\x93\x1d\x80\x99\x84\x7f^\x8c\xffQ\xc9\xd4\x1dz\xc33\xe9\xe8w\x17\\\\\xcbm\x16\xd36\xd6X(\xdfl \xe7\x83n\n\xa3\x8e\xea}9\x9a\x15\xc7\xe2\xea\xd1R\xac\xfdZ\x8a\xa7wK\xf1\xf5q)\xaa\xfd]\x8f\xa0\xdaQ=(\x9b\xaa\xdb\x99/F\x1b\xd7G\x12F\xcd\x8d J\xb4\xd4Ua]\xa6\xa4\xf8\xfb\x83\x94L\xe8\xeaG\x8e.F\xd7\x84#\xf2\x84\x1b\xab\x06i\xd0\x99\x1c*\x1b\x17\xee\x0d!\x06c\xe5\xc6y\x9d\x14\x88%\xe5\xf5\xe9\xc5\xd5?\xae\xaf\xfe\xf1\xfa\xec\xfa\xcd\xcb\xcb\xd7g\xcf\xce\x7f:?{\x1e\xf2\xda\xab\x8b\xf3\x9f\xcf_\x9e^\xbd\xba\x08y\xeb\xf2\xec\xe2\xd7\xf3ggA\xef\x9c\xbf\xfc\xf5\xec2\xf0;\xcf\xde\\^\xbdz~~\xfa2\xe4\xa5W\xbf\xbd\x0c+\xd9\xe9O?\x9d\xbf8?\xbd:\x0by\xe9\xd5//\xcf\x7f|s\x19\xf2\xca\xeb\x8bW\xbf\x9e\xbd<}\xf9,\xe8C\xcf^\xbd\xbc\xbax\xf5\xe2EX\x9d~=}q\xfe\xdc\xdb\xac\xfa4\x10\xd3\x910\x98m/\xb6\xbe\x1a\xf5iP$Xy<\x99U\xa5\xf4\xadx\xde\xb1u\xfc\xa7\xe6?\xabo\xc8\xeb\x9b\xaa:\x17\x17):\xa8S\xa6\x8f\xe8q\xf2\xd4\xf4\xc7\x1e\xfe\x9d\xb3\x9bV\xd0\x9a\xf2\x99\xf0>j\xac6\xe8[z|=5\xfdQTF\x82\xbd\xf9\x0c\xf2\xf2\x8e5\xa1u\xe9\xc6\xe2S\xe3_u\x93\x94m\xde\xde\xcb\x05\xb6\xab\x9f\xf0\x85\xcd\xf3\xacT\x95T\x17a \xd3\x86UR\x8c\xed\xa7[\x7f\x19d&\x133\xfa:\xab% &+\xe5\x92\xabW\x1c\xbe~\x06}\xb0\x9b\x1b\x9e\x1a\xff*\xed*?'\xdd-%d\x8bE^\xe4Y\xcb \xbb\xad\x99\xd8&\x04}R\xcd,O\x0d\x7f\x93\x9f\x13{\x95\xac\xe8X\x08\xf2\xf3\xdd\x9eF\xe4`\xe3\x15_\x95\xf9\xcd\xa6\x01\x91\xd1p\x1cA\x80+H?_=5\xff\x19\xd4}\xa80\xbe\xe8\xb5k\x80\xce\xe7:\xb8\x8aM\xac\xf3\x82\x84\x00\xcd*\xabU\x91\xb3Y\x0b\xd9,x\x10\xf7s\xe3S\xf3\x9f\xc7\xbd\xb2\xc7\"\xa4\x8dzr\x8e\x1a\xe5j\x1b\x02\x8fr\x06\xac\xacZ\x07%\xc8T\x9cn\xd2}j\xfc\xab\xa90:\xc1\\\xa3OnbLt%q|^\x13*1;4W\xea?-\x984\x81Z\xd4N\xeb\xfd\x92)\x86\x95n\xf2\x87M\x1fM\xc0\xab\xab\x0bi\xd5\x86\xd9\xb3\x9d\xc2\xeb\xc1x\xd6{H>\xdcN\xf2\x12\xf4\x99W\xec\xe9z\xef\xa7C\x9f\xf2\x8b\xea\x8egy\x12\xbb\xbe]-Y#Rf\xf2\x1du\xdf\xe5\xa1\xad\xd6P\xb0;V\xa8M\xbf\x9e\x82j6\xab\xea\xb9}\xda\x93\xbb\xd0\xe3\xa9b\xc1\x11\xe5\xb6\x15\x87\xfb.K \x1f\xf5VU\xabj\x9e/\x1c\xd4a\x81\x04\xf2\xd3\xcc`\xe7\xab\x8f\x91\xf2\xeb\xe3S`^\xc2\xa6t\x8dQaY]\xe2\"\x17.Q\xc5smd\nB\x0b\xfbMz\x84\x847a\xcf\x87\xa34q\x04\x9dY\xf4\x91\x8fWVrc7\xed\xb2\xaa\x05\x1d\xac\xadxc\xb3\xdcA\x8d\xab\x16\x8b'r\xca1:\xef\x07\x07{\xa3\n\xe1\xbb\xbb\x16\xfd\xeb\xdas`KY\xfb~\x10\x8e\x17\x1d\xde\xce\x12\x9b6U\xc4\xaaOw\xb9\xcb6+\xe7Y=\x1f.\x14j\xddj\x04&8\x8e\x86k\xec\x1d{\xe4\xe9\xeb\x0fz\xa2l\xa2o\xf3\xa9\xa4m\xeb\xfcf#r{\xde\x0bW\xa1U\xdd\x0dSd\\A\xc4\x10(\xa6\x9c\xc3\xf5\xa2\xc7{\xf9\x8c)\x0e\xec\xe4\xa2\xef^\x94\x13\xe5Z\xcc\x94\xd7uU\x14\x9b\xb5\xbb\xb9\xdcs1n\xc6\xc6\xb6\xeaoj2\xcf\x8a\xa2\x1b\xc2#\x87\x86\xa2\xf96\xddP\x16s\x92\xcbhz*\x1c\xa9y\xd8\xe8 QB\x9a\xf6V\x94\xcdT4\x95\xca\x85+6\x1b|\x1a\xd5\xab\xca\x0f\xe2NrY8\xa53+\xed3\xbf*\xb7\xae],\x11\xf5R|\xaf\x0f\xf2\xab\xab\xaa\x05\x916\x98\x95\xca\x8d\xc6\x17\x97\xa2`3M\xb9p\xcd\xf9\xbc\xe0\xa2_U%\xe3\xfb\xa2UU3{\x11G\x05\x94\x9e\xd1!'\xf6^\xff\xad\xbb\xdbw\x00N\xf1\xf6[T\x9br+\xeb\xaen\xd0\x03\xf1\xb1\xca\xd2\xec\xd9}\xf8i]\x95\x98~\x05\x82E%\xfc\xba\xf9\\\xef\x16\xba\xdd\xb1\xc1\x81\xf9>\xeb\xb6\xdfV\x85*\x03\xb1\x1c~\xd2\xb0\xe6\xc9I\xf5\xb8=\xaf\xbe\xe4\x9at=E\xaeI\xb3+&\xe4-rM\x92k\x12;\xdbJ!\xd7\xe4\xd6\x1f\xc95I\xaeI\xd3'\xc95\x89.!\xb9&\xc95\xb9/\xd7\xa4\xbfd\xdd\x01^\xb1\x1b\x98\xd8/\xca\xe4\x16m\xae\xcf\x87\xdc\x1e|\x88\xb8\x9c3\xce\xa2\x08J\x97\xad\x90\xfe\xfd\xa4\xbf\x1e2CG\xd5\x1bo\xe8\x17S\xc7y\xf6\x81\xcd6\xe2T\xa4\xb6\xc6v\x0er{\xbf\xceg\"+\x83\x885\xe3\xda\x8d\xcf*E;T-\xe1\x99Po\xf8\xc5\x04+\x83+D\xba\xa8\xb6\x12\xa1\x07\xb3\"ge\x7f>\x14\x8eD\xab\xaemv\xb0\xf3P\x98m\xe6\xb9\xd5\n\xd8\xf2?S\xf7\x1c\xdd\xdc\x1f\xc1f=\xef\xfe\xbb\xcdW\xaci\xb3\xd5\xba9\xd2\xd1\xf2PnV7\xac>r\xbaqjV\x08\x1dy\xb9\xa8l1V\x88\xd3&\xe6\xac\xa9\xae\xa2\xb9\xe6\x85vMf\x88\x0e\x01\x83N\xc1\xd5=\xe1\xd5w\xa9\x94cC\xb9\xe8\xd9 \x7f\x9c\xcfj\xca\x95\xc6\xca\xb6\xbe\x17\x1e\x00\xf7u9}\x1dn,\x17\xfcHA\xd6`P*\xcb\x81Y\xae\xf5\xaa\xc9EQ\xa5\xf3\xcb\xaaTu\x89\x83\xb6\xb1\x889S\x05\xf5V\xe4S\x1aZ <9\xd2\xd2j\x90\xf9Kg#R\xf72\xa0T[.]\x93\xe2\x9f\xe1A\x04\x95u\xab\xf1d&\x90\xb5\xcc\x1b\xc8\xcbY-\xf6\xab\xf6\x0b\xd3za\xd9l\xa9\x9a\xc3\xfa\x9c\x95\xf8\xddKXS\x05\xd4\xb1\xcb?\xb0\x85\x92\xb8\xfd9bX\xe5Uy\"\xeb\x06\xec\xce\xbe\x81\xf7\x97\xea\x94O\xee?\xf1\xf5\xa4\x81Y\xb6\x96\xfb\xa2R\xb6\xacHQwSmD\xf2!\xd9\xfd}\xdbt\x91\xdb\xe4\x1dS]\xb2K\x17S\xce\xf5\x88b\xf7\xd2!\xbd\xca\xe6\xa6jb\x96\x93K\xb5\xe4w\xcew\xc3\xea\x0f\xd9m\x96\x97\xbc\xc0\xdd\x9ah\xd45v\xa8\xf27\xb2r\xc6,p\xc4\xd5\xc0\xf1&B\xc7Dn\x9al\xa2\x84WVm\xb5\xd4\x06\xcc\xa8,/\xef\xaa\xe2N\xa4\n2\xfe.\x13\xff\xfd\xa6\xacV3\x01g\x95\x95D\x06.$\x94\xa0=\x82\x99\x82#\xac8p\x0fLd\xda|G\xa2Q\xb5-\xc5\xbc\xb1\xaa\xeeL\x97\xf1\x8d\xd1\x06\x0d\xfb\x8c\xf1\x06\xfd\xd7 \xc4A\x01\"\x87\x018|\x92]\xecI\x97Y\xae\xee\xdd\xbb\xd2\x0c\xc7\x00\xbf\n\xd4t\xa5\x12\xafH\x14\xc0\xaa\xce\x80\xd6\x9f\x16M\x05*x\x92o\x13\x7f\xe2\xa7V\xeb\xf6\xf6\xd3 ,\x18\xcb\xf4@\x87\xde\xcd\xebQ6E8\x86H\x86U\x9d\xb4'<\x124v>\xa3.\xf2\xa2e5\x9b\xc3\xbb\xbbu\xcd\x16\xf9\x07\xde\x89\xea\xac\xadj\xf3\xf1Y\xf9\xcb\xadf\xf1VH)\xe8\xd2\xf8\x0d'T]\x93i\xb2\xc1{p\x9ci\xfb\xf9\xad\x12\xbe\x89j\xb1P\x9e\x00a\xa1>\x7f\x8b\x7f\x07\x90hS\x8c\x80_\x10\xdd\x07P\xe6\x14O\x8d\xf7@[\xce\x99>\xdf\x94\xabk@\xdf8\xd6g\x96Y\xb3LW-^n\xaeQ\x85\xee\xf7T\x0f\xddG\x9c\x90\x8ckR\x82\xe0\xb2\xf86'*\xf1\xc2\xf6~\xa4+\xec#\xfeA\x11\xe2\xee\n\xf1\x85\xfe`\xcd;\xeb\xa4\xa5f\xd5j\xc5\xb7v\x993\xd7\x96\x88X\xfcdU\x97\x9f\x93\x87k]\xec~\xcd\x14\xa9\xe6\x9c\xdb\x08-]l\x15<\x92*\x1f\xf7K\xb4\xb0\xc9Ig\x06=\xb59\xf5\xf1M\xc2;K\xff\xc8\xcb\xf5\xa6\xfdC@\xb5\xbe^\x8cnL\xdc\xfe\xb0\x97\x97\xbc)u\xfe\xc3Y\xb1\x99\xcb\xa9\xb7\xc8\xcbwp\x93\xcd\xde\xa98\xfcA\x9aH\x8fB\xde \x1c\x19]\xd4\xcc\xebXR\xa5\xa0\xab\x8bX^\xa5\xe0\xba\xb9a\x1aU\x8be\xefY\xfe\xa9\xaa\xe1\xaci\xb3\x9b\"o\x96\x1e\xb4\x18\xf4F\xd4\xe5\x86\xf6\xcd\xa7\x01\xe6\x08\xa9\xa5y\xd2\xcd\xd9L@\x12\xc3\x15\x99W\xd9\xa3\xf0u]\xad+\xbe\xc2 \xea\xdbM\x91i+-n\x94^\xebr,\x04\x1b\xa4\xad73qb\x13\xfb \x95\xaa\xc8\xa1\xaci\xb3v\xe3\xa3L m|>\xbc\x06\\l;\xc4\x84$vk\xba[\xe9\x82z\xc7U\x07\xba\xfc\x8f\x8d8\xb3I\x8f9oB\xe1\xe2[o\xdc\xc0\x10\xda\x968\xd6\xc2\xc5\xd9\xb3W\x17\xcf\xaf\xcf_\xbe~su}yuz\xf5\xe62\x00\xfa5\xbf\xff\xfa\xe2\xd5\xebW\x97\x91/\xcb\xbfy&F\x85\x94\xefR\xf8\xb0\xd9\xd5k(\x9f\xa5=\xaf\x0f@S\x0f\xdc#\x16\xca\xac\xc8\xe7'\x9bR\x9e\x7fd_\xe4\xfd\xc2\xf3\xa2\xa7\xb9\xcc\xf6\xd4\xbfNa\xdd\xc1\x08\x18&\xa6\xecf\x1dA\xef\xed\xce4\xb2{\xc7\x95O\xfe\xcd\\:\xf97s\xd9r98G;\x9bu\xcd\xee\xf2j\xd3\x14\xf7[\xc3v\x00\x89Z\xcb\xa9&\x8c\xab:\x9b\xbd\x93@\x93\xdc\x99t'\x1d\xa6W\x13\xcc\xe9\xc4;\xfb\x0c\x95o\xedOy}f\xcb\x9c\xc9\x94\xc1PmZ^i\xc7\xf4\xe3+\x91\xd4\xf0\x87\xd8e}\x86u\xf6\xefj\x8d\xedB\x08\x94\xc1\xbb..\xff}\xd2\x9dO=\xfa&.\x91O\xb4\x92]\n]\xba\x1e\xba+\xf5G\xee\xc9\x81\xc8\xa3M\x94_\xd9A\x0d\xc1\xbc\xbc\xd5Y\x12\x8e\x16Y^lj&\xd3o\xb3\xd2\x9an\xaaS\x87m3\xec\xd2v\xf9\xe6E\xf0\xba\xb0\xfd\xe6\xeb\xd3K?\xb5l\xfc\xca\xe5\xbf\x9f\xbf\x0e|\xe5\xa7\xd3\xf3\x17\xd8U/\xa6^\xe1\xeb\x9d\xe5+>\xc3[_\x1c\xadq\xb0)\x1b\xe6\xa3\xc0\x04\xb0\xc9\xb6\x9blj(\xfe\xb7\xd1B\xc1\x06\xfd\x9e\x0f\xe0>\xb9G\xe8\xe7xsO?\xc7\xff6\xf8\\W\x15~*n\xf2\xb9>;\x8b\x0f\xbf\xcb\xd7k6\x87\xf9F\xacR\xab\xbci\xf80R\xb3\xbfH\xeaUd\xf7l\xde\x977\xb4\x80\xbcsM\x0b\xc8\xfff\xb5GO\xc66\x96\x9a\x8fl\x93\xfb\\\x0bf:\x92\xc7\x8bWr\xf6`\xe5,[7\x9b\xa2+\x8a^\xce\x16b\xd1v{\xb1\xa0_\xcb=\\\x1d\x7f\xb9\xe4w\x1f5\x8f\x07\x99\xa8D\x8a\xffj\xa1\xcdS\xde\x8e&OOv\x7f\xb9\xbd\xd7\x0f\xf7\xf13:D\xc41\xfd\x1f&c\x7fZ*m\xa8\xde\xb3\xad\xce\xd9\xa3\x07\xed]\xc5\xe1\xf6\xd6p\x81\xe1ewK\x9ev\x8e\xf1j!\xf6w\xa29\xb3\xb6\xcdfK\xf9\x95\x8e\x07\xc2\xc7\x17\xcbf\xe6\xa5n\xdc\xebU\x9f\x14\xa7S\x07eidH\x85\xfb\x8c!$\xfd\xc7 \x04If\xe2\xe1F=\x10\x14\xe9\xd3vO\xd5\xe0]\xbc\xc86\xb64\x86&\x9d3\xc1\xb0\x890\xc3\xe1g\xb1\xa9+\x8chq\x17-6\xfa\xfe\x9ey:>\x9f\x0b\xc2\xe6\xb0\x9d\xdeJ\xf8\x10;{\xb6\xcb\xbc\xbc\xb5\xcf\xf1\x08\x1bBtI\x06\xff\x94\xb3\x8a\xbf<\xef\xd9M\x93\xb7\xce\xd4p\x10Y\x1eq)B\x05\x8b\xbc\x9c\x0b\n\x82\x04\xa6]t,\x80|V\x95\xfb*\x8bt\xf5\xf1/\x98\xbf?\x8a\x8f\xdd{\x88\x13>\xc4\xb6\x8f\"V+\xc50P\xd8}\x9a\xbd\xdf\xd9>)I\xdd\x0e\x85\x011>{\x8f\xef\xf9T\xb1=\xfb\x8c\xeb\xf9\xec1=\x9f4\x9e\xe7\x13\xc7\xf2\x1cD\x1c\xcfa\xc7\xf0\x1cP\xfc\xce\xe7\x8a\xdd\xf1{\x04@F\xbc\\\xf1\x8e\x91\xd5\xd2\xd9>\xcf\x17\x02VhE\xa4K\xd3E\x9f\xf0c\x81CQ\xd74\xabL\\\x0bb\xdb\xb5x\xcbt*\xd3\xaf\xf4\xb4KE\x8eVt:\x9d\x86B\xdc\xa8-7U\x8f\\\x01\x06\xed\x92\xe5\xf5\xd0\xf7+jen/]\x07q\x12\xbd\xceM\x94F)\x9ff\xef\x8589b\x17\xcc\xde\xa8\x96\x1c\x04\"\xa5\xb2\xca~*\x93^\xd8\xf3\x9er\x11\xb7BJ\xff\xd0\xf4x\x1a\xee\xd2\x10\xac\xd7\xcbQy4)\xb8]\x0e\xf2\xd5\xaa\x0eq\x04\xfa\xd2\xdf\xc6L_\xeaV\xf1F^ghru4]n\x0f\x8c\xab\xc3X\xf0\x81\xd7\x02\xb6\xd3vL\xb2\xd0\xf6\x0e\x11\x83&\x84\x8bd\xd47\xc9K\xf2 \xbc$\xea{\xcf\x07\xc7\xf5\xa1\x8f\xa4\xfb\xaayD9MA>\x92\xa9\x90\x8f\xc4\xfeX\xb0\x8f\x043yI\x19vny\xdd\xcd\xad\xc1\x1d\xa8\xe3v\x96Y9\xbfw%\xa8\x99Dvf=\xb5\xe9\xe0\x9d9j\xb4\x9f:\xe2\xb3\xaa\xf7e3\x99h\xf2\xd62\xd2\xc9\x8b\xe3~\x83\xbc8\xae\xc7\xc9\x8bc\xfe;yq|\xdf!/\x0eyq\xc8\x8bC^\x9c\xcf\xed\xc5\xc9F^\x9c{U\x8a\x91'g\xb1)\x8aE^\x14L\x06\x15[U5\xf9m\xc9'\xc3\x0c\xda:+\x1b\xd9i\xa2\x8e_\xdam\xf0\xa9\x8e\xaa\x0e\xfbx\x038\xc6\xf7\\6\xeex8g^\x17\x17\xa1\x14Q]C\x00\\g\xf2\x9b\xbc\xcc\xea{x\xd4Gf\xe8\xd0k\x8b\x83\xad\xc8\x9a\xc6\x19T\x81/\x90\x8c\xefR\\.\x11\x93\xd5v\x17\xf9\x0f\xbb\x85d6e7\x85\xa9\xb1\xdc\x0d\xf5L\xe9\x08pM9\xfb]s\x14\xe2\x9a2[0\xde]5\xf6 \x8d=V\xe6A\xb4\xb3\xd3J\xc5Q\x91\xcb*\x85\xcb*\xcd\xb0q\xccI/\xd5\x88\x92\xecE\xd5\xf6\xeaj]\x9d\x04\xa6K\xa8b\xd52\xf1+;\"c\xbf\xc8\xc8\xc7\xe1\xec\xd5\xf5\x02_hT\xbb\x9fX\xb4\xacW,B\x82U:-\xc1Jm\xab.\x82\xb6\x9f\xb5\x9dys)frK>C,\xc7g\x8c\x99\xc4\x14\xf1\x9c\xf7t\xf3z*C\xb6\x8f\xfa>\xe9\xce\x1c\x06 \x17\xd5A\x18\xd4#\x96\x8b<\x81\x93\xe4\n\x8f\xf9iE~\xc5\xed=\x90\xc3\xd0\xf1@w\x17j\xf4\x1c{\xda\xa5\xef\x93\x0c\xf8\xd1\x8e\xb8\xc9\xda\xbcQ)\xa0*\xc8\xd6\xeb\xe2\xde=\xd7\xca&\xb9\xdc\xca[\xa3x\xc6\x99z\xc0\xf8\xbewNAtML}\xc5\xae\xac\x9b\xee\xec7cxb\x85F\xf3\x93\x98\x91D\xe8M7Q\x99\xbb\xa5d\xb8_\x8b\xaaD\xd7\xe1J\xed+\xa5\xb2it\xd3d\xc1{\xa4\x1a\xd3\xdef2\xac\xaf\xaau\xd0\xdf\x8b\xf3\xcb+\xdb\xa0B\xb4\x81\xdb\xb7\xfb\x04\x9e\x9f\xfdt\xfe\xf2\xfc\xea\xfc\xd5K\xbc\x07o\xfb-o\xdc\xeb\xf6+\x9ehW\xdb\x0b\xc2\x1e\x96\xb7:\x8fdx\xa5\xfc\xfbc)N\x83\xd9\xed\xecxi\x1a\x1b$\"[OT\xa4\xabU\xa1Hw`\x9f\x8a\xec-\xb4m\x1cC\x98k\xd6\x87\xa0\xab\xbc\n\xca\xaf#RT=\xea\xd6F\x8d\xfc\x94U\x0bU\xf9\xc4\x97<\xdf\xd6\xa6\xdbe2\x04\xb7\xea\x14\x0fz6\xdc\np\x9d\xac\xd7\xe1\xc5\x10]\xcbV\x16\xf1\xa3\xb9@\xd9\xbd\xa98\xe3[A\xc4\xa3\xbd;\x07\x96\xd9\x9dkI\xe7\xda\x1b>)Z\xf3:\xa9K\x98\xf3\x9bB^2\xb3\xff\xfb\x1c\x08D\"\x10\x89@$\x02\x91\x08D\"\x10\x89@$\x02\x91>\x0d\x88t5\xea\x8a\x83]\x0f\"\x8d\x84\xbbZ\xa6\xd3\xf1\xd0y?>\xb8I:\xa8\xe3\xc0,S\x8f $J\x12eO:\xef\xbf<\xcc\x9f(\xf7\xfd\xd6\xdb\xfe\xb5l\xe8(\x07C\x96\xd4\xdb\x8e2\xccY\x9b\xe5\xc5\x81 B\xc2\x0f\xe6 jz\xcfF\xe2\xe4\x17\xfd\xb6\xd1\xd1\xdd\xf9\x19\x07e~\"Q\x089Tl\xbdO\xd0\xf8\xd5\xec\xbdbm&\xddm\xd3\xd0T\xc1\xa4\x15Y\x96\x8a\xaaz\x07\x9b\xf5p\x84\xe5\xe5SXg\xa3\xfc8z\x9e{\nm=rJ\x98\xdb\xcb\xd0R\x163\xf4G\xe8\x9f\x94\x11f\xcd\xdd\xe0\xf7U^\x9e\x0be\xf0\x8d\xfak\x9b\xdd\x8el\"\x06\xf0\x03\x80\x87'|\x9b\xc8\xca\xac\x9c\xb1\x13]\xf3\x93\xbbo\xbaD\x9d|\x02=\xf98\x85\xff\xfe\xf3\xa1Tv\xcb\xba\x11\xddlV\xab\xac\xbe\x1f\xcd-f \xb8f\xed\xa6\xe6\x13\x98-\xa8B\xcf2b\xad\xee\x94M\x03/\xb4\xf1m\x13\xdb\xd5t\xa9\xba\xce\xe70\xe3;\x03\xe9\xed\x16\xbe\x89\xcd&\x9f\x1f\x01;\xbe\x1d\xcdT\xdf\xdf\xcc\xbe\xce\x9e\xcc\xfem>\x7f\xf2\xdd\xdf\xfe\xf5\xbb'\xff\xf6\xdd\xdf\x16O\xfe\xfa\xed\xd7\xdf\xb3\xef\xbf\xfe\xfe\xeb\xeco\xdf\x1dA\x067l\xb6\xfc\xcb\xb7=\xb2l)\xa8\xeaE\x93\x8f\x0c\xcd\xfb\xcd\xef_\x7f\xfd\xf5\xfc\xeb\xdf\xbfe\x7f{\xff\xd7&\xbb\xff\xeb_\xb2\xc5\xefs\xd6|X\x7f\xfb\xcf\xdf\xff\xf9\xae\xfenQ\x1e\xc9-\x9c\xfa\xe4d]\x1f\x138\xba?\x9b?\\\xb3\x99\xfc\xe6\xd2\xfa\xcd\xf7\xdf};\xff\xfd\xdb\xff1\xbf[\xcd\xb3\x7fn\xde\xffs\x96\xcd\xe7\xcb\xe5\xdfnW\x9b\xdf\x97\xec\x9f\xdf}w\x0c\xe7\x8bN_\xde%U3$\xf8\xd8.K\xab\x12\xba\xdb\x9a\xbe\xdbR\x8b%N\x919\xec\xb5\xe5\xdf\xe6c\x91\xcd\xc5h\xec?\xf8\xe3\xbd^q\x8e\xac\xf9G\x1a4\x19F\xe6\x9eo\xbb,\xaa\x83\x04\xf9\x97\xac\xfb\xf3\xf5h7\xd2Vb\xd4\xcb\xcd\xba\xf8\x9d\x17d\x05*i\xb9t\x8a\xebv\xe9\x12\xe7\x9e\xcf\x9f\x9aG\x8dzP/\x89\x83\xc1\xfc\xf0\xdb\xaf\xbf~h_W\x079\x8c\xba\xb7\x87\xf3V\xa2\x15u\xc4\x92\xe8J\xbd=\xbd\x8f\ng~Io=\xde\xd7\x99\xc8\x81dn\x9cmf\xbcsAs/g\x9eB\x83O;x\xbf\x00\x01$\n\xd4\xf2\x87Dz\x93R)\x90\xd1+\x98S\x13:<\xc8\xa1\xc3\xf1\x02(H\xc3'\x0e2\xc2\x87\x19}\xcaJ\xfa\x91\xa2(\xac(\x06-\n\xc7\x8b\xc2\x11\xa3\x08\xcc(\x105\x8a\xc0\x8d\x82\x91\xa3\x18\xec(\x06=\n\xc6\x8f\xe2\x11\xa4\x90\xe9*\nEr\xea\x0b\xbd6z\xefH\xd2\xa7\xc3\x92\xf6\x8b&\x1d\x00\x9e\xf4\x89\x11\xa5O\x8e)\x1d\x08\xaat\xe8\xb8\xd2A!K\x9f\x0f[\xc2\x9d\x93\x12\xe2Kh\x84 W\xb2\x84\xa1J)\x83\x95P\xe1J\xc8-Y\xc8 \xdbi+/\x87:(l\xc9\x13\xb8\xe4\xe3O\xa3\xaa\x9e2| \x13\xc0\x14V\xac$AL\xfe\xa6K\x15\xc8\x944\x94\xc9\xd3\xfa\xb8\xcd\x9b\xd1\xe1\xa6\x99\x8aa\xc3M!Y\xa6\xe3\xe4\xc8\xbfw\x9d\xcf\xaf\xf9!\xd6\xdc\x03p\xc56*\xec\xfd\xc5\xc6\x9b[-\xaa\xf2\xf9\xc9\xe4Ra\xac\x9f\x110N%\xbfCiZ\x97\x1dG\x06j\xae\xc2Y\x19\x0c\xa5\xeb\xf0\xe0\xec\xbd\xf8\xc4\x96\xd5\\\x93\xbb \x10\xb1\xb9\x1f\xb6\x9aX\xdeYy\xd8\xd6\xb9\xd6\x17kJ#\xa9\x7f\xad\xab\xbaw\xa0\xb9\x82q\xa6\xea\xd0\xb6\x19\xffa\xb39\xf4^d(\xb0\xb2\x19Z\x89xgl\xd9H\xfb\xf1\x8e\xb8\xa3\xb9b-\xc1?\xad;\x8b\x02\xf5\xe4\x97\xba\xab\xbf\xf7\xd4g\x12t\x91\xd8:\x0f\x1a[\xc0\xae\xb0d\x1ft\xad\x83kk\xe8H\x8e \xda\x1e\xf2\xdb\xae\xfb\xe7\xe0N4~\xb8\xc9\xfb\x0d@|\x07\x82@'d\xfb#'\x89\xe4\xd0\x93\x1f~A\x16\xdf\xb7\xeb\x93\x92&\xaa\x17\x82\"{\xc1\x1b\xdd\x0bH\x974\xc2)\x8d\xeaaR0\xfdL\x8a\xaf\x89\xa4 \x1bJ=\x1c\x13\xf9\x0b\xea+\x88\xe8_\x88,\x907\xa4\x14\xc4!\xb9E\x84\n#\x14\xe1\x82\x89\x01\x1fP\x0c\xa1\xd5F\x8ez)!6\xf2\x1e\x8e\x11\xd1\xb6\\\x06!\xc8\xfe\xa0[)\xfe@c\x085Sh\xcd\xd1A\xc7\x08}\"\x12\x1b\x1fx\x0c\x01\xc5M\x19\x80\x0c\x81A\xc8\x1eU]\x88\xb2?\x10\x19\x10\xc1\xc8\x80\xb6JhP\xb2\xbb!\xf8\xb4\xb6K`2`\xa7\xfe\xe3\x80w\x17\x8ft\x04c\xed\x0d[e\xb4r\x0d\x10.\xa4&\x84k\xb0\xd5\xd8>\xae\xc1\xe1\xd8hG\xc6\xc1T\x1d\xdaB!p\xf2\x01Y+\x86w\x80a\x1eDZq\x995K6O\xe5\xa9\xdd\xbf\xf9\x06\xe5\xd5=N\xfe\xc9\xed\x8e\xe0\x92\xc0`n\xa2\x06\xdaL\xb1\xf5O@\xd6\xc0\x0f\xb7\x00\xca\x9c\x94\x90Z\x99\xe9sy\xe8\xb26T%&\\\xc8\xe7\xbd\xc3k\xde\x878\xe3\xaa\x8cZ\xe9\x00\xb9\xdaA\x10\xb3N\n\xb2\xff\x00~\xa8A`\xc3@\x00\xe3\x0e\xad(t-\x84\x18\xf6\x9d\x94\xc3\xb4\xa0o\x8d\xf4*\x0c\xe1\x96IA\xf0\x94\xfe\xa0\xb6\x8c[A\xb7U\x19V\xd1@\x0dam\xe0[< \xcc\xe4\xbb\xd9\xd1\xbb\x94x\xf5\x052\x1e\xa5\xec\xb5\x13\xeef\x91\x9dX\x81&\x85(n \xcbm8\x81\xff&\xb2R\xd4\xfd\x910\x83&/o\x0b\xe7\xe9\xa4\xd9B\xf4\x9bj\xc5\x80}h\xebl\xc0\x8c\x93\xfe\xc3\xbc\xdd.\xae\xbf\xb0F\xba\xa3t\xcd\xdcC\xb9Y\xdd\xb0\x1a\xaa\xbaK\xaaa-\xecD\x81\x11\xca\x1f\x19\xb8?\xc1\x1b\xb4=\xca\x17}z\xb2\xc7\xdb\x14M\xf1\xcbvg\x1cUW=%\x9d\x84\xb3j}\xdf\xef%\xe5\x0f\xc2E(\xe3\xe4y9\xdb%kt\x82\x15\xc3r\xe7\xdcl\x04\xa4 \xb1n,\xbcc\xc7\xdf\x98`\xf8\x18&w\xd1X0\x99\x8cF\x89\x85t\xbbbJd\xa3\xd9\x98\xd3\x0e\x8dE\x7f\xa7\xc1e?:\xb6}\xeb\xbc\x15F\xc9\x8a\xa6\xd2@\xb0\x81\xa11.\x91EU\x8a\xbcH\x06\xd5\xa6\xd4@\xae^sSU\x05\xb30\x01\xba\xd5\xde\xf1\x0c\xaek\x19\x13\x16\x89\xe1\xb5(\xb2[1 \xbd_2\xd1\xd3\xc6\xe9\x8b,\xfal\x9e\xadf;\"\x0b\xd5\x87\xfa\x1cI[\xe9\x8a\xb4\xb0\x0f\xb2\n\xce\x13\xd2\xa7\xb4\xe9\xa4@vs\xaa\x07E\x0d\xad\x89\xec\x85\x8aE]\xad\xbc\x86\xe8\xdb\xd22\x97\xc2'6\xc4\xa4@\x98~e%Pw:J\xb8\xaf6\xf5$k\x96\x14w\xa9\x8c!|\xa8$\x97\x13E2\xe5\xa59\"\xf0\xe2\xf53JxI /=\xcb\xfe'Nx9\xdd?\xd8:\xe2d\xc8\xc4n;\xd2l6\x1c\xcb\xc3h\x19\xdfq\x0b\xb1\xf3\xc6!\xf1v!\xaf\x05&\xcb8\xd2\x02Q\x8b\xff`\x99\x1f)\xb3,\xf9\xfb\xac\x7f\xea<\xb9'r\\\xc8_\xb9a]\x99sMx\x7f\x9f,\xd78E\x8dR\xe5J\x08_\x9bj\x94S\xd4\xa0Z/\xd0\x07\x9bR\xd4\xe4\xd1\xb0m\x05v?\xce\xbb6\xce;\xc5\xf9\xe3\x9c\x06\x80\xdb\x03 }\xbe\x89C/\xd3%\xeep\xfa\x07S\x85\\6S\xf2\x89#\xe0\xd2\x17n\xe9\xdaij\xf1\x12\xa4\xbd\xbdH\x8a\xbf/I\xf1\xc1\xc6\x80m\x14\xf5h\\\x80e\x8b\x895\x82\xa8\xa2 \xbc\xc8\x89\x02+\xb1a\x95j.J\xea8G\x8dd)x\xbb\xb4I\x82)\x83C)1\x81\x94\x01\xa6 \xabo\xba\x10\xca\xe0\x00J\\A\xd3\x06O\x86\x84N\xaa\xef8\xf5\xe1\x02'\xfda\x93\x18[\x84\x86L\xfa\xa6\xfa\xdd\x02&\x11S\x18\xaa\xd3\xe2j\xde\xa6\n\x94\x8c\x0d\x93D\x05Ib\xea\x12\x1e \xe9\xba\xd95\xf0nWd\x9b\xf8\"\x8db\x03#\xa3\xc2\"#\x82\"\xe3B\"w\n\x88\xc4\xf9w\xc1g<\x97\xd5\x13\x84B\x06\x07B\x1ej\x18\xe4\xc1\x04A\xfe!B [D\x00dP\xf8c\xc2\x9d\xbdwO\xe3\x9b\x8c\xec\x81d\xf8\x97\x90!\x8f\xe1\x01\x8f\xe1\xe1\x8e\x11\xc1\x8e\x81\xa1\x8e\x11\x81\x8e\xc1a\x8e1A\x8e1!\x8e\xc1\x01\x8e\xf1\xe1\x8d\xf8\x19\xde\xde#)\xb3wDP\xe3~C\x1a\x0f \xa0\xf1\x13\x873~\xf2`\xc6\x03 e<\xf4@\xc6\x83\nc\xfc|A\x8c\x98CT\xd2\x00\xc6\xae\x91|\xe1\x8bI\x82\x17}\xd5\x8b\x08\\t\x1f\xd4w\x0b[\xc4\xadz[^\xe362d\xd1\x11\xb08 \xab\xd95\x1d\xb2A]\xcfK\x0d\x89\xe9\xd8%P\xd1\xeb\xdc\xf6\xbb\xb5\xc7\xf5\xf0m\xd9S\x00$8\xfbB\xc2\xd0D#\xb5\xc0F\x90\x9c4\xac/\x08\xe3\xf3\xdb\xc5\x17j\xe1!r\xe3B\x85&\x9f\x0ca\xb5\x1f\x80\x85b\x02(\xbc\xa1\x13q\x96C\x85\x1f\x1e\x80\xc9\xdca\x87\xda\x14\x0e}\xd1F\xfa\xa4\xb9\xa1\xa7\x1fvF\x88\xa4\x1aL[Q\x13\xee@C|m\x8c\x8a!\"\xc8pD\x14\xda-\xc4\xd0\xbbF\x01j\x9d\x82\xe0\xe0BTO\x01\xec@\x82\xa0\x86\x80\x80\xa0B\x1f\xf5_K\xd0*\x06\xb1\x01\x85\x87f5\xdf\xea\xe6Q\xd7\x06\x06l!\x02\x9a\xfe`\xf6\x8bY\xfb\xb6\x15\x85\x87\x0e\xc6[\xdd\x1f6\x886\xf2.\xb6\xc3,\x07{\xed} ;\xdb.v\xd89L\x10\xd1%c\xa2\xee\xd2\x04\x086[\xf8uPx \x85\xd1a\x8f\xf5\x01|\xf6^\xd20\xdb{i\xec\xbc\xe7^(\x8cn(\xf6\x93J\xa2^2C\xc4\xabu\xbe:\x98\x98W\xeb\xdc\xf8y\xa2^m\x93\xee\xa7\x88{\xc5\x1e\xd2\x92\xc6\xbe\x06D\xbf&\x8a\x7f\xc5T3\"\x06\xd6\xa3k\xc7(X\xfc\xea\xb8\xe5\xf3n##a\xe9\xf2\xce]\x01\xa0q}\xfc\xc7\x01\xef.\x1e\xe9\x08\xc6\xda\x1b\x12F\xc8\x06PO\xa5L\x1a\xdb\x1fYt(6\xf2\xc5\x139\xfb\xe5\xb6:\xb4\x85\xc2B;\x0e\xc6Zq\xd1C\xde\xd8\xa1X+\xa2\xa2g\x0f\xc8|ty\xe7n\xf1\xb4\xf8\xe1\xb6\x15dD\x97wv\x82Y\xed 8\xbe\x16\xdd\x7f\x00?\xd4 \xb0a \xce\x16\xad(t-\x84\xd8X\xdbC\xb5\xa0o\x8d\xf4*l\x03\xe3\x1eQ1\x82\x7fP[\xc6\xad\xa0\xdb\xaa\xc2#p\xc3bp\xc3\xa3p\x83L\xbe\x9b\x1d\xbdK\x89W\x1f]\xde\xe9Q\x88\x8c\xcb\xc5\x95;Ml\xee\xce\xd1\xb9\x98\xc2\x1a\xe9\x8e\xd25\xd3_\xde\xb9\xd8\xe7\xe5\x9d\xd3R\x9b\x9f\xb2t?g\x87\xf3\xd7\xde\xf1\xadQ\xef\x9a\xde \xe43\x00\xb2N\xe6If?u\x1a\xce!\xe6\xa5\xde\xa0K\xbb!\xb2\xa6\xe7D\xb3rV\xcd\xd9\\\x15pZS\x8a\x08w\xccf\xd3\x8faH\xf2c\xc1P\xe6\xfd\xc1V\xbd\x8c;\x80\xe5!\x8a\x08\x1f\n\x05\x1fwOR\xf0qX\xf0\xb15(b\x12\x95\xbc5\xa7\x9ab\x94'\x0fY\x83\x94\xedAA\x14\xbd,\x85\xa2\x97)zy\xb7\x05\xd5\xb1\x8cR\xf4\xb2\x14cO\xa1(Z\x8a\xa2\x1dN\x01:\x8a\x16\x13D\xdb\x9cd\x85\x9a\xd5L\x91\xb2\xc6%\xaf9-\n\xa8Y[\xe7\xec\x8e5\x90\x15\x85\xe5,\xd4\x18\xe3\x1c\xad:\x1fh\xb3\x1chP\xa3\xf9Lx +\xd4\xa8L\xee\x85fgT\x1bw\xdc\x93\x82X\xdb\x00\xefMM\x1e\xd68\xecH\xfe\xefz\xbf\x82o\xc9l\xd9\xf1%q&q\xd5>\xf8d\x92]\xd7\xce\xc6>\xb63S\xfb\xe4bKl7c\xb5\xd4\xd6\xc5v\xfb\xec\xfe\xf7\xafx\x15%\xf1\x02\xa9\xd5v\xfb\x9b\xe6\xc39\x19\xb9 \x02 \x80 \x00\xea\xe9\x02'+\x04\xf0\xc3(\xa1Eid3p\x8c\x1a\xf5\x0c\xa6U\x92Li\x92\xc8\xb27^p\x05\xbdIy\x8e\x01*s\x9c\x16bQ\xad\xe5\x08\x9a\x13QH\xe2%<\x00\x01\x9e\x96\xa1\xb2&\xb2T\x97\xda\x9e\x01`\x10\xbe\x85\xca\x99\x00\xd9 \xe9+\x8d\xea$z\xc5Mh\x8a\xf3%z[\xd7*\xa1iQ\xe24\xf2l\xd3\xbav\xcdx\xc8\x99\xf5.9\xfc=%\x89\x1b\xacB\xe4\x91DU\x89'\x89kB\xc3\x93i\xbfs3\x13qt\x0e\x8d\xdc\xc3;\xc1\xf5Z\xec\xd4&S\xb1#j|diAc\xe9\xa4D2\x0d'\x90\xd5\x13X\x11P\xf3\xb0\xe9\xb0jg\xeb\x80\x83LD\xf3\xe6\xebtb\xb5\xc6\xc8\xd8\xb1\x02\xad\x03\xb4\xfa\x057wsv\xec\xf4\xbb\x8e\xf0\x00\x97\x18\xc4\x1d\xd6\xa6i\x84\x9d\x03\x94nP\xae\xa3\x1e1\xcb\xa1\x85*\x9a\xf5\xf6\xabG\xa8|8Vys8\x15\x8aM\x0eF>\xb6\x01\xf6\xe0S\xf3C(\x1ct\x83x\xd6E\x1c\x12\x83l\xe9\xd5JJ\x19\xca\xcbPl1\x90u\xc3y\x12\x8c'\x0eE\xb9\xafB\xfdH\x0bg8\xf5+\xc6\x0e\x03\x96\xd7\xd0\xb8a\xab\xc9\xe0\x8e\x1c\xf6J\xc7\x96T\\G\xecp\x83\xf0\xfaVQ\x1fUT\xd0\xb0\x07\xcf\xc2z\xe9\xaa\xdak\x0b&\xdd\x86\x06\xea_\xfe\xcdC\x03E[`\xeeyt^\x04\xc2p\xaf\xa1\xe8\xd3C\xc6\xfb\xe0\xc4\xfc[\x1dT\x85\xec\xcf\x98\xa8&\xf1\xb7\xcb\xeb\xa0\x1d\x1a\xb6Bo\xc9\xd2-\xdfA\xd2\x1dd\x14\xc0\x98\x87\x04Bb\xc2E\xad-Q\x0b]$\x1c\x9e\xe3\x1b\xa2\x82/\xdf\xa5\xe4\xb1\xbcf?\xf6\xd6\x8e\x9c\x90\x1b\xea\x0c\x95f\x8d\x07\xcb0e\xc2v \x83\xc9f\x89\xa0yV\x94\x88L\xa74\xa2$-\x93\xe5;t\x96&K\x94\xa5\xc4\xafm\xb3\xe9T\xb8\xb1\x19\x1d\xbeq\x8bYV%1/\"I\x1c\xb3\xab\xa0\x8d4?\x15M\xcb\x8f\x1fF\x98!I#\x9f\xa4\xb4\x9asO\xb7\xfc&|\xa38etq\x87%\xaf\x9e\xccX\xe1\x06G\x0bT\xa5\xf8\x1e\xd3\x84\x9d\xe0\x9d\x01\xe2H\xbf3\x91\xb0s\x9b\x9e\x1b6f\x8a*\xa6e\xd9@\x83&J\xce\x86oh\xffD%tN7n\x9e8R\xcav*\xb3\x12'F\x8e\x90\xd4\xa8L\x8aN\x1a\xbb\xcc\x03P*\x92*\x11\x9b\xc4?US\x94\x90i\x89\xc8|Q.\x11\x95u\xb5\xe5=\x98\xa8\x97'6\xb8@\x80\xcd\xc5\xc4\xb7J\x08\x8ef\x08/\x16\xee\x94\x86*-\xaf9\x95\xa1y\xf0)(\x04Td\xa8\xd7L\x18\xc8\xb1\xf9\xe0;%\xe31\x97\xa8\xe5\xd2\xc7\xa1\xacl\xc9\x7f\x06B\x8a\x10\xa9\x04}\x93\x81\x05\x06\xca\xd4j\xaf\x05~\x9f\x8e\xf4\x16d\x0c\xf0\x003\xb4\x18M\xd1\x8fS\xf7Ss\xa8Kz\xc66'3FDH:\x17\x0f\xb5<\xe1o\x16\xa0S\x9f\x07\xc1xgF\xcb\x16\xff\xcf=\xdb6'\xec\x08\x15|\xdc<\xb4\x10\xc6_0\x12\xb1\xf6b\xa1\xf5\xbe\xe5f{c\xef\xfa\xb8 \x92\xf5\xd9\xf8$\xe5\x95\x81\xb2<&\xf9\xbb_|\xac\xbb\xa4iD\x8eQ\x94\x15\xf3\xac\xd8-\xe2[\xb4\xff\xee\xc3{k\x87\x90\x7fU(nm\xcc \xbc\xc9|B\xe2Xh\xf6\x9b\x8b\xf3/\xdaT\x93\xce\xc5\xc2\xb3\x0e\xb5\xf4w\x11P/\xd2w\xe8k\xc7]\xe43\xf5\xc2\x93d\x9aq\xea\xe6\x95\xfbw\xcc\x8dQ\xbb#\xa5\xbb\xda\x02\xc8m\x94\xafp\xacQv\x91\xcf\x8c\xf7h\xa2\xa05\xd7\xe0\xcf\xff\xbaf\\[gR\xfd\x08C\x8dM\xfb\x02\x17\xf2&\xd3X\x15\xef\xbc\x86\x1c\xb7\xd1\x82\x06\xdai\xfdv\x83T:.\xfd_\xf2\xe2\xb6l\x07\xa5\x99\x08xs\x9e/\x11\xf2\xa8\x1403=*=\xb4u\xb4\xe4t)\xf0Zl;\xe95\x19m\xc8c\xd7\xdey\xc0\\\xea\xec Z\x16FU\xe0T\x9cgb\x941\xfe=\xd0\xd6\x95\xa4\x7f\xdf8\x83\xb1\x87?\xf1\xe8\x8e\x19\xdf\xa6J\x89\xb6M\x95\xda\xa0T\xa9m\xd6\xcc\xdf3k\xa6\xa6\xdf\xb0I\x9a'b\x9fJ\x1d\xe0\x0e\x91N\x0f\x13\xca\x10/G\xcb\x97a\x82s:/\x860\xb2\xb3\xc9\xac&\x88\x85\x89\x02?\xe02\x1a\xe2\xb4\xf0\xbb&\xfa:#\x82\xfcl\x82_3s[&\x89\x85\xbd\xdc}\x00\xe4\xee0W\x83\xe1Ph@\xb38\x17\x06\xb9\x13\xacN\x83g\xe6\xa2io\xd5\xfd}\xbc\xec\xeb,\xe8\xba\x04\x1a\xe0\xac\xee\x81\xfe\x0e\x81\xe6\xe9\xa6\x01\xac\xeb\x02\x18t\xe87\x8e\xf6\x0d`\xf6c~\xf7`?dbW\x12\xe2\xf2\x90\x0e\x9c\xd6!Gz\xb9G\x1apB\x87\xf8\xe0\xb1}\x9d|\xea\x9b\"\x9ad\x11.\xb3|\x8f\x1bN\xb2g\xe0%\xd5\xb3\xcb?D\xa7s\xdeG?\x96\x8a\x93\xc4r\xab\"\xedKT\x94\xec\x98'\x87CE5\xd1\xf0\xe6Y\\%\xda\x1ajd\x90\xb6\x86\x92?\xd9\xd8\xbcQ\x93\x89fk #~\xd4\x88l3\xb8&\xe5A\x93'u[\xc1-1\xc7\x8f\xd7UN\xaf\x13\x92\xde\x94\x8e\x00F\xffi\x065O4\x9d\xf3\xf4k\xbb\x7f\xfe\xdb_\xbb\xfa\xb1jm\xbe\xe1~\x82\xb6\xc0\xd8z\x07D\xdbz\x076\xc8;\xf0\xf7<\x1b\xf7~\x97]\xd9\x0bE\x94-\xc8\xde\xbf\xf8\xff]\xd3\xf8\xff`\x8f\xb0kIP\xfccy\xc9\xba6\x8c\x873\xbe\xd6.\x99\xa1 \x7f\x86HZ\xe6T%Q\x89\xffMj3\xbe\xa07)\xc9\xdf\x14HF\xf7\xab\x13\x8d\x0c\x93\"1\xe2\xf8\xf9M\x0b\x85\x8a\xfc\xd1\xc6\x1a\x17\x92\xf3\x1b\xb2\xbdy\xae\xd9\n\xbbSz\xddU^\xb3\n\x06g\xb3G\xd2x\x91\xd1\x94o&6L\xec\xba\x97\x96\x1caV\xcd\xea\x98$z\xc5\xc9\xd1\xab\x9cZ{\x904\xca\x97|\xee\xdd\x97<}\x06\xe6\x9c,\x0c\xb0\xdc\xf1!\x19b\xe9\n1%~W\x8f\xc6\xa6H\xed$\xd3\x0c\xaf\xd3cvdrV A\x06\x0b,\xdf\x9a\x89m\x12\xc3_;\xc5K\xb1\xe6\xa1\xfd~\xa3\xca)\x12Q\x94o\x1a\x95OM\x0c_{h\xa3\x92\x8b>\x9b\xd2\xb98\xb6v)\xcc.U\x92{\x04\xcbT\xeb\xa3\xadm*\xda\xd66\xdd \xdbTI\x13\x03\xdah\xb5\xe4\xb6vo/\xbb\xb7\xca\xe9\xde\xbf\xaa\x9c\x0e0x\x7f\\\x9c\xf63w\xe5\x98\x1aX\x95\xd3\xa0)\xfb\xe3\xe2T\xfedk\xc8\xf2\x16\x92\x05[Cvk\xc8n\x0dY\xe7\x06q.\xc9\xad\x0d\xbbMiq\xc9\x8cmJK\xff`\x0f\x0f\xb8mJ\xcb6\xa5\xa5\xdb^f\x9e\x86\xc5\x99x\x00nSZ\x1a\x0d>\x13}\xa3T<\xa0\xb6)-\xdb\x94\x96mJ\xcb6\xa5e\x9b\xd2\xb2MiyE)--\xbf\xd78\xd7\x00?.N\xb7\x97\x00\xb2m/\x016\xe8\x12\xa0\xe9\xc6\xdb\xfa\xffW\xf2\xffosB\x86\x06\xdcosB\xd6\xc8\xdcp6\xc36'd\x0c.nsB\xa0\xa7f\xb4\xcd \xf9\xff6'$x\xd9\xfd/~Y\xe6\xbb\xea\xd6\x96s}\xb3\x9d\xda.\xb6'Kn\xf8sxo\x8av\xd5Q\xfbm\xf6/\x8a\x0b\x9b}\x8f\xed\xb2f\x07\x1d\xb4=\xb7\xd1A\x8br\xf5\x9b\xe8\xe0=4\x14\x07\xe0\x1d4\xe4\x06\x1a:d\xbf\xdb\xe7\xb0Cf\x85\x9bgk)\xe9\xd1\xee\x9d\xff\x0e\xb7\xce\xc3\xb7\xc1\xdf\xfe\xde\x19\xe82\x019K\xda\xee\x11tq\xfe\xa5\x05p\xeb&\xd9\xbaI6\xcaM\xc2E\x87\x01j\xeb(Y\x8b\xed\x180\x1d\x03\xaf\xcd\x9e]\x9e$\x89\xf2\xb9\x02\x83\"\x1d\xc6\xa2\x01\xe8\x17E\xfaf\x1b\x8c\x1b\xb2\xb1\xb7\x81\x8f\xdb\xc0\xc7A\x06\xe8\xdf\xc3\x04\xfd\xdb\x1b\x92\xa2m\x03\x18;\x0d \x18\x00W\xde\x08\xcc<4\xec\xc2\xc1\x03m\x1b\xc0\x08\xb9EG\xbdfh\xc8U\x86\x07\xdc6\x80Q\xb4\xd1\xe7i\xd8\xa5\x88\x07\xe06\x80\xb1\xd1\xe03\xd1\xf7J\xc5\x03j\x1b\xc0\xb8\x0d`\xdc\x060n\x03\x18\xb7\x01\x8c\xdb\x00\xc6W\x15\xc0hx\xaf@\x1e\xf9\x16\x00\xe5\x9f7\xbdi\xdb\xe0E\xd1\xb6^\xf9\x0d\xf2\xca\xff=\x9d\xe7\xdb(\xc3\xa1!\\\xdb(\xc3527\x1c\x1f\xb7\x8d2\x1c\x83\x8b\xdb(C\xe8\xd1\x16m\xa3\x0c\xff~Q\x86\xe2\xdalF\x17{\xff\x927Q\xd0\xa2:\xaa\xa3\xbe9f\x0b\x99\x17Ij<\xd5\xcbwIB\x0b\xb1Un\xe8=\xd1w^\x08\xd7GOB\xb9\x19\x81\x11C\x8c\x89h!M8z\xf6Kg5\xbe\xfc\xe3\xc6^8\x8b\xbaQUE\xe3q\xcdV\x87e\xd8\xa2\x91s>\x9b\xea\x89)\xd0[\x86J\xf7\xba\xb13;\xaf\xfd\xeeP\x921\xe8|\xbc\xbdw\xe4m{\xef\xd8i\x80S\x19\xc0S\x85\xc0\xccC\xc3\x8e \x1eh\xdb{G\x88\xf3\x0b\xf5\x9a\xa1!\x87\x1b\x0f\xb8\xed\xbd\xa3h\xa3\xcf\xd3\xb0c\x92\x07\xe0\xf6\xde\xb1\xd1\xe03\xd1\xf7\x90\xe5\x01\xb5\xbdw\xdc\xde;n\xef\x1d\xb7\xf7\x8e\xdb{\xc7\xed\xbd\xe3k\xbawT\x0e\x0c\xd0\x9d\xa3\xbae\xd4^\x97m\x16\xd0\xf6\xbe\xd1\xf2\xf7M\xbao\xec\x06\xdfo\xf3\x80V\xf2\xeen\xaf2\x87\xde\x13m\xaf2\xd7\xc8\xdc\xf0%\xdc\xf6*s\x0c.n\xaf2\xa1\xa7\xe5\xedU\xe6\xff\xbfW\x99\xae\x9b\xcc\xd0\xe3\xb9\xf2\xddK\x86.\xb5>\xf9\xfa\xa8\xc1\xf9^\xc3\xfdo\xf9\x9b\xedc\xb8\xa2yl\xda\xd7vc\xf8\xb7\xbf\xf5\xf3c\xc57`\x8fgh\xe5\x91\xb5~o\xb6\x05o{^\xdd\x9eW7\xea\xbc\xfa\xf7\x98\xec\x1f\x1d\x1c\x92}\xc4\x1f\x1d\x130\x9at4\x86=\xb8{rRq\xf7\x98\xdc>\x90\xe4\x1d\xba\xa4s\x9a\xe0\xa3\xcb\xacz\x93\x1b\xe7\x0e&NsR\x94\xdc\xac5\xad\xd6\x7fc\xa7;~F\xc0\xe6\xc2a\xa0\xebu\xc3\x0d\nv\xaeN\xf4\x00\xd2Mn\xac\x15a5\xbf\xb3\x83Vo\x016\xe1\xe2$Q\x0b[X\xdbl\x18>\x93}\xc1\xd7\x13\xf4\x96M\x86\x1cm\xaf\xfe\xfe\xabu\xb4\xf6\xfch\xef\xbfk<\xac\x19\xaf\xa8P\xb5'4\x858\x8d\xf7\xea\x05qM\x9b\xfckm.\xdb\x80\xfa''h\x82c\xd3\xdc\xab\x8f&\xd3c\x13\xb1\xab\xe6\x1a\xe5\x02\x95/L\x9c\xc6(\xcd\xac\xdc\x7f\xd7\x02 o3\xca\x87\x8c-g~\xa3\xc1\xdd\x07\x86,1Ib\x90\x15X\xfe_\xe6\x86Y\xa28K\xdf\x94\x92\xe3S!\xcd\xf9Fb\xcc\x93\xaf[\x1b\xc3\x9ft\xb8\xba\x83&U\x89\xd2\xac\xb4p\xd6\x9cn\x1b\x18\x86\x9a\xb9\x94\x19Yz\xb6\xd8\x1f\xf5\x9e\x893R0<\xe7\xb8\x8cf\x8d\xc3\x9e\xd1\xdf\x9c\x91\x7f,\x95\xd1\xb5\x83\xea\xe8M\xce\x0b\x81R!\xaf\x84J\xa5\xbcL\x0c/\x89\xfe|\xad{2\x8a\xf4G\x05D\x1dP\x1bJP\x0e\xa7\xc15\x17\x9a\xbd\xd2\x90\xd4%\xbf(\xaa6\xf4\xd4\xc5 \x0b\x1c{\xacF\xbf\x8c\xd2\x14r\xf0!\xc7\x8b\x85z>]l\xbaY\x96\xc4\x85>\x01\x89\xbd\xff\xd6z\xc9%\xb7\x19\x89\x7f\x1d\xf5\x88\xe4\xa0\x0c\x85\xa0\xa2 d\x84B\x0f6#\x98\xd1\x07\xb8\xb0e-t\xcb\xc8\xda\x8f\x94\xdeU\x04\x9d\xfe.\x8f4\xb4\x90\xbb\x1d\xa1\xd3\xf9\"!s^h\xb2\x88o\xdf\x9d8\xeb\x0c\xa9\xc6U\xd6\x14G\xe2xT\x15\x84\x99\x86\xb9V\xf2Dl5e\xd4\xf9\xa3\x8e\xbep\x87\x8c\x8b\x89\xe2\xdd\xfd\x88o\x9a\x0dbf-`\x1a\x18J\x97y\x96\x96\x98\x8a r\x0f\x8cFOaIr\x7f\x0dQs\x81\x93${\x90Z\x8c+E\xe7y\x18\xa9\xf5\xe6\xf8\xbb\x08\x8c\x0f1\xcf~\xa0R\xcdy\xb0R-\xb8gD\x0b\xef\x1c\xd1\xbc!\xcfu\x03\xcd\xbb\xfc\xa9\xac/&\x03\xf6\xa5U\xa6\xca\x8d\xbdU\xf5\xaf~\xf5\x82\xc9\xb3\xc4\x13P$\x1ad\x05\x89\x869\xbczG*d\xf4\x94\x13\xbe\x9a\xc8c\xe9\x0fw\x14\x8d;\xbb\xf2,\x12[\xb0*\xbcAC\xa8\x1f\xf3HZ\xcdCt\xb3\x13\xd7\xf9\xc9\xc5\xd5\xff\\_\xfd\xcf\xf9\xd7\xeb\x1f\xdf/\xcf\xbf~9\xfdv\xfa\xf5\xf7~\x1d\xcf.N\xff\xe3\xf4\xfb\xc9\xd5\xd9E\xbf~\x97_/\xfe<\xfd\xf2\xb5g\xaf\xd3\xef\x7f~\xbd\xec=\xd6\x97\x1f\x97Wg\xbf\x9f\x9e|\xef\xd7\xed\xec\xaf\xef}\xf1;\xf9\xf6\xed\xf4\x8f\xd3\x93\xab\xaf\xfd\xba\x9d\xfd\xf7\xf7\xd3\x7f\xfc\xb8\xec\xd7\xe9\xfc\xe2\xec\xcf\xaf\xdfO\xbe\x7f\xe99\xd8\x97\xb3\xefW\x17g\x7f\xfc\xd1\x97\xb6?O\xfe8\xfd\x1d0\xd1\xca\x9d6ly\x85m\x95fs\xad\xe2\x81\xc3\xf3K\x19v6\xe5^\xbe(Kc\xcaP \xf6rm\x8ac\xfbg9\n.\xc4e*\xe5\xf71\xdePO\xdb0j\x0f\x1d\xdb>\xd6\x01q1\x99\x94\xa8 \xf9=\x8dhz\x83\xa6U\x1aq5\xd6s4\xb5\xf7\x8em\x1f\xc5a\x89;\xcbi\x84hzO\x8a\xfe\xf4\xe8}zl\xfd\xaa\xa6&-i\xb9\x14\xea[\xd3\x18UE\x99\xc5\x14\xa7\x92P\xf5\x8c:cp_B\xf9\xbe?\xee|\xd1\xb7\x96\x85\x90\xff\x0b\x9c\x97K\x89\x13W\xdaJK1\xed\xdbsH-7\x8e\xad_\x05w\xc5\x80\xe2\x9c\x9c\"<\x9d\xd2\x84\xe2\x92 |\x93\x13n\x86\xf4\x1cTJ\x9dc\xcb71 \xb7zp\"\x9c\xeb\xd9T\"\xa0\xed\xa6i\x1bR\xedzi\xc2\xa0\xb7\x94 \x92f%\xf1\x1b3]\x84\xb4@>\xb6~\xb5\xa1s\x8f\x13\x1a\xf3%,S\xee\xf8\xfe\xd0\xb8x\x11P\xb9S!\xcb\"|QU7\xc8\x95U\xdd\xa4\xad\xa6]\xdbz\xfa\xdf\x14\xa8\xa07).\xab\x9c\x9fb\x15\xaa\x1ex0\xbb\xef\x04\x9d\x1b\xbb\\Y\xa3l\x0b\xee\xd1\x94 <\xceEf\x17z\xc1tK\xac\xaa\xa5\xe8\xec\x06\xd7\x83W\xfcT\xce\xf8@IQo\x04Tf\x0b\x94\x90{\x92\xa8\x12\xb5B \xf9\x99\x93\x88\xd0{\xdfB\xc8\xa6\xd3]!\x9c\xf8\xbctSv\xb5C\xc2\x01\x84_\xa0]\xf3uw\x1d<\x1c\x8e\xcd\x87\xd4(Gm\xaa*6\xfb\"\xc0\xaaE\x90wm\x1a\xbe\x97\xcb\x12\xa71\xce\xe3F\x19e\xa1\xef\n\xee\xbd\x9c\xe3\xfc\xd6r\xd9Z7\xf5ko\x86PNPQ-\x16Y\xce\xf0\xd3\xc7M\x8e9\xdf\x11L\x18\x95eN'UI\xd0\x1c/\xb9\xf7\xde\x03pB\x98tOox%n\xce\x05\xa9\x13\x94\"e{#bv\x8b%\"\xc9l\xd2It\xcde\xeeu\x9e%I\xb5\x08MkH\xb2C5\x00|\xfe\xff\x92\xea\x01'\x89\x16\x01jG\xd4\x8efZ\x16Z\x14x\x80\xa9\xab>%T\x1b\x80\xde\x14J\xb4N)Ibo\xf2\x95\x98\xb6\xa4\xc8\x10I\xf1$\x11g~\x1eQ)u\xd5\xbfsO\xb5@P@\xf5\xad\x91\xdaU\xaeh\xb4O\x1a\x8cm\x97|T\x15\x87\x83Q\x9ee\xa5\xb8q \xa9t\x1c2\x95\x95$\x84\x1bN\xf5\x8d\x86\x0bGU\xf7]\x84\x8d\xca{\x10\x0f\xa2\xca\x01{M\xd3if_R0J\x1a\x80j\xef\x9e\x99\x04\x84'Y%\x82\x0ei\xbcW;\x98\x1c\x00ked\xfdA\xd0\x91\x16v\xa1=\xa7\xf3\xb9\xc1D\xf3:\x8b\xdfy\xe2\x07\xde[\xbb\xdb\x1a\xb7\xc1.\xa1\xa09\xbe\xc8\xc9\x94v\xf2\xbb\xea\xb6f*\xe4\xf8\x8a\x18\xf9_L\x8a\xea\xcc/\xa2\x7f\x1c$F\xfc\xa3\xaa^`Z\xbc\xc2\xcd\x82\xa0\xa2\xd8\xf8\xd2\xa4\x1a\x00\xce\xcf\x0f\xb6\x02VdC_\n\xd5\xe59?\xcc\x89 \x0b1\x02\xba'y1\"m#Lq_\xda\xccI\xe3\xff\x9e\x91GE\x1d\x98*c\x01\xb8\x05*;r\x8e'UMh\x01\xd1\xea\x80\xd3\x10\xb8\xae\x8b\x995\x0bZI\xc5\x8as\xbe\x96m-Q\xf3\xcbc\x1f\x94\xc6\xfd\x16Hn\xab9}!\xe1\x0dg\nD\xbcCa\xc1Xb\xfc\xd7\x08Bb\xad\xbci\xa1\xda\xd4\x08\xfa\xb3\x07\x9cUM\xc2\xb9\xf5\x02\nB\x8f;\x8a\x96\x80\x93:\xc2R\x18D\xea\x08J\xc3\xb1Z\xdaD\xabSQ\x97J\x9f\xd7c]\xb1\xbc\x12\x1b\x17\xcb\x83j!<\x02\xaaG\xf1\xea\x05\xe0\xec\x02\xb7:aC\xcf\xd7\xc2\x93\x10_3\"B\x82\x13\xb8\x80\x90\xb1\x88\x18\xd8]\xc6\x96\x10h\xb1\xc7d\x1c\x13\xd9c]D\xc9\x17\xbe\x81HZ\xe6K^\xcaO\xe2\x0b\xa2i\xe2)\x06.Z\x0f\x8a`R\x00\xc9\x13\xb7\xc3\xaf L\x14\xb9z\x82\x02\x0e\xe9\x802\xef\xcf\xe4\n|5S\x98\xe0\xa2TH\x83\x08\xdb\xd0y\xe4ayt\xc4\x89\x94\"\x03F\xac\xab,E\xb3\x19E*\x81\x01eVpQ\x8c\xe6\x90\x01\xa6W\x00\x97\"\x02O\x03B\x9d\x1b\xf6N0$\x9f\x0e\xb5e\x83\xd0\xe4\xc4z\x7f7\xc3\xc5l|R\x19\x1d\x0c2'\"5j\xbf\xa8\xb5\x16L\xbb\x08 E4\x08/\xc0\x14\xc82\xe2\x96[l\x8d\xfc[6\xf05\xfb\x99?\x8a\x895\x1d\xa8\xc6+\xd17g3\xca\xe6\xf3,\xe5\xe3\xf9\xa3I\xc5\xeb\"/\xc2\x0e1\xb4\x08TSd\xd4\xb7\xa6\xfc\x81\xb1\xe0\xe5\xb2j\xba\xfc5z+\xc0\xfeZ_\xd6r>\xedi\xd6xomUc\xa2\x97\xa6\xf7\xd9\xadg-\xd1tQ\x95\xaf6\xd5\x0b\xb2\x0bzM<\xc4\xe8k\xb7\xefl\xda\xe5C\xb1\xb2r:\x9b\xf8\x84\xa6\xb7h\x82\xa3[YA\x1e\x00\x89G+\xf0\xa4\x0d\xbeh\xfc\xbe.]\xe9=\xec\xec\xea\xc9\x02\xa0y \x1a|\xabX\xc4\xb7T\xf4u\xf4\xf87P\xca\xc5\xd7\xa2\xc4\x93\x84\x163\x12\xab\xb0\x86P\xb89D\x8e\xf7dS_\xca\xed\x02\x9f\x92\x88\xa7$\x18V\x05\x00\x1ec\x14:\xcf\xb3EV\xc0y\xa0\xc5\xf2z\x181\xcd\xb39\xdf\xbb\x1c\xa7)\xf7\xed\x95y\x15\xf1\xb8\"n#\xcdq^\xcc\x02\xe1\xeb\x08\x15%.\xab\xe0\xd6\xef\xc7\xffS\x9d\xf5B\xa7\xc2l\xe2\x82\x8f\x8bH\xb5\x0c\x15\xd2\xa0 \xd0 \x19?+\x1eA$\xa2\xe5\xd9\x14\xf3\xfb\xb2E\x15\x16\xcf\xbdx\x0c\xcf\x9a\xbc\xf8\xfa\xe5\xec\xe2\xf7\xeb\xd3\xef\xe7?\xae\xae/\xafN\xae~\\\xf6\xcads\xc18\xbf8;?\xbb\\\x01\x80\xf8\x16\xec\xae3\xf1V%\xa4\xbf$\x0f2\x0f2\x03\x01\x10F\x02\x16 5\x84\xc7}\xe1\x84\xc6{U*\xce\x8bb\xdd\xb2\xb5\x03\xe8\x1c\x98J;\x8f\xd5_\xdb\xa9b\xc6\x8eI\x11\xce'\xb4\xccq\xbe\xac%\x18\xaf[\xa8\xcf|b+\x0c\xc7Q|\xb3c(\xbe\xd9\xf1\xa3bC7,\xb0EN\xeeiV\x15\xfc9\xd1\xe6V7\xd2\xab\xbc\xb8Jas\x95\xe3\xe8V\xf8\xc6\x84\xe5\xa4O\x80D\xe9$\xe8\xa9\x0c$\xbd\xccA:v6\xa3-\x9aQr/\x9eX\xc9\xaa2$v\xb2\x14\x84\x9d\x80\xf4j\xad\xc2\x17\xd6\xf5\xff)\xf5|\xa9j\xac\nv\xc2\n6\x88&z\xec\xd5\x0fa\xb6\xdcP/\xa0A/9LE\x97Z\x82\xb5\x1b\xa3>\x10\x02\x80\xd5\x99N\x927r+\xd3\xf4F=\xdb\xb33\xc54\xa9r\xc0\x11\x1215\xbc\x10o\xdb\x06\x7f\xdck\xd6\xfb(\xdd\xcb\x1f\x7f\x0c\xd2R\xdd\xde\xe7'\x97\xb0\xe4\xfaf\xb7\xcb\xff:=\x1f\xd0\xed\xdb\xc9\xe9\x1f\xc1n\x86N\x1eJ\xe70m\xec\x18\x0d2)\xce\xce\x0d\x0d\x8c\xaa\xb4\xf9\x18\xbc\xab\xf5\xcc\xa7\xefNi\x9by\xec[C\x85\x11c71\x0dZ\xbf_5dH\xb6\x1c\xdaC\xb2o\xc6\x90\x9a\xa4\xbd(K\x0b\x1a+\xef\x03\x1f\xfc\x96\xf2\xfb\x8bX<\xe55\xa7\x05\x7f\x9c^\xea\xa3,G1I\xf0\x92\xc4\xc0\x14E\x07\x92l\xf1\xb5\x91d\xdf\x9c|\xa9\xaf\x16\xad\x983\x99\xe1\nEW\x0d*\xf4\xc4\xa1\xeaL\xc8'\x92FxQT\x89FI\xca-~\x8a\x85\xf8\x11Qmy\x00\xb2\x93a8\n\x1c\xde\x16\xbf\xa2\xfai^\xfe\"x6U,Ko\x1a\xe2:0K\xec\xa7\xe2 \xa3:\xd4\xe5\x8a)\xcctx\x1d5\x96\xdaX*\x06\xd6w\x19\x00=[X\xcb1YK.\xc9\xcb#\x07\xb8\xf0l\x9f\xe8+\x91l\xca-W>\xe5\xb8,q4\x13\xa3\xe9\x8cV\xb67 \x8e\xdc\x05\xb6\x9b;F\xaec~v\x0f&n7X,1\x92\x9c\xcbR\xe9\xd0\x90\x9fe\xb6\x93\x9dd\xed\xb8\x1a%P\xa9 -\x10\xa1dD\"9\x016\x96\xc0\x9a#\x92@>\xbc5n\x14=\xbe3\xc8HNh0p\xa8\x9e\x86M\x8e\x18jc9\xc9\x10R.\x8f\x99\na\x019^\"\x84\xb4\xaf\x9f3\x0d\xa2I\xcf\x08\x96\x05Pt@\xf9\x8d:8\x06N'\xfe}\xd0/\x01\xa25\xd9a\x95\xb4)\x1e=\x1e%\xc9\xfd\xd1c\xf4\xf9\xa9,\x1e>\x1c\xc6w\x87?\xe3\xfby\x8c\x9f\xaa\x87\xa7\x08\xc7\xf1l\xf6\xe9f^\xbd\x9fGO\xe4\xbd\x0d\xb2\xdf\xdb;\x12\xf5\xda\x8f\x1b\xe1\x14\x11\xca+\x90O\x08\xc2|\xeby\x89\xfe|\xf0\xf9\xb7O\x13|\xb8{4}\x7f\xb4\xfb\xe1\xe83\xde\xfd\xf4\x11\xff\xb6;%\x11>\x98\xec\x1f\x1d\x1c\x92}Q\xb2^\xc9\xb5\xc8\xfd\x96^\x93\xcb>\\\x0f\xee\x9e\x9c\\\xbe{Ln\x1fHbef \x81r,v\xd6\x15\xf6z3\xf4\xe8\xd3\xfe\xfb\xe9\xa7I\xb4\xfbq\xff\xe3o\xbb\x1f\xc8\xe4h\xf7\xf3\xd1\xc1t\xf7\xf0\xe0\xf0\xe0\xe3o\x07\xd1!\x89Z\x0c\x15\x83\xad\xc4R\x01\xe2\xe0\xee\xd1\xc9\xd4\xcf\xc5]\x12\xcd\xde\x17\x8f\x0f\xe9\x87\x0f?\x8f\xf6\x7f>\xdd\x94\x9f\xf2bv\x7f\xb7\x9c\xe6?\xa3\xdcE\x0e\x7f~\x991!K\x93e\xcd\x02Dy\xe2\x9eq}\x80\x93\"s\xe1'_\xc7\xb0\x8ak\xf7Y98\x992\xe4\xc2<\xbd\x8a\xec\xad\x86O\xae\xccP\x92e\xb7L:[\xa0\xc8d\x1f\xe1\x90\xf4\xe1\xe1{\x07@\xdbk\x9e\xdf\xc0V^\x03\x1d!\xc8\xa6 \xbe\xe1\xaaE?-\x90\xa9\x9fq2\xdd\xaaT\x00\x91\xdaMF\x11\x15\xa4\xd6@\xea8W,\xb2\xb4\xb0Fyhtd\x02\xfc\x061\xc8L\xda\x0f\xf1\xc8\xbfm\x8a\x95XD\x1e\x05B\xde#\xfdsr\xa8\x85\x90\x9bA\xf2\x87\x9cB\xe7\xc5)\x07\xc1\x03\x8bB\x8cP3\xe3\xb4P\xd033\xa2\x85\x10d\xa58\xf3\x8d5\x8c\x14-\xb3*\x97\xa6R\x93\x0d~\xacdz\xd7\x85\xe4 \xaa\xa3\xfd\xc4\x7f3\xce\xc8\x08q\x82\xfeY\x91|\xb9\xa7\x8a\xfd^\x9c\x7fi\x01\x13\x99\xa5\xf5\xf0*\xb4\xd7\xf8Y\x03\x9b\x93\x14U)y\\\x90\x88Y{\xe2m)5\xb2\xd1\xa7\x88fd\x8e\x9b3\xe7\xb4\xfd\xdcv\x1f\x87\xdf\x9d\x7f\x8f<\x8f\xb2\xd8\"|E\x07W\xc9s\xb5PhZ\xbe?\xec\xf0\xc7Q.\xdc\x83CLJL\x93\x0d\xa9\xc9\xc1\xba_W\xb9\xf3U\x9b\xa0n\xe4\xa9\xac\x83{[]\x10\x0b\x9c\xe39)In\xe0\xbc+\xf4\xb7i~\xbb\xd6`kG\x0c6\xd8\xc75\xd3iz\x8c\x16\xb84#-\xd9^\xa79\x89\x8fQ\x99W\xe6\xf6\xb0\xb2Mq@\xd9B@\xf2\xfbZ\xec\xc3\xect\x9f\xf98\xc4\x0eg\xdc\xbac\xb2\xc9\xca\xae)N\n8\xbf\xb4\x8d\x0d\xe5Xo\xa3|\xa8)\xae\xb9\xd6\x80f\xe1\xe0\xd8f\xf7\n\xc6\xb6\xcd\xc4\x1eq\xb6Z\xd7A\x8dy\x82\xdb\xdfkB\xaea4\x03W\xd30C\xdbr\xfa\x1db;\x0e\xa1\xbdk\x0f\xb9,\xa5\x0e[\xa4\x99\xdb\x973},ld\x19d\x93y\xd32\x92\x81\xac\x19hZ\xd7Ft\x03\xda\xcbr\xa0e\x1d\x0390\xc8\xa66\xac\xe7\x060\x87%\xbdN\xfaK|\xd3\xb0^\xfe)\xc7y\xb3\xc7\x04(Iq\x1a\x91\xbd9)q\x8cK\xbcw\x7f\xb0'V\xec\xde\xbf\x0cs\xe5\xff\xf6\xb8\x14x#\xe0\xdc\x10mv\x17\xd5|\x8e\xf3\xe5\xb1|\x94\xa3 8\x8ff\xea\x01P!:\x14\x9d.\x1e_\x19\xa1\xac;L\xee+\xb9\xbe#\x8a\x95\xd5ZO\xfc\xca\xa2\xf9\xe0\x96B\xd3D\xa8\xf5 \x03\x077\x0f\x04\xce\x86\xe6dxkX-\xfc\xb9Nsi\xdb\x06\x02\xfa?\xc6\xd0\xb2\x0cG\x0d\xd0\x98J\x1b\x8b\x19\x8a5*\x10\xabt\x0c\x8b\xb4\x1e\xf1\xdf\xd0\xe9T\x18\x00M\x9d_\xa3)\xdeKT\x8a+'e\x95\xa7\xfcM\x19+\x88\xd63\x00&\x18bs\x111\xd8-\x97dx\x94\x965\x0f\x19D\xb2\xd48r\xbb\xc6\xe0/\xdf\x943n\x17q\xebB\xb1e\xa7A\xdd\x8e|Q\xaf\xc6\x04\x1bo\x14\xd5(\xb1_\xf17\x8c\xe2,}S\x8a\x00\x07Y\xde\x07\x15\xcc~\xe1\xe0\x8d\xe5\x88\xd1\x04\xc7\xe6\x9d\x8a\x81\xa8\xfe\xd19\x87\xcf\xa8\xc3\x8d\x95-jI\xe9\xd5\x83\xe2\x8c\x14(\xcdJ\x94\xd09-\x1b\xba\x93a\xd6ZT\xf5X\x9d\x8a\x92\x86\xcc\xc8\nb\x9c\xce\xf8\x83A|^T\x16\xdb\x94\n\x92\x95\x0c\xaa\xfb\xfec\xa9|\x07;\x0d4\xf4\xf0\xe2\xf1\xa1R\x17E2\xc6\xbd$e\xd7X\xc0i\xbc\x97\xe5\x86\x9e\x10`\x18{s\x91\x85\xaa4C\xc7b\x90]e\x17\xb5\xbdt=\xad\xd3X\n\xd6\xf7\xbf(\x0e \xddi\x08\xf47\x87\xfb\xfbo\xdc^\x10#\x1b\xd7\xaayG\xf2\x7f8|\xc9\x0d\\\xf4\xf6e\xd3\xa2\xeb\x8c\xf2\x8f6\xdf\x12\n\xb9\x14\xfc\x0e\x85\xa0w\xdb\x13\xa3\x13rU\x84\xae\xb8\x10\xcc\xe1\x00\x8cz\x08\xa7Y\"\xf4C\x94\xec<\xfd\x1d\xe9\x8a\x0bb\xe1#t:_$\xfc\x81\xba\x02\x15\xf1\xed\xbb\x93@\x12!\xe2\xde\xa7|\x8a#\xe1\x9b\xe3\xb5,\xc5\xa3\\\xa2'\x11;D\x99'm\x0b\xa7\xd9\xbed\xc5\x0e\xbb\xac\xed\xa6\xd4\x1b\xb5\xa9\xaa\xd8\xec\x8b\x02\xe9-\x82\xbck\xd3\xf0\xbd\\\x968\x8dq\x1e\x9b\xeaE\xea;\xe1s\x9c\xe3\xfc\xd6\x12\xe8S7\xf5k\xdfv`\x13VT\x8bE\x967Jnr\xcc\xdf\xc9+v\\\x969\x9dT%As\xbc\xe4\xaeR\x0f\xc0 a\xd2=\xbd!1\x9a,9\x17\xa4N\xa8\xcb\xaaei\xc4\xec\x16&\xe7\nb\xf1\xdc\x89&\x9dD\xd7\\\xe6^\xe7Y\x92T\x8b\xd0\xb4\x86$;T\x03\xc0\xe7\xff/\xa9\x1ep\x92h\x11\xa0v\x84\xbc0JcD\xcb\xc2~\xe5\xdbl\xeaBE \xd5\x06\xa07\x85\x12\xadSJ\x92\xd8\xf3\x0e\xbf\x9a\xb6\xa4\xc8\x10I\xf1$\x11g~&\x92\x95\xae\xfaw\xee^\x16\x08\n\xa8\xbe5\x92\xea7\x9d\x14\x8d\xf6I\x83\xb1M\\\xf7\xf1\xba\xff\x84\x17.\xce\xb2\xd2\xa8^,\xae\xff\xa2,I\x087\x9c\x18\xdaRW8\x002\x02\xf8j\xe3\xf7\x1d\xb9\xb8\x00\xf1 \xaa\x1c\xb0\x9e\x08T\x18%\x0d@\xb5w/T\x84\xcd\xed\xb11.\x1d\xac\x7f\x0e9\xd2\xc2.\xb4\xe7t>w=\xf8+\xd7\xce\xd1\x1c\x0f%d\xae\x99\x8aPNeM\x91'+M\x03\x13\xff\xf0'\xa4\xad\x89 \xafp\xb3 \x88|%lB~m\x10?\xdc\xb9O\x08\xca\x86\xbe\x14\xe2P>\xe2X\xb4\x8d0\xc5}i[)\xb3\xd0\xb2\x00\xdc\x025\x9c\xaa\x0f\xc3\xbd\x0b- Z\x1dp\xbaeg,\x173k\x16\xb4\xc1\xd4{\xd0\x9c\xafe[\x07\xf2\xeb\xbd\xd7F\xa8}K\x05\x93\xdb\xd0l\xfa\x17g\nD\xbcCa\xc1Xb\xfc\xd7\x08Bb\xad\xbci\xa1\xda\xd4\x08\xfa\xb3\x07\x9cUM\xc2\xb9\xf5\x02\n\x02\x96\xb5>\xfe\xc2\x18a)\x0c\"u\x04\xa5\xe1X-m\xa2\xdd\xa9r>\xaf\xc7\xba\xf2H$6.\x96\x07\xd5Bx\x04\x84\xc2i\xb9\xa2\x81f\x17\xb8\xd5\xe1\xd1\x12\xe3\x8e\xdbg\xf9\xe9\xb7c\xeb\x82\xe4\x91\xbd\x84\x0b\xe8Q\x11[Ir\xc9x\xd7\xc6C\xea\xd0\x18f\xcff>\x02\x13t~\xa9\x06\x9cc\xf9\xe31\xa2#`\xf1\x11PO\xb9h\xe3\xc6H\x0c\x88\x92\xe8\xc9HX\xa4\xc4\n\xb1\x12\xc3\xa3%\x86\xc6K\x0c\x8d\x98\x18\x1c31(jbp\xdc\xc4\xc0\xc8\x89\xe1\xb1\x13\xc3\xa3'\x06\xc6O\xac\x1aA\xd1O\xc2\x8b\xe6\x8c\xa2\x00\xf4\xb5\xf7\x1c\x1aG\xf1l\x91\x14\xcf\x1dK\xf1\x1c\xd1\x14\x1b\x13O\xf1\"\x11\x15/\x14S\xb1QQ\x15\xaf#\xaeb\x03#+^6\xb6\x02\x1e]\x01\xbdWS\x0dz\xbf\xa6\xda\x981\x16p\xdbq\xa48\x8bA\x91\x16P,\xf5]\xa2t\xae\x10\xfe\xee\x96(\x9f\xc6\xff 2\x8f\xe8M\xca\xeb\x91\x05^\xfe\x0f\xa25R ^\x18m<\xeb\xb9\xccj\xf6\x99\x17\xfd\xf2\x9e\x11\xf6\xc4\x9a4\xefw\x18~4\xc2I\xb2\xac\x1f\xd7wv\x94\x9dF w\x0dg`u`\x11\x99\xa2\x94$\xe2R\x9eidf\x02D %i}\x1e\xe6\x11\x13^x\xdd%\x1a<\x04\xe3*\xa6^\xee\xf4\xa1\xe7\x0b?~\xc7h\xb2\xdcA\xd5\"\xd6\xff.\xe9\x9c\x14%\x9e/\x8a\x1d\xed>\x13\xc5\xfd\xfc\x8f_\x8ad\xabD>\xcf6\xcd\xdcd\x80O\xd8\xd0\xf3\xb5\xf0$\xc4\xd7\x8c\x88\x90\xe0\x04. d,\"\x06v\x97\xb1%\x04Z\xec1\x19\xc7D\xf6X\x17&Ae\xac\x00I\xcb|\xc9\x1fe\x93\xf8\x82h\x9a,G\xa4\x08&\x05\x10\xea<\x8eo\xfa\x15\x84\x89\"WOP\xc0!\x1dP\xe6\xfd\x99\\\x81\xaff\n\x13\\\x94\ni\x10a\x1b:\x8f<,\x8f\x8e8\x91Rd\xc0\x88u\x95Dj6\xa3@\xd2\xc7\x0f!\xb8`\xce0\xdbZ\xda.-9'8\xc3\xab\x8eG9\xb7\xfe\x01\xfe&.\xc3 \x8efr\xc6\xbd\x1d\x9ce\x9d\x9am-+\xc2\xa4[\xe2a\x89\xec\x0bm\x14)\xa0h\x96\xee z\x11\xb9\xf7\x1f\x93`\x18\x9e0\x15\xf7\x8di\xd7\x02Ex!\xacLk\xd4\x0e\xdb\x81^Pz\x9dgh\x8eo\x89\\\xea*w\x8f\xa9+\xb9\xb1\xc9\x12=\x90<0c8v\xfd\x00\xaat/\xa5\x01\xa5\xe3\xab\x0c[J[\x17\xf8\x06\xd3\xb4(\x8d\xd3\x8c\x13^\xd3\xf5\xcez\xe14\"\x9e\xe8\xb3+\xc3\xed\xfa@\x93\x04\xcd\xf0=1F\x92\x1c\xe61e\xa5:\x92R\xe2\x16\x0b4\xbd\xcf\x92\xfbf\xfax\xbb}?c'\xef\xbf$\xa7s\"\x13\xb1E(\xd8E#\xd2\x18a\x19\x81\xc6\xf6\x9f\x13`\x1d\x8f\x86\x15KEv\xbe\xe2/\xcfk\x9fg\xf7\xae\xa7w\xebK\x9eQ\x9e\xe3i\x81\x1b\x16\x11a\x8d\x89\xf0\x9b\x83\x00\x1b\nb?=\xff\x95W;pK#\xe0\x0exh\x16\xd8p[\x96\xc6\\\x84\"\x19\xd6JS@\xc8u\xd0\x1c\x1a\xce`\x82\x02q\x05\x12\xec\xb4!\x9c\xe9\x06I\x19_\x80o$\x18\x8b\x07\xcc!\xf9\xcf\xd7\xc1#\x03\xd9\xda!a|\x93|\xf2\xc2kn2\x10\x9f\xfc\x81\x1e`\xe6\x0c\xa1z\x84X\x8f~\xbbf\xa4\x850\x84\xd6\x95\x82=\x9c\x0b\xc5C\xb2\n*\x1c\xf3M\x9f\x06P4\xf6\xbb\xa7\x90\x99\x04\xe9J\x04\xd4\x97\x08AB\xb5E\x03.\x0d\x04\x97\x13h=\xc1\xdb\xa2\xe9\x99\n\xebN\xf4<\xd4\x01\x8e3-\xa4\x87kR\x13\x18\x90O0m\x8a6\x8fWc\xe8V\x84\xb6\x0f\x9f\xc2)\x1fy\x91\x0c\xa3|E}\x82\xecK\xc8N~\xe7\xd1\x9b1\xceZV\xa0\xe3\x9d\xb8\xecQmk>\x80\xb5i\x1a\xc1\xd6\x00\x8a\x10(\xd7Q\x8f\xc7\xdf\xc2\x17Z\xa8\xe3\xba\x08*\xa7\xce\xb4\x87\x15\xd4\xe6pje\xc5\xd4\x06\xd8\x83OQ\xafw\xb56\x88g]\xc4\x11\xe017K\xafVD\xfbP^\x86\x14\x17\x90u\xc3y\x02QZ^p\xabP?\xd2\xc2\x19N\xfd\x8a\x8a\x0b\xb0\xbcl\xac\x80\xe0+\x9d\x8e\xee\x17\xd8\xb4\xefj\x0dO\xb0Yq\x92\x03z\x1ef\xab\x7f\xd1H\x87~Km+\xc8\xac\xd4\xd9\xfe\x0bw\xdev\x17\x86X\x0e\xcf\x9b\x1f \x90q-\xd2\x91T\xf5\xb3\xc7b\xec\xd5K\xa2\x0e\xa6\x16\xa4\xbeC\xe8O^\xc4@\xa6\xa6{a\xc9\xf8}Ka\x8d\x93\xa4\xc8\xd0m\x9a=\xa4\x08\xb3U\xfb\x8d\x99?\xde \x8d\x97p\x18\xc38V\xa7'\xa8M\xa7n;T^B+\xf7 05\xaf\xd1[^/\x93\x9634\xa5IIr\x12\xa3\xdb{\xa5\xd7K\x92\xe32\xcb\xdd\xc1e2r\xdd\xcb.\x10\x81\x12\x90\x922\x0d{WQ&\xa6\xda[\x08BK\x9ae\xf3\x0e*\xe3\xd1|\xd9t*\xe3\xe6\x9ao+B\x99\x15\\\x14\xa3\xb9a\x80I\x15\xc0\xa5\x88\xc0\xd3\x80P\xe7^\xbd\x13\x02\xc9\xa7Cm\xd9 49\xb1\xde\xdf\xcdp1\x1b\x9f\xd4R\xbe\x94\xce\x89H\x8d\x8a/j\xad\x05\x93-BB\x11\x0d\xc2\x0b0\x05X\x84\xabY\xee\xae5\xf2o\xd9\xc0\xfcUx\x7f\xec\x12k:<\x8dm\x82\xd6lF\xd9|\x9e\xa5|<\x7f\x0c\xa9x\xcf\xeaE\xd8!\x86\x16\xe1i\x8a\x8c\xfa\xae\xb4\xcc W\xca\xaa\xe9Z\xd5\xe8\xad\x00\xfbk}E\xcb\xf9\xb4\xa7Y\xe3\xbd\xabU\x8d\x89^\x9a\xdeg\xb7\x9e\xb5D\xd3EU\xbe\xda\x04/\xc8.\xe85\xf1\x10S\xaf\xdd\xbe\xb3i\x17\xa5\x8dT\x99s\xfej\x0dMo\xd1\x04G\xb7\xb28<\x00\x12\x8fQ\xe0\xa9\x1a|\xd1\xf8=\\\xfa%\x82\xb0\x8b\xab'\x0b\x80\xe6\x81h\xf0\xadb\x11\xdfR\xd1\xd71\xe3\xdf@\x89\x16_\x8b\x12O\x12Z\xccH\xac\x82\x19BA\xe6\x109\xde\x93M})\xb7\x0b|J\"\x9e\x88`X\x15\x00x\x8cQ\xe8<\xcf\x16Y\x01\xe7\x81\x16\xcb\xeba\x04\x7f\xe6q\xa1p\x9ar\x8f^\x99W\x11\x8f&\xe26\xd2\x1c\xe7\xc5,\x10\xb4\x8ePQ\xe2\xb2\nn\xfd~\xfc?\xd5\xb9.t*\xcc&.\xf8\xb8\x88T\xcbP!\x0d\x9a\x00\x9d\x86\xf1\xb3\xe2qC\"F\x9eM1\xbf%[Ta\xf1\xdc\x8b\xc7\xf0\\\xc9\x8b\xaf_\xce.~\xbf>\xfd~\xfe\xe3\xea\xfa\xf2\xea\xe4\xea\xc7e\xaf\xfc5\x17\x8c\xf3\x8b\xb3\xf3\xb3\xcb\x15\x00\x88o\xc1\xee:\xffnUB\xfaK\xf2 \xf3 3\x10\x00a\xa4]\x01\x12Bx\xb4\x17Nh\xbcW\xa5\xe2\xbc(\xd6-[;\x80\xce\x81\xa9\xb4\xf3X\xfd\xb5\x9d f\xec\x98\x14\xe1|B\xcb\x1c\xe7\xcbZ\x82\xf1j\x85\xfa\xcc'\xb6\xc2p\x1c\xc57;\x86\xe2\x9b\x1d?*6t\xc3\x02[\xe4\xe4\x9efU\x91,;[\xddH\xaa\xf2\xe2*\x85\xcdU\x8e\xa3[\xe1\x11\x13\x96\x93>\x01\x12\xa5\x93\xa0\xa72\x90\xf42\x07\xe9\xd8\xd9\x8c\xb6hF\xc9\xbdx),\xab\xca\x90\xd8\xc9R\x10v\x02\xd2\xab\xb5\n_X\xd7\xff\xa7\xd4\xf3\xa5\xaa\xac*\xd8 +\xd3 \x9a\xe8\xb1\xa7\xbd\x00m7\xd4\x0bh\xd0K\x0eS\xd1\xa5\x96`\xed\xc6\xa8\x0f\x84\x00`u~\x93\xe4\x8d\xdc\xca4\xbdQ\x8f\xec\xecL1M\xaa\x1cp\x84DL\x0d/H\x1a\x83&\xb2\xcf\xac\xf7Q\xba\x97?\xfe\x18\xa4\xa5\xba\xbd\xcfO.a)\xf5\xcdn\x97\xffuz>\xa0\xdb\xb7\x93\xd3?\x82\xdd\x0c\x9d<\x94\xcea\xda\xd81\x1adR\x9c\x9d\x1b\x1a\x18UiA\xc2\xb6\x1a\xbf\xcd\xe8\x93E\xdf\x9d\xd26\xf3\xd8\xb7\x86\n#\xc6nb\x1a\xb4~mj\xc8\x90l9\xb4\x87d\xdf\x8c!5I{Q\x96\x164V\xde\x07>\xf8-\xe5\xb7\x16\xb1xukN\x8b\x82mN\xa9\x8f\xb2\x1c\xc5$\xc1K\x12\x03\x13\x13\x1dH\xb2\xc5\xd7F\x92}s\xf2\xa5\xbeP\xb4b\xced\x86+\x00]5\xa8\xd0\x13\x87\xaa3!\x9fH\x1a\xe1EQ%\x1a%)\xb7\xf8)\x16\xe2GD\xb5\xe5\x01\xc8I\x86\xe1(px[\xfc\x8a\xea\xd7\xe0\xab\xa4\xe4BZ\xb2L<\x9d\xaa\xc5u`\x96\xd8O\xc5AFu\xa8\x8b\x14S\x98\xe9\xf0:*+\xb5\xb1T\x0c\xac\xef2\x00z\xb6\xb0\x16a\xb2\x16Z\x92\x97G\x0ep\xe1\xd9>\xd1W\"\xd9\x94[\xae|\xcaqY\xe2h&F\xab_\x0d\xccr\x9e\x10\xe5\x84\xd5\xdc1r\x1d\xf3\xb3{0]\xbb\xc1b\xfd\x00\xa3\xd8\x0f\xa9th\xc8\xcf2\xc7\xc9N\xb2v\\\x8d\x12\x9e\xd4\x84\x16\x88K2\xe2\x8f\x9c\x00\x1bK`\xcdqH \x1f\xde\x1a7\x8a\x1e\xdf\x19Z$'4\x18.TO\xc3&\xc7 \xb5\xb1\x1c\x1e \xa4!AX\x02\x0bG\xdc\x04\xb6\x8c\x11\xa4Z/\x1b {\x84\xb3 \xe8\x9b\xdc\x04\xfe\x18\xa8*\x06I\xaf\x1f\xff\xb4\x16\x0e\xbd@\x1c\x941r(\x00j\x8c\x9d\xf2\ns \x00T\x81\xb4\x04\x02j\n\xb4M\x81\x90\xed\x19\xa8\x0b\x9e\x0e\xb6)\x10\x83x5\x86vAh\x9b\x02\x01\xa7|\xe4E2\x8c\xf2\x15#IQ\x9f\x14\x08)\x97\xc7L\x80\xb0\x80\x1c/\xfdA\xda\xd7\xcf\x99\xfc\xd0\xa4g\x04\xcb\x02(:\xa0\xfcF\x1d\x1c\x03\xa7\x13\xff>\xe8\x97\xf6\xd0\x9a\xec\xb0J\xda\x14\x1e\xad\xac\x88\x9a\xe0\xc0\x1cZK\xd4\xfa\xfa\xb9\xb5\xaed\x87\x81\\|-G \x0b\xbe\x96s\x90\x17\xd2\x08\x0c\x0b\xe9s \x9b\x86\xd2?\x8a&\x87\xd2\xdd\xc9\xa3\x18\xf3\x8cd\x05\xee<+\x81@q\x81\x8bh\xec>3\x05I\x06i:\x04\xd4v\xa8g\xba\x1f\x82\xaf\x1f\x04\xdfj\xa8\xe7\xc4\xa0\x1e\xe9\x7f`@}u!\x1a\x96\x06\x886\x96\x83!\x1d\x19\x04X\xf6J\xe8B\xb04\xa8W\xca\xcba\x1a\xb4\x0b\xca\xa2E{B\xe87\x07!\xe5\x81\xfa\xb1|5>\x06UI\x10^\xef$K\xd4;\xd5\x10='GF8,\x02\x96\xea\xd0\xd4Cq-\xec\xce<\x94\xc7\xb9gK<\x14\xe3y\xf2\x0e\xf5\x0fVL;\xe4\x7f\xe9.\x92\xd6m\x12\xff\x95\x08\xc2\x8b\xb2\xc5\xb2\xb6\xf1\xc4\x1f\x9a\xc9M\xecO\x85\xbe\xb6\xeeR\xef5\x02\xfc\xaa\xdf\xef)\x0d\xae\xe50\xdf\x911\x08\x8ap\x8a\x08\xe55\xbb'\x04a\xbelw\x10yw\xe3\xda\x84\x9f\x0f>\xff\xf6i\x82\x0fw\x8f\xa6\xef\x8fv?\x1c}\xc6\xbb\x9f>\xe2\xdfv\xa7$\xc2\x07\x93\xfd\xa3\x83C\xb2/\x8a\xbc+\x99\x10\xb9_\x9f\x93j\\\x0e\xe8\xc3\xf5\xe0\xee\xe9\x86\xec?\xe1\xa7\xb2\xfaxT>\x1e=\x1e%\xc9\xfd\xd1c\xf4\xf9\xa9,\xee\x1e\x93\xdb\x07\x92\xd80\x0e\x17\xa0\x1a\x8b\xa1\xadrS5\xf9\xcdZt\x01R\xc5\x8f\x0f\xee\x1e\x9d\xc4~.\xee\x92h\xf6\xbex|H?|\xf8y\xb4\xff\xf3\xe9\xa6\xfc\x94\x17\xb3\xfb\xbb\xe54\xff\x19\xe56.\x04/cFbB\xeb\xeaE\xf3@I\x96\x06\x0b| \x0e\xee\x0e\x9d\x0cx\xf8p\x18\xdf\x1d\xfe\x8c\xef\xe71~\xaa\x1e\x9e\"\x1c\xc7\xb3\xd9\xa7\x9by\xf5~\x1e=\x91\xf76\xc82\xbbE\x95\xb5r\x98\xdc\x82\x0b\xbe\x8a\xf7\xdaF\xf1\xfc\x06\xc6\xaa6F\x82_\xd3\x04\xdfp\x89\xaa\xeb\xe8g\xea\x97\x1e\xed\xa1a4\xee/\xf4\xc1\xa5Xdia\x8dgPHHA\xbb9\\1U\xc3@\xa6(\x10}yB\x1e\x05\n\xde\xd3\xeas\xf2\xa4\x85\x90\x9b'\xf2\x87\x9cB\xe7\x9d \x07\xc1cfB\x8c\xa8\xe7\xc2\xa1?\xd133\xa2\x85\x10dq8Si5\x8c\x14-\xb3*\x97\x8a\xbc\xc9\x86\x06V\xbc\xd0\xec\x85d\x17\xaa\xa3\xd6\xc4\x7f36\xc8Hg\x82\xfeY\x91|\xb9'*\xd3^\x9c\x7f\x91\x89\x965l\x15\x92\xfa\x8bc\xa8\x93\x14U)y\\\x90\x88\x19\x1a\xe2%$5\x92\xd1\xa7\x88fd\x8e\x9b\xd3\xe24;\xdc&\x07\x87\xdf\x9d\\\x8fF\x88\xb2\xd8\xe2\xe8\x13\x1d\\\x05\xba\xd5*\xa0i\xf9\xfe\xb0\xf5Wgqk\x0f\x0e1)1M6\xa4\x96\x04\xeb~]\xe5\xce7X\x82\xda\x95\xa7`\x0e\xeem=:/p\x8e\xe7\xa4$\xb9\x81\xf3\xae\xc8:5\xd5\xb4k\x0d\xb66\xe1`\xc5>\xae:\xa7\xe91Z\xe0\xd2\x8c\x10d\x1b\x99\xe6$>Fe^\x99\xdb\xc3\xca6\xc5\x01e\xfe\x02\xc9\xefk-\x0f\xb3\x91}&\xe2\x10\x1b\x98q\xeb\x8e\xc9\"+\xbb\xa68)\xe0\xfc2\xac[\x17\xcf\xfe\xb7\xc5\xb3~\x06\xb1\xa5\xebXV\xf0\x88|h[m\xc0\xf53\xc8\xd83\xcd\xba\x064\x9093\x84\xe8\xae\x8av)\xef6?\xa4\xb1\xd5\x93\x1d}\xac\xbc\x96=\xd7\xdd\x1c/\xcf\x8c\x96\xa1\x06d\xc6@\xf3\xae6\xe4:k\xe3\xe58\xd0\xb2\xd0\x80\x1c\x18d\xd7\x19\x16\\\x03\x98\xc3\x9a['\xfd%\xbei(\xd9\x7f\xcaq\xde\xec-\xf2\xec\x9e\xa48\x8d\xc8\xde\x9c\x948\xc6%\xde\xbb?\xd8\x13Ky\xef_\x86V\xfd\xbf=\xb9\xdb\xdf\x08H7D\xdb\x87E5\x9f\xe3|y\xacJ\x87\x15\xa8 8\x8ff\xf2iE%%\x14\xb5.N_\x19qG-=&\xf6\x8fE\x97\xc1\xf5\x98W\x81\x81\x95\x17\xba\xa4s\x9a\xe0\x06n\xbf6\x90\xbbz\xc8\xd8\xd4\xf0wo\xb2\xa9gF\x9b\xdb\xcb\x9cJs#k\xd2\xd8\x8f\xe2,}Sr\x11\xc0#\x1dd\x9d\x1fT\xe09i\x89m;\xbf8\xf4\xb7L\xec*n\x1bC\xf3\xaaW\x1dn\"\xdc\x16\xc6\xaa\x9b\xd8vr5\xc5\x19)P\x9a\x95jY\xa1\xa2\x8af]~y\xd0ja\xc2\xdf\x0f\x9ad\xe5\xccX\xc2\x93\xaa\xacC<4\xa0\x98N\xf9'\xb5\x84\x0bs\xc9\xfec\xa9\xfc6;\xc6\x02\xa8\xc7*\xe4;E\xa5\xae\xa4d\xa0xI\xca\xfa\x0c\xa0:\xeeey\xc7\x12f\xf3\x90\x8b\xbc\xd5\xc6I\xa0q\x85\"\xfbj$\xc5W]\x82\xeb4\xaeM\x05\xf5\xfa\x992 \x0d;\xe5\xcd\xe1\xfe\xfe\x1b\xb7\x0f\xca\xc8\xe1\xb5\x1a\x94#y\x9f8e\x81\xab9\xabCP\xda\xfc\xc2\x0f\xa7\x0b\x95F\xea5(4\xcb\x92\xb8\x90\xb7tZ\xcd\xf5\xbd:\\\xfd\x1e\xcf\xe75\xf5\x84\x08\x85\x8a\xd3$\x8f\xe8\xa2\x11\xa2\xe9=)\xfa\xd3\xa3\xf7\xe9\xb1\xf5\xab\x9a\x9a\xb4\xa4\xe5R\xa8oMcT\x15e\x16S\x9cJB\xa5?\x8f3\xb8/\xa1|\xdf\x1fw\xbe\xb4\xeb\xcc-p^.%N\\i+-\xc5\xb4o\xcf!\xb5\xdc8\xb6~\x15\xdc\x15\x03\x8a\xe3_\x8a\xf0tJ\x13\x8aK\x82\xf0MN\xb8\x19\xd2sP)u\x8e-\xdf\xc4\x80\xdc\xea\xc1\x89\xb8\x90\x97/\xd2.k\xbb)\xcf\x12A\xfc<\xa5\x93\xaa@\x13\x9c\xde*\xad\xd8\x13\x95Z\x96\x1d\xdb?3\x84TE\x155\x0f\xe64\xe4d\x91\x93\x82\x9bbl\n\xeaj~\xd2\xa3\xda\xac(\x8d\xa3\x01\x9b\xba\x96\x9b\xc7\xf6\xcf\xcd\xf5\xf90\xa3\xd1\xcc\xe0\x93\xb6!\xd5\xae\xd7\xc5n)A$\xcd\xca@q\xeb.BZ \x1f[\xbf\xda\xd0\xe15$\xf9\x12\x16\xf5}\xc4\xfe\x80\x94\"B\xfa\xdd\xea\x90e\x11\x8eb\xa9\x1b$\x9e\xa5n\xd2V\xd3\x97\x18z\xfa\xdf\x14\xa8\xa07)\x16\x0fV\x17\x1aU\x0f<\x98\xddw\x82\xce\x8d]\xae\xacQ\xb6\x05\xf7x9n\xc1Ef\x17z\xc1\xb4\xab\xa4\x07+\xec\xf4\xd1\x83W\xfcX._\x8b\xae7\x02*\xb3\x05J\xc8=I\xe4\x91\"\x1c4\xad\x1c'\xc2\xa2}\xd7\x06\xcd}\x99\x8c\xcf\xdc\x91'\x0f\xfa>\xe1Z\xbfq\xbft?Q-La~\x9a\xb2\xbc\x90!0h\x9eU\xbd\xeb\xb4J\xd9\xd9\x8esY\xe1\x9d\xd0\xa2\x14\xf5\xb6\xcc\x8b`W\xcc$\xc3\xe4\x1aG\xfe7#F<\x84\x05,z\xf8:8\xd1LR!\xde\x8cp\xce1\\\x95\xb3,\xa7OB~\xe6$\"\xf4\xde\xb7\x10\xea\xba\xd4|^\xbaE\xfe\xb5C\xc2\x01\x84\xc7\xe0\\\xf3uw\x1d<\x1c\x8e\xcd\x87z\xa36U\x15\x9b}Q\x9f\xbdE\x90wm\x1a\xbe\x97\xcb\x12\xa71\xcecS\xbdH}'\x9e\xb4\x9f\xe3\xfc\xd6\x12\xafU7\xf5k\xdfv`\x13VT\x8bE\x967*~r\xcc\xf9\x8e\x10%\xbfr:\xa9J\x82\xe6x\xc9\xafL<\x00'\x84I\xf7\xf4\x86\xc4h\"\x1c\xeeR'\xd4U\xdd\xb24bv\x0b\x93s\x05\xb1\xe4\x1f\x88&\x9dD\xd7\\\xe6^\xe7Y\x92T\x8b\xd0\xb4\x86$;T\x03\xc0\xe7\xff/\xa9\x1ep\x92h\x11\xd0Lz\xe0\xf7\x1de\x81,\x81'\xed\xa6\xee\xdd\x94Pm\x00zS(\xd1:\xa5$\x89=\x8f\xff\xabiK\x8a\x0c\x91\x14O\x12q\xe6g\"Y\xe9\xaa\x7f\xe7\xbej\x81\xa0\x80\xea[#\xa9~HJ\xd1h\x9f4\x18\xdbDx%\x7fv\x80\xf0\xba\xc9Yf\xf8\xf4\x85%\x8d\xa2,I\x087\x9c\x18\xda\xdd \x15\xb31\x02\xf8j\xcbR\xa2\xef]<\x88*\x07\xac'J\x18FI\x03P\xed\xdd\x0b\xd5\x80s{ljed\xfdA\xd0\x91\x16v\xa1=\xa7\xf3\xb9\xc1D\xf3*\xbb\x1c\\\xbaGs<\x94\x0f\xbaf*B)\x9d5E\x9e\xa48\x0dL\xfc\xc3\x9f\x0f\xb7&\x82\xbc\xc2\xcd\x82 \xf2U\xd0 \xf9\xb5A\xfc\xc0\xdeDI\x10\x1b\xfaR\x88C\xe9\x90c\xd16\xc2\x14\xf7\xa5m\xa5\xc4F\xcb\x02p\x0b\xd4p\xa5\x00\x18\xee]h\x01\xd1\xea\x80\xd3\xadzc\xb9\x98Y\xb3\xa0\x0df\xfe\x83\xe6|-\xdb:\x90\xde\xef\xbd6B\xed[*\x98\xdc\x86&\xf3\xbf8S \xe2\x1d\n\x0b\xc6\x12\xe3\xbfF\x10\x12k\xe5M\x0b\xd5\xa6F\xd0\x9f=\xe0\xacj\x12\xce\xad\x17P\x10\xb0\xa4\xf9\xf1\x17\xc6\x08Ka\x10\xa9#(\x0d\xc7ji\x13\xedN\xeb\xf4y=\xd6\x95\x0e$\xb1q\xb1<\xa8\x16\xc2# \xf4\x12\xcf\xaa\xc2\xa3%\xc6\x1d\xb7\xcf\xf2\xd3O\xd7\xd6\xf5\xd0\x1d\x15d@o\x9a\xd8*\xa2K\xc6\xbb6\x1eR\x87\xc60{6\xf3\x0d\x9a\xa0\xf3K5\xe0\x1c\xcb\x1f\x8f\x11\x1d\x01\x8b\x8f\x80z\xcaE\x1b7Fb@\x94DOF\xc2\"%V\x88\x95\x18\x1e-14^bh\xc4\xc4\xe0\x98\x89AQ\x13\x83\xe3&\x06FN\x0c\x8f\x9d\x18\x1e=10~b\xd5\x08\x8a~\x12^4g\x14\x05\xa0\xaf\xbd\xe7\xd08\x8ag\x8b\xa4x\xeeX\x8a\xe7\x88\xa6\xd8\x98x\x8a\x17\x89\xa8x\xa1\x98\x8a\x8d\x8a\xaax\x1dq\x15\x1b\x18Y\xf1\xb2\xb1\x15\xf0\xe8\n\xe8\xbd\x9aj\xd0\xfb5\xd5\xc6\x8c\xb1\x80\xdb\x8e#\xc5Y\x0c\x8a\xb4\x80b\xa9\xef\x12\xa5s\x85\xf0g\xbfD\"\x13\xff\x83\xccx\xbbIy\x02\x997\x00\x1c\x85\xd1\x1a\xa9\x020\x8c6\x9e\xdbSf5\xfb\xcc\x8b~y\xcf\x08{\xe1M\x9a\xf7;\x0c?\x1a\xe1$Y\xd6o\xfb;;\xcaN#\x90\xbb\x863\xb0:\xb0\x88LjJ\x12q)\xcf423\x01\xa2\x84\x92\xb4>\x0f\xf3\x88 /\xbc\xee\x12\x0d\x1e\x82q\x15S/w\xfa\xd0\xf3\x85\x1f\xbfc4Y\xee\xa0j\x11\xeb\x7f\x97tN\x8a\x12\xcf\x17\xc5\x8ev\x9f\x892\x82\xfe\xb77E\xdaV\"_\x87\x9bfn2\xc0'l\xe8\xf9Zx\x12\xe2kFDHp\x02\x17\x102\x16\x11\x03\xbb\xcb\xd8\x12\x02-\xf6\x98\x8cc\"{\xac\x0b\x93\xa02V\x80\xa4e\xbe\xe4o\xc2I|A4M\x96#R\x04\x93\x02\x08u\xde\xe67\xfd\n\xc2D\x91\xab'(\xe0\x90\x0e(\xf3\xfeL\xae\xc0W3\x85 .J\x854\x88\xb0\x0d\x9dG\x1e\x96GG\x9cH)2`\xc4\xba*[5\x9bQ\xe7\xea\xe3\x87\x10\\0g\x98m-m\x97\x96\x9c\x13\x9c\xe1E\xcf\xa3\x9c[\xff\x00\x7f\x13\x97\xe1\x04G39\xe3\xde\x0e\xce\xea\\\xcd\xb6\x96\x15a\xd2-\xf1\xb0D\xf6\x856\x8a\x14P4K\xf7\x04\xbd\x88\xdc\xfb\x8fI0\x0cO\x98\x8a\xfb\xc6\xb4k\x81\"\xbc\x10V\xa65j\x87\xed@/(\xbd\xce34\xc7\xb7D.u\x95\xbb\xc7\xd4\x95\xdc\xd8d\x89\x1eH\x1e\x981\x1c\xbb~\x00U\xba\x97*\x1b[\xc5W\x19\xb6\x94\xb6.\xf0\x0d\xa6iQ\x1a\xa7\x19'\xbc\xa6\xeb\x9d\xf5\xc2iD<\xd1gW\x86\xdb\x95W\x12\x98\xe1{b\x8c$9\xccc\xcaJu$\xa5\xc4-\x16hz\x9f%\xf7\xcd2\x04\xed\xf6\xfd\x8c\x9d\xbc\xff\x92\x9c\xce\x89L\xe9\x16\xa1`\x17\x8dHc\x84e\x04Z\xa3\x9aE\xbb\xd5\xf1hX\xb1Td\x8f_\x9a\xf5.\xe6\xd9\xbd\xeb\xe5\xdf\xfa\x92g\x94\xd7\x80Z\xe0\x86EDXc\"\xfc\xe6 \xc0\x86\x82\xd8O\xcf\x7f\xe5\xd5\x0e\xdcj\x94\xa2\xb0\x07<\xc8\x99\x0d\x8424\xe6\"\x14\xc9\xb0V\x9a\x02B\xae\x83\xe6\xd0p\x06\x13\x14\x88+\x90`\xa7\x0d\xe1L7H\xca\xf8\x02|\xa2\xa1l\x94:\x81qH\xfe\xf3u\xf0\xc8@\xb6vH\x18\xdf$\x9f\xbc\xf0\xb2v\x1d\xa00\x9f\xfc\x81\x1e`\xe6\x0c\xa1z\x84X\x8f~\xbbf\xa4\x850\x84\xd6\x95\x82=\x9c\x0b\xc5C\xb2\n*\x1c\xf3I\xa1\x06P4\xf6\xb3\xab\x90\x99\x04\xe9J\x04\xd4\x97\x08AB\xb5E\x03.\x0d\x04\x97\x13h=\xc1\xdb\xa2\xe9\x99\n\xebN\xf4<\xd4\x01\x8e3-\xa4\x87kR\x13\x18\x90O0m\x8a6\x8fWc\xe8V\x84\xb6\xef\xae\xc2)\x1fy\x91\x0c\xa3|E}\x82\xecK\xc8N~\xe7\xcd\x9d1\xceZV\xa0\xe3\x9d\xb8\xecQmk>\x80\xb5i\x1a\xc1\xd6\x00\x8a\x10(\xd7Q\x8f\xb7\xe7\xc2\x17Z\xa8\xe3\xba\x08*\xa7\xce\xb4\x87\x15\xd4\xe6pje\xc5\xd4\x06\xd8\x83OQ\xafg\xbd6\x88g]\xc4\x11\xe0-9K\xafVD\xfbP^\x86\x14\x17\x90u\xc3y\x02QZ^p\xabP?\xd2\xc2\x19N\xfd\x8a\x8a\x0b\xb0\xbcl\xac\x80\xe0+\x9d\x8e\xee\x07\xe0\xb4\xefj\x0d/\xc0I\xd8\x9e\xd7\xde\xd4\xe8\x8e7\xd5d\xf6nwn\xc5\x8c>o\x88\xbf@\xc6\xb5\xceF\xd2\xb6\xcf\x1eN\xb1W\xcfj\x1d\x0f-\xeb\xad\"\xf4'\xafC \xb3\xcb\xbd\xb0d\x08\xbe\xa56\xc6IRd\xe86\xcd\x1eR^\xba\x16}c\x16\x8c7\xce\xe2%|\xbe0\x8e\xd5\x19\x06j\xe5\xaa\x0b\x0b\x95Z\xd0J\x1f\x08\xc8<\xcdk\xf4\x96\x97\xbc\xa4\xe5\x0cMiR\x92\x9c\xc4\xe8\xf6^\xa9\xe6\x92\xe4\xb8\xccrw|\x98\x0c>\xf7\xb2\x0bD\xa0\x04\xa4\x04E\xc3dU\x94\x89\xa9\xf6\xd6r@u\xe5\xe4\xc65R\xc6\x03\xf2\xb2\xe9T\x86\xbe5\x1fX\x842+\xb8(F\xf3\xa4\x00\xf3\"\x80K\x11\x81\xa7\x01\xa1\xce\xd5x'\x8a\x91O\x87\xda\xb2Ahrb\xbd\xbf\x9b\xe1b6>\xa9\xa5|k\x9d\x13\x91\x1aE[\xd4Z\x0b\xe6K\x84\x84\"\x1a\x84\x17`\n\xb0\x888\xb3\\?k\xe4\xdf\xb2\x81y\xd1i\x7f\xf8\x11k:\xc2\x8c?^\xd0\x9c\xcd(\x9b\xcf\xb3\x94\x8f\xe7\x0f\x03\x15/\x8b\xbd\x08;\xc4\xd0\"\xc2L\x91Q_w\x96\x19\xe4VX5]\xba\x1a\xbd\x15`\x7f\xadoY9\x9f\xf64k\xbc\xd7\xad\xaa1\xd1K\xd3\xfb\xec\xd6\xb3\x96h\xba\xa8\xcaW\x9b\xa3\x05\xd9\x05\xbd&\x1efA6\xdbw6\xed\xa2:\x91\xaay\xce&>\xa1\xe9-\x9a\xe0\xe8VV\x95\x07@\xe2a\x06<\xdb\x82/\x1a\xbf\x93J\x97\xf3\x0f{\xa9z\xb2\x00h\x1e\x88\x06\xdf*\x16\xf1-\x15}\x1d\xf6\xfd\x0d\x94+\xf1\xb5(\xf1$\xa1\xc5\x8c\xc4*\x1e!\x14'\x0e\x91\xe3=\xd9\xd4\x97r\xbb\xc0\xa7$\xe2\xb9\x04\x86U\x01\x80\xc7\x18\x85\xce\xf3l\x91\x15p\x1eh\xb1\xbc\x1eF\xf0\xd74\x17\n\xa7)w\xca\x95y\x15\xf1\x80 n#\xcdq^\xcc\x02q\xe7\x08\x15%.\xab\xe0\xd6\xef\xc7\xffS\x9d\xaeB\xa7\xc2l\xe2\x82\x8f\x8bH\xb5\x0c\x15\xd2\xa0 \xd0\x99\x14?\xf93!2\xcc\x9dM1\xbf\xe8ZTa\xf1\xdc\x8b\xc7\xf0t\xc7\x8b\xaf_\xce.~\xbf>\xfd~\xfe\xe3\xea\xfa\xf2\xea\xe4\xea\xc7e\xaf\x144\x17\x8c\xf3\x8b\xb3\xf3\xb3\xcb\x15\x00\x88o\xc1\xee:\x85nUB\xfaK\xf2 \xf3 3\x10\x00adN\x01r:x\xc0\x16Nh\xbcW\xa5\xe2\xbc(\xd6-[;\x80\xce\x81\xa9\xb4\xf3X\xfd\xb5\x9d\xe3e\xec\x98\x14\xe1|B\xcb\x1c\xe7\xcbZ\x82\xf1\x82\x83\xfa\xcc'\xb6\xc2p\x1c\xc57;\x86\xe2\x9b\x1d?*6t\xc3\x02[\xe4\xe4\x9efU\x91,;[\xdd\xc8\x8b\xf2\xe2*\x85\xcdU\x8e\xa3[\xe1\xd4\x12\x96\x93>\x01\x12\xa5\x93\xa0\xa72\x90\xf42\x07\xe9\xd8\xd9\x8c\xb6hF\xc9\xbdx\x1d%\xab\xca\x90\xd8\xc9R\x10v\x02\xd2\xab\xb5\n_X\xd7\xff\xa7\xd4\xf3\xa5*\x8e*\xd8 \xab\xb4 \x9a\xe8\xb1\xa7\xbd\x00m7\xd4\x0bh\xd0K\x0eS\xd1\xa5\x96`\xed\xc6\xa8\x0f\x84\x00`u\x8a\x92\xe4\x8d\xdc\xca4\xbdQ\x0f\xee\xecL1M\xaa\x1cp\x84DL\x0d/H\x1a\x83&\xb2\xcf\xac\xf7Q\xba\x97?\xfe\x18\xa4\xa5\xba\xbd\xcfO.aY\xf1\xcdn\x97\xffuz>\xa0\xdb\xb7\x93\xd3?\x82\xdd\x0c\x9d<\x94\xcea\xda\xd81\x1adR\x9c\x9d\x1b\x1a\x18UiA\xc2\xb6\x1a\xbf\x90\xe8\x93\x08\xdf\x9d\xd26\xf3\xd8\xb7\x86\n#\xc6nb\x1a\xb4~yj\xc8\x90l9\xb4\x87d\xdf\x8c!5I{Q\x96\x164V\xde\x07>\xf8-\xe5\xb7\x11\xb1x\x85kN\x8b\x82mN\xa9\x8f\xb2\x1c\xc5$\xc1K\x12\x03s\x0b\x1dH\xb2\xc5\xd7F\x92}s\xf2\xa5\xbe\x13\xb4b\xced\x86+\x86\\5\xa8\xd0\x13\x87\xaa3!\x9fH\x1a\xe1EQ%\x1a%)\xb7\xf8)\x16\xe2GD\xb5\xe5\x01H+\x86\xe1(px[\xfc\x8a\xeaw\xf8\xab\xa4\xe4BZ\xb2\x8c?FX\x8b\xeb\xc0,\xb1\x9f\x8a\x83\x8c\xeaP\xd7\x19\xa60\xd3\xe1u\x14Gjc\xa9\x18X\xdfe\x00\xf4la\xad\xa3d\xad\x95\xa4\x1e\xeb\xb3\x03\n\xcf\xf6\x89\xbe\x12\xc9\xa6\xdcr\xe5S\x8e\xcb\x12G31\x9aNEe{\x93\xe0\xc8]\x19\xbb\xb9c\xe4:\xe6g\xf7`\xc6u\x83\xc5\x12#\xc9\xb9,\x95\x0e\x0d\xf9Y\xa6)\xd9I\xd6\x8e\xabQ\"\x8c\x9a\xd0\x02\xa1EF\x08\x91\x13`c \xac9\x94\x08\xe4\xc3[\xe3F\xd1\xe3;\xa3\x83\xe4\x84\x06#~\xeai\xd8\xe4P\x9f6\x96\xc3c|4$\x08K`\x11\x85\x9b\xc0\x961\xe2L\xebe\x03d\x8fp\x16\x04}\x93\x9b\xc0\x1f\x03U\xc5 \xe9\xf5\xe3\x9f\xd6\xc2\xa1\x17\x08e2F\x0e\xc50\x8d\xb1S^a\x1a\x03\x80*\x90\x96@@M\x81\xb6Y\x0c\xb2=\x03u\xc1\xd3\xc16\x8ba\x10\xaf\xc6\xd0.\x08m\xb3\x18\xe0\x94\x8f\xbcH\x86Q\xbeb0(\xea\x93\xc5 \xe5\xf2\x989\x0c\x16\x90\xe3e0H\xfb\xfa9\xf3\x17\x9a\xf4\x8c`Y\x00E\x07\x94\xdf\xa8\x83c\xe0t\xe2\xdf\x07\xfd2\x17Z\x93\x1dVI\x9b\xc2\xa3\x95\x15Q\x13\x1c\x98Ck <_?\xb7\xd6\x95\xaf0\x90\x8b\xaf\xe5\x08d\xc1\xd7r\x0e\xf2B\x1a\x81a!}\x0ed\xd3P\xfaG\xd1\xe4P\xba;\xa9\x10c\x9e\x91\xac\xc0\x9dg%\x10(.p\x11\x8d\xddg\xa6 \xc9 M\x87\x80\xda\x0e\xf5\xcc\xd8C\xf0\xf5\x83\xe0[\x0d\xf5\x9c\x18\xd4#\x83\x0f\x0c\xa8\xaf.D\xc32\xf9\xd0\xc6r0\xa4#\x83\x00\xcb^9Y\x08\x96\xc9\xf4Jy9L\x83vAY\xb4hO\x08\xfd\xe6 \xa4\xa1\xfa\x81DU+\xe3\xc2\xc6F\x9d\x9e\xf8\x96N\xd5;\xd1$\xfe\xb5\x9b\x84\xc8\xff\xd2]2\xad\xbb%\xfe+\x11\x92\x17e\x8bem\xf1\x89?4S\x9d\x04R\xae\xbc\xc7\x80I\xe07\x04\xfc~\xd3\xe0\xca\x0e\xcf\x022\x06A\x11N\x11\xa1\xbc\x08\xf7\x84 \xcc\x17\xf1\x0e\"\xefn\\[\xf2\xf3\xc1\xe7\xdf>M\xf0\xe1\xee\xd1\xf4\xfd\xd1\xee\x87\xa3\xcfx\xf7\xd3G\xfc\xdb\xee\x94D\xf8`\xb2\x7ftpH\xf6E\xd5v%!\"\xf7srR\xa9\xcb\x01}\xb8\x1e\xdc=\xdd\x90\xfd'\xfcTV\x1f\x8f\xca\xc7\xa3\xc7\xa3$\xb9?z\x8c>?\x95\xc5\xddcr\xfb@\x12\x1b\xc6\xa1T\xc4\xb1\xd8Y\x17\x99\xeb\xcd\xd0\xa3O\xfb\xef\xa7\x9f&\xd1\xee\xc7\xfd\x8f\xbf\xed~ \x93\xa3\xdd\xcfG\x07\xd3\xdd\xc3\x83\xc3\x83\x8f\xbf\x1dD\x87$j1T\x0c\xb6\x12K\x05\x88\x83\xbbG'S?\x17wI4{_<>\xa4\x1f>\xfc<\xda\xff\xf9tS~\xca\x8b\xd9\xfd\xddr\x9a\xff\x8cr\x179\xfc\x05b\xc6\x84,M\x965\x0b\x10\xe5)p\x86#\x1e'E\xe6\xc2O>\x10a\x15|\xc1{\xa6\x91\xe6\xb4u\xab\xa4\xd9\xaf\x84f\x83\xcf>\x10\x07w\x87N.?|8\x8c\xef\x0e\x7f\xc6\xf7\xf3\x18?U\x0fO\x11\x8e\xe3\xd9\xec\xd3\xcd\xbcz?\x8f\x9e\xc8{\x0f\x03\xdc\xa7\xefq\x19`\x9e\x9aE\xd6X\xc3\x17XfhJS.\x10\x03+\x93\xeb\x8dT\xda\xb2b~e\x92\xb1\xa5\x83\xccN\x12\x1eT\x1f\x99\xbe\x17\x07\xb4\x81\xe9\xf9\x0d\x8c\x17\x0dt\xc4r\x98&\xf8\x86\xd3\xa4\x1f1\xc8\xd4\xcfP\x19xFS\xea7\x19\xf2T\x10#\xd5^\x1d>\x8bE\x96\x16^\xd6He\xb99\xcc1\xd5{\x88=\xde5\xa7\xce\x8a=\x19C\x1e\x05\x1e^\xb7\xc3s2\xa6\x85\x90\x9b1\xf2\x87\x9cB\xe7\xe5.\x07\xc1\x83\x9fB\x8c\xa8'\xc4a\xfa\xa0gfD\x0b!\xc8\nq\xe6Dk\x18)ZfU.m\xb0&\x1b\xfcX\xc9\xa2\x1a\xc5\x85d!\xaaC\x12\xc5\x7f3\xd6\xc80v\x82\xfeY\x91|\xb9\xa7\xfa\xa0\x8b\xf3/-p\"\xff\xb5F@\x05 \x1b?k\xe0s\x92\xa2*%\x8f\x0b\x121CR<]\xa5\x866\xfa\x14\xd1\x8c\xccqs\xee\x9cf\xa5\xdb\xa4\xe4\xf0\xbb+\xc0\xa3#\xa2,\xb6H\\\xd1\xc1UQ]-\x15\x9a\x96\xef\x0f;\xfcqT#\xf7\xe0\x10\x93\x12\xd3dC*\x87\xb0\xee\xd7U\xee|4'\xa8oy\xc2\xed\xe0\xdeVG\xc9\x02\xe7xNJ\x92\x1b8\xef\x8a\x1cc\xd3rq\xad\xc1\xd6\x9e\x18l\xeb\x8ck\xe1\xd0\xf4\x18-pi\xc6\x83\xb2\xddNs\x12\x1f\xa32\xaf\xcc\xedae\x9b\xe2\x80\xb23\x81\xe4\xf7=\x0d\x0d;\x03\xf9L\xf3!g\x1c\xc6\xad;&\x9c\xac\xec\x9a\xe2\xa4\x80\xf3K\x9f_\xa0\x1c\xeb}\xe0\x19z\xcc\xd1\\k@\xb3pp\xec#\xcd\n\x07\x19\xdb\xf1e\xc4\xd92\x0cs\xe0t\x0d6\xe5\x0d\xa3\xddJa\xd7\x80\x1f\x91\xce\x86\xd1\x0d\xa4t\xa8\xa1n\x98\xe4\x0dxp+t\x08\xe1]\xcb\xcaes\xb5y\"\x0d\xe5\x9e\\\xe9c\xa1\x1b\xb6\xf8Fs\xa4ed\x0392\xd04\xaf\x8d\xf06O^\x90\x03-\xeb\x1a\xc8\x81A6\xb9a}7\x809,\xf1u\xd2_\xe2\x9b\x86\xed\xf3O9\xce\x1e\x93M$\xc5iD\xf6\xe6\xa4\xc41.\xf1\xde\xfd\xc1\x9e\\\xce{8\x91\x86\xdc\x0d\xd16zQ\xcd\xe78_\x1e\xab\xea\x14'I\x82rR\xe6\x94\xdc\x13&\xe0\x13\xb5\x19\x14q\xba\xfc\xcdilv\xfaE\x91(\x96\x82\x81\xdf\x9b\xc3\xfd\xfd7\xee#\x81\x91@g]H#\x1d\x06\x9c.\x83\x970\xab\x052~\xb3x\xe5\xf0\xb1\x91bT\xc2iOh[\x90\xaf\xd1`\x1c\xdb\x16\xe4\xdb\x16\xe4\xb34\xe0RD\xe0i@h[\x90\xafn!\xa1\x88\x06\xe1\x05\x98\x82mA\xbeF\xdb\x16\xe4\x13\xedeJ\xaf@vA\xaf\x89\x0f\xf9\x9dmm[\x90\x0f\xb6U\xb6\x05\xf9\xb6\x05\xf9\xb6\x05\xf9\xea\xd6\x8b\xc7}j\x03\xadV\xc7.T\xc5m0\x80mA\xbemA>8\x8e\xdb\x82|h[\x90\xcflp\xab\xf0\x85u\xfd\xb6 _\xb0m\x0b\xf2yzo\x0b\xf2\x89\xb6-\xc8\xb7-\xc8\xb7-\xc8\xe7i\xdb\x82|f\xeb#`\xdaX\xa2mA\xbemA>\xdd\xb6\x05\xf9\xb6\x05\xf9\xc2\x89\x7f\x1a\x12\x84%\xb0\xe28\x9b\xc0\x961J&\x95\xb0ze\xf5\xa0\xaf\xa5\x1aE\xb0\x10\xc5z8\x14\xca \x06\xf2e\x00\xc1\xc1t\xe1\x91v\x8a.\xb74f\xb1\x89\x06P\xb4-\xc8gm\xc0\xcd\x82\xda\xbc7\xc3g\xadz\xa3\x110\xed7\xc9\xf5D\x855\x07z\x1e\xea\x82\xa7\x83mA\xbeA\xbc\x1aC\xbb \xb4-\xc8\x07\xa7|\xe4E2\x8c\xf2\x11j,X\x96\x90\xf7p\x01\xa9^\x04%\xc6\x022p\xccp\x82\xda\x16\xe4\x03\xf0\x1bup\x0c\x9cN\xfc\xfb\xa0_\x11\xa2\xd6d\x87U\xd2\xa6\xf0heE\xd4\x04\x07\xe6P\xbf\xda.\x1b\xc3\xada\xe5\x84\x82\xa5\x84\x86r\xf1\xb5\x1c\x81,\xf8Z\xceA^H#0,\xa4\xcf\x81l\x1aJ\xff(\x9a\x1cJw\xa7\xba\xd0\x98g$+p\xe7Y \x04j[\x90\xcf\xd5\xfaL\x0c\xda\x16\xe4\xb3\xb4U9\x18\xd2\x91A\x80\xe5\x8a\xa5\xcfz\xebK\xb4\xb9\xbc\x1c\xa6A\xbb\xa0\xb6\x05\xf9\xb6\x05\xf9\xb6\x05\xf9\xc2\x05\xf9\x04\xe8\x02\xe1\\\x04|\xb5J\xee\xb5{\xbf\xb6\xaay\xdb\xda?\xfa\x97\x7f\xf3\xda?\xa2-\xf0\x0dM\xb9\xa1b\xe7\x00\x0c\xf7\x1a\x8aH\xaf`F\x13\xef\x83\x13\xf3ou1\x16\x19k\xe7\x122\x12\x7f\xbbt\x0dZ\xada{\xf5\x96,\xdd\x92\x18$\x83A&\x00\x8cyH $&\\\xa4\xb8\xe4\xa4\xacrY\xd6\xf3\x1c\xdf\x10U\x81\xe9]J\x1e\xcbk\xf6\xe32\xf3@\x9b\x90\x1b\x9a\xbaj\x06\xb2\xc6s\xcdU\xdc\n\x83\xc9f\x89\xa0yV\x94\x88L\xa74\xa2$-\x93\xe5;t\x96&K\x94\xa5\xc4o\xb5e\xd3iAJ\x94\xe5\x8c\x0e\xdf\xb8\xc5,\xab\x92\x18M\x08*\x88cv\x15\xb4\x91\xe6\xa7\xa2i\xf9\xf1\xc3\x083$i\x149h\xd5\x9c\xe44R\xdf\xb8\xf0\x8ep\xca\xe8\x12A\xc43\x92rV\xb8\xc1\xd1\x02U)\xbe\xc74\xc1\x93\x848\x0bP\xb2v\xcaGMx$\xa8\x9a\x1b6f\x8a*\x1e.vK\x86M\x94\x9c\x0d\xdf\xd0\xfe\x89J\xe8\x9cn\xdc\xbc\xb7v\x08E\x14\n\xc5\xad\x8d9\x817\x99OH\x1c\x0b\xcd~sq\xfeE\x9bj2\x96\xaf\xf0\xacC-\xfd\x9d\xe5\x80\xf5\"}\x87\xbev\x9cG>S/\x18\xe40\xb0\xba\x05\x9e\x99\x8b\xa6EU\xf7\xf7\xf1\xb2\xaf;\xa0{\xe8o\x80\xb3:\x00\xfa\x1f\xf9\x9b\xe7\x97\x06\xb0\xee!\x7f\xd0\xb1\xde8\xbc7\x80\xd9\x0f\xf2\xdd\xa3\xfb\x90\x89]I\x88\xcbc8pZ\x87\x1c\xdam\x95\x92C\xc7\xf4\xe0\xc1|\x9d|r\xd5P}\x13(\xa2\xba \xd1\xde\xbf\x8aV\x1e\xe4\xff\xc9\xfa\xa6\xee\xba\xaa\x97\x8d\x00\x12\xc1\xb5\xba\x84N+\xbeD\x1d\x1eDN)\xcf\x1dV\xcb\xc7R}\xb5\x01\xfa\x17\xc5\xa5\x8d.\xc3z\xdd\xa0\xd7e\xa5\x0fr\x1b\x04 \xa3\x10t\x14\x1c\x01\xf5J\xd7\x05\x98\xe7\x00g\x05\xaaO\xd8\xb2:\xaa\xad\xd6js\x15\x05\xf2\xa5\xfd\x11\x93 \xb4Cg~\xa4\xaa\xbceS\xb9Ve\xba\xafto\x88T_)f\x03\xa5'\x9b\xb4Qo\xa9\xc7Pq>\xdf!P\xb5` \x96\xe0*\x12-\xbc\x96D\x0b\x05\xb0\"\xe8\xa4\xc8\x9f\x8a\xa9\xe1a\xa6z}\x84\xebk\x95\xd0Rg\xfdQ\x01\xc4\xb3\xe0z|^\x0c\x93F8I\x96\xa2R@\x99\xa9:\x91A0\xbc\xe6\xe3u\xb8\xfc\xa5\xceD\x1b\x91X\xd0N\x16\x0d\xce\x97r\x94\xfa\x7f\xbd\xab\xffA\xea\x01\xf5`M?z\xc7\xab\xfa\xd7\xbb\xe6\x1f\x0c\xd1S\xb6\x99\x9aj]\x05J\x88\x92\xa6;\xf5j\xdeA8\x0d$[dU\x1e\x11\xa3\x00\xd7[\xf9\xb0H\xab\xcc\xf1\xaf\xcc\xee\x12\xe3x\xe1ai7\xf8.F\x0c/\xd0J\"\xfe\x84\x9b\x89|Vx\x95\x13.\xe3e\xa1oT\xe0\x92\x16LO\x89r\x0b\x8bE\xb2\x0c\x89z\x9b\xc5\x84\xd3XU\x86\xc0\xf2\x07\x0e\x08\x00\x11\x06Z\xb40\xca\x19\xa8Z\xca\xf2\xb2U\xdd\x12\xbf\xe1\xf2\x1f\xa8)\xef\xb8\x04\xe3\xe5\x99\xb4\xe0s-Xa\x92_s\x92V\xa2\xe5\x8aQ\xa2\xcf\xc0\xa8U9\xab\xa5\x7f\xdf\x86\xeb\xb8\xcbbsY\xaeJ\xd1\xfdqzy\xe5\xdev\xa09 \x15\x96\xdaE\xbf\x7f\xfdv\xfa\xfd\xf4\xea\xf4\xec\xfb\xf5\xd5\xff\x9c\x7f\x05\x96Z\xea\xf6\x03Tm\xecv\nVjtu\xe1\xbcq\xf6\xd3U\xa4\x86\x10\x17\xbe\x06T\xcd\xcb<\x1f\xd7=\xdd\xa0U\x1be\x95\xc6=Y\xb5QxH|\xa2\xcb=c]6Y\n3\xe2\xba\xe0j}1\xc4\xfe\x8b\xdf\xa8\xbd\xd5\x1a\x96\x8b2Z\xa04+u\xa9\x16\xaf\xd2t\xcdp\x17+K1FU\x0eY\xc9\xceNA\xc6\x96\xde\x1f\x82\x08_j.l\xf8\x1f\xed(\xe1\xa5\x0d\xa1(K\x12\x12\x95\xf2z\x98\xff\xb4\xa8\xcd\x92\x19\xbe\xf7\x9b\x05\x0c~\xc1\x84\xa7'\xf7I\x1eF\xe9$!\xd7\x0b\x1c\xb0\xa4G\xb4\xec\x836MH\x18\xb198?\xb9\xb8\xfa\x1f\xf8f\xedt:\xbb8\xfd\x8f\xd3\xef'Wg\x17\xf0>\x97_/\xfe<\xfd\xf2\xb5G\x8f\xd3\xef\x7f~\xbd\xec5\xc6\x97\x1f\x97Wg\xbf\x9f\x9e|\x87w9\xfb\xeb{\x1f\x9cN\xbe};\xfd\xe3\xf4\xe4\xea+\xbc\xcb\xd9\x7f\x7f?\xfd\xc7\x0f\x7f\x0d\xc0F\x87\xf3\x8b\xb3?\xbf~?\xf9\xfe\xa5\xc7 _\xce\xbe_]\x9c\xfd\xf1G\x1fZ\xfe<\xf9\xe3\xf4\xf7\xc0$j!\xdf{\xc9\xc0%\xbc{E\xba\x86E\x81\xe7 p*/\xa0\x81e\xfe\x1c\x8b\xfb\xd8\xfe\x99\xdf\x81\xf0\x12\x99\xfc2\x82r\x7ff\xe8\xa4c\xdd\x0b\xc7\xb6\x8fu\xd4KL&%*H~O#\x9a\xde\xa0i\x95r\x99\x16(Mg\xddC\xc7\xb6\x8f\xe22\x87'\x03\xd0\x08\xd1\xf4\x9e\x14\xfd\xe8\xd0\xfb\xed\xd8\xfaU2\x8a\xa4%-\x97Bii\xda\xa2\xaa(\xb3\x98\xe2T\x12(\xe2\x91\x04S\xfb\x10\xc8\xf7\xefq\xe7K\xbb\x9a0\x13\xd1K\x89O\xf6\x90\n/=\xbf\xea-\xc9\xbc\xc7pz\xff\x1f[\xbf\n\x8e\x8a\xc1\xb8\x95\xcd\xd6\xc9tJ\x13\xca\x8f\x0879!s\x92\x06\nT\xda\xa4\xc7\xb1\xe5\x9b\x18\x8c[\xc08\x11&\x7f6\x95\x83\x8b+\xb9,-\xf3,\x11D\xcfS:\xa9\n4\xc1\xe9-\xc2\x11\xbf`\xe8\x81F-\x93\x8e\xed\x9f\xb5\xa9\xd2\xbca\xd1\xac\xcf\xc9\"'\x05IK\x99\x1b\xa5\xeb4\x8b'&[o\x85\xe0\xa8\xe7\xa6\xad\xe5\xdf\xb1\xfdss->\xcch43\xf8\xa3\xcf\x11jWk\x17\x06%\x88\xa4Y\x19\xf0\xd98\x04\xeb\xb1\xf5\xab\x0d\x15n_\xf2\xe5*\xbc\xebb\x1f@L*\xc8!\n\xa1s6 \xfc,\xa5\xd2\x8db:\xe56S\x89\xf2,!b\x9a\xa80\x93\xec N\xaa\xe9I\x9a\xe3%\x9br\xb7\xd5#\x8bl7\x16\xa6a7\xb5\x0fsV@!\xf2l\xa7r\xe5\xf0\xe0v\\\xe7\n#pP\x17\xd7}L\xde\xe2$\xc9\x1eH\xbc\xa7\xeev\xa4#aO\xd6\xd3\xb6\xf6\x87i\xbd\x8e\xd7\xb8\xb4\xd4\\,,\x17(\xed\xe6\xa9\xcbh\xa9rb7\x0ba([\xc0\x0d+\x9a\xb2J\xc9\x94\xa0s;\xec\xd6n\xd2\x112\xd9\xc7\xb8 \x81\xf1\x17upC\x83\x8b\xa4\x14}\xd2\xc2\xadUG6\x99/\xa1\xa4o\xcf\xda\xeb\x02\x03r\xa5O~\xed\x06phH*w0\x89{\x18\xe7@\x85P6\x80e\xb0B\x90\x1ex\x83\x99\xe4\xcf_\x07\xb1f\x18\xd5\xc1\\\xf5\xb16S\xcf\x92'pjF+w2b\xb1\x93\xa0\x8eB =\x85z\x979\x01\xad\x14\x04\xddH\xa8\xd7D\xa0\x1e\xe5M\xf4\x0f\x03\xf0zi14\xb4\xb4\xc9\xa6q-\xa4\xdd\x02\xe0\xca\x9e\xa5#\x00\xa5\x15^\x19\xff\x86\xe8\xbe.\xa0\xfeEL\x86s=\\\xc0\x04\xcc\xe4Ux\x07Q\x07k]}#.\xb6U\xf8\xb0r\xc1\x12\xc0\x92\xec2%\x8c\xb1\xe5\xa4\x1b\xaa[b\x81Rt\xee\xaf\xeb\xba&\x80\x1a&\xaf\xad\nI\x01\x8a\x88\x0b\xae\xab\xf0\xec \xdb;\x14\x11N\x91\x0c\x98\xe0\xd7Tl\xeaw\x10yw\xe3\xda\x141\x99~\x9cD\xfbx7\xfa\x1c\xc7\xbb\x1f>\xfd\xf6a\xf7\xf3\x87O\xd3\xdd\xa3\xc3\xfd\x8f\xe4\xe3\xfe\xc7}\xfc\xe9\x83p\x98\xc9\x1d\x1a\xd0\xa5\x0d\x8c\\A\x17R\xb5z\x11S\xe30\x80\x07w\xfb\xfb\xfb\xf1\xfe\xdd!\xf9\xf4pT\xe0\xe5\xd1{<\xbd\x8bI\xf1\xb88|\xba{\xba\xcd?LSg\xce\xf2\xa9H\x14\xc0I\x91\xa9\xabD\xcb=~\x13#\x07\xa8\x9cD\x02\x9b\x99\x13\x9b\x87\x0f\x87\xf1\xdd\xe1\xcf\xf8~\x1e\xe3\xa7\xea\xe1)\xc2q<\x9b}\xba\x99Ww3\xf2\xf4\xe1\x83\x8dZ\xf7Ie\xa4Ub\x1e1R\x19\x86h\xb8A\xca\x0c%Yv\x8b\xaa\x85\x8f\x892CG\xb8\xa5\xa6]O\x97\xb4\xbf\xc4\x92sG\xa75\xec^\x8b\xb1\xe5E@%\x8a{\xc7\xf7:+\xc0&\xde\xb6\x98\x90\xfe\xe5\xdf\xbc\x98\x90\x1f+\x8b\x8e\x04%\xc4\xb6\xc0\x98\xe9\xb1M\xd7\xf263V\xb4mf\xec\x06e\xc6\xb6%\xafk!\xb6\xb6\xcbPse\x1c#\xc5c\x9a4\xd4\xff\x8a\xa6\xc7\xca\x06\xc7\xc8f\x06M\x8f\xd1\x02\x97\xe6\x83^u\xeeP\x99W\xc1\xdc95\xe9\xad\xd8$\xdfD\x0f\xb58\x06\xd8\x19\x80\xb9vX\x17\xbdm\n\xcf\x05\x99\xc5\x92\x18\x92\xb4\xe5\xe0\xfc6\x11\xfd\xef\x99\x88\xee\xca\xcd\x0b\xa7\xe6\x15{8\x91\xda\x04\x98\x8bW\x9c$ \xcaI\x99SrO\n\x84\xf9\x7fuW}\x01M\xc03\x8a|\xbc\xaa$\xbc\x0d\xb1\x08\x1a8\xf9\x15\xfb\xca\xcfy\xc0\\\x16\xa2\x01l \x04\xf7\xbd\x8e\x9c\xca\x17\xce\x1e\x03\xa2\x1f\x8a\x01\x11m\xac\x94\xbe~I}\xe1\xb4>\xff\x8a\xad[0\x00\x18\xb4\xc2D\x83\xac3\xd1BS$\x1ap\xa2\xe4\x8f\x87%\xf9I\xbb{}\x08\x05\xfd\xc0h\xbcd?x\xba_\x8f\x84\xbf\x9ed\x03w\xbdh}xT\x8e\x92\xf87 \xf5\x0f\x96\xfc\xd7\x93M})\x1f/\x05p@\x12 \x1c\xddq\x13\x01\xfb\xa5\x02\x06@ <\x80\xc9\x80\x90t@(W\xfa\xa6\x04\xfa'\x82\x89\xb5\xd5\x92\x02\x81\"\x0f\xb8\x9c\xa1<(\xc7J\x0e\x1c\x9e\x1e\x08L\x10\x84\xd2\xd4?I\xd0\x0bnB\xfa\xa6 \x82\xe7\x08\x92\x9d3$\x9f\xce\xde\x13\x90.\xe8N\xc9\x1a\xd4\xc9\x9f2\x88VK\x1a\x0cy\x7f\x9bmp\xe2\xe0(\xa9\x83\x03\x92\x07}3\xf8\xb2\xe9\x83\xee\xf9~\xf6\x04\xc2\xc0\xd2\xdb\x94\x14BX\x12a\xcf4\xc2\xd1O\x12Aq\x05\x11X\xee\xf4\xad>\xdd\x80)\x85\x8eD\xaa>}@i\x85\xaeD\xa7>\x9d\xc2\xa9\x85\xae\xe4\xa2>\x9d \xe9\x85\xced\x9e>\xbd\x80)\x86\xae\\\x18o\xa7\xe1i\x86\xfdt\x82{\xad\x0e\x1a\x1a\xa9T\x9e>\xc9\x86\xce\x85?f\xba\xa1c\x9f\xac%\xe1\xd0\xb1\xbfFK9t\xed\xc5gM:\xb4\xed\xed\xb5\xa6\x1d\xbad\xc3\x1a\x13\x0f\xed\x92\xe5\x05R\x0f\x9d\xf2jc\x92\x0f\x9d\xb2\xf1e\xd2\x0f]B\xf79\x12\x10\xa1\x87\xb4Q\x93\x10{\xa4!\x8e\x94\x88\x08!s@2b\x00\xd6\x8a\xe9\x88p\xed\xd8\xf1y\x97\x03S\x12\xbdI\x89=\xd2\x12\xe1\xa8[@\xd6\x11\xb1\xfd2AVIN\x04\xb9\xe7!\x8e\xf9&=\xe1\xe3@\xd0\x8a\x07:\x82\xa1\xfcF#\xa6*\xf6\x88\x01\x14\xad5\xd9\xe1\x14\x8fM\xe1Q(\xb1#\x18X\x0eM@j\x0d\xdb/\xc6~c\xb85,\x8d#\x98\xc41\x94\x8b\xa04\xc6\x0db\xdf\xf6=\xf7\xd5\x12\x1b\xe1\xdb\xad\x93\xed\xb1}\xcf]7\x88\xb6C\xbd\x13\x1d\xc1\xeb\x07\xc1\xb7\x1a\xea91\xa8G\xc2#\x18P_]\x88\x86&=n*\x07C:2\x08\xb0\xec\x99\x80\x06J\xd6z\xa5\xbc\x1c\xa6A\xbb\xa0\xfa\xa7B\xf6K\x86\xec\x9f\x0e\xd9\x8b\xe5\xab\xf11\xa8J\x82\xf0\xb6\xef\xb9\x07\x00\x02\x13$ax\x8f\x93$\xb9r\x9a$j\xe7CF\xdd\xc8F\xc7\xc3\xef\x8e\x00O\xd5^[\x02\xe66sK\xff\xf2o\x9e\xb9%\xda\xf6\x19\xf8N\x03\x89n\x90\xe5\x00c\x1e\x1a\xf6*\x9a\x07\xda\xf6\x19x=?\xa3=/>\xe4\xbd5\x0f\xb8\xed3\xf0\xa2\x8d>O\xc3^n\xf3\x00,\xb7\xcf\xc0\x9b\x0d>\x13}\xdf}\xf3\x80\xda>\x03\xbf}\x06~\xfb\x0c\xfc\xf6\x19\xf8\xed3\xf0\xdbg\xe0_\xdd3\xf0\x9d\xc4\xcfQK`\xf0\xcc\xd4m\x19\x0c\xd1\xb6e0|\x1b\xf3\x99\xcb`l\xf3\xf2\xff\x9ey\xf9h\xfb@|\xaf:\x16\x0e\xf3c\xfb@\xfc\xb8\xcc\x0d?m\xbe} ~\x0c.n\x1f\x88\x87\x1e\xf8\xd1\xf6\x81\xf8\xbf\xdf\x03\xf1E\x94-\xc8\xde\xbf\xf8\xff\x05\xde\x84\xbfd\xbfA\x05\xc1y4S\xa9\x11\x88wT\xab\xc0\xc5\xfe\xab\x19\x11?D4\xdea\x1c\x97G\xf6xG$\xfd\xd5U\xc5\xc4\xaf,\x95\xc5>\x1f|\xfe\xed\xd3\x04\x1f\xee\x1eM\xdf\x1f\xed~8\xfa\x8cw?}\xc4\xbf\xedNI\x84\x0f&\xfbG\x07\x87d\x1f\xd5\x18\xe9\x92]\xf5\xdc\xf0ja\xfc\x8f\x07wO7d\xff ?\x95\xd5\xc7\xa3\xf2\xf1\xe8\xf1(I\xee\x8f\x1e\xa3\xcfOeq\xf7\x98\xdc>\x90\xe4\x9d\xc0\x99\x14\x85\n\xb5\xd91\x8fv-\xfcy\x86\xa0\xba\xff7\xfat\x11\xd0\xff!\x7fvp\xf7\xe8D\xe5sq\x97D\xb3\xf7\xc5\xe3C\xfa\xe1\xc3\xcf\xa3\xfd\x9fO7\xe5\xa7\xbc\x98\xdd\xdf-\xa7\xf9\xcf(\xe78j\x80\xf2\x12Y\xa1jC\xb1FE\xe2*\xaf\x94\xed\x15^\xc5\x1f\x0f\xee\x0e\x9d\x08\xba\x0b\x9b\xbd\x9fGO\xe4\xbd\xb93\xfe\x8di\x10.\x87\xe4\x0c\xc9\x88\xa8\x1aM.N\xe5*)\xf4\x0e|\xe7\x00!\xd8\xa7\x030L0j\x15\xc9\x1b}au1\xd8\xa2\x8f\x86\x17\x1e\xc5\xe0)t\x10\xc9R\xc3\xd5\xe4\x1a\x83\xfb<\xb8\xb9\"\xcd\x13\xc5\x96\x9d\x06u\xbc\xf8B\x03\x13\x9c\x13\xcbBd\xbf*gd\x89\xe2,}S\x8a\xf0=.\xe4T\xa2)\x07o,G\x8c&86C\x01\x0cD\xf5\x8f\xce9|\x9e_\xd0X\xd9\x88\x9f\xce\xf5\xeaAqFD\xc2\xb00D\xcaz\xf3\x14\x8d\xe2\x11\xa2O=\x16z\xcb\xe5/\xc7\x81\xc4\xbf\x1a<\xba\x9ae\x051\xafh\x99t\xe6\xf3\xa2Ry\xa6T\x90\xacdP\xdd\xf7\x1fKe\x99\xec4\xd0\xd0\xc3\x0b\xb7S\xa9t\xb397\x97D\x7f\xbe6\xfb\xeee\xb9q\x14\x12`\x94\x0e1\x0e?\xaaK\xcdf\xd1UvQ\xdb\xabQ\x90\x8b\x0b\xd6_\x14\x836\xb4\xfc\x16gr\xc0S\xabw\xaf\x19\xb7\">\xba\xae\xfcWp\xb2:0B!\xa8(\x08\x19)\xe8\xcf\xf4\x06T\xc8\xff\xc8\xda\x0fQv\xeb\xf4wT\x97\xdb\xe2\xeb\x1e\xa1\xd3\xf9\"\xe1\xf9{\x05*\xe2\xdbw'B\x9c{`\xd1\xb4$\xf9\x14G\xc2\xb0\xac\n\xc2l\xbc\\+M\"6\x88\x91I\xe4\x81\xf5\x85\xdb9.&\x82\x8b\x95=/3k\xf9\xdd\x8c\xe4\xd2\xc9\x89<\x12\xcc\x7f \xd8\n\xd7\xd2\xc5R\x88\x9a\x0b\x99\x91\xc5\x13.i\xb0\xaeXa\x08\x81v\xe3\xb9\xa1\x9e i\x9f\xfbO\xb5`\xd6\x7fp\xcf\x88\x16\xde9\xa2\xc9\xb5\xe4\xff\x11p\xde\xe5O\xc5\xc4\xb62\xb0d\xc6(z\xabr\x11\xfd\xb9\x90y\x96\x04\xeb\x87AV\x90h\x98\xc3\xabw\xa4BFO\xb90\x10\xc8c \x0dO^\xe4Y$\xb6\xa0\xb7\xaa\x9c\xec\x00g\x1e\xa4P\xc3\xe0R\x0dC\x8b5\x0c+\xd70\xac`\xc3\xc0\x92\x0d\x03\x8a6\x0c,\xdb0\xa8p\xc3\xd0\xd2\x0dC\x8b7\x0c*\xdf\x80V*\xe0\x10\xba\xd5\xea\xb6\x91\x8b8\x0c,\xe3\xf0L\x85\x1c\x9e\xb7\x94\xc3\xfa\x8b9lH9\x87\x17(\xe8\xf0\"%\x1d6\xa8\xa8\xc3k(\xeb\xb0q\x85\x1d^\xb6\xb4\x83\x8a\xaa\x0eY\x16\xb0\x10.\xd1\xa0\x81\\\xa2I[M_C\xea\xe9\x7fS\xa0\x82\xde\xa4\xb8\xacr~$U\xa8z\xe0\xc1\xec\xbe\x13Q\xa8B\x89ki\x8d\xb2-\xb8GS&\xf08\x17\x99]\xe8\x05\xd3\xae\xa9\x88\xf5Rtv\x83\xeb\xc1+\x9e\xb0\xa1\xcae\xe8\x8d\x80\xcal\x81\x12rO\x12y\xa4\x08\xa7\xe4(W\x87\xb0h\xdf\xb5As\xdf\"\xe33\xc2\xe9R9r|\xc2U\xd4\xd4\xccb:\xf5\x86\x0c\xf2H9v\x9a2,iu\xdc\x15\x184\xcf\xaa\xdeuZ\xa5\xecl\xc7\xb9\xac\xf0Nh\xc18\x9f\xa5\x0dW\x95+D\x91ar\x8d\xb9\x97\xe5Y\x0ea\x01\x8b\x1e\xbe\x0eN4\x93\xe4\x01\x94\x13\xce9\x86\xabr\x96\xe5\xf4I\xc8\xcf\x9cD\x84\xde\xfb\x16B]\xcc\xd6]\x12\xb4q\x19\xd0n\xfcz\xf0\x9a\xaf\xbb\xeb\xe0\xe1pl>\xd4\x1b\xb5\xa9\xaaJ]\xe8\xafE\x90wm\x1a\xbe\x97\xcb\x12\xa71\xcecS\xbdH}'\\\x8es\x9c\xdfzk\xd3\xaa_{c\x87s\x82\x8aj\xb1\xc8r\x86\x9f>nr\xcc\xf9\x8e`\xc2\xa8,s:\xa9J^\xb3\x90{J=\x00'\x84I\xf7\xf4\x86\xc4h\"\xa2\xfa\xa4NP\x8a\x94\xed\x8d\x88\xd9-\x96\x8b>\xb3I'\x11\xafN\xb8\xbc\xce\xb3$\xa9\x16\xa1i\x0dIv\xa8\x06\x80\xcf\xff_R=\xe0$\xd1\"@\xed\x08y_\x94\xc6<\xd4\xae\xe3\xbf\xed6u\x9f\xa2\x84j\x03\xd0\x9bB\x89\xd6)%I\xec\x0d\xcb\x16\xd3\x96\x14\x19\")\x9e$\xe2\xcc\xcf\x03\x15\xa4\xae\xfaw\xee]\x16\x08\n\xa8\xbe5\x92\xc6\xdaE/i\xb4O\x1a\x8cm\xe2\xb6\xaf\xae \x9dgYiT\xc1\x14\xb7\x7f\xcd2\x98RW8\x002\x02\xf8j\xe3\xd7\x1d\xb9\xb8\xff\xf0 \xaa\x1c\xb0\x9e\xc4@\x18%\x0d@\x81\xd2?\xcd\x12?\x0e\x80\xc6\x9d\x83\xf5\xcf!GZ\xd8\x85\xf6\x9c\xce\xe7\xae\x07\xdfW\xb2\xa7q\xbb\xea\x12\n\x9a\xe3\xa1j\x03k\xa6\"T0\xa0\xa6\xc8\x93r\xad\x81\x89\x7fl\xde\xeb\xfe\x16\x04\x15\xc5\xc6\x17p\x8a>\x8c\x1f\xfe4|\x10\x1b\xfaR\x18L\xb6\x1f\x8b\xb6\x11\xa6\xb8/m+\xa5\xcd[\x16\x80[\xa0\x16\xc1:40\xdc\xbb\xd0\x02\xa2\xd5\x01\xa7[S\xcdr1\xb3fA\x1b\xac+\x03\x9a\xf3\xb5l\xeb@\xf1\x18\xef\xb5\x11\xea[?\xad9\xa7/$\xbc\xe1L\x81\x88w(,\x18K\x8c\xff\x1aAH\xac\x957-T\x9b\x1aA\x7f\xf6\x80\xb3\xaaI8\xb7^@A\xc0J\xb2\x8c\xbf0FX\n\x83H\x1dAi8VK\x9bhu*\xeaR\xe9\xf3z\xac+\xf3Db\xe3byP-\x84G@\xf5(\xcfXc\x13\x1e-1\xee\xb8}\x96\x1f\xaa\xdf\x7fk\xd7.\xb2\xc5R<`\xffM\x8b\xf2\xdf\xcb\x07q\xc49Z0\xde\xb5\xf1\x10z\xfe\x97\x10\x82Q\x11\xb0%%Z\xd0\xf9\xa5\x1ap\x8e\xe5\x8f\xc7\x88\x8e\x80\xc5G@=\xe5\xa2\x8d\x1b#1 J\xa2'#a\x91\x12+\xc4J\x0c\x8f\x96\x18\x1a/14bbp\xcc\xc4\xa0\xa8\x89\xc1q\x13\x03#'\x86\xc7N\x0c\x8f\x9e\x18\x18?\xb1j\x04E? /\x9a3\x8a\x02\xd0\xd7\xdesh\x1c\xc5\xb3ER\xcf8^6\x00\xf5%\xcf(o\xcd\xb5\xc0\x0d\x8b\x88\xb0\xc6D\xf8\xcdA\x80\x0d\x05\xb1\x9f\x9e\xff\xca\xab\x1d\xb8\xa5\x11p\x07<4\xebk\xb8-Kc.B\x91\x0ck\xa5) \xe4:h\x0e\x0dg0A\x81\xb8\x02 v\xda\x10\xcet\x83\xa4\x8c/\xc0\x07\x80\x8c\xc5\x03\xe6\x90\xfc\xe7\xeb\xe0\x91\x81l\xed\x900\xbeI>y\xe157\x19\x88O\xfe@\x0f0s\x86P=B\xacG\xbf]3\xd2B\x18B\xebJ\xc1\x1e\xce\x85\xe2!Y\x05\x15\x8e\xf9`]\x03(r=T'#\x00\xbd\xd1I\xc8\xf2@\x1dd&A\xba\x12\x01\xf5%B\x90Pm\xd1\x80K\x03\xc1\xe5\x04ZO\xf0\xb6hz\xa6\xc2\xba\x13=\x0fu\x80\xe3L\x0b\xe9\xe1\x9a\xd4\x04\x06\xe4\x13L\x9b\xa2\xcd\xe3\xd5\x18\xba\x15!#+\x02\xc8\xb3\x90\xde@\xfdX5\x8c\xfeQ4\x08\xea\xb9ZF^$\xc3(_Q\x9f \xfb\x12\xb2\x93\xdfy\xd1m\x8c\xb3\x96\x15\xe8x'.{T\xdb\x9a\x0f`m\x9aF\xb05\x80\"\x04\xcau\xd4\xe3e\xd3\xf0\x85\x16\xea\xb8.\x82\xca\xa93\xeda\x05\xb59\x9cZY1\xb5\x01\xf6\xe0S\xd4\xeb\xd1\xc8\x0d\xe2Y\x17q\xc9\xbf\x1e`,)P\x83y\x19R\\@\xd6\x0d\xe7 Diy\xc1\xadB\xfdH\x0bg8\xf5+*.\xc0\xf2\xb2\xb1\x02\x82\xaft:\xba_\x14\xd5\xbe\xab\xc6\x83\xa1VX\xbd\x1f\x11\xb5\xe2$\x07,D\x10\xc5\xd2\xa80\xad\xab3\xea_4\xd2\xa1\xdfZ\xdf11\x0bu\xb6\xff\xc2\x9d\xb7\xdd\x85!\x96\xc3\xf3\xe6\x07\x08d\\\x8bt$U\xfd\xec\xb1\x18{\xf5\x92\xa8\x83\xa9\x05\xa9\xef\x10\xfa\x93\x171\x90\xa9\xe9^X2~\xdfRX\xe3$)2t\x9bf\x0f)\xc2l\xd5~c\xe6\x8f7H\xe3%\x1c\xc60\x8e\xd5\xe9 j\xd3\xa9\xdb\x0e\x95\x97\xd0\xca=\x08\x08L\xcdk\xf4\x96\xd7\xcb\xa4\xe5\x0cMiR\x92\x9c\xc4\xe8\xf6^\xe9\xf5\x92\xe4\xb8\xccrwp\x99\x8c\\\xf7\xb2\x0bD\xa0\x04\xa4\xa4L\xc3\xdeU\x94\x89\xa9\xf6\x16\x82\xd0\x92f\xd9\xbc\x83\xcax4_6\x9d\xca\xb8\xb9\xe6\x8b\xc0Pf\x05\x17\xc5hn\x18`R\x05p)\"\xf04 \xd4\xb9W\xef\x84@\xf2\xe9P[6\x08MN\xac\xf7w3\\\xcc\xc6'\x95\xd1\xc1 s\"R\xa3\xe2\x8bZk\xc1d\x8b\x90PD\x83\xf0\x02L\x01\x16\xe1j\x96\xbbk\x8d\xfc[6\xf05\xfb\x99?v\x895\x1d\x9e\xc66Ak6\xa3l>\xcfR>\x9e?\x86T\xbc\x80\xf5\"\xec\x10C\x8b\xf04EF}W\xca_\xeb\x08^)\xab\xa6KU\xa3\xb7\x02\xec\xaf\xf5\x15-\xe7\xd3\x9ef\x8d\xf7\xaeV5&ziz\x9f\xddz\xd6\x12M\x17U\xf9j\x13\xbc \xbb\xa0\xd7\xc4CL\xbdv\xfb\xce\xa6]>\x1c'\xab\x9c\xb3\x89Ohz\x8b&8\xba\x95\xb5\xe1\x01\x90x\x8c\x02O\xd5\xe0\x8b\xc6\xef\xe1\xd2\x0f\x11\x84]\\=Y\x004\x0fD\x83o\x15\x8b\xf8\x96\x8a\xbe\x8e\x19\xff\x06J\xb4\xf8Z\x94x\x92\xd0bFb\x15\xcc\x10\n2\x87\xc8\xf1\x9el\xeaK\xb9]\xe0S\x12\xf1D\x04\xc3\xaa\x00\xc0c\x8cB\xe7y\xb6\xc8\n8\x0f\xb4X^\x0f#\xf8\xeb\xfb\x0b\x85\xd3\x94{\xf4\xca\xbc\x8ax4\x11\xb7\x91\xe68/f\x81\xa0u\x84\x8a\x12\x97Up\xeb\xf7\xe3\xff\xa9\xceu\xa1Sa6q\xc1\xc7E\xa4Z\x86\ni\xd0\x04\xe84\x8c\x9f\x15\x8f\x1b\x121\xf2l\x8a\xf9-\xd9\xa2\n\x8b\xe7^<\x86\xe7J^|\xfdrv\xf1\xfb\xf5\xe9\xf7\xf3\x1fW\xd7\x97W'W?.{\xe5\xaf\xb9`\x9c_\x9c\x9d\x9f]\xae\x00@|\x0bv\xd7\xf9w\xab\x12\xd2_\x92\x07\x99\x07\x99\x81\x00\x08#\xed\n\x90\x10\xc2\xa3\xbdpB\xe3\xbd*\x15\xe7E\xb1n\xd9\xda\x01t\x0eL\xa5\x9d\xc7\xea\xaf\xed\x041c\xc7\xa4\x08\xe7\x13Z\xe68_\xd6\x12\x8cW+\xd4g>\xb1\x15\x86\xe3(\xbe\xd91\x14\xdf\xec\xf8Q\xb1\xa1\x1b\x16\xd8\"'\xf74\xab\n\xfe6Ws\xab\x1bIU^\\\xa5\xb0\xb9\xcaqt+?\xb9\x84\xa5\xd47\xbb]\xfe\xd7\xe9\xf9\x80n\xdfNN\xff\x08v3t\xf2P:\x87ic\xc7h\x90Iqvnh`T\xa5\xcd\x97U]\xadg\x16}wJ\xdb\xccc\xdf\x1a*\x8c\x18\xbb\x89?J\xae_\x9b\x1a2$[\x0e\xed!\xd97cHM\xd2^\x94\xa5\x05\x8d\x95\xf7\x81\x0f~K\xf9\xadE,\x1e\xdd\x9a\xd3\x82\xbf\xf4*\xf5Q\x96\xa3\x98$xIb`b\xa2\x03I\xb6\xf8\xdaH\xb2oN\xbe\xd4\x17\x8aV\xcc\x99\xccp\x05\xa0\xab\x06\x15z\xe2Pu&\xe4\x13I#\xbc(\xaaD\xa3$\xe5\x16?\xc5B\xfc\x88\xa8\xb6<\x009\xc90\x1c\x05\x0eo\x8b_Q\xfd\x9e<\x7f^3\x9b*\x96\xc9w\x90\x95\xb8\x0e\xcc\x12\xfb\xa98\xc8\xa8\x0eu\x91b\n3\x1d^Ge\xa56\x96\x8a\x81\xf5]\x06@\xcf\x16\xd6\"L\xd6BK\xf2\xf2\xc8\x01.<\xdb'\xfaJ$\x9br\xcb\x95O9.K\x1c\xcd\xc4h\xf5\xa3\x81Y\xce\x13\xa2\x9c\xb0\x9a;F\xaec~v\x0f\xa6k7X\xac\xdf_\x14\xfb!\x95\x0e\x0d\xf9Y\xe68\xd9I\xd6\x8e\xabQ\xc2\x93\x9a\xd0\x02qIF\xfc\x91\x13`c \xac9\x0e \xe4\xc3[\xe3F\xd1\xe3;C\x8b\xe4\x84\x06\xc3\x85\xeai\xd8\xe48\xa16\x96\xc3\x03\x844$\x08K`\xe1\x88\x9b\xc0\x961\x82T\xebe\x03d\x8fp\x16\x04}\x93\x9b\xc0\x1f\x03U\xc5 \xe9\xf5\xe3\x9f\xd6\xc2\xa1\x17\x88\x832F\x0e\x05@\x8d\xb1S^a\x0e\x04\x80*\x90\x96@@M\x81\xb6)\x10\xb2=\x03u\xc1\xd3\xc16\x05b\x10\xaf\xc6\xd0.\x08mS \xe0\x94\x8f\xbcH\x86Q\xbeb$)\xea\x93\x02!\xe5\xf2\x98 \x10\x16\x90\xe3\xa5?H\xfb\xfa9\x93\x1f\x9a\xf4\x8c`Y\x00E\x07\x94\xdf\xa8\x83c\xe0t\xe2\xdf\x07\xfd\xd2\x1eZ\x93\x1dVI\x9b\xc2\xa3\x95\x15Q\x13\x1c\x98Ck\x89Z_?\xb7\xd6\x95\xec0\x90\x8b\xaf\xe5\x08d\xc1\xd7r\x0e\xf2B\x1a\x81a!}\x0ed\xd3P\xfaG\xd1\xe4P\xba;y\x14c\x9e\x91\xac\xc0\x9dg%\x10(.p\x11\x8d\xddg\xa6 \xc9 M\x87\x80\xda\x0e\xf5L\xf7C\xf0\xf5\x83\xe0[\x0d\xf5\x9c\x18\xd4#\xfd\x0f\x0c\xa8\xaf.D\xc3\xd2\x00\xd1\xc6r0\xa4#\x83\x00\xcb^ ]\x08\x96\x06\xf5Jy9L\x83vAY\xb4hO\x08\xfd\xe6 \xa4M\xf0\xe1\xee\xd1\xf4\xfd\xd1\xee\x87\xa3\xcfx\xf7\xd3G\xfc\xdb\xee\x94D\xf8`\xb2\x7ftpH\xf6E\x91w%\x13\"\xf7\xebsR\x8d\xcb\x01}\xb8\x1e\xdc=\xdd\x90\xfd'\xfcTV\x1f\x8f\xca\xc7\xa3\xc7\xa3$\xb9?z\x8c>?\x95\xc5\xddcr\xfb@\x12\x1b\xc6\xe1\x02Tc1\xb4Un\xaa&\xbfY\x8b.@\xaa\xf8\xf1\xc1\xdd\xa3\x93\xd8\xcf\xc5]\x12\xcd\xde\x17\x8f\x0f\xe9\x87\x0f?\x8f\xf6\x7f>\xdd\x94\x9f\xf2bv\x7f\xb7\x9c\xe6?\xa3\xdc\xc6\x85\xe0e\xccHLh]\xbdh\x1e(\xc9\xd2`\x81\x0f\xc4\xc1\xdd\xa1\x93\x01\x0f\x1f\x0e\xe3\xbb\xc3\x9f\xf1\xfd<\xc6O\xd5\xc3S\x84\xe3x6\xfbt3\xaf\xde\xcf\xa3'\xf2\xde\x06Yf\xb7\xa8\xb2V\x0e\x93[p\xc1W\xf1^\xdb(\x9e\xdf\xc0X\xd5\xc6H\xf0k\x9a\xe0\x1b.Qu\x1d\xfdL\xfd\xd2\xa3=4\x8c\xc6\xfd\x85>\xb8\x14\x8b,-\xac\xf1\x0c\n )h7\x87+\xa6j\x18\xc8\x14\x05\xa2/O\xc8\xa3@\xc1{Z}N\x9e\xb4\x10r\xf3D\xfe\x90S\xe8\xbc\x13\xe4 x\xccL\x88\x11\xf5\\8\xf4'zfF\xb4\x10\x82,\x0eg*\xad\x86\x91\xa2eV\xe5R\x917\xd9\xd0\xc0\x8a\x17\x9a\xbd\x90\xecBu\xd4\x9a\xf8o\xc6\x06\x19\xe9L\xd0?+\x92/\xf7De\xda\x8b\xf3/2\xd1\xb2\x86\xadBR\x7fq\x0cu\x92\xa2*%\x8f\x0b\x121CC\xbc\x84\xa4F2\xfa\x14\xd1\x8c\xccqsZ\x9cf\x87\xdb\xe4\xe0\xf0\xbb\x93\xeb\xd1\x08Q\x16[\x1c}\xa2\x83\xab@\xb7Z\x054-\xdf\x1f\xb6\xfe\xea,n\xed\xc1!&%\xa6\xc9\x86\xd4\x92`\xdd\xaf\xab\xdc\xf9\x06KP\xbb\xf2\x14\xcc\xc1\xbd\xadG\xe7\x05\xce\xf1\x9c\x94$7p\xde\x15Y\xa7\xda\xf8s-\xc0\xd6\x0e\xeck+\x0e\xb3\x10}\x06\xd2\x10\x0b\x90\xa6\xc7h\x81K3\x9a\x90mz\x9a\x93\xf8\x18\x95yen%+\x8b5\xb7\x0c\xcb\xce\xc5\xb1\xffmq\xac\x9f1h\xe9:\x96\x05\xc8\xb8p\xc7\xe4\x91\x95\x0dS\x9c\x14`>\x18\xc6\x1dp\xe1\x0c6\x07\xc75\x02G\xe4A\xdbj\x032b\x90\xb1g\x9au\x0dh sf\x08\xd1]\x15\xedR\xdem~Hc\xab';\xfaXy-{\xae+\x1e^\x9e\x19-C\x0d\xc8\x8c\x81\xe6]m\xc8u\xd6\xc6\xcbq\xa0e\xa1\x0190\xc8\xae3,\xb8\x060\x875\xb7N\xfaK|\xd3P\xb2\xff\x94\xe3\xbc\xd9[\xe4\xd9=Iq\x1a\x91\xbd9)q\x8cK\xbcw\x7f\xb0\xc7\xd7\xeb\xde\xbf\x94^\xfd\xbf=\xb1\xb6\xf7\xfe\xc5\xb8\xf8\x7fo\x04\xac\x1b\xa2-\xc4\xa2\x9a\xcfq\xbe<\xd6\xcf\x1f\x14\x04\xe7\xd1L\xbe\xad(7\x86\xa2\xd6\xc5\xe9\xab\xfa\x12\x8b \xde\x1dD\xa7\xea\xd9\xc6xG\x15\x85\n\xc8h\x0dl\x04\x01\xcd\x10\xd2\xf08+v;&\x86\xd8\xd8\x86\x99\xa1;\xc0m\x0c\x9bq\xd1\x18\x16bW\xa0K:\xa7 \xce\x93\xe5N\x8dC\xd9('m\xb5\x8exi\x18\xbf\x03h\x0c\x85\xdf\xe0\xa5y\xaf-\xea\xba4\xa2u\x96Y\xf5&'\xf5\xf8\xccb\xcf\xb9\xe7\x14\xd1\xd4|\x98\xe3\xdf\xd0\xe9\x14ei\xb2\xd4e\x06\xb4&\xaf\xd7\x8d|\xbb\xce\xf4\x1f\xf3\x97B\x8c\xfab9)\xab<\xe5\x8f~\xd8@k\xeb\xb2\x01\x17'I\xd3\xfd\xcb\x86\xe13\xd9\x17|=Ao\xd9d\xc8\xd1\xf6\xea\xef\xbfZGk\xcf\x8f\x1a\xd79\x1e\xd6\x8cWT\xe8g\xda\x14\x858\x8d\xf7\xea\x05qM\x9b\xfckm.\xdb\x80\xfa''h\x82c\xd3g\xad~\x84\xe8\xf4\xd8D\xec\xaa\xb9F\xb9h\xe5\x0b\x13\xa71J3+\xf7\xdf\xb5\x00\xc87X\xca\x87\x8c-g\xfe\x0eK6m\xca\x12\x93$~\x7f \xc1\xf2\xff27\xcc\x12\xc5Y\xfa\xa6\x94\x1c\x9f\n\xb9\xce7\x12c\x1e\xef\xd6\x18\xfe\xa4\xc3\xd5\x1d4\xa9J\x94f\xa5\x85\xb3\xb8Q\xde\xbd\x0bF<9W/eF\x96\x9e-\xf6G\xbdg\xe2\x8c\x14\x0c\xcf9.\xa3\xe6\xf3FF\x7fsF\xfe\xb1T\xe7\xfa\x1d\xc3@\x13o\xe3H3N\x9c\x06\x88\xd0\x0fQR\xf2\xf4w\xa4+\x02\x88\xed\x8e\xd0\xe9|\x91\xf0g\xd3\nT\xc4\xb7\xefN\x02InRgMq$|n\xbc\xd6\xa2\x10S\xa2'\x11{M\xd9wm\x13\xb1\xd9\xbed\xc5%T\x1b\x80\xde\x14J\xb4N)Ib\xcf\xeb\xf0j\xda\x92\"C$\xc5\x93D\x9c\xf9\x99HV\xba\xea\xdf\xb9\xabZ (\xa0\xfa\xd6H\xed+W4\xda'\x0d\xc66\x11\x7f\xa7\xdf\xceGy\x96\x95Fu]nI\xa3(K\x12\xc2\x0d\xa7\xfaJ\xc3\x85##\x80\xaf\xb6,%\xfa\"\xc4\x83\xa8r\xc0z\xc2Ha\x944\x00\xc1\x8b\x84\xb9=6\xb52\xb2\xfe \xe8H\x0b\xbb\xd0\x9e\xd3\xf9\xdc`\xa2y\x9fU\x0e\xae\xed\xa29\x1eJ\x18\\3\x15\xa1\x9c\xbf\x9a\"O\xd6\x94\x06&\xfe\xe1O\x98Z\x13A^\xe1fA\x10\xf9J\xac\x84\xfc\xda ~\xb8s!\x10\x94\x0d})\xc4\xa1|\xb9\xb1h\x1ba\x8a\xfb\xd2\xb6R\xe6\x9be\x01\xb8\x05j8\x95\x1c\x86{\x17\xda\xb0\xc2(\xdd\xb2(\x96\x8b\x995\x0b\xda`j8h\xce\xd7\xb2\xad\x03\xf9\xdf\xdek#\xd4\xbe\xa5\x82\xc9mh\xb6\xf7\x8b3\x05\"\xde\xa1\xb0`,1\xfek\x04!\xb1V\xde\xb4Pmj\x04\xfd\xd9\x03\xce\xaa&\xe1\xdcz\x01\x05\x01\xcb\xaa\x1e\x7fa\x8c\xb0\x14\x06\x91:\x82\xd2p\xac\x966\xd1\xee\xbc?\x9f\xd7c]\xf9\"\x12\x1b\x17\xcb\x83j!<\x02B/\xf1\xee&\x88\xd6H%ba\xb4\xf1<\x9e2\xab\xd9g^\xf4\xcb{F\xd8\x13`\xd2\xbc\xdfa\xf8\xd1\x08'\xc9\xb2~\xfc\xdd\xd9Qv\x1a\x81\xdc5\x9c\x81\xd5\x81E\xa4\xdaR\x92\x88Ky\xa6\x91\x99 \x10%\x94\xa4\xf5y\x98GLx\xe1u\x97h\xf0\x10\x8c\xab\x98z\xb9\xd3\x87\x9e/\xfc\xf8\x1d\xa3\xc9r\x07U\x8bX\xff\xbb\xa4sR\x94x\xbe(v\xb4\xfbL\xd4\x99\xf3?\xce(\x12\xc5\x12\xf9|\xd84s\x93\x01>aC\xcf\xd7\xc2\x93\x10_3\"B\x82\x13\xb8\x80\x90\xb1\x88\x18\xd8]\xc6\x96\x10h\xb1\xc7d\x1c\x13\xd9c]\x98\x04\x95\xb1\x02$-\xf3%\x7f4L\xe2\x0b\xa2i\xb2\x1c\x91\"\x98\x14@\xa8\xf3x\xbb\xe9W\x10&\x8a\\=A\x01\x87t@\x99\xf7gr\x05\xbe\x9a)LpQ*\xa4A\x84m\xe8<\xf2\xb0<:\xe2DJ\x91\x01#\xd6U\xfa\xa8\xd9\x8cBH\x1f?\x84\xe0\x829\xc3lki\xbb\xb4\xe4\x9c\xe0\x0c\xaf\x8a\x1d\xe5\xdc\xfa\x07\xf8\x9b\xb8\x0c'8\x9a\xc9\x19\xf7vp\x96oj\xb6\xb5\xac\x08\x93n\x89\x87%\xb2/\xb4Q\xa4\x80\xa2Y\xba'\xe8E\xe4\xde\x7fL\x82ax\xc2T\xdc7\xa6]\x0b\x14\xe1\x85\xb02\xadQ;l\x07zA\xe9u\x9e\xa19\xbe%r\xa9\xab\xdc=\xa6\xae\xe4\xc6&K\xf4@\xf2\xc0\x8c\xe1\xd8\xf5\x03\xa8\xd2\xbd\x94\x06\x94\x8e\xaf2l)m]\xe0\x1bL\xd3\xa24N3NxM\xd7;\xeb\x85\xd3\x88x\xa2\xcf\xae\x0c\xb7+\xcf\x94\x9f\xe1{b\x8c$9\xccc\xcaJu$\xa5\xc4-\x16hz\x9f%\xf7\xcd4\xfbv\xfb~\xc6N\xde\x7fIN\xcb\xbc\xf84\x13\xa1`\x17\x8dHc\x84e\x04Z\xa3\x98@\xbb\xd5\xf1hX\xb1T\xa4\x8f+\xfe\xf2\xd4\xfeyv\xefz\x1a\xb6\xbe\xe4\x19\xe5\xb9\x98\x16\xb8a\x11\x11\xd6\x98\x08\xbf9\x08\xb0\xa1 \xf6\xd3\xf3_y\xb5\x03\xb7\x1a\xa5\x16\xec\x01\x0f\xcdr n\xcb\xd2\x98\x8bP$\xc3Zi\n\x08\xb9\x0e\x9aC\xc3\x19P\xa3xC\xf87\xa0x\xb6\x0d\xe1L7H\xca\xf8\x02\xac\xe1_6Jy\xc08$\xff\xf9:xd [;$\x8co\x92O^x\xcdM\xf6\xff\xd8\xfb\xb6\xa6\xb6\x95e\xff\xf7\xff\xa7\x98\xb7\xb0NA\x0c$\xe4B\xd5y\xf0\xceJ\xcev\xed\x1c`\x01\xc9\xaa\xf3D\x8d\xa51V\x90%#\x8d\x0cf\xd7\xfe\xee\xff\x9a\xabnsi\xc92\x98\xaa\xe8)\x11VO\xf7of\xba{f\xba{@8\xb9\x03=\xc0\xe0\xf4\x91z\x80X\x8fn\xb3f\xa0\x81\xd0G\xd6\x8d\x82=\xac\x03\xc5!\xb2\n*\x1c\xf2\xce\x99\x1aQ4\xf4\xbd\x9c\x90\x9e\x04\xd9J\x04\xb4\x97\x08AB\xb5\xc5\x03\x1c\x1a\x08\xae'\xd0v\x82\xb7\xc5\xa3{\xcao;\xd1\xf3H\x07X\xce4\x98\xeeoI\xab\xc4\x808\xc1\xac)\xda=\xac\x86\xb0\xad\x08\xfd\xbe\x98\x13.\xf9\xc0\x83\xa4\x9f\xe4\x1b\xda\x13d\x1eBf\xf1[\x97\xb2\x0c\xb1\xd62\x12\x1dn\xc5e\x8ej\xdb\xf2\x02\xac)\xd3\x00\xbe\x06P\x85@QG\x1d.'\xf3\x1fh\xa1\xd6\xd6\x85\xd78\xb5\xba\xddo\xa0v\x07\xa9\x8d\x0dS\x93`\x07\x9c\x82N\xf7>\xed\x10fm\xc6\x11\xe0\xb21\xc3W\x8d\x88\xf6\xbeX\xfa\x0c\x17\x10\xba\xfe\x98@\x8c\x96\x93\xdc&\xd2\x0f4p\xfaK\xbf\xa1\xe1\x02\x0c/\x13\x14\x10~\xe5\xa6\xa3\xfd\x860\xbdw\xf5\\W\x84\xc9\x06\x1dw\x84\xe9_\xe8\x9a\x8e\x88\x97t4\x10\xab\x14yt^\x17\x16\x98\xef\xc2\x11\x03\xe3y3\x05\x043\xb6\xe1:\x90\xd1~\xf6\xa8\x8cQ98\xca\xb0j!\xea[\x84~\xf2r\x062I\xddIKF\xf2\x1bJl\x8c\xe3'\xa1\nk\xf0\x85\x9bC\xf4xG\x98\xbaJnV\xf8\x11 xJB\xc5\xab\x00\xd0c@\xa1\x8b,]\xa69\x1c\x03\xad\x96\xb7\x03\x04\xbf\xb5q\xa9x\x9a\xf1\xbd=\x9a\x15\x01\x8f+\xe2>\xd2\x02g\xf9\xdc\x13\xbe\x8ePN1-\xbcS\xbf\x1b\xfe\x13\x9d\xf5\x12\xcd\x84\xdb\xc4\x15\x1fW\x91j\x18*\xa6A\x1d\xa0\x132~\x15<\x82HD\xcb\xb3.\xe6\xe7e\xcb\xc2\xaf\x9e;a\x0c\xcf\x9a\xbc\xfc\xfa\xe5\xfc\xf2\xcf\x9b\xc9\xd9\xc5\x8f\xeb\x9b\xab\xeb\xf1\xf5\x8f\xabN\x99l6\x1a\x17\x97\xe7\x17\xe7W\x1b\x10\x10\xef\xbc\x9f\xebL\xbcM\x05\xe9\xae\xc9\xbd\xe0Az\xc0C\xa2\x92\x80\x05H\x0d\xe1q_8\x8e\xc2Q\x91\x88\xf5\xa2\x18\xb7l\xec\x00>\xf6t\xa5\x19c\xf5\xd7f\xaaXe\xc6$\x08g\xd3\x88f8[\x97\x1a\x8c\xd7-\xd4k>1\x15\xfa\xf3(\xde\x999\x14\xef\xcc\xfcEbB\xd7<\xb0eFVQZ\xe4\xf1\xba5\xd5+\xe9UN^\xa5\xb2\xb9\xcepp'\xf6\xc6\x84\xe7\xa4W\x80D\xd9$\xe8\xaa\x0c\xa4\xbd\xaa\x8d\xb4\xfcl&[0\x8f\xc8J\xdc\xb1\x92\x16\xd4\xa7v\xd2\x04\xc4\x9d\xa0\xf4j\xbd\xc2\x17\xb6\xf5\xff\x94v\x9e\xaa\x1a\xab\x02NX\xc1\x06\xf1\x88/F\xe5u\xfe\x8dm\xa8\x17\xb0\xa0W\x9c\xa6\x92K\x0d\xc1r\x1b\xa3\\\x10\x02\x88\x95\x99N\x12\x1b9\x95\xa3\xe4V]\xdb\xb3?\xc3Q\\d\x80%$bfxI\x92\x10\xd4\x91]z\xbd\x8b\xd1\xbd\xfa\xf1\xbd\x97\x95j\x7f}1\xbe\x82%\xd7\xd7?\xbb\xfa\xd7\xe4\xa2\xc7g\xdf\xc6\x93\xef\xde\xcf*6\xb9\xaf\x9c\xfd\xac\xb1\xa55H\xa7X?\xaeY`T$9\xf1\xfbj\xfc\\\xa3K>}\xbbK\x9b\xe0\xb1w5\x13F*\xb3\x89Y\xd0\xf2\xfe\xaa>M\xb2\xe1\xd0l\x92\xbd\xab4\xa9E\x1a\x05i\x92G\xa1\xda}\xe0\x8d\xdfE\xfc\xfc\"\x14wy-\xa2c\xe48\xe6kwo\xe2v\x0db\xc9\x91D.M\xe4\x86\x86|-\xb3\x9d\xcc\"\xeb\x8d\xabA\x02\x95\xea\xd4<\x11J\x95H$+\xc1\xda\x10\xd8rD\x12h\x0fo\x8b\x13E\xb7o\x0d2\x92\x1d\xea\x0d\x1c*\xbba\x97#\x86\x9a\\\xf6\x0f\x15\xd2\x94 \x90\xc0\x02\x13w\x01\x96!\xc2U\xcba\x03\x84Gl\x16x\xf7&w\x01\x9f\n\xab\n \xb9\xeb\xc7_m\x05\xa1\x17\x88\x88\xaa\xb4\xec\x0b\x85\x1ab\xa6\xbc\xc2l\x08\x80T +\x81\x80\x96\x02\xfdN\x86\x90\xcf3H\xe7]\x1d\xfcN\x86\xe8\x85\xd5\x10\xd6\x05\xa1\xdf\xc9\x10p\xc9\x07\x1e$\xfd$\xdf0\xa6\x14uI\x86\x90zy\xc8T\x08\x03\xc9\xe1\x12!\xa4\x7f\xfd\x9ci\x10uy\x06\xf0,\x80\xaa\x03\x8a7j\xf1\xe8Y\x9d\xb8\xe7A\xb7\x04\x88Fg\xfbM\xd2\xae`\xb4\xb1!\xaa\x93\x03#\xb4\x95\xf8\xf5\xed\xa3\xb5\xad\xb4\x87\x9e(\xbe\x96%\x90\x81_\xc3:\xc8Ii\x00\xc0|\xf6\x1c\x08S_\xf9\x07\xb1\xe4P\xb9[\x19\x15C\xae\x91\x8c\xc4\xadk%\x10)\xaepQ\x14\xda\xd7L^\x91A\x96\x0e\x01\xad\x1d\xea\x98\xf8\x87\xe0\xe3\x07\xc1\xa7\x1a\xea\xd81\xa8C\" \x98PW[\x88\xfa%\x04\xa2\x9dE\xd0g#\xbd\x04i\xa7\xd4.\x04K\x88z\xa5X\xf6\xb3\xa0mR\x06+\xda\x91B\xb7>\xf0\x19\x0f\xd4\x0d\xf2\xcdp\xf4\x9a\x12/\xbd\xce\xe9\x96\xa8s\xd2!zND\x06X,\x02\x86j\xdf$Dq,l\xcfA\x94\xcb\xb9m\xa4 \n\xd2\x8edC\xd9\xb6<\x06ng\x0e\xf2\x9c\xc2v?7\x1a\xe1\xbf\x12qtA\xba\\\x97n\x9a\xf8C=? \xf1lF[\x93\x1e;\xee\xb6\xde\xde\xcdo\xef\x88\x84\xf4gk\xab\x1b\xabi\xa8zR\x18\xc9}D\xde\xde\xda\xe6\x94\xf8\xe9\xd1\xfd\xf1-9|\xc2O\xb4\xf8pB\x1fO\x1eO\xe2xu\xf2\x18|~\xa2\xf9\xc3\xfb\xe3\xf0\xfe\xf8W\xb8Z\x84\xf8\xa9xx\np\x18\xce\xe7\x9fn\x17\xc5\xbbE\xf0D\xde\x99(\xbbw{\x07\x92^\xef\xe3\x068A$\xe2\x15\xc8\xa7\x04a>\xf5\x9cB\x7f>\xfa\xfc\xf1\xd3\x14\x1f\x1f\x9c\xcc\xde\x9d\x1c\xbc?\xf9\x8c\x0f>}\xc0\x1f\x0ff$\xc0G\xd3\xc3\x93\xa3cr(J\xd6+\xbd\x16\xd8\xef\xd2\xab\xa3\xec\xe2\xf5\xe8\xfe\xc9\x8a\xf2\xfdc|\xf7@b#\x98\x9e\x04\xca\xa1\xe0,+\xecu\x06\xf4\xe4\xd3\xe1\xbb\xd9\xa7ip\xf0\xe1\xf0\xc3\xc7\x83\xf7dzr\xf0\xf9\xe4hvp|t|\xf4\xe1\xe3QpL\x82\x06\xa0\xa2\xb1\x8d \x15$\x8e\xee\x1f\xad\xa0~\xce\xef\xe3`\xfe.\x7f|H\xde\xbf\xffur\xf8\xeb\xe9\x96~\xca\xf2\xf9\xea~=\xcb~\x05\x99M\x1c~\xfd2\x03!M\xe2u \x01\x8ax\xe2^\xe5\xf8\x00\xc7yj\xe3O\xde\x8eaT\xd7\xf6\xb5\xb2\xb73e\xc8Eu\xf5*\xb2\xb7j{r4Eq\x9a\xde1\xedl\xa0\"\x93}\xc4\x86\xa4\x8b\x0f\xd7=\x00\xda_s\xfc\x066\xf2j\xec\x08E6\x8b\xf1-7-\xfaj\x81T\xfd\x8c\x8bi7\xa5\x82\x88\xb4n2\x8a('\xa5\x05R\xcb\xb9|\x99&\xb91\xcaC\xb3#\x13\xe0w\x08\xa0j\xd2\xbe\x0f#\xf7\xb4\xc97\x82\x88<\n\x86\x9cK\xfa\xe7D\xa8\xc1\x90\x1d \xf9C.\xa1\xf5\xe0\x94\x93\xe0\x81E> T\xcfX=\x14\xf4\xcc@4\x18\x82\x8c\x14k\xbe\xb1\xa6\x91\xa0uZd\xd2U\xaa\xc3\xe0\xe6J\xa6w]J\x04Q\x19\xed'\xfe\xcf\x90\x91\x11\xe2\x04\xfdU\x90l=R\xc5~//\xbe4\x88\x89\xcc\xd2\xb2y\x15\xda[\xf9Y\x8d\x9bq\x82\x8a\x84<.I\xc0\xbc=q\xb7\x94j\xb9\xf2M\x1e\xcc\xc9\x02\xd7{\xce\xea\xfb\xd9\xfd>N\xbf\xdd\xff\x0e}\x1e\xa4\xa1A\xf9\x8a\x0fl%\xcf\xd5@\x89\x12\xfa\xee\xb8\x85\x8f\xa5\\\xb8\x83\x87\x90P\x1c\xc5;R\x93\x83}~Sd\xd6[m\xbc\xb6\x91\xa7\xb2\xf6\xfe\xda\xb8\x05\xb1\xc4\x19^\x10J\xb2\n\xcf\x07\xc2~kO\xc06\x00\x1b\xd3\xa1\xab\xbf\xda\xcfKu9O}\xbc\xd0(9EKL\xabQ\x99L/D\x19 O\x11\xcd\x8a\xeaT2B\xac\xd0jl\xae\xd7\x90\xea\xe5\xcd\x0c\xc6Ye\x19\x05\xec\xca\xde\x0b\xafa\x97[\x0c\x81{\xa65\x8d\x10\xccp\x9c\x831(\xbd\x7f \x04\xdd\x97\x0b}\x17 \x1a\xce\x1a5\xc3\xe8\x1ezA\xb0\xc12\xc0\xe4\xfc\x0f\xd8[5\x8f\x19\xd8a\xfd\xbcl\xc3\xd2\xb7\x8f\xe3\xd8G\xf6\xb63ds\x93Z\xb0H\x1f\xb7+2]\xdckdhd\x97\xb1ix\xc8@hz\xfa\xd5\xa5\x07]\xa3\xf6\xb2\x084\\c \x02\xbd\x1c\xea\x8a\xeb\\#fq\xa3\xb7)?\xc5\xb75\xd7\xe5/\xd9\xce\x9b\x11\xd3Q$\xc1I@F\x0bBq\x88)\x1e\xad\x8eF|\xc2\x8f\xfe\xad\xf4\xdb\x7fFb\x08\x8f\xfe-\x8d\x1e\x03\xf3?#9\xfa\xdf\x08\xd2\xb7D\xbb\xe1y\xb1X\xe0l}\xaaj\xde\xe5('8\x0b\xe6\xf2NP5k\x94\xf86\xe8\xaf+ar\x0d\x03#\x14\x98\xc1\xc8\xc0\x1d&\xa7\xa7\x04\xf6\x92\xd0U\xb4\x88b\x9c\xc5\xeb\xfd\xaaF\x90\x1ckzM\xd3\x88J\x18\xac,\x0c`\xca\x18\x84\x9a`\xc5a\xd9g\xf6K\xd9\xa7}U\x0e\x0e\xe1\xb2u\x8833\x84#S\xb6\xf8_h2\x13V\xb6nXK6q\x1cWj\x16\xca\xa4%\xd9\x8dYUNZd \xbfk\xc6H\xbb\xec\xa1\x1a\xf5\x88\x968T:\x05'a\xbd^Q\xa3Z#\x9f\xe8\xe6\x06\x1b\xe3\x81k\x0d1d\xe9\x9c\xe8\xd1\\\x91\x96/N\xdb~(g\x8b\xf9\x17\x8c\xb7\n\x1c\x92\xb3\x06G%\x13\x0e\xd6$\x16\x0d\x1f\xb6\xa4M\x1b\x05\xf1\xb4=\xc3T~\xa4\xe9\xf1\xfb\x81\xa6\xc4\xda\x94nE9\xf8\xaa\x15\x0b\n\xfbU\xccp\xad\xce\x84\xee\x94:P5\x80\xca\xd6\x9bH\xf9$2I\xa2\x89\x8d\xd1\x14\x87\xd5\xe3%\xf5#\x14\xcdN\xab\x12_[:\x9d3Q\x95\xfe!\xa2\xf3\xb4\xa0\xf5\xfe7M\xd6\x1a\xa0c+\x9a\x9a^\xb2F\x0fx\xcd\xcd\x91*\xd9\xa7\x9d8\xb4W\x9b\xc1U\xd4q\x0b\xf7*\xde\xff\xaf\xf2M\x85\xb7?j\xcc]?\xa4\xack\xf8\x85M\xe9\xcc\xd1\xa3\xf5\xe9U\xed\xca\xeaD\xd6\xa2\xb1\x1f\x85i\xf2\x86r\x15\xc0\x03sdY*\x94\xb3\x15e]m\x9b\xf1\xe2\xd4\xf7\x98\xdaUhW\x9a\xe6E\xdaZh\"\xdcT\xc6\xea31\xed\xe4h\nS\x92\xa3$\xa5jX\xa1\xbc\x08\xe6m\xbc\x1cl58\xe1\x17_MS:\xaf\x0c\xe1iA\xcb\x88$M(\x8cf\xfc\x95\x1a\xc2yu\xc8\xfec\xad\xb6\xc7\xf6+\x03\xa0l+\x97\x17lQ]\xf8\xab\xc2\xe2\x15\xa1\x8d\xd5\x02N\xc2Q\x9aU|!A\x83\xf5C&\xd2\xack\x9eqm\xc9 \xbf\xd5L\x8a\xb7\xbab\xdc$,]\x85\x13\xf9G\xe5#V\x1c\x977\xc7\x87\x87o\xec[}\x95\x94s\xa3\x879\xd0&\x9f\xe5\xc0\xc4\xbf5\xab\x17]\x0c\x1f]a7P\xd7\x98\xf1\xf2\xba\xb9\\2h3\xb7\x17\x99\xa2z\xec\x05v7:\xb3\xb6\x88\x86|T\x91\x972\xf2\x1e\x08#\xd8\xf6\x1c0F\xc8\x9f\x94\x8c\xd0\x0fQ\xe0v\xf2'\xd2\xf5I\x84\xfe@h\xb2X\xc6\xfc:\xc7\x1c\xe5\xe1\xdd\xdb\xb1'\xe5\x16\xf1\xbd\xdal\x86\x03\xb1\x93\xcd+\xbf\x8a+\xec\xc4\x97D\xcc5\xe5\xcf7\x97\x04\xf5\xe7K\x9a/R[c98C\xfdy\xc1,\x15L\xdeN,\xd7q&\xee\xe8\x97\xda\x97b\xa9\xc0+\xd0\x10\xd5\x178\x8e\xd3\x07\xa9\x9ceF\xbf\x8b\\k\xd7\xa2|\xd2\x87\xa4\xb6\x9d\xdb|\\[\xdf\xea\xf1\x96\x07\xf2\xce\x19\xf1\xf8g\x8ex\xf0\xb6J\xd7b\xf3\xad\xaf{\xaa\xd4\x83\xbb2_\x96\xc6\xde\x92|\x90\x11$\x1e\xcc\xe9\x953R1S)C\x1d\xc8\x02\xcd\xc0xGY\x0c\x82\x00\xca\xd2v\x02\x0fV^\xe7\x00]\x8c/\xaf\xff\xef\xe6\xfa\xff.\xbev\xaa8S\xfb\xf0\xfcr\xf2?\x93\xb3\xf1\xf5\xf9e\xb7\xef\xae\xbe^\xfe\x9c|\xf9\xda\xf1\xab\xc9\xd9\xcf\xafW\x9d\xdb\xfa\xf2\xe3\xea\xfa\xfc\xcf\xc9\xf8\xac\xdbg\xe7\x7f\x9fu\xe5o\xfc\xed\xdb\xe4\xfbd|\xfd\xb5\xdbg\xe7\xff{6\xf9\xc7\x0f\x7fq\xa2\xdaG\x17\x97\xe7?\xbf\x9e\x8d\xcf\xbetl\xec\xcb\xf9\xd9\xf5\xe5\xf9\xf7\xef]e\xfb9\xfe>\xf9\x13\xd0\xd1\xba\xa6Q\xaf\xe1\xe5wV\xea\x8fm\x14\xf7l\x1e\x89 @y\x1e\xdb\xa16\x91eR\x9c\x9a_\xcbVp\xce/\xa9\xcd\xa2\xdb(\xc1\x14R\xa2\xd58\x87NM/\x95\x87\x9e\xa3\x90L\xd9\x92 [E\x01[W\xce\x8a$\xa0\xad\xada\x7fkj\xee\x9d\x9a^\x8a\xd5$\x8f^\x8c\x02\x14%+\x92w\x97G\xcf\xd3S\xe3[\xd55 \x8d\xe8Z\x98o-cP\xe44\x0d#\x9cHA\xe5~\x1e\x07\xb8\xab\xa0|\xde\x9f\xb6\xde4\xcb\".qF\xd7\x92'n\xb4\x95\x95b\xd6\xb7c\x93Zo\x9c\x1a\xdf\ntE\x83b\xf9\x97 <\x9bEq\x84)A\xf86#\xdc\x0d\xe9\xd8\xa8\xd4:\xa7\x86w\xa2A\xee\xf5\xe0X\xc4A\xc8\xab\x94\xd7\xa5\xdf\x94\xa5\xb1\x10~\x91D\xd3\"GS\x9c\xdc)\xab\xd8\x91\x95R\x97\x9d\x9a_3\x86T\x01 \xd5\x0f\xd5n\xc8\xc82#9w\xc5X\x17\x94\xc5'\xe5\x8ej\xbd\x00:\x0ezL\xeaRo\x9e\x9a_\xd7\xc7\xe7\xc3<\n\xe6\x15\x9c\xb4\x0f\xa9f\xbd\xae\xcd\x1c\x11D\x92\x94zj\xb1\xb7\x19\xd2\n\xf9\xd4\xf8\xd6\xc4\x0e/y\xca\x87\xb0(G%\xe6\x07\xa4r\x16\xd2\x17\xae\xfb<\x0b\x7f\xcd\x0e\xb5\x00\xf0\xfe\xff[\x9a\x07\x1c\xc7Z\x05\xa8\x19Qn4G47\xc7H\xd4\x1fu\xee\xa6\x94j\x8d\xd0\x9b\\\xa9\xd6YD\xe2\xd0\x9a\x0b\x80T\xb4\x0e?\x08\" \x9e\xc6b\xcd\xcfT\xb2\xb2U\xff\xcd\xf7\xaa\x05\x83\x82\xaak\x8c$\xfa\x064%\xa3\xb9\xd3`\xb0]\xf1V\xf9-\x19\x84\x97\xf9N\xd3\xca\x9e\xbe\xf0\xa4Q\x90\xc61\xe1\x8e\x13c[\xda\n\x0bA&\x00\x1fmiB\xf4\xb9\x8b\x83Q\xb5\x01\xeb\x88\xd7\x86IR#T\xee\xee\xf9J\x16\xdawlJcd\xfc\x81w#\xcd\xbf\x85\xf6\x9c\x9b\xcf5\x10\xabG\xd9\xb4w\xa5)\x8d\xb8/}y\xcbR\xf82\x90K\x89\x1c9\x9c\x9a\x98\xf8\x87;}sK\x029\x95\x9b\x81A\xe4*\xf8\xe4\xdb\xd7\x06\xe1\x81\x9dy\xbd \x18\xbaJ\x88}\xd9\xbbC\xc96@\x17w\x95m\xa3<\\\xc3\x00\xb0+T\x7fa\x0b\x18\xefmj\x1e\xd5j\xa1\xd3.\xd2d8\x98\xd9\xb2\xa2\xf5\x16\xaa\x00\xf5\xf9V\xa6\xb5\xa7\x1a\x85\xf3\xd8\x085O\xa9`z\x1bZ{\xe2\xc5A\x81\xa8w(-\x18$\x95\xff\x0d\xa0$\xb6\x8aM\x83\xd5\xbaE\xd0\xaf\x1d\xe4\x8cf\x12\x8e\xd6\x0b\x18\x08X\x8d\x87\xe1\x07\xc6\x00C\xa1\x97\xa8\x03\x18\x0d\xcbhi\nmO,u\xedzl+\xebJrc\x83\xdck\x16\xfc- \xe4Ob\x17\x0f\xa8w\x81S\x1d\x1e-1l\xbb]\x86\x9f\xbei\xb9,\xdf\x1f\x98\x0b\x1e\x81\xae\xe01\x15\xf0\x97\xc0\xdb&\x1eR\x8bF?<\xbbye\x92w\xf3K=\xc0>\x96?\x1e\":\x02\x16\x1f\x01\xdd)\x17\xcf\xb01\x12=\xa2$:\x02 \x8b\x94\xd8 V\xa2\x7f\xb4D\xdfx\x89\xbe\x11\x13\xbdc&zEM\xf4\x8e\x9b\xe8\x199\xd1?v\xa2\x7f\xf4D\xcf\xf8\x89M#(\xbaix\xf1X\xa3(\x00\xdf\x9a\xbf\xec\x1bG\xf1l\x91\x14\xcf\x1dK\xf1\x1c\xd1\x14;\x13O\xf1\"\x11\x15/\x14S\xb1SQ\x15\xaf#\xaeb\x07#+^6\xb6\x02\x1e]\x01=WS\x0f\xf4|M=C\xc6X\xc0}\xc7\x81\xe2,zEZ@\xb9\xd4g\x89rs\x85\xf0[\xeaD\"\x13\xff\x83\xccx\xbbMx\x02\x993\x00\x1c\xf9\xd9\x1a\xa8`5L6\x9e\xdbC\xd3\x12\xbe\xeaA\xbf\xbb\xael\xbb\xf2J\x02s\xbc\"\x95\x96$\xc2<\xa6\x8c\xaa%iD\xecj!JVi\xbc\xaa\x97!h>g\xe7l\xe5\xfd\xb7D:#2\xa5[\x84\x82]\xd6\"\x8d\x11\x96\x11h\xb5j\x16\xcd\xa7\x8cG\xc3\nR\x91=~U\xadw\xb1HW\xb6\x8b\xaa\xcbC\x9eA.\xafj\x90\xeb\x17\x11a\x8c\x89p\xbb\x83\x00\x1f\n\xe2?=\xff\x91W3p\xabV\x8a\xc2\x1c\xf0 {\xd6\x13\xcaP\xeb\x0b_$\xc3Ve\xf2(\xb9\x16\x9b}\xc3\x19\xaa\xa4@\xa8@\x82\x9dv\x04\x99v\x90T\xe5\x0d\xf0F\x11Z+u\x02CH\xfe\xf3u`Ta\xb6\xdc\x90\xa8\xbc\x9389\xe9\xa5\xcd:@~\x9c\xdc\x81\x1e`p\xfaH=@\xacG\xb7Y3\xd0@\xe8#\xebF\xc1\x1e\xd6\x81\xe2\x10Y\x05\x15\x0ey\x03V\x8d(\x1a\xfa\x96`HO\x82l%\x02\xdaK\x84 \xa1\xda\xe2\x01\x0e\x0d\x04\xd7\x13h;\xc1\xdb\xe2\xd1=\xe5\xb7\x9d\xe8y\xa4\x03,g\x1aL\xf7\xb7\xa4Ub@\x9c`\xd6\x14\xed\x1eVC\xd8V\x84~_\x13\x0c\x97|\xe0A\xd2O\xf2\x0d\xed 2\x0f!\xb3\xf8\xad+\xa2\x86Xk\x19\x89\x0e\xb7\xe22G\xb5my\x01\xd6\x94i\x00_\x03\xa8B\xa0\xa8\xa3\x0eW%\xfa\x0f\xb4Pk\xeb\xc2k\x9cZ\xdd\xee7P\xbb\x83\xd4\xc6\x86\xa9I\xb0\x03NA\xa7[\xe8v\x08\xb36\xe3\x08p\xf5\xa1\xe1\xabFD{_,}\x86\x0b\x08]\x7fL F\xcbIn\x13\xe9\x07\x1a8\xfd\xa5\xdf\xd0p\x01\x86\x97 \n\x08\xbfr\xd3\xd1~_\xa1\xde\xbb\xda\xc2\x85\x85\x92\xb6\xe3\xc6B\xd5\xba\xf5\xcaB\xbe\xff\xda\xee[\xd1\xa3\xcf\x1b\xe2/\x98\xb1\x8d\xb3\x81\xac\xed\xb3\x87S\x8c\xca^-\xe3\xa1e\xbdU\x84~\xf2:\x042\xbb\xdcIK\x86\xe0\x1bjc\x8c\xe3\xa5\x88z\xf1\x05\xe8\x02,\"\xce\x0c\xc7\xcf\x9a\xf9=\xd60/:\xed\x0e?b\x8f\x8e0\xe3\x97\x17\xd4{3H\x17\x8b4\xe1\xed\xb9\xc3@\xc5\x05n/\x02\x87hZD\x98)1\xca\xe3N\x9aBN\x85\xd5\xa3KW\xa3=A\xf6\x8f\xf2\x94\x95\xe34\xd2\xd08\x8f[\xd5\xc3To\x94\xac\xd2;\xc7X\x8a\x92eA_m\x8e\x16d\x16t\xeax\x98\x07Y\x7f\xceX\xb7\x8b\xeaD\xaa\xe69\xbfX,J\xee\xd0\x14\x07w\xb2\xaa<\x80\x12\x0f3\xe0\xd9\x16|\xd0\xb87\xa9t9\x7f\xff.UG\x08\x80\xee\x81x\xe0S\xc5\xa0\xbe\xa5\xa1/\xc3\xbe\xbf\x81r%\xbe\xe6\x14O\xe3(\x9f\x93P\xc5#\xf8\xe2\xc4!z\xbc#L]%7+\xfc\x88\x04<\x97\xa0\xe2U\x00\xe81\xa0\xd0E\x96.\xd3\x1c\x8e\x81V\xcb\xdb\x01\x82\xdfk\xbaT<\xcd\xf8\xa6\x1c\xcd\x8a\x80\x07\x04q\x1fi\x81\xb3|\xee\x89;G(\xa7\x98\x16\xde\xa9\xdf\x0d\xff\x89NW\x89f\xc2m\xe2\x8a\x8f\xabH5\x0c\x15\xd3\xa0\x0e\xd0\x99\x14\xbf\xf85!2\xcc\x9du1?\xe8Z\x16~\xf5\xdc cx\xba\xe3\xe5\xd7/\xe7\x97\x7f\xdeL\xce.~\\\xdf\\]\x8f\xaf\x7f\\uJA\xb3\xd1\xb8\xb8<\xbf8\xbf\xda\x80\x80x\xe7\xfd\\\xa7\xd0m*HwM\xee\x05\x0f\xd2\x03\x1e\x12\x95\xcc)@N\x07\x0f\xd8\xc2q\x14\x8e\x8aD\xac\x17\xc5\xb8ec\x07\xf0\xb1\xa7+\xcd\x18\xab\xbf6s\xbc*3&A8\x9bF4\xc3\xd9\xba\xd4`\xbc\xe0\xa0^\xf3\x89\xa9\xd0\x9fG\xf1\xce\xcc\xa1xg\xe6/\x12\x13\xba\xe6\x81-3\xb2\x8a\xd2\"\x8f\xd7\xad\xa9^\xc9\x8br\xf2*\x95\xcdu\x86\x83;\xb1\xa9%<'\xbd\x02$\xca&AWe \xedUm\xa4\xe5g3\xd9\x82yDV\xe2v\x94\xb4\xa0>\xb5\x93& \xee\x04\xa5W\xeb\x15\xbe\xb0\xad\xff\xa7\xb4\xf3T\x15G\x15p\xc2*-\x88G|1\xd2\xbb\x00\xcdm\xa8\x17\xb0\xa0W\x9c\xa6\x92K\x0d\xc1r\x1b\xa3\\\x10\x02\x88\x95)J\x12\x1b9\x95\xa3\xe4V]\xb8\xb3?\xc3Q\\d\x80%$bfxI\x92\x10\xd4\x91]z\xbd\x8b\xd1\xbd\xfa\xf1\xbd\x97\x95j\x7f}1\xbe\x82e\xc5\xd7?\xbb\xfa\xd7\xe4\xa2\xc7g\xdf\xc6\x93\xef\xde\xcf*6\xb9\xaf\x9c\xfd\xac\xb1\xa55H\xa7X?\xaeY`T$9\xf1\xfbj\xfc@\xa2K\"|\xbbK\x9b\xe0\xb1w5\x13F*\xb3\x89Y\xd0\xf2\xe6\xa9>M\xb2\xe1\xd0l\x92\xbd\xab4\xa9E\x1a\x05i\x92G\xa1\xda}\xe0\x8d\xdfE\xfc4\"\x14\xb7p-\xa2\xcf \x9dwu\xf0;\x8b\xa1\x17VCX\x17\x84~g1\xc0%\x1fx\x90\xf4\x93|\xc3`P\xd4%\x8bA\xea\xe5!s\x18\x0c$\x87\xcb`\x90\xfe\xf5s\xe6/\xd4\xe5\x19\xc0\xb3\x00\xaa\x0e(\xde\xa8\xc5\xa3gu\xe2\x9e\x07\xdd2\x17\x1a\x9d\xed7I\xbb\x82\xd1\xc6\x86\xa8N\x0e\x8c\xd0V\x02\xcf\xb7\x8f\xd6\xb6\xf2\x15z\xa2\xf8Z\x96@\x06~\x0d\xeb '\xa5\x01\x00\xf3\xd9s L}\xe5\x1f\xc4\x92C\xe5n\xa5B\x0c\xb9F2\x12\xb7\xae\x95@\xa4\xb8\xc2EQh_3yE\x06Y:\x04\xb4v\xa8c\xc6\x1e\x82\x8f\x1f\x04\x9fj\xa8c\xc7\xa0\x0e\x19|`B]m!\xea\x97\xc9\x87v\x16A\x9f\x8d\xf4\x12\xa4\x9dr\xb2\x10,\x93\xe9\x95b\xd9\xcf\x82\xb6I\x19\xachG\n\xdd\xfa\xc0g\xf8\xf4\x01\x7f<\x98\x91\x00\x1fM\x0fO\x8e\x8e\xc9\xa1\xa8\xda\xae4D`\xbfNN\x1au\xd9\xa0\x8b\xd7\xa3\xfb\xa7[r\xf8\x84\x9fh\xf1\xe1\x84>\x9e<\x9e\xc4\xf1\xea\xe41\xf8\xfcD\xf3\xfb\xc7\xf8\xee\x81\xc4&\x8e}\xa9\x88C\xc1Y\x16\x99\xeb\x0c\xe8\xc9\xa7\xc3w\xb3O\xd3\xe0\xe0\xc3\xe1\x87\x8f\x07\xef\xc9\xf4\xe4\xe0\xf3\xc9\xd1\xec\xe0\xf8\xe8\xf8\xe8\xc3\xc7\xa3\xe0\x98\x04\x0d@Ec\x1bA*H\x1c\xdd?ZA\xfd\x9c\xdf\xc7\xc1\xfc]\xfe\xf8\x90\xbc\x7f\xff\xeb\xe4\xf0\xd7\xd3-\xfd\x94\xe5\xf3\xd5\xfdz\x96\xfd\n2\x9b8\xfc\x06b\x06B\x9a\xc4\xeb\x12\x02\x14\xf1\x14\xb8\xcaF<\x8e\xf3\xd4\xc6\x9f\xbc \xc2\xa8\xf8\xbc\xe7L\x03\xf5i\xe3TI\xc3\xaf\x94f\x0dg\x17\x89\xa3\xfbc+\xca\x0f\xef\x8f\xc3\xfb\xe3_\xe1j\x11\xe2\xa7\xe2\xe1)\xc0a8\x9f\x7f\xba]\x14\xef\x16\xc1\x13y\xe7\x00\xc0\xbe\xfa\x1e\x16\x80\xea\xaaYd\x8d\xd5\xf6\x02i\x8afQ\xc2\x15\xa2gdr\xbb\x91H_V\xf4\xafL26| \xb3\x93\xc4\x0e\xaaKL\xd7\x8d\x03\xda\xc1t\xfc\x06\x86E\x8d\x1d1\x1cf1\xbe\xe52\xe9K\x0cR\xf53D=\xd7hJ\xfb&C\x9erRI\xb5W\x8b\xcf|\x99&\xb9\x13\x1ai,w\x07\x9c\xaay\xf7\xc1\xe3\x1csj\xad\xd8\x11\x18\xf2(\xf8pn;<'0\x0d\x86\xec\xc0\xc8\x1fr \xad\x87\xbb\x9c\x04\x0f~\xf2\x01Qv\x88\xc5\xf5A\xcf\x0cD\x83!\xc8\x08\xb1\xe6Dk\x1a Z\xa7E&}\xb0:\x0cn\xaedQ\x8d\xfcRB\x88\xca\x90D\xf1\x7f\x06\x8d\x0cc'\xe8\xaf\x82d\xeb\x91\xfa\x06]^|i\x90\x13\xf9\xaf%\x03*\x00\xb9\xf2\xb3\x1a?\xe3\x04\x15 y\\\x92\x809\x92\xe2\xea*\xd5t\xe5\x9b<\x98\x93\x05\xae\xf7\x9d\xd5\xad\xb4\xbb\x94\x9c~{\x048lD\x90\x86\x06\x8d+>\xb0UTWC%J\xe8\xbb\xe3\x16>\x96j\xe4\x0e\x1eBBq\x14\xefH\xe5\x10\xf6\xf9M\x91Y/\xcd\xf1\xda[\x9ep\xdb\xfbk\xe3F\xc9\x12gxA(\xc9*<\x1f\x88\x1cc\xede\xd9\x06`cBt]\x0b\xf4[\x01\xb8\x1c\xd3>\x1e~\x94\x9c\xa2%\xa6\xd5\xd8Q\xa6\x19\xa2\x8c\x84\xa7\x88fEu*\x19!VhU\xdc\x1c `\xbd\x1d\xa3\x8a\x0b\xd4\x9c\xbd\x16wh0)\xcb\x15\nP\xc8\xeeK\x9a\xbe\x0b\x19=2j\xd4\x0c\xa3d\xe8E\xcb\x06K\x15\xd3\x02\x85\xf5\xd5=3\x16\xc6\xce\x9a\xe18\x07\xf7Ve\xed\x01\xec\xae\xde\xab\x95a\xd7(\x03bPs\xb9\x81(\xf4u\xd3+\x0ey\x8d\x1e\xdc\x07\xed#x\xdb\xaf\xb2y\\ML\xa4\x9b\xdc\x11\x95.\xfey\xc5\x13\xdfiD\x1a.6\x10\x91\x9e\x8ey\xe9\x8271yA\x04\x1a\xbe5\x10\x81^\x1ey\xc5\xf7\xae\x11\xb3\xf8\xe1\xdb\x94\x9f\xe2\xdb\x9a\xe7\xf3\x97l\xe7\xcd\x88\xa9f\x92\xe0$ \xa3\x05\xa18\xc4\x14\x8fVG#>\xcfG\xffVj\xfd?#9\xc0\xdf\x08*\xb7D;\xecy\xb1X\xe0l}\xaa\xaf\x0f\xc9 \xce\x82\xb9\xbc\x9bT~\xa6\xe4\xb4a|]\x9e 3\xdd\xbb\xcf\x8c\x8a2\x1a\xfb\xaa\"\x9bGMkb\x03\xe8h\xc6\x90\xa6\xc7A8hYv\xa1\n+\xd6]\x7f\x00w\xf9L\xbe^\xadY\x88\x9b\x87\xae\xa2E\x14\xe3,^\xef\x97<\xd0Z9v\xa3S\xc2\xeb25\x9c\x8a\x86$C8\x115,=^\xe0:-\xded\xa4l\x9f-\xa02~P\x81\xa2\xa4z\xb1\xcd\x7f\xa1\xc9L8\"\xb8i\xcc\xcbq#\xef~\xac\x1e\xde\xf0\x9bv*\xc5\xfd2B\x8b,\xe1\x97\xe6\x98HW\xdd\x9a\x92.\x8e\xe3\xf2pF\xe6\x87\x89\x9e\xecJ\xbe\xec\xa0=\xd6\x19\xb2\xb5Q\xf9\xfe\x0fck\xcd\xfeQ\xedZ\xdb\xc3\x1ax\xed<\xabk\x0e\x95\x848 G\xe5\x80\xb8\x89\xea\xf85&\x97\xa9A\xfd\x931\x9a\xe2\xb0zD\xa4~\x84\xa2\xd9i\x95\xb1\xeb\xfa\x18\xe5J\x95\x0fL\x9c\x84(I\x8d\xe8\xbfm\x10\x90w\x18\xd1\x87\x94\x0dg~\x8fQ:\xab\xeb\x92\xaaH\xfc\xf0N\x92\xe5\xff\xabN\x985\n\xd3\xe4\x0d\x95\x88\xcf\x84F\xe7\x13\x89\x81'W\x1b\x95\xe6\xc7-T\xf7\xd1\xb4\xa0(I\xa9\x01Y\\\xbb\x1e\xa1MF\\\xd9X\x0ee&\x96\xee-,\x97F\xfc\x97aJr\xc6\xe7\x02\xd3\xa0~=X\xe5\xfbj\x8f\xfcc\xad\xb6Y\xf6+^\x9c\xb8[J\xba&\xe2\"(\xaa\xeb\\U8\xbc\"\xb4\xe1*J\x89\xf4KE\x84\xc1\x95\x89\xb4b\xfb\xden}\xa0i\xd3\xa0K\xa4MBmK\xd4\xde\x88r\x17*6\xec\xcd\xf1\xe1\xe1\x1b\xfb\xa6Q%\xc5\xda\xe8l\x0c\xb4]d\xd9o\xf7o\xf3i\x97\x9b\xe1\xa3\xeb\xc3\x06\xea\xbe-4O\xe30G\xea\xd8TL\xfe\xbd\xc8\x14\xc4b?\xca\xdd\xfc\\\xd5\xb5\x15\xea\x08\xe0\xf2\xed\x10\xf9Nm\x11l\x9f\x07\x18\x12\xe3\xcf\xc1E\xe8\x87\xa8\xe7:\xf9\x13\xe9r\x1cb\xba#4Y,c~\xed`\x8e\xf2\xf0\xee\xed\xd8\x93a*m\xd6\x0c\x07bO\x94\x17:\x15jJ|I\xc4\\S\x9e]\xd39\xac?_\xd2|\x91\xda\x1a\xcb\xc1 \xd9\xcf\x0bf\xa9a\xf2v\x1e\xb5\x0e\xabp\x07{\xd4\xbe\x14\xae$/\xb8BT_\xe08N\x1f\xa4\x19\x93 \xec.r\x81\xfdt\x89_j\xef\x082t\xed\xa1\xaa\xc7[\x0d\xc7;g\xc4\xe3\x9f9\xe2\xc1\xdb\xaa\xd4\x8a\xcd\xb7\x93\xee\xa9\xca\x06\xeeBtY\x1a{+\xd0AF\x90x0\xa7W\xceH\xc5L\xa5\xear \xeb\x11\x03\xc3\xfbd\xed\x03\x02\xa8\xc2\xda <\xbf\x9c\xfc\xcf\xe4l|}~\xd9\xed\xbb\xab\xaf\x97?'_\xbev\xfcjr\xf6\xf3\xebU\xe7\xb6\xbe\xfc\xb8\xba>\xffs2>\xeb\xf6\xd9\xf9\xdfg]\xf9\x1b\x7f\xfb6\xf9>\x19_\x7f\xed\xf6\xd9\xf9\xff\x9eM\xfe\xf1\xc3_\x8b\xa7\xf6\xd1\xc5\xe5\xf9\xcf\xafg\xe3\xb3/\x1d\x1b\xfbr~v}y\xfe\xfd{W\xd9~\x8e\xbfO\xfe\x04t\xb4.\xe1\xd3kx\xf9}\x95\xfac\x1b\xc5=\x9bG\"\xbcM\x1e\xecu(\xc5c\x99\x14\xa7\xe6\xd7\xb2\x15\x9c\xf3\xcbT\xb3\xe86J0\x85T$5\xce\xa1S\xd3K\xe5\xac\xe7($S\x8ar\x92\xad\xa2 Jn\xd1\xacH\x02n\xc6:\xb6\xa6\xe6\xde\xa9\xe9\xa5X-\xf1\x08\xbb(@Q\xb2\"ywy\xf4<=5\xbeU]\x93\xd0\x88\xae\x85\xf9\xd62\x06EN\xd30\xc2\x89\x14T\xee\xf7p\x80\xbb\n\xca\xe7\xfdi\xebM\xb3\n\xe0\x12gt-y\xe2F[Y)f};6\xa9\xf5\xc6\xa9\xf1\xad@W4(\x16\xca \xc2\xb3Y\x14G\x98\x12\x84o3\xc2\xdd\x90\x8e\x8dJ\xadsjx'\x1a\xe4^\x0f\x8e\xc5\x89\xba\xbc\xf2w]\xfaMY\x1a\x0b\xe1\x17I4-r4\xc5\xc9\x9d\xb2\x8a\x1dY)u\xd9\xa9\xf95cH\xd5\xbbQ\xfdP\xed\x86\x8c,3\x92sW\x8cuAYkQnl\xd5\xeb}\xe3\xa0\xc7\xa4.\xf5\xe6\xa9\xf9u}|>\xcc\xa3`^\xc1I\xfb\x90j\xd6\xebR\xc4\x11A$I\xa9\xa7\xf4x\x9b!\xad\x90O\x8doM\xec\xf0\n\x9f|\x08\x8b\xeaKb~@\nE!}1\xb8\xcf\xb3\xf0\x87\xa6\x94\x0f$H\xa5|\xa4\xaf\xa6\xf7\xb7u\xf7\xbf\xc9Q\x1e\xdd&X\xdc\x08\x9ekV\x1d\xf4`~\xdf\x18]Tf\xb9\xf2F\xd9\x14\x1c\xf1b\xe9\x02E\xe6\x17:\xc94k\xd8{\xeb\x1fu\xb1\x83\xd7|U.\xaf\xe3.'\x02\xa2\xe9\x12\xc5dEb\xb9\xa4\xf0\x87\xb4\xab\x95\xbd\xf0h\xdf6I\xf3}o\x863\x8f\xff\x96\x0b}\x97r\xe5\x9a\x82\xdf\xac\xbe\xb6\xdf\x01.\\a\xbe\x9a2\xdc_\"8\xa8\xafU\x9d\xe3\xb4H\xc4\x06$\x9dk\xbe\xe3\x88\xef\xd8\xa6\xb5KA\xad\xb9H\x8c\x93\x1b\x1c\xb8o\xf4\x18p\x11\xe6\xf1\xe8\xe1\xe3`\xacAR\x15\xd4\x98\xe0\x1c1\\\xd0y\x9aEOB\x7ff$ \xd1\xca5\x10\xca\xaa\xe1\xbc_\xdaW0\xe8\x0d \x0b\x11\x1e3s\xc3\xc7\xdd\x8dwq84\x0e\xe5D\xad\x9b*\xd6\xfb\xa2z~C \xe7\xd8\xac\xec\xbd\\Q\x9c\x848\x0b\xab\xe6E\xda\xbb\x9co_.pvg\x88\xaf*\x1f\xf5k\xd7t`\x1d\x96\x17\xcbe\x9a\xd5\xea\xb1r\xce\xdf\xca\xb8\x07Li\x16M\x0bJ\xd0\x02\xaf\xf9\xf6\xbd\x83\xe0\x940\xed\x9e\xdc\x92\x10M\xd7\x1c\x05i\x13\xca\x9a{i\x120\xbf\x85\xe9\xb9\x9c\x18\xb2C\xc4#7\x89n\xb8\xce\xbd\xc9\xd28.\x96\xben\xf5iv\xa8\x05\x80\xf7\xff\xdf\xd2<\xe08\xd6*@\xcd\x88r\xa79\xa2\xb9V\x05\x0eb\xea\xacO)\xd5\x1a\xa17\xb9R\xad\xb3\x88\xc4\xa15`\x1f\xa9p\x15\x1c\xe7)\" \x9e\xc6b\xcd\xcfT\xb2\xb2U\xff\xcd\xb7\xaa\x05\x83\x82\xaak\x8c\x94{\xe5JFs\xa7\xc1`\xbb\xe2\xad\xf2K!\x08\xafj\x9d\xa6\xb4R\xda\x9a{\xd2(H\xe3\x98p\xc7\xa9<\xd2\xb0\xf1\xc8\x04\xe0\xa3-M\x88>\x08q0\xaa6`\x1d\xa1\xbf0Ij\x84\xca\xdd=_\x85>\xfb\x8eMi\x8c\x8c?\xf0n\xa4\xf9\xb7\xd0\x9es\xf3\xb9\x06b\xf5<\x8b\xf6.\xac\xa4\x11\xf7e\xebnY\n_\xc2m)\x91#eQ\x13\x13\xffpg+nI \xa7r30\x88\\\xf5\x8d|\xfb\xda <\xdci\xac \x18\xbaJ\xe8MV\x1dJ\xb6\x01\xba\xb8\xabl\x1b\xa5\x9d\x1a\x06\x80]\xa1\xfa\xeb8\xc0xoS\xf3\xa8V\x0b\x9dvM\"\xc3\xc1\xcc\x96\x15\xad\xb7.\x03\xa8\xcf\xb72\xad=\xc5\x17\x9c\xc7F\xa8yJ\x05\xd3\xdb\xd0R\x0b/\x0e\nD\xbdCi\xc1 \xa9\xfco\x00%\xb1Ul\x1a\xac\xd6-\x82~\xed g4\x93p\xb4^\xc0@\xc0J\x1a\x0c?0\x06\x18\n\xbdD\x1d\xc0hXFKSh\xb5*jK\xe9\xda\xf5\xd8V\xfa\x8e\xe4\xc6\x06\xb9\xd7,\xf8[@\xc8\x9fi.\x1eP\xef\x02\xa7:K\x94\x9b+\x84_\xca&j\xeb\xf1?\xc8\xfc\xa4\xdb\x84W\x98s\x06\x80#?[\x03\xd5g\x86\xc9\xc6\xf3xhZ\xc2W=\xe8\x97\xe7\x8c\xb0\xfb\xf7\xa4{\xbf\xcf\xf8\x8b\x02\x1c\xc7k\x14\xc48\xcf\x9d\xb5\x9a\xe5G\x03\x88\xbb\x855\xb0Z\xb0\x88$\xdb\x88\xc4\xe2P\x9eYd\xe6\x02\x04qD\x92r=\xcc#&\x9c\xf4\xdaC\xd4\xbb\x08\xc6E\x189\xd1\xe9\"\xcf\x17\xbe\xfc\x0e\xd1t\xbd\x8f\x8ae\xa8\xffM\xa3\x05\xc9)^,\xf3}\xbd}&\x8a<\xbaoF\x15\x89b\xb1\xbc\xbbo\x96\xda\xc5\x00\xaf\xb0\xa1\xebk\xb1\x93\x10\xde0!|\x8a\x138\x80Pe\x101\xb2\x07\x0c\x16\x1fi1\xc7d\x1c\x13\x19\xb1O\x98\x06\x95\xb1\x02$\xa1\xd9\x9a\xdf\xd8'\xf9\x05\xc94]\x0f(\x11L\x0b \xb9\xe2\xb6\xec+\x08\x17E\x8e\x1e\xaf\x82C:\xa0\xcc\xf939\x02_M\x17\xc68\xa7\x8ai\x90`;\xda\x8f<,/\x1a\xb0#\xa5\xca\x80 k\xabDU\x7f*u\xa9>\xbc\xf7\xd1\x05#\xc3|k\xe9\xbb4\xf4\x9c@\x86\x97\xa4\x0f2\xee\xfd\x03\xf6\x9b\xb8\x0e'8\x98\xcb\x1ew~`\xad\xa6U\x7f\xb62\"\xaarK>\x0c\x91}\xbe\x89\"\x15T\x94&#!/\"+\xf72 \xc6\xe1\x98\x99\xb8o\xcc\xba\xe6(\xc0K\xe1e\x1a\xa3v\xd8\x0ct\x92\xd2\xe3\xbc\xa8T^\xa8\xcf\x85H*\xb5_\xd4X\xf3\xa6]\xf8\x94\"\xea\xc5\x17\xa0\x0bd\x1dq\xc3)\xb6f~\x8f5\xcco\xfbqG1\xb1G\x07\xaa\xf1R\xf4\xf5\xde\x0c\xd2\xc5\"Mx{\xeehRq\xa1\xd8\x8b\xc0!\x9a\x16\x81jJ\x8c\xf2\xd4\x94\xa6\x90\xc3e\xf5\xe8\xfa\xd7hO\x90\xfd\xa3<\xac\xe58\x8d44\xceS[\xf50\xd5\x1b%\xab\xf4\xce1\x96\xa2dY\xd0W\x9b\xea\x05\x99\x05\x9d:\x1e\xe2\xf45\x9f3\xd6\xed\xa2\xc8\x91*\x9d\xce:>\x8e\x92;4\xc5\xc1\x9d,!\x0f\xa0\xc4\xa3\x15x\xd2\x06\x1f4\xee\xbd.]\xea\xdd\xbf\xd9\xd5\x11\x02\xa0{ \x1e\xf8T1\xa8oi\xe8\xcb\xe8\xf1o\xa0\x94\x8b\xaf9\xc5\xd38\xca\xe7$Ta\x0d\xbeps\x88\x1e\xef\x08SW\xc9\xcd\n?\"\x01OI\xa8x\x15\x00z\x0c(t\x91\xa5\xcb4\x87c\xa0\xd5\xf2v\x80\xe07m.\x15O3\xbe\xb7G\xb3\"\xe0qE\xdcGZ\xe0,\x9f{\xc2\xd7\x11\xca)\xa6\x85w\xeaw\xc3\x7f\xa2\xb3^\xa2\x99p\x9b\xb8\xe2\xe3*R\x0dC\xc54\xa8\x03tB\xc6\xaf\x82G\x10\x89hy\xd6\xc5\xfc\xbclY\xf8\xd5s'\x8c\xe1Y\x93\x97_\xbf\x9c_\xfey39\xbb\xf8q}su=\xbe\xfeq\xd5)\x93\xcdF\xe3\xe2\xf2\xfc\xe2\xfcj\x03\x02\xe2\x9d\xf7s\x9d\x89\xb7\xa9 \xdd5\xb9\x17(\xcb\x15G0\xd7\xe1u\xd4Xjr\xa9\x00,\xcf2\x00v67\x96c2\x96\\\x92\x87G\x16r\xfe\xde\x1e\xeb#\x91t\xc6=W\xde\xe5\x98R\x1c\xccEk:\xa3\x95\xcdM\x82\x03{\x81\xed\xfa\x8c\x91\xe3\x98\xaf\xdd\xbd\x89\xdb5\x88%G\x12\xb94\x91\x1b\x1a\xf2\xb5\xccv2\x8b\xac7\xae\x06 T\xaaS\xf3D(U\"\x91\xac\x04kC`\xcb\x11I\xa0=\xbc-N\x14\xdd\xbe5\xc8Hv\xa87p\xa8\xec\x86]\x8e\x18jr\xd9?THS\x82@\x02\x0bL\xdc\x05X\x86\x08W-\x87\x0d\x10\x1e\xb1Y\xe0\xdd\x9b\xdc\x05|*\xac*\x80\xe4\xae\x1f\x7f\xb5\x15\x84^ \"\xaa\xd2\xb2/\x14j\x88\x99\xf2\n\xb3!\x00R\x81\xac\x04\x02Z\n\xf4;\x19B>\xcf \x9dwu\xf0;\x19\xa2\x17VCX\x17\x84~'C\xc0%\x1fx\x90\xf4\x93|\xc3\x98R\xd4%\x19B\xea\xe5!S!\x0c$\x87K\x84\x90\xfe\xf5s\xa6A\xd4\xe5\x19\xc0\xb3\x00\xaa\x0e(\xde\xa8\xc5\xa3gu\xe2\x9e\x07\xdd\x12 \x1a\x9d\xed7I\xbb\x82\xd1\xc6\x86\xa8N\x0e\x8c\xd0V\xe2\xd7\xb7\x8f\xd6\xb6\xd2\x1ez\xa2\xf8Z\x96@\x06~\x0d\xeb '\xa5\x01\x00\xf3\xd9s L}\xe5\x1f\xc4\x92C\xe5neT\x0c\xb9F2\x12\xb7\xae\x95@\xa4\xb8\xc2EQh_3yE\x06Y:\x04\xb4v\xa8c\xe2\x1f\x82\x8f\x1f\x04\x9fj\xa8c\xc7\xa0\x0e\x89\x80`B]m!\xea\x97\x10\x88v\x16A\x9f\x8d\xf4\x12\xa4\x9dR\xbb\x10,!\xea\x95b\xd9\xcf\x82\xb6I\x19\xachG\n\xdd\xfa\xc0g\xf8\xf4\x01\x7f<\x98\x91\x00\x1fM\x0fO\x8e\x8e\xc9\xa1(Y\xaf\xf4Z`\xbfK\xaf\x8e\xb2\x8b\xd7\xa3\xfb'+\xca\xf7\x8f\xf1\xdd\x03\x89\x8d`z\x12(\x87\x82\xb3\xac\xb0\xd7\x19\xd0\x93O\x87\xeff\x9f\xa6\xc1\xc1\x87\xc3\x0f\x1f\x0f\xde\x93\xe9\xc9\xc1\xe7\x93\xa3\xd9\xc1\xf1\xd1\xf1\xd1\x87\x8fG\xc11 \x1a\x80\x8a\xc66\x82T\x908\xba\x7f\xb4\x82\xfa9\xbf\x8f\x83\xf9\xbb\xfc\xf1!y\xff\xfe\xd7\xc9\xe1\xaf\xa7[\xfa)\xcb\xe7\xab\xfb\xf5,\xfb\x15d6q\xf8\xf5\xcb\x0c\x844\x89\xd7%\x04(\xe2\x89{\x95\xe3\x03\x1c\xe7\xa9\x8d?y;\x86Q]\xdb\xd7\xca\xde\xce\x94!\x17\xd5\xd5\xab\xc8\xde\xaa\xed\xc9\xd1\x14\xc5iz\xc7\xb4\xb3\x81\x8aL\xf6\x11\x1b\x92.>\\\xf7\x00h\x7f\xcd\xf1\x1b\xd8\xc8\xab\xb1#\x14\xd9,\xc6\xb7\xdc\xb4\xe8\xab\x05R\xf53.\xa6\xdd\x94\n\"\xd2\xba\xc9(\xa2\x9c\x94\x16H-\xe7\xf2e\x9a\xe4\xc6(\x0f\xcd\x8eL\x80\xdf!\x80\xaaI\xfb>\x8c\xdc\xd3&\xdf\x08\"\xf2(\x18r.\xe9\x9f\x13\xa1\x06Cv\x80\xe4\x0f\xb9\x84\xd6\x83SN\x82\x07\x16\xf9\x80P=c\xf5P\xd03\x03\xd1`\x082R\xac\xf9\xc6\x9aF\x82\xd6i\x91IW\xa9\x0e\x83\x9b+\x99\xdeu)\x11De\xb4\x9f\xf8?CFF\x88\x13\xf4WA\xb2\xf5H\x15\xfb\xbd\xbc\xf8\xd2 &2K\xcb\xe6Uho\xe5g5n\xc6 *\x12\xf2\xb8$\x01\xf3\xf6\xc4\xddR\xaa\xe5\xca7y0'\x0b\\\xef9\xab\xefg\xf7\xfb8\xfdv\xff;\xf4y\x90\x86\x06\xe5+>\xb0\x95\x96r\xe1\x0e\x1eBBq\x14\xefHM\x0e\xf6\xf9M\x91Yo\xb5\xf1\xdaF\x9e\xca\xda\xfbk\xe3\x16\xc4\x12gxA(\xc9*<\x1f\x08\xfb\xad=\x01\xdb\x00lL\x87\xae\xfej?/\xd5\xe5<\xf5\xf1B\xa3\xe4\x14-1\xadFe2\xbd\x10e$U\xe5\xeer\x94\x13\x9c\x05sy\x1d\xa8\x9a-Jl\x1b\xe4\xd7\x95\x08\xb9\x86\xd5\x13\x8a\xcb`\xf9\xe0\xbe\x92\xd3I\x02;H\xe8*ZD1\xce\xe2\xf5~U\x13H\x8e5\xbd\xa6\xbdF%\x0cV\x16\x06\xb0\xaf\x0cBM\xb0\xe2E\xed3\xa3\xaa\x8c\xe6\xbe\xaa\x04\x87p\xd9:\xc4\xc3\x1a\xc2\xbb*[\xfc/4\x99 \xd3_\xb7\xf6%\x9b8\x8e+\xe5\ne\xbe\x92\xec\xc6\xac*'-\xb2\x84_3c\xa4]\xf6P\x8dzDK\x1c*\x9d\x82\x93\xb0^\xaa\xa8Q\xa8\x91Ops\x83\x8d\xf1\xc0\xb5\x85\x18\xb2tN\xf4h\xaeH\xcb\xd7\xa5m\xe7\x98\xb3\xc5\x9c\x1e\xc6[\x05\x0e\xc9Y\x83\xa3\x92 \x07k\x12\x8b\x86c]\xd2\xa6\x8dZx\xda\x8ea*?\xd2\xf4\xf8\xd5@SbmJ\xb7\xa2<%\xd5\x8a\x05\x85\xfd*f\xb8VbBwJ\x1d\xa8\x1a@e\xebM\xa4|\x12\x99$\xd1\xc4\xc6h\x8a\xc3\xea\xc9\x92\xfa\x11\x8af\xa7U\x89\xaf-\x9d\xce\x99\xa8J\xff\x10\xd1yZ\xd0z\xff\x9b&k\x0d\xd0\xb1\x15MM/Y\xa3\x07\xbc\xe6fHU\xeb\xd3\xce\x1b\xda\xab\xcd\xe0*\xea\xb8\x85{\x15\xef\xffW\xf9\xa6\xc2\xdb\x1f5\xe6\xae\x1fR\xd65\xfc\xae\xa6t\xe6\xe8\xd1\xfa\xf4\xaaveu\"k\xd1\xd8\x8f\xc24yC\xb9\n\xe019\xb2\"\x15\xca\x99k^W\xdbf\xbc8\xf5=\xa6v\x15\xda\x95\xa6y}\xb6\x16\x9a\x087\x95\xb1\xfaLL;9\x9a\xc2\x94\xe4(I\xa9\x1aV(/\x82y\x1b/\x07[\x0dN\xf8\x9dW\xd3\x94\xce+CxZ\xd02\x18I\x13\n\xa3\x19\x7f\xa5\x86p^\x1d\xb2\xffX\xab\x9d\xb1\xfd\xca\x00(\xdb\xca\xe5\xddZT\xd7\xfc\xaa\xb0xEhc\x95\x80\x93p\x94f\x15\x1fH\xd0`\xfd\x90\x89\x0c\xeb\x9aG\\[*\xc8o5\x93\xe2\xad.\x167 KW\xe1\x9d\xfc\xa3\xf2\x0d+\x0e\xcb\x9b\xe3\xc3\xc37\xf6]\xbeJ\xb6\xb9\xd1\xb3\x1ch\x7f\xcfrV\xe2\xdf\x95\xd5\x8b-\x86\x8f.\xae\x1b\xa8\x1b\xccxe\xdd\\.\x15\xb4\x99\xdb\x8bL\x01=\xf6\xda\xba\x1b\x1dW[DC>\xaa\xc8K\x19y\xcf\x82\x11lg\x0e\x18\x1e\xe4\xcfGF\xe8\x87\xa8m;\xf9\x13\xe9\xd2$B\x7f 4Y,c~\x93c\x8e\xf2\xf0\xee\xed\xd8\x93m\x8b\xf86m6\xc3\x81\xd8\xc4\xe6E_\xc5\xedu\xe2K\"\xe6\x9a\xf2\xe3\x9bK\x81\xfa\xf3%\xcd\x17\xa9\xad\xb1\x1c\x9c\x9c\xfe\xbc`\x96\n&o\xe7\x94\xeb\x10\x13w\xe0K\xedK\xb1T\xe0\xc5g\x88\xea\x0b\x1c\xc7\xe9\x83T\xce2\x99\xdfE\xae\xb5[Q>\xe9CR\xdb\xc9m>\xae]o\xf5x+\x03y\xe7\x8cx\xfc3G\xc8\x08\x12\x0f\xe6\xf4\xca\x19\xa9\x98\xa9T\xa0\x0edmf`\xa8\xa3\xac\x03A\x00\x15i;\x81\x07\xab\xacs\x80.\xc6\x97\xd7\xffws\xfd\x7f\x17_;\x15\x9b\xa9}x~9\xf9\x9f\xc9\xd9\xf8\xfa\xfc\xb2\xdbwW_/\x7fN\xbe|\xed\xf8\xd5\xe4\xec\xe7\xd7\xab\xcem}\xf9qu}\xfe\xe7d|\xd6\xed\xb3\xf3\xbf\xcf\xba\xf27\xfe\xf6m\xf2}2\xbe\xfe\xda\xed\xb3\xf3\xff=\x9b\xfc\xe3\x87\xbf.Q\xed\xa3\x8b\xcb\xf3\x9f_\xcf\xc6g_:6\xf6\xe5\xfc\xec\xfa\xf2\xfc\xfb\xf7\xae\xb2\xfd\x1c\x7f\x9f\xfc \xe8h]\xce\xa8\xd7\xf0\xf2;+\xf5\xc76\x8a{6\x8fD\xfc\x9f<\x8a\xedP\x96\xc82)N\xcd\xafe+8\xe7\xf7\xd3f\xd1m\x94`\n\xa9\xcej\x9cC\xa7\xa6\x97\xcaC\xcfQH\xa6lI\x90\xad\xa2\x80\xad+gE\x12\xd0\xd6\x96\xb0\xbf55\xf7NM/\xc5j\x92\x07.F\x01\x8a\x92\x15\xc9\xbb\xcb\xa3\xe7\xe9\xa9\xf1\xad\xea\x9a\x84Ft-\xcc\xb7\x961(r\x9a\x86\x11N\xa4\xa0r?\x8f\x03\xdcUP>\xefO[o\x9a\x15\x11\x978\xa3k\xc9\x137\xda\xcaJ1\xeb\xdb\xb1I\xad7N\x8do\x05\xba\xa2A\xb1\xfcK\x10\x9e\xcd\xa28\xc2\x94 |\x9b\x11\xee\x86tlTj\x9dS\xc3;\xd1 \xf7zp,B \xe4-\xca\xeb\xd2o\xca\xd2X\x08\xbfH\xa2i\x91\xa3)N\xee\x94U\xec\xc8J\xa9\xcbN\xcd\xaf\x19C\xaa\xf6\x8f\xea\x87j7dd\x99\x91\x9c\xbbb\xac\x0b\xca\xba\x93rG\xb5^\xfb\x1c\x07=&u\xa97O\xcd\xaf\xeb\xe3\xf3a\x1e\x05\xf3\nN\xda\x87T\xb3^\x97e\x8e\x08\"IJ=e\xd8\xdb\x0ci\x85|j|kb\x87W;\xe5CXT\xa2\x12\xf3\x03R4\x0b\xe9\xbb\xd6}\x9e\x85?\x94\xa8| AE\xe5#}5}\x9a\xa1\xbb\xffM\x8e\xf2\xe86\xc1\xe2\x92\xf5\\\xb3\xea\xa0\x07\xf3\xfb\xc6\xe8\xa22\xcb\x957\xca\xa6\xe0\x88\x17\x8e\x17(2\xbf\xd0I\xa6Y\xcf\xdf[\x0b\xaa\x8b\x1d\xbc\xe6\xcbry\xc3y9\x11\x10M\x97(&+\x12\xcb%\x85?\xbc_m\x9c\x08\x8f\xf6m\x934\xdf\xcbd8\xf3\x8d<\xb9\xd0w)W\xae)\xf8e\xf5k\xfb\xb5\xea\xc2\x15\xe6\xab)\xc3].\x82\x83\xfaZ\xd59N\x8b\x84\x17\xd9c(+\xbe\xe3(\xa7\xa22\\\xf5@\xd4\x16X\xcb8\xb9\xc1\x81\xfbv\x93\x01\x17a\x1e\x8f\x1e>\x0e\xc6\x1a$UM\x8e \xce\x11\xc3\x05\x9d\xa7Y\xf4$\xf4gF\x02\x12\xad\\\x03\xa1\xac\xa0\xce\xfb\xa5}\x1d\x85\xde\x90\xb0\x10\xe1QN7|\xdc\xddx\x17\x87C\xe3PN\xd4\xba\xa9b\xbd/n\x12h\x08\xe4\x1c\x9b\x95\xbd\x97+\x8a\x93\x10ga\xd5\xbcH{\x97\xf3\xdd\xcb\x05\xce\xee\x0c\x11q\xe5\xa3~\xed\x9a\x0e\xac\xc3\xf2b\xb9L\xb3ZmZ\xce\xf9[\x19\x8b\x82)\xcd\xa2iA Z\xe05?2q\x10\x9c\x12\xa6\xdd\x93[\x12\xa2\xa9\xd8p\x976\xa1\xac?\x98&\x01\xf3[\x98\x9e\xcb\x89!SF\xbc\xf7\xd1\x05#\xc3|k\xe9\xbb4\xf4\x9c@\x86\x97\xe7\x0f2\xee\xfd\x03\xf6\x9b\xb8\x0e'8\x98\xcb\x1ew~`\xad\x7fV\x7f\xb62\"\xaarK>\x0c\x91}\xbe\x89\"\x15T\x94&#!/\"+\xf72 \xc6\xe1\x98\x99\xb8o\xcc\xba\xe6(\xc0K\xe1e\x1a\xa3v\xd8\x0ct\x92\xd2\xe3\xf6t\xa5\x19c\xf5\xd7f\x8eWe\xc6$\x08g\xd3\x88f8[\x97\x1a\x8c\x17\x1c\xd4k>1\x15\xfa\xf3(\xde\x999\x14\xef\xcc\xfcEbB\xd7<\xb0eFVQZ\xe4\xf1\xba5\xd5+yQN^\xa5\xb2\xb9\xcepp'6\xb5\x84\xe7\xa4W\x80D\xd9$\xe8\xaa\x0c\xa4\xbd\xaa\x8d\xb4\xfcl&[0\x8f\xc8J\xdc\x8e\x92\x16\xd4\xa7v\xd2\x04\xc4\x9d\xa0\xf4j\xbd\xc2\x17\xb6\xf5\xff\x94v\x9e\xaa\xe2\xa8\x02NX\xa5\x05\xf1\x88/Fz\x17\xa0\xb9\x0d\xf5\x02\x16\xf4\x8a\xd3Tr\xa9!Xnc\x94\x0bB\x00\xb12EIb#\xa7r\x94\xdc\xaa\x0bw\xf6g8\x8a\x8b\x0c\xb0\x84D\xcc\x0c/I\x12\x82:\xb2K\xafw1\xbaW?\xbe\xf7\xb2R\xed\xaf/\xc6W\xb0\xac\xf8\xfagW\xff\x9a\\\xf4\xf8\xec\xdbx\xf2\xdd\xfbY\xc5&\xf7\x95\xb3\x9f5\xb6\xb4\x06\xe9\x14\xeb\xc75\x0b\x8c\x8a$'~_\x8d\x1fHtI\x84owi\x13<\xf6\xaef\xc2He61\x0bZ\xde<\xd5\xa7I6\x1c\x9aM\xb2w\x95&\xb5H\xa3 M\xf2(T\xbb\x0f\xbc\xf1\xbb\x88\x9fF\x84\xe2\x16\xaeE\x94\xe7lrJ{\x94f($1^\x93\x10\x98[ha\x92\x0d\xbe&\x93\xec\x9d\x15\x97\xf2L\xd0\xc89\xd3\x19\xb6\x18r\xf5@\x95\x9eXT\x9d\x0b\xfdD\x92\x00/\xf3\"\xd6,I\xbd\xc5W\xb1\x90}DTz\x1e\x80\xb4b\x18\x8f\x82\x87\xbd\xfc\x0f}\xb2/\x8e\x8c\x18W\x122qM\xb0V\xd7\x9e^b?\x15\x0b\x19\xf5AYg8\x82\xb9\x0e\xaf\xa38R\x93K\x05`y\x96\x01\xb0\xb3\xb9\xb1\x8e\x92\xb1V\x92\xba\xac\xcfL\xc8\xdf\xdbc}$\x92\xce\xb8\xe7\xca\xbb\x1cS\x8a\x83\xb9hM\xa7\xa2\xb2\xb9Ip`\xaf\x8c]\x9f1r\x1c\xf3\xb5\xbb7\xe3\xba\x06\xb1\xe4H\"\x97&rCC\xbe\x96iJf\x91\xf5\xc6\xd5 \x11Fuj\x9e\xd0\xa2J\x08\x91\x95`m\x08l9\x94\x08\xb4\x87\xb7\xc5\x89\xa2\xdb\xb7F\x07\xc9\x0e\xf5F\xfc\x94\xdd\xb0\xcb\xa1>M.\xfb\xc7\xf8hJ\x10H`\x11\x85\xbb\x00\xcb\x10q\xa6\xe5\xb0\x01\xc2#6\x0b\xbc{\x93\xbb\x80O\x85U\x05\x90\xdc\xf5\xe3\xaf\xb6\x82\xd0\x0b\x842UZ\xf6\xc50\x0d1S^a\x1a\x03@*\x90\x95@@K\x81~g1\xc8\xe7\x19\xa4\xf3\xae\x0e~g1\xf4\xc2j\x08\xeb\x82\xd0\xef,\x06\xb8\xe4\x03\x0f\x92~\x92o\x18\x0c\x8a\xbad1H\xbd{\x0e\x84\xa9\xaf\xfc\x83Xr\xa8\xdc\xadT\x88!\xd7HF\xe2\xd6\xb5\x12\x88\x14W\xb8(\n\xedk&\xaf\xc8 K\x87\x80\xd6\x0eu\xcc\xd8C\xf0\xf1\x83\xe0S\x0du\xec\x18\xd4!\x83\x0fL\xa8\xab-D\xfd2\xf9\xd0\xce\"\xe8\xb3\x91^\x82\xb4SN\x16\x82e2\xbdR,\xfbY\xd06)\x83\x15\xedH\xa1[\x1f\xf8\x8c\x07\xea\x06\xf9f8zM\x89\x97^\xe7\xe0\x8f\x073\x12\xe0\xa3\xe9\xe1\xc9\xd119\x14U\xdb\x95\x86\x08\xec\xd7\xc9I\xa3.\x1bt\xf1zt\xfftK\x0e\x9f\xf0\x13->\x9c\xd0\xc7\x93\xc7\x938^\x9d<\x06\x9f\x9fh~\xff\x18\xdf=\x90\xd8\xc4\xb1/\x15q(8\xcb\"s\x9d\x01=\xf9t\xf8n\xf6i\x1a\x1c|8\xfc\xf0\xf1\xe0=\x99\x9e\x1c|>9\x9a\x1d\x1c\x1f\x1d\x1f}\xf8x\x14\x1c\x93\xa0\x01\xa8hl#H\x05\x89\xa3\xfbG+\xa8\x9f\xf3\xfb8\x98\xbf\xcb\x1f\x1f\x92\xf7\xef\x7f\x9d\x1c\xfez\xba\xa5\x9f\xb2|\xbe\xba_\xcf\xb2_Af\x13\x87\xdf@\xcc@H\x93x]B\x80\"\x9e\x02W\xd9\x88\xc7q\x9e\xda\xf8\x93\x17D\x18\x15\x9f\xf7\x9ci\xa0>m\x9c*i\xf8\x95\xd2\xac\xe1\xec\"qt\x7flE\xf9\xe1\xfdqx\x7f\xfc+\\-B\xfcT<<\x058\x0c\xe7\xf3O\xb7\x8b\xe2\xdd\"x\"\xef\x1c\x00\xd8W\xdf\xc3\x02P]5\x8b\xac\xb1\xda^ M\xd1,J\xb8B\xf4\x8cLn7\x12\xe9\xcb\x8a\xfe\x95I\xc6\x86\x0fdv\x92\xd8Au\x89\xe9\xbaq@;\x98\x8e\xdf\xc0\xb0\xa8\xb1#\x86\xc3,\xc6\xb7\\&}\x89A\xaa~\x86\xa8\xe7\x1aMi\xdfd\xc8SN*\xa9\xf6j\xf1\x99/\xd3$wB#\x8d\xe5\xee\x80S5\xef>x\x9ccN\xad\x15;\x02C\x1e\x05\x1f\xcem\x87\xe7\x04\xa6\xc1\x90\x1d\x18\xf9C.\xa1\xf5p\x97\x93\xe0\xc1O> \xca\x0e\xb1\xb8>\xe8\x99\x81h0\x04\x19!\xd6\x9chM#A\xeb\xb4\xc8\xa4\x0fV\x87\xc1\xcd\x95,\xaa\x91_J\x08Q\x19\x92(\xfe\xcf\xa0\x91a\xec\x04\xfdU\x90l=R\xdf\xa0\xcb\x8b/\x0dr\"\xff\xb5d@\x05 W~V\xe3g\x9c\xa0\"!\x8fK\x120GR\\]\xa5\x9a\xae|\x93\x07s\xb2\xc0\xf5\xbe\xb3\xba\x95v\x97\x92\xd3o\x8f\x00\x87\x8d\x08\xd2\xd0\xa0q\xc5\x07\xb6\x8a\xeaj\xa8D }w\xdc\xc2\xc7R\x8d\xdc\xc1CH(\x8e\xe2\x1d\xa9\x1c\xc2>\xbf)2\xeb\xa59^{\xcb\x13n{\x7fm\xdc(Y\xe2\x0c/\x08%Y\x85\xe7\x03\x91c\xac\xbd,\xdb\x00lL\x88\xaek\x81~+\x00\x97c\xda\xc7\xc3\x8f\x92S\xb4\xc4\xb4\x1a;\xca4C\x94\x91\xf0\x14\xd1\xac\xa8N%#\xc4\x1a-\xed\xbbC\xf1\xea\xec\xec\xf7u\xf15f5j\x06\xfc\x86v\xe77p\xe2M\xae\xfb`}U\xf1\xc9\x81\x9d\xd5\xdb\x8b\x1f\xd6wg\x08\xdc3Cb\x84`\x86\xe3\xbc+\x06\x8d\x93+\x00\x06\xdd\x1d\xf9\x8a\xcbn\xec\xe3\xb6\xfb>\xa0\x9c5\x97\x1b(i_7\xbd\xe2\x90\xd7\xe8\xc1}\xd0>\x82\xb7\xfd*\x9b\xc7\xd5\xc4D\xba\xc9\x1dQ\xe9\xe2\x9fW<\xf1\x9dF\xa4\xe1b\x03\x11\xe9\xe9\x98\x97.x\x13\x93\x17D\xa0\xe1[\x03\x11\xe8\xe5\x91W|\xef\x1a1\x8b\x1f\xbeM\xf9)\xbe\xady>\x7f\xc9v\xde\x8c\x98r\" N\x022Z\x10\x8aCL\xf1hu4\xe2\xf3|\xf4oe\xbc\xfe3\x92cx\xf4\xef\xd2\x9e\xffg$F\xfd\xe8\xdf\x0c\xda\xff\xbc\x11\x0d\xdc\x12\xed\xcb\xe7\xc5b\x81\xb3\xf5\xa9\xbeY$'8\x0b\xe6\xf2\xdaR9e\x14\x046\xf8\xaf\xcb\xc3ef~\xf6\x99UU\x1au_\x15k\xf3X*Ml\x003\xc5\x18\xd2\xf48>\x07-\xd7Fh\xc9\x8a{\xa3?\x80{\x83&7\xb0\xd6,\xc4\x03DW\xd1\"\x8aq\x16\xaf\xf7K\x1eh\xadR\xbb\xd1+\xe3%\x9b\x1a^UC\x92!\xbc\xa8\x1a\x96\x1e\x83\xbbN\x8b7\x19)\xdbgk\xab\x8c\x9fa\xa0(\xa9\xdey\xf3_h2\x13\x9e\x18n\xfa3\xe5\xb8\x91\xd7BV\xcfu\xf8%<\x95\xba\x7f\x19\xa1E\x96\xf0\xfbtL\xa4\xab~]I\x17\xc7qyn#S\xc7DOv%_v\xd0\x1e\xeb\x0c\xd9\xda\xa8|\xff\x87\xb1\xb5f\xff\xa8v\xad\xeda\x0d\xbc\xf6S\xd4\x0d\x88JB\x9c\x84\xa3r@\xdcDu\xfc\x1a\x93\xcb\xd4\xa0\xfe\xc9\x18MqX==R?B\xd1\xec\xb4\xca\xd8u}\x8cr}\xcb\x07&NB\x94\xa4F\xf4\xdf6\x08\xc8\xeb\x8d\xe8C\xca\x863\xbf\xe2(\x9d\xd5uIU$~\xae'\xc9\xf2\xffU'\xcc\x1a\x85i\xf2\x86J\xc4gB\xd9\xf3\x89\xc4\xc0\x93\x8e]\xa5\xf9q\x0b\xd5}4-(JRj@\x16\xd7nNh\x93\x11\xb79\x96C\x99\x89\xa5{\x0bK/\x94\xff2LI\xce\xf8\\`\x1a\xd4o\x0e\xab|_\xed\x91\x7f\xac\xd5\x0e\xcc~\xc5\xc1\x13\xd7NI\xafE\xdc\x11Eu \xac\n\x87W\x846\xbcH)\x91~\xa9\x880\xb82\x91ql\xdf\xf6\xad\x0f4m\x1at\xf5\xb4I\xa8m\xc9\xc9\xffSb O\xa2b\xde\xde\x1c\x1f\x1e\xbe\xb1\xef'U\xb2\xaf\x8d~\xc8@;I\x96\xadx\xff\x0e\xa0\xf6\xc6\x19>\xbatl\xa0\xae\xe2B\xf34\x0es\xa4NT\xc5\xe4\xdf\x8bL\xf1-\xf6S\xde\xcd\x8f\\]\xbb\xa4\x8e\xd8.\xdf\xe6\x91\xef@\x17\xc1\xb6\x80\x80\xd12\xfe\xf4\\\x84~\x88R\xaf\x93?\x91\xae\xd4!\xa6;B\x93\xc52\xe67\x12\xe6(\x0f\xef\xde\x8e=\xc9\xa7\xd2f\xcdp \xb6Ky\x0dT\xa1\xa6\xc4\x97D\xcc5\xe5\xf45\xfd\xc6\xfa\xf3%\xcd\x17\xa9\xad\xb1\x1c\x9c\xab\xfd\xbc`\x96\x1a&o\xa7X\xeb\x88\x0bw\x1cH\xedK\xe1J\xf2Z,D\xf5\x05\x8e\xe3\xf4A\x9a1\x99\xdb\xee\"\x17\xd8\x0f\x9e\xf8}\xf7\x8e\xf8C\xd7\xf6\xaaz\xbc\x85r\xbcsF<\xfe\x99#\x1e\xbc\xad\"\xae\xd8|q\xe9\x9e*z\xe0\xaeQ\x97\xa5\xb1\xb78\x1dd\x04\x89\x07sz\xe5\x8cT\xccT\n2\x07\xb2T10\xf2O\x96E \x80\x02\xad\x9d\xc0\x83\x15\x9a\xa9]s\xdf\xa5\xf6J\xed\xc3\xf3\xcb\xc9\xffL\xce\xc6\xd7\xe7\x97\xdd\xbe\xbb\xfaz\xf9s\xf2\xe5k\xc7\xaf&g?\xbf^un\xeb\xcb\x8f\xab\xeb\xf3?'\xe3\xb3n\x9f\x9d\xff}\xd6\x95\xbf\xf1\xb7o\x93\xef\x93\xf1\xf5\xd7n\x9f\x9d\xff\xef\xd9\xe4\x1f?\xfcezj\x1f]\\\x9e\xff\xfcz6>\xfb\xd2\xb1\xb1/\xe7g\xd7\x97\xe7\xdf\xbfw\x95\xed\xe7\xf8\xfb\xe4O@G\xeb\xea>\xbd\x86\x97\xdfW\xa9?\xb6Q\xdc\xb3y$\"\xdf\xe4\x99_\x87*=\x96Iqj~-[\xc19\xbfg5\x8bn\xa3\x04SH\xb1R\xe3\x1c:5\xbdT\xcez\x8eB2\xa5('\xd9*\n\xa2\xe4\x16\xcd\x8a$\xe0f\xacckj\xee\x9d\x9a^\x8a\xd5\x12\x0f\xbe\x8b\x02\x14%+\x92w\x97G\xcf\xd3S\xe3[\xd55 \x8d\xe8Z\x98o-cP\xe44\x0d#\x9cHA\xe5~\x0f\x07\xb8\xab\xa0|\xde\x9f\xb6\xde4\x0b\x04.qF\xd7\x92'n\xb4\x95\x95b\xd6\xb7c\x93Zo\x9c\x1a\xdf\ntE\x83b\xa1\x9c <\x9bEq\x84)A\xf86#\xdc\x0d\xe9\xd8\xa8\xd4:\xa7\x86w\xa2A\xee\xf5\xe0X\x1c\xb6\xcb\xdb\x80\xd7\xa5\xdf\x94\xa5\xb1\x10~\x91D\xd3\"GS\x9c\xdc)\xab\xd8\x91\x95R\x97\x9d\x9a_3\x86T)\x1c\xd5\x0f\xd5n\xc8\xc82#9w\xc5X\x17\x94e\x18\xe5\xc6V\xbd\x148\x0ezL\xeaRo\x9e\x9a_\xd7\xc7\xe7\xc3<\n\xe6\x15\x9c\xb4\x0f\xa9f\xbd\xaeR\x1c\x11D\x92\x94z\xaa\x92\xb7\x19\xd2\n\xf9\xd4\xf8\xd6\xc4\x0e/\xfe\xc9\x87\xb0(\xcc$\xe6\x07\xa4\x86\x14\xd2w\x86\xfb<\x0b\x7f\xd4J\xf9@\xe2W\xcaG\xfajz\xeb[w\xff\x9b\x1c\xe5\xd1m\x82\xc5e\xe1\xb9f\xd5A\x0f\xe6\xf7\x8d\xd1Ee\x96+o\x94M\xc1\x11\xaf\xa3.Pd~\xa1\x93L\xb3\xbc\xbd\xb74R\x17;x\xcdW\xe5\xf2\xa6\xeer\" \x9a.QLV$\x96K\n\x7f\xb4\xbbZ\xd9\x0b\x8f\xf6m\x934\xdf\xf7f8\xf3\xd0p\xb9\xd0w)W\xae)\xf8\xa5\xebk\xfb\xf5\xe0\xc2\x15\xe6\xab)\xc3\xd5&\x82\x83\xfaZ\xd59N\x8bDl@\xd2\xb9\xe6;\x8e\xf8\x8emZ\xbb/\xd4\x9a\xa6\xc48\xb9\xc1\x81\xfb\xb2\x8f\x01\x17a\x1e\x8f\x1e>\x0e\xc6\x1a$U\\\x8d \xce\x11\xc3\x05\x9d\xa7Y\xf4$\xf4gF\x02\x12\xad\\\x03\xa1,(\xce\xfb\xa5};\x83\xde\x90\xb0\x10\xe1\xe147|\xdc\xddx\x17\x87C\xe3PN\xd4\xba\xa9b\xbd/\n\xeb7\x04r\x8e\xcd\xca\xde\xcb\x15\xc5I\x88\xb3\xb0j^\xa4\xbd\xcb\xf9\xf6\xe5\x02gw\x86\xd0\xab\xf2Q\xbfvM\x07\xd6ay\xb1\\\xa6Y\xadT+\xe7\xfc\xad\x0c\xfc\xc0\x94f\xd1\xb4\xa0\x04-\xf0\x9ao\xdf;\x08N \xd3\xee\xc9- \xd1t\xcdQ\x906\xa1,\xc7\x97&\x01\xf3[\x98\x9e\xcb\x89!qD\xda\xd2\x84\xe8\x83\x10\x07\xa3j\x03\xd6\x11\x15\x0c\x93\xa4F\xa8\xdc\xdd\xf3\x15\xef\xb3\xef\xd8\x94\xc6\xc8\xf8\x03\xefF\x9a\x7f\x0b\xed97\x9fk V\xcf\xb3h\xef\x9aK\x1aq_\"\xef\x96\xa5\xf0\xe5\xe2\x96\x129\xb2\x1951\xf1\x0fw\"\xe3\x96\x04r*7\x03\x83\xc8U\xfa\xc8\xb7\xaf\x0d\xc2\xc3\x9d\xe1\n\x82\xa1\xab\x84\xde<\xd6\xa1d\x1b\xa0\x8b\xbb\xca\xb6QF\xaaa\x00\xd8\x15\xaa\xbf\xc4\x03\x8c\xf765\x8fj\xb5\xd0i\x97+2\x1c\xcclY\xd1zK6\x80\xfa|+\xd3\xdaS\x97\xc1yl\x84\x9a\xa7T0\xbd\x0d\xad\xc2\xf0\xe2\xa0@\xd4;\x94\x16\x0c\x92\xca\xff\x06P\x12[\xc5\xa6\xc1j\xdd\"\xe8\xd7\x0erF3 G\xeb\x05\x0c\x04\xac\xda\xc1\xf0\x03c\x80\xa1\xd0K\xd4\x01\x8c\x86e\xb44\x85V\xab\xa2\xb6\x94\xae]\x8fme\xf6Hnl\x90{\xcd\x82\xbf\x05\x84\xfcI\xe8\xe2\x01\xf5.p\xaa\xc3\xa3%\x86m\xb7\xcb\xf0\xd3w\x0e\x97\x85\xec-\xa5\x7f@\x97\xd1\x98J\xd9K\xe0m\x13\x0f\xa9E\xa3\x1f\x9e\xdd\xbc<\xc8\xbb\xf9\xa5\x1e`\x1f\xcb\x1f\x0f\x11\x1d\x01\x8b\x8f\x80\xee\x94\x8bg\xd8\x18\x89\x1eQ\x12\x1d\x81\x84EJl\x10+\xd1?Z\xa2o\xbcD\xdf\x88\x89\xde1\x13\xbd\xa2&z\xc7M\xf4\x8c\x9c\xe8\x1f;\xd1?z\xa2g\xfc\xc4\xa6\x11\x14\xdd4\xbcx\xacQ\x14\x80o\xcd_\xf6\x8d\xa3x\xb6H\x8a\xe7\x8e\xa5x\x8eh\x8a\x9d\x89\xa7x\x91\x88\x8a\x17\x8a\xa9\xd8\xa9\xa8\x8a\xd7\x11W\xb1\x83\x91\x15/\x1b[\x01\x8f\xae\x80\x9e\xab\xa9\x07z\xbe\xa6\x9e!c,\xe0\xbe\xe3@q\x16\xbd\"-\xa0\\\xea\xb3D\xb9\xb9B\xf8}m\xa2\xec\x1e\xff\x83\xccO\xbaMx\xf19g\x008\xf2\xb35P\xe9f\x98l<\x8f\x87\xa6%|\xd5\x83~y\xce\x08\xbb\x9aO\xba\xf7\xfb\x8c\xbf(\xc0q\xbcFA\x8c\xf3\xdcY\xc6Y~4\x80\xb8[X\x03\xab\x05\x8b\xc8\xbf\x8dH,\x0e\xe5\x99Ef.@\x10G$)\xd7\xc3\xf0 \xe9'\xf9\x86\xf6\x04\x99\x87\x90Y\xfc\xd6eIC\xac\xb5\x8cD\x87[q\x99\xa3\xda\xb6\xbc\x00k\xca4\x80\xaf\x01T!P\xd4Q\x87K\x03\xfd\x07Z\xa8\xb5u\xe15N\xadn\xf7\x1b\xa8\xddAjc\xc3\xd4$\xd8\x01\xa7\xa0\xd3}l;\x84Y\x9bq\x04\xb8\x04\xd0\xf0U#\xa2\xbd/\x96>\xc3\x05\x84\xae?&\x10\xa3\xe5$\xb7\x89\xf4\x03\x0d\x9c\xfe\xd2oh\xb8\x00\xc3\xcb\x04\x05\x84_\xb9\xe9h\xbf\xb9O\xef]=\xd7\xd5}\xb2A\xc7\xdd}\xfa\x17\xba\xa6#\xb2\xdd\xdcW)\xf2\xe8\xbc\xb8/0\xdfo$\x06\xc6\xf3f\n\x08fl\xc3u \xa3\xfd\xecQ\x19\xa3rp\x94a\xd5B\xd4\xb7\x08\xfd\xe4\xe5\x0cd\x92\xba\x93\x96\x8c\xe47\x94\xd8\x18\xc7y\x8a\xee\x92\xf4!A\x98\x8d\xdfo\xcc\x11r\x86k\xbc\xc4\xd61\x0c\xb12QAM?u\xee\xa12\x14\x1aY\x08\x1e\xd5\xa9\xb1F{\xbcrfD\xe7h\x16\xc5\x94d$Dw+e\xe1)\xc90M3{\x98\x99\x8caw\xc2\x05\x12P\x12R\xfa\xa6\xe6\xf9*\xc9DW;KBh\x9d\xb3\xae\x9fF\xa5<\xae/\x9d\xcdd\x04]\xfdJM(X\xdeA1\xd8\x86\x0c0\xbd\x028\x14\x11\xb8\x1b\x10j\x9d\xb0\xb7\x82!yw\xa8)\xeb\xa5&;\xd6\xf9\xbb9\xce\xe7\xc3\x8bJ\xe5]\xfb\\\x88\xa4R\xfbE\x8d5o\xda\x85O)\xa2^|\x01\xba@\xd6\x117\x9cbk\xe6\xf7X\xc3\xfcb\x15w\x14\x13{t\xa0\x1a/E_\xef\xcd ],\xd2\x84\xb7\xe7\x8e&\x15w\x8d\xbd\x08\x1c\xa2i\x11\xa8\xa6\xc4(OMi\n9\\V\x8f\xae\x7f\x8d\xf6\x04\xd9?\xca\xc3Z\x8e\xd3HC\xe3<\xb5U\x0fS\xbdQ\xb2J\xef\x1cc)J\x96\x05}\xb5\xa9^\x90Y\xd0\xa9\xe3!N_\xf39c\xdd.\x8a\x1c\xa9\xd2\xe9\xac\xe3\xe3(\xb9CS\x1c\xdc\xc9\x12\xf2\x00J\xae\"\xd50TL\x83:@'d\xfc*x\x04\x91\x88\x96g]\xcc\xcf\xcb\x96\x85_=w\xc2\x18\x9e5y\xf9\xf5\xcb\xf9\xe5\x9f7\x93\xb3\x8b\x1f\xd77W\xd7\xe3\xeb\x1fW\x9d2\xd9l4..\xcf/\xce\xaf6 \xdey?\xd7\x99x\x9b\n\xd2]\x93{\xc1\x83\xf4\x80\x87D%\x01\x0b\x90\x1a\xc2\xe3\xbep\x1c\x85\xa3\"\x11\xebE1n\xd9\xd8\x01|\xec\xe9J3\xc6\xea\xaf\xcdT\xb1\xca\x8cI\x10\xce\xa6\x11\xcdp\xb6.5\x18\xaf[\xa8\xd7|b*\xf4\xe7Q\xbc3s(\xde\x99\xf9\x8b\xc4\x84\xaey`\xcb\x8c\xac\xa2\xb4\xc8\xe3uk\xaaW\xd2\xab\x9c\xbcJes\x9d\xe1\xe0N\xec\x8d \xcfI\xaf\x00\x89\xb2I\xd0U\x19H{U\x1bi\xf9\xd9L\xb6`\x1e\x91\x95\xb8c%-\xa8O\xed\xa4 \x88;A\xe9\xd5z\x85/l\xeb\xff)\xed\x12Ig\xdcs\xe5]\x8e)\xc5\xc1\\\xb4\xa63Z\xd9\xdc$8\xb0\x17\xd8\xae\xcf\x189\x8e\xf9\xda\xdd\x9b\xb8]\x83Xr$\x91K\x13\xb9\xa1!_\xcbl'\xb3\xc8z\xe3j\x90@\xa5:5O\x84R%\x12\xc9J\xb06\x04\xb6\x1c\x91\x04\xda\xc3\xdb\xe2D\xd1\xed[\x83\x8cd\x87z\x03\x87\xcan\xd8\xe5\x88\xa1&\x97\xfdC\x854%\x08$\xb0\xc0\xc4]\x80e\x88p\xd5r\xd8\x00\xe1\x11\x9b\x05\xde\xbd\xc9]\xc0\xa7\xc2\xaa\x02H\xee\xfa\xf1W[A\xe8\x05\"\xa2*-\xfbB\xa1\x86\x98)\xaf0\x1b\x02 \x15\xc8J \xa0\xa5@\xbf\x93!\xe4\xf3\x0c\xd2yW\x07\xbf\x93!za5\x84uA\xe8w2\x04\\\xf2\x81\x07I?\xc97\x8c)E]\x92!\xa4^\x1e2\x15\xc2@r\xb8D\x08\xe9_?g\x1aD]\x9e\x01<\x0b\xa0\xea\x80\xe2\x8dZ\x9c\xd0\xc7\x93\xc7\x938^\x9d<\x06\x9f\x9fh\xfe\xf0\xfe8\xbc?\xfe\x15\xae\x16!~*\x1e\x9e\x02\x1c\x86\xf3\xf9\xa7\xdbE\xf1n\x11<\x91w&\xca\xee\xdd\xde\x81\xa4\xd7\xfb\xb8\x01N\x10\x89x\x05\xf2)A\x98O=\xa7\xd0\x9f\x8f>\x7f\xfc4\xc5\xc7\x07'\xb3w'\x07\xefO>\xe3\x83O\x1f\xf0\xc7\x83\x19 \xf0\xd1\xf4\xf0\xe4\xe8\x98\x1c\x8a\x92\xf5J\xaf\x05\xf6\xbb\xf4\xea(\xbbx=\xba\x7f\xb2\xa2|\xff\x18\xdf=\x90\xd8\x08\xa6'\x81r(8\xcb\n{\x9d\x01=\xf9t\xf8n\xf6i\x1a\x1c|8\xfc\xf0\xf1\xe0=\x99\x9e\x1c|>9\x9a\x1d\x1c\x1f\x1d\x1f}\xf8x\x14\x1c\x93\xa0\x01\xa8hl#H\x05\x89\xa3\xfbG+\xa8\x9f\xf3\xfb8\x98\xbf\xcb\x1f\x1f\x92\xf7\xef\x7f\x9d\x1c\xfez\xba\xa5\x9f\xb2|\xbe\xba_\xcf\xb2_Af\x13\x87_\xbf\xcc@H\x93x]B\x80\"\x9e\xb8W9>\xc0q\x9e\xda\xf8\x93\xb7c\x18\xd5\xb5}\xad\xec\xedL\x19rQ]\xbd\x8a\xec\xad\xda\x9e\x1cMQ\x9c\xa6wL;\x1b\xa8\xc8d\x1f\xb1!\xe9\xe2\xc3u\x0f\x80\xf6\xd7\x1c\xbf\x81\x8d\xbc\x1a;B\x91\xcdb|\xcbM\x8b\xbeZ U?\xe3b\xdaM\xa9 \"\xad\x9b\x8c\"\xcaIi\x81\xd4r._\xa6In\x8c\xf2\xd0\xec\xc8\x04\xf8\x1d\x02\xa8\x9a\xb4\xef\xc3\xc8=m\xf2\x8d \"\x8f\x82!\xe7\x92\xfe9\x11j0d\x07H\xfe\x90Kh=8\xe5$x`\x91\x0f\x08\xd53V\x0f\x05=3\x10\x0d\x86 #\xc5\x9ao\xaci$h\x9d\x16\x99t\x95\xea0\xb8\xb9\x92\xe9]\x97\x12ATF\xfb\x89\xff3dd\x848A\x7f\x15$[\x8fT\xb1\xdf\xcb\x8b/\x0db\"\xb3\xb4l^\x85\xf6V~V\xe3f\x9c\xa0\"!\x8fK\x120oO\xdc-\xa5Z\xae|\x93\x07s\xb2\xc0\xf5\x9e\xb3\xfa~v\xbf\x8f\xd3o\xf7\xbfC\x9f\x07ihP\xbe\xe2\x03[\xc9s5P\xa2\x84\xbe;n\xe1c)\x17\xee\xe0!$\x14G\xf1\x8e\xd4\xe4`\x9f\xdf\x14\x99\xf5V\x1b\xafm\xe4\xa9\xac\xbd\xbf6nA,q\x86\x17\x84\x92\xac\xc2\xf3\x81\xb0\xdf\xda\x13\xb0\x0d\xc0\xc6t\xe8\xea\xaf\xf6\xf3R]\xceS\x1f/4JN\xd1\x12\xd3jT&\xd3\x0bQF\xc2SD\xb3\xa2:\x95\x8c\x10k\xb4\xb4\x7f \xc5\xab\xb3C\xda\xd7\x0d\xd5\x98\xd5\xa8\x19\xf0\x1b\xda\xe5\xdc\xc0\xd14\xb9\x97\x83\xf5U\xe3 \xa4\xd6K\xbd<\xcf\xc18\xab,y\x81\xc3\xa8\xf7\"y\xd8\xa51C\xe0\x9eY8#\x043\x1c\xe7`\x0cj\xfe2\x10\x85~>\xb6a\xe1\xdb\xc7m\xec#{\xdb\x15\xb29I-X\xa4\x87\xdb\x15\x99.\xce524\xb2\xcb\xd84\xfcc 4=\xbd\xea\xd2\x7f\xaeQ{Y\x04\x1a\x8e1\x10\x81^\xeet\xc5q\xae\x11\xb38\xd1\xdb\x94\x9f\xe2\xdb\x9a\xe3\xf2\x97l\xe7\xcd\x88\xd9\x0f\x92\xe0$ \xa3\x05\xa18\xc4\x14\x8fVG#>\xe1G\xffV\xb6\xe7?#9\xd0G\xff.\xcd\xf1\x7fFr\\\xbf\x11\xa4o\x89v\xc2\xf3b\xb1\xc0\xd9\xfaT\xdf\xd9\x91\x13\x9c\x05sy!\xa8\xfcL o\x03\xfe\xba\xd0\xb4i\xd0\x05\xc5&\xa1\xb6%\xeaR7\xe5CT\x0c\xdb\x9b\xe3\xc3\xc37\xf6\x8d\xa0JB\xb2\xd1\x03\x19h\x0b\xc8\xb2\x9d\xee\xdf\xb8\xd3N9\xc3G\xd7_\x0d\xd4%W\xbc\xf8j\xdep)\xf7\"S\xc8\x87\xbd\xfa\xeaF\x07\x9a\xde\x83\x02G\xb8\x93o\xd7\xc7wZ\x88`{7\xc0\x00\x12\x7f\xc6*B?D\xf5\xd3\xc9\x9fH\x17\xaf\x10\xd3\x1d\xa1\xc9b\x19\xf3\xbb\xfer\x94\x87wo\xc7\x9e|Li\xb3f8\x10\xdb\x9c\xbc,\xa8PS\xe2K\"\xe6\x9ar\xf7\x9a\x1ec\xfd\xf9\x92\xe6\x8b\xd4\xd6X\x0eN_~^0K\x0d\x93\xb7\xb3\x8eu\x10\x82;4\xa2\xf6\xa5p%yy\x12\xa2\xfa\x02\xc7q\xfa \xcd\x98L\xf7v\x91k-j\xcb\x87\xdf$\xef\x08\xc9s\xed\x8b\xaa\xc7[;\xc6;g\xc4\xe3\x9f9\xe2\xc1\xdb\xaak\x8a\xcdW\x82\xee\xa9:\x00\xee\xb2mY\x1a{\xeb\xb5AF\x90x0\xa7W\xceH\xc5L\xa5Fq \xab\xf7\x02\x83\xe1d\xa5\x00\x02\xa8Y\xda <\xbf\x9c\xfc\xcf\xe4l|}~\xd9\xed\xbb\xab\xaf\x97?'_\xbev\xfcjr\xf6\xf3\xebU\xe7\xb6\xbe\xfc\xb8\xba>\xffs2>\xeb\xf6\xd9\xf9\xdfg]\xf9\x1b\x7f\xfb6\xf9>\x19_\x7f\xed\xf6\xd9\xf9\xff\x9eM\xfe\xf1\xc3_\xb9\xa6\xf6\xd1\xc5\xe5\xf9\xcf\xafg\xe3\xb3/\x1d\x1b\xfbr~v}y\xfe\xfd{W\xd9~\x8e\xbfO\xfe\x04t\xb4.x\xd3kx\xf9}\x95\xfac\x1b\xc5=\x9bG\"BL\x1e\xd6u(\\c\x99\x14\xa7\xe6\xd7\xb2\x15\x9c\xf3\x1bL\xb3\xe86J0\x85\xd4\xef4\xce\xa1S\xd3K\xe5\xac\xe7($S\x8ar\x92\xad\xa2 Jn\xd1\xacH\x02\xda\xda9\xf4\xb7\xa6\xe6\xde\xa9\xe9\xa5X-\xf1\xd0\xb6(@Q\xb2\"ywy\xf4<=5\xbeU]\x93\xd0\x88\xae\x85\xf9\xd62\x06EN\xd30\xc2\x89\x14T\xee\xf7p\x80\xbb\n\xca\xe7\xfdi\xebM\xb3f\xde\x12gt-y\xe2F[Y)f};6\xa9\xf5\xc6\xa9\xf1\xad@W4(\x16\xca \xc2\xb3Y\x14G\x98\x12\x84o3\xc2\xdd\x90\x8e\x8dJ\xadsjx'\x1a\xe4^\x0f\x8e\xc5!\xb9\xbcgw]\xfaMY\x1a\x0b\xe1\x17I4-r4\xc5\xc9\x9d\xb2\x8a\x1dY)u\xd9\xa9\xf95cHU\x87Q\xfdP\xed\x86\x8c,3\x92sW\x8cuAY\x99Pnl\xd5\xabc\xe3\xa0\xc7\xa4.\xf5\xe6\xa9\xf9u}|>\xcc\xa3`^\xc1I\xfb\x90j\xd6\xeb\xc2\xbd\x11A$I\xa9\xa7Pw\x9b!\xad\x90O\x8doM\xec\xf0z\x98|\x08\x8bZEb~@\xca*!}\x1b\xb7\xcf\xb3\xf0\x07\x9b\x94\x0f$\xec\xa4|\xa4\xaf\xa67\xbdu\xf7\xbf\xc9Q\x1e\xdd&X\\\xc3\x9dkV\x1d\xf4`~\xdf\x18]Tf\xb9\xf2F\xd9\x14\x1c\xf1\xd2\xe2\x02E\xe6\x17:\xc94+\xbe{\xab\x05u\xb1\x83\xd7|U.\xef\xc0.'\x02\xa2\xe9\x12\xc5dEb\xb9\xa4\xf0\x07\x80\xab\x95\xbd\xf0h\xdf6I\xf3}o\x863\x0f\xa1\x96\x0b}\x97r-o\xee_\xdb/\xde\x16\xae0_M\x19n\xfb\x10\x1c\xd4\xd7\xaa\xceqZ$b\x03\x92\xce5\xdfq\xc4wl\xd3\xdaM\x9c\xd6\xcc\x1d\xc6\xc9\x0d\x0e\xdc\xf7_\x0c\xb8\x08\xf3x\xf4\xf0q0\xd6 \xa9zcLp\x8e\x18.\xe8<\xcd\xa2'\xa1?3\x12\x90h\xe5\x1a\x08e\x8dm\xde/\xed\x0b\x0b\xf4\x86\x84\x85\x08\x8f\x83\xb9\xe1\xe3\xee\xc6\xbb8\x1c\x1a\x87r\xa2\xd6M\x15\xeb}Qk\xbe!\x90slV\xf6^\xae(NB\x9c\x85U\xf3\"\xed\x9d\xb8\xa8\x7f\x81\xb3;C\xccT\xf9\xa8_\xbb\xa6\x03\xeb\xb0\xbcX.\xd3\xacV\xbd\x94s\xfeVFl`J\xb3hZP\x82\x16x\xcd\xb7\xef\x1d\x04\xa7\x84i\xf7\xe4\x96\x84h\xba\xe6(H\x9bPV\xa8K\x93\x80\xf9-L\xcf\xe5\xc4\x90K!\x1e\xb9It\xc3u\xeeM\x96\xc6q\xb1\xf4u\xabO\xb3C-\x00\xbc\xff\xff\x96\xe6\x01\xc7\xb1V\x01jF\x94;\xcd\x11\xcd\xcdG\xe8\xf5G\x9d\xf5)\xa5Z#\xf4&W\xaau\x16\x918\xb4\x06\x8a#\x15h\x83\xe3\xd7@\xac\x9eg\xd1\xdee\x884\xe2\xbe\xdc\xd6-K\xe1KO-%r$\xf8ib\xe2\x1f\xee\xdc\xbe- \xe4Tn\x06\x06\x91\xab\x1a\x90o_\x1b\x84\x87;\xe9\x13\x04CW \xbd\xa9\x9dC\xc96@\x17w\x95m\xa3$M\xc3\x00\xb0+T\x7f\xd5\x03\x18\xefmj\x1e\xd5j\xa1\xd3\xae\xe0c8\x98\xd9\xb2\xa2\xf5V1\x00\xf5\xf9V\xa6\xb5\xa7T\x81\xf3\xd8\x085O\xa9`z\x1bZ\x98\xe0\xc5A\x81\xa8w(-\x18$\x95\xff\x0d\xa0$\xb6\x8aM\x83\xd5\xbaE\xd0\xaf\x1d\xe4\x8cf\x12\x8e\xd6\x0b\x18\x08X\x01\x80\xe1\x07\xc6\x00C\xa1\x97\xa8\x03\x18\x0d\xcbhi\nm\xcf:t\xedzl+%Grc\x83\xdck\x16\xfc- \xe4\xcfp\x16\x0f\xa8w\x81S\x1d\x1e-1l\xbb]\x86\x9f\xbe\x86\xb7\xac\xedn\xa9\x86\x03\xba\x9f\xc5T\xdd]\x02o\x9bxH-\x1a\xfd\xf0\xec\xe6}:\xde\xcd/\xf5\x00\xfbX\xfex\x88\xe8\x08X|\x04t\xa7\\<\xc3\xc6H\xf4\x88\x92\xe8\x08$,Rb\x83X\x89\xfe\xd1\x12}\xe3%\xfaFL\xf4\x8e\x99\xe8\x155\xd1;n\xa2g\xe4D\xff\xd8\x89\xfe\xd1\x13=\xe3'6\x8d\xa0\xe8\xa6\xe1\xc5c\x8d\xa2\x00|k\xfe\xb2o\x1c\xc5\xb3ER$\x08\xb3\xf1\xfb\x8d9B\xcep\x8d\x97\xd8:\x86!V&*\xa8\xe9\xa7\xce=T\x86B#\x0b\xc1\xa3:5\xd6h\x8fW\xce\x8c\xe8\x1c\xcd\xa2\x98\x92\x8c\x84\xe8n\xa5,<%\x19\xa6if\x0f3\x931\xecN\xb8@\x02JBJ\xdf\xd4<_%\x99\xe8jgI\x08\xads\xd6\xf5\xd3\xa8\x94\xc7\xf5\xa5\xb3\x99\x8c\xa0\xab_X \x05\xcb;(\x06\xdb\x90\x01\xa6W\x00\x87\"\x02w\x03B\xad\x13\xf6V0$\xef\x0e5e\xbd\xd4d\xc7:\x7f7\xc7\xf9|xQ\xa9\xbc~\x9e\x0b\x91Tj\xbf\xa8\xb1\xe6M\xbb\xf0)E\xd4\x8b/@\x17\xc8:\xe2\x86Sl\xcd\xfc\x1ek\x98_\xb5\xef\x8ebb\x8f\x0eT\xe3\xa5\xe8\xeb\xbd\x19\xa4\x8bE\x9a\xf0\xf6\xdc\xd1\xa4\xe2\x92\xb0\x17\x81C4-\x02\xd5\x94\x18\xe5\xa9)M!\x87\xcb\xea\xd1\xf5\xaf\xd1\x9e \xfbGyX\xcbq\x1aih\x9c\xa7\xb6\xeaa\xaa7JV\xe9\x9dc,E\xc9\xb2\xa0\xaf6\xd5\x0b2\x0b:u<\xc4\xe9k>g\xac\xdbE\x91#U:\x9d_\x88\x14%wh\x8a\x83;YB\x1e@\x89G+\xf0\xa4\x0d>h\xdc{]\xba\xd4\xbb\x7f\xb3\xab#\x04@\xf7@<\xf0\xa9bP\xdf\xd2\xd0\x97\xd1\xe3\xdf@)\x17_s\x8a\xa7q\x94\xcfI\xa8\xc2\x1a|\xe1\xe6\x10=\xde\x11\xa6\xae\x92\x9b\x15~D\x02\x9e\x92P\xf1*\x00\xf4\x18P\xe8\"K\x97i\x0e\xc7@\xab\xe5\xed\x00\xc1\xef\xce\\*\x9ef|o\x8ffE\xc0\xe3\x8a\xb8\x8f\xb4\xc0Y>\xf7\x84\xaf#\x94SL\x0b\xef\xd4\xef\x86\xffDg\xbdD3\xe16q\xc5\xc7U\xa4\x1a\x86\x8aiP\x07\xe8\x84\x8c_\x05\x8f \x12\xd1\xf2\xac\x8b\xf9y\xd9\xb2\xf0\xab\xe7N\x18\xc3\xb3&/\xbf~9\xbf\xfc\xf3frv\xf1\xe3\xfa\xe6\xeaz|\xfd\xe3\xaaS&\x9b\x8d\xc6\xc5\xe5\xf9\xc5\xf9\xd5\x06\x04\xc4;\xef\xe7:\x13oSA\xbakr/x\x90\x1e\xf0\x90\xa8$`\x01RCx\xdc\x17\x8e\xa3pT$b\xbd(\xc6-\x1b;\x80\x8f=]i\xc6X\xfd\xb5\x99*V\x991 \xc2\xd94\xa2\x19\xce\xd6\xa5\x06\xe3u\x0b\xf5\x9aOL\x85\xfe<\x8awf\x0e\xc5;3\x7f\x91\x98\xd05\x0fl\x99\x91U\x94\x16y\xbcnM\xf5Jz\x95\x93W\xa9l\xae3\x1c\xdc\x89\xbd1\xe19\xe9\x15 Q6 \xba*\x03i\xafj#-?\x9b\xc9\x16\xcc#\xb2\x12w\xac\xa4\x05\xf5\xa9\x9d4\x01q'(\xbdZ\xaf\xf0\x85m\xfd?\xa5\x9d\xa7\xaa\xc6\xaa\x80\x13V\xb0A<\xe2\x8b\x91\xde\x05hnC\xbd\x80\x05\xbd\xe24\x95\\j\x08\x96\xdb\x18\xe5\x82\x10@\xac\xcct\x92\xd8\xc8\xa9\x1c%\xb7\xea\xda\x9e\xfd\x19\x8e\xe2\"\x03,!\x113\xc3K\x92\x84\xa0\x8e\xec\xd2\xeb]\x8c\xee\xd5\x8f\xef\xbd\xacT\xfb\xeb\x8b\xf1\x15,\xb9\xbe\xfe\xd9\xd5\xbf&\x17=>\xfb6\x9e|\xf7~V\xb1\xc9}\xe5\xecg\x8d-\xadA:\xc5\xfaq\xcd\x02\xa3\"\xc9\x89\xdfW\xe3\xe7\x1a]\xf2\xe9\xdb]\xda\x04\x8f\xbd\xab\x990R\x99M\xcc\x82\x96\xf7W\xf5i\x92\x0d\x87f\x93\xec]\xa5I-\xd2(H\x93<\n\xd5\xee\x03o\xfc.\xe2\xe7\x17\xa1\xb8\xcbk\x11\xe59\x9b\x9c\xd2\x1e\xa5\x19\nI\x8c\xd7$\x04\xa6(Z\x98d\x83\xaf\xc9${g\xc5\xa5(\xcb\x15G0\xd7\xe1u\xd4Xjr\xa9\x00,\xcf2\x00v67\x96c2\x96\\\x92\x87G\x16r\xfe\xde\x1e\xeb#\x91t\xc6=W\xde\xe5\x98R\x1c\xccEk:\xa3\x95\xcdM\x82\x03{\x81\xed\xfa\x8c\x91\xe3\x98\xaf\xdd\xbd\x89\xdb5\x88%G\x12\xb94\x91\x1b\x1a\xf2\xb5\xccv2\x8b\xac7\xae\x06 T\xaaS\xf3D(U\"\x91\xac\x04kC`\xcb\x11I\xa0=\xbc-N\x14\xdd\xbe5\xc8Hv\xa87p\xa8\xec\x86]\x8e\x18jr\xd9?THS\x82@\x02\x0bL\xdc\x05X\x86\x08W-\x87\x0d\x10\x1e\xb1Y\xe0\xdd\x9b\xdc\x05|*\xac*\x80\xe4\xae\x1f\x7f\xb5\x15\x84^ \"\xaa\xd2\xb2/\x14j\x88\x99\xf2\n\xb3!\x00R\x81\xac\x04\x02Z\n\xf4;\x19B>\xcf \x9dwu\xf0;\x19\xa2\x17VCX\x17\x84~'C\xc0%\x1fx\x90\xf4\x93|\xc3\x98R\xd4%\x19B\xea\xe5!S!\x0c$\x87K\x84\x90\xfe\xf5s\xa6A\xd4\xe5\x19\xc0\xb3\x00\xaa\x0e(\xde\xa8\xc5\xa3gu\xe2\x9e\x07\xdd\x12 \x1a\x9d\xed7I\xbb\x82\xd1\xc6\x86\xa8N\x0e\x8c\xd0V\xe2\xd7\xb7\x8f\xd6\xb6\xd2\x1ez\xa2\xf8Z\x96@\x06~\x0d\xeb '\xa5\x01\x00\xf3\xd9s L}\xe5\x1f\xc4\x92C\xe5neT\x0c\xb9F2\x12\xb7\xae\x95@\xa4\xb8\xc2EQh_3yE\x06Y:\x04\xb4v\xa8c\xe2\x1f\x82\x8f\x1f\x04\x9fj\xa8c\xc7\xa0\x0e\x89\x80`B]m!\xea\x97\x10\x88v\x16A\x9f\x8d\xf4\x12\xa4\x9dR\xbb\x10,!\xea\x95b\xd9\xcf\x82\xb6I\x19\xachG\n\xdd\xfa\xc0g\xf8\xf4\x01\x7f<\x98\x91\x00\x1fM\x0fO\x8e\x8e\xc9\xa1(Y\xaf\xf4Z`\xbfK\xaf\x8e\xb2\x8b\xd7\xa3\xfb'+\xca\xf7\x8f\xf1\xdd\x03\x89\x8d`z\x12(\x87\x82\xb3\xac\xb0\xd7\x19\xd0\x93O\x87\xeff\x9f\xa6\xc1\xc1\x87\xc3\x0f\x1f\x0f\xde\x93\xe9\xc9\xc1\xe7\x93\xa3\xd9\xc1\xf1\xd1\xf1\xd1\x87\x8fG\xc11 \x1a\x80\x8a\xc66\x82T\x908\xba\x7f\xb4\x82\xfa9\xbf\x8f\x83\xf9\xbb\xfc\xf1!y\xff\xfe\xd7\xc9\xe1\xaf\xa7[\xfa)\xcb\xe7\xab\xfb\xf5,\xfb\x15d6q\xf8\xf5\xcb\x0c\x844\x89\xd7%\x04(\xe2\x89{\x95\xe3\x03\x1c\xe7\xa9\x8d?y;\x86Q]\xdb\xd7\xca\xde\xce\x94!\x17\xd5\xd5\xab\xc8\xde\xaa\xed\xc9\xd1\x14\xc5iz\xc7\xb4\xb3\x81\x8aL\xf6\x11\x1b\x92.>\\\xf7\x00h\x7f\xcd\xf1\x1b\xd8\xc8\xab\xb1#\x14\xd9,\xc6\xb7\xdc\xb4\xe8\xab\x05R\xf53.\xa6\xdd\x94\n\"\xd2\xba\xc9(\xa2\x9c\x94\x16H-\xe7\xf2e\x9a\xe4\xc6(\x0f\xcd\x8eL\x80\xdf!\x80\xaaI\xfb>\x8c\xdc\xd3&\xdf\x08\"\xf2(\x18r.\xe9\x9f\x13\xa1\x06Cv\x80\xe4\x0f\xb9\x84\xd6\x83SN\x82\x07\x16\xf9\x80P=c\xf5P\xd03\x03\xd1`\x082R\xac\xf9\xc6\x9aF\x82\xd6i\x91IW\xa9\x0e\x83\x9b+\x99\xdeu)\x11De\xb4\x9f\xf8?CFF\x88\x13\xf4WA\xb2\xf5H\x15\xfb\xbd\xbc\xf8\xd2 &2K\xcb\xe6Uho\xe5g5n\xc6 *\x12\xf2\xb8$\x01\xf3\xf6\xc4\xddR\xaa\xe5\xca7y0'\x0b\\\xef9\xab\xefg\xf7\xfb8\xfdv\xff;\xf4y\x90\x86\x06\xe5+>\xb0\x95\x96r\xe1\x0e\x1eBBq\x14\xefHM\x0e\xf6\xf9M\x91Yo\xb5\xf1\xdaF\x9e\xca\xda\xfbk\xe3\x16\xc4\x12gxA(\xc9*<\x1f\x08\xfb\xad=\x01\xdb\x00lL\x87\xae\xfej?/\xd5\xe5<\xf5\xf1B\xa3\xe4\x14-1\xadFe2\xbd\x10e$\xda\x1e\x0f\x0c\xb5\xf8)1\xe3VwK\xean\xb5\xfa\x83oj\xf7\x80\xad\xf5\xc0%\x84X\xb2tF\xf4j6\xa8\xe5'\xd1\xae\x89\xc5\xd1b\xa6\x1e\xc3\xcd`\x87\xc4\xac\x85Q\x83D\x005\xc9\x8b\x96y\xd6\xc0\xa6\xad\xeawZwa*?\xd2\xf0x3\xa0 \xf1\x0e\xa5GQ\xd6\x91\x1a\xc5\xc3\x85\x1d\x93g\xd8**\xa1'\xc5f\x94\xc5\xa0f\xf46\xa7b\x14\xb9(\xd1\xc0\x8e\xd0\x04\xa7\xe6]\x92\xfa\x11\xca\xa6\x87&\xc5\x97\x9eI\xe7H\x98\xd4\xdfetV.\xa9=\xff\xae\xcdj1\xf4\xc8\xcbM\x0d\xafX\xa1;\xbc\xe2\xaaG\xd5\xe7\xd3\x06\x1bzm\xed`\x93\xeb\xb8\xc3w\x93\xdf\x7f3\xbe1p\xfb\xcdB\xee\xf2\xaedS\xc3\xbb3\x95\xd3\xc0\x8c\xda\xdb\xcb\x9cJs#k\xd2\xd8\x8f\xd2\xb2xE\xb9\x08\xe0Q8\xb2\x06\x15\xaa\x999n\x8bm7\xbf8\xf4\xd7L\xec*n\x1bC\xf3\x8al\x1dn\"\xdc\x16\xc6\xea3\xb1\xed\xe4jJKR\xa3\xa2\xa4jY\xa1z\x99\xcc\xba\xfc\n\xa0\xd5\xc2\x84w\xb9\x9a\x94tf,\xe1\xc9\x926\xe1G\x1aP\x9aM\xf9+\xb5\x84ks\xc9\xfec\xa5|a;\xc6\x02h\xc6\xaae7-\xaa\xab|\x19(^\x10\xda:\x19\xe0\"\xdd++\xc3\xee\x110\xd8\xf9\xf3\xebE\xef\xb1\xbe\xfc\xb8\xb8<\xfd\xe3\xf8\xe8\xa4\xdfg\xa7\x7f\x9d\xf4\xc5\xef\xe8\xdb\xb7\xe3\xef\xc7G\x97_\xfb}v\xfa\x7f'\xc7\xff\xf8\x11\xafDd}tv~\xfa\xe7\xd7\x93\xa3\x93/=\x07\xfbrzry~\xfa\xfd{_\xda\xfe<\xfa~\xfc\x07`\xa2u\x01\xa3A\xcb+n\xac\xd8\x8fo\x15\x0f\x1c\x1e\x89\x88?y\xf9\xda\xa3\x10\x91gS\x1c\xba_\xcbQp\xcd;\xd2V\xd9uV`\n\xa9\xc7\xea\xdcC\x87\xae\x97\xcaB\xafQJ&\xecHP\xddf ;WN\x97EB;n\xe0\xf8hj\xef\x1d\xba^\x8a\xd3$\x0fU\xcc\x12\x94\x15\xb7\xa4\xeeO\x8f\xde\xa7\x87\xce\xb7jj\n\x9a\xd1\x95P\xdf\x9a\xc6dY\xd32\xcdp! \x95\xfe<\xce\xe0\xbe\x84\xf2}\x7f\xd8y\xd3\xae\x81\xb8\xc0\x15]I\x9c\xb8\xd2VZ\x8ai\xdf\x9eCj\xb9q\xe8|+\xb8+\x06\x14\xc7\xbf\x02\xe1\xe94\xcb3L \xc2\xd7\x15\xe1fH\xcfA\xa5\xd49t\xbc\x13\x03r\xab\x07\xe7\"\xe8A\xf6M^5vSU\xe6\x82\xf8y\x91M\x965\x9a\xe0\xe2Fi\xc5\x9e\xa84\xb2\xec\xd0\xfd\x9a!\xa4\xaa\xfd\xa8y0\xa7\xa1\"\x8b\x8a\xd4\xdc\x14cS\xd0T\x9a\x94\x1eU\xbb\xda9N\x06l\xeaFn\x1e\xba_\xdb\xeb\xf3n\x96%3\x83O\xda\x86T\xbb^\x17b\xce\x08\"EI#\x85\xd7\xbb\x08i\x81|\xe8|\xebB\x87\xd77\xe5KX\xd4\x9e\x12\xfb\x03R&\x0b\xe9\xee\xea1\xcb\"\x1e<\xd4<\x900\xa2\xe6\x91\xb6\x9a\xbe\xc1\xd0\xd3\xff\xaaFuv]`\xd1V\xbd\xd6\xa8\x06\xe0\xc1\xec\xbe#tf\xecre\x8d\xb2-\xb8\xc7K\xc5\x0b.2\xbb0\x08\xa6]\xc1?Z\xfd\xa9\x8f\x1e\xbc\xe4\xc7r\xd9\xd3\xbc\xd9\x08\x88\x96\x0b\x94\x93[\x92\xcb#E<\xa0_9N\x84E\xfb\xa6\x0d\x9a\xfb2\x19\x9f\xb9#O\x1e\xf4C\xc2\x95K\n\xde\x9e~\xe5o\xa4.La~\x9arto\x11\x18\xd8g\xd5\xe0:]\x16\xbc\xac\x1e\xe3\xb2\xc2;\xcfj*j\xc1\x99\x97\xa0\xbePZ\x86\xc9\x15N\xc2\xfdLF<\x84E,z\xf8:8\xd2LR\xf5\xe3\x18\xe1\x9ccxIge\x95=\x08\xf9Y\x91\x84d\xb7\xa1\x85\xd0\xd4L\xe7\xf3\xd2m@\xa1\x1d\x12\x1e <\xae\xe9\x8a\xaf\xbb\xab\xe8\xe1pl>4\x1b\xd5VUl\xf6E\xef\x80\x16A\xc1\xb5i\xf8^.(.R\\\xa5\xa6z\x91\xfa\xae\xe6\xde\xcb9\xaen\x1c1p\xcd\xa3~\x1d\xda\x0el\xc2\xea\xe5bQVV5Z\x8e\xf9\x1b\x19\x81\x83)\xad\xb2\xc9\x92\x124\xc7+~e\x12\x008!L\xba\x17\xd7$E\x13\xe1p\x97:\xa1\xa98X\x16 \xb3[\x98\x9c\xab\x89#7F<\xd2It\xc5e\xeeUU\xe6\xf9r\x11\x9b\xd6\x98d\x87j\x00\xf8\xfc\xff%\xd5\x03\xces-\x02\xd4\x8eh\x1c\xcd\x19\xad\xdd\xf1\x10\xf6\xa3\xee\xdd\x94P\xb5\x00\xbd\xaa\x95h\x9df$O\xbd\x81\xffH\x05N\xf1\x8b R\xe0I.\xce\xfcL$+]\xf5w\xee\xab\x16\x08\n\xa8\xa15R\xe8vg\x8aF\xf7\xa4\xc1\xd8v\xc1G\xe5-1\x08\xaf\xe9]\x96\x86O_X\xd2()\xf3\x9cp\xc3\x89\xa1-u\x85\x07 #\x80\xaf\xb6\xb2 \xfa\xde%\x80\xa8r\xc0\x06\x82\xb3a\x94X\x80\x1a\xef^\xac>\xa1\xdfc\xd3(#\xe7\x0f\xa2\x8e\xb4\xb8\x0b\xed1\x9d\xcf\x16\x13\xcd\xabl:\xb8\xac\x94\xe6x,Wy\xc3T\xc4\xd2\x8d\x1b\x8a\x02 \x9b\x1a\x98\xf8G8WsC\x04\x05\x85\x9b\x03A\x14\xaa\xee\x14\xf3k\x83\xf8\x81\x83I\xbc 6\xf4\xa5\x10\xc7Ru\xc7\xa2m\x84)\xeeK\xdbZI\xb7\x8e\x05\xe0\x17\xa8\xf1*\x160\xdc\xbb\xd0\"\xa2\xd5\x03\xa7[\x91\xc9q1\xb3aA\x1b\xadJ\x01\x9a\xf3\x8dl\xebH\xe9\x89\xe0\xb5\x11j\xdfR\xc1\xe46\xb4\xd0\xc4\x933\x05\"\xde\xa1\xb0`,1\xfe7\x82\x90\xd8(oZ\xa8\xda\x1aA\xbf\x0e\x80s\xaaI8\xb7\x9e@A\xc0\n:\x8c\xbf0FX\n\x83H\x1dAixVK\x9bh\x7f\x16i\xc8\xeb\xb1\xa9\x14+\x89\x8d\x8f\xe5Q\xb5\x10\x1f\x01\xa1x\xc6\xbax@\xb3\x0b\xdc\xea\xf0h\x89q\xc7\xed\xb3\xfct[\xe5\xa6V\x7f\xe2\xaen\x04\xea\xb7\xe3\xaa\xd6/\x19\xef\xdbxH\x1d\x1a\xe3\xec\xd9\xce\xfeHQ\xe7\x97z\x80s,\x7f\x02\xea)\x17\xcf\xb81\x12\x03\xa2$z2\x12\x16)\xb1F\xac\xc4\xf0h\x89\xa1\xf1\x12C#&\x06\xc7L\x0c\x8a\x9a\x18\x1c710rbx\xec\xc4\xf0\xe8\x89\x81\xf1\x13\xebFP\xf4\x93\xf0\xe2\xf1FQ\x00\xbeu\x7f94\x8e\xe2\xd1\")\x1e;\x96\xe21\xa2)\xb6&\x9e\xe2I\"*\x9e(\xa6b\xab\xa2*\x9eG\\\xc5\x16FV\xf3\xa2_\xde3\xc2\xba\x0fJ\xf3~\x87\xe1\x97%8\xcfW(\xc9q]\x07+U\xcb\x8fF w\x03g`u`\x11i\xd4\x19\xc9\xc5\xa5<\xd3\xc8\xcc\x04H\xf2\x8c\x14\xcdy\x98GL\x04\xe1u\x97h\xf4\x10\x8c\x97i\x16\xe4N\x1fz\xbe\xf0\xe3w\x8a&\xab\x1d\xb4\\\xa4\xfa\xdf4\x9b\x93\x9a\xe2\xf9\xa2\xde\xd1\xee3Q\xf72\xdc\x17V\xa4m\xe5\xb2s\xe1\xb4\xf4\x93\x01>aC\xcf\xd7\xc2\x93\x90^1\"b\x82\x13\xb8\x80\x90\xb1\x88\x18\xd8]\xc6\x96\x18h\xb1\xc7d\x1c\x13\xd9c\x9f0 *c\x05HA\xab\x15\xefW(\xf1\x05\xd14Y\x8dH\x11L\n y\xe2\xf6\xf8\x15\x84\x89\"WOT\xc0!\x1dP\x16\xfc\x99\\\x81\xcff\ns\\S\x854\x88\xb0-\x9dG\x1e\x96\x97\x8d8\x91Rd\xc0\x88\xf5U\x0b\xb3\x1f\xa3v\xd8\xc7\x0f1\xb8`\xce0\xdbZ\xda.-9'8\xc3\x0b\xf2'\x15\xb7\xfe\x01\xfe&.\xc3 Nfr\xc6\x83\x1fx+\x9e\xd9\xcfFV\x84I\xb7\xc4\xc3\x11\xd9\x17\xdb(R@ee\xb1'\xe8E\xe46|L\x82ax\xc4T\xdc7\xa6]k\x94\xe0\x85\xb02\x9dQ;l\x07\x06A\xe9u^\xa29\xbe!r\xa9\xab\xdc=\xa6\xae\xe4\xc6&+tG\xaa\xc8\x8c\xe1\xd4\xf7\x03\xa8\xd2\xbdP\xd9\xd8*\xbe\xca\xb0\xa5\xb4u\x81\xafqV\xd4\xd48\xcdx\xe1\xd9\xaew\xf6\x15.\x12\x12\x88>\xbb4\xdc\xae\xbc\x92\xc0\x0c\xdf\x12c$\xc9a\x1eSF\xd5\x914#~\xb1\x90\x15\xb7e~k\x97!h?'\xa7\xec\xe4\xfd\x97\xe4tEdJ\xb7\x08\x05;\xb7\"\x8d\x11\x96\x11hV5\x8b\xf6\xd3\xc4\xa3a\xc5R\x91=~a\xd6\xbb\x98\x97\xb7\xbe\xae\xd4\xcd%\xcf(\x9d\xaaZ\xe0\x86ED8c\"\xc2\xe6 \xc0\x86\x82\xd8O\x8f\x7f\xe5\xd5\x0e\xdc\xb2JQ\xb8\x03\x1e\xe4\xccFB\x19\xac\xb9\x88E2l\x94\xa6\x88\x90\xeb\xa094\x9c\xc1\x04\x05\xe2\n$\xd8iK8\xd3\x0d\x922\xde\x00\xdb\x87P\xab\xd4 \x8cC\xf2\x9f\xcf\x83G\x06\xb2\x8dC\xc2x'\xf9\x14\x84W\xb6\xeb\x00\xc5\xf9\x14\x0e\xf4\x003g\x08\xd5#\xc4z\xf4\xdb5#-\x84!\xb4\xae\x15\xec\xe1](\x01\x92UP\xe1\x98\xed\xae,\xa0h\xec\x96\xc0\x90\x99\x04\xe9J\x04\xd4\x97\x08AB\xb5\xc5\x03\\\x1a\x08.'\xd0f\x82\xb7\xc5\xa3g*\xae;\xd1\xe3P\x078\xce\xb4\x90\x1e\xaeIM`@>\xc1\xb4)\xda>^\x8d\xa1[\x11z\xe9 \x0c\xa7|\xe4E2\x8c\xf25\xf5 r/!7\xf9\x9d~Pc\x9c\xb5\x9c@\xc7;q\xb9\xa3\xda6|\x00k\xd34\x82\xad\x01\x14!P\xae\xa3\x1e}\x11\xe3\x17Z\xa8\xe3\xba\x88*\xa7\xce\xb4\xc7\x15\xd4\xf6pjm\xc5\xd4\x06\xd8\x83OI\xaf\x96s[\xc4\xb3.\xe2\x08\xd0\xe7\xd0\xf1U+\xa2}(/c\x8a\x0b\xc8\xba\xe1<\x81(\xad \xb8u\xa8\x1fi\xe1\x0c\xa7~M\xc5\x05X^.V@\xf0\x95NG\x7fsB\xed\xbb\xda@wB ;\xd0\x9eP\x8d\xee\xedO\xc8\xfd\xaf\xdd\xb9\x153\xfa\xb8!\xfe\x02\x19\xdf:\x1bI\xdb>z8\xc5^3\xabM<\xb4\xac\xb7\x8a\xd0\x9f\xbc\x0e\x81\xcc.\x0f\xc2\x92!\xf8\x8e\xda\x18Gy]\xa2\x9b\xa2\xbc+x\xe9Z\xf4\x8dY0\xc18\x8b\xa7\xf0\xf9\xc28\xd6d\x18\xa8\x95\xab.,TjA+} \"\xf34\xaf\xd1k^\xf22\xa334\xcdrJ*\x92\xa2\x9b[\xa5\x9a)\xa90-+\x7f|\x98\x0c>\x0f\xb2\x0bD\xa0\x04\xa4\x04\x85e\xb2*\xca\xc4T\x07k9\xa0\xa6r\xb2u\x8dT\xf2\x80\xbcr:\x95\xa1ov\xe7P(\xb3\xa2\x8bb4O\n0/\x02\xb8\x14\x11x\x1a\x10\xea\\\x8dw\xa2\x18\xf9t\xa8-\x1b\x85&'6\xf8\xbb\x19\xaeg\xe3\x93\xca\xe8`\x909\x11\x85Q\xb4E\xad\xb5h\xbeDL(\xa2Ax\x01\xa6\x00\x8b\x883\xc7\xf5\xb3F\xfe5\x1b\x98\x17\x9d\x0e\x87\x1f\xb1GG\x98\xf1\xe6\x05\xf6l&\xe5|^\x16|\xbcp\x18\xa8\xe8\xd6\xf6$\xec\x10C\x8b\x083EFs\xddIK\xc8\xad\xb0zt\xe9j\xf4Z\x80\xfd\xad\xb9e\xe5|\xda\xd3\xac ^\xb7\xaa\x87\x89\xde\xac\xb8-o\x02k)+\x16K\xfals\xb4 \xbb\xa0\xd7\xc4\xc3,H\xfb9a\xd3.\xaa\x13\xa9\x9a\xe7\xbc+SV\xdc\xa0 NndUy\x00$\x1ef\xc0\xb3-\xf8\xa2 ;\xa9t9\xff\xb8\x97\xaa'\x0b\x80\xe6\x81x\xe0[\xc5!\xbe\xa5\xa2o\xc2\xbe\xbf\x81r%\xbe\xd6\x14O\xf2\xac\x9e\x91T\xc5#\xc4\xe2\xc4!r\xbc'\x9b\xfaR\xee\x16\xf8\x19Ix.\x81aU\x00\xe01F\xa1\xb3\xaa\\\x945\x9c\x07Z,o\x86\x11\xbc\x89\xe9B\xe14\xe5N9Z-\x13\x1e\x10\xc4m\xa49\xae\xeaY$\xee\x1c\xa1\x9ab\xba\x8cn\xfd~\xfc?\xd6\xe9*\xd9T\x98M\\\xf0q\x11\xa9\x96\xa1B\x1a4\x01:\x93\xe2'o\x13\"\xc3\xdc\xd9\x14\xf3\x8b\xae\xc52.\x9e{\xf1\x18\x9e\xeex\xfe\xf5\xcb\xe9\xf9\x1fW\xc7'g?.\xaf..\x8f.\x7f\\\xf4JA\xf3\xc18;?=;\xbdX\x03\x80x\x17\xfd\\\xa7\xd0\xadKH\x7fI\x1ee\x1ed\x06\" \x8c\xcc)@N\x07\x0f\xd8\xc2y\x96\xee-\x0bq^\x14\xeb\x96\xad\x1d\xc0\xc7\x91\xa9t\xf3X\xfd\xb5\x9d\xe3e\xec\x98\x02\xe1j\x92\xd1\nW\xabF\x82\xf1\x82\x83\xfa\xcc'\xb6\xc2p\x1c\xc5;7\x86\xe2\x9d\x1b\xbfLlh\xcb\x02[T\xe46+\x97u\xbe\xealu#/*\x88\xab\x146\x97\x15Nn\x84SKXN\xfa\x04H\x94N\x82\x9e\xca@\xd2\xcb\x1c\xa4cg3\xda\x92YFnEw\x94rIcb\xa7,@\xd8 H\xcf\xd6*|b]\xff?R\xcfSU\x1cU\xb0\x13ViA<\xe2\x8b=\xed\x05h\xbb\xa1\x9e@\x83^p\x98\x8a.\xb5\x04\x1b7Fs \x04\x00kR\x94$o\xe4V\xce\x8ak\xd5pgg\x8a\xb3|Y\x01\x8e\x90\x88\xa9\xe1\x05)R\xd0D\xf6\x99\xf5>J\xf7\xe2\xc7\xf7AZ\xaa\xfb\xf5\xd9\xd1\x05,+\xde\xfe\xec\xe2\x7f\x8f\xcf\x06|\xf6\xed\xe8\xf8{\xf43C'\x0f\xa5s\x986\xf6\x8c\x06\x99\x14\xef\xc7\x96\x06F\xcb\xa2&q[\x8d_H\xf4I\x84\xefNi\x9by\xec\x9d\xa5\xc2\x88\xb1\x9b\x98\x06m:O\x0d\x19\x92-\x87\xf6\x90\xec\x9d1\xa4&i/)\x8b:K\x95\xf7\x81\x0f~\x93\xf1\xdb\x88Tt\xe1\x9agu\xcd6\xa7\xd4Ge\x85R\x92\xe3\x15I\x81\xb9\x85\x1e$\xd9\xe2k#\xc9\xdey\xf9\xd2\xdc :1g2\xc3\x17C\xae\x1e\xa8\xd0\x13\x87\xaaS!\x9fH\x91\xe0E\xbd\xcc5JRn\xf1S,\xc4\x8f\x88\x1a\xcb\x03\x90V\x0c\xc3Q\xe0\xf0\xba\xfeM\xdf\xec\x8b+#\x86\x95d\x99h\x0d\xac\xc5ud\x96\xd8O\xc5AF}\xd0\xd4\x19\xce`\xa6\xc3\xf3(\x8e\xd4\xc6R1\xb0\xb9\xcb\x00\xe8\xd9\xdaYG\xc9Y+I5\xebs\x03\x8a\xcf\xf6\x91\xbe\x12)\xa7\xdcr\xe5S\x8e)\xc5\xc9L\x8c\xa6SQ\xd9\xde$8\xf1W\xc6\xb6w\x8c\\\xc7\xfc\xec\x1e\xcd\xb8\xb6X,1\x92\x9c+\x0b\xe9\xd0\x90\xafe\x9a\x92\x9bd\xed\xb8\x1a%\xc2\xc8\x86\x16 -2B\x88\xbc\x00\xad%\xb0\xe1P\"\x90\x0fo\x83\x1bE\x8f\xef\x8d\x0e\x92\x13\x1a\x8d\xf8i\xa6a\x9bC}\xdaX\x0e\x8f\xf1\xd1\x90 ,\x81E\x14n\x03[\xc6\x883m\x96\x0d\x90=\xc2Y\x10\xf5Mn\x03\x7f\x0cT\x15\x83\xa4\xd7\x8f\xbf\xda\x08\x87\x9e \x94\xc9\x189\x16\xc34\xc6Ny\x86i\x0c\x00\xaa@Z\x02\x015\x05z\xc9b\x90\xcf#P\x17=\x1d\xbcd1\x0c\xe2\xd5\x18\xda\x05\xa1\x97,\x068\xe5#/\x92a\x94\xaf\x19\x0c\x8a\xfad1H\xb9?\xd0\xfa\xd7}~sGr\x17\xc6\xb1T\xc4\xb1\xd8\xd9\x14\x99\xeb\xcd\xd0\x83Oo\xdfO?M\x92\xdd\x8fo?\xfe\xbe\xfb\x81L\x0ev?\x1f\xecOw\xdf\xed\xbf\xdb\xff\xf8\xfb~\xf2\x8e$-\x86\x8a\xc1\xd6b\xa9\x00\xb1\xff\xeb\xde\xcb\xd4\xcf\xf5\xaf<\x99\xbd\xaf\xef\xef\x8a\x0f\x1f~\x1e\xbc\xfd\xf9pM?U\xf5\xec\xf6\xd7jZ\xfdL*\x1f9\xbc\x031cBY\xe4\xab\x86\x05(\xe3)p\x86#\x1e\xe7u\xe9\xc3O6\x88p\n\xbe\xe8=\xd3Hs\xda\xbaU\xd2\xecWB\xd3\xe2s\x08\xc4\xfe\xafw^.\xdf}x\x97\xfez\xf73\xbd\x9d\xa7\xf8ay\xf7\x90\xe04\x9d\xcd>]\xcf\x97\xef\xe7\xc9\x03y\x1f`\x80\xff\xf4=.\x03\xccS\xb3\xc8\x1a\xb3|\x81\xb4D\xd3\xac\xe0\x021\xb22\xb9\xde(\xa4-+\xe6W&\x19;>\x90\xd9I\xc2\x83\x1a\"3\xd4q@\x1b\x98\x81\xdf\xc0xa\xa1#\x96\xc34\xc7\xd7\x9c&\xdd\xc4\xa0T?C4\xd2FS\xea7\x19\xf2T\x13#\xd5^\x1d>\xebEY\xd4A\xd6He\xb9=\xcc1\xd5{\x8c=\xc15\xa7\xce\x8a=\x19C\xee\x05\x1eA\xb7\xc3c2\xa6\x85\x90\x9f1\xf2\x87\x9cB\xef\xe5.\x07\xc1\x83\x9fb\x8ch&\xc4c\xfa\xa0GfD\x0b!\xc8\n\xf1\xe6Dk\x18\x05Z\x95\xcbJ\xda`6\x1b\xc2X\xc9\xa2\x1a\xf5\xb9d!jB\x12\xc5\xff\x19kd\x18;A\xff\\\x92j\xb5\xa7\xbeA\xe7g_Z\xe0D\xfek\x83\x80\n@6~f\xe1sT\xa0eA\xee\x17$a\x86\xa4h]\xa5\x866\xbe\xa9\x93\x19\x99c{\xee\xbcf\xa5\xdf\xa4\xe4\xf0\xbb+ \xa0#\x922uH\\\xf1\x81\xaf\xa2\xbaZ*YA\xdf\xbf\xeb\xf0\xc7S\x8d<\x80CJ(\xce\xf2-\xa9\x1c\xc2>\xbfZV\xde\xa69Q}\xcb\x13n\x07\x7f\xedt\x94,p\x85\xe7\x84\x92\xca\xc0yW\xe4\x18k+\xcb\xb7\x00[\x1b\xa2\xefY`\xd8 d\x98\x0e\xb1\xf0\xb3\xe2\x10-05cG\x99d\xc8*\x92\x1e\"Z-\xcd\xad\xe4d\xb1\xe6\x96\xb6\xdd\xa1\xfc\xeam\xec\x0f5\xf15\xcf,h\x0e\xfe\x8dm\xce\xafa\xc4\xbbLw6W\xbf\x98\x18uN\xd6\x14\xe75x\xb6\x0c\xab\x1c8]\x83\xed\xf8q\xad\xf7\xf1y\xd0\xba\xbb\x02\xf0\xa0\xbf)o\x18\xed\xceY\xee\x1a\xf0#\xd2i\x19\xdd@J\x87\x1a\xea\x86In\xc1\x83[\xa1C\x08\xefZV>\x9b\xab\xcd\x13i(\xf7\xe4J\x1f\x0b\xdd\xb0\xc5\xb7\x9a#-#\x1b\xc8\x91\x81\xa6yc\x84\xb7y\xf2\x84\x1chY\xd7@\x0e\x0c\xb2\xc9\x0d\xeb\xdb\x02\xe6\xb1\xc47I?\xc5\xd7\x96\xed\xf3O9\xce\x1e\x93M\xa4\xc0EB\xf6\xe6\x84\xe2\x14S\xbcw\xbb\xbf\xc7\xb7y\xbd\x87si\xc7]\x13m\xa2\xd7\xcb\xf9\x1cW\xabC\xd1\x1f\xa4>\xcasT\x11Ze\xe4\x960\x15\x97\x0b\x11\xa1\xdd\xbc\xba\xf6\xcdqj|\xf27E\x9eX\x06\x06n\xaf\xde\xbd}\xfb\xca\x7f\x1c0\x92\xe7\x9c\x8bh\xa4\x83\x80\xa0a;,\xea\x80W'\n\x1b\x01\xe0\xa3\xa8\x1f]<\x00\xdb\x1b\xc1/*\xe3\xb9Q\xec\xf9!*\xed\x1d\xff\x81t\xa2\xb4P\xa2\x08\x1d\xcf\x179o\x08U\xa3:\xbdys\x14\xc9\xfdA|\x87QRMq\"\xce\xab\xbc\x08\x9dh\x83#\xbee\xeb\xb7\"z\xcf\xb5\xb7m\xfb\xf9R\xd6\xf3\xd2?`\xfdd s0\xd66\xda\xbc\xee\xe6\xbb\xe9\xeb\xaf\xd8\xa5\x9c\xf5\xad\xb8\xee\xe2\xa9\xf1D\xcd\x0d\xce\xf3\xf2N\x169\x90\xa9\x86a\x80\x01O \x12-\x88\x9fm\xfd\x02`\x85=\xf0z\x90?\x16\xd3\x8d\xdd\x9d\xe5^\xab\xac\xd4X\x11\xa1\xaa\xcc!\xf5\x83@kK<\x98\xc3lv\xaeB\xc9\xa8\x9b\x99\xc8\x8a\x92\x80\x00\x0d\xa4\x9c\xe1\x89\xd8\xaa\xd1Jz\xa8/#\xe1U\x01\x066\x81o\xb7\xa5\xd6\x1d\xd3\xfb~\xa9\x9a\xa0\xf7\xfdN53\xef\xfb\x9d\xeeO\xde\xf7C\xdeS\xbc\xefG\xba\x1fx\xdf\x0feO\xef\xbe\x9f5\xad\xb7\xfb~\xd9\xb4\xc3\xee\xfb\xa5n[\x1d\xfdP\x97h\x18\xb8\xe8`Ng\xf3\xf1\xado\xc8\xdep\x7f\x89don\xee\xbe\xedYp\xc1\xb9a\x0e\xdd\xaf\xe58\xb2\xe7x\x95]g\x05\x1e\xd2\xa5_\xed\xafC\xd7K\xa4;\xf2\xa7dBe3\xfe\xac\xb8F\xd3e\xc1\x9b\xad\xc7\n\x06t\xc7S\xfb\xf2\xd0\xf5R\x1c6x4E\x96\xa0\xac\xb8%\xf5\x10\x9a\xf4\x1e>t\xbeEV\xfbtn\x04h:\x93eM\xcb4\xc3\x85$\x96\x08E/\xba\xa9\xf7F\x84\xcb\x84\xc3\xce\x9bv\xd5\xa7\x85\xd1}\x9c\xab}\xa5\xd9\x98\xee\xee=\xa8\x96)\x87\xce\xb7\x82\xc7bH\xd1\x01\xba@x:\xcdr\xdex\x1b_W\x84\x9b3\xbd\x87\x95\x12\xe9\xd0\xf1N\x0c\xc9\xed'\x9c\x8b[\x14\xd9\xe6q\xd5\xd8`\xa2\x9b~\x81\xcay\x91M\x965\x9a\xe0\xe2F\xe9\xd1\xde\xc84r\xee\xd0\xfd\x9a\xa1\xa4\xaa\x1c\xa8\xd90'\xa3\"\x8b\x8a\xd4\xdc\xac\xe3Qm\xba\xc2\x96\xf0\xc7\xb6\xaa\xbc\xe2d\xd0&od\xea\xa1\xfb5r4\xfaox\xd5t\xfd\x96R@\x97\xa0\xcc\x08\"EI#%g](ia}\xe8|\xebB\x88\xd7v\xe3\x8bY\xd4\xdd\x10{\x05R\"\x04\xf1C3\xe5Ma\xe3\x127~1i>\x90KJ\xf3\x91\xd6\x9e\xf6o\xe8\xa5\xf0\xaa\xe6]\xf5\xb1\xe8 [k\x84\x83\x10\xa1\xb6\xe3\x11:3\xf6\xbe\xb2k\xd9\xb6\xdc\xe3%s\x05G\x99m\x19\x01\xd4m\xeb\x9e\x84\xeb`\xa0\x9e\xfa\xf2\x92\xbb\xf7dk\xd6f{ Z.PNnI.\x0f,\x90\xf0F\xe5A\x14\xd6\xf1\x9b6p^\x97\x9e\xf1\x1c\xe1\"\\\x8d\\z\x9dj\xa3\xa9\xf4\xca\xdf\x13\x16I\xc3\x9a\x9f\xda\x1c\x15\xed\x05\x16\xf6 9\xb2~\x97\x05/6\xc48\xae\xb0\xcf\xb3\x9a\x8a\n9\x86\xbf<\x10\x9f\xce\xb0\xb9\xc2I\xb4\xce\xfb\xb8\x87\xbd\xe89\xa1\xcf\xda8\xd2,S\x15v\x18\x138\xff\xf0\x92\xce\xca*{\x10\x92\xb6\" \xc9n\xc3\x8b\xa3\xa9+\xcb\xe7\xa9[\xa4[;F\xbc`\xf8\xbd\xea\x15_\x8fW\x80\x83\xe8&8\xd2lf[\xc1\xb15!\xea,\xb7\x08\x8b\xacZ\xc3\x1btAq\x91\xe2*5\x95\x92\xd4\x93\xa2\xbf\xf4\x1cW7\x91\xee\xe6\xea\xf7\xe1\xcd\xc2&\xb0^.\x16ee\xd5\xef\xe3\xf8\xbf\x91\xb7\x81\x98\xd2*\x9b,)A\xf3\xe0\xcaD\xfa\xce0\x99\xe1\xe2\x9a\xa4h\xb2\xe2\xdc\x90\xba\xa4\xa9\xd2T\x16 \xb3|P\xcc{B\x1c\xb1\xc6\xea\x91\x8e\xad+.\xc1\xaf\xaa2\xcf\x97\x8b\xf8\x12\x88\xeb\n\xb8V\xe9\xb3Z\xfe\x92J\x07\xe7\xb9\x16#j'\xc9K\xf2\"E\x19\xad\xb58 \x82\x93}=\x90\x12\xd1\x16\xa8W\xb5\x12\xd4\xd3\x8c\xe4i\xa0o7R\x17\xbe8\xafKD\n<\xc9\x85/\x82\x89x\xa5\x05\xffN\xab\xa5r\xae \xb8\xe1\x15U4\xcda$\xa5\xbeI\x842P\xf4\xee\xd6\xdd\xcdQU\x96\xd4(\x9e\xca\xadw\x94\x94yN\xb8\x91\x16\xf2\xbf\xe8\x9b\xad\xbbB\xac\xcf\xb2\xe0\xc5\xf0y\xd3\xf0 \xba\xca\xa9\x16\x90%\xfdi\x8d\xe6^\x8dI\xe5H\x13\xdf\x9f\xca5\xf3\xa9\x1c\xcb\"$\xc7!I\xcaP\x1a\xba\x10#\x12\xdd\x0b\xa9[v\xc3q\xa7\xf5(\xf2\x1d\x90\x80\x0c\\ \x1b\x13\x01\x91l\xe3\xc8\xdd\x1bj_\xf7AU\x06<\xbfxK\x184\x92\xf2\x88\xe6k\xda\x83\x1a\xff\x1bI\xa4l\x9cO-\x94m\xad\xa2_\x07\x01\xb6jF\xf4\xe7\xdc\x93)\x19X\x96\xeff\x96\xcbH\x0bd \xd1\xa3(\x1e\xcf\x1ar\x91o\xa1\x19\xef\xf2\x99\x98\x87C7\xcc\xae\x81,<[\x8c\"\xdd\xaf31\xe3\x98\xd4\xf3\xdc2d_\xf2|\xf4/\xff\xc3\xf3|\xc4\xb3\xc0\xfcR\x94\xa1\xb6\x06\xee\x0d\x14\xeddP\xce\x0f\xf3oM\xe2\x85t\x94\xf9\x04\x83\xc4\xdf-\xfb\xa2fZ\xdcH\xbb!+\xbf\xb8\x04 K\x90.\x851\x0f \x84\xc4\x84\x0b\xbfgE\xe8\xb2\x92)\xfcg\xf8\x9a\xa8l\xab7\x05\xb9\xa7W\xec\xc7\xb4\x0c@\x9b\x90\xeb\xac\x089\xadx\\\xa9*\x1a\xcf`\xb2Y\"h^\xd6\x14\x91\xe94K2R\xd0|\xf5\x06\x9d\x16\xb9\xf4\xf0\x84\"r\xca\xe9T\xdc\xb03:B\xe3\xd6\xb3r\x99\xa7hBB\x9eI\x01m\xa4\xf9Yf\x05\xfd\xf8a\x84\x19\x924\xf2I*\x96s~\xf9.\xdf \xef5.\x18]\xa2\x83\xcf\x8c\x14\x9c\x15~pY\x8d\x96\x05\xbe\xc5Y\x8e'9 z\x18\x8f\xf9\xa89o\xc3\xa2\xe6\x86\x8dY\xa0%\xef\xd5pC\x86M\x94\x9c\x8d\xd0\xd0\xe1\x89\xca\xb3y\xb6u\xf3\xc4\x91R\xd6\x08-)\xce\x8dZ\x19\xaaq\x02-\x19i\xc6.\x0b\x00\xa4\xba\xe1\x02\xdf$\xe1\xa9\x9a\xa2\x9cL)\"\xf3\x05]\xa1\x8c\xa2\xbb,\xcfU\xc8\x8e(\xdf/6\xb8@\x80\xcd\xc5$\xb4J\x08Nf\x08/\x16\xbe\x19\xe0\x17\x14W\x9c\xca\xd8<\xc4\xbc\xf1\x10E\x86z\xcd\x84\x81\x1c\x9b\x0f\xbeSJ\x9e^\x86Z\x11\x058VtL\xf2\x9f\x81\x90\"D*\xc1\xd0d`\x81\x812\xb5\xdak\x81_\x03\"\xbd\x05\x19\x03\x02\xc0\x0c-\x96\x15\xe8\xc7q\x1d\\\x07-\xd2\xf9\xad\x0e3FD\xda*\x17\x0f\x8d\xd5\x82\x91\x88\xb5\x17K\xd6\xec[\\\x91\xd6\xde\x0dqA\xdc.\xb3\xf1E\xd3(TV)\xa9\xde\xfc-\xc4\xba\x8b\xacH\xc8!Jx0\xf7n\x9d\xde\xa0\xb7o>\xbcw~\x10\x8b_\x10\x8a[\x1bs\x02o2\x9f\x904\x15\x9a\xfd\xfa\xfc\xec\x8b6\xd5d\xa6o\x1dX\x87Z\xfa{K\x7f\xe8E\xfa\x06}\xedxVB\xa6^|\x92L3N\x05\x82qo\x88\xb91\x1aW\x1d\xdftN\xfb\xd4o\x94\xafq\xacQvQ\xc8\x8c\x0fh\xa2\xa85g\xf1\xe7\xff\xf9f\\[gR\xfd\x08C\x8d_3\xe2Z\x06R\x19\xab\xe2M\xd0\x90\xe36Z\xd4@;\x96:\x86/-\xaet|\xfa\x9f\x8a\xdc\x86\x8a\xa0\xa2\x14\xb7u\xde\xf3%B\x01\x95\x02ff@\xa5\xc7\xb6\x8e\x96\x9c>\x05\xde\x88m/\xbd&\xa3\x0dy\xec\xdb;\xbc\x19\x16\xa1;\xdcK \xbb<3\x1bM\x9cgRT2\xfe\xdde\xadjZ\xe1}\xa3\xf3\x9bzUKP\x1f\xbd\x94Kx)\x97\xe0\xfa\xfb6\x95KxI \xfd\xcfL m\xe87l\x0e\xfb\xc4\x1bR\x99\x03\xdc\x1d\xd2\xa9aB\x19\xe2\xc5h\xf9*Lp^\xe7\xc4\x10Fv6\x99\xd3\xc4p0Q\xe0\x07\\FC\x9c\x12a\xd7C_gC\x94\x9f6\xf8\x0d3\xb7er8\xd8\xcb\xdd\x03@\xee\x0es%\x18\x0e\x03\x0b\x9a\xc3y0\xc8]\xe0t\n<2\x17M{\xaa\xf9>\xc4\xcb\xbe\xce\x80\xee\x91\xdf\x02\xe7<\xfe\xf7?\xf0\xdb\xa7\x17\x0bX\xf7\x88?\xe8Po\x1c\xdd-`\xeec|\xf7\xe0>db\xd7\x12\xe2\xf2\x10\x0e\x9c\xd6!GvWM\x94\xd8!=z,\xdf$\x9f|\xd5\x12^\x85\xcb%,H\xb2\xf7\xafv\xda\xf7\xbfe1\x03W\x05\x05\x83\xb7\xfc\x10paEW\x08\xf6\xd5\xaa\x88P+\xf6B\x9d!x2\x84\x06c\xff\xa6\xb9\xf9\xf4M\xe9\xe5\x8ct{\xa6\x02\n5\xa5\xc9\xa7\xf7\x04\xff\xfev\x97\xe0$\xdd\xfd\xf0vJv?\xe3t\xba\xbb\x9fL?\xee\x7f\xf84\x99~\xc2\xef\x1c\x85m=x\xba\xcb\ni\xa6\xee\xff*\xee\xae?},jL\xef\x0f\x16\xf9\xc1\xc7\xf9\xf2\xee\xed\xed\xe7\x15\xcd\x1f\xde\xffZ\xbe\xffy\xffqn.\x9f\x7f\xac\x94D\xdd\xe1\x1cj\x12\x92\nU4\xb9\x9d\xb6.\x0e\xc9TI\x193\x00\xf8\x82\xe8\xd7v\xb1i\x1eV\xbe\xc7+\xfe\x98\xf5b\xe4\xdf\xd4\xc60N\xfb\xca\xb23\xf1\xd9\xe3\xe73\x07J\x8a\x0d\xdd\xf2\x19\xd6\"\x91\xbf\xda\xee:\x1aW\x16i\x11_\x94\xe3\x0b\xa5\x91\xad\x8b\xf9X\x84\xd7\x1a\xbe\xa5\x08\xba(\x06\x1dEG@\xedQ\x82\x81c\x80S\x1c\xc0\xa3\x85\x1a7\xccRT\xd5h\xea\x94\xa3\xa6\xba\x86\xc5\xf8H\xba\x9a9q\xde1\xad\xd9\xfdo\x1e\xf1\x90;\x83\xfct\\\x7fdf\xd5\x13\x9d\x03\x04\x9a\x07\xf6\xc4\x9a\xf3\x00\xe7\x00u\xb7\xd9 \x9e\x1b\x15\x10\xe8,+\xbc\x05\x90\xdb_o\x04\x1f\xe3\xbf\xcae\x1b\xc7\xea\x8eL\xea\x8c\x06\xfd\x14\xe2\x19\x86\xd5\x8f\xf3\xef\xba\x9c\x1a\xb9%\x85pV\xb2%\x12B*K\xcab\x93\x18\x95S\x84\x0b>\x8a\xf7\xde\xda\xcc\xa5\n-\xb0\x90cI=\xd1$5\x10%\xf6l\xeb\x0c4i \x9b\xc9\x88\xfdv\x9b\xcc\xf3\xb8\xca\x8a\xdb2\xbf%Qa\xf5\x18\xb4B\nv\x0c*\xd51\xa4HG\xff\xf2\x1c\xfd\x0bs\x0c(\xc9\xd1\xb3\x18\xc7\x802\x1c\xbd\x0bp\x0c)\xbd1\xa4\xe8F\xefr\x1b\xc3\x0bm\xc4/\xd3\x9a\xc7[\\\xc3\xf3>\x96\xf1\xd7\xb7\xac\xc6#\x14\xd4x\xbcR\x1a\x9b-\xa2\xb1\x05\xe53\x1e\xb9p\xc6\xa3\x97\xcc\xd8\x92b\x19\xdb^&c\xab\nd<]i\x8c\xd8-\xb2xx\xf1\x88K\xb6DTDw\x9aMy\xe6+\xe5E#j\x9dN\xcc\x0e\x1fAPz\x92\xe6x\xc5\xa6\xdco\xf5\x000;\x12\x05\x00\xe4\xba\xcd\x88*\xd0\xd0JLfHI\xd3\xec5.B\xf1.tF\xb2\xcaL\x99\xe7\xd4\xf9f\xaf\xdd:k+\xecU\xe0\xb9\x15\xae`\x1b&'\xee\xd6\x88Y\xda\xd4$\xe4R8\x00L\xcc\xc2\x04\xd7\xaatE\xfb\x80\xec\x89W\x8e,\x06\x87\xafO\x05Q\xab\x14\x01^\x7fR.\x93\x1d\x0f\x98\x8a\xd4\xe5\xb2JH\xbd\xd3\xe8\xfez\x87{\xb9\x92\xb2\xa8\xb3Tz\x8eP\xb9\xa4\x8b%\xad\x83\xe4\x06\x0b\xa3\xd8\x0e\x1a\x97k\xa6,dy\n\x97\xabR^\xd2\xbb\x98e\xa7\x82\xf8\x13\x14`\x0b\xa0\x0bmXZ\xe1\x1aI\x85Q\xa7D\xdc!aQ\x11\xdb\xa4cx\x85`\xccE\xa3\xa5\x11:\x9d\xbf\xbe\x93\xa7=\xa7\xb1\x14\xc2'g\xca\x9a\xa9\x83\xa0L\xb0`\xfe\xd46\xf3\xc6\x93B\xd6z\x1d\x007$Y\xd0\xf8Q8U\x10\xc4\x9fA\xa4\x8f\x90$\xd8\x97\xd4\x11\x96\xc2 R\xd7J\x0d\x0c\xae\x966\xd1\xf6eL\x97\xd6\x90\x11\xb3\xa9h\xae:~s\x10\x1d\x03\x01\xc6A\xbd\xee\x0f\x80\xf3\x0d\xdc\xfc\xa3\xdf\"\x80\xbd\xde1\xbbJ<\x7f\x18\x1enS\xe9k\xe4\x005\xe0Z\xdc\x8dr6Z%\x1a2\xa1\x08t\x11\x01\x9eL\xb4\xf6e\x04xb\xd0ZX\x0d\xba\x92\xe8q)1\x1c\xb7a\x17\x13\xd0\xab\x89\xf5\xf0\x8a_Ot>\xeb\xb1qfe\x9e\xd62?\xd9\xbe\xad\xe3g\xd6\xacF3\\\xa4\xe1\xd2f\xb4l\xce\xa6\xaa\xfebM\xabeB\x97U\xa0N\x1d\xf8V\x05vN\x05\x9cT\xc1\x13!\x05\xd0\x91\xbb\xd2:\xe7LyW\xd4-\x19\x98\xd1\x80\x04\x81_\xac<>\xb9\x90\x0b\x96\x81W,\xc3.Y\x86\\\xb3\x0c\xb9h\x19t\xd5\xd2\xfb\xb2e\xd0u\xcb\x80\x0b\x97aW.\xc3.]\x06\\\xbb\xacs\xf1\xd2O\xc0\xf5\xbf|\x89\x80\x1bT\xd5\xfc\x11.`\x1e\xf3\nf\xd3\x970[q\x0d\xf3\xe8\x171Op\x15\xb35\x971\xdb\x7f\x1d\xb3e\x172Oy%\x03=\x95\x8dz-\xd3\xe3b\x06\x8a\x1f\xb6.gV\x12#\xeb\x82f\xba\xcc\xf3i\x96\xe72\xf6;\x08\xae\xce\xaey\xc3r\x8ch\x85\x8bZ,\xaa\x8d\x1cA\xd5-\xc0Sx\x00\"<\xe5\xc6qc+c\x15\xe9\xaa\x178go\xb3=#\xc0 |\x9b\xe1z6\x02\x1b$}\x8c\x00\x06\xd1\xbaN\x9ad\x05\xaeV\xe8uS\x92;+j\x8a\x8b$\xb0M\x93\x1c\xd7\xf5U\xecp\xdf\x0f9\xb3')\x87\xbf\xa7$\xb1\xc5*D\xeeI\xb2\xa4x\xe2\xad\x96\x1f\x9f\xcc/\x12\xd6\xfawV#\xdfZE\xee\xad\xe0\xe6a\x1d\xbc\xd4r_%z\x81\x05\xee\xbb\xba\xd7\xb0\xa3\xd4\xd3t\x02\x1dv\xf7\xe5\xba\xfdr\xd3\xef;\xc2\x03\\b\x10wX\x9b\xa6\x11v\x0eP\xbaA\xb9\x8e\x1cXz/\xc5\xa2\xa2\x0b\xf5\xbd\x19sL{\xeczl\x9b8\xb5\xe6MY\x17`\x0f>\xd9/F*\xa6\xf8\x18<\xeb\".\xf9\xd7\x03\x8c\xa3\xda\xf3`^>A\xf1\xcd.\x02\xb1\xab\xb5 \xb8u\xa8\x1fi\xe1\x0c\xa7~\xad\xdb6\xd0\xf2r\xb1\x02\x82\xaf\xd3d\xf0\xd7\xec\x0cJ\xc7\x96T,RT\x97s\x82\xc8=\xad\xb0q\xfd$L\x85\xccQ\x06)\x8e\xb0E\xb8h\xf9]\xac\x8cTR\x95z\x14\xc0\xd3\xc2\xb2\xdd\xaa\xc2&\xe15O\x97\xe4\xa9\xfd$\xfd\xad\x8d\xaf\x99G\xf6r\xad9\xc2\xfe\x02\n\xe6\xd1\xaf5\xc7\xb5\xf7#\x82\xe1D\x1e\x07\xce\xc5\x19\x8b\x1f\xadT\xa1\xa0\xa4\"X\xa7,\x07\xaa\x88\x8a\xa7c\x0b\x07;\xadf\x05\xb3\xd2\xe3d\x8evm\x11\xbdk\x85\xad3\xf1\xc4\xa6H<\xc0\x89\x92?6\x8egz\xe5p.E>e\xa3D\xcf\x88\xcdO\xfb\"\x14u\xd0 \xee\x06\xd1X\xa0\xd7t\xb5\xc8\x12\x9c\xe7+\x84\x19Ki)\xcf\x9cQ\x8f\xadu\xe2\x8d9\xaf\xa4\xb8\x0b\xeft\xf1\xf4\"\x1b\xb8\xeb\xc5\xd3\x87GQ\xb7\xc6\xebo \x16}\xad\xd9\xa9<\xabg$\x95\xbb\xd6\x1b\xbb\xab\x9e\x98{C<\xbd\xd8\xd4\x97r\xe5\x0f\xc1\x85\xd1\x94l\x91\x91\x84K\x1f\xe3\xa4 \x80\xc7\x18\x85\xce\xaarQ\xd6P\x1e@\xd1=f\x1b\xce\xed\xaf\xc0|\x19\xef4+\x9d{\x1f\"\xf0\x84\xd3\xc2h\xa1\xf4Zf\xc8\x97\xdc\x8d\\N\xa7\xb2\xcbv\xb8P/\x12\xd7]YA\xf8\xed=\x97\n\x91\x9f\xebjLk\xab\x88#^\xb2\x81\xcf\x12\xf7\xacX\xde\xcd\x1a\xd3\xacf\xfa\x8e\xfb\xd1\xf1b\x91Gn\xf7\x99X\x13Sv\xd1\xb1\xcf\x84\xc2AX\xfe\xc0\x0b\x08$\xf2\x80\xcb\x19\xca\x03\xee%\xd3\xd2\xd9\xdfN\xaf\n\xa3\xce\x1eKBr\x89\xc7\xd6B#*\xfdKY\x14\xcb\xb8\xe2\xa4\xadM\xd3\xa5\xf4\xfb\xc9\n*Z\xe9\xb8\n\x0b\xa0\xd7l\xc2\x83\xe0&\x04\x9d\x7f\xfdrz\xfe\x07#F\xfc\xeb\xea\xfb\xf1\xc5ehc\x02\xe7(\x1eO\xb0\x8b\xfe\xf8\xfa\xed\xf8\xe4\xf8\xf2\xf8\xf4\xa4\xdful\xf7\xcb\xb3\xf3\xd3\xb3\xd3\x8b\xde\x9f \x92\x07}\xc4\xf9\x14\xf8R\xdft\x0f#2~\x8ei\x9e #\xc3s\x10\xf8\xd0\xb8\xe2\x8c\xb4\x8f]\x167EyW\xece\x05\xbf\\\x12u\x8d\xc2\xa2\xce?\x83]\x86\xa9\xbf\x98\x08q\xbb\x8f\xab\x92\xa6\x9c#\xfb\x1f\xaf\x83\xf9Z\xebi\x15\xc1T\x94T\xbbx\xa3)O\xee\xf9\xee\xe2%w\x8ey\x13\xacz[*I\x8b\x0d-\xc2K>\xb5\xec\x87a\xa8\xf0\xa5\xe7\xc3\x87\xff\xd1\x8d\x14^\xb9P\xb2Z\x03\x8a\x9f6\xd7\x81h\x86oc\xa6\x05\x0f\xcffB\x96\xc9\xc1\x90\x18\\\x94E\x9dMr\xd1\x952b\xb1\x8f|\x92\x88\x8a+\x88\xc0z \x80\xf2|\xf4\x12\x00\xf5\x12\x00\xe5|^\x02\xa0^\x02\xa0^\x02\xa0\xe0\x88\xbc\x04@E}H/\x01P!\xabI\xe0wi-S\xc3\xf2j\x1f\x18=\xa0\xe2d\xba\xbc\x01f\x90\x88}\x10\x0d\xc7uH7\xb6\xa8\x99\xc7#\xa9D\xce\xf6\x9e\x8e4\x11N\x8c=\x19&\xe2\x01\x04\xd5\x8e\x1d\x9f\xb7\x15\xff\xe1:H{A\x05\xa3?\x8c\xbb\x9d\xb1b?\x1c \xc7\x8b\xfcpQ\xbe\xe1\xb8\x0f\x9b\x9e\xf8q j\xc5\x03\x1d\xc1P~\xa3\x0e\x8e\xde\x98\x0f\x80\x0b\xa9\xee\x17\xf1\xd1\x9a\xecm\x8e\xf7p\xa2:<\xda\xc3\x06\x07\xe6\xd0F.\xec7\xcf\xadM\xc5y\x0c\xe4\xe2\x0c\xd73\x92\x8e\xe5\xa9\xdd<\xfb\x0c|\xd5\x8a\x13\xaf\xc2\xee\x08\xd4M1\x1f\xc2\xb0'\x08\x8ai\x0f\x1f\x0b\x89\x89.%(\xdd\x9d\x10\x92\x90JC=\xa9r\x02GY_\xb5f\x82\xe2\x02\x17ei\xe3\xf02J\xb8\xc3H\x06i:\x04\xd4v\xa8g\xa4#\x82\xaf\x1f\x04\xdfj\xa8\xe7\xc4\xa0\x1e\x91\x8f`@}u!\x1a\x16\x01\x89\xb6\x96\x831\x1d\x19\x05\xd8/\x96\x0d\xc1\"\xc0\x9e)/\x87i\xd0.(\x87\x16\xed \xa1\xdf\x1c\xc4\x94\x07\xea\xc7\xf2\xf5\xf8\x18U%Qx\xbd\xe3KQ\xef(K\xf4\x98\x1cY3\xe2\xb2\x0bp\xd4\xa8K\xc7 \xdc\x1fs\x198\x9d\xd4\x9b\x8f\xb8\xb4\xaa\xe5{\xe3-\x9d\xb5\xf1\xdd\xed[\x07G[>\xaf~\xee5(>2\xba\x1f\xe2\x13\x84\x1c\x83AZC\xd8\xcf\xc0F\x11n`\x16:\xbe\xb8\x19w3 \xfb\xe1\x83\xd4\xd0\xd6\x12\xdd\xef\xdd\x0d!BS\xf1\xb8-\xe5\x93n8s\xa8\xd9\x98\x07\x1a\xf5\xa6\xfe\x84\xea\xe2!\x7f'r\nn\xd1\x9f\x04\"\xa0\xd1\x131\xb5#\xb1\"\xfd\xdb|lu\xcb\xb4 C94/8?C[}\xf7\x9e\x9e\x97\x03\x1b\x01zgF\xb6\x07\xec\xb1\xb2<\xd2\x1e=2#\x06\xf5\x03\xf4\xae\x00\xd5%\xd0\xd7\x190\x86U\xb7\")\xa8\x81i\x0b\x8a\xd1\xce\xd4\xbe\x048?\xfb\xf2\xd2\xc9\xf4\xa5\x93i\xc4$y\xe4N\xa6m\xdb\xc6\xb7\x10[\x9be\xa8I4\xcc\x10\n\x99<\x96\xa13\xd8\xa4\xc9\x8aC\xb4\xc0tf\xbcj\xda\xa8\xd1\xca\x8a\xd9sNB\xbb/\xaam{\x00\xb9:\xd0p\xb1L\x14\xff4\xf52W|\xaad\x93\x0d\xe7\xba\\4\x8d\x8d\x9e<\xecm\xa7\xb8N\x82}\xf8\xd7\xb5N\x9e\x8e\x7f/\xfd\x89\xff3\xfb\x13\xfbZ6F;6\xd6{8\x97:\xcb\xd5\xa2\xb1k\xcd\xf0N\xed\x15\xa1UFn \xaf%\xef\xda\x16\xd0\x06~\x0c\xda\xdf\x14+\x9eO\x13\xbf-\xb19,\x9c\xc2\xa6\xc3\xdaq 0\xc7\x8bx\x00\xd6\n\x82\xfb\xc3GOL5WQ`\\k\xb1\x8d\xd9\xb9\x0f4'\x088/\x08\x98\xc6 \x9c\x13\xd4\xdde/es\xfb\xe1\xf6\xdc\xcb\xe6nq\x05Z{\x0d\x8c\xd7\xdf\xef\xa5\x10m;\xee\xbc\xcfW/y\x18/y\x180\xb7\x9fz^\xf20:/_\xf20^\xf20\\C\xbe\xe4a\x801|\xc9\xc3x\x06y\x18\x11\xfczw \x0cB{\x8d\x0b\x1e\x8c\xd0\xa3O`7@e\xab,`\xf0\xa9\xb9\x8fB\x1e\xb5k\xe0\xe0\xbe\x81\x90%2R\xef\xc0\xe7Y\x87\xd5u%\xe2\x83\x14L\xc3\xb1\x1bM\x8d\x91\x85\xd3\x85\xd8D\\\xf5\x8bV^\xa3\xf9 \xc8\xaf\x02\xf1\xa9X\xd4\xc4w\x7ft\xd3n`\xcbZ(\xfab\x8f\x01\x12\xd2^q\xd1\xa0c{\x9e\xe3\xd1\xc6[\xc2\xa0XhqpEv\xa0A\xd9\x03\xeeG\xb7=|j\xa1\x8cz\xb7(\x1c\xd6\xa4\xb0G\x9bB0\xaf\x062!\x1a\xf3\xbb\x99\xe52\xd2\x02\x19H\xf4\x9aa\xbd\xc15\xe4\"\x1f\x82fW\xd5\xfbcy\xfdr\xae%\xdf\xd6\x0c\xe5u]\x05i3Z\x05\xed\x86\xae\xc3\xd4\xf3\xdc\xc2n_\"\xe9\xf4/\xff\xc3#\xe9\xc4\xb3\xc0\xdc\x01\xe6\xbd\xe1\x81\xe1\xde@\xd1V|\xc9\xbf\xc1\xb9\xf9\xb7&\x8c\xc9\x13y\xa7\x1e\x89\xbf[\xe0Fm\xc3\xb8exCV~\x19\x0d\x92\xd0 \x05\x0ec\x1e\x12\x08\x89 \x17\xd5\xac*B\x97U!R\xfa\xce\xf05QQ\x8co\nrO\xaf\xd8\x8f\x83\xd5\x19'\xe4\xda\x1f\xbc\xcc\x1e\x1e\xbd\xc0t\x02\xdb%\x0c&\x9b%\x82\xe6eM\x11\x99N\xb3$#\x05\xcdWo\xd0i\x91\xafPY\x90p\xd6V9\x9d\no*\xa3#4n=+\x97y\xca\xcb4\x12\xcf\xec*h#\xcd\xcf2+\xe8\xc7\x0f#\xcc\x90\xa4\x91OR\xb1\x9cs\x87\xab|'\\t\xb8`tq\xbf\x19\xafO\xccX\xe1\x07\x97\xd5hY\xe0[\x9c\xe5x\x92\x937!\xa6\x1d\xf3Qsv\x90\xd2s\xc3\xc6,\xd0\x92iM6\xd0\xa0\x89\x92\xb3\x11\x1a:\xbcw~\x10sr\n\xc5\xad\x8d9\x817\x99OH\x9a\n\xcd~}~\xf6E\x9bj\xd2\xcfW\x07\xd6\xa1\x96\xfe>\x02\x9aE\xfa\x06}\xed\xb8sB\xa6^|\x92L3N]\x00r\x17\x8c\xb91\x1a\xff\xa0\x8c\xddp\x00\xf2\x1b\xe5k\x1ck\x94]\x142\xe3\x03\x9a(j\xcdY\xfc\xf9\x7f\xbe\x19\xd7\xd6\x99T?\xc2P\xe3\xd7\x1d\xb8\x96\x17j\xc6\xaax\x134\xe4\xb8\x8d\x165\xd0\x8e\x9b\xee\x08R\xe9\xf8\xf4?\xe5\xe5c\xd9\x0e*J\x11\xc9\xe4=_\"\x14P)`f\x06Tzl\xebh\xc9\xe9S\xe0\x8d\xd8\xf6\xd2k2\xda\x90\xc7\xbe\xbds\x87\xb9\xd4\xd9A\x19\xad\x8d\xba\xbb\x858\xcf\xa4\xa8d\xfc\xbb\xcbZ7c\xe1}\xe3\x0e\x93\x1d3%\x89\x07\xf1\xbe\xa4%\x89\xe7%-i\x8b\xd2\x92^\x12\x18\xfe3\x13\x18\x1a\xfa\x0dk\xc4>\x0b\x87\x94\xe9\x00G\x88tw\x98P\x86\xf87Z^\x0c\x13\x9c\xd7m1\x84\x91\x9dM\xe64>\x1cL\x14\xf8\x01\x97\xd1\x10wE\xd8)\xd1\xd7\x0d\x11\xe5\xa7\x0d~\xc3\xccm\x19#\x0e\xf6r\xc7\x01\x90\xbb\xc3\x9c\x0c\x86+\xc1\x82\xe6p+\x0cr$8\xdd\x05\x8f\xccE\xd3\xd2j\xbe\x0f\xf1\xb2\xaf\x9b\xa0\xeb\x0c\xb0\xc09\x1d\x03\xfd]\x01\xf6\xb9\xc6\x02\xd6=\xfc\x0f:\xee\x1b\x87z\x0b\x98\xfb\x80\xdf=\xd2\x0f\x99\xd8\xb5\x84\xb8<\x9e\x03\xa7u\xc8a^\xe5`\x9apb\xc7\xf7\xe8\x81}\x93|\xf2e\xeb\xbd\xf2\xa6\xeb\x91\xba\xce\xcab\xef_\xf2\x1f\xfc\x96\xfa\xdf\"\x8bO&\xc8y\xb3\xf7PMp\x95\xccT\x94\xad\xb8\x9eT+\xc27\x15\x97:\xee&Kw\x18\xf7\xe5\xe1=\xdd\x11\xa1xM\xc6\xb7\xf8\x95#\xeb\xfb\xf3\xfe\xe7\xdf?M\xf0\xbb\xdd\x83\xe9\xfb\x83\xdd\x0f\x07\x9f\xf1\xee\xa7\x8f\xf8\xf7\xdd)I\xf0\xfe\xe4\xed\xc1\xfe;\xf2\x165\x18\xe9|\xeef\x9e\x9a\xc4\xee\xfd_\x0f\xd7\xe4\xed\x03~\xa0\xcb\x8f\x07\xf4\xfe\xe0\xfe \xcfo\x0f\xee\x93\xcf\x0f\xb4\xfeu\x9f\xdf\xdc\x91\xfc\x8d\xc0Y\xf0\x87\x03\xdb1\x0fy-\xfcy\xaa\xba\xba\xde7\xbe\xe9\"\xa0\xff#\x7f\xb6\xff\xeb\xde\x8b\xca\xe7\xfaW\x9e\xcc\xde\xd7\xf7w\xc5\x87\x0f?\x0f\xde\xfe|\xb8\xa6\x9f\xaazv\xfbk5\xad~&\x15\xc7Q\x03\x94\x89\xca\nU\x17\x8a\x0d*\x12WY<\xc5]\xe4G\xfcq\xff\xd7;/\x82w\x1f\xde\xa5\xbf\xde\xfdLo\xe7)~X\xde=$8Mg\xb3O\xd7\xf3\xe5\xfby\xf2@\xde\x9b\xbb\xe4\xbf\x986\xe12I\xce\x90\x0c4j\xd0\xe4\xa2U\xae\x92Z\xef\xc67\x1e\x10\xc6\xcam\x83Q\xabH^\xec\x0b\x0b\x8c\xc1\x16\xdfhx\xf1Q\x0c\x9eB\x07\x91,5\x9cN\xbe1\xb8\xf7\x83\x9b.\xd2TQl\xd9\xb1\xa8\x13Q\x84&&\xb8\"\x8e\x85(cSW(-\x8bWTT\xe4\xe4\x02O\xf5\x8e\xe1\xe0\x8d\xe5\x88\xd1\x04\xa7fP\x80\x81\xa8\xfe\xd1\x19\x87\xcfK\x86[+\x1b\xf1\x93\xba^=(-\x89\xe8\x01$\x8c\x12\xdal\x9e\xda\xea\x07'\xbei\xc6\xea\xd4\x133dFY\x13\xf3\xb2\x96Ij>/**\x9c\xa7\xc4\xe9\x990\xb1\xfe\xc7JY);\x16\x1azx\xe1\x80\xa2JO\x9bssA\xf4\xeb+\xf3\xdb\xbd\xb2j\x15\x05\xa8\xb5>1\x0eB\xea\x93\x86\xcd\xe2S\xf9\x89\xda^\xddDf\xe5+\xd8\xee\xc4\xe5\x88\xd3Vo\xdfn\x04\x8b\xef\xf6\x7f\x0d\x7f\xab\x07#\x14\x83\x8a\xa2\x90\x91\x0eC\n\xc5Q\x01\xfc\x15\x00\xaf.\x02\xb8\"\xd9\xf3Cd,\x1f\xff\x81\x9aLe\xbe\xf0\x11:\x9e/r\x9e\x0bR\xa3:\xbdy#S\x19\x03\xb0\xb2\x82\x92j\x8a\x13ae.k\xc2\x0c\xbeJkM\"vH\xd5t\x07\x08\xc0\xfa\xc2\x8d\x1e\x1f\x13\xc1y\xde\x8f\xcbL\xea\xa9\xbf\xa1\x13]xDX\xf8>\xb0\x15\xb8\xa5\x1b \x125\x17*\xc6\xfd.\xa3\xb3,\xda+\xd8\x1fu&\x93h\x03!\xc6!_\xa0z\xa2Y\x03\xd1=#\x9e\xf8\xce\x11\x8f\\K\xe1\x1f\x01\xe7]\xfeTLl+\xa0[f\x1f\xa1\xd7*\xaf%\x9cWS\x95y<\xbb\x1d\xb0\x82\xc4\x839\xbcfG*d\xf4\x94\x0b\x0b\x81\xdcSh\xc9\xe1EU&b\x0b\x06;E\xcb\x0f\xe0\xcc\x83$\xfd\x0eN\xfb\x1d\x9a\xf8;,\xf5wX\xf2\xef\xc0\xf4\xdf\x01 \xc0\x03S\x80\x07%\x01\x0fM\x03\x1e\x9a\x08<(\x15\x18\xad\x95\x0c\x1c\xbb\xe0\xea>#'\x04\x0fL ~\xa4\xa4\xe0\xc7M\x0b\xde|b\xf0\x96\xa4\x06?Ar\xf0\x93\xa4\x07oQ\x82\xf0sH\x11\xde\xba$\xe1\xa7M\x13V\x01\xd61\xcb\x02\x16\xcd%\x1ehL\x97x\xa4\xad\xa6\xef$\xf5\xf4\xbf\xaaQ\x9d]\x17\x98.+~$U\xa8\x06\xe0\xc1\xec\xbe#\x91\xf4\xac\xc4\xb5\xb4F\xd9\x16\xdc\xcb\n&\xf08\x17\x99]\x18\x04\xd3\xee\x93\x8eci\x9f}\xf4\xe0%\xcf\xddPI\xcfz# Z.PNnIn\x95\xb7 G=\n_\x87\xb0h\xdf\xb4As\xe7\"\xe33\xaf9/=9!\xe1*\x12\xb0\xcb4\x9b\x06\xa3\x07y\xd0\x1c;M\x19\x96\xb4:\xee\n\x0c\xec\xb3jp\x9d.\x0bv\xb6\xe3\\Vx\xe7YMUBq\xe3\xb5\xf1E+2L\xae0\xf7\xb2<\xca!,b\xd1\xc3\xd7AS\xd5H\x1e@En6\xe3\x18^\xd2YYe\x0fB~V$!\xd9mh!\x94\xd3\xa9\xcc\x1c\xf6\xb7\xf9\xb7n\x03\xda\x0f\xbf+\xbc\xb2\xeaA\xc5\x989\x1e\x1f\x9a\x8dj\xab*\xaa\x9bw\xb7\x08\n\xaeM\xc3\xf7rAq\x91\xe2*5\xd5\x8b\xd4w\xc2\xe78\xc7\xd5\x8d#N\xa8y\xd4\xaf\x83a\xc4\x15A\xf5r\xb1(+*\x93\xe69\x12\x1cs\xbe#\x980\xa2\xb4\xca&K\xca\xfb\x90sWi\x00\xe0\x840\xe9^\\\x93\x14MD\x80\x9f\xd4 J\x91\xb2\xbd\x910\xbb\xc5q\xebg>\xd2I\xc4;\x8e\xaf\xae\xaa2\xcf\x97\x8b\xd8\xb4\xc6$;T\x03\xc0\xe7\xff/\xa9\x1ep\x9ek\x11\xa0v\x84\xbc0*R\x1eu\xd7q\xe0v\x9fv\xf9\x08\x0b\xd0\xabZ\x89\xd6iF\xf24\x18\xa1-\xa6-\xafKD\n<\xc9\xc5\x99\x9fG-H]\xf5w\xee^\x16\x08\n\xa8\xa15R\xa4\xdaG/itO\x1a\x8cm\xe2\xbaOeRaT\x95%5:\xdb\x8b\xeb?\xbb\xb5\xbd\xd4\x15\x1e\x80\x8c\x00\xbe\xda\xf8}G%.@\x02\x88*\x07l G\x10F\x89\x05(RI\xc0\xae\x18\xe0\x01h\\:8\xff\x1cs\xa4\xc5]h\x8f\xe9|\xeez\xf0\xa3E\x00b\xa9\xfd\x9a\xe3\xb1\x9c\xfe\x0dS\x01\xc9\xd4\xd7?\x8e\x12#\xfe\x11\xce\xad\xde\x10AA\xe1\xe6@\x10Y\xa9\xf6\xfd\xdan\xc1\xf8\x11\xce\xab\x07\xb1\xa1/\x85#$\xd3\xc3h\x1ba\x8a\xfb\xd2\xb6V\xce\xbcc\x01\xf8\x05j\xbcP\x0b\x0c\xf7.\xb4aEZ\xd6(\xd12\x9a\xa0\x8d\x16g\x01\xcd\xf9F\xb6\xf5\xbaEYz\x95d\xb1\xe7\xf4\x89\x847\x9c)\x10\xf1\x0e\x85\x05c\x89\xf1\xbf\x11\x84\xc4Fy\xd3B\x15\xf5.\xbe2\xa4\xf4\x8a\xf1\xa3'P\x10c\x95\\\xe9K\xea\x08Ka\x10\xa9#(\x0d`\x99\x15u*\xeaR\x19\xf2zl*\x0dEb\xe3cyT-\xc4G@\xcd(\x8fX\xb4\x0b\x1e-1\xee\xb8}\x96\x1fjJ\xe7+\xc9\xe0)\xf3\xc7\x1d-w8|\xd3\xa2\xfc\xf7IE\xb4\xf7^2\xde\xb7\xf1ty\xed8{F\xab\xa4\x18\x8d\x8a\x80-)\xf1D\x9d_\xea\x01\xce\xb1\xfc\xf1\x18\xd1\x11\xb0\xf8\x08\xa8\xa7\\<\xe3\xc6H\x0c\x88\x92\xe8\xc9HX\xa4\xc4\x1a\xb1\x12\xc3\xa3%\x86\xc6K\x0c\x8d\x98\x18\x1c31(jbp\xdc\xc4\xc0\xc8\x89\xe1\xb1\x13\xc3\xa3'\x06\xc6O\xac\x1bA\xd1O\xc2\x8b\xc7\x1bE\x01\xf8\xd6\xfd\xe5\xd08\x8aG\x8b\xa4x\xecX\x8a\xc7\x88\xa6\xd8\x9ax\x8a'\x89\xa8x\xa2\x98\x8a\xad\x8a\xaax\x1eq\x15[\x18Y\xf1\xb4\xb1\x15\xf0\xe8\n\xe8\xbd\x9az\xa0\xf7k\xea\x193\xc6\x02n;\x8e\x14g1(\xd2\x02\x8a\xa5\xbeK\x94\xce\x15\xc2\xd3;E%\xd0\xa6\xde<\xe3\x11/\xa8\x19\x0c\x00\x8f\xd6\xfd\x8e\xb7\xe6\x02\xda\xb90\xda\xd8`<\xcbW\xb1\xcf\xbc\xe8\x97\xf7\x8c\xe4\x9e$\xcb\xe8\xfe\x96\xe6\xfd\x0e\xc3/Kp\x9e\xafP\x92\xe3\xbaf#x?\x94\x1f\x8d@\xee\x06\xce\xc0\xea\xc0\"\n#d$\x17\x97\xf2L#3\x13 \xc9yb\xba\x96A)\xa6\xe1\"\xf7\xdd%\x1a=\x04\xe3e\x1a*|\xd7\x8f\x9e/\xfc\xf8\x9d\xa2\xc9j\x07-\x17\xa9\xfe7\xcd\xe6\xa4\xa6x\xbe\xa8w\xb4\xfbL\xa4,\xfb\x8b\xe1#y\x17]\x91\x9c\xc3\x89\xf5*\x03\x9e\xb0\xa1\xe7k\xe1IH\xaf\x18\x111\xc1 \\@\xc8XD\x0c\xec.cK\x0c\xb4\xd8c2\x8e\x89\xec\xb1ODZ5\xdf@\xa4\xa0\xd5\x8a\xd7\xfb\x91\xf8\x82h\x9a\x04*\x86\x8a\xa7\x07E0)\x80\xe4\x89\xdb\xe3W\x10&\x8a\\=Q\x01\x87t@Y\xf0gr\x05>\x9b)\xccqM\x15\xd2 \xc2\xb6t\x1eyX^6\xe2DJ\x91\x01#\xd6WQ\xc9~\x8c\xfaJ\x81R\x9d\xe2\x81s\x86\xd9\xd6\xd2vi\xc99\xc1\x99\xacFY\x91T\xdc\xfa\x07\xf8\x9b\xb8\x0c\xe7\x850\xc4\x8c\x07?\xf0V\x85\xb2\x9f\x8d\xac\x08\x93n\x89\x87#\xb2/\xb6Q\xa4\x80\xca\xcabO\xd0\xcb;U\xaeo]\x1d1\x15\xf7\x8di\xd7\x1a%x!\xacLg\xd4\x0e\xdb\x81APz\x9d\x97h\x8eo\x88\\\xea\xba\xe8z\x91\xaa\x8dMV\xe8\x8eT\x91\x19\xc3\xa9\xef\x07P\xa5{!\x0d(\x1d_e\xd8R\xda\xba\xc0\xd78+jj\x9cf\xbc\xf0l\xd7;\xfb\n\x17I\xa8N\xec\xa5\xe1v\xe5u]f\xf8\x96\x18#I\x0e\xf3\x982\xb3\x83\x92\x17\xa0\xeau\x19*myr\xcaN\xde\x7fIN\xb7*\x01\x9e[\x91\xc6\x08\xcb\x084\xb6\xff\xbc\x00\x9bx4\xacX*\xb2\xf3\x15\x7fy^\xfb\xbc\xe4x\xb9\x004\x97<\xe3t\xae\xb1\xc1\x0d\x8b\x88p\xc6D\x84\xcdA\x80\x0d\x05\xb1\x9f\x1e\xff\xca\xab\x1d\xb8\xa5\x11\xf0\x07<\xd8\x056\xfc\x96\xa51\x17\xb1H\x86\x8d\xd2\x14\x11r\x1d4\x87\x863\x98\xa0@\\\x81\x04;m g\xbaAR\xc6\x9b\x86CAp\xc6\xe2\x01sH\xfe\xf3y\xf0\xc8@\xb6qH\x18\xef$\x9f\x82\xf0\xecM\x06\xe2S8\xd0\x03\xcc\x9c!T\x8f\x10\xeb\xd1o\xd7\x8c\xb4\x10\x86\xd0\xbaV\xb0\x87w\xa1\x04HVA\x85!\xbd\x88\xfa\x12c\x02\x15V\xb5\xcb\x9c\x13\x11\x80\x91\xd6PZ\xf7\xeb\xb2v\x90\x99\x04\xe9J\x04\xd4\x97\x08AB\xb5\xc5\x03\\\x1a\x08.'\xd0f\x82\xb7\xc5\xa3g*\xae;\xd1\xe3P\x078\xce\xb4\x90\x1e\xaeIM`@>\xc1\xb4)\xda>^\x8d\xa1[\x112\xb2\"\x80<\x8b\xe9\x0d\xd4\x8fU\xc3\xe8\x1fE\x83\xa0\x9e\xabe\xe4E2\x8c\xf25\xf5 r/!7\xf9\xed&\xb8\xa3\x9c\xb5\x9c@\xc7;q\xb9\xa3\xda6|\x00k\xd34\x82\xad\x01\x14!P\xae#\x07\x96^}\x13\xbd\xd0B\x1d\xd7ET9u\xa6=\xae\xa0\xb6\x87Sk+\xa66\xc0\x1e|\xb2_\xc4d\xd0\x16\xf1\xac\x8b\xb8\xe4_\x0f0\x8e\x14\xa8\xc1\xbc\x8c). \xeb\x86\xf3\x04\xa2\xb4\x82\xe0\xd6\xa1~\xa4\x853\x9c\xfa5\x15\x17`y\xb9X\x01\xc1W:\x1d\x03\x9dE\x95\xef\xca\xea\x1c\xea\x84\xd5\xbb\x9b\xa8\x13'9`-\x82(VF\xb9i]\x9dQ\xff\xc2J\x87~\xedlibV\xeal\xff\x85;o\xbb\x0bC,\x87\xc7\xcd\x0f\x10\xc8\xf8\x16\xe9H\xaa\xfa\xd1c1\xf6\x9a%\xd1\x04S\x0bR\xdf \xf4'/b S\xd3\x83\xb0d\xfc\xbe\xa3\xb0\xc6Q^\x97\xe8\xa6(\xef\n\x84\xd9\xaa\xfd\xc6\xcc\x9f`\x90\xc6S8\x8ca\x1ck\xd2\x13\xd4\xa6S\xb7\x1d*/\xa1\x95{\x10\x11\x98\x9a\xd7\xe85\xaf\x97\x99\xd1\x19\x9af9%\x15I\xd1\xcd\xad\xd2\xeb\x94T\x98\x96\x95?\xb8LF\xae\x07\xd9\x05\"P\x02RR\xc6\xb2w\x15eb\xaa\x83\x85 \xb4\xa4Y\xd9wP%\x8f\xe6+\xa7S\x197g7\x07\x862+\xba(Fs\xc3\x00\x93*\x80K\x11\x81\xa7\x01\xa1\xce\xbdz'\x04\x92O\x87\xda\xb2Qhrb\x83\xbf\x9b\xe1z6>\xa9\x8c\x0e\x06\x99\x13Q\x18\x15_\xd4Z\x8b&[\xc4\x84\"\x1a\x84\x17`\n\xb0\x08Ws\xdc]k\xe4_\xb3\x81\xaf\xd8\xcf\xc2\xb1K\xec\xd1\xe1il\x13\xb4f3)\xe7\xf3\xb2\xe0\xe3\x85cHE;\xac'a\x87\x18Z\x84\xa7)2\x9a\xbbR\xde\xba#z\xa5\xac\x1e]\xab\x1a\xbd\x16`\x7fk\xaeh9\x9f\xf64k\x82w\xb5\xeaa\xa27+n\xcb\x9b\xc0Z\xca\x8a\xc5\x92>\xdb\x04/\xc8.\xe85\xf1\x10S\xaf\xfd\x9c\xb0i\x97=\xe4d\x99s6\xf1yV\xdc\xa0 Nndqx\x00$\x1e\xa3\xc0S5\xf8\xa2 {\xb8t'\x82\xb8\x8b\xab'\x0b\x80\xe6\x81x\xe0[\xc5!\xbe\xa5\xa2ob\xc6\xbf\x81\x12-\xbe\xd6\x14O\xf2\xac\x9e\x91T\x053\xc4\x82\xcc!r\xbc'\x9b\xfaR\xee\x16\xf8\x19Ix\"\x82aU\x00\xe01F\xa1\xb3\xaa\\\x945\x9c\x07Z,o\x86\x11\xbc\x11\xffB\xe14\xe5\x1e=Z-\x13\x1eM\xc4m\xa49\xae\xeaY$h\x1d\xa1\x9ab\xba\x8cn\xfd~\xfc?\xd6\xb9.\xd9T\x98M\\\xf0q\x11\xa9\x96\xa1B\x1a4\x01:\x0d\xe3\xe7\x92\xc7\x0d\x89\x18y6\xc5\xfc\x96l\xb1\x8c\x8b\xe7^<\x86\xe7J\x9e\x7f\xfdrz\xfe\xc7\xd5\xf1\xc9\xd9\x8f\xcb\xab\x8b\xcb\xa3\xcb\x1f\x17\xbd\xf2\xd7|0\xce\xceO\xcfN/\xd6\x00 \xdeE?\xd7\xf9w\xeb\x12\xd2_\x92G\x99\x07\x99\x81\x08\x08#\xed\n\x90\x10\xc2\xa3\xbdp\x9e\xa5{\xcbB\x9c\x17\xc5\xbaek\x07\xf0qd*\xdd\xf3\x89\xad0\x1cG\xf1\xce\x8d\xa1x\xe7\xc6/\x13\x1b\xda\xb2\xc0\x16\x15\xb9\xcd\xcae\xcd\x1bu\xd9[\xddH\xaa\n\xe2*\x85\xcde\x85\x93\x1b\xe1\x11\x13\x96\x93>\x01\x12\xa5\x93\xa0\xa72\x90\xf42\x07\xe9\xd8\xd9\x8c\xb6d\x96\x91[\xd1\x18\xb3\\\xd2\x98\xd8)\x0b\x10v\x02\xd2\xb3\xb5\n\x9fX\xd7\xff\x8f\xd4\xf3TUV\x15\xec\x84\x95i\x10\x8f\xf8bO{\x01\xdan\xa8'\xd0\xa0\x17\x1c\xa6\xa2K-\xc1\xc6\x8d\xd1\x1c\x08\x01\xc0\x9a\xfc&\xc9\x1b\xb9\x95\xb3\xe2Z5\xd9\xd9\x99\xe2,_V\x80#$bjx!\xba\xc6E\x7f\xdck\xd6\xfb(\xdd\x8b\x1f\xdf\x07i\xa9\xee\xd7gG\x17\xb0\x94z\xfb\xb3\x8b\xff=>\x1b\xf0\xd9\xb7\xa3\xe3\xef\xd1\xcf\x0c\x9d<\x94\xcea\xda\xd83\x1adR\xbc\x1f[\x1a\x18-\x0b\xbb\xcd\xaa\xef\xe9\x99E\xdf\x9d\xd26\xf3\xd8;K\x85\x11c7\xf1\xfe\xe4\xba\xdb\xd4\x90!\xd9rh\x0f\xc9\xde\x19Cj\x92\xf6\x92\xb2\xa8\xb3Ty\x1f\xf8\xe07\x19\xbf\xb5HE\xd7\xadyV\xf3\xb6\xafR\x1f\x95\x15JI\x8eW$\x05&&z\x90d\x8b\xaf\x8d${\xe7\xe5Ks\xa1\xe8\xc4\x9c\xc9\x0c_\x00\xbaz\xa0BO\x1c\xaaN\x85|\"E\x82\x17\xf52\xd7(I\xb9\xc5O\xb1\x10?\"j,\x0f@N2\x0cG\x81\xc3\xeb\xfa7\xd4\xf4\x96\xe7\xbd6\xcb\xa9b\x99l\x8a\xac\xc4ud\x96\xd8O\xc5AF}\xd0\x14)\xce`\xa6\xc3\xf3\xa8\xac\xd4\xc6R1\xb0\xb9\xcb\x00\xe8\xd9\xdaY\x84\xc9YhI^\x1ey\xc0\xc5g\xfbH_\x89\x94Sn\xb9\xf2)\xc7\x94\xe2d&Fk\xba\x06\x96\x15O\x88\xf2\xc2\xb2w\x8c\\\xc7\xfc\xec\x1eM\xd7\xb6X\xac\x1b0\x8a\xfdPH\x87\x86|-s\x9c\xdc$k\xc7\xd5(\xe1I6\xb4H\\\x92\x11\x7f\xe4\x05h-\x81\x0d\xc7!\x81|x\x1b\xdc(z|oh\x91\x9c\xd0h\xb8P3\x0d\xdb\x1c'\xd4\xc6rx\x80\x90\x86\x04a ,\x1cq\x1b\xd82F\x90j\xb3l\x80\xec\x11\xce\x82\xa8or\x1b\xf8c\xa0\xaa\x18$\xbd~\xfc\xd5F8\xf4\x04qP\xc6\xc8\xb1\x00\xa81v\xca3\xcc\x81\x00P\x05\xd2\x12\x08\xa8)\xd0K\n\x84|\x1e\x81\xba\xe8\xe9\xe0%\x05b\x10\xaf\xc6\xd0.\x08\xbd\xa4@\xc0)\x1fy\x91\x0c\xa3|\xcdHR\xd4'\x05B\xca\xe51\x13 \x1c \xc7K\x7f\x90\xf6\xf5c&?\xd8\xf4\x8c`Y\x00E\x07\x94\xdf\xa8\x83c\xe4t\x12\xde\x07\xfd\xd2\x1eZ\x93\x1dWI\xdb\xc2\xa3\xb5\x15\x91\x0d\x0e\xcc\xa1\x8dD\xado\x9e[\x9bJv\x18\xc8\xc5\xe7r\x04r\xe0\xeb8\x07\x05!\x8d\xc0\xb0\x98>\x07\xb2i(\xfd\xa3hr(\xdd\x9d<\x8a1\xcfHN\xe0\xde\xb3\x12\x08\x14\x17\xb8(K\xfdg\xa6(\xc9 M\x87\x80\xda\x0e\xf5L\xf7C\xf0\xf5\x83\xe0[\x0d\xf5\x9c\x18\xd4#\xfd\x0f\x0c\xa8\xaf.D\xc3\xd2\x00\xd1\xd6r0\xa6#\xa3\x00i\xaf\x84.\x04K\x83z\xa6\xbc\x1c\xa6A\xbb\xa0\x1cZ\xb4'\x84~s\x10S\x1e\xa8\x1f\xcb\xd7\xe3cT\x95D\xe1\xf5N\xb2D\xbdS\x0d\xd1crd\x84\xc3\"`\xa9\x0eM=\x14\xd7\xc2\xfe\xccCy\x9c{\xb4\xc4C1^ \xefP\xff`\xcd\xb4C\xfe\x97\xee\"i\xdd&\xf1_\x89 \xbc\xa4\\\xac\x1a\x1bO\xfc\xc1Nnb\x7f\xaa\xf5\xb5u\x97\xfa\xa0\x11\x10V\xfdaOit-\xc7\xf9\x8e\x8cAP\x82\x0bD2^\xb3{B\x10\xe6\xcbv\x07\x917\xd7\xbeM\xf8y\xff\xf3\xef\x9f&\xf8\xdd\xee\xc1\xf4\xfd\xc1\xee\x87\x83\xcfx\xf7\xd3G\xfc\xfb\xee\x94$x\x7f\xf2\xf6`\xff\x1dy+\x8a\xbc+\x99\x90\xf8\xbb\xcfI5.\x07\x0c\xe1\xba\xff\xeb\xe1\x9a\xbc}\xc0\x0ft\xf9\xf1\x80\xde\x1f\xdc\x1f\xe4\xf9\xed\xc1}\xf2\xf9\x81\xd6\xbf\xee\xf3\x9b;\x92\xbb0\x8e\x17\xa0\x1a\x8b\xa1\xadrS\x0d\xf9v-\xba\x08\xa9\xe2\xc7\xfb\xbf\xee\xbd\xc4~\xae\x7f\xe5\xc9\xec}}\x7fW|\xf8\xf0\xf3\xe0\xed\xcf\x87k\xfa\xa9\xaag\xb7\xbfV\xd3\xeagR\xb9\xb8\x10\xbd\x8c\x19\x89 \xad\xab\x17\xcd\x03%Y,\x16\x84@\xec\xffz\xe7e\xc0\xdd\x87w\xe9\xafw?\xd3\xdby\x8a\x1f\x96w\x0f N\xd3\xd9\xec\xd3\xf5|\xf9~\x9e<\x90\xf7.\xc82\xbbE\x95\xb5\xf2\x98\xdc\x82\x0b\xa1\x8a\xf7\xdaF \xfc\x06\xc6\xaa6F\x82_\xd3\x1c_s\x89\xaa\xeb\xe8\x97\xea\x97\x01\xed\xa1aX\xf7\x17\xfa\xe0R/\xca\xa2v\xc63($\xa4\xa0\xdd\x1e\xae\x98\xaaa S\x14\x88\xbe/\xdd\xda\xfe\xda!\xe1\x01\xc2Co\xae\xf8\xba\xbb\x8a\x1e\x0e\xc7\xe6C\xb3QmU\xc5f_\x94eo\x11\x14\\\x9b\x86\xef\xe5\x82\xe2\"\xc5Uj\xaa\x17\xa9\xefD'\xfb9\xaen\x1caZ\xcd\xa3~\x1d\xda\x0el\xc2\xea\xe5bQVV\xa1O\x8e9\xdf\x11\xa2\xd2W\x95M\x96\x94\xa09^\xf1\x1b\x93\x00\xc0 a\xd2\xbd\xb8&)\x9a\x08\x7f\xbb\xd4 M1\xb7\xb2H\x98\xdd\xc2\xe4\\M\x1ci\x07\xe2\x91N\xa2+.s\xaf\xaa2\xcf\x97\x8b\xd8\xb4\xc6$;T\x03\xc0\xe7\xff/\xa9\x1ep\x9ek\x11`\xe7:\xf0\xeb\x0eZ#G\xbcI\xfbQ\xd7nJ\xa8Z\x80^\xd5J\xb4N3\x92\xa7\x81\x9e\xffj\xda\xf2\xbaD\xa4\xc0\x93\\\x9c\xf9\x99HV\xba\xea\xef\xdcU-\x10\x14PCk\xa4\xd0\xfd\xa3\x14\x8d\xeeI\x83\xb1MDU\xf2n\x03\x84\x97K.K\xc3\xa5/,i\x94\x94yN\xb8\xe1\xc4\xd0\xee\xc6\xa6\x98\x0f#\x80\xaf\xb6\xb2 \xfa\xda%\x80\xa8r\xc0\x06\x82\x83a\x94X\x80\x1a\xef^\xac\xf4\x9b\xdfc\xd3(#\xe7\x0f\xa2\x8e\xb4\xb8\x0b\xed1\x9d\xcf\x16\x13\xcd\x9bl:\xb8b\x8f\xe6x,\x0dt\xc3T\xc429\x1b\x8a\x02\xb9p\x1a\x98\xf8G8\x0dnC\x04\x05\x85\x9b\x03A\x14*\x9c\x13\xf3k\x83\xf8\x81\x83\xf9\x91 6\xf4\xa5\x10\xc7\xb2 \xc7\xa2m\x84)\xeeK\xdbZ\xf9\x8c\x8e\x05\xe0\x17\xa8\xf1\x02\x010\xdc\xbb\xd0\"\xa2\xd5\x03\xa7[\xec\xc6q1\xb3aA\x1bM\xf8\x07\xcd\xf9F\xb6u$\xab?xm\x84\xda\xb7T0\xb9\x0d\xcd\xe1\x7fr\xa6@\xc4;\x14\x16\x8c%\xc6\xffF\x10\x12\x1b\xe5M\x0bU[#\xe8\xd7\x01pN5 \xe7\xd6\x13(\x08X\xae\xfc\xf8\x0bc\x84\xa50\x88\xd4\x11\x94\x86g\xb5\xb4\x89V\xa7\xa2.\x95!\xaf\xc7\xa6\xb2\x80$6>\x96G\xd5B|\x04\x84\x9e\xa2\x9b*\x02\xea)\x17\xcf\xb81\x12\x03\xa2$z2\x12\x16)\xb1F\xac\xc4\xf0h\x89\xa1\xf1\x12C#&\x06\xc7L\x0c\x8a\x9a\x18\x1c710rbx\xec\xc4\xf0\xe8\x89\x81\xf1\x13\xebFP\xf4\x93\xf0\xe2\xf1FQ\x00\xbeu\x7f94\x8e\xe2\xd1\")\x1e;\x96\xe21\xa2)\xb6&\x9e\xe2I\"*\x9e(\xa6b\xab\xa2*\x9eG\\\xc5\x16FV\xf3\xa2_\xde3\xc2\x1a\xbbI\xf3~\x87\xe1\x97%8\xcfWMK\x7f\xef\x87\xf2\xa3\x11\xc8\xdd\xc0\x19X\x1dXD\x02uFrq)\xcf423\x01\x92<#Es\x1e\xe6\x11\x13Ax\xdd%\x1a=\x04\xe3e\x9a\x05\xb9\xd3\x87\x9e/\xfc\xf8\x9d\xa2\xc9j\x07-\x17\xa9\xfe7\xcd\xe6\xa4\xa6x\xbe\xa8w\xb4\xfbLT\x0f\x0c\xb7\xdc\x14Y[\xb9l\n7-\xfdd\x80O\xd8\xd0\xf3\xb5\xf0$\xa4W\x8c\x88\x98\xe0\x04. d,\"\x06v\x97\xb1%\x06Z\xec1\x19\xc7D\xf6\xd8'L\x82\xcaX\x01R\xd0j\xc5[\xc1I|A4MV#R\x04\x93\x02\x08uZ\xf2\x9b~\x05a\xa2\xc8\xd5\x13\x15pH\x07\x94\x05\x7f&W\xe0\xb3\x99\xc2\x1c\xd7T!\x0d\"lK\xe7\x91\x87\xe5e#N\xa4\x14\x190b}\x05\xad\xec\xc7(o\xf5\xf1C\x0c.\x983\xcc\xb6\x96\xb6KK\xce \xce\xf0Z\xe7I\xc5\xad\x7f\x80\xbf\x89\xcbp\x82\x93\x99\x9c\xf1\xe0\x07\xde\xa2\\\xf6\xb3\x91\x15a\xd2-\xf1pD\xf6\xc56\x8a\x14PYY\xec z\x11\xb9\x0d\x1f\x93`\x18\x1e1\x15\xf7\x8di\xd7\x1a%x!\xacLg\xd4\x0e\xdb\x81APz\x9d\x97h\x8eo\x88\\\xea*w\x8f\xa9+\xb9\xb1\xc9\n\xdd\x91*2c8\xf5\xfd\x00\xaat/T2\xb6\x8a\xaf2l)m]\xe0k\x9c\x1555N3^x\xb6\xeb\x9d}\x85\x8b\x84\x04\xa2\xcf.\x0d\xb7+/$0\xc3\xb7\xc4\x18Ir\x98\xc7\x94Qu$\xcd\x88_,d\xc5m\x99\xdf\xdaU\x08\xda\xcf\xc9);y\xff%9]\x11\x99\xd1-B\xc1\xce\xadHc\x84e\x04\x9aU\xcc\xa2\xfd4\xf1hX\xb1T$\x8f_\x98\xe5.\xe6\xe5\xad\xaf\xe1os\xc93J\x13\xa0\x16\xb8a\x11\x11\xce\x98\x88\xb09\x08\xb0\xa1 \xf6\xd3\xe3_y\xb5\x03\xb7\xacJ\x14\xee\x80\x079\xb3\x91P\x06k.b\x91\x0c\x1b\xa5)\"\xe4:h\x0e\x0dg0A\x81\xb8\x02 v\xda\x12\xcet\x83\xa4\x8c7\xc0\xce\x0c\xd4\xaat\x02\xe3\x90\xfc\xe7\xf3\xe0\x91\x81l\xe3\x900\xdeI>\x05\xe1\x95\xed2@q>\x85\x03=\xc0\xcc\x19B\xf5\x08\xb1\x1e\xfdv\xcdH\x0ba\x08\xadk\x05{x\x17J\x80d\x15T8f'!\x0b(\x1a\xbb\xdb*d&A\xba\x12\x01\xf5%B\x90Pm\xf1\x00\x97\x06\x82\xcb \xb4\x99\xe0m\xf1\xe8\x99\x8a\xebN\xf48\xd4\x01\x8e3-\xa4\x87kR\x13\x18\x90O0m\x8a\xb6\x8fWc\xe8V\x84^\xda\xad\xc2)\x1fy\x91\x0c\xa3|M}\x82\xdcK\xc8M~\xa7\xd5\xce\x18g-'\xd0\xf1N\\\xee\xa8\xb6\x0d\x1f\xc0\xda4\x8d`k\x00E\x08\x94\xeb\xa8G\xcb\xb9\xf8\x85\x16\xea\xb8.\xa2\xca\xa93\xedq\x05\xb5=\x9cZ[1\xb5\x01\xf6\xe0S\xd2\xab\x9b\xd7\x16\xf1\xac\x8b8\x02\xb4\x90s|\xd5\x8ah\x1f\xca\xcb\x98\xe2\x02\xb2n8O J+\x08n\x1d\xeaGZ8\xc3\xa9_Sq\x01\x96\x97\x8b\x15\x10|\xa5\xd3\xd1\xdf\xf7M\xfb\xae6\xd0\xf8M\xc2\x0e4yS\xa3{Z\xa9\xc9\xec\xdd\xee\xdc\x8a\x19}\xdc\x10\x7f\x81\x8co\x9d\x8d\xa4m\x1f=\x9cb\xaf\x99\xd5&\x1eZ\x96[E\xe8O^\x87@f\x97\x07a\xc9\x10|Gm\x8c\xa3\xbc.\xd1MQ\xde\x15\xbcr-\xfa\xc6,\x98`\x9c\xc5S\xf8|a\x1ck2\x0c\xd4\xcaU\x17\x16*\xb5\xa0\x95>\x10\x91y\x9a\xd7\xe85/y\x99\xd1\x19\x9af9%\x15I\xd1\xcd\xadR\xcd\x94T\x98\x96\x95?>L\x06\x9f\x07\xd9\x05\"P\x02R\x82\xc22Y\x15eb\xaa\x83\xb5\x1cPS8\xd9\xbaF*y@^9\x9d\xca\xd07\xbb\xaf\"\x94Y\xd1E1\x9a'\x05\x98\x17\x01\\\x8a\x08<\x0d\x08u\xae\xc6;Q\x8c|:\xd4\x96\x8dB\x93\x13\x1b\xfc\xdd\x0c\xd7\xb3\xf1I\xa5\xb2\xc5:'\xa20\x8a\xb6\xa8\xb5\x16\xcd\x97\x88 E4\x08/\xc0\x14`\x11q\xe6\xb8~\xd6\xc8\xbff\x03\xf3\x9a\xd3\xe1\xf0#\xf6\xe8\x083\xde\xbb\xc0\x9e\xcd\xa4\x9c\xcf\xcb\x82\x8f\x17\x0e\x03\x15\x0d\xc5\x9e\x84\x1dbh\x11a\xa6\xc8h\xae;i \xb9\x15V\x8f\xae\\\x8d^\x0b\xb0\xbf5\xb7\xac\x9cO{\x9a5\xc1\xebV\xf50\xd1\x9b\x15\xb7\xe5M`-e\xc5bI\x9fm\x8e\x16d\x17\xf4\x9ax\x98\x05i?'l\xdaEu\"U\xf2\x9cM|\x9e\x157h\x82\x93\x1bYT\x1e\x00\x89\x87\x19\xf0l\x0b\xbeh\xc2N*]\xcd?\xee\xa5\xea\xc9\x02\xa0y \x1e\xf8Vq\x88o\xa9\xe8\x9b\xb0\xefo\xa0\\\x89\xaf5\xc5\x93<\xabg$U\xf1\x08\xb18q\x88\x1c\xef\xc9\xa6\xbe\x94\xbb\x05~F\x12\x9eK`X\x15\x00x\x8cQ\xe8\xac*\x17e\x0d\xe7\x81\x16\xcb\x9ba\x04o\xa2\xb9P8M\xb9S\x8eV\xcb\x84\x07\x04q\x1bi\x8e\xabz\x16\x89;G\xa8\xa6\x98.\xa3[\xbf\x1f\xff\x8fu\xbaJ6\x15f\x13\x17|\\D\xaae\xa8\x90\x06M\x80\xce\xa4\xf8\xc9\xbb\x84\xc80w6\xc5\xfc\xa2k\xb1\x8c\x8b\xe7^<\x86\xa7;\x9e\x7f\xfdrz\xfe\xc7\xd5\xf1\xc9\xd9\x8f\xcb\xab\x8b\xcb\xa3\xcb\x1f\x17\xbdR\xd0|0\xce\xceO\xcfN/\xd6\x00 \xdeE?\xd7)t\xeb\x12\xd2_\x92G\x99\x07\x99\x81\x08\x08#s\n\x90\xd3\xc1\x03\xb6p\x9e\xa5{\xcbB\x9c\x17\xc5\xbaek\x07\xf0qd*\xdd\xf3\x89\xad0\x1cG\xf1\xce\x8d\xa1x\xe7\xc6/\x13\x1b\xda\xb2\xc0\x16\x15\xb9\xcd\xcae\x9d\xaf:[\xdd\xc8\x8b\n\xe2*\x85\xcde\x85\x93\x1b\xe1\xd4\x12\x96\x93>\x01\x12\xa5\x93\xa0\xa72\x90\xf42\x07\xe9\xd8\xd9\x8c\xb6d\x96\x91[\xd1\x1c\xa5\\\xd2\x98\xd8)\x0b\x10v\x02\xd2\xb3\xb5\n\x9fX\xd7\xff\x8f\xd4\xf3T\x15G\x15\xec\x84UZ\x10\x8f\xf8bO{\x01\xdan\xa8'\xd0\xa0\x17\x1c\xa6\xa2K-\xc1\xc6\x8d\xd1\x1c\x08\x01\xc0\x9a\x14%\xc9\x1b\xb9\x95\xb3\xe2Z5\xdc\xd9\x99\xe2,_V\x80#$bjxA\x8a\x144\x91}f\xbd\x8f\xd2\xbd\xf8\xf1}\x90\x96\xea~}vt\x01\xcb\x8a\xb7?\xbb\xf8\xdf\xe3\xb3\x01\x9f};:\xfe\x1e\xfd\xcc\xd0\xc9C\xe9\x1c\xa6\x8d=\xa3A&\xc5\xfb\xb1\xa5\x81\xd1\xb2\xa8I\xdcV\xe3\x17\x12}\x12\xe1\xbbS\xdaf\x1e{g\xa90b\xec&\xa6A\x9b\xceSC\x86d\xcb\xa1=${g\x0c\xa9I\xdaK\xca\xa2\xceR\xe5}\xe0\x83\xdfd\xfc6\"\x15M\xb8\xe6Y]\xb3\xcd)\xf5QY\xa1\x94\xe4xER`n\xa1\x07I\xb6\xf8\xdaH\xb2w^\xbe4w\x82N\xcc\x99\xcc\xf0\xc5\x90\xab\x07*\xf4\xc4\xa1\xeaT\xc8'R$xQ/s\x8d\x92\x94[\xfc\x14\x0b\xf1#\xa2\xc6\xf2\x00\xa4\x15\xc3p\x148\xbc\xae\x7fCM\xfb\xfdeN\xb9\x90\x96,\xe3\xbd\x08\x1bq\x1d\x99%\xf6Sq\x90Q\x1f4u\x863\x98\xe9\xf0<\x8a#\xb5\xb1T\x0cl\xee2\x00z\xb6v\xd6Qr\xd6JR\xbd\xfa\xdc\x80\xe2\xb3}\xa4\xafD\xca)\xb7\\\xf9\x94cJq2\x13\xa3\xe9TT\xb67 N\xfc\x95\xb1\xed\x1d#\xd71?\xbbG3\xae-\x16K\x8c$\xe7\xcaB:4\xe4k\x99\xa6\xe4&Y;\xaeF\x890\xb2\xa1EB\x8b\x8c\x10\"/@k l8\x94\x08\xe4\xc3\xdb\xe0F\xd1\xe3{\xa3\x83\xe4\x84F#~\x9ai\xd8\xe6P\x9f6\x96\xc3c|4$\x08K`\x11\x85\xdb\xc0\x961\xe2L\x9be\x03d\x8fp\x16D}\x93\xdb\xc0\x1f\x03U\xc5 \xe9\xf5\xe3\xaf6\xc2\xa1'\x08e2F\x8e\xc50\x8d\xb1S\x9ea\x1a\x03\x80*\x90\x96@@M\x81^\xb2\x18\xe4\xf3\x08\xd4EO\x07/Y\x0c\x83x5\x86vA\xe8%\x8b\x01N\xf9\xc8\x8bd\x18\xe5k\x06\x83\xa2>Y\x0cR.\x8f\x99\xc3\xe0\x009^\x06\x83\xb4\xaf\x1f3\x7f\xc1\xa6g\x04\xcb\x02(:\xa0\xfcF\x1d\x1c#\xa7\x93\xf0>\xe8\x97\xb9\xd0\x9a\xec\xb8J\xda\x16\x1e\xad\xad\x88lp`\x0em$\xf0|\xf3\xdc\xdaT\xbe\xc2@.>\x97#\x90\x03_\xc79(\x08i\x04\x86\xc5\xf49\x90MC\xe9\x1fE\x93C\xe9\xee\xa4B\x8cyFr\x02\xf7\x9e\x95@\xa0\xb8\xc0EY\xea?3EI\x06i:\x04\xd4v\xa8g\xc6\x1e\x82\xaf\x1f\x04\xdfj\xa8\xe7\xc4\xa0\x1e\x19|`@}u!\x1a\x96\xc9\x87\xb6\x96\x831\x1d\x19\x05H{\xe5d!X&\xd33\xe5\xe50\x0d\xda\x05\xe5\xd0\xa2=!\xf4\x9b\x83\x98\xf2@\xfdX\xbe\x1e\x1f\xa3\xaa$\n\xafw\x9e$\xea\x9d-\x88\x1e\x93##\x1c\x16\x01Kuh\xf6\xa0\xb8\x16\xf6'\x0f\xca\xe3\xdc&r\x07\x9d\x18\x89\xf1\x02\xf9\x84\xea\x07\x12U\xad\x8ck\x17\x1buz\xe2\xebl\xaa\xfaD\x93\xf4\xb7n\x12\"\xffKw\xc9\xb4\xee\x96\xf8\xafDH^R.V\x8d\xc5'\xfe`\xa7: \xa4|y\x8f\x11\x93 l\x08\x84\xfd\xa6\xd1\x95\x1d\x9f\x05d\x0c\x82\x12\\ \x92\xf1\"\xdc\x13\x820_\xc4;\x88\xbc\xb9\xf6m\xc9\xcf\xfb\x9f\x7f\xff4\xc1\xefv\x0f\xa6\xef\x0fv?\x1c|\xc6\xbb\x9f>\xe2\xdfw\xa7$\xc1\xfb\x93\xb7\x07\xfb\xef\xc8[Q\xb5]I\x88\xc4\xdfNN*u9`\x08\xd7\xfd_\x0f\xd7\xe4\xed\x03~\xa0\xcb\x8f\x07\xf4\xfe\xe0\xfe \xcfo\x0f\xee\x93\xcf\x0f\xb4\xfeu\x9f\xdf\xdc\x91\xdc\x85q,\x15q,v6E\xe6z3\xf4\xe0\xd3\xdb\xf7\xd3O\x93d\xf7\xe3\xdb\x8f\xbf\xef~ \x93\x83\xdd\xcf\x07\xfb\xd3\xddw\xfb\xef\xf6?\xfe\xbe\x9f\xbc#I\x8b\xa1b\xb0\xb5X*@\xec\xff\xba\xf72\xf5s\xfd+Of\xef\xeb\xfb\xbb\xe2\xc3\x87\x9f\x07o\x7f>\\\xd3OU=\xbb\xfd\xb5\x9aV?\x93\xcaG\x0e\xef@\xcc\x98P\x16\xf9\xaaa\x01\xcax\n\x9c\xe1\x88\xc7y]\xfa\xf0\x93\x0d\"\x9c\x82/z\xcf4\xd2\x9c\xb6n\x954\xfb\x95\xd0\xb4\xf8\x1c\x02\xb1\xff\xeb\x9d\x97\xcbw\x1f\xde\xa5\xbf\xde\xfdLo\xe7)~X\xde=$8Mg\xb3O\xd7\xf3\xe5\xfby\xf2@\xde\x07\x18\xe0?}\x8f\xcb\x00\xf3\xd4,\xb2\xc6,_ -\xd14+\xb8@\x8c\xacL\xae7\ni\xcb\x8a\xf9\x95I\xc6\x8e\x0fdv\x92\xf0\xa0\x86\xc8\x0cu\x1c\xd0\x06f\xe070^X\xe8\x88\xe50\xcd\xf15\xa7I71(\xd5\xcf\x10\x8d\xb4\xd1\x94\xfaM\x86<\xd5\xc4H\xb5W\x87\xcfzQ\x16u\x905RYn\x0fsL\xf5\x1ecOp\xcd\xa9\xb3bO\xc6\x90{\x81G\xd0\xed\xf0\x98\x8ci!\xe4g\x8c\xfc!\xa7\xd0{\xb9\xcbA\xf0\xe0\xa7\x18#\x9a \xf1\x98>\xe8\x91\x19\xd1B\x08\xb2B\xbc9\xd1\x1aF\x81V\xe5\xb2\x926\x98\xcd\x860V\xb2\xa8F}.Y\x88\x9a\x90D\xf1\x7f\xc6\x1a\x19\xc6N\xd0?\x97\xa4Z\xed\xa9o\xd0\xf9\xd9\x97\x168\x91\xff\xda \xa0\x02\x90\x8d\x9fY\xf8\x1c\x15hY\x90\xfb\x05I\x98!)ZW\xa9\xa1\x8do\xeadF\xe6\xd8\x9e;\xafY\xe97)9\xfc\xee\n\x08\xe8\x88\xa4L\x1d\x12W|\xe0\xab\xa8\xae\x96JV\xd0\xf7\xef:\xfc\xf1T#\x0f\xe0\x90\x12\x8a\xb3|K*\x87\xb0\xcf\xaf\x96\x95\xb7iNT\xdf\xf2\x84\xdb\xc1_;\x1d%\x0b\\\xe19\xa1\xa42p\xde\x159\xc6\x865\xea[\x82\xad-\xd1\xdf|\x1dj\xb4j\xb3\xc9\x82\xd65UG7P\xd70K]\xc6hV\x1c\xa2\x05\xa6f\xe4*\x93KYE\xd2CD\xab\xa5\xb9\x91\x9d\x13\xac\xe7J\x0e\x0d\x9d\xa9\x9e\xe7\xb6a\xa7\xb5\xd0!b\xc8i\x8cq\xeb\x17\x13\xa3NvMq^\x83\xf9eX\xe5@\x96\x0d\xb6\xe3\xc7\xb5\xde\xc7\xe7A\xeb\xee\n\xc0\x83\xfe\xa6\xbca\xb4;\xf7D\xd7\x80\x1f\x91N\xcb\xe8\x06R:\xd4P7Lr\x0b\x1e\xdc\n\x1dBx\xd7\xb2\xf2\xd9\\m\x9eHC\xb9'W\xfaX\xe8\x86-\xbe\xd5\x1ci\x19\xd9@\x8e\x0c4\xcd\x1b#\xbc\xcd\x93'\xe4@\xcb\xba\x06r`\x90MnX\xdf\x160\x8f%\xbeI\xfa)\xbe\xb6l\x9f\x7f\xcaq^\xed1\xe1D\n\\$doN(N1\xc5{\xb7\xfb{r\xc9\xee\xfd\xab1w\xfe\xbd'\x16\xf9\xde\xbf\x18'\xff\xfdJ\xc0\xbb&\xdax\xaf\x97\xf39\xaeV\x87\xba\x95HMp\x95\xccd\x9fR\xb9C\x14\xc5>n_6\xb7\xc9L\xdb\xec0\xa3C \xd0\x1dU\x9d-\xa2\x984\xb0\x11\xb4\x12CH\xc3\xe3\xd2o\xb7cQ\x08\xa1hX\x15\xfa\x03\xb8I\xe1\xb2%\xaca!f\x04\xba\xc8\xe6Y\x8e\xab|\xb5\xd3\xe0@\xad\xd2\xecNc\x88\xd7hj\x19\x9d-J\xc602-^F\xf4\xeb\xaa\\\xbe\xaaH3>;LU\xfc\xd2\x02e\x85\xd9\xe4\xe6\xbf\xd0\xf1T\x18\xaa\xb8m\xbe4\xebF\xf6\x814/rx\xd7\x1d\xa3\xd0_E\xe8\xb2*x\x03\x1d\x17h\xd3\xecm\xe0\xe2\x15\xb2\x9do$\xc6\x1f`xL<\x1f\x17\xa1\x1f\xa2\xb6\xeb\xf1\x1fH\x97\xe6\x10\xdb\x1d\xa1\xe3\xf9\"\xe7-\x08kT\xa77o\x8e\"\xd9\xa6RgMq\"\xfc\xa3\xbc\xe8\xa9\x10S\xe2K\"\xf6\x9a\xb2\xf1\xdaf\xa2\xfd|)\xeby\xe9\x1b\xac\x06'g?.3\x1b Sws\xaau\x88E8\xf0\xc3\xfaR\x98\x92\xbc\xf8\nQs\x81\xf3\xbc\xbc\x93jL&\xb3\x87\xc0\x05n\x9ax\x83\xfb@\xc0a\xc8\x9f\xaa\x9ehe\x9c\xe8\x9e\x11O|\xe7\x88\x07o\xaaj+vw*}\xad\xaa\x1c\x84\x8b\xd2Ue\x1e\xadF\x07YA\xe2\xc1\x1c^\xb3#\x152F\x05\xe6D\xd6&\x06\x86\xfa\xc9:\x08\x04P\x91\xb5\x17\xf3`\x95e\xac\xbe\xf6}\x8a\xadX\x1f\x9e\x9e\x1f\xff\xf7\xf1\xc9\xd1\xe5\xe9y\xbf\xef.\xbe\x9e\xffy\xfc\xe5k\xcf\xaf\x8eO\xfe\xfcz\xd1{\xac/?..O\xff8>:\xe9\xf7\xd9\xe9_'}\xf1;\xfa\xf6\xed\xf8\xfb\xf1\xd1\xe5\xd7~\x9f\x9d\xfe\xdf\xc9\xf1?~\xc4\xeb\xf2X\x1f\x9d\x9d\x9f\xfe\xf9\xf5\xe4\xe8\xe4K\xcf\xc1\xbe\x9c\x9e\\\x9e\x9f~\xff\xde\x97\xb6?\x8f\xbe\x1f\xff\x01\x98h]\xceg\xd0\xf2\x8a\xdb*\xf6\xe3[\xc5\x03\x87G\"\xd4M^\xf2\xf5(\xcb\xe3\xd9\x14\x87\xee\xd7r\x14\\\xf3\xc6\xaaUv\x9d\x15\x98B\xaa\x93:\xf7\xd0\xa1\xeb\xa52\xd6k\x94\x92 E5\xa9n\xb3$+\xae\xd1tY$\\\x8d\xf5\x1cM\xed\xbdC\xd7KqZ\xe2\xd1vY\x82\xb2\xe2\x96\xd4\xfd\xe9\xd1\xfb\xf4\xd0\xf9VMMA3\xba\x12\xea[\xd3\x98,kZ\xa6\x19.$\xa1\xd2\xdf\xc3\x19\xdc\x97P\xbe\xef\x0f;o\xda\x15\x01\x17\xb8\xa2+\x89\x13W\xdaJK1\xed\xdbsH-7\x0e\x9do\x05w\xc5\x80\xe2\xa0\\ <\x9dfy\x86)A\xf8\xba\"\xdc\x0c\xe99\xa8\x94:\x87\x8ewb@n\xf5\xe0\\\xdc\xae\xcb\xf6\xbf\xab\xc6n\xaa\xca\\\x10?/\xb2\xc9\xb2F\x13\\\xdc(\xad\xd8\x13\x95F\x96\x1d\xba_3\x84T\xed\x1b5\x0f\xe64TdQ\x91\x9a\x9bbl\n\x9a\xba\x8b\xd2\xb1e\xd7\xfe\xc6\xc9\x80M\xdd\xc8\xcdC\xf7k{}\xde\xcd\xb2df\xf0I\xdb\x90j\xd7\xeb\xb2\xc4\x19A\xa4(i\xa4\x0cy\x17!-\x90\x0f\x9do]\xe8\xf0j\x9f| \x8bJLb\x7f@\x8aF!\xdd$&\xc10\xae\xf8\xcbS\xfb\xe7\xe5\xad\xafGss\xc93J\xdf\xa6\x16\xb8a\x11\x11\xce\x98\x88\xb09\x08\xb0\xa1 \xf6\xd3\xe3_y\xb5\x03\xb7\xacR\x0b\xee\x80\x07\xbb\x1c\x88\xdf\xb24\xe6\"\x16\xc9\xb0Q\x9a\"B\xae\x83\xe6\xd0p\x06d\x15o\x88\xff\x06\x14\xcf\xb6%\x9c\xe9\x06I\x19o\x80\xcd4\xa8U\xca\x03\xc6!\xf9\xcf\xe7\xc1#\x03\xd9\xc6!a\xbc\x93|\n\xc2\xb37\x19\x88O\xe1@\x0f0s\x86P=B\xacG\xbf]3\xd2B\x18B\xebZ\xc1\x1e\xde\x85\x12 Y\x05\x15\x8e\xd9\xfc\xc9\x02\x8a\xc6n\x90\x0b\x99I\x90\xaeD@}\x89\x10$T[<\xc0\xa5\x81\xe0r\x02m&x[\x07\xb2i(\xfd\xa3hr(\xdd\x9d\x8c\x8a1\xcfHN\xe0\xde\xb3\x12\x08\x14\x17\xb8(K\xfdg\xa6(\xc9 M\x87\x80\xda\x0e\xf5L\xfcC\xf0\xf5\x83\xe0[\x0d\xf5\x9c\x18\xd4#\x11\x10\x0c\xa8\xaf.D\xc3\x12\x02\xd1\xd6r0\xa6#\xa3\x00i\xaf\xd4.\x04K\x88z\xa6\xbc\x1c\xa6A\xbb\xa0\x1cZ\xb4'\x84~s\x10S\x1e\xa8\x1f\xcb\xd7\xe3cT\x95D\xe1\xf5N\xb7D\xbd\x93\x0e\xd1crd\x84\xc3\"`\xa9\x0eMB\x14\xd7\xc2\xfe\x1cDy\x9c\xdbD\n\xa2\x00\x1dH6\x94c\xcbk\xe0n\xe6 \xcf)\xec\xcesk\x10\xfe+\x11G\x97\x94\x8bUc\xa6\x89?\xd8\xf9I\x88g3\xfa\x86\x8c\xe8\xf1\xb0\xf6\x8e:\xbf\xa3+\x122\x9f\x1dW7V\xdbP\xcd\xa4P\x92;\x88\xbc\xb9\xf6\xed)\xf1\xd3\xfd_\xef\xae\xc9\xdb\x07\xfc@\x97\x1f\x0f\xe8\xfd\xc1\xfdA\x9e\xdf\x1e\xdc'\x9f\x1fh}\xf7\xe1]\xfa\xeb\xdd\xcf\xf4v\x9e\xe2\x87\xe5\xddC\x82\xd3t6\xfbt=_\xbe\x9f'\x0f\xe4\xbd\x0br\xd8\xdb;\x12\xf5\xda\x8f\x9b\xe0\x02\x91\x8cW \x9f\x10\x84\xf9\xd6\x0b\x12\xfdy\xff\xf3\xef\x9f&\xf8\xdd\xee\xc1\xf4\xfd\xc1\xee\x87\x83\xcfx\xf7\xd3G\xfc\xfb\xee\x94$x\x7f\xf2\xf6`\xff\x1dy+J\xd6+\xb9\x96\xf8{\xe9\xd9\\\x0e\xe1\xba\xff\xeb\xc1\xcb\xe5_\xf7\xf9\xcd\x1d\xc9\x9d\xcc\x8c$P\x8e\xc5\xce\xa6\xc2^o\x86\x1e|z\xfb~\xfai\x92\xec~|\xfb\xf1\xf7\xdd\x0fdr\xb0\xfb\xf9`\x7f\xba\xfbn\xff\xdd\xfe\xc7\xdf\xf7\x93w$i1T\x0c\xb6\x16K\x05\x88\xfd_\xf7^\xa6~\xae\x7f\xe5\xc9\xec}}\x7fW|\xf8\xf0\xf3\xe0\xed\xcf\x87k\xfa\xa9\xaag\xb7\xbfV\xd3\xeagR\xf9\xc8\xe1\xed\x97\x19\x13\xca\"_5,@\x19O\xdc3\xae\x0fp^\x97>\xfcdw\x0c\xa7\xb8\xf6\x9f\x95\xa3\x93)C.\xcc\xd3\xab\xc8\xde\xb2|r\xb4DyY\xde0\xe9\xec\x80\"\x93}\x84C2\x84G\xa8\x0f\x80\xb6\xd7\x02\xbf\x81\xad<\x0b\x1d!\xc8\xa69\xbe\xe6\xaaE\xb7\x16(\xd5\xcf8\x99~U*\x80H\xed&\xa3\x88j\xd2h u\x9c\xab\x17eQ;\xa3<4:2\x01~\x8b\x18d&\xed\xc7x\x14\xde6\xf5Z,\"\xf7\x02\xa1\xe0\x91\xfe19\xd4B\xc8\xcf \xf9CN\xa1\xf7\xe2\x94\x83\xe0\x81E1F\xa8\x99\xf1Z(\xe8\x91\x19\xd1B\x08\xb2R\xbc\xf9\xc6\x1aF\x81V\xe5\xb2\x92\xa6\x92\xcd\x860V2\xbd\xeb\\r\x105\xd1~\xe2\xff\x8c32B\x9c\xa0\x7f.I\xb5\xdaS\xc5~\xcf\xcf\xbe\xb4\x80\x89\xcc\xd2fx\x15\xdak\xfc\xcc\xc2\xe6\xa8@\xcb\x82\xdc/H\xc2\xac=\xd1[J\x8dl|S'32\xc7\xf6\xccym?\xbf\xdd\xc7\xe1w\xe7? \xcf\x932u\x08_\xf1\x81\xaf\xe4\xb9Z(YA\xdf\xbf\xeb\xf0\xc7S.<\x80CJ(\xce\xf2-\xa9\xc9\xc1>\xbfZV\xde\xae6Q\xdd\xc8SY\x07\x7f\xedtA,p\x85\xe7\x84\x92\xca\xc0yW\xe8o\xc3b\xf2-\xc1\xd6\x86\xe8ob\x0d5\xac\xb4 eA\xeb\x9aS\xa3\x1bQk\x98N.\x83)+\x0e\xd1\x02S3&\x94I\xa5\xac\"\xe9!\xa2\xd5\xd2\xdc\xc8\xce Vs\xd5r\xed[\xb34\xc8\x96\x1a\x0d3\xe3\x10\x07\\F\x83\x8f}\xe3\x1e\xf6\x18\x07~1\x99\xedd\xc1\x14\xe75\x98\x07ja\x00\x19\xd0\xf7\xe47\xec\xbc\x17:\x86\x0c9\xcf\x8d\xc8/\xcbb\x062m\x98\x95\xed8\xfa\x0e1\x1c\x87\xd0\xde5\x86|fR\x87-\xd2\xc6\xed\xcb\x99>\xe65r\x0c\xb2\xcd\xbciY\xc8@\xd6\x0c\xb4\xab\x1b\x0b\xda\x82\xf6\xb4\x1ch\x99\xc6@\x0e\x0c2\xa8\x0d\xd3\xd9\x02\xe61\xa37I?\xc5\xd7\x96\xe9\xf2O9\xce\xab=\xa6oI\x81\x8b\x84\xec\xcd \xc5)\xa6x\xefv\x7fO\xae\xeb\xbd\x7f5\xd6\xca\xbf\xf7\xe42~% ]\x13mu\xd7\xcb\xf9\x1cW\xabC\xdd\xa4\xa3&\xb8Jf\xb2\x03\xa8\xfcL\xd1\xea\xe3\xf3es\xc1\xcad\xee\x0e\xb3\x16\x945\xb0\xa3\n\x96E\xf4\x9c\x066\x82\x92c\x08ix\\\x00\xeev\x94\x8d\x10\xa3\x86\xc2\xd1\x1f\xc0\xb5\x8dK\xcdX\xc3B4\x0c\xba\xc8\xe6Y\x8e\xab|\xb5\xd3\xe0@\xad\xa2\xe7N=\xc9\xcb\x16\xb5\xac\xc5\x16%cX\x87\x16/#\x96\xd6\xaa\\\xbe\xaaH3>;\x05U\xbc\x98 \xca\n\xb3}\xcc\x7f\xa1\xe3\xa9\xb00q\xdb\x1aj\xd6\x8d\xec\xb0h\xdem\xf0~6F\xed\xbb\x8a\xd0eU\xf0\xd64.\xd0\xa6\xbd\xda\xc0\xc5yn\x8bu6\x0c\x9f\xc9\xbe\xe0\x9b z\xcd&C\x8e\xb6\xd7\xbc\xff\xcd9Z{~\xd4\xb8\xde\xf1\xb0f\xbc\xa2B7\x13T\x14\xe2\"\xddk\x16\xc4Uf\xf3\xaf\xb5\xb9\\\x03\xea\x9f\x1c\xa1 N\xcd\xcb\x18\xf5#\x94M\x0fM\xc4.\xed5\xca\x05+_\x98\xb8HQQ:\xb9\xff\xa6\x05@v\n\xa2w%[\xce\xbc[P9\xb5e\x89I\x12\xbf\xdb\x92`\xf9\xff\xcc\x0d\xb3BiY\xbc\xa2\x92\xe3S!\xd5\xf9Fb\xcc\xe3\x9fY\xc3\x1fu\xb8\xba\x83&K\x8a\x8a\x92:8\x8b\xad&\x04]0\xa21b\xb3\x94\x19Yz\xb6\xd8\x1f\xf5\x9eIKR3<\xe7\x98&v\x13.\xe3{sF\xfe\xb1R\xbe\x92\x9d\xc6\xa4\x93\x1d\x9c\xa4\xc5#\xda-Q]\x06\xca\xc0\xf0\x82\xd0\x96\xed()\xea\x98M\x8c]\x95\xc8\xba\xb5\x0c%\xcb\x82\xb4\x17\x9aV\x0d\xba\x82\xd8q\xaau\xc9\xc7\xbf)\xb2\x84\xc9`\xe8\xb1W\xef\xde\xbe}\xe5\xf7\xfc\x18\x19\xc8N\x83c$\x9f\x8f\xc7\x7f\x1e\xf7\xd4i\x1b\x9c\xf1G\x17\\MTW+^m\xb5nY\x90\xaf3W\x8c\x87\xbf\xdc\xeaZ7\x98\xd1\x9b\x81@|S\xcc\xcd\x13\xbb\x1eD0g\x0d0b$\x9e\xa2\x8a\xd0\x0fQ\xee\xf4\xf8\x0f\xa4\xabU\x88\xed\x8e\xd0\xf1|\x91\xf3\xe6~5\xaa\xd3\x9b7G\x91\x04L\xa9\xb3\xa68\x11~M^\x07T\x88)\xf1%\x11{MYwm\x03\xd1~\xbe\x94\xf5\xbc\xf4\x0dV\x83\xf3\x95\x1f\x97\x99\x8d\x84\xa9\xbbi\xc6:\xea \x1c\x0ba})LI^\x8f\x84\xa8\xb9\xc0y^\xdeI5&\xf3\xbbC\xe0:g\xd8\xe6\xe1\xad\xe3\x031x!G\xa8z\xa2\xc5b\xa2{F<\xf1\x9d#\x1e\xbc\xa9B\xa6\xd8\xdd\x03\xf4\xb5J\xfc\x0f\xd7i\xab\xca<=?\xfe\xef\xe3\x93\xa3\xcb\xd3\xf3~\xdf]|=\xff\xf3\xf8\xcb\xd7\x9e_\x1d\x9f\xfc\xf9\xf5\xa2\xf7X_~\\\\\x9e\xfeq|t\xd2\xef\xb3\xd3\xbfN\xfa\xe2w\xf4\xed\xdb\xf1\xf7\xe3\xa3\xcb\xaf\xfd>;\xfd\xbf\x93\xe3\x7f\xfc\x88\x97\xaa\xb1>:;?\xfd\xf3\xeb\xc9\xd1\xc9\x97\x9e\x83}9=\xb9n=\xfd\xafjTg\xd7\x05\x16}\xb7k\x8dj\x00\x1e\xcc\xee;Bg\xc6.W\xd6(\xdb\x82{\xbc\x96\xb8\xe0\"\xb3\x0b\x83`\xda%\xde\xa3\xe5\x81\xfa\xe8\xc1K~*\x97M\xaf\x9b\x8d\x80h\xb9@9\xb9%\xb94\x1b\xd5VUl\xf6Eq\xf9\x16A\xc1\xb5i\xf8^.(.R\\\xa5\xa6z\x91\xfaNt\xe6\x9f\xe3\xea\xc6\x11$\xd5<\xea\xd7\xa1\xed\xc0&\xac^.\x16ee\x95+\xe5\x98\xbf\x91\x01-\x98\xd2*\x9b,)As\xbc\xe2\xee\xfb\x00\xc0 a\xd2\xbd\xb8&)\x9a\xac8\x17\xa4NhJ\xd2\x95E\xc2\xec\x16&\xe7j\xe2H\x9e\x10\x8ft\x12]q\x99{U\x95y\xbe\\\xc4\xa65&\xd9\xa1\x1a\x00>\xff\x7fI\xf5\x80\xf3\\\x8b\x00\xb5#\x1aOsFk\xf7\x8d\xb9\xfd\xa8\xbb>%T-@\xafj%Z\xa7\x19\xc9Sod8RqH8\xafKD\n<\xc9\xc5\x99\x9f\x89d\xa5\xab\xfe\xce]\xd5\x02A\x015\xb4F\x1a_\xb9\xa2\xd1=i0\xb6]\xf0Qy\xcf\x04\xc2\x8b>\x97%5*?sK\x1a%e\x9e\x13n85W\x1a>\x1c\x19\x01|\xb5\x95\x05\xd1\x17!\x01D\x95\x036\x10\xbd\x0b\xa3\xc4\x02\xd4x\xf7b\x05\xec\xfc\x1e\x9bF\x199\x7f\x10u\xa4\xc5]h\x8f\xe9|\xb6\x98h\xdeg\xd1\xc1u\x874\xc7c\xc9\xac\x1b\xa6\"\x96\x8f\xdaP\x14\xc8\xe8\xd3\xc0\xc4?\xc2\xc9|\x1b\"((\xdc\x1c\x08\xa2P\xf9\x9f\x98_\x1b\xc4\x8fp\x96'\x88\x0d})\x8c\xe6r\x8eE\xdb\x08S\xdc\x97\xb6\xb5\xb22\x1d\x0b\xc0/P\xe3e\x0e`\xb8w\xa1ED\xab\x07N\xb7d\x8f\xe3bf\xc3\x826Z\xb6\x004\xe7\x1b\xd9\xd6\x91\xda\x04\xc1k#\xd4\xbe\xa5\x82\xc9mh%\x82'g\nD\xbcCa\xc1Xb\xfco\x04!\xb1Q\xde\xb4P\xb55\x82~\x1d\x00\xe7T\x93pn=\x81\x82\x80e\xfc\x8f\xbf0FX\n\x83H\x1dAixVK\x9bh\x7f\x9aa\xc8\xeb\xb1\xa9\x1c\x1c\x89\x8d\x8f\xe5Q\xb5\x10\x1f\x01\xa1xJ\xb3x@\xb3\x0b\xdc\xea\xf0h\x89q\xc7\xed\xb3\xfct\xdf\xdd\xa6\x98\xbb\xa7\xfc\x0d\xa8!\x8b\xab\x9c\xbbd\xbco\xe3!uh\x8c\xb3g;\x1b\xe8D\x9d_\xea\x01\xce\xb1\xfc\xf1\x18\xd1\x11\xb0\xf8\x08\xa8\xa7\\<\xe3\xc6H\x0c\x88\x92\xe8\xc9HX\xa4\xc4\x1a\xb1\x12\xc3\xa3%\x86\xc6K\x0c\x8d\x98\x18\x1c31(jbp\xdc\xc4\xc0\xc8\x89\xe1\xb1\x13\xc3\xa3'\x06\xc6O\xac\x1bA\xd1O\xc2\x8b\xc7\x1bE\x01\xf8\xd6\xfd\xe5\xd08\x8aG\x8b\xa4x\xecX\x8a\xc7\x88\xa6\xd8\x9ax\x8a'\x89\xa8x\xa2\x98\x8a\xad\x8a\xaax\x1eq\x15[\x18Y\xf1\xb4\xb1\x15\xf0\xe8\n\xe8\xbd\x9az\xa0\xf7k\xea\x193\xc6\x02n;\x8e\x14g1(\xd2\x02\x8a\xa5\xbeK\x94\xce\x15\xc2{\x96\x89\xd2s\xfc\x0f2?\xe9\xba\xe0\xb5\xdc\x82\x01\xe0(\x8e\xd6H\xe5\x8ba\xb4\xf1<\x1eZ6\xec3/\xfa\xe5=#\xac=\x9d4\xefw\x18~Y\x82\xf3|%\x1a\xee\x07K\x19\xcb\x8fF w\x03g`u`\x11\x89\xb6\x19\xc9\xc5\xa5<\xd3\xc8\xcc\x04H\xf2\x8c\x14\xcdy\x98GL\x04\xe1u\x97h\xf4\x10\x8c\x97i\x16\xe4N\x1fz\xbe\xf0\xe3w\x8a&\xab\x1d\xb4\\\xa4\xfa\xdf4\x9b\x93\x9a\xe2\xf9\xa2\xde\xd1\xee3Q\x181\xdc8T$\x8a\xe5\xb2\xb5\xdd\xb4\xf4\x93\x01>aC\xcf\xd7\xc2\x93\x90^1\"b\x82\x13\xb8\x80\x90\xb1\x88\x18\xd8]\xc6\x96\x18h\xb1\xc7d\x1c\x13\xd9c\x9f0 *c\x05HA\xab\x15oh'\xf1\x05\xd14Y\x8dH\x11L\n y\xe2\xf6\xf8\x15\x84\x89\"WOT\xc0!\x1dP\x16\xfc\x99\\\x81\xcff\ns\\S\x854\x88\xb0-\x9dG\x1e\x96\x97\x8d8\x91Rd\xc0\x88\xf5\x95\x93\xb2\x1f\xa3\xb8\xd4\xc7\x0f1\xb8`\xce0\xdbZ\xda.-9'8\xc3+\xb6'\x15\xb7\xfe\x01\xfe&.\xc3 Nfr\xc6\x83\x1fxKb\xd9\xcfFV\x84I\xb7\xc4\xc3\x11\xd9\x17\xdb(R@ee\xb1'\xe8E\xe46|L\x82ax\xc4T\xdc7\xa6]k\x94\xe0\x85\xb02\x9dQ;l\x07\x06A\xe9u^\xa29\xbe!r\xa9\xab\xdc=\xa6\xae\xe4\xc6&+tG\xaa\xc8\x8c\xe1\xd4\xf7\x03\xa8\xd2\xbd\x90\x06\x94\x8e\xaf2l)m]\xe0k\x9c\x1555N3^x\xb6\xeb\x9d}\x85\x8b\x84\x04\xa2\xcf.\x0d\xb7+\xcf\x94\x9f\xe1[b\x8c$9\xccc\xca\xa8:\x92f\xc4/\x16\xb2\xe2\xb6\xcco\xed4\xfb\xf6sr\xcaN\xde\x7fIN\xcb\xbc\xf8\xa2\x14\xa1`\xe7V\xa41\xc22\x02\xcd*&\xd0~\x9ax4\xacX*\xd2\xc7\x15\x7fyj\xff\xbc\xbc\xf5\xb5-n.yFie\xd4\x027,\"\xc2\x19\x13\x116\x07\x016\x14\xc4~z\xfc+\xafv\xe0\x96Uj\xc1\x1d\xf0`\x97\x03\xf1[\x96\xc6\\\xc4\"\x196JSD\xc8u\xd0\x1c\x1a\xce\x80\xac\xe2\x0d\xf1\xdf\x80\xe2\xd9\xb6\x843\xdd )\xe3\x0d\xb0\xbf\x04\xb5Jy\xc08$\xff\xf9E\xfd\xfcbmo\xe4\xf6\xd8sI\xe2\xe7\xf1sV\xbe\xcc\x8c6\xbe(\x96\x9c\xdd=9\xf9\xb7\xd9\xdd\xe8\x16#6\xd9C\xb2%k\xb2\xf9\xee\xff\x83\x1bI\x90\xb8\x14@\xb6F\x9eA\xbd\x99\xb1\x9a(\x14\n@U\xa1PUh\xea_\xc3\x03\x8e\xf6a{Y\xcb\xf8\xf4\xb8a\x8d\xf5\xd6V\x02\x15\xbdi~U\\Z\xd6R\x9a\xef\xf6\xf5\x17\x9b\xea\x85\xd9\x05^\x13\x8f1\xfa\xfa\xf0\x8eN;/r$K\xa7\xb3\xf7\xa2\xd2\xfc\x12\x16\xc9\xf2R\x94\x90G`b\xd1\n,i\x83-\x1a\xbb\xaf\xab)\xf5\xeevvy\xb2\x00i\x1ep\xc0o\x15\x8d\xf8\x16\x8a\xbe\x8d\x1e\xff\x1e\x95r\xf1\xba\xaa\x93E\x96V\x17d%\xc3\x1a\\\xe1\xe6\x189\xee\xc9&\xdf\x91\xeb\x05~J\x96,%\xa1cU \xf0QF\xc1iY\xec\x8a\n\xcf\x83F,\x1f\x86\x11\xec\xb1\xcc\x9d\xa4i\xcd|{u\xb9_\xb2\xb8\"f#m\x93\xb2\xbap\x84\xaf\x03TuR\xef\x9d[\xdf\x8f\xff'M\xd6K\xba\xe6f\x13\x13|LD\xcae(\x89FM@\x93\x90\xf1\x8f=\x8b \xe2\xd1\xf2t\x8a\xd9}\xd9n\xef\x16\xcf^<\xc6gM~x\xfd\xf2\xfd\x87W\xf3\x93w\xa7\x1f\xcf\xe7g\xe7\xc7\xe7\x1f\xcf\xbc2\xd9L8N?\xbc?}\x7f6\x02\x01\xff\x9b\xb3y\x93\x897v \xfe\x92\xdc\xc9<\xcc\x0c8Pt\x12\xb0\x10\xa9!,\xee+\xc9\xd2\xd5\xe3}\xce\xcf\x8b|\xdd\xd2\xb5\x83h\xec\x98J=\x8f\xe5\xaf\xfdT\xb1\xce\x8e\xc9!)\x17i]&\xe5M+\xc1X\xdd\xc2\xe6\xcc\xc7\xb7B8\x8d\xfcoz\n\xf9\xdf\xf4\xf4\xa5|C+\x16\xd8\xae$Wi\xb1\xaf\xb2\x9b\xc1V\xef\xa4WYi\x15\xc2\xe6\xbcL\x96\x97\xdc7\xc6-\xa7\xe6\x04H\xa4N\xc2\x9e\xcaP\xd2\xab\xdb\xc9\xc0\xce\xa6c[^\xa4\xe4\x8a\xbf\xb1R\xeck\x97\xd8)r\x14u\x1c\xd3\x17k\x15\xfe\xc2\xba\xfeG\xa1\xe7kYc\x95\xb3\x13W\xb0\x81\x03o\xf1\xb8\xf1\x02\xf4\xddP\xbf\x80\x06=c8\xe5\xb8\xe4\x12l\xdd\x18\xed\x81\x10\x81\xac\xcdt\x12\xbc\x11[9\xcd7\xf2\xd9\x9e\xa3u\x92f\xfb\x12q\x84\x04\xaa\x86w$_\xa1&\xd2g\xd6}\x94\xee\xd9\xc77AZj\xd8\xfa\xf4\xf8\x0c\x97\\\xaf6;\xfb\xf3\xc9i@\xb3\xef\x8fO\xde8\x9butr\xe88\xc3\xb4\xb1\xa17\xcc\xa4\x18\x1b+\x1a\x18\xf6yE\xdc\xb6\x1a\xbb\xd7\xf0\xc9\xa7\x1fNi\x9fy\xf4o\x8a\n#\x9d\xddD5h\xfb~UH\x97t9\xf4\xbb\xa4\x7f\xebt\xd9\x0c\xe9\xf1\xb2\xc8\xabt%\xbd\x0f\xac\xf3\xcb\x94\xdd_\xac\xf8[^\xdb\xb4\xaa\xe8\xe6\x14\xfa\xa8(aE\xb2\xe4\x86\xac\x90)\x8a\x06\"\xe9\xe2\xeb\x13I\xfff\xe4K{\xb5\xa8\xa5\x9c\xca\x0cS(\xba\x04\xac\xd0\xe3\x87\xaa\xf7\\>\x91|\x99\xec\xaa}\xd6\x90$\xe4\x16;\xc5b\xfc\x88\xd0Z\x1e\x88\xecd\x1c\x8d\x9c\x86\x07\xd5Ch\xdf\xd4\xdfg5\x13\xd2\x82e\xfc\x0d\xdaF\\;f\x89~\xca\x0f2\xb2A[\xae8\xc5\x99\x0e_F\x8d\xa5>\x95\x92\x81\xed]\x06B\xcfV\xdarL\xda\x92K\xe2\xf2\xc8\x80\xce=\xdb\xc7\xcd\x95H\xb1f\x96+\x9b\xf2\xa4\xae\x93\xe5\x05\xef\xad\xc9h\xa5{\x93$Ks\x81mu\xc7\x88u\xcc\xce\xee\xce\xc4m\x85\xc5\x82\"\xc1\xb9\"\x17\x0e\x0d\xf1g\x91\xed\xa4\x1fr\xe3\xb8\x9a$PI\xc5\xe6\x88P\xeaD\"\x19\x11*K\xe0\xc0\x11I(\x1f\xde\x017J\xd3\xbf1\xc8HL\xa83p\xa8\x9d\x86\xbb\x1c1\xd4\xa72G\xb2)t\xfc\x93hr\xec\xb8\x07\x19\x15S\x9e\x91\xb4\xc8\x8dg%\x14*&p!]\x99\xcfL\xce!\xa34\x1d \xb5\x1dx&\xfe\x01~\xfd\x00~\xab\x81\xe7\xc4\x80G\" \x1a\x91\xaf.\x84\xb0\x84@\xb8\xb3\x1ct\xe9H'\xc2\xda+\xb5\x0bp Q_(/\xc34\xe8\x10\x95F\x8bzb\xf0\x9b\x03\x97\xf2\x00?\x96\x8f\xe3\xa3S\x958\xf1y\xa7[\x82w\xd2!\xdc&G&8,\"\x96jh\x12\"\xbf\x166\xe7 \x8a\xe3\xdc!R\x109jK\xb2\xa1\xe8[\\\x03\x0f3\x07YN\xe1p\x9e{\x9d\xb0\xafx\x1c\xdd\xb2\xd8\xdd\xb4f\x1a\xffA\xcdO\x02\x96\xcdh\xea\xd2\xa1\xc7\xed\xda\xdb\xe9\xfcv\xaeH\xcc|\x0e\\\xdd\x89\xdc\x86r&\xb9\x92<\x022\xdb\x98\xf6\x14\xff\xf4\xc9OO7\xe4\xab\x9f\x93\x9f\xeb\xfdw\xdf\xd6\x9f\xbf\xfd\xfcm\x96]}\xfby\xf9\xa7\x9f\xeb\xea\xfa\x9b\xa7\xab\x9f\x9e\xfecu\xb5]%?\xef\xaf\x7f^&\xab\xd5\xc5\xc5\x1f7\xdb\xfd\xd7\xdb\xe5\xcf\xe4k\x1df\xbb\xb7w\xa2\xd17~\xdce\x92\x03IY\x05\xf2\x05\x81\x84m=\xeb\xa0\xff\xf4\xe4O\x7f\xf8\xe3\"y\xfa\xe8\xdb\xf5\xd7\xdf>\xfa\xe6\xdb?%\x8f\xfe\xf8]\xf2\x87Gk\xb2L\x9e,\xbe\xfa\xf6\xc9S\xf2\x15/Y/\xe5\xda\xd2\xfc\x96\x9e\xcae\x1b\xadO~\xfa\xd9\xc8\xe5\x9f>g\x97\xd7$\xd32\xd3\x91@9\x15;\xdb\n{\xde\x0c\xfd\xf6\x8f_}\xbd\xfe\xe3b\xf9\xe8\xbb\xaf\xbe\xfb\xc3\xa3o\xc8\xe2\xdbG\x7f\xfa\xf6\xc9\xfa\xd1\xd3'O\x9f|\xf7\x87'\xcb\xa7d\xd9c(\xefl\x14K9\x8a'?}62\xf5O\xd5O\xd9\xf2\xe2\xeb\xea\xf3u\xfe\xcd7\xff\xf8\xf6\xab\x7f\xfc\xbc\xa9\xffXV\x17W?\xdd\xac\xcb\x7f,K\xd3p\xd8\xf3\xcb\x94 E\x9e\xdd\xb4,\x80\x94%\xeeu\xae\x0f\x92\xac*L\xf4\x89\xd71\xb4\xe2\xda|VvN\xa6\x08\xb9\xe8\x9e^y\xf6\x96\xe2\x93\xab\x0b\xc8\x8a\xe2\x92Jg\x0d\x16\x91\xec\xc3\x1d\x926:l\xef\x004\xf6\x9a\xe5\x1b\xdc\xcaS\xc8\xe1\x82l\x9d%\x1b\xa6Z\x9a\xa7\x05\n\xf9\x19\x1b\xa6Y\x95r$B\xbb\x89(\xa2\x8a\xb4\x1aH\x1e\xe7\xaa]\x91W\xda(\x8f\x86\x1c\x91\x00\x7f\x87\x18\xd4M\xdaw\xf1\xc8\xbem\xaaQ,\"\x9f9A\xd6#\xfdmr\xa8G\x90\x99A\xe2C6B\xe3\xc5)C\xc1\x02\x8b\\\x8c\x903c\xb4P\xe0\x96\x19\xd1#\x08\xb3R\x8c\xf9\xc6\x0d\x8e\x1cn\x8a})L%\x95\x0dv\xaaDz\xd7\x07\xc1Ah\xa3\xfd\xf8\xbf)gD\x848\x81\xbf\xecIy\xf3X\x16\xfb\xfdp\xfa\xb2\x87\x8cg\x96\xb6\xdd\xcb\xd0\xde\xceg\n5\xc79\xecs\xf2yG\x96\xd4\xda\xe3oK\xc9\x9e;m\xaa\xe5\x05\xd9&\xea\xcc\x19m?\xb3\xdd\xc7\xf0\x0f\xe7\xdf\"\xcf\x97\xc5J#|y\x03S\xc9s\xb9P\xd2\xbc\xfe\xfa\xe9\x80?\x86r\xe1\x16\x1aV\xa4N\xd2\xec\x8e\xd4\xe4\xa0\xcd\xe7\xfb\xd2\xf8\xaa\x8dS7\xb2T\xd6\xe0\xd6Z\x17\xc4.)\x93-\xa9I\xd9\xa1\xf9\x11\xd7\xdf\x1d\x8b\xc9\xb4\x04{\x1b\xc2\xdf\xc4\n5\xac\x1a\x13J\xc164\xa7&7\xa2F\x98N:\x83)\xcd\x9f\xc1.\xa9\xbb1\xa1T*\xa5%Y=\x83\xba\xdcw7\xb2v\x82\xe5\\u\x8eJ\xc8\xc9\n>\\M{\xa4\xa2\x1c\xf8\x89JF-\x0b\xd6IV\xa1y \xd9\x8fd\x80\xef\xf9*\xecTe3\xf6CNM\x13\xf2\xabw\x1d\xa4\xf0\no\x7f\x1f\x888\xc5hF\xceh\x98\xa1\xad9\xfd\x86\xd8\x8e!c\x1f\xdaC&Ki\xc0\x16a\xe6\xfar\xc6\xc7\xc2\x06M'w\x997=#\x19\xc9\x9a@\xd3\xba5\xa2\x15l\xbf,\x07z\xd61\x92\x03A6u\xc7zV\x90\x19,\xe9C\x8e\xbfN6\x8a\xf5\xf2\x17\xd1\xcfc\xaaqI\x9e\xe4K\xf2xK\xead\x95\xd4\xc9\xe3\xab'\x8f\xe5\xb2~\x9cd\xc2\x16\xdb\x90\xc6\xcc\xae\xf6\xdbmR\xde<\x935\xed\xaa\xe3,\x83\x92\xd4eJ\xae\x08U\xebY\xb3-\xe4\xf8\x9a\xea0'+\xa5\xd9\xef\xe40\xf9r\xe8\xd0x\xff\xe9W_\xdd7\x1b\xf6\x9d\x043\xedb\x9a\xc8\xa47;\x00~ \xebXPc7oG\x07X\xb9\x9c\x8d\x1c\x10\xb64`\xaf\xf4\xaa/\"\xef*\xbem\xaf\x05\xcc\x92\xe2\x80,\xbe\x86\x9ec\xf1q|\xdb\xde\xdc\xc4\x87\x91\xf8\x84\xf1\xc0g\xc6\xfb\x0f\x1f\xc7\xb7\xed\xb5\x8d\xe2\xdb\xf6]\x88o\xdbk6L|\xdb\xde\xbb\x8f\xf8\xb6}|\xdb>\xbem\x1f\xdf\xb6w\xdd\xb1u!\xbemo\x82\xf8\xb6=\xa6p\xcc2\xbem\x1f\xdf\xb67\x02\xf2\x84\x8d=_\xc7\xb7\xed\x91#\xc2I\x01\x00\xf7\x9b\xe8\xf1m\xfb\xf8\xb6\xbd\x16\xe2\xdb\xf6\xf1m{-\xe0(\x8co\xdb\xc7\xb7\xed\xe3\xdb\xf6\xdd\xfbu\x93\x1d\x85\xb0\xa10\xf6\xd3\xed_y\xf5X\xdb \x0b3\x96\xa4Q\xc3\xba\xcc\x96eg.\xdc\xd9\x8e\x07\x1c\x93C\xc8\x0d\xc8\x84\xe0\xdc\xff\x16\x15\x8a+\xb8\xda\"w\x823S\x94\x9c\xa9\x91\xaf_w\xbb\x15\xff\xfbe\xf0\xa8Cl\xeb\x90\xe8\xfc-\xbemoE\x86\x19\xebD\x0b!d\xac#3*\x0d\x0b\xc52\xe4\xe5\x17W\xcd\x0d3\x93(] H} \xe0J\xf0k\x01\xb94\x00/'`\xa0=\x97\xb1\x9c[,\xe7\xe6\xcb\xab)t+@,\xe7\x86\x1f\xf9\xc4\x8b$l\xe4#\xf5 \xe8\x97\x90~\xf8\x83T\xfe)\xceZZ\xa4\xd3\x9d\xb8\xf4Qm\x07>\x80\xf5\xc74\x81\xad\x81\x14!X\xae\x83GI\x1b\xf7\x85\x16\x0c\\\x17N\xe54\x98v\xb7\x82\xba;\x9c\x1a\xad\x98\xf0\x05B\x10\xe53\xbe\x10\x9e\x0d \x07D\x89\x1aM\xab\xf8\xb6\xbd\x801\xa3\x9fh\xe1\x84\x8f~\xa4\xe2B,/\x1d+0\xf4\xfe\xa2o\xdb\x0b\xdc\x15\xf3\xa9R\xde\xf4_\xaf\xef\xb7\xff\xd2J\xc9\xc4L\xfb\xe6\xcb\xdfx\xa6=\x87]\xc2\xe2:\x8d\xf7\x8b8\xda[,\xcd]Ls#\xd6\xf9\xadM~\x16\x81\xec&!#\xe8\xd7KS\xa7\x95\xe8\xb6\x11/\x89\xe5\xee\x18%{Q*\x1b\xc7<\xe0\x04\xf1 \xe7\xaf'\x97\xa4\xde\x979\xf7\xc9\x9c&\x1b\"\x0b\x1e\xccr\xf2\xb9\x9e\xd3\x8f\xeb\xc2\x82mA6in\xbe@\x02\x9e\x19&\x9fD\xa28\xe9,\x11\xd8\x16U\x0dd\xbdN\x97)\xc9\xeb\xecf\x06\xef\xf3\xec\x06\x8a\x9c\xd8ua\xb1^\xf3 a:\x0e[\xbf\xd5E\xb1\xcfV\xb0`A^&]\xc9\xb1M4?{\xfb\x157~\x86\xc4\x18\xd9$\xe5\xfb-\x8b\x1f\x16\x7f\xe3\xe1\x1bIN\xc7\xc5\xdf\xa7\xbc 9c\x85\x19]Z\xc1>O\xae\x924K\x16\x99\xed\x8a\x11\xe0\x84\xf5\x9a\xb1G\x06\xe5\xdc\xd0>s\xd8\xb3\x97\xc8.I\xd8D\x89\xd9\xb0um\x9f\xa8,\xdd\xda\x82\xa7~\x99ybDI\xcb\xa6.\xea$\xeb\x94\x87\x93\xcf\x82\xd5\x05\x1dZg\x97Y\x10\xd6\xcdsbl\x93\xd8\xa7j\x0d\x19Y\xd7@\xb6\xbb\xfa\x06Rq),\xb2\x0e\xf8\xe3T|\x83s\x02\xe8\\,l\xab\x84E?$\xbb\x9di\x06\xd8u\xfc\x9c\x8d\xd25\x0f\xae0U\x8c\"\x03\xaf\x99\xe8\x10\x07,\xda\x91q\xa0.\xf7\x04zA\xd1\x89\xab\xa4\xae\xe0?E!D\x88P\x82\xb6\xc9H8\x05\xd2\xd4\xea\xaf\x05\x96\xb6\x06\xcd\x16\x04}i+ \x1d-\x96\xe6\xf0\xf1\xa4\xb2\xae\x83\xde\xd0Y\xed\nj\x8c\xf0\xd21L<\xb4\xf2\x84\x8a\x8c\x19\x9c\xd8\xce\xf7i\x05\xe9&/\xca\xael\xb1\x7fn\xd9\xb6%\xa1\x07\x1cK\xa8\xcc/\xb5`\x04a\xfd\xc5\x92\xb6\xfb6)Io\xef\xda\xb8\xc0\xef3h\xff\xfcIT(\xca\x15)m\xa1\x15\x00gi\xbe$\xcf`YT\xdb\xa2zT\xad.\xe1\xab\xd97_k\x1b\xb8\xc2o\xb8\xe2n\x8c9N7\xd9.\xc8j\xc55\xfb\xe6\xc3\xe9\xcb\xc6T\x13\x81C\x95e\x1d6\xd2\xdfX\"\xaeY\xa43x=p\xe6\xd8L=\xf7$u\xcd8\x99\xcb\xc2\xbc/\xdd\x8d\xd1:\x0b\xd9\xa6\xd3\xda\xa7f\xa3|\xc4\xb1F\xdaE63\xde\xa2\x89\x9c\xd6\x9c\xc2\x9f\xff5\xcdxc\x9d \xf5\xc3\x0d5:\xed\xbb\xa4\x12\xb9 \x9dU1\xb3\x1ar\xccFs\x1ah'B\xc7\xb0\xa5\xc5\x94\x8eI\xff\x0fc\x85\x8c\xe7K\x00\x8bJA3\xd3\xa2\xd2][\xa7\x91\x9c&\x05\xde\x8am\xe3x\xbb\x8c\xee\xc8c\xd3\xdeaO\xbd\x92\xfa\x08\xd2\xba\x12J\x9a\xd9h\xfc<\xb3\x82\x82\xf2\xef:\xad\xd4\xf5a\xdf7\x9d\xda\x04>%\xcb\x86%\x0d$P\x81\x11\xcb\x96\xc5\xb2e\xf6\x0dx\xcbe\xcbb\x19\x98\xdff\x19\x98v\xfc\x1d\xbbC=\xf5\xda\xd4f\x80\xcbC86\xbaXB<\x19=\x7fE\x17\x9d\xd1A\x11\xc2\xc8\xc1&\xd3\x9a\x19\x1a&r\xfa\x90\xcb(\xc41aw?\xf8:\x1c\x9c\xfcT\xd1\x1f\x98\xb9=\xb3C\xc3^\xe6\"@r7\xcc\x9d\xd0q\x1a(\xd84\x0e\x84 \x97\x81\xd61p\xcb\\\xec\xdaTm{\x1b/}\x1d\x02\xc3c\xbf\x82N\xeb\x02\xf0?\xf4\xab'\x18\x05\xd9\xf0\x98\x1ft\xb0\xef\x1c\xdf\x15d\xfa\xa3\xfc\xf0\xf0\x1e2\xb1\xa3\x84\xb88\x88#\xa75\xe4\xd8.\xf6\x88\x82\xc7uPw\x1e\xcd\x0f\xc9'S\xcd\xb3\xfb\xa6\xa2gl\xd3\xb2Z\x0b\xd5E\xba{\xfcO\x11\x92\xf1/Q\x86LW\x01\xad\xc3\xd7\xbf\xd2\xd6\xefek\xc1\xb6N\\\x99r\xb3\xc9\xf6K\x96V|\xd3\x88\x1c\xf9\xde\xcb\xee o\xccE #K\xae0\xa5\x9a\x9a\xda\xaf\xf8\xe2\xee\x16Tk\"\xa6\xa65\xdd\x0d\xd6qo\x8c\x8c\xe3\xc5\xba\x99\x90\n\x1ePR\x1e\xear\xbf\xd4Y\xf9\xd2/\x91\xad\xb5\xb7\x1c\x07\x8cx\xef\xca \xde\xbb\x0e\x00q2Ex\xea\x00\xcd<\x08;\x84X\xb0\xc5{W\x8c\xf3\x0f\xbcf(\xe4xcA\x17\xef]9L>Oa\x07%\x0b\xc2x\xef\xaa\x00~&|\x8fY\x16T\xf1\xde5\xde\xbb\xc6{\xd7x\xef\x1a\xef]\xe3\xbd\xeb\x17t\xef\xaaz1PW\xaf=\x0c\xfc\"\xb6\xe7\x85\x89\xb7\xaf\x1c\xe2\xed\xeb\x1d\xba}\xed;\xfa&|\xe3(^k\xc6kM\x9f;\xa3x\xady@\xe6\xba/\xe4\xe2\xb5\xe6\x14\\\x8c\xd7\x9a\xd8ss\xbc\xd6\xfc\x8d\\kRF>\xbez\xf28+\x8a\xcb=\xee*\xf3\x03g\xde\x1b\xd6\x82Q\x9f\xcaB\xf7Y\xc6f\xa6\x82E\xb1\xcfW\x9d\xf2|\xba\x8bK\xe5rRA\xfa;\xc9\x88;z7\xa9\xaf2=\xc2\xa25\x18\x8d\xf2\xc5\x9a\x9cc\xa5\xd2\x00\xcf^ h\x17\x85\xe6\xc2\xa9[\xfd\xb2\xf3\xb3\x0ci5^)E\xafC\x17\xa2\xd7\xe1\x8b\xf7:0\xd9\xa9\xc8\xa8p\xcf\xc3\x07R\x15\xd9\x15\x89\xee\x86\xe8n\xb8\xeb\xee\x06e\xfd\xc9\xf2?u\x01\xeb4_\xf1\xe7\x0f\xe4\x83\xa5\xaa\x87}27E<\xa6\xfb\x9d\x81\xe21\xfd\x80\xccu\x1f0\xe31}\n.\xc6cz<\xa63\xf8M\x1f\xd3u\xa7t\xa6\xbd+\xf3\xd1\xfc\x94\xfd\xde\x9c\xc9\xf9\xe7r\xc52}\xbd-V\xfb\x8ch\xe3\x83\xdf%[\xc2\x11\xfcN\x8e\xf0\x8e\x9e\xbf\xbbl\xe8B\xef8\xcb\x06/\x8f\xb2\xfc^\xbd\x89\x95\x14\xa7\xdb\xfd\x16xw\xd2M\x00\x82\n&\xea\xb3\xac\xb8\xd6\x11\x9b\xe6\xb7Nl\x9a\x87\x12\x9b|\x9e\xd3o\xe7\x19\xb9\":#\x1f\xa6\xa5\xd4x\xa8\x95\xfcn\xa5\x7fw\x08U3\x86\x19\xc0\xeb\xcf\xc9vg~0\xf8\xd3\xba(f\x8b\xa4\x9c-\x92\x9f?\xc1\xb54\x11u\xc11\x0c\xe3|\x9f\x97\x84\xaaV\xaa\x15\x183\xacl\x18\x1be-\x18\xb1\xa2{f\xcb\xb6Q\xba\x86. |\xe0\x97\xe4\x86\x8bbF#=b\x97\x90\x17\xea\xc6A\x9c\xaf\xb9\xf0A\x1d\xac\xc5QZ\xc8\xbb\x0f\xa7/{\xf8\xe2\xd9:\x9e\xado\xfdl\xed\xe5p/\xb9\x17\xe8\xf1?\xe9\x1f\xec\xeev\xee.\xea:\xda\xeb\xce;U\xc3\x97\xf1\xb878o\xdf\x0e\xecy\xda\x19>\xf1\xd3\x9d\xd5\xf1\xc6<\x14\xeb\xdcH\x8f\xb9\xf8]V\x98\x94\xc7\xf8\xc6\x85!\xcd!1\x0b\xd5\xd0y\xdb\xca8\x13 &\xc1\xe9\x12\xac\n;\xffK\xc4L\xf0\x97{\x95\xb7B\xa5\x81\xc9\xd4\xc9j\x05\xd5~\xf1\x88I|\xd5\\A\x08V1\xe5>\x92U]%\x12\xa2X\x8db\xf5\xd6\xc5\xaa\xcde\x99\xab\x0f\xa4*\x8b/\x17\xcf\xb3\x8a=\xae\x08\x80I\xdd\x95\x98\x13\xdc\xb6\xda\xac \xa9\xa8\xe4O\xb2\xcc,\xedY[v\x91\xfa\xb6\xdaT\xe2\x91d\xf6\xf2\x18m\xaeK?\xdcj\x0fs\x0c\xcfq\x96\xbd\xad6\xdf\x13r\xe7Ot\xdbj3\xa7\x03\xbc\x1b\xbb\x80R3z'$+\xfez\x7f\x92\xd1\x91\x19\xd18\xdf\xf9S\xf10\xa7\xeb.\xb9\x814\x87$\xbf\x81\x97E\x9a?\x80ER\x89g\x83\x13xE\xf2\xc2\xfc\xee{\x92\xaf\xe0x[\xec\xf3\xfaH\xfcW\xbaq\x7f&eaz\xf2\xdb\xc1O@\xf0\x14\xd8\xd2\xca\x8b\xad\xf9g\x04S)$\x8c\xec\x91h\xecZ\xb3\x05\xca\xdf\xf6:\x1c\xea\xe2\x92\xe4\xd2\xceb\xc3\x91\x0e>\xca\xd8$\x17\xc4\xb9\x9f\xf8;\xa7\xc2\x88\xf3\x9f\xbf\x8e\xcc\x1f\xf1>\xc9k\xb1\xe7Szl\xdc\xca7\xe4\x8d\xd8\x96\xfb\xaa.\xb6B1\x9b;m\x0c\x8b\x8eY\xb1\xb8\x81M\xb1)veQ\x1b\x9e\x1f.\xc92\xdd\xa5\xc4\xccl'\xa3\x1b\x0cs\xbaD\xab\xf9\xaeH\xf3\xda\xb8B\xec\x8a\x97\x83\xeb\xf4n\xdfP\\\x1cJ\x03hY\x94\xec\x96\xe1\x9a'W\xd7\x15{\x9f\x9a\x9e_\xb9\x9f\xbd}\xb8_\xcf\xd9\x94\xbd\xe2_\xa5U\xcd\x1cJ\xebb_\xb2W +\xfd\xe7Of\xdc\xe7Tm\xb8\xc5\xb5/\xb3#Hgd\x06\x8f\xb9\xebq\xb6H\xf2\xcb\xd9\xd5\x93\x05\xa9\x93'\xb3\xb7\xd5\xe6\x8c\xe4\x86I}:k\x1c)\xad\x80`:\xe2\x81\xd8\xcf\xc5\x9a \x08\xb6H\x1f\xea\x91|=k\xc3;\x9a\x99b#!\x84\xca\x14\xc6 m\xcbO\xfa\x89\xfd\xa4\xef\xe7\x9b\x19\xf7\xd9\xca\x1e\xd2\nVd\x99%%\xcfd\xbf\xe17\x13\xf4w\"\xf44C\xaa\xc5\xc5;\x92\xfe;J\xe8\x83\xaf\x1e=\xf9\xea\xe8\xab\xaf\xbe\xeaK\xaf\x18\xf9\xa2@\x8c|i\x7f\xc22\xf3\xb7\x10\xf9\"\x06\xd2\x9c\x06\xe9\x1ao.\xbf\xa9%\xba\xad6\xf7\xf9\xab\xb3f#\xb4\xc1\x18\x8f\x84\xeao\xf1Hx\xcbG\xc2\x182\xe2w\x1f\x1fCF\x0e\xc8\\w\xb0C\x0c\x19\x99\x82\x8b1d$\x86\x8c0\x88!#C\x87\xa3g\xd4H/R\x82\xae\xca\xcf\x12\x9dh\xaa\xb8\x1a\xf9\x99:F\x8ep\x18q\x00\\gEQ\xce7I5\xdf\x95\xe9\xd2`2\xb9\x8e\x1d\xcb\"\xaf\xea$\xaf\xb9\x8e\xad\x0bX&\xd9r\x9fQQ\xc6\x8cw\xb6\xcf7I\xc5\xffU]$%\xa9\xb8\x93\xc0\x80\x90\x99\xf8\xdbjC\x1b\xe8)r9\x07]\x16\xa6\xd31\x880\x12]NA'\n\x9cCpjw\xe0\x94\xce@\x94+0\xc4\x11\x98_$\xd5\xc5|G\xca\xf9\xbeZ\xcd\xb7\xe9\xe1\x0f\xd5BS\xd2~aGJ\xd8W+\xd8\xa6\x19\x93E\xcb\"\xbf\xa2\xab)\xdf\xb0?\xd7\x05\xffN\x83\x8e\x7f\xc9\x1e<_\x132\xb7,2'\xe9\x82\xae\x16#\xf3<1\x8c\xd2\x1e\xe3\xff\xa0$\xa5\x95$\x92\xed@\x05!\xe2\xb66\x86\xc1\xc4\xc3\xb9\x04\x97\xe8\xbc\x8b\x87s\x8cuR\x7f\xa6\x86I\xa3\x9a\xe6\xdbj3g\x0e\xe7\xf6\xaelWT\xd62\xba/e\xe3\xf3\xcf\xdf3U\x96n\xd9?+ \x9f\xc9r\xcf\x04D\x02u\x99\xe4U\xb2l\x9c\xb7\xa4\xaa\xd3m\xc2~\xdc$\xad\x87yO\x97\x01\x17\xda\xaa7]{\xb9\xda\xebZ|rg\x8d\x1e\xf5\x06\xf1\x8e\xac\\\xab\xcaw.<\xbb\xbaw4\xc7\xa8\xfai\x15}\x90\x9a\x17\n]\x8b\xd0\xa6\xe4\xfdU\xbc\xcd\xa6\xec-\x9e\xe6\xf1\\1\x90b\x0d\xcb\"\xcd\xa5\xdb\x81e\x81\x8b\x16\xd4h\xd4 \xec\x1c#$0u\x1f\xd7&\xc4\xb59\\\x9bn\x86\xb4\xab\xa7Y\x9c\xdc~l\x97(\xfb1'dEV`\xae\x92\xdc\xd1\x15\x15<\x10G\x9e\n~/\x8fK\xda[\xd4\xbc\xa8\xa9\xc1zA\xe4W\xcc\xfc\x93\n\xa2S%\x9c\x9d\xee\xd8G\xect\xa7A\xc5\x8f\x94\xfc\xac\xd9g\x84\xd0[dE\xcf\x87^\xf6\x8a\xd3\xee\x16\xbb_\xe9AZ\x9d-\x0b\xe9\x1fU\x0ev\xf9\xa5 \xb5OYOyz\xd8\xb9\xd1\xc0\x8d\x06\xae\xee\xf7\xdb6pm\xb7O\x8bb\xd5eN\x9a\x0f\xfed\x8c,\x9ch\xd1\xd5\x9f\xe7\x94\xd6P!\xa1\x0d\x1fP\xf6\x90\xec\xa0\xb9\x88\xe8\x98\xd8u\xd1\xd8\xe1} &\xb6&3\xf3Mgq+\x85\xee\xf8\x85a\x17\xd2\xf3\xcd\x08#\xb5rP\x17\x92L\xfa\xc24\xf8\xd25\x15\xef\xac\xa1\xe6.\x84\xb9\x1d\xfa\xa3\xdc$\xd5ENF\x17~ U\xa4\x90\x99j\xd2B8x\xe8\x14k\x81~e*\xce\xe5*\x90\x8b']\x99B6\x19\xfbve\xb1)\x93\xedm\x93i \xa4=\xe7O<6\xcf\xdaP2A\x90)/YY\xd2\x0b\xfbaA\xb2\"\xdf\x98\x9eb\xa16\xbf~\xf8\xfc, 6\xfa|W\x14\xd9|]\x94\xf3\xee\xd4\x99\x18\xe23\x90j\xbfe\xf1\x95Y\xc6-\xff2\xc9\xa9=)\xfa\x15\xa2\x8b\x9e\x03h\xbfFL\x9c\x1e\xfd@\x9c\xab\x15\x10+\x16\\gY\xc0-\x04\xd7\x99\x160h\xba\x93\x82\x9a\x03\xca\xe8u\x9a\xd3\x83\\\x96\x15\xcb\xc4\xcc\xe1\xdf\x18'\xf9\"\xe7Ww\x13l\xef\xa9vw?\xbcA\xee\nq\xc78\xc1\xa6P$0\xc9W\xba\xdc<\x0e|\xf8\xf6g\x14\\yz\x1c\xb0\x1c8\xe6u\x90K\xb2+IEr\xe6aN\xd7\xad\xfa\x96\x82\xbbaCO\xfd\xf7\xe1\"\xa9\x80\x0dQ\xc7\n\x0cQV\x9b\xe0\x88\xd3@\xad\xe3\xdd\x8a\xed,\x11\xe5B\xf2\x95\xe9\xb9\x1brE\x0d1\xfb\x86S\x08{#\xac\x1e*&\xad\xd4\x88\xbd)C\x10\x18\x93\xfa\xb8\x0f\x1a\xcc=4m8X%G\x8c\xe6\x8e\xd1\xdcw6\x9a[\x7f\xb5l?'4\xae\xb8\xee\x93\x94\xe2\xe8\xa2\xdf\x8dd\x85;zD\xc7\\t\xcc\xf5\xe1\x96\x1ds1,\xdc/\xe66\x86\x85\x1f\x90\xb9\xee\x80\xe6\x18\x16>\x05\x17cXx\x0c\x0bg\xf0\x9b\x0e\x0b\xbf\x1f\xea\x04\x7f\xfcO\xf1\xd7t\xf5/\xe5\xeb\xea\xf1?{\xdeP\xe4\xdb\xe7vk\xf1\xc5\xcd\xc9\xab\x8e\xd7\x1c\xeb-W\x9d\xe5'\xaf\x02\\\xe4\xb4g\xd1\xea\x8bu\x93\x9b\xec\xc2\xa0\xe3+\xca\xd9\xed\xb4\xd2\x10\x07\xaf\x1077\xd2\xc9}\x10\xf2\xbc}\xd8\x06_u\xb0\xa7z@\x91\x973\xda\xea_s:J]\x87\x02\xa7\x93\xd49%n\x07\xa9\x03\x85\xdb\xcd|\x08'\xf3\xaf\x81sn\xb7\xb2\x93\x06\xb7Ky\xc0|/\xaf\xb1e\x0e\xb0\xbea\xb7g\x18\xe3\x17\xc68`\xa7\xf6 [<\xc2nr&\xf6\x06\xbb|\xc1#\xbcPT\x15\xeb\xae\x08y\xf0\xe2\x12\xc2~\xeeRO^|\xf7\x99Mr\x97Y\xc5\x81\xdb\xb0\xf2\xd8\xc0P\x8a\xe0Rz(#Y\xbaI\x17\x99*\xc0\xaa\xbe\x1f\xaf\x0bbd\xbf\x95x\x16\xae(\xb8LAM\x05;\xf5\xb2\xcf\xe5\x92`(\xec\xfc\xb2\x8e\x83\xe4{\x0b+\x1e\xc1\xcb7\xc7'o\xe7g\xe7\xc7\xe7\x1f\xcf\xe6\x1f\xdf\x9d\x9d\xbe~y\xf2\xfd\xc9\xebW\xf8&\xec\x9f\xc7/\xde\xbc\xc66 k\x80'\xe9\xf5\x7f\x9f\x9e|0~.\xcde\xdf\x91\x0b\xc3\x9f\xd9\xe4g|\x8a\xc4\xc5\x04\x13f\x8dW/5n\x00\xbe\x1a~\x01\x01c\xb3:\xec2\x05#'\xb8^<\xe6\x92\xbd\x9b\xf4\x924\x0fw\xdeW\xd44\x97\x1f\x16a,\xc5\xc4}\xd7\xe1X\x1b\x94\xa3\xd0\x13#oZ\x88\x917\xfd\x8fc\xe4\x0d*\xf2\xc6.\x05D!~\xb3q\xac\x8d\xbe\xd1:\x84\x84\x15\xcf\xe4C\xaeZ\x9b\xcch\x07S\xce@\xf4\x82D/H\x1fn\xd9\x0b\xe2xcT{|\xb2\xa9\xe0\xd1\x87y\xd5[\xc1\xf7\x8b\x89\xba\xff\x1d\xba*\x84\x19j:\xeam\xf7U\xcd\xca\xf7\xf7\xee\xe8-&\xe5\xb3\x8e\xa0a6\x93\xa3ac'\xd2\x86l\x14L\x16\x0eFb\xb10\xd5\x96\xcd\xff\xb9\x1bsj{M\xfbYez\xbbSmH>\xefR5\xf4 \xe4\xa2|\xb0P\x87f=\xd2\x94G\x9a\xef(\x93\x1da\xa6;Ms\xbc9\x1e\xe3\xdd\xfc\x96H\x8cw\x83\x18\xef\x16\xe3\xddb\xbc\x1b\x87\x18\xef\xa6\xe0\xf9\"\xe3\xdd\xec\xf7-\xc2k\"Z\xa2\xaeYNE\x13\xf3\xc5\x8aD\xaa\xde\x9a\xa8\x03\xa7\x83\xb3\\\x99\xc8N\xc4\x17w\xf6\x92D\xcb\xc6.\xfc\x12\xc7\xa0[v\x17\x1e\xe7\xf2\xb4I\xf7\xd0>O\x7f\xda\x93\xec\x06\xd2\x15\xc9\xebt}\xa3\xb9\xa50\\E0\xdfG8\xe5.\xdf \xb0G\x9d)\x8d\x17$\xdb\xa9\xf4}\xd0\xb9\x16Z\x10\xcbq\xf6\xe0m\xf2\xf9\x9cv\xf3\x86\xbd\xd7\xfb\xfc\xc97\x83wV8t\x19t\xc8\x11\x9d]\x14e-7\xab\xe8u!w\x9c\xc7\xa0^\xb5\xf4\xca\xa1}\xa5yD\x86Cs\xcfL\xe6\xeb\xb2\xd8\xce\x8d7\x85\x1c\x10\x03U\xd6\x93r\xe4\xa5\xd2+]\x91\n\xd6\xfb|\xd5\xbe\xf7\xd9\xbdd\x82]Qd\x88\xdb-\xaf\\\xebA\xd1\xac=\x17\xfc\xfc9QqC\xac\xc8\xaa\xdf\xca\x05UI\xb6\xfc\x11Q\x1e\xa7\xb9H2\xaa[P\x8cu\xe4L7\x98\xc5d\xb7VP]t\x16\x1d$\xeb\x9a\x94`\xbe1T\xaf\x16\xd9{\x81\xdc\xcd\xfc[\x99\"\xe1y\x98\xdbQ\xf9LM\x7f;$Y&&I^\xf0.n\xd8k_\xe92\xdd%ym.V!/\x82wIU\xab3\xf5[\x99\x9dm\xf2Y\x8a\xa4\xc5\x8dKx*\x93\xf4V<\xb5.\xe5\x1e)\xd5{:\xfa\x07\x81\xef7\xc3L\xfe\xee\xdb\xbc,\xb2\xac\xb8\"\xa5\xcf\x9a\x7f+\xdf\x8c\xebU\xefdK\xb4\x8d\xa8(@\"\xff\xad0\x95\xbb\x7fE\xb0ZE\x96E\xbe\x1a\xa3\xdd\xfdM\xcaw\xcdyX\xf4\xce\x8d\x81^\x16L\x96T\xfaK\xba&hd^\xd5IY\xcf\xebt;\xc6\xb0\x94\xf4\xaf\x92\x9a<\xa2\xb80C\xb0 \xd4tK\xe4\x80\x14\x13Bz\xf7\x18\xd5,\xee\xac\xbaN\xd9\x1d\x96\xe9.\x14\xe0\xec\xfc\xf8\xc3\xf9\xebW\xdc;\xaeg\x86\xbc\xc2j\x02\x96H\xbe\xfarx\x92V\xcd\x00\xe8^$\xf9\xea\xc8\xfe\x1c#\x85UR'\xdc}\x91\xd6\xf2\x06s\xbf\xb3\xaf\x15\xc9\x95\xf96\xf9|\xdb\x9c1\x0f\xff\xed\xc7\xb3s:h=\xed\xcaN\xbd\x83\xd3\xfa\xb1b\xae\x94\x9a\x949{\x91Wy\x82\x83.\xf0\xbaL\x96\x97\xfcbk_\x96$\x176\x81\x11!\x1f\xea}\x16\xfc\xcf\xce9\xe9\xd6\xb0\xea\x93e\xbdO\xb2/`\xcd\x93\xbe\x10`{\x9e\xaf\xf6\xefO\xde\x9d\x9c\xfdh\xdf\xde\x14N\xf2\xb4N\x19\x87+RCRqo\xad{\xcd\xfcRb]5\xd1Y\xbc\xa2\xd4\xb7\xfc\xf9\xd3}\xae\x8b\xbe\xe1 V\n\"=\xec@\xe3\xb0\xcc\xe9\xcb\xee*\x96\x8aJ\xf8z\xd5\xe3\"\xdd\x1b\x15\xc9\xd2\xf5M\x9ao\xe6\xa2\x16\xbc\x9d\xdfzG7\x07\xa3\xbb\x9b\x03\xe2\x10\x85;F\xd19\xcb\xc8\xc6\"\x0c8\xa0:\x04t\xa7\xd09\x8d:x\xd5\x02b\x95\xb6\x80Z\xaf-h\xcf\xba\x9du\xd5^\x90H~\x19\xbd\x06\x12\x844\xbf\x8b\xe3\x1b\xe8\x99\xa0\xf1\x89\xf9\x13\x0d\xa8\x94q\x1f\xa79`\xe5D\x0b=\xf7Cs\xa9\xbc\xafH\xd9\xc6J!\x10 {(\xbbi\x06\xda<\xda\x7f\x95d\xe9*\xa9M\x96T\x17\xd0\xdb\x01\xbc\xb6\x04`\x1c\x1b-x-\x18\x8c\xb3\xa3\x05\x0f\xd4r\x9d\xdf\xce:\x10K7\xae\x83\x0exL\x16\x1cp\x1dt\xe4\xf9\x15\x99WurI\xa8\x85\xbd$T\x19;\xf4\x0b\xf8\xf5\x15\xb4t\x84\x08iIRB\xaa\x16$+\xae\xad\xb6A\x0b\xcd\n\xb9_\xc1\xae\xb8&%\x94I~iS\xbaR\xeb\x19\xc8;\x02\xf9\xa0\xc80\x1c\x7f^w\xc2\xf0%\xc4\x12\x07*(c\x8e%\x0eP\xcc\xfc-\x948\xb0\x96uT\xd3X\x9ar\x06\xcb\"\xaf\x93T}MD\x9f\xf2\"\xc1\x92C\x13\xeb\x17\xa8\xbf\xc5\xfa\x05\xb7\\\xbf\xa0\xd5!\xa6%\xd8\x13\x97\xc7\xb0N\xb3\x9ang~-\xc1\x94\xa8&slX \xe0/\x1f_\x7f\xf8\x9f\xf9\xf9\xff\x9c\xbe\xee\x97\x07\xa8vd\x99\xae\x99e\xa8\x12\xd2ow\xfc\xe6\xcd3v@\xe9\xa7\xa9\xb1\xfb\xefAu\x80NK\x11\x80\xf1\x0cv\"\xea\xac\x17\xb3\xc2\x10<\xb7u\xfd\xf2\xfc\xe4\xaf\xaf\x9f\x01\xf7\x91k\x9b[Z\xbf\xffx~v~\xdc#\x81=goFg\x1b\x8e\x8cCx\x06\xeb4O\xab\x8b\xa6\xca\xb3\x91\xa2\x90\xc4\xc5\xc1B\xd3\xd5\x1f\xd0O\xab\xf9\xa3\xe37o\xcc?\xea\xe2d4\xd3`\xfe\xbd\xc3h\xf3G\x9a\xe8\x99&\x12\xc61\x9cX\x8e\xc0o\xc5\xc4r\x04\x10\xcb\x11\xc4r\x04\xb1\x1c\x01\x87X\x8e@\xc1\xb3\xfa\x12\xcb\x118\xea?K\x9b\xec\xf1?\xed\xaf\xe8(G\xa6\xdeK9=[\x06\xf3\x1e\xce\x00\xdd\xef$7\xbe\x88\xba\x03\xa6\xd3K\x90;\xe5\xd6\x1e\x90\x99\xa6n\x80\xa5j\x80\x93b\x97+\"\xb0^\x80g\xb5\x80.S\x0e3\x8e\xf0*\x01\x815\x02\xbc*\x048\x87\xa7\xac\x9a\xc9\xaa\x03 k\x03(\x9dOY\x19\xc0\xe1+pmSp\xdfN9\x19\xeb\xbe\x85r\xa0\xf0\xa9\x05\x80\xbb\x1b\x08\xa8\x03`\xcd\x18CW\x01\xf85L\x07&\xef\x1f?\x0d\xde9\xfft\xff\x99\x06\xe6\x91\xf1\xffk\x98 \x8f\x1c\x7fm\x1cAp\x86\xff\xaf\x82y>9\xfd\xda\x10\x93\x91\x19\xfd\xbf\x06&\xe2s\xf8\x9d\xb4\xf8\x1av#\xb3\xf7\xb1\xb9\xfbh\xba\xed\xf9\xbaH\x818]\xce\xbe3c\xdf3_\xff\x8e\xf0! O\x1f\x9f\xa5\x8f\xcf\xd1?\x047\xc2\xb2\xf3=r\xf3\x0fA\xb4q\n'\xce\xc9\xc7f\xe4{\xe5\xe3\xdf*C&\xcb\xc3\xc7g\xe1#r\xb5\xd1,\xf0\x17\xcb#\xb2\xef\xf1\xb9\xf7\x93\xd3o\x9c\xbfis\xeem\x19\xf7\xbe\xf9\xf6\xb7\xc7\x83 \xf3\xecm\xb6\x91%\xc7^\xa134\xc3\xde\xc90[v=>\xb7\x1e\x97Y\x8f\xcb\xabGf\xd5cr\xea=3\xea\xc7\xe7\xd3#\xb3\xe9\x9d\xb32\xd92\x9e4\x8b\xde?\x87\xde\x95+o\x94\xfe\xd8\xe0f\x03|\xd0\x8e\xccoG\xf7\x13\xb0H\xa6\xcal\x0f\xcc\xd9\x1e\x99\xd5~H\xceL\x95\xcf\x1e\xc4\x19\x1fj\xa7\xcdd\x1f\x91\x8a\x89\xc9bG\x8a\x02\xac\x18\xf8\xe2,\x1edf\xf7\x17g\xf1`\xc7u\xdb\x16\x8f;\xf5\x12W\xf6\x05\x99\xa9.v\x99\x13\x9dW\xea%r\xcf\x80\xc7\xbe\x81/G}\xfa\xcc\xfc\xb4y\xe9#D\xa1+'\x1d9\xa5\xd8\xe9\xfc\xe2\xc4 \"W\xfb\x8b\x13\x81\x981\xfdJ\xc5_7\xdb\x97\x896'\xc2(\xfaPhC\xf2\xcc\xd1\xc8=w\x82+\xfc\xad\x85 \xf3\xcb'\xca.\xf7\xc9-\x9f.\xb3|\xda\xbc\xf2\x11Y\xe5\xce\x9cr\x1f\xf92e>y\x90zU\x88\x9d&\x97\\A\x19\x98I\xee\x9fG~>\xb8<\x10\xa2\x8ew}\x9dX\xde\xc8\xc7\xa7\xc5\xbe\xb89y\xa5\xcf\x8c-y\xee\xee\xe0\x8eN?\x84\x98\x07\xab\xfe\x16\xf3`o9\x0f6]\x99\x96\x1e\xddH\xe9J\x7f\x1fG5\x0dK\xbf\xe8\xee\x9f\xd1Ox\x1bt\xa7>\x1f\x83%\xb8\xa7\x8d\x19\xcbSEf\xc9\xbe\xbe\x98]=Y\x90:y2\x13\x0f\xf2\xbf\xb8\xa9Iu^\x9c\xb1\xce\xe4\xa6\xe5\x08\x07\x93=\x9c^\x11\xb28\xe7\xb4\xb6t\x0cF\xa0\x17\xf76\x1a\xe4\xc5\xa7\xdc\xd0\x0c'\xb3\xffD+\xfe9\x94\xbb\xa5\xc0\xb6%\xf5E\xb1j\xb3e\xb4y2\xdf\xd9\xd9\xc1\x91\x9e\x17\x8c\xa4`v\xd0\xe5UY\xb8\x01\xba\xa5he\x91\x96.'\x8b\xd8\xd7Sq\xe8\x05Y^|\xfd\xf4\xb4$\xeb\xf4\xb37g\x16\xac\xf1|\xc7Zc\xd7I\x93(\xab\xeb\xda<\xf8\xee\xd7t\xf0\xed\xb0\x03F}\x9a\xb4\xef\x7f\"\xc6\xb9M>\xcf\xb7d[\xcc\x97\x17I\x99,U\xb1b]\x07\xea\xae\xfe<\xaf\xd2\xcd\x9c%]\x06\xb7\xff\x99\xcc\x97EU\xcfw\xa4d+2\x04\x11\xa5\xe2\x8a\x94\xe9\xfa\x86\xe3\"\xab\xa7\xdf~\xfb\xe4OS\xa0\xaa\xc8r\xf7\xf4\xdb\xef.\x9f\xf8#SV \x9f\xa1\xa6R\x0d]\x13\xadLo\x0e\x8ctRa[\xac\xf6\x19\xbb\xe7\xd7M5\x13\x9d\xc7\xfc\xa4\xdal\xa0\xd6\x92A\xaf\x01q\xd8\x1dF\x87\xdbW\xfb}\xfd\xba\x9c=\xbd\xcf;\xee\x99_\x0ej\x8d\xdbC4\x1f\xb6\xecl\x15\x04\x83B\xb9\xd2\xe7F\xcf\x96\xd0[\x10z\xbb\xc1\xa8\xef\xedg\x8bc\xf8\xf8\xe1\xcd\xe3\x92T\xc5\xbe\\\x12\xa6\xe9\xb9\xf5\xdb\xcfTK\xc5jb\x9c\xe3\x9a\xbe\x87\xaa\xa2\x87\x86,\xfd\x99\xac\xfa'\xa2]Y\xd4\xc5\xb2\xc8`\xb1_\xafI)M\xb7\x19\x9c_\xa4\x95\xa0\x99{C\x84}\x0cI\x0d\x19I\xaa\xba\x8f\x89\x1e+\xee=\xbe\x07\x8d@\x991\xe3#K\xaa\x1a*\xb2\xd9\x926\xc9\xf7\xe3\x877\xf7+fe\xe8J\xfc5G\xa7~\x0f\xb4\xe9z\x9fe7\"\xda\x85Z\xff\x8c+2w\x98\x8e\xffARA\x9a\xf7\x9b~\xa2\x9d=\xde\x14\xc5$\xe6\xc5~={\xb5\xe7\xb1G\x9f\x1erZ\x19\xb2\xb6\xa2\x00\x1dl\x0f\xcf2\xc9\x8b<]&\x19\xdb\xed\xfd^\x1e\x90\xd9fvD\xd9\xc3\x02Q\xef\xcd\xee\xd1\xd5\x9d\x175]TdW\x93\xd5\xc3~\x8e,\xc0I\x0e;\xca\xb0tI\x8e\xa0&TD\xec\xab=\x0b\xe2\xdc\x95dYlwiFi\x11\x89]\x8b4O\xca\x1b\xe6o\xa2\xe3\xed\x1f\"\xe5e\xf6M\xbf\x1b~\xfc\x80\x94\xe5\xfb\xee+\"\x93\xde\xe9\xb4\x92\xcflj\x8e\xf3\x9b\x19\xfcX\\\x93+Rr\x0f\xd6\xc7\x0fo*\xb8\xbeH\x97\x17=l\x14\x01]f\xfduFO0\x04>]\xd4\xf5\xee\xd3\x11\xffo\xf5\xe9\x08\x98\xbf@\xfcz\xc4V\xca\xb2S\xa8K\x84\xab\xeew\x03v\xd3\x11\x0e\xfa \xe5\x95\xf4\x9al\x93]\xc5\xa7\x9dQZ\x17r\xfdB\xc7\xb0\xa4g\xfcu\x91e\xc5u\xf5l\xc0\xfd\x7f\x87\x93uK\x1b\xf0@\xd4\xabtEV\x0d\xf9\xcc?QU\xfb-Y\xf5\xcb\xc2\xc0\xbf\xd3\xb3\xdd\x8f\xe7\xe7\xa7\xf0\xc3\xebsy\xfb\xff\xf1\xc3\x1b\xbeenR\x92\xad \x81\xbf\xf5\x17\xde\xf9\xcd\x8e\xfc\xfdo\x7f\xef!\x03Y\xfa)\x97\xb3\xccU\n\xe3\xdf\xae,V\xfb%\x81$\xe7\x07\xbc\xfe)\xfb\xdf\xe1x\xb7\xcb\xd2e\"\xc6\\\x12\xbaF\x8ak\xeePZ&K\xba\x17\x8b\xe2r\xbfk\xb2\xbcep\xbc\xd6c\xf3\xf1\xc3\x1b\xd6\xaf\xf4\xa7l;\xabq\xc5\x97c\"\xc9\xa4\xff\x7fU\xa4+H\xf2\xe1\x19\x8dw\xca6XI\xd6EI\x8ed3\x8a-\xa9\xa5o#'d%+30\x01P^iBd\x8b\x9c\n\x98|C\xd8\xa7l\x07\xcc\xe0\xc1\xc7\x8a\xc0\x15)\xab\xb4\xc8E\x19\x1e\xb6\x97\xf9\x8aH\xf2d3\x1c\xdf\xa2$\xc9%\xdd\xa5\x02\xdd\xeca\x7fn\xdf\x155y\xc6\x83\x93\xd7\xfb|\xc9\xd7*\xa5T\xec\xe9\xf6\xb5\x83NA0\x1d3\x0bV\x93cX\xfdK.\x07( \x95\xa8\xe4H8\x86d\x07\xac\x02\x08\xb3\x0b\x9a\x15\xce\xea\xa9\xb0\xcc\xc4\xeb\xb4\xbe\x18\x08\xc8\x9b\x1d\x99\xf1\xb5\x96\xec\xd2j\xb6,\xb6Cys\xc6Vz\xc5k\x8a\xf1*!\xbd\xfd\n\x0f\x84-\xc2K\\\xf0\xad\xf1\x10\xb6\xe9\xe6\xa2\x86\xc5`C\xf2B%i}\x01\xe9v\x97\x11*\xe8\xb9_]\x14FZBE\xb6I^\xa7K\xc5\xc5\xa49\"\x1b\x15\xa5\xe68\xcc\xc1\xaeA\xdf\xd2M\xb8 \xd2\xbb\xd8Q\x83\x03\xbd'TH\xb2(\xae\x084\x15\x9dt\xfc\xfd\x9d\xbb\xefO\xc7\xf9\xcd\xa7\xd6\xa1\x94\xe4\x90\x94\x8b\xb4.\xe9\xa2\xb7\xd0 eW\x92\x15\xca\xf8\x19o\x93.\xdb\xa9\x84a\x02\x90\xd3\xb0\x18\x1a\x00\xdd~\xa4NW\x96\xc2\xa9\\|Y\xba`\x845\xa9\xcc\xd5~\xb7+J\xa6'v\xc9\xf2\xf2\xf1>\xa7\xff\xa1\xda\x81\xcfY5\\\xe5}eX\xaca_\xf3m-\xb7NE\x85I\xb2\xe2n\xe2$\x83\x0d\xc9I\xc9b\xa6\xb8)WI\xc2i?\x9c\xd1]\x8c\xaf?'tq\xc1\x13jG//\xd9N\x11\x84%\x0d\xe3\xd2\x1c^\xfe\xfe\xf7\x03!\xfd}Q\xc0\xba(\xe09\xccf\xb3\xff\xd3\xfb\x91v\x97\xe47\xfd?'\xf9\xcd\x8cv\xf4}Yl\x1f\xac\x8b\xe2a\xff\x83\xd9\xac/\x81\xd35<\xa0\xcd>2\xb2\xce\x8b\x07\xffF\xdb=\x84\x7f\x0ed\xcf\xb0\xed\xbftc}\xea\x18\xeb\x7f&WI\xd0`\xe19\xd3\xf5\x14\xa3\xe7\xd8\xd2\xea\xc1\xf7E1[fIUi\x87\xc6\xbb\xa6\x9fr\x8a;\x9f\xf7{Q\xc6\xdc\x0c\xfak\xc7\xa0Oo\xea\x8b\"\x1f\x0c\x9b\xf7\xfb}Q<\x98\xcdf\xfd\x8a\x00\xcd\x90\x1fh~a\xd3\xcc\xd8\x80\xe1\x02mp\xc2\x99\xf0\xea\xf5\xd9\xcb\x0f'\xa7\xe7\xef?<\x1cz\xfa\xda\x85\xa0C\xcd\x91\xeb\x86\xff\x8dc\xf8?\x14\x83;\x0d:\xf4g\xcf\xe1\xdfv\x8b\xd9\xf7E\xf1\xcf\xd9l\xf6\xaf\xfe'I~sD\xcd\x06\xfa\xdd\x8e+\xcd\xb7IY]$\x19e\x8a\x8e\xc0\xe1\xe0\xfb\xfd\x0c:I\xd7\xbd.>\xe6\xdb\xb6\x13F\x02[l\xec\xab\xff\xef9\xe4i\xa6Y@\xba\x9e\x95\x95r\xce\xce\xcd\xcb\xcbFnH\x83\x8de\x83\xf7\xa5\x1a\xbf\x15\xbai\xea3\xed+E\x7f\xdd\xd7\xa8\xcc\xc7\xf4\x8c1c?P#\xe2>\xb5\x1f\x1b\xe9J%/KQ\xbb b~\xba\xe8\x1aQ\x96g7\xd2F\x1e\x1cY\x1a\xf3D\xe4\x17\xd4\xf2\x94t\xff\xf1\xfd.\xb24W\xba\xe5\x169\x11\xeb\xe4\xde\xba(f\x8b\xa4d\x04\x7f~|3\xfb\xf9\x1e\x1f+\xb79\xfb\x863\xeb\xee\x1e\xfd\x8a\x8a\xd5\xce\x0f\xffy\xf6\xfe]\xf7\xdf\xcf\x9f?\x7f\xde\xe76\xfd\xa6=\x95q\xdd^\xd0\xad \x14\x1d\xb7Z\xf7\x15\x91'\xf9\xcd>K\xca.\x96a\xe3\x9a\x05\xe0\xb5J\xea\x08\xc8vAV\xabV]\x1d \xbd\xa7\x9c\xe5:\nd\xcd\x06\xfa\xe9?\xe8P?\xf1C\x8az\x87#\x197\x93\x9b\xeb\xd9\xc0\x00K\x96\x97t_\xb5\xe6\xf9:\xcdH_N\xc9\xddwJ\xca\xaa\xc85KV\x9c\x92\xd7iY\xd5s\xc6\xe9\xe7\xf0\xa4\x8f\xa5\xf9\x8cN\xb5\xfc\xea\xa9]&\x02hz\xbb\xc7F|\xef\x19\xdc\xd3\xad]u(3N\xf3\xbd\xa3!\x16F\xed\xbbdK1\xfd_N\xda\xff\xd3|F\xa9\xed}e#\xf9d-\x0cGu.\xf9\\\xa4\x15\\\x93,{t\x99\x17\xd7\xfc\x12\xf4\"\xa9 \x81\xe5\xbe\xaa\x8b\xed`)\xaa\x8b\xe6\x88\x1b<\xbd\x95\xd4\x96\x1f\x16\x1d\xd2\x05\x92o \xe1\xcb\xa3\x8b\xee\x13[\xa6r\xa5\\\x14\x99\xb8\xb4\xec\xf4\xceN\xfcb\x85\xc9B*b\x81u11\xd4\xcd\xaa\x02v\x1d.\x07:8\xeaI\x1f\xc3\xdf\xff\xf6\xf7\x87\x83\x05\x18>\xbb*r\xdd\x04\xb3\xe1RDOfO\x9f<\xad\xee\x0d\xa6\x0d\x8c6\xac\xce\x7ffvc\xd3\xbf\xb2\x16\x8fE\x13\xf8p\xfaR`\x92\x1em\xb7\x9f.\xe0\x12C4\xec{\xea\xd4\xab\xc2\xc1\x15\xe1\x003\x07\xd3\x95`m\xb8\n4\x9eU\\\x87\x92I\x1d{6\xd7\xde\x94\xce\xbd \xdd{\x16\x07\xdf(\x17\xdftN>\x97\x9b/\xd0\xd17\xb5\xab\xcf\xe2\xec\x9b\xda\xddgt\xf8\x8dv\xf9\x0d\xf0%Z\xa7\xdf\xd4n\xbf\xd1\x8e\xbf\xc9]\x7f\xa3\x9c\x7f\xd3\xbb\xff&t\x00N\xed\x02\x9c\xd0 \x88q\x03N\xe8\x084\xbb\x02\xc79\x03\x07\xc8t\xceA\xa4{p\xac\x83p\x80n\xe80\x0cv\x19\x1a\xe2j,\xaa\xd8\xe88tk\xe9@\xe7\xe1Pp)\xe5\xe1\xbb\xc3\xb1Q0\xb1\x0bQ\xe7D\x9c\xc4\x8d8\xb1#q\xe8J\x1c\xedLTp\xd5\x03\xc7\xe28\xd7\xa2\xc3\xdfft/\"\x1c\x8cZO\x88\x87\x93Q\xdf\xfe_\xfa\xb1\x07\xb9\x1a\xb1\x83w\xb9\x1b\xed#u\xba\x1c\xbd\x9c\x8e\xc3#\xf6H\xc7\xa3\xc3\xf5hs>\xda\xdd\x8fF\xae`]\x90n'\xe4\xd0\x0d9\xca\x11\x89rE\x868#\xf5\xacp:$'sI\x1a\xfa\xef\xad\xa4I\x1d\x93\x93\xbb&'vNN\xeb\x9e\xb48(\x87.\xca\xa1\x93r*7\xe5\x84\x8e\xca\xa9]\x95Xg%\xc2]\x89vX\xe2\\\x96\x1a\xa7\xa5\xce\xb1\x85wm\xd9\x1d\x97h\xd7%\xcay9 ~J\x07\xe6\xe4.\xcc)\x9d\x98S\xba1\xc7\xcd\xb7\xd3\x95\xe9vfJw&\xb4\xf1\x87\xd2;\xc8\xdf2\xa0S\xfa9\xadD\x12\x0e\xffE\xb4\xd0\xbd6\xa8X\xe6\x9aW\x06k&\xea;\xafP@\xad}\\P\xebk\xd4{\x1a\xf5\x8f\x08\x1a\x8f6\xb8\x88\x88\xc1c\x81\x93<\x128\xd5\xe3\x80\xa8G\x015\x8f\x01:\x99\xa2I\xda3%\x05\x8dy\xec\x0f\xf9\xc8\x9f\xdf\xe3~n\x8f<\"\xac~\xe0\x92\xaf4>yI\xa7\xf1\x99\x0e\xa3\xcb\xfe-\x0bO\x16\xa8_\xdcP\x11\x1b\xea\xbd\x8fa\xb6\x9e\x9e\xf8\xc9\xfc\xf01\xccv\x84\xef=\x86\xd9\xfa\xf9\xdbGz\xdb'\xf6\xb5\x8f\xf0\xb4O\xedg\x9f\xcc\xcb>\xad\x8f}2\x0f\xbb\xdb\xbf>\x99w=\x86\xd9\xc60\xdb1>\xf2\x18f;\xce\x17\x8e\x89<\x8da\xb6\x1d\x88a\xb6\x10\xc3lc\x98\xad\xbf/{RO\xf6\x94~\xec\x18f\x1b\xc3lU,8_5\xc2S\x1d\xc3l\xc3\xfd\xd3\xe1\xb3\xeb\xf4M\xbb<\xd3\xce0[\x8b/\xcd\xea\xdf\xeb\xe2x\xacA\x02\x1fN_b\xc2o\x95\xa61\x087\xc4\xed\x17\x83p;0\x95\x0b\xd0\xe5\x04\x0ct\x03N\xed\x08\x8cA\xb8\xe1N\xc1\xd1n\xc1\xc9\x1d\x83\xa3\\\x83\xd3;\x07't\x0fN\xed \x9c\xd0E\x88q\x12N\xe8&\x8cA\xb8\x02\x02\x1d\x8a1\x087\xd4\xc1\x18\x83p9\xd41\x08W;\xf6 G$v\xf0.gd\x0c\xc2\x8dA\xb81\x087\x06\xe1\xc6 \xdc\x18\x84\xebtk\xa2\x1d\x9b(\xd7f\x0c\xc2\x9d\xc2\xc99n\xbe\x9d\x8eN\xb7\xab\xd3\xd7\xd9\x89\x8bc\xec6W\xfd\x9c\x95\xe2\xe2\x94\xec\xf0*\x9a\xcb\xb0\xf2\xba\xac\xde\x9e\xcf]\xa7\xe0\xee`\xd8;k\xadW!\xd1\xda*\xaf\x1c\x06\x9d\xea;\x06W\xf9^\xc0\xc4x\x0cbd\xf5\xa5|G\xe02\x97\xf5\x0dC\xea,\xf1;\x0dZM\xb9__\xc4\xcaR\xd0\xac1L\xe0\xae\xa8\x16\xac\xf5\xe2/\x92\x8a\xccx\xe5\xf6\xb6\xfcs\x13\x8b\x8c^\xc1J\xb4\xb9v|\xda\x93\xbb9\xc2\\\x04\x96'B\xcb\x97\xa4\xde\x979\xf3S\x89Xi\x11\x1f\xdfD\xa13/\xd3&\xed\xbeR\xc2\x86\xc5\x9e\xf1w\xc4\x97\xbf\xa7\x16\x94x\xcb\x82\xbf\x1dM\xcf\xa3\x97\xa4{\xd6l=\xcc\x15\xa9\xe5F\xeb?4m\x1dyo\xb9\x98\xc7.H`\xc3\xcf\xf7[R\xa6K\xf9\xb7\xee\xeb\x88\xdc\xe9rAr\xc9\xac}\xde\xf8\xab\xba\xd6-\x7fZ:#U\xd5\x8e\x9a\xbb\x81\xf6\x15\xe5\xce%\xb1\xb1@\x0c\xbc\x83OeAp\xbdn\x9b\xbf\x84!\x95K\xdb\x14N\xcf\xfd\x8a\xdd\x95!6\xc2>S.\x82\xb8\x8f\xa3\xfd\xc3\xc9\x1a2\xb2\xaee*\x81\xc8-\x90v;s\x83\xf2E\xc7;\xa0\xacX\xdc\x00I\x96\x17\x90\xecvr\xdc\x9d(\xfd\xfe\xe8\x17E\x91\x91\xce\x93\xf4\xe6qv\x90\xd0\xd1\xb2\x19.\xd8\xd3\x08\xec\xf5\xba4_\xa5\xcb\xa4&\xed\xbb\xb2|t\xec\xc3\xc1\xbc\xa4\xf92\xdb\xaf\x14;<\x11/\xab\xc8\xdb\x96\x1e'\xd9]Z\xc7\xc9I\xc5\x86\x9a\x8b\xf2\xf1\xa4Rx\xd7#\x98\x1d=\xa8\xe8\xe1\xcf\x91\xb0\xc5\xd8\xae^\xba@\xe5\xcb\xe6\xe9&/J\xf1\x89\xba\xcd\xbb\xe89\x0ffC\xa1\xa1p\xb4$W\xa4\xac\x06\xb5\xdd\xf1l\x17\x08\xfa,O;\xa9\x1a%1\xac/\x8a\x95\xe4+Ut\x17\xe5\x8a\x94\xaa\x1f\xca\x98\n\xc1A72\xbdD\x90&\xdcY\xb1\x95byh\x9e}_\x14P\x15[2oL\x03\xed\x11\xa0#\xda\xbb\x13\xdd=\x05p\xc3K\xe4\xb84Dt\x1b\xa6r\xeb5\x16n\x9a\xc3\x86j\x17\xf1\xd4\x8d$\x99W\xa2od\x8e@\xd5\xf6Km\xd5g\x08U\xe4iM\x0d\xd3\x9f\xa6PH\xa3\xd3\x9d\xa6Hur\xa69i\xe5\x11N\x1a\xf7\xa7\xbcA\x87Mi2&1\xb5\xf8F\xe4/\xf5\x96b\xc7\xfa1\xadE\xf1I\xb3\x18\xaf\x19\xf3\xdas\xc0\xb2(\xf9G\xecx\xd6[\xbb\xec$\xc84lwT\xcd\x06W7\xa5\xe8i\xb0+K\xb2#\xcc\x8b\xfd\")\x1b\x96\x99\xf7\xa5@\xc3VF\x7fK\xf6\x8fW\xc7\xf9\x0dzC\xd4\x83\x90\x07\xed\xba0\xcb\xcb\x89\x02\x1c\xf4\xa1\x0d\xd3\x045\x84\x873\xe8\xc3\x17t\xbe4D\xe0Bp\xc8B\x1b\xa2\xd0\xc1\xd6\xbf;\xf1\x0eS\x18\x19\xa0\xc0&Ye\x8a\xa2\xaeG\x06%0\x1f\xa9\x82\xbd\x8b|d \x82&\xf0`\xba\x90\x83\x11\xc1\x06\x13\x86\x19\x04\x06\x18L\x19Z0IP\xc1t\xe1\x04\x93\x04\x12\xd8C\x08\xc2\x83\x07\xb4\xc1\x02c\xc2\x04\x06a\x01\x1a\xbf\\\xcf(\x1d\x15\n\xd0\xbb\xfa\x0f\xb8\xf4\xef]\xf7\x07\xdae\x8an\n\xbc\xd6\xd7f\x0c\xd5\xcd\x85\xbe\xbe\xbf).\xf1\xf9\xa4q|\xcd\xf5\xfd\xc8\x8b\xfb\xf1W\xf6\x8a\xaa\x19yA/\xd8(\xb1\x85^\xc7\x1b\xef\xa25W\xf0\xd6\xcbw\xf5\xae\x0fw\xe1\xae\xb6\xf9W\x7f,\xde\xd7\xeb\xae\xc1\xd8\xae\xd4\xf5\xf4[\xaf\xd1\x91\x17\xe8\xed]\xc9\x88Ks\xe3u\xb9\xfe\xa2\xdctE>\x18%\xe6Z\xdcv!\xde\xbd\n\x0f\xbc\x04w\\\x7f\xfb]|\xf7\xae\x9cm\x97\xdd\x13\\s\xf7zkfz\xb2K\xed \xaf\xb3'\xbb\xc8\x9e\xea\n[{y\xdd\xbd\x0d\xec^X\x8f\xbf\xaa\x9e\xe4\x92z\xba\xebi\xf7\xc5\xb4\xf5J\x1aq\x19\xed\xba\x86V\xeepU\xec\xd8KH\xf3\xa53\xe2\xba\xd9q\xd1\xdc\x907\xd5\xe5\xf2\x84\xd7\xca\xd3\\(Os\x95\x1c6s\xd6\xebc\xdb\xc51s\x93\x94\xbb\xe5l\x93\xd4\xe4:\xb9\x99\x95\xfb\xbcN\xb7d\xf6\xba}\xc5\x1a\xe1-\xe9\xbdy\xad\xb1Q\xd57\xae\xf9\x07\xfd\xb7\xad\xa5\x15\xdb}\xd3Zp\xd0\x8a{\xf0vu\x1ds`\x14\x98\xc6]\xc4!\xdci4@\x15s`\xc2\\L\x1an\xc5\x1c\x18\x7f\x87\x14\x87\x11n)\x89`2\xe7\x14\x87@\x17UC\xcdd\x8e*\x0e\x93\xb8\xab8L\xe7\xb4\xe20\x89\xeb\x8aC\xcc\x81\x19|6\xce\xf15@\x17s`b\x0eL\xcc\x81\x19\xfc\x10s`:\x10s`b\x0eL\xcc\x81Q\xd1M\xe84\xe40\x99\xeb\x90\xc3T\x0eD\x0e1\x07&\xe6\xc08\xdd\x91\x02\x8f\xdb))>\x8c90\xbf\xa9\x1c\x98&62\xbfl\xa2\"_\x91\xbc\xd8\xbe\xbf\xce \xde\xa9\x99\xacV%\xa9\x06nE[\x04\x98h\xa2$\x9e\xc8\xbf\xb19/\xae\xa9\x11\x0f\xbb\xa4\xac\xd3%\x15;\xb0\xa2\x84\xc9\xe0N\x81u\x91dI\xbe\x1c8=Q\xa9)\x0c\xdf\xd0u\xa99\x17%[\xb5\x02\xb8\xf1Ss\x80\xe7\xcb\"m\xab\xf2'P\x17\x97$\x17RP\x19\x18\xdb#\xf4\xec\xc2\xbaTL\x8dw\xef\xcf_?cr\x9b\xff(\x84d\xca\xce:'y-\x96xs>T\xd69We\x1dlU\xba\xc9\x93z_\x92\x8a\x05'\xa6%\xd7\xba\x9bbS\xb0\x15\xa6\x89Th\x06\xd4.\x91fHU]\xee\x97\x14]\xbbY\xd9\x96\xcce\xe1\xa5\xce\xac\x16\xa5\xd8\x87\xd2\x8d\xa8\x9bd\xe6\x86\xb9$9\x0bZUD\xbfD(\x97\x0b\xe3\x18\xff\x9b\xba*Ze\xd4\xc7)\xd9\xea\xca\xc1\x1an\x8c\x8fy\x8a\xcf[\xe9\xad0\xf7\x92a\x0dZ\x0e\xf2\xf1\n\x95\xd2u\xean\xd2+\x92\x8b\xaf\xf7yZ3\xf7*\xec\x93\xba\xd8>\x94[\x83|\xde\x159\x19\x16\xae\xb7\xdc%\xa0\xb2'$\xde.\x99\xbb\xe2\x9a\x1f\xea\x9f|\xd5\xfe\xce'<'\xdc\xa5\xdd\xc1P&\xa9\xb0\xa5\x16IE\xe6|\x18,!\x81\x87\xba\xd3\xff'\xd4\xc0\xea\x8c\xb5a\xfe\xfd\x8a\x8f\xbb\x8b\xf0\x89`\xc5sx\xf2\xd5\xff\xaf\xe9\xbfE\xde\xfd\x969\xa2\xe5\xce\xeb\xf4O\xcf\xcc\x94\x7f\xad\xe7uY\x92\xa4&\x90\xb4}\xd3\x8f\xee\xd3\x8f\xeew\x10\xf6=GM\xff\xcf\xe1;\xaa\xbf\xf6\xd53x\x02\xb4\x15\xa7\xef\xbb\xde<%Y\x9aT$\xecN\xa6\xb7\x96\xe4\x8b\"\x1c#O\xf1\xc9\xd2\x8a\xd1-V\x91\xfcM\xe6puV\x92k\xc33\x0et&=\x11\x9b\xbe\xef\x10I8\xd2\xee\x1e\x90\xc2m/\x98(\xe6>]\xca\xfd\xa8\xdfqoI\x9d\xac\x92:\xf1\xd8p-\xf5\xb6m\xc7\x88\x9aSj\xc2\xf8\x8e\xbe\x0b\xd3\xe8\x98Q\x17a\xa3\x04\xc4\x00\x9b\xba\x109\x0c\xc5\x06\x07\xbd\xf0\xe0\xa0\x17!\x1c\\#\x1a/N8\x8c\x14*zN\x0f\xbb\xf1\x115\x1cF\n\x9c\x01>.\x80\x0c\x0ek_\xe1\xc3a \x828\xe86\x04\x87\xc1\xb6\xe86\xd0.\xec D\x13\x07\xb3\x895JLI\xe48a\xa5\x8c\xa9#L\xfa;S\x8e\xb0\xab\xbd\xe8\xf0D\xdf\xb0,\x9a\x94R\xba2|L\x05e+\xd1\xc6\xfd\xbe\xd9\xdf\xf8R{\xd0^\xde\xd2_Z6\xb1U)\xd7L\x07\xdfs\xf8\xaaY\"\xab\xb4\xdae\x89+\xdf\xc9<-\xa2}\x93n(d\xd6~\xb3!\x15\xb5\xc8\xc4N\xa5\x93\xd3\x909l\xceso\x96YJ\xc7'I\xa3\x12\xcf\x87\xae\xfb\xfa\xb4\xb9\xfb\xfd\x19\xbd\xcfDi\xf7h\xa2\xdc\xa83\xdb\xfd\x01\xd9<\x83\x97\x0c\x11\x1c\xd3-%\xb1T7\xdbE\x11\x9e\x0d\xc3\x9b\xb7\xd9\xa9\xb4/\xf17y\xf3]]\xd0\xc3t\x91\x03\xf9,/\xf5\x185\xc7\xe7\xef\xdf>\xe4\xa1\n\x1d\x84K\xd5\xcd\"\xd6@\xc5\x1cV\xbc\x13\xc1b\x8f\x0c\xc3}\x99\x06\x0f\xf0\xe3\x87\x13\x9e\x06\xbb*\x96{\x16\x04\xf1\xa0\xa02\x1a\x8a\xf5\xfa\xd1\xf2\"I\xf3\x87\"\x11\xb9\xb9\xcai\xfcB\x1d4i\xce\xb5\x0e\xcb\xf4{/.\xc9\x11C\xf8\xae\x1d\xc2\xfc\"\xa9.\xc6\x8c\xe3\xc7\xa4\xba\xe0\xa2\xac\xbaH\x9e~\xfb\x1dP\x84\xcc\x83\xd6\x0enWP\x9d\xc9\xceV\x1f?\x9c\xd0\xd3\xcc}\x91\xfa\xa5\xe4\xef\xf1\xc4~\x9e\x12\xd3\xf93\x9b\x1e\x89j\x95\xae\xf2\xfb\xb5\xb8w\x0d\x18\xb4~\x8fJ#\x0b!3E\x8b\x04c\xbb\x9dv\xaaN ,\xb7\x8a\xe4\xab9\xc9\x93EFVw\xc9$\x1b\x90\xd4\xfd\xbe\x9f\x13l\xb7v\xceH\xbez\xcd\xd1\xf1x\x8c%\xf7 \x08C%Qx\x00U\x9d\xd4\xfb\n\x1e\\_\x10v\xab\x9c\x0c\x07\x01i\xa5Z\x00\x14\x01m\xddQ\xeff\x82^\xd1\xe9\xa6\x02y\xf5\x0c>VL\xbau)LsY\x1b$\xa5'.\xf9m/\xee\xbcd\x17\x89UZ\x1d5\xfe\xf1\x9c\\g7t\xcf\xd2AtG$\xdc\x15\xdc .\x9au\x90\xf1 T\xf0\x9f\xd5E\xc9\xdc\xc5<\x1c\x82_\xf0o\x93<\xdd\xed\xb3\x8e\xbb9\xad\xba\xd2\x80_\xff_\x0foJ/ \xd9\xf5\xf3\xa8\x8f\xd9\xbd\xa7\xbaY\xfep\xc4q2\xaf?{\x8c\x91+\xedE\xb2\xbc\xbcN\xcaU\xd5\x8b\xc1Pl41.X\xa7\x19i\xf4\x94\xb8\xb1\x98\xdb\x16\xb91U\xfb\xd4Z\xa1E\x1aKt\xefu\xea\xb4\xe8v$\x7f\x9a/\xcb^p\xef\x88\x7f!\x19\xe1V\xb9SG&\x9dk\xce\xf8\xb9\xcdv\x9c\xc0A7\xb5\x8b\x0e\xeb\xa4\x1b\x0cMN\x94\xb4\"\x9a\x7fS\xd5\x94\xf1\x13\x10\x15>\xcd\x02\x8dO\x8b\xfa\xe4\xda\xc3D\xf9\xf6\x00\x88\x9c{\xf6Q|Z\xb4yZt(\xbf\x00Q\xa4\xa8\xd3L`\xfbp\xfaR\x12\xa9)[\xd4\x17\x9b\xa2q\xa8\xc8\xecKL\xd4n\xd0\x08B\xc3\xac\xc7\xfb \xcdJ\xe9M\x19f\x95\x88&\x9a'h-K\x83\x9d\xa6\xa5\x11\xed\xbd@\xb6\x8a\x8bS\xdbH\xdf\xb0?z\xf7\xe4\x1b\xdc\x9e`\xd0\xe3`\xf2\xf3\x18\xf49Xt:\x98\xf4:\xd8D\x99lgw \x02\x84\xbbE\xb5\xc84w)-\x98\xdc\xa3\xd0\x0cD\xef\"\x05\x87\x9b\x14\x90#\x9d\xca]\na.S-\x1e\xeb\xddL\x0b\xfe\xaeS\x18\xe9>\xd5\"l\xeep\x0c.T\x08v\xa3\x82\xd9\x95\n\x96M\xc6\xc1\xe0R\x05\xf7\x06\x99\xcc\xb5\nN\xd3i\x02\x17+\x80\xaf\x9b\x15`bW+\x0c\xdc\xad`\xe3\xb2}[\x8eq\xbd\xf6PuV\xddW\xca\xd2\x1a\xb8`\x01M\xef`\nG\xbac;(\xb4.Y\x18\xb8e\x01M\xab\xd3=\x0b0\x8d\x8b\x164nZ@\x939X\x02\xa3]\xb6=|,\xd7l\xd9\x8f\x8e\xc3\xbbn\xc1\xe5\xbe\x85\xbe\x0b\x17\xc2\x07?\x91;\x17p.]p\xb9uA\xeb\xda\x85Q\xe3\x1b\xe5\xe6\xed\xa1\xab\x0b\x93\xab\x17 \xc4\xdd\x0bn\x86\x98\xe5\x81\xbf\xeb\x17t\xee_\xab\x19\xae5\x8f\xad\xc6x\xb7\xf5c\xa5\xb9\xe7\xa1\xad\x0dS\xf2\xf7uqMS\xb0\xc6}\xdb|Z\x7f\xd7 x\xae\x8b\xc5\x1d$0Q \x1d\x87\xc1q\xb5K\xcb-Y\xfcz\x8f\x9e\xa3\x99\xcbt\x0e>\xde\x0e0\x8d9\xe5\x0e\x90\x89S\xef\xe0\xef\xb8\xc3/\x07\xdb\xd0G\x07\xea)\xd8d\xd0\x9e\xf2\xc7\xd1\xb1{\xeaf\x10q|\xbaUi\x0b\xe7S\xbe\xb7\xca\xc3\xe8\xea\x8c\xae\xce/\xc3\xd5\xa9Q_\xca\x8aT\xea\x902k\xa4\xd3\xa2\xe3\xc3\xe2Eo\xd1\xef\x0e\x18\xf4h5\xda\xc5u`=jt\x86YM?\x83C\xccvZ\xb7\x06?i\x95\xa4]MZ\x14\xa5\xf3\xec\xef\xd6|\xf2\xab \x1dd\x0e\x17\x99\xddI\xe6v\x93\xb9\x1de\xd8QO\xe9,\x9b\xce]\x86v\x98\x85\xba\xccB\x9cf.JQn\xb31\x8e3\xab\xeb\xcc\xe5<\xb3\xba\xcf\x10\x9bhR\x17\x9aK)\xc3Tn\xb4\x10G\xda\x01\\i:g\xda(c}B\x97\x9a\xc5\xa9fp\xab\xe1)\xd7L\xec\x04\xce5\xb7{M\xe7`\xc3S\x8dr\xb2M\xe7f\xd3;\xda\xf0\xe4j\x96G\xb8\xbbm\x80\xaa\x131\xa9s\xb8\xf9\xb9\xdc\x10N7\x8d\xdbm\x14+&t\xbe\xa1\xddoN\x7f\x13\x18]pc\xc7:\xa5#\xce\xe5\x8a\x0bu\xc6!\xd8c\x93\"a.9\xadSn\xd0\x95\xc2Ti\x95\xb7\xc5G\x98\x9f\x82\x89\x1b%\x9c\x8eI~\x114T\x92MZ\xd5\xa4T\xeb\x1a\xd3.c(Q<_\x7f\x89\xe7\xeb\xc1\xb1\xd6\xd35]\x05\xfa\xa6'z\xcb\xcfcG\xe8\x83O\xc1b[\xff\xf2\xd1\x1f\x86\xe8\xeb\xb6\xdd0\x02\x1b\x10\xaad\xcaHlhN\xd7\xfdhl\xd0Gd\x83\x93\xc0 \"\xb3a\xea\xe8l\xd0Gh\xc3\xf8(\xed\xfe\xfabbt\x18\xa9\x0d\xa1\xd1\xda=\x1c\xfd\xd8m}\xc46\xb0I\xb2Em\x83q\x0d*\x93\x1b\x14\xbdm\x15[\xbd\x17\x1a\xbb\x98\x872\xaby\xa4\xf0\xf3c\xdaGW\x8a0\n\xac2\xaa\xb3\xe8\xbc\x05U\xcc\xe7\xf0\x92\"z 2\x90\x1e\xd1\xb8\x8a\xc6\xd5]5\xae\xfeW\x91R\x1a\xd9\xe1\xb8\xbch[47\x16\x1c\x9f\xf6<\xf5\x07\xab\xe0\xda\x89\x8d\x13S]t[+\xf82\xbc\x8bd\xcc=\xf8\x01S]*9\xf51\xe9E\x81(L\xfb4\xdcia\xaa\x9a|Fy\xa6\xacK\xf5a\xca6\xcec\xdd\x84qHkP\x12\xda\x06}\xdc\xaf4;g\xcc\x9d\xf1\xd9~\xb7\xcbn\xde\xaf\xbd%o_\xcay\xec$\x8d85\xac\x98\x980\xa3[e\xbd)\xc3d\xcc\xc86~)3\xe7t\xb7\xf0\xa6\xde\xeb\xa3b\xcd\xa2^\xbe{zYHZ>A\x8d>\xe6\xff\x12\x17FL\xff\x8a\x06N\xf5\xabp'@\x17wZ;.f\xfe\xb7\xc1\xec\xe6rG\xb1\"[\xe3\x91\xdd\xcd\xb7T\x0b\xb6p\x01.\xf1\x05\x17\xb0\xaa?\x8f?\xd9je/\xce\xef:X\x14\xe7\x9f+\x1ed-]\xa2\xcc\x8e\xe0g\x0dn5\xfc\x07g\xc0\xecG\xa6\xf2\x7f\xffd0\xc7\xdc\x9d\xc3\x1e6\xce2:@h\xdc\xa7L\xc4\xcc\x00\xfe\x8b\xdc/ \xfcc_\xd5\x90lJB\xa8\xc9\xa3}T\x96\xa7\x95\xb1\xc7\x9b\x06\xfd0\x1b}K\x92\\P\xcc\xc9:\xde\xedX\x90\xfc\xaa \xfc\x11TnT\xb1\xd8\xbf\x8aPr\x06\xfe\xfaW\xfcl\xdaI\xd2\xae\x08\xcf#\xa2\x06R\"^\x8f\x14x\x9a\x08\xc1\xae\x0c\x95\xc2 h \x0c\x1bC\xd8:\xf0\xf6p4\xc7\x9a\xf9UQ\x93\xb9\x9e\x10\x0eV\xbb\xc4e\x99\x000\xfcZ/\x06\xb8\x91\x03\xa2\x03\x90h\x8c\xbf\",\x15\x0e$\xdf\x1bRQ%<\x82\xb3\x93\x1f\xde\xbd~5\x7f{\xf6\xc3\xfc\xfc\x7fN_\xcf?\xbe\xfb\xf3\xbb\xf7\xff\xf5\xce\xb3\xd5\xe9\x87\xd7\x7f}\x7f\xfe\xda\xbf\xd5\xcb\xf7o\xdf\x9e\x9c{\xb7{\x7f\xfa\xfe\xec\xf8\x8d\xa5\x99\x08\xf8|\x160>\x97O\xa9\x0bg\xe9&'\xab\xb7\xd5\xe6\xbc9a\xd7\xe2\xfd\xd8\x8a\xfd\xd4}4R\xff\xd2t\x0b\x8d\xd2\xd4<\xb3\xa9\x80\x91\xff\xcf\xe0\xafE\xady*\xdd\xd9\x9a\xf3\xf3\x19\x9c2\x15\x99df\x14\xba\xf3\x91\n\xc8\xc5\xe9\xb2\xd39\x94\xc5>\xd7\xc6\x8cKp\x1f\x088t\xba\xfb\xfa\xa9\xf1;\xfdaK\x05\xc4\x1e\x07\xe4>\x07\xeby\xa4\x05$K\xc1uF\xe9\x82\xf3\x00\xa7\x02r\xd4\xe01r\x00\xebQ\xaf\xf7!r\x9e%\xe0\x96\x97\x04\xcc$\x80\xdfD\x80\xcfd \x8e\x8f\xda\xcf\x87\x87\xc9\xfeg[R\xd5\xc9V\xe3f\xea|\x84\x1b\x94\xcdS\xa1Bs\xfe\xd2[\xf9*x\xf6nee\xdbq\xef&i\x08\xd8\xf5\x84\x93\x1b\xcdu\x9d\xbb\xcb)F\x8aUQT\x1b\xa8\xd9\x87\xf4\xd0\\\xd4\xe4\x88\xfe\x0fw9\x1cAQ\x02\xff_f\xdc\x18\x91\xb1\x83w{\xb4\xa6t\x9a\xf5TG\x97\xe9~fV\xd4\"ZQ\xd1\x8a\x82hEi\x01\xb98qj.ZQ\x80g)\xe0d0\x87hEu\x003 \xe07\x11\xe03\x19\xd1\x8a\xc2\xf6\x1e\xad(\x0f\x15ug\xad(\xb6\xed\xe7WE\x9d\xe6\x9b9+\x86e\xb7\xa8\xacLso\xf5v]\x1c\xbe/\xe7\x96\xf3\xe8\xc5\xb6\xd50k\xe0\x95t.\xd2\x85\xf0Z\xb8\x16[7\xabt6r\xf7z\xc3$-*a\xce\xd4\xd7\x05m\xbf\xce\xd2%\x0b:\xa2+F3\xc7\x195\x12\xe6\xbc\x8e\xc7<\xa9\xebdyyH\xd7f\x87\xa2\xb9!\xd4\x81\x03B\x8b\xb9\xfa\x82\x86\x19\x08\xcd\x89\xe8\x0f\x90}\x82&\xdaD\x0f\xc8N\xc1\xa3c0\xc5\xab\xe8\x01\x13\xc5bh\x89\xa7\x1d<\xe9\x07s\x1c\x8c\x1e\x10\x1b\xb5\x0fr\xe3jcf\xf4\xa0\x8d\xa4\xd1\xc3m\x10\x84\x11+}\xc0G\xe8\xa0\xd0i\xa3x\\q;z\xf0\x89\xe6A!\xecG\xfc\xd8c|\xf4\x80\x89\xfc\xd1\x83>\x1eH\x0f^\x8b\xc5}\xaa\x93\xe0\x85\x16\xa3/\xbb0\x8c>2|\x17F\x84\xdbr\x95`\x89_\xd2\xc3\x81\xe5\x16\xf6|\x02\xfe\xcc\x01\x9c\xc9\xa9\x82\xe7\xe1Q\x82'\x97 \x80S\xe0s\xa8\x94\x80=\x0c\xf4\xc1ouK\xf0\x99L\x08\x9bP\x08\x99T\xefCh\xaf\x99\xeb0*\xc1\x1e5\xa6\x07O\x1ex\x8e\x1d\x17w\xa6\x07C4\x9a\x1e\x0e9\x0ck\xec\x98\x1e\x0eI\x8e9\x8dN\x0f\xd8\xc09\x14\xb2~p\x9d\x1e\xdc!wz8$\xdblA{z8$5\xfa\xb0?=\x1c\x92\x0eG\xe0\xa0\x1e\x0eI\x90%\xf4P\x0f\x87$\xc6\x1d\xbc\xa8\x07{H\xa3\x1e\x0e7\x0e\xcfh@]\x08\xa0\x1e\xb8\xaaq\x0d\xce\xc36\xf1\xb1I\xee\x88e\xed\xbcG\x91\xe0k\n\xe1\xfc\xa3\x12\xa2Im\x84hR3\xf0[\xd6\x12|&\x13\xc2&\x14B&\xf5\xb6L\xea6\xe9\x1a\xc3\x05>z\xf33\x06*X\x1f5P\xc1{1\xfa/E)A\xe6\xeb,\xd1\xd4R7A\xd0\x84\xbb\xe3'Tx\x04/\xde\xbc\x7f\xf9\xe7\xf9\xc9\xab\xf9\xf7o\x8e\x7f@\xc4\x1a\xf4\xa1\x8f\xe1\xf8\xc5\xd9\xebw\xf6\xf0\x08\x15\xfa\x08\x10\xf1\x15*\xf4\x11\xbc;\xb1\x85Y\xa8\xd0\x04]\x8cc\x83\xdf\xb9\x81\x03\xdf(\xab\xef\xb3d\xd3y\xf7\x80\x17-x\x91-\x8b\xcb\x93W\xce\xf8\x0b\x15\x9a-\x05)\xdeu\xe9y\xf7\xa9B\xd0\x1a\x0d\x12I\x88Ka\x15F\x91\x86w\xbbq@]\xa6\xaa0\x8a>4\xebB|\xe3\x00/\x99\xf9y\x96nx|\x10\xd5\xf3\xd2y\xcc\xeegeR\x03\x12]\x9aC\"p\xba\x1c\xc6\xbe\xf4r\xacj\x1aFsG\xc8\xf2;\xa4\xd9}\x9d8\x82\x8c\x1a\xb3[\xbc\x82\x90\xc8|\x8e\xf6\xb8m\xa6\xbe\xddC\x15A\x84\x1a9\xf5\x0dV\xcb\xb4\xb4\xb9V\x1e^\x83\"\xb5'r$\x1c\xb0\xe3\xe1\xe0%\x87\xbc7\x92\xe7&\xda\xed\x17\xc3\xc2U&\xf0b\nx3\x86\x02Y=\xfd\xf6\xdb'\x7f\xc2~\x1e\xc0 \xf0g\x12\xb0\xb2C\xcb\xdd\xd3o\xbf\xbb|r\xd7H\xf3\xd5\xce\xa7\xfbE\x96.\xffLn\x94\xc3\xfc%\xb9\xe9\x96\xcb\xc2\xeb\xd7}ExY\xa3\xbf6\x9b\x15\xd1\x12\x13i\xa2\x8273}\x0f.\x8d\xf3eW\xa6E\x99\xd6^{\xe2 tI\x8a\\\x84xlK\x9f\x0d\xe9!\xa7<\x99\xe0\xb5\xc6=$\x94\x07#\xc0\x93\x19\xe0/\x9b<\x99\x02\xbe\x8c\x81\x10\xa9tx\xa2\xfc\xe4\x11V\x1aQ9\x83B\xe8+\x8b|%\x91'\x03\xf1\xbb\x1dBe\xd0\xc1(\xc2\x07\x056-\xf0\xa4\xb8\xc9\xa0\xf6j\x91\xcf\xed\x0e[D\x8f\xee\x9e\x167?'y\x9d\xe6d\xee\xb68\xdd\x96\xa6\xc3\xc2D )\x9chBIh\x04\x878 \xf79J\x1e\xa3\x06 \xe8\x81\x82\x8f\xf4E\x0f\x18\xf0\x83\x06?Y{\x18\x12\xb0\x92\xd5G\xa6\xea\x9f\xc7T\x01%M\xf1b\x02\xcd\x1c\xf7\xc6\xe5\xe0)5'\xec\x1f/!\x11\x9d\"\xbas9\x8a\x17,\x1eW)\x1e\x97&\xb8\xeb\x11\xef\x8b\x10e\x1e\x9d\xb7\x18\xee\xbb \xd4-\x84c\x1a\x1c+\xd3\xa2\x1a\x90\x88\xcd*\xc1z\x03\x80\xc4\xae![\xd13X\xb7\xbc\xde\xe1nVY^Nt\xbd\x93\xbc\x83\xad\xef.\xd7\x17c}\xc1\x83\xe4+h\xeb\x9926\xf1\x1f\x8e\xf8!\x95\x12\"\xc2jv\xbdzb\x02\x0d\xaf\xf9-\xea|\xf1\xfa\xfe\x0b\xb5\x94\x98\xb3z\xea\x0f\xa4f}\xbe\xb8\xe1\xb5\xa9\xbc+x\x0fU\x93\x8f\x86\x1d]\x07\xce\xaa\x82\x02\x14\xa4A\xed\xd8U\x8eM\xddL\xa9q\xad\xeaE\xabZz\xf93\xe2\x9b\xfb\xdd\xb7Bw\x19I*\xc2l\xfdO\xd5\xea\x92G\xd1\x7f\x824\xafj\x92\xac\xee\x07M\xeb4saL`\xc2\xa6+\x8d0?,\x89Gh\x13\xc1\x98\xc3cL!\x1a\x8b\xdam\x98\xe3S\x7f4i=\x1a|\xb8D\x1f\x9f\xb4\x1eW\x91^p\x15\xea\x05\x8f\x94\x1ds\x82\x8ee*L\x1e'\xd4\xa6\xd6M\x9c>\x8d\x06\x85\xce\xa4\x93\x1d 1#v\xc6\xa1lg\xc4q\x02\\\x94\x83\x93z0\xcb\xf8\xe6g\xe7\xf1\x02\x10G\x0cpF\xb99\xd9\x05n\x96!\x8e\x1c`\xd2\x0d\x12\xdc\xe9\x1d\xa8\x95h;\x10!\x125,i\x19\xa1\xdd;3\x05B\x11\xf7\xc7\xe5\xcc\x81\xd0\x8aO\\6C(\x8d\xae\xbc\x84P\xbc\xe6\x0c\x83P\x8c\x88\\\x81P\xd4\x8e\xa8\xffP\xb4\xb8\xf8}w\xb4~X\xff\x13\xc5\xdd\x0f\x9fH 0\xd1\x06\xa5x\xa1\xc1\xa3\xbf\x021^~\x84\x9f\x121f\xcf\x04%za\xe22\xbd\xe0(\xd5\x0b\x93\x94\xeb\x85v\xb1\x8e/\xd9\x0b\x8e\xca\xbb^K\xc7\\^b\xc4\xfa \xaeH\xe1Q\xd6\x17\xdc\xbd\x01\xa2Gp\x96\xf8\x05\\G\x80\xec\x0c$:\xeb\x17\xce\x9d\xd8\x05\\\xc0uX\xd1:}KL\xe1:cKdpuP\x01;\x18W\xc4\x0ePbL\x85I\x8b\xd9\x81OA;\x18]\xd4\xce\x84\x01_\xd8\x0e\xd0\xc9Z\x1e\x0b\x1ac\xd5s@%h\xe1\x8e\x12\x1cLw?C\xc0&e!e\x07x\xc8\x0fp\x9ejZ\xf0`;\xb84|\x1fPGE\x15<\xb8\x01\x9e\x1c\xa1\xe0\x95p\xe5\xb3.$\xe0\x97\xa6\x04\xecD\x81\xffd\x81\xef\x84!\x0f\xaa\xda&\x98\xa4*\xe7\xd5w\xf3!~\xa0.\x1f\x8b\n\xa8+\x9c.\x04P\xe2d\xb5GA=\xf0\\\x87x\xf9\x84\xce\x07\x99\x9e\x03>*t\xd2b{\x14\xbc\n\xee\x81\xbb\xe8\x1e8\xcb\x17\x03^\xaea\xe5Y\xb4\x10\xa3\x85h\x86h!\xe2\xd5p\xb4\x10]\xe0\xc1v\xc0\xeb\x00\x0e\xd1BD\x00v\xa2\xc0\x7f\xb2\xc0w\xc2\xa2\x858\x80\x00J\x9c\xac\x8e\x16\"^\x85~\x11\x16\">\xc6\x18\xf0\x0c\xc5\x89\x12d\x99f\x98\xba_\xd4V\xf6\xec\xd1\xb5\x85\xb1\xebf\xc2\x12\xce\xe0]\xc6\x19\x02J9\x03N\xf3a\xb4\x1d\xba\xac3\xe0\xfa\x04d\xbf\xe0S\xe2\x19\xf0}\x83G\xff\x80.\xf7\x0c~\x04\x80'\x11\xe0W\xfa\x19\x00\x1fO\xa5\x07\xcf\xb1@\xc0x\xc0\xb7\x144\xe0\x05@\x1f\xa4@@W`\xe6\xe0Q\x16\x1an\x998\xac\xe8\xea\x03.V\x0c\x8d\xce\xf8\xe0;\xea\xe4)\xc1\x11i\xa6\x07l\xfc\x19\x1a\xa1.N\xcd\x1d\x95\xa6\x07l\xac\x9a\x1e|JLC\xc8\xc2\xc3\x9d\xa0%x\xa3\xc7\xea\xfc.`\xcbN\xc38\x82\\&\x81\n\xde%\xa8\xe1\xf6d\xa7\xcf9\x0f\xc2\x98\x06x\x13\\\x85\x80\x83\xba\x84\x00\xeeA \x07\xc1\xf7\x00/\xc1\xe7\x00\xd5\x07\xff\x9d!\xc1w\xc2!|\xd2!t\xe2\x83\x0e\xfc\x12<\x0e\xfe\x12\xdcq\x8ez\x08\xe0K\x00?\xf0\x91\x92z\xf0*k\x0d\xb74,gt\xa3\x1en\x834|\xbat\x0b\xd8pO4BST\xfd\x10p\xc1\xa2z\xb8\x0dv\xba\xc2M\xf5p\x1b\x94\xf9\x94\xc4\x86[\xa2 \x11\xf2\xaa\x87\xdb \xce\xbbT6\xdc\x12a\xb8\xb0[=\xb8\x83q\xf5p\xf8q\x85\x9c\xce\x90Q\xbf(\\\x98\x8a\xdc\x80\xae\xca\x0d\xfef\x99\xaf9v\x07\x0f$\xa8\xab> !\x16!\xde\xb5.!\x9eD<\xf6 \x87x\x121\x82\xff\x96\x90\xe0;\xe1\x10>\xe9\x10:\xf1\xb7}\x12\xf1\xab\xfe\x0d\x0dG0\xf5K% \xeb\x98J\x08Z\xc0a\xcb\xd7Yn\xc2\x0c\xc1\x0b\x03\x17\x86\xa4\x82O\xf1\n3x\x94\xb50\x83G\xc1\x0b3\xe0Ja\x98\xc1\xbbH\x86\x19\xfc\x8f^\x1c\x90\xf56<\xb1:\xabs\x98\xc1\xfbJ_\x85\xe0\xf5\x1c,\xe6\x10\x17\xa7C\x18M\xa6\x9f'\x95\x03:F@\x85\xd1\xb4z\xb14\xc4x\xe7\x80-g\xe2\x81\xd2\xa3\xd28\x04\xd2\x8e.\x96\x82\xc2f,\xa8\x82\xaa:\x0e>\x95\xc7\xc1O\xc7\xf9h6wM\xc8.\xf8ir\x0f-\xee1:\x0e>c\xe4\xe0-\xe3\x826c\xc0FD\xd5\x9c\xec\x827\xb3 \x88a\xe0S\x97\xb2\x0bA\x8c\x830\xe6\x81_\xed\xca.\xdc.\x99!V\x03\xb6\xd6\xa5\x07\xca\xb0\x8a\xe6\xe0U\x03\xb3\x0bAL\x0e9\xb0\xed\xfc\xeadv\xe1\x16h\xdc!\xab\x9d\x83\xff\xf6\xf6\xdd\xd8\x9er0\x809\xde\xfb\xc3S\x02z2\x08\x02\x98\x04a\xb2/\x80Y\x10\xc20\x08\x95z\xb7G\xa0\xbf\xbc\x9b\\\xda\x85\xca\xba\x10I\x17\xc0X? \x02cd\xdc\xc1\xa9\xf3\x8b\xe3mZ\xf9\x91\x85# UY\x1d\xf0\xbd\xe3z\xf5\xa9\xb2\x0ehK\x1aaA\xa3\x85!^\x04\xa25\x04\x92\x83\x1c\x00\xe7\xb2\x92\x8b*\x16\x0do\xbf\xc2%m\xc5\xa2\xe1\xdd\xbfb\xd0\xc5\xa2\xe1}p\x19-\xd1\xaa\xd4-\x95X4\xbc\xff\xa3\xc7\xb8\x9cY$\xb1h\xb8\x05#\"\x83\"\x14\xf5\x97\\4\xdc\xad\xcb\xfb\x1d\xb0W\x88.\x08\x14e\xbaI\xf3D(\xda\xe63\xe9\xc9>\xd2\xa0\xe2\x83\xa5\xd6dBm\xdb\x17\xea\xd3C\x9a\x06'9\x9c\x13\xf9\x04\xd1\x11\xd4\x17\xb4oQ\x99\xec\x13eY\xf5\xe9\x08\x16\xfbZ\x1a\x08g\xaf\xfe|\x04\xd7:\x11&\xde<\x82\xb4\x86\xba\xe8\xf7\xad\xeb\x9a\xda&\x0bR\xd7\xa4\x84\x8f\xffm1\xb0\xdd\x99\x15\xed\x08biu\x88\xa5\xd5ciu\x97\xed\x14K\xab\xab\xdf\xb8\xac7\x0e\xb8\x88\xf5X8\x137^\xb7\x18S!\x16\xcet_\xfe\x83\xdf\x82\xc6\x9c}8\xa0\xb2\xe9p\x07.\x0e\xb6K\x14\x15\xb0YsH\xd9\x01\x1e\xf2\x03\x9cg\xbf\x16<\xd8\x0e.\x0d\xdf\x07\xd4\x81Z\x05\x0fn\x80'G(xe\xbb\xf9\xac\x0b \xf8\xa5)\x01;Q\xe0?Y\xe0;a\xc8\xe3\xbc\xb6 &k\xcd\xe9\x9co>\xc4\x0f\xd4\xe5\x89R\x01}\x17!!\x80\x12'\xabc\xe1L\xbc\n\xfd\"\ng\xc6\xd2\xea\xbe-\xa3\x85\xd8B\xb4\x10\xa3\x85h\x03\xa4\xec\x00\x0f\xf9\x01\x1e\x86\x87\x07\xdb\x01\xaf\x038D\x0b\x11\x01\xd8\x89\x02\xff\xc9\x02\xdf \x8b\x16\xe2\x00\x02(q\xb2:Z\x88x\x15\xfaEX\x88\xbf`\xc0o,\xad>\x84XZ=\x96Vw}\xe7E\x00x\x12\x01\xb1\xb4:\x07\xa4\x00\xe8\x83\x14\x08^\xd5\xcbciu7\xc4\xd2\xeaz\xc0F\xf4\xe9!\x96V\xb7\xc3\x08\x82\\&\x81\n\xb1\xb4:\xd6\x04W!\xe0\xa0.!\x80{\x10\xc8A\xf0=\xc0K\xf09@\xf5\xc1\x7fgH\xf0\x9dp\x08\x9ft\x08\x9d\xf8\xa0\x03\xbf\x04\x8f\x83\xbf\x04w4\xa8\x1e\x02\xf8\x12\xc0\x0f|<\xa9\x1ebiu?\xd2\xfc\xf2\x9b9`\x83b\xd1\x08\xf1U\xc8p!\xb5z\xb8\x0dv\xba\x82r\xf5p\x1b\x94\xc5\xd2\xea\x9e\xc4\xc5\xd2\xea\x1d8\xfc\xb8BNg\xee\x00`\xbcd\x89\xa5\xd5\xfb\xe0ov\xa1\xae\xfa$\x84X\x84x\xd7\xba\x84x\x12\xf1\xd8\x83\x1c\xe2I\xc4\x08\xfe[B\x82\xef\x84C\xf8\xa4C\xe8\xc4\xdf\xf6I$\x96Vw\xd6V\xd0C\xf0\xc2\xc0\x85!\xa9\xe0[\x9dA\x0f\x9e5\x1b\xf4\xe0Y\xc9A\x0f\xf8\xfa\x0ez\x08\xaa\xfa\xa0\x07\xff\xa3\x17\x07d\xf1\x08O\xac\xa8R\x13z\xf0\xbe\xd2W!x=\x07\x8b9\xc4\xc5\xe9\x10F\x93\xe9\xe7I\xe5\x80\x8e\x11Pa4\xad^,\x0d1\xde9`knx\xa0\x8c\xa5\xd5m\x9fz\xe98\x1f\xcd\x86+\x04)\xc1O\x93{hq\x8f\xd1q\xf0\x19#\x07o\x19\x17\xb4\x19\x036\"\xba\x90\xa4\x04ofA\x10\xc3\xc0\xb7\xc0\xa4\x84 \xc6A\x18\xf3\xc0\xbf\xf0\xa4\x84\xdb%3\xc4j\xc0\x16\xa6\xf4@\x19Zn\xd8\xb7P\xa5\x84 &\x87\x1c\xd8v\xfe\x05,%\xdc\x02\x8d\xbbXZ\xdd\x02\x9e\x12\xd0\x93A\x10\xc0$\x08\x93}\x01\xcc\x82\x10\x86A\xa8\xd4\xbb=\x02\xfd\xe5\xdd\xe4\xd2.T\xd6\x85H\xba\x00\xc6\xfaI\x10\x18#\xe3\x0eN\x9d_\x1co\xd3\xca\x8f,\x1cI\xb1\xb4\xba\x1e\xf0\"\x10\xad!\x90\x1c\xe4\xe0!C\xd0\xfa\x00=x\xf0b\x00\xf8J\x7f/F\x80\x1f3\xc0_\xd6\x1f\x96\x1c\x1f\xc9\x8e\x95\xe9\xb1\xb4\xba\x02\x07\xa0\xc5OB# @v\x8dq\xdcy\xf6\xe8r\xcaa\xfdC\xb1\xb4z\x0b\xb6\xd9\x8c\xa5\xd5\x11\xd7\xabNu\xe4VA\xb1\x08\xa6\x02\xb1\xb4:\xe6\x96\xca\xf3\x9a\xce\xf3B\x0e\x7f\xf5\x16t\xc9\x16K\xab\xa3\xd5\x9a\xf3V\xc9\xa3'\xc3p~u\xa5\xd5{4\xfco\x97\x86\x17<\x87\xa7\x82\x9a4\x15')\x0b\xf9\x0fG\xdc\xdc\xa4D\x89\x90\xb5]\xafdg\x07\xd5:%\xd9J\x16\xcd$+\xaa\xf1\x17j\xb5\xce\x01)\x0d;~ 5\xeb\xf0\xc5\x0d\xaf\xdf\xf8\x81T\xbb\"\xaf\x88,\x1cZ\xca\x7f3\xda\xa8\xb5\xdc^\x13\xffeO\xca\x9b\xc7}\x0c2\x7f\xe7\xc3\xe9K\xd8\x92\xfa\xa2X\xd1\xfey\x0d\xf9\xd9\"\xa9\xc8\xac\x1d\xf1\xec\xea\xc9\x82\xd4\xc9\x93\xd9\x0f\xa4~C7\x1dG%\x89\xe0Km 6\x87\x82r\xa8\xd0\xb5\xb2V/a\x87\xda\xc8\xb8\x94\x0d\x0b\xd8\xaa\xa0\x03,(\x83\"F\x1b<\x03\xc5;e\xad[\xabb\xd5*\xd4^\x02\xa2|]\xe0\x15\xd9\x95\x84\x8a\xda\xd53\xd8e$\xa9\x08\xf3\x9a}j\x1e$\xf8\x04i^\xd5$Y\xc5\x17\x07\x06\xe0\x94\xb6r\xfe\xe2\x8b\x03\xedW\xb8\\\xc6\xf8\xe2@\xf7\xaf\x18t\xf1\xc5\x81>\xb8l\xf9x\xd8\xd2-\x95\xf8\xe2@\xffG\x8fq9\x93\xab\xe2\x8b\x03\x16\x8c\x88\xc4\xa2P\xd4_\xf2\x8b\x03\xc6\xfe=\xcb\xea\xf3\x1d\x17k\xe9\xc7Z\xfa\xb1\x96\xbe\xd9*\x88\xb5\xf4\xd5o\\v \x07\\\x8aB\xac\x94\x8a\x1b\xaf[\x8c\xa9\x10+\xa5\xba\xa3=\xc0oAc\xacz\x0e\xa8\xf4I\xdcQ\x82\x83\xed\xd6L\x05l\x9a$Rv\x80\x87\xfc\x00\xe7\xa9\xa6\x05\x0f\xb6\x83K\xc3\xf7\x01uTT\xc1\x83\x1b\xe0\xc9\x11\n^\xe9\x8d>\xebB\x02~iJ\xc0N\x14\xf8O\x16\xf8N\x18\xf2\xa0\xaam\x82ISt\xde\xc64\x1f\xe2\x07\xea\xf2\xb1\xa8\x80\xbe|\x92\x10@\x89\x93\xd5\xb1R*^\x85~\x11\x95Rc-}\xdf\x96\xd1Bl!Z\x88\xd1B\xb4\x01Rv\x80\x87\xfc\x00\x0f\xc3\xc3\x83\xed\x80\xd7\x01\x1c\xa2\x85\x88\x00\xecD\x81\xffd\x81\xef\x84E\x0bq\x00\x01\x948Y\x1d-D\xbc\n\xfd\",\xc4_0\xc2;\xd6\xd2\x1fB\xac\xa5\x1fk\xe9\xbb\xbe\xf3\"\x00<\x89\x80XK\x9f\x03R\x00\xf4A\n\x04\xafr\xf5\xb1\x96\xbe\x1bb-}=`c\xd5\xf4\x10k\xe9\xdba\x04A.\x93@\x85XK\x1fk\x82\xab\x10pP\x97\x10\xc0=\x08\xe4 \xf8\x1e\xe0%\xf8\x1c\xa0\xfa\xe0\xbf3$\xf8N8\x84O:\x84N|\xd0\x81_\x82\xc7\xc1_\x82;\xceQ\x0f\x01| \xe0\x07>RR\x0f\xb1\x96\xbe\x1fi~ \xed\x1c\xb0\xe1\x9eh\x84\xf8\xb2s\xb8`Q=\xdc\x06;]\xe1\xa6z\xb8\x0d\xcab-}O\xe2b-\xfd\x0e\x1c~\\!\xa73d\xd4/\nW\xac\xa5\xdf\x07\x7f\xb3\x0bu\xd5'!\xc4\"\xc4\xbb\xd6%\xc4\x93\x88\xc7\x1e\xe4\x10O\"F\xf0\xdf\x12\x12|'\x1c\xc2'\x1dB'\xfe\xb6O\"\xb1\x96\xbe\xb3\x98\x86\x1e\x82\x17\x06.\x0cI\x05\xdfr\x1cz\xf0,\xd2\xa1\x07\xcf\xd2\x1dz\xc0\x17\xf4\xd0CP\x99\x0f=\xf8\x1f\xbd8 \xab\x85xbE\xd5\x16\xd1\x83\xf7\x95\xbe\n\xc1\xeb9X\xcc!.N\x870\x9aL?O*\x07t\x8c\x80\n\xa3i\xf5bi\x88\xf1\xce\x01[d\xc5\x03e\xac\xa5o\xfb\xd4K\xc7\xf9h6\\\xe5O ~\x9a\xdcC\x8b{\x8c\x8e\x83\xcf\x189x\xcb\xb8\xa0\xcd\x18\xb0\x11\xd1\x95C%x3\x0b\x82\x18\x06\xbe\x15E%\x041\x0e\xc2\x98\x07\xfe\x95F%\xdc.\x99!V\x03\xb6\x12\xa9\x07\xca\xd0\xfa\xd2\xbe\x95I%\x0419\xe4\xc0\xb6\xf3\xafX*\xe1\x16h\xdc\xc5Z\xfa\x16\xf0\x94\x80\x9e\x0c\x82\x00&A\x98\xec\x0b`\x16\x840\x0cB\xa5\xde\xed\x11\xe8/\xef&\x97v\xa1\xb2.D\xd2\x050\xd6O\x82\xc0\x18\x19wp\xea\xfc\xe2x\x9bV~d\xe1H\x8a\xb5\xf4\xf5\x80\x17\x81h\x0d\x81\xe4 \x07\x0f\x19\x82\xd6\x07\xe8\xc1\x83\x17\x03\xc0W\xfa{1\x02\xfc\x98\x01\xfe\xb2\xfe\xb0\xe4\xf8Hv\xacL\x8f\xb5\xf4\x158\x00-~\x12\x1aI\x00\xb2k\x8c\xe3\xce\xb3G\x97S\x0e\xeb\x1f\x8a\xb5\xf4[\xb0\xcdf\xac\xa5\x8f\xb8^u\xaa#\xb7\n\x8a\xe5\x1d\x15\x88\xb5\xf41\xb7T\x9e\xd7t\x9e\x17r\xf8\xab\xb7\xa0K\xb6XK\x1f\xad\xd6\x9c\xb7J\x1e=\x19\x86\xf3\xab\xab\xa5\xdfT\x05oy&\x0b\x89\x9f\xa5\xf9\x92\x05\xe4U\xdb\xa2zT\xad.\xe1\xab\xd97\x7f\x88E\xc3\x07\xe0\\VrQ\xc5\xa2\xe1\xedW\xb8\xa4\xadX4\xbc\xfbW\x0c\xbaX4\xbc\x0f.\xa3%Z\x95\xba\xa5\x12\x8b\x86\xf7\x7f\xf4\x18\x973\x8b$\x16\x0d\xb7`DdP\x84\xa2\xfe\x92\x8b\x86\xbbuy\xbf\x03\xf9\xdaPQ\xa6\x9b4O\x84\xa2m>\x93\x9e\xec#\x0d*>XjM&\xd4\xb6}\xa1>|\xa4ip\x92\xc39\x91\x0f\x10\x1dA}A\xfb\x16\x95\xc9>Q\x96U\x9f\x8e`\xb1\xaf\xa5\x81p\xf6\xea\xcfGp\xad\x13a\xe2\xc5%Hk\xa8\x8b~\xdf\xba\xae\xa9m\xb2 uMJ\xf8\xf8\xdf\x16\x03\xdb\x9dY\xd1\x8e \x96V\x87XZ=\x96Vw\xd9N\xb1\xb4\xba\xfa\x8d\xcbz\xe3\x80\x8bX\x8f\x853q\xe3u\x8b1\x15b\xe1L\xf7\xe5?\xf8-h\xcc\xd9\x87\x03*\x9b\x0ew\xe0\xe2`\xbbDQ\x01\x9b5\x87\x94\x1d\xe0!?\xc0y\xf6k\xc1\x83\xed\xe0\xd2\xf0}@\x1d\xa8U\xf0\xe0\x06xr\x84\x82W\xb6\x9b\xcf\xba\x90\x80_\x9a\x12\xb0\x13\x05\xfe\x93\x05\xbe\x13\x86<\xcek\x9b`\xb2\xd6\x9c\xce\xf9\xe6C\xfc@]\x9e(\x15\xd0w\x11\x12\x02(q\xb2:\x16\xce\xc4\xab\xd0/\xa2pf,\xad\xee\xdb2Z\x88-D\x0b1Z\x886@\xca\x0e\xf0\x90\x1f\xe0axx\xb0\x1d\xf0:\x80C\xb4\x10\x11\x80\x9d(\xf0\x9f,\xf0\x9d\xb0h!\x0e \x80\x12'\xab\xa3\x85\x88W\xa1_\x84\x85\xf8\x0b\x06\xfc\xc6\xd2\xeaC\x88\xa5\xd5ciu\xd7w^\x04\x80'\x11\x10K\xabs@\n\x80>H\x81\xe0U\xbd<\x96VwC,\xad\xae\x07lD\x9f\x1ebiu;\x8c \xc8e\x12\xa8\x10K\xabcMp\x15\x02\x0e\xea\x12\x02\xb8\x07\x81\x1c\x04\xdf\x03\xbc\x04\x9f\x03T\x1f\xfcw\x86\x04\xdf \x87\xf0I\x87\xd0\x89\x0f:\xf0K\xf08\xf8KpG\x83\xea!\x80/\x01\xfc\xc0\xc7\x93\xea!\x96V\xf7#\xcd/\xbf\x99\x036(\x16\x8d\x10_\x85\x0c\x17R\xab\x87\xdb`\xa7+(W\x0f\xb7AY,\xad\xeeI\\,\xad\xde\x81\xc3\x8f+\xe4t\xe6\x0e\x00\xc6K\x96XZ\xbd\x0f\xfef\x17\xea\xaaOB\x88E\x88w\xadK\x88'\x11\x8f=\xc8!\x9eD\x8c\xe0\xbf%$\xf8N8\x84O:\x84N\xfcm\x9fDbiugm\x05=\x04/\x0c\\\x18\x92\n\xbe\xd5\x19\xf4\xe0Y\xb3A\x0f\x9e\x95\x1c\xf4\x80\xaf\xef\xa0\x87\xa0\xaa\x0fz\xf0?zq@\x16\x8f\xf0\xc4\x8a*5\xa1\x07\xef+}\x15\x82\xd7s\xb0\x98C\\\x9c\x0ea4\x99~\x9eT\x0e\xe8\x18\x01\x15F\xd3\xea\xc5\xd2\x10\xe3\x9d\x03\xb6\xe6\x86\x07\xcaXZ\xdd\xf6\xa9\x97\x8e\xf3\xd1l\xb8B\x90\x12\xfc4\xb9\x87\x16\xf7\x18\x1d\x07\x9f1r\xf0\x96qA\x9b1`#\xa2\x0bIJ\xf0f\x16\x041\x0c|\x0bLJ\x08b\x1c\x841\x0f\xfc\x0bOJ\xb8]2C\xac\x06laJ\x0f\x94\xa1\xe5\x86}\x0bUJ\x08br\xc8\x81m\xe7_\xc0R\xc2-\xd0\xb8\x8b\xa5\xd5-\xe0)\x01=\x19\x04\x01L\x820\xd9\x17\xc0,\x08a\x18\x84J\xbd\xdb#\xd0_\xdeM.\xedBe]\x88\xa4\x0b`\xac\x9f\x04\x8112\xee\xe0\xd4\xf9\xc5\xf16\xad\xfc\xc8\xc2\x91\x14K\xab\xeb\x01/\x02\xd1\x1a\x02\xc9A\x0e\x1e2\x04\xad\x0f\xd0\x83\x07/\x06\x80\xaf\xf4\xf7b\x04\xf81\x03\xfce\xfda\xc9\xf1\x91\xecX\x99\x1eK\xab+p\x00Z\xfc$4\x92\x00d\xd7\x18\xc7\x9dg\x8f.\xa7\x1c\xd6?\x14K\xab\xb7`\x9b\xcdXZ\x1dq\xbd\xeaTGn\x15\x14\x8b`*\x10K\xabcn\xa9<\xaf\xe9\xd1\xee\x1fo\x8ab\x93\x91\x19\xe3\xc5b\xbf\x9e\xbd\xda\x97,\x95\xee\xd3CN=CY]\x14\xfbl\x05\x0bV\xb0F\x9f\x18\xb1L\xf2\"O\x97I\xc66\x88\xbe\xc7\x07d\xb6\x99\x1dQ\x16\xb2\xa4\xc0{\xb3{TT\xb0\xba\xae\xcb%\xd9\xd5d\xf5p\xf6;}\xd3\x93\x1cv\x94\xa9\xe9\x92\x1cAM\x92m\x05\xfbj\x9f\xd0\xe1\xf3\x9a\x00\xbb4\xa3\xd4\xd5\x05/\x9f\x9a\xe6Iy\x03I\x96\xe9yw\xb3#\xa2\xb6k}An\xf4]\x92\xcf;\xb2\x94e\x84\xf7\x95,\xd6\xc3\x16\x03\xf9\xcc\xa6\xf28\xbf\x99\xc1\x8f\xc55\xb9\"\xe5\x11\x93p\x1f?\xbc\xd1\x1f\xee\xb9=@\xd1\xd0\xe5\xaa_\xaf\xcb\x0b\xb2%\xf0\xe9\xa2\xaew\x9f\x8e\xf8\x7f\xabO\xac\xd2A^\x88_\x8f\xd8*[&9\x14l71\x0e\x0c\x15\n\x87\xfdNT\x1e2\xf4G\xca+Rr6l\x93\x9d\xa8\xb7LG\xc0\x8e}\xa2D\x11s\x7f\xa4\xbcJm\xa2\x1f\xdb\xba\xc8\xb2\xe2\xbazf\x98\xbb\x7f\x87\x93u;\x02:\xe5\xbb\xb2\xa0\xcar\xd5\x0c\x92\xa9\xe9\xaa\xdao\xc9\xcaP\xe2\xe8\xdf\xe18\x87\x1f\xcf\xcfO\xe1\x87\xd7\xe7\xa2\xb4/\xa5\x95o\xd0\x1b\xa6\xc4\xf4+\xf3o\xfd%~~\xb3#\x7f\xff\xdb\xdf\xb5\x1f3Y\xbegs-\xd6\x10\x97\xf7l\x16ve\xb1\xda/ $9\x90\xb2,\x0c\xd1\xdb\xff\x0e\xc7mFj\xc5\xaa\x14'\x94?\\\xb7.\x93%\x95 Eq\xb9\xdf\x81\xc8E\x00\xaa\xdcVP\xe4\xa6\x8dn \xf5\xe3\x877\x8c\xae\x8b\xe4\x8a-\xabmg/\xac\xf8fH\xe40\xe8\xff_\x15\xe9\n\x92\xdc\xe4\xb7\xe5D\xb1m_\x92uQ\x92#\xd9\x98\xe2L\xeat\x91fi}\x039!\xab\x8a\xdb \xc0DTye\x0c\x98)r*\x0e\xf3\x0da\x0d\xd8\xbe\x9b\xc1\x83\x8f\x15\x91\xc9\xf2\x94+t\xd9Q9\xc3\xd7]\x92'\x1b\xd3\x88\x17%I.\xa9\xec\x10Hg\x0f\xf5\xab\xe5]Q\x93g\xbc\x88\xf8z\x9f/\xf9N\xa1\xb4\x0by\xb3\xdc\x97%\xc9\xeb\xec\xa6\xe3\xcc\xb3dD\x17\xebu\xbaL\x93\xcc\xa2G\x16\xfb5\x94\x84j\x07r\xc4\xf2\x94\xd3Zv\xb6\xa7\x93\xcb\xcc\x9ff\x7f-\xc8&\xcds\x93\xadK\xad7\x83\xd0\xbf\xd9\x91\x19_\xcf\xc9.\xadf\xcbbk\x92\x98gl\xb7UP\xd4\x17|\x93\xe7}\xc9\x02\x0f\x84IF\xb6\xbb\xfaFl\xcf\x87Zd[\xe6\xf9Y\x18\x04 \x1b 39\xd3\xed.#T\xd1\xb1\xc5\x0f\xd5\x8e,\xd3u\xba\x84\x8al\x93\xbcN\x97\x9a\xb8\"\xb6\xdf\x02L\n\x9f\xe3\x80\xc1\xe2xKE\xc7\x82\xc8\x8a \x1d\x83a`\x1b\xc8\\\xf3Eqe06\xf8P\xc5r\xee\x0f\xd3E\xcd\xa7\xe3\xfc\xe6S{\x9cHrH\xcaEZ\x97t\xf3Y\xa8\x122z\x80.\xc9\x8a|\xc3g$\x19N\x19\x95\x9aL\xe8s\xaa\x16Cs\xaa\xdb\xa7\xb4\x8a4\xcb\xecT.\xfc,]0R\x85\\\xaf\xa0\xda\xefvE\xc94\xe7.Y^>\xde\xe7\xf4?T_\xf2\xf9fVI\x1f\x1d\xb3h\xb4\xc6C\xb1\x86}\xcd\x85\x8f\xdc\xce\x15\x15|\xc9j\x95\xf2\xbd\x0d\x1b\x92\x932\xa9\x19\xc1\xf4\xe8\xd0\x94\x078\xd6\xc8;>E\xc3~^\x7fN\xe8\x02\x86'\xcf\xe0\x94\xd2K\xf7\xb1 =\xe9\xd6\xec{\xf9\xfb\xdf\x1b\xd4\xd4\xf7E\x01\xeb\xa2\x80\xe70\x9b\xcd\xfe\x8f\xf6\x13\xca\x84$\xbf\xd1\xff\x98\xe473\xda\xf5\xf7e\xb1}\xb0.\x8a\x87\xfa\xcff3\xbd\xeeI\xd7\xf0\x80\xa2\xf8\xc8\x88>/\x1e\xfc\x1b\xc5\xf1\x10\xfei\x90\xa7&<\xff2\xf3\xe6\xa9\x837\xff\x99\\%\xa3\x99\x03\xcf\x99mE\xb1\x8f\xe0BZ=\xf8\xbe(f\xcb,\xa9*\x0b\x138I\xb4\x01\x1fO\xa7\x91\xbe_\x0dw\x1a\xf6|\xed`\xcf\xe9M}Q\xe4\x06\x06qJ\xbe/\x8a\x07\xb3\xd9L/\x89\x1b\xe6<0\xfe\xce\x16\x10c\x9b/\xd7h\xe3\x13\xce\xb4W\xaf\xcf^~89=\x7f\xff\xe1\xa1\xc9g\xd3.4sg\xbc;3\xbb\xbeq\xb0\xeb\x87\xc2P\xd1\x83\xb2\xea\xd9s\xf8\xb7\xddb\xf6}Q\xfcs6\x9b\xfdK\xffa\x92\xdf\x1cQs\x8d~\xbd\xe3\x06\xc8\xdb\xa4\xac.\x92\x8c2\xd1L\xb8\x89M\xfd\x9e\x0d\xdd\xa6\xeb^\xa7\x1f\xf3m\xdb-#\x8a-l\xf6\xd5\xff\xf7\x1c\xf243.P3-\x9a\x95H\x0fm\x8c\x8fR\x0eJc\x1b\x167\xad\xa9\"%6\x7f\x98\xe3F:@\x07\xd8\xf6\x95F\xe7\xdf\xd7\x98!\x8f\xe9Yt\xc6~\xa0\xa6\xdc}H:Z\x85j\x1cQ\xbbe\xd8\x03\x9b\xf5a'\x8d\x18\xcf\xb3\x1byn\x1a\x1cx\x1b\xd3\x11\x92uM\xb85C\xcf\xdbC\x92\x1f\xdf\x1fv!\x0et\x92D~\x82#be\xde[\x17\xc5l\x91\x94lp\x9f\x1f\xdf\xcc~\xbe\xc7\xb9\xc5\xcf\x1a\xfac\x15#\xe5\x1e\xfd\x96\xaa\x97\xc1\xcf\xffy\xf6\xfe\xdd\xf0\xaf\xcf\x9f?\x7f\xae\x9fG\xfa}\xeb\x07\xe06UA\xb7\xa90\x18\xf8Ye_\x11\xe9p\xdb\xec\xb3DS\xdbn\x88\x82~\xbe\"\xad\x9a?\x02\xb2]\x90\xd5\xaaU\xf8\xc2\x89\x98h\xbc\x07\x1d\xb5\xcb\xbd\x87\x9f\xfe\x83\xb2\xe3\x938\xe4*^Q\xc9\xdc\x99\xdc\xf2\xcf\x0cFt\xb2\xbc\xa4{\xbe=\xac\xad\xd3\x8c\xe8\xe5\xaf\x94\x0f\xa7\xa4\xac\x8a\xdc\xb8m\x84\x07\x87\xbd\xf32g3\xf3\x1c\x9e\xe816\x1f\xb3\xabL\xf1\xedS\xbc\xf4\x070Rq\x8f\xf1\xe6\xde3\xb8\xa7\xdb5\xeapg|D\xf7t/*1\\l,\xef\x92-\xc5\xf7\x7f9\xc9\xff\xcf\xf81\x1dK\xef[\xec\x80N\xd6\xe2`\xa0\xae >\x9bi\x05\xd7$\xcb\x1e]\xe6\xc5u\xce\xf6\xf5\x05{\xe4i\xb9\xaf\xeabkX\xe4\xea\x12<\xe2\x06ho]\xcaW\x82\x9an\xe9B\xcb7\x9as=[v\xc3N>\xb1\x0d!\xd7\xe1E\x91\xadD\xed\xac\x962\xe6\xc1\x12\xeb\x17\x84\xb7H,\xdf!>\xd6M\xb3r\xe1\x01\x95\x0f\x92\x15\x03\xb7\x82\xf4\x9c\xfd\xfdo\x7f\x7fhX\xe4c\xd7\x88\xda\x91y\x9906PtOfO\x9f<\xad\xee\x19\xa6\xbd\xfb/[|\x85\xe5$f\xbe\xb0u\x06\x8f\x04`U\x8eQ\x8d\xc3_\xde7\xd4\xddk\x86\xc6%\xff\xa8\"\xcd\xd5\xce.\xd9\xa49\xe3]K\x8c\x82\xb3\xfd\xa0 \xfbI\xf2\xee_%zy\xb7\xd1\xea\xe5Z\xe7T\xd7\xbb\xd3YU\x91\x81_\xde\xc8\x0f\xe3I\xd7|?\x04\x9d^${\xe8\xff\n\xa7MRU\xdc\x1bu\x9al\xc8\x07\xf2\xd3\x9eT\xf5\x8c\xff\xdeC\xf2\xd3\x9e\x947\xac9EG9A`[T5\x10\xe6\x12a>\x94\x19\x9c\xd4\x9d\xbd\xbb\xabo \xed\xc7\x99\xd4\xcd\x8b]y\x01\xdb\xa2$\xd2\xf7\xd55l4!\x04N\xa6hJ\xf2\x99\xc2\xbc\x18z\xc6\x0d\xf6?\xf9~\xbb\xe0'{\xe9\x86\xeb\xf8\x82\xfa\xf4w\x19\xb5,\xf6y=gH\xfa\xdb\xfc:\xa9\xa0\"\xf5\x11\xa4u%=\x89\x15\xecs\xbe\x98V\xdc\x19s\x9d\x8a\x901\xfd\xfcYo\xb4\xacwk\x02As\xc3\xd6E\xf0\xe2\x86?\xb1\x06\x1fN_z\xdd\xae\xbd+V\xe4$_\x17\xdewj\xc2\xa4\x9c\xe7\xc5\x8a\xcc\xd3|]\xf4\xef\xc6P{E\xba<\xe6\xda\xe2\x9aZDfd\xec\x97\xa7\x9a\xebn\xab\xaf\xc9\xb2\xd4\x8c\xf51\xc3\x11j+Z\x86\xa1Sg`\x85\xdaYYZ\xd5$g\xd1\x07\xa8\xefsR_\x17\xe5%\xea[\xcb\x14\x0e\xbe]^$yN\xb2\n\xf5\xb1QFn\x8b<\xbd\xd4\xbf\x1c>@\xc2\xf6\xe6\xe8\xe5U\x7f6U\xf8\xb6\xcca\xb9[z=\xea\xd9)y9\xdc\x17\x1e\x9b\x8b\x1a\xba(\xde$\xbb\xdd\x1c\xfd\xb1\xcf4oR[\xe4\xe0\xe0\xf3\xc5>\xcdV\xf3:\xd9\xe0\xd6\xc5\xa6\xb0\x89\x0d\x03\xf6\x15\xd9i\xb1\x0f\xe3\xb5\xb4\xb1Z\xc65c\xbf\\\xdf%\xb56\xaa\xcd\xba\xf3\x1b]\xb7-V\xfb\x8c0$\x83\x8f,U\x89\xbd\x90\x0b<\x83\xef*}@\x18\x0e\xf7\xf2\x82,/\xab\xfd\xb6\xcfD\xfe\xeb[\xdes\xdf\xbe\xfb+\xa7\xe4D\xadB\xc5U\xd9\xbcZ]zMz\xd3\xd9\xfd\xb34_\xb22W\x14\xcf\xa3ju _\xcd\xbe\xf9\xfa~\xf3\xadj}\xb64h\xedO\x8d\xe6l]\xe9\x03l]\xe5?h\x86\x0b\xa7\x91\xcdX\x14\x0dG\xe6\xa3\xe6\xcfn\xf2e\x9ao\xbc\xb5|\xc5\xdb\xf5\xc5\xcf\xa2(2\x92\xe4\xc3\x91vc\x87z}\"\x07*Z\x05\x8eSg\x13y\x0f:\x86\x0b\xc9\x161\\(\x86\x0b\xc5p!\x88\xe1B1\\(\x86\x0b\xc5p!\x0e1\\(\x86\x0b1N\xc5p\xa1.\xc4p\xa1\x01\xe0#bb\xb8\x90\xee\x93\x18.\x14\xc3\x85b\xb8P\x1fb\xb8P\x0c\x17\x8a\xe1B\x0d\xc4p\xa1\x18.\x14\xc3\x85b\xb8P\x0c\x17\x8a\xe1B\xbf\xcap!\xdb\x9d\xd6-\x07\x0c\xfd\xd8)23X\xe2\xc3\xe5=\x0c^p\xbc\x89\xeb\xb1m4\x919\xfe\xcbc\x10\x8d\xe3\x8b\xc2\xec\xca\xc1\xbd\xf3\n\xd8\xf7[\x0d/\xb4b\xdf`\xd5\xbe\xad\xaa2B\xff\xca\xaa\xeb\x1d\xd5\xe1K\xa9\x1a\x16\x06_\xa5\xaao\x92Z\x9b\xf5+\x94\x18^\x0e\xf5Xa\xc3JD\xce\xd5\xd1\x13\xca\xd6\xe2LZJ\xc0\x1e}\xa4/\xc2\xc41!\x8a]\x0d\xa2\xd1\xf4\xc5\x96,\xba\xd8\xa2\x7f\xacE\x95\xb4\xc5\x94\xccoGZgZ\xe9\xd9\xfd\xc2\xa3\xe6\x0dG,z\xe3\xd3\x80X\x04}\xfa\x9c\x8f\x1c*u\xfe\xed\xcf\x13bi0=\"\x88m?|\xea\x0f\xdb\xd2\xf2 \x1f\x16\x85\xe1\xd9\x1d\xc1b_K\x7f\xc6\xd9\xab?\x1f\xc15\x91%\x80\xf8\x0d\xb6\xb9\xafnWT7-H]\x93\x12>\xfe\xb7&\xac\xc9\xfd`^K\xa9`A\xfb.\x9e\xc3\xd2\xe0\xb1ahKC\x8d\xaf\xd3N\x9f1\x96\xce\x10bim\xaeF\xcb)1r\xb6\xd6J<\x9cO\x14\x9c\x83[\xa7eQ\xac\xdf\xef\xd0\xecb\x9f\xd8(V\xce#\xd8\xddF%\xado+\xfd\xa6\x12\xe3\xe9\x1e\xbb\xe8\x10\xf8\xa9\xab\xb9A]&\xd9r\x9f%\xac\x92\xe5[R^f\x04\xca\xa2\xa8y\xa8JG\x03,\x8b}\xeb\x1fX\x90\xcem\x9a\xbc\xce\xe7^Q\x8a''UE\x96\xf47fAu}\x809\xb5b\x16\xc5\xbe3\xa0\xbcX5~?*\xa1\xdak$~\xe7|\xde\xdd\x9d \xac\xf6\xdc\xcajn\xd6\xe48\xd9i\x9e\x7f(\x0f\x07m\xa0N\xbb\x89\x10\xfbF`\xac\xd0K\xa1\xd8\x1d8LM]k]\x14\x1a\x0b\xc3\x18\x9ff\xf5\x0c\x0c\xcf\xc2\xcaJ\x0c\xc5c\xbb\xa7\x1d\xbfB\x07\x04\xab\xeb\x94C\xf0jU\xb0tW\xae\xb2f9\xa8+\x97\xc3\x84\xeb\x97\x83\xba\x8aM\xc7]\xb9|i\x7f\x82a;\xfa\xa7\x06\xed\x82\xfb\x1f\xb2\xb4b1W\xf2\xfbY\xd0\xbe\xab\x0c\x84\xeb(v\xec\xbb\xe6l\x8d\xdex\x18\xa3c\x10\xb2\xa9\xdd{\xfa\x9dWk\x034\x8d\xbb\xc0\x1e\x940a8\xa69\x10s\xba\x10\xcc\xc9\x82/\x8da\x97\xba\xfb'd\xc0\xe5T\xa1\x96\xf6 \xcb\xa0\xf0\xca\xe0\xc0J6\xde~<\xa01\xa428\x98\x92\xfb\xf2{\xd8\x0ca\x94c\x02(Y\xb0d\x7f4\x9a;\xbe\x90\xa0Is\x80\xe4\xc8\xd0HTP$>\x00rD\xe8\xe3\x88\xa0G\x8d\xc0\x980\xb4q\xda\xa0\xc6\xc9\xc2\x19\xdd\x81\x8c\x93\x850\x9a\x82\x17\xc7\x84-jC\x14kLpbhX\xa21\x0410\xf8P\x13vhT\x94\xb8\x0b\x98\x81\x06\x0d\x0c/lC u\xfc\xfd\x9d\xbb\xefq\xc1\x84\xc2\xdco\xe9\nuh>\xd3\x15\xe8\xd0a\xd3\x14\xe60bS\x0br\xd4\x07\xb8\x81\xd0\x15\xdf0\x1e\xef\x9cE7\x0c\x057\xd0\x08u\x8564E6\xdc\xf84\xc55|\xae\x14\xc1QTCK\x00\xa6\x98\xc6\x94\x854:\x1biY\xde\xec\xeab\xd6\xbc\xdc\x88\xdeE\x83\x173\xad\xc2\xa0s\xac\xd7\xbcn\x89k*Ca<\x1e\x99\xd4\x93\x818,i?\x1f\x1e\x9d\xfa\x9fmIU'[\x8dS\xa5\xf3\x11nP\xb6s\xb9\n\xcdi\xc3\\\x93\xbf\x05\xcf\xde\xad\xacl;6\xc8\x8d\xab\x8d\x10\xd1\x836nD\x0f\xb7A\x10F\xac\xf4\x01\x1f\x8f\x82Bg,yg\x8bR\xd1\x83O\xec\n\na?\xbe\xc5\x1e\xd1\xa2\x07L\x9c\x8b\x1e\xf4\xd1/z\xf0Z,\xeeS\x9d\x04/\xb4\x18}\xd9\x85a\xac\x8d\xe1\xbb0\"\xdc\x96\xab\x04K\xb4\x8e\x1e\x0e,\xb7\xb0\xe7\x13\xf0g\x0e\xe0LN\x15<\x0f\x8f\x12<\xb9\x04\x01\x9c\x02\x9fC\xa5\x04\xeca\xa0\x0f~\xab[\x82\xcfdB\xd8\x84B\xc8\xa4z\x1fB{\xcd\\\x87Q \xf6\x18)=x\xf2\xc0s\xec\xb8(+=\x18b\xaf\xf4p\xc8aX#\xa5\xf4pHr\xc0X]Y\x0f\xd801\x14\xb2~(\x99\x1e\xdc\x01fz8$\xdbl!jz8$5\xfa 7=\x1c\x92\x0eG\x98\x9c\x1e\x0eI\x90%\xd0N\x0f\x87$\xc6\x1d\xaa\xa7\x07{\x00\x9f\x1e\x0e7\x8e B\x00\xf5\xa0{d|\x08\x1e\xb6\x89\x8fMrG,k\xe7=\x8a\x04_S\x08\xe7\x1f\x95\x10Mj#D\x93\x9a\x81\xdf\xb2\x96\xe03\x99\x106\xa1\x102\xa9\xb7eR7\xf7\x0f\xa8)\xe5\xa3\x1f\xc6\xb5\xeaA\x1b\xed\xaa\x07\xef\xc5\xe8\xbf\x14\xa5\x04\x99\xaf\xb3d\x83m\x148\xe1\xee\xf8 \x15\x1e\xc1\x8b7\xef_\xfey~\xf2j\xfe\xfd\x9b\xe3\x1f\x10\xb1\x06}\xe8c8~q\xf6\xfa\x9d=\x02D|\x85\n}\x04\xefNla\x16*4A\x17\xe3\xd8\xe0wn\xe0\xc07\xca\xea\xfb,\xd9@\x9a\xaf\xd8\xa5\x87\xa8\x08 /\xb2eqy\xf2\xca\x19\x7f\xa1B\xb3\xa5 \xc5\xbb.=\xef>U\x08Z\xa3A\" q)\xac\xc2(\xd2\xf0n7\x0e\xa8\xcbT\x15F\xd1\x87f]\x88o\x1c\xe0%3?\xcf\xd2\x0d\x8f\x0f\xa2z^:\x8f\xd9\xfd\xacLj@\xa2KsH\x04N\x97\xc3\xd8\x97^\x8eUM\xc3h\xee\x08Y~\x874\xbb\xaf\x0d\xef\xbbw\x81\x9b\xdd5\xcf[Id>G{\xdc6S\xdf\xee\xa1\x8a B\x8d\x9c\xfa\x06\xabeZ\xda\\+\x0f\xafA\x91\xda\x139\x12\x0e\xd8\xf1p\xf0\x92C\xde\x1b\xc9s\x13\x0d\x8aV\xdb\xc0\x8b)\xe0\xcd\x18\xd0\xd5\xffp\x817\x83\xc0\x9fI\xa0\xaf/\xe2\x82\xdb!\xcdW;c\x0b\x9d \xd1\xe9\xcb\xa1\xb8\x00\x13i\xa2\x8273}\x0f.;\xd7\xab\x87z8 ]\x92\"\x17!\x1e\xdb\xd2gCz\xc8)O&x\xadq\x0f \xe5\xc1\x08\xf0d\x06\xf8\xcb&O\xa6\x80/c D*\x1d\x9e(?y\x84\x95F\xac\xfe\xa6\x0b\x19\xc8\x9a\xc7\x1e\xb2\xc8W\x12y2\x10\xbf\xdb!T\x06\x1d\x8c\"|P`\xd3\x02O\x8a\x9b\x0cj\xaf\x16\xf9\xdc\xee\xb0E\xf4\xe8\xeeiq\xf3s\x92\xd7iN\xe6n\x8b\xd3mi:,L\x94\x90\xc2\x89&\x94\x84Fp\x88\x03r\x9f\xa3\xe41j\x90\x80\x1e(\xf8H_\xf4\x80\x01?h\xf0\x93\xb5\x87!\x01+Y}d*\x7f\x0e\xc0\x8e\x0f%M\xf1b\x02\xcd\x1c\xf7\xc6\xe5\xe0)5'\xec\x1f/!\x11\x9d\"\xbas9\x8a\xe59\x9f\xb8\xf0P\xe0\xbaG,\x02\xa4\xeb\xd0\x0e\x00\x97H1\xddJcm\x02\xfd\xb7\xe6\xc2\xc9x\xdb\xc0\xf4\xb5\xa1H\xb2\x97\x8d\x00N;\x01&\xb6\x15 \xc0^0\xb5q\x9556\xc5z\xa2\xd4\xacNe\x19\xd2\xec\xedz\xd0$\x7f\xc1\x9a0?Bc\x1fJ\xa9\"\xec\x0cpQ\x0eN\xea\xc1ns\x80\x93\xdf\x12\\\xb6\x078\x13\xcb\x9d\xec\x027\xcb\x10\xb6\x08\xd8\xec\x110\xdb$\xe0\"\xd1~c\xe2\xb4O\x00\x8b_3tg\xa9\xde\xf0=c\x89\x1e \xa3\xd6\x1e\x9f\x18l\xc7\x988\xa2-\xad\xab-\xa8\xab{\x8c j\xc3\xa8\x0d\xa36T j\xc3\xa8\x0d\xc5O\x98\xa5\x1c\xb5!|\x91\xda\xd0\x95\x1da\x1c\xaei\xe9[\xcb\xc6{c\x9b\xceqd\x9e\x81\xa9<\x01`\xf2\x06\x00\xba\xb8\xbbV\xae\xe9e\x99\xa3|{\x80E\xe3(\xd0>F[\x1cV\x94;\x8b\xac\xfb\x96Vw\xd2\x04(\xba\x00W<\x1d\xa5\x02\xa0\xb3\xb8\x9du\xc9\x9d\xe5\xd1\xa7\xee\x12\x93\x8c\xc4\x01_\xf6\x1c\xda\x92\xe6\xb6\xa1\x06\x15;\xf7)q\xde\x96/\xb7 \xf4-l\xee[\xce\xdc]\xc4\x1c1\xa5\xae\xb2\x8a\x08\x148\x93\xc7^\x92\xdc\xab\x1bW\x1d$d\xd1\xf1 w\xb4\xbbl\x1ej\x80\x80\xb1\xeb8\xa0Lb \xa8\x91\x02z\xb4\xe06\x95\x9b\xcfP&\xb3\x04\xcc:\x92\xe0f9\xf8\xb0\x1d\xf0\xacG\x9a\xd6\xbd\x8f\xed\x15\x08\xf1\xa5\xbcQ#B\x8d\xc4\xbfX7\xa2D\xf7T\xe4\xa1\xabIO\xd5a\x9f\x1f\xce\xfa\xd9\xd6\xda\xd8~\x15\xb1\xa7\x1a\x03\xb6\xe6\xf5T\xfd\xb9\xabZO\xd5\x93G\xdd\xea\xa9\xbaDV\xa6\x9e\xaa;\xf0\xaa=\xbdCW\x9c\x9e\x86\xbe\x89kJ\xdb*I;\x95\x95[I\xdd\x9aQ\xe3\xa8\x06\x8d\xd3~6\xa7\x83\x84h\xcd\xb4\x80\x1a)\xa0G\x0b\xd1\x9a\x99\xda\x9a\xc1TQ\xe6c\xb1W~t\xd6|D.\x05\xecBp&\xdcw\xc1c2p\xf5\x8f\xdd\x99=\xb8v\xc8Z\xc7\xce, \\3w]cd\xc6\x90\x1e\xb0\xb5s\xa6\xab\\\xec\xac \xd0\x05\x84+[\x05\x8fU\xe3\xb1\x81\x91u\x88\x03:w\x9d\xb59\xa0+\x0d\x07P\xe0\x18>\xde\xcd\x84\xaf \xcc\xb2\xb0\x10\x98\xf4\x9e\x19\x1cE\xe1\xe9\x89\x06\x84\x88\xca\xc0\x8ez\xc0Vij\x97\xa1\xae\xfak.io\x95\xf4\x08)\x8f\x91\xf0\x88\x1d\x8a\\\x9e\xa8\xa5\x89\xa8\xb7\x86\x18\x18 \x07\x07\xf8Jk\xc8A\x02v\xa0\xe0Scm\xfa\xceq\x1ab\xda\xdaj\x88\xcaj\x98\xe2b\x80g\x08\xce\x98\xdc\xf9TT\x9b\xa8\xe7\x9d\xb5\xda\xads\x89\xbb\x17\xb7s\xdf\xa2\x06\x82XM\xce\x1d\xeb\x1c\x0c\xa0\x06\x04\xd8\xbd\x8a\x1a\x18\xe0\x06\x07\xf8]:m\xb7\x98\xfd9\xe5\xeet\xeeM\xdc\xceD1\xc1\xb57\xc0oON\xd2\xa7\xeb\xf6\xbe\xf9\xce\xd5\x99\xa9#K}W#N\x13.w\x05W\x93\xe50e\xa1\xb5\x03\xd5\xf6\xb2\xc8\x13\x87$q\xc9\x10\x87\xf4pN-b\xeb:e\xc5\xf8N\xa4\xe3\xc1w\xf3\xdb\xb6\xb8k\xdd#\xe7S\xbf\xb9P[9\xb0\x07\xd7\xb6\xf5\xdeZ\xb7\x11&\x13XLT\x9fx\x84-!jL\xa4y\x93V\xf8\"Z\xa6@\x1bT\x81\x8c\xc1\xc65mXg\xca\x8e\x15\xab\x0d3\x18\x92x8\x8c\x94/\xacy\xf8\xbe\xb7\xfb\xbb|B\x9bM-\xcc\x01\xce\x96\x16\x0e\x0f\x97G\xb03\x07\xef\x90g\xd9\x0c\xe3\x1f\xf0\x0f\x7f6\"r\x84Es\x08 \x8e6\xb7t\x85Hs\xb8\x85\x12\xf1\xd6\x1b\x1a\xde\x83\xdd\x9f\xef\xbe\x9dq\xdd\xcd N\x0d\xae\xfd\x08\x88+\x02\x04\xbb\xc0\xad\x939x\xdc\xc7 F\x07\xc8\x11\x02 ob0\xf3&\xc1\xbdD$\xb8\x18\x0cx&\x03\x96\xd1^\xb7/\x88\xbb\x17\xa7+\x181\x00\x9c\xeb\x17\xed\xf9\xf6\xe8\xd1\xc8*gX7\x07\xcc\xbap\xefg\xa73{\xfc\x880*`\xaa\x00p\x0e\xf60p\x0e\xda`p\xd1\\\x93 \xc5!Z\x1a\xd1\xd2h Z\x1a\x07\x95L\xd1\xd2\x88\x96\x86\x06P\x8c\x8e\x96\x06`X\x15-\x8d_\xd8\xd2p\xf9\xc1\xc4Wv\xc6\xd8\xb7\xa25\x1d\x8d\xc3(\xfc\x87|\xd3\xc15\x9f\xa3\x12\xd7\x86#\xb9.\xcc\xe9k\x1cpIl\x02]\x98\x9b\xcb\x91\xd6\xc6a\xa4\x1d\xeaHt\xe3\x80\xd0@\xae~\xc0\x91\xfa\xc6\x01\xd1\x11 ;\x03L2\x1c\x07\xdf\x948\xd1\nG+x\xd0\x0b\xb8$9\x0e\x08\x19\xd9\x05\xb9\xc1\x9c s\x1c\x9cis\x1c\x0eI\x84k\xcb\xf7\x01\x9fN\xe7D\xd5\xa6\xdb\x05&\xd5q\xf0M\xads\"\xe4#\xf0M\xb0\xe3\xe0\x9bf\xc7\xc1\x9dl\xc7\x01\xbd\x10\\1\xea\x1c\xd0\xe8\\:\xa9\x0b\xf6T<\xf1\x8d\x7f\xc7\xb8PAdr\x1e\x87\x03\xc9\x16\x8c\xfd\x0d~L\x00\xb7)\xa6\x82\xc7\xc1G\x82\x077\xc0\x93#\x80=\x10I\xc0\x18\xc0}\xc0\xafP \xd8\x89\x02\xff\xc9\x02\xdf \xf3:@\xf5\x9a\xd8\xc3\xe59\xe0S\x009x\x8c\xd7c\x9c\xfeI\x81\x1c\x10\xa9\x81\x1c\x0eA6:\xd1\x8e\xc3!H\x986}\x90\x83_\x12!\x87C\x8c\x0d\x9bV\xc8\xe1\x10\x14\xb8\x13\x0d9\x1c\xa2o\x8f\xd4C\x0e\x87 \x02\x99\x8c\xc8\xe1\x10\x04\xf8\xa5'r\xc0')r\x98\x9e\xee\x89\xd3\x169\xd8\x92\x179 \x155VA\xff\x82\xa6\xa2#\xc1\x91\x83\x8f-\xe0v\x8aI\x886b\xb4\x11]_\x83\xc7D\x81\xffd\x81\xef\x84\x1d\xdaF\xc4$Vr\xe0#\xb5\xa7Wrp&Yr\xf0ZX~\xcb\xca+\xed\x92\x83\xf7D\xe2R09\x84&br\x08L\xc7\xe4\x10\x98\x94\xc9\xc1?5\x93\xc3\xa8\x04M\x0e\x98 \xff.L\x95\xac\xc9\xc1+e\x93\x03\xfaRI\x05\xefu\xe7->\x90\xa9\x9c\x1c\x82\xc9\xc1\xf9j88o\xa9T\x08\xa6 \xc5\"_g\xe8\x94I\x9f]|6o\xa1\x0f\x8d^i\xa0VL\xda\x17,-\xc9\xa0\x1c\x1c)\xa1\x1c\x10\xb2\x1f#\xf1]I\xa2\x1cp\x9a\x0b\xa1\xb5\x10Ts\xc0\xd0\xce\x01-+\xbc6\x81\xc7\x06p\xa6\xa8I@\x0f\x1e\xbc\x18\x00\xee\xe4\x13\x15\xbc\x18\x01~\xcc\x00L\x9a\x8a\n\x87%\xc7G\x0b\xfad\xbd \xd0\xb9\xf2bTp]\xaf\xab\xe0\xc54\x1f\x03\x1e\x95O\xa3\xc2\x01h\xb1'\xb0r@n'\xecFB\xca\x11\x8f\xc1\xa2\xd7)R\x82 \x07\x0c\x1e\x83\x06?\xd9\xe11x\xf0a\x00\xf8J\x8d\xc3\x11\x82\x97\x17\x93J\x0b\x1fY\xe1#)<\x18\x85\xdb\x99\x10\"#&\xa7\x02\x17\x91\xd4|\x8d\xeb\xde\xde\xb5%\xc5\x96\x83\xa3\x17;vw\xd2-\x07\xbb%f\xb1\xc0\x9c\xc2\xc3-2\x9c\x12\x12\xc5g\xc4^t\xcaC\xe7`\x005 \xc0J?\xd4\xc0\x0078\xc0\xcb\xbai\xbb\xc5H6\x1f\x99\x16\x93\xfem}\xe2$\xd4(\x99\xf1K\xc64\x06f\x19\x0f\xf0t\"S\x83s\x8d\x7f\xecx\xe2\x07\x92a(\x05\x06\x91w\xae\x18;\xad\xb4\xd1K\x17c\x85\x7f\xcdD\xc8)\x18\x04\x9c\x0d\xe2\xdb|Q\x98'\x0f\x1f\x87f\x8e3\xeb\x0fw\x18q\xe6\x1b[\xa6\xc4\x8e\xa9\x8c\xd0G\x91\xb9\xe2\xc5\x86\x91a\x1a\x16\xf65\xb9\x96\xcb\xba\x1d\xa8\xc6jY\x9b\xfd\xff\xd9\xfb\xd7\xe68\x8e$M\x14\xfe\xde\xbf\xc2\x97\xefkCr\x06*\xae43\xc7\xecpWm\x0b\x91\x94\x84\x1e\x89\xc4\x92\xa0z\xc7\xda\xda\x80DU\x00\xc8aVf)3\x0b$f\xa7\xff\xfb\xb1\xb8e\xc6\xc5\xe3\x96\x11\x85V\xcfT~\x91\x88\xca\xf4\xb8yxxx\xf8\xf3\x849\xbd\x1c\x99V \x1af\x1f\xad\x04\xb5\xc3X\x15\xbc'X\xce\x95\xd5\xbd\x9a:\xce\x9f\xb8\xa4\x88[],\xcb\x86\x9f\x1ey\x0d\x9as\x01\xf4\x9e\xfd\xa0\xa7<\xee\x9c\x1f\xefHk%\x873v\x90\xdc\x9cX\xf1\xce\xec\x93X\x01yy1\xfe\x0c\x98\xd8:\xb8\xf2Wb\xbf\xb7\xb3Ob\xbf\xf4\xe4\x8e\xc4\x8apd~\xc4~\xee\xcf\xdbpgh\xc4\xc9\xcf\xcc\xaf\xb0VW\xb6\xd2\x7f7\xafk\x11+\xac#q?\xc5\xca\x951M\xce$\xfb\xd0\x92?\xbd\xe7\xdbh\xf87\x18\x9ed\xf9\xa0{\xe9t\x0d\xe4\xe3L\x81\xcf\x15\x1d\xf2\xfb2]\x08D^\\\xf2z)\x97B>\xc1\x04\xf5\x90\x8b!\x1fw\x12\xbag(\x8a\xdfF\x88\xa7\x8fG\x89s\xed\x00\x02I\xe1\x193\xc3\x9d\x1d\x12\xad\xbd\x8e\x8dnTr\x8e\xb7\xe6\x10\xac=\xb8]\x9e\xe9g\xaf\xeb#\x9f\x98=\xab?\x91&\xd8]\x10\xee\xb2\xc8\xf4\x18oBL8M:J\x13\xd1\x1a\x86])\xf9x\xd2\x9d\x97\x16\x1fL\xf4]*8\xcf\x05\x93O\\2\xf2\xd2:\x86R\x8c\x97\xcau'\x0e/\x95\x18\x91\x0e\xbcTt \xc9w\xa9\xd8\xb8\xd4\xddp\xb2\xee\xb2\xf23]D\xf9`I\xb7\x0b\x9c\xb4\xe2\x8b\xe1\xf1j\xde\xe3*h>\x8f\xb0\n\xfa\x12Ay\x1d\xf1c\x1b\xe7\xa1M`\x88B\x03\x14\x95\xc2\x19\xd1y!>\x9f\xb4\x0c\xc5\xc4T\xcc\xc4\xe4\xcb\xf8t\xcbE \x96\xda\xf8\x073%\xe3r \xa3\xb3\x1e#\x86*B\xcb\x1f\x8b!$\x98\xa1\x98P\x92\xa39\xda2\x96\x94R\x88&\x0c\xfa\xb7\xbeII\x81H\xe2\x9f!\x0eM\x03t$\xfe\xa1v\x00\x9f\xfdG\xc6f\xf5\xcb\x80\x81<26\xff\xa7cl\xc6\xf3\xc6\x168\xa5\x85=n\x8f\x1ag\xb8\x90^\x05\x0ejV@\xaf\x02\xaa\x9b'\xbe\xbc\xd2\xfaU6j\xd40u\x8dP\xd6E\xb2C\xe9\x01N\xa1\xa6@<^\x8f\x9d\xcc\xf3\x02,u\xb3U\xcc\xc3\xed\x93\xb0\x14y\xd8{\x16\xcc\xc7\x03\xdcv\xefe\xe0\x89= \x80P\x1d X\x0f\x083\xeb\x04'\x1b(\x9a\xe1%\xb0\xf1r\xe7\x94*&|\x88\x00\xcb\x0f\x12|=\x18y\x98\x009\x07\n\x0ey\xd1\xac7\xb1\x07\x0b\x10d\xb8 \x0c\x97\x0f\xa2\x1c\x1c\xe9\xd0\xb6\xdc\xcdW\x13-\xda\xb7\x7f\x88`\xa4)0\xeb\x1e#\xae\x10\x19\x8e\x81\x98\x16AT\xab\x00\x82\xa1\x19\x98J\x0b\x85g B\x17\xe4\x13F\xfdFu)\xc4ukd\xc8Fy\xd1\x8d\xe6\x0d\x1f`@L\xed\x83\xb5\x8e?\xcc\x800\x7fKnu\x82\x07\x07P\xa0\x902\x07\x1d\x10}\xd8\x01\x05\xea\x1c:\xf8\x80\x02e\xf8\xd9Sr\xa5G\x1c\x88@\x81b\"\x18Pr\x8b\x88;(\x81\xa8\xc3\x12\xc8\xaeO\xa1\x83\x13\xf00\x96d8\xb4\x07]\xf0=\xac#\xe1\x95D\x11\x8e2\x8c\x1cWz\xe4 \xb7\n\x8e+=\xfe\xa2{\xa5\x0f\xb1u\xf0z\xffu/\xc5\x8d:\xb8\x81\xf8N\x0e\xf3l\xa4\x1e\xe2`\xdfDpj$\x1e\xe6`\x9f\xf8\xf93\x16\x1d\xea\x00\xc4ac\xa2\x192\xb4s\x9f\x90\xf2;\x7f\x8f>\x17\x82xM\x88\x9cl\x11|\x17\x89\x05\x86\xb9-\x82\xe7E\x90^\xaa\xa7\x99\x85\xcf\x8e,\x91\x8e\xd4\xc9\xe5gH\x98-\xf3\xd1IxH$\x9cf\xca\x93H\xeb\x01%\xfaL\xe6\xa1\xce\xb6\x1f\xe1\xa84\x00B,d\xeb#\xe0\x87\x11\x8d\x81\x98\x06A8\xa8\xcf\x9fr\x05\x86\xcdj\xf2 \x80SR\x00n\x18:\xd2\x82\xb8\x86\x87=\xa4\x88\x13\x03\xfed\x96\x86\x1fuAH5\xfdJy\xc0\xbdS`F\x05\xe7Sx6\x05\xe7R\xb0\x01\x10n\x04\xc4\xcd\xa22E\x85\xe6O\xa9\xd9\xe3\x9d;\xe1\x99\x13llh\xd6D\xce\x99\xacrB'n\x10*\x00\x13\xee \x05@\xe5`\xdf\xfba\xff\xd8\xca\x9a{\xfb\xadc\x86{Z\xee\xd4R\xc7|\xf6\xccd\xdf\x1c\xf6\xcc\xde\xc0\xb8{\xa7\x91w\xae.\x17\\\xfa\x00\xdb\xa7\x97\x11cc+|pJ%J\xf5M\x9fhuG\xb6\x16\xdeo\xf5m\x03\xee`/D\xa2\xdb\xf7]/\xc6\x9f\x9fW\xfd\xf8A\x86%x\xcb\xac9`k\xbe\x11\xb8\xe1_\x98A\x1a\xac\x13\x97\x80\x0e\x1d\x01\x14\xab)\xfc\xd6\xc1\xc4\x96d\xe0\xfc\xd03\xf8\x98\xb3w\xa7\x91q\x9b\x18\xc7\x19{\x94\xcdG\x0f\xbb\xd1\xb3\xf4\xa5\xe2B\xd9\x87\x8b\xce\xca\xa7\xde3\xc4\x05\xce\xc8\x17\x9f\x8d#`;\xef\x99x\xccY8~\x06\xee\xe8f,\x04\xee\x1c\x11\x97\xf1\xb4\xcf\xb6\x83\"\xb0\xf8\x86\xe7\x0c{\x81\xf6\x96\xc5\x9f\x04#\xd5^w\xdc\xef\x8a{\"\xd2\xb8\x91S\x9f\x90\xa7x\xa8\x93\xa6`\x84\xd9\x19Y\xf6\x9f\x1d\x075\xc7\xaaM\xdc\x19\xb1\xe3l8\xb58\xefyj\xaa\xb0\xfc\xb3\xde\xf0\x19oj\x9d|g\xb9\xa9\xb2\xf03\xdbT)\x81\xb3\xd9Tq\x9e3\xd8TQ\xe1\xb3V\xff\x19kZy\x05\xceR\xcd3\xd4\x04\xc7\xa3\xc8B\x81\x9c\x89\xba-\x9c\"D;\x03=\xae\x10\xdaO\xff W\x08\xd7\x99#\xaf\xcfaA\x19\xc1\xb3\xc4@\xa7\xb8\xcf\x0eS\xce\x0c\x13\xce\n\x13\xce\x08\xe3\xce\x06\x93\xcf\x04K\x83\xbc\xa2\x0e\xf2\x02\xc3\x10\xd0\xcc\xc3\xf1\xc0\x05\x0e\xe6\"\xa5#\xd5.x\x00\xe7\xa3;[~\xe0f3\xd6\xe9\x07m\x8e\xbd\xb3\xb8\xb1\x9fw\x96\xd5=\xeat\xb2o\xce\xd7u\xd2y'\xbf\xefwm\xba\xb8\xef\xe6\xff\x1d\xa83\xc3W\x0f\xads\xffCv\xae\xd6V>h\xb4\xadt\xd0x\xde?l\xc90T\xb7Dfd+\xb7K\xcb\x1eu\xb6\xef%\x1b\xf4\xc1\xf7\x1eo\xc5K8g\x0eI\xd5\x0c\xd8\x80L\xa16u0\xbc\x91\x8c\x85\x94KH(4\xc1\x15A\x03\x9fA_\xc4\x98R\x8e0g\x9a\x98rA\xcd\xcc8\xa1'x\x19%\xc3\xad\n\x1f\xe4ax\x846\x1cC\xf2\xc7\x90\xfco9$o\x9f\x00'X\x9d\x02;8\x87\xba9\x95\xcd\xadjNE\xf3j\x83G\x17<*\xb6LdY\xe5*\x80\xfb\x93O@\xa9\x92\xe4e\x9f\xf1\xd8v\xb7\x1b\xe3q\x87\xe3\xe479\x0b4\xb7#!\x1f\n\x7fG\xf7\xa3\x9c\xefX[\x8f\x80?\x05\xb1>\x158\xfd*(\xe4[9\xdb\x84\xf8W\xaew1\x1f\x0brxs\x8dp \xff\xces\xe25\x85I\xec\x10I\x82\xa1\xcb\x8f\x8b\x1d s\x8d\x1f\xf5\x10G\xde\xa1\xaew\x7f\xec\x95\xa3T}\x16Q\xb7\x1b\xf2e\x89\x8e!\xdb\xdc\xb8\xd2\xf1\x89\xcc\xb6\xad=\xd9\xf5d \xed\xc86\xb5=\xb9\xefFrB\xff\x87\xef4O\xa0\xeb\xc5\xa6\x93\xae\x08\x84\x07\xc7\x15F\xf49\x9a\xa0Lq\xcd\xca\x8a\xf3\xd3\xd5t>\x18mlQ`\xb7\xa3\xad\xdaq\xa5v\xea\x19\xfb\x19\xbeE\xcf=\xd5T\x8e\x1b\x91\xd3\xcc\x12\xa7\x98\xe8\xe9\xa5\xef\xd4r\xdd\x0d\xdbnX]W\x03Y\xdd\x7f}M\xc6\xea\xeb\xd5k\xb2~\xd5\xd5m\xf4\xd0lH\xdbm\xbd}\\m\xbb}\xeb3\xc1\xb8R\x8a\x8aL\xbeK\x05c\xf7\x89\xb4\xdcQ\xa9x\xb9u\xcbZ\xcb:\x85\xfei]o\xabF\x148\xad/o\xd9*rqG\xc4\x0fpS\x93f\xc3\xd6\xaa\x96\x96\"\xc2d\xf5v\xd7\x90-\xd3\x7f6\xae\xfba\xec\xb6\xb0%\xe3]\xb71\xa7\xdd\x00=\xf9u_\xf7<\xfar\xdb\xddv\xbb\xbe\x1b;\xa5O75m\xe0\xf5\x9eVO\xe9\xdb\x86\xdc\xb2\x1a\x8b\xff\xeb\xfa\xf7\xe4s\xd5o\xa2{;\xcd\xfc\xf4\x8a\xf0\xf9\x95\xb2\xfbAc\xfcU\x19\x8857u\xc1\xfb\xba\xdb\xeb(\xa8\x1d\xfc)\xa7#\xfc\x89\xd1\x14\xb7\xe2;\xb4D5\xd1\xfcTR\x0e\x89\xf8\x92\x9d=m\xe4GO\x07\xf9\xff\xb4\x13\xb8.\x844\xf4\xbc\xea\xabm\xbc]\xa6\xeb\xc1\xbe\xad\xc7\x87\xcb\xb1\xb2\x162m<\xa9\x8d\xb9\x9c\xdc\x7f\\1\xf5\x0f\xbav?$}A\x87~\xd3W\x9f\xd9\xd4\xb8$-\xdd\xdeX_\\w]C\xaa\xd6\xee~\xder\xfdP\x8f\xe7^\xed\xf8/\xd4\xb0\xd3\xbf\xaa\xfd\x06\xdbn\xb3oH\xa8W\xff\xf7\x9e\xf4\x0f\xafd_\x9dw]\xf3\x9e\x0c;\xbapD\xf7\xf4\xae\xeb\xac\xfc\xab\xe3D\xfe\xadLd\xab\x91t\xb8\xa6&M\xb3\x84\xfd\xf9)\xfdC\xdd\x0e\x88 \x98|\x0d\xb7\xc2\xd0\x96\xb0\xe5_\xfe\x9bv\xb9\xd4M\xf5\xeb\x17\xda\xe7\xb2\x93\xde\x9f\xbf\x12\xad\x8c\xd2\xd9\xd9\x14q\x0b4$\xeb-\x9f\xb7\x07\x8eI\x1eU\xb7\xa0\xea\x8a\x11\xd3,\xa1\xfc[\xb5^\xf7{y\xe44/.\xbe\xd5\xcc\xafG\xf1\xeal\x89X\xae\xcb\x17tK\xfb\x9bV\xe8\xe0)\xacS\xb9\xcduR}\x1dC\xbd90o\x8e\xfa\xf2\xc7\x9f/\x81NF\xfe8k\xcd\x1f|bF|\x1a\x063.\x9e\xaa\xcej\xae~\x87q&\xe5\xccaD\x9c\x98\xd5\xc8/\xf1\x93;d\xc3\x96:\x9b\xfc\x89s9\x91z\x98f\x86n{C\xa6\xa6\x9b\x92\xa9\xd0|\xf4\xb2s\xf0\xb8\xa8\x14\\T\xd8x\xe9\xce\xf5~\xcb\x94G\x1f\xf6\x84\x95\x04\xb3\xe2K\x96\x13U\xce\xc25\xa5\xeb\xe7\x83\x93\xe4\x05%\xf3\xe0\xd6P.\xad\xeb\x94\xe8\x9c\xda\xf5\xea5\x86\xf3\xd4\xa2}''o{K;-v0\xb0\xe6'\x8f\x84*d\xf10\xfcQl\x01O\xf9\xaa\x99<\x16\xda\x162\x14]1\xba\xc6\xfcV\xeb\xf2\xb9\x97\xe5\xafc\x07\xbf\xd2\xba\xa7u\xb4\xa3\x81\x0bz\xdb\x90\x94\xda\xe5|\xbb\x9c\xdc\xc1;%\xbe`\xb5ygo\xc1\xd9\x9f\xc8Hz\x19\xeaTv\xdc\xea\xc0D\x1d\xae8\xa2\x15\xe06\xd4\xfe\xa8\x85\xefC\x7f\xf4\xc2\xf3e \x8a1\x7f\xe9\x8cd \xe3\xe3\xd5\x0f\xa1\x19\"\x00\x92\xa8\x07\xd3\xa4e\xd9k\xc3\xc0\xfc\xf3D\xa5XO\x9f:\x14c~AS\x0e\xfeg\xfaW\xcd\xaaAO\xd6\xa4\xbe'\x9b\xc5JbV\x06<.t\xc9\xfcW\xa7\xeb\xec\xf5~\xddn\xb3\xe7\xb3\x90\xcb\xbc\xd8\x0dqT\x0fs\x97s|\x13K\x98\xcbU\x8esX\xc4Y\xa1nu=\xba\x1dop\x11!\xca\x1cK\x9ab\xef\xf6\xe30V\xed\xa6no\x0b\xef^\xa3f\x86\xf5-\x1c\xa7\xc5\x7f\xf2i\x01\xde.\xf1(\xa6\xba{\xec\xe6_\xe1\xd9\xbe\xfdJ\xaep\xeds[\xb9\xd4\x8a\xd2\xd9T)f\xbdn\xc9\x97\x1di\x87\xfa\x9eP\xefi\xec\xab\xf5\xa7\x13\xba\x81\xe8>\x0f0\xb0\xee\x80\xa1bq\xd6\xf5\x1dY\x7f\no&\"f\xd6\x82\x89\x8e\xf4\xc6\xd2E\xf5C\xc3\xc0i\xc9\xd3|\xe0\xdf\x99\xd3\x9b\xfb\xeb\xae\x81\xeb\xfd\xcd\x0d\xe9%\x14c\xc5\x95\x83\xd7\x1d\xb6\xfba\x02\x1d\xd3%\xa3!\xd50\xda\xb2\xba\x96\xc0\x93\x17O`}WQ\xfd'\xfd\x8a\xd9\xaf\xa6\x1aF\x18\xc8-\xb5R2D\xff\xf1\xfdOO\x07\xd8U\xe3\x1d\x13n\x89\x9at\xde.\x85~~\xb3o\x9a\x07\xf8u_5\xb4\x076\xbc\x7f\x84h\xd6\x13\xcf\xaa\x01\xea\xd6\xfe\xf8\x8a\x16\xf9\xe2\xb6\xebn\x1b\xb2bm\xbf\xde\xdf\xac^\xef{\xa6\xbbW\xcfy\x8d\x99\xb8\xe1\xae\xdb7\x1b\xba\\\xd2F[\x92\xd6U\xdb\xb5\xf5\xbaj\x98\x05\xb0KzFV\xb7\xab\x13\xdaU\xcc\x1e>Y=aS\xad\x1b\xe9bNv#\xd9<\xc7\";g-\xec\x98\xf1X\x93\x13\x18I\xb5\x1d`?\xec+\xda\\\x9eg\xbf\xab\xa9\xe3\xdcR3yG\xe0\xban\xab\xfe\x81\x1f\x91>\xec\x88Mw\xc9\x94f\xbc#\x0fvQ\xd4\xe6\xaeG\xa8G:\xf3\xf7\x83\n\xbf\x19\xe9.\xa4\xbb\x81\xd3\xf6a\x05?v\x9f\xc9=\xf5\x1e\xe8D\xff\xf8\xfe'1\xc3-yT\x04U?[\xff\xd6wdK\xe0\xean\x1cwW'\xfc\xbf\xc3\x15C\x0b\xb4\x9d\xf8\xf5\x84i\x0f\xf5O:6+X\x8b\x072\xc2~g\xc9\xe3\xf8!\xa4\x1c\xd2\xdf\x93\x9e7y[\xed\x06\xae\n\xac\xc6c7\x81\x8c\xd8\xfa\\sSU\x0dp\xd3\xb1e\xe6%2\x16\x7f\x0fg7s\x0d\xe9\xf0\xed\xfa\x8eZ\x94\xcd\xd4\x08\xb6\x1e\x0f\xc3~K\x0d\x19\"\xe0\xb4\x85\x1f/.\xce\xe1\x877\x17 \x0e!>\xbe\xff\x89O\xa8\x07\xb6\xa0W\xf0'S\x1d/\x1ev\xe4\xcf\x7f\xfa\xb3%\x0e\xe4^\xa7\x95\xe3\xce\x17\x1f\xd6\x93\xbb\xbe\xdb\xec\xd7\x84z\x07\xa4\xef;\xeb~\x0eV\x9b9\xfb\x7f`\x06\x9a-\xb1\xd2\xf4\xaf\xe9\\\xed\xbaO\xfb\xdd\xb4U\xbb\xae\xe8\x0e\xb6kQ\xb3\x02\xb4)\xac\xec\xbb\xea\x9e\x0d\xfdV\xd1\xd1\x0dW\xd2JV\x95\xfe\xff}Wo\xa8\xbf\x89\x88\xe2\x05\xb3\xe9\xd7\x93\x9b\xae''\xf2C*\xaf\x1a\xeb\xeb\xba\xa1\xeb?]\xab\x06\xb9\xc1\xa6&\xa2\xbf'\x1bD^\xd7R3\xd4\xde\x12\xf62\x9b\x1b+x\xf6q \x92\xa2\x8f\xb6\x9a\xaa\x07\x9d\xeb\\?\xaa\xb6\xba\xc5Zy\xdd\x13\xbe\xea \x81\xab\xe7H@\xb6\x1b\xc9K\x18\xa9\xcd\xbc\xd9\xb7k\xae\xc1\xb4\xbeb\xce\xb3\xb5\x8e\xee\xe2\xd5\xdd/\xde\xad\x1d\xdb\xf2\xdb\x9b^a\xab\xaf\xf7t'M-09a~d=\xcaB\xf6t\xb0\xd8&u\xd2\xfbkr[\xb3=\x80%\x8c\xb1\xe7\xda\xe6\xe2aGV\\\x1f\xab]=\xac\xd6\xdd\x16\xb3R\x1f\xd8\x8c\x18\xf8F\x9bN\xb8\xd6\x9c\xdd\xf0L\x9c\x1c\xf2H\x05\x9fB\xcfaK\x1d\x14K\xdc52\x99Yc\x98\xef<\xb9\xb8\xdcw\x1evd]\xdf\xd4k\x18\xc8\xb6j\xc7z=\xe8\xaa\xce\xe6H\xc2R\xecA\xdd\x86V\xe9\x9f\xe94\xbe&\xd2-S\x16Zk]\x15\x8bSu\xdd\xdd#\x0b4o\x92PI\xb59\xbe\x1a\\\x9d\xb6\x0fW3\x17H\xd5B\xd5_\xd7cO'\x8d\xa7&\xd2\x0eVMg\xf4\x05\xdf\xa9\xe8CA\xad\x153\xa8\xbc&\xd7\xb6\xbb\xa1\x96%\xbd\x07Ce\xce\xa5\xe26\xf55\xab\x9e\xb0\xa3\x03\x0c\xfb\xdd\xae\xeb\xd9\n\xb4\xab\xd6\x9f^\xec[\xfa\x1f\xba\xee\xf0q\x1c\xb0Yb/\xb8\xdd\x0d\xecGn \xe4\xf4\x1b\x80gR\xd4|.\xc2-iI\xcf6\xd0|s4e\x0b\x9c\x1a\xf6\x88\x0f\x81.\xff\xcd\x97\x8amB\xbe~ \xe7\xb4~t\xde\x89\xaaV*z\xf5\xd5?\xfc\x03\xb2\x0c|\xdfup\xd3u\xf0-\xacV\xab\xffa\xfdL\x1b[\xb5\x0f\xf6\x0fU\xfb\xb0\xa2\xc5}\xdfw\xdbg7]\xf7\xdc~e\xb5\xb2\xed|}\x03\xcf\xe8\xa7\x1fY\x05/\xbag\x7fG\xbf}\x0e\xff\x17\xb1m\xd8\xf7\x7f\xc1\xdb\xfeM\xa0\xed\x7f\xa8\xee\xab\xc5\x8d\x87o\x99\xafA\xa5.hi=<\xfb\xbe\xebV\xeb\xa6\x1a\x06GCy\x15\xe8\xcb\xbc\xee\xca\x07vYF\x0fL]\xf0\x8f\x81.8\x7f\x18\xef\xba\x16\xe9\x04^\xfa\xf7]\xf7l\xb5Z=\xc7\x06\x9aw\xc03\xf47\xa6\x04\xac[b{\x85~t\xc6;\xe5\xf5\x9b\x0f\xaf\xde\x9f\x9d_\xbc{\xff\xdc4\x8a \xc4sE\xc1\x0b\xe0E\xe0\xdd\xf1O\x81\xee\xf8\xa1\xb3{\x82u\xc5\xcbo\xe1\xefv\xd7\xab\xef\xbb\xee\xff\xaeV\xab\xbf\xd8/U\xed\xc3 uc\xe8\x9b;\xbex\xff\\\xf5\xc3]\xd5\xd0N\xc2+\x8au\x85Y\x1aRT}c\x14\xf4\xb1\xdd\xceE\xb1\x8a0\x85do\xfd\xb7o\xa1\xad\x1bT\xc1\xf0\xf2\x0dM\xba`\xa7\x1c\xebO\x93\x0d\x92\x0e%\\?\xcc\xcb\xbb\xb4\x92<\xd8\xff 1\xf8tI\xd4\xc5=E\x96\xeb\x17to\xc4\xd8\nV\xd4\xb5yJ}\xdc\xc9bSk.\xd1\xa1|\xc4t\x81\x93il\x9b\x07\xe9\xcf[\x9b\xad\xc9m\x12\xbb\xfaQ\xee\xf1\x9e\xbex\xaa\x8b\x13\x1b\nY4\xdfA\x10\xa1=On\xbanu]\xf5\xac\xd2_^<\xac\xfe\xfd o1\xf7\x8bm\x17\x9f\x15\xf9\x84\xbeG\xcd\xb3\xf6\xd3\x1f>\xbc{\xab\xff\xe5\xdbo\xbf\xfd\xd6\xee{\xfa\xde\xbc\xb7\xe4\xfeDG\xa7\x8bXL\xb9\x7f\xbd\x1f&L\xc3\xed\xbe\xa9z]\x8e\xfd\xf9\xc8\xb2\xf7\xe6e\xf0\x04\xc8\xf6\x9al6\xf3\x82x\"\xd6VcG\xaa,O<\xbaw\xf5\xbfh\xb3\xafD\x08E\xa3\xf9\x92\x9d\xb8\x92\xd3\xef%\xe2 V\xebOt\xee\xcd\x1b\x8a\x9b\xba!\xb6}\x93s\xf4\x9c\xf4C\xd7\xa2\xea,v\xfe7u?\x8c\x97\xac\xe7\xbf\x85\xafmI\xd3\x8b\x8c\x05T\xbc\xf7M\xd8\xa2\x02\xa0\xa5>a\xed\x7f\xf2\x12\x9e`\x9a\xad7k\xc5k\xff\xe4\x04\x93\xc3\xea\xfd\xb6\xdaRY\xff\x93W\xf1\xf7\xe8\x8b\xb4\xde\xc6{\xa1\xca\x9f\xdd\x08\xc7V\x1fc>B\xf5\x00\x9fI\xd3|\xf5\xa9\xed>\xf38\xef\x1d\x0b\xc5\x8b\xc0\xac\xad\xa8\xba:\x9dpg\xcb\xd0\xb1\xf9\xd4O\x14I\x15\x87!\xc7\x99\xda\xe8\x02\xaf\x98\x12K\x1d\xba\xeb\x9a\x8d\x16\x1afS\xa0n'\xdd\x03\x11I\x10\xaa\xa7\xcbb\xe2'\x8d\x83gt\xfe\xca\xe6Z\xdbV\x19E\xf9\xf3\x9f\xfe\xfc\x1cQ\xce\x9c\xf1\xd6\x0b\xc0\x87\x9c5\x9b\x8a\xfaz\xf5\xcd\xd7\xdf\x0cO\x90a\x94\xff\xa7y\xd5\x13\x7f^O\xc6}\xdfr\x98\x81\xfc\xe3p<\xd3>\x9ei\xff\xd6\xcf\xb4uL(\x12/\x8f\xc9\xedU>\x13\xd2\xde\x9f\xbf\x92\x95\xb4\x0e\xb4\xf1P}\xf18}\xd4\x9c\x18\xd1\xf0\xbbs\xf8\xfd\x9b\xfa\x82\x81ww\xd8\xbd\\\xd0\xbdX\xc8\xdd\x19p\xcf\x08\xb7\x97\n\xb6\xfbC\xed\x8b\x02\xede\xc3\xec\xce {\xd9\x10\xbb#\xc0\x9e\x19^\xb7\xba\xdb\xf6\xbcK\x87\xd63\x03\xeb\x85\xc3\xea\x19A\xf5\xd2!\xf5b\x01\xf5\xb2\xe1\xf4b\xc1\xf4p(\xbdX \xdd\x15F\xcf \xa2\xa3As\xc4s\xb5\xedM^\xc0\x1c \x90/\x0c\x8f#\xc1\xf1\xa0\x9f\xe4w\x1e\xad\x15taP|\x0e\x82c\xfd\xfb\xbbp\xd9\x85\xc3\xe1v0\xbc@(\xbch \xdc\\\x0c3\x83\xe0H\xe0;'\xec\xed\x8d\xfb:B\xde\xc1\x80\xb7\x1dc\x8b\x0fv\xdb\xdf\xfe\x05k\xeb\xa20wLcC!nw\xdb\x82\xe1\xed\x84\xe0\xb6\x1e\xcb\xc8\x0cl{\xc3\xda\xee\xa0\xb6/\xa4\x8d\xf6Bl8;\x14\xcc6C\xd9\x19\x81\xec\x880vz\x10\x1b !\x87\x02\xd8\x85\xc2\xd7H\xc9\x9a\xa6\x14\x0d\\\x17\x0e[\x17\x0dZ\x97\x0cY;\x03\xd6f\x14\xd0\x0cV\x97 U\x17\x0bT\x97\x0dS\xc7\x05\xa9\x83!\xea\xc8\x00uLx\xda\nN\xdb\xa5\xc5\x06*\xfd\x81\xe9\xc8\xb0tDPZ\xabr\xc9\x80t\xe1pt\xb9`t\xb9P\xf4\xf2\xd1\x0d\x86\xa1CAhn\xbe=\xc1\xbb%\x91\xbb\xe9~\xd8\xf7\xe7\xaf\x84,+^w\xdb\xdd+\x14\xa3\xbbn\xa8\xe3\x13\xa2w\x82/\x1b!\xac\x8e\xc9\x85\xde\xf0\xe2:?\xf7:\xce\x00[6O\xf7\xaf\x04\x0cHC\x05\xb4\x0b\xe0\x00g\xed\xf8\x98p\x00\xa1@s\x9bd\x9d\xe5X\x0bN\xa6\x16\xaa5\x8bx\xab\x8c&\xec\xafc=eAI\xed\xf2+k\"\xe9\xe8\xb6n/7\xaa\x9a\xc3Q\xa5~#*e5\xed\xe7\xba\xad\xb7\xfb\xad\xd4\x1d\x01\x0e\x91jAU\x86\xb4\xd4c\xe3\xd78\x00\x07eHY\xdb\xea\x8b\x1c\xe88\xb8\x86;~\xf0s\xf5\x85\xd5\x83\x8ba\xd58\xa5-\xa5\x8b\x16\xe9\x99\xee\xca*\xd2\x8e\x9d\x15\x17\xce\xdaz\xac5\xfc>\x0f\xb3\x80z-\"l\xbbv\xbc\xc3\x00\xe7\x9a\x8a\xdb\xd46\x83\x00X\xb0\x97\xa8\x97\x0b\xb7\xdd=\xe9\xdb\x8a\x9a|Y\x89\xc11}\xe4]\x07\xd13'\xd3\xd8\xb3\xc0\xb6m\xc7\x8f\xe78\xc7s\x9c\xe39\x8e|\x8e\xe78\xf2\xf3\xe39\xce\xf1\x1c\xe7x\x8es<\xc79\x9e\xe3(\xff>\x9e\xe3\x1c\xcfq\x8e\xe78\xc7s\x9c\xe39\xce\xf1\x1c\x07\x8e\xe78\xdak\xc7s\x9c\xe39\x8e|\x96\x8fn\xa1s\x1c~s\xde\xde\xa232|p\xfb\x8eWy\x17\xe9\xe5\x87\x8b\xd3\x8b\x8f\x1f.?\xbe\xfdp\xfe\xe6\xd5\xd9\xf7go^{\xdf{\xfd\xe6\xfc\xdd\x87\xb3\x8b\xcb\xf37\xef\xcf\xde\xf9_\xfd\xe5\xdd\xc5\xd9\xdb\x1fb\xde\x11\xe5*\x8e\xfbn$B=\xc4\xf1\x8a\xb5\xb6_[\x89\xb9\xeb\xae\x1d\xea\x0d\xa1\n\xc9\xe2t\xda\xe2|\xd7\x93\x81\x8e\xe7#\xb5\x91jH?\x8a\x8c\x95\x7f%\xec\x94\x86p0\x8b\xaa\xef\xd4\x97Y\xc1k\x1e\xe8\xc3\xb5\xe8\xbf\xaf\xfeYm\xc8=\x19\xbb\xcbGn\x0dw\x05\xba\x1b\xf8\x85\x88\xb1as\x82]\x0c/\xfe\xc9\x92 \xcc\xe6\x05G\x8c6\x86l\xa6\x0e\x90M\xfe\xfa\xc5?\";\xe3\x03\\\xdbl\xfb\x13\xa2\xf2\xc9\x1e\x85l\xf5\xcb%\xb3\xaf`8\xcb\x82 \x81o\x8dt\xaf\x90\xa3\xe3V\x97\xec\x1dcAh\x12\x04nw) Q\x82\x920%\xf0\xdf\xf1\x92\x05W\x82\x82\x90%\x08\xc2\x96`)t r\xe0KX\x8f=\xec\x98\xbe8\xef{\xc9\x801!\xb2\xb8#\xe5\xbc\xf3%\x0f\xce\x84\x88\xdb\xef\x9c\xf7\xbe\x94\x865A>\xb4 \xca\xc3\x9b \x0f\xe2\x04y0'|\x8a\xa2\x95,\x06~\x82\xe2\x00(( \x82\x82( \x14\x94\x04C\x81\xf7~\x98\xf2\xa7\xa7x>v\xa6\xa8D\x1d\x00c\xa9\x01\xa1D\x95\x0c\xc1\x9et\x15w\xc2\xca\x91$.9\x85\xa5p\x12K)\x92\xb8`*K\x86jy\x13Z\x16\xcb=@Z\xcb\x91\x9f\xee\xc8O\xf7\xdb\xe5\xa7\xfb\x0f4\xcf*\x8dHF~\x94\x94iuA\xbd\x96\xf7\xac\x0b\x92s\xad\x98\xc7\xe3\x98K\xdc\x1bR\xa7Q\xcf;\x90\xaa\xdeb\x1e\xa8\xbf\x9d\xfb\x1f\x0d\xd1X\x1d#\xfc\x13z\x01\x9c\xf8\xef\xb6\xbe'x\x1a\x18\xea\x83\xa2o\xba\x87\xc7\xd9@e\xa7\xd2v_u;\xb5j\x8e\xa3GkT_\x9a\x7fP\x84>\x082\xc0\x14\x91B\x05^b\x7f\x04\x95~\x9a/\xca\xc9\xf2\xdf\xbe{i\xfc[\xeb\x85\x05\xf2f\x1d3%\xcf\xbf\xe8e\xb0\x0d\xe1\xbd$\x18t\x96\xc6\x0dx\xe2\x14\x0eE\x93\xff\xc8\x84\x92\x8d\xa2\xa5s\xdd\xf6m\xcd\xe2M\x13'%\xfb\x9fa\xd7\xd4\xe6\x0dG\xf4\xf9P\xb7k\xf2R\xb8\x0c_\x0d\x9bO\xf0\xdfW\xff\xf4\x8f\xba\xa5\xe3\x1e\xf4S\xfc\xd5\xa7\xd3\xbb\xeeZ\xd3z*5\xe4\x1d\xd6\xfawg\xc0\xf2\xca\xd9\x97\x8c(s\x18\xcdx\xdf\xd9\xeb\x13\x19\xa1%\xfd\xc9tW\xad5\x1c6+\xa3\xea\x08\xc5\xb8Z\xac\x16q\x8c\x8c\xf4\xd5t\x94\x02#\xa54\xbd\xac\xdf8B\x01q\xca<\xa2\xf0\xa5,d\x8a\xf3\x9c3K\\\xdd\xba\xdc\xb3\xe2\x0e\x9a\xcbE+\xec\xa4y\x07\xcfu\xce\x17\xbbT\x86W\xff\xb8\x95?\xb8\xeaG\xaf\xf8I\xab=\xea\xb6=n|\xd3\xed\xc0\x05]8\x9f\x13\x972\x88\xd8\xfb.G.v@\xb1w\x1d\xce\\\xc2\xe0\xf2'i\x88\xe7\x8f\xc2.]a\xa7.\xc9\xad{$\xc7\xee \xae\xdd\xe1\x9d\xbb\xf2\xee\xdd#:x>\x17/\xe5(\x02q\xf3\x8a:zQ\xae^\xbc\xb3\xe7\xaf\xfdR\x87\xaf\x94\xcbg\xd5\x8f\xb3~\xcb\xc0+\xfd\x86;\x02|\xd2\x0f\xc7#\x81\xe3\x91\xc0o\xfdH\xc0\xde^\xc4n]\"\xd8\xe4Y0\xf9\\\xb9\xdb!b\xd3b^\xc2\x80\x0e\x05\xaa\x9bn\xbd\xcc\xbdt\xc1 \xedw]\xb1\x80\\H\xb0\xb0\xf6\xbfGk\xdf/\xb8N\xc1\x86S)W)\xb8\xaeQXXk\xb4\xcf\x97^\x9b`\xf4y\xd2% \x8a\xde\x19\x06\x95\xfd\x89\xe92}\xa5noE\x15\xba\x16[D\x06\x9f^\xbfW\xf2{\"\xf4\xda8TB\xba\xd8:LB\xde\xd1\x0f\x91\x90\x17\xf0\xc3#\xebE\xbb\xbbxs\x94\xe5u\x18\xabvS\xf5\xe2 Mz\xae\xd1\x170\xff2\x9d\xf0Dt\x0e\x1aF\xf0j\xa1f\x80\x8d\xa0\x01\xf2\xa1\xb9er\xcf\xb6\xbc\xe0\x80~r\x83\x84\x05r\x03\x02p\xa6\x16`\x84\x02\x8a\x05\x01\xd0\xae7w\x8e1\xbbE\xdf\x0e1\xb4+\xf4\xec\x04#v\x7f\x91;>k;\x7f\x88(\x19\xbea?\xc6X\"3\x9f\x91\xadw\xb1Mw\xe4v\xfb\xe0\x1b\xed\xc2[\xecCn\xaeKn\xab\x1feC\x8do\xa5\x1d\xd3\xcf\xb7\xbb)\xb4q\x0el\x99c6\xcbx-\x97l\x90Kl\x8d\x1d\xcb\xff;\xc5\xecY\xbd\xad\x9a\xb8\x90as\x993\x9f\x11s\x98\xae\x80\xc1\x8a2S\xb8qZj\x92\x94\xc1\x11\x92lCt \xf3S\xc4\xe8\x9475\xf9\x06\xe6\x80f\x05\xd7\xf5\xba\xbdM\xdc\xe7:\xae;E\xad\x92\xa6p\xc1kN\xb5\xb7\xd5\xba\xb9\xf6BBF\xda\x1e\xc8\xb6\x85\xd1M7\xdd\xa1\xff:\xde\xa6\xcf\xb1)g?\x00\xb5!vK\x8a\xd9\x11[\xf4B[b\x0b*aOl\xa9Kl\n&\xa5\xa0]\x01\xc4Q\xf1o\xdb\xa7e?\xdb-q:$\xda\xbc_\xbdV\xa1\x1d\x11\xf3\xba\xbd\x92\xe8\x8e\xe8I\xb3\xcc\xb2\x0b\xca\x84\x03G\xddF\x07=\xad'\xee\x16\n;\x15\xa5\xa4\xf5\xd1\xd1\x96\xa4\xa2-HC\xeb\xa1\xa0\x1ds\xe8g\xcbQ\xcf\x86hg\x17R\xce.\xa6\x9be\xed\xb6\xc1\xe3\x1e\xaa\xd9\xc54\xb3\xdc\xf6Z\xf2\x9c\x14\xb39\xf4\xb2\xb0\xdfY\xf2\\\xd4\xb2Khe}\x14\xb2\xd9\xf4\xb1Q\xd4\xb1)4\xb1Y\x14\xb1\x19\xf4\xb0\xa8Y)J\x03[\x9a\x02\xb6 \xfdk\x0c\xf5kA\xdaW7\xe5kQ\xbaW\x9c\xeau\x8c\xa3y]J\xf1\xea\xb8k\x17\xa3w]L\xed\x8a\xd2\xbaz\x96b\x0f\x9dkh\x95.E\xe3\xea\xa6p\xf5\xd5 \x8f\xba\x95S\xb5j\x021\xda\xd6\"\x94\xadyt\xad\xd6,\xb1\x17\xdc\x924\xad#B\xd1\x9aG\xcf\x1a`\x1fu\xd2\xb2FP\xb2b\xfc\x8c)T\xac\xd8\xf7\x7f\xc1\xdb\xbe\x90~5\xae\xf1a\xdaU_K#\xe8V\x93\xa8VM^\xbal\x8a\xd5\x00\xbd\xaa\x8fZ\xd5O\xab\xea\xe8\x95x:\xd50\x95\xaaM\xa3\x9aE\xa1\x1aE\x9f\xba\x84:\x15\xa5*\x0dS\xa6\x16\xa3KE\xcb74)\x8b\"\xd5\xa6D\xcd\xa1CE\xe9O\xb3\xa8Om\xaa\xd3\xb24\xa7\x1e\x8aS\x9b\xf9\xd1\xa66-EkZ\x90\xd2\xb44\x9di,\x95i\x04\x8d\xa9\xd8\xf9\x87)L\xc5\x8b\x01\xfaR\x84\xe9\x13+5\x96\x8e2DY\x1aMW\x1aEUjT\xbe,Ei\x16=)FGZ\x92\x8a\xb4$\x0di\xcexG\xd0\x8f\x86\xa9G\xa5\xf17 G\xd1\xbd\x81}*\x1c\xc7\xa6\x19\xa2\x9a\xf4\xbe\xea\xa2\x14\x8d \x13\x8d\xa2\x11\x0d\x12\x88&Q\x87\xba\xcf\x00J\xd1\x85>\"Qhh\xdc\x0eE\x11\x8a\x10q\xfeUhA\xa3\xeaq8*P\x84\x04\xf4\xb1\xe9?\xdd\xc4\x9f\x8fI\xf9\xa9\x93}\xfah>\xdd\xd3/\x8b\xda\x93Sy\xce\xc229<\x8d\xcd\xbb\x14\x11C\xd69b\xa70\xf8\x19\xcc\x03\x19.\xd7\xf6\xf1\xa5#\xea#R8\x12\xbeh\xbb\xb4\x97'dD\xe4g(\xfd&*\xdeE3\xe8&\xdbL\x12\xe3\xa0\xd6\x1c\x0fpjv<\x9d\x9e\x9f\xd8\xd3i\x0f\xf1e\xd20;i.\x93\xa4l\xc9Xm\xaa\xb1J9\xd5\x96\xdf\xf0\xbezPB\x96\xd3/\xd58V\xeb;~*1Z\xac\xc3\x9a\xb4\x12\\\x9a\xf8\xc1\xf4\x07\xc5I\xb4Z\xa5\xa7\x14\x87}\xa5\x90s\xe1|\x0ds\x08\x03\xce`\xd0\x11\xf4:\x81\xd1\x0e >\xc5J8~\x8f\xe4\xf4\x85\xc6\xe4\x10\x0e\x9f\xe1d=\xba\xa3\x17,\xff0\x0e\x9e\xe1\xdc=\xa6c\x87;u\x8f\xe5\xd0\xcd\xce\x9cnd\x18\xb6Yd\xd6$\x93-9\x16\xe7(?IV\xb4\x00\xa9%\x924\xe9\x11\x84-\xdf\x98S\x01\x85)\x08\x8fW\xcb\x87X\xb9\xf3\xaf\x96w{[E\xd30\xc1H\xc5t\xf586\xb9b\xa8\x06de\x83\x94\xb4\xda\xf4M'K\x93\xc9r\x87\xf5\xae\x9d3=\xea,\x1ca\x9dp\xcc\xf7\x85.\xfb\xe3\xf0W\x1d\xf9\xf9S,A)~~_\x17dZ\x04]\xbf\xb8u@\xd5^\xd6\xe7\xc8\x88sd\xc4\xf9\xad2\xe2\xa0+V\x12;\x8e\xfc&v\xcd\xe2Y\xdc\xc9+\x96D\x10*0\x07\xab1\xda;v\x9e8\x19\xe96\xbc'<28v\xe2\xfdE\x93\xc9\x01h\x04\x9f\xf2\xa4\x01\x1b\xe7p\x9a\xb7\xcd\xfaK\x11\x8d\x16\x1f,j5\x8a\x1a\x81\xa3\x1b\xbd|\xf9,\xbax\xe6\xbb\xd1`6>\x0b{\x02\x01\xfc D\xcf\x16k\x0cJbQ\xc0\x81G\x01\x03\x93\"n\xe7\xf0\xcfG\xf5\x95\x88\xd9\xb8\xfc\xde\x0e\x93:\x0c2:3\x931\xcc\x10wm%\x97\xba8\xc4\x00P\x1e1(\xd0\x94~\x01}\x18\xae\x13\n\x85\x18xh\xc4 \xbf\xd2K\xd9\xc3\x82\xfd\x9f\xc4'\x86\xac\xd21~\x80@gyh\xf2V\xdaE<\xc9\x1e\x80l\xf0\xcb%\xb3%?\xd6d\xc3\xb8\xe0\x91\x16\xbe\xd1\x01\xed\x82\xd0\xda\x17\xd2;\xfe\x14\x85yA\x00\xea\x05P\x16\xee\x05e!_\xe0\x87}\x01dB\xbf\xa0(\xfc\x0b\" `\xb0\x1c\x06\x069P0\xbc\xef\x1evL\x87\x9cp0\xc8\x81\x84\xa1\xd2\xb8\xff\xe4\x84\x85A&4\x0c\x15\xb8\xdf9\xe1a\xb0\x10\"\x86\n\xf2\xc0\xc6\xa0\x04t\x0cb\xe1c\xe8\x97 \x902\xc8\x85\x95A\x1e\xb4\xcc5\xd1\x1dU-\x089\x83\x03\xc0\xce\xa0,\xf4\x0c\"\xe1gP\x16\x82\x06^\x18\x1a@a(\x1a8\xe1h \x0cW\x04$\x0d2`i\xa80\x06UC\xa1i\x90\x03O\x03\x17D\x0d\xc2.\x85\x07\xaa\x06\x91\x1eG)\xc8\x1axak\x10Q\x9b<\xf8\x9a%\x8e\xc1\xd9P\x08\x1b\x94\x82\xb1A6\x94\xcd\x12\xc7<\x1a\xd4y( i\x039\x8d\x90\x06\xe5A\xdb \x8c\xf0\x02\x1f\xc4\x0d\xe2`n\xe0\xc2\xd7$\xc2\xdd\xc0#\x07\x81(dB\xdf \xa9s\xc2\x108\x88\xe8\x85\x08(\x1c\xa4\xc2\xe1\x00\xef\x9d|X\x1c\x84\xa1q\x10\x80\xc7A\x10\"\x07\xfe^\x8b\x87\xcaA\x14\\\x0eP\xc8\x1c\xe4\xc2\xe6 \x16:\x07\x0b\xe1s\xe0\xe9\xa6\x08\x18\x1d\x94\x84\xd2\x81\xaf.\x88&f\xc1\xea,i\x16\xcc\x0e2\xa1vv \x08\xf4\x0er\xe1wv\x95M8\x1e\x14\x87\xe4\x81\x1f\x96\x07(4\x0fPx\x1e\x14\x84\xe8AY\x98\x1e\x1c\x00\xaa\x07\x10\x0f\xd7\x838\xc8\x1e\xa4\xc0\xf6 \x1a\xba\x07\x0e\xeb\xef\x80tA\x02\xac+\x04\xe3\x83\x14(\x1f\xc4\xc2\xf9\x00oPYX\x1f\xe4B\xfb,i\x08\xd4\x0f\n\xc3\xfd\xa00\xe4\x0f\n\xe8H\x04\xf4\x0f\xa2\xe0\x7f\xa0@\x00\x01\x81\x01\x82o\xff\x85_\x1a\x1dJ\x92\xf6\xbd\xeb\x84\x05\xe2\xaf\xbb\xa0\x81\xf8\xdb\x16<\x10\x7f\x0d\x81\x08\xe2/\x1a0AH\xc9\x14\x9f?\xf0\xe5\xae\x94\xc8\x1c\x97\xcf#e\x90\xbb\x8b;|&\xb9|\x10\xd8\x1e^\xa5\x03g\x96'\xd7\xe70\x99\xe6S5l8!^\x8d\xc3e\x9e\xcb\xc7\x0d+\xc4kt\x98Lt\xf9\xe8\xf0B\x08@\x0c!\x18\xc6)\x0054$f\xe2\x0d\x0di\xc8\xc1\x83\x94\x1a\x03A\x04\xdf\xc9\xa1\xfb\xdc\xd0\x01G\x04\x7f\x84\xcf\x03K\x0c|\x89\xc3\x13\xc3\x1fya\x8a\x9e\xcfQ\xb8\xa2\xe7}7\x84\x0c\x94\\+\x1b\x8d\xb6X\xa4\x03\xc6\x08\x8ftj|L\x97z\x8ct)\x0f\x18\x12\x96*\x8e\x13\x18\xb9X\xa2\x0d\x92\xf4\x8a*\x0b\x96\xb4$\x96\x00Lz\xd3X\xcd\x14\x93\xa8\xf4\x15Y\xa9\xd84V\xf1~z&\xabl\xc6\x81\xc1\x17\xa50\x17x\xde\x8b\xdb\x86\x1d\x02C1z2`\x82\x07Va\xfb\xc4\x9f\xa5y0\x0eq\xfaq\x8e#\x9aZ<\x17\xa6x6L0\x1f\xa6@FL\xe9\x9c\x98\xb8\xac\x98\xac\xbc\x98\xd2\x991\x91\xb91\xa5\xb3c\xa2\xf2c\x96g\xc8\xb8\xc41Jeo\x8eL\xc1,\x99`\x9eL\xa1L\x99\x9c\\\x99\xe4l\x99\x02\xf92\xcb3f\x9c\x96\x07=h\x90O\xe1\xac\x99\xc3\xe4\xcd\x14\xcf\x9c\x89\xcf\x9d)\x9e=\x13\xca\x9fY\x92A\xe3\x104\xe5\xd5xrh\x92\xb2h\n\xe7\xd1\x842i2si<\xd94\x11\xeeI \xa3&\xd6\x7f)\x99U\x13\xca\xab\x89\xa9S\xe1\xdc\x9aPvM\xc1\xfc\x9a\xe2\x196\xbe\x1c\x9b\xac,\x1bD\x1a\xad\xc9\xe8\xc8\xb3)\x91i\x13\x95N\x12\xc8\xb6\x89\xce\xb7\xf1\x1c\xc1'\xe7\xdc\xf8d\xa1g\x8b\x052o\xd2:+.\xfb&\xa6O\"3p\x16\xe4\xe0\xb8\xcea\x8b\xe4\xe1De\xe2\x84sqb\xb2q\x02\xbd\x98\x96\x91\x13\x9b\x93\xe3\xca\xca)\x90\x97\x93\x90\x99\xb3<7\xc7\xd7i\x91\xf99\x853t\xbc5B5\xb5l\x9e\x8e#S\xa7p\xae\x8e;[\xa7t\xbe\x8e#c'+g\x07\x91\xe6\xda\xf8\x05\xf2x\\\x99<\xae\\\x9e\xb2\xd9<\xc5\xf3y\x0e\x93\xd1\x93\x96\xd3\x13\x9d\xd5\x93\x98\xd7\x93\x92\xd9\xe3\xcc\xedqgn\xc4\xe7n\xc4\xe4\xf7$f\xf8$\xe4\xf88\x9a\x96\x91\xe7\x930)\xca\xe6\xfe8\xb3\x7f\xca\xe7\xff\x94\xcf\x00*\xa1I\x91Y@\xb1y@z&\x10\x9e\x0b\xe4\xdd=b\xf9@i\x19A\xe1\xbc\x91\x88\x0f|YA\xd1yA \x99A\x91\xb9A\x0b\xb2\x83B\xf9Ae3\x84\x1e=G(<\xda\x87\xcc\x12r\xe6\xe5\x04u\xeap\x99BIu:l\xb6\x903_\xe8\xaf\x931\x14\xca\x19z\xfc\xac!,o(\x9c9\x14\x0eTee\x0fY\xd2\xb0l\xa2\xd2\xf9DhFQzN\xd1\xe2\xcc\x12OfQ(\xbb\xc4\x9f]\x14\xf8\xda\x9da\x14\xfe0\x98e\xe4\x11\xe1\xcc4\x8a:R\xc7\xf21B\xf9F\x19\x82=YG\x8f{f\x7f\xe4=L\xc9E*\xc5{\x18\xccH\xcaP-o^R\x86\\<;)>\xe3\xacH\x86\xd2Ar\x94\x8e\xdc\x8fG\xee\xc7\xdf.\xf7\xe3\x7f\xa0Isi\xa4O\xf2\xa3\xd8\xb4\xb9\x0b\xeaM\xbdg\xadON\x9cc\x9e\x98c\x1aq/M\x9dA=\xef;\xaau\x8b9\xd6\xfe\xb6\xaft\xf1dH\"\xc3\x103\xdc\xec\xb3\xd8\xa1\xfe\xa5\x1bI\xf2\x18\xdfw\xa3u\x13H\xd4PI\xc3[\x80U\x9e\xd6!\x8eQ\x9eg:\xfd\x15(\xc1x\xc1I^,\x7f\xf0\x98\x11\xb0\xfd\xdc/\xef.\xde\\\xbe;\xbf8{\xf7\xd6\x1b3\xb2\xdf\xfe\xd77\x1f\"\xde:\xfd\xee\xc3\xc5\xe9\xd9\xdb\x887\xdf\xbe\x8bz\xe9\xf2\x8fg\x17?^\xfe\xf2\xe6\x02{}\x8a\xfe\xc47+\xec?\x02P\xad~\xc7^\xc1\xa3?\x8c\x1fQ\xe8\x05p\x9e\xc4\xdb\xfa\x9e\xe0\x14C\xa8\xe3\x80\xbe\xe9\x1e\x1eg\x03\x15?\xb7\xed\xbe\xeavj\xd5\x1cGf\xd6\xa8\xbe4\xff\xa0\x08}\x10\xa4\x8a)\"\x85\n\xbc\xc4\xfe\x08*\x1f77\xa5\xc9\xf2\xdf\xbe{i\xfc[\xeb\x85\x05\xf2f\x1d3%\xcf\xbf\xe8e\xb0\xed\xc4\xbddpt\x96\xf6\x99\xd4\xb7wi\x1bQCC\xff\xc8$\x90\x8d\xa2\x92sE\xf6m\xcd\xc2\x15\x13_'\xfb\x9fa\xd7\xa8\xd4\xbfe\x91\x01\x98\xe3=v\x96\xefM+2W\xc1\xedQ\xd2f)\x0d\xe2\x9d\xd9\xfa\xddm`y\xdc\xecK\xc69:\x8cft\xe9\xec\xf5\xc9T\x8b\xfed\xba\x88\xd8\x1a*\x9b\x12S]\xcfb\x16KV\x8b \x1d&}+\x1dC\xc0\xc8@\xcdu\xb2,~\xc0\xb9\xa0F\xed\xf4\x10'\x19YV=\xa2\xd0\xa5\xf5q#\x18\xeeE6\xb8\xcc\xfa\x16\xda\xd4\xa56v\xb1MYn#\x17\xdc\xc4%w\xd1\xa2\x1b\xb7\xec\x16^x\x93\x96\xdeGZ|\x0f\xb2\xfc\x1e~\x01.\xbf\x04?\xe2\"\xec[\x86S\x82\x8d%\x96\xe2\xf2\x81\xb0E\x0b\xb2?\xc8\xb3tQ.\xb5,[\xf5\xe3\xb4\xd82\xdaA\xbf\xf9uO\xfa\x9ap\x830\x1c\xe3p\xc78\xdco=\x0eg\xfb\x81\xb1\xee\xa5\x9fn\x9dEk\xce\x95\xcb\n\"\x1cK\xf3V\x01t\x14\xdc\xda\x97{\x93\x80\xc1]\xef\xba7\x00\xa1\xdf\x0fW\xf4\xf7hE\xfb\x05\xf7\x04\xd8h\x0f\xe5\x8e\x00\xd7\xfd\x00\xe1\n\xa2=\xb9\xf4N\x00\xa3'\x93n\x00P\x14\xc70\x86\xecOL\x0f\xe9+u{+\xaa\xd0\xb5\xd8\x0208t\xf2\xbdrP\x1f\xa1\x93H\x14\x16\xe9LG\xf4\x15y\xd3\x8e\xba\xe2/9\xa3\xad\xd6\xebv\xef\xf1&*+\xe50V\xed\xa6\xeaE4Z:\xa81\xb7\x01\xff2\x85D#\xfa\n\xdd\xb5\xa1\xaa\x87\x9aQc\x8f\x86|h\xed\xcb\x0e\xb1\xf7\xc4w^\x1e7\xc8\x95\n\x17\xbb\x0d \xef\xb0\xe2\xf6V\xc1]U\xf4~*q'\x15\xdaC\x15\xdb=E\xee\x9b\x0e\xbec*\xbcW:\xe4.\xa9\xe4\xfe\xe8QvF\xf8\x9e\xc81\xfd\x8a\xee\x83J\xdc\xe6\x9e\xbc\xeb\xc1\x17\xe1%;\x9d\x12{\x1c\xdb\xf8\xbfS\xac\xa1\xd5\x1d\xfa5\xf0~c\xe1\xb2r>\xdb\xe6\xb0h\x01;\x16e\xbdp\x9b\xb5\xd4R)\xe3\"$\xd9\xf6\xe9@V\xa9\x88-*o\x81\xf2\xed\xce\x01\xad\x8d\xa5\xe6u{\x9b\xb8Wq\xdc\xc1\x18\xb6\x18\xc1\xbb\x17\xb5\xb7\xd5\xba\xb9\xdca!#\xda\x0d\xb6\xeddt\xabM\xdf\x08m\xae\xe9\x0f\x85,\x83\xfd\x8e\xee\x03\x85\xbc\x1f\x8f\xdf\x13\xe1\xf1DY\x0b\xf0z9\xe5\xac\x06\xa0\x96\xc3nI1\xeba\x8b^hAlA%\xac\x88-u\x89%\xc1\xa4\x14\xb4&\x80x-\xfe]Z\x8e\xa7\"\xe6\xf2\xb6n\xc7\xd5\xfd\xd7\xd7d\xac\xbe^%\xda.\xfa\xed\xa5\x91\"\x8b\xced\x11\xd2\x1a\x05\x89\xc1\xba\xab\x19|\x8a~/\xde\xa9\xdb\x9b\x86E(/\xa9\xd2_r\x96\x918\xa9[q\x8bf\xd5\xb6\xfb\xaa\x11\x04%P\xb7\xb3L\xa02\xad\x82\xb6\xd5\x97\xb4\x02B\xf2\xea\x90A\x93\xf2DT\x04\x95w\xdbU\xcd\xe5u\xd7nHh5\x10\xd2\xe8\x07\xb4SE\xb4\n\xf8\xb7P\x8d\xddV\xa2\x0f\xae\x9bn\xfdi\xa0k\xcc\xe5\x03\xa9\xfc[cghR\x14\xc7\xa9\x9b\xc8F\x08\xa5\xc5\x02\x15j+\xa7Xl8\x90N\xb98TF\x00\xe9\xe8\xc3\xb6\xdb\xec\x1b\xe2\xd2G\x16$\x97\xdd\xdbfoLU\x15\xf0\xc2\x94\x80\x07Y\xed\xde>\x93J\x99\xdc\xcd\x93:gw\xef<1\x1c\xdd:\xbf\x10\xd7\x9dV\xa3bb\xd3\xd3G\xbe\\A\xbb\x03\x17^\x0d\xee\xbd\x8f\xd7\x7f\x13\xafp\x01\xe7\xa9\xa4v~\xd4\x89\x0ef\xc8\xc1\x17\xac\n\x1bt\x08\x1b\xf5\x98\x12\xd2\x8c;\xb8\x0d|Ja1\xb2\xeb6Q\xb6\xcf\xe8\x83\xcb\xf0\xc7H\x8eX\x00\xc0\xb7\x08x\xcb\x08\x9fS\xc5/\x08\x07\xb8\x93\x97O\x0c\xdd\x7fy\xa5\xa8Y\xc4\xc4\x1b\xf6\xd7\xc3\xaeZ\xfb\x9d\x0d\xed\xb4\x13\xf9\xdd8K\xf1{m\x93mR\xaa\xab:\xb2u\xbb\xa9\xef\xeb\x0d[8\xe4,\x17\x9a\xcf\x19+8c\xa2*\x84\xbe\xc2\x05\x9d\xdb!x\xa3\x93\xb2\xad\x94\xcfHi6J\x1ebO\xadXd\x9c\xec\x01\x02\xb7\xc6\xc6\x1eK#Tg\xfeAs(o!\xc5e\x1f|\x10\x0dM\x1f\x16\xd9E\x07>\xd1\xc0G\xc2c=>\x91\x87R\xc9o\xfe\x90\xadqX {R\xd9\x0d\xcd3I\xb6BP\xc9\xb4\x1b\xa8\x9aF\xa6\x18\x0c\x0c\xb9\xab #_\xeaa\xa4C\xab\x9f\x10\xd0\x0f\xa4(\x13[\xf7\xa1n\xd7\xe4\xa5\x18\xeb\xaf\x86\xcd'\xf8\xef\xab\x7f\xfa\x7fl\xa5\xd2\xbd\x14k\xfc\xb5\xc9\xa4i\x1a\xf7\xa2'D.\x8b\x05L\xa4\xac=\xb9\xad\x87\x91\x1d8O\x8a1\xb5\x93\xb5\x91\xc7\x0e\x94\xda\x07\xaa\x8d+\xed\x07M\x1d\x12\xd44dj\x97\xa9q\xd0\xdc\xe6j\x85\xa2 \xa2\\]\x05D)\x81N\xfcu_\xf5\x15uc\xc9\xd4\x91\xa7\xfb\xb1\xc3\xe6\xbc3B~\xfa\xf1\xe2\xdd\xe5\xfb7\x1f\xce\xdf\xbd\xfd\xf0\x06\x8d\x91\xebo\x9c\xbez\xf5\xe6\xfc\xc2\xf1\xe3\xeb7\xaf~:{\xfbFt\x9c\x08b\xf9K\xc0\xe7\x9e\xda\x0c3\x805\xb7\x1a\xaa\xfd\xd8}5i\xb3\x08g\xa9\xe1mg\xd9\x9ej)S\xa5\x1aY4h?v\xdbj\xac\xd7\xf3\xc4\xb9\xab80\x9d\x91\x02L\xd4\x90rMb\\\xd5[R\xb5BF\xdb)2*Fh\xa8\xd06\x8f\xd5'\xd2\x9e@\xbd\"+\x06}\x17B\xf4\xb6\xd5\xd47\xbf9\x91M\xa3J%i.\x94\xfe\xb8&w\xd5}\xdd\xf5,\xd5F%O\xc0G\xd1\xec\x04\xfeW\xbd\xfd\x03i7\x83R\xdb\xa9!\xec\xd8^\xf2B\x9f\xc0\xf5\xc3\xae\x1a\x06jA\x14\xadt\x15/\xf4\xc4,_\xfc9\xa5\x02\x1b\xb2n\xea\x96\xa8\xeba`V\xbci\xc7\xfe!\xda\xce\x8c\xdde\xb5\xd9\xf4d\x08\xed\xf45=\x9e\xbf\x9a\xbd\xd25\xa9\xef\xd9>\x9e\xff \xfb\xe6\xa6\xef\xb6K\x8aP\xbf\x93\x85\xd0\xaeB\x8a\xe85{`I\xea\x0d\x07ZW\xbc\x81\x8c\xa3\\\x17\xc6;B\x17\x8d\xcf\x9d,\x81\x0c\xa6\x1b\x16\x8c\xbb\x87\xec\x0d\xf6\x96fs\xb0\x17T\xbb\x03\x0bm\x8f\xa5#\xda\x92I;EY7;F\xee-\xbb\x9f\x8e\x05T-Ki\xf3+\xe2\xff\x9e\xfe\xb4\xf9~\xdfn\xe2\xe3\xa3\xcb\xf4P\xf3el\xa5\xac\xdb\x91\xb0\x0d^O\xd6\xf5\xaeV\x98\xf0\xe9.|\x90\xcc#\xf7\x84\xd99E\xd4\xdc\xb2\xc9\xc4\xec[i\x0b.U\xd5\\\xe8GF7\xcaY,\xcb\xb0\x94\x93\x82\xf4jc&\xc3\xbd\xab\xfaQ\xbf\xb0\x80Z{&\x0f\x1e\xc8\xa8\xe8<\xeb\x0f\xd9T\xf6\x8fE\xcd\x8av\x8fQ\xb2\x08\xa7o\x8c\x13D\xc48\xbbF\xaa\xecb:\x08UH\x0e\x0f\x84d}P\xe5\xc5\xd3=hM\xe3*,m\x1a\xaf\xc9L\x18^\xb7\xaa\x12O\xbb-\xd4\xb6\xc95\xc6\x1c\xf2\xeb\xaekH\xd5\xe2\xc5\xcb\x8fX\x0d\xfa=\x81\xfaF\xe8\xd2\x0d\x9d\xf8\xf0\x99\xf4\x8c}\xfd\xbe\xee\xf6\x83\xb1\x90\xb9\x14\xde\xb4\x1e\xd3P\x0dc\xbf_\xd3.2(\xed\x06\xdfD6&\xb1\xcfh\x91\xfeA5\x8f\xe9\xbbJj>/\xa5\xf9<\xf0\xdc\xc1L\xa5*\x08\x99@\xcb\x97o\xfe\xe0\x8bxZ\xa1 \x0b:\x7f\xece\x1d\x91Zhq\xe7\x8f\xa7)\xae\x84\xc3\x98\xe5\x1e\x7f\xd7Z\xf4\xf1\xd7\xcc\xa5\x9f?\x91\x0e\x80|\xd9\xbd\xfd\xcf\xf4\n4Y\x8a\x87\x80\x14\xacO\x91i\xf9\xd2\x07\x8c\xb4c_\x13\xe1q\x8c\x9c\xb8\x85\x93\xf5\xb2\x0d\xbc\x14]\x00\xdda\x1f\n\x1c\x81\x1eG\xa0GY\xa0\x87\xce\xc1\x81\xae0\x9az\xbe?\x7f5\xcf6\x96K\xa8}#\x84M3!\xb0\xa2\x9d\x0d\xcaz\x9a\xbc\xa2\xd5\xc3\xa5\xb2\x80&\xb9\x06\xfa\xa7\x86\x83\xa0.>w\xd5\x00\x1d\xf5m\xf9m0\xe6\xc6\xda\xd3\x97h\xdb\xfc}\xd9\x82\xf6Qbg\x9a\xaeIr\x7f\xfe\x8a\xee\x8c\xe07\xeb# 9\xe5\x057X\xfcA\xb6Y\xfc\x89\xd8l\xf1\x07\xeb;\xfe\xa4E\xc8!\xa2\xf99[1K\x98\xd8\x9a\xc5m\xc8\xf8cl\xcb\xf8\xb3\xb0\x03\x16\xe1\xe3\x8f\x0c\x7f\x7f\x1d\x86\xbfp7,\xdd\x0bZ\x82\x1c\xae\xb1\xbdC\xe4\x0f\xbe\x18\xc8o\x8a\xed\x16\x11\x81F'\xe4\xef\x1c5q,z\x82Z'\xad\x12\xa6M\xa7\xad\xab\xdb\x9b\x0e\xaa\xebn?\x8a\x12\x86z\x14\x898H\xe4\xf8\xe8\xc8\x1e\x1dY\xfe\xf7\xbf!G\xd6\xe5\x0b\xf9\xfd\xafI\x821gL\x0flh\xaa\xe1\xaeno\x97f\xdaR\xdbJ6\x97\"\x87\xe7s\xddn\xba\xcf\xa6\xb3e\x8c\x99\x1c/u\xb8\xb6u{)D\xedH\x9f&G\x99\x0c\x9b\xees;\xd6[r\xf9oU\xdd\\n\xc4]\x02^9\xac\x03.oz~\x90v\xb9\xe9\xf6\xd7\x0dauI/\xde\x92\xc5k\x93*HS\x06\x91\xab\xa1\x98\xd2QO\xb2\x9bn\x11\xbc\xe6\xb3S\x8e\xa8\x9d\xc1j\x8duv\xc2\x8d\xe5WG\x19=\xbf\xce@\xcc\\7\xa7z@\x7f\xa2d\x1aF5\xa4K\x1e\x991:\xe5\xf9\xdcY\xa5\xa0~\xa5\x0b-\xaek\x93\xd1-\x95T\x17\xd2\xdf\x0f\xf5m[\xb7\xb7g\xed\x0d\x9a\xaa\xe0\xc78U\x0d\x1b\x96\xba\xbd\xbd\xa4\xae\xc4\"uF\xb7~.\xcd`\xbc\xd1w\x08\x0248l\xce\xd5\xedG&\x0d*\xe903HN5v=[\x83\xd8\xcd;P\xc1\xbaj7\xf4\xcf\x04\xde\xbdg?\xec\xdb\x7fc\x8c\xff\x8a\xc8\xba\xdd\x90/\x97\xdd\xcd\xcd@\xf2k\xe7\xf7\xa2\xcfhQ\xd2\xc3\xa7~\xdc\xbagN>\xd9\x00\xa9\xd6w@\xf5\x9ai\x85\xde\x9aJ$\x91\x9a\xabm\xdd\xd2\x9f\xa8Aa;\x8fm\xf5\xc0w\x84\xdc&0\x98(Yw\xdbm=\xf2[\x95Gq\x05\xb8u\x9b\xe4\xbak\xffM\xdc\x12\xc9\xf75\xc8e\x00W\x1f\x98\xd4\xef\x98\xfd\xfa#35WS\x92\xe1H\xfa\xed\xb4,\xb3\x0e\xc5/\x91\xbd\xfa\xb9\xa6\xae\x17\x17\xf2]=\x9e\xd2M\xe5\x95\xea\x03\xf1\xe1\xb9dw\x14$\x8e\x86\x8b\x15\xdf7\"\x17\xf5\x96\x0cc\xb5\xdd\xf1[\x11\xc4\xd8\xe8CP\x0f\xa2V\xb0\xd9\xb3\x08uS\xdf\x93\x96\x0c\xe6m\x12\xd22\xe9.\xdd\xf6z\x18;k_\xe3\xde\xd5\xf8\xeb\xfb\xc7;\xc2\xee\xae\xe5\xe3)\xefee\xd5\xbc\xab\x06\xbe\xa9\x98\xcb\x84g\x9f\xea\x86V\x9cn\x15\xac[\xe5\xe7O\x072>g^l\xcd\xdc7s\xe8\xbbvm\xaa%W+\xb6i\xa5\x9b\xcb\xfb\x8e_\xf8L\xeb\xc5\xb2\xd9\xda\x07\xee\xeb\xd9\x8avS\xdf\xee\xe9^t[\x0f\xd7\xe4\xae\xae\xee\xf5\xbb\xa4\xb7LA\xe42\xc9\\\xcdH\xe2\xdc\xe5\xd3\xf2\x14D9\xf0\x89\xec\xc6\xf9\xa2\xe8}\xdb\x925\x19\x06v\xc9:\xd5T\xe8I\xb5\x19,n\x82\xb7\xdd(\xf6~W\x1f\xf6\xdbg\x98\x8e?\xbf\x82\xaa\xf9\\=\x0c\xb4\xbb\xaa\xc6T\x1dm^\xbc\xe2\x95\xb9r\xec\x08u\x8c\xa2\x1c\x11eAPB\x15\xd3\x80=\x1d@\x98|\xbe{\xa4\x83\xb4\xed\xdaz\xec\x8c^\x1c\xefH\xad\xa5VJegIW\xf7\xf5\xa8\xb2^sSl\xae'\xd3\xc9\x9bZ \xdbfH\xf6\xec\xfb\xaaa\x80v\xb9\x8a\xfc\x0e\x90m\x8bk\x9d\x8bYO\x95\xcf\x84\xb4\xf7\xe7\xafd\xab\x92W\xd8t?\x11[V\xcbF_SC\xaf\xee5\xd8\x1b\x1esO\xa9\x03\xac\xc4\xbe\xb5xq-Cq\xad\xc2kr\xc1U9n].\xb42\xc7\xac\xcd\xbe\xd59j|\xf0\x15:rL.6\xee\xb5\xa23\x01_@\x8a\xfa\xa8\xb8w\x9aP\x1b\xf7\nP\xd0\x0b]\xee\x7f\xaa\xfe\xa6\"\x10\xf3<\xb3}N\xbf\xb7\x89\xfb\x99\xde\x9e\xb6}Kwo\x97\xf2'MO\x12\xf3!q\xef\xd1]\xb7R\x1ec\x94\xaf\x98\xe1%*^\xa1\"\x10\xf1\x0f\x03\x9ea\x91\xe9\x93\xe3\x01\xe6\xf9~\x1e\xaf\x0f\xafn\x86\xa7gGl4\x1f\x0f\xf5\xee\xa4\xe9\x1e\xabO\xaa\xe5\xfe\xaek7\x1f\x94\xcb\xc1\xadQ\xd0\x11\x8e\xdf\xbd{\xfb\xda}\xd3\xb5\xf9;\xfd\x97\xf7\xc7\xb3\xb7?\xa0\xbf*\x1fN\xd9\xc7\xbe\xa2q\x8fan\xdb\xe4\xc9*w\x02O\x1d\xacb\x1c\x1d\x85\xbc\x04\x94x\xab\x85\xba\x15\x14`\xf3$\xd3\xef\xc7\xc6\xbb\x84\xca\xe3\xff\x87\x8d8WBq]/\xb7\xeb^ygo\x7f\x90\x02\xcf\xde\xfe\xe0\x95\xb8o\xaf\xb9\xbf\xe3\x10(\xab\x17Q\xb9\xb9b\x0e\xd5zE\x0d\xc80\xd4 \xfcs\xeb\xe9\x13FM\xa2\xf8\x04\xee)o~\xa3e\x06\xd4m=\xd6,\xc8(_\x02\x01~e\x9e\xa3<\xd1S\xc5\xf5\xa4\xe2\x1cA\xaa\x86\xc8_\x13v4\xb4\x9cH\xc7]k\xdcS\xfa\xa1TX\xa3\xde\xb0\xbe\xab\xfa[\xbeO\xd9\x90\x86\xdc\xb2\x1d\xd8 0\x0f@\x9e\x8c\xae\x9e*\xc2\xb7\xd5\x97\xcb\xa55\xb1v\x0bR\x98\xd6\xc5\x92\x9d\xc5\xac\xaa\xe9`\xad\xad\x98 \xb9\xe7\x04\x1a\xfd-1\x9b`\xb4\x80\xb3l\x94m\x88\"\x13m\xcf\xa6\xaaY>\x1bU\x08\x9eVb\x07\xcb\x8c\xd5\x92\xb5\xde\xd1\x94\xfd\x8e:&\x97 \x19\x11\x01GF\x11(\xb5\xa5\xa9\x86q\xf6\x10\xad\x01\xa9\x06AW\x82\x01\xa3\xe6\xd9:\xf5\x86\"\xc0\xe0 \x93\x04\x87\xda\x0c \x9a\x81\xf7\xf3\x94\x8e\xb0\x05\xfa`\xa3=u\xa0yc\xcf\x99p\xe9\x9a\x8a\xe5\xce\x1363T\x9b\xe4\x9b#\xce\xf9\xb1\xa0\xd2\x8b\xe6\xc4\\w\xb5\xca\xfe\xf9\x80W\xc3P\x95\x0cK.\xad\xf8\x84\xf1\x8fR\xd5\xd7\\5RV\xacI\x9b\x96@\x8a\xad\x8f\xa5\xfa^\x93\xf5\xdd?~\xf3\x15i\xd7\x1d\xe3\x8c\x12\xbf\x8a\xfe\x9e>\x93*0\xb5mI%\xac\x8f\xe3*a-\x8e\xc3]\xd5\xdbpD_\xc9\xfc\x0b1\xcaj\xcb8\xa7C\xc5S\x96\xd7\xa4\xbeG-\xd6\xe4\xe7\xcd\xc3f&\xefP\x1fEl[\xbbO\xa4\x1d\xe0\x8e4,\xfb\x99\xa7\xc2\xb3\xecl\xbe!\x12\xa2\xba\xcf-O\x8f\xeeZ\xa5\x9f9\x9fv=@5\x0c\xdd\xbaf\xa1\x1c\xb9\x19\x9e(~\xbb\xcf[\xdc\x18\xda\x8a~\x86\x7f\n~\xcd\x85\xe8\x95\xb5\x94\x06\x83_\x8b\xe3+TJ\x9b\x01\xd1\xe8\xf8Z\xa4k\xb6%B\x8b{\x16\xd4p(\xad\xe5`j:}\xae\xab\xa6jmF\xa1H\xc5\x8c%<\xc4\xa0\x1ea\xb3\xa3\xf5\xecbH\xc7,\"\x07\xc9ac\xf4\xe3\xe0\x1a!C\xa8\xc6~Y\xf4\xa6jH\xcb\xe2!\x8a*\x91/\x0c\x0c\xc47t#\xac\xbbv\xac\xeav\x98\xd2\xa7\xc5 \xb2@\xe2fS\xb3o\xc6N\xea\xef\x14\xa3dG\x17\xc3\xbe\x1e\xd91\x01u\x0f\xd7\x0d\x83gM\x00\\\xaf\xfd\x9b\x1b\x12k\xf8\xb6][\x7f\n\x86\x8e\xb4.\x12\x9f(#}\xb7\xdfV\xedW=\xa96\xac\xda\x8c^J\xc6\xc4-u\xae7\xa4\x1d\xeb\xd1O6\xe8s\xae\xa4\x005v\xc0)\x96\xaaf\xfeq\x1a{xF\xbe\xac\xe0\xe3y\xd7\x8f\xa0\xb9U\xffB\x1e\xae\xab\x81<\x97\x15\xfbL\xae\x87:\xcd\xe9\x13\x9f\xa05\x91\xbf5u\xfbiZ\xd7\xc9z\xdf\xd7\xe3\xc3%\xd3\x8fu(\xe0\xad\xdbA\xe3[\xb4P\xb2\xad\xea\x86\xf5\xbd|\x1d\xc4\xeb\xb2\n\x1b2Vu\x93\xe4[\x88O\xa4 \xe6\x91\xca\xa9H\xf1+2\x97\x14}D\xa3\x1f\xca\xcb\x1e\xad\xfe\xb1\x1e\xc6\xae\xaf\xd7U\x93t\x12rG\xaa\x8d\xad\xd7QF\xf3\x9e\xf4Cm%h\xf3C\x8f\xebj\xa8\xd7\xe2$\xa0\x9e3\xa1\x96\x19\xd4T\xc3\xc8\x8f\x0d\xec\xdas\x0d\xdf\xf5\xe4\xbe\xa0\x82\xdfU\xc3\xddB\x85\xb4\x12\x128\xfc\xf6r \xe3\xa59\xbd\xe5\xe3\xac!\x04a\xb2Hz\xc0\xf4\x13\x93Z\xb7#\xb9ERy \x90j\x03\xcen\x80PW\x80\xbf;\xa6A;\xaf\xfaq \xe3\x8f\xacW\xcc\xe1\xe6\xa7O\x97v\x15\x82\x1ad\x15)\x8a\xa3\xa2\xf8\xdc\xe2\x8aB\xa7\xa0\xf2\x1e\xfdg\x81\xe2\xe6\xbc\x98\x02\xc2\xcc\xbaOL%\xd5n\x07\xdd~\xdc\xedG\x95\xbdD\xce\x01E\x02Kx)Z\xa7\xc9R\x16\x90U\xedv\x05\xa40}\x11Y\x15\x05\xc4\x91{\xea\x8f\xadI\x01Q\xd3\xf8\xcd\xcb\x8ba\x9ev\x8c\x16\x9a\xa4ny\xc3`&>\xab\xb4\x08\xda\x0cOf\xe7_|\x16p\x9b\xa4\x04\x92\x90\x94\x86\xb2 \xcb\xf4\xaf\xee]\xbe\xd7\xb6\xf8\x97v[\xb4\xd6|\xd7\x8e\xff\xa9\x9d\xc1'\xe5\xfc\x0f\x165\x00\x193\xa8[\xf8\xc3\x87woW\xda\xfb\xf3|\xd8\xed\xaf\xad\x046\xafq\xf7\x99v\xfa\xd9\xe5\xbeGm{\xc0\xfa\x86z \xd89\xf9\xc7\xf7?\xbd\xe8\xc9\xd0\xed{I\xae\xcb\xf6\x81\xfb\xb6\xfeuO\x9a\x07\xb1)\xb9\xa9E\xef\x8d\xe2J\x01,a\x18\xd8.\xa1\xaf\xab\xa6\xfew,\x11\x1ax[\xc7n\xdd5p\xbd\xbf\xb9!\xbdL\x9e\x12)'\xbc-\xb0\xdd\x0f\xd36\x14\xaa\x11\x1aR\x0dHJ+\xb0\x84\x05\x02O^\xac\xe0\xc7\xee3\xb9'=\xe7\xdb\xff\xf8\xfe'{\xee\xd2\x87\x87&\xa8\x184O\x9e>\xc3\xfa\x8el \\\xdd\x8d\xe3\xee\xea\x84\xffw\xb8:\xe1\xd96\xe2\xd7\x13\xa6eke\xaf\xda<\xb0\xc4\x19L\xe0~\x07\x15k\xab\xa3<\xd2\xdf\x13qx\xbe\xadv\x03W\x19\xda\x02vA\x87H%d\xf6\x8a9\xf0\x03Tx\xdbn\xba\xa6\xe9>\x0f/\x1dc\xf7\xf7pv3\xb7\x80\x0e\xb9d5\x9b\x1a)B|\xfb-\xd9`\xb7\xab2!\xa7-\xfcxqq\x0e?\xbc\xb9\x80\xae\x95\xd3\x88O\xd0\x07\x16\xde\xc25\xf3O\xa6\x8a_<\xec\xc8\x9f\xff\xf4g\xf4eA\xf7O\xc7Z\xe8\x10_\xd7\xd8(\xec\xfan\xb3_\x13\x96~\xd4\xf7f\x96\xb9|\xfe\x1eN\xe7m\x11'\xc7\xa9h\xff\xf0\xa3\xbeu\xb5\xa66\xa1\xeb>\xedwS\xde\xe5u5\x90\x0dt6\xc8\x02\xf8DwT\xf5\xe3\xfb\x9fX\xbdX\n\xddxG\xb6\xca\\\x10\x9cR\x95l\xc6\x94vT\xb5&S\x8e|x\xa5\xd8\xb4\xef\xc9M\xd7\x93\x13\xf91\x95Y\x8d\xf5u\xdd\xd4\xe3\x03\xbb\xd2\\\x9eq1\x13\xd5\xdf\x1bP\x99\xf9\xe9Zq\xbe\xcb>`\xf3n\x05\xcf>\x0eDF\x07h\xafP\xb5\xa3v\x86\xeb]\xd5V\xb7\xae\x16_\xf7\x84E5\xa4\xd0\xd5s\\[\xdev#y\xc9\xd8\xb6\xe1F$\x0dV\xac\xee\xc2\xde\xcc\xe40J21\x0e=\xa1O\xc7\xb2\xa8\xed\xd7\xe3\x9d\xc3\xe8?\xec\xc8\x8a\xebs\xb5\xab\x87\xd5\xba\xdb\xba,\xe6\x076\xdb\x06\x11f\x1a\xef\xaa\xd6\xb4,\xf0L\xc4\x16y28\x9f\x9e\xcfQa[\x96\xa2z\xed0$\xac\x81,@=\x05\x94\xc5\xb1\x02gN_\xc3@\xb6U;\xd6k\x8br\x12\xbd^\x83?\x01\x97\xc2\xbb\x9d\x8b\xf38~\xa6\xa6\xe3\x9a\xc8`\x9a\xe20X\xbe\x81XT\xab\xeb\xee\xde\xe1lH\x92x>F\xc6;\xa1\xda\\\x9d\xb6\x0fWJ\xb4\xbbU.\xf5\xf5\xd4J\xd8hK\\\xd5t\xed\xad82\xb0\x87\x8cZMf\xf4y\xad\xaemwJ-SzE\x88\x9a\x9dK\xc5o\xeakVUa\xd7\x07\x18\xf6\xbb]\xd7\xb3\x95sW\xad?\xbd\xd8\xb7\xf4?t\xbd\xe4\xe3\x8d\"\xca\x98G\x83:\x0f\xdd\x0d\xecGn|\xe4t\x1e\xa8\xe1\x93G\x00U\x03\xb7\xa4ew\x08l\xc4\xf1\xc5\xe4T\x9f\"\xf6\x8e\x0f\x91]\xce\x9b/\x15U`\xf8\xfa%\x9cW\"GYT\xbd\x9a\x16\xc4\xba\x85W\xff\xf0\x0f\x8ee\xea\xfb\xae\x83\x9b\xae\x83oa\xb5Z\xa1\xb9\xf4\xac\x13\xaa\xf6\x01\xff\xb1j\x1fV\xb4\xe8\xef\xfbn\xfb\xec\xa6\xeb\x9e\xe3\xaf\xadV\xf8\xdaS\xdf\xc03*\xe2#\xab\xf4E\xf7\xec\xef\xa8\x8c\xe78\x04\xc0#\xe7/\xee\xbe\xf9&\xd07\x7f\xa8\xee\xab\xec\xce\x81o\x99oE\xa5g\xf4B=<\xfb\xbe\xebV\xeb\xa6\x1a\x06O'\xf0*\xd1\x0fx{\x94\x8f\xf0r\x91\xde\x99\xba\xe7\x1f\x03\xdds\xfe0\xdeu\xad\xa3\x83xM\xbe\xef\xbag\xab\xd5\n\xb7\xc4S\xe7\xdf\xd2\xd3\x11\x91\x0dhg \xb2\xc8\x18\xfb\xedY\xdd\xae\x9b\x15\x0c\xa4\xb9\xf9jNO4F`N\xf0\xc4\xb2!\xe3\xeb\x83\xe8\xac)z>\xadaXt\xf1\xc7z\x18\xf6<\x9aWy\xcfl\xe6\xb4~\xb3\x01F\x82\x19\xfe\x93\xfa\x0f\xed\xd8H\xfd\xfbH\xfa\xed\xe0\xce\x12\x93\xcf\xb8\xec\xc8\xc7Jk\x9b\x9f@x\xa6d\xaa\xdb\xfc\xd8Io\xf3\x93R!G@hyJ\x1c*\xae\xeb\xad\xe4\xb8\xf9\xb1\xd2\xe4\xe6'\xa5%\xa9\xa9s\xf3\xe3N\xa2\x9b\x9f\x94\x9a8\xfata\xbe\x1d*\xcb\xc8\xc1\x9b\x1f+\x1bo~R\x9a\x90\x90\xa1'\x9fi\xbd(\xcb_\x15\xeaY\xb3X\xd9\xab't\xe39\xfdx\xc2\xe6\xd3\x9dA0\xa0\\B9?\xe6\x92|\xbbo\x11d\xa6Q\xb6\x9dL\x15\xd5\xe0\xa5TKz\xc1\xbe&o\xe9\xd6\xae\x9em\x8a\xa7\xb9c\xc7\x8e7\x1a2\x12W\x83\xd7\x06jt~\xb4\x1a\xafm\xb8\xda\xa8\xe3\xbef\xc8Z!\xfb\xec\x06\xa7\xceO\xa8W19 0'T\xdet\xe4\xe1\x87\xae\xce\x8f\xa7\xfd\x10\xcc8\xc3\x80\xad\xf3\x130\x00\x10\xd9E \x8aY\x00\xe7s\xca\xc3\xb0\xa5\xf3\x83\xe3d\xe7\xa7`\xc3\xd2\xd1\x81NQ6j0\x8c\xa7\x9d\x1f/\xb2v~\n7=\x19c\xe8\x946\xda|\x15>\x04\xee\xfc\xa0X\\En\xdca\x98\xcb\xb2Bd\x87,\x01\xf0\xe2\x06E\x05\xf5\xca\x87q\x82\x93\xe6\xe6\x12\x83\x89\xf1'\xc3wG\xa4[\xbb\xbd\xa7\x03\xdb[\xb0\xfb5*\xce\x19\xd7\xd2\x11\xb6\x84\x89\xb7\xa4 \xec\xb0\xc8ss;\x7f|\x15\xfeE\xc9\xde\xb72\xfaO`\xecn\xf9ny\x02;\xf1\x0d\x88@\xf3\x88\xa4'\\\xe2S\xce\x83 7+\"\xeeZ\xf7@\xbe\xf0Q\xe1#\xc7\xd6\xbd\xba\x1dV\xf0AP'i\xe2dj\x82\x99=T\xd1\xbe\xe3\xd3@\x84O5\xb1'<\xd7\x81\x1d\xd1w}O\xd6#\xac\xabf\xbdod\xe4Q\x13v\xb3\xa7n\xb4^\xc0\xbe\x9d\xbb}`\xed\xef\xf6#\xd4#\xe9\xf9B\xd2\xdd\xb3\x8d\xc4\xb4\xb3\x82?\xde\x91V\xdc5R\xf5\xba\xe2\xab\xfbK\xbd\x14\x96\x1a\xa0v\xb8\xc9\xaf\xb3\xee\xc9\xa6\x9e\xe0f\x95\n\x96\xfb|\xd7\x0dz9\x13G\x99^\x88:\x0c\xf5\x9c\xe5\xc1\n\x9bG\x92W}\xae\xea\xa6\x9e\xc2\xf5\xa6\xe7\"\xd2\x16\xf4R\xb4\xfe_\xc1/**\x8e\x9a\xe0k2\x0d\x01\xd9\xb0\xb07j/\xb5\xe11\x9cfa\x11\xb9\x03-\x02\x89\xec|\xddt}\xe9\xba8gi\x9b%\x9a9\xfc\x11\xa4H\xba@Y\x11\xb9\xc4\xce4\x7f\xf3;jUD\xef\x16\xa8\x87\xc50 /\xdd\x9ck4\xdf\xc3\xd9\xf5@jf\x89\xa7\x0eRM\x81\x06\x84\xeb\x89\xf2\xcb\xb3\x1d\xe9aW\xd5\xfd\x8b\xb1\xaf\xbbi\xffo\xebK\x81\x16\xd9Be[\xe6^\x9d\xdf\x99\x1a7vr\x8e\xc8\xda\xd1\x16^\x1aX\xd7\xb0\x86\xcd_i\xce\x13\xfd3\x0b\xee\xac9\x9eu\x06\xaeN\xe3Z\xb7\x97\xc6\xce#P.\xc6\x19\x89H\x99|\xf4\xbb\xaan\xbf\xfa\\o\x88\\\xe8-\x07\x86\x9dC\xa8\x1e\xba\xee\xbfr\xd7U,\xa0\xf3\xaa\xf3;\xab\x13\xc4-\x19j\x07\x18\x04%\xb6\x01\xf1\x99\x87\xaek\xa2\x8dC\xdb\x8d\x97\xdc\x9c_\x9a\x11Z\xa4\x17c\xdf\xd4\x9a7\xe1yi\xc5h\xf7\xceIm}\xb5fm\x12\x0b\n5\xf3m7~%\xfe\xc9\xd1\xcb\xc3~\xb7k\x1e\xe4\xc1#\xfdI\x883\xd5\xc2\xd1\x1d\x8c\x11\xb2\x08/\xc1\xa5}\xad2\xba\xf7\xf4\x12\x14X\x8e\xabs\xfb\xea\xde\xb8\x06\xb8\x0e \xe4\xf4\x87\xdca\xa4\x84(\xde\x01\x9f s\xdb\x12\xa0G\x80\xfc6,\xe3N\xf0 2\xdb\x80\x9f!\xa4T|\x19\xb3\x82%\xc6j\x7f6\xc3\x82!\xaf\xb6 \x9a\xf9\xa4\x0b\xa6\xc0\xd6J\x8a@;\xde\xe2b\x80\xa5\x93\x08\xbd\x92\xd33v\xae\xab8\x9d\x9f\xf8\xc7h1W\x83!'\x87\xb0\xc1\x10\x85_\xbb\x19\xc7\xe1\x00\xde\x06\x97\xe1rP\x04j\xc9\xa9\x99\xd4\x0e\x8a$\x8d\xe4\xc1\xd5 \xc7\x92B\x8b\xf0\xb1\x12+\xed{\x7f\xfeJ\xc8\xe2]\x1e\xb9~u\xfd,#\xfd\xf6\x0ed%\xb3\x16\xf1\xb2\xe0\xb8P\xb0&9h\x1d\xb1\xf2\x05\x03^\xe1\x95\xa3\xe0\xfa\xe7Y\x01\xa3\xd6\xc0\"\xad)\xb6\x12z\xd6B\xf7j\x98\xd6\x84\xe5+b\xb8/\xf2VEK\x1c\xe7!\xb2\xfe\x9c\xb92\xda\xf2n\xb0\xb5\xd19\x14\xe8\xfa\x981\xe1\x1c\x17W{\xc7\xd4}iuF\x90\xb6\xd4zYt\xc5t_U\x1d\xbfj\xfa\x9b\x9e\xb5rj\x92\x14F$Lc\n\xac\x9e\xd6\xfa f\xe3\xb05h\x1e\xd4\xa61f\xfc\xf0t\xbe\xa6\xc3\xb6\xa4\x05\xae\x80\x16\x81\xe8\xe3\xbd\xcf\xc7\xcb>\xb2/\xfb\xc0\xc7/\xe8\xbf9\xddFU\xc0\x0bL\x82r\xb1j\xb4\x03\xf9Q\xc6\"s<\xc990\xfc\xb8\x8e\xe4Ah\x16\n\xf9z\x0e?/\xe8\xe3e\xd4\xbc\x90_\xe7p$\xac 3\x7f\xb0\xe1\xe5\x8f5\xc8\xea\x07\x8b\xf8\x80x\nH\xd7:\x12\xa4\xf8\x13\xf0.\xc3\xc4@\xe1\x8e\xe6\x8fQ\x1b\xd9\xd9\xe2_\xf3e\x1bs\xb8\x7f\xec\xbaO\x0ea\xbb\xa6Z[XO\xe0\xf94\xbb\x86\xb0r\\'\xfa m\xf6\x9d\xea\x1b\xed6\n\x96\xcd\xdb\xb7\xf5\x979!jn\xdb\xfc:\xd6\n\x91\xf8s\xe9\xf0F\xf9\x13lE\xdc\xb8\x18eiK\xbdp\xe7\xc5+\x0d\x87*o\xf6\x0d?\xd7\xc5\xe5\x89\xed\x05Tc\xa0\x91\x05\x1b\xe7\xa9\xfb\xd8\xc5\xd6(\xdc]\x88\xf5\x7f\xd3\x8e\xbd\x96\xb5:\x0f1\x9f\xb3\x1cSn\xcb\xeaIC\xee\xabv\xa4+P\xb5\xa9\xc6\xca\xbb\x1d\x93'G\x15\xbf\xb8\n?\x13\x13/\xc5\xba\xc6Hk\xf8Q/w%\x99\xd38\xd4\xedm\xa3\xec\xc3\x9e*\xb7Fh\xc2\xe8\xdf\x8c\xdd\x1c?\\\x16\x12\xd4\xf3g\xdaMtJ|\xd5\xf5\x1bB\x1d\xfbF9 ;z\xa5G\xaf\xf4o\xc3+5\xe7O\x86{\xea\x15\xb5\xc4O\x9dr\x92\x92\x9d\xd3i\xa2\x9a.i\xd4\xb4\xf1\xf3y95\xc5oz\x172y\xcd\xcc]\x86\xbc\x10\x8f\x97\x9f\xc5\xcb\xe9\x90\xb9\x9d\xb1\xd1\xc9\xdf\xe5]\xe6\xc2\x0bRa\xe6.?oWY\xd6\xae\xa2\x9c]^\xc6\xae1\x8f\xaf\xab$[W\x98\xabk1SWI\x9e\xae1\xcc\xd2U\x92\xa3+\xc8\xd0U\x98\x9f\xcb\xcb\xce\xb5\x84\x9b\xcb\xcf\xc3U\x80\x85+\x8a\x83+\x8do+\x93m\xab,\xd7\x96\xeb\xbc\xa4(\xcfVy\x96\xad\xa2\x1c[q\x0c[E\xf9\xb5|\xecZ\x85\xb9\xb5\\\xccZc,\xaf\xd6RV-\xce\xa0\x85\x08\xc49\xb52\x18\xb5\x1c|Z\xde%\xde\xcb\xa5\x15^\xff\xcb\xf1h\xf9X\xb4\xfc\xf5(\xca\xa0\xe5\xe3\xcf*\xc4\x9e\x95\xc7\x9d\x85\xcc$l)/\xcb\x9b5\xa2\xacY\xb9\x9cYAR(\x0f_V\x14[\x16N\x9e\x93\xc6\x94\x85\xcb\xb0\x883\xb29\xb2b;#\x86\x1f\xcb\xdf\xee(n\xacDf,\x9bH\xa4\x00+V\x90\x13\xcb\xcf\x88\x15\xe2\xc3r\xf6R\n\x17V\x0c\x13\x16\xc6\x83\x95\xc9\x82\x15\xc9\x81\xb5\x8c\x01\xcb\xc19\x15\xc3~U\x90\xfb\xcaQ\x0bK\xd3\xb2X\xaf0\x96\xab\x82\x1cW8\xc3U\x16\xbf\x15\xc6gU\x9a\xcd\xca\xcbe\x85\x91\xfc`\xcdu\xf8\xea\xae\x98\xf2\x8f<\xae\xa91\xfd`\xc2\xc92\xe5\x0dZh\xd5/\xc40\xe5\xe6\x97\x8a\xaf\n\x1a\"Y\xce,\xa5cL\xe5\xe3\xe2\x95r\xb2J\xc5\xd7\x7f)\xa3T\x98O*\xbe\x0eh\x1f\x96c\x92r\xf0H9Y\xa4\xe2+\x9e\xcc \xe5\xe7\x8fr\x16\xecN\x87\xf2\xf7ca\xde(s\xd1t\xb2F\xf98\xa3\x82\x8d\xc4\xf3\x9fb\x1b\x9a\xc9\x15571\xc8\x14\xe5\xe2\x8923\xb4\x16\xb2D-\xb0\xaca~\xa8\xf0\xb4+\xcb\x0d\x95\xc8\x0c\xe5l3\x04\xf3\x0e\xdd\xfcA\xde\xe9\x0cQ\x9d\x02\xc5\xd9\xa0|\xbcH~&\xa8B\xcd)\xc6\x01\xa5#\xe8\xd3\x18\xa0\xa2\xf8\x9f\n68\x99\xf9\xc9q\x86\x05z\xbbcy\x9f\xbc\xacO\xdef\x86sC\xb5NXB\xec\x84\x918\x05)\x9c\x16\xba\xc19\xe4M\xec\xaf\x86\xbcY\x8c}b\x11 nrW\xb44iSQ\xca&\x9c\xb0\xa9 ]\x93M\xd6T\x8e\xaaI\xdd\x8e\xa9%\x94\xa4iBI\x9a\xae\xcbR4!\x04M\xa5\xe9\x99\xd2\xc8\x99\x1c\x08\x16+1/\";\xd0\xfe8+%0\x1d\xb02\x13\x03\xcd&\x87\x7fV\x16\xa7\xe2\xcf\x1e\xf4\xda\xe5\xd0\xc2\xb30\x87\xd0)\xe7x\x1bhdNa(\xab\xb0t^a\xe1\xcc\xc2\xe3m\xa0\xdaS2\xcb0*\xcf\xb0l\xa6aD\xaea\xf1l\xc3\xe3m\xa0\xfcI\xcaN\xcc\xceO,\x9d\xa1x\xbc\x0dT}\xe2r\x15\x0bg+\x1eo\x03=\xde\x06z\xbc\x0d\xf4x\x1bh8\xb31\"\x9d\xefx\x1bhL\xe7\xc4d;\x86{!*\xe319\xe7\xf1x\x1b\xa8xbr \x8f\xb7\x81\xe6gD\x1eo\x03M\xce\x96\xb4\xab|\xbc\x0d\xb4T&\xe5!r)S\xb2)#\xf3)\x932*\xe3s*\x8f\xb7\x81.\xc9\xb0,\x9bcy\xbc\x0d\xd4\x97m\x19\x97oy\xbc\x0dta\xfe\xa5wcz\xbc\x0d\xd4\x94^<'\xd3N\xa0\\Z\x1f/\xa9X~n&8\xb23\xc1\x9d\x9fi\xa5\x96\x15\xca\xd0\\|\xe4s\xbc\x0d42g\x13\x15w\xbc\x0d\xb4h\x0e\xe7\xf16\xd0\xf9)\x9c\xd5\x99\x90\xd7y\xbc\x0dTy\n\xe5y.\xb6\xcf\xe1l\xcfp\xafbr\xf22>\x93s>\x03Y\x9f\xa1\xbc\xcf\xe3m\xa0\xb9\x0d+\x96 \x9a\x97\x0b\x1a\x99\x0dZ\xbc\xe9\xc99\xa1Ni\xe3\xf16P\xf6\x1co\x03\xf5W\xb8tbi\xe1\xd4\xd2\xe3m\xa0 i\xa6\xff\xf5n\x03\x05S\xbb\xe7DM\xcd~\xce\x7f>^\x08 \x9f#\xf5\xaaY\x87\xbf!\xeaUORs\x1c\xe1*\" !\xa7Z\xbf\xb669\x9d\xfa\xae\x1eF\xc7\x0c\xa3?isK\xb9=\x94\xcd\\\x9e*\xc9\xaf\xec\x15;\xcaE\x93\x8c_\x0d\x8ciS\x12\xccMd\x8f\xd9\xae\x92\xd0\xb2\xebj\xa8\xd7\xfcRaV\x7f\xfb=\xdf\x86\xc3\xbf\xdd`Rq\xcf4\xe8\x97z\xe6\x07\x7f\xaa\xdd\xee0\xa2C\xee\x13\xc0+\x996\x0e\xebj\xc7\xaf\xc0\xe1.\x9f\xfcs\xbfo\xc4\x0d\xb9\xbb\xbe[\x93a\xe0\x1b;\xd6\x1f\x88\x1220\x92\xa80\xd7-\x13\xfc\xc9\xc0J\xa2\xf2\xdc[\xd1\x00\x86\x12\x9c8Jpb)\xa10\x9e\x12\xb20\x95\xa88\x0cg K\xb1\x96\xa8$?\xfe\x12\x121\x98\x10\x8f\xc3\x84T,&$\xe11\xc1\xb3\x82y0w\x90\x80\xbb\x8b\xc1fB*>\x13R0\x9a\xe0nd\x06V3qre`8q\xddv\xe18a1\x96\x13\x17\xe5\xc2w\xc2\x010\x9ePH\xe7\"\xb1\x9e\x10\x8d\xf7\x04\x0b\xf3 N\xdc'L{c\x1c\xfb \x91{\xcb\xc5\x18PT\x9aLYt\xe3@\xc1\x89\x05\x05\xb3\xc6\xe5\xf0\xa0\x10\x0e$\xe0\xb8PH\xc2\x86bo;\xf0\xa1\xaeW1\x8c\xa8\xfd\xaeSh\x12V\x14\xc0\x85\x17\x85p\x7fi#U\n7\nsF\xb0\x13;\n\x89us\xe8}2\x8e\x14\x95\xa2\xa6\xad\xbb\xb0\xa4`\xd4(Ta\xe5\x1f\xb9\x98R\xc8?\xa2\xf4\xe0K!<\x12`6\xae\x18\xce\x14\x02XSXP9O`p \xee\xd4)L\xde!\xe2\xc1\x9e\x82\x1f\x7f\n\x0bZ\xb7\x1c\x87\n\x91XTXP+O\x9f\x97\xc4\xa5\x82\x0f\x9b\n\xacRN|*,h\xd6\x02\x9c*D`U!\\\x95P\xceZL\xefg`WQy:\x96#\x8c_\x85 \x86\x15\xe2;\"\x1bqU\x0e\xd3\n\xa9\xb8V\xf0b[\xc1lA\x0e\xbe\x15\xf2\xd7\x8a\x18\xac+D\xf6:d`^\x9d\x02\xafI:\xee\x15\xc2\xfd\x02\x11}\x03\x01\x0c,\x84\x15Z>\xb1\xdd\x07\x8b\xf0\xb0^q\x11\xf8P\x88\xc0\xc5\xc2a\x1a[\x10#\x0b\xd98Y\x88\xc7\xca\xc2\xe1\xba#\x0d7\xeb\x15g\xa6\xd9\xa5`g!\x8c\x9f\x85\xb8N\x88\xb1\xea\x90\xd0Q\xc5\xf0\xb4\xe0\xc2\xd4B\x1c\xae\x16\xc2\xed\x8fiSQ\x8c-\xc4\xe1l!\x06k\x0b\x11\x0d\xc8\xc5\xdcZ\x02\xd1,\xae\xc58\\K\x92\xc4\xe5:\xb1\xb8P\x1a\x8f\x0b\x0eL.\x14\xc6\xe5\xc2\xbcEF\xb0\xb9`\xf9tI\xf8\\K\x16\xc3\xeb\xba0\xbaP\x00\xa7\x8b)\x06\x8e\xd5\x85\\\xbc\xae%\x0d\xc3\xefB\x0c\x86\x17\x9f-\x1e\x98\xa1\x13\xe0(\xa0\x8d\xfaWB\xde\xfb\xf3W\xb2nq\x10\xc7s\xeaB\xa6\xdf\x14\xc3\xfag\x16`\xa3F\x12\xd8\xef\x02\x99\xaf\xe9B\xdd^\x1a\xbb\xae\xc8:\xb8\xb0\xe3\x88\xc4i?rW\xd5\xedW\x9f\xeb\x0d\x99n\x8d3\x9d\xad\xf1\xce\x02\x03T\x86_\xce]r\xb1p\xcf\xab\x1b\xfbJ\xeb\x18\xc4x\x85\x0c&\x7f;\x01\xfe}\xdeuM\xbae\xec\xba\xc6e\x17\xbb\xae\xd1 \x15\xe8\x1f\xea\xf6\xa6[d\x03\xdbn\xbc\xe4\xab\xd4e\xc2\xc5\xdd)_ =\xaetI\xb0\xbfi\xeb\xe2{\xfb\xbd2\xfd\xd3\x17$\xd5x\\\xcaZ)\xed\xe3\"\xca^c\xa6\x96in\x00\xc88,\x14\xcb*GN\xe3k\xb2\xbe\xfb\xc7o\xbe\x92x*\x1d\x95\xe5\x17e{\xd4\xd3\xdc\xbe\x1c\xfa\xf5\x81[\x84\x96e\x1f7j\x8b\x0c\x87O\xa1\xe2$\xbeL\xf6\x80\xafq\x9ba|\xb4\xc6)e\xf9\x1b\xe7\x18\xaba\x94\x14.\xe1\x16\xa2\xab+\x7f\xb0\xe94?(6Q\xfd0\x0b\x0c\xcec}]\xeb\x89\xaa\xf3'\"\x00\x11\x8e\xb0\xf3'f\x90\xf8c\xd4\x0et\x96\x0f\xfe7\xc9\x0b\xe9\x0b\xd1h\x8a:v\xdd'\xd85\xd5\x1a\xcd:\x07\x1e]\xdd5\x84\x15\xec\x8b\xc9$vJ(.\x93\xd41z\x0d\xb5~\xd9\xb7\xf5\x979\xd8\x1eTcS\xa0\xabSDT\xf9\xf2\xbaj\xaav\x9d\xdb)\xf1M5\xcaE#\xdd\xf2\xb7\xcfw\xc4\xd7H\xdd^\x8dU?b\x11)\xfe\xf0\xbd)5\x11\x8f\xd6\xd2\xb9Hi\x8d\xe6\x0d\xbcbl\xbe\x9alTP\x16\x9f@|\x1b\xad6\xdeu\xd0\x17SS\xd5\xb5x\xd3\x8e\xbdr\xf0\xabw0\xb7K\xee\xacA`X\xa1\xfb\xaa\x1d\xa9SSm\xaa\xb1\xc2\xea\xa5\xd5Jn\x0f\xaa\x9e\x87 \xb5\x02\xc5\x8f\xa6\x90P\xb3\xd4\x06\xe99\x89M=\x8c\x1cd\xbe\xab\xfa\xb1^\xef\x9bJq\xa4\x110\xf5\\\x9d\xf6\x969\x87Hp\x83\x11'h\x12\x05\xf0X;\xfe2\x8a\x9c\x06\xdf\x12\xe78\xa1q,7\xee\xa5\xc6\xb1\xccx\x97\x98\xc0\x8d\xf6\xaa\x17I\xeb\xe3\xc8F8\xaeb\xc7U\xec\xb8\x8a\x1dW1\xa7\xac\xff\x0c\xab\x98W\xdf\xbc#\x10n\x8f\xd5\x165\xa8@~\xdd\xd7\xf7UC\xda\x91/+\xd6\xcb\x88@\xf2eMv#O\x91\xaeQz\x87\x19q9i\xad\x91\xcf,\x86\x8e\xdb5\x16\x9fF\xceQ\x00\x86}=\xb2\xe0\x1bK\xe2U\xc4\xab\xa7\xb2r\x1bn\xaao\x85DZ$\x04\xc6\x9f\x0fN\x89^\xaf\xed\x15:z\x85T\xc2;\x8ftH8\x97Xh9\x08\xac\xd4\xfcI\x99\x97\xbf\x91#\xc2\xc3\xb6f\x99'\xe0\x17e\xb7\xa6\x0c\xc8M\xc3\xb0\xa9\x1e\x123\x04\xfcGa.\xad(J\xa8/\x14\x932!\x89\xe7\x9c\x12\x91\x8b\xc9\x8d\xf2\x1diX\xfc\xa2j\xa1Z3\xe7\xdbn\xf0\x19u\x04\xec\xddo\xf7\xb9\xe5\xb1\x8f\xaeUl\x94 \xd8b\x14s\xdd\xba\xae\xa6tB\xe6s)yy\xb6\xbc\x1b*\xc9.\xc71\x14\x8e\x05k\xf1\x84\xb3\x92w\xf8\xe3\x1dS\x1eAJ\xfc,4z\xafx\xba\x8f\x8c\xfa\xb0\x81\x9a32\xe7, \xd6\xd1t\xdc\xb6|\xd8\xec\x9e{\xfb\xee\xe2\xcdKF\xd2 B]\x9c\xed\xa0fK\xe4Y+=\xba\x89\x04L$\xf9\xe00vn\xc0\xedB&\x04\x1d\xd5\xd7_\xf7u\xcf\x95\xe2\xb6\xbb\xed\x18\xe2:62\x82/8z\\\xe4\xb5+&\xa2I\x9a\x83@\xbf\xc34&9\x16\"\xe3\x1f\xaa\xacc\xf8\xe3\x18\xfeP\xff\xfe[\x0b\x7f\x88\x8a\xea>\x9d\xcf\xbbrzw\xaa\x80\x17\x98\x04\xc5\xbd\x8b\xf5\xee\x92]\xbai\x0dX\x14\xf7\xf0S_\xc7E\x19\xac!_Ht=\x93Z\x1b\xf2B\x14\xd7~rk\xe7\xb2\xe7^\xf4F'\x95\xb5w\xcd\x0b-_\xcb\x89\xab\x1d\xce\x98\x9f\xb2z Y\xb5\x9b\x94z\x11\x1d5\x13\x8f\x08\xf3\x12Q\x8fy\x14\xd4\x0b\xc9\xa7QR\x840\xed\xf4b\xc2\xe9ET\xd3t\x03\x8c\xf5X\x98dz \xbd\xb4\x8b\xf45H,\xbd\x94R\x9aZqD\x9c\x97Lz \x8d\xb4\x9f.\xba\x00Qt\x14Et\x1a\x15t& \xf4R\xfag@O\xef]{\xc3\xa2\x94\xcf\xe5\xc9\x9e\x8b\xd2<\xc7\x11\xe6\x10\x08\x99\xc2\x18\x99X\x94La\x9c\x8c\x1f)S\x1c+\xe3F\xcbp\xc3\x15\x85\x97Y\x8e\x98A\x851\x14\x8d\x033\x93\x85\x9aq\xe2f\x82.\x85\x17;\x13\xe7q\x94\xc3\xcf\xf8\x114\xe1\xda\x14E\xd1\xf8q4\xc5\x904\xb9X\x1aK\x1c\xf3hP\xe7\xa1,\x9eFL#\xa4A\xb9\x98\x9a\x08 \x89\x17W\x13\x89\xacq\xa6\xe7'\xa2k\xdcr\x90\x9c\xe5l\x8cMJ\xe7\xc4\xe0l\xc2\xbd\x10\x85\xb5IF\xdb\xe0\x19\xdd\x05\x107\x11\x98\x9b\x10\xea&\x8c\xbb\xf1\xf6Z\n\xf6&\x0e}\x83\xe3o\xb2\x118\xd1\x18\x9c\xa5(\x1cw7E!q\x8abqN\xb3\x13^7\xb3\xec\x8aiG0\x0b\x12\xae\x826Ss\xed\x05\\\xab\xe7\x13\xb6\xa5\xd0J\xce2\n\x9a!\x88\x9d\x0e\xc98;\xb5\x1a\x97d\x9eQ\xe8\xe7\xb8\x08\x08\xb9\x12\xc1\xadC*\xa5Z\xe6\xd43\xa4Y\x0e\x84\xd7}\x086&\x82:\xad\xd8\xc4\x84\x90O\xe0\xac\xad\xbf\x83\xb3f\xad!\x0b\xf1\x05\\\x9e\xc0\xc2\xda\xe6\xceiC\x9c\xd3\x03p\xd7\"k\xa2+r\xcc\xb5?lp\xc3\x8b\xbcf\x17\xc0\xba\xef\xb1B*\xaf\\\xfc(\x04\xd6S\xe4i\x0e\xf2d_\xf68\x99 \xe5\x9e\xc7\x08C\x97e\xe3\x16Y\xb7\xc9 \xca\xb9\xdd\xce\x12\xb2p\xd7\x0d\xe1\x9dw|\xa5\xac\xb9\xb4|\x17n\x08r\xedl!\xbc\x1b\x87\x12\xd5\xcf\xdd\x99C\xa0\x0d(\xa1\x0e\xb6K\x07\x17\x99\x8ec\xb7\x0e\xa1\x83\xdf0\x8d\x8eg?\x05\x11\x14:\xa1=\x17d-\xc1\xa88\xdb#V\x8a\ns\xe8D68\xf7\x8cl\xd9\xba\x1d\x10e78\x82n'\xd0\xe0\x98\xc6\xa4\xae\xf1\xa8\x10\x9f\xb7>?\xee\x9d?\x94i\xcbR\x0f\xc0\xad\xda\xfc\x00\xc4\x15 \x80\x88z\x95\xf2 \xf8\x83\xd3\xf2,\x8c\x0cX\x9f:\x9d\x99\xb4\x08\x81\"D\x8d\x15\xd8l\x96T\x9f\xc2\x83!\x04\x1f\xdd\x9b\xa2\xee\x8d'9\x8b?K\xfd\x1f\x08\x8b6\\`\xf5\xe1\xa2\xf1\x1b\xafb|+\xb6\xc4\xcf\xabR=\xccX\x92O\xe4\xe1\xab\xd9\xe3\xa0\xbb\xfc\xa1[\xd7\xd5\xbc\xb7\xc1\x10\xb8L\xeb\x9c\xce\x92Q\x05\xee_0S?@5\xa7u\xc2\x86\xdc\x93\x86\x8e\"\x0b\x8eU\xe3X\xad\xef\xd43qeB\xe8\xfahd\x8dH \xe5w\xe4\xb6n\xbfk\xba\xf5\xa7\x93\xe9oo\xda\x8d\xf1\x97Wwd\xfd\xe9\xe2\x0b]oQ)\xafIS\xdf\x93\xfe\xe2\x8b\x91\x95\xf3S5\x12\xba\x15\xec\xabv\xa8D\x12\xd8\xb6z\xa0\x1b+I&\xbd\x1f\x18:\xe5\x8e\x0cDLL\x87k\xf6\xfb\xa2\xae\x99\"KZR\xe5O>\xeb\xa1Z\xc6G0\"6\x98\xc0;kBz]\x10R\xe0\x03\x15\x94\x84\x15\x14\x04\x16x\xa0\x05Y\xe0\x82r\xf0\x82\x10\xc0`!\xc4\xa04\xc8\xc0\x033(\x0d4pB\x0d\xb2\xc1\x06\x96\xbc\x8a\xb5\x15)\xa7(\xe0 \x1brP\x1ct\x90\x05;(\x0f<(\x08=(\x0d>(\x08?\x88\x01 \x14\x84 \xb8A\x08y0\x04K\x18\x06K\xe0KV\x10\x98\x90\x0bM\xb0\xc4\xd9P\x85\xc5`\x05\x87\x1b\xebY\x8a=\xaekh\x95^\x08[\xb0\x0d\x97\x841\xf0\xfeW~\xf7\xd5\xa00x\x01\x83/\x14\x010\x14\x860\xd8 \x86l\x18\x83&k\xb4 \x0dy\xa0\x86@\xa6\xbf\x13\xd8\x10\x01m\xc0/\xaa\x8f\x877\xe0\xdf\xff\x05o\xfb\"\x90Cl\xe3C@\x07\x7fK\x83`\x87$\xb8\x83\x9d\xdc\x9b y\x08\x80\x1e|\xb0\x07?\xf0\xc1\xd9+\xb1\xe0\x870\xfc\xc1\x06@dA \xa2@\x10K`\x10xW\x04\xa1\x10\xc5\xc0\x10\x8e\xf2\x0dM*\n\x89(\x0e\x8a(\x0c\x8b(\x0b\x8c\xf0@#lp\x84\x0d\x8f(\x05\x90(\x08\x91(\x0d\x92\x88\x85ID\x00%\xa2\xa1\x12q` \x04.\x81\xdf\xcd\x1f\x9bT\xef\x87LD\x83&\xa2`\x13V\xe5KB'\x8a\x83'J\xc2'J\x02(\xf2\xc6;\x08\xa2\x08\xc3(f \x85\xef,Y\x8b\x1a\xdag$2\xda8\xbf\xc2\x06\x9d\xce;~&t\xda>\xe8\xc7:\xb1\xf9N\xfc\xf4L\xe1\xe1\xe1\xa6EFn\xbfg\x9b\x14\xa6OF\xb0\xd7{&\xa7\x1c\xe6G\x1f\xcc\x8d\xda\x91\x08\xb2q\xc2\x8eA\xc6\x03\x84U\x91\x83\x0e\xe76.e\xd3\xe7\xcb~(v\xbc\xcd\x9f\xd0!\xb7\xab2\x05\x930\xb2\xd3/\x9c\xcau\xf1%\xf9N\x80\x8ctuqY ]\xc5\xaf\x9bn\xfdI\xc8\x92J\xfb\xe5\xae\x1a\xeeR\xce)\xa9 \xe5\xc0\x83\x9a\xe9\xbb\xd5\xd4g\x1b2\xec\xaa k\x94\xa8\x13]?\xd8\xebS\xd6\xf8\xabnC\x14Y\xa6\x98\x98\xe4/\xdb>\xf0\xd3Y*O\xd63\xe2\x0c]\x13\xf2TX\x196\xb6'r\xa3\xf0T\xbc\xdcW\x9f/\x13\x0f{\xb5\xd9C{\xb4\xdb\x8f\xbb\xfd\x14\xe5WN\xc4\x9e\x0e\xd0t\xb7\xb7\xa4\x87gT\xbb\xb8\xd0\xe7+\xf8\x99\x1d3)R\xda\xae\xfdjCF\xd2o\xeb\xb6\x1e\xc6z\xad\x9cC\x1f\xd8\xe0 \xc9z\xaa\x1cs\xd4\xf8\xe3\xa6\x90\xd4\xfaR\x15\x84\xd8/\xf3\xac[}\xfdq\x8e\x95G\xe4$\\\xf9\xc5}\xf8\xeb>\x15W?\xc7\x1a\xc1\x1fGS\xf8\xe3m\x10\x7f\xfc\xcd\xe2\x8f\xf3\xcc\x9c?\x81\x16\xf2\xc7s<\xce\x9f\x08)\xa1\x80\xa2|\x96.C\xfe\xca\xbb\xd2\x06\xf9\x13Z\x07\xf4'\xdc\x92\xc5k\x98W\xc7\xb0\xfag/q\xea\x13j\xd8\xf2#m\xbb\x0f\x95\xecC\xebG\xeb@\x1b\x02\x95\xcbMH\xd4\x84I'_\xa4%\x86J\x8f5\xfdt\x8al\x92\xac~=\xa5\xfaA\xd4\x8at\x8a\xe6X\xc8\x12\xdd\xe5$g z\xd6\xeaS-\x01\xaf\xe7\xd7&\xcb\xa3\x99\xd9\xe5X\x98 \x18]\xb0L\xf8c\xb9\xf5v\xb1\xa3\x95\x93\x1e\x85.\x1b\x8f\xcc\x89\xf9 \x0eG\xe6\xc4\x8c\xa4\x86#sbZ\"Cf\x1aC\xe1$\x86\x8c\x14\x86\xd2 \x0c\xc5\xd2\x17\xca&/\x14K]\x08'.\x14K[82'\x1e\x99\x13s\x92\x0f\x8e\xcc\x89yI\x061d\x82G\xe6D\xe592'\xc2\x919\xd1\nk\x84\xd2\x05\n%\x0b\x1c\x99\x13\xc5S2A\xe0\xc8\x9cxdN\xd4\xa5\xc4%\x01D\xa4\x00\x1c\x99\x13\x97\x1f\xfc/\x1f\xdd\xe0\xa1\x7f\xe8\xc8_\x9a\xef\xb1\xde\x92a\xac\xb6\xbb\x94@\xa2\x1e\xdf\xac\xe7\x10\xcc\xae'\xf7u\xb7\x1f\xf81\xe4\n\xbe\xa7;Hv\x169\xc0\xef\xe1\xeb\x13\xa8\xc7\xa7\xbc\xdb?\xb3\xbf2\x15\xd9\xd4\x1a\xd8lf\xcd\x00\x11\xf4\x99\xea\xa8\xdf\x91\x02\xf7\xdd8y\xa3\xa2\xc4\x9f\xaaa|\xd5m\xb7\xf5\xa8\x16\xae\x198\xf8\xfaD3\xb3\xb4F\xd4\x1b\x1d\xea\x81\x95$\x97\x9f#\xc4\xf2\x08\xb1\x0c\x1dx\x1c!\x96\x7f\x0b\x10\xcb\xe9\xb8G\xe4\x81p\x01\x13\x9a\x92\xfb\x8dk2\x0c|\xe9@\xce\x03@\xc4\x83N\x0c\xd34\xd5\x06\xeav\xdd\xec7\xd4\xe3\xeb\x06\xe2\x12-\xca\x17\x8b\xc5`t\x14\xfbT-@Ja\xa8p\x16\x9ehG\xc2\xe8\x8czR\x0d\xf0Swk\xa4a\xf1\xba\x9cX\xc1!e\xe4\xe5=Y'\x93t\xe6\xac\xea\x15U+\x19AQ\xf5\xcd\xea\xeb\xafO\xe8\xff\xfc\xd3\xea\x9f\xd9\x7f\xff\x99}\x81\x8f\xcb\x9c\x19\x13:\x86\x937|\xc1\xf8\x85\xb3\x07P\x97\xc1\xbc\xc4\xefb\x8eB\x8f\xd5\xed\xa0\x1ciro[:\xeb\x0ci?\xf0e~C\xd8\xe5YJ\x02\xcf\xba\x7f\xd8\x8d\xdd\x8a1\x13\x0c\xf5|e\xd8\xabn\xbb\xab\xd6\xe3w\xf5xJ\x8d+7!\x96\xf1\xb4\x0d&\xf92\xf6\xd5\xe5u=\x0e\x97\xec\xea?\xeb\xfc*&\xcb\x854\x9a\xedF\x8d\xa0e\xf8\xf0\x14\x14\xa3\x1d\x9c \xc2\x8c\xd7\xf1\x9b Y\xae\x0ea!Kj\\\xae\xeb\x91/,s\x87\xd7\x8c\xc3\x8a\x85\xfd\xc6\x0eH;\xec{2\x1d\x919\xc7\x93\x0d\x1c\xed?\xe5Pm\xdd\xb5C\xcdo\xac\xac\xe8V\xb1\x1e\xc6\xfe\x81\xa9^\xd3\x00\xdf\x19\xd0\xc2XI3\x93\x1c\xd3\xacWl\x08\x81\xac\xbb\xe1a\x18\xc9v\x05\xa7\xbb\x1d\x9f\xf1T\x05\xf8 \x17WJ\x19\xc3\x9c\x84Je\x9bD\x8b\x8fy\"\x02\xab\\S\x7f\"\xea\xb7bc\xa0|\xa3\xa40R\x1d\xdd\xf7\x95`\xbd\xecv\xa4\xa5\xbd\xb4\xa5\xe5\x9d\xbf\x87\xea\x96\x9a\xe4Q\x1c\x1e\xd4\x0d\x93[mh\x93[\xf2\x19\xd6\xd5DH\xc2v\x19\xf50w;\xeb.\x11\xd6\x15\xa6\xb8\xee\xe7:\xc0\xd0\x89\xc8o}sC\x18\x11\x1c\x17T\xd1\xd6\xb0\xc3\x9a\x8a\xf7\xf10R\xfd\x17\xa7\"\xdco\x16\xa31\xaf\xbe\x0e}vh\xcd\x14\x17\x17\xb72\xce\xa35\xa9\x06\x9d\x91bO&\xca\xe8\xc9\xbf\xb1QYaer\x95\x7fi\xfdE-\xc9\xd0=\xb6{c\xb1\x06\xdae\xaf\xbb\xb5\xb0\x02B\xfc=\xe9\xb9\xdd\xe7wD\xcaD\x16\xbe\x84\xf2\x84`\xab\x16bJ\xbe\xb4\xff\xc4\xdd9\xce>\xa8\xd7\x83\xeb\x0dm)+\xf1A\xa5\xc92X\xacG\xf2e\xdcW\x8d\x15\x04\xa1[\xcc\x9d\xdc\xd0\x88#1\xfd\x1d!\x8f\xd5\xdd\xec\"\xc6\xcaS\x0f\xca)\x14\x9d\x03Bw\xbd\xddM-\x8c\xdd\xe5\xf4\xaf1\xdd\xae\x98\x89\xd7\xdd\xfau\xdd\x93\xf5x\xba\xff\xb2\x82\xd3\x01\xba\xdd\xae\x13\xab\x82)\xfe\x84\xab\xdf\xac\xc7\x9b\x8e0\xcb=\xa9\xc9\xaf\xfbZt2\xf5Ze\xe9\x8c\xcb\x91\x1fU\x89\x9f\x9e\xc2\x15\xff\xbfK\xea\xc4^\xb1~`\xa4=\xdc\x0d\x96}&N\x1b\xda[\xb8\xa8w|\x93\xa8\xb8\x97\xd3\x14\xf0\xa4\xa0\x87,\xf0K\xdf\x8f\\s\xae\xab\xf5\xa7\xcfU\xbf\x19\x8c\xb3N\xbcOO\xb7u\xdbq\x0fE\x99G\xd0\x93mw\xcf3\xe8y8\x91j#:\xbeb\x01xi\xffI\x19Yv84\x0d\x03\xed\xa77g\xe7\xc0\xde\x91}\xae\x9a[\xd9O\xaf\xffe\x05\xef\xc9\xcdK`g\x84/_\xbc \xf5nX1zQ\xb2\xdf\xae\xba\xfe\xf6\xc5\x9b\xb3\xf3\x0f\xf4\xcf_\xd1EH|\xf7J\xaa\xe7 R\xa9z\x10+\x00_\x0eh\x8f\xe9v\xf0\xbe\xea\xeb\xaa\x1det\xe3z?\x9d\x8dN\xae\xcb\xcc\xa3\xf9\xe1\xf5\xbf(\x91\xde\x15\\PO\x82\xcd\xc07g\xe7\xb4N'\xf0\xd0\xed\xd99\xf3l|w\xd5\xa0\x84\xa0\xae.\xbe\xbc\xea\xda\x9b\xfa\xf6\x8aOp\x16\x9fB\xfc$\xf1\xfd\x95\xac\xed\x8f\x1c\xfap%\xbb\x93\x96\xc6SJh\xa5\xe8VfC\xd6\xf5\x86-\x03<\x1c,&\xaa\x10$>1\x87\xd8\xa7\xa3\xff\xbc\xfaF\xf3j&.\xbc\xfdx\x97D\x01\xa7L\xa6\xd4`\xc7\xff\xbf\xa7\n\xf1\xf4\xff\xf7B\xc9\xb6xaW\xe9\x03+\x81V\xea\xe9\xf4\xb1{\xcf\xa6\xd6Gc3V\x0d\xd2|{\x810\x1c\x1bi\x1eX\xb7+\xe2\x04!\xab\xf2\x17:\xb78=Yw\xc3|l\xe6\xe3\xb0\x84\x8dm5\x8aK\xa7M\xb1r\x01\xf9\xae\xdb<<\x1d\xf4\x98\xbf\xd8'\xb1\xf1faU)U\"Vv}\xbdeg\xbfL\xd6\xb4%\xe9Zb%\xd7\xec\xaa\x87\xc1\x0c\x7f\xdd\x90i\xba\xdf\x10%B\xe2\xee\xc3\xef\xc9D\x9a|C\xf8\xaa|[\x0d\xd0\xd4\xdbz\x9czN\xdd\xe6*u\x17\x95\xd4\x98\xea\x8dT\x9fP{X+\xa6\xaas\xd9\x84\x08:ZE\xceLL\xabJ\xd7\xc8q\xd7\xdd\xc0r\x93\xc8}\xd5\xec9\xbd/[.\xbb\x0d\x87\x96l:\x96%*\xefdP\xc4pO\x80\xc7CT\xf1\xf2||V\x17\xba\x8ar\xa6\\2\x8c\xf5\x96\x05h\xeek\xba\x02n\x05\x07\xf1\xca\x98\x17Q\xc9\x80|\xa3\x83e8\xd8\x81:4L\xe7 \xd2\xf9Bt\x1b\xd2v[,\xd8\xe5\x8d\xa2a\xb5\x0d~\x16\n\x8f\xbd\xea\xeaV\xd9\xe5\xb3kXf\xea\xe4\xb6\xdb\xd6-7\xa9t(\xabVT\x02#\xd5x\xfb\xee\xe2\x0d\xc7\xa5\x88\xfd\xe3\xc4\x00X\xb5p\xd6\xca\x1b\x16&K\xad\xc6\xf6-a\xfc\x98\xce.dR\xa3a\x9e\xff\xd7\x0fp\xdb\xddvlg\xaa\x1fL\n\x80\x8b\xa8\x8f\xc5/\xc9\xc9\x9cE>SU\x8b\xf5\xed\x86\xa8:z[\x0d\x97lR&\xe6\xc1\xecm@\x85\xa8\x8d5\x08S\x11`\x90r\xdeVb\xf7#t\x9f\xed\xe7u7\xc9V:\x11 2\xbb\xee\x9a%v\xb1KA\xf6S\x8a-KS\x83n\xbd\xde\xf7\xaa-\xd9U\x0f\xcb\xae\x8b\xb1\x9a\xc6n\xa8\x18\xc8\xc8y\xba\x0d\xeb%a\x885u\x00\xa8\xc9\xdbU\x0f\xd2z\xdc\xd0M*\x9c\xdd\x18\xf2&Q3\xe5H\xb5^\xb3\xf1d\xab\xc3\xaez\x98?7\xbb\x80\xd9y\xda4\xfe.\xcb:\x1a\xbf\xc8\xfa<\xe36r/\xb6h\xec\xaf\x1b\xb9=d\x8alv\xb6\\\xc7\x9f[%\x0dd\x14vp\xfa\x9a9\xd3\x7f\xdfv\xe3\xdf\x8bt6n\x8f\xe9\"\xc7\x1c\xba\x9bI\x9fMYruC\xd6\x04UO\xd9\xce>v\xd4\\\xaaX\xdf\xcc]L\xd7\x03\xde]\xcfH=\xdd\xb5\xa5\x8d\xe1|\xc9\xc8\xde\x91\xd6\xcc\x05\xb0.x.S\xc9%\xb2\x81\x95\xc0\xea=]\xbfa\x8eX\xc7F\x94\x8e\xa6\n~\xd0j\xf7\x94\x079\xae\xab\xa6j\xd7\x84\xea\x8c\x1d\xb5\xafv\xd4\x1a\xf7u5\x12\xa5P\xb9\xbf\x01\xf2\xa5\xa6K\x18o\xcc\xfa\xae\xa2\x16\xb1\xb3\xb1\x1a\xca\xeem\x962\x88m\x13\xdb\n\xdcTu#>\x1a\xeb]\x8c\x1bpQ\xef\xe4\xac\x9fn\xcb\x19\xeb\x9d\x92X\xa8F\xdcYG0KUS\x83\xcc6]\x8a0f\xafu\xd3\xacS\xb1\xd6\xb7mG-f}\xa36\xb5\xde\xb4OG\xe9\x88\x8f\xf5n8\x81zEV\xf2\x87j\xa3G\xc05?\xe3\xea\xa2\xde\xbd&\xeb\xae\xaf\xc6\xae\xbf\xa2\xd5\xaa\xc7\x01v\xdd0\n\xacqDlz\xda\xcb\x1d\x97n\xed9.\xdd\xee\xa5\x9bY\xc2Z\xe5\xd6\x1b\xeb\xdd.\xd5\xfe\xf1o&\xe9\x9bMO\x86\xe9\x00[.,bU\x9a\xec\xaf(\x15\x8f\xcd\xca5\xc1H\xfb\x94.\xbe\xb0\x9b|\x7f4\xe1\xbbd\x9c\x9e\xed\xf9e\x82\xbda\xe7\xed=\xdbw}Wm\xd6\xd50FG\xc6\xbf{\xff\xee\xf4\xf5\xab\xd3\x0f\x17\xee\xf0\xb8\xf1\xcaw?\xbd{\xf5/\xae\x1f?\xfc\xeb\xdbW\xae\xdfN\xa7\x1f\xe7\xdb\x04\xfd\xa5\xe3\xda\xae5\xd2\x08\x91\\\xcb\xdf\xe68 \xfd\xf3\xc5\x97\x0f\xa4\xbf\xaf\xd7d\xee!x\x7f.k\xca\xb5S\x8d\xaf\xba\xeb\xf5\x12\xfe\x9d\xf4\x9d8 f)$\xb4\x1c\xb9f;%\xb0N\xb3\xda\xcb\xfe\xaaN\xd7/s\x03\x94 \x9eDD\xae\x1bv\xb6\xf3\xb9\xa2\xf6\xf4f\xba\xe5\x88i\xe0\x17\xe1\xb3\xb2\xfbu\xd8\x01!]\x0eDz\x85\xb3ZtD\xacZ\xd1?fW\xaa\x02y\xac<\xd3\xaeOt\xdc]\xdb<\xb8+u\x8a\xd6\xeatQ\xb58_\xfat\"\xb1ei+#\xe1\xc5{\xe6\xcf\xc5\x97\xf7\xdc1\x89\x0e\xc8\x8c_.Y\xcc:\xf5\xe4\x0fL=\x97\x82\xa4 \xea\xab\xcf\x98\x83\xb7E@\xf8FY\xc8E\xa2\xa1\xd9\x8e\xbe\xa6\xcex\xf4\x05e\xd6\xa3\xbf\x9fj/\xc4\xce~\xf0\xaewe\xac\x80\"\xf0\xfd\xf9+\xcb\x12\xa0\xadI\xb6\x06\xa8\x94CZ\x04H\xb2\nh\xf5\x0eg\x19 \xc9:\xa0\x95;\x9c\x85\x00\xdbJ\xb8\x96u\xdbVL3V\xfc\x93N\xcaI\xf9,\xd5\x9b>\x13\xf2T\xfd\x0b\xda\xa6D\x92\x92\xf1\xcbD\x01d\xda\x8c(\xcf\xda$9\x81\x98p\x873\xda\xe1 \x0d\x0d\x94\xa7\xa2\x81<:\x1a\xc8\xa3\xa4\xc1\xa7(Z\xc9bD5P\x9c\xac\x06J\x12\xd6@\x14i\x0d\x94$\xae\x01\xef\x8d;y\x046\xd8\x1cGo\xdd\xe1\xa6&Hk\x03\xd9\xd46\x88@\xec\xee\x9d\xc5\x847\xe0\xde\x8ay\x97x/\xb61\xbc\xfe/$\xc1\xc1\xcc\x9e\xf3&\x9eP=\xf2\x08q\x0ca\x8c\x1e\x07\xbd\x8f\xa7\x081\x0e\x94&\xc7\x01\x84 \x07\xf2Ir\x0ci#r3O\x1em\x0e\x84\xd8d\xc0w?O\x04\x85\x0e\xb8.\x06I\xa0\xd2q\xcb\xb0\xa8\x14\xb2hu \xa13B\xf4:\x10lw\x90f\x07\xd2\xa8v\x00\xbde\"\x93r\x07B\xb4;\x10\xb8\xbd't\x7f\x8f\xa7\x97bix \x82\x8a\x07\xd0{|\xb2(y \x8e\x96\x07\x16Q\xf3\x80\xb3c\x82\x14=P\x8e\xa6\x07\xdc\xb5\xb04\xad(e\x0fd\xd2\xf6\x18\xa2\xb0\x9b~\n\x13\xf9@a2\x1f\xf0\xdf\xf7\x83\xdd\xf8\x83\xdd\xf9S\x8a\xdc\x07J\x12\xfc@q\x92\x1f\x88&\xfa\x81\x18\xb2\x1f\x88'\xfc\x81H\xd2\x1f\xc0\xef\x00\xc2o\x85\x89\xa7\x88 \xdd\x03\x14M\x02\x04qD@\x805\xa3$!\x10\xe4\x92\x02\x19\xb2\x90\xfb\x81J\xd2\x04AQ\xaa \xc8\xd6\x87 e\x10D\xd0\x06\x81vW\x10J\x1f\x04\xd1Ah;^\x9eE%d\xd9\xf0M]\xb5\x06\x9d\x10@.\xa5\x90!\x8cW\xc9\xa6\x15\x02\x1f\xb5\x108\x0e\\\xc7G8w\x1e\x1dG\xaa\xde=\xa8\xff\x18\xd5Um\xfe\x1c\xf6\x84\xd8{P\xeam\x93|\x02\xdcA\x10>A-U\x8c\x87\xa6\x08\xa6b\\TE\x10\x9c]\xf2YNY\xe4\x10X\xb56m\x11DTg)}\x91%H9\xc2\xb2(\x8c\xa0\x18\x8d\x11DP\x19A>\x9d\x11\x04{\xae(\xad\x11`\xd4F\x00\x05\xe8\x8d\x0cy\xdc\xff\xeelo\xbe\x18\xcd\x11\x14\xa5:\x82D\xba#\xf0cq\xb2h\x8f\x14A\x13\x01\xd2\xff\xc7\xde\xbbu\xc7\x8dci\xa2\xef\xf9+0~h\xdb\xddr\xb8\x9cU\x95\xb3Z3\xee\xd5\xb2,g\xaa\xcb\x17\x1d)\x94\xd9uj\xd5 A\x0cD\x88m\x06\x19\xc5\x8b\xac\xa8>\xf9\xdfg\x01\x1b A\\\x08\x90\x84\x9c\x995\xc0\x8b\xad \xb9q\x076\xf6\xf7\xed\x0d9\xf4\x11MS\xc2\x1fyQ\x12y\xb1[N\"\xff\xbb\x96H\x89\xfc3\x035q\x90\x89\xf8\x8e\xf83\x0fU/\x17\xd3\xa637\x1c\x9f\xd1\xff\xc6\xba\xba\x9b\xfdn,\xaf\x0f1\xdd&\xfb\xda\xc8B\xe6\xb8\xd9\x08\xb7\x1aY\x9e\xbfG\xcdLGX\x83\x13\xac\xb1\x0d-\xce\xaf&o\xc3@N\xaff\x87W_gW\xc5\xd1\xd5X'\xfbz1\xdb\xb9\x95\xf9Z\xcaSa\x82ck\x1d\xd0\xa9\xd5\xec\xd0:\xcb\x99U\xb8\xafJ\xf2\x06\x1cY5'Vc\x8f\x98\x86SP\xc7\xd5\xe9N\xab\x93\x1dVe\x17U\xb9\xad&9\xab\x8epT5\x8fn\x16\x9c\x02\xd4 \xf3R!|PYE\xc5\x06\xc6g\xf07\xdd\xa2\xc1\x97\x146\x85o\x0fZ\xaf\xb3\xa5\x90\x9du\x113\xa3\xb1u\x90l6$\xa9\xd3\x16\xdez\xb2\xc5\xd5\xbeL\x13\xf2\xa4U\x7f`\x99l\xc7;\\\x08Q\xec\x08\xda\xa5\xbb4ov<[A\xb5\xe8\xe8\x12;\xb2\xdb\x17Ef\xde\xe9\xbe'5\xd32\x7fJ\xeb\xbb\xe5C5\x81w\xffH\xc1Y\x96\x0f\x96\xa0,\xf5\x03h\x13J\xbb*\x87c\xfe-\xfbc\x95ja\x0e\xfd|\x02\xfc\x89\xfa\x96C\xd4\x1e\x97\xf5\xaa\"\xf5\xea\x8e\xe0\xb5\xd9Os\x1c\x19\xab\xa8\xb1\x95\x89ece\x0fq\xb2\xf5*\"\xd7\xb9\xd1z^\xe4+\xd4\x05.\xeb\x8a\xd4?\xb0\x1a\x7f\xa3\x19\x9e\xe7u\xba\x9bJ\xefX\xe3\x9a\xbc\xa0\xdf+o0\xe8@__E\x9a13\xcc\x8b\x12r\x15\x18\xb9\x8dY\x83\xeb\xb1H\x01\x8c\x7f\x96u\xba}<\xb8^\x8b4\xecK\x03\xc9\xdeT\xc8\xa7\xb9\x90\xbb\xc9\x1c\xeb\xba\xf2R\x7f}\x17\x89\x0d\x15\xf0\xd0\\\x85\xdcqP\x971\x15\x0b\xf3\x19Vk:\xed\x95w\xe9O\x81\xb3g\xb6y\\\x17e\x15X\xb0Z\xaf\xce\x04\xb5\xdf\x0b\xe6~\xfb\xdb\xbe$\xf7\xc6\xe53'\x0f\xf5\xea\xd1\xca\xd8\xae\xe8\x81\xe5\xe2\xfd>\xb0D6\xfe8\x953\xb0hr\x9f\xaeI\x9e\x90\xc0b\xdb\xfe\xef\xb6M\x83\xfeA\x17\xa2\xa2\"\xe5\x8a\x07\xf1\x08\x95\x7fo\x93\x87 \xdf\x8fx\xd8\x9a\x07Yhn\xe1\xe9J\xdf\xf3q\xe6\x1c\xa5\xa2\xf5\x0e\x18\xed\x8f\x86\x83\x86HVX\xc7\xb1\x1a\xce\xa43.\x1f*)\xf8\xee-\xf7\xa8\x81# \xe8\n\xff\xce\x8f&?\xb0\xcd\xfd_^\x19\x89K`-c\x9c\xf9,cg\x1dp\xd6*9\x10\xb8@\xe8'\xf2\xb4$\xe8\xbf\xe8A\x10oKB\xba\xd0\xa8\x06y\x10P\x92\x99\x01\x8c\xf91\xff\x87\x1d\xc19/=\x14\xf1d\xbf\xff\x01Ww\xdd\xf9\xbb3\xb3\x93\x8a\xd0b\xf5\xd5\x1c>X\xdfR]\xabg\x11\xaf\x08xB\xf4\xcfiL\xd6\xba\xa7\xd9I\xe2\xc4\x94\x9a=t\xcc\x82\xd0\xbc\xf1c\xd5\x0b\\Z\xc1\xba\x01\x8d\x92\xac\xee\x8b\x9a\xac\xec\x85\x83\xe4\xd4B\xdc9\xd2\xc4\xf2\xc2\xf6\xe7^\x19!\xcf\xcc\x90\x107\xf8\x86s&\xcaI\x8d\xf0aN\x10l\xf8\xec\xed\xea\xc3\xd5\xf7\xab\xe5\x9f/\xceV\xd7\x1f\xff\xf4\xf1\xd3O\x1f'|yqy\xf6\xe3\xa7\xe5\xd9\xb4/O?}\xf8p\xbe\x9c\xf4\xed\xa7\x8bOWm\xfc}[\xea\x85\xcf\x1f__\xf72\xd6O,B\xee\xfaC\xb5]rZ\x0c\xf8\x9e\xd0)\xcd\xad\xaa\x12\xdf\xd0\xeeL\xda\xa5v;3.FJ\xb2\xf6\xcd1\xfa\xb1\xa85\x1c\xcfS\x02\xb4\xf31\xba`\x9b'\xce\x86\xc5\xd8Nb\xfd4b@\xfbh\xf5\x90\xca\xa2\xc9\x0d\x07\xab~\xf2;J@\x92\xb2\xfe\xfd\xb7\x83\xef\xda\x8fu\xfd\xe4\xb9v\xa0\x11\xeb\x07r\x9ej\xba4\xa2\xd9\x91k\x87W\x93\xd7Q\xb1\x9fF\xb4\x06\x1a\xd9\"49\x0e\x95\xfd4f\\\x88\xe4?4E\xf2\xed(4\xbe\xb3\xd0\xd8\x0e\xf3<\xa8\x1a?1\x1f[\xd5W\x8d\x8c2\xc3\x8b\xfe\x15u\xd9X\xfa\xa9=\xc9\xd9\xf5\xfd~\x9aP\x12gSw\x85p\xb0\x82 \x8d\x19\x87\xfe\xebS\x8b\x01\xfbe\x1f\xb2\x05\xc6l\xa1t\x97\xea\xdfWC\x8f\xeaEM\x8e\xb8/\xe0.\x05\xafE\xf8/S\xd6\x06\x05\xb2#\x7fw\xa0\xa7e\x1e\xdeG\xa5\xfd\xd6\xf6\n\xd3\x10o\xa3\x86\xe8\xffe\xd4\x10\xbb\x145\xc4\xa8!\x0e%\xcf\xb5\x03\x8dX?\xd0\x08\xc5cD\xb3#\xff=\x00R\xd4\x10=\x92oG\xa1\xf1\x9d\x85\xc6vX\xd4\x10\xb54\xa1$\xce\xa6\x8e\x1a\xa2\xff\x16\xfa\x9b\xd0\x10\xd9\xb2\xb2\xba/\xea4\xdf\xae\xf6\xc5\x97\xe1\xb5\xce\xb3A\xfd\x96\x92n,}\xdd|\xbd\xa6\xf2\xc8\x1c]S\xd8w\xdc\xbc\x15\x86d:x\xce\xb8\x19\xb93\xbb\x0b\xc32`3m\x03Z\xc5 z\xe4\x97\x82\xca\xd8di\xc2\x88\x8f\xcc\xe1\xc8<&2\xaa\xf0\xac \xba\xec\x8a9A|\xfeZ\xe6l\xa9\x84\xab\x01\x02\x0d$\x8f<\x91g\xbe\xa8m(\xcf\xdd\xde3o4\"\x7fd\xe1=\x99\xd3\x88\x02\xa0\x91\x85@C\xcc)s\xf2\xe5S\x99\xd3\xc8\xba\xa0 \xf5A\xc3\x8c,s\xf2\\\x00\xd4$\x16\x04+{\xcb\x9c\xac\x9c.s\xfa\x9a\x85\xf3]\xba\xd4\xe4\xc7\x15\xf3\x16g\xe6\x94\xf9\x9e\xa2v\x90\xc6\xd4\x11\xd2\xe85n\xd2d\x9c0\x11\xf7\xcd\xed\xca\xe3\xee\xc3.\x8dn,4\xa9\xc1h\"\xebo\xff\xf8\xc7W\xff:\xe6\x93\x89\x0d\x87\xa65\x1eb\x01\xb5\x92\xfd\xb7\x7f\xfc\xee\xf3\xab_s1\xa7h\x0d\x17\xcdm\x96&\x7f\"\x87\x9e\xb1\xe439T\xd256\xe3\xf6\xfc\xa6\"\x10f\xef\xc7v\xe2{~\xedK\xd2\xea\xa7I\x8d<\xe5\xc0\xd6\xda\xc8\xf6eZ\x94i=z>=j\x19E\xe9|\n5rz\x8f\x9d\xd8#\xd7\xc1 \x8d3z~\x8c\\\x01G6\x10\x9a\xd0Hh\xda\xda7\xa1\xb1\xd0\x94\x06CSW\xbd\xafW\xc0\xf1\xeb]\xf0\xd5n\xeaZ7e\xa5\x9b\xd0\xb0\xe3V\x104g\x8d{\xf4\xd2\x8d\xe3\xf1\xb6_\x8d+\x96_\x91\xa8N^\xe4+\xb7\xa1\xdd3w\xbf\\o\x0f\x7f\xc7y\x9d\xe6d\xe5\xa7Q\xfbi\xd2\x1e\x1a\xb4\xf7b\xe8\xbf\x04z\xef\x10\x9e-\x08i\xc4\x1a\xe2\xbd\x1fxW\x1e\x8dj\x004v\xf5\x1f\xd5\x10h\\c\xa0\xf1k\xfd\xe3\x16g\xcc\xca\xee\xbb\xa6\xb3\x1b\x8f\\\xc2\xd0\xc8\xd5|\xdcr4\xaa\xd1\xfc\x16\x05H\x13V\xedG(\xcb\xb8\x15\xda\xb3\x00\x9eY\xfb\x18\xeeF\xe6\xe82\xca\xf9\xda\x87\xde\xd3]\xe2\x94\xf9\x1b\x9c0w\x03\x97\xd7\x03\xd8x\xac\xf2$\xff\x18\\\xd7d\xb7\x87P\xcf\x05\xda\xa5UF\xf0\x1aa\xf0q@\xe0\xe3 \x1b\x88$\x8aW\xbf\xa1\xac\xab\x9c}E\x0b\x1e\xe5\xd1\x02\x12\x83<\x8f\xf0\xb0\x1a\xf0\x1b\xc3;\x1aS\x0c\xef\xd8KC`\xe3\x90\n\xf5X\x91\xb6\xbc\xe0?\x8f\xc6\x1b\x86\xf4\xc6\x82w#a\xba\x91\x80\x9c?\xf46 d\xeb\xf5\xbf\x13\x1d\xf3\xc3\xbb\xbc\x91-\x8f\xae\xf2\x18\xe5\x8e\xedmD&\xc3\xdb\x9a\x13U\x1a\x91\x93\xa5:\xbd}\xd3\x17\xe6\xb1\x837\xc3\xdb\xb07 c\x01[\x14qF\xe8e\x8f\xb7\xfc*\x91\xae\xd1z\xa5\xea^\x90\xee#\x91~\x14\xd7+\x88K`\xa4K@Lk\x89y\x05a\x0cX\xedHc\xed.k'\x0d]\xa9\xd2\xe5\"\xae\x00\xa1\xff\x15\x97\x90T\x15\xdcA\x7f\x81\xb7\xe4\x12\xae`X\xc0sE\xc8\xdf\x1aR\xc2\xd5\x02T\x1cm \x82vEU#\xc2\xaeEg\xb7\xa8/\xd0y-\xdd9\xb8\xaf\x0f(Uu\xa2\xba\x8d.\x99\x17hW\x94D\xdcx/\x8f\x10\xc3v\xe7l\x14\x83\xfb\x98\xedH\xc2\xc4\xb3\xd6`\xff\xc9\x9b\xdd-\xdc\xf9-.\xdf\x97n\x83W\xcb/7\x14\xbb8d\xc5\x84\xa8\xaeQtd\xb2\x9b2\xd2\xba\xe2\xf7_\xa4\x15jr\x18Kk\xb8\x98\xfdK\xca\x8f7\xe6\xf9`\xb9)a\xcc\xf5C\x8a\x88\xf6\n\"Q\\\xe3\xadN\x7f\\|k\xbb\xb9\xa1\xbb\x04 zG\x1b\xeb\xfa8\xaf%\x7f\xfc\xf971\x88\xca\x8b\xeb\xc3\x0c\xb7\x9b\xd4\x0f\xab\xb2WHcA\xcd\x85E\x16%\xd99\xfa\xac\x83o)\xe2\x8dr\xb9\xf2(\x7f\xd0\xb5-kF\xbdvX\xf6o\xa2`Z\x9b<\x7f\x92bM\xaa=6G45\x08\xe7e\xfd\x88w\xf0Y\xbb\xba\x9d\x16k\xa2\xc85\x894i\x9e\xf6\x96\xe9U\xa5\x1d\xd5T\xb6O,_W\xdb<\xbdd\x93\x98-\x92\xd5\x91\xb8\"\xfb\xa9\xf4A\x89\xbf\xac\xb2b;E\xb8\xb6\xb6\xd2\x9e\xe0\xee\x12&\x8fI\x94\x15\xdb-)\xd1\xb3\x12\x7f\xe1\xc2\x9f/\xd0\x07v\x05\x9e\")/\xf2\x17kR\x93r\x97\xe6iU\xa7I\xef\x10Xl+Sy\x1f\xf7\x82\xcc]\xb5\xb5G\xd4p\x9d9\x86O\x1bZ\xfbC\x1a\xd4TL\xf7\x84\xca\x9f\xfd2\xd7n2\x11\x96g^\xaa\xd7\xf0\x8d\xa2\x90\x86+\x08\xc9i\x15vV\x16\x92\xbb\xca\x90\xbf\xa1\x19[\xef\xc0\xbfy\x0e\xe5f\x02\xab\xbb\xa2\xc9\xd6t\x8e\xd1\xca\x1bd%8/\xf24\xc1\x19\x1b\xad\xa6\xdc\x9e\x91\xc5vqD\x9b\x8dE(y\xb2xB\x0fn\xec\x92 ~[\xe0s\xfd\x8aa\x9a\xces\xb4\xa7\x0d\x99&\xe4\x08\xd5\x04\xef*\xd4T\x0d\xa6\xd5\x86\xf0d\xfb\x94\x9e\xca\xc5M\x83\xb7i\x8e\xcb\x03\xdd\xc0L-v\xd8\x13\xbe\xd0\xd7w\xe4`\xca\x8e<\xec\xe9v\x98\xd6\xa8.\x181\x84\xdf\x10A\xbb\x9e<\xb0\xae;\xc9\x0f\x0b\xf4C\xf1\x85\xdc\x93\xf2\x88M\xf4\xeb\xcb\xf7&\x8c\x11\x8c\x92TH}g\xdc-\xaa\xe4\x8e\xec\x08\xba\xb9\xab\xeb\xfd\xcd\x11\xfc[\xdd\xb0`ky\xc1\x9f\x1e\xb1\x11\x95\xe0\x1c\x15{X\xfc\xb2\x83\xc1\xa6ES\xb3\xe7\xa1O\x8dy\x91\xf2\x9e\xdd\xc8\x89k\xb4\xc3\xfb\n\x86\x07-9C\x9d\xf8^!\x1d\xc3\x11\xae\xd0\xa6`\x17\x90\x1f\x1b{\xe6\x9f\xd1\xf9\xa6+'\xed\xce}Y\xdc\xa7k\xb2n\xab\xc2\xec\x81\x15[\x89\x8c\xb1T\xff\x19\x9d\xe4\xe8\x87\xe5\xf2\x02}\x7f\xb6\xe47\x88\xd02\xc1tcwS\"\x8c\xfe\xa2\x0e\xd2\xe5aO\xfe\xfa\x97\xbf\x1a\x04\"aZ\xc9\xc5H\x80\xe5\x93\xb5\xe9\xbe,\xd6M\xc2\xae\xa7ew\xd2\x9aT\x8a\x7fF'\xddn\x07\xb7<\xb2K\xd8\xc1(\x96\xe0\x84]\x18]|n\xf6\xadm\xe8\x16W\xec\xfel\xf3\x145\x16\xf2\xfa\xf2=+\x11\xbb\x1c\xb6\xbe#;i,\xf3k3\xb1\xa8\x00\xfd\xff}\x91\xae\xe9\xa9\xd5(\x0c\x8a\xc3\xa6k\xc9\xee\xdf=\x12\x9fR\x89\xb8No\xd3,\xad\x0f('d\xdd^6L\x97\x95\xf2\xde\xa2\xe4\x149\xbf^\x96\xbd\xcef\xcd\x02=\xbb\xae\x88\x88\xb9E[\x83\x0e\x1f\xba:\xc0\xf8\xc19\xde\x9a\xebz[\x12\xfc\x99\xcey.r\xf1\xdcx\xe9LQ\x93c~\xd5m\x93'0\xd2i\xa9\xf9*\x914e\xc9L\x8a\xb2)\xcez\xe3\x0c\xb3@\xea68$V\xfb\xdbf\xc3\xee\x12\xc7\x159b\x1a:\\\x87L3bw\xa6\xb2\xdd\xbb\x9d\x1f\xb7d\x9b\xe6\xb9\xf9\x8ca\xbag\x1d\xf1\xa5f\x01\xe3\x16\xef\xd3j\x91\x14;\xf3\xfav\xc5fO\x05\xf6?:=su=@\xcf\xb8\xed\x05\x0c\xa80\xdd\x9e\xa3\x9db<\x12\xe9\xd68\xfdY\xb5\x18-\xa2\xbd\xe5\x1a\xcc\xd6\xfc\xde\xe3\x04Ud\x87\xf3:M4M\xdbr\x14\x1b\xdc\xe2\x07\xd1\x03\xf7\xfe\xff\xa1\xbdR\x99\x19\xea\xa5\x0d\\\xdb\xad\x85\x8ez[\xdc\x1b\xb7\xfe\xf6Zg\xd6#\xbd7\x86\xcbqs\x92\x1fn\xa4sC\x8epy\x9b\xd6%\x9dX\x03\xe5\xe1+\xa9\"\x0cgE\xbe\xe5\xf7\x96\xab\xddC\xd7;\xb6,Cynu\x95F\xceOh'\xda`\xba\x10\x03;KoY!\xf9j\\\xb5W\x12\xb3K\x92\x93\xcf/\x9b\x9c\xfeC\xf71\xe8\xdb\xca<\x93L[y\xb1AM\x0d\xcb\x89\x98\xa6\x15]\xc8p\xa7\x9aoINJ\\\xb3\xa2\xd6w\xc5\xba\x8d\x1cv\xa2\xad_\xd0%j\x1eg\x0f\x98\x0eQ\xf4\xea\x18]\xd0r\xd2\xf9\xc9\x8b\x8c\xe5P\xde\xa7\xff\xf2/\xc6M\xe5]Q\xa0MQ\xa0\xd7h\xb1X\xfc/\xc3\x0b\xb4\xe28?\x98\x1e\xe1\xfc\xb0\xa0\x99\xbe+\x8b\xdd\xb3MQ<7\xbd\xb4X\x98v\x8et\x83\x9e\xd1\xcf\xafYQ\x97\xc5\xb3\x7f\xa2\xdf?G\xffm\\\x15\xcd2~\xb6\xb5\xc5\xb7\x8e\xb6\xf8\x0f|\x8fg5\x06z\xcd\xf4\x1a*yb\xbd\xd3\xea\xd9\xbb\xa2X$\x19\xae*k\xb5\xa1(\xf4u\xa8\x85\xf4\x89)G\xad=\xda\x06\xf9\xbd\xa3A.\x0e\xf5\x1d=\xef\x18\x84B\x19\xde\x15\xc5\xb3\xc5b\xf1\xdc<\x08\xa09\x9eY\x9e\xb2!\xc2\x9aiL+\xd1\x0f\xcf\xa1\x91\xde\x9e]\x9d^\x9e_,?]>7\xdb\xb8\xba\x81d\xcb\x062\xb25\xcf\x1f\x1c\xcd\xf3}a\xb4^\xd0\xa69~\x8d\xfei\x7f\xbbxW\x14\xff\xbdX,~6\xbd\x86\xf3\xc3\x11U\xa1\xe8\xbb{P\x0f>\xe0\xb2\xba\xc3\x19m4[\x81\xcd\x0d\xa3\xe6i\xcc0\xdd(\xd9]\xe7\xbb.CV\x1c6h\xd9[\xff\xe35\xca\xd3\xcc2\x00m\xa5\xd0F\xda\x92\xdd\xef\x9f|nW1\xa1\xdc\xd2#\xf5^]k\x01\xe3<\x08f\x03\xa3)*\x02\x9f\x1aT\x82\x97\xf4\xfc\xb6`\x0f\xa8*\xf5\x94\xea\xdc\xed\xdaO\xf7\x05\x1e\x82Q\x11\x05=\xaaf\xd0.\xb7yv\x10\xa7\x0e\xed\x80\xd8\xaam\x08oj~C?;\x9b>}\xf9T\x15\xc8\x8f>\xa20p\xd6!|\x84=\xd9\x14\xc5\xe2\x16\x97\xac\x1a\x0f/\x0f\x8b\xbf?\x81V\x00\xad\xddt\x0ca\xd9>\xa1o\xd2E_y\xf8\x1fW\x9f>\xaa\xbf\xbd~\xfd\xfa\xb5\xa9_\xe8\xbb\xdd\xd9\x18\xf4\x98\x82\xdd\xe6\x0f\x9b6\x9c\x01\x9a\x8a\x08\\t\xdbdX\x0bB\xad\x0b\xa0/\xafI\xb7\xd9\x1e!\xb2\xbb%\xebu\xb7\xed\x1e\xf1=\\;QK\x1b\xe0\x865\xc0\xcd\xbf\xd3&\xb8\xe1\x87\xc0\x1euA4\xe8BL\xd7c\xa3\xa2\x8a\x93\xcft\xb6v\x87\x9fM\x9a\x11\xd3*)\xe6\xf5\x05)\xab\"\xb7\x0c|n\xc7`\xd70\xaeXO\xbcF\xafL\xd2\xdaW\x19\xcf\x90\xbf\xf9\xad\xdf\xea\x8c\x90%\xf7'\xac5\x9e\x1c\xa3'\xa6Y\xd0\xaf\xe2\x02\xea\xf1\xe4\xc8,\x89\xd5\xe0#\xdeQi\xff\x1b\x8a\xfao\x96Wi\x0d\x947}\xaaq\xbe\xe1\xeav\xbf\xef\xa1\xdf\xd2\n}!Y\xf6\xe2s^|\xc9\xd9\xfc\xbc\xc3\x15\xc2(i\xaa\xba\xd8\x19\x87q\x7f\xa0\x1d\x81\xb2\xa7\x8c\xbe\x8e$\xc13\xa5\x03*\xdfj\xd6\x166\xb8\xd4\x0cn\xd8\x80\x17c\xed\xae\xc8\xd6<\x88mW&f\xb9\xe1c\x14q[ \x1f\xa2\xaa4\x96E;6\xd13:\xebE\x13hGqa/\xfa\xeb_\xfe\xfa\xdc8\x8c\xe7\x8d\x87~&\xb6!\xc1\xaaO\x85\xbdZ|\xfb\xea\xdb\xea\x89\xb1\x93\xbb\xff[\x88X\xd6\x03\x8d\xc3^\x9ev&\xb7}I\xee\xd3\xa2\xa9\xf8\x1d\xa6\xe8\x1d=\xe33\x94\xbfB\xff\x86^\x1d\xa1\xb4~\n]\xf3\x85\xfd\xaa\x9d\xbfwd\x9db\xba\x16\xa9M\xc9\xd6\x0dQ\xeeV\xa5\x86\xd3\x11\x8b\x93\xde\xbb\xcat\xf1\x1eW5\xe7Y\xd1B(\xc2\xa0H\xe8\xf5k\xf4J\x8b/\xccJHu\xf8*\xadX\x8e\xf2vi\x02\\\xeb\xaf\x80;\xd7\x16Hu\xf0\x0c:\x0c\xa3\xda\x8a\x0d\xe9q\x11\xe2A\xa0t\xb0N\"9\xc9\x86N\x045T6\x8e\x0b6 \x9b\xdb\xa2\xc8\x086Y\xc8\\\xb3K$\x86\xd5u\xe0,\xe3\x19Vi\xbe\xcd\x18\x02\xfb\xa2\x03\x19\x8f\x10\xae\xaa\"I\xd9 \x94Yg\xcc\x02q\x0e\xa3y,L\x07\xa0!\xb3 V22\x86\xd6\xe4\x9ed\xb4\xe7\x99A\x8c\xddIp'\xa9\x05\x9a \xc2B\xb5A\x1d\x17<\x987d\x9b\xe6\x8c\xb3u\xd4\xfev\x96\xaf\x95_N\xefH\xf2y\xf9@7$\xab\xa4\xb7$K\xefI\xb9|0\x1c\x8b\xde\xe3\x9a\x94G\xfd[\x92w\x80\xab fU\xc3\"\x9a\xc3\xf5\xcb\xb0\x10\x8c1\xa7p\x1c\xb6\x855\x01a\xe6\x82\x04\xe4\xcau\xeb.z\xba\x05\xbbB\xdcb\xa8\xad^r\xe9\xa4\x1b\xa3\x8b\x8a\xd8\xb2\xe0\xe5\xe0\x1b\x9cj\xc6\x07\xfd\xbb\xd0\xb5y!\xad\x0b\x93\x9a\xd7d\x81~\xba#%\xc1\x15z_l+\x95\xafJ\xcbtd4\x18J\xca\xe3\x8e\xd4x\x8dk|\xd4\xe6\xc0\xd4\xf9~\xa1\xe5\x02\xeb\xf6\x13#\x85\xef\xdb\xc5\xabWG\xf4?\x7fX\xfc\x91\xfd\xfb\xc7\xf6+{\xbfu\xe4>\x17\x1c]\x92\x8c\xdc\xe3\xbcF\xf5\x03\x84\x9b\xef\x8fCQ+f\xa4\x96\xcb[\xe3m%\x11\x02\xe0\x8c\"\xe2\xceg\x05#\x143\xf5eM\x92bM\xd60\x08z%\xee\x91\x10\x07\xa9\x902 r\xf9\xd0R\x1f\xad\xcc\xc6\x8a\x8d\xd9 \xfcFi\xe17m3\xda\xe62\x9f\x05Y\x89\x8agi\xc5@*\x03\x1d\xb22\xf0!\xc7\x96\xd4\xb2\xf9\xd9\xb6<\xb3{\xd1\xc0\xd63\xc4\x11s\xf3'\xcd\x0c\xca\xc1\x0cG\xb1(\xad<\xca\xc1,|\xb9\x94&6\xa5\x10lf\xd5\x0d\xb5\x96\x1f\xa7\xd2\xc4\xaa\xf4o/7\xb3\xd2\xc2\xad\xf4\xcfB\xe3W\xfa\x13T\xdc\x0cK\x07O\xc5\xc4\xb2\x1cR\x1c-J\xe3\xa0\xc28\xac,\x0e\xf2-\x87\xc7\x06$\x97\x87\x97\x85u\xe9T\x0f\xed\xccK\x97f\xed\xa0%:\xb5kW\x93A\xb2\x1d\x18z\xcf]\xda\xaf\x0f\x0f\xd3]]HN.\xa6W\xd5!\xf94\x00$\x0fF\xa6g[@\xf2be\x8e\x90\xe8R\xb6\xfbi,7\xd3\xdd8c\xd8\x99S\xf8\x99\xfe5\x9c\xc4\xd1\xb4\x0f\x7f\xba(:Y\x9a\xa1y\x9a\x03LM\xdf\x86\x08\xcc\xd6\xf4\xe0k\x0e06}\n=\x83\xb5i\x91f\xe7m\xba\xcb\xe3\xbb5\xd6C\xdcM\xe7\xae\xa8\xf37\xfd\xf7\xf39\x1cN;\x8bs\xb2N9\x97\xcbics>F\x81<8\x9d:\xabsp[q\x99\xdc\xcc\xdcN\xe7\xfa\xee\x1a\xa5(<\xc3\xd3\xc5\xf1\x0c\xcd\xf2\x0c\xcc\xf3t0=gs=\xc3\xb2=}\xf8\x9e3\x18\x9fa9\x9f0Z\x1d\xac\xcf\xb0\xbcO\x0f\xe6gp\xee\xa7\x83\xfd9\x8d\xffi\x144\xc8 \x0d\xc2\n\xf5\xe4\x85\x1a\xbf\x1c\xc5\x15\x9d\xcd\x16\x0d\xcd\x17\xb53F\x03sF\x1f\x835\x1a\x987\xea\xcb\x1c\x0d\xcc\x1d\x1df\x8f\x06\xe7\x8f\xda\x19\xa4\xb0pyqH\xa7\xb3H\x8d\xc2\x18\xb3\xd4\xc2#\x9d\xc5$\x1d8@:T\x8a1\xd1(,\x1aG8N\xe90\xab\xd4]\x9a\xa0\xcc\xd2ani0v\xe9\\~\xa9&\x8ei4F\xe5!,\xc7\x94O#C\x85\xe6\xf2L=\xc8\x95\x83\\SO\xb6\xa9\x95\xb26\x92qj\x97c\xe0\xf1\xcc\xe6\x9d\x8ei\x1c\x1f\xee\xa9\xbb\x15\xbc\xf8\xa7\xa3\x19\xa8f\x96S\x00\x16\xaa\x07\x0f\xd5\xc5DusQ\x07[m\x0c\x1f\xd5\x8f\x91j\xe6\xa4\xcef\xa5z\xf3R\xa72S\xed\xcd\xe4\xc5N\x0d\xcaO\x1d(\x8ba$\xceb\xa9j\xd2\x0c\xac\xd5\xa0\xbcU\x1bsu&wU/\xb2\xcee\x0d\xcffu\xf0Y\xcd\x8cV3\xa75$\xab50\xaf\xf51\x98\xadc\xb8\xad\x9e\xec\xd6Q\xfcV\x7f\x86\xab\x85\xe3jc5\xfa\xf3\x1a\xdd<\xd7QLWo\xae\xab\xb1B\xa1\xf9\xaea\x19\xaf\x16\xcekh\xd6kh\xde\xeb\xfc1\xe2\xc5}\xf5c\xbf\xf6\xf9\xaf\x03\xa1\x08\x07\x8ea\xaeSMP\x1e\xec\x00\x1360\x17v\x98\x0d\xeb\xe0\xc3\xda\x80\xf0\xfa+r\x04j+\xd4\xed8S\xbb\xe0m{% }\x0d\x1c\xdf\x01`;j(\x92\x07\x8d\xd5\x03\xdb\x0e\x99\x99\x835+2\x1b\xe2\xcd\xbag\xa4H\x93\xb8\xb3Vi\\Q0\xb3g}\n\x15\x8cA\xeb\xe6\xd0\x86d\xd1\xfa\xf1h\x830i\xdd\xad8\x89M\xab\xaf:\x12\x8ah\xe6\xd3Ng\xd4j\x82\x04a\xd5\xce\xa9\x0d\xcc\xaa\x0d\xcd\xab\x1d\xcf\xac\x1d\xee\xc7`\xec\xda\x01~\xedT\x86\xadVv\x993j\xe3\x9av\x15\xf2\x8f\xaa\xdb\xe3\xf7M\x0f\xb1\x8b\xd0[\xaa]&\xcc&\xb8/\xaa\x1a\xdd\xffn\xf1\x87\xef\x16\x0f\xc7p\x9a\x84\xf8\xae@b\xe9\xbe2nR10/O10\xaf!0\xafVccm-5\xe5\xb5\xf4\xaf\x14\xfb\xd2Q\x83\xe7\xeb\"V'\xd7\xff9\xf0\xd2\xfb\xb3\xefON\xff\xbc:\xf9p\xfe\xf1\xd3\x8a\x9d\xd3\xed\xef\x9e\x9d_\xac^\xfd\xeb\xab\xde\x1bm\x94~w\x05\x87\xd5\x95\xabt\x9b\xd31\xa4\xf6\xbc\xd4'\x80'\xd6\x15*\xbe\xe4\xa8\"IS\xa6\xb5z\xea\xd86\xb8\xa4\xfa\x80iof$\x1e\xda=\x12{%)\xf2*]\x93\x92\xeew\xa8$\xdb\xb4\xaa\xcb\x03\xb3\xa8e\x19\x02s\x06-\x03+\x80\xc6\x91\xe4'\xc8S6\x19\x10I\x8a\xeaP\xd5d\xb7@'\xfb}\xc5\x17\xc5\x9a\xb3F`]\x16(\x98NCay\xa9\x19tYs\x99\xc0hd\x85\xcf\xd2\xcfD\x16\xc9-\x1a\xd27&\xba*\xc9\x93\xa2)\xf1\x16\x8aS\xecIN[yGk{q\x89\xf0\x96*M5\x87\xc9\xd3\x8ce\x80\xd7\xb4mr\xf2\x05%X\xd7\xc7\x98\xc1$\xad\xba\xfec\x0d\xccqD\xae/\xa5eW*T\x15\x1cjL7\x1bR\x1a\xc8L\x98V\x94\x11\x180tOU\xd3\xb3\x00g\x07\xc0\xcc\xe4\x1d\xa9\xeb\xd6\x96\x99f\x19\x9f-F\xcb\x00\xd6&\xef:\xbc\x1dtT\x0b\xe2{\xa0\x92WI\xfe\x8b\xf5\xabv\xbc\xd1'\xe1\xb1\xf6\x8b\x9c\xb32\xca\x05-\x08\xda\xf4m\x91\x00y@%\xda\xdc\x93\x12\xf446-Z\x8e1\xa8\xc5\xf4\xd81P*\xbex\x1c\xeb?\xc1\xc1o\xd30\xed\xb2W.\x18z\xb4%X\xce\x07\xa0\xcb\xf6\xf3\xb8kv8\x7fQ\x12\xbcf\xbbmM\x1e\xea\x06g\x9a\xb1\x99\x9e\xc3\xf6b\x89\x05B\x89\xd6\xb6\xf2\x17j/\xb3*\xaa-\xca\xb4\x95\xb4\x92\x88\x1ct\xf2\xf1\xd9\xe1\xd5Kt\xa9\xd4{\x8a\xfe\xea\xd3[\x86\xf5\xecm\x91\xbcMK\x92\xd4'\xcd\xc3\x02\x9dT\xa8\xd8\xef\x0b\xae\xa1\xa9\xd9\x1c\xc1\xa8n\xe7\x89\"n]\x10F\x1dQ\x9b\xa2$\x7fk\xd2R\xecPU[\xb8\xe2\x9ej\x0b\x8c\xe8\xc1\x1f=E7\xf0\xbf\x15=\x10\xdf\xb0\xe6\xc2Y\xa5*\x86p\xe4\xd6Z\x9cC\xeb\xf9\x16-\xd3=\xd8\xcezNc\xea\x07\xc6S\xd0wC}\xa0\xedD\xc7C\x0fa\x9c\xde\xe2\xe4\xf3\x17\\\xae+\x85\x8f4\xdc5'\xbb4/\xe0<#\xcdnT\x92]q\x0f\xf7\x8f\x00\xb0D\xe7\xc0\xe0\xb0\xe1\x1b\xe2\xb1\xfe\x934`\x84j\x01\x85\xa2\x0dyv~\x81\xd8;\xa2\xaf\xe4mDm\xc7\xb7\x7fZ\xa0K\xb29F\x8c\xa1s\xfc\xf2%I\xf7\xd5\x820\xbd\xbb\xd9-\x8ar\xfb\xf2\xec\xfc\xe2\x8a\xfe\xfc\x82n\xcejG\x9c\x8a\xe9pd(eZ\xf1=\x0f6@\xda\xa4\xbdu\\]rp\x99\xe2\xbc\xd6\x0c\x00\xb7M\xcblj\xe9>\xec\xf0\x0c:\xe5\xdb?Ix\xe2\x02-\x0bDr\xb6>\x9c\x9d_\xd02\xabF\xebC\xd10F\x99a\xab\xa1'\x9c\x0eW\xb8Y>\x9c\x16\xf9&\xdd\xde\xc0\xea\xc4@\x87\\\xa5\x1c\xe9\xd6\xe1\x1bQ\xc9\x1fp\xbe\xceHy#\xba\x85\x96\x06H\xae\xb4\xd0;LK\x9d\xa4k\xb6\x0d\x02\xd0\xc8\xd7\x13U\"\xffV\x1d;^\xb3\x02.\xce\xa0i\xd7du\xda\xe9\x8e\x9e\x1e\x9fB\xf3^|\xa0\x9fw\x8euB\xc5\xa5\xbf\xf6\xb5\xaa\x1c(\xeb\xecI\x95ne\xf5\xb6\xa7\xa4 \xc9\n-HU\x94[\x05\xbd(-\xa2\x87\x8f\x0cPp\xef\x83\xc3mZ3{\xb3vt\x10\x0f\xa4\xc9\x07k\x00\xbb\"\x92n\x93\xbc{\xda\xd2\xe1n\x93\xeb\x84\xf9\x1f+\xc8C]\xe2\xd5mZW\xab\xaa.Js\xb4\xe61\xb7\\\x90L\xb3\x96;\x0f\xca=\xeb\x81]\xc7>\xa5\x0bdR\xbfI\xeb\x13\xd6F\xa9y\xaa\xd0\xced\xfe\xa7\xad\x1d\x806+\x18\xf8{\xda\x16S\xa6\xe9\x19\x98\xefg$\xaf\x9a\x92\xb4\x0cj\xa6h\xae\xc9\x1aLQ5\xfeL* \x1f\xef\xd2<\xdd\xe1\x0ca\xe6\xb6 \xecOS(\x04@\xf8\x0c\xe6\x02\x81i\xbe5\x96\x82.=\xf5\x1dU\xffS\x0cjI\x9c\x00\xdf\xe9qAXe\xd5 \xbag\x97\xaa\xb2)\xf2\x8dT,6%E!\xe0\x94L\x17\x02\xa6\x07\x98>\x1e\x9e\xe0W\xd2Y\xdfc\x86\xf7\x8f\xeb\xb3\x8e\xea\xc6\xe9\xa3\x1e\xd1\xdd\xc7\xf3\xc1\xa3\xf9\xf0\xb1\xdcy$\xf7=\x8e\x0f\x1d\xc5=\x8f\xe1\xf6\xe5a\xea\xf1\xdbz\xe0\x0ez\xd8\x9eu\xd0\xd6\x8f\xd6a\x8f\xd5A\x8f\xd4a\x8f\xd3\x93\x8f\xd2_\xe9\x18m\xe0\xa4\xb2\xb2w\xd9\x12\x04\x95j_\xd6;\xf8\x8a\x0d\xbcQ0&\x1c\x81\xfa\xa8\xff\x08\x13Bm\xf4\xa0\xb7\x1e\xfa\x871\xb4\x80\xfe\xf2vO\xf9p>\xf2\xc1\xbc\xe3\xad~\xf1\xf5t\x8f\xf8P\xbe\xf0\xc3^\xf0\x93\xfc\xdf'{\xbe\xb3\xfa\xaa\x16f\xab\xcf\xfbdowP7\x14i\x16?\xf79\x1e\xee\xcc\xa0\xa4\xd6\xc6\xe0\x841\xc5\xab\xdd\xee\xc1>\xd3w\xdd\xcbk\xdd\xdfC}\x86o\xfa\x0c\xaft\xc3\x82\x11\xd0\xf7<\xac\xd7y0\x7fs\xb7\xa7y0\x1fs\x9bw\xf9\x1c\xbfr#\xfd\xb1\xf6\xf1\x1e\x9f\xea7n\xf5\x11\x9f\xe8\x1dn _\x8f\xb3\x8e#\xe7\x0e:\xd1\xff\xbb\xf3\xf56\xb5\xef7\xee\xbc\xe7y{\x83w\xb7$N\xf7\xf3\x0e\xe0\xe1=\xcf\xb7[\x19\xe5\xeaf8\xd3\x9f\x9b7t\xef\xe42\xc3s{\xd0-\xd9\xe2\xad\xed\xf4\xd3\xd6]6\xfd}\xb3\xf5o\x7f6\xd5u\x92'\xb6Oe]\xde\xd7\xf6\xba9=\xaeG\xf8Z\xf7\xdd\xd2f\xfaW\x0fzV\xdb}\xaa\x87\xbc\xa9\x8d\xad\xe0\xebA\xed\xf2\x9dV\xbd\xa6g\xf8K{xJ\x8f\xf7\x916x$\xbb\xfc\xa2\x03yD\x1br\xee\x8d\x94Y\xfe\xcf\xaa\xbf\xf3\x1cOg\x83g\xf3,\x9ff\xd5\x879\xa4\xf7\xb2\xd5oYu\xe6T}\x95\xc3x)\x07\xf3O\x0e\xeb\x99\xec\xe7\x93\xec\xf4F\xf6\xf4C\xf6\xf1@\xd6\\u\xf5\xdc|}I\x87\xfd\x8d==\x8d=|\x8c{E\x0e\xe9W<\xcb\xa3X\xf7 \x0e\xe7;\x1c\xcekxz\xef:=\x85]>\xc2b\xf9nI\n\x93\x99J\x9e$\x08\x07\xed\xa8n9\x10\x82\xed!\x98M\x92\xb0\xceUJ\xc2t\x0d\x1c\x88\xcf\xe4\xf0TXF*\xf2\xb7\x86\xe4r\xf8v\xe31\xc3\xe2\xbfaW\xf2\x85\xdc\x96\xc5 \xfe\x16G\x89\x84y\xa0\x1c\xf1\x01\xd7\xab}oin}A\x12\xe6\xb1\\+!\xfc\xa1U\xd8\xee\x86\xd16\xbd'l\x8c\x96\xa4\xaa\x84I\x9d\x1e\xc0$\x81}\xaf\xc8}\xc9\x1c\xe6\xe8\xc4\xc9\xf0\x01\\,?\xf3\x83\x98\xd9\xcd\xa43\x9b*]\xd6\xf1CX\x17Y\x89cu\xb1\x7f\x91\x91{\"H\xf1C\xac\xb1\xabt\xd7d\xb8\x16^;\xde\x86Z9\xe8\xa9\xe7x\xb5\xde\xa5\xd0\x1b\xaf\xf5\x83\xe8P\xf9Z\x00:\xdcxI\xcd\x1eh\x0btE\xf25C\x9f\xeb\x07\x0e@+\xceg\xf5\xc3\x8a\xfd\xee9\x10\xedL0\xa5\xbc+\x9e\x1b\xdf}i \xe4P\xb1\xd2\xbbFl\xe7\xf7\x83C\xa1\xd7;\x9d\xb7\x11\xfcY\x9b\x9c\x8d\xc47\\\x84\xcb\xd3\xa8\xcbb\xe4\x9d\x1b[\\)\xebV\xaf\x0e\xe2\xb1(\xb3\xec7\x8co\x8b\xa6f\x01v\x99\xed\x82+Z\xbc\x83{\xf1u\xb5r\x98\xcb\x82\x06\x02\x15;\x8d\x1a\x06\xdf\xb8a\xb3\xc6\xf7\xb8\xfa\x89e\xd4\x02o\xf8!\xdd5;\xd4\xe4\x8c\xd0\xb3A_\x8a\xf23\xfa\xc2-\x80`\xc2\xaa\x1ft\xb7\xc1=)i!\x16J-\xf4\xd8\xc6\xb3\xeb\xf0=\xae\xae\xab\xae\xc0\xb8\x17\xe5\x18'5\xd8\xbbE\xb8cQ 0TZ:\x18\x1evC\x92\xfd\xd5n$\xb3\xbaR\xbf \xc3\xd9\x00#-Soq\x8d\x81\xb4y\x00NeI\xea\xa6\xcc\x85\x1f\xb4\xd0&\x98\xfd\x95\xe1\xbeR\xc8rt\xae\"&\x1f\xae\xaf\x96\x06\xc3\\F\xf2m}Gw\x80M\xfa\x00\xe3\x9c\x81el5#{\\\xe2\x9a@\xee\x90)\xdd@\xa9Bc\x8e:\xd8\x16\xa0\xd2\x0e\xdf\xf22\xb8\x04f\x14\xd5\xcd\x19\x80D\x15\xb4}\xb1gs|}\xc40wZ R\xb2\x9b.\x84\xdf\xa2\"\x90\xaf\x9cj>\xb7$\xc1\x0c\xba\x00BG_\xdd\xffPm\xfbn\x90T\xf5\x97\x04h\xf7^X\xfbt\xb8\xeb\xde\x17\xdb~\xc6\xcc\xa3ZZ],=hkN\xb9\x8c\xf1\xb2\xbd\xc1*@r\x07\x11\x89\x97\xedIix4\x8b4)`H\xbcl\xaf'\xe9\xd7p\xd9\xde\x84k4\xf8\x85\x19\x8a<\xb1 (?\x1bw$\xe9\x1dyQ\xff\x85\x16\xb2x\x85A\xbc\xc2\xc0(-^a\x80\xe2\x15\x06\xe6|f\xd2@\x84\x10\x0f2\x88\xf1Ko\x82\x08\xa4\x194\x11H3\xc8\"\xb6\x89n)j0\x1a \xa4\xb0d\x12H\xc1(%\x90\xdc\xc4\x12H\xc1\xe8%\x90\xe2\x15\x06\xf1\n\x03\xb0\xad\xc4+\x0c\xa44\x8f\xe6\xa2\x89\xab\xe3\x15\x06nj\x0c$W\xf0~7M\x06R\xbc\xc2`\x1c\xad\x06R\xbc\xc2\x80%\x17\x0d\x07R\xbc\xc2\xa0\x9eA\xd8\x81\x14\xaf0\x18I\xf7\xd1\x8b\x1c\xaf0\x08A\x11\x82\x14\x96(\x04\xc9\x8f.\x04\xc9I\x1a\x82\xe4I\x1d\xea\xbd\x1c\xaf0`)$\xd5\x08\xd2,\xc2\x91&-^a\x10\xfa\n\x83\xe1\x13J\xcf\xf2\xacC\x83\xc2j\xdd\xbd\xc2\x06\n\x9d\xd3\xcc\x10\xa1H;\xc9\x0f\xe3\xe2\xa0\xb9\x08\x14\x1e\xf1Z\xc57\n\x91\xc2\xc5\xa0X\xa6{o\xd2\x04\x00\xef*\x03\xc5\x11\x14G\x93\x0b\xc9f\x87_\x93\xbc\xd0b\xa6ZO\xcaj\x89\x06_\xb7\xd3`\x10:-R9\x86t]|&9\xdf\x1f\xa0H\"\xa44]\x0d\xe8\xe9\x95e\xac(~\x1f?-\xcf\x8e\xd9\xbe\xc6)\n-\x92\x8dst\x9e\xd7|\xda\xb66\x84\xde\xdc\x85N\xea\xc9\xab\xd2m\x8e\xeb\xa6$\x95\x08`\xc0t\x9cm\xb1-\xd8\\\x91\xe8 \xc0\x9d\xe3\xd9j< \xb6O\xa5\xfbo\xc4\xcb\xfb=)\xd5nT\x9aK\x84\x1ef\xef\xb6\x12\x81:\xa6\x90\xd4\xd0\x1e\x1f\xd8>\xc4\xad-\"'s{/\xd3}\xcb\x91J\xf7\x9d\xedhGj\xfcB\x89\x9a\x00_X\xe7\x8d\x89\xa5\xe5=\x98o\x8b\xb5!lX\xb1nci\xf38\xef\xcct\xc6L\xe2R[v\xc5TZ\xd1\x8b!\"B\xc6G\x84\xab\x8e\x08WD\xb8\"\xc2\x15\x11\xae\x88pE\x84\xab\x9f\"\xc2\x15\x11.\xb7\xc6\x11\x11\xae\x88p\xf5RD\xb8x\x8a\x08WD\xb8\"\xc2\xe5\x95sD\xb8\"\xc2\xd5\xa6\x88pE\x84KI\xbe\xe8ED\xb8\"\xc2\xe5\x1a#\xbf\x1c\xc2\xc5\x8d\xce\xe0\x9d#\xae\xe2l\x7f\x05[\x00xe\x80'\x1eiA\x07ERw\xd9\x80\xdaDp\xcdk+\x13\xf0\x14\xd6?\xdcO\x9d\x8e4\xf0\",6\xec\x86\x0b~K\xac\"\xe7\xa4\xa9\xefXp\x00\xed\xf2!)63\\\x0c\xbb|xZI@\xc9\x02\x9d\xe1\xe4\xae\x83KDP\x00\x0e\\h7ga6Hu\x0f\x9f\xba\xbd\xae\x94\xee]l\xdf\xa2\xf3\x96]\xe8\x8d\xd2\x1a\x15I\xd2\x94\xba/\xe3\x1b\xe6\x86zOr1C\xc4wj\x81\x9e \xd3g{s-{\xcf\xdcg\x9a\x85\x84\x05,\xde\x90\xb2\x04\x83\x14\x16\x80E\xbac\xa7\xcd.\x10\xc2\x1e\x1f\xe0\xd9\x86\xa8@\xa1H_\xee\x8aL\xbf\xc9M\xf6\x01\xef~\xde\x91]a\x02-F\xbbARA\xc2\x83\xb5;&\xe7EM^&\xc5\x8e\x99\xd9a@\x8a\xfeA\n\xec\xa2\xb5\xfcO'\x97\x1f\xcf?~\x7fL\x17\x87$K\xe1\x96_*\x1e\xe2\x0ed\x07D\x1ex4q\xf2P\x0bsx^\xd4\xfaen \xce2\xb6`\xee\n\xe3\xf5F\xd2%\x06\xf0\xe6\x0d-\xf8\x8d\xf0;E\xcf*\xa2\x8a\x14\x11\xab\xb7i}\xd7\xdc\xb2%\x01\xc0\xab\x97\x1d\xaa\xf52\xad\xaa\x86T/\xff\xf5\xd5\xb7\xdf>\x97[\x9d\x8e\xb9\xa2\xa9Wp\xef\xbcg\xfb\xbb\xefN\xd5.\x93\xe5\xf9\x08\xfc\x8b]\x86/.\xbb\x07\xdd\x0c\x16e\xf0\x08\x97\xe2\x1b\xb0E?/\xd4\xd1{\xdbbh\xa0\xb9\xb2e\xfc\x0e\xf7f;y\xa8I^\xa5E\xbe\x02cx\xc4\xc4\"&\x161\xb1\x88\x89EL,bb\x11\x13SS\xc4\xc4\"&\xe6\xd68\"&\x161\xb1^\x8a\x98\x18O\x11\x13\x8b\x98X\xc4\xc4\xbcr\x8e\x98X\xc4\xc4\xda\x141\xb1\x88\x89)\xc9\x17\xef\x88\x98X\xc4\xc4\\c\xe4\x1111n\xeb\xd6\xce&\x9a\xdd\x19\x0c\x1a\xed\xe9D\xfc\xca\xfa3\xc1y\x87E\xdc\xaaz73ik@\xd5\x97;\x92\xf3\xe5\x08\xee\x0e\x90\xf3\x81+V\xc5\xad\xea\x0b:.\xa9\x02\x04\x0bXE\xd8\xad\xc2}q\x16\x9b)\x1d\xa5 \xce\x9f\xb2\xf3\x1e8\xa9\xad\x01v\xd2\xec\xf3\xec:O\xb8bW\x12\x92\x17\xf9*)\xd3:Mp\xb6\x8a\xc6\xf8h\x8c\xef\xa5h\x8c\x8f\xc6\xf8h\x8c\x8f\xc6\xf8h\x8c7\xa4h\x8c\x8f\xc6x\xb7\xc6\x11\x8d\xf1\xd1\x18\xdfK\xd1\x18\xcfS4\xc6Gc|4\xc6{\xe5\x1c\x8d\xf1\xd1\x18\xdf\xa6h\x8c\x8f\xc6x%\xf9\x1aZ\xa31>\x1a\xe3]c$\x1a\xe3\x83\x1b\xe3\x0f\xed\xa8K\xb7y!;\xd4\xf4\xcel\xcb\x877R\xf8)\x16\x8a\x8a]\x8c\xd8\xbbJ\x906\x01\xce\xb2\xd6 \x87\xfe\x8b\x8a{\xd2\x1a\x8apS\xdfM\xbb\x92\xb3\xf5\xbai?4y\n\xb4\xf2\xdb\xa0`M}W\x94\xe9\xdfa~\x95\x84\xdd\xd55\x101K\x1eQ\xe2\xf0\x0e&F\xa8\xd2\x91p`\xd9\x15\xf4\x98G[u\xd3:Tt\x9e>\x93\xc2\xd0i'}\xf7}\x89\xfdk;\xbb\x88l=7*\xe9wn\xea\xac\x93;\xbec\xf2\x8b\xd4Z\xd7'I\\\xdf\x83\xaa\xf3z\xea\xbb9\xd5\x05\xbf\x8a/)\xf2\x9c$5]\xae\xda\x0cY\xdc4\xf9\xba\"I`\x96~\xee\xe9\x0fCWpR\xc5\xad\xa8\xd8\xd8\x80\x91\xa4\x0cM\xd1\xdbU\x8d\xf35.\xb9Z\xd4\x9a\x9dn\xcb\x02\xaf\x13\\\xb1\xc2\xf5\xa3\xb8\x99\xe3\xb4\xbdi\xc3\xaf\xd5\xeeXm\xc2\xa3lR\x9f{\x87\x1e\xac-\xd8\xd3\x80\x91\xc8es \x8a7\x0daM!q\xa6\x80\x18\xd3\x00\xbe4\x0b[\n\x87+\xb90\xa5\x89x\xd2d, \xec\xd7\x86\xd6\xb2\xe2H\x931$Pa4yV\xfch\x0ev\x84\x9a\xbd&\xcf\x86\x1bM\xc1\x8c\x86\xf0\xa1\xd9\xd8\x90\x17.4\x06\x03\x9a\x85\xff\xcc\xc0~\x8c\xcbJP\x8c'4\xbe\x13\x10\xdb\xf1\xc1u\x02b:v<'(\x96c\xc6q\x0c*\xbei\x95\x9a\x8a\xdf\x00V\xa3\x893a7\x93q\x1b#f3\xb0\x15\x0f`5\xae]:\x14Fc\xc7g\x86J0\x0f\x97\x01\x1c\xa6'\xd0\x84\xc9\x04\xc1c\xe6a1\xda,\xd17\xdc\x90\x18Lm\xc0_\xe6a/\x0eh\xc1\x8a\xb9x\xe0-&\xe3\xeb\x18\x9c\xc5\xf4\xfd\xcf\xe6\xbaO\xc4V\xfc*\xef\xc6T\x86j\xea\x81\xa5\x8c\xc2QT\xa3\xd3l\xfc\xc4\x81\x9d\x0c\xe1&\xc3\x98\x89\xa5U\xfc\xb1\x127N\xa2c$\xb3\xf0\x11/ld\n.b\xc4!\xdcxH0,\xc4\x98\xbf2\x92f\xe1\x1f:\xde1\x07\xeb0b\x1b\xb3p\x0d\x1d\xc7\x08\x8ba\x0c\xe0\x17\xbaYW\xc7-Ba\x16\x01\xf1\x8a\xd0X\x85/N\xe1\x81Qx\xe3\x13~\xd8\x84\xc1\x8co\xca\xd5\xd7\xd6\xec\xc2#\xbc\xb1\x08/\x1cB)|X\xfca\x16\xf6`\xc2\x1aB\xe2\x0c!1\x869\xfd\xed\x81-\xb8q\x85n\xf1\xb7k\xd5\xc2`8!\xd8\x95%\xbc\xd5\xe4\xd0V\x96`V!\x03Y\x99\x82X\xd5\xe3\x03X\x05\x0c^\xc5\xdb\xa9w\xc2\x9e\x15\xb4J\x0fSe\x08Q\xd5\x0fOe<+\x0e\x0d\x99\x90!\xa9\xe6\x84\xa3\xe2a\xa5\x94\xb2\xf5BQM\x08C59\x04\x95-\xfc\x94\xb1}-a\xa7L@R\xc8pS\xaePS\x03\x9e-uD\x12z)\" \x11I\x88HBD\x12\"\x92\x10\x91\x84\x88$(\x8f\\\xbbtD\x12\xea\x88$D$!\" \x11I\x88HBD\x12\"\x92\x10\x91\x84\x88$D$\xe1W\x8f$\x98<\x13\xe6x%\x18\xfc\x10\x02\xfa \x18,a\xb3\x02\x01\xf9\x06\x01\xaa\xa3\xa9\xb4\x97\xa2\xa94\x9aJ\xa3\xa94\x9aJ\xa3\xa94\x9aJ\xa3\xa9Ty\xe4\xda\xa5\xa3\xa94\x9aJ\xa3\xa94\x9aJ\xa3\xa94\x9aJ\xa3\xa94\x9aJ\xa3\xa94\x9aJ\xa3\xa94\x9aJ\x7f9S\xa99LK\xe0\x10-5\xc9\xd7\xa4\xdc\xa5y\xbd\xc0\xb7I\xba8\xbb'y\xed\x1d\x08\x83\xbd\xd2u\x85~0\xc3u]\xa6\xb7M\xfd\xd8\xb12>\x93C\x88cb\xb0\xf3f\x9a\xaf\xc9\x83Y\xd0mQd\x04\xcbqQz]\xfa\x94\xf5\xc0\x89h7\xf0\x18\xa8\xd2|\x9b\x11Z\xcb\x17\xb0\xad\xedqZ\x1e!\\UE\x92\xb2\x83\x10\xdf\x93\x10\xa1_/\x9e\xeaC\xa5\x9d L>X\x8b*\x84;+\x12Z\x93{\x92\xd1\xe6\x85\x10/u\x8d\x93;y[\x93\x82\xbaH\xe4\xfeKR\xed\x8b\xbc\"o\xc86\xcd\xdfdE\xf2\xf9\xa8\xfd\xed,_+\xbf\x9c\xde\x91\xe4\xf3\xf2\x81\x0ez\xe5\xfb\xb7$K\xefI\xb9|h5\xd4\xf7\xb8&\xe5Q/z\x0b\xda\xe1\x03\x9d\x10\x7fkHI\xd5\x97\xa6b\xf1]\xd8Dc5\xaf\xacc\xbamQ\xef\xc1\xdd\x1bS\xc6A`\xe8~e\x04\xf9~\xa6\x8c\x17}\xa4<\xce\x18\xe1\x91p\x9a\xfd\xb6\xc4k\xd2\x86\xc3\xf9P\xac\x9b\x8c\xfc\x08\xc65\xef\xf6\xa2\x1a\x83\xa3\xe6|\xb1\x96M\xfcx\xbfG;\x96\x9fhA9[\xab\xa4ab\x7fBGT^5\x95\x90f\xc9\xad\xd7\xaa\xad7@\xaf\xfa\xadA\x87\xb61|\xcaMu\x95\x9eM;v\xaf\xd2\x0c\xfc\xb5\x9e\x96\xa2\xb4pUl\xea/tc\xa4k\xc8~\x9f\x81I\x805\"\xce\xd0\x93\"\x7f\xc1\x85\xc1\x1ap\xdd\xbe\xb9\x90\xde4\xf4DVl\xd3D\xaed\xdb\x07%\xd9\x15\xf7d\xdd9\x8e]\xbd\xfdS\xcfB\xc2\xce\x07i\xc5\x8ft\xdc6\xcf\xcc\xe0G-:\xd3\xce\x94\xfa\xae,\xbe\xb4\xde_\xa3\xfc\x93\xfa\xab\x98yYB\xfc\xe0+|\x92\xea\xd6!\xa9\xeb\xe5\x1d\xb7b\xefIIE\x93\xb5l\xc7\xf8\xc4-\x01k\x94n\xa0\xc5x\x85*\xd2\xf6j?R\xdf\xd0\"\xde+\x173\xfdI\xbaDk\xd8o'f\xbe)8\xd4\x93\xe6I\xd6\xac\x19\x16\xf5B\xbd\x7f\xbfj\xa8\xceQ\xb1iV\xb3\x05\"\xada\xb03\xab<\xae\x8b\x92.\xbbM\xb6F\xb8\xa9\x0b\xaa\x8d@\xb0>\x91O-&\xbbX\xaaV\xe0\xee\xb6\xaaj\\k\xe3U\xd1/\xcd\xdaem\xa4\x04X\xb5\xc2a\xa0! \x19\xc0N\x05\x08G\x04\x08F\x03\xb0\x92\x00LV)O\n@(\x02\xc00\xfc? \xfc\x0f\x0b\xfd[\x81\xff\xb0\xb0\xbf\x05\xf4\x9f \xf9k\xcd]\x1b\x00\xff\xb0p\xffL\xb0?0\xd4?\x03\xe8\x0f\x0d\xf3\x07\x03\xf9\xc3B\xfc\xc1\x00~7\xbc\x1f\x0c\xdc\xb7A\xfbs\x80}#\x90o\xb0\xa6\xe9\xeb\xcd<\x10\xdf\x00\xdaO\x84\xec\x0d\x06\x14\xebFi5\x9e\x0c\xef\xa0\x13\x81\xfa\x0e\x987\xb5\xef7\xee\xbc\x03C\xf4:@\x1f\x00\x9e\x0f\n\xce\xab\x9b\xe1L`\x9e7\xb4,q\x0e\x14?\x88E[`x'\x08\xaf\xe3~\xfe\x00\xbc\xfe\xed\xcf\xa6\xbaN\x82\xde}*\xeb\x82\xdd\xedusB\xee#\x00\xf7>\xbe2\x13l\x1f\x84\xda\xed@\xfb\x10\xccnl\x05_\x88\xdd\x05\xb0\xab\xf0\xfa\x0cp\xdd\x03Z\x1f\x0f\xac\x1b`m\x17\xa8\x1e\x08R7\xe4\xdc\x1b)A\xc1\xf4\xc0PzP =$\x8cn\x05\xd1UdR\x05\xd0\xc3\xc0\xe7\xc1\xc0\xf3\xb0\xd0\xb9\x1fp\xee\x84\xcd=As\x1f\xc8\\\x03\xcc\xf5\xdc|\xc1\xd3a\xb0\xdc\x13*\xf7\x00\xca{E\x0e \x92\x07\x86\xc8\xc3\x01\xe4\xe1\xe0\xf1\xe9\xbd\xeb\x84\xc6]\xc08,\xdff\x1d\xf6\"\xc32\x98!\xa3y\xf8\xb6hj\x84\xd1>\xc3y\xde\x19[Yo2Cr*\xc2;qY,Z\xd7\xc2\x0eg\xfc?\x0d)\x0f'`\x88\xa7\xf9\n\x90\xcf\x1b\xe2\x08e<\xbd\x136n0\xb3\xf4b:\xc9\xf6SZs\xf4\x05w\xe8\xc1@C\xda*'r)\xc5\xdfl~\x08\x84\x85}\xf5R\xfa\x8cK\xbb\xbc8\x15\x03\x086\x1ag\xb3\xc2\xfd&\xf5at\xa3\xf2`m\x03\xad\xdaG\x19\x8d \xd6w\x80-s#\xb0\xb9D\xf6\x96\xe0\xad >pT\xf5\x14\x0e\xe3\x93F\xd0\xbeE\xd4\xb4\x8a\xb1\xceN\xc5B\xc1\xb2h\x87<}\xb6P\x1a\xc8\xcbJ\xdc\x07\xe5\xd0t\x0b\xf1\x1c\x80N\x11e\x82\xebPh\xc8\x0e\x19a;4\x1f\xbaS\xa4\xe1\xac*4\xf8\x0e\x05\x80\xf0\x14q\x1a\xa0\x87\xe6\x83z\x8a4\xdesj&!\xc1=d\x03\xf8\xd0(\x90\x0fi@\x1f\xf21\xe9\xe8\x80\x1fr\x8e\xfb\x80\xc0\x1f\x1a\x02\xff\xd0(\x00\x10\xcd\x03\x01\x91a/C>-\xd8\xdf\xd3\xd0 (\x88\xe6\x02\x83\xc8\x13\x1cD\x1a@\x88\x86\xeab\xbb_m\x1eX\xa8\x08\x9b\x8b\x18j\x8b\x89\xf4\x83\x03CD\xb6\x1d\x02\x0d0\xd5lx\"\x1ajI\xe4\x9c=(,\xb6\x88\x1c\xae\xc6!1F\x14\x12gD\xc3\x0e\xc7\xb3\xf0F\x14\x10sDN\xdc\x11M\xc5\x1e\xd1\x1c\xfc\xd1\xd4b\x87\xbd\xb8G\xce\xec|<\x03\x874\xc8\x82\xb5\xcb\xea\x80<\x0f\x8f4\x88k\xf6V'\xe4\xd0\xb8$\x9a\x8fM\xa2\xf0\xf8$\x9a\x87Q\xa2y8\xa5y\x8a\x1a\x0b\x19\x0c\xbdD\xc1\x11L\x14\x12\xc5D^H&\n\x89f\xa2Ag\xe5y\xa8\xa6i\x8e\x1b\x1d\x96=\xb1N4\x1b\xef4\x084\xb9-OFA\x91\x8dJ\xee\xd8\xe2\x07\xdc\x97}\xf6\xff\x89\xc8\xa8i\xd9\xb3:1\xbb\xca1\x0f%U\x841\xcc\xd4\xe8\xca\x1c\x04-E\xa1\x11Sdth\x9e\x8d\x9c*\xd2j\x83S\xf3<,\x15\xb9 F4\xe4\xda\xec\x81\xab\"\xeb\x85\xfe\xfe\xf8\xaa]\x86f_\x9f\x85\xb5\xa2\x11\x8d\xe1\xc2\\\x91\xb3\xdeN\xec\x15\x8d\xc3_\x91\xd1Ao&\x0e\x8b\\X,r8>\xbb\\\x9f\x07Z\xc9\x17\x9bE\x1e\xf8,2\xba@\xcf\xc2i\x91\x1fV\x8b&\xe1\xb5\xc8\xda0N\xdc\x16\x85\xc3n\x91\xbd\x14\xdaH\x0b\x8a\xe3\xa2\x99X\xae\"\xca\xe4$\x1d\x18\xddE\x81\x11^4\xec*mr\x966\xb9K\x87B|QH\xd4\x17\x05G~\x917\xfa\x8b|\x10`\xe4\x8f\x02#O$\x18\x99\xdd\xa7\xcd\x0e\xb5\xfe\xb8\xa1\xcb\x85\xda\x1b\x19F~\xe802U#$J\x8c\xe6\"\xc5\x8a,\x83kuH\xec\x18\x05\xc5\x8f\xd1\xec\xf1\xe0\xc4\x91\x91\x07\x96\x8c\x1cx\xb2\x0d\xa1\xf3\x81A\xa5\xcf\xb8\xb4\xd10h\xcfI\xaf\x1a\x0d\x0f\x82'\xdf\x8a\x9f\xcc\x1f\xd9;Y\xc7\x06\x07\x0f\x82>^\x92\x904_I\xa7l\x8b\xdf$\xffn\x9c\xf7$\xa4!\\\"\x80'%$\xab?\xa5\xa1\x0c\xfdk\xb4\xfa\xfd\x8c\xfa\x17\xb0A!\xc0\x1e\xc3!=\x92\x96]i$AB\x82\x93\x19`\x1e\x98\x83\xb3B\xfe\xfce\xff\xfbo\xba\xf9\xd1N\x0c\xf1\xdbX'S&\xff\x9ac\x1a\xa7\xa2\x8eW5\xae\xc9\xe8\xf9\xd3A#B\x8e\xd9\xc3\xca\xed\xfa\xdc\x0e;3\xdf\xe0\xf7C\xbe\xec\x1e5\xf2ox\xb3\x1cS\x07\xb4-\x8c\x9b\xfa\xee\xefm\xfb~_\xe2\x11\xb1\x130\x90 \xfe\xce\xd6h\xb5\xd9\xbc(\x07utL\x9b\x0f\x18E\xc74?`\x08\x0c\xdaZ\x1bE\xc7\xb41\x00\xd0L\xf0'0\xf03\x03\xf4\x99\x01\xf8\x18\x16\x8c\x80\xd0NXX'\x18\xa4\xe3\x86s\x82A9\xd11-:\xa6\x8d\x80\\\xa2c\x1aohY\xe2\x1c0\xc5\xc7W+:\xa6I):\xa6\xa1\xe8\x98\x16\x1d\xd3\xa2cZ(\x98\"\x18D\x11\x16\x9e\xf0\x83&\x9c\xb0\x84'$\xe1\x03GD\xc7\xb4N\xd6,\xb8!:\xa6y9\xa61\xbb@Z\x1a-^\x16C\xa1\xeeI`b\x95\xd3\x17:\xaf\x88m\x89\xf3Z\xf82\xec\xd3\x92;\xb2\xf1\xce\xdb\x97M\xce|L6(o\xb2\x8c\x85ZU5L&An\xbeuA\xaa\xfci\x0d\xe7S\x0c\xf9uuA\xcf\xe0x\x93\x14\xf9\x9a[\x01h\xe7\xde\xf4L|\xbdN\xdd\xe1\x03w\xb5\xa9\x0b\x94\xe6\x9c\xaaN\xba\xe2\xc3\x16i\xb6\xad3;#sb\xa9\xd0\x9e\x94\xbb\xb4\x02\xdbv] \xf2@\x92\xa6=\xb5Pi|\xbf\x12~7l\x95\x93JNk2l\xd0<\xd1\xed\x94\xb5\xdb\xba\xc9*A\xca\xc1^\x86w\x1c\x01d\xa3\x954ZI\xa3\x954ZI\xa3\x954ZI\xa3\x954ZI\xa3\x954ZI\xa3\x95\x14E+)O\xd1J\x1a\xad\xa4\xd1J\x1a\xad\xa4J\x8aV\xd26E+\xe9\xffeVR\xd5B\xaa\x9b\xf1\xe0\x86\xac5\x8b\x9a\xc1\x8d\xa5\xf5\x1d\xba-\x80\x01+\x02E\x91V\xff\xe3\x96:.\x8f\x8e\x12n\xdfk7L\xb8l\x03\xe2\x87\xe4L\x91\xac\xd2\n\x1a\x85\xbd\xff\xb7\x86\x94\x07\xf8\xdbfmd,\xcc\xef!'\xf6\xcfxV7+\xd5#\x93\xb95\xcb\xa6,\xc5pN\xd2\xac\x9c\x8e\xf7-\x16O\xf9+C\xb8\x91\xa1\x80#6\x1bh\xf7\xcc\xea\x91\xec:\xcdA\nh\x15\x854\x1cz$\xa4\x85\x14R0;)\xa4\xc1\x00$\xb3l\xa6\x90BYN!\xb9\xc3\x90L\xb4\xa2B\x9alK5\xb7\x9d;\x18\xc9\x0c\xbb\xaaQ\x9a3 \xc9<\x1b\xabQ\xe0`P\x92i\xf6V\xa3\xa0\xc1P%\xb3-\xb1B\x88\x87=\xd6\xf8\xa5\xb7\x8d\x16\xd2\x0cK-\xa4\x19\xf6Z\xdbD\xb7\x145\x98%\x17RX{.\xa4`V]Hn\xdb.\xa4`\x16^HCAM\xe6Y{\xcdk\x85%\xb0\x89\xa7\x1d\x18\xd2Tk\xb0Q\x98\xcdB\x0ci\xa2\x9d\x18\x92%\xc4\x89S\xa5\x18\x0cs\xe2\xa7qL\xb4\"\x9b\x17\xd3\x81`'\xee\xd2\xcc\xb3+k\xe2\x86B\x9e\x04\xb11C\x9agi\xd6\xc41\x8d\xc6\xa8<\xcc\xb4:\xeb9\x19\x83\x9f\xcc\xb3ECr\xc6\xfc\x18\x0c\x81\xe2a\x9d\x86d\x89\xa40\xc2R\x0d\xc9&\xc7\xe0^>\xcbv\x0d\xc9\xbfq\\vlH\xaeVp\xda\xb4!\x8d\xb0lC29\xdf\xcf\xb4rCr\x86Gq\x05Hq\x87H\x19l5_\x1b8$\x97%\x1c\x92)T\xca,\xab8$\x0f\xdb8\xa4\xf1\x16rH\xb6frZ\xcb!\x05\xb2\x99C\xb2\x96\xc50\x12gY\xd15i\x86`*\xf3l\xebz\x0e\xc6\x80*3-\xeez\x91\xf5\x10+a\xed\xf0\x90\x06\xc3\xac\x98\x03\xad\x98C\xad\x84\xb2\xcfC\nf\xa5\x87\x14\xd6V\x0f\xc9\xcfb\x0f\xc9i\xb7\x87\xe4i\xbd\xef\xbd\xec\x0c\xbcb \xbdb\x0b\xb6\xe1o\xf7u\x87_\xf1\xb6\xed\xf3\x97\xdd\x16~H\x86\n\x85\xb4\xf6C\x9ae\xf3\xd7\xa4\x19C\xb1\x84D\x02\xa4l\x82\xe0\x01\x90\xe6\x8e\x11'6\xc0\xc5y\x04e\xe9p\x02H&\xb4\x00\xd2\xc09l(R\xbb9n\xf7l\x14\xa1'\x8d[\xc5\x8dX\x02\xa4q\x88\x02\xa4\xdea\x0d\xc0\x80~\xc4\x0f\xfe\x1b\xe4\xb8\x16\xa3\x88\x17F\xec\xd4{\xbcMs\xa5A\xfb\x17H\xb4/\x80\x8d\x8d\xb0s\x9f\xf4\xab\x88v#\x82Nt:@\xedO\\\xce\xc9C\xbd\xfaL\x0eA\xf9XZ\xe0x\x91\x8b\x88\x93A\xff\xcb\x0dD\xb8\xaa\xa0\x8d.\xf0\x96\\\x92\xbf5\xa4\xaa\x17\xf0\\\x11\xc2\xfa\x82}N\xc5\xd1\x96 hWT5\"\xcc\xfc\xc2\xec5\xecV\x87n\x9d\xd8\xd7\x07\x94n\xd4\x01{GJ\xc2\xecny\x81vEI\x84\x9dMV\xa2\xea\xa2\xc6\xbel\xee\x81p7\xb6\xe8\xf4L\xf7\x89p\"eZF\x88.Bt\x11\xa2\x8b\x10\x9d\x96\xea\x08\xd1E\x88\xce\xf8r\x84\xe8\"D\xa7\xa7\x08\xd1E\x88\x0eE\x88N\x15\x14!:-\xf9\xa3P\x11\xa23\xbd\x12!\xba\x08\xd1E\x88NM\x11\xa2\x8b\x10]\x84\xe8\xda\x14!\xba\x08\xd1E\x88.Bt\xbf\x12\x88\x0e.6\xef\n\x00R\"D\x17!\xba\xdf\x12DW\xce\x83\xe8\xca)\x10\xdd\xaf\x13\x9b\x8b\xd8Y\xc4\xce\"v\x16\xb1\xb3\x88\x9dE\xec,bg\x11;\x8b\xd8\x99!E\xec,bg\xbd\x14\xb13\x9e\"v\x16\xb1\xb3\x88\x9dy\xe5\x1c\xb1\xb3\x88\x9d\xb5)bg\x11;S\x92/.\x12\xb1\xb3\x88\x9d\xb9\xc6\xc8o ;C\x03\xc8\xc2\xbc\xabDta=9z\xd3O\xb9VD\x1f[\xf6kF y^6\x02i\x08\x8a\xf2\xbex\x04R\xed\x7f\xfd\x88!\xef^\xad\x861B:\xfa\x05Zy{\x88Xa\xc4\n\xa5\xdf\x7fkX\xa1\x1fH\xc8\xe1\xc1\x93\xfe$\xb9\xbc8\xe5\xf24\x94pC\x08\x9b\x17\x13o+\xd7\\\xea\x8c}d\xb7&\xf1\xefE\x9d8\xf1@(|ME\xf8\x0cf\xbbj\x0evi\x9c'\xc2\xee\x93\x96\x92\xacM\x93\xaf\xdb!\xa4\xf9\xeeM*\x18\x19*\xd8-\xa1\xa5\x12\x8b\x8dR:I\x14\xcea\xbd\xa6\x1f=\xad\xfa\xc5l?\xb1\xacAO;\x99 \xce\x99\xed/?\xd0R\xdc\xe2*M\x8e\xe8r\x9b\x16k\xfa?a\xb2\xdf\x10\xd2I]tD/\xa6^\ny\x00\xf1:\x82\x84=\x84x\x1cC\x82\x1fD\xa2\x17\x13\xa4Q\x07\x97\xd9G\x97\xd0\x87\x97\xe8\xc5$'\xbfcL\xe0\x83L\xf4b\x8a^L3\xbc\x98\xc2\x1er\x90\x15w\xe0\x1b\x1a[\x0cn \xc9QZUM\x0cP\x81\"\xe9\xec\xb7M:\x1b8K\x0f\x9e\xe2e\x19/\x0dBz\xc1*D\xe9\xafRz\x18\xe3\x87\xfb\x17\xd5\xfa3\xfa\xdd\xe2\x0f\xdf\xf9\x1f\xf7\xe3)?\x9e\xf2\xe3)?\x9e\xf2\xe3)?\x9e\xf2\xe3)?\x9e\xf2\xe3)?\x9e\xf2\xe3)?\x9e\xf2\x03\x9e\xf2\xdb\xa5\x86\xfe\xf94:\x99\xc5\xf3\xbe\xf4\xcd?\xd4y\xdf\xeb\x98\xaf\x1d\xf0\x87\xd0\xfa|\xd3\x9d\xdcO3\\U\xde\xe7\xf4t\xad\x9e\xcf\x95\x9e15}\xban\xe7\x12;\\\xb2#Nw\xc0i\x17\x9c\x8f\xef\x96\x88\x85M\xa1\xcb(w\xf3\xae\xd2]\x9a\xe1\xb2?.\x85fJ\x95d\xf9\xe8zvy\xfa?\xbf}\xc5_\xa4\x9b\xec\x84\xc2\xb23\x80\\\xdc\xbbf\x87\xf3\x17%\xc1k60\xe4c\x87^`y0\x7f\xe2J+\xff\xa9:\xecn\x8b\xcc\xafD\xf0.S\x14s\x84ooKr\x9f\xb2\xd8D,w\xda\xe5\xf9\xa6V\xb3V3\x94\x07\x97W\xae\xd2\x07,kt[\xa6d\xd3\xfb\xb9\xd8\xf8\xe4\xdc\x94\xa9_\x8e\xbd\x96o\xca\xb4\x1d\xcd,\x03:p\xf1\x1a\xd7Xl#\xc5fC\x95\xa14g\x0b\x0e=\x18@G\xc1v\x8e\xe9\xd7\x92<6\xb2\x99zB\xfb\xe9\xe6-\xae\xf1\x0d\xc2u]\xa6\xb7MMU3\xbd\xd4\xab;\\\xdd\xf9\x15]\xbc\x0d-\xc5\xfe'\xc2b\x14I\xc3\xce\xbf\xfb\"\x15\xb1\x91\x9b2\xd5\xfb\x07\xd7X\xcd\xcbk\xf70\xdb&\xac\x0be\xf4\x07\x8c\xfe\x80\xd3m\np\x8e\xd1\xda(\xfa\x03\x8e\xa1(\xcf\xb4\nx\xd9\x03\xfc\xcf\xfe3N\xfd3\xce\xfb\xc6\x03g\xb0S}\xd8\xf3|\xb0\x93\xbc\xfb\x0c\x1f\xec\xf4\x1e\xfd\x01\xff\xe1\xfc\x01\x87\xf3\x9e\x17\xf3\x13b|J\xe2\xf4h\x9f\x01\xe2|\xce\x8b\xf0\xa9\x8cru3\x9c\x19\xd5\x937\xb4,qN\xfc\xce\xc1\xe0\x94\x96\x98\x9d\xceh\x9dz\xe0>\xff\x08\x9d\xfa\xb7?\x9b\xea:)\x1e\xa7Oe]18\xedus\xc6\xdd\x1c\x11q\xb3\x1f\x9clf\x94\xcd\xc1\xf8\x9a\xf6\xc8\x9aC15\x8d\xad\xe0\x1bG\xd3\x15AS\x8d\x9d9#j\xa6G\xbc\xcc\xf1\x912\x0dq)]\xd11\x03\xc5\xc54\xe4\xdc\x1b)\xb3\xa2`\"%\xea\xe5\x9cx\x97\x86\xf8\x96\xb3\"[\xaa\x91,C\xc6\xb0\xb4F\xafTC\xfa\xa9\x11+\xc3\xc4\xaa\x0c\x16\xa52l|J\xbf\xc8\x94\xce\x98\x94\xfc\x94\xec\x8aF\xc9_\x1b\x8cC\xa9\x05l\xd4s\xf3\x8d(8\x1cu\xd23\xde\xa4G\xa4\xc9^\x91CF\x97\x9c\x15WR\x8f#\x19.\x82d\xb8\xd8\x91\xd3{\xd7\x19/\xd2\x15)\xb2[\xbe\x85\x8d\x11\xd7\xb8%\x1d\xed\xf7\x9d\xf6\xde\xda\xfaT\xdb\xaab7\xeb\xe9\xc3`\xe2\x93\xad\xb5`8\xe42\xf2M\xddj\xd3\x06\xd3\xf7\xc7wKo\xc37\x93\xbb\x9ad\xfe\x16\x9f\xd2\xe3}\x91\x80\x1d\x97-:\xbc\x9a\xb2\x91\xbb5\x96(\xa6mI\\\xcf\xc8\xed[\xa0t\x0dv\xca!\xdb;\xff\xc6\xdbx+\xdbkioY\xad\xb5\x9d\xe0\xc7\xb4\xafr\x01\xd1\xaa\x1a\xad\xaa\xd1\xaa\x1a\xad\xaa\xd1\xaa\x1a\xad\xaa\xd1\xaa\x1a\xad\xaa\"\xd5\xd1\xaa\x1a\xad\xaa\x0bd;6\x18\xa8\xdd\xbc\xa2\xa6\xbc}x\xd1\xfc\x13\xc9\xd9y\xa0n\xcc\xaa<\xbafIG\xa46~a\xfe\n)F\\4t\x94\xb2\xf1\xdag\x10\xac\x15InKt\xdf\xfe\x8c4\xa25\x9aR\x81p\xa4k\xa4\x13\xaf\x91\x81|\x8d\x19\xa20\xc8r\xba\x8f\xcf\x81*\x0c\xe2b\xac\xeay\xf0\x05\x9a\x07a\x98\xa7\xa8\xb1\x90\xc1\x80\x0d\x14\x1c\xdc@!\x01\x0e\xe4\x05r\xa0\x90@\x07\x8a\xb1\xaaM\xd9L\x04H\xd0?j\xacj\xe4,\xc7<\x00E\x11\xc6\xe0\x14\x03\x88\x82\xc2\x00)(4\x98\x82\x0c\x80\n\x9a\x0f\xaa(\xd2j\x0dbA3a\x16\xe4B\x1f\x90\x1dnA>\x90\x0b\xb2\xdeB\xef\x0f\xbd\xd8eh\xa6\xb7Y0\x0c\x1a\xd1\x18.8\x069\xeb\xed\x84e\xd08h\x06\x19o\xe4\x9e \xd1 \x17L\x83\x06\xa1\x1a\xe4\x80k\xd0P+\xf9\xc26\xc8\x03\xbaA\x06\xf8\x06\xcd\x83p\x90\x1f\x8c\x83&A9\xc8\xda0NH\x07\x85\x83u\x90\xbd\x14\xdaH\x0b\n\xf1\xa0\x990\x8f\"J\x07}Ph\xe0\x07\x05\x06\x7f\xd0\x10\x00\x84\x0c \x102\x00A(\x18\x18\x84B\x02B(8(\x84\xbc\x81!\xe4\x03\x0e!\x7f\x80\x08y\x82D\xc8\xb8:[\xaf\xf6\xf7\x85\x14\x86\x01#\xe4\x0f\x1a!?\xe0\x08\x99\xaa\x11\x12@BsA$E\x96\x06)\xa1\xa0\xb0\x12\n\n-\xa1\xd9\xe3\xc1 1!\x0f\x98 \xf5\xa0&\xa4\xc3M\xf5T\x12?\x9aA\xe4\xefcA=\xac\xc6\x07 \x82\x9c\xfcq\xa0 \xc1l\x13\xf8N\xc5\x82\xc2F\xb2UA\xa3\xc1\x83\xa5\xcd\xa2\x1f\x12:\x9a\x06\x1e\x99\xe0\xa3\x89U \x0b\"\x19a$3\x90\xe4S\xde``\xd2\x00\x9c\xe4S\x0eC\xbbMF\x99\xfcZL\xc3\x9d&\x16s:\xfa\xa4\x0f\xd46\\\xd0$\xfc\xc9\x86@\xf9T,\x0c\ne\xc2\xa1\x06\x90\xa8\x18\xeax:.\x15\x18\x99\x8a\xa1\x8e{)$J\xe5\x85S\x85E\xaa<\xb0\xaa\xe0hU\x0cu\x0ci\x14\xba5\x1b\xdf\n\x8dp\xc5P\xc7r\xf2\xc3\xba\x02\xa3]1\xd4q\x0cu\xec@\xc1\x86q0wi\x82ba\xc3hX0\xef+\xf4\x85\xb5u_\x95I\x8a\x12^d\xebU 5i\x97\n\xba<2\x1b\x89\\\xcd^\xdd\xc4\x9bW\xc5\xae+\x94q\xb5(\xc9\x9e\xb0c\xee\x1b\\\xb6-k\xdb\xd7zud\x83K\xdd\xd5`\x11\xd0\x80\xf2q\x97\xc9\xf0O\xfc\xc0\xf2\x8f\xef\x96\xa3\x81\xf2|\xa3y\x82z\xad\x04z0>44\xe8m#{v`>E\x9e \xdf\x1e[\xc8\x11\x81\xfa\xd0\x14\xa7\xbe\xb1A\xfb\xd0\xd7\xf3\xb7\x93\x84D/\xbb6\x85E3\x83b\x99\xd1\xcb.(~Y\xbb\xd1\xcb\x90\xd8\xa5\x13\xb9\x0c\x8c[F/\xbb\xf9(dX\x0c2z\xd9\xf9\"\x8fAq\xc7\xe8e\xa7\xa5\x19Hc\xf4\xb2\x9b\x8f,F/\xbb\xe8e\xe7!#z\xd9\xf5S\xf4\xb2\x8b^v(,&\x18\xbd\xec\xa2\x97\x1d\xa4\xa0\xd8^xd\xcf\x1f\xd7\xf3B\xf5F`z\xbe\x88^\xf4\xb2\xf3\xc3\xf0B\"x\xd1\xcb\xce \xcc\x03\xb5\x1b\xf4\xb2\x1b\x17\xd4\x11y\x06v\xec\xa3\x03\x92\xf5\xde\x07\x19\xa02}Q\x81\xf1\xfes\xf9\xa6~d\xe793\x80\xe0\xe3\xbfc8\x10N\x86\x114I\xc3\x8erS\x8a;\x12N\x98\xe8\xad5\x05T\xf8\xaaNT=1\xd1u*\xbaN\x99\x05\x84\x04\x1d|`\x87\x19\xc0CX\xe8\xc1\x0b|\x08\x0b?x\x00\x10\xc1!\x88\xe8:\x05i\x14d1\x1b\xb4\x08\x0d[D\xd7)9\xf9\x01\x18\x81!\x8c\xe8:\x15]\xa7\xa2\xebTt\x9dr\xc3\x1d\x1e6\xfe\xe8:\xe5\xd38>\x10\x88\xbb\x15\xbc`\x90\xd1@Ht\x9d\xe2\xc9\x07\x18\x89\xaeS\xf3a\x92\xe8:5\x1aB\xd1\x8b\x1c]\xa7B\xc1+\x8f\x01\xb0\x8c\x81X\xf5\x82/\x8c\x15\xdb\x96E\xb3_\xdc\xbfZ|O\xffs\x9eo\n\xef\xba\xc8\xa8\xabo=\x90:\x0b\x01\x86\xad\xbb\x00\xab\xe7o\xc5\xc6\x01E\x13\x0d\xb7\xde\xa5\xda\x06\xa0\xe4\xd7\x13\xcc>\x10\xb2q\xc2\xd6\x11\x19FnsxZ\xc1\xbb\"'\x01\xd1\x8e\xc9\xac\x85u\xd9^x\x90\x0cr\xed\x93\xba@\xb8\xaeqr\x07\x9b\x81VAn\xe2\x9e\xd6\xa4\xa6U\x98\x0bdk\"\xdf\x81\xea\x92\x9e\xf5$\x1b;n\x9b`G\xd7\xba\xb2\xbaK\xf74\xcb&\xa9\x9bR^\xd2\xa8\x06&\xafQ_\x00\xe3+ \xfe\x8c\xc8CZ\xd5t\xa5\xa3C\xa4\xa8pV-\xd0Ow$'\xf7\xa4d\xad\xc1e\xa3/\x84Y\x86S\x19\x18\x82\xc2\xac\x8fd\xe1\x85\xfc\x19kR\xb6\x08\x17t\x89\xdb\x15\xf7\xb4.wi%W0\xcd\x93\x92\x99\x92\xa9\x1e\x98\xaf\xd9\x06)KL0=\x14\xb6\xe5k1\x14TdkR\nI|\\\xa4\x15\xb4\nm\xa0\x0dN\x85\xce\xc2\xf6\xa0\x15\xd4a\xcc\xd8\x90\xbf\x13\xe3\xb1jv\xbd1(\x9a\xe8)o\xa3v\xa7NJ\xb6\xbe\xaf\xb0+K10\xd6\xb8&/\xeatg\xd9\xf4:y\xc0\x10\xa0oV5\xde \xdd\xed@\xfb\xf1\xcb\x1d\xc9\xc5\xd0`\xbb,\xff\n\n\xd5\x93\xd7\xae\x1a\x9dz\x0e5\xbcK\xb7w/2rO2T\xe4/\x18\xc5\x01\xa59\x94\x92v\x1a]\xa0p7\x03\x8c\xab\xd1\x07\xd6(\xde\xeb\x11\xfbx\x15dU\x12\xa2\xfc\xd6\xa6\x9dTNMT7\x8a\xe9w\xfc/\xba\",\x94bzi\xb3|\x01\xf3\xd4\xdb\x94\x05\x11\xd6\xbe^I\xe8\xe2\xd7_\x1be\x1dQ\x1d\xec\xfe\x99i\xfa`\x7f\xfc\xb7\x99\xdf\x17l\xe5\xe0O\xd99\xaf\xe3\x0fl\xd9\xb0\x03W\x91\xa1\xd3\xf2\xe3\x1d9\x19G\x9e\\#\x1f\x96\x91F\xc7\xd1s\xf3\xe5\x8b\x0cs\x8a<\xd9D\x1e<\xa2^\x91Cr\x87f\xb1\x86t\x96P8~P8f\xd0\xf4\xdeu\xb2\x81\\< \xb1|\xff\xf2\x88\x14\xd8\xdb\x1c\xc0T\xab_+v\xc1\x198\x15\x17\xd8\xd9>U;\xf8H\xbcj\xbe\xf9\xdb\x85\xe1\x8c\x07+\xe7\xc24\x1d0\xf3H&\xe9a0F\x07b\xe6\x0c\xcd\xa0\xe0KK7\xd2\x01\x18\xdc\x03\x81\xc56\xa6v\xaa\x98\xb2y\x91\xbf\xf8;)\x0b\xde\x1bGR\xdb\xe4\xeb\xae\xccmqM#\xf5\x82\xdb\xb2\xbd\xc7j\x10\xecDCM\xd2\xb5\xd8\xdaU\xe3:\xc0,0\xd5V\x13&\x8a\xe9\xfb\x91\xa0\xd1#\x0d`\x03\xa6\xa2V\x1e\xfe&\xe5\xb4P\x0fC\xe5k%3{\x9f\xa11H\xd5\xef\x11R\xb6\x8bI\xd5\xdc\xee\xd2zE\xc7\x95\xe7XpL/I\xa0{\x86\x896\x02\xd6\x1f\xfb\xb2]\xf8\xc5p \x87C\xf5\xb8\x81=\xe1\x00A\xc1@\x12?\xf5q\xb9\xba+++gU)7\x023\xa4\x04\xb4\xd1\xb4B\x8c?Hw\x19i\xd7\xc1\x19\xda7%m~8\x1a\x18gE\xb8\xda\xfe\x9b^\xdb~\x1e\xceJ\xf3-\x19\xab\x11F\xb4V\x90\x9e\xff\x04\x1d+`4!#\xadZN\x90\x81Y\x846e\xc1,\xcb\xf7i\xd1\xc8X\x06|-\xcboI=\\\xe7K\n:\xcer\xb0\xec\xb5QHnN\xde|\xba\\\x9e\xbd\xbdAU\x8d\xeb\xa6Z|\x13\xa4\xa7@\xd8\xb1G{\xc3\x9b&\xb5\x04\x81Z\xb2/*P0\xf9\xf9.K7\x04%\x87$3`w\xedJ\x82\xce\xf3\xb4Nq\xd6\xf1b\xaf\xd49c\x190$ov\xf2\xa2\xf2\x02]\\~\xba\xf8tu\xf2~u\xb5\xddU0\x9a ?\xbf\xc5@\xd7\xc1\xd8/\x84\x99y%\x8c&\x8dn\x8d\xa6Ka\xc2]\x0b3t1\x8c\xff\xc8\x9b}9\xcc\xd7\xe0\xf8\x8c\xdfE\xb4Kb\x0cRM\xcc\x9d\x10\xdb\x05R'\xa6\x0es+\xbc\x1c92E\x0d\xf7n\xc6\xe8\x14\x91z\xd3K\xbf9\xea\x8dGX\n\xed\x1510\xb90/\xb5\x08\xaet\x88zQ\xd4\x8b\xa2^\x14\xf5\"\x14\xf5\xa2\xff\x0b\xf4\"\xb9\xf9\xa3z\x14\xd5\xa3_\xbbz4\xa0\xb0\x98\xd5\xa2\xf6F8\x7f\x03Q\xd4\x80\xa2\x06\x145\xa0\xa8\x01\xa1\xa8\x01\xfd65\xa0\xa77\xb0\"\x03o4\xcbd=\x88gK5\x94\xaa\xc65Y<\xe52\xa2\xd6\x13\xb5\x9e_\xab\xd6\xf3\xff\x1b\x8cBCj\x8f\xaa\xee\xf0\xaf\xaf\xd2k\xbd\xcc@9\x85\xb1*~\xea\xbb\x00\xd6mmL5\xa9\xe8\x17\x1a\x15\x919O\x01\x15*\xad\x10\xdb)\xa82 )\x078C\xfb\xa6\xa4\x9d\n\x9c5\xeb\xbc\xfc\xaa\x8d\xd2\xcf\xd3\xd96\x9c\xac\x81M\xf1^Y\xf7\x0f4\xd1O0R\x84W\x9e\x90\x95V\xad&n\xd0\xea\xd1\xa6,vZf\xe4>-\x9a\x8aKP\xf3i\xd5f\xbe\x9f'\x05\x1d\xc09P\xeb[\xd3\xd2\xcd\xc9\x9bO\x97\xcb\xb3\xb77L\xbfj\xaa\xc0=\nB\x8fG\xf4\x07|a\xd28\x11h\x9c\xfb\xa2Je\xfd-K7\x04%\x87$\xb3\xb8\x02\xb6k\x1d:\xcf\xd3:\xc5Y\xb7\x9b_\x99\xa6\xe4\xc0 #y\xb3S\x97\xbc\x17\xe8\xe2\xf2\xd3\xc5\xa7\xab\x93\xf7\xab\xab\xe5\xc9\xf2\xfaju\xfd\xf1\xea\xe2\xec\xf4\xfc\xdd\xf9\xd9[\xe7\xbbW\xd7o>\x9c/\x97\x1eo\x9e\x9c\x9e\x9e]\xf8\xbcxy\xf6\x1fg\xa7>/\xf2\x9ew\xbe\xf7\xd3\xf9\xf2\x87\xb7\x97'?}Tz\x91q^\x8f=\xab\xbfIs\x9c\xadj\x9ce\x87\x15(ic\x06\x85\xfeu\x9f[Y5;\xb6e\xd0\xd3\x03\x9c\xc8\xc8\x1a\xdd\x175\xa9\xe8`U\x84\xd13\xa4:\xca\xdb\x89\xcb\xc8\xae8\xb9c_s\xe7;\xa6\x15\xa7\x15W\x88q-\xcdn\xf0#\xa2\xa3^\x93X\xec\x9b\x8c9Dp\xca--|\x9ao\x8f\xa8\x80\xfb\x02\xa67)\xd3b\x8dH\xce\x0e\xd5\xf6\x05\x97<\x90\xa4\xa1%\xd1\x0e\xe9\x8c\xfb\xc7\x0e\xfbwx\xbf'y\x05TO\xd3x\x1e\xe5\xe3{ \xd5\x8am\xc9\xea\x83\xc1#\xac\xd2\x8d\xad\x10\xa1\x13\xb5]\xc3\xcf\xd3\x07RA/-\x14A\xf8\xb6\xa2\x9d;\xbf\x08=A\xb6b\xf0\x97\x14-\x83\xa6\xbc\x98_\x04!\xc3\x96{^\x98\xdb /Vt\x95^\xdd\x93:L)\x14i\xb6\xf2\xd07\xe4\xb2\xc0X]\xc1X]\x91|\xac\xee>E\xe7\xd2\xf2\x14\x85\xedt\xaf[\xe6\xf4\xc8\xc9\xaf|>\xed\xc0\x81L\x11\xb6.r\xa2mk\xd7yF\xb5r\x8c\xaa&IHUm\x9a,C\x1f\xaa\xed\xd9\x03I\xd8^\x8c\xb3\x8c\xacE.\xcf\xea\x82OB\xa2qs;\x95\xef\xae\xd0\xf9\xffl\xdaS\x81]>B(\xd3.\xd4\x85\xa0z~\xd4.\x15`.\xeb\xcb\xbb%\xac>\x1a\x11\xbd\x06\xd3\xd8\xbeH\xf3\xfaH8\x10\xa0\x1b}\xe1\xbc\xa1\xcfn`\x97\xbd\x81\x8d]\xd5T\xb9\xc2\xa0\xe5\x91$E\xb9N\xf3mv@\xcd~\xadZ\x92\xa0}\x8ar\xc2\xf2\xae|*:\x9b\x15\xbe\x0ds\xd0?\xceuk\xa2:o\xb4]\xfecQ_6y\x98-\xfe\xec?\xcfN\xaf\x97\x9f.W\x97gW\xd7\xef\x97~{\xbd\xfa\xd1\xc7O\xcb\xd5\xe5\xf5G\xff\x0f\xae\xaeOO\xcf\xae\xae\xfc?xwr\xfe\xfe\xfa\xf2L\xe9\x02u\xc3\xf6\xab\x0c'\x81\xcf?\x16\xc6\x1b\x12\x82\x86\x9c\x08\x1ct\"\xde\x90\xd0K!\x03P\xc0h\xad\xe2\x0d \x13\x82Q\x18\x05\xc5\x1b\x12\xe4\x146xE\xbc!AN~a,\x02\x07\xb2\x887$\xc4\x1b\x12\x1c\x01.\xe2\x0d \xe3\x83]h\xe2\xeaxC\x82_\xe8\x0b\xf7\xdd\x00~\xe1/\xe2\x0d ,\x8d\x0c\x87\x11oH\xe0\xc9'SO<\xf5tM\x10\xaf\x8b\xb0\xea\x10\xfcb23\xef\x1f\xc4[a\x98\x95\xe7\xc3\xcb\x1b,\xd9cp\xf3~)O\x06s\x03Y8zv8\xc6\x02\xc8\xf8\x97~.Wo\x80\xad\xe75\xca\xbc\xd8\xf0\x06\x03G(\xd6\x9e\x85\xb77\xc8\xdc\xf3\xaa\x98{\xfa\x18j\x15\x8a\xc17\xc8\xe1\x9b\xcb\xf9\xf2\xe1\xf1=v\x13\x05\xe2\xf3\xf91\xfa\x02r\xfa\x9c\xac\xbe`\xbc\xbe\xf9\xbdl\xe2\xf6\xb9\xfbg\x1e\xbfO_\xc7\xe4\xb5\xd2\x9b\xe178\xfcL\x14\x80q<\xbf1L\xbf\x11\\\xbf\x11l?\x7f\xbe\x9f?\xe3o4\xe7\xcf\xcd\xfas\x0f\x97\xa0\xcc?3\xf7o&\xfbO\x93fb\x03\x86\xe5\x03\x0e1\x02=9\x81\x93I\x19\x03\xcc@'\x84\x12\x88\x1d\xe8\xe4\x07\x8e+\xc8L\x8e\xe0\x10Kp\\A\xa62\x05\xfd\xb8\x82\xa3\xcb2\x91/\xe8d\x0cz\xed\xfdS\xf5\xbe\xa0\xccA\x0bw0${\xd0\xc5\x1f\x9c\xc7 \xd4\xd7\x06~b6q\x08\x03\xb3\x08\xad\xf4\xe3\x1f\xceb \x86\xe6 z\xb2\x10C\xf3\x10\xbd\x98\x88\xd3\xb9\x886q\xa4v\xb1\x11\x03\xf2\x11\x9d\x8c\xc4@\x9c\xc49\xac\xc4\xd1\xbc\xc4\x00\xcc\xc4\xe9\xdcD\xeb\xca\x83\xec\xec\xc4\xe0\xfc\xc4\xc7a(\x06\xe7(\xfa\xb3\x14\x83\xf3\x14]L\xc5)\\E\x8b\xa0\x96\xc18\xc0V\x1c\xc5W\x0c\xccXtq\x16g\xb2\x16\x07x\x8b\x1e\xea\x89\x83\xbb\xe8\xab\xbf\x84\xe4/\xba\x18\x8c>e\n\xccbt\xf1\x18\x032\x19\x83s\x19\x87\xd8\x8c\xb3\xf8\x8c\x06i\xb4$\xb5\x85\xd1\x18\x82\xd3\xe8E\xdcs\xf0\x1a\xbd\x99\x8d\x03d\xa7\xd1\xec\xc6!YF\x16G\x00\x8e\xe3\xb8\xc6\xf2\xe39\xfa\xb4\x89'\xd7q\x02\xdb\xd1\xc6x \xc2x\xf4\xe2<\xbaY\x8f>\xbcGG+\x8e\xe3>\xfa\xb2\x1fm\xfc\xc7\x00\x0c\xc8\x11\x1c\xc8\xe9,\xc8\xa1F\xf3dB\x06\xe6B\x0e\x96\xc88R\xc32\"-\x9c\xc8\xc0\xacH;/243\xd2\xc2\x8d\x9c\xc5\x8e4H\xb3\x1d\xfc\x1c\x8cI\x1bg\xd2\xc6\x9a\x0c\xcb\x9b\x0c\xce\x9c|\x1c\xee\xe48\xf6\xa47\x7fr$\x83r\x0c\x87\xd2\xca\xa2\xb4s\xe4\xfcYr>L\xca\x91\\\xca\x11lJK\xd5f0*GL\x8a\xb0,K+\xcf2<\xd32<\xd72\xc4H\xf2\xe4[\xfa2.U\xce\xa5\xfbL\x15\x92wia^B\x1a*H\xcb\xb5\x14\x81;\xdb;\xd2Z\xa2\xc7I\x17\x97\x96\xae\xb3\xfcy\x82sN\xd7\xea\xc9\xeb\x08^\xfd\x9ecaJ\xfb\x0c\xa0\xba`$\x9e5A\xcd^\xd3!O\xba\n%E^\xa5U\x0d\xd4\x03fm\xf4k\xa6\x9e<\x19\x7f\xea\xe7\x04\xedE7o:M\xe9\xbfU\xb1#\xad\xd9\xb3c\x0e\xe2\xaa*\x92\x94\x1d\xdb\x04\xf5\xa7/H\xa3\x11\x1a\xd8}8\xeb\xd8}\xdd/L\xde6\xbd'\xb9\x91\x1c\x19\x03\xb0\xc6\x00\xac\xbf\xd6\x00\xac\xfd[y\x86\xb9\xd8f\x9aw\xefU.\xcc\x8f\xf9\xbd\xc4YF\x857Y=\x9a\xee\xcd\x10v\xcbt\x02\x1a\x80<\x93JhC:\xfa\xe8\xb3I\xd3\xc7\xc2\xe6\xb1\x0e\x95\x00\x0c\x9e\x01\xee\x8e_\xb63\xf8:f\xa6\x8e_\xb6S\xd89.^\x8ew\xce\xa3\xb98\xba\x7f\x83a`\xf6\xc7\xbe\xf4\x82\xe7X\xff\xb1\xa8\xc9\x9bv~\xd1\xbf\xc6\xdfGE\xdb\xcc2\xe4\x19 \x8f\x17\x91\xfd_\xda\x92\xc4>\xb5b\x08\x0eP\xfe\xcaIS@\x92\xe4\xd99\xbe\xb1F[m\xa1\xef\x05\xd1\xdd\xd9`\"\xf9\xb3\x8ax\x16Dk\xad\x12\xd9=\x1cD+\xf6\xb0:\xd0(\x8e\xedR\xe1\x05\xb9\x17\xca\xa7\x15J\xee\x8a4!\x02\x7f4\xfb*XKm\x0e\xb1\xf5\xe3\xa7\xe5\xd9\xea\xd3\xc5\xf2\xfc\xd3\xc7\xc1\xa8Z\xf2{\x7f>\xd3cb\xc9\xcfO\xde\\-O\xce\xf5@[\xf2;\x1f?9\x1e36\xec\xea\xc7\xb3\xe5'\xa5\x958\xdd\xc5]\xf0\xaf\x1f\xdf\x99\xf6\x93\xdc\x1b\x8f\x1a1Yq\xb5\xa8{d;\xe6a\xd1M`\xba\xa7\xf7)\xd9\x03\x1b\xf7\xc0\xf2\xd2_\xb9\x0c/\x8e\xbaR\x8f~Q\xbd\x99\x1e@\x9d\xad\xfb\xc7\xca\xe2\x13\xd6E\xcb\xbaJy\xb1)\xdd\x9e\x14\x93\xd6*\xe3j5X\xa0\xf9+\x96y\xcd\n\xb6jM\xa2\xf1\xb9\x97\x00\xd3\x9b\xfa\xea\xe5\xb7~9W0\xef5l\xd4*\xf6Ky\xc2\xa9k\xd9W\xf1(\x9b\xb7\xa6\x19\x04\xd2%Fvz\xc1\xf01\x98 \x1c\xa7tpg\x10'ta\x94i\x9d\x1ct\x8d(\x9e\xd1\xe3\x19\xfd\xd7~F\x1f\xdax\xf5\xdd]zi\xc4\xd9\xa4zs\x98~(\x89\x1bz\x9b|\x17\xf8\xb8\xa1;\xde\x88\x1bz\xdc\xd0\x1d\x1b\xfa\xed\x81\xef\xe7\xbd\x89\x12w\xf2\xb8\x93\xff\x16vr\xc7!]\xbc\xe1\xde\xc3%c\xa4\xf7\xaem0f\x1b{a\xa6\x11\xdbb\xc0vg5\xd1p\xad\x1b\xad\xddY\x8d5V\x0f\x19\xaa\xbdr\x9bg\xa0\xee\x9b\x9e{\x91\x01\xf8\x87\xbao\xb7\xee\xa8m\x18F?\xb6\xd6e\x8f\xf1cT\xc9\x8c\xb5\xb7\xcc\xe1y\n\x98\xa2z\xb9\x9b}\xb4\xba\xa5*Z\x01T,c)U\xb5\xcaG\xa1\x1aR\xa5\\J\xd4\x80\xfa\xe4\xa18y\xaaL\xba\xb2\xe4\xee\xa1\xf9\n\x92Q5\x1a\x1c\x93\xba:\x14P\x11\x9a\xa6\x02\x99f\xe5'i,j\xf5\x91\x07\x90k\xf0\xd8\x06\xce\xd0\xa0\xb1\x0c\x18\xc7`\xf1\x1a(f\xd5\xa6\xab1\xab\x1bc\xda\xf3\x89\xc6<)\xa4e\xac\x12\xbc\x94\x9eU\xa7\xa3\xa2X\xdb\xc3Z\xae\x8eG\x93\xa3&\xef\xdc.\xa4L9\xafJ\xbap\xa6$uS\xe6\xba\x83\x97\xd6\xdc\xc7\xea\x0f\x12mG\xec\x9d\xd2\nm\xef\x9bc\xd3\x8fr\xd9\xf9\xd6\xe8!\xf1\xe3\xa7c\xe5o\xa9P|\xefsI\xe8:_\x95\xd5=\xe9Ke\xf0$\xdd\xe1T\xf9\xfb\xb2\xb8'9\xce\x13\xb2\xc0u]\xa6\xb7MM\xe8<8\x11\x7fxoQ9v\xae\x03\xfd\x8d\x95\xee\x0c\"\x17\xf6u\xbb\xdb\xf4\xdd\x89\x06\x97\x94\x9e\xfe> \x9f\xc9l\xd5$\xf1\xf3\x8a\xc9\xf6\xfe\xbeU \x07\n\xa6o0'\xcb\xe5\xe5\xf9\x9b\xeb\xe5\xd9j\xf9\xe7\x8b3\xeb\x1e\xa3\xbev}>\xf8\x9c\xd1\x1e\x07\x9e_-/\xcf?~?\x98\xc3\xe5\xf9\xd0\xe3\xf3\x8f\xcb\xa1\xc7\xef\xde\x7f:\x19|\xe1\xe2\xf2\xd3\xf2\xd3\xd0\x0bo\xfe\xbc\x94\xb6\xd2v\x05\xf3h.\xd3a\xa4\x1d\xb0\xcb\xc3\x9e\xf4\x0e\x9a\xb5\xe4\x02\xc5\xf6\xb5\xaa.J\xe6t \xda\x89\xf8P\x12\xc6z[\x0c\x165\xd8\x9f\xb1\xdby\x91\xd8\xa0\xe1jNO8\xdd\xd0n\x8b&_w\xc7A\xf2\xb0O\x81M\xb9\xa2\x1b\xa3\xe7\x80w\xec\xa1\xcbT8\xee\xd3U\xa9\xcd\x9d\x9d$Y\x86|\xfc\xaaM\xd86\x1f'\xb0\x82{\xf2\x9a\x1ep_\xc2\xd8\xef\xee\xfe\xa7\x9b\x80\x91\xe2\x87\x85\xf3\x17\xd7\xf8|\xd6\x97e;\x03\x1d[\xads\\\x0cM\xa1\xa1\xe93T\xdb\x93\xf5\xda\x17\xd1\xed\x15\xcb\xf2io-\xfdPm_\xca/\xe9\xde~\x03\x05{K2R\x93\xa9e\xb3|\xad\x15OyoB \xdf\xb2\xeb|\x93zRI\xdb\xb1\xe8\x16g)\xba\xf6>\x178\xa6\"W\xa4\xf6gG\xa9-m\xfeX+m\xff\xb5Q\xc5\xbbf7\x03\xb6\x15\xb0\xff]\xd5\xb8n\xfc\xcc\x0f\x1fN.\xfftv\xb9\xbaZ\x9e,\xaf\xcdV\x88\xfe\x1b\x17\x97\x9f.>]Y\x1f\xbf;\xffx\xf2\xfe\xfc\xff\xb5>?9]\x9e\xffxfyxz\xf2\xf1\xf4\xec\xfd{\xeb\xc7o\xe9\xb2\xf4\xe9\xcf\xad\x9d\x81\xebv\xc3U0\x0fa\xb9\x9dz\xfd~\x8f\xcb\xb4h*\xd8\x94\xaaNIh\x97!\x9c\xc3%\xf5\xb2\xad\xc1Z\x82\x81\xc2\xa1\x17\xe8\x9a\xbb\x9b\x9fsws(\x14\x82R\xd9\xa4\x8b\x0ePE\x8b\xdf\xd1\x0bt\x9e\xa7u\n\x17&m\xd2-\xbf\xd8\x8a\xae\xbfi\xb1>B\x0d\xb3hU\xe2N\xf0#>s\xb9\x1a\xc6.\xa4. \x96\xc30Z;Y-C\xfb\x00\xbd@\xa7\xbd\xcc[\x8d\xe0\x08\x95\x04\xaf\xd9\xbd\xe6\"K\x96]\xef|j\x1a3j^\xf0+z\x81\xae@JZ\x89r\x1f\xa1\xb2\xc9x\xac\xc7\x94\xa1E \xb1\xd6\xa5\x1ds\xaa\xfc\xf6\x01\xfd\x04:\xe6\x0eW\xe8\x96\x90\xbcSC\x8e\xd0\x9e\xe4lb\xaeIU\x97\xc5\xc1\x96M;t\xd5l\xda\x07]6\xbcY\xd8\xedp\x0c\xd0!9*I\x82!C\xa1GUp\x1f\xd6\x9a\xd0%\x8e\xe7N\xe0^\x8e\xbc@\x9b\xa6\xa4\x1a^\xbb\x8c\xd4p\x15|K\xf6tM\xa9\xc9\xfa\x18]\xb0\xa3'=@4\x15A74S\xc8\xee\x06\xa5yU\x13\xbc^\xa0\x0f\x9c\xae\xc6\x07~!\x83\xb3|\xc1j\xa9k\xed\xa6 \x873\xbe,\xcbl\x02\x92\xe3\xdb\x8c\xac\xb6\xc5=)\xf3Nm\xef*v[\x14\x19\xc1\xb9V3\xf5\xf7\xdetO\xf3u\x9a\xb0\xbd-\xdd\xa0N6\xbae\x83\x8e\x1f \xaa\xee\xc4\x067.vk\"b!`J\xba\x96\xa6 \x1d0lYX\x95dK\x1e\x1c-o\xa6\xb0\xf1;g\x11y\xd8S\xcd\x0fNo\x80\xfa\xb3\x1d\x9f\x1e\xd4xS\xb1\xac8c\x02\xce\xee9\xadr&\xc9\x83v\x14\xac\x87\n=\xeb\xaa(/R\xeds\xba\xff\xf1\xb3\x1d\x1bc4\xdb}\x86k\xda\x96`#\xe0\x85\x00\xcaE\xde\xbb\x84\xb4+\xf2si,z\x8dB\x85\xe0\xd8\x8e\x98\xd1\xe3\xa4\xd7\xb9\xfe\xd1*\xb8\xa6f\x8cU\xd1\xcdD\x11\xd8\x81T\xe3\x19\xa9\xb3\xa2+x\x9f\xeb\xc6r\x9a\x8c&c\xf9\x9b~\xf1 i\x85\x94?0\xb2\x98l\x8c<\x0f\x83\xb2\xf2\x9afVV\x9ek\xc6e\xe5\xb9\xc9\xc4\xac\xbcb44kb4s\xb3\xf2\x86ntV^0\x98\x9e!\xf9\x19\xa0\xc5\xbbv34\xa4\xa9\xc6h\x83\xa8]\xa7k\x8e0ICz\x04\xc3\xb4\"8\xb8yZ\x91\xff\xf5\x8d\xd4J\x01~AS\xb5R\x92_\xd0`\x0d)\x94\xd9Z\xa9\xd7/l\xbc\x86\x14\xd2\x84\xad\xd4\xef\x171d+e\xf8\xa5\xcd\xd9\x90f\x1a\xb5!\xb91\xc09\x06\xee\x9e8\xd1\xc5.3\xb7\xadP\x06\xcd\x05y\xf0\x14\xc1\xba\x00\xdfqIF\xd6\xa2\xae\"y\xb2\xd5\x02\xc4\xf2Z\xde\xf5Cx\xe9!\xbb\x98\x9e\xda3\xbd\x86\x8b\xd05\xd0\x08Y\x06\xcd7^W\xe4c\xedqUE\xfa\xfa\xaa)3o]\xd1\xadm\x9c\xa0\xeb\xcb\xf7/KR\x15M\x99\x80\xfb h\x13\x10S?;\xa0tM\xf2:\xdd\xa4:\x9b_\x13\xd6\x85\x0c\xd4\x15\nf\xebH\x8a\x0c\xdd6T\x95\x11\xd7\xe1\xc3\x9a*\xbc\x80vM\xd5\x06\x01D\xb8F\x19\xc1U\xad\xcb*r\x82\x9e\xbc|\x82\x92;\\\xe2\xa4&\xe5\x82\x0d)v\xa8\xaf\xc8vG\xe0 B\x8b{}\xf9\xfei\x85\xf6\xb8\xbec\xc25Qm0N=\x17\xfa\xf9\xa6\xc9\xb2\x03\xfa[\x833\x88\xeb\xcd\xda\x87\x8bf-\xf1\x8c\x05}\xd4?\xbe\xa1Y\xbe\xdc\x16\xc56#\x0bV\xf7\xdbf\xb3x\xcb\x0d\xa57\xcf\xa1\xc4L\\uW4T\xad`fL]\x89Kp^\xe4i\x823v:\xd6szF\x16\xdb\xc5\x11m*f\xa1|\xb2xB\xa7D^\xd4l\xb1\xdc\xd7d\xfd|\xf1\x8d\xfe\xd9y\x8e\xf6\xb4\xf1\xd2\x84\x1c\xa1\x9a\xd0\xa3US5\xec&\xec}I\x92b\xb7O3\xd2m\x85\xb7i\x8e\xcb\x03\xb3T2\x0d\xd4\xd0Z\x98\xf9g\x1d\xf4\xac\xc8\xc3\x9e\x9eK\xd3Z\xd8\x1e\xb8\x1aC;\x9a<\xb0\xae:\xc9\x0f\x0b\xf4C\xf1\x85\xdc\x93\xf2\x88\xcd\xde\xeb\xcb\xf7\x15\x18\xda4y\x0dhkzFUrGv\x04\xdd\xdc\xd5\xf5\xfe\xe6\x08\xfe\xadn\x8e\xe8\x0e\x9f\x17\xfc\xe9\x11\x1b=\x89\xe4s@w\x10R\xa3f\xaf\xc9\x03G\nC>\xa4\xbc\x176\xaf\x1d\xdeW0\x14X\x89\xa9\xaa\x01#\x1b\xd4\xe2\x94\x9bd\xe9\x8e\xcc4\x83cC_\xfc3:\xdft%\xa4\xddG\xd7\xa8tM\xf5\x14^ f\xc3\xa8\xaafG\xd6\x06m\xfd\x9f\xd1I\x8e~X./\xd0\xf7gKq\xa3\xc4\xf5\xe5{\x98P\x07f\xbe\xc4\xe8/\xeap\\\x1e\xf6\xe4\xaf\x7f\xf9\xab&\x0e B}.\xfa\x1d\x0c3\xac%\xf7e\xb1n\x12\x82\xb4\xf0\xf5ri\xf6\xfb,M0\xaf{I\x84\xf9\x856O\x82\x13:W\x8b\xe2s\xb3o\xfd\x01\xc0vS\x98=\x82\x10\xad\n\xcb\x9bE\x1f\xac\xef\xc8N\x1a\xa3k\x18\xa4X\x14\x95\xfe\xff\xbe`wW\xab\xa7`\x9a c6\xfdJ\xb2)Jr$>\xa4\xf2p\x9dr]&'d-\x946\xb6D\x94\xf7dm\x90W\xe4\x08t\x16P\xb3\xe8\xdcX\xa0g\xd7\x15A\xf7\xa4\xa4Z\x02\x81\x00\xc3l\xae\xc3\xf8\xc09\xde\x9ajy[\x12\xfc\x99\x9d5@\xe0\xe2\xb9\xde\xd3\x1f\x8b\x9a\x1c\x83\xe6\xbci\xf2\x04F0-/\x9f\xf3IS\x96\xccUDv\xb107k\xc1\xfcJt\xcf\n\xbeV\xdf6\x1bT\x12\xba\x02\x93#f,Ok\x91I\xc3\xad\xbb\xd2\xb8\xbf%\xdb4\xcfMf\x04f\xe7\xd1\x97\x8b\xc3\x9e,`<\xe2}Z-\x12\xba\xdd\xeb\xaf]\xb1\x19Q\x817\x07\x9dp\xb9:\xbb\xd13\xbe\xd5\x83;\x0cL\xa1\xe7hG5DM\xdc\xada2\xb3\xca0E\xae5\xe8\x83\xca\xcaosHPEv\xf4\xd4\x9c(j\xf2c9f\x1av\xe9\x0ft\x1a\xdfR\xb5\x1a D56\xaf\xb4\xaf\n\x84\xe0\xb6\xb87l\xd0\xed\x05\x15\xb5\xe2\x9d9T\x82\x9b\x93\xfcp\xd3\x8b\xcd\xdb]\xb62P\x12\xb1\x0e\xe2\xacP\xda\x02\xd4\xe6~W\xd0\xd5\x8a-\xa8P\x92[\x83\xf3\xa0\x94\x97\xd0\x1e\x94!s!\x06n\x96\xde\xb2\xe2\xf1u\xb4\x12g\x04f\x1c\xc5\xc9\xe7\x97MN\xff\xa1\xfb\x8e\xb0\xc6\x1af\x89\xbe\xe1\x16\x1b\xd4\xd4\xb0@\x88\xe9W\xb1\x03\xe4z\x9d\xc2\\\x84\x18\xd7\xa0\xf33\xbd\xbbEJN\x94\xf5\x08\xba\xa0/\xff\xec\x01\xd3A\x88^\x1d\xa3\x0bZ>:\xefxQq\xdb\xa0i\x8eN\xff\xe5_\x0c\xdb\xc0\xbb\xa2@\x9b\xa2@\xaf\xd1b\xb1\xf8_\xdacZY\x9c\x1f\xf4\x078?,hv\xef\xcab\xf7lS\x14\xcf\xf5W\x16\x0b}\x9dO7\xe8\x19\xfd\xf4\x9a\x15pY<\xfb'\xfa\xeds\xf4\xdf\x86\xb5\xcd\xf4\xfd\xcf\xe6\xba\x7f\xeb\xa8\xfb\x7f\xe0{<\xb9\xf2\xe85\xd35\xa8\xd4 5M\xabg\xef\x8ab\x91d\xb8\xaa,\x15\x85\"\xd0\x97\xa1\xec\xd2\x07z^J\x0b\xb4M\xf0{G\x13\\\x1c\xea\xbb\"74\x02\xe4\xfe\xae(\x9e-\x16\x8b\xe7\xa6\x8e\x86\x06xf|\xc6\x06\x01k\x16\xdfV\xa1\x1f\x9dC\xa3\xbc=\xbb:\xbd<\xbfX~\xba|n\xb2\x1aw\x03\xc5\x9c\x01dan\x8e?8\x9a\xe3\xfb\xc2`\xc0\xa4Mq\xfc\x1a\xfd\xd3\xfev\xf1\xae(\xfe{\xb1X\xfc\xac\xbf\x84\xf3\xc3\x11Uc\xe8\x9b{\xd8\xbc?\xe0\xb2\xba\xc3\x19m$sAMM\xa1\xe6f\xc8*\xdd(\x19]\xe7\xbb.+V\x106 \xd9[\xff\xe35\xca\xd3\xcc8\xc0\xcc\xf9+#i\xc9\x02d$\x9f\xdb5H(\x94\xe8\xf6\xd0m\xefb\x95\x04\x8f\xd2\x830c\xd3-\xb1/\xee\xa9a\xbb~I\xcfF\x0b\xf6\x80\xaa6O\xa9\x8e\xdb\xae\xd8t5\xa7\xbdU\xb3\xdb\xd9hI\xfa\x02\xdb\xa51\xcf\x0eB\x9f\xd7\x0e[\xad\xda\x84\xf0\xa6&\xb0\xcb\xb33\xde\xd3\x97O\xfb\xe2\xf8\x81Bd\x0d'\x08\xc2G\xcf\x93MQ,nq\xc9\n\xfd\xf0\xf2\xb0\xf8\xfb\x13\xa81\xe8\xc5\xba\x8a\xcf\xb2|B\xdf\xa3\xcbs\xef\x11\x8b\x15\xd0\xfb\xe5\xf5\xeb\xd7\xaf\xf5\xb6gW3\x18.z\xc8\xf9f\n\xfauS\x11a\xbc`\x08b_\x8e\xfe9}uM\xbam\xf0\x08\x91\xdd-Y\xaf\xbb\x0d\xf1\xa8\xbd\xc8\xa4'J\xda\x9e\x80\xcbp\xf3\xef\xb4\xda7\x9c\xc9\xd0n\xedr#.\xc4\xf4;6(\x888\xf9L\xe7^w\xa0\xd8\xa4\x19\xd1\xd771G/HY\x15\xb9q8\xf3\x93\xff&-\xabz\xc5Z\xfe5z\xa5Kj_\xa4\x03@\xbc\xf7\xad{EE\xc8\x98\xeb\x13V\xff'\xc7\xe8\x89id\xf7\xab\xb5\x80\xd2?92\xc9a\xe5\xfe\x88wT\xd6\xff\x86\"\xfe\x9b\xf1EZn\xe5=W\xe1\xcf7\\\xb1\xed\xf71\xf4PZ\xa1/$\xcb^0n\x19\x9bk\x8cI$h(\xfa@\xed\x0f\xa7#P\xb6\x941\xd6\xb9\x96\xf3,\xe9\xc0a|D6l\xfa\x02o\xd8 \x16c\x08B\x0f\xd4\x1d\x11\x86M\x814o\xc7\x9e\xb0B\xf3\xa1\xd7\x97\xc5\xc4\xb7#\x0e=\xa3\xf3WTW;\xb6\n+\xca_\xff\xf2\xd7\xe7\x86\xc19\xa7\xbf\xfb\x19\x98\xbb\x9cU\x9b\x8az\xb5\xf8\xf6\xd5\xb7\xd5\x13C7\xc2\xbf1\x16B\x8c\x85\xf0k\x8f\x85\xa0\xc0\x0d\x9a\x01\xdc\xcb\xbc\xde~\xc5e\xf9\x00\x0eoI^\xec>p\xe4p\xbc\xb9\xddrc\xa8\xd7D\x90\x1b\xc0\xa7\xdb\x81\x1f\xd4\xe4im\xb0\xc7\x9b\xf8\x16F\xb6\x85\xb1\x80\x90l\xf6~d\xa3\xfd#\x17w\xc3mR@B\xb6v+0\xec\xb3\xb2\xa5\x1b\xee\xcb\x84\xb7i3\x18\x85=#\x8b-jp]\xec\x9e\xeb\xfa)y\xd8\x179\xd1\x1d\x12P[\x11St5H\xf6\x18k\x90|j*\xf2\x97+\xbb/\xbe\xc0D|\xf5\xbb\xee9\xdb\x15\x8b\x9c\x00Z`\x94U\xe2\x94+\xac\xb7\xb8\"\xc0\x1e\x03\xe8\x13\x15\xe5\x1axN\x84j\xb1]\xdb\x19\xe5\xb0\x19p\x9d\xa7\xf5\xd3\x8a\xf3\xb2\x8c\xaf\xbd\xe2\x0d\xff\x1a\xbd\xfa\xdd\xff\xd7\x96\xb3\xcb\xda\xfc\x15C\x05\x04\xefU*g\xb1\x81>\xea\xcc\xe0\x9co\x86\xbb\xf2\x18\x05\x16\x1b\xf4\x94~\xf8\xd4b\xd0Cr+\xbfF\xdfQ\x05\xa3\xa9\x8e\xd1+D\xbf\x82\xd2\x7fg\x1d\x1f8Kqe\x1a\xfeC\xa4&d'6!\xf7\x04\x11\x11\x8d gf_o\x11r>\x07\xc43\xb1\xdcI\xf3@\x118\xbc'J}\xdd\xbf\xd4\x17\xe22\xa9v/l\x194=\xfa2\x9d\x87\x9dOR\x95&\xc0\xcb\xed7-\xaf\xa3\xb4\x80\xa9\xb3]\xd4X\x1e\x8c\x1b\xe9\x92\xdc\xa4H\xe5\x82\xd0\x91\xe4\xb5f\xba\xa6%\x15\xa4\x96\x85\xfd\x06\xc3\xf4Y\x07\x8a\xd1']\xf3i\xb1\xaaz\xa3\xeew\xbd\xa1\xb5N\xab}\x86}\xf5\x9d\xe1.\xe4\xb2$\xf2)[+\x9b\xedV\x02\xac\xa1#\xdb\xa2\x9bE\x80\x13P\x92Q-\xa6\xa7\x87\xe8A\x04\xfd\xca\xfa\xf4*\xcd\x13r\xcc\xaf\x82~Q\xad?\xa3\xdf-\xfe\xf0\xfb\xa7\xa6\x91\xf0\x94-\xeb2\xb3\xac\x87h2\xb2\xfc3\xb2=F\xa7L\x18:\xa1\xd3U\x96T\x1dv\xb7\x85\xaf\xb64<\x04@\x94P0\xb8{\n\xfc&\x90\xc8\xea\x8e\x1en\x8a\xbc%\x86TP\xba\x93\xe5\xa7\x0f\xda*\xc2\x80\xe4D=\xfa\"1\x86*fH\x10t:\xd6\x15:\xe2`nJ\xe9\xa5\xa6L\x83T\xfe\xfa\xf2\x9c!Uh]$\x0d\x03\xac\x9f\xd13>\xdd\x8f6/\x92;\x9c\xe6\xcf\xd5+\xf1\xda3\xbc\"*\xcda\x87L\x8b|\x81>\xf1\xc3\x83g\xd5\xbe\xebWmu\x87+c\xec\xd3)\xf5\xfb\x01Ww\xb0\xacVw\xf8\xdb?~G\x0f\xa8w\xc0\xddk+\xbd/\xe8\xbe\xcf\xacR\xd7\x97\xe7T\xa5\x7fZ1DF\x11W\x17\xe8\x9e\x94\xe9\xe6\xc0\x1aE\xad\x1a\xebR!r\x9d\xae\xf3\xa75\xc7\xd0f4\x88}=\x10Z\xab\xc7Z.}\x85\xf5eZ=2\xd8\x15\xe3A5\\\xfe\xfae\xef\xf3A\x0d\xfc\xacJ\xca\xe2\xcbh\xd5\x9b\xb0\xcf\x1e\x97\xe8\x12}]\xbb\xe4\xe7?4p\xa8\xeb\xf7\xb3\xcf\x81\x0eNs\xf0\x1d\x97\xe4s\xa4\xfb\x01\xbcWG\x8f(\xee%\xfb\xc8\xe4\xa9\xb1<{\xa5M\xa7x\x85CR|\xc3\xe5lGS\xf5\x8d\xc7\xc7\xe1\x03\xe4\xc0\x11\xd2\xa9#\x9bg\x96\xc7\xa7\xee3\xd9\xe4\xb9f\x905g\xca\x19\xc4\xf1Ihx\xe27\x17\xbb\xd4k\x86\xe9\xde\xe7\x90\xcc\x06\xa6\x00\x9e\xe8=y=\xe2\xb0\xc1\x1f\x1dE\xc3f4l\xc2\xef\xbf!\xc3\xa6\xb25\xf9o\x82?\xb0\x05}\x8ca\x13\xbe\x1b\xbd \x82\x14u\x0b\xf4\x1a\xff\xb5\x91\x16\xed\xd6c\x06\xf6\xa4~\x87\xf9\x8c\x08\x1es\x9f}\xc7%u##\xbdM\x16XB\x8c\x16\", \xbf\xedq\xc9\xff\xf4\x1e\x19\x00S\xaf\xf6E\xe9\n\x1e\xcd\xa7\x0d\xdb\x8f\x8a\xb2F\xf4\x1c\xc7\x9a\xb2\xe6\xa6\x1d\xd2\xb1.\x18\x0e\xdc\xcb \xb9\xc3yN2\xff<\xf8\x07\xb4\xb5}\xb2aC\xe5\xd8$\x88ke0\x87Es\x95\x92\x16\x16'C\xd0\xc9\x80X\xe8B\x9d\x8aa\xefjx_ \x02X\x92\x84\xa4\xf7c\xc4\x94$I\xf7)\x91\x88[\x1c\xd9]\x93\xaa\x16m\xc5\xa8\xe1b\xcc\xa4;R4\xb5\xa6V\xdb\xbbd _\x08\x8d\xb8$\x19f\x81/E\xbcK\xc0\x16{j\xb3\xbc\xc1\xd3\x8e\xe0\x99\xd2>X\xa7\x15UM\xd6\xe8\xcb\x1d\xc9\x19\x98^\x17\xe8w\x93\x94\xba\x92\xdc\xa7tc\\\xc1i\xc4c\xdc!/\x9d\x0e\xda\x15d\xb7,\x05\xee|A\xab\xd0\xa1\xa9\xbd8\x9cmqL'\x96\x99\xc5\xe1mO'\x02\xb7\xb5\x82\xa7\x8d\xc8S\x1d\x1a=}\xe8\x87\xf6x\x83\xd1\xae\xc8\x8b\x1ax!\xd9A\xc4\xc9e\x97T\xe0Z\x8f\\\x06\xce\x04p\xad \x83\xc0\xe9\xe8\xc7[L\xb5\xd76\xe4*\x17\xdf\x9e\xe7\x9ar_T,\xdc\xb0$\x89\x9d\x9f\x98\xb9+\xef\x9d\x9c7%!\x7fg\xd86\xf8\xb6(\xa3\x94\xfe[\xd5x\xb7w\xcc\x08K+\xba\x07u\x9b\x013\xa8\xddVE\xd6\xd4\x04\xe58/*\x92\x14\xf9\xbaBUJ\xd5\xda&O\x1f\x10\xd9\x17\xc9\xdd\xe4\xb1\xbd#\xbb\xc2ob\xb7\x9cG\xfa\xc97\xc8\xd0\xad\xd2\xae'\x1f:+\x16\xa3\xb9\x8d\x9a\xbbi\xf2m\xfa\x7f\xd8{\xbb\xde\xb8\x8d%\x7f\xf8\xfe|\x8a\x06\x9e\x8b\xe3\x00\xb6\xe4$NNb\xe0\x7f\xa1u\xec]a\xb3\xb6a\xc99\xd8+\x81\xe2\xf4H<\xa2\xc81\xc9\x91=\xc1~\xf8\x07\xdd\xd5\xdd\xec\x97\xea7\x923\xd2f\xa7\x81\x00\xf1\x88\xac\xae~auu\xd5\xaf\xaa\xaeku\x1c<\xabN(\x97\xb0\xfdw\xe4\x9a\x0e_)U\x16\xeb\xf37\x17?\xbc\x14\xd7\x86\x15\x08\x8c\xfe\x84\\P\xca\xfeB.6\xb4$\xb7\xb4\x1b\xed\xd2\xdc\xfd\xfe\xfa\xf4\xf4\xa6\x1an\xb7\xd7\xdc\xe2\x071\x11\xa7\xd5uy:t\x94\x9e\xde\x17\xfd@\xbb\xd3~C\xcb\xd3b\xb39\xad\xca\xfe\xc5\xcb\x1f^\xbe\x90\\\xbd\xe0\\\xbd\x90\xdc\xfe\x7fl\x07\xbe\x80\x80\x08&n\xc5\xc1_\xb6\x1d=\x81\xcd\xc1\x8e\xfb\xff\xd0\xbe\xad\x84\x93\xde+\"rv\xd1t\xb1\xe0\x15 \x13\xbbO\x12\x03\xf8\xa6\x7f\xcf\xef05\xe0H?\x89\xe7G\xc9\xc0%\x01;\x0d\xd9\x07>\x10Z\x94\xb7\xaa\xb7\xdb\xaa\xa6\xe4\x8e\xd2\xcd\xc8\xac$\xf0\x1e\xec@\x83\x08\x95R\x98,\xd2\xb7\xf7\x1c\xb0\xd5\xd3\xa6\xdf\xb2\x8b\xdfM\xdbU\xc3\xed}O\xee\x8b\x1d)o\xdb\x96)\x82\xad\x9a'\xfe\xb1\x8c#\xac\x1aR\xd2\x8e\x83\xf8\xd8W(\xd0Q<<\xf5\xb6\xe88\xd4\xe4\xae\x7f\x0e\x19\x96_\xdc\x17\xe5m\xd5H\xbb\x86\x8d\x96!\xe7|\xa6zJ\xca\xa2\xa7\xfdsc\x02\x04\xff\xd6\x04\xf4-D\x0c\x01A\xc1\x12\xbb\xd2V\xcd\x96\xaa\xa4\xccmS\xa1\x92\x94\xb2\x15\x11\x8e8s\xa2\x05\xc1\x1b\xcaC*{:\xa0\xdf\xf64q=ST+\x01-\xc8ib\x1a\x11\xd1\x81\xfab\x97lgk\x9f\xa7\xb6\xc7\xd1\xeab\x97\xff\xfd\xf1m\xa8\xb6\x18\xff\xfb\x9b\x0fZ\xe1q\xfd\x0fc\xe2f\xb1\xf5\xcd\xba_(q\xfc\xe2\xe2e\xc8KLh\x94\x15T\xe8:\xddB\xc5.AN^\xa2u\x18\x8e;\xa6\xd7\xce/b\xd953\xaa\x15/V4+\xfe\x01H\xd1\xcem\x08\xcf\xc4\xc0\xbf\xf3\xf45N\xd3k\xcf\xef\x91~\xc1B\xc2\xf5p\xa6\xb8^\xc9\x83\xe2\xff\x91uQ\xf7b\x88b#\x8f\xfb\xc0\xb0\xe7\x0d\xb2\x06\x81\x8a\n\xc0wQ\x7fsV\x0e\xd5C\x11-\xdb/\xbbs_0\xfa\xfd\xaf\xfe\xe6T>`\xdeAC,\xacVI\xf5?4\x1e\xec7\\&\xe4\x139\\\xbc\x13\x19\xe7\xe5\x08\x92\x80\xe2\x88\xb6\x10%\xa5\xb3;\xbev\xea}/g\x109Lco`S\x99\xcfE\x96G\x0f\x9fB\x9c\x04\xc6\x9e\xe9\x17\x90\\JY\x1d\xe6\xf5\xdf\xb6]\x93\xc6\x9e\xf5\xb0\xc3\x08\xfbc\xf2\x14\xbd\xe1\xd5\x07\x92;6\x1fw\xba\x86?'w\xfe\x1b\xad\xe9@3\xbf9\xec%\x87\x11\xfd\xa1Lv2\x19\x89\xb0\x90\xdc\xb9\xfc\xe0\x92\xbb\xb7_p\x18\x90\x0f$\xb3\xc0\x0b\x1a\x9c\xd5u\xfb\x95\xfd-\xc2\x08~\xa0z\xa98\xdcy\x1eC>\x1a\xaf\x9d\xf8\xbf\xfa\x9b\xf3\xebR^\x89\x92'\x0ey\xc7\xe1N{&y\xfa\xfe\xabj\x86d&\xf4\x87\x9d\xde\xd9\x1f\x93\xbb\xbd\xa0CzI\x86\x91\x01\xfc5\x87\x15\xf3\xb1\x1c\xa6r\xd26\x19l\xe1a\xed\x08c\xc6\x83\xe9\xacq{\xf3\xb9(\x16\xf4\x91\x97y)\x12%\xa0\xbe\xcf\xc3t\\~\xd1\xc7\x05\xb9T\xde\xb3\xf7zt\xa3g\xef\xf2\xcf\xdc'\xfe\xae\xedJ\xba\xcacG\x9f\xbc\x10\x15\x87G\xec\xe1\xcc\x89\x03\x12\x9f\x84-\xf7l\x18\xba\xeaz;LQ\x08b\x94<*\x95\xef\xb5\xcc\x11\\\xd0f\xf5\x1bmv\xbfW}\xa2\xacqy\xc7hx\xe6\\\x7f4S\x9f\xf9g5\xdc\xae\xba\"\x965b\xdc\xaa\xf6\x0b\x0eK\xf2\x81\xe0\x94 i\xc0\x98H\x97\x8a\x07)T#Y\x1bK\xa99D\xd4Z\xcd\xaf^C>}|#\x88\xe1\xdeV}\xa2\xb6\xabjxW\xd1z\xd5'O\x90p\x11_\xb1]\x92h\xe1b\x8f\xbe\x18\xaa{\x07\x0e\xc3\x06\xc0\xfex\xca\xfe\x08fT\x1e\xd5D\x9b\xa1\xdb\xf1\xc8^\xd1\x9b\xd5\xf7ub\xe1\xc9\xc1\xcd\xc2\xa0\x8a\x88q\x03\x8apw\xf3N;Z\xb6\x9d\xecI\"\x86\x0e3J\x0dsd3\xb0\xd4P\xef\xdb\x95\x00y;c\x15\xf1iv?v\xb6=<\xc7\x9e\xe8^\x0f\xdd\x17\xf4$j\x8cwo\x99\xdc\xb8i\x81[\x1d\x0d\xa4\x95\xc0\xaa\xa6\x8dX\xefR\x05(\xc9\x9a\\\xa2\x0b6\x0d\xb2\xa8\xf8)t\xc5\x0dv\xb8\xa0\xd4>\x07R\x16\x9ba\xcb\xcb\x86\xab\xccI\xa4\xb8\xe6>\x04\x89\x8a\xd7\xea\xd1\xdd\x17wj\x0c|\xa2U\xb4c\xb3\x92+Nw\x80\x91\xbb/V\x01\xd9\xf5\xa6m\x86\xae(\x87\x8b\x0d-\xcfW\xe7\xcd\xbaM\xff2\xc5\xabW\xfd\x86\x96W\xd5*q\xdf\x1a\xa1k~\x8c\xa6M]\x89\xa5\xe2+'\xa1\xb6\x9d|PE\xd9\xf1\xa9\xd0(\x19b\xd0%|\xb5\xe9\xe8\xba\x8a\x95\xd9\x8ds\xef\xa1+\xf9\x16\xff\xda\xb4\xdd\xa0!\xff\xed\x97\xbcL\x9a?l\xb7\xfb\x9en\xa4\xc3\x11D\xea\xfcE\x8cJ\xa3\x975>\xb6B9g`\x80sFJA-iy\xfb\xe3\x0f\x82\x92\x12\x13N^\x804\x1e\x13\xa6<\x95G}2\xf9\xff\xdf\xd2o\x92\xcb(w\xc8\xc2\x84\x0ex\xf7\xfb\x1ecC\x1e\x8a\xaej\xb7=\x979\xa4\xa37E'B\x06d\x17\x82\x86\xf1a\x91*t\xc2\xeb\xdd\xa9W\x92%\x8a\xd1\xd1D\x89\"\x84,\xa4\x86\x18\x13CtB\x83\xa9zk8\x16\x80A\x9fE\x9b\xe6o\xe3\xdf\x0c9\xad(GD\x913\x03\xc4\x9f?fb\xe2\xc53\xf2\xbe\xb8\xa7#G\xc3m\xd5\xdc\xe8>et|9\xf4\xb5\x7f\xc2f\xc5z\xf9J\xaf\xfbj\x98\x9c\x01\x84G\xf5\xb6d]5+\xf0w\xf1t2l\xca\xf5N\xaa\xb2m\xe6\xf4\x00\x91[\x8c\xcaI\xc2'\xac/>\xc4\xcc@\xe0nml\x05\xa9|\xdc\x16\xcd\n`\x8fRC\xb01\xb42;\xdf\xb6S.\x9c\xf6kC\xbb+q\\M\x0c\xea\xc0u\x97\xb3\x80\xa6\xd6~\x95i\x9e\xd4\xae\xad\x06\xb5k7\x05\xdf\x9bWU\xf3\xd0\xd6\x0f\xd4\xf9$\xa70\x85\xd5\xf1~A>\x9e}\xba\xfco\x9f\xc3\x0ey\xe8\xc3\xa7\xf3\x7f?\x7f\x7fv\xf9\xe1\x93\xff\x99\x8b\xb7\x9f\xfe8\x7f\xf36\xf0\xc4\xf9\xfb?\xde^\x04i\xbc\xf9|q\xf9\xe1\xb7\xf3\xb3\xf7\x01V\xfe\xf9>\xd4\xc7\xd9\xbbw\xe7\xbf\x9f\x9fY\x95\xbeM\n\xff\xf5\xfe\xfc\xdf>_\xf8\x1f\xf8\xf8\xe9\xc3\x1fo\xdf\x9f\xbd\x7f\x13 \xf2\xe6\xc3\xfb\xcbO\x1f~\xff=\xc4\xcb\x1fg\xbf\x9f\xfffM\x9a\xf2kF\x97 \x14R\xe3[A\x1fY\xe1\xe0\xe49<\x0cB\xca%o\xfc\xea[\xfc\xd7\xf8\xcf\x82:\x04?\xb4]\xc5\xb3{\xd9U\xa0\xd1\xbd\xf2\x1a\xfb\x91\xa8\xa4\x00+z=\xf0\xd4+U\xc9c\x1deT\x7f\x80\xb2\xdcc\xaf\xb1\x1f\xc15\xcaeIU\x92\xaay\xa0}\x98O\xb5\x1f_\xa3\xbf\xcaim\x06^\xfe\x98}\xe1\x8aw\x8eB\\UE#\x06 \x02B\xf8$\x85\x06\xc0\xf7\xf7k\xe7\x17#\xf3p\xd5sY\xb1\x13\xfdsY&\xe5\x0d\x13\x0b\x01\xf2\xea\xfbx\x8d\xfe\n3\x04\xc4Uu\xe3\xf5\xba\xaa\xb9X-n:\xca\xafy!\xfe\xe1\xebz\x8d\xfc\x06\xc4\xb9\xe4+ \x91\x10c\x1a:S\xc9ny\xac\x01\x1b\xd4}S]o{r]4wR\x88\x06\xba\x1d\xbf\xd9\xd7\xf8\xcf\xacs\x195 \xe7R\x9fJ;\x19u\xdd\x96w\\Y\xe1)$H\x7f_t\xc3\xa8t\x14e\xe4\xa3\x19\xe5\xc3k\xfcgs\xef\x8c\x91\xc40\xfe1\x8d\x89\xf8\xaa\x84\xe6D\x9eU\x94\xd0\xa6\x1d\xe8w\x81\xce\x95\xe0y\x8d\xfe\x8au-\x03)z\x81C\x82}jkld<\xe6>\xb2Y\xe3\xd0\x80\xa2\x83\x90\xf31\x9da\xd7\xd6\xb4\x97\xc7\x19\xa31\xaa\xb9\x1c4\xb4\xed\x1d\x1d\xd2\x10pc&v\xb16\x9c\x1e\xd8:Dv\x95\xf5\xb6\xae\xd7U=B\xf4\xaa\x1b\x9e\xa1FO\xe6\xc4\xf1h\xb0R\x89z\xa3\xcc{6O\x1f\xb6\xec5\x850\xc9\x8c\x8bh\xa32\x0c\xc6\x0453\x15s\xcc<$s+\xab\xd1\x89lG\xcfT>i\x1e\xa7\xc4\xee\x10r\xe3\xf0\xfc\x18W\xa6\xf2\x1b\xeaFOz\xc6\xdf=\x1dT\xe6\x17}^\xe97Zn\x87\xe2\xba\x86y\xb1\xd7\x17\xbd\xb5\x18fa\x05\xce\x16\x1b\xe8\xb9Z\x96\xfe\xb9\x86!\x93\xd1\xc7E\xc3\x83\x94\xfaj%\x8b\xcd\xb7\xdba\xb3\x95E\xf0\xf5y\xcd\xb9H\x89\xf8\xbb}\xdd\xa7\xfc\xa7\xbbM\x88C\xc1h\xc5Q_<\xad\x10\xbb\x86>\xe7\x08:\xed\xad\x15]\xff|]\xbe,^\x94\xbf\xaeV/^\xfd\xf2\x8fW/~}\xf5\xcb\xfa\xc5O?\xbc\xfc\x99\xfe\xfc\xf2\xe7\x97\xc5/\xaf@\x92\x89\x9b\xba\xb5\xdd\x9c\x9e\xad\x04\x08l3C\xa7\xeaM\xf6\xf8\xf7_^\xbe|\xb9z\xf9\xe5\x07\xfa\xcb\xd7\x9f\xfab\xf7\xd3\x8f\xc5\xfa\xcb\x8a\xf6\xdf6?\xfc\xf9\xe5\xcf\xbb\xee\xd5\xda\xcc\x9ar\x0e\xc8\xb6\xa2\xee[\x18\x8c\xf84\xcc{\xa2\xd1\x9f\x19\x9d_B\xaf\xb7\xde^\xbf\xbe\xfaa\xf5\xe5\x87\x7f\xad\x1e\xeeW\xc5\x9f\xdb\xaf\x7f\x96\xc5ju{\xfb\xcb\xcd\xfd\xf6\xcb-\xfd\xf3\xd5+9iUS\xd6\xdb\x15\xbd\x02\x06\xf8\x05\xdf\xb9\x05\xd8\xa1s\xbe\x90:\xffbb\xbd\xc01\xb8\xae\x8b\x1b\xbeC\xbf\xdeRH\x8a\xd5\xca\xa7\xf9W\x00_\x82f\xca%\xf6\n\xf5\xee\xb7\xe7]A\x811\x95~\x069 \xf4\x1b\xb0W\xad\xae*e\x8e$\x0b\x8e\xdf\xea\xc0?t\xf1 \xa80+0\x93\xac;^S\x81\x1a\x1b\xc0\x1c\xc08\xbf\xda\xd7\xba\xe4\x00\xac\x0eR\xd6\xae\xea\x89z\xba!\xbbv\xdb\x99\x03\xd8\xd6C\xaa\x15\xc9\x96F\xa3\xbf\x08\xfe9\xf8\x82\x81q)\xeb\x0f\xd3\x8bK\xc3L_\x9ba9\xb3\xacS\xce\xd8\xf1\x87\xe5`\xbfv\xc5f##Q\x9d]>)\xde\xc4\xc3\x94\x97\x8a\x9f\x92C\xcd\x10\xfd\xb2y\x0d%$\x94g\x8e\xcc7\xb1\xc9\xe65E\x91\xe5Ln\x8a\x9co\x06I4U\xb9k\x8a\x93-8\x83$\xdb4\x87\xbd\xb5H\xbfI&;\xd9\xbc\xa6;\xd9\xf2zO3\xe5\xc9\x86\x9b\xf4d\xcb\xef\x193\xf1\xa1\x0f#))\xa6\x9a\xfc\x10B\xa6\x11\x103\xfd\xc9\xe65\x01\xca\x86Y\xddd\xf3\x16\x9e\nN\xdcl\x13\xa1l~S\xa1\xeajq\xe61S\xa2lI&E\xf4a\x8fi\x11}\x1651\xa2O\xa2\xa6F\xf4I\xdc\xe4\x88>\xea\x9a\x1e\xd1\xc7p\x13$\xfa(f\x8aD\x1f\xf4\x98$\xd1g=\xa6I\xf4Y\xccD)[\xba\xa9r|#\xf6\x99/h\xba\x94\xcdc\xc2\x94m\x0f\xa6L\x94\xf4\xa2&M\xb4\x87\xd9\xa6M\x94\xeaaL\x9ch\xd7\xcb\x9b:\xd1n\xf6a\xf2D;:\x9c\xe9\x13\xed\xfe \x98@Q\xbe\x0em\nE\x99\xd8\xabIT6\xcc\x969\xb6\x19\x16S\x94\x9enE\x95-\xc4\xc1BVU\xd5U\xb6uU6\xd4\xca\xaa\xc8\xce\xbd*-b}\x95\xcd-\x88Gb<\xce\xb3\xca\xca\x86YgU\x0f \xddO\xb4\xd6ZT\x9c}4\xcfzk\x8fq\xb4\xe5\xe6Xq\xc7f\xe8\x1b\xa8\xed\xa0m\xc4<\xe3\x1bs\xccRnp5\x1a#\\\xcb\x98\xd3\xaf3G(\x01\xa2\x90@8\xea\xb0Z\x9d\x8e\x9b\xd6\"\xe8G\xde\x99W\x9a \xa6\x0b\x9b\xd7\xcc\xcd\x16\xfc\x1e\xe3\xda\xa0\xdd;\x89\xe1\x0e\x11\x1a\xa8\xe5\xd8\xbe\xea9Kb\xe3\x10e;\xe4hS@\x8b d\xa2c5\x7f0\xb1u\xb2\x1dt\xdc.C\xc4\x0bwD\xe8%\xc2:\xf1\xeeM\xf8\xa3l\xc1\xe1\xe7\x8ep\x02,\x12'\x14\x1b\xcb\x84\xa5\xcc\x1dK\x16|\x12'\x11\x80Q\x12\xa2\xf9EF\xbf\x86m\xc5O\xc2=9b\xcf'\xf4z\xbf\xed7h\xbb\x0cY.\xfb\xa8\x058j[ ~d\x8b\xd9\x81\xfd&\xd6\x08{a\xd5\xf6\xbd\xd06>\x81\xaa\x05IcE\x963\x95wP\x05G\x84tCh\x15Z\x05\x98\x90\xaaa*\x81\x9f\xfd\xc9e\xe2=\xd6j\x12\xb5X\x93\xa0\xd5\x9a\xc4'V<\xa4imjE\xf9h=\xaf0\xaa\x1e\xf5P\x7f$\xb5\xe3b$H\x9e\x0d\xbb\x8dHSR\x10\x9e\x19Mh\x93\x9d\xa6\x95z\xee\\\xf2\x83\xc6?\x01hI|E>\x07h\xe1M)\x9e\x89]\x07\x9e\xbdk;\xf2\xb6g:p\xd5\xdf\"\x9bnl\xb0\xbd{\xdf\xd8\xf1\xcb\x82lI\xc3N\x1d\x91\xaa\xa5\xdd\x8c\x15\xc3\xc9\xa6\xa2%\xff\x0cu\x15\x93\x0d/@\x0cbV\xe9*<\xb6\x18[\xe7l\xa7\xe2w\x82\x82o\x9e\xe7\xe3\xfe\x02]\x1f\xae\x04\xdeM\xc4\xaf\xc5%%\xcf\x04\xf0A\x15G'\xb28z+z\x80\xc4-\xecC\xf1\x10S\xd9\x87\xb3\xa5\xda\x19O\xfc\xc5\xe7\x93\xdfD\x8c\xabr_\x0cU/\xc2\xaeZR@\xea\xd5\xdb\n\xb7{\xc1\xe4\x9a\x13\xc4o<\x90\x87\xb6\x10\x0f8\xef\x06\xbf\xf2Y\x12\xfb\x0c\x8cPJ\xe0@\x10\xa3\x13b\xa5\xe2\xc94\xa9\x80\xd2+@6\x88\xa2qBd\xb8\x9b \xdc\xdfW\x9c\xf5l\x9e/\xc5\x0d\x16\x88\x8cr\x12\xc5\x90<\x93\x0b\xf5\xe9\xed\x9b\x0f\x9fpGD\xdb\x89\xbf^\xfd~~q\x89m\xfd\x19\x0e\x91\xdf\xde\xbe;\x7f\x7f~y\xfe\xe1}\x8a\xe9\x1c{\xe3\xe3\xa7\x0f\x1f?\\$?\x1e\x18\xa8\xefa>n\xe4\x0de\xfa\xcf\x1bD\\\xbb\x8cLLn\x87D\xb3\x15\x17\x0d\x11\x89\x9bNE\"'+O\xbb\xd1\xfc\xb3\xed\xf2 \xff\xa2w\xc6\xd5\x02.8\xc7\xba\xb4\xec_\xbc0\xef3u\xcaH\x87e\xd3\x0e\xca\x16\xe15W\xe2k\xe4\xf2\x03\xbf\x1bfrYe\xe0^\x15\x9f\x1be(/\x9ah\x9dzy,\xf0m\xe2\xe3\x83\xff\x11g\xa6\xd8a\xac\x94m]\xd3R^\xe1D\xaenu\x1c\xdf\x16\x0f\xbe\x03r\x10\xb9\xe9\xb8l\xc1D\xcb\xa6m\xfa\xea\xba\xa6W\xc2\xf6\xb4\x07E1p~\xfb\x85A\xa6\x7f4\xcfC\x9a\xe3#\xcd\xf1\x92f\xf9I\x93=\xa5Y\xbe\xd2\x0coi\x9e\xbf4\xcfc\x9a\xe13\x9d\xe25M\x93\x9bS=\xa7\x1eb\xdc\x9fJ\"\xbe\xd3\xbdzO\x0f\xe1?\xdd\x97\x07\xf5Q}\xa8\x07\xf3\xa2\x1e\xd0\x8f\xfa\xe8\x9e\xd4\xa7\xebK}\"\xde\xd4\xc7\xf0\xa7\xc6.\x04\x93}\xaa\x1ejvl\xca\xd8\x04\x1f\x97\xc6v\xd34\x0e\xfb2\xf27\xf4ud\x18\xd8\xcdPw\xa7\x99\x97\x1a\xf0\x85y.\x8b\x80@\xe6\xeeZ(\xcer\xaa|qp\x81=\x15.5\xeb\xcd\x0c/\x1az\xd3B|h\x86a\x17\xf7\xa1\xc5O=\x84\xc4\x1c/\x1a\x11\xeeIw\x04\xb6\x95}\xa2\x11\xd8\xe4w\xc2\x8d=b\xf3\x8a\xcd\x17qx\xf0\xfa\xd3\xb0Y@\xe9y\xfci\xce\xe2\xf8\xfci\x87\x1f\xf3D\xaf\x9aM&:\xe2\x14W\xcc#\x8c~\xa6o\xcd\xf1\xaee\xce\xcam\xd1\xdf\xd2\xd5T\x93\xd5\xf2\xd3\xa1\xf1#\xe7\x01~\x02\xcb\xd7\xc2\xdb\x02w.F\x87\x9d;\xae\x19\x0e\xc6\xf8x\x12\xe0\x0f\xd0R\xb8\xc6\xa1\x10\x95O|\x1b \x07\x94`\xb5\x1a\xad \xab1\xaa)<\xa4\xa8\x93'\xe6\xe2\x89\xa3$\xa0EM\x04\xd1-N\x12'\x96,\x84\x9e\x80\xd6\xa7`(\xa0%#)\xa0=\xee\x8cL>\x0b0b\x89\xf3\x91v.\x90\xc7\x9f\x1b\xefI\x91HBOF\x95\x8a\xc5\xc0\xe8\xf8\x84&I\x9b\xa2i\xe3\x9f%B]ri#\x9d\xb9\x19\xa6\x8dt\x12\x82\x03#\x14\xc4q\x90\x08\x7f\xc85\xe7\x9f<\xac\xaf\x1bU\xfa\x82\xf4UsS'h\xa7\xe0@\xbc\xa7\x84~\x1b\xbaBCC\x80\xf1\xa4\xd2\xaaV\xf9\x99B\xa1'po\xdd\xa9\xaa\xb8\x9d\x8a>\xc4\x98\xd2oR\xa8\xef\xcc\x98\xb0q,\xdak\xcf\xaa\xf5\x98N\xf4\xbb\x11\x16c\x85\xb3\x1a\xc30bQ\xcbv\xb3\x1b\x955\x11\x16z[\x0c\"~\nR`RH\xc2\xbd\xad\x87~~\xbc\xa4s\x00z\xf7nx\xc7\xdaD\xd3\x02\xdd\x81\xee\xfc`w\x87\x03\xdb\x7f\xbc\\\xd0;\x99\x1f\xf8N\x96\x0d~'\xd1\x00x\xa2\xd6uVmYg\xd1g\x05\xc4\xbb\x13\xe2~\x92.\xc49\xb8\xca\x9e\xc0x\x12\n\x8e'{\x9a\x9b\xd9\xc1\xf2\x16=\xdf\xc0\xbcA\xf3dO\x03\x9b\x1bDo\x91\xdb\xb5\xdbnz }B\xe6eA`?\xa1\xf4\xe2\xdc\x83Ywdp$\xb1\xc8\xb8V\xfb\x97\xde^\xe5s\x01,\xa2\xbeb\x18\xed%b\xd1\xbd\x97>\xffuoB\xbc\x85\xb1\xf7\x92\xe2\xce\xbdc'\x99}i\xff$\xc1X\xf3`\x9cyz\x8f\xe9\xf1\xe5\xfe\xd8\xf2\xbc\xde|1\xe5aq3-\x96|\xd4\xe0\xec\xd9\x0b\xc4\x91\x07c\xc8}P\x03\x14d\xe0\x9d\x98Eb\xc6\xc3\xf1\xe2\xcb0\xeaC@$c\x1fRQ\x0fix\x874\xa4C\"\xc6!\x01\xdd\x90\x88kHB4\xa4b\x19RQ\x0cI\xf8\x85<\xe4B\xec6:\x0d\xad\xe0\x89\xf3\x0e\xe0\x14\xf6\x84P\xd8/6ayT\xc2#\xe1\x11\x0e\x80D8\x08\x06\xe1\x11\xd1\x07O\x11w\xf0\xe8\x88\x83\xc3b\x0d\x16Ni\xa9\x91t\x04\xe3\x82A\xd8\xd3\x02\xb0\xbd\xc1\xd7\x93\xef\x01C,\xc2\"5\xe0\xda\x8d\x9f\x88)E\xc3\xf4 k_\x80u\xac\xcb\x19\x81\xd5\xd8\x9eX,\xa0zV0\xf5*\x1d\x02\x82o0\x1b\x04\xe2\x98\x8eM\x0b\x8a_y@_\x1cm\xc4 \xb0\x0f\x82\xd7t\xf0A>2\xee\xd16o\x89\x1b\xc7\xfb\xfd\x84U(\xbb\xb7\xa8{/\x08\xe7@\x9cz\xceTc\xae\xbc}\x8fj\x82\x8b.\xe4zIpY\x1cx|~o\x8c\xfb\x17\x8bV\x86s\xcd\xfc\x9b\xebR\x9bh\xa2w\xc9Np\x9a\xa5\xf3\x9d\xb1<9|g\xbb\xc0\x12\x161\xdb\xf0\xe8wwy$j\xd1\xc8\xfd\x10uu\xe5\x98\x1f\xfb\xb3\xba\xce\xcdm|L\x13\x1b\x1b\xc0\\\x0bw(M,!\x9b\x82\xdfS+o\x02\xd5\xf1\x01\xa5:\xa8\xfai\xda\xdfT(d/-\xdd\x92\x85I\xe7\xe1\x1d\xdd%~\xadi\xc2\xf4\x7f\xec\xcf\xf8\x8e\xc2=Q\xc4\x13ut\xd8v\x0d\xe0~>\x167\xaa\xbe\xf0IC\xbf\x0dW\xec\xe1\xa1%\xd7\xf4\xc6\xd1\xef\xbfli\xb7c_;\x1b1{\x98M\n%\xf7m?\x10\xba^WeE\x9b\xa1\xde\x9d\x90\x0fM\xbd#m\xc3\xd5\xb9v\xbd\x06#\x01c\xc3\"\xd8\xdf\xb6\xdbz\xc5\xc3@\xe9`\xd8\x03\xf9K\x99\xb3\xb25\xcb\xee\x91\xa8x\x13\xac\xf1\xa9i\xb6\xf7\xdc4 ~\x83Kh\xd10\xde\xf8=\x91_!`\"-*\xdb\xa6x(\xaa\x9a\xa9\xa8\x98\xbb\xb2\xeaI\xcd4*5A\x8cvC\xb6Lj1\x82\xb9\xb3ew\xe1N^]\xddW{\x9f;\xde\x89<\x0d\x86v(j\xe5\xec\x97\x91\xa5=\xec#c\xbf _\xd1\xb6v\x10\xc1\\\xeb\xb5\xa7oMj\xba\x1e\x08\xbd\xdf\x0c;R\x89d\x08\xc2\xc0\x06Qp\xb0\xa5\xa1#6s\xd7;(\x9aXl6\xe6\x01\xb9m\x86+\xce'63\xcb\xfa\xe9\xb4\xce\xd8\x0c\xf1\xfd\xd4\x92\xa1\xdbRb\xd9\x1b\x8aA\x9b\x11\xfe\xa0Xd\x93\xa0\x90v\x8ek\x1dz\x92\x8a\x8d\xbd\n\xdc\xecL\xd4\xe6\xe4\xb2J\x93b\xce\xe7\xfd\xf9\xbcwV\xc0\x1aJ\xcb\xb6*;\x15h\xa9rQ\x8c_\x11\xfbPN\xc4\x9e\xafn\x9a\xb6s\xb2\x00\xc8\xaf\xc8q\x1f\xf7\xf6&\xee(S\x86\xd0K\xe5\xb2\x8b%:\xb2\x17\xaa\x1aw1\xb7b`;\xd9\xa2\xc4\xfa\xa1\x0d\x8f\x1ch\xbb\x15\xedN\xfef\x0f\xf3\xa2jJ\xfa\x9a\x94m\x7f\xdf\xf6/\xfa\xd5\x1dyy\xf2\xeaG\xf5\x90\xb8\xd8\x1a\xf2\x1b\x04\xf4\x98\xb5\x9c\xf3A\xef\xaf\xe9j\x05|\xdc|\xfa\xf8F\x9d\x80\xe2\xfa\x08\xe7\x92\x928\x1a\xb9q\xfdO\xc8[qG\xc9\xd0\xbe4\xad\x87\xcc\xca\xa1\xce\x08\xcdp\xfe\x02\x1f\x8b\xe4R?\xa6\xc9\xc1\xde\x9e\xef\x9a\x86\x16t\xd2.\xea\xa6\x16\x04\xfd3J\x12\x10\xca\xa1L0\x91\x19%\x93\x9c\xd8\xee{\x8b\xf5\x9e\xec\xd6\x86\x16M\xa2\x9e\xcfC\xba\xa3\x1bZ8\x95\xfa\xb4\xfeC\xe9\xd4cG\x03\xb4inp\x94TzR\xf5\x84\xb4\xea~\x7f3\xb4\xe91\xf8\x8b\xb8\xca\xa1\xc5\x13\xac\xefo\x18\xc7T\x02\xb6\x0b1\xe5\xc1c*\x01\x92(\x18\xa6:\xe7=\xc4\x8e\xa9\x04\xec\x1fS\x9d\xf6\x08\xdd\xc3\xb9\xee\x91\xce\xf7\xe3\xc0G:\xda\x97\x1b\x1f\xe9\xea\xb0\xce|\x84\x81'\xe2\xd2G8{\x0c\xc7>\xc2\xc6\xde\xdd\xfb\xd0\x9eX*\x01\x0f\x1f\x0b\xe2\x03\xa0MC @\x0b&j\x8f\xaa1iW5\xcfN\x88\x17\xf2\x97\x07\x86\xf4\xedA%*|'\xca(\x97\x1c\xfe\xf5\x89\xd2\x04\x8f\xbd \xbf\x16\xfcs|N\xaa\xa1\xd7\xaa$4\xa0`\xaeH\xcb\xe6\xe1k%\x8c\xe4\xf8W\x1e\x05Q\x91yy<\xd2\xe1\\\xbf1\xae\xb9\x05\xf3r\xb71\xb0[\xda\x82\xe8~\xfb\x94\n \xd1\x9a\x1f\x91*\x1f\xf1\xba\x1e\xc9\x95<\xf0\xf9\x9f^\xad\xc3\xa8\xcc!\xa8\x05\xebs<\x85\x8a\x1c\x8fR\x83\xe3\xc9U\xdd\x18\x9c:\x1b\n\xee\xa6\x7f\x03V\xef\xca\x1d\xb0RO\xe9\x1fc\xd5\xab\xe5\xf6~a\x16\x98\xcc9E\xdc\x13\xc4t\x9f\xa0\x02r\x95\x8cm[ah\xb6\x14\x9a\xab\x18b\x0d\xc5\xa8\xc5)\xc7qh.\xf2,\x8d\xaa\x8d.\xc3\xbf\xfei\x082\x07-&\xa8\x19\x981\xcf\x1e\xf8w:\xfc\xdb\xeel\xb5\xea\xb2A\xb2}\xd9n\xe8\xbe1\xb1\xac\x0f\xc4S\x12\xb8\x00\x06\x8c\x14~\xdf\xdbg\x80\xaf\x9e\xff\xa6\xc1VY\xd7'\x84\x9c\xdfoj\x0e~\xe8I\xbf\xba;\x91P\xb7\xaa\x19h\xb7.J\x8ah\x89\xbcR8S\xe7;\xe5R\xa5\xa0\x11k\xf9\xe1\xc9\x1b\xae\xc8\x9a\xc3\x8d\xc0u\x97\x1e6\x97;l\x9c\x96\x01Va1\xb8\xe9v\xb0\xb3\xe2c\x9a1\x81\x82fT\xce\x95\xc8\x88\xcf7d\xd5hSj\xbc\xc7\xc1,\x9e\x847\x18\xcc\xcf\x03\xf1\x0b\xf8\xe3bH^\xb1>\xd8\x9f\xa2\xd6z5\xb5\x05\x8e\x7f|&\xa5=\x06\xcb\xe8\xda\xda\x03 \x8e\xe1&\n\xfe\xee\xb8Sewj\xaa\xc1\xc8\xce4\xe6`\xbe\xd1M\xd7\x96\xb05\xd1\xd2\x9f$e\x02\x8e\xb8I\x13\xb9\x95\xf2\xe0\x117I\x92\x8c\x0c\xe4\x88\x9b<\xe2&\xf1\xce\x8f\xb8\xc9#n\xf2/\x8a\x9b\x94^\xc0\x90F\xe23\xdc\x92\x04\xe3.\x195\x0c\xe5\xf0TK\xf8\xf7\x9e\x83\x1b\x0bvi\xe0fm\xc1\x8cC%\xa4\xa3\x9c\x01\xb2S\nF\xa1\x1b\xb1\xcf\xe3\xb4j\x98\xb8\xe13\xc1u\x18;\x877\x86\xa8\xf4\xc0\x90b\xe7\xc7%\xf7\xbbK\x04\xa9\xda\x9adh7\xa4\xa6\x0f\xb4\x16\xca\xe7\xe8\xbe/\xdbn\xd5\x0b-\xea\x84D\x08r\x9b\x03\x9b+\x9e\xbd\\\x98\x8e%n\xb4]Uk\xc4\x8c\xcf\xba\xe1Z\xb2\xa6\xa9\xc9k\x06P7o\x0bUC\xb6\x0d\xd3\xc7\xd9\xf3\x0e5\xc9I]\xf5l\xfeZA\x8f\xf6\xbd\x0ef\x80\xc6z\xbd*\xca\x12\xd1t'*\xdb\xa8N\x18[\x9335\xed\xb8\xac\nK\xb2\xd8\xaa\xfcS\x08\xb7\xa2\xae\xd5\xa7b\\D\xf9TV\xecZ/>\x19iGt\xbf4!:\x8c\xd7\xff\xdeK\x01\xb2\xaeh\xbdB\x9c\x840\xcdu\xdf\x12\xda\x14\xd75\xdc\xb3\xb8\x97\\H\xd5\xff\xc7\x9df\xc0\x8c\xa0\xc5\xa1O\xc0\x8f\xef\x83O\xc5e]p\xbacU\xf8\xaem\x07\xcdF)\x91\xbf\xba\x91R\xca@\xc6\x0c[s\x83\x1ew\xf1w`\x11sX1\x18\x01\xcb\x90\x86\xfdjv\xf27\xfe\x81|\xa5\x1d\x1dk0\xf01\xaf\xdbm\xa3\x10grA\xf6l[\x82^\x162\xb3\xec\xc7t\x13\xdb\xe4*\xec:\x8c_\x16\xd3^\x8c\xea\x1b\xd4\xc1w\xe8\xc1\xf6\x86\x891?\xe6\x0d^\xe0y\xe2\xe9q4\xd5\x1cM5\xf1g\x8f\xa6\x1a\xfb\x9e\x93\xf2\xf4\xd1Ts4\xd5\x1cM5\xce\xafGS\xcd\xd1Ts4\xd5X\xed0\xa6\x1a\xc1\x81\xba\x85 \x97\"\xe5J\x0fDw\xf0?\xf0\xef\x83\x0d\x8a\x87M\xe0)\xab\xf1\xcc;\x01\xe5\xc7?|\x1e\xcb\xe9z\xcfu\x1dX\xc4q\xb2\xff\x13z\xdas\xd6WU\x16u\xed\xe2\x9by@\xa8\x82p\xa8_\xe1\xc5\x0c\x96g\\\x08\xa46 \x91\x0d\xecb\xca\xe55;*\xd8yT\xd6\x1c\xc2\xad>2n\x8d\x1aW\xd6!'\x93\xcf`7\x82b\xbbr\xb1\xd91\xfe\xde\xf0{\x07\xbb[>'\xdb\xcdJ\xfd\xffP\xdd\xd3~(\xee7\xfds\x15\x8e\x05\x109\x88^\xedh\x8d2\x88\xa5\x08\n\\1\x82\xd1\x99\xc0\xda\x15c\n\xfb\xa2#\n\xb6\\4\xf6\xfa\x0b6\x1c\x8c\xc4\x18\xc9\xcc\x1e;e\x8f\x01\xec\x97o:\xda\x0c\xdd\x8e_\xd3\x04/^\x1e\xaf\x91\xd0\x8d(\x87x\xf6\xf8\xc1N\xd8#\xfa\x90H\xd3\x12\xab|/\x96\xeeI\xccU]\xf4\x83d\xc8\xcb\xe8>'\x8c\x9b{\xab\xc8\x8c\x89M\xed\xe7\xa2j\x06zC1\x85N\xce\x16\x1e\xcf\x10\xbb\x8425C\x1c\x0d\xd6\x97\xa5pDUSv\\\xf9\x91\xb2\xdd\x13^ \xa7\xd3\xf9\x93@LO\x9f\xe2\x04\xdeE\x1f\x88)\x95\xc2\x96\xad\xda\xe6\xd4\xc3\x1fk\xf4\xc1\xd5\xee\xfc\xbd\x9f1\xe1\xf6\x8e\xc9\xcf\x9e\x94\xc5\x06\x0eY4\xa6\x9co?\xb5\x1fZr_\xdc!\x13\xc4\xb7\x88\x8aGlVr'\xd3\x1dX\xc3\xee\x8b\x95\xfeV\xd0\xae'\x8e&e\xd9CN)R\xdc\x14U\xc3\x18S\xb2\xde\xa0aZ\x87d\xca\x04\xcb\x86y\xa9Y'8\xc0\xfa\xb6x\xa0\x1aE-X\x93\xaa\x04\x1a`f\x85\x14^6\x8e\xff\xfd\x07\xa6\x9c\xffS\x8c\xdcBd\x7f2\xfc/\xa4\x10\xf6K\x91uBZ-\x0bl*\x9e\xf3\x85\x90\xf3\xc2\xbf\xc1\xfb\x96\xf7/\x1f4\xcd\x93\xd2\xdek\x1a(\xe5\xafI&Ja)\xdd\xaf\x85rQM\xe7\x14\xcb\xcd\x08\xc38!\xe4\x0f\x03H+\xcc\x8a\xb0\x14\x0e5\xddmuV\xf7-\xe1\x18cR0\x95\xe3\x1d\xbb.8*\xd0\xb2\xa6\xd6\xd0HGK\xa8\xd4\xe0\xe4\x0e\xf6\x98@\x83B\xfb\x19\xc7\xf11)\xb3\xae\xea\x81vtE\xee\x1ed\xd2\x80\x81v\xc5\xd0v\xe6}D\x18\xea\x9caz\x19\x16/\xc8\xbdh\x08\x19\xc9),G\xbd\x93\x91\xd0;\xccn2\xca\x80\x96_\xe2\xda\xf5ZO\xdc\xa2\x07$\xfb\x06\xbe\xaf=\x81\xdf\x98\xd3\xc6/\n*Zrs\x9e.\xa4\x19\xd3\x1eB\x1fe|L`\x1c\xeaC\x9e7\x18^\x92C\xc5\xe3\xac\xb9\x07P\xa2\xff\xe1\x08\xb9/\xba\xfe\x161\x0f\x11\xd2\x0f\xc5\xb0\xf5\xb9\xd5\"su\xae\xac\xb8\x95\x08\xc3\xe0\x9f\x18\xff\x00\xe5\x02K\x86\xd4:{'\xec_[\xae\xb2\x82\xd5\x89-\x01G\xcao\xb6\xb8Q4:7a\x8f\x97\x08\xeb9\x7f\xff\xf1\xf3\xe5\xd5\xc5\xe5\xd9\xe5\xe7\x8b\xa8'\xc4\xf7\x9e\x15D\x96\xf6\x92\x11Xf6\xe5\xa5\x99\xc2d\xcc\x06\x03-:\x01\xbe\x99\x8b\xbc\x86\x85\xa1\xd9M\x84\xa3\x9d\x8a\xf04\xb1g\xd8zz^\x88L;>OH\xcc\x9a\xbdC\x1bRt\xd7\xd5\xd0\x15\xddn\xfc\xba\xb9QL\x1d#\xb0\x0d\xf3\xf8\x921l\xfe\xbf\xe1\xa5TR)gC\n\xa1_\xcf\xd6\x889\xda \xe3\xbb\xbc\xad\xe8\x03d\x86\x81\\s\x00PC\x02\xe0\x91\x9eEv\xba\xc7<\xa7\xf7x\xbe\xfc\x878[\x14\x1cPL\x90\xdar\xf0\xef\xd3Qe\x97\xba\xaf\x87\xa0\xe7\xf62O\xb2_\xf0w%\x9fri\xc7[\x06\x06i\xf3\x90\x12\xe3\x13[\xbejnH\xbf\xe5X\xc4\xe7\xeb\xa2\xaa\xb7\x1d}\xce\xf4\xc1\x0d\xa4\x00\x986\xe71Q\x7f\xf1\xf9\xf7d\xf9\xe9\xbe\xf1\xf1\xec\xc2\xef\xd67\x1f\xbd\xf8\xcf\xf3\x8f\x89\x8f\xbe;;\xff=&\xfds\xf8N\x97\xfb\x1e\xaa\xb9\x1d\x12C\xd6\x93m\xd3\xd3!\xc5g\xefN\xae\xdd3\xfb\xcd\x8av\x1dw\x1e\x0fs\x87\x0d\xb4\xdeb\n\x0d\xda\x0d[\x18\xbb\x1b\xf6\x9b\xd6\x8db\xfd\xd4L\x96\xc9;\xbc\xabx\xee\xb0\x15\xa4b\xb9\xafz\x9e\x01G\xc8\xc1\xb6#+Z\x17;\xba\x1a\xf9Le\x8cm\x03\x9b1\xf6\x9bw\xfc#\xd4\x0b\xe5\x96}S\x14IP\x17\xfa\xe0AA\xfd\x00\xdf)m\xcab\xd3ok\xd5\xb5\x14\xe0k\x88\xf9\xe6\x82@\x9dE\xe8@\x035\x7f\x91\xfe\x81\xfe\xb3\xfe;2\xe6\x16\xe0)\x11\xda\xb5\x1c\xb6H\xf4${\x17`g\xae(b\x82\xbd\x84\x10M\x89R\x95\xc0MDP>\x0en\xcf\xeeU\x0e|4_\x89\xbb\x11\x0e\xe3s\xe8\xf9mZF\x86\x0bt\x05\xced_\xcf\xda5\xd7,\xf82\x14\xc3P\x94\xb7@U9\x00\xd9>\xe75\xb3\x8c\x1dgP\x13{\x85\xdfGbuo%\xdc\xd4\xb0\xc3\xca\x1f\x93\xcc\xb0\x10\x1f\xcc&i\xcf\xa6\xd8\xfdl\x13\xb1 \xf3\x8a\xe7\xa0A\xf4\xee\x9f\xc8\xbf#\x91\xe4\xd2\x8d\xa10\xd1\xfd\x1e\xd2\xdeN4\x92\xa5\xa7\x11\xc0\xdf\x99\xddc4\xc9\xc0\xd8\"%qr\xfa\x8d\xa7 \x18[\xa8\x0cNn\x9f\xbe\xf27\x91\xea2\x13u\xf2x\xa0\xc5\x18+\"$\xa2\x1e\xae\x93\xb2_c\x05e\x96\xe4\xdc\xaf\x80f k\xd3Q\xb5\xa9\x88\xdaT4m2\x926 E\x9b\x8c\xa0MD\xcf\xa6#g\xd3Q\xb3\x89\x88\xd9\\\xb4l\xec\xdc\xf7\xef\x870J\x16\xf0\xb0\x08\xb9\xa0\xb6\xbd7t\xec\xbe\x91\xb1\xfb@\xc5>\x1a\"\xf6 h\xd8\x03!a\x1f\x15\x05\xfb4\x11\xb0O\x00\xfdzh\xe4k\xe8&9\xb1\xa8\x0b\xb9GK\xba\xb9\x05]\x02\x90\x1d\xa3\x90Ke\x17q\x91A|\xbc[P\x1e\x9e\xb1\xfb\xc4pK+W`h\xd6-\xce\xb59\xef\xa5\x95=}\xafZ\xd1\xac\x8b\xe68)\x9e\xc8\xb0j5\xe6\xea\x81\x90@\x98\x9b\xeb\x02\xf3w\xb7\x0dr-\x89_19\x94g\x81\xba&\xb3j\x9a\xf8\xa7J\xbbE\x127h\xd1\xce}\xe4\xb9\x98j\xf4\x8c+\xaa\xb1W\x8e\xb7T\xe4f&\xe8/S\xda\xf5xG\xfd?xG\x8d\xcb\xc1\xb9\x89\xf5\xdc\xd9\x0c\x96e=\xe0\xa5Y|=sK\xb0\x1eo\xcb\xc7\xdb\xf2\xf1\xb6\x8cl\xa8\xe3m\xf9x[>\xde\x96\x8f\xb7\xe5\xbf\xd8my\xd1\xb2\xa7SK\x9e\x06\xca\x9d\xce\xba\xaaD\x91\xa6\"\xaa\xc4\xa8e\xea\xde\x18\x89\x07\x07\x14\xd7\xc6\x869\xb5J\xfduJ\xe3\x1d\xcf\xaaO\x8a\xef\x96\x05\xeb\x92\xee\xe9\xfen^\xb1\xcd+<\xbe\x0b\xb5[\xbcF'\x1a\xef\xf3\x7f\xfc\x0e?mK\"\xc2\xe7\xbd\xd8\xa5\x9f\xb4\n\x01\xb2\x84\x87\x0c?\x1dC=-\x83\x15\x8e~0~\xfc_\x0d\xf3\xd7\xbfd\xb5:>\x14\xf4\xb0\x0c|\xbc\x18 \xf1\xd8\x12\x08p\x07\xb8\xcf\xd0\xaa\x90\x8dQ2\xa1i\x92\x8eq\x04\xe6\xdf\x0f\x17G\x10b\xe5\x9cm\x1d\\xC0\xce\xf3q\xf1\x9f\x8b\xda\x9bLv\xa3+,\xa1\xc9\xcfh\xc5\xf3QX\xb1f\xdf1\xfd\x11\xa8sK\x0d\xdf\xb5\x08!U\xd60Yd\x9c\xa9|\x11\x80\xb834\x95\xbe\x18\xaa^\xc4`\xb7\xa4\xd8l\xea\x1d\x8eG\x85 \xbcp\x02X\x05n\xaa\x10\x0f\x18\xefy?\xb1I\xa2\xef\x0c\xf4{\xf5u[\x19\x18\xb4\x14\x14\x12\x95\xa5}\x8e\x0e5\xfeAr\xf0\xac\xfaN\xcd\xcd\x01H\xba+\xcej2\x8f\x97Be\x10\xd5\xd8\xachQK\x1e?\x93\x8b \x80\xed\xc8.\xd6\n\xa8\xd8[70\x87\xb8\x8d(\xa5\xc8O\xe8io\xa4F\xa4\xf0O\xfc\xc1\xb1\x04\xd0\xd8\x92\x8b\x01\xe9\xaf\x84\x8d\"\xd3\x0b\x049\xa4,\xf4n\xa0TP\xa8\xfb\xc3\x17\x0d\nqs\x80\xf2A\xf1\xee\x1f\xad\x90\xd0\xd8\x06\xa7\xa4\x90l\xa2pWu]Cj\xd6\xe5\xb2:\x1e\x8d\xbd\x86\x99*\xf6\xd0\xd1\xd8k\xb6\xa3\xb1\xf7h\xec=\x1a{\x8f\xc6\xde\xa3\xb1w\x96\xb1\xf7\xd2\xd8R\xdaio+\xf2\x7fs^\xb5\xd8\xc6nK\xba\xdd\xcf\xbc\x08\x80\xd9N\x98t '\x81\xad\x0d\x08\xa0\xd1\xa9V\x06\x8d]\xe6N\x85\xe5O=\xeb?+t;\x1cA\xe2F\x12\xc0:\x1a5\xc7\xcc\xd7\xb4\xc3\x15\xffa\x92\x8d\xcf\xd2\x7f\x8cQ(\xca&\xd7\xc5j\xd5\xf5\x9a\xe1\xf1z;p\x9dW\xe3\xca\n\xe2\xb0\xca\xf5\x91P9VQ\x88U\xbd\x94Vx\xd55\x18\xc0P\x1ds\xd8\xa4\xea\x90Q\xf3\x16r\xdf\x0e\x11\x9al\xbaB\xccUh?\xa8Yj)S\x94i~\n\x8d3\xdf\x9a\xe4\xb1\x1b\xd9\xdf\xfaT\xfb\x90k\x0d\x12\x043lB\xba\x1d\xc8\xb3\x1b?\\\x9c\xd5\xf5\xefm\xc9\x14\xae^\x14AN\xde\x8f\"5\xcaU\xa7\xbf7\xbek'^\xf5%d\xf5\xcb#\xab\x038\xdc\xd7uq\xc3\xf7\xb6\xca\xda\xda\xca\x07\xa5\xfc\x15O7d\xd7nu\x9d\x0cL.'jz\xd2\xeb\x87\xcb5S \xf3\xf4\xda\xe2r\x9a{%\x19\x04\x0b'\xd6\x8c$U\x10\xdf{\xf1pQ7\xbc\x10\xf7b\xbd\x82<\x94\xc2\x16\xe5\xcfU\x91q^Y\xfc\xc69\x8fy\xfdp\x19;\x1a*!\xfe\xa1\xa9wP\xe0b-\xcb\xf6\xb7\x1d\xaf\xc5o\x12\xeco\xdbm\xbd\xe2&G\xb3\xda \xbc\x949+H\xf5\xf0\xf0-I\xb0\x06i\x94\xb6\xf7\\\xb1\x17\xbf\x81\xeaX4<}[/\xfd'0\x91\x16\x95m\xa3J\x8d;UK\xce9\xf5\x9a\x87\xfa\xcb b\xb4\x1b\xb2\xe5\xf1\xcew4{\xb6\xec.\xdc\xc9\xab\xab{;\x93\xec\xf2s\xc7;\x91\xa7\xa5\xaf\x06;T\xa8\xd7\xf7\xdb\xa0\xc2\x91-zl'\xb9\xd3\xb7&5]\x0f\xb2\x0e\xbd\xf0j\x89\xab2Xs`KCGl\xe6\xaew\x10R[l6\xfa\x9che\xde\xb1\x99\xc1RF\x87\xd2I\x87\xe7F\xeb\x8c@%\x1f\x9e>\xaa\xdbRb\xdd\x11\x8aA\x9b\x11\xfe\xa0Xd\x93\xa0\x90v\xf6\xf4\x14\xd0\x93\xbc\xb1\xd9\xab\xc0\xd5*\xad\x0e>\x93U\x9a\x14s>\xef\xcf\xe7\xbd\xb3\x02\xd6Px]#\xa6\x1b\xd1R9\x15\xc7\xaf\x88}('b\xcfW7M\xdb9\x90w\xf9\x15\xd9\xdd\xb8\xf5\x8e:\xfa@\xbb\x9e\xee\x7f\xb1DG\xf6BU\xe3..:\x8a\xefd\x8b\x12\xeb\x07\x92n\x90\xb6[\xd1\xce\xce\xd7I\xc8E\xd5\x94\xf45)y\xa9\xe2\x17\xfd\xea\x8e\xbc\x05\xf9~\"\x1e\x9c 2#n\xd8\x9f\xae\xce#\xc4\xe6\xe9\xf48wX?^U\x9fx\xd4}\x92:\x8b\x88\xeaJ\x92\xe6q\x19\xf5\x9fD\xae\x00d\xe9k\x00\xf1^\x05\x08z\x1d \xf8\x95\x80\xec}~\xa7_\x11\x10bBEF\xaf d\xd6U\x01!f]\x1eH\xe8\x02A\x822\x96$\xd4\xa5\x89\xcf\xe4\x8c\x0b\x85\xffS\xf4\\*\xc8\xdc\x8b\x05B\xafj\xd0\xcb\x05\x99q\xc1\xc0z\x81+\x87\xf7\x92A\xd0\x8b\x06\xf1]6\xc8\x01\x16v\xb9\xcb\x07I\xba\x80\x90\xf8%\x84 6M\xd9\xa6_F,B\xe3\xd5\xc4\xfa\x03v?\xc93\xdc)\xf7)\xdb\xb9\xc6uw4\xe7J\xfc\xb6\xb4\xf2O\xd2\xba\xe4\xf1\x9aii\xc9\xb4\xdd\xa9C\\\xc8Qu\x9e\x93M\xd1\x0b\xa7\xa3\xb6,'\xf0w\x8b\x08?\xe4\xa3'\xfc\xf9\x88\x1a\x16Rtm\xd1q\xcbL8j+!^#K\x9e\xf9\xc9\xb7\x07\x95\xa8\xf0\x9d(\xa3\\r\xf8\xd7'J\x13<\xf6&\xe4 \n\xe9\xf0\x9c\x973\x1eqU\x0d(\x98+\xd2\xb2y\xf8Z \x8fa\xd2\xf59\xdd\xbb4\xe3\x02-\xde\xfa\xc8t\xdd>\xf9\xea|_|c\x97\xcc\xab\x9a67\x83\xe3=\xb1\xeb\xe8\xc8\x15\x1b\x17\xcc\x18?\xf4m\xb85\x11\xd5[\xb2\xfdB\xdeS\xef\xdb\xd5\xb6\xa6b\x8c}\xfa \xffO90|\x1b\x0d\x9b\x91$K\x8d\xf1\xa2 \x97\xe4\xd2t\xfa\xcc\xb4\xd6l\xb4\x1d\xea\x8cl\x13\xdcBB%\x81\x0d3In\xfb\xf6;\xf1\xeey\xe2\xa9\x1au\xb4\x03\xcc\xdc\xed\x169\xc7\x0e\x90\xb8\xe3s\x84\xeb\xfc=\x9f+s,\xa3!r\x16\xfeu\xa4\x92=I9b({\x192\x85\x8e8k\xec\xd9M\xfa\xb2\x10\xc3\xafW\xa7\x99n\xf4\xf5\x9a|c}E\xcc\xbd!co\x8ct\x9a\xa1\xd7\xbf\xf5\x166\xf2N7\xf1\xfeo6\xf0\xa6o\xbf\xbf\xf6\x11\xe0|\xfcY2?S\xc0\xf4\xff\xb6\xe3\x89\xb6r\xe5=\xa4\xbf\x8a\xe0\xa0\xfe:\"\xdf=\x96\xad\x89\x0b\x9d\x01\xe2Uk\xa1$\x81\xc9\x0b6\xedd8:\x0f\x93N\x93\xa3\xf3\xf0/\xe5\xe2[!rt'\x1c\xdd Gw\x82\xd9\xe2\xf3;]\xcdD\x88\x1d\xdd \xd3\x94R\xff\xa7xt'\xa8vt'\x1c\xdd \xd024\xb4\xa3;\xe1\xe8N \x81+X\x86\xff \xef\x12\x16\xcc\x0eap\x83\xe4r\xe8\xa9\xacq\xca\xfe\xb2\xb6\xd29hQ\xf9\xfe\xce\x87]\xf2\xad/\xc50=z)\xf0\x8a\xed\xcf\xa4\xd5^\xe5)ok=\x15\xba\xccz\xce~\x16\x03b*\x9dx\x9b\xdd\xfa\x84\xed\xaal\x9b\x81m\x7fA\x7f\xd3\xb5%/Fo\x96KD9\xb4+\xf6$T\xea\x89W\xe8\x89U\xe6\x89U\xe4\x89V\xe2 V\xe0\x89V\xde\x89T\xdc\x89W\xda\x89W\xd8\x89T\xd6I\xad\xa8\xe3\x97\xa0s*\xe8\xe0\xf5r\x16\xaf\x93\xb3\xaf\xfa8K\xd6\xc59x=\x9c\xbd\xd6\xc1\xd9s\xfd\x9bG\xa9{\xf3\xb4\xea\xdd\x84\x7f\x0c\x0e\x03\xfe!\xd6UsG\xae\x8b\xf2\x8e\xfb\xb3\xd9U\x83\x1d\xca\xdc\xea\xc0\xe7\xca\xf4\xbe#Ug\xa3\\\x04\x00T\xbe\x0f*\xb7\x0e-4\xf7\xbb\n\xf2\xe5\xdbD$\xf0\xb9E\x8b\xd5:\xb4PN\x07\xb7H\xf0\xf8\x870\xbb\xeb\xae\xbd\xe7\xfb\x83\x97\xc6]\x17\xfdvu\xfe\xfe\xe3\xe7\xcb\xab\x8b\xcb\xb3\xcb\xcf\x17\x1e\xe7^\xe8\x8d\x8f\x9f>|\xfcp\x91\xfc8\xfc\xe6|f\xc2:\x98\xc7R\x0cp\x12\x1d\xa2;+\x91\x174#\x16/e\xccM\x12\xa7\xdb\x86\xab-\x0e1Xq\xb62\xce\x9f\"\x93\x89\xcf\x84\xfc\xabmJ\xd3vVC\x8a\xee\xba\x1a\xba\xa2\xdb\x8d\xdf\x1awu+\xa1\x0b\x9b(\x95#\xf8\x0d\xe7\x07~\xc3\xb9\xa9`\x9b\x1b'\xc7\xa6\xa3\x0fU\xbb\xed\xeb\x9d\xfb\x01\x8c\x06,\x8d3\xf1y]vEy\x07j2\x9c\x11J \xa2R\xa2\xe1j\x0c\xbc\xae\xbf\xe3\x1c\xc1\x8c\xb1\xf2\xb6\xa2\x0f`&\x82J\xf4\x8c!\x97\xa0\xa8R\xbf\xdf\x03j1\x11\xfc\x1fB\xfc\xf2\x13\x89m\x0014\xb5\x0f\xe0\xdf\xa7\xa3&(\x15.\x87\x945\xadd\x828\xbc\xe0\xcf[X\x04M]u\xb5\xa4Jr\x88|V|\xbfU\xcd\x0d\xe9\xb7%#\xf4|]T\xf5\xb6\xa3\xcf\x99\x04\xdd\x00&,}\x0e\xfd\xf2\xf1\xe2\xf3\xef b\xc8}\xf6\xe3\xd9\xc5E\xf4\xa1\x8b\xff<\xff\x18}\xe8\xdd\xd9\xf9\xef~a\x99\xc6_\x8a\x98\xf4P\nt2~\xf6\x0e\xc1\xa2!\xdb\xa6\xa7\x03\x0e)\xc0;eSf\xf7\xc6~3\xa4\x0b\xd5v\x0cG-\xc1\xf2\xaf\xb7u\xbc\x036\xddv\x07\xec7\xad\x03\xc5.SU\xfbj%\xd5[\xde\xd5]\xb5\xd9\xd0\x15Y\x01\xa6\xf6\xbe\xea9\x94Y\xc8\x96\xb6#+Z\x17;\xba\x1a9\x8c\xb3\xc4\x16\xd7f\x89\xfd\xe6\x1d\xb3\xf8|||\xb2\xaf\x80\xaeN\\\x01\n*\xd4\x07\x10\x00\xb4)\x8bM\xbf\xad\x15})\xf3\xd6\\D\xc3\x97\xa9\xe4\xb3\xe5 \xc6\xbfq\xa0\xf0\xac\xffN\xb3fppZ\xbb\x96\xdc\x0b\xc8\xbd\xa4\xdf\x02F \xd4\x1a\xf7\x82''@\xa0?mI,\xaf |\xd8\x13\x0d\x02\xfe\xaf\xc2\xa6.\x075\x9a\x0b\x84vm|\xfe\xff\xb7\xf4\x9bd\xc1\xeaZ\x9b0\xc4_\xa2\x9fK\xa3\x97\xf4\xa1\xe8\xd8-\x92\x7fy\xa4\xa37E\xc7c@\x94\xd1\xab\x8a\xfbG\xce\x99\xda\x96|\xd2%\x88\xca%\x0d\x85\xb3\x0e\xd6\xa5\x0c\x82K\xe0 \xa2\xb6>\xbbS\xc4\xaa\x17\xea9\xd7\x92g_Z1Uv\x9e\xdd\x0e\x14Z\x8d\x1cj\xb1C\xc7\xe4b\xee\xd3\x8da\xc9\x96\xb9$\x9b\\\xb65\xce\x7fZF\x07\x91\xde \xda\xde<\xb6\xb6\xa7de{R\xf6\xb5\xc9\x96\xb5\xb8X\xbd\xd0\xbe2g\xa7\x9bh\xda\xb4\xb5O\xda\xdd\xd1\x9d\x9d\xb5\xab\xf1\x1d\x1de8\x8dx\xf6N~*\xbb\xf8)\xee\xe03\x19\xe2\xc5&\x0c\xb0\xa9\xd2&\xd3\x8c\xc7\x9e\xbaO\xc7v0\xd8H\x925\x83\xf4Sr\xba9\xd62}$\x9ca3\x8c\xad\x9aqU#\x98bfM>\xd4\xe2F\xcb\x8895bH\x0d\x9aP3\x8c\xa7\xe1Sm\x8e\xc1\x94\x18\x08\xa5\x80\xa9t\x8fF\xd2'e\x1e=\xa4atQ\x93hP\x96\\lh9\xcd\xa6\xc6n\x03\x13\xf5\x7f\xcc<\"\xc8\xc5\xack\xa69\x13\xb7\xb5 R\x0b\x1b\xdcL\xaaIV7\xf1\x8a\x87=i\xf2\x84\x1f\x16\xb1\xc3\x19\x12 \xda\x9d\x1c\x03\xf2\x97q<\x1a\xc1\xe4\x91-i\xbd\x0b\x0d)\xcb\x9e\xe7%\x83\x0db\xa2\x8dO\xbd\x9bd\xda\xc0\xd90W#\xc3\xea\x87\xbe\xe8\xb7\xfe)\xa4\x13{\x9cT+c~,{\xa0\x87\xd5,S\xa0\xcd^\xa2\xe9&\xcd\xb6\xe5x\x0c\xed\xde\xbcr\xc5\x98\x06%Y,j\x88)\xd1\x99\xed=\x98\x14\xa3\xa3J\x11F\x11\x12\xc11\x85D\x149\xc4\xf8r\x84\x96E\xcb\x12\xc9\xe9\xe3\x9ej\xd8\x8c\x8c&U,L^\xaf\x8c\xe5\xc9\xe1;n(\xcd_D\xc4\x8c\xaa\xb8\xb0\xf5\x92t\x9b*\xf6\x05'\xd8Y/\xf4\xd7\x92\xb5\xa0~\x01\xf7\xaeP\xf3\x04\xf0\x1c\x83\xaa\x1b\xbd\xd8~\xee\x84\xf3U\xf4\xc0\x8d\xbd\xedZ\xcc\xad\xb8\xcf\x89\xbc2\xe0\xf7\x15)\x9a\x90N+\xc3Y\xfc\x04\xf1\xafb\x8c\xfc\xc8W\x13\xe7\xc2\x0f\x11\xbbm*\xe9b|\x99\xc3\xa1\xab\xb2\xa8\xeb\x1d\xa8\xddC\xab0\xc8\x1cA|eC\x9e\x8fp\xda\xa8\x89\xdd\xa1\x85p\x8aw\x0c\xc6y-\xa2M\xc4\xfcU\xd75\xbd\x12\xf1\xe8\x93N\x7f\xe74q\x11\xad\x91\xcc%\xc8Ch\x0e/\x12\xccb\x82<\x81\xe4\xf1\"\xe1\x8c&\xc8#v./\x12\xcen\x82Qp\xf2y\x91H\xa6\x13\xe4\x194\xa7\x17 e=\x81\x96\x92\xfbD>\xe9\xbf;\xcc\xc9\x83b\x10\xf2\x80r\x17\xcd\x8c\x82\x90\\(?\nByF\x96\x14\x84\xda\xbes\xa5 ].\x991\x05!\xbfl\xde\x14\x8c\xff\x03dOA\xba}\xd4\x1c*\x08?\x87\xcb\xa4\x82t\xbe\xa7|*\xd0\x84\xea8?\xab\x8aA\xee\xd2\xd8\x0d\xdaa\x88\xba>m\xf5\x15S\xd8\x8d\xcc\x9f\xc6_\xf8w(\xef\xe8\x00\xca\x1a\x8f\xcc\xa2\xae\xdb\xaftu\xda\xd1/\xdb\xaa\x93p\x9d\xfeT\x04\xfcd\x199r\x93id\xda:\x02\xc0T\x1b\xb5^\xb2\xf5\x86;\x17\xd7_\xb6\xdbj\xf5\x9c\xd0\x93\x9b\x13\xf3l\xfa\xf9\xba|Y\xbc(\x7f]\xad^\xbc\xfa\xe5\x1f\xaf^\xfc\xfa\xea\x97\xf5\x8b\x9f~x\xf93\xfd\xf9\xe5\xcf/\x8b_^\xc1\xd7 \xecj\x1a\x98\x1c\xedY\xbf\xbb\x89+4t\xaa\xded\x8f\x7f\xff\xe5\xe5\xcb\x97\xab\x97_~\xa0\xbf|\xfd\xa9/v?\xfdX\xac\xbf\xach\xffm\xf3\xc3\x9f_\xfe\xbc\xeb^\xad\x1b#}\xf69\xa4\xa7/\xea\xbe\x95\xda\xa0\xdfe%\x06\xa9\xbd\xde\xd1\x12z\xbd\xf5\xf6\xfa\xf5\xd5\x0f\xab/?\xfck\xf5p\xbf*\xfe\xdc~\xfd\xb3,V\xab\xdb\xdb_n\xee\xb7_n\xe9\x9f\xaf^\xc9IK\xb8\xf4\xf9\xd7H\xf7\xa64\xc2n\xa49\xe0\x86\x96\xd4m{G\xb6\x1b{\xf0\"\xe5\x04l\xce\xb5\xbb\xbf\x85\x15\x1e\x16\x99@\xe2\xb3\xe02\x8dfw\xa7#\x99W<\xd8O\xc0,H\\\xa3>\xfd\x06I6\x1c\x8f\x0b\xcc\xdf\xfc\x8c1V\x07\xc4\x9b\xc5C<\x08\xc7\xe6\n\xcc\x9d\x1cFh{\xb1\xccL\xd9\x7f\x9d\x947!\xf9\x99\x90\x03G\xbc\x0cyI0\x11\x9c\x91\xa4\xc4\xea;3=\x8e\xe66\xb3,\xcc(\x01\x9c\x08\xb1\xbf\x0b\xcc\xc8\x9fU\x1e\xc5/\xcfe\x0bX\x00#\xb5Rf\xda\xb4e\xc3\x0c\xb5\x11\xb6\xfc\xa6I2\xd3\x00\x8e\x10\xdc\xbafK\xdb4.\x1bvIV\xef\xd8\x97e\xf3%dU\xa1\xf9\xd7\x16\x1a>}\xd0\x82\x93(\x1eI3\xa9\xab\xc7}\xa6u\xfd\x81\xb4.g\x9a\xdae\xf3\x9a\xdceK\xe0(\xb8\xcd\xa1\x85\xb6\x9cx\"\xd7J\xef\xa5\x84Z\xefe\xc3\xac\xf8\xb2%\x0c5m\x1cy\xd6}/)\x1f\xb0^oa\x86\xa6Z\xfd=[E\x9a\xcc&[\xffes\xbd\x00\xb2\x85\xc63\xd7+ [\x9ew@\xb6\xc0\xb7;Y\xda\xce\xf2\x1e \xf4\xa4?\x01\xf1\"\xc8\x86z\x13d\x0b\xf1:\xc7\xbb\x80\x90k;\xdc\xcb [pN\xf1 \xfft\xef\x83\xffyo\x02\x94$oD\xecQ\xd3+![\x96wb|)\x84L \xb1\xc9\xc8\xeb\xcc\x02\xb9G\xbd\x16~\x16\x1e\xc7{\xe1\xe7\xe7@^\x8c\x18\x03\x8f\xea\xcd\x90\x0d\xf3j\xc8\x16\xf4n(\x02\xd3\x158\xef\xa9\xeb\xfb\xd4\x13\xbd \xe8\xc3\x1eo\x08\xfa,\xea\x15A\x9fD\xbd#\xe8\x93\xb8\x97\x04}\xd4\xf5\x96\xa0\x8f\xe1^\x13\xf4Q\xcc{\x82>\xe8\xf1\xa2\xa0\xcfz\xbc)\xe8\xb3\x98WE\xb6t\xef\xca\xf8FL\x0e.\xe8m\x91-\x90\n\x85\xec\xc7\xfb\x82\x92^\xd4\x0b\x83\xf60\xdb\x1b\x83R=\x8cW\x06\xedzy\xef\x0c\xda\xcd>\xbc4hG\x87\xf3\xd6\xa0\xdd?\x01\xaf\x0d\xca\xd7\xa1\xbd7(\x13{\xf5\xe2\xc8\x16\xbe\x00\xcep\xf2\xa0\xf4\xcc,\xb9\xd0&9\x80\xac\x97\x1d\xf6\xa7;\x84,B\xca=\x94\xe0\x18\x1a\x9b\x99\x07\xc1\x86y2\x06\xa4\x9e\x89\xdf\x7fD\xf9H\xdd9c\x85d\x98\xa6s\xa7OgB\x90\xd7G\xc0/\x1e\xb8P\xadNG\x8b\x8aEn\xf0D\n\x9d\x98\xab\x93o25\xf9\xcc\xbc+\x07-I\xf1\x93\xde\xec\x9b\xe4DH!\xd4\x90X\x06\xb7\x134\x9a\x81\x1ct\x9c\x13b\x1b\\\"\x91Q\xc6\x00\xf4\xe4\xb0#\x9e\x11\xed@\xdc\x88\x87\xac\x99@C\xb6d;\xe0\x14L\x0d\xe9\xc2\xc9\x85\x06\xed\x86y\x90\xd8P\xf3F31\xe0\xc3&\xe3\x8e\xc2 \xb0p\x85.I\xe2\x16%D\xd2\"\xc6\x10rX&\xa9\xc8P\"\x8e\x8e\xb0\x9b\xc3f\x1f\xbfOG\xcd\xdfQ;\x7f|\"\xc9\x94\x883\x0f\x9d\x1ew\x81\xbb\x0f:\xab\xe7\x93\xd9\xe4\x11ga\xa2\x14\xc7H%\xcdA\x8aD'\x8f9\x1f^\x19\x9fD\x00K\xd1\x95?O\xb8\xe8#)\xd32e\xd43\x04\xa1K,e|3\x96}\xca\xf8\xb2#\xe4p2\x81H9\x12\xe4\x0c\xb9T\xfc\xb3+6\x1b\xda\x8d\xaatA\xfa\xaa\xb9\xa9}q\xf4\x8d\xaeO\xf4\xed=%\xf4\xdb\xd0\x15\x9a\xff^\xa4-\x19\xc6h\xe9\xa7U\x94\xa7\x0fb\x1a\xbc\xeb\x1e^o\x9bh\x1a^\x8d,\x84Ys8\xb0\xbd\x8e\xcba\xd7\xc8|\xfc\x1aY\x16\xc3F\xf2\n\x9c\x84\xd7q\x1a\xa6\x8d,\x87k#I\xd86\xb2(\xbe\x8d\xe0\x97=/\xce\x8d\xa8\xf9]\xb6z\xd5l\xdc\x9bEo\xd0*Q\xe9\x03\xfbk\x97\xe5\nc\xe2\x12\xeat\x89\xd7\x97G\xc5\x89\xb3\x06\xe6\xdb\x91\xd8\x114\xf1\xb8J\xfb\x97\xf5^\x95n\x01\xccZ\x86\xa8\xf2\xd9\x06\x17\xc5\xa8Y\xf84\x0c\x9b\xe6sk\xa2.\xcd\xc05-tI\xf3\x81\xc2\"zX\x06\xfel\x08a\xcf\xd2\xbaY\x00s\x16\xc4\x9bE\xb8\x88\xdc4\x96\x0d\xf7&\x01\xb0X\xdaly\x94\xe2!\x1b \xe6\x0f\xff&~\xb8\x9b\x9f\x89\xc5@a\x0b\x01\xc2p0\x98\x8f\xff%@`\xf9\x000\xcf\xc7\x93-\xba\x96\x04|E\xc0^^\xa0\x97\x8f\xb79\x00/\xe2\xf8}\xbd\xe0.\xef\x9caH\x8f\x1c@W2\x98+\x11\xc8\x95\x0e\xe2\xca\x06p\x85\xd5\xa5\xc5\x80[\xf9\xa0\xad\xa7\x04\xd8zT\xb0\xd6\x93\x05j\x0d\x1e\x90V\x14\xa05A\x8bAO8_\x81\xa5D\xc4N*\x10+\x0d\x84\x95\x06\xc0J\x04_%\x00\xaf\x12AWI\x80\xabT\xb0U*\xd0* d\x95\x07\xb0\x8a\x19\xf9\x16\x05V\x05\xebK\xa1\x9bf.\xa0j\xbf`\xaa\xe5\x81T\x8f\x04\xa2:\x00\x80\xea \xe0\xa9G\x04N=E\xd0\xd4\xa3\x03\xa6\x0e\x0b\x96Z8\xec]#\x99\x8f|\xc2T\xf0\xe9\x88''\x04\x9e$\x85\xc1C[\x18\xe9\x14D9\xf9\x8f\x93\xb9\xe8&\x82\xe5\xad\xf5!\x9b2\x0ch!4S\xbe\xf9,\x07\xe1\xe5\xf5\x8aO3f'\xa0\x96f\x8e'\x1f\x94\x14\x80\x8b\xb2\x1e\x03\xdb\xf9\xbd\x98\xee_,JSG\xec\x85\x19\xedy\xa8s`Ei\x83[,k\xec\x02\x10\"?\xc7\x8e\xc79\x17\xaf\x89\x12 i\x90!\xe2l\xa3<\xb8\x90\xd7\x06\xed\xb7@\xdb\xec\xba7\xbc\xa0\xd1s&\xb6\xcd\xee\xdd+\xfc<\x1eC\x92\n\x07rV\xe51\xe0\x9b\x1e&\x82\xb22\x81Lt\xac1)J\x0e=\xee\x19r\x95\xe4%\xaev\xbb\xdf\x0b\xaa\xd1\xedb\x82Pr \xc5\xc62a)s\xc72 \xba\x93\xb0\xe0\x99\x0e\xdc|\xb8\x0e\x07\xe9\x08\x82!\xa8N\xba\x1b\xb7?\xab\xeb\xdc\xc4P\xc7\x9c9\xb1\x01\xcc\xc5\x08\x84r\xe6\x10\xb2)\xb8\x11\xc8\xf0\xa3\x1b\xbc\x8c\x0f\xa8KW\xcb\xffT\xd4\xfa\xdf\x94\xaf\xaa\x97h\x01\xc9\xc2\xa4\xeb\xc5\x1d\xdd%\xaaBi\xda\xdd\xff\xd8\x1f\xf2\x1d\x05#\x8c0Cwt\xd8v\x0d(\x11\x1f\x8b\x1b*\xf1\x10'\x0d\xfd6\\\xb1\x87\x87\x96\\\xd3\x1b\xe7\xf2\xfceK\xbb\x9d,\xfb\xcd\x1ef\x93B\xc9}\xdb\x0f\x84\xae\xd7UY\xd1f\xa8w'\xe4CS\xefH\xdb\xf0\xfbp\xbb^\x83\x05\x8e\xb1a\x11\xeco\xdbm\xbd\xe2>;:\xe8\xd2\x0d^\xca\x9c\x95m\xd5\x0c?\xbf\xf2\xcf\x8b#\xe0\x04k|j\x9a\xed=\xb7\xbb\x89\xdf\xc0\xc2S4\x8c7n\x84\xe1P\x02\x98H\x8b\xca\xb6)\x1e\x8a\xaa.\xaek\xea\x81'\xd5\xbcV\x97\x9c F\xbb![^L\xe9\x8ef\xcf\x96\xdd\x85;yuu_\xed}\xeex'\xf2,\x18\xda\xa1\xa8\xd9\x14^\x83\x89O\xd6\x8a\xe7\xfb\xc8\xd8o\xf0\xad\xb0\xbfZ\xf46\xdc|`O\xdf\x9a\xd4t=\x10z\xbf\x19v\xa4\x12\x00\x0fa\xbd\x06\xe7 li\xe8\x88\xcd\xdc\xf5\x0ej\xa8\x17\x9b\x8d\xa9\xc9o\x9b\xe1\x8a\xf3\x89\xcd\xcc\xb2H'\xad36C|?\xb5d\xe8\xb6\x94X\xc6\xbcb\xd0f\x84?(\x16\xd9$(\xa4\x9d\x03h\x84\x9e\xa4\xeac\xaf\x02\xf7\xe9\x10\xb59\xb9\xac\xd2\xa4\x98\xf3y\x7f>w\xf1u\xd6P\xda\xa6\x06\xdb\x16-\x15\xbef\xfc\x8a\xd8\x87rbB\xf2,r\xf2+\xb2\xbb\x81Y2/\x8bL=B\xaf\xbd\xcb.\x96\xe8\xc8^\xa8j\xdc\xc5EG\xf1\x9dlQb\xfd@\x05=\xd2v+\xda\x9d\xfc\xcd\x1e\xe6E\xd5\x94\xf45)\xdb\xfe\xbe\xed_\xf4\xab;\xf2\xf2\xe4\xd5\x8f\xea!a\x104\xe47\x08\xe81\x89\x1b\xe7\x83\xde_\xd3\xd5\n\xf8\xb8\xf9\xf4\xf1\x8d:\x01\x85\x1d\x0e\xce%%q4r\xe3\xfa\x9f\x90\xb7\xe2\xc6\x93\xacwi:\x0f\x99\x91P\x8e\x91\x99\x0c\x9f\x03\x1e\x16H,7-/wrU\x8e\x1e\x87\xed\x05i\x85\xe8\x91(\x90\x0fZP\xdfOEO\xcd\x81\xf6A\x9b\x071\xf3\x80\xa6f@\xfePzf\xad\x16\xedwOj:\xbf\xfb\\\xbc\xe7\xcbn\x12\\qh\xb1\x14u\xe1$u\xd1\x89\x15\x0f\xa5\x03\x05\xc5\x0b\xb1Tuy\x1d/\x00\x1d\x84\x16\x04\x10BK\xe2+\x1a\xb6D\xa2\x9bR<\x93\x8b7\x0c\xd0\n\xa6\xae\x0b'\xafK\x1cv\xea\x88\xf2\x10\x8a\x01b)I\xec\xe2l-\x86Y\x84\xb6\x10r\x11\x9a?\x99]l\\K`\x19\xa1\xe5#\x1a\xa1\x05\xbf\xf2Y\x12{\x06\xd2\x11\xa5W\xc4\xf0\x8e\xd0\x82\xe9\xedb<\xcfA@\xa2\x04cI\xee\xa2s\x1c\xca~\x95\x8e\x03\xf4\xbd\x11Hv\x97\x8c\x92\x0c?\x8c'\xbc\x9b\x80\x98\x94\xaf\xc5\xac\x96\x0b\xa2'\xa1\xe5c(\xa1=%$\xa5\x8f\xa3\x03\xe2)\xc3,<:\xaa\x12\xda\x10H\x80\x97\x80\xb0\x14D\xe6)\x8a\x81\xf3\xdb/\x0c2\xf0\x97\xc8\xe3\x91tx\xa9XL\xe4\xd9`J\xbcd\\&\xf2\xb0?-^2F\x13y8\x94\x1a/\x1d\xaf\x89<\x1dI\x8f\x97\x88\xdd\x84\x96\x87\xe0\x94\xef\xc4\xe5\xe6T4\xa7\x87\x18\xc7x\x860\x9d\xd0\xf6\x84\xecD\x88/\x8e\xefD\xfaX\x04\xe5\x89\xd0=\x1c\xd6\x13\xe9|?\x88O\xa4\xa3}\xe1>\x91\xae\x0e\x8b\xfeD\x18x\"\x18P\x84\xb3\xc7@\x82\"l\xec\x1d\x0f\n-v\xf1\x9c\x08\x17\xf5P\xc3@\xa4\xd0&CI\x8d\xd7\x91aL\x87\x95:\xa4\xa6\xa5\xd2[\x1cb\n-\x084E\xfaE\xa6f.\xe8\xd4!8$%\xd5\x9bl\x04\x0e\x81Q\xa1\xcd3\x01\xc7\xe6\x8b,\nR\x85\xe6M\xdb\x94\x00X\x85v\xe81ODk\x85\xc0\x86h7)\x10\x9fG\x18\xfdL\xccV\x06\"\x16\xed>\x98~\xef\x11\xa6c\x0e^\x16#\x18\x9e\x00_>\xaa\xc8\xb0s\xc75\x03\xb8\x16\x1fO\x02\xb2\x16Z\n\xd7sP\xb6(\xc1I\xa9\xf9\xa2N\x9e\x98\x8b'\x8e\xbe\x85\x165\x11D\xb78I\x9cX\xb2\x10*\x17Z\x9f\x82\xcd\x85\x96\x8c\xd0\x85\xf6\xb832\xf9,\xc0\x88%\xceG\xda\xb9@\x1e\x7fn\xbc'E\"\x89\xa9)\xfc\xd2\x90\xbe\xd0\x12\xa6h\xda\xf8g\x89P\x97\\\xdaHgn\x86i#\x9d\x84\x0c\xc6\x08E\xd2\xfa\x85\xf9\x9b\x8d\x156\xa8I\xdcp4\xb9\x9f\xc5\x14\x8a6Q7\xc7\xaf\x9c\xa1\x15\xda\xbd\x92\x86O-]\xe01\x0b\xdaR\x03\x9b\x8bp\xb6\xc89Y\xd0\xa0aHg\xb2G\xb43 i?~\xbd\xc7A>\x93\x98\x8c\x9a\x19|2\x1d \x8d\x10\x9b\x07\x87\xc6\xb9\xc3\xfa\xf1\xa2\xa4\x89\x07)MRg\x11A\xfd\x92\xa4y\\\x069M\"\xe8i\xb24\x82\x9axQ\xd4\x04ER\x13\x1cMM\xf6>\xbf\xd3\xd1\xd5\x081\x01d@\x11\xd6d\x16\xca\x1a!f\xe1\xaeI\x08{M\x822\x96D\xe4,I\x9a\xc9\x19Xl\xff\xa7\xe8\xc1c\x93\xb9\x98l\x84^\xd5\xa0\xb8l2\x03\x9b\x8d\xf5\"\x12\xa8\xfa\xf0\xd9\x04\xc5h\x13\x1fN\x9b\x1c`a\x97\xc3m\x93$\xec6\x89\xe3\xb7I\xc0\x06?\x1d\xc7m\x11\x1aQ\xdd\xd6\x1f0hw^\xcc\x93r\x17\xf2k\xac\x1e)0\x9aQ\xf8\xbe\xe6\x1a\x89\xadLe\xa8\x93\xf2x\xc5\xd4\xad\xe5\xc2\x9e\xd4!.\xe4\xa8:\xcf\xc9\xa6\xe8\x85SM[\x96\x13\xf8\xbbE\x84\x1f\xf2\xd1\x13\xfe|\x04\"\x0b)\x8a\x94\xda\xe9\xc0}\xd4\xb4\xe4\xbe\xed\x10}\x9c\x10o|J^\xe4\x8eo\x0f*Q\xe1;QF\xb9\xe4\xf0\xafO\x94&x\xecM\xf8\xb5\xe0\x9f\xe3sR\x0d\xbd\x86Yj@\xc1\\\x91\x96\xcd\xc3\xd7Jx\xbf\xf0\xaf<\x82\xfa's\xd2\xf6\xce\x8b=x\xd7vo\xc4\xe5\x14\xab\xb2\x0f+\xe7|\x07\x91\x9c\xbe\x86\xa5\x0f]n\xbf0\xb4 \xa5e\\_\"\xdb\xbaym\xd6\xfe\xb0\\\x96\xf5\x99\x19\xd6\x17\xcc\xae~\x0c\xdc\x8d\x0d`\xee\xb56\x14\xb8\x9b.%\"\xdf'A\x82\x96\xfe\xa6F\xcc\xa70*?|]\xecC\xa8\x1c\xa3\x9c\x8eQN\xc7('\xbd%\xd8\xaf\x8fQNNK\xf0\xef\xc46\xa5x\xe6\x18\xe5t\x8cr:F9\xd9\xed\x18\xe5t\x8cr:F9\x1d\xa3\x9c\x92X8F9\xc5E\xc11\xca\xc9\x8e\xb3Hy\xf0\x18\xe5D\x12\xe5\xe61\xca\xe9\x18\xe5\x84v~\x8cr:F9\x1d\xa3\x9c\x8eQN\xc7(\xa7c\x94\x139F9MF\xb6\xc7b%\xa2\xe1DOb\xf4~\x88\xb3\xfb\x17\x94\xde1\xca)D\xf0\x18\xe5\xa4Z\n\xd7(1r\x8cr\xdaK\xdc\x8aW\xdaG\xb4\x9ec\x94S\x12\xb1\xc4\xf9H;\x17\xc8\xe3\xcf\x8d\xf7\xa4H$q\x8cr\xca\x1d\xe9\xcc\xcd0m\xa4\xc7('\x0fSx\xc8\x13\xbf\xb7\xee4\x9ca0\xf6I#\x87\xfa\xce\x8c s\xee\x1b\xf8_\xadm\x82n\x0c\xff\xa8\x024\x8d] 1\xb1\xc8\xd9\x90\xc3\xab\xf9\xf1.\xc3\xab\xfem\x1a\x1a\x81sD\x91\xa27\x8aK\x8b/\x996e\xbb\xa2+\xc1\x88\x1c\xc1S\x8bO\xeb\x83\x98!\xaf<\x08K\x01\x9bh\x1a\xb8\x92,\x04\xb0t8p\xb2\xbf/\x06\xb4$\xf3\xc1\x96dY\xc0%9\xc6\x1c.8\xb0\xb9\xe0L\x8b\x9c\x13s\xb8\x04@3\x80\xed\x16\xf4\x0e\n\xd1\x14\x07*\xac\x8d#\x88|\xd8K[z'\xc9.\xf7~\xef\x95W>\xd3'#q\x8a\xe1\x18\x81\xad\x13B\xfe0<\xda\x02\xf9\xc8\xceV4\"\xa6/\xdb\x0d=!\xe4\x8cI\x03\x0e\x03\xe0\xa7\x03y\xc7N\x0f\xcba\xdc\xd3\xbe\xcf\x12\xba^=\xdc7:y\xc2R\xd9\x17\x17v\xf4\x9b8G\xbe\x16\xa3\xf7@`\x80\x0c\xac\x8dk\x84\xe6:\xc5\xba\xaa\x07\xda\xd1\x15\xb9{\x907\x9b\x81\x9dGm\xa7\x1b\xed7][\xd2\xde\xba\xca\xfa\x18\x15\x0fK-\xcc\xb8\x98K\x0ea\xea\xeb\x9dT\xb4v\xdc\xb4\xff\x8d\x96[G3#6R\xcb=7q\x1b\xb9\xf7\x86\xee\xbf\x9b\x0b\xc1\xeej\xd4A]ZL\xc4`\xc3\x02-\x8f\x0c\x1f\xbb\xda\x93b\x96,b8\xde/\xb5w\x1c\xc2'\x96\x03A\xbf\xe26\xb5\x94\xde\xd0\xbb\x02\xe0\xf2\x10\xb5\x95*&\x9e\x0d#f\x8f\xa3\xbb\x04\x0c\x14\xa1f\xcd^\xd9\xde\xdf\xb7\x0d\x8a\x01\x03a\xb6\xe0@\x80 \x1c\x10\x12\xa7j!N\xa4B@\xd8V\x92\xf00\xfe\x1a\xe6\xec\x12\"F \xdaN\xd5\xa0\xd4\x97[5\x0f\xed\x9d\xb1>\x18.\xd9\x074A!&\x13]\x0e\x13\xed\xac\xc6\xe1\xc7\xb1\xdb\x02\xc4\x04g)\xff\xe8\xeb\xaa\xb9#\xd7Ey\xc7\xc3\x14o)x\xa58X\x80\xcf\xa7\xd7\x12\xba\x0fC\xb8\xef\xa3\xb5PM\x0e\x96\xd7\x8fj\xf5au#|\x86\xfd\x91\xfe\xcf\xda\x87\xccU\xf8[\x94\x9e\x97\xfba>.\x94G\xe0(\x10\xdb\x9a\xdf\xb1\x86n[\x0e[\x08A\xdd6\xf7E\xd7\xdf\x16\xb5C\xa2\x1f\x8aa\x8bc\xab\x82\xb3s\xae\x00 \xd5Z\x03\xb8\xf3OJ.\xa5dE\xadh\xdb\x91\x7fm{\xdctY\x08G\xb2\xb0\xe8\xfb\xe0\xf2\x91\xf9\x08a8\x05\xc2\xed\xfc\xfd\xc7\xcf\x97W\x17\x97g\x97\x9f/\xa2`\x1e\xfc\xad\x08\x96\x13{\xc5\x8b\xe7T\x10\xa3|\xf6RlH\xd1a\xe3\xb3\x15y\xc9Dj\n\x84\xe6\xa9@l\xa2\x04awh\xda\xb4\xd5\xc2\x13\x8d\xcf\x0e\x02\xe5\xb4wbC\x8a\xee\xba\x1a\xba\xa2\xdb\x8d\xdf-\x87G\xab\x03\x006\\\x0eW\x12\xca\xe9\xff\x1b\xceQ\xd5\xbb\xf8\xc9MG\x1f\xaav\xdb\xf3\xd0y\xeb\xa3\x19q&\x16w\x12\xc0\xd0\x15\xe5\x1d\xdcW\x04\xa8]*yTJM\xbf\x8a\x06$\xf4\xf7\x1c\x95\x811X\xdeV\xf4\x01n\x9a\x008`\x8c\xe1D\x05 \xe1\xf0\x07\xe7^\xc4\xff\x7f\x08\xd1\xcfOK\xb6a\xc4\xf0\xd5\xbe\x81\x7f\x9f\x8e\xda\xb0T0Qr\xc8\x12\x90\x19\xe2\xf7\x82\xbf'\xf9\x93\x0b\xa6\xd4x\xdc\x80 \x1c{>O\xbe_\xab\xe6\x86\xf4\xdb\x92\x11{\xbe.\xaaz\xdb\xd1\xe7<\n\x00R\x13\xe4\xcfqX\x1e_|\xfe=Q\xd4\xb9\xcf\x7f<\xbb\xc0\xc1\xa3\xf6\x83\x17\xffy\xfe1\xe9\xc1wg\xe7\xbf\x87\x05t:\xbf\xa9\xa2\xd9C1\xaf3\x078\xdfS\xae\xbe\x87\xd0\xa0\xd8t\xda\xbd\xb2\xdf,,\xf8\xb8\xc3x\xa0=l\x95\xf5\xd6\xd5+\xd0N\xd8R\xd8\x9d\xb0\xdf\xb4N\x14\xdbLU\xef\xab\x95T\xf1yww\x15\xb7\xde\xaf \x15\xcc}\xd5\xf3\x0cS\xe6\xa0v\xcd\x0fx>\xe9\xc50\x14\xe5\xad\x88:S\xd6\xa5\xb6\x83\x12\xb2\xc6\xae\xd2h\x89\x1d\xc1\x95~\x04\x06i\xb9Bx\xaf\x1e\xec\x9f\x85\xf6S\x97>\xcb\xe0\x1d\xf5\xbbMA\xf4\x11;c\x805\x89\xe9\x06L\xcf]u\xe6FRTc\xc0;\x04b1N\x0b\x86\xa8X\x8a\xb1\x14D\xc4\xf84\xce\x1f\xb7\xb4\"\xce\xec\xc5x\x1c;\x90|j\xbf\xe4\xf1\xea\xc5\xa3-\xc6l\x16\xc2,\xc8\xae\x0b\x84\xf02\x89\xf1\x92\ni\xc0y\x80\x19F\xfdV\x11Y\xa9\xbf\xe8\x87v\xf1\xc7P\xf8\x96E\x0f\xe5n\x92}Xr\x96ik\x0c\x9a\xa2\x8c\xb9\x90\x1dx\xbfv\x18\xb4\x07O\xa5&\xce\x87\xa0Z\x98\xcb\xa4O_>\xece\xd6\xf7\xf1\x93=0\x9c#\x07\xc2\x8c\xe3\x18\xa3 \xbf\x08K\xc9_X\x98\x99 \x93\x870\x13\xc7\xf5`\x13i\x1d\xdb=\x8a\xf1\x8c\x9e\xdd\xfak\xf3\x0fp\x1f\x18?\xff8\xef1x\xe6LI\xef\x08<\xb3\xaf\xd8I\xef\x071\xa1\xe0zk\x82\xf7\xa7\n\xf4\xe9\x08I\xeb\x95\x00\xbb1\xb8\xdbL\xd6#K1\x07\xfb>u\xc4\xfb\xd2/bC\xcd\xd2:\x82\xa4|\x83\x9b\xaa\x8d\x049O\x95\xa0\xc9\x1c;\x10\xc5\\\xf5\x05%\xe0Wc\x0c<\x1aq\xb6Q\x1e6}\x82Nc\xb3\x9by\x8e\xa4\x1f\xc2\xa8\x01\xca\xee\xdd+\xfc<\xd80\x92\x8a5wVe\xcf:R\xd2hSde\x02\x99\xe8XcR\x94\x1cz\xdc3\xe4*qek\xde|\xcc\xd5\xdc\x12F8Q(\xb9\x84bc\x99\xb0\x94\xb9c\x89k\x85Q\x12\x01\x9c\xb7\xc1\x8d\x01:\x1b\xb5@\x1b\xc5\x9d\x84\xd5\x0e\xe2\xda \x91j^\xb6\xd2c\xf6\xcb\xd8\x00\xe6\x02,C\xd9/\xf3R8\xcf-\xe4\x90qO\xd8{\xfe\xe6\xe9\xc5\x1aL:\xf3\xea4 e\x04\xbc\x05\x19\xb0b\x0c\xd1YA\x128\x87%\xd52\xc5\x17B\x85\x17\x16-\xba\x80\x17\\p'\x0f)\xb4\xb0\xfc\xdcM/\xac \xfej\xd1C\x8b*L/\xa8`\x97O\xf0\x96N\xc0%\x17\x99\x05\x13\x9fQ*A.\xb2I\xd0S&aV\x89\x04\x17\x8e\x8e\x95G\x98Z\x1aA\x16B\xb0\xc8\xf9\xca\"\xb8%\x11\xd0r\x08\xfbX\xac\xe5\xca\x1f\xac\xa2\xa5\x0f\"e\x0f\x84\xbf\xcd\x90\xdf\xd3\xcb\x1dh\x05\x0eFrXm\x03D\x81\xd2\xb4\x1bu\x9d\xd2r=\xabcO\x8f\x1d\xc8\xcd\x08\xaf\xa7\xa2OV\xa1@\x7f\xdbs2f\xe8\xc4V\x8a\xbd\x17\xe3\xbd\xa0a\xc3\xb0\x99iq\n(\xa91v!+Z\x01\x9a/f\x01Zd\x88i\xf0Z\xcf\x0cL\x8be@I\x89;\xc1\xb3mOs\"\x1a\xa0\xa1q\x0d\xd0\xc2\x03\x98\x1a\xe3\x80\x12\xd3 \x1d\xd3\"\x1d\xa0\x05\xb68I\xc8H\xe0\x8d}\x80\x16\xd9\x0e\x84,\x1a\x07\x01-\x94\xfd8\x8f\x9f\xdc\xc8\x08h\xbe\xaf\x9fd\xf5\xef\xd9BdF\xc4\x84\x97`\xdbe\xc4M@\xf3EO@[d\x98\x93\xe2)\xbc\xd4d\x9c\xc5\x94\xa8\nh\x7f\xd9\x9c\xefq\xdb\x8el\xf9!\x1a\x01b=\x1a\xbc\x01M9\xdfg\x0e-r\xde@\x8bo\xc5c\xf6\xf6E\xb2\xb7\x03\xf7\x0bV\x0b\x98\x1e;\x02\xcd\x0fa\x86\x962\x8fS\xa2I\x02\xe4D\x9cIjL \xb4\xa49\x0b\xa5\x05&)\xe1\x16\xd9\xef\x06cMB/\x062\x88\x13.\xb0&\xc7\x9dH\x02\xa9\x12/:)\xa1\x19\xcd\x89D \x90\xb1bT\xa2\xf1(\xd0\x9efTJ\x88\xb7G\x8fM\x81\xb6@\x84\x8aA\xc8w\x9b\x99\x1c\xbe\x82\x92\xf3p\x81\x06\xb6@{L\xad\xe5@g\xdc\xa4@\x98\x00\xbd\xf0z\x93\x85N\x94)\x012\xa1\x13\x05\xc6<9L\x06Z\xd2\x9a\xa4\x1c19\xb1!\xf8[\xde\xf0\x19\xfcqo\x10\x0d\xfe\xb8'\x94\x06\xda\xa4\x80\x1a\xf9j\xce\x99\xb3Pp\x0d\xb4\xfc\x10\x1bh\x07 \xb4\xc1\xbbz\"\xe168s\x87 \xba\x81\x16\x13\x18\xd3\x03p<\x04\x03:j\x98\x97\xa9!9(1P~3\x02s\xa0\xf5\xc1\xf0\x1ch\xf3L\x94)\x9f\xb1\xcd\x05I\x0f\xdbA\xe9\x85\xb3\xb4\xd8\xfb\xc6\xbfJ\x13\x02y\x1c\x1a\xe6\xce\x8d\x84\xf3@C`\x9f$-\xa8\x07\x9a2\x06\xcc\xc9\xde\xbd\x00JX\xa7\xe7L\xfa4OA\xd0\xce\xb1\xe0FU\xfd\xc4`\xc2\xb1<\xdb\x87J\xb1mw\x97\x04\x0c\x0e\xa4E\x8eD\x0c,\xca\xbbG*`\x9c\x90XI\xcc\xf9\xc2y\xa0%\x85FA\xdb\xc3@\x027\x9a)qTQb\xa19X2\x93\xf3B\x11W\xd0\x16Y\x99\xbci\x9f\x04\xc4\xd5 \xa0a[\xd0\x84$\xf1\x87<\xc4\x99EHd\xa9h\x0eA\x9fv\xbd\xac\xc2\xe6\x8dz\x88\xae\xe0r\x07k,\xf6\x01\x9b\x05\x94^L\xe7\x8b\xc5>\x1c~\xcc)\xd22\x81Lt\xc4)\xb0\xf9G\x18\xfd\xcc8\x88\x8c(3\xb4\xfb\xa7\xa2Y\"\xfc\xccS/\x93&` E3a\\\xa9'N\x94\x106\x1e'\xd0b\x8e\x96\x8a\x12\xf3k\xab\xa5\x1e\xb9\x86\x12<\xd6V\x19\x9b\xcd\x95W\xda{l/c\xebS\xe2\xdd\xa09+zp\xb58cF&\x9f\x05\x18\xb1\xc4\xf9H;\x17\xc8\xe3\xcf\x8d\xf7\xa4H$\x81e8\x982gKj\xe4\xc9\xe3\x9f%B]ri#\x9d\xb9\x19\xa6\x8dt\x86\x92\x9f\xb0e\xf4a\x87\xf8\x9b\x1d\x88gP\x0b\x16P\x01R\xbd*\xb6i\x16GQb\xed\xa9\x95\xda8\x96eXj`s\xa3\x06-rNY\x06hX\xf4 \xb1y[0\x82\x90\x84\xd4\x18\xbf\x02\xe3D\x13\x92\x98\xb0 \x9e9q\x194=\xba\x10!6/\xc4\x10\xe7\x0e\xeb\xc7\x1byH<\xd1\x87$u\x16\x91H:\x924\x8f\xcbD#\x92HD\"Y:*\x91x#\x13 \x1a\x9dH\xf0\x08E\xb2\xf7\xf9\x9d\x1e\xb1\x88\x10\x13\x11{h\xd4\"\x99\x15\xb9\x88\x10\xb3b\x19I(\x9e\x91\x04e,\x89\xc8Y\x924\x933\xe2\x1b\xfd\x9f\xa2'\xc6\x91\xcc\x8dsD\xe8U\x0d\x1a\xebHf\xc4;b\xbd@\x04\xa47\xe6\x91\xa0q\x8f\x84o.$\xf6\x91\x1c`a\x97\x8b\x85\x94\xfd\x85\xe3!I<&\x925\x1f\x88azl\xa4Eh\x8c\x94\xb4\xfe\x80\x85K\xe6\xe5\x11\xd8t\xedC\xb5\x12\x08\x1c#\xfav\xb4\x87\xb4k\xa9\x91\xd8\xcaT\x86:)\x8fWL\xddBD\xaa\xf7\xd07\x06\xe2\xa4\x12P\x87\xb8\x90\xa3\xea<'\x9b\xa2\x17\xa8\x14mYN\xe0\xef\x16\x11~\xc8GO\xf8s!4\xf9\x9ar)j\x1b\xf8\x99Z\x075\xf6\x9b\x96\xdc\xb7\x1d\xa2\x8f\x13\xe2\x8d\xf9\x0eL\nr\xc6\xf8\xf6\xa0\x12\x15\xbe\x13e\x94K\x0e\xff\xfaDi\x82\xc7\xde\x84\x1c\xc3F\x87\xe7\xa4\x1az\x19p\xd3\x93m\x03\n\xe6\x8a\xb4l\x1e\xbeV\xa2:\x13\xfe\x95\xbb!\xb7d\x04f\x8d\x15\xc2H(\xb0W\x90J\x0d\xef\xcd\xcd\x8e\x82\xfa\xee\xd1\xa5\xf2\x0b2\xcbi\xaf\xca\x02\xca\xdb\xa6Qu\xcf~\xed\xfb/?\xdc\xd0\x97\x7f\x16\x7f\x0e\xdb\x9f\x7f\x1a\xbe\xfd\xf4\xed\xa7\xba~\xf8\xe9[\xf9\xeb\x9fC\xef\xaf\xb7\xf7\xe3}\xf9'\xfdQRs}\xde\x99#P\x1e\xec\xa4\x1a\x89\xbf~\xff\xeb?~\xb9.~x\xf1\xd3\xfa\xc7\x9f^\xbc\xfa\xe9\xd7\xe2\xc5/?\x17\xffx\xb1\xa6e\xf1\xfd\xf5\xcb\x9f\xbe\xff\x81\xbe4\xea#\x1a\xfeo\xb7\xfa \xff\xf3\xf7_\xfe\xf4\xce\xc3\x97o\xf5\xddWZ\xab\xe1\"\xf1\xbf\xb9\x03V$\xd2\x86\xfc\xd3//\x7f\\\xffr]\xbe\xf8\xf9\xe5\xcf\xffx\xf1\x8a^\xff\xf4\xe2\xd7\x9f\xbe_\xbf\xf8\xe1\xfb\x1f\xbe\xff\xf9\x1f\xdf\x97?\xd0\xd2\x1a\xb2\x00\xb1\xf9\x07\x0d\x0f|\xff\xe5\x9bw\xd8\xbf\xf6_\xea\xf2\xf6\xc7\xfe\xdb\xd7\xe6\xd5\xab\x7f\xfd\xf4\xf2_\x7f\xde\x0c\xbft\xfd\xed\xc3\x97\xdd\xba\xfbW\xd9\xe9\x0c^\xf2\n\xa6E\x03\xca\x83\x1a\x08;E\x0b\x03\xa0P\xd4}\xab\xf3!\x8e\neb1}*\xe8\xb4\n\xa9\xa4{; :\xd2\xf0\xfa\x0d-\xa9\xdb\xf6N;\xf8\xe4\x8d\x99\xb3c\xf7\xb1\\\x1a\x1f\x01F\x89_\xc7\xe1?\xfe\xb8FFX\x8d\xc4u\xb0\xa7\xca\xd23&\x12A\xd3\x13\x89\x05u\xb2\x04,80\xd1C\xda\xd8\xe4\xd33\x86vL\x1d\x15\x1b\xc0\\#P(u\x94\xd1\xaby\xbc\x91\xe4\xf4\x18Y\xb91\xb2\x13cX_\xb2\xc1\xb1\xfa\x0cu\xeb(\xfc\xc8\xafh\xb7m\xbd\xea\xad}\xf8\x8c+\xfd|Lt\xf5\xdd$\x8d\xd4b\xc9\xfb\xb6\x9f\x02 \xa2\xc8\x92\xcc\x05\xa8Q+\x84]\xff\x0c%=\xcf\x7f#*\xc1\x00g\xe1\x84\x90\xf3\xfbMM\xefi3\xf4\xa4_\xdd\x9d\x9c \xe0I\xd5\x0c\xb4[\x17%v\x07b4x^ PU\xe1\x0d\n\xf7(6\xbdU\x077\x957\xfc\xfac\x0f=\n`\xdf\xcf\x14(Y\x8c\x95\x92P\xa6|\xfe\x94Q/\x16\xb9Y\xb1\xc6\x83\xad\xa8\x9c\xb9\xa2\xae\xdb\xaf\"ZI\x02\xf8m\xc1\xcfZ\xfb\xb5\xa1\x1d\xe2\x9e\x85!\xe3\x91j\xde85\xef\xbe\x83\x16s\x07/\x96\xd8\xc2\x84\x93\x93\xa2\x04\xc3\xc63\x19g\x81\x87Jwm\xedO\"\x11\x8d!+\xf8\xfb\xe3n\x96\x9dj\x89_J\x91:%\xe2\x1e\x12\x11\x184\x90\xef\"i2\xc2\x91a/\xc8\xc7\xb3O\x97\xff}u\xf9\xdf\x1f\xdf&\xc54\x19/|\xf8t\xfe\xef\xe7\xef\xcf.?|J{\xfe\xe2\xed\xa7?\xce\xdf\xbcM|\xfa\xfc\xfd\x1fo/\x92i\xbf\xf9|q\xf9\xe1\xb7\xf3\xb3\xf7i\x8f\x7f\xf8\xe7\xfbT>\xce\xde\xbd;\xff\xfd\xfc\xec\xf2m\xda\xe3\x1f\xfe\xeb\xfd\xf9\xbf}\xf6\xc7\xc9\x19\x0f\x7f\xfc\xf4\xe1\x8f\xb7\xef\xcf\xde\xbfI$\xfe\xe6\xc3\xfb\xcbO\x1f~\xff=\x95\xf7?\xce~?\xff-\xb0@*\xac.k\x1b\xc4\x8d[\xd0|\xbb\xcb\xd7\x1d\xd7#\xfc\x01a\xb4\xeb\xda.%\x80\xce\xb3I_\xe3?C\xaf\xa4\xe8\xc1\xec^q\xb3Q(\x1a\x15\xdd\xd3\xaf\xb1\x1fG\x8b\xd4\x8a^\x0f\xa4\xa7\xddCU2=t\xbdm\xca\xc1RSC\xbd\xc8o\xe15\xf6#\xa8_\xdc]Z\x95\xa4j\x1eh\x9f\xce\xbf\xfan^\xa3\xbf\x8a\xc9\xa1\xcdP\x0d;8\x94\xd4\x98\xcam?\xb4\xab\xaah\xc4\xc0D*4>\x91\xa9\x03\xe3\xdf\xe1k\xe7\x17;\xde|St\xc3N\xf0\xc2\x0f+)\xd5\xd9)\x94\xd8\x95\xfa\x8e_\xa3\xbf\xc2,BG<\xba\x97\xed\x89\xf5\xba\xaa\xabb\xa0\xa4\xb8\xe9(?T\x13;\x13R\xe05\xf2\x1bt\xc4O\xf3\xa2\x06\x1d\xb6]\x8b\x8e\xd5\xa9\xdf\xb55\x0c\xf6\xbe\xa9\xae\xb7=\xb9.\x9a;y\x9a$\xb20\xca\x96\xd7\xf8\xcf\xd2\xacn\xf9\x11\xd4twt\xd3\xd1\x9e+\x12\x1c\xc9\xa1\xa2\xf7\xe1\xcaoe.*\xca\x8c\x8fr\x94c\xaf\xf1\x9f\xcd}\xf7\xf5\xb6\x82\xd2Vb^\xc6\xfcC\xe2\xabU\xc9`*Jh\xd3\x0e\x9e\xe4I.#J@\xbeF\x7f\xc5\xd8\xe09!\xf8\xd6\x84XI\xd8\xef\xe1\x14#\xd2/\x1d\xd6j|\xce\x04h1\x97\x034\xa1\xa3\xa8;\x98Z\xce\xbf\xf7\xa4\xafn\x9a\x82\xa7h\xa9FW9B'\xac\xe7\x9c\x91\x8f\xda\xd7(\xb5,\xf6\xc9\x9c\xf2\xf4N0+\\\x0f\xb2\x03\xe6\x0b\x94\xa0\x17A\x17?g.\xf9=\x8a\x8d\xaf\xa2\xfd\xb8a\xc9\xd0nHM\x1fh-T[\xd3H\x83 '\xd0\xd0Nl\x92<\xa9\x1f\x9b7R4;yI\xeb\xe1;\xbdoW\xd5\x1au5\x0d2\xed\x01\x92\xf0\x0f\xe8\x9b\xb7\x93\xaa!\xdb\x86\x87PW\x03\xe6\x94\x94\xdc\xd4\x15\xbb!\xca\x8az\xd2\xd4a\xbb\xb4X\xcfWE\x89\xa7\xca\x9b\xa1\xd2{\xf4\xcc\xf8*\x9d\xa9\xc1\xcaK\x08\x1b\x08\x1fy\xb1\x1dn\xdb\xae\xfa\x13\xa4PGKZ=\xd01'\x12B\x8c\xcf+Z\xaa\x14f\xd8z\x85\xdb\xf0\xaf\xf8.\xb8\xf2^-\xe6\x8eo\xfc\x0cL\x01\xceV \x9c\x08\x89\xa9#\xe4&\xb9\x18\x8afUt+]\xe8\n\xe9\xdfs\x1c\xd7}\xd1\xdd\xd1N\xfd\x86zr;J\xfa\xedf\xd3vz\xa1Y\xe0\xe7D\x98N\x8ba\xe8\xaa\xeb\xed@\xc9}\xb1\x93FT\x84Vy[47tE\xae\xc1\x95$\xe4\xe1\x18\x1d\xde6%;\x8b\xbd>V~\xf9\xbe\xe2r\xe8\xaak\xebz\xbb\xf1-\xc2\xfe\x1c\xae\xff\x14\"\xb1\xa8k\xf5A\x19\x97b>\xb1\xd5\xd0\xab\x0fK\xa6\xf4\xc4\xbeH!h\x0c\x02\x7f\xef\xa5\xb8YW\xb4^\xa1No\x98\xf6\xbao m\x8a\xeb\x1a\xeew\x1c\xf7!\xe4\xf1\xff\xe3n``HP+\x1a\xec\x02(m\xedb,\xe6\xa4\x87\xa7\xe3\x82S\x97\xa0)vim\x07-\x91\x0f\xd7\xe2H\xd9\xd65-\xa5\xd3T\xda\xaa\x18K67\xd7\x02\xbc\xd2\x81c\x10aHE4\xe5Vg1^\xcc\nPBn\xd7\x88\x80x\"F2\xd7\x8489\xb0R\xcd\xd8\x9e+\xa6X\xfd\x90I\x01\x94\x8a\x08\xfc\xcf\x84\xfa\x18\x13\x18\x1e\xfb\"\xb1h\xc8\x08\xe38\xba:\xfd4\x19\xa9\x90\x04\xb8t\x84\x99 \x93\x870\x13G4c\x13\xe9~\xeb\xfe\x00\x97\x94\x0f\xde\x88h\xc9\xf9\xea-j\x1e\xeb\xeaB2\xc0\x1b\xb0\xb2\xd0\x8eE\x8f1\xa3\xeb\x88\x88\xe8#!\x88A\x11\x12\x8bA9\xd8 S$L\x8cFx\x88\xda\xbf&|E\x8b\x8e\xd5b\xc5\x94PNh\x08B\xce\xf8H\xe3\xa3\x9f+\xc2bCJ\x15n\xb1\x89 \x0ca\xc2\x92e\x0d!.\x12c\xcc\xdb\xabjA:\x1c\xe7\xf9\xb2)\xf6E/\xf6\x14\x05\xfc4!\x1f\xcd\xfe\xd2\xd0\xc7]p\xf3\xe8\xa7,;\x11y\xe0\xb5\x94QF\xdc\xa4[\xeb]\x9a\xd0Pbz\xd2(1q\xf6FV\xb7{\xffp\x1f'Ud\xc4\x11\x17]\x0b\xf1\xd0\x1cg\\\xd8\x1d\x173TA[\xce%\x97\xe8\x94K\x9c\x98x\xca\xc6,\x9f\x8c\xf3J\x82s.\xd7=\x97\xeb\xa0\xcbv\xd1e9\xe9\xb2\xddt\x99\x8e\xba|W]\xbe\xb3.\xd3]7\xd5a\x97&\xf9\xa0-\xec\xb4\xcbp\xdb\xed\xddqw(\xd7\xdd>\x9dw\x8f\xee\xbe;\xa8\x03\xef\xc0.\xbc'\xe1\xc4{\xdan\xbc'\xe4\xc8{\x1cW^\xdc\x99\x173e\xcb\x163i\xcb\xb6\x84K/\xae+Mw\xeby\x08z\xd3\x92\x92\x91\x1be\x87\x17\xb7\\\xca\x950\x88L\xe7\x7f\xe0\xdf\x12\x1b\xa4\xac\xa7\xe4\xa591+N\xbc\xf6\x17\x8f \x94#\xd6\xddM\xc2\xfe>f\x1b\x16z\xe4s|\xfew\x9b\xaa,\xeaz\x17\xa8\x0b$\x08L\x18\xc6\x02\x17\x1f\xa9\x05\x03\x98\xb7\xa258\x8d\xd8q\xc4\xce\xbd\xb2\xe6\xa1\xab\xea\x83]\x15\x03\xee\xceu\x9c\xbe\xfe\x9bO\xb1]a\xb1\xa9i\xfc\xbe\xe1w\xab\x15\xb9\xde='\xdb\xcdJ\xfd\xffP\xdd\xd3~(\xee7\xfdsec\x80P\xa1\xe7\x1eO\n!\x1d\xadE\x96\xe3u\xeb\xb2\x19\xbdN\xc5.Sp\x0d\\]1&}R#\xe1\xd2 \x17\x99\x91y\xc1\x86\xe9#5V\xd2b\x8f\x9e\xb2G!4\x92o\\\xda\x0c\xdd\x8e_]\x05_A\x9e\xaf\x91\x10wh \x1c\xe35\xc6\xf4\x1b \x1c\x96b)ci\xfe\xc52?\xb9y\xac\x8b~\x90\xcc\x05\x19?\xc4drXB\x950\x9b\xe2\xe3\x08sT5\x03\xbd\xa1>\x85T\xce$\x1e'\x0e-v\xf0\x10\xae\"\x89\xa3\xcb\xfabaD<\xa5U\xd9q\xe5MJ\x15O\xf864\x98n\xf4\xcf\"2u\xfe2$\x8eG\xf4\x87\x16\x8d\xe3\xdb\xbej\x9b\xd3\x00\xbf\xac\xd1\x07\\k\x8d\xe0t\x98p}\xc7\xe4xO\xcab\x03J\x02\xeaA\xe1\xdbW\xed!\xdc\x92u_\xdcQ\xb1\xb5$\x02\xbdhV\xf2k\xa0;\xf2\x95v\x94\xdc\x17+{\x181Q~!\x8eQ\xe5\x8dFNTR\xdc\x14U\xc3\x8b3\xc9\xf3\xc7\xa1cZ\xe7\xd8\xd3<\xde\xc3\xf5\xc1_j\x16\x1f\x1e\xf4z[\xef*!C\x91\xc8\x899i?\x0d\"d\xa9\xe4\xf4\xa1\x15\x98}\xff\x91,\xcf\xd0\xba\"\x1f\x13Y\x16D\x05M\xcd\xf4\xc1\xd3pZ=G\xe4\xb7x82\x88\xb0\xfc&\xfb\x19H@KF\x18\x9b&\xcdub\xa19X2\x17\xe6H1M\xbe%\xb07se\xf2\xa6}\xa2\xa4#\xf8\xba\x99\xc3r2[N\xd1?Q\"\xe9Z\xa8C/\xe8\xcc_H)\xb5y\x9epZ-\xa03\xd8\\x%`\xc0<\x9b\x9c\xb5\xd8Y\xa6\x83(\xb8\x89#O\x91\x9eI\x84\x12\xc6]&%\xa3}\x849p\x19\x13\xf3\x91\xf0:\x86\x88\xcd\x9d\x9b%\xf4\xc9\xa4\xb1\xa6\n\xe3\x04R\xf1QM\\\xe0\xfcQM\x14\xd4 \xdb@\x1fb\x88/ah\xf0\xa7\x17V\xf7\xdf\x05\xf2\x0b\x1b}\x0b\xc2\x90\xf9\xa5\xd9i \xbfTb\x0d\xf9\x84\xca\xadA\x9c\xd4\x1a\x1aA7\xc9\x86xn\\JX\xc0e\x01x\xd0\x89\xbd]&\x1e2{\xf3s\x9d\x8e\x0b6\xa2\xa5\x80\xf5\x13B\xfe\xe0aL\" F\x80\xe4PRH\xc8\xdbY\xdd\xb7\x04Jh\xf3\xda\xec\xef\xd8\x01\x8c:\xc0\xf6i\xd6\x89T\x85^\xd9\xe6\x1ci#\xb4\x81~:\xa8\x0f%%2A=\xe3\xb9H\xaa\xe1\x96\xac\xabz\xa0\x1d]\x91\xbb\x07y\"\x0d\xb4+\x86\xb6s\xbd\xdb\x02b\x86\x0e?8\x00Y\xb2S|\x9f\x86\x86$9\x87e\xabw\xf2\xdb\xdc\xf9\x90;Z\x05U\x0e\x13h\xd7k\xe1\x98wRs\x07\x0bq\xcf\xbb6.\x96\nd0]&\x0e\xe8\x81\xcf\x8f\xda\xf3b&Q\x92\xa1\xfa\xd9y\xfc\xdc\x8a\x12\xd9E3\x86;\xaaE\xf4\xc2\x0b}_?\xc9\xea?\xe4\xbb\x00\x9f7\xe6\xae\x90\xcc=c\x1d\xf1\xaa/\xcf\x03\xbel\xd9\xda\xce\x9e\xed\xb2\xbd\xbfo\x1b\xde\x0f\x8e\xee\x80\xc4M{\x1d&t\x01\xben\xc8\xe2\xd6\xd9\x95\xec\x95\xa7\x9bmR\x7f\x11'\xd6\x9e\x01\xb9\xefF\x8b>\x9f\x97S5d%C\xaa\xe6\xa1\xbdC\xd6\x16\n$\xfb\x85\xde\xe3@\x80C\xbb-i!\xd24\x1eh\xef\xd92\x88\x94\x9b\x906\x0c\xb2\xe9U\xcd\x1d\xb9.\xca;\x9e\"\xf7V\x84-\xc6\xa0\x84l\xf1\xf0\xcb\xb6J\\\xe9\xbfm'\x0e-\xc1\x16\x92\xb2\x15\x89+\x9e\xc4 2\xa2\xa1\xde\xb5\x1dy\xdb\x0f\xc5u]\xf5\xb7\x01\xe4\xb1J>\xea\x83M\x1d\xa8\xfe\xbf_\xc0U\xb4\xe4P9\xfdxb\xc3\x0b\x10\xfb\xd8\xb5\x9b\x96I\xe8\xc8\xd8\x94XZf\x80<\xd1\xdeF\xf6\xbd\xe6F\x83\xa1\xdb\x96\xdc\x91\xca\x0f\xd3\xfb\xa2\xebo=p+B\xfa\xa1\x18\xb6!\xf8|\xc2<\x9e+\x14e\xb5\x86\xc3\x89\x0b\n.J\xe46\x91\xccEPk\x04d\xf1\xbf\xb6\xdc\x8d\nh.Q\xad\x8b\xd3\x9c7gq4\xfb\xa7\xb7o>|\xfa\xed\xea\xfc\xfd\xc7\xcf\x99U\xf4\xf1w?~\xfa\xf0\xf1\xc3\xc5\x84\x17\xe1\xb7\x80\xc0\x12\x08\xeb\xa9\x0c\xa7K\xbc\xe8\xa4\x84f4\xf2\xaa\x06\xc0\x0d\xa2\xb3\xab\x86\x83 O\xb7\x0d(\xe8\xb0\xbf\xd8\x9a\x07^\x8a, >w\xf2\xaf64X\xdb\xd1\x0d)\xba\xebj\xe8\x8an7J\n\x9e\xf0A\x1d\xa0\xb0e\xf3y\x83\xdfp\xce\xe07\x9c\xaf\n>4C3\xd8t\xf4\xa1j\xb7=\xcfWo}\x82#\xbc\x16\xe5Q|\xf4\x97]Q\xde\xc1\xa5\x1eN~\xa5\xa2S)\xe5c\xaau\xf86\xa3\x11u\xf476\x86\xf2\xb6\xa2\x0f\x90XT\x94\x92o\x9b\xd8\x8d\xc6\xf9\x13\xbc\xf9\xe4\xb4\x96\x03\x9dq\xff!\xce\xb7A&{\x11\x13\xa9\xb6*\xfc\xfbt\xbc,\xe1)\x1be\x8b\xc1\xb5\x969Q.8\x0d\xc9\xb7\xdc\x12\xe3}/1Q\x89lb\xcc\xe2\xd3\xa9\x9a\x1b\xd2oy\xe6\x99\xe7\xeb\xa2\xaa\xb7\x1d}\xce\x0e\x9d\x0d\x94&\x98\xb7&)G\xcc\xc5\xe7\xdf\xb3d\xb5\xfb\xd6\xc7\xb3\x8bpH\x90\xf9\xf8\xc5\x7f\x9e\x7f\xccx\xfc\xdd\xd9\xf9\xef)'O\xee8\xf2\xce\x1c\x0f\xf5)\x1d\x13\xe3\x9c!\xdb\xa6\xa7\xfc\xa6\x97\x12\xeb\xe3N\xbc\xcd\x01\xfb\xcd\x10\xcbT\xdb\xa9\xd9\xe6BN\xc8h\xc0\x14\xb7\xc7\xde WF\xe9y,\x9b\xd2\xf2k\xbd\xe3_\xa53e\xf7l\xd7\\\x1b\xe2KU\x0cCQ\xde\x02u\x15\x08\xc0\xbe\x11\x14\xbfk\xee\\\xb1\xbf\xf8=\xcc\x1bLbL\x99\xe0@\xccH\xdb\x88K\xa7\xf8Y@q\xcd!)c\xc0$/\xb5\xf9v\xba{\xda\xe7\xba\xf1L\xfa4OA\xd0\xce\xb1\xe0FU\xfdx=\xcdb\x01\xbc^\xe4q\x1a\x0f\xe2>\xb6\xbb\x0b\xc3k\xd4\xd3!\xbe\x1f\x1b\x1c\x89q2\x0dM\x934\xdc\xa7R\x89|\xc9\"\xe4\x81\x11/\xe1\xc3\xd6H\xa5x\xa9C\\=a\x18a\x80\xeb\xe8\xdd.v\xb3;\xa2\x08'r\x9f$\xe6R jQAG\xf63\x90(\x9cm\x01\xb9G\x8e(\xc2\xeci\x9f\x08N!)(B!I\xe6`\x08\x11\x12Y*\x9aC\xd0\xa7]/\xab\xb0=*z\xd0\xe4!\xa6\xd1\xf5\x91\x04s\xde\x14s\xce\xe2\x1cD\xf1K\x1as\x8a\xb4L \x13\x1d\xf1\"\x80\xb2\xe5G\xef\x87\x9f\xb9\x7fA\xe9\xe1\xeas\xea\xac<\x15\xcd\x12\xe1g\x9ez\x994\x01K(\x9a \xe3J=q\xa2\x84\xe2@\xc9\x99Z*J\xcc\xaf\xad\x96:\xbc\x1b%hh\xb2\x96\xd6\xea\x1d\xd2l\xd5\xd5\x1e\xc6\x8c\x13zA\xdd\xc9\xe6j\x1aR\x9c\xa4\xa3\xc5I\x1eb\x9c<\xfa\x8cL>\x0b0b\x89\xf3\x91v.\x90\xc7\x9f\x1b\xefI\x91Hb\x1a\xba\xdc\xa5\xb3\xa4F\x9e<\xfeY\"\xd4%\x976\xd2\x99\x9ba\xdaHg(\xf9 [&\x15\x85\x0e\xae\x08?\x08](\xa4K`\xd0\x81T\x00u.\xfa\xb2\n`;\xd56-\xa2Z\xa9\xcc\xb2\xdd\xecF\xfdH\x14\xb3\xb4\x81\xb5\x00c\xb7jl\xa3\xe7\x10~\xfaxmW\xde\x9d\x12\xde\x1f\x96\x01+\xb5\xde\xf3\xf8\xea\x125\x9f\x89\xd7\x0e4qT\xca\xc2\x93T\x10\x99\xcc\xaf\x03mQ\xb3\x0b$\x13\xc9SFeh\x12@\xceO\x9d\x961\xedA\xf2\xc4\xcc\xae\x16\x9d25\xf0\xcaR\xf5\xa3\xc9\x9c\x1a\xd2\x04\xa9#MP\xd4\xacw\x11\x84;-\xbb\xa64\xf1\xd7\x95\x1e\xfb\xc3\xf2\xca)}\x00\xf9[xG,Tg\x9a\x88c!\xa7 3 \xd6\x9b&\xfb\x1e\xb0\x1e\x85\x14\x1d\xb3|z\x81!{\xebP\x93=\x8dxv]j\x8b^l-\x9d\x13\x93\xeci`s\xebU[\xe4v\xed\xb6K\xa8Y\x0d\x03'#`\x01\xfe=\xcc\xaeZ\xcd:\xbe\xd0\xb0`\x8ex\xd1\xa1RqXT\x00\x02\x15\x80;y\xa1M\x890&|\xc5\xa6\xc1\x93\x10\x10\x92\xa0\xe7@\x91\xf6\x04;z2\x10\xa3C\xc2\x89\xc4\xe9\xa5oH\x8b\xecC\xd1U\xed\xb6\xe7\xc8E\xaa\x83u\xa0# a\xf7o\xf6\x8b\xf1psT_OavC\x05BO^\xf4R\x8c![f\xd4''\xa2\x1a\xb9F-\xab.y\xef\x05\x1b\xcd\x1b\xd2\x80\x17\x87I\xaa7n\xe7\xfcL\xae3n\xd7\x17\x87!,\x1bd\xeb \x16\x0c\\\x8b\xc5\xf4\x14Y\xa5 \xb0\x82\x04\x92Pn\xa5\x01\x12\xac'\x10\xe0\x1c\x87\xc2&W\x0cH\xad\x13\x90V\x1d \xad&@b%\x80\x84\xfc\xff\x89Y\xff\x93r\xfd\xa7f\xf8O\xcd\xeb\x9f\x94\xcd?/\x87\x7f\xcch3-_?d\xe5w\x88\x05\x90\xbb{\xca\xcd\xbf\xdf\x8c\xfc\xcb\xe7\xe1\x7f\xa4\xec\xfb\x07\xc8\xb9\x7f\x90L\xfb\x8f\x98_\xff)f\xd5\x7f\xf4\\\xfa\x87\xcc\xa0\xef\xcb\x9b\xef\xbf\xf1\x85\xef|\xea\xe0\x9d\x94\x19\x1fG2O\xcf\x82o\x15\xb7v\\f~9>\xb1\x88\xb5U\xb2Z#8\xadx\xf50\xa7h5\x92$7\\\xac\x1a-R\x9d\xa1\x17Zz\x91\x7fv\xa7\x17\x9f\xb6\xd5\xddx\xd1\xe9`\xb1\xe9\\\xbe\xa7\x15\x95\x96K\xa6Q\x9aSLzr\x11i\xadd\xb4\xb5\xc7\x12\x8bG\x87\x8bF\xe32\xc3'-\xfc\xb3<\xbd(\xb4V\x02\xda\x18`J1\xe8\x89E\xa0%\x0f\xee\xa7\x8e\x98\xa1\xd40\xe7\x16{\x1e\xcb;\x0b\x82v\x91\xe7\xd0\xd5\xfd|u\xaeL\x97{\xbe\xc0\xaf\\de.pW\x81\x12mL\xc2L.R`\x04\x0e\xba\x13AH.\xc7\x90\x8b\xdf\xd4~Ib\xcc\xf4+\xc6\x85\xdb\xf8V\x8a\xdb\xdc\xd3i\xc2$ \x9d\xc6=\xd8~8\xaaAN\xdb\xd2\xa3\xadD\xda\xb8\xb8\x15\xbc\xa37E\xb7b\x84\x85\xef\x88T![.'\xf8I7\x83/\xf7\x91\xf8\x85\x9e\xfa8\x92\\{3\xfd\x9d\x8e\x1b\x8f\xff9\xc3\xbb\x89'\xa6\x8e\x0f\xf9\x7f\x8c![\x19\xa9\xbd>H{\xf4\x0b:\x1cQ\x87||\x1c\xc6\xd2Mt\xc2/\xe7\x80\xf7\xfb\xe1\x96:\x92\xe7\xf9\xdd\\H\x8a\xf8\x0cq?\xdb\xe8\x19*\xb1<\x80\xcb\x8dF\x07\x95D\x07\xa3\xce\xdf\xac\xb1x\xfd\x85K\x8de\xb6\x7f\xd0\x1a\x8d\x7f1,\xbf\xe0R\x03\x98\xeb\x07\xe4\x9e?s\x00\xb8\x0fP\x97\xeb\xa3\x03P\x00}\\\xff\x1f\xa8hI\xde?A\x19&.\xef\xc8x\x8d\xcf\x90\xd8S\xc0\xa4J\xac\xc9\x7f\xd4\xc7\x87\xf6\x84\xf7\x86\xf4\xe8}\xdbO\x81x\xa1>$l\x1d\x8f\xa0\x1eC\x81\xe63\x1c>\x085\xe1\x02\xcas\xfc\xc8\xe6w\x00\xc9\xb6\x9f)\x98\xe3 B\xc8q\x8bB\xb2\xa3H6\xdba$\x1bf \x90\xcd\x9bT\xc6\xbb\xef\xa0\xc5\xb0\xdb\x1e\xc7\x92l\xc1U\x10\x8fLq4\xc9\x16\xaa\x80\x1d\xcb\xdf\xb0d\xf5\xeb\xa4\xda\xd7 \x93\x11N\xe3\x92\xec\xc3B_H\xa8y\x9d\xe6\xd3B\x9f\x8e\xd6\xbbN\xf4q\xa1\x8f\x87k]'\xfa\xbc\xd0\xc7cu\xaeS}`\xe8\xf3 5\xae\x93|b\xb2\xe5\xf9\xc6\xc6\xb7\xc2>2\xd9\xa6\xf9\xca\xbc\xe4\x92+[\xef\xc9w\x86\x92_\xdc\x87\x86\xf6\xb2\x88/\x0d\xa5|8\x9f\x1a\xda\xfd~|khW\xfb\xf2\xb1\xa1\x9d\x1d\xd6\xd7\x86\xb2\xf0D|n(o\x8f\xe1{C\x19\xd9\xb3\x0fN\xb6X\x0d\xeb\x90ON\xb6\xb0oN\xb69>:\x8b\x86G\xb2/\xe6\xb3\x93\xcd\xf1\xdd\xc9\x16?g&\xfa\xf2\x10J\xa6wo\xa2OO\xb6Y\xbe=\x84\x9e\xe4&\xec\xe3\x93\x0d\xf5\xf5\xc96C\xa5\xf7\xe8\x99\xf1U\x9a\xee\x13D\x88\xf1y\x8d\xfb\x06e\x0b\xfa\x08e\x9b;\xbei\xbeC\x84\x92\xdc$s|\x88\xb2M\xf6%\"\xb4F\xef\"\xc9\xf0)\xca\x16\xf6-\xca\x16\x96\x811\xe9\x17_\xa5\xe9\xbeG\xec\x8bT\xde\xc8D\x1f\xa4l\x13}\x91\xd8^\x11\xa6t\xc3')[x:\xe6\xfa(-r\xcac\xe9\xf8*eS\xfe\x1e7\xb2\"\xcc\xa9\xf1\xe2h\x0fI\xc8&\x82\xdc\xae\x11\x01\xf1D\x8cd\x0b8SeS3\xe6\x0b\xf4^\x98\xcbI\xceV\xd9\x10?\xe0\xfe\x19\x1e\xfb\xcaw\xc6\xca\x06\xbf\xbb\xc1\x9e$\xc6\xef\x92NZ\xd9&O\xde\xc2\xce[h\xf0k\xef\xcdF\x91\xf2\xc1\xebog}\xf5\x165\x8fuu!\x19\xe0\xcd.\xb1\xd0\x8eE\x8f1\xa3\xeb\x88\x88\xe8#\xf9\x82\x82\"$\x960\xe2`\x83L\x9101\x1a\xe1!j\xff\x9a\xf0\x15-:V\x8b\x15SB9y\x1c\x10r\xc6G\x1a\x1f\xfd\\\x11\x16\x1bR\xaap\x8bML`\x08\x13\x96,k\x08q\x91\x18c\xde^U\x0bk1\x0d\x92\x99\x1c\xaa#z\xb1\xa7(\xe0\xa7 \xf9h\xf6W3.\xee\x82\x9bG?e\xd9\x89(\xda\xa6\xe5w.\xf5$G\x96\x83N\xcb\xe6\x8c\x12\xd33<\x8b\x89\xb37\xb2\xba\xdd\xfb\x87\xfb8u\x1d\"\x8e\xb8\xe8Z\x88\x87\xe68\xe3\xc2\xee\xb8\x98\xa1\n\xdar.\xb9D\xa7\\\xe2\xc4\xc4\xeb+d\xf9d\x9cW\x12\x9cs\xb9\xee\xb9\\\x07]\xb6\x8b.\xcbI\x97\xed\xa6\xcbt\xd4\xe5\xbb\xea\xf2\x9du\x99\xee\xba\xa9\x0e\xbb4\xc9\x07ma\xa7]\x86\xdbn\xef\x8e\xbbC\xb9\xee\xf6\xe9\xbc{t\xf7\xddA\x1dx\x07v\xe1= '\xde\xd3v\xe3=!G\xde\xe3\xb8\xf2\xe2\xce\xbc\x98)[\xb6\x98I[\xb6%\\zq]i\xba[\xcfC\xd0[C\x84\x8c\xdc(;\xbc\xb8\xe5R\xae\x84A\x1a9\xfe\x07\xfe-\xb1A\xca\xe2\xc7^\x9a\x13S\xd8\x86\xa7\x85g\x87\x1a\xdaq\xc4\xba\xbbI\xd8\xdf\xc7\x14\x1bB\x8f\xb4\x13kA\x1bv\x9b\xaa,\xeaz\x17(\xe2+\x08L\x18\xc6\x02\x17\x1f\xa9\x05\x03J\xb7\xa258\x8d\xd8q\xc4\xce\xbd\xb2\xaeh3^\x82\xech\xbd\xb19N_\xff\xcd\xa7\xd8\xae*t\xb4)\xfc\xbe\xe1w\xab\x15\xb9\xde='\xdb\xcdJ\xfd\xffP\xdd\xd3~(\xee7\xfdsec\x80\xa4\x82\xcf=\x9e\x14B:Z\x8b\x92D\xeb\xd6e3z\x9d\x8a]\xa6\xe0\x1a\xb8\xbabL\xfa\xa4F\xc2\xa5A.2#\xf3\x82\x0d\xd3G\n\xf6\xb4\xf0B\xd3S\xf6(\x13\x1f\xc2WE\x9b\xa1\xdb\xf1\xab\xab\xe0+\xc8\xf3\xf5n\x06\xc7\x1a'\x9e\x1b \x1c\x96b)\x05\xfe\xbb\xf4\xd5\xe4\x13\xcb\xfc\xe4\xe6\xb1.\xfaA2\x17d\xfc\x10\x93\xc9a U\xc2l\x8a\x8f#\xccQ\xd5\x0c\xf4\x86\xfa\x14R9\x93U3\xfc\xfc*\xccv\x085\xdb\xa8\xa3\xcb\xfabaD<\xfft\xd9q\xe5MJ\x15\xb4\xa0\x95l0\xdd\xe8\x9fEU\xaa\xf9\xcb\x908\x1e\xd1\x1fZ\xe1\x9do\xfb\xaamN\x03\xfc\xb2F\x1fp\xad5\x82\xd3a\xc2\xf5\x1d\x93\xe3=)\x8b\x0d( \xa8\x07\x85o_\xb5\x87pK\xd6}qG\xc5\xd6\x92\x08\xf4\xa2Y\xc9\xaf\x81\xee\xc8W\xdaQr_\xac\xeca\xc4D\xf9\x858F\x957\x1a9QIqST\x0d\xaf\xa4,\xcf\x1f\x87\x8ei\x9dcO\xf3`\x0e\xd7\x07\x7f\xa9Y|\xbeVuMn\x8b\x07\xaaQ\x16\xb3\xc3\xe3\x7f\x07\xa9\xd5\x9b\xb1\xf6\xd0\xaa\xe6\xa1\xad\x1f\xe8\xea\xe4on'\xef?\xb0K\xca?\xc5\xect\x94\xa31\x9a\x16\x1c\xe4\x9f\x8c\x8c\x02\xa4\x10\xfex\xb4f\xdc\xe8\x95/\xe4T=\xe7\x8b&\xe7\x8d\x7f\xe3\xf7\xed\x83]tp\xb4\xd3N*\xe6a\xbd\x9e\xe5\x84C\xadh\x1e%\xe0\xc9Y\xa1m\xaf\xe8\x98\x99\xd5\xebk3c\x1a]\xfdA\x9b\xcb\x83\xd4\xddp\xfa\x8b8\xe7\xd5\xe3A\xd6C^\xe6E\xd9\xf7\xc83\x94\x95\xa8\x07?B*\x90[\xd0\x16Y\x99\xbci\x9f(\xe9\x08\xben\xe6\xb0J\xbb\x0c\xc5\x14\xfd\x13%\x92\xae\x85:\xf4\x82\xce\xfc\x85\x94R\x9b\xe7 \xa7\xd5\x02:\x83\xcd\x85W\x02\x06\xcc\xb3\xc9%\x86\x9ce:\x88\x82\x9b8\xf2\x14\xe9\x99D(a\xdceR\xe5\x98G\x98\x03\x9711\x1f \xafc\x88\xd8\xdc\xb9YB\x9fL\x1ak\xaa0N \x15\x1f\xd5\xc4\x05\xce\x1f\xd5DA\x9d\xb0\x0d\xf4!\x86\xf8\x12\x86\x06\x7f- u\xff]\xa0\x18\x90\xd1\xb7 \x1c(\x0d4>a\x04r<\xabt \xb0\x88\xda\xa2\xab\xefd\xa7\x9e\xf43\xcb\xc2\xee\xa0\x13{\x93L\x80\xc6\xa1\xa4\x90@\xb7\xb3\xbao\xc9]\xd3~mH\xc1v\xcb;v\xec\xa2n\xaf}\x1as\xc230\xa2\xfc\xe4&\x96\x96A\x1b\xde\xa7C\xf9PR\"%\xd43\x9e\x81\xa4\x1an\xc9\xba\xaa\x07\xda\xd1\x15\xb9{\x90\xe7\xd0@\xbbbh;\xd7\xa7-\x80e\xe8\xf0\x83\x03\x10/\xca\xaf\xd2\xd0\x8b$\xe7\xb0l\xf5N~\x91;\x1f^G+\x16\xc0\xc1\x01\xedz-\xdc\xf1N\xb5\xac\x90ga\xe6eq\xb1\x04 \x83\xe9(q\xa0\x0e|~\xd4\x9e\x173\x89\x92\xbc-\xfa\xdbe\xf8a\x9483\x8d\x96\xf8T.\xa2\x17T\xe8\xfb\xfaIV\xff!\x8f\x05x\xba1'\x85d\xee\x19\xeb\x88\x17f}\x1e\xf0`\xcb\xd6v\xf6l\x97\xed\xfd}\xdb\xf0~pL\x07\xe4b\xda\xeb0\xa1\x0b\xf0pC\xe1\xa7N3\xb0\x0f\xad\x0eHa\x9b\xd4_g\x99\xb5g@\xee\xbb\xd1\x8e\xcf\xe7\xe5T\x0dY\xc9\x90\xaayh\xef\x90\xb5\x85\x02#~\xa1\xf78\xc0\xdf\xd0nKZ\x884=\x07\xda{\xb6\x0c\x10#+\xb2\x80A\x01\xae\xaa\xb9#\xd7Ey\xc7\xfe\xc1\xb6!w\x0f\xc5\x00\x84l\xf1\xf0+\xb6J\xe5\xe7\xbfc'\x0e-\xc1\x02\x92\xb2\x15\x89+\x9e\xc4 2b\xa0\xde\xb5\x1dy\xdb\x0f\xc5u]\xf5\xb7\x01\xbc\xb1,\xd7\xd8\xfb\xc0R!\xf9\x958\xec\xd4\x11\xe1\x02\xae\xa2%\x07\xc8\xe9\xc7\x13\x1b^\x80\xd8\xc7\xae\xdd\xb4LBG\xc6\xa6\xc4\xd22\x03\xe4y\xf36\xb2\xef57\x15\x0c\xdd\xb6\xe4\xeeS~\x98\xde\x17]\x7f\xeb\x01Y\x11^zg\x1b\x02\xcd'\xcc\xe3\xb9\xc2NVk8\x9c\xb8\xa0\xe0\xa2Dn\x13\xc9\\\x04\xabF@\x16\xffk\xcb\x9d\xa7\x80\xe1\x12\x05\xb59\xcdys\x16\xc7\xb0\x7fz\xfb\xe6\xc3\xa7\xdf\xae\xce\xdf\x7f\xfc\x1c(\x89\x95\xfe\xee\xc7O\x1f>~\xb8\x98\xf0\"\xfc\x16\x10X\xaa\x8a\xd64\x86\xd3%^tRB3\x1ay\xd5\xa8\xcc\x15 S5\x1c\xfax\xbam@A\x87\xfd\xc5\xd6<\xf0RdI\xf0\xb9\x93\x7f\xb5\x01\xc1\xda\x8enH\xd1]WCWt\xbbQR\xf04\x0f\xea\x00\x85-\x9b\xcf\x1b\xfc\x86s\x06\xbf\xe1|U\xf0\xa1\x19\x9a\xc1\xa6\xa3\x0fU\xbb\xed\xeb\x9d\xfb \x8e\xa0Z\x94G\xf1\xd1_vEy\x07WyQZL\xaa\xe8TJ\xf9\x98j\x1d\xbe\xcdhD\x1d\xfd\x8d\x8d\xa1\xbc\xad\xe8\x03\xe4 m\xb7\x03\x1bh\xdb\xc4n4\xce\x9f\xe0\xcd'\xa7\xb5\x1c\xe8\x8c\xfb\x0fq\xbe\x0d2\xc5\x8b\x98H\xb5U\xe1\xdf\xa7\xe3e O\xd4([\x0c\xa4\xb5\xcc\x89\"\xaa\xc5 \xbe\xe5\x96\x18\xef{\x89\xe9Id\x13c\x16\x9fN\xd5\xdc\xc8\x12}\xcf\xd7EUo;\xfa\x9c\x1d:\x1b\xda\xac\x82\xd3\x9d\xb2&)GL\xb8\xdeb\xca[Z\x0d\xc6\x94\xc7\xb5\xba\x8c)\x8f\xabZ\x8dXK\xac\xdf\x88\xbf\x9as\xe6\xe4\xd7y\x0c\x1e v\x05H\x92\x18\xe1\xb3\x97z\x90)]=Z\x8d\xc8\x14\xe6\xf6Y7\xd2n1\x81\x01\n\xf7\x07\xf8\xc6iS\x16\x9b~[+\x16\xe4\xc1\xb1\xe6G\"\x08\x12y\x1ez\x08\x06t\xd40/\xd0\xd7\xb3\xfe;\xe5\xc3\x82\x02\xedd\xacl \x15~\x15'\x90\x1a\x0b%\x06\xca\xaf|p\xcc]$M\xc7\x1e!\xfc4\xa2\x92m.\xe4\x84\x8c\x06Lq{\xec\x9d e\x94\x9e\xc7\xb2)-\xbf\xd6;\xfeU:Sv\xcfv\xcd\xb5!\xbeT\xc50\x14\xe5-PW\xf0\x7f\xf6\x8d\xa0\xa8]s\xe7\x8a\xfd\xc5\xefa\xde\x10\x12c\xca\x04\x07bF\xdaF\\:\xc5\xcf\x02\x80k\x0eI\x19\x03&\xf9\xa6\xcd\xb7\xd3\x9d\xd2>\x87\x8dg\xd2\xa7y\n\x82v\x8e\x057\xaa\xea\xc7\xeb_\x16\x0b\xe0\xf5\x1d\x8f\xd3x\x10\xa7\xb1\xdd]\x18T\xa3\x9e\x0e\xf1\xfd\xd8\x90H\x8c\x93i\x18\x9a\xa4\xe1\xc2-\xcckl9\xe4x5V\xe4\x80\x85Y\x83\xff\xb4\xc8\x88\x97\xf0\\k\xa4R|\xd3!\xae\x9e0x0\xc0u\xf4n\x17\xbb\xd9\x1d\xb1\x83\x13\xb9O\x12s)\xc0\xb4\xa8\xa0#\xfb\x19H\x14\xc4\xb6\x80\xdc#G\xec`\xf6\xb4O\x84\xa4\x90\x14\xec\xa0\x90$s\x90\x83\x08\x89,\x15\xcd!\xe8\xd3\xae\x97U\xd8\x1e\x153h\xf2\x10\xd3\xe8\xfaHZ9ob9gq\x0e\xa2\xf8%\x8d9EZ&\x90\x89\x8ex\x11\x18\xd9\xf2\xa3\xf7\x83\xce\xdc\xbf\xa0\xf4p\xf59uV\x9e\x8af\x89\xf03O\xbdL\x9a\x80%\x14\xcd\x84q\xa5\x9e8QBqx\xe4L-\x15%\xe6\xd7VK\x1d\xd4\x8d\x1244YKk\xf5\x0ei\xb6\xeaj\x0fc\xc6 \xbd\xa0\xeeds5\x0d\x1fN\xd21\xe2$\x0f'N\x1e}F&\x9f\x05\x18\xb1\xc4\xf9H;\x17\xc8\xe3\xcf\x8d\xf7\xa4H$1\x0dS\xee\xd2YR#O\x1e\xff,\x11\xea\x92K\x1b\xe9\xcc\xcd0m\xa43\x94\xfc\x84-\x93\x8a=\x07W\x84\x1fz.\x14\xd2%\x90\xe7@*\x805W\x0f\xd8Ps\x14`n\x95\xd4\xb4\xba\xd2\xeaa\x96\xedf7jM\xa2f\xa5\x0d\xb7\xa5\xbd\xf2}\x8c\xec\xa3\xa7S\xa0<\xa4s\x02y7Ox\xcb(\xf3HR=c2\xbf\xa6\xb1E\xcd\xaepL$O\x19U\x8e ES\xacx\xe8\xb3\x91\xb2\x9eQ\xab\x9el\xe9\xd6\xbd\xf1\x0d\xbf\x95O\xb6\xc5\xac}\xb2E\xc2\xfa\xf7`\xfdCI/j\x05D{\x98m\x0dD\xa9\x1e\xc6*\x88v\xbd\xbcu\x10\xedf\x1fVB\xb4\xa3\xc3Y\x0b\xd1\xee\x9f\x80\xd5\x10\xe5\xeb\xd0\xd6C\x94\x89\xbdZ\x11e\x0b'\x8b\x98adD\xe9\xe9\x86G\xd9B\x1c,d\x88\x94\xcdg\x90\x94-`\x98\x94m\x1f:J\xf0\xfe\x12?\xa0\xe6\x192\x11\x82m\x83\\\x8cLu\xce\xb7h3\x0c\x9c\xeeZHsg\x8e\xa1sl\xe6\xd5\x18\xbb\x14\xab\xb4\x16\x98\xa5\x07\xc9qaBA\\t]x\xa9\xdc\xb7GlH~\x08\xa5\xc7@e\xad\xd2\x84\xabx\x89b\xbed\x9b~\x0f\x8f\xefc\xa3\xeb\x1c\x80\x18\xf6\xa5\xe3\x813\xe6\x1a\xf8\xe2e\x0e6\xc8\x14\x9cY\x8cFx\x88^\xf4\x94l\x87\x1b\xab\x07\x80e\xff,F\x8f\x89\xa5\x00J\x0c\xe9\x12\x0ffI\xbf\xf2\xc6\x86\x94\nk\x8bML`\x08\x13\x96,k\x08Y@8\xe4}\x1f \xce:I\xa7\xf9\xf7\x92\x8b\x02\xf4~[d\xd0\x92\x16\xac\x85\x18\xb5H\xce;\xd5\x17\xb3KF\xedo\xa2\x9f\xdf4\xa3\x9a~\xda\xa8\xdep\xdd\xc1;\xec\xc9\x01\x9c3\xf3\xaeO\xb3QFg\x89L\xea=\xcbR\x99`\xab\xcc\xe7!\xcf^\x19\xb3XN\xeb\xdfo\xb5t\x1e\xf7\\3\xf4\xcdy\xdb\xd6\xab^\x04j\x99FtY\xb7\xf8\xb6hV;_M]\xab\xaa|AT\xa6i\x97\xb9\xa8Q5\xac\xee'd_\xf5N\xa4\xf8*\xcf\x025\xa7\xdb\xafMo \x82j@\xbe\xc8\xb8]u\x7f\xc3\x08\xe7\x12\xcd\xb2\xb0\xe6\xd9Xs\xac\xac9v\xd6,Kk\xb2\xad5\xcb\xda\x9aao\xcd\xb3\xb8\xe6\xd9\\3\xac\xaeS\xec\xaei\x82a\xaa\xed\xd5C\x8c[dc\xd6\xd7\xbd\xda_\x0fa\x81\xdd\x97\x0d\xf6Q\xad\xb0\x07\xb3\xc3\x1e\xd0\x12\xfb\xe8\xb6\xd8\xa7k\x8d}\"\xf6\xd8\xc7\xb0\xc8\xc6l\xb2\x93\xad\xb2\x1ej6 tla>\n\xc36\xbb\x13=\x1b\xf6\xd9\xf5\xb6\xae\xd7U]\xd3\x15\xf9zK\x1b\xd2W7\x0d\x8fy\xc2\x87\xdd\x15M\x0f\x9b\"\xfbZ\"\xcd\x88\xfb\xbc\xaay\xe6a\x88\xd5\x9c\xe1Sb|\x1a\x9eD\xf0\xde\x85\xf2\xe5\xe1OS2\x07\xad\x84\x8c\x9a\xce\xeb\xaa)\xba\x1dy6\x16\x94\xa9\x9a~(\x9a\x12\xf9\x14x \xa6\xa9\x89\xa4\x04\x13P\x1aJ\xa4&\xe1%\x9d\xa4\x143\x97\x19RP\x17\xd7\xb5\xbd\x10\xfeEx#\xde]\xc4\xec\xbc\x80\xe19\xcb\xf4\xec1\xd9\xa3\x19\x96m\xf7\xc4\xa4T~(\x91tK\xb4C\xcfJ7\x13\xc6\x80L\xb4\xc6\xd8\xb1\xc7\x0cwnG\x13\x0d\xdd\xf9+>q\x81\xf3G5\xc9\xf6\x9d\xb4\x0d\xf4!\x86\xf8B\xcf-\x7f^&T\xaaX\xd2\xc4\x9b\xb3\x89\xa4W\x086\x06\x14\xc8\xdd\x84K\xfc\xdeL|\xe1\x03\x07zs<\xf9#\x06\x8eN\x83\x05\x9d\x06\xf3\x949\xcf\x07\xf6^\xe8x\x90aL\x94o\xaa\xea\x9a]\x05\xa0 \x86\xb8\x07\xb8\x9c\xa2\xf4*O\xf9\xd6\xbfl\x89O]WV+\x1a\xaa)8,[\xa8\xb1\x18 \xf2\xda\xb4UY\xd4\xf5\x0e\x8a\xd2\x0c\xad*\xef:\xde\x07|\xd7f\xf1\x1d\x1f\x0b\x83:-i\xd8\xa9#:pa\xd0\x18[\xe7l\xa7\xe2\xb70\xa8\x0d\xfc|\xdc_\xcf\xc5a\xc5.a\xdeM$k\x05>\x13q\x80\xadYB\xfb;2\xb4\xa2\x07\xee\x81\xe2\x1f\x8a\x87\xd8\xa6\xe8\x8a{:Pl\x16\xc2\xe3:#\xdcd\xb4\x96e\xa9\x0c\x0bG_\x0cU\xcfD0\xd4\xe5\xd9l\xea\x9d\xff~\x0f\x93{\xe1\x1c\xd9\xa2XP!\x1ep\xde\x0d~\xe5\xb3$\xf6\x19\xd8\x12\x95\xc0\xe1\xd5\xf7\xb0\xc2u\xf2{\x19\xa5\x02JO\x94k\xe6\x95\xea\x94\xc8p7\x13Dl]q\xd6\xb3y\xbe\x14v\x03 2\xcaI,\x91:y&\x17*P\xab\xb4\xedd-\xcb\xdf\xcf/.\xb1\xad\x1f\x99\xe3P\x8c\xc1oo\xdf\x9d\xbf?\xbf<\xff\xf0>\xcd+\xe2\xbe\x11,\xcf\xea>\x1e\x18\xa8\xefa>n\xe4\x0d\xe5\xd5\xc9\x1bD\x8a.\x1e\x9c\x98\xdc\x0e\x9d\xd2y\xbc\x00\xeb\xa9(\xc8\n\x95\xb0q\xb1\xe0\x9fm\x97\x07\xa4\xea*?\x18Ap\x8ar\xdb\xc2>~K;J\x9e\xa9SFz\xae\x9bvP\x96\x1f/\x02\x18_#\x97\x1f\xa4\xd6\xaa\xac\xfa-7\xbdSo\xd5:\xf5\xf2X\xe0\xdb\xc4\xc7\x07\xff#\xceL\xb1\xc3X)\xdb\xba\xa6\xa5\xbc\x00\xf3GG\xb38\xb9-\x1e|\x07$\xc7\x801\x81\x85\x16\xcb\x17\xd1\xac\xd5uM\xaf\x84\xb5o\x0f\x8a\xe2\xd1!\x9e\xf2\xf0\xd1!~t\x88\x1f\x1d\xe2G\x87\xf8\xd1!~t\x88\xff\x95\x1c\xe2\x97\xc6v\xd34\x0e\xfb2\xf27\xf4ud\x18\xd8\xcdPw`\x9a\x97\x1a\xf0=z.\x8b\x904\x83{\xd9!\xe4\xe7Ty?\xe1\x02{*\\\x98\xd6\x9b\x19>K\xf4\xa6\x15\xaa \xdb\xcf\xf0W\"$\xd2\xbd\x95\xc7\xd2c\xc7\xd2cy\x1e\xcaX\x01#\xab\x9bE\x9cW\xcb\x8f\xde\xef\xear\xff\x82\xd2;\x96\x1e\x0b\x11\x0cO\xc0\x1e\x1d\xb3v7\x93\xdd\xb2\xb1\xf18n\xcec\xe9\xb1$\x14\n\x89\xaf3\x89oq\x928\xb1d1T\nIG\xa6\x900C2\x8c!\x15\xc0\x90\x06]H\x03-$\xc2\x15\x12\x80\n\x89\x10\x85$pB*,!\x15\x90\x90\x04E\xc8\x03!\xc4.\x96\xd3\x80\x07\x9e,\xa8\x01\xc8\xc1\x9e\xc0\x06\xfb\x85\x19,\x0f0x$h\xc1\x01@\x05\x07\x81\x13<\"\x90\xe0)B\x08\x1e\x1d\x167T\x9a\x82O\x1a\xfam\xb8b\x0f\x0f-\xb9\xa67\x8e\x9a\xfaeK\xbb\x1d\xfb\xbc\xd9\x88\xd9\xc3lR(\xb9o\xfb\x81\xd0\xf5\xba*+\xda\x0c\xf5\xee\x84|h\xea\x1di\x1b~7i\xd7k\xb8\xeb26l\x89p\xdbn\xeb\x15\x0fL\xa4\x83a\xdd\xe2/e\xce\xca\xb6j\x86\x9f_\xf9\xe7\xc5\x11f\x825>5\xcd\xf6\x9e\xdfp\xc5op\x97*\x1a\xc6\x1b\xbf\xee\xf0@p\x98H\x8b\xca\xb6)\x1e\x8a\xaa.\xaekzb\xfbR\xce9\xf5\x9a\xe9+j\x82\x18\xed\x86l\x99\xbcb\x04sg\xcb\xee\xc2\x9d\xbc\xba\xba\xaf\xf6>w\xbc\x13)\xfe\x87v(j\xcd\x0f-<\xbb\xb0\x8f\x8c\xfd&\\\x0d\xdb\xda\xc1\xa8rm\xd2\x9e\xbe5\xa9\xe9z \xf4~\xc3n\xec\"<_\xd8\x89 .\x0b\xb64t\xc4f\xeezGhQ\xde\x92b\xb3\xd1\xe7\x84\xdf}\xaf8\x9f\xd8\xcc,\xeb\xe3\xd1:c3\xc4\xf7SK\x86nK\x89um.\x06mF\xf8\x83b\x91M\x82B\xda9>a\xe8I*\x02\xf6*\xf0\xcb\x14Q\x9b\x93\xcb*M\x8a9\x9f\xf7\xe7\xf3\xdeY\x01k(-\xdb\xaa\x1d\xf7<\xab\xec\x08\xe3W\xc4>\x94\x13\xb1\xe7\xab\x9b\xa6\xed\x9c\xb8t\xf9\x15\xd9\xdd\xc0,\xe9\x0b\xd6Q\xa6\xe6\xd0\xfd/\x96\xe8\xc8^\xa8j\xdc\xc5\xfc2\x8e\xedd\x8b\x12\xeb\x876\x1c\xcb\xdev+\xda\x9d\xfc\xcd\x1e\xe6E\xd5\x94\xf45)\xdb\xfe\xbe\xed_\xf4\xab;\xf2\xf2\xe4\xd5\x8f\xea!qU4\xe47\x08\xe8\xb1\xfa#\xe7\x83\xde_\xd3\xd5\n\xf8\xb8\xf9\xf4\xf1\x8d:\x01\xc5\xb5\x0c\xce%%q4r\xe3\xfa\x9f\x90\xb7\xe2\xbe\x90\xaati*\xcf\xe85\xcc.D\xc9\xa8Lu\x1c\x02\x07\xf3\x0bR\x1e\x93\xb5`o\xcf\xf7iB\x0b\xfa\xf6\x16\xf6oB\x0b\xcc)I@\xca\x1es\xbc/\x9dc=\xcdC\n\xed\xd09\xde\x1f1\x8d\xfa\x92\x1eUh\xc7l\xea\xc7\xe0q\xdbE\x93\xf2\xf41x\xdc\xf3\xd4\xbe\xfc\xb9\x08\xf1\xc5\xbd\xbaH\x1f\x8b\xf8v\x11\xba\x87\xf3\xf0\"\x9d\xef\xc7\xcf\x8bt\xb4/o/\xd2\xd5a}\xbe\x08\x03O\xc4\xf3\x8bp\xf6\x18\xfe_\x84\x8d\xbd{\x81\xa1=\xb1\xe0q\x0f\x1f\x0b\xba\x91\xa1\xc5j]F]\xca\xd0\xf6\xa7\xeb,\x10\xe69\xd5\xed\x8c\x12\x93\xae\xe8\xa0\xf3\x19\x9a\x7f)\x97qDC\x9b\xe5\x8e\x86\xb6\xacS\x1aZ\xc85\x8d\xf4\x8aL\xd2L7\xb5C\xcf\xe3\xe4uVm\xa2\xa1\xa0\xf4\xba\xaf\xa1\xcd\xb3\x12\xc4&\x8b\xd8,\xe4\xf8\xb9q\xc9\xe0\x8b\xec\x8c{\xc0\xa1\x1dx\xc0)\xae\xf28\x95\xd8p\x83\xce]h\x87\x1ew\x9es\x1d%\x18si;\xdd\xee1x}\x82/>F'2\x98\x89\x0b\x999\x98l\xbf\xbdC\xc1_G\x93D\xd8Y\xc0\x93o\xd0\x9b\x12O\x89\xd9\x83\x95.%#(\x91\xce\x95\x04zj\xb1\x90\xc7\xe0\xac\xa5\x066\x17~`\x91s\x82\xb3\xa0a0\x04\xb2G(\x02 )\x13~U\xc2\x81%\x90\x98(\n\x9e(q)5\x1d\xa6\x80\x10\x9b\x87U\xc0\xb9\xc3\xfa\xf1B\x18\x88\x07\xc6@Rg\x11q\xc9\x93\xa4y\\\x06\xd6@\"\xd0\x06\xb24\xbc\x81x!\x0e\x04\x859\x10\x1c\xea@\xf6>\xbf\xd3\xa1\x0f\x081\xe1\xfaG\xe1\x0fd\x16\x04\x02!f\x81\"H\x08\x18A\x822\x96D\xe4,I\x9a\xc9\x19@ \xff\xa7\xe8\x01K\x90\xb9\x80 \x84^\xd5\xa0\xa0 2\x038\x81\xf5\x02P\n/x\x82\xa0\x00\n\xe2\x03Q\x90\x03,\xecr\xa0\n\x92\x04\xac qp\x05 \x18B\xa6\x83,,B#\xe4\xc2\xfa\x03\x86\xbb\xc8\x03$*\xfb9\xbfT\xea0\x9e\xd1\x02!]\x87\xae2\x95\xa1N\xca\xe3\x15S\xb7\x96\xc3$\xaaC\\\xc8Qu\x9e\x93M\xd1\x0b+\xb3\xb6,'\xf0w\x8b\x08?\xe4\xa3'\xfc\xf9X\xd6EHQ\x04\xd6\xdd\x81=\xb5i\xc1]\xed\xe8\xe3\x84x\xc1cy\xb0:\xdf\x1eT\xa2\xc2w\xa2\x8cr\xc9\xe1_\x9f(M\xf0\xd8\x9b\xf0k\xc1?\xc7\xe7\xa4\x1az-\x03|\x03\n\xe6\x8a\xb4l\x1e\xbeV\xc2\x1c\x8c\x7f\xe5aP\x0e\x99\x91M \x13\x18\x94\x9dD\x80\xbd\xf4z\xca\x07\x01\x17\xc6d\x00},i\x80\xb3\xf2\x9f\x01qs\xfe\x9b\x86\xb4a]\x9e\x10r~\xbf\xa9\xb9\x0f\xa9'\xfd\xea\xeeD\xd6_\xaf\x9a\x81v\xeb\xa2\xa4\x88\x08\xda\xf6\x94\x9d\x14\x9d* CA\xd8jiU\xc9\x1b.#\xf5!\x06\xd1E\xcb\x0d\xd5c\xf7\x1b\xddX\xdc\x040\xd8)d\xe1r\xc3\x96\xdf\xa2G\xe5\xecH\xab\xf9\xd7j\xb8\xad\x1am\x12\xb5\x17\x00_\x81\x0d-+\x10-\xdb\"+\xd6a\x82eG\xd69\xc2\xcb\xee?\x93~$\xa4bI[O(UR\xf0\xf7\xc6](;R\x93\n\xb9\xd2\x98\xa8\x15\xacl\xba\xb6\xe4[\x0c\xa5\x87V\xc3\x8a\x0e:T\x9e$\x03a\x90\x03(I\x87\x93\xa4\x83I2\xa0$\x89@\x92\x0c\x18I2\x88$\x07B\x92\x03 I\x86\x8f\xe4\x83G\xe2\xda\xe7T\xe0\x88'\xf8\x9f\x84\x13\x00\x90\xfd\x82F\xf6\x0f\x19\xd9\x0f`\xe4\x11\xe1\"\x07\x02\x8b\x1c\x0c*\xf2\xc8@\x91\xa7\n\x13y\x12 \x91CCD\xa4\x11\xd8\xafM\xf8n\xed\xf1{\xbd\xd2\x0f\x94\xa5[-\xdb\xdf{^\x0d\xbf\x18\xb6\x1dW\xf2%\x1b\x7fC\xdfG\xa4\xf2\x19\x00W\xa4\xe8\x13\x1a\x0d\xfb\x14N\xab\x86 \x15>z\xae\x7f\xd8\x05\xdd\xdc\xf2\xfb(| |.\\r7\x8b\x04\xab\xa8MH\x86vCj\xfa@k\x03~+S\xeb\xf5B\xf79!Ar\x1c\xf6\xc2\xe6\x87\xe7\xe3\x14v\x02 \x89iW\xd5\xda\xb1\xd9\xb0.x\xf5:M\xb7\x92J?\xd06\xb5\xf7\xaa!\xdb\x86i\xca\xecy\x8b\x96\xe4\xa2\xae\xfaABB(\xe9i\xdf\xeb^+\xd6X\x8fWEY:\xda\xe8\x0458;tx\xc4;K\x05\x9d\xa3a\xd8\xe8\x8a\xedp\xdbv\xd5\x9f 5:Z\xd2\xea\x81j5\"\x11\xcd\x1f\xad\xfa\x073\xa8=\xc9/\xb9W\x06\xe2;\xf1j\x13\x19\xcb\xb8\x85M\xc1:\xa8:b\x01\x06\xed\xcdt1\x14\xcd\xaa\xe8V\xba0\x14\x12\xb9\xff\xff\xd9{\xb7&\xb9m$_\xfc}?E\xc6\xbeX\x8e\xbf\xd4\x96lkf\xac\x88y\xe8\x95\xe4]\xc5\xdf\x17\xad\xba5s\xf6\xa9\x86]\x85\xea\xa6\x9bE\x96IVK\xed8\x1f\xfe\x04q!qI\\\x89\xea.y\x89'\xa9\x9aH$\x12@\"\x91\xf9C\x82BivE{K\xda\xf17\xe3\x1eXK\xa0;\xec\xf7M\xdbs\xe0\x10m\x8c\xf2A\xe7\xd3\xb0\xe8\xfa\xbe-\xaf\x0e=}\xe0\x8c\xb9#\xaf\xc8\xa0c\xeak\xc3H\xbfb>\x15\xae\xa7\x84\x12\x1ff\xd6z\xd8\x0f\x11g#?\\\xd2'\xcc\xeeWmSU\x87\xfd\xf1\xc3u\xff\xe4j\xaa\xa8\xaaq\x11(\x87?*\xbcr8<\xf3\xc5\xa0\x03\xd44\x82J\xe5\xaf:\xa1\x12\xb6%\xa96\x86\x97\x97\x89\xb5\xea\x1a uqU\x11\xba\xed\xd1 \x07\xd7\x8d\x7f\xa7>O\xc6\x08\xa7Do\xa23^\xf0El\x89Y+]\xa7\xee\x0f\xe9\xa9\xd2\xb6iz\xe9\xb9:\x81\xb0\x92\xdf\xab\x13\xdal`c\x03W\xf2\"\xa7\x91\x99\x96y\xbd4&\x84\xe3\xc3\x95\xd0C\xf9&\n\x17%\xe9\xbc\x91\xf4#xe\xd0\xde\x80\x1b\xb4dM\xc7q\xccL\x1ca\xc8\xa2\xf1c\x949\xf6\x8f\x88l\x10\x91\x0cN\xf4AA\xff`i\xd7\xed\x8c\xce\xcb\x9e\x11\n\xd6q0\x10! \x84\x01?\xc0\x06\x13\x98\xba\xe8p\xbc\xa2]'\x98\xb5\xa2\xd7\xa2NmI\xa53\x95\x9c\xdcF\xacb\x044\xa6\x92\x92\xfe\x171g\xc3\x986\xb6[g\xd3\xb0\xa4\xd2\x89\xb4!-\x02\x0c\x82\xe49\x87\x821\xae4~\xc1l\x0e\x1f\xd8N\x98K\x82\x8a+\xfe\xb2$\xc0Y\x12\xe0, pb@eK\x02\x9c\x99\x08\xb1%\x01N8\xfakI\x80\xe3\xc3s- pX\xc9\x87\xd5\xdaxqZ_@\x02\x1c\xdd\xb8\x01G\xaa\x1b\x19\xcb\x12 _IOes\xec\xe45k\x05'\xe3\xa4\xe1\xa2\x03V\x1f\x0d+V\x8d\xcc\x8a\xe7v\x92\x1b\xc80\x03Q\x83\xd2\x1b\xa8$\xe1jXq\xa3kX9\xa68lG\xe1\x10\xd4\x0dJ\x90F.\xa2\xb07\xac`\x08\x1cVl\x01\x08V\xbc\xf7v\xad\xa9\x7f\xfc\xc9\x7f\x9c\xf8\x1cV\xa1\xd48\x1e*\x01\x01\xc5\x8a\x1f\x07\xc5\x8aOo\xfa5f\xc8\xa8\xa5\xe3\xa3PrB-E\xa1\xa4XI\xc4J\xe1\xf3\x87\xf1j\"\xa6X\xf1 f.z\xca xu\xef\xc2P\xb1\"\x1ca3\xf2Oe\x80uH\xe4t\xa9\x9d\x9c\x83/\x13,\x8b\x95Q\x82\x0f\x92$Jk-\x04\xe8aO\x0c\xe4\x00m\xb1\x92\x91q\x8b\x1aA\x18\x01\x1f\xba\xcbI\xc8\xd6\xd7\x1c\xc9\x9c&J\x11\x88\x0f;K\x89R\x0f\x17k4\xf4C\xae\x8c\x02\xc8\xe4\x0fp\x18\x19+>\x1eM\nQ\xba\xc7\xa0g\xf1Bg\xd5D(\xd4\x8c\x95\x87Z' \x984\x94\xda\x92\xf6\x0ekD\xfa_\xe2\xd2\xcc\xdeo\x8d%X\xd2\xde\xe9t\xfe\xf7\xa5\xbdK\xc4\xdb!\x94\xe8\x87\x96\xfctKF:Qf\xe3\xfe4z\xfd\x92\x91\x0et\xde2b\x03\xc1\xb5\xcf/\x19\xe9\x96\x8ctKF:\xa9\xf8\xe5\x9b\x8eED\x88-\x19\xe9\xd2\x90\x8b\xf6\xa5\xb8d\xa4\x1b\xcb\x92\x91n\xc9H\xc7J\x849\xb9d\xa4[2\xd2\x81q\xc4Zk(Zp\xe5\x9eKD\xea\xb2c\x1c\x13\xb11a\x11|.\xfb^\xf1@\xa1#\x82LQ;H4\x94\x82K\x0d\x8e\xaf:\x8a\x9d\xc6\xf2\x02 \xdd\xd7\x86Q\x11@\x8buK\x04\xccB\"\xc7;z6j\x0dm\xcdbQ\xd9\xb9\xc0dK\x84\xd3aY%A21 \xa6 \x14\x8b\xb0t\xe3(\x1d\x9c\xe3\x98\xc9`\xa4d(>2\x0c\x15\x19\x86\x85\x0cD@\x06\xe0\x1e\x03\xd1\x8eA\x18\xc7Pdc(\x9e1\x08\xc5\x18\x87]\xf4\xd9.i8EK.3\x07:\xf1H\x98\xc4\xe3\"\x11\xf3\xe3\x0f\x1f u\xf8\x00X\xc3\x07A\x18>\"\xae\xf0\x14\xd1\x84\x8f\x8e!|H\xe4\xa0\x0d/\xe8:\xdb\xb9Ovs\x10\x81\xb8Y\x9b\x8e\xfe\xd3\xf2\x90\x19\x98?\xde\xde\x08\xb4\xe1a B\x8d\x01\xf6:M?>\x9470O]\xede\xa7SR_\xa3F\x8d\x04\xackC5\xea}\x11\\\xcb\xf81\x0e\x99!\x9f\xc9\xfa@\xedf\xfd\x95&\x8e\xa0\xa3,3\xa77\xab\xa1\xcd\xc8\x93\xdbP\xe5\xd9\xc0\xa1Z\x8dM\x85\x9e\xe14\xc97\xc3\x07\xcc/CG\x9e\xd4}{O\x0dz\xde2\xc2\xcbU\xe8\xc1Zj\xcbbS3\xcd\xcd\xa5\xcb\x0f\xfe\xeb\xa6\x95[\xe5\xf2~\x04 TE\xd7\x8b\xe6\x11\x86r\x8b\x81\xc2jK\xab\x1c\xf8\xfc\xc2\xda,\xeb\x9e\\\x93\x16\x95\x81\xf5\xf8>l\x93\"\x1c\xa3\xce]\xc6N\xd9AY\xaf[\xbam\x8b\xf5C/\x8a\xb3\xfeK$\xb97)N\x1ar\xf3\x9c\x00\x02 %lr\x94M\xfd\x0dk\x96\xbe\x10o\xe8PEQ\x9c\x0f+\xf9\xc7AAt\xb0.\xf6L\xe3\xa3\xf8\x13:\xc0\xe3\x184\xb0+n\x95~\xd1\x01\x19_\xfc\xaa7b\x96\x90{\xf8DZ\x02\xbbb\x838\x1aFf\xb87`\xc2\x0e\"\n\x15\x8a\xeb\xa2\xac\x076&\xd5\x85a=\x86o\xa8\xbbAxD.\xa5\xc3#\xf5\x0d\xdd\x14wD\xa2\xc2\xfbJ\xf3\xc7)\xef\xae\x8a\x97\xdf'\x17\xe4/\xbf\x0eV\xdd?y\xdf47\xd2\x07%\xaf%\x14\x1c\x0fI\xa7\xc8\x84\x82,\xd4.?\xa5\xe2\x15\xfd\xa7\xb3y\xd7\xd06}\xae\x93w\x9bwc\x00\xf8\xc8\x0e\x14=p>\x92\x02+\x14\x87wH\x83\xdaL5\x0dt\xcdl^BP2\xd2\xe7\x08K\x18.m>[&\x18M\xfa%\x8a=\xfe\xcf\xec\x0cJt'\xdbJ\xfa-\x98I\x15;\x83r\x862\x11\x8a\x86q4\x1d \x14\xb4i?v\xc5&\xaa\x91\x83u\xe3M\xe5\xa8h]\xa5\x02\xdb<0\x95\xcbp,\xe5f\xd2\x1dH\xd4\xc4\x14H\x94\xcd$X \xdc\x90\xc2\xdc\xff\x82\xa8]9\xac\x97L\x8f\xb4\xe0\x0cF)\x0c+\xa3\xf3\x92\xbb\x85\xafH+\x03\x11\x02B\x18\x08Y\x97\xa6\xc0\x18\x17\x18^\x8c\xed\x96\x13\\\xec\xaeh\xcb\xe6\xc0\xd6\x1e\xb4\xe4\xbahi\xc8\xb1\x18w.w\x9a6\xf6Q\xf4C9\xac\x9a\xae\xa7\xc2\x96*\xb2\x7fC\xc2\xac\xb3\x07CR\xa8\xf9|\xac3\x83#\x1a5\xf9\xc4\xad\x82\xac\x90\xa0\x06\x16(\x81\xe5\xfd\x99\xe8\xf8\nJoy\x7f\xc6\xf0X\xfb?]\xde\x9fY\xde\x9f\xb1\x92\xce\x1e\xbf1Z\xc8\x12\xc31\xa8>\\\x1c\xc7h\xfa8\xb1\x1c\xa3\x99c\xc5s\x8c\x86\x1e6\xa6c4\x7f\"q\x1d\x83\xaf\xc7\x88\xed\x18L\x1c9\xbe\x03\xcb\xfb3\xac\xa0\xf9\x1er\xc5\x7f\xc0\x88\x01A\x80\xff\xd5\xe8r\xc6x\x10 1!\xc0\xe2Bp\x04\xe3|^\x9cH#\xc6\xc6\x13\xb3\xce\xb5x\x11x\xf9\x9a\x19C\xd2\xa8\xd1\x88\x12\"\xc7\xa8\xfb\x11\xf6\xe0\x12\xf8\xcc^w\x88\x05 \"\xccb\x06\x9a\xc0\x11l\x02\x1fg\x81\xd1\x16w\xd0 \x9c\x81'\xf0\xf1\x90Q:\x96 \x148\x02Q\xe0c/PD\x9e\x80\x14\xd8\x82R\x00\xae\xc0\x148\x83S\xe09\xf4\xa5F\xad\x10RF\x1c\x0bl\xb1,\x08\x14h\x9e\x98\x168D\x90-\xb6\x05Q\xf1-pj\xb7\x9cq.\xc0b]\x907\xde\x05yc^\x10\x16\xf7\x025\xee\x11\xecWW\xabD]\xa9\xc7\xdd\xeai>\xf5L\x8e\xbalA7p\x07\xde 'oa\xdeu$h\xe1\x0d\xc4AV6\xa3|\xec^v\xd1\x18\x14\xccg\xd8Pj\xe9Q;+!\xacO\xc9\xb1\x03\xa9~X\xf4\xc0\xc9F\x84<\xc3\xc4\xe6\x0f*\x84\xc9\x1b\x0d\x0b\x99\xd7\xb1=Le\x0c\x03\x82uH\x93\xac]<,\x08\xbe\xbd\xdd:\xa9!_\x88\x10|aB\xc8\xcfe\x98RC\x02a\x10\x126\x84#0\x1c\xa5\xde\x9c\x8c\xe3\xe90\x9c\xfc\xe6\x0e'\x82#\xa4\x08 \xcc\xf8\xb5\x80=\xb489(, \x80\xeck\x1e\xad8\xc7H\xc1CiI6\x8b\xce[\xa0\xd6M\xdc\xc5\xf4\xd6\xacZ\x00\xef\xa1F\x0dQ\x12\x86\xa8\x8f`\xf3x{\x15\xa25<$\x9c}R\x7f\x88\xd8+s\xf5\xcfd@\xf4\xd5\xfc\x8bFKSA\xe1\xfdN\xb5L<\xbd \xd5O\xc9\xe3\x151<1|\xfbUY\xfc \"\x18\n\x1d\xa7\xe9H\xbe#\x8e \xc3\xe9\xb2\xd9\x11 \x9f\xfb\xb6\xe0>\xdam\xc9S\x97pje\xef\x87X,o\xe1-o\xe1-o\xe1\xc5\xa4\xb3Y\xde\xc2\x9b\x99\x9bfy\x0b/<\xef\xcc\xf2\x16\x9e/\x93\xcc\xf2\x16\x1e+\xf9\xb2\xc4l\xbc\x19b\xbe\x80\xb7\xf0t\x93*\xf2Y\xbc\xa9\x12|x\xff\x9a\x93\nM\xba\x91\xf6@\x1e\xaf\xab\x1b#y3Q\xf0V\xf4C\xbe\xd5\x87\xe5\xc9\\kq\xc5\xb3\xe2\xf4\x1bx\xdc.n\x14-+s\xe8\xfbV\x13+\xa9\xe8Z\x94\x98\x94\x8e\x04\x8b\xe2\xb3\x82\"mY\xc1\xa6\xc3T\xbc\xcfE,\xef\xcc%\xa0t\x1d\xb4\x96w\xe60\x98c\xe8\xf7\xcb;s\xbe\x1a\xcb;s\xe8\x04\xce\x81\x0bF\x1a8\n:\x18i'\x1bF\x18\xa1\xfd\xb0Ha\x84\x81\xe3\xe1\x85\x91\xc6\x8e\x89\x1aF\x9a{x\xec0\xc2\xc4 !\x88\x11\xee\x1e\x0bG\x8c\xb0\xf2\x00hbV\x96w\xe6\xe6\xbf3\x97\x13}\xcc\x8a\x89A\xe6-\xb9\x8d1\xb7X\xd2P\xc9\xb8\xfc\x05R\x19\xc5&\xb3\xb2\xc6\x10\xcac\xf5#\x1f|\xd6\xf1\xc8e\x94\x8e\x81G\xb7\x9f|\x10\x143+!\xfc&\"\x9aQZJ\xa6\x1c\xab\xf4\xad\xc7)\xdfa\xca\x8dtf%\xe0\xd0\xe0\xc7\xf5\xb2\x12\x8c\xee\xc5\xb1\xcf\xac\xb8\x10\xd0\xac\x04p\x1c\x08\xf5\xf5\xa3\xa1Yqc\xa2Y \xe0*\xbb\x1c\x1d(iV\\XiV\x02\xd8\x0e\x14f\x00n\x9a\x15+z\x9a\x15\xc6\x91\x0dC\xcd\x8a\x1bI\xcd\x8ao\xe3\xc9\x8a\xaaf\x05\xc5V\xb3bEX\xb3\x12>\x0c\x81\xfd\x89\x00b[\xe9\x99\x00mV\xdc\x9c$\x83\xb5q\xb9\x15\xb7$\x12\xb2\xcd\x8aO\x95'\xc2\xb7\x0d:\xaaw\x0e\x05q\xb3\x92\n\xe56\x08\xe1\xd0nVR\x01\xde\x06! \xf0\x1d\n\xf3fECn\xeb\x13\xde7,Z\xf59\x98*\x85\xa0\xbe\xbb\x9e\x9c\x17\xda\x02\xbfM\x83\x88\xb3b@\xb9\x1f\x8c\xe7\x10\xbc\x94\x15\xe4\na\x00rV2\xb2o\xd1g(+\xe0\x83bzH\xb9{,\xc1\x93\x1f\xbf\xcf\x123\x10\x8dM\xd7\xc9\xd9\xfb\x8d\x83S\xbd\x9dE'`(\x04,\x88\xb1\xc4Q\x88\x11s4\xf4K\xad\xee@\xb4\xf3\x0f\xed\xb8vV\x82\x98M\xc6\xb8\xa3\xe4\xca\xda;\x02\xb3\xcf?v\xec;+\x01V\x97g1\x01\x0eKNE\xc3\xb3\xe2\xc5\xc4\xb3rD\xee\xc3\xf4\xb7\x05\xdf\xcdJ\x10V\x9e\x95#t\xc4a%\xa7\x00\xeb\xbd\xc4\\2\xb0i6\x08\xeb:2@\xe1\xfa-\x80\xbd\x99#\x13'\xf6DM\x07\xf8\xb8\xa9\xdd2\xf0\xb0)\xf6'J$\xdc\n5\xe89\x83\xf9\x99\x8cR\x9d\xe7\x84\xdd*\x83\xcd\xa0sa\xd5\x80\x0e\xf7\xac~\x9c\xb2\xaaIc\x98\x1e\xc4\xc0\x0d\xecy\x88\xf6\x0c\"\x14\xd0o\x1f4\x9d\x95G\x90\x81\x15\xdc\x1eP\x1d\xbb\xda\x14+\x9b\x1c\xf6dP_C\x95q\x00)\x7f\xaf\x12\x078\xbeW\x89\x8a:`\x1a\xc8]t\xf1\x95\xe1~\x82Bo\xdb\xb4\xfc\x96\x02\xd26\xa7\x85\xbc \xcc\xff \xea-o\x08\xcf\xbd/\xa1\xd1\xeb\x977\x84A\xe7-\xe3\x9d\np\x99\x15\xcb\x1b\xc2\xcb\x1b\xc2\xcb\x1b\xc2R\xf1\xcb7\xfd\x0e\x07BlyC8\xed\xc6\x87}).o\x08\x8feyCxyC\x98\x95\x08sryCxyC\x18\xac\xab\x1c\xb9s4zy\\\xcf O\xd5Rn8\xc5^\x197\xbd\xfe\xe8P\xd9\x15\xd9\xe8\xc3\x1f\x8c%RR\xbb\xff\x8a@A\x0f\xc2O\x81\x9c]\xcbS\xe3\x87\x17?\xfc\xf5oW\xc5\xb7\xcf^n\xbf{\xf9\xec\xfb\x97?\x14\xcf\xfe\xf6\x97\xe2\xaf\xcf\xb6d]\xbc\xb8z\xfe\xf2\xc5\xb7\xe49\x83\xbc\n\xef\x80\x1c\x01\xe0\xe4\xf4\xd6_\xfc\xfe\xc75y\xfeG\xf1G\x7f\xf8\xcb\xcb\xfe\xf3\xcb\xcf/\xab\xea\xee\xe5\xe7\xf5\x0f\x7f\xf4\xdd\xef\x9f\xab\xdbO\xa4\x12<`!\xe9\xd8\x0eO\xc1\xe6\xa0.\xbf\xfc\xdb\xf3\xef\xb6\x7f\xbbZ?\xfb\xcb\xf3\xbf\xfc\xf5\xd9\xf7\xe4\xea\xe5\xb3\x1f^\xbe\xd8>\xfb\xf6\xc5\xb7/\xfe\xf2\xd7\x17\xebo\xc9Z\xeb\xb2\x1a\xaaF:\xcd>x\xf1\xfbgk\xb7\x7f\xe8~\xaf\xd67\xdfu\x9f?\xd5\xdf\x7f\xff\xdb\xcb\xe7\xbf\xfdq\xdd\xff\xad\xedn\xee~\xbf\xdf\xb6\xbf\xad[\x99\xc1K\n\xd9,j\xb6\xf5\x8e\x1d\x19\xf6\xa0B \xd1\x14U\xd7\xc8|pE\xbb\x99\x8e\xfb\xeb\xa6\xddD?\x86\xa3HW\xa2\xc1\xecr.\x14\xf6\xbb&\x13\xbd\xda\x8b\xdf\xbf\xb5J\xe4\xd3\xf7\xdfn~\xff\xf6\xb7\xcd\xddnS\xfcq\xf8\xf4\xc7\xba\xd8lnn\xfev\xbd;|\xb7[\xffA\xbe\xd3:\x11\xf0b\xa2\xb7\x13\x14\x98\xca\x97<\xfd\xf7\xe8\xdf\xa0}\xe9\x1b\xd8\x965\xf5k\x8ccN\xfd.\xfa\xee.\xe4\xcc\x06C0*\x8e\xe0\xf4G\x9d\xd5|\x99\x12x\x88\xd2\x7f\xbe\x17\xd1:\xee{R\x15=\xf3\xdd\x8c\x8e\xa3\xe9\xa2\xb6%\xfd\x03\xc5\xde\x1c\xafS\xbc\x81\xb0n\x89\x8f\xd9\xe8u\xc4\\\x89\xd6\x0e- 9|\x1d\x98\xebHr%\xe4PZ\xd56H\x08\xbfk\x1c\xf5\xae\x7f\x17\x7f\xbfX]\xbf\x1b#\x82)X\x1d\xbd\xac\xeb1\xd3\xe8MSm:}q=\xa1\x87\x07\xda-\xb2\xf9:\xc9\xb2\xd5x\xb2\xd6\xb6S\x00'\xa2 \xc8\xed\x80:\xc7\\p\xca\x8f\xecV\xf0\xbb70^$e\x1a\x13\xe0\xddn_Qhj\x07\xdd\xe6\xf6\xec\x9c\xc3\xe0\xca\xba'\xed\xb6Xcg\xa9\x81\xc6\xa1\xa3X\xe2v\xb4@\x08;\x8f\x0d\xe2-[v\xe2yM\x8fQz\xd7\xbd\xd7\xa4\x8f#\x82I\x0d#\x17\xa1\xc7\xa8\x00\xfdJ\xfe;vB\x1b\n\xcd|N\x84\xe4\x8a\xaaj>qllYK\x02\xd6j\xd2\xbbcH\xe8\x95u\x19\xbf(m\xbd&m\x9dw\xac\xf8P-\x9e\x0b\xd2\x9eP\x10\xc0\xcc\xcb\xd1\xae\xab\xd1\x01\x18\xe5l\xd7\xa2\x83.E\x07\x08\xc3}!:\xfa:t\xece\xe8\xb8\xab\xd0q\x17\xa1#\xafAG\\\x82\x8e\xbc\x02\x1du\x01:\xf6\xfas\xec\xe5\xe7\xa8\xab\xcfi\x17\x9f\xfdN2V2_z\x0e\xbe\xf2|\xe4\x0b\xcf\x0fs\xdd\xf9x\x97\x9d\x1f\xf9\xaa\xf3\x03^t~\xd0k\xce'p\xc9\xf9\x94\xaf8\x9f\xcc\x05\xe7\xc7\xb8\xde\xec\xbb\xdc\xec\x0eZ\xb0\xe2\x0b]\xb0\x92\xe3Z\xb3\xe7\x06T\xf2\x95f\xe4\x11%\x90P5\xc6\x1f\xfd\xfb\xcc%=H\x89\xfb\xce\xe3\x84\x85\xbe\xd9CE\xeeH\xc5M[\xd5\x91\x83)'f\xa1\x9d\xe9$w\x87\x8e\xdd\x94\x86\xa2\xbe\x17\x87\xb4N\xba\x12\x88\x86\xaczv\xb7\xb1\x90\xed>q\xb0a\xf4\xd5\xd3IY\xc3\xa1\x1e\xac~\xcb\xc5o\xc1MU\x0e'Dh\x14p\xb9\x81\x1f\x1cZ^\x15\xeb5jE\xcf0\xe9-v\xa6\x7f\x94\xce\xc7\xce\x8aC\xc8\xd0\x11\xda\xf3\xe2\xd0\xdf4m\xf9\x07\xd3B-Y\x93\xf2n\xd0\x87\xdbg\xb6\xc5\xa4\xbd\xed$_\x1d\x97\x9dm\xa2\xd0X\xc0\x8a\xce\x82\x95\xf5h1\xb7\x7f\xd32P\x15\xf80J,\x18\x811\x8cP\x12\x93\xe4\xa2/\xeaM\xd1nd\xa5\xcb\xb5?\xbb!\xb8+\xda[\xd2\x8e\xbf\xa1\x11\xe1\x96@w\xd8\xef\x9bvhu<\x92P~\xce\xb8\x13\xb9\xe8\xfb\xb6\xbc:\xf4\x04v\xc5\xbdp'#\xb4\xd67E}Mo\x82\xd3>q}(6\x8daF\xae\x87\xbd\xd8\x1a\xab\xa5\x87\xef\x15\xd5C\xab\xb6\xa9\xaa\xc3\xde6\x08\xc7\x0b\xdc\xfe\x93\xab\xc4\xa2\xaa\xa4wd\xa4\xa9C\x05[\xf6\xdd\xe4\x98\xa1\xab\x1f\x15\x88P4\n\x81\xaf:\xa1n\xe8E\x7f4x\xce\xc4^u\x0d\x90\xba\xb8\xaa\xd8\xf9\x8e\xe2G\xb8>\xfe;\x0d'3\x8685\xfc~\xbd\xf0@\xf3\xbe\xa8Bw\x8b\x83\xdd\x8c\x1c\xef\x86B\xdb4\xf2#8\xd4\x8a\x83uSUd-\x82\xaf\xa3O\xf5Sm\x1cG\xaf8\x08\xa6e\x01F\x84\xa1\x11\xdd>\xef\xe9\x89`\xa0:~\xbaF\x14\xc4\x898\xc9L\x1fb\xf2%\x9bQb\xcb\x93\x13\x16\x86\xa7\xb6\xc0w3\xc6\xc38\x8e\xc2\x0e\xdfM&*\x10\x00\xb1\xf60\x93 <\x84\x19?2\x1a\x13\xa4\xb9\xd6\xed\xb7TB\x16|\xda\xf5\x14h\x10\xf4\x03\xe6]\xcd\xa4\x03\xac\x17R2\xcdXt\x1bS\x9a\xf6\xa8\x88\xce\xf1\x18\x05\xe0\x0fR\x18M\x1c[\x8f\xf8;\x19\xa2a|4\xdc]\x94\xfe\x97\xb0\x8a\xb2\xf6UcE\xd5P\xc6\xf5\x11\x84\x9c\xb2H\xfd\xbd\x9f\xab\xc2|]\nUn>\xc18\xba\x900dQ]\xf0\xabD\x1f\xf3\xfa\xa8j\xe0\x96%S1-\xfe\x10\xdc<\xfa!\xc3\xbed*\x1e\x8b'\x10\xe7\x1d\x0b\xfe\xd1\x9c`\xdc\x92\xa988&cT \x08\xce\xc5\x86\xe7b\x03t\xd1!\xba\xa8 ]t\x98.2P\x17\x1f\xaa\x8b\x0f\xd6E\x86\xebR\x03va\x9a\x8f\x95\xccA\xbb\x88\xb0\xdd\xd1\x03w\x0f\x15\xba;f\xf0\xee\xd1\xc3w\x0f\x1a\xc0{\xe0\x10\xdeI\x04\xf1N;\x8cwB\x81\xbc\xc7 \xe5\xf9\x83y>W\xb6(>\x97\xb6(9Bz~[)=\xacg!\xb8d*V\xca\x92\xa9\xd8<\xf9,\x99\x8a\xa7\x12ph\x10\x83\x9c-\xc3\xee\x92\xa98\x8f\x1c\x97L\xc5K\xa6b\xa9,\x99\x8a\xa5\xe2S\xe5K\xa6\xe2%S\xf1)y\xa1\xf5\xa8\xe8ty\xd4\x1akS\xaf\x7f\x9a\xf6\x83$\xcb\x07I\xe4f\xb4\xe7 \xce\x8f\x9f;YwE\x99\xb3\xb2o\xd1g(+\xde\x08\xbe\x87\x94\xbb\xc7\xfc\x9f\xa7\xd1g\x89\x99\xe9\xbc$\xfd\x96\xa9\xdf92\xcb\xc9\xb4B\x82\x7fA\x8c%\x8eB\x8c\x98\x93\"}K\xa6b\xef\xf9G\xb0<\xc3\xea\xf2,&\xc8\x0b\xa2be\x94\xf4\x92\xa9X\x94\xd8\x8e8\xacd\x84\xb14m.\x13s\xc9\xc0\xa6\xd9 \xac\xeb\xc7@n\xb1\x92ed\xe2\xc4\x9e\xa8\xe9\x00\x1f7\xb5[F\x96\xcc\x14\xfb\x13%\x12n\x85\x1a\xf4\x9c\xc1\xfcLF\xa9\xces\xc2n\x95\xc1f\xd0\xb9\xb0j@\x87{v\xc9T\x1c\x95\xb7v\xc9Tl\xa7\x91\xc3\x9e\x0c\xeak\xa82\x0e \xe5\xefU\xe2\x00\xc7\xf7*QQ\x07L\x03\xb9\x8b.\xbe\x1e'S1\x0dC\xddK\xb9\xc2\xb4\x94\xc5z\x1a3K\x06\x9a\xbcH:\xd6\x88>\xee\x89\xbb\xc5\xd1\x02V\xdfL\x92\x9f`O\x8c\xf53\x80\x7f\xd0\xfbH\xfcf\x0bG\xbb\xa1\xa4\x90\xbbk\xe7U\xd7\xc0m\xdd|\xaa\xa1\x18&\xc0\x8f\xc3N\x8aF\xb2\x8e\xe9\x9fqK`\x02\xee\x89\x99\"\x9c}:bOF\xe7\xa1\xa4x\xda\xa7'4\xa9H\xd9\xdf\xc0\xb6\xacz\xd2\x92\x0d\xdc\xde\x89\xad\xa5'm\xd17\xad\x19\xa6\xe6X1\xb4\xfb\xce\x0e\xf0\x8ab\xa1)\xa6\x8e\xe0\x9c\x0d[u/\x16\xd9\xbd\x0d\x823\xb9R\x1b\x1a\xefo\xb6[\x1ea7ru\xbb\x82\x053\xcf\x7f\xd9rz\xf4j\xec\xc3@/P\xf9\x8cs\x9eK\x12%ySt7y\xf8\x19(Qf\xea\xe9\xde\xe28\x88V\x9c\xa0m\xf5CT\xfb\xae \x04\x0b^cq\x07\xc1\xdc\x93\xa1!\x9a\xf4\xec\xa9#(-J\xd3\xea\xd2^7\xbb]S\xd3vp\x98\x06\xcb\xc1t\xd4n\xb2&X\xd0\x9a\xa5lk%\x9f9M\"<\x86\xac\x87Ij\xbb\n\xc1\xca\x13F\xee\xeb\xc95O\xe5\xf2\xcd\xd8\xe5Q\x87\x94\xf5]s\x8b\x8cmY\xef\x0f\xfd\xc9ay]\xb3-h \xc2L\x17V~\x19\x86\x81\xe7\xe0d9\xc0\xa8\xce\xaa\xca\xfa\x16\xae\x8a\xf5-\xcd\x99{\xc3\xef\x1f\xfa0\x81\xc3\xe0\xe1\xa7\xe61k\x9f\xfd\xd8\x1c\xd8\xb5\x00\xa7F\xc8T\x04S=\xf1\x1dd\x825\xfd\xd8\xb4\xf0\xb6\xeb\x8b\xab\xaa\xecn\x1c\x10b\x10A\"\x1b\xfe\xc9\xa5\xbf\x02\xbb\x1d\xda#\\\xc1\x95dM1o\xf2\xf64t\xcfA\xec}\xdb\xec\x9bAC{\xfa6\xaa\xa5<\x1d\xa4Y\xf3\xf6\xa2\xed-=\xfd\xf7\xedaM#\xa2t3\xdd\x15mwc\xc1M\x01t}\xd1\x1f\\8\xf8\x009\xbe\x1b\xe1\x90\xe5\x96mNTQPU\"\xa6\x89`\xce\x03?\x03\xa6\x8b\x7f;\xd0x(\x83e\x0dCD\xe1+\xfb\x83\x1dY\x18$3?,\xfd\xc3\xdb\xd7\xbf~x\xb3z\xf7\xcb\xfb\x8f\x97\xab\x8b\xcb\xf3\xcb\x8f\x17A\x10d[\xdd\xf7\x1f~}\xff\xebEBE\xf6\x9bCaq\xa8t*\xc3\xe1\x1a\xcf+\x14\x97D=U%$\xad\x13f]\xd6\x14\xcd\xf8\xcd\xa1f\x06:\x9b_\xc3\x98;*y\x86\x04\x97\x9d\xf8\xab\x8e\xf1\x95ft\x0dE{U\xf6m\xd1\xdeO\x9a\x82fn\x187P6e\xe3yc\xbf\xe1\x9c\xb1\xdfp\xbeJ\xb6\xd0\x14\xcb`\xdf\x92\xbb\xb29t4\x81\xbd\xb6\x04'\x9c,\xca#_\xf4\x97m\xb1\xbee\xa7s\xb6\xf3\x8f&:\x11Z\xdegZ\xbbO3\x12Q\xc3~\x1b\xfa\xb0\xbe)\xc9\x1d\xcb\x12\xda\x1c\xfa\xa1\xa3M\xed;\xd1\x18\x7fb5O\xcejy\xa0=\xee\xbf\xf8\xfe\xd6\x8b\xac-\\\x90\xe3Te\xff\xfff:,\xe1\xb9\x17E\xf1\xe1\xae\xf2\xec(\x17\x94\x86\xe0[L\x89\xe9\xbc\x17\x98qD\x14\xdeg\xbet\xca\xfa\x1a\xba\x03M!\xf3t[\x94\xd5\xa1%O\x87Mg\xcf\xde*\x987&![\xcc\xc5\xc7\x9f\xa2t\xb5Y\xeb\xfd\xf9\x85\xfbn\x8f\xfa\xf9\xc5\xff\xff\xee}\xc4\xe7?\x9e\xbf\xfb)d\xe7\x89\xedG\xdc\x9ec\xa1\x9e\xd20(\xfb\x0c\x1c\xea\x8e\xd0\x93^\xc8\xa5\x1dS\xf0:\x07\xc3o\x8aZ&\xd2L\xa5\xb9\xfb\xd9d\xdb\x1elF\x18\xda\xd40hzS\xc3oRSc\x17\x863\\Wn\xf8 \x905z[R\x97\xe2\x86\xbd1\xb3+;\xfa\xb4\x0f\xd7\xb9M\x0b\x1bR\x15\xf7d3\xf1\x1a\xc3\xdc0Et\xe6\x86\xdf\xacr\x98\x1c\xec(\xc7\xc3:\xd4A^\xa2\xf8\x14\x063\xb8\x7fek\x9c\xd4\xebb\xdf\x1d\xaa\x91\x05\xb1ql\xe9\x96\xc8\x14\x89\xd8\x0f-\x04\x1d6\xaa\x9b\x17\xd6\xd6\x93\xeek\x98\x9eV\xa0o@4[!\n\xfe\xb2\x95\xe0\xa4\xb1\xbd\x9d\x02\xdc\xf8\x15\x1fN\xe9\x88DV\x1e\x8b\x12>\x8d\x8b\xc6:\x17B \x93\x03\x93\x9f\x1e;\xe3\xde1J\xcf\xe2\xd9\x14\x9e_\xad\x8e}\x94\xceG\xbfg\xb3\xa5\xd6\x10\x1d\xaa\xa2\xef\x8b\xf5\x0d\xa3>\"\xfa\x875\x82\x02q\xd5\x99\xcb\xe7\x17=\x87Yo\x85(\"\xe3\x1cp\x8945?t\xf2\x9f9\xa6V\xed\xd2\xe8\x0cH\n7\xab\xb5\xc3\xe3\xcc\xb6\x18\x8cE\xe8i\x91\x02\xa7\x9f#\xe3D\x1d\xdb\xb1\x86\x8c\xf9\x00X\xc3\xc1\x93\x18\x1f$\x0e\xac7\xe7\xc6\xc9\x8c_\xbb\xf8~l\x94#\xc6I\x1a,&\xa8\xbb\xec\x14fu\xb6\x18\x93X\x8d\xe9\xbf\xa4\xbf\xed\x8b\xb6\xd8\x91\x9e>\x0f\xc5\xc7\x8b\xb3\x90d\xda\xdd\x92\xfb\xc0\x9d\xc5ztTz\xf1\x7f\xf5y~KX2P~\x95\xa3%\xfd\xa1\xe5V\xf1\xfb\xe2\x9a\x88\x19yV\x93\xcf\xfdj\xf8\xb8o\xe0\x8a\\\x1b\x13\xfc\xf7aR\nP\xcf\xf0\xf1 \x14\x02\xbb\xa6\xeb\x81l\xb7\xe5\xba$u_\xdd\x9f\xc1\xaf\x83QA\x1f\x92\xdaB\xb3\xdd\xb2\xac\xce\x03\x1b\x1a\xc1\xee\xa69T\x9b\xc1\xfc\xd0\xde\x1ac\x95\"\xa5r0s\xd7\xb9\xd7?g\x8d\xdd8:\xech\xdef\xfe\x1bKfX\xd4\xf4f%\x85\xec\xde\x90\x9a\x0bR\xa3r\xa8\x8b\xbb\xa2\xac\x8a\xab\xca\xccQ\xf6\x8eR\xaf(\x9eS\x08h\xa0]\xc3\x81\x02\xd4nI\xb4\xb4\xf4&L\xe1U\xe5N\xcf\xc5\x99_v\xb4\x11\xa1\xc3\xfa\xa6/*\xe9 &\x90`t\x1e)\xf3\xad\x1fqb\x1a\xbd=\x85\x01\xe9\xe2\xdbBE\xb6=\x90\xdd\xbe\xbf\x87\x92gy\xe3\xa0L\x86_bS\x9a54H\xee\xea\x9e\xe2\x98\xa0\xd8\xefe\x99\xd0\x8cx+\xca\xe7\xf1\xf7\x15\xa91`\xef\xe8\xd1\x8bR\xed\x81\x80\x96\xda\xb9\xe8%\x89\xd0\x0f\xf9 \xab\x04\xb9\xb6\xd3\xc5S\xb0\x96\x84\xe9\xa8\x8f\x02\x85t\xc389\xa9\xae\x92\xb4\x98\xb1\xbc?\xbe\xeb\x8c\x11\xd0\xbaBO\x0b\xc3\x8eE\xd6\xbdX\x14\xd3*\x1a\x16\xca\x19\x9f\xf3\xe5u\xdd\xb4\x060A\xac\"\xbd\x19\xf3\xb5\xc1\x96\xdc\x91\xb6{\x00\x9b\x957\xa4\x0fT9\xcd\xe2\xa2%\xf8L\xd6(\x0d\xed0T54\xed\x86\xb4f6\xc1\x8b\xb2^\x93W\xb0n\xba]\xd3=\xeb6\xb7\xf0\xfc\xec\xfb\xef\xc6\x8f8\x92O\xd1\xdfLA\x8f\xbb!\xe3\x83\xec\xae\xc8f\xc3\xf8\xb8\x1el\x03\xb1\x03r<\x1d\xdb\x97F\x8d#\x91\x9b\xc6\xff\x0c\xder\x0f/.\x1f\xd4\x9a\x98\x8c\x16\xee\xe60m\x16\xb5\xde`\xb9p\x82\xd1\xf6\x0b\xdb\x95\x82\x0d\x98)j\x9d\x96;@\xd3\x8e\x8aT\xce\xd9;\xa7\xcdv\x04\xdft\xf0dh\xeak\xf4Z.\xcfA\xae\xfa\xdcO\xcd\xa3\x84^\xe5\xb6l\x14\x7f:\xd3\x9c\x15\xcc \x84#\x1a\x85`\x1b!p\x06\xac\x0c\x03\x11|\xceeg\x8c\xc1\xefsN7\x18\x11b\xf3\xacF\x9c;\xac\x1d\xab1 \x16\x83\x12B\xa5\x88\x18G\x10$\xc7<\x06&x\x8cL\xc8mh\x82\xd5\xd8\x04\xd4\xe0\x04\xdc\xe8\x84\xa3\xcb7\xdd\x08E\x88q#\x0c5Da\x961\x8a\x10\xd3\xccSp\x99\xa8\xe0\xd4\xb1\xe0\xd1\xb3\x10$\xc9\x19&\xab})Z\xccV\x98k\xba\"\xf4\xca\x1a5_a\x86 \x8b\xb5\xc2\x8cZ\xab\x19\x0b\xa8)\x0b6s\x16\x1e``\xf3\x99\xb7\x10d\xe2\x82\xdf\xcc\x05\xb0_ZI7w5B\x93\xf1\xab\xfd\x01\xb3\x80\xe3\\C\xe3\xbbK\xd4\xf7.\x1f\xa8&\xfcK\xb3\x15\x16\x89\xee\xe7\x8c\xb0\xd0\xc4\xf6\x1ad\xa2%{\x87\xc6M\x9c\xeb\xd1q?\x87}\xd1\xf1[H\xd2\xb0\x9c\xb1\xbfkD\xe8&\xef\xdd\xe1\xdfq\xa5I\xc7\x94jQ\xc4\x0d\xae\xa5X7L\\\x00\xeb1>\xce\xc1a\x9b\x83\xa3\xaa\xb0\xed(\x93^2\xf8\x97\x05%)\x1e}\x12\xd2;\x8b\xa4\x7fJ\x1f\xa9\xe7 V:8\xd4\xcc\xc0\xdc@3\xc8\xe1S\xd9\xb1q\x0c;\xa0\x85\xbb\x95\xd5\x9a\x9c\\\x90\x8b\xf9\xe7\xee\xfa|\xb3y\xcd!\x03\x17{\xb2\xbelh\xca\xfb\xe1\x9f\x9e\x13\x1b\xde\x8b \x8a\xceNM\x84\xbe\xb1S\x8a\xe9\x1e\xad\xf4\xa6\xe8\x8bsz\x93\xd5\xd3-}\x169i\x18\x1d\xa1\xef\xb4m\xa8B\xa5\x17\xd6\x8b\xb5\x94\xe7\xea|\xbd>\xe7\xc8\xe7\xbe\x19#e~\xde\xe9\xd0\xa6\xb3\xadTwq\xcc\x9e\x7f\x9b\xb8\x1cT\xa2P\x0c~n\xff\xa3\xac7\xbf^\xfc\xd4\xac\x8b\xbe\xf1qk\xea\xc7\x8a\xd5\xd3O\xfaAz\x95\xf2\x1d\xa8?\xb8\x9c\xc4\x9b\x1a\x02\x89>\x88\x84\xd4\x9b}S\xd6t\xa3\x1aHn\xe0J\xb6\xa49\x87\xabC[\xc6\xb5\xc5+N\xf4\x0fm)}G\xeau{O\x97Q\xc4\xde\xc0I\xd3\x9ew\x12 \xaa\xed\xf5L\xbbv\xab\xe2\xcd\xf4\xb4\x07\x1f8.q\xfa\xb8\x14\x99\xf2#=\xe5\xef\xb2IO\xd6\x15\xac\xf5'\x129\xe9\x05;\xce\x83\xe9O)F9\xc8J\xf4\xd0\x96\xc0\x10C_ur\x15\x99\x1b$\x08'Owt\xfe\xb9\xd5\xe7\xa0c\x94j\x9cZ\xa8ryC*\xd2\x13YE\xfd\xd86\xbb\xd9\n4\x90l\xa8\x16\xf5\x90\xa3.=\xfeyZ\xa7GXj\xbe\x0e\x1b$\xd3;;\x81f\xe3\x86u\xd1eH[\x8b.{\x10]f\x99\x81q\x8b`\xac\x1e9\xf1\x19\x0et\xdeZVi\xf8\xb5\xb0\\+&\xc6\xa05\x98Q\x1b9\x08\xc6\x0d\x03B(r@f\x1b\xb0N2\xa6E\xd86;\xf6rU\x1e3Vj=\xd1\x92\xb5Q\xf0\xb0\xae\xdb\xb3\x9c`,\xd3\xf3\xe6\x91B\"t!\xb0g\xc7R\xd6\xc1\xb8\xadgZ\x06vzq\xab\xc0\xa4\x13\xbc\x08~.\xaf\xdb\xa2'\xd3)7\xb5GVB\xf8<\xda\xd1\xcf\x87\x89$<\xc1tBqzR4\xd0\xc1z\xb3)\xb7\xf7\x8b%\x81\xb4\xb5X\x12\x0fbIXf`\xe8\xe2\xd5\xaa\x07\xaf\xd9\x0b\xd2\x9f\xb3\xc94l8\xa9\x0b\x16\xa7\x82\xaf\xd6\x8e\xf4\xc3Ze/v\x0e\xff\xd8\x0cz\x87\xae^N\x90*\xfdA\x90|\x96Sv\x9d\xbd\xf8H_\xff\x94\xdck\xa9\x1d\xb1\x12\xc2\xfb\"\xfa`W;\x84B\x8ai\xec\xafe~U\xda;\x8f:\xfag[\xa6\x9d\xdcL\x0d\xe3\xb9\x82j_\\\xf8u\xd3\x98\x9c\x01\xa0\xc62\x94\x0b\xa9j6.\x96\xf2\x94\x86\x1a\x9aVYX\xec\xd5\xdf$/\xbe\xfb\xa2\xa9U7\x85y\xf3\x0d\xe7u\xf4\x05Rg\xc2\x00\xe4\xdah\xd0e\xd1c\xf7*\xe1\x12\xa8\xebr_\xc0\xa5\xb8\x07\xee\x9f\xfd\xbe\x9f\xf9\x17\x8dV\xc4\xf5M\xdf\xa5Mk7cz\x93x-3\x9c\xef\x88\xe1\x89\xe1;\xfa\x92e\xc0 z6_\xbf\xbe\x0d\xdd\x87\xed\x94\x82\xb7dJ\"\xe8lo\xea=~\xc9)B\xcd\xab5\xa2\xf5;\xaf/\x114\xf4\xf9,%>\xb2\x178\xd1\xc2\xf4\xc0H\xd5\xaa\xa5\xd5\xebng\xa8\xc0\x8e\xa0\x80u\xe2NE;}\x8d\xf3g\xcb\x82\x94\x8d\xc7\x88^\xad\xb9N\xb21\x1b\x95\xbd\xc4\xc9n\xaa\xbe\xd6\xaeV\xfa\xf42\xce\xc3\x98,\xca\xbc\x83\xe6V\xb2JE\x88Ir\x87\xc3RP\xee,k\x1b\x9c0K\xfc\x8a5\xb8\xe4\nQXK\xf9^-\xba\xda\x95K\xd3g6\xc1\xd9\xb2sd\xe62h\xe9\x8b\x8f\xad\xcc\xda\x16?\x1c\x81\xe1\x18=\xe0f\x1c\xcf_\xe1\xe4\x17a)x\x85\xb9\x99I\x10\x1e\xc2\x8c\xdf\x9c\xc1\x04\x19b\xb0\xc4\xfa\xee\xa5J\x91.K\xa9\xe6\xbc\xd3(W\x1a\xb1gQ\xa4Z\xb4\xa5b\x90{\xa8s\xa8\xca|\xe0\xc6\x11\xb6\xbb\x19J^m\xcbg\xddD\x9e@\xb5Q8\x9e\xf9\x13q\xd8\xd4\xaa8\xd8M>\xbb\x84\xb1\xee\x19\x8a\x8c\x07\xcb\xe0\x1e\x1f\xcb\xa6\xf2u5\xca\xd2r\x92\xb2u.\xd5\x02sr\x1e\xbak\x04s\xecq\xbd\x81\x97;\xdc\x05\x17\x96\xf1\x0d\x8ci\x14\x97\xeb-\xc1\x8es;\xdc\xc0\xb7w\x86\x1b\x1e\x86\xa0 \xc5\x01\x87\xd0\xe8Br\xb7\x059\xe2\xe0\x81{\x1b\xa2+\x03\xc8x\xfb\xea\xd3\xa2\xf0\xd0\xfd\x9e\xa1W!\xceig6?\xd7Z\x0d\xe8a\xa2R2 \xf9\xfa\x920\x94\xb1}\xf1[\xc2^\x12\xc9\xce\xbd\x0c(\x11\x1b\x9d8\xc7^\x08R\xc1v\xc76\xc2bVO\xfb\xb1\xb6\xb2\x91\x1d(\xafS\x0f?\xf0\xcf\xb4J\xd2\x0f\xf9\xce\x03~&\xaeB\xf43z\x1c\xf5\x1e\xe8s18\xf7\x10o;\xc0\x87Yf\x19\x0e\xee\xd1\x02z\xd0\xc3z$\xbch\xaa\x93rT\x8f\x06\x17\xd94\x0en\xb9\xfa\xd4\x8eb\xae\xc6\xea\x1e\x9d\x9a\xef\x98\x9eA\x13\xa1\xf6j\x96u\xe5\xb3E\xb1\x1eZ5\x94\xcb\xde\xcc\xc9m\x84\xaeBL\x0b\x95\x94\xf4\xbf\x88\x95\x19\xc6\xb4\xc5\xc5miZ\xd5j\xd3\xcfS\xbf4j\xa1\xbd\x9c\xa7\xf2\xa2\xac\xbc ~\"\xe4\x1c,N\xbf^\x8c\x19\x8a`}9\xdf^\x9b\x01gd\xf5Y&\xb8x\xf59\xa64\x0d\xd7\x9dj\x95Y\x8a\x93g\xae\xcc\xac,c\xb3\xbe\x86-c)\xfb\xabUM\xaa\xb9[\xcfp\xa9\x1dC/\xea\xd4=Jq\xfc\xdc\xc2b\xb4\x8d\x12\xcd\xa6i\xc7H\xbfD\xb3\xcb\xff\x99\x9daS\xd7\xe0\x8d\x8e}\x90\x7fsz5\xdc}J\xd6\xd5R\xfd0E\xedd#B\x9eab\x8b\xd7\xcf\xb8\xbc\xd1\x93G\xac\xdbR\xa9hwW2\xdb' \xd2\x8c\xcb2\xc9E)X\x8b\xf4t\x84;\xadD\x03\xf1\xa7P\xf0\x9dD!?\x97aJ\x8d\x7fle\xd6\xa6\xd4\xe0\x08\x0cG\xa97'\xe3s\x9dw\x13\x950\x85\xe0d&Ax\x0f{zU\xcd\xa0\xd0\xf3+\xdf\xb6#N\xb0\xbc\xca\xbb\xcd\xebf\xb7ojR\x8b7\xf5Cl.D\x94\xa8\x08\xb1\x04\x14\x16 r\xe9\x89\xae\xd1\xaf\x8c\xe4\xe7\xff\x1e\x92\xa5\xff\xdf\x15.\xd5\xd9\x17\xc9%2\xe9\x84)\x88\xf3{\xad\xf1K\x7f\x0e\xc8\xf9?\xf2\x8c\xee[\xe1\\k\xbbTa\xc8\x96?N\xc1\xd3\x95\xd1\x9c9\xb4\x8a)\xea\x90\xbc\xff\xff\xee\x98\xd1b\x82\xbd\x99&\xd8dioKRm\xa6\x8a/g\xab\xffJY\xab\x1fH\xd7Tw\xf1\x91\xc6B\xcfN\xeb\xda\xe5\x0b\xb1\x87\xaf\x95\x97C\x94{\xa9T4-\xe3F\xcaS4 /U[*\"\xfd'\xcfL\xcb\xae\x92w\xe5u]\xf4\x87\x96\x8a\xb5%\xbf\x1f\xca\x96\xe5S+6\x1b\xe8\x0eW\xcf\xe8\xd4@\x0c_Lt!C\xc3\xab\x04\x8d\x0b\xcd\x0b\xf8S\xd3\xdc\x1e\xe2s-\xabX.V!%\xc9\xb2\x18\xbf\x9a\xd5\x16k\xb2\x83\xab\xe6Po\xa0\xb8\x1e\xcc\xa1\x1e\n5\xa32\xaf\x1e\x93\xb3o3]\xd1\xc5\x92\xf7Z3\xf6Fh\xf8%[\xdf\x92\xad\x0f\xac\xf6\xbe}\xd1E\xackN\xcb\xb9\xbayf\xab_\x8a\x9dO\xe9*\x8c\"\xd5\x14cH\xa4\xbe\xfa\x85\xab\xd1\x89U;\x1f\xaf[R\xf4\xe4C\xd3\xf4 \xdc\xe0\x95G\x9e\x06~\xd4OB\xb9b\xf9%\x1282+\x1a\x12\x9a> \xe5\x86]\x98O\xe0\xc6\xachp3}\x12\xc4\x0d\xa3\xb5n\xda\xcd\xac}\x00W\xf1\xd4G@\x95\xfaP\x87\xff5j\x93wm\xe8\x9b\x9c\x1b:o\xefS\xc2V\xfeo\x80h\xaaI\xae\xcc\xe9\xd0\xf5\xedaMI\x1d\xb8\xc2\xbe*\xeb\x0d\xcfBqS\xee\x07\xe5U\xb0\xee\xdd\x94\xa4-\xda\xf5\x0d\xd5\xf1\xe2\xb8\xbfn\xaa\x8a\xac\x85\x87\xb1\x10\x17\xfc5gVw\xbd%\xa4\x1b\xc6\xf5uQ\xad\x0fU\xd1\x93\xcb\xcf?\x12\xd2\xc5>\x0c\xd5\x7f^Q\xcf\xb1g\x94\xd0\xfdL\x99\xb4\x82\x90Px}[\xd4]\xc1:\xd27\xd0\x95;\xca\xa5\xd8;xf\xed\xd5U\xd1\x91\xd5\x86\xd4\xcd\xce\xc3\x81}\xe34I\x01\xcf\xf5L\x1b&,\x10\xc0\xfe@\x7f\x1d\xb4\xefu\xd1\xc1 B\x89N\xb9\x1d\x0ciZ\x01\xc9\xff]\xdf\x14\xdd\x8d\xe0\xfe\xba\xe8V\xc5\xe6\xb7C\xd7\x0f\x87\x0b\x9ds\xb6K\x19\xb2\xdbVM\xd1\xeb\xf3P\xd9\xf1T\xb2B\x92\xd2/\xdbb\xdd7-7 v\x87\xaa/\xf7UI&SJ\x0dk\x90\xae/wEO\xa6\xd4\xcfW\xcc.\xe8?\x8b\xf1\x10W2\x14\xe9\xe2Sj\xda\xc9l\xaf\x838\x82\xde\x8e\xf9\x1ai\x9c\x16\x9bM\xc9L\xbc\xd5@2\xc9N5\xa29\xb6X\x8e61e\x1a\x88}S\xec\x06+#\xf0s\x97!\xf8\xba)%\xa3\x16\xfa\xe6\x96\xd4\"3\x0ceIX\xb6\xc5`F\xd7\xbca-?\xfa/\xbf^\xbe}\x05\x97\xc3\x04\xa2\x7ff~G\xaa\xa4jxW\xf7<[M9\x1c\x85\xf9\x11\xf9\x86\xc0\xfa\xd0\xf5\xcd\x8e\x8f\xa2Bo\xd4\x91\x92\x86\xbc\xba\x87\xeb\xe6\xba\xd9\xb7M\xdf\x9c\xe9S[\x1b)\x96\x8a|b\xa7\xd9\xc2\xba)k\x91\x06\\d\x9e\xa5\xfd\xdau\xd7\xf2\xea\xa4v\xdb2\xdc':\xdc\xf68\xed4n\xe3\xe03;~\x9a\x02\xf4\x8f5!\x1b\xae\x97\xb5\xadCy\xcaY\xcc\n\xf8\xff\x84\xfa\xfeZ\x96A\xdd\xf4\xdc\x90\xe0\x7f\x05\xfa\n.W7\xd2\x03>\xdb\xaa\xe1;\xc0\xbe-\xd7\xc2\xf1\xc7<\x82\xa2[BwnV\xd7E\xe8\xe6x@=\xc5\n\xa5Q\xa7\x8f\x02\x18~\xb4\xf7\x9f\x12s+\xe7\xe0sF\x90z\xfe\xb9\xbb\xfe\x91\x84k\xe3]w\xbd\x1a>[\x1d\xda\xca)%U\x19\xbc\xd2\x85\xa4L\x1b\xf5[\xfa\x8e\xca\xbe\xb8\x87\xb2\xa6/\x82\x0f\xab\xe5 \\\x15]\xb9.\xaa\xea\x1e\nxC\xb7\xf6aq\x9cS\xb1\xca\xaf.\xb3_\xc4[,\x7f\x90\xb6\xf9Zc3\xe8\xf8\x8fh\x06\xcbB\xc7\xb4B\xa4A\x93A\x1f\xe4\xd5\x06\xa1\xba\xa0%\xebr_\"\x16\x91\xd2\xf5\xf1\xab\xc1b+\xbb\x15Mt\x96\x10\x8dARC\xfeH\xc6\x85\xb0nZ\xfa\x14\xce'\xf6\xb2V\xdfI\xe9\xda\xe8qe\xcc\xc3&\xe4V\xf6\xb0n\xea\xae\xecz\x1a\x12\xd86\x87v\xd0 }'>xqFk\x0ej\x88\xae\xaeC[=\x85\xf2\x8c\x9c\xc17\xec5\x8c\xb3\xab\xa2\xbe=\xbb{qE\xfa\x82'>\xab\xc7Wv\xbe=\x1b\xdd\xe7\xd3\x04\xa7\xfa\xec \x9f\x9d\x83\xbd_\xdf\xb3!\x1e5\xdbwg\x93Ok\x94\x1c\xd7\x9c\xc3*`=\xfa\x17.\xd4\x7f *\xdf\x9f\xb1GAD\xfd\xb2\x83\x0dYWE\xcb\x1e\x1b\xbbg\xe6\xee\xf0wr\xc7\x145%\x03\x8c\x8c\x88\x90l\x890/\x9f<\x7f\xf6\xe2\xf9\xd3\xe7\xcf\x9f\x7fm\xd5$\x91aI\xaa\x94\x07\x15\xb9\xa2J\xd9\xad!\x86q\xea\x8b\xba\x1f\xad\xfcQ\xcd\xb3\x0d\x82>\xe1\"L|\xe8n\x8aa\xea\xb2\x13\x00]G\xbbN^\xb2S\xb7\x16\x9d\x90]'\xd0s\xd3jO\xda\xd5\xa1\xdb\xacv\xa5{\x9b\xf0m\xa6\xdc\x0d8\xd0\x84=i\xe1\xd0m`WVt\xa3[7\xf5\xdd0J\xf55\xfdY\x9c\xd98 \xf6W\x8a\x10\xd8\x92\xb0#'os\xaaI\xd7\xdcx\xc2\x94O\x95T\x8c\x9c\x81\xc9_\x91\x16'\xe5k\x08\x0f\x95J\x0b\x8cn\xea\xe7U\xc5\xf4^\xfcIj\xd8\xbb\x8foS\xe3\x16\x82L\n3\xad-\xd6\x02\xaffq\x16\xcf\xb0\x1c\x0cJ\xdc\x92p\xda\x0f\xacX\xe4\x01N\x88\xa0\xe5\xac\x01.\xa1\x80\xf5\xcc\xe1\xa9\xe6\x06R\xce\xd0-\x06\xa59*\xc6 \xc6U\x8e\xf1{\xa8\xe6a\x05\xb1IX\xb1\n\xccg\x9f\xc8\xd5\xb1\xd8\xb5=z\x8dO\xdc\xb9v\x0b+^\xeb\x85\x95y6\x0c+\x89\x96\x0c+y\xec\x19Vf[5\n5n\xe1\xa8\xb6\x0d,\xa1\xc8%\x14\xc9~?\xb5P$gTy\xbbi|\x8e\xb5\xa8\xaaa\x91\x7f\xd51E\xce|0\xe6c\xc6;\xb7u\xf1%b\xb1\xac\x07 p\x0c\xee\xcc\x03\x85F\x8d;\xaa\x90\xa9\x18u\x8f\xc0b\"8vz\x9by`\xad\xe26\x0dr\x19\x06\x19\xcd\x02\xdc(\x881 \x1c\x07\x12\x98\xa72\xd2\x0f'\xe0=\xa0\x80\x8b\xb5\xbc\x07\x95#\x01\xc7Z\xf2\xa9h7\x83j9\xa7\xae\xcd7\xa4\"\xd7E\x1f\xaeU\xb8\xcd\xb1\xe2\x9e\xe1\xb4s\xa4\x1ah\xe7V\xcc\xa4\xcb\xbb\x03}\xdbd{\xa8`\xc3\xf9\x1b\xf7\x18\x8e0\xcc\xd9\xbe\x81Yt\xb6\xcf\xfb\xcf\xff@o\x8ai\xeb\xdd\xbe\x9cEW\xf9\x02\x1c_\xfa=t\xa4\x85\xdd\xa1\xeb\xe1\xa6\xb8\x1b\xd6\\\xdb\xd2]yl^\x18\x9e\x12\xad\xbb\xa2*7E\xdf\xb4I\xfa9|b\x07\xbaM\xc4\xb8\xa4\xc9\x85\x0f\xc1\x9fQ.\xd2z\xb9#\xab\xae/n\xc9\xa0\xf7\xd6\xa4\xee\xcb\xca\x87\xec@\x17\xcaT[y\xe2\xfc\x8aT\xcd'*\xb6Q\x04_\x0dV\xf6'\xd2B[\xd4\xb7e}\x8d-\xa2\xb9L\xf1\xa1\x9b\xcb\x14>9T%%?\xea\xc1\xd4)\xff\x9d#\x1c\x86\x0dp0\xda\xc6\xdd\x87T\xe5uyUVe/\\)\xeb\xb6\xecI[\xea\x8fL\xe8j\xf1\xb2-\xean+\xdej9=\xb5\xd8s\xfe\x1eK-\x9a\xed\xe7P\x8bS\xe5I\x13\x90\xf1m\x90I\x0f\x14\xeb\xb6\xe9:j]\x8f\xb3\xaa\x93\xe3MJ\x0coKZ\x98 0W\x84\xbdV\x9ex1>\xb3~p\xcdz1\x07\xf5Y\xafw*\xdf\xac\xffGs\xba\x86\xc0]\xf3xF\x80\xda\xf6I\xce\xf4\x81\xc5\x93\x9d\xe5\xd2\xa6\xbc\x1a\xf1R\xbe;\x91\xee\x10\x84\"\xd5\xf7MW\x0e\x1b\xd9\x04\xc6j\xd9&4\x9cm\xf6\x0c\x9c\xd57\xcc\xd9\xcf\x0e\x8d\xc50\xf1'(\xd6 =\xb9SL\x8e\xf4\xb8\xb9nj\xe6\\S\\xEK/\x00<\xd9\xd2{\x1fl\x83k\xea\xea~\xfa|\xf4$2\x9b\x85\x0d\x10\xc5&\x8e\xb2\x90\xe8\x0d\x7f\xfd\xfa\x0c\xce\xc5\xebB[\xea\xe4\x16\x0e\x19:\x15(\xf7\xc5\x8e(lt\xd0\xd4.H\xf4\xb4\xaeu-r\xd7\xb0\x87\x98\xf2\xe9\x90\xd7UQ\xee\xc8\xe6\x03\xfd\xe1=i\xcbf\xf3\x86\xf4\x858\xda\x05\xa8\x94\xf5@a\xb0C\xcaF}\x07\"a\x82PZ\xc0hM R\x19\x16\x86M\x82Y\xe4\xd9)S\xcc\xa6\xf5\xfa\xb0\xe3\xf8\x16z\xcc\x94\xda\xc6\xba\xc6d\xf6\n\xa7\xc9\xfe\xd8\xd9\x08=\xee:\xfe\x13\x06G\xf1\x85c\x9d\xcc\xa0%\xb9h\xc9u\xd1\xd2\xa7\xda\x8bz\x02\n\x7f\xc5\xa7\x06\xa76\xf4\x98\x8d+C\xd8)\x03k]P?w\xd7\x94\x8d\xf3\xaab|\xc4\xfb\x00\xd9|g$W\xb4Q}\xd6\xe7\x8d3.\xd8\xbd\xa9\x84M?\xa3k\xaa\x16X\xb3y\xc8\xa6MUq\xbd\\\x11e\x06\xd1\x87\xe7\x86\xbf\xee\xdb\xe6\xba-v\xa3\xad\xc2\xb4\xce\x86N\xdc#G\x98\xf9\x1c\xe3\x1c yW\xac\xb3\xc0\xe9\xd4\xd3\x84\xc3\x17\x11o\x05\x8c41\x8e\xe9\xce\xbf\xc0{\x05K\x9c8n\xc2\x1b\xc4\xf2\xc4\x89\xf9t\x17C\xc8\xf7Kc\x02\xb3\x82McV\x8c\xc9,W@\x07\xdf=\xfc\x0e\xd3D.\xce\xc9\x00\xbe\x89\xce\x8a\xd3|Q>DM\x19\xe5\x8b|\xec\xc4\x9a;rq\x9a>\xd6\xb6\xbcf\x90R\xd35\xb0\xe0\x1d\\p\xadpV\xbc\xb2t\xadvV\xbc$|+\x9f\x95|\xeb\x9f\x95$-`\xa1\xa5n\x86\x96\x8f\xe24\x02\x04 &\xc9\\C\xe8\x18\x06\x9c\xdft\x93\x8b\xc2\xa8\xb2\x84\xb9\n\x93+\xb8z\xc5;\xc2\xb69\xda\xb9\xa9;J\x08\x88\xcdy{\xb7x\x87\xbe\xea\xac\xfdQ\xb7T\x8bQ\xc2\xd9\xe7)\xdd\x8a5\x1f\xb6q\x91\xb6\xcd\xceB\n\xc1\x07\xd3\xfeh\x16\xad=\xb6E\xc58\xf4Lm\xac\xaa8A\xb5\xd1\x8eg\xa0r\x1a\xd4\xa9\xd6\xb4\xd3\x9c\n:\x90y\xac$\xab\x8aph\xeap\xfb\xc8g\x1dY\xb5\xe8\x12\x1c\x8f\xb1\x85\xe6\x07\xc7#\xac \x9b\x0d\x84Z@\x89\xc6o\x80\xed\xe3\xd9\xdb\xbc\x86F\xa0\xd5\xe3\xb3y2\xb1\x91n\xed\x04\xda:\xa9\x96\x8e\xc7\xce\xf1Y9N\x1b\xc7k\x9e\xb8\xed\x1bOu\xff\x16\x9eo-\xb3\x92qE\xb3\xe2\xb2jbV7\x04\x88#\xc9\x9e\x91\xac\x17\x83`\xbc5\x13a\xcb\xd8{3\xc7\x8e\x99l\x97\x7f\xf3\xf7\xe3!L\x0fjypZ\xdaF\xeb1:X\x12\x0dY\x16\xd1\xb6G\xaa;\xdcm\x1e\x8ca\x92kR\x93V\x00*\xd6\x03\xbfeS\xdb\xc5h\xef\x90C\x9a\x94\xea0\xb4\x9c\x0fN/L\x86o\xebM\x8c\x00\x11\xa6m\x14\xec\x1c\x93z\x93\xc6\xef\x7f\x1f\x8a\x8a\xa5\xb8d\x01\x98\xe0Q\xde(p,\xb4\x12^\x11\\\x11Y\xc8aZ\xc6\xc1\xb4\xc0\x15\xa5\x85,\xfcD\xc1\xb6 ,rk\xb4b\xe8\xe6\x9c\x10.\xc0\xe1Jp\xa2\xb6x\x00\xc4\x0b\xfc\xf2\xcb\x08\xf5\x82/L~\xa1P0\x07\x0d\xafx\x931b\x1a!\x0d1\x061\xa81\x98\xc1\x7f2\x9c\xcc\xc7\xbf\xbd\xddy 3\x89\x90\x144W\xc2\xe5C\xe9\x15D\x19|1\x9a\xdd@z\xc1\xe3jv\x9c\x9f\x9c\x9a=\x1e\x9b\xa3\x11\x92\x90:\x10\x89D\x83\x93T]\xbe\xa5\x93\x8aT\x0b\\:w\xcd\x97g\x10)\x901x\xdc%c\xf2r\xf2\xcb%\x00\xce\x06'\xb9T|P7G\xc5\x90\xcb-\xc6(\xcc\x85\xbe\xe9c!\xc9\xdd\x01\x7f\x83y\x108\xdb\x04H\x85\xc1\x81\n\x85\x83\x00\x95\x95\x05\x12\x07\x1a,NkV?\x05\n#\xa6\xa9i\xd7vE}?\xce\xf1\xfb=[\xa2\xe8q\xd2\xe6Ea\xd3*\xe0X\xe9\x08;\xe4\xf3%\x8c\x96\x8e\x17s\x14\xa4\xbc\x17\xecZ\x88C10T\xc0\xc4\x91\x17\xf1\xe3 \x0b84\xaa\xd3\x0f\x1f\x10\np\x85\x01f6\x9b\xe6\xfa\x0fp\xfb\xa7\xb8\xfc\xad\xdb\xdb\x02V\x8aZ^\x06\xb1\x1c`%W\xd7\xb3\xba\xef\xe3\\\xf7\x81n{\x9c\xfb\xac\xee\xfapW\xbd\x1dN\xced\xc7\xd8zS\x0eS\xf0\xea\xd0\xc78T\xadJ*y\xdf\x1b\xa6\xa0\xa6\x9c\x84\xf4\x8f\xb1\xcd^\xd2\xf7?\xc5\x8d|m\xd3\xe5\xde3\x9a.\x99\xfe\xe1\x8aTM}\xdd\xc14U\xe5\xdd\xb8[\xed\x9b\xa6Zm\x9bv%\xcb\xe5\x95\xbd\xe5\xee\xb0\xa3iD\xaa\x8a6\x7f\xdd\x16\x83\x11\xae\xe8/\xda<>\x17\x1fs\xb7\x97{\xec\xe8\xe0\xb6\xac\x8b\x8a\xbe\xe2\xb1.\xbe\x90\x9e%\xdca\xf0\xcc/=\x97\x86\x18f\xbe\x82\x9d\xb2P\x16\x18\xa97\xe99\xc1\x15\xb6\xcea[\x15\xd7\x93\x85>\xe8\x98\x92\xad\x01e\xf1\x8d\xbc\xf1\x05pSt@\xb9p\xa99\xa7jy\xca\xe8\x95\x9dx@\x17\xb8\x87\x9a\xd4t\x19\x92;\xd2\xde3&8\xb9I \x96`\x10i\xef\x9dMv\xffq\xff\xeeMtD\x101:V\x1bCG\xa2\xc4p\x82\x06\xd1\xec\xf0$\x87\xee\x84\x07@G\xcd\xd5\xa5\x10\xabOQ\x0e\xe6\xe9Tp\xd9\x85\x8f\xe8\xf6\xc0\xf5-d\xd4\xb9p\xa2=\xb7\x9fF\xbc\x136`\xbe\xce\xd1\xcd\xe0\xd1\xcf`\xd5\xd1\xe0\xd0\xd3p$]m\xd0U\x8c\xea\xf9:[\x17\x8a\",\xdd\xbf\x16\xa9\xb4yr\x7fa%\xd3\x1cS\xa3\x7f\xdbIf\xc6\xae\x91}\xc7\xf82\x1d\x061;\x8cw\x8f\xc9\xc8\xc6\xdc\x9d&a\xaf9\xcans\xfa~\x08\xfb\xde\x93w\xf79}I\xcc\xf4\x8c\x05\xcd\xeb\xb9;\x92\x7fOr\xedJ\xee}\xc9\xef\x91\x9a\xb1Y\x19\xb4\xb4\xcd+\xc0'\x94k\x03\xc3\xb60\x83\x81\x9f\xca\xae\x17k\xdf\xd9:\x9f\xd0\x1dM\\X2g\xa7\xa0y\x94\xb4\x9bl\xdfJ:N/y7\x97\xbc\x9b\x90f\xb0\xa1\xc6Z\xc5\x17 \x9f\xa7aF[\xe7\xb4\xdaP[\xf1\x9cyG\xa3m\xb6\xb0\xf7\xdb\x0c%=\xbd\xe2\xc6\x15 Wc\".o\x9a\x1c\xdc0\xe2\x1f\xac\xba\x1e\x81\xa1\xe6\xb5\x07O\xca\x14c\xfa4\xc4\x12\xc3/\x96+m\xa6\xde\xe17.\xe1\xf1\xd6O\xdc\xea`\xfb\xf90c\x0e\xc8\xf1[7H\xe9gb ]z\x06\xaf\x7f:\x7f\xf7\xf3\xea\xe2\xf2\xfc\xf2\xe3\xc5\xea\xe3/\x17\xef\xdf\xbe~\xf7\xe3\xbb\xb7o\xfc\x9f\xd2\xff\x9e\xff\xc7Oo}\x9f\xc6}\xe8o\xfa\xed\xffy\xff\xee\x83\xf1\x19\x7f\xec\xeeUh\x8f\xb8\x1e\xa4\xea\xea\x82\x89\x96\xefYt\x05\x8fq\"\x1axBF\xed\x88\xabN\xb1\xa7FE\xe4Zh.\xfb\x89i\xd5s\xa6\x9ed\xec\xbe\x14z\x12\xcb\x9b\xb5!\x87\x9b\x14R|\x99}e\xb3QQ+Ji\x7f1\x95\xc6\xb2\x98J:\x0f\xa7f*\xe1\xab*\xd8T\xd1|[\xd3\x02cg\xbd\xf1\x04\xa6\x98\x1c\xbb\xa2_\xdfL\xeb\x9do\x0e\xee\x18\x89\x12}N\n\x89\xa8\x16\x85n\xbd\x04-\x9a\xecA\x87\xf3Z\xbcO1\xac\x84C]\xfe~ \xd5=\x94\x9b\xe1\xf0\xb9\xbdG\xac\x12e\xae\xd2I\x16\xc6\x11\x9f\x90\xf41\xe2\xbe\x81\x1bR\xed\xd5f\x98\x80\x81K\xf8\xec\xc9\xcf\xc5\xe7\xcb\xa1\xceO\xa4\xbe\xeeo\xfe\xfe\xe2\xfb\xe7\xf2\xb3*r/\xa2\x180V\xc4\xc5M\xd3\xf6\xd0\x1dv\xbb\xa2\xbd\xe7t\xaf\x86\x83\xf7\xc4\x94\xbe\x0e$\x16\xdfL|\x08F\x9fK\xefB\x0cetb\x92\xd5\xb6mv+\xc3h\x06\x17\xdb\xcap)\xb3x\x98\xab\xe5\x86t\xb0=\xd4\x9b\xe9m \xd9\xbc\x83}\xd3T\xb6\x00QH4\x84\x11\xe3\xa0\x96fK\x9b\x1ad\xc3\x9e\xe3\xe7\xd8Mei\x9c~H\xa4%\xbb\xa2\xac\xcb\xfa\x9a9-\xaf\x8ajX\xef\x0eA\x18S\xe6\x92\xae\nN\x85\x8b\x7f\xd2\x9b}#\x0d9\x14\xdb\x9e\xb4P\xab\xe6\xb4F\x8fbG\xd9\x86t\xfa\xe2\xe3\x07\x86\x04P66\xa1\x86#\x07\x13\xa08\x88\\\xdd\xd3Gi\xcau\xb9/\x06[F\x1cL\xf6E\xa7\x9f/\x14\x99\x9e\xbe\xe4v\xc5g\xb1\xf4\xae\xeeq5\xa0\x08P\xe0\xe6\xc5Z&*\x1e\x8f\xfe\xc0\xa9|\x01\x9d\xe7\xb0\xfe\xb6\xa9\xaa\xe6\x8e\xb4\xfe\xf9\xa3]f\x1c\x1f\x03f\x96\xf3xHn@\x90<}!(\xbe\xe5\x8e\xac\x9bz\x13\xba\x0f\x84\xee\xe8\xbfL\x97,\x18}\xb6Y\xa8\x88<\xa8\x8aN5;\x85\x9f\xa3\xeb\x8b\xb6_\xf5\xe5.t_\x17|m\x8a\x9e<\x1b\xea\xc5(\x84rG\x04{\xca&\x02\xddMs\xa86@\xb9\xa1 \xbd\xeeSIm\xb6\x06..\xcf?\\\x1a'Mz\x9e\x94;D>\xef\xc9\xba'\x93\x07\x87\xd4\x9b\xc7\xefW\xd9\x8d\x8c\x0d}!\xf5\xe6\xe9\xf4\xa2\xd5\xa6\xe8\x0bz\xb1A#W\xf6\xc2\xa6>\xec\xb11\x13=[\xed\x8a\xcf\xf9{g\xef\xcc\xcf\x1f/.\x87.\x9c\xd9f\xf8\x03\x8a\xfc\xe3 \xc3\xc1\x94mk\xfap\x9f\xf2>\xcf0\x81\xfa\xb6X\xdf2\x9b\x9f\xdf\xf8\x90\x17\xc4W\xfa\x96\xcco\xd7\x0f\\\xc8\xdd+\xd6\xfd\xa1\xa8\x1eqN\x11}\xa1\xd0u\xc1f\xd3\x8f\xef~yw\xf1_o\xdf\xf0\xc5\x00\xef\xea\xb2/\xa94:\xa2o\x9dE\xc7N\xa9\xb6\xb1;\x9eZR\xfd\x8a\xd4\xbd)t9{\x8b\xedP\xcb~\x0b\xa0\x99\xdb\xe8\x889b\xcb\xb3\xf9{\x8dL\n\xe1\x06T\xed\xdba\xaau\xf0\xe2\x19[\xb6e\xbd!\x9f\xcd\xab\xc8\xd36wL\xa1\xee\x8c\x8bu\xaapu83\xbd\xe3\x83\xed\x96\x9a?\xddhHH\x87y\xedP\xb1\x84\xf5\x0c\xf3\x90>\x1bT\xfa\xe5[\x87\x1bQ|\xf1\xfe\xed/o\xde\xfd\xf2\x9f\x96\xbf\xe2\x1b\x83\xf8\xabX\x1c\x96?c\xfe\xce\xd1\xdb\xe9\xe6\x8f\x1f,/\xa8l\x14\xf7&\xea\xd6\x97\xea\x92\xcf\xfb\xb2eW\x1c\x9b\xed\xb6#~x-+\xa1\xf3\xc3P\"\xff\xd9\x16k\"f7;\x99\xe8J]\xc8\x89:\xb4xo\xc6\xf9\xa5\x91\x13\x16\xc6\xa1\xee\xcb\xca\xa0Dj\xfa\\\xdb@@HW\xaf\xafo\xda\xbf\x8f\x97\xd2\\WQ\x8f\x9bP\xcc\xccr2\x15\x07I\xf0\x90\x05\xdf\x95\xdf\xa98\xecMQ\x9c\xbenQPk:<#\xc9T\x9c\xd7\x83\xa7r\x1c\xbe\xa33\xa9L%\xf0*\xf1T\xdc\xabg*\xb1yV\xac\x84\xf4\xfc!\xb6\x8c!S\xf1LA\x08\x98\x86`?\xeaL%`0}Y\xd7 \x84L`\xde\x96\xa9\x04\x8fQd.\x97e\x8c\xecc\x14\x93\x1bf*^\xba\x11\x83\x99\x909\xc6J\x0c}uL-Q\xd9d\xa6\x92\xb3\xc7 \xb9f\xd2{\x1c\xc2UR&\x1a\x94\x12vk\xddH\xac1\x153;\x8d\xf4\xb7?\xe9\x8e\x8cf\x92\x99\xca\xc9\xee\xc8>\xbe\x8f\xbd#\xc7%\xfc\xb0+M\xf5M+H\xc8\x943\x95?\xd7v\x102\"I\x99wr\xa8\n5\x1b\xcfT\xfe\xacj\xc2\xc8\x9e3\x95\x93U\x11.\x9e\xbfp\xf5\x10\x98\x19h*\x7f.\xd5\x10\x92_h*^b\x813\xcf\x16\xd8\x9fJt\x1e\"\xbb\x88>\x19O\xf3\x05f$\x92h$\xe5&\xb2\x92S\x9f\xed\x0b\xccRd\xa5\x86e/\x9a\x8a\x96\xc7h*!\xeb05\xb7\x11J,d;P\x98J\xc9wd!\xc5\x08\xf0\xc0\x1a\xd3\x1c}\xc3\xd0\xb4\x93\xbbo\xaa\xcf\xe7\xa7\xe2\x1c\xfb7\x94\xf0\xa5\x89\x01f\xaa\x815\xf5\xa9@\x90}\x9c\xba\x1b\xa34L\xad\xbe(\xf5+\x80\x06O\x81\xf0\xa7N\xa0\xc0\xe8\x9f.\x87u\xccx\xd1W\xb4\xec\xee}\x06\xff\xfd\xf1\xed\x87\xffY]\xfe\xcf{\xcc\x97\xaa\xfc\xf9\xfc\xa7\x9f\xb0\x9fU\xff\xafZ\xe3\xf5\xe5\xbb\x7f\xbc\xc5\xfe\xf2\xeb\xc7\xcb\x8b\xcbskE\xc5/x\xfa\xd2\x0c\x00\x13Z\x0e\xe5\xd1p\xc2/@\x18!\xe0B\x8b_%\x11^x\xfaB\xf1\x83\x0d3\xd9\x11\x89\x90C?\xe80\x88?\x1cL\x15\xa0P\xf2\x81\x0f\x11$C0\x00\xf1\x91\xfa\x98\x04D\xb4C\x11C\xc0\x88\xf9z\x1a\x07I\x0c\x02%\xe6c\x0e\x19\x86Tp\xa2AH\x80\x15m\xf0\xc4@\x80\xe2Q;\x9b\x19\xa8\x88C\x15\x9d`\xc5\xa0\xee\xc5\xa8\xb5\x04\xc8b\x08h1\x13\x9f\xc8\x18$\xa2\x19\xcd\xe5\x8e\xa0\x1b\xc3\xf1\x8d\x99\xfa\x97\x0d\xe5\x88\xe2\x1c\xb5\xc6b\x91\x8e\xce>\xda\xee\x83\xfb\xf0\x8e>\xc4\xa3\x0f\xf3\xe8E=\xbaq\x8f\x10\x8a|\x9c\x83}\xf4\xa2\x1f3\xcd\x1edudFA\xce\xc7A\xa2\xf6\x83\x0f\x0b\x89\xbb\x9aX\xc9\xff\xc4\xbc\x0b\x15\xe9!\x0c^\xe2\x10\x1eb\xf5\x98\xc9\xa2\x04\x05\x8e,\x07\x82\x14\xa4ap\xb8\xf5\x98\xfc\xcf@J&\x84^\xfd\xebl*\xd9\xf0\x92\x90\x80\xc6\x0b\x98\x9e\x104E\xc1uz\x9bJ\xd0\x00\x87D[\x83HE\xe3'\xa3\xc6-\x17\x86r\x197\xbd$b*\x83hG\x0dqNde\x00\xd2\x10\xd2\xd1\x95\xf9\xfb\x9e\x13c\x19\xd4\xf70\xde\xf2!-\xa3\x01Tn\xb4e\xc0\x92\xf4/\xc7\x13\xdf\xe9=\x08\xc6\x93\xdf\xe9\xfd\xfc?\xc4N\x9f h\x95\x19\x89\x190\x7f!h\x0e\xc3\xe9m)ac\x94\x0f\x99\x99\xa0Zl\xe8\xcc\x80a\xf1\x0f\xc9\x89\xab\x15\x07\xea\xf1\xe4U\x8a\x9b\xf7?\x85:\x89Fn\x06\xccY\x08\x9a\xb7pz\xaa$\x0e\xc7\x19D0xV\xfa\xd1\x9c9\xf1\x9cy\x10\x9d\xd91\x9d\xb9Q\x9d>\\\xa7\x03\xd9\x19\xbaZ\xb3\xa2;\xc3\xf0\x9d\x1ak\xf3\x10\x9e\x1a\xb1H\x8cg\x0c\xcaS\xcd\xd9(\xbc\x84L\x8ft,7\x9d\xc0\x1cQ\x18\xdbj\xe0V4\xb5\xa4q\xec\x974\x8e'\x98\xc6\x11\xcdx\x8dc,U0r\x85\xad\x86i\x19pr\xe3bp\xbfB\xab%`e\xf27f\xb3\x0f\xcd\xf9\xa0o\xe3\xb1X\x96\xfbi<=\xa9\xb3\xd2N\xb6t\xce\x11\xab>\xfb\xb3q,\x8a\xa8'i6\xe4\xe9L\xcf\x8cr\xa0\x87\xe0\x82\x921\x07\xa5a\x0eH\xc0\xecM\xbd\xecI\xba\x1c\x9en9%\xd12\x93y\xb6\xb9\xae\xc4\x9a= \x95q\x93\x02]\xc3\xc1I\x94aL\x9c,\xf7OJ\x9f\xec\xd7\x1b4\x8cy& QV \x92X\xd4k\x0d\x9e\xc1\xf1N&\xcfDrN\"\xc7\x04\n\x9b<\xf8\xbek\xef\xd4+i\x07\xd0\xee \xd8\xba9T\xa1cA\xb7#\xb6\x84-\xb5,u\xc6\x7f\xb9\xaa1\xde\xb4J\x93}\x89KJ\xadB#\xd2\xbcJ\xec\x8a\xf2\xbf\x8d\x1e\xbc\x1beY\x92\xe9\xe0~\x0d\xd6\x8fr\x90\x11\xca/s\x1d\xd4\xa8b\x0c\xc5A\xf6#\xc0\xfa^\x98>\xca\xa22\x04\xb3\xa0\xf9\x0eP\xbe\xa1z\xe7\xc0\xf1\x1fs\xd7\xf7\x81\xec\xed'\xcfd`\xbd\x02\xa4\x97\x08\xea\x90\xfa\xc7\x14\x0b\xd7\\\x86\x1b\xcd-\x8edp\xbc\x9eYW\x91\xd3iH\xc4\x03vG=\x99Q0\xf7G\xed\x9c\x0f\xbc\x8e:\x99\x13`\xeb\x8f\xd9I\x05\x82k\x80\xd1\x93w\xb9\x04\xe8\xb9\x0bt\xee\xe4\xc3\x04\xc4\xaa\x8ax\x06\x9e\\\xc5\x7f\x05 \xc7\xe70\xaaj\x8e\x99\x08q(e\xd5a`\xc3\xdd\xa8\xf09\xbd\x08\xc7\x80+S\xef\x88\xa2LEyc)h\x11|\xb7\x17\xd9\x9d\xad#s\x11\xdc\xa0\xbcF\xa8`\xb7-h\xe1\x0c\xeb_\xdd\xdd\xbd\x18m7:;\x99\x9fD\xe0\xb5\x01\xb4\x0e\x81X'3\x99\x05P\xadA\xa9Q)\x84\x80\xa8\x03\xbd6. \xb2\x1d,m\x87I;\x00\xd26ht\x00(:\x0d\x0e\xed\x00B'\x8f\xb1\xb2\xa03\x02\x9e\xe7@\x9d\x95M\xce\x05of\xbd\xce{\x87\xde\x06`\xb6\x90q\x91\x820\xb4\x81\xc5`\x12\xc5\x1b\x0fE\xcd\xbeXpo\x00\xb2 /\x9f\x89 \xe4(\x14\x81}\xa6O%\x16r<\x01TQr!\xa0U\xc7T\x82\x00(\x80\x13\x04\xe0\x19$_\xe0\xdfY=\nB\x1c$\xfbH\xd8\xf0\xfff\xd9\xc7\xc3\x80=\xec\x04\x0dP\x02\xe8\x97\xc1[QrV\xc8k\x02\xd07G\xef\x12`\xbd\xf1\xbd\xf3q\x92\x04\xe2\xb5\xc3\"\xfc\x80\x08\x1bp\xf7\xcf\xb0\xc39@\xad'\xb5\xc3\xb9\xf8<\xd6\x0e\x17\x87\x8dC\xd3a\x80\x0c\xf9\x9a\x03\xb2\xfd2\xd5\xb0O\xdaI\xa0\xd99K\x19\x03\xca\xfe\x19\x96\xb1\x05HzRK\xd8\xc6\xe3\x17\xb8|\xa3@\xad_\xe6\xd2\x0d\x87\xaa\xce\x9dAn`j4$U\x02\x9e\xa2\x04\xf5\xf1\x0b\x02\xa3\xa6\xc1P)\x8f\xeeI\x15\x08@u\xc0LQ\x80\xa9o\x9dd\x03\x95\xfaT\xae\xc2H:\x90T!\x13\x01!\xb5\x80G\xfd\x98\x82\xb3\x8b\xc9\x0dgLp\x15\xa6b\xf3Z\xe1\xde3\xdcsf\xf1\x9aa\x1e3\x8f\xb7L\x91\x94\x84;1\xbe\x96\x01'\x96\x04\x95\n\xffS^JKzH\xbd\x1e\xef\xe1+\x16\x9f\x11\xb0\x16\x7f=$\x83e`\xcd\x11{\xc2\xf1&\xcez\xb1.\xc5\xff\x17\x00\x00\xff\xffPK\x07\x08+\xfb\xd7CZ\xb6\x04\x000\xda8\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!(\xb9\xb1\xf1mT\x02\x00\x008\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\x81k \x00\x00oauth2-redirect.htmlUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(-\xe3\xb5\x97=9\x05\x00\xf7\x0c\x1b\x00\x14\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\xef\x0c\x00\x00swagger-ui-bundle.jsUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(v\xf2\x8aA\x86\xba\x01\x00\xc5\x87\x08\x00\x1f\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81wF\x05\x00swagger-ui-standalone-preset.jsUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(_;\x94/\xe8Y\x00\x00\xa8X\x02\x00\x0e\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81S\x01\x07\x00swagger-ui.cssUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(+\xfb\xd7CZ\xb6\x04\x000\xda8\x00\x0c\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\x80[\x07\x00swagger.yamlUT\x05\x00\x01\x80Cm8PK\x05\x06\x00\x00\x00\x00\x08\x00\x08\x00E\x02\x00\x00\x1d\x12\x0c\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\x9cT]k\xdc:\x10}\xdf_1Q\x1e\x92\\\"\xfb&\x81p\xf1\xb5\xfd\x90\xa6\xa5\x81\x94\x06\x92}(\xa5\x14\xd9\x1a{\xa7\x91\xa5E\x92\xf7#!\xff\xbdX\xf6\xae\xb7\xdd\x90BYX\x8f\xe7\x9c9\x1a\x1d\x8d\x9c\x1ep\x0e\x1f\x1f>\xddBe,8/<\x95 \xc9yKE\xeb\xc9h(Z-\x15B\xd1\x92\x92\xc0y>I\x0f\xae?\xbf{\xf8r\xf7\x1ef\xbeQ\xf9$\xed\x1e\xa0\x84\xae3\x86\x9a\xe5\x13\x80t\x86Bv\x01@\xda\xa0\x17P\xce\x84u\xe836}\xf8\xc0\xffc\x03\xe4\xc9+\xcc\xef\x97\xa2\xae\xd1\xc2\xf4&\x8d\xfbL\x8f*\xd2\x8f`Qe\xcc\xf9\xb5B7C\xf4\x0c\xfcz\x8e\x19\xf3\xb8\xf2q\xe9\x1c\x83\x99\xc5*c\xae\xd7\xe0-E!\xbb'A\xa5\xd1\x9bbjD\x8d\xf1\\\xd7\x9b\xeaJ,:\x9c_\x9c\xaf.\xce\xa3\x008zB\x97\xb1\x90a\x10\xff\x9d\xde\xd9\xe5\xea\xec\xf2\x17\xbd\x90\x19\xf5\xc2\xc6\xfa\x18\x82\x9bC\xf8<<\x01\n\xb3\xe2\x8e\x9eH\xd7 \x14\xc6J\xb4\xbc0\xab\xff\xb7\xb8Y\xa0\xad\x94Y&\xc0\x1b\xf3\xc4]i\x8dR\x85\xb0\x8e/\xd0z*\x85\xda\xe7\xf2u\x02=q\x83\xbdL\x86\xe0\x9f\xd3M\x90\x14X\x19\x8b\xe3\xbb\xa8<\xda7\xfb#=CK~O\xb40r\xbdW\xd8\x08[\x93N\xfe\x1d\xdb+D\xf9X[\xd3j\x99\xc0a%\xba\xdf(\xd5\xfd\xa7\xf1\xd6\xaf4\xee'\xac\x0b;\xf9\xc1OI\x0b \xb9;\x0e,OcI\x8b|2\x18^Z\x9a{p\xb6\xdc%\xf1~\xc6\xa3\x1f\x8e\xe5\xdd*\x81\x94\xbfY\xe1\xbc\xd0R(\xa3\x91\xcf-:\xf4o\x14\xf7/K\xd2\xd2,#\xa3\x95\x11\x122\xa8Z]v\x17\xec\xf8\x04\x9e7N\xc51\\\x85{&\xc0\xad\x9d\xc7f\xc8\x97F;\x0f-A\x06\xc3m\x99\xde\\\x85\x9e\x8fGG[\xab\x12`Q\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\x14\x00 \x00swagger-ui-bundle.jsUT\x05\x00\x01\x80Cm8\xec\xfdyw\xdb6\xf68\x8c\xff\xffy\x15\xd7\xfa\xf6\x9b!kZ\xb1\x9d\xa5\xad\x13\xc5\x93\xc5m\xb3g\xe2\xa4\xcb\xa8\x1a\x1fZ\x82,6\x14\xa8\x90\x90m\xb5\xf2\xef\xb5\xff\x0e.\x00\x12$\x01\x10r\xdc\x99\xf9<\xcf\xc3s\xdaX\\\xb0\\\\\\\xdc\xfdn\xc1tI\xc7,\xc9h@\"`!\xfc\xf9?\x00\x00\xbd\xec\xf4w2f=\x18\x0c\x80\xad\x16$\x9b\x02\xb9\\d9+\xe0\xd6-\xd3\xd3y6Y\xa6\x04\x0e\xe5\x1f}\xf5\xf6\x00X\x10\xc2\x01\xf4T7\xfaG\x132M(\xe1-\x8a\xbf\xfa\xf1|\x02\x87\xf2G0\x1c\xe1\x80\x0e\\\x839T\x7f\xf5\x8f/\xe2\xb33\x92\x7f|\xfedI'));&\xe6'\xffs\x15\xb0YRD\xd5\xf4\xd5\xd4s\xc2\x969\xd5\xc0\xa2\x1e\xf0\xeb<\xce\x81\xc1\x00\xfe\xbcz\xf0?\xe5M\xf5*\xd0 \xd7_\xe6W2\x85\x80\x0d\xf3Q\xa8\xda\xe5?\x14t\x1e\xd4^\xe5mg|t\xc3|\xc4\xbb\xa8=\xc4\xb6\x0e \x8fZw\xd3\x03\xd8\xdak\xdf\x96]\x1c\xc0\x9fW\xb5gW\xf5N\xe5\xa8\x08\x1f\xd58N\xd3 S\x83\x8b \x8b@\xfbEC\xfe3\x85\x01l\xedj\x0f\xca\xd6\xaand\x9b\xb4?\x87\x01\x90\x08h\x7f\xcc\xa7\xc5\xff\x98\xc0\xa0\x8ep\x11\xb4@F\xfb\x99\xc4\xc5\xf5\x1a\xde\xe2\xd2\xf7\x05J\xbc\xcb\xb3\x05\xc9\xd9J~\xd9\x86\xd08\xa3\xd3\xe4l\x99\xc7\xa7)\xb1\x80\x85.\xe7D=\xdfm??#\xec\x00\xf2:\xc4\xc2j\x8e|\x0e\xb46\x87\xe6\xe8\x15\x86 Z\x93\xfe\xc9 )^\xab\xbd\xd1\xc25\xfdR+\xc1\xe7\x1a/SV\x1f\x03\x1c\xf8}\xed\xb1\xd6\xb4? X\x04\xbd\xb8\xc7\x81\x1c\x01\xabO/k.Q\xb3;\xd9\x8c\\\x99E\x9e\xb1\x8c\xef\xca\xfe,.\xde^P\xb5F\x02\x9b\xf0\xfbz\xfb\x0b\x18@\xef\xf6$)X/\x02\x1a\xd0>'\x12w\xef\xde\x13\xaf]\x05\xc3\x06~P\xbd\xff\xde\xb2 P\xb0<\x19\xb3^59\x9d\xdc\xd0\xe0\x1b\xd5T\xd4D\xb5ZS\xf5\x8f\xbe\xbdw'\x0c\xbc\xbe3\x0f\x81\xe9+-\xb6\x08S+\xd9\x05PN#\xb6\x02\x02 -XL\xc7\x9c\xbe\xb10\x046\xcb\xb3\x0b\xa0\xe4\x02>\xac\x16\xe4(\xcf\xb3<\xe8=\x8d)\xcd\x18p\xe0B\x0c\xe34.\n\x88\x0b\x88\xcb\x1ezacG\xde\xcct\xaaG\x1c\xc1\xf3\x08)\x15\x0d\xf6\xef\xef\x87\xf5M\x94\xc0\x00\x82\x1c\x06\x90\x85|\x07\xe4\xf5\x1d\x90\xc3\x81\x01y%\x9cZ\x1bO\x1f\x8f\x01\x96M8\x96t\x98\x18\xc1\x8c\xafd9\x04|\x06|\x13\xef>\x00\n\x0f\x81\xf5SB\xcf\xd8\xec\x01\xd0\xedm\xd3G\xa0f\x8d\xc4\x99\x8e\x1e\x18\xdf\xc8\xfb\x15m\x81A\xfd\xe7z\xcd\x89\x11\xe4}\x9d@I4\xe9\x9d\xc7\xe9\x92\xf4 \xa1\x90s\x88\x05y\xff\"OX\xf9F\x18A\xb0\x1bA\xa2 \x10\xf2\xc9\xe5\xfdOd\xc5igk(\x0djo\xda\xb9%\x009.\x18\x08\xb0\xf6*E*\x16h\xdb\\\x1c\x04\xb9\xbc\xcf\xbf\xd6)H\xbd\xcf+\xbf\x1d\xa5\xef\xc4\xfaHJ\xc4\xa0\xc17\xf7\xef70\xadB,N\xca\xff\x9dX\x7f\xf7\xde\x7f\x0e\xe9\xad\x04\x84\xe8\x14\xe3=\x99\x92\x9c\xd0\xb1\"\x1b\x9c\xd7\x81Y\\\xd0\xbf18%\x84BB\x13\x96\xc4iR\x90 \xec@\xb1\\\x90<\x08kop\x12C&\xbd\xd0x\x86l1\x8e\xd3%c\xb65\x18@p\x9e%\x13\xd8\x85\x01\xe7\xd2\xe0\x10zK*N\xedI\x0f\x0e\x9a(\xcc\xe9\x1bg$+\xaep\xab\xe4\xed\xf8\xc7\x04\x0e\xf4s\xe9\xaf[R\x18@\x1cp\xec\xfa6l\xaci&\x1f\xdd\xb9\xfb]\xf3Q\"\x1f\xdd\xbd\x17\x86&>0n\xb3\x05\xea|6p\x05\xc4\x8d\x1e\xc4\xb6\xb9\xae\x87'\x16\x90\xdf\xba\x05t\x99\xa6\xb8\x92\xccr\xf6\x1cs,\xe1\x8ceN\x8a\x82\xcfs\xbe,\x18\x90\x84\xcdH\x0e\xa7D4\x90\xe5\xdaa\x14\x01?\xacz\xb0\xbd1v4\xd0\x8eT\x04\x88o5d@\xab\xd7\xf9\xe8k$\xca\xc8\x19\x16,_\x8eY\x96\x9b\xa0\x0d\x88\x0f\xe9\x92\x1c\x00i3\x85\xd0d\x1c\x0d\x8c%\xbf\x14\xdd6\xb3\x96\xd0fPw[/5\xc87'\xae\xf2PPk|\x88\xd3\xcfk\xc7\x01\x13\x92\xce\xc9 \xc2\xe0\xe4\x84\x1fT\x1b\xf2\x01\xb8\x1b*\xa0\xe7\xae\x83\xd6\xbc\xd5T+|\x85\x1e\xe7y\xbc\xd2x\xc3\"M\xc6D\xdb*\xa0o\x17f=\xae\xc5\xdc\xeb\x8b/\xf9\xceqNbV;\x99\xc20\xd2\xf1\xa4\xaf-9\xe7\xc7\x1b\xdb\xc8<\x14\x03C\x0f\xd5\xee\xc5}-6\xec\x8b\x80\x84^-\xe6\xce\x16\x97U\x8b\xbf\xfa\xb6\x989[,\xaa\x16_\xfa\xb6\x98t\xcf\xfa\xd6-\xd8J\xab\xa6\x7f\xf0m\xda@\n\xb5\xa6\xb7\x82-\xc1\x1c\x91\xe1t\xe4\xd7\xe0\xd2\xb7\xc1\x85g\x83\x85o\x83\x13\xcf\x06\xd3\xee\x15_\xaf\xb1[\xaf\xe6\xc6\xbe\xe3\x9b\xb5\xc6\xa7\xffbA.X7\x16d\xea\x8fD\xfcA\xfbI\xf1\x9c\x95\x9ck,\xee\xbc$+\xc2\xc5\xf5\xa5|\x81N\xc8%\xde(\xc4\x8d\xc7E\x91\x8d\x93\x98%\xe7\xfc\xa3T\xdc|\x9bOH\x8eo\x8d\xf9\x0d\xd5\x06\xef\xba_\xb5\xc0\x07\xd0?&\xfc\xbcJ\xda\xf4c\xca\x05\xc4\xbf\xff\xfd\xe4\xe4\xf9\xeb\xd7\x1f?<~\xf2\xea\xe8\xe4\xf9\x87\xa3\xf7\xf8\xc7\xc9\xdf\xff\xdekS\xd6E\xfb\x8b\x97G\xbf\x1e=\xb3\xbc>1t\xf0\xe6\xd9\xd1/\xd6\x0ff\xed\x0f\xde\xbe\x7fv\xf4\xde\xfa\xc19\x0c\xe0^\xfb\xf6\x1c\x06\xb0\x07\x0f\x1f\xc2\xb9A\xf1\x00\x03\x98\xc3\x0e\x18\x8e\x96\x15*\x9c\xda\xf7O\x8dZ\"\xa8\x8e\xb2\xad\xbd\xd6SC3'\xd7i\xc6F\xcb/\x9c\xd8J\xfa\xd8$g\xc4\xf6\"O\x92|dn\x91\xc8\xa3\xa1lp\xd7o;]\xf2\xd3\xcc\xf6\xf0\xd8q\x12q\xbee\xbd\x86\xdd\xb6\xf4W\x13*_\xc7l\xd6\x9f\xc7\x97\xfc\x90&R\xb2\x84\x1dT\xb4\xf0c\x88\xb3Tx8\x06\xa8O\x13Rh\x06\x0f\x81>\x80\x8c\x8b\x9f\xf90\x1b\xf1\xe3j\x98\xc160\x83\xac)A\x99{\xcd\xf6\xa9s94\x9e\x8c\xf4\x8b\xe4\x0f\x05S\xfcs\x80\x0cE\xc2\xe9\x02#\xc1cq\xba\xf2'^\x1d\x7f\xb2B\x12\x99P\xba\x9c\x9f\x92\xbc\xc6\x82\xba$o\x8a\xd0\x7f\xf4\xe8\x91 \xfc\xa0\x1a\xe5|&\x15\x1c,_\xa9\xbb\xfb\xdf\xdd\xfd\xee\xfe7\xfb\xdf\xdd\xc3\x19\xd2R\x05\xfb&~cn\x85/2m\xe3\xba\x0d|\x0c\x1e\xc2.\x1c\n o\x03\xab\xc9,\xe0\x00\xcec\x97\n\xaf\xc1\x14\xda\xdaxkb\xe2\x1aM\x05rm94\xe4Zs\xe8\x08\xa1\x1e\x1e\x0e`\x87\xe2\xc9^g\xce\x0d/3x\xc4\x01\xe85\xb0w\xd6\x95\x97\xa3z-G\xee\xb9a?\xf8\xb6\xc7\xfc\xda{\xed\x018}c\xc0!P\xce]\xcb\xc5\xd6\xf77\x83m \x9c\xf5n\x087\x9cC\x12\xef%\xa8di\x9d\xf4\xfa/\x8e\xdf\xcf9\x1dhS\xe6\xdf\xf9y\xd1\xbe\xfd\x06\x06\xb0\xdf\xbe\xfd\x9e\x9fR\x95tW\x19K\x8eW\xf3\xd3,\xe5\xeb(\xfe\xea\x8bM\x9d\x19\x8c \xcf\xc4I\xa7^0\x1cm\xaf`\x00\xef9\x8e<\xb3\x1d\x01\x1f\xcd4\x87\xcd\x92\xa2O\xc9%\xf3f\xc6?\xab\x95\xb2\xe8\xa8\x94\xc1\xa4Z(\xbe\x05\xf7j\xcb6\xe4\xdf;\xa8(\x1cB^\x9e!\x19\x1c \x91v\x9e\x86\x99Y\xb2\x9bd\xd4v\xe2z\xd2\xea\xef]T\xc19$\x81~\xcequJ\x9a\x96A\xfd\xe1\xe6>\xb7~\xf4ec\x9f\xb8\x19\x83\x866H\xb3\xf4!\xcexu\xf1\x93\xb9\x0be\x91\xe1C\xb5\"\x82\xd4!\x08\xa3\x85\xdf\x8c~tw'\x0e\xd3\xf7Hk\x87\xefG|\xcb\x90\xe1\xb3\x91a\x08\x0d\xb5\xcc@?\x13\xd5\xf0\xbcF\xf4\xb3\x07\x8c\xd5\xc9\xabCXp)^]\xbcpv\x81\x1a\xa0\xe6\x91\xa3\xb6cB\xd0 \xab\x84\xe8>\xcb\x8e\xc9g\xbc\xa5Z7\xb7\x0d\x1aP\x0b\"\xc5'\x93M\x18\x95X\xe4\x02\x181\xae4(M\xa9M\xbfut\xb9 cF&\x82A\x83,\x87DIE\xa27\xc8\xa6b\xcb\x15\x11\x7f\xfa \xa5\x1b\xf1\xe8\x00\xb5\\\xb6n\x8d\xab\xc8\xaf+_d\xfb\xf5\xcb\xe0\xdeg\x19\xcab\n\xe2r\x11\x96\xed\xb5 \xfdi\x9e\xcd\x8f(\xcbW\xe5\xcb\xc4w\x94/\xbfl\x94\x86\x81\x11} |\x9cR\x8aT\xb7\x96\xdec\xfb\xc19\xb6\xe0\xcb\x07\xa7F\x13\"4\x19\xdeo\x8cL\xff\xf5QSU\xb1\xec\x98\xe5 =s)\xdd\xb4\xc1\xf6\x86\xcf\xe5\x01=\xea\xd5{\x88\xe0c\xff\xe5\xd1\xaf\xc70\x80\xe7\xfc\xef\x9f\x1e\xbf\xfax\xc4\x7f\xfd\xce\x7f\x1d\xbd\xf9\xf0\xfe9\xfe|\x13\xd5\xfaOh\xc1Q\x1f\x06\xcdQe\xcb|Le\xf2\xd9\xb3M\xd3\xd8^\\\x7fQ\x11|''%\x00{|$\x7f\xf6\"\xe8]\xf5\x9cc\x1e\xc7\xe3\x19yO\x8a\x0e\xeb\xa8\xd6\xd5\x96\xe8\x0b?\xc4sOt-e\xbd\x8f\x14\x1fL\xf0\xfc\xd2\xdf\x1c\x88\x17+\xac\xef\xb3L\xc8\xb2a$\x1eI\xc1Q\xfbH\x9e-\xf2\x05\xd74\xca\xfe\xbb\xac\x18\xdaDR\"\xbdx\x04\xa3\xd8\xd2\x01\x98{\xc8\xf2\x0d\xba\x18wv\xc1\x82_#x\x11F\xf0km\xf1\x15\xbd\xf5\\\x133\xa6\xbf\x14-\xbf\xf4\xc7\xf4\x97\x0eL\x7fY\x1b`EI=\x9b6\x0d\xf1\xe5\x0d#\xfc\x90#\xfc\xa8\x8d\xf0/o\x18S\xf6\xbcz\xf8\"Liw\xc1\x82\x1f\xc4z\xfe\xe0\xbf\x9e?8\xd6\xf3\x87\x06\xe5b_\xb6\x96/\xfaI!Z\xc8\x08\xff\xa5\xb4\xb7\x1c\xbd\xa5\xba\x96\x8f_S\xe4\xbelko\xbf\x8a\xe0\x9f\x11\xfc\x12\xc1?\xdaJ\xd3\xe3\xa3\x7f\xa0\xc2\xd4&9\x12\xe2\x10\x1dOb\xe4\xca\xd0\xa3L'6\x1b\xb1\xaf\xcc\xd2\x83\xe2/\xa5q\xe9\x13Y\x15F\x1eR\x8cDr\x83\xd5PN\xf8\x07\xc2\xc7\xadF\x077\x19\x1auN>\xa9\xf4\xf3\x96\xf9\xa3\x80\xe1\xaf\xa0\xcb\xbb\xbb\x93\x86\xb3\xa8q\xef\xa9<\x0c\x86#\xaf\x8e2KG\xea,\xaa\x0c\x18\xff\xf04\xb0 7fm\xf0+\xdeZ\xf0\x95\xd4\xb5\x12\x12\x0cG\xa1_\xbbq\x07r\x08\xa3fR\x883\x0fy@\xd9\x05 \xdb\\\xf3\x93\xea\x8d\xdc\xfc\xc6\x1f\xd5\x1b\xd4\xfc\x86Q\xca9\xac\x84\x9cR\xf5d\x16*\xbfL\xd2\x19~\x8a\xe0|\x04\xfc\xb8O6\x92x6\x92Y\x97\x1d@/\xcc\xc2\xdc\x97OO\x08r74\x8b\xc2\x8d\xe4?7\xb0\xc5\x80\x1e\x06|(W\xd7k\x08)\xf1T\x97\x11\xc9\x9a\x99\x81\x9a\xd9D\xf0\xd2\xca\x91\xf0\x03\xa2\xb2l\xecE\x10\x0b3F\x0c\x0f\x07\x90<\x80\xd8\xeeF\x07r\x1cK\xde\xc6\x90r\xd1\nv \xe6\xb2\x95\xc5\xad\x0e\xd4b\x0b\xbd\x1e\x0b\x96\xc3\xbdQ\x84\x8a\xbb\xe5pw\xc4\xbf\x8c\x80\x84\xa5\xa6$\x86mh+\xe1\xa0%~\xa9K}\xd6zhU\xfb\x936\xab\x8c\x9et~Df\xfc\x17/\x93q\x85\xac\x90\x15+\xe7\x02\x0c\xc7\xc6\x8f\x81\x93\xa5P\x97r\xfe\xf0_X\x05\xfc\xedmx\x04 \x1c:\x1a\x07?u\xa7\xba\xacjOu]\xc1\x01|F\x07F.\xcaKL\x12\xe8L\x86{\x8d\x93\xa8\xfc\xa8}\xdb\x03M\xb2\xfc\x1ax2\xb5;\xb1*\xca\xa4y\x94\x0b_L\x8eR\x11XQ\x83\xe3M\xfd\x0c\xa3\xd5\xbe\x91\xba\xcf\x0c\x9bx\x19\xd0\xb0?\x8f\x17\xd5\xba\xbb\xda\x05m\xd2\x08Q\x0c\x1d\xa06\x10:Ts\x13b\x1d\xd2\xaf\xff\x81!\xa9-\xd0^t\xb4\xeaD\xd0\xeb\x99|\xcd\xf8\xd5\xeb5=\xf7\xf0;N\xd3\x17\xde*\xab\x85\xfbT1\xf0#/9\x1b\xc1\xa1\xb4 \\:\x7f\x95\x14\"\nfB\xc4\xf3_\xeb\xcf_\xc7\x0b\xa1\xbb\xf2\x1a\xce\xc4=\x1ce=\xae\xf9]\x0d\x14O\xdd\xd4\xaa\xe9\xaf\xf9Acf\xdf\x11\x1cwHe\xbe$\xb0%\xf5\xef\x0c-\xcc%Fm\xd9\x18%\xc1\x82j/\xeem\xa0\xa6\x97N\x08o\xa7V#\x06So\xb8\xb6f \xb8y\xf9f\x10\x868\xa1\x00=\x0f\xf4\xbb\x9bN\x10\xec\x93\xf4\xa7f[f\xc7Q\xd2'\x9f\x97qZ\xa0J\xde\xf4\x02\xd3^\xd8Ro\x07\xcc\x93#?\xf7Z\xf2\xee\xe5\x8d\x03\x11M\xa4\xd9\xb5+\x87\x07\xed&+o\xca\xc7\xda\xcd\xe6\xe7''\xb3\xb8\x98\xb5\x1a\xa8n\x97\xaf\xd4\x1e\xac\xd7B\x7f\xcco.\xe5\xb0\nu\xa3\x907\xc6\xea\xc6\x18=\xa5;\x90\xb2\xe9\xc1!\x0d\xd1\xf8\xdb \x1b\xe5Z\x81\x9e}\xe6\xb6\xf9H\\\xac\x06J\x88})#\x04\x1d\xe6\x8f>9'\xf9*\xe8T\xa8\xa8K\xb1B9\xda\x00\x83P\xec\x82Nv\"\xe3@\x98\x91 CNQ8/\x06\x94\xc3\x15o\xeeb\\\xa1\xed(\x00\xf4\xdf\x97\xfdq.\xc2c\x8f\xa8q\xda\x16\xa8\xe5gc\xee\xbc\xf1\xaaZ@\x0b\xcd\xd1\xd5\xbe\x88m\xda\x0d\xdbB\x90\xb4 \x0exg\x0d\x0f\xf9\xe6\xa5xK\xc7\x12\x10\xa9\x05\x81\x01$f\x08\x1b\xa17\x15\xc10\xc6/\x16 \xb6\x8frE*\xd1\xc7\x14<\xa8_\x1c\x9e\x9c\x13\xdd\xc2\xd8\xb4\x00\x9d\xa43\xfe{\x86<\x01\xe9\x9f\x11\xf4\x8a\\\x85\xfc \xbf\xab\xddB\x1cQ\x185\x95\x1ek\x06\x8a \x885V\xf1q\xaa\x11\x13\xbe\xa8\x0b/\xba7w\xd3\xbd-T4\xea\xf1bsM\x02\xe2\x1c\xbbj\xc0\x8c\x8fB\x9f\xa3\xbc\x1e\x1a\xfa\xa4\x86/\xcb\x1e\xdc\x86\xdd\xd2\x9fE\xfa\xbd\x84\x91zC}\xe8:\xd8\xfeY\x0e\xed\x9ff\xc4\xf9\xa7\xb4\x19tl5\x1b\xb4\xce:\xa0U\x8b\x8c\x11*\x02O_\xa1\x15q9\x0b\x99\x97b\xd5X\n\xad\x0d\xf3j\x9c\x91@\xbaZE\xa0\xe2\xfb\nF\x16\x10\xc3\xfb\x98\x9e\x118]\xc1n/\x8cpo\xe19\xb4\x1b\xd5W \x0d5\xe8[z\x1bv\xc3\x08i\xba\xf6\x02\xc5e\x94K\x18\x9f\x16\xe8z\xc8\xe0\xa1\xe4\xd8\xf8\xdb;T\x99pN\n\x16\xe75\xdd&\xa1\x13M\xb5y\x82C\xc3\xc1\xeaX\xa3\xa3\x07\xfe=&I\x1a\x04\x0cv8\x01\xbe\x0d\x94\x8bV!\x97\xcd7\xc3\x9d_JX\xfeb\xc6\x9d_\xbe\x0cwN\xcd\xbaD\x81/\x9aJ\xe9\xf1i\xc1\xf2x\xcc\x9a\x96 K\xb3'\xc4\xe5fz\xe1|z$\x9f\xea\x0f53\xd6\xf0\x1f#\x15`\x1a\x10\x12\xc1K\x8e\x19z\xdc\xc3\x19\xe9\x0c\x04\x82\x86\x15\x86\x93G\x94\x0f4M\xfb\xf0\x932g\x84\xa3\xb6gc\xa3\xcf\x8dL25\x7fY\xadG\xe9![S-U\x1e\xb2\x03\xc8\x85\x8b\xac\x15W\xa4\x8a\x88\x04t\xc80\xecn\x07=\xba\xb2\x11\n\x7f\xbc\xa3jgf\x1c\x15\xadT;\xf3\x9a\xac\x9fu\xc84Q\xe3\x14Z\x937\xbe\x95\x9956\x9bikJ \xaa7\xbd\\M\xa8/\xf4\xc3CbD\xf9Z\xdf\xb3\xb8p&\x02\x80\xa6\xa5S4\xdd\x08\x93o\xa9\x02\x1a\xbd|\xe9\xc6\x12\x9d\x8a\x9dU\x99\xaa\"\xc9V\xeb;-\x11;-\xe1;-{\x00\x89;\x16:\xe6\xdf\xe3bf\xb0\x03 \x1c@b\xd1\xf35vf<\x8a n\xee\xc6\xc4\xa8\xb4\xb5\n\xa3\x89\x17\xc8\xae\xb3=%\xb8\xac\xfbS\x03\xa1uw\xe6\x9d{8\xb9\x89=\xbc\xd9*(\xc8\xa1\xa65\xfb\xf7\xed\xf9\x98\xef\xf9\xd8o\x8fk\x8b8\x9cU\x87\x1c\x95\x87\x1c5\xee\x8b\xd2[\xc5c\xad\x91\xf7\x0dk\xbb\xb2&4iB\x86\x85{V\xd8\xf2SP7\xcb\x86v\x94\xb1\xe8$\x9e\x04\xd4\"\x83\x96\xbb8{\x00[\x01F\x9cKyT\x08\xa4\x18\x8b\xb7'\xb4\x10A&d\xe2\x08\xf2\xedm\xb9\xab\x1e\xd8\xa5\x91\xbc s#L+}\xf5\x8d\x025\xcb7\x86\xaaE\x9d\xf3D\xd7\x12\x8b\xed\xf2\xbd\xa5Y\xcb\nl\xbe\xd5\x98\xb6\x0e\x1dZ\x0e\\$\xe1\x8c\x8e{@,\x8dX(\xaf\x8d\x10\xe4\x12\xe5\xf3\xff\x02\x94\xaf\x0e\x15\xfd\x14)C\x08D\xca\xa2\xb6\x83\x80~\xa0\x94\xc6\xa8\x07\x1e\xcc[6LF\x11'T\xadC\xc226\xbeK\xa8\xa6%\x12\xbb\xe4A\x17\xdd\xa4.m\x12\x9a\xd8\x86\xc9H\x84C\x96c\x8b\xeb\x03;\xcdI\xfc\xa9\xbd\xa06lk\x1d[\xc6\xe5\xfd\x8f\xed\xbe\xc6\xc2Z \x9ai\xb1\x8d/\xdf\x08\xab\x8a+\x01\x8f\xaac\xb5Ka\xd8\xbdQA\xc1\x0d\x11\xa5\x02\x9eC\xb1(\x82\xf2\xe4\x1e6\xbe\xe6\xb4.+\xf67\x1f\xfa3\xbcsI\x03\xe6\xe4\xfa.v\x0dA\x1b\x0e\xa1\xf7\x9e,H\xcc`8\xea\xc1A\xf5\x0b\xbd \x98\xa6\x16\xda\x86^u\x0f\xbf\xe5wX2'\x05\xb4\x9d\x8e\xe7\xd7g\xcaML\xb8\x18\x82\x81\x01\xaf\xf5\x93\xd0q\xba\x9c\x10o.|Ft\xc5W;*\xab\xd1<\xa6,\xf0\x99Hm\xffpPYQ^\x8b\xd9\x13S\x85\x03\xa5\xad\xab\x8d\xec\x83\xb0\x13\xc3\x8e\x08\xa6k2\n\xcd\x91\xe6\xe4\x9c\xe4\xc5&n\xda\x1dp\x9d\x90\xcb\xb7\xd3\xeb\x83\x15\x0eQc\xb8\xb3\xe7\xec&\x8d\x0b\xf6\xfc\x06\xba\xaa0\xb4\xb3\xcb\xeb\x0bS*UT\xb9\xc4\x98+\xcaJ\xb0\xca\x03\xa36\\\xda<\xd1\xa8S A\xbd\xe6\xb2\xb9\x94\xb3\x11\xab\xba\x19\xb1Vl&<\x04\xaa(N\xc5\x02Q \x89\xd0\x98\xf0F]7\"~xP\xd8\x1a4\xa5\x91\xd2\x13\x0fI]\xf5\x0e\x87m\xcc\xd4\xa6z\xde\xb6\xf7s\xfa\xbe\x92\xf4}u\xc3\xf4\x1dU\xc6\x8a\xbc\x8b\x1f\x1au\x17\xda\xddm\xe8\xf5\xfb\xfd\xea.\xa1\x13\xd8\x86@\x08\x15\xeaE\xb2\xe0\xed\xc1\xe9\xaa\xf69Y\xf0\x86{!\x9e\x07\xed\x93`u\xb3'\x81\x1an\xa5\x8b\x84\xaf\xebCi\x9d\x11\xabk\x9d\x11\x8as\x08\x08\xec\xe8}\x87p[\xeb\xcf\xba?0@zW\x18\xe452!n\xf05B\x9d\xf84\xcd\x0c\xb6\x87\xc6\x90\xbd\xcf\x9d\xc6\xa1Rv\xaa\x1d.\xe8R \x02\xb2\xcb\xa7\x91\xb0\x15\xe0\x19S\xdd\x0d\xe1\xe1\xa0\xf4-]\x91`7\x82\xddP\x1eO+\x89\xdcg\x84\x05\xbaU@\x99\x0c\xf8}f\xb8\x8f k\x9f]\xab\xeb\x1c6\xe7eTemy,\xf6-\xf8\xbf:\x92\x0c\x06|.vi@d\x17p\xaf3\x94\xf6D\xb5\xd0\xb5\xf3 4\x13mp\x89\x03\xed\xc3j\xf5\x85\xe7#\x0eGB\xd4@sV7s\x16V\xd8\x8dz\xc3J$\xe0\x90\x93\xf2`k\x03S\xf8\x1a\xf3\xe0iw\xeb*G\xeaT9\xd6%\xc4\x08\x12\xa3\x06\xd1\xbcl\x19l\x8b\x11\xed\xf0\x01\xe4\xfe\x0b\xd4\x92\xd7\x8c\x00\xdc\xfc\x00\xae\x80g\x1co\x03\xa0\x969\xf9\x02\xd9\x0c\xce\x9b8\xec\x95 \x9d9\xd5!\x0d\xe8\xf3E\x7f\x84\x16\xc9\xbf\x98\x03P\xca\x17\x94\xd7c\x1f\x91kuC\x0c\xc1\x8a4\x16F\xf8}\xc8\x1fe\xb8\x1d\x9aU\xc5\x13\xfegy_\x92,\xf9 \x9eq\xe7ed\x91\x81\x8f8%*\x9d\xd3 \x89\xe0\x94\xe0\x9f\x17\xd5\x9fG\xea\xcfSRF\xf4\x887\xb5@\x1e\xf1\xbe\x0c\xf29jH0|\xa1/\x89-\xbb\x04\x9el\xc9|\x89 &v\xf6\xab\xd3\x8e\xdf\x0b\xaa$,\x11\xec\x87*\x7f\x06\xbe~\xe0\xbfk\xee\xdf\xbbw\xe7\x1e\xdc\xe2\xe7\xd9\x9a\x13s\xfb\xc6)\xdfd\xe2M;\x92\xe3^\xd9F\xb7\xbbG\x8f\x1e\xc1\xde\xfdP\xde\xe1O\x02V\xde|\xf8\x10\xf6\xee\x8b\xdc3!\xac\x9b\xce\xf8\xb6P\xa6\xe3._Il\x1en\xc1\xde\xee7w\xbe\xb9\xbb\xf7\xed\xfe]X\xc3\x9d\xfd\xfd\xbd\xfd\xfd{w\xbf\xe1O\xfc\x9c2\x9fZ:\xd2)&\xac\xd7\x8e\xe0\xeb\x92\x86Z4\xd5\xdd>\x8f\xaa\xa3\xb6\x07\xa3\xbb\xe3\xae\x9e\xb7\x9a#4Px\xc5\x18\xa8qY\xe6P\xa5=\x18\xd8}\xce\x12\xf4)\xdc\x92C\x15\x0e;\xc2\xa7\xc21P\xd0\xf0t\x17\xd66\xe7(q\xec\x8d\xe0\xbd\x80\xf5\x1b\x993\x83`:\x1cxF0\xf1\x19>\xe7T\x1c\x1b\xe7K}\x9d,\x0bp :\xdb\x08\xc7gq1{\x9aM\x88\x06\x19u\xcb\xa4\\\xc4\x96\xaa\x90-\x1d\xa4\x9e \xb43\x9e\x1f\x9a\xbe\xaa\x08\xbfw\xc2c\x8d\x84a\x97\x1a3\xa9\x9c\x0b\xcb\xaf\xc9\xf09\x19y}\xb9\xf5\xd6:n\xb05\xceOS\xb4q?/\x8e\xaaT\xd8\xe8\x0egz\xe25\x16[g\xdd\xe0\xd5\xbf\x96\xa3\xa0\xd9\x84|X-\xf8\x96\xdb\x0d\xa1\xb8H\xd8x\x06Au\xbf\xab)~\x8d\xe3\x82\xc0\xdeA\xe7{\xa0\xd1\xfe\xfe\x92&\x9f\x97\xe4\xf93\xfb\x1c\xd5\x85\xcd\x7f\xb7a\xf3\x93l\x8c\x01\xc3G)\xe1\xff\x88\xc96n\x96cp6mVj\x83\xdcR\xdaj\x19\xdf3\x7f\xcd\x97k{\xfb5\x89\xf4\xa3\xef\x16\xbc\x16{\xff5\xee}G\x88\xc8\x07\x12r\xac/\xa4,z=G\xd7\x06\n=V6\xd5\x01\xfe@\x97\xe7\xa6\xc7`\xefMFw\xc8%#\xb4H\xaa@\xc2\x02\xe2\x9c`\x92\xe38M\xb3\x0b2\x81\xb8\x80OdU\xf4\x9b\x89\xb3\x9b\xdd\xf3\x0de-n\xf1\xdc\x98\xc3X\xbf|\xd2\x11\xab\xab\xbb*\x86~iI\x8c;\xde\x94|\xbay\xf1\x01\xcc~\xb1\xea\xc2\x15j\xac\xc3\xa6$C\xb2\xc9Z$\x89\xc6\xc1\x9b>\x08\xad\x0d\xb9\xd5m\xfa\xa5\xcb\xda\xfe=\xf7\xe3\xc5\"]I6\xde\x12\xd1\xaf_W\x91\x83L\xf23\xb0\x03\xb2\xddD\xb0\xe6\x94^\x91\xbc\x16\xde\x7f\xa4\x08!\x96AA\x18\xc4@\xf9>\xa8 \xa7\xc6\x08\x19\x95{\xc2\x89\xfa\xfc*\xe7`\x9f\xfd\x06\xf4\xc4y\xeaot\xda+\xe5kI\xd68\xc3\xa0e\xb41\xe6\x03h@\xeb'4]\xf1&\x85\xd6\x14\xd5\xa4c\xe1\xd4{J\x80s\x0fd\xd2\xf7\xf4\"\xfdd\xe1\xedKu\x0c\x13\x8c\x92f\xa1 \xf5b\x16\xfc\x85;{\xf0\xb5HU\xd8\x1f\xcf\xe2\x9c3/\x8fY@Q\x98\xb1\x8aG\xc7\xa4\xed#\xad\xff\xe2\xbd?&U\xc6\x84\xa48*ic\x9bj\xbc\xf5\xdaa,_9\xf0V\xa9;\x8d4\xf3\xcf\xab\x08z\x7f\xefE\x82]\xb4\xea\x04\xc6\xb18\xe2]{\\\xf6cs\xf57\xa0Y\xd8\x16\x97\xdf\x91\x08>XE\xe6\x9fI\xfc\xe9u\xdc\xd02\n\x06/xGd\xe6\x02\xf9\x92\xa1qqF\xb6\xa1\xfc\x1c;<9I\xe6\xf3%\x92p\x8em''\x8d\x14\xed\x1d)\"\x03lE\xfc\x0e\x9e\x93&\xd2\xf3\xfe\x7f\xe7o\xec\xdd7$\xa6\xe4\x0f\xf6\xef\x192\x1f\xbf\xb7\x0cY\xb2\xf86)\xfa\x95e\x03\x9c\x91@\xc4f\xa1tV\xb9\xcd/H>\xcd\xf2\xb9P\x7f\xc7\xa2\x8d\x8b\x84\xcd \xa6\x90\xd0iB\x13F\xa0H\xfe \xbe;\xf0\xa3[\x8cw&\x0d\xfbE$\x0d\xfb\x8cMp\xfeb\x1c\x94\xf9\xd3\xf9\xb3>\x1f\xd9\xeb%\x8byO\x85\x16\xd6\xd2\xa5\xab\xce\xad\xe9\xed^\x91\x80*-?\xedO\xb3\xfc(\x1e\xcfj\xf1V\xc6@\x06u)R\x8a\xdc\x15m\xa9\x9b\xd4e\x8a\x82\xf6\x03\xe7g\xef\\ \x7f\x90\x8el\xe6\x1fI\x04'|\x9e\x1f\x89G2\x9d\xd2| B\x8a\xcb\x038r\xa9\x88\\\x8bd%!\x1d\x15\x86`{\x00\xfb]\xa2\x14\xda\x85\xe1Q\x95@\xc6p,\xbfN\x8a\"\xa1g\x82 \xc3^?\x91\x95\xc8f\xc1\x86\xd4\x94fR]\x82y\xe6/E\xfcU\xde\x97-\xdc\xbds\x9d\x11\xfc\xd76_\n\x85\xa7\x96\x01\xeau\xbc\xb0\xa6<\xfb\xf8\x85\x96\xc5\x93<\xcb*\x959\xff\x81\xa2s\x19K#\xf26\x85&\x93b\xad\xebb\xa3\xae\xff\xa1'\x85r\xcf\xa9 \xec9\xdd\xa0i\x9c\xc8r1\x89\x19y\x8e/\xaf\x0c\xd5\x0cm\xdfn\xba\xb29\x99g\xe7\xa4S\xd26\xccz\xe5nxBR\xc2'\xe0\xdbtk\xd6\xbeS^m:e\xd1IsA\xdc\x89\xa3\x85\x08Y\x92\x17\xa5G;\x94\xae \xa12\xce\x94\x13\x18\x92\x91l\xd4c,m\xf4\xb0\x8c\x06\x83]\xd1)R\xc6b\n\x14w\xf8\xc8\x96$\xda'\x91\xc4\xb9\x8c\x03\x15\xa6\x8d\x95]'\x1aw\xfa\xe2qr\x17K?<;Q<\x97)c\x12YM\xcbb\xd6RW\x01\x03\xc8\x82\xa5\x83\x06\xca\xe5*p\x02K\xe9\xac\xdb\x8e!\x03\xab\xd4qF\x82\x04cH\xd0p\xc3\xf7n\x04\xbd\x84\x9e\xc7i2\xe1\x94\xf8]\xccf69\x88\xcf&\x85\x01\xc4.\x0fT\xfe\xd2XNy\xc5\xa7\x8c\xd4*\xe5\xfb\xc9\xfe\x01?\x07I0\xae\x16\xd0\xa9(\x9d\xe2\xec\xc7r\xf6\xe2\xd7\x8a\xff\x92\xbb=H9\xbe\x06I\xc5\xcb\xb0\x10\xcf\x8e4\x82\xa9\x81\x07\x90{\x9eR\xd4\xe9Z\"\x1ee\xdfy\xd9\x9b\xe4\x9aZu\xd0\x1a;`\x9c\x92\xd8Y\x94Hk\xbc\xed\x16\xc3\x84?\x84Ym\xc0:\xea\x8d\xb3\xee\xf6k2P\xe7\x04J\x8b,_\xa9\xb8x-t\x11&\x06@\x8e\x86 b\xb1\xfeE\\<\x16\xf44@\x1f\xb6\xfe\xc9 \xa1\xc52'o9\xbd\x0e\xea\xc4[\xb1R\xce\x81\x97\xbd{\xee\xc1\xd6\xf9P?7\xf4\xd1pQ\xec\xd2\x0d\xb6\xb8x\xae41\x9b\xf5\xaf\xf7\xd3\xb12%\xc86\xebA\x9e[\xce\xb67spR\x1a\x11r\x01/\xfde\x9e\x8d\xbc\xd0\xbe\xd4\x89Y;\xdcKo\x1b\x94\x03\xdb\x99E:\x88\x08\xba3\x93\x80a\x82\x19\x86\x19eL6\xf7H\x94}\xea\x80\x80\xb6\xda\x9d{K\xed\x98\x8a\xc11`+?\xd2\xfeI*\xd6Fgk\xa2*\xaf\x03\xb24\xc8\xe15\x1a\xd2r?\xe8\x0c\xce\x9edp\x0c\xd3I\n.\xb9\x0f\xe0\xb3\xc1s\xe8{\x12\x01\xb2W\x8dd\xc0\xaf\x1f\xbf\xb3TO{\xc2\xdf\xd6\x81dS\x0f\xfedO\xfc\x81\xc3oOH&*j\x19\x1f\xac5>\x9c @,\x9d\x9c&l\x8e\xe0PN\xb14\x13.\xc8\xd4\xab\xcf\x9f\xaf\xd3\xe78[Rv\xed._\\\xa7\xcbOd\xf5\xa3`\x8aY\x0b\xba~\xdd\xfezs\xdd\xae\xbc;}\xd9\xdd\xe9 \x13\xa5FK\xa7\xe6*\xc2\x86V\xbe\xcd\xf1\xf8\x93H\xd3\xa9(\xcaW$\x90\xbf\xfc\xb4\xa1?t\xa6x\x14\x15\x90D\xc6\xaaVRJ[\xb3_u6k\xa6m\x1ce\xac\xe5o\xd1\xab\xf8\xc0\xe6\x8eyr\xb2\xc8\xc9\xb9\xc9\x14\xec\x97\x85\xe5\x9f\xbeIQ\xeb\xc5_\x9f8\xf2\xf6fJ\xaa#\x11d\xa5H\xc7\xf0\x87F\xe9\xa8\xb8!\xa5\xbb\\\xfc\xaa\x13\xbd\xcck\n\xbf8\x93R\x7f\x8fz\xed\xe0{>\xa0\x7f\x92`\xd73\xff\xdd?\x9c\xb8z.k\x92\x9b\x8d\x9c\n\x15-\xab\xadt8\x17\xc1\xa9\xc5\x9d\x12d~\xd8\x8b\xe0\xc4\xa1\xbc\xc1\x04pL\xf5\x86\x91/\n\xbc\x11h\xcaU\xb1\xb8I\x04q\x18\xc1\x96T}T~U\xe6\x0eD\x1e\\\x19~\x18$\xb2P\xd7!\xe7\x02\xa4\xf6`g\x0fK~\x1d4\xab\xc9\xf1\xeb\xcae\n\x17zvl\xc6g\x14{U\xf9\xc6\x9fp\x9bW\x93\x1cZ\xa1'\x8a\x8f\x19\x1f\x9b\x82@m\xc8C\xea*\x8b\xb2>c\x16\x95\xd4\x07Q\x97\xb4\xd5\x14\xa4\xa5\xa3@O\xb8\\p\x08\x19\xee6\x93\xbe\xc2\x82\x8f\xd2\xe9\xa6\xd4/\x89\x05\x8d`\xe9\xe4U\xb8D%$\xb6\xc0\xf8\xe9\x01GD\xb9\x9e\x84\xf3#G\xc12\x8c\xe0(\x881\xeb\xc3\x05?'D\x0e\xd7!\xff\xcc7\x9d;cn\x1e\xaa\x95\xa8\xf4W\xe1\xf6\xd9\xba\xff\xc2\xcf\x13\x976\x80c\xea[l\xcc\xf2\x08\x1b\x0c\xf8\x02h\xac\xf3\x8br\xa6\xb2\xbaP\x04\x99\xc9\x96\x83\xbbW$\xde\x0e\xaa$_U\xcb\x07\xda\xdf\x8f\x1e=\xe2\xf4\xe3\x16\x9c\x99\xf7\xf9\xb2\xde\x08\xba\xe9k\x1fY),\x1f\xef\x8f8^\xaci\x1b\xc3Z\xfc\xb1\xc4qI\xbd\xea\xb0\x82\nl\xc3\xb9\x84\xccH\xe8\x15\x07\xf5\xd5\xcdB\xfe\xe5C\xf1\x1d\xe1+\x0d\x070L\" \xbeK\x9e3\x17\xbd\xac\x12k`\xf5\x82Z\x86\x02Z\x9a\xe8:\x12\xdfph\xd1a2\xb2\xd3\xcc\x02M\xb46\xeds\x1c,\xd1-:\xe0\xaf\x15\xf5\x8c\xc6>~ \xd3V4\xa1\xba\xae\xc2\x90\x1f_\x8be1\x0b\x0c\x9eEV\xf2\x12+\xa0e~@\xce\x9c@.w=zmUj\x95[\xb7\x00\xb3\xb0\xd6\xd4+\"'c\x99\xd8Wl\x7f?\xce\x12\xc1S\x82\xc9h\x87\xbc\xa3QX\xe3\xc8\x98\x0fG\xa6.\xe5l\xc0\x86\xb6\x04x\xea\xca\x10\xab%\xf9'5\x115FEKl\xad\xfe\x01F.J]\n\xd9\xcd\xb4\x99wU8\x8d\xf2|\n\x0b\x90\xd1a\x9a\x82W\xc9\x99\xd6\x8e\xb9d\xb7\xe0\xb8\x85\x14\xa9\xe8\xb2\xf9\x1f\"\x7f\x9dJ\xdb\xff\x0e\xec\xc1!L\xfa\x8bLT\x82\x98\x0cSN\x8dZ7\x86|\xe4\x9c\x1f\x9f\x08\x06S\xfc\x0e#\xec9hh\xff&\x95)\\ \xcc\x11L\xbaX\xd2\xab\x08~\xbc693F\x97!vY6+\n\xf5\\\\ \x82z\xfdp\x11\xf9IP\xf6\xb1hF\x12EC\x84\xa6\xd7J\xd8x\xc3\\\xce\xb9%\xb8\xbb24\x1b\x95\xb3\xc3%\x13\x8f03\xf2H\xc4q \x19\x89\x99\xd8\x89&x\xaeM\x17k\x99\xa1U\x02\xe8\xa7$\xc8m\xa0\xd2\x04D&Y\x1e\x8a@b\x0e\xa9\xb2P\xf0]\x9a\x9f\xa7u\x18\x9a_\x1acL\xe5\xd6\x00\x82\x14n\x81 \xb5\x91\xae!\xa1\xce\x1a\xca\x1c3AUtz\xc9D\x93\x08|s\xe7\x0b5B\\.\xf3;|\xef\x8d\xe1\x10\x16\xc3\xe9\x08\xdc!\xeb3\xa1(\x9b\x08\x0b\x8cX\xe8\xfaZ\x99g'\xd4\x04\x13\x8f\x83B\xc0\x01E\x97\x85F\xde\xc7N\xf2\xeep\xf3\xaaU\xfc\x92\x0c\x01\xdf\xcf\xa2\xde\xcc<\x8c\x103v\x1fHV\x9f>\x80%\xa6\xf9\xe1\xb81\x80\xbd\x10\xe2\xe1r\x84hp\x0b5\x0bl\x98lo\x8f\x1c5\xeb@\x13J\x87\xf9H\xa8\xb8\x84/|\x80 \x05\xb7\xb1\xda\x98\x81\x90\xf0\xc7\x8b\x08\xd2\x08\x96\x11\xcc,\x90\x94\xe79\xff\xbf\x08S/\xa1\xc4\xe5?\x16,\x86{\xf0/\x98j\x9c\x8b\xba\xe3h\x0f?\xde357\xab\xda\x99\x99\x11\xf1tSr\x7f\"\xd1m\x86\x14\xfc\x00R\xf8\x17\x92\xfd\x14\xd6`\xc1\xd0\x0b\xed\x93\x82\x05\x8b\x08\xa6\x11\xcc\"8\x0d\x9b\x01\xf8\x1d\xe2\xc7yY\xed\xa3\xf2\x80\xb0\x1f\xb5B\xbdZ\xa6\xbf\xc9\xb5\x08Z!\xc5P\x80O\xb9\xa7\x1eb\x99=Q\xf3\xacslz\x97\x88\xf6\xf5\x0e\xdd*\x8d\xa4\xfa\xcc1\x06\xb7\xa2#\xe9\x92\x16\xf0%\xb5L5\x00\xa8\xbbn\x19\xa2\x81_0\x80\xafH\x90X\xed\xe7\xe0\x14\x17\xc6\x19e \xdd\xa8\xf8C\xbb\x7f\xedW_\xf8\xccv\xecj\xa8\xb6\xa7mct\xe6J\xb5\xe6Im\x10\x90:0\xf9*\xa7|\x06s\xb8\x0dw\xdb-\x8f\xd5\xb3\xfd\xf6\xb3i\xf9\x9d\xcds\x7fa\xf1\x188\x97\xb1CG\xc6\x80a\xe4\x9b\xbb\xf3XZ\xe4\xea \xe6\xc9+\xa9\x9d\x99/\xa4\x18:\xec\xaa\xe7D\xdd5\x1e\xc4`r\xa9\x03\n^\x89\xe3:\x87G\"kt\x0e\x0fa\x0e\x87p\x81\x99\x07\xf2\x08U\x0c\x18g\x8a\x85 X@\xfb,\x13\xf2w\x88ei\xd9\xc6n1\xe8'r\x9c\xfc!z6\xa4\x01\xe9\xd2\xf4\x96\x9a\xda\x0e\x7f\x13\x93\x17\x89\x9f\xa7\xc5\xc4\xed0\xa2\xe5\x01\x99\xb1\x8e< \x0b\x16\xc1\x05\xe1l2\xf3\xc8\x03\xa2 \x1f\x81=\xc6r\xc1\xb4#\xeeKsZ\xbcJ\n\x06\xc3^\x04\xbdQ;\xa9E\xad'\xcf\xa4\x16\x89\xaa\x15_%\xc5\x0f\xcb\xac\xe4\xa4\x9e\x95\xdcq\x9ar\x01\xb6d-1I3\x8e<\xcb\x93\xb3\xc4\xe6\xd9\xa6d.\xde\x13\xed\x8b2\xa1\x04n\xc1\x99!\x14\xd2\n '\x0c6\xcb\xae\xe1k\xbf@\x901\x04\x99d\xabjU\xf3\x1dE\xa00\xb1\x7f\xe5\xc4\xc6\xe0\xa1\x96\x0dvs\x975\xc0c\xe1!\xec\xc2!|\x92\x19\x0cq\x9b\xed\xca\x08SqsW\xa8\x1f\xf7\xc43f\x8c.\x03\xb0'\xd8c\xe8\xfb\xa4\x16\xd3\xfcNe\xcf9aq\x92\xba\x19*\xe5\xdeo})q\x06\n \x14\xdfb\x94\xc08^\xc4\xe3\x84\xad\x84A|\x00\x97Xo\xbb\x195 \xe4A\x14\xb12\xf1R\xd6x\x89\xf4ORrN\xd2\xea]\xfb\"n%~\xe1\x06\x89\x08\x9b\xa8BL\xcbuV^\xf6b\x14\x1c^\x9b\xb8\xdc;7\xd3\x05\x82E\xac\x14~\xad \xa4\xcf13z\x17^\xb9\xe2,k\xdbj\xb3\xf4-H \xcaJ\x1c\x9aU\x03 \xcb,\x992T\\h2\xaf\xcah\xaf^R\xba\x0d\xf1p\x91&c\xe4\xdb\xf6lQ\xbb\xb5\xc1&\xb4 \xf9&d\xa0\xd1\xcbn'8\xfe\x0d\xc9$tjZ\xfeTK\xab'\x9b\xc0\x15\xe6\xf8\xd3\xc8>!%%\x81j\xd7NE\xc1\x19)'(\x16\xcbb\xd6\x05 %\xbcU\x11\xfa\x96]\xae\xc1\xc9\xca \xe1\x1b\x16\xbai%\xe0\x9f\x90\x11\x91dQ\xd9R-;\xbe\xe6\x16\xbc\x8b2\xbb\x96\x16\x11%w*\xe8*l\xe3\x1e\x1e\xe6^%\xd9\xea`\xcb|\xf3:|R\x87\xecn\x04;{\xeeV\x97\x14wWW\xcb\xad\xf5\xb8\x16\xb0\xad\xa1a\x9f\xf0\xc8\xd9\xf1\x05\xb3#\xfbd\x99HnH7\x07\xb1\x17(\x9a@\xee\x00\xf0&\x89W\x1e\xfb'^i\xf7\xe1\x95\x90\xa3\xd9\x91o\xe2\x95vw\x1b\xe4\x19y\xec\x97g\xc4\xdc\x87\xd7\xb4\xce\xaf\x93\xd7\xe3qg\x9e\x91&\x9fx,\x08\xad\xd7\x89\xa6o\xc2v\x11\x8dz\xcb\xbe\xf5\x97\xce\xbf\xa8\xee_9\"Y\xe2\xaf\xac\xfa\xe7\x1e\xddfI\x19\xca\xedi\x17gOJ\xe4\xb3\xaf\xcd\x06\x05a0\x14\xb1\xabB.\x9e\xa8\xa7\xec\xdfW\x04\x86b\xd1\xd6\x8d)\xd0F\xd9)\x9aur\xa5\xfe\xd8 _\xbc\x02\xa1s@\xa1\x04\xc1\xa2\xd7w\xa6\xd7\xad\xec\xdc\x98\xc8_\x92d\xe2\x82\x05:\x9b\x135\xb8\x9c\x1a\x87\xa3s7\x91\xc6\xdcl\x94\x90\xc2\xb4\\I\x81\x12\xf6\x00&\xac\xad\xc1\x9a\xb1v\xe2\x89W\xcf\x8f?X2O\x9c\xa3\x05]\x83\x9cM\x7f5gV<\xc0\xb1\xa3h\xac%-\xa8f\xd2\x8cn\xd3\x7f\x9d\xb3\xe1\x8c\xa9`\x90sV\x05\x83\x9c\xb32\x18\xe4\x9c\x95\x89\"\x9f\xc8\x9c\x91\xda\xbbx\xbf|[\xbd\xa5~\xe1\x8b\xa5\xfd\xed\x89\xb2\xc5i\xb7\xd5\x17\xea\x17>\xaaR{=)\xf3|U\x0f\xcadOOj\xd9\x9f\xf0\x85f\xe2\xa0'\x0d\x89\x19_\xd2\x93\xf4<\xd1r\xf6\xc8\x87z\x0e\x9d'\xb5\xa4:\xa2\x0b=\x03\xce\x13=#N\x04\xf3\xb6\x08\xf4\x84L\xb3\xdcd}\xb4iZh\xe9\xd0\x84\xde\xcc\x0c#\xdb\xca\x8d\x81\xeb\\\x86^hL\x97Y\xbb\x88\xfaC\xe1\x13e\x0e\xad\x15\x0e\x80\x8f\\\xadK=\xe1p\xc4O2s7\x99\xf4\xbb\x10\xaaHs/LT\xbd\xb0S\xf2\x18\xf4Q\x0c]\x06,,R\x1fs\xba\x15\xd7\xc0\x8c\xb0\x85\x1d\xd4q\x86!\x8e\x06\xdfJj\xa0jSe\xe3\x80\x85\x95,\xf3\x80\xf2\x12\x06p\\\xe5\xce2\xcf\x7f+1\xabTj\x8e\x13\xbb\x0f\xa0\x10.\xa6\x05\xfaIJX\x14\xa3R\xfc\xb2\x12\xe4\x0c\xddD\x96%\xf48\x8d\x0f#X6)\x98\x01G\x1fO\x19i\x1d\xef\x9d(\x1a\xd4q\x14\x83\x8c\xbf\x00S\xa5\xf5\x13\x85\xfa\x0e\x84\xcd\xdc\x08k\xee\xc4\x0b\x07\x93:\x0e\xda,J\x88\x839&\xcb\xe4\xd8\xa5\x83\xd1\x80\x82\xf8Rf\x86\x0c\x1a\xbf6DN\xb5Y\x9c('\x9b\x8ceoRY\x91\xa1\x92/\x92~mq9M\xceD\x85\x11\xc4udi\x1fog,\x82\x15\x8b8\xd3\xe0J\xa3~b?\xad*^]\x1d\xe2F\x08KEay\xb2\x1b_\xc2\x04-,\xc8\x1dQ3Ryf\x87O-\x91\x88d\x1cv\xc3\xc6\xc4\xa0\x16\xf7\xcc\xe7\xb6\x8c\xc0jc\xad\xe9q\x96\xb5rV\x16O\x13u)b\x12K\xff\xa5C\x85`\xe2x?PQ\xee\xf8\xd3\xce\xa3\x82\xf4K\x89e\xe5\xc3]\xf4\x8c\xdd\x81\xd8\xfd \xaa\x18\xf9k\x16\xbe\x11_y\x04s\xc4\x1d\xfe\xf2\xdca\x0f\x95@\xe8\xe4\xe1\xd5\x95\xa0\xe3,\x9fvZ\xee\x87SG\xd1\x11\xd0\xd4\x12X\xedq'\x85\x03N5\xdd\x9f\xc8\x96\xd1\xb3k9$\xe6\\)`\xdcvx\x97/a\xd1t\xcb\xcfPs\xdc\xb1\xac\xc2\xa9\xd5\x7f\x01S$/\xf5\x05L\xe0\xd1#\xc8\xdc\xdf\x8d1\x00f\x9b\x1f\xeb\xea\x03\xc72\x8d\xcb\x05\x1d\xdf\xf0\x82\xe2\xb9\xf6\xc0\xea`\xa1_|\xed\x8d\x19]L\x97Z\xf4\xa5M\xe8k^\x89,\xb2\xc7E\x9d.\x85|\xf3ZJUh\xe7\xcbv;\xbe\xba\xf80\xd2\x86/a\x17\x82\x83.\xf5#\x92\x8f\xe1\x00\xd2.$\x079\xf2X\xb8\xa2\x17\x98y?\x13\x87R\xc2Q\x83\xf2S;\x0b\xedn \xe0\x9c\x92co ]l=\xf6K(qaL\xf6c;D\x96\xad\xec\\\xe7\x0e\x8d\xc2\xb2T\x93\xc3\x0e\x17\x92\x96\x9a\xaa\\\xfc\xd4T\xe5\x0co(=9\xc5_U\xd6\xa3e\xa9$\xcf\xf0\x87&5&\xe2\x86\xd4\x97\xc7\xe2W=\xb9\xd7\xd2\x0b\x14G\xcc\xa5Q;c\x18\x06}\xc6\x07$\xec\xfa\\|\xf34\x85_\xb6\xa1l\x03q,\xfc\xf1er\x1ewL\x05\x11N\xf3\x0f\x15qS\x8a\xd9\xd6\x07\xc8\x0b#^j\xbe\x14\x99kc\n\x96\xb3\x83sK\x1b\xc4u\xb8td\xcc\x19\x0b\x13\x9f\xb4\xe5\x89\x8d\xa1`\xe1\xd4$\x8d\xc5 \xa5\xf2F\x05\x92\x0d\x136\xde\xb2c\x18\xc0\xd8\x1c6h[\xd1\xa2>\xf2\xf2\xf8'\x95[\xa6\xdeUT\x83\x9d\x80<\n;-\xde\x12\x0e\xcb\x9b\xcaD\x16\xeb\xe3l\xc7 \xd8\xf0\xe6\xd8\xce\xd3\x95j6\xf4\x07(c\xf0\x88\xe6\x99J\xa4\x07\xea\x9c\x05\"?\x97dK\x91+\xe5\xa3\xe2\xe2\xa5g\x1a\xc3\xa7\xf6\x91\x94\x16\xf4\x86\xedW\xb7\xac\x9a\xf9A\xf1\xe5C!\xd0(V\x10\xb6\xe1\xdc\x86t5sD\xc9DJ\xbe\x15\xbf~ \xfc\x16\xd0\x15\x07\x0b\xab\x0eJ\x1f\x06\x11\xaa\x95\xa3'\x03\xffhg\x00\xe7N\xc4\xeb*\xf3n\xad\xe8\xe5L\xd2\xa3\x05\xbd\xa8\xa83Q\xeeX\x7f\xa2\xe2\x0f,\xe5\x8d5\xb3\xbe\x9en\x07\xf33\xd8\xd9\xf6\x0e\xf6?\xf1a\xff1\xc6\x03\xb6m\xc5\x19\x96\xa5\xcc\x8c\xd8H\x91\x9b>@\xb3\xd1.\xfe\xbd\x8d!c\xbc\x05\x83\xc7\x02\xc7\x87\xb8\xb9\xbf\x92.2\x15s\xdc[j\xd8\x86\x86_\x13\xa7R\x13\xfb+\xd1#\xd5\x91i\xac\x82N\xb7a\xccG\xfd \xc4\xe7r\x1fa\xf5\xac\xb4\xbe\xe3\x0fa\xa8\x8cG\xe9H\xee*.\xd8\x8da[e\x1f(\xf8\x9f\xe7\x86\x11\x8d\x85L\xc8\x1f\x8f#QF}\xcc\x0f\x00\xf1o\x82\xff\xba&2\x15\xd2X\x82\x11\x04\xf8\xe72|\x00\x0b\x0e\x11\xec\xb9\xe0\xbb\xc9k\n\xb5\xa1\x8b\xf1\x9a\xf1n\xd2\xe5N2\xc3 \x8a\x87\x18#!\xc8\xc6RH\xdc\x07|`x[Soat\xe3\xc4\xbc\xb2X0]|s\xeb\x16\xc6\x01\xa3h6i\xa8 :h\xc5\x1c#X\x90\x90\xa7bz\x9c\xdf(\x1e\xc0\n\x1e\xc19\xff\x87S\x82.Y\xe2\x14\x060E\n\xb22+I\xd4\xc5\xbb\x9bK\x92s:\x12\xfdV\xbf\xad \xa4\xcc\xfc\x9d\xfaP\xf4|\x8e\xb4\x0b\x060\xe9\xa0L\xa0\x18|\x05\xb2\x80/\n\xc6\xac\xcfj\x8a\x93\x1c\xd9\x98e\x88g\xdd\xa3\x01,B\x8898\x16\xb8h\xf8o!\xdc\x16*\x07\x85VSR\x0f(\xda2\x85O\x96\xee\xc8\\8\xce8\xa5B\xfcp\xae\x9c\xdc\x87\xa9S\x98\xe1\x0bs\"\x84\xeeG\x8f\xf8\x81\xeeZ\x18>\x80\x13\xa4\xae\x8b\xea\xf5\x10Ns\x12\x7f\xb2\x7fu\"\x05\xb5\xed\x01\x04bK\x85\xf05\x9c\xe0&\xd9)!#\xf7\xd3\xf0\xc4,\xdc\x9a\x177\x15X\xfdH\xaa\x11E;M\x90\x16|ev`\xcc\x97(\x15\xfb\xe1\xa1\xd8\x0f\xb5\x0f\xca\xe5,8%\x90\xef+\xea\xb2#\xa9\xca\x8e1\x8ar\xe3\x94\xa4KTkT\xc7\x89`\xbbI\x8d\x9d_V\xba\x1d\xc08\xce\xca\xbd*\xd5\xdd\xabf\xbe\xeeU\x9cL\\\xb0 \x16\xe2\x0eFj6\xa3\x1b-\xc7\xf1c\xbf|\x91\xb9\x9e/\xb2\x16A_eY[\xba#B0)\xb6\x93 F \xc6\x9a\xbe'\x15\x10~$\xf7l\x82\xeb++\xfd\xc5A!RJ\x8aU\xbf\xe9\x94\x92\xb9\x88GK7@\x8f\x04\x1e)\xa7\xc9[\xb7D\x82\xa8\xca+9A\x92\xa2 \xdf\xccrcY\xa9\xb7])\xe6\x84[\xf5.*\xe5\x94\xce\xfa\x9co\xcas\xaf\xf6\xdf\xb9\xdbw\x16z|.\xdc\xe1>\xb0\xaa\xbe#\xbf\xb5\xb1\xdf\xcd\xf9\xff\xfa\xfa\x8e\x1f\xdcP,Ka\x8e\x9b\x08gk\xf0\xb5oJ\xbe\xba\xea\xe1\x9dfT\xb1+!\xaa\x14\xe1(\x02\xe1\x8f\x03\xb4\xdb\xf7OD\xea \x91;<\x15\xf6e\x8f\xdc\xe1^sz\xeeT&\xac\x842a\xc5{|\xcd\x02Q\xdd\xe6\x88\x05\xadP?K\xeb\xbf\xbb%\x0ci\xda\x89\x14KoM\xbd\x14K>8)\x1c\xfc\xbcHI\xc1,\n\xff\xa2\xe2\xf8\xf9\xd1\xba\xb4\xa9\x12\x06\"o\x93\x19o\x85~\xa2KQ\x18K\xf28\x10\xda\xd3\xea\xe7>|\x0d\x89r\xdcD\x1b\x910V\xb6\x93\x9fZDXu\xc9\xfe\xb5\xf9H\x15\x0bJk\x96}\x14\xf6Y\xf6\x92\xac\xc8\xe4\x98|\x0e\xc2\xcd)3\x19\xeeZ\xb8\x86\xb0?M\x93E\xc0;x\x1d\x8b|:\x1anr\xa2\x9b\xd7p\xb5\x8e\xb9\xba\x933:\\\xa0\xf1L\x95}c\xa10\xfe)%\x86\xe6\xdc\x1bkj\x0bND\x96J45(/\xb5X3\xabm\xa6B\x80\x18Qi\x19\x0e\xf7F]\x8b\x9d\x0b\xd5\x9eXG9\n\x91j\xdd:\x081?\xe9L\x1f+\x12Z\xb5\x10\xcbB)\xb2\x19+\xc9\xb0\xf1=\xb9\xfc\x9e(\xca!|\xc3%\xe5\xc8\xcc\x9c\x0c\x07\xe3kt\x7f\xf7\xcc\xbc\xfc\xa6\xc3\xeb\x04\xdd\x954\xaf\x93\x93eA^\x92U\x01U)\x0bE\xf1\xdaI|m\x9d\xbe\xb7\xd0tc\x8f\x9b7\xff\xec\xafm\xfe\xd5_\xdb\xfc\xc7\x8e8\xb6\x7f0W\x8aXV\x1bA\xbd{~\x83o\xf1.\xafN\xad9CR\xe6\x08\x8b9\xaa\xe2%\x9d\x0d\x9d\x97e\x92\xe5G\xb2\xfe\x19\xfa^9\x15b\xfe\x83\x05}7\xc9n\x02\x0b#\x12\x99*\x8a\xf09\xcd\xe2\xa2\xd3\x0d\x15\xf4\x8e\x12:N\x97\x13R4\xab\xda\x97-\xaa\x176kv\x16\xdb[\x1c\xc7\xe3\x19yO\x8a%\x86Q\x12\x1aaE3\xe9Q\xf8\x91\xe2\xe3Z\xd9.W\x04\x93\x12C\xcc\xce\x14P\xa7P\xadzV\x9e\x8c\xa1\xf4:\x14\xbc\xa1]\x1da-v\xa5y\xa7n:?\xa1\xef\xe5\x07\xc1\x9b.\xa9^i7UW\xa2]\xbb\x98\xaeXx?'Vu)\xbbf\xee,_\xab.\xe4RHg\x1d[uU\xfb\x0c\xdd\\\x87\xbb\x1d\xd9\x90\x00\xc3:\xd5\xbb\xda\x87{\xa3H\xfb\xbb\xe5^\xd8\xbc\xdcfQ+\x19Q\x97-\x8b\xb9\x1f>\xf2\x95\xc2\x15\xfe\x9d\xcbLp\x00\xbf[\x11\xa9v\xd3F{?ws\xba\x9d\x148o\x12\xdd|s\xd2b\xa7\x01y3\xa4\xd3\xa7\xa82\xc6\x81bbz7\xc5\xadj\xa6d\x18&\x8c\xbe\xf6\xa2\xc4Nn\x14\xedp@N\x02\xe43\xbck\x13\xa0\xac\xc3\xd9\xa6N\x83\xf2\xa0\x9a\x91\xfaXZ\x04mD)\xeb\x98\xb2\x99(\xf9\xcc\xb9\x86\xc3o:\xeb*o@i\x94\xf8\x9atR\x19t\xb4\x93\x04F\xc9\xaf\xf6\xb7\xcf\xa5OZ&h\x83\xdbE\x05}\x13\x9c4H\xc9\xef\x1cZ\xcbHC\xb6\x18)\xd0\x92\xe3\x9bq\x01\xc0\xa2NhUE\xb4\xec\xf1\xef\xbb=\xd7\xdc\x1b\x9c\xea,\x16m\xeev\xba s\xe4\xe2\xb2\x88`\x7f\xd02\xe7\xcd \xa9S\xe0\xa3y\x06\xa0sW\x1b\x8c\x13\xf4\xbd(\xa4D\xdb\x961pW\xa8Yj\x90-W:\xc1\xb2'\xd4\x04\xc8\xbc\x8f;{\xb0cHa\x0d\x92{h\xd2X+WP\xa7\xb1\xb5\xc6--_\x8f\x8d\xeb\xe0\x0e\xa9\x81\x97\xa3\xe6\xe8\x90\xff8\x0f\xd7Q\x8c\xe4*\x82-\x1b\xec\xcc\xb1E\xae\x19\x19\xcfx{\x0f^[\xfe\x0f_\x95_\xc7\xc9\x8e\x9b1k\xa2\x9a\x15\x8f\xcf\xcbD\xbd~\xc7o\x86\xc7\xd4\x8a\xf7\xb2\xb5U\x11\xc4\xccq\xfaf\x7f-;P\x8e\xa7\xcd\x0bH[\xbb\xa1\xb4P(t\x98\x0e\xa6\xc0\xe5My\xae\xc5 \xd8\xcf\x98\xa5\xb9*/t#|\xe2p\xeb\x05%5\xe8|\x02~P%R\xdc\xde\x8e \xe3\x0d\xe5\x12\x02hn\xb6\xe7\xf9\xe4Sm\xfa\x84\x81Z<7\x1f\xe1\x03\xa6&\x1f\x918*/v\x03m\x036\xc3\xd3\xf9S\xe1\\\xdc\xc9\x8d\x80\n\xca\xa8s$\x89\xfb\x0be\x08K|\xb8\x12\x906\xb1b\xb8\xeb\xb0\x9a\xa9\x0b\xb3Y\x1a\x13\x83\xeaW\x1d_\xc6h*\xd4r\x02}\xc6\x8a\x882\xb7:\"\xcf\xd8\xcap\x82U\xf01\xf3;~\xb6\x81'\xbe\xc4\x8fX\"N\xf9\x0c7r#\xe2B\xc4\x1e\xdcF\x1f\x1c\x0cDD\x9f\x1c\xf9\xfe[Y\xc1,\xeb\xcc\x9b\xc4\xd1\xe6\x9d\xa8cf\xb7'|@\ni \xc8\xe1\x04\x0c\x12X\xaf!\xe6\x7f\xc5e\x8f\x1c&}\x96 \x15\xbav\x10\x07a\x05)\xf3\xa0\xa4\x93w\x0c;&\xcc,`0\x10\x9e~\x01\xdfl\x85tD\xda\x85\x03c\xa5\x89s\xe9\xd5\xe8>vR\xc5bV\xe1\x06K\xac\xac\xa5\x8c\xa1\xcb\xca\x80\x18\xc1\x16\x9eR\x992\x8b-\xcb4>A\xda<+<\x8ea\x99\xe1\x86\xc9p\xd3*)\x10\x93E\x15\x15\x93\xb6\xcd\xe9$\xa6\x9b1\xf8\xb1\x85\x11\xa4_\xa6\xa7\xca\x9c\xe09\x96!\xda\xa4\xc2\xbcf!F\x11\xb4\xdd\xe5\xaf\xf45\xbe\x9e\xb2N\xda\xf4x\xff^K\xe4\xd6\xd3)\xb4\xd1Zm\xab\xf8\xec\xeb\xe3\xb1\xbc7|\x96\xaa\xb5z\x10B\xd6yZrxmo\x17\xf0HC\xf9\xae\x93\xd8+\xfa\x1d\xba\"\xe0\xf9u\xe5V\x13\x10T\x13tM\xa1\xe4\xaa1 \x96\xd2\xe2\x11\x0c\xb0g\x91\xa8\xa3\x13\xc9'\xcfU\x92\\\xf4\xc6\xd05\x95\x9b(\x08\xeaXk;0\x7f\xf2=0\xddd\xfb\x86x`;\x19K|\xf6\x08 \x1c.\xef\xe72\xc8\xc2E\xa7\xba\x11\xdd\xc1i\xa7\x9d\xa4J\xa4\xe4\xc6\xd3\xb2\xc9u\xa7aE\xb5\x8a\x16\xdb]\xb8\xd9\xee0\x02C\xa0\xe5\xcd\xf0\xdc7\xb0,Y\xee\xb3.\x9b0\xf7_~\xdel@\xb0p\x93\xe3\"\x19\x12\xb5\xabk\x92uP\xa4De\x1d\\JZ\x11\xd6Y\x7f\xa4\x0cY\x832d\x918\xc2\xb2.\xba\xd0-7L+\xabG\x07\x8f\xcf1\x04+\xf9\x8d\xf1/\xde\x81\xe0\xf2\x8a\x1a\xde\x8ee<\x93\x83\xbd\x87\x8bY\x92\x12\xb0:\xe5\x81\xae\x0e@\xdb\x95>\xf3\x04\xfb\xd8\x88\xe6\xf9 ?\xde\x88\xe1\xe3\x8b-\x01\x0e\xfcE:e\xa9s$\x07P\xce\x86\x04E\x07\xed9WUC\xac[\x99_\x85\x89\xb2e\x1d\n\x04\xd0\xb8\xe7-\xf4\xbcJ\xe1!\x16\xac\xb9\x05q\x80U\xfb\x90(\xa7\x18\xa8\x0d\x07*M7R\x04*\xcb\x01$()\x86\xa5$\xb1\xb5\x8b\xc59\xedxeW\x95\xf3\x85\xe5_\xb7K(\xfd\x15\xa6\x8c\xdc.\xae\x81\\\xc5aG\xa1\xf3\x1b\xa3R\x92\xadJ\xbc\x94\x14\xc4\xcbd\x02\xea\xdc\x92\xa9\xe672\xcf\xa6\xbe\xf4\x06d/\xb9\xa4\x00\xa5\xfb\xf5po\xc4%T\xd4\x10\x06K\x15O\x81\xd8\xc5\x8f\xd18H\xab#\x93\x96\x84#\x8f\xc4\xf9\x99v\x93E~-\x85sn\"K\xa3\xa5\xad\xe5u\xb6\xa0\\\xb4\x90\xac\xa3g\x97\x1di\xbb(`\xd7\xaa\xdd C\xbb\x01E\xf533\xfd\xec\xa4\xa8\xc2#\x13]@M\xf2\x8b\"\xb8Kk\xda\xe8\xccN-\xc5\x9eT\xda\x8d\x9a\x83 \xeb(\xe2$\xe1>\xccq\xe4\x99(\xbdx\x08\xe2C\xe9^\xc6\xac\xee\x83e\x96i\xeb\x11\x91\xf4\x8b,g~\xd2\xacb\xa2\x022\xbc3\x8a\x80\x0e\xef\x8c\x10\xcb\xc9p\x7f\x04;@\x87\xfb\x86\x0c\xc1aU\x90\xbc\x91\x95\xc1j\xb1I\x86l\xa4v\xd2\x00\xf6\xdbm6+\xf4\xb9\x1a\xe2\xa0\x1f\xee\x99\x06&8\xd7_e\x8d\x0f\xe1\xd6\xfdR\xfc\xfa!h(\x04m8\xf5\xc2\x89S\xc2\xdfE\xc3+\x0f\xbb\xd1\x17\xe2 \x1fJ\x89\x1bV\xbc\xc8\xc9d9\xde@\x87![\xff\x15=+\x05;G\xd1\x87S(*,\xf9\xf2\xdd\xb6\x0c\xd4\x8a\xe5&\xdfWG@\xca&\x03\xaf\x0f:\x12\x89\xf9\xcc\xc3\xf5\xf4|\xff\xd5\x8b'\x13\xf5s\xec[N%\x8f\xbfu\x0b\xa8\xa6\xbf\xad\x85M\xae\xd7U4\x82\xf8\x05[\x03\xde\xedz-b[\xbd\xc6\xfb\xb2\x8a\xbf\xf8\x02\xa1Y\xea:\xf91OH\x90\xfbz8\x97k\xd6\xf2\xb3\x04\x81\x84\xf3\x84\x06u\xcb\x14\x0c\xfc\xf6u3\x0b\x9f\xf0\xf3\xac\xce\xc4\xdfE\xbcv&Bx\xb6T\xfd\x0bM\xa2\x81Z\xfa=i\xa9\x10\xe4\x95\xd9\x92\xf0\x81\x06\x94\xf6|\xba\x05Y\xe2\xc1\xb9\xe5\x9e\xc0U\x97\x022_\x1f~2\xc1O\x01\x86\xb0W>\x97\x1c\xdf\x1d\x07\xfe\xf5\xf5m\x1e\xec\xff\x06\x9c!\xaef\xa7\x00\x86\xba \\\xce\xe4\x9a\x80\x92X\xe0\x02\x88H@\xd2/\xb29\xb9N\x07\x1c\xbd\x1c\xcd\xcb\xfaR\xffFFJ\xe5\xc7\x8c\x11\xbb\xa5\xb3\xaf,Gq](\xe2\x00]\xb3\xbcy\x81\xf8\x87\xce\\\x08\xc2\xc4\"jr\x90\xfe8\xa3\x05\xcb\x97c\xd4,\xfb\xd1\xf7\xaf,\x8e\xdeI\x99\xcdFD a\x89\x116\xcb\xb3\x0bD\xf1\x0f\xab\x059\xca\xf3,\x0fzG\x97\x0b2fd\x02\xc3\x97\x11\xfc4\x02\xb6\\\xa4\xe4\x00z\xb0\xdd\xcaHk\x19\xc3?\xdd\xd1U\xaf\x88\x8cG\x08#x\xea\x1b`\xf5\x8b\xbb\xcd\xa5\x00[^\xb1A\x19\x17x\xbd\x9a\xfe\x87\xbb\xe9z\xc4V {\xfaUc\xb88\xb7\x15j\x81\\^\xbd\x12\x8f\xea\x1c\x9c\x14\xd7\\zT\xee\xf6\xd6\x13\xb41\xce\x9aY\xdd\xf1-\xe9\xa4/\xf3\xac\xbf\xd0\xb3\xcbW\xdf\x0bm\x13k\xa7.\xb5\x8c\x9eu\xe6\xba'\xf0Hf\xa3<\x10\xc5>\xe0\x10v\xf8\x0f\xbfs\x9fZ\xb6\xf2\xb9\xf4E\xfb\xc9x\xe0\xa3\x14m\xe7\xa5\xf9\xd3\x9f=0\x1f\x8f\xc0\xd3\x94@\x96\x03\x06E\xef\xa4\xc9\xa7r\x0f\x98I\xbc\x18\x14\x1f\xb5\x81@X\x97\xd9\x0b\x16yG\xe2d\xc1A\x94$\xd0\x99SLX\xb0\x13Z\xb0\x98\x8eI6\xd5*\x9e;\x9c\"\x10r\x88\x1e\xf5Ok\xc9>\xf3\xc0\xa6z.\x9bpr\xe8\xfc\xa2\xa8\x96\xea\xd6\xb2\xc6U(\xe5'\xb2*\xac~\x89\xea\xda\xf2\xe3\xca\xf4\x8b\xe5+\x8f\xb7\xf8\xc5\x8c\x11\xae^\x9d\xa8K\xceeB\xa6 %\xef\xf2lAr\xb6\x92\x9c\xaf\x7f+\xfc:#L\x13-7\x19\x83\xbat\x12$\xc2&7j\xe2\xaa\xdb F\xbf\x8a\xdax;\x8fo\xd3uF\x1a\x89\x98#\xe8=\x8d)\xcd\x18o\x1d2\n1\x85\xa4L\xcf\x9b\x93q\x96O\xfa\xbd\x92d\x8ah;\x07\x8bi\xba\xba3\xb7\xa9\xcb\x12\x8d\xd0\xbc\xae\xfa\xa7 \x9d\x04U\xd4]\xf7gW0\x8e\xd9x\x06\x086\xf7\x80\xae\x02\xe5\x9a\xae\x8e\x88X\xea'\x90\xeb\xa7\xf1\x9c\x94\xa1\xc3\x9fD(^\x8c?&d\x1a/S\xf6\x13\xe7\x960\xe7\x8c\xb5\x1b\xfb\x00\xc4\xea\x88\x80\xc3\x8f\xa4\xa9\x98P\x97\x05q2\x94)\xcaS\xab\x15C\x9d\x99t]\xa5\xe4\xa7\xb1P\"\xda\xb1\xa9h\xd3\x7f\xb1\xe0\x1d\x8b\xe0#gL\xde\xdd\\\x95\xaew7Y\xa5\xebm>!9\x99\xbc\x8e\x17\xf0g/\x82\xdeU\xbbV\xd7\xbbk\xd4\xea:\xd7k\x04\xf0\x95\x125\xfc\xed\x90\xadyh\xc9b:\x18F\x8a\x1f\xd2PT\xa6m\xd5\xd0z\xf7o\xaenS\x96\x9d\xe1S\x92I\x95\"}\xb4\xb5{\xa1\xcc\x88\xe0\x1c\xf5f\x95\xbf~g\xae\xdaG\xef\xae_\xfbHo\xb8]\x06\xb5\xd6p-\xf5\xb8\x0f\xb0+\x90U\x9f\x06\xa8\xb8\xd1 \xa7?rv\xbf\x91nDGD+\xf2i\xa30\xd8\xd2\xba\xdc\xe8E\xbe\xb9\x80\xa1\x0e\x90\xa1\x05\xd6\x12\xde\xe57/\xbf\x12\x17\xed\xa1O\xf3l~DY\xbe\x12\xbaRM\xf9\xd3\x8d+\x9b\x15J\x10\xc2\xdf\xa0U%\xc1#\xbf6\xab\x11\x85Z\xb7V3BEH\xe4\x12\xd5?\xb2.+\xdf\xd5\xaf\x99t\xe5$\xfe\xd5\x16\xd4\xd1\xc2\xf4\x9d-\xf2^\x18$\x1a\x84dRh\x84t\x00\x1fX\x1d\xbe\xc3\x99\xaanP\x83zY\xe7\xc0\xb0o#`\xc1\x1b\x16\xc1\xafa\x04o\xaeA\x81\xdb\x82\x1fR`\x13&\xd4\x9ao\xc4\x0dt\x96K\x13m\x8b\xa2i\xce\x86Q?rL>oD3\xb0q\xf5e\x9b.\xbc\xa9\xc3\xcd+T\xe8\\\xab\xc8l\xc67\x0e\xdf\xef\x159\xdc2%\x1b\xac\x8dQ%\x1b@\xa3\x86\xf74A\xd7\x1d\x89y*+\x87=8\xfc*l\x05\x896\x80 0\xb7\x13;t\xb2h\x06\x02\xa7\x02\x9fk\x87\xcd\x06`\xc8\xaf\x03\x06\xda\x00\xc3<^\x18\xf0\x15$\x18Z\x85_\xde|\xd9\x19\x119B\x94\xda(\xa99\xe0\xd6&\xaf\x99\xf3<\x1c\x97I\xc0l1KW\x9c@\xa9|\xcb\xff\x14\xeb\x10\x8a,=e\x0fV\xd5y\xd9|\x16\xc9|\xcd\x14\x0eD1 SWa'Q\xd8\xechB\x1b\x9f\x0e\x96\xd0\x01Au<\x99\x8f\x0bZ\xd7=\xb5\x0c\x1aV\xd4m\x82\xcd\xba\xa8\x9e\nye\x19\xa2N\xef\x8bRL@\x83\x8aP\x1a\xa2\xa2Y\xac\x02\x16\xc4G\xbf\xb0\xd2\xbcbZ\x0e\xd7RT' \x0b\xde\xb3\x08^\x86\x11\xbc\xd7\x97\xca\x14\x08\xe8I\xc4\xcbh\xc06%\x7f\xffe\x9b\xab\x93\xd2\xd8\xd7\xc7\xb8\xe9\xbcy3\xdca\x08r_\x96\xcc8S?\xbc\xff\"\x84\xbd\x11\x0ce\xbe\x18\xca\x14\x862\x85\xa1\xa2\xda\x96\xc2K\xaf\x9aa,x\xc6\"\xf8!\x8c\xe0\xd9\x97s\x10\x0e\xe4{v#\xc8\xf7Wb\x18\xf3\xc7/\xe3dn\x0c\xbf\xfe\xc3HT\xe1\xcf\x86\x88\xf4Jr\xba\xaft\xe8\x10)\xcct\xf1\x10\xedu\x94,D\xb3\x9fW\xff\x95\x88\x84\xc7\xa5\xed!\xbf\xbeb\x81\xb5\x88\x9e\xe6d\x11;\xdf*\xd1\x15K\xf4\xa30 \xaa\x12\xa3\xd8Z\xdd\xdc\x157-R,\xbf\xdaz9#\xa2\x1b\x81\xfd_\x83\xe8\x1e\x91\xa1~{\x01\xca\xf0\xca\x9a[\xb8\xa3\xa2\x86Z/\xd6\xe5e\x89\xde\x95\xae\x11\x82@\x0eS\x18\xa0~)\xde%\xee|S\x0e\x1e\xf7r\x06\x87\"\x91\x8b@\x89\x1cQ\xa2\xba\xb9'n\xee\xb5\xf3\xe5\xeb\x97\xc5e\xd1\x83&\xd4\xce\xe1z\x1a\x827\xf6G\xcf\xec\x8f^\xd9\x1fa\x8e\xaa \xa7\x11\x9c\x10.ZP\xed\xcd/T\xb0.\xa9\xe4A\xb7\xa1g\xd5\xb0\xd6:\xdc\xf8\xf8\xaci\xd4\xf9\xe7o/he\xf2qw\xe6\xa9L\x10v\xd0YY\x1d\xdd\x85\xe6\xf5\xcd[\x1b\xdc\x90\x18\xe2\x94ks\xe1\xe2\xeba\xf5\xb7\xd2Y\x18b6\x9b3\xf1R\xfeV\x92\x89Qe%\xfa\xbfuK\x1b@M\x9fk\x9eli\x1f\xd7l\x03v\x9dT\xff\x84\xcc\x17l\x85br\xf9c\x001\x95\xa2\xf6/\xa4\x9d\xf2\xb41UO\x8dq{\xd1*+\xb5\xb0P\xffM\xb3j-\xe9'\x9a]P\xf8DV\xd0\xfb\x1bl\x03\x81m\xf8[\x0f2\n\xfc\x97\xc2c\x8b\x91\xbc\x06\xbd\xad\n|\xb2\x98~Y\x8b\xc3\x8c\x14\x1ez\xc3\x9a1\xa1\xbeD\x85\xd2ku\xe0V\xad,\x846\x9a\n\xe7\xe0\xa0Z\x87v\x1d\xe6\xda\x1ax*\xd7\xed\x1b\xc7OCZ\x9f\xa9\xccS\xea\xca\xac\xd8\x9a)\xeb\x9ci\xfb\xe8\xae\xcd\xf4\x86\xb4\xfd\xce>\xae\xcf\x1eX!\x91\x07\x06\\k:jZ:\x00])e1Y_uk\xd8\x8dS\xbc9v\xf3\xdf8C\xe25\xc1\xff\x84 \xa1\xbeA62\x0dT\x1b@\x06\x0d\xf8\x1a\x04\x1ap\xa8w\x82\xcc\x16z\xd7j\xc0\xb1\x15\xa8\x8c\xc5\nuxO\xd7\xed\xd3\xf2\xd7\x19a\xefT\xf3o\xa7\x9c\xb4\xd8\x11E\x1b\x7f\xde\xcc\xe4\xed\x17(\xb2\xec(\x99--\xfe\xebu\xdd\xcb\xb0\xaf\xee\xf6\xde\xa3\x93D\xcf\xab\xb3\xc2\xdd\x993'\xfd9E\xff\xde\x94\xcacgk\x1c\x94\xc9\xe9\xf9\xb3k'\xa7O\xae\x9d\x9c\xde\xc5\xc1\x97\x92t<\x99\xd8\x8b\x11\x18\xb6\xa6\x17 S7 \xb7\x82-\x04\xe1\x16\x19N\x9b9\xa4\xeb,zF+[UFK\x0bUy\x1b\xeb`\x97\x0f\xda\xe5\xb73*Jdk\xd5\xb2\xab\x9b?'\x18\xd4\xa2\x1e\xf0\x9f\xd5\xc3V\xf9m\xf5\xe0\x19!\x8bF\xf1\xed\xfa\xc3F\xb3\xeaV\xfd%c\x01\xef\x8c\x1aJ\x8dg\xd4XA\xbc\xbc\xdd\xae \x9eQ\x8f:\xe0\x19\xed\xdb\xeb\x80\xe3CW\x1dp\x16\x144\x82#\x8ey\x05\xbd1\x07\x93\x82\xa2-Yf\xd0\xf6\x96D\x02Nq\xfb\x9f\x88\xb0?\x9bZ\xbd1\xa9\xaawL\x98U\x9a*\xbeH\x9a\xaa\xb8Vg\xbb\xf1d\xe2\xdb\xee\xa4\xc0\x9aq\xac\xac\xbcC\xb7\xb7CH\x026\xa4\xa3\xb0}\xec85\x8a\xe5\xb1\xcd\x8f\x1d\x8b\xfa\xc6x\xec(\x07\xa9Z$\xc1p\xb7yx4\x96>\xa1\x8c\xe4\x05\x19\xb3\x9b]\xfe*\xa3\x12\xf3\xab\xbd.0\xc4/\xbeC6\x94\x98NeS\x18\x9f\x17\xcb~-,0\xf0\x14N\xbfg\xd6'\xe7$_y\xb4\xac\xae\x12\x1dJ#\x8cE\xf5\x0b\x02 \x90\xcd\x93\xa4\xc5\xa6$\xeefZ\x1aHR,OY\x1e\xff\x7f8\xf2o\xc2\x91\xeb\xc6ry\xa2\x08&\xb2\xbai\x14Q<\xa4\xcf1\x85`\xc43G\xab\xe5\x10\x81\x93\xebi\xf4$9H7I=/K\xaf6\xd1q\xafCM\xd3\x1e\\[\xe7T\xdf!Y\xce|y\x819\x0d~.\xbdw:Nf\xde\xee\x93\x95\x8f^\xc2\xd08\xebn\xff/\xd2 \x15\x7f\xadz\x85iZ\x85\xb61\xcf#3t\x90c\xcc\xb9\xafa\xd88\x1d?\x85Xk\xc4\x9b\xea\x80L\xf9\xb0;\xd5[\xc5\x7f^\xfb\xb3\x99\xc2G\xf65\x8f?\x91\xe0\x0bu>8\xfb\xa48FM|J\xdb*\xa01\x8d`\xcaq\xac\xf7\xf7\xbf\x9f\x9c<\x7f\xfd\xfa\xe3\x87\xc7O^\x1d\x9d\x1c\x1f}89\xf9\xfb\xdf{mG\x90\x05\x7f\xbb\xf0P\x1aM:\x11\x81X\xaa5\xb1f\xb5&\x05\x05U([j\x88\xb1\x1c\x9c<4\xa5w<\xae\xf0|\xc1V\"|\xba\x04\xa3\x9f\"b\xd6\xbd\x17\xebJ\xae\x85#\x08\xa3\xcaf\xdf(_G\xd5\xb4\x88\xc8\xea]\xad)\xf3M\xc2}\xee\xa4Kc\xcc;\x10\x8c\xf9xg40\x99j,\xed\xce\xbf@\xa5u!TZg\xb4\xd2d]\xfc\xbfM\x93u\xe6\x86_\xa9\xee3\x14X\xd4\x7f-\xe8pJ\x95\x03\xddBSj-*\xa5\xd6\xa2\xae`R?\xeb\x0f$k\xb0\xa0\xba\xcej\xe1\xa3\xf0Y\xb8\x14>\x8b.\x85\xcf\x82\xaa}\x08\x038\xa7\xf2\x06\xdf\x8a\x88\x92\x11\xb0`N9q\n#\x98\xdf\x9cFh\xfe\x97h\x84\xe67\xa9\x11\x92\xfe\xf7.\xc5\xd0\x9cV~\xfa\x82r\x9f\x19(\xf7\x8aFp\xca\xf7\xc9\xdc\x83\x16\x9flJ\xd8N\xffC\x84\xed\xc2 \xcd\x95 l+>\xde\x13\x1a<\xf7/\xbby\xf4\x05\x84\xed\xad l\x97\x1aa\xe3\xb7\xfaKZ\xcc\x92){\x9c\xa6\xbe\xd1\xfc\x97\xde\x8a\xee\xa7nE\xf7)\xad\x1clO\xf5\xbdvA\xe5\x0d\xb9\xd7Np\xaf\x1d\xd1\x08.8\xb5<\xba\xb9\xbdvt\x93\xbb\xe2\x98\xc5\xe3O0\xe4\x1bb\xd4\xde\x10G\xd7p\x05\xa9\x1b\xe3g$6\x14\xaaG\xbd\x15\xd1\x92r\x93\xf0\x81H\xbcNvv\x1e\x84\xf8\xbd\xf0\xaa\xb2\xef\x058\x04\x99\x84\xc6\x14\xf7W\x1b\xf9\x82\x90O\x1b\x01\x88\x8f\xba2\x1c\xf2_\x86\xec\x1d\xad^\x96\xc5\xac\xab\x97J\xdbP\xae\xaf\x9f\xd6\xa1\xd4\xf4\x95\xce$\xb8\xfb\xb7[\xedD\x1a\x03\xcc\x07\x1e!0\x9bo\xc1\x0e\xecq\x88?\x12j\xc3\x9d\x9d\x10?\xb3\xf1\x05\x98Y\xa5lcH-\xb9\x0f\xf9\x825\xd7\x82_\x86D\xcbu|\xb4\x04S\x96\x9c6\xae\x87\x16o\xd5\xac\x18*\xef\xd6\xcb\x9f3\xe9\xda\xff\x98\x9a\xc5\x93\xd6\xe2=\xe6\xa4\xc8C0\x91\xead\xb4u\x05$\x0c\x05G\xe4^\xbf*\x07I\x87\xd4\x82\x0c\xb8\x19\xba\x1d\x9b\xaa\xe4\xed\xcb\xf0\xa0\x0d84&\xb2\xe4\xd9P\x00*4pT\xa7\x10\xeb\xdfN\x9d\x0f-2\x8aw\xca\xc0X\xdb\xfa\xb3\xc6\xfa\xd3\xeb\xae\x7f\xdb\xfd\xba\xb5\xfeYge*\x1de\x8b4\x19\x93`\xcf\xdd\xa6<\xa66i\x97\xa3\xa1\xa7:\xca\xd4\x95\x0f\x067\xbb3\x9d\xa2\x8d\xd67\x9fF\xb6\xb8\xce,6\xb12}i|\xb6D\xa9\x06\x06m\x82W\x9c\x15q\x83\x8d#\x89\xcf\x91\xc9\x89\xca[\xe9\xe8Q\x0e\xd6\xc7\x15\x8cbq\x11\xa2\x7fe\xd6p\x7f\x08jM\xd7-TeG\x17\xa49\xfa*M\x8f5\xc6\xaf<\x99\xf2\xda\xc9\x84e\xce\xb2:\xc9\xe2\x07\xcd\x83\x10\xeff\xee\xd3\xdd\xbd\x88yc\x11\xb3k\xad\xdfcj\xaa0\xddX\xc3\xcd\xd4V\xa5.\xa9\xad\xb9\xaa\x10\x94\xe3\xeacZMH\x9f\xcc\x86a\xc8\xfa\xcc\xf6,z\xa8\xa3kkAe\xdc\x81\xbe$\xd5\xd1\xa2y~\xb9\x90\x82\x8a=\x977\x10!\xaf%\x13\xccU0\x08\xd5\x92 \xe27y\x07\x13\xe85Y?\x1d\xa9\xd7l3\xb3\x0e\xb1\x9a\xa9\xf1\xec\xcb\xfdNn\xcf\xc8\x84N\xaf\x7f\xc5O\xe4]\xf1\x03\xb2\xdf\n\xd0\x91\xf0\xec\x17\xcb`Q\xd1\x98g(Z\xead\x1e\xba\xb2\xf393\xf3\xf9D\x05\x1c\xa1\xd6\x15\x85\x9a\x01\\\x1a\xa4\xf7c\x1a\xc1S\x93\xde\xf5\xc3\xe3\xa7/-\x9a\xd7O\xfc\xfd#\x0fi\xffq\xe9\xae\xd7\x91?\xb4.\xf3\x7frf\x94\xa9\x98\xe1L\xe7\x84\xb3\xa6\xa3^V\xd1\xbf\\\xfc\xaaS\x07\xbf\x94\x81o\x9d\xa7\xee\xb1\xd0\x03\x1cs\x80<\xa6A\xcb=\xc5\xd2\xe8\xbbnq\xb1D{\xabYR;\x9c\x86\xa8\xa3cCjH\x84k\x85\xa4\x9e\xbe\x8bU\xbc1\x0d#\xa8\\&\xb5\xd0\x88\xe3\xd5\xfc4K\xb1B\x82\xeby\xb3\xadf}|\xfd\xd7':|Z\xaa\x17?\xf9h\x03?\xb9\xb4\x81\x9f\xba\xb4\x81\xbc\x0b\xdd\xb6\xf6D\xb7\xb5E@\xfb\xcf+\x02\xf91\xe2\xcbDM\xe9\xbfdJl\x8f4_\xafH\xe0bE@.8\x91\xb9qE\xa6\xed\xeah_\xaf\x8d6zh0\x06U\xbe\x07\x8b\xe9\xcdi\xdaV\xd8c\xa61\xad\x15\xc4\xbbm\x9a\xc0\xb2\xe7tB.\xc9\xe4\x98|\xf6\x00\x8cF\xe2\xdf\xcb\xa8s\xbf^^\x1c\xfb\xb7\x8e\xc01\xa6\xc2\xf6\xd1\xccc\x82\xdf\x9e\xfa\xa4\x07\x9c\x85Y-H6\xc5\xfc\xda/\x8eQ\xe7\xc8\xff\x10\x16\x1e\x0b\xf8P\xbb\xc4\xdf\xf1\x9d\xde\xdb7\xff-\x13|\xfb\xa6\x9c\xe2\xdb779\xc9\x97du\x0dAC\xf8\x13\xd8\xfa\xa4\x93F\x8f\x1eU\xa3\x10\x98\xfcS\xcc\x89\x1aX\xcc\x1b\xa0\xebI\x0f1\xa1\x89\xb9<\xb8aXB+\xb4\x19,j\xc8\x125W\x9c\xa1\x84\x8ay\xbbYh.Sc\x18\x08\xe7@|6o\xa3oRZR\x04=\x84C\xe8aE\x028\x80^\xd4\xb3c2\x83\x01\xf4\x0czTu} \xa6\xbbp\x9c\xcaR\xfd[{\xe8\xb2\xba-,%\xfc_t3\xdaR%\xa4\xb4I\xe1\x9a\x96^4x\xe6\xf4\xda\x9c%\xc8\x1d\xe0\xc5\xb7}\"\xab/ ?\xcf\xbdVt^\x93C=\xd0\xaa\xdcb\xf5\x94\x9d^\x9d\x89\xb3t\xc3\x0d\x16A\xe6\\\xe0\x06\xae\xb5\x1cT\x1e\xc2>\xe6G\xe4\x98\x02\x07b\xc3\xb6\xb6\x83\xae\x06\xc0\x9a\xb5\x0e\xe4\xc8\xe0\x10\x82LR9l.\x94\xed\x92\xb2\xf4\xad\xa8\x18\x988\x0b2\xe7\xfe {\x9f\x9c\xcd\xd8\x86pS\x84Ig\x84*C\x94\x9b>I\xaeG\x9a\xdes\xab\xdd\x1dl\x83\xc6^\xfcq\xb7D*=\x19\xaeWWh\\\xbe&\x06?\xb9\xde!\xc1\xb9\x91\xcdz\x14yYD\xac\xdc\x1b\x8a\xa5\xc2LY0L]\xe5^5&\x9a3\xb3\x06\xe4\x80\xb9\x1f\x94\xba\xbf\x80\xd6\xfc\xee\xd5\xcb\xe9\x92\xbd\x8a7Q\x0f\x88}\x8d\x1e2\xbb\x11\xec\xecy\xf5\x92\x14G\xf3\x05\xf3\xb11\xc8^4\"\xae\xcb\xe9M\xc9\xfd@.c\x9d\x19\xf5\xe0EmFH\xaf\xd9\x8c\xb3%m\xee\xfc\x8e\xf9<\x0dH\xa5J\x12\xdb^\n\xb0\xe2\xe3\x0d\xf4*\xd8\xfb\x13_\xf6T\xf6\xefK\xa5@\xa3T\x1fI\x10V\x06)W\x06<%\xe5\x98\x88w\x17\xeb\x8a\xdf\xcb\xbc AU\xa7\\T\x12\xe7\xbbR\xcfy\xec%\xb5i2\x97\x99\xddU\x97\xa3\x94\n\x9e\x05\xba\xb9\xcdR!\xefJ?o}V\x8f|^\xc6\xe9&\xc2\xd69)\xc9\x86W\xfb2k\xa6\xc7V\xd3\x1dN\xcdk\x8b\x81Z\xfd\x13L\x97W+\xceDHu\xdf\xcd)\xd6\xab\xb7\xfeN\xc3\x86\xaa\xd5\xcd'\xd6\xaa\x1at\xf9\x8e5>&\xc6<\xa0\xea\xba\xf2\xe4\xf7\xc4.}\x93m\xb8\xdf\xa5\xf8\x81;|\xa3\xd3\xa5\x14Y6\xe7,,\xd5\";xn\xea']V\xc2%m\n\x97\xbc\xefa\x16\x01\x1d9\x05L/\xd6\x8aO\xff%\xf1%n5o\xf4M\x84=T\x8dQc\xa9]\xf3\x98\x1agd\xc7\x8a\xe8 7\xb3z8\xda\xb2\x99MF\xb1!rx\x0e\xa5\x02\xdc\xa6\xe3\xf1_-\xcf\xa1\xbc$r\x05\xfdF\x91o\xcc\xbc \xe8\x1f\xfb5\x9f\xc6\xec\xf5\xb5\xa51\xdf5\x02m\x13\xffb\xae\x93\xa4\xae&m\xabk\xea\xbb6\xb2\xd6Bn8k]\xc7\xa1\xae\x895o\xf1\x8d%O\xd9\xe2\x06ga \xd9\x1f5)\xc1WD\xd0\x8f\x12\x7f\x8c\xe1\xa7\xdd\xab\x0d\xcc\x90\xf5\x82y\x1e\xd8R\xa1\xa4.\xef\xfa\x14\x1f\x9fa]m\x9b>5\xaa\xfcd}\x07\xfe\x9cz\x0e\xddTnZ\xf8\x03c\xa1MUa:\xabU\x98\xee\xcc\xb6\x9c`\\\x90GV\xe4\x00}\x1a\xb1Z:\xc6-\xa9\xa4\xc4I\x04+\xceJ\xafB\x14\x13V\x95\xbf\xa7\x19D\xaee\xf1:\xad\xce\xf2l\xb9\xf8w\xb0\xe2~6\xbc@f\xbb{\xc7P\xd5\xc5\xf9wO\x06\xde\xc8\xb9w\xe9\\\xf8\x95\xb59w\xfe\x99\xe0\xdc\xbb\xf7\xb5~I\xf0\x04\"\x04r\xbd\x86\xe1(\xc4\x18\x06\xccY>\x8c#HFp\x00\x89\x87q\xd0A\xc7\xec0P(\xe8G\x81\xb3:\xe5\xed4?U\x14\x8cD\x90\x04&\x12\xa9.\xcb\xf87\x165f\xf1&r\x06\xd2!\x99py%b\x08V\x9e\xbd<\xdf\x84\x86\xab~\x9e\xd3M{J\x8a\xe3\xe5\xa9g\x81\xcfR\x06\x1c\xd8|\xc2\xcaJ)\xc2\xea,y\xf4J'\xe4\xb7\xb4\xe5y\\&\xc6\xd9 \x9f\x96y\x8a\x0b\xce\x0bm2\xc9\xc05K 3m\x96ay\xd3\xffT\xfbDVo\xa7\x1b\x0c\xa9<\xd483\xb7\x11$o\xc0H(\"\xce\xfd\x8f\xf8\x9aV\x86\xef\xea\xe7-)\xd5\xa7\xdbts5Z\xab\xe4W\x1f\xf9Y\xff\xfe^^g],\xbc7\xae\xb11\x97U\xbb\xefy|\xb9A\xaf/\xd8F*\x8cy|\xb9\xe9\x99\xfa\xa2\x96\x8f\xc8\xab\x13?\xa3Yk\x06p\x08\xef\xa9pa\xf9\xe8'(\xcd\x13z\xfd\xe9\x88\xee\x98\xe8\xcewn9\xd9\x18\x13\x8d!\x8f`n\xbe\xf8\x94,6\x80\x9d\xd6\xfe\xeb\x98\xcd\xfa\xf3\xf82\xb0T$\xb6t\xd6\x14\xbe}\xa5\x04\xcb\x1e\xe3M\x06D\xbb\xe3=\x90\x9fgI\xba\xa1\x99\xa1\x1c\xccO\xd74l|J\x16\x1f)K\xd2\xcd\xba\x15@WC\xdeL\x05%\x12\x82m\xd6_\xdb\xcaa\xc8\x0c\x06\xe6\xfeX\xfc\x89l\xb0\xbc\xacf\x80\xb8\x06J\xf1\xfen\x18\xa5x\x93\x9b\xa3\x14\xff\xeaKP\xea:\x92\xc4?\xbc\xb8[\xad\x84\xd1G\x8aj\xdeZ\xf26\x8c\xac\xec`x\x15;\xcd\xac\xdaeuq\x91.\xab\xc7\xe6i\x05Zja \xd8\xb1\xbb\xb5sY\xcf\xbf\xa3\xec\x7f\xc9\xb8\x19\x04\x1f\x82*\x91e\xd7\x0c\xb5f*\xe9\xa7\xfc\xf6\xd6-\xd8\xde\x8eQH\x95\x0dZ\n\x95\xab\xeb*\x8c \xb6\xbeq\x15\x81^\x06\xe9\xbfhU\xb2|\x93e!5o,\xfe\x9d[\xae\xe5\xd7\xd2\xe1Q\xa2.9N\xcf(K\xfdB\xdf\xa9e9\xd3\xee\x0f\xc0?\xe2Q\xbf\x9c\xd1\x8f\xfae\x89\x95\xd0/e\xba\x89;\x8bS\xa9K\xe8\xf0kE\xaa<\x1c\x1aUD\xa3\xac\xdf\xeb7\xd1B:\xab\xfa\xbd\x9d\xe2\xdb{\x1d\xae\xad`\xdaki\x04\x05j<\x0f9i\x1b\x0c\xe0\x8d\x14s>s\x8c,\xf0\x05\x91\xe6o)=C\xfe\x0b\x16\xb7\x8b\x088)\x80\xf1\xe1\xe6\x9aW~\xf0\\\x97\xa9(\x0f\xad\xcd\x98\n\x15C\xb0!_\xba\xb9\x186\x8b\x8b\xd9\xd3l\xb2\x81\xa3\x0b\x9bU\xd9\x05\xb0\x8a\xf3L\xcf6\xd0\xcd#@\xb9\xbd\x84\x83\xf2`\x00{p\x1bv\xcb\x8d\xe6 ]\xcaL:\xeeT\xf0\xf9\xb9\xf2\xa36\x16\x0ea\xcf\\\xf5\xb6|M\x0c\xcck\xf1\x1b\xdf\xf0\xd1^\xa2\x90~\xe7\xee\x9d\xfd\xef\xf6\xbe\xbds\xefN\x18\x95\xb7\xe1\xe1C\xd8\xbb\x07k`\xf0\xe8\xd1#\xd8\xd9\xbb\x17\xc1\xdd\xfb{\xdf\xde\xbd\xf7\xdd\xee7\xcd\xf7\xeeh\xef\xdd\x89\xe0^\xf5\x1c\xd3\xb9\x07\x0c\xb6\xe1\xce\xb7\xf7\xef\xee\x7f\xb7\xbf\xf7\xdd}Xs\x98\xfe\x8bo\xe9\x7f\xc9\xcf\xf6\xeeG\xb0\xbf\x7f\xf7\xfe\xb7\xfb\xfb\xf7\xca\xe6\x8f\xe5\xe7\xd8M\xf9\xe6\x9d\x08\xee\xec\xdf\xbf\x7f\xf7\xdb\xef\xbe\xdb\xfd.\xd4\x9bpl\xb9@\xe7\x0f(\xd6\xba<\xdc\x10j0\x80;{\xf05\xe4\xb0\x0d\x9fi\xf0\x94\xe0\xa6yJ\x02\x16\x86|F\xf6\xce\xc1sw\xaaKh\xc5\xaf\xd1K}R>\xdd\x943\xc2\x8e:;\xd8\xacq\xcfvCc9k( \xa2\x89\x14\xd6\xee4\x95\xc1|/~\x10\xc9\xc9\xb4\\\x00\xfa\x1b\x1f\xe8p\xaa\x02\xbc?\xd0\xe1+\xfe\xf7\x07i\xb2(\xf8-\x19:*n\xcb\xc0\xea\xf2\xbe\x1e8\x04\x03xF\xf1IB\x8b\x85\xc8\x8d\x8f\x9f\x1cg\xcb\xbc\x9eW\xc6\x04\xb2\x86\x12I\xba\xb7\xd6g\x87\xad\x8fgqBE\xdb\xd2\x96)ng\x94\xc5 F\xa5\xe3\x10\x84\xee\x12c\xc4s\xd3)9M\x93\x0dB#K\x01\xe5#\xb3\xae\x84I\xed\xb38j\xb9\xf7\xfbZ\xff\xedT1\xb7\xcb\x02N\xe1n#\xc3j)M('\x89a\x12A6\xb2\x17\x9f\x06\x10FU\xcd&\xe9)4\xce\xe3\xc5\xcb\xba\x0f\xb2/\x8c\xae\x01\x04\xbe\xeeMXt\x89\x19-X\x88h\x04\x07\x10\xb0\x93\xeb\xec\xd6\xd7\x14\x93\x9btf\xeexn\x07\x92\xdaI\xf5\xbe,\xed\xfc\xde\xd9\xce\x90E@F^\x8d\xbd\xb1\x90\xc3\xe6\xd9\xdc\xb1\xd9\xb6\x88O2.h\xc3\xd32\xac\xf773\xac\x9d\x1b\x1e\xd63\xf7\xb0z\x05\xd2\xc0\x9a\xf1\x03\x0e\xe1\xc5\xf1\xdb7}\xf1(\x99\xae\x84\xdaVRK\xcf\xdc\xa2\xaf\x9c\x04\xf8\xd8\x9a\xc9\xd3\xd2\xdc\xc7N\x0c\"\xf0\xb0\xe4\xe0\x08<\xc2\xbfw\x90\x9d\xf3\xea\xe0\xb3G\x07\x9c\xf5\xd9\x86\xfd\xfb\xf7\xee\xde\xbds\xef\x9b\xfb\xdf\xc16\x04\x843d\xf7C\xf1\xe7\xa3G\xb0\xdf>}\xeb\x0b%[{M\x87\x0bu$\xbe\xae\x8eD\x19\xa8\xc5\xef5\xceD\x91^\xa0|\xd08\x14;\x89\x9a\xec\xb6\xb1\xb0\x0c\xa3o\x0f0\xfc\x161\xa5>p<\xd82s\xf2\x93/M\xdf\xe0\xa73\xbf\xd1\xc0\xa9=\xbf\x93b\x9a\xd0 JO\x9e\xdd~\x817\xdd!:\xd3\xc1\x01\xec\xb4\xfd\xffLfN>*?\xc3\xd5\xb9\x9e>S\x99\xa8\x9c\xa3\xd1\xd2\x0c\x97{\xc7\xcb\xd53\x8d\x0b\xf6\xfc\x9a#+\x8dq\x7f\xd9\xe8n\"~\xc3\x13qn2~\xc3\xb7\xcb\xc5\x06}*Dm\x86\x15\xd9\x9d\x98\xf9:U\x96\x02.u\x8a\xa0Z\xb1\x10\x98\xf6j_\xfe\x89\x15\x8c;\xb23\xf2\x8b\xa8\xec\x8c\x9c`\xef*\xe7~t\xce\xafRDt\x04\x85VI\x15\x959\xa3\x03{J0\xef\xc9\xd1\x1eB\x0e\x07\x90\xab\xd0\xfdc=\x02x_94\x88\xd61\xc7\x81gP\xb0r\xee\xfc\"\xf2Qz\xab\xfe\x15$\xe4:\x8e\x9f\xa2\x9a\xbdW\xeb7\xe4\x9a\xe8\x89\xfd\x1b;\x0d6\xd2k\x87\x88\x82\xaa\x14]]\x0b\xa5e^\xafG\xd3\xdc\xba%\xf8\x8b\x99\x96dU\xe1\xed\xb5\xfc\x11EUmKV\xa5M\xdd\x117s^j\xc1\xe3\xd1\x00v1\x07\x85%\x90\xc8\x02(d\xbefUt\xd1\xce^\xf5\xa5<\xb4Z\xd5\x14\xc1v\xc61\x92/\xb2b\x13\xd3\xe6\xf5\x93|\xf8\x99\xf5\xaa\x12\x03%\n\xec\xc3\xd7\xea\xd7\x0e\xec\x89\x02\x03\x0e\xcb\x9f-\xf5\xa1~)\xa3\x01s\xca\xe5\xeaJ\xbe\xd8V\xd79 \xad\x8d`+\xc1R\x00b]Eh)\x17\xd1\xb30\xd4\x92\x96b\xb3\xf2\xbe\xb3\xe5+\xde{\xe4\xca\xa3\xa1C\xd4l\xb6\xf3\x06i\x84\xb0\xaa\x19\xd0~\xc7\xfe;'\xefo\x0f\xbd\x86\xfd\xac\x84l\xc6!\x1b\xc3\xff\xe5\xb2\x03\xdfz\x1c\x07\x92\x9a\x0b0\xc6\xfc\x1e\x88w\xe0\x10>\xf3\xb9\xc7\"\x1d)Zm\xd4\xcfL\xa5\x8c\xed\x02\xbf\xd3ZbIU^Q \xefm\x9c\x92\xf8\xdc\x87\xf3Rf\xb9!\xefbd8\x94C\xc7bq\x1e\xe5\xa5 \x00J\xff\x12\xc1\xcb~6EgZ\xebg\"?\x89\xe6\x9d\xef}\\\xc3\xbf\x8e\x1f\xf8\x9e\x11\xaa7\xed\xde\xe3y\xf2\xffq-\xbd\xeaK\xf5\xc7+\x1a\xb9\x90\xcd{\x0c?'l\xe6sN)\x99G\xef\xc5\x8do\x9c\xa7S\x01\x02\xed\xf1\xdbL\x96\xb5;W!\xa7\x08Uz\xd8\x89\xd27\xe87\xcb\xba-\xef\xd0q\xbd=\xfc\x8dy,\xc4 Q\x0bZ\x9a\x95\xbd\xe4\xb4\xeb\xe6\xd31T\x9d\x86\x9b\xd9l\xd8|\x95\xc3\xcd\x03\xda\x89\x96g[\x94\xd0\xaeY \xf4\xc7\x9a%A\xbf]3)\xfc\x1a\xe9J\xda\x10\xef\xbd\xac-\x9f\xb8\xf7C\xadiq\xef\x84\x18>\xbe \x86\xaf\x8fH\xf3\xf36TT~\xb9\x03\xa0m\xb8\"P_\xb4\xef?\xcd\xd2\x94 \xa4\x0f\xe0\xd4\xe0\x03\x81\x01b\x1f\x0d\x0f\xf4\xb4\x92\xefX\xfb\xb9\xc8\xcb\xb70<\x91\xa9\x02\x8f\x8c\xa3d\x07P\x18\x1e\xe8Y%\xe7\x86\xe7\xef\xc98\xcb'\x07\x90\x9b\x9e\xc5\xf4\x8c\x1c\xc0\xca0\x89\xf7dAb\xde\xa4\xe1YR\x1c\xc0\xccp\x7f\x9agsLmkK\x97|\x15\x01\xe9\x93\xcbE\x96\xb3\x02\x93\xc4 \xac\xbcr\xfb\xb4\xf5\x96\x05\x81\x82\xe5\xc9\x98i\xf9i\x94 ]\xdbn\x9a\x0f\x8d\xdeQ\xb3u\x15\xfb\x16G\xb0\x8c\xa0hn$L\xc6\x1e\xb00\x82-\xe3\x1e\xe6]\xa7m\xfa\xa7\xa5\x01C=OX&L;\xca\xf3,\x0fz\xaf\x13\x9aL\x132\x01r9&\x0b> \xc8\xc6\xe3e\x9e\x93\xc9\x03\xe0\x93d3\x024\xa3;s\xf5\xe2\x84\x9c\x03\xa1\xe7I\x9eQNu1\x02\x8b\xbf4]\xa6)\x10\xde*\xccIQ\xc4g\x04b:\x81x2Ix\xb3q\n3\x92.\xa6\xcb\x14.\xe2\x9c&\xf4\xac\xe8\xf7\x0c\x14\x9b\xa4\x05q\x90\xfc1\xe7i\x9a\xc0r\xf8\xf7L\xed\xfcfP\x07\x05\xeb\xe7d\x91\xc6c\x12\xdc\xfe\xbf\xc5\xed\xb3\xa8\x9b\xa8AE\xd8\xc6\xc3\xe9\xf6v;\x84\x17\x90\x8a\x85a\x9f\xc6s\x0c\x8dxN\xcf\xe3<\x89)\x83\x9f\x92,\xc5\xe4\xdb\x86\xfc\x92\xad;l\x96g\x17\x90\xf6\xa7y<'\xc5\x87\xec\x1dV\x91\xd9k\xa6b\xd3\xb0\xfa\xcb\x91\x98\x06w\xee\x86f\xdc\xcd\xaf\xdf\xba#K\xa2L~>!\xd3\x84\x12\x95\xfc\x9c\x8bE\xbd\x93\x13R\xbc\xce&\xcb\x94\xf4L\xa4T:I5\\\x9e0\x8f\x12\xe7\xbb\x9ef\xf3yF\x8f.\x19\xa1\x85\xcc\x7f\x8e\xf7\x1bwH1\x8e\x17XS\xf1UB?\xbd\x8b\xb1\xae\xa2J\x9d\xdf\xba]\xcc\xe24\xcd.\x8e>/\xe3TV#d\xfd\xd3e\x92N\xbe\xcf\xf2\xf9\xb3\x98\xc5\xe2\xb5,g$\x97OY&o\x92<\x89\xd3\xe4\x0frL\xe2|,\xda[\xc4y\xa1\xff>#\xec8\x9e/Rr<\x9e\x91\xb9\xf8\xee\xaf\x17\xc7o\xdf\x88\x9d\xd1\xe9\x01\xc6\xf2U\x07\xb3\x8c\xb6*D5\xab\x8eF\xe8\xa8o\xdd\x82^\x86\xbd\xf6D\x11\xb2\x86\xb1\xa0\xb7\xa4b\x9fNzp\x00\\\x82*\xf8\xc6\x8d\x97)\x0b\x03\x16\x86\x8ex\xd7+\x18\xc7l<\x03q8\xb6\x1e\xcb\xef\x1a\xd9\x1b\xae\xf8^\x16\x03J\xa6\xabNH\xc8F\x8e\x05\xc3|$\xf9f-\xa9<\x1c4\xfb\xc6\x1e\xe2<\x8fW\x1bt@d\xb3\xe8]\xa3\xff-\xeaI\n+\xefp\xd4\xeeH\xb0%\x92O\xd2z\x03b\x0eM\xe3\xabr\x84\x1eT\n\xae\xe6\xb3\x9eAB\x0b\x16\xd31\xc9\xa6\xb0RK\xd2\xe7[\xd2\xf5i /\xc6\x01U\xcf\x86\x8b\xb7\xd2\xb2)\xce\xb8\xcb\xb4\xbc$\xec\x8b\x8c\xce8\xdb\xea\x95\x8a\xd9\xac\xde4\xd5Nd\x98`\xf0Cv\xcc<\x0b\x05)\x15\xa3)\x87\xbb\xd2\xfd\xecF\xb0\xacP\x91\xb4\xb3\xf3v [\xe6\xf0\xc5!3$\xe80\x14\xbe\xeb*\xc6N\x879\x17\x0f\xc90\x1f\x89\xf4\x8at\x99\xa6fMt+\x13&\x82\x8cf\xf9\x1c\x0f\x0f\x81s\x03\xb8\x8c\x90N|O}\x91\xd6<\xc1vOIQ\xd2\x9dc\xd9\xc7\x92\x8eo\xbe\x175\x11\xaff\x9b\x99\x9a\x8dT\xe2u\xbc\xf0A'+\xca4\x93\xfa\xba\xf4\xa2\xf5ue\x01_Y\xa1\x8a5\xe5\xee\x84?\xdb\xa5\x84p\xc8\xef\xb1\xcb\x7f\xdb\xa8K\xc5x9^\xa7\xee$s\x1e\x08Y\xd7\x81 U\xda\xfcn\\\xdd\xa5\x18r\xb1\x01\x98\x8aU\xc1\xc8\xfc\xc3lI?\xbdN&\x93\x94\\\xc49\xf1E\x9c\xee\xfd\xcf\xfa\x93\xa4X\xf0\xb3I2\x8eH\x97\x9cp\xe9n\xd4\xf4\xb2\xd3\x82\x05\x1d[\x08\xcd\x93\x01 0\x959\x0b,\xbel`\x14#\xccw\x0d\xe7\xa0\\#\x0e\x80e\xf14\x9btC\xf9\xbcL\xb2\xa5\xaal[I4+55\xc1\x05?[.\xf8D\xfc\x93\xa8+\xe0\xec\xf7Ty\xd4m\xe8\xf5Bc\x06\xa5\x10\x19pK0\xf3\x95\\f~\x82\xf9l<\x8c\xce\xa9N9\xa5\xc0\xe1\xbc\xa7\xfc3\xd0\x8a)V/\x8a\x13\xb2\x0d\x0eu\x9a\x11\x99\x83\xc0p\xec2\xce>\xb0\x91\x1d\x96\xf5^\xfaI\x81\x9dQ\x91\xf8\xfe\xa05\x88\xf6\xfcg\xc9\xd9,M\xcef\xdd\xdc\xa5Z\xe1I6Fu\xab\x99\x01\xd9\xaa\xf8\x8c\x9e!s\xaf\x08N`\xe4\x92=\xcd(#\x94\xa94\xac\x8f\xe0\x1e\xb9S\xc5\x03\xe9\xafX'\xdf\x8d+\xb5\xec0\xba\xd2@\xa4\x83\xab\xfa\x88\x90\x0b\xdf\x8dP=\xb2\x1c\xee\x8e\"\xd44\xecE\xa8@ \xfd\x84R\x92\xff\xf8\xe1\xf5+\x91q\x18\x16\xa8V\x10r\xb2\xa8g\xbb\x80\x87\xf0\x0d\x92\xc9\xdf~\xc3\xfdJ\xa5\xe7\xdc\xd8\x99m\x86\x03\x84\xf7\x94\xaa\xae\xb7\xb7\x8b\x910\xafM+\xd8\xecE\xb05\x86\xf5\x1a\x16\xf0\x08\xbe\x15\xbd\x08\xaa\x80w\x87\xb7\x7f;\xbe\xddg\xa4`\xc18\x8c\xf8\xdb\xfc\x83\xdb\xc3\xaf~\xbb\x18i\xf7\x83\xdem9\xb2\xf5\xbal\x80\"iN\"\xf8[\xefo\xa0\xdcN\x92\x08z\x7f\xeb\xe9?\x97\xc3\x02v\xe0\xee\x08\xb6\xd1)\x9e\xf2g\xbd\x9d\x9d\xdf.\xefp\x99\xbc\xba\xf5\xf5\xed\xdeh\xb8\x18\xb9\x8de\xb8,SQ\x98\xa1\x1f/\x16\x84N\x9e\xce\x92t\x12\xc4\x9a\xc8}\x94\x12\x8efA\xafX\xc4\xb4\x17\x86\xfd\x82\xb0\xc7\x8c\xe5\xc9\xe9\x92\x91\xa0W\xb0\x15\xaa\x03\x86\xbdq\x96f\xf9\x01\xfc\x9f{\xf7\xee=\x80iF\xd9\xce\x05\x11 qO\xb3t\xf2\xa0\x17\xe1\x8a\xe1\x7f\xfa\xabxo4\\\xc0!\xae\xdd\x1d8\x84}8@\x08\xdf\x87C\xb8+\xff\xe6\xf7\xef\xc0\x01l\xdf\xfeW\x10\x07\xa7\x05\xcb\xe31[\xa7I\\\xac\xe9d\xadL\x0fk\xbeg\xd7E0_\x17$g\xe1\xe1z\xc9\xb2p}\x1a\xc4\x05Y\x93\xb3\x84\xae\xb3,\x0dHL\xc3\xc3uN\xe2O\xeb\x15#\xe1z\x8c\x8f\xf9\x81\xb3\x9e\xc5\xf9\x1aE\xdb\xc9:\x8d\x8bb\x9df\x94\xac\xb3\xf9\"]g\xb4`\xeb\x8c\xb2\x84.I\xb8\x9e\x90\xe0tyvF\xf2\xf58\x99\xc7\xe9z\x9c\xc69YO\x03\xbe\xc7\xd7$\x0f\x0f\xd7 M\xd8:\x0d\xc8Y\xcc\xc8\x9a0\x12\x1e\x86\xebI\xb6\x9ed\xcb\xd3\x94\xacI0\x9ee\xeb\xb48L\xa6\xeb\xb4 A2\x0d\x0f\xf9<\xb0\xf6\xe8\x9a.\xe7\xebsB\xd9\xfa2\x18\x93\x05[\x93\xf1z\x11\xa4\xc98a\xeb,g\xe1\x9a\x91\x80N\x8a5*M\xd69\x0d\xc3\x90w\x9d\xa6l\x96g\xcb\xb3\xd9:N\x0b\xb2Nh\x9c\x06\xe9\x8a\x0f\xe5\x92O'\x8b\xf9\xd7\x01\x89\xc73>\xfb\x84p\xb0e\xf3\xf5\x92\x8e\x03\xbe{\xf9\x00\xcf\xd2\xec4N\xd7g\x19\xcb\xd6g\xcb8\x9f\xac\x93`\xba\x9e/\x02\x81\x03\xc5Z\x1b\x04\x0d\x12\xb6F\x95~p\x92\xd11 \x0f\xd7i\xc2\xa1\xb5dk%\xfa\xacY@\xf2i<&k\x92\xd38\x0d\x0f\xc3\xc3u\x11\xae\xd3 \x9e\x9fN\xe25a\xebl\xfci\x9d\xd1\xb3p=\x0f\x92q\x9e! \\\xa3\x8ai-\xd4\x08\xe1\xfaM\xfcfM\x83xN\x8a\x05o)f\xc99Y\x93K\xb6&\x17\xeb$]gl\xbdL\xd3p\x9d\x05\xc8\x16\xad\x17\xc2\x10\xbe\xce\xd7K\xb6>'y\x9eLH\xb8^\x04\xf1\xf8S|F\xd6q\x1e\xcf\x8bu\x9e\x9c\xf3u\xc93F\xc6\x8cp@\xb0l\x9c\xa5\xeb\xe5i\x9a\x8c\xc3u\x1e\xc4 \xc7\x98 \x9ed4]\xf1\x85\x9b\xae\xcf\x92\x82\x91|\xbd 1[\x7f^&y5\xefb\xbc$k\xa1b[\xb3|\xb5\xe6T1\x0c\xd7Ep\xba\xe2\x8b\x1f\xa7d\xb2&\xe9t=\xcbr\xb6N\xce(\x99\xac\x93?\x10<1K\xc6kT\xe7\xacY\xbe\x1c\xb3\xf5\xf2\xb4\x18\xe7\xc9\x82\xad\x97\x0b\x92\xafWt<\xcb3\x9a\xfcA&\xeb\x8b\x84\x8dg!\x87\xe8|\x91\xf2\xc1\xcf\x08]\xcf\x92b=\xcb\xb3\x8b\xe2p\x9d\xc7\xb4H8\xd2\xe4K\xb2\xceW\xeb\xd5\x82\x041\xee\x8f \x99\xae\x93\xc9\x9a\xc6s\xb2\xce\xa6a\xb8^\x064\x18K4\x9f\x90i\xc0\xd9E\x8e'\x19]\xa7\xa4(\xd6\x85\x18#K\xd2p]\x90u\x91\xf0\x05:\x0f\xe2|\x9d\xe4l\x19\xa7\xeb,\x99\xacQm\xca\xd7\xe7\"\x18\xcf\xe2\xfc\x84\x89\x01\x91\x9c\xacgIJ\xd6 \x9b\x85\xeb\xcb,_\xaf\x12\x92N\xc2\xaf$\x01\x9cr~iw\x14r\x16T'9\x8a\xdc| \x97\xecM6!\xc14\x0cC\x91Al\xc1)\x94\xa0\xeb\x9cF\x1c\xf0\xf3c\xaa\x1d\x00{{\x0f`k\xb8\x17\xc1\xed\xe1o\xb7\xff\xbc\x1a\x06\xbf\xedl\x7f=x\xf8\xe8\xe0\xc1\xfa\xb7\xdf\xfa\xd1\xe1\xd6\xad\xbf\xff\xfft\xfa{{\xf8\xdb(\xac\xdfhPhI\xa0\xc7\xbc\xe3\x0cS\x93sR\xff\xb0\x07[x\xceH\x12=.\xa9\xf3\x98\x1fS\xdb\x90\xc26\x12\xe8m\xd8\x1b\x95\x7f\xee\x8f\x90 \xffvyg\xbc\xb5\xb3\xd3So\xf2{\xb7\xbf\xae\xff\xbc\xcdi\xe1\xff\x11-\x8e\x86;;\x8b\xd1\x03\x87\x07\xcf\x14\xb6\x070\xf6e.\x8d2\xda<^|\xc8\x1a|\x97M\xf5as\xb1\xe4\xc7b#\xc9~\xf9\xcapo\x04\x87\xf5\x9f\x07\xd0\xfbDV\x06\x96D)\x06\x0d\xed\xef[\xdb\xdf\xaf\xb7\xbf?\xaa1[\xaf\xe3\x85\x89\xe1k0\x90\xaf\xe3E?)\x84\x96\x04=\x81\x84\xf7\xc3\x06\x1cd\x9dc\xa4\xa2\x82\x0dE\x0b\x89\x89g\xe4\xfd\xd3*\xef\xfd^\xa5\x11\xea\xcfI~F\x02\x93\x14x.\xa3\xe5\xbbG\xc3\xdf\xe4\x8c\x155V\x07\xe2O\x0bK\xf4\xbc2\xecl\xed\x99\x9fM-:]p*=K\xe6o\x11\xc1\x04\x06(~&\x9a\x96RE\x06\x04!\xa6 \xe4\x83\x0b\xf8\xb6\x9e\xd4\x1c\x85\xc2\x07r\xd8..\x8e\xf72\xe3\x14\xc3'8\xfd\\\x8e%\xab\xc62C\x17Y\xe7Ws\x0e\x83\xceP\xf63|k\xaf\xe3\xad\x15\xe7i\x83\xb3\x08h\x99m'\x82\x9c3X\xc12\x82yS\x0d\xad_mTPB\xc7\x8a\x0b\x1d\xb1r\xfe\xc0\xec\x87\xb1H\x9a\xb72s\x83\x06b\xa1\xab\x86\x8d\xdf\x8c\xa5k\x05r\xe5\x86\xef\xa7\x9c\xfbHm\x18a\xc7\x15~ma \xdeI_n\n\xedo[\xe2\xe6\x8e\xee@\xf1\xf7\xa14\xe0M}\xe1\xd0\xba#\xc7\x14\xb7I)\xb9D\x8e\xf4\xfb$%o\xe29\xf9>\xcf\xe6R\xa6y\x96\x14\x8b\xac@\xe3\xeb\x8f$\x9ex\x94\x95W\"\xde\xedi\x92\x12~l\x0fz\xc1\xf0_\x0fF_\x87\x0f\x0e{\xb7\x93>\xb9$c\xa3\xe1\x00\xcb\x9e\x08\xdb\x00g\xea\xebm\x94MT-\xd8\x88\x93\xaa\x9e\x82\xcdh\xb2\xa1F\xaa\x8c\xf9\x19\x94\x12n\x99\xa6m\x08-\xe2b\x1c\xa7O\xe3\x82\xc0\x00\x9e\xd6\xef|/\x07\xd9 \x1a\xd9\xc3\xd3\x80Tf\xe2\xdf\xfa\xc3\x7f\xf5o\x8f\xbe\xfe\xea6\x17%B\x93\xc6*\xa6 K\xfe \x1f\xf3\xb4\xb3\x07\x0e\x802vlK\x8b\x1d\xe3\xc2\x9a\xd0u\xb8ekM18\xd6{\x0e\x8dG\xf0\x19a\x8f\xc7\x9c\xcb\xe7\xd8\x92gi\x9a\xd0\xb3\xf7\xa4Xd\xb4\xe8\x86F\xe3$\xab\x14\xfe\xfd\xa4\xd0\xb4\xff\x9a:\x84/\x8dMcP?\xf6\xccoV\xfa\xa5\xbaCx\x97Wry\xc2\x15,\xceY\xf1s\xc2fAo\xbfW\xea#u\x15*:\xe9\xf5\xc6b\xf7\xf4\xf04\xfd\xf3*\xac\xb0\xd0V\xa8\xc1LlK\xd5N\xd0\x93]\x88&\x8dv\x12K\x1b|\xcb\x06\xd40.s#a\xa9|\x93\xa6.5v\xa1\x0d2CVA\x887\x9b\xb7\xf1dB\xc8\"]\x1d\xb3\x8e\xbaLmJ\xf3\xdeP\x86\xffye\x0eLi\xe0hf09\xd9\x15\xdaU\x1cQ\x1edC6\xc2\xbdr\x08\x13\x92\x12F\x80\xdf\xe1B\x0d\xff\x87\xf3\x03\xe2\x0dj\xcce`\xcaV\xabl\x03\x06\xb2\xa7\xa2!\xbd\x08\x89)`\xd6\x95\x19HV We=\x95Y\xd7r\xa6X\xad\x16\xa4k\xc1\x89\xb0Z\x94\x87\x12 \x1d\x0c\x84F|s\xad\x89\x08\x84}o\xdf\x00R\xc5\xect\x19$\xcdQ\xc2\xe0\xe2\x13\x88#\x15\x03\xebS\xf4\xbd\xf8\x90\x95\xfe\x1c\x1ek$\xbe\xb1\xac\x91\xd6\x9b\x15M\x1a\xa6\xbf\xfa{\xe7\xb2\x92\xe7I@\x83oL>\x12ctH\xba\xf7\xcd\x9e\xe1\xd9T~x\xef\x1b\xa3{\xc5B\xb9f|\xbbkz<)\x1f\xdf5=\x9e\x95\x8f\x8d\xe3:\x97\x8f\xef\xdf36>W.%\xbb\xf7L\x8f\xcfpV{\xdf\x99x\xff\x95\xfc\xf4\x8eqR\xa7\nX\xfbw8\xe2\xd7\x9e\x97\x04\xfa\xa4\xc3w\xe1\xd6-\x0c\xe1P\xbeU\xd2\xb5\xd8\x8c\x8b\x12\xa5M\xa5\xea\x9bQ\xf3\xfa/\xbe\xb0\x170\x80\xf2\x08lO\xe5\xc8\xe0\xc0\xd3\xad\xd9o\xc9\xc8fsL{\xb06`]ndv\xae\n\x047&on\xfc\xd8\xd9\xf8\xd6\x16q\xdaW}(\x95c\x0dtO\xa9\x89\xfa\xc8\x06\x86\xa7\xce\x91\xf2~\x17U\xbf\xfc\xe7\xd4\x7f\x18u\x07\xaeN\x16\xce\xa1\xf8\xd9\x8c\x8b\x18Z\xc4a\x0b\x8br\xc7\xda\xf8\x9dz\xe3wD\xe3NN\xbcn\xa2\x97} \xefQ\x7f\xc8\xca\x87\xeb5 `\xcfk\xc7\x88\x0e-\xab\xfd\x18\x9d\x84\xab\xfc\xdf\xb4b\xbfM\x9a\x15\xd0\xfd\x00\x86\xd4\x92\xf6\xces\xa3\xc1!h\x02AR\x04\x182\xc5Q\xd5\xcaq\xf9\xa05\n?\xb6\x06|\xfc\x0e\xf0\x08'\xf8i\xd6&\x06\x82{k\xd4l\xeb*`\xb3\xc5{\x99k\xc3\x1cR\xceY\x0d\xa9\xc1\xeau\xd5\xdc\x12\xeds\xef\x93\xc5\xe1\xb1s\x7f\x80\xb2\xa7\xc2#\xa8\xc2\xc4{?\xc5\xe9\x92\xc0|Y08%\x90\x92\xa2\x006\x8b)\xc8\x96\xbd\xca\xd9?\xb68fn0\xa6\x87\xf61\x9d\xa1\xc2=\x97\xc3\x12\x8d{\x0d\xeb\xad\xd9\x85\xb4\xfb\xb4@9\xf3\xf6\xbfv\x0e\x7f\x9bl\x07\xbf\xf5\xf9?\xe1\xa1\xb2\x0chRjc\xa01H\xb6\xc7gp\xef,>\xaf\x9b\x8d\xcecP\x14#\x01\xcf<\x87\xf5\xc1\xe4\x9b\xeb7&<\x95\xb6\x02\xe2\xf0)\xb4Cn\x9a\xa4\xc4k\x80\xaf-\x0e\xc5~c\xec\xb1|Iz\xb2n0?D\xa7qZ\xe87\xb6v\xb5\xbf\xf7\x14#o\x1b\xf5\xa9\xe8\xdek\xe0\xcf\xcd\xce\xd1~\xe3\x16\x835\xa8{\xecc\x93/\xfb\x0c\xedw\x9b3\xb7\xdf\xe0\x92\xe2M\xfc&\xe0\x9f\x95\xce\xc2\x8e\x95V\xcd{\x8d\xec\x8d\xc9\xef\xdcoTJ\xd8S\xa2F\x9fe\xaf\xb2\x0b\x92?\x8d\x0b\x12\x84\x11l\xdd\xfe\xd7\xf0\xcf`t8\xdc\xdd\xf9.\xde\x99\x8e\xfe\xfc\xf6j\xa7\xfc\xfb\xae\xc7\xdf{\xfbW\xc3\xf0j\xe4E\x18\xf8\xc8\xbd&\xfc\xde\xea~\xefOL+\xde\xc4\x8f\xce\x8b.\xbc\x86\xf7\xcc\x1a3\xb0\xf9\xf06 \xf9\x1b\x8c\xf0\x95%\xd2\xc1{|[\x94\\\xc0{rvt\x89\xfe\xc8\xae\xa5\x9dfi\x9a]\xc0Bv\xd2\x83m\x93\x03{\xfd\x0co\xc7et\x8e\xec\xba\x9c\xed\xad[\xb5\xdfv\xae\xd6\xc6\xf1\"\xab\x87\x94\xe74\x9b\xac\xa4RY\xa8\x17\x13\xda\x13N\xf2\xf8\x0b\xcdX'\x97\xf3\xb4\x87\xee\xf2\xda\xcd\x9eEU\x99T\xea\xce\x9c\xa0\x9b\xc2\xc4\xf6j\x0c\xc2;J\xbe^`\x84\x8b\xe8\xc8\xa2\"\x8e\xcb\xd5\xca\xedv\xc7X47\x97|\x8e\xa5\xf3\xb1\xf6\xa6d=,oN\xab79q\xb6\xbd\xb6\xa8^\x9bf\xf9\x8f\xe0,\x82\xd3\x08N\"\xb8\x88\xe0(\x82\xcb\x08\x8eG\x0d\xe1\xd59\xf6J\xdfd|\xc5V\x92\x0eYB\xe4\x9f\x9f\x86\xcd\xb9\xbf\x97\xb4\x1e\xa6 I'\x90\x14@3\x06\x8b<;O&x\x02\x98(\xb6j\xf4\xdc5X>\xf1\x8f0\x80WA\x16\xc1\xb9\xc3%\xe1#\x1a8\xc4x>\xfa\xba\x1a\x80\x1c\xc2\xa4\xda:\x93\xae\xd1|\x86\x01\xbc\xe7\xa3\x998F\xf3Y\x1b\xcd\xe7MG3\xeb\x1a\xc2\xf70\x80g|\x083\xc7\x10\xbe\xd7\x86\xf0\xfd\xa6CXV\x00q\x96\x1d\xe1\xa3\xf9\x03S]a\x91\x11\xfbh\xfe\xd0F\xf3\xc7\xa6\xa3\x19W\xa3\x19w\x8d\xe6 \x0c\xe01\x1f\xcd\xd81\x9a'\xdah\x9el:\x9a\xfa\x91\xd85\x9e\x9f\x1c^K\xeaB\xee&\xf8 5\xe41#;\x8c\xcbQ\xd8\xfc\x02\x0e\xe1\xf7\x00Uh\xbd%\x176\xca\xbbo\xc4\xdd\xe7\x82\x88\xda\xf9\"u\xc9\xd9\xfedsb\xa9\xc8l\xfd`\xeb\x9a\xdf\x8f0\x80\xd7\x81\xab\xda\n\xce\xee\xc7\x0d\xc6\xf8c\xf7\x18k\x87g\xd7\x10\x7f\x86\x01\xbc\xed\x1e\xe2\xcf\x1b\x0c\xf1\xe7\xee!\xd6O\xe8\xae1\xbe\xc0\xec\x8d\x9dc|\xb1\xc1\x18_t\x8fQg\xb0\xbaF\xf8k\xc7\xd0N\x91\xf9)\xd90\x9f\x81\xfe\xaax\xd6\xe74\x18\xf6\x12F\xe6E/\x02\xc1g\x8f0\xc9N\xcb\xcc\xdd\xe5\xe9\x01\x9a`\xd5\xb5\xed\xf8U\xc3\xa4_\xd1E\x82#\x0b\x86\xaa\xd6\x97P=|'\x1f\xeaT\xe0Wd\xc0\xf8\xd3\xe7\\\xa8\x8c\xa4\xb9]\xac\x83{\xb0\xfcJDVKC\xde\x95\xe6\x85\x995\x0e,\x99\xc4\xd4\xe5\xac7\xdb\x89\x13\x1a\x83\xdc\x85\x12/a\x00\x1f\xba\x91\xf6\xa5\x0f.H`\xbd\xf4\xa5\xc6V\xab\xb7\xc1{\xa5\x9dF\xc1\xcd))7\xa3/w66X:Az\x05m*\xf6\xb7\x0cZ\xa6\xf8g\x0e\xef\xdb\x97\xf3T\xea\xae\x98U\xbeK\x84\xcf\xd5\xe5<\xc5m\x8b\x7fa~\x12\xd7\x9a\x0b=\x0f\xff\x86K\xf9\xf2\xdb?\xaf\"\xfe\xfdW_\xe5d\xaa;\x03\xac\x16\xe8\xb4F\xfa\xb8\xaf\xc5\x9f\x0b\x91\xcf#!\xf2w\x95\x16\xe6]\xf5\xe4\x10\xfe\xf6\xf0\x907~N\xf2\"\xc9\xe8\xa0\xb7\xd7\xdf\xed\x01\xa1\xe3l\x92\xd0\xb3A\xef\xe3\x87\xefw\xbe\xed\x1d>\xfa\x8dJ\xb7v\xf8\xe5\xf5+ \x97\xb8\xc40\x8e)g>O \x9c\x11\x8a\xc9\x19' B\x94\xfef\xf5~R\xd7yY^\n\xa7\xd3\x9fsQ \xb8\xfd\xdb\xf1\xd7\xbf\xdd\x0e~;\xde\x0e\xbf\xba\xed@\xf6\n\x88\xb2\x84\x94'*C\xddXx\xa6,\xb5\x93\xa7\xa8/\xfb\xe5\xf5\xab#17\xe1J\xe2\xe3\x01r.\xcb\xaa\xd5\xdb\x13\x9b\xe0\xfb<\x9b\x8b\x8d \xdbk\xcfH)\xc5l\x92]\xd2%\xd9%a\x08\x87M?\x98\xa4\xf2\x83\x81\x83F\x8eJ\xe9\xa3\xa9\xa7?q\xba}\x9d\xcb\xcc\x86\x7f\x1at\x85 \x93\x17V\xe2|\x9a\x8d1\xcbN\xbf\xc0\xc6-\xfa\xa5Joi\xdbZ=\xa1\xa4w)MD\x16\x94byZ\xb0<\xd8\x0b\xfb\xc5\"MX\xd0\xbbe\xd2\xc6\x80\xee\x9f\x9eCB\x81\x86@\xfb\xb3\xb8x{A\xcb\xdc7\xb9pS\xc4(\xc3a>R-\x0e\xb8XE\x86\x132\xce&\xe4\xe3\xfb\xe7O\xb3\xf9\"\xa3\x84\xb2 \x1f\xee\x8e\xc2\x11\x0c \xe7T\xe8\xd6-0\xbe\xb37\x12v\xd5\x9e\x0f>\xa9m\xdd^\xb3v\x1a\x1b7m\xb5Z\xc5\xfd\xca\x97\xab\x81\xd0\xd6\x8cD\xca\xfdA\x0f\xb6MO\xc9\x90\x19\x0d\xb3\xfd\xdf\xb3\x84\xe2\xf2\xb4\xa7&S\xf5\xb8\x07\xa5\xe6S\xcb\xb9\xa1r\x17Sr\x01$`\x9a\xb9\"\x82\xde\x92Mw\xbe\xed\x85au\xb7w\x1a\x17\xe4\xfe]\xd3\x18\xaa\xd4A\xed\xae3\x0c6K2Z\x1c\xe3[6\xaf\x9d8]\xccb\xcf\\\x83\xa0\xbb\x8f)m\xe2\xac\x17\xe2\x16J \x07h\x9c\xf3)i\xcf,G\xb6yc\xce \x9be\x93k\x8fF|n\x1b\x8fz\xea\xcdD\xb4\xc7\xc8\xe2\xb3\xbf\n\x9c\x8d!{\x0f\xd2\x80\x99\x8d\x14S~\xec\x8c\xc9I\xa5\x8a\x8d\xe6\xe4\xc7z\xfa+_^b\xf5\x10\xd1\xd8\x96\x1c5\x88\xbd\xeao&x\xbb!\x8d\xf8\x06\x8dL\xfb3\x0f\xb5\xc4k\xfb\xbb\xb7\xcf\"\xe8m\xf7\xc2\x91\xdc\x9f\xa6%\xb5R)\xe6\xda\xd4\x86\x94]\xb5\x95\xb48\xd6\x94J3N\xb8f\x15\xe1\xa2\x9aSN\x97\xcb\xc8F\x1e#\xf5\x91\xd7a\xae\x94b\x96\xbcd^\x04\xd8X\xa0\x063\x8ektL\x9a\xb31\xa5Q\x9e\xcc\x03m\x91~\xc3\xecx\xbd\x13\xb4\xd8\xf4z\xae\xe1Z\xb2\xaay\x0d\x93\xc3\xec\xb4\x82\xd9\xc7\xb6{Yd\xc8\xe3\xe6\xd54ig\x9b\xe8N\xc2z\xfb_\x97;%s\xdd\xb9l\x915\xf7\xdc_9Bi\xffY\x97\xf6\xa5ui=ZK\xbb\xd8ZZ\xbd\xfc\xa7\xf2?\xd5\x83\xb2\x90\x16\x0d\xee\xdd\x0d\xfbO\x96\xd3)\x91\xde\xe2\xd7\xca\x06hN\x88\xd9\x9cfI\xa9\x8c\x92\x99\xc8\x15\x0f\xff\x7f\xf2\xde\xbc\xbbm\x1cK\x14\xff\xbf?\xc55\xa7_\x8a,\xd3\xb4$\xaf\x91\xedx\xb28\xdd\x99\xc9\xf6b\xa7\xea\xd7\xa3\xf2xh\n\x92\xd8\xa1H\x15\x17;\xae\xb2\xe7\xb3\xff\x0e.\x00\x12\x04\x01\x92rR\xd3\xfd\xde\xe3\xc9\x89E\x12\xc4r\x01\\\xdc\xfd\x9e@\x15\xcb\xf2\x13\xf1\x83\x9c\xc7\xa2\xfc\x17$\x0b(\x81p\x047a\x16\xe6\xb0\xc8\xf3\xd5x{{\xe6\x07\xe4:I\xbex\xf30_\x14\xd7^\x98l\xa7\xf4\xbb\xedi\x12d\xdb\xf8\xf1\x16#\x9fRo\x91/\xa3\xd3P\xc4nd\x94\x86\xcb\xf3\xb9A\n\xc7\x90\x1fA\xba\xb9\xe9@\x0c\x9b'`=\xf1\xd3y6\xb94Q$\x157\x97\xa2\xcb\xaeB\x1f\xb2:\xeaq5ED\xcd$\xed\x1f\x94\xb3\n\xc8\x99uG\xe2l\xa2\x99\xa4\x16\x1dS\xe5\x15\x98C[\xd2\x1a\xd8\x12\xc58j\xc4\xca\xca\n\xef\xbb\xc4\xa8'\x14\xd8\xe7\xa4\x1f\xac\x932\x1a\xf1#\x9a\xacB\x19\xcbcf\x1d\xa8nz\xf5#\xcb\xfd\xe0\xcb#\xba\x80\x11\x98\xd9\xb8\xe9/:r\xfa\xb7W\x9b!\xb7\xd0}D\xb3\xc2\xb8\x17[\xd6\x18\xfd\xf6j?\xc5H\xcfk\xb5^\xd4\xb3\xbd\x88\xa8=\xad\xca\xa8\xf2\x84\xc84'\x04\x8b\xac\xc3\x8c\x102x\x06{p\n\x19l\xc1\x1e\x8c1\xf3R\x00'\xb0w\x04\x01\x1cCv\x04\x01E\xe3\xd1$\xa0\x05.\xe5\xda&AKb\xf0\x1b\xee\xa5n\xb6\xa3\x86R\xdb3\x93\xe9\xac\xd4c\xc1\xb0\x8d\xe2:q\xd1\x16\xd0\xd4\xc4\x9eux\x8a\x03\xb75 \xdb\xe5\xdf\x1c\xdcR,h\x8a\xc3\xa3p\x8afOSzb\xc2\x7f\xd1\x9f\x05\xfd\xf9_\x90\xcc\x90Zd\xcfV\xecYV\xacV\x11=\x7f\xf2\x84=O\xf0\xb9\x0b\xe4\xeb\n\x03\x9c\x80\x1fC\xe9\xd8\xe1\xfd=\xe3\xa1\xbf=\x8d\xe8A\\z)\x19\xc8\xb3\xbch\xe5X\xc4EK\xde \xe7\xb2\xe8H\xe9\xde\xa9\x8b\x16\x97\xb0\x8d\x99\x95\xd9\x03\xdb\xacN\xe4\x0b\x1d\xf3y\x1eJ\x91~h\xb2taQ\xaeo\n9\x8f\xc2pQfP\x88\xda<\xf1\xc5E;?/\xe5W\xf3\xd6\xf2f\xd8\x1a\x82\xc5\xf5\xda\xe4\xd9\xc2_\x911\xac\x9aoD\xa07\xed\xcb\xa5\xbfzY\xbe\xef\x8d\x1ef\x88\x9c\x1ew\x06F\x18\xe5>\xb3\xf5\xe7\xb6\xb6\x87X\xbc\xd9Z\xdb\xf9\x8a\x9f\xf4<+\xb5'#V\xd0<\xeb\xdaN6\xb9\xcd\xae\xb3\xcap2\xb1V\x0dg\x8d\xae\x9f\xbf\xf2~\xfe\xca\xfb\xf9+\xf6\xf3WM\xd9\x94\xc7\xfb\xcfl\x8b\xed\x7f\xcb\xed?\xe1D\x87.\x9b\xb3\xadi6,S,d\xf6\x9a\xc7\x99\xec&&z\n~\xb3\xaf\x82+\x11|t}\xbb\xf2\x11h\x9c\xc7\x84\xfeu\\\x1f\x1e\xb3R\xa5\xef\x85\xfc}\xac\x8e_\xf4\x97\x16\xaa0+r\x1ae\xcen\xbb\x14>\x03\x06F\xac\x05\xdf}\xd0\x8c\xac\xd00]\xe2]\xce\x8f\xe1\xb4\x0c\x9e\xa7\x9b\xb0\xb5N\xe0}~\x02\xefK'\xf0\xbe\xee\x04\xde\xef>\x81\x05\xd5\x00'\x80\xa6+)\x0b\x9e\xc7\x8c\x1c]\xe1\xbd\xcb\xe2\xb3\x9e\x02QQpm`2\xe2\xe5\xc9\xe8\xa5\xe3\xb14u\xa2\xc0\xf6\x1b\xe7\xe3\xad\xcfl\x9f\xb2\x15 \x18S\x16\xc6\xac@\x88\x05<\x94\x97\xb0\x86\xebk\xad\xb1\xa2\x98&A\n\x0f\xbc1t\xb4++\xf6\xc2\xac\xec\x96\xfa\xcd\xa0\x16\\U7\xed\x99\x96\xfco\xd2ar\xf4D\xed\xec\x8b\x89\xa7P6\xa9X\xec\xac\xd5\xe44B\xda\xa6#\x87\x8f\x81X \xdb\x89\x95\xa8/\xb1\xf2_\xa5\xac\xe0\xbft\x14\x8aQ\xec\xd8\x8c;\xe2\xb4\xc2=2\xc9\x1b\x9b\xa0\xaf\xe0\xaeI\n\x02\xf2\xc6\x8b\xb4\x1b/(7^\xc4I\xdfH\"}g\x8c\xf4\x9d\xc11DG0\xa3\x1b/\x98\xcc\x9a\xa4\xef\xcc\x10\xd0i\x85\xaa\xa6\xc44\xe7\xb1\xbdj\x9ds\xbaf\x0b3\xfd\x84F\xd0\xf6\xeaQKB\xa2_3\xcd\x92X\x18\x96D\xd8E\xbf\xa2K\x00#\xd5\xfa,\x10fW\xc1'S\xef\xe7\xa3\x19\x00-#\x1ce\x0d]\xc4y_\xa5\xc9\xea\xa2\x1cS\xd6\xe8{\xb9\xe2\xb4\x99V\xca\x95s\x83\x91\xab\xca\xc8\xf5.\x92\xb8\x03\x97\xd3\xac<\xa1-,\xe1\x18\xe6G\xb0\xa4\x8b\xc4<\xa5\x18ZJE\xb27.,\xcbEL{9\xa1\xfd]\xd2_\x97V\x89t\x03\x13\xb5K\x81x'\x9f\x82\x08\xae\x12\x80w\x1d\xf3\xd0\xb1\x19\x85xC\x17.\xbb\xb9\x1f[\xb7`\xa2\xdd\x82a\xb9\x05\x13\xc7\xe5 \x10\xc1\x87cH\x8e\xc0\xa7\xd0\x0c'~}\xbb\xf9\xe6s\x0eQ\x07vU\x01r\x88:]\x16\x7f \xf3\x8d\xb8r\xb7\xab!\xa2[\xae~\xfe\xcaq\x84\xdaq\xf8\xe58B\x8eJB \x95\x14\x0c\x95\x14p\x0c\xe1\x11\x14t\\\xfe\xa4h\xa2\x92\xc2\xa4E\xe2(\x8cLrC \xe3^\xca\xda\xf6\xd2\x17r\x97]H\xfb\xc9NV\\\x08\x9a\x91 \x89\xa7e\xd7\x9c\xe6V\x8bM[\xad\xc9\xe6\xb6o5\x90\xa1\x8b\xe1~\xe5H=\xe5\xbe\x9b\xb1}G\xb1jP\xee;\x8a\x9cW\x1c9\x9b9T\x81N3u\xef\x05.\xcc\xca\x99G\xa4\xb8\xf5\x8c\x02\xc5\xa6\xe3\x08&\xb3K\xfa\xcc\xa9v\xa1\xdf\xc6s2\x8bi\xe3Nl\x92\xe5\xa0\xc5\x8a\x0fNs\xf5\xea\x0f\x98l\x9d\x9d<3\xd3\xe7\x92\x05\x8bb\xb7U1\x060\xae\xbdk\x9eK\xb1\xa9\"\xb4\xd1\xd2r\x15\xb5:G\x97Z\"\xee\xff\xa5\xd3\xfe\xb1\xc7y\xd1~\x9cO\xff\x87\x8e\xf3\x9b2\xcec%\xffi=X\xbb4\xebK\xc4x7-\x18o\xd9\xb5\xeb\xe9)\xbdTw\xfd\xc2\x85\x9b\xda\x89\x8b\x1c\xe2M\xf7Y\x0b=%J\x9d\xc6\n\xed[u\xd5\xdc\xaa\x95|G\xfeT\xfc\x925\x85\xcc~\xecQ\x8a\xa3\xed\x1f\xcb\x9f\x8c\xc3\xde\xf2\xb3,\x9cWl\x92\x1d8p\x1e\xc6\xd3\x94\xc0y\x92.\x8a\n\x01\xfdk\x14\x06$\xce\x08\xbc{sQ>\xfcq\xbb\xfc)tR<\x8d\xd9\x9c\xe4\x92)\xd7\xf9\xdd\xf2:\x89\xb2\xa6\xae\x8a\x97\xae%\xb9\x94\xbek\xea\xae\x1a\x1fp\xcb\xca\xbb7\xd9Y\\,\x19\xda9\xd2\xc2\xcdH\xc4\xe8=\xa9pS\xf3\xe6\x18\x94Z\xc3\x89\xdcp\xbb<\xba\x83\x85u\x93\x7f\x1d\x98|\x11\xc9\x04\xb1\x8e5%\x96\x0b\xd6\x1e\xb34\xd4\xc2\xee\xbd\xbf$\x99M\x9c\xc9\xe0\xb2\xb5\x0355\xf1\xef\x0fL)<8\x82\x18\x8eaH\xffR\x84\x97O\xac+\xba\x15X\x0f1\x0f\xd3\xcb\x85\x9f\xbeL\xa6\xc4\x8e\xd1t.\xd6\xf7\xd7\x1a\x0cG;\xbb{\xfb\x07\x87O\x99}KK_s\xc5\xa6\xadK\xc4\x95\xabq\x84\x00$\x0b5\xab=\x8c\x8bXw-I\x91\xe8\xc9p3\xb4\xb6\xb2\xd2\xb6\xc2\x94\xd7\xc4\xbb\x9aE\xfe<\x83'PPZ\xe5\xa5\x1f,\x08K\xa5@[\xd1\xcbxo\xcaLG\x154\xe8\x17)\xd1$\x80\x06\x11\xa7\x82%m\xc2\x82M\x9c@\xc6\xb2\xb8\x02\xed\xe7\xb55!zV\xed\xea\xc3Vm\xfb\x0d\x8fx\x1fO\xc2\x8e8\xea\x19\x02\xddw\xbc\xabi\xb2|\xf3\xaa\x9d\xa2f\x16\xb2Z\xaeN\xbepTGU\xd4\xd1\xe4\x08\xa1\x91`P\xfa\xf3\xf0:\n\xe3\xb9Yy..\xda`d'\x94\x8b\xecjP\\3\xdbw\xa1\xcd\xa3K\xbe\x02\x9e\x91FC\x08\xa8\x97Y\xe7L\xaf\xd4\xb6vF\x16\xed\xa7\xb1\x98A5\xdd\\\x12bi\xde\x9f\xe8\xd7\xe6\x9f\xf4\xdf\xeb\xb6\xc0\xb4\xb9\xb5\x19\xd1\x9aU4(\xbd92\xec~&qa\x96\xd7\xb0\x81%M\xc4\x03w\x7f#\x98\xda\xdb[\xf9)\x89q\xc3:\xb2vA\xb3\x01p?U\xc5\x0d\x83\x83jI\x91\xd2U\x11\x87q\x84U\xa4\xde*Y\xd9\x8e\x83\xd8\x8a\xf6Y\x98U>y\x02+z\x96\xaa(E\x90\xac\x7fj\xb6%\xb8\xe3\xfa8\xe7$\x7f\x19%\x19\xc9rq\xc6\xbcN\x93%\xed\xf2\x18\xa6\xaeZ\xb4Y\xa6\x9d\xfc\x12\xf4\xfeT\x1b\x97^\x82 \xca\x0b\x99I\xba\x84\x13y\x18\xc2\x9c\xfb\x87\xd5\x81\xd8\xe8\x1c\xfd\x86vLt\xb2\xabsa=\xfb:\x91Z\xc6\x98\xcc\xd6\xce\x0e\xba\xf2T\xcf%7\xba\xf2Y\x07\xa7\xc3V\x98T\xdc\x11V\xf7\xa4\xaa\xfb#\xae\x13\xd4\x8f\xda\xd6\xce.\xb6\n'\xf5\xb7\x86v\x8e\xca@\xfcl\xc5\xe4b\xc5\xe01!\xf7\xdd\x08\x7f\xa9P\x1b\x84W) \xe8\x96\xadvl\xc3nD\x14\xe1KC!ub\xf9]\xafe\xd3\nf&L\xe7\xd1\xb2\xe9\xc9Y\x1b.\xdd/E\x14\x19\x8d\xa5\xf5<\xf8\x02\x9f\xaa\x04\xa4\xdc\xc5\xea\xb0\xac\xbeR\xce{\xe6\x1d9\x06k\xe4\xedy{\x96\xaeMM\xc0\xe6\xab+\x86\x01\xe8\xdf\x13q^~+);\xd0\x19\xe0N\xac/a<\xa5|}J\xb2$\xba!,\xf7Z\x9ca\xae)z#D\xc8\x1ff\xf4n\x95\x92i\x18\xf89a\x9f\xacR\x92\x91\x18\xcbq\xf3\xffs\x9e\xec\x8de}{\x1e\x85~F2\xeb\xb2I.O\xac,\xf0#?\xc5\xb2\xe4\xd7\x82\xc4\x01~\xb7\xf4W\xab0\x9e[\x97\x1d\x92\x11#y\xe5\x82__ \xe1\x8c\xe5\xb9\xc8\x85'\xac\xcc\xe1\xe6}\xc3\xb4\xd3Z\xb6x\xd8 \x0f\x9d\xc1?\xcc\xd0w\xb7b\x1bS\xfb\x87\xcf\xf1\x978\xb9\x8d\x81\xa9.\xc0\xfa\x81\x13\xa8?X\x10f\xb0$9%\x80\x90KD\x03oHf\xac\x0cae\xfe\xf6\xfc\xdd[\\\x04\xde\x0f\xcaju\\\xc8\x17a\xe6\xe5\xfe\x9c\xae8~G'\x0f7:\xfe\xe0\xf1\xed\xf9;>\xa1\xf8Z\xfc\xbe\xbf7\x8b\x96@b\xd3\x15\xb3\x07^c\xb9.\x98[Ky'\xd7\xda\xea*\xa1\xad\xb5Z`,\xbctu[\x1fO\xb9\xf4\x18f+\xef\xd4Q\xf35\xc9\xc7-\xee\xea\xa5\xe4\xc5\x8a\x05k\x0f\xeae\xe5\x85\x8c\xec\x1cs\x1e\x95\x9f\x96\x1f\xf8B\x9e%hB\x8c1 \xaf\xb7\xb8\xaf\x08'\x9e\x90\xcb\x9eK\x93^\xfe\xa4d\xc6LR\x9f\xc6\x82\xf2\x1d\x17\xf8\x92\x0e\xab%-\xd6\x95ii\xe3Rc\x0b\xbb\\\x82b\x81W\x165\xf4@\xea\\\xd9\xbdx\xf4\n\x85\x8dvG\x8em\xdd~\xc9\xd4\xf8j\x8c+\x1f\xee\x1b\xd8\xf2\x1d\xc7cR\xdd&s\xaeM\xdc+\x99\xe3\xda\xfd\xfc^\xf8\x02G\x91\xdb\xfd=\xd8\\\xf6\xe6\xd3\xd9\x0f\xc5C\x1f\xf5\xb0cH\x1c\xdbb\xfda\xc6`\x92\xb3\xd4\x83\xe3ey\x82\xa9\x92\xd3>\xb0\xd1#\xfd\\\x0e\x15_\x0f\xdc%\x80\x19\xda\xb1\xbd\xb7\x7f\xa8\x06\xacO\xf8\xab\xa7CG+7\x08\x8dC\xef\x1f\xa3\xde\x10\x9f\xfe\xe1O\xcd_\xe5\xbel\x13\x89\x0bmD\xdb\xc1\x00\x1c\x81\xab\xf6}\x15\x11\xa7\x17\x81)\xce\xf1\xa5\xf0\xae\xfa\xb0\xb3Y\x90\x08\x05S\xb0Gz\xa5,_\x96\xf1}\x88!\xe1\xcc\xef\xfd\x8e`*\xed1\xd8J:\xb5`bH%\xeb\x19\xc1\xbck\x98\xe3\xa6@\xd5u-\xef\x1a\xe3V\x18%[\xb0\xbcj\x94EbHW\x8e\xa4\x9e;G|\x9c\x06\xe6\xb5_`\xb7\x90\xa7\x16\xf3\xb5\x88\x0e\xa0_\xbe\xaf\xee\xa0t\x1b\xe8\x18\x9bIi\xc6\xb2\xf64c\xd0\xb3i\xe0\xcb+\x14(\xd67W\xa7\x1f\x9f\xf6\xa9\xe0\xa1\x1a/\x1f\xd8\xea\xd4\xd0\xcd:\x91\xb7\xd0\xe6\xfayN\x96\xab\x1c\xf2\x04\xa6\x84\x1d\xf5E\xca\xbc\xd9\x84\xbdni`\xa0*\x03\xaa\xcdl\xf7\xa2^%:u\xbf\x1d\xc9\x0f\xf7\xb5H~4\xfc\xbf\x16\xc9K\x07\xa0^\x1c=\xdc\xd3\x82d\xf7\xa9F\x1a\x1d\xdb\x0d!u\xc1\x1e\xab\xa9M\xfaz]\xa3\xf2\xc1\x05f\xbd\xb2\x02\x0c\xe0\x0d\x99\xf7Z\x8f\xaa\xa6e\x81\xbf\xe8\x0b,\xca\x02\xe7\xfa\x027e\x81\x8f\xfa\x02\xcb\xb2\xc0\x0b}\x81yY\xe0g}\x81;8\x81)\x9cB\"\x92.\xd1\x99\xe5\xd9\x97~7e\x11\xbb\xc6h&\xa5\xb6W_\xe8\x8a\xd7\x9c\xc2\x18\x16\xf4/\xcb\xecd\xa7\xbc\x95\xdf\x1f\x9c\xaa\n\x03\x9b\x8f\x9a\x9ei)\"\xca\x1d:1\x98\x9a|\x03\xf3\xe0^)\x11\x8a\xae&\x11\xd3\xb1\x14\xf6\x1d\xaa\x7f\xe8h(\xb1\x1d\xc0)\xbe\x841\xaa\x81\\\xb8c:!\xac[k\xbf\x85\xa5O\xb14\x8caI\xcb\xd1JB{\x86&yc\x98c\x07\xb0\x9a\x13\x98\xc1i\x07c\x00\x12\x83_\xd1\xb8z\x0b?\xf9B\x96n\x11f\xb5x\x1e]\xe2\xd3\x0c\xf3#\x83\xad\xea\xd6\xba\xbe\xa3W\xe0g\x04\x06\xe3\xcerP\xb7\x8f\xd1L\xa1za\xcd\xc3\xf5k\xb6u\xf8\\\xbd\xb0\xf2\xd1c*\xd7\xc60\x92\xaf\x0ea\xb1Z\x996W\x99\xb8\xccu\x95b)f5C\xe7\xdc\xad\x94\xa3\xfa\x1a5\xdau\x90\xc4\xa1\xd5\xfebr\xd9r\xc3\xea\x02\x88\xb3d\xd47\xca\x86\xa8N\x91\x19\xae\xfe\xd7\xfc\x0d\xaa5]\xc0of.\xfb\xcc\xb6\xef\xbc\x1b\x96\x14\x1b7^u\x87\xb8\xc4a[n\xe6r\x8c\xf4\x89~sM\xff\xdb\xb8\xa6\xaf\x9e<\x01\xdf\xbev\x01\xab5\xa7(\xc9\xbc\xd7\xcci;\xf3\xfe\x02'0\xa2?\xce\xe1\x04v\xe9\x8f\x8fp\x02\x87\xf4\xc7\x0bZf\x9f\xfe\xfa\x19N`\x07K}\x86\x13\xd8\xc7b\x9f\xe8\xdb\xd1\xa1[\x93\xb70Q\xfc\xbaR09\xeeT\x85=n\xc3x\x9a\xdc\xd2!\xb1_\xde;\x0c2q\x82ZL8\x15\xef\xc7\x86\xcf3\x12a\x10e\xfaW\xfd\x14\xdf\x8dAL\x84m\x89\xd9^\x84\x99\xe5\xc8\xa6_Zq\xdb\x9c\x8b\xdb\xe6\xdf(n\xeb\xe2\xbc\\~b\x8f\xf6\xd5\xd3\x16\x03\x81\xd1S\x9eE\xcaN\xeb\x9cT\xda\xceI\xa5\xa6e\xa1e\xa0\xda=\x1aPBEx`\xb0\xb0\x96\xd9(w\xb5\xc7\x7fT\x901h\xd4\x83\xa44r\x1ak9\x9b \x89g\xe1\xbch)q\x9b\x86\xb9x[\x1f\"\x86\xa0g\x07r\xec\xd6T\xb1\xd0=wfym \xd1\xd8\xde\xdb\xd9Q\xa6\xa8\x9a\x91Z\x7f\xf4M\xeavH\x8d\xfb\xd4\x8b7\xe3>\xfd\xff\xc6\xb5\xa7\x8e\xeb\x8f_z\xe52j\x17\x15\xd6\x94%\xc3#\xc8\xb5\x860\xb9\xde\x10\xe6F\xcd\xd4\xa0\xb5NoDr\xeb\xb0\xea+\x0dUx\x8072I/\xb9\xf7\x94\x89\xe3\x01\xbd\x89\x00=\xa8\xde\xef\xef\x0d\x06\x07\xec\xfd\xfe\xde\xde\xce\x1e]I\xfc\xd7\x13`\xf2&z\xb7\xaby.*\x1c\x94\x95\x1d\xb2\xe7\xc3a\x95]J\x14\x1a\xee\x96\xa5v\x86\xb5\xcf\x87\xa3\x83\xf2\xd5p\xef\xa9\x03<\xbf\xd63\x18\x0e\x87\xbb\xc3\xe1\xd0a\x97\x04\xd3&T4\xbe\xba!\xcf\x02\x87\x9d6\xa11\x8a\xfe\x18\xc06\xc1\xb6 l\x9d`\xf9}\x07\x9e=\x83\xa1\xca\xbe\x8b\x8b\"\xbf\xbd\xfd\x9d\xd1\x80~5\x1c\x8cv\x10&FM\xaf\xce\xac\xb6I\xf5k\xd1\x9a\xeeS\xad)\xf8\x0dw6\xdd~bO\xfc\xad\xdf\xfe\xe5\x92\xfe?\xd8zz\xf9\xfb\xd0\xdd\x19>8G\xdbs\xc5\xe0\x8dR\xc5\xdb\xff\xf9/\xb6}:\xfe:\xf1\xb7f\xbc\xf0\xe1\xc3\xfd\xa4\xfc\xe98\xdb\xcaW,\xe7\xec\xeep_+\xb4n7\xc5R\xc4\xa5|\x88\x89\x1d\xf0\x14\xcc\x01\xe3\xd0w\xf6PO\x92{\x01\x1f\xf1\xf3\xdc\x1e\xe0\xb2\x88Dx.F\xabc|\xab\xaf\xcc\x946\x9f\x0c/\xeb\xb9\xaf\xe0\x140\x80\xea\x9b8\xb7\xf3\xd2D\xcf\x85\xe1>\xa5h\x1a\xaf\x86\xf4\xd5\x00\xe3\xb4\x16v\x8cD\x8f\x01\xcc+\n\xb8\xc9\x93\xe3g\xd6\xe5v\x1d8S\xe9\xcd\xbc\xfe\xaai\x02B/\xeb\x895\x06\xeb\x89\xbf\\\x1diB#[\xc7\xf86\xca\xb5/\x9f\xe1\xcb\xb9\xf6\xe5\x0f\xd6\x0f\xf4\xe5\xafE\x92\x1f5b\xd15\xa7\xed\xc6\x88S\x16\xb2\x11\xb6\xac-\xe0V\xba=\x84x\x93K\x06a\x86\x1eK\x9a\xc1\x85\xe1:\xfa\xe0\xd6dVR2Lq\x0c\xe6z#c\xb4`\x149H\xf8W\x06\xe6\xbeKum\x0coH/2\x89/y\xe4\x1bm\x19]\x0c\x91\xfa<95Z\xdb\xc5l\xc0=\xd2\xe9q\xa0[\x1368\x8e@.y\x04\xf3V \x11\xff\xb4q<\nSW~\xbe5\xcd\xa9\xeb\xdd\\\xf8xN\xd3\x9fE\xcc\"\x1d\xbek\xcfgWJ\x1e\x84b\xd4\xfa\xe5\x17\xcb\x81c\x18p\xcd\x16)\xe3,\x86.X\x7f\x1eZ\x8e\n\x99\x9f\xfc(\x9c\x9e\xc5y\x98\xdf\xbddf(>}\x81x3\x99\x92\x8fI\x88j\xea\xc2e\x9ajZ\x17\x96\x0eI/A\xb4\xd4\xb5'\x86\x9ee\xae\x9c\x18\x08\xbb\xc5\x06\xff\xd7\x1c\x03\x84w\xb6\xb1\x12I\xd80\"\x83\xa8v\xea\xc2\x8d\x0e\x19\xb51Ak\xc9\xd8\xa5\xa0\xd6U\xe0\xcbS)\xc1;\x8c\xf5\xf2\x98\xae\x1e\x19E\xeb\x0dn\x8f1K\xfb\xeai\xcbD\xeb{\x87Z\xd1\xfa\x81Z \x13\xad\x0fGj-\x8f\x93\xad\xbb\x92\xf4\xdc ^_t\x89\xd7o\xba\xc4\xeb\xcb.\xf1\xfa\xbcK\xbc~\x07'L\xb6\x8d\x923.\xe3f\n\x13!A7\x8a\xbc\xcd\xa2\xf5\xc5\xba\xf2\xf8+8\x81kI\xd8G\xbf\xb9\xae \xff~\xd7\xa5Q\xaaD\xechY)\x89\xd8\xd1+\xd3f\x82v\x14\x91\xdfA]\xd0~\x87\x82\xf6S\xb8\x831\xc4\x0eJ\xd4\xe9\xb1\x8c\xc2\xa5\x00\x8fp!&G\xc9\xb9Q\xa0X\x98\x04\x8aw\x8c\xc4\xb8c\xe2@!2\xfc\xec\xb8\x80\xb2\xc2\x0d\x9ee,\xe4\x02\xc3\x15\x06\x08\x10\x02y\xf1\xd6\xbe\xe2\"G\xa301\xf5\x02\xa6\x9eJ\xdc\xffi\xc1\xa2Y\xf5\xa5*\xb3\xb8\xeak\xa0\xaa\xc4\xf8\x06Uw\"\xdd\xa0\xdb\x96J\x00\x15\x9a}hP=\xdc\xf0\xa8\x01\xdc\xcc&\xc4\x1c\"\xda\x85W``KtM0R\xdf<\xf22*\x95\xed\x82\x85\x11\x15~\xec?\x9c\xa0\xe1\x0coH\n\xba\xec\xbb%\xf9\xe4\xa0U\xcd\x0f\x0e\x8fF\xf6\xactu?\xde.}\"\x9e\x19\x03\xfe\xaegP\xa7\xf1X\x8b\x99\xea3\xb7\x0b\xc7\x85\xd4N\xbd\x8f\xb0 \xa9\xf7\x1a~\x84\xa4=\x02\x83\xe0o,\x0b&\xe4\xd2\xa6c0\x02)gF\x03\n\x05}\x7f\x0f9w\x88\xa3_K\xd9\xe0\xeb\xc3u0 #\xc6O\xae\xb15\xddG\x15\x8e\xba\xeaU\xdc\xc3\xfa$_\x84\x95\xd1\xfa\x83,on\x9a\x19\xd0\xfab:\x0c\xa3\xb4\x1aq\xd5\xc0\x05r\xe3G\x8em\xb1\xc7U\xf5F# \xcd\xb1Y\xc9\xdc\x11\x93\xb1[\x1d\xaf\xf6\x9d\xa4\x905Q\xe3S\xdd\xe6\xfc\xfe\xa2\xc6^\x9e\xb37\"\x19E\xa3\x01\x91xb\xacMT\xb1\x08\xb3SV\x160\xf1\xf0j\xb9\xd0\x84\xe7C\x91\xd89\xf6\xb2\x15 \xceIDh/2\xcd#\xbc\xfb\xb7,i\x15\xf7\x89\xa3\xcc\xf4\xad. \x8e\xb8x\xa7}\xbb\xa0\x0cmi \\\xd7\x1e\xd25\xa8XH\xff\xfe\x80\xb1lb\x9d\xa5\x80|}H\xc3\xb1\xc6\xdeF\\\x0f\x18\xd5\xd3\xd4l\xeeB\xd8\xf7x\x85j0\xe2\xd4\xb8\xf5\xd3\xd8\xb6p\x95\xde\xa6\xfejE\xd21\x04I\x11M\xe3\x1fr\x98\x13\x16\x17\xd4r\xdc\xa6\x9fa\xb3 \xad\x17\x99@dt{\x0c\xfe\xa1\x86\xf4\xcd\x86[\"\xe3\xf2\xcdGiZ\x7f\x15\xaa\x9bO0\xae\xcd\x944\xcc\xf9\xae\xbe\xc9v\xbc\x81g!\x8d\x9fW\x0c\xdan\x17\x13f\xe6\xfe\x0f\x9d.\xeeU\x1d\x15:\xc1\xa7h\xe3\xcf\x08\x91J\xde\x8eqCE\x02l?\xe6\"\xf7\x0d\xc3\x88\x1f-R\x1c\x1d\xa8RBLy\xd1\xe4\xd1d*\xa0\xa4\x06\x18\xda\x96\"\xb2\x887M\x8e*\xa5\xfcb\xd2\xcaQ\xea\xa1\xa7\x0f\xcf$\x8f\xa6\x1f\xaco\xfa\xc4V\x16\xae\xbdL\x03[\x03\x03\xed\xba\"\x0d[s\xa9tx?\xd6\xfc\xb2\xdb\xcc\x7f\xae\x8b\xf9E\x92D2\xb3\xd9\xab}I\x90\xac\xda\xa7\x0b\xab\x1bu1\x84\xdcv[uZ\xf2+k\x80\xfa\x99-\x9f\xb23\xa6\xf1\xdc\x95\xa2\xe6\xd4\x0b\xab\xd1s4\x87\x13\xba\xb4\xa3\xeb1\xda\xe8P\xb4\x8a\xe4Qj\xc7\x8ekN\xdb_\x1e\x0d\xa2\xdaZ\x89\x1a\xe1\xfe\xd0h\xcf\x9a\x93\xdcb\x91j\xe8\x9cg\xe2\xae\xb9I\xad\xe7A@\xb2\x8c\x9e\x7f\x18\xab\xb9X\xd19#S\xd36\xb5\x90d\xe1u3\x86\x8c\x99\x87\x95\x0e)kn\xe4~Vb\x0dw\x84\xb5\xac\xc4\x1e\xd7\xa4\xbab\xbe\xa5\xc9N\xb7a\x83\xcb\x81\xce\x88,\xb6w\xf6v\xb5\x8a\x91}Uz[\xf0\xe2\xaa\xe7\x02J\x9f\xecCu\xafD\xac\xd1]u\xe4L\xf1\xaf\x96\x9ei\\\xadV\x18\xb0\xb3\x0eS\xb4L\x9b\x93\xfcc\x92Dd\xaa\xe6\x87Xh\xe4\x1a7%2)\x1f\x97'\xeb\xb2\xc1\x1d\x9cy\x98\xde\xea\x13 \x928\x08#r\x91\xfaq\xe6\xb3\xd2O\x9e\xc0\x0d0'\xff\xe1h\xc72YOP\xeem\xa2l\xdb8\xccY6\xcfq;\xe3\xc5<]\xc34\xbf+i\xdb\x8ce\x18\xc3\xbc\x18\xecX\xae}\xa5\x88\xa54\x82\xabu\x1a\xd98\xa9\x9a\x81S\xb0g(\xb5\x0d\x08%\x19\xcd\x9f9.\xdc\xdaH\xfe\x95\xdf\x9e\x18\xc3\xb0?\xa8t\xe6z\xc0 \xfc(\xba\xf6\x83/\xff\xbb \x05\xf1R\x92\x91\\\x11{<\x16\"\xf5\x9a\xe3$\x0fgw\xcf\xa3H\xad\xbd\x1a\xc8\xa5nI\xdd5\xe3\xff1\x1f\xe7j\x98\xd2\x9a\xb2\x9d6\xb8\xf2\x95\xebj\xfa\xd7\xd8\x07\xa2\x19\xcd\xba=i[\xd5R%\x1b\x83v\xdb\xa8\xeb6\xe35\xe2]-\x93\"\xce1\x15\x06lA.\xdf\xb7V{\xd5F\xdej\xe1\xa2\x88G\xeb\xab\x96\xc5\xfe\x18\x8ev-\xc4\x9c\xe2\xb9C\x7ffI\x9a\xdb\xd7\x8e\x0b\xab\xcd\xcdz%Ud\xba*\xaca\xce\xa3\x1a6\xd7\x0b\x17tR\x04:\x9b\xc4\x06\x0fQ\x1f\xe7\xe8jE\xe2i\x18\xcf_\xf2\xd9\xcb\x9a\x0c\x1c\xba\x156\x0b\x96\xb3_xQ2\xbfHVo\xc9\x0d\x89>a\x88'c\xa0\xa3\x1b\x1e\xbd\xd6\x90\x9e(\xf4\xae\x82\"MI\x9cs\xc6\x0c\xf3\x89c\x9e\x03?\xc8E\x1b?3\x16\x0b\x8f\xe4\x88\x8d\xa2\x11g\xcba\n\x03\x8be\x03,VS?',\xb8WD\x97\xd4{\x7fI\xe8\xaa\x14\x0c\\\x1e.\x89\x9dt\x19\xab\x00\x87F\xe6\xadH:K\xd2\xe5g\xac\xf7\xcd\xec=\xa1\x84\x85\x9f\xde\xd9\xa1\x8bF\x0d\xcd\x85\xcct\xa7 *n\xa5F\xcf\xe2)\x8b\x0c\xae\xe7>{D\xbe#\nf \xf1\xaf\xf4\xaf\xedO\x82K\x97\xef\xc2\xe2:\n\x03\x11\xb8\xc6V}>\xfe\xd4\xfc\x95\xd8\xb2\xdf\x19D*R\x9c\x93\\\x1a\x1b\x9f\x90\xac\x03\x8d\xf1\xad8oC\x87\xc2-4I\xfb\xe0\xc4v\xb4\x14z)\x89\x88\x9f\x11\xbb\x89\xa0\x1c\x03\xd6b_\xb6!\xa4Z\x9d\xba\x99\xee@v]\xa1\x86\xf8\xd2\xea&\xb6\xa1\x02i$\x16$\xcf\xd1\x89>M\xc6N\x88\xc2-E\\\xd0\x93\xe2\xd5R\xa1k\xd6\xf3\xa7S\x8a\x9c\xc3x~\x91\xd8w\x8a8\xef\xb6M\xcc\xc9\xa3\x0b\x95h\xf1\xfe\x1e\x16\xc6(Y\xb3\x0e\xb7:\xa1\x88\xbb\x93\x8f\x1c=\x86!b\xf0\xf6\x95HKO\xd7\xc2]9\xad\xba\xd4v\xdaN\x19{\xc3\xa8<}\xf3\xe2\xe4\xd0\x04\xb5\x03-\xfd\x08\xb9|\xd4\xd7\xd6tWG\x8d\x82\xa4\xb3\x06/`\\\xed,2V}\x81^Sn\x8cL\x19\xee\xcb\x9a\xeb\xb4\xcc\x17\xd3\xb2`\x97t,7^\xbd\xaaf\x05m\xfb\x84\xe3\xb9\xcf\x1c\xb5\x97\xe75\xd1\xdbP\xf2\x16\xc3\xec\x05m3\x8c\xe7\xbcQFFb\xa0\x81\x9c\x0b\xe8PZ\xe0]\xb1C\x03\x8b\xbfGm\x08\x17Ji^\x9c`N\xbc!\xd2\x98\xdaQ\xb5\x8ed\x16\x15\xd9\xe2\x85\x02\xd5[\x85\x19\x8a)G\xceT\xca\xcd\xe5\x88/\xf5\xf3g\x16\xb1\x88\x8b\x94L\xc3\xbe\xe5\xb4\xe2>\xbd\xb6\xb0I^\xb0\xfe\x08@\x9f\xe7\xa9\x9f\x93\xf9\xddz}9\xa0}\xd1gOQ\x00\\\x92T\x87\xf8\xc95\xdd:\xbe\xf2Es\xda\xc5GO\xe9G7\xfa\x91\xb5M\x9a\x9f\xf9\xab\x1e\xa9T\x03[\xb3\xe6\\N\x97\xf0[\x8f\xd5\xf5\xd2\x8f\x7f\xc8\xc5\xb2\x06?\xc6&@\x1cP\x10\xc6\xe0c\xe8E\xf25\x87\xdb\x05II\xc1\x87\xe2c\x08\x85\x1c\xaeI\x18\xcf\xc5\xf6\xf4\xe8\xb8\xa6%5\x80\xfds\x19n2\xb2>z\x81\xd6\x19>]C\xce\xb0\x11\xdb{C\xc7l\xb4\xc3q\xc0\x01\x9d!\xbd*\xe9\xf7\x07\x17,\xbf\xa1B\x02FytP\x06r\x13]s\xeaxU\x9c\x8c\x87G\xa84\xc5\xd3.O9\xcc~@\xc1\xf2T\x17\x1f\x07_\x8d\x86\xea\xab\xd0\x14h\xa2\xd4b\xa0\xcd_\x861!\xe4\xf7\xa5\xf6\xa4\xd3[^\xc8tUSWz=@\xd7\x8e\x95\xf5\x0b\xdd\x1d%U|\xaf$\xe5Q\xcf\xe4\xd7,\xe2i\xa9\xa0\xa9\xcc*O\xab1\x8e\x0d]]\xcf\x83\xe8\xbb*D\xc4/\xd9;\xb1\x1b\x18\xd2\xac\x9d@hW\xfa\xae\xd6)\xe3\xfd\x97\xc3JR\xe8H\x86\x00c\xd4\x03U\xddk\x9d\xc3\x7f\xc4\xfc\xad\xd1\xf7\xc7oG\xb3\xd4\x93\xb3\x97J\xc4O}S&\xfc\xd6 \xd0\x9a^Bgx\xfe=\xc6( T\x0d\x86\xe6\xaa\x84\x94\x0bTu\xf2T;\xb6\x9f:.L\xaci\x98\xad\xe8\x01\xf2\x12=\xa9-\x17\xac\xab\xdcOylVz\x1b\xfbyx\xc3\xfc+1\x96c\xf6\x8a\xcd\xf7\xc7\x94\xd0gd\xca\x9eRT\xee\xcf\xd1\x08\xee\xa5\xa94B\x1f\xca\xdd%j\xd8p\xdf\x18K\xdb\x10\x1d\xad4\xfb\xd3ft\x03\\\xd4\xa7\xd8i\x96\x01\x8e{\xe3Y\x0c\x00\xec`\xf0y \x8f=D\xc5\xecX\xfa&\x9e\xf8\x9a\xdc!\x0d\xe8\x08Y\x1d\xe6B\xf5\xd4Y\x87S\xdd\xc31l\xb08\x8e1\xb7\xde\xfb\xa9i\xbc(i\x84\xbd&\"\x80\x13\xa0\xdcU\xd8\xb0\x9aR\xf6\x1bZY\x89\xc8\x9d\x1a\xc4\x81<\xb1\xbe\xfc\x9f\x9acN\xedL\x96\\\xd5\xa7l\xc5\xfa\xf6J\x9c\xea=$L\xcdAmh&\\H \xd4\xd5\xda,\xc9t\xd5\xc4\xabw\x05}\xa1\xea\x8fl\x87\xd9\xf8a\x88\xcc:7#M\x08\xafM~r\x02h\xadf\x9e\x95\xc6\x8c\xb4r\xa7Y\x9e\xac\xa4I\xe9\x00\xda\xfa\x80P\xeaGH(\xcfZ@\xc1\xb0\xea\x0bD\xbd\xbc\xc2\xda\xa3\x13\xa6\x80\xee\xbd\xb8:\xc1\xb1\"i\x86\x99\xc4\xbb\xd7N\x98}d\x85\x19\xdaj\xb4\xd3\xd6\x8c\xfc\xadv\xbf\xd4J\xf7\x96\x9a\xd6\xa6\xa7\x07\xae\x84z\x0c\x0d\x96\xd1\x0c\xf1\x0f\xd3\x84k\xa3\xd3\xeb\x94\x15\x95\xd0\x9aebB\x146\x89//\xb5\x12\xd1j_;.dU\xe7\x98kc\xe6\xf9\xc5|I\xe2\xfce\xe4g\xbd\x1dNd\xb8\xa8\xbe'5\x1f.\x84\x8d!b\xda\x0d\x8fn\x10\x93[\xf5\x18J\x99\xec\xbf\xfc\xd0\xa9\xdda\"\x16\xf9A\x9d\x98\x06\x8c\xa6.\x8f3E&\x18\xfbR>f<\x9e\x8b\x98\xa4\x19\x908H\xa6a<\xafgD\xc8\x17$\xc6\x8d\x87\xc9\xd2\xca\xc3\x0fD\xe0\x17\x1fx\x03\x06e\xb88c\xb9\xc1@/\xd57\xffF\x18\x19\x18\xcc\x04\xf4S\x13\xb5\x88\x85\xc0\x0cCC\x8c\x9b\x1f\x84}n}\xdc<\x9b\xa6\x0f\xac\xa2\x16gp\xbd\x03\x1d\xae\xdb\x17\x0c\xdb=y\x82LO\xb9\x1e\xe4w\xcdC\xbe\x85P\xc3\xd0>\xde\xf5]N\xde\xf2l\xdd1FWA\xcf\xf3\xea1\x1cWv\xcb\xeaV\xfd!\x99\xcd2\x92\xff@\x97@R\xe4\x90\xcc\xe0:)\xe2if\x9a]\xb5MZ9l\x82\x8d\xb6\xfd\x03\xc7\xd8\x0e\xdbs\xfd\xdb\xc9\xeb\x99\xd1\x99!juO!\xd5@\nuE\x80\xae\x08n\xe0\xb1\xee1\x05\xb3\xbe'\xad\x88)oCD\xb4\x00\xcf|\xd8\xbaU4J\xe2\xda\xec\x8f\xf5\xde,\xdd\x04\xa1\xb84\x9f#@\xcb\xe8\x0e\xf7\xf7\xcc\xed\xde*\xf2\xd9a\xdb\xd4od^\x98\x9dq\xbca\xc7\x8ei\x13 \xd4bIh\x83\x1d\n\xac+%\xee\xd1\xed$\x90\xce\xd3\x01\xdc\xc3\x82M\x9c\xde\xe2\x10\xf8\xe1\x8a\xd3\x81\xc7V\xea8\xdem\x1a\xe63/HX\xa7\xdcL\x8d\xe1\x98\x11\x91\x84rZ$\xb9)\x1bUJi\x08\xfag\xf3\x04\x86t`\x18\xbax\xb4\xb7\x07O \x9f\xa4\x1a=\xd7Z#\xd4$^\x85r\xdd<;\xa1\xbc\x95\x89jy^e\x96\xf1#\x0c\xbfB\xf8\xce\x82\xc8O\xe7\x842\xa8~\x0cK\xffk\xb8,\x96\x90\xa1;\xc7\xe0+\xe5\xb3}9\xcd\xf5p\xdfAWNJ6i)\x9e\x12a\xdf\xf7\x1c\xd4\xa2u%J'\x8b\x9c;JH\xcb\xf5\xdb\xb4\x0f\x92\xd6\xdasHe\xbc0\xfb)$,\xd0H\xf31\x9d\x88\xfb{ \x06\x14/\xf7\xb4\"0\x9b\xbd\xd5\xb8\xd6W\x8c\x9e\xa5\x13r\x80\xb4\x9c\xdb\xa1\xc0\xa9\xcd\xb2'\x9a\xedU[\xbe\x1b\xc3\xa3#\xa7\x14\x0d\x1bOB\x14\x88Z~\x16\x84\xa1\xa5\x17\x8b\xb2\x12\x91\x9f\x87\xf1\xb0\xb5\xc8u\x18\xfb\xe9\x9d\xa1\x08H\x12(\xfdq\xc2*A2\xaf\xad\x95\"\x9fm\xb5\x96`\x84vg/^\xdb\xc41\x02\x1c\xaa\xe6\x82l\xd4\xde\x9f \xdb\xea(\x91\xcf\x86\xfb\x11\xe9*\xb3\xd5R\x08\xaa~\x8f\xe0\xc7v\x08.\xc8\xd7\xeeZbx\xf6\xec\x19\x18\xac\xb6\xf9t\xfa\x19\xd9\xdf\xed\xae\xea\xb7.@\n\xa32cE\xa8\xedpzO\x0cp&\xcc\xc6\x1d\x95;\xf5\xe8f.\xcf\x8f\xd6\xf8T\x95\xbe\xeb\xd1\xd7M\x1b\xc7\"\xf6\x16\xd1F\xc6\xe7riz\xfc\xb9\xe2\x10L{5\xba\x94\x98*\x83\xc6\xa1B\x01\xa4\xa4\x189\xc0\xb64\xd3h\x10\xb7\xc4\x94;L\x99\xf0\x1cOn\xe49\xe1\x99,\x91;\xc575\x11\x1d=\xdd\xb7\xca'\x87 b\xa1I\xcf\x1cV\xe1f\xecB\x98\xbd\xf7\xdf\xdb\xb1S\x16K\xf8\xe1\\\xca\xb7\xb6`\xe8\x08\x91\x80(T\xbe\xdcDZ?\xa6\x07 \xe9p\x84@\xcb\x95V8\x00\x8f\xfe$7\xdd\\\x19@\xa2\x8c`m1\xa3\xd7\xcc\xcdm\xf4k\xafk\xf9A\x8bH\x8c\xd9\xdd#\xcf>K\x93%\xe5\x15S\x07\x15\xc35\xae\xac\xc6J\xe5\x15\xfb\xb45\x841\xcc\x95\x15eX!Z\xe1\x13\xaf8\x87'H\xeb\xb8\x069\x83\xe9\xd0\xad\xc4\x17\x92\xf6\x97\xc7\xd9\xc5\x08\xa4\xa7\xadE*\xf5\x04\xe7Z\xb5\x85#?\xcb\xdf\x18>\xc0\xb1O\xf2\xcb\xb6\xd1ky\x97\x1b?* {\xc1\xae0\x08Q\xce\x843Z\xfd\xe8q\x15\xfe\x06d\x12\xb2\xf0l\x86\xd8o\x85\xb4p\xf5%2\x89\n\xd6O\xb1\x14\\\x95\x89\x14\xd8\x89\xc6\xf8\xef\xb4\x8a\xc6\x99*h\x14\xe9!~\xb8q\xa1\x15>\xe0gY\xfd\xd1\x96\xf4\xcc(/@\xb2\xb6\xa2\xd8GL\x18X\xddw\xee+\x9fEO-`\x9bEQ\xe5\x7fc\xfc\xab\xd9o\x8dG\x8a`\xd6\xd4Q\xde\x8dai\x92FX\x00{\xe2\xa5\xc4\x9f~~\x13\xe7\xc3\xfd\x17gv\x0e?\xea\xdc\x18\xf5\xfb\xdc\xa8E\x16\xce\x8e\xa6A#M\x87j\x98#\x08\xe1\x18\x8a#\x0877\xf5L\x19\xf0\xc6px\xa1\x83\xfdG\xad4OQ\x1cp<\x1c\xc2\x16\x04\xadr\x1dQS\xf9!]9\xb4\x9b\xa1\xe3\xb2\xcfa\x93\x03(+\xe7-\xa0\x001V\xc9\x91\xec\x16K\"\xc1j\x0ca\xeb\x84\xf7\xc6\xe5P0 g3lb\xd8\x84\x0c\x9eAQ\x9e$\x05lA\xe60\x7f`\x84\xda3d\xe6\xc2\xad\xad\xb6!\x97\xc4\xf3\x8c\x07\x0b\\1\x1ep\x05\xc7\x90\x1d\xc1\xaa\x0d\xe8P\x03[{>\x1cCz\x04\x9b\x9b~\x1b\xfa\xa0\xc7\x84\x9c\xf7\xa2\xb8\xce\xf2\xd4\xa6|\x82\xef\x02O\x8d\xa1_X8H\xa4\xd6\x8a\x8a\xa0\xf0\xf5e\xc9\x84\xee4f\xba\xdb\x03\xe9\x89\xcaz-\x9a\xeb\x8eE\xc3+{a\xbf\xa6\x1bJ^\x16\x0e\xaa\xe4\x9a&@\xa6\x96\xae\xfa\xb6d6\x18(\xeb\x94smM.]Y\x14V\xb2\xf2L\"\x963\x87K&8\"r\x02\x94\xb8C\xa2\xafK\xa8\x98\xaf;\xe8\xdb~\x83\xae\xc1\xa6W\xc5g\xfd*~a\xff\xb6~\xa7\xbf\xf6\xad\xbb\x97V\xa3\x92W\x96\xde\xb6|\xd6\xa4\xadF\xa4\xa0\x15\x1b\xb6\x9d\xd3\xd3i\x84i!\x1c\xbe \x19+!\xcd\x9f\xcf\xf9M\xcaO\xc3!\x8f\xdaL\xd1\xc6\xde\xbe\x0b!\x9b\xf6\xc4)\x7f\x9a4yF\x94\xfc\xf0\xad\x0b\xfe\xbc\x8d\x9f\xad\xb3\x10t\xd8q\x8d\xc5\x84SH\x91\x07yq\x97\x13\x91\xf1\x9dbU\xf5!WQ\xe5u\x9b\xae\xb6~\xbdl\xeb\x17\x05\xf3;?_x\xcb0.i\xc6\x1e\"[:\x9f\xe8\x1aq\x04 \x8an\xdb\xd0&\xa5\xbd]\xb4\xafu1F\x07\x99$-\xc9\xe5\x03\x11,\xc1X\x82\x9e\xe0\x11e\xa5w\x9e\xc2)\xec\xc2\x98\xdd\x8dv\xe0\x14v\xf8\xdd\xf0\xe9\x10Na\x04c\x93\xe8\x05iE\xd8\x84\x19\x1c\xa3\xb0O\xc8\xeffm4D\x9f\x04\xb8\x11\x1c\xc3ptX\x12rQ\x8b^ \x04\x9da.\xd2'-.m\x8er\x19\xc3\xa7#x\xc2\x88X2\xa1\x83\x1b^:L8@\xd9\x17{g\x08O r\xe0\xf8\x18\xf6\xe1\x1e\xf6w\xe0 %^\x9f\x89\x0cb\xd8\xdd\xec;t\xd7`\xf6).\xb9\x7f<3>\xde\x8d.]e(!\xf6\xbe\xfe\xcc\x97F4\xdc+G4\x1c\xc1=\xd8bL\xf2\x10}:\xc4\xd1`\xf7\x80\x7fw\xcc\x13\x96\xdd\xdf#9+%x\xfb^\xe3\xdf}\xfc\xf8\x8b\xf2ng\x0dh\xd4\x9f\x15\x06\x08\x1d*\x10\x92@\xe6\xd7AV8\"\xef\x1b\xad\x89\x82\x8c\xa5\x92\x1bI`\xd2\x0eQO\x12\x97\xc6X\x94/\xc2\xcfi\xdd;.\xee\xe4!\xc5s\x81\xdc\x9e\x1d\x94i\xe4\\H\x19>\x0f\x98\x18u\x00O\x00\xf3\xc5\xdd\xb3I\xe4\xdc\x0c\xcb%w\x0f<\x95\x1cer\xc4w\x18\x1bg\xf3\x04fM\x8co\xc2\xd2\xdd\x14\xc9M\x19\xa7\xa9M|\x8a\x8aq\x8a^\xbe\x94$\x9f&\x1d\x1d\xb71>\xe7b\x10\x9d\xde\x02$\xdd\x85\xa5\xc9V&\xaeT\xaf\x0c\x04(\xc3\xa2\xa4\xa8=\xa4\xc7\xeb\xe6I\x9f\xce\xf0\xe3&u\x99j\xeeK\x07\x11\x157\x81l7\x8eO\xf9.\xf7\xb8b\xe9\x84\x1e\x0e\xb9w\x1e%\xb7\xe5\x93\xf6y\xd8$U\x84N\x82\x12V\x0dC\xc0\xba\x95y\xa8\xba\xb37\x1b\x1e8\x90{o\xde\x9f\x7f<{yq\xf5\xee\xf9\xffw\xf5\xe2o\x17g\xe7t=\x0dL\xb2\xb8\x139\x89\x0e1\x98\x05\xe9\x9fwy\xf6\x18\x83\xdf\x0b\xdf\x1a\xc5di\xd8a\xa2R\xb3J2\x9fie)\xbd\x00\xb0\xe5\x18N\x92\x1e\x01\x13\xc4\xc5{\xb5\xdb\x94\x1f\x89K\x8f;\x1e\\\xd8\x1dqZi\x96$\xb6c\x14\x87\x12\xca\x901K\xd3'O\x84'x\xf9\xcc\x1eb\xc2\xbcJ\xa9\xd8\\\xaa\x9d\xd9\x0d\xf8\x1864\xb2\x93\xfa\xbab\xf1u\xbe\xbc\xf3\xbf\x96\x91\xa3|\x1b\x05\xcb\xab$\x89\xce\xc3\xdf\xe8t\x1e\x0e\x9fb\xf2\xa1+\xeea\xd3\xb9\xe2\xb5\x13[sJT=\xbf\xb8`\xbb\x87\x1f\x8cT\x7fd\xf3\xf0EZ\x0b\xcc\x16!\xb5\xec Y\xeb\xa3v]\xd1\x91k\xcb\xb8\x06\xfb\xc9st\xf5\xa7\x0d\xb1_\x18\x1cJ+!\x13\xdetY\xa9Xa_hmM\x98\xe1K\xdd\xd5\xad\xcd\xccAV\xec16\x08\x02ZGc\xdf\xd43\xd0\xc9\xb5\xd5\\j\xb5\xd0B\x0c\x933\x0c\xd2\"\xd5\xa5\xbc\x07\x99\xc4\x97FvK\xc8\xa5j\xc7\x83\xad\xcb\xb3\x0f\xdcV\xdc\x84\xee\xcc\xbd0\x13\xe7>7F1\xb3\x812\n\xf7\xff\xa0\xf9\xa3\x97\xcf\x8c\xb9Q\x13\xce\x19_\xe1 \xdf\xb1\x16\xa1Z\xb7is\x91J\xce\x1e'\xb0p\xa1F\xe9I\xc7\xe7\xc6\xa0\xfe.\xbb\xf5W\xc3\xfd\xb6x\x9d\xa0\x06\x0fh\xd3\x13\x11\xad\x9eH6\xd7\xe4=\xc9(\x89]\x99\x0e/\x8b(\x0fW\x11\xa1\x10\x1c\xeeo]\x87\xb9\xf6X\xac)\x1a\x06Gh\xbeK\x8e\xd8\xf2\x1b9p#\xe2\x9f\xba\x98\xb4R\xc7\x7f e\x82\x1cB\x04\x04\x10\xeb`\xd9\x19}W\xb0\xec~#XvF\x8f\x02\xcbn\x03,;\x8e[=\xa2`b\x7ftZ\xb85\xa0\xb5\xbf\xfb]\xa1u\xf8\x8d\xd0\xda\xdf}\x14\xb4\x0e\x1b\xd0:\xd0Ck_y\x9d\xe8\xda\xf9\x83F0\xcc\xe6LX}a\xfc\x16x&\x8f\xa7\xf2(\xb1\xfa\xd5\x8b~S\xb1Z\x890\x90\x90\x1f\xa2\x19\x1e.\xba>M\xa0\xd9(\x96>>\xa1\xbd\xe5w\x9d\x1f\xe3\xeac \xa4\x89\xe4\xcc%\x19(\x1b\xa5\x1b\xd0\x83\xee\x14\x17\xef\xc5\xc7j1\x9b\x9c\xac\xa0\x0f\xb5\n\xbd(Vq\xf1\xc6_\xae\xd3x\x1b\x9d+.^\xef\xf3u\xeam\xa5\x8e\xa1\x1f\x85,.\xde\xfe\x87u\xda\xef\xb4\x1d\x86\xaa\xe2\xf3u*n\xa1\xc6\xa1\x17E\x0e=\xa9rX\x872\x87j4\x17\xfdF\xd3I\xac\x03\x94v\xd1Z\xc6\xfa3\x8b\x0eUz+\x8e\xb51\x14\xd4\x8b0w\xc4M\xb0\xac\xbef\xd3\xa0\xa5\xc9\x1eD\x0c\x12\x1c\xac)\x0cI\x1d\xa9\x93_\x0b?j\x8f\x1f\x01ZiC\x87lA:\x0c\x85\x8df\xeb\xc1\xc3\xcf\x80\xfb{\x8e,KY\x88\xde/\\\x19E\x18g+L+\xd6\xefd2)F\x98\xffRC\xca\xdf\xdaqq>=\xe3f\xd3%]Q\xba\xf3 \x8e\xe4\xfe\x92\xde\xd2\xcf\x83\x85\xbd\xed\xfd>z\xd8\x9e;\xde\xdf\x930\xb6-\xb0Dx\xb0\xb22\x9e\xec\x89\xa5P\xf7<\x0f,\xc7q\xc1:\xe6\xf4\x06\xae+]6\xf4:\\\x0c\xf2\xa4N\xa3\xf6\xef?\xd5*\x8fW;YU\xcfmf{\x8e\xda\x11\x0e\x90\xb1Z.-\xed\xb6\x94\x17\xcc\xd6,i\x9c\xa8\xb9\xf0u\xa7'pY\xef\xfd=\np\x06,\xd5\x9cr4\xeb)>\xee\x8f\x9e\xd2G\x80\xf6\xd1\xa6\xf1\xa6\xf0\x8c\xf7'\xa7\xbfZ\xdd\x84\xaa\xf2\x9d.\x04Je\xe6RH\x07\xb8\x10\x97\xbf\xd2\xf2WR\xfe\xaa6_/\xf1^\x88\xae\x03[t\xf5`\x0e,\xd8\xa2\xcb\xa9\x90%z\xa1\x0b\xbe\xc3\xcc7\x10\x9c\xa5^0\xe1*\xd8\x9ae\n\xd3\xec\x0e\x8e`\xc6\x0ci77gf `4\x991 `0\x99\xb5J\x00i7ia\xd6KZ\xda\x8c\x83\x1f!\x01\x0c\xe1\x18\x8d\x90Q\x02\xe8\xc31\x84f \xa0\x8c\xa5\x82\xa8\x98\x92>\xb1\xc6\xa4\xb6\xb8q.\x82\x92\x9b\xe3\xdbf z\xd3\xba\x7f\xad\xc6\x96\xf5\x90\x1a\x98:\xaf\xad\x11\xc9\xe4\xff[\x1b\x1a\xb66\x84\x1e\xfaz\x0cf=\xbdp\xdf\xd4E\x10\x86\x1cm}\xa5\x10?X\xac\x0f\xda0@\\X\"\xe2\x87\x984\xd99\xba\xa8\xf1\xe5\x1f\x1a\x03\x03\xa9\x91\xfe\xd4\xd8t\xa6\xeacz&IB\x07s\x1c\xcc)\xf9\n\xb2x\xa1'D\xff\xde\xc1\x0c\xe5\xa5O\x7f\xce\xed\xa9\xf7p\xc2\xf5z\xc9\xda\xeeU\xadud\xaf\x17\x17Fu\xc3\x1d\xee\x8e\x96\\\x02\xea!\x9e`P\x9e\xe3c8\x84\x1f)\xfd{\n \x8ca\x08[\x908\x0e\xdahk^\xf4\x1a\xf0\xfb\xb5\x06\xbc;z\xba\xfbt\xff`\xf4\xf4;\x8dz\xd7<\xea\xbc9\xac\x1d\x1c\x16\x03F\xaf\xc1}\xea\xbd?\xbeea\x99\x96j\x0b>y\xf4\xfa|U\x1bQ[J\xc6\x90\xeeB\x04\xc0\xc0e\xa0v!\xe1<\xae\\\xc7h\x87\xbd\xa3\x10\xd8\xed\xd5\x87\xb7\x8f\xee\xc3\xa1\xa1\x0f{#\xf6\x8e\xf6\xe1P\xe9\x83|\x97\xa9t]\x1f\xfb\x1d\xe1\x15\xd7OI}\x02\xff\xfd\xdf\xc4U\x83`\xe6p\x8a\xa9Z\xfe\xfb\xbfs\x97\x9d\x14,\x0c\xe5&=\xb5\xcb\x1dBD\xc4\x11B\x0f\xf6\xf2Q\xeaT!\xc9\xec\\\xf9&\x17\xdf\xe4\xe57\xb9\xf4\x0d)\x9f\x10\xc7`\x03\xecT:\xcf\xd2\xea\x1aaa\x0c\x90\xb9\x96\xfc\xa4\xa4\xc0`K\x8d\xcb/\xae\xb8\x0c\xf3\x9b\x08q\x86\x81\xbb\xa81\xe7\x9cNH8\x19\x13S\"\x80\x0d\x04)\x00\xd2\x95\n\x07\xaa\x85V\xf7\x80P\xd8\x0f\x11\xd5\xe0\xedYO\xb9\x1a\xe1\x92\x19!\xb8A\xaaM\x90\x13\xb2|\xa3\x05\xf7\x89\xe56!\xdcgoX\x12G\x9b\x9bt\xd89\x17\xae\xffxB\xe9\x1e\xe7\x88\x13\xb5\xec\x1b\xd8\x84\xf0\x12~\xd4\xb9v\xebIY\xfd\x88_\xfccF\x0c\x9b\xb0\xb5\x95\x8bq\x1f\xe1\xd2\x1et\x0c\x97~\xf0\xed\x03>\xec\x83\x10\x84\xc6\xa9\x1c\xe3\xd0U\x15\x1cl\xe2\xfa\xb48\xdco.\xab^\x8d\x8e\x0c\x8drK\x0f\x04\xca\xf0\x12\xcf\xfc~\xfdhN\xf6\xb7\xf5\x03\xa9\x8dZg\xfa\xf4cg\xf4Hx\xec\xaa\xfd\xb0\xcd\x00\x91\x1f\x8d\xf0\x11\x8b\xf37\xdc?88\x18\x0d)\x17Q\xbe\xdf\xe9\xd9\xedG\x82\xaf\xd1\xedF\x1f(gc+#\x18\xee7\x87P\x1b\xd5\xcee\xab\x08\x9fv\xfb\xff:\x8c\x06\xcfN\xf8\xe7\xc3\xd1\xa1\xc3E\xe1[\x9cv\\%\xb76\xa5\x12(X\x1d\xc7\xedF\x07\xff\x10\xf4W\x03\x8c\x84\xdb\xd2\xcb#$/\x9bX0T\xb0`\xda\x0e\xa4P\x03\xa4\xd0\x08\xa4\xb0\x07\x90\xbe\x13\xcaD\xdf\xebr\xc5\xa3:\xefG\xc0\x88\x10[\xd2>@\xaf\xd3\x9e\xd8u\x0d\xe4j\xc4fM8\xde\x88\xd8\xaaF\xe4b\x84\xfd\xce\xe8`\x9f\x0e2\x86S\xc6\x08\x0d\x86\x07\xfb\x03\xb8\x87\x18\xc6\xdd\x14\xc8\x1a8\xfa\xd1\xc3a\x83\xb8\xaf\xa1\xf0?n8\xdf\x0f\xd5\xaf\x87\xe9\xebx\x92>\x1b\xed\xf6\xean?\xe8\xf7\xef.\xb6\xdc\xect\x0f\xe4\xde\xd5\xdd\xd7Q\xe2k\xb0\xfb\xe3\xba\x9b`\x95\x95\xa2ac \xb8\xbe^\xdd\xf8^Pktc\xd8\xb7\x1b\xaf\x92\xe2:\"\x8f\x04\xc7ag?\x06\x82\x01\xed\xd7\x8fG\xc2\xa3\xbb\x1f\xc3>\xfd@\xe6\xd9\xc8\xcd\x18\x848\xc8\x86n\x92\xda\x01\xc7\xacXPm\xfbF5 P\x0f\x93\xd8\x81-\x8a\xf2M\x8e(\x899\xc6_\xd8\xe2\xf4\x81\x1b\"\xafBN\x13AI\xc4\x8dc\x92\x15eD\xc4 \x10\xd8\x86\x84\xc9\x81\x8c\xe8\x8d\x16n\xc5b%$\xb5d\xc2?\x10\x921\x161BSc\xa4$AS\x88\xcfJ\x88nm%\x18 \x8e\x93\n\x1a\x90&\x02\xa4\xe1w\x03i\x83\xa8h\xb7`\xd1\x00U\x85%E\x16{{.\xeaQ\x8c\xf9~pv\x10\xe4\xb3(IP\xd2\xcd\xb1\xb5\xbc\xca\xb8\xc9\x7f\xaf\x81\xe8(\x90o\x1e\xcb\xc8e\x92\xe3\xb6\xd1\x9cj\xb6\x87[\xcd\xd9\x90\xcd\x19\x8aH)M\xf5\xf7Z\x03,G*=|z\x0e\xb27\xa5\xfc\x07\x0e\x92\x8fF\x1d$\x1f\xbbf\x90\xc3\xb5\x06\xa9\xa3V\xbey\x90\xbb\xae$\x12\xef5RF\xb3\x88\xd1\x8ev\xa5\xe1\x8e\xaa\xe7\xc3}\xc3\\k\x963\x85\xcc{\xfd\xf4\xb7\x92E\x12d\xfe\x80\xe9_\x1f2\x06\xa8\x0c\x0dP\x19\xe9\xd7\xccN;d\x86\xbd!\xb3\xe6\x11+\xa4\xc72X6\x8c\x06G\x02\xd57\x8e\x07\x0c\x1d\xad\x97\x9d6\xce\x96\x84\x1d%[\x1a7o\xbd=\x18\x9e\xc5\xfa\x83\xa5#J\xef#Op_:n\x88\x10y3\x89z\xc1~\nsLv\xb6\xd3\x01]\xe2\x97\x05\x86(r\x95s\xdf\xa6\xa7\x94\x0f\xcf\x9e\xc1\x80\x9e\xa3\xc5w9\xaf\xd6\xa4\x00\xfeO\x99\xe8\x16*\xe2\x9b&[\xcc\x85D`\x84\x15\x81\xb1\xf6\x8co\xfecf\xfc\x0f!P\x86\xa3\x03\x17\xb6\x86\xa3\xc3\xb5i\x14R\xd3!Q\xd02\x9f\x84\xe1\xb7\xd0/\x7f \xf9\xb23:\xd8\xa7cE\x19B?\xd4\xfe\x07\xd20\x7f \xf3\x88\x81\xfe\x81t\xcc\x1fH\xc6T\xf9\x10\\%\xedA\x8f!\xb7\xcfm\x0f\x12\xa7F\x12}\x13A\xf3\x07\xd23f\x10\xd5\xb7o\xcdHB\xec\xe2\x1eP\xfc'\"~\x0c\xf2\xa7v(\xbeR\xe6\xac\xcb\xab\xa2ji\xdd\xf9RZ\x1a\xf6j\xc9$Ejo\xea\xedc\x06e\x12\x14\xad\xd5T\xe7\xa8\x82du\xb7\x1e\xddR\xa5\x9b\x1c\xa0Cd\xe9\"X\xd9\xd5\xe7\x8a\xa7\x97\x94\xa5\xa42E\x90\x0b\xd0\x0f\xf3\xb2F\xae\xe2HK\x12\x10\x9d\x17\x98\xf7eWz\xa7\xb0\x11 \xa5\xea\xa0\xdc\xad\x8e*\xf26\xc3\x9b\xdcO\xe7$?\xcf\xfd4\xef\xce\x86Z\x9a\xf1\x003\xd6T\xba\xa1o!K\x8a4 k\xb4\x90\xb6\xf5\x97\xd5v\x16O\xbb\xebJ\xeb\xce\x17%\xf4\xeb3*\xd9_\xe5\x18{iK\x9a\xa8\xda\xcbM\xadU.\x12\xb4L\xbf\x95\xea\xe3\xd6\xe3\x1cTn\xa8\x18t\x99+\x07\xb1\xc5\x96\x904 \xb0t \xc3#HxV\x83\xad-4\x0bK`\x13\x10I\"\xae\xa3w\xba\xb8/\xa5\x93\x11eA\x86d\x07X\x18\xaf\xf5\xb2\xfe\xb105\x8aY\xda\x1a\xedk\xf3\xb9d$\xaf\xf2\xb8\xd4Lubf\xf6\x14:\xfa\\\x98B\xef\xd7\x86\x08fa\x14\xad\x87\x084NWkg\xb6\x16\xe9 0\xa4\x06?6\x95\x1d\xa2M\x9f+\xe1\x85\xe6'.\xcf\xba\xd1\x95\x19 $\xde\xaa\x16\xb0\xdcdy\x04\x18\x80\xe8\x18m\x8c\xc5Am\x88\x8ff\xce\xb7\xaa&\x9b\xd1\xe4\xc33\xf9\xb3\x97\x19\xbf\xfb&\xf36\x80\x1d\xdb\xad\xe7\x02NM^\xc5&\xcf\x8fF{\x95\x12`:-\xc9\x9b)\xcb-\xe2T\xe9\x17a9\x00n\xab\x87>\xca\xb5A\x08\xbc\xe8OB\xf8_P\xaca\xb3\x977b\xe4\xd4\xfb@\x07\xfb\x19N`{\xf2\x9f\x9b\xbfl\x0f\xb6\x9e>\xdf\xfa\x0f\x7f\xeb\xb7\xad\xab\xcb\xed\xb9\xc9\xf5\xe6\xd7\xf6\x10\xae\x80\xca\xd9S\xb0\x06\xe8\xf4_O\x13:V\x1e\xd4\xfbfh\xf0\xb5Q\x01x\xa3\x0f\xd0\x96\x03\x8f\x8a3\x84\xed\xce\x1c\x97\x95\x83L\"\xc2\xf3\xeb\xf2:\xb4\xa7P Y`\x9bFb\x07\x07\x9ea4\xef=qD\xef\x1d\xec\xec\xee\xb6!\xdc\x90\xe7\x873\x97\x80r\x93>\x83\xbd\xfd\x9d\xe1\xd3\xae\xc2\xf4b\x89(vh\x7f\xb6\x86\xb43<\x99\xc4h\xe7\xa9\x0b\xc3\xa7C\x17\x86\x87O[\xd0\xba\xb8\x82$\xce\xc3\xb8\xd0\xe7R\x12\x979{\x10\xf0\xbe\xfb R?\x19\xa5z\xf2\xf5O\xd4{\\$\xed-u\xb6\xd2\x9e] \x97\xc9\xfe\xce\xc8\x98BP\\\xfd\xa0\xe2\xfe\xc1]\x8e\xb9\x8f\xc6>lR\xban\x8b\xa7 8>\x86!3t\xd9\xe2\xa3\xd1\xd6\xc0O\xc5\x84\xf3==\xc6c>\xc9\xab\xfd\x1b\xb3D\x15]\xfb\x8c58d\xd9Y\xba\xd2\x1f\xf0\xce\xc4\xad\xe3\x10\xf37\x1a\xec\xf6l}\xb4^\xeb\xf0\xec\x19\xe62\xc0\x00\xdb\x98\xd0 \xa6w\xa3\xc3^\xdd\xc2y\xea\xd7\xaf\x9d\xf5\xfb\x85I\x17F\xa3]\x16\xc2\x03\xf6\xe1 \xed!\xf6n\x8d\xbev\xa0F\x1c\x07O\xd9\xa0\x8b3 \xd2i\x05\xc9\x94\xc0*1x\x91\xc9U\xb2\xf1\xee>b\xbc\x87t\xbc\xbb\xe4\xeb*I\xf3\x0cN\xe0\xf7\x07\x89v,\xc1\x106<\xd2\x1b\x9b7#\xf9E\xb8$I\x91\xc3\xc2g~\xa0\xd7\x84\xc4 B\xe6W\xf0~\xd04\xe0w7\x10D\xc4O\xbf\xa1\x89\xa2\xb9\xe0\x19n\xc5\x18`e\xef\xab\xe8\xc2\xe5#\n>\x95o\x16T\xe3\xc9 \xf3\xe2\xda`\xf9\x8e5\xf5\xd0C\xb6z\xecv\xd4\xab\xcf\xb7!\xaab_\xd4\x97\x81\xc8\x0f\xa17\x955\xa6\xef\x10U\xb2\xa5SF\xcb\xd79\xfc\xb7\xb6\xd0\xac\xab\x94\xd2v\x07\x0f\xa8&l\xa3Z\xac\x8d\x95\xa0\x1d\x03f\x9d\x11\xdf\xc8\xbc\xa6\xb4\x10O\xe5\x9b\xb1\x8av[\x13k\xd0\xeaU4-\xdf\x19\xe6\xc9\xd4\xa9\xda\xe2=\xad\xdf\x8e\xd5,\x89\xad\x1d\xa3M\xa8Y\x15\xcb_\xb6\xb4\x9a\xe8\x1e\xe7\xa9\xcd&Jb\xb3\x00C\xbf\xd4\x9f\xcdx\x12\xda\xe6\xc6Y5f\x04\xb3\xb7b\x1a\x0b\x9bW\x05\xa5X\xe0\x14[\x14\x01\xc4\xed\x08\xc3\xa7b\xdd.D\x92\xecuj;\xed\xfbu\xdah\x16\x89\x88\xc0\xc4L\xd2\xb3\xad\xb0W\x1a\x8a\x01\xfb\xd8\xc6KR\xa6S\xf4\xed\x083\x11\xe9\xd79~@\xb1d$\xe0\x8aA\xc4x\xf6\"\x9e\xf2cv\xe9\xa5El\x9b<\xfc8(\xe4&;v \xf0D\xcfl\x8f\xea\xe6N\\\xfd\x8ev&T\xa7\x98K^\x86U\x1a_\xe9\xa1\xdd\x16P\x12Q \xab\xc8G\x14\xc8b5h+\xa5\xabV~\xe1\xf6o\xc6\x8c\xc2\xc4\x95\xda\x06\xf9\x12\xf4\xc2^\xe2\xean\x08d\xf2K\xc6\x9b\xe6\xe6a\xad.@\xa3\x01\x8eL;\x1a0\x8f^\xfb\xe6A\x05\xd8C\xebN\\h\x858(\x0b\x9c\x15(9\xe1B{\x96\xe6\xe8D\xcaZ\xaa\xab\xee\x86n\xec\xaa\xc5\xc4\x8b\xc9\xd7\xfc\"\x0c\xbe\xb4\x12\xa7b\x9fR\x8a\x80\xd1\xbc\x8d\xb8\xcdM\x93!\x94W\xa8\xc5\x9e\xc1\xb0 \xce\x12\x17\xc4\xcc'\x93\xb2*\xea\x97G\x10onRr-f\x86XR\xe8\xe8F\x98\xfd\x883\x1b\xe4V\x80\x0fe\xf7\x98\x15Z\xa2\x07\x03\xfa_aO%T\xe8\xc2B\xb6\xabG\x00\x9b\xcfF> <\x1c+[\x8e\xd5\\\xd4\xaaM\xbc<\xcc#\x0cJz\x9d&\xb7\x19I-\xfa\x90\xff\xe6a\xf2\x13\x8f\xc47H\x07\xd2\xdf~:\xbf\x11y5\xbd\x1b\x92ft\xfeX$\x93\xf2>+K\xe3\xbb\x1b\xfcn:}\x1bf9\x89\xb1\xde\x1b\xf6\x12\xdd\xd1\xd9\xef\xd9L\xfcL\xc92\xb9!ja\xf6\xf4y\x14\x89\x17\x99xC\x96a.~\xafR\xb2\"q\xa3%\xfe\xf8C\x1c4\xea\x8d\xa4\xea\xccK\x8d\xef\xc0\xc9e\x1dz\xd7a\xdc\x99\\\xa5A\xb5\xae\xd2$ YV~\xccC\xa4HA\xf1\xea\x8d\x04\xb7\xd3\xb6\xf9\x16\xac\xd2\xb6\xa5|\xb6\x98\x86\xe9\xe3z\xc6>\xed\xeaW\xb1\xf4\xb3/=z6\x90\xb6>h\xb8\x10E\xc5o\x15\x19AEO\x90KL\x9c\xcc\x90\x98G\x84\x1a\xa0\x8a\xd8\xda\x90Uu:}\x0f\x06\xb1\x15\x03\xf5\xcb\x8aU\x19C\x83k|\xc4@\x9aH/\xd5\xe2\xd0\xca\xbe\xe6\xa4\x0bk&f\x94\xd8\xc0p\xc7'0\xa4\x88E\xd2\xdeT\x98jx\xc9\x835\xc8\x8f\x9a\xf4DlLx+duZ\xb0\x19\xd7\x07\xa8\xc2{\xb5\xd7Lt\xcfP{\xea\xa8\x02|\x9fb\xdep\xe2\xd7\xb1\xaeof\x961\x17\xd6\x86\x88\xa2\x19\x0b\xd0 \xc3&\x91\xa1\xa1GnHzW\xcb\"\xdd\x95\xda\x0c\x19\xb7x\x92^j\xf8\x1bts\xb1\x19W\xcdp2\x9b\x04\x17B\xc7a:\xb5\xd05s\xf2Z\xde\xbb1\xf15\xc2\xb5 \xc7\xb8\x84cN\x0f;8\xc5\xe0\x14C\x1e\xd98e\x07\x1c\xcb\xb9 )\x85k3\xa9\x9d\xe4-\xa0\x16\x97\x00]\xfb\xa6\xef\x03}6\xc4Y\x9a,[Yv;4\xcc\xc3\x83\xf1\xb8\x8f\xbc\x94dE\x94\xbf.\xe2\x80\xae%\x17\x9f\x04\xc9rU\xe4~\xce\xd9\x94\xce\xcd&6Z\xe3\xe5\x03\xab/#\xf9\xa7GWJgH[q\xed\xa1L\x0c\x88_\xb9wuE\xb2w\xc9\xb4@\xf6\x8d\xf2i\x98:\xd6/\xa2\xfc\x1dY&,soB\x9f\"\xda$\x02\x8b\xbedH\x94\x11\x1d\xe5\xcb<-\x82\xbcH\xc9\xb4D\xb6}\x18\xefGP\x99\xbeBe6\x99s+\xc1<\xb8F\xea]\xc8\xfeM\x1dg\x87C\x06\xb30\xcd\xf2*^\";\x18\xfc\x18X\xf5p\xbb )\x01\xe2\x07\x0bX\xf1\\\xbb\x94\x11\xf0A\x9c%\x9a\xa3\xc3Gk\xb0\xb2SG\x0d\xa0\xd0\xbd\xc6\xd3\xf8~!wYC\x88UR\x8bq\x1dU\xb5\xf9\xc3\xd3\x0dY_\x0e\x8e\xdb\x93\xe4\"Z\x84\x9cW\x08\x81\xd3~\x03F\xfb\x11N\xfb\xe5\x93\xb4\x9d\xee\x03i(^J\xa6E@l\x85\x13\xea\"\x98\xc9\x84R\xcb\x97\xcc\x18R\xa3\x8es\xe1\xf7\x07E %\xb1\x9fu\x91\xb6\x8f\x04L}\x99\xd3\xf5m'z\xb5\x97\xc2\xa7 \xee#\xb6\x87\xc3\x03\xe5@D\xc6\xc6\x1e\xed\xee8zV4\xb6\x87\x83\x01\xa5\xfc\xda\x1a\x00Y\x84'\xd2'$6Z\xabK\x83\xea\x91TLZ\x12\xcc\x18tM\x96\xb4\x1a\xea\xc1\xaeaD\xed\xcc\xf5\x86\x1c\x0b\xd5\xc4G\x8b=\xb6\xf1H>Z\xedq\xac*$\xeb\xfb\x8e\xc9\x9c\xc6`\x8d\xbc=o\xcf\xd2\xad\x12\x8d\xfd\xe1\xd5\x153\xd4\xa4\x7fO\x84\xdb@o\xf0\x8d\x0e\x0e\xd6\x86\x9f\xcc\x85\xca)\xe7j\xb2\xeau\xa7Q\xbf`\xf7\x0ev\x95\xe7!\x7f\xbe\xa7<\xa7{\xc7\x9ap\x9c\xf8\xbe\x88\xa2K%Tx!\x17\xf8,\xd2\x9d\xab\xa524n?E\x13\x04f\x0fx\xe1\xcf\xcb\xcc\xde\xdf\x01R\xd2\x89Bo\x0b\xcc|2\xe6\n\x16\x08c\x8ev\x99q'\nF\xc6\xc8&?\x16\xb0{OGz\xc8>\xdd\xeb\x9cx\x0d\xbd,\x96q\xc2\xdej\xb7E\xca\xb2\\\xc4%\xd8\x1e\xdb\xf7\xd1Su\x96Y\xdf\xf7w\xd41\xb1Uqp\xd89$\xc3\x0c\x85\x0c\xde)\x83w\xb26\xbc\xf5\xb2> !\xef\x0e4#\x91NXJl\xb4\x93\xd4\x82V\x99h\xce0\x89s c\xa42\x84U\x98\xf9\xbc\xab\xbdx0\xc0\xad>\x96\x90\x1f\x14\xfbR\xb5\xa1\x17\xc6\x0b\x92\x86\xfc\x149\x1c:\xcd3-\xb6w\x06\xeaL\x16\xac\xae\xda*\xac\xea\xb2g.\xf8\xd2\x9br\x80\x19\xae\xbd\xa2\xd2\"\xf0\x14I\x83#\x88\xe0\x18*uFD \x80\xe6\xda\xa5\x04t6\x89\x14\x18\xce\xaa\xfa&\xc1%\x8a\xb9\x94G\x94)\x93\x1f\xb4\xebwg\x86C\x879\xc7\x88@\xda\xc9\x0cfU~IJ\x12\xce\x1a\x84\x96_W\x95\xb9P\xa8\x0f\x10\xfbo\x08\xd7\x89\x94\xf8S\xff:\xe2\xb1c\x17aV=9a^\x80\xf5\xf2\xb7i\x98\xd7\xcb\x97Oxy\xa6q\x89\xa2\xe4\xf6\xaf~4\xfb\xb0\"1'\xd3\xeb\x15\xd5K\x94\xb55>,\xabL\xe2\x80\xd8\x16\x89\xa7\x96\x0b\xabvp6\xb5\xf4\x9a\xba\x85\xc3\xc1\x95\x18\xc0y\xee\xe7\xc4#\xf1\x94L\xe9\xcb\xb4\xd4\xc5\xd9S\xd6\x85.\x1d}c\x0e\xb16[E\x0d\xf4\xe2;\x99\x1d*\x1f9\x19.\xaf!\x17,\xd1\xaf\xbf\x86\xf3\xc5\xcf~N\xd2w~\xfa\xc5r\xd56\xe2bIRZn\xdc\xd0\x85\xcfI>n\xa7\x98\xc5\xe6\xd6\x00b!7[\xdf\xfc\xd5\x80\x1c\xb7\xd7P\xa6$\xcb\xd3\xe4\x8eL\x1b\xdd\xef\xddE\xc9\x9f\x86\xf5V\xacS\xec-]@\x8d\x12\xb5\xf1TK\xac\xfe\xa5W\xf6\x0d\xbd\xce4\x80(\x0b(d\xb9B\x08\xd4\x06\xa2\xc7\xc8\x7f\xfc\x10*\xfd\xb3i\x10\xb4\x88Q\xe1M\x19,I\xe1z\xc5\xbf\xea:\xe4\xb1Av\x80\x14Q$6,\xae}W\xdeGyM{\xff]\x0e\xca\x9d\xe1\xc8\xb1\x1f{\x8a\x93\xca=\xabT\x91t\xd1\xe8k\xf6o\xff@w\x90\xb3\x10\xf7\xfe\xd7G\xf6;\xb1\x07.\xd2\x1e\xdf\x00\xccu\xcbk\xa9\x94\xa1flvl\x1f:]\xf2\xbe\x90;~z\xe2l\xfb\x98$\xc2\x16\xc0\xc4@\x0b\x82\xa6\xf9\x1d*8\xf4\xb2;\x19\xc1 \xc3Pz\n6\x05\xd6F\x0bez\xd0\xd2\xef\x1b\x86\"\x1a\x9a\xb2}\xd4D>\xca\xf1h\xa7\xe7\x8cm\x8d\xf6,t\xb7\xc5\xedVP.\xde\x16\x9bH\x03\x1f8\xe6\x1b.I\xa2\xf3\xf07R\xe2\xad:L\xe8vl\xa4o\xad\xdd\xfa((\xab=*\x1a\\&\x16\x9cNi\x9d\x94\xb9I\xc6\xed\xa8@\\%\xfb\xda:-q\xad\xcf\xdc\xba\"\xf6\xe6$\xa7\xf7\x88\xac\xd0\x01\xca\xa7O\xcb\xf1\xa2czu{\x02\xc3\x81C\x0b\xa4$\"~F\x98\x84\xaf)\xa1}\xd0\xa8oc\"\xd2\xa9b\x83\xe9X\x05\x08\xbd\xf2\xdbD-\xd5\x0b\x06\x8fY\xe4 \xeb\xa6\xd6Y\xe8\xa0[\xec1\x8b\x10\xe0\xe8\xc0\x01\xda5\x0f\xbauO\xab\xe8\x03\xce|\x91\x92\x06@\xbbD;\xe2\xfa\x16h\xa5\xdf\x05Zi\x19G\xa9\x114Z\\\xfd\x01\xd6\x88\xc8\x00z\x98\xcd\x92\"\xed\x02Y\x8bT\xf1[\xa0\x96|\x17\xa8%R\xf4\xa9\xd4Q\xf5\xf9\xe2Z\x0bp\xae\xd6\xf1\xb8\x8e\xca\xf4Gg\x81O\xdb\xe4ju\x03\x7fmq\xb3\x98tO\x95.%\xfcy\xb7l\xc4p\x94\xa7v\xb2\xfe9.\xf7\xe8\xd1-s\xb9\xd1#\xc8\x08\x89\xfa\xda\xd1\xcb\x8a\x0e\xb5\xe2\x96\xe1P}\xce\x98\xfd\xe1\xfe\x81c[Y\x1aX\x1a\x9e\xff5\xefH)_k\xca\xdfX\xfe\xc1\xc2\xf1\xb2U\x14\xe6\xb6%J\xcaR\xd8\xd8\xde\x1f8\"a\xf99F\xca\xe8\x03$\xce=\x93\x9a\x05\x98m\x94~\xe1\xda-tr\x84\xc8d\x0d\xafx4FH\xe4\x87\x14s[\xb1\xbf$\x16\x1a\xd1$\xd5=7\x9fDIxi\xd2cK\x9f\xf9\xd5\x17>/\x87\xf2\xd6M\xf6{\x0c\x19\xb3H\xe0\xde\xcb\xb9\xe3\xb0\xa8b,\xb6\xcbi)c\x871\x14\xe2\xb6\xf64\xa9\xd6\xc4\x18\xec)\x89HN\xf0\xbd+\xbd\x92\xd7\x94c\x97\x93(3\x85\xe54\xb5hu\xf84h!\x87\x04\x14\xa7}&>Ja$a\x87\xdc\xfeZH\xa1sM\x94z:9\xf4\xc1\xa9\xc4A\xc0\xb8\xcb^\xa5\xd76\xeb\xa4\xbe\xf5\x9bo\xb4o\x10\x81\xef\xeckw\xdf\xde\xaeJ\xc53Q\xdb\x81Z<\xe3\xc5UYj\xc4\x9f\xab\x12\xbb\x80?W\xeb\x99\xf1\xe7*2X\xa1\xd0\x8ci\xb3\xce\"B\x0f\xc4z\x81\xa9T\xe0\xb5O\xc9\xe4\xbbz\x81\x05+\x10%\xb1\xbe\x82\x1b8\x81\xb4\xfeh\xd9I\xb47t7\xd0<\xc8\xe7Z\xb2\xf9\xe5\"\x8c\xa6)\x89\xc7\x86sx\xe9\xaf\xc6\x10zK\x7f\xd5$\x0b\x80 1\xcf\xfc`A\xcb\xf0\x9f\xfarAR\xc49-\x85?\xf4e\xf2\x045\x9f\xb4\x14\xff\xa9/\x97\xc4\xd1\xdd\x18f\x8dw\x1a\xca\xe5e\xb2\\%1\xa1M'^y\xd3,\xf7\xb1HI\xadl\xedA\xb3|m\x05\x8cA\x03\x1cy\x86\xc7\xa0\x81J\x98\xfd\xe4G\xe1\xb4,Rx\xf5'\x9aN\xa6\xc9\xea\x82\x99De\xa6.\xbd\x8c\xfc,\x1bC`z\xcf\xd7\xe4\x18\xa6\xa6\x12\xef\xc2\xafa<\x86e\xf3\xfd\xab\x0f\xef\xc6\xe07\x9f\x97J>\x8d\xf1\xe9\xd5U\xb6J\x89?\x1d\xc3M}q\xea)\x829>\xfdc\x90Nc\x93\x87L\x12\xf0\x94\xb2\x1e\xf6h\x7f\xbf\x12\x14V\xe2\xa5\x85\x9f}\xb8\x8d\x85\xc8P\x8b\x9cF\xfb\xaa\x9eO\xcf\xa1~!wc\xd8\xd0XA\xa6d\xa6\x7fqu\x95\x91\xc8\xfc\x0e)\x84\xb1\x9a\xbeX\xeb\x10\x9a\x19O\nI\x9cG\xbc\x94T\xbbJ'?\x8e\xfaU\xf3\x85\xdcI\xd5\x88_BU\xa1\xe1\x1cX2C\x03Y\xd2\xd4*\xd3\xeb\xcf\x7ff'\x96vE\xe6\x98^\x994_\xe0\x1ch\xb6\x16NA\xdc|\xbeJ\x93U6\x86B\x03\xff\xe46\xa6|PhZ\xd6P\x01\xa7\x8a\x0b#\xbd\x0f\xea\xc7\x88\x060:`\xa4\xcc\xd0\xfaw\x1d\x97\x06&\x0b\xf0\x15\xe8,\xc0\xd1\x9b\x96\x11\x04:\xde\x19\xd5S)\x84t\xf1\xe4,3\xcf\nm9R2s\\\x88\xc4\xc3\x19:\x98\xc0&\xa0\xd2\xcfqky\x06=\xb6\x84\x05\xe91.\x9f4\x8b1z\xb7^\x10\x9f!\x1d\x14\x96\x921\xe6\xb5\xb6Q([\xd3\xe6\x99\x87}f\x1f\x93OR5\xe3.\x05\xdfTg\x18\xb5\x05\xa3&d\x98\x0eh\xea\x80\xef\x05\xfc\x8c\x84Fl\x8f2\xe2\xc3\x14\xbd\x944\xcb\xb4T\xf2-J\xc3\x9e)\x85\x11S\xef\xdd\xc01L\x8f\xe0fs\xd3\x81\xc5\xe4\xa6n\xd8s\x83\x811\x9b\\\xee\xc0\xad\xf7\xa9\xee\x8f\xf8\xd0\x18 \n\xdf\x88\xb0?\xa3\xf0\xcat=\xa5\x9d\\\xa21\x87\\\xb2\xd9|\xb5.\x96N\xcd\x96\x8c\x02^\x9a\x81e\xc3\xe0\xfeA\xb77\x02\xba\xdag.\xac0\xa9&z4\x05E\x9a\xd2\x03\x10\xfc\x1aK\x13\xd4\xc9\xaa^Fp\xca&C\xb7\x9e\xd2 P\xbbWs\x8f\"\x0f\xae\xa4P\x9a\xa7G\xfa\xf3x\xfa\x89\xc5F\xf8w\xd2\xa9t\xa8\xc6\xe81\x86\"w\x19\x96\xa5\x7f\xf8>\xa0?\xf8:'\x1e\xc3*\xf4\x17b\x1eu\xfc\x12M\xd1\x13_\xf8\x0c\xb8\x94\xa8\xb4\x7f\x7f\xa8*n\" \xd4\xba\xd0-\xdc|\xb5\x00~8h\xce~\x0cj\xdd2\x16\x8d\x87_\x17\xd2\xf1kHg!\x90\x0e\xdb5\xe5\xf2\x90q\xd0T\xc5A\x0c\xdel\xe1\xe39.\xaf\xe9\x12mi\xde9\n\xb6\xf1\x0d\xd8\x86=\xb7e$F\xf9\xbb\xba~\x8c\xe2\xbd\x15\xf3\x81\x99\xd1?cqG\xcbj\xb0\xd3rM\xec\xb4t`\xd5\x07;-;\xb1\xd3\xbc\xc4NK\xc7\x85;\x86\x9d\xee\xe0\x18\x96GpG\xb1\xd3|rW\xc7Nw\x06\xecT\xeb\xd0\xbc\xd7\xfe\xe7{c\xea\xc2B \x81\x9b\xba\xfe\x9c.\xfe:u\xfch&\xb8\xa6Gc\x0bD\x90\x12\x0c\x8d\xc9\xad\xca\xa4i\xf0'\xe8&M%\xb1\xd3\x81\xe3\x9d\xdf-\xaf\x93HO\xe9\xa6\xebU7:\xd4\x9b\x0d\x0d\x0f\xbf\xcd\xd6m\x83C!\xa9\x0c\xd0q\xc1\x7f\x8b\xdd\xdb\xc8 \x81|\xaa\xaa\x19\x19\xd3\xbf\xdf\xb0#bt\xf5\xfe\xb0sdf\x94+E\x12\xe4f]p\n\x13r\x89\x96g\xfe\xb7\xc8\x131\x1e~cxJ\xf8\xbb~\x13\x11\x1aB\x972\x95\x1b\xa9\xechH\x13W`\xe0b\xd8lD\xe1\x11k\x7f\xc0j\xa4\x93I\xfbF\xe8\xddV\x02\xa7`m\x0d,J_u\x8c\xbf\xc6p\xe9$E\x9cUb\xe7+F\x1c\xea9C\xc4\xcb\x8a\x15I\xaf\xb8yq\xc5lU\xd6c\xacR;\x97eqM\xec\x15$\xb1\xd0E\x9a\xc4\x17\x98\x98_\xcb @\x87]\x8a\xb8\x84\x89\x82\x9e\x0b\x03\xd6\x8dY8/D=\x1a\x9f\x81\xda\x93\x87\xbaU\xf1\xa3\xc0\xd6\\\x0e\xaa\xd7\xb9\xc2\x88\xc45(\xd7\xe0Z\x9f\x80\x98\xdc\xa2\xe9r-.w f\xf8\xfe\xb6\x07\xfb\x9d\x9b\\\xb7kj\xa6\xceJ\x98\xd8\x97~\x1c'9\xd0\x86\x11\xc5%)\x14q\x19sH\xbb[\xbe\xcb\xa0\x1a^\x1f\xcaxyt@\xfb\xa0\x81@P\x10\x91b\x04_\xba_S\xb9\"\xe6\xfb\xdb\\\xdd\x9ch\x19\xab\x99c\xe5\xfe\xf02\x9d\xd0\xec\xe3\xc9\xf4\x87x.\x89\x93\xa8>\x04\xdd\x0c\xd9\x03\x17B1 g\xed\xc3\xa9\xe7\x8c\xb9\x06\xa0\xb5\x18\x0d\xab;M\xf2\x99\x16f\xab\x18\xff\xf7\xc3\x8cr\xa8\x98X\xe6\xfe\xbeK\xceT\xc6\xd6\xe6Lm\xccX*\xd2dj\x1b\x10|\x048\xca\xc7\xa5\x9c'\xed\x92\xf30S\xef\xfb{a\x06\xde\xc4\x0b \xefg/\xcc\xde'\xf9\x82EcH\xdd\xda\x0b\x06\x8a>\x04K7=W\xf5An\x83\x0b\x93\xfb4\xa1\xee\x04NBpjbB\xc9\x079\xd5o\xad\x99\x94\xac\x88\xdfo\xdd0\xcf\x1e\xf5\xe8\xc6\xa5\x133\xda;f^\xd61lb\xd4L\xccP\x85\xc5\\\xefL\xcf\xc1\xe6F\xf4[e\x81\x1a\xcby1\x18/\x8c\x83\xa8\x98\x12\xa1\x95\xe9p\x1fG\xef\xe0\xb2\xad\xda\xeb\x07\xae\xc9\xed[S\xb3\\\x9bEM\xee\xe5\xfe\x9c\x9b[\xd3_O\x9eP\x1e>\xa4\x8b\x88\x89\x92\xe9O<\x13M!a\x1f\xd0\xaeJkJ\x86ofa\x94\x93\xd4n]\x91PAn\x8b\xc7J.\xb1v\xaeV*\xad\x93\xe6\x84i\xa2\x16r\xf3\x15\x9c\x0e\x14:\x88\xdf\xf7\xf7hK\xc6\xde/WQ\x18\x84,\x1dIy#\x97 _\xa5\x12\xe5\x8d\xae\x8e\x9e3\x85\xb2A/J\xfc\xe9\xbfs [Y\xe0G~jq1\xbex%\xd3Y\x89m]\xa0s&\xbac\xc6I\xbc\xc5\xbeA\x84LO\xbc|A\xa0\xec\x7f\x14f\x18\x07\xdf\x87,X\x90\xa5\xef\xc1\x1b\xf1*%Y\x12\xdd\xd0\x13!\x99AV\x04\x0b\xe6\xed\xdf\x08l\xe3Y\xcdIe\x86=\xc9r\x15Fd\xfa\xa6\x82\x9c\xcf]\x08,\xd1\x01\xcb\x85\xc9\xa5\xfa\xc1\xd9\xd7\xe6\x07\x02\x9e\xda\x0f(m\xf9\xce_)\x14v\x03\x9etK\xf2\x1d\xa4\xd5X\xd0\x8b\x01k\xac\x95\xdf\xe3{\xf2kA\xe2\x80\x98K,\xfd\xd5\ns\x1f\x98\n\xcc\xfc(\xba\xf6\x83/c9h\x97\xb8\x1e\x94H\xf3\xd0q\xea\x8b+\x9e\xb0\xadx9\xc1m\x8af\x16\x9eh\xa9z\xa6\xf1\x15m6GQ9a\xa8\\\xe7\xa7|\x84q\xed\xf3#\x16,v\xe8H2'R!!U\xae\x08Fj\xd2\xd6\xae\x16\xc3\x9aP\xc9Jz\x15\xde\xab\xb3\xd7\xcf?\xbf\xbd\x10\xfa\x95R\xc1\xdf\xb6\"\xc4j\xa8w3\xbb\x0d1\xb2\x9c:h\x1d\xdc\x03?#0\x1ck\xe7\x03\x83'\x8a~)p\x9c\x0c\x0c1\x02\x0c\xf1\x96\xb1\x9d\x91\xb9\x1d\xb9b\xb5)\xd5G\\\\\x86\xa6\x04\xd3\xa2\xfd\xa6\x86d~N\x93x\x0e\xcc3\x141\x88h\x12\xd7\xcf9\xc3&|\x16J\xe9D\x9b\xba!\xe4y.SA\x0e\xa2\x83u^{\x92;.l\x90^\xf1_\xc49+[K\x17\n\xa2R\xf0\xe6\xf9\x8a\x04\xe1,$\xd3\x12-\"C\xcfQc\x06v\x92RD\x19\xc6\xf3\x88\xf0\x11r_]\x07\x83\xc6\xfba,pn\xed\xad\xa72\xb5k\x84\xb1\xd1\x0d#\\w\x18\x7f{\xfe\xee-\xc7\xde\xb51P\xbci\x1a\x81\xf4\xae\xd1\x7f\xb1\x8f\xc9-\x14\xb6\xe6\xdcb\xc7\xa7V\xaa#\xf0\xf8X\xf5\x05\xac \x93\xbb\xad1\xd7$\xf6\x86\xc3\x9a\x19\xdf\xa1\x96\x96K\xda\xe4\x956\x81'\xf4\xa5\x1aXLn+\xd4\x1e+\xef>\x9f_\\}>?\xbb\xfa\xf8\xe9\xc3\xc7\xb3O\x17\x7f\x1b\xeb\x92\xa1\xfe\xf5\xf9\xf9\xd5\x8b\x0f\x1f\xde\x9e=\x7f\x7f\xf5\xd3\xf3\xb7\x9f\xcf\xc6\xb0\xab/\xf5\xfe\xf3\xbb\xb3Oo^\x8aR\x87\xfaR\x1f?\x9c\xbfA\xd6@)>2\xd4\xfa\xe1\xa7\xb3Oo?<\x7fu\xf6J\xed\xc6\xce\xa8\xf9E\x18\xd3\x85\xf1\xea\xc3;\xc1\x10\xbfD\x19[\x97\xf3\x12H\xb2\xd1P\x7f:\x02'v\x89\xc7\xab\x0e z8\x98NS\xe0\xe2h\xe2\xbd\xfa\xf0\xeey\x9e\xa7\xe1u\x91\x93\xf7\xfe\x92d+?\xe8\xfe6\xd3\x7f\xdb\xf5Y$>\x13\x00\xe8\xf5U \xbez\xc7\xe3\x9d\xbc#\xf9\"\x99\xf2\xef\xf4\x98\xba\x94W\xccP^\xe1\x85\xd9\xcb\"\xcb\x93e\xd9_J\x18\x16\xdeU\xe3\xb9\xb0\x97\xe4^U\x9a/\x9d\x16\xba\x1f\xf0`]\x95s\xa0\xea\xd7fL\x12f[\xbb\x87\x96\x0b\xb3\x16co\xdaw\xa4\xcd\xbc&Y\x98\x877\xc4X\xa7\x1e\xcb\xf5\xab\xfc\xc3\x0dI)\x07E\xa6\xc6\xe1\x9b\x90b\x93\xc9\x95/\xc3F\x06~\xf2/<\x05\xe2\xb0 \xf8L\x1e\xa5x\xa6\xefd\x19*(\xb5\xad\xbd\x01\xee?\x174[\xb4ms\x03\xdf\x9a7\xe8\x9c>\xeb\x08[\xb5\xf0j{\x02N\x14sA\xf9\xd2\xbbi\x00:\x96k\xb1\x88\xad\xd4\x8e;\x0es|\xcd(\xaf\x17\x19\xbf\x92w\x1b\x9c@\xc4\xca\x07\xc6\xf2\xf5\xcd\x06'\x10\xb0/dD7\x99]6lv\xc4\xa5\xe1\xd7jO4\xbeq\xd6\xf8\xf9\xd6\x7f\\\xf9[\xbf\xfd\xf2K1\x18\xbc\x1cl\xe1\xdfW\xfb\xec\xcf!\xbb}\xcdn_\xb3\xdb\xd1\xeb\xd7\xf4\xcf\xce\x01+\xbcs\xf0\x8a\xfdyMo\x87\xaf\xf1\xedh0x\xb9\xc5\xfe\xbe\xc2?\xac\xf0hx\x88o_\x0e\xd8\xed\xeb3z\xbb3\x18\x0c\xe9\xed\xab\x03\xfc\xf6\xf5S\xf6\xf6\xf5\xab\x97x\xfb\xea5\xbb}\xfd\xfa\x95&|Is\x05\xbdyu\xf5\xfc\xe2\xe2\xd3\x9b\x17\x9f/\xce\xae\xde?\x7fw6\x06k\xea\xe7\xfeVJ\xfc \x0f\xa7Vs\xfb}\xfa\xf0\xe1\xa2\xed\xa34Ir\xcdg\xf5/\xae\xce/\x9e\x7f\xba\xb8z\xf9\xd7\xe7\x9f\xb4F\x85Ji^\x0e6\xc1\xfa\xe5\x97-o\xb0\xf5\x14\x81\xfc\xe2\x00\xa19\xe0\xc0\xddg\xd0\xdcy\xcd\xa0\xb9;\xd0t\xa3Z\x1cz\xae\x1e]\x0d\xb3,d\x8e\xd2\xf1\xd4O\xa7\x0c\xff\xeb\x91y\xcbQ=n\xa4\x16\x00\xb4DV\xca\xf7\xa1\xb3\xea\xfa \xa6\xfai'\x13jj!3\xe2\xc00\xf5\x03\xb7\xbd\xb2I~\xe9\xc8\nr\x8d\xd6\x15\x8c\xa8B|3ln7\x13)\x8a\xe6\xcdFS\xcf\xef\xceO\x1c\x1c\xee\xd4\x18\x8a\x1df\xa3\xfc\xd4\xc0W4x\n\x8a\xef\xfc`\xf1\x89\xcc2.\xe1Bi\xc7\x157\x9d\xe264:a\x87\x9e\xcfX&E\x9cK\xf6\xf1\xea\xd8P\x98\x1f\xa2\xb5\x94^.V eZ\xaf\xc6\xae\x7fi\x94\xe7\x10\xb5\xdf\x92\xce\xa7\xf9\xd2K\xc9\x8cI\x91\xe7$\xffD7\xff;\xda\xea'\xe2O\xefl\xc7#\xf1\xaf\x05)\x08z\x04R\xcc\xdc\x86_\xe7$\xffk\x92\xe5\xef\x93i\xe7\x8e(\xbb*}c\xb7:6\x17q+P\xb5\x8dxSRN+3\xb1S&\x94>S+n\x08\xb0\xeb\xfd\xe0\xf1\xf3Z'74M+\xe3\x8c\x94^4'\x12\x95:(T\xc6\xc4\x13!\x97/_\x05I\x9c\x93\xafF\xdfdM\n\x10\x90\xd6S\xeae\x8b\xa4\x88\xa6\x9fWS?'\x08\x14_\x9ft\x18\xf0\xacA-B\x1d\x82\xbe\xc3\xec1\xeb \xb0\xc5\xa8]\xf6\xd5\xe3\x16`\xdcc\x016\x11P\xdbT\xadH:K\xd2%\x1b\xef\x9b\xd9{\x12\x90,\xf3\xd3\xbb~\xfe\xcb\xc4\xbb*\xf0\xcb\x17~\x1e,\x98\x86\x8f'\x8a\xc51\x9ajo\xac\x9f\nk\xe81`\xf8=0\xe0\xc8\x10\xedo\xb8\xfbT\xab?\x1b\x19\xfc6w\xf6\xd4\xf2\x183\xad2\x08\x91\"YN\x93\xa0\x10\xd3\xab J'^{\xe2\xc7\xbb\x84)q\xf4\xb5\xc5\xfeM8\xc7h\x9erf\xe5\x93\xe6{\xaf\xc8H\xfa|\xce\x1b\xde\xfe\xe5\xfal:'\xbfl\xff2\xdd\xf6r\x92\xe5\xb6\xa6\xa0\xf6\x1c\xd0\xf8x\xd0\x8d\xd7\xf0\xa9\x00\xd9\x82\xcc\x8b\x93\xa9\xc1:*\xe69V\x995\xa7~W\x8b8\xedz\x8e\xa5\x16?\x9e\xc7\xb1\x8cK:\x00\xc3Y\xb2,h\x93\xf4\xd2\xc5\x1d\xa5\xd9\xbch\xc5Z\xed\xb6E\xbe\x8c0\x8a\x1c\xda\x8e\xd1;\x07\xc6\xd2{\x8aP(\x1c}V\x00\xf1\x8bi\xfd\xd6\xd6]\x84Q)\xbbv\xd2p\xc8=\x16(\xdc\xf0?\x94db\x02\\\xdd\x0b:\xf7\x95\xd9B\xed=\xa5\xe1\xea2\x0bf\xeb\xc1\x03\xeb\x89\x92\x82a\xf9\xfc\xe9\x0d\xc6\x83\xd2C\xe1\x1c+\x10\x85\x84\xd2\x94A\x8e\xb7\xaf>\xbc\x93\x7f\xb3\xca\xc5\xddE\xf2\x85\xc4\xec\xc6\xcf\xfd\x8b\xd4\x8f\xb3\x19I\xdf\xe4d\x89\x0f_\x87\xbcQ\xba\x9d\x9fG\xd1\xcb$\x8a\x18\xc7\x8bO\x94\xdb\xd7I\xba\x14\x0e\xca\xf4\x9e\x85t\x16O\xde\x91i\xe8ce\xef\xc2%\x1e\x80\xcc\x8d\x9b\x9e\x03S\x8a\xce\xde\xf9+\x97\xfe\xc52\x1f\xfd\x90\x8e\xe1\xd7\x82d\xac\xeb\x1f\xa3b\x1e\xc6\xfc\x0f\xfb\xf2\xfc\xa7\xbf\xbc\xc5\xb5\x8e\x05\xce\x7f\xfa\x0b#\\\xc5\xddG?_\x9c\x93yy\x9b\x84q.n$(\x9c\xff\xf4\x176\xee$e\x83f\xd15^\x14\xb3\x99\xa8\x8b\x82\xfb|A\x08\xfb\x9c\xa2\xa1\x8b\xd4\x0f\xbe\xbc\xe4\x00/\x1f\xb0\xbb\xa4\x08\xb0G\x96\x88\xe7\xe1\xd2y\xcc\x18\x99\x93\xa1(Dl\xd1L\x1f\xb4\x93\xee\xccb\x92iv&\xddK)\xdd\x89\x8d73\xe0\xfb-\xa8,G\x15t\x81\xce\x1b3\xee\x8a\x94`\xc8Q\x17\"\xba\x10'\xd1%\xdd\xee\x1e\xc2\xb5c\xcd\xab8\x91\xa1\xa62\xbcI\x17\x024\x1c\xe9\xb1\x08T\xe2eQ\x18\x10\xfb\xd0\x85\xada\x97!\xafi\xbb\x9b[\xeb\xce3\xd5\x99c\xea{\x04\xc7\xeem\xd8o$xj\xee \xf6\x10\x9e\xd0s\xbf\xb9\\\xea\xee\x07\xf6\xc8PNrd\xb0w\x0de\xb8\xbb\x84\xa2;_\x0fAJ\xb8pG\xe5\xbd8\x0f\xb7o\x8a\xd8\xde;xp\xe5\xe5\xe3B\xd2\xb5\x84\x8c\x1d\xdc\x1d8\xdeL\xd7\xc3=},\xe6&\xee\xee\xda z&\x82E\x99M\xd0\x1e%\xe6&\xc6D\xf6\xc9\x08\xb9\xf6\x93\xa0l\xac\xb92T\x97\x93\xbe3\xb9&\xa4\xba\x98\xf4\xdd\xbd=\xc7\xde\x18\xd4D\x95\xa3\x9d\x03\x87\xc7\xedq\xc1jF\xcf\xd1\x9bG^QR\x8eG\xfb!\xc2\xfe\xee\xaa\x9e\x82\xe3\xa1%\x06\x8f\xb0\xb6\x12\xd1\xc2\xae4>\xfee\xb8\xba\xabPooRK\xfe}\xaa\xa5\xa8\x10\xa8<]L\xe3\xf54\x895\xe1\x18\x90\xdbB\xff\xdb\x9c\xf1Wbl\x9b'\xa5\xaf\x84n\x8e\xcd\xaeK\xbc\x9d\xa1qn\x1d\xed\xe4\xfe\x13!\xf5\x162n#\xb6\x87\x83\xa1c\x1b\xa7\x9a\xb7{@\x11\xbb>\xae\xef\xef\x0f.X~#\x8c/\xf4\n\xe5+7\xd1x\xa9\x88\xe7\x1c\xcf_\x07\xe8\xfd\xe0\xda\x9aQ|c\xa3!Vn\xcf>\xadU\x8ftat#\x89\xddk6e\xb3(\xdd\x01\xc0\x02\xcb\x86\xf1#\x17\x1c\x81g0@\x1e#ET\xf1t08\x18>}:\xda\xdb=\xd8\x1d<}:\xa4,\xc7\x9a4\xfd\xb7d\xb5lM\xa1\x07[0d\xe6\xc0\xd6\xbb0fVs(\x12\x06B\xc9\x0f\xf8\x17\x0cyFi\x90#\xb8 \xb30\x87E\x9e\xaf\xc6\xdb\xdb3? \xd7I\xf2\xc5\x9b\x87\xf9\xa2\xb8\xf6\xc2d\x1b\x15\x99\xdb\xd3$\xc8\xb6\xf1\xe3\xad) \x92)ar\x9f\xd30\xbe\xf1\xd3\xd0\x8f\xf3\x13\xac\xb2\x96:\xa6L\x1bHQ\x8e\xf5\xc4O\xe7\xd9\xe4\x92\x95\x8bi\x15\x9f?\xbd\xa9d\xdfRb\x19\xd8\x84\xa1\xeao\xc4\xea\xc0Qc\xae\xb6\"\x8a`I\xb2\xcc\x9f\x13t\xb4\xcb\x08>\x8f\x93xk)F<%7@\xe2\x9b0Mb\x14\xaf\xd2\x8f\xf1C\x1cG\x06~<\x05\x7f:\x0d)\x80\xfd\x08\x16$Z\xcd\x8a\x08n\xfd4\x0e\xe3y\xe6)n27<,d\x95oHM \xc0\xa8\xbc\x04\x85d\x14\xf6o\x04p\xe0\xa70\x89\x90\x9d\xc2\x8c\xb8\xb3\xd4_\x92\xec\"\xf9\x98\xac\xe0\x84\xceT\xf2\xc8\x8d\xd1\x87\xbe\xe3IC)]CJ\xb7\xeb\x1c\xc9\xd3\xf5Vk\x8bI\xa7x\x03\xedj\xaa\x86\xf7\x998\x03\x1a\x91\x04\xa1\x81\xf4r\xe1\x1d\xd5\xba+\xa4\xc6j.Up\xdat\xb1\x1aW)L\xf0\xd9%\x93\x94\xc6\xcd\xc8\xc0\xd887T\xe9\xdb\xbcu\xcd\xca\x9b\x932\xf2z\xdf\xa3\xdc\xb5_\xa5\x1a\xaf7\xa5\xa6\x0fi\x99\x8ee\xcdJMu2}M\xbf\xaa4\xda\x0bm\xadl\xd6{\xd7\xaaqU\xd7\xd6\x8aa\x0f\xfa\xd7\x8a\xc5;k]\x1b\x9e\xb2\xab\xa2\xae\xc2Od~\xf6u\xd5\xb7\xb6r\x8d\xb2\xcf:\x16i\x0f\xa7F\xb9\xee\xfe\x8e\x8dR\x1b\xaf\x14\x0f\x84^\xbd\xa7\x1fu\xf4\x1dq\xea\xda\x15\xe3WR\xcd\x0c\xcfIf\xe5X@\xd7\x9e0\xea\xe8\xdd\xa4(\xd5\xb9d>\xa6\xe1\x12\x0d\xfc\xfaV]\xedk\xd4\xeb\xe9P\x07\xbe\xd0l/|n\x88\xe5\xa0[\xe2P\xcf\xc4\xa7\xed?\x93O1\x970~S\x16{p\xca\x185\xb1\xbd\xb7\xebx\xec\xbd\x9e\n]\xdf\xfdWs\x8e\xe1\x04J\xc1K9'#\x0e\xd9\xbf=\x7f\xf7\xf6\xeck@V\xfcx\xc5\x97)\xf13\x9cY\xc2\x1f,\xfd\xf4\x0b\x0b\xfc\xc0n9\xe9pR%v\xa1\xe5)\xcc\xec\"\xfe\x12'\xb71\xb0g\x8e\xe5\xc0&/\x85\x95\x9c\x82\xc52\xfe\x89'\xe5)f\xe3\x99b9n\xd9\xe5U^\xa4\xe4<\xf7\x83/\x17\xa9\x8fQ\xc6\x0codk\x19)\xee\x01\xad\x10\x9fe\xb4$\x86\x0d\x14\xc4\x87\xc3\x9f\xd1.K\xe9\xcd\xca_iK|\x0b\xd6 9\xedOj\x8c\xbb\x90\xd6_\x8a\xb1\xb6\xae\xec\x1b9\x1b\x01\xce\xd3&Xc\xd0G\x0c\xc9)e\xd79 .lT\xc1\xfcq\x1e0\xe1\x07\xa3\nM\xd3\xe1(\xa1\xb4\xd6\x8e\x83\xd3%\x8884E\x91\xa0\xd3\x94*>$\xa5\xff\xc8$\xb6wv\x07\x8e\"h\x15\xbe\x83\xf8\xfe`o\x88\x96W\x07{#\xb5\\\xe5j\x82\xe5vx\xb9]\xfew\x8f\xff\xddw$w\xf1G\xecN\xf1T\xe6\xaat\xe9:b{\xd4Hu\x11r\x13\x08\xf5\xb90\x8dP\xa5\\E\x15\x103\xf5\xe6L\x14NX\x0c\xaf&\x92\xc8L\xd2-\xd1\xd3\xb61\xaaeso\x1af+\xca\xc82O\x0fo\xb5\xf032\xfdD\xe6a\x963\x05\x08Z\xeeNbs\x14\x89\xc2&\x8d\xa0\xec\x0f\xf4Y\xdc\xb4\nJ\x99\xaa\xdd\xbb\x12\xcd\x8a\xa1\xa2\x01\x8b\xf6\x05\x8b\x1c/\xbdy\xc3\xcf\xb6\xc6'\xe5\x0b\x17\xeaq\x86\x9a@\xd4\x04\xd4\x14\xe1\xfaz\xc1\x03\xa5\xfc^\x9e\xfa7$\xcd\xc8\xc5m\xf2\x91\x96\xb3\x89w\x95\xfb\xe9\x9c\xe4\xb4+.dJN\x9bf?\x02\xbd\x18}\xad\xbe\x98\xe6\x97\xd9\x99\xc8\x1dj\x14\x03!\x9e\xa3|=\xa6\xd6@\x05\xb8\x00$\xd3M7#X\xd2K3\xfaX\x1d1@]\xe6\xd1\x1c\xff\xcc\xb4H\xd1\xc8\x85\x99s)PH\x95\xf1\xb7-\xef\xce\x8f\xf5 \xa1\xfb\x9a\xafj\xcd\xc0\x1f\xb3\x84\x93o[\xc2\xd0 \xc8U\xdf\x05\xadB\x80\x16\x9a\xa9\x0bw\xa0I\xc6\x04\x1c\xae\xd3\x86\xce\xd7\x0f\x82bYD~^.\x85W\xbcM\x92u\x19pb\xf0\x83\xa8\xd5R\xb2\xad\xfa\xf3/\xe1\xea\x02;\xde\xab!U\x15nj\xe8U\x98\x92 _s\x14\xab\x9e\x95\x9f\xc59I\xdf\x12\xff\xc6\x00\xa6\xd2\xb4W\xd7R\xb5\xed\xaajlf\xcd;\xe3 ]L\xabF\x7fRO\xf1\xe97\x1f\x8d\x86\x93Q\x1fy\xaeyb\xf2\x88\xceC\xdd\xc9\xa8;I3\xc3I\x1aUI\xa6~Ws0a\xcc\xf9\x86\xc9\xd1\xacK\x8c\x04b+\xd9\xa1G\xbe\x92\xa0\xc8\xa5y{\x13\x7fH\xa7\x84\xd3\xedh\xfb\x95}$i\x86\x1b?\xb7\x193&\x13\x94\"\x0f\x91\xdd\xd8\xdd\xf5^\xf5f\x8f\x11\x81n\x0cZ+\xeb\xcd\xb9\xb3\xca\x86\xad\x95-\xfaVfy(\xe9\xf4\xae\xd2$A\x93\xaa7\xaf\xea\xf5\xd6\x17\xd2M\x03\xadH\x1e\x00\xcdF\xd8\xcb\xb3\x1b\x12\xe7\xccl\x01\xe7a\x0c\x89\xa7\x7f\xd3D\xf4\x8dr\xd9\x0b\xee\xde\xa7\xa9\x83\xbfk\x9d\xb2\xa2\xa4\xdb\xfa\x19\x06ku\xe51S@ZOw-\xfcR<\xd6\x1cD7\xdce`\xd1H\xf4I/;\x9a\xe4,\xfbh\xc4\"\x81\xfd\xfe\xe08\x93\x10#H\xe8\xeb\xc2\x94_\x8d\xf3\x81\xd9\xebd\xda0b>\x1a|z\xd3p\xfa\xb1\x1a\xbc\xeeY \x866\x00J\x84o\x0f\xa3|\xa1I\x8b\xb4=\xa3\xe4C\x9f9\x00)6\x84v1\x8b\x0b\x835XI\xfc2\n\x83/\x96>\x90B\xa3\xdcK\xc6\xe6\xf6(\xfe*)\xae#\xd2\xb7r\xa9t\xff&\xde%EF^%\xb7\xf1:e\xd7\xac\xfe]r\xb3V\xd95\xab\xff\xbc\xea_\xb2\xbbj\x90\xf4t\xf6\x06\x92\x8a\xfeu\xc4\x12\xbcbT\xc0\xdc\x05\xeb\xba\xc8s\xb6Cy2H+\x8cWE.?\xc8\xd0\x14K~\x92\x93\xaf\xb9\x9f\x12\x9f?sZ\xbc\xa8[#s\x88K\xf4\xb2\xe98\x05\xa0\xea \xc4\x85\x87s\xe3\xcd\x03\xb3\xceV]'DDJ\xf59\x8bY\xed\xc8b:=\xeeH\x8dx\xa8T\xf2SZ~\x92^\xb6a\x00\x96/\xe8\x11H`=\xb4\xc5\xf9\x8a\xdb0\x8a^\xd5Z4=g\xed\x9bG\xae\xc7AX\x1dO\x81\x94N(tz\x0c\xfey\x14\x95lC\x17\xd5)\x98<=\xe0\xeby\xbc\x15\x12[\\\x14O6\xfcpc\xb4\x82\x89&\xf1\xe5$\xbflC\x8ab\xfcf\xf0\xeb\xc4\x06\xe2B\xf8\xa4\x86i\xd0=\xb7\xb9\xa1<\x87)\xef`\x8f=\xf1\xa0J\x90\xf2\xd4\xe7\xc7{\x7f\xca\xbb\x84g\xe8\xf2\xa3r\xc5H\x83\x9a\xfd\xa1\xdff\x7f(.a\x87\xe8O2\x03|p^\xba@O \xda\xc8\xab\x8dF\x1e\x83\x19\xf2\xccv8D.7\xa4\\\x91~q4\x11K\xf3 \xdf\xdea+\xbc\x99\xebU\x13\xdefR;\xc0\xbe\x05\x1a.X!\xba\xd2$ Y\x86U\xffo\xdaHW\xf5b\xcf\x04M\xe8\x94\xfc\x01d\x88%\xe1\x14V0\x86\xa9\xe32\x80Q\xaa\x0c\x93\xb1\xfa^JP\xd5\xfd\xd2/\xe6\x8b\x9c\xe9\xc2[\xbbyu\xb5*\xd29\xe90\x81\x89*S\x0fc=\x12\x91\xf4\xc2\x8f\xbf\xf4\xcb\x8f\x1d\xd5\xeb,\xef\x0c,!\x0b\x01\xf0\x8d,a#\x85\x97` \xd5$A\xfa\xe8:7!\xb9\xed\x9aK(\x83\xe9\xd1\xd2U\xd0n\xbc\xd5\xaf~1\xfd\x89\x16e\x82\xf0\x99\xf4n\xc3x\x9a\xdc2\xcb\x81\xb2b\x8d\x87%H\x87P\xeea\xe2\x85W\xdcKM_\xb8<\x0eO!\x16!o\x7f\n\xc9-\xc6t\xe5\xfe'?\xb3\xc6\xc7\xc0z\xd1\xdc\x85MffJr?\x8c\xfa\x00\xac\x04\x12\xfb\x84\xb6\xdb\x199\xbb5B\xa6\x0b\x89\xda\x16oCRZIy@\x1bf\xa3\xf8\x85\xe7\x17s\n5\xcc\xa3e\xfb\xcc\x0bT^\x94\xfe\xb7/J\xb5\x93\xcb\xe4\xa6\x13_\x10\xcc\xa7\x1e\xe4o\xe2\x9c\xa4\xb1\x1f \x01\x1d\xdd&\xa8El\xdb\xae=\xc4R\xe5t\xe8\x9bi\xab}\xe1w\"\xd3\xbaF\x9e{\xff\xae\xdd\x90\x92\xbe\xde$#1C\xcah\xd7\xac\xc7?\xbdTS8\xa9\xd5\xf7\xdb?nH\x8d\xbcLVwi8_\xe4`\x07\x0e\x8c\x06\xc3}\xf872\x85\x9f\xfd\xdcT\xec\xefdz\xcb\xea\xabl\xc5\x02\xbaz\xd1E\xb0,\xff\xe3\xf6\xffQ}\xdc0\x1f(\xfa\xcd\x05u\xab\xd6:)\xa9D\xbd,\x91G3t\x02\xc8\x14\x16\xe1\xd9\xbe\xa5\x10\x17\xcdh\x95-\xe1,\xc4\x86\xafl\xeat\xf49plo\xcc\x9f\x0c\x92\x90\x85\xcbaR3Q\xa5$\x958\x81P1Y8\x81\xd0\x01\xc2\x9c\xfe\xda\xa8\xb32}L\xddb+u\xca\xaf\x13\xcf_\xad\xa2;\x9eP\xa9\x95\xbf,+\xaby\xc3\x86z\x82O\\\xe5D`F\xa0\xd4\x11\xc6\xc6\xa9\xc8\xcb\x93rG\x17\xde\x1f\xff\x9b\xe9G\xc2\xf2\xceZ\xd0\x1aKR\xc6c\xacy\x814\xeai0\x92\xd2\x85\x0eGk\xd7\xb4\xa2-x\xb2\x9e\x9e\xfa\x81C9\xc7\xd8\xb4(\xcb\xade\xf7\x95T\x9e\x0f\xf6zV\xc8\xdc.\xb8\x0f\x8a\xe3\x9e\x1b:\xd5\xf3?\x81A\xaf\xda]\x16*\xbc\xde\x9a\xe8i\xea\xc7\xd3diw\xfan\x18\xbak1\xf36\xdb\xf2\x82$\x0e\xfc\xdc\xae\x85\xc4\xc74\xc6cJeX\xce\x95\xe5\x82\xbd\xb9\x19\xc3&\xa4Ne\x0e\xb1\xb3\xff\xf8\xe43\x8dh\x06<\xb5e\xe39Sp\xec6\xe6\xcb\x07\x83\xd5|\x05\x8d\xdcc\xd9o\x87\x83\x81\x03\xa7\xfa\xd2\xd0-ZF\x94V\x06Y\x0d\xe9\xf2\xdd\x188.\xa46\xe5\x9d\x13\xa7\xdd\xd0\xdd\x14\x8c\\\xb6v\x7fh\xb4g\xcdInQ\\\xc1\xacW2q\xd7t\xfc\xb2\x9e\x07\x94aKR%\xdc\xb4\xc9\xf3\xcbBw\x0c^7\xe5\x0cE\xb2i\x0f_P\"\xf1\x11KTsP\x89\"\xeb\x9a\x17\xc7e\xce\x88F\\\x9f>=\xc1\x9d\x11\x9002l\x9aY\x94$iW\xef\x0c]\x0b\xb3\xf7\xfe{\xf4\x81\xd9\xc44\n\x03\xe6\x12\xc3v}\nc\x88\xd7O\xe8!\xe1\xa4Q\xaf\x87J\xe3>\xc3\x99\xa6\x91\x1b\xb4\xc4qn\xf4\xc1 \\R\xcaK\xddh\x98\xd6\x88\xcb\xd4\x93\x9d\xfe=\xd1\xb0n\x9aO\xea\x9d\xa91p\xf2\xa5\xf0\x8c\xba\x05\xd9\xe7\x0c&\xd5\xa9[\x92ofC\x08X\xe3\xd05\xef\x97\x7f\xa0\xe7\xaa\xd9Gr_\x9f\xc8b\xcf\xe4\xc3\xd9\x89\x0eR;Y?\xffZ\x97\x98gO/\xe69\xd0Iy\x98\x87Y\xf3\\\xc4A\xd5\x1f3\xbd\xff\xb0;\xc7\x9e\xd9\x14.cF<\x1ao[\x96\x94\xdeGk%\xcb\x82 \xb9\xd4\xb9\xf7\xa2\\\x7f`\xf0\x06\x8f\x1a\x11\xd8C\xb3\xe7\x1cH\x82']8`!^\x9ad\x97]\x84\xaaT\\\xe3%\xe72\xef<6\xa6f\x02\x0ds\xc21X\x1f,\xd8\x84\xcdMM\xf2oq\xddj\x93l@\xe3\xdc\xc1'\xad\x92\xf9\x99H\xeb\xa2\x8dfB\xaf\x7f?\xfb\xdb\x184\xf6#\xef\xcf\xce^\xe9\xd3\x17\xce\xfc,\xffw\xa2\x86\x873mg\xcc\x1a\x90\xc8A5\xb5n\x0b\xcc[]\x9f\xb6\xf2\x14\xacs\xca\xfdX\x1f\xd1X\x9f\x98e\x1d\x1b!NOk\x04a,\x97\xd5:\xf4\xdaj\x97{lT\xd4\x9bu\xd6R6P]_\xc4\xa5\x9fLq\x86N\xd2K/lNl\x13\xf2s\x92\xffL\xfc/\xeb@\xfeQ\x00\xd90\x84H\x84&<6\x86\x7f\x088zi\x05\x92\xf8uJ\xc8o\x9dBn\xa8*\x8f\xd0\x1e\xd4\xa3\x8b\x9b\xfe\xc2\xd8vO\x9e\x80\x00\x13\xfd\x1d\xd8u\xb6K\\:\x02\xb0\x8d6c\xfc\xee\xef\x0fe\xb8\xe77\xd9Y\x19yC\xfb\xf5Z\xb4\xc9\xef\xdf\"]\xd6W\xadw{\xcf]\xb0\xaa\xc8F\x0d\xf7w\x8e\xf2\xe4xG\x947\xf7^\xbe={\xfe\xe9\xea\xc5\xdfPs\x847\xf8\xeb\xfd\xd9\xcfW\xcf?_\xfc\xf5\xea\xecS\xf5\xe0\xfc\xe3\xd9K\xfa\xe0\xea\xc5\xf3\x8b\x97\x7fm<.\x1f\\\xfc\xf5\xd3\x87\x9f\xdfkJV/J\xc5\x05\xedCLn/(}\x1b\x9f\xa5\xed\x9eg|u4\x97\x0e\xc5A\xda\xa8\xcd+\xff.J\xfc\xe9\xb8%\x83$\xd4\x89y\xb5C\x18/\xf3[z\xa59@\xca^\x91\x8e^\x9c\xafH\xf0\x8d@\xc9\xbe\xbd\xf9o\x06\x81&\xbe^\xef>\xbf\xba\xa6;\xd7j2\x01\x0d\xc4]~\x9c\xadH\xa0i92\x1f\x02\x8dO\xb5\xad\x06\xbac\xa5\xfc\xd4/\xf2\x85\xa6\xd5Y\xedT\xc2\xd2\xb8\x80\x95b\xab\xaa\x18;\xc9\xaa\x92W\xd7w\xcc-\xb37_\xb6\xaf2X\\\xc6\xaeK\xdcY\xba?3\xa5\xc0\xe5\xda\xe1C\xdaH\xed\xfb{\xb4\x0fa6?\xc4\xa1\xef*\xeasMfs\x7f\xc7\xe1\xec\x96\x0b\x16s?5E\xaf\xeaE\x98H5\x0f\xf4\xee\x88\xfb\x0d\x19\x0bO\xf7?\xd03\xb0\xfb\x03\xbd\xf0e\x7f\xb0\xdb7\xdc\xb1\x10nli\x98\xa1\x98[U\x01W\xd3\x0c0\xe6\x16W\xe2\xd6\xd7\\\x92r?c\\@\xb6s\x04\x9b\x9b9\x1cCl\x0c\xb3\x99\x1a3\\3\xafa\x92\xdb)f\xcfK'\xc3\xcbv)\"\xbd2\xd9\x0b\x98\x9f@\xa9[{\xccm\x0fO \xa9?\x9f\x13\x96\xfc\xaa\xf6p\xe1\xa3\xe5J\xfda\x86%\x8b\xbauK\xb6\xde\xdc\x0f\x07{}$c*\xd8$\x93\xd0\x13)_x\xbc\xb5u\xd4\xe4C\xb8\x94~\x12_\xb2\xfc\x83\x92\x19\xb0\xf6\xac\xd8\x1a>z\x8f\x0c\xba\x93\xd1kFS\x0d\xe4\xeaj\xea\xe7\xfe\xd5\x95\xb6_\xa9\x9d;p\n\xf1D\xc3:\xe7\x94u\x16\x8f\xc7`-\xfcla\xd1\x134\xf6\x96\xfe\xea\xd1\xe31\xb8C\xed7\xe2\xf2\x89\xf0v\x06w\xa8]\xfd\xc6\xec\x11\n\xd7\x84\xeeD \x9dlA\xde\xa5!\x85\x86.:\xc6)\xf86*\x93\x12\x9b\xe0\xba tg\x89T\xddc\x94\xb8v\xc0M\xee\xdbZ\xbd'\xde-\xb9^\xf9\xc1\x97\x8fIt7\x0b\xa3\x88\xab\xe4\xa7d\x95\x92\xa0\x99\x17\x14=\xdeW~\xbe\xc8\xb8=I\x15z\x99\x7fY\xde\x9e\xb0\xf4\xb3z\x06\x8f\xb8`\xb1dM\xda\xd8f\xb5p\x91\x9a\xf0tk\xc5>#^\xd4x\xad0\xd6\xad\xfd\x0c\xffG\xfa\xa8\x11\xc64\xfa\xd8\x9c\xad\x13\x18>R_\xab\x9a&\xd4\x07@w\xdd\xf6\x7f\xda\xa7\xe3\xc1\xfdd\xb8\xf5\xf4\xf2\x97\xe9\x8f\xce\x9f\xb7\xbb\xb6\x88\x01\xa3$\x95\xb1\x8f>\xef\xfb\xc6\x86\xfd\xff\xb3\xf7\xef}q\xe3\xc8\xe20\xfe\xff\xbe\x8a\xc2\xe7\x9c\xac=\x18\x03I&\x97\xce\xb0,\x03\x9d\x1d\xce\x06\xc8\x0f\xc8\xcc\xce\xaf\xc3\x971\xb6\xba\xdb\x1b\xb7\xddk\xab\x9b\xb0\x9b<\xaf\xfd\xf9\xa8$\xd9\xb2,\xd9\x86\xb0{.\xcf\xd7\x7f@[\xd6]\xa5RU\xa9.T9\xd3\x18\n\xc9`\xc4*{\xf2\x04\\\xd5EI\xde\xf0A\xb2\xb1\xc7M\x87\x0b\x1e]\x80xX\x80\xc0\x1f`k\x97\xff\xfa\x0f\xf4e\xcfi}\x8c\xc5\xfb\x80\x99\xd2]L\xf5\xcd\x82\xed(\x17\xfa5\x8a\xe9\xa2\xf9z\x8b+\xd8\x18\xf1\n\x86\x03P\xba\x82*\xae}\xc8\xa1\x83\x90\xd2\xb1\xa1`\x1f^Y\xc8\x9dg\xfa\xfd\x99 w\x9e\xe9\x0e\xc6\x05V}\xa6\xd3\x99\xa5\x99*M\xc5%\x81^\x0d^\x18\xb9\x85\xd7&\xa4S7\xf7\xdats\xea&Zj\x8c\xa9\xa1\x96:\xc7\xd4\x95\x96\x8a\xe1\xdd\xea%q\xb9\xe1\x91\xe2m(\xfc9!\xb7W\x08vk\x97\xbb\xe3`\x7fQ\x97\x8c\xbb\xacqw=\xae\xd5\x947\xca\x9e\x84K\xb5X\xee\xf1\xd01j\x96\xf7E\xbeHJ\"\xb3%\x01\x0f*N\\^_\xd8\xc8|A\xa8Z_\x88YV\x8d,\xbf\x90\xf0\x93\xd6\xec\x8ao\x0fw=\x08ZK\xe3=_\xa62\n|c\\9r\xcf6\xfd\xbc\xd8\x9d\x8b\"\xf4\xc1>\xa4n\xc6\xdd\xdbh\xd7~\\\x81P*)\x18/\xf7\xf1Z>\xea\xbc\x967\xac\\\x9b\xa6\xc5z\xa6\xc3\xea\xc1\xe9\xb4T\xb1\x1cVE\xb5\xca\x96j\xe2a\xd5\xe0\xfa[\xaa\x98\x0f\xab\xa2\x82\x8fFn\xa3\x8a\x81\x8235\x05\xf2AV\x0d\n\x89\xfd\xecu/\x95e\xbf|\xce5\xaeG\x88nF`\xb4%\x13}W\xb4arq\xaa\xf49F\xb4v\xbf%T\xe1\xd8\xf2\xd5\xce\x90Au\xf2\x0d;\xdc\xb9>\x1e\x82\xe8[\x97x^\xcdJ\xc8x0l\xf3f\xf0\x03$o<\x94i\x91I\xee\xd2I\xb6\xb9y\xe5]\x19\x07\xcf\x8d\xf2\x90\xd7\x16\xf4\xa8\xa6_?h\x02\xccr\xfb\xfaZ\xb45\xb4\x0d\x1a\xacIQ&\xdc\xef\x92PE\x92IA\x92\xc5\xe4\xf3\xd9\xd4u\xd6;\x81\xe3u\xe7\xd8e9\x9e<\x11\x02:s\x8eW,\xcf~\xcf\x85cF>\xd3\xcb$\xd2n\xb1z\xf4u\xfaUX\x18V\xad\xd5X~\xefDa\x9a\xde\x84\xd1'\xa7\x92\x1eb\xf8Y\xb8!\x8aZ\xcb\xef-\xaa\xc5ka\x07\xc7c(\xb4\x94\xb3\x8de$\x8e4\x06F\x92\x0f\xa2\x85\x9d\x1e+_\x8b\xc2\x97|$*\x08\xe4LZ\x8d}\xa0G}K>\xed\x1a{ie\xf5\x11\x1aT\\]\xdb\xa2X&\x1f=\x10\x89\xfat\xe9w\xc9\xe7Q\xbbjU>\x93Ooo\x9f\xffk{k\xd5N\x93OW\x87\x07\xd9b#.D\x12SRS\xee\n\xb6\x90\xb3 \xb9\xb9B\xc8\xd0\x9e\xdc \x1e$\x93ps\xf3\xaaa\x8d\x10\xf6D\xe5\xfd\xe6YQ\xcd\x03zt\xfd\xbf\x0e\xbd\x81\xd68<\x14\xe3\xd5hL=wU\x07\x89\xdf{f\xcdx\xbb\xa6\xb5\x89\xcc/\x84\x97E\x93<2\xe9;\xb2\x92\x0c\x91\xe0$\xbb\xc2s(S\xfc\xc2u\xd9\xb5Y\x84\x10y\xf5]\xa9F\xfe\xca\x83i\x91/\x00\x9d\x83\x85i\x9aG\xca\xcf\x0fY\x19NI+\xe1\"\xcdo\xb5#\x81\x91\xa3n\xe2\x16\xdc\xa7\x0c\x0d*w\x94\xa1\xe7C\xe2\xe6<~b\xc8\xdb\xea\xa7G\xf0h0x\xce4\x1f\x0c\xceA\xe34\xc8rq\"\x88\n\xcc\x94\x8biRX\x0f\xf9\x1c\xdc\xb3\x8b\xbdg\x97\xd6\xc5\x8e\xeeI\xb0j\x9b{6I\xae\x0d\xc1\x14\x98\xc2\x05\xc2>\x14\xc14\x91Z\xc1\x8c\x86\x13\xaf\xcaoT\xb07\x8c],z\xaf\xf2\xe9?a\xec\xf5\xd2\x98\x16E\x01\xbe\xff\xc2\xce\x15\x01\xeb\x81`G{\x05\x87\x83h=u#e\xee\x8b\x97\xdf{\xae3\xcd\x8bq\x18\xcd\x9dA\xa8\xa8O\xe3\xf5\xd9\xaeY\x10\xf1\xcc\xe2\x06r\xf7\xb5.)\x10\x82\x88W\xaa\x18\xd7\x1dL\x8c#R\xc3\xf8$+T\xcfL\x8d3\xdb\xbaC\xfe\x01\x9e6\\\xe5n4\x84\xban)\x9c\xc3r\x97\xb1D\xb0/\x0c\xc2\xcb\xc6\xd1\xf5T\x04\x8c\x94\x8c\x0dFO[\xa1I\x13\xe7\x0b6\xd0n\x08\x93\xc3J\x7f\xd3\x89\x1c\x11\x93KI#2\x04\x97\x92v\xebx\x9e\xcf\x0d\xe1\x1b\xa3\x82Z\x91\xc6\xe0\xc6\xb0\x19\x96%kgP\xc5\x9fI\xfbs\x1d\xa2G\x8fK\x0c%\xdb\xfen\xee\x96\xac[ld\xb5x\xf6\xab\x17\xcc\x86\xf2\x83b\xa9|\xdd\xef@u\x0di^\x15\x945\xf1@\x06\xe6\xc5I\x1b\x8b\xf3LY\x1c\x86\xceh\xa5\xec\x03#H\xc4=\x88\xf8\x8e\x16\xe8\xcd\xef\x19\xb7qS\x1a\xe5\x1fqA\xd3\xba\x0f\xca\x17\x0d\x18$ \x945 \xac\x0c\x80P\xb6\x00\x01},\x98\x16\x1d\x05\xd3\x86%G\x9bd\xc3J7A\xc1\xa0\x01\xa4\x82B\xa9\xafv*V;\xf5D\x0c\xbd\xe8~(\xa9\xc6\x12\xadp\xb9\x02I<5_\x01={f2\x18\xcb\\\x8b\xb0rwW\x17nrt\xb7\xfbB\xc7M\xdc\xa7D[R\xa9\xaa\xbd\xb8TS\x82\xd5\x87\x88\xbe\x05\x97&\xb8\x8e}\x98\xfb\xb0\xf6a\xe1\xc3\x0c\xf6`\xa9\xaa\x89\xdbhU);n}dD\xa5Y\x94w\x87\xc2\x06\xde\x11\x06\xd9Oa\x04:\xbae\xcf\x0d\x92\xe0\xcd \xb6q\xc6\xb3\x1e\xe3\x8e\x84r8i\x99v\xb0\x1a\x13wf\xd4\x19E\xba3\xe6\xa6\x072F\xef\x1b\x88\xe1\x0fp\xf3\x06n67\xcd\xd46\xab\xd1]\x08G\xacwn\xe8\xce\x91T\xbd\xb9\xf2\xf0\x8em.\xee\xd8\xee\\L\xf3P\x06\x81\xb7_\x0b\x1e\x0b\xb2\xba\x9a]4!\x1a\xcd\x7f\xcd}\\\xc3\x1eTq'\xde\xc0\x066\xb9F\x8e\xc3\xf5\xbc \xce3b\xb8\x14\x06\xb5\xb3\xb9\xbb\xf6\xe1\xce\x879\xb7\xc5\xe3w\xc4\x03\xba\xf6\xd5\x0b~<\x1f\x1f\xfc\x99\xc7j\xa5\xc1\xf9\xf8\xf2\xc3\xf9)\xec\x89\xdd\xf6\x8d\xe7\xb3\xd5'u\x11\x1c\x8d\xdf\x1e|xw \xfd\xfe\xa9ww^\xf5\xf8\x9d~)\xfcL\xbf\x12\xff_\xdf\xdb\xdf\xb4BR<\xb7\xdcm\xec\xe8\xdb<1\\\xf1\xdc\xdf\x94\xd1rH\x85Fm\x8aD1pD\xee\xc5\x0d\xb1\x18\xddd\x83\x00\xad6a&\x1f\xec\x96\xd6+W\xa8\x869O_\xeaGCU\xcchc]}\xb5-\xdc\x0e\xa7}\xd9\x7f\xdep\x05\xa7\x07\x82\xc9\x8cxp\xf8\xda \xb39FQ\xde\xe2(\x10\xa6I\x16\xa6ig\xd7:;\x0eP\xb9&\xeb\xcf\x08r\xa4Q\x9a\x97b\x00\x9d\x05\x9aF\xe6\xdcu\xc5\xe0\n\x86\x0c\x0e\xba\xe6\xde\x93\xa8\x15{\x1a@\xba\xd2\xb0\xd9)\x81d-\xb0\x11s\x03a\xdbu\x8b|V\xed\xab\x05\x90\xd8\x81\xfb\x83GM?\xae\xff\x93U\xbcNh\xe7u*\xcffA$\xa0\xf8\x80\xbaa\xa7+\n\xae\x01\xd6\xa3T\xc5\x88,\xe7\xc9\xdfV9}\xd3\xe1\x8b\x83=7\x05 ?\xd9\xb3\xf0\xd6^\x0di-\\,\x1f\xa5\xb1\xd7C\x1a\xfb\xb7\xcfO_>Fk/:\x14\x0d\xa1j-}\x94i|\xd1\xa3b\xc8\xdb\x9a}k[\x83t\xd8\xa2<\xa3I\xb6j\xdf\x0c\x81\x95\xc5\xe3|0j\xf6\xbb l2\xfcX\xaen\xf8\xb5\xb5\xbb\xf2!\xf4\xe4e>\xe3@\x19+\xbc\xa9#:s\xe5b\xaf\xca\xfa\xf7Y\xc9v\xe50\xd2C\x0c<\x92\xbaH\x83\xea2\xfa\xa67\x851\x0b\x852\xb5\xd9@\xaf\xcd\\\x96\"\xbf\xce@ [\x92\x96FId\xb8\xb5\x9d\xa2p\xa1\x99\xb6l\xa3\xabvx>\xf6\xd0|yp\x93\x17t\x04N\xc8\xfe\x1b\xd0\x1f\xcb\x92%\x0b\x0c\xe11\xce\xe2\x11\x94\xae\x13\xca\x04\x92\xc5\\\xff\xb9\x99\xd4]\xcb1%<\"H\xb3\xaeD&\xeb5\xd6\x1f\xba\xeb\xbd\xa0!\x1b\x89Zg\xc9\x92\xf4\xfax\xa2\xb1\xae\x1f\xd3U1\x02\xe7&]\xe9&\xed\"\xc3a\x98\xbdO\xc3\xbb\x118Q\x98-\xd3\xf0\xae3\xdb\xe5\xbc\xc8W\xb3y\x9d\x9b\xf2\x04K\xa1y\x98\xcd\x08\xcb\x8c?,\x99RT\x01w\"\x8c e\xce\x92/\x96y\x99T\x0b\xe6Du\x82uu\x94Bb\x1e\xd5b\x1dS\xa6\x14\xfc\xb0\x8cQ&\xa0\x96\\a\x9a\xadhF\xc9gzB\xb2\x15\x16\xc2\xb7\x05\xc9V\xb6\xecK\x9c\xf8|i\x9b\xf5\x15v{e\xe9\xa9\x12\x1ek\x04N|\x93v\xcc\xe1Q\x11\xceX\xa6\"\x9c\xd93\xf0\xd9ey\xac\xd3\xca\xb3QRT\x19)\xb1\x80\x16f\xfd\x9cP\x99\xf3sb\x1bG\x11\xce0\xc0\xa3\xc8\x99\xb2\xdf\xf6\xacg\xeb\xaa\xf5|\xdd\xd5\xb8\\w\x96\xb3c\xc1\x8f\x8a|\x89\xb9\xf2\xa5%\xc3\x8ao\xd7\n\x9ec\x91\xd0\x05\xd7\xe3\xc5\x92&\x84\xcd'\xe1\xbf,\xd9\xb2\xa8\xb8[R\x9eQ\xfe\xb6e\x8dE\xb6\xd8\x9a\xa5(r67\x84\xfd7gy\x9bG\xabr\x04\xce\x94\xfd7g9\xce\x96\x08x<\x02\x981\xcb\x9f\xc9\xddQ~\x9b\x8d\xc0\xf9D\xee\xe2\xfc\xd6\x82\xca\xfeL\xee\xde\x17\xa4,y\xbe%\xfbi\xcd\xf8a\xc9s\xad,\xab\xf0\x0e-\x93\x19\x0f2\x92f\xca\x8cs\xe9\xca|Bh\x18\xab\x05\x16\"\xc1^H\xc2\x0c\xcb\xdf\x013U\xe0\xb8\x118\x0b\xf6\xdb>\x07U\x108\x99\x95qW\x1dY\xcfp\xee1gn\x9b~\x9e\x91\xef\x03\x9e\xd3\xba\x11D\x988\x99\xd16\xbb\xef\xc3\x121\xdd\x92\xfd\xb7eY\x95<\xcb\xaa\xb4e\xe1G\x89\xfd\x1ca\x19\x92l&\xf2$\x99\x05\x19\xbd/\xf2\x99\x80\x9b\xa5\xf8i\xcex\x1eRRm\xcb\"\xa4\xa4kKr \xdb\x08\x9c\x12\x7fX2\x11\xf2 \xb7Y\x89?\xec\x99\xf80J\xfe\xcb\x96-\xe5\x91=\xab.\x962\xa5\xb3\x9f4LS\xde\x07\xfe\xcb\x92mU. b\xec\x92\xff2g\xbb$\x9f\xa9\xdc\xd1T\xfe\xb6dM\x16\xa4:\xf3h\xb2 ]\x87\xdde\xbe\x8a\xe6\x87a\x16\x116\xa5\x94\xbdE\xf8\xd6\x91\x9d\x1f0\x98\xd7\xde_\xf6U\xec\x17\xcci\xdf/\x98U\xeeX\xcc\xdb\xb1e\xf1\xda/Q\xa9>Z\xa5\xd4d_3\xcdX\xd1\xcfy\xbaZ\xd4P\xb7\xc6\xd7\xae\xf5\xfc%L(\x87\x96[\xfe\xcb\x92mNp*o\xd9\x7f\xcd\x04\xb4Y`\xcex(\x1e\x85\xa6\n\xa2w|\xe4\xc0\xa6\x90\x18\xb9\x8d8\x04^P\xa6ID\xdc\xa7^\x93\x1dX\xa3j\xdb?\xbe\xa2VE\x93\x94>'2\xd2Z\x1d\xa4\xb0}\x990 p\xad\xa9\xa2~\xf99:\x8f\xf9)\xcc\xe2\x94\\\xe6\xcbwdMRw\x1d\xcc\x1b \x9e\x0f\xeb\xa0]=\xec\xf5{ll\x8e\xa2$t\x9ca@\xcc\xbe\xae\x19\xdb{\xf2\xc4\x98\x1e\xd4\xd5\xb6\\\x01j\xb3X\xb6\x9b7\xb5.5\x88\xdc\x0dc?\xbe|\x01\xe3\x87\xa0\xaa\xdf\xed\x0e1\x97b\x81\xcb|\x80S\xd1\x86\xa4\x98\xfa\xd0\xed;O>b\x00=j}\x95\x16\xde\\D\"\x99\xcc\xaf`\x0f\x96\x9b\x9b>D\x13\xf6&\x82\xfcV\xaf\xed\xe5\xe6\x11 `\x0f\x92V\xc0\xc6#\xc20%\xc9\xa2\x84\x94\x13r\xd50f\xcb\x87\x08\xb3P\xcb\x9d\xed\x1c\xabu[\xa1\xc7\x99\\\x89X2+\x1e\xa7\xd8\x91{\x9d\xcb\x86Wht/v\xbd\x07\xfbfp\xa2E\xb8\xfcqu\xc3\xd6\x11?(\xb5\xf8\x12e\x08\xb3\x9d\xd4\xe5G\xfd7\xd5\xa8\xd4 \xaa}@%Gg'H~\\\x88\xf3\x96W\xe4TGqc\x02\xe4\xa1\x0c\x1b;\x9d}\x16\x01o\x95\xf6\xaa\xea\xeb:\xee\xd9cC\x0d\xc6\xc2\xbf\x1c\x9f\x1e\x9d\xfdr\xfd\xd3\xc1\xe9\xd1\xbb\xb1\x1c\x0bR\xd4r(x\x86p\xbe\xbb\x1e\x9d\x9b\xba\x92\xde\x16\xa3s\xef1\xbc\xb7\xa2dUEf\xc1}\x96\xf2\xd8\x17_\n\x01 \xf3\x04\x90`uI\xe6\x08\x15\xd7\xc1\x93\xd5\xecO\x92\xf5\xf5\xa8U\x81\xec\x10\x96G\x1a\x97u\xca\x87\"\x10\x1f\x85N\n\xbeck\x98\xc0\xba\x1d\x9b\xf7\xd6\xb0\xb6W>\xc4\x93\xd5\x15\xef.n\xc7\xbdVHy\xe8;.\xf4Z\xfb\x03\xd5\x80b\x867\xa8\x9f-\x85bK7\x1aK\xfd8\xfdhB\xcf\x90\x8e\x88\xc86<4\xe9\xfbpF\xfe\xf2k\xcfA\x86\xb7\x17\xfa\xad\x1e+\xdd\xe9Kz-\x9c\x86\x9a\n\xba\x0e\xa2\x19\xfcm\xd2\xe3\x92\xf7$\xaa\xd3\x06UQ\xa0k|$+W\x85\xc0`?\x87\xe9\x8a\x9c\xe4YB\xf3\x02 \xba\xdeq*\xae.\x90T\xc0K\xdcu`\x984\x97\xed\x80\x0d\xcc\xb41\xed:|\xd8$\xac\x82\x82L\x0bR\xce\x95~\x95\x96\xfb@\xd3R/\xf8\x18\x94\xd2\xe8\xebzZ\x87\xecR\x1fm?To_-\x06\x08\x83<\x904\xc5\xd4Ur\xa5\xd1P\xb4\xe6\x94k\xb4^\x17\xab\x94\x94\xd7\xd7\x0d\xdd\xf0\xeb(\x8c\xe6\x04\x13-\xd7\x8b\x85Bp\\_O\x93,\xc6\xdcv\xaa\xa5\xad\xf7W5-\xc8\x04~\x8d\xb7\xb5\xfb\x06\xa8\xd5\xb1`\xb3\xe0ds3\xbbB\x85\x01\xae*s\x0fO\x83\xbe6\x82(_,\x93\x944\x07a\xbaB'\xa2\xfb\x06\x96\x83M\xa1\xe3hT\x0cQ\xc6)\xecI\xddn\xda\x8e\x04\x84\x13\x98\xfc~\xe3\xf5\x18\x07\xa8\x95\xa2\xae\xfe?\xd0\x07q\xaby[ OY\x92\xc7\xda\xe2\xae\xf3:\x86oD\xa9\xec\xc9\xd4)p\xd1!X\x86\x13!\x07G\xf9\xe0\xbe|\xd1Z\xe5#\xcd\x82if\x88M\xdd\x1a\xad\x0d\x1cB:\xd0\xf2\xa5\xa8a\x99o\x01\xa3\x11\x1a^\x12\xb1\xbe\xea>\xa3\x19Doq\xb5\x81B\xb5\x8c\x16V\xd1\xef\xc3\xa2$\x05\xb0\xe9C\xc3\xb2i\xbeB~\x1f6A7K\xd7\xf6Eq\x15L\xa5\xf1g\xebK\x98b$c\xfc\xff\xe5\xcb\x90]\xdf\x9c\x9d\x1b2\xcd\x0bb4\xf7k\xb9\xb1ZK\xcfx\xbd\x93\x94Hm\x9c\x8eI\xca\x1fs\x92\x82r\x89l|\xee\xc3\x8e\xc9\xf5!C+F\x13R\"\xd9K\x93C\xc4if4/\x0dS:\x82\xa4\x9e\xf2\xd6\xb6\xbb\xd7\n\x84SJ\x8a\xff=\x0b\xc0o~\xff\xa7-\x02\xc34\xf7@\x13F\x04\xa0M\x08\"/\xdb$\x18T[z'\xc10q8 \xc5cM\x02\xefA\x9f\xf2\x17\xcb\xd0\x0cJ\x8b\xae` \x8c\x00e\x06\xdc\xe3cs.\x86\x1dy\xf5Y\xd9\xd2\xa0\xe7\x87\xd9\xb0j4\xba\xa4\xda%fU!\xca\xce\x1e\xc3N8g]\x87E\x98\x853R\x8c \xc9\xd6a\x9a\xc4bg0\"\xc5\xb4'\xa0\x8d\xbd\xe9\x95:*=\x84\x13\xe6\xbe\xef:\xc5I\xd9Z(}\"\xdc\xeee\xf2\xfe\x17\xcc\xe5\xeec\xcc\xe5\x8cP\xde\xbb\x01jo\xc2\xcb\xc1\x9e\xdeB\x0d\xef\x15\xe1\xe9\xb6\xfa1!W\xda\x1e\xfd\xea\xdf\xdf\xf3{\xbf\xbb\x93\xce\xbd\xbb\xe6nC\nn1hq\xd6\x8e\x16\xc0\xc12/O\xc2\xcf\xed\xaf+\xf9\xb5\xfd\xa9\xc4OIy\x9c\xbd\x0boH\xda>x\x94\x8f^M\xc7\x9b\xf2\xa5,\xcf\x87l\x11\xd2hN\xe2\x8b(_\x92\xb2\x8e\x0dj\xfc\xbc\xb5\xe5\xb7*C>\x05{\x8bf\xf5x4)\x9d\x10\xa2\x14F\\\xed\xbe\xe1\xa3\x82\x1f 4z\x9ag\xfdz\xcd\x0fN7\x07\xa1\xca\xaf\xea\xecaq\xcf\xf3 \xdb\xdclCr\x15\x82\xfb\xf53\xe1\xdb\x11\xbd\x04\xb2\x9f[[V\xd2\x99\x0b{\xcc\xbc+\xea\x80\xb5\xbe\xb4u\xabP)\xb7$EP~J\x96\x97\xf9'\x92\xd9\xc3\xef\x80\xa2\x11\x0f\xfb\xdc\xc5\x19_l\xcb\xa4\xc3\x1e\xf7\x0cb\xfd\x9a\xc1\x16\x9ft\xbe\x06+}\xfeK\xff\xe1a\x15^\xdb\xa2`r)\xba\xeb\xfc\xdd\xf1\x8cq\xa5\\%\xb6r\xa7V\xaa\xd4w\xbd\xa8=B\x15\x02\x8f\"\xc1C]\xc7a\xc3\x17\x0d\xf6j\xa3\xa9\xf5\x0f\xd3\xb8m\xc8IL\xa1H\x9d\xc30\xfb=\x85(LSX\x10:\xcfc\xc830b\xd4\x96\xcb\x8d{\xcew+&\xa20S\xd8\xf5\x02)x\xd2no\xd0a\x87\x08\xe0\xe2\xe6M%\xf5^\x1f\xa4\x96\xc5H`\x1f\xb4\xaa\\\xf4:\xaf\xd8\xb1\xdd\x7f`}\x9d1 S\x14\xd5\x15jD8\xcdW\xb8\xc0\xb6y\x1b\xc1!\x8dd\xf2\x97\xedr\xedt\x19\xae\x9c\x87]+\x10\xe1\xc8\x18\xd3^\xdd\x9e\xa1\xe6\x8eJ\xd1?\xc7\xd9\xf4\xfeun\xfcs\xbak\x83\xe4<[\x93\x82\x82p\xfbKsX\x16\xc9\"\xa1\xc9\x9ap\xefON\xdf.\xd3\xd6\xb9\xe9\x0c\xec\xfb\x9d\xfb\xfa\xe5\xd0\xadpd\xd4w\xdd'\xb8\xf0\xf4\xf5B\xd7\x1f\x0dE\xfa\xae\xe7:\xc7\xe3\xeb\xf7\xe7g\x97gz\xd0\xd1U+jA\xe3s\xd9%\xc8\x02)\xcc\x12\x8e\x99\xdc\xdd\xef_x\xae\x93L\x8bpA\xf4\x86\xe4S\xe0\x05\xa0\xcdS+\x8f\xc2\x12\xa0I\x10#7\x97ix\x07{\xe0dyF\x1c\x1f\xa3R\xecx\x0d;\x17\xee\xa4\xb0,\"\x96\xed\xaf\xe1:\xe4VE#\xc7\xe7\xa4(\x0dP\xe3/\xa3\xbf$Y\x9c\xdfV\x08\xc3\x0b\xf2%\xc9\\\x1e*\xa0H(q\x9d\x1fx\xd1?T\xc2\xec\xb7{\x1c\xbf\xfe\xf0q[|r0?\x1a\xbc\xba\xc2\x95\x14 \xde\xbe\x81bk\xeb\x8d\x07\"<\x8b\x12oe\x92L\x8a+\xc3\x8d\xa4\x00\xcc\xd2\xd5\x0e\xc4\xaecE\xa0\x1eP\xa3\xb6Zi-#\x02\x16\xa2v\xe9.Kq\x8e\xcf\x8f\x17N\x91\xa0\x03t\x1f\x9a\x9f\x85\x93\xd3I\x88n,\xd1\xfe\x04=\x9fka\xd4\xa5\xe3h7\xfb\xff^D\xfa\x17O=\xd7\xf9D\xeeJs`\xdf\xdd\xdd\xfe83\x96\x8e\x17\x82\x86w\xf1\x07w(\xf9\xe0~>5\xd9$\x17\x13\x871\x11\x05\xd9\xfaky]\xce\xc3\x82\xc4\xd7\xd7\x8el\xd4\xfc\x0d\xef\xfb\x1f8\xa2\\\x8e(\xe7#\xfa\xc7\xd7\xbe\xf1\xd8\x10\xab\xa38\xd2\xf7\x9b\xd7\x90~R\xbe\x97 |6\xf5M\x04\x99O\xf3wy\x14\xa6\x84\x9f#\xbe\xe4\x9e'\xb0u\x82~\x07\xd1\xa1\xacsVG]B\xbb\xb2\x02\xcd\"-T\x18;\\\xc34%8be\xe9F\xc2\x12\x19\x1e\x008\xde5#8773\xd8\x84\xc2\xab\x18\x13F\xc4\xf7\x9dl\xd6\xbd\xf0\xd2\xe2\xea\xf7\xd9\xffx\xb6\xf7y\x0f\xa9\xf4\xe2\xe5C{\xfb\xa8\xa4\xd2\xee\xeeK/\x98\x9a\x899\x93\x07\x17\x13\x9e\xea\x1b\x87\xf9\xbe\x07\x95a6r$V3!='5A\xeeC\"\x03\x84\xa2\x03\xb6\xf6foz\xa25\xdd\xecH\x87\xc6\xcd\x8d~\xcf\xb9\xea\xf5\x80\xf3t\xd74\x03\x18{\xbdw-\x19#b\xcf\x04\n\xcem3X(\x03_\xf2\x18B\x82\xa7!\x0d\xdf\x11\xc6XI\xa0\x13L\x8c\xa5\xf9\xf2Eu\xd4\x9e\x19$a?\x86\xb1\x8cW\x04\n9ju\xcf\xc7=)g\x95\xec]}\xaa\xcb3\x11\xd5J\xa0\xd1*\x11e\x13\xe8\x8eVc\x1d\xbf\x81uy\xfa\xbdY\xd4\xf0\xbdM\xce\xd9\x07\xbe F\xefd\xc8\xbf5W|k\xfc\x9b\x03\x9b\x90\xa1\xbf\xdb8'e\xf6{\na\x14\x91%\x85\x82\xcc\xc8\xe7\x96\xd3[\x01\x11\x02\xa9~\xdb\xa6f[\x14\xa5\xc5\xfd\x9b\xd3x\xc6\xc3\x1el\x07\xdb\x9aH\xc9x\xe2:\xdb\xc1\xb6\x03\x13r\xe5jnu\xaa\xa3\xd6(\x80\xef=\xbe\xe9\xa4\xb8\xe2\xf6\xb8\xb0am\x03z\x8et\xd3\xfcn\xdc3\xe0\x11\xc5\x8d\x8c\xb4\xfd\x90\xec=L(\xb27F\xac\xda2Q\x16\xa2\xad\xd6 \xc9M\xa0\x9f\xefx\xc1\xf4\xa1k\x9b\x07\xfc\xcc\xe7\xec\xa9|\xe1\x81\xa1\xfe\xf1\x15\x83.\xd4\x19\xfe\xa1Gtq\xae\x91\xc4!xAs@\xdd\x1d\xd4\x97'\x90d\x1c\x93\xac0f\x95 c\x0b|\x1c\x06\xd3\xd65I\x1f\xac\xb7\x97DH\x8cf\x84*\xfc0\xef\xb6\xd9\x8d\x07\x0fXz\x7fT\xdf\xa1\xcd\xb5\xfd\xddFs\x90\xdf\xc1\x1fc\xc2\x05iI\x9e\xc19\x89VE\x99\xac\x89\x94\xb8\x92\xcf\x94dq\x92\xcdZ\xc5\xc2\x15\x9d\xe7\x05\xfc\x9c\x84\xd1\x9c\x94i\xb8\x86w9-\x17a\x96\xaf\xe1\x87T\xfe|\xf5\xfa\x8f\xb3E\x98\xa4A\x94/\xfe\xd0\xaa#M\"\x92\x95\x04N\x8e/\xb5oz\xd6\xcb9\xe6\x82w\xa2\x84{r|\xe9\xf5\x949\xcc\x97wE2\x9bSp#\x0f\x9e\xee\xec>\xdbz\xba\xb3\xfb\xca\xd8\xe5\x9e\xaa\xde\x93b\x91\x94\x18\x14,)aN\nrs\x07\xb3\"\xcc(\x89}\x98\x16\x84@>\x05\x06_3\xb6L9\x84\xd9\x1d,IQ\xe6\x19\xe474L\xb2$\x9bA\x08Q\xbe\xbc\x83|\xaaW\xcf\xce\x11(\xf3)\xbd\x0d\x0b\x02a\x16CX\x96y\x94\x84\x94\xc4\x95\x1e/Zf\xc04II .\x9d\x13p.D \xc7\xc36c\x12\xa6\x90d\xed\xca \xc8\x9cp\x9b\xd0y\xbeb(\x9d\x83M\x92g\xbe\xf0s\xcdz(?\xa7\xc9\"\x11\x0d\xb2\xe28\x8b%\xd0\\\xaf{U\x12\x1f\x07\xe5\xc3\"\x8f\x93)\xfbOp\x0e\x96\xab\x9b4)\xe7>\xc4 k\xe9fE\x89\x0f%K\xc4\x05\xf4\xd9(\xb7\xf3\x02J\x92\xa6\xac\x86\x84\x94\xc6\x89\xa9\xfb\x8eE\xf0\n\x80-\x06\x15\xd3\xcbz\x05\xb7\xf3|\xd1\x1cgR\xc2tUdI9'X&\xce\xa1\xcc}\xbd\xfarU\xdd+\xb0\xd2\xd3>\x1a\x1f\x81sp\x01\xc7\x17\x8e\x0f\xbf\x1c_\xfet\xf6\xe1\x12~98??8\xbd\xfc\x15\xce\xde\xc2\xc1\xe9\xaf\xf0\xe7\xe3\xd3#\x1f\xc6\x7fy\x7f>\xbe\xb8\x80\xb3s\xbd\xe6\xe3\x93\xf7\xef\x8e\xc7G>\x1c\x9f\x1e\xbe\xfbpt|\xfa'\xf8\xf1\xc3%\x9c\x9e]\xc2\xbb\xe3\x93\xe3\xcb\xf1\x11\\\x9ea\xfb\xa2\xe6\xe3\xf1\x05\xab\xfbd|~\xf8\xd3\xc1\xe9\xe5\xc1\x8f\xc7\xef\x8e/\x7f\xf5\xe1\xed\xf1\xe5\xe9\xf8\xe2B\xaf\xff\xed\xd99\x1c\xc0\xfb\x83\xf3\xcb\xe3\xc3\x0f\xef\x0e\xce\xe1\xfd\x87\xf3\xf7g\x17c88=\x82\xd3\xb3\xd3\xe3\xd3\xb7\xe7\xc7\xa7\x7f\x1a\x9f\x8cO/\x038>\x85\xd33\x18\xff<>\xbd\x84\x8b\x9f\x0e\xde\xbd\xc3\x96\x0f>\\\xfetvn\xea\xfd\xe1\xd9\xfb_\xcf\x8f\xff\xf4\xd3%\xfct\xf6\xeeh|~\x01?\x8e\xe1\xdd\xf1\xc1\x8f\xef\xc6\xbc\xe5\xd3_\xe1\xf0\xdd\xc1\xf1\x89\x0fG\x07'\x07\x7fb}?\x87\xb3\xcb\x9f\xc6\xe7\x98M\xf4\xfd\x97\x9f\xc6,\xa957\xa7pp\n\x07\x87\x97\xc7g\xa7l\xcc\x87g\xa7\x97\xe7\x07\x87\x97>\\\x9e\x9d_V5\xfdr|1\xf6\xe1\xe0\xfc\xf8\x82\xcd\xde\xdb\xf3\xb3\x13\x1f\xd8R\x9c\xbdeY\x8eO\xdb\x9d>=\x1d\xf3J\xd9\xaa5\x17\xf7\xec\x1c\xdf?\\\x8c\xeb\x9e\x1e\x8d\x0f\xde\x1d\x9f\xfe\xe9\x82uH\xcd\xacC\xcdv\xe3]\x9e%`!\xf7\xa5\xf4\x02\x92\x8c\xc1g\xc4\xe3\xfc\x8a\xf3\xb5J9\x12\x97$\x8d\xc4s2\x1b\x7fn:\xf1S\xe2oAS\xc7\xdd\xd88\xea\x874Z\xb6q\x10R&AE\x04\xaa}\xf9\xab\x0e\xca\x00#dI\xa8\x12\xa6\xc1XU\xa5x\xc26<\x1a\xd0\x19\xbc\x92\xf7w\x95M\x89\xa7\xb2U,\xc1E%\xa4\xcbdA\x1a\xd2.k%|\n\x1b\xd5\xf0$\xa3ZVK\x17\xebCF>/I\xc4N\x992\xa1+\xe1\x83e\xd0\x8a\xe4VI\x97\x14\xd3\\_#o|}\xedT\xf7PUh\x99\x96\xb0\xab9ak\xe1\x94\xcbH%\xda\x00\xc1\x10\xe0h\x17\xad\xccd\xd4\xfa:\xd0G\x1d g\xe7\xaa\xd3\x96\xc6R\xefS\xaf%\xab\x9c\xec\x18\xae\x14\xe5M,7\x9e\xec\xce+*\xe4jz\xb5N\x1aZ$\xf3\xeb\xf3\xaa\xbc\x0f\xbb\x06\x9d=k\x14M\xc3\x04\xa0\xf9]%\xe0\xc4\xb7\xa6~\xe0\nidA\xb2~\"w\xa5\xbb24iu\xa1\x0f\nc\x84\x12\x9f\x90\xfb\xa2G\xe1I\xee\xa2gz\x1e\x19$T\xc1\xc2\xd0S\xd2\xe8\xa9\x8c\x9c\xeb\x86\x93\xb2\xba\xf54h6\xaay*\x90%f\xeb\x06\xf5Y\x0b\xa5\xea\xc9\xd0x\x8cm\x03\ntN\xd5\xdd\n\xa8\x8b\xa2\x85G\xaf\xee\x83\xd9~i\x8e\x0c\xa35\xe5\xe2\xba\x97\x8bw\xb3F\xa2\x90\xf9\x8a\xb7\x04-\xd6\xd5\x94\xb6\xf7-\xf5\xf9\xea\xf9\x90[s|E\xdd\x96\x11?\x06\x9a\x13\\\x88O\x86\xd5\xa3\x8d\xd5\xa3m8\xa3ze\xbc\xd7\xbc\xc2f:\x0f,l\xec\xa0!d%\x1bMhA1\xcd\x80\x94\xcf=\x11Oq\x10\xbf|\x1f\xa5K\x9b\x00\xbb\xbd\xf4D\x89\x92\xc4\xd6\xd6b\x94\x88\xcc\xba\x01u\xb4\xd4{qZ'W(\x11n\xe7\xcf\xb8>\xba\x1et\x9a=\xea\x8e\xa7\x86\x1do\x0d7,Q6\x9d\xe4\x96\xbdc\x0c\xb9\x94\x08\xffqO\x9e\x98\xa6\x85\xf1\xf7[\xbb\\\xc6W[\x08M\xf2+6\xbcb\x92_a<\xf7\xc3\xa4\x88ViX\\90\x92\xa9\x04\xb3\xf9\x90 \x97\x0e;\x08P\xe2\xa3!\x00\xaa)\n\xac!\xf6#\xe56ih\x9f(\xcc\xd3D\xda\xd0\xf2\x0bR\x96\xe1LV!\xdf\xf6\xea/C+*i\x18}\x12\xd5\xf0\xdf{2\xd5P\x85\x14\xc57w\x04\x03\xf0 \x06\x922\xde\x06\xe1m\xca\xe4\xad\xf8\xc2-?\x84\x1f_\xe0~\xd5\xf2\xecn\x91\xafJ\xc7\x83Mpp\xfe\x1f\xacP\xf8\xfd+\xf35\xe3\x0bc\xc8#\x96n\xf2|\xcc\xd2\xf5k\x80\x95H\x7f\xed\x99\xcc'K\xbb\xd8\xc9\xa4\x10\x8d\xda8J\x84\xbb\x1d\xae\xf0j\xd0\x9d\xe2zS\xdc\x19? \x0b\xd7{\x03\x9b\x9b\x14~\x80\xcc\xa8S,g\xa2\x1do \xa4\xec\xbc$\xd4-0\xfeW1\xd9\xbd\xb2\xe9\xed\xd6\xbf\x14\xa5'\xde\x07\x86\xac\xfdF\xb2P\x8f\xc2`\x1ceS\x15\x9em\x94f\xe2{\xe9\xf9\xe0\x9c\x84K\x9b\x10x\x90V\xbc\"Un\x85\xd0\x13\x10e\xf1\xea\xf8\xc2\"\xd2|\xd1\x12\x81\n\x88\xda\xd5E\xf4\xa5H\x7fi\x84\xb4\xd4\x0ei\xc2< \x0ei\xc8\xad\x140\x1a\x99\xd1\xca\xaaL\xfe\xce\xf1\x05\xfbaX\xf4\xd4\xb0\xe8\xb9\xdfH\xae\x16=i\xa6\xf3E\x0f\x9b\x89|\xd1W\xcdD\xbe\xe8es\xd1S\xe3\xf2\xa8C\x1e\xacN\xdb\xf0\x9b\xb2\xb5\xcb\x1d\xa7\xd0\xca\x9c\x98\xeb\xdcK\x1f$\x9b\x9b\x19\xfc\x00\xc5\x1b\x0f\xc8$\x87M\xc0\xf81\xed\xb05\x92o\xd3\xe6l08\xbdx\xaa#\x1c\xa1\xf2\xfcZ\x07\x1bcL6\xa3\xaaS\x0b\xda\xba\x84\xc4m\x18\x0c\xd5\xe0\x8a]\xec\xb9\x8a\xb1\x90,@B\\Q\x1e(\xdc\x90\x1b\xb6[E\xc7Z\x8dj\x10\xb8V\xbe\xaf\xba\x03\x1dF\x83\x9a\xf7\xf4\xea\xbe\x8b`>%\x9e\xebkcZ\x83\xf6t'\x9a\x97\x8c\xf6\x14'\x03\x16\x0eq\xd37\xaa\xb6\x08u\xc7A\xab\x99\xb3\xaf<\xe8L\x15E\x15\xd56\xb8\x87\x92\x8dU;\xbd\xd9\x9ey)\x06!\xed\x0e\x1b\xb1z\x95\x9e\xe9\xab\x015\xf2m!e\x90\xbaB\x16\x8e\x08\xffl\xd0 \xcbcry\xb7D\xd2\xc9d\xfe\x88\xf7Af:\x92;\xa4\xc7zH\xa3\x1e\x83\xe9%\xdfW8\xbb\xd5\xd4\xec\xf1\xab&\x19t^\xb0&&\xbf\xe0l\x1e\xdd\x15\xec\xc3*HJ-7\xb2\xd4\x9a\xde{{\xfeAgPv\x9f=\xf7\xaa\xcb\xd5!z7\xafwv^\xee\xbe~\xfd\xf4\xfb\xe7/\x9f\xef\xbc~\xbd\xfbP6\xc5\xe4\xbf\x1d\xe7\xf1\x0f\x8c(\xc7_\xff\x81\xbe\xf1\xb93\x02\x02?\xec)\xa2\xb0\xfek\xb1{\xf5\xa6\x1b1I\xdc\xde\xba\xd4\xed\xe9\xceC\x80\xfb\xe9K\x9d\xc0\x04\x01\xdd\xdf\x08\xc1l\x13\xe4\x8f\x00\xc1\xd5NH\x1a\x10\x8cU\xa3\xb9cDJ\x83\xc5\x9env\xd0\xca\x00\x9d\xf7\xe0 \xe5]u\xeb\x05\xf9\xdb*)H\xe3\xc5uV4I\x1d/`\x03\xb3xb\x01U\xae\xfc\xe5\x8b\xdc\x8e7 \xdeD6^du\xc6zz\x02[}u=\xfbf\\=`3v(W\x99\xaf\xd6[FT\x0c\x04\xb6?\x06_>N\xdc\xfd\xd1\xe4\xffL>^]}\xf7\xc5\x9d8\xbf\xbf\xf2\xdc\xfd\x91\xbb\xbf\xf1q\xd7\x9b\xfc\x9f\x8f\x1f\xaf\xbe|\xfc\x18x\xdf\xed\x7f\xdc\xf5>\xea\x81Yx\x00\x98\x8f\xb7\xdf\xfd{oH\x07\x8b!S\xc3\x8eI\x17\x8bV\x92t\x01\x98F\"k\xc3\xad\xb0\xc7\xc6\x1ed\x08\xd4%R1JB\x158B\xa64\xdc\x0em\xa0F .?\x8f\x05\xc2\xa3\xc8n$\xea\x9b,A\xf9\xf6H\xa4\xd3<\xf7^\x86\x0e\xf7BD\xf7\xa4\x1f\xcd\xf2\"A\x99pm\xd3\xcaE\x17\xf5\xc1\xb9\xbe&\xe5I\x1e\xafR\xe2\xe8\x1a B\x1bAU\x08AC\x9b\x05Y\xe4\xc9\xdfI|\x11.\x96)y[\xe4\x8b\x8bhN\x16\xa1\x90*\xf0\x8f\x87\xa8,\xf8\x97\x93w\xe3\xcf\x98\x8d\xb3\x10\xf8\xf3/\x8bT+\x94dSR(\xefe\xbbfq\x00\x824\x81i\xd4\xac(z(\xec\x98\x89\x1b\x0b\xdd\xcc}\xf1\xfd\x0b\xcf\xb0\x0f\xf0\xd3\x8b\xd7\x9e\x91\x97\n\xed\xeb\x83\xa0\x10\xd4\xf3(T\xf5\xdaXKFF\xd0\xddZ\xfd\xae\xfdk-|\x19\xb6+\xe1\xa2\x99\xe1qm\xa5,\xa7\x95\xc7\x10F\x8bg\xbd&\x8b0I\xef\xd1\xc2\xaa$\xc5\x1f _\x8c \xca\x17\x83\xda\x12\xfdb,(\xd9\xa2\xc9\x828\xc3[t\xe5\xf5\x95\x17\xd0\xfc\xf8\xe2L\xa8\x84\x19\xf8\x02\x83<\x05\xd1\xc4\xf0\xb6\x06\xc5u\xe3\x95^O\xd3<\xa4\x8f\\u\x92Q2{\xf4\x0e\x0bT\xd8G\xff\x83\xb2\xca*\xf6\x94\xb88\x10 \x8dW\xad\xf2\xa5\xdd~\x13\xdc\xdb\xbcLw'\xa4\xcc\x82mt\x17\x9d\x0frr%\x99\xdeyF\xff3 \xc4f4h3a\xf2AO6\xc14/\x16\xa1\x812\x02\x81\x12V\x13\xd4O\xbcv`\x13\xb8\xa9\xcc\xca\x18\xd5S\xc2%\xf6.)\xdf\xae\xb2\xc8s\x13\xc6c%\\O\xda\xf9\x90}\xca\xf2\xdb\x0c\xb5 \x85K\x1b\xec]\xd7\xd4\xa46\\Xa%\xcb\x0d\x93<2[7\x89\x7f\x00\xa4\xa3\x15U\xd6\xfa\x8ep\xf7\n\xf6\x9b\xaf\xa3\x96)\xa8|r\xd3RP\xcbR \x99\xd9\xb1\x14\xca\x97\"P\xe1\x8035V\xb3Vg\xaa9\xef\x1c[\x16\x00m\xce\xb26\x844\x93\xcf\xa2\xe3\xdb\x0c\xc9\xb0\xcf\x0bC\xc0f\xf60\x1c6\xc3;j\xf3\xf7\x1b\xfc\xbe,\xc841x\xb4b\xcfuU\x03F\xab5g\xba\xe5S\x9b\xad\x16\xe6\xef\xe3\x8aG\xb6\x1c\xe0a\xc7\x01\xceN\x90\xd4C\xa8\xfa\x97\x9c\xe2a\xdf)\xee\xb2Y\xbd\xc3K\xff,\xa7\xe1\x8cM\x8e\xc3\xcd\xa5\xdc\x1b\xd8\x87\x1bF\x96\x8f\xd0>\x16u\x01\xee|\xb8\xe6\xde\xd2\x17\x13\xf6\xdd\xf9\xbcH\xb3r\xc4\xce\x8e\x1b\x96 _\xd1_\xc1\xb5\x85\xc0Q\x0f\x05\xc48\x91\x0d\xf9\xb2\xdc\x11\x83\x07\xd8\x03\xfe\xff\xcb\x17\x98qK\x10\x9f\xa7HU\x0d\xe5\x85\xe5\xe1P\x023\x11\xa9>\xae\x88\xbf\xf5$\x93nn\x9b'\x04\x9e\x0d\xd3\x81ns\xe5\x13\xc9\x1d\xc8\xfd\xb6\xb2\xca\x85\xdf^v\"\xe4V\x9d\xa6\xd6\xf94g\xad\xcf\xef\xdd\xba|\xb6\xac\x8b\xfb\x8d\x0bs\xaf\xf6E\xaeV\xa6\x01\xe4\xb6U;\x91M\xfd\x85\x99\xdc\xee!\xa7\x0f\x199\xad\xec\x19\xb4$\x95\x1b\xf0\xc2N\x9d\xb2\xbe]\xe8q\n\x0e9\xde\xd8\xb8\x98\x1c*\x84\xf7\x97/\xb0T?\xd4$7#\xc6-\xd3\xd5h\x87\x95\xe2H\xa2\xfa){(\xde\x03\x06\xb3h\xa9\xd2\xb5l\xf2a\x03\xff\xd4R\xbc\xc3\xba\x90Jc\x9d\xad\xde&;Wv\x96E}\x0ed\xff:\x0fm\xfd9\x93\xa5\x04D\xd91\xbd|\x16\x93j\xd4\x12\x1d\x1e^UG\x16\x92M\x07l\x04\x07\xd04\xb5\x9dN\x0e\x91\xef\xc1\xff\xcdOg,\xfd\x8c%~b\x7fJ\x9c\x8b\xee\x85\xf9\xdaw\x80\xc9\xa7\xd9\xd9=hw\xbe\xe1\xf3H\x9dA\x8d\x18\x94\x03p\x1byx\xba\x05\xce\xd5\x87\xad\xfa{d\x99.\x86\x15h\x82\xc7{Tw\xe5;\x05\xd1\xa8pa\xf0^\xa2[\x8e\x04\xde\xf7L[\x17j\x94\xcc\xa4h\xa8\x0fQ7\xa9\xcd\x118\x07\xd9\x1d\x9d\xa3\x0dT\x98\xc1\x0dAc7\x0bU\x80\xe1Q\x86\x9e\x08zC\xa5\x8doeH\xee\x11\xcf\x99\x018R\xcc\xdc\xb8 \xffSv\xd4W,\x15&\xcd\xd9\xf9\xdbB\xff\xb7lQo9WV\xa2]\xb8Xa\xc6\xe1M\xcc}\xb7\xf6\xfb\xab\x0fcV\xd1X\xef\xfaW\xe3=\xc8\xd4x\x89'\x05\x8e\x11\xff\xda\x84R\x86\x0d\xb3\x86\x9c+\x97x\xc3s3\x93\x19lL\xa24\x94\x81{M~\x0b\x92,\xc6\xc0*\xceG\xaa\x85c\xd3\xaf\xe1\x00\xcda;.\xa5X\x7f\x92\xba?\xd3\xbe\x1b.-\x7f\xda\xaf&Q\xcd][t\xcf\xd5\xf0\xc8\x9aq\x87\x95V\x9ex\x15\x87\x05O[\x84\x9f\xabxrU\xc6Fb\x85\x1b\x95 hw\xc1`\xd7$\x85\"2OCl\xd8YY~?\x8ds\xd5\xd8\xa0\xbb\xe2\xc4Z\xb1\xeaz\xc5\xb0\xd2\x0dGY>d\x01\x06W\x19/\x12\xca\xdd\xdcc\x9a\x12\xac\xa3\x9ayy\xbb\xd8\xf8\xaaMz\x9dG\xac\xfeI\xf3\xfb\xaeV\xbe$z\x0e\xbb\xd4\x03\xa9&\xe5\x06\x9b*\xc6(D\x06\xa8\x10\xbe\xebL\x1e\x152X\xacJ\xca\xd0g\x08<\x1e\xf2\x9a\x88[)\x8b\x1b\x05#\\\x11\x0eo\xf5\xcc6GD\x16 \xed\xb7\x9f\xe7\xfe\x8f|X\xf9P\xfa`\xf0\xc4\xac\x83\xb9\xabm\x03\x0c!'\"\xe5\n+\x1c$\xc4\xd4l\x01~F\x05'\xb7\x9d\xce\xd5\xd2\xda\xe9\xd2\xd0\xceDo\xb1\x9e\xa1\x8b#U^\xe3\xa9\xc6oc^5\x9f|\x03\xcd\xc3F\x1f eZ\xbe.\xbf\xff\x90E\xe1j6\xa7>\xac\xb2rI\xa2d\x9a\x90\xb8\x1a\x1bv-\x00\xf7\xf7\xb0\x89\x0e\xa2\x1d\xcf\xe4.\x84\xb7\x17\x05\"j5\xa7\xde\xa3&\xdak\xcdq\x82^\xa2\xd4\x19\x98\x90+\xbb\x92\x05\xd7\xc2\xc8<\x0f\xca\xdb\x04UXt9\x97i\xca\xa2\xb0$\xb0k\x8e\xf4/\\\xb0\xa2[t3\xd5\x82>\xa4\xdb\x9f\xb0\xd2\xa7\xbd\x95\xfa\xcdu\xba\x7f\x13\xcf\xee\xd9\x84\xfa\xf6\xf4\x9e\x0d\xca\x9b\x7fc\x99UE\xd4\xf7[\xe1\xb1\xfd\x18.\x97\xe9\x9d\xe8\xe0J\xd7{\xad\x84\xf4\xb9k\n\\\x83,\xd4\xfd\x1a\xc4C/\xc5\xeb-n\xda\xe2y\x95^t\xc9C4r\xc7\xe5Pnnz\x90N\xca+\xad\x8bF\xfc\xa3j\x954\xb1L\x18\xc7J\xcc\xd0N\xe5!\xb6\xe3\xc26$oX\xfc\xce\xa4\xb2\xda\x1aYV\xa7^\x17\x96\xecAU\x0d<\x93\x91[5\x02)~cx\xd3u\x94/\x0e\xfa\xff(\\\x1a\xc8.y(\x90\xaf:8\x02\xaaU\x94\x04\x08/\xa5\x9f\xf6\xae\x074\x87$\x8b\n\xc2\x90\x0d\xfa\xb7\x08\x9c\xd6\x92J\xe4\xea\x9b\xe9/\xd9\x7fZ\x84\x11\x1e\x82\x8d\x04\x0cL\xd7u^\xe7h\xe6\x00\x1b`\x15\xb9&<\xfa\x8du5\xd9\xc3\x03\x88d\x12\x83\xee\x83[\xfd\xdec\x8c\x8dyU\xd0\x08[F\xd8J8M\xf0\xad\xeb\xd4\xbf\x13\xfb\xb7\xdaA\x9a\x0e\xe3\xad\xd6F\x07\x81\xad\xed\xd1\xb3\x156:\xc6\\\x15\xe5\x9ci\xeb\x8ax_g\xf4\xd1\x87\x98~\xe6>y\xd2\xb9/\xda]2\xb7f\x05t\x8a\x0e\xc8\x1a#\xd6\x97G8\x02\x90K\xd8\x9eh\xa3\x0d\xb7J+\x19\x8a\xe8\x8dh\xf0#cC\xaa\x0b\x0eF\x9e\xa6\xb0\xf04\x96\x93!\xb3\xa1\x03\x83\xc6\x04N\xd0\x9bjo\xbc\xb1W:\xa9\xf6\xcc\x16\xb4\xf8\x0e1\x13]\xcbh\x03\xeat\x10,\x9b\xc8\xd26\x8d\xc4\xdd\xf1\xea\xdbx\xbfE\xfc\x19(?I\xe3\xc3H\x8b\x16e\xea\xeba\xbe\xca\xba\x05\x02:\xbboS\xae\xa0\xed\x85m\xc3YRy\x94\x14\xd3`q\xa0R\x87+\x96\x16\x9c\xfd\xf8F\xe3F\xec#4\x1c\xe6\x95\xbaJ\xa3T\xbfI\x80n\x0cD5\x0f4\x99\xfbl\xe7{\xcf\x0b.hA\xc2\x85\xa0H\x82s\x12\xc6\"\x02\x1b\xbe\xffR$T\xbcg\xee\xee\xeb\xefQ\x80y\xb4Z\xa6\xe437\x80\xe3)\x97E\x98\x95\xd3\xbcX\xf0\x8aww0\xf5}X\x96\x97\xf3\"_\xcd\xe6<\xf3\x8b\xe7\x83LMz\x1d\x01\xf28_&T,\xdc9>\xdf\xf1l\xf4\x9fA\xd7\x1e481II\x12\xc6|\xa1|\x84\x07\xaa\xe0\xa7PF\x8b\xbbf\xd24\xc9\x92f\xc0E\xdb9\xbd\xd19\x07\xfa#-\x0f\x08o\xd4~\xb6\x93F\xaf\xec\xf9\x04R*\x8c\xe6\xfb\xea\xb3\x16^d\nd\xe0o\xc2\xc8 \x82P\x1f\x1a,\xb9\x93\xc5\xe8fk\x8b\xf1y\x18v\x1d+`3h-k\xbe\x07\x02\xac1\xca\x8bO$>'\x7f[\x91\x92\x96o\x0b\xf4\xe9mJ\x96\x8bDP/\xcdPlO\xd3\xdb\x92\xcfW\xee\x91\xa5\xf5\xedk\xc7\xeeV\xb7\xd3]\x9b\x0fYq\x11\xc6\x06\x0dn\x8a\xfc\xb6\xe4\xd4\xcb\xc4Y\xef\x04\xbb;\x8e\x0f\xec\xc7\xeb\xc0\xb9\xaa]\x81\x04kR\x94I^y\xf9\xf0\xe1{\x8fk\xd2\n{\xda\x04\x87w\x99\xe8KpW\xed\xd3\x0b\x1a\xa2-\xfc\xac\xdd\x9dT\xd8\xad\xbc\xd0\x8e\x954H\xb29)\x12\x81\x15^\xed\x1aX\xaa\xc8h-\x02(|\x12z\xa6#\xdc\xe0\xcf\x06\x99IL\x05\xfe\xd1=\x0e\x80\xd4uvw\x9f\xefJG6\xed,\\u\xebC\x92\xd1W(i\x025`\x8d\xd7R1e\x03\x98\xfb\xa8\xa1\xc5\x1a}iE\x0d\x0b,l\xf983bg\x10\"6\xee\x82\x8a\xa3C\x0420\x84Q\x05e\x1fSU\xf6k \xd5\x11\x99\xf0\x8b\x8e\x93\xd9\x15\xfc\xeaz\x7f\xea/\x10\x19z\xb7\x0f\xbb/`\x04\xbb/\x9e\xbdzn\x99\x85FW\xd0\xaa\xf4\xcb\x17A\x0c\xe7\xb0\x0f9\x8c\xc4\\\xa4\xf5\x87\x94Q$)\x8c \xf2\xcd\x95\xd4\xb1~\xdc\xf6w\xafF\xe6az\x18\xa62,\xa7/\x0f\x02\x12\x1f\x15a\x92\xa9\x89\x1c\xe7i)\xcdr\xfclh\xa6\xc5\xa4\xa4E~'\x12\xcd+\x82\xf1\xf99\x7fE\x82\x98Dy,\xa2\xc9\xd8N\xaaF\x1eVxZ\xb5\x86B\xb2q\x16\xe5\xa2\xb7\xa4\x95\xf6\xe5\x0b8+:}%\xe5I*\x13\x87 l\xc5\xb5\xa1rD\xab\xe4)\xef\xb2HJL\xd8\xfb\x0dn\xe5\xf7\xdcZW+\x9cg\xa8\xff\xd2\xab\xb8\x0b\xedC\xb3\xef\xc4\xe4A\xdc\xaeoU\xec\xd8\xad\x84RpY\xf4]\x16u\xe7\xe3\x81\xe0\xb0\xe3\xd1\x8d\xfd@d\x14c\xff\xa8\xe4C\xb4\xb9%\xb2\x81\x8a\xc6 \x15\x7f \xf7\x1eII\xe6+\xbf\xd9\"X\x1b\xf9\x8a\x871\xf5\x0c\xc4\x87\x99\xa6\xd2\x9f\xad-\xe5x\xf71r\x80[\x9fJn\xeeC\xe1\xf9\xca9\xe5^\x08\xa6\xdco\xad\x03\x97\x9br\xb9\xa8\x14\xa9\x12\xc1\xd8\xf3+,V\x19\xe3\x15\xdc\xdc-\x1e\\\x81\x0f\x17\x1cT\xecZ(\xe89\x8aO\x00es\xd0A\\\xf5+\xf8\xe0\xad\x01\xec\xc1\xd8\xd5YD\xfd \xf1\xcc\x90{\x07\x7f\xb7\xb6 C\xde2\xb9\xa2dX\xea-gB}\x8cfZ\xba\xd78\xcd\xfcj4gsv\xed*\xef\xf6\x91\x1b\xbfXi!\x05\x01\xa8@Y'\n\xf8kl\xfa\xba\xdb\x8d\xfciX\xd2\x1f\xbb2T`\xa6\xd4\x88\x8a\xcem$\xaa\x03\xc2\xae\xb9\x03\x92\xdf\xdai`-\x8d<\xcc\xc8-\x84\xfcf\xb11\x016\xba\xe0\xce\xbc\xad\xb9\xe6s\x930\xd8p\xe7\xfc\x12\xec\x8ew\x00\x8d\xbe\xd9\x8f\x06-\xe05\x1c\xa0\xdeY|\x9f2n\xf6V#\xfaX~N\xa6(\xe1\xa2ok\x0e\x0e7\x08\x9e\x94f}\x0c\xbe\x86\xca\xc5\x87\xc4\xcb\xe2\x8b\xed\"A|^\xeb%\xd7u\xd1\xb5\xbd\xac8\x01\x95\xc22e\xaf\xfej/\x8eg\xb4R\x98\xbf\xef\xc9/\x9e\xe7\xc3T\xb9-\x1e\xb4\xa67M\xa4\xc8E\xe9\xc6k\x03\x15\xec\x19\xfaP\xf6F(_\x05>\xc7\xcb\x03\xe5\\\xc4\xa8+r\xa6\x18\xe6\xa4\xf2$\xe4a\x87\xf9\x17\x97\xb7^\x7fSk\xd9\x1d4\x9ake4\xa6Ad\xd0\x17\xf0Q>\"\x06\xa3<\x83\x9e<\x01\xaa\x10C\xb8\x06-\xe2Hb\xe4\x98\xa59\x06,\xfc\xd5\x15\x07\x84\xc68\x16n\x8d\xbb\x07\x8d\xf3\xd6\xdawj\xa4?\x0c\xb6\x0c\xeb\xca\xb1\xb2\x86:\xcc\xb2\xa0j\xf9PD\xcfo#\xd8\xc9g\x9b\xbf\x8a\xf87b&;\xc1\x91\x8b\xcd\xcd5\xf4\x8a\x0e\x83AtZi@l\xe6\x93(\xa9e\x05\xe6\x0c\x95R\xf4\x8a\xa3\xcd\x92\xcf\x1b:\xfd\xcb\xf1\xc6\x82k=\xa1w \xbc'\xc3\x1c\xbb2\xd0'\xce\x86\x0f+\xd8\xdc3\xc9\xd3\xd8\x93\x07a\x9a\xf2\x83\xa0\xe4^\xd8\xe4\xee\xe3;\xa6\xf2\x92\xe6\x83\xe30\xd2\x82\x1f\x00Mx\xd9\xdc\xc4\xac\x1dG\n'I\x18\xb9b\x11\x0b$\xa2\xaf\x89*\xe7\xf1\xecb\x04qN`?l\xe7L\x1b\xd6\xbb(\x08)&\xee\x94\xc8T\x9c|\x10\xcdW\x99\x85\xd1\x92\x0f\xea\x0b\x05DP\xf6\xddy\xb99r\xbf\x88\x87\xc1}\xb5B\xbb\x88\x99\x1a\xdc\x1c\x8c \xad\x16-\xf5\x19\x036\xd5\xc0\xc1\x0b\xae\n\xb9\xa3\x81S\xdau\xf4\xca\x83\xbd\xa6\xb9\xf9\x1e\xb2\xd4ZW\xa9\x87\x0bhn\xa4Z\xb4\xc8H^\x86\x06fM\x07\x9d\xc2\xa7\\\x8f\xb4\xbc:\x85*\xf1\x96\xb6\x07xx\xf0\xc9\xd5\x1b o<6\x0c\xb4=\x92\xa28\x9c6\xebJk\xe1\xe9\x0c\xc2\xca>A~\xb7\x171\xb3s$e\x1e|p\xf8pZ.\x92\xf4gF\xe8\x08\x0d\xad\x84\xc8\xb5\xdbI\xa3\xfe\xa8\xb7{\xd5\xd4\x1b\xdc\xda\xa8\xcfW\x1f\x1c\x8d\xe9\xe6}\x85\xa4\xacE\xbfBYI\xcbX//\xe3nH\x18\x07\x8e\x0f\xce\xd1\xf8\xfd\xce\xce\xce3\x8b\x8f3ho\xf0*\xb9\xd7\xfd\x99\x85E\x10\xb1\xb4\x9e<\x11\xbf\x82yX\x1e\x0b~\x0bl\xa1C\xa5\x9b\xe8z\x99&\xed\xd2Wh(\x07{\x03s\xfb\x16X\xb8\xf3\x0d=\xeb\x08\xe0\xd5/O\x92Z\x90\x1bsU\xdf\x94\xd4\xfc&\xdb\xed\x9c\xe3\x92\x0e\xa6\x9a\xbc\xa4\xc2\x8f\xce\xfaN\xcb\xaf\x88\x85\xe6\xbd\xe2;y\xce5\"\x9c\xb4\xee\xe5}P\x15G\x97\xc9\x92\xf4a\x07.\x01h\x1e4uP\x90\xc30\xcbr\n\xac\"\x1f\xd8\xafB\xdcp\xea\xac\x88\xd6r[$i\xbf\xa3C\xb2\x9e\x1b\xf0\x1b\x18s\xbb\x8d\xfd\x86\xc1#7\x88\x0b\x85\x8d\\\xa5\xab\xd01:W\xa1_V\xae8\xdd\x02\x17\xb4P'4\xb6\x1fi+$\x0d\x94\xe2\xdc\xed\xaa;L\xf0**Y\x06\xd3\"_\xe8\xf1\xe3\x00DH\x05\xcb\x16D\"\x85\xebWpT\x8dT\x18\xe3\x0b\xf6\xf1U\"@FmsEX\xbc\xe1\xd1$\xd3\xcd\xdak;\x86\xac\xaa}\xe1\xf9\x90\x0b\xb9\xfb\xfe\xb0\xb3[R\x03\n\xc8\xf0\xa5\x0f\xa7\x94\x14@\xb2\xd8\x16d\xd3D\xdd(G\xb4\xc5y\x86\xd8\x8b\x19\x9e\xdc\xab\x16\xe7m\xe7\xd2A\xb9\x9e1Y-\xc9'\xb4\\$\x80B\xdc\xd4\xa4\xf2>\xf7\nN\x1az\x80'\xe1\x1dn\x15>\x11\x98\x1bQ\x0fF'+Q_\xc0\xf1\x8c\xd1\xa3\xb9,A\xb1\xa3\xc989\xd4\xbc\x8er\x0dm\x1eg\xeb0Mb\xc8\xf2l\x8bW\xbb-N\x1a\xe4s\x1c\x0f\x95\xc5\xb9/\x8e\xe6\xbc\x87\xcdy/xJ.\xf9\xd0v\x10\x10\xb9\x069\x97\x99\xf2\x00\xd2n\xde$\xc0B\xc3\xde\xaf\xa4A\xb6\xf5AU\xae\xdek|S\xd5}\x078\xd1o\xf4\x8c\xd7Axw#\x17E\x8b[\x82{Jl_\xda\xe1\xc2G>F\xf2H}\xbeVz\x18\xf6\x8a\n\xee\xb2\xa4\xda\xa0\x8c\x88\xcc\x95\x0d\xcf\x15\x03,\xce#\xcc|\x9e\x94F\x18\xf8\xce\xc2\x18\xb9@>\x95\xd8j\xd3\xaa\x1b\xc9\xeaF\x0b\xb8:8\x12m\xde\x0c\x9a\xcb \xed\xfd\xa6\xeck\xa7\xc3GR-\x18\xc4\xed\xc1\x05\x0c}p\xc3=\xb6\x19\xd8Z\xfb\xfc\xdb\xb8\xe0n`\xc3\x1d7\x02\xc3\xcd\xbb\xfaH\xb1\xc2\x08\xf4P\x84\xda\x83\x07\xce\x08\xb2\x1eY\x85\x90<\x8c \xe9\xce\xc8v:\x8fgo\x07M\x1f-\x86S)\xca1O\xc3\xc8\xc8\xe4\x1b\xf3Z\x85<\x9b{\xd0vs\x06\xb5\xa4G\x95\x94\xacj\xfc\xd1\x89\x9e\xcb.\x8c\xb5\xf2A\xa2\x8cvL\xa0& \xc3\xa0j\x10\xf1\xa4\x11\xee\x1c\x1a77\xbb\xea^eCjo\xf0l\xcdV\xda3 \x1b\x16H\x9e\xbflm\xf9\xca\xad(:\x82\xac\xef\xcb\x14\xa9\x07\xbe\x19o\xcf\xda\x02\x13\xbc=\x93$q'\x11X\x12z\xd4\xba1\xef\xa6\x95\xd0\xd6\xd2\xe2\"O\xb8\x99\xa2\xf9\xbb\xfc\x96\x14\x87a\xc9\x8d,6\xdc\x893'\x9f\x19w$\xee\xdd\xd9\xff-\xfc\x11\x96Q\x92\xb0\x1f7I\x16\x16w\xf8+,\xc9\x8b\xe7\x98+*\x9f\x8a\xff[OE\xb1\xdd\x17\xe8k\x17k\x90\xbf\x8b\xf0VQ3r l\x82\xe3xZ?P\xcf\xa8\xb2\n\xd0Ng\xe9`\xb2\xde\xf3\xe8d\xb2G]W\x83+\x83\xf2\x81I3\xd7\xca&5X\xe6[\x93\xda\x89\x91\x83&U\x9c\x83\x91\x91\xe2F\xae\xba\x97\x93\xee\x18W\xe3\x80h\xef\xdd\xe6\xe8\xbc&\x84]\xdf\x87\xcf\xc8\\\x85J\x15\xd7C\x1e\xe3\xc4\x19\xb1\x96,\x96)Y\x90\x8c\x92\xb8\x87\xb5\xa9/\xe7\xb8h\\\xfdF\xb2x`g\xaa\xbb\x8c!{\xdb\x1a\x90 \xa9\x02\xc2\x055\xe2\xeeW\x11\xbd\xdf\x8b\x99\xa8\xcd\xbf\xa1\xe9$\x83{\xa8\xaf\xee\xa8\xa5\xcc\xabP\xf1MQ\xab\xb0\xc8\xcbc\x8e\xe2p\x87\x16R6\xcb\xd8\xad\x06\xd2\x192S\x80\x07q\xad\x1f\xb4S 7\xfdJX]\xd5\xb9\xaf\xd2\xb2\x19\xbf \xcc\xb3\x88TB\xb7\x0e\xd2\x8d\xd6*G;\xbe\xa2\x9a\xd5\x16Q\x83r\xa8\x14-Fe\xe0\x16\xacT\x97\x8c\xdb\xee^\xdbJY-\xd3\xd5v\xa5\x84\xae#\x14\xd1\x81\xf6\xd8\xda\xdb\xbcl\xf4\xc7\xca\xe7Z\x9aw;\xdb\xc7\xd8\x8d\xf7\xdc\xf9\xf5%\xf7Z\xfe\xd6\xb6\xe9*S\xf3ToZ\xae:O/\xbf\xcb%%Y\xecz>\xd0V\x0c\xf8\xdf\xd5=U\x03\n~\xcf\xa0\xd4}\xb6\xf3\xcac\xc7\xe1\xf1bA\xe2$\xa4\x04\x13w\x87\x85\x0ex\x8c(\x83F\x04\xf2\xbbf\xe7\xbf\xb9\x1b\x99\xfb\xe2\xf5\x8e\xe7z\x95\xdbN\xc6-a\x98\xc8\x17\xafw\xbfa\xa8\xeb\xcam\xfc\xcb\x1ds\xf0\x84\x17\xa6\x88?\x99\xfb\xea\xa9!\x86\x97n]-\x0e\xf6f\xc6\x95)jSWx\xa0R*E\x867\x9a\xff\xc5\xb4\xa1.y\xdf\x05\\W^\x1b\"_u\xa5\x0f\xb51\xa2\x12\x9f!\xb4\x98W6\xcb\xe1\x85@\x86\xc1W\xb9A\xb0W\x9b\xbaF\x9a\x93\x05~F\xa0sI\xf4p\x11y\"\xce]\x04\x7f\xd8\x83\x1d\xc6&\xb0\xb4\x914H\x96vN[\x90\xba\xa5\x1by\xde\x1b\xe0a\xee`s\xd3p\x1d\x85z>\xaa\x94\x95rq\xc2T\x1c\x8d\x13z\xe5C\xe1N\xbdz\x8c\x1a\xbf&R\x15w\xc9\xdf\x00\xcd\x0d#\x89\xd6i$\x05\x95Z\x07\x86\x11\xb5&\xd1\x1b1\xd3\x8bHaJ\xc2\xc4nD\n\x8aT\xb8\xf1\xe1+\x97\x12tw\xaa\x06,\x967\xce#\\r\x11\xc0\xe1\x92|\xa6\xa7yL\\\xc7\xe9p\x1cn\xd0\x00QT\xaf\x06\xdc\xaf \x83\xd3\xc1\xe6{\xf2\x80\xe7\x97\xeb\xdc=\x16\xb5\x9d\xdfC\xfc_f\xfd\xfe/\xb11\xe3W\xb3D\x05\xad\xd6\x9a\xe4\x94E\x8e[;Z\"B\xf3\xa3\xca\x8f'8\xd1c\xd0\xc8\x077l\x1e\xc4!\xe5\xe1|\xf6`s3\x81\xff\x80\xa7\\\xdd\x01k\x0b\xcay2\xa5.z\xa1\x10\xe2\x17ix-(\\6\x82 \xad\x96qH\xc9\xbb\xf0\x8e\xcd\xf3\x00*\xd7@\xb2cD\x0f\x83\x80u\x19\xde\xa5y\x18w\x84\xfb\xa9;\xf06I)\xe9>\xe5{:`\x10\xc9\x0e\xeb@9\xcfo\xfb\xc9C\xc6\xa0\xb6|B\xf5\xf8>\xe7\xc1\xb4\x94\x04#UE*\x17\xb0\xba\xfby\x06\xc5\xb6\xe1\xae:\x86ke\x1b\xb3\xd9\xc8\x14\xbf\x8e=l\x16\xb2\x91\xe1.\xc5f]\x88s\x17\xcd\xc3lF\x84UW\xff\x0c\xdes\xfe\xda\xbe\xe3\x1d\xe7\x11\xa70|\xe4)\\\xe41\xb9\xd7\x0c\x9a\xb8/c\xd0\xae\xf6\x06vR\xdc\xb1\xd7|\xf7\\\xf37\xa7\xcd\x9f\xb5\x91\x81Vr\x8a\x1b\xcfi\xb3p:Z\xd1\xca\xb1\xc1:m~\xae\xc2J2;\x83+\xee\xa2\xf2\xbf\x1ea\xe2\xf5mH\xc9\x8fd\x9a\x17d\xfc\x99D+\x14l\xd2 \n3\xf1\x8a~.y\"k\x0cOR%m\x1e\x96?\xe5\xe2\x12\xa6\xfa\xfeKB\xe7'\x84\xf2Y[\x86E\xb8 \x94\x14\xe6\xd4\xe3,JW%\xab\x94P\x9ad\xb3\xb7ya.\xf6\xe3\xddqL2\x9a\xd0;\xfc\x1e\xa6i~{Y\xdc\x1d\xd3\xb3\x15\x95\x85\x16\xec\xa8\xafn\x0ddj\xa1\xbf\x96\xcb<+\x89\xb9P\xa9\x16)\x1b\x05\xf8\x1b\x0dg3\x12\x9f\xc9\xb1\x96\xcd\xa1\x97\xac\xbb\x97\xe1\xac\xca{Dh\x98\xa4\xd5\xab)\xfby\x9e\xd3c\xaet\x87r)\xca\xa3Z\x88\xf6\xe6rzo\xc2\x92\xbc\x0f\xd1\xacO\x00@Rw`\x9ad\xf1Q\x95\xc6+!\xd1\xaaH\xe8\xdd\x91\x96U\xa6\xf3i.\xf2x\x15\x89\xa6\xa2<+W\xb2\xdd\xbc9\xc2eH\xe7\xb2\xfcb\xcd\xfd!I\xe3g\xfcM>SRdaz\x94G<_\x92M\xf9^M\xca\xb3\x83\x8bg\xbc\xec\x92D\xd5\x8f\xff,9\xa8\x9c\x932O\xd7$\xbeX\xdd\xd0\x82\x88\xe6Y\x06\xedC+\xbdQS\xf5r\x91\xaf\x8a\xa8\xce|Ay_WE}\x19\x8b,\xaf!>\x82\xa2\x15\x94\xb9\xafLA\xdaQ\xa5'GyA\xd1\x0c\xf1Wt\x87\xf8+\x9aH\xafn\x13cm\xbf\x97\xd0nVa\xb0\x1c\xfd\x08\x17\xecL\x9d\\1\x96bF\xe8q\xe6N\x9c\x05\xa1\xa1\xe3\x83\x83K\xe6T.\x9e5G\xb5\xd4\xf3a\xe2T\xdb\xact\xae<\x1f\x0f\x8d\x12Eh\xffy\xe1\xb9\x93+\xcfC\xc8\xea\xb1\x87\x94\x97\xa0\xc1I\xb8\x0c\x92\xf2$\\\nE%\xec\x93\xeb`\xb0\x06\xaf\xd6\xf4\x16\xc9I&\x12\xb5\xb9A2\x81\xf7\xe4$\\z*9\xea\xab\x98\xe1g\xae\xe0\xd2\x7f\xf7a\x9a\xae\xf7Bj%)\xbf \xb1O\x94\xe7\xf1\x0e+\x93%\xa7\xea]RR\xcf\xf5\xbc\xa0 l\x1f\xb9\x8d\xaet\xdd\xc1\xc8\x08\xa4\xb1\x081A\x959\xd9\x97o\x88\xb8\xaf?/R\x87[5\xd4\x89]r\x19F\x9c\xbbj}\x9b\xe0\x04\x0el\xca\n\xf8r0\xb0j\xce\xbb\xbe\xfc\xffP\xa3\xa87\xa7\xbe<\xe6AX\x8e\xb3\xff\x1a:\x87\xf1\x84|\xf2\x83\xa4d\xffT\x81$ \xca|A\xbe\x11f+\xe0\xd4\x94\x8d\xfbf\xe4\x92\x07\x1d\xba\xf49>\xa5$\xa3,\xc9\x0c\xabz\xc7\x14\x08}\xd3\x9aH6\xd5\xb1K\xbcj\x9f\xf7\xed\xef\xd6~f\x0b\xda&\xd5\xb8\x8b\x92\xfb\"\x8f\x81\x953Tz\"n\xceZ\x1fQ\xa7\xac\xb5\xb5x\\]r+vW\xbb\xd8\n\x1d\x93`1yb]\x8bM\x811\xd2\xcd_Fp\x89\xd1\xf30j\x15\xcb\xe8,V)M\x96aA\xb7\xa7y\xb1\xd8\x8aC\x1a:u\xb6\xbcX\x1c\xb1\x14\xcc\xcapE\x12\xe1q\xb8\xfdy\xeb\xf6\xf6v\x0b\x8b\xac\x8a\x14\xaf\xd7I\xecT~\xda\x8d\x04\xb96U\x06h\x14\n*\x15\xc0\x189\x1aI\x894\xf2\xe5\x9d\x00Z\x1d\xe3\x87\xf5\xe1\xde \x83&dy/\xb0c\xc7\x8a\x9c}\xc3\xa1\xd2\xc6*\xd1\xaa(HF\xdf\x0bR\x84\xd3e'\xcdS\x19A\xc5\xfd^\xbfrY\x99y\x04~1\xf4\xd2k\xd6\xc1\xce\xff\x893#\x14\xe1{\xc5\xff\xe5%\xfe\xe7\x1e\xba\xd8\xaf|\x89D\x0f\xfb9'a,\xf6B4g?\xd0\xcb\xa6\xa3E\xd2\x88z\xc5\xde\x15Wf;\xd7\x00Z\xf7\x9fS\x1e%M\xa5VX\xd1P\x08\xcb/HJ\"\x9a\x17\x9e\x1b\xf5\x05\x82\xac\xb0\"\xee\x8b\xaaBM\x9d\x9fs\x04\x9cHz\x94\x86V\x85\x1e\x15\x9d7Q\xd3d\x8f\xd2\x0c\xab\x8e\xa3\x0cG\xf7\xfc\xef\xeb\x04\xe1\xa35\xc8k\x14\xcdf9\xdd\"qB\xf3\xc2\xd6\x01A\x9e>J\xf3\x7f-\xf3\xac\xa2>8\x18\xe9\xb3\xacm\x86%\x87$\x8dp~\x94\xce\x14\xa2\xbe\x9e\x0e\xf9Vz\xbe\x97\\R\xdbC\xecSh\xccB\xf7\x11\xc5Qr\x8b\xce\x91\xcd\xca\x80\x89\xc3\xe8\x03~M\xa8\xa6d\xdc\x8f1\xce\x05\x8f\xca\x8a \"~b\x19\x9c\x151)H\xccg%X\x90bF\x18\xc3S\xd3\xa9#\xdd\x16K[\xbbx\x08\xb3\xf4mK\xd9\xdd\xd3\xa5\xdf\x00<\xcf\xd7\x97\xbeZ\x87\xf6\xaa7\xde\xe7*\xff7\xa8c\xd3\x96\xbaC\xb3\xc6\xb5\x88#)\xb9K\xf34\xcc\xfd\xee\x0b\x16\xd1\x98n\x0f\x8a0+8\xd8\xfe\x8a\xbb\x86\xf1Wi\xaf#\xc8\xcai\xde\x9e*m\xae\x16|d\x1aG\xfd\x98\xddP\xab6\xac\\\x83\xb57\xb7\xbb\x1e\xd8\xae\xda\xaa\xa8\xb3u,h\xc3\x9f \x84%\xe5\x0c\xe6\x0e,\x06v`{\xbd\xefNv\xb6^_}\xe7}\x0c\xda\xbf\xb6\x93\x80|&\x11#p\xb8\x0b\xb7]\xd3lH\xe9\x87\xb9+\xf1\xc0\xae\x10I\xeb2\x02\xaag\x12\xee\xdaB\x18s\xe3\xb3\xbe\xc6\xf1\x0e\x9a\x07\x0e \xca\xe4\xef\x04~\x80]\xaf\xb9\xfb\x05\x17\xdbf)%\x03\xd7\x93\xad\xb9\xd6\"\n\x1d\xec\x83K\xda!\xe9H\x87\xca]\xdd\xd5\x8d\xaad\xd5Uk\x18bc\x1bV\x83\x1c\x10F\xae\\\xb3\xb6\xf0d0\x15\x97K\xd9\xf0\x9a\xb7\x8f\\W\x1f\xb6\x9a\xbd\x9a\xf2\x0bB\xe7y\xdc\xab\x9f_-\xb7U\xa6.\x9f\x84U\xc6\x18\xfb-\xc6\xd8\x9bU\x07\x80\xc3\x95\xe5J\xdat/\x8f\x87\xf0\xa8\xb9\xda\xfanh\xbc\xdf\xe8r\xc3oCR\xbc\xe1\x0bB=\x974\xd9\xb8\xbe\xe3\xe5Z\x97f>vGd\xd5}\x1d\xb9\x95\xc8\xab\x12\xb2~[O$\xd5)\xeak \x9e\x0c\xc8\xca,\xf8}\xd4n(U\x1b\x89\xfc\x968\xba\x97\xd0\xab]\xbfY)=d\xd3\xeav}\xa0W\xbe\xd031\x82xS\xb0!\x08g[\x15v\xb5\"\xd4 F\x99D\xeb\xa6\xdcoI\xe2\x1fe\x96\xd5.\xda\x85\xa1P\xcd\xb6r3\xf0(\xed\xcb\xfa\x8cK+\xee#\x1e\xa5!V\x97\x99I\xac.@\x1e\xa5\x1dQ\xdd\x006\xa5\xfbf\xc6\xdc\x99;\x1fn|\xb8\xee\xbe\xceku\xac\x11\xd8\xdd\xaa\xc5Qe\xe7\xd7\x8c\xaeSu\xd0\xe9\x9b\x02\xf9\xa0\xd7\xa3\xae\x0c2\xd3FS\x18\xda\xaf\xb5\x06j\x07o\x13:\x97\xaa6\xe5\x80\x91\x19+\xd1p>'Z\xe4\xd0\xab\xf4\xa1#W\x1f\x03b\x17|\x8ekP\x11\xd5\x9f\xaf5\xe3S\x1f\x04\xcd\xdeU\xe9\x8f\xdc;\x83E\xb2\xfe|m\x85\xb6o\xe7\xb0~\xb6\xfbpnt\xca\x80|\xe4c$%\xb4\xbd\xa5\xa1h\xae\x97#\xeeC\x1fe\x8b\xb3\xbaz\x0f\xc7\xc6\xfbg\xd9\x87\xfa\x8a\xb6\xf7\x94\x92S\x82~\x81*\xc4\\]\x02q\xe5\x01W\xd9G\x83\xee\xcf\xa05\x1a\xe5\xc6\xcc\xa0?\xd1\x89\xc6\x9a\x83\xbc\xd0\xd8\x08\xe5z\xda<\xed\xb7>\x8c\xfd\xc1\x13A\x06\xdf{\x81r\xc6+`N\xab\xf3YEl|5\xaflJ\xb7\xf2d\x0e\"\xf4\xab\xcfH\xf8]\xf4\xcc'\xf7\xa2\x10\x02\xe9\xf0\xd0\x07QZ\xfdD\x06\xce\xb2@=\xc6A1\x8c\xbf\xd32\\G\xe8\xd9\x03\xfb\x08C\xfb \xf6\xed\xff\xd5\xea2\xf4^\xcbZuC\xb9w\x94w\x8c\x1d\xfb\x11TPn\xc8\x9fz6\xee!'\xb1\x0d\x8a\x18\x83\x10F\x95i\x10\x9c\xe2x\x0e\xf3l\x9a\xccJ\xb6<\xf6\x85\xc5\xcb,\x06\xb8\x17yAM>\xd0\xe5\xc3\xfd\x10\xd7{\x92\xe7\xef\x04\xf5\x0b\x94O\xe4\x05\xfd\xf1n\xd8\x9a(e\xcd\xee\x00\xba\x02\xd4\xea\x8f\x9c\x0f\xa3\xdej!t\x1fV\xd8?R\x94\xca\x1cL\nK\x14}P\xe9\xeb}\x90]\xe8\xb0\x11\xff\xea5)\xa6>\x0f\x0c\xf2\x9e\xdd\xd8g\xe9\x83\xbc\xee\xb3\xbe\x1a\x93\xbc'^z\x02{8t\x8aU\xb8\x05^\xd0\xf7\x0eV\xc1\xdb\xdd[\xbb>\x96F\xdc\xd9[\xd6\x01z\xa0\x8a\x0e\xca\x11$\xf7F\x04\x86\x9d\xd9\xdc\x82\xbe\xa6\x07e><\x86\xca\x9ck\x192\xaf\xf0~\x17\x1a\x9f\xf0LST\xb4\x1e\xa93\xbc\xbe>&\xa1\xf1~\x80]ik\x90=J\x8f\xb4j\xef\xd5\xb13\x8e#\x9b\xban\xf7\xe0O\x0e\x95\x1b_\x96U\xb2\xc9&\xa8P\xb4\xeb\xee\xd1\xc2\xa7\xc1-\x98\xb4\xfa\xee\xd1\xd0\xc1\xe0\x86\x0c:\x85U;\x1d\x0dh\xc6)M\xbd\x10\xa3\xfa\xe2\x90\xdeK\x04v\xef\xbbw\xa3JW\xf3|5\xa3\x92\xfcA\x8a \x03\x9b\xb4\xcaW\x8a\x81\x9c\xb0\x14E\xe7\xb89\xb2\x06\x9d,\x15\x9c2y\xc9\xe2\xd8\xc6\x08\xe2\xa4\x1eX\x0b\xa6\xcd\xc3r\xce\xc5\xac\xf8\xf30\x8f\x89q@\xa0\xe3y\xc3\xa5\x9aXq\x93\x11\xca\x03Y\x85JQI\xed\xb6Y\xf7NMi\xb7o^\xb7N,\xf3\x9ec\x99\x1ee^\x1d\xda-\xc2y\xe9)+\xab\x16\xc2@\x13\xa9c\x7f8\x98^'\xb2\xa3\x0c\xab\xe6\x0cf7\xf4{\x1f\xe3.\xbe\xffh\xfe\x19\xdb\xf7\x1b\x01\xa5\xb0\x80\xc7P\x90\xb0\xae\xca\x99\x98\x93\xdc0\x95&\xe5\xf0oD\x83\xbc\xd0\xd5c\xa1\xb8\x07T\x97\xd4\x9ah]\xba\xa1\x0d\x04\xd7y1\xa5N\xa4<\xac\x0c\xb8\x02p/Z\xd7\xc1\x8e}\xd0\xf7\x17\xf2i\xcd\x0e'\xfa>W\xf5\x93k\x1d\xff\x07Hj$\xdanH|\x8d:r\x06\x17<\xdc\xcc\xb1V\x1a\xc5\xf8\xcf\xce\xb6\x08K9\xd9Q\x02\x12\xaa\x11\xa2do\xe0\xd2\xde\x9f\xff\x81*\xa9lRz\x95R\x0d\xb3p\xf2\xaf\xd155\\\xa3\xa0\x99\xb2\xf4\xf1\xd2\xb9\xbd\x1f\x88\xd0\x85\xccU(y^y\x9d\xf7A\xb9T7\xe5#\xaa\xe5\xb5;\xbd\x97@x\xff\x83A\xac\x1a\xaa\xa0x\xa7\xd4\\\x8a\xdf\xb5\x7f\xb11\x1e7\xe5p\x95\x05M\x1f\nl\xcc\x8fP\xaa\x0b\x16!\x8d\xe6\xee\xf6\xffq'\xe1\xd6\xdf\xaf\xd8\x9f\x9d\xad\xd7\x9b\x1f\xb7\x82\xab\xef\xbc\xd1\xb6E\x0b\x97\xbb\xa0HJ\x19\x90\x80\xb1\xed\x1c\x92\xb3V\xd0\xc1\xd6)\xcb/P$\x8a\x14\x92\xef\xd6G\xe7Z\xac\x0f\x1f\x9e\xc33\xe6\x9ar^\xc3\xf6\xc1`h\xd47%\xa2s\x13gN\xe9\x12\xd54)]\x96\x8a\xb7\xac\xe3\xaa$\xf7\x90U\xb7\xdce\xf4\xd4)\x0d\xe9\xdd,zd\x8a\xc7\xa1S\xecF\x19-\x8d\x07\xdb\xe6Rp/z\xdf,M\x96\x03\x02\xcfJqj\xe5\xfa\xd1\xa0\x0b\x93\xa9\xeb\xd8\xc65\x7fm\xf7\xc4\x8c\xd6\xf61\xde#W\xf3> \x97\xda\xb6\xf9\xaf\xb7\x8d#\x8a5\x9c\xf8\xddp8\x98\xcf\xd4\xd7\x92p3\xf3\xa6W\xc2\x92\xd0\xd6+\xe7\xc7\xb9E\x12J\x80\xc7\x8b%\xbdC\xfb\x9f\x8az\xc6\xaf\x12N\xf1\x93\xb4\xa8\x92\x89\x9a\x16\xe0a\x18\xcd\xd5:M\x86S\x82O7\x7f\xc2\xb4\x0bi\x9c\xb5\x0c\x8b\x92\\\xe6\x95U\xd5\xc5\xf8\xf2\xfa\xe2\xf0\xa7\xf1I\xc3\x9c\xfa||q\xf6\xee\xe7\xf1\xd1\xf5\xc5\x87\x1f/\xcf\xc7\xc6oj\xda\xd9\xfb\xf1\xf9\xc1\xe5\xf1\xd9\xe9\xf5\xc9\xf8\xf2\xe0\xfa\xe7\x83w\x1fx\x99\xc3w\xe3\x83s\xf6~\x8c\xf9\xde\x1f\x9c\x1f\x9c\\(_\xce\xc7\xff\xbf\x0f\xe3\x8b\xcbF\xca\xc5\xfb\xb3\xd3\x0b^\xfc\xdd\xd9\x9f\x1aYXoO>\\\x1e\\\x8e\x8fZ\xe9\xedw\xa5\"S\x0fD\xdf\xc7'\xef/\x7f\xe5\xe9\xd7\xc7\xa7\x87\xef>\\\x1c\x9f\x9d\xaa\x19\xf0\x93\x9a\xf0\x9f\x17\xcd\x0c\x1f\xce\xdf\xa9\xaf\x17\xef\xc7\x876\x034\xd8\x83\x1b7s\x9f~\xaf\x93\x9d\xb9\xf8\xf2\xea\xb9\xfe%\x91e\x9e\xe9_B\xf1\xe5\xf9S\xfd\xcbJ\x96\xd9i\x15*\xc5\xa7g\xcf^\xe9\x9f\xd2\xea\xd3k\xfdS$\x9b\xfa\xdek\xd0\x8f\x1c&/\xfaT?%\xb6z\xc7\xe8\x8e\x82,\xd30\"\xee\xf6G\xba=\xf3\xc1\x01\xd0\xf1\x96\xcdkc\xad/\xd6Fsh/q\xdd>\x1f+3g\x8d\xaej\x9e\x1c\xcd\xbd\xf5-\xb6\xf9\xa7\x1d]\x18\xe0\x1c\xe0\x03j\xe9?\xb8\xf5\xdbok\x9d\xa1\x85\xde\xc5\xec\xe9\xc2\xf8\xa1]\xe0\x06\xf6\x88\x13\xcd\xbc\xb8! bO_>w\xf4\xc5\xcc\xa9q\x95?\x8b\x86\x9e8P,\xf7?x\xb4\x9f\x86\x0b2\x02K\xf0\xa8%?\n\xac*\x85I\xf9\x97E\xaa[\xfd\x00\x0crL\x80\xf3\xd6)\x89\xb4\x1b\x9b\xfe\x8b\xa6\x0f\x87o\x9d\x1c1\xb9\xddSS\xdcsjR\x12\x16?\xeb\xa7\xed\x83A\xfb\xf8A\xf3q\"\x14D\xdbj\x1c\x03\x96U\x9av\xa1\x91a\x1f)\xdb\xd3\xfd\xbf>\xa8\xfb}\xbb\xc1\xb2\x9c\x9f\xc8\xdd\x08tS\xbd\x87\xcc\x80\xb4\x1d\xfb\x1f:\x03\x1a\x1f{\xcf\x19`\xf0\xab\x10\x96\xdf2\xf6\xcb\xc7\x1d\xbbT{\xbe\x87\x0f\x10eD\x92r\xfe\x96\x01\x9d\xfc\xb7\x18PI\xe8}\xd9[\xdb\x80\x8e\xee= \xce\x9ew \\6^\x0bx\xca\xf1\x1ad\xc3\xb6\xf16\x89\xd9iEd\xbe4\xd9\xa5e\xaen\xd1\x19W\x05Z\xf4\xe5\\|\xda}\xd9\xfa\xb4\x96Ti\x9b\xcc]\x88O/_\xb4\xc8\xdcY\xf5\xa9Ej\xdfI\xc3R\x13\x93{c=\x14dh\x1e\xd51\x04\xe9v\x0ca%w\x1a\xf3xm`\x1e\xd0\x14Q\xfa\x9fA;\xc8\xe6\x18n\xdb\xfcG\xa3\xc8\xaaH\xb5\x12c\x03\x07\xd3(\xc2\x95\xa8\x1be>\x9b\xd8\xa0F!<\xd2\xb5R\x83\xb8\xabF-\x84\xf1\xc9\xbc\xae\xfa\xfaF\xab\xf5\xd0\xc2\xc7\xf1\x8a$\xf3l\xec\xd0'\x13O\xc8\xcb\x95\x84^\xcb\x8bt\xad\xd4\x81\x81\xb3T\x0b!\n\xd3\xca\x9cup\xa9uYq\xe9m\xa9\xe3\xbd\x81\xf3\xe5e\xd3|f)ca\xa0y1D\xb9\xb6Q\x9e\x18\x99\xf1fAS\x8b\xc7\x9d\xec\xbdZ\xbesi\xfe:@\x8a\xd0\x00\x95J\xccz\xbd 4\x14\x87j\xb3\xceS\x8b\xb4\xa2QOm\xde\xda({\xde#\x051\xd6q]r\x81\x8bV\xd7Q\x05\x0c\x95\x80\xc5a\xcb/e\xaa\x8d\xcc\xef\x86\xaa\xb8\xb9;>\xba\xa8\x16R\xc5J\xdc\xa6\x9bH\xab\\zS\xe8\xd3K\xfeV\x19:\xad9\xb8\xc5\xe7\x01\xe6,\xcdGLQe\x937J\x96\x8c\xdc\x99\x10)\x8a\xce\xea\xf8\x95\x9c027g \x85{R\x83\x1c\xd4\x1a\x16\x10\xc3@\xc0\x97/\x90\xb8\x18\xb0\n\xc1\xb6C\x87\xabD\x0bqF\xda\xb1i-\xda$\x1d{\xbez\"h\x91\\\xaa\xa0\x0c\xa7\xe4]\x1e\xc6\xc6h]j4=\xf3T\xf2\xa5a\xf4t\x9e\x8aX\xfb\xe8\xf1-\x0f2r\xcbx\xf6qq\x9fN\x9b\xa7\x8f=)Y\x93t\x042\xa0\x935\xdf\x82\x94e8c\xc4GP\x90\xb0\xcc;\xcc\xe4\xd2$\xc3|\x8b\xb0\xf8\xc4OQ\xf6+`\xc9\xa8\xdb[\xbfmb\xe4 .:\xb3\xcck{\xf2l[\x05\x03\x1d)\xde6\xf7\xc0Uba\x85\xb0\x0f\xce*\xe3\"et\xf2\xc1\xb6VTo\xad\xd0\xe3&\xe0M\xd1\x88\x1bz\xec\xd0\x1fH#}0\xc4\x95\xfb[\xa5\xbf\xa5Hf; a0\xecM\xab\x86d\xe5\x85\xa8\x7f\x7fBus6`\x8f\x82t\x83\xde\xbbO\xa1\xf2\xff2\xed\x00\x8a\x15\xecA\x18L \x8d\xe6\xf6L%f\x12S\xd5\x01`\x98\xed\xe0\xc2\xc0\xe3\xc8'\xaaD\xb2\xb8\xfa)\xec\xc3?\xbe\xc2\x08R{\x91\xa9\xbcT\x14:\xc2f\xb5\xa0\x0fh, 7\xe6mXd\xdc\x91\x84\x98\xa2\xc6:7\xc2tB\x99d\x11\x81\xf5\xb3`w'\xd8\x810\x8b\xe16IS\xb8!P\x90E\xbe&1$\x19\xac\x9f\x07;\xc1\xce\x1bX\x95\x04,r~\x11\xd0s\xc3\xf1|\x0ep\xb6XW\x0c4\x18i>\xedRv\x8e10\xd9\"\x8fI*/ZN\xc2\xa8\xe8\x88*5\xc7\x12\xd5\xcdVO\xee5\xe6\x16C9\xce()\"\xb2\xa4y\x87R\xf5B\x94\xe0\x04\x8cR\xc42\xcaz\x95\xeb8?y\xe5i\xc1\xad\x9dG\xf0\xfb\xf6\xca%x\x1e\xac\x8a\xd4\xaa\xfe\xc5&\x8fq\x15\x11\x83\x88wIFNW\x8b\x1bR\xbc\xcd\x0b\xb4\xcf\xdb\xb7}h\x86\xdd0\x84\xc2\x90\xcf]\xd5\xcd\x0bZ\xd8\\w\xcb\x1b\xb7\x0eT\x8f[\xca\xe8cH>\xac\x8dN3\xe4\x9b\xb0$Gyd\xe5\x1dA\xb8\x00mB\xc8\x08b{\xf6&x\x8c\xa0c\xd3\xb7ac\x04\xeb\xae\xec-\xc0\x18\xc1\xc2\x98\xfd\xab\x17\xd09\xc9\x06\xe8WA\xe3\x8e\x95M\x98\xbd\x03\xec\xe1\xf6\xad\xfc\x1a\xd6\xae*\x9eL\xc1Mz \x0c\xa8$\x02\x0e\xba\xf3\xcf\xcc$\x06\x082\xa3y\xfb\x9f\xe1\x1do\xa6(\xd6t\x0d\x11T\xe5\xbc\x81\xda\x9a\xeac%K\x08?\xcf\xd9\xa4LWi*\xb6\xc8\xcc\xbd\xf3\x95\x14i\x15\xc0\xd2\x96\xdc\xc8\xb5\x91\xbd~ \xfe\x9a'\x99\xeb\x04\x8eZ\x04)\x15FU\xcb\xd8\x93$\xa0\xdcE\x9b\x9c7\x1f\xb5s\x84\x8b iu\xccr\x9a\xef\x93\x89\x0f\x8e kz\xa3?\xcb\xa7\x11\xcf\xaa#\x10\xa8\xfa\x08\xb9! Dc\xbd\x85\x86X\x01\xda\xa1\x8e= #\x13/qV\xc6E\xf1#j\x99\xe4\xdf`9XhWfvS\xaaVr\xcb\xfc`r\xa5\x1dGo\x85>\xda\xa2&\xc6\xd8kZ\xbf\x96\x15Y\xcdh\xc7\nh\x81X\x03\xdfQ5b\xa8\x0f!\x0f\x80\xe2C\xec\xc3\xdc\x87\xb5\x0f\x0b\x1f*k\xdf[\x1f\xc6V\x85\xa1\xba\xed\xdbb\xd0\x86\xc1p\x0bo\xdexP\xde&\x9c\xca\x0f\x96\x05F\xfc\xe2\xc1\xd0\xbb6Z\x14\x96\x04vF\xddk;\xe5\xe7\xd7\xdf\x82\xf2\xae\xa4d1d\xe3\x12\x19\x8c\xf1y7\xdc\xb0\xe7\xa6 a;\x92\x9a\xfa\xd8\xc1\x05lH\xc2\x89\xc9\x8d\x00\x1e\xe9\x05`\x04q\x9e\xfd\x9e\xc2<\\\x13\x08\x81\x0f\x06h.\x0c`\x08\xe4\x99\x0f\xe1M^\xd0$\x9b\x05\xdcaQxS\xac\x96h\xe2\xc1\xda\xb0\x05\x07\x069\x93\xcf\xfbg2\xd3yQ\xc1\xc6\x92\xa2\xa8)d\xc1\xb1N3\x1fi\xe2\xbc\xa2\xf2\xf8P8\xef\x97#E\xaaS\x9e\xa1\xa4\xfc\xade\xee9\x04\x94\xd6\"R\xe8`\xacK\x0dw\xf3\xb6\x87U\x1eb\xe8\xd4\x14\x91\xf0\x12\x91\xf0\xa2\x1fh\xe1\x1bp\xb0\xe9\xf9\x16\xbclz\x86\xe0j\xd3S)\x14\x8au{\xeaw\x99\x1b\x9a\x1el\xf9\xe9\x83[\x0e9\x91K2\xea\x0b\xb6\xbc \xe5*\xa5'\xe1\xd2\x17\xbc5\x83\xf2_\x12:?\xe4\x0e=%\xcaV\xa0\xed\xa5\x0f\x89\x9b\xe2\xf9z\xbfi\x93O\xc5tL9\x1f6\x8c\x96\xd2\x1f\x13[r\xf7\xb0\xaat\x96\xe5\xe6a\xd5\x98\xd8\x19\x83\xa2\xd2\x90\xc7\xc8\xea\xdc\xde\xbb\xaa>bQ\x7f\x10\xbc^>\x18\xbc\"\x05\xbc\x96\x88x9\x9f\xc4\x8f\xba\x88sWP\x04a\x9a\xe2 R\xba\x1e\xf7f\x86\x8c\xcc\x10n\xc9\xf6\x0c\xe4\xa2lO\x9b\xbbZ\"w\xb5\xd4\xcc\x16\\.\xa1\xb8?\xfbdz*l`b\xa0\xe6\xee\xfa\x7f\x1b\x03ez\x1e\xc2T\x99\x9e{3Z\xa6\xa7\x9f\xf92=\xa8Pm`\xba\x16\xd2\xbd\xf6\xac>WW\x885\xe3\xf6\x87\xb4\xfa\xd0\xa2\x83\x1e:\xbd\x15f\xef\x94\x10u=\x96\xa3`\x04\xf6\x08\xf0\xb6\xe7A\x88h\xf7\xfb\xfba\",\xe4\x90,v\xeeW\x0e\xd4\xcdX\xd2|i\xf1\x91cz\xba\xa9g\xf9|\xc5\xe8\xf1&G\xb6\xc6\xdc6\xc9\xa4\xfa\xb4\xae\xf0z|)\xa8O5Xs\xd0\xcf\xde:\xba\x07\xfd\x95Q\xc3\xab\x8an\x13\xb8d\x00bW \xd6\x9d\x9a\x9c\x0d\xbb\x93\xab\xcac\xcfR\x9a\xd0\x074\xff\xcf\x8b!D\x84\x15\x9c\xa7\x8a\xc8X\xd4\xd6=\xc0\xae\xf5\xe1\x90\xdb\xc3~\x8e\x95\x83\x92{-\xafxz\x1f\xaf\x8dx0\x10I&>\xed\x06\x07\xe4\xf1\xfaz\xf4\xba\xbbG5c\xf1\x1aO\x87\x1d\xec!^V\xba\xbb\xbb\x9e\xafK\xfe\x02j\xbb{\x80\x8aL\xed\xa1Sc\xb3\xa1\x83\xcb\xc6>\xae \xd3\xdef\x9e\xd9\x9b\x19\x8a\x11\x86\xec\xfe6\xd0\xab\xbb\xda\x87\x89\xb1\xd4\x841j\xbb\xaf\xafZ\x1f\xaf\xda\x0e2\xe0\xd9\xf7\x0d\x9d{\xab\xb5\xc77^\xec\xffM\xc6\xc1\xf4+\xa8\x03\x0cC\xfaV\xf7LX\xbd}m\xdb\x02\xdc\xd3\x11x\x8fJ\xdcy{\xff~\x8b\x8e\x9fT\xd8l\xaf\x99m\x80\xfe\x10\xdb\x1c+o\xfdO\x1a\xdd\xc4\xe2\xc0F\x0cO\xc5\x83\xf7\x1bi\xcb0\xe9[\xd6\xee\xf0A\xa3\xab\xb4\xa5\xcdC\xe4.\xc1\xef\xbd\x84]\xf6X\xdf\xae'\x7f\xf1\xcf\x18\xe9#\x98\x13\xf0\xb058\xea\x9f\x85\xe9\xc2\xf0iS\xb7v\xd3\xbc\xed\xc1j\xae\x03&\xa5_=\xd7\xfc\xb9`'\xb6\xc9\xcd\x81e\xc9>uAK\xc3\xb8\xef\xbf\xe7h\xffv\xaf\xd1\x1e\xf4\x8c\xb6e\xe0\xf8\xbfa\xd0g]\x83n\x18y\xf6\x1e\x9c\x1d\xe34\x8c\x857\xff\xbe\xab\xf9\x96\xd9io\x17\x86*\xe5\xd9Tn\x8aa*{\xf9P\x95\xbd\x95&\xeb6\xe7\x12\xf1\x06\xc3\xf2YOu)\x12\x96\x0c<\x18\xca3\xe7\xe1r$qW`\xcc1\xc5\x1c\x95\x8e\xa8\x05m\xc2\x1e\xacl\x9c\xc1\xfd\xb4S\xac\x9a)\xe6\xec3\xbc0\xe0\xacD\x9b|M\xa6\xe0\xce\xe0\xc9\x13\x98)\xa1\xc7\xf4w)y\xd2\x93\x85{\xd2~\xf1\x93\xa4iY\x0d\x1bBK\x86{\xc7\xaa\xcf\x89\xf6\x1e3\x98\xa5w\xc6\x0b\xcf;\x1d\x07\xb9\x93\xd4\x87\xe8\x8am\x84\x8c\xad6\xd2X^\x17\x9bJ\xd4)\xd9k\xbe~\xf9b\x8d\x1f\x00\xca\xd6P\xcbLx\xc3\x1d\x1e\x0c\xdd\x0dt\x0e\x8e\xa1\xfcv\x84\x8b\xa52\xf9;w\xda\xe1\x9a\xea\x82=p\x0c\xbe\x97\xc0\xcc#\xa0H\x07\x83\xc8}\xa6\x1f\xaa\xc8Lq-\xfa\x91\xcaH\x01\xcd/\xd0\x12\x96\xb1\xcf\x02<*\x00?\x8eQ\xc8\xa7\xbe\xefi\xdfG\xbcP\xca\xfeD\xa2\xf3\xcd\xfcY\x90/\x8fcw\xc6\xefc<\xd4)\xe5d\x96k]\x136\xa97\xb0\x07)l\x823r`\x13\"\xf3\\2v\xb6\xe0\xb1>\xca\xa0D\x1c@\xe2\x0bLro\x90ko%w\xe8_]\x8bjX\xbe\x9f\xc3\" oR\xd2\xa5\n\x05\x18,\x9d\xe5\x1eU=\xe9\x96\x08\xb0\xa5,\x97aDFpc\xcd\xf8\xb5_\xbap\xfb\x08=\xedo\xbf{\xce\xabv+\xf7>\x15t]{\x12\x91\xec\xc35\x8c\xe0\xd6G5^=R\x1d\x0e\xa2\x9d\xec\"\xa0\xf0\"\xad\xa8u\xa2L+\x9d\x17B\x87!\xdfm\x7f\xe7\xd8\x17y\xac\xb6\xfac\x1es\x9c\xc4\x8b\x9bK\xb1\xc1\xdd\x05I\xf9\x9f\x17g\xa7\\0\xed\xb9cT\x8cW\xab\x81=`\x19\xb86\xbc;\xf6F0f\xfba\x8csi\xc8<\x16\x93\x0c\xa3\xf6\xa7\xf6\x86n\xa5\xb0\xa1|\x163\xaf\xb8\x01\xf9\x07z\xe6m\x8f\xe33\xee\xc4\x9bU\x92J2\xcc\xfd\xec\xf9P(\xc4\xa8\xab\x1c\x90\xf5A\x08\x9f\x0d\xb5\x11\xc3\x11\xa6R\x19\xbd\xfeq\xd7\x0d!\xe0\x84\xea*:\xea\x93\x9bG\x99u\xab0\x16m\xc2\xd32\xc0\xbc\xe1\x9bD>_U\xf8k\x0e\xd3p\x97\xcc\xc6u\x01{p\x14R\x12d\xf9mG\xa8\x9bLRg.\xd1\xd5\x05\xad\xd3F\x83x\xc5Qj\xa3\x0d\xd8\x82\x8bj\x0dyO-c4\xa8O}\xf5\x84\xa0\xad\xbfyuJ{\x1a\xea8c\xb9\xf6F\xd7}\x0b)\n.^\x98\xab~m\xccg\x9ei@\x8d$\x0b\xafI\xdan{\xf4aK\xf5\x04\x83\xa3\xaf\x1d\xab\xa3\xaf\x9d\xa6\xa3\xaf\x9d+T\xe37P\xef\x15%\xda\xfe\x96uR\xa0\x89\xd8\x07\xb9b\x9e\xc3}\xfeP\x0c1\xc9\xcb9Wf\x1fi\xdd\xa4\x9bT\xd2$\xc14\xebR\x9a\x0f+}\xd5\x01\xf4;\xe9\xe7\x07\xca\xea\xf6\xdf\x16\xa5\xce\xed>\x0c\xb9\xfa\x80\xe6\x1d\x8b_K\xd8\xa9\xfc\xb0\x1d_W8x\xednl\x8a\xf7\xc9\xed\x03\xcb\xce\x08D\xa6\xa3\xca\x9c\x9d\xd1J\xdb\x9f\x17\xe9v\x12P\x86\xac\xa6\x96N\xccq\x00\x15\x81\xd8\xe8\xbe\x0f\xb1\xfd\xec\x16\x80\xb0\xd2\xb8C\xd4},\x9a\xb85\xb1md\xa1\xfcm\xd1\xbf\xe7\x8a\xdf\x96\xa5\x96\xd8\xa2\xdfb\xd8V^\x92\xc4V\xednS,\xdc\xa9\xa5\xab\xc2\xb4\xd9b\x9fa\x0c\x97\xbb4\xa0\x1c+\xce\xc1_=\xce\xa8H@>/\xf3\x02\xfd>7\xe7\xbb\xb2\xf1\xcd\xdc\x97\xcf\x9ej\x90P\xdb\x087\xbdO\x19\x9b\xb4\xb57@,\x89\x91]\\n\x00\x12f\x11\xbaUD\nKA\x80\xe8\x11\xb4\x80$\x03\xe2\x01\xde\xea\x03\x9b,T\xb4p\xd1\x1f\xeb\x08\x92,\xca\x8b\x82D\x14\x92l\x9ds\x07x\x1b\x16W\x8e\xe4~3hv\xe7U\xd9(\xb9\xaf\x9f+\xcdT\xc3\x0f\xa6CD\"\x19\xb9\x1d\x805Y\x8f\xda{\x8d\xd15\xc1\xb2\xc8\x17 \x8a4YUdX\x9096\xe9\xca\xfcRm\xbe\xb3\xf6,;?\x861\xbc\x17mEyV\xd2b\xc50\xb3M\x97\x11O \x1f\x0f\x1b\x83\xbc\xd6\xf3y\xe7\xc5\x05*\xcb\x84\xbe\xe5D\"\xa3~1M\x0b.\xf3U\xb5;\x1c\xb4t\xf5\"}\xbfcZ\xa4\x01bB\xd4\xb0\xe3GW\x921\xd8D~\x9aLrv\x16\xe3\xbf=\xa0\xec\xdf\x08\nVG\xee\xe3\xeb\xbf\x04\xf2^>\xdf\xb5\x8c\xaax\x8c\xea_\xbd\xb0\xd4\xce@M\xd7g\"\x9f\x97i\x12%t\x04\x13\xd6\xb1\xe7\x8c\xe0u_>\xff^\xfc\x7f\xe1\xa9\xdeP\x1f\xde\xbb\x0eJR\x99\x97\x17\xbb\x167\x93\xec\x9b\x8e\xea@\xd0=\x9a\xc7\xca`s\xeb\xea\xbb\x91\xb7\xef~\xdc\xfe\xb8\xed\xed\xbb\x93\x8f\x17\x1fK\x0c\xc9\xd9.\x1eb\xf1\xc9\xc1\xd6\xff\x1f+\xe0\xffw\xb6^on\x05W\xdf\x8dX\x05\xdb\xedB\x8c|\xb1\\\xad:\xff\x86\x9e#\xc3r\xae\x87\xf3\xae\xb3\xec\xb3,\x7f[\x91\xe2\xce\x9eg[\xfatDG\xca\xd6l\x7fd\xd9\xc2\x15\x92x\xbb\xb6\\\xa7\xe1)\xeb\x13\x8fH.\xaf\x86w;\nl\x8f\xdc\x8f\xf1\xa6\xf7\xef\xdb\x18\xc8\xbch\x14\xebo\x04{\xac5\xd4*c\xa8\xa6}\xce\xc9\x87M\xe7\x08v\xcd-\xe3D\x8e`\xb7\xf5Q\xf5# \xaa\x9b\x8d\xd4\x8e\xaf3\xaepo\xb3\x94C\x015\xfa\x83s+\xc3m\x1a\xa4\xe2\xd4\xe2\xc2@\x8bp\xd5\xb9I\xf3\x9b\x91#d\x9e\xcb\"\xa7y\x94\xa7\x1e\x87{v\x96\xb8\xab\x8c\x94Q\xb8\x94\xbc\x13\x9bF\xcf7WH\xd2\x92\xe8\x8e\xea\xf6t\xf7\xd8\xf2A<\x981\x1cX\xb7E\xb0b\x1fJO\xeaz\x14\x93\xcc \x91\xac\x1bR-\x99\xad\xda\xd6uS\x84\xa1\xdb$\x03\x94\x90\xba\xacr6_\x93LG\xaf\xf2Ql\x14\x8a\xa0L\xc3rNP\xfc\xec\xd6o\x8c\xb0\xa5\x9cQ\x9f\x17dj\x8a\xfa\xd3J\x91\xbc\xe9\xef\x9a\xd9\xccp\x11u{;\xad\x02\xfaZ\x89g\xf3\xa4\xc8\xb5\x1e\x01\xe5\x0e\x9f\xd9\xbf\x80\xe6\xef\xf2[R\x1c\x86%A)\x8fc\xb1v\x17\xa3\x1f\xc1\xc6\x06\x9d<\xb5\xec\xbe\x82\x94\x94U\xff\xac\xbd\xd1\xf4+V\xf3\xd0\xa7\xb6C\x14*J\x8f\x1d\xf1*\xb17\xad\xbdPW0E\xcd\x82\x176\x83\xdc\xec\xa9\x94\x1a\xf7sn\xc1\xb0\x12\xc1\x91-\xdc\xcc\x02j\x97\xdd\xe6\x1c3\x96c\x9eX\xb8\x8a;\xd8\x83\x9dv\x7f\x10L+\x88f\x84\xd3\x02\xad\xf5\xe5f\xaaR\xb8=\x8e\x8f\xcb\xcf\x1d@s\"B \xfe\xb3Q\xf50\xabJ\xe4\\\xcc\xe7\xf1\x82)RH\xec\x9c\xdap\xd9q\x13\xb9\x84{.\xf6\xbc\n\x0f\xe0\x85H(A\xdd\x87Y\x03\xea\xe5\xef/_ \xe1\x1eu\x95\x8cU\x15\xc8\xf8\xc9\x17DL\xea\x9b\xe3\xf8\\l\xc1h7\xea7ku\xd7\x93\xa7l\x83N\xb6\xdd\xe0;o\xbbq\xf4xo\xe0\x0e~\x80\xb5\x10s\xbc\x81\xbb\xcdM\x0f\x91\xb5\xcbx\xd8\xf5\xe4\xee\xca\x9b\xec\\\xf9\xdc\x12{\xb2{\xe5C\xc9f\xa5\x84}\x98M\xe6\xb8\xef\x19|\xb7]j\xb2\x1c\xff\x8f\x1b\xa3,@\xfaX.=~\xc9\xe1dh\xfe\xa2f_\xb2>\xee\x83++\x15\xa0\xb3#tT\x95\xa4\x1861\xb7\x87A\x87\xb5\xfczf,\xcfs\xc6(\xfc\x15\xbb\x9c\xf7C\x14\x8eq\\z1\xdek\xcf\xf3\xe5@\xf1\x9f\\\xa5\xe5\xe4\xd9\x15\xae\x96Hd+\xb0\x9c<\xbfR\xebe\xff\x9a\xa8\xc0\xb0}8`\xcd\x02<\xe9\x90\x14\x12\xbf=\x84+\x15 @\xf1c?\xab\x8e\x91 \x9a\x87\xc5\x01uw\xc4\xdc\xea\xdfy\xef8GQ\x9f=\xa2\xd5*\xd3\x00?\x11\xa0\x92\xdd\x18\xe9\x0c9\x14g\xdb\xf1\x82r\x99&\xd4\xe5?\xe5\x0cn\xedz\xd2a5Q2x\xbep\"\xc1A\x8e\x1b\xbce\x93\x02\xb6\x18\xfd\xc1\xb7\xd2.7s\xdby\x03\xc5\xd6\xd6\x1b\x0f#{\xe0M\xd9\xa4\xb8B\xcf\x19\xac\xba\x08#\x13\xec\"~\x0d\x9a\x19\xdcf\x0e\x1fB\x06\xd6#\xee\xb7\xc3\xdd\xa9\x03Z\xb8 \xf7j\xe0C\xab\xc4\xd6V\xb7\x94\x19\xd7&\x0bVY9O\xa6\xd4u\x1c\xcf\xc7~\xb2\x89\xceq\xa9\x82\xea\xed\xcb\x17\xc8\xb8\x0e\x1cf\xcb\x84\xce\xfc\xb6)\xa2\x8a\xb2*\xbe\xbabl\xde\xd8\xb7\xbc\xa0*f\xe0\xfa\xa93\x19a\x97\xff\xe0\x85yf~{\xc8\xdeV%)\xc4b\xb36\xca\xf26/b\xfc\xcc\xbe2B\x13\xa7d\x89\xdf\xd9\xab\\\xb5Q\xab\xfcr\xb2S\x81}\xa3.\x86#\x04\x02d_\xf2\"\x99%\x19oP\xc1\x86\xa2\xbb\x88l\x93\x94\x8c*\x98\x95y\xf6\xd5\x97Mp\xb6\xb7\x1d\xd8\x94\xc5F\xe00|\x8dM3b\x01\xab\xaf/3\xb53Q}\x9b\xf2J\x85)B\x1b\xc4KBG\xbd\xac\xa7|\xf0\xe0\x13'\x94\x19R*\xeb\xaf\xae\x0bh\xae2\xca9\x86n\xa5\xd1\xdeX\x17\xd2\xdd\x84\x8b\xd4\xaa<\xa8x\xa0\x85d\x82\x17\xc9=\xe6_C4{9\xd7\xd0c\xee*Zc0K}H\x14p\xdd\x17~1\x12 \xb2I\x05\xb2\xd5\x95/\x0f(o\xc8Q\x8d\xc3\xe92\xd7\x84\xa1#\xa98\x9a\xa1\xa3I\xf8\x96\xe2\x13\xbd\xb9'\xba\xcbS\xd9$\xcb\x1e?\xc64#O7\xb4c\xdb\xa3\x8f\xf1\xe6\xbfos\x1a\x9a\xb2Yv\x85\xffxe\x0b'\x12!\xd0`\x99/\xdd\xaa\xc3bSS\x81\x96F\x8e\xa7\xcc\xbf\xfc\xa8\x14\x7f\x9c\xc9\x97 \xd17F\x95\x08\xa2\xcd\xf3\x94\xf5\xa9\xa6\xa56z\xa2N\x0f\xeb\x95\xa4\x8d\xfa\x94\xbcQ\x0c\xd0o\xf4=\xc8\xd6\x13\x0dW\xd9\xc4V\xad\x0b'3\xfbx\xe0\x8f\xc0\xf97\xcb\xb5\xb6\xfaHhP(\x82\x0da\x16\x1e\xb2M\x05&\xe5V\xf5\xf9*X\xc2\xc7@\x15R\x8c=\x08~\x8d\x99\xccF\x1f\x15\x05Rr\x02\xa1\x84\x1f`U\x91\xaf%;\xe7\xed\xf3\xcd\xca10ZM\xca\x0e\x0d\x9dT\xd2q\xc9$\x9d\xec^\xb1\x1e\x8a_\x1a5w\x8fnK\xa2\xa1>\x11\x93\xc6\x89\x98\x18O\xc4D=\x11\x13\xc3\x89\x98\xe8'b\"O\xc4\xa4\xa1\xde\xd3\x0e\xeei\xba\x9f\x14\x05F=\xb2o@\xd7vMNI\xf1\xa5\x8f\x04\x89\xf0\x8c\x84\xf5%\xd3\xbb\x0e\xcd\x1b\xca\xe5\xd1v>\x0f@\xc6\xc9\x95\xe3\xb7\xd0e\xd8%1s\x85\xdc\x04\x85<\x1c\xb7\x18\xa9\x88B\x07\x81\xb8;\xfa\xc4\xe3\xb4n\"\x1d)\xd0\xcb>\x9f\xf2\x91\x1d\xf9U\x97\xfc\x15\x9d\xc4 \xcc\xcd=%\x8d\x11\x7f\x15\xb9T}\xe7\xc7H\xfd\x05I\x7f\x96\xfeGG\xfe\xcc\xf8J\xf3\\\x92\x10\xcf\x87\x8d4X\xa6\xabY\x92\x95\x93\xec\xaa\x0biR\xb9\x86\xe35\xc9h)\xeby)\xeaQ\xab\xe9>5\xe4)G\x03\xb2\x167\xab\x1d\x1e\xad\x14D\x9fd\x10z\xb0r\xc3Iy\x85\xeb\\z\xb2\x17\xaf\x1c\x94;\x19<_\x82\x11\x17\xab\xd7\xb4\xed\x95\\\xd9h\xfe\x94w\xf94\\\x90\xa3\xa4\\\x864\x9a\x0b\xedd\xb6\x19\xcen\xb3\xcaP\x99{\xc9b]{\xed\xa0*BGY!8m\xceA\xad\x8f\xb1\x9c\x87%\x89\xcf\xc9,))\xd7q`uhS\xc6A\xcd\xb0|\xd5\xfc%l\xfe\xacR]\xaeS\xab\x0d\"\xf1<(\xdd|\x92\\\x89\xe9\xe8\xd9\xe9P\xa3?=\xae\xed\xefLy6HPh\xc3B\xfcR\xba\xed\x0f\xa2\x07>c\xd3;\x17\xaf\xb4/\x9e^'\xbfB/\x19\xf5\xc1\x17kwg\xa7\x02\xe7\x8e\xccH\x06\xb7s\x1c\x91%\xc9b\x92EI\x95M\x01\xf1Iv\x15\xc4J\x0ee\x10\xf2\x97\xa4K\x9a\xfd\x16\xfb\xaam\x95e\x83\xa7\xb6\xda\x91e,\xfd\x19\xd5!\xb5s/\xf3\xb2LnR\xd2\x82M\xe1\x01\xa0 \xa1\x19;\x9e\x10y\xbc\xc7\x11a\x8c\xc9>\"#\xafVf\x97\x9d\x81u0\xba\x8a\x83\xe7\x92&~0\xb0\x95\x0bu\xd6\xbf\xa7\x1b\xe5\x8fw\\)e\xc0M?\n\xa5,\xb2f.\x0e\xc3k\x11\xeb\x0e#m4\xd1G\xa7\xe6\xe2N\xc5\x8e!\x133\xeeI\x10\xadH\xb9\x93\x8b\xafr.\x9f\n\x9c\xc4\xf3\xe0\xad8\x17\x80\x0dD\x9fH\xa1\xf6L\xf4\x8c\x88 \xe6\xc0\xf66/p\xd2\x87\xce3 \xe2\x06T\xb7\xc7\x8flUk\x13V\x17\x16\xf6\x1d\xdc.\x84\xb2*\xb3[g]\x1b\xc3\x86\x8e\xbbNqn83\x08\x8f\xcb\xa7\x02)\xd4\xac1`^\xf9\xe0\xc9\xaeC@\xd1 V\xa0\x80\x96}\x96\xb2Iq\xd5\x01uP\x1f:b\xc2\xdbQ\x85\xe4\xd3u\xfe\xcaG\x92\xcd\xab4\xed\x82\xaa\xeb\x82\x94\xa4\xb1}Gv5Nh\x11[\xb9\xb8\xe4A\x8fg\xad\x8d\xc3\xe5\xe1\xe2\xb2\x94\x91]\xed\xe1Wd\x8e\xe4'\x8c\x97O\x12\x88\xedg~\x1f\x12\xa1\x1e\x0f\x9e\xdb\xde\xd7\xa2{\xd4\x88\x13$Yk]\xd6\x8evC\xbc>\xf6\xa0\xd0\xdb\x0d\xd5v\x8bI\xd8\xbc\x804j\xd9\xaa\xf4;_\xcf\x87S\xe9\xdc\xa3\xa2\x99VG/\xd0\xee\xd3\xdd\xa7\n\xdd+Hw\xf7\xb51\xfe\xc6\xaaC\xdd\xad\xa6\xb9P4\xfc\xe5\x0b8\xab\xecS\x96\xdff[\xb8\x8e\x9a\xf0\x85\x04\x11w\xe9p\x19\x163B\xf1biF\xe8i\x1e\x93\xb7E\xbe8\x16\xf7\xa8n\x81\x97\x84\xfb\x10\x06I\xb6\xce?\x91?\xad\xc2\"&\xf1a\x98\xa67a\xf4 }Cp\x7f\x99\xd8-\x82W\x14\xe6\xbcU\x16\xdf\xd0zc\xef4\xa9\x8a\xb6\xdeER\x8e\xb38)\xe7}\xf8X\xecK\x87\xe6\xcb\x93|U\x92\x0fK)\x94b\xd3C\xf3\xe5e\xbe\x8a\xe6\xe3,6%\x1f\xb2\xf1\xa7\xe2K\xd7\xb6N\xca\x93|M\x1e\xd0\x1dV\xcc\xd4\xb2\x92\xde\xdd\xee\x05\x0d\x0b\xfa\x80\x86\x8f\xf2\xdb\xcc\xd40\xd67\xa0e\xa1\x82{\x94\x14$\xa2\x129\xf4u\xa2>\x1c\xaf\xe5\xe9\xf8.))\xc9\x88M\x0b;k\xe6\x960i\xc0\x03M?T\x94\xd3\x10\x8cXx\xe6\x18\xa1\x8dA\xb4\x19\xde3\xcf\x18\x18\x18\x14\xfc\xc4\nS\x97\xd83J\x95<#\x90\xfb\xc6 0}\xac\xc6[},\x06-\n/M\xca\xe36\x95j\xb9\x16]WV\x80C\x97\xa6\x18\xbc4\xec\x9c\xd5\x9d0w\xe8\x01I4\xb6\xf3\x06r\xf8\xa1v\xd5\xfc\xe4 l\x90 )\x19b\x0fg\\[\x9e\xe6\xcb%\x89]\xef\x0d\xe4\x9b\x9b^\x8d\x1d'\xf9\x95\x0fE[U\x12\xa4\xc2\x10^X7\x90\xa9!\xe3\x03W\xe9!K\xc4Fr@/\x8b\xd5`J\xbe_\xbay\xff\xed\x06\xf7\xdar`\\[\xdaI\xbc)\x84!\xbf\x19\x87\x1f\x1a7\x7f\x1d+\\lnv;\x18B\x8azR\\\xb1Ue\xe4\x9f\xa2\xfd3)\xdajG\xa0\xdc\x15\xa0\x87\xe0'O\xd8\xa6\xe6\xc1\xb3e\xc1n!\xa9\xbe\xd8Xe\x97\xfaU\xe7\xde\xee\x847\xda\x05U\xf3\xb0\xac!\xaa\x0f\x80\x14\xf1E\xbb\xbd\xaeV0\x9e7\xef4C\x98\x0cq\x0el\xab\x08\x0ce\xf5@/\xed\xd6t\xd4|\x9f\xd6Zh\xbd\xbb\xb5\xa4<`k\x81\x0e#{\x91\xa5\xe4\x18\x82\xba\x14\xcf\xdb3\x9ew\xf9-Zw,\x16y\xf6\x90\xe6,U\x0cj\xfb}\xc8\xce\xa1{\xce$6\xd9,\xd93\x8f\xb4\x08\xd7\xa4(\xc9\xe5m\xfe\x9e1\x8c\xc3\x14\x11\xaa\xe6\xf4\xe2U\xa1!m\x8e3J\x8aw$\\\x1bZE\xd7\xe6FYu\xab\xed\xba\x1a\xadp'\xfc\xa0\\&\xc93\x93g\x0f\xfe\xf10_,\xf3\x8c\x11\x03\x05\xe9]\x00\x90'l\x1b\xbf\xb4Q7\xaf\x9fU{\xc9\xc7\x10\xa6C\xea\xcf\xcd\xf5\xff\xce\xfcfa\x8f8\xc6x8{\x042 U\x95\\\xf1:\xb9\x0dd\xcc\xb1\xaah\xcb\xa4\xa33j\x14kUQ\xa1\xc2\xc9\xee6\x86\x02\xe5^M\xe3FL\xccN\xcb\xca\xac\x9b}je/\x08\x1a\xca\x1c\x86\xab\xd9\x9c\n\xd7\xe1\x9d\xb2\x02v\x8aY\xcdr\xd6\xc2&\xd4\x12\x14\x86\xdb\xe4\x14\xf5Y\xf4\xadp\x91<\x1c.\xcc\x164&n\x97S7\x94\x13\xd7_\xbe\x00 \xca\"\x1a\xa7dA2|\xbfM\xb28\xbf}\xa3O+\xdb\xef4@\x9b\xaer\x99gq\x92\xcd>\x94D\x96\x93\xfaG\xd6\x1c\x9e\x0f\xcfxh\x9c \xcbc\x82F\xfd\xfb<\x8c\x1c\xc9\xf0\xe0i\xe8(|\xab5\x8e\xd0-t\x9f\xaa\x163y\x10\x85\xd9\x87\x92\x1c\x9d\x9dT\xe0\x1b\xe7\x11\x1a\xef\x06\xc9b\xc9{\xca/'\x9f<\xb1}\n\xe6a\xf9\x96\x84tUH\x7f'\x1b{\xd6z\x94\xcc\xae\xe3\xf8\xa8\x1d\xdc\x98\xd9\xed\xef\xbekB\xcdwp8'\xd1\xa7\x92Af\x98q\x81?$%\x94\xab%[_\x1e\xc0\x89\xce \x08.IP\xc7\xe82=['E\x9ea7\xb4J\xf56N\xcf.\xc7#\xb8\x9c'%\x8f\x0f\x95\xe5\x14n\xf3\xe2\x13\x08\xa3\xbd\xf4\x0e\xa9\xce,\xcf\xb6f\x8c\xc6I\"\xde\x13\xd6\x8fh\x0ea \xbf\xf1H\xca\xbf\xf9z\xd5\xbf\xa1\xb8\xee7\x1f~K\xf30f\xff\xd1\x08\xfc7\x1f\xa3Q\xfd\xc6\x1ds\xfc\xd6\xd7\xc1\x1f\xf3\xa2\xc8oK\x98\x16\xf9\x02N\xf2\x98\x14Y\xf2\xf7\xa2\xaf\xd4\x1f\xd1^\x14\xfe\xc1\xb5\x0f\xbe\xd6\xd7%\x17\xab\xe94\xf9\x0c(D\x84L\x98\xaf\xcf\x02p\xa24\x89>9z\xbdUE\xfb7y\x9e\x920chq\x89K\x8e\xab\xc3\x16\x07\xd7@$\xa2\x9c\xb7\xb1J\xed\x1a\xa51AU#c\\dE\xedenW\x90\xb036\x0b\xd3\xd6\x874\x89HV\x92z\x9a\xe0Y\xb0\x13\xec,\x0b\x02\xee\xe1\xaa\xa4\xf9\x02~\\%i\xec\xc1\x1789\xbe\xd4\xcao7\xde}\xbb-\x9e\x8eL\xd0~@\xddS_\xbe\xf0[\x82\x0d\xd7 \xe3\x18\xe7Z\xd2\xc8\x0e\x83Z\xb9GjVA\xbfY\x91\x1c\xb5\x93g\x0el\x9a\xfc`\xa1PP\xad\xecM\xbbOF\x92e-\xae\xa0\xab\x8d\x1a\x15$\xa4\x12=\xb9N\x9c\xacM\xea\x1daP\x12z@i\x91\xdc\xac(q3\x1f\x84\xb3\xe47\x8e\xd0\xfe7\xaa\xc2\x84\x93\xcc&2\x05\x85\x9d@Mb\xae\xbdr;'\x95\xd8\x0c\xa4~\xf2\x10\xac\xc2\xef\xe6\x03^\xde\x07\xe7Y\xb0\x83\xaa\xd6\xc9\xa3!\xd3\xd6\xd1}\x90\xd2\x118aJ\xffL\xee\xf4\x90\xbayF\x8b<\x1d\x81\x13\xd1\"m\x7f?!4\x1c\xa1\xdb\x82\xb0\xfd\xf1b\x9eLY\xcd\xa8W\xcd>\xd7C\xb0\xd0:\xb6\x03\x0e\x0dW\xb3\x90&k\x82\xf3\xd3\x86\x12\xf43v\x92\xc7\xc94!\xc5\x05\x0di}\x8d\xd4\xfe\xd4bO%\xa0\x16\xad\x1b\x83\x8aS\xc43dc\x83\xaa\x90PC\xc1\xb0\xf3\xbau\xcd\xf2\x08K\x99\xb9\xaf^\x1b\xd4_2\xf7e+=\xe1j1\xbb\xdcv\xf4\xd9k\xfc\xf7t\xf7\x95\x1e\xfd\x9a\x8b\xe4w\x9f\xeb\xe5W\x98\xfe\xec{\xb3X\xbe4b\x151d\x93h\x92S\x18\x93\xdd+!\\\xa7\xe8\xb5\xf8\"\xb9I\x93l\x86\x1eu\xa6IQ\xd2\xc3y\x92\xc6\x86)_\x8b\xab\xf6\xc4\xedc\xafH\x90d%)\xe8\x8fd\x9a\x17\xc2\xb1D]\xa1q0\x91\xad\xaeB\xd4\xc58\x0dQ_\x8b?3\xe94XM\xb7Z3\xb3ob\xdcl(07+\xeaTaK\xec\x840\x8fI\xa4\xcc\xb8]\xb8\x95\xba\xdc\xee\xba\xe0\xd7\xf7\xdc\x82\xbdCk4\xafh_\xf5\xd1\x88g\x1c\x1cZ$Q\xb4\xdaA\x91s:l2\x97\xd6\x03l\x88\x1c\xae\xba\xcf\x9d\xec\x1a\xee\xdfb\xac\x1b?\xef\\\xf1;v\x12\xf0`\x9b\x08\x89-\x0eK\x0355+\xed\x1eFl\x83\x89\x8e\xe5\xab\xc4\xef\xddK\x87|P\xcfR5\xfbZ\x0cc\xfc\xe6\x0861\xa3\x15\x8b|U\xa6w\xe7d\x99\x86\x11a$?\xe3\xe3N\xc2\xe2\xd3j\xd9DS\xeb\xb6k\x8c\x9e\xf2-\xef \x05\xcfuD\xd2d\x91P\x12_\x92\xcf\x03\x0d<\xe4\x84\x11\x8571K~\xf9\xbda\xe7\xb4\xe6\"\x1c\xe8>\x17\x9e\xa7n\xe1\xeb\x14\x08\xeb\x19\x8a\xf6\x18\xe4\xe4x=\x02\xfb\xe0\xae\xf0\xde\xcf\xf3!v\xf9u(E\xd5||\xeb\x95]-\x8b<\"e\xf9\x01=\x14\x97\x03\xc4e\x0d\xeb\xae\x9d7\x90)\"\xe67\x90\xd9u\xab+\xf0\xb2\xea\xabHS\x98\x02oXm\xf5@\xa5]\x7f|z1>\xbf\xbc>98\xff\xf3\x87\xf7=j\xf6\x88u\x0b\xe9\xd8\xc7\xe7GJ\x11\x84SJ\n6\xa7}\xd1\x0d\x06\xd9\x05\x9c\x9c\xfd<\xbe\x1e\xff\xe5\xf8\xe2\xf2\xf8\xf4O=\x1d\x9a\xf2\x0eL\x85\xb8\xf6\x9f\xd4\xa3\x8b\xf1\xc0\xf9 \x1b\xf3\xf3\x18M_\x8e\xffry}xvz9>\xbd\xeci|\xf5\xe8\x8d\x9f\x8fq-N\xcf\x8e\xc6=m/\x9b\xeb0T\xc9\xe9\x9e\xf2\x9a5\xa6>\x88\x1a\xb3{\x01\x9a\xd3\x05#\x9f\xe7\x94.G\xdb\xdb\xb7\xb7\xb7\xc1\xed\xb3 /f\xdb\xbb\xaf_\xbf\xde\xfe\xcc>kd\xf3\"\xa4s{\x99W\xdb'!\x9d\xe3\x9f\x93wZ\xc9r=3\x16{\xba\xb3\xb3\xb3]\xaeg\n\x01\xfe8C\xed%u\xd5\xe8\xe9\xb5\x0d\xf6\xc9\xc5\xc1r\xc9\x10(\xfe@S\xde\x0f\x19\x0f~\x1f\x85\xe9[y>*\x94P%\x826\xaa\xbfvV\xd3\x1f\xd6N^L\xa9\xad\xb4aI\x17\xac\x8e\x1e\xdb\xdb\x8cQ\x8d=s_\xed\xbc4\xd0\xf1\x99\xfb\xf4\xc5+\xcf\xcd\xdc\x97\xdf{AR\xfe\x1c\xa6I\\\xc9\xe6\x1a\xb9CE\x19\xdee4\x7f{\x12nV\x94\xe6\x99\xd9\xaf_4'\xd1\xa7\x9b\xfc\xb3\xf9k\xb2\xc0\xf8\xfe\xa6O\xf3$\x8e\x89\xa5\xd2\"\x8c\x93\xdc\xf2\x89\xa0\xed\xa6\xe9S\xb9\xbaY$t\xd4\xd2L\xb6i \xe9\xeb\x8d\xe2\xee\x0dv\xc8\xe3\xa0H\xfc.\xc9>10\xac?`x\x04\x99\\\xb8\xce\xab\x97N\xaf\xae\xb2\xde\xcc\n\x95X]\xadR\xa9\x9f\xc8\x93\xf2\xec\x10\xe5mR\xc7\xfc\xd5\xab\x9ev\x0c\xdePZ\xed\x88Q\xf5\xb4\xf4\xba\xd1\x92\xfc\xc5\xc002\x9a\xd2\x8a\x88\x11Ch-P\x18f2\xa1\xa8\x93\x19N\xb8.\xd6\x15\x17N\xcb\xee\xf0\xb7\x82\x84\xf1Y\x96\xde\xf1\xb78)\xc3\x9b\x94\xc4\x8c\xbcb\xfd\x1f\xa1\xcb\n\xe1 \xeb\xd7|%\xc3\x83\xc6\x10\xc2o\xd8\xad\xdfX\xd2\x12h\x0e!\xa3y\x160MH\x1a\xc3mB\xe7\xf9\x8aB\x98\xc1o\xb2\xc1\xdf`\x1efqJ\x8a@\x91\x93\x16$\x8bI\x01!\xb0\x8el\xe5\xac'XC\x00\xc7\\\x90\xc7\xeb+\xe7\xf9*\x8d\xe1\x86\xc0bEY\x171\xd4\xfeo\xc22\x0e\xbd\xf7\xfd\x16\xc0\x19\x9d\x93\xe26)\x19\x99@(\x90\x84\xbd\xab\x1d\xc8\x0b\xf8M\x8e\xf8\xb7\xc0d2n\xd9~$~\xf8\xfc?\xe2\x94\x8b\xbe\xfc\xb7\x98\xf4C\xd1\x97\x7f\xd2\xb4\xcb\xd2#H\x026\xf3\xbf\xeb\xc8?\xb5\xda\x13-\xdb\x9b\x16u\xc8m|\n\xbf\xcb\x99\x11\x94q\xdb\xfc\xbf\xd3J\xb0\xe5\x08\xe95\x9b31\xa9\xdc\xff\"\xe4S\xf8\x8d[~m\x82\xf3[\xd0\x0ckh\x94]::m\x00\xa2Oq\x0b) \x18\xbc/\xf2%\x1aE\x0c\x83\xcc\xa62td\x03^6\xbe\xc8\xa4\n-%\x16\xd1\xa4\xb8b\xc74\xe7\x9a\x1c\x06\x88\x8e/\xee\xeb\xf2\x0e\xcb\xa9D\xf5\x89\x83\xe0\xcd%\xdb\x89\x0c\xfb\xc7\xba5\xedV\xdb\x99T\x99\xafP\xd5\xdeN\xde.u!\x81|zI\xd4&d\xcd\x08\xfdY\xc7\xbe\xa6.V\x9a5\xf5\xf1\xb5\x8f68(\xbc\xa8\x12\xff_\xf6\xfew\xbdm\x1cY\x18\xc4\xbf\xf7U\x94\xf9;\xa7\x0f9\xa6\x15\xc9v\x9cD\x89\xe3\xe3v\xdc\xd3\x997\x89sbg\xfa\x9d\x9f\xc6G\x0f-A\x16'\x12\xa9CRv<\x93\x9c\xeb\xd8o{\x0d{\x01\xfb\xec%\xed^\xc2>(\x00$\x08\x14H\xcaq\xf7\xf4\xec;\xfc\x90X\x04\x88?\x85B\xa1\xaaP\x7f\xc4_\"X\xf5\x8d\x15\xc4\xdf\xee\xfb\xc4\xa6=\x8d\xbd\xeb\xa7\xea\x11\xaa\x8d\x84\xd9a\xf5Z\x1f\x81|\xdd4\x06i)vVn\xc6V\xc1\xb7+$T\x94Ql\xd7/\xe4\xfd\xa9\x1c^m|M\xb3q\xb4\"\xab\xc8vJ\xf2{\xa4\xfd\x10\xce.*\xf8\x1aFI\x10?\x1c;\xd5!\xb1\x08\xe8\xfd\x12|\xa7\xe4\x18\xb7\xcc2\xfb\xe2\x1f*\xf5\x8c\xa9\xc4\xb1]\x88\xa0\xd2f\xa0\xda)cI\xa9\xd5\xa0k7Z\x95T\x15N\xab\xcb\xd26|UO\xe5\x98\xb4/b*\x90\xb3@\x92L\x96\xc8h\x18\xc4\\@\x06\x8f#\x8a\xc4M\xb6\xc1\xc1\xaa\xa7\x95<\xd0X\xf0\x0dv\x06\n\x0bd\xae\xd6\xca%\xabN\x83\xdd\xa6)\x0e\xb9\x8f\x95\x8a2q\x9f\x8e\xcc\x87\x16\x0du\x00\x8f\xb0\x0e\xfeQ\xf0}\x82\xdc*\xda\x1f\xa2\xa0Xa>9\xe5FB\x80N-\xa2\xa4\xba\x9a\xec\xdbwFZl\xb1\x9a\xcf{i\x16#\xec\xc2\xedZE\xadV\xd1z\xff)\xa1\xfb\x89\xdd!%\xb2q\xdc\xa8cjW\x84\x87\x90\xb4\x10\x15\xe1\x04\xc4\x0fg\xcf\x9aK\x08*\x00#\xcd\x8a\xf89\x06Q\xb2\x071\x03\x7f+\xab\xdc\xb3G\x91H\x99\xb9\x95\xfal\xc4\x7f\xa1\xaa\x1e\xffp\xdf\xf8\x96\xd06\xd6\xef^\xc8\xd9y\xc1\x15\x9c\xeb\x0b\xb75\x10\x7f\x132\xa6^\xb7\xd0\xea\x12\x17\x8b\x18\x81'\xab\xaca\x85\xbd\x94\xbd\xceU\xd0I\xd7=\xb7B\x1e\x12b\xf5\x10\x91\x88wUl5\xfe\xe6\xa8^%\xb6\xaa\xc40\x84Z\xfcG\xbc\x8dV\xe9\x9a\xd1T\x07\xff\xc4\x97\x9f\xd8\x9d|\xf7\x89\xdd=\xc4Z\xd17\xcb\"Tf\x1bAV\xac/M\xaa\xbdCo\x08\xdea\xdf\x11y\xd1\x1bb\xf1\xae\x9d\xba\x9bH\xf8\xa3\x80\xfd/\x9c9\xf6=4J\x08\x14u\xf7\x1f\x8d\x0e\x87\x97\x8f\xae\xc3\x0e\xe7\x87\xbaZ\x1e1\"\x96c\xa3._\xc5\x0f\xfdV\xa0\xf4q\xda.\xa0\x1c\xee\xf2\xe2\xe1&@\x11\xe0\xf0U\x8466\xea\xa3\xb7)\x87\x95\xf8\x8dQ1Y/__ D\xf4w\x05\x83S\xbd\x18\x04\x81\x06M\xff\xb0\xff\xe5p7xx\x80V\xf8J\xd3\x8a\x07 \xce\xec\xe2\x8a\xf6\x0fP\x916\x18\xec\x9a\xd7\xe6\xf2z]\xde\xab\xef\xef\x05\x9d=\xda\"BN\xec\xb1\xe4\xbf\xd6l\xcd\x04\xdfP\x8f\xccm\xb7@h\xbbJ\xdb I\x94\x1a\xcf?\xfd\x14+\xe8C\x0csQ\xa9\xb8\xe4\x82\x8ah/z*B!\x11\x014\xb3\x8e@\x92\x04fF\x8a\x8e\xf2\xf7\x0b\xd8\xed\xe3\x95\xdb6x\xe0\xf3&\x86\xc0q5\x93a\xaeB\xf0\x02^\x16x\xa0g\xffs\x87\x16p\x9d\x1fh\xeb\xed\x1a^\xa2\x0e}\xad\x03\xbd\x01\xdb\xed?\xce\xdf\xa6\xeb\xa4h\x97\xa0\xd4R\xd1\xfd\x83n\x86RH3\x94\xdeXH\xfclZ\xdaT\xd77\x89!I d\xaa\xecr\xbb\x08\xed\x8b2\xd9k\xe9\xbc\x88U\xed\xe1\xa9mc\xaf-\x94\x9cEu\x84\xd2\xeeb\xbd\xf1\x8a\xa1\x95\xa9\xea,\x87#\xea\xad\x08\xbf\x88\"\x13\xf5\xcd!\x8c\x8a\xcb\x10\"\xebB\xbb\x11 \xaf\xa51^\x07\x11\x93\x91\x03%\xdej\x03\xa5\xbe)\x07\xda\xecM \x07\xfac\x9aM$-\xe8\x8aM\xf4bH\xe3\xder@Z\xc3(\x98\xf0\x11\x15fJ\x0crH\xf2\xe6\x1e-\xaa\xba!T3\x9aH#\xf4rd\xd8\xf0\x7f\xf0\x9e\x14\xac\xaa2\xbdo9l=\xc1\x82\xa6\xd4\x97\xbf|\x02\x99\x85\xf5_\xd5\x90\x17\x84\x9b\xa2a\xd2\x80\x86\xc9e \xf0\xb0\x0b0\xcfYA\x01\xd2\x05\xc5\xc4 E1[?\xa1\xc0\xf8\xe5\x0b\xd0\x05\x870\xba\x0c\x02\x85\xb0|\xd4\xa6{\"=jy\xe3\xe4\xd8=\x0e,\xa86\x8327\xc7h,\xac7\x96\xc9\x0e\xf9\xf9\xdb\xbe1\xcc\xe5\xec\x0093\xd6\x99.\xf7I]\xc0\xee\xae\x87#\xe7\x07\xea\x86l\xc77x\xc9'\xfe`/\xa0\xb8\x90\xbd}\x9a\x0b\xe1<\x86\xee\xaf\xa9\x8f#\xbd\xff8\xba\xdd\xed\xdeT\xc1\xdeP\x928I\xa7\x8c\x16j&\xf3(\xe3\xa5h/\xccP\x1b\xc0yI_(\xbaU)^M\x0d\x84?ARZ\x06\x0e\xf6\xf8\xde\x92\xc8P\xc0\xcbC\xd8\xdbE\xd5\xc1^\xa9[(`\x08\x1bJ\x9a\x15h\xad<\x15\xd2\xc5`\xf7)y\xdd\xbao\xde\xc2b\x98\xc7\x91`\xa1${si\xb0\xe3k8\x04u\x0d]\xe9V\xeaurB\xfbR\xaf\x81q\x0e\xcb \x80\xf5\xb2 \x86,\xa8+k\xec\xdb\x89\x85\x90\xeae\xde\xc3M\x97[\x18a\xf3\xf7\x18\xaa\x8b\x05|\xdfD\x8dJ\x0fdf,\xf2\x84\xe24\xa15\xe9\xd3\x0c\xe7\xa4\xd4Ex\xb5\x8c8\xa8$\xd2yO\x1a\xf7\xaam~X\x0f\xfe\x9e\xe8w\x01\xc2\x8eK\xf4\x94\x04\xbc\xea\xec\xbe\x08\xb5\xfb\xecI a\x8c>\x83j5\xcff!4\x82\xbe\x93\xbc\xa2\xf7\xe3\xcaJ\xd3\xb2eA&1\xd2a\xe7\xb3\xde\xd5]\xc1\xde\x08u\x12\xcd\xf8b6\x9a\"\xe8\xe5\xac\xf0\xc5\x0f\x0cb\xdd\xe6\xdec\x8e^\x05\x87\xc4\xf5\x9b\xc7yo*\xe6\xa5R \x0e!\xe2EJmm\x16\xba\xc1\xa0\x00\xaam\xfc\x01n\xf2G\xfa\xc6\xff\xef\xbe\xd8\xf8\xfa\xbeG\x94\xc4\xa8\x0b\xc5\xfc\x03\x9b\xac\xb3<\xc6$\x86\xebP\xf8r\xf1\xf7mWB\xb8w\x8d\x8dk\xedX\xc5\x95H\xaabs\xab\x9e\xa7|(\x84s\xb8f\x1c%\xe84z\xda\xce\xd2u\x82~\xbcY\x9a\x16\x8e\x9c\x98\xe6~\xc6I\xce\xa3\xfc\xa3BhmB\xc0\xec`\xf3q\x15\xc4\xb0\x99{\x16&B$fuq\x8e\x01\xcb{ \x94\xfe&u\xec\xc5c\x90\xfc\x1a\x14\xf4}\xe4\xc0\x02\x02\xd9\xd4\xf3\x95\xcc\\V^\x94\xb9\xc6\xa7\xae\xdbb\xdf\xb4u\xd5\x9f\x08\x15\xaar\xd4\xeeyjg|\xd4qV\xe9(\xb9l\x99\x18\xb9\xdb\xaa\xe4w_\xeb\xb2~3\xef^\xa2E\xa1\x19(;\"yH\xc3\x12\x91\x92\xbdL\xf9\xa9l\x9cD\x96,\xe1K\x89\xb9 \x12\xf9\x13\x0fl.\x89\xc8\xdfe.fyh\xf0wE\xc6\x98\xe5\xd8EN\x14\xcd\xb5Y]B\xf0q\xdbh{\xa3\xe8!w)l\xb1:\xc6\xd0\xa8d \xcb7Q\x08\xef\x83\xc7\xa6\xbeD\x08\xefOLY_\xba8\x0e\x1e\x93.\x8e\xcf\x06OZ%\xac\x86k\x04\xce\x06Q\x97\xc0\xbc\x81]G\x19\x17\xf2\xf7\x1ce\\\xc8\xdfw\x94q\xf1\xfe\xc0Q\xb6\x82Cx\x0c\xea:\x9cH\xa2<\x05y\xfd\xbd&iV9\xd9\"\xe4\xb4w\xde\xc8D\xdf\x84\xb0\x0c1\xd1\x1bnKL\xea\x96\xfa\xd7A\x08W\x98kv\x8d\xd9\xe4\xf6\x82\x10\xc6\xfcL\xf1\xef*6\xfbV\x90\x99S\xf4\x05?\x82)\xefo\xccE\xa4\\\xfd\xeaW\x06R\xcfa\x0c/\xe1\xf69\xdc\xba\xb6*\xdf\xa6\xfe\nc_p\xa2,\xa3\xe4/\xe1\x10\xae\xfc\x1b8\x84\xbb\xd1\xede\x08\xb7!\xf0\xc1\x99Z>\xb3\xa1$\x80\xd3\xd1-\xe7\xf5\x974\x11\xe1OI\xc5\x96A\xb7TA\xa0\x18\x9a\xbdf\xbf\x17\xd0\xcfjw\xff\xa0\x9a{\xdc\xb9\xb9\x9b\x0e\xad\x1dtn\xed\xb6Ck\xbb\xed\xad\x9d\ny\xe5\xc6\xbd$\xda\x891i\xe4\x7f\x14\n\xc3\x11\x17K\x86\x80\xd9\xf5&p\x04\x13\x18\xc2i\xad\xba\xe9\xeax/\xcd\xa9\x14\xdb\xc4a^j$\x8a\x10\xbc*\xd3\xb7g\xfa^H\xd3z\x9d\x0d\xe3T\x13Sv\xa5Y\xfcW\x95\xde\x1d\xcf\xdf\xf2\xe5\xf1\x04\xed\xca\xa4-\xda\x0fQ\x1eO\x8e\xd7\xc5\x9c%E\\\xa6bpV\xff1\xcd\x96\xef\xa3,Z\xe6F\xad\xd5jA~\xfe\xbeJ V\xf4V\x19;V\x05\xaf\x97\"!1\x16\x9c\x9c\xbd\xfb\xf1\xf5\xef?~8\x1d\x1f\x7f\xbc\xf8 _\xfd\xf1\xf8\xcd\xebW\xc7\x17\xa7\xf8\x83\xbf=\xfb\xf0\xfa\xff\x7f:>\xe3\x7f\xee\xe2\xcb\xf7\xb2\xbaU\xf0\xe6\xec\xf7g\x1f/\xea\x1f\xe2\xaf\xf3\x9f\xce~\xc6O\xc6\xef\xcf\xde\x7f|\x0f\x87\x8a(|W\x81T\x86\xcf\xf5\x13\x7f\xff\xb1yE\x9f\xca\x92\xdd=\xea\xf2\x1e\xbf\x19\x04\xb5C*\x9f\xa7\xb7\xaf\xf8\xa2\xc6\x1c4\x9d|\x9e\xecm_`\xea\xf9 A\xa1\xa3\xbbE\x1aM\x87\xcdbG\xb9\x16\xdf\xd2;A\xfe\xbb\xf5\xbeH\xaf\xd3u'V\xdf\xd5\xf5\xea\xbe]\x97\x13?\xe3\x7f\xed~\xcb\x18\xa6\xf7\x1d\xc3\x04\xa3=\xaf\x05\xe2\x7f\xcb\x08\xe6\xf7\x19A\x1d\xb1#\x85\xbe\xfdg&\xfe\xaee\xd1\x9ee\x96\x92\x0bV\xa7OZ\x9e\x10nEJn\x13&\x1e\x15\xf5\x92\x8a\x1c{zJ\xacv\xcf\xa26\x89\x89c'{|\xab\x8dW\xe9j\xbd\xf2\xec+\x8c:%\xf0J\xcc0\xaa\xae\xea\xf4\xc3\x13\xc8kT\x9ab\xcaK\x17\xf9\xf1V\x19\x1b\x97\xed\x8fSD=/\xa4\x89\x98gU4\xa0?\x17}i\xc4\xd0S\x17\x97\xd8\xa6E8\xbd\x12\xe1p\x10^\x8d\x1a9\xe8o+NV\x9c\x1c\xc5\x95\x94\xcay\xdcp\xc7X\xb3!\xe2m\xd1cY\xd6XKx\xd2\xf3\xc6\xe8\xf2H\xc4,K?\xb1\x84\xae ,\xa8\xa5[#]e!\xf2RM\xe6l\x19\xd15&\"\xc2E\xb4t\xf8\xfb\x8b\x9b\xb1kV\xf8\xdel\x91\xdeR\xe1\x82d\xc4\xf4uO\xe2x/\xbf\x8d\xae\xafY\xf6\xf1\xf5\x076\xc5\xb8\xcf\x822\x85\xe0E\xe51+t\x063\xcep\x88\x1c;\xbd\x84\xdd\xf2e;\xcd\xcc\xa4\xfe\xea\xe1\x8d\xbc\x9e\x92G\x04\x7f\xf2t\x9dM\xd8P\xe5\x90\xa7\xe1\xc1n\xd8b\x08\xdem\x94%qr\xed\xa8%%\xc1!x\n\x8f\xc4\x91\xbf\x8c\xee\xe0\x8a\xc1\x1a\xddgCXEy\xce\xa6\x90\xa3y\xc5m\x94\x83\x88\x0e\x86J\x8e\x9ce7,\x83\xf7F\x95\xe4\xdf\n\x89ml*\xc2|a\x1eRQ\x9b\xb0C\x0cB\x88z\x18J\x0c\xed+~M\x10a\xafm\x00\xf2\xfb!\xc4j\xdd\x03?\xa2<\x821\x13\x97qH5\x0c\xdf\no\xa8\x1e\xdc C\x88\x88.\\$U\xa7\n\x14\xaf\xf6\xeb\x92\x04\xd6\xb8\x11c\x11X\xc3\xb9\x11\x059(\x13\xab\x91u\xd62\x84\x87\x98\xa0\x9b$Tu.\xac\x8bt\xf5L\x84zu\x11\xb3\xa4x\xedhk\xa6\xd59g\x93\x8c92\x9b\xaf\x9c&\xba\xfc\xb9\xce\xa2\xa4\x18\x8b\xf3\xdfS\x03s`\x1e\x7f\xf2I\xca\xabrp\xa6+\x96K\xfbF |\x16\x01\xac+A\xf5\xa0\xc7\x9e\xa3l.}\x15\xcd\xf7JKy\xc5\xa5 A\xc0\x16p\x04\xf3^\x9dL\x1c\x82\x87\xf2\x06\x9a_\xf2\x1d\x92\xf7\xae\x8a4\n\xfc\xa8\xcc\xf8\xba\xc6\xbbM^\x96V\xbbgEy\x9d\xf3G-:\x89\xfc\xae\x8f\x14 \x87\xb0&\xe9\x8a\xcc\xc1[\xce\xc2\x9f\xa0\x06`*\x97s\x1cs\x08M\x82\x10f\xf5\xf79\xae3\xdf<\xe8\xba\xd5y\xf2\x93r\xf2\xb3\x00\xd3\xec\x99\xf2\x9b\x83&\\\xa5\xd3\xbb\xa1ji\x1d/\xa6\\8{\x15\x15Q\xe0\xaf\x1c\x8a\xcdu\xb6\x18\x8a\xe0\xce\xbe\x87T\xe3c\xb60Y\x0e\xf5\x08\xb8\xc6\x0eD`\xd1\x94e9\xc9\x96\xf2\x07AH\xb2\xcdPR3\xe2N\xdcI\xafB\xb7\xb0\xf9[\"U\xa9\xac\xc1w\xdf\xb7\x10\xb3f\xe2\xb2\xeeH\\l\x93b\xfd\xa9a\xe7\xb0\xcb\xce\xdc\x84\x8a\xd0\xc1\x00\xd4S#lr\xfbL26eI\x11G\x8b\xbc\x9d\xc4\xa5m\xb4\xcdI\xa3\x1eb{M\xee\xb3e6\xd9{r\x83\xb4\xec=\"r~\xc7\x0d\xe4\xd6\xe9\xb4\xdb\x00\xb98\xf3D\xba:\n\xc6\xf6c\xb6hV\n;m\x8f\xb3\xb2\x8fV!\xa1h\xe5\x1b\x8a\x96\xadVt\xd8j\xc57o\xb5\x1a\xbaG\xfa\xbe\x1bO8\xc7\xefF\xf7 f\x08(z\x13g\xd81\xac\xa5\x0e\xa6!8`\xa1\xd5\x12\xc7\xd4\x10\xd6\xee\x9aj\x11\xc7\xeb,\x1e\x12V\x04\xd0\xb8\xc3\xb2\x07\xd8af\xd2U\xf5\xb4\xef\xb0t\x93\x1df'\x9c\xbe\xd7\x0e\xa2\x95\xa8\xff\xdcJ\xb5\xe7a\xb6\xd2o\xe6\xd4\xfa\xbbm\xe3\xbf\xff\xe6\xbc\xff\xf1\xb7\xd9\xe6\xfc\xa5\x8e\xbf\xeaZ\xe4\xc1x\xc7\x99C\x13%\x90\xfe\x9a\x152\xeb\x1f]+\xef\xc6\x7f.:i\xcf\x84\x824\x8d\xf2\xbds\x0c\xae\x9e\xbaR\x15 \xbdh\xbeb\x93\x96\x8a\xabrx-\x15\xa7Ho8\xe68\x96\x0e\xcbQ6\xa0+\xdc\x94W2(}\xcd\xe1\x08\xfe\xf6\x15\x9cR\xc6\x12\xdb\x93\x08AW\xb9\xae\xb7\xb8T-.\xe9\xeaw-\xec\xf9\x95\xd05dD\xa4 \xfe\x8c[4\x97\xb7p\x08\xfeJ\xc3\x07\x1f\xad\xe2\xff\xf65\xe8E\xd3)\xde\x11E\x8b\xff\xe0\xf0\x11\xd6\xfa\x82-\xa3\xdb:%\xae\xaf\xf4\xb2Y/\xce\xcf\x8e\xcf\xf7\xfc\x80\xcb\xb0\xfd\x10\xa2J\xa0\xbe\na\xd2\x13\xb1\xf7\xd9\xf4\x1cul\xbe\xc8\xac\x0cC\xa2\xee\x8c\xcfXV\x08\xeb^\xe2\xbaU\xd1-\x1c\xd5\"\xf6\x89\xa6\xb2\xaa\xa9\xdb@\\\xa6\x9f\xca\xb4\xf4\x87`\x08\xfa\x7f\xfb\x1a\x82,\x0c\xe1\x96\xb2\xe3\xe3[\xee3\x1c\xc2i\xe9\xd1\xe0;\x88\xc89\xd1\xbc\x93\xa8\xf2\xf3|\x85a\xcc+\xd9\xf2\xd1_\xf24 \xa1`\x9f\x8bG\xabE\x14'!\xfc\xee\xd1\xef\x1a\xa8\xbcw\"\x82[\xee\\\xdc\xad\x98g4\xf6y\xe7\xf6\xf6vg\x96f\xcb\x9du\xb6` ?\n\xa6\xb6b\x13\x04\xb5\xba\xa6\\\xb3z3VL\xe6\x8eY }\xfd\xec\xd8'\x18\xd6i\x08\xde*\xcd\xcd\xdb\x0c\xf5\x94d\xf5\x9c.\x97\x12\xfd\x8dc_\xe0i\xe18\xf9e\x9c\x1bt\xf3\xe2`N\xb3!\xac\xfd\xa0g\xbfw}\x9f\xaf\xd2$gD\x03V\x81\xd5\xc0\xd7\xa0\xc7\xf92\xbf\x99[\x02\x8d+\xd3,KYo\xcaO<\xf7\x92#\xf5\x97.\x91B\x1b\xfd\xe5\x0bx\xaes\x0d\xd4\x15\x88\xfc\x02;9\xd5>\xa3\xed X/\xfd\x84\x0e\xcc_\xbe@\x06G\xb0hWw\x83\xa6\xf2v\xd0Z\xe8\xa8\xd2\x86\x8e\xeaqhP\x7f\x13\x16\x85\xa0T\xe0yG\x158\x94\x8c\xc1\xd8=\x00\xa9\n\xb7\xf9zP\xdd\xfd\x03\x00\x8f\xf5\xf2\"*\xd6\xf9\x05\xfb\xec\x9a\x08\x85\xe6\x98\xaai\x03<\xaf\xacQY\xa0l\xfch\x04D\xcb\xc5r\xb7\x89\x9b]\xf5K\xec\x90\x06\xae\xf9\xa6\x0c\x00P\xfb\xc4m\xf2C\xe7\xa6\xd2\x1f%\xdbh!M*\x17\xad#}\x03\x8bL\xa4\xcd\xe6E\x99\xdc\xb9\xc2sp\xfb\x10\xbc\x10\x98H\x16%\xc2\x04\xe0\x0ft\xee\xc5\xbf\xc6S\x96O\xb2x\x85b\x9e\xfe\x91\xf6\xbe\xf6\xa9\xfeA\x93m\x92\x96k\xcb\xf6\x0e\x02\xa0|\x86\x00\xfd\xec\x7f\xf3\x18\xbd\x01\x1a\xd7^\xfd\xf6l\xab\x10\xad\xfe\x14-\x17\x82\x81s\x99\x10\x95\x19\xa7\xc8\xe8\xbb\x98k*\x15!U\xeb&\x12Y\xb3\x89\x84\x91\xbb\xb6v\xb7o\x0d\xac\xd1\xd8\x94\xdedR\xea\x89\xab\x0bk\x0c\x87\x1cM-g\xea\xc6\xc4p\xb2\x19\x91\x0fT\x13X8\xa2^\xcc\xb3\xf46\xe1\xa8\xaa\xd3\x9f 4q\xfe\xb7\xb7\xf4\x8b4\x9a2a\xc8vq\xf6\xfb\xdf\xbf9\x1d\x0b\xeb\x8bs|\xf5\xf1\xfd\xab\xe3\x0b\xfdU3^\x98\x16\xc5\xbf\x14Z\xacUh\x86Flh\xb1=\"\xb4\x11\xa5\xed\x91q\xd2s\x0e\x9e\xd9 *PrH\x16\xe9\xf5\xf5\xe2\x9b\xcc\xd1\x08\xe5\xe5}\xac\xa1\x88e\x93\x064\xf9X@\x8ep\xc9&\x96\xbf\xfcH\xcc\xcc\xd3W\xa0D\x9br\xb2m\xba\x86\x1a\xfd\xbf\x07\xf6\x97\xafK;\xadL}D\x07AG\x03\xfd<\xc3\x8bmi\xae\xcf\x92\x9b\x9aA\x7f!\xcd\x17\x95\xc9?\x92\x1b\xe4e\x95}?\xe7\xbcr\xcd\xe0\x7f\x95\xe6\xc20[\xfdz\x1bq\xc1M\xf5%\xed\xb7e1\x9e\x9e\xd6Z\x90j\xe3\xf1U:\xbd\x1b#\xf6y\xb6,e5&\xb3T\x8d/\xfe\xf4\x9enN2Vx\xbfk4\x18\xd5\x1b<\x7f\x7f\xf6\xee\xfc\xb4\xa9E\xb1\xd3\x9b\x9a\\\xd7\xe1\xc5\xc14\xfe\xe3\xf1\x87\xd7\xc7?\xbc9%\xe6,\xa06\xbe\x91\x08/\xa7\x8d-\xde\xeb\xd8\xbf\xd1\x02\x95R1\xc2\x12\x7f\xb7O\xba\xc2\x0e\x1e\x9b\xf1\xad\x84/\xecc\xb3\xbap\x85}b\xbe\x16\xee$\xfb\x8f\xcd\xf0\xa8\x0b\xe19kjK&b,\xfbf\xf5\x99\x18\xcc\xb3\xc0\xf7\xe2\x82e\x11Fv\xaaWYq\xfe\xdf\x1f]b,\x14\x8c\x9c\x91p\x8e\x1a\xe2\x04\xe4K\xdf\xf4ui\x94\xd2@Sl\xcc\xe3\xbc\xbe-*\xc8:\xdd}Q\xfa\x9a\x87\xca\xd3\xd5l>\xf7\x13\xacdFQ\xe2+u\x17\xc2U\x08c\xe1\xea\xda\xae\xe0\xc50\x10\x98 \x0b\xf3R\x9c\x94\x9e\x8e'V~Z\xf5tr;\x15148\xe4\x1a\xf2\xad\x89J\x88\x9fM\xd5\x80\x96{\x1b\xebk\xdf$\xec\x16\x12\xe9\xa7\xee\xc8\xe7\xa6\x9eMT\xa9\x9b\x8c\xa8\xfbH\xec\xbe\x08\xf3\x13\xf4P\xc4\x10\xb5\xaf\x15B\xdb\x95>K\x07 \x0e[8<\xa4n\xe3\xce\x85\xd8k\xbd?\x11\xdc\x02\x1d#\x8e?\x9f\xe0\x10NF3\xcc\xfas2\xf2\xfe\xfd\xdf\xcb\x8d\x85\xafn8>\x9d\x8cn.\xed/\x8f\xe1\x10>\xa1\xc3\xb4\x7fC\xdc|\x9d\xc1!\xdc\xc0\x11|\x86#\xb8\xf5=\x96\x14Y\xccr/\x80!\x1c\x97~\xd9\xf6g\xe8\xd4\x85\xb1&\x84~\x1f\xfb\xef\xc9\xafyoF\x82@\x8e\xf5\xefQ\x1f?\x86C\x98\xf8\xefeT6v\x0b,\x08\x02\x8c\xe5i\x86\xbc\xe2\xd5\xc7\x98\xb3\x13?\\\xf8\xe3\x10N\xe55\xb7\xb8\x93S\xa8\xa0\xdf1\x8c%\x94\"^}\x16\xc24\x08B\xf8\xcc[\xc0\xbc_\xe5\x02\xf1\x1e?\x89X \xbc\xf5s\x19i\xf4\xb8#\x95\xf9T\x05c0\xb4i8\xba\xef\xbf\x87\xadk\x0c>\x8f[}\xeb\\,\x90\x1a\xda \x0e\xed8\x08a=*\xb8\xa8z\xcc\xff:\xe5\x7fMC |\xa49\xfc\xee\x9c\xf6ObNC\\D\xbej\xb7\xbe\x9a\xa6\xe3\xaeS\xc4Y^V\xd5\x91n8*\xcbU\x1d\xc2\x19\xb1U\xe0\x9a\xdeV(\xd8_I\x1f}\xfc\xff\x84O=\xe6S\xbf\n\xe1ntuI\\\xa8\xa2\x03x\xea\xa7\xbd\xf7\xb0\x0di\xefG\xf8\x1d\x08o\xff\xf3\x00\xe9\xef\x1d\x1d\x80e\xc3(\xf7\xfa)\xb0\x95\xf8\xfb\xfb\xa8\xd5\xddJ\xfc\xc7\x83\xc0\x9dQP\xf6\xf5\x04\xb6\x0e\x1d\x829?\x80\x0f\x02\x99\x9f>\x04/\xb2ds\x10\xc9w\x86\xedDL\xf5f\x83\xdc\xc0\xb6^\xe5\\!\xefg:\x07\xdaxLG\xc9|B\xe5\x85\xe1l\xc1^\xe0[9cd\xb0\x8d\x83A\xe0{\xafO\xc7\xef?\x9c]\x9cy\xf7\x0e\xb0\x11\"g\x92\x92\x894\x84\xc2\xd2z\xbdp\xc5M\xc3P\x82\xeb\x00\x12\x0ci\x89z{\x7f\x8d\xb0\xc0\xa8\x902\xc4/\xf1\xe1\xf32 \x0e\xbc\x84\xfcy \xbf\xe3G\xc0(\xdf\xde\xbe\x14f2\xff\x1d\xfb\x0bl\xed\xcb\x97\xaa5\x1a=\xcd\xa8\xe2\x9d\x17hw\x10\xf4T\nb\x1a\xa4\x99\xb8\x8fP\x95d\xd0\xdd\xcdzq\xa1\x01u\x0bb/\xb5\x8d\x0e&\x1d\xa7GN\x06\xd3\xac\x07\x8btj\xe4$\x8a\x08\xcdy\x8ca\xe8F\xf1%\x0c\xe9\x13\xc1\x0en\xaf\x07 \xad\x97\x1e\x19\x91\xef\xab\xc3hX\xffL\x86\x88:\x82\x08\x86T\xe4\xf8\xce\xd0\xdf\xdb#\xa0\x9f\x8d\xbc\xf1x\x92fl\xe7/\xf98\x9fG\x19\x9b\x8e\xc7\xe2\xa8\xf7]e\x87\xf0\xb7\xaf\xad\x1b\xcf\x01\xd2t$r8\xfa\xa9\xd0\x9c\xfe\xedk\xd02\x1f\x17=\xbd\x9fF\x91%\xeb%\xcb\xb8\xf04\x84-\x7f\x00\xdf\x03E\x01\x94\xf7\xb4\xaa\xb7\xeb\xa8w\x9b\xc5\x85\xaa\xb3\xef\xa8\xa3\x14#\xb5\x82o\xba\xd8\xa9Z.\xb7\xef\xfe\xe3\xc0\xdf\xd2\xb5\xd4\xfc\xddA\xe0\xcbh\xbf\xe0\x89?\xbc\xa6$\x1a\xa8g\x1e\x17p\x08\xd2\xa2\xaeT\xca\x8f\xe3\xfa\xcdG\xe8>U\xf8\x98\x98L}/\xda\xb3!Rj\xe0\xc71I\xc5\x12xyXQ\xc6#b\x15%L]<\xe34M\x98\x9d\xe0\x15\x86\x18\xcc\x0d2\x91\x7f\xa0\x9a\xdb\xf6a\x19V\x8f:Feg\x04\xaf,\xfb\x19\xd4\xfb\xd1\x10z\xc3cr0\xa0\x03R=\xde\xbb\xefv++4\x05\xd3\x8fC\x88\xc4y(\x17>\xf5\x0bS&V\x0f\x1e\x05~\xe2(\x15A\xa6]\xd1\xd2\xe4\x98rx\x01}\xe1\xd7\xfeR\xb8V28\x02\xcf+\x85\x00\xbeP1\xb6\xa4\x05/\xcc\x83\x00^\xc0\xe3\xc7\xbb\xcf\x0e\x90\xbd\x83\x97\xf0\xf8`o\xf0L4\xb4\x0d\x03\xe9\xa8\xc9iKd}\xcc+\x88\x06\x0e\xf6v\xb1\xf3\x887\xf0do\x7fO\xf6/\xeacG0\xc44H\xe2m\xbe\x88'\xcc\xcfC\xec\x04s\xd5D\xb0#\x9b\xd9\xe6\xe3\xdc\x91\x83z\xf1\x02\x06\xfd\x00\xb6\xe1\xe0\xf1\xe3\xbd\x83_v\xb7\x9b\xfa\x11\xa9\xab1\xb1G\x86-3\xe9\xbeT\xd5\x98\x1a\x9c\xb5\x0c\xf1a\x9e\xc6RWs@\xebj\x06\x96ng\"\xeb\x9b\x83\x94\xca\x9a'\xffT\xd6\x10\xcf?\x955\xfa\xf3Oe\x0d>\xffT\xd6\xfcSY\xf3Oe\xcd/\xa6\xacqjj\x06duw\x18\xd1\x03\xc7\xdd\xc9\xe3\xbe\x83o\xd3\xc2\xb3w\x12DQ\xfcL\xdb$\xa5\x0d\xf9\xca\xb7Q1\xef-\xa3\xcf6\xcf J\xe2\xa4\xc3 \xe9\x18\xb0d\xb4\x19\xf2\\}8\xe2b4l\x83\n\xc2\x19\xfb\xcc\x88\xc9\x0f\x1b\xac\x8f\x9e\xc8#4\xb2\x96\xc4\xb9\x9e1c%_\xbf\xceOK\xb9/,\xd27\xe9$Z0)\x1b\x95)Qpo\x9c\xcd\xbc^\xbeZ\xc4\x85\xef\x85\xde\x86\xec\xfb\xde\xde\xaf\xa2Dq\x04\xad\xdd\xa5\x95i\xc8o\xe5+6A\xfa}\x8f\x15\x95\xea\xb2H.hk\xca\x14\xcd\x13,\xc2CH\xfd\x16Q\x923?\nF\xf1e \x13\xef\xa4z\x92\xf3\xeeh-b\x17\x87J)h\xddR\n^v\xff\x89 \xab\\nL\x07/{`\xf2\xc4\x13Zs\xc2Y\xd9\x89\xca\xcdl\xb3\xb0\x93^\xce\x8a\xd7\xcb%\x9b\xc6Q\xc1l~u\xd2\x9b,X\x949j\xcc\xb1\xc6[a4\x7f2\x8f\x92\x84\x19~\x867X\xe3U\x9c\xaf\xa2bb\x98},m\xe5\xe55\x11\xca\xe7\xae\xed@CA\x1e\x0ea\x9b\x9fe6I\xe6'\xcf\xb5\x99:\x85\xce\x90\x01\x9a\xe1\xc5\xb5\x93\x9b\x95A\xd2x\x85\x10\n\x9f\xf0 \xa8\xbd1\xa6s\xd5\xcad\xdf\xc9\\ \xc2Q\xa5\xdeV5\"<\x96\xa7(D\xae\x1a\x9b\xac\xa5\xfd\x18]\n\xad\xed\xe09D\xd95n\xed\xbcR\xec&\xcf\x03\x95C\xa3,\x1d%\xdb\xdb\xe6I'\xf7\xcf\xf5h{{y\xd9\xb6\xd0\x02(\x7f\xe5\x0c&_\x87\x9b^\x92\xde\xb6\xb6\x86\xb5\x9c\x0d\xcd\xe1H(\x13|$\x93\xec\x16\xe6A\x8f\xd3\xbd\xdd\x10R\xfcc\xd0K\x93*\xb4\xf9\x95\x08T\x1f\xf9qo\x95\xe6\x85\xdc\x85Hk\x06\x18\xcfi\xd2\x8b\xa6\xd3\xd3\x1b\x96\x14o\xe2\xbc` C\x9aN.\x86\xd6\x00r{\x93^\xbc\xe4=\x9e\xa3\x17P\xceG\xd6<\xb5\x89>\x06<@=/\x04\xefw\xf54\x07\xf6\x88|ON\xc8C\xaejK\x8c\x1c]\xa5\xd2$c\xd1\xf4\x0e\x03\xee\x89p|(]/|O\xf8&a\xaa\x15\xf7\x88\xf2^\xb4Z\xb1d\x8a\xf9\xe8}\xed\xab\xa0g\xb7\xdc\x86\xc3y/c\xcb\xf4\x86\x89\xc6\x90g\x0e\xcb}\xea\xf4\x1c\x80\xa6\xcc\x959+.\xe2%K\xd7\x85\x86\x11\x9c\xe9\xa8\xbe\x0f\xeaF\xb3\xd6\xf7V\xa4Y\xa4\xd5C\x98VM\xe0_]\xb9\x15\xf7`\x1b\x9doh:\x8a\xeaF\x9a\x1f\xbf\x19\x02k'\x9b]\x1cv\xdc]\x13\"\x1f\xc8\xae\xdb:n\x81\xde\xa6\xec\xce\x13:D\xff\xe0I{V3G\x9e\x8f\x0cie\xea\x17vj8\x91\x90\xa8-\xb5q\xdc\x9b\xb9\xb2\xfe\xfa\xfd\x10\x92^\xc6\xf2tq\xc3\x02\x8cl\x8f\xa9\xfc\x96\xb1\x96\xdfjC\xc0X\x10\x10\x80yF+\x01\x91\x0dDg\x86v&\x90\xe2\x00\xe9|\xf3\x98\xc7\x8f\xcb\xc9Z\xdaT\x91wF\xb2x[[\x9c\xc9\xf3>\xb0\xeb\xd3\xcf+\xa4\x8di-%\xe6\x86s\xb6\xf8<\x95\xb0\x81\x9c\xf3\xe3{\xe1\x82ZN?\xed\xc9\xab7\x11\x9aA^\\\x89w\x9cK\xb10>\"\xc2\"F\xd2A\xc0O\xf0\x161\xeb\x9d\xa3C(\x17ac\xb7\x05\x00\x88l\x9e\xb6\nA&\x8c\xf1B\x88\xee\x0d\xc4g\xae\xdb\x84Zf\x97Nr\xa9\xa6\xeb\xc9\xea\xc9\xc57\x1a\xd1\xee\x9eC\xa69\xd8Cyc\x12\x15\xbe'\xf8)O0\x1dB\xc2\xab\x875\x9e\xd5\xeez5\xbe\xf4]\xb4d\xbf\x8e\x9c\xbdk\"\xa2\xdc\x934~Z\xe6\x0fR\x9aylj\xce\x854c\xdd\x9eKaf\xcf\x14Z\x16.@\xbc\x92\x0e\xc8\xba\xe4&\xe0&lS\x8e`\x01- peF$\xcc\x98'\xae\xf9\"\xbf\x90\xda\xb7\xd2\xccL|`\x1eH_\xad\xaedN\xa5\x92\xf4\xa6\xfeV\xd6\x9bii\xfdB`\xa3\xe2\xb2m\xc5\xcc\xe5Jp\xa7\x96\xb1C\x1el;\xa8D\xae\xf8\xc9\xa5\xe0\x8a-~\xa6\x13R\xb9Y\x94\xd2\xdd3\xf1\x1f\xef\x99\x18Ty\xeb\xd4\xfdr\xbat\xd9v\xed\xf4\xec\x80\xde\xa4O\xcc\xf7\xb1c3\x08\xf4\xb6\xac=\xe4\xbd\x93\x95tGS\x94Ey\x1e_;\xd4Q[\xb8\xb5[L\xaa\x944KE\xb4-\x1c\xef9\x92\x9c\xdf-\xaf\xd2\x05\x15[\x06\xb9\xe9\xe8j2e\xb3\xeby\xfc\x97O\x8be\x92\xae\xfe+\xcb\x0b\x8f<)e:\xd1'!dJ\xbf\xe4\x05\xbdY\x9a\x9dF\xad\xd1\x1a\nq\x86\x18\x0e\xadA(,\xc4r\xe1l\x1b\xf0\x0e\xca\xf3I\xdc\x95\x89\xa2\"\x08d\x98L\x0f\x93\xeeVn\x16_\xeb\xcc~\x9b\xd7\\\x84{\x9e\xc3\xdc\x94rC\xa49\x83PFK\x9f\x85\xa8!\x89{\xb3\xe7\x90\xc3KX<\xb7\xf9\xd2\xb2\xe5\x95\x90=\xd7\x9ap\xbc\xe0\xc2q(\x14!\\\xfe\xf3\xa7\xe510\xf1\xa7B\x98\xf1\xa7A\x88\x8a\x90y9\x86\xa5H\xc2u\x03/a\xf9<\x00I&\xa6!\xead\xe6\xa3eiQ\x95\x8cV\xa8S\x1f\xad\x1c2\xb8\x96a\x0d\x86\xdd\xb2J\xb5\xed\x9eA\x9f\xe6\xd7\x06\xa6nI\xec\x9e\xdd\x03j\xf7\xf8\xbc\xe0\x80s\x8f\xfe`\xf7 \xa8\xd9{<\xc5\xd7\x8f\xf7\x1e\x93)\x1a\xd6\xd4\x98\xa1t\xd7\xcc\xd2U\xae\xb9\xfdV)\xd4\x95_o\xc6f\xb9\xcc\xe2\xc7\x7f\n\xafh\x9c\x19\xea\xef5Jc\xf7\x9d\xff\x1d\xfb^\xd4\xdd\xa8\xd7\x9aof\x9c\x7f`\xd1\xa4\xd0\xf3\x10\xf2\xed\xa2W\xc9e>\xfd6\x9e\xb1\x8c\x85e\xe4\x82wg\x89\xc7\xbc\xbe[\x87e\xca\xf8\xa7\x8f\xbd\xa0>\xbf\x9e\x91\xd3\xbf\xbc\xaf\x0ceD\x05\xa2\xae\xcab\xafR\xb7\x85\xe0\xa9)\xd4u\x06\xfa$gi6a\x1f\xed\x00\x01\xe4j\x19\x1d\xfeX}\xab\x04x\xd6qp,\x04O\xeb\xba>\xbeE-\xab\xf1Z\xcfj\x9c\xd7\xf3#\xb3[X\xd4^\x1a)\x97s.\xd3\xe5z\x03ZkA\xfd\xcb8\x7f\xbf\xce\x98\x85\x15[\xfd&\x95AY\xd3r\xe5\xe2\x8di\xa5\xb9\x86\xa8p_\x82\x92\xf8\xcf\x02\x9b\xbc\x18\x0bc\xf5l\xfe\x90\xae\xafa\x861\x0c\xba\xfe\x07\x91\xcb\x13q\xb5k\x1fjk\x10\xf5+X;nb\xee\xbf\x04\n\xe8z\xc2\xb0\x07n\x9aT'\n^\x84\xef.\xf1\x17\xdf\xb8\xf5_\xbe\x97q\xdc\xed1q\xaf\xe4\xa1\xc9\xf0A\x7f\xd0\xdf\xfb\xc5F\x9a\xf8\x8f\xf7\xefm\x9d\x86\xe2\xd6\xd6`C\xd6\x98\x1eP\xed\x82\xf0\xfc\xf4\xe4\xc3\xe9\xc5\xf8\xd5\xd9\xf8\xdd\xd9\xc5\xf8\xfd\xf1\xf9\xf9\xf8\xe2\xa7\xd7\xe7\xe3\xb3\x0f\xe3?\x9d}\x1c\xff\xfc\xfa\xcd\x9b\xf1\x0f\xa7\xe3\x1f_\x7f8}\xf5\x0d\xees\x0f\xe65O\xc1u\xd7\x12\x0f\xa51\xe0\x01\xed\x92\xf7\xd82\xd0\x92v^\x074\xc3\xbd\xfb\xe4q\xdd^\xf4\xc9\xbe\xfe\xbb\x87)\x13=\x91k\xfe\xbcH3\xe65\x98}\xaa\x05\xed]i\xb3\n\xabV\xd2\xe5U\x9c\xb0\x0fl\xba\x9e\xa0\xd7gkKi\xcd\xdb\xa0j\xe9*N\xa6\"\x8c\xd0 \x1fY\xda\xa9\xb1\xd8\xd1X\xb4Z-\xee\xde\xc6\xd3\xe9\x82\xddF\x9d&\x189Z\x9ap2\x9fwia\xbd\xb1\x1b\x85\xe3 Ps\xe8\xd0g\\\x1bs\xd1\xd3o\xcb\x80\xc9|\xb0V\xf46\x8e\x8aFJO\x92.a\xf4\xb3\xda\xad/\xe7\xb1\x11\xf9\xc4\xb5\x98(38m-\x15\xf1\x16\xff\x88:\x9f0\xa5/\xc5BED*\xe5\xd3\xcf+\x8c\xf9\x00\xc5\x9c\x01K\xe6Q2a\x19\x14)\\1\x88\xca\xe9\xf6\xa8\xe8\x8ajq}\x16\x08C\xd9Z\x0d[+A\x8e\xa9h\x1bS&\xb0\xbf}H72\x99/\xa1g\xc6{j\xfb\xf5\x84pM\xe1\xef\xf1\x9e\xda~\xbd\x92\xa7W\xad\xa0D\x88)\xa9\x8e\x9c\xe1\xda\x8a\x1c(\xe2\xfa[X\xc6\x06&\xb0\xe8F\xe7MVS\x8bNM\xdc\xd0L\x8csAX\xd3\x82,\xd4\xe5]\xebj\x80v}M\xa5O\x95s\x98\xfaA\x08\xb32\x9a\x8dU\x0d\xb4\xa94\xda(\x8a\xd4\xdb\x0d\x15@\xea,\xb6\x06!\xef\xd5\x1e\x91\xfe(\xd9}&\xb23\x9f\xd9W\x14\xe63C\xfd\xc4\x84\xf9I\x08\x03\xda\x8a\x0b\xac]A\xbfu\xad\xe4\xd2\xbd\x92[Y/B;\x02k\xe9d\xf08X\xae\xf3\x82/\x19\xc6\xe2\x05!x\xe5=\xf8\x983\x98\xac\xf3\"]\xc2\xb2\xa4\xe8\xa8e\x88\xf2\xbbd\x02\x91\xf8\x9c\\^#-:\xeb\xa1l`\x0d\xe1\xdf\xca!Dw\x98\xb2}\x1e\xdd0\x88\x12(\x83\x1d\x83\x87jiPvG=\xf8\x89W\xb9K\xd7\xb0\x8c\xf3|\xc5\x16\x0b6\x85\x08PD\x89\x92\xe2\xe8\xdf\x1c\xa3Y\x11\x00P\xa7g\xd9\xfdT\x1a\x804\xce\xcd\x1dFs%E\x1bNSr\x7fA\x9a\xc2~\x85Y\x9cD\x8bEc\x1b\x03\xfb3\x9b|\xe8\xf6\x12\x9c\\\xcd\xc4\xd9 \x93\xa6k\x89\xe1\xb7\xb7]\xc8\x7f#3\xb6\x17\xa3\xc4aD\x92\xb6^\x80\x82\xa6\x92\xfb\xce]m\xe9\x0c\xc8\x15\xf7^\xbf{}Q\xff\x94V\"\xadI\xc3L\xb5hd\xec\xf1|}\x95O\xb2\xf8\x8a\x91\x11\x96\xafKq\x87\n\xf5\"\xe4'\x89$m\x92\x1f\xdc\x9bp\xf2\x93,a\x9f\x8b\x0f]O3\xf5H\x1d\x0f\x05Y\xf58!\xac\x1e*Th})BX\x8f\xd2^\xd4j?sS\xf9)\x11I\xacu+Fz\xb8\xdaJ\xb5C\x1a\x14\xb4 5\x91\x0e\xeb\x8b\xbb\x15\xa3\xe0\x9d^\xc9t\x89\x12\xd8\x8a\xec!\xac\x9d=\x96\xe4\xb6\xddJ\x9f\x95\xf6\xd4\xe2/\x7fn\x9e\xeb\xfaC\x93~@)\xa2\xe1pQ\xa2Ma9\xc3\xeaO\xa3\x0d\x82z\xd6\x89\x06\x7f;l\x90z\xba\x9cQ\xf8&\xe8\x843P\x0d\xcf\xf2&\x01\x81|\xcc\xc2\xc6\xf2\x05\x11)\x87\x0b]\xb4K\xecc\xeb\x0e0&Q\x91\xef\x94!x\xff\xfe\xef\x9c\xb9\xfc\xfc\x88\xff\xac\x07\x93\xff\x06\x89Z\x17\xf1\x1d~i\xd6\x9d\x8d\x14E\x1f\x9bWB\\\x1a(o\xc7\x84\xd8|I\x84\xc2Qfk.\x9f\x87\x9cp\xfa\xad\xd7\x10\x1eh\xa5Mo\xad\x8c\x1f;\xb9a\xb3X\xaf!\x92\xb9\xe2\xb5\x81\xe8\xa6v\xc1\x1c5\xea4\x90{\x89\x91{\x01\xcc\xd7\x8a\x7fm\xa1hS*\xdal^\xbc\xc0\x1b\x93\xc8b\xcbxs\xa8$\xe6\x1cIQ5\xd1\xb7\x9bH\x90\x1d\x17\x8e\x07a\xcd:\xda\xb3mY\xc8\xa3\xca-\xd7%\xba+2\xbe\x91\xf0I\x02^uV\xa1\xf7\x83 \xda\xe3~\xd0\x8bzB\xa3e\x82~cm\xd5\xa6\xf5\x9dkm.u\xc9\xcc0\xf2.\xacP\x97\xc7x_\xa6q9exIq\x19\xa8Y\x83^\xda\x8b/xQ\xc5\x18\x95\x08\xd0|\xda\xd0\xac\x8d\xdd\xf8\x80n\xbc\x18\xf5/I\x04)zBz\xf5k\xb0l\x18AWB\xca\xfc\xa2\x87j\x18\xc9\x80\x87\x15T\x88\x13\xc88\xec\x1fDq\xf8`J\xbc\x10\n\x15\x00\xb9\x8b\xf2S\\\x10\xd5(\xb7&}\xc0\x11xq\x12\x17q\xb4\x107P\n,*\xabr\x91\x82\xae\x9b\x83!\xa6\x1c\xbf\x89\xd3u.\xd3)gl\xc2\xe2\x1b6\x85\xab;]\xffP\x8b\xec\xaakM\xcb\xd1w\x81e\xb5g\x9f8\x9cQ-\xdb{y\xb1i\x1e\x19\xca\x84\x9frG\x1d\xc0#\xd3\x98]\xb8Q\x1cA=b\x02\xe5\x90\x86r\x0d\x1cA^\x1e\x07e\xc5j\xf5)}5GJ\x8a\xba\x13y\x06\n\x97Q \xaf\x1f\xfb5\xcb\x95\x82KXh\xc3kW\x8d\xf4\xaa\x0bL\xee!\xe8y\xc0\x17\xd6\xa3i~A4\xa6\x08z_\x18\x9fp\x1c\xe3@,\xf8\xaf\x9d5\xc7\xaa\x9d>G\x96d\xb3\xadS\xed{\xa7\xbd\x9c\x96\x0f\xa8\x84\x0e\x9e>\xe2\x08\x92\xb6t\x87\xa5G\x1f\xbe\xae\x0f^_\x0cm\x80Ay\xb6%\xfe\x9e2\xf0\xde\xdc\xfc\xb6\xcd\xbcag l\xbf\xe5\xa9\x8b\xb6\xf4}\x18j\xb1\x01\xd2\x92\xb0g\xc1s\xd8\xde\xe64={\x1e@*\xe8y\xe1\xb3Qr\x89\xcaT\x87\x1dh\xba\x19\xd4\xb5\x83\xf1\xc9A\xe0{E\xfaq\xb5b\xd9I\x943\x97\x15'}Hv\x02\x0eqA\xaf\x06\xb0C\xd8\x1c\x8bh\x97\x94\xaf\x7f\x81>_\"%\xc6!\xec\x14\xf0\x12R \xcb\x14\xb6\xd1h\x0b]\x81\x12Y\x90r|\x0c\xca\x8f\x12\xd8>\x844\x10\xe0\xe6\x1f'\xf2\xe3\x04v\xf8\xef\x97/1v7\xff\xe3\xd0\xcczU.h\\.U\x8aK\x95\xc1\x0bH\x9f\x07\x10\x8f2\xb4\xa5\x19e|$\xf4a\x17\xb7\xac\x92\xb9D|.\xc2\xc2\xd5\xf7F\x7f\xfe\xf3z\xb7\xdf\x9f\xfe\xf9\xcf\xeb\xe9\xd3~\x7f\x87\xff?\x9b\xcd\xfe\xfc\xe7u\x7fO\xfc\xec\xef\x1d\xf0\x9f3\xb6\x8b?glw\x86\xdfL\xf1\xe7n\x7f&J\xfbL\xfc7\xbb\xdc\xdc`W\xce#\xe9\x15,/\xdaM\xcf\xbabG\x08\x19\x85 \xa9\x03A\xe2\x86\xbdD\xac\x1a\xdee\xc6\x12\x03\xf8\nmo\xa7\x97\xb8v)\xbc\x80\xf8y h\x9e\xcfw\xd7(\xbdD\x0f0\xc76\xdb\x90\xb8U\xdbl\xf0\x9420\xae\x84\xf1J\xcdA\xc6\xd7\x8fI\"\xe3\xd6\xb3\xa0\xe1\x9a4\x04)\x9c\xf6\"\x05\xad\"H\x89[\x83\xa4M\x84US-\x99,ZQ-v\xde\x11(\xdeLXldhx5\xea\x13\xa6\xcf\xa0\xd6[\x04*\xb7\xc5{<\x0f\xb9\xec\xe5\xa7\xd5A\x17c\x1eHs\" \xc7)r`\xd7\x07`\xd7,q]e\x00\x88{9o\x14/\xb4\xbe|A'\xc1\xdaG_i\x94)\xbfO\xd8\xad\x1f\xf7N\xf0\x17\x97\xe38\x0bo\xe0\x13\x7fT\x15\xcc\x8e\xa0\xef\x9ax3\x94\xb3ng\x05\xfbd\x19\xf5\xc6\xba\x04}\x9c\xdf%\x13%,\x9b\x82tM\xd6vUZ\xeb\x95~\xcf\x12\x116\xc0U;\xd7k\xbf\xcf\xd2\xcfw\x97\x8e\xab\xf7\x16\xf9\x18\xad\xff\xdb\xc4\xe1\xcc\xe5F\x81\\\x0c:\x95\xe2_\xeb\xf2\xaf\xb8\xfc\xab\xcd\xc8\x86\xa2\xdd\xb6\xd6\xa1\xc52\xb8y\x92\xa5i\x17\xb5\x01\xdd\xeax\x0d\x11m\xff'\xfe\xb4d\x86jmY\xf8\x8fm\xd2\xecWj\x11\xf4\xd4\x10\x1b\xa2\xfa\xa0\x1f\xf8\x89\x7f\xb0\xff$\xd8\x88{ih\xd0\xdc%b\xf3\xec?i92\xcbKo\x19\xfa\xc8q\x80\nv\x15\xad\x0c\x95.\x06\x8a\x92h\xab\xa2-\xe53\xb4\x95\xfa\x89\xf0kV\xf4\x1c#\x02&h\xae\xaa\xf7\xc7x\x97m\xa7r\xc3\xacim\xdc\xee3\xda0\xe4\xc0\xca2\x14\xa1\xb1n\xed\x15\xa7\x07\xbbm\xd8\xae\xd8\x80<\x84E\x08\x13\x8a\x19@g\x02\xf8\x9e\x0c \xaf1\x8cv\xa9\xc8\xa8Dq\x07x\x1f\xc6\x019E \xfb3@\x1f\xdd\x97\xb0j&%\xc2\x8f\x9a\x9f0\x94nm\xce[\x11\xc5\x9a\xe85\xc7%\xb6\xdb\xbaq\xf08Kq\x87f\xbd\xbf\x96`\xe0\x12\x17?\xb63B\xf4\x04\xc5\xf9\xa0\xbb\xb8\xa0N\"!k!dE\xce\xfb\xdc\xc0\x0bX=w\x1d\xe5\x98\xa7\x96\x8c\xef\x02\xd2)\xba\x18\xdd\x10we\x1c\x00y\x80M\x8c\xf9\ns)\xd9\xbf\n\xe1\x0eC\x1d\x15\x88\xa1\x13\xcc\xca\xe8\x8b8F7\"\x9d\x13\x7fK\xb7\xa6\x99r\x8c]*\x1f^o\x1c`\xea\x9a8Y;\x92\x0c.\x0d\xcb:\xfd\xb9\xcaX\xf4\xc9*\xb1I!:\xa77\x8db\x0b\xa5\xf1V]V\xed\x93\xd8\xbf\xc6j\x9cA\xbd\x13\x9a\x1a\xbe\xfb\x17\xd2\xcdTl\x8bIP\xe1\xd2\xb50\x06p&\xbdl\xea\xb1 \n\xe0\x84\x04\x90\xd0\xf8*\xe2\xa7\xc4\x18+\x86/\xd0\x15\xee\xa3\x85\\\xdar\xe0\x8e\xe1|\xeb\x82\x90\x87\xc8\xa4'<\xcaQCZ\xfe(\xeaN\xe9\xf8\xd7\xbd\x84\x95o\x92\xf35\xc9\x9e\xc4\xac\x9a\x98\xefT\xcc\x97\x84\xa9e>N2\xbf\xf7$\xe8}\x8c\x93\xe2)\x8a\xb1\x0fr^\xee>\xa3B\x80r\xb1\x87\xbe\xc79\xd8\xbf\xaf\xe8)\xe2\xa5~\x93/\xddSz\xac\xbb\xedcr\xeb2b\xa1\xa5q(g\xf8l\x8e0\xf4_\xe6\xc7!$\x1dp\xa4D8x\xfc8\xf03\xc7\xd6M7\xebc\xd0\xa7\xa3RqN\xcd\xbf\n!'&v\x0d\x870\xf2X\x96\xa5\x99\x17\x827Y\x08\x7f5o\xca\xf2\"K\xef0\xb0N\xb4\x16\xef2\x96\xaf\x97\xcc\xbbt\xb9\x08\xdd9\x11&\x06y\x1b\xc3a\x88\xde\xe0ROf\xce\x154\x1aU\xe8F\x86\xb1]\x0f\xbd\xc9\xc5\xed\xd3\xdbt\xca\x9b\xdc\xdab\xda\x0b\x19Z\xd9\xb7\xeb\x99o\xbe|\xc1O3\xb9\x7f\xce\xca\x12\xc7\x1d\xa40r\x98\xc7\xd7\xf3\x9f\xa3\x82eo\xa3\xec\x93\xbd& id\xd5\xeeO\xed\x1f\xac\x89\xd1\x1d\xc1\xe0\x00\x8608\xd8{\xba\xef\x80Bm(\xfc,\xe0S\x12'\xa42\xa5\x10\xb0\x88\xaa\x82(\x90\xd9c\xd6!\xdd\x08\xc6\xfb\x9d-\xd24\xf3\xedr\x15\x96@\x08\x8a \\\xeeo\xca\x84\xed\x18\xe4R\xcb\xd8\x1e\x8b<\xe9\x9c\x8f\xd5_\x9d\xa4k\xf4\xa5W\xf5f\x8b\xf4V\xa4\x1a\xd7j\xb2D\xa4\xc8/\xf3\xb5\xb3d*\xe8W\xed-\x87\xb2\xf8\xb6|\x85.>\xc2\x9d\x05\x7f'\x8cM\x15\x91\xac5(Z\xa3\x8a\xd4\xda\x89 \x8aF\xfbbC\x9cO\xe6l\xba^\xd4G#\xf7\x8f\xf9\x12-\xe9N\x93I*\x87\xca\xacw\\\xae^\x17\xb3\xa7*\xe3|t\x1b\xc5\xc5\xab,\x8a\x13\x0dNr\xaeo\xd3\x8c\xd5\xdb\x9f\xa4S\x96\x99\xe0+{\x13oY\xf5\x8a\xa3\xc4\x1c/\xb2\xe6\x92\x82<\x0bzBE\xf1J\xb4\x15\xd8M\xb3[\x98\xfbU#\x81\xdd\x8fVX\xc3W\x97\xe7\xd7\x95\xdb\xf3\xcb\xa4\x1c[\x88\x8b:e\xb8\xaa8\x08>\xb4+\xd2\x95\x0dG8\xce\x8c\x03\x92\xd7\x17DK\x04\xa9\xa8\xad\xb8\n\xf1 \x14\"4\x03\xcc\xebV4\x06\xdb/w|\x10\xba\xd8f\x89\x1b\xda\x87\xea\xcdaU\x1a`\x14\nW\xdcx\x07 \xc7\xd5m\\\x16B\xeab\xe9%\x17\xc1\x0c\x88\xd8`\xabL\xcd\xe1\x08\xfc\xc8\xd8c\x9d\xf8\x04\xd4\x8d\x8b=\xac\xd6\xc9\xee\xa7\xaa(\xf1\xcc\xd5\x1ah\x9c{Y\x99\xb7\xde\xe4b\"\x94\x01\x8a*!\xd4%\xddRy\xd3\xc2*\xb1\xd06o\xb8N}aX\xb1\x91d'\xf6\xed\n\xa0\xb9xI\xb9\xfa!\x9c\x93\x97\xf7\x1ct\x11\x86.\xf2\x91f#\xbew\x82+B\x81\x9es&\xa2\xe4,zq.\xd8'?\x13\xce\x07\xfa\xb6A\xcd%e\xbb\nztn\xa5*1NKa\xa8W\xf7Mz\x9d\xdcD\x8bx\nI\x9a\xec\x88f\x1f\xc9\xc3a2_'\x9f<39\x9dz\xf0\xb8wLDnk\x02n\x11F\xb0\n!F\xe1\x93\x13p\xbf\xe4bb\xcc\xc7c\x0cY\x1a\x9c\x96\xf1\x97\xfb\x1c\xa3]\xf37?&\x93\xc5qi\x16\xb3\x0bi6\xc7\x1c6\xcdv\xde\xc6\xdc\x16\xbdY\x96.i\xdc\xc0 f\xfc\x94\xd6\x8f<{\xbe\x9aC\x9e\xe0({\xeb$\x9f\xc7\xb3\xc2\x0f \x9a\x15,\x03\x96L\x81\xdd`\xf0\x8f\x00s80\xb48\x10!\xfa\x10X\x02U\xbb\xb4\x8d[F5|z\xf6\xa3h\xd2\"\x0eQyd`nK\x0em\x8c\x0bXn\xda\xdb,\x96\x97{&\xb4\xa5\x8e\xaeJ\xf5\xa5\x8fw\xc0{\xfbT\xed\x9bz\x99\x0ci\x8c\xe9\x9ej\x03\xa2\xb0\xcfT,\xb6\xad\xd5\x16\x93`\xe2$\x84\xd5\xb9 \xdc$r\xc0/L\xe6\xb0b\xba\x98\x93\x8e|\xf5\xcd\xf8\xe3\x0e\x1a\x7f\xab\xd1xj\xc0E\xc9E}\xff=\xd4\xddEp)\n\xc1\x16\x1d\xf1)\x88\xb5\x9eFE\xc4\x97\x1ac s\xa0\xf9}\xb1\xa6\x1d\x89\xa2@\xd2\x92\xa6*\xe4Kx\x1b\x14\xa5\xad\x01\xee\xfb\xef\x914\x06\xa1XT3\x10d\xed\x17\xed\x94q\xa5\x87q\xf2J\xc6\xeb\xdb\x93\x9f\xea\nc\x82\x7fP\x01\xad\xea\xaf+\xce\xcf^bB\n\xae\x8d\xc7\x89\x80\x8e\xee\xfd\xc6\xfe\xf9 \xdf\xee,\x13\x82\x06\xbf^\xc5\x88,\xd5\xdf\xf5\n\xe3u\xa2\xd7)\x7f\x19\xb5\xaa:\xad\x87\x99\x90\x06\x10;\xd6\x8b\x05G\x10+\xccw\xbdq^\xb7K\xc37\"EE\x06\xe4\xf29\xc9AVG\xf4\x04\xcfoC{Th1\xdb|\xa4kxld&7/r\x15eu\x86\x9b\xa1;\xa1 \xfb\xc2\xba\x07U\xac\x9e\xf4\n\xc3\xa0\xa9\xe3*\x1c\x1a\x126;\xfcH\x1d&r\xcf\xb5\x9e\xe4\x97/_\xc2\xa0\xf6k\xb7\xf6k\xbf\xf6\xebi\xfd\xbb\x83\x10\xd8\xf6v`:]\x83\xe0\xb6\x03T>\xbd\xa8q\x17\x0c\xe7\xab\xa0\xa9\xcf\xbc\xb04\x06\xfd\x10\xfa\x1dc\xdb\x9c\xd3PPW*\xed\xc2\x97\xdd;\x97\xf3-e\x05\xc7\xfa\xa9\xef\xf1\xd7\xea\x9d\x17V\x8b\x1eP\xdfH\x9d\x88\xe2\x04\xd2*\xf5\xc6 \xba\xa3\x0d\xe1\xa4f\xe6\x02\x0d\xf3<\xa1\xe7)\x87\x04j\x92\x9e\xc8\xb0\x80\x0c\x87\xfe\xee\xc2N\xea@\xf7\xf3\xc9}\x82\xd4\xf4!\xc8\x82\x9b\x1a\x92~\xa8O\xf2X\x10\xd6\x8e\x13\xbb\xca!\x864\"\x01\x0bXV\x9c\x16\x17\x10\xce\x9c\xab\\\xeaK8x\x8bx\xf2\x89\x1ag\xa7>\xde\xb7\xaf\xb0\xc2v\xa1y\xa3zB|w(\xe6,eZ\x85\x90\xa8\xd9\x96\xe8\x18\x82\xb9d\xdarn6\xa5\x8bo%\x02\x88bS\xdf\xe3\xe3\xa9m\xeb\xe7\xf5AJ\x0b\x01\xa5|\xf2\x83\xe7\x86\xc0\xe3\x1a\xe1\xdb\xb6C\xc88z\x8eDWH\x1d-F\xa9{\xaf\xe3\x98\xdeu\x13I\xfaB\xfbU\xb9\xb0\x08\x07\x16\x0c7D\xe2\x15_$\x91\x93\xa4\x16^\x8a\xb8g\x92%;\xa6\xf4\xa0\xff\xd2\x15:\x99\xd8\x93\xcd\x1a\x02)Mx\xe2\xecd\x9a\x91$\x9f\xef\xc0\xb4\x95\x02\x0d\x01 \xa5\x0dM 1\x8a\x00\x8d\x9er\xfd\xa4r\x832\n(\xa9\x9b\xd0\xfeZ\x9al\x0d\xc3\x0f-\x99\xee\xcb\x17\xa5f\xa8n\xac\xe5\x8c\x87`\x89\xef\xa2\x9d\xb0\xfc$l\xd4\x01\xbd\x16\x97\xc40\x84s\x95q\x81\x13D\xd7<%\x81>T*\xa8@k-p0\xfe\xdf\x7f\xafzq\xb5\x8d|\xb2\x0c\xd0Q\x03\x8d\x13}\xa6\xbe\xc7\xebUJ\x82\x10C|\x18Q\xae\x04\xe4\xaa\x93\xc6\x96\x97q\xfcS\xe5\xf6\x00\x0b\x96\xe7P\xcc\xa3\x04ny\x8de\x94}\xf2\xc4\xb8P\xb9\xaa\xc0\x86\xcd*\xd1\xeeH\xad\x05\xff\x91\xe2\x95\x19\xde!\xa4b\xe1\x91\xbf\x93R\xf94\xc5\x01{A\xa8}_S\xa9HM\x91\x05@J\xa3T\xd38\x9aJ\xb5@or\x10\x1a\x82\xb0X\xc1\x04WP\xae\x8aX\xdaL\x1e\xf1}8*\x05\xbc\xa1<\"\x8f\x1cz-\xfe\x7f?\xd0u\x7f;\xa8\xec$gQ\x02\xd01\xa3\xa4\xdaJ\x9a\xc2C\xe2\x8f\x1a*\xea\xc6\xcbk\x94\xda]\x14?\xb0\xea\xa7\x9b\xa1 \x1ew\"(Z\xc3\xc4\x85\xa6\x80x\x00q\x8e\x81s\xe3\xe5JdH`6\x1d6n b\xcc2\xd2\xca\x8c\x96\x82\xd6\xf7B\xb8#\x8b\xa7Y\x14'^\x083\xb2T\xed\xcf%Y*g\x17\xc2\"\x109S\x8d\x8f\x13N\xaa'\x0deWd\x99\xa467AX\xc6\xbd\xde\x8au-!^\xeb\x8fo\xb3\xb8\xa8]\xbcn\x99/\x91\x08\x96\x9f\xcc\xa88\xb9_\x1b\xd6w\xe2\xbc\x8a\xc6\xb5E\xceP\x18\xeeM;\xc5\xb2\x8e\xeb\x06#\x1a\xef\x8b\x04\xf2\x8c\xab\x8cQ9^\\X\x17\"\xea!|\xeb\xc9X\xc6\x02\xc6\xd5.\xa0A\xac\xb20Pes 24\x00\xd4\xb2!8O\x05\xc4$1\xc1P\xb6\x14*j\xc5Jk\x1c\x8e\xbeBt\x91\xd1@k\xe4\x12\x1d&%qW\xa1\x0ej\x15^\xc2\x80W\xda\x11\xcd\xbe\xf3+\xfa/x\xcc\xad\x95b\xa2f\xd1\"g\x80\xddB\xc6\xf2U\x9a\xe4,\x04ek\x9e\x98\x17\xb0\xb5%n(\xdd\xde\x96\x93\xeb\x8bl\xca\xbc\xbdMw\xe3\xb2\x05\x88\x8aT\x15A\x08W~+5\x13\x08'\x10L\xbc\x17\xe7\x82\xc1\x98\x10\x11!\x9a\x06y\xed\xdcV-\x84\xf9\x8a\xa4 \xee\x8e\xee\x9ai\x93l\xbb\xf5\xb8\xd8\xb4\xdb\xab\xa6n\xab\xc3.\xe9\x89\xbf\xbb\x9d\xfdJ\x9e\x15;\xb1$\xfed7]o\x07\x00\xac`n\xba\xb1\xef*c+\x96L\x15P*/=\xb3D\xe4\x98iP\xa1\xf7\xc6h\xc2\x97\x0b\xe4\x91?F\xc5%\x1cA\xe4\xeb/\x02\xb4\xe3\xab~\xd7-\xb2j\x9f\x1e\xc2( k\xaf.\xb1\x8a\xf0\\J\x1c\x04OCeu`\x8b\x03\xa5\xce\x1f\x88w\x06W \x90^\x9e3|3\xc7%\xa1\x95w{\xc8\x8aU7r\x89\xbc\xcd\xf3\x03\xebR\xdf2\x82\xb1\x18\xf3&\x9d\xd5F*\x03\xf7\xdaWL\xd4\x90Jz\xc1\x1f\xc2\xc9%\xd6b9\xeb\x1c\xbdR\x11\xce\xe3\x9c\xfeh\xe0\xfe\x88U\xcc\xa5,\x87#lIXq(\x89Q\x96\xe1Qi8f\xd8^\x19\xfa)8\x90\xd6\xf0j\x11KvA\x18\x13%R\x92%p\x18\x9d\xfd\x9c\xfcB\xe9\xf0#\x0f\x0b'\xa8S\xa8\xcf\x9c\xde,\x9b\xce\x8an\xa5\x163\xb4\xff\x1cb\x0c\x15\n\xf1\xf6v\x00\xd9(\xbet\xc1\xa0Qak\x19\x0e\x01I\xa6nd\x9c\xc3w~Q\x9d\x9f\x0d:8D\x89H[l\xf9\x99\xca\xd9\x13\x850\x08\x0c@\xec\xa0\xe4cc\x93d~\x14\x08\xe5_\xa3\xfe\xa5\xb6{]\x0b\xdf\xb49S\xeb\xc6\xb5Ib\xcek_Vn\x10\xd2p\x83\xc60A\xd1\x05g\x12\x94\x82\x98\xdb\x00\xadT=(\x02C\xf0l*FRe\xb3\xa2\xdao\xc1\xe5.B=\xe0]Q]\x89\x9c\x11.G|\xe7R\xef\xc5\x85\x88\xa5\xc9\xc9\x1c\x0eM\x99\xa6\xec\xca4}\xcey\xa9<\xd4\x04\x853\xb9\xa6\x9b\x1c\xabM\xeb\x1fM\xcb\x93\x0e\x0e\x0d\xcc\x08\x0dU1\xdav\xb4\x98\x19\xde\xc8@\xfb\x9d\x00]\x9e\xb9\xc6QS\x9d2\xcc`\xf7[1\x15\xa4YJ\xdd\xd0D\x19\x1fY\xe6'\xf5\x1b\x88\xf7\xa4\x01\x12\xe0\xd9*\xd1<\x08(;CC\x0f\xc5\xb9\xdb6@U\xaaV\xbe\x8b\x04\x87\x0dr\xb2B\xc7\xd1\xb0E\x82\xb0\xe3>\xc2\x83\x1b\x99w\x87\x05e\xfd\x1c\xd1\x14s\xf2\xab\x0e\xd3\xbd\xcd\xa2\xd5F\xa7\xbb\xfb8\xef|\xf6g\x8e#\xa2<\x1eR\x8c\xc7\x83\x0c\xa5\x10\xa7[\xc5^NN\xa6\xbe\xc7g\xb3bS\x90\xc2}R\xf7\x97P\xba\xf8f\xc9\x99 \xcb\x87nnP\xf2\xec\xd6\xaf\x0f\\Z3p^c\x16\x9a\xa9\xb6\x8d\xbc\xa5&A\xf2\xd6%,HW4\xfe\xe8\x90P\xc2i\x0d\x14~Z\x9b\xa3\x90SS\x8e.[\x89\xe17R*\x95QS\xafY\xef\xa7B\xa4\xf7\xcd\x0f\xb0\x9e\xb2JQb?\xce/\x0d\x04\xd1U\xba\xf1R\x90\xa4\xb6l\x806\x93\xba\xcf\xd4<\xceG\xe9%\xd4c7kR\x81,\xf4UE\x0d\xa9\xdb\x1c\xee[\xd1K\xab\xcb8\xf3/B%3=\x85F\xc7\xf5\xfe\xca\xe1\xdc\x80\xfa\x1agt]^1\"\x83\x84Hp=\x8a/\xb5\x9d\xde\xbb\x8a\x93\xa9\xa4n\xbc\xa8\xc1#\xa7\xd0\xbd)\xdb!\xa3\xa1\xd0X\xde\x1f\x16\x81\xf2\xfe\xce\x14\xe7Z\x89\x11\xf6Di\xda\xd3\xc5\xddD\x91\x90\x9ao7\xe9z\xc2\x92\xf5\x92e\xbc.\x97\x13lj\xb3\x91k\nEak\x17G\xf6\x1c\xeb\xb3C\xbf\x8f\xf1,K\x97\xfcT\x86Cx\xfb]UV\xcf\xac\x10b\n\x1eG\x82\x05C0\xae\xe5j\xb0\xe3Mti\xa2-\x1b\x90\x88\x99Q\x16\x94\n\x83\x94<\xaa\x1b\xb4,_\xc9Q\xd7?\x97~,\x1d\x0c\x8f\xee}\xd7\x03m~D\xee\xd0\x02\xe23K;M\xbc\xaeZsn:\xf4\xb2\x8e\x84\x9f\xde\x11:\xe1\x94\xd6\x9b\x1b\xf4\x83p\xae\xb1\xb3%\xd3\x93*yA9Y\x08s\x9d{\xba6i\x17\xa7\xd6\xc0\xfcF\x08\xd4?\x96\xaf\xfd\xf2\x04 ;h\xb8\xb7\xe4=\xce\x11\xe7\xcb\xf5 &bv 5(\xf3e\x1dV8(\xbc~E\xd0\x92\xfa,\x87\x9cU\xfbYzd\xb5\x10\x93{\xc3}@\xf3w\x99\x1d~\xc1\xf2\xa1\x996\xb6`\x84u\xf8\x96\xe5\x1d\x90\xdf\x12#\xb0\xca\xcd)\xd4+\x08]Vs\x1b\xc6\xa2\x9aNU\x06\xf9\xe9\x9ca\x87\x0c\xc8\x96\x95\xa1g\xaa\xfbvDd\xafL>\xabG\xcf\xca\xd9B\x04\xb5\xe4\xff\x7f\xf9\x02\xb7q2Mom\xfa\x92\xd2\xe1\xef\x91\x93p93\xd1Y.\xa0\xc4\xb4xZ\xf9N\xf5\xc6h\x89\xfd#\xd2K\x07x\xf0\xcb^\xce\x8a\x8bx\xc9\xd2u\xd1Q\xccI\xd8-\xc4~*N\xb0\xeak\x8c\x87P1@!\xe0\x00d\xa1\xa5\xb7\xc0~_'\x05\xcbn\xa2\xc5=;V\x9f\xd3=\xabR\xa2k}d\xa8\x80\xa9}\xd0*\xffH.\x1f5\xb1\xbe\xd5|\\S\x97fl\x86\xb6\x91\xba\xec=3\xe6k|\x84\xed\xb6\x81\xa4\xb6\xc6\x02\"YX\xe2\x011g\x96d\xe9b\xd1EA\xa4C\xc7g\xbc\xb9\x05\x93?_OQ\xfc\xd0_\xd9\xf8\xc5{['D\x7f\x0f\xd2\x99i\x0e\xc7{\x1b#\x9c\x8f'E|#\xb4\xaf\x91\xfa\xf3[:\xa7/\x08\xe5M\xaaV\xd5\xaeW\xc0\xcbC\x99S\xc9l\x15\x0e\xa1\xda2~+/\xcaz\xe34Q\x93\x17\x97\x12\xe5o\xea\xb6\x87p\xb9\n1\xa4\xd5n\xa0\xf6\xdcr\xc9\xa6\xb1\x08\xce\xd2N\xc2\xea_Ta+*Rh\xd5\xe08X\xb2.za\xb9\xf36\x1c\x82\xf1\x0d9\x08\xbbNm\x18\xf5\xe2\xea|\xe8\x94\xe0lc\xe6\xd9\x11S-Eeb\x9c\xebq\x88\x9a\xf1SY$\xe1\x9d\x82\xe7\xc16\x17\x82q\xbeE\xfa&\xbd\x15 \xc9|\xa7\xfd7\x1a\x11ys\xf6\xd9\xa3\x8d{D9FBj\xa9\xb0\xd3\\#\xca'q\xdcX\xe3*N\xa2\xec\xae\xb9J\x94\xb3\x83\xfd\xe6\x91L\xf2\xdd\xb6\n;-5\x8a\xd9\xe0`\xc1\xda\xea\xec\xb4V\xca\xa2[G9h\x1e\xda\xfd{\xda\\\x95\x1e\xde\xf6\x16\xaf\xefnG6,\x8a\x931\x08\x95B.\xdc \xac\xab'\xb8\"\x81\xed\x0c\xbc\xba\x90\x92S\x11x\xd6r\x11T<\x7f\x1e\x94\x03s\xb6\x0c]p\x17:\xe1\xafz:\x0c\x12\xba\xa0!tBE\xe8\x88\x8e\xd0\x15%\xd5\xa3M\x03k\xb7\xcdd\x11\x15q2h\xed\xbdq\xf7\xaaG\xf5-\xdbl\xeb\xbaq\xbbC'\xd2\x02\x1dh\x9cz\x94\xba\xae\xc1\xe8\xa9mO\x82r\xb1h\x0e\xb2\xa5\x1eN\xb3}I\xb4\xeb\xf4ZD\xa3\xd0R\xd8\xea\x0f\xa5#\xa4n&\x1d\xd1{\xc5\xe5b\xed\x989<\x94\xd1\nE\x120\xdb+\xc4\xfb\x98|J\xd2\xdb\x04\x14\x15\x18\x82\x18\xb6[{\x88V{uJT\x05v(#\xd3Q,W\x07\xb4\xc7F\n\xf6\x99C)/\xdb\xe4\xac\xd3B\x80\x8e\x88\xd1\x08n#\xd7VR\x81\x1d\xcc\xe2\xc5\xe2M\x84z\xba\xf5\xfd{i\xc4j}^\x93\xda\xbcf\xa2\xc7\xbd\x8dzlDX]\x89),\xc0\x0ea\x15\"\xe7\xe4k\x1d\x9b\x92B\xed\x17\xd6[Dy\xf1\x8e\xa1\xa0\xadB#\xf2W\x17i\x81\x92\x92\xfe\xeed\x1e \x9f:\xdd\x1f\xb0\xa6\x0d,\xff,\xcf\xaa\xc8&\xf3\xa5\xa9\xc5\x8bC\x18\xec>QIb\xe0\xe5Kx\x0c\x87\x87p #B\xe3\x9b}\xfef\xb0\x0fG\xb0\xa7^\xed\xf1W{}8\x82}\xf5\xea\x80\xbf\xda\x85#\xd8\x19\xc0\x10vv\x1b\x87\xb4v\x1c\x9fJ\x1bXM\x7f\xa7\x0e\"[\xca\xdf\xc4\x05\x1a-Ov\x9f\xf2\xbd\xec\x0f\x9e\xed\xc2\xf7\x98\x14<\xd0\xac\x99\xeaK\xe1\xfd\xdf\xff\xd7\xff\xe9\xa0\xb2\xe8cTU\x97\x16\x83\x9ak\xd8\xa0\xe9h\xa5\x062p\x0dd\xd08\x10\xa0\x06\xb3k\x0c\x06\x7f\x9b\x1d\xee\xba:\xdc\x95\x1dv&\x9e\x85T\x88>\xa7\x90L\x93$\x12t\xb0\x1f\x1aX\xffB\xf36\xc3x^\xe8\x97YCy\\V}\x1f\xf0\x0f\x03c_\x94\x89\x0d\xeb\xfcVho*\x11\x17\xac\xa9\xa32\xc2\x99\xbe\x9f\xcb\x11\xefh!\xd0\x9a\xf7^N\xaa\x00\xf8z\x95\xd9T8\x8a\x07\xf0\xaf\xb0\xcb7P\xbfI)_\xa5n\xf4K\xf2\xee\xb6#i\x0e\x04\x80\xd7\x91\x93y\x94\x9d\xa4Sv\\\xf8\x9a\x0f\xac\x199Z=\x18b\x9f\x8b\xdd\x8f\x1f\xef>;\x004\xcc\x7fq\x08\x8f\x0f\xf6\x06\xcfj&_\x06.Y\x04m\xdfX\xb8Q_\xa4-\xd6 \xb2{i\xd6\x19Xu\x06\x97!$\x95\xa3\xfa\xce\xe0\xfeF\x1e\x14\xde\x9a3\x19\x103\xd9m\x9f \x1f\xa5c\xe1*4C\xa87\"\xd2\xc2M1\xeb7\xe2G\xda\x81$n?\xa8\x9c\xec\xf5\x8d\xd4r\x11\xe4&\xc7\x0d\xdc\xcb\xb6ksj\x10\xe8\xdb\x01\xc1\xc8\x95h\x84\xcc\x84\xdcbj\xfc\xd66\xdb#\x89T_z\x9b\x1c\xd5\xd6J\xb2\x1a\xd2\xf1\xcc71b\x0fv !\xb0bOY\xa4%j5\x1a\xf1\xa3\xd6\xf47\xed\x87 t\x0c\xbf\x86iI\x0b\xcd\x9a=\x1c\xaa\x91[\xe9\xa8\x11;\xcaA\xf7C\x04\xb0\x81\xa9\xc3\x16lX\xb9\x99\x1d\xc7\xf9\xd0\x0c\x8ci\x03\xf3\xd4\x06\x0b\xada\xf5WQ\x8f\xe7\x06\x87\x10\xd75\xd3\x8a\x91t\x0b\xff\x95\xcdmy\x06\x95\x82\xa1\x01~\\\xb6\xd0t|\xee\xb4\xff\xe3*\xef%\xfab\x96\xac\x99b\xe2\x85\x9c\xe3\xe8\x18t\x03%\xd5Mhs\xbb\xf5\xbd/\xec\x14\xd1\xe5\x9bD\xa3\x04c\x92V\x00\xd71\x89\xf3\xfc\x9c\x10$\x81\xe2/\xeao\xf0:I[\x91:\xd4\xa5\x88\xd0xK\xf5\xc0\xf8\x8f\x1cV\x1d\x9d\xebc\x92RL\xe3]\xc2\x8d\x99\x17\xbd\x81\x01\xae\xec\x93+\x8aAs\x0e\x19\xbc\xe0M(\xd2hW\xba\x91\xd9\x03\"\xbf\x18e\x97\x0e\xfe#E\x0d}\xd9L\x8a\x8e\xbcB_\xaf\xa1@\x8aG_\x08)\xdd\xc8\xce\x0e\x0e\x86\xaf\xde\xce\xae\x10\xb3\x9b\x06\x86\x8c\x956\xb2\xa0\xf3\x18v\x7f\xfd1\xc8\xb60\xf8\xce\xa1\xca\xd2Y\x1f\xd5\x1e=*\xd5y}\xfb\xb8M\x8bQOhly\x9b*\x96\x01\xfb\x8d\xaf\xad\xf3-\xb1\xa9\x8c\x1e\xa0\x01v\xc0O,\xcaMn\x0c\x9a\x05\xef\x0b\xcfijh\xf5|a\xf5\x0d\xa3\xa9\x17\x9a\xa9g};\xbe \x08\xa9C4h\xe4\x85\x1eT@\xa9C\xeb\xde\xc3\xd1\xc4\x98\xfa\xa45 \xc68\xa5\xeeu5\xa3\x9b\x1ei9Nn\xb4\\Pt\xa63LcS\x164\xa9\xd7\x11\x87\x11\x04\xb5\x84*\xf5\xb4 \xb1\x9d\x01\xabfu_Zc\x14Y\x94\xe4\xb34[\ns\x0c\xca3\x06C\x83_\xa8z\x1dl\xa7\xc0d\x9b\x8d^h\xa9*\xe9\x95\xb5\x9a]9*\xb1\x0d\x0f\x9c\xc9\x95[J\xdb\xca\xea\xf2\x983v\x80\xe068\x84\xae\xa2\xc9'\x15\xaaf\xb9^\x14\xf1j\xc1\xa0\x88\x97,w\x86\xbcW\x03\x99\xaf\x93O\xa5\x9bJ9\xba\xea\x8d\xcc\xfaW\x94W\x852ut\x88Y\xf8\xdc\x93M\xbb\xda\xc5\xf3'5Lw\xfc\xd4\x8al\xaeLd\xe1\x05\xa4D\xe0\x8d\xaa+\xdf,\xb6z\xfcZ\x99\x81Ri\x04\x19\x9bj\x88C\x99I\xeakN\xd7\x90`\x14\xf1.\\\xc5\x1c\xf4\x8d5*u3\xafT?/h\xfb%\xc2\x13\x83\xaa\xa6E\xf3h\xcc-RNT3y\xaa\xde\x1d\xea5\xdc\xa9Ff\x8bu>\xd7\x1a\x10\xbf\x0fU\x89\xb2\xbaG\x9b\xedU\xc6J_\xbd\xa8M1J\xf1S\xca\x1d\xa3\x8eg\xe4\xc8\xf4\xd1\x1c\xe9\xbfj\x99\xd3Hnl]\x12\xd7\xfa\xa2p.r-\xc9U\xb5\x7f\x9a\xe7\xb1v\xb1}\xb5\xab\x14\xc2\x88\xd4\xe6\x12j\x99GY\x15\xee\xde\x8a\x14\xa0\x0eL\xeb\xa2\xe3$Z,\xf86\xac\x16y\x9a&\x0cn\xe7,\x81\xdb2\xa9\xd2\xd6!\xf4\xcd\\\x86B\x8bi\x10\xcd\x1au\xdc\xb0\xbb\xbc\x88\x17\x8b\xdaV3\xbb,!C\xb8\x03TB[j\xa5V\x0b\xb5w~,\xd8\x95x\xc3\xe0\xee:\x816']\xa3 \xa5\xdfS\xbd}\xcb\x9d\xac\x1ay}0\xb5\xfd\xd6&)X\x00\xae\xbev\xc4\x98qvk\x8b\xb2t\x97ug\xb3\xa63\x13\x85\x13\xfd\x80\xe1P\xa9\x1dB\xac|\xa3]\xb7\x17!le\x06\"\xd1\xf2Q\xe7#\xc7\xcf\x8c5\xc2\xf3\xe5\x17:q\xbe:Al:\x174\xdf\xaa4\xc2\xb6t;)t\x88\xe25\x82\x02\xb8\x88\"\\cW0\x0c\x93\xc9\xc0\xf4-.\xcb\xd7\x1b\x0dU\x93\x15\x03\\\xf4\xea\xdc\x960!\xb6\xb7A\xdf \x89\x8e\xa9\x1at\xfe\xccd\x14\xed\xd6\x8c-\xd6l\x90Q\xf8\xc2fZ\x10Y\xe1Cn\x12w\x83\xb8\xdc\x8b\xd7\xd6\x98j3\xeb$G_\xcc#\xa9KEiv\x1aM\xe6\xf5\x8aq\x95\xdf~\x92\xb1\x1a.tK\xdf\xab\xf0*\x16D\x93\xa4\xaa\xd2\x8a\xb4\xb4\x1am\x03 \xe7\x069\x8eug\xb4iV\x10M]\x12\x99`\xbe\xc08\x80\xc0F\xc9\xa5U\xf9\xab/\xf3f\xa3\\`\xaeUX\xd34\xc2}\x97\x8b\x84g\x00\x7f\xfb\x86&5\x0c\xd0Sen\x92\xb7\x16\x89\x1d\xb9jq\xfe.z\xe7c\xfa_\xd4b\x14B\x7f\x817w\xdf\x7f/\xd5\x15;\x98\x9b!\xc5\xe8\xd6\xc32\xfc\n^ \xb5\xa7O\xef4\xc7\xba\x0b\xce\xc1\x93\xa7\x81\xcf\x87$\x916\xca\xf3\xf8:\x81!\x16=\xfbV\x9b\xc2\x10\xd2\x10\xb3\xc9\x85\xb0\x0eA\xf5h\xec\xadNv\xbd\xd6\x85\x05\x7f\xb4\xb8 Evg|E{g-B\x90Q\x00I'\xacI\x9a\xcc\xe2\xeb\xb5r\xc3\xea\xd3\xcc\x7f\xe4t\xd2js\xe2\xc2,\xd8C0\xcc\x80\xb5u\x85IT\xda\x8fU\xa7\x93\xb8\xf4Xhw\xb9\x99%Y7\x0f\xdd=\xec\xfa\x90\xab\x91\x88\xd0\x86$\x14\xc3\x8d\x13\xd4\xa35\x0cJ\xa6\xa5.\x0b\x1d!ez\x0d?\x13\xf9\xc1\x05K\x81\x9eZ\xd5*e\xfa\xad\n^\x17\xc9\xd4\xd2\x83\x83 \xc4\x8c\xa8\xa3\xcb\x10\xe2v\xaa\x1aR\x1ap\xce\xf9\xacG\xec\xb2d\xe6\xf9\x8fz\x15${\x05\xf6\xf3\x1c\xd8\xce\xce\xf3@\xb9\xb9z\x91\x07\xdb\xe0oo'A\xa5\x82\xda;0\xe5zM\x8f\xa2\xdc&|o\x96\x88\x9c\xb9XTJ\x1c>o\xb0\x90Q\xeeC\xf0\x02\xd8\xe6\xff\xfcM\xb51K\xa4\xc3\xa68;+\xc7\x81\xe7\xf0\xf5y\x9de\xec\xbcF\x04\xc5G\xf9\xc6\xb1f\xaeD\xf2 \x9eZE`\xa9\x1e\xec\xbd\xc9\x9f\xc8OB3\x01\x95\x03\xfd\x81\xba^\xfe\xfa\xad\xc4I\x88\x1cT&u\x1a\xe9\xeb\x00\xaa\xaa]\xb3\xe2\xec6Q\xd5^\xb1|\x92\xc5\xab\"5\x0c\xa8#\xd7\x07\xef\xa2\xa5\x19\xd3d\xed\xaa{~\xb7\xbcJ\x17y\x87\x93\x89\\cA\x82\xe5\xd1\x9c\xf9\x85\x89\xa7('\xea50\xca@\xe4\xe7\x81bv*\xf1\x9b\xce-G\xae4\x7fpOg\xa1H\xba\x9eQ>\xb6\xfa\xd2\x93M\xa0\xa1\x86\xfd]\x1d\x81\\\xaa\x0e\xcc\xe7\xbe\xfe\x07\x9b\x89n\xe0SJ\xe8\xb4\x9c\xfd]\xbd\x95o\xdc\x15\x8f)\xfe7\xf1\x07\xfb\xe6n\x89iO0\xce\x9e\xde\x17I\xf9\xc1Fd\xc2\xe3\xfb\xa7\xa4v\xa3\xddK\x12\x0c\x19\x92+\\!\xbd#\xc1\x87\xac\xa9\xe5HF\xd9%\xfa8)_\x8a\x08\x05\x12\xf5\x85\xb5$I\x0b\xa0\xf5>\xba1\xfcr\xe8[[R\xdb'B\x10\xd4\xd3\xc8}\xf9\xe2P\xe0![\xefR\x10\xceY\xdbh;\xa1\x05\xcdH\x15!x\xe31\xcb\xdf\xa6\xd35\x9a\x9c\x98K\x89\x8c\x8e.W\x06\"\xde<\xda}v\x81\x88\xbdX9\x17\xae\xdf/\xd6\xd7q\x92\x0f\x1d{\x8be\x99\xab\x08\xb0\xed\xe9z\xc2\xb2|\x08~\x9f\x0b\xbar\xe9\xcd\xe2E\xc1\xb2\xee\xc4\x80\xf5>\xb1\xbbs\xf6_~\xd0c7,\xd3\xc8\xb4\x13\xb4`u_\xb4d\x0bD\xa9mT4d6Q\xb2?z\xb8f\"\x16aw\xb2\xefDg\xd6[\xb2\xec\x9a\xf9N \x19\xc5T\";\xdc\x06X0\xfe\xe1O\x0f\x8d\x08\x9a\x1e\xa3\xf2 N~\x0dtH\xe8pZ\xbf\x06\x805)\xb2.\xc2\xc5B\xe5\xb6k^\x97\x89\xcb\x0f\xf3m%\x94\x0f:\x0b\xe5j2\xa6\\./e\xec\xc9\x95\xaa\x03\xc3{\xfa;\xfb/>\x83\x85uG\xc5\x19\x9b!\x18WS\x0bv\xc3\x16\xc32`|\xadl\xc9\xf2<\xba\xe6Go\xe9\xe6\x8d\xb5\x8c\x1e\xff\xbe\xa2\xb7K\xaf\xd5\xa4\xe1\xb4`\xfb\x97\xfc|\xc5&C(z\x9c\xc98W\xda$\xfc\xf5\x87\x04\xd6\x91\xb28f\xf35\xe8\xc0\xb1\xaaok\xa2\x80\xd8\xa1\xf8b\x15 \xbe\xc4l\xba\xc2G\x87\xf6\xf0\xc9\xae\xa9\xd4\x7fH\xed!Er\x08\xf7\xf8\xff\x15\xf4\x80 \x87\x8e7\xd3\x11\xd2\xe4]q\x8f\xc6\xff\xdc\xab\xfe\xdc\x0f\x02a:\xf3\xf7'_\xb4!\xa3\xeb\xc0\xe8\x80\xc67e\xb41\xc4ZI\xc7\xbd\xa0\x17'S\xf6\xf9l\xe6{\xd2\xe21\x9dA\x84g\xbd\x9f\x07\xa6\x11)\x947\xd1/a\xc7\xe9\xf6\x7fS:q\x1b] \x07ft \xa3:S\x96\xb6\x98\x05\xa1\xf0\xbd\x90\xea\x1e\xf4i\xe7z\xfb\xa1\xab\xc3>\x92\xd8\xed\x0ebB\xadqq3\xe1\x9b\x88\xd0\x90\xd7\xcdh\"\x91i\xdc*'4\xb1\xab\xe5\xef\x970\xc0\x83}\x1b\xbc4\xc3\x18)\x05\x0c!\x1b%\xb0\x0d\x83K\xa3\xea\xae\xac\x8a\xc0\x0b\xc1\xd3kj%X\x80\xbf\x9c\x03\xfc\x1a\x82\x97\xcf\xd3\xf5b\nW\x0c\"\x97Z\xc3O6\xc9$\xe0&~\xbf\xe9\xfdD\x9c\xbdEO\x1c\xfc$\xa1\xd1nu\x1dD}\xb0\xf7TCZ\x071\x0f\x91_\xfcMC\xe6\x1b(\x8dkw\xfa\x14\xf9\x11&@\x9e\xf2s\xeay\"e\xeaj\x11M\x98\x9f\xb0[\xf8\xc0\xaeO?\xaf\xfc$\x04\xef\x9aW\xf7\xbc\x80\xd2\x1b({\xa2\xdf:\x1e.\xa2\xbc@ss\x11Yr\xb1\xc0\x1fy\x19\x16\xd6@+R\xb4\x10\x98\xf6\xd8|\x1d[M\n\xa5\x8b0{U\x0cl\xd0q\xf5\xea\x80l\xd3\xb1\x94k\xae\x8b}JXU\x9a\x16cm\xaa\xa9\xd6\xc1B\x8f:n\x1aB\xd9=oG\xe3\xc8\xbf\xc5$\xe9A\x97\x9d\x90F\x1cs\xb0a\xdb\xe5\x92}\x11\xdd\xa5\xeb\xa2\xdb={)\x88\xfc\x03\xdc\xafS8\xfeP\x1c2}\xbf\xbe\xdb\xef\xbb\xef\xd7\x9fv\x16\xe5\xffW\xe0\xab\xff\xbe\xdb\xca\xc6\x99P\xaahvM\xa3\xa8HaM\xfc\xd0X\xb3& \xb4\xb0\xab\xe6\x98\xa4\xd3\xb8\n\x96hm\xaen\xe7\xa3J/\x90\x86\x90\xf7>\xbe\x7fu|q:~s\xfc\xa7\xb3\x8f\x17-\x8a\x82\xfaQ+\x88\x00\x9e\xa0R\xb9\xa7S\xc2\xc6\xde~|\xfd\xe6\xe2\xb4M\x91\\\xefM\x08\xde\x9b\xf5v\xfe\xd3\xd9\xcf-\x9dX\n\xca^>Oo\x13\x9b\x0e\xa9\xa3b]j\xed\xabO\x8ay\x9c\\\xbb\x1c\xe0\x94\x16\x1f\xdb\x95\x87T\xd5\xc8\xdf\xf8\xd8;\x1ev\x1c\x0e\x19\xe1\xd8\xd8\n\x07 \xf5\xb7g\xafN7\x06\x07\xce\x8d\x06GUi\x99N\x99c\xfa\x18\xea\xdc\x1fy\xbcJ\xee]\xaa\xfb\xab\x84\x0f5\x13\xb1C\xd0\xc6\xd9\xabO#\xfd\xad\x1c\xa5|\xd9\xce\xd7\xcbe\x94\xdd\xe1\x94o\xe7\x91\xc8\x0f\xc4\x7f\xc4\xf99_U\x11\x86}\x9de,)~D<\xd5\xdf\xb8\x98-u\xec<\xdd\xfbUO\x1d\x82\x95\x13de`Z\x97\xe5\x92\xda\xe8T\xa5\x9aS\x07\xf6\xe8Z#\x13\xda\xf2\x86\x04\xb4\xba\xb6&\xc9\x80S\xdd\xb50\xd6\xa5 {\xb4\xd6\x8brw'i\xb6\x8c\x16\xf1_\x19\xba{\x05\xd2\xfe\x1d\xfb\xd6wp\xae\xef\xe0\x00\xcb\xeb\xaf\xf9w 9\xcc\x1a\x0eu\xda\x8d\xa5\xdd\xab.\xa0\xd7SX\xe9\xa6\xb1pT\xff\xe9\x8e\x9e\xd3>kj\xef\x1a\xea\xe5\"0\xa6jo\x1bA\x94\xbaK\x06\xb6\xfc\xdb\x81\x1d\xdfBf\xc3c\xd3\xb8Hk\x18\xd2\x89\x94T\xf2\xcf\xdeAG\xd7/N\xa5\x8c\xa1\xd0jt9\xc0\x14\xf3\xe6d~\x12\x8c\xfa\x97!$\xa3\xc1%zc\xfa&EoTm\xab\xbb!\xd6\x13\xcd\xda\xc2\xa90\x14\xd7\x90#\x16\xfec\xd2\xc8Y\xa4\x0e\xac\xf7\xf8]\xfd\xaf\xce\xb0zb\xd2\x0c\xa9\x96x\x16\xf8^\\\xb0,\xc2\xa5\xb0\xc9\x9b\xe1K\xd9\x06o\xc7\x8a\x9b\xa1\xf4\xfd\xac\x87\x0dk\xc9\xc71{\xdaa\x8d\x9f\xddp\x8a\x8dsI\x8d\xb0\"\xf6\xfa\xab\xe5\x1a=\xb9\x1ce\x97f\xfe\xbdX.b\x93\xa4\x06\xaa\x1f#*Q(\xa1\xc8)NM^\xa5\x1a\x108\xb1[oA\x83 \xedx\xd3\xd9r_\xc4AB?\xe6*\x84\x93\x19oE\x913\xf3=\xbdi4\xc0\xd1R!?\xccb\x02\xa6X\x86Y\x97\xda\xa0\nMr\xb0z\xa6i\xc2\x86b\xdc\x9d\x83^\x878\xb0\x0d\xba\x8f\xa86\x98\x1f;\x08\x03\xeb\xe0\x1e\xd5\x05\xcb\x7f\x05\xfe\xe9\x97VE\xe4xk\xea^\xbe\xdb,Z\x1d+\xfdBC\xee\xe8\x7fH\x85\xc5\xde\xaf\xcb:.Paa\x99\x94\xaf\xcb\xa2\x81Y\x94\xcb\xa2\xbd\xfd\x03Z\x97AD_\xfd\xa7.\xe3\x97\xde\x97$:\xadHw\x81X\x95\xec\x99%\x91,yj\x954i),!c!\x9b\xd9\xb3\xba\x9eH\xb5\xc6\xc0x?\x93\xefwI\x84j\x08S\xfaK\xd8\xb9\xd4\xf4,\x99\xa6g\xd1\xac\x0f\xb3\x10fJ\x06?\x7f\x7fz\xd2M\xefQ\xe6G\xd0\xa2\")\x81\x1b\xa3\xe9\xa2Z\x04-Ru\xa5\x08\xe8\xa3V\n\x01\xc7`>~x\xd3m,\xb2\xb3u\xb6\xd0\xfb\"\xc4\xf6\x86\xce\xfep~\xf6n\xa3\xde\xfe\x92\xa7\xa6\xb4u\x96MY\xc6\xa6\x9a\xee%\xe8\xdc\xff\x87\xd3\xf3\xb37\x7f<}\xb5\xc1\x18P\xf8\xc9X\x9e.n\xd8\xd4\xbb|\xf8\xb1\x8c\xcf?\xfep\xf1\xe1tc\xad\x0c\xad\x8fI\x84\x13\xbd]\x98J\x13\xdab\xde\xa2\xa4Qs=__\x15\x193e>]\xad\x14\x04\x0ehd\xdd\xa1\xf0\xfe\xf8\xc3\xf1\xdb\x87\x9a:\x9f\x9d{\xe6Y\xb4|\x17- \xd0\xc4U\x85\xd7\x84\xd6o]\x15\xdb\x85y\x13\xcc1\x9cg/\xce\xff\xe7\x92\x88 7!tB\xea\xbd\xf0T\xe6\xe7\xcf\xfc$\x9d\"\xd1\xda\x8a\x05g\x0dG\xb0\x16\xaa\x88$Z2\xa17\xeby\xb0\xad\xde\xc6\x89|\xc7?\xde\x11\x05\xaa\x1d\x1f\xf3\xf7\x97_\xc4\xf61\xca\xe9\xea\x02\x8e\xc0\xc3\x19\x8d?/\x17\x1e\x0c\xe5/Z\x7f\xa0i\xf7\x18\xe6\xf3F\xeb$7\xd6dA\x08#\x0f\xa1\xc9\n\x86Wv\x93\x10f\x97A\x08yg\xac9}\xfb\xfe\xe2O\x02w\xc6\xaf\xdf\x9d\xbc\xf9x\xfe\xba\x95\xb0l\x84EoY1O\x89\x1a\x0f\x83Kq2Y\xac\xa7\xect\xb9*\xee\xfe\xc8Ak\xf3-\xc2\x1cx+.y\x1ee\xc2v\x1be\x89\xef\xfd\x1ce \x06\x1el\x02\x08L\xd0\xe4\"I\x0b\xb8f \x17^\x19D\x80c\xfb\x1f\xec\xae\x87\x16d6\n\xe4\x18\x1d\xd7\x81#\x0f\xb3\xe8c\x04@\xce\xd9g/\x84\x9c\xaf\xfd\xba}\xed\xffx\xfc\xe6uE3\xce\x7f\xbd\xe5\x8e\xf3\xb3\xe3\xf3=z\xad5\x05YGH\x04\x84\xfa\x9f0\"\xe7\xb4\xe3\xd1\xe7\xe5\xe2Q\xdc+X^\xf8\xb1\xd8\xde\x1c\x0d\xd6K\x96\x8f\xc5\x96\xa4\xbe\xe4{x\xd2\xe3\x9ca\xc4\xa1\xf3s\x8c\xf3\x8bd\xcc\x10ArB\x18\xb1\x86!6\xdfcl4]c\xb7_R\xd3\xefx\xfb1S\xd6\x8f\x1a\xed\x10m\x95\x8e\x15\x94\x01\x95K\xecV\x18\"\x8e\xb0\x9bh\x11\xf3\xc9\xbd\xe7\xad\xa3\x91\xfb\"\x84\xb4\x835\x18\x87FAR\xe4\xa2\xa2\xc8!(\x0b\x85Ks\xfe\xa4\xd1\x93\x1d\x15\xa5}\x7f\x08\x93\xfco\xdc%\xdavx(\x1cH\xdaq`t\xd9\x15\x07\xbaX\x03\x81\xc5F\xd6\xacCj\xdd\x12\xb0\xdf\x18\xf0\xe7\xa7\x17\x9c\x9b{\x7f\xf6\xee\xfc\xc1\xb8\xb8\xcc\x8c\x07\x035\x1e\xce.\xc3k\x9d\xde\xd2A\xc8\xd6\x0ef\xc3_\xa3\x13\x1d\xc2\x07\x8e\xc0\xd0\xea\xdb\xa0\x15\xd6\xd2dP,\x8e\xfcC\xd1V/!\xcf\xc6\xd2\x90_T\x92? \x9e\xaa\x88\x8au\xce\x19\x16U\xb5zS_\x9bP\x96g,_\xa5I\x8eY\x02\xb2\xa07g\xd1\x94\xa19\xd2\xba\xfc\xfb\xcb\x17K?\xc0\x17c\x824\\\xe3}\xb1\x1d\x8e*i\x08\x91\x8b\xdd_;(\xe4B\xc1\xae\xf7\xc3\"\xbd\x12\xda\x97iTDzPm\xbb\x8e?A\x8a\xed\x1aD\x08^\xc1>\x17\x9cr\x88\xd6\xf8\x112\xe9\x88\x95\xff\xf1\xf1\xf4\xbc\xedJ\x7f\x03\xa4\xfc\xaf\xcd\x902\xd6\x90\xb2U\xec\xf8\xaf5\xcb\x0b9\xe9\xd8\x05\xf9.\xa2\x05\x9f\xf9\xdb\x8f\x17\xc7\x17\xa7\xaf\xfe\x91 \xb0\\\x17Q\xc1\xa6\x1f\x1e\x0e\x10\x929<{\x7f\xfa\xe1\xf8\xe2\xf5\xd9\xbb\xf1\xdb\xd3\x8bc~B||0:\xd5$r9\xa4\"\x01\x92O\xec\x8e\x96\xa6F\xad,\x85\x83[\xeaz\x1eYN\xa0\xe5J(V\x0e\xb5\x0e\xae\xcf\xf3 \x080{dY\xbd\xd2\x0el\xfcI\xab\x90\x8d\x9f\x1eUX\xe2\xaa\xb7\xe0\x87ll\x9f\xaci\xd0M\x1b$\x98\x87\x87>\xc5\x9a\xb0\xa3qOL\xd9\x82I&C'\x87Y\x08\xe9e;\xde\xab\xc9<\xe8\xd6\x7f\x98\xb9\x94{\xbb\xe3T8-;?\xf9\xe9\xf4\xed\x83\xadI>\x993\xeat\xfe&*\x96\xf2s,\xd6\x11\xd5\x13\xfdTT,\x13\xca\x87/_\xb0\x9e\xbc\xb6\x1dR\x1fxc \x83s\xf1\xe6\xb2\x9e\x97$(\x7fv\xbe\xbf\xdd\xa3c\x99=\xdb'4\xdd\xf2\xb67_\xb1I\xccr\xaf\x8b\x1d\x00\xb9\x16!\xb2d\x99\xcf\xd0_?/\xb2\xf5\xa4H3\x12zZ*\xa8HK\x0f\x7fx\x08~\x82mD\x01\xdf\xdb\x98\xdbh\x08\xa9n+\xd0\xe9*\xe1\xa6\x16\x87\x15\xe7\xb8\xff\x8cV\xd8\xef\x99 \x91\x86\x85\xfb\x94\xce>\xf1\x07V\x948\xa9\xb1\xa7\x14\xf6\x93\xde*K',78\xdbU\xc9\xfd\x94\x89\xf6k\xe5S,\xafg\xc0\xaf\xd7\x98c\x8d\xb7\x82\x9f<\x99GI\xc2\x0c\x85\xdb\x0d\xd6x\x15\xe7\xab\xa80\xc35/1\x1di\xed\xd55\x11\x80\xee\xae\xed*\xf7F\xa67\xd8\xb6\xc3_\x83\xd4\xea\\\x1bWJ>s\xe6\xbeW\x97Z\xd7V(R\xf5\x08\xba\x82\x15B(|B\x92\xa9\xbd1\xa6s\xd5h\\\xc1\x1fu\xe1%x\xcez[\xd5\x88V|\xe7O1\xc6\xc1\xaa\xb1\xc9*G\xba\x8c\xd6\xcaQ{\xf0\x9c2lJ\xaa\xe8\xaa\x95\x11S\xb2\xbd\xed\xb8g\xbb\x1emo/[o\xda\xd7\x8e$\x1a\xf2\x06\xe8\xc7j\xe0\xa1\x15\xae:\x84\xcc_\x06!,\xbf\xd3^5\xc7\x86\xd7VG\xff\xc8\x93[\x00\x87\x90\xf8\xcf\xf6\x02\x7f\x16\xe0\xb5l#\xec\xd0\x94\xe1\"\x9e|\xf2#\xff\x0e\xe3\x94\x0ct\xfe\x0f\x86p\x83\xc6`\xbd$\xbdmm\x0dk9\x1b\xc2\xd0\xc2\xb12\x19N\xd8-\xcc\x83\x1e'{\xbb\xfct\xe2\x7f\x0czi\"\x8578\x84\xab\x10\xbb\x8b\xfc\xb8\xb7J\xf3B\xeeB$5\x03d>&\xbdh:=\xbdaI\xf1&\xce\x0b\x96\xb0\x0c\\\x01\x0b\xb5\x06P\xdb=\xe9\xc5K\xde\xe39\x86S\xcdU\xd0c\xf7\xd4&\xfa\x18|tt\xe3\x07\xca\xef\xea\xa6\x87\xf6\x88t\xa7\xa1\xab\x10\xb6\xc4\xc8y_^\x9ad,\x9a\xde\xa1\x1d\xc2d\x1e%\xd7\xcc\x838\x81\x85\xef\x89 \xaf\x1e_>\xf7\x88\xf2^\xb4Z\xb1dz2\x8f\x17S_\xfb*\xe8\xd9-\xb7\xe1p\xde\xcb\xd82\xbda\xa21\x91 \xa7\xdc\xa7\x06\xce\xd6\x16\xb5a|\xac\xb8\x88\x97,]\x17\x1aF\x84\xd0\xaf\x1f\xb8\xfa\xd1g}?\x84\x95q\x06pZ=\x84i\xd5\x04\xfe\xf5\xedq2\x1bM\xebh:\xea\x08\xc2\xcd\x9f\x9b!\xb0v\xb2\xd9\x18\xc9\xb5\xb5kBQ\x02\xb2\xeb\xb6\x8e[\xa0\xb7)\xb3\xb3\xfb\x94dvv\xfb\x8f\xef\xc3\xe2`\xb2\x10\xa4\x95\xa9_\x88|\x1b:\x9b#\xed\xedJK\x08[\xf1\x82\x91\xa2{3;\xa5\x98\xf8\x82\xf3\xc2\xa8\x05\xe3b\x92\xb4\xa4\xe5\xec\xc32\xce7\x8cs[\x8fu\xffd\xef[\x02\xda\x17\xba\xe5\xc0!l\xb9\xcc\xb9w\xfb\xbf\xa4Q\x8e>\x1eY\xa7\x8b\xa5d+\xf3\"\x9c%\x1d\xa1\xc5]\xa8\x8f\x89\xe1\xd40j\x8aw2\x9a\x13\xd8\xe3\x81\xccOC\x88\\\xb5\xa112\x85zn\xa4\xb3}1J/\xfd\x88\xd0\x10\x98\x8f\xd0\x0e\xa2\x8a\xc2Y\xb7=\x8a\xb3ztF\x9e\x0c$\xa3\x1e\xdb\xe0K=x\xeb\xb7\xeeM\xd3\xa4\xda7%`\xd5N\xf0\xf3\x00c\xfav\xd0\x80\xab'\xf3=\xce\x15\xcb\xc8\x1b\x89\x88\xd7 \xd2'\\\xb6exq\x918\xc2^\nM\xc0\xb7R_\x84\xc9\x8e\xe5\xff\x98\x0d\x87\x8b\xdb\x9b\xa1Q5\xe9\xc1>}\xca>1\xe5j\xa9R\xd83St\xca\xfc\x15\xe6\xa1,\xc4\xf0\xa7\xfd.g2\xba\x1f\xe4\xd4\xc9\xbc\x15\xa1d\xa9TP\xf5\x8dX\nb\\\x84\xdf\x19\x84(\xb2\xa3\xa7|\x8aQ\xe2\x82@Jb\xa1\x90\xdaa\x07\x06!J\xe9\xecy\x99o\x12\xc5\xbe\xed\xed\x05\xbc\x80\xc9s\xd7\x81\xc2%\xa4\xb5_\x8c\x16\x97\x0e\x82\xcc\x05w\xc2y\x81O\x01{\x995I\xc7\\\xa6_\x8d\xa6\x0e\xe9XO\xaf\xcd\xbb\xe1\xc2C\xee\xdf\x840\x0da\xc5\x99{QA\x98r\xceQ\x80\xb9\xe1\x9c\xfc\x0d\x0c!\xe6c\xc6@\x17\xfc\xcd\xe8\x92\x9f\xceT\xf8!\xebM\xe6\xaf\xb0\x83y \x00\xc6\x87\xf7\x9d\xfb\x13\xb5>\xf7E\xc2\xbd\xfdN\xbc\x1bq\x14{\xe31\x9a\xb9\x8e\xc7b\xaf\xe0\x9e\xe0\x8c\x88\xfc\xc0\x86z{V\x9cZ\x12\x19\xa2\\Z\xa1\x12V1Zb\x1a\xc3\xbf\x01\x95\xd7\xa3\x82\x0b\xf7\x1b\x9a\xb5k\xf4\xc9\xe4\xc5\xd261\xab9\x10\x16C\x95\x9c0\xc4\x0d\xc1\xab\x9b\xe2\xb6\xc5\x8f\xc10\x94\\&E\xb3\x07B\x06p\x9b\xf7\x7f\xf5\x1d\x8b\x9dv\x81\xc7/lN\x1cBQ7\xa1\xc8Q\x17\xcd>\xb3\xc9\xba`\xf2N\x0b_ \xfb\x81?\xe4ir\xbeb\x13\xed\x95\xfc\xe9\nJ\x11\xfb\x89\xbfO\x862\xe7%\x83=\x87\xa3<\x91\xecX\xad\xc5/c\x0b\\\x9bL\xa3\x0cU\xa9\xec\xf3\x15\x9bH\x07\x05R\x1aj\xc4VfX\xf6TL{(L\xd1rv\x91rx\xcbz\x89^\xc55\xa1\x90Z\xa9_c655\xa1\xa9\x1b\x0c+\xc71\x14 #\xcc\xe5\x04\x11\xbc\x80\xe29D\xdb\xdb\x01\xc4\xa3\xe8\xb2\x96&$\"\x0e\x08\x13d1\x82*N\x14\x06\x7f\xa8_\xcf\x9dD\x939\xa3\\\x8c\x94\xd4\x11\x8f\xfa\x0e\x07\xa5\xdc\x0eP\xbf\x0e\xab;\xce\x80\xb2K\xe0\x8f_\x8f\xb9I\xe5\xacq\xf2\xe9F\x7f9\x1a{\x05\xbd\x7f\xc9\xd8\x8c\xa3<\xdeb\xf3\xedh\xcc\xd2W\xa3\n\x81]n\xc2\x80\x87\xd4F\x7fh\\!\xcd\xb8\x94\x0c\xda[\xa4\xd7\xb2k\xe1\xb6\xea\x9b\x1a\xdc\xfah-J\xb5\xc1h\xcb\xb0\x8c\xf7\x1f/\xc3`\xc7\xd2\xae\xd0\x8aRcP\x95\xbf?]\xef\xa2c\xb8\xd1c\xbd\x9d\xa4\xcbU\x9a`VJ\x0b\x04e\x94\xb6\xf3\"\xcd\x1c\xd6\x01Z\xa0b\xbb\x02\xde\xaa\xd5z\xb1\xeb\x08\xab\xa6\x8c%S\x96\xd9\xa5\xb9\x0c\x1c\xfe\x89\xbd\x8dV+6=I\x93\"\x8a\x13\xaa\xea\xa2\xdc\xbeK\xb6L\xe3\xbf\xb2\xc0\x8fDvr\x91>:F\x1e\xdcJ\xa2\xe5T\x0bfiZ\xbcN\xf8\xda8\x9d\xd9\xf4\x99\x0d\x810\x1c\xe7\x0f1\xf8\xa19\xd0\xdc\x1e\xe8\x02\xc7J7)\xa05\x84\xb5\xfdYd\xdd\x88\x80\xc5\xcb\xba=\xd5Z/\x9a6r\xf6\x02\x0d\xd9(\xc2\xd9\xe2\xf4\x05\xbf\xa8\xe3\x17Tk\xeft\xfe\x02d\xe58\xf3\xfe\x94bf\xd0=\xea7\xb2\xf1uTD\xfa'p\x04\xff$0\xb0\x81y\xbb\xe6\xcc\xdbcj\xbe\xd7$[\x17\xcb\x12\xda\xe5\x0cK\xac\xd6\xd6\xaa5\xca\x01\x11?1\x0b\x16\xb2\xc0\xead\"\x0b\xac>f\xb2\xe0\xc0,X\xe1\xd2\x99\x97\xe4S\xac\xbe2\xde\xcee#O\x9eXC\xbd\x11\xe2\xffc\xf3\xfa|)?y\xfa\xf8\x19\xcd\xe6^\xff\xbal._W+\x1d\xb4C\xe5k\x13\x81\x06\xa3l \x8eR\xa7\"Y=\x9a&\xb9\xad*\xd4\xaf\x18\xf2\x8aM\x12\x1a\xefL\xda\xe1L\xcc\x02?\xeb\x952\xb3\x8a\xe8\xbf\xae\x19\x9594\xe7n\x0d)\x90:\x04\xfd\xd1F:\xab\x19\x06%r\x98\x8b\xda\xdbQ\xfb\xdc?\xb1\xbb!xb\x1f{\xf4A\xa0?\x9224r\xec\xd4#\x07>-\xf5\xd7\"\xee\xc7\xa9Hl\xcf\xe9\x91a\xbf\xf67\xf4u\x0fdn\xf3U\x96\xaer\xf9\xf7$M\n\xf6\xb9h\x81#\xb4\xc2\xf2\xebe\x10\x12\xe1\xd8\xcbb\x7f\xd5+\x89\x9dK9\x8d\x98KC-\x95\x9c\xc2\x0d\x1fp\xc2&\x85\x16\xdb\xa4-\x80\xeb\x8dL\x8eo\x9a_\x7fE31\xe6S\xd1'\xd5\xa3PD?\xbe\x96\xd1\ns\xd0_\xa4\xfc\x04@\xdb\xe7v\xa9\xc1h\xb0}\x9d\xf1\xde\x9a\xba\xc7\xd4\x1f\xf7\x9a|\x0d\xfc\xa4\x8c\xf1D\x146d\xf6Ij7\xee\x0d\xd4d#J\xb2\x01\x15\xf9\xadP\x107t\x1f\x96rl@5\xeeC1Z\xa8\xc5M\xef}\x96\xde\xc4\x9c\x97\xef\xd0\x18 j\xa6Y+j\x82\xe0\xb16\xa3Qn\xf2t_:\xdf@\x97Zh\xd2W\xb1\x81`h$\x0ci\xb4\xf4j\x8c(]r\xc6)\xe7\x8c\x1b=\xa7by\xd9JS&\xd2\xba'\x1670\xc9(\xbd\x0c!\xc3\x7f\x19\x99\x88\xa6i6c\xbc\xacp\xb0\x9f\xc44\x85\xcdc\x830\xde,\xb1C\x9d0\xb8x\x1c\xf58(\x82\x9b|\xeb\xa4\xff>\x14C\xa4\xac\xc5\xda8\xb6\xf6\x93\xe2\x8a\x03'\x12Z~\x8c\xb2G\xa3^\x13=\xb5\xa9J\xb1)U\x11\x14e\xa2\x90\xfb\xe7x\xb1\xf8\xc0&,\xbeA\xa1%o 2&\x81id%\xf9\xa3M\xb8\xda\xbd\x9b\xd2\xd4\xafM\xa4\xa7#y\xdc\x944\xaa\xcb\x06\x0e\xd8e\x1d7\x14 \x8a\xa4\xd3\x96\xa6\xee\x8b8A\x18\xb9n\xdc\xf4\xa7@a#\x0e\xc1\xcb\xd2\xb4p\xdd\\\xa8\xa7\x9d\xa5\xdb\xd8\xec\xc1A\xfa\x1a\xc8\xde\xd7P\x97B\xc9\xedn\xc5c\x03\x8db\xa9\xaaY\x08\xde\xf1j\xe55\xcc}\xde\xabl/x\x7f\xbek\xe6q\x88\xb7\xa2\x81\xc5\xcc\xb4\x1aUTJ\xb3$Z\x12z\x8e\x16\x90{\xd3\xf8\xc6\x92\xe5\xd5\x93\x17w\x0b\xd6\x14\x14i\x15M\xa7\xe8B\xee\x0d\xd8\xb2\x01k'\xe9\"\xcd\x86\xe0\xfd\xff\xa2(r\xe4\xbd\xb3W0\x04\xef\xff\xf9\xdf\xff\xb7\xff\x03<\xf7\xf9\xea\xc5\x9e\x00\\\x08\xdeI\xe9\xa8.\xd7\x96/\x0c\xe6\xbf>\x84\x02\x8e\xc0\xe38\x0f%\xb5\xf0`\xc8\x17\xd1\x0b!g\x0c\x8a9+\xbd\xe3=+\xe4w}b\xb7\xad\xca(\xb5&\xdd\x18f\xb9B[>\xab\xd8o!oW\xdcx\x9c\x7f`\xd1\xa4h\x17.\x9a\x0dI\xf5\xa7\xf3\xd1\xa5\x9e\xf2\x08k\xa7:\xd0\xc2\xdf&N\xfe6i<\xad\x92{\xf0\xb7\xd0*\xd5\xd1'RB\x9eHI+\x9f\x0b\xdd\x89\xb9z6%\xea\xea\xa9\xae\x02:\x9cI\xea\xe9 \xe1&n\x1a\xdcI\xc2\xc5\x1bwz\xda\xd2\xbd\xa8Dl\x01\xa3\x06\x0d\xa8Y\xb5\xed\xde\x1dZM\xfdJ\x06\x95\x91\xb7\x83Yy;\x88\x96\xa9\xe2v0\x85\x17\xc0\x9eC\xba\xbd\x1d \xd7Y\xbb\x1dt1\xb0\xa0\xdf.\xe9h\x9b9 \xd7\xc9TP\xb6XOG\xc5\x87\xea\"\x92\xe36\x89G:d;VL=\xc27\xbb\xc0c\xc6\x8d\x1f\x8e\x99Q\xd4\xddPgW0\xb4\x94\xc6\xf6\x19\x9d\x86\x10\x9b@\x8ag\xe0\x97\xc6[U\xe2\xbf4\x90A+\x13v\x0b\x17w+v*\x12x\xbdcl\n\x11\x88\x0fB(R\x981\x0e\xfd\xa8:#z\xf0s\x94\xc3u|\xc3\x12\x880\xd5\x8d\xaf\x99\x04\xa5\xfcPY'BM>\xe5\xe7\x89q\xe1\x9aZA08\xd6 \xa3-3*\x84\\U\xce\x8b\xc5\xbc]\xe4(\xb0\x1b\xfe\xf3N\xb1\x9f>\xfa\x14\xe0\xcf[?\xc2\x1f\xb7\x82[\xf3\x99\x1f\xf4\x16\xe9\xb5\x0c\xeeR\x9d\x86\xb38\x99j\xc7\x1e\xe70$\xb3Q\x0e\xa0\xd3%\xa1\xdb|_Nx\x08\x89\xff\xe4\x89i\xc8W\xe9\x8c\xeb\x97\x03]\xba\xa4\xaf'\xdc\x03\x99G9^\xb3\x0bG\x89w\xe9\x94\xe5C\x18\xddX\x12\xc2:\x04\xe1V\xa4\x90\xd5w\x10T4\xdb\x16\xb1\x93\x1c'\x838\x94\xd7x\n$x\np\xc4Jz\xf2,\x80\xa1\x8a_\x87\xb1\x89\x9d:\xee\x05\xca\x11\x92\xfd\xec)\xa4\xc6hl[\xfd\xc6\x03\xd0\x81\x8e\x8dwR4,\x0b\xa1U\xd1\x1b4\xb8@\xd26[g\xd0\x84\x1b\xec7\xf1\\\xf5Q\xcbKC\x93\xceO\xd1b\x8cz[\xc4K\xa2\xc4SE;\x8bt\x12-<\xbb\x06[F\xf1\xc2~\xbdL\x93bn\xbfN\xd6\xcb+F\x8ck\x15\xe5\xf9m\x9aM\xed\x92\x8c\xef\x07\xfbu\xce\xa2lBtP0b0\x9c\xef'\xde\x923^gD\x03\xb7\x8c}\xaak`\xdb\x94tN.W\\N*v\xb6\xfe\xab\xce\xb5\x92\xac\xae\xce\xe5\x16p\x04[[\xd9Hp\xce\x98b\x8e\xcf4\xcaX$+T\xe3}p\xfc\x12\xa9\x03\xcf'\\\x8c|\xc3f\xc5\xd0\x0c\xe1U\xabq\x91\xae\xac\n\x19\x9be,\x9f\x8b\n\xb8m\xf3\xb6}\x98\xf5\xac~Q:\xf8\x1c\x9aE\x17)\xfaK\xf7\xeejm\xb4\xee\xc3\xec\xdb\xe1\xe4R\x83\xfa\x83\xc7\xa6u\xbatM\xb7B\xc1E]\xd4W\x9c\x82\xb7\x86\xd6f\xbdY\x9c\xe5\x05\xaa\xf4\xddZ\x1b\x94\x9f\x12\x112\x06\xd3ic}\xferO\x8aS\x1cC/\xeeV\xd5\x89s\x93\xc6S_\xbc\xc7\xa5\x83\xc3v\x0f\x15@`k\xeaX\x8bU\xd2V\xc5T\xfbvW\xf9r\xae\xba\x15\x82{\"a]918\xe2\xc4]\x04\xd3AMy}j\x15\xde\x04F0\xa6o\xa0\xdc\xdd(\x07}\x1f\xcbz\xb3t\xb2\xce\xcds\x86v^~\xf0\xdd\x1f%\xf1\x12c\xdb\xbf.d\x90\xfb\x93t\x9d\x104\xf6*\xcd\xa6,{\xbd\x8c\xae\xd9\xd9\xba@\x06\xbf\xa1\xca\xf9\"\x9e\x10$Y\xab\xf1s<\xa5\x8e\x95\xab\xf4\xf3\x8f\x0b\xf6\xd9Y\xf0\xfb,]\xaf\xc8\xd2\xb3l\x1a'\xd1\xc2Qa\x92.\xd6K\xd7\xdcDan\x17\xcc\xc8\xa1\xcc\xc48n\xe9\x92\xf7i\x1e\x17\xf1\x0d1{^z>\xcf\xe2\xe4\x13]\xf6\x8e]G\xee/1\\\xb1]t\x9d\xc5\xd3\x0f\xd4Xd\xc1iB\x1c\xc5\xb2\xec|\x15%\xee\xc2\"\xca\x08X\xf1\xd2\x13\x84WS\x99\xb3WQ\xec\xeeX\x96\xd3}\xcf\xd2\xa4\xf8\x99\xc5\xd7s\xa2l\x11'\xecd\x11-\x89\xb5\xe7E?9>KW\xd1$.\xee\x88\x02\x1a\xdci\xb6\x9aG\x14\xaa\x14\xd1\xd5y\xfcWb\xedn\xe3izK|\xf0\xd7\xd7\xc9\x94\xc2\xae\xbf\xa6\xe9\x92\x98z\xbcX\x9c\xb9\xc6:[\xa4\xe9\xd4Y\xca\xb9\xd9\x86\xc2,\xfd\xc4^E\xf9<\xca\xb2\xa8\xb1B:\x9b\x91\xdb^\xd4x\x1b\x17,[\xc4\xcb\xd8Y\xa3e\x0c%A(\xcb\xbe\xda\x17p#\xefgv\xf5).\xbc\x10\xbce\xce\xff}\x9b\xfe\x95\xffw\xe6i\x9a\x1e\xa9\x89\xf9\xc4\xeer?\xeb\xe2\xee\x9d\xdauh\xa7\xe3Q\xeba\x0e\x9a:\x11\x13WL\xe6Qv\\\xf8\xfd\xa0W\xa4\x1f\xb90+5\x99\xbc,__ \xc3\x0b\x7f@\xd9\xa4\xa3!\xe8%gf\xf4\xd0\x97X\xa6\xa98\x8d{\xca\xd8\xa2\xf1q\xfe1\x89\x8b\x05\xcb\xf3w\x92i7\xdcs\xf3y\x9a\x15\xf3(\x99*\xad\xd5\xe9\xe7U\x94\xe4\"'\xa3=\xc5\xabh\xf2\xe9:K\xd7|\x8f\xd3\x00\xa8j\x1c\x17E4\x99/\x19Ev\xed\xda'\xb4\xaccW\xc4#\xa4KEA\x8d\xd3\xe4\x7fnR\xf9O]*\x7f`+\x16\x15C*\x8d)\xa1:\xb1;i\x87\xdd\xfd\xc7\xdeiD\x92\xc29F\x81\xa5\x8eC\xba^\xe9\\\x98\xc76W*W\xb6\xfb\xd0~H\x8b\x82\x93\xc2\xa6\x01\x8a:\x9d\x86)\xaav\x1a\xac\xa8z\x8f!\x0b\xf1\xa9i\xc0\xbcF\xa7\xe1\xf2\x8a\x9d\x06\xcb+\xdec\xa8\x1f\xc4y\xd84V\xac\xd2i\xb0X\xb3\xd3h\xb1\xe6=\x86\x8bbg\xd3`/\xd2U\xa7\xa1^\xa4\xabN\x03\xbdHW\x1b\x0d\x93\xf3&\xae\x11\xf2\xb2\x96Ny\x95?FY\x1c5\x11\xca&\xfeG\xafC3\"\xeaib\x87\xd4\xc3[\xf91Z\xc6\x8b\xbb\xae\xf3O\xd7\x05o\xd8\x05\x02Y\xdc\xb2D\xb2V\x0b\xacd\xad\x86\xe5\xf9\x8e\xfe\xe5P\x15\xc4\xf8\xf6\x9b\x84\xaa\xc4\x7fj\x06\xe3K\x85a\xd0`\x1f\xe3\x02\xee\x89\xf0\x80O\xfb\x96\x83\xbc4 \xc2rv\x0b\x1f\xd8\xf5\xe9\xe7\x95\xef\xfd\xe7\xc8\x83m\xc8z\xc7\x17\x17\x1f^\xff\xf0\xf1\xe2t\xfc\xee\xf8\xed\xe9\xf8\xfc\xe2\xf8\xc3\xc5\xf8\xe4\xa7\xe3\x0f\xb0\x0d\xde%]\xa9,\xfe\xdd\xbfXi\xcd\"\"\x1e\xfbZ\x06\x80(_\x96w\xa5\xb9\xf3\xaetkkmG`\xc7\x00\x81\x11\xf1\x9e\xcb\xfd2\xfb\x1a\x1a\xb4\xf9\xeb\x11\xbb\xc4\xb0\xaf\xa8\xdd\x85!\xf8\x91\xf6\xa6\x16H\x9bNs\xdc\xc5\x9e\x10\xf3\x84\xcc\xa3\xfc\x874]\xb0(\x11:\x80\xef\xbf\x87\xad\xaa\xe8\xddz\xc9\xb2xR\x16\xc5\xf9\xbb\xe8\x1dg\xfeT\x05%\xce\x99\x15\x0bx\x01\x83\xb2\xd6\xd9\x0d\xcb\x16i4eS\xab\xaf\x01\xa9\xc0\x03\x89<\x13[\x1f\x87V\xcbo\xa3\xec\xd3z\xf5c\x9a\xbd~\xd5\xaaJ\x13\xd3\xcez\xaf_\x8d\xeb\x88\xc0q\xe0\x90cHj\x85\xb4\xae#@\xce\x8a\xe3\xa2\xc8\xe2\xabu\xc1\xac>\x1d\x8c.f\x9b(\xbf\xf2\x89\xee\x89\xe0\xefM3\xfd\x90\xa6m\xd7\x95\xe5T?\x9c\x9d]\xd8\x93\xfd\xb7C\xcf\xfb\xb7\x0d\xe6i\xf4HB\xd7\x9a&\xd1uXK\xdcK\xf4k\xccT\xed\x8c\x0ePV\xea?\xbc\xfc\xe6\x1f\xc5,'\xf6\xd7Q\xad\xc2\x08U\xc8\xb4Q\x15j ]\x82\x0bF\x8b\x14.\x1f\xa5~\xd0\xf3huc\xe9\x07\xd6\x8b\x14tl\xb3\x0e\xf5\x94\xf6\xff\xe6n\xfc\xf2E\xbcl\xd8@\xfdRE\x1e\xab5\x86!\xfe\xad\x90\xbb\x93\xbe\xb2\xc4\x9d8?Y\xe7E\xba\xac\x16\x15\x01X\x91\x0d\xbc\xc1\x1a\xa2\xf8V\xf5 \x01\xba\xc1*\x1b\xbdtXl9\xc4\\RL\x15{\xa7\xc00#\xc6`<\xaf\x05\xd1\x11\x80ndk\x880\x92\xb6\xe0[a\xe1[\xd1\x8co\xa4\x1f!h8\x94\xf60cW\x9c&T\xbeD\xf5\xf0\xa6\xe2@hw]\x06~l\x913GgP\"x\x8a\xee\xbd\xba\x02\\\x98}\x89\xabb\x13pb\xb9\xe8\xeeT\x9b|\x02y\xf11/\xed>\xd0$Q\x81\xe8\x8eo\x8cK:@\xabzZ\x06\x0e\x9a\xbdQZ\xdfq4\x93\xa4?k\xfb\xa3|\x15M\x1c{\xb5\xfa\xea\xc8\xa0~\xef\xce\xfd\xb5\xc8\xa2\x877\xbc\xe8.O\xed\xe8\xb4\xd3\x8eN\xac\xf6}l:P\xa9\x8c\x8c\xf7\xd8\xa5s\xc4\x8e+|\x9b0\x08Hc\xd0}\x82\x14\x14\x06^Lz\xdaV\xd2(\x86\xdcA\x1d\xf7\xa0\x8b\x0886a.\xf3\x00\xf8\x8a& P\x89\x84\x15\xfaXmH\x15%\xa4\x1a\xc7V\xc7\xf4Mh\x145\x8c\xee==\xf0\xc9\xb71%r\x9e|\xa5\x85\x7fgJ\x94\x06\x9c\xad\nU\xf0\xe3\x06r\x84\x1d\xdb\x04\xc2\xbd\xd9\xab\xa3U' \xee\xddj\x1f\xabG\xc0F1\xb2\xd3\x03\x0c\xfb\x8b\x7f{\x0e\x9fc1J{a\x8d\x93\x9d8d\xc5\x97\xf4>\x12\x17\xe2m\xc8R\xfer\xc8f\"9\xe77\xcaf\x03*lq\xe2\xef\x0e\x1c\x11\xc6\xcdp\xeb2\xcf\x97\xd9\xca\xba\x92\xdc\xb6\x06\xa4\x91lnq\xb1x\xd7\x8bV\xccY\x9a\xa25\xcd\xebW\x95\x0dv\xcd\xdci\xc5\x92i\x9c\\\x7fD\xa3\"\n]\xda\xbe\xc1\xe5\xb7\xb1\xc6\xf0.\x10w\xed\xf2\xcaU\x06C \xf1\x04\xc3\x9aW\xf6B\x94\xfdL\xc5\xb1|\xff=(\x03>\x89\x98>\xeb-\xd7\x8b\"^-\xa8\xb4P\x15\x1e8\xc5=\x82X\xde\x94\xd9\xd8\"\xcc\x81B\x1b(\xf5\xd2UaGEu\xde\xba\xa3\xbbA&\xc4d\xdd\xe5 \xa9\xbb\x1cd#AhG\xe9\xe5\xff\xcb\xde\xbbv\xc7\x8d\x1b\x0d\xc2\xdf\xf3+J\xcc\xacCF4\xad\x8b\xc7c\xb7G\xd1\xeb\xb1\xe5\x8d\xb3\xe3\xcbZ\x9e\xe4\xeci+Z\xaa\x1b\xdd\xcd\x11\x9bdH\xb6de\xac\xe7\xb7\xbf\x07\x85\x0bA\x12 \xc0\xb6<\x93d\x1f|\xb0\xd5$\x88K\xa1P\xa8*\xd4\xe5\xac\x93\xc0\xa4\xd5\x92\xd2B\xdcn\xc1L\x89X\xd0\xcd\x0e\xb1\x8b\xa7\xf9\x197\xa4\xd2\x93\x02\xacPaLU2\xc7[\xf1\x0d\x9e\"\xed\xe7Gj\x82xQ:\x1a\x13\x137\"A\xc3\xa6\xde\x02O{r\xda\x01R\x907\xb3@&\xa0l\xdb!t\x87\xba\xa3#\xac\xb1\xe2k\xe2\xc7\xd3\xbd\xee\x17F\xcc\x12\x7f\xe9\x05\xef%\xa9\xff\x9cW5\x06Mq8\x9f\x84<\xc1b\x19\x99\xecA\xf3\x8c\xd9\x01Nz\xd6\x8c\xe2\x8d~\xb3q_xv\xb8\xf4\x97k\xf0\xc8]\xe7\x9b\xac\xfe\x1b\xeb\xcba\"\xe2\xa0U\xf6\xb6\x8e\xdd\xed\x8c\xbf\x07>QZ$\xc8\x9c1*\xc9\x92:\x89Sn\xb9*\x08\x07et2\x984!?\xf1\xbdI\x8f\xc9\x12\x8eU\xecs\x83\xaeP\xc2\x7fX\xcc\x17EXw\x8d%\x8e\xa20@\xf2\x10\xceoy\xe7\xec\"\xcf|~\xeb\x0e\x04\xdf\x85\xba\x9b\xd8\x0eP\xcd\xb9\xe3*.|\x1ec\xcb\x18\xd5\xe0\x96\x85\xaa5\xd9\xf9_\xc7\xd5kN\xbc'\x92\xa0\xd7\x0dA\xefch\xa8\xa6\x8d\xa8\xf9\x8eW\x13r\x1eu\x16\x99\xbe\xdc\xa0\xc9\xcfF\xb7\x8d\xc3\xee^e\xc1\xa3\xf1\xd3\xe7\xcc!\xc8\xb6\xc6\x06/\x0f\x15\x13\x87\xfa,\xf2\xaaf\xa0\xd7\xec-\xd3\xc6bVmZD\xb2n\xb1\xd6\xc8\x0cY\xe7\xa1e\"\xd6\xfe\\Y4{_Je8\xd2-\xb1\xbe\xdf\xd2N8\xc4\xde.\x99\x7f\xb6\x8da \xd9q\xaf\x19A\x08%Ztex\xb6i*42\xd3N\x0f\xbb\x8e\x07\x9amW\xa5]\x0c\xd5\x15?D>\x13\xaf\x17)G\xfe\xfa\xaaLm7\xb0m\xae\xe7u\x19O\xfbx\xbf\x1b\x91\x80g\xcdy\xd45q\xdc\xf0\xe7\xdd\xfb\x8c\x8a;:\xd3\x0e\x809<3\xdewx\x13 \x19\x93N<==\xb4\x96m\xd6\xab\xf7\x11\xcd\xfb<\x1c\x97\x91\x8fxz\xa2}\x91/\x8f\xee\x88\x98\xc7\x00\xf1\xd3\x0e^J\xb9\xccc\xd9\x92Zi\x8e\x86\xf4b\x86\xb3\x88)\xb1h\x03z\xb9S\xeb:\x84A\xfc4\xa1:z!=D\x11|\x8bI%\xbb\x17\xc2\x0cv]\xbc@Ax\xf9\x0eU\x80\x16\x0d\xa3\xbcu\xbc\xd6\xe6nP\x0bg\xab\x85\xf2\x18\x9e\xaf\xc8\xec\x12\x03K\xf1\xc05,\xf55\xe4\x0b\xf8\xbf\xe8\xa3\x05\xbb\xe0\xfd\xdfH/\x9a\x82Q\xb1\x03\x8a!\xb5A\xac\xf5\xf3\xe8<\xbf\xceHI \x87\xef\xed\x1f\xeeyMX\x89\x04\xd5\xc9\x13 \xf2\x10f6\xae\x98\x16MV,\xb6\xec\xc8\xb7\x1c\xc1\x86#\xdc\xab\xac&e\x16\xa72|\x8b\x8f\xc1%]<`\xc4\xac\x1a\x8cQ3p\xdd\xbb'NPf\xf5\xda\n\x95\xa5\xffF\x8dfK9\xc3&\xa4\x8c\xcb'%\x0b%(?\xea\x03\xc9g\x10\x088\x082r\x0d\x15\x9b\xae/~\xb3\x1a~\x1e\x04\x11\xe7\xb2)\xa3\x83\x87}\xd6zr\x04\x19C4\xbcr\xcb\xe7]r\xc16\xae)7\x99\xc7\x9c\x12\xba9\x89\xdb\x0b\xc3\x9d+s\x0c\x1c\xe1#\xb5G\xec\xd8\xf7\xc2\x86\x02\xb4q\\\xde^\x9c#\x00\xd1p\x8fy\x8f\xcbGk\x96\xc1\x97\xb9)w\xf3+\xd1\x92\xfb\x95\xea\xbf\x98t\x05\x86s\x16\xc9\xa1N0g\x8a\x1a\xe4l\x02\xcd\xadC7\x81,{\xf3uN\x92\xef\xbay\xd6\x94P\x17}\xd4\xfd\xf3\xdb\xd3\x0f=\xc7\x00Z\x9e\xbf}\xfd\xee\xed\xe9\xab\x0f'\x13\xd0\x88\x02'\xaf\xdf}\xf8?\x138\xe8\xbfY\x92\xfa\xc3M\xe1\xc4\xb8\xb7/~;'\x01\xdd\xe8\x11v\x83\xea\xea\xa4\xfak\x9c&s\x11\x15\n\xd1\xd6\xb0 \xf8\xbeN\"9\x05\x98@\x12\xd1\x99\x8a\xa4g\xa5\xef\x1d<\xd2'o\xec\x88\xd4\x067\xf1/\xb5=`\"x\x1f, f\xc68Y\x17\xf5\x8dD\xa4\x97\xf1\xac\xce\xcb\x1b'\x88R\x92o\x9bR\x1f;\xfa\x8d\xb1]\xe7\xd4\xa5\x90\xa7\xed\xb0l`\x90Dl\xa2\x94k8\x82<\xbcS\xd8\x9a7\x07\xdf\x05,Ve\x0f\nm\xf5\xf3\x95\xd6K\xdcpL\xd8\x00\xc5\x81\x94S\x04\xa7Tk\x9fR-\x86\xa9\xdc~\xc4v\xd5\xaf%\x83\x8e\xddb\x82ZK\xfbI\xf5\x01\xdd;\xc6M\xa8\x15\xc8&\x19l_\xac\xb7\xce\xd2\x88\xbd\xfc\x9f$#e2\x93cx\x9e\xc6\x95\xd5! \xf8\xd2j\xb0\xbeO\x9bX?\xad\x89:w\x92\xb8l-\xf9\xeb\xeby\x19\x9aQ\xfb\xe1#\xc6\xe1\xef\xf7rj\x08YB\x97\x81S\xec \xff\xa0\x9fiD\xd1\x94{\x91\xa7\x11,\xbc\x89\xe7.\x08H\x9c\xa1\xfc\x8b\x86\x7fW\xef\xceItIn\xe0\x18\xe2\x88T\xb3\xb8 >>\x08P\xc5T\xe7,G\xaa\x7f\xf8H57\x12\x7f\x8d\x89\xd9\xd51=\xa2\xc7\xc6\x9e\x92+\x9e\xa7\xa9\na\x16\xea\x13q\xd2E)BLr\xc2gQ\x1b\x04 %\xd2\x1e\xe5\x00\xd1\xb7\xcb\xbb`\x92\xaaxD\xf9\xaa\x9a\x13\xa2&\x94\x9a\x88\x94\xd10O\xbc\xae\xc26\x89'\x0dTy\x17u\xf4\xcd7|d\x18\xf4Or\xf83\x7f\x81 \xf1\x85p\xa2\x07\x8b\xc6\x0e\xa3\xf7\x84\x13\x94U\xeb\x05\x86\xda\xf0\xbc\xae\xb9\xc5\x97\xfaA\xb2\xd0\xa9h\xcb\xb2 \xa1\xc2tn3v(\xeeuo\x7f\x17\xec\xf6\xf7Q'\xe0%S\x7f\xe9N\xad\xc2\xec4\xfe\x92\xd7Q\x04lq\n\xf5\x177k\x02\xe4\x98\xf2\xa9\xf5?\xa2G\xbb\xb4!\xf6\x98\x07\x12\x06\x89\x0c\xa2\x92\x14i<#\xfe\x83\xe9\xc7\x8f\x7f\xff&\xfa\xe3\xee\xb1\x1fL?\x9e\xfdr\xfb\xf9\xec\xc12\x04\xef\xe3\xc7o\xeeyJ\xb5vW\x9f\xa5oT\x10\xfd\xf1\xd8?>\xfa\xf8\xf1\xa3\x1f|\xc6m\x1b\xed\xf2\x07g\x01\xb6\xf4\xcd~\xf4\xc7c\x86\x18\xdft\x03\xc2\xeb\xbd`\x85~\x8d\x8fV\xa7n\x96\x06|hF\xdc\x0d\x10?\x184X\xd8,\xef\xb7\xbf\xf9]\xff\xaf\x8e\xb2\xae\xe1*\xd8\x11\xb3(\xf3\xb5Qm\xf2:\xc6T\xde\x85\xff:.Z\x06|\xaf\xe3\xc2AQ\xd3\xaa\x85\xdbL\xb6\xd6y\x1e\x18\xdb8%5\xfb\xe8\x94\xd4\xad!\x9c\x92\xdaa\x08\xadZ\xca\x10\xfa\xcf{q\xa4\xaex\x92r*#\xbc\x8e\x8b>b\xae\xf8\xcbS\xd2am\x9c\x12\x9a\xcd\xa3\x8a\xd4\xecm{\x0d\xc3v\x0e\xea\xa1\xe5\x9fGK\xd2\xd7@\xb3D\xb8\xc3\x0d\xcc\xb9i\xa0\xe6\xe3\xd8\x16T\x8ew\xde\xe0\x8f?g4\xb4g\xa1\x85l\xf2\xf0@VQ<\x9fkF1\xecx\x0e<\x07\x83a\n\xd6\x98\x94\xfd)\xac\xf4Sh6\x94\x8e)\xba\xe2\x99\xe6\xbb\xee\x07\xc0\xb3\xf2\xe9\x9e/\xad\x13\x03Eg\x1a\xe9C\x1ai\xda\xbd\x19\xd3.&~~\x95\xd5>\xe1\x1e\x9b\xfe>ej\xf74\x8a\x8a-P[\\\xdf-\xb5T\xef\x8ae\xc8\xac\xc7c\xbd8s\xf4\xed\n\xab\x8bi}6~?\x0c7\xcd#.\xe9\x9av\xdd-*\xafq\x15D\xeb\xb8\xf0o\xb6\xd8.\xc3\xe3\\\xb3l\xf8\xddD\xf9.\xbb\xc9 \x00k\x0d\x00\\\xf7\x9a\n\x80\xb5\x1e\x00\xbf\xeb\xffE\x87E\x05\x85\xe9\x99\x8e/97\xf3%yo\x1eF\xf3\xa8+\x99\xc2y\xb6J\xd2\xf9\xab\x17:\x99\x0c\xc3Oe\xd2\xab\xfa|\x8c\xb5\xd7\xb5E\xc8\xf6>f\xd8G\xc6B\xd13\xcd\xffO\xd9e\x96_g\xc8s\xf8h\xc2\x0f~\\\x03c\x80\x16I\xca\xa2\xf2H\xd6\xe6\xef\xd1\x1f\xa7\x1f?~|p\xf6\x80Y\x1c\xef\x827au\xd3$#\xccM\x9a>\x0c<\x14<\xb19\xa69\x9b\xc3\xc5\x0d6\x9b\xc9\xf7\xaa\xf3\x87nB'}\xb8k\xf4\x05\xde\xef\xc9\xba\xa8o\xb0\xc1q\xf7\x1b\xde\xefk\xf2\xa96}(\xd4\xd8\xfc\x8f \xff#\x9a'U\x91\xc6hY\xca\xdc\x98\xf0i\xc6\x7fJ\x80\x0e\xce\xec\x93\x01\xa3B\xc4\x90Sz\xde\xbeh\xba\xd1Z\x97\x94\xa2b\xa3\x91\xefW\xcaE\xa5\xb7\xd7\x19)_\xbd\xe8a\xab\xd4\x8b\xa2\xe5\x8c\xae\xef<\x08B\xb8\xc6\xfc\x91\x80\xb1\xc8\xcf\xab|S\xce\xda\x1cE{'\x9d\xf6\xb4\xb6yvJXH\x9d\x92dcL\xab\xf4\xd6\x92\x14\xd03\xdf\xdb\x7f\x88\xd1\x923\xb9\xa1\xe8\xee\xeaW\x97\x92z\xc9$\xf5\xb2\xa5\xbe(\x87-\nY\x8e\xb9\xd2\x90Z\x1f\xb8\x0e/\xf7\x13\x93m\xa1\x1ck+:\x7f\xdc\x8cY\xaf\x8c\x8b#\xc2\x83\xf9(\xcch\xeb!6\xbaO\x1b\x8d\xa3\xa4z\x9do2\xba\xc9Xo\xdf\xed\xb7;+\xe2\x92d57\x90R~\x1ea\x8cr\xe5\x01^\x8e\xca\xd6\x0f<&\xec\xc9\xf7.\x176\x1d\xd5h\xf6\x03Y\xe4%y\xdd\xbaAu3\xe7/}c\xb8H\x0e\x87 h2\xaf\x03FSc\x03\x9e@\xa6\xaf\xc0\xec\x9e\xcc\xf6oby&05\xac\xbd\x84\xb9\xd9V\x8f\xc55\xe4\xc1s\xc6Z#\n\xc8\xfd\xc4\x1b\xd1\x83n\x9b\xddC1JA\x194\xfe\x91\x98\xd5\x8bb\xd5\x1b\x96y)\x87N|\xfd`\xea\xf6V\xae\x95a1\x97Va\xf1\xa6b\xf0\xc6r\x95\x92g\x030\xdbf\x8c\xa8\xc7m\x01\xac\x8e\x94\xb5\xdd\xdd\xb5\x8c&[\xdf)\xc8X\xa4\xc7\x16\xa4\xf6\xf5\x90\xaa|\xa2K\xc7x!\x82\xf7\x0f\x8d\xbb\xd8\x94K\xc2\x87N\xe6r\xf0\x95\xc5\xd5\x14\xc3j\x9eF\xe7EI\xaeHV\xbf\xdb\x94\xcb$3*j[\xc9\x94\xf6\x9e\x02\x81\xef\xe1B\xd2fb\xa6\xcd\xb4\x9c\xfb\x17Sr\xe6\xaa8\x03\x9c\xf8@\xd0\xfa\xe1[\xdaf\xb7\x7f\xc9\xe2 \x85\xcaN\x17\xa9\x86\xfa^\x92\xfa9\x8f\xecW\xc7\xb3\xcbg\xf39\xc9\xe6\x9b\xb5\xebHtVO\x836L\x82~\x9c\x0c\x86\xaf.\x99\xe5$Z\n\xe9\xcf\xbe\x1av\x8f\x18\xeb@\x1a\xae\x81s\x11\xd2*\xcav\x9e\x80\xa2\xe4Z\x88\x08\x87\x06\x8aL\xc1N\x9b\xcf\xa3\xf39\xb9\xd8,_\xbd0\xae\x00\x8e\x0d\x99\x9d\x16L\x7f\xb8y\xf5B\xc4\x9c\x17EcB\xdb\xfd\xc4\xb6\x14\x12\xcd\xf9z\x00y\x1a\xb0!|B\x8e\x9f\x08\xce\xeb\x1d\xdf\xbcC\xc8\xd3\x15i{\xb8\"\x8f.7\xfc\x18\xc4T*\x124\x12\x0b\xa6\xf5\xb4t\xaf0\x8f\xae#\xe8\xf0\xb1\x83\x839q\xf3)n\x1at\x1d\x84\x03\x18\xc4\x19\xe9\xd4=g\xb9]\xbbw\x87\x01\x12\x0e\xb6\xefpT\xecO\x89\xf2n\xa3{'\x19$\xb7\xe19@G\x1e\xcfk$Gi\xff\x15Y&UMJ\xc2\xe8U\xdc\xe5@\xaa\xd5\x9b<;\xad\xe3l\x1e\x97\xf3\xbf\xc5e\x96dK$\xbe\x0e\\\xb0\xf1FB\xa4>,I(\xf2\xc2N\xaat\xd8\xecH\xa2N2\x94;\xb5/\xc6\x86\xda?\xc5\xa7\xdb\x1b\x010G\x97\xeeu\xbf\xde\x9e\x969\x1b\xba\xe9{\xa09gH\x14\xcf\xe7'T\x80\xfc\x91{+2'\xa8\xeeSn\x1e\xb6\xb3\xaf\xb5\xadn\x1a]\xe7Wc\xd2\x8a\x08\xff{C_c1\x90\xc5\x9b\x881\xa4'6\xc9'\xd3<\xf0=\x8a\x00\xbb\x0c4w<\x959\xd1w\xb3\xcd,L~\xb5\xfd\xed?\x8b\x8bzS:\x06\xee\x80\xedW~\xef\xae\xc15\xb0\xf2\x9a\x8bKQ\x06`f\x1f]\xa9\xff\xd8\x05\xcc%\xe7\xa0^\x88$\xba\xeaL\x8d\xe6\xdf\xad\x84kwA\x0d\x1e\x1f\xe8\xc2\xf8\xd1\xe7\xfaP\x11\x87\x8f\xba\x99\x00\xb8[\xddw\x07A\xbb\xfd\x8d.M/\xf3aM\xf2\xecy\\\xc4\x17I\x9a\xd4\x89=u\xc2\xd5\x97&\xa0\x80\x8e\x14\xe6\xb7SQ\xdc\xbb\xc7\xb2Ox<\x8d\x00^\x1b}\xfe\xdcKI\xc1\x9e\x95\x1b\"*\xceXL\xff\x93yR\xc7\x17]\xa7`\x93\x03o\x92g\xaf\xb2E^\xb2(\xf4\x16\x0c\x17\x1a\xb6x`Jz4\xc5\x18\xfb\x04\xdd>\x8c)\xbe+1\xa0\xf7\xccc\x1c\x03\x1cj\x97\xc8G\xb7\x91M\xa4\xce\xc2'Zy\x1el'nI\xaa:/\x89l\xc7i\xf9\xd9\x05[lJ\xda\xc3tZ\xca\x9c\x0d\x13\xc6j\xedi\xeb\x14\xed;G\x9c\xe9\xc7\xab\xb52\x84\xdc7\xe5l`\xa1\xe30!\x90\x19z%\xd6\xd8D\x95\n\xbe2\x84*\x08!\xf1\xcb\xe1\xd0E*\xcc\x9d`\xa5\xd7\x1azr\xda\x18l\x1e\x13Q\x90\x007\x96\x1e\x83*\x16\x93^\x81\x17~\xa8\x87,\xc9\xe6\xad\xaa'\xd9\xbc\x8f\x15\xfd\x81I\xebP ^\xd9B\x7f\xb3\xab\xbb\xd6\xb4\xf1m\x12a\xbf\x1f\xee'\x87\xb8`\xf2\xf5\xcc\xb8\x8eD\x08*\x01\xf7\xb4\x12\x18b>)8\x10\xefg\x11=1\x10\x80\xbe7[\xc5e<\xabI\xe9\x85p\x9f\xa7\xf9\xe2\n\xee\x01\xb1\x04A\xcc\x1b\xa2\xcc\xe3`3\xdaV4Y\xfa\xb9\xddR-\xd2]\xbd\xc5\x98\xf7\xd5\xb0*\xe1\xf3\xe7a\x941\x98\xb8\xe3\x04F\xaa\xef+\x03\xf2[n\xd0\xea\xa82\xe3*3\xbb$\x99&\xd6\x15E\xc5V\xaa\x7f\x91\xb6\x9b2w\x86\x1d\xd4\xdd \xb4v\xd8\xd9\x0bp\x04\xaf\xe3z\x15\xad\x93\xccG\xa7\xad\xd6b\xfd\xc6\xfb\x02\x1dt\xf86\xf8@>\xd5\x83[!\x89fy\x9a\xc6EE|d\xe1\x12\x13bg\xf2e\x0fYs\xb8\xcf_\xb3Y\xe9\x12\xcf\x8aH[\x95\x82\x93CQ\x94\xf4<\x12\xcb/\xb8\x15\x8f\xe4\x96\xe2\xa6\x830>\x01\xee\x8d\xd9q\\\x11\x02\xa2XO8n\xfe\x14\xdcy\xd0\x84\xe2\xeb+B\xf5\xea\xa5\x86\xf7\x9e\xd5\xc9\x15Q\xf2\x08\x91\xe8\"\x9fwRH \x81z(\xbc\x8f\xee\xbb\xdf\xb5\xff\xda\n\x9cW6\xef\xdb\xc7z\x86\xb3\x17f:\xd6\xfb\xea\xb2(\x0e\xfb\xdfv\x1b\xafZ.^}\x0f\xaf\x94\xf5\xf2\xb0+\x15\xcf\xf8\xf3n?\xcc8\xfe\xf0\xdb\xee\xf3\x82\xcf\xad\x1bub\xce\xfa\x17\xe1\xb0\x1f>\xea\x0e`\xc5:z\xdcy|\x85\x8f\x0f\x0e\xba\xe3Z\x8364\xdb\x92u\xdf\xcb\xdfu\xc3\xb9\xf6n3\x17\xaa\x03\xdb\xfe\xc3'\xddQ\x9d\xf3\xee\xbb\xd3\xb9n\x1c\xdb\x92~\x00\xe4N\xe5\x13\x8cQ\xa6\x8b\x1f\xdc\xaa\xf6 \x8e\xba\x9e\xd2\xa7p\x04O\xda\x8f\x9e\xd3Z\x9dj\x97\xc68\xde\xcf\x8c&h\xcc4L&\xcf\xa2\xbb\xf6\x14\x1fu\x93qMZ)\xc8\xba\xac\xae\xce:\xec\xad\xb9Sz\xb6\xca\xa0\x80\x8c\x84\xabO\xfck\x96\x8ew\xd8\xfa\xec\x9d\xd8n!\xf2\xa4\xdd\xbe\x90\x96\xb7\xa9\x06%O\x8b\xa8\x9f5\xdbtv\xc6\xe6\xe8=\xec.\xd1\x14\xf2\x03\x8e\xc0C/~\x16\x8ck\xc2L\x155w$1\x1cC\x0c\x13\x88\xbb\xf6x1\x9a\xe2\x05\xa1T\x95\xd5\xc9\x9a\xf4\xaet{\x13\xa6\xfb~\xd5\x89\xf3@\xc1\x94\x85<6\x01w\xa9D\x07\x98n\xf8\xa8DU\xcd\xd1\xfe\xe8Q\x95`\xc8\x81s\x16\xbdC1\xa0\x88\xcek\x0eD\x1e\x0e\x89e\x87\xffQ\x8d\x88\xf0*\xabsLa\xbd\xc1\x85\"\xb8P\xd9\xb0\xb5\xe4\x07eUuKJ\xc9\xe3:B\xe0\xbe'\xb3<\x9b%)\xf9P\xc6Y\x153\xfeuI\xeawy\x9e\x92\xb9\xbf\x83\xcc\xc1,\xdaT\xe49\x9e\xe6|\x01;\xb3\xce\xa3\x82\x94T\x02\xf5\xdf \xb1\x11\xe4|\x10\xe1`\x7f%I \xe5)\xf2\xe1i\xbd6\xe9\x8d\xf0*d/\x84U\xb4\xc94\xeb\x86\xd6D\x9d\xed)\xf8\xec\x9e\xf4\x15<\x85\xbaI\xfb\xf74\x80\x9a\xab\x81\xf0\xb7\xaf\xbc\x1b\x1e\xec+\xb3\xa5\xf0\xb3\xf1\x96\xc2U\xa4\xcbj\xae\xf3Q\x13f%t\xe9>\x7f\x86\x9d,:_\xe5\x15\xbf\xdb\x18cC\xfc\xb3\x91\xf4\xec\xf8;\xdc\xdeU\x02u\x07\xfd\xde$\x1f)\x9f\x9dj\x9e=\x1f\x06\xdc\x1b3\xe0\x1c$U\x0e^=\x9b\xce.\x88\xef\xdd\x1b\x0fN\xdc\x06mX\xf20{\xfd\x9bW\x93e-\xbb\xf6\xc2\x16\x9e\xe7Y\x1d'\x19)_e\x8b\xbcO\x05z\x07\x83\xf8\x8bN\xf1}\xffl{a\xb3\x88\xc7\x08R%^\xbe\xc2\x11\xbc\xefZ\xa95\xc3}\xa1\xf8(%U;\x88\n\x0f\xe7\xf9\xa2\x15\xd9\x06\xe3\x11\x0d\xf4.\xe6N\x07\xa0\x10\xfdfn\xb4A\xde\xd3\x87\x1e1T#\x82\xd2\xb9\xff\xd8\x93\x8c;\xdfL\xe0E\x87\xeb\x10A\x11\xaa\x1fn\x18\x01B(L\xe0\xb2\xc3\xd4a\xa2\xd4\xd7y\x96\xd4\xb9K\xc4\xc7\xae\x84\xd1\x112\xcf\xd9\xbd8\xedl\xc0\xd2U\x7f\xe8B\x03\xb6\x1f\xa3\xd6\xb8\xfc2\xb4\xab\xaf\xaf\"\x92\xfdcC6\x82T\x8b\x00\x19\x92x\x86L\x08\x95\xf5\x9e\xc7iz\x11\xcf.\xd5\x8a\xb9F~\xa2\x87\xd8\xe0\x9c\x196\xbc!\xd7\xd6ik\xe7\xfc3\xcf\x19R\xfa\xde\xe1w^\x10\xc2&\"Y\xb5)\x89\x92\x14\x97\x03\x02\x93J\xf77\xab\x10=1\xde<\xc6\x13\xee\xd6XG\x17T`!sf\x0dQ\xf9\x1f\xd0\xacY\x8cJ\xdf$\x0b\x8c+1\x89o$#\xad\xb8\x9c\xc6g\xf4\x8bp8\n\x07\x83\xd6\xe9\xe6\xa2. \x9e\xf2\x92(8C\xacc\xc6\x82\\`\x11\xadbT\xaerH>\xa6\x90\xfcQ0\x1f\xba\xee\xd4N\x1c\xd6\xf7\x8bF|\x15]\xc5i\x82&#\x1c\xeb\xfc<\xe4|\xde\x8b\xb7\xaf9A\x11\x96\xec\xad0C\x0dr<\xf1B\x93\xad\x8c\x07\x94\xaa\x93\x18\x83\xa3\x15qU%\xd9\x12b`\x95!M. \xfca\x9e\\\xfd!\xc4\x97\x80\xfdr=\x85\xe8\x07\xdf\x07\x90\x97\xf0\xfd<\xb9\x82\x07\x7f\x8a\xd0-DL\xd0\xb1\xc7YJ\xdb\xc7\x0e_\xe6\xf9@w/\xf3\x9cu\xf62\xcfEg\x99\x1a\x03Z\x89U\xc6\xf9f\xec\xf5\xc3*\xa9`\x1d\xdf\xc0\x05\x81Y\xbc\xa9\x98W\xcd&K\xf0\x02!\xc9\xb38Mo \xcd\xe39\x1dP}\x9dC\x92\xcdIA\xe1\x9b\xd50\xcb\x8b\x84Tt\xc8lL\xdc\x07\xc7\xb0\xa5\x98\x9fX\xdc\x19\xf9\x0b\xd3m\x1bR\xf8 h\xe2\x9ci:\xb0\x9a\x9fRq\xbb\xe0n\xa7\x06\x05\x122H\xe7E\x99\xcfHU!o\xc6\xc3\x99\xfaUt>c\x7f\x1a\x15B\xf4\xeb\xa5~\xe2T\x92\x7f\xe3\xeb\xf2d`\x12\x8c\xa1QSa?\x1d\x12{\x0cSY\x80\x7f\xee\xcf\xd8\x15\x80Y\x07L{X\xb0\x1e\xfaB\x05\xe5\xde7\x17i2\x93\xf1\xbb-\x96)sa,k=[\xd4\x9237\xf3\x85\xf9\"\x14@\xab\xa1\x17E\x9eq\xba\xc3\xd2O1\xac@\x82\xa4d\x1e\x84\xb0\xd0\xb6\xa3\xbfk\xfd\xb1'\x07<\xc3\xd8xvS\x0e\xe0\xc0]!\x1f\x99\x19\x00\xb7\xa6\x12\"r\x84;o}\x93\x82\xfd\x06\x8e\xe0\x95\xb1\x89\x0b*\x82a\x13)\xfe\xab C\x00\\9\"\x89w\xf7d\xa5\"a\x16\xc2E\x08I\xe0\x88\x08\xc6C\x8b\x1bK\xe3\x92^\x07!\\\xdb\x8f.\xb7\xfb\xfcf\x95\x07N Ud\x1c\xce\x08\xa2_X\xdb%\xd6\xcf\xcd\x81\xf8p\xcfD\xe6j\xdc\xed:\"\x83\x8e\x0c\xc6T\xb5\xaf\xd0n{_Q\x96\x7f\xe0\x01\x020\xd4D\xa3\x9191\xd0/!V\xed; '\xaf\xcb\xddc/\xa7u\x8f/9\x0b\xfb\\\xcek\xa1;@\xeb\x98\x9e\xb7n\xeb\xa7F\xf7\xa0;\xde\x93\x10b\x1dD(\xac\x14N\x8e\xb9\xa5\x0d\x86c\xdd\xe0^\x1b\n\xee3\x8ffq\xf6\x9el*\x9e\x19\x8a\x8eb\xd3\xc92C\xc5\x0b2\x8bg+\xc2v:\xad\xa1oQP\xf6M[_6\x8f\x9e\xff\xf9\xe4\xf9\xff:\xfd\xe95\xaa\x16\x99\xf6Q\xdf\xc2\xa6\x97\x93c\xc4\xc7\xe2t\xd8D\xf9\xa6&\xe5\x9f?\xbc\xfe\xd1\xd4Ke\x1b_\x08\xdd\xa8\xbc\xa2\x88\x13b \xb5Q\xe1\xe2Y\xaf\x16\xe9\xba\x90\xa9\x97O\xe2\xce)\x94\x9e\x94A\xa8\xfaWf\xcc\xb1r\xb0e\x10\x8c\x80H\xf5\\\x06\x9c\xe1\x91\xbf\xe5j\x1b\x1c\xec\x85P\xc0.\x1c\xec\xa1S\xf4\xc7\x0c\xfc\x8a\x94W\xa4d\xd5g\xe6\xea\xfa\x99\xe9tWtg\x1dx!h\xaee\xfb4\x03\xb5K\x86F\x0e\x19\xaf\xdd\xd3\xef\x19P\x81\x07\x98r\xd5\x90\xe9'\x94GIV\x91\xb2\xfeP\x12\xc2\x1c\x1b}F\x9d\xe81`\xe4\xd3.X\n\x80P\xb3\xd3kE\xab>\xf2:\xefG|\xfa\x85\xf7O\x87\x8f\xbe\x0d\xf4\xcd\x9b\x8f\xa5\xc6\x0fH\x03$TM*\x1a\xe37|\xed\x98\x95@\xd9DS}\x1a\xa01\x8fN\xb9l\xd0A\xb1\x060\x00\xeb\xb1\xf6;\x98\xc8Z,\xe4+\xcf\xeb\xd7\xb3\xf8\xfb\x82\xab\xbb::?'\xd5\xeb|\xbeI\x89F\xcd\xc3C\xb2f~\xf7\xea\x0d\xc3\xe7b\xbc|4\x7f)\xd5f\x8e\xa1\xd4Z\xd8\xcd\x859\\\xdb\xb4\xeeV\x1d\x0d\xaf\x83r>\xff;\xaaVqA:f\xd3t\xe7\xce\xca\xe4\x82L\x94\x8at\xfa\xa8\xc2\xfa\xc7&)\xc9\xbc=\xe2yR\x15\xf4,v\xfe\x80\xf9\x94\xd5C=4+\x10\xdc\xe1\x12\x84-8\x98\x11W\x7f\x0b\xcd\xaf<\xc0\x14\x16I\\\x89\x90\xb2\xccK\xf5\x8e\x04\x1f\xf4\xb8.\xfd\xddt\xbd*\xf3k\x8c\x80t\xc2\xbfj/\xa9\xde\xbc\xdb O\x95\xcb\xe4\xc7\xdd\x1bJ~\x9b\xdc\xb3S\x14\xa9\xae\xba7\xa41\xaf\xdf\xc5\xde\x0d\x7f\xdem\xbf\xe2\xcf\xbb\x17\xc0\xfc\"\xb9\x97^\x80_$\xf7\xd2\x0b,\xf8\xf3\xee\xc5/\xbbH>x\xa2\xbbH\xce\xfc\xc3\xc7\xddy\xb1\xfb\xe3\xfd\xc3n\xfbW\xbc\xfd\xee\xb5\xfa\x9a_\xabw\xdbY\xf2\xe7\xddy\xb1\x1b\xe4\xde=\xf4\x05\x07\x7fw\xba\xe7\xbc\x99\xeep\xae\xf9\xf05W\xc4\xb4zw\x94\x9f\xf0y\xef\xda\xfa\xb4\xafN\x7f\x0eG\xddh\xda\x97p\x04\x0f\xdb\x8f\x9eQN@\x04\x00|V.\xf1\x12\xa9:\xebD\x18|\xab\xd6\x12\xa1\xeb\xba\x95\xde\xa9\x950\xf4n\\\xe7\xa5\xa9\xf6\x07\xb5\xb6\x88<\xd8\xae\xf2\x9a\xdfb\xcb\xdf\xd3gg\x94g\x9b*\x03.\xe3\x9b3O\xf7\xf4\x87\xcdbA\xca\xde\xbb\x17q\x1d\xff5!\xd7\xbd\x17<\xc7\x87\xee\x03\xd2{\xf82\xcd\xe3\xfa\xf0@\xdf=\xbe|\xf4P\xff\xf2UV?6\xbe\xd9\x7fd|e\xea\xecu\\\xf4\x9e1\x17\x14\xf1\xf8C\xe7-\x8b \xd8\xfb\xe8\x94\xd4\xfdg\xc8\xdf\xf5\x1f\xdf\xac/\xf2\xb4\xf7\xf8\xa7\xc487|\xf5<\x8d\xd7\x05\x99\x9bk\x98\xa6O\xdf\xb5\xe6O\xc9\xbc\xf2\x1e\xc9\xa8\xf8\xeam\xe7\xe3\xbf\x91\xf8R\x02ig?\xd4262,\xef\xab\x10~\x0e\xe1M\x08\xefu\xb7w/B\xbc\xbb\xc9\xe0\x1e\x9c\xf6\x99\xeb\x9f\xf8\xab\xe7\xfdW\xff\xe0\xaf.\xdb\xe7\x03ei_\xe1%\xee\x0b*\xb5\xc31\xbc\xa2\xe3\x90#\x98\xd0\xdfA\x10\xaa\xda\xd3\x17R\x84x\xd1ol\xe7Z\xcd[\xdaa\x9e\xe8\x0c^\xe2\xbdBWJ\xa5\x9f\xbe4\x89\xc1thW~M%\xee\x1fe\xd3\x18\xd5\xf7E\xf7\xe02\xc4\xbf\xa5\x1d\xff\x13\x8e`E[\xe9\xbd\xa5\xe5\x078\xa25\x8e\xe0-\x15\xb8\xf1\xafwz\x05\xc6\x85:\xc1\x8a\x8e\xe2G\x83\xaa\x03[\xf9 \xdb{F\xff\xfa\x01\xb5ToLr\x81\x98\xeeO\xac\xee1\xfcr\x0b\x13Xv'\xff\x13\x1c\xc3\x82v\xbd\xf1_0\x1d\xe7\x04f\xf4w\xcc\x7f\xf7\x1a7\x82F\xf4\xba\xf3z\xfa\xcf3\xd9\xc1\x1b\xee/\xfb\x8bA\xefH\xc7\xb8\xa6\x1d\xfe\x93N\xbf\xdf\xdb\xef\xcc\xbf\xde\xa3\x0d\xde{`!\x18\xcb\xa0\x8f\"\x7f\x85#x\x8f\x9aj\x1d\x9a\xfcU\x0e\xf2\xaf\xfd\x97\xef16#bF\x88~\xed\x0d*\xca\x08`\x92}\xe9\xd9t\x00\xde\xdcbXC\xbf\x14\xbb\xb1D&\xe7}\xd7\x12<\x08u\xe8\x7fn\xeb\xd2p\x9f\xf3\x02\xc7\x9d\x87\xa0t\x9c\xbbvLa\xf6g8\x82\x7f\xc01b\xc6\x1c&P\xc0\x04\xff\xbe$7\xd5\xab\x0c\x03\xe2\xf6:\xfd\x1b\x1c\xc1K8\x16{{\x02\x7f\xee\x01\\h5\xfd\xbf\xd1U\xab\x15\xde\xcf4\x93\xbf!5)1\xc6\x13z\xe8\x9e\xa1%\xfd\x0b\x9c\x8f\xdb\xec\xe4\x93\x91\x1c\xe7\xc1\x93.\x87$8N}\"\xaa\xef\x1e\x8f\x9669<\x12\xe6u\x81W~;\x18Z\xbc\x95\xeb`\xe4\xb8\xf7\x1f\x1b\x92\xc2\x1ety2\xce)?\xd6g\x85=x\xd2}\xbei\xc2\xf62\x0f[\x11A\x97\x1d\xa0\x15%#\x83\n\xdfV\x94\x8d\xe9\x19\x8b\xb2\x81\xce[\x14\x04<\xcc\xc6\xb0{{{}a\x02\xb1\x1e\xe8N\x06\xc1\xeab\xeb\x81v\xd8cX\xb9{\xd4\xf6\xab\x8d\xcb\x9c\xb4\xaeuG\xae\xf0\xe3\xc7z\xcc<\xec\xc9H|\xb0\x8f\x0f\xb7\x1dl\xe2+\xa9\xa0\x99\xc9\x18&\xec\xf7\xbe`\xf0]4\xcc\xa5\xde2\xfed\x1b\xa6\xfeF\xa3Q\xa3@\xaeZi\xd7\xa8L\xe1Z\xc6\xfb\xb0\x0f\x13\xc0\xe0\xfd}\xe2e\xbdc\x93\xa8KA\x1a\x0b\xb9\x82\xc5\xfd\xbc\xbf\xcf\xaebs?i:c\x1d\xa1\x14\xc9\x82\xf7o\x82\xa7\xb0\xbb\x1b\xc3\xf7\xb0y\x1a@\xc5\xcd\x11\xa65\xecB|\xa6?\x17Y\xe3\xfawr@\xa9\xec\x816\xb5/{\xa9\x9f\x06\x90\x8a^L=\x08\xf6\x87\x05\x0c\xcd\xfc\nS\x8a\x11\x96S3\x04\x9d\xdeo\xfb\x85\xefn%a\x0f\xbe\x1f\xf8\xa5\x01A\xbf\xc0\xf7\x91S*\xa6\x15i\x12\xab\x87\xe05*\x16\xaf{Y\xce\xb3\xd3*w1\xb7\x81A\x05c@B\x0d\xd5\xcbzZ\xae\xa6\xf5\xa7=H\x99\xf7$\xea\xe2\xd9\x0dV3\x05\xc9\x1f\x90\xfe1^w\x04N\xd1\x884M\xe9/\xafr\x9b\xc0\xbc^,q\xdayTs\\\x11\xb4\xdedQ}\xc94;3\xd8\xdb)\xb0\xa4k\xd9\x80\xc2\xcf\xfc\xfd'\x07\xc1\x17h\xcf\xbe\xf6\x92\x1bM \xf54\x03\xc3\x88\x18\xbd\xa4\x92l\x91k3\x87\xd1\x92\xe6Km\xee0\xc0\x94\xb5e6\x81C\xfdKT\xdcM\xe0a\xef\xa5\xc659\xb3\x1ao\x82\xb2nSrF\xb9\xb6\xfb\x9a\xfb\xd0~\xd3\xccOs\x96g\x8bdYEi\xbeDs\xc0~=F\x02J5\xdb\x00\xa8f\xa7\x89\x8d\x91`\x97Z\x92 \xcb[\xafDR\xc5\x12\xfe\x04\xfb\xa8\x87f'\x00\xa5\xca\x94\xb0\xee?\x05J&\xcb\xa7\x10\xef\xee\x06\x94F\xd2\ngjkZ\xb2\x89\xa0\xfa\xd3\x91\x12\x92\x95+M\x83)9\x8b\xe2\xa2H\x11\xe5\x06\x0d\xda\xc5\xe9\x1a\xd1\xb5D\xfd6&)f\x17\xee\x1e}\x88\xf7\xb3\\/\xdb}\x8fOY\x05\x8aD\xbd\xf7\xf4!{\x8d\x18\xd8{\x8fO=\xad[>^Vc\x0e\xa8\xca\xe4\x17\x8f\xa8\x99\xf4\x91\xc00]\xa7S\xc2\x9a\x07\x8e21]M\xe3\xd7\xb9vpc\x8f\xc4\xc6\x978\xae\xa5u\xfa\xb3\xc0\xc0`\x90\xce}\xc4:\xbe$\x7f\xae\xeb\xc2\xa7\xc4\x97\xbc\xa4\xaf)Y*\xf2\xaa\xc6\x1f\x06\xd5\xc3\xc5&I\xe7\xef\xc9?6\xa4\xaa\xd5\xe6\xd4\xe7\x06\xd2\xc1r{\xab\x1f\xf1G\xfa\xfa%\xa9\xf2\xf4\xaaU\x9f?\x1a\xac\xcfMM4\x9f\xf17\xfa\xaf+R&q\x9a\xfc\x93\xbc'\x95\xfa\xad\xfa\\\xffe^\xbc\x9a\xab_\xacHZ\x90\xb2\x8a\xe8\xf3\xbbEc7\xdc\x91\xc4\xad\xd6\xeb\x0c\xf0\x84\x9e\x96\x8d\xfa\x84\xfe\x10-\xf7\xe9\xd1\x15w\x1d\xa1\xb5\x8cGQ2\x81\xd2p\xd2\x98\xa3\xe3\xf2.'\xba\xa8<\x1aM\x8e\xe0C\xe8h\x91+\xc8\xc5\xa0Q>W~\xa1\x97N\x94r\xcd\xa7|a\x00=\xf0If\x1anF2\x15k\xceNDx\x0d\x83\xe7wGp\xd0\xb9\xdd\x00^\xb9\xe5\x9c\x7f\xf9\xfc\xd9\xc0A\xb0\xaf\xf5\x90e\xfb\x7fS\xc6\x17)\x19\x00e\xb6Y\x13Q\xc7\xc0\x10,I\x8f.\x01h\x82\x10C\x1d\xd9On\x01\xb0\x1e\xbf\xa8\n\xe9\x96#\x9f\x88-\xd3\x1f\x138Dl\x11\xad\x8c\xc0\x9d:\x9a\xfbY\x08^\xcc\xfd\x8a\xb3\xfe\xd4s\x17\xfb\x18\xde\x9c+\xef\xdaO\xbdRG\x05KL\x05\xb5_Gt?\x1f\x1c*\"\xaf?\x1d\x1c\x82J\x072\xff\xe1\x81\xf2e8<\xf8\xce\x97\xdfn\xfbek\xb4\xe3\xbe\xdc\xba\xcf\xc3\xc3\xc7\xe6O5R{\xfb\xd0o\xbd\x92$\xb2\xd4c\xb7@-\x0dr\x13c@\x1fy\xf6\xdb\x93T\xea\x07\x93\x1b\xf1M\xec\xb6.\x1f\n\x7f\x82\x83\x8e\xb5x\xc3\\\x1e\x9c\xc1q\xfb\xe7\xc4\x98\n\x8d\xb29\xbe\xa6\xf5Cc\xeb\x87\xed\xd6\x0f\xcfP\xff\x1eDW\x07o\x0bRbL\x9aWh^\x12\xd7 \xc6/\xb9y\x9d\xcf5\x1e\x9f*\xa8[\xa9\xddTE\x0b&kP,\x10&\xe8\xf87\x13\xf4#\xf0I\x10\xb0(Qy\xd39s\x84U\xd2r}\xac0\xc7\x96\x174\x86a\xab\xf6'\x01L \xe1W[\xfaE\x1e\x9e\x9e\x9e\xbej\xfd\xc5\xcc\x02\xc9@8K\xdd\x12\x8dC\x00\xfb\x12\x99\xc8\xad\xc0A\xbfnG\x84\x80]\xf0\xce1}P+QZ\xb5\xf3\xff\xfd\xfe\x9b\xff\xf1\xf7{\x7f\xf4\x83\xf3\xdd\xa3\xe9/\x1f\xcfn\x9fN\xbe\xff\xd3\xe7\xe8\xe3\x83\xe3\xf0\xe3\xc7?x\xde}\x96<\xed\\g\x99\x0b\x0df\xb0\\\xe8\xcc\xf3\xb0\xb1\xa1\xdbo\xfa\xad\x95~}\xff<\xf8\xe5 \xbc\x0dD\xd3J\xe6\x12\xff<\xf8\xa3@\x80\xe6\x83\xe9\xf9Y\xf0\xc7o\xf8s\xcb\xc6UF\x851X\xe7~M\x87\xd1\x0f\xa4nX\xdc\xd8v\xa0\xf0\x06\xbd\xfb\xfdtL\xa667\xb66+N\x1fw\xf6\x90\x03q\xc6\xc4\xcaDWA\xdc\xc1\xb1\xe0Vb\xcf\xeel\xb3g?\x7f\x86\x1d\x12\x15q\xbd\xaa\xfa\x8du\xaa\xb3jC\xb1-@Qs\xf1\xea\xfd\nR\xb6\xcf!\xc9\xa0\xd4\x9b\xa8*\xeaXZi\x9a\x1b\xa2\xcc\x03\x87\x85\xf7\xee\xd9\xfbg\xafO>\x9c\xbc?e\x83O\xa2:\xff\xa9(laSD\xb9\xe2\x0eg\xb4\xa7ibP\xa6\x8aB;\x8c\x07\xe9el\x83}\x1cX\x87\x04\xd0\x18j\xdbk\x8aR\x15df\x8c\x13\xa6+t\x95XX\xd1\xdc\xfd\xa35\xa9W9\n]-(\xbb7 i\xfed \x9c\xa8Z4:(]\xc1\x0c4\xbe\xc9\x06]-(\x85\xa1W\xb2D\xe8\xcd\xe0Gz\xa7\x97\xfe\x9b\xf6\xaf\xadT\x96\xa0U[b\xe3\x9a\x0bp*g\x95~\xe6\xef?\xee\x06\xff\x00n\xb6\x86o\xbby(\xea(\xa9\xde>;=t\x125\x98.$/H\x16\x17\x89\x91\x89\xe0Y\x15(\xae\x17\x0d\xae\xd3\xc9\x1ez\x1a\x16<\xa9N\xaf\xe3\xe5\x92\x94\x07#\xc6P\xb1O\xb6\x18\xc3\x81n\x0cy\xf1j\xce\x12\xf0\xd7Q2\x7fY\xe6\xebwq\xbdz\x8d\xf8\xcd\xdcI\xeb(%\xcbxv\xf3\xaa\xff6\xa6o\x97\xa4\x96\xc7\xf9\xfb\xf8z\x84\xf8\xc2\xd9[F}\x8f\xd9Ib\xd7\xd7J\xc9/\x12[\xd7\xbc5\x18!f\xbb\xd5\\+\x11\x8b\xcb&\xa1\xdf;x\xe2$\x83'Nb\xa3z\x89\x12\x19i\xc7p\xef%H^\xa2\xf2\x85\x83\x0c\xca4\xf7\x13\x19\xf0\"\xf6\xf9\x1f\x9b\xb3\xa8\xca\xd7\xc4\xb7\x03\x14\xba+\xc2\xee\x16\xb5uu\x91\xd7\x0c\xd9\x10\xd0>>\x9bK\xdc\x80#\xd8\xd0\x87$\x9e\xad\xd4\x87\x15\x8b\x93Q\xaeQ\xcb\xc5w\xc4\x98\x0dQ\x90\x99~mY\x005D/\xb3\xd4\xa1\xb3\xd9\xc1\xb5F\x96\xaf\x8e\xbe\xf9F\x8emn\xba\x8b\x82\xde\x89m\x0c2+\x0e\xda\xccx\xca\"\x9f\xbd\x17\xc2\xa2uZ\x0e\xac\x9d\xc0\x18\xcc\x92\x15\xafIMJ\x0d\xdb!\x8a\x1cgE\xc7\x19\x07\xb0\xe3\xb0\xe7D\x91r\xe0\x948\xf0\x08;\x9did\x0d\xf6{\xb3<\xab\x93lC4\xa9a\xd4r\xc5]qs\x9f9\x7f\x99\x9cqE\xa1\xddj\x83\x02uK9\xad\xa8tB\xffc\x91\xca3\x8a\xc6\xf8\xf4\x08\xa6\x99ev\xc0\x87\x86\x87\xcb\xb4r\xa8M\x076k\x84\xa6\xfd\x00f}{'\x13\xbd\xd4\x15\x12\x9d\x9f\xe7e\xb2L\xb28U\xc4)\xe6\x96\xa1}\x83\x12\x8cBT\xc2\xf6O\x96\xb7\x9f%L\xe7W\xed\xd6\x81\xe8\\\xab\xbbE\x86\x00Td\xc4\xac-\xf4\xba\xcd\x98\x02\xbc\x80#\x98M\xf7\x1c\x00NKa\x84\x91\xe9\x0d\x15P\xda0*:0\xaa\xac=\x9b\x19%\xfb[\xe4\xe5\x9bm\xcc\xce\x18\xeb\xb6\x04\x0e\x9d\xb9%U\x84ZV\x06\xda\xd7-\x92^\\QzQ\x07\xe0\x15e>\xdf\xcc\x08\x1f\xdc\x15\n\x02\xb3<\xab6\xeb\xf6\xb3\x8a\xcc6eR\xdf\x88g\x9f?\x83\xbf\x9a^\x9d\xa1\xb1\xdb\xd5Y\x08s\xb6\xf3V\xba\x0ca\xddB\x01\xb3A\xc6f\xa5\x909v\xa64\xed\xd0\xbf\xb97\xa0\x03\xc8\x80\x83m\xcd\x14\xf5N\xf5\x81{\x18\x98\x14\xe1\xbar\x03G\\Ab\x9f'X3pt\x8b\\\xa0\x8b\x10\x9d\x16(\xd1M\x1b\xa2;\x0f\x9e\xc2\x8eO\xa7\xe8_\xc0\x11\x9cG\x19\xf9T\xfbA\x10\xcd\xf3\x8c\x04O\xf9\xe4]\xc1%\n\xed\x8f\xb2z\x17,\x00\xa8\xdb\xbcD\x91#>\xa1(um'3\xdd\xc2n\x90N\xce\xc6\x8eZ\x94\xde.\xa3\x0c\xcf\xc9\xb6\xad\x01\x87\xc7\xa7\x91h\xa4+\xa7#QKW\x9e\x8fD7]\x19\x87\x82\xba\"\x17\xf92D\xa7\x95\x0eZ^\xd3\xe5\xa3\x98I\xa1\xe6_\xc2\x11<\xebb\xe6'\x8e\x99;\xf6\xab\x981\xe5\x8a\x87\"\xbf\xdc\x06uu\x85bb\x87\xd7v>\xc5mE\xde\x1be\x1e\x81\xb7\x19*p\xc4\\\n\xc4\xbcq\xfe\xd4q\x9d\xac\xb5\xb6\x150n\xfdJ\x0f\x1b\x8d\xf9K\xef\x89<\x89T\x85\x08G\x8e\xceMQ_E\xbb\xe0J\xd8\x87\xdf\xe9T\xb4\x85P\xd1\xf6\x82Z\x03\xf7\x17\xb6k(\xf8\xf0\x98\x07\xa4b\x11\xa1\\\x15rs\x08\x8d\x06\xab\xdf\xe9jL\xa7D\xb9w\xfc\xfb\xc7\xeb\xb3\x07\xcb\x84]\xfe\x0d\x80u\x9c\xe9\xc1\xe3'\x036\x16\xffo\x98\x1e\xdc\xcd\xd5s\x9a\xc7\xf3S\xa3\xc2\xb0\x94\x9c3\xd3R\xd0\xe6\x0d\xe9\xdb\xf5\xc9\xc6\xe4\xdb\xcb \x90(\xbf43\xf2\x9b2\xa5U6e\xca\\\xc5\x8c\x15\xab:\xae7\x15\xe6$\xc1\xbfl5Y\x8aPQ\x9b\xfe2\x7f\xb1\"\xf1\x9c\x94\xd5\x04\x12\x9fD\xfc\x87\x81B\xe8\x1b\x89\xe1\x08r\xf1\xe5\xd4\xe3y\x84\xee\xd3\x9d\xe7\x19\xf4\x10\x1b\xccC\xf9\xf93\x9c\xfb\xb1\xd9\x0f\xca\xdf\xa0kKM>\xb1\xf8\xe5\x17i~\xc1\x14X\x17\xe8'\x1e\x88\xcd\x1c\xd5+\x929(\xb9)\xc9\xceY{hH\x97G\xf3\xb8\x8e\xd9\xdf\x9b\xc0r\x00]\xf5\"\x01;(\xea\x84\xa63.\x8a4\x99\xa1\x02\xe9\xc1\xcf\x15\x8bO\xc1\\w\xfer\xfa\xf6MT\xc4eE|LA\xb4l\x8c>\xe3\x05\xf91\x8f\xe7C\x0c\xf4-\x1d\x85\x0e\x84\xa2\xe4\x98\x01\x01\x8e(\x85\xc8\xa3\xfc\xe2g0j\xf5\x9dX\x83\x9c\x8d\xf5\x84\xdbl\xeb\xb9\x01\xfd\xe9\xc3a\x91\xf7\xa9\x83\x9b\xe1B2\x9cT\xaaO\x19\xf6\x8c\x94a\xafM\x19\xf6\x18e\xd0\xe3\xaa\xce\xbf\x04\x94\xa5\x15\xe3SC\x8e\x10\xa1\xd6e\xf6@:\x1d\xaf\xf9r@ \xba9\xcd\xe8@\x85\xbf \x9a\xfaGI\xc5\x1d\xa1\xa6\xd9Y\x00\xc7\xac\xd2\x04\xa6\xf4\xff\xb3\x10\x7f\n\xb9\x8b\xe2\x93\xf0U\xd1@\x1d\xf1\xb7\x1b,s\xc0ld\xe0\xa4\xd0Gfy\x99\xf0#C\xc4\x89\x13\xcfd\x9c\xd1\xa3\xadl\xaeVm\xfb\x0dS\xe0\x17\x12\x15I\xf1\xa5\x06,\xcdM\xe3,Oy\xd6\x9a\x97\x98\xf0\xcc||\x90(N\xd3\xfc\xfad]\xd47\x18;\xd8|||\xd9\xcc\x8fE\xf2\x1dJ\x1f\xf5WX\xdd\x04@es\xfdb\xc8\xc8\x1f\xfb9\xcb\xdfp\xc1\xa2k\xa8 \xcd\xe5\xd7y\xff\xe3+\x91~'\x9b\xe5s\xf2\xd3\xfbW\x86\x80P\xa0p\x92\xa8\xcdM\xb8j\xe8\xa6\x99]\x1eX\x1dma\xd0\xfc\x16l\x81\x19\x95\xcf;\xf7\xe4:\xee0\x08\xcdW\xbe\xb9m\xa9rfd\xd4\xde\xbf8C\x97G\x18\xfe\x1d\x8e!\x8f\xd6q\xe1'A\xf4s\x9ed\xbe\x17zt\xf3z\xebMZ'\x0c}\xd4J0\xe9\xd4\xd7\x03`V]M\xc0\x0b\x0d\x06\x99\x15\xbe\xfd\x1f\x07{\x86\xf75{\xbf\xf7\xc4\xf0\x9en\xbfj\x02\xdeg\xaf\x0fP\xa4^\x94\xe9\xc0\x14\xd0\x9e\xe7\xb4M\xab\xe1{\xe0\xceU#\xda\x02\xce73U'7Dx\x85\xd1\xd64\x1b\xb8>\xa1\x9bvg\xa7\x8c\xaa\xcb\xa48\xa1\x88\x9ed\xcba\xab\x82\x9c\x87\xeb\xefo\x0bc\x88V\xe0l\x95\x1d\x83EQ9\xf6/\xa2)\xc6^ny\xe2\xbf\x9d6\x82v\xa3Q\x88\"6\xf84\xa1\xc7\xcf\xc6\x8f\x8d\xeeJ\xa2pc\x1fC\x1a\xd2\x10\xf2 \xd4\x05v\x0e)Oo$0\xeb\x86\x9dB\xa90Y\xa0\xe1\x91~\x14l\x85\xcc\x0e\x0eI6Of\x14\xa3u\xf1R\xbb9o`\x00\x8f\xd3\xdf\x8e\x95Aq\xc3*\xf9\x08\xee\xd4\xf3\xd0\x9d\\[=\xc7\xd6\xfe\xb1!\xa5!\x8203\xa9Y\xe4\xe5Z\x7f\xd0\x0c\x86fM\xfb\xfb9 \xc6X\xb3@\x83\x04\xb1\x9fL\xc9\x19;)\x07\x10|`3\x168\x15\x83\x8c\xc3d\x12\xf9\xf29\x7f\xf9\x01_\x9a\xed;P\xe8{\x80\xf4\xbb\x88\xcb\xfa\xe3\x03\n\xa9\xfbT\"y\x90D5\xa9j\xbf\xb0\x9a|\xf08j\xa6\xf8\x9d\x80J\x04.\x01d\xe4\x1a\xe6\xa1\x06\xa8=\xf6\xd4*\xd6\xb06\xa3\xb8(H6gAu\x92i}\x86\xf6\xbdC\x00\xd6om\xa6\xf4\x94\xe3\xac\xfc\xc40\x1d\x1ez\x98\xe1T\x7f\x07j\x91L\x1bq\x058\xf8V\x98)\xb2*\xd2\xa4\xf6\xbdco\x00\x01\xae\xa0g\x0b\xbc\n\xa1\x1b\x8aB-K\xba\x9b\xa6{\x03G ^ O\xf7\x07j\\\xa0=\x86\x19\x85nl\xf8q\x8e\xe9\x96\x04 db\xe6\xcd\x00\xb2t\x90#\xd7 \x87\xeb\xa6\xe3\x8bu>%f%6e\xab.ZCl\xa8\xf4\xf9PFmP\xa9u?\x0b\xa7(&\x8c3\"\xc4\xb5-\x9d\x8d(\xf2fSG\xb0C\x96\x0c\x08\xcfG\x12\xb0l\xbf{O!\x83\xef\x81<\x85lw7\x10bYC\xb8\x87\xac\x8d\x04gRG\x8b$\xadI9~1\xccZ\xfb[\xc1O\xde3\xb9@@\xd3LI\x8f\x84c\x0fv\xf1(\xf7\xfal\x1d \xa3p\x11BE\x99^}{L\xe1u\x04K\xd8\x85\xeb\xb0\xd9\xd4x\x928\xecj\xed\x94\xbe\xb2\xc1q\x08uT\xad\xf2M:\x7f\x91_gi\x1e\xcf\x9f\xa1Z\x8deg%\xe9\xc2p\xdd.\xed\xc3\xfc\xcc?\xe8eK\xa4Eh\xc5\xf7\x86\x94\xe2Z\xa3\xe6\xb9\xd0\xa7\xeb^\xae\x1a\x8b\xe7\xfe\xcb+\xf1Rc\x0f\xad\xba\x1a\x0b\x9b`\xf9\xec\xcf\xec\x8c\x136\xc1l\x07Ri\xf8m\xf9\xbf\xe9\xea K\xce5)\x97\xe4U\x86\xcf\xde\x96\xb4\x02\x1cA\x8ao\xb8\xc3\xb7C\xc0\x1bh\xd6Zz\xdf\xd8\x11\xdf,\x11\xb2]Y\x7fq3\xda\xfa\xb2E\xad\xfb\xad(B\xf2\xeeg\x90a \xbaK\xab\x9b\x03\xaa\x8c\xf5,2\x08\x82\xaa\x01\xbf_\xf2\xc8\xe85\xfe\x95\xf9\xa4\x97\xa8[6\xd1F}Z\xf9\xe0;\x8d\xc5\xfdZ\xa0\xb5\x169\x97\x02\xc5\xbe\xd5\xbd\xbd\x11\xdf\xf6Ru\x02?\xf5\xe4\xae\xd2\x83\xa3\xed(op\xda\xe8\x83a\x02\x9a\xf4\xee\xdd\x1d\xc0\x8f\"\xdbI \x88?=2\xaf\x14S+y\x94\xad\xe3\xf2RRj f\xae\nUL,!\x17Kn\xa0\x97\x01\xf6\x8d2\xc0~[\x06\xd8?\x1b\x08C(Ng9\xcc\xeb2.\x1c\x0f\x14\x16\x82\xfdi\x00\xd5u\xc2T\xc5QQ\x92+\xe4\x8d3\xf2\xc9\xca6\xce\xe2\x8a\xc0\xded\xb0\x0e\x08\xd3,\x93\x10[\xdb\x84X\x91\xc2\x1e5\x02\x14\x96u@O\x1c\x0c6\xbf\x92\x04\xac\xf9\xfb\xf3gL.\xa7\xdd6q\x10\xc2N\x1c\x95,\xa4\x04\xa6)\x9b\x91\xa2\xce\x07w\xb9Z\x18`\xe0\x08\xf6\x1d\x0d\xb1.J\x12_Zk\xda\xef\x87\xe5\xb5$\xef\xff\x11\x9d~\x7f\x1e\xda\xfb\x17\xb5\xe0\x9a=r[3\x12\xd5{\xcc\x1c\x9fdu\x08\xf4\xe7h8=\xf9u\xc1\xc4\x87\x1c;\x00\xe1\x89\x1d\x08,\xe3lmYjlm\xdfa\x1f(\xa7_<$|\xc6&\xe13\x1c\x96/y8+\xce\x81\x19\xbb\x90<\x9a\xb1\x1f~\xb8\x88\x08z\x92,\xec\x1f\x86\xca\x0ex\x14\x82\x8f\xf9\x1eJ\x8c\xed\x82\x071\x06y\xa1O\xcbt\xf8\"\x0b$\xe0\x1c\x90Q\xb2\xab*2\x8aa<\xa1{]=@|\x16\xaf\xd4\xadw\x07,\xa0[A\xed\x1a HU\xe4YE\xbe\x84\x82\x1c|\xf7\xebn\x8d.\x0598d$\xa47\x13\xa3\x0eP\x14\x84\xdc\xc1\xa1\x1b\xe4HT\xef\xb7\x89\xc8\xfexP=\xfauA\xc5\xc7l\xc9\x0f\xc3\xc0\xe0\x82\xbe\x8c\x8c\x18\x9c\xc3Da\xcd}goN\x82\xe5\xd0\x01\x83\x10$.\x1d;n\x04I\x0b\x0e\x9e\xe0b\x1e\xb0\xbb\xb4\xb8\x9e\xad\xfc\xfd\xc3\xc0\x10\xafFW\x9ai\x1c\xda\xa7\x01w\xb8\xba\xcc\xc4\x8b\x8e\xdd\x01.\x87\x0eh\xce\x1a\xf4s\xae\x94c\x19%J\xc5Z#\x08\xf8\x8f\xe7\xf9\x1c\xc3\xc5\xf2\x9fL]\xc5L@ \x97{Q\xde\xc6G\xf5A\xa8\xbb\x99S\x0b\x1b\xa5\x03\xda \x19\x8b\xf2\xcb\xd1\xeb\xf3\xd0\x02'Q\xeev}\xf0\x16\xd1\x0d\x9c\x89\x0e\x9c\x89\x04'}\x1cv\x93\xcfw\x0b\x82\xf1\xe1\x81\x1d\x8c\x92\x8c\xc6\x17\xe5\xa6\xa8}\x8f=\xf0\xc2^ \xefna]X\xf0 +y$\x9b{#\x86R\xd5y1`\"\xa9\x07\xf9-K\x93\x871S\xa7\xc6o\xa7\xf4\xcc?x\xa2\xd7\xf9i\x02\x18\xdc\xea\xd4D|\xa0v\x85t\x03\\\x16\x92\x10\x07'%![(\x8d\xdbnVB\xa125*{\x06%B>\x98\x07\xfe\xcfU\x9e}\xfe\xb4N?\xdf\xc4\xeb\xf43\xa6\x00\xfdx\xf1\x80\xf1\\_|\xb9\xd3\x8d\x10\xb2\xad9\xe1\xc3\xfd\xffxk\xc2\x81\xc1\xb4/1I\xa0\x06Q\xfe\x1eCi\xe2\xd5\x97\xf7\x00\x83\xa0\xe0M\xba]F\x16\xe6\x04\x99`\x02\xddkTS\xe3\xb3\x01\x13)#\xa3\x85\xbaR\xba9\xd8\xbc\x9b\x00\xcfti\xce\x95\xa5\x19GZ5S\x991+g\x9d9\xaa#i]\x0c3\x19\xeeW\xa4\xfc\x0b\x85\xf1\xd2\x8d\xcaiL\x85\x9d\xf1\x19i\x94ua6\xca2\x0db\xee0\x08Q\xb9e&\xeb\xd4\xfaJ\xdf:zAY\xf6\xb8\x88\x9b4x!\xe1\xc5\xf3\xb9\xb0\x8a\xff\xfc\x99\xb2#\xeb\xfc\x8a\xb4\x9f0\x06\xc5\x10\x99\xc6\xb8/;\xc6Z\xa6 ^\x0d\x82\x0f\xa7\xff\xf93\xd0\xb9\"$\xd7\x9b:\x16\x90D\xc9\xfb\xc6\xd1\xd4x=\xd8\xcf\x15o\xdfo\xe0AA\xd7\x07\x80|\x8a\xb7\x16\xbag/\x08)\x9a\xe7n8\xb4t\xc0\xa1\xaf\x8e\xc87Fcl\xb3\x87\x06\x1f\xe1\xa9\xbc\xd6Z\x92\x1aM\xaf\x7f\xb8y\x97'\x19\xa5\x08\xfd\x18\xb8\x00.n\x0f\x82\xbcw\xb2\x86\x86\xda\x88\xd1\xbf3\xff\xbas\xa3\x84\xbe\xecz1t\xeb\x7f\xce_\x1ej\x0d\x06\xae\x87\xec\x10N\xc4\xa7\xda\xdb\xdcO\xe26W\xf7\xf2T|\xaa\xb5~x>d\xc3p)>\xd5:\x0c>\x13o\x1f\xf7\x8d\x18\x9a+\xdc>4\xe3\xf9|2,'\x8b2(3\x81\x90\x9b\xe8>\x1d0\x1c\x1c\x92\x9b@\x91\x9d\xb4\x154\x08\xd6o\x89\x93\x85 $\xbaw\x94\x8a\xde\xe9|9a\xb6Ny\xfb !\xf5\xba\xab1S\xba\xe8\x1a'\x8a8\x899\x19\xca\x86\xa3\xe5\xdc\x06\xdd %\xad\xb7!L\x87\xb6\xa3\x89\x9a\x9b\x0e\x1ae=\xdb\x8a\x0b\xdd\x9a\xdaV\xf1\xaa!\xb6\xe6\x11f\xcc\xeb\xf85\xa9c\x1c\x1d\xa9\x00\x83}\xadI\x8d\xaa\xcd\xb5_3\xd5B\xc7\x8f\\\xd0\xfc\xcf\x9f[xEk^\xe9)\xd7U\xc8\x9b\x15\xe9l\xafl00\x9e\x85\xf5Y\x10\xde\xf1\xc8m\xc0\\v\x0e\xc7a<\xbb\xd0\x83`)A0\x1ee\x14\x06\xe0\xc2\xc8\x00h\x9f\x8a\xdd\xd7{\xa9a\xcf\x8a\xb8$Y\x8d\xa1\xba5<\xda\x10\x83\xd6\xf1\xf0\xac\xed\xf1\xaa\x95\x84\x9aG\x98B\x17\xf1\x95]\x9b0\xbf\x97\x92\xf9\xbd\x18aE\xfbE\x9f\x18\xd4\xc3\xa2s\xb0\xa5O\xf1\xba\xef\xfd\xa3\x01\xc6\"\x8d\xeb\x9ad\x13\xd0\x04}Yl\xd2\xf4\xe6\x8d\x08g\x84s\x1e\xe1;\xbe\xf0g~\xea\x93\xae\xf6\x1a\xf4\xe3\xc8:\xddh<1\x93\xea]\x99\xaf\x93\x8a\x8c\x18D\xc1\xb5\x86s\x9f`,\x14\xa7\xb1p\xcf\xae7\xe4\xda\x117\x86\xe3\xa3\xf0\xa1\xe0}m\xa5U\xb5\x01\xb8\xa8\xdb`\x08\xcf\xc1U\xc4j&\xf7\xaeL\xd6I\x9d8kA\xdcg\xb9\xf9\xcdg\x99T\x7f\xa9\xf2\x8c\xcb`+\xdd\xfb\xe7L\xde\xed\x89i\x16\x84\x92jn!/\x9b\xb4\xdc`\x1a\x18\xefQ\xe3\x1b\x9fT\xaf\xb9&b\x02W\xba\xd7\xcf\xe6s\\\xb0\xa6\xdaZW\xed\x7f\x92\x8c\x94q\x9d\x97#\xe6\xf5\\\x92d\xe5\xfb\x97\xcd\xd7ns\x13\x1fL@\x93P \xa9\x18\xdb=\x81B\xf7\xf2\x84\xe5\xaeu\x1eq+x\n~\xdc\x1fc\xeb \x95\xdf\x15C\x1f\xa9\x0c\xfd\x9dRap#t\xa3\x8e}A\xae\xb4'\xdb~\xba?\x94fm\xf8\xd3'{\x03\x86M\xb6O\xb7\xcebw\xb0\xf7\x9d\xf9\xd3\xff`s*q\xbfw\x07\xfeJz>\x8c\xe5o\xe8;\xae\xe8k\x97\xbcv\xcfF]_\x9d\x850\xb8N\xea\xd5\xf3\x92\xccIV'qZ\xc11xI6K7s\x82&`U\xbc&\xf7Y\x9cx\x8d+\xb6`\x03\xc4z\xdb\x14yd@hB\xe7\xbe\x81Pm\"p\x9d9\xbd&`G]XML\x01\xecX\xf5\x1e\xb0\x8cyTA\x8d\x177,\xfc=\x9b\xd1\xb6&\x9a\xd0g\xc6\xcf\x06\xd2\x1b\xcd\x9a\xe5\x99h\"\x88\x01\x8aw\xaea\xe0@\x95c/\xf2\xb9>x\xa7.\xcb\xc9\xef\xcc\xbf~\x85\xdb\xbdd\xe8\xb2,\x1e\xf0\xe9]\xc7\x97,\xb7\xf2_N\xdf\xbe\x11N\xbd\xb3\x94\xc4\xe5\xf3x\xb6\"6\xbb\xd6**\xd2\xcd2\xc9\xaa\xa8$\x8bJ\xf9\xb0cB|\xeb\x9aQ\x1eT\xc2R\x9b\x17J\x10\x97z\x95\x18\x92\x99\x9c\xa0X\xd8\x19\xe0<\x9f\xe1\xf0X\x14]\x12\x84\xdd\x19,TX\xf8\xd7C\xeae\xddf2\x84;\x01\xd3f\xba0\xe0\x97~JB\x8c\x9a\xb6\x07m\xd0i\n\xeb \x01N\xd5\xb0cI\x81\x931MM\xd3X\x13\xf2>\x08\xf5\xdf\xad\xf5\xdf1\x9cN\x08~\xc7\x8f.$\xec\x85\xb6~\x9c\xa6o\x17A\xd8\x8d\xf9n\x06\xb55k\x9b\xbc\x11\x1a\xa6<\x17qE^\xe4\xb3 \x9clCi\xf8\xf0\x07IfW[\xa1\xe5\xbdE\xa1\x82\xfe\x8b\xa4\x9aQ1$c\xec\xaa\x86\xebmj\xf3\xd5y\x1d\xcf\xca\\\xcb?\x8b\xb2\xce\xe7$\x15\x94\x86W\xefGE\x01\x854\x9e\xbb\xe4E\x86\x8eos\xdc\xac]b\xf4mv\xd5\x1b&\xdb\xb8\x1d\x8b\xf2\xa5\xee\xc7\xa2\xb8\xba!\x8b\"\xcf\x8a\x9e\x07\x87\xc9\x16\xb4[\x98\xeb\xa0[\x8fc\x1c:D\x91#\xb48v\x882\xac\xf2\xe6\x8e\x1e\xe6f\xb4>\x1b\xa283D\x9d\x0f\x9c}8D1(\xd2\xfd\x00&0\xeb%\x13\xb3\x9d\xe6\xa0\x90^\xc2N\x083\x8b9\x94pl1\x1cd\x8bE\x92\xa2{W\xff~\xde\xc4\x8fT(\x8c\xbe\xee\xaa\x1d\xb0\x0b3\x17\x19R\xdc\xb1]\xd2\xa3E\xfa\xcak9\xc66}\xd1\xd7^\xf2\xa6U\xc2\xa5\xaf\x89\xf1\xe3\x9dy\xf9\x0b^\xdb\x91\x97?g\xebr\x99\x14B\x97\x87<\xa7\xbe\xf25\x8b\xe7U\xd7\x1a\x19\x1d\xb8\xc1\x13\x89\xf8Ibd\xfai\xad\x13tc\x0e\xb1E\xbc\xd5\xbe\xa6\xffl\x04\x9d\x0b1fN\xed\x97\x18\x91\xd1\xcck\x8c\xe03\x1cy\x8c\xdb\xc0?\xe1t\xbf\x9b\xfa\xbd\xcfZn8\xf7\xa8\xb5\xb4\xe2\xd2\xfc\xbe\xe6\x15K\xbbY\x19Rnf\xfe\xd6\xba\x83\x83\xbd\xad\x93\xbb?\xd9Z\xfe\xdfZ\xfa\x1f\x18\xabU\xf6W\xdf\xdc\xb9\x10a\xe2\xc8\x0d\xfaOy\xa2\x9b\xd9\x03TAE\xb3\xb8\xa87%9\xad\xe3\xd9\xe5\x872\x9e\x1186\xbd\xe1\x04\x9d\xfe\x1b\xcd\xf2\xac\xaa\xcb\xcd\x0c\xdd\xdf'\xecYEkR^C\xfan\x06\xec\x99\xe5\xaaA\x1fx+k\x05\xde*Y\xe0\xad\x92\x05\xde*ww\x03\xc8\xa6e;\xf0Vi\xe0\xacqpkRU\xf1\x92`\xae\xc6\xbd\xb3\x90\x99\xd0\xd4\xad\x93J\xa7l7\x11\x8c\xac\xb9\x8bW\x9dUC\xf5\x05\xcf\xedC\x8f`\xf5\xa9\x02:\xfai\xd8q\xa8\x1a\xad\xf5\xfb\xed\xf12\xa9^\x96\x84\xa47o\xe25\xb1\xe7w\x90\x86\xe4S\xd2\xf2\xc7\xd1\xae\x1d;\xc4\xa5\x0b\x9d\x91\x80\x97Q\x92\xcd\xc9\xa7\xb7\x0b\xca\xa5\xfc \xee\xefS\xda\x9d\xcb\x87Y\xf30q\x0d=)WZ4BX#}$\xb1\x12e\xf4i\xf2\x1a\xb9K\x17M?\xc7:\xb80 \x1dX\xe5\x85\xa0f5\x0b\xc1\x13\xe7\x05\xfe\x10\xf9\xf8^\xb4\xbf\x98\x89\x90\xb4\xd5\x83j\xb6\"\xeb\xb8\xfb\xb4\xd5\x88\xf2\xbc\xdd\x95\xda\x0c\xef\xe8\x946\xa7\x1f{\x82cg\xfd= \x9f\xe2u\x91\x12\xefl\x0c\xc6v\xc8\xf7\xc3/ \xc3\xadW\xff\x96*X$G\xc6\xedp\x07\n\xda\xfe6B\xf3\x86~03\n\x87\x8cG\xf9\xc3`\xef\x8c\x9c\xed \xc5T\xef3r%\x91>\xb9F\xab\x8f~'\x1d!TP\xdd~E\xb1g\x90r\x97\xa4\xca\xd3+\xe2w\xb5\x82\x96}[G\xf3\xa4\x8a/R\xc6]-\xe2\x19\xc1\x00Q\xdd1\x84\x18]\xfb\x92<+\x92\xeaC\xbc\x94\xd9C\xfd:\xd0G)\x1e\xa2A\xb34!\x99\\\xc1Nt\xb7\xdfL\xcbxh\xd62\xfah\xed\xffm\x80\x91\xe4\x1e\x05\xba\x8a\x82\xa1\xd4\xa7\xf3\xa9\xc4[\xad\xb7A\x8a\xbb\xf9;\x03SY\xfa\xa9!\x8cb\xe6\xef?2\x06Q\\\x0cEP\xd4\x86\xb0[17\xf9'\x86\x00\x8a\x99\xff\xad\x8e#^s\xbe\xb7\x0d\xd8\x1ce\x0d48\x94\x82A\xae\x06CL\xe5\x8f\xe8\"\xc9\xe6~\xb6I\xd3\x90\x7f\x16\xf0X\x1f\x14\x9f1m\xad\xd2\x04\x7f|\xba\xb9\xa8KB\xdf\xce\xd5\xb7\xe4\x13\x99mj\xb4\xd0\x11\x7f\xd3\xc7\x9d\x18\x8fi\xebA\xabB\x13\xf01\xed=\xa4\x15\xdbJd\xe5g\xc82\x85\xb0\xb3\xe1\x87M\x92\xf2f\xae\xa2w\xcf\xde?{}\xf2\xe1\xe4\xfd\xf9\x0f?\xbd\xfa\xf1\xc5\xc9\xfbS\xd3f\x82#Xi_\xd0\x0f.h\x9b\xef\x99\xd4\x84\xed\xaa\x0f\x10r$-X\x9f\xfd\xdd\x90\x17\xaf\xe6\x13Xc\xe2\xfb\xf6\x86\xc0q+-\xc8\xac\xd1\xe2\xf1\xffY\xd8\x17\xfe\x00\x9d\xfc\x98 \xc5\xfe4\x99\x8e\xdao [\x14\xa5\xbd\xcbm\x17o*n\x0d \x84`\x1d(.\xe8y4\x96fe/l\xf4R\xc8\xc3xt\xef{\x83\xbe\xbb\x94\x08WRi\xcf\x02\x88\xd7\x06\xed/\x89Vy\x85\xbe\xba>\xff\xf3\x082\xfc#@ 3I\x80\xbf\x17\xbf\x8e`\xca\xc5\xdcY\x9e\xca\xe8(\xde\x84\x8a\x13^p\x86_^\xc4\x15y\x17\xd7+\xfe\xa9\xfcy\x04T\xba\xb3/\x80\xaa\x03\xc9\xc7\n\xca\x16e\xd3\xde\x80\xd01\xfc\xe9\xfe\x17\x98\xb8l\xadW{\xb2\xf7h\xdbO\x0f\x1fn\xad\x1f{\xb27` \xf4\xef%\x9a\xa9\xbf\xee\x9c\x1bG\x9bdv\x01\x89\xb8I \xd5\xeb\xb8\x18\x08.\x9e\xc3@\x84\xf0d\xc8\x1dX\x1a\x0chu\xbe\x9b![\x83j\xc8W8\x15\xedj\x87$\x82\xa1\x1fj\x9d\x85\x17C\x9e\xc42C\xa86h\xb4\xe0\xe5\x0f\xf6\x86\xdc\x81\x87Y2E\x14\xbd\xf6I@E\xc1\x02\x8d\xb6\xad\xaa\x1a\x11n\xfdP+5\x89x\xeb\xda\x81\x8b8\xda\x87\xda\xb7\"\x8e\xf6Cm\xc3\"\x8e\xf6C\xed2 o\xf0\x87Z\xafm\xe1\x0e\xfeP\xeb\x98\xed\x94\x08A\xb9\x00\x1e<\x80;\xf9\xb5\x98\x98K\x82^.\x12\xf6b\x98\xcdd,\x92g\xf1'\x99\x93\x8b\xcd\xf2GrE(\xe7\x98d\x8b\xdcR_\xde\xfaO-\xael\xac\xe2\x9f\x93\xaa\xce\xcb\x1b\xb3\xd5\x9a(\x8cy\xb07+|s\x1d\xaa\x16\xcc:|.Y:\xdb\x07U\x1dSi\xc46\xd4\xc2\xb5\xbd\xc6\x0c\xc3\xd2\"\xaf\xf8\xa1$d\x82\x9b\xea\xdc,4\xa9\xa5Z\xe5\xd7/\xe8\x02\x9a31\x89\x12\xa7\xa93\x1c\xd8\xd2Q2M\xa5 FY-h\x91&\x17\xafI\xbd\xca\xe7\xd5\xa4\x8b\xab\x9dd0\x14u\x035\x10\xbcu\xdc\x1d\xc6\\\x93RJ\x14\xca\xc1\x04\xfc\x06eI$\xb7w\xbe$5S\x16\xf0\xceE\x05n\xf3\xad\xd6\xe3\x8f\xfa\xd5Wq\xf5~\x93\xc9\xaa\xecg\xbf\xdau\x19\x17\x05\x99\xbfk\xce&\xfaT\x98\xfa\xac\xe3\xc2\x97\xd5X\x1d\xa5\x89@\x84\xe4\x91\xc0\x89\x1a\x13j\xd1\x01\xc7>fD\xd4T\x8c\xe7s\x7fz\x166\x1cp`\xf9\x80\xe3\\\xf3\x11\x7f \xbf\xdb\x14\xf3\xb8&\x1c\xec\xbe\xda\x94\xde\xd2`\xd0\x11\x87\"\xc1\xbcA\x02\x12\xc2\xd4L\xbd.\xc9\xcd\x04<\xa4L\x03h\xc7Y\x03\xbb\xee@\x14\xe4\xef\xe94\x1a\x9a\xc7\x8c\xf5m\x1f\x82z\x9bV\x87Z-1\xbbBc\x17j\x19\xaa\x8c\x8f!\x83\xfb\xb0\x0f\x13\xd8\x0bBd?\xf6\x9fB\x0e\xdfC\xf6\x14\xf2\xdd\xdd\x00\xcai\x8e73\xadK\xb6\xdc\xc1%\x17\xdd\xbfy\x94\x95 J\xf3e\x13\x86Jc\xbd\xa1\x16\xb39\x8b\xc1Fd\xe8\x90a\xcbtE\xca\x8b\xbc\x1a\x8a\x04\xb1\xd5B\xc9v\x99\xf3_{\xd9l\x0d\xc0\xbf\xcf\x82M\xbd)\x06\xce\x84]\xf0\xce(C\x7ff\x8b\xca&\xcaWX\xcb\x86*\x8dYNKx\x05P\x04dAE\\lk\xd4\x827\xb9\x83*\x13Qr\x83\x08\xd0-B\xfa\x99*\xf4\x99\x9ex\x98F\xb8d\xd70h\xf4\xde\xab\x10\xc0\x04t\x04\xda\xc7\xb0m9\xbf\xc9Qk0\xe9G\xc4\xab\xca\xad\xdcu\xb7\\m\x93P[\x14>\xd1\x9d^\x889\xcc\xc5G\xaeHy3\xce\xb1Y-R\x86<\xe2I\x98\x9d\xbe4$\x1bkU\xb1o*\xde\xb7T\xd4tL-K?\x0f\xc1\x988\xb1[0\x16D\x08\xb3\x10\x16!\x14\xe8\x14\xbf\na\x8d\xee\xab7\xf6\xb1\x80n\x85p\x1a\xc2\xf3\x10.Cx\x16\xc2\xdb\x10\xde\xb9A\xbe[,+\x11o;~\xd0\xadL,V&\xdeje\xbae\xdb\x95\xea\x16\xcch\xdd\xa7A\xf9\xa8\x00\x16C%\x96\xf9r\xb6[\xa4nq\x0fk1T\xec!*l\x85\xa5b\xb8$7x\xd3\xbf\x98.T#\x9a;\x07\xde\xc3\xff,\xe0\xf1\x9d\xd7L\x0f\xe3D\xe3\xd9\xe9\xa3>\xf9\x92\xdc \x0d1%.u-,\xe2\xff\x97o\x93f\xa4\x8f\xbfl@\xe0\x96\x11\xc4V\\\x93H\xd9\n\x9a\x89)\x98\x1b\xa2\xe2m1\x9d\x9f\x85\xa8G[H\xab+\xd5l*\x08Q\x8d\xa6>\xc2\x93\x1dC\xa9\xcc\xf1\xcfu\x88\x87B\xa2\x0dD1\x9b\xe6\xd17\xdf\x94dq\xc6\xb2\x95\xee\xec\x85\xa8=\xdb\xd9gf\xbf\"\xed\x91\xa4\x99\xfb\x0fC\xb4\x0d\xee\xb8\xbe\xd0\x9fU\xf3\xd3\x98 \xd3\xb58\xa7C\xb2\x15J\x1c0\xce\xc5'8\x82\x13\xc4\x1d?\x08\xa2y\x9e91r.Eb\xe4\xe1\x7f\x18m\xc0\xe8&p\x04\x9fD\x10\xf9\xe7p\x04\xf9\xf4\xf4,\xc4\xf8\x95\x0b!\xf7\x9c\x06!\x86\xac\xd4\x9c^\xcf\x83\x10\xdeb\x96\x17\xc4\xb2\x10\x06\xd3\xfa\x8e)\xf1\xd8\x84H\xb6\xf2\xaf\x04\xf5\x9dg\xff\x0d&K\x91^W:\xb2\xf6\x16\xe5\xb6\xd9\xf4\xed\x19\xd2\xb4\x80Y\xb8\xa5d\x19\xd7\xe4\xff$$\x9d\xfb\xa5\xcf\xd8\xd6\"\x08\xc1\xab\xf7\xbc\x10\x0e\x1e\xdd\x05\xcdr\xc9\x81e+\x18x\x9aJ{\xa7,d\x0c=\x83\xef\x1c\x1f\x0e-)\xb8\\\xcb\xbf\n>P\xa0\xbd\xc3\xcc\x06\x19\x8b\xd0\x96a$\xbbw\xff\x0d8K\xe9r\x80\x87\xfb\n\x0b\xf8\x1c%\xbcK\xcc\xddZ\xdc\xc5\xfe8tt\x15\x1c*\x82Q\x89\x9b\xf4\x8b_62\xb8CV\xf0\xf0Ny\\\xc7\xcc\xaaC\xe5\xce&v\x07\x94M\xb2\x91\x87\x98\xb3\x153\x0b\xc6\"c\xde\xc3\x80\xf3\x9e{\x8c\xf7\x8c\xadi\x02m\x85\xc9\x1cw \x9b\xcbq?Ty\xe1\x87\xfb!\xec\\P2s\x12\xf1]\xa4\xfc\xddM\xc05\xb68\xa5Hs)\x9426c>\x0ca\xe7\xfc\xce\x89\xe2\xc3;\xd8\x81\xf0/D\x14Y\xde\xbd\xeb/\x9b\x14[\xc1;\xd86\x92D/\x92,\xa9V\xfe\xc3\xc3;\xc1-\x87D\x89\xb6\xd2\x1b\xd9\xde\x9d\x8c\xec\xf1\x97\x8dl\x1b?sS\x913t\xf4?7\x95\xedp\xf26\x84\xd8\x9e\x98\xd0V\xa6Tj\xa7$\x97\x92\xaf\x87\x8f\x1dB\x1a\x9b\xca\x94\xd2\xbc\x10\xa9\xc8\xc3\xef\xdc\xee\x0e\xba\xc5\x10\x15r\xa8\xdc\xb2\xc4\xf1\x9d\x8b\x83\x9b D\x9b+\x0c\xc9\xcb\xcf\x8d\x82\xeb.\xe6\x8a\xeeBj\xe2\x1f\x852f\xac\xa2\xba\xc8uw\xf8\xdd8mc\xf5\x19\x88\x81[`1\xa5\xd5\x18\x84x\x8d\x1e\x02w\xa1\xae(%\x97\xb4\xa5zb;\x9a<\x1e\xdf\xf9N[\xc2\x11\xac\x85\xc6\xa1\xec\x88m7\xfeR\xbcZ\xf28\xa3K)\xc1\xed\xefo\xb3J\xfb[p\xa4\x02\xdd$l\xb7\xd0En\xc1\x97\xb1\xf1n\xc1`\xcaq\x1el\xc1Pn=\xd0-N>\xb9W\xf7\x1fQ\xe8\xb2\xd4\xd3\x9cA|\x14\xf0\xfd\xbd\xc7\xf6w9\x9a?d\x12\xfa\x16\xfc\xa0\x1c\xd6\x81JO\x0e(\xff\xb7\xa0<\xdfJ\xe1\xffV[\xf2\x7f\xce\x99\xc4\xbb\x85%3\x16c\xa2\xfc\xdd\xd6\xf7}\xe5\x97j\x8b~-Z\xc1\xf8\xb3\xf9\xb8An\xad\xa0\x91\xee\x8c\x9c\xcb9\x18\xcb\x7f9\xe73\xef\x96^\xcfc\xf9+\xd6\xf3\xc8\x93\xe8K\xf8'9\xe2\x91\xfc\x92\x1b\x0e\xdc\x86P\x8e\xe7\x87\xa6\x8fB$(t\xf7\x1e\x8ca\x7f\xa6\x07\xc8\xee\xd0Mu\xe0\xc8\xee8\xb07\x16k\x8a[\x9f\x04}\x03\xe2\x9c\x99\x1d\x96\x81\xcd\x8a\x18\xa4=\xe8\x9bxM&\xc0\xa3.|\xfe<\x14~Q\x94V\xe8Y\x95!\x92\x8f\xfd\xdc2\xfa\xd1Q\x8d\xecVN\x94(\x8d\xb6r\xb2\xd1@\xbbw\x9b(\x8aE\xe4\xaam\x16\xdb1\x1eU\xbc?\x9c\xcc\n\xa4\xf7\xd6\x92\xd4\x82\xd3\xac^\xe6%k\xce\xaf\xd5\x8c\xae\xbf\x0d\xd0U\x83\xec;\x84\xbd4\xec\xecX|\xb72\xd8J\xc9K`\xa1\x0c\xb9\xd2\xfb\xcc-u\xa7Z$\xe8q\xe8\x16\xe0~\x05\xe8. \xc7hno?\x02\xb8\xd6\xf9\xa9Q\x13\"\xd9\x11\xa5\x06>\xb1\x1c\x1f\xaa\xd7n\xcb\x1f`Z\xf3\xfc3_\x11\x14\xef7\xd9\xf3|\x93\x0de\xb0\x1a\x0d\x0buB]\x98\xfbDl\xb0\xaf8)\xde\xd7\x87d\xc8 \x7f\xf4\xb4\xf4K\xdc\xcc\xcbm\x951\xe2\xcf\xb4V\xedeX\xf2\xaa\xaf\x08\x0fA\xe7^es\xf2\xe9W\x03\xc9\x87\xa4\xc0\xe4\xcbj\xe7N0\xf2\xb2\xcd\xfa\x82\x94\x1e\xec4\xbe\xd9p\x0c\xf7\xf7\xc1\x94&\x0d\xee\x04Lt\xb7\xde%t$\xbdkX\x83\xbb\x1f=w@\xd8\x96\xae9\xd8\xc8\xb6\xcc\x92\xc7\x916_C\xd4\xb2\xb3\xb6\xbf\x87\xf2\x9c\xa7TG\x1f\x8c\xa1x\x91_\x08+v\x80}E(\x0d\x03\xa5a\xf1\xda\xe9;\xe8f\xe1y&F\x1e\xach\x8d\xd7\x0b\xec\x1f@\xc6\xbd\xcd\x19Dm\x8bE\x0bf\xd8\x19NY\xa1\x16\xb4\x9b\xd0\x1aqKV\x025\x82\x19sK\xf0\xbb+\x00\xde\xff\xcck\x88!\xcb\xb3\xfb,\x0f0\xf3\x1b\xf3Bp\x19-\xf0!d\x91\xf4\xf1b\xb1\x83\x1b?.1\xf5\xb0\xc5Ys\x1e\xcb'2=\x91\xf0\xd5\xec\xb19\xcd\xf7l\"\xad\xf7\x1fV$s\x82+h\x8cM\xd5\\\x1a\x1a\x88U\xd2\xcd\xca'\\\xed&\x86\xbb]\x7f\xe2\x14\xd0\xf4\xc5\x96E\xb2\xc3\xba\xcc\x15\xdd\xe2\x96\x93D-\xfd\x8c\xc7]\xfc\xb463,\xb0~\x0d\x8e\xbc\x03\x991D\xc3\x06\x97v\xe6\xebvL\x16\xb1\xd2hO\xd1qJP^!\x19\xd5\x19\xe3\x88Z\\\xf5\xae\xc8\xb4\xbf\xdc6xdA$q\xba+\xfesM\xe2)\xe6BW\xc75\xc1\xf0\xbev\x14p\x0c\x1ebY\xe1\xe1\x11\xb3\xc0\x14\xd8\xaet\x81mvp3dJ\xa7\xbf\x02\xb2\xb0\\\xc6\xdb\npV\x84iq[]:\xd5\xc4\x07\xb4\x81\xe8{\xd8\x13!n8U\xfeP&d\x0eu\xce\xf3;C\xdc\xf6\n\x86z\x15\xd7\x90T\xd9\x1fj\xa8W\xa4$;\x9e\x0c\xb7\xd9\x1dFU\xa4 \x95\x18C\xd8\xff\n\x00\xee\x11\xdf\xaf\x05^'>\xb5\xd9c\xfc\xafN\x14\x19''!\x11eN\xb7M]\xb6\x154S\xcd\xac\x95m\xfb\x070\xbe\x81\x06\x8d\xd9\xfe\xe9x\xbb\xda\xdc(\x03~\x890\x0e \xee\xfdkB\xa5\xaa\xe5k\x1c\x07\xaa\xd2h\x0c\xee90\x90\x8d\x97\x18\xa0\xe6p/\xd4\x0bBH\xe1\x04\x15h\xa8\x1c\x93'\x05\x95k\x9eW\xb8\x1f-\x01\xd8\xbf\x00\x1c\xcf7eI\xb2\xad\xa0\xe2\x08\x11!w\xe8\xb4u\xfc\x15\x1f\x04\x7f\xfa\x95tG\xfd\xfeG\xccu\x14\xf5\x89\xf4\x92\xbb\x95\xb6\x9b\x00\xe6\xd7\xb0\xfbU\xe8q\x17\xf4#\x00b\x83\x87:\x97\x99\xda\xc7W\x99\x05')o\x17\x1fn\x8aQ:\x80\x11\x1b[\xd8<|\xa5\x8d\xf8cr1b\xe0\x8e\x83F\xf07a+\xee~\xe0\xe7K\xf25t\x8f\x0d\xcb\x8a\xc9\xf1\xdb\xdc\xeaW\x80\xbf\x12\x14\xe3+\xcc\x86m\x82&\xfc \x9d\xd4\x90\xb8\xb4\xf54\xaa\xadf\xe1\xbe\x07z\x13\xa9\xe8D\xbe\xce\xd9\xc4\x83\x8f\x8c\x99\xc8\x98Y\xf44\xe8\xc6\xc3\x08\xfe\x04>;\xd1\xbf\xc6,gi\x9e\x8d\xa2X\x8e\x93\xfc\xcb\xe9\xdb7<@\x1feMsE6\xfd\x1a\xe7\xab\x88\x8d5b&\xb6\x89H\x97lb\x9f4-\x84 \xce-\x81W\x93\xcc\x97k.\xda\xac( a\xfbH\x14\xd09\xfe\xedW\xc6\x99sM\x19\xc0\xba\xb9\xcf\xb5\x19\xc9\xa0R\xcf\xc9\x11_D\x8ck:h\xf1\xec\x0e\xc2\x06\xed+\x97\xda\xa8\xdc1\xb8v\xb7\x88}i\x8a\xb0\xa6+}\xe9\xe4\xeb\xf6f\x87\x85\x88\x96\xed6\n5\xb6+\x9ekN_\x89\x00b\xf8\x1d\xfba\xfd\xce=\xca\x04\x1b\x8d\xaa\x8a\xf5\x13\x11\x0eI\xa0I\xa3\x9a\x0dB\xf5\x9e\x99\x07\xb3M\xbed\x131]0\xbbV@\x9a\x8c\x11C\xd5\xdfx\xd3\x16\xb6\x1f\xb2\x0c\x1e~\xef\x19Rl\xca8k\xea\xff \xf6\xf7\xb4\xd7\xe5\xd6\x98\xbc\xa2\xb0\xf5\xcb\\\x17O,\x9cT\x99r?P\x99\xf4\xc3\xf7\xfeF\xfepE\xa0$\xf1lE\xe6\x10\xc3*.\xe7\x90&\xeb\xa4\x86|A\xc7\xcbMT\xa0\xdcd\x95g\xa3V\x0eD\xa2DW\xb9>\x87.5\x93zK\x03\x97}&\x92\x08i\x9b\x19oy\x00\xe3\xac\x0f\xc0\x01\x00\x00\xd0_\xfe8M\xfd\xcd\x97\x8e\x0fi\xa0\x88\x97\x13\x82\x0cmfm\xe56p\xcdN\xd0-\xdb\x91\xb4/\xd8\xa9\xbc\xc3Q\x03\xcd:Xv\x04\xa5}\x89\xc4\xb9\x9aE\x1a]\x85o \xab'J\x8e\x0dtu-p\x1f\x1cla\xc7]\xa6\x95\xaa\xd9\x97\x0bPD\x11\x87\xc7P&_]\x89\x99\xf1\xfe\xa8o6\x8e\xd1\xa3\xd4\xe2\x0e\x06Qdh\xb2\x8a\x99 w\\\x08J\xbf\x0e\xd9\xaa\xfe\x98\\\xf8A\x10<\x85\x1d\x9fB\xc0\xaf0\xa9A\xcb\x8c\xff)\x87M\x00\xc4\xaf\xf8\xe5\x87\xf3`\xc6\xdft\x89\x12s\xcbi\n0;\xc5\x11\xe5\x16\x16I\x16\xa7\xe9X\x80\x8d\x071-; %\xd7\x85bL]Hc\xeaQ\x8dm;l\x10\xeer\x01\xb70\xde\x8c\xfa\xdc\xcd\x86\x15\x9ck\xde\xb2;p\xd2G0\xeb\xe7\x12Q\xac\xe2\xb0(\xed+Q\x8ck\xeeO-\x91A\x9d\x8cQEa'\xfe\x04\xfaY\xfeu\xe56p\xb1\xa4\x1d\xb9\xceRTj\x99K\x95cf\xd12!2%\xec\xee\x16\x97\xf8i\xd6\x1a\xd2,\xc0\xf1`\xbc\x1dxo\x90\x8d1&}\xef\xd5\xad\xeel:1J\x07%YT\x13X\x0b4\xd1\xd3sL\xa1<\x81\xe5p\xad&\x05\xd7\x04n,Ue\x04\x9c \\\x88\xaa\xfd\xa9\xb4O 5\x0c\xf9u;By\x93ay\\<\xf8\xc3\x87\x03\xf1\xe0\x87?=x\xfc\xdd\xb6\x9f>\xde:\xa5\xe4\xc1\xf6\x91\xef\xf7\xf7\xb6\xfdt\xff\xbb\xed\x13\x04\xec\x7fIF\xca\xd6+\xa9\x94\xf9\x8d\xe2\xed\xeb\x07\x93\x1b\x95\x98,2LT\x93\x8aY5\xe9\x07\x80\xb5jq\x80Q\x99\xecm\xebV\x9d\xe5Z\x8a\xa1$i\\'W\x04~z\xffc\x08\xd7I\xbd\xca75\xac\xe2\xab$[B\x0c\"\x13E\x84Y\xbe'\xf0\x07\x19\xf4\xf4\x0f\xf2\x1d\x7fZ\xe3S].Bh\xa0\xf8\xa9'\x97\xd6Z\xf5w\x9f2\x89ep\x82^b\x84\x9e \x9f\x0c \xcf\xf3M:\x87,\xaf%DJ\xb2 %\xc9f\x04.\xc8,\xa6X\x93/&\x80\xb3\x16\xb92\x11\xc3:c6\x0d$\x1e\xc4)\x1f!\xe9\x05h\xa3P\xfb\xde\xef=\xb7V7\xc6\xe9 \x9b\xbfwS\xa2\x89o\x8b\xda\x084\xe09\xd5\x98\x9eeA0\xc0\xb1 \xab\x80\x14\x99\x90\xe1U\xa6\x0c\xc2E\xc3 ,{\x8b>\xec\xbfr~\xce\x15\xabz\x1eA\x97\x91\xc6\xca\x10\xf3\x91\xa9C\xe1v\x81\xee\xb8W\xf9\xa4+\xce\xda\xfaKM\xf8\xed\xb6\xd0\x95\xbe\x03!B\xeaWY\x88\xcep\x0c\xbae\xae\x038\x86\x1a&\xd0_\x96:\x80 \xf8\xb4U8\x82W,G\xf8_N\xdf\xbe\xe9\xcf\xdb\xc8O\xf2\xcey\x1b\xb5>U`\x88\xef\xdd@\x90Zq}\xa6\xbd\x85f\x9a7.\x17\x7f\x0f\xfbR5V\xf7\xeb\n\xdc>\xed\xde\xd1\xe91\x1d\xcd\x18\x9b\xac\xe4e\x87\xca\xf6\x89J\x91'YMJNG\xe8\x9e\x87yN*\xacC>%U\x0dI\x06\xf3|\x86\xa1\xa9\xb5\xf9Th\x91\xadh\xce\x14\xcd(\xf9t\xbb\xc9\x16\xf5P\x9e\xe9\x11\xad\x95\xfe\xb21\xf9 \xea\x8c?\xdc\x14\x84\xeb\xfbN>\x15dV\xa3\xaa\x8f}\x14\xc2\x12\xadi\xe9\xbcU\x90\xd1\xc3\xd3\xdbd,\xaf\xcc\xdc\x03\x96|\xe0\xaau\xa3c\x9e\x92\xf7\x80Y(\x92\xe9\xde\x99\xbc!!Q\xb5\xb9\xa8\xea\x12s\xc1\x80\xe7\xc9~\xa6g0\xc1\x0cXHb\x1fx\x01\xd3\x86\xb9a\xdfb\x90~\xeb@\xc3\xd9\x82\x13\x89J\x9b\x8cT\xb3\xb8 >\x91\xc9\x9f\x1e\xfc\xd7\xfe\x83e\x88\xb9\x9d\x94g{\xf8\xec\xbf\xbazP\xd3\xd0\x8a\xc1\xa15\xfdkzg\x1d\xed\xa9\xbd\x7f|\xc0\x1e\xee\xbbv?\x1fdP~\xf6\xeb\xc6\xa4wG\xa3\x95\x11\x9b\x97D\xb3U\\>\xab\xfdZ\xda\x0b\xe9\xe9\n\xcb^\x86\xa6C\xf7u\x1e\xfe\xbc/\x8e_j\xdac\x8a!;\x98\xb9^ \x0e\xfb\xf1{\xfe\x03k\xd0_;t3;M~%\xf8\xcc\x10\xb4:1q\x0d\xf5\x01\xef\xc5K\xcdpsL\xf5\x95\xf3\xc0\x15\x1f\xf0\xda\xb9\x0cA\x1b2Sh\xd2\xec\xa7\x0e\xf4\x01\xc1)\xe01\xdd\x12\x13\x84\x00\xb22q\xe1\x17A\x93@Z\xdb\xda\xad\x9f\x19V#\x86#\xf0\xf1\xee\xc2\xfb\xbe*\xc8l\x1d\x17\xf7);\xf8'/\xa0\xd4\xed\xf7\xd8\x89\x9ep\xd6p\x84\xce\xfc\x1d\xdb\x81\xe9Y\x80i\xcf^\xe43\x0cZ\xea'\x98\xca\xd0\x86B\x1b8\x02\xcf3Q\xffq\x19\xadi[\x1b:|\x84Q\x81\xb7\xaa\xf9t\x83$\x86\xfe\xef\xda\x9c\xd2$n\x92\x18c\xb6\xcf\xfd\xd8h\xe8\xa1\xe3h\x86\xe7\x9eO\x13\xbc\"\xc2\xff\xb9\x93\n\xbf\x7f\x89\xbb\xfbW\xfdu\xe7 \xbd\xdaC\xa3Kr5\x94\x93k=\x94Xk9\x98\xb0K\xa6\x82\xd2~{1\x94X\xeb\x9c%\xba\xd5e\xb3\xbd\x16}jSH\x9d\x88>\xb5\xcd~\x1aL\xf2{:\x94\x13\xeb\xb9\x18\xae\x16J\x97B&\xef\xbfz\xc6\xd3\xea\xbf'\xcb\x93O\x85\xef\xfd\xdd\x9f\xc6\xf7\xffy\xb6;y\xf0\xe0\xf3\x83\x07\x81\x17\x82\x97x\x9a\xef\xder}\xf5\xf3\xe6\x8c\xf5(k\xf7\x9e,\xf0\xf0\xf6\xec2\xb4(x\x03&2M\xe2\xc7,_\x7f\x87\xebGk\x00\xe0\x17\x9c:\x04\xef\x0f\xf2\x1d#\x87\xbd\xe7\x1f\xf8\xa4\x07\x94?\xaf\x8d\x8a(f\xcd\xf1MI\x16\x06K\x0e\xa1\x91\xec\xce\xdf@\xdbE\xc1\x8b\x00\xbc\x86a\xa7\xd2^\x08\xda\x83I\x14\x94\xc8i\xad\xcb(\xa9^\x96\x84\xa47o\xe25\x99\x07~e\x0d\xeeN\xfb\xc2\xb4sJ\xf6#?\x93\x14\xd3~1\xaag\xe2\xda\xc20\x05\xd1\x04\xd6\x9b\xaa\x86\x0b\"Y8\xf0)\x9a\xdc\x7fO\x16\x81\x913U\x0bk\xc5\xe1\xfe\x98\x8f}\x02\x0e\xd9A\x16\x1b\xbc\xa3_\xd9,\xcamW\xa4\x14\x8e\x0b8B\xb1\xdc\xdek\x81\xa1\xb7\xf7\x1c\"E`\xd8\xee)\xf3\x9b\xb5en\xa3\xe5\xca\xf1\xbe\xca\xed\x02\x85\xb6\x96\xd2\xae\x0b8\x86\xdc/BH\xa9 gL.+\xca\xb8\xdb\x01\x8e, =-\xec\xb5A\x15X\xe6v\x88\xc0\x18\xd4\x01\x8e>\x0c%\xae\xdc>p\xc5!\xd0\x1f\xc8\xad\xd7V$[6\x91\xc7\xac\x9d\xdd8\"\x03\x12\x90\x95?\x0f\xe1*\x84\n\xcd\xbb\x1c\x16\x029\xa1M\x9aR\xb6\xeb\n\x8e\xc1\xbfA\x91y.\xfc\x07\x19\x9f\xe8/\x05u\xf1o\x02\xc62/9\xd1\x1dV\x93q\x99\xf6_\x06%\\)\n\x8c\xc6\x88\x80\xee\xa9%OhD\xe9(Bh\xe3_\x850\x0f\x82\x88+\xad\xe0\x18\x96\xf2\xef ,\xbb&]N[\x0ddl\xa3\x11\xbb\x0d\xb6\x00/\x8c\x051l\x01f\x18 j\xb0o@\xe0j\xa4\xa5\xc6\xc5\x98\xd3\xa9\xe9\xa9\xa2\xdeZ\xe7W\x84\n3\xb0t\xc8\xfaE\xf7\xefEK\x1b$\xa4\xe4\n\xd3\xdf\xb8-\xc77\x1c\xae\xd6\xca\xb63\x0b\x84\xc6\x89\xee\xca+\x14R\xd3f\x96\x17\xa12N\x91\x1b\xd0\x9acT\x14\xb9\x94W\xd6\xea\xb7\x81\x03\xe8\xdc\xce+\x10\xc4l\x9c\xc5\xb6Z\x84\xfa@\xab\x005\x15iST\xc4\xf5**\xc9|3#\xfe\xd6C\x00\xf52\x96ytNk\xbc:\x9d\xd6nA\xa2h\xc1\x8c\xfd\xee\xfb\x08F$\xa55\x15>hU7\xcc\x9d\xe4\xb9\xb2$S\xb5'\x7f:\x82=\xd4U\xec\x85\xcdmn\xe0\xd7AG\x1cv\xf2\xa4\xd3\x15q\xb1\xe3\xd7\xd3\xcc\xe1\xb2\xbf[\x86\xe2\xf2\xe8\xca\xad_\x8f1\xb7\xb9\xf5K\xe1\xa5q\xd1\x88\xe4\x17\xd6o\xed7\x12\xdd\"p\xc9\xc6\xb5\x81\x95\x011\xbf5\\\xf8\xf7\x9ejd\xb0W\\\x80T$\xbc\xd7&23\xcfg\xcf\xe3\xd9\x8aL\xe0\x9d\x1e\xb5\xe3\x8b*O75I\x167\x13\xc8\xf5uf)\x89K\xde\x8c\x9b\xd2\x85\xf33;\\\xf1;')\xa9 \xbb\x8a\x98t\xf1\xf7\xdd6\x91-\x94\x16\xcd 6\xa8x\xf4\x93TE\xf0 \xbc\xd5W\xba.\xe3\x82\xd7H\xf45\x96\xa4F2n0\xbfG\xdd\xf7\x04b\xfd[\xf2\xa9.\xe3Y\xfd\xb2\xcc\xd7\xd8\xc8F_M\xde\x06\xb9.\x87r\x19x\xce\xee\x920\x81\xec0\x88W$\x9e\xa3\xa1\x87}\xd3<\x9b\xcdHQO\xc0\x8b\x8b\"Mfh\x8f\xf3\xe0\xe7*\xcfBP\x9f\xdc\xc4\xeb\xd4\x1b\xde/\xc3\xf47\xcd\xe3\xf9)\xdaF\xef\x98\xe3\xaf\xdd:\xdf\x0c\x8a\"\xe8^\x84G\xf6\x80\x91\xce\xb6-_K\x02_\xc5\x0b\xf2c\x1e\xcf\x07=\xb4F\xe1-\xc7\x19#\x0fH\x97\xe1\x1dcF?\xe4\xe8\xa42\x81\x99\xbe\xaa\xb8\x1f\xf9\x8b\xfa\xc9%\xc9&\xb0\xe8\xd3\xa5\xa0k\xb9\xc3\xa7\x08G\xf0\xaa\xaf\x8a\xfc\xd9\xaa4\x17*V\xa2^\x0f\x10\xf5z\xa0cp\xd0\xeeD5J\xa9{\xe6FcMZ\x1enm\x0ds\xf0\xed\xf6\x9f>\xfa\x02C\x1a\xf5\xcd\xaf\xa0Z.\xad\xeb \xdb\x1a\xec\xc0\xb0\xd1\x0e\xe8\x8fI\x93\xc29\x17\n\\3\xba\xf6\x87\xc1\x14\x95h\x12\xa7Q!\x99\xb5\x94 ^1\xe8\xa7\x85lv\x1c\xadI\x1dS\xa4\xe6\x7f\xb24\\6\xe5\xe6f\x1b\xe5f\xdeUnn\xacZ\nf\xd0\xd4Isk\xfb\x08T\x0dl\xfb\x16\x1a!\xd8\xe813\x88i\x9b&\xc3$\xb5\x08;\x8fH\x88\xabL\xb1m\x89\x003\xf8Vhn],\xdag\x98\xee\x04\xb7\xc3\xf0X7[\xf0.\x80\x1d`B,8\x82Y\xcf\xfe\xa2[\xa8x\xcd\xf8\x1d\xfc\xc0\xdfca\xd89\xfb\xf4\xcbm\x08\xb3 \x88\x10\xd6n:\xd7i\"\xe5\xe8M\x08\xbf\xdc\x062c6\xe9\xf8\xa78\nb\x887I;\xc4\x97\xfd+\xe0_624\xe5\xb8\xed\xb8A\x0b.\xa4\xa3\x8b\x81\xa0W]\x13\x89\x94`\xfeqH2h#*\x8b\xbdT\xb9\xe0)(\xe6\x1d\x1d\\\xb5\x9bU;\x9b\x18'\xd1\x9a\x94K\xf2\x82\x90\x82\xae\x98E`\xba\xb5\xc5n\xe2\xad.\x98\xac\xdci|\x16\x04!\xcc\x18]\xa2\x84J\xd6\xe2\xba\x9b\xa9D\x96M\x08\x1eV\xf3\x02\xfaM\x9fG\x10\xc5Y\xd6i=\xc1XTc\x0eu\xeb\x19\xd9z%e\xf7\xdf\xc8\xd8T\xfd\xf5+\x1c\xd8\xf9\xd0\xadl\xd2\\\x90\x8e?&\x1b\x9b\xf0Qgei9+{\xd9\xd6q\x1d\xec^\x82\xe2\xbc\xec8\xa6O\xcf\xec\xea\x9d\xfe\x1d\xa2E\x1c\xe9wC\xa9q\xd2\xb1]+\xa3\xaa \xb3\x10\xaa\xa1})e\x90\xfey\xe2@\x84\xdd\xb4}\x9bi}\xa6,h\x19\xc9\xa5{\x1d\xcf\xca\xdcO\xed\xa4e\x94.E\xe0]\xe3\x87j\x0bR\x03\x0d$\xf2\x0e9\x1dv\xec\x18P\xb4\x04\xea\x8a\x88s/\x0bac\x10\xb3\xb4O%!\xd64d5\\\xfdoJ\xf6oB\xc9\x9a\xa4\xcd\xa3(\x99i/\xd0\xd1\xc6z\x1aa\xda\x08\xd2\xb1qC\xd9\x122d\x06NK<\xdd\xb4w\xf4:\x9f\x93T\xc0\x9d\xedjZ\xc7\x80\xeaN\xbbY\xe5\xed\xed\xbbx\x14\xe3>~\xaf\xc5\xff\x8f\xef5\xfd`\xcc.*\xd2T@\xdf\xf3l\x95\xa4\xf3\x92d\x13]\x8cq\x16e\xb0v3BM\x86l\x95\xe4\xe1&b\"\xca`\x0b$*\xca\xbc\xce\xff\xca\x9fgp\x8c\xbbe\xd3\xde-\x99R\xab\x89P\x8a\xc6\xc4W\xec\x99\xbf\xa7\x04\x8c\x08|\x12\x89\x99i\x94\xcb\xc6\xd3T\xb5\x84e_Ok\xc3\xa5V\xab\n\x1cAB\x913\x13\xa3\xd1\xba\x19t=\xf9~u\xc2\x19\x0fY\xfcm\xf8\xcbC\xdd\xcbJ\x98\xd7i-\xe8RA\x90\xb5\x0d\xcfTM\x91 \xf2\xae\x17i\x9d\xb4\xf6\xcc\xb0M\x86o-\xf3\x9cR\xc1\xdc7\x9a\xba\x81\x8d\xe8t\x1c\xc9I\x08S\xf3hd\\\xac\x11\x81\x89\\\xb8\xb9\xabnP\xf5\xb8$\x19\xc6\xc2\xda\xb1\xa5\x1bB\x1b\x13[\xfb\xa0\x08\xc5dJ\xd4t\x03v\xd5\x08p\xa3\xe3L\xee\x00;K\x17O\xcb38\x86\xc4\xa7\x7f\x0821a\x8fq\xbd\xe8\x83\xc1V\xb8\xe7u\xe2\xcb\x85f\xcdl\xd2t@\x91\xae_\x7f{\xc0\xa9;\x8e;G\x17\xc5\x97\xb1;\xa7g\x81\xd6\x19FL\xccE\xed$\xd9\x04\x19\x15\x92\x81$S\xd3,*\x7fS\x9ei\xef)\xe4\xf0}c\x87~\xef\x1e\xf8\x0c\x03\xf2\xb3\x10|D\xb8\x86lN\xcb\xb3\xe0)\xe4\xbb\xbb\x01\x0b\x911--\xd7\xfbb\x1a\x18\xe0E\xa1\xd7_eu\xd8\x8e\x18\xb3F\x0e\xdb\xaeu\x03A\x945\x82cfi4Q\x9f\x1e\x888\xc9Hu\xd0\xafE\x11\x1cu6\x0dN\xfb\x12Ui\x8dA\xa8\x05\x0f@\xdd\xc9#6\xa4\x98j9\xcd\xd0\xa8\x9eE\x8e-Y\xfe\x85\x1c\xad\xd4\xd0\xe8?\x04\xfalxg*\xc4w\xf4V4\xfa\xb7\x9b\x99\xf7\xd9X\x06o\xf8\xd6\xe5p\xc0\xf1\xf9\xdf\x8b5T\x7f\xfd\n\xdc\x84\x10\xc3\x1e\x0e\x89aZnB\xf0!\xfbZ\x8b{\xc1\x88\xeck\xe5;\xc9\x89<2q\"\x99\xff\xed\x00\xf6\x0cr\"W<\x03Y\x87\x99\x94\xa2\x1bKs\xab\xf2*\x03\x9b\x1a\xb7%f\x0b\x9e\x85\xb0\x08\xa1\x08a\x1e\xc2\nMF\xd7h\xbdv\x03G\x10\x97Kt5T2m\x1d\xa0uYc@!\xabL\x0f\xe8!\xda\xfaI\xf9v\xfdn\x97Z\x141\xf6\xeb\xd29\xf2\x14\x9e.O\x9f\x06P]'L>\x14\xd9, \x86\xce\xb1\xd11LW\xe8\x90\xd5S(\xce\xe1\x08nx\\\x99\x93\xacNJ\xf2\xa1$\x84\xa5\x18\xbe\x11\x86\xf5,\xb50\xad\xf6\x8f\x0d\xa9\xeaWYM\xca\x19)\xea\xbcd\xc9\x86\xe9\x9b\xaa\xc8\xb3\x8a\xb4^\x15\xf8\xaa\xad\xe7b\xd9Jo4\xb22\xcbGl'\xd2\x80\xa10\xea\xd5\x8b\xa4\x9a\x95\xc9:\xc9X~\xbe\xcc\x8d{\x92\xa6~\x06+\x90n\xe9O\xd9x\x83\xdf-\x1a\x98L`\xe1\xf6m\x1bh\x13(\xdc>\xebCu\x02s\xeb\x97\xb7!\xda\xce3\xf6[\xa6\xbe9\xbd\x8e\x97KR\x06\x0e!\xf3\xa0 {h\xadKe\xb15\x86\xf2d\x8aY\"\xb2\xac~\x1bv%\x8cN\xea\x0d*\x8c\xael\x863\xa2\xb0\xe1\xac\xdd\xc0\xd6\xcf\x80\xe1\x1a\xad\xab\xbaL\n\x11\x85\x14\xedl\x06\xadcD\xb1^\x12\xe1&\xfe\xd6y\x13/\x99\xe3/\xc9\xea\x10vJJ\xc2\xda\n|\xe6\xdb\x99\xa9\xcc\xe7\x12\xc1\xcfW]\x91\xf8\x97|Y2\xf4\xd6C\x16\x9f\xaeQ|Qn\x8a\xda\xf7X\x87^\x08K\x97\x19X2\xad\x8e\xc9\xac*\xb5\x18\x96L\xaaF\xc6\x960VI\xebb\xd8\x9f\x8a\xb8\xa5\x93j\x8b\x81\xc3F\x0e\x0d\x93\xb0p\xb9X\x9e\x14V\x9d\x99\x1f\x8ce\xaa\xfe\xbdX#\xfd`\xf2A&@s2\xef\x19O\xe6\xbd\xf6\xc9\xbcg:\x99{kjSE1\x0b\xe97\xf1z\xc0+\x809d\xaf1\n\xbb\xb9\x16\xc6\xe2\x8d(Yf\xe1\xb2\x0c\xb9\x9a\x9dG\x08|\x94\x89\x1eV\xfbFX\xed\xb7a\xb5?\xc4\xc5\x80\x8a\xdb\xe4\x13\x99mj\x16rZa\xcf\x86\x891#\xc2\x04I\x8ay\xc7\x86]\x1aDB\xf0\xfa\xe7\xae\x87O{G*}\xbc\xa9H\xf9\x92\xd4\xb3\x95g\x8d\xc1&V\xd4\xca0\xb0%\x9d@9\\M\x0d\xcaeI)\xac,\xffP\xa8\xb4\xdb\x10\x12\x831\xb7\xf5\xd6\xde\xac\x1f6\xed\xb6\x9a\x1d\x1d\x94\xe6k\xbb\xe4*\xd9\x0b\xfd\xdbF\xcd\xc1\x03\n\x1c\x03\x95\xd4\x0d\xa0\xcd\xb1-\xbe\xcc\x1f\xe2\xa5\xbeV\xd2n3\x87c\xf0\xf87\x1e\x18\xcd\xa4c\x96\xec\xe7\xe0m\x03\xe4\xe7\xf9\xba\x88\xeb\xe4\"I\x93\xfa\xe6u>7\xec\xe2\x8d\xc1\xdb\x96\x96\x05\xbe3\x92\x12\xc6\xaf\x90x\xb6\x92\xdd\x06\xf4\xa8\xb0s\xfa\x8d\xb6\xdbNb\x18\xd8l$&\xc5Z\x12\xc7\xf4[\xdaO\xa3:^Vp\x0c3\xfeg\x00\x13\x98&gc\xcd\xc0[\xce\xb4G\xaa3\xad]\xbb\x8a1\x1cX`\x1c\xfc\x8f\xddF\x0c~\x06\\\x97\xcd\x00\x9e\x17\xaf\xe6\x81\x9f\xe2\xfd_n\xdb\xf0\xa2\x0c\xa3\xc6\x04bk+:W\xedn)PDv\x1b\x11\xe7\x98\xed\x8d\xc2\x18\xba%\x8a\xa0_\x86\xfd\xd2-\x12q\x9c\xfd\xd9Z\xe4\xccL\xdeE\xb1\xf9wQ\x8c\xdaLgg\x01\xd0\x7fwwCH\xa6\x9e\x07\xbb0\x83]|D\xf1\xa5\x18n\x83\xa9\xa9\x9b\xb0D\xf4\xecK\xb0M\xfb\x8aP\xcc\xa4\xa2)\xed\x8a\xa2\xa4C\x04a\xacz\x04s\x16\x8a|\xfcp\x81wK\xe5^:L{m\xeeyA+\xb7:\x9c\xd3\xde\xcc\x89\x9bAQ\xe2\xb31\x17\xc6\xba\x06\x06Z\x7f\xa9\xd66;\xfb\xcaj\xb0\x10\xea\xa8\"\xe9\xc2\xe0'\xac\xde\xb2\x1d\xf6-\x10\xd6\xf1%9aL\x0c\x1cQ\xb2\xc1\x1e=+\x92\xeaC\xbc\x94\xb4\xa1\x92\x7f5\x95\x9d\xf4Vw\xc0\xb2\xea\xf7\x1dj\xce\xd4\xe1\x1b\x9d\xf63^\xb3hMh\x80\x1a\xd9h\xe2v\x07*t8?s\xad\xd9\x85Ic`\xa2\xb5\xa5\xe1@\x96w29$\x99\xe9>KVJh\xa5r\x9a\x9f\x0d*\x9c$\x81\xab\xb47\xf4\xc0x\xb5l\x9a\x9f\x05\xd8Xs\xf8V,,\x8d\xb9i\xceMO\xf0\xebi\xa2W\xf2\x9b\xf9\x0e}\xc3q\x91T\xba`\x81=\x1b\x0d=\xe6\xffK\"\xfaV \xf8\x8f\xd9\x03nK\xd9\x9e*=K\xfa\x84Q(\xf6\xbf\xd5\x9a T\\u\xdf\x7f\x93\xda\xb0\x02\x9a%\xd1\xbalj\xd6z6\xc6}\xa5g\x89\xca\xb4\x12:\xd7CMW\x0b\x16.\x8d\x1d\x1a\xfa~\xba\xf03:\x17*\x88\xa9\x13\xdf\x9a\xa5\x19w\x07\xf6\xe4` \xce\xf1\x7f\x86\xa6\xe7\x0b\x85O\x85\xd14\x1f\n>\x89*2\xdb\x94I\x9d\x90*\x04\"\xee*0JPV\x7f\xb8)\x08{\xca\x14\x08\xcac\xc3I\xc3\xa4\xaej\xb6\"&\xd9\x8c\x89\x9c\x9a;\x11m\xed\x8a\xd7\xee\xdf\x93h\xab\xcf\x98\xdc\xcd\"\x19\xfcT\x1ax\xf2\x05\xd6\x92\xea\x0f}\xa5\x82\x81\x87\x0f\xf4\x87|~\x13\xa2\xb6\xb8\xbc\"\xa5a\xf2s\xaeP\xa6U\xfe\x1a\x97I|\x91\x12\x83S\xed\n\xab\xae\xea\xdapE\xb1\xe4R\xaeP\x93\xe8k\xdd\xb4k\xfd\xb0I\xd2\xb9\xb1\xb2\x08\xe2\xf5)J\xaa\xb7\xcfN\x0f\x03\xbf\xd6\x1c\x147\xe8\xaeO\x1b~\x0b\xc7p.\xef!\x95\x88\xe8\x86 \x83\xef\x8c\xc4bS\xa6\x13cd\xa3YI\xe6$\xab\x938\xad&\x80Z\xf6Ut\x9d\xd4\xab\xe7\xcds8\x06/\xc9f\xe9fN0\x0ca\x15\xaf\xc9}\x16C\xcc\xd0h\xe3\x08l85gy~\x89q\xdeuF\x84\xfd\xf9\xc5\xa8\xfd\x7f\xa7A[z\xb4\x07!T\xb2B\x0fS\xe1\x08*\xca\xf4\xf3\x1a\x12\xed(=7\x80\xf2\x83\\\xaa%\xa9%\x91}\x1f_\x07CQew>\xa8\x91U\x9f\xfb^\xc3\xa4P\x89'\xc3\xd0\xb1Y^\xc3\"\xdfds\x9d\xab\x10\xed\xfb5F\x9e\x94\xd4C\x0f\xbeWmm\xd3k8\x86_na\x02\xaf\xf5\xd5\x7f\xc66\x87t1o\xb0\x86\x10\xd7\xf5\xf3{\x17m\xca\x14v\x8f\x8c\xa6\xa1\x83\xaa\x01F\x93\xcc\x01\x03$\xcd0\xdeT\xb2\x8dm\xbcU\xec\xec{c\x18\x9dF'\xf1\xc6pdr\x1d\xc4\xcf}\xcc\x0cB\xd8\xc9\xa4\xa5\x8d\x88(\x10ql\x0e\xe1]\x1fr\x12joBx\xc7\xd7\x80\xa2\x17J\xc1?\x07Q\x9d\xffT\x14\xa4|\x1eW\xc4\xc7\xa08G\xb0d\xca%=~\xbc\x97*\xfej\xfa\xe6\xccT\xb3\xe4\xd8\xce7b\x14\xa3\xbb=e\xa7\x0ch\xf7\x02\x8e\xe0\x99\xe2\xa9u\xea\xbfR\xc8_\x104\xcf\xdf\xb7\x9ek\x9a{1B+'4\x8a7S\x12%\xd9\x80-ai\x89\xb3\x85\xaa\xbd\x8b|~\xe3\xc9\x18\xb2\x8ca@\xbc\x8b\xd5\xbf\xa3\xc6h_Z\xb4-;\x11\xb5\xd0:\x8a}\x94\xc5k\xfck9e\x7f\x9fQn\xce\xf0>\xc1M\x1e\xb10\xadX\x19&p\xe9\xb3\xbfCx\x11tn;D\xc2\x96\xeb\xb8\xcc|\xef\x9d\x80+\x8f\xd4\xcf\x9a\xc6p\xfdI\x05\xf1\xfa\"Yn\xf2M%\x83\xdb\xd7+\x02<\n3\xee=X\xc5\x15\xac\xf3\x92\xbe\x893\xc83\xd2(\xfa1;\x00~\x91!\xee\xf7z\x88\xb39\xbe.\xe2\xaa\"\xf3\xfbI\xa6|\x8b\xba\x8d\n\xe6 \x8b#\xc6\xfa\x848\x83?$\xd9\x1f\xd8\xdb\xc8\x0bB\x11\\\xebh8\xf6bG\xd5%u\xeb\x8a8\x86\x91\xb9\x1bsCy\xf2\x85\xbd\n\x8cCHJ2\xa7\xbfvH\x84\xb7\xe2'\xeb\xa2\xbe\xf9+3\xf9nH2\xf7\xe2|/>h&\xd8\x06\x06\x856\x9dgQ\xe6W\xc9\x9chI\xb5:\x99\xb7]L\xf3\x98;\xa8@E\x8ev\xf5M\x81\x88\xa2\xd1@\x976\xaf\x0d\xe0[@I\xa3:\x90.\xdf\xcdK\x03d\xa02\x058M\xb48\xec\x85;\xb6vqA\x84\x97\x8c+\x1c\x91!\x041\x18\x15s\x80l\xf2\xbd{\x90Y\xb4\xce%\xf9\x871\x0e\x8d(rl\xd6@h\"3\xc1p-E\xa9\xfcj\xb8\xa6\xcdz\xc4\xd9\x9c\\\xa7f\xa6\xa4\xf1\xc7\xbe\xa9\xc3/\xcc*@\x0f6u\xe8N\x9d\xa0\x9d\xf1;\xcem\xd2\x9e\xae\x9b\x9e~\x0c\xe1]\xc0\x83\xef\x9ct\x1e\x07\xe2\xcc\xc3M\xda\xb6\x80\x97\xe7a`\xf1\xbd\xa43\xfc\xa9\x9f\x8aM\xf9~l\x98/q\x9c\xc8&\x8c\xde\x18\xa0J\x96\xbb\xe0cP\xfb{\xc8\xdeb\x18\xec&goE\xca\x04M\x8b\x06l\xceoC\xfa\x99\xbe\xa7\xe6\x10~\x8ec\x82#\xf8\xa9\xbf6\xfd\x13\x9c\x0d\xee\x9d\n\xe8>\xc3\xc1\x02#\xa17\xf6\xab\xec\x7foHy\xf3\xb6|\x99\x97\xeb\xc0\x7f\x17\x84\xf0\xeew\xed>Z?m\xf7\xac\xcama#\xb20\xb9\x97\x9e\x80ng\xbbMV\x06)/\xdbo\x14K\xa7\x1b\xc5\\\x11\x02\xcd\xb5\x12'A\x15\xa4\xbc\xec$TB+\x99!\x12\xffXp\xe6\x03\x86{\x15\xdf\x02J\x92\xb6:\x84\xa9\x87<\x9e\x87\xf7\x85~\xc9\x82\xd3Rv\xf1\xc7\xfc\xbaa\x17=6\xb0\xca;\x0bD\x9c\xb7\x81f\x1cj75\xcc\x03N1n\xbb\xf9\xfd\x8c\xc7\xd94sj9\xc5fDi\x97,\xae\x14\x91\n*\xc6\x8dL\x85*\xcd@6\xa59*\xdb\xd0\x0d_!c\xe9\xe5\x01\xfc \xee#\xcf\xe6\xa7\xec&\x86\xce\xb2\x9a\xaaUL>\x93;io\xba\xb2\xa1j\xbawF\xc7'\xda\xdb;\x0b(1\x14\x8dz\xbfxM\xcfn3o9zL\xcf\x98\x87\xc7\x83_\xfc\xe9\xdfo\xcfv\x83\xdb\x07K\xd5\xcf\xe3)\x0bs\x81\x862> \x9e\x06T\xb6\xd8T+\xbf\x9c\xee\x9f\xd9}6\x0d*`?\xdd\xe6f~\x16]\x89\xfd\x85\xbcq\xf3sJ\xac\x97\xa1b\xc2\xed\xaf\x86\x8fo\xe0\xc4g\xc3\xef\xf3\xa5\x0d\x9b\xfd\xb3\xb2\x13\xc9\xfd\x17\x99\x1c\xe6\xd6\x0b\xc1[\xda\x02\x81\xd0\xa5O\xa5\x97j9\xe8\xccd\xba\xdb\xd4\xf7\xd0\xb5\xc6\xb2m\xac;\xb9\x1c\xb1\x85\xcd\xae\xef\xc2\xe2\xcb\xd6 ]\xca\x95<\xb6\x19\x93l\x8b\xdfPj\xbe\xa9-\xdf\xd0\x13\xe6\x9d\xcf\x1dLgy\x8a\xb4\xf4\x9d_\xb6\x1f\xd8F\x9b\xe0\xbe[\xe5\x15z\x1e\x96\xf8\xd7\xf0\x17\xcc\x85\x8e\x92s\x14T\x1c\xfap\xc9\xac\xcb\xf1E\x84O\xf3\xe97H\x9e\x138\x86\x9cb\xf4\xe4\x01\xe6\xd4\xf0\x13\xd8\x85\x18\x9d\xf0\x82\xe9F\xf5\x00\x84c\xd8\xb4\\\x99`b\xc8\xbaz\xeb\xa7!hr\xb2\xdf\xfa\xe8\x9bk\xa7\x15\xe3x\x8a!=8H\x8e\xc2\x85\x0b\xc8\xdb\xc7z)R\xb2XX\x8c.j\xe5\x03\xa8E\x97\xb7}oT\xf3 T\x98\xf4K\xfc`;\x0e\xfd\xad\x8cma\xf4/\x8a!1\xc3\xcd\xa4\x83\x9b\xab\xba.\x06p\x87\x19\xf4\n\xdcL\xe4_C\xf8\x96\xe27\"\xb0\xbb\xad\xf6\xcc\x82\x99]\xac\x9caz\x17>\xc9\xae\x99+\x96\xf6\x89\xf0\x1b\x17&\xc6\xf2\xbfy\xf80E\xdd\xc4n\x98e\x8di&i\xa2\xe6nU\x03\x82\x7flH\xf9\x95V\xc86{ &\xb3\x8e\xbd\x8ep|\x08\x03\xf6\x17\x87\xc0\xce>w{\xbbw\x0f\xbc\x8b'?\xbd\x7f\xf5<_\x17yF\xb2\xda\xcf4\xbe\xa7:\xcb\xea\xbc\\\xbf\x88\xeb\xf8_\x12\x00~\xc64\xc1=\x0b\x16F\xa5\xe8\xd8\x11<\xf8\x87D\x13\xfa\xcbiC\x89-a\x1ee\xa7\xe3I\x7f,\xe6o]\xb6\xab\x1ei\x1d\xfc\x05\xfe\x93\x03\x0d\xa8\xbf\xee\x9c\xc5\xe8\xcb\xf9\xf9\x90\x12P\xc4`\xd2\x8a\xc8B-\xf9\xed\xe3q\x81r\xff\x05\x08\x8e\xb9bC\xa9\xcdu\x10*QU\xdf\xa4\x03\x95P/K\xd14\x1d\xf6\xae\xe9\xabr\x86%\x18\x8c_g\x1b!8moZp\x16\x13HP?_%\xeb\x82\"\xd4\xe0\x17|J\x13\xd8\xd0ol\x990X6\xa0 \xec\xec\x1b\xab\x99$\xcb!\xfa\x9f\x0b\xd2\xaf\x0bL\xf2\x1f\xc9\x98\x99\x19\xb06K5\xcc\x88l\xfa\x91\x0e\xbcM\xc6mF=n\xdb\xa5\x04+\xd2\x99\xb6\x8b\xe2\xcd )\xde*\x86\x8d|Op\xc3\xb1\\me\xa4\xb4\x0f\nq\xca\xacY!\xdb\\$\xc5\x8c\xa9\xbc}?\xf3\x86\x0fAQ\xf8n\x19\xb5\x15E\xc1-\xe9\x98r\x95\xf7\xe3\xe8\xce\xcew\xa7\ni\xb7\x0f\xc5\xb6\xe3\x07\xf6{\x82f\xb4\xf0\xd0IP\xcd\xc6\x1dJ\xee;e\xf4\xa1\xd0\xdf\x1e\xad'\xb7}U\x0b]\xdf\xa9\xc7S(K\xe6\x8c\x12\x9e\x9a\xbf\xec\x9ad\x11\x14\xbb\xa6g\xae\xdd\x81\xeat!\xc1\xb0\xff\xa8\xe3\xe5\xac\xdf`[t\xe2\xfd\x0f\x14\xfcM\xed\xfd\x9c'\x99\xefi\x9c\x13\x95w\xd0E\xd8_]#\x9b\x0cid\xe3F#\xdb\xd5\xb9\xb2[\x90\x17I\x85\\!\x99S\xfc\x88g5;\x01\xf3P\x1f\xc3\xdeb\xb8i8_\xb5VF\xf5X/\xb0Krcc\x04\x9cTl\x16M,3\xfd\xb42D\xcc\xafk\x88\x1e\x00W\xeb\xda\xe7(\n\x87\x13\xe6\xd6\xb2Ku\xe2(\x1c\x8e\xe1h8\x8f\xa0\x7f\xe6\x88\xc2\xa2\\2\xa6\x92\xb15M\xb6\xdc\xf1{lc\xca;/7Qhrv\xc1\x81\xa4\xf1\x05I\xbb\xe3`.\xf2_e4\xd1\xe0h\xd6q]&\x9f\xbe2X\xc6&r\xe1M\xb2,2 \x1c\xd3\x83\x84\xb9\xfbQ\x06\xef)\x05U\xcdX=\x0c#2a\xaa\xce\x10\x7f\xe9\xc70\xe0\x8e\x8a``\x8a\xb4#\x9b\xa7\xbe\x90`\x13\xee\x1c\xdb\x8ccB\xfb73\x9e[\xc0\x15\x1c`\x0b\xcaBkn\x02\xc0(\xed\xb3-Q\xc43\xf2\x82\xa4\xc9:\xa9)\x93\xee4\xfd\x94O_\x99\xf8o;o\x0f\x83\x15\x18RX\x0d\xcc\xbeH\x8a\xd1\x93\x9f\xfd\xcbM\xfe3\xc6\x0eu\x9dh\xde\x0d H\xeb\xa1AE\xc7\x1d\x92\xbe}\xc2\x1c\x92\x1e\xe9\x1d\x92\x985\xf9#]~\xff\xd4i%\x05\xec&\x0f\x8e\x7f?=\xfb\xffv\xbe\xb9\xf7\x07?\xf8\xe3n\xf8\xf4\xc8\x93\xf7\x19\xdcp\xb6?\x15\x8d&~L\xa7\x0f\xfe>\x8d\xef\xffs\xef\xfe\x93\x8f\xf7\xa3\xf3\xff:\xdb\xfd\xe6A\x12\xd5\xa4\xaau,\xd7\xb6~\x01O\x0e\xf7\xb7\xb7\xd1?\xd8\xfe\xd3\xc3/0\xefo\xbd\xfa\xb7\xd4\x8a\xca\x00\xa9f\x95\xa6\xdd5\xb5\xec[ a\xcc\x9a\xc1\x84(\x96\x08\x95\x9a|(\xd8\xe6`\"\x14\xb3\xdb\xef\xa2\xef=\x8bw\xa3\x86\xcbbtR\x8c\x84\xc2\x9d\x18\xdc{\xe7\xed1\x16b\x8c\x06\xdfeLx \x80\x89F[q\xeb\xd7\xd4\x10n\xe4\n\xb3-\xdc\xbb\x07;;\x1d\xfd\xea\\D\xc8\xd2\x7f\xb8\xee\xc7\xc6\x8aC\x98z3a\xf6\xac:\xfd\xde\x9c\xb2\xf0\x00<\xb6\xcfP*)\xe5\xa6l\xd1\xbd\\]H\xe3\xb4E\xdb8\xad3\xf42P\x14\xd8W\xf4\x1f\x16\xd3\xa6s}\xd5\xc0\x0bG\xd5\xfc\x94a\x7f\x8e\xc1_il4\x06X\x13\x19\xe0&\x83$\x1bN\xde\"8\x98\xf9t(\xb6$p\xa4^O\xb3\x01{\x0f\xb4\x07\xb0\x9d\xd3R\xa1\xcb\xf3\xd6\x7f\xfel\xbb\x10\x03\x8e\xfd9zN\x0c\x9b\x9b\xb0!X\x9bCy?.\x92\xffEx4\xcc8\x00\x0f\x17\x93\xdf3\xf2\xe0\x98\xfeB8\x19\xc8\xeb\xf0$\x08\xc1c(\xd1\xab+.\xcf;\xb5\xd9\x9dp\xaf\xb6\x08\xc0\xa6\xd6\x1e\x9e\x1d\xa8>\x18\xcc/^\x8c\xde\xce\xf2\x80\x8c\x01\x1aW\xc9L\x8c\x86\x85\xccp\xfd\x1e\x14\xae \xc1@\xc1\xf6[\xcfnAuYT\xc4Uu\x9d\x97\x03a\xcatE\xc8\xb3\x8a\x7f,\x0buA\xd9\xa3\xca\x01z\xa2\xc8\xb5\x8a\x9e\xa9w\x8ep\x04\xde\x0f\x14\xfcN\xf1\xbf\xbc\xe5\x81*-R\xae>R\xa1\xe0r\xf9\xb9\x87a\xdf\xe9\x06\x8eVq\xf5\xf6:\x13'`{x\xb9-_\xb2d\xb3 \xcf)Bi\xfa\xdeS\xa8\xe1{8\xf8\xf6\xd1S\xd8\xdd\xad\x03 ,\xda&\xf3\xca\xa1t\xff{\xd8\x7fD\xb9\xb1=\xc5\xf2\xb1\xe5\x17\xd4q\x0c2\xab\xef:>:\xbeR\xb3\x8ebJ:?\xe4l\xca\xb6\xb3V\x91\x18\x8e\x00s\xce\xd5Q\x91\xc6I\xc6>\xa7\x9c\x1a\x87\xdd\xac$qM\xfcl\x93b|y\xca\x0b\x96l\xda%|/\x1d\xb8\xe8\xdc\xcb@UV\x91iy\x86\xf8\x98\xd1?\xd8\xef\xee\x92sS\xe9f\xcd1)6)\x97\xa43\xfe,\xec;\x92\xa2\xba\xb6IC\xd9\xe1\xc3\xd9\x0d\x99T\x7f \x9d\x9b\xd6\x03\x81\xd6\xed\xc6\x0e\x96\xeb\xa8\xb3\xa5E*gVDk\xfa%r\x9cS:\x1d\x83\xe8\xe5\xe7\xedE\xf8\xfc\x99\x8a(i\x9a_\xbf\x13\x18\x8c\x0fw\xcah\x16\xa7\xa9\xdfEo\xba7\x18\x11 S\x0cv\xbb\xb37b\xc3\x0fy\x809LK&\xcd\xecBLp\x87D\xbb\xfa\xbd\xa0\xcd}\xef\xdf\x8c\xcd)A'\xd0\x16\x9aS\xdc@m\xa7\xae\x95^#\xc7\xe0g}\xc1:\x0b!\xd1*\xc0\x18\x8c \xbe>\x062M\x10\x9f\x15\xad\xb6\x84\x02}\xc5k\xfc\xff\xec\xbdk\x97\x1c\xc7\x95 \xf6]\xbf\"P3KU\x0d\n\x8d\xee\x06@\x11MAt\xa3\xbb\x014\xd4\xe8n\xf6\x03 \x00a\xa0\xac\xcc\xa8\xaaDge&\xf2Q\xdd\x8d\x11\xe6\x90#\x8a\xc2\x83;\xb3\xde\x91\xa8\x91=cy\xd6$H\x00\xb3^\xdb\xeb\xb5\xd7\xf6\x8e\xf7\x1c>\xd6>Gs\xa8\x99\xbf\x80?\xb0\xfe >\x117\"2\xf3\xde\xc8\xac\x02 R\x9c\x1d\xd59\x12\x1by\xe3\x1d7\xee+\xee\xbdqFcp[\xfcSc\xeeB\x81M\xe2o(X%\xf9B\x8e\x97\xbe\x9cjS\xf7\xf8a\xda\x0e\xada4\xd6\xe1j\xd2\x1b^\xf7\xebc6ms\xc2#v\xf4\x88\x01\xe8t1bT\xde.\x01\xbe\x90\xa6\xfe \x9cDs\xd4\x18\xca\xf3\xcb\xa6\x0f\x13\xd2H\n\x88\x9d]\x0foX\x06\xc6\xd1\xc0<.$\x95F'A\xfb\x8b\x93\xaa7\xa8_\xc9\xb1X\xce.|Tf\x17f-\x946\xc0<e\xbe\x9e\x9e5_O\x7f\xc7|\x9d\x9b\x9f\x97q\xc5G\xf5\xc0\xe4\xa0\xd8\x82\x80\xb2\xb9\xf9W40\x12\xd8\x0e_\xe7gO\x96>\xcf\x9d\x9eg\xb2\xd9\xef\xb1\x97o\xb0\xa3\xe2\xcb\xfc+\xecG\xec\xe5\x13\xec%f\xea\x9c:5\x7f\xfae\xd3\xff\xa9\xef\x9c8y\xb2hb~\xfe\xa4nbn\xbe\xdc\x06\xb4\xca^b/\x9f\xb07\xddND\x0bs]\xb9\xb0/\x9f:u\xe2e)S\xcc\xcd\xce\xcb\"\x1d\xf6\xdd\xef\xb2\xb9Y\xf6#\xa6\xbe\xa0\xb5\x97; C89k\x86\xf0\n\x19\xc2\xdc<\x19C\xf3\xd0:\x0d\xac\xc2\xce\xd5\xddh\x14;ns\x14n\xf5\xcd6\x8aaQ\xefV\xdd\xc5Cd\xbdr\xa0\xe2g\x9cD\xf1\x02kE\xd5\x0c{\x96fI\xeef\x91zH\xbb\xf4\xa1\xe8\xab\x16\"4\x85b|\xdfb_VaU3/\x16C \x1bTS=\xfe\xcf\xe6g\x8f\x0f\x8a\x16\xca\xf7\xc4\xd5\xc50\x97\xb2\xad\xadsK'N\xbf\xf22J\x1f\xd3\x97i\x89\xe1m \x8a\xbd[\xe7\x96\xe6\xbes\xe2\x95ib\x8c\x88\x90\x19uY\xeb\xa8-\xf3\x04\xa5\x13jh\xcf\xd1\xcd\xc4+\xe6j'f\x1e-\xf5W\x8b\xc0a\x00f\x95\x9eo_\xf5\x0e\x02E(6P\xbe\xbdF\xb7/l\x9f\x9e\xc3a4\xbe\xfa>\x8f\xbe\x9b0W\xb5\xbd\x93n\xfdY\xe9\x04H\xef\xc8P\xbf{\x02O\xb9H\xc7\xac6/;\x9b,;\x99<\x13\x19\xf9\xf8\x1a\xe33\x03\x9e\xed\xf8#\xde\xee@\xf5\xd2\xbf\x17T\xbc\xfe\x11x\x19\xcf\xa2!Vt\xa6\xe2\xbb\xcc\xf62\x03\xe7@\xca\x9f0\xb0\x05\xf9\x97\xfcc\x9aY2\xb5\xf0A\x97\xb9\xf5t;oC\n\x97\\\x12h\xb52G,~f\xba\x02/\xf6\x0fhp\xf1\xef\xa9\xea\xfb\xd2\x80\xa0\x0b\x1e\xf1\x85\"\xa03\xe3\xe8\xd3\xd1\x01\xf3\x91\xfag\xd6\xe92\xc7\xcc\xb4\x81\x07\xa5\xb2\xe9z&#\xad\"\xe94\x13ef\xb2\xca\xbc\x083E\xbaDSm\xc9\xd0\x02`bA\xc5\x18\x14\x1c=\xda|\xe7);\xbe\x1e\xdcP,.\xb81U\x87\xba\xc8\xb4\xe9\xfeX\xad~\xa7\x7fc\xf5\xe8W4\xf1\x8d\xd4X\x96\xcaj\\\xf6\xb4\xc67M\xd2\x8c\xba\xe4s\xb5{\xde/v\x88\xc5\xd3n\x90\xdc\x9c\xfeL\x1a%Y\xbb\xd3e\xb1\xf9K\x06\xea\x95\x9e\x88\x14{\xf7=\xd8\xc3c\xc7\xeawM\x0e\x04v\x8c\xc5\xd3l\x98\xc1\x8e/\xd8\x99\x8c\xed\xbb\x1e\xdc\xe8\xb2#N\x9b_wotY&\xff?\x9c\x8c\xdbZx\xd14\xa8\x90yi\xfa\xfd\xbb\xc5\xb1\xab\xc0\xee\x96\x1c\xa6\x8c\x7fR\xde,kHu\x9c\x15Y\x17\xcfT\x1e\xce\xbaki0\xadm\xf0H\x1bH\xab\x95\xa8\x8a\xef:\xffV\xe9\xbbA\x0e\xe9\xcc\xa9;\xa9(\xfb3n\x14\xcb\xb7\xf8j\xc0\x92_I\xf1\xa8\xa0\x0c\xea!d[\x8f\xd7go<\xaf\x04\xa49%=(\xc0\x0e\xe8u\xb3\x8d}\x9e8=ka\x9f\x13/\x98\xd5\xe2Fj`H\xad\xbbK\x19o\xd8\x9e?1[1\xb4_L\xa3pS\x1cw\xfd\xa0\x9b3S\xfc\x13\xacN<^\n\xa2P>*=s\xd3\xfc\xb3*\xee\xe5\xd6%p#\xfe[G\xc8s\xa9+\xd4\x11\xa2\\&O\xa9;\xdc\xf9\x8c\xf8o\xf5@\xd9\x14\xaa\xc0*\xa9Kw\x03\xd0K\xean5\xb5\xd5\x9e.\xa7d\x02\xa2w\x0b\x17P\xd4\x1f\x8f\xab\xfcO\xc3i\xe4Mt\x97\x85\xb0q\xa6\x8cM\x8bs\x95\x93JR\xe3\xa7R ~\xd3\xd2\xcf\x91\xb9\"\xbc\xeb\x8cN|.\x1f\x98?2\xdb\xe9\xaa\x82V--a\xaf\xb1Dp\xc2\xd9.\xe3\xf2\xeeDH[l\x81\xc5\xf2\xa3\xcc\xb8\xdcR\x179\x00\xa2\xab4V\x99\x0d\xed\xe8XAE\x8b\xa5\x95\"=x\xb0{\x9e\xee7\x8a\xcd\xce\xb93\xa5\xe6\xe4\x1d\x8a:\n\x16\x9b\x9dlF\x9d\xc7\xe7jJ\x8bl\xe2T\xd6\xb7,\xa5C\xd3\xacT\xa3\x05\x8eO\xd1\x93D\xd4\x10D\x94.\xc3\x0d\x89\xad\xaa\x0c\xa1S?\x06ql\xca\x1d\xdaw@\x9a@\xe4\x11cg\x04\xf75\x88\xd81Od\x01\xb8\xc3\xb2a\x12\xed\x8b-#\xcai\xbb\xb5#\x1a0\xce\xc1\xac\xef\xf8\x01\xf7Z]\xd6\xdaY\xd9\xde\xb9\xb9\xb1\xb9\xb2\xb5\xb8\xb3\xba\xb1~\xf3\xdc\xe2\xea\xda\xcarK\xa2T\xd8e|\x82\x18\x86\x16G\xac8E\x92\xba\xcd\xad\xae]i\xc5\xab[\x88\xb7:\x0f\xecf^\xd9\xaa<\xef\xb4\xcd\xb0\x90\x18j\xeb&\xcd+h\x1e\x81g?\x8c\xe2\x1f\xca\x8bL\x9ed\x87\xccOY\x18eL\xa8\xf9Q\xbfX\xe2\x94\xa9\xa8J\xe6\x87l\xeb\xdc\xd2\xb1\x97O\xcf\xce\x8b\x05/\xd6zc\xf3\xe6\xea\xfa\xe5\xc5\xb5\xd5\xe6\xf5\xd6\xcbR%V\x95\x7fE\xca\x92\x8fT)\x8eU)m\xe6l\x03=`\x90WW2\xd0\xac\xdd:\xde\xb2\xd8>a\x17\xc8\xe7!;\xc3,\x8f\x16\x8cKv>\x0b\xb31!b\x146h\x80\x1d\xd6\x84\xe3J\xd3\xe2\xa1|\x1a\xae\x8e:\nb\xf8\xaa\xf5\xcaWl\xf9@\xda\x16\x877\x14\x95-\x11a\x08\xde.\xc7\xb3]\x1f\xdc`\xaf\xc9)\xf4\xc18\xd6\x9e\xed\xb2\xa1N\xc5z\\f\xe7\x1b\x8a\xee\xc7\xec\x18\xe4\xe2o\x8f\x98\xa1\xbc\x95\x00^\xd9\xf8aA\xb8G\x82R\x0f\x8f\x1e\xc5\xf7\xc8^\xad\x89_\xe2\xfa1@\xf4AG.\x9e\xa7\xad\xee\xd6\n\x0d\xae\x8aL\xe3\xbf\xb4\xf6\x95\xa5\xd2A\xa7\xf9H\xac\x1c\xc4\xdc\xcd\xb8\xc7\x9c\x90\xe5a\xea\x0f\x04\xba\xf7\x9c\x94\x1f\x9b\x9be\xea9d\xa6\x08\xf3\xc8\xd9\xf3\xc3\x01\xcb\x86\\6\x96\xf0>Ox\xe8r\x0f\nH\x80\xf4\xe9c<\xe0\xf2\xa8\xef\xfb\xd9P~\xbe\xc3\x93\xe8\x98h\xd6\x03\x81\xb5z\x8a6\x17w.\xdc\\][[9\xbf\xb8vsqkk\xf1\xea\xcd\xd5\xf5\xe5\x957\xd4\x99\x02\xed\x8e5\xbd\xe5W\x9d\xb2\xdc9\xb1\xa0\x7f\xfc\xc7\x83iu\x1b\xa6\x96p\xc8\xbew\x86\x8d'\xdd\xcb\xc8\x85\xae\xf2H\xf1e\xc0\xbeg6q\x021\x1fr\x19\xc6\xe1\xf7}\xbd&\xec\xd2\xee\xf6\x0e[\xdf\xd8a=\xce\x06\xd2W7a\xd9\xd0 a\xc5\xa5\xc1V\xd0'\xb5\xb8\xa9\xa0Jf\xc9\xab\x0bzyqmw\xe5\xe6\xc6\xee\xce\xcd\x8ds7\xcfn\xec\xae/oO\xbf\x96\xf2\xde \xd8\x92\xb4\xdc\xa7\xd7\xc5\xf4n\xc0\xedV\xd8e^\x97\x0d\x04\x99\xeb|\xfd<\x8b\xd5\xd1R\xfd\xb3\x08\xccE \xc3@\xb9\xc5\x1c9\xc3\x06E\xaa\x83?n\x15\xf8\xe2\xcc\xe4!\xe4\x9a\xdct\xb2a\xe1)8\x90\xa7\xbb\x113\xf0\xaa\xe5\xdf\x9cU\xab]1\xbaZ\x1e\x032Y\xc3\xa8l\x02s\x7fz\x81\xd9&\x16\x13\x07\xe1\xe6\xa5\x91\x7f\xb3\x94\xdf\xce\x05\xe5a\xa3<\xcd\xc4qq\xc2\xe2\x18l\xaf\xbc\xbe\xbb\xb2\xbe\xb4rs}c\xe7\xe6\xe2:\x10\x14\x1c\xe12-\xbb5\x9e>\xf2F\x9f\xef3\x1d\xd6\xa4\x0e\xb9\xf2\x00\xebB>Msk\x9a\xb3\xef\xb2\xf4U\x96\x1f=\xdaa\xfe\xf5\\\x86`\xcau\xba\x9e\x0bN\x05\xf7\xf7\x12R\x16\x8d\xac\xda\x8bO\x054\xbfqC\xe2 \x1bRw\x0bU\xbd\xf6\xa2^\xf4\xd3IVJ\x96rB\xa6\xba\xa9\x10&\xb5%\x1bg/\xae,\xed\xb4\x00k\xc5z\xbcJFy$\xbf\xce\xc5\x01\x9a\xb6\xdf\xafD\xa2\xab\x1f\x9eq\xbe-_\xd9\x81\x826\xe5xEa:b\x87\xa9\x86-\x0cr\x8aa)\x9f(9\x92\x82\xc4\x1d\x07\x12\xa7>\x177\x81\x8dc\xfdv\xfdX\xe5\xa9K3'Q\x1c\xbeu\xbc\xf5\xed/6\xde\xb2\x1a\xc7\xa9\x1a\xc7\xa5\x02 X\xadm\xb9\xa5\x027\xedr\x8b\xc2t\xb9\xe3\x84\xa7\xe2X\xb5U\x88\\/\xe0\x025~(F\xf5C\xe6\x84\x1e\xfb\xa1\x18\xcd\x0fK(\xd4\xa9n\xcd\xb9\xad\x8dK7\xb7V^\xdf]\xddZ\x994W#/\x98\xa9V\xd4c\xf3\xb5P+\xcd\x02\x94o\xa1\xb5Eq\xca\x99\xcb\xd2\xd3O\xdd\xf1\xbc\x1fv\xd9\x0f\xd5\xc8\xd4\"\x88\x115,\x02\xc8\x1b_\xfd*83C'\xdd\xd5\xc9n\xdaz%\xbeyK\xb1\xb4\xb8.H\xdd\xd2\xc6\xfa\xce\xe2\xea\xfa\xcd\xdd\xf5\xe5\x95s\xab\xeb\x13\x96\xc6r%Q6\xc5\xa8e\xa87cB\xa0\xb4<\xe3\x85:\xd8\x98_\x83)kxD+\xd8E 1\x1e_\xd2\x98\x94\x1d\x05\x15I\xfd\xb3y\x0f\x96\x9cP.4OdT\xb2\xa3\x16\xb7$\xe48\x99\x14f=\x9e\xfa \xf7\xa4u\xcfB\x03\xd5\xba..\x97W\xb2I\xe6\xab\xc1\xad\xb2\xe5\xc2|,\x0c\x0fM+\xed\x83W\x99\xa3\xdc\xac\xa2\xe7\x9a\xb8\x98be\xce\x8e\x9c\xa9\x10\xf33\xe6E\x1c\xf0\x91\x1f\xf8if\x99\xfd\xee\xfa\xd6\xca\xf6\xc6\xda\xe5\xc5\xb3k+\xd3\xce\x7f\n\xfaZ\x8fQ\x81\x10\x07\xdb\x16\xff}\xfdk2\xd0\xea\x1f\x18j\x81\\O\xbc\xa3\xab\xc9}.~wo\xd0c\xa3\x7fb\xaa\xd2\xeb\xbdq\xc9\xe4\x9c\x03\x99\xf9\xe2K\xec\x9a\x98\xc7\xd4\xfb&\xd9\xc3\xd4\xfb\xd6(\xd7yZ\xae\xc3;f\xf7\x8b\x93B\xd4\xf3Iq/J\xb8\xd6\xdd\x87\x1d\xd6oW\xe4\xeb\xb0\xd3\xc5\x02\xb7\xd0\x03~\xf4#\xa1\x11\xd0F\x1aL\x1e\x89L\x19\xf6\xa3\x1f\xd5\xe5\x01\xac\x84t(\xd7\xfc\xc2\xab1\x12\x82y\xd2\xe6\xd7\xa3\x1b\xd2\xb79\xd4\xc6\x9dI1\x0b\xcd\xee\x81\x926\x94\xfdn\xf1\x1a\xd7]\x81\x88\x1f\xecLm0\x99\xf9K:\xed\xca\xf7\x92\xcf\x1enF~\x98I\x0f\xfa\xc0Du\x17\xfc\xee\x0cs\xcdW\xd8\xdb3\xaco\xbel\xc9p\xbd\x04\xc7\xe7\xe2y\xe9\x0b2u\x8bb\x91\xd4A\xebM\xbe>\xc5V\xadaR\xd6\x8c\x8a\x85\x12\x13\x1c;\x81\xef9\x99\xf4\xe9\x8aK\x1f\x84\xd6\xe5}K\x15\x9b\xc6\xb3-l\xcf\xbfR\xea\xbd\xd6w\xdb\xa6h\x1dI\x94\xb72\x9f\xb9\x99\x81{\xac^\x9e\x9d\xc3\x98\xab5Y\x0de@U\xe6\x0b\xa9#\xe1.\xf7\xc7<\xe92\xf3\x96\x84L)\"x\xe2\x11|\xcc4*!\x1c\xf9BQ\x0b_(\xad\x0cM)SN'Sr\ni\xcf\xcfw*\x8ew\x96<25\xbe\x93\xf4\x909\xfd\x8c'k\x91\xe3M\x13a \xafk\x93(\xcaVC\x08\xc4>C?\xe9w\xc9\xd1\xf7\x19?\xf4\xb3\x8d\xc5<\x1bB\xb2\x98<\x1b.\xca\xde\xd2\x197\n\xfb\xfe O\xb8\x80Zj\xc6 7)\xdc\x16e*(is\xee\xf9\xa1\xd7\x86\xcb\x0f\xe94\xdeT\x0d\xf2\x1a\x9dan\xb5\x16%O\x94\xa5\xa6\x99\x93\xf1\xcd \x1f\xf8\xa15\x0eD\xfcD?u0&W_\x12\x87t\x81Ez\xb3\xeay\xb7\x03\xcb\xd2\x185\x96\xf2\x80\xbbY$Z\xb4\xbf\x0fY\x93\x95\x16r\xdd\xd4\x0ft?q\xe2E\xdd\xbf\xfdQ\xae\x89\xee!U\xdaa\xdd\x05\x0c(v\xb5\x8a\xf0\x91B\xf8\x13\xa7O\xe2\x9c\x19>\xbc<\xd4\x9e?A\xb2M:\nt\xe2\xf4)\x0c\xca\x0dH\xe6\xd90\xb0&\xb7c`C(\xdbc\xd3\xed{&\xa3J(iWQW6\xbc#\x89\xea&$\xe80\x91D*\x05@\x06\xd1\xdf\xfczX\x93K\xa2L$x9\xff\xa7M6\nj}\xaf\xa7\xcfzY\x93\xf1\xb2Y(s5\x89\xb5\x18\xdb\n\x9d\xacL;\x0c\nQ|/\x1e\x0d\xd9\xd6\xa7\x85\x16\xca\xa5\xcdR\x14\x12\xdc\xd5r\xfaMz5?\xddX\xdc>\xd1\x91 \xcd&>\xb2\xc1\x16\xd8\xf5\x96%\xd3b\xcb\x12\xa6*\xd4\x82\xbc\xdd\x11r\xc8j\xd8\xben\xd2E\xa4]v=\xbbA\xd2\xc1\xc0F\x04\xec5\xe6\xcb\x07\x99\x13\x94\n\xb3![\x99\xfd\xdc\xebdq\xb5\xae5:u\x9c\xcd\xcf\xd2F0\xc5\"8\x0b,\x98\xc9\xa2\x8b\xdb\xe8=gHS+NB#\"\xf4\xeb\x1c\x8d4U\x98\x1a\x0b\xfci\xb0\xc0\x81\xb7[j\xb1 7O ~eX \xc3\x98-X\x907aA\xca^c\xd1\xf3b\x81\x0d\xcb\xd5\x96\xa5So\x19\xfb\xa6\x89F]\xed\n-\xa5#\xca+$\x84d^r\x14d\x8e<\x00\x90Kq\xf5;\xe8+$\x1b\x9e\xc3\x11\x16\x81\x8a\x87\x98\xb7\xf2\x14\xf7\xeb!\xa7\xfa\xaf2\xa9\x97\xfeT:'kT\xca\xc9\xdae\xc1\xcc\xf6\x85\x8d+7\x17ww.\xdc\xdc\xdc\xd8\xdc\xdd\x9c\x90oY\xfb\x95e3\xb1-\x9f\x9f\x9e\xd1L\xca\xb3v+\x1dF\xfbe\x84\x17\xa8Q\xda;\xfbx\xc4P6\xb6V\xaf\xad<\xefH(B'&Op?\x89F\x17\xb7;BW&\xa5\x80\x90\x0c\xc4\x80\x8b\x1c\xc1-x8CV\xbe\xe4\xc4\x1d\x1c\xf8n\xd4%\x1ef\xc9\xe16\xbf\xdd\x9e6\xe3\xba\x96\x0dP\xbaN\xdee8\xb0U\xff\xe4,\xaf\xcf\xd6\xe46H$t\xae\x06\nIe\x159i\xc1 \x17T*\x939\xcfjl\x0c\x95T\xab2\xc7H\xe9\xa5\x1d\xbf#W,\x92[\x1c\xda\xcdG\x85\xa9\xac\x94\xdf\xd4\x9a\x97\x87\x95\xc2}\x8aq\xca\x93.\x86\xa9\xb9R\xebFC\xfca`\xaf\xab\x19\x96u\x9aLm|\xdb\xccET\x0e\xbbL\xd5ot\x9f.xe^?*H3\xb7P\xce\xa6\n\x8f\x93\xf5\xb2\xc8)?\xdaS\xf7Ls\xa7S\x1e\x96\xda\xba\x1b]\x98j[\x7f\x98\x98\x11B\x066\xc3y,\xa1\xb7\x10\xad\xa6?\x8a77\xc4\x9f\xf3/\xe6D\x86\x92Q\xdb\xcfaX\x97,\xd9\xa9\xf1u2\xe7\x10\xde\xeb!o\xfd\n\xaa\x17u \xcfH\x95\x14$z]$\xd6T\x96\xc6\x81\x15\x96\x88\xd7\xb9\xd1-\xe7\x05\xac[\xaa\xb5\x8d\xf3\x1b\xbb;/f\x81,\xc4hf\xdf\xcf\x86\x97\xf2\x0c\xaeG\xa6\xc8\xa8h\xc9\xe4\xd5\xf8\x8c+\x9f\x81\xc0\xb2\xda\x10^\x0b\x9a\xd5\x98N,\xb8\x96L^\xc0\xa5\x8d\xf5s\xab\xe7w\xb7V$/z\xde\x85l\x1a \x18\x16,\xdcG\x8d\xea\xb7+\xc0t\xc1\xf6\xb8\x04\x83\x94s\xf2\xd3E\xb3x\x90\xd4\xad\xfaO\xaf`\xa9\xe7\xa2d\x0bLY\xe0\xbe\xa4\xd2\x0f\x94\x98\xee\xd9\xc3ug\xc4S\\q'2}H\x90`\xd5a\xa9\x9a\xe5\xb8i\xdbS\xde\x0e\xdb'\x89t\x15)\x08\x95\xa1 o\xc3),D9J\xb4z\xbe8\xe2\xafDV\x1a\xab\x04B\xf5\xc7\x8a\x9a\x05\xcb\x967\xcb\xe2\x01\x19\x82\xec\x90Z\xe5\xe8\x08enr\x1f\x8a\xbc#\xd9\xa9\x83p\xa6v/'\xf7\\\xd3\xf1tb\x0b\xd2\xa2l\x0f \xb4\x8d\xec\xe4\x80\xecT\xfb\xcaQh\xe4\xa05?\xcd\x88\x90\xc5\xca\x96\x8b\xe7\x16\xb4\x18\x12\xb6\xa2\xa9\x84-fD\xaa:\x81\x8b)\x9c\xae\x17\xbaXIYt\xac\xe2c\xb9T.\xc9T\xd2\x95/%\x86\xe0\x1b\x9b\xa7\xc3vn#\xb9]\x9c\x17\x91\x92\x12\xeb\xe1o$\xa7S#@H\x11\x80\xce\xcb\x8d\xc24\n\xf8\xcc\xbe\x93\x84\xed\xd6\x95\xc5\xad\xf5\xd5\xf5\xf3\x0b\xcc>2?e\x1e\x8f\x13\xee:\xe00\xeb\xb1}?\x08X\x8f\xeb0\x1e\xed\x91\x19\xf2\x83\x8c\x8d\x9c[Q\xc2\xc6\\g\x9aB7\xe2;\xd3\x04\xbb\x11\xe7\x99\xce`,I\x98?\xa1W\x1b\x8f\xc1\xbf\xca\x9b\x039PF\xa9\xba(\xd7\x95T\xd0\xbc\x97^b\xed6\xbcp\xa1$\xe3(\xe6i\xab\xd3\x99\xd9\xe3_h%\x99\xf4~v\xa30s\xfc0U\x17N\xb2\x87T\x8bI\xdc\"w\xeb\xdf]\xe5\xc1\x98+I(\x08\xa2}\xeem\xc3\xa8\xba,\xed\xa8\xe46\x99\x84\xfb]f9\xe9\xba\x1d\x1f\x9e\n\x95\xb9\xcd\xec\xf4\xc0\xaf\xa3\x07\xddI\xa2B\xfdbh|u\x92\x81\xbc\x08L\x0b\x07\xb79V\xcd\x15f\x8a\\\x9f\xbb\xc1^\xab\xfes\xa1\xe9TMEtT\xa16\x18\xfa\n\xaec\xe7~e\xc6\xa3\xfa\xecL\x9f\x84\xdc\x1c\xf14\x1a\xf1)\xc5fSG \x1e/\xe1\x9b\x9f\xa4Y\xbb\x06G\xac\xb2t\xd3.V\xe4\xbf\xc9\xfc}\x82da3rh\xa2\x84\xb8 \x92D_$\x13\xa9\xeeg1\xa6\x06\xe2\x0b\x9b:\xe3\xa7\xe2?\x10\x1b|\xe4H\xa6\x8c\x95\xcf\xbd\xcf*\x97#2\x9b\xf2\xce\xcc\xc8\x89\xa7h\xa5\xd4\xd2\x91#!\xec\x7f\xddv\x1b\xaf\xd1#s\xb6\xad\xd7\x87\x0b\x99W\x19E\x84\x8a\xa2\xf0\xa5\x11A+F\xe5]\xff\x16\xfbFhD\xfc\x80\xbb\xb9\xf4,\xb0j!]\x95\xe5f\xfe\x94E\xd7\x90\xd6\xceH2\x88\xa4\xaa($\xcd\x8aB5^\xb8\"\xe1\x17\xe3\x99R/\xad\xa0\xb7]\xcd\xcf\x9a\x04)|\x9aj\x9f\x83\x89\x94\x1a\\\xe7\x8e\xe8\xa8\x0c\xd6\xd90\xaayr,\x97%\xa6x\xc1M,C\x968\x0d\xcf\xc9\xd6\x1f\x95\xe2\x80/(\x03\x90>\xeeb\x9f\xaa_\xd4\x89\xae\x97\x1eJ\xd4\x7f\x81%5*\x88\xdc~+hb\xfb\xe5W\xdd\xca\x1d\xe0VMS\xf6s_K\xc8x\x1b[\xa9\xac\x0d\x80\x93_\xcd\x1by\xb0\xa3\x0b\xcc\xb1\x83K\x0f\xde\xd4\xd8(\xcb\xaf\xe6X^\xbf\x95rJ\x1d-\xfa\x86P\x89/\xe3\xf1\xd2\x0f\xebnB\xd3\xa1\x94\xd8Vn\xe7N\xf0}~\x08(\x86\xbe\xd1\xf5\xaa[*j?\x917G\xdf\x80\x15\xa4#K\xdba\xfb$y\xe7:2>\x16\x13\xfd\x8dj\x05I>\xd3\xb7\x10\x16{\x82\x02\xf1\xf3\xa2\xfd0\x98\xd2\x1d\x89Y\xc8emj\n\xfd+\xf4D\x9e$\xea\x02\xb9Y]aZQ\x9at\x8d\x8c\x7f\x8e\xa94u?\x10\xf8Tp\xfb\xc95\x02I\x9f\xfb\xa0\xc4v\xcc\xddv6\x93 ~'\xf4\x8a< \xda\x9d\"\x93\xbf.\xb6\x9b\x04u6\n\xfdk\x1e\xbbL\x14#8\xac\xea\xa2[7\xc6\x00\xfe ,\xdc\x0d\xb8\x934\xbc\x8d\xa1\x7f\xcf\x83dB\xfe\x0f\xa6h3O\x82\x05[\x9e\x16\xfc\x13\x03\xde\x96^\xd1G\x1a\x1e<\xd4?\xf5 \xe9j\x98\xf1\xc4\xe5q\x16%\x0b2=\x0f\xfe*\x96j:\xf9\xb5\xfc#w\x8du\xbf\x1a\xef\xee\xf2/\xe1i\x1c\x85)'C%\x9f\x7f\xfbcu\x13\xee\xf10\xf3\x9d ]`\xad\xd4\x19qEg\x1b\xe2\xe0\xf4O\x91\xb7&\xa7\xf6\xf2OP\xc98[\xa8\xbe\xe2y+\x8d\xc2\xee\x1f\x1c\xff\x83\xc9\xe4\xad\xf9\x94\xdc\xed\xccdC\x1e\xb6\xfb]\xd6o\xb8$\xb0Bj\x96\xc9r\xc8\xa6\xd5\x8c\xb4@x\x1d\xa2\x1d\xcc\xd1\xec\xb2V\x11*\xa4i\x8a\xf9\x08zG\xab\xe1\x0d\xf4\xaa\x1553&Nx\\N\xdf\x01r\x95\x11G\xfcg\x01\xc4p)\x90Ws h\xdf\xa8\x92\x1d6\xebLdT\xd9a,\xa8\x85\x90\xb5n\xc2\x02\xddT\x93\xbb B\xf8\x04\xbcQ\xae#\xb6\x04n\xfaW\xb3I\xe4\xab\xcd\xff\xb9V\xb7\x0d\xaa\xdbh7\xe3N\xb7\xb9\xc6)\xa2\xce\x8c_\xfe\xddm\xb2\x0c\x97\x7fU+qe\xb8pc@\xcc\xd4\xfag\xbb\xd9\xb0\xda5i\xe7\xd3\x04\xd8L\x8a[113\x8d\xd9!u\x10N3v\xd5\xa3\xd5B\xb3\x0d\xd8\xf6S\xb3\xb6\xbc.g<\x98 \xd1)]\xf0nQD\xe6;m&=\xf5\x98\xdc`\xed,\xa2\x88j\x1e\xa0\xa2\x9b\xfa-\xfb\xbf\x90\xb5k\x82\xe7O\xf5\xab \xca\x99\x9f:&\xe7\xab\xf2 \xfa\xed\xda\xe5\xbe\xace\xf3\x85\x9e\xa4\x1a\xf32\xab\xe2M\xdf\x8e7\xf6\xba\xea\xdai\xbaH\xb9t\xe6EG\xca}\xe9x6j7u\xdba\xfb\xf4 \x12\x9c\xa6\xee\xa8N\x9c\xb0\\R\xc9\x00NZ\xc5Q\xa0\x93\xb3\xb3\xb6P\x04\x00\x11\x0bm\xaa\xc6pr\xb6\xe6\xecXB\xb9\xfe\xe9\xc5\xb3}\xcd\x01\x18c\x95T\xb2\xda\xc8\x80gk\x91\xeb\x04 `-4\x9b\x03\xb5\xf7\x834K\xc4N\x92\xf2\xab\xceHU\xed\xb4\x0bi\xa9q,\xbf}bf\xec\xd8g\x0fw\x130Tk\xfb>|op6\x85\xf3S\xb9v\xc0U'^w7_\xa2\x96\x169\x9b\xe9\x87`C\xef`E\xb9\xee\"^O\xe9\xb9\\#\xac\x06*}\x99[\xb9*\xa0\xf2\xb7<\xb7\xe6\x9cFh9\xda\\)\x1f~\x97\xf96\x03\xbf9\x0d~\xfd\x1dIh5\xe2\x87U#>{\x8d\xb5\xa3&\xfb\xbdR!:\x02w\x9f\xab\xd8n\x12\xb4[\xe2CU\x89\x08KV\xfd\xc2\xa8?\x93'\x81@2x\x81]HH\x99\x8a\x84#\xe7%\x04\x03\x89ED\xfd\x06\x9f\x9f2\xe6\x0fx6%\xa6q\x15\x0d\x83\xdf\xdf\x94\xf6\xfc\x05\x19J\xf8\x0d\x9d\xa5v\xef\xe8*\xe1q\xde\xf6\xda\x9f\xf4\xf0\xf0\xbf\xbc\x87\x07e\xb0u\xb1~\x82U\xdb\xef>e\x00\x91\x8e\xad+\xc5sE]\x96\xce\xecn./\xee\xac\xdc\x84\xd8\x86\xed A\x0df\xef\xe0\xb9\xf1j\xb4J\xa1\x04\xd0P\n\xdc\xeb\xce\xc6\xf9\xf3k\xd3\xf6\xfa\\1)8U\x89\x19\xb2\x8a\x05;\x82\x02=\xa2o\xc2=\xf7\xf3\xc9\xd3\xd7\x0d[\xb5\xd9\x1f\xa6\x91\xad\xa7\x90o+ \x16\xea\x8b1e-\xe0\xf8\x15\x8d\xe7\xd09\x9f\xfb\xbe\x91C&\x1b\x95c\xb4[xtNa\xb2f%\x84\xda\xf7C/\xda/.3\x86NZ\x93\x00\x0d\xff\xb2\x99\xc09\x8c\xf2L\xc7uKJ\xbe\xccy\xbc\xe6\x87{\x17\x9ct8\xcd\xfd\xd2\x04\x1b]-\xf4K\x98|\xc4\xae\x9a\xfc\xb6\xb5\x1b[\xf2\xcc\x99\x90\x06\xc4$\x1d\xdaq\x06\x0b\x85\xbb\x10\x1dJ\xe5\xcb\xdd\"\xd1\xacEUq\xa4\x9a`UU\x00\xf4\xb2-|\x07@\xdf\xb1+\x17\xce\xd7'W\xff\xf6 \x89\xbc\xcc\xd8v\x93(\x08v\xc0\xf5.U\xffPw\xe0\xf2[\xc2\x1d\xefp'\x82r\x8a\xb8\"\x1c\xae\xd45!X\xcd\x0e\x8f\xfd\xda\xb8\xf6\xbe5\xf2\n\x0c-'g\xb1\x97d\xaej\x9c>AR\xa34\x86\xb6c\xde(\xdf\xa0l\x07V\xac\xe8\x7f}X\xc1\xd4*\xc5\xe5e\x9cH/\x0b\xc67\xc9\xcf\x06\x9c5\x81&5\xc4\xbdLKp+\xef\xf8c\x0f{\xd8h-\xafU\xde\xc2\xcfT\xee\xe3\x08r\x1f\x17\x9e\xf6y\x8d\x99\x1e\xb2*V\xa9y\xd4\xe9\xb2\xb0\xdd\x91\x8f0\nT\xf4\xc3Ag\x8aG`\xc5\xfeG\x13#D\\Yj\xae\xe1\xd6 0O@k\xa14\x10Bi \x84\xd2\xa0\xa1\x9eV\xa6\x13!\xef\x8b\xe3#+\x9fK\xa2\xd1j\xba=\x8c\xf6\xc3\xef\xf3C\x89\x88u\x0d\xc8\xdca}\xf4:ls\x7f1\x8d&\xeeO\x8e\xa5\xf1\xd8\x19\x16O\\\xa9\xa1,\xd5\xb4Rr\xc0n\xa7\xac\x9e:B\xcc\x12\x93\xef\xc8\xa4\xa2\xf5u\xe7\xe5\x9d\x8cyX\xf65\\\xbb-\xe3\xd0\xe1\xcaA\xd3\xa4M'\x83v\xd9Q\xe6Iw\x16\xf1\xd7P\xaaTs\xd5\xf6^z\xe9\xb9\x1b\xac\x8b\x84\x98\xea.\xbe\xaa\x07N\xff\xb2Z\x95hT7\xc4\xc3\xf4\xb7\xf9j\xa4\xd6\xd8\xca\x8a\x8b( \x107\xa1\xcd\x9bYTs\xfdd\xae\x9dp\x1eIE\x06\xafs\xfaTW\xe3T\x86\xb5\x0cf\xaa95[GX\x85RV\xe4\xb2z\x0c\x9f\x92`2\x85\xe6`z)\xa8p\xa7J\x9f$\xbbh\xc2\x8f\xb1\xc9\x06\x04\x0f\x90\xcc5\x1c\x8d\xd6\x11\xf08\x13\xc4\x8c\xe9\xcc\xf9\x91\xa9\xd8\xe9J\xc4o*\xd1L4|\x9c\xf9w\xfah\x12\xfd\xd3'\x9e\xebwhT\xba\xdd\xf6\xf1\x9b\xc7\x07]\xd6b\xad >\x1c\x13(\x94#\xe9\xa8o\xe8\xa6\xa0\xa2\xbb%\xaa\xda\xf6\x1b\xe6\x18J\xfe\xdav\xba\xf0\xdc@h\x8eP\xdby!\xe7rl\x95\x9f&2\xf3\xa9,l\xac\xe2\xf7\x8b\xd0S\xe0\x9f\x96\xeb\x043\xa9Y\x03\xd7xi\xf9i;\x01\xfd;0Z:\xef\x80\xe1:D\x1a\x0c\x92\x11%g\xc7e*\x92\xa5-t\xacq\xddF5\xb2\xe8\x8b[\xb9f!A\xca\xbd`&\xec\x87\xc5Zn:\x89\x98/\x17\x92\x8cY9u\xd7-\x0b\xc8G\x1eg\xb2\xa8\x96\xac\xff\xd68\xc4@\xae(\x96\xf7\xa7\xb1\xd7O\xc3%d\xbb\x8aWP\x87\x1340\xbb\xe5\xa9\xda\x8d=\x9e\x01m\xc4\x94f\x04M\xf0\x8d\x97\xaf\xfeC\xe1U3\xe5\x97\x84|\x14\xe7\x19\xf7\xb6\xb3\xc3@\xe6#\xae\xad \xd6\xb4\xe5\xf4\xd2(\xc83\x95S;\x99\x89\xa3T\xc6\xea\xd4W\x93\xf1\xf7\xec5v\xbc\xed\xe4Y\xf4#X\xc7\x1f\x0d}\xcf\xe3a\xe78[\xa8\x02:\xc7\xeb\x99O\xab\xef\x1fp\x0f\xf7\\\xbc\x90f\xafidx\x99^\xf0U\xf9\x1fG\xf0\xe0b\x91^\xad\xa7\xd221\xbdm\xa5\x9cN\x97\xb5\x8f\xc8wTZi\xe6d\xbe\x0b\xae\xd3\xe5\x81\xbd\xf4\x12\xf3eZ\xe0v2\x13\x8dy\xd2\x0f\xa2}v\x94\x15\xff\xb8Z\xf9\xd7\x1b\x9d\xc2\xdd\xde>\x17=\xd3IX\x88\x14\xc5 \x960\xc0\xf3\xdaT\xa9\x93\x8d_\x88\x96-\xb0\x86D\xe7\xba\xec\x02\xab\x89q\x13\xbf\xcaQ^`\x83\x06,.\xb3\x9f\x056\xae/I\xa4\xae\x056\xb4\x13\x1f{\x1b\xa5{\xe9\xfa\x95\xa8r\xa6i\x1d\xbf\x18\xc3\x9e\xccM\xef$\xf5UZ\xac\xed\x01\xb4_\xd4{\xa44\x8b&\xa9\x1e^;\xf1\xbb,\xb7SgDX\xb2\xa1\x9fvY\x9d]\xd5\x08\xc1\xa9\xd5\x90\xed\x1aCv\xda\xe9J\xeb\xed\xec\xab\xac\x0f\x8f\xf8\xf5\x8f\x1e\xed0\xf7z\xbfj\xc8\xee7\xbf\x16/\xd8\x9cO3\xa7\xc2 \xe5\xbb\x83\xc1\xcc\xcd\x9b\xd2\xb9\xec\xe6M\xed\x12]\xf2)\x0f:\x1d\xe9a\xa6L\xe2\xbc\xcb\xae\x8b\xba&\xc9\xb2\xdb\xe9\xc8\xf0\x99(\\\x8b\x1co\xa2\xfdL\xff4\x07\xf6g\xe2$\x8a\xd3\"\x93\xc2L\x16\xc1\xc1j\xca5\xc0\x14\x17F\x92G8\x939\x83\xae|\x04U}]\xf5\x1a8*\xbe2\xadH\xb0\x82?\xd4\xe9\xc4p\xc3\x10\x12G\x02{V\"J\x96K\xe6\xe9\xbc\xb4\xd2\xf06<\x92I\x82.\xaby\xf6hO\x88=\xad\x84\x87\x1eOj\xcc\xa6\x8a\xdaL\xbc]a\xc5\xa0Rdq0Q\xaai\xec\x84\x84\x9c\xd1F\xfa\x0b\xf0\x9c\x04\xe0Cm\xe1\xbb\xdd\xda\x9e\xb8z\x90B\"F\x1d?\xa7\xab|\xa3\xd3E)\x19\xee\xb6\x8b.\xcc\x15\xf37\xda\x87\xe7\x1bG\xfaCi\x176\xff\xfc\x1d\xd9/\xfd~G\xf6\xbf8\xd9\xb7\xe8\x85\x9a\x13d\xce\xe0\x0b\xd3\xec\xf0w4\xfbw4\xfb\xab\xa6\xd9\xcf\xe7\x1ag!?\xb5It\xa28='\x13\xb2=\x87\xe3R10\xc4Kt\xba\xaf\x93\xb3\xa7-L\xe3E\xe5\xfb\xfa\xe6\xeeG\xa3\xb7(\xc9{gy/\xa5TA\xbe\xd5~\x86\x85&`\x13\x87\x0f\xfc\x97\x85\xa1\x93\xcc\xd4l\x8a`\xa8)\xed\x19\xcc\x04\xeaB$\xf9tlD\xff\xa6\xf5\x1e\xc2?U/\x91\x0f\xc0w\x1b\xbc7'\xb6f7\x9a\x19h\xb3\n\x03\x13\xbf\x98F!\x9e\xfc\x146L\xf6%\xe6os\xe3jwf\xa2P\x90\xdc\x80g\x96G!m?\xb3\x8c/\xbd\xc4Zz\x10\xe5@\xcdP^\xec\xa6<\xdb\xf1G<\xca\xa5\xbb3<\xb8\x7f\x86\x1d\x99\xeb|\x95+_\x0b\xad1s\x92\xaf\xd3\xd2Y9\x15\xeb\xa1/\xefF\xf9\xbd\xc6\x96\xe7d\xce\x82?r\x06\xfcx:\x1e\x1c=\x18\x05\xaf\xf6\x9c\x94\xbf|\xb2\xbbya}\xfe\xda\xe1\xd9\x13\xce\x95\xadYgy\xd6\xbftkq\xdf\xbd0\xf0W\x97\xceF\xd7\xae\x04\xa1s\xe1\xf5\xd3\xab\xb7V\xf7/]8{r\xd5_\x1c\xf0\xf3si/\xbctzu4\x9c\xf5.,\xbe\xbcvx\xfa\x84w\xc2\xcd\xbd;\x97\xf2\xde\x89\x8b\xe1\xda\x9d\xd5\xfdK\xcb\x8bc\xf7\xc4\xb5p\xd5?;\xef\\\xb9|\xe2\xf5\xd1\xe9\x93\x9b\xdb\xab\xfb\xab\xcb\x8b\x83K;\x8b\xfb\xab\xcb+\xfb\x97\x96V\x07\xee\x85\x8b\x81;\x7f\xf9\xd0\x1b]>\xeb\x9e8\x1b\\=\xb1\xb5}\xf5\x8d\xad\xb8wg\xd6\xe7+s\xf1\xb5s\xc1\xbas\xe5u\x7f\xf5\xfczz\xf5\x8d\xf5;\x9b\xdb\x17\xd3k\x17.e\xee\xe8t\xda;\x1f\xe4\xd7\x0eW\x07\xee\x89\xadS\xbd\xf3\xbb\xa7WG\x17\x87W\xe7\xb3\xd0\x1d\x9d\x9e\xeb\x8d^\xcf\x9c+s\xc3k\xf3\xbb/\xaf\x9e?5\xee\x8dv\xbf\xb3z\xbe\nw\xcf\x9f\xbe\xe3\x88\xbe\xe6O\xbe\xbcz>\xc8\xc5\xdfW\xaf\xec\x0f\x9c+\xa7b\xef|0\xec-\xa7\x83\xab\xa3s\xb7\x9cy\xef\xb0w\xe2r~mi\xee\xf0\xda\x1bg\x83\xabo\xbc^W\xde\xdf\xbcup\xcby\xe3\xe2\xad\xde\xf9\xdd\xc1\xd5\x13\x83\xd3\xab\xb7v\xf7W\xfd\xb3\xb7\xf8\xce\xac\xbf\xbe\xb3\xe8\xaf\x9e\xbf\x16\xf7\xce\xef\x9f^\x1d\xc91\xf9\xab\xe7O\x85kW\xce\xcdz\x17V3\xf7\xc4\xd6ao>\x0b6\xb7/~\x87\xcf\xaf\x8f{\xa3k\xf1\xb5\xc3S\xb7z\xf3\x07c7\x9c;\xbd\xea\x9f\xcd\xaf\x1d\xce\x0d\xbd\x0b[\x87ko\xac\xcf\xba\xa3\xd3\xc9\xb5\xed9\xb3o\xfcDv\xab7\x7fj\xe4\\qso>\xd8\xf3\xce\x0fO\xf7\xb7W\x07\xbd\x91\x9b]}ck\xd6\xf5\xe7\x0eQ\xdb\x87W\xafl\xc5\xde\x1b\xeb\xb8\xdc\x1d\xef\xc2\xc5\xb13\xbf\x9b];\x7f\xee\x8es\xfe\xdc\xa1;:w\n\xd5\xdd\xbb\xfa\xc6zt\xf5\x8d\x8b\x87W\xdf\x08d\xfdb\xfc\xab\xb7\xd6wv\xe7\xc4\xffV\xfd\xb3\xa6-\x18\x93X\x93\x15\xb1&\x87\x9b\xdb\xabw\xd6K\xf5\xd6\xael\x0d\xdd\xf9\xe1\xd0\x0d/\x0e\xc5z]\xda\xb9:\xbbvk\xef\xce\xa5;W\x0f\xd6\x97/\x1d\\\xba\xf3\xfa\xfc\xfa\xf2\xca\xdc\xea\xf2\xee\xfc\xda\xad\xbd\x13\xebw\x06'.\xed\xbc~g\xfd\xce\xe0\xf0\xd2\xce\xa5\x93\xab\xb7N\xber\xf5\xca\xa9\xb8w\xe5\xdc\xec\xb5\xcb[\x87W\xaf\x9c\xbasmt\xfa\xb0\xb7}V\xae\x99s\xe5\xe2\x9cw\xfe\xf2\xc6\xd5+sb\x8dg\xdd\xd1\xb9\xdc\x9d\xbf6vG\xb3\xfe\xea\x85\xadS\xae\xc0\xa1\xf0\xe2\xd8;\x7fn\xf6\xda\xf6\xea\xe0\xea\xfc\xb9\xf4\xea\xec\xdc\xf8\x9a\xc4\xad\x83\xb87\xbau\xf9|\x90]{\xe3\xd2\xe9\xd5[\x8b\xdf\xb9\xb4\xbd:\xb8v\xe1\xb2\x98\xf3\x81{\xb8:\xb8:\xba\x1c:WN\x9e^\xbdu\xf6\x8eX\x0b\xc0\xab\xade\x81g\xde\xf2\xac\xef\\9\xb5w\xed\xca\xb5\xb87\n\xc4X\x8en.\x9d\x1e\xf6F\x81\xd8\x9f\xe0\xf2\x85\x8b\xc3^\xb8>\xea\x9d\xb8\x98m\xde\xda\x1f_\x9d\x0f\x0e\xaf\xce\x1f\x04\xe2oq\xe66\x07\xd1\x99\xd67D\"X\x8a\x82\xc0\x89Sx\xbab\xcd\x0f\xf7\xe4\x1f\xe0\xcb#\xff\\\x0d\xe3\x1c\xfe\xda\xe1\x07\xd9b\xc2!\x0d\xea\xd9<\xcb\"\xe0\x16[\xd2KX6\xa5\xfe+\xb3}\xcb\xb7{\xeb\x82\x11\xa5\xff51Ch\xcf\xecW\xac\xafS\xf6mF\x10G7f3i\xf4mF\x90T\x01H\xef\x81\x02\x10#\x88\xab\x00\x15#\x88\xf4\x13\xb7\x9b\xbf\xbf&\x87m\xdaqLx\xbd\xb10p\xab\x85!3\x16\x06\xae^L\x98}\x95\x85\xec\xbb\x8c\xbf\xca\xc2\xa3G;L\xc5\x0d\x17\x16\x86\x10\xa9\xe1jb\xd9tI\xa3U\xe9#G\xd0\xac:3\xb7\"?l\xb7X\xab3\x93%\xfe\xa8\x8dEg&\xb5\xfc2f\xd5wd\x96#\x9b\x14\nLl \x99R\xdbSb\x1c\xc9\xa8a\xa4|G\xdc\xe9(\x99\x05\x8a\x17\x12K]\xec+\x1aIPj\x0b\x9e\xdfE6\x85\xccj=\x98`9\x98\xd6j\xa0\x11\xa4\xd0\xd6\xebET\x95\x834\x0f\x82\xd4M\xb8\xed\x81)\xfd\x0bM\xc9\xfa2\x96\\q\xbc\xcb\xae\xb7\x8a\xf6e&\x9d<\x08j\xdf\x1e\x93\xc9\xec\x8cg\x8e[k\xf5\xe0 \x88B4\xaf\xad!\xed\x84\xd4J\xf7\x9d\xc1\x80'\xc7\\\x8dn2\xabN\xc8^c\xadcr(l\x81\xb5\xea\xbc\xc6\xa7\x1fG\x9b>3\xe97\x99e\xdc\xc0I\xd3u\xf9XZ\xdc\xf6g\xcc?+\xafj\x95\x7fw'\xbb>\xde\xe8Tb\xfd\xdb\xae\xc5\xceR\xa5\xde\x1e\xf1\x97\x1bE=?\xe0bI\xaa\xfb\x9c9\xbd\x80g\x0b\xacu\x0c\xfeB`\x8f\xa7{Y\x14\x0b\xb8\xfa\x13\x15\x08\x9cd \x9a=6\xf4JW\xb3\xafV\xe8A\xf0;J\x00\xbf\xdf\x1a%\x18\xfa^CV8\xa0\x01{\x9c\xc7K\x90\x8d\xb3\xa1=I\x0b\xf8\x0c\xa0\x93\xd0\x02\x01m\xba\xd2\x9bB\"\x88\xf8Sb\x05\xf1\xdb\x90DC\x0cE\x90\x8brw\xe2\xdf\xd0\xa2|\xabQ!\"k\x19\x94c-\xd9b\x8b< k\x86%\x93\xf1\xbe\xf4\x12;\x12NAe\xc0\xb6*C\xe8\x9b\xa9\xcc\xf5\x1a{\xb6\xe1\xd89\xf3C\xe65\xbb>z(\xedG;\xefL\xd2\xf6\xf5u\x83W\x1b\xec\xa4\x7f\xa2\x83\x1c\x1e\x0d2F\xdc)L :\xc8\xa9\xa85\xb1'\xa6z\x0b\xd8w\xd9\xdc4}0\x99\xd4Q\xbe\xe5\xd2\n\xa3\x90\x0b\x02=mT\xad\xa0\xea~\x98O\x91hob =\x84^\x10\xb9{0\x86\xae\xf9\xe8F\xc11\xf9(\xa5\xfc\xde\xd8\xd6\xf3\xda%t\x0cW\x8c\x0c%\xd7K\\\xc1\\\xca8u\x88=\x11\x97\xbf0\xa7J\xb3\xc3\xa0\xf6yl\xfd\xf3\xfc4\x0e\x9c\xc3\x05\xe9}\xacv\xd1\xf2nG\xf9\xd7`9+1\xc7\x9a\x14J/\x86\x19v\x8d\xc2\xf3;\xb6\xf3\xe2\xd8\xce$T\xf4\xfc\xb1\x1d\x0dK|jZ\xc9\xa9\xa8R\x16\xa1Z\xfb\x89\x13\xc7<\xa9u\xd2{!\xd8S\x1c\xc4vI\x85\xfe\x1d&}}\x98\xd4\x93\x8b\xfeU#\x93\xea\xe5+\xc5\xa5\x8e\xfe&\x98?\xcd\x91Y\x1af\xabF|.\x19t\xeaQp\xd2\x82f\xfc s\x12\xee\xb4*\xb7\xec2\xb5\x936\x1d}\xf1\xc6}\xd1\x02j\xb9r\x86\x8c\xa1j\xaa3Tw\xa1Ws\x80(\xdb\xd4\xe6\xab/z\xb0dV6(-\xc7b\xe9b\x08\x85lo\x81\xeb\xe8\xcc\xba\x17 \xd4jB\x00\xa7<02\x15&\xfc\xb5\xc0\xf8\xcc(\x0f2?\x96V\xa7\xeb\xad\x96\xf4\x0bo\x89S \xaf\xf6j\xb3\xac\xaa\xa3\x17Q\xa4\xedZ/~\xf5\xef\x1bC\x13\x9e_\xa9Q\x0f\x0d^\x16\x1d4\x14\x06\xedF\xafj}\xb9\xa4hte\x14g\x87\xb2\xdd\xfa\xe2\x91\x1e\xab\xdc\x17\xd8?\xf9<\x12{\xcd\xfe\xbd-\xb3u!\xc8\x17\x15\xfa\xc4\x81jt\x0f)Q\x16+\xf9\xab\xad\xa8\x17\xaa1\xab\xac\xc6\xb6\x86\xe5 \x97\x86N8\xe0\xc6?\x05\xfei-/P\x94\xbdV?\xdd(V\"n\xfdt\xd5\x80Z\xf6d\xd6w\xbb\xacu\xecX\xab\xa3DWA\xf6\xaaq\xca\xd3\x054|\x99\x012}R\x1a\xa2 Y1\x91m\x999\xb7)}\xfd\xddnQ\xe8\xb7\xc9\xc2\n|92\x87\xac\xfe\xd5\xa3T\xbd\xd7\xa8\xda\xab\x86\x93BM\xcb\xd4\x81\x9e\x99\n\x8a\x95\x9b\x9a\x18\xf2\xc9'\x91\x1a\x08\x9e\xd6m7\x93\x83p\n*\xe3K\xab\x02\x84\xd7+N3\x939\xc9\x80g3\x80Ei\x83\xf3\xb43\xe1\xa5\x1b\x01\x8f\xd8k\xcc\x9f\xce\xd0\xaf\x7f\xc6\xb7\x06\xe8\n\xb7\xfb\x91\xdd}\x9e\xe0~\xd3\xa4\xc4\xe7\x9a\xf6\x04=\xd4\x93\x97\xe5\xba\x103\x04\x81!\x13\x0f\xbbS\xd3l\x17\xdc\x1a\x12[\x88>\xc2\xff\xeaR\x8f\x85\xd0`.\xd8\x9a':A\xe8g\xbfe\xc1\x9f\x91\xb9\xb2\x17\xc2\xec\xd9d\x86\xcf\x9e\x83\xe9\xb3)\x88\xab\xf3e\xf4\x00\xe8 X`\xad0\x8ab\x1e\xf2\x84\x85Q\xc2\xfb\x9fCe\xd5e\xb0\xce\xb6\xd1\x8c\x98c\xf3\x04\x9d;\xf4\x03/\xe1\x96\x90\xeeIK\x0e\x9a\xbc}U'\x9a\x8d\x86\xdc\x1f\x0c\xe5c\x13ymR\x18\xf1\xebE\x89\xc7\x93\x05eUj\x10H\x9cd\xe0\x87\x0b\xac\xe1\xa1\x92\xd8\xf1\x95\xfa\xf2O\xc9\x04\xb0\x1ee\x8b\xa1?r2\xee} \xc9_\xdfN\x17'\xccO7\xc4Y\xf5\x1a\x84\xc2\xb1\x8e\x19,\x1fL\x85\xf0\x82\xb1\xd4\xe2v\x18\xa5n\xe2\xc7\x99\xbe\x00\x98@6\xef\xda\xce\xc1oO\xe5Q\xab=I\xdb\xd1\x0b8I\xdb\xa9'\x11\xac\xb41\xec5p:\x0e\x95\x8f1,\xfc\xc4\x9dI:F\xe3!\xe8by\xb3\xe3\xc5\x8b\xa6z\x15,\xa2\xa9\x1a\xc6\x82v\x00d\xec\x9b\xe1\xffK\x9dp\xbcZ'\x1c\xcf\xe6j\xe3\xeb*6\x1f\x1c\xcf\xe6j\x93+\x8057\xa2gs\xb5 \x14\x80\xe4\xecw\x15\xe0\xf4+\xa71\xa8\xaf@sd`\xb1\x86\xd8\xfdt\xbc\xaf\xc7OG\xffE\xb4\x91\xe7\xa5\xf5E\xfcQ\xd2\xb5\xa5 \xc1d\xbc\xd6\x8c5!\xee(\xa8\xc4\x1d\xb9\xe0\x15\xe4B\xdc\x91{\xf4h\x87\x05\xd7\xdd\xaaW\x90k\xb9\xe0SK)\xa8\x866\x99\xe5\x84\x11\x81\xdf\x19aF\x115\x9b\xd5\xc5\x1c\x052\xe6(\x99\x19\xf0\xecR\xe4\xf1@HO\x13E\xec\xd2\xf8\x94\x17?7^\xfc\xad\xdf;^z\x15\xfbxKf\x93+2\x87\xfd\xe1\xcc\x1f\xfc\xde\x0f\xca%~p\xfcx\x97\xb5\xa4\x05\xc0\xd6\x96k\xd2\xd8\x1eO\xdd!\x1f9\xa4\xc9\x9aB\xbaQ\xd0\xca\xc8\x14\xee\xaaIo\xf1\xfe\xb6\xac\xf2<\x93N\x14[\xab\xbc\xbf;\xd3\xf7C\xafx\xde\xdbf!\xb8\xdb\x85\x9c\x14\x84\xa1'\xc4 \xa5V8H\xad\xc2\x81\xf3<\xc2\xc1\xd7\xca\x18Uj!\xb9=\xcdJ:\x9f\x98\xff\x94)2\xca\xa7}\xf9\xd8\x81\xc2r\x83\xebK\xe5\xb2T\xc2o\xe7~\xd2\xc4\x99SY.l4\xd2\xb9\x8a\xcbo\xf1~}\xa1\xbe\x99\xc3f\xeds\xf9L\x11`>\xa3nz\x9b\x8d\x832\x8dd\xbb\x05\xecN\x9e\xe4V\x83\xb9b\x08\xa5%\x95\x9aXx\x0c\x857\x13\x7f\xe4g\xfe\x98O\xac0bgX+\x92#i\xd0\x1e\x06\x82\x04\xc2\xab\x902)\xd0\xef\xff~\xc2\xfbuna2 \xa9|\xccx\x00\xe1\x0f\x1a\x07\xcbt\xab=\x10\xb4\xec\x88S\x14sJ\xc5\xccIo\xa7P\xcc\xb8\xa3\x04\xb5\xd6\xdcI\xa1~\xe5[\xa2\x91\x18\x06\x93\xff\x7f,\xf3\xb3\x80\xd7Z<_`\x7f\xd0\xd3\xcd\x9b\x19?\xc8j\xfb\x8b\x05_\x10\xbc\xa8\xb6c\x7f4h\xec7M\xdc\x05\x16\xb6O\xce\xcd5!\x95V/\xe7g\xe3\x83\x86\x8d\xdf\xf7\xbdl8\xb9\xd8Du\x96\x19\x15t\x8d\xf7E\xbfs|4\xe9\xa5=\x95\xbcL\x92\xc2\xc0\x11\xd8<\xa1F/\xca\xb2h\xb4\xc0Zb\xb0\xb5%k\xe2_\xea\\G\x04\x15=\x94\x89\x1a\xfctcq\xfbD\xbbS:\x07\x1e\x8f\x13\xeeJ\xcd\xad\xa6z\xba\xef\xcbL\x84\xae1:J\xbe\xe9\n\xa5\x8c-\xb0#G\x06]y\x06\xcb\xa7+;\x8c9\xbc\x997j2\xf9\xb8N\xca\xcd\xd9]h\\\x99 \x87\xc7\xa3\xb6\xa1\xc6\xe6\x18Bo5\x86\xc6:\xcfelb*\xc0N\x90\xdc\x05\xd6@\x9d\xf5\xaf\xe0F\x8d\xf7)\xfa\x07\\\xa6\xf1\xa12\xfd\x0b\xe5\x14\xa7xL\xbf\xc0\x85\x05v8\xb9\xb8d;\x0b\xccm^\xb4\xa6\xcc\xb1\xb0\xff\x8e\xe0\x0b_n\xfb\x87_r\xfba\x08/v\xf7\xff\xf1m\xa8\x96I\xea\x1e\x8b\xd3\xbf)\xf6T\xbd\xf8X\xbf\xa9P,\xccG=\x9eL,\xe6\x87\x19\x1fLQ\xae\x17E\x01w\xc2\x86rZ\x03\xfc2\xc86\xfe\x92vh\xa6\x91C\xc9\xa9\x13\xef\x02\xd9\x7f\xe9\xd8d\x85O\x8c\xe7\xac\xb5\x0c\x95\xb0s(\xb7d\xe70\xe6\xd4,\xa4\xd7\xa8o\xf6YZ\xa2\xb9w\xc9\x89\xa5Lm\x93\xd0\xab\x1b\x17\x9b\xaaB\x97i\xae\xa46o\xca*\x15\x95\xa3\\\x0b8Um=\xd8\xcd\xa28\x1c\xc4j\x99\x92\x88?\xa9\xa8\xa2\xf1E!q\xc4\xaaE\x8a}n*\xc5\x0fbG(\xac\xb1`\x87EA \x00hx\xd3\x14*\xf1VS.\xf0\xd3\xf2\xc2\x14\xa8Q\x8d\xa6\x87L\xa5\xbf]\xfb\x9e\x18Q\xea\x08\xdd\xfd\x8e\x0c\x90\n\xa8\xc1/\xb7Y\xd6\x84\xe6\xda\xce\xc1J\xd6\x95EN\xce\x9d\xea\xd8\x8c\x7f\xb2\xd0\xec)\xab\xfdO\xc2\xe6N\xd8\x0dm\xf9\xd7kh36\xb0\x19\xc7\xf3.D\xd1^\xbb\xd5\xe3\xfd(\xe1\xdbjy\x14\xd9M\x1b\xd3:\x9a{\xe6a\xc2\xfb0\xcc\x94g\x8bY\x96\xf8\xbd<\xe3m!\x80\xb7\xba\xf6\xdb\xbfN\xb74LlzM\xa7q\x89;\xfe\x87\xd7\x17\x8f]\xfbA:{\xec\xf4\x91\xd7~0s\xe3\xe8\xef\x1f\x1f\xa8d\xc5Ug8\xba\xda\xf5i\x98\x8a\x85\xd1\x88\"\xf0\x94\xae\xf5\xe2\xf2\xf2\xcd\xc5\x9d\x9d\xad\x05v\xbd\x05\x97\xe8\xadj\x86P\x92\xda\x82\xd5\xe6c\xc2C).\x11\xd3(O\\\x8bE\x00\xee\x19\x1a\xfc\x89\xfcBm8s\x06\xee\x0eZ\xd2w\xbc*B\x08\x95;mgE\xd6\xe6\xa4N{\xac\xbb\x94\xach\xabN\xb2\xe7E\xfbaU\xa4\xbbK\x0d\xac\x10\xbbq\x86\x85|\xbf\xb0c\xd6\x08\x8f\xc3l\x14\x88clg}\xd9a\x1c\x0d\x12'\x1e\xf2\xa4\xbeP/\xe1\xce^Z\x0f\x0f\xfcp\xcf\xef\x1f6\x17\xd8\x91\x9b\xbc\xc0Z7{\x81\x13\xeeY\xd2\xa8w\xd4EK;\xb3(\xd0\xae\xcc\x12\x96\xa3\x850w\xff\xafI\x15\x05\xf8\x9fq\x8d\x91\xe3\x8aa\x7fJ\x86\xa6\x01\x04\xb1FN \xd6\xeb\xd9Gx\xd7\x17/m.\xb0\xd6K\xa4|l\xf9\xba\x18J\xccy\xfc\xe7\xb84|\xbf\xf7!\xfd\xae@\x8f\x7fNA\x00\xf8K\nH\x83H>)\xf1\xec\xf1_P\xe0X\x02\xfe\x1b\x02\x90\xb3\xbbGvDz\xa6\xb6\x9e=z\x9f\x02d\x94\xac\xb5\xca(\x85\xf9`,\x02\x90\xe3\xc8\x16?\xb2\x03{\x12\xf8\xd8\x0e\x94\x07\xf2\xd1\x13;P\xf6\xf9\xe8\xa9\x1d\x08\xb3\xf8\x1b;P\xe2\xfc\xa3\x7fm\x07\xca\x85y\xf4?\xda\x81\x12#\x1f\xfd\x1b\nL2\xb9\x02\xbf\xb2A\xc6r\x8e\x0f\x08]\x01\x18L\xe3\xaf(0\x05\xfc\xbfGhE8HEo\x9f\xfc\x84\x02\xee8\x89\xc0\xe7g\xff\xfc?`T\x8c\x06\xd2\xee\xfa)9\xd0\x1a\x80[[\x8c\xe2>\x1c\xf5\x7fO\xaa(\xc8\xcf\xff%\x86\x88S\xf0\xec\xfe=\xf2Y\x10>\x89\x88d\xe9bID\x1fcJ\xe6\x00F\xdf\x7f@\xbe\xfbr\xc1\xee?$\x80(]`\xado\xe3Y\xc4qpxN1#+\xa9s\xe28\x89\x0ej\xc6-@\xfc\xb6u$\x8b\x89\xf4\xac\xb2l\x83\x06|\x80k\xa4.\x10\xcf\x7fI\x0e\xb1\x81\xfco\xa4N\xea\x0f\xe4\xc0\xef\xff\x8cT\x12X\xf0\x07\xe4\xeb\xe1\xa8f\x17\x04DM\xe6\x9f\xe3n2?\xf0$\x8d&L\xd1@\xfe\x07\\'\x17\x02G\xeb\x13\x82Q\xea;!!\xfbn\x14\xfa!\x1c\x14\xcc2\x9d}\x05\xf9\x08S\xf5\x9e\xe3\xee\xb9\x11\xd0\xab\xfb\xefZ\x80Z\xcf\xee\xbdG\xa0\x89\xa4\xbaO1}\xef9\xc9\x98\xcb\xb1<\xc0\xfd\x9du\x92}.1\xfb]\xcc\xbb{\x05\x08\xa3\x1a\x80\x80dS`/\xd9\x13\x80?%\xf3\xee%{\x99\x06\x92%\xab]\xeb\xb3 s\x90\xfd\x81\xcf\x98\xe7\xf6\xbc\xdby$\x97\x1dK\n=\xee:y*W\x0e\x8f\xec\xac\x04q+\xac\xd7\x08\x1b\xc5\xd9\xa1\\\xf4G\x98\x92\xf4\x04~X\x91\x83'a\x94\x8b:oc>qV\x82\x82\xc0Ok\xc0\x99\x9430\xf9\xeb\xa9\xef\xff\x0b\xfd\x0e\xa2\x0c\x1dB\xb6\xcf9\x1co\xd2\x89\x96\xb4\xc8\xbej\x00f6=\x7f\xe0\x02\x05~\x88\x05O\x01\x02\xd1\xf3\xd9/0 \x16\xb0\x1c\xaa\xe1\xc3\xdf\xf3\x07\x91\x17\xc1\xb9\xc4\xb2\x93\x80\xc5\x01l\xe4GX~\x12\xc0\xcc\x1fq\x80ZF\x93\xdeV}~D\xd0\xdd\x1f\xa4\x99#\xb9\xc5_\x90\xa9\xfb\x83,\xf1\xa5,\"\xf4&Q\xe6=rr\x8b2\xd0\xc3{\x98\xd6\xf4\xfcAnF\x8e\xa9W\xcf\x1f\xa83\xfa\xd02)s\xda\x1e\x92\xe5\xd8s\x92h_\x80\xde\xc7\xd4\xa2\x178\xee^\x10\xdd\xe1J\xb8\xfa\x10\xcb,\xb2@z;w\x12 \x7f\x0f\x0b<\x12\xae'%K`5\xa1R\xc2,\x0d\x968*\xa5\x02\xb8\xb5}\xf6\x0b\xb2;\xe5R\x89\xbaT~\xf6\x1e\x96\x02\xa4\xae- \xff\x023\x86^\xb077/\xeb\x90\x03\x12\xec\xcd\x9d\x94\x10BE\x82\xbd\x13\x00\xc1\xc2\xb2LO !\x98\xa1\xf5B\xb1\x18g\x9e\xfd\x183\xda^\xc8o\xe7\xbe$\x07\xf7\xff\xda\x02^\x07\x94~\x8a%\xc0^\x08\x80w\xb1\xbau\xd6\xc8B\xff\x07\xaebd!2nh\xeb\x01\xe9]_i\xdb@\xfb\x99\x0f\xe8E\xe6\x1a\x1d\xf4@J\xf9\xf0>\x05-\xaf \xc8\xcf\x7fa\x81\x04\x12\x82YT/:\xf0\xa0\x0eV4\x04D\xd6\xf9\x19^\x04\xd1\xda\x96\xac\x83%\x11\x01\x91\x07\xd6\xb2\x08\x07\x1e\xd4!\xa8\x10\x1dx\xb2\xce\xcf\x08O\x8f\x0e.\xc8*\x96\x01H2\xfa3r\xf6\xa2\x83\x0b\xcb\xb2\nVo\x05D\xb2\xce\x9fciD4\x06u\xe8.\x1c\x0ce\x9d\x9fa\x92,Z\xdb\x95u\xb0\xbe\" \x92\x95\xfc\x9c\xf0\xfc\xe8`\x08u\xb0\x02$ \xb2\xce\xcf\xc8i\x8e\x0eF~\x08\x04\xea\x01\xa1\xf2\xd1\x81&^\x0f\x08k\x8d\x0e\x0c\xd5}\x80\x15\xb5^t\xb0\x0b{\x8e\x95\x0d\x01\x01<\xc1\x82i/:\xc8\xa1\xce\x7fk\x81\x00\x9e`\xa5S\xb4\x06{\x8e\xb5N\x01\x01<\xf9\xa5\xa55\xa8ci-\x07<\xb1`\xddeY\x85\xd0\x92\xe8@\x9e\xfd\x9f\x11\xca\x16\x1d\\\x06\xd4\xb2\xec\xece\x89[?'\xb49:\x18C\x1dB\x95\xa3\x831\xe0#V\xb6Dk\xb0j\x844F\x07\x97a\xa5\xb1V'Z\x83:XA\x11\x10Xi\x0b\x0e_\x86U\xb3\xec\xf5eXi\x0b\xfa\x8c\xa1\x8e\x05y\xc6\xb0\xd2\x04\x0b\xeae\xe8\xb3\xca\x98\xf6k\xb2o\xf5\x80qO\xb2\xf7\x8f\xf1a=\x0bZ\x10\x95\xb7zF=\xfa\xdf \x84\x8f\x84p\xf7\xec\xad?#\x90:\xc9>Us!R}/\x8d\xc4:\xff\xe0\x07\x96\xefR\x85\xff\x90\xc8#i\x14\x0c\xd3\\\x02\x7fEHv\x1e\xc8m{\x93lu\x1e@j1\x1bH)o\x7fj\x01HM\xf9 \xb6L\x08\x08\xe8\xcax \xce\xe6F\xdf\xb35\xa7@\xb8\xd6\x92\xb6E~\x8a%3\xd7@~J\xea\x80\xfc\x88\x89\xbc\x12G\xefar\xe9:\xb16ta\xf9\xcbu\xe2^\xa2d\xc3\xc7\x98\xd5\xb9N\xac\x9a|\x8c\xf5\x7f\x01R\xb5\xf0\xe8\\'VB\xecc\xcc9\x96\x9c\xd8\xcf\x9c`\xd9\xef\xf7y\xc2\xc3\xccw\x02\xc9\x14~\x82w\xdaubPY\x1e\xff\xe7\x7f\x8f\x1bq\x9d\x04\xb6\xf3-,1\xbaN\"\x15\xd3_\xd3\x05;\x0c\xf8!h\x17X\nqu_\x8f1\x82.\xe9\xf6>\xc5<\xd35\x10Z\x87{\xbe\xd4\xc7\xc9\xb2\x18\x08\xe6YKJW\xf8\x14\xa3\xb4\xab\x01xc\x96J\xaa=V\xc0\\7W\xf3\xa1\xa3\xce\xe34\x95\xc7\xf41f\xf6K\xb0e\x9fb\xb3\x8b\xab\xbe\x93\xfdW\x93\xf9\x18\xcb\xa9K\x02\x1086\x90[R\x1b\xb1\xce\xe6J\x7f\x86\xd6\xc7\xf8\x84.\xf10\xe3\xc9\xb2\x1c\xc4\xc7\x98\x1c\xb9\x12\xe8\xd9\x81K\xfd\xc4\xbe\xdfZ\x9f\xc3D|\xe9\x02\xa8\xd6x{\xdc\xa1\xfc\xfe\x0fdC\x87\x1c$\xe5\xbf\xc4b\x98\x84\x8c\x9c\xc4\x0e]\x1a\n\x12\xfa9\xedF\xaa\xcd\xa4\x17\xb0\xe4\xfd\x82l\x00\xa0\xc6\xaf \xd5\xf0\x13W\x91\x1a,\x9f\nP\xc0\x9d$\x89\xf6\xb56\xf2\xce\xffY_\xc6\xe8\"\xef\xfc_\xd6B\x1eX\xc4\x9e=\xc0\xb2\x8a\x02k\x0d\xf8\x01\x96K\x14\xdcS\x06\x9d\x07X>Z\x92\xf0e%\xd0c\xd9E\xd5\x16L\xf5cL\x9c\x15l[T\xfcs|\x9a\xa0\xd9KF\xd2\xc3B:\xc07\xb5\xb0\x87%u\x00\xef\x18y\xcf\xb2\xba\x92c|\x88\xb5z\xd7\x07=\xd3\xb6\x1f}}\x8c?\xc2\x07\xd2\xf5\x93\x11\xd8^\x9fb\x0b\x82\xeb'\xa9B\x8b\x0f\xb1\xcc\xb5$\xd4\xb7}?\xe5KQ\x98Ey\xb2\x1af|\x908\x923\xde\xc3\x87n)\x88R\xbe\x94'\xc1\xe1r\x94\xf7\x02\xfez\x1ee w\x90-1%\x8b2dc\x82\xbc'\x97\xe6\x97X\x0c\x93\x90\xdc\xcf\xac\xc0\xa5\x08\xac\x89\xcf\xee\x91\xe3\xad \x0b\xb6\x1ap\x03\x83Ey\xd7\x80\x88\xfd\x16@\xb7k`\xa3\x91 Y]\xdbw1\xec\xff\x8a\x02\x80\xd5\x12\x16\x14\x8d\xe2>L\x07Kb\xae|\x19a\xc4\x15\xdd\xb6\xd5\x0c\xf8\x01`\xd7\xdbx_\x8d\x99\x90p\xca(\x1chv\x8bI\xddR\x14\x0e\x92\\ux\x1f\x0b\xbaK\x05\x0f!\x18V\x80\xf0\x11\xb3\xe1\x15-#\xb5t\xdb,\xb4\xfaNw N\"\xb8\xd6\"\xacI\x82r7\xb3C76\xaf\nR@d\x9e(>\xac\xfb\x9e\x02g\xc0\xe7q)\xca\x05?i%\xa2e\xa6\x90\xec!\x99M\xee9I\"W\xe7}26 \x93\xeb\xf3>^\x1f7\xe7\xb1\x84<$s\xcdy*9\xc7C\xacM\xb9y\xa0\x97\x1b\xdbv\x01$\xa7\xf5>\xd6A\x96\x94\xbd\x95\xf0i\xf8~\x0f\xab\x9an.\x84b%\xf9\x126\x92\xc7J\xfe&\xd7:nn\xe4e\xc2\x96s#/\x13\x11+\xd7\xf2\xf2\x03K\x83\x11\\\xe4\x91c\xaf\x84\xbc{O,\x02rn\x90\x92\x90T \x92\"\xe0\xfbX\x8dv\x05y\xe7\xb7\xe3\x84\xbb5\xdb\"\xe1i\xee\xd6mN\x12\x1cjc.\xd6\x80$\xb00\xe7\x12\\\xcd\x93D\x1a\xe6?\xc6J\xb7\x9b'c$\xb3\xd0\xad\xd7E\n\x91\x85N\xbc~d\xea\xba\x87\x0e\xaa|\x83F\x04V}\x83v\x0f_\xc5\xb8\x87\x81\x9b \xda\xf3\xec]L\x90\x97e\xaep\x01z\x13Sc\xaf\x00a\xc1\xd4s\x02}\xa3\x81\x0f\xd8\xb2\xdeh\xd2\xdc\"\x00~\x8aq\xde\xd35(\x00\xc4\xb171QXv\xd2!\\\xb0\xe1\xbd\xf14\xe4\x01f\xea^\xc9>\x8f\x97\xd5\xeb\x05\xd2\xd3\xe0\xd7X\xc8X6Z\x15\xde#\xcf@pc\xcb \xb3cv\xe2\xc1g,\x1e,\xdb\xb5M\xf0\xf5\xf8 >\xb3\x9e\xd7\xb0]z\x1d\x7f\x8a\x8f\xf3\xf2r\x94%\x0e\x984\xdf\xc7\x94\xd7\xf3\xa2,\x05!\xe41FQ\x8f\x0b\x0e\xff1\xd6\xe7\x969p\x1e\xac\x18,\xf3\x00\xae\xbf\xc8\xdc5\x00\xcf\xde+\xe9_\x18i\xbd\xbe\x9f\xc2\xd1\xf9\x00\xbb\xe0,k\x85 \x8f\xc0\xd3\x00\xb28\x17\xe0B\xe9\x03l\xeb\xf5\x86\x0ep\x8a\x9fb!Y@`=\xb1\xcc\xb0\xec;n\xe2g\xbe\xeb\x04\x8bun[\xa52\xa06\xfc\x1a\x0b\xa7\x95\x12B\xd6\xd5mQ,,J\x9eW\x9eT?\xac/\xb2\xa3\xae\xeb\x7f\x8d\x8dx\x9e\xefH2\xfb\x10[\\\x96}g\x14\x815\x86\xc0\xbc\xc90#Gcs\x9e\x80\xa75\x10\xb9h\xd8 N\xad0\xe4\x00\xf8\x03\x07\x04\xe3\xdf\xe0U\xf2\xfc\xd4\x97b\xeeCL\x18=y\x13\xf4 \xc1n\x7f\xec\x83c\x83\x1d\x12\x85\xc6\x94\xfe\x90 \x9a?\x8e\xc2\x03+h\xf9\"\x9ct\x8c5\xde-P\xda\xb1\x1c\xe3\x05n\x94\xc8\x81\xbf\x8b\xf9\x9b\x17\xb8\x89|b\xe0\xd9\xbb\x98\x0f{Q\x10H\x94\xfe}\xdc\xbd\xb9\xa9\xc2:\xb2gD]\xacH*c\x06\xde\x0e\xaf\x06q\xa3Li\xc2?&(\x16eJ\x9f\xc1$[B\x94Pq\x1f\xd3\xa0\xe5([\xb9\x9d\x83>8+:f\x01S\x0c\xae\x01\xd8Z\xc1\xb5\x9d\xf4\xd9}\x8c\x1f+\xb0hX\x0d\xe5\xb0fX\xca\xe1\xcbJ\xd2 \xaa\xc9\x8a\xba\x05\xc2\x83\xd5Fz\"cpU\x01\x1fR8\x9f?\xc1R\x1c\xef\xeb\x860cZ\xd1:\x066\xc3p\x0d\xc07FR\x8bz\xf6\x04o\xc5\x8a \x8b -\x19\x08fy| \x89\xf7\x132\xedA\xaa\x8e\xca\x13l\xe4\x05e\xed \x96\xe2VJ\x86_\xd2\x7f\xe0\x87\x19OdW\x7f\x86 \x13\x87K\xed\xb71\x93\xe2\x01\x0c\x0d\xef8\x0f\xcc\xd0\xf0\xda\xaf\xe8\xe8\x0b\xbc\xc6\\\x03H'B_\x94c\xc6\x04IBR\xb8\x86%@\x99ky{\xe4\x04\xc1\xb6\x91\x08\x7f\x81\xe5\xe3B\x17\xb5\xd7\xbf\xcc\x13\xdc\xc6{\xd8Y\x84\x8fRI{\xdf\xc4\x9cS\x00\xe6NH\x10V\xa3$H\xba\xbe\xbdI\xfa]?\xbf\xc0Z\x9f\x91\x83'-\xef\x9f\xe1\x0b8\x1e\xaa\xce1G^\xd1.\xfe\x0474\x80`\x87\xd1\"\xb0M\x8e\x1b-\x82\xe0`\x0cT\xf4!\xc1\x80\xd8IR\xe0\n\xd8*\xc3\xb5\xf4\xfe\x18Sx\xe5\xb4\xfb9&\xd6+\xc6\xd9\xfbs\xda\x8f\x01\xe1Z\x02$\xb6\xf67\x04p[_\n\x12\xba\xc7o\xd7\x931~[y\x97\xdc\xc7k\xcdo\xa7\x81\x13f\x83,\xb1\x1fT\x00\x07<\xb5\x9f\x16\xa3\x07=\xa6#\xcd\x1dy\xc4\xce\xd8\xaah\xad\xdf6\xa0\x9c\xc3\xb5\xe8}\xcc\x92Vn\xe7~\xe0\xf7\x12?\x97s\xf9)\x16\x18JN\x946\x08\xd8\xae\x1ec\xa5\x81\xdf\x1e\x17\x1b\x8e\xa5h\xaeY\xe0\x07d\xc3\x13Mq\xf1\xa1_\xd1nA\xd8\x10\xc55\x00\xf3m\xaeI\x0e\xd1&W\xd4\xbe=\xc6\xd7&\xbcnCW\xc0tE\xf8\x06|&|i\xe7\x82\xa0\xdb\xb8[\xb0\x96~\x82'\xb0\xa2\"%\xc8IV\xdf y\xc9\x13\xe9R\xff'\xd8A\x8a\x1f\xb8\xa2\xc2\x11\xf2\xd9\x87\xad\xbf\x87\xe9\xd1\x8a\x80\xa4V\x10?\x88\xb9\x9b9:^\x86\xac\xfa\xca\x01${\xf0\x9d@^/S\xdeY\x14\xb03\xd7\xbe\x13\x04\xbe\xbc$T\x96G\xc2d\xcf\x81\x98\x80\xa5\xe6>\x88 \x98\x82\xf6\xf9Hu\xf5K|\xf3\xd0\xef\xfb\x10\xf8\xf8\x9f\xff\x06\xcf\xb3\xdf\xd7\x10Z)\xd0 \xdc\xd59\xcd\xe4\xb1\x9c\xd6\xd7\x00L\xe2\x8a\x01`5\xe2\x9c\x1f\x04\xdc\xc3l \x13\\(ec>X\xec\xea\xdf\x82\x9e\xfa\xb70 p\xc0B\x87\xc5\xaeb\x9e\x18\xeb\xfbA\x16J\xf4x\x0f\x9f\xd3~\x18 \x06\xf0\x9f\xc8\x96\x19\x96\x81\xf5\xb3\xbea\x19\xf8\x10\x9d\x8b\x92E\x10'\xee\x91=\x88\x12\xa7\x1e$\xfdX\x1eb\xc3\x87\x00\xc0\xbd\x00\xe6g\xe7\xa2<\xf1y\x92%p\x0bL\xe6\x14;I\xa6\xfd\x1e\xb0\x10\xdaO\x1cW\xba\xb3\x7fL&& \x92\xa9\xff\x04\xd3, \x12L\xfdc\xbc\x9f\x12rJV\xc2\xc4_\x82^\x96 <\x01 zE\x82\xb0\xe0.@\xf30\n\xb2 \x02\x04}aF$@\xd2\xe1\xfec\xac(I\x08T\xc2\xfb%A0\nl\xfa\x13\xa0\x93P\x0bK\x19\x02t\n\xa6\x85e` \x82\x06\xb1=W\x80\xbe\x03 l\x13\xe8'\x0e\xb0\x97\xb7\x08%HT\xe8\xc3\xbbX\x08?\xa7y\x05\xd9{\xa3\xfbb\x81p\xa0U\xaf\xff\x07\xf3\xe2\xf3\xca\x08\xfd9\xdevm\x9d\xfe\x1c\xb3\x17Y\xc3\x13\x12\x08^\xb8\x81\x81\xe0\x15\x18\xc0\xcd\xed\x13l\x970\xa2\xc9\x13L\xd6\x00$\xf9\xfb\x13L\x8e\x15\x0c\xe6\x8a\x91~\xc0S5Yz\xf3.`0\xc8'\x988\x9c\xd7\x1c\x0b\xab\x17\x03\x0d\xc0\xec\xf7\xbcTd\x1fb\xda4\x00? ,\xac\x0c\x065\xc5\xfd\x11l\xce\xdbXx:\xaf\xaeN0\xa7\x1e\xa8\xab\x13\x82qpc\x80\x9b\x19Hg\xcfgO\xc8\x1e\x83\xbc\xf2\x04s\xaeApK~\xc7\xd3\x1d\x84\xea\x00\x92\x05\n\x8b\x98a\x0b\x10\x10\x98\xec\xc5\x9ckud]\x96U}\xaf\x82\xcf\xb4\xaf\x01X\xc6\xf0G\x0eh^\xb6\xb6\x06~\xe8$\x87\xab\xf6\xd5\x199\x83@\x9d\xe8\xb71j\x0b`\xec@\xca$\xbaw#\x99\xc5\xb4\xf5)\xd6\xd4\xfd\x91\xb4<={\x80Y\xb8?\x8a\xa5\xc3\xec\x7f\xc2\xf8\xb4:\x8a\x03\x1f\xd4\x1f\xe2`\xe2\x87l\xc1v\xf9\xe5\x87\xae2\xb0\xbd\x8d\xafc\xcc\xde\xdd\xc3\x8a\xb7\x84\xa8\xd0\xfd\x0f\xb1\xbe\xec\x87*\x87\x06\x99\xd1\xaa\xc2\x12\x82q\xea;\xd9\x8d0s\x81\xc6<\xc0B\x9c\xca\x08\x0d\xb1\x1a\x98\x81V\x9c\x97,\x8d\xf2\xa4\xae\xd9Uy\x11\xc8M\xf6$\x92X\xc4\x0f\xb3\xc0I\x86\xd2 \xf7\x11\x16\xda\xfc0\xd3A\x14\x1fa!q5\x1c\xfb\xa9/\x1d\xac\xc0fb![\xba\x88\x89qz\x0bK\xe5\xab\x1b@I\xb0m\xd5\x8f@\xf4!X\xabo\xbc0\xc1\xf35\x00\xdf%\xac\x1a\xae\x86\xf9\x92o \xd8\xac\xb5\n'\xf9s\xcc\x07\xd5 \xff\x1c\x0b\x16~\xed*\xf9Z\xca\xfe\x18\xb3\xf9U\xcd\x15\xc9\xe12\\\x11k?\xdaC\x92\xe2|\xea\x87Z\xf0&49\xf5A\xc8}HF\x9d\xfa`#~\x88\xbd_%DZb\x1fb\xca$@c\xfb 2\xfb\x0e\xeb\xfcS\x9f\xe2\xcbp\xdf@\x08\xc1\xcc\xf7\x00-\xb0\xee\xe1+\xc0?`s\xe8\xaa\xbaq\xc1\xac\xdbW\xdf1V\\\xd4\")\x9e\xfa-\x0d\xc0\xeb\xa8l\x1b\x18%\xc0\xb4\xf1\xf7xm/j\x06\x86y\xff-\x0d\xc02\xca-E6\xff_L\x1d/\x1a4\xc5\x87\xe4\x96\x81`}\xea\xa2\xc1!,\x94\xde2\x10\x8c\x90\x17S\x9e\xc0d\xf0\xce\xde\xd2\x90\x7f\xc0\xf2\xc4E\xbdQ\xd8\xa6uKo\x14\xe6\xf8\xdfw\xe2X\x9e!|\xe6\xf64\x00\x930 \x90\x97\xbfX<\xf9\xbe1\x8abo\xa5=\x03\xc1\xab\xf9}\x18/\xe9\x1d>\xe3\xbe\xbf\xafw\x0b\x0b^{\x1a\x80\x91zo\x90@B\xa8O\xb1\x90\xf5}\x15\x0d\x8cwdOE\x03cn\xf5}\x85qX8\xd9S\xd64,\x7f|\xdf`\x03\xa6\xf1{\x06B\xea\x18l\xc0\x82\xd6\x9e\x86\xfc9&\x9b\xc1\xa2\xd6\\\xf0\"\xae\x99\xfc\x02\xf88\x04\x06\x82W8pJ1\x04\xf80\x06\xce q\xe0\x16\x13\xb3\xff5g\xd4\xf3$\xbe`\xdc\x0f\x0c\x04\xabOk*k\xe6\xaf\xb0\xf8\x14h\x00\xdeM\x01\x80\xfc\x8e\x98\x11\x05\xc6\xb3\xccR \xcc\x8exC\xd7\x1c\xf9\xe2\x9a\xbe\xc4\xc23\n\x1cH\xb8\xf61f\xf0kZ\xab\xc7RK\xa0\xed\x00\x98\x85\x98\x986\x1b@\xc6\xf6\xfd\x14\x8b\x18\x12\xd2\x97\xec\xe0}|\xf9 `\n\x84e#\x01\x02\xe1\x81\xa8\xa2\x02\x14\xc8\x95x\x07\xcfH\x06\xd6I\x81\xe5}\x8a)\x89\xb6\xe7|\x80y\x8f\x80e\xb2\xda;\x98\xcb\xa8\x1b\xd2'\xa4\xa7\xc5\xcc\xf1\xa1'\x8a'\x06\x84\x89z\xe0@D\xf2\x13,\xfe\x0b\x00\x98\xa8\xfe5\xb5\x18\x05g\xd5\xb2\xbf\x8f\xa9E\xd0\xd3\x10|\x98\x03\x9d\xe4\xef\xaf\xb0n\x10\xf4\x12\xb0:\xfc\x91\x0d \xea\\\xa7\x80=9\xecGX\xd1\x16\x904\x00D\xc6\x1c\x12`2\x8f\xd1#\xcc\xac\xd6\x8c\xb7!V\xd0\x03\x03\xc1B\xca\x9a!\xbd\xf8\xf8\x05\x06\x82\xa5\xa4\xc0\xe5\xb0\x13\xefb\xd6\x13\xb82\x16\x15\xaf\xc1\x1a\x90F\xb2\xa5\xf0\x99t\xec\xb9R@}\x1f\xb3\x89\xc0\xe48\xc4\x84QB\xc0\xe2AN\x9d\x97x\xda\xe1\x143\xf1\xc0K\xf2T\x03\xc9.x`\xd2x\x87l5\x18!1 \x06\xf2r\x1f\x9fT\xe9\xf2/\x88\xcfY\x81\x07\xe01GhP%.\x80\x90\x81\xb5\xb2\x0d\x89R\x8f\x8a\x85\xc9V\xb7\xec\xedN(\x89)\x80\"\x04\xb0,g\xba\xd1\xc7\x90\x1cj\xd1\xd2\x12\xf7\x03H\xc7J\x91C\xc0\xc1\xf9\xbf\xbc\x14x\x19\xa1\x94t\xd7.\xf9\x8dc\x0b\x85.Ur\x1b\xc7\xb6\x9ej\x11\xed5\x8ei\x87(u.\x88\xa0\x8dw\xb1\xe9VLZy\xe0\xeb,\x7f\xc4\x1f\xbeT\x06\x02|\xdf!\xe7\x85\xf73\xb3|\xa0\x1ec+5\x0d\xf8 FaQ\xa4j+$\xf6\x99\x80\x14!\xadT\x8b\xa4\xb5[-\xcb\xa8iA)r>t\xa9\xf4v\xee\x0f\x8a\x1e1\x11\xb6\x05'`\x8a[\x8a\x9e!\xa1\xa4\nV,\x8c\x0d\x83\xab\xd8\x82%\x1d1\xd4l\x98p^\x84\x98\xe1\xd9\xc8FJ)\x1f\x1f\xe0S_.\xa0\x90\xe9CL\x9c\xcbe\x8c}\xf2\x01\x16\x93D)\x08\x92)\x0d\x19\x0b,P\xa8:-|\xa7\x0feJ\xa1\x1aXG(\x17\xd0\x07\x00\xeb\x04(\xda\x03\xe3.\x8d\xf4 \x82\xd0\n8\\S\xfc\x80\x0bi\xba\x19p\xc1CD\x1a}\xf3C k\xc9'\x80\x9e\xbe\xb4\xee\xbb\xba\x99#\xf2\x9e\xf1 x\x8c\xd7+(\xf9\x04`\xedM\xc1\xe4\x1a<\xc1\xb4&\xe0\xa9\x9a\xacE\xce\xe0\xa9r\\x\x82o\xd4\x03\x9e\xa6\xa5\xab;,\x81\n\xb0\xb6\x13`\x0dZ\xc0\xf8m\xe5\xf7jYc\x01\xd5`\xb25kO\xaa*\x14\xa1U\xa2\x08\x12\xb0 \xe1\x8a\xeeHrA\x94\x80\"\x95\xb8\x0d&\xcdC$\xc7x\x00k\xd9\xb6|\x06\xd7\x92GD\x18\xd0~:T\x1eOJ\x04\x92X{\x12\xa5\xc0R\x01=1\xb4\x91\xec\x00\xa4\x00z\x93X>\x12E3\x1f\x10\xca\x98:Z\xf9\xc6\xf8\xb9\xa6\xafF\x88dh\x8c\x92X\x98ZS\xaa5\xa1\x95\xb5\xdfk\xa4\x81\xc08}ac\x88\x80\x80`J8vz\xbbg\xb3\xc7\xa4z\x82\x041Rc] B\x92vb\xf8\x8c\xc8\x8b\x06\x82\xed\xbbk;\x0b\xac\xf5]\xfcQ\"\x05\xe5\x9a\x99\xa5l\xa0\x9d\xce\x08\xdd6Ng\x84\x86d\xb5\x82\xa4T\x8c\x16l:QP\xa8K\x84=e\x9a\x9d\x7f@hQ\xc9U\x8d\x98v4K&t$K\xe0:\x97hK\x81\x0e1&\x89\xf3\x83,\xd1\xeerdRy\xe2\x19\xc3\x0e9\xb3ybB\x90\xc9\nV|\xd0>\xb2H\xf3\xda\x07\xcd\x02S\xb7\xfa\x1f\xe3\xdb+\x13.\x83g0r\x80\x16\xfc%\xd6\xec\x04\x80\xc3\xe3\x1b\x04v \xc4\x89\xf71\x91\x1e\xc1\xf7w\xf0\x94\n\xfeT\x032\x96\x0dl\x1e\x03\xb0a)Xa\x03\xb0\xb2y\xe0k\x92\x91\x93\xec\x01\xc5z\x0f\xdf\xfd\x8et\xb6\xc5g\x1fa\x99\xf9\x12H\xa0\xd8\xbc7\x82\xcf\x98\xbd\x8eL\xca*l\xe5\x18\xe9H\xe6{\x98\xb1\x8f\xb8\x93\xe6 \xf7\x8a\x07\xb6\xb0\xf2q\x89{~>2Ndoa\x82{\x89\x07\x81\x1f\xeak\x01l\xf4\xbe\xa4\xd5\x01l\x88\x1bi\x00>\xe2\xa3\xa1\xdc\x9c\xb7\xc9\xea\xfb\xae\x0c?\xfb\x18K:*-\xe8=l(\x19\xf9\x9e\xfd\x8d\xa2\x91\xef)\xba\xf0\x14\x13\xd6\x91\xef\xd5\xa4\xcf-\xb2\xc0`\xb2.!\xf0\xc6\x16^\x1b \x82\xd1a \x0e@R]\xf9\x08/\x81\xcc\xc9\xaa\x13\xaf\xde\xc3\x8cq\x14\xb8\x90\xad\x10\xdb\x8fG\x01\xb3\xb4g\x1e\x1a\xa3\xb0\x0c\x1e9\xf8%\xa6M\x12\x02f\x85:\x18\xf8\xfc`\x1f\xbb\xb0'\x9d\x8c?\xc6\xd4:,R\xcc\xd3\xb1\x97r\xc9S\xa0\xce$\x89\x97}]\xdf\xe5|\x86\xb7*4\x10lz_\xd7w9\x9fa\xae\x11\x1a\x08\x96:C\x93r\x96\xf6S\xce9k\x19\xb9Jt\x89Q|\x1d\xc88\xd6\x14B\xf8\x8c\x15\xca\xd0Pw|\xbaT\x82_\xb2\xd4\\{F\xbd\x8fYU\xc8\xf5\xdd+V*D% y\xc7\nQ\xaa\x02\x85\x99\x88g2\xfdu>p2\x7f\xcc\x11\x1fy\x13KW\xba\xdc\xce\xd0w\xf7\xa6*\x16N.u\x99'\x87\xcd%Ko\xf5`KS\xc8S\xaer\"a[AX\x04l[&\x9cf\xdc\xa3A%$\x82\x02\n\x96-\x7fD\xde]\xe7\xfb\xca1\xf9\x07!\x19\x82 \xaf&\xf4\x86\x17\xf1\xd5\x18\xb6\xae\xf9.6\xb8\x85\x1a\x80\x87\x19\xea\x988\x8a\xd9*,\x0e;\x16\x86:\xce\xcd\x06\xb8]\xdfX9\xd6\xcd\x06O\xeb@:4\xccRI\xef\x13\x96\x1aB\x1d\xd6b!\xc9\x03\x00a\xb95\xd4\xc6[\x028\x9f\x01\x06=\xa5\x030\xd1\x0eX\xb7\x0cM\xb8\x03!\xacCexx\x8a\xd5\xbbPj\x0b\xf7\x08\x0e\xc3Cq\x0f1\xf3\x0b}\x10>\x1eb\xa9/\x04\x8c'\x0d\xad+\x93'V\x11Be\xf2\xc4\xea^h|8\xb0\xba\x19\x1a'\x0eZGI)XD\x0e\xf5E2]Du\x97\x8c\xa5\xb5\xb0z\x13L\xc7P\xb9\n&\x03\xb1\xdc \x92M\xb2\\!\x92\xed\xd278dx\xc5\x15\x8emJ\xe5[\x1c\x1b\x19jM\xdbr\x0e@\x1b\xa3\xddh\xb5\xf5!&W\xa1\xd1[\x1fbkZ\xb8\xa6\xce\xc8\x13:8-\xc1c6\xb5\x1e\x9dM\xb8#Y\xd8[\x98\xbb\xadG\xa1\x04\xfa\xe1@\x13w\"l\xac\xebX\x11\"\x9d\x18\x01\x16K\xec\xfam62|\xd0\n\xf0\xe7\xf5(\xab&\x95\xc7\x86\xc9_\x01.\x06\x81)\x7fQ\x06\xc5b\xda\x86b\xe3\x9d\x0d\xe5\x0c\xf7\xc4V\x9e\xa2\x08\x0e\xcclh\xadX&\xcc2\xd6\xa3\x8c\x86\xe2\xd8ZB\xf18\x14\xe1\xa3L\xb9B\x13I\\@\x8c/\xb4\xbd\xa2r\x87\xb6\x03\xc7N}\xbb\xf0\x10\xf4C\xac\xd9\x02\x0cr\x98c\xe3\xd5z\x94aO\x00r\xe8Q\x19\xe3\x0c`[\x19\xabG\x00\xa1\x15\xb2`\x0d\x8dS\xb0by1\xd5U\x05\xca\xc8c\x1dHY\xea\xb2\x0f\x95^\xac\xd6\x95+p\x06\x93\xd7\xf5(\xab\x93\x07\x9f\xfc+[sT(|\xf2\xd7\xb6\xadV\xa2\x00\xf6\xc8\x93\x10\x85\x04v\x18 \x01\xd6\xa9\x01\x06H\x805\x8f\xf5(\xdbL\xb8\xcb=\xf5\xd2\x0b\xb6\xf3\x95\xe0f\xad\x9e\xfc\x1b\xdb\xe4t\xb1\xea\xba>\xb4P\xac->\xe6I\xca\xcbD\x0fOG\x94\x92\x195\xcb\xc8IdlTHc\xa7EOA%\x8b\xe1Y\xa86\xe4\xc1\xd9\xce{*\xe7\xdb\x03+\xb6\x97K\x15\xcdYX\x84.\x18\x8b9C\x83\xd6\x01V\xcb\x15Mb\xd3\x97(Z\x8c\xedO(k7\x05\n\xb7\x1c\xa2#\x8b\"\xae\xcb\xb9\x07\xbb\x8e\x0d\xfa%x\xb1\xeb\xd4XQ*\x86v\x1d\x1b\x1aK%\x8b\xf3\xf4\x1f\xed\x0d\x96\x16\xea\xc75\xb3Ck\xf4\xc0\xc23\x8bn,\x93\x93\xc0\x82\xccXx\xa2,Qeg\xc4Z\xa4J\x15=Y\x86\x81\x99?\xd1\xd6\xe3\x1a\xa9@\x00\x9c P \xf1mPH\xcd\xf1\xf4o\xe9+\xb4\xa1\x8e\x80\xbbG\xa5\x810\x8e\x02\x1d\\\x88M\xc9!?}\xc7Z &Id\xcc4\x8f\x1b\x88\xb2\x02\xabI\xd6T\xd6\x93\xb4\xf4\x9b\xa9|;D\xc8\xd7qx\x9f\x10\x8b\x96\x81\x10;T\xa6\xbc\xd1h/\xe8yr\xaa\xe2\x96K\xc0d\xa8\xaeK\x9e/\xa7\x07\xbfRD\xb5C\x04\x0dy\xa5A\xec\xc3\xf2+1\x0f\xcb,\x9a\xbfG\xbfrH\xda\xf86\xbe\x13\x0es\x9d-\x96\xd8\xb3\xc7\xfa='\xcb.^^\xd6\xcf\x14\x12+\xd8e\xf3\x82!\xb1\x18\x8cM-B\xe6\xc6\xa6\x16Y\xc6\xb1N\xbbe\x19\xc7\x18\xf2\xcf\xd8 \x17t\xb8\n9\xbc\xe3\"\xfe\x1d\xdf\\\x85cm\xcbz\x1f\xdb\xe9\xc3\xb1\x8ee\xb0\xf5\x06. v\x88\xb9\xc4\xb7\x815\x0b{\x9f\xd0\xdd\xb1\xe1\n\x0f\xfe\x9d\xad\xa6~[\xf8?X\x80\xfb\xc6\xe8Oh\xda\xbe\xe6\x99\x04\x15\xf65\xcf\xb4B\x14W\xa3\xb0P\x9b\xc7\xf1\xd5\xe1\x86I\x11\x81\xef*\"\x03\xc1W\x81Q\xdd\xf3\x99\x91\xba\xac%\xeffn\xe8\xf4\x11XF\x894\x00kc*\\\x1b\xef=Dk\xff=\xd6\x89\xa2\xda\x1797\xf4\x9bM\x9f\xe1k\xed\xc8@05\x8a\xe0!\x98g\x1fa\x9a\x13\xe9\xd7\xce\xb0\x93V\xe4\xa5\x91\n{\xc2\x96\xdd\x8d\x15H\xbd\xf0\x19\xde\xff\x88+\x00Y\xf8\xbeZ\xc6G\xd8\x95iC\x1b\xfeI[\x1a\x80\x0f\xa6\nV\xff5\xde\xa9\x0d\x93\xc4\x824e \xd8\xa4\x1d\x81\xb1\xfdC\xcc\xba\"\x9d\xa8\xe7\x116\xc3DC\x81\xfd\x9fc9&\xaa{\xa112\xa6hl\x06\x8f\x02\xbd&d\xeb\x03\xf3(\xe1#\xec\xb4\x13\xe9\xc4\x12o\xd2Z0\x17,\xcbn(O\x98\xcf\xb0\n\x1bi\x006]o\x8c\xf8\xc0\xb1\xceR\x01~\x83\x19\xe8\x86\xf4\x8f\x90\xe9\xa7\xb1M3*@x\xef#%R=\xc2\x86\x9fhT\xfb.\xec\x861\x9e\xe2+\xd2\xc8@\xb0\n`\\)\xb1\xf1i#\xe6\xa1\xf5\xc5U|\xbdo\n\x16E\xb0_Z\x14sx\xf0\xf0\x11\x96\x11\x8c\xef%y\xc5vC\x0e\xeb1\xa1 N\xe2k\xbf\xc8(\x17\x04)\xc0\xb3\xf01\xa6\x14Q\xe2\x81\xb5\xe7mL\x8b$\x04R\x8a\xd8`2\x13\x17\x16>\xa2\xc4\x13\xb8\xff1A\xe4\xc4\x1f\xa8\xec$d#\x13\xf5b\"\xde\xc6(I\x83\x08D\xb9\xc7\xf8>7J$\xa9zLH\xb1\xfd%\xe1\x0d\xa3\\\x90\x01k\xc7\x0fB\x89u\x8a\xa4O\xc8.\x1a\x08!\x94\xeau\x8f\x07\xb8\xca\x86\x11\xf4\xf0\xf6F\x06\x82\xa9\xc8F\xe1s\x8bq\xb2p\xc7%\x8f\x1a\x03\xc8\x81zx\xa97T\xb6\x06\xb2\xd2\xea;\xd9\x9a\xb1\"q\xefbanc\xccu|\x11!2\x12\xa6\x82k\x9f\xfd\x19fe\x1a\xaa\xc2 \xff\x94\xac\xfb\x98'\x9bN\xc2\xc3l\xc8S\xb86\xfc3|\xd4\xb42\x85M\x06B\xd7\x13\xd8\x87\xe7Q\xd1\x01-\x95\x94\xb8\xf2\x14s\xfc\x92}\x82B\x94m\x02\x016\x9d\xc4<\xcfF\x81\xc0\xc61\xf9\x8b\xe13&}1O\\\xc91\xfe\x19\x05\xf82\x1f\xca\x0c\x05\x8c \xd6\xf3Mlt\xd6\x94\xe7\x01\x99>O2\x1eJ\x81\xecM\xac\x85lj\xfe\x8ayu\xac\x01XX\xde\x84\xa7\xd2\xb1\x96\x1b\xc3S\xe9\x98\x1c\xc7Cxu\x00\x1f\x8ax\xa8^q\xa6\xfeX\xf1P=\x17\xfd\x17\xf8&tS\xf6\x8c\xe9z,;\xc6\xfc.\xf63wX\x9b';\x86Q\xe1S\x12\x07N\x08\xef\xc7\x93\xa4i\x00\x82\x84jx\\\x02\x06i\xb7-\xd5$\xd1?j\xf9\xec(\xc6\xff\x11\x16\x92\x05\x104\x7f|\xb2\x04D\xd7\xc2\xa6\x04\x01\xf3\xa4\x9aE\xde\x81\x93 p\xf3#\xb8\x11\xe4\xe0\xd3\xfa\x18\x0bE\x9bA\x9e\xea\x87\xd9?\xc6h#\xaa\x8d\xc2:\x88:l\x1f\x11\x1c \xf24\xdb\x97c\xfc\x08\x8b\xeb\xf1\xc8\xd6\xdaf\x04\xc9\xa8\xc4\n\xcba\x92\xcc\x83\xb1\x90\xb9\xb4\xa1\x10c\xd9\xa6\xbe|\xc5bml\xa4\x04l\xbf\x8a\xa3\\>\xf6\xf81\xde\x95M\xb9\xecO0\xd3\x05S\xe4}\xcc\x0d\xe3DE\x18a\xc2nL\x94\xf7\xb1<\x1d\xc3[\xf5O\xc8y\xd0\x96K\xfa\xdd\xad\xe9\x9b\xbb\xa50&:\x02\xee\xaaw\x83\xad\xe3(\xdf\xb3\x90\xb6-\x97,5%\xaa\x96\xf6\xda^\n\xab4f2e\xe3\xab\x05T\x8e\xd4\xc2\xb2\x96\x84+;\xce\x13\xccu%P\x87Ya\xe9J\x00\xb5\xc5\x10\x0fh3Q\x16\xc37\xe9\x16i\x08>E\x12\x92\xdaq0\xd1Qht\xf8p\xc1j\x19z\xc3\xc0\xd5S\xed\x98\x02m\x96\x1ej'\xd4)\x89\xfaN\xa0\x04\x00\xac\xb3\x08\xa0V3\xde\xc5\xca\x94\x00\xa698\\\xbfKx\x87z\x7f\xed\x1e\x96D7\x93(\x8e\x12\x9dI\xed\x1e\xc6\xcc\x02\xac\x12\xb5\xe1\xfa\xa2a\xf0\x9b\xb7\x80\xea\xb6-N\xf2\x04\x04\x83\x07\x98en\x1a\xa1\x11\xdb\xc6bc\x91\xc6\x86\xc9Mx\x95\x87\xac\xbf\xfc\xfc\x1b,\x96\xc6y\xe8*\x13\x17\x06\xbd\xae9,&\xd7\xb75\x00\xef\xc8\xed\xbal\x8b\xafk:\x87\xcd\x13\xb7\x0d\x9d\xc3\xec\xe2\xb6\xc1\xd9\xb7\xb0\x80\xf9\xbaY\x15\xact\xdf6\xab\x82\xf9\xfc\xed\xdc\xc9x\x12\xfa*3\x01\xc9\x8c*\xe0z\xf4\x98\xeb\xea\xd8\x94\xd7l\xdf\x15\x91\xc2\x02\xd5\xeb\xbb\x1b;\x0b\xec\xdb\xado\xe3*Qf\xf9\x9c\x98\x84KX\x9b\xd0B\xec\xbd\xbf\xfd;\xcc{\xb6\x8c/5\xde\xa0\xc4@0\xc3I\x1c\x0f\x12\x90\xde\xc3;\x91\x94\xb34a\xfa\xb1\xa5c;1\x1a&\x1a\x80u\xf0\xc4\xa4U\xc2'S@\xe4\x94\x1ea^\x9f\x14 \x97hs*s\x12fo[Z\xd9\xc4R\x97\xb9\xfc\xa2\xfd\xab\x1a6\x00\x10\xbc\x0f0]KLR%:\xe6\"\xa9\x12\x19Bq\x97f\x81\xa8JX\x84J\x8atKXQL\x8atK\x18\xf1\x13\x93n\xe9\x03L\x0f\x92R\xba%\xac\xe9l\x99tK\xefc\xa4O\x8aLLX\xd2(]\x03\x92E7 \x97\xb0\xc2\x94\x14\xb9\x98(\xeae>\x10M\xac5IH\xa8\xfd\xe7q\xbd-\x93\x8d [\x18\x13\x03\xc1\x1c%1y\x9a0\x05HL\x9e&\xb2[:O\xd3]\x1b@\xd4\xb9A\x01*O\x13\xa6\x84I)O\x13\x16\xd3\x93R\x9e&<\xa3-\xe3\xa7\x8f\x15\xfb\xc4@0\x03\xdf2~\xfads\x0d\x04\xd3\xd6\xc4\xe4i\xc2\xc6\xb3\x04\xf24\xe15\xd8\x02\xcd\x91\xe0>8\xc3b\xad'\xd1y\x9a0kM\xbc\xc0\xa4\\\"\x87\xdf\xe4p\"\xf8V\xe4p\xa2 \x15\x17Jh\x19\xc8\xe9\x04?9\xf0t+@g\xc9%\xd4\x99;\x81\xc9\x92k\xab\x08\x88K\xc6\xc6A\xdey\x0f\xeb\xae[+\xe7\x05\x91\xc3|5\x81W\xfe\xf1g\x8b\xff\x0fvV\xd6E\xd03r5\xc5vcT\x90<\xb7\x9a\x14\x890\xb0=\")\x12a\x90\xe6U\x0eh\xb2BZ\x90 \xdd\xe8\xc4\x16\xf8\x16\xdb\x84'\x93\x17\x7f\x13\x9d\xd8\xe2\xa7\x04\xe7\x8a\xc4\x16\x98ln\xc98\xba\xcf\xb1\x8e\x95\xc8\xcf\xbf\xa1]DR+'\x8cX\xc6\x88\xe3|]\x18\x8bQ$9\xe6>\xc8}\x820\xa7\xaa\xf7\x84\xb5v%g\x17fTE\x89J\xd4\xfbO\xf1\xfd_\xd1\x91I\xda\x85\xe9\xbfl\xaa\x9c\xb5\x0b\x93\nY\x80\xa6\xed\xc2*\xb5*\x86\xf3v\xe1\xd3b\x8a\x95\x12wa\xb3\x16*\xa3\xf3\x0ea\xf1G\x16;W\x8b\xa7\xe5\x04V:\xc2\x95\"Z\xa9\x10\xf8\x06P\x8c\x13EP\xf6.\xeb:\x97\xf2\x80A)\xc2.D)\x9c{\x8bPf\x9ff\xd4\xb2.\xa2N\x97\x85em\x0d,\xb0\x13[F,\xcfr\x13Z(\x8a\xa0\x8cYx:\xc4\x17\xf1\x01\xa1\xceVG\xc4\xa6B\x85\xf7\x1a\x96\xdad1\x925\x0bK\x04\xaaTur\x98R\xa9B\xa5\xa4WX\x8b\xab\x94\xd0\xf8\x87\x05s\x94\xd3\x8c N \xae\x9b\xc0\xbak\x02\x87\xee\xd7D\x88\xf2\xd3\xea\x83\x8d\xa4\xa2I\xa6CP1\xd0\xe9 \x08\xfa\x05\x90\xf3\x81HQEf\x1bL\x0c\x93jf\x1b\x02\xd6\x81\x0cO \x933 d0WLL\x02\x19\xbc\xe8\x89I \x83iKbn\xd3\xb0&\xb8\xa5uQ\xc2\x95\x8d.J\x04\xde\"/ \x1duqGB\xf0/\xcaC\xaf\x94\xe0\xfe\x03\xac\xde'0\xc6\x8e\xe53\xdc\xf8>\"\x9a]\\r;$<\xc2d\x03!\x04\x19\x85\xf0\x90\xb3[d\xea\xc0\x06\xb5-};E\xebh]\x1b\xfb\xc6l)\xc9\x8b\xec}\xedw\x99\\\x83\x08\xd1&\xb9\x06\x16l\x93\"\xb9\x06\x01\x15\xa9)\x082\x17t \xc7ni\xdf\xc3\xf7\xb0\xa5\xab\xe4db\x81H\xc2zE:\xe2\xc5\x93\xf7d\xbc\xb5\xe8:\xf2a0\xefR\x88\xdc\xc9'd'G*\xaf<65\x08\x00\x84\xaa\xfd\x0d\xcd\x02\xb5\xbdqn\x07\xce*\xa9\x16\xf538\xadX\x9c\x01G\x9f\xe3\xf4\xab$\xe3\x1fb!_\x00\xd4E\x1aa!F\xf0\xc5rQj d\xc9bG]\xc1\xfe\x92\xa0\x99\x04\xe9w\xfd,\xd0\xc4z\xf0\xd3\xdbJ\x96x@\x98\x9f\x80\x80\xaf\xd1\x9f\xd3\xb5Ko\xab\xdc!\x0f\xb0\xb0,!P\xefg\x965\xbf\xad\xfcg\x88\xd4t[\x076`\xb5\xa7\x08\x94x@(\xce\xedR\xf8\x82\xb5^\xe1\xd7o\xab\x0b3 \xb4\xd4D_<\xc04P\x82L \\\x0dPuH\xebJK\xd9{\x98\xd5\x97^\xae'R@=\x08j\xe1g\xa8\xc8.\xd2p\xc0\x86\x02\x85R\x8f\x17\xcb\x16\x06\xd8X\xa4h\x8a\xb0\x11Yn7\xd4#\xa6\xf8\x93;p\x83L\x1e\xf2Oo\xe75\x80\xda\xeb\xa5msk\x89u\xc8\xd4hR\x98#\xa7\x0d\x02I\x03mJ35\xee\x87\x98jogp\xfa\x08 U\x80\xbf\xb0\x01d[\x7fAD\xc6,q\x04\x9f\xe6q\xea\x07r \x7f\x83\x95$]D9_as\\\x9a%\xd2\xeeE\xb2\xdfm\xc3\x01|H\xf0Z\x1dL\xc2r\xf3\x9e~\xb3\x9b\xa8\x0e&\x16\x89\x02\xe0d\x91\x19\xe7=\x9d\xaa\xe7)\xe1\xbayo\x94\x83\x07\xf3S\"[\xe7=\x90\xfa\x9fb\xbb\xa2\x80@_\x84\xc0\xe6=\xcdE\x9f`\xb2\x9c\xe6=\xc3E\xb1^Z\x1c#\xdb\x1a\x990*+H\x11\x05\xcb\xb4\xcb\x11T\xd6\x0e\x8b\xb3d\xaf\xad\x12\n\xdb\xa6 \xd0\xdbu\xeb\xa3\xfd\x1f\xb1-A\x80`\xd3\x9f\x12\xec\x11 \xc8\xf2F8\x86\n\xf6\xa2\xfaj\xee\x96]\x8f\xb0\xd6*\xc0e\xd7#\x8cL\xe5`_\xd2\xb6%\xd2\xb7\xa6\x04r=\xaa\xeb\xa5\x14\xe1k\x19\xa7\x0eY\xb3\x80\xca\xaeGD5\x15p\xedzD\xd4S\x01\xacUPs\xb7^\x0b\xcd\xdd\xe1\xce\xd0\xb1_Bm\xc3e\xd2=\xc2\xf7j\xbf\x83!\xf0\x97\x98\xb8n\xc3v?\xa4\x15\x80}\xd2\xd3\x1a\xcf \xf2\x82OO\x9a\xc7\xf3\xe2;\x91M\xf3\xf8\x84\xf8N\x84\xc7<\xd6\xe4\x05[ \x05H#(\x11XM\x84 \x05\x009\xa0\xd8\x1e\x1b\xd2\x83\x05\xb8j@w\x0d\xb08\xa0\x96\xa6\x87\xca7\xfcWXQ\x9405 |!\x9c\xe6\xb1I\xdbJOSl\xa8!\xa55\xb1\xa2\x86Dp\xcdcE\x0d)\x1d\x8855|J\xc45#\xed\xd8\xb6\xbfn]*b\x90eI\xca\xe1\x94V\xa8\xa6h\x96\xa1\x96)\x9ae\x8e\x9a\xa2\x11\x9e\x9e\xc7z\xad\x89\xc0!@@\xd1\x08\xbb/b\xd6\x88\x19\xc6\xc4\xacachjb\xd6\xac\x90\x9a\xbc\xd7\xe9~\xa8\x8d'D\xba\xb9\x03\x91S\x9f`=q\xc7\x113\xfaA\x86>gN2\x80\x9dy\x17Oh\xc7\x91!\x9aX\xaf\xc8\xe4\xe7\xdf`\xe4\xcf\x94\x9d\x9f\xf8\xea\xef\x18k\"i\xc9@\xb0\xa6\xb1cl\x80\xd8\xfe\x92\x19\x08\x96\xa9\x94zF+H\xdd\x0c#\xbf\xce\x9c\xfcclw\xcdx\xa0\xbcb\xdf\xc5\xeclG\xdb\x8b\xf0 \xcc4\x00\xdb\xcd\xb3!O\xf8I\xd1\xd8=\xb2,\x02\xd4\x8f@b'\xd0\xac\x11\xba3\xe4\xf0\x06*\xa6g\x99\x06`\xb6)\x01\xe9\xa1\xc0\xf7\xdf\xe0\xc3)ac;\xc4w\xf7J\x197\xf1A\x91\xf0:cJ5\x03\xe2[\xbf\xa2/\xf5gC?T\x9e\x8d\x98\xdeU\xb3\x1dbh6\xdcS\xb1\xbdtD\xf5\xe3\xb9\xb0\xb1\xb5.N\x066\xc7d\xc3(\x11X\xf8 \xe6\x1c\x86\xbb\x93\xb6t<\xce\xaf\xb1%\x1a\xa5\xdb\xc0\xc4\xce\x92k\x03\x8bq(\xd1\x06\x99\xa0\xba!\xf9\x84\xe0\xa0\x00\x80\xec\x8d\x15z\x00\x01\xc1\xf8\x88\xa0\xa8\x00\xc2\xbb\xb9XP\xc9\xea\x1e\xe0\xce\"\x0e>B\xd8n\x99\x81\xd7\xee\x03r\xd2\xa3\xb8\x07\xe7\xed],\xd0dQ\xac\xd3\x18\xe3\xa1\xed\x18\xdb\x06\xa6\xed\x99\x81`\xca! *d\xe3)6\x1bdQ\n\xc3\xc6rSVx_\x93\xa3\xb6\xb5\xb8,\x99\xe4\xdb\x84\xb0$\x0e\xec\x91\x05R\\\x9f\xbf\x87\x15.\x0d\xd4\xde\x0b\xefaA\x0d\xc7\xee\x93\xac\xea4t\x9f\xa4W\xd7E@F\xc6HJ\xe2\xfa\xc9\xa5\x9a%\xac\x9f\\\xafe\x89zU\xe5\xd9/\xb0IL_\xc9\xd9z6\xb6\xc1\x8f\xb0\xdc\xbb\x93\xf8q\xc0\x97\xeb\xe8\xb2\x80\xaa\x9a\x96\xe1\x02\xea\x7f\x88]\x06\xb3\xc4\xcf\xd4\xd6~\x84e\xa3,\x89\xf9\x1d\xe5F\xf5gx\x0fw\x8c-\x00k\xbe\x99\xb1\x05\x10\xa2\xa5nz0\xfb\xcf\xd4U\x0f\x96_v\xb4\xf9\x9f\xa0\xb7\xb6\xff\xe3E\xd81\xcf\x0f\xd0>4\x04_\xc0d\xfb>\\\x8c\xdc'\xdb\xb4\x1f\x0d\xb9\xe3U\xf3K\x12\xea\x08\x85\x90w\x13&1\xbb& \x1e\x1f\xba\xdc@\xf0~\xefj\xd1\x07\x8b*\xb9\x96\x960?\xcau\x0d\x0c\x10M\xe9\x00\xfb\x0f\xf0\xb6\xec\xf6\xd4\x93\xca\xf8\xa67W\x80\x7f\xc0s\xde\xed%\\\xc6y\x7f\x86\x97,7\x10L\x13wu\xb4>\xde\xb3\\\x030\xfe\xed\xc2\xa8\xb0\x1c\x93\xc3\x98\xf0\xa9\xcf=\xed:\x809\xc6\xae \xd6\xc7\x04<7\x10LZs\xe3\xca\x89M]y\xe1?\x88\xf9\xe1\xae\x16s\xb0\xd8\x91k\x00V\xd7vM\xc0<\x16as\x03\xc1\x879\xd7\x9e\x85da\x86N\x02\xeen\x98d\xe6& -\x1ern\xde\xc5\xc2\xdaJ.\xdf\xa7\x12\xa0w1\x95\xca\xcbOWY\x80*6\xe5]l\x1e\xcd\xcdC\x18X\xfc\xda\xd5\x11\xf2X\\\xcf5\x00\xbb\xedC\xb0\xed\xc7\x98\xc1\xee\x86\x9e\x8e\xa9\xc5\xef\xe5\x00\xc8\x84\xd4\xe2Ce\xc0:\xa6\x16\xd3sY\x00\x07\xd5\xe2{(c\x8a}\x88\xf1SBt\xb6\xff\x07\xf8\xa8\xed\xaad\x0b\x9fa\x0c\xc95\x00k\xf4\xbb\x86\xc5c\xcd-7\x10L\x04\x9b.\x1cw\xe3\xc2\xb9\x86\xd0\x95\x02f\xa9Wv\xda|\x1f\xdb\x8c\x15\xb8r'KOh\\\xbd\xb3\xc5\x8a\xc5n,\xa4\x81b|\x18\x9eW\xe1\x96\xfa\xd8+\x98\x9c\xeaX91\x9aw?\xc8\x19\xd2%\x8a\xa7\xa4\xc8a\x8ak\xb77\x8e\xf1[MX\x9b\x94E\xd0\xad1\x96awU\x08\x14^\xe4\\}\xc7\xeb*\xbe\x0fm\x15v\x8d\xc1\xfbs, \xe6\x85-\x9cn\x93v\xbf\xc4\x95$\xa4\x187mSa\x10x\x7fb\x99=O\x0c\xa9\xc1\xe7)/?\x02e\x01jRC\x16\\9\x19~F6Z\x03\xb0\xd8\x92k\x0f\xaa_`\x82\xbbkD\x1d\xc2?\x8c\xa8\x83U\xb7\xdc\xbc<\x84\xeb\xecj\xdd\xe83L\xbbr\x03\xc1\xf2w\xae\x9d\xbb0M\xca\x8d\x0b\x17\x96ps-\x0b\x90\xd5\xdeUy\n\x08\xe1V\xdf\xb1.\x97\xef\x1ba\xfd\x11\x96\x9d\xc6N8\x80;\xc8G\xb8\xb9\xb1\x934\\\xab\x8c\x9dD(\xce\xd2c\x01\xaf\xd0\xd8I\xc2H\xe8\xbe\xf0\x9a\x06\xc6\xc2\xb1\x93\xd4\\\xc6\x08\x88o\x0b:\x17\x80\xfa\xb8\xc6\xb1\x16\xa7,\xed%Vz\"\x00\xe0`\x8f\xe5\x86\xb1\x93\x18O\x0clR\x11\xb0\xea\x1d\x03\xbd\xd2-\x97Q7\x0d5\x85*\xa6\xbd\xe62\xca\xc0g-\xa4-\"\xc4\xb6!`H\xd3\"\xaf\x03\x97\xca\x18\xaaH\xfc\xa1/+\xcd\xfa)f\xe1c\xc53\x9e\xe2\x83 \x002\x8a\xef)>\x08\x97A$\xc4\xe4l\x0c\x9f\xf1\xf0\x8a$f\xb8\xeb\"\x87\x19\xee\xa1HaFFe\xea`]H\xb6&%\xaf\xa7\x98\xe3^V\x9e\x9c\xf8\xa6m\x0c\xdfI\xea\x991\xe7j\xb9\x1e`qx\xcc\xb9\xd2W\xb1\n1\xe6A\xe0\xc3\xbd\x02&w\x97y\xa2\xda{\x93\x1c\n\x0d\xfa\x11\xad\x93\xd5\xd5\xc8j\xca\x97\x13\x9bb\xb9T\xc3\xd5\x13\x17u\xd5\xb7y\xec$\x8e\xf2+\xff+,B\xebR\x85\xe5\x07#3}\x04\x04\x13\xe5\xcbZ\x0c\xc7\xc2\xf6X\x030\xee\x8e\xb5\xc4JQ\xdf\xe4\x8e\xb4dz\x1c\x9b\x9c\x8b\x96\x0c\x89\x97\x8dx\x86\x95\xf1\xb1\x81\x10:[\x1b\xef=6o\x17\x92sg\xd8\x16!R\x86ma\xc5z\\\xba\x01\xb6\x90\x8b\xd2-\xb0\x15j\xeeKj\xa0\xbc\x8eZ].\x0e\x17\xd6\x00\xc6w\xfc\xc1\x1dG\xb2\x82G\x18\xf1\xafh\xbfV\xcc\xfd\xf65\x00\xf3\x9d}\xee\xa9\xf3\xf0\x18+\x00W\xb8\x07Q\xbd\x0f\xf1\xe8\xf65\xe4\x1e\xde\x17 \x81C\x89qj\x9f\xfb*[\xcc\xdb\x18\x97\xafht\xc3\xf3\xd9\xd7\x00<\x9f+\x063\xb0\xa0\xb3o \x98\x94\xec\xdb;\xdfO\xac\xa7g?\xe1N6\xb4\x82\xae\x18D\xc2\x87`\xdf \x12\xd6A\x0e\x94'\xd4C\xcc\x04\x0f\xd4\xce<\xfb\x05\x16\xc0\x0e\x94\x13\x14\xd1\x9c\x0e<-\xfe\xe0k\xe67\xf4za\x9b\xc2\x81\x06\xe0\xfd?\xd0\x0f\xb5\x90\xb7o\x0f\xb4\x8eL\x9e\xbb}Cf#\xc06\x90\x03\xf9\x15\xab\x00\x07:\xbd$y\xcb\xf7@\xdfA\x927|\x0f\xd4\xf3d\xe4!\xdd\x03\xfd\xe2\x0bf\x05\x07:\x99\xe0Gx\xaf\xde0\xe8\x80\x95\xef\x03\x03\xc1,\xef\xa0\x88\x0d\xc1l\xea 2\xd6A\xb2\x91:<\x9d\xbc\xdc{\xa0}>\xc8\x83\xbdo\x18L\xc2\xc4\xea\xc0`\x12&\x8a\x07\xc6;\xee#l\x1f<0\n\xd7G\xf8\xb6\xed\xc0\x88\xcc\xa4\xa7q\x0dK>\xd8\xaf%\x00W\x8d\x8d\x0e\x93\xdfC\x03\xc1\xb8yu\x11\x84\x12\x8c\xe6\x87\x0e\xd8\xaf\xf0\xfe\\\xd5$\x0b/\xda\xa1\x06`\xbc\xbc\n\x1d`\xd9\xe6\x10\xda\xc7\xa4\xfd\x90\xcbdBX5\xbb\xaaO\n\x96\xdf\x0f5\x00\x8f\xe7\xea*\xf4\x8b\xef\xa2\x0f}\xe8\x18+\xadW\x0d\xe2a?\x9fC\x03\xc1D\xff\xaaA\x14L \x0f\x0d\xa2`JxU\xd9\x0b\xb1\x08t\xa8\x0c\x86\xa4<\xe8;\x9f\xe1\x83z\xa8\xf4 l\x00\xb8fBQ0\xc2\xdf1\x10LT\xae\x99\x1b\\\x8c\x1ew\x0c\x04\x93\x90k0\x0d\xbc\x8cw\xe03F\x82k\xea\xe5vL\"\xee\xa8\xef\x98\xa6\xdc\xe1\\?\xe2\x89\x19\xc65\x9eDW|/\x1b\xd6?\xa3vM]\x9fb\xc9\xf0\x8e\xfa\x8eq\xe5\x9a\n\x9b\xc6]\xdd\xd1\xc8E\xa6\xa3,\xfe\xa4\x030\xf8\xff=\xee\xe0\x8e?0!c\xf8l^\xd3ar\xf8\xb6\xed\x8e\xc1;|v\xae\x19\xbc\xc3D\xfa\x8e\xc1;|p\xef\xec\xdf\x92k\x85 \xd7\x9d\xfd\x10\x00\xef\xb6\xcc\xf7\xbb\xf2\xaf\xbb]\xd6\xcfC\xe9g\xda\xe6]\x96uY\xd8a\x7fd\n\xb5\xf2\x94\xb34K|7k\xbdj\xbe\x8e\x9d\x84%\xec\x0c\x0b\xdb'\xe7^\xe9T\xbb\x8a\xe4\xf7\xf9\xeftf\xf2\x90\xa7\xae\x13\xf3K^Q\x93\xcf\xf0\x838J\xb2\x94\x9d\xa9\xf6[\xeeTw\x11v\x99\xdfeN\x97\xe5\xec\x0c\xcb\xaa\xdd\x88\x9fh\x84\xcf\xc4Qz\xc99x\xb5\x02\xf5\xfb\xac\xfd\xf2,;sF\x14H\x13w\xc6\x1d:\xc9R\xe4\xf1\xc5\xac\x9dup_\xe2\xd7\x8f\x12\xd6\xce\x8e\x1e}\x95e\xec\xbb,}\xd5VF\xb7<\x07-\xb7Cfo\xbe\xc3\x12\x9e\xe5I\xc8\x8e\xcc\xbdZ\xdb\xc8\xcb\xf3\xb2\x91\xd0\x14v\xd8\x19\x96\xb4\xa36\xb4\x98\x06\xbe\xcb\xdb9;\xca\xe6\xc4\xeat:]v\xe4\x08\x9f\x89\x9d$\xe5\xc9\xcc\xd8 |\xcf\xc9\xf8\x9a\x1f\xee\xb5\x9d\x0e{\xe9%\xd6\x96+!\x16\n\xea\xf0\x99\xc0\x0f\xf7\x96\xa20\xe3a\xc6\xce\x88e<2\xdb\xb1\x8f\xe7\xb4\x1a\x8bhGV\x17K\xc0^\x13\x7f\x9fa\xf3l\x81eG\x8f\x92\x8aw\xc9\x173\xebo\xd5\x97\x93\xeb\xec\xb33lV\xad\xb4\xe8\xf3\xc4<;\xd2\xb4\xa0\xa2\xcc\x91v\xc8\xbe\xc7^\x11\x7f\x86\xec\xbbl\xeed\xe7\xd5\x0e\x19\x81XX\xebd:j.t\xfe\xfe\x83\xf4\xe8\xf1A\x97\xb5X\xab3\x93E\xf2\x0eg\xc9Iy\xfb\x85\xe0\xf0F\xef\x16w\xb3\x19\x8f\xf7\xfd\x90o&Q\xcc\x93\xec\xb0\x9duY\xeb\xe6M\x9e^\x8a\xbc<\xe0\xad.\xc1\xd6 \xe7\x0b\xec\xc8l1\x82N\x97\xc9V\x9c<\xc8\xca\xd3\xac\x99%\xc5\x147\x1a\xc5Q\xc8\xc3,]`\x8en\x89\"\xfb~\xe2\xc4K\xa5\xa2y}\xd14s2\xbe\x19\xe4\x03?L\x17jXA\x1as\xb7\x0e\xc6Tw\xdb<\x90\xb9&\xd2\x05\x96\xd0^\xf4/-J\xf9\xd6Bw\xedu\x9d<\x1b>\xc7\x08\xa2\xe7i;r\xd2\x13Mm;r\x8f\xd2\x05\x96\xd6\xcf+\xe1^\xeer\xd1\xb5[\xbf\xd4\xfaWZ\x84\xc0>P\xf2\xf5n\xcd)\xbcK\xe9l\xdc\x0e\xdb'\xe7\xe7;\x16\xc9\x14@'0\xc87\xa0\x93\x18$\x88W_\x82NaP\xaeA'H\xadT58\x7f\xe2e\x0c\nt_'\xc9\x08]\xdd\xe0\xc9\x13\x9d\xce\xab\xdf20}JX\xbf\x9e\x1c\x08\x02\xc6g\x8a\xc3\xc8^c\x9c\xd96Um\xce\x02\xe3u+j\xe98\xa6\x1d\x0b\x92Mz-\x88t\x95\xd4j\x0e\xfeGw)\xbb \xf3 `G\xce0N\xe59\xc9P$\xcfc~\xc8xG\x93\xa18\x89\xb2(;\x8c\xf9\xcc\xd0I7\xf6CM\x90f\\'\x08\x04Q\x0bA\xd6\xc9\xae\x877\x04S\xb9\x1e\xde@|N\x0d\xb3L\x8b\x04-,-\x02\xfbF\x90J?\xdd\xdew\x06\x03\x9e\xcc\x0b\x8e7\xe3\xa7\x1b\x8b\xdb'\xe4\x9f)O\xc6\xb7\x1b(\x82\x103y\x91\x942\xc5#KtY.\xddJ\xa4\xec\xaa\x93\xe6\xc7\x03&\"\x99\xb0\x90\x00\n\x17^l\xb1\x97{fz\xaek\xcd\x03\xcc\x9f9o0\xefp\xde\xa4=/2+vD\x00\x01 \"\x80$)Y\xd5}\xb0\x96\xad$\"\x10\xd7\x1d;\xf6}'a\x00\x9b*\xfaf\xe7\xbe\x92\x1bl\xbf\x0d\xf1\xed\xd6\x8e\x12\xc6}-\x8cW[\xd1\xde\x07]=\x1d\x13W\x0d\xd8;#\xc5\xe1U^\x10z\x91R\x1c_aP\xfc\xeb\xbb\x9c6\xa2&\xday_\xf6\xa6\x0b!\xdf\x16\xc7\xce\x1cz\xec\xcb\x85\xcdc\xa7\x851\xd5\xf8\xec\xa3\xcc\x94\xf7t\xc8\xb0/\x9fq\x03\xf4\xc5L\xd94s\xb7\x89\x85\xf1o E\xe3\xdf\x12\xfe\xc6\xbfk\xdc\xce\xfe\xac\xd0\xfe\xddLI,e\xffvUw\x8f\x91C\x1d\x82\x83)\x84\x13\xbcXn\x86\x7f\x95\xb8\x17\x87\xed\x85\xf9K\x1f\x89\x15F\xfe\x18\xcee=\xbd\xce=\xfb\xb9MP\x0c\xed6\x93\xc4_\xbf?=#\xe1\x9f\xa3\xe4IY,\x92,\xfc\x99\x18\x88\x8a\x9cR\xd1JZ\x9e\x96\x8c\x1e\xa8Hy\x05!\xe2+ \x91\xd2D\x88\xe4\x9f\x86\xd8\x16\xbf\xe8\x84#\x0d\xaan.\x95-\xee\xceP\x7f7k\x87.\x83}\x7f\xed6\xccvq\xab\x8c'\xdc\x01\xc2+>t\xdf{\x11\xe6\x85\xd3\x06\xfe\xeav#q\x91]\x1d\x92\xbf\xdb\x8e7O\xb2\x03\x7f\xb60\xcc\x0d\xa4[\x93\x1d\x06\xbe\xee\x0e\x1d\xc7\xd8Q3\xa2\x14R\x8a\xe9\xe6\xb1\xba\x14u\x0e\xd3\x91\xa6\x94\xe2\xdf\x92Q\x01\x94\x0d\xb1\x14g\xd8J(\xcb>\xb6P\xbe\x84bn\xfe\xc1c\x7f\xf6}D\xf7|\xd2\x04\x00m\xfdk\x0d\x03\x11#\x03\x92\x96\xf9\xc2\x8e\xc9\x05\xf8\x14\x81\xf3\x1b\xbd\xda\xd6_\xaeQ\x056\xf3\xe6aT\x90l\x00|@}\x88\x18FE\x91-Q\xd6\xbdv\x1cG\xc1v8.X\x8b\xa2H-\xfc\x14!\xd7\xf2\xd3\xf0\xcf\xe4J\xbc\xa1\x84\xc2\n\xc3/;\xfd\xd0>\xe2?\xc8\x7f\xadt\xe5*\x99\xbfJV@o\x8d\x8a\xad\xf2\"\x12\x9f\x15\x0b&2\x7f\x92e\xfe\x95\x9d\xc1c\x18\xc1>d\xb0\x01#\x98\xc0\xa6\xe3\".\x18=\x82\x10\xbe\x82\xec\x11\x84\xeb\xeb\x0e$\xd3\x90V8\x96[\x9b\x86\xc7\xdd\xcd\xa4}\xfaws\xd9\x97\x155\xe3\xd3\xcb=j1\x8b\xd3\xe2\x98\x92\x8b3\xbf\xb0\x13\x87r\x93mV3\xd1^\xff\xac\xe0\xf7\xbf\xff[\xf2\x8c\x9a\x9a\xbdK\xa1\x82\xdc\x06W\x1f\x0f\xe3\xebVe\x91\xef\x84\x8d\\\x99\x81\xbd3\xd6y \x03+\x13%\xf5\x86\xa1Z\xa7GB\xa0\xd5\xe4E\x1d\xde\xd6\xc8\xd7\xe6m\xbev\x18\xf1\xb2\x12\x8f\xe3\xf6*#\xccK[\xe1\x9fB\x89\x7f\xe2\n\xff\x14\x1c\xff\x14\x12\xfe\xc9\x18\xfe\xc9\xe0+(\x1eAF\xf1O<\xcd\xba\xf8'\xd3\xe0\x9f\x04Ug\xb7\xc6?\x127E\xf1\x8f\xdfB/1\xc59]\xd1\x8e\xe9\x88\xaf\x84\xd7?)+E>gV\xa9\x8b\x07\x99\x0e\xa2\xa3MH\xaa\xa2\xfb*N\x88\x15u\x98\xa4Z\xa9\xf1P\xaf\xd4\xd8T)5X\xd1H%\xcdcEz\xa5\xc6\xd6\xef\xab\xd4\x10\xbfd\x91\x7f\xb3\xa1\xa7~\x14\x9d\xfa\xb3\xf7\xf9\xa4&b\x9as\xf9\xb6(\xd2'\xa8\x88\x8b\xd4\x15\xde\x12Lc\xf5u\x12\\Mj\xfa\xbcY\xe7\x90a#\xad\xfa\x92\x97?M\xe2\xc2\x0f\xd1\xdfL\xa3\xbc\x94:;\x08B\xf4V\xc8\xd55_\xa7\x84%\xff\xa9\xfa\xd6(\xe9\x12Q\xf1E\x18\xbf\x9f@(j}\xe6\x87\xc3\xb7c\xbb\xab\x9fKxI\x07\x90C\xbc\xbe\xec\xd8\xa6p\x8cUF\x14l\x91\xa8XQ'\xf1\xd1A\xb4\xff.%\xa8\xf5B\xc0\xedr-\xb1\xb8\x18*ex\xb7\x0e7\x0cI\xc9\xec\x8d_,\xba\xe5LJbU@TA\xa6\xa5\xb0)\x0b\xe7`\xaf\x15\x95\x1e\xb0:\x03\x9cH\xe0\xe9ul+O}J\xf5\xd0\xdb\xc4\x05\xebU\x02\xd5$\xda\xcc4\x9d'SI-\xfd\xb4\xa6-z\x94@\xda\x8e\x83\xf0\xbc\x03e\xe2yO\xae&\x12c\"\x9ekW\xdf\xdcb\\\xcd\"\xc6\xeb\xaf=\xc8\\\xc7\xaa\xf1\x81Z_|\x91\x91\xb9\x10\x13\xecc[0\xb9\xd9\xf8A\xcc!W\x16_\xab\xc6\x17\x99XI\xba\x9b\xf2\x00\xa3jc\xe90\xd5\x8c-\xf0=\x9bUR\xaaa\x02\x83\n\xf7LZ\n\x0c\xf9\xd1q\xd3\xd0\xbf\xf3\xa5\x0b\n\xfe\x94\x98\xd6\x12pX\x13\x98\x99\xc5\x01\xb8\xe4Q\x8f\xc8\x00\xfd\x86,s\xa5%)\x16I\xd0\xdbV\x8a\xee1=\xa2\x15q\x9e\xe9=\xc3\xd8t\x17r\xba\xdd=\x12\x99(J.\x8e\xb2\xab\xe7\xc5\xeb\xb2\x98\xb4\x8d9\xe5\xe7Z!<\xd0\xbdo\xbfko\xe3\xb0C\xcb\x8eY\xfey\x194uo\xa3Pu\xe7\xd0\xcb\xc8\x0e\xc5\x9d\x13\xf6\xdf9\xe1\xe7}\xe7d5\xf1\xa1\xbbu\xa4*\xdf\xd3\x85\xeb\xd6\x0b\x07\xdfNX'\x9e\x87g\n\xa8/\xab\xfb\xabb \xba\x95\x98\xb1\xf8<\xee\x96D\xec\x0ee\x06\x84GW\xa9b\x9c3\xac\x12\xe6\x07\x97dV\x16\x8a\n\xf3\x9e+4\xc5\xf2$~\xba\xf0\xe33\xc5\xf7\x01\x82\x8d\xf5\xd2\xcf\xde\x07\xc9E\xac\x92?.X\x95e\x12\x90\xe8\xe0\xd2_\xa6\x11QU;g\xd5:\xb4\xa1\xaa\xee\x12\xb85q\xc1\xe4\x01\x01\xc9gY\x98\xd2\xad\xb7*]f\xf7\xb3\xb3\xd6g|\xe9\xf8'\xe4\x02\x12\xefu\x16\x90\x8c\x04/\xfd\xb4y\xce\xe9ZG\xb4\xda\x99\xf7\x9e\x08\xe1w\x98\xe5E\x9bu\xa3\x80v\x05{p\x86]\xa8\x90\xd6)\xec\x81\x95\xe0)fw\xd3U\xcd\xef\xa3\n\xdar\x81\xc9f\xdb\xb6?H\xa2\\\x19n2\xbc\xf5(\xeb\x1b\xce\xf0B\xba\x97\xcc\nRl\xe4EF\xfc%\xbf\x08\xe9$\x98\x91k\xe4\x85q@._\xcfm+\\\xfag\xe4\x1e[\x88N\xa1_\x06a\xa2+<\x0f\x03B\x0bu,\xf0 \xdb\xd6\xe7qZ\x16*m\x03\x9f\xcb\x0c\xf6\xeb\x0b\xae\x85DOt7\x1d\x93f[\xf3\x90b\xecK\xf3;\xc1\x0e\xa1\x82V\x98t\n\xb5\xa3)\\lL;(.'\xd0\x8f*/\xae\"b\xb2^\x07\xf4\x1a\x880\x98\x07\x1d\x9d\xb6b\xf72\x026F\xeb\xdf\xfe\xf5\x8f\x96\x90}\xdf\x14\x07\x81\x0e:NN\xf0p\xea:/]\x88(\xc0\xdf|\x85\x1a\xbdfI\xba\xc1O\xb8v\xba\xf6\x17\xfc^p,\xe7#L7 iFf~\xa1\xdb\x0b\xca\x95\x0b\xbcQ\xd5\xa4\x97\x82\xfc\xb7\xd8\x0d\xd3\xf8nw\x88dj\xb8w\x9c\x12\xe1\xec\x1a\xa9\xb0\x06+\xab\xabta\x1a\xf6<6\xf2\xfeA\x98\xa7~1[<\x8f\xc3\"\xf4\xa3\xef9\xcb\xaa`J\xc4\xc3n\xff (\xf8\x12\xf1H\x13\x9c\xa0\x9f\x94\x05\x1b`\xc1\xbaz\x01\xb4\xcd\xc8\x9c\xde\x04B}E\xcehs\x13\x06\x8a\xcf\xe7\xb0\x0f\x01L`\xae\xffhU*\x15\x18\xa5\x8azu\x83\xfd\x86z\xef\x9d\n\x1f(\xa5\x1dZC<\x18p\x07\xc9 \xb24\x9d\xfd@\x05'yRf32\x81es\x04\x86\x83\xb2P5\xd3\xbbW5K>\x01_\xc1p\xcb\xfc\xf8\x04\xcan\x0dr\x99\xfaq\xf0\x8c\xa4\xc5b\x02#\x85t@\xf0\xdbJ\x01\x9c\x80\xda+a\xb8\x83$\xac\x02\xf8jA\xd8\x9c \xc2d\xe2WQ\x9f\x13&z.\xe4\\w:3Y\xfb\xa3!\x12j M\xd5\x15\x90\xd58B\x96L#\x06\xec\xdd\x19\xe8]\xe9 \xefz\x8c\xa7\x15\xe9\xa2\xad\xd2\x90\xbc\xc5\x14\xeb\x95\xb0\xaf\xad\x9e\x18g\xcc\x89\x9d\xee\xed\x05B\x98\xc8\x996\xedh\xd2L\x12\x03VJn\xf8\x17\x0b\x8dW-\xfa\xaf~\xb2\x19\xff\xd4\xd4\x81\\\xc9zS\x818X=f\xaf\xf2\x83\"i!\x04Y\xdbCQd2\x87Z\xd1nY\xbd\x8a\xd1\xc2\xcb\xd3(,l\xeb\xc7\xd8r\x86)\xd3\x15\xad\xc4\xf0\x186a\x9f\x1b\xb3\x11X\x87\x91\xe3\xfd\x94\x84\xb1m\x81\xe5\xc0:\x14`V\xe0\xf2\xcat\x10\xeaM\xa3\xb8\xaa\xa5\xa9\xf5\xc5\x06\x8d\x1d&/\xfa\xe5z\xd8\xb6\xa8\xa8\xf3\xe6=q\xdc4,\xb4#\xafF\x91\xb2\xe5#\xef\n\xf6 \xc5\xb7\x9f\x1b\xf13S\x918 /\xe8\x908!/\xe8\x908>/Pz\xbb\xcfT$N\xce\x0b:*\xcf\x88\xdb\xe9\xd6c\x9d *gf\xa0rf\x9f\x9e\xca1;e\xf6P9x\xa5\xbb=\xc2\x90U\xa1'L\xce\x18\xd3\xd3k\x88M\x9f\xd0\xcbI\xc1\xbe\xaa\xd5Hx\x06\x14gY\xee\xe3{?\x0b\xfd\xd3\x88\xa0\xc8c\x85\x0e\x85R;\xec#\xc8bn\xb3^(\xfa\xd3\x7f\x951O\xfc2\xcbH\xcc\xbf4\xd3j\xd5\xa4\xcfH\xf1\xa4(\xb2\xf0\xb4,\x88m\x05~\xe1o\x9c\xf3>\xfb\xe8\xac\xe6\xc2\xa9\xaf\x06K,\x8d\x05{\xd5\x8d\x82\x91pb\x83\xa9\x0e3\xa66\xc68AZ9\xd1\x97\x9f\xfb\xd1\x04|e\xf1\xb5f\x8f\xabE\x1f\xb4\xa3\x8c\xe3\xc0\xddd_R.\x97\x04\xac\x85\x8e\xe9/\xef\x04\xcd\xdc:\xdc\x00\xfa\xafh\x90\x08\xb4\xbd7T\x9cE8\x8c\xb3\xa8\\\x8b\x9f\x85\xc1\xcb\xa4\x8c\xdb\xc9\xff\xe0\xa32\x19\xdcB^\x0d'\xa4 \xbcH\xf9\xd3\x96\xebcZ\x08%>#\xc7\xcb,\xb2\xfa/^\x15Y\xd7Z\x8b\x1f\xc2(zKf$<\xc7\xcb2\x1f\xb0&\xbd\xa7|\xc8\xa2\xc4\xb2sJ\xdf\xc9^\x15\x1f$\x955{\xe3+\xf5\xdaS\xba\xaf\x1eqk#\xd0\xb5\xab\xf9\xceD\xc4\xd1\x15@/\x19o\x1e\xc6\x81D\xfc\x0d\xa4\xfc\niwyl\xc5F\xdf\xda6LF{h\x8c\x11Vdl\x0b\xb0b\x15`\xe9\x1b\xb3CVO`\xc9\xdc\xaa<>\xa2\x96:zu\xfa7\xb1[\xf3\xc5o>|\x80\xac\xc7\xb0\x11$\xac\xd9n\xa2\xf7Cf\x92\xda_\x0fqj\xa1P\xb7Zz\xe6\x0e\xd4\x08\xb7\xa7Ha\xb31\xf4`\xdf\xa9\xf8\xc4\x8c\xd3\xee\xfc\x98\x0f\xdc7\xcd\xe9\x1e `9\x98\xcf\xc9\xac\x08\xcf\x89\xf8\xd2\x88E\xd0\xfb\xaa}\x92{\xd5\x1d\xb2k\x94|\x92MgW{\x82\x06\x1e5\xb3\x04\x87\xc7\x14\xf4\xf2\xf0g\x0d\n\xe4c\xceo*\x14\x91\xd5|\xc2\x13L\x0d\xd8\xae\xbe\x93\xc8?%\x91\xb1\x9bE\xb1\x8c\xbeA%\xf3\x8d;aa\xd1\x8c\xbd\xd4\xea\x03\x04\xf0&y\xad\xeb0fT 3\xb7k\xda\xa2\x98\x00\xa6o\xe1\x13&p\xeb3\xa0\xe6g[\x8693:C\\!W\xd7\x03\xa7\xdb\xa8\xa7\xb3G\xf6\x8a\x841N\x8e\x905\xf5\x00\x1374\xbe\x0b\x88\xa3\xb4LY\x90`\x83\x8eP\xb7A\xd6S^\x0b\xde\xbd}1\xb1\x0c]7Dg\xa1\x9d\xe1\x8c\xb4\xb5\x17\xdb\xb5d\x8b\xd3\x0c\xd2y5|\xd8\xb4s\xd2Wk\xd89\xf9\xab\xdd\xa9}\xe0\xd5c\x89\x03z\x7f\x0d\xf1\x98\xce\x1a\xda\x06\xd4~\x1bC\xea\xf1\xdb\x95\xc4\xe5\x12\xcd\x11ns\x8e\xe9\xd3\xe2\xe8z\xaf\xf9\xfa\xec\x13\x13\xcfkZ\x8e\xc6\x14V@\x050`\xbf\x06\xa2\x03\xa8\xe2?\x92`B/\xf3\xbd=Hl$\xa6\xfa\xa9\x1c\x86\x1a\xfa\xeb \x9cc\xacH\xb1\x87\x89\xfaq`\xa2\x9fm\x88\x96\xb8}\x93\xe5\xa6\xb5\x05\xb9T\xf1s\xf2\xc3G\xccW\xa2\xcf&\x0e\x86\x83\x83\xb9\x91.\x0c\x9a\x16D\xeb\xf0Q[Ctj\xf4\x88[\xeb\x05\xee\x13\xbb\xce\xf1\xed\xe7&v\x8dtb\xd7H'v\x8dtb\xd7H'v\x8dtb\xd7\x88\x89]\xebQEL\xc0\xaa\x12\xabF\x9f^\xac:\xbb\x8dXU\x12\xac(\xa4\xa7]\xad\xadVy\xdc\x92Z\xdeJy|+\x11\xcf\x9dr?}\xbcM1\xc4)F\x19\xe9\xa3\xa6Q4\xb7\xa5\xeb\xb5\x10\xb2\xa5\x98\x81I\xdbMk\x1f\xa1w\xee1+\xa4p~\xe5\xd8\xed:\x15\xd2\x17\xb0>GI8\x962\x0fE4\xe5a\xf3\xe8\xe3\x9d\xb9\x8b\xdb\x0fYX\x90\xd7qt\xd5\xc0\xbc\xedG\xa7\xabp%\xb0\x1f\x0c\x08\x83\xa1\xb7W\xcc\xc0\x80\x96\xe9\xee\xaa\xd3g\x02\xd9\x85\x1f\x07\x11y\xbd\xea\x88[\xa0;\x14\xd0(\x10\xdf\xfb)O\xe2{\xa1W\x90\xbc\xb0\x0b\x16\xc0^\xb6\x1d\xe0yf`2\xc8\xa6\x00VY\xbe\xf6\xe17m\xaf\xbc\x91vlX\xc1\"9;\x8b\xc8\xf3\xfc \x08\x8b\xaf\x93K0$\x99\x91\x1f\x19\xbf\xb2\xb1\x0f[y\xe9\xdb~\xb9W(F5\x815\x8c'\xc0\xfe2~\xa7\xb6\xc0\x84\x1e\x98\xc7\xa46\x9d\x08W\xf2#\x8fE\xe1|!\x9e\x0e\x82\xd6W\xe5\xa7A\xa3p\xa4\xc3\xea\x14t'w{f\x1bV\xb2\xa9\x80\x15\xf8o\xfa\x08\x05u\xe3\x16\xaa/\xf1\xc1*S\x1d\xf6[\xdd\x02\x02V\xb1\x82\x001\x85\x16\x9e\xe0\xb6\x04\xf5\xdf_~\xa9\x9e\xaa-Ur\\X\x93\x1a\xab\\N\x18\x11\xd8\xf8\xb3\xd2\xeb\x0f@\x0b2d\xae\x8e\xf1o\xbc\xd4\xcf\xc2\xe0]\x1a\xf8\x85.\x08\xc2M\xd7X\xa2\x11\xf8*\xcbo\xb4\xeb\xac\xda\xa5;\x9a\xb2V\x10\x05+\x1e\x86a\xeaxXA%\x0f\x15ie\x88\xb6\"?\x99P\x9f\x0f\x101A\xa5\x9f\x1fx?\x86\x98O\xce\xfa\xba,\n\xb3c#p\xba+\xb3\xad#rY<\xc9\x88\xd2\x15M~JV}\x11\x9e-\xa2\xf0lQ0\xb0\x9a\xf4T\xe1\xee\xab\x97\x9ef\\zz\x13W\xe0\x81\xd2\xd3\x94U\xcc\x0c\xa3@\xf2\xad\x8f\"\x1f\xaa\xf0\xd5SK\x91M\xcer!9\xee\xd9'\xc7\x85s\x13\xa3a-vk\xab\xe7*o^`\x19XS\xbfo\x99fC\xe6%b\x11\xa8\x82R\xf4\xcf\xe9\xc6c\xab|\x13\xf8\x94\xdfqH\x9bX\xb8Rz\xfe\xb4\x15\x01\x15,\x17\xce\xf1_\n\xa2\x06 \x83y8\xbd|\x1e\xacd\x17\x0b\x9ck 3\x12\xe0\xed&\"b\xf6~\xc5\x08\xa2\xfa\xe0\xf5\x7f\xd1q\xae\xe8\x91\xc7\x00\xdb\xbb\xbb\xdc\xbc7~\x9e_$Y\xb0\xf2\xe6\xfd\x11\x9fO\xb1w7\xdb\x0d\xbf,\x12z\xddG\xa4\xa0\xbb\x12\x93\x8b\x8d\x94\xcfu\xc0\xd7\xb1\x08\"8\xf8\x0b\x0ea+|q\xf3\xdd_\xe8\xfdkz\xc2z\x88\xa7\x07\xdd\xe7C\xf6\x85>\x84^\x9e\x83,\xe4\xa1\nf\xda[\xd5\xe0\"\xc8\x8a\x0dF\xf4\xda\x12\x11\xb6\xe4\x94\xf8\x19\xc9\xf8\xbdj\x82\xf7\xdf\xe9\xc6\xc3\xe1\xdd\xea\xca\xbb\xf1u\x87\xd7B\xf0\xd9]u7\xba\xe6\xee\xf6\x8ac\x16\x89\x16.\xcf\xe7\x86\"\x87_m\xab\"\x9c\xbb@6w\x81h\x86#\x99\x01\x08\xc6\xe8\x7fl\xda\xa9a\x08\x81,\xfb\xeb\xd4\x11\xab\x12\x0c\xf6\xfe\xed\xd1\xd1\x1b\xccLK\xe2\x82\xcbR'P\xc6y\x99\xa6IV\x90\x80IR\x08\xa5\x97\xac\xffh\xc1:\xa4\xb0N\x7f\xddN\xfc[\x0f\xaf\x16\x017W8\xed\xb3e\x919\xf6.{\xd1\x002\xb9)c4r\xc6\xab7-\x98\xf4\x1b\xcf\xb4\xab\xccLH_+D\x0b\xb5\x1e\xd5$3c33\xf1e\x95\x82\x92\xaf\x1d\xcf\xe9\xc3\xc4e\xfd\x02$w\xb3\x00\x9d\x99\xa8\xb2\x92\x1b\xb3\xbe\xd1;'O}J\xe3\xd6\xab\xa7\x96\x1e*s\x9d\xd1\x01\x9d\x99\x00\xca\xb4\x9cd\xc8r2Q\xbby9\xd9\xc5=h9\xd9\xeau\x86l\x17\xd5\xec\x15\x06\xb7\xf54\xe5\x15\x87\x9e\x94\xbf\xe2\x11\xa4E\xefT3\x96g\xbe\x17r\xe2\x95\xa7*\x0f\xdbp\xdbK\xd0\x90\xd5\xd0\xa0\x1fL\x15\xe9G\x0d0tM\xb4k\xa9r\xbc\xfa\xf4\x07q\x05LT-\xa7j\xe4\x03\x82\xc8\x19h;\xe5)T\xc7\xa9Q\x07\x8d\xcb\xebxn\xd2\xd5\xe17\x12\x08B\x87\xa0\xba\xbd\xfa\xf2ws\xf6MZY~\xfbp\x03\x85\x82\xde\xaaYGW\xa7\x06 \x96\xf7\x95R>k\xf1\x80$\xa1\xe7\xbc\x8d+u\xe5;pKo\xea\xa2\x11[p\xb8;t\xdb\xa1\xba\x9eT6(\xc2\x9b\xd6\xa3Z4\xa4*U\xef\xfe\x8d\xe2Yw\xe5J\xffhB\x83\xed-\xbd\xd4`\xab\xc3\xd3\x87UQ\xc7\xad\xd9\xaf\x8a\x1e\xe8d\x07\xdb[\x0fu\xd2\x83\xedme\x8ckV\xf4yX\xf2\xc9\xfb\xd9lHX\x8dHym\x9aSyR\x16\x8b\xe7\x05YJ\xb9\xc7\x9b\x15\xea\xec\x0c\x93ZR\xd0\xacR\xa7\xa26\xa6<%3\x1e\xb6\xd0\x9ba?\x98\x90\xeb\xeb\xab\xe7\x01\x89\x8b\xb0\xc0\xa06b\x08\x7f&W\xa8*\xc2\xbe;\x8db`mQ\xf5i\x12\xe7\xe5\x92\xe4?0\x01\xd1JB\xfb\xdea\x17\x8aa\x8b\x0eQX\xe0\xd8Ek\xd0\x9a\xe12_\xcf#\xfft\xd0\x00\x05\n\x97\xd2\xf2\xb1\xbc\x0f\xb0\x8f\xd1\xe0z-%\xea\x0f\xbf\x0f\xf3\x10\x85'k\x9bj*\x8d>\x14FN\xfd\xd9\xfb\xba\xb2:\x1c\x14\xa2QK\xd4^uP\xdd^\x0cCR\xcd\xc00(FO\xab\xd7\xde\xec\xc2\xa5\x98\xbbzT\xca5U\xf6\xa8A\x1f\xf0\xb9j9\xf4\xbb04z\x04\xd3n%\xf1Qv\x95\x94\x05:\x07\xeb+'\xbc2\xf3g\xee\xa9\x1cr\xbd\x99X{}M\x96\xe5\xd2\x8f\xa2\xe4\xe2(\xbbz^\xbc.\x0d\x96P,\x87e\xc1\xeb\x1d\xc4\xfei\xa4\"\xd5\xc4\x83\xf1\x1f\xbc\xb9A\x0b\x12\xad\x10\x0e#\xa8\xebb\x1ag}\xcd\x05\xd6\x1c\x18L\xf6\xbc\xaa\xdc\x1b\x1fv\xc9\xb6`H(\xd9\xb3\xaa\xea\x80!\\UZ\xce\x97\xa8\xc5\xd4\xd7<\xad\x06\xfb\xc6\xa8\x13=a\xdd\x0b\xad\x8e\xbe\xe2\x05\x86e\xaeQf\x8f\xc3\xd8\x01\xab. \xa5?\xd2\xc8%\xfb\x80\x07\x85;BZZ_\xfb\x90\xd5~Z\xa1\xca\x1e\x0f\xb0\xa7\xac\xfe\xdb\xdaM\xbc\xef\x8b\xf7\xb0\x07%\xa5m\x0c>\x7fO(Q\xe5\x859e\xbe\xf4\xb5^\xc3\x1e\x9c0\x16ArS7\xcd\xee\x0d\xec\xc1\xa9\x97G\xe1\x8cP\x9c\xb51rx\x82\xef\xc6\xf7F\xe5\xdf\x8dS\xad\x1a\xb4oZ\xcd\xcd\xc7\xe8\xacO\x05w'}\x0eP\xf5\xdd\xb8\x9f\xd5\x838T>~\x155\xd3\xcc\x1c\xac\xfdX# \x02\xc5l\xc3\x82,\xc1\x82u\x9e}\x8b\xd9\x93v\xae^\n\xf7\x96\x8f\xaa\x1b]2S\xc3\xca\xac\xa0\x13\x1c\xa6\x04\xd5\xf6\xc4#2W>F\xf5ZQv\x86\x1f\xba\x9a\x9er\x0c\xd9x?\xd1~J\x83\xf9h\xdb\xd9\"\xb9\xfe17\xb3F\xedR\xcce\x17\xcd\x9bu-\x1c\x98\x06J\x18\x0d\xa2\x14\x8b\x88\xa7A3\x193=6H1]r 9K\xb3\xf1\xb4\xdd\x02*\xe5\xf5\xaf\x1b\x1e\x10r=\xf4fI\x19\x17\xf6\xad\xceD\x0b\x1c#2\xa0cmg\"7\xcf\xb0\xee$\xc4\xb8zO\x14\xe7W\xa0\xa6\xaf\x96\x0d\xa8\xb3\x18<\xe2Y\x12\xc1,\x89N\xd8\x85\x03\x8d\xdd\x8aN\xd0IK7\x13\xeb\x15\xbap}\x8aq\xc8nO\xda\xe1<\x93}\xa3\x1c\xe3\xb8\x1a\x99\x94\x06\x99P\x82\x8c:%\x9f \xee7\x9fV]\xbd\xf4S/\xcc_\xfa)\xf3\x17R\xd8\x1f\xd2\xe7\xda\x0e\xa5\x8e\x07&o\xd2\xcd\xe7\xa2\xcf\x8fh\x1e\x1bc\x95@G\xcaj\x88ZB\x1fA\xc1O\xe0\x94\xd1\x80}\xd9\x84j\xb6g\x02\x06\xfe\x80>\x99\x7f\x81W\xe6\x04z\xe2T\xa4\xac\xd6\xa2F]?\x84\xc8\x82\xf8\xb5|\xc9\xbe\xc2\xf4%\xc6v\x98\xdb\x94\xec\x94h\xae\xdf\xcc\x04\xd4\xe7\xa3#\x7f!\xa4H\xf2\x97-QV\xff\xbaK\xb2t\x03\x07%jsNo\x02\xe7}\x8b)\xb8\xb7 \xf4\x04\xd7\xaeBEN\xe0\xbd\xb6\xa2.^h#;\x1c\x06\xd8\xbb\x0b,\x7f\x13\xe31m\xc7i}\xdd\xbfJ m\x90o0\x01\xcbj\xdc\x9bm\xb2\xe6\x8e\xee\xad\x8a\"\xab\xef.\xb8\xcbY\x1e\x1a\x07\":\x9f\xf0\xb0\xe2\x98Z\xb2K\xb8\x1a\x0e\x8a\x8c!\x14,c\x1f\xc1y]-\xf5\x13\xdb\xa1\xa4\xe2\xeb:t\xab\x9e9\xb8\x93\x95\xff\x87d/oJ\x0f\xd7\xe0}\x82w=\xa3\xda_\xd7r\x01\x8c7\x80; \xfd\xa9\xbd\x81\xb9$\x03#%\x1a \x83\xa6\x87\xb1\xae\xda\xa5iN\\\xe6y&\xe2\xfb>\xade4\xdc\xff\xe8\xccmk\x8a\xafL + y\xf2 \xf05\x10\xe9\x00\x1c\xef=\xb9\xc2\x1b\xdfH\xa8\xf3\x8b\xa1_\xd8/\x9e\xa5\x97\x93\xe2mg\x06\x03r\x1c\x8bh\xf8fd\x0dm\xdcn\xacmr\x0f\x1e\xc6\xfeI\xd1<\xf9\xd2m\xa0\x06Zw\xcaM@r\x93\x83t\x17\xb8\xf1\xa9\xd1,\xb7Blo\xf4+\xd2\x08\xfc\xf8zP\xbd\xef[\xe0\\\xbd3\x01s\x9d\xf8\xa1/\xf9\xaf|i\xaf\x06\xc1\x03\xdc\xdc\xb5\xa6T\xedG\xa85W\x9be?\x84\x03W0\xcck\xea\xdb\x8e)\x0f\x19C\xe3\n3D\x9d\x12\x0f'\xb5\xe5sY\x0dr\xc0\xa9\x84\xd5h)\xf1\xf0\xc3\x9c\xd0^\x9f\xc7L5\xd4\xfba_\xa4\x90\xc1\x88g\x95 ~Fh\xa7F\x97\xab_\x03Z|t\x03\x8bo\x95\xa5\xf7\xb9\xe8M\x1dD\xb6%\xa9\xe9\xcb\xb5\xd4\x12\x01\xf5Uoi\xb8\xba\xda\xcd\x86\xbe\xac\xab\x92\x95\x94\xdb\x13\x98\xd6!SZ\xf1h\xe9\xaa\x06\x06\x1b\xaf\xf3\xcf\xd0\xa8\xc6e\xa6\x0b\x1d\x03\x16\xcc)\x95\xc1\x1e$H\xecdM\xd3\x91\xccl:\xd2\xf4\x93k\x81\xac_[\xe8\x89W\xab\x98)\x0e4\x94SZ\x83\x85\x83\x84\x9a\xbaZ\\?\xadod\xe9G\xea$\xedyq\x15\x11\x9de)%\xfb\xcf\xb2\xa4\x8c\x83\xa7I\x84\x19\xdc\xff\x7f\x0f\x1e\x9e\xce7\xb7\xbb\xf7t\xeb\xe4\x19\xc6\x92fj\x19\x9dL\"\x9c3\x1bx\xab\xdd\xa8E\x17\xdf\x92O\xfegj\x0d\xd6\x03E\xd9\x10(\xd2\xd8K5\x0dj?\xcf\xe9\x07\xdax\x16\x81\xce\x18.\xd0\x19\xc3\x05:c\xb8@g\x0c\x17\xacf\x0c\x17\xa8\x8d\xe1\x82\xda\x18\xae\xebd\x93r\x0f\x81-\xa5\xb1[\xf0\xe9\x8d\xdd\xcc)\xfe$c7\x15\xed'\x19\xbd(L\xde:\x9e\xc2\x83M\xdbn\x95Q\xf8\xf31\xbf\xe93\xae)jO\xe0\x1es\x11JPO-t\xde\xd98M.\xadc\x03}O!L\xeb%\xcc\xd7i\x8d\xf9M\x88\xe0\xc2\"\xeeX\x9a\x91\x99_\x08i\x80\x1dsI\x8e\\\xc0.\xd7>U\xda0\x86\x8e\xcd\xa7n}\xe3\xc2\xcf\xe20>3\x89\xffE\xdd\x89uW|e\xec\xfd\x94\x84\xb1m\x81^\xe8\x91\xe8{J\xbd\x97t\x16\x1d\xfa\xf3\x97kW\x86\x01\xc3Pd\xb9\xb9\xc9\xb6\x88\xa4\x94#5d\x0b#\x97\xa9\x1f\x07\xcfX\xbd\xbaoOzO\xcf\x9b:\x01\xd4\xcd\x1c!\xfb\x1c \x19_\xa6\xbf\xb3\x16\x9f\xe75\xf4\xef\x0e\x1a\x9f\xad\x83\x86\xc15C\xaf\xa8\x890\x91c\x97\x89\x02~\x93\x87\xde<\xc9\x96\xbe\xa2_\xee\x92\xc1\x03\x9a\xab\xfd1\x84K\xd7\xda\xde\x1eD\x18\xd9\xfb4\x8c\xfd\xec\x8a\xbd\xc1\xecB\xd6\xa9\x9f\x93\xddm\xf1F\xef\xa9\xc1@_\xef\xd2\xa0\xf4\xe4\xe0\x01\x12\xe7\xa12\xdd\x90\x84\xeaJ\x1eS\n\xf6\xc1\n\xe3s?\n\x03\x8b\xc9\xe0\xbbm\x86E\xd4\xfc\xa2\xd4\xd4\\E$\x9a\xdbU\xcaK:\xda|\xba\xa9\x08\xd2\xaf\x90\x07\x04a\xce\xd9\xdc\xc2\x0b\xf3g\xfc\xaf\xe6a\xf8\xcch{\xb7\xca\xbd\xdfL\xef\x0duR~\xe1\xe8\x9e+\xde\xd5u3\x92\xa7I\x9c\x13I\xea\x01R\xa6\\\xcd\xebJ\xde\xc3\xdbnEN\xd2\xb9\xcb\xc6\xf6}\x05\xd6\xd3\"\xb7P\x8b\xdc\x8c\x84R\x15\xf0\xacP\x06<\x8b\xab\x80g\x94\x88\xccX\xc0\xb3\x0c\xbe\x82\xe2\x11d\xeb\xeb\x0e\xc4\xd3\xac\x19\xf0,\xd3\x07<\xab\x15\xf0&\x92\xadJzwx\x95\x17di;M\xdb\\\xfc\xeb\xbb\x9cN\xc7HW1Z\x96\xd9e:v\xc6r\xbf2j\x96\xad8?\xde\x0d^L<\xad\xdb\xf6\x0f\xdd_\x8a\x8d\x0c\xcd\xd1J\x854\xb6\x80}\xc0\xd4\x18\xcd\x06\xacc`\x81t\x9b/\x95x\x0e)\xd5\xe7\xb1\x1d\xf3\xec\x05-XW\xc0]kl\n\x03\x88V\xd3Sag\xfa\xcc/|\x8b}\xe22\x85\x03\xcbZr\x8c}\xb78YWw\x18\xee\xaa\xffn\xe3\xa6\x81\xa8N\xeb\xdd\x8d\xa4\xd3\xba~(j\x84\xd2?\x14q\x1eT\xae\xcc\x98\xb8\xa1\xbe\xf0\x84\x0f\xb3\xd6\xc9:\x91P\x9b\x9are~\x00Ul*\xc59\xc6\x80\xa2\xfb0\x0d\x11|;s\xc2\x98\xcf.\xc4\x02\x94\xf5\x15\x9a\xe7\x0bH\x94\x13\x15S\x8b\xbc\x96\xa6\x9d\xa2\xdb\x8ei\x1b\xb3a{\x93\x0f?\xc8\x9f\xc9\xa6\xc4C6\xc5\xbc#\x03\xb7#6n\xc7\n{\x11W\xaa\xb4\xcc{\x9dq\x17\xf5\xd4\xb1\x1d\xe5\xd6t.\xed!\xfb\xe3Br\xbb\x9d {w\xc6\xef\xdb\x99\x84\xc5\xddeq>\xf7k\x84\xe2\x9b6\x8a%#\x17\xa8G_M\xb5e\x08Mn\x9d\x82\xa8\xa7\x89G\x9de\xa3\xb4}\xa2\xbcrl\xdah\xac\xd9\xb6\x81\xb1\xbai\xeb\xa5\x97\x914\xf2g\xc4\x8e\xc9\x05\xbc%g\x07\x97\xa9m\xfdb\xc1:`D\xc6k\xcb\x05\xeb\xccr:*9\n\x11\xa5\x04\x1f\xf8\xf3\xf7\xa5+\x95\xca\x8e\xd2\x8e\xedqG\n\x1a\xf2\x92Q'4\x0fSX\x8c\xb7v\x95T]\xf9;\xb2\xac\x14\xfb\xfer\xed\xb6\xa5\x82\x99\x0b\xbe\xf7\xee\xcd\xb3'G\x07'\x87\x07/\x0e\x9e\x1e\x1d<;9}\xfd\xea\xe8\xe0\xd5\xd1\xc9\xd1\xdf\xde\xfc\xfbZ\xaa\x88\xe0\xd5\x16\xf5\xf0\xcd\xebW\x87\x07\xbf\xcf\xaa\xeadR\xaa\x98\xac=\xeb\x91\xb8\x10\xeaH\xf1U\x16\x84a\xaf\x93\xef\x9f\xbc}\xfe\xe4\xeb\x17\x07w{du$\xc4 \x0c\x16{\xef\x89\xc2\xa8\xc5\x17K\xad\x069 \xef)\xef\xfe\xcc\x85\xd0H\x11b\x05\xe3V\x94.\xf8\xcd\xf5\xcdnq%\xd72\x8fQ[\xbd\x97\xf0\xd7;\x0f\xa4\xfb6\xa1\xcb\x82y\xf4\x92\xec\xc0\x9f-l\xbdh\x01\xe9>\xef^\x18\x07\xe4\xd2\xfb)gr?-\xd5Gw4\xb1U1\"\x88G.\xd3$+\xf2)#\x80R?\x9f\xf9\xd1S?'\xdf\x84\x11\xa1\xdb\xe8\xd8\x85s\x8c\x1b#.\xd1}\xe9w\xdbAH\xba~\x07-\\loo\xefR\xb2H\x8c\x03\xd7eg\xb43\xe8k\xc3\xb2\x0b\x1b\x8d\xad\xb1L\xd0\xd4\x11\xbd\xecU\x0c5*Z#\x93\xa6W P\xdfd\xc92\xcc\x91r\x89\xed\xed\x9d\xfb\x8e\x0b\x87H\x91\xd7\xa65^^\xf8Y\x91\xff\x102\x0dIlo?\xd8\x1d4\xc3\xd8~8FM\xef\xc3\x07\x9dU\xda\xde\x19\xd6F\x1fpno?TB\xe7\xf6\x8e\xca\xc0%\xb6\xef\xb7_3b\xef\xfeHZ\xe9\xe6H\xc7[\xf7\x1d\x1b\x05n.X\xf8\xaf\xd5\x83\x87P\xbbt\x82\xd2;\x9b\x08'\xb3\x13\xda\xff\xa6\xf8\xe3=ES\xf5~\x18\x92x4T\xa6'\n!|\x15\xac\xe0Da\xd7\x18W\x85\xe1\xfa\xba\x12{\xac\x11\xdcTxL\x19\x94J\x9cm\xd7s\x10\xa2\xb9\xc4\x1e\xa1MzB\x0f\x9bE\x0f;\x8b\xd3\xc6\x8d\x0cYZ\xd9\xfa\x1d\x992\x99C\xec\xe2O\x89;\xbav\xab\xcah]\xf3D\x08*Q\xd7\xc0W:\xb3Y\x17\x0e\xfe\xac\xabg\xb6E\xe2\"\x0b\x890\x9co\xc3\x8f\xbc~\xf2F\xca\x0b\xac\x8e\xd0\xd8\xfb\xa5j\xaf\xf9*\xaaP\x17\x8b\xb9\xda\xdd\x93 \x89)\xdb\xb2f\xa6\xfdoy.F;\xeas\xf1\xb0\x1d\x95\x91\x1d\x8b\x87m\xc1\xb6\x8f\x9c\xc6#\xe9,\xeflb4\xf3\xd8\x1e=tl+,H\xe6\x17\x98CV\x0f\xbb|q(,\xd5\xb3k\xa1\x82>y\x1b\xa9\x11\x11\xc6\xef\xf6U:\x9e\x98\\\x16\x142Gn;u\x00\xed.\xc4\xb6)+\x0b\xcf\xaba\xaf\xb6\xdc\x12\xc2Q\xdf\x86[\xbb\xeau\xdd\xd5\xe2\x95\xedm\x07\xf6\x95\x9coHr\xe81@N\xecv\xa2\xa1Jk\x10\xbb\xb8y!\xaa\x07\x90\xda\xadT\x079S\x16\x94\xf0\x18\xf2G\x0ed\xde\xdc&\\\x182\xcd\xd7\xd7\x8f](\xa6q[\x08!\xa8\x8c\x9b.\xd8\xfd\x91\x9a|\x18\xa9!q{g[\xb3duw\x1a8\xab)\x0e\x96wFGQ\x94l%\xf4q-#$9\x84\xcaES U\xa3\x14\x1c#\x05iBI\x1cv\xa9\xc2\xda\x9e\xde\xb5\x117\xed\x11D\xf0\x18f\x8f\xf46\xc0\xb45\x9bne>\x9d\xad\xaf\x1f;\xb4\xcd\xd2\xa9\xcdU:\x1f2\xe1S\x7f\x970[_\xef\xe9\x16\xaf\x87\x19\x841\xe4Ho\xe4\xd3\xd91\x0b+\xea\xd4r\x0f\xac\xf2\xe1\x03j\xa2\xaak\xe5\xcb/a\xa3\x19\xbbhE\x1c'a\xb3]\xd5\xa9{\xe9\x17\x0bo\xe9_v\xc1\x88\x95\x84q\x1f \xe9\x11\xba\xcd\xb0\x0dq\x1c\xf8\n6a\x9f\x9e8X\xa7C\xdc\xa4\x97 C)7F\"\xea\xf9P\xac\xbds'\xc0\xaf\x83\xfc\x10\x83\xb8SHbD\x9eM k\x0d|\xb3#\xa2\xf3k\x8dPp\xc8\x0e\x88B+\xc1\xc6\x94\xe3\xda}\xf8\x009%/\"\x14\x87\xf1X\xb4\x9c\x9a\x9d\x80\x8dr8o\xb6\xf0\xb3\xa7I@\x9e\x14v\x8ek\xbe\xb33~\xb8K\xbf\x0d\xe11\xec\xecn\x8d\x1e\xb2\x86\xd6a\x84\xe0\x87\xb6\x04\xb6\xdf\xf9\x98V`\x0d\xecn\x8d\xb1s\x9f6p\x7fk{\x8b\xf7\xcf\xeacGt'a\xc2\xdf2/\xbd\xdc\xc5N\xc6\xb4\xcc\x87\x0d\xde\xcc:\x1d\xe7\x06\x1f\xd4W_\xc1h\xd3\x81u\xd8\xdd\xd9\xd9\xda\xbd\x1b\x08\xef\xdc\x1f\x1c vu\xd8\x90\x02\x8b\x83\x12e~\xa5\x0d\x8a*\xdc\xbd7\x90\x19\x13\x1f\xb6\xc4\xf0\xc5\"K.\x802\xef\x98%\x1dO\x80\x05a\x0eqR\x00R\x00\xa7\x11Y\xd3X~dv\xc1\xa2\xf0\x11g\xc5sB/\x81\x07\xc88\x8c\xb7\xb7\xf1\xdf\xed\xdd\x87\xec\xdf\xfb[\xec\xdf\x07\xfc\xfd\x83\x9d\x0eg\xb1\xbb\xe9\x08\xaefHg\xbd\x84\xd4\xaejgd\xd2(\x99\xc6\xf6\xe8\xbec[E\xc2N\xd5\x91\x7ff!\xdbi\xfdlQVn\x9d\x82\xfc\xda\x1eX\xd3\x04o{\xf8\xf9\xd8b\x0c\xd7\xfd-\xc7\xe6\x14@\xed\xc9\x00UCV?mU\xb5\x89\xe9j\x90l\xa7\x90i\x1dK\x1ah\x0c\xa94d-\xe4\x85\\\xa3\x1c\xfe\xa6\xc32\xac\xd8\xa3\xcdQ\xbf\x0d\xf5}:I\xb5(\x9f\xae\xe3\x03\x87Y\x1e:.X\xbe\xd2\xfe\x10\x83ik{i\xf7\xd6)l\x99\x088\x9e_\xaf\xc1\xa0\xf9KDK?\x11\xa2\xb8;0)\x0d\xbb4\xc4\xd5\xf8\xa8s\x0c\xd5z0Le#\x9d\xc3*\x02\xb6\xcdTG\x02$\xd8\x86d6\x13U\x89\xf3U\xf5\xa7\xd2\xb0\xe9\x1bE\x1e\xe5\xf5|\xf56\xd7>\xcep\xdb\xf8\xc6z\xea\xc7\xff\xb1\x80Y\x12\x9f\x93\xac\x00\x0e\xe9E\x02i\x16.\xc3\"<'\x8c\xcdZ\x95\x9a\xef;\xf3\xdb\xbbm\xc91\xc3\xc6\xe3\xed-%\xcd:RJ\x15Z\xec\xd3\x03\xc1>\xdd\xff\xef\x99}\xd2\xb0\xa5\xdb\xbb\xea\x95\x1dw\xc48>\xc7\xca\x94 }~p\xf2\xe6\xed\xeb\xa3\xd7\xed\x80\x15e\x9b\xdfo\x16\xb7\xc5\x01\x9d\xf58g\xb9+\x0b\xde\x15E\\\xe1<3D\xc6@+\x0c-5\x84$w\xe1\xa1S\x90\x17\x84y\x1a\xf9W\xf4v\x88\x93\x18\xf3E\xdb\xe3\x9d\x11\x9a\xf5\x938x\xba\x08\xa3\x00Y\xb7\xc2\xcb3\xcacX?\xf9\xe7>\xf3\xe9\x9dXU\x16J\xee\xfb\xf7C\x18\x07\xc9\x85\x17$3\x14\xa18^\x92\x92\xd8F\x18\xb9\xc8\xc2\x82\xd8\xd6W\xec\xd3\xc7\xa2\x8a\xf7\xcd\x1eC\xd1_\xfdx\x8f\x17\xa1j\xd7\x9bEI\x8e\xe9\x0ds<\xc1\xdf<\x82lc\xe3\x91\x03\x01\x89HA \xaf\x01i\x1aN\xb3c\xbdMYn\xb7`H\x8dI\xf9E\xc1,8)\x9dfD\xad\x889\x95tF\\F\x11J\x90)\x15g\x97-x'\x0ecpcrA\xf9\xbef1s\xff\x8aYZ^\x82\xa6g\x98\xd5\xc2qei\xab\x90p%v|+\x9a\x7f\xa46\x1e\xec\x9c\x08\x0e\xf9\xdb\x0f\xf4\x94\x1f\xbd\x98\xff{\x90\x1d\x8cF\x0f\xd4d\xf1\xb8\x8d\xa0\xb9\xf0`w\xd7\xb1\xd7\xda\x02\x075\xca\xb8\xc1\xfd\xce\x97\xa8\xe4\x84t\x17\x17\xe0\"u_Sfiz\xacX\xf3\x98\xf2\xd5\xa5\xc3\xa4\x04>\x8a\xf31%<^\x9b\x91\x88,\xa4\xf8\xf0\x11\x14BX\xcb\xf7\x03\xbf\xa3\xa8\x01w\x83\xb9\xa8\xfc\xa7\xd0\x8e\xb0\xb5\x0f\x1f\xea\xd6\xd4[\x14\xddt\x8b\x1e>\xd4\xac$\x83N\xdb\xfa\xd9r\xd0\xd5\x82\xd2\x81\xcf\xf3\x83\xb8\\2\xbe\xc1\x96`\x18L\xe6\xd1\x82\xd2=\xac\x93\x83\xd0s\x8d\xe6;y\x1a\x85\x85ma\x8e}\xde!\xb9\xf9 \xed@\x95\xd0ti.\xa7m\xdd\xdc{'\xd3\xe0\xd6\xff]T\xf5\xdf\x92\xa8J\x83\xb2\xb6w\xdb\xef\xc3\x01\x94\x8c__\x94\xd5\xc5e\xbcN\xcfH\xf1FT|=o^\xab\x1aX$\x02\x9d\x01fp\x0e\xf1dMQ\x1b\xad\xa2\xf0)\xa9\x90\xc4y\x91\x95\xb3\"\xc9\xd0\xe4 \xc28/\xfcx\xd6-\xddo\xfe-\xdd\xbe\x93\xe6g\x1c\x0f\xec\x83\xdf6\x00_q\xfdw\xb6nz&9\xfe\xc8V\x17XT\xf7'g\x1f(;P\xb1\x0c\x0f( \xcd\x98\xca-\xc7\x15\xde\xf0[\xfc\x82E\xc6\x80'\x8f\xb5G\x9bc\xc7\xe5>\xb5\x94Z\xc0\x83\x1b\xb5\xb8\x05\xf6\xaa!kp\xd1s6\x17\xba\xb3\xa0\x13m\xe1\xe9\xe1\xe1\xdb2\"/\xc2\\\x11\xec\xe0\xe9\xe1\xe1!%M\x9f\x91Y\xe4\xb3x\xd3\xdd\x80 O\x0f\x0f\xd1\x14\x817\xd1.\x8dB\x12\x17o\xc9\xacP\x97?{\xfd\xd2X\xc8\xe6\xa2->J\xde\x93X=\xf8g~\xe1\x1fe~\x9c\xcfI\xf6\xbc Ku\x1b\xdf\x84\x91f\xe4\xdf\x1e\xbd|\xf1$\x8a\x9e&Q\xc4\"P\xa9\xab\xf4\x95\x7f\x93dK\xee\x85\xa4\xae\xc0\x9c%\xb4U^\x92 \xf4\xd53|\x19. e\x89qs\xbb_\xbe\xf2\x97$x\x95\x04\xe4\xa5\x9f*J\x93@\xb3\xebo\xfc0\x16\xe1O\xd4K\xf3&*\xcfB\xc5|\xd9{\xcdp\x0e\xbf\xff\xd3\x0b\xbc\x8a\xd4m\x1e~\xff\xa7W\xe5\xf2\x94d\xda\xe27\x98%X\x03\x0b\xb4< c\xcd\x80\x0f\xbf\xff\x93 \x90\x0e\xbf\xff\x13\x83\x94$\xd3\x80\xc9!f\\\xfb\xba\x9c\xcf\xb5\x03\xa4\x07\xe5pAH\xa1^\xd5#rY\x1ce\xfe\xec\xfdS\xddQ\xa9jh\x8a\x93rV\xad]Ur\xed\xa2+zb\x07\x945a\x94\xf89|\x05\x0b\xc1s\xc2\xf9\xfa\xba\x8aZ]\xba\x18\xc9~1=W\x18\xbcQ&4\x98\x9e)JN\x91\xacW\x95\x9c\xc0\x1e\x9cR\xa4\x7f\xaa\xba\x90\x80_\xc5'H~\x9e\xd0\xfb\xf7\xc3\x07(\xed\x13\x17f.\xa4\x8e\x0b'\xd3y\xfdn\xee\xc2\x19E~\xd33\xca\x80\xa5.\xa8\xe2\xd2 r]\xd2[=s\xe0d\xba\xc4\xcfC\xfa\xf9\xd2\x85l\xba<\xae\xc5\x9b0\x14a\xf7\n\x804J\xcb\xed\xfbj\xbe\x03\x11w\xe3\xbd_Q\x94:&n\xbc\xbd\xfb\xefv%\xff8v%z\x82\xef\xbec[e\x9c\xcf\x92\x14\xbdU\xda$\\\"\xfc\xf5T\x07\xa6\x123@2\xcd\x8e\x99R`\xe7\x01\x1a\xaff.\xfc\xa2\x97\xf6u\x98\xfaiv<%\xf4\x18\xc9\xf6\xf0\xca\x99\xe8$\xfeF\xd8\xfb\x0c\xed\\\x84\xb1\xa9/(\xa9\xf1v[\xc2\x92W\xc4V\xe35\xa7\xb0\xc6\xaa\xb8%*\x8d\xcf\x9c5\xdf\x16\xd4\xb0p%\xf7\xb7[\xaf\x03\xdez\x1b\x85,8\ni\xd7?\xe7\xef\xdb\xf6\x10K\xd6\xebN\x1b\xb5\x9c\xf1\xf7[\x8e\x97\x93\xd6\xba_\xb1\xb6\x1elvb\xe1\x9dr`m\x8f\xea\x84\xb7\xd6\x1e\xd5\x05\x7f\xdf\x1e\xd5\x01R\x9a\x95\x8c\xbeYx\x89\x85i\x96\xccH\xde\xf2D?\xc4\"\xae\x98k\x16=\x85=\xb0\xf8Gx\xceg\xf6e\xab\xd7\xf7f\x89\xee\x13\xb4\xb0\xdd\x83So\xde,xM\x0f\xc4\x9aY\xda[dW\x1a\x9eW\xe0\xc8C/#y\x12\x9d\x13\xbb\xbdz\xf2\x83\x1e\x1aM\xf6g\x8f\x1ea\xa1\x1e\xccS2C\xfcr<(\x1b\x96x\x88\xfd\xde\x85\xf7z\xd6\xf7\xba\xcb\xd2\x83d\xc7\xf0\x14\xfdQU|\x1c\xdf\x8b\xb7\xe4'F\xd9\x1e\x9c\x93\xb8p\x98\x0fK\xb1 \xb1\xfd\xde\x919\xb4\xa2\xd3\xcd5\xcc\xfcb\xb6\x00\x9cCK\xf9\xd6\x06\xbf7\xbdsF\x15\xb5V\xa8\xbcf\xaf\xa5\xf4\xbb\xe6d*m\xb5\xcd\xe21\xd0a;8\x85\xe6h[\xe0r\xd4\x87\xed@\xe8\xb9\x88w\xa2\x95\x88\xd02\xc4\xb7\xea\x0d8\xe7\xb6\xcb\xc4;\x99\xa9k\\\xe95\xaa\xf2\xd3\xe0.\x89wr\xcex\xcb\x11`\x8c\x9a\x93\x9c\xb1\x97\x9b\x8c\xb5\xac\x05K}p\xc5\x85\x995\x02M`\x1f\n/y\x0f\x13(\xbc\xb9\x1f\xf6\x84@\x87*A\x14?\x1c\xfd\xd5#^\x9d\x02\\\x7fm\x9649H\x96~\x18\xab\x17P<\xfa\x13,?%\xa5?\x124\x1b\x19\xf3\xb5[PP\xf9 \x89)\xfck\x0fF\x8e+\xe2\xff\x94H\x81\xec\xa1I\xb5\x8d\x81*f\x1e\x89\x0b\x92\xd9\\\xa7P\xda\x19\xf2\xe8\x98\xa1\xd8#\x97aas\x06\x7fm\xd3au\xf6\xd0\x1b\x81\xdbX\xefCd\x1f\xd8\x16?w\x1b\xb3\x85\x1f\xc60\xbb\x9aE\xc4B\n\x08Ma\xde\xd8\x14\x82\xf7!d\xda\xd2\x18\xfdK\"Z\x9cc\xc9\x04\"[\x91\x1dP~\x1a\xe7\xb2wYp\xfck>\x9f\x1f\x9fDd\xf7\x84\xdf\xbc6\xe0#\x88k\xd9t\xf8\xc8\x01\xdf\x8e\xa7\xe1\xfaz[9 ?\xf4\x90\xa0\x90\xdc\xad\x8e\xd5\xc8\x05\xd42\xaf\x89}z\xa9\x1b\x93\"z\xe6\xb5\xe9\xf8\xbf\xec\xc5Egl\xf1s\x03\xfd,\x1eD[(\xc4\xe5f\xfbxB\xb5\x13\xa5[\xfc\xbc\xa3\x80\xa9J\xe7\x14\x08(|\xc0C\xe0\xf0\xa3c\xea\xed\xa7\xde\xdeV\x85_54\xca\x80U-\xfa\xb7l7,\x01S\x05\x87\xa9\xaa\x02\xdf.v\x0b\x9b\x92u\x0e\x00'\x01J\xf4L\x0d>\xfa\xc6\x9dz\xd5\xbbv\xc2T\x8er\xaa\xddu)\xbc\x93\x00\xaf\x10\xfcA1\xbd\xcb\xd6\xa0\xf0N.hA\xe1x'\x94\xa2\xa7d\x85wB/\xc81\xfe\xf2\xc5W\xccG\xfdd\xc6\xed\x0d\xe9Eqd\x17(\xc40\x8e\xfc\xed\xb0\x91\xbb\x15o\xaeV\xf5\xac\xc5\xdeI\xa0\x03\x86\xb8\x9e\x14*\xcd\xf9\x9c4\xd7\xaf\xf9\xda\xa5\x9d\xb1\x1b\xb0:X\xf5\xe5\x073\xb4\xec9\xa5\xa7\x19\x89\x87\x00\xc2\"'\xd1\\\x97?\x8f>\xb8\xceo\xd0\xbcj\x7f(\xf1\x04\x12\xaf\xde\x7f\x17\x9e\\L\xc0\x90l\xb1\xaa\x16h\xd3\xb2\x8aGC\x95\x8bg\x18\xc5\"\x0c(\xe9}\xfc\x16/\x98\x11\xde\xcd\xaf\xf8\xef\xbb$\x03^\xb1\xbe\xb2\xde\xc0\xdb\x86\x9b\xdf\xa1wL\x05\xfe1\x03\xff\x11\x85\xef\xd8\x855\xddx\x87\x8d\x93\x8f\xcf<\x91\x01\xfb\xd7\xb3w\xd7\xda\xf9w\xe7\xdd\"2\xea\x1d\x7f\x8dg\xfd\xd0x`\x17<\x82\xe7\xa1\x0b\xe2PX.X'\x0b\xcbq1\xd4\xa9\x0bY\x9d\xc5\xbau*\xd4\xe0Cl\x04\x13\xd6n\x05)\xe2\xcf\x16r1.\xfa\xabf\xfe\xec\xe6\x97\xd5_\xd7.\xbb\xc4\xf5\x93d\xd2>A\xd9\xb1\xbf\xe4\x9b\x97\xbd\xc9e f h?\xfc\xeb\xbcSy!Wf\x84b= \xa7i\xdeco?\x189\xf6\xa1l[\xdb\x1e\x1f\x89\x07\x84\xfa\x17\xac\xdc\x13{)v\xcd\x9cS\xfc=\xec)\xd9T\xa6\x7f\xc6\xb3A\x19\xacf\xad\x9a3G\xba\x97br\xce\xfd \x19C\xefb\xfe\xe7\xa4\xb5&\xb3*\x07U\xb5\xc6\"Y\xcc\x89\xdf.\xcbi\xd9\x11\x9f\xc7\x1a\x05\x93Xp(\xcd}n\x9e#\x04\x97\xbe(v\x92\xc5\"\x13!\x88q\xeaa\x88kG{\xe5\xd41\xb9\x80\xecQ\x17\xba\x04U\xc8n\\\xfa\x86\xdf(\xa8'}\x8b \xd5GNU\x84Z\xe6=v2\xb0D\x86\xe6SoNwy\x88\xb2\x98\xe0\xcdv\x88\xdb\x89?}JA\x93\x0b\x16\xf4m\x82\n\xf5\xc6$\xe7\xf6\xdc\xfb\x13\xac\xc3\xdc\xfb\x01\xff\xff\x0d\xfc\x11\xd6^\xb7\x01\xf2\x8d \x8a\x0e\x1b\x1f3\x13S[\xc6\x15\xdc\xfe}\xec\xd8\xf2+\xa6v\x90L\xe0Y\xc7\x87\x8d.%|\xd3\x9e\x1b]\x9e\xbeM\x16\x04\xd2\x13\x15f\x02I\xf4\xb4\xe9V\xdc\xbe\xc3\x14\x16j@\xeb\xacS=\\\xbb\xa4+\xbc\xf6\xda1\x8e\x1a\xf7\xbbo\xd8|T\x17v)\x0eG\xb5o\x870\x81>\\\xd7\x19\xda\x9a\xfd\x9a\xc9\xeb\xb7\x1fl\x99\xa2\x85\x1ez\xcc\xea\xd9\xc3\x13d\xbf\x97\xc1\xc24-?\x8a\xfa\xa6$\x93\xaa\xea[\x8fa-\x9d\xf1\x10\x8b\x86`\x14\xdf$\xbc\x8a^d\x13\x0e\xe7T\x05\x1e\x9d\x1a\"4\x03o\xd2\x90$\x1f\xb8~m\xa4\xa7\xb1\xce).\xa7\xd7\xc8p9\xeb9\x0f\xb6\x14\xae\xaf\xf7S\x80\xe8!a\xe8\x1f\x90\x98F\xcc\xcbP =\x9b\xeb\xebn--\xa3\x10\x81(r\xf8\x08\x01;\xa6\xa4E.\x88\xf4iy\xcc0\xdf\xc6\x062\x18\x99\x1d\xf7Q\x85Z\xa6\x198\x98KM)\xeb]\xeb\x8f|\xe8\xa1-Ub\x87\xde\xf9\xd0\x8b%\xf3g\xbdg\xf7\xae\x00]\x0f\xc5\xc9\nP\xbc:luw\xbd>v`\x90\xe6i\x93\x08jw a;\x90\xd9\x89i\x07$\x14\x84?o\xa4\"dB\xaf\xf6\xd4\x91\xc7\xb4\x1b\xb6]\x05\x8a\xed\xb9\xaasmo\x0f\x98\x84\x07\xc2\xb8f\x0dk\xa7\x8f\x18\xd6\xc1\x9a@\x18\xcf\x92,\xa3\xb7u\x18\x9f'34K\xd2\xb9\x9a\xdd\xdc\xbe\xb8\xa3\x02\x14z~\xb5;\xf7\xf6}\x95\x9f\xbc\xc2\x86\xbb\xe4f\x01m\xcdc\xce\x9bi\xdb\x02F,\xb0W\xe3\xdd\xac\xe5C\xc2u\x1c\xa6\xdd\x98\xbb\x90\xaa\x08\xa8\xc0\x85\x85\x0b\xe7\xae\xb0\x07Ia\xbf_2\xd4Y\\\xf1\\\xa30Ze\xff|\xc5|Fq E-p\xeb\xd4;E\x13\x96\x0e\xdc(I\xe6\xb3\x9b\xfa!\xa20\xd5>sT\xf3C\x9dJ\x802|a\x9d\xe0<\x82\x00\x1e\xc3\xe9#8\xd5Y\x9a\xa2\x95\xe9\x92\x07\x8c\xbd\xb2}\x9b2#dzz\xecL7\x8f]XLG\x18+\xf0\xca\xc6wN\xed\xa7\xba\xc4\x9f\xb3\xca\x0cu\xd9<\x8ej\x13X\xa6\xf7\xc1da\xdcq\xea\x11\xaca\x97\xe7^L.\x0b\xdbq\xbc \x89\x89\xc6\x1a\xb7\x1alb\x9f\xbbp\xe5\xc2\x82\x07\x82\x82b\xd8\xd0\xae\x1d\xef\xeb\xb7\x07O\xfeL\xc9ezq\xbd=8z\xf7\xf6\x15\xec\xc1l\xb5C\xb6\xd3o%-\xe07\xe90\x90JFW\xe0:\xd8\x87\xc2\xa6\xf7\x14.\x7f\xcc\x97\xbfh_\\\x15\xafk\x8c,I<\xd6\xacB\xe6\x87\xe0'\xe1\xaf\x90\xa1\xd8\xb0rhs\xdb\xfa\xc6?4\x7f\x0d^\xab\xae!QR\x1b\x99Hf\xa0M@7Y\x98\x0c3\x1f\xe1+*\xcd\x11\xaf\x11;cv3L\x8c\x87\x86W\xd3\xe4\x98\x0b\xf5n&:\x8d\x1c/a\x98\xc3NuY\xa1f\x0b?\xf3g\x05\xc9\x9e\xf9\x85?Q\xba\x94q\xfb\x9c\xde\x85H\xbd\xc0/\xd0j\x8aNe\xde\x03\xdfJ$\\\xf5\xa1\x9a\x85'\xde\xdc.\xd0TOA\xf0a\x82\xb4\x12\xb9\xe0\xaeK\n\xac\x1aX\xa5\x90\xe3M\x88\xa7u\x14nLo\x18\x89\xfc\xa4%U\xed\xde\x7f\x82Y\x9b\xde?\x9ef\xc7m,\x1br\x16\xae\xef\xec'M3y`\x13`,\xd4\xac\xd3q H\x04\xe3\xaaB:\x1d\x1c\xc5\xd3\x12t\xfc\x01\xb8\xf3C#t\\fg\xde\x1bX\x87\xcc{kP1\xcd\xc3\xd8\x8f\xa2\xab\xa1\xd2w\x9f+\x8d\x93*j0\xe5\x88\xc5\x1f\x1a\xd1{\xacSr\xab\x92\xd9\xb4\xd5\xc7\xb1,\xa7\xd4\x1ab\xf3\xcfJ\xcchj;m\xbd\x8a\x89\xcc\xeal\xb4\xfc\xa8\x8c\xcb(\xebF\xa9\x8b\x8f<.\x86`V\x1b\x96^u\xf9\x11\x81\xb7\xebP\"\x02\xf7l\xb7\xc0\xf1\xd0\x00\x88E6\x18\x08\xf1\"\\\x84\xb9\x01\xdcB\xa5}\xad\xd0J\xc7\x1eACwn\x0b0\xa9\x953\x8e\x1d\xa3\xd2\xa4_M=dAc{\xfb\xc1}\xae\xa5\x7f\xc0\xff}\xd8\x8cj\xc7\xc3co?\xe4Q\xed\x1e\x8a\xf7;\xfc_\xfe\xfdC\xfe\xfdC\xf6\xfd\x0e%G\xf0\xdf\x11\xffw\xcc\xff\xdd\xe2\xffn\xf3\x7fw\xf8\xbf\xbb\xfc\xdf\xfb\xfc\xdf\x07\xfc_\xde\xde\x88\xb77\xe2\xed\x8dx{#\xde\xdeh[\x19e\x8f9\xdb\x0eY\x8b^0\x1aw\xc2x\x87U\x90J\xbc\x92\x9f\xf2\x10\x8f]\x94(WJ\x02\x82\xfe\xc1-\xc8CD\x88\xe6\x04k\xcc\xd0}\x84\xf1V\xaa\xa0\x19Ul\x91\x0e\x82\x94\x1b\xed\x83\xd0:o\x9f+\xb4\xdc8\xe9n\n?_$\xed{\x0c\xbeVL\xc0\xa2\xc2\xed\xc1z\x9d\xc8\xcf\xc78; \xc5'\xa3\xd1h{4\x1a9\"v>C\x18o\xfd\xf8\x8c\xebH\nYG\xe2\x03\xa6\xb3\x84Y\x12\x10H\xe9dtv\x96\\i]\xc0W,\xba%\xecc4 \x0cy\xca\xa2_\xae\x83m\x17\xb0\xb1\xc7\xca\x1dx\xfc\x18\x10~\n\xf8\x0f0\xda\x1co\xc3:\x8b\x99\xd9\x9b1\x17$\xfc\xcb\xb3\x0c[\xb7\xc3a\xbd`\xa6\x8b\x1b4\xda\xdcR`+\x0dPd\xfe\xc5pP`\xb15\xbc\xcc\xbf\xe0LiX\xcbnM\xe0A\x81\xa7d`\x12\xc3c(\x1f9\xc0-\xb9x\xe4\xd6bZ\xae\xaf\x1f;\x18F\xe2+&kiV\xa8\xc1\xa6<6X\xab\xf9w\xb3\xf4\xea\xeb\x83\xe2\xacM\xc7\xb6\x8a,\\Z&\x85y\x9b\x9bV-\xaa`\x059\x15\xb2u\xbb\x01\xf7\xc2\xca\x8e&\xd6\xdf\xa6:\xbc\xd4\xf6\xc3\xf6{\xba}\xd6\xd4\x82u\xf0YD\xce\xaeXS$\xdb\xfa\xff\xd3Z%\xff\xcf\xfac\x9b/\x8a\xea\xaau\xa5/\xda\xb5f\x03\xb8o\x90\x85\x12\x8aT\xb2\xc0\xc7\x1d\x0e#S\x04k\xb2\xe6O\xc9\xb1\xcd\xbc\xf3~\xfb\xf5\xff\xf8\xb7\xff\xc2\xe2\x9d\xf2\x9fX\xa6l\xe3Zs\x8b\xd3\xb5I\x98;s\x89J\xbe9\x86\xe3\xed0\xca\x807\xfe\x97_\x82\x9dLcZ;GWnA\xfbR\x94_\xca\x07\xb9e\xf9\xd2Z\x809\xec\xc1\xcc\xa3\xb0\xda\xc7\xa0\x81\x04\x8er0eT\x05\x8e\x803\xef6\xe1jE\x96]-w\xc1\xc2\xbc\xeccM\x85HTh\x11\x1ej\xc1\x82Z\x0b+\x8fT\xaem\xfdX\xfc\x18\xffx\xfe\xe3\xfc\xc7\x0c\xfe\xed_\xff\xeb\xff\xf5\xeb\x7f\xfd\xd7\xff\xf3\xb7_\x7f\xfd\xed\xd7\xff\xfc\xdb\xaf\xff\xc3o\xbf\xfe\x8f\xbf\xfd\xfa?\xfd\xf6\xeb\x7f\xf9\xed\xd7\xff\xf9\xb7_\xff\x97\xdf~\xfd_\x7f\xfb\xf5\x7f\xfb\xed\xd7\xff\xfd\xb7_\xff\x9f\xdf\xfe\xf3\xff\xfd\xff\xfe\xfa\xeb\x8f\xe5xs\xfc\x00\xff\xff\xf0\xc7rN\xe6sk\xc8\x19\xbb!M9\xde\xde\xc1(n-vF\x8f\x91g\xe2\x8a~\xd2{I\x0b\xd5q\xafm\xf3 $r\xc3 \xea\x02\x8a\x8d:\xe1%(n\xb1,\x8f\xc4\x01\xe6_Q1x\x14\xc8\xe9\xa7[\x8em\x89z\x96\x81\xa6\x11u\xfaVJ\\_\xa1X*\x17\xe4\xf6\x95\xe76V\xdcg\xf0\x18F\xb0/\xa5#\x1e\x1d\xd7\x06\xcc\xcaV2\x96\xf1\xc7\x1c\xd3\xacl\xe9Iy\xee\x1b\x11\xf9\xddN\xd0\xe493 \x18~j\x0d\xbc\x82O\xc7\xcdM\xe1\xd1\x0f\xb3DM \xf7\xdc)a\x03\xeaK\xbbd6\x15\xf9\xef\x02O\xf7\xc7J\xde_\x06\x8d0\x9eEe\xc0\x82]\xe8@C\xd4\xe9\x03\x8d\n\xed\xff\xa7D\x02\x8e\xba\x07\x0fS;\xbd\xc6\x08\x91\xab\x80\xc3\xed\x0ecc\x99\x06\xe3\x8e\x8c\xa4\xc4/&x\x83\xef:+v\xd9\xb7_\xa3\x91\x96\xb6\xb8\xa9\xb4\xb8\x0e\xdcO\x99`\x05x\xa3\xc0E\x91\x89>\xe4\xf1P[\"S\xf48\xe5a\xfaC\xd8\xdb\x83\x11\xdc\x83M\x05Ca=M\xca\xb8\xa8\x1d\xb7br\xe6\x17\xe19is\x12\x0f/\xc9\xdd\x0f\xbd(>\xc9\xd8\x93\xb8\x98%\xd1\xc78\xb2\xb4i:|\xd1\xfc\xc7<\xb6\xb4\xaf<\xfc\x99|\xbcY\xf0\xd6?\xe6$\xc2\xc2\x8f\xc2Y\xbe\xd2\x1c\x86L!\xfc\x14\x80\xb42\xf2\x19\xb4\xfa\x88\xf6\x17\x19\x99\x7f\xe4\xa5\xcf\x97~\x14\xad4\xfc!\xa3\x17\xad~\xf4\xc5\xa7\xef\xdf\xaf\x06\xfc\x83\xc6/\x9a\xfd\xf8\x13(O\xef~\xf4\xe5'\xc1\xfey\x99~\x84\xa1\xa7w4\xf4\xd8\x1e\x8d)\xb9\xbc\xf4\x8b\xd9\xc2rad\xae.\x0dfZ\xd5S\x8a?\xd5k\"\x1e\xc1\x19\x10\x93\x921\x91e\x0f(z\xa8\xd2\x99\xc5\xd3B\x9f\x19C2\xafO`_\xd8\xe11/\xaa \x9a\xc0q)o\xecL\x8bc!\xc8\xcf:qA >\xbe\xe1jrQ\xa3\xe5\xc2\xf8\x06\xeb\x99)<4`\xd0\x92\x86}K\xea7\x964\x93\x974\x1b\xb8\xa4\x12?\x91a\\\xb3\x04W\x95\xbd\xe1k\x19:,N\xd3\xdd\xadhN\xfc\xec\xdf\x01\xf4\xee\x963\x8d\xc2B \x9e\x1d\x03K\xfd: \x0dGl\x8fw\xda\xbe& D!\xdd\xd7L\xef\x86J\xb4\xae\x90\xc4\x9a\xa1\xf1\x8a\xe5\x9f\x9e\xce,\x9ew\xe2\x9e}\xea\xfc\xf1\x9eC\x99\xe3\x0f\x1f`\x1bu\x1e\x05\xc9\x8b\xba|\x7f\xe2\xdcsac$\xc2:\xd1zc\xac\xe7\x9f\xca\xb5|lH\xaa\xc4\x1a\xf3\xea:\xde\xbeC\xffkT\x92\xcb\x1d[*\xa3\xdc;-\xaf\x8a\xbd\xfd\xaaP\x05r\xe7\xdc\xf7Y\x12\xa8\xde\xb3\x9d\xfd\xfd{\x1e\xb9$3\xdb\xb2\xe8\x1c\x15P3DO\x02\x92\xad\x9a\xd0]\xaa\xe3\x06@\xd3'gOx!\xf14<\x95%\\;\x95\x8a\xfc\xedZ\"\xa7_\xab\x83\xe8\xe1\xe8\xd4\x9f\x9d3K\xff\xdc\x85\x08\xc3T\xcfY8}\x93\x93z\xc0B}\x86gq\x92\x91\xa7>\xc6\xf6\xb3B\x0b&\xf4\xda\x83uZ\xb6,\xa3\"\x8c\xc2\x18\x8b\x96\x8d\xa22\x0eQ\x11\xbf\x0fV\xd9(\xc8\x8bp\xf6\xfe\x8a\xbe\xbf\xe2\xef\xf5CX\x98}\xe4\xcf\x9b\xbbY\xc0>l\x8f\x1fn?\xdc\xbd?~\xb8\x83\xe6\xfe\x8f\x1f?65\x80\xd1g\xeb\x03O\xbc\x1c\x83\xa3\xbb\x10\xc0:Xg:\xfb\x01\x94\xfea\xd0\x06t\x8e\x90Z`J\xce%o\x876\xf2\x85\xbd\xbf\xf6\xe3\x8f\xb9c\xb9\x10\xa84\xd4\xd5\x83\xfe\xeeK\x06\x8b<\xbe\xe7\x9amG\x18y\x0cE\xcd\xb0\x0e\xf9t\xf3\xb8\x82\xf0\xc7\x80\xf1\xd5\xec\x94\x07?\xe12\xa5\x85+>p\x1c\x17\xd6\xd0\xb6\xbf!\xf1\xc2\xa4!\x9b\xc7\x95F.s\xcd\xe4O\xe3\xc1\xa9\xcf1.\x01\xcc\xe1\xab\xae\xe4{\x03\xc6\x8f`\xbe\xbe\xee\xc8;S\x8b\xd8\xe6h\xe8k\xe3\x8f=\xa5D\xbc\xf1\\;nw\xf0|9\xbe\xaaC0\xa2]\x00s\x14J\xe9\x07l%F\x0e\xcf.!-\x1b\x8b1\x1f\xb9\x90V\xad\xee\xc1\xb9\xe3|\x00\xbec,\xa3O{\xfb\xe8\xa0\xeb\xc1\xc19\xecC\xca\xcb6]8\xc7O:#hY.3\x8f\x06kS\xa0F!\xd3\xdct\xa4\x15\xb3\x07a\xb6\xe6\xa5\xd9FW\xb0\x0f\xd3c\x98\x08\x1cT g\xdb\xdc\xa0Z\xcc-\xd1\x08\x1a\xa2\xeb\x06d\xd5\x8d\x08\x01\x89\xac\x8ak\xb2*\xeb\x90U\xb1\x8a\xac\xcaV\xa5\x03\xcc\xf2\xfa\xd4\x8e\xed\xedQ[\xec\x9c\x88\x92q\xbb$\x14%;\xed\x12\x9f\x97\x8c\xee?h\x17\x95\xbchgk\xb3]\x94\xf3\xa2\xadNO\x11/\xb9?\xden\x17\xcdz\x03\xf7U)\x98\x88wrB\xf2\x97IPFD\x97C\x14$\x99\xff/\nW\x10\x8c\xbb\xc7r\xe2\xe9B\x99\xd5\xf9\xdex\x0c\x86v\x8a!o\xe1\xe7\xaf/b\x91\xbe\xb5\nC\x17s\x95\x0d3\xb6 \xdd\x84oP\x83\x10&\xa6\xf3\xcb\xa8\xe0\xa1\x99\x9a\xa0A7e\xbb\xb3Ts\xae|q\x1e\xfd\xa1z/\x96\x0eR-\x8b\xdaY;\xcc\xf4<\x18Y\xa3.E\x92\xd6Y0\xde\xdd\xd9\xdd\x1c\x05-E\x1b\xbdv\xad-o\xf4\xc0\x1b\xb7J\xe8}j\x9d\xfa\xf1OI\xab\xe0\x8c\x16\x1c\xfa\x85\x0b\xe3\x1dxR\x9e\xc1xs\xf4\x006\xefOv\xc6\x93\xf1.\xfc\xe9\xe5\x91t\x10\x86\xe9\ns\xb1\xf4\xde9\xc9\xf20\x89s\xbc*;/?|\x80_\xae]E\x89\x97_\xf8gg${\x17*\x9d\x97x\xb5 (\x02\xdd\x9e\x85\xc5[r\x1e\xb2\xf2\x85\xb2\xfcY\x98\x15W\x13\x08\xba\x85\xa7e\x18\x05G\xe1\x92\xe4\x85\xbfL'p\xd6\xad\xb2\xf4g\x8b0&\x93v\x0c\x85.\x07Ph\x1d\xaf\x82dy\x12\x06,\xcf\x94\x1ao\x06\xc9\xf2U\x12\x10S\x95<%\xb3\x89\xde\x88*\x8b&J5,/\xccMMG\xfeUR\x16\x13\xb0\xbe\xf6s\xf2\x02\xff\xd0\xb4\x14$\xb3\x83\xcb\xd4\x8f\xd9r[Q\x98\xebj.\xfd\xcbg,\xf5( \x8e\xfc3c\xff\xf30*Hf\xaa\x81\xe6\xa4~\x91d\xefp\x9e\x8b\xa2H\xf3\xc9\xbd{IL)^\x01=^\x98\xdc\xab*j\x86\xc5|\x97r\xfdB\xce\xca\xbcH\x96\xfar\x9eO\xf5uJX\xea\xaa\xe7A7\xa9N\xab.\xcfz\xf4\xac\xd4%\xbb\xaa\xea\x13\x92\xbe\x08\xe3\xf7a|\xa6\xaf\x94\xb1\xd6\x9e\xc7\x05\xc9f$-\x92\xacOc[\x7f\xc9\xb0\x97\xb2\x82f\xba\x19\xc9\xd3$\xce\xc9'\xea._$\x17\xe8\xd3M\x02\xbejj\x073\xa8q\xeb\xcb$ \xd1[\x12\x07$\xc3u\xb3\xc8\xa5\xbfL#\xa2\x83`\xe9+\x04\xe5\xe0\x19I\x8b\xc5\x04\xb4{R\xd7\xcf\x87|@\xa7ppY\x10<#\xb9~\x1fi\xbd\xa7\xc9r\x99\xc4\x83j\x97)\xc5\xc3$8,O\x97a\xc1\xa2M\xe4\x13\x98Zg\x04\xd5.i\xc9\xfeIr\xfc\x97e\xd1\xa5\xbf\x92\x94nU\x8e\xfa\x01\xe2\x07X\x89\xcb8\xad\"\xf3g\xc4\xd20\x9eiFrR\xd0>\"\x81\xb0u51C\x17\xad\xa9\xa9\x10\xc6a\x11\xfa\xd1!\xddX\xfd\xd1\x9a\xc7\x86c\x99,\xd3$\xa6|\xcb\xa4\xed<\x05jp\xa2\xfc?%\xd3\xe7^\xeag99D\xb9Y'M p\x82\x89x\x1c\x057\xf1:OF\xac)\xa5X?\xe5\xdd\xf8b\x8d\x1c\x9b\xdeq\x05\xd2\xde\xb1\xa2\xb7+\xed5\x91_\xe5\x05Y\xaa\xc8\x08\xf1T\xd8+\xf5\xf8\xcfU\x0eW\xb5M\xa9\xc7\xf7V\x03kl\x9b\xda\xb3\xd2\x8eJ\\\x1ff~U\xd4J=\xf6K\xdd\xb7x\xc4\x95\x90z\xec\x97\xb6\xb2f\xaeP\xdf\x98\xc6~X\x1d\xdd\xc5)\x1e\xbc]S\xaf\xcc\"\xfd84;\x01\xa9'C\x7f\x97@V\xc4&\xe8\xfb\xa4\xa2\xa7O)=\xdd\xaa\xdd\xfa\xbbEZ\xdb\xa7HRK\xfdS\x15\x9a\x078`\xb2\xdc#\xa5\xc0\x86\xb0\x073\xc7\x85\x13/'\x05\x1bCn\x97\x8e\x0b\x17\x02;=\xc1\x99\xe7^\x94\xf8\x01 0\x8fI\x9d=\x9d6\xb5\x16\xd3CE\x7fZ \xf2\x84\x16KQ\xb0\xe9BX\x8f\xb2\xc4y3^p\xd3\x85\xa4S\"%|ck$:.\xd3\xc0/\xc8\xbb,\xb2-\x0b\x07\xd6-|\x91\xf8A\x18\x9fQ\xe8/s\xdb\xca\xcb\x19\x06~\xd1\xd4>L\xc9\xcc\xa6\x83\xc8:\x83\xc0d)\xcdo\x82\xe4\"\xa6s\x07\x0c\xea\xc1g\xaa\x1d\"\xd6\xe8\xf4+\xda\xe0\xc5\xe8\x81#6\xc0\x81\x0b/C\xd2\xa7\xde\x14\x17\xac'i\xaa\x93\x97V\x91J\xb0\xfeI\xa8\x0d\xcd\x0f\x1c0s9\xb2\xc6\xdfK\x92] \xf8\xab\x9b\xd0\x8bR\xab\xe1\xe5bXj4\xc9\xa3\x89P\xe0\xc0T8\xbceL\x06\xd0x\x89`\xf7\xe1\x03\xf04\x1e\"k\xc7\xe1\xfb0MI\x00YM\x07\xc6 \xfc\x0bk\xe5_ \xc9\xf07\xfd\xf8_\xe0\xc2\xcf\x11\xed\x87\xf3\x90\x04\xbau\xe2x\xe8\xa2\x8b\x18\xba\xe7\xeb\x92bB\x0e\xf2L\xa6\xc8~\xbf\xcb\"\xa5\xac\x0d\xe5\x98\x8dM\xee\xbc\xa0G\x9b\x9d\xa8\xaf\xaf\xdeq\xb0Y3\xd6\xf8\xf0\xc1\xd8\x82\xe2\xfa\xc6K\xed\xb2;\x1d\nlo\xc92)\x08\xfb^M\x81\xab\xd8\x90\xd4\xeb\xbeU}\xa9`)\xe8\xa7\x9d\xd7M\x1c\xec\xc2\x01fb\xb0\x8d\xf3\xbc\xa4\xd5\\\xb8\xa0\x87\xf1@r\x03\xba\x96\x91,\xe9\xa5E\x1c2\xe1\xd8\xde\x19=\xe88\xf0\x8ev\x1c\x8f\x8b\xfd\xde\x93\xab|HC\xf5\xcau\xac\xa0\x99\xb6\xf5\xe1\xae4\xe1\xd8\x1e\xef\xdcwx\xbaM\x03\x95\xd1631\xbb\xed4\xb3s\x03\xacnX\"/C\xb3\xa3J8\x18\xdb;\x9d\xc0\xb0\xb5pq\xd2\x9fb\xb3\xb3\x03\xdc\x83\x1b\x1d\xbe[\xfbp\x7f\xdb\xf1\xe6rL\x94!-\x0e\x9cD{\x9bn7\x89\x9d1\xf3\x07\x1f\xdd\xe7~\xe4c\xeeW>\xbe\xaf\x04\xaf\xc3\xab\xe5i\x12\x0di\xbb\xd7J_\x9d\x8e\xb7\x13\n\x83G\xe9m\xe7\xb2\xe4\x913\xda[\xca\x83\xf4\xee\xb4\x83\xf1\xf2\x19\x8c\xb7\x1d\xef\xcf\x07\x7fk\x96\xb1\xd4\xa1;\xed\xf1\x88\xcc\xa1\xed\x011\x81\xf6\xc3vX\xa1\x94{\x87\xb4\x8d\x13x\xea\xd0\xb6O\xc2\xa2\x82\x94\xe6\xfbs\xfe^\x9d9tg\xdc\xae/2\x87\xb6'\xcc\xb2\x86n\xb5G\xc3R\x86\x8e\xdb\xb5Y\xc6\xd0N\xdc\x87\x0b\xbe\x9a\xed\xb9\x1e\xb0%h\x8f\xf1\x92Wo\xcf\xf5\x90\x8f\xbd]\xff)\x1bL'X\xca{\xb6\xe5\xed\xd7O\x04Bj\xbe~\x0d{\xf0\xb4\x9d$\xf4\x0d\xec\xc1\xfb\xf6\xcb#\xcc\xfb\xd9z\xf9\x12/\x08\x06\xd7\xcd\x92\xe7\xd5\xd5\xd1|\xff\x13\xec\xc1sJ.<\xafQz\xb3\x06\xbd`\x02\xdb:Y\x84A@\xe2\xb6\xca\xff-+-\x927Y\xb8\x0c\x99\xbfM\xb3\xc63\xd4\x03y)g(\x9f\xe7\x07q\xb9d!\x91\x9b\x15_\xd0\x1b\xd2\xb6r\x1c\xfd\x06c\x05\xb3\xabvs\xef\xe4Z\x9dd\xc6\x7fg\xa5I\xba\xa1\xa9\xf0\x0d\xecu\xb4I\xcd\x1a?\xeb\x02\xc2\xbcl\xd6\xfb\x1aW\xf4/\xac\xb1f\xd1\xf7\xb0\x07k_cf\x88\xaf\xa5\x8c/\xad\xbf\xbdy\x18\x07O\x17a\xd4R4|\x0b<\x82odvr\xe6w\xce}X\xdb\x83K\xfb\x0d\xf2fh\xd7\xab&\xd0\x87\xc5\xd8\x82\xba\xe17\xb2\xad\xb0Y*\xc2\x93,\xdf\xd7V\xbav\xbcn\xd0#P\x8aA\xae\x9dv\xddkG\x0eg\xa3\xb1]\x03 !\xbf\xb6\xbfQ\x9b\xd3d\x92\xac\xe2\x9biq\xec\xc2\x9b\xaa=\x1e\x10\x92 \xb7\xf9\x0d\xfd\xf9\x06\x9b\xe9\x04\xc0\xbf\x86 \xbcin\xd9\x0f\xbd|\xbb\xe0\xd9\xdf1\xaf\xf1K\xfbe\x0d\x08&\x1d%fL\xef\xaa'\x9b\xdd\x7f\x07{\xf032\xc5\x0c\xea\x1bP\xeb\x89\x9b\xbb\xb1\x88\x06\x80R4B:\x0b0\xa8\xa5F\x94\xfd\x97\xa6\x19\xfcm`l\x80\xaa\xe1=\xb1I\x7f\xb3\xff^m\xe0\x15\xcb\xe2\x02{p\xc13\xd6\xd1w\xb4$\xb1\xdf\xa1\x91\xc4>\xc6\xd7\xa9\x10\x10f\\\xa5\xfd\xbdby\x85\xa7\xaf\x8e\xa7\x053s\x11\xbf\xf7x\x0e\"\xdc\xb4Xw\x10\xea&)\x17\xb1\x89\x89\x8bT\x90\x0d\x93\xba\xc3\x0f\x1f\x18\xf4\xbdr\xe1\xc0\x1ea6uJ\xa6\xd4\xfd\xd2\xe1\x7f[\xad\x06\xfd\xb6\x86V\xd3b\xfey\x88q\xc8\x95\xd2\xf5\xad\xd6\xbc\xb3\xe0\x1fK\x9e\xe8\xb3\xa0CKXj+\x16e\x97IP\x98\x1fe\xf2\xc8\x81\xbf\xa1\xfe\x1d\xc3\x05&\x18\x06\xa60j\xdf\x8d)7\xfe4\xf88=k\x18\xaf\xe0\xc6\x13\x96\xaaP\xdb\xf3\x1a\xd6\xae\x01\x08A\x83\xe5\xf7\\K(0\x11f\xc1e\xaf\xd9\x05\xa2\xec\xda\x17\x9f\xff\xf9N\xfc\x16%\x0cz\xe8o\xbay\xe4\x18\x0b\xdbv4\xcd)~1d\x8f\x98\xdd\x05]\xff.\\\x0b)\x11\x89\xa9\x9e\x94\xff\xc8\x11{\x82\x87\xcd\x17\xb3\x8a9\x04\x7f#v+dSz7-\x0c\xe70l\xce\xaa\xae\xf73nmi\xdb/M\x81\x0d1\x08\x14=N2\xa2\xef&\xc4\xb0\x18IZ\x87{\x92\x92\xd0w\xf2b\x9c\xf3\x8cj\xa9\xca\xebw\xb3\xe1\xf5\xbb)\xf9\xe6\xbb\x9d)6\"B*\xaf\x13\xe0Y\xdajl\xc0SZ\xfe\x9d](\xcd\x03\xce\xfe\x9a\xbe:\x16\xf8\xc2\xae\x8f\xbc\xb8'\xbe\xad\x0d\xe9\x10\xa9\xab\xd2\x1d]+\xa5|H\xf2}O\xff\xf7-\xdd\xc3N.@\x18\x14I5\xa7T^\x8bXp\\\xf8\xa1\x99\xeeM\xce8h\x15I\xe5\xe3\xdd'\x04)0C\xdf\xfb?\xc8M?\xc5\xa4t_\xb8\x94E\x81=\xf8\x1bF\x90\xdby\xe8\xe0_\x87\xf8\xff\x7fF\xae|\xbc\xc3\xde\xfd\x89\xf1\xe8\xbb\xec\xaf\xbf\xf2\xfc\xc6k\x94\xdf\xdc\xc6e-\xe9\xfc-\x15\xc3`\xb9\xf4kD0\x0b\xfc\xbaWR\xf5\x83\x1d4$2t\xc4\xbe\xedc\xaa;\x1fS\xdd\xf9,[\xda\xcf\xed\xf5f ;\x91\xe8\x16Y\\V\x1d\xe7\xbfPva\xe1\xe7\xcf\xf9\x01p\xc3\xfci\x12\xcf\xfc\xe20\xcd\x88\x1f \x9b#(0\x17\x9d\x85\\n\xbd\xeb2\xd7\x0c\x97\x07\xe8u\xd1\xde\xd3\x958)W\xec\xcc\x91\x7f\xe6\x96q>KR\xda\\.LC-\xd7\xa2\x17\x01a8\xe2/\xf5!!\xe4\x91\x03\x81\xfd\x97)!\xcd\xb4\xe65\x12\"\x98\x8f*\xf0\xf2\"\xc9\xe8\xe5\x12\xf3V\nR7\x13\xd3f\xce\xed\x82L\xe3V;t\x05\x0f\x1bk\xc7Ox7B]\xbf\xfdG%;{Ao\xb5\xf5=\xb47\xdf\x87\x17\xf4TM\xd8?{\xdd\xe4\xea-\x04\xfc\x9e\\}\xd3\xdf\x15Z\xe0\x7f\x87\x16\xf8\xc6\x9c=>0\x1a\xb8\x83\x9b\xa0\x19<-\x8c\xe1\x85ZCA{z\x81t\xdc\x9e\x9c\xba\xc3H\xc6\x9799$\x05\xaa\xb1\x8d|\xda\xf7\xaa\xf0\xc0\x9d\x96\xc2e\x1a\x91!-5\x93\xcd^w\x8eJk\xa3\x19\xc3\xdb\x8dq\x84A\xd4\x07$+\xedZ%\x17\xb0\x0f\x976\xa6\xa5\xfc\xb3}\xc9h\x1d\xe3f\x07d\x1e\xc6D\xa8\xa8'\xf07CqH\xf2 \xfc\xb9Y\xe1\x8c\x14\x92\x8a\xfb\x19\xc9gY\xc8\xd4\n_\x98*\xbe\xf2\x97\xb4\xb1\x7f6\xd5a\xc7 \x9f\xc0_\x1b\xeb\x88\"\x96\xe6b\xdakx\xc5\x1a\x98|q\x11\xbel\xc7<\x16\x8c\xda4.\xa3\xe8\x18c\x99\xfdd\x0b\xba\xd3\xfa\xe5\x9a\xbf\xe9\xae\xbd\xdf1,m}\xc26\xb7\x851\x1d\x17\xac\xef\x0e_\xbfR\x04\x01\xa9\xb4\x0c+\x10?\x9cd#\xc7\x8c\xa3\x18=R\xc5\xe0\xa1,\x05\xa7\xc9\xea\xeb>ib!\xf1\xf0L\xde\x9c \x1a\x1d\xbb`\x9f\xda\x9d\xa4n\x9c\xc4\xffN\xf6\xbf9\xe3\xd5\xecb\x089.\xfaRJ\x87X\x987\xa44;\x06\xf5\x8eK\xfb-\x1c\x0d\x1a\x00\x0e$t\xect\x1a.\xfc\xc4\xb5*\xcf\xbb\xc2\x87\x06XIB\x84\xe9[$\xc6c{g\xd3\x91\x85\x0b.\xbcm\xd4cI\xb6^\xcf1_\xe8\xcb\x1aq\xb3\xbf\xfdb\xe1\x82E\xff\xb1\xf8=;\xe7j\xa6\x1a\x06\xd66\x07\xa9\x00j\xe9xG\xca)\xa2B\xa9\x93\xd8QBaU\xbd\x94\xe0\x073e\xda\xb7\x98\xc5\xe5\xed\x1a\xce(2HV\xa0\xea\xbb\\\x00O\xf1\x11\xed=\xf4\xe6,/\xcb\xe6#(kH\x8d\x1e9\x90W\x16\xe8\x94`/\xa7\x11\x12\xe5HN2\x10V\x1f`Ia\xb8\xda\x8av\x84\xdb\xc2\x9b\x90\x92]\xdd5\xfd\xe5\xda\x13\xa4D\xb3\x10\x83\x03\xd5\x86\x14\x02\x96/\xc28H.P\xc9\\\xfd\xe2BS\x05F\x84}C\xa1\xcdZ\xa0\xb8]v\x8b\xab\xb5\xa3\x83\xa88\x0c\x8akM\xd9H\xe1\x07l\xf2\x18G\\\xe58\xeb\x95n\xe9\x93\xd5T\x04\x88\xca\xda\xaa7\xf9\xbb\x18\"w\xf4Q4\xd1<\xc06\xcf\xbf\xdc\xd4\x14\x0e\x02\x00\xa6K\xb1-?\xbf\x8ag\xcfWR\xc8\x89OY\xfa\x12\xa4\xa5\x07}\xa7\xd6|\x15\xde\xe9UA^\xb0#0\xe4\\F\xdas\x89\xe9\xa5:%\x19\x96\xb4}:\xf9Ro\xd1\xdb\x13\x83/9p\x0f\xb6aC\xe2\xcd\xaf](\xbc\"\xf9\xfa\xaa <3\x9catm\x9e\xfd\xa4\xb0\xe7\xce1|\xf5\x15\x8c\x1e\xc0\x87N\x11\xac\xc3\x88\x17\x8f\xd5\xc5cV\xbc\xab.\xddr\xe8JL\xf3\xf5u\xbc\xa60\xb2\xf2.| \xe3\x9d\x9d\xf6\xfb\x07\x9d\xd7\xe3\x9d\x1d\xf8\x12Z\x89\xa4\xc6<\xc5\xb5\xb8:\xd5\x93\xd1\x0c\x96\xce\xe5\xf1c\xd8\xeev\xd2\xc2\xb6\xa3A\xbd\x8c6\x8dK\xb6\xad_\xb1\xc7\x8fa\xa6\x87wZ\xb0u\xfd\x12v\xb7\xe8\x0bko\xcfB)\xf7\x98\xb7\"\xf6\xcbf\xed\x8cq\x1f\x1e8\xb0\xaemx\xb4)Z\xa6\x80Q\xb5\xcc\xbb\x1aK]Y\xed\xa1\x0b)L7\xdc\xf4\xb5\x82\x7f\x16B\xc7D\x12>Ze\xcc8\x8f@N\x0f\xfb.\x8c\x8b\x07l\x1f\xf7\xe5?&,\x9f\x0b\xdb\x14\xeb\xc9\xd7O\x9f\x1d|\xf3\xa7o\x9f\x7f\xf7\xe7\x17/_\xbd~\xf3\x97\xb7\x87G\xef\xbe\xff\xe1\xaf\x7f\xfbg\xfft\x16\x90\xf9\xd9\"\xfc\xe9}\xb4\x8c\x93\xf4\xefY^\x94\xe7\x17\x97W?o\x8e\xc6[\xdb;\xbb\xf7\x1f<\\\xbfg\xf1h\xdc\x0c\x8f\xf8\x95t\xbe\x84\xaf \x7f\x04\xeb\xeb\xa5\x03\x19K\xc6\xedOK:\xf0\xa9/\x83r\xe9`,c\x95[[\xa4\xc7\xea\x02\xd8\xba\x84U\x01\xff\x01\xb6)\x1a\x13\x8c6E\x9e\\\x16\xf8\xc1vn\xc2\x84!f:^9mfw\x1df:\x8c_g\x8cB\xf7S9:z\xc1v \xa6\xff\xac\xef\xc1\x96\x83\x00c\x13\xba\x13\x14\xe5P\xec9\xda\xbd?\x1a\xed>\xd8d>\xf6\xd3\x92\x9e-\x06\xe9\x14\\w\xc6\xbc\x84\xa1\x0fV>>\xa6\xac\xb9\x80|;\xc4\x8cZ\x08\xff\x0f$\x98\x0f\xf1\xcd\xb8\xfdfWz\xb1\xbb\x05_B\xd8\xe6\xa9*\x8a\xa6{\x14\xaa_\xc9\xd4\xda\xb0d\x08\xdaD\x08\xda\x1dS\xd0\xb2NTE[JzC^\xcd\xc2\xcb\x88\x1f(T\x81<(\x8a\x02\x0cCW\x10\xea\x0f\xe0\x8f\x90PZ\x80b\x06\x85`\x94.\xfc\x88\xaek\xe9\xa8k\xa0\xbf>\xaeY\xb7\x8c^\xcb\x1b\xf7\xbb\xef\xd1~\x06\xf6\xb1\xe3\x11LT\x01\x0bR^e\x83\x96+\x9a\x0e\x10QR2a\xde\"w\xb8\xc3\xfe\xfa\x1e\xa4\x0c\xc3\x04\xf0%\x9f\xc3\xc6\x8cM\x02\x02x\xfcx\x0f6f\x94rX\xa7'\x18f\x18\xd8\x14\xeb\x8fwv\xe1\x8f\x10\"\xc2d\x1d\xb8 \xda\x9b\xc1\xc6\x1e\xcc_\xf9\xaf\xb8\x8c\xa7\xc0\xb6\x18x\xec\x83\x8dY\x04D1o\x92!\xef\x19j\xe9}\xd1\xd6R5\xcf?\x85\x0dX\x1c\xc3\x87=\x18\x8d\xe9\xc1:o\xddp7b\x8a\xb9\x10\xa4)\x9c\xb6\x0b\x17\xac\xda\xac\xb5#B\xe5\x96S\xb2\xb1\xab4bAj^)\xa3G$\xbcd\xac\x8c+\x81%[\xaa\xb8\x12X\xa2\x8a*A\x0b:_\xe4\xbc\xa0\x13l\x82\x99\x9a\x8e\xef\xb7U\xaf\xcc\xd6\xb4mf9\xc7ff\xad\xb7)o\\\x11\xe6\x82\xd9\x9a\xee\xec\xb6\x03]/\xaaO\x1e\xb6?\xe1\xf6\xa6\xe3v\xdfK1\xb7\xce\xac\x99\xc5\xa9&\xa0\xc3\xd5\xa7\x0f\xe8p:D\x1a&%\x1bm\x82\xca\x89IU_M\x8b(UA\x92t\x9e\xb15J\xe5{\xed\n\xb8\xd6\x88\x0d\xb4y\xdc\xd5\xcb\xab\x82\x7f\xb4\xdc\xc9\x84a\x8d\x8b\x05i\xbb@-p\xcb\xcd^\xc1\xbd\xce\xc5+\xb8\xcd\x9a\xbc\xe3L\xde\xc7\xd0\xf1@\xd6\xd7\xcb\x92\xa4x\x1eS\xd4\xd1S\x11\xe7\xfdF\xccN\xe1\xd4\x0c]M\x99xN\x932\x0e\x0e\xc5\xc45\x95\x8a$\x89N\x93K\x8d\xc34bz4\x00\xa8\\\x18\xe9\x1d\x81\x16\x01\xd5\x1b\xef4\x8c\x03\x1e\xf0\x87\x95\xa1\x82\x99\xdd<{p\xeaVn\xd63\x14r|w\xc8\xf6\x9ayUr\xe1[\xb3\x93\xfe\xb0\x85\xe2\xa9\x18s\xda\xfe\x99\xc7\xf6\xf9hQ\xc6\xef_\x86A\x10\x91\x0b?#\x8e\x1d;\x86\xc0i \x06\xf2\x12\xe1FNN\xde\x1e<{\xf7\xd7\x93g\x07\xdf\x1f\xbd~\xfd\xe2\xf0\xe4\xe0\xafG\x07\xaf\x0e\x9f\xbf~u\xf2\xf4\xf5\xcb7\xaf\x0f\x0fNNP\x87\xc7\xbcGsE$\x1c\x90\xc8\xc6M\x97\xd6D=\xe9!\xaa\xdd\xf9\x84\x12;b\xfa\x9ez\x98\\\xffS\xa5*wTf$6?\xaf\x8eXk\x0cO\xc2\xbdK\xd1\x1a\x05\xdfVN\xb5\xf8\x17?\x1e:\xadRk\xbce}$\x89\x0b\xd3\xee\xba\xbf'W\x13\xb0\xe8f\xd1\x19)\xdc\xa2\xf9\x05gTCC\xcb\xc2\x04a\xa6;\xdf\xe6\x90U\xe8\x81\x8dFLx\xc0hz}l\xd7\xd4\xa9\x07txp\xc4t\xb0\xf2\x0b=\xb0\xc9y\x80\x81\xd8&\xd0\x16\x0f\xe5}\x18t\x879\xa37\x1cJ\x91b\xc09\xfe\x1a\xc5JNC\xdb\xa8\x06KU\x9b\xdf\x94\xf1\xac\xf1-\xb1\x0b4\xa0\xd5y\xf9\xaa\x1aQ\x8c\xc0[\xfai-:\xd7jW\xe5\xa7\x1e@\xc7\xde\xb5\xfd\\;^F\x82rF\xec\x0b4\xa35\x0f\x957\xacA\xa0\xc0t4mTg\xeb\x02\x00^p\xfc\xc5qU\x8c,\x01\xb7\x06m\x1cH\x85\xfe\x03\x9a\xd7r\x1f\x00\x08\xfcF\x9b\xd6O\xf1\x9c\x07\x17U\xc0\xedX\x0b\xb7\xe3\xe6\xfd=>\xeeq\x0d\x07Nd&\xde\xc2\xcf_\xa0\xb7\xb6yD(T\xd0W\x19\n\xd3\xa8\x07T\xa9\xdf\x0b\xcf\x9f\x17${\xc1\x9d\xa7\x91\x83X\xdbt\xe1\xc0\x96J\x1cY3\x1f\x9bB:\x9a\xcf\x84\xdc\x0c?\x1e}\x1e\x12\xd52M\x14\xd9\x9f\xc5c\x82\xdc\xbb=`\xcd\x99dB\x18\xd1\x7f*\x07\xcd\x03\x00TY\x80\xeb\"\xfd4\x85\x95\x18\xb0z\xd3\xc5\xbb\xa1\xad\xf0\x18T\xba\xe3\xd13\x02\xceG\x16\x82K\xe2o\x06u\xfe|9\x81\xb9XZ}\xb5\xb7\xc4\x9f\x15\x93:H\xa2\x1as\nn\x8cqi\x12\xcf \x18\xc6\xe5\x96p\xce\xa7u{p\x92\x07\xa9\x8bX5xdw9\xb0\x01\xc2\x82!c\x87\xce\xf8\xbbo\x0c3\xcaW\x99\x91\x96\xb7Q\x0c\x14\xf6\x14q\xf7\x06\x0f\xab\x894\x07\x0c\xcdxE2b\xc4p\xef {(b`\x0bLmW\x97\x18\x9f\x99,.a\xbea\x8c|JN\x7fz\xe9\xa7\x0e\xbdA\xfa\x97\ndZ\x89\xf1\x18\x99fW\xb9\x87V+\xd6\x0f\xa9X\x93\x9a8\x1bB\xe6\xf7RH<\xc6-F\x82&\xd3\xf8x\x85H\xe0\x82\x10Y\x91\x0c\xe9J\xf8br\x013\xef\xa5\x9f\x9a\x19\x05\xe0\x84\x89\xcc\x15\xf7s\x93k\x99)\xc2\xb0\xfc\x08\x93\x80lZx\x94\x1d\x18\xd0x/\xa3\x0d\x12'u`\xc7\x8e\xc9_N~\xf8\x88\xab D \x97\x0c'\xc6/\xf5\xac(\xa8\xc4\xbe\xed\x07aO\x0d\x95\xc8\x0f\xbbm\xa8,\xe4\x08X\x9b.\x04\xde,Y\x9e\x86\xb18M\xb9\xc3r\xea\x9f\xf6&\xc97\xa3\xdf\xa3\xabt\x88L\xa8W\nC\xa6\x9b\xc7^\x91\xbcKS\x92=\xf5sb\xa3\x11P\x15+\xbeW\xec\x86\xa7\x9e\xcd\xcd\xb1\xf5H\xa2\x1aP\xacH\xe7!?\xe7<\xb6y\xac\xcc\xf8-\x1eTT;\xf28\x92&}\x9c\xc1:\xc5u\xa1\x9aU\xba\xcd\xa5L\xc9\x13A+\x0f\xd8\x80!\xb72\xdfN\xdb\xca\xab\x86o7@N\xef\xdfbx\x02\x915\xc7\xe7\xf3v\x07\x82\x05^\x06d\xc5\xcb\xa0\x03T\xc4`\xd6\xa2z\x1a\x02\x06\x8a^\x1c\x13\xa0\x14\x9dL\xe0\xf2\xa3a\xb5o ?j\xeel\xc0n\xf5\x9ef\xba]\xc3\x98\xd1\x06_\xa8\xf2W\x07\xdd\x86\xc6\xcd\xfd\xe8\xbfpi\xaf*\xac0\x8d\xeb\x0c\x0e\x1b\xf7\x9dc\xef\"\xf3S>\xa4\xdeK:\xe3\xf8U\x03h\x03\x04\xbe\xe2\x0e\xca\xa6q\xcf\xb5\xc6\xbbD\xe3K\x14\x10 A\x91\x9d0\x1f\x17\xb4UL\x8e\x1d\n]m\x9ad\xc8P@Z\xaa\xde\xa3\xd9~\xc4\xbd\x88\x87\xa3!\xaci\xa9:\x14Q\xc4t\x8fB\xbf\xd8~\x90\x90\x90\xcfY\xe6\xc8\x16\x89\x92\x87\xb2\xb4\xad\x10\x13\x12\xe4P$\x954\xaa\x96\xd2\x16\x0b\xbf\xe0\xafs\xf0\xb1\x91\xaa\xcc\x0e \x14\x0b\x02\x17\xec\xe4\x00CD\x8e\x0e\x11\xc9\x0f\xef\xe8\xc0\xcez$\xdd<\xf0\xe67\xbcO)\x88\x08\xbd\xafM$\x82\xb6\xf8n\xf1\xc4*\xd7\x8e Q\n\xa2\xce\x8c,\xb26\xb2\xa8%D\xfd\x01\x0e\x9a'S\xce\xa5\xa3J\xe7%?\xe2TN3 9<4)\x16A\xb87)qL\xc2\xd0J5\xf8^\xc4\x12v\x10K\xb1\xc2\xf0A\x16\xcaO\xb3a\x88\xc5\xef\"\x16\x9f!\x16\xb4x\xf5\x99M\xaa\x82\xd9\xe9\x1d\nH\x14\xd5\xca\x88\xa5\xb2\xbe\x0d\x15\x1c\x0d3Mb\x83\x0d\x1dn#\xcdlr\xc3GP\xae\xaf;h\x0e\xdd\xe0M\xca\x9e\xe5\x10\x8f@\xf1\xc8\xcf\x990\xda\x94\xcb\x8b\x9e\xc7v\xe2\x1cS\x8e{\xe6\x17\xb6\xaf \xad\xdb\xcfM\x10\\hBp\x02\xc0~?\x0c\x17\xf6\xa1\xb7\xc2\x80\xde\xd4<\x0e\x08\xf4\xa6a\x81n\x87\xdeP\xca7\x08\x99\x0d\x90\x94fM\x0b\x17\x15.X]^\xd0\x14\x08\x10\njL\xec\xad^\x0e\xf7v\xe2\xbe\xa6|\xfd\x1fg]\x06#\x16\xc1m\xb3C\xabr\x11\x15\xcf\xf5G\\\xe3o\xe2\x01K{c\x99\xe5\xc4+\x93\xc7z\xeaV\x83\x92\xaa\xb05<\xb6\xf9\xbe~\xf4\xd0\x96,\x8b\xb2[m\xce\x9d\xd2jJz\xaa\xd2\x98T\x14\x99\xb3\xa2\x84EEa\xf5RFz6\xb0\x97\xc1\xe1-\xf4\x1e/\xf9ix\x84u\xc9\x8f\xb0\"?2\xa7\x8a\xe6\xe4\xc3W\x90=\x02\x9f\x92\x1f\xe1\xd4o\x92\x1f\xfe\x00\xf2\xe3\x9c\xa7C=\xb0cAl`*$\x0d\xa9\x11\x1a\x93W\xf2\x87O^i\\\x81\x89(m\xd6c\xe9\xd8\x85\xcd\xa2\xca\x1b\xdb4X\xd7|\x14q\xc5] )\x08\xc6\xe6\xfa\xf0\xa1\xa3\xf1\x13jt\xf5R\xcah\xca\xab\x85[\xed\xc8\x1d\xe2Q\x9f\x18\x99\x84\x1f\x80nl4(<\x0d\xc5\xbc\x9ff\xc4\xa7\x07\xcd\xa9\x10\x17\x90\xc1\xa6 \xd2\xc6\xd7\xce\x8b\x85\x99\xcd\xe8k\x1a\xe4\xeb\xb4\xe8\xb3\xe1\x82\x017\x9b\xfc\x08\xe9\x1f\x05\xfd~\xf8\xd6\xbb\xff\xb7\x1f\x94(\xdeB*!\"\x06\x0cZ\x1e\xe0\x1d\x0e\xabI\x1f\xba5\x138\xf7^\x1d\xfcpr\xf4\xed\xdb\xd7?\xbc:9x\xfb\xb6_\x03#\x1e\xcc\x80\xa0\xcf\x92\xa5zR\xff*J\xfc\x80\xa5\xf8Y\xc8j\x84AM\x98\xb5\x1bX\x03\xe6a\xecG\xd1\xd0-\x12@\xd5[\xd9\xdc\xb5\xc9\x02\xb0p\xb42\xd7[b\xaa\x97~\xca(\xe8\xe4M\x96\xa4C\x90\xd5\x10\xf9\xb7\x11\xcf\xf4\xb6\x04M\xac\xd2\xb2\xe3!\x03H\x9a\xdb.\xc93\x8e^\x87\xaf\xca \x92q\xd8\xb2\x0c!\xee\xec\xa6\x87\x02\x8a\xe5\x0dVL\xc8\x81\xd5VG:P\xea[\xb6c\xfam\xf5\xea\xdaV:\xaa\\hCG\xddZ\xc5\xab2\x02-\xd4\x0d\x9b\xac\xa2\x1b\x0d\x8fT\xde!\x0dA\x860\x03\x95\xb4\"\x83\xea\xcbF\x9a\xcd\xea\x05\n\xd8j\x96\x04)\x9a\xd6\xd5\xd6\xaa2\x80Z\x15T*\x91\xc8r\xe6\x1a$\x91\xf0*\xf9\x1a\x067\xe8H\xe9\xf7\xc1n}\x89&\xb6\x9c\x8c\x9b\xc6\x14\x18x\xf4\xea\xf6`\xa7\xd91\x86\x95\xc1yu\x1b\x99&.\xc4\xc7\xc6\xaf\x9bp\xa7\xd0\x19\xb7\xbe\x91\x13\xfdk\x9a\xd5\xba\xee\xcb\x8c}w[\xdb\xbb\xaa\x8a\xa1Y;\xddC\x18\x9b]B\x98\xa261$\xe5ow\x18V\xa9\xa3\x1aoe\xd5\x8f6\xc2.\xc8\xb2\xd5a\xca\xa2j.%\x9d\x8b\xdfG6\x9c\xf3,K~\xaf\xa8\xb2 `9\x93\xd6\xd2O\xa7\xf9\xb1+$\x9fye\xb1\xde\xd8\x96\xee\x9bir\xac|)O\xb2\xb7\x02\xed\x13\xe3z\xf4Ub\xf3\x13\xb0\xdfW\xdd LU_\xf2}\x88W\x8d\xf4I#2\xa1*J\xc4\x81>Z\xc6\xaa\x9e$*\x9c\xe9xQr\x86\x02]\x850$\x96\x93\xa9\xef1Ij\xcb\xf7\xc3D\xec\x0b'F#\xb1\xa0'\xa3\xa5\xb0\x98*N8\xab8\xe1B\x84\x12\x7f\x04 |\x05\xc5#H('\x9cQ\xf8\x92W@wb\x05\x82GcpN\xa7\x13\x17\xa6\xf4\xba\xaf\x00&SY\xae\x0c\x8d\xe5\x85\x11C\x9a\x19\xc3\x08\xcfE\xd7\x036\xd7\x7f\xe8\xfe\x92\x13\x8d\x9f\xe0\xdb\xdeX];[c\x85\x17\xb0\x9c\x14\xa9.U\x07\xc8S{\xca \x9dE\xdbI\x99\xb4\xa3\xca_\x0f\x19g=\xae\xf1\xa64\xdc\xcc\xce0\xcce\xc6b\x86\xb2|7\xda\xb8\xa1\xedX\x9e\x98+\xc5\x9b\xd7#q\x86\x0c\x85.\xd9\xb6)\x87\x94\x9f\xe7\xe1Y<\xa4\xa9\xfeY\xe9'\xc3z\x99`\"\x98-g\xc59\x98\x93\x0c\xc9\xa7\xf2Z\xbd\xfb\xd9\xed{\xa1\xeb\xd8\xf6\x9ef\xb1\x055\xc1\x1a\xb7\xd4\xb9\x8cv\xb6\xdaYyJ\xcc\x1aP\\$O\xf8\x01\x7f\x93$\x11i\xa5{\xc3Yx\xf3\xa4\xccL\xb5\"\xd8\x83{?\xde[\xbfw\xa6\"\x86gZ\xbfi\xdb\xb2`\x1d\xd0\"\x13MG\xed\xc8\x05\xeb\x8b/\xefYf\x94>W\xca>Q\xd0C\xeb\xf0\xfc\x1c\xf4\xcfY\x12\x17\xe4\xb2`1<\xf9\x9b2\xa6\x7fo\x1a{Hu\xe7Ul\x0b\xc1\x9e\xba\x18_\xd0\x9e\xd8m\x0b\xd33_\x99\x84\x19\x0f\xb1\x81\xac\xaf\x9bg\x1aHaI\x94\xf3\xcdH\xce\xf0\x98\x98\xf1{r\xf5&#\xf3\xf0R\x9a3_\x94\xb8\xb3(\xd9J\x8b\xb2\xe8_\x146\x9c\xee\xb2\xf8XZ\x8d\xad[\xa14\xaci.\xafi\xb7\x98\x02_\xc9\xd66o\xadms\x03\x9a\xc4WD\xa9\xfbs\nq\x19\xaeo\xe8\x15\x0b\xbfx\xcb\xd4\xac\x02\xd8)\x05\xcf\x13\x9e\x02\xcb\xe1\x98xa\xfe\xbd\x1f\x85\xc1ADh\x0d\xda\x0e}\x1f1\xc6 Jb\xf2$\x0e\xde2x\xfe3\xb9\xa2\x1d\xf8\xb0\x0e\xf6ZD\xe7\xcf\xe2\x9e MF\xff\xa2T\x01{\xbf\x0f\x96\x05\x13\x98\xd9\xf8\xa7\x03\xeb`\xdd\xb3\x1c\x0cU\xe8\xb8\"\xf0n\xe4\x98\xc1\xe5\xdc\xee\x0f\xcf\x04{`Y\xcd\x85\x113dq\xb9h\x8d\x19e\xc0\xd9\x10\xba\x1c\x03\xdd\xab\x802\xd2\x88\n\x02\xbb\xc0([\xd8a\xb3\xb2O\x87\xb3p\xa1\xa4\\\x92\x97\x91\x88\xf89\xb1K\xf3\x1c\x96=We\xe3\xce\xaf\xef\xf4\xb9\x14P7 \"\x95\x81I\xcd\xd88\x1a(\xaco\x9d\x8e\xc6\xcb\xce\x01\xa1\x9b\xe2\x07\x01]\x830>;J\xec\xb9\x98\xe8\x8d\x06R\x1dd\xa9W\xf9,K\xaf\xefp\xcc\x81\x0by\x8b\xae9\xeb\xc8>\xe7Iv\xe0\xcf\x16\x93^b\x06\x84-7\xb3\xb5\x96\xa2\xac+\xec\xc5\xabk\xb4 I*\xb7f\x84\xa3\x94\x85\x84\x9aWp\xd4\x8e\xc3\xdc\xc4\x0cK?\xfdH\x03\x9e*\xa8`\xfe\x15\x9e\xbf\xcc\x15\xbb\xc0\x9c\x8f\x8diJ\x96~\xfa<.\x92\x1f\xc2b\xf1g\xb1\xdb\x98?5\xf6\xa3 \x9c7+\xe3\x8e\x0e\xd0\x00\xf2\xd1\xe0\xb2-\xd9h\x8ckU$\x88\x12\xfb$y\x82\x95\xe8[\x80B,\x80\x1a\xa5vRg\xd5\xf0\xa9\xa6\xa2\xce\xf0\xed-\xa9\xa8\xd1f\x9b.\xc2\xc0\x7f\xb1\xfd\xc0\xe9\xb34\x16)U<\x91R\x85B+g\xa3\x86H<\x9b\xdf\xa5I\xda\xa3\x83b\xa7\x17\xfdjY(\x16Epr\xdd\x06\xc4\xe4\x02\xbf\xef$gP\xd0\x8a\xe6Y7R\x85\xd1&1)\x8fm\x8dw0\xc7\x85\x84\xdb*\x1fN\xc5\xfaPv\x92\x16\xa5I\x12\x1d\x86?\xd7n\x9d\xcd5\xa1\x97\x9b9\x9d\x04\xa5 \x92.\x01\xdb\x1d\xb7\x8c\xdf\x06\x9c\x15\x90\xc5`\xc6m\x89\x1bc\xe61%\xe3\x1a{\x01g\xf0}\xfa\xb6\x9a/K\xc7T\xfd\xb9\x07#L\xc6$\xb0\x18\xec\xd1\xbbS\x91\x9bIAZ\xc6\xa4I\x83O\xda\x0bB\x9f\x0e=?p\x0dn\x02\xe4 \xad\xddJ\x80\x0e*`\x8fyl~\xd5r\x80\x12\xe6A\x05\xf7\x9dT\x15\xa0^\xceb\x91\x91\xce\x82\x0e\xb90\xe0\x96\xab\x95\xdd\xc9je\xae\xf0\xcb\xeb\\1\xe2\x19\xbe`\xcax\x1e\x8a5\xeb\xf2\x81\xdd%3\x98\x91\xdcf\xd5\x92;Y\xb5\xa4Z5FM\xa8\x9d\xc0VZ\xb8NB\x88n\x0b\x9a{\x8d\x99k|\xac{m\x9b\xa5Z\x1e\xef\xdeW\xc5\xa2\x8b\xed\x9d\xadv\"]\xbf\xbe\x10c{g\xbb\x13^\xaed\xe5\x0f\x1d\x17,\xaf\x9d\xc6\x95N\xc8\x9aX\x9ax\xc5\n\xc4#\x08-\x0c \xd2\xcdx\x80\xef\x05cB8\x8b\xe4{$\x9f\xf9)\xb1 c\x92&\x18Z\x9e\xe5Q\xb0\xb7v\xdb\xd22\xb8\x990\xae\xa2\x06y\xdc\xccj\"\x84\xc7w\x9a\xb90\xd7\x11H\xa9\x8bq\xf2\x84\xb9F\x1761_I#05\x86\x91\xfd\x12\xacSz\xa2\xfcX\xbc\x12YP\x90|sk\x07F\xbcd,\x16\xab\xd9\xc27X\xd7\x8a\xcb\xe5)\xc9\xe47\xf5\xaa\xf2.\n\xef\x8b/\xf8\xc8\xd0\x15\xb2\"wg\x94{)\\\xca\x83\xb2\x00\xcd\xfbP\xc2: \x05\xb2\x89L\xb0\xe3\xc2HM\x13/0\xc6\xa5\xf2\xc8\x9c#\xb3)59\x81\x18\xd6A\xa1y\xa1\xab\xd2\xe4\xcf\x0b\x8d\x06\xa1\x92j/\x99\xc4zII\x8c*\xbc\xf6r}\xdd\x81\x05\xac\xef\x01\xb1S\xba\x0f\xd3\xe5\xb1\x0b\xe78\x97\xd4\x85\xa5\xc3w\xaf;\x02Ml[\x90\xd8\xa2P\x99\x8d\x10\xf8\xf0\xcf\xfaP\xd8\x95\x8b\xd1\x04\xcf8m\xd7\x13Z\xe6\x0c\xc1\xa0\xf0H\\d!\xe91s\xa9\x16\xe5\x84-\xca\x9a}\x05{p\xea\xc5\xe4\xb2\xb0\x1d\xc7\x0b\x12L\x1d&-\xcc\x15K;#\xad\xcd\xc9\xfa\xba~u\xc4CW\xa9\x7f$\xda\x01\xe8\x17H\x91i\xd2\x8e\xe1\xae\xcdSU(\x92P\xdd\xc1\xca4\xc7\xca\x0e\xc2P\x0e_\x0d\xc6\xd6\x9e5\x01koS\x03\xc1\xd6\x04\x8b\xc7V\x17J\xb4\xf2\x02\xeb\x0b\n\x93\x1d5\xc0\xbd\xe9\xde\xe4\xf8\xdeY\x1fc.5TL\xc9q\xb7_#GY\xc6w\xb3(\x9b8m\xdd\xa2\xec\x8di\xf1d\x95Ea\xcba[\x1e;\xccd\xba\x89\x1az\xbaV\xeco\xd4D\x13//O\x19\x15`\x8f\xd1\x97Pz1r\x1ci5\xed\xbd\xcd\x0f{c\xe7\xee\x17\xb4\x86W\xf5\xd9\xb9\x13\xfd\xd7\xfd]\x87\xc7\xe8\xfc\xc6\x9f\x15Iv\xd5=\xc5\n)\xc0\x84\xa2H\xbfM\xa5b\xd1\xe9i\xc6JOO3e\x85 \xc8H\x9e\xb3:\xec\xb7\xb2ZFx/\x19Qw\x94\x15\xe1,\"\xbc\x0e\xfeVV\xcb\xc3\x80W\xa2\xbf\x94U\xca LX\x15\xfaKU\xe5\x14\x8bO\x95E~\xce\xda\xa7?\x94\x15\x82\x90\x95\x07\xa1\xba8\xe1\xc5\xea\x9e\xc33V\x1c\x9e)\x8b\xa3d\xf6\xfe\xefeR\xf01T\x7f*+'\xc1\x15\xab\x96\x04W\xca\nl\xeb\xd4\x1bwZ\x16E\x12\xb3\n\xf8SUi\xe6\xc7\xe7>\xdb\\\xf6S])\xa5\xe0\xcak\xe1oe\xb5\x90\xcf\x8a\xfePVH\xf8\xd6\xd2\x1f\xea\n\x11/\x8f4\xc5gYR\xa6\xa2\x0e\xfe\xa1\xaa\x18\xf8\x05\x03F\xfaCW!\n\xf3\xa2\xaaD\xffPV\x0cX\x95@YH\xd8p\x03\xa2\x1cn@\n?\x8cr^\x05\x7f+\xab\xcd\xd9\xca\x06s\xe5\xaa\x06\xa1\x1f%\x0c\xa6\xd8Ou\xa5s^\xe3\\Y\xcc\xc7\xa9\x1e&_\x05\xe5\xfc\xc9\x12\x0b\xc9R]xJ\x02^~J\x94K4\x0fI\x14`\xd2\xe7\xcc\xb6\xc4\x1f\xea\x8ag2\x98\xd5\x7fj*\x97\x19\x11\x15\xcbL L\xf3$\xc1\\\xb5\xff\x1f{o\xda\x1d7\x92$\x08\xbe\xdd\x8f\xf5+\x9c\xf1\xaa% \x03\x0c1H\x89\x94B\xa2\xd8J%\xb3[\xdd\x99\x92FRVMw0\x8a Fx0PB\x00Q8xdQ\xef\xf5\xcc\xec\xdc\xf7\xee\\=\xf7\xd9\xb3;\xf7\xb1\xc7\xec\xce\xf4\xf4\x87\xce\xfc#\xf3\x07\xf6/\xecs3w\xc0\x017\x07\x10$\x95U\xbbo\xf1\x81D\xf8\x05wssss3s3Q\x08^\xe9B\xc9R\x16I\xc81.\x86\x90\xbd\x18\x92\x99\xdb\x98\xb9Mf\xee`\xe6\x0e\x99y\x1f3\xef\x93\x99\x0f0\xf3\x01\x99\xb9\x8b\x99\xbbd&\xf7qB\xc4\x8b\xad\x80\x04\n\xbe\x92\x85\xcaU\xb6\xb0\xae\xb1\x85l\x85n![\"\xca\x89\x17\xaa\x00\x92X\x92\xc0\x06\xf3\xc4_\xe2\xe4\xe2+Yh\x89K\"X\x92\xeb!\x88V9\xe2\x1c\xbc\xd1ERY\x80\\\x95\xefO\x10\x90\xefOH8\xbe\xe7\x97\xa7\x1cQ\x15_\xa9B\xa1\x7f\")\x04\xbc\x91E\xf8)\x8f\xf0K\xf8J\x16Bh\x85$\xb8\xc2 z/\xb3\xa3\xf7T\x81\xa5\x1f`G\xc5\x0b]`%\xf3\xc9\x89^\xfa\xc9{\x99\x9f\xd0\x1f\xe0Q\x8e\x05x\x94\xdb\n\x04\x99$%\xea\x07]P\xd2m\xf1b) \xb1\x17\xde\xa8\"\x91\x8f\xa40\xf2IR\x18\xc5\x18M\x19\xcb\xc8\x1fTA<0B1y\xac\xa5\n\xe1\xf4\xd2\xdbU\xbc\xca\xca\x85\xa4~X\n*\xba\x17[i^\x9cg\n\xa7\xf1\x95*\x84\xdf\"?\xb2\xf2\x13\x1fg\x00\xde\xc8\"\xc14StU\xbe\x93\xc5T\x11[v|Zp\x8c\xea\x07U\xf0gP\xe2gTV\x82\x03I\xc8\x91$\x08\x85\x84\x84@\x92\x9f \xcf$^\xa8\x02\xd8/\xb2C\xa9\xbf\xc4\xef\x8a\x17\xb2@\x89:v\xc4I\xf9\xb4\x98N\xf9N\x17\x0b\x15~\xe1+Yh\xe9\x87\x88b\xf0F\x16\x89\xf3d\x8a\x13\x82\xafd\xa1\x95/;\xb4\xf2\xe9\xdedI\x1c!I\xc5W\xba\xd0\xa5d\xe0\xe1\x8d,\x92#\xeb\x9d\xe6$\xf3\x9d\xe6\xcb\xa5\x9f\\\xca\"\xf0N\x17\x93\xf3@\xaf\x97\xcc?\x91\xfd\xc80R,Q\xa4\xe0\x9d3\x1b\xf3\x9c!\xd9\xcdH\x92\x9b\xf1\x8b\xac8\xd2\xa8\x1fdA\xc1[`)\xf1F\x16Y`\xfe\x82\xceT[vf\xdb\xb3\xb3@n\x87\xe2\x85.\x90)x\x887\xb2\x08R\xcd\x8c$\x99Y\xe2O\xdf\xcb|\x7fJ\xd2x$\xf0$u\xcf\x11As\x12;\xcf|\xfc\xf0\x99O~\xf9,\x98qW\xfc\xfa\x9c$\x11<\x0c\x83\x95<@\xcaw\xaa\x18\xae$\x9a5Y\xfa\xa7\x92\xbb\x11oT\x910\x88\xb0\x84x\xb1\x15\xf0\x93_K\xfcY\xc0\xa3\xac(Z&Q\x95\x96~\xaa\xf6\xf1\x94\x9c\xe3\x95\x82\xd0\xca\x02\x9d\x95\x9fe<\x89T\x19\xf1N\x16\x8b\xc3\xcbSI\x00\xe5\xbb\xadX1R\xf5\x83*(\xc6\xe4\x87\x95\xd1V\x93\xc8J\x8a\xb8&6\xd2\x9a\xc5\x92\xc8d1M\xec\xcf$=<#\xe7Q\x10\x85\x82:\x90\x05\n\xa2\x9b!\xd5\xad\x94\xb0\xc8\x88P\x05{\x0b2\xa2\xaa]f\xb5w2\x1a\xfb\xae\x1e|\xac\xd2 eMv\xc3~\x18\xc6\xd7\xf8\xe1\xba\xe95j`)\xfdk\xe4\x0c\xeb\xe1\xb5r\xd9\xf7zq\xb4\xa8\x7fp\xff\xbeeL\x8df\x1f\xcal\xe3&\xf2s&\x8doi\x19\xba\xfa\xcaT\x94x\xf2\xc4\x8f\xe2\xe8r\x19\xe7\xe9\xd3\xa7\x84\xa8tn\x95\xaf\xfah\x99v\xe6\xf4\xe0\x8dB;\x06\x82#\xc1\x98\x9e9\x85\x12\xd5RN\x0c\x17\xca\x15\xe3\xb6\x14Dm*\x14\x95\x8aUKA\xc55\x9f5q\xcd\x0c\x19\x8e@0\x1cg\x8eR\xde\xda\n\x02\xd0\xb1 \xbc\xda\n\xfa\xd1\xe5\x88-\x9cD7\xb3{ \xdab;(_\xcd\xdb\xe4\xdd\xeaQ\x9a\x9c\xaa\x7f\x1fk|\xcc\xfaS\xd3wh\xb7\x9a\\\xdd\x94b\xe6\xf4\xd4U\x13\xf6u\x8f\xf5!8j\xefk\x16\xcf\xcbx]\x98\x91`\xc6\xc2OY \x03\x16\x8b\x9a\xef.W\x9cEq\xe6\x83\x8a>\x88\xd2`\xc6\xd5P\x07m~\xb0\xce\xe4\xbd\xc0\xac\xd5\x99#\xdcn\xad;[k\x83\x01\x93\x9f\x00+F\xc7\xef\xee\xf4CBF\x05f\x16\xc3\x8f\xc5\xf0\xeb \x12 \xc5\xb4\x14\xd3\xd2|\xb5\n\x03>cY\xacC\xcdc\xfcb\xc5\xa7\x19\x9f1?B\xe8\x0c\x08g\xb1\xfa\xd3|Q\xbfP8\x87\xa8p\x0e\xd9\x13-\xc8u\xd8\xefw\x05\x0d\xdc\xd6p|\x8f\x85\x05f\x89\x1e\x8fE\xdfC\xf16\xe9y,\xef\x0091AS\xddf\x11.\xe5\x95\x16\x0e7\x18,ey^\x7fl>T\xe8\xa5\xc8q\x93\xea\xe0Q\x80\xdd|%\xae\x89\xe4|\x0d\xc4\xce?>b\xe7\x9d\x11\x9b\xa5At\x1ar\x8c\xbf \xd9\x80\x9ba\xf9M&\xde\x16^Ja\xe8\xf7J\x887\x1cp\xba\xa6\xad\x0e\xdey\x8e\xf1\xeeN\xe4/\xc1\x98\x95\xb8\x9fC=y\xab}\xb1\xedA\x1c\x1cL\xe3\xa8\xb8;qu\xc5\xaa)\xd0\x9bri\xb7c\x9fz\x94\xd1\x99\xd1X\xa7\x16>\x00\x14\x7f)\x90]\xcd\xa4\xa8\x0e%|(\xf1\x8bCw\x0b\x17\x05\xfa\xafk\x12\xb9\xc6\xbbL\xf5\x07\xd0f\xe9\xf0q6q\xeb\x0c\x86>\x01I9\x01\xb1\x05\xd8\x91IY\x80\xa4\xbc\x8cg\xbc\x95\xa3\xb8 \x0cm$\x03\xf9\xca\xef\x95`\xfc\xc2875\xd6V@\xeb\xbbZ;M\xea\xc6\x81UL\xba6*\xf1\xec\xd7_\xcb\xebpd\xf8\xcd\xd61k\\\x17\xf8\xa5h\x1d\xb6\x18\x90?X\xf8\xe9\xab\xf3\xa8\xb8[\x1ev\"\xfd\xac\x99A\x1b\x00\x83\xd6\x8d5c7e\xcf\xd8/\x80t\xc5\xd1\x1a[4q:\xd0<\xe5\x18\x07\xb4\x06\xbb\xbe\x9b-\xdd\x02A\x8a\x95\xa1{X\xe6\x05\x83\x9e\xeb\x17\x8fm\x8f\x18\xd4J\xcc<\x07\x7f\x1e:\x8c\xdb\x97\xa6Xp\xbf\xf1\xf6\xd5\xcb\x01\x9eu\x83\xf9\xa55\\\x80z\xd6\\i`\x1f\xaao~\x1d\x96Z\x1c\xc1\x8eY,\xcf\xa6\xfd\xf2\x1a\xe8\xf2\xee\xb2\xdd\x9cL=\xb7\x862\x157\x1f[\x8fYV\x99\xe9\xac\xfd(\xa6dAb\xef\xec@\x1f\xa9\x9d!*:\x1e8\x1bC\x8f\x15\xb3\xa7\x9c\x87T\xe6\xa6\x80\xd5\x80\x1d\xd6\x8f\xa5\xb0},\xf8\xf4}\x01\xc6\xd4c'y\xc6\x12>\xe5\xc1\x19\x9f\xb1_I\x99\x9f\xb1 \x9a\xf1\x0b\xf6+\xe9\xa0\xe7\xb1\x13\xf4\xed\x05\xf7\xa4k`\xb3\xcf\xee\xf7\xb2\x04\xa5o\xd1r:\xfc\xf6\xe9`\xda\n\xe2\x9d\xbc\x8f\xeaWX\xd3jo\x05\x81v;QG\xd6\x99\xc6vY\x9f\x96\xa5x{\xeb-]t0\xddT\xcf\x0d\xa7\xf4\xff;\xac\xc6\xd7\xf8\xc5\xaf\xd7\xe44:\x1d\xe0\nfa\x1cv\xc4\xd9i\x97f\x99lz\x0en n\x85\x0f\x99\x17\xa0\x9e\xb7\xd6i^\x12\xdd\x16\xcc\xed1%\xfc\x02BK~oX\x9fv\xc6\xfa\x10\xb0\xbe\xee`\xae\xfe\x18X\x1f\xde\x00\xeb\xc3[\xc7z\x85\xc2>:\x93\x04\xfe\xa9\x8dk)V\xca\\\xac\x94N(-J\xaf`\xa5\xcc;\xae\x94\x8d\xd5zpz\xcf\xe5\x99l\xdeL\x8e\x8f\xa2O\xfdY\xa1\xc2\x10\x195\x9e\x0da\x80\xd7\xf9{L^\x139\x8a@\xd3\x06\xb7J\xc8Z\xfa%\x13\xe5\xa7K\xd6\xef\xb0L\xcf\xe4\xa5\xb2\x95\x93zln\xae\xf6y\xb7\xd5.\xe0\xb6(\xc0\xb6\xf8\x05\xadc#\xf5\x83vE\x92\x99>\x87(\xfcQR+y\xfd\xef\xa0pR\x7fu\xc5\x86\xec\x1ed\xc0K\xc6F\x8c\xc3\x85I\xb8\xed\x07\x0cZ\xa5\xb5\x0f\x96o\xcfhJ\x02\x17g\x97J\"\x81\xe8\x84\xe2=\xf0\xd8\x1c`\x92\xa37\x1ep\xb1\x13#+\xfa\xdc\x0f\xc3 :-D\x0e)\x83\x95\x03\x8e\xb9\xd9,H\xf84\x0b/Y\x90\xb2(F65N\x04\xd18\xb9\x84\xc0*_\xaf\x92x\xb5)\x88N\xfa5[\xf9\xd3\xf7\xfe)\x1f\xb0\xafR\xce\xbe.\x1a\x1c\x00\xc3Z\xfct\xdc\xaf\xc5:\x9b\xfaa(\x9aX\x0e\xd8\x1b\xee\xcf\xd82N\xb8\xe0\\\x17Y\xb6\x1a\xdd\xbb7?\x19,\xf9\xbd<\xe5\x9bP{\xb3\xfc\x8eu\x91hx(f<\x19\x07\x13v\x007+\x8b\xcb\xa1*\x0d\x89\xc4\xbb\x05/\xcf:\x15\xa2\x19\xa4`\xe5(\x18\xef\x94%\xfcgy\x90\x80TQ?O!\xdf\x1dd\xa9$\x067b\xdc\xa9\xe0H\xdb\xa5k\xa6+\xe61\xbc3\x92\xa1\x0d*\xb4^\xba\xd6B\x1co\x10\xd7\xdd\xd5#\xc6\x10c,\x91\xa4\xdbm\xee\xa4v\x9b\xbb\x8b\x10\xe11\xdb\x80\x10\x91A\xed\x16ucMV\xeaBb\xbcB\xadM\xe4\xd0\x0e\x9a5nvS}\xea\xc8\xf5\x82\x17\x9f\xae7\xbbAx-\xf0cc\xe9\xf8\xe3\xe1\xa4\xd3@X\x17\xd9\x8e\x0d\xa3\xa5[\xd8\xf6\x05k~\xbf\xeeu\x96&s\xa7\xcdWL\x95\x9e\xc5\xba?\xd5\xe5\x85\xec\x80I\xbb(\xe0\xfc4\xf1\xfa\x1b~zx\xb1*\xef\x81\xf7XGG@\xf2K\xca\xf4\x08\xaf\x9c\x82;\x89\xb7ZJ6\xee\xfd\xea\xaf*\xd7\x1b\xef\xfc\xd3\x1e,\xe0\x16k\xb2L\xef &\x9bpD\xa7W\xa2\xe3\xaa\x07\xf58r6\xe0^\xda\xddwiN\x98a,\x05\xb5+UZx\x07\xd9\x84\xbc\x9a\x9bSR~m8\x01ht\xb0T\x99\xa1\xcf\xfcL\xfb\xfa\xcc\xcfx\x8f\xc6J\xa3&\xcemY7\xe1\xa7\xfcbE\\1\xb6\xa1Q7x\x9e4#+-\xd0/v\xec\xe6\xad\x1a\x91\xb6i\x1bn\xdd\xf6\xd4\xe8\xfd\x088\x9b\xc6=\xb4y+\xc620\x03M\x05$\x98;\xf4\xa8\xa9C]iL\x9b\xd3\xb7\xea/YIs>\xc9\xf6Q\xc5V\xa6xl^;\xa9\xb0}\xc1J\xcf\x07z\xc2\xdc\xd3\xa4b7\xf0C\xd0\xe4x\xa7P\xe9\xdfR\xfb\xbd\xe1\x83\xc1\xee@z\x1e\xb8Vkg\xa5\x8f\xe9\xdd\xfb\xee\xa0\x88\x98@Y\xf3\xb6\x19\x1b\x07\xb2\x9d\x07\xa4}\xef\x83\xfb{\x16\x83]\xdfQ\x92\xb9\xdb\x18\x87aG\x8c\x9d\x1fn\xd3n\xa3\xeb&\xca\xa2\xb3\xbdep\x11Di\xc7I\xad/xuf\x19\x13\xd2\xc3\xd4j\xef\x8b\x9f\x1c\xb1\xdeg\x87\x9f\xbfxyx\xfc\xe5\xb3\x97\xbfe\xf1\xad\x90f~\x16L\xbb\x95])\x0c\xefTZ\xfaS]\xa3\xc2\"\x08g\xcf\xd7\xadu\xca\xb3\xcf\x90\x1a@\x84\x9dj\x9d\xe3/\x0f\xdf\xfc\xda\xe1g\xf6\xaa/\xa2 \x0b\xfc\x10\"\x17\xadY\xf5\xb9\xd6\xddu\xaa&<\x82\xbb\xb4\xaa\xc6\xab\x97\xcf\x0f\xad \x94+\xe8\xc7A\x18~\x89\x8eK;\x80\xa4\xa8\xf6Y0\xbbF-\xf1\xb17\xa8($@j\xc3\xa3E\x9c\x0bp\xc86\xbeZ\xcd*\x10\xed:\xc8z\xbd.\xfd\xfd,\x98]\xa7\x1a|.Zv\x86\xcfW/\xdf>\xfb\xfc\xf0\xf8\x9asB\xd5^\x1b\xc8T#k\x0c=\x87\xa2\xc5\x1c\x8dX\xef\xd5\x8f\x0e\xdf\xbcy\xf1\xd9\xe1\xf1\xa7\xcf\xde\x1e\x12\xbc\x8f\xd9Nh%:\xb0\x10\x93\xe0\x8c\xcf`5}\x9e\xc4\xcb\x86\x15\xd9\xe5[S\xeb\xb7fA\xba\n\xfd\xcb\x97p\xe3\xbb\x13G\xce\x80\xf0j\xf5X]\xac\xab\x1e\x8b\xd6H\xd1\xd4\xce_\x13\x1cgK(\xb9B\xed\x11\xa1\x9a;\xaa\xb8a\x8b\xfa}W\n\xb4\xc7\xd1d-\x15\x17AJ;\xf7\x9b\x0f\x8c\xda\xe2\x88.C\xa6\x19y\xa4\xabP\xd6\xd0\xb5k\xf7\xca\xd2\xa1\x1b\xf4\xc5\xd8;\xd6\xe8N\xad.8\x13\xaa\xa7\xed\xb3\x85c\xa4B\xcb#\xb2\xf4Z\x08\xa9\xed\xc6kt{\xa5q\xa9\n\x84E\xda\xba\xf0+\x98\x87\xce\x1d\xd8\xe8^\x94u[C\xac\xba\x8e\x82\xa8\xbdU\xf5(>\xaf\xdd\xa6_=\xd0\x9f\xba)`\xd4\xd9\x14\x90)\xb1\x97\xe0\x16A\xd3\xd9\xed\xb3\xe2 \x9c\x8d\xd8cw\xc1\x88\xf6y\xe8\xa7\xe9\x88\xfdV\x9c3\x1f\xf4!\x19_\xae\xb2 :eY,C\xcf0\x9f%<\xe5\xc9\x19\x9f\x01\xa6\x88\x9ez\xec\xeb_I\xbf\xf60\x16>n\xd8\xd1\xd1\xdd\x8c\x9dp\x06\x11\xf2A\xb4\x0b3\xdac\xef\xf9\xe5\x80}\x86M\x05\x19\xf3S\xe6G\xa5\xc1\xb4j\x11R\xb8?{,\xca\x9c\x07a\xc8\xd2L\xfc=\xe1\xcc\x9fNy\x9a\x06'a\xd1\xb8n.~\x97vRo{\x94\xd8\x0b\x80\xd6A\xea\xa5\x1e\x90~\xad3;L\xe3\xb9Cs\xa2\xd9\x01\x0b\xc7\xd1D\xca\xe9\xbb\xf7\x83\x95\xa7\xcb\xc0\xa1\xb6C\x10{\xe4\x1e\xebu\x9e_1\x95\x02\xb2\x97q\x9eh\xb6\xc2\xa0 \xcb\x16~\xc4\xe2h\xca\x07\xec\xdd\"H\x05\xe4\xe7a0\xcd\xd8\xd2\xbf\x14s3\xcb\xb9h\xc9\xc7Mm\xd0C\x07\xc8gq0s8\xc6\x95_\xc0\x8b\xc7\xa8\x80S\xb6\xa7Y\xff\xab?\xf2#\xb4\xc7\xe5\xfa\xd3\xde\xac\xbd\xc4\x07\xa42\xeb\xd04?\xcf\xe2\x93 \x9aU-\xee\xd7PA\xd3\x81u\x98f#\x98\xd6\x11+\x13\x88\x95\x8e3;b\x9d\x10U\xee\xdc\x11\xc8Te\xe1\xd0Ml\x05\x8f \x12\xc2\xdc\x9fr\x1bB\xc5g`\x87Q\x9a#\x86eXj\xc9\xb3ENDg\x9f\xe5Y\xfci\x10\xcd^\xfbAb\x89TY\x8dR\x19\xd5\x97\x99\x0f\xcbl:@\xee\x1f\xa6T\xbe\xbb\xa4\xbfw\xf5\xc0\x1c\xd7\x1bC\xbb\x8a\x1cC\"\xb6\xedJg\xf2^h4\xce;X\x8e\xad`\xd8\xc6\xf7\xda\xf5\x80sg\x85!w\xa6fm\x97M\xc7\xf9D\x0c:li\xa9\xc1\xef\xb3\xfe\x881\xcd(\x02\xd8\xd6S\xd6d7\x0d\xc6+\xe0\xac{\x05\xb7\xdc\x86H*\x06\x8a\x92w\xdb\xc1\xc0P\xbfmR\xf4\xe7L\xba\xcfN[\x03\x96\xeaO\xe0\x80\x13q;\x13\xb0\xac\x13@\x99\\_\x81_E\x85\x11\x81 \xd1l\x15\x87\xc1\xf4\x92\xfdJ\n(\xfd\x9e\xc3\xeb\xf9\x82G\xb8\x02O\x81\xdd,\x96\xa6\xa8\x02\xc4x\x89\xb3\xdf\xd0\x9d\x03\x96`\xe4\xd2\x85#^\x042\xb0\x11\xd5C\xf4\xe0\x8be\xcf\x8a\xb2\xdd\xa0/\xddA\xcb\xda\x1d8+(\x1ec\xd0\x93\\|\xc7+*7\xd6m\xe0\x15\xcc-\xbe\x13\xa1\x9fY\xf7\xfb\xea\xb1$p\xa4AY\x83\xaf~\"=\xf3Xo\xc9\x93S\xaeB\x1c\xbd\x8c?\xcbW\xa1\xd8\x90\xf9o\xf2\xcb\xd4qG\xec\xb9\x1f\x89m\x17\x8a\xb1(\x8e6\xb1\x99\x14\x08x\xe62\xe2\xc8\x82Q\xca*:=`\xf8Z\xbf\xf5.\x91\x06-\xf8\xb5\xec<\x96\xf4;\xc5\xed^p\xfa\xa9\xbf\xe4\x18\x06]l\xbd\x9dv\xd6\xc7\x02D+\xf0\xf0*\xf6\x044\x92SE\xa7~\x9eJk\xb2\xf3\xb8.\xb6u\\\xb1\xc5\xd5\x0e\xd3\x8e\xab8\x0e\xc9w\x8b\x15P\xe9\xa7\xd8\x1c\x17\"\xf5=\xbfL\x15\x0b,\x19S\xcb\x0dUeB\xd8 -\x16m\x96\x88:{i\xdd\xf70\xb04F\x83\x15\x10\xf1\xcaH\xb2\x96{\x8e\xe2\x81C\xad\xa5\x96]=\xaaL\xe2\xca{(I{\xe1\xd2\xd6#\xb2\xef\xde\xe0^\x98\xf0\xd5\xcc4\xa5\x9b\x13\xe3\x14\xc0\x0b\x1dV\xa4\xdbz<\xbb1\xe0\xad\x00\xb7\x02\xf5\x9a]]\xb6\x1e\x1524\x9e\xa3\x94\xc4\n\xec\xb5/\xd5[1C\xd1\xa9\x87P\x13\xb4\x82\x86)\x83\xd6\xe3\xe3 \x85J`\xe3\xb7\xb1E\x96&H\xaa\x89\xb4\x97\xed\x1d\xac\x88\xea\xaf\xddG\xda\xde\xa5S\x1fO\xac}\x94\xfe\xc1\xa5\x02\xa9\xb3p\x0b\xfa\x87\xf2\xf8d\xc0\xa3\x9f\xe5<\xe7o\xb4\xa6$\x86\xad}z-\x06\xdc\x11N\xca\x16g\xa3\x0e\xb0\xeb\xc3\xea\xd8\x1e\xd6\x97iF\xa2\xce\xb1\xaeT\xd7y{vB\x90\xb6\x12\xb2M\xe42\xab\xa9T\x93\x06sPV\xa2\x89yXP\x91\xd7\xee\xdc\xe9\xf0e\xf5T.\x11r\xb2]\xcf\"\xeag\xfd}\xb6\xdd\xd6>\xab\xc9,\xdb\x8f\x05L\x9e\x88\xb2q\xc4\xfal\xd8\x81O\x85\xe0\x0b\xfbH\x99\xe2\xeb\xfaA\xf8\x00\xe8\xab\"\xda\xad\xa4t\x9b[C\xe7&|\x0e\x0e\xc4\xbc\xca\xbaP6\xeaQi1\x9fq\x19\xcb\xc7>\x90\xc2\xcaWT\xa9\xb1\n\xec\x80Lv\xdcV\x81^\xe0\x10\xacY\x0evuUs2`\xa6\x7f\x85\xf8\xc4\x88-\xc5\xc9W\xa2\x7fq]]\xf0.\xe2\xd3=\xb1\xb9\xe8\xea)q\n@~_P\xc14\xd0\x14w=\xb7\x06\x91\x9c^\xad-'\xde\x04\x84\xe5\x15c\x97\x88\x9f\xb3cOO\xac\xf8\x10\xc1h\xc8Z&\x85\xe22\xa8_>\x90!O\x9d\x95n\x00\x9e\xb9\xae\xc7VN\xe6\xb1S\xf5\xc2\xd5\xcb%\xec\xb0u\xb5\x08\\EP\xc1\xe6\x0bMI\xbd\x98\xe3\x82\xacB\xef\x1c*\xda=\xd6\xc3\xc0\x07pnr\x06\x83\x81`\x98M\xd1\x16NO\xb0\\\xa15\n\xf3\xd9\xd7\xd8\xc0\xd7\x92\x93\x04f:u\xf5\xf1\xcb@%N-I\x86\x9bj\xe4w\x9a,\x93n`\xd0s\xd6\x12\xd3\x0c\x0co\xca\xe2\x91cs\xe6g\xa7zr\x00F\x0cg\xee\xca\xe0\x96\xc3\xfb;\x10\xdd\xf2v\xc7\xb3\xbdG\xdb\xe2)\x1b\x00\xb1\xd5\xc5.Ek\xfd\x12*5Z\x0b\xc1X\x1f\xeby\x96#$\x8f\xf2%O\xd0\x01\xfe\x86%\xd0\xe8)\xef*]Q[\xf3\x80\x96\xb5\x13b\x82\xc6\xbe\x07\xdf{\xbf\x83[\xe9\xb7D\x93\x8e\x9d'\x1b\xcf\xea\x08\xc4\xf6\xd9\xd0Bv\x18uz\xb8\xc1\xfao\xa3E\x80\xb7\x9e\x14A\xe3M\xa3*\xca\x927\x95\xe0&\xf5 >Iyr&\x86.\xce\xdcp\x0bXK\x1a\xc9\xa0\xbc\xe2P\xad\x12{\x10\xd1]+\xb4\x8fvr\x19:\xc7\xd6\n\x92;\xf0\xf7\x02\x91\x8a\x80\xc7\xf0\xcf\x00Bn\xa4\x98[\x8fYP\x11\xf0\x04\xb4\xcb\xa2\xb3\xc2)N@\xc8f\xb6<\x1a\xc4|\xecO\xf0\xe2\xa7xA\x07G\xb6\xbd\x8ai\"\x11\xbd\xc7u\xeb\xab-\x93\xd8\xa6\x16F\x8a\xe6\xbc6:\x08\xca\xaa +\x04\x04E\xc5F\x91\xe9\x99\xe6a\xabY\xf2\x85\x07C\xec\xbamm\xeaO\x06\x1e\xc7\x04;\xfb\xe2\xe5\x8bw\x8d\xc5?\xb4\\Q\xd5No\xb1\xcb\xb2E\x12\x9f\x83P\x05n\x119w\xdf\xf0Y>\xe5 \xeb\xdde}\x96\x81\x1b\x90\x9e\xc4`>c\xc5V\xc9fy\x82*[\x90 \x05\xdfH\xe3\x9b\x17sT\xaf\x81\xd8g\xe5\xa7)j\xe2DZ\"[\x0e\xd2\xb2\x19\x8f]\xc69\xca5\xf8\xc5*\x0c\xa6A\x16^\x16\x0bf\xc1U\xfb\xd8\xe0\x80\xbd\xab'\x81\xfe-\x8a\xc1B\xb0h\x15\xba!\x1a\x9e\xc5\xd1\xdd\x8c\x9d\xfbQ&:\x91\xf2\x8c\xf9\xd2\x01\x81X'\xa0\xbf\x93\xbd\xc2\x8eL\xfd\x08\x0c?\x80\xb9\x91\x86\x83,\x9ek-7\xb9\x96\x11\xd3\x1f -\x10\xad^\xdc{\xfd\xe6\xd5\xa7\x87\xc7_\xbd\xfc\xcd\x97\xaf~\xfc\xf2\xf8\xd9\xf3w/^\xbd<\xee\xb1>\xfb\xd2\xcf\x16\x83\xc4\x8ff\xf1\xd2q+\xa1\xcd\xb5\xe0\x9e{\xee ]\x85A\xe6\xf4z*\x80o\xe3\xe7k\x93\xdb\x15\xbd\x10\xb5\xe8\xed\x86\x01>\xdd\x00K@\xbb\xbfJ\xe2\x13\xf1\x1ed\x0b\xe63\x1c6|v\xc0>\x83 \x12\xcb5\x8b\xd9\xc2\x8ff!z\x99P\x98\xce\xfa\xec.\x8b\x13\x16g\x0b\x9e0\x1f\xd6 \x88\x18z\x08\xe1Ozh\xd6\xb5\xf2\xd1<\x8a_\x82\x8d\xd54\x06/\xa3 X\x96\x06g\x80:\x85yO\x81q\x1a\x9aM\xf3$\x01\xa3\x03\xc0)\x81\x1c~t\xc9\xf2\xe8}\x14\x9fG\xea\xbb\x1e\xcb\xa3\x90\xa7)\x0b\xb2\x1a\x12\x07\x11;_\x04\xd3\x05\xde \xa4>PAZ\x8f%\xfc\xd4Of\xd0X\x8c+\x06\xbf!\xc1\xd2\x0d\xcd\xd1\xa9\x86\xc0\xd9\x13D\xd9\xc1]\x8b&\x86\xd0\xfe95\xd3\xa0\xca\x01\xd3(\x0e\xc2\xf1\x06\xfa\xddEo)\x96\x87\xd83\x0b\x9d\xa4\xd2`\xc6\xb2\x12\x14\xc9\x80\x8f\xb2\xf8*/\xbd\xbc\x88\xceb4\xdcz\xed'>\x84u\xff\xb2\xf0\xb1\x9b\x15\xac\x84\xf4\xf4@\x124\xf0\x16$\xb6\xae]\x97\xd8\xbbD\xd6\x83]#+(\xb2\xf6\\\xf2X\xeb[\x95\xba\xd2v\xa4\xb2\xfey\xf3\xfa\xb7\x1e\xc0\xb5\x05_\x1bj\xa2\xe6\xd8[\x0bd\xb1^\x8d\x82\xff/1\xe9\x15\xbds\x04\xe5%\xa61P3L\xcdU\xf0}\xcf\x15E\x9c\xed\x8e\x9f\x82\x1a\x89\xa6\x0e\xb5\x1b\x81\xa4\xb9\xa5'\xbb\xb7Y\x9cp6\x8b9zc^\xf8g\x1c%\xf3\xc1L\xc9\x1c\x06\xecK\xff=g\xf2*//#\x8c\x94J\x85\xfa\xe6\x1b\xa4\xday\xf7|\x11\xa7\x1c\xa7&\x05\x99\xb0l7\x1d\x10\xc1k}I'\x0b\x14s\x0d\xed\x13\xba\x0d-\xb6\x84\x17\x19\xaaM\x07A\xaa^\xf5\xb8.\x85\xbbd\x1f$\xd8A\x8aB\x91\xe2\\\x9e\xd5\xa2\xa2\xa8\xc1e18&\x88*\x81\xdf^,\x979\xc4\x83/\xbeZ\xdec\x9a\xc7a\x18\x9f\x07\xd1\xa9rx\x10\x80S\xaa\xbb\xac\xcf\x02T\x1a\xdc\xedy\xacw\x17eL\x83\xbb\xe6\xd8\xe1\xc0%f\xef-\xff\x19(#\xf0\\\xe8\x0e\xe6A\x98\xf1\xa4\xe5\xa8 \xc7\xbba\xdc\xdf\xaa\x1da\xeaZ)Y/\xd7e\xc0\x07\xac\xa7]\x19\x04\x81\x04^\x94,J\x1d\xb0\x9e\xf2\xeb\xd0c\xa3\xe2G\xc0S\x14\x97\xe1\xc0ss\xe0l\x1e\xe7\x118\xa5\xbe\xab&E\x03\x7f\x16\xb3y\x10\x15a\x83\x04\\Q\xf0\xaf\xe4_\x853 \xbcC.\xc5\x1a\x0dp\xd6\xef>\x96\x9dD\xff\x13'\\J\xeaf\x83\xbbuw\xca\xb7\xbf\x1b\xde\x1aE\xf3\xd6\"\x0euo\x9c]tH\xa4d\x13UH\xa0\x1a\x12X\xaed\xa7\x97+)\x0bEQ\xe7\xad\xc8?\xeb\x02(M\xb6y+\x13\xa4W\xacB\xab\xa0\xd0b\xd7\xae\x07\x00/\xe7\xa9:#]>\x199\x8fP\xc4\xfd\xe8\xa1[\xedy\xe4<\xd8\xdb\xead\xe0Y\x1e\xa1\x87\x86\xafC\xe9l\xf0\x91\xeb\xf4\x8a\xd8\xe0\xa4\xad\xf3\xde\x96\xc5\x8a;r\x86\x0f\\\x8d\x8a\xaeq*\xb0\x1d\x084ER6\x8e\xd1c\xad\x16\xbb\x1c\xee\x14@4\x81:\xcdJ\x1c]~\xd7 \xc0\xcdV\x86\xf7~\xe2\xfc\xca\xf6\xd6\xd5Q\xea~\xe2\xfc\xd4?\xf3\xd3i\x12\xac\xb2\xab\x99\x9f\xf9\xee\xbd`i\xc2\xf2\xde\xf8'G\x17\xdb[\x9bG\x17{\x87\x93{\xa7\xf5\"\x01\xb69\xfe\xc9h\xd2wG\xf7N\x97\xe6qk\xdc\x1b\x08Bt\xaf7\xa1\xe1]\x05h\xeaGA\x16|\xc3\xbfJ\xc26a\xd5\x99\xb4\xb5\xf1\xe4\x8e!\xaf\x95\x89cA\x8fRKw\x12\x10j\x05\xfd\x010\xec\xaf\xe6\x0e\x1foM\\\xf6\x94m\x12\xee\x97\x9d\xdc\x95&\xe7N\x04\x12\xc0\xa5\x9fM\x17N\xe0\x8ad4\xd9\x11\x873\x96\x0c2\x9ef\xe8\xb6\xa4\xe7\x9f\xc4y6: \xfd\xe8\xbd\xd86r\xb8\x1d\xae'V\xbe\xb3\xa6\x15e\xb9<\x1e\xd8\xec\xff\x1f\x0e]#\xdci\xc3f\n.\xa2\x07Y\xfcE|\xce\x93\xe7~\xca\x1dpG\x02\xfa\xa3\x03&\x90\x94\x8d\x0c\x1f\x1f\x96\xe5\x15\xaf7\x84]\xca\x9e>r\xb6\x1f\xda\x96\xaf}z\x95\xb0\xdbI\x1c\xeeVG\xb3\xe6\x1a+\xbb\xb7W\x17]|/\xa6\xe4`H\xdelF\xde\x0d$g\xff\xbf1y1\xc7\xf5 \x8e\xba\xd9\x8cw\x03t!d\xb9\x96\xe5\xb8\xbe\xa2)\x84\x13\xeb\xc1r\xa3g\x8f\xf2\xaf\x0b\xcb\xea\x9aCh\x96\xf5\x80\xc5\x03\x19\x94@\x814F\x12\x18 \xd1\x90\xe2y\xa34\x93\xa8\x0e\x96\x91hd\x91\x0d\xa6\x0b?y\x969[\x16%L*\xcb'N\xe4\xb1\xa1\xb2P\x82\x08!\xd9 \x0d\x83)w\x1a\"\xb0\xe4c>\x01\xc5wU\xd8\x7fm\xda\xbb\xfd\xb0\x1d\xc4\xf6cl\x0c;\x9a\x14\xdf\x93\x98T,2\xe9\x02\xea\x80\xc5\x82w\xf7\xd8\x06\x98\x01D\xec\xe9>\x8b\x95Ux\xf1\xa9\xeb\x8e\xe6\xc1^\x9d l\xc1\xbb\x9b\xd0g\x8e\x08\x02\x97\xb4\x92\xf6\xc5b\xe3h[\xbf\xc4Ks\xb65>\xa1\x10\xb97>:\xcag\x0f\xb7\xb66\xc5\xff\xf9|^\xbf\xf4\x96\xa8B[;Xhkgw~t\x94\xcf\xf96\xfc\x9c\xf3m\xf1s{k\x06?\xb7\xb7\xcc&\xe0\xc6\x00|fg:\xc6\xcf\x9c\xd8>\x07\x86~\xe3\x9f\xb4t\n.\xf49\x07#\xbd\xd1\x19\xdf\x85\xe2\xb3\xf9|\xe2\xfe|\xfb\x03y\xc5Oo\xf7d>\x9f@\xc2\xd4\xfe\xa1T~\xa8\x08\xe1sU\x84\x01r\xc5[\xef\xa0V!T\x9f\x99\xf3-\x8e\xff\xe6\x93\x03\x15\xe1\xc9\x91\x9d\xde\xde\xda\x9a\xc9V\xc7\x18\x93)\x9f\xc8\x95~\x85A\xe2\\k\x1b=\xf7\x93\xfaY`\xaa\xf5r\x1c\xa8\xae\x1e\xf4\xf0\x1a<(\x08\xa3z\xfb\xb5~\xcf\xd9\xbe\x0c\x8c\xe0\xc0\xe8\x9c\x83\xfdr\xa40\xe8)F\x8a\xec\x9d\xf6\xae\xbb&\xb8\xe4*\xe7p_t<\xb9\xee2\xde~hc\x08m\xcb\x98\xf2%/G\xdb\x1b\xdf\xfdo\xbf\xf3\xbb\x93\xde\x8dF\xd6\xbc\x9d\xa8\xdd\xdd \x1c\xb1o\x14,\xbe\x0f,\xbe\x0b\xce\x1ez\xbd\x1b\xdd9\xd2h\x9c\x058\x06\x0b\n\x87\x9e\xf1\xd1\xc5T\x1c\x8bf\xbbG\x17\xb3\x87\x9bG\x17\xf3\xdd\xa3\x8b9\xbc\xcc\x8f\xf2\xad\xa1X\x19\xf9\xd6po>\xb9w\xda\x00\xc2u\xc9\xc3M`\xed\x80\xd0\x1a\xa4\x82 \xa9U\xd0\x0c<\x96\xd4a{} \xdew\x9d\xea\xd7{\x7f\xf8;\xbd\x11\xeb=\xab\xad\x9b\xde\x1f\xfe1:\xf9\x8f\xd3\xc9\x7f\x82N\xfe\x1f\xe8\xe4?I'\xffC\x91\xec\x1b\xc9\xff\x88N\xfe\xc7t\xf2?\xa1\x93\xff)\x9d\xfc\xcf\xe8\xe4?-\x92\x9f\x1b\xc9\xff\\$O\x8d\xe4\xbf\"\x92\xeb\xde\xf1{\x7f\xf8\xefD\xf2\xccH\xfe3\"\xb9\xee;\xbe\xf7\x87\x7f\x96N\xfest\xf2\x9f\xa7\x93\xffg\x91\xcc\x8d\xe4\xff\x85N\xfe\x17t\xf2\xbf\xa4\x93\xff\x82H~a$\xffE:\xf9/\xd1\xc9\x7f\x99N\xfeW\"90\x92\xff5\x9d\xfco\xe8\xe4\x7fK'\xffU\x91\xfc\xd2H\xfe\xf7\"92\x92\xffG\x91\xfc\xcaH\xfe\x9f\xe8\xe4\xbfF'\xffu:\xf9o\xd0\xc9\x7f\x8bN\xfe\x0f\"96\x92\xff#\x9d\xfc\xbf\xd2\xc9\xff\x1b\x9d\xfc\xbf\xd3\xc9\xff\x89N\xfe]\x91\xfc\x95\x91\xfc\xb7\xe9\xe4\xbfC'\xff]:\xf9\xff\x14\xc9\xb9\x91\xfc\x7f\xd1\xc9\xff\x99N\xfe/t\xf2\xdf\x13\xc9\xf5\xd8\x01\xbd?\xfc}\x91|i$\xff\x01\x9d\xfc\xa7D\xf23s9\xfc\x9eH\xf7\xcd\xf4\xbf/\xd2\xdf-\x8c\xf4\xff*\xd233\xfd\x1f\x88\xf44\xad\xa7\x7fK\x93\xe5oi\xfa\xfb-Mh\xbf\x05\"n\x90\xb7o\xff\x04\x9d\xfc'\xe9d\x80\x80A\x0c\xbf\xfd3t\xf2\x9f\xa3\x93\xff\x02\x9d\x0c\x84\xd6\xa0\xa8\xdf\xfeY:\xf9\xcf\xd3\xc9\x7f\x91N\x06\x12d\x90\xe5oij\xfd-P&\x83Z\x7f\xfbW\xe9d \x13\x06\xfd\xfd\xf6\xaf\xd1\xc9\x7f\x83N\xfe[t\xf2\xdf\xa6\x93\x81\x04\x19\xf8\xf6\xed_\xa7\x93\xff&\x9d\xfc\xbbt\xf2\xdf\xa1\x93a\xcd\xfe\x9a\x91\xfc\xf7\xe9\xe4\x7fH'\xffc:\x19\x16\xe7\xa9\x91\xfc\x0f\xe8\xe4\x7fD'\xff\x13:\x196\xfb_7\x92\x7f\x8fN\x06\x1e\xc0X\x98\xdf\xfes:\x19\xb6Xc\x07\xfb\xf6_\xd0\xc9\xff\x8aN\xfe7t\xf2\xbf\xa3\x93a\xfb66\xb6o\xff%\x9dLo\x9a\xdf\xd2\xbb\xe3\xb7\xff\x9eN\x86\xed\xe47\x8cd\xd8N~j$\xc3v\xf2\x9bF\xf2\xff!\x92\xdf\x1b\xc9\xff\x89N\x86\x9d\xe0\x0b#\xf9?\xd3\xc9\xbfO'\xff\x01\x99\xfc\xdd\x1f\xa3K\xc3.\x13\x1a\xc9\xff\x85N\xfe\xafd\xf2w\xbfC'\xffq:\x19H\xaf\xc1\x8d|\xf7'\xe9\xe4?M'\xff9:\x196\x01\x83\xa5\xf9\xeeO\xd1\xc9\x7f\x86N\xfe\xf3t2\xd0o\x83I\xf9\xee/\xd1\xc9\x7f\x85N\x06Bm\xf0\x17\xdf\xfde:\xf9\xaf\xd2\xc9@c\xdf\x18\xc9\x7f\x83N\xfe[t2P\xcd\xc4H\xfe\x9bt\xf2\xef\xd2\xc9@\xa8\xdf\x1a\xc9\x7f\x97N\xfe\xfbt\xf2?\xa4\x93\x81\"\x1b\\\xc1w\x7f\x8fN\xfe\x07t\xf2?\xa2\x93\x81\"\xbf3\x92\xff)\x9d\xfc{t2\x90\xde\xccH\xfegt\xf2?\xa7\x93\x81\x98\x1aL\xe1w\xff\x82N\xfeWt\xf2\xbf\xa1\x93\xff\x1d\x9d\xfc\x1f\xe8d\xa0\xb1\x06\x0b\xf9\xdd\xbf\xa4\x93\xff5\x9d\xfco\xe9\xe4\x7fO'\xffG:\x19H\xef\x8f\x8dd \xbd\xe7F2\x90^\x83\xc7\xfd\x0eH\xaf\xc1\xcc~\xf7\x9f\xe8\xd2@z\x7f\xdbH\xfe\xcft\xf2\xef\xd3\xc9@L\xbf1\x92\xff\x0b\x9d\xfc_\xc9\xe4oav^\x98\x1b\x0f\xc0*0v\x9e\xef\xf0\xb8fp.\xdf\x01\xb3\x14\x9b\xe9\xc0X\xde5\xc9\x1b\xec\x1bi\xa9\xd9\xb5)Hi\x8f>\xd7\x16rw\x12\xb0\x11\xce\xd4F`\xa3[\xa9p\x03\xc9Z=\xf6\xa3\x12;R\x96\xdf\x84\xc4M\x9am?l\xf7\xbcG\xabT\n\x0b\xc5}\xd0+x\xba\xea\x04u\xf4\xfa\xc0AA%\xd5\x10~\xa9\x86\x80\x00T(\x87\xcd\xba\xc9a)\xb5\x01\x18Tlmm\x1e]l\xcf\x8f.v\xfc\xcd\xa3\x8b\xfb[G\x17\x0fN6\x8f.v\xb7\x8e.\xf6\xc4\xcb\xde|\xd2\xbfw]%\xa3\xeadt\x93N\xfa\x9b\xdfL\xc6\xcf6\x7f{r\x05\x7f\x7f\xbe\xed}\x80\xb4\xab\xf1\xd6\xe6\xa3\x89x\xc5L\xf9\x02\xa9W\xe3\x9f\xe0\xcf\xad\xcdGlr\xef\x9a\xdd\x8f\xd0Pb-\xb5O\xa1\x939:\xba\xf0\xa7GG\x17'\xc3\xa3\xa3\x8b\xd9\xde\xd1\xd1\xc5\\\xfc\x01\x01\xab\x008B\x1c@\x8e0\x07\xa0#\xd4\x8f.NP\xe0\xba%\x05\xae\xbbsvt\x94\x89\xea'GG\xa2\xae\xbf\x05r\xd9\xf9\xfc\xe8(::J\xa0\xd0\xf6C\xfc\xf7\xe8\xe8(\x1f\xee>\x14%\x86\x0fA\xf9 \x1a\xc2\x7fC\xfc\xb7\x8d\xffv\xf0\xdf}\xfc\xf7\x00\xff\xed\xe2\xbf=\xfc\x87mn=\xc2\x7f>~\x01;\xf7@\xfc\xdb\xd9\xda\xda\xaa\x11\x18\xd46\xf5X\x9fE\xac\xcfz\x16M\xd2\xac\xdf3\x17\x1cH\xa1\xb7\xf7\xe4\xb0\xf7Nh\xa5\x91\x98j\x01\xd4\xb9\x80\xd4|\xf7\x08\xa5\xddG\x17\xa6\xea''5Q\xaak\xa0\x18\xa9}\xd0\xda\xf4\xb3\xcd\xdf>BA;H\xdaQ\xd4~t1\xe36u\xd3\x1az\xad\xf0Zz-\xd0\x18\x8d;\xf7k\xae)\x98\xfcB\x0d\x96S\x8a\xa4\x95Vt\xda\\t&\x8b\xae\xa9>\xb8\xb2\xa9\x12\xdd\xba2naU\xc6\xcd,\xca8R\xf5\xc8R\x8f\x85\x9d\xf4s3Z?wV\xd1\xcf\xd1\xed\x89\xbc\xda}\xcbe\xa9b\x19OQ\xa3\xa7\xe0\xdf\x17`\x03\xc5\x95s0\x9a]\x85\xe1\xd5\xf2*\xe1W\xe9Uvu\xc6]\xf7@\xaa\xef\xc6\x89\xc7\xa6\x1e\xeb\xfd\xb0g\xaa\xff\xd8\xcah\xe8\xb3\xab/\xbe\xb8\xfa\xf2\xea\xcd\xe1\xd5\xdb\xabwW?:\xac5\xc4\xfalnk\xac\xec\xdf\xbcK\xffT\x8d\xb6\xcf\xf79\xc0\x1d\xeb\x87\xd7\xa6\xec\x1b\xce\x06\xd8t \xea\xa6l\x10\xc0\x14\x97\x1d\xb0\x15\x18A#\xe3\xef\x17\x0eG\xd9Z\xa8S\xdc\xb5~d\xbdk}o\xfc\x93\xc1\xa4\xff\xc3{\x03~\xc1\xa7N,z\x10\xc35\xb1\xf2m\xf0\xe2\xf0\xf8\xf5\x9bW\xef^\x81\x91~\x0f\xac\xb8{\xe8\xc8\xd1I\x93\xa9{<\x1c\xa0E\xd3\x88\xf5z\xd7\x85\xc4F >\x18@`\xd6k\x8c\x14\x91~\xcf\x1d\xf7\x8e\x8f\xa7q\xc27\x7f\x9a\x1e\xa7\x0b?\xe1\xb3\xe3c\x9b\x95\xfdu\xa5\nv\xdf6\xed2\x83\xf6s[7\xb0\xa9\xad\x01\x88\xcb\xc2\x87\xcd\xe3\xce\x1de\xde[!JcN{\x05)\xe9\xd2\xe6>\xcb\xd8\x01\x1b\xb2\x11l\xda\xd7\x05\xbf\xa0\x9e\xc4 \xeb\xf88\x8cg~\xba8\x16{\xfdqqg\xe8\xf8\x988v\xb5\xb8OX\x17\xb9*PR\xf0\xa8\x02#\x983\xc7pZ\xcc\xb4\xf3sf\xc0\x8fULN\xf7\xd1\xa6\xb4\x98\xee\xa6@J\xb2VPx\x15\x86\x95.\xbeP\xd8\xfd\xde.\xf0\xbf\x7fx\x16\xc6\xe7\x07\xd5+>0\xc4X\x1b\xf8\xed\x0e\xb4\x01\xcb\xda\x06\xd9\xe4=\xacu\x9c\xe5\"\xeaW\x17#rdC\x8fEb\xe8\xfbh\x8d\xaf\x89\xd82i\x9d\x9c!\x83pS\x02\xd1\xc6\x96\x8c'\xb7\xc4\x88\x0cw(\xf6\x18\x83\xd7h\xcc\xd8*\x0c\xa6\xbc\x0d\xf2\x9d\xd0\x8bf}\x13D\"rN6\x9c\x88=A\xc7\x11N\x04\x9e\xa0\xd4\xd5\xd4M6\x14\xebm\xb0\x8a\xd1WD\x89\x8f`\x1e\xef\xb1\xcd\xcd\x02H\x1e\xdb\xba\xd6\x9e[@\xe9\x174z\x1c\xbb.\xba\x1dG\x93\xf1\xb0m\x0b\xba\xd5\xa1\x146\xaa\xd5\xb1\x08rW\xb91\xf6\x11\xba\xd2u5\x9b\x80\x8d\x01\xb0\x91\x15\xb0\xb1\x04\xac\xd3\xefkH\x12a\xec\xd0\xb1\xf8\xf0\xc4\x85\x08P\xe3X\xc0[F9j_\xdb\x0d\xc3\xddn\x1d\xae\x0d\x89\x12\x15\xf9\xcd\x95G+\xdb-\xa1\xebr\x01\xad\x14\xc9\x8e\xdf\xd2S\x1d\xd9\x9d\x1e\x9e\xe8\xd1\x81\x1b\xf0\x9bQ\xbe<\xe1\x89\x96\x90\x02\xe7\xa9%\x9c\xc4q\xc8}\xe9\xf4M\xf0\xa6\xc7\xc7@\x89\x8e\x8f{2\x10\xc0Hs\xce\xf7}\xceFe\x1d\xc0d\x9c\xf2\x0eb\xfc\x8f\xdc\x07\xdc\xa1>f\x1f\x1a\x16a\xd9\x0fz\x05F\x80\x8c4e\x03\xc1\x034\xeeU7\xdeHnk\xc8\x8a\xc9\x8d\xf7fK\x8f\xb6{7\xae\x8eI\xe5\xdc\xfdV\x90X\xa6\xa5(\x80{\x10\xe9u\xef\xac\xe2w\x9d\xbcI\x06\x8e/b's\xa9\xfa\xaa\x8dT\x11\xb8\x1d\xa2\x05&o\xaa\x05\xe0{(j\xec\xbb\xfe\xc8q\xa4N>\xe6\x13\xb8|\x90wu3k\xa6\x9cI\x8f\xbc\xbc\x00\x87\x95\xf3\x0ea'a\x07,\x1f\xa7\xc0C\x87\x82\xc1\x0c F\x9a\xb1\x1bH\x03w\x87\xf5[ \xf2\x02\x84!`AL\xd8~\xd4*A\xb2\x12\xc6\xd8F\xa3\x87\x15&\xe6\xce\x1d\x96\x8d\xb7&\xe3\xed \xde\x19\x14\xef[\x82\xbd\x13/\xc3\x89\xd8\x82\x8ao5\xdd`\x8e\xa4\x13Q\x88\xb6\x16QAB\xaf\x0d\xb5\xa1qwF]\x8d\xa3\xa064%U\xdbm0\xc4\xaf\x0bd#\x80\x99\x02\x1d\x91n4\x8d\xe1\x0b\x04K\xcd\xe4)\xdbg\x1b\xb9y8,\xce\xf4\x85\xdf\x98\x8dZ\xfc\n\x10\xb0\xf2\x8a\xc7\x03\x96nnZ\xa5\xabs\xd1\xbdqjq}=\x85`\xa18\xbbs\xc1G\xc0\x166\x9e\x8f\xb7&\x02\xb97\x1c\xf1\x06b\x92\xd2\x93\xcdFS\xac\x0f\xe8\xdec\xd6\xef\xa7\xec \x0b\xad\xbdZ\xb1}\xe6\xa8\xae\xb9V\xe7i3\x10\x0d\xaf,\xb9\x0b1IV\xaf\xde\xc5\xd0l\x04\xa5\xe6\x90\x04B\xdco8\xab\xe6\xd1\x8aG\xc6}\xb7\xd3\xbe3\x86Q)\x1bBQ\xe7.\x94\\\xb2}\x96;3\x8f-<\xb6\xc2U\xe1\xb13\x0b\xc5\x04\xba\xabwy f\x12\x0b\x8f\xcd<\x16\xb0+y_\xeeL,\xcae\xf3\x08\x1afP\xd5\xba\xc1\xa1\xad\xf5\xeai}J\xea\x07HT\xd1\xacu\x86\xbc\x01\x8b\xd8~\x04\xca:\xf3\xb5\xa2\xac\xe4\xd5o\xbd\xc3\xfa\xc7T\x7f\xbb\xf1x\xb7\xf4\xad\x9b\xf2r\x16\x8d\xe0C\xea~\x9fH\xaf\x97\x07b\xbd\xd5\xead\xa1\xeb\xa9\x8c \xbfLy\xd9\x8a\xe7ft1\xa6\xb1G\x91\xa5\x15V\xf0Gb\xab+\xdcT=a>\xdbd\xc3bM\xe6\x95\x83\\\x15\xd3\xfb\xfdH\xa2\x90H5\x9b7\xc6!\x17L\xe0\xe4\x1d\\M[\xf8Z\xc5\xd6\xde\x90\x93\xb5n\xc5u1\x9ade\xb7\xa9x\xa7\"\x9d\xd2\x1c \x14\xaa\xab?Sl\xbf\xaeq\x08ew\xea\xcdL%\xdfTO\x9f\x9b\x9c\xc1J\x0f\xac\xfaLy\xf0\xac\x9b\x97\xcc\xaa\xa5\x12\xff\xb2^b\xa1\x97\xc0M\xbb^\xe4\xec\xe6\xc2S\xc5\xa2,=v\xea\xb1K\n\xffO\x04+\xe2PG\xa1c\xc8\xc9\x88\x9cs\xb6\xcfN\xd8\x01\x9b\xb1\x11\xcb\xc9\xba\x87l\x9f\x1d\x17%\xa86.\xc4^/\x1a:\x17\x9c\xcd\x8a\x1d\xb0\x05\x1b\xb1sW\xfc\"8\xa6\xb7\xa2\xb8h\xf5P/~h+\xfe\\5|h.\xe7\xe7bK\x0fA\xd7e\xaedX\xa5!\x9cb\x8a\x8d\xd2\\l'\xe0+\xc5\x83A42>\xc5\xf76.\x8a\x06/A*x\xa964\xd7c'\"e\x8a\"\xdb\x98\x98\xb5\x11\x0bd\xeay%\xc3\x1c\xdb\x86\x13\xb1;lN\x0eM\xcc\xf6{\xb6\xcf.@\x0c\\\xb8\x96\xe9\x1d\x1f\x9f'\xfej\x05\x82jb\xa2\xc4\xf3\x8c\xed\xb3\xb7Z\xb5\xac^\x8d&w\xef\xc5\xb8\x9e5\x9d\x07_\xb1}\xf6\x9e\x1d0>\x00Wr \x11mp\x9a\xfe\x9a\xed\xb3g >-\x8bg4[d\x05\xf6\xa9\xf3\xcac\xaf\x15\x1c/\xdb|^\xd3l\xd0\x06L\xaac\xb6\xee\x9b\xd3w\xfd\xad\xd1\xd8\xea\xe4\xc1o\x9b6\x96\xd9\xdd\x1ev\xf5\xe3zv\xcbf\x1du.M\xb7\xef\x80\x02\xfel\xe6\x80w\xe1\x1a0\xc4\xe3k\xf4\xcd\x9f\xcd\xc0\xabP\x99\"\xb6D4\xca\xf0\x0d\xfb\x8b\xa0jj\xe1\x93\xf0\xad\x037\xba\x99\xae\xa6\x13O$w\xd3\xc8\xed\xb4s~\x9f\x8cX\xfb\xb7\xec\xbae\x00\xbb\x93\xb5}\xc2\x8a\xd06/I\x86\xb9\x93d\xf5\xb6(7\x17\x14\xdf\x90K\xfc\xafo\xf8\xa9L\xaf\xb7\x13\x9a\x1b\xbb\xe0\x01\xb6\xcd\xed\xbf\xd8\xa3?E o}\x93\xae\xf0\x03\x9f\xf9\x99aiZa\x05\xc0\xa3e#+\xf0\xa5\xbf\xa2\xf8\x00-\xd8\xfb\xf2\x84\x1bM,\xf5\"h\x97R/r\xaa\x17y\xcb\x0dn\xe3\xb2\x92\x0f\x12\xf0z\x91\x93J\x11\x10\x81\xd7\x8b\x1c\x1b\x8c\xcf\xa7\xf9|nv\xf8\xbc\x066\xffG\x01?\xaf\x17:,\x9c\xaa\x15\xeb\xde\xe2\x9b\xea\x02\x18\x83\x03v\x88\xfb\xc2\xabyg\xd7k\x8aX'\x1e;\xf4\xd8[\x8f=\xaf\xe3~z\x1e\x80\x0f4R\x8e\x05q\xdc\xceGF:\x93; \x1f\x9c\\f\xfc\x0bd\xf77\xc41P\xfb}u\xc50\xff\xd5|\x9e\xf2\xac\xcc\xc7\xdf\x8d\x1c\x88x8x\xa3:\x01\x00{\xd2\x1b \xfe2\xcbCG\x8f\xe9\x8e\x16:\xcb\xb6\xden\xbcu\x04u\x8f1\x18\x0c\xbce\xaeKl\xfe\xf0\xb5\xb9\xf95H_Y\xd2\xcf\x1a{\x178}\xee\xb1>%y\x86\xda\xb3\xc6\xda|\x10\x81Oq1&x\x03O+K\xe53\x1c\xc2\x9d\xe0\x0fK\xf3KK\xa7/\x9b?\x8b\xfa\xa0~\xc5(\xa9R\x7fA\xd7W\xbcZn\xa9vj\xaf\xf6\x0c5\xfd,\xb4\x8b\x8b\x80/sD\xfb)x{\x85\xb3\xde\x86\x12R\x00\xbb\xfa\xac\x15\xfb\x14\xfb\xf6\\\n\x1b\xec\x9f{U\xb4\xf5\n\xe0aa\xd8\xd8\xd5>\x9bz\xecyy\x14\xb5\x7f\xf858\xb4{\x0f\x88\xf8\x1eC\x15\x94\x0b\xb8\x91!|^\nm<\xf6\xda\x02\xde\x13\xfb\x8a.\xf9\xf8\x0b\xe55P\x0cJ\xfe\xb0J\xaf\x99\xb6\xce\xda\x94\xcf\xed[\xf4\xba\xec\x9c\x0c\xe1\x04\xd3K\xcb\xaa\xb8\x195\x82\n\xa5\x0e\x0d\x8e\xfb\xfdl\xc2\xf6\xc1\x86\x9e\xd7\xee\xa2\xb9\x1fC\xc4\xf5q\x86\xd786\xbe\xf6\xb0\xecv\xb3\x8f(\xf1\xc7\xd0\xe4xn\xe9\xb0\x8f\xf2\xde\x94\x02\"\x08@\xd8\x1d\x16\x9bp\x9c\x82f\x8e:\xcb\x0b6hJ\xf2\xffb=\xcc\x05\xe1H\x9c\xcc\xd5tC\x1b\xa1\x95z\x14\xd1\x8a\x04\xe34\x7f\xccV\x0dJ\n\xc1:M\xc7+\x8b$\x7f\xc3 A\xc0\x00^\x9aG\x9aA\xdb\xcc\xed\xa8\x95\x10\xdfX\x80\x190E\xc1\xc47`4\xa9\x0c\x87R4\xba \xa8\x98\x12\xf0o\xd4\xbc\xab\xa6\xba`-U\xf1P\xea\xdf*\xa0\"\x18\xb9P\x1c\x9eV\xec \x9b[!s\n\x1a\x10\x05\x1f\x8b\"\xe4\x12,\x07g\x16\xf0\xf9n!\xfe \xe1B\xe5%\x1cWg\x80E\x1c\xf0g\xc4|G\x9c`!\x15\xd1+\xb5)~u\x05\xc4 ;\x10=\xdc\xdf\xc7\xd3w.\x1bA\xd4\x84vO\xecJb\x90\xa8\xd0\x14\xfc$\xe1\xfe{#\xc7T\xe1.a{\x03\x9exZ\x1a\x92\x83m\xc6\xac\x89>\x83\xea\x07\xf0wi\x03\xfc1\xb0\\Z\xab4\xe8\xcf\x81\x17\xd3\x8a\x99\x03:\x16\xeb\xe6\\|\xad\xda\xc9@F\xec0R3\xd4D\x91\x01\x06\x8fE\xde\xb1.\xa6\x86\x14\xb2,|\xf3\\/{\x8eF\xdf\x08\xfa\x0e\x1bX\xaao\xa1\xc5\x0f\x81\xe0g?\xa8V\\\x9f\xf4\x13\x87\xcfJ|\xc7\xcd!F\x83\xb5 (\xd0\xdc|\x0b\x03>\x8e'b)E\xec K\xacK\xc9\x87\xa5T\x8fZ(\x9e\xcc\xf1\x01i\xd1\xac\xd9 \xc6q\xbf\x0f\xb1\x0e;\x80(\xf8\xde\x00\xa1\xa23\xaa\x91\xf2\xc7.K0(cf\x04'\x91\xbdKZzg7E\xa0\x05\xf9\xf7\xa9\xfb\xe2\x94\x94\xbcm\x0b\xb3\xc8\x1dbiZ\x9eHf\xeb\xc6\xd0\xb5|\xa7\x953[\x170C\xcbMz\x03`>\x84)-\xc1\xe3\x8f\x0b\xf0}\x1e\xc6~\xb6\xb3-\xb5\x08\x80\x80\xb5\xcc\xdd\xfbt\xe6\x8b({h\xcd\x19\xeeZ\xb3l\x1f\xfb*\xb06\x08Y\xcfC\x7f\xb9\xe23{ \xdb7E^\xe5\xa3\x1b[\x9e\x9e\xafaP\xad&\xdd^E\xf0P\xcb+\xe48\xb5\xf4R\x08afp#Q\nr\xea\xb3!q\xc5\xc8\x00\xa9N-MIrj\xc9J\x17TKVB\x9dZ2\x08r\xeaiRxSK\xfe1\xf7\xdf\x17\xfd\xd8\x18z\xeb-\xc1@.\xc1\xd8\xe1E\x94&\xb1\x1fm\xf8c\xb1*o`\xdaK\xfb\xa0\xd85\xac\xdfn\x81C\xae\x8f\x0dc5\xe9\xf1\x98L\xfb'u\xf6\x18O,,[$6\xe7\xc2\xec\xc6\xd5\x9c\xf6G\xae\xb9\x91o\x00\x03~\x87e\xa8\xea\xb5\x10\xe86\xcb\xd7\x86\xb3\xc6\x9e\xebh\x81\xb6<\xd93\x8b\xe9\x05}\xfd\xc8N\xe5v\\\x07\xae8y\xac\xa7\xd6\x8b\xed\xe2\xd9\x0d\x9a~\x9d\xc4\xcb \xe5\x1f\xa1\xe5\xb7<\xfb\x08\xad\xca\x95uK-o\x1b\x97v\xe5\x8aX\xdf\xc0\xb3\x12\x856.B8gE\x00\xda\xa8\xe1\xf4\x15\xc0\xf1!\xb2\x1c.\x90m\n(\xb6 \x99\x0f\xe9\x06\x96\x95\xd2E0\xcf\x9c\x06D\xd5.\xfe\x03k\xd1\xb64E\xf9\xc0\x89\x8b\xbd\xcb\xde\xb2x\x00\xf8q\xc3\xa2\xa2)-\x99\x8aS\xe1$\xec\xa9\xf4%\xa6\xf6\xbc\x91\xd8\xc0Y\x9f9\xd2\xc8\xfd\x80\xf5\x9e\xdc\x13TM\xfe\xee\xb3\xde\xd3\x9e^Jn\xa0\x82\xa1\x8aD\xe9\xa3Hf\x83\xa6\x10\xe4\xa0\xd4\xc2\xb3\xcfb`\xdf\xc2\xd4)kC\xc7\x138J\x96\xbf\x07\xfej\xc5#\xf0\xef\xe0\xe9\xf84\xc0\xc4\xb8\x92\xa8\xcc\x18\x9c\x0dq\x06\xdd\xd8\xeaB\"\xe0N\x06br\x01\xb5*\xbc4pi\x80*W\xbf2s=`=\x86e\xb5\x072\x0e\xd6\xabN/\x8a3\xe6\xa7ip\x1a\xf1\x19\xcbb\xe6\xb3\x95\x9f\xf0(\xdb\xa0\xf8\x07\xf5\x9ci\xfe\x91\xe8^\xaa\xa7\xf4H\xa3 f\xec\x0d\xe7\x8e\xd6[IT#\xaf\xd2\x02\x8a\x80\xfa\x82\xc1P\x94\xd6\xf5\x9agE\x7f\x14{\xe9P\xbc\xa2zlT\xca\xc2f\x08\x9a\xd7uJ\xb4\x0d\x17\x0d<\xc4\xd0\xe0\x84\xcb\x95\xd7\x1d\xc1\xe7\xaa\x1c\xd1\xd3\xce$\xd3*\xfa\xac]d+~}pK\xc7\xc3\xce\x83\x07\xf2\x80\xdd$\xe8W\xdbyu\x80\xbd;\xbd\x11\xeb\xdd\xf1\x97\xab\xc75\xa2x\xb7wW\xe4\xfc,\x8f\xb3zV\xef.VZ\xc5\xa9\x91\xf5\x04\xb2B\xb3\xceS\xc88\xcd\x1ek\xc1\xfa\xda\x04\xe3\x16\xa9\xb8$^\x92\xb2\x01\xf1*\xc4=\xce\xf8N\xef\xc9\xd3\xbb\x18c\xa1U\xd8\xa6\x04\xccFP>\xe0\xd9\xca\x8e\x92\xd0\xad\x91G}\x08\xf1\xe3\n\xdc\xa5\x19\xc1\xa3\x1dwpx\xc6\xa3\xecp\x19d\x19O(o\x1f\xe6A:\x913\xbd\x08\x0cu\xb5x\"\xe7\xe1\xd0ub\x0f\xfc\x97\xc4\x837%\xc5\x14_\xbc\x0f\x89?N\x82\xacH\xdc\xdd}\x00\x89\x9f\xe5\xab\x90_\xc8\xa4]Hz\x97\xf8Q:\x8f\x93\xa5L\xdd\x83\xd4\xd7~\x9a\xbe[$q~\xba\x90\xe9\x0f!\x1de\xe2x\xb0\x8bu\x97\x1f\xc1\x8a\xb7\xe97\xce4\xdf]6\xc9yL\x9fF\xf9\xe0\\\x0d\x07U \xb8\xd5\x88D.j\x80\xd5\xd8\xca\xcfS\xae\xbd\x1a\xc7&\xfa\x93\x01I\x85\xa2r\x1f\x82\x16\x13\x9e\xe6\xcb\xca{\xe3\xa9,\x1a\xc4Q\xc1\x92\xc5`,\x08 \x89\x1fD=\x8f\x05\x90r\x1c\xa4o\xb3Y\x00r\xfcL\x1b\x18\x1e\x9e\xc1\x119\xd4\x12l\x9c\xc7r`\x88\xc4od\xdb<\x96\xd6\xa5xg\xd2Ztch\x83oN\x0e\xd6\x87\x8f\xf9r\xc7\xe5H\xc7\xbaA/\xed\xd0 y\xa9\x8d\x0ff<\xcd\x92\xf8\x12\x17\xb6\xfc\xd1\xf5\xb3!M\xb7\xc5\x16:u\\OZ\x02$\x830H3\x1e\xf1\xe4\xb9\xd8\x87\xa4\x13\xe1\x1e\x17\x9bi\xcfU\xfbk\x9d\xde\xd2_\x9cZ\xd1d\x19\x9f\xf1/\xe4wjsndj\xf3oV\xd5\xe7\xb9\x9eW\xce9Y\x13F$\x98%\xea\xabz\xae\xed\xab\xd3\xc6\xafN\xc9v\xcb\xdc\x86\x95\xa0\xc8-br\xa5\x9f\xf5\x14\x1d\xdb\xa7\x06\xb6O\x8b:\xd5\x14<\xca\x08\x02\x04gL\xaf\x95\x86\xbb\x10`\xa9\x89\xac\xf7\x04!I\xb3$\x98f=\x92\xaa\xdf\x1f\xba\x03\xbc\xadDZ\x08\xec\xb6z\x9c\xaf\xe3R\x81f\x9cD\xb3\x8d\xf6m\x8d\x15\xa6\x91\x9ci7E3Wg#\xdf]\xae\xb8d%\x9f\xfb\x91\xe0&\xc5>\xc3|6\x0d\xfd4e~\xca\xfc\xe2K\xc4\xb9\xf0C\xe9\x86\x1b\x19\x9e\x05\xf7g\xd2LK\xa6d~\x10VS\xe4y`\xdf\xea\\\x99i\xbb\xbc\xe9E\xaa\x99QS\xbc\xad\xe5h\xe9g\xbe\xd5;Y\xc4/2\x94G\x99\xe34y3}(O\xc1\x16\xa9\x18.\x88}@Q>\xaa@%\xab\x82$\xf3\x98\x8c\x01\x80\xcdT\xa1\xe1U\xc6\x9eG \xfc\xfe\xf8\xc3/\xfa\xdb\x05\x062\x06\x89\x06 \x10\x06\xebc\xac!\xc6:c6Fl#\xf0R\x00V\xb6\xdat`\xe5\xeaH#z4\x10\x10\xa1\xcf3\x12\x01\x87\xc6\x10\x0f\xaa\x03\xaa\xe1x}\xca\x8b/ \xf0\x16\x91A\x949\x05a\xce\xde\x04\x11\x15\xf5\xae\x11\"M\xbdkY\x81\xd5\xaf\xfd4\x0e\xda\x1d\xb8#\xfc\xf7\xeb\xf0\x97\xd0\xa3|\xe6Tn4\x15\x9d\xc5kM=\x14\xc7\xc3\xacHoH\x02n\x8f]\x16\xb1\xfe>\xe8\xc03\xcb\x9c\xd1f\"5\xf8\xc5\xd1\xd4o_D\xcdcJ\x06~\x18\xc6Sg\xcbb\x8an`LQ\xb3\x0d\xedJ\xc8\xc0\xb19F\xb3)\xf9\xbd\xaf\xa2\xd4\x9fs\x87\xb3\xa7O\x9f\x82x\xd2\xaf\x82/\x17\xd3\xf9\x98\xf9\x8f]\x00\x9c\x0f\xdf@\xa8\x06x\xa3>\xf7@\x97\xb6\xbaD\x9b\x1fQ\xa5\xaf\nV\x0c||\x04\xba\x0d\xc4\x81\x01\xe2\"\xe1\x83`\xb5d\xf4\xb7 JW|\x9aU~\x0c\xa6y\x9a\xc5K \x13\xa5t\xa6\x98\xa0q\xbd\xe0\xa4 \xd9\xd5j.*\x11r5\x1c\xd6\x88YI\x8e\xe5\xf2\xa6(\xae]\xfa,to\xa0/\xd2\xc6k=rw6H\xa2\xb6\xef\xea\xeeN+nH\x8eD=\xb0\xefC0\xcb\x17\xcb%\x9f\x05~f\x95jH\x05\x0d\x1a\x19I\xbf3\xe6}7\xfd \xe1\xa2\xbb=\x7f\xda\xa0\x9baRw\xc3\x07\xb3x\n\x922{\xb9Uitt\xca\xb3\xd7\nI^\x81R\x83\xcc\xb0\xba\xb0\x12M\xad\xc0\x92D\xc0\xe4]\xb0\xe4q\x9e\xc9\xe8\x88\xdc+\xfd\x1c\xac\x92x\xca\xd3t\xd2\x835\xfc\xf3\x0fEpIy!x \x0b\xa0\xb1m\x1b\x1dQ\x8f\xa6\x07j\xa4\xdc\xfa\xb3p\x88\x0b_\xea\xb1 \xb8\xd8HG\x9d\xa6O\x80\x12u\xb0\x8a\xd3\xecK\xe9@M\x9c6\xf9 X\x8a%\xf9v\x9a\x04\xab\xccj\xef\xa3\x1eE\xc47\xb6\x9a\xa5\x88LJ\x12\x05\xb3nu\xd1\xa6?\x05\xf3W\x94o\xdb\xf4\xeaOF\xeb\x10\xf4\x07\xf7\x86\x12\x02N\xaf\xe7\xb1\xde'=y\xaa(?\x1c\xd5o\xd9UZ\xa1g\xc2qA\"%\x9b~\xbe\xf0\xa3\x88\x838\xdb\x01{J~\xce\xaaY\xee@\xc0}H\x0f\xb8\x11\xb9\x16\x0e\x07\nn\x93y\xae\x81\xa7\x01tb\xbb\x02\x14\x0b\x16\x82l\x0c\x16b/\x8e\x12\xee\xcf.\xd3\xcc\xcf\xf8t\xe1G\xa7\x1c|\xdd\xcc\x07\xd3\x84\xfb\x19\x97\xa2w\xa7\x97\x02R\xf5\x04`\xc0\x8eq^\x90\x00Yd\x9d\xae*\xd4\xb3~\xc5\x8e`\xd9\xc0\xec\xf1:\xe8%E\xbdt+\xc8d\xc5\xf2d\xfc|\x11\x8430s\xced\x9e\x1d\x8fD-\x94m\xabZv\xc0w\x87SI\xed\x9c\x85\xc7\xb6\x8c\x1bF\xea\x11\xa4\x03\xc43=}\xcf\xf8\xa1\xd8\xed\xe0\x16P\xe2G\xb3x\xe9\xc8@\xb5\xc8m\x14=h4a\xcc\x06i\x9c'S.ob\x08\x8c\xd1\x83sI\x1b\xa5\x812\xe9\x93|\x172%A4\xe3\x17\xaf\xe6\x8e\x0f\x02\xbd\x85\xd3\x97\xe9\xa0pq\x14\xd3b3q\x14\xeb\xd8\x9f\xcd@\xd8\xaad\x14\xb0*\xeb\x89NO.\xba\x1el\x7f\x1bC\x10\xfc\x0e\xfc,\xf3\xa7\x0b(\xe9\xf4\x8a\x85)\x052Ig\x00T\x89\x8c/XX\xa43\x96\xf9\xf5p\x93*&\xa1\xf3\\kR\xb5\x8d\x9a\x19/\x97DGy7q\x80\xd1\xe6MF\x7f\x156\xbd48.\x14\\\xea\x10\xb1 \x11\x0f#\xe4>#\xf6DwM\xd0\xef\xbb\xca\x97@Qo\x0c\xaaA\x8b\xdd>\xd3\xec\xbe\x9aW\xa1\xd8\x8fO\xfc\xe9\xfbF_\xe3\xe2\xf1\x93\xd3\x942\xb8S\x0fq\xacU\x8f\xdc\x86\xc2q:A\x01w\xe2\xa4\xae\xc7\xd2~\xdf\x86p+<\xa2\xe9sG\x1c\xa4\x1b\x8c\x08f\x0d\x16%\x18\x947\xac\xdfhd-M6\x18\xa9\x80t\xd4\xa5\x88\x04\x0d\x94\x86\xe88L#\xca!\x19\xebV=p\x85\xad\x8d\xc8N ?|\xf5'K.;p\x02\x1b\x1dW\x8f\xfe\xa8\x81\xa0RW\xa0Y;\x83\xa3\x9e\x04\xea \xack\xee\xbdz\x94\x91u\xd2\"\xbb\xa0\x1e0\xbc\xde\xb2\x1b\xdfRO\xa3\x01%\xf5\xb4\x98i\xd7\x1f\xe8\xd3p\xdd>%\xe3-\xeajw\xd3s\x9d~m_\xa7_\x1eK\xc6\xc3\xef\xa3w;\xd7\xef\x9d\xf8\xbb\xfd\x91\xfb\xd8j\xebM=\xa0\xb0\x0fA\xe4@\xd8{P\x0f\xcdQWJ\xd8\x98\xa3\xa2\x00\x9b\x07\x91\x1f\x86]\xe8\xc3\x0c\xd8\xb9i\x87\xf3\x825\xb7\xab\xe1oM\xb6\xe7\xf4\x8a\x98\x05:/\x94\xf2p^^aW\xf7W\xb3E\x90\xc2\x0d\xd7\x11\x14\xd0\x94\xc0\xba\x11\xc0\x0e\xec\xc5v[\x80\xee\xd7\xa2\x8a\xed\xc3B6\xed\xc4\x17\xadV\x06a<\xf5\xc3\xb7Y\x9c\xf8\xa7\xbc9\xe6\xda\xd4\x07\x02\xd8\xe6\x15\xa45\xda\x19\xd3U\xca\x95\xef7\xc6^\x97>#\xc0\x9c\xac\x97%9\xc7\xc3?\x9e\xfb\x9d\xc8\x1dd\xf1\x17\xf19O\x9e\xfb\x84\x06Y\xff\xd5\xf9^\x1fS\x97a\x9c^\x14\x7f\xc6W \x9f\x82\xe9ZO\xbb\x97g\xf6Wi\x9b(\xd7\xaa\xf5\x9b\x82M\x1b\xfe\x06ycS/\x119=\xd0\x10\xd5\xbaV7>\xb29\xf7f`\x90\xd0\xcb\x12\x7f\xca+M\xb0\x036\x8d\xa34\x0e\xf9\x002\x1d\xf0w\xa4\x92\xce\xfd$B7\xe0\xb0\xf7w\\SL\x17\x17 \xa9\xc9@%UZb\xb5\xadC\xebR\xea\xb4\x86hA\\\xc5\xf9N\x99\\j\x0cw\x86\x96+\xe5[\xbbd\x00\x98\xc0\\\x1f\xa8\xdc\x03\xc2\xa0\xe9\xf7\x82\x12\x890v\x98\xe1N\xbb4%!\x02\xe8\x8b'\x1e\x04\xd1\x82'A&\x1d\xc1\x0c\xc1\xd2C\xa59\x01\x9a\x99\x04\x9a`\xfd8\xd3\x8cF\x9a\xa0\xc5\x007\xf0\x94\xdc\xea/\xa4\xc1\xb6&r\x86\x8f\x1et\x9a\x9fj\xad\xdd\xebT\x1a>\xba\xef\x96f1\xd7\xac\xaf\x19\xd0ti\xa1M\xe3\xbc3\xa4\x02\xe8\x8bt\x8bK\x82\xbd\xf6[\xea\xf5\x89\x92\xaa\x08\xbc\xac]\x1e\xe0\x0c^H\xa2\x9b?\x88\xe2d\xe9\x87\xc17<\x81k\xa9\xa0\x96s2\xed\x8678.+\x95\x0d\xa5G\x0c\x7f\xe0\xa7\x97\xd1\xd4E\xcf\x04\xfe`\x95\x04\xcb \x0b\xce\xc4\xd6\xa7\x8c`\xd8A\xf5\x13p\xb1z\x0b\x0e\xeb\x19\\\xb3\xc0\xaaF\x89m\x17<\x7f\x8f\xea\xb5\xb5vE\xb1\x1d\x17bQU\x13\xf70Q\xbc>\x84f\x8a\xae\x82\xe5\x8f\xb3\xb7\xf5\xc8\x95Q\x8d\x96\x8146r\xf6\x86\xa0\x9f\x19\xcc\x82t\x15\x97\x89\xbb\x90\xb8\xf4/\x9e\x9d\x16i{*M&lc\xcd\x84\xcf\xc1@\x85'*}[\xac8\x81(\xfe\x9a\xab\xa6\x0d\x91v\xf7(D\x02\xa1\x8f\x7f\x92\x9a\xa8\x049\xf30\xd6\x1dbwC'\xa5>J_\xfa/\xd1_\x05\xba\xe8\x00,\x11Get\xa7\nN?\xee\xdcaA\xfay\x10\x05\xe0\xa2\x1a\x1c\x0dq\xf0\xf2\xe1\xc4\xd2\xdfP\x9bQG'0\xd4\x88\xc3\xde\xb6\x0b\x82[\x18c\x1a\x9cF0\xf5\xbb{;\x9d\x88F\xfb'\xac\xfb\xb3Re\x15\x1f&\x17\x18m6\x05h/\x0d\xe0\x9c!z\xa5\xdbT\xbf7\xb7\xb7\xd6u\xe7\xb1\xc60\xec\xb6\x99\xdadz\xe5\x8c\x03Q\xd0=\xb2pi:\x81>pn\xa3\x9f%b?\xa0\xbd\xd2\x0e\xef\xd7\xfd\xdaH\x02Y\xf7\x98$\x03V\xee\xd1\x01+\x05\x9dm\x86\x0e\xe3\xb4\xb3\x81\x08oCUgX\xec\xe5\xe8\x10\x03n^I\x97\n\x15\x9a\xebjtG\xd1\x1b\xc2\"\xfc\xd5J|\x1d\xf3 l\xe8\xca\x9f\xf4\xb4\xe6\xce\xa8\xe5\xcc\x9bbEt\xd8z\xa0\xda =6\xf7X4\xe6\x13\x88\xe9\x81Nx\xc8K\xe5\xb6\xe3\xea\xad\xe0\xf2\xae%\x16\xe0\xce\x90\xf6K9\xbco\x89 \xfcp\xcf\x1d,y\xb6\x88g)Ejw\x0d\xff\xc0\xa9\xe4\xec\xeaG\xa8\x90^\x0cp,\xac\x96\x9cv]6\xf3re\xa0\xa6\xb1\x9a\xad\xd9(\xa0(G\x12\xcb\x80\xd7\x86\x82!1\xe3\x9a\xdf\x80\x05\xa4\xf2e\x90uXX\xc4Q\n\xec\xbb=vVD*\xf5\xd8\x89\xc7\x8e!\xc8\xec\xa1\xc7.0\x9a\x96\xc7\xde{\xec\x99\xc7^y\x10tk\x0e\xe7/\x9a\xe2c\x00\x11y\xa1\x14i\xb9\xdc\xbd\x0b\xf14\xee\xd6\\#\xe8\x1aW-\x10\xff\x02\x9cu\xea\xc9\xae\x07Qq.\x06\xa7<\xf3 \xf2\xcd\xc5 \x15\xaf\x97\xf0\x8a\x9a\x0d\x0f\x02\xd9\\\xa0\x06\xc5\xf5J\xc1\xcc \xe1i\x1c\x9e\xf1$\x85\xe6_\xc9\xad\xa5H\x15\x8b\xfa\x19SA\xf3\xed\"-Vn\xc0\xd2\xb4\xaa\xa0 &\xf9\x10\x1b\xf2+\xf8\x1e\xf8\xbeq\x02\xb7\xec\xd2>n\xd2K\x91\x08\x8aIb\x9b|-f\xab8\x89C\xe0]_Z&\x9f\xf2\xac\x07\xab6@s<\xd7c\xaf\xc9\xe8%\xa2\x0f\xe8tO\xf0LAi\x808-\xe8 \x9e\xe2\x83\xf1\xd6DP\x80\xb0\x9e\xae\xfa\xbc\x8f\x9e\xa1\xecB!bd\x8a\xb7H\x9c\xde\xf3 \x99\xe6\xa1\x9f\xb0 :\x8b\xa54\xc7c\xbd\xe7/\xde<\xff\xea\x8bgo\x8e_\xbc\xfc\xd1\xab\xe7\xcf\xde\xbdx\xf5\xd2\xa6x\x17\xad\x9e:\x01!\x8bA\xa5\x92\xe8C\x03\x18o\xa9'r6^\xa3J2\xf6\xd8s}^R5/R\x89/\xf8\x90*\xfd\xf4\xd8\x99[x\x15\x14\xeb\xa3Q\xe0\x06\xc7gzV-C\xc5\xbb\x02\x8dh\xa3\xae\x13\x14\xa8[\xe2\x90\xc5\xaa\x10\xf4m:\xb2\x97xT\xc7\x97Rf\xc6F5$s=\x1b\x9a\x17\x9d\xbe\xe5IB\x93\x000\x19&\xa6\xa9\xb8C\x8eV\xad\xa6'l\xdd\x93\xfa\xed\x92\x02\xfd\x8e'lyRT\x0c\xab\xd0\n\xa6\xb8qZ\xe3*5\xa0\xfc\xda\xc12\xbd)5h\xe8\xdc-O\xdf8\x16k,\"'/V\xf3\x16U\x82\xf21\\c>\xa9\xfc\x8f\x93\xe04\x88\xfc\x90T\xf8+n}\xc4\x9e\x99\x99\x92\xd5\x7f \xde\x83`\xb7W?\xcd\xb2\xa7<\xebr\x15T\x0e\xf2U\xc1\xe8\xbdr\xb8\x0b\xbb\xdc\x01[\xa2\xb3\x07\x89\x14\\L\x86I\xf5\xcc//\xfct\x8d/[\xe6\x91r\x12o~\n\xf7\xdb._\xb3\x900\x86\xfd\xa5{\xc00\xaa\xfa\x9d;\xec\x12-\xa5\xd8>{\x0d\xbc\xaa\xb4`\xc0\x1f\xefu\xb4\xc0\x9c\x1e\x86\xa8\xa3\x1cE\x99\x83\x006a\xd4\xae\xf2P\xa2\x15\"N(\x83\x80\xc8w\xee\xb0\x13q\xe6\xd3X#\xaf\xe8\x18|\xa5\xd7\x15\xb0q4j?\xb52M\xa0#\x16\x7f!\x10y\x0bz\x0f6\x02\x1b\xac2\xf9y\x91,\xa1TZRA\xfcW\xf0\xe41\xab\x08\xf5i\xdf\x15f\x7f\xc5\x18Glaf\x14\x87\xe1\x0e\x00\xe6\xc8\xd9\xca\xe5i~\xb6\xbe\xbc\x8fMV\xcd~\x95\x05-\x8b\x1a\x883.A8\xe5\xe1\xf1\xae\xe4d2\xe0d\"\xe4\xd1\xfc2\xc6]\xbdC\xeb\xec\xe9\x85\xa8[\xb6&7\xbfj\x93\xacmi\x11\xe4\xa3\xdcTp\x17\xf1\xcb\x00}\xf5\xfe\x9e\x83\x14\xbd\x95\xf5\xe0\xad\xb0\x93\xdd(\x87.\xf7\xdc\x91\xda\xef4\xb0r9k\x02\xa0%u\x8b\xb0\xb3bE\x9b\x82\x97\xc3\x8f\xd6O\x1f\x82\xd8K\xd8\x93\xdd-\xb1\xa0\xa1\xe3\x1210\xe6\xbe\xd9\xff\x95\xf3\xcc#\xfa\xac\x0b\xbfF,\x00\xd7UV\x12\x1b8\xc7D\xae\xa4]\x81\xe3\xab\xd3\x8e\xf9\x15\xd8\x89\x02\xe7\x9c\xca\x83\xbd\"p\x0e\xcd>\xfbE\xca\xad\x1c\xf1w\x86T \x10q$\xb7h\x99\xea\xe2-\xb1\x97\x83`r0\xf5WY\x9e\xf0\xb7\x99?}\xff.\xf1\xa7\x9a(\xa9\xe2\xab\xa3U#\x15I{D\x94wR\xd1n\xf3\x8aphH\x88\x90\xd2\x9a\x90\x89<\x0b\x07N*\xddm\xe5\xb8\xa9I\x8f\xa4\xca\xa9=hdR\x19\xd50\xc2\x9b\xb8\x81*\x1b\x0d\xa6\xf1L\xe0^\x0eWu \x08D\x84\x8c\xea\x9a\x0e\xa8\xd7\x90\xc7\x93j\x05\xdc\x81\xa5\x90\x02}\x85t\xd7.H\xf7n\x0e\xed\x15e\x1e\xc7#\xd6K\xfcozu\x1ae\x96=\x11\x18\xdf\x9b\x9d\xfb\x1d\xcaf\xc97\x97#\xd6\x13\xffz\x06\x8a\xf3\xc1<\x8eY\x9f\xf1\xc1\x89\x9f\xc0\x7fQ\x0eh\x83\xe8\xca\xec\xdc\x87z\xb7,\xb8\xdd5\xa2B5Hn\xd7\x08\x9c`\xd1\x10\x94\x17q\x02\xc3\xe4\xd6c\xdb5\xbe\x1blu\xb9.\xe9\x04n\xb4b\xa4M\x8a\x1a\xedV<|\x9c@\xfc\xd1qBX\x9b\xb6\x9a\xecD\xe8\xac@\xac\xebV\xf3\x0bd\xf8\x87\x8f\x99\xcf\x9e\xb0\xf41\xeb\xf7}y\x85\xadX\xa0\xfe\xc4\xc3\xf8\xd4\xca=Q\xee\x9a\xea\x13\xcd5KT\xe8EHL\xff\x18\xaa\xc3\x87CT\x1dj\"vT\x1e>\xdc\xfe\xd8\xcaCz\x12\x15\x8f\xa1\xf9\x96\xed\x15Z\xf5\x1ex[\xac\xceC\xe3\xa4\xd26X\xb7-P\xa6\x94#\xda\x00\xda\x96S\xbd\xe3\xb2\xd31x\xc3-\xe6\x06\x8fg\xeb\x1a\x9f\\\xab\xef\x04\xc5\x94\x9f\x18\x91\x97\xa6\xf0\x16\xda\xc8\x98\x9ak\x0e\x1c\x86}\xe7\x0e\x8b\xc7J11\x11\xebr\xdd\x10\xb9\xed\xa8)\xd0\xfc\x01\xe2\xbf\xbc.W\xb9s\x9b\xf9A\xa4V\xc3\xee\x0dV\x83\x82\xb6N\xe6\xd7\\+M{]R\xf6Ulz\x1b\xcae\x88Ju`\xf7R\xbe\xeb\xeby\xf38\xee\xdd\x8e\xaa]\x0d\xd3\x00\xa5\xbc\x0es]l\xa8\x1d\x11+\xcae\xf6\xf46\xf5\xef\xb5\xeb\xa4\x9er\xc8N\xe9\x80\xe6\xb4^t\xd5Y\x953\xeb\xaa\xcaY4\xabr\xce,\xaa\x9c\xda\xe7\x96]5>\xa7\xed\xc1n\xab\x15.I\x8a1\x8d\xa3yp\x9a\x83\xf6\x95\xa6\x1a\xbc\xd0\xce\xd2\xae\xaf\x95\xa7\xa4&\xba\x92\x1b\xdf\x164*i\xe3V\x98\xe2X\xac\x87\xb69\x185\x9c\xea\xb8\xd7;>\xe6\x1c\x0c\x07\x0e4\x07s\x90&\xcer\"\xe9rp\xe6\x87\xb9\xe0h\x16J\"sV\xab\xed\xb1K\xd7\xd3\n\xcab\xd1\x98O\xd8\x01\xe5t]\xe6\x88\x7f\xe8\xb1\x0d\xacO!u\x9f\x8dQ\x9b\x9aM\xca$\xe9\xad\xa3\n\xb1\x1a\x8d\x8f\xa6|\x04\x94\xbe\x1b\x94<\xdd'\x98z*\x80\x8a\x95[>c\xb9F]\xee(J5u\x8c5\xe0*\x992\xdah\xb7\x8a\x05\x07;\x02\xba\xaf\xa2i\xe1\xd4\xe7\xf8\xb8#(\xe6\xf3\x11\xf0\xbe]!!\x89\x04-\xe7F`l\xd0hS\xf1\xa7@\xd7\x97q\x80J\xc4r\xc7|\xd2\xa1\x9e\x896\xe8`T\xd46!\xc6\x14\xeb\x1d\xe0\xed71y\xc98\x98\x08\x1e6pY\\\xfa\xe5\x8d)\xb8b\xae`\x94\xb7\x95s*%\xd2\x97(\x98\x8c\x03i%7\x14\x88\x99\x0c\xd2\x15\xdc|\x0c<6\xa4\xee\xee\x81*-)?\x9b4~V\x8ac\xa3&\xeb\xf8\xb6iG \xa2\xdfzG\xf1\xac\xf0j\xd18\xef\x16:!\xb6\xe3\xb8:\xa1\xf6\x19\xa1\xe7\xb1\xd9\x19<\xccbD(\xc9d\xac6-\xde\n\xdew\xcc\xf0\xc8\x92\xb1',\x12\xd3\x9d\xb9,\x18g\"\xb3z\xd91k\xb8\x08\x07\x1f\x8d\xc1\x81\x05^h\x95\xedn=\x06\xc2\x1b\x8b\xca\xd8\xb4\\\xc5I\xa9\xc9!\x1b\x95\xbaTu\xa3\xac>\x96&\x00t\xb9\xb55+\x88\x0b\xe8\xa9\xec\x03c\xedw\x8b\xba\xdc\xc6\xaa~\xaf\xc6\xb0\xdc\xfc\xeb-\xb7\xad\x9a\xbe\xeeU\x84G7\xebK\xa7[U\xbf\x10\xfc\x14\xcf\xaa\x06\x05\x1b\xe6\xfd\x80\xfe\xf5\x81\xf2\xc6,8\x8b\xa9S\x17z\xe2^:u\xe2z\xba\xd8X\xa6N\xe0R\x84g\xea\xe8\xe6\xd0hG\xb8t~\xfe\x01\x85q:{\xdc\xec\xf5G\x19\x8bi\xa1*\x17N\x88\xce\x88\x8bSc5T\xa4\xc72e\xb4\xc4\xf6Y\xfe\x03vS\x8eY\x9e\xa3\xea\xb1~\x1b\x04\xab\x04\xdb,\xf88\xd2=q\xf9\xbdf\xe7\x01\x1a\xdd\x1f,\xfdU\xbb#hU\x81\x1d\xb0\xcc\xe1\xe3\x08T\xcf\xe2\x7f\x15%\\\xe9|\xc9\xc9+Zi\xf3\n\xff\x07o\xbdc\x0d\xc8\xbd@\xe0\xd516O O\xc5\xbe\xa1Zq\x05\xd7u\x12D\xb3\xf6P\xb6\xddg\x16\x8f=\x8f(S9\x9c\xa8 \x85\xff\xd7<\xd5\xc5(\xda\xe0\x10\xce\xfdv\xba\xdd\xe9 \xadD\xcb\xc8\x98\xe2H\xe6I\\\x0b\xc8\xd5t\xdcF\xff\xed\xe0]\x00\xe6p\x0c\x82d\x0fe\xc4\x13\xd7c\x9f\xc6q\xc8\xfd\xc8\x01V&+}.C\x01\xd4\x05\x81]\xf4m\x8cY\x13\xe4<\xdav\x07A\xc6\x13?\x8big\x8e\xc6\\\xca%\xfa\xc8fAN\x1a\x90\x1bK7\xa5\xe5\xc9!\xbd\xfe\xa7\xf2\x9bur1\xaf\xe3U\xa7c\xb5yX\x9e\xdd\xc6a\x94\xc8\xd7\x0f\xa3f.\x1c\xe6\x08\x1f\x8c\x1f\xac'\xf9\xeaQ}\xddET\xb2\xa5V\x13\xcaV]\xd2\xdbF]\x128Z*%\xf3)J\xe6C\xe7B\x06\x08\xbf\x90\x0e\x12\x99t\x19\x0eh\x0e\x13'R\x02\xf4\xf8\xec\x16\xbe\xf2\xaa\x8d[\xfc1\xc0 \xe8\xc2zF\x9c3y\x89F\xaeN4\xf7tN\xb5\x10\xc5\x82\xa4 \x16\xc9\xdb\xdb\xf2\xc2\x9e8\x9f;\xcb\n\xc71t!b\xd9>\xe3p\x19}i\xe1\x86\xf0T'\xbe\xda\xc2\x85W[\xaft\xaa\xe2f\xe4T\xb05\x91\xcb\x96h\xcc\xc7I\x0bJ\xf5\xc8\x91.\xc9\x02\xe6\xa5R3e !\x03\x7f`/\x040\x9f\x1bzdf*'\x9cs\xe8n2\xb1\xc2\x02\xe0p\x02f\xae\xe7\xf2J*\x1a\xd2\x08\x82\xa9\xe0#\x0e\xc8\xe2l~\x02\xce\xc5\x9c\x128\x1b\xc7\x83Y\x1c\xf1\xc7.(\xe0/\xd8\x81b\xe2\xd0\x1a\xf8\x18%&\xd2\x90\xbd\xf8%\xf6ogVHS\x0e=\xb6p\x96\xb02fp\xddJ\x82\xf9\xb0\xfe\xd1~\xdf\x125K\xcc\x1c\x11\"\xa84\xf7\x9c6`\x03@\xe0\xb4\x123\xdb\x1c=\x8c\xd7\x03\xb9]\x0d'\x0e%B\xc8Py\"GZ%\xed\xb3\xc3\xc1t\xe1'\xcf\xe3\x19\x7f\x969[\xae\xcb\x9e\xee\xb3\x07\x0f\xb6\x1f\xed\x82\xc5\x12{\xb2\xcf\x1e\xec\xee\x0c\x1fA\xf9Cp:9\xee\xf7\xa3\x89\xb4g0\xc0y(\xedG\x0e\xad <+Ax&A\xd8\xef\x9f\xd9\x81v\xd6\x82\x8e\x1a:\x89=\xf0\xd4D\xb8\x02z\xbe\xa3\xad\x9d\x1a\x00\x9dS\x97^P\xe40%4\x15o\xd7\x1d_H~\x00\xbb2\xab\xc8\xee<\xb6,/\x89B\x8c\x90\xa2\xe6\x0d\xf6\xf5\x9a\x96\xe2\xd1\x8e\xd4R\\.O\xe2\x10U\x12\x8f\xee\xdf\x82J\xa2v\xc2)\xf48\xb5-\x1e>[\x91\xc3\xb6\xe9vH\xbe\xcb\xdcb\xc8{(8J\xcd\xf9Bm\xf7`\xfb\xb2\x88\xd3\xcbx\x9a\xc9\xee\xd5\x8d:i\xf5\xa22o\xac\x9b>\xddD\x89\xa8\x97\xd9H\xc6\x95Q\x14,\xd9\x04\x953F~\x16\xbfV\xdaM(B\x95\xc0N\xbf\xf3O'\xb7\xc74\xea\xba\x0e\x8b\x8aC!_\xfdZL\xd8\xac\x90\x98v\xd54\xcc\xbbi.V\x84B\xc2d\xfa\xc2\xfa\xed\x90\x1az\xed\x1b\xe8U;\x97\x14X\xb5\x06\x1a%\x8e+=\xda6i\xa5\xeb\xeaf&\xe7`\x81\x9b\x80\xb3(\xbb\xef50}57\xbb \x92\xc0\xc5\x98c\xac?\x8c\xa1q-wF\xe3\xca)\xb4z\x98\x8f\xbb\\\x8f5\x89[\xbd\xb3\xfc\xd6:\xeb\xc3\xcdrP\x04\x01\xf4CG\xf3j!\xc5h\xda^\x0b\x01\x1a{\xa5\x15\xa1\xe0B\xa6ND[ \xce8\xfa\xa2\x0c\xe2\xe8\xf8x\xc4r\xf0/\x9aQ\xe6|\xc7\x91\xbf\xe4e\x993\xa7n\x02\xfd\xa1*\x1f\x99:q\xfd\x93\xf38\x11\xd5\x9b\xb1L\x0ez\x86\x8a0\xf87\xc2\x7f\xfb,v\n\x8anHE*\xbf\xdf\xf3\xcb\xcf\xbb|\xccb:\x0e\x8b/cA\xc4R`jgv!\xfel\x9cM\xd0\xd6\xb9\xd4\xdc4vm\xe1\xa7/$\x96(X&\xa8\x06\xd1r\xd0\xa2\xaf\xa7\xa5\x18\x01\xd3\x83\xf49\xc8\xaa\xde\xaeT\xc8\x97Zsf\x01\xd9\xaa\x99a6.\xf7\xb1z\x932Y5$\x7f\x1a\xd5\x97\x82\x1c\xd6\xeaB\x9a\xac\x08\xefF-\x19\x19\xa9VO\xc5N\xc2\x9a\xf2\x97Q7\xe5~b|\x12\x13eM\xfcaV\\\xf1i\xc0\xd3zMLUU\xf1\x17Q7\x0c2\xa3f\x18dE\xbd0\xc8\x8cZ\x1a\x0fP\xab\xab\xe5\xc8\x16\xb4\x14\xa2\x9d\x82S0\xda)r\x8av\x8a\x14\xa3\x9dW\xddS\xdfoT!\xeb\xc2_E\x95j+\xae\xd6\xb1\xd8\xde1\xfd\xcb]\xbe\xaa\xc8\xb7\x031\xdcQ\xf01\xa8\x91Q\xd6g=\xd70 \xad\xfc\x863\xc5\xaby\xd7\xaf\xa6\xb5\x98Z\xcc\x1c\xe5\xbc:\xcaXG&\xaf\x0d\xac\xea\xfa\x89\xfc\x0e-\x1e\x95\x8cw-B<8\xc8(0\xce\xd1;E\xf7\xaa@D\xe8\xd5\xb4\xe7)\x98\xf6\xb0B\xd0^!\xae8\xe3\xafp\xcct\x13UHPM\x94l\xf9M\x1cj\xe9\x02\xda\xdd\xb5=\x19\xa1\xdf3\x108P\x9c\x03\xba\xf6/\xf8\x06\xfa\x1c$'\xeb\xd6\x8dG[E\xfc\x1b\x1bx\xd9\x87D\x93\xab+\x91\xaf\xc7*\xc0\xb2o\x8b\xb2\xe0\xc6\xb4\x1e\xca\xe0\xce\x1dV-2\xae\x16\xaa\xce\xfcm\x0cYM\xa0a\x12\xa5>U]\xc6`K\x81\x12\x88.\xcb\xb8\x10\xc0V\x17\xb2\xe3\xae\x8d*Uk9\xee\x02x\xe2_,\x04\"gg\xb8}\xed\xa1\xd8\xdd\x06\xfdR\x0d\xb2\x12\xf2|\xbd\x01\xa6\x86CqX\x18\x88\xe6\xa6)\x88\xf2\xcf\xa1\x1d)\xb0o\xa2R\x0d&\xee\xedY\xcc\x9e\xe9^`\xd6\x1d*\xc1N7O\xef\x01\xb1XR\x9e\x91\xd7g\xe1\xaeQ-\xea\x9d8\x12\xd1\x91\xa4\xa0t\xe2\xf0\xc1)'.\xd3i\x01R\x07)\x071a\x06/\xfbP'\xe5\x10\x9d\\\xdenC\x15\xa0\xfa\x81%\xf0\x07\xdc9\x93\x01\x8f\xb0\x90\n~$\xca\xe0\xad)\x88\xd1\x0d\xfd\x94\x1f\xc8\xd0\xc1Dv;\x14k\x8d\x89)\x04 J\xdej\x1eb\xb5\xa0\xff\xbd\xff\xbeW\xcd\x97\x87\xa2\xfd\xf2\xd20\xc8e'\xeec\xb6\xb9\x99@D\x9f\xfe>\xeb\xfdw V\x00q4\x89 \xd9\xf77j\xb5\x19\xea\xf7%Ik\xbfB\xd8\x12\x95\xc3\xcb\xf0\xd6`\x82\xf2{A\x02\xb8\x18h\xac\xc2<\xe1@\xb3q\xbf\x9f48\xf61\xd0\xb5\xcb>Q\x8b'\x7f\xcb\x17\x18\x86\x86\n8\xae\x8b\xf8Z\x00mc\x1f ]i\x06*)3=\x82\xd3\xbc\xdd\xc5\x8beA7\x9f\xe6\x99f\xc2JwG=\x01\xd8\x8bZ\xb3}\xeb\"QOPD\xdf\xf2\x8b\x15\x13\x8c}\xb8\xba Fe\xaf%>-J\xda\x06\xc0\x14>>f1{\xc2|\xb6\xc9\x86\x8f\x9b\n3\xd9\xb0t\xa7\x07\"\"\xb9?\x04\xa0\xed\xe4\xe3x\xe2j\x0eW\xad\xdd+Z\x83.\x0e'\xa0C\xe9\xf7ckaS\x05\xa9\x1e\xf9\xad\x96>\xb1\x03\x15\x8eN~N\x81\x8fl\x97\xfe\x9a6*#\x9f\xb8M\x9eV\xd0\xc8jo)\xd0(@ao\x03\x1a\xe5\xcdh\x04\xd2\xc4\x8eh\x94\xba,\xc7\x10\x0e\xfd\xbe%\xf0PK`\x03@\x1ah\xe3\xeaJ\xbe\xec\xb3q\xe3DS+\xb3\x9ao\xcd\x9e\xc8\xab{\xe2;\xf2V\x9c\xc4\xd4M\xe9\xfc\xc3 \xcaI\xcfa\xd2c\x81\xf6h(\x1b@\xd5-i\xe4\x0e\x19\xa2\xa2\xc7\xf2\xf1P&~\xc4\xae\x17}\x1fN\xc6\x01\xe0\xb8\xff\xf8F\xfdv=\xd5\x18N\xe05\xf0WJ8\xc9p\x8b\xe6P\xd7\xf3\x8e!\xdd\xc74`\xb2\xdf\x8c\xc9\xb9\xb4/o\xc6\xf5\\\xe9\xc1\xad\xa5B\xd8\x0e:\xac\x05\xc9l\xf9\x02\xbb\xec\x8bAT\x81X\x80\xe3\xb4\x0b=\x0d4,\xedNO5\xee\xdf\x07t\xc8\xc7\x81FO\x9bIi\x88\x88\xe2\xa3\xa7&\xec\xebp2\x8e\x01\xe9\x82k\x10\xd6[\xe9Yq\x15\xb7\xe8\x8c\xa8\xaf\x0c\xf7c\x0f\x10Z\xe4U\x92\x1e\xb3\x0d(&\x15\xe0w\xee\xb0P\x117\x176\xdcp\xb0\x8aW\x8e\xeb\xe1\xa4\xc8_n\x87\x96\xd7X.\xda}\x80.\xeb\xa4\xab\x03\x16\xc9\xa7\xe8|\x89\xd9\xfc\x0f\xe8_7\xe0\xca\xaa\x9a\xff\xbd-y?\x11\xdd\xd2\x0e\xc0\xa9\x9dt\xec|\x93+\x89k1q\xfa\xb7\xd79\xca\x81\xc2\x9b;?\xff\x00\x84\x92;/\xfd\x97x\x0b\x91;;\xf7\xbf\xcf\xb3N\xc1\xf5o\xec\xdf\x8e\x1c\xac\xca:_\x13\xack\xf2\xc6u\"y\x1bl\xb1F.2\x0f,\xe1,fpU\xe6-.\xb9\xb4h\x1cwZuU&\xab\xcd\x7fh\x8642\xc1\x03W\x84\xbf\xfa}\xee~\x9c\xbdP\x93XA\x10)\xd8\xf87`\xa0x\x86\xaf\x12\xab\xa8\xf2\x9b\xa0\n\xb7Ct\x08~\xe5#\xd0\x9b\xdb<\x05\xd2B\x06\x1a\xd5#++j\xe3\xe3\x08x\x10%\x83\x1b\x1e#\xad\xbe\xaf\n\x89@\xc1:\xa1\xa142\x11\xbc\x95\x89h\xdc\xa6\xb3\xca6\xddr \xeb\xc434\xb2\x96-\xfd(\x97\xb7\xfc\x8c\xf5\x10\xd6\xba\xd2\xad\xc7\xa9\x02\x9c\xd2\x00i\x0b\xaf\xdcD\x8fY\xae\x81\xb3\xe0\xc0\xfd\xb2\xa7\xa9\xe4\xc0s\xc5\x81\x8b\xbcT\xe3\xc0surH;\x9c\x1c\x9aN\x0d\x96\x13\x03\x9c\x16R\xf8\xe8p\x02N>\xfa\xfd\xbc\x0b\xdd\xbc\xce(\\O}\x06\xce\x11\x99\xc7\x02\xb0/\x10hHxN\xee@\x0b;a8\x1es\x91\xcb\xc7\xc1\n\xb2\x14\x82\x18 \x93\xc7\xbbk\xe3<\x9e\xa1B8C\xb5\xb3\xa6)B$W\xc1\xbf\xe5)\x0d\x91\xdf_\x03\xf9eo6\x1a{\xd3rd\xc8\xf4\xcf\xe7&#\x9b\x13,r^e\x91\xd3*\x8b\x9c\x16,r^\xfe\"Xd\xb3ekO%G,f\xaa#xn\xb0e\xd9 9\xbb\xe6\xf2\xf2t\"nv\xf5\x07\xf4\xaf[\xda\x03m\xbe\xc1\xe9\xcb3;C\xfa\x82\x9b\xe9K\\\x1aY\x1a\x17_R\xdb\xcd\xb7j\xb1\xf5\\\x84[6m\x88\x16!\xe3\x18\xb4\xdcx\x97B\xd3\xb9\xc7V\x1e\xd8WN\xa5\x81\xa21\x1f\x8b\xa6\xcc3\xd0n(\xc7sf\xfe\x12\xf2\x95\x13\xc6*F\x97\xf5\xc0$\xbc\x99\x97S\x9cF\xe9_\x98\xc4\xad\x04|C\xa9\xa8\x0ep\xaf\xd4*\xa9\xa7\x9d\xad0\xe5\xb1/A3\xbb\xb4`\x9f\xb7<\xb69\x14[\xc3\x99\xbc}2/\x9c\"\xac\xc4\x9b\xa9s\xead\xb1\x1c8\x1a\x00\xd9Y\x83\xe1\xf2\x87\x1a\xf8\xe2H\xb9\xe9m\x87]\xe3\xf5v\xf2\x02%+\xcc\xdd4\x17\x05$\xcct\xc3\xbd}6\x9e\x81\xcb\x8aH\x19\xf1!u\x8f\\\xd4\xc1\x01h \xeeM= nH`\x91\x89tb%}L@\xa8|e\x93\xdfbD\xa3\x1e\xe0?\xect\x94\xf2\x15\xbb\x901\x0d`\xbf^\xa0\xf7\x8d\xd2%2\xac-\xf4\x07\x1b\xe0~%\xbd\x19'\x10M!\x8e2~\x91A,\xa6\xe44u\x0b\xfb\xcd\x04\xe3G\xc4\x88)A\x89BbNlq\xa2[I#\x86\xfb\x96k\xab\xcd\x0d\xc7\x19^\x8c\x94F\xe1\xd6E\x11\x89\xa1\xf3jd-\xe9\xffC5\xcf\xb8\x1da\x14\xff\x8c,\x05\x1f\x043\xbb\xe4O\xfa\xc2d\x8d\xf1\xfc\x01\x03q\xbb\x13\xadaOf\xe3\xb4t\xdb\x8b?\xe2R'ct>\x03W\x9a\xa9t\x80\xc8\x0e\x98\xd2\xec:\xe0P\xdcY\xa0\xe0\xdc\xde \x86\xf6lbnG\xb8\xe2\x1b\x8bbh\xe7\x06Q_\x89Ri\x89R\xa9G\xaf\xaeXF6\x88\x8b;\xc9nCI\x14\xc3\xd5/\xc7C\xf5n\xd7\x90\xf5Gk\x8c\xb7\xdc\xb4gr\\\xe8)\xdc\xc2\xb5\xa1\x087wBy\x9b\xd9\xf4\xfeB\x1d\xb6q+\xa6\xa8\x00\x97\xbc\xb4\x94\xb3\xca\xae.U\xb3\x1c\xe2\x03NOp\xc9E\xb8\x00}\xcd\x05\xf9\xb2\xc5\xfd\xcc\x07OR\xd9\xb4\x03\x95\x85\x95#I\xe1\x1adr0=\xa9Q\xca\xc1\xf4\xc4-\x0d\xa0\xc5\xcf\x02\xd7\xf1G4\x08\xc4\x96)\x9d\xef\x001e\xa3\x12\xa9\x89\xeb\xe38\x8a\xc2\x9bu\xfbvA\xb0\xeb\x14\xb1\x9c\x01\xb1\xbc\xba\x02BY\xec\x9c\x0b\xdd\xabv\x95\x84b\xa2FEU$\x19 \x98 n\xb1\xf5^\xb9\xbcn\xa7r\xa2\x0bD\xff5>\xa6\xe8\x0f4\xaa\xba\x13\x0b\x8cl_\x1d\x92\xce\xc8\x9e\xf3\xa2\xe7&\xea\x1ac)~\xde\n3k2\xad\xc8\xcc\xee\x191\x18\x03\x99^\xbf\xc4\xed\xcb\xf4\xba7]\x15K\x8c\x0epc2\xb9\x1dn\x0c\xc5N/[p\xf0\xd8/\xfe\x8fd$d\xb8X\x1fG\\\xfd/\xd2\xdd:[\xabB\x19val\xb5\x0b7\xc6\xac\xc4M\x99s\xea\xa6\x11S\xa62[\xca\xec_]\x0e\xac\x96)\x14T\x1c\xfc\xa3\n\xf2\xb3\x01\x91\x96\xe8k!w{\xac\x0f\xde\x1eX\x9f\xf5\xee*3\xcf3?\x0cfL\x0dv\x19\xcf\xb8q\xf1\x8d\"I \xee\xeb\xb65\x11Z\x02\xf4\xc2\xb0r\xc7/ES1:X\xf5\xa5\xc9\x14\xb1Q%\xf4\xe14\xc2\x8aC\x8f\xcde\x13f\x19\xd1\x95i\xabS&\xbd4`\xee\x98\xb2\xb7Q\x8f\x18BH\x04\x9c\xfb\x12yj\xce\xb8\xf8=b\x9f\xf1\x8cO3>cy\x14'3\x9e\xf0\x19\x13\x88x%\xb0\x8e\xdd)\"sC\xf8\x9e\\t\xcec\xe7\x8b`\xba`A\xc4\x002K\xff=O\x19F\x1fc3hMpC\xf1\x9c\xa5\xf9t\xca\xd3\xf4\xde\xdc\x0f\xc2<\xe1,X\xae\xe24\x0dNB\xce\x9c\xf3\x05\x8fD\x13wu\xec\xbe\x0b\x13\xeb\x1eE\xcf\xe3(\x0df\x80N\x04m3*?\x1c7\x1f\x1b\xc6 \x15\xbd\xc8\x02\x89\xb5N\x0e\x84'T\x9dc\xac\xf0\x96:\xbbh9S$k\x9d)H\x13\x97\x8fz\x8a\xa8\x8b\xa6\xa5\x90\xe0#\xe9\x89\x9b\x14\xb7JOY\x06\x90k\x06[\x86\xe7\xe3\xfa\xc5\xfc\xea\xe5\xf3\x9b\x03\x88p}\xa5NYm\x91\x96\xad\x86*\xe8\xf9\xfdV\xe7Q\x9c\xca\xd6\xbf\xbd\xd1\xe8\xa2\x1f\xaf\xe28\xe5\x15\x19p\xe8\xa6]\xfc\xd3\xa2\x895H\xad\xcd\x89\xa3\x0eC\xaf\xfd4\xe5\xb3B\x10\xa3\x05\x84\xc6K4\xc1\x9c\xcf\xea\xf1\x8cn\x17~{\x86JG\xcc\xf3\xbd\xf1Qt\x94\x1c\xe5\xdb[\xdb\x0f\xe1\xef\xa3\xc9\xbd\xd3u\xc1\xac\xd0_\xcc:\x89\xfb\x85\xc2\xe2)\x1bnm1\xe5\x80.\x93\x0eX\xb7<\xf6\xe8\x11\x1c\x13\xff\xdb\xef\xfc^O\xde\xff\xcf\xd4=iAq\x9b\x97\x8a\xfc\xcao\xbc}\xf5r\xa0\xc0y\xe9pW6?\x04\xc5Fm\x19\xdd.p\xff_\x83\x9cJ\xcf1~\x19G\x9b\xd3\x98'S<\xc6e\xb1DD\x17o\xf2N>\xea\x85\x8d\xdb\x88\x11o\xd3&\x96\xdf\x0b\x06\xb3 ]\xc5\xa6L\x85p\xa9)\xfaV\xb3\x81\x08 6\xa5\xa2\x9dg\xa7]W\xe0\xcc\x03\xa7B\x1e\xab\xf93\x05\x89#\xf8\xe4AY\x0b\xdbg+\xc5\x96.@\x89P,\xd0\xd4\xb2@\xd3\xe2\xc7\x01\xeb\xe1za#\x06\xbea\ny#\xeb\x8b\xcf\x17\x1d%\xf1u\x86\x0e\xd6R\x9e\xbd\x0b\x96<\xce\xb3\xf6sO!\x00\x8aH\xe1\n\xb7\xe9\xbb\xc4\xa7\x06y\x94\xf0\xb9\x18@\xf9\xcb\x81\x88\xa7\xe0UNt\xe6\xce\x1d\xd6\x8b\xf8E\xf6.\x98\xbe\xef\x81u\x90J\x86\x05\xa4\xba)\x12E\xc5\xf5\xfb/\x8f,\xcb\xbasa\xd9\xff3[\xff\x97\x95\xfe/\xb5\xfe\xb7hpj\xf3@.\xfb\xca\xd8f\x18\xef\xbf\xd0\x98\x8a\xb3\x15B\xc8\x80\x0c\xa7 \xa3\xd7^\x92A\x15\x05.\xf1\xcf\xb9\xd8XE\xb3g\x18\x1ct\x7f\x7f_\xcf\xb9\xba\x92Q\xdb\xcb4\xb1m\x0fvvv\xd8\x88M\x9d\xb9\x83\xa6\xe8z>\x1aGmI\xcc^\xb2}\xf6\xf3\x0f\xd2\xaf\xd6\x90m\xb23\x97}\x82\xd2M%\xaa\xa8\x03\x07t\xde9\x05\"\x18\xec\xd5\x15\x83\x01\xb2}\x0dK<\x16\xb4O\xbbE\xda!\x1e\x0d\xaa\xfb\x1aT\x1d\x0d\x84\x9e\xae\xb0\xabl\xa1h\xbb\xe6\xc4\xae\x8b\nA\x08\xe8W\xb1\xb3\x91\xc6\x03\xd2b\xae\xb2\x8c}'@Hu\x12O\x84\x1e\x0b5 \x05\xfc\xa4$\x9c\xa6\xdf\xa7\xea\x1eT\x839\xbd\x0d\xcd\xdaP\x96\xd5\xd1\x96\xdc\x8b\xd0\\I \x01bp\xec,\xbb4\\Ctn`\xb9\xe5c\x88q\xc6\xf8\x8b\xdf\xb7\xb2\x05\x1a\xbe\x98\xd5\x11\xf3\xd1\xda\\\xb3\xe0\xca\xa4\x01\x87\xd8\x0e\x9e\xb2\xb8\xc9\xb7\x08\xbf\x98r>K\xd9\xd2\xbf\x08\x96\xf9\x92\x15z\x8b\x0c\xa1\xf2}9\x1b\xd9\x1e\xde\xdf\xbb\xffpg\xf7\xfe\xde\xf5\xdbk\x07\xe76\xad\x17\xdd\xd5\xafx\x04bG\xee\xb8\x1d\xcb8R\xc4^\x9c\x14{q.\xdd\xc0Kk\xf258\xe5\xe6\x8d\xd8G\x13\x9bf\xc4\xd7\xdd\xfb\x02\x8b0X\x04\x99\xeaZ\xbb\xc1\xc0i\xf9)b\x0b\x12\xa3W^\x11\x0cr\x00\x99\xd2\x1d\xc2m K\xcb\xe46(\x9f\x83\xf6xW\xeb\xae\xb1\xb32\x044q\xf3\x01\xc2F\x9a\xc9y)\xff23\xd3\xa6\xcc\x10\xda*R\x1f\xed\x15\xa9\xc3\xedm\xb8\x0f\np\x02\x18 \n\x8e]\xae&\x02\xdcz\xff\xf7\x1f\xfc~\xafq\x1d\x9av\xef\x84\x1d\x85\x8e\xb1 \x82\xc178j{\x15D\x96a>\xabK\xb5\xea\xbe;\xd1\x05\x87\x1f\xdc\xe2\xc2N\xe4\xec\x0co\xe2\xdb\x93\xf4]/\x1a\xee\x1d\x1f\xf3\xf4\xcbx\x96\x87\xbcW\xa7\xda2T\x90\x1eJ\xc1EY\x0f\xc4\xd3k\xb2UQF\x00\x89*\xec\xb1X\xbd\x96\x1b\xd0\x07\x93\xdd\x08\x1cq\xb8}Pw\xf3\x1b\xcb\xac\xfb\xdb\x10\x95\xb3\xc8S\x1d\xc0\x90cd\x1f8\x12\x99r\x9c\xd2\xef+\xb5Ca\x9c\xc0\xba\x9f\xbe\xf5\x88\xe9/\xc7\x04\xa8}\x87&\x8b\xd3x\xb9\x8a#A\x0e)8\xa8\xe7\xd9j5b\x97\xc5\x0cZ\xcb\xf9y\xb6\x88\x93\xe0\x1b_\xf4\xe4u\xbc\xcaW#v\xd2\xbd\x1a\xff4\x8bF\xecx\x8d\n\xafV<\x81\x8fA\xcd\xf3n5\xd3\x11;l/\xf9,\xcf\x16/2\xbe\x1c\xb1\x8b\xf6\xc2\xa2\xd9C4{{\xdb^:\x16\xc5\xb7G\xecY{Q\x7f\x15\xfc&\xbf\x14}\x19\xb1\xe7\xed\xc5O\xfc4\x98b\xe9\xf7\xed\xa5\xe5\x91\xe4U{\xc908\xe3ox\xba\x8a\xa3\x94\x8f\xd8\xeb\xf6\nA4\x8fG\xec\x8f\xb4\x17|\x11\xcd\xe3\xe7\x18\xd8\x9d'#\xc6y{\x95\xdf\xc8\x97\xabw\xf1k_\x8c2\xebP>\x8e\xc2 \xe2?\xf2\xc3`\xe6gq\xf2\xa9?;\xe5#\xf6\xaeCE\x85]\xe9\x88}\xb9F\xf1\x11\xfbi{\xe9\x02u\xdf\xe6\xcb\xa5\x9f\\\x8e\xd8\xcb\xf5+} A1G\xec\xcd\xfaU\x11~\x9f\xb5W\\\x04\xa7\x8b08]d\x82\xe1\x18\xb1\x9f\xb5\xd7H$\xa6\xa4#\xf6y\xf7\xd2#\xf6M\xf7\xc2\x9f\xc6\xb3\xcb\x11\xfb\xb4\xbd\xc2\xcaO\xfc%\xcfx\x92\x8e\xd8\x8f\xd6(\xfe&>\x1f\xb1\xdfh\xaf\xc0/\xf84\xcf\xf8\x88\xfdV{\xd9\x05\xf7g\xd0\x91\xdfl/\x0bF\xb4\xe9\x88\xfdZ{Q\xb8\xc5\x17e\x82y\x1d\xb1\x1f\xb6\x97\x8f\xcfxr\x16\xf0\xf3\x11\xfb\xed\xf6\xc2\xf38\xce\xc4\xc2\x8c:,\xb4\xcf\x830\xe3\x89\xb6\x9a\x93\x0e\x95^\x0b\x88\xe3t\xc6\x1d\x8aO\xf3$\x1c\xb1\xa0C\xc9t\xba\xe0K\x81\x83~\x87\xc2o\xb1\xb0\xd6\xf7\xbcC\xade<\xe3\xe1\xe1\x85\xbf\\\x85|\xc4\xc2\x0e5\xbe\x145~\x9c\xf8\xab\x95\xf8\xc6\xb4k\x8d\xe7q\x18\xfa+\xb1F\xd2\xaeUFl\xde\xb5h:b\xab\x0ee\x0f\xa3|)\x9b\x9eu(\x8e\x8c\x8e\xac\xb0\xe8P\x01\xcc6e\xf9\xb3\x0e\xe5\x0bg\xf7\xb2\xce\xb2S\x1dd\xb8F\xec\xb4C\xe9w\xc9\xe5\x8b\xecU\x9e}\x9ag\x99 \xeb\x97\x1d\xea|\xe9'\xefg\xf1y4b\x17\x1dJ\x7f\xea\xa7\xfc\x0b\xff2\xce\xb3\x11{\xdb\xa1\xfc\x8fx\x92\n\xde*\xf1O\x97>\xae\xb7\x11;\xe9^\xf1m\xe6/W#v\xdc\xa1F\xb1a\x1c^d#\xf6\xc5z\x15\x80|~\xd5^\xe7\xb5\xa2\xb7\xf0\x91__\xa3\xc2\x8bh\x1a\xe63~\xb8\\\x89\xd9\xfcq{\xcd\xa2{\x10i\xe4\xc5\x1a\x154\xaap\xda^\xed3\xceW_\x04\xd1\xfb\x11;\xef\x00e\xc1\xff|%H\xda\x1f\x1d\xc8\xd7\xe6\xb2\x02ap\xeb\xc6\n\xeaw\x03i;;}\x96\xa6\\p\xf8\x87E\x87\xc8\xd2\x9d\xe4\xd8\xb4\x9frV;K<\xef\xa4F\x88:\xb5\xf5\x9eh\x8b\xd4\x1c\x8dg\x05\xbc\xd9\xbc|M\xcbW\xbf|\x0d\xcaW\xeal\x8az@\xf9\x8a\x87\xbb\xb0L\x88<6-\x7f\xad\xca\xd7E\xf9zV\xbe.\xd5k\xe3\x89\xf7\x15\x87\xe0\x03\x8f\xa8#/\xe6m\xef\x1a\x11\x8e\x8a\xbc\x9d\xedz\x9e_\xe4\xdd\xdf3\xa2\xe5\x14y\x0f\xef\x1b\xf1\x80\xca<\xe3\xf8\x1d\x96yF_\xa6E\xde\xa3\x9dz\xde\xbc\xcc3\xfa\xb2*\xf3\x1e\xd6\xf3fe\x9e\x01\x97\x85\xca\xbb\xbfe|\xef\xac\xcc3\xda\\\x16y\xc3\xadz\xde\xa9\xca{\xb4c\x8c\xef\xb2\xcc3\xc6pR\xe6\x19\xdf;.\xf3\x8c1\x9c\x17y\xf7\x8d\xbe\x1c\x96y\xc3z\xdeE\x99g\xcc\xfb\xdb2\xcf\x80\xcb\xf32\xcf\x98\xf7\xf7e\x9e1\xef\xcf\xca<\x03.\xaf\xca\xdaq\x07\xdc\xebv\x11G\xab6\xcd5\xd9\x1amW\xc7\xceQzs\xa8\xc5\xe8=}\x10\xa0\xad\x1a\x04D\x10\xa0\xadj3b\x1a5w\xc9\x807\xbfU5\xb2\xf5x\xfd]ugDN48\x81\x1eD\x837\xf0\x03tX7#\xd7\x12\x8e\xa3\x00X)\x8d\xb3\xdb\x87.>\xaa\xdd\x02\xb2\xaaM\xf1\xc1\xaf\xf3\x14Y\x11\x8f\x84)\xc3\xf6\xd4j\x82\x10\xaf\xb4F\xf5\x98\x06z\xc2\xff\x8c\xf9H\xf5-\\j6\xaf\xbe&\x13\xc9\xd0\x19\x14&\xc5\x1b\xd3\xd1\x0c\xc6\xc2\x82D\xff\xda\xaalar\xad\xaf\xb54\xe7\x05ab\x9b\xe7\xac5\xd6\x1a\xec\xe4Y\xe5\xae\x1d\xb1s\xdd\xc7\x01n\x96\x06\xb8\xa9\x0c\x106]\xb7_$\xa9\x86;\xb8\xbfg0\x14.\xe7\xac\xa9\xcc\xb93D|\xc1\x83\x0c\x83\x9b\xd1\x1b\x98\xa3!G\xe2\xac\xf3\x00x\xcf!\x85\x97\xb0|\x0e\xcb^\xcf\x05\x8c\xea\xbe\xec\xc3\n&p\xed\xac\xa7\xcbY\x1f\x96\x8c\x8c\xb0\xaf\x86\x10+\xe6^\x99\xf4-\x0e\xc6\xb5p\xf7\xc7A<\x87\x0e:f,\x06!\xbdM\x1d\xd7E\x0f\n\xcd\x10\x88\xb3@\x17\xadi4\xc0\xab\xe8>\xb0\x01q\x8b)Q\xa4\x19\x944b\x924}\x9f5W\xc9%\xa6\xe0\xfd7!\x1b\xd5\x8d\xcd\xc9\xc6\xb3\x9d/<\xc10{6;\xc9\xe3\xc1B\xd4\x89\x9c!\xab\xc8\xa6NyT\xeb\x07\x12\xef\xd0\x19\xed\xed!)\x15\x14\xf5\xd9\xa6 \xac[\xe2\xef\x9e\xf8\xfbTKh?p\xf3\xc46]Y\xc0\x95\x87\xcd\xec\xcb0\xbf\xb5\x88i\xbc\xcb\x9a\x83A\xa0'\xd0\x92$VI\xe8BO\xb8\xd7\x82u\xa9\x14\xcf\xf9zU\x87r)\x1a\xa9\x96_\xf3N\xb7\xab\xe5+A\xe7\xab\xe5KQ\xbe\xe3\x0e\x12ZQ\xcb\xde Z\xbf\xe3:U^_\xf4^\x9d\xda\xb9h\xad*Y\xde\x88\xf2*;u\x88\xb1ws+\xb3\xf2\xc3[\x1eI;\x8e<\x9aT\x82q\x9e\xe0#\xb1\xee\xe5G\xaf\x18\x05\x17/!\x01\xf7\x9c\xdb*w_1\x0f\xa9(b\x0f`\x1fw\xc9\xc5`Q~p\xcc\xd8\x97\x8e\xdd\x04T\xef\xcf\x0e\x8a\xdd\xc9\xc9\x00\xa3\x8f]S\xa7\x8aG\xea\x87QC\xa7\x9cZ\x17\xed\xa6\xa6\xa13z\xe6*\xb9\xcbg\xad\xac\xfd\xe4\x87:W}\xb82\x1b\xc3\x1b\xa2\xe1\x08\xc2\xe5\xbcb\xf4]{>\x8a\xb5\xf8H\xff\xe0\x11\xd3\x0e\xafi\xc8M\xdb(w;\xbbr\xd5\x94\xa7\x9a\xa0\xf7\xe6 \xc8\x9f\xab\xe8\xf7\xa1q\xce\xd7\xf5\x8c\xa5P\xcc\xa3\xe3t\xd6\x0e\x8fi\xa9\x8b\xea\x84G\x11\x1f\xb6p\xa2)\x0f\xa7<\x98\xd3\xa6`\x85 M\xf0\xe9\xe0\\\xebM\x0bH\x83\xcfCt\xa7\xd4/\xc0\xb5\x08xH\x07\xe7\x9e\xbe\xc6]\xb3\xc5-\xa8\xd2#O\x18z~\xcd\xcd.\xd1\xd0\x91\x0e\xce\x93RZ\x8c\xbcE\xa37\xb9\xfc\x08c\xd8\x82|F\x18\x817\xba\xc2\x98\xa5\x0b\xe2[nq\xe4'\x11\xf1.ps4W\x0fDu\x86p\xcd\xb5=\xac=\x8fV\xc4oH\xede\xde\xc1\xea'c\xf2\x0c\x1at:\x9b\x02v\xe8\x14\xfb\x07\xda\xb5\xe2\xaf}tj\x15\x0e\xb2\xac>\x97\x83\xc6\xe0\xa0\xb9\xbd7\xa0aJcG\xf0\x1f\x19\xba\xbap\xdfPo@o\xfd\xd4\x11\xeed\x9d\xa1\xcb\xeb\xb0\xdd\xa6\xd8\xe2\x07\xce\xa1\xd3\x15\xfbn\xc3\xbb$~\x08\xde\x9d\x17\xd0.\x0fI\xcd\xd6\xf1\x83\x13rk\xd8<1N\"\x9cA\x13\x87\x9f\xd8\x81\x13\x9b\xa9\x01T\xf7e#Xp\xfc\x1d\"\xe6'&\x11\xe8\xdc.\xd5\x8f\xde\x95\x07\x9f\xd4\xf8\x8d\xc8\xb7\x08\xaf\xec\x89 O\xec\xa08uR\x94D\xad#\xff\xd8n\xe4\xfch\xd2\x0f\x9e{\x15\x0e\xce\x8d\x01=\xc3bR(`\x8b9\x19\x8e_\xfb\xb1\x8b:q\x19\x98\x99o\xac\xe2\xf0\x03\x8f\x84\x8f1\x8c\x98`\x1e\xe6\xe0\xa7 \x0d\x16\xb60\xba\x08\xe7\x0f\xe8&=i\xcb<\x81\"Z7\x9f\x85\xe77c\x08\x9b9\x93\xf3\xf9X\xcd\xf1\xaf\xfb\x18\xb8r\xf9i\xc7\xb1\xa4\xf9E@\xe0|\x14\x01\x9e\xd9\xf7#\xf1\xfd[\xb2\x01Gy\xbe\x8c/?\xf9]v\xc6\xe4\xe8\x1fr\xf4\x1f1\xfc\x0e\xfb\xd01\x8d\xb7\xdd8\xc5\xf8\xec\x13i\xb1~\x0dk\xf7\xd98\x7f\x8deQy\xbb*\xfe\x11\xb8\xd7O\xac\x1b\xf6RD.>\xe9\x83\xdc\x14\xdd>t\xcf/\xbbn\x1f\xe6\xdc\xd5Jx\xcc\\\xfaU\x17;=\xfaP\x07\xd1\x84\xb7\x9bc\x8a\xfcY!.V\xa0\x1f\x15=\xd7\xe0\xa1\xa8\xbb\xfa\xfc\x107O\x925Ppv\xfc\x97z\xf2\xf2\x92\x84\x8b/\xfc\xc7\\\xf2~\xf8\xeb\xbaV\xf9R\xad\xcc\x19\xc5b@nq\xa5&\xd4\x1d\xbb\xaes\xa2\xc4\x8c\xaa\x8d\x8f\x86\xe3fQP\x8ar\x07\xceJ\xae\x9ak\xd3\x15FWe\x9dtGI\xce\xca\xcey\xb67\x98\x80e\xd4\\\xe3\xd9\xc9jq\xe9\x07\xd9\x18v\x16\x8b\x9f\xe3\nL\xbc\"\x97\x8f\x841k\x80\x7f\xad>K\xd8\xb3S1\x8f\xceH\x0dTS^\xe7\xf2>Bti\xd2\xdc\xcb\xebH\xd6\x11\xaa\x10\xe48\xcd8$\x82\xe8\x18\x89\xb9\xd4\xc1\x84\xf4\xa6\xea\xb8\x89\xdd\x14\xe9\x07\xa8\x98\xa18Q0\x04\xecG\xbc\xaf\x1a\xb9\xf9#\xc6\xa4\xe0\x93#\xf1D\xc5\xe6\x8b\xc1\x82\xad\xb2\x15\xa5\x8b\x08\x0f\xfb\xfb\x80>r\xfc+a\x1c4\xbd\xe1\xbe[c\x0c-R\x9a\xe4\xc2Y\x0c~\x82\x1e,\x06\xbf\xe1\xffx\xbfr\\E\xc8\x0f\x92):)\xbd\x1c:\xcf\xf6\\G%\x15B\xbb\xba\xeb:j\x11\xa9*Xy\xbf'\xa5\x1e\x15rS\x9d\x1a\x83N\xd3\x1aK\xfe\xe8@G\x98@\xd1<1\xf4\x14\x10w\x1d\x1e\x8aD\x8bg50\x15\xc3u2\x06\xe0\xce\xb1k\x1d5.w\xd3\xb0\xc5\xa8n\x9cL\xee\x8d|\xd9Nro_+\x9aV \xe9\x1c\xb3\x86\x1ao\xc8N\x06x\x84\xbb\x03\xdc@\xce\x95\x8a\x15\xb6i\x91 h\x9a\x92\xca\xa9\xea\x0f=N\xb4R\x83\xd2\x92\xbb\xf2Z\xb57\x91\xa8b\xd6\xd8\xf8\xed\x05UIFm\xb9 A4iI\x90\x0f2\x96\x8b\x99\xc5\xbaf\xa4\x9c\x9d\"\xed\xd5\xac\x18|\x01\xf6\xc1\xef\xf5\x9a\x19\xc0\xc4\x90\xb6C\xfd\x88\xec\xc9\x9c\x02\xb2\xbd\xd9\xeb\xf5\x0be\x19\xc3\x88\x96\xa9\x0e\xd4O\x82\x9cE\x92'q\xc8D\x12\x89\x8d\x0d\x94/b'lb\n\x8d23\x084W\x9a\xd2\xd6\xd3eG\x90.\xc6\x03\x1e}\xc2\xf1\x07\xd7m\xcf\x95\x98x\x8d{\xf7[!\xba\x19\x8b\xa3\x07`\xf1\xc3q\xab\xbe\xea\xc5\xb6\x03\x8b2O#\xdd\x82}\x05\xa2\x81\x08\xc0\x1b\xd9V@!A\xf8\xf5KmMtgu\\\xdcuc\x94\xc1\xf2P\x93\x1b\x1f\xb9\xce4\x8f\\P\x87\x9cG\x12\n\xc3\xb1~%e\xb8\xa1 P\x8c%L\x85\x9aT\x03\x12lg\xd4\xa2\x9dt:\x9c\xa9m\xf5!\xd5gd\xc7\x167[\xb6\xc8Z\x19i\xda\x15\xe5\x86\xd6\xb7\x1e\xd4:\xfb\x7f\xd3\xd8\x87xj\xe8i\xfb\x0bzb\xffo5\xf4'\xea\x180N\xe9B\xc4=\xc66\x94SQ\x8b\x91f\xbb\xb1\xea\x8d\\d\xb9\x1d\xc5\x14\x84\x83\xf7Y\x8a.1\xc7\x17 \x8d\xaf)\x06v\x88\x07\xbf\xd1\x8b_\xfc\xb4\xfa\xac\xfc>O#\xad\xbd\xde\xcc\xf0\x91\xf6z3\xa9^o\x86\xce\xb3-\xd7!M\xd7\xf9ZNX\x1ay\xb5\xca+\x19\xf7ui\x13\xf0> \xa5\x00\x94\xde\x88\x90*\xa4\x06\x16o\x00\x9e\x035&\x98\xe6J\xeeE\xd8G\xbe\x9c\xa2\xdd\xc5\x97(\x88\"M\xd2\x0cPEScl4\xc8\xa3\xd5cl\x1c$\x04\xa9\")\xb6\x8d>V/)\xb5\"\x00\xc2\xaf|\xca\xf8\\\x9e\xaf\xbf\x00'qy\"D\xdb\x9a\x90\x81\x0cv\xe9\x04\xd6\x06\xf3D\x1e\x1d\x9fcgH\xae\xfd%I\xa5n<\xff9HR\x12\xceI\x10\x85\x1a\xad\x05\xc6\x7fC\x83\x1ey\xda\x98\x00z-\xf2\x7f\xe5\x15\x1d\x83\x1a\xaeq\x8a\xf2\xe3\x89\xc8\xa5\xadu)|\xce\xad\xda\x8frU\x95.M\xb5\x06\x92\xfa\xdd\xb1\xe0\\\x94\xb6\x8b5\xec\xc3<\xf2x\x94\x1c\x1e\xff\xeb\x94\xde\xa6G\xd1\x9c:]\x9d\x8e\x92\x8b~\x81;\x888\xe5p\xd6\xba\xb0Q\xec\xe3]\x92\x98x)\x8d_\x93\x94\x8c\xaby2@J|m\x00\xb1\x1e\xccI\x8a\xb7\xbel*\x8b\x06\xfc\xd6\x12\xe1\xbc\x0f\xedf\xbb\x16A\x08\xf5\xdd/\xc21\xc4\x06~\x0cS\xb2\xf2\x9d\xd4\xb4D\x80\xfb\x8e\xc7\xb2b\xef\xc1>\x86\xcf\xa5<\xfe\x0c\xcf\x0e\x1a\xa2\x9e\x1c\x1f\x19\xe6\xd4\xea\xdch2\xbd2\x9c&5\x93J_o\xa8\xc5\xc5\xef\x9a!\x8fLA\xae\xda\x804\xd0\xfe\xdaN\x95,\xb0>\xc1,\x8f\xa8\x15\xf1\x88Zq-D!W\x07\xe1ej\xcaD\x06\x8cf\xbapR\x0c\x93\xaaa\xc0\xa2p\xe1/\xb3\x98\\p#\xdb\xfa\x12/i\xda\"\x0c\xa0\xa2\x0djB\xcd\x07\x9e\xff\x8d\xeb\xa87\xa13\xaccm\xd5\x89\xc1\xf2*\xcbm\xa2\x8aNc'\x1e|\x80\x1e\xc4\x83\x8f\x16i^\xa4\xf7j+\xe8\x10\xa1\x9e\x8b$G\xc1\xf6\x82/\x7f\x18\xa4\x9c\xd0\x84\x1e\x9a\xa0c5E]\x08\x93blF\x93\x17\xf1\x1aOH\xe0\xb8U\x11\xd6v H\xe5\xa8\xb6\x82\xee\x1a\x8f1\x99}\xf8\xee\xe3\x12\x91\xd3\x1e4,\xb3\x96\xe8;\"o\xddt\xcf\xcfM\xf7\xca\xe8xbA\xc44n\x8d\x84\x11#\x11\x987\xda\x88n\xbe\xd6\x92A*\x00\xc3\x01E\x93\"\xa1u\x1d\x17r\xb0\xeb\x84(\x9f6k\x04\xdb\x00T\x82\xce\xba\xde&b\xf4\xd9A\xa32\x99_\xc2\xe9*\x15\xbb5+J\x0c\x01?\x88\xe9\x92\x864f\x0c\xd8\xc7,L\xfd\x15\n\xdd\xc2\xa9gIS\xc5\x95\xe7\x88\xach\xe2\xc4\xee\xc0\x0f\xe7\xf4\xf6x\xc1\xda\xaf\xbe\xdcu\xe1eM\xe3\xe5\x83\x08c\xa7\xeb\xae\x809&{\xd1\x0d\xa8\xe0c\xcb\xd6\xb7{\xec\xd4\xc2\xb4\xec\xfa\xb7\x94\xc8\xf9\xc8;\xd5yx\x11}S\xf7~\xb1p\xc6\xeb%\xeb`\x8b\xf7\xb5\xeb\xae\xb6\xa5\x18u\xd6\xeel\xf4;\x0c\n\xa37tU\xaf\xf8`\xd5\xb1\x9c/v\xd95\xab^\xcb7\x91\xdd\x93\xbb\xd5E\x14\xc0D~\x19\xd7\xccVA\x9c5\xfe\xc0O9@\xd0\xbe\xf1?\xffS\xfe\xec\xd6\xeb\xa3\x8e\x92\x87}}[~\xa9T\xa6y3\xc17e\xb0\xc3S\xb2\x14\xef)%\x9a\xb7\xf0\x92*BX\x95\xce\x94zMOX\xf7\x99\x91\x15\x04\xc2z.\x04\xc8\xf0\xa9\xa8\xe9\xb9\xad8w\xc7\xd4\x0d\xecC\x80\xb9\xa6d\x93\x0c\xde\xee\xe0&&\x8c\x99?\xaf\x93))\x03t\x93,Y\xd3pN\xe7')\x89S\x0d\x0c@H\x04E\xcd\xbf\xfa4\x98\x1bj\xa2C\n\x8f\xa9\xe4\x87:\x90\x820\x06\xefz\xd1j\xcd\xf6\x92\xa9\xa5k\x9ePA\xfbl\xa5qC\xc4\xf2)\x995\xd1Bhb\xce\xf4\xc0Z\x16\xbbfI\xd3\x0fr\xe3\x1c/\xf4#\xbc\x83}X\xb2e^:K\xe7\xbd3\x9d\xb9\xbaKS\xf48\xb9C\xb3(\x14n\x85pw\x87I\xb3ej\x91;\xcd\x8blD\x17h\x9c\xad\xde\xf9\x1e\x96~\x95\x028;+M+\xb7\xa5\xfa\x17\x15\xeb\xed\x93>\x9cT\x8an\xfbp2M\x18\x88o1MW@\x90\xc6\xb3\xe5\xfcIb\xa4(\xbf\xf8\xa5\xcf\xd7mp6\xc3\x83\xd2\x19\xb2\x0fW8m\x8c'\xaeu+\xb5!j$n\xe8\xaf\x9cs\xf5\x0d{dh\xed\xde`\xa7\xf9\x04\"t\xca\xe2\x1e]\x0f\xb9'\xcbU\xcb\"\x9f\x0e\xe5\x8e]Jk\xfa%\xd0\"\xf7+\xc4\x8f\x8b*vuY\xd97 \xb2}\xb8\xc8O\xe3\x074\xd6\x9d\xf2\xd3\x18\xf2\x01Ur\x1e\x82\\\xe0+z\xd7\x9c\x8a\x04\x14R35\xa46\xa8\xf9\xaf\xa7\xd2\xa8\xc4\xba\xbe\xec\x94\xbe\xa6qB\xab\\\xb4\xfa\x91\xa3\x83f;>\x91\xd9@\xde\x1d\x19\x15\xd4\xeaG\xca\x06\xe9`\x1d\xadMZM\xf5\x83\x0c\xb5\x98fn\xd0\xc3\x91\x08\xd3h\x84\x1c\xb5\xb8\x91\x92^l\x94\x1f\xb3\xa5\x1c(\x02q\xde\xde\xd0\xd6\x9e\x96Hx|`l\x91\xdf\xf7\xe1\xb4D\xe8\xf4\xa0Q\x0e\x8c1\x9c\xeaW%\xa6 m\xb4\x02\x91\x1f\xccz\xc1\xedp\xe8\xb5b\x9a%\x14y\xf2gBCy\x81;8\x17?B\xf1L\x81'\xffM\x03\xba$\x18\xa5\x84'\x92\xc4\xd2\x15\x86 \x95\xd9\xc0\xba\xa2\x94\xc4K\xa5\xa54\xbe;\x0c\xd3\xd8\xa7\x89\xcc\x97\xec|p\xfb\xd0i\xb0h,\xa2\x9d\xb3uG\x91\x17\xbaiWxo\x88P\xdbCW\xe1N\xb8v\x86;Kux\xea\xb4\x9eL\n;\x12 \x86X\x1d\xe1[i :z\xf0'i\xb4n\xa1\\\x03i\x00\x95\xa3\x8f\x19\xb7\xa5\x0dU\x05H\xd3\xe1l XP?\xb2\xb8\xd8`*}\xd4\x93p\x98\xd0\x01\x1eJ\xf2\n\x86-\x82\xf9eU\xd3\x14_\x93zb\x020\x83\x821\"L\x8c<\xbc\xf5\xe8:\xc5\xa8\xb4\x0f\xc4J\x06\x9c|\xa0v\x00\x156\xdf\xcd\xb4*vL\xa9\xf6\xd5\x8f\xd4J\x0d\xc4\x96\x140\xecC&\xf0\x16m\xc4\xc5NA\xef\x11\xae\x04\xaf\xa3\xba\xc4s\x86\xcc\x1d\x8b_\x85y\xe4\x12\xc5\xfd:\x1aHg\x9d\x0d\x18=\x07\x1fU\x11\xcfacC\x1b\x17B\xfd\\\x8b\x1c\xffU\xac\xf2\x1b\xcc{@H\xb1\xa4\x15\xf2\x81D\xc08\x8a\xc4\x9e$\xac\xb7w\x91\x97\x13\xe8\xd8\xe9\xd2pn3\x1d\x97\xad\xc8W\xe1\xc5>\xe4d\xabi\xa2 &\x8b\xb9kD6\xf4>tQ\xc3\xf1.\xf2\xba\x96\xd3M\xfd\x04\xe5\xd7\x85J\x18\x1bhw,\xe1\x9dm\xd0f\xb4P\xa3\xcc/0=/\x1f\xb0\x02\xb7\xa2\x10\x1d\x10\x9a\xc7\x01\xda\x96\x8b\xb9\x94\xdaV\x8a\x1b\x1b\xfe\\\\z&\xdfs\x8a\x8d\x0d\x7f6i\x1et\x1f\xbc\xa3\x0d\xd4\xfc\x1b\"\xf7F\x1a\xdfA\x92\x92\x94b\xd6\xf4\x1b?\xbd\x8c\xb2T(\xc5\xa2X\xde\x07\xb4Yy\xf8n\x10\xb7\xd6\xb0\x98\xf9?\x84\x84\x93\x8b8[\xa7-l\xac\xe5G\xe15\xed\x94*\xcc)\x95\xf1Z@~r&\xb0B\xa9B\x03\xbf+?\\\xb9\xaa\xa1\x18\n+\x10W\xb6rny-\x96*.-U3VI\"m\x10\xe8\xd5\xcfEL\xc9\xd57]D@}&\xa6)\xc5\xc6\xc5y\x8f\xfa\x02\x99>\xac+}z\xf0\x16Q\x01\x0e\xc8\xd4%\xbe2el\xcc\x17\xac\x9c\x05\xdb\xe5a\xe2s\xd7\xd7\xfc`@-^#wA\xe4\x11K\xfb@\xc4a\x99\xf6\xb11\xc7\xc2=\x8a\xa3W\x1do\x1f\xae]a\x0e,GA\x1d\xf2 \x06N\xbe\xf6\x00\xa4\xff\x16\x1cVi\xc58<4\xcb\xc6\x1fLJ\xf3\xc7\xf6a\x0c\xe2\xea\xa3R\xd3\xc9Y7\xb9\x83\x04\xf3\xc2\xfe\xd6\x98s\xd1D\x19\xc0\xfctf=\x84Q\xbc\"A\xa9\x07y5\xed\xa8o\xa4n\x1f\x0c\x1e\x7fz\xa0/\xfc\xd0O\x1a\xfd\x13\xf2\xda\x05\xc7o'2iNd\xda\xf9\xd3k\x88L\xda\x82\xc8\x84\xea\x8e\x11\xdbKe\x9csL\x0c\x95\xad\x81\xc9\x89\x17)\x8d\x19e\xe9\xa3\xe3\xb8 h\xf0P\xb2\xdd\xca\xdbC~\xfe\xfd\xa0)\xa8\x92\x80d;\xa2\xcb\x8d\x84\xdb\xb2\xa4\xa0\xd9\xb5\xb1\xd8\xb5\xcd\xfd\x81\xa26\x8b\xed\xbb[\xfd|0\xd9d\xab\x1f\xfb\xb1\x0e\x05\xc10\xcb\x11\xf0\x85GG\x8d\x0b\xf2\x03&\xca\x07\x82\xef!iJW\xeb\xb4\xfb j*\xb5\x01x\xe32\xae\xea%\xad&\x82\xea\x0eR\x94\n\xf6\xe5\x91Woc\x8c7`\xe7\xecc\x9adAzDVt\x0c\x0d\x01-\x18]{\x17yc\x83m\"p\x85\x0e?\x9d\xb8\xe2A\xa1\xab9u,\xc4@\x03q\xac\x95VM\xc0J?sy\xf6\xbcA\xcd+q\x95\x9f\xf1\x8a\x9eI\x89\x0fs(\xf2\xe6\x1d\xea\x01Q\xcb\xa7\xe9D\xaa\x82[\xfb\x0e\x11Z\xe5S\x07\xef8\xa7:[f\xb1\xc8\xfe\xe0\xdc\x0f\xaf#\x8c\x02j\xb3\x15P?\xb9\xdd\x80U\x8b\x99\xb7f\x8a\x95(?\\s\xc8\xd6n\xae\x11\x08rm-\xf8 \x90 \xa6d~\x07q\x16\x86~\xb8\xb4\x89\x01E\xabZc\xf9jU\x95\x1e\xe5\x19\xc6\x0d\xd9\xf0\xe5GL\xf4\xadA9\x0e\xcd\x9a\x85\xb0\xe0\x00\"<\x96\x10O\xfd\xe7\x8d*Z\xc9\xf6\x85\xf9\x06m&\xef\xa4\xa9Q\x10\x0dg\xe8\x14B\x18\x064\xd3W4\x96m\xd32\xc8\xca\x08\xe3\xeb\"\xafns\x1f\xa0(\x85\x1a+\x7f\xa9x\x06\x12\x13\nZ\"\x97\xc7\x85Pjb\xc3B\x0d\xdb|\xfe\xe4\x92\xb9\x8a]E\xa3\xcd0+\x90x!q\x92m\xbc\xcb~\x9b\xde\x01\x9d\xa9j\xba@\x07_m\xf0v\xe2C/1\xb6\xa1BU\xc3\x01\x97O\x9d\x82o\xe5\xad6l\x18\xd8\x87\xb9\xbd\x8a\xd4\x17\xdd\xe4D\xa8\x19\xb1K\xdcq\xd2\x9a\x99\x10\xc0\x957 \x13\xb8\x841\xac\xfb \x8e\x8b\x87\"i\xe3u\xa6\xfa\x11I\xfd\xb0\xabvZ06\xc6\xb1\x18k\xe3\x0b_\xb3\x07T\\MrQ\xc3\xc9\xf1\xae\x90Y\xa4ZV\xd2\xad\xc4\x8eX\x06F\xbaV\xfa\x99-}\xd8\x07\xe2\xf6+\xc97M\xc7\xf0\x8d\xed\xc42;S4\xaeX\x8ai\xb5$z\x99\xd7\x89\xc4\xcb\xdc\xb3\x07\x87\xd1v\xa6\x8d\x11\x1c\xda\x0eQ,E\xc3\x08\xdb\x0e\xab\x15\xd0\x0f1\x9e\xa0\xe1\xe1\xad\xed\xe1\x89\xed\xe1+=0\xa6R\x01\x91c\x9d$=\xb3\xfc\xce\xcal\xd8&?\"hg;\xf1Le\x83\x05\x93\x84v\xb2\xadW\xb7j\xee\xaa\x9f\xf0\x95\xc5\x9a\xb4Nu\xd4\xd1\xa83\xb1\x19\x1a\xe4]\xf9\xad,\x8d\xe9\x8dt\xa7W \xda\xc0\xc3A\xc9\xb2\x90\x07\xbc\x8ey\x90\xbc\xa6\xd7@\xe1:n\x1c:\x0dg\x18a n\xc9{Hr\xd5\xd9\xdf\x177Fm:\x04\xe5\xa8\xc9\xda\x13a\x10\xd7\x11 \xbf@n\x1e!\x14pE\xcb=\x8dE`\xa0(E\x03L\x05\x8bV/]\x17&r\x1dr\xef\xa2` \x9e>\xc8\xb8\xa3\xfaI\x1d\xb9\x99\xa8X\xa2V\xaf~~\x88\xeb\xae\xfaI\x9d|\xd3>\xacC\x17\xc6u\x10|\xd5\xd4\x93\xdc$\x01C\xc9'-\x07\xd2j\xc8\xcd\n\x04\xe2d-x/\xb1w\xd2Z\xb0\xf8R\xad\xb6T\x08\x14J\x06\"K;\x87\xa0\x8f{z\xcc\xa8B\x9dv\xb5\"]\x07\xd6\xc8/<\xec\xa6\xd4\x0bL\xe5\xfd\xacF\x11U\xb0\xb9F\x99\x13or\xea&\x0e*\xb3\x92\xb6`\xac}L:/\xc74\x10\x80\xa9^\x1f\x17\xca\xd8\xc2PB\xcc\xd5\xd0e\xaev\xbc6\xd3\x84T\xc3:\xe5\x1d\x943\xd0\x9f^\xd2\\\xa1\x02\xf3\x88&\x10F)\xac\xe3\xe8\xda\x9fS \xf0\x18\xdf\x7f\x0c\xbcA\x93b\xc8\x86\x0b\x9aH}\xdaE\x8c\x90*\xc7}e%\xc5\xa85\xf4\xb9&H\x0bz,\xf1\xcf\x02\x80Hh\xc5\xebK\xac\x81\xa8\xbc\xeb\x89\xf4B\x90Tm\xe0\x95\x88\xe0\xed\x9dt\x8a4D\xe8\x9dfx}!\xe2\x99\xa7\x85B_\xa8\x9b\n\xee\x02\xcf\x95\xb4\xa4P\xb2\xdb\x19\xe8f\xc0\xb3\xcd\x8f\xcb\xef6\xa0@\xbe\xfc|\xd0\xe0s\x1c !\x88#\xc4\xd4W\xab\x9d{lwa\xd1o \xae\x1d\x1e\x03\x9d\x0egu\xf4\xa9\xaf\xc3\x88\x9b\x9ar\xa0\xc9\xcbd\xcc\xc72\x9a\xb9}\xd8T\x1f\xabz|\xa0\xdc\x1d>\xd7\xd2c\xd1\xd6\xcc\xad\x9b+\xa19]\xdan\xce\x1f\xecs\xa6\xea\xed\xd9\xfd\xbd\xf6\xfa,\xcdMR\xa4L \xbd:R\x8e\xbf\xa5F\xf6\xab\xd1\x94\x0d\x03;\xd5\x0f\xac2W\xd8\x87\xa9}]\xb8\xa9G}e08\xacd\x92\x8f9\x10\x8b\xc8N M\x9d\xea\xfd\xbei\xa4\xef\xf5#E\xaaj\xd3\x16\"|\xa7\xc4p\x07\x81\xb4]\xa1\x12|\x7f R\x9fom\x8fJ\xcf_\x1d\x7f<,?/eU\x1a\xbc>|s\xf0\xe9\xdd\xe9y\xb5\x9fQ\xa5\x1fY\xef\xcd\xa7w\xefJ\xf5\xb6wJ\xf5\x82\x88\xcc\xf1\xc2\x94}\xa9>8\x08\x82\xfc\xd9\x01\xe3 \x8a\xc7 Y\xd0w\xf2]\xf9CWA\xb6\xa1\xfcV\xab\xcd\xb3\xd5\x1a\xb95\xf6\xa5\xfa\xfek\xf9P\xfeP+\xfc\xf5\xe0\xfd\xbb\\q-`\xb0W\x9a\xdb\xfb\xb7Go\xdf\x1f\xbc\xb3-G[0Z \x98x\x84\xbb\xedv\xd9\xb7n\xe9\xd9\x9a\xc4\x18F\xd1w\xba\xf8\xb5\xfc\x14\x93\x19\xcb\xe7\xe2G\xb9\x06\x99\xcf_\x95<\xa5|\xa7[.\xeb~\x93M\xfc\xb4\xea\x06\x1d\x15\x00-\x95\x8b\xb4Z\xdb\xfaDq\x08\xbdRyV\x80\xacT\x9eh\x9cE\xad^\xa1\x01F\xbd-\x15y\x18\x07\xbaL\xaba\x1f\xb6\xcaE\x0c\x81\xb6\xcbE\xf3z[\x97\xf5\xb6\xae\xebm\xad`\x1f\x9eL\xcfn\x87\xc3\x8d\xb3\xdb\xe1\xd3\xb3\xdb\xe1\x8fg\xb7\xc3Wg\xb7\xc3\xc3\x8d\xb3\xdb\xd1\x9b\xb3\xdb\xbd7\x1bg\xb7O\xb7\xcfn\x9f\xeen\x9c\xdd>{s\x96\xbdy\xf3\xe6\x10\xff\x7f3\xbb\x9f\x9ee\xaf\x9f\xb2\x97\xb3\xd7?\xbey3s&\x1dV\xf2\x8a\x97\xb0\x1a\xee\xbd3\x19O\x7f/W\xbb\xff\xdd\xadT{R\x1e\xd6R\x0c\xeb\xe9\xceY\xb69\xdc|\x8a\xff?\xab\xd6\xba\xc3Z\xfd\xb3\xe9\xd9\xec\xec\x1fg\x9f\xab\x8f/\xd8\xe3\xdf\x9d\xc9\xb8s\xdf\xe9\xdcw\xa6d\xe3\xefg\x1b\xb3^\xc7\xfd\xf3\x13\xbf\\\xf3\xbc\xa89\xfd\xbdh\xcfu&\xe3\xff\x98\x0e7\x9e\x91\x8d\xc5\xec\x1f\x9b\x9f\xef\xf9\xf7\xbf\x9fm\xfc_\xcf\xcf\x9e\x9cM\xc6\xff\xf9h\xff\xacw\xf6\xe7\xfe\xf9\xd9\xa0\xf3?g?<>s\xce\\\xf6\xf6\xcc\xfd\xe1\xcfO|\xddYqc<+F\xc3\xc2\x8an\xb4\xc5\xbf+\xd4\xbc\xde\xd4\xa1\xb1\xa9gEK[\x9b-Z\xba}HK8\xbe\x87\x8e\xf5\xc4\xd8\xc3\xf6v\xd1\xd4\xb3\x91\xf2}K\xe9b\xb3\xf4c\xa7E\x87\x1a\xbd\xbaF\xc5,\xc7\xf0\x14^\xec\x0bgI\xf6mg\x0f\x13Zn\xb0\x07cx\xb6\xc7\xca0\xaa\xf8\xd6&\xdc\x0b\x9bF4a\x1c\x0d7\xd1\x9ca\x83U\xea1\xb0\x8cacd\x1d\x98F\xff]\x8c\x82Or\x02\xdd\xb3a\x97\xf7\x9c\x97\xfc\xff\xb0@\xadr\xc1JF\xa3]\xa5(\xc5J\xd5\x82Q\xbe\\\xac(\xe4EjK\xd7X4\xdcT\x8a\x16\xbc\xd6\xb6R\x14\xf3Z\xa3\xa2\xe8\xff\xcfJ\xb6\x94\xd7\x00\x0b\x8a\x97\x1ew\x1f\xc3\x18\xb6\x95i<\xc1\x11\xaa=\x9d\xb1\x92=e8\xff\xe7\x7fc\x9d\x1d\xa5\xe4\xff\xc6:\xeaL\x91*\xb0\xd2\xa7\xc3J\xe93V\xda\xedZ\x17\xe1\xc0\xb8\x08\xb8\xfe\xbb;;[;0\x01\xeet\x87y\x0b_]\x92\xf8U4\xc7\x9c\xa8c\xed\x83\x9d\x9d\xcdg\xbb\xd0\x03\x87!\x0eka\x17^\xbe\x84\x11\xe3uvv\xb76\x87\xe5G\x8f\x18\xbc\xb7\x14o\xd9\x82_\xcb\xed\xe4\x8e\x85\x9a\x043\xee9\x9b;\x8c5\xfb\xa0);\x054\x97;\x85\x17\xb0\xb9\xb3\xfb\x1cN{=\x17\x8e\xa7\xa73\xd8\x87+\xe7\xd4\x85 \x8c`\x0c\xc3>|(\nu\xc4\xe9\xbdV\xc1\xa9\\\x94Dx\xdf\xc7\xc3\x17\x0f\x16~@C\xb2\xa2\xa8,\x0b\xd7Y\x8aN\xb4Q\xe2\xa7huH\x07\x81\x1fR\xb5\x0c6D!:\xd0\x97\xe6^\x1f\xcb[\xedX8\xcf,\xc6i}\xff\x0f\xed\xfbt\x10\x85\xbf\x918\xf4\xc3%w\x8d\xce\x7f\x8a@\x85\xa8U\x12\xed\xeb\x16\x87\xad\xcbQMe\xc4\x18\xb7\x9a\xd1\x99V\xb9{]$\xa4\xab\xcb\x8e\"7\xf0>\xd0\xc15\x8d\x136\x8dG\x8f8$\xba\xf3l\x1d\xf8\x1eF\x1d\x84h\x01\xff\xc1\xba\x84\xb9\x1fS/\xf5\xaf\x91\xc7\xe2IC\xf2\xa4:\xf9\x9b\xe5\x9a@<\xc6`&@o\x89\x97\x06w\xc0d]\x99\x03\x12\xe3E\xb3A\xb0-\x85w\xe0O~w\xd8\xa17\xeb\xb9g\x03\xf9\xed\xcfO\x06\xf4\x96zN8\x1d\xce\xb8\x17\x1b\xef\xc8\x0f\x82\x8dE\x14\xaf\x98\xa4\"\x1a\x04L\xb0I\xa1>Z\xc6\x8e!\x03\xf96L\x9d\x18\xc3B\xe2^\xf1\xcb\xe5\x9b\xb2\x9c\xcf.*z\xcbB>\x13r\x11\x88\xf6%\xccD\x9f20\x1b\xe7?\xe5\xc3}\x081\x12%\x1dx\x97\xd4\xbbz\xe7\x87\xf4\xc7\x98\x92+\x0c{\xc1v\x90\xec\n\x0d\xdc7\x8b\xaf\x7f\x88^\x93l\xcd8Y:o\xe8\xb4\xb4\xba\xd5\xccb\x07?=\x0c]\xea\xb8\xb2iX\xed\xd3\x83\x9f,\x8b\x9d\xdeDE\xc2O\x06\x988\x07\x08\xf2\xc7\xb8\x0e\x17\x83\x94&\xa9\x13\xa3\xa8][\xda\x94,\x81'o\x01g\xe1\xc7I\x9a7\xe8J \x94\xc6\xc0zI\x84\xeef\x90\x92\xe5{\xb2\xc6\xcb[9\xe2\xc7\xe9%\x8d)\x9a\xbb\xc1:\xa6\xd7~\x94%\xc1\x1d\xcc\xa9\x17\x90\x98\xce!\xc9\x16\x0b\xff\x16\xa9b\xf71\xf4 \x86\x1e<\xee*\xc3x\xec\xf6\xe1\x9c\x0f92\x0fy\x1dS\xd6\x8c\x93P/\n\xe7-\xc6,\x07;\x8dg\xb6xr::\xfa\xd1b'\x89\xb7\x0cy>\xb5\xf2\xba\xa2f\x10^\xe8QA\x18\x93Ib+\xdcH\x11q\x8c\xd1\x81\xf1(\x89\xb8\x83\xad\x8fw\xbfB\xed\x06\x11\xbc\x00\x9f\xfd\xe9\xed\xc3\xc8\x15<\x83C\xb0\x8e'\x8e\xb4\x03\x06PW\xf0~/\xf6y|8\x82|\xcfh\xb4=\x1a\x8d\n`\xd3\xdb5\xf5\xd8\x9e\xb8&\x81?\x87\xbf\x9c\x1c\x1f\x15\x11\x0cuv\x8bhp\xb5\xe2\xab\x96)4\x84-E\x92\xc6\x94\xac\xd0\x16\x89\xf8a\x02a\x14n\xacc?\xe4[=o6\xd1\xb6+n=\xd8\xbc2\xd3\x9ai\x96\xecu\xb1d5\x87M\xbc\x7f\xe1\xeb\xd5\x87\xa0\xdc'B8\x1e\xf8 \x17\xfd\x9cP\xc1@\xa1\xaaY\xd1xIaE\xd6k?\\&\xcf\x11\xdb\xc4\xdd\xd6\x1c\x92(\x8b=*.9\xd8&P\xc9\x1aC\xc3\x8c\xaf\x1e\x13\x16\x1d\xc58\xf6\x8a\xdea\xa2\xb7|A3x\x01\x01\xfb\xc3\x17\x14\x9dd\xa6\xd9,\xdf{)\xda&`r!\x1e\x95 \x9c\x12\xb6\xeb\xf9\x0fU#\xae\x03\xcf;\x05\xa3\xd5t\xaa:P\x05}\xf0\xeax\xcd\xb0\x90\xb3MN\xa4\x9e2y\xc4\x11\xf8\x07\xe6\x83N\xc9r|GV\xc1 \x8a\x97\xfd\xcd\xe1ps\x8c\xf0\x13\xa6\xf3u4gm\xf3\xf4\xd2~\xc2\x99\"\xdf\x96\x958\xe0\xe0\xf4\xf0BL\xc2.\x80\x17\xe0\xb1?\x1cv\x12\x17\xfci0\xd3\x9b\xe4!\xf6\xe6\xd5\xeau\xf09\x1d\xfc\x91\xf0\xbb\x95$\x8f\x82\xcc T\xa7X\x13^\xe0p\xbe\x08\xd8\x1e\xc3\x0c_5\xd6i\x1f2\xfe\xa4`\xb0\xca|\x01\x9dK\x14\x83+z\x87!M\xd2i\x84\x17\x7f\xf9\xadM8\x8dfZ\x01(\xb5.\xfe\xa7V\xb2\x94\x102D\x8aMN\xa3\x14JR\x8c\x1c\xf32\x15?{=&Vl d\x98\x80\xa3>\xea\xe7\xa2\xa6\xb5E\xce\xcb\x15\xaf1\x1e\x9d\x83\x87\x00\x02\x16\x9d\x9e\xd8\xf6\x92\x84\x8aSx|\xd6\xc3\xe4C\ng\x8a\x13\x90\x8dY!\xf37\xd3\xd9]J\xc69\x94\x19\xfflSx.\xb2~GZchqyr\xe8D\xees\xd7\xd4Z\xaf\xa7\xb6\xa7\xdd)\xb8\xdb\xb6\xb8he\x08\xf0?\x8f,\x979mz\xd6\xbe\xfc\x19n.}\xc62\x8c\x86\x05#7\xda*\xbe\x8bb\xc3\xb8;7x\x14\xe12\xd6k t>a\xf2\x90f@\xf7!fx\xc5\xd7\xfbm8\xe7\xe6\xcd\xc3\xe7R\x90e\x0b\xa0>d\x95\x1f<\xed\xcf\xba]\xb6!8\xf4b\xba1G\\e$/\xf8c\xcel\xce\xe9\xc2\xf7|V\xec\xe3S\xe4\xfe\x91k\xb3b\xe5\x1b\xc3~\xed\x8bD\xb3r\xc8ZR\xd0q\xb6wpl\xa6\x8d,2\xe7n\xefr[\x01\x0c\xfd$\x84\x96z]\xe81\x82\xdaTe\x93\x13\xc1\x90m\xc5\xad\xbe\x80MC\xff\x9d['u\x1bd\xc8\xbfke\xc0QNjTf\x81\xeb.R\xcc\xda\xcfc\xce\x15\xcf\xe2AL\xd7\x94\xa4N\xf7\x0c\xcdd`\xa3\x94(K\xd7\xf5\x8f\xda\xae\xafE\\A\x89Q)\xd1X\xe2\xf9\xdck2\xf4.\xaby\xb3A\xa8\xa5u\x99Q2M\xae\x11\xeetQ\x08\x95\xbcM1=\xfe\x831\xb8\xf2;;,\x88\x90 \xda\x11+lk\x9b\x93\x13\xfc~\xebX_Dtp5\x97\xbe\x92\xb9\xed\x0c\xfbP\xa6\xffHbY\xf1\xc6\xc8\xad\xef\x96}\x06c\x99\xbb*\x0b\x82v\xa3\xafu\x9f{.\xf0\x0d\xc2O\xdf\xdf\x04q_\xf0<\x1e\x1d\xcc\xce\xc2\xbb\x92\xc8\xe1\x96\xc7\xd7\xa6\xf3~q\xd8#-\xc8\x8f{1\xa5\x97\"^\x8c\x00\xb0+\xce\xb1\x0b2W\x89\x00\x93Z\x08$\xf4o\x19\x0d=\n4Lcm\x94\x80|b\x15\"\x93ji\xa9$\x01\x9dL\xe0\x08\x13\x9c\xd0W'\xc7\x1dd'\xe8\xe0\xca\x0f\xd1\xaaG\x8e\xa0\xdb/6\xd3>\xe3\x0c\x9b\x18\xca_\xcd4*g1\xf95\xbev\x07T1\x9dMq\x8b\x9f&N\xf3\x11P\xd8\x0f\xe8\xdaQ6\x0c\x9b\xbfI\x03C\x84X\xc9\xafv\x18U\xde\x15\x1cP\x9b\xd3\x82\xf1@\xc8\xcfw\xcc\xdcA\xe5\x851lq.)b\xef\x12%\x01g\xb7\xd3\xe9\xb6o\x85\xbf\xd1\xedC\x99\xd11\x98<\x1b\xd9\x816\xdd\xd5^\xcc\xd9\x00\x85\x0b\xd8\xdd4\x1e\xfd\n\xe5(lF\xd8\xecc\x9d \\\xdaem\x86W\xb0\x89Y\x98K\xb04\x9cK\x9d\x80\x10Do\xfc\xf4\xd2\x0f\x81\xc05\x8d/H\xea\xaf\xd8\xcaW\x15<\xa6p \x82sS\xe6\xdb\xb9\xe5\\\\\xbe\x9al\xaf\x11\x98H \x98,\xa5\xceC\x08\x90B\x10\x06z\xeb\x05d\xc5\x11pE\xe2\xab\xa4\x9b\xa7k\xae\xc0\x82\x1dP%\xf1\xa1\x87\xc9\xed\x84bG\x95QCR\xd1\xe9T\xfaL2\xef\xb2$r\xcb\xcc\xe5U\xf4\xe1\xa4\xbd\x1d\xdc\xeb\x0b\xdd\xbc\x9ew\xb9R\xaa\xd0\x15\x18!\xb5\x08\xa2\x1bF.\xd9v\x8d\xe2\xd2\xf8\xcb\xab\xa6#\x7fx\x90u\xce\xf5\xfd1x5\xc0h\x8c\xf6\x1b\xb1\xcb\x03KH\"\x1a\xc3\xb8\xae\x06\x0b]\xa5F\xaep\ng\xa8\xe6\x1a\xb3]*N\x89\xa2\x16+\x93Ou\x8f\xeb\xf2\xb3\xac\xcf\xb5mY\x98k\xd6\x94UG\xcdZ\x88\x9a\xb5\xc7\x98\xda\xdeJ\xbc\x7f6\x13o\x0dY~\xca\xc9r\xf8\x15d\xd9\xcc\xc8\xe8Is\x08\xa2\x86J\x9e\x0d\x03(af\x15\xab\xe5\xc6\x0d\xc5\xc6\xe5\xa2f\xe7\xc4 \xd9\x0en\xd3\xa2\xf6\x84U\xb6M\xae\x03)\xf6cy\na4\xa7\xb0\xca\x92\x02\xdfH\n\x01%I\x8a\xaa{E\xcbV:\xa6\xed\xbb\xa9a\x81\x7fS\xb4a\x9as\x01\xddqQ\x1b\xb6\xea\xc3\xb2\x0fw}\xb8\xe8\xc3y\x1f\xae\xf8e\x94\xe6\xd0~o8\xcc\xff0\x1c\xe6\xcab\x07~\x92\xd2\x90\xe6\xb2\x12\xff\xe5t\xa35\x0d1\xbfx?\xc7~~}\xa3@A\x16\x08~E\xfe\xcc9\x15^\x80jO\xd8Gc\x88u\xc1\x97-\xf8W\x11q\xad\xca\x88:\xefs~\xb5\xcc\xbe\xc1\x84\x03\x01\xd3_\xa9B\xa6\x90:\xf0\xba\xae\xfa\xf0\x85P\x84\x9d\xa2\xf1\xa5\x8b\x17\x1e\xec\x85\xd3\xfa\x19*N\x14\xe4\xa0\xee\xefq3>w\xcb\xc3\x9b\x14\xa3[q~\xec\xbb\x0c\x12\xc6\xd8\xbcn\xfdV \x832\xbfg\x83\xf4\xf3\x1b\x9cS\xf6`-6\x15\x93\xfa\xce1\"w\x0et/'i\x98\n\x80\x1d+}\xb8*\x1f5\xa5{\xc4\x1cR0\x01\xde+\xca^W\x08\x9c\x87\xdc\xb1\xf4\x0b%ob\x96\xce@X\xee\x98%4\xf6YXBr\xcf-\xcf.%Nj\x9f^[\x9f\xae\xacO\x97\x86\x0d\x08\xc2\x8eF\x97\xa7\xf2\x0b\xe4\xc7\x85PY\xb7\x93\x1f3\xa3\xe7\xbf\xf4Vn\x16'\xfbB`\xe6B\x1b\xa9\xf0\xb4\xbb\\(@\x81f\xe7\xa9\xf8~\x7f\xcfhyl\xb5\x84F\xad\x13\xd2\xc1\xb0\x0f^.\x02\x1auP\xea{\x8a\x80\xd7\xe8F\x880n\x03\xb1C'c\xfb\xdcP\xb5\x81\xbfR?l\x84;\xdc\xde\"s\xe1\xd6\xd4y\x85S\xce9F\xc2X\xf8\x94&k\xe2)\xa7\x8f\xaa[\x05td@\x0e\xfa\x8a\xdemp\xd3\xea\x84\xae \xf7\xf0\xc8\xd9\xe9\x8b \xf2\xae\xa4\xd6\x9a\x1d_(l9x\xd7\xb0\xe8\xc3\xbc\x0f\x97}\xb8\xe6w\x05n\x1f\xf7\xc6\xb5\xa0\xd2\xa2\xe8N\x109\x81\xdc\xc8|\xb2\xbf\x97\xf9\xfe\xc57$\xc1\xb7\xc3\xa5e\xf2+\xa6\x04\x88\x97vF\xe9\xba\x91Q2\xe5'a\x80\x17\xe6\xa0\xce\xba\x19\x17\xf8\x9d\xd8\xb3\xad\xbe\xd0\x83sM\xac.P\xbd\x85\xf2\xb1>G\x9b\x9caX\x1beQ\xf9a\x1d\x8e6wD\x8fC\xde\xe3?\xda8\xf4|\x01[\x15\xbb}0\x80\xa1|\xf2\x0b\xfc_[\x19\xab|\xab\xb1\xbd\xda\x06\xbc\xe2\xbe\xb0.\xbe\xf2\x9b4\x8e\xbb\x97%\xdc\xbdVp\x97\xd1\xdb\x1c\x7falR\x1b\xc7\xe6\xc3d^\xf0\x1f\x9c>\x82\x17\xadV\x04.hzC\xa9P\xf8xQ\x10P.\xc0R\xeeD\xc8H\xa3\xc7\xb6\x95H~\xc9\xc5=\x1f\xef\xd99\x9a\x88\x13a\x0dm//@F*%\xf6\xeb\x8a\xd4\xcdU\x0e\xe5\xeb\x84@\xb9N\xf0\n>%Q(h\xa9\x19\xe3\xc2\x97\x05z\x02\xf9\xe5H!\\ \x8ew\x8d\xe4Xj\x9b\xdb\xe0Qe\x04\xba\xb1/\xca$\x9f\xad1\xd2\xb8\x18\xe9\xbc\x874d\xc1]\x81'\x10\xf3{\x13\xac\xc0\x17A\xa9\xc3*\x89\nI\xb5ga\x1e\xde\nI'\xe0\xcc\x1f0G\xd6-\xd6\x1f\xb5\xd8\xb3\x0fQ\x13W\x90\xb1\xaasd-\x9d\xb3\xd1\xa2\xee\x83 \xd9<\xfdn[R]\x15T\xe7f!\xd5$\xf0y\x96g\x0b\x0c\x8a\xab}\xb4\x86Z\xfe9\xf9\xd1\xe9\x01 \xa7\xa9b\x11I\xf3\"\xba\x82\x87\x7f0\xe1\x16\xb7\x08\xa4\x15\xddntP\x04I\xa6\x95\xab.\x8f\x04$.S\xacnW\x12\\b\xf0deC\xdb\xde\xb2N\xbf.h\x89\x1bU\xe22\xfc\xdcg\xe4k\x82+-\x1a\"\xc8\x7f\x8d1\x80\x17\xc7K~=\xcd\x99\x1b\xef2Z!w\xb3B\x86\x92q-\xfe\xc2\xd7[\xe1A\xb3\xd8\x83b\x80\x83\xc4\x83\xbbI\xa0\xbc\xc8\x93ne\xb9\xb3D&\x9d%6F\xbfF\xf1`\xdf\x18\x11\xbe\x8e5\x0c^\x87\x0e1\xea\x16\xac\xe65m0D?\x0ey\xaf\x86]\x9b\xf9\xfe-\x89Y\xc6!X\xc7\x07_3FP\xc7\xd9\xb9q\x88r\xcf\xad\x19\x90aC*\x1b\xce0P\xc5\x1a\xa8j\xe4\xd37\x8d\xbe\x9d\xf2\xc4\xe9x5Y\xe9\x05;\xe4\x1e=\x92\xd6CDc=\xd4\x06b\xe6%\xebxP5{x \x0bdC\x169{\xc1\x1f\xb8}\xb8A\xd4[\xf7z_\xbc\xd9\xeb\xb3\xb3\xe3C\x82\xf3\xbe\xae\x98\xd3TLf\x02\xf4A\xe9\xc1\x1a\xc6\x8c\xb5\x1e\x8b\xb70\xc4\x88\xcc\xf1\xa8\xd8\xe2\x9c\x85M)\x0f\xecA\xed\xcd\xaa\x0fa\x11=\x01\xb6Q\x18\xc7\xb0\xca\xd9\xb8\x96\x83\xe7Zo\xf9\xe6\xc8\xfa\xe6Z\xf0\x8ccA\xed\xd60\xd1M\x17\x90\xee\xd8\xdaix^\x1e!\xb7\x16\xee\x0c%\xe9\xea\x8b\x83\xbbj\xfe\x05\xd5M\xf8\xdc\xfd\n\\e\x9f\x8fB_\xaaj`;\xa3\xb6\xa4\xd3(@W\x8ek\xc9A=P\xbc\xd53'[\xcf\xbe\xfez\x12\xdar\x0bUi!\xc6\xec\xbd\xfb\x9a\x0b\xc76\xe3\xb1\xb0\x1c[\xdc\xa0\xdf\x9a\xf2\x82\xd5\xfb(8\xf6\xd2\x821\xee\xbe\x01,e\x9e\xa5\x00\x8cE\x17\x18\x97\xe6Y\x85D\x19\n\x863\x0e\xa9\xd7\x8d\x83\xb7\xe6\xf9\xd0#1b4\xf6\xe3\xb2\xc3H\x88_u\xf0\xf2}\x94Kt\xfb\xfb\xfb%\xc3\xdfG\x8f\xb8\xf1\xe4\xc4\xca\xefK\x1f\x9f\x82\xe3O\xfcp\x19P\xf8[\x16\xb1\xaab\xedEBJ\xf3,5\x1b\xe9!b\x86\xbe\xd3o\xb1ST\x01\xc3\xb0k\xb69z\xb4P\xd3}\xfb]\x13\xa29\x85v\xd7\xb4\x18\x8fU3\"|W\xb3|\xd0Z\x8a6t\xabC2!>\xaa\xb16e\x9b-\xf6\xa2\xae\xab\x9bvW4\xae\x8a\xfd\xe6}\x98\xeb53\xee/\xca\x90\xfex\x9a\xcd\xdc\xd2\x01\xf3\x01}G\xd4I\xb6h\x11%\x9c\xd1\xa60\x83\xc3`\x93l/m\xa2+\xf1^.\xcal\xc3\x18\x9e\xee\xe4?\x99\xd80t\xe1%\xfb\xaf\xc5]Y\xc4/\xb4}n\xb4\x1d\xb1\xf7\x9eC\xb4\xb1\xe1b\xef\xaf\xda\xc2\x8a )0\xc1f\x1c\x1f^\xbc\x80m\x17z@r\x91*\xdf\x81\x97\xf4\x96\xcc\xa9\xe7\xafH`wiR?*(\x0f\x1c\xbf\x82/f\xbe\x85\xc3RR\x81\xab0\xba \x81&\x1eY\xd3\xdc\xd8\xd3\xd6u}g\xd8)iVPR\xbe\xf5M\x94\xb4\xde\xf0w\xa2\xa4\xf3(\xbbhCI+\x83i\xc1K<\x84\xb4\xeaG\xa1%\xad\x8a\x1aG\xc95o\x0e\xbd\xc6!\xad\xa7\xaa\xdb\\\x87\xd1|\xf1\xdd\x86\xaa\x1a\x1aie\xee\xc4M\xe0n\x85\xf5[\xe7\xc4\x89\x19\xd9l\xd3b}0\x0f2y\n|\x92<\xc8\xe2Ic\xfc\xd8/\x9b:)*\xf5J8\x16\xd5\x10\xf2q\x16\xe6j\x80\xb9\x18G\xc5(N9\x93T5}8\xab\xde]\xd5\xd9U\x86&_j\x8a\x82ZWO\xea[\xd9IiV\xce\x99/\xba\x19z\xdd:^3b1\x88\x9c8\x1ew\xfb\xe4D\x1a\x85\xde\xad\xa7\xc5\xf7\xedM\xa5|\xab\xf8.\x15}\xf8cW\xad\xf4L\xf9\xae\xd4\xd9\xdaS\xea+\xe5\xcfx\xa8\x07\xcf\x8a\xe5x\xe2\xec*\xdd\x0b\xb5\x99\xc7u\xf4\xb7\xcd\xdbHHg\xf7\xf7\xdc\xbe\x8f\xa1y\x8b\x8d\xd5\xcc\xaeD\xe8K^fw\x85\xd5\xba\xd8`\x9e\x95\x0b\x11\xd6\x19\xd6Dp|A\xbfh\x8a\x16\xe1YI\xaf\xb8\xb5\xd3v\x10\xf6\x01\xa0\xafL\x8b>\x9b\xb4\x12\x8dGM1G\xafY\xfb\xc8\xda\xbc\xc1\x8a\xcdV\x10Y\xaef\x91\xd74\x8a\xf1Y\x90\x17p\x95\x89rrn\x8cjw\xd4\xfb\xf6\x04o\xf2C\x14\xf9\xfd\x8b\xb5U\xe2#S:X+\xda\x839\xab\xc0\xe7\xfe\x1f\xdcx\x80\xd1'u%\xc4\xfduI\xe7\x16|{=\x8e\xbe\x14/\xc08/\xc3\xe9gg$y\x191\xde\x0d\xc8\\\xdb\xe6t\xfbp((\x9fS\xae!\x0c\xcd\x0c\xcb\xd1\xe0\xf2`:\x11\xabC\xedtr2\xc2]\x82\x05\x99Y\x94\xe8\xcb\xba\xaeQ\xe1\xacH_ZQr\xf2\xf7\x87@\xa1\xdc\xd1:\xf7f\xc9\x8d\x0d\xba\x93.\xea\xa6,u\x95\x12q\xb3[\xd8\x81\x15gur\x19e\xc1\x1cmu.\xc95\x05\x12\xdeI\xcbk\xbc\x84\x95\xfe\xde\xad\xaf\xbb\xf3{\xc5Buv\x9a\xcf\n\x8d<\x85\x8dg\xa5i1\xean\xa7[\x14\xe8\x9d\xcd\xba\x93n1S\xab&y\xc9ugw|\xed\x85\x11\xd2\xe9\xdd:OZ\xf7\x1c\x96\xf0\x02\xee\xd8\x1f\xf4\x1f\xb7\xd2\x1c\xe7\xa2\xde\xcet9s\x072\xe0\xbb2u;\x9dPp\xe2b\x90'lW]\xd3\xe4:_\xf0\x1b\xe6/\\\x82o\xbb\x7f\x05\xb1/\xb1t\xe7\xb6`T\x0b\x86N\x19\x13\xbfw\x16\xc7\xdb\x91\xf0\xf0;\x9a\x863\xa9cc\xf4\xf4\x0f\xa1q\xe0\xf44W\x82\x15hZ\xd2<\xfc\xc9\xdcy\x99\x1e\x0c\x15\xd1H\xec\xf7\xc2=\xdfN(\xdaV\xe4\xf1\x1c\xdaW\xdet\xcb\x11]D\x84\x07u\xdc\x0c D\xb3W\x13T\xd0\xadH\\\x8b\xdb\xf2[\xc1\xd3\x8bi\xa2\x9d\xc6Z1N+\x03\xa6N\xa4\x1f=\x82%w\xf0,\xaf\xbd_^{\xc8Cq\x84Q\xb8qp\xf2\xea\xed[%\x9eL\x02$\xa6\xe0\x87)\x8d\xd71E\xc7\x87\x04\xc5\xad<\xe8\x9c\\\xda\xa4\x166\xa0\x85<;\x81\xed\xddf \xbb\x82\x15h\x80\xb0RA\xf1\xa4\xdeP\xa9d]\x1f\x1a\xc5\xa8\x0b\x15\xe8Yxp\x94\xd6\xc3z\x18\xff\xd5\xd1Fa,bAQqv\xa0\xcc\xc3\xce\xc8\xa1\xe4\x17\xf2\xb8v2d\x0c-\x03\xa0\x98\x02\x82@\xc4\x92\xb1Wrhn^\xd0\x87\xdd\x9d\xcd=\x11+U}i(k\xb2r\x8e\x15#\xb7J\xfb\xaeE\xde\xe9\x90\xde4\xdf\xaca\xe6 \\B\xc0DL\xf8[F\xcfds/~\x08\x96G\xd4Id\\\xf6T~\xbd\xbfg27>,\x02Y\xb2\xe7\xc5\xafr\x13\x9c\x13\xc1*\xe2\xeb\xfd=W\xeb\xb3\xa7\x18\xa0\x8a=\x93\x91\xaa\xf2'9\xbb\x86o\xca\x1f\xe5\xb6KB\x8cL\xc2\xcd\x07\x8a\x81\xc0\xfd\x80\xce\xdf\x8a:2\x97 \xe7\xdf\x0d\x95O\xf9\xd3|\xe8\xb8v\x052\x88rE\x171\xccG\x8b\xea\x08\xf5\xa7\xd4H\xa8e\xaa!\x10O\xf7,\xf7'\xf2\x17eB\xcb\x97S\xc3\x04\x86b-\x11\x93\x86\xdd\xaev\xe5\x97s\x93t\xf2\xdc$EZ\x12_3#%$V\x11\x82-\x86\x17\x10\xb1?<\x04[\xea\xf8\xd3xf\xa7-?i7\x9c\xdc\x99\x7f\xd5\xad\x1f\x1b\xb1p\xe8\x96\xd9P4\xfb\x95\xd5\x1a\x89%\x95\xb5$X\xa7C\x8dOA\x91\xc9!r\x8a\x8b\xc3\xfc\x86>\xa7\xa0~\xa8P\xd7>\\d),\xa2\x8c\x9drQL\x1f\x94\xc9\xa1He\xf0K\xbf\x9e\xfa\xe0\xa7\xbe1kA\xd3-D\x8b5E\x94\x89\x07\xf46\xa5\xe1\xdc\xa9\x83\x8fo\xea1\x90\xf2|Xg\x95\xe5\x90\xc8\xf7\x85\x8d\xfdI\xf9\xa9M\xe3`\xa5\xccb6?}\xe9l\xea\xf1\x81\xbf>c\x81.\x98h\xe4\x94B/V\xa7\x81tL\x1c$\xf2l\xb9\xc8\x16\x0bN\xba\xeb$3,\x93\xccX\xfc\xf4\xa2 [\x85\xa5@\xa7\x05\xde))\xd8\x07K\x9a\x9e\x84\xfezM\xd3&\x00\xd7\xcc\xd5\xeb{\xb1\xa3\x0c\xd7U\x95\x06:\xd9\x1bD\x00\xf8m\x85c\xd8\xdb\x11\x11p\xc4\xadKi\xb6\xc2:\x80\x1d\xe7\x1b|?w\xcf\x86g\xf1Y\xf8\x7f\xfe\xb7\x9aU\xa0;\xf0\xc39\xbd=^8\xcah\x90\x8a\x1f\xa4N\xc4\xef/\x0c!\xab\"\xd8@2^\x06\xf2\x06\xf6\x9b\xc2\x13\xd8\xe4\x9c\x87^X\xc3q\xc3`0\x00\x1c|o\x1fv\xf4RJ\x1bw3\x04\x91/ A\xea\x90 \xf0B\xc5\x0d\x85\xbd\xfab\xd0\x10#X\x1c\"\xc8\xf8F\x052-\xa0\xe2\xabP!\x0c\xbe_\x01\x15\x81Q\x99\x84\x87\x98\x00\xe7\xea\"\xee\x8aX\x98R\x02\xaa\xa1\x84\xe4\x95\xa1\x01x\x8f\x07\xcc\xefUkAO\xb3\xe6=\xe5\xbc\xe8A\xf7\xf7\xaeJ\xa0\xd4=\x94F\x9c\xfb\xb5\xe6\xe6UB\xf6u\xbb\xda3\xbe\xd8\xfa\x8caE\x0e\xe2\xb1\x1fr\xe1\xb1x\x86\xd1\x92\x1f\xe3U9\xe3XH\xca%\x186)\xa7\xa0\x04(\xd7\xf5\xd8\xdc\x04%(\x9e\x8b\x02~\x05\x82;\x10\x85r|VP\x03G\xa8\xa8x/c\x0e5\xd4]j\xc9tNi\xbe\x92h\x8ev\x953Em\x9d\x9d\xc6\xb1\xa3 \x87\x93\xa4q\xb7_\x81\xf5\x95\x1f\xce\xc7\xc5}n\xe9Y\xae\x90\x1d7\x98w\xd4t\x9e\x98D\xa2\x94\x8b\x00\xca\x07\xbb\xfb/\x82\x00\xfd\x9b\x11\x02\xb9c\xde\xb7\x85A\x95\xb9\xfe\x97\xc3`E\xd6&\x18\xe4\x8e\xb6\xdf\x16\x04\x15\xd7\xd0\x7f=\x08\xd8\x08\x1f\xb4\x13\xc4\xedA\x13\x00|\x19\xbe\x07Ek\xabm\xf0u\x9e\x8cR\xc8\x01&h\xca\x98\x9d\x8f\x1eA\xf7\x7f\xc4\xcd\x1d\xf2\x02E\xb9\xd3\xc5 \x15\xcf\xbaG\xd5\xdf\x9f\xde\xbd\x13\xbf+\xbcv\xf3R7\xac\xb4\xad\xb9uL1\x10Y#\xe0T\xcc\xc1Q\xdaZ\x8d\xe9:\xa6 \x0d\xd3\xb1\xa6%\x8f\x84Q\xe8{$h\x98\x01\x14\xbdv\xffG\x93J\xb3~5\x12D74\xf6HB\x1f\xd02\xaeK\x9b\xc6\xb3\xf5\xfa\xc1\x8d\xe3\xa2\xb6i\xdc#+\x1a<\xb4q\xfd\xc8m\xeb2\xa7\x0b\x92\x05\xe9Iz\x17\xd01tsxu\xff\xe5\xfb\xfd\"\x8a\xfe\xa9\xfb]c?\xd5z\xbf\x97\xf6u\x1agT\xdd\xc7\xa7\xd5\xdf\x1f?\x1d\xca}\xcd\nv\xd4\x97\x17$HJ\xb5\xdf\xd4\n\x0e\xde\x9d\x1c~)]\xb0m\xe4\x87\x0c\xfc[\x12\x90\xeeT\xa4\x13\xf81\x8a\x02J\xc2\x19\xef\xa3\x96\x9cN\xb2\xa12\x03\xed\x17\x93\x1b\x1dQ0&\xc8\x95\xf6\xa00\x91\x00\x1a\x83X\xa56\xdbXG#Z\xf5\xc5\x81=\x96\xeb\xdd\xa6/\x1d\xc9h\xd7\x97\x9c\xd7\x1b\xc3\xbc\xfe\x1d(\x88)C\xe2\xee\x03\x93\x9c\xd6\xb2\xa7\xed\x14\x03\xd54D\xda7\xb4\xa74$\xbfUI]\xa4#u~\x98\xfe;P:\xae\xb4Q5\xd8Z\xcc\x89\xccn\xf5\xba\xa8\xde \x95'q\xa3ylw\x83\x1bB\xf1[\xd4i4C\x19\xad\xdb\x13y\xdesY\x8eN{\xbdh\xe6\xf6\xa1;\x14\x99\xfe\x8d\xe29j=z\x82!\x8b\x1b=\xbfp\x14\x17\xbcQ\xb5+S\xfb\x90\xbby\xf4z\xa4\x9fb\xe6\xb7\x959\x8ev\xddA\x1a}b\x02\xe9+\x92PG@\xa2\xb1\x9a\x0526\x1c\xab\xc8\x85b*\x15I&aO\x0f\x02\x9f$4\xb1\xe1\xe2t\xb3\x0f\xdd\x0b?\xecjR \xe4\x98>\xedC7\xf2R]\x95\x1c\x8e\xd3\xd1\x10\x13Uy\xbaZ%\x88OG\xbb}\xe8^\xd2\xdb\xee\xf7\xbd\x0b0\x8b\xb5\xe5b_\x08\x90\x1f\xe9\xf2\xf0v\xedt\x7fw&\xe3\xe9Fo6q&\xe3\xe1\xfdt\xb4\xf1l\xc6\x8e\xd8\xf3\xd9\x0f\xae3\x19\x9f\x9d\x0d\xe4/VaJ\x0fgXY\xa4\xc4\x9d\xdc\xe7\x15z\xda\xc7\xc5/\xd1\x8c3\x19\x97\x0f\xf2\xa2\x07^\xf9\xecl\xe0L\xc6~\xb8\xb8\x7f\xcb\xfe\x1d\xbdq\xefyQH\xc2\xfb#rt\x7ftp\xe4\xba\x7fV-\xef1.?&\xedU:\xa7O\xcczB\xad\xf0\xbc\x08\"\xf2]\xc4gU\xbf\xcdoF\x18\xa5u:\xbe\xe0`\\\x95\xf9\xa1S\xd5zo\xf6\xcdy\x1am@\x189B\xd8\x07\xc9G\x08\x03\xe4\x1a;2H\xa3w\xd1\x8d\xdc\xd2\x8c\x97\x80 ;\xc8\xc7 b\x00Og}\xe8\xf66\x94+tdX^\x8a\x13\x86\xdf\xa1\x16\xccH\x1fX\xcdE\xc1{\x08\x0b$\x98\x88\xc3l\xf0\xe1\xf8\xe4\xed\xe9\xdb_\x0f\xcf\xdf\x1e\xbdy{\xf4\xf6\xf4\xaf0\x96\x8f\x8e\x0e\x7f:\xa8>\xea\x0eB\x12\x16\xcd\x1d\x91#\x18CZf1\x04is\xd2/\xe33\xa22\x9f\xf1\x86!\x8e\x95\xd3\x10\xb6w1\xe74\xa2\x07t\x95JN#f\xaf\x9b9\x8d\x10~`|\xf3\x18\xbf(\xa3J\xff\x9dx\x0d\x873\x1b\x9d}\xee\x8d\xa1\xe15\xda2\x1b%Bi\xc2\xf8P\xaf\x1c\xf2\x93#r\xc4\xfa\x82\xe4\xc6O\xbdKp\x8c\xca\x03\x8f$T\xd5D\x8e\xb5\xb5@\x01\x0e\"\x9f^<\xe2\x8d\xe5z\xdc6\x8d\x1d\x1d\x1cY\x1b\xcb\x15\xb5\xad\x1a#G\x1a\x8dl\xe1\xf8l\xdcnB\xeb\xf7=\xa0\xc5v\xfe7\x83\xd6\xdb\xa37\xdf\x0eZo\xc3E\x1bh\xd5)\xd0\xf7\x83\xd6\xc67\x05\xd7\xc67\x85\xd7F#\xc0t\xbb\xbdx}8\x18j\xc6\xa2\x9cKe\xbe\xb7\x0f$\xcf\xe95\x810?\xa6\xba\xb4\xcb\x0e\x14\x1e\x083\xb4\x11\x93\x7f\xd6mC\x8d\xff\x8aj\xfcW\xce\x1e)\xff\xb9\x1b\x8e\xe9\xc7\x9f\xbb\x8d\x1c]c\x8b\x93\xca/\xc6\xbb\x9d\xa6\xb3\xfb)\x9c\x9d\xa5\xb3\x9e[z8V{/\xfd\xe0\x0c\"/\xf9\xc1\xe5\x1c\"\xb6\xf0\x83\xf3\xdf\xf7\x0ec\xc6\xdcj7\xa5\xf7\xdd\x89\xebNJ\xac\\\xab\x1b\xdd\xd4_\xd1$%+\xa3)\xcb7\xe7\xd6\x8a\xb0\xe5\xd1\x80\xdeRO0my\xa9/K\xbf\x03\xbf\xa6\x89\x87b\xb85Y\x0b\xf7L\xfd\xb9\x97\xdf\xe0 \x0b\x96\xcf\xc3\xcd\xb9\xb2b\x12j\x9erW1\xf3>\x8c\xe3(v\xba\xafIJs\x9fZ\xca\xcat\xc1\x99|\x91W\xb4\x97NG3\xce\xfc\xf4\xd2\xe9\xe6\x8c{-\x11\xfesk\xd6\x87N:\xdd\x9e\x15f\xb0\xf4\x06X\x07\x0e\xfbo\xf0\xe9\xf4\x95#\xc0\xa0\xf3\xc3\xf3E\x98\x8a\x1ek\x82G\xa9\xe8\xa5\xd3\x9d\x19\x8fO\xd1K\xa7\xbb\xb3>\xa4\xd3\xbd\x99\x89\n\xa3\xca\x15\x03\xdfN\xf7f\x82+\x1d\xf6a\xcb}\x0e\x8b\xc2\xa7r\xeb\xb9\x0b\x0b4\xf0\xd3Q)l\x87u\xb7\xa8\xd3?\x13z\xa5\xd3g3\x04<[\xb3]\xba\x0d?\x80\xb3;\x84\x1f\x10Z\xc3\x19\xf4\xa0\xe7\xa4\xd3\xd1h\xc6\xd0l(\x95\x80\xb8 \xea\x9b\x1bkW\xc4g0\x82M\xc1\x9e\x85\x8bQ\xd5\x1f=\x02o\x90\xd0\xf4\xd4_Q\xc7\x1b,\xc57\x1760\x88\xa6gCa?LR\x12z\xf4x1\xc6\xeeZph\x96M\xc6\x88\xfa\xdb\x93cA\xd7\x8d\x8e\x00\xdf\x8a\x10?\x90\xcc\xf0\x04\xfc\xdf\x8f\xc4t_\xbcP\xac\"L\xe6O\xdf\x0e\x0c\xc5\xcf4\xbe\xab\x0c\x8b\xc3hg\xdb\x1d\xfc\x88\xb6\xc2E\xaf\xe0\x11dd\xd8L>\x97\x1a\xb4(\x18\xba\x07?\xbez}\xf8\xe6\xa7\x9f\xdf\xfe\xe5\x97w\xef\x8f\x8e?\xfc\xd7\xc7\x93\xd3O\xbf\xfe\xf6\xbf\xfe\xfa\xdf\xe4\xc2\x9b\xd3\xc5\xf2\xd2\xff\xe3*X\x85\xd1\xfaoq\x92f\xd77\xb7w\x7f\x1f\x8e6\xb7\xb6wv\xf7\x9e>\xeb=\xd9?\x0b\xcf\xe2\xee\x03%x\xae\xe4\xf9\x1e+\xf6\xc57\xe0\x06J\x1d5^\x8e3\xfa\xe8\x1b\xae\x88B\x1e\x030\xe4\xbeC\xa1\xed\x9e\xa8\xe3 i'\xb9\xfcK\xa5\x19;\x8f\x06\x08\xbb\xdb\x8d7G)\xbc\x80a\xab\xdb\x1f\xd4\x8b\xefj\x1f\x1b)a\x0c\xff\x01OQ\x01]\xc6\xfb\xaf>:\xa3\xb2\x02cz\x16\x9f\x85\xfb3\xa1\xc60\x03=\xb2.K\x86\x91\x80\xb4\x8f\x12\xf3r\x07\x86;\xa1\xdc\xd3{\xf8\x1c\x18\x94\xc9sH{=\x17R\xf8\x0f4\x05\xe3*\x13~\xa5\x13\x88L\x11\xf0\xf2%\x8cv\xe1\x11l\xee\xec\xb8}P\x8b\x9fVK7wv\xe0\x11$\x8c\xec'\x98\x0e\xe4\xc5\x0b\xd8\x85{\xc8rt\x88$:\xa4\xba\xe3U,\xd1\x10dH\\\x82\x03\xfb\x01v\xf1\x9a\xe6\xab\x86\x04c\x18=\xcdu=\xe5\xb6\x86\xda\xb66E)\xbe*|\x0f\x19h\xd4:\xdb\xf9\x9b1\xa6\xdfX\xc4\xd1*\xff\xe2\x04(\x16 \xbd\xc7\xaf\xdf\xd4~\x15C|0)\x87S\xd0\xf67'm\x11:\xe6n.F\x82b@>\xd2Hk2\x0b\xad1`\xe7V\x05;q\xe7g\xd3\x08\x97\x8f-\xfa\xee\x16\xf2|J\xe9\xa6\xaet\xb7R\xb8\xbb\x05\x8f\x00Mr\xd8\x8c\x9c\x88a\xecS\x17z@\xa7\xa9\xf9R\xb5\x8c\xa0[\xfc\x0e\xf1\x1b\x8f\x08\xc6\xb0Y\xa0k\xa9\x9d\xa1\xae\x9d\xedZ\xe1\x8b\x17P\xedqw\x1b\x1b\x1e\x15\xc8\\j\xb9>\xc0\x17/j\x0d\xefn\x97\xdb\xebC\\F\xbc\xfc\xd7Ws\x10f\x89\xb6\xa6\xff+\x87\x9c\xacs\x08F\x85\xe1\x03\x99\xb4\xc8\xe2\xd1`\xf0\xea\xf8\xca3\xdfd\xcf_\x91\xd7\xb8*\xdcx\x1cP\xdb~\xe3\x97\xd2A\xee%\xccv_\xf8\x9c+\x83\xcd\x1ed\"uh0MgE>\xb0\\]\xcb\x01>\xeb\ny\x15\xd5\xb2q\xb3Q\x87\x88\x89\xe3\x87\x10\xdb\xadx\"\xd1$Jj\x16\x8eB\xd6\xcf\x1a\xbb\x96\x9f/\xb2\xd6A\xe6\xa7\xb9\x0fVM\x98!$\xf9\xa1H\x9a\xc1\"\"[\xb4\xca\xdf\x91#Ny[~!\x83S\xd7O\xfc\xb3\\\x8dZ\xec\xfa/\xdc\xc4k\xe2\xc7\xc9\xbf\xd7.\x16\xbe\xbb\x96\x9dJ\xc4\x8c\x0e\xe2\x98\xdc9\x99t\x81\xcco{\xd8\x16\xce\xbel\x0bg\xb8\x85\xf5[7j\xbdu}\xf4\xe7G\xc3!\x85\xe2^\xd1\xbb\x84\xbd]u\xf17\xb5B\xa6\xe9\x8c\xd12\x7f:d\xe7\x0c\xfe\x9d\xcd\xfe\xe9hoXG\x1dW}]\x0d{&R\xd1\x18\xd6\xd1/\xad#\xd1\xae#1\xad#[-\x82\xab\x15\xd5@\xdc\x07_\xc0.\x12\xb0\x8b\x10vF6\xc6\xff7\xd8\xc1\xe5s\xfb\x81\xfb8\xa1\xc6\x0bt\xbdw\xe1\xf7\xdb\xc4\xd6#\xd6\x0f\xc1\x10\x08L9\xc9\xc2\xbe\xb0D\xccIm8Mg\xd6\xfd\xf2mQ\xdeD\xe9\xff\xed<*\xffH\x9ed\xe1\x9c.\xfc\x90\xce\xbfR\xfbb\x81\xc3\xc3\xa1\xea\xd6\xf2\xcd?T\xa6\xbb\x8e\xfc\xb9\x8c/f\xeb]'\xcd\xd94\x7f\xffn\xae\xd1\x7f$Ob\xba\xa4\xb7\xdf\xe5F\xe5\x01\xca3\x1f\x03\xd5`\xbd6\xe7S\xeeW\xa7\xe7\xb3\x19\x11xr\xf6\xc4\x99.\xfd\xd5\xec\x07\xf7\xcfO\xe4\x05\x87\xbez\xac 9\x00\xd2z\xfa\x89\xd4\xbe\x0f\x8dw \xfc\xc2C\x9a\xf2\x86\xd3\x11\xcab\xf2\x16\xe1%\x93K[\x9c\xd8\xac'4\xeb\x9d\xa6\x85!P\\\xb2 *\x9a\xa9\xb5\xf2\xbd\x8f\xe1\x7f\x0e\xc4\xe56Q\x80\xceo\xe1\xaa\xd0-\x19\x13\xf5\xc1\x001\xbc\xd0*.H\xd3~U\x96\xf9J*\x913j\xbc\x83\xb6&1\x0f%(\xd6\x05a\xb0\xea\x01\x1d$Q\x16{\x14z\xac\xc0\x08X:X\x06\xd1\x05 \xc4\xd5_o\x1f\xbaK\x1e\xb9\xaf\xc8D_\x11\xf5\x9fV\xca3\x9b\xd2\xaf\\5i\xd6.\x94_\x08`\x1f\x9eU\xc8 \xec\xc3\xa8r\xad\xb5\x80}\xd8\xda\xac`\x03+\xdb*\x97\xcdY\xd9v\xb9\xec\x92\x95\xed\x94\xcb\xaeY\xd9^\xb9l\xc5\xca\x9e\x96\xcb\x96\xac\xac2\xbe;\xd8\x87\xed\xcaX.XY\xa5\xdfsVV\xe9\xf7\x06\xf6a\xa7\xd2\xc7!\xec\xc3n\xa5\xbd[VV\x99\xdb +\xab\xf4\xf1\x8a\x81\xaf\xe2\x93x\xc5\xca*\xef\x1e\xb0\xb2\xddr\xd91\xe6/\xacT\xfc\x80\x85\x95^N\xb1\xb02\x95\xf7\xb0\xafA\xfa\xe1\x18\xbaggC\xcdQ\xb4\x87O\x88\xe6\xc9S|r\xa1y\xf2\x0c\x9f\xa4\x9a'#\xdeQ\xa8{4\xc2G\xd7\xbaG\x9b\xf8h\xa1{\xb4\x85\x8f\xaa\x0c\x1d\xfbl\xf2\xa1Wu\xd1\xec\xb3\xb5=\x86\xc7gg\xdd\xc7\x9a\xb1\xf3\xbe\xce\xce\xb4\x9d\xf1\xde\x8et\xcfv\xf9\xd4\xceu\x90\xda\xdc\xe2\xad\xbe\xd3?\xe4\xad~\xa8(\x1a\xcaU\xdf\xb2\xf3\xba{\xd7\xedC\xf7\xaf\xec\xbf;\x9a\xe0w\xf1\xe7\xf0\x84\xfdA\xb6\xb7{\xcc\xff?b\xff\xe3W\xfe-\xc2\xaf\xfc\xffc\xac\xbdX`E\xf1\xe7\xcd\x9b\xeeL\x17U\xe3\x8f:\x9d,\xb4\xb6\x95\xabhn\x82\xb2ou-\xeb\xf3\xc8\x19\x9b;;.\xe7\x85n\xbb<\x80\xeff\xb9\xad\xdc\x1a\x19\xab\xef\xee\xecl\xc9\x172\xf1\xc2\xb6\xe6\x05=\xd7\xde\xe1\x8dlo>\xdb~\xb6\xbb\xb7\xf9l\xc7u\xcb\x11q\xbdhNa\x1d\xf9\xa5\x8c\xb9<\x00\xe2\x8a\xdc\xc9L\x0c\xcb\x98\x92\x94\xc6<\x19\xc3\xf0\xf6\x8d\xf8\xe8X\x07\x1c\xe8'1\xd0\xa7\xe5\x95-\xfd\x92\x87\xde\xd9YW\x84u,\xe28\x0e\xf1\xfd\x8d\\Vv\xa1\xa7\x08p\xba\xc8%G\xf5\xc5R\xa2X\xf3x\xe1y\x98n_\x06\xc9\x961\xa7\xdf\x93\xf4r\xb0\"\xb7\x0e\xa6\x0c\x17\xc5\xf7\xf7\xb0\xe9\xcah\xdfW\xfe\xfamxM\x02\x7f\xce\xdbR~\xab\xa1\xb9\x17At\xf3\x8e^\xd3\x00\x99X?9\x8a\x18L\x97\x0e-\x9e\xb8\xd2\x17I)\x93\xbd\xa4w\x81\x08\xc1]:YMLu=%p\x93Ym\xe1\xdb\xff\x8f\xcf\x06\xcds(\x12\xa2pk\x0d\x9e\x845\xae\xdc\x1b\xa4\xf9\xd5\x0c\x8f\x04\xe0?\xe7ARG\x90\x89\x86X?\xac=\x91\xe4!\x18\xa8>\x97}\xc8xg\x19^\\\xab\x8f\xa6\x19\x1b_8%3\xd8\xaf\x06\xc3\x05E\xcd]\xc6gGA1\x868\xd8b\"\x0d%s\xdc\x89\xe2\xf4\x17z\xc7\xb3\xcf\xe4?\xca\x01\xddC\xfa\x9b?\x97\x01\xd5\xf3_\xf7\xf7\xf0T\x86C\x0f\xa3\x8ft\xc1\xdb\x10_\xd5\x16\xc2\xe8U\xb4Z\x93\xf4=\xdb\xce\xbc\x8eR\xa0\xd6\xf4\"\x86\xdd\xe8zu#@\xa9\x14\xa85\xbf \x84\xbcLOd{\xe5\xf0\xb6\x1cu\x1e\xd3`\x85E\xe4\xfaR\xb6F,\x99g\xec\x0d\x92Ra\xaf\xc0K\xb3\x84\xce_\xabOJ\xb1\xfet4\xe2\xa3v3!\xd2\x8b\xdd\x14\xc1~%\x9al\xea\x8at\xc6\xfc~nc\xc4\xf1\x9a\x8d-Q\x83\xa5\x81\x0f/ y\xeeb\xda\x064`\x97\xd9\xfa\x85K\x1f;\xfb\xc1w\xd1\xec\x87\xfb\x8a\x88\xac\x16\xa2\x83\x04\xb3\xbd\x95\x9e\xb0.ydW\x1f\xad\x86\xf8\xf7P\xd5C\x9c Q0\x14x\xdd\xdb\x87\xc8eC\xec\xedW]\xcb\x04\ngV\x10\xbd\xb6\x85\xe3\xd6\x87\xdb\x95\xe4\xf2\x07H]k\xdb\xef\xea$Z\xca\x1c\x08\xb1\x05\xc3>\xfe\xd5\xbe\x8e\x9f\x8c\x0dmm\x96\xa3T\x8d6wQ~\xdf\x1dU\xc3`m>\xdba\xbf\x18\x87RxP0\x96D\xfc\xba\xbf\x87\x9d\xbd\xad\xed\xed\xf2{\xec0\xdeb\xbfx~\x8a\xbc*+\xdf\xadt=\x1am\x8fF#\xebD\xfef\x9c\x08N\xb1\xd2\x0f\xb6\xcc\xbe^\x14__\x15_\xaf\x8a\xaf\xc7\xc5\xd7\xd3\xe2\xebM\xf1\xf5\xd2:\xac7\xc6a=\xf9\xfd,\xfc\x01dT\x13u\xb9\xe57\xb6\x91\xfe^\x0f<\xf2#cs\xcaE\xbf2Y\xa5\\\xf43\xe3m\xcaE\xbf\x01\x06\x99\xae\x0f\xf2/\xf6\xd0\xebl\x1c\xbej\xe7\xd4\xd1\x84B \x0c\xe5\x0b\xdc\xe9<\xeeG\xfd\xe9{N\x07j\xe5\x8cS\xfd$\x12\x92\x96r\x96TV\x12\x83\xf3t\xde9\xfc0\xca\xb0\xec\xbc\xf8z[|\xbd)\xbe^\x14__\x15_\xaf\x8a\xaf\xc7\xc5\xd7\xd3\xe2\xebe\xf1uU|\xbd+\xbe\xae\x8b\xaf\x1f\x8a\xaf\x87\xc5\xd7e\xf1u^|\xbd.\xbe\x9e\x14_\x0f\xc4\xcc\xcc\x89^49\x1f\xd2\xbaJ(7y\x18r\xba\xaaP\xd9^\xcfv\xb3\xd5\xf9$\xc8\xae\xd2\xbf\xafD\x05\xfaM\xaf\x04f+\xf7\x96\x8d\xfdoZc)\x13\x83\xfd\xc5\xc3\xd4\x0e\x12 \x9f\xe7rd\x1d\xf6a\x01hQ\xcdX\x15\xe4Ya\x03\xde\xe3\xe9\xf2\x92[\xf1vA$\xd2\x9c\xbeg'\xc3\xac\x8f\x88\xe9\x1b\xf4\xdc\xb9P\xc1@\xf4\xb5\x00\xd1n$\x1c%\x0e\xbaq\xa8\x7f2\xb7&\xc6\x85\xdcM\x00\x13\x08\xe1%<\x83\"\xed\xd2o0\xc6\xf2\x9fa\x0c\xbf\xc2\x98\x8f\xb2\x13\xf1\x87\x7f\x871\xfch%m\x7fU\xa8Fu\x85\xe8`\x9e\xadJ\xbc\xb7\xe9.\x84\xdf\xfe\xa6\xd5\xdb\xdf\xee\xe3\xc7\x86\x9b\xd9N\x85!\xe3\xa1\xfd\x19H\xde\x16!\x08\x14W\xd3\xc7\x18\xa0\x1dz\xec\x9b\xfeF\xd9\xcf\xb9\x0b;\xe9\x94\xfc\x17'\xed\xf3$\xc6\xbeH\xdeL\x14\x85\xa3\xd1eY\x80\xb0Q~\x92\x1f)G\xe97\x02\x94\xdcYd\xc0H}\xa6\xd9\x90\x87D\xe3\xd9\x82\xccv\xa8 p\xa2\x9ah6\x9c\xe5\x19H\x15T0\xc5n\x04\xeb\xbd\x0d@\x9e$\xa9\xbe{\x8d\x96\xaf\xe8Q\xfd\xf7F?jM\x06{\x90o\xff\xd8\xf8\xb6\xc0\xed\xc2\xe7\xe51z\xbb<~\xdcuM\xf8\x0e\xb2\xf5_\x9b[\xbfg\xad\xff\xc2\xf3\x04r\xbca\xcd\xfe\xe4|dE\xbe)M\"\xb6\xfess\xeb/\x8d\xad\xb7\xc67(\xcb\xee\xb0\x0fO\x9c\xb3\xb0\xe7:\xd3\xdf\xcf\xc2\xd9\x0f\xee\x93\xa5~W\xa9\x1f\x94\xc9\xb3\x9a|\xe1r\xd9DP\x96\x0c&\x90\xa1\x9aA\xb8U@4\x08H\x92\xbeeo\xf0\xfc\xe0\x7f\xce#\xd3\x0d\xfb\x98\x7f;u\x0d{Z\xfd\xa0\xa8~\x16\xcaP0Ct\xffd$^\xfe6c,\x88\xc9k$l\xf5#b\x0c\xc6\xaa\x0b\xb01\xc1\xa7\xfaam'\xc0\xc3\xbc5O\x04\xc4\xc9\x15O7\x1b\xc6\x0cyJ\x18>\xcb\x00o\x80|\xb6\xd3\x13\xe81Y\x0f\x13\xdc38\x88\n0a_\xc7<\x9f\x1d\xf4\xe0\xcfN\xc0\x85I\xbc\xb5\xb0vf\x8ey \x05*\xfa\xc6J\x9f\x19z\x12\xb7 \xdb\x7fk\xc4\xf6\xc7\x98\xac\xa4\xf9~O~rA\xba\xe0\xca\x85\xa4l\xe4\x91\x84\xce\xb4\xc2\x08\xbd\xe4\x02\xda.\xa0\xe7\x0e\x13\xd7v\xb7F\xc8\x04\xd4\x83\x95\xfa(\x15\xf3wv\xb76\x87PD.\xdd\xda\xdeb\xc26*\xa6\xfepF\xc3Mt`Na\x83\xb7\xce\x93\xc9l\x88\xd7z\\\x86c`c\xbc\xdb\x98\xeb\xbc\xde\x0b\xab\xd9\xde>t\x90\x93\xf9\xe4`Zh:\xf5g0\xe6\xa7\xdc\x1fz\xb74\xf5#\xafSmk\xe6\xf2\x8c\xa2\xfa\x86D \x08\xf3\x92\x95t\xba\xfej\x1d%\x89\x7f\x11\x08\xc7\xf71\xf8BU\xc9\x8d@x \xb2n\x13c\xf7\xd9\xb1\xcb\xf3\xbf\x983K\xc1\xbe\xe4\xd7\xa4\x02\x10\xe3\xafin\x01\xe221)\xc5\x95\xd2\xea/B\xb6\xdfx\x8em\xfd{\x9b\x9c\x1e\xe5\xcf\xd8(\xba\xbd..\x97\xdc\x94\x1b\xfc\xb09\x0b\xbb\xd6\x19\xfed\x14\x84MCf\xb8Q\x90\xd4\x8d\x11\xa6\xf7\xb4\xf6\xf1g-\x14\xd1\x1aAq\xbcV\xc9k\xce\x1bTl\x87UE\x96\xe2CY+:\xae2\x90\x85*\x9d\xc0\x0b\x08\xd8\x1f=\x07\x89\xa2\xa3\xe31)oJf\xee\xa0\x88s\xc0P\xc4\x1b\xe4\xf6\x06\\\xcb\xdd\xf1*5\xba\xdc\xbc\x80aR\x9e9\x90\xd3XY/Z\x80\xfaR\xdeN\xder\xa5#F\xfal\x82.\x95\xea]\x98\x80\x87\xdf\xc7\xd0\x9dt\xfb\xe0\x0dr\xbb\x04\xdb\xb1\xc2\xdaXp\x95\xa8\xb8\x1a\x99b33>\x0e5>N\xdfh>\x91\xf1\xbb\x00\xb5K\xee\x13\xa1\x94\xb03sa\xa1\xe2\x06\x0d\x80\xfaA9/\xa9\xf5\x85\x11-\xca\xf4\x99'\xe8\xf7D\x82\xfe\xc7/1k\xbf\xe0\xfdc \x9eG\xd7i\x82Wo\xfc\x04\xe6i\xc2\x10\x02\x8f\x9bN\x9a\xf2\xb4\xa6\x8b\x19\x9f\x99\xf9\xe41OY\x8a\xc3\xb1\xb6\x8a5\xfe\xb4\xc6&K+\xe6w\xec\xfa\xd1\xffU\xd2\xf1\xf1M_\x95\xd9\xd5\xfb\x83|\xc8a\x9fo\xe5\xb0\x0f\x9d\x11F\xc1\xc9\x7f\x0e5\xd9\x82\x13\xc8\xb1\x847Q\xcd\xdb\x9a\x13?U\xa4}\xc1#\xc4\x95\xa5\xdcjVS\xd6|\xd0\x87E\x1f\xed?\xea\xdeR\x0cAQ\xd9\x91?B\x17\x1f\xf9\xa4\xae.C\x85\x9d\xa3h(\xc5\x8dXqI\x92\xcb\x04\xa1\x8b7f\x85o\x06\x02\xeb\xd1#\xb6\x05\x95\x02T\xdb\xdc\xdf\x83P\x84K\xa5\x02\x12\x86\x97 R.\xfb\xa8*u\x85Z\x8aVn_\xa6\xc1\xcc-\xa0\xdf\xfd!\xa6\x8bs\x86\xe3\x15\xf1\xderQ\x8d\xd3\xc2\xb6;\x9a\xc6q\x08\xba\xf2}\x9eR\xdc\x00W\x97\xaf\x1c\xcf*\xab\xde_\x8aU\x96\xc7\xcd\x04\x9cN\xcd\x96I\xa3!\x92\x9f\xb2r\xb9\xaf.\xb0\xc5\xa2\x95\xdf\x1c\xa7\xc4\"\xe0]V\xeeYM\xb9\xf1\x91\xd6H\x1f\x04y\xa5\xe8\xc2%~w\x9aT\x80J\x0e\xd9\xe2$\xd0\xb4\xa3\x145\xb4\xa8\xbe\\\"u\xf9u\xe7*K\xd0\x92\x80\xc0\x05O|\xc3\x13\x98\xdb\x8c\x10\xa1\xa4b\xe5,\xc4e\xe9\xbe\x8d<\xe72\xd8\xc8E\x95=\x135\xc4\x823\xc8\xf8\x0c\xa9\x1d\x0c\x89$\xae\xb5D\x88\x89p\xca\x18\x9c\xcb\xa9?\x9b\xf5\x05\x8d\xe1\x96\x80\x19O\xcb\xce\xffq\xbc\xc7\xdd\xd5b\x07 \xe4\xc7\xbd\xc1\xbe\x15\x1e\x15L\xf0\x90\x89\xe0e\x1dO,\x1d\xd6,\xe77\x9f\x88 N\x13\xc6\xa8\x8a\xaf\xd0\xc5\x8d\xd7\x93\xaf0\x0e\x83S\x81\xd2\xdc\xd4\xa9$|\x1a\xc1\x17\xf4<.z\x1eC\x97\xe1uo_\xed\xdd$\xedHZk\xa2\xee\x89}&g\xe4K\xda\xe2\x14t\xe4QNG\x90\xc9\xe3\x9d3\xd9\xac\xbe[m[\xb5b#\x914\xec\xd3\xa0y\x9fz-\xf7i5\xa7\xb6\x97\xa3o%\xa7vV\xbf\x8a\x9f\xa0\x00\x8eR\x93\xa0`\xfc\x18\xc2\xbb\xddn\x1fq\x02\x95 S\xb6?\xbci\\`3N\xb63\xe2\x87_\x01\xd22N*\x8dq\x04\xcb\x8a%f2\x96q8\xc8x\xa3eF\xbd\x0e\x17\xaf\xb099\x14R\x1e\n\xb2\xe6Y{lR\x8f\xf5\xee?X\xaf \xeb\xbf\x11\xa3\x9a\xd0\xa9\x0b]\x05\xa9\xeac(\xa8\xa5\xf6`.\x1d-e\xf0~\xc9iRx\x00\xdb03\x93\x98i\xc16\xc5l'4\xd9\xe8\xa8\x84\"D[\x1d\x95\xe4)$4B\x12J\xcad\xa6%1\xc1\xb7\xba\x1b\x0c!\xc4W\x9e5\xb8Xy\xfb\xc2g\xca\xc2\x13\xce!\xcd\x9a\x16\xfd\x9fAF\x1a\xd6\x88\xb4X#\x85\"\x84&\x8a\x90\xf3\xbe\xd3xV\xdeA*1\xf091h\xd8\x8c\xae\xd0U\xb6\x82;Q7\xdc\xb4+S-7\xc2\xbe \xf0\xad6\x9cY\x94\xcc\xb7!\xd7(\x89@\x03I\x93\xf4X2\xd5k\xf4m\x84\xaa*-\x0b\xb98F.\x02\x8a\x9eT\x10-\x801/|,i\x048W$Kz!K/'\x95\xf9\x87G\x8f\xf8\xc5\xa4DbT\xe0\xd6\xc1]+i\xe2K\xca\xab\xc1\xc5N*\xc4\xce\xeeKu=\xfed\xee\xa8.\xd2\xe9D\xb5\xff2+\x03sm\x94.\xd4\x8c\xce\x1d\x87\xc7\xbb\x94-\xa3\xfb\x97\x89~*\xb4\xb3\xbe\xa2\xb9\xe5c'O \xa6\xd1\x80\x98}\xec7\x94\xc0\x14\xa1zO[Xy\x15ia|\xdc\x9c1\xf7ui\xbc\x85\x0fy\xbd\xd4\xed\xf3ce\xe0'<\xb4C\xaa\x89\xce.?Uf851\xc3\xd4I\xa7\xfeL@\xcd<\x12{G\xd5X\x11\x15K\xb8\xc8\xd6y\xc4y\xeb\xb0\xee\xc4\xca\xd0$\xe2dZ\xb9R\xf5\x0d\x97\xa8\x90\xaar-\x82,\x9a\xfa\xd3p6\xabL+\xd5\x98\x03\xe6\xe12b\xbb\xd2\x8fR\xab\"\x9b\xb5s\xc43\x02\xb0S\xe8\x1fUOB\xa9\x97V\xcc2q3\x84\xc8\x03\x85}6GZ\x9c\xb0\x13\x08%\x8b\x85\xda\xcbR\x0e\xf2b\xe7\xe5n\x9fr\xfbR\xaadh\x1f$dA_W\xac\x15,\x96{|\x8a\xf1\x80\xde\xa64\x9c;\xf5}\xc4m4\xc7@\xca\xab\x85'~et_\xe4\xf6\xa3z\xb1Z\x07,\x0d\xe9\xd5\xac\x07x\xd9\xd6q(\xecC\x8f\x9aC\xcaX\xa3\x99\xf3h\xe1\x97i\xba\xd6\x04\n\xe7\x0fo\x12C\x0cq\xd1\xdfS\xc1\xec\xd57T\xd1\xb8\xae \xd9zC\xf3\xdb\xdb[\xf6\xf6\x17\xda\xb1+-l\x8e\xec\x0d,\xa3\xf5%\x8d\xedm\xec5Lr\xe1\x07\xa6P\xebzs\x04\xeda\":\xf9\x16\x98%\x1d\xca\x1a\x83\xc4\xd47~d\xbc\xde\x99S/\x9a\xd3O\x1f\xdf\xbe\x8aV\xeb(\xa4a\xea(Q:\xcfzh\xb2\xc0\x18+\xcd\xceM\x07\xdc\x7f\xc2_\xdc5!{NT\xaa\xf1\x05$\xed\xd1\x9e\x8c\xdcQ\xdc\x0f\xa1\xcb;R\x9d\xcd\xf95\x0dZOO\xd0#\xde\x85X(6\xd1H\xf2\xd1#\x10G\x0f\x0dkS\x8cP\xb2\xdbG\xb6\xa0\xfe\x94'\xf03\xd0\xbe\\\xf4I\xd1O\xf2\x8f\xc8\x0f\x9d\xee\xa3\xae[!o}H\xb9go 2U\xb0\x94.\x92\xd1@b\xfa\xfb\xfe\xe4\xd1\xac\xe7\xeeO\x9c\xe9\xef\x8f\xb8\x95\x04\xae\xfa?>?G(\x86V3\x01i0\x159\xe8\xb4i6\x8fb\x156\xabg\x0b \x9b\xe2\x87\xfc\xba\xd7\x89\xa7\xfe\x8c\xb1\xc9-x\xa6\xf8a\x08^\xf8FnU}\x1a\xb9o\xe4\xde\xee\xb6\xd67rk\xb8\xa9\xf1\x8d\xec\x1e\xde\xae\xa9\x97\xd2\xb9\xaag+W\xcb\x14\xdf\x97\xf2\x93$\x7f\xe2\x87-\xc8\xb8\xe1\xcaL\xdc\x94\xf5a\xdd\x87y\x1f.\xfb\xe8\xc9\xa8\x89\x01\xba2X\xe2.\x0d\xe5w\xa8\xf9-\xafSE\xb5Yl\x8a\x92?\xf4\xe9\xdd\x9ar\x9fh\xa2\xe6R\x06\x950\\\xe8\xcf\x10\xb9+\x03=\x02\xe1\xddK\x1du\x04.\x04\xec)\xec\x8bh=\x1c\x10)W\x1a\xd3\x01Y\xaf\x83;'\xeeW#>}6\x0c\xf0\xdc\xech\x8f\x16\x12\xb0\x01\xe6\xfc\xedJ\xbc\xa0Kn\xb7\xf2R\x90\xa1P\xdei\xa0\xe8\xc0Z\xb9f\xcf\x16\xad\xc6t\xa35\x97dC\xa2\xb8\xb3t\xbbj\x01\xce\xb9\x9ac\xe3\x90\xed\xe0Z\xb59\xec\x83\x08\x05\x1fe\xa9s\xd3oa\x94\"A\x91\xc2\x068\x08\x0f{\x00\x88%L a\xdc\xdaB\xbep\xed\xd6\xf3s\x00ga\xabn\xdf\x06\x88\x1cZ\x1d\xad\xe7\n2\xa0Av\x00\x13\xb8`\xaf\x8c\xf9\x9d\x8e\x8a-5 M\xdf\xe3m\xd3\x1a\xe81\x97\x01\xea\\\x0bz\xb6Bl,$^f+\x1a\xa6 \x0f\xe4\x9f^\xfaI\x1fo+\xa8Ei\xc2^V\x90\xad\x10\xbf\x9b\x97\x0f\x14t\xe5\xbd\xd4\x91\x80 $\xab\x02fkmC\x9f\x1d\xd3\xc2\xb3\xd1-]u5\xea\xcd_8\x97m\xe4\xf0\xfa\xc6BSyG\xd7\xa8\xdb\xaf\x8cT{r`\xaa\x0bF\x85\xee\xefQFrB\xae\xfbA:\xd9a\xe7-\x99\xfb\xe1\x92g\xdap\x18\x95\xec\xae\xc8\xedo\xc4O\xbbty\xbb\xb5PS\xe5~p\xa2{#\x97u\xff@ *\xdd\xeb9\xe1-]B\x0f\xab\xac\x05\x82\xe43\xa1\xaf\x0f\x9d\xd8\xa9\xc4\xcd\xccs\x08\x15\x0c\":`\x8c\xc1#\xe1\xe3\x94\xcd\x0dH\x02\xb9|\xd9\xa9\xd8O~\xd6\xef\xd0\x1a\x80\xc6\xa0]\x14\x14-\xba\xe7\xe7\xd8\xfe\xf99R\xe4\x7f|\x86I\x15LZ-\xa89\xe8\x16\x8fC\xe7l?s\x1di\x15\x85\xe2`\x9f\x81vw\xe8\x0e\x16NUp\xee\x832\x0c\\\xbc>l\xba.\xeb\x7f*\xc3\xd9u\x1c\xaa\xda\x8c\xa1\x9aM\xe78\xd5\x14y*\xd5G\xcd6\x9e\xb0*0\x8cl\x87\xa8\xebK%\\\x8aFx\xf9\x9c\xd0\x1cM\xd0@\xf6\xb8\xae\x06\xad\x9a\xc1\xfe\xe33\xbf|\x19\x8b\x83\xa6\x82z\xde%\xf5\xae\xc6\x8aEv\xebM\xab\x92\xf5\x02\xe5\x8b\x8d\xdb\x82\xe8\x1b\x8f\x1d\x0fC6\xf0:\x0f\x1b\xd9\x97\xed}\xde\xdf\x18\xc7\xff\xcc}\xe0~oV\x1a2p\xed|E[\nx\xab2\xb4\x90\xad\xf7\xb4I\x88\x9d\xad\xbd-m\xdc\xa1\xa7\xba\xb0C\xa1\xb3]\xad\xcd\x07\xfft\xbbZ=\x10\xe5\xd5\x83\xc0\x13\xbdVG\xb9\xe0\xf5w\x86\xa5\xd3\xf0\x99\xf2+\x1a\xf8![\x1a\xa7\x82U\xeb\x1a\x19Z\xf8\xe1\xfc\xf5\xf1\xfb\xa3hN\xc7Ui6\xa6\xe1\x9c\xc6c\xf0\x07\xfc[e\x92\xe1*\xca\xc24\xd7\n\x1d\xa4\xbc\x11\x7f\xa0\x7fR~\xfb\x9a\xc6\x89\x1f\x85cH\xaa\xad&x\xc3v~\xc1\xe8\x05\x9d\x7fZ\xcfIJ\x931d\x83r\x89\xe15>\xd2\x93\xec\"\x8d)}\x1b\xa6\xd1\xab(L\x89\x1f\xb2y\x14\xc2\xabB\xa1\xf5\x91\x1a\xcf\xcf?\x1e\x1e\xbc:=\x7f}\xf8\xeb\xe9\xf1\xf1\xbb\x93\xf3\x9f\xde\x1d\xffx\xf0\xee\xfc\xe7\xe3\xe3_\xce\xd1CWk9e\x7fM,\n{\xbbU\xc5\x8ar>\x87\xe7iL\xa9.i\xf8\x92\xa6\xaf\x82(\xa1I\xfaV\x10\xe47q\xb4\xe2\xab\x12\x0f\xccO5\xba\x16\x8aK\xc6*\xc8\xcaM1\xc3@\xb9b\x18\x88e\xa0\xf3|\xcc\xfc\x02\x921\xfbR/\n=?`\xcb_\\h|\xaepH\xeboAL\xf6\xf6\xaa\xd1\xca$5\xa9\xeewNM\xf6\x9e\xea4u\xac\xbc\x1a\xdd,\x13\xe5U\xaa$\x88\xe1\xd3j\xbf\x81(\xaf\xf6\xcb\xe9\xc9\xde3==\xa9\x11\xc35'3\xa3*Y\x9a\xf3\xf2\xcd\xea\xe1w)\xcaG\x95\xf2kQ^\x9d\xeeJ\x94W\xc9\xe4R\x94W\xc1p'\xca\xab`\xb8\xe0\xe5[\xd5\xf6\xcfEy\xb5\xfd\x1bQ^\x9d\xef!*\x18\xdb\xf0n|{6\xc4\xce>D>\xeeP\xb8p/\x07\x87\xd74L\x0fW~\x9a\xd2Xl\xf0\x8f\x94x)\x96\xbf\xf3\x93\x94\x864vVn^\xf7C\x90-\xfd\xf0\xe7\xecB\xd4V\n\x8f\xe39\x8d\x1dR\xad\xfb)\xf5\x83D\xd4.Q\x0bga\xab\xcaj\x9c\xc6\x84\x91d\x12\xa0\x80\xde<\x82\xe4\xc7\xbb#\xb2\xa2\x9a\xfbC\xf69\xf1W\xeb\x80*\xd5\xc7pS\xa72\xecs\x18\xa64~G\xc9u\xb9v\xa6\xaf\xfd\xea\x92\x84\xcbrMCv\xb3\x13\x1a\x94\x07<\x86s}\xcd\x1f\xe9\"\x8a\xe9\xdbp\x9d\x95\xab\xd7]\xb4>#d~\x8e\x92\x02\xb8\x020?\xb1\xb5\xf3\xbd\xbc\xf8U@\x92\xc4\xf1\x8c\xf5O\xe9mZ\xa9|\x89\x95_\x1f\xbf\x97\xd7T\xa2\xaaR\xf2*\n\x17\xfe\x1235\xb4\xab\x99\xb4\xaey\xc1\x17}\xb5f%\xe5\xb1\x96\x0b\xdf\x10/\x8d\xe2\xbb\x16\xb1>\xa5\xc2\x81\xde\xc0\xba\x1a\x98\xb2\x80\xa68\xcd\xf3\x0d!\xc8\xf5iL\xc2\x84\xf0\x1e\xee4\x15\x7fd\xbc\x80\x1f.O\xd2\x98\xa4ty\xe7\\c\xa5\xda\xd8\xc3k?\x8e\xc2\x15\x0dS'0K\xf3\xf8\xed\x8b\xc8\xbf\x99F\x08\x00\xfb\x8cw\xa9\x03\xa8Kb\x9flxY\x1c\xd30\xed\x8eu\xf7 \xbc\xca\x9c\xa6\xc4\x0f\x12k\x15?a\xac\xcf\xdcV\xe7\xd2\x9f\xcfih\xab!\xfc\x02mU\xae\xe8]r\x19\xc5\xa9\x97\xa5\xd6\x01\x05\xe4\x82\x06\xb6\nq\x14\xd09M\xbc\xd8_#\x07e\xa9J\xb24\xf2\"FMRj\xab\x87\x92\x97\x1d\x06\xf4vM\xc2y\x03\x9cH\xb2\x8e\xd6\xd9\xda:=zm\x9f\xde*\x9a\x13{\x05\x19\xb5\xbc\xb1R\x82d\x8c-\xaf\xadj\x14\xfb4LI\x13,\xf1\xce\xfa2\n\xe64\xb6V\x8bi\x92\xd8\xc1\x14S2\x8f\xc2\xe0\xce^\xe7o\x99\x1f\xdb\xdb\xe1\xd3k\xa8\x13\xc5\xd6\x1drM\x82\x8c\xae\xc8ms\x1d\xdf\n\x1d\xac\x13F7\x8duRzk\x1d\x10I\xa3\x95\xef\xd9j\\d\x89\x15t\x81\x7fm]\xef\x98\x06\xf4\x9a4\x10\x0eF\x7f\x16\x0b&\x9f[j-crqa\x87?\xa3\xc2\xd7\xb8]i8o\xe8\xd4\x8b\x02\x8f\xf1\xe1\x0du\xd0P\xae\xa1N\xb2&\xd6\xe5\xf2\xa20\x8d\xa3\x06\xca\x884\xe6\x82\xce/\xac\xe0F\xcf\xe8\x15M\x12\xb2\xb4\x82}\x11D7id]8F\xf9\x82\xa6\xfe\xa2\x9b\xd0:\xecu\x94\xf8aB\xadP\x8c\xa3\x9bFH\xc7\xd1M#\xa4\xe3\xe8\xa6 \xd2 M\x13\xff\xef\x08\x99R\x8d\x8a\x00\xf6\xfa\xf8\xfdA\x9a\xc6\xfeE\x96R\xc6\x1a\xb2s\xaf^E\xf2\x1dy\x8d\xbc\xc2W\x9c\xc2\x8aFgX\x95V\xc4\xd5\x81^\xa3\xb3\xb7W\xad.e\xb0\xaap#e\xb0\xaap\x83q\x08\x9f\xf5a\xb4\xd5\x87\xcd\xbd>lmV,[\x990\xb6\xb9\xa9 \x14\x1d\x0d<\x12~J\xe8\xeb\xe3\xf7\xa8O@\xde%\xf1\xd9\xcc\x91\x0fE\xbd/O\x11Q~\x19\xc5\xb5R\xda\xfcjS\xf3\xc8\xc3+\xda\xf7\xd1\x9cb3\xb2\x00\xa4\xc3\xa0,\x18\xa8U\xab\xca\"~\xd3Zm\x9c\xf1\xae\xd5\x01\xb2\x07\x1d\xee\xb2\xe7\xd4\x0dk1\xf5\xbbHv\xc1V\x9f\xb8F\x05\xcaz \x14C\xac\x06\x9a\x07\xbd\x0dS'/u\xdc>\x8c\x86.\x8f\xe7\xa7\x11?+cu:\x1e\xc8HT\x0b\xc0\xec\xbe\xec\x0b\x86\xe4\xabL\xf6Z\x13\xa6{\x95G-\xc5t\xbc\xaf\x84W\x03\xe35K\xf5\x96\xdax\xd2\x17\x85\\\xa1\xe3\x00\xd9g}I\x12:\xffH\x97~\xc2\xf8X?\n\xe5\xb6\xd0Vg\x9f\x8b\xec\x82\xf1zc\xe8F\xa1\"\xb9X\xbc\x10<\xb2N\xb3\xb8\xfe\xca+^^\xb7\xe5\x87\xfa\xde\x96\x9f9]\xd3pNC\x0f\xd9\xdai7\x8d\xd6*\xda\x86\xf3n\x1fX\xe1/\xf4\xee\x03\xe3\"\xc4O\x862b\x98\xf8\xfb\x03IR\xda\xd5$\xe5\xab\xf7\xea\x95\x9a\xffN\x80\xac\xce\xa1\x1d,\xcbo}#p\xfe\x18d\xb1\x80\x92 \xb2\xaf\xa3\x9bP\x0f\xe7_\xe8\xdd\xa7\xb5\xf8\xfe>\xca\x12\x8aU\x1f\n\xe7\x93\x94\xc4\xdf\x0be_U\xba\xf9\x02X\xe3{\xdf\x15\xdabd\xff,xs\xc9\xf6\xfb\x03\x9c\xf7\xf3\x05\x10\xe7/~W\x90\xcb\xb1}C\x98\x97J*\xe3\xbb\x13\xaa\xbe\xbc07\x9b\xba\xd0^\xa5I{r\xad\xb2\x83[C\xe7C\xb3ZD\xd7r\xf7\xa2G\xc5\xab\xf2\xe1\xabk\x18gim:o {\xd0D\xd3S\x9b\xe3\x105\x19\xa8\x97@k\xa9\x84ki\xb7\x00\xd7\xc4\xac\xb3F0j\xb2\x1c\xd7ymhL \xafe\xde\xb7\x01W\xa0\x94G!:1\x05A\xe9\xceIJ\x90\xbbIa\x02\xe9\x80\xfd\xac\xdeI\x14#b]\xdd\xe4,Y}t\x87\x92\x8f5\x84\xa6\xcd\xfa\xba\xd8\x0e\x1e\x86l\xb3\x99FC\x13^\x82\xbaT5\xf2\xd6\x18\xf3k9\xa8\x9e z\xe39]\x17\xec\xbczX\x07\x87\xe1\xbc}\xf3\x82Z<\xac\x07\xfeR\x13\x9d\xe0\xd7O7\xdc\x96\x10\x85\x8fG\"J|u\xb8h=\xd7df\"1M\xd9\xc4\"\x92\xd3\xa3G\xca\x8e-\x07\xba\x16\x031\xf7\x8e\xab\xe1\xf6AI\x18^\x16\x08\x00\xf9a\xf6.\xc6q\x17\xe1{kMp\x1c\xab>:\x0c\xd1j\x8f\xe7\xa9c\xf2\xcd\xcd`I\xd3\xd7$%\x8e\xcb\x81\xb3\x0f>\xdawEQ@\xe7NTu\x05`X\xbd\xc0,\xc4E\xa5\xac\xd8\x03udO\\X\xf0]V\x8bsbp\x05\x95\x97\xd9\xe7Z\x7f\xfb\xdc\x92GDH\x91m\xb7qn\x8c\x07\xc4\xf3\xb2U\x16\x90\x94\x9e\xdeD\x1f\xd8\xf1\xfb\xdaO\xd6x\xf9\x9c\xe0E\xca\xc2J\x8dn\x1b\xf6;\xa9\xcf\xbf\x83\xd1\xa2\xe6U\x13\x9fo\xb6\xe3[m\xc7s\xa7\x1a\xb0F~\xda\x1c\x1c\xf2\x93\x1fF7\x97\xbew\x89\x8bp\x0d\x13\xbe\"cp\xee\xc4u\xd8\xaa\xa9\xabBd0\xf7\x95\x1bv\xe3\xfa\xea\x1b\x04\xe5&\x02Q\x1dc_\xdf\x15C\n\xf5\xef5\x86\xd9S\xf6]3M\xc1\xad\xdc\x82\\0d\xb81\xad,:5\xd4\x17\xb6\x88\x0c\xd7\xf1\xd8\xdc\x04\x07cj\x05\x14\xc0)\x1b\xbb\x11z\xfe \xa6\x01% un\xdc~~\xe0\xf5\x0d\x01,\xf5\xae\xce\xeda\x06\x0fBu.O\xb6Z\xabo\x8e\xe1\x8f\x1eA\xa7\x85iD\xe5m\x87\x0e\xbc4\x0e~\xa1w\xb8\x1ayJ~\xd8\xd0\xd1\xa2\xcf\xd1s\x80\xf2\x83\xf7\xba\xf9\xbe\xb9t<]XD\xa8\xb1\xa8\xf8*\x1b \xba1\x8b\xdcQ\x1a\xda\xd6HX\x01J\x810\xc1\xaa\xac\x96\xbc\x0d\x1d\x9c\xdf\xc4d\xbd\xa6\xf1I*\xb2~\xa4\xe5\"\xf3\xd5\x01gT0\xd0\x980\xd7\x0d8\xaf\xd3\x0d\xb3\xd5\x05\x8d\xf3\x95c\x0b`\x19\x0b(\xacw\x97\xe7\x8c\xc3\x03\xcc\xdc3`\xf4\xb5%Ms\x93TG\x9cyn\x112\x17\x1d\xefk\x15\xb4+\"?\xfa{\x8dz)\x9eB\x81\xd1\xe1D\xafp}\x8f\xa5_)*\xef=\xd595\xab)\xde#q\xa4\x8a$\xe2V\xb4i\x197\xd5@\xe0\xf8\xe5\\L\x17\xf5\x85\x928\x18\xd60\xd7\xe2\xce\xaf\xcfV\x00\x13\xa0\x0e\x0f8\x92]\x04\xbe\x97SMd\x02\xe2\x01\x99\x17n\xa8\x07\xc9G\xba8\x8d0m_\xbf\x1ab\x0bp\xe1B.\xc8\x0d\xce\xa3\x9b\x90Vc\x96\x16K\xc8\xc4\xb7\xe42\xca\x02!\x06\xb5\x81\xa6\x84I]r\x03\xa9\xae\xac]a\xe4\xd0\xa7\x06\xe8c\xb9\xc8\x86\x16\xd3\x85LL)\x86_\xbf\x0f\x89\x8c\x03\xf0\xb5\x03P.W\xecX\x90\x13\xcb\x94\x8f\xc3\xc7\xafb\x1c}\x08\xf1m\x0c#\x9eG+,\xde\x8e\x90\xc0\xf1\xbdY\x062g\x89\xdb\x80\xf7\xff5\xc8\x8a<;\xe2fLW\xd15-\xa3';\xf9\xbf \x82~\x075\\)\xe2\x80Q\x03iP\x8a\xfc\xe6\xc1^\x0b\x13G\xedR\xa7\x91Xh\xf3\xfb\x1e\xe6\\\x9a@d\x89\xfc\xe2\xac\x8d\xc1V\xd8\xe73_\x81 W8z\xe6!\x8b\xf0\xa0\xfb\xfb\xe0\xb5\xc4\x94\xb9h\x16D\x92\xe4\x04\xc6|\xb05\xf5G`\xb8\x96\x07\x19uD\xb4\xe2Y[\xf1,\xad\\WlZ\xc9\xa0 P\x88\xd0\xb8S\x0ds\xc9ov\xf0\x9d\x80S'V\xcc\x17\x0c\xd3`]WVq_\x17\x95\x17\x04dV\xfa\xd1 \x81\xc60\xca\x96\xd1\x08\xd0\xaf\xca\x83\xa2\x9c\xb6\xb3\xe2\xbc\x7f\xf6\xab:\xa8y\xd9\xce\xa98D\x95{\xa9\xeb>\xac\xf8&w\xfb0e\xbf\x1a \xa9\xfe\x8c\xcf\xb0\xf4+\x0f\xd2Z\xf4\x1bv\x8e\xca\x00+~\x14\x0e\xde\x7f:9=\xfftrx\xfe\xe1\xe3\xf1\x87\xc3\x8f\xa7\x7f\xad\x9f\xafj\xf5\x9f\x0fN\xce\x7f<>~wxpt\xfe\xeb\xc1\xbbO\x87\xf5c\xb7Z\xfd\xe8\xd3\xfb\xc3\x8fo_\xe9\xaag\x9a\xea\x1f\x8eO\xde\x9e\xbe\xfd\xf5\xd0\xf6^\xa2y\xef\xf8\xd7\xc3\x8f\xef\x8e\x0f^\x1f\xbe\xb6\x0d0\xd0\x9eR~\xf2*K\xd2h\x95k;\xc6\xf0\x91.\x0fo\xd7J\x94\xfc\x94&\xe9\xe0\xc2\x0f\xe7NHo\xc4c\xa7\xfb\xbb3')\xb9'\xb1O\xdc\x0d\xcc\x01\x14\x0f\x0eNO?\xbe\xfd\xf1\xd3\xe9\xe1\xf9\xd1\xc1\xfb\xc3\xf3W?\x1f|\xc4\xbc@?\xfc\xb9\xab\xcb\x1ao\x0f\x85\xc1><\xb3\x8e\xd6\x07\xb9x\xfc\xea\x92\xc4\x185\xd1R+I~\xa1w\x96\x1a)\xc6\x1c3=\x0e\x82\xe8\xe6M\x16\x04'^L\xa99\xb6\x0c\xd6\xc3\x08%xjx\x96\x0e\x03\xcbp\x13\xcb\xa3\xbb\xd03w\x9f\xa5\xd1+\x11\x12\xc3\xdcD\x96F\x1f\x02rglE\\\xec\x9b\x9f\xd3 \xf8@\xe6s?\\\x1a;auN\xd6\xc4\xb3\xd6\xb9$\xf1\x89e\xd5\xbcK\x12\x04\x14-\x1c\x8c50\xb4\xc7\x18\"\xb87\x8e\xd6\xb7\xc0\xc2\x0bH\x92\xbc}m\x7f\xceYLS\x8d(H\x8cA\x89\xbc\x88\x01\xc1\x8cV^\x14\xa64\xb4@\x80??\x9c\xfb\x18\xe8\xc3^\xef6}O\xc3\xccZ'\xc6\xc1\x9a\x00%*\xbc\xf3\x13\xdb\x88\xa2xnFO/\x8e\x92\xe48\xf61L\x92\xa1\x0e\xb7\x0c2?\xa4\xa7\xbe\x05\xdey|\\\xc3,\xe6t\x81\x81 \x0dO\xfd\xd8\xdc\xb2\x08\x96c~9\xba \x83\x88\xcck\x91 \xf3\n1Y.\xad\x0bEC\x8f \x04\xc6\xe7\x8b(^Y\x1f\x1e\xd8\xe9\x14\xabr\xd8\xa2\x8f\xf74\xbd\x8c\xe6\xd6*G\xd1\xaf$\xf0\xb9\xff\xa9\x01 \xac\x1a\xe7\x0f\xcc-\xc5dE\x7f\x8cb\x8c\x16i\xa8sI\xc9\x9c\xc6f\xa4\xba\xa4\xfe\xf2\xd2\xdc\x05\x0f`d\x1c\xe4\xa5\xbf\xbc4\xbf\x1b\xd3\x85\xf5\xe1;b!`\x97\xe9*x\x13Y&\x96\xa6\xeb\xc3\xbfe\xfe\xb5\xb1\x86\xefY\x16\xd37/\x10\xden\xbd\xc7\xf0\x8d\xc6\x1a)]\xc6~j>\x81|3\xc4\xaf\xe8\xdd\x07\x12\x93\x95\xb5\x86\x15\xc9\xae\xfc\xd0d\xeet83ov*nd\xd9$e\xba]D(4\x7f2\xec\"~]\x19\x95\xea3\x08a\x08|\xda\xd7\xed\xbe\xca>3$WK\xbe\x052\xd5\xd0C\xe4\x87xVE2\x11\x9b\xf4\x99>?\x84.\xd9L\xac\xac\xe8\xa40\x9d\xe7\x89x\x04\x85r\xbas\xff\xfa\xffa\xefM\xdb\xdb\xc6\x91E\xe1\xef\xf3+`\xde9ij,)\x96\x9d\xc5Q\xe2\xf6u;\xce\xe9\xdc\xc9\xf6\xc6N/\xa3\xf6\xf8\xc0$$\xf1\x84\"8\\d\xbb;\xf9\xef\xef\x83\x02@\x82d\x81\xa4lgf\xeey.?\xd8\"P\x00\xb1\x16\xaa\n\xb58\xfa\xbe\xb7\xb9\xf2\x1e\xfe\xfd\xb7\xf4//\xdc\xdf\xae\xb6\x07\x0f\xf1Q\xe8\xa5\xdbX\xbb\xca\xcf\xc5\x9a\xa2\xee\xd6\x04\xd1DL:\xfd[\x91\x8ab\xf8\x8af\xde\xd2M\xdb/>\x01Ug\xb3\xc9yU\x1f\xbc9\xf1\xa8yVH\x94np\xe0\xd6u'\xe1\x82\x1bkd4\x0e\xa2\x88%b\xbb\x08\x9c<\x9b\x9c\x93m\xc2\xc86 g\xbb\xc8\n/B\x1a{\x00\xbds\xfe\x9cx\xa3\xd1\xf3\x81\xd4\x0c\x1d\x874\xcd`\xe1V\x17\xa6\\\xda\xd5O\xb1\xe6\x90\xce\xb5B\x98\x9a\xf4\xf4\x87\x9b3\xba\x80H\x0d\x8e\xf4\xb7^?a\xe7:`\xb3\x8c\x16\xadgkH\xb8;\x1f\x8c\xe7<9\xa1\xde\xd2\xcd\xeaF\x80E/br \x83~\x81\xfa\x89\x1b\x8d=\xd1x\xb1m\xd3\xc1s\xb3?\xa2\x87Z\xdfQn\xe42\x0f7\x99,\xf1\xfc\xd7\xfb\xd8\x7f\xfb\x96\xcdm_\x82\xaa\x1d\xedkT+7nI\xcd\x1cTC\xb7\xaa\xd0x`\x86#~\xf0\x808r\x06\xc05\x03T\xb2\xe5:)\xcb^G\x19K\xd64\x94\xe9\x83\x8a\xde\xbc\xa9\x13)p\xb3 \xcd\xe1\xf3r*\x82\x14\xfe\x8b\x06\x8bO{4\x0c\x19S\xf5\x83\xa9G\xc6V\xaa\xda\xea2\x13%\x0eI\xa3\x12 \xa2\xc0\xf6\xbf\xdb\x98\xa3\xdc\xaf6\x7f b'\xe1\x0d\xd5c\xb7U\xd5n\xb6\x85r\x86\xc3\x08\x16+20\x99\x91\xad\x0c.\xc1x\x81\x8c\xc8\xa4\x18 ]\x1c\x9d\x9c\xb1\x1c7\xa3\x9ez(\xf9AK\xbc=\xb5.d?\xcb[v\x18F\x15\x87\x1d\xc1Jf\x9c\xbc&UX\xec\xbaH\xef:7\x13[U\xfa\x9e\xe0\xe4\x05\xc9\x9e\x13\xbe\xbd= \xd1\x8c\x9f\x8bI\x98q\x04\x05i\xf5\x9c\xe6\xdcO\xc9\x8c\x9d\xdf\xef\xb6\xb3\x1c{XP\xa4\xbb\x1ec\xa0\x13\x89h\xed\xcd&C\xf2\xdd\x0b\xc9\x1f\x16\x02\xec\x03'Kr\xe6|\xff\xdd\x908/\x1e\xca\xcc\xef\x9d\xf3\xe6\xc1(J;/\x80\xb1\xfc\xde\x01`\xf5\x1b\xf1\xf4=\xdb+a_d\x97\xdc\xbf\xf9\xfeE\x96\xe8b\xc9\xf7/\x1e\xaaDK\x1d^\xd9\xda\xf5\x82\\\xaf\xc2(=\x00\x8eo\xfa\xf0\xe1\xd5\xd5\xd5\xf8jo\xcc\x93\xc5\xc3\xdd\x9d\x9d\x9d\x87\xe9zQ\xb4~\xbdhT5G\xa9x\xe7/\xceT\xf6\xe8\xf0\x85\x1f\xacU\xcb\xe0\xd7y\xf38\xa4 \xa3\n\xfc\xc5\x8a\xc6\n\x1a~!\xd0\x1e\x0f\xa7d\xb6\xdb\x1c\x01\xddi\x8f\x87\x8b\x84\xe7\xba\x9e\xe2\xd56\x1a\xe2 \xd9\x82E\xben\xc4<`\xa1\x9f\xb2L\xd5P\xbe\"%c\x9a\xd0\x95.(1\x8b*\xa6_\x90BY\x82vAM`\xeb\xdc\x11y\xb7\xb0\x90\"wDn\xcacy\xad\x8bdyT\xe5!l\x92\x1e&4\x13\x9a\x84\xe7\xcc9\xcf\xf0\x9c%\xb3\xdcog~#\x08\xa0,0\xad\xbb\xa7,w\xfa\xcc\xf1\x82\xc4\x0b\x81\xc5\xf5\xc2 \xfe@\xb3\xa5\xf8\xed\xb39\xb8n`a\x18\xc4)d/\xc4\x9f`E\xa5\xaf\x07\x08\x80\xa2\xfe\xd3\xe4?\x13\xea\x07,\x02-\xdd\x15M\xc1\x03D\xac\xaaR72\xf0\x93\x877\x0b^\xfc\xd4u\x88\xc244\xebHddJ'\xcd\xb8\xf4\x0d\xc1\xae\xa5\x060\x84;8/(\x1b\xfba6\x07\x0f>\xc4\x1b\x12*\x7f\x99\xc1xk^N:i\x88@\x9c6\\\x9e\"\xf3\xda)\xa2N?p!\xe4\xfcEpV\xd4\x02\x11T\xe8?\xe7/\xa5m\xb5\xf3\"\x0c\xa2\xcf\xe4\xe1\xf7\x0e\x99\x12\xe7\x85\xa3HP\xe7\xfb\x17\x0f\xcb\xdfN\xd9\x95`<\x0f\x12M}\xa9\xe4C\xd9e\xd4\xd3\xed]\x0f\x01T\xc8`Qwoe~q\xe1BO\xeeW\x1f\x9d\xb8\x82(\xe6\x83\x99\x80\xab\n%\xfb\xd0\x0e/\xa2>\xac$Nl\xde\xc1<\xa2S,\xd1p@\xa3\x19\xc9z$=-\x97\xa8\xcfI\x8eK7R5\x85x\x9c\xc1\x86\x02\xa6\n[\xfa\xa4\xce\xbe\xaa0\x83\x0dW>\xb1\xaa\xbe\x9e.\xe3\x0cN\x1e\xd7;+\xe3\x0c\xee=\xae\xc3\xaf\xf1\x15\xa5\xc2\x0c\xee\xd4;\xab\xc2\x0c\xee\xd4 \x91\x1b\xd5\xfc\xfa`\xaa0\x83\x0d\xbb\x8d\x0b)\xb5\xd9{6\x18B\xb8\xc4\x9d\xba\n\xa4\x8a7\xd8\x18\xbe\x13U\xf0\x11\x14\x9c\xf8\xeb\xebB\xa2`r\x0b\xa2\x85\x16{\xf7\xa8\x10\xf9;\xe4l\x19\xa4D\xd0\xf6\x82c%W4%:L,\xb9\xbc!\xff%\xce\xa9H\x9cS\xff5Fn6\xfed\x7f\xd3\x1f(Ka./\xde\xa1'\x83\xb4Z\xfd?36\xbe\xc8\xe8\xe2\\\x1a\xd7(s\xcfl\xac\x97\x85\x1e)\x99jY\x0c\x8a\x1fu&{O\x1dA\x1d\x88\n\x87\xf6\xc1?$\x0e\x81\x0btA\x8f\xa9\x91P\xaa;\x84\xcf \x9c\xda\x96\xb2\xe5\xc0\x8b\xe1\x1a\xc3\x91\x0f\xf6\x89]M\xb4uO6\xfc\xc9\x0eHu\x11\x9b\xd9\xb6\xfa\xce\xc0\xa3\xa4\x15B\x8a\x94\x9fL\x9cA\xa5\x81p\xcf^1\xd158\xf72W\x14\xddu\x86\xb0\xec\x07\xed.M>\xb6x\xdc\x90N\xb6\x133P\xfd\x15\xea!\x19\xf1\x88\xa8m\xa6\xd9\xf8b \xa1!\xda[\xe4\x05\xac\xf2\x07\x0f\xf4\xcfRN#h\xb6\xd7`\x99#a\xa6\xe2W\x87 \xd3\x91\x9b\x0dI\x00>\xb2\x16L\x06\x8e\x85\x88\xc7\x1f\x19\xf5o\xdc\x81v\xa6\xe5\xbe\xc4\xee\x0e\xa0QQ\x9aM \x12\xeb\x99\xa0\xb6v\x16\x97\x9a\xa1:3\xa6\x88\xdf\xe7\xafVKQd\xb6^6\\ \xcd\xc7q^\xc6\xc1\x05\xe7\x92\xa2\xcd\xca\xcfd\xbd\x85*Y\xb7\xa7}i\xbci|l5\x8ey*G\xf0g\xe9\xca\x02\xbe\xd8^\xcd\xa7F5\x97\xb7\xa9\xe6\x1f\x8dj\x16\xdd\xd5\xe8_b5\xbej\x1ca\x19\x8f\x8f.y\x02w\xd3\xe2\x7f\xed\xcc\xcbx|L#i\x0e\xe0x4\x8aCzc\x05)\xfc\xe1h\xc8L&4\x0b\xbc\xcc\xe5|\x1c+\x0f\x85\x8e\xaf\x12<\xcc\xab`\xc6\xe3\x93U\x9c\x05\xe0K\x90\xc9_\x08H\xe4%7q&\x81\xf4o\x0c\xccW >\x9a\x9d$p\xa3\x0e\x91\xfd\x9a\xd9o8\xf5\x99/\xfd\xd6:!\xbc@\xc8\x0f\x0b\xe0[\x96Q\xdf\x04^\xa9\x04\xbc\x80\x8a\x9f\x04\xb0)\x12\xe4\x08\x1c\x96\xe7\xa9\x18\xb0X\xfcG\xb2\xe5L\xe1\xd3$2\x81\x88\x80\xfc Z _$\xa0X\xe6\xc4\xeag\x13\xe8#\xcdX1s \xcd\x98m\xd6N\x19\x03\xf3\x0b'\x85\x1f8\x80lQ*\x7f! \x19\x0d\xa5\xcf\xc9T\xfeB@\xf24\x06I\x8f\x93\xca_M\x90\xb3`\xc5t\xb4$'\x0bV,\xc7B\x1ae<\xfe\x89\x87\xf9\xaa\xec\xdd\x1a^m\xfd\xfb\x99\x06\x99l\xfe\x95\xfce\xd0\x11\x18 \xf6{c\xff^\x8f\xb3\x84z\x9f{\xec\xfd\x1f\x1aeK_\xcb\x82\xe0~\xfdR\x1f\x98{\xf5\x8b\x1a\xb1\xf3\x199 \xea3\xd5\xcc\xc2W\xbe.\xfe\xc8)<\xf4ft\x81\x1du\xd2\xd3{\x00\xba\xfb\xd6 ?\xeap\xc6\xdd\xb5\xcb\xeaMW@\x05>\x06\xb9\xa9/\x86%\xfeA\xba\x1bU\x0e\xdc\xd4\x1e\x01\xb9\x8f\xfc\xcf\x06\x96k\xe0\xcb\x84\xd1\xcf\xcd,\xd9\xb0u\xe03nm6\xcd\xfd\x00\xcb%\xa6\x0c=+]a\xdb\xfbp>$\xaf\x06\xe4U]\x1e\x93\x01\xb1\xd7Vx\x1c\xe7\xe9\xd2E\x86 \x1b\x92W\xb3\xec\\t\xdcB7\xb7v\\j\xac\xdd\xef\x8c\x9cH4Y\xe0\xcb[\xceI\xb0Z|\xf3v\x0d\xc9\xb7\\Us\x9e\xac\xee\xb7\x0b\x1f\x19h\x88\x11'Q?Z\xbap\x9a_\xae\x02)\xb4\xd4\xbfn\xd7\x8d\xc0\x128E\xad \xe9*\xce\x1a\xd7\x8b]g4a\xf4~\xc7\xe1\xb5\n/>\x14\xad\xd3?\x99=$\x01\x82;\x7fj\xe0\xce\x1b\xa0\x9b\xe4\x89\xd0\x87p\xfa\x11\xe5\xfd\xe5%\x07&k\xb8\xa4\xe2\x94Fs\x12<\x1d\xae@\xb0\x0c\xb6\xba\x14\xc7\x1f\x96\xb5\xb4\xd4\x15\xac,\"\x90@\xc6\x14\xc5\xb2>\xb3\x9b\x05\x8b\xf0\xbc0\x88>\xe39\x82\x9e\xc1s\xd4\x1d\n\x96\xa5Ug\xb1<8\x0e\xf1\xac\xab\xcbN\xe1\xcd\xcf\xe84\x89Uf\x95\n\xc5\x89\xad%j5w}\xf3\xff\x80\xff\xbe\xe6WW,\xca\x83\x8c\xad\x90\xf2\xe4\xc7\x9ap\xedW\xd0\xa2\x99\xd1\xd1\xefG\xa3\xbf\x9d\xab\xff\xd3\x8b\xdf\xc6\xbf\x8d~\xf3\xcf\xff\xf2\xe7\x87U\xf0\xbf\"\xb7\x95\xff i\xb5\xd3\x06#B\xfe\x8cJ3\n\xedJ\x1d^\xd0\x199\x03\xf2\xfd\x01\xd9\xa9J0\x02[\xa4\x92\xbfA\xb0\x01\xe4{\xbf\xb4\xc5\xd8\x13|{\x15\x17u\x85\xc4\xf9Oy\x03\xfeW\xf03\xfb\xe5\x0bq\x7f\x05\xf3su\xcf!\x08\x98\xc7\nW\xfeU\xdf\xbd4\xdc\xbc\x16\x04NUFb\x86\x03\xc9\xe8\x824\\C\xea\xcc\x88\xaeX\x1aS\x8f}\xfa\xf8\x9aT\xe3ph\xb9\x94\xbee\xa8e\xc7 [\x07r\x9e\xb9e\x9dRZ[\x1a\xa4\x05,u%\xa99\x17\xb4\xbe\xa5\x9d*\xbcv\xee\xc6\x16\x08\xd5s\x18\x92\xd7Q\x90\x054\xd4t\xbb\xa0%\xe7C\x92\x0c\xc9\xd5@\xfa\xd8o\xfa\xf4\xfb\xda\xe6fP|\xfd\xa4\\\x98\xf0\x8d\xf71\x8b\xce\xe8B\x9a\xdd\x1cE\xfe\x87\xf2\xda*\x85\x0f\xb6,\xf6\xebZ]JA@\xd6\xa5[k\xe9\xa7h\xfe\xd6\xb5@)?\xce\x8a]yN\x0e\xc9\x89X\xdeR\xf3\xebD\xaet\xb2M\xae\xc5/\xb9\xfc\xadKC\x02\xf7@\xe0\x1b\x92\xaf]\x14O\xc7\xc9\xf2\xa68\x82\xe6c\x9ag\x1c\xc2\x88H\xd3\xba\xd6r\xc1x. M\xfe\xe3\x9fr\x14w4\xeb\xd3\xbfSwZ\xa9\" r\x99gY+-\xf7o\xd0\x8dNz\xb3\xa3Q\xff\xe8O\xbc(\x99J\xab\xbeN\x0f\xcc\xd0CCQ+\xd6\xc8\x03l\x83\xb3\xb0\xb8\xd2H\xe0J\x03?\xc7@\xa7\xa7~\x8f\x91t\xc6\x89\x06/\xee\xb3\xa4\xc5T\xcf\x0c)\x11\xd8\xcfP\x0d\xfa\x1ek\x03x\xa7\xfe\xa8N\xa1\x04\xe2\xa2\xd8\x0e\x04\xfdt8\x87\xd5\x8f\x03\xba$\x92\x96\x01\xcb.7P\x7f5&\xc6$6\xdc\xfd\xe3\xebP+\xa2\x08\xa2-\x80x\xf6r\x9a\xe5\xfc\xbe\xe2 \x94H\xdd@-\xa6\x8e\x06\x135\xa29\xc1\xdc\xeccOA'\x9b\xf4\xe4\x9fK,\x0c\xeb\xe8\x90\xbcm\x8e(\xc8\xd4\xc4\x87\xbcz\x9bk~ ]1\xd8\x10(\x01\x85.\xab\x94\xda'\xb9\xd4 \"\xdb\x07\xc4\x01\x15\xa5\xbc}\xc2\xfb\xc6\xcb0\xcc\xc2#\x9f%g\\\xf0\xf9\x81'\xdbA\x0eID\xa6\xfa\xf4\xa9\xd2\x1cf[\x1a\xad\x07\xfa\x03\xf4\x8eZ\x80^\xbfT\x15\x83\xech\xd0\xea\xd3\x1d;\xb5\xfb\xf9s_\x17\xe1Kp\xe2\x80\x93\x16\xb5\xad\xe6J1\xf7\x1c\x1f\x14\x0b\x85\x8f\xa5\xce#\xccRB\xca\x04divP=b\xc1\x7f\x98\x15\x1aYZUL\xd0\x1b\x86\xe2\x98M\x01R?T\xadu\xc0\x0df\x84p]\x83\x9d_)Q\n\x0c\xdc\x89\x1b\xb4\xd1\xc5f \xda\x86\xd3\x12\xbd\xef\xa5\xfcQ\x13\x8aT\xc5[\x18\xff7\x0f\"\xd7qng\xa7O\xca\xa5\xfc\xb3I\xa3 \xce\xf37\x15\x02,\x19{K\x9a\x1ce\xee\x8e\xd8\xbb\x90\xbcM\x1225\xe2^\x10\xeb\xca\xab\xd1\xb7\xbd\xa5\xa6Z\x89\xed~\x97X>\x86\xd3T\x94\x17\x08\xe2\x7f\xc6bs\xa4\x83\x89\xc0\xe8 \x84\x86\x06\x0c\xd8{\x05Z\x1bY\x9c\xd5i\xfbB\x94\xec\xca\xces\x12\x92\x17$\xd5\xb6\x94$\xdc\xde\x1e\xe8fI\x0e6\x19\x92t\x16\x9ew\x912\x8d\xe8\x14\x1e\x0b\x8c\xf0\x14\x9ba1\x8c6i\x0e\x0d\x06e\xdc\xceHv\xb0h\x81\x9b\xc1\xc9\xdf\x8czR7\xe8\xab\x16\xbb\xc5\x16\x00\x19=\xbe\x8c\x82o+\xd7\xefb\x8c\xb8M\xdc\xcb\x15 \x82f\xda\x96%\xb9\x17J\x9a\xdb\xa4\xb3\xbaMh\xe6\x9d\xda\xd4)\xba\xe56\xf1\xacn\x13\x9ay\xa76\xf5\xe0\x03\xb9M\xec\xaa[\x85f\"$\xb3\x9d\x01\x7fW\x14j\x13\xaapE@7`\n,\xa3 \xc4V\x19v\x8b\xf8\xfa-\xde\x95\xda\xd1\x15M\x8c!\xb9\xc6\x83\xe3\xde\x95\x03\xec1\x1f\x97X\x83\xee\xf0\xc9\xcee\xd9\xc1t\xfe\xd4\x8f\xe9\xac\x9f\xfc\xc8\x0co\x80\xade\x8cI\x0b\xcf\x98 >\x00\xf4\x03:\xf3\x08\xc3(Y~4Y\x1f\x7fl\x96 \xe7\x91Yq\x85+\xeb#YN\xed\xecZ;\x1f\x05\xfd\x0cD?\xd3\x01I\xeb\xed\x0e\xa4\xec\x1fX%pU\xf2\xc7\xd7\xc1,8\x07B\xbd\x83\x9d\xb33\x8f\xedW\x8e\x92Z@\xb8`r\x08\x03G L\xad\xdc\xe6\x89`\xcc*\x0c\x1fka\xf8f\xd8A\xecB\x11\xd1\xed9\x90\x81q\xc5dfn\xaa\xd1\xc4\x83M\xd6x\xebZ\x12\xe0\x10\x98\xa6\x87Pb.\xa6\xb0}\xf1\x0dI\xdc\xb5\xa7Hek\xc4\x03\xb2\x15#{\xe3\xcb\x172\x87\xb1\xc0\xf3n\xb5o\xaa_\x9e\x0f\xd0\xca\x1f< \xb1\xa8OL\xc1\\\xfc\xb0\xecR\x91\xd7!\x81\x90\xfbM\x14E\"\xfb\xe9\xa7\xa0\xe0Q\xe9\x94\x98\x1aC85\x07|;\x95k\xa3\xdc\xaa=j\xaf\xc9n\x06\xf6\x9d\x9c\xb2\xacm\x1b\xb7\xdf\x8d\x17\xdf\xdb`\xa3w\xa3`\xdf\xa6|^\x7f\xca\xddrX\xedI\xd1K_u\x81L\xed\xd8\xc5\xdf0\x10k3\x05\x84U\xd4l\x80\x12\xd8\x15\xe3\x98c'\xb2\xf5\xfc\xbd5\xd7]\xb0\xb6\xac\xc2\xda\xb2~\xac\xed\xdd\x99c\nZz-6|\xd6L\xc5\xd1\xe3\xd5\xe6m\x02\x05\xd0\x8f\xbfU\xb5\xa9\xc1\xc6\xf3\x92\x8d/G\x0b/\x16vq\xffx1\xaf\xf25\x03\xbd[\xbc\x07\xcf+\x9f1\xe0\x11\x1aKg\xa5\x05q\xa4B]e\x06\xff\xabIr\x89\xb8#uF{\xa2\xc8\x16 _\x03\xf8\x8c]gJ\xf8\xe8V,>\x03PF(\xe4\x16\xd6\"d\x9b\x04\x03\xe3\x98\xcc\xc9!\xa1P.\xaf\x95SW\x92\x8e\x14\xf2\x1aE\xc2\x1a`\xd1\x81\x10\x0bg]\xdbL\x8a\xffy\x07\x0e\x85\x8b]\x84\xed\x1d%F\xab\x1b\xd5 u\xe6\x91]\x95\x10\xabyC\x9e\xfd\xff\xe9\xe2\x19\x8f\xd6\xf9\x95c\x87[\x01\xd8\x0f\x07iV\xdezvT<\\\xed<'\x11yA\xb2B\xfa\x15mo\x0fH6\x8b\xce\x95\x0e\x87\xcd\xf2\x9c\xf4a\xe7\xda\xf8\xd9\xde<\xe6\xf58\xcdx|\x96P\xefs\x10-\xbaN\xc7\xce6\x81\xc3\x82\xb6&-\x19\xf5\xdboo\xb9\x7f\xd3\xd2\xde\xc4u\x9e6\x1f\xe93\\\xf6\xd9i*C\xea\xa7\x8f&\x8bA6\xe0\x07\xa2\xf4h|\xc7\x03\xf1\xe9\xb3\xba\xcb2\x0e\x86\x87\xa3U:\xea\xf4\xdc]_\xeaj\xeb&n\xe1e\xdd\xe5C\xe2\xac\xd2\x913\xa8\xe3\xda;\xb5\xfb\xe1\xc8\x1d\x0f\x1e.n\xd9\xbe\xb2u\xc9\xb0\x1b\x85kW\xe0\xe3\x8c\x7f\x12\x14$\xe2\x02\xfc\xeb\xbdv\xceF\xa5(\xaa!\x19\x07\xe9\xa7(\xc8B\x96\xa6\xef\xc0\x7f\xd9\xa0k\x1cZ]\x19iQ\x02h@9\x97\x9c\x87\x8cV\\\x17\xcb\x0c\xa5\xc0_z\xe0\xaa\xed\x04\xady\x11\xa4\xef\xe8;7\xab\xa1\x07\xbd2DU \xe80\x9c(s\xc4?\xe5\x83\x07\x84K/\x922\xd2\x05\x99\x82\x08\xbc\x11!\x80HG\xe3`\x96\x99\x04+\xd0\xcf\xca\xc4y\x13_7N\xf7;N\xca\xfe\x0e6)\x0f\xff~\xb7\x8d2\xa8\xec\x94\x11l\x95\xfbl\xf7Cwv4\xfa\xdb\xf9=m\x16g\xf4\xe7\x893\xb08\xc3\xbfCk\xfb\xb5H\xcb\x0b\xfe\xf8\x8a.\xae\xa2 z\xe6\x17\xdb\xb8\xb6\xd8\"y\xf9\x90\xcd\"pq-M\x89\xa5\x14>\x82\xd54\x8b\xec~\x05\xc8m;lpg\x8fw:\xf7\xafej\xbes\xbe#\xdb\xb0\x88\xc8\xb6x\xb9\xe7\x86M\xcc\x86i\x92\xa9\xda\x10q\x08\x87\xecL\xd9\xfcb\xa2l\x8e\xcdE\x97A7\x01?\xa9\xea\xa6\x1b\xdc>\xa4 !(|\xa7B\xda\xff\x07\xf7\xe0[\x13\x84\x9ft\x931\xbb\xce\x12\xeae\xbat\xd9\x1e+s\x8e\xcf\xc2\xbd\x84~\xd9}2\xc0\xec\xe09z\xe8h\x9e\xc1\xb2\xcc\xa3\x19\xabn\xc0s\xcc*=\x9a9?\xb3\xcb\xcfA\x06\xae\xff\x80\x1c\xb9*\xde3\xc8\x7f\xcb\x7f/3W\xf2E\xe6\xac\xd22\xe3\xedi\x99\xfe\xbeL\xe6\x90\xda\xf8jm \x12\xe3`hN3\x8d\x82\x15\xb8\xf8\x02OM\xdcu\x8et\x823$\xe5\xcbI\xe4c|KQ:\xc8\x98\xf4\x14\xd6R\xc7k\x0d\xd3Z\x93\n\xf5g\xad\x05\x9cqa5d\x89\xa0?\xcd\xae\x9c\x15)\xa2\x86\xf2\x0d:S]\x81My\x02\xe6v\xde\\\x0d\xa6k{q\x00\xe6\xfd\x18\xf6\xca\xa0\x8a}\x01Q\x1b\xae\x82\xc8\xe7W\x80\x04\xa5\xa8\x8d\x04csf\xca\x97!i\x02\x14\x83\xdf\x0e\x06#[\xbe\x0e\xaac\x82\xb4\xa5\xa8\xa22\xb4\xc6[o\x9f\xd9\x82\xc6\xa13v^P.\xe2\xe5y\x03d+0a\x90h(\xe2\xe4 \x1aE\x0d\x113\xce)\xa2\\b$5\\D\x91\xbc\xd2.P`\x88\xce\xd1\x8d_qIJ\xee\x8e\x946s\xfc\xdct\xc1,%_\xbb\x93\xba\x0f\xe3\x1c\x97:J\xc7\xcf\x8f\xf6\x8cCE\xbb#~\x86b\xc7\xb0\xdb\xbd\x19h\x13 zY\xc6@5\xeb\xf5\xac\x07\xaa\xe3-\x99\xf7\xf9\x92_\xebHU:,\x1c\xb8\x84\xe7\x95\xd4\xc3R;d\x0c\xc5\x98oj\x8c\x8c!R\x9b\x05\x1d6\xa3)\x98\xaa|\x1b\x88\x95\xe8x\xa1$ nf\x11\xed$\x1a\xecX6\xb2A\x9a\x93\xb2\xff\x98\xcf\x1a\xf1\xc8\xb0\x9aR\xe8f\xb9f\x850\xa8m\x10\x10(\xba\x15\x80^k\x80F\xfeWX\xddx\xe3Tx\x7f\xd5\xbd\xf6o(\xd8\x9fd\xd8\xc16H\x15\x99P\xcfg\xa4\xccFX\xed\x9e*\x90*\xf4P!^\x91\xa7\xdb\xa5\xabJ\xc8!h\xe8[\xaaR\xfd\xc0++\xddc\xd6K\xeb\x9c\xe6\xd0\xb5\x9e6\xa6\xd9\xff\x06\xeb.\x1b\x9b#\xd9\\O\xac\xa7\x8b\x8dj\x9f\xcb1\xca\x8a-uh\xfc\x9e\x96\xdfm\x1d%sR\xcc:aN\xa1F\xf9kJl\xb7\xffU\x8f\x1f]s\xd1M\xcc\x92\xc6m'\xa6\x11\xde.\x9b\x95\xfb\x9d]3/\xcf\xd8{\xf5q7k\xb7mK\xc74\xa5\xb1\x1bv\x1aI\xae\x0b\x85\xf6\x88\xaeZ,\xe4Azh`Ce\xfbk\xe8k\xa2\x14\xbf\xf9\x14G\xa68Xr\xfb=\xd1\x10\xee0\x82\xe7\xc43\xc2\xf7=\x1f@j%\xa9\xdf\xd7\xe6P\xec\x1f9KnNA\xf7\x96'Ga\xe8\xca\x9b\xdb\x99\xe8\xf5\x81\xa0i\xff\xcf\xe9\xfbwc)i\x08\xe67Re\x01D\xd8\xdf\x9d\x83\xda\xcc\x81\xea\xfd\xf9w\x03\xe9\x02`\xe79\x89\xc9\x8b\"\xf4\xd9s\x12oow\x0d\x01Q#\xee\x83\xd6Y\xdc!\xb3$j\xdc\xfdR'\xc3\x1f\xcfy\xb2\x82\x19\x08\xe0g\x9f/\x12\xf5\xd5\xa5\x1ew=\xdeb\xec\xe1\xd2\xb5\x1e;\xcd\xf6,\x95c\xadg\xe0\xe4\xbb\\d\xcbn\xc9*.\xfa\xec\xce\xb5\xe7\xa0\x01\xa8\xf4\xf3u|\x19D>\x1a\x9eO<\x1e\x8f\xb2\x84Ko\xb2\x1e\xa6N\xd0\xaaM]\xa1<\xba\xf0\xc0\xda\xea@\xbfe\xf3Kd\xab\x10`sn\xca\xe3\xe9\xc1\x03\x12\xa0\xdaq\xf8\x06\x13\xdc\xb4\xa3\xaa\x85;\x1b\x88}\x8b\xcc\xbe&\x17\xad\xd5\xe0\xb8\xb1N\x9b4+\xaeZ\x84\xe1x|N\\)'\xe4pG\xa1M\xde\x00{\x0f\xf4\x0f\xc1\x8d\xeeX\xc4\xf2\xc5MD\x11\xd2\xad\xc4Y]\xb8\x1aD\xec4I\xe5]\xa1\xab\xbe6$\x93\x1d\x90\x18\xb5\xdc\xc9\xb8\\\xeai)\x8f1RcK\xb7VbH0\xa9,\xdb/\x91\x0c\xbe\x80e'\xca\xe2\x1a\x1c\xaf\x039\x8b!\xd6\xa3\x16\xf2*x\x03_W\xcfr\xd9\xd4JJ\xf1\xc9&\xa4[\x03E\x01\xb5f\xd9\x81y\xaec\x0d8.\xf3\xca\x8au\xe2\x01\xd9\xda\xaaC\xb6\x926u/\xe8\xdfl\x7f\xda\xb6Fs*\ne\xb1\xd6\x05\xa8\xf4\xab\xa4\xd7\xd66\xed\x1c\xe9\x05\xb6\xc5d\xa5KA\x08\x02\xbd\xb7~\x02\x9a\x06\x1a\x85\xdc\xa3\xed*I+\x1ee\xcbv=\xaa\xae\xaf]1f\xd3n#\x10a\xb5\xdc2C\xe3-\xea\xa0i\xf5\xd32\xaa\xaa\x82>\xdf\x8ej\x0c\xa2~\x9a\xc7\\\xc1\xb0[(3eb*\xdd\x11H \xa99?,\xbbdl\xa2zZ_(\xfc3u\x05\xcd\xe2\xcd\"M\x9dC\xea\xad\x04\x17f5\xce\xe9\xc9\xf1\xc7\x93\xb3\x8b\x97\xef/\xde\xbd?\xbb\xf8ptzzq\xf6\xe3\xeb\xd3\x8b\xf7\x1f/~}\xff\xe9\xe2\xe7\xd7o\xde\\\xfcpr\xf1\xea\xf5\xc7\x93\x97\xce\xed\xbfi\x08K\xeaR\x11\x15o\xb9\x1e\x0d+\xc0\x85\x1f\x94\xe0q\xa0\xf2\xf2^\x0f\x8e\xdf\"\xb3\x90V\xa4\xf6{\x90\xfa\x15\x9c\xe6\xe2\xc7Z\xad\xae\x88K\xc7\x86\x1d\xc8\xaf\x90[\x10\xe9\x9f\xacq\xd3&\xc5 \xe5)Z\xa6\x1f\x92\x8cl\x8b\x92SiN\x01\xd2\xc8\xad\x9d\xba\x9c}0$Y\xb9:*#\x1c\xe2\xee\xd9\xb8\xe9K\xc2\xd0\xa5\x96\x94\x8b2\xf6\xab\x17,d3\x92!\x01\xc4\x03\xea\xd5\xd7\x99[\xbf\xa8 V\xe4\x10\x0c[\xbc\x80\x98=\xb7X@\x08\x90\xc0PDo2\xca\xdbb\xf7OI\xea\x96\xfa\xef\x03\xf9\xd1\xad\xc9\xb0\x16\xe0\xb7]7\xa9\xe0\xc6\x0c{\xf4\xa4b\x8fn-J4\xf7 .\x0ef\xe1\xb9\xe4~\xfa0>rEv\xb36\x80\xda[\xa1,\x8a\x1b\xa5Y\x90l\x9dl\xda\xed\xe5\"r\xbd\x08\xa6$\xefX\x04\xdf\x96\xe8\xb1s\x1c\x06!\x19X\xe8\x9f\x8a\x037\xd7\x01xg\xa8K\xb6\xd2n\xb7\x14\x87&\x16\xf9e9\x9cm\"\xbf2l[\x8b\x14\x12\xa1\xeaJ\x99oU$\xa7\xbf\xaaN\xcc\xe2\xd5\x0ei\xe1\xbf\xc0\xe7\xa3\xb9\xf7\xec\x02\\\xf5-\xaft5\xcd+\xd7r\xa4\xcf!-U\xee\xeez`nt\xbb\xd0\xbcE\xa0\xf8A\x9aoz\x8b\x90\xf6\xbaE\x08;n\x11\xf4/\xfc\xb8\xdap\xb9j\x81E\xc9\xff\xd8\xad\x9e\x12\xd7y6q \x82\xfe\x1fmRp%\xaf\xbe\x1f\xe1w\xb9\x13\x1c\x159nC\xa1\xf7\xbf\x8b\x9c:\xe8\xbe\x1f\xb1\x9c\xf8\xa6fT+\xc5@\x1b\xe2p\xbb\x187$\x07\x9d\x0ed*\x96QnE\xd7V\xac\x85]\xb1\x16\xaa'n(\xc5 \xa1:F\xc9\x8b\x032\xd1\xf2\xb9=G\xf9~ g;\xe7\x03\xe9\xdc\x16\xe644\xb8r\xa9\xc8K5\xd7\x00\xc2\x9b\xe6\xfc4R\xfa\x1efUq\xbc\x94S\xfc_&w\x0f6\x95\xbb\xab-\x9eK\xc9hZ8m\xec\x10Rv\x8c\xfa\xbfD\xfcH7\x92\xfc%\xf5]\xd7E\x92v\x10\xe3\x92\x9e\xc2\x07Z\xda(F%%\xe2\x96\xfc5\xafH\x9d\x1ar\xab\xa8.\xb7B\xa4o\xcd\x15o\x17\x995+\xac\xc9\xc0\xda\xe6\xf1\xb6D\xdbf3#E\xc9Yi\xc1\x89P2\xea\x82\xdb\x8e\xee\xa1\xafY)\xc5\xd8\x90\xfd\xff\x96\x94\xc5\xee.f\xcf\xe4\n\xf8]\x19\xe4X\xda\xf2l\xaeg\xa3A\x9f*v\xc3\xa85\xfd\x90\xf0\xa1\x9dQ\x04Y\xbfv\x90\xd6\xd6\xec\x14\x1cGgC8;i\xdd`\x99\x0dE-\xc5\xe7\xa4\x06\xa9\xbd\x86\xf28B\x17V\xc7\xaa\xe0bU\xd0\x86\x05q\x04\x12T\xd8\x0fQ}M\xf0\"\x9a\xf6d\xdffg\xa5\x95\xbeg\xaer+h_DR\x1d\xca9;\xf9\xe5\xec\xe2\xf8\xfd\xbb\xb3\x93wg\x16G\xacD]1\xc3\xd0X\xa2 \x8bg\x0e\x07\xb8\xcf\xae\xbb\xbcR\xce\xd5M}\x17\\\xc6{UG\xe7\x19K\xca\xfaP\xb8\xaf\x03\xcc\x1d\xa4m14\xdd\xd8\xfe\x8f_\x07\xa7'g\x17o\x8f>\xfe\xf5\xd3\x87\xff\xb7\nH\xdeq\x1c\xdbVCf\xf8\x16\xbc\x1dIp\xdb/\xd7\xcf\xc9\xea\"\xb4\x8f\x1aG\x14\xb5\xcd\x87v\x9c\x809r6W\x89\x19Wz0\xa5\x92\xa0\xb0\x9f\xcf\xe2\x1c\x84\xab\x97V\xe7wp\x0c\x0d\x0b\x973\xed'\x1f(6\xb5\x83\xf8\xdd \xcbn\x90\xb5\xf5\xe6B?\xb0\xe1=\xa9*\xddZ\x15\x0cC}\xcb{\x9d\xe4\x00Qc\xb3\"\xeav3\x99y=\xe8\x02\xf1,\x04E8\xf3z\xa8oIU\xad\x059$\xee\x1c\xa4\xb9su\xe4\x97\xc1cVC\xb2\x1eB$\x9e\xc1@\x86\xe3yK\xb3\xe5xE\xaf\xdd\x95y\xc0\x0b\x80!Y\xd5\xce\xfc\x18|\xf1\xad\x80\xb1h/\xabB:\x95M\xb8(\x11\xe8\x91\x04s\x17CBg\xcbs\xdd\xa2L\xd9B-\xb7\xb7\x07C\x12\x0b\xf2b\xad\xf9|\xed\x81\xc7E\x9c\x7f\x98\x8f]\x7f\xab\x9c`>h\x1a\x03zR\xbaUk\xb2\x89\xf5]\x980\xc2g\xde\xf9\xa0\xcdm>\xf8?\xd2\xe8}^\xfa\x0fi\xd2\xb5\xcdK\x17\x82\xf6\x00\xc3\x7f\x91\x95\\o=\x087<\x05\x9b\xe7^f\xfah\xb5\x84\x9c\xec\xd3\x81bA\xf6vLF\n7\x05\xe6\x92|!\x80\xeb\x96y\x1d\xa8\x98\x94\xf4g\xfb\x9eU'\xef\xdb\xf7?\x9d\\\x9c\xfc\xf2\xfa\xf4\xec\xf5\xbb\xffl9|\x89y\x00w#?\xe3\x1c\xae\xf4\xa9\xbb\x94{\xcd\xae\x11\xaf\xac\xc7E\n\xb1L\xed}\xcd\xeb\xc7\x13\xd8\xc3\xef\xde\xbf<\xe9;\xab\xdd\xe3\x7f\xd7\xfd\xdbB\xa2\x93\xfeT5\xe9IY\x93\x8em\xdbkV\x9bg\xf8-$a\x85\xc5w\x95\xb4H\xd4\xa9b\xe0\x05Qe\xd4\xbbm\xe6Q\xd5s\xcd\xe9\x0b<\xf8\xb0\x19b\x8f\xe1w\xf0\xc4\xde\xfcH\xbaBl\xb6\xf4O\xf8\x9bEt\xedA\xea\xadD\xd7\xa5\x9b'\xd4\xd6W\xb9\x17\xa8\xfb\xe1 \x86\xa7\xae\xfa-8)\xa5\xdb\xbb\xbb{ \x97\xde\xdd\xdd\xad\x0b\xb4\x89\xa1x\xb6_\x1b\xb4\xdau91\x85\xccy\xc7\x81\xbfV\xb6\x1b\x86\x17&\xd60Z$\xe6} \xa8\x89H\xa1\xb7\xb4\xb3\xe7\x82^i*\x89U\xc7FV\xbfu\xa0*x\x0fN \x11\x15\x0f\x81=.N\xde\xfd4%N\x9cp?\x87^ \xe8\xe4\xe7\x93\x1f>\x1c\x1d\xff\xf5\xe2\xf5\xbb7\xaf\xdf\x9d\\\x9c\x9e\xfd\xfa\xe6\xe4tJ\xb6&\xd5F\xd4FJ\x8b\x0b\x9b\xdfE\xa4\xd8\x1b\x13M\xfa\x8e\x8a\x0dL\xb5\x80v\xb9j\xdd0\\?Z\xbc.>\x9d\xcb@\x01\x1b\x88\xf1\xda\xba@\xa1\xc2\x14\xa2U{\xe0k\xd7\xde#\xf0\xe9\xd1y#+\xf8\x9c\x0e\x9e/n\xf1\xbd\xa4\x1f\xd4\xba6\xee\xcd\xf3 \x06\x15\xd8%\xb8\xd8b\xb3\xf8\x1c\xb8\x0d\xbf~G\xda\x8f\x1d\\\x83\xf5n_k\x1e\xbd9@?(p\x97C\xb2\x1e\x0cH2\xae\x07Sq}`\xc3\xf2!\xf8b\xca\xa4\x1f\xa2\x96\xb1\xd3O\x0f\xbfJ\xfa\x91*JTV\x9dT\xa8W\x1f\xdc.\xd4\xbd\xa2\x8a6mM\xfa\xc4(#\x06w\xcd\xdd5l\xfa~\xa5TOW\xfd\xa0\xc57\x16\xd0\xfaZKW\xf5\xa5\xdb\xaf\xbeH\x8a\xcf;\x98Z\xd2\xca\xd8\xb6\xe7\x96k\x9c\x0d\xc8V\xc3\xc7[\x0cV&\x80\xf8\x90\x05.\xcd\xf5\xc1[[|.\x98\xf5\x8d\xa7\x0em\xd7]Y\xdc\x96\x13\xbdj(o\xf1vG\x88\xc5\xe3]\xd4\xb9\xa55r\xc4O\"\xf3A\xc6\x84\xa3\xb4\x8c~\x90Q\xa9\xa4\xd4\xd0\xb1I5\x94\x17|_\x07\xca\xb5\x8c8\xac\x1f?V\x13p+z\xa2\xf3*\xdc\xa2d\xd7PV\xa7\x96\x8bs\xa5dW\xf7\x89\x99*U\xbd\xba#\x80P\xb5\xa5\x9e\xeeU|h\xee=y\\'P\xe68\xe5\x13\xcb\xfa\x1a>9}Y\xdf\xbe\xa2w&\xf5\xea\x96\xaa;\xf5v\xacK%\xfbzO\x05Z\xaa9\xce\x14Xd\x17\xbb\xd2\x07\xc7T\x7f`\xb7\xf2\x97\xe8\xca/\x15H\xcb\xe5rS:\x7fU\xd1 M\xdf\x15\x18u\xc8\xc8\x01 \xc5\xbe\x96:\x89xX\xe8\xc6\x02\x85\xbb\x0b\xe9\x94Z\xaa\xf7(\x12^*\x97Wbf\xd5c\x0d(*B\xf5\xa9\xa2\xb5_]\x82\x17\xcd\xb1\xbbB\xe9$\x8fGi\x96\xe4^\xaf\xebALM\xcb\x88\xf3eq\xf7\xeb\x89\xad\x9c\x06\x19;\xbb\x89YA\xf4\xcb\xbc@i\xc6\xd4\x92\x8d\xd0\x8f\xcd\x8c\xca%l-_\x0e\xdb\x0f4\xf3\x96\xd2\xffZ-?f\x91\x1fD\x8b\xb2\xedH&h\xd6\x80\x03#<\xff\xa3\xf4\xb9\xa5\x15\xeb\xb6&\xb5\xfcW<\xf1\x98\xbc-\xa8dk\xc1\x9f\x18!d(\n\xb9\xa0\xc6|\xb5|\xb5>j\xa9\x80,\xdf'r\xb1\x16C\x9e)\xafOJi \xef\xc71\x0d\xc3K\xea}N\xeb\x1f\xa2ah4\xe3\xe7 \x0c?I\xa4\x0c\xddi\xac\x0c\xabZD[\xe46\xab%z\xbd\xb3\x1c\xed\xe9\xc5\xf66\xbaV\xb2\xd6\x85b'\xdd\xe9\xd0\xb8\xf3\xe9\xaf\x83G\x14\xe6U\xe3\xaa\x14}\n+\x11{!\xcf\xf61\x1ce\xe8g\x0eJ\x82\x0b\x96\xc9\xe5%\xbdl\xb5|\xc6o\xf5\xbeS\x7f\x14v\xd9r\xb7X\x89\n\xc1\xfa\xd8x\x1f\x07)\x04\xbe*f\xb7\xe5lv\xbd\x96\xb6-\xcb!\xd08\xa8B\x08I\xca\xd0F\x13\xfafD\x86%1LV\x97\x1ay\x1f\xf6\xf2eF6\xe8\xf8\x87\x9d\xe9\xb3tl\xb2\xeb\xb6N\x05\xd2\xb8!\x91\x1e\x06b\x1eD\x99-\xa0\x07\xee\xaa^?E\xd4Vl\xa5V\x9b\x83#f\xed\xda>o=\x0e\xc6 \x97\xa4\x91K\x07u\x1c\x86\xee=7o\xd9\xf9\xa0\x96]\xadC#\xa7\n\xdd\xf0\xc1(Y/`2\ne\xaa\xc2\xc2\x83\x016\xbeV\xba\xb2\xc9bo\xed\x808\xa2\xd2\xeb;\x0fu\xdbZ\x0dn\xb9\x1ao\xb5\xf8\x8aq\xd6\xe3f\xa7IZ4_\x83\x12\x83 \x8a\xb8@|.\x96\xe1v,\x87\xa0\xc7\n\x08\xf4\xa4\x07\xe5<\x0f\x86\x15\xc1~\xa1\xaan\xce4\x90\x0543&\xdc\xb5 \x03\xd7\xca\xe5\xbd'\x90\xb78\xecQ\xcf\x18\xa4\xa1flp0H0,b\x08\xe6\xcd\x81\x07a|\x95|\x02i8\xdc\"x\xe3\x93\xb7\x1f\xce~m\xbf>\xb2,hI\x85\xcc\x11\x15\xdeD/\x92*\x81\xbe\x0cB\xdf\xa0\xd2\xb1(\xde\xc8z\xec\x1f\xd2\x8a\x187\xb3\x15\xb1\x9f\xa5\x03\xbd>\xbfi\xf4+\xa2E\xf0\x96ov\\\x02d\x8dmc\x97\xdcII\xbf\x87q\x8c\x0f\x1e\x90\xad\xac\x8d\xa7\xecs\x87\xd0\xc1\x92\xee\x0c\xdb\xef4\xf4S\xb9\xb8, \xbam\xe2\xa0mw\x07\x1d\x01\x05\x08\xe8w\x07\xd1\x9a\x7ff\xff\x99\xd3\xc4g\xbe\xe6\xa9A\x05\x00\xadU\x9a\x93e-!E )\xac\xd6\xf1*\xda\x82a\xd9\xb6\x08\xe8i51\xbf\x05\x1c\xd3W\xba\xa5\xd8\xa2&\xe1\xf9\xf6\x14r%\xdb&\xe3h\x95\x03\xe1\x92\x16\\\xb8e\x93\xb4\x84:p\x99\x8dE\xec\xb3\xe5/V4\xfd\xac\x10U\x9f\xed\xben3\xa7\x04\x1eVuM\xcc\xa3%\xec\x07\xf8\xdb-C \xc4v\xfc\x8e\xf9\xc1\xd6O5~N6 \xd1,9o\x0d`c\xf5\x14\x87\x8dKU\xd2\xb2\xf9\xd0\x18\xe3j=\xf2\xf4\x99\xb3Q\x83\x8c\x93\xa5w\xabL=\xfb\x8d\xa4AM\xca\xc6>\xa5\x81t3[6\x8f\xe8\xe8\x0c\x8d\x1c\x19\xa8\xa1\x0d\xa1VC\xf0 \\\xb5\xf2rpl\xac\xb6\x82\xa5~\xba9K=\x90\x1f\xc2j\xd5B\x8f\xfd\xcdj\x15g\xbe\x1d\x89\x96.w\xbf\x02\xdf\xdb{\x0f\x13\x83\x1d\xeb\xb5n\x80`7;\xd4_\xab\x0f\xf3\x81\xd1H\xaa_X\xf7\xaf~]Q\xbd\xef{\xe5\xceM\xa1\x9e\xe8T\x1b9\xd9\x86\x84\x95\xdeCyP\x011\xc7@I\xaa\x9f\xaa\xa4b\x1f\xe4\xd9\xf0z\xfe\x8e\x89\x0dJ\x93\x9b>\xfb\xb2P\x8e\xc1\xdayH\xe6ME\x80\xcc\xb0\x14\xab\xc2\x0f\xcb\xfb\x11M\xc7\x97\xce\xa8\x0f\xac\xa7\xe1\x97/\xf6\x83\xee\x10\x1f\xa3\xf2;\xd5\xd9jO\xad\\;\x99M\x94 \xb6\x1b\x95>SPk z\x0f\xd0a\xfdI{\xe2\xb8\xc8\xf4\x97 0\xc2\xde\xa6\xa2\xbb\x16\x16i\x08\xbc\xcc\xd6\xa4m1\x17D\xc3\x81\x0c\xd2\x9b\x83\x11\xb8N\x9dJ\xd7[jF\xab\xf7\x04\xc1@\xd5o\xd3\xbeX+\xc7&\x9dW\x11\x10\xe2\xd8\xe6\x1d\x88\xc0\xd5#X\xe5\x03\xeeW\x9f\x1cJ\x17\x98\xb4Ji~\x94\xeb\x1b\xbc\xa6td\xbb\x9e=\xa6\xd9Z\x07\xfe7\xfb]\xe1r\xa1\xb0\xbdGq\x8bw(\xeb\xf6\x80\xf8h\xe3t\xc9\xf3\xb0$K\x8b\xad\x13\xc3\xc4\xa0\xb9\xa25\xf3\xa1\x8c\x82\xacg\xb5\"\n?8 \xd2\x8c\x03\xda\xe5\xbb\xe1\x90x\xb0\xac\xb6|\xf1E\xd1\xa3!\x99\x03\x9f\xde\xbe{\x86$&\x87\x9a7\xeb$e\x01\x91\xd5\xdb\x1aI\x9d\x19\xb8(ab\x17\x81\x95 \xb6\xd5\xc57\x9b\xb4m0$\xb4\x10\xea{\xe2E\xcb$\xe6Cc\xe5\x1e`\xa6=-$\x909\xbb=\xd5O*|Y\x0f)My,5\xd0f\x1fb \xe1,\xect\x93\xb5\x08\xc6m \xcc\xccVii\x11\xb5]dHGo\x0f\x1e\x90\x89r\xa4+\x1d\xc6\x14\x85\x93\xd9\x8e\x85p6\x88\xb1\x03E\xb2\x08\xfc#\n\x88sF~T\xb9\x84\x13\x19\x132%;\xcfI^\xf1\xee\x96\xb7\xfb\xc5^\x1bf\xd9v\xb2\x89\xbbtH\x1c=\xe5\xa6'\xc2\x94\x1c\x92T\xea\xd8H\x8dE\xb9\x1c\xa6$\xbd\x05e\x85\xf8\xbf\xc1\x96#\xbakn\xa1y\xad\xaf\x87\x87\xda\x13A\xdfe*\xb0\xf1\x0f2d\x9b\x1bV\xee?d[,8\xd3#\xda\xe3O\xa8%\x809\xbc(\xf4\x02\xbe:\n\x91\xe0\x90\x845\x19\x81D \xe07\x0b\xc9(\xee\x03p\xaa\xc0\xd4\xe6\xa8\xa0\x8a\xb0@\x15\xd9P\xb7E\xe2\x95\xd0@\x15I\x15\xef}\xac\xcb\x06\\\x18\xe8\xa1\xec#o\xbf2\xc2\x86L\nO\xc2B\xe9Ut\xbf\x1fv\xb24\xe8V\x18\xaa).iEU\xd1m\xc8g\xbb,\xb7\x1d\xc5\xd9\xa4\xd7s\xe2.]\x10\x95\x0f0\xf2URb\xacMP\x9a\xd9\xa4\xc8\x1d\xca\xac\x1a5U%\xa16{Y\xf1 r\xaah\x88\xbb@\xd7OS\x92\x8d\xb9\xdb\xd6Ou\x1a\xbb\xa5\xd9d\x03\x896\xef'\xd1&-\xb2\xba\xd6\x90\xac\x9a\x18\xc4\xc4\xdd\xc5\xfc\x95:1fJ\xcd{E\xdbT\x8bm\xda\xddp8\x0d\xc5\xf0\xfd\x1cdK\xe9]@\x1c\x01!\xca\xa2\x91\xdeR/\xb4\xe2\xfe\x9c+\x1d\xe3-c\x1b\xd8\xd9Y\xf7\x9fy\xb9\xfb>i\x8az\xda0\x08\xeb\xc9\xcb\x14\xc62\xb2\x11\xee\xddZ\xdc\xb7q]4P\x95\x14\x16+|\xd1F2\xe4c\x85\xf4T\xa7[VS\xeb\x95\xafx\xba\xaf\xb8\xd0iA\x06N?_\xc9<\x88h\x18v}\xd9\xec\x05\xca\xf5\xea\xa7\xd5\xf9\xec\xad\xdb\xdf.*\xd5\xdaA\xcc\xd0\x0eb\xa8v\x10+\xb5\x83\x9em\xc8\x16\x0f\xfbI\xb2h\x96Qo\xf9\x91\xcdos\xa2.X\xf6!\xbf\x0c\x03\xafp\x94f\xe9\xb9\xe6\xf2#\xcd\xe5Ov\xda\x18w\x194\xa7w\xedn\xa4\x14\x99\x0e\x0e\x80=\xd3\xaf\xe4\x8f\xaf@I\x8b\xb7\x81\x0c\x04\xd7\xcbv\xc7g\xc8\x98\xd8\x06D\x05\xd5\xb3\x8d\x07||\xc6\xce\xfb|W\xcdl\xdf\x8d\x7f;\xe1s\xf3~\x10\xcc!*)\xe3B9\x86[\xdcQ\x15\xa8\xae\xa6\xae\xa6l+j\xa9\xacPbS\xf9\xfa\xb5\xaf@\xaa1\xb0\x1b\x8fQ/\xcc\x8d!L\xedc\x02\x96\xf0\xb4\xdf\xa6\xb2\x93\x19\x88\xcd\xaa\xc56R*X\xdd\xc9\x96a\x82\xd7l\x1d9\xcd\xb2no\x17\xc9_\xef\xde\n\x94\xb1<\xbdY]rp\xc7*\x7f\x8d\x057\\ys\x9dD\x8c\xdc\x98\xc9U\xed\x00\xba{\xb23\xd9\xd9\xc3{\x95\xfc\xb3Z*\xa3s\xf2\xa4:\xed\xe0W\xf3\x7f\xffo\x9dy\xeb8\xcc*\x04\x0c\xa8\xe6\xcd\x92s\xd8=3~^\xc3|\xe0\xb3\x1dkmy\x01X\x0f\x0cp\xab\x91i\xb1\xb2\x95V\xb2\xcf\x1b\x9d\x90F4\x9b\x19\xc7\xf2\x0e%;0_\x12CR\\Y\x19\xc1\x12\xda\xf6?\x18/\xb53^\x86^\x0e\xb7\x9a9\xed\x0c\xa5\xa9md\x1a\xdf\xba\\\xda\xddvG\xb8\xaa\x0e\xd2\xbf\xca\x04\xd7\x16\xdc\xd5r\xda\xe3\x96\xb4\x08\x02m\xbbS\xd6(\xc5\xd57@-\x8e\xd3\xbf\x891\x17\x1eb\xe4I\xdd3\xba\x0e1\xf2\x14\xb1\xe6*\xcd\xad\xf6'\x0d\x07\xa79x\xa4\xaa~\xbai\xd9\xacd#\xd5S\xabb\x1e_\xfc.6E\xd8D\x12p>%L9\x8f\x0d~g\x10\xef\x97\xaa\x1a\x87:_\x90\xaag\xfc4\xa3Y\xe0I\x1e\xca\x10\x0f\xe5);6\xa3\x19\x9b\xf2\xd0\xbc\xb4NP\xea\xe5\xb4\xd5k{\xd3\xdd\xa9\xe0\xe2\xcb6)\xe5\x8a\xb4\xe3\xb4V\x8b\xa4\xea!\xa8v\xac6EN\xfd*M;*5\x0c2\xfaUX\x1f\xa8\xb6\xfa}\xa6\xa9\xa8\xda\xccW\xc1J\xed\xcfV0\xad\xe6\xd9\xb2\x8a\nP7,\x0d \xc03\xaa7\x18\x12>\xa6\xbe\xff\x81\xf30\x88\x16g\xdc\x0dk\x18\xe1^\x1c \xef\xee>2\x10\xbfD\xfa&\x14o#@\x8a\xb5\xcf\x9a\xe7\x0d\xa9\xc5\xb8o\xe1Q@\x15\xc6eD\xd3|p.\x0eH\xb6L\xf8\x15\xacjA\xd8I\xfd_\xe7\x98F\x11\xcf\x88\xc0<\x84\x12/\xa4iJhJh\xf1%\x07\xc1\xee\xea\xd6\xb8\xd0\xb5\xca\xca%/\xce\x83\xea\x92\xa8\xce\xa1\xa6\x9bM\xf3\x14X\xd3\xac\xdb\xe6G\x9b\xbb\xd4\x10\xfb\xb0R\x9dB5Z\x81\xaa\x8e\xe9-\xf2\x97z7\xc6A\xfa:\xaa`\x17\xe0\xdc\xea\xb5\xe3\xb2\x19\xbcE\xd5k\xb2\xf6\x9en\xd8\x1c\xa3\xea\xba\xc3w\xbc-\xb5\x0b\xa1\xceU\xb5a{\xcc\xea\xdd\xa6\x1e\n\xde\xa6S\x96}\xab\xf6\xe8\xaa-m)1\x88\xc9a\x9b\xa8\x81\xdf\x07j\xb0\x9c\xc5\xfb\xb6\xb3\x189\x8a{\xac\x1a\xe4\x0e\xb5f\x87\xfa\x8e\xfbu\xa5\xc5[\xdb\xad\xfa|%\xf5\n\xab\x83jbbjb\xe2j\xa3\xbb\xcd-\xad\xbeb\xa8\xbc\xa0\x08\xfcc@\x1e\xc9\xf6v\x93\xf8\xaa6\x91\xa2\x9d\xdd\xd4\xf0R\x0b\xec\x1d\x02\xec\xd9\x88\xad\xe2\xecfJ B\xa5\xf1\xb9m\xe2\x10D\x0bW\xfa!\xa8\x93 m\x14|*\xfb\xc9\xaf\"\x96\xbc\xe4^\x0e\x12\x0e\xe55\x89\xaf@HfSb\xd06\x0b\xe38a\x1e\xf5\x96\xacP\xe5\x967P\xdcEn1\x9b\xf2\xc0\x9aT\xb7FX\x1d\xca0^\xceo\xd7{\xde\xd6h$\xc6!\x17\xbd\x1f\x8d~\xbb\xdecNm\xaf\xd5\xce\x02\xab\x8eW\xf3\xf0\xef\xaf\xc4^t\xdb\x1a\x04\xba\xadQ-\xda\xea(\x930\xce\xa3\xea\xd8\xd6j/qK\x8d\xda\xa0\xf7\x82R&\x15b\x03\x0f\x1b\xc0Q4\xea\x14\xb8\xc0\x01\xe7\x19J\xd0\xba\x07\xd1]j\x99\x99\x91Y]k\x86\x07\x0eP.\x06\x86\xf39\xe1\xcfI3\x80\x1d\x89\xea\x9b\xb4\x12\xb5{G\x1a\x03e\xcf }\x0e\xbfh\xb5t\x80\x96~N\"2\"\x01\xf9\x9e\xec<\x1f\x80\xbc\x8bU\xaf\x91\xa2\xd1\x08-\x16\x90\x11\x89T1@\x04\xd5b\x01ZL\xef\xfe\xe89\xc9G\xa3\xe7v^\x1dB\x02\xb71\x8dHK\x1b\xad\xb0\xac$R\x15\xa5\xff\xa9 a\xae\xb3j\x0b\x83\xf4(\xf2XZ\xa5\xc8m\xa7\xacm\x89$\xc9lr\xbe\x89\x96W\xdb\xdc\xf5gIk\xea\n\x06\xea\xb5\x88\x08\xda8\x07i\xe8\x88\xec\x0e\xbcS\x05\xd1\x01*\xf1v\xa6x\x1c\xb1\xeb\xec4\xb8\x0c\x83h\xf1\xdcJ\xa7\x93\xda\xc5X\xa6\x14Z\x9e\x14\xd6q\x12\xe9\x0e\x86d_2A\xe3H\xab)>x@j\xf8\xcc\x80\x90\x11\x0d[\xbeJ\xcaE\\\xc7 \x16c-\xfd\xb4G\xe0\xb6;\xd3\x94\x04\x981,=\x17\x8d\x9e:A\xe1U\x0fx\x1c\xab\x9d[\xcedVWa\xba\x9b\xa8\xe2vD\x81\xc0\xd0\xb7\x15q\xdc\xcb\x85\x8aEj\xfa\x08'\x07\xf1\x1bL\x19h\xb1:x\x16\xef\xcb\xfafqJh\xf3\xb0\x15\x83\xd7\xb5\xd7 (\x02\x07)\xd8\xce\x04\xd1B\x85M\xb4\xb8\xa0k\x9b_Qfv\xdb6\xf2\xf1<\xcc\xd3%\xb4\x82)-\xf4T\xaa\xa1\xf3\x86\x04Gv%+\xbb!e0\xc9`\x08\x85A\x17m\xee\xd6<\x91}%W\xcb d\xc4\xadKT\x8cX\x82 \x97\xe1\xe4E\xa5n-b\xe1 \xa1\x81\xc5Qd\xce\xf8\xf9\x90,\xc7\xcaC\xd7\x99\x9a\x03\x97U\xa6C:\xb53\x87j\xd8\x18;\x1c\x17\xc7v.\xde\xa6\xa9\xd1\x18&lu\x18$Du\x81\x18\x19\xf5\x01h\xde\x19\x96M\x06n\xb1\xa2\xaa!\xf8\xc5qv\xc5\x8f\x92\x05\xf0\xb5\"\xa7\xe2dx\xad\x1c\xefW\x1b|\xc1\"z\x192\x7f*0d5\xa7:\xc4X\xdc\x95\x9f_\xbf{\xf9\xfe\xe7\x8b\x1f\x8f\xde\xbd|s2%\xc1\xd8\xa3\xd1\xa7\x94\xbd|\xff\x96\x1c\x92\xab \xf2\xf9\x15\xc1\xca\xa5,\xfb\xb1Vy\xbb\xe4\xa81\xe1bQT\xc7\xa6\xf1\x85\x13\xdd\xb1\xce\xaa\xd5\x10\x88Sb\xab\xb5\xd6 mV\xdar\xfc\x96U\xb7U\x9a%4\xfeAJ\x1faQ\xf4\x13V\xeb\xdb\x0drH\xf8X\x06\xf0W\xb1\x89\x96\xa0Z-\x0e@\xa8N\x124r\x99\xb1\x81\x16\xd7v5\xe8X\x892o\xdb\"%\n\xbd\xaf&\xadx\x14d<9\xf5\x12\x1e\xca\x88\xe8]\xd3\xaaQf;\x94x\x98\xeb\xb9r\xad\"\x8e\x9b\xbeV\xdb\xda$<\x8a\xc1\x97U\x0c\x89\x93B#\x1dD\x8d\xa2\x8aN\xcc\x11\xe9)\xd3(\x17T\x1b\xd1$0f\x0c\x86\x06\x02\x05\xb4\xc6\xeei\xb7\xcfI\xc7U\"\xce\xf5\xedr\x81\x1eF7\xf18a!\xa3)so+\\(\xde,$\xd7\x12RoEr\xf5S\xc1.\xc4`?K\xe4\x067\x1d\x86\x0eY\x91q\x88\x8c\x03\xc4\xc5\x8a\xe9\x82\xfd\xf2~>O\x99\x0c\xd82\xf6\xb5\xc6\x82\xfe\xa1m4\xe4:z\xc3\xe6\x88\x00\xf5FW\xf5\xeb\x06U\x9d\xf1\xaaX\xf0+\xc1\x82\xceC+;\xbfm\xa9\xf1O\xd5_\xb7\x9a\x89\x92\xf8\xdd\xaf3\xaa\xea\x9acb!~\x1b\xd7\"\xed\x81\x16\xf6\x9e\xe0\x91\x16&\x8f\xeb\xf5\x84\n\xbe\xde\x1e\x0f\xa7\x97q\xbe\xc9\x10B\xd0q\x10\xfd7\x83qi\x8e\xef\xcb\xf7ou\xfc\x8d)I\xda OVqvcT\x9b\xb7\x02\x0b<\xf3!\xcc\x17A\xf4c~)\xb8\xdf~\xc0\x9f\xb2 L\xc5\xd9\xde\x05~\xb2\n\xb2\x8c%S\xf0\x9bg\x05\xfd\x11t\x88\x8a&\x87m\xb0\x05\xef\xe8\x95P\xd5\xf5\xf6/\xe0\xbc\x1e\xd7\x99\xa6\x00g\xb1\xa8e-\xa9\xb5\xf7\xb4\x9e\x9eV\xd4\xc8'\x8f\x9e\xd6\xd5\xc8\x15\x17\xb6[\xff\xbe\xd7-\x03\x01\x8e\xe0\x94\x85r\x08_G\x82\xd9\xa5\xf8\x98+\xd9H>N\x80\x16eE\xa9\xea\xc0c\xf1\xb9\xcd/v\xca\x7f\xb4\xbc\x97\x8e\x0b\xa2\xaa\xc3&\x92\x8eK\xa2\xce\x85X\xe3\xbd\x0c\xad\xea\x02)+\x1dP\xa9\x1f \x94S\x17D\xddu\x04\x94\xa4\xa8\xa2\xb0.F\x9da\xc6\xad=:\xb6\xd1w\"\x9e\x05\xf3\x9b\xa30\xc4\xbeU\xed(*\xf8B\x98\xfbv\xc9W\xbb\xe5Aa^Pk'\xa8Q\x94\x94Ldx\x99D\x8c\x14\x0c-\xd5\xca\x86\x8e\xef\xd5\x06\xc1\xab\xad\x83z\xc5\xb7\xb2A\xc0:\xdf\xf1\x9d\x8d\xcd\x12Z)l\x9b\x81\xc1&\x0d\xae\xf8\xa8n\xfb\x18b\xa6`W\x18hl\x11\xed\xca\xba\xa1\xc6]y\xed\xcd\xae\xf3\x82,\xc5>7\xb0.\xcc&\xcfR.\xbf\x12\x91%\xee\xdc\x14)\xa4C\x12\x0f\x86$\xa8\xf2\xee\xf3\xba\xe1\x15\x14\xbf\xe3\x01\xd6\x90\x05*]\xea\xddz\xdc\xa7@\x1dl{\xa8\x18\x8f\xb6h)\x94\xd78\xdap[*\xa8%\x96\x8d\x98KO\xe6\x85\x90\xe0\xc1\x03\xe2\xa4\xfa\x80\x01\x85/M\xb9\x8a\xac-\xd71\x8f-\xc8W\x8cZ\xf3\xe8l\xce\xeb\x82e\x928N\xa7$'\x87=N\x00\xcd3\x16tt\xd16u}\xff\x91F\x8b\xd6\xa0,`\xdb1\xce\xd8u\xa6d8vP\xb8\xb3\x1d\xfby\x1c\x06\x1e\xcd\xac\xd7\xb5 \x84\xaa?\xe3\n\xcb\x9dI\xb7\xa6C\x92\xc8\xd3\xca\xff\x00\xbb\xcd9\x89|@\xaaI\xe6\xd8\xb9=-rK\xcc\x16\xb6\x9e\xb9-\xbc\xa1\xf8VC\xed\xcf|X\xe4OA\x03\xa5\xe9\xf7\x95\xe0\xcc\x1e\xe9\xc2\x07\xc4\x98$\xb9\x12*\x84\x8dX4H\xb2mh\xe5-\xb1`\x9dv\xd4-k\"\xe6\x174mz\x86\x05\x95\xf3M#o\xc9!\xdep\xd7tKH\xb9,\xed\xb0\xd2\xb7\xc1\x9c{y\xda^iP\x02v\xd5\x99k\x7f \xb0\x86\x8f2\xd7\xe6\x91\xb0]$\x90\x8fa\xe2\x0b+\x80\xe2\xeazH\xf21\x8b\xfcf\x06>\xf9:XC\x9f\xd8=\xa8\x07\x00\x82.!b\x98\x04P\xb723\xf5\xd1\xaf\x8cpu\x14\x07\xe4\x90\xec\x10A\x04g\xfc\x14\xd40\xdcA\xe7~\x0eA\xf2\xee\x85<\xd2h\x02\x1f\xdfPa\x15\xf1]p\x06\x12e)\xec\xe8P\xedh\xb7>\xc6C=\xea\xaau\xf6\xe5\xe8)\x0d\xa7z\xf9\xd0,/^\xcd\x99R\xef\xd5\xae\x87\x9bt]\xf0\xbb\x1e\xd9&-\xee+c\x13\xadV\x90)\xde\x9bX\x0c\x06\xe03W\xb94\x8b\xf5\xf0p\xbb\x03#\xad\xd2\x14\x8f=\x1e\x864N\x99%`k_\xf4\xe6\x8bs\x83L\x89\xd7\x81\xe6\x04\x9c'\xd0W\xcfu\x8a\x90\xf3\xa9\xf5\xb8\xear\xb52\xd4\n\xcb]\xe7V\xf7icX\xbagbQ\x90CIL\x00\xf2\x801!\xd3\xe2\xd7\xf7\x05\x8c+\x01X\xe4\x0f\x15\xa2\x03\x08\xf0Zi\x94\xd5\x99,\xf2\xc1\xd4\x14?\xd9d\xba\x9c{\xc7[\xd2\x84z\x19K\x1ci\x19\xce[\x8e=^\x14\x16\xcb\xa4R4!\xa3\xa2\xb8\x18\x1a\x8c\xeb!=\x84\xb0D\x1d\x1b\xc8)\xd3\x86\xc8\xf4Q\x81\x1eN\xf6\xa5E\xd4\xb9\xc1f\x81;8\xef\xdc\x86DI\x1d\xde\xd2l9^\x05\x91[\x0e{\xc7G\xf2\xaa\x93\x03=\xad\x94L\xcd\xca\xe4\xf4\xb6\xa9\x95\x89\x035\x1a\xb3\xebL\x94\x7f\xf0\x80P\xf2=i\x0d\xc7C\x0c|\xdd\xe2\xa0\x8d\xa86Ri\xff\x92Z\x01\xed\x9aJZ9\x15\xb4\xd6i\xc7xx\x1a\xd0f7FTo\xc1\xe9\x87\xd7\xa7\x87\xf3\x0d\x11\xa0~\xe6%\"\x0c\xe1L\x15\xe8\x9aK\\=\x04\xc7Eb\xc1\x1f\x85!\xd4\x96\xba\x10/\xe8{\xc0 n$\xb8\x0c\xf9\x959\x00\xcb\x99q=U\x91\xa7+\x82\x8d:\xd7\x08\xb6\x91-\x8a\x1a5\xe1\xc2{b\x1d\xfeN\xb1>.\xc5\x93\xb3\xbc\x11\x13T$\x17\xdcKbWB\x00\xe1\xfdx\x1e$\xa9t\x91_(\"\x18I\x95\x82\x9a\xdb)\x12\xb1\xdb{n\xff\xa0\xdd\x16\xca\xd4\xa0+\xf5\x1a+\xea\x86\x8d\x82\xb2\xad\xa5\xeaCuH\xff\xd4\xfc\xd5\xdb\xb3G\xc5`-\x01\x9cl\x18\x9f\xed<'\x91\xb5'{\x92\x13,\x88\xbf6\x1cJ\xc1i\xed6\x89\x80\x1bQ\xa4\x90Fr$ /\x94\xea$%\xdf\x9b\x86b\xf6\xad\x16\x81\x96)\"\xd3\xd4\x8f\\\xceS\x92\x91\x11\x12\xa6\x8a\x90FHi\xfd\x04\x851b\x05\xb8\x91\"\x07\x8c\xbb\xd1\xe0\x9b\x9a\x7f\xec\xef\xedX\x8c\xb0\x8be(\xd5\x9c,\xfc\xfa\x96b{\xb6\"\xb0\x01WVe\x11$%n&\x13\x137\x1a\x14\xfaR\xc6:\x13\xb8\xc2\xf1$\xf1\x98*\xbb\xb6C\x88f#\x93D\xb1)\xd9\xda\x92\xf1mhR(\xda\x7f\xe0i\xa0\xb9\xb4\xad-w\xf2\x84< V 1\x84\x0d\x15\x8d;\x0f\xdb\xa4c\xd8\xac\x17~\x80F\x1e< {\xe0\xe9\xa6\xc9\xdb\xdc\xa1}\xfd\xda\xa1\xb9^\x97\x899\x19W\xec+\xe0\xf2\x8fL\x8b\xe3e0\xf6\xd9\x9c\xe6a\xf6S\xc0\xaeD\xa6$;Pd\xb6\xe5nI\x17\x83\x16_Qc0\xba9\xac\xder\xaa\xd4)\xeak \x84:\x118D\xaf\xa4W\x95\x9c\xa5v{\x13\xe0\x1d]\xb1\xfb\x9dwg\x99e\xf1\xf4\xe1\xc3\xab\xab\xab\xf1\xd5\xde\x98'\x8b\x87\x93g\xcf\x9e=\xbc\x0e\x83\xe8\xb3\xd3\x94\x90!\xf0\xbf\xbc}#\xca\xec?\x8c\xe8\x8a\xa51\xf5\x98\xd3\x94\xa05\xf1\x12\xf5<\x16e?\xb2`\xb1\xcc\xa6\xc4\x91\xaf\xa3%\xbc#>\x9a\xa8\xe7\xe5\xab<\x04O\xd6;H\xb6\xef\x07Y\xb0\xb6d\x86\xc1\"\x12s\xff\x03MY\x18DL|O\xa7\x8d.U\"\xf6\xd10\xe4W\x1f\x19O|\x96@\x99\xf2\x15\x85\x8e\x97\xf4\x92e\x81\x87\xb7b\x15\x87A\x96\xfb\x966&\xf42\xf0^\xf1d%>\x04/\xa39OV\xd8wR\x0fn\x07\xb1Z\xb2, .\xf3\x8cI7\x88N\xe5\x1d\xabJ\xe7\x8b\xa5g\xc2\x8bw\x0c>\xcf\xf8G\x06\xc6\x92\x02\xba|\xc3`\x7f\x0fVy\xb6D\xdb)\xc6\xfcU\xc2\xfe\x91\xb3\xc8\xbb\x99\x12\xa7\xf2\x8e\xd4%\xf2?$|\x1e\x84LA\xab7\x0b\xac\x98\xcf\xd3e0\xcf\x14\xb4x\x1f\xa5\"\x01+p\xc9\xaf\xf1V\xb2E\x10\xe19\x01M\xf1\x8c\x1b4\xd9\xa3\xa1\xf7\x16\x0e`G\xffD\x1a\xe2\xd1\xb8\xd8\x0f\x1e\x8d\xed\x9b\xc1\x0b\x83\x18\xffN\x18\xc4\x1f\xa8\x18tG\xfc\x1c\xc54[Z\xca\x7f\xcca,\x01,\xc9\xd1\x91\xd4\xb5}\x8a\x02\xc1w;\x95w\x0c\x9e\x87\xb3#\x1b?\x98\xcf\xf3\x94\x1ds\xe9\xabsJ\x9cZ\n\xd2\x1b?H$go\xa9\x11\xbc\x9eZ\xf2\xd6\x81m |\xbe\n\"Z\xc1\xef:\xa9\x0d\xbd\xfb\xb9\xa5:|\\}\xbca\xcc_0\xb5\xb7\xf5O\xe4[,dkj\xed\xb8\xd4[\xfb\x81z\x9f\x17 \xcf#_\xd4\x05I\xa3\xcb\"\x0d\xab4\xc2'U\xd0L\x91m\xda\x04\x9b\x9bD4\xfc\xc8R\x9e'\x1eK?\xb2\x7f\xe4A\xc2\xe0\xa3\xb6<\xe4\xe3\xf3 \x0c\xd1\x0f\x88\x8c\xf71\xf5\x02\xf0k#\xdeF\\\xbeZjQ\xa8\x08 -\xa8H\xeew\xdb\xe72\x96|d\xa9\xacB\xfe\xb6V\xa1q\x99\xf1\x86\xc1\x86\x9c\xfb\xc7\x02\x13\x08P\xf12\x02\xbc`\x035\xba\x0b\xc0-\xfd\xe5^\x9e\x8a\x99\xc5\xfb\xc2\xa3\xec\x15]\x05!T\xc5\xa3l4\x877\xb4\xa2(;\x05]\n \x98\x06\xbf\xa3\x03\xa7\xc0\x8e\xfc\xff\xce\xd3\xcc\x04\x1eQH\xb2\x95\xc9\x12\x96y\xcb\xa2\x80|\xb5\x02\xdf\x84eC\xc4\x8b\x05\xf0'\x9a\x04\x12U\x00\xe8Z\xbeZ\x80\x7f\xd6g!\xc0^\xd9\x0eC\xa9\xae\x83\x0fg\xc2Wx\x06\xbe\xc3\xe7\xf8\x0e_L\xf0\xe4]<9\xbc\x89\x97\x8a\xfe\x82\xdf\xa3\x08'\xbe \xf3}\x12\xb0(\x03\xcc\xf0#O\x82\xdf\x05\x9f\x18\x16%y\x99;Z\x16\xd9=\xea\xfa\x89%Y\xe0YjZ\xabL[=\xe0\xb8\xdb\xd1?1\xa8\x84\xfa\xa2:\xd0\x12\x99K\x9a\xb5\x91\xd6RNo\xc2\xca;\x02\xbf\xa4\xd1\x02Ned\x98a8\x8e\xfc\xf5/S\xe2\xc0\xef\x11\xf5\xd7\xa3k\xac\x16\x91\xfb> \x16AT\x02sxG\xe1\x03\x9f\xf1EB\xe3\xa5\x85\x90\x0fVt\xc1L\x92\x01\x12ZI\x86 \"xU\x11\xbe\x86\x80\xd8\xf1X\x8c/\xeb\xcfx*\xbeJ?\xe3_\xf8\xbc\x87'?\xc2\x93Y\x12\xb1\xf0-\xcd\x92\xe0zJ\x1c\xf3\x15\xe9\xad\xcc\x16\x93\xfa\x06\xe4UE\x892\xc9R\xca6\xd9\x9f\xd9\x0d\xdci\xa4P\x95\xfa\x8d\xd6qs\x1a\x8b\xd3^\x01\xaa\x17\x1c\xf2,Xi8\xf8\x89@Iy[\x81;\xcdW\x14:\xcbXr*p?\xac\x0b\xf9>Je\x02V@\xa040\xa6\x95'\x8d~\xb7\x1e6`\x8f\x0e\x05\"v\x14-\x00\xe96\xd2\xb0r\x1cp\x012\xb2+\x9a|f\xc9 \x90\x1c\xf2\xf7\x88\xa1\xb4\x86\xcc|\x1b\x18\x80\xab\xc0\x0ex*\xaf\x085h*o\xa1,\xc0\x05\xd7c\xbeZ\xa15\xf60\xde\xac\xb0?\x07>\xac?\xe3\x0d\x85M\xf1=U\x84\xcb-qV=\xc9R\x9d n\x87\xcb\x96lE\x15\xa2\xc6>\xcf-\xd2\x82(_\xbd\xf72\xba\x86\xf5[\xbe \xdf\xd0R]\xa4\x12\xae\x89\x164O\xbaa\xc73\xa5<\x04\xcd ld\xa7q\x00\xd9\xf2m\xdc6_\xb3d\x1e\xf2+k\xa6\xd8\xe4Z6:%\x8eN\x1a\xc5*\x0d\x1b\x17\x05s\xb6\x0c\xbc\xcf\x11KS\xb3\\\xa6\x13\x91\x821\x0d\xa2\xec\xbd\x92\x08\xc1\xcb\xc8&\x10\x8ai\xc4S6\x018\xf1k4A\x81\xb2e\x81&\xcb\x17\x1cRP\xe7\xb5\xf5\x88\xa4\xda\xcb\x9a\x07v=\xc9^\xaa\xf6)\xeb78\x1c[\xa0\xee\x0e\xe0\xf2}\xc4 \xc1V\x00\x97\xa3\xc8\xac\xa3\xec\x17]\x8f\xf8m\xad\xe2(\xfb\xd5\x80\xfb\xb5\x05\xeeo\x06\xdc\xdf0\xb8\x84\xa5,Y\xb3\xa30^R\xf0\x1bo\xbc\xb7\xc1\xa71\xf3\xb2\x8fby\x9b\xa5\xcaT\xb4,`\xee5+\xc6\xb7\x92\x80\x94\xc07\x9d \xa2r|\x18\x136\x17#(\xfea\xd5\xb1\xf9\xaf2\x17\x1b\xb2\x82\x9ey\x0d+\x0b\x00U\n\x08cP\xba=a1\xa3\x19(\x89A\x81\xe2\xcd\n\xfbR0\xe1N\xf1\x1b\x85\x93<\xe8\xc9u\xc6\xa24\xe0Q\n\x05\xea\x89-%_1\x9a\xe5 3\xcb\xe9$\xb4\x94\xd2oA\x074\xcdCK\x16\xcflR\x94\x04g7\x12\x1c\xf7\xa6\x1e\xb5\xb0\x87)c8\xc3\x9f.i\\!I!\xa1\x95$MC\x1e[\xbe\xa2 \x184\x8fyyH\x13C\xe8SO\xc2\xbe\xa5@N\n\xb9\x84SO\xc2K\xd9\xba\x1b'\x8c\xfaoY\xb6\xe4>\xd4U\xbeb\xf5\x94\xda]\x02\xb8|Ca\xfd\x97l\x1dh\xe1\xa5\xf9\x8aB\xb3\x15.\xe0\x169kKN\x90y\xcb\xb3 \x84\xe5h\xbc\xa1\xf5\xf3X\xd3\x86\xe2\xb7\x95.\x14\x99\xa5\x0c\x02@\xed\"\x884K\x82\xcf,[&<_,\x8dc\xb3\x92\xdevvV\x00\xcd\x03\xb4ZC\xdb)*o\xb8,\x03\x94\xf0\xcf\x96\x95 Y/i\xba\xa4IBeWE\xca\xc8\xd7I\xf8\xa7T!^\xae\x81\xa2\x14\xb7\xaf\x04\x01\xf3&\x88\x98G\xe3\xb2L(\x13Z\x0b\xfc7\x0f\xa2j \x91b-\xf26\xc8\x04\xdd\xb1\n\x8c\xa6\xad\x8a4k1s\xbe\xa1L\xeb\x8c\xf3\xcfL\xd3\xc2\n\xfc\xcaB\x0c\xa7y2\xa7\x1e;\x95X\xc81_1\xe8\x1b\xb1\xd4\xdf\xd0h\x91\xd3\x05\xc0W\x12\x90\x12\x19\xbd\x0c\xa5\xb7&\xb1d\x8c7\x146Y0 \x02\xd4/+\xcc\xaf\x05\x0cv\x96e\xec:;\x02\xfdV\x01\xc6\xae\xb3\x91\xd4v\xb5\x80\xbed\x1eO4\x0e\x00p\xbfH\xb1\x141\x91/\x94h\xc3\xbd\x02\xa0\xa0\xf9\xca\x17\x0c\x92\xa3\x1b!+\xe98$7\xc7%\x019. \xc8E;k\x14t\x91\xd6\x86\x06\n \x13\x05\x94%\xdb\xb6\x7f\x1e\x05\x9e\x8d\xb7Qy?\x04~\x00\xf5\xc1\xdb\xe82\xf0\x03{E\xa0|e@\x83\xaa:\x0e\x9e\xa5\x1fXr\xb2\x92\xc0Y:\x8a\x05\x85\x8a\x11\xbf\xeb#\xe3>\xd7Y\x8f\xca\xeb]\x0c\xf8G-\xaar\xd6#%\xb6\xc2\xc0^\x9b\xb2%g=2dM\x18\xf8\xdb\n\x87\xe8\xacG&\xcb\x88\x15P\xdb\n\x19\xd65\xf32\x9e\x9c\xcc\xe7\xcc\x13xF\xbe\x8e\x18\xbcc5\xb1$\xb5\xb1jk\x96dG\xfe\xfaW\xa8&\xc9@\xf0\x86\xa1\x1d\x91Y\xca\xdd\x00\xb4E\xecVB\xffZ\x83F\xeb\x0e\xd8\xd5\x0f\xfcZ@\xca_\x16\x983\xc0 \nL\xbe\xa0\x90ip\x19\x846n\x18P%>\xacW<\xf1K\x89\x8fxk\x91\xf7\\% \xa9Q\xb7E\xeam\xb4\xc2o\x8cp\x9a\xf1\xba\x90\x95\\\xdb\xef\x87\xafq\x04p\x8d#\x80\xeb\xe3%\x8d\"\x16J\xad[@\x91\xf5$\xec\x1ba\x10}>\xf2\xb2\x1c\x88^\x07^\xa7T\xbe[\xc1\x13/\xe1\xa1\x01.\xdfm\xe0?& \x88\x96\xb0\xcb\x04\x15EC\xe6G\xb3\xd2\xb6\x1aO\x97\xfc\xaa\x00L\x97\xfc\xca\x06x\x16dF\x95\x99x\xb3\x82\xca\xab\\\x05\x89_\xe2^\xaf\xc2\x1f\xc0\xd3\xb6s\xbd\n\xa7\x97\x14U\x98\xb8^\x85\x11\xbe\xc8 \xe7\x17\xf8\x00\xd4\x10\xa5SLAG\x81\x8a\xb3W})\xa4\xe8:\xbc^\x85b\xcd\xea\xf6`J;D\xfa2@\x1as\x83/\xae\x1b|q\xdd4\x17W= \xf9\xf2\xefh]\xbfs\xbe:\x8a\xfc\x0fT\x1cQ\xe5K\xab\x7fT\x8a*\x1f)\x17\x02\x81\xc0\x95\xf5@\x11Dz\x1982Ug`\x84R\xcc!\x04il\x85\xa4Y\x1dil\x806 \xb9\xec\xdb >v\xd6!\x17z\x1b\x84Z\xe1\xad \xb0\xb2m\x10zI[\x8c\xdc\x8a\x85h\xcfWk\xb0WH\xd9\xc6\x8cL\xcd\xc8]\xa4\xaa\x9d*#\x02\x8e?\xb3\x9b\xd4\x0d\x06\xe39ON\xa8\xb7t\xed\n\x84t\\\xae\x08\x19\xe7vgH\x02\xf1\xeb\xc1\x03\xe2\xd2q\xe3\xeb\x12H@\x18\xeax\xdf$@\xc7N\xddu\x02\xc7\xedW[\x82\xfe`\x0e\x15\xa4\xa3\x85Guk\xd7T\x81\xef\xe2>>\x1e\xe3>>vw\xeb\xd5\xcf\xc16\xbdj\xcb\xaa50\xdf\xea\xf8\x05\xa69k\xc3;\x8b\x80\"/\x0e\xc8\xa4\xe6=\xb1i\xaeN@2\x12\x02]\x83o\xd0xIS\xe6\x7fd\x8b \xcd$\x15\xaf\x97\x10\n.\x1e\xe5\xf1~J\x1c\x1eID\x85\xa0)\xfdh\xd7\xf6\x06\xb4r\x11\xe5\xa0e\x90\xf5M@\xd9&\x16LC\xe4\x01^\x9a9\x19\x8f\x7f\x08\xf3\xc4\x19\x12\x07\x04\x01\x10\x1b\xfb-\x8br\x95\xf2\x8a{y\xaa~\xff\x95\xdd\xbc\xe4WQ\xf9\xf6)V\xbf\xdf\xf2\x06\xe8I\xe47'\xab\xa9\xa2\xbf\xa1EV\x8b\x05q\x87\x0b\x12\xfbf*\x0dM\xa7=\x0d\x82Mc\xd4io\xd3\xe0\xc2du\xda\xcfB\xd8\xb0j\x9dV\x8d\\\xf1m\xdb\xb17\x88\x1a\xed\xa6\xa5a\xab\x85b\x0f\xdb\xc4[\x8e\xbb\xb4KP&\x84\xd3\xc2PA\x07\xc7o\xb1\xf3\x92Q\x12\xa4\xf1I\x0b\x14\x8f\x05\xd0%\xcf#\x1f|5\xc4v\xd8\x90\xcd3\x13\xf8\x0d\x9b\xdfn\x94\xbf\xba~m<\xc0\xb2n\x0d\x8a\xfa\x9e\xbb\x16\x07,6\xde\x80~\x9a\x03\xa9\xcd\xfes\xc3\x93J\xac\xe6aH\x96Cbq\x10\xa7\x06\x9fC\xb4xr\xa0]58C\x91\x04|\xa6\x98\xd7!I\xc6\xa5\xea\xba\x8e\xb8\xf3Ry\xb7c\xa9\x0bf\x99\xd5\xfe\xfd \xf9\x8c%N\x93h\xfce3X\xee\x9aE\xa0\x84\x9aNImF\xd8u\x96P/\xd3wtu\xca\xa4%|\xf4\xd6\xa2\xc3\xea_\x0fdF\x0em\xb1\xd3\x06d\x8a\x9a[\x88'\xbd\n\xdam\xde=\x9a2\xe3\xd8\x9bZW\x9a\x1b\xba\x1c\x82\x9d;Y\x923\xe9#\x9e\x8f\x95\xaa\xed\x89\x1f\x80\xc8Q\x9a\xf1\xf82\xb6\xc7R\xfa\xa2\xd5\x07T\x8b\xd1!\xb8\x82\xc7\xb3\x8b\xf6\xc1\x99mo^qd\x96\xc7d\xf1\xe5\xbb}\xb8<\xe9\xed_\x87\xe3\xd6\x12\x17\x8b\xf4\xfc\x8eI\x89\xe0_\xaa6\xe9S\xdc\xd2 \xb5\xa6\x14\x19@n\xa4E{G\x0b\xeaT\x8b\xbdz\xb1t\xe7\x83^\xdd\xd2$TG\x97$m\xd5\xd9!\xd5\x91\x0edFZ\x1c94\\b\xfa\x1f\xf2\xec\x0d\xf8\xd3d\xf5\xe8k\x16\xaf\xa3%\xf1*M\x97a\xd1\x03u\xb5c\xb5\xc1\xc3\x8d\xaf.!\xf5\xae\xcc\x0c\x1e\x99\xc9\xe6\xaf\xbb\xc9\xfbP\x9c\xc9\xc9\x95\x05\xdbc\x94\x9b\xd9\xdf\xab\xf3J!\xce\xfc(\x8f\xdd{u&g\xae\xd2\xeb\xf0\xb1jM=\xdd\x97\xf0\x8f\xea\xbdZ\xaa\xf4\xfa(\xacUz\x9d\xe9Z\xa9A\xab\xc3/\x14|\xdd\x07\xdf\x8d\x1c\xcd\xfa\xe8\\*\x1e\xad>\n\x17e\x84\xaa?\xbe\xd6\xf2\xaej\xe1\xe8g\x0e\xbd\xe4\xe0G\xc0\xa1Q \xdd\xe3\x9dD~\xe5\xfdu\xc6\xf4\x15\x89\x91\xaa\xfd\x0f8\x97\x8a\x95\xf1h\xf4!\xa47\xc6\xcf3ya\x08)a\xe0}\x86\x1fUn\xc7\xe3\xb1,\x91C]>\xcf/Cv\xac\x81\xfd\x84.\xf4\x7f\xd5*\xf9S\xfa7\x90/\xd7A\xa6\x7fC\x8c7\xfd\xf2~]\x02\x15\x8d\xf5\x13\x0e\x1c\x92\x9f\xcb.)<3$\x0e[\xc5Y\x00Q\xcc\x1c\x16y\xc9M\x9c\xe9\x17_\xfdH\x12\x0e\x15\xce5{\x16D\xb1lv\x10\xadi\x18\x00\xd4\xe7\x92_\xfb\xccn>$pO\x02\xbf%k\x16r\xea\xeb\xff\xcc\x7fI3Z\xbe\xbde\x19\xf5\x8d\x94\xa2\xd5+\x93\xd5\x83\x97\xb7\\v\x14^\xde\xe7%\x94\xee\xf5\xaa\xe4\x06c\x9afL\xfe\xc8S\xf9C\xcd\x93\xf8\x0f\x12m\xe2\xc4 _\xe8\xc6&4c\xe5\xc0\x80s>\xc7t\xf1\xeb\xa4\x8c}\x96\x83\"~\xa9\x1a\xd2\x8c\x86\xa1J\xcd/WrV\xd2<\x8d\x99\x9c\xb9,X\xa9P\xd4\xf0\xc6soy,\xc8\x87\xb0xUS\x0c\xbfu\x07\xe1\xa5\x18\x08\xb8\x1f\x0b\x8cE\xba\xe6a\xbe2\x1a{EA\xf6\x0e?\x97\x8c\x85\xcey\x0f)\x91f\x8d\xd8l\xe7|\x9c\xf1Oq\xcc\x92c\x9a2w@\xb6\x05c\x16\x06\x1es\xeb\x9b\x95(\xcbg\x87G\x10\xe3\xb7\x99\x0bv\x98\x19\x8f-\xd9\x1c\x15x\x90;\x8a5Z\x0c\xc1KiFD\xb6\x89s\x0f\x92\x8c\x04\x91*T\x0f\xe3\x0b)P\xe3Cr5K\xce\x8b\x80\xd9\x00Y\xf3\xd2~\xa2PS\x91X\x08\x07\xae\xad\x16\xca\xce\x18\xe2P\x8d/\x12\xce\x81.}\xfd\xb2\xac\x1f\xa9\xe9\xd4^\xd3e\x9ee\xd2\x0c\xf8@\x06\xe0T\xdb\xdbHH\x8d#W\xa6\x08TF\x13FU\x9a\xf1m\xfdK\xf4\xec\xb8\x95\x92\xbf\xd8\x90\x92\xe7(\x13D\x13B\x87pR\\\xcd\xd89.-\xd8\xba\xe9 \xf5\xfb\xd3\xeaGpjtPT\xc7\xeaD\xe8\x07\xa6O\x8b\x0e\xe8\x97U\xcc\xdd\x01}\xa2\xb0z\x17X\x81\xf1;\x01\xfd\x1e@pRt\x00\xbd\x86\xd5\xd5 $\x0f\x96\x0e\xb07\xe2P\xe9\x01\xa3\x0e\x9c^\x90\xc5a\xd4\x03Z\xe2\xe7\x0e\xc0\x0fp\xfat\x01\xf5X/\x1f\xd4\xa9\xd5\x05\xa6O\xb4\x0e\xb8\x8f\xe5i\xd7\x05 'a\x07\xd0\xa9<\x1b{@\xf5\xe8\xc3\xa9:S\xbb\xc0\xe4y\xdb %\xcf\xe2\x0e\xb0\xb3\xf2\x9c\xee\x80\xfc\xc9<|;`\x7fV\x07\xb3\x9d\xbf\x12<\xc0\x1d\x19\xe5\xbfj\x8a\xab\x9do\x94\xfe\x9e.\xdd\xa8M\x82\xac\x9f\xfbf#!\xb8\xd3\xdd\xba\xd9\"\x88(`\xba\x84)\xa2\x19\xde\xdd\x9a!\xc9\xf4\xf6\xa1\xdeU\xaeq\xe4\xe9\xba\xc9p\xbf4X\x81\x8e\xbev\xc9G\xaa\x80@Y\xf6\x01\xb4Nc\x15\xec}7\x1a\x7f[P\xe6\x1d\x80\xdd\x12\x18\xa2\xe6.\xbe\xdb\xdc\xbd\x14\x9cUGc^*\xae\xab\x17X\xd6\xdd\xb9\x97\x9a[\xeb\x01'9\xb9\x1e\x80}F\xf5e\xc1\x01v\x02\xf2\xae\xadkq\xadHz\x8e\xfb\x99\xc1\xf6t\xe1a\xcd\x12\xf5\x81\xeb\xb3\xa8\xcfJV\xaa\xbd\x8f\x16\xef\xb8\xa4g\x1f\x8fLABG\x9b\x8e\x9aB\x86\xbe%\xfa\xf4\xa4\xc5\xbb^\x9f\x9e\x9cU\xd8\xcd\xf6O\xad\xef\xf6)\x19\xe4\xa7\xe3\x1b\xab\xbb}\xe3g\xe0\x88\xdb?\x81\xf8\\\xd3O\x9fO\x1c\xf3\xb8\x93~;\xeeF\x98\x1f@d\xd1\xde\xd2\xa6?\xc4\xa6\x08\x96\n.-q\x9d\xfd'\x0e\x1e\xc8H\xf0M\x17\x10\x90\xa1\xbc%\xba)9\xadf\x01u\x80\x05\xed\xb7?\x17\x83!\xb9\xa8\x94\xbd\x07\xa1/\xdcV\xf3H\x1e\x89\xa5\xdcw\xeb\xd4e\xe3\x8b\x8c.\xd0\xdb1b\x08j\x05\x1fm\x17\x0f\x04z\x18\x90`\x83\xf8\xac\x9f\x08\x96\xfe\xcb\x17\xe2\x9e(\xde^G\x85\n\x0c\x89\xdf\x0d\x16_\xaamh\xae\x820|\xc9B\x961\xcb\xf0\xdc\xfb\xd8Djll\xbd\x8c\xce\x95\xc3Iw0$>4\x0dR\xbb\xfaU\xbcYd\xef\xc7\x90zG\xd9\xfb\xa3}\xd4\x81=o\x11\x18h\xf7nc\x8f\x86\xa1\x8a\xacn@\x97\xcd.~%c\x9aC\xbc\xf8\xe3\x90\xa6\xa9\xcb\xeba@\n\xa9\xb0\xf4\x8f\xd0\xd4\x06a\xd2/\xb1\xe0-\xb0\xec8e\xb9\xcf\xcb\x0b\xed\xca\xadhM\xfd\x8a\xdf\xd3\xa85o,\x9a+\xc4\x0b\x83\xf8\x92\xd3\x04\xf8\xe6>~\xda\xb54\xa9RP\xe9\x94\x1c\x126\xae\xa4\x17\xb7\xa6\xd5\xe4\xaee\x85Mw\xf0-\xa7;\x90^\x86\xcdI\x08\xeec\x12&\x93\xc9\xbf\xc1\xdaM\x98@\xe2\xbeV(\xff\xf6k\xafy\xf1\xc3-79\xb8\x87\xbd\xcf\xecf\n\xf7V\xf5[4\xa2<\x02d\xa0\xe0\xdf\xdce\xe2\xf1\xb2$\xfc+T\x80f\x83/\xb5\x96|\x1a\xb6\xe5\xaeXF[\xb2\xa51\xa8-\x17|\x19\xa0\xd8\x81\xc8\xb8\x16o\xb9\x1f\xcc\x03pA\x90 8wwR\xbf\x18\x14\x8f\xb7\xa4\xc9q5\xf4~\xe7v\xfd\xccnb\x10\x1cH9\xae\xd4\xfd8\x94nm\xa7\xb5x\xa4\x04\x17\x8f\x7ff7\xb7\xf8\xaa/\xb8V\xf3\xa3_\xbe@z\x1e\xd7\x9a\xc2\xc6\xea\x03}\xdbs\xb5\x0c\xbc\xe5\x86\xadi\x19\x83\xfbll%\x05Eg\xf4[b\x00:$\xc1\xb7P\xe9m\xee_\xfcP9I\xbd)qNR\x8f\xa26\x05\xa0=}I\x93)q\x08\x92\xfd\x06\xf4\xad\x9c\xa3$\xe1W\xe27\x02\xf2)\xd6\x00\x9f0\x83\xc6\x8f\xca\xd0\x04 >ZLM^\xf2\xabH\xc3\xc8\x9b\xc7&\x08\x0b\xa7\xc4\x91\xa4\x1a\x92\xfd3\x18K\xbe?E\xb2\xde\xb2(\x9f\x12\xa7\xa2\xf9\xda\x00:\x8a\xe3\xb4\x13H\xb2MS\xe2\xc8\x1fo\xb8\x87\x19O\xbc\xe5\xbf\x7fH\x82\x08\x14\x84\x00?9\x9f\xa2\xc0gQ&\xf0\x89\xdfjg\x80\xa3\xe0\xfd)q~\xa0\xdeg\x9b\x85\xc5\xb3)q\xce\xe8%\x923\xd9\x15}\n\x19\xc5\xcc#&{ba\xc8\xdb\xedf\xe6\x13\xd1M\x8b\xaf\xcb\xc9S5T \xc7\xec\xc7&\xa2\xc1G!ZR\xb4U\xca\xe6\x9b\x99\xbb;S\xb8(L-\x03\xbb\xfb\xb4m%\xef\xedZ\xd6\xf0\xde\x1e|s\xc1\xd0\xf5\xb9\xf7H\xe5Z\xd6\xdd\xdec\x18%\xcc$|O\x8c\xd1\x8f\x1cu\xcb\xb5\xf7\xb4c\xdb\xec\xed\xb7n\x9b\xbdg]{\xe6\xd1N\xc7\x8ey$Z\xfe:J\x19\xea3\xe7\xd1\x93\xb6\xed4\x81\x95\xf3\ns52\x81u\xf3j\x17\xcd\x12\x83\xf9j\x0f\xcd\x12\xady\xf5\x08\xcd\x12My\xf5\x18\xcd\x12\xc3\xf8\xea \x9a%\x06\xf0\xd5S4K\x0c\xde\xab}tC\x88Q{\xf5\x0c\xcd\x9a@\x97w\xd0<9\x1c\xe8x\xec\xc2xL\xd0\x01y$\x06\xe4]\xbe\xb2\xac\xe8 \xccQ+6\xd9\xdd\x15U\xbce\x19\xada\x0e\x9c\xcb\xb3\x9f\xc0\xd2\x0b\xfegvc\xbb\xd1\xcd\x04\xc99\x03\x90s\x19\xec\xf63\xbbir\xa9\xc0\xfcV0\x1ah\xc8\x97\xde\xe3\xab\n\xb9_\x1b\x8d@\xcf~[\xa3\xb4\x7f|\xabld\xa2\xfc\xe1\x93C\x8d\xcc\xc8\x94\xc8\xb0:\xe3y\xc2W\xc7\x8a@\xab\x07DF\x15d7\xa2;\x82YAy\xc0x\xd5\x06eJ\x9cr\xc6\xee\xc1\xc9\xb6\xd4\x11\xfb\xd7s0>\xcd\xa8t\xf7\xc3\x92\x7f\x1d\x03\xd3\\-\xa0\xbb\xc3R\x1bI/\xb5\xa9\xcf\xda\x81<\xb8]\xf4;\xa0\xee\xc4\x96\xdc\x91%\xb2q&\xd5\xb5\xfd?\x86i\xff\xb7X\xf1\xb1\n\x15\xfd\x7f\x8b\xb8\xe9\xdf\x04O\xb00\xa3\xbft\xf1\x84\x1a\xf1JhCv%\x13\x04\x16\x05\xd5\xba\x97\xd5\xfc\x11\x1b\x1b\xc9\x0d\xc6\xaf\x11\xa74\xcc\xe8\xaf\x1b5\xe5\xd7zS~\xad6\xe5W\xbc)5(\x1c\xa8Ws\xff\x86-%\xc8\x91\x86\xff\xdfj\x19 \xce\xf2\xf1\xa0\xb9\xac\x9eu\xd1\x1b\x88\xac\\\x1f\xe0\xcd\xb1\xbe\xc8x\xfc\x86\xadY\xa8\xe2\x02O b`u\x11\xf8\xe0\xf5KdO\x90\xecJ\x84\x8e\xa9\x8a\x91R\x84\xc0\x80 \xa9\" \xc2\xa9U\xa3y\xd8\xb0\xeb\x85\x8co\x83\xe8O^dta~B\xe0\x82q\xc6\xdf\xf0\xabB{\xd3^\xa9\xb6\xfd\xfe\xf4\xf1uQ\x87\x91F\xa6\x88\xda\xfesl{F\xb5}x\xab\x196\xa7\xaf:3\xf5x\xcfS\xb2U3\xa0\xcfS\xf6*\xb8\x14\x13\xb25\xb9\x8f\xb6\x18\x91c\x1e\xd5\x15\xe6\xc51\xff\xf0\xb7\x87\x87\xdf?\xac\xa6\x0b&\xf9\xe1\xdf_\xfc\xb6\xf5\xdb\xe8\xb7Q-\x0f7\xd4?\xfe\xf1\xe4\xf8\xaf\xa7\x9f\xde^\x1c\x9d\x9d}\xbcxw\xf4\xf6dJ\x1cA\xc7\x8c \xe4\xf0\x08b*\xa79\x1a&\xc3\xf7\x8fU\xee\x19\x97\xb1\xb4\xbb\xf0\x081\xe8i\x9ct%\xe6\xd5^\xc6\xd2LTt\x08\x01f\xd88aqH=&\x10\xaaC\x1c\xb2M\xe8\xb8\xd9~\xb2M\xbe;p\xbe#\xdb$\x13?\x9d??\xf8\xae_@s\x1a}dy\xca\x9a=\xe9\x8a\x80\xa8c\x9b\x16\x16\xec.\xd6\xae\xf6\xce\x8aJ 6QL\x93\x94\xbd\x8e \xf0\xe4dg0\x94\xc1\x7f\x80\x8eo\xf6\xc2\xb6/\xeeY\xa4\xf6\xe4\xf1\xe3\xddI\x17\x92\xab\x0fQ\x11\xc7KL\xf6d\x08=\xdc\x91\x91\"wdH/V\x84\xdb\x12ks\xf4\x88< \xc1s\xc2\xc9\x0bB\xd1\x10_E\x8d\xb9\x19f\x90\x93m\xf2h\xe7\xd9\x93!\xa1\x03Y:\x17\xff\xb6\x0f\xc8\xa3\x01\x89\xc4\x7f7\x13\x7f\xd9X\x0b\xa4\x8f2\x97\x0f\x06d\x1b\xcd \xdbd\xd2\x96\xb9\xdb\x96\xb97@f9#\xffq@\x121\x00\xffa\xc6\xa6&\x8d T\x91\xdaD\x17\xc48lo\xab\xf6c\xcdGq\xa0+?5 _\x88\x1b\xa9\x9f/^\x90\xc9\x93\xfb\xc0G\xe6\xac;\x93\xc7\xe3'\xe3]\xe7\xf6\xb5u\xd8,\xb9\x91\xfb\xe8\xc9`(m\x91p\xdb\xa5I\xdd\x9aG{bx40\x8f\xec}\xa8\xe5\xd9\xc6\xa1\xb7\x04;\x1e)kw\xd6\xa2/'\xe0&\x8a\xfb-\xe3\xce)pV\x85\xd5\xbb\x01\xac7\x1b\xe8O\xd4T\x8a\n\xdcL\x06\x11\x1e\x08\xf4\xc7\xed\xe6\x9e\xcd\x16\xa1\xa1\xb4\x04\xf2\x8c|&N\xfd\xc4u\x1e=rDY\xf1\xeb\xb13\xac\xb8\xf3\xb8\xe7\xf8WbB\xf6,\x83\x9f\xa86\x9d\xe6\x97Y\xc2\x04\xd2\xe3EX\xe0\xdb\x7f9\x1b_\\\xb0\xf4-\xf7\xf3\x90\x81!\xdeP\x86\x87\x8b\x98\x97\x01\xa6\xfe\x90\xf0u \x86BG\x1dm\xb6:p#w\xff\xf1n}\xe5\xf1\"\xeb\xd1\x00e#\x02\xabY\x83\x8a\xf7h4M\x1ejM,\xa7\xa2\xa7MIwL\xc5J_\x12\x1dw\xad\xda_\xae\x93\xefyDU\xad-\x83\x18\xb9u\xfb<\x0eK:r'\xd8\x96\x16\x19{O\x1f\x9b\x18T&=\xc1\xc7\x9a\xfes\xc7Z\x9f;-\x07\x9en\x99\n\x1a\x8d|o\xab\x1fU\x016\"n5\xe8\xdd`@\xb2e\xc2\xafH\xc4\xae\x88@2`\xdc\xe0:\xc74\x8axF\x04oJ(\xf1\x04\xc3IhJh\xf1%\x07\xa1~\x14\x17\x8b\x99\xdd\xaf\x95\x95y\xff\x862\xb3e\x1f\xd9\x9c%,\xf2t\xf3\xc4\x87\xc8\x92\xa6\xd1w\x19\xb9d,\"A\x14d\x01\x0d\x83\x94\xf9dD\xd2\xd3\x05\x1b\x93O)+\xeb\x1b\x83\xb4\xa2xu\x07$\xe3\xf2d\xcc\x96l5&\x1f\x19\xf5\xc9J`m\x9a\x11\x15hu~9^\xb1\x87y\xca\xa4\xa8cT~\xc5\xa9\xdf\x8a\xe1\xa3\x91\xb5-~\x1b]A`\xd0\xcb\x95 \xb8\xe1&\xaf\x80\x0b\x08\x95kn\x04C^r\x1e\xa2\x19\xa2\xb1h\x86\x8c\x94\x8bf\xc9\xa3\x15\xcd\xd2\xce\xc5\xb1\xac\x9b\xd5\xa5\xa5\x114\xc2[\x0d\xfdy?Ge\x8bLK\xdb\x90r\x9a:\xb2\x14\x95\xf2Jk\xc7,\xa5xd\xab\x0fr\xa4\xc7F$\x17\xe2\x01\xe0]\xb8\xa6b\x18kW\xbf(\xff\x1e\xd5\x160\x91r\x83\xb1\x99 \x0e\xec\xa2\xec\x1d\xf0F\x83\xa8o\xa2\x14u\x82\xd14\x0d\x16\x10\x9e\xbb\xaf\xb0\xe79\xc9\xc8\x0bB\x93\x05\x88\x94S%\xe6yN\xb2\xedml\xaf\xe8\xa5^\x14\x98e\x88\xe1t\xf1\x89\x84\x04\x91\xe8\xa1j^y,-i\xfa\xfe*R\x8e&o$-')qqN3\xa9\x1b\x1f\xcd\x92\xf3\x1e\xd7\xdd\x86 9~\xe8\xb4\x8d8Q\x9d\xf2\xccN\xa9Q \xdf\x93=\xd1\x1e\xc95\x01\x8e,\xfb\xbdwN\x0e\xab\xaf\xb8\xfb\xd4\x159 ?p\x1e2\x1a\xa1\xa6\x04\x0b\xa2\x0c\xe3\xe7\xcd\xbc\x1b\x84e\xd3\xe9x\x14n}S@\x0e\x89\xbb#\x0e=5\n\x03)\x81\x88\x9b\x88\x0b<\xa2\x80\x8b\xc0\xe6\xf7\x05\xbd\xe3\x8d\xe3H\xf2z\x1dNb\xdc\x99^u\xcd]Y\x8a\xe6\xd58\x00\xe5\xdb\xbdp\xd4\xeeJ\xcb\xd3\xe8\xcb\x17\xb2%\xe8oZ\xd2\xdf\xba\xce\x12j e$\xf5\xb2\x07\x82\x0d\xa8\xbb\xb2\xd5\x0f: \x95\x11\xbd\x8f1\xa9N\xd1\x1d\x87\xc5\xaf\xe0\xad\x96\x91\xa9\x00\x9a\x83\xe3\xd70\xdf\xa6\xe3\xf3\x96%\x0b\xe6\xdfit\xba$OX9\xb1_/\x8b\x02\xed\xacf\x8b\xf3j\xd2\x85\xa1H\xc1N\x1a\xcb\x08\x1b\xd3\xcd\xa6oKV\xb9*\x07O\xcc\xc8)L\x0b>\x81\x06\xa89}f\x0d\x9bL^\x90\x9e\xe6\x97\xa9\x97\x04\x97\xfd\xe7K\xb5\x1d\x97\xa9\x89\xc6\xe4Q\xaa+\xed\xd3\x86,\xb9)\x1a\xd1\xb7\x0d+p\xbeQ\xffZ9\x1ef\xe2\x81q\x1f8.\x92%\xdc\x92F~\xa8\xa8\xe2\xf1e\x10\xf9\x90<\x18\x0cI#\xdbE\xfc\x8c\x10\xb47\x9f*\x1f\xef\xd5\x9f^=qu\xb3\xaa\xbd\x13\xecd\xaf\xa6\x15\x92\x83\x97\x81\xff\x96\xe7Q\xe7]\xab~\xe0\xa3\xe64\xb9\x9b}\xef\xe7 \x0c?2\x8f\x05k\x84\x93h\xfb\xf0U\xcbN\x90[\x0c\xdc\xc3\xa8\xb9j\xf2@M\x7f\xe5\xfaik\xea\xa7hu\x9b\xd1\xf9\x84\xcc\x94)\xb3\xe8\xd5\x8e\x02~\xa3\xaf\xd7\xb17h\xa5\xd7\xcf\xc2jz\x15c\x18\x19\xb6q,\xb2\x9b\xecd5\x7fm\x9c\xf7?0\x16}H\x98GC\x0f\\\x19\xf9\xca[\x7f\xadi\x06H\xc0#\x10\xa3T\x1b%o\xe6\x99\xaf\xb4\xd4\xab\x99v\xa2\x0b\x01\xaa\xf1%\x0d-|\xfd\xd4&\xc6\xc4\x04}\xa7\x06\x14\x1fk\xfb\xb5\xcf\xa1VCY}\xf9[\x02:\xb9\x07\xc6\xd8\x8eK\xe9Z\xfb\xd9\x07\xec\x8b\x14'\x00\xd1\xd9\xd9L]\xe8\xaa\xc4\xc3m\x1c]\x9f\xea\x08&\xcd\xef\xa2\xf2\xebO\x96\xdcl\x00M\xcc\xab \x1a\xc7\xe1\x8dk\x11\xe2`\xcfW\xe2\xd1vo\xc6\xb6G}s9\x06y\x9a<\xb0\x97\xbdk\xb0\xcb\xb3\xccGQ+6r^\xee\x8a\x0e\x8aI?\xb0<\n\xe7\x9a\xfd\xcaDp\xd3\xb5\xc4\xc8o|\xb7\xab\xd1\x18\xf4\xc7#\xedb?\xd2k\xa8z\xe1\xb4T\xef\xc0~\xd3l\xca\xb4q\n\xc8|\xbe\xb6\xaf\xb8\x16\xe9e\x1f\xbc\xb5`\x99\xb4\xb7\xf2\xb5zu_\xec\xa59\x8c\xea\x15\xc7\xf5\x908g\x9cP\xcfci\n\x97\x12W\xb2\xfa\xe2\xf6kHnxN\"\xc6|\x92q\x88\xe0\x1f\xcco\xc8\x1fD]kNI\x96\xe4\x8c|%T\x16\x9f\xf3<\xc9\x96\xc5\xe50\x01\"\x12\xeeF\xe0~q\x00\xf7HcgP\x1c\x04\xf3t|U\xedQ\x9fq\xe8\xa7\xda\xa5\x1f}\xcdi;\x10\xdb\x11qT\x96l\xae\xab\xf6\xa2\x81\xf9\xd1\x96\xe5\xdf^\x0b\xad\x9c\x02\xb6=\xd7^G\xae\xeb\xa8\x1d\xbd\xf6\xdd_\x1cw\x16\nb\xd2AAL\xfa\xef\xfc\xcd(\x08\xaa\xefih\xbb`-\x95{\xbeuX\xc2\x8e0Hp \xe6\x80\xf5R\xad, /e\xba\xce\xc8!\xd4m\xc2\xb6\n\x88:\x84\x84\x1e\x12\x1d\xb1\xfe\xccU\xb4D[~@\x0ee=;dJ\x803u=\xbd*l\xe7\x8a+x\xa7\x10`\xe7UXT\x82\xe2\xb6]\xc5\x16L\xf2\xd6\x96\xeb\x81\xd6\x07\x8c\xe6\xa0\x18\"\xab\xe8\xc1\x95\xbcqN\x0eIN\xa6jY6i\xc8k\xa5\xf9\xc1\xd5\xf5\x99\xca\x01\x1e#q\xff\xf8\xda$\x95\xbb\xee\xd3d\xe0\xe9\x1a~\xc2#`\x10\xc0\xfd\x03\xd1\x88TX\xc7j\xc5\xd5U\xb4l\xac^um^\xb5\xdf\xaf\x16Z\x93\x03\xe5!\xe0~\xb4\x1e\x87v\xa5\xbez'\xc1K\x90ti[\xdcR\xd5\x8f8\xcd\x98U-\xea\x9a\xc7KR\x83\xa9#\x19\xb0>\xd4\x1a\x83\x82\xd3L\xd4K\xf9\xe5\xda\x81T\xa8G\xf2\xb2j\x9bj\xa44\xbf\xddyN\x02\xf2\x82D\x85zf\xb0\xbd\xdd\xc4\x91\xc0\xd3p\xa5\x194$\xd1,8\x07a\x12\x9b\x89\x9f\xe7\xf2\xeeE\xfe\xb6\xb6\xad\x18\xac\xda\x0e\xf9\xb6Sh\xd9\xe7\x05\x00\xca0\x1b\xd4|\x02\x82\xce#\x00\x06\xdb\x7f\x9e\xa4\xf2\xbc\xe9\x89&\x957\xc2\xa7J\xb4\xd6\xd1[(QV\xd0J\x83\xe3#C\x0c\xb9\x08\x8e\x04\x1a\xd6\nv5\x12\xaf\x17\x94\x1aw8v[\xa0\xcaS\xd2\x0e\xb4`\xd9\xcb^\xb5\x01`\x12\xac\x99\x0fd\xd5\xab\x84\xaf:J\xac\x82\xeb j\xc9/\xceS;H\x06\x8a\xdf\x08+\x8dh\xe7f\xd6\xf1\x8fZG@\xee\xc3\xd6f\xca\xed\xdc2k4\x0c\xc1\x05E[~K\xf9B\xf7\xb8\x0d$\xc8n\xfa\x0e\x85\x81\x0b}6\x0f\"V\xa0\xa0\xe6\xce+A\x17,3\xb0\x15\xc4\\k\xc2s\x1b\xfc)\x98 %\x02[\x89\x97,\xf5\x92 \xce0^\x8fV\n\x19\xdaMMPA\xcaPAEP\xa5'\x85[\xe9\x17\xb4H\xea\x86C\xe2\x0d\xc9\x1cCD\xa0['\x0d-L\xcd:\xcf\xc6\x8e\x0bx\xd4\x0eG?\x023\xc4`g\xeb\xb5\xf0\x12\xb1h\x7f\x0cX\x1d\xb83hc,\xda\x88\x16\xc1e+\xe2S>\xb8\xf8\xb0}\x8a\x13\x1d\x1d\xd8\x17\x84\xb1G3\x97\xbb\xde\xc0\xc6\xe5\x14\x87\xdbR\x9e[K\xf2\x82\xf8\xc5\xb9\xb5\xbd\xbd\xec\xea\xb8 \x1b\xfc\xd9\x121+\xd0\x8fRN\x9e\xad\xc1a]\xa6\xfe\xcfE;\xe7\xb3\xf5\xb9\xd5o\xbd~\xc4WV`\x1f\xee\x0d\xc9\xbaC`\xd8O\xfc\x1a\x89\xb1_\x0f\xc9\xaaC\xf2e\xcaW7\x16\x83\xa1\xa9j\xa56%\xfeMp\x14\xd48\x12\xab\xde\x97\x12\xb7\xd7Y\xd8\xed\x81\xa2^\x1aL\xd1\xf8\x90\x04\xb8A\x9a\xd6\xdcn\x0e:\x084\x9a\xb3%\n\x18\x96\x08\xd9@\xc6\xbaeWD)\xaf\xbe\x0d\"\xf0fH\xd8\xb5\xc7b\xd8\xcf\xdc\xf3\xf2$a\xfes\"\x9a\x9f-\x19\x89x4Zi@\x9f\xad \x8b\xd6A\xc2#\xe0\xab\xc5\xa2\x06\xc9^\x1e\x86\x04\x82\x9a\x92\x15KS\xba`\x84F>\xa1\xbe\x0f\x11OhH\x96,\x8c\xe7yH\xaeh\x12\x05\xd1\"\x1dc\xda\xe2,L\x99eQ\x89>\n\xcehV\x1f\xa6s\xbb\xe0\xc3\x83\x9d\x86f\xbb\xd5\xa1\xc8\n\xbf<\x0f\xff#}\xb8\x18\xf6\x13\x1d\xeau3\xf3\xb6\xb7\x9b\x01\x1c\x88d\xfa\x07\xd2\xee\xe1\x808\xaf\xa35M\x02\x1ae\xe4\xa7\x80K\xe1\x15b\x00\xd1H\x91\xf2\xact\xd2\xec\xcc\x1f_\xf1\x1d\x828Hi\x02\xea\xd5\x87\x89\xd0\xa4#\xa8l\xd8A\x95\x13C}L\xbaE\x91\xf6\xd1!\\k\x83<\xb04\xaf\x9a\x0c\x86\x98\x8d\xff`Hr\xd1QO0d\xa0h,\xc5o\xa2\x7f\xdc\x8d\x86\xe4\xe9\x90\xa4\xd8\x01T\x1c>s\xe3;\xcf\xc9|4z> \x01\xa8\xfc\xcd\xe6\xe7-R\xa2\xeaR\xb3\x99\xdd\xa2\x0b\xcf\x1c\x8c\xde\xbe\xe5\x8a\x06\x8b\xae\x8d&C\xa2E\xbc0U\xe4\x90\xec\x80Nvy|F\xe4\x05I\xe0\x86R\xe9\xd2\xb9l\x16\x9dK.~\xf0\x1c\xa7b\xea1V{o\x99\xc6\x9a\x96;\xe6\xc9\xa3.{d\xac\xab\xa6\xec\x06\xd6\x11w\xb3AE\x90u?\xad\xdb{\xba\xffo\xd1\xbcF\x88t\xd9\xbcI#\x02\xbbB7O\xea\x88\x82vK\x07\xba\xfa\x89\x9e\xad\x89\xcb\xca \x8eA\xc3\xb7\x91\xbe(\xe2\xa84D\xac\xd3\xd9\xb9E\x9e\x91\x835\xd0\xc0u\x0c\x1b\x0c\xa0\x88sP\xe0\x83\x8b\x00*\xe5\x13L\x9c\xfc \xd1\x8e\xc6q\x9e.\xdd\x1c_\xbb]\x06\xb4\xdd\xbb\xae>\x06\xba\x7f\xf5^\x14Hr\xeb\xa0.]%\xd5\x9d\x1aDj^` 3\xd9\xfe\xba\xaa\x9e\xc6\x81\x9b-\x9f\x8e\x88\xdb\xdaM\x1321\x1c\xe2j+c\xb3\x83\xaay\x8f\x8c\xebdx\x95\x14i8\xd3\x05\xd4>R\x8f\x14\xb9B=\xacR\x0ff%N\x943\x81\xa0\x9c\x90\x03Q\xf5!I\xc6?\xe4\xf39K\xc8T\x99}\xdaX\xb3CB\xc74\x0c\xb9\xf7)J\xe9\x9c\x15\xf0\xd5A\xee\xbd\xbb \xa9;\xed\xd21\xca\x91\xc3`]h\xa4+e\xe4\x06\x04QL0\xdc\xc6\xb8\x11h\"\xb3+\x02z\xdez\xe1\xa3\xba\xe3\xc5\xc7=\x1e\xdf\xb8\xc9`h\xf52\xf7uP\n\xf2\xdc\xc9\xde\xa3A\xe1\xeek\xf3-\x80\x0c\x88q\xe64\x1bi\xf4\x1d\xd9\xe9\x99TP#\x07\xe4(I\xa8\xe8\xc5\xa08\x99\x9e\x0fH6\x8b\xce!0|t~\x1f;\xa2\x13\xdfO\xf6\xefr\x1c%\"\x13P\x9d)+\xbc\x9f\x96\xed=\xedt\xdcqO-\xab7+\xba\xff\xa3C\xa3M\xfb\xa6H\x14\xabQ\xdd\x05\x16\xc9\x8a4\x82\xd5B\x13\x03\xcf\xccv\xce\xe5\xa9\xa0\x8f '\x88|v\xedH\xcd\xe0d\x0co\xd0\x0e\xf85$\")\xce3\x95\x14\xe7YeSm8\x93\xbb\xbb8\x93\xb0\xff\xb4N\xae\xabS\xfb)\xee\xdap\xff\xe9\x1e\xca%\xec?\xad\x9f\xf2b\xd4\x9d\x99D\xb8\xdaQ\xc0\xb9\xd3d\x19\n\x98\x974cu\x00\xcf\x04xK\xe3z\xfe\xdc\xcc\x7f\x07\x8eD\xea \xb1 \xf2\x91-N\xae\x1b\xb5\xf8&\xc8)\xcb\xea\xf9\xcbJ>Lm\x1dd]\x01\x01\xe9_\x1dde\x82\x00\x86\x91GF\x1dnQ\x1b\x14\xfaS\xc0\xae\xea@7&\xd0\xab\x90\xd3lo\x17\xea\xac\x03^6\x00\x9f\x01\xd4\xb1\xbbA\x1d\xe2\xef\xc4Z\xd3\xde\xc65\x89\xbf\xbb\xbd\xbc\xe7j+a1\xd6\xb7]\xa9\xfb\xb6\x1b\x90G\xf8R\x9d<\xc3tk\x04\x1b\xdbzH\x90\x9aL\xcd\xc9\xb8\x143;-\x91\x0c*^\xf5\x9aHH<}<\xfb)\x83\x07\xc1~\xe0\x00\xa6\xbb\xbf\x06@\xcd\"V\xb0i\x01\xbe\xf3\xf0\x18`\xdd\xbb\xc5\xb2O[93\xbd\x04,\xab\xa4{\xe3j\xd6h\x7f\xa76\xb2bYL\x9e4\x97\xc4K\x9a\xb1q\xc4\xaf6\xc5:\x9a\xdeA&0hj\xbf\xf5\xe9\xfbZ;\x02\xb5\xf9 \xc8\x01{\x8e\x88K\xc9\x08\xf5O+\x98L\x88\x86#\x0e\xa7\xef\xc9\x0e\xf6\x15\x0d\xb7\xbd\x9d\x91\xef\x0fHapnx\x8e\xdei\xaa\xd4}\x95\x1a\x82\x19\xae\xd7W\xdb\xb8\x9a\xcd,j\xbc'\x89\xe1\xe4\x11.\xe3hluEn?\xc3\xc9\xed\x06S\x9a\x93\x03T\x0d&\x85\xf4\x86\x16L\xd8}\x95Y-\xe0\x011\xde\x89G@ \xdb\xcd\xe0\xf0\x92\xb1\xbb\x80\xc6L\x95\xd6Os\xd8\xc5\x94\xa0\xf3[\xd5\x0c\xc9\x06$,\xf1\xb1\xe6|\x80D\xcafQ\x1d#[\xa8+o\xb3\xa9\xda\x7f\x86\xc7\x93\xd8\xdb\xe9\xbe\x1a\xb7R\xbc\x05\x08v\n\x13\xe3\xfb\x18iG\xf4\xbahU\xa1\x90\xfc\xaf$\xbf\xa2YPeL\xec\xbbR\x14\xd9\x85\"\xbb\xe7\x16\xc5\x10\xa2\xe7\x85\x1aW\xd6\xda\x9f;\xea\xe6Ip\xdan0\x1a\x81mu\xd1\x06\xa9Y\xcf]\xf3`\xcd\xe5U\xb4l\xfc\x0b\xb2g2\x06T\xdak\x81^c\xb1p\x05\x95A\xb6\xb7\x13\x08\x16h\xc3\x12\x9aP\x8ef\x89E\xf5\x1d\xcc\x95\x81\xdcNe4\x8f\xa6\x92\x92U\xb8V\x0bip\xeb\x83\xbeyp\xab\x95fa\xc2\xf7\xf6m\x11\xe5\xfap\x83\x81\xab\x83='bS\x92m\xe28\x1b6\xbd+\x12\xcb\xfe3\x1c\xcb\xed?{j \x1bWo+\xd8/\x03j\xf2xH\xaa\x8e\x8aB\x9a.e(\x882\x91\xe6\xd9\xb2\x9a\xb2\xe4i\xcd\xfd\x8f\x18\xa4&\x8cR\xb0\xae86Jku\xa5\x8c&^-\xed\x1f9Knj\x1f\xa0\xd9\xb2Y\x9dH\xad} asRs)T.\xb2l\x0c!P\xc9\x01\xb9\x1c\x92l\x9c\xb0\x94\x87\xebN\x97\xaejr\xc1\xc7\xdd\xd6\x04\xfc\xba\xe9\xa2\xa6\xaf\x9a\xafF\x95r\x1f\xf5\xac\x98\x91C\xb4\xf2b3V<\xac\xc3g\xe6\x0eRIl*y\x16H}.\xad\xd7D\x15\xdf\xf9\x01D\xe0\x96_\x81\x18\xcb\xa6\x1f\x0f\x99\xac\xafZ\xaa\x0d\xfb\x94\x88%\x15TW.\x85\xd0\xc1\xee\x8c\x8e~\xdf\x19=\x1bo\x8f\xce\xb7\xa7\x83\x87A\xf3\x98}8\x9d\xed\x8c\x9e\x9d\xff\xe5\xcf\x0f\x9bG\xed\xc3\xbf\xbb\xbf=\xfc\xed\xe1\xa1{\xb8\xf5\xdb\xc3\xc1\xec\xef\xbf\x1d\xfe\x96\x9e\xffe\xe0\xfev8\xfb;\xfc:\xac\x97\x02\xb3\x04\xe7\x0fgH\x9c\xaf\xe2\xcf\x17\xf1\xe7\xb7\xdf\xc4\xdf\xbf\x8b?\xff\xe5\x9ck\x03\xa1\x99\xf3B\xa4|\xef\x0c\xc9w\xcew\x90\x07q\x80E\x81\x04\xfeF\xf07s\xce\x07\xcd\xd3{\xe6|WV\x15\xd6\x00\xe6\x00\xf0\x1f\xa2\xf8C\xf1\xe7P\xfcy.\xfe\xfc\xaf\xb2\x90W+\x14C\xa1\x12\xfe\x7f95s\n\x1fFd\xb6-\x87\xf4h\xf4\xb7\x8b\xd1\xf9\x1f;\xc3'{_\xeb\xa3\xb0T\x83\x8f\x80\x0e\xdc\xf1_\x06u\xf85ja\xf8\xdftM\xa5!\x1b\xce\x958\x06\x80\xd3\xe0(j\xd6{\xabo\xff\x89\x05\xfa \x88\xcb\x84V.r,\x86\x89s[\x99\x05\x8f\x976\x83\xc8y`\xe3\xdf\x1ch\x84\xd3\x92\x99Zs\xe7-%Uk\xacEE\x83:\x87\xedF\x9d%\xfb\xe8Yri\x93q\xfc\xff\xec\xbd\xeb~\xdbF\x928\xfa}\x9e\xa2\x84\xec8@\x08R\xa4\xe4+mZ\xeb\xc8\xcaF3\x89\xedc\xd93\xbb\x87V\xf4\x87\xc8&\x89\x18\x048\x00\xa8K\xc6\xdeg9\xcfr\x9e\xec\xff\xeb\xaa\xeeF\x03\xe8\x06@\xdb\xc9dv\x07\x1fl\x11\xe8{\xd7\xbd\xab\xab\xe8\xfa:\x17<\x06a\xa6\\\x8d\xc9\xbc\xa2S\x95\xa6\xe4\xb5\xd2\x1b/4R\xa7\x94(\xb7\x1a@\xdde\x0e\xc7\xa1Q)I\xe9\xdb\xec3\xe2\x12\xbaF,-)\x05^\x05i\xb0f9K\xe1\xebm\x1a}M\x19\x05.\x19\x04\"gU-\x81\x80\xc9Q=,<\x01_.\\\xe7\xc81(s[\x94Q\x8b\x14g\\h\xd3\xea|\xe5xp\xc4\xe9\x02\x8c9a\xa8\xd7\x8f(S\xc6&\n\xf3\x9a\x97z4\x1d\x9e\xc3\x04\xff+\xaeV\xbd{\xb7\xbfD\xf2d\x18\xf0%\xa6\xfb\x99@4\xf89 \xe3Z{|\xf5x\x91\xcbA\x9e\x86k\xd7\xf3a\x0fS\x8d\xcb\xb4\xc54\n>\xe6\x06\xf3\x17\xef\xe7\x02&\x90\x91#\xc3\xa5Ew\xbd(\x07\xf0\x16\xcc\xff\xb2\xcc\xf9/\xeb\x02\xc3\x05J\xc1\x17\\\xf8>\x92\x81\xd0\xa4\xd4\xc1\xdfV\xa4\x8e\x1c\x8e\xe0V\x80\x9bV\x18\xc3\x96\xe6\xa9;\xf2T\x10n\xe3\x07(\xa2\xad\xc9N\x1c\xa7\xd2\xc5\xdf?\x8a82e\\\xac-\xfe5\xd7\xd6\xcd\x8b\x82\x91\xffl\x8by\x02\x13py\xe5\xeb\xe9\xf0\xdc\x1b\xe4\xc9\x0f\xc95K\x8f\x83\xcc\xe8>^\x15\x08O|\xa0-\x15\x13\xbb\xaey\x1f@m\xb4x\x19\x81\xab\xa6\x18\xc1\xf0r\xb0\xc6H\xea\xfb?q\x96=\xfd\xe9\xdf\xdf\xed\x9f\xf7\xfe]\xfc\xbfo\xbc\xef\xca\x87\x8dn\x83\xfb\xfb\x0e\xc2\x8e\xea~\xe8\xc3\x81a\xd4{7\xd4\xdd\x9d;\xb0\x9e^\xe3\x8dZ\xb74\xec\x03\xaf&\xd5V#\x91\xd6\xe7\xb0\x87m\xf1-,\x9a\xdf[N\xaf\xcd\x97t\x95&}\xe6\xc3\xb1\x8f\x9e\x87\xfd\x91\x8f\xde\x82\xc3\xc7\xf0\x0c\x9e\xc0F]\x85zfNP\xc6\x1f\x81\xec\xeeK\x1c\xbeD\xf4\xcd\xf4\xd9\xb9\x88/\xdc'tz\xcf\x87\xf4\x12\x9e\xc0{z\xcd\xfb{iP\xaa\xb8^J-\x1e\x13)\xa1\xcaGpY8\xffpJ\xf2\xef\x98\xa9\xbb\xf6\xd2\x87\xf7\xa2\xdf3ZO\xbcw0\xf4\xe1\xd8S\x90\x81\xaf\x8e1\xa1}YM\x98\xb3Y2go_\x9f\xaa E\xee\x99\xe7\xc9\xb5\xb1(\xbd\xda\x82-\xba,\x18_\xf2\x97\x8f\x8bi\x96\x17n\xf1y\x0bG\x15d\xb1K \xfce\xddG[\x95\xf7\x95Uy\xef)\x12\x94f\xec\xfb$\xcb]\xaf\xae\x14\x95\x7f\x7f\xf8\x00\x8e%\xb3\xd6+<\xd7&\x9c(U\x12\x8e\xe7\xce\xb9\xe9[\xe9\x974'\xf4adP\xd5\x11\xec_\x99\xef\x81+\x00\x7fS\x1d\xb2\xa0\xec\xfb\xef\x06\xfb\x9e\x0f?r\x82\x83\xbb\xe8\xc3\x1b\xb9b\xb4\xa1?6\xee$\x88Y\x9e\xc2\x04\xdeL\x9f\xb5\\\xa2?Et<\x15\xd4e\xdezq^\x0d\xffgA\x85_\xd0\x10_\xc3\x04N\x15\xa0\xbd\x80'\xf0\xfa1\xbc\xe0\xa3<\x1d\xccVAz\x9c\xcc\xd9\xb3\xdc}\xe1\xc1S\x18\x1d<\x80#\xf8\x19z\x13pn8\xcf\xc5?O\xa7/\x1a\xc6\nrY\x7f\xee\x97\x8b~ \x19\xc2\x198\x1e\xf4\xe0\xd2\x80\x15\xcf\x8b\x12\xedc\xb9LY\xf0\xbe\xb1T\xdd\xbc\xd4\xfc\xa5\xfe\xd6\x88GO\xe1\xe0\xde=\x99\xeeA\x1b\xbd\xe3H\xc9\xc0\x86\xe8eV\xec\xc3+-vvQ%\x1d\xe4\xc9\xb3\xb3\xe3\xd3\xd3\xf2\x17\xd3\x05b\x0e2\x7f\x93\xbd\xa0\x15\xe6\x08\x9c1\n\xa1\xea\xcd\x98\x83\xbeq\xbe\xdfu%D:\xe9\xfb\x0ez\xf07]\xe8\xeai\x8d\xf0))\x01\xc8\xba\nRb\xf2\xcd\xeb\xdb\x07\xce\xbb9\xccp\xea~)\x08\x9d\x06H\x97^+\x1f\xbf\x9a\x9e\x9c[.E\n:\xc5i\xd6\xac\xe06\xad\xa4\x8a/\xf5/\xbc\x8e\x95L\xf1\x8e\x05//\xb8\xd1/\x8d\xa8\xcf\x1b\xfd\x96\x8b\xd8q\x8dm\xfe\xd2\x80\x02\xdf\"\xc9\xff\x05\x97\x05\xabg\xb3`\xc3x_\x8a\x17!y\xfe\xc5#\x84\xfa\xd6L\xde\xeb\xf0^\x97A\xffR\xe2\xad\\\x92/\x18\xef_\xb4\xbd&\xcb\x9e\x92\xbe\xfeR\xe1\x8aC\x1f\xfeR\x05`\xde\xfc\xf7\xe5\xe6\x8f\xaa\x88\xaf\xad\xe9\xf7u\xf1]u\xf7\xbdW\x11\xb1\x8b/RH)\xc6*\xcb\x94\xa4||\xe9\xd5G\xfd\xfd\x8eb\xfdeQR\xd3A8\xb1[NO\x10\x90\xcb\xb8\xa1\x82w\xab\xd2\xa6\xfa\\9\xabj62\xbb\x18\x0d\xc8\x04e\x05e\xd0\xea\xd8\x04\x8d\xbf\xaa\x88\xb54\xc1&R t\xaf\xbfA\x0f\xfe\xda\x80\x89\xba\xba&\xf43\xfc[\x1a\x16+JP%^p\xdd\xc8i:eU\xd4\x05\x05P\xc3\xa0\x992~\xe2?\x06Lc\x9e\xa7\xc5\x199|\xb6\x1f\xfa\x9c\x88\x92 \x7f\x02\\N\xae\x03\xae\x8aM\xac4'\xec\xbbNhc\xf3&\xd4\x0b\xa6Z\xcc\xe2\x95\xadPh *\x1b @\x96\x87YP\xed#2\xcb\xdd!\xf5\x14+\xe6\x18#\xc1*\x9c\xd1\xb0.\x86\xe0p\xberD\xc0\xc7r]\x0ex\xfc[\x0f\x8f\xad\xb6r\xe2\x18\xa8\xabR\x94/\x14-\xca\x16ij\x0fB>Ht7/phz\xf4\xd5y)ZOSLQ#B\x96\x89\x8a\xc7\xe5E\xec{\xab:q\xber|p\xfexp\xe8\xe0\xd7\xd4FEL\x87<\x96\x83\x18\xdc\xa2\xf2\xe1\x8b~.\xe3)\xba\xd5\xd2\x97\xe1\xf4\xc7du\xac\x18\x1d\xcd6\x91\xdcl\x16\x85\xe24K\x1b\xa1O\xd4\xb0\x81\"\x97\xe2\xb7`\xbb\x14\xc2\xa5\x8aQ\x9e\x8f\x14e\xf8\x18\x02x\xa2\"\x84>\x86\xc0\x9ef\x1d\xfdO\xa6\x81\xc9\x83q\xba=\x17\x086\xdd\x9e7\x8c\x8eB\x93\nQ\x02\xbd&V>\x97\xaa\xc9\x96\xc89H\x11\x0cH\x1d\xf5i\xdc$\xae\xcb\x0eL\xe1\x1c\x85\x82\x90\xd4\xba\xd1\x9c\x93\xd5\xc3\xac\xa2Uu\xf8\x18\"x\x02E\xd6\xf9\xa8Y\\\x9c\xc1\x04\xb2id\x11\x17\x1d9\x16B\xb5\x19\xe1\xf1tF\xd1\x08f\x06\xf1\xd5z\\\xbe\x9c\xc6jf\xe2:zI\xc0\x88\xcb\xd2E\xacNN\xeb2\x86ya[6\xadXW@g_\xf5\x8bHU\xd3\xa2\xa3\xb4\xbe\x9c\x16u\xcem+Z\n\x96T\xdd\x9e\x0dm\xcf\xa6dB\xda\xb4\x1b\x1e0\x04\xf1t\xd3\xa0\xcc\xc7\xd39\xed\xc8\xdc\x12K\xcc\xf8\xb6\x11L;l,\xa1\x82f\x95-\x16\xc8\xe7\xb8\xc09\xf8\x87\x0f\xb0./\\i?\x99\xfaQ\x9f\\CD\xb7R@D\x97U\xc4\x16O\x9a\xf4\xf7\xb9\"\xb0\xd2X\xee\x9e\xcb\xa4\x8a\xb8\x1a\x90=\xc0\xabEx\x92O1\x83\xa2\x162*V\xd2E]V\xd6\xaf=$\x07\x1c\xa8VB+\\)\xe3\x03~]\xe9\xfe\xf8\xf5\xcf\xa5\xf5Y c\xc3\xbe!\xdf\xbbmC\x94\xf0\xcf\xc4\x9f\xbcM)\xff3\xfa\xcb\x17\xd8G4LL\x93+\x0b\xb14\x922\xfc\xc3\xd7\xb1tR\x999\x13\xeat,}+\x18\xfeQ\x9a\xc2\x87\x0f\x107H\xff @\xfc\xaa\x8c\xe8\x16\xc1R>x\x04\xd8\xa2\x03\xf0G\xd1\x90+\xe8\xc1m\x87\x05T\x18\xa1y\x99\xe8\x02\x91\xa2\xd4\x9f@\x83\xe4IU\x99\xce9\xe2(\xa1x[H3\xf5\x05\xb8(\xed\x173\xb6\xc4:\xb5t\x0d\x13\xb8\xe0\x8d\\\xd2\x16a\x9bD\x17E\xedz\x9d\x13\x98\xc0u\xfd\xf5MmR\xdad\nL\xe4\xfdL\x0d\x11\x17\xcf8\n\xafJ\xb4\xa0<\x90z\x1b\x1a\xb9\x06:\xfc\xd0X\x8bA9?\x13\x1c\xa5\x84\xa7\x1a\xdc\x92sN\xb1\x08\xae\xe0\xe77\x1c\x81\x8f\xe8\xbf\x89\xfc>\x86\x1b\x85\xb0\xf4\xca\xf34t\xe2\x0d\x97YM\x99@P_\xac\xdc5\xabu\xbd\xa2\xaeW\xd45\x93]\x17\xb4\x82\xa9\xae\x15q\xc2\x0c\x7f>n\xedu\xad-D\x135+^\xef\xc23\x13\x01)\xca\x90R\xa6\xba\x8e\x15\xb6[ B\xa9.\xbe<\xd2\x7f\x8c\xb5\xba>t%T\x1c\xbc*WY\x903\xf0\x8d]\xa9\x13[<\nso\xe8*\x8b\x0f7\x83M\xb2\xe1\x18\xc9\xdf\xdcH\x17\x96\x95\xd7\xb5[K\x7fx\x08\xffb\x1bE/\xd3\xb71Et\x9e\xbb\xb2\x19\xa3|\x8c\xe0\xe7\x95\x17M\xad\xfa\x8d\xe4A>\xb8\xaf\xb8\xd2\xbc\xe7\x16@H\x7f\x15\n\xed\xbf;\x1eyD\x17\xdf\x04b\xfc\xbb#\x8e\x92\x14\xf1~U4\xac:+\x0d\xe1U\xc1\xfd\x1a\x88`\x87\x85\xf2A.\x89[`=\x8eF{/\xe9?\xdf\"E\x93\xb5\xf2p\xa4\x13\x901g\xa2\xa8\xb1\xc9\x11\x1c\x15\x83\xc1\x8f\x9f*\x02\xee\xdd(xQ\x93\xdcT\xbd\xf6J\xbd\x8a\xb1\n\xad\xb5\x18D!\x9dJ\xd2\xd1*\xe9+\x99\xe5\x98v\x1e\x8dw\xfd\x91\x87^\xb0\xefiA\n\xca.\xff\xba)\x0c\xfaB_w\x06\x84e\xc7\x88q\x03\xf9\xcb\xd3\x10\xf0X\x9c\xef\xfa\xf0\x12\xfb\x92\xb2\xe6Kx\x8a\x12\xe8\xcb~\xdf\x03\xd9\x0e\x1e\xc0\xdeL_\x9e{\x9c\xd4!L\xcd\x98\xfbR\xdc\x7f+:\xe0J\x7f\xf9\xb3O\xa6\xe81<\xc3\x81\xd5>\xf6\xfb\x06Z\xbcG\xe7\xd5'\x16\xc3\xf7c^\xed1<\xf34*\xcb\xc7Pi\x89\xb2\x10\xead\x9a\xaf\x95\xb8\xfb\xf0\xf0\xfe\xdd\x07fM\x8ck\xfc\x87\xf7\xcd\xdff\x18f\xdc\xf8\x89\x83\xf9\x81\xa5\xda\x867\xf9\xd0\xfcm\x0e\x13xP\xbd\x13'\x1f\x8ez\x0f\x0e\xcc\xdf\xb8n9:\xb0\xb4\x8a\x91\xf1\xfa\x16]s\x89~\xc97q\xbf\xbfo.\xc0\x05\xa1\xfd\xe9O\xefn\x0e\x86\xfdw7\x0fN\xce-\xe5.\xb1\xdc\xbb\x9b\x83\x93w\xdb\xc3\xe1\xf0\xe0\xdd\xf6\xbb\xef\x86'\xfc\xdf\xfb\xa3\xf3\xfd\xa5\xb9\xd2\x855\x8f\n\x7f\x92+\x96.\xa2\xe4z\x0c\xceK\xf5'Em\x8c\x19\x9bgp\x1d\xceY\na\x9c\xb3%K3\xc8\x13\xd8\xa4\xc9\x8ceY\x83b\xed\xc4I\xde\xbf\x0c\xb2p\xe6\x8c\xc19\x8d\"\xb6\x0c\"\xd1*\x17\x1dn\x1e\x0e\xc1\x8d\x93\x1c\x02\xc0R\x80h\xb4I\xc28\xf7\x9a\x9a\x0d\xe3\xab \n\xe7}l \x9b\xa6\x17\xd4\xb49\xf1\x9d!\x9d\n\x08\xc55\x82>\xcc\xcc\x9f\xb9\x8e\xfac\x90\xaf\x06\x8b(\xb1\xe5\xae\xe4:\x01\x19\xb5\x07\x8b4Y\x1f\x0bo\x1a\xcd\x9dX>\xca\xad\xf8\xcc|<\x00*\xc6\xfe\xeb ^\n/\xdc\x8b)3\xdaE\xed\xad\x1f[o\xd4A\xd5\x1e\xaeB\x85\xa2I|z\xfe\x18b\x0c\xc4\x9eR\x84X\n]n1hI?\xe5\x9d\xc6\xf6\xbeql\xc5\xb0\n\x89\xc2\x0e\x07\xa9\xe1\x00P}\x93\x02y!\xef\x82<\xf8\x89\xb98\xd5\x03\xf4\xfbC\xceON=)\xf4\xe0\xd8\xa5\x13Su\xe6r\xe9s\xc9\xd6S6@\xca \xeb\x15N;;\xcd\xfe\x99}\xdf\xd5\xb6P\xac\x06\xda\x0e\x1f\xaf:\x0d}\xe1D-\x05\xef\x84\xae\xa9\xb9\xa4jk\xee[I\xaf\xe7y\x1c\xb5\xee\xdd;xt\x9f8\xc7\x93 \xdc\xbb\x7f8z\x84R\x0b\xaf\x08G\xfc\xc5\xc1\x10\xe3\xa2\xdc\xbf{ot\x00\xe24\xad\xde\x96G\x01\xce\xb8\xbc\xea\xba\xa3\xe1\xc1!\xdc\xe1\xbb\xf7\xe4 \x8c\x86(\xc5\x88w1\xffq\xff\xde\xbd\xc3\xfb(X\x89*9\x17\xa0\xb8r0\x06\xf5\xe6\x0b\xc2\xd2K\xfbj\x8a\xf6\x10\x13\x9a\x8f\xe4\xe4#O\x9el\x00\x05\xfa\xbd\xa1\xa78\xd7{\xa0\x0e}\n\xa3!\xdc\x01\\\x9e\x0f\xb4\x1dB\xa0\xa1\xb5\xff\x00b\xe5\x18\x1d*\xf2&\x0c!\xcd\x01\xcf\x02\x05\xb4\xed\x08l\xaf\x1aQM\xcd\xa5\x07\x07\x07\xd0\x83\x07\xf7\xe0\x1bp\x19<\x81\x83\xfb\x1e\xf4\xc1u\x87\x18\xcd\x0c7\xfb\xden=\xbf\xb1\xdd<\x90\xcf\x95\xb8\xfd`I\x89\x82\xb8\x80\x98 Gp\xe22\xd8\x879\x06\x95\x03\xbe\xae\xc2G\x81\xde\xe7\xdec\xdc\x8fk\xf8\x06\x16\xf8\xf91G\xe4 D\x1e\xae6\x95\xban\x06\xbb\x13\x97\xe3\xbe{\x8d~3\xf0\x0d\xf0*._\x99\x8d\xb7\xdb\xc4\x7f\xb4\xc3\x98\x86\xdaz\xce\x18L\x075\xf7a\xe9\xc3-9\xe2\x98\x8c\x9a\xf2\xb9\xd0I\xb6\xb5\xd4\xb5\xf9\x16\xbe|8\xbf\xba\xb2\x7f>\xae\x1b\xc8\xe4\x83\xfb\"(\x85\xeeA\xbd\xf6f\x82\x82\xd0\xf3\xe1\xc4\xbdF<\x86\xa7\xc0'xc\xe8\xea\x86\xf0\x9d\xca\xf1\x89\xfe\x11\xb3\x03_J\x0b\xd1u\xaf\x87\xa1\xa7n\xba\xfa\xfcA\x81\xfb/\xdd\xcb\xddp\xfc\xf4sq\xdc\x87\x0b\x9fC\x9b\xb8>QMr!\x1f\x04\xccK\xe9\xc3\xf5\x0c]\xb6\xa4\xb0\x96#\n\xa3\xa8$\x84\x83U\xc9{\xe1\x92c\\\xe0\x11tN\x83s\x8e\x9e\x02\xd5\xde\x13j\xdd\xb85\xaf\xa0R\xc7)\x06{\x99\xc0{\xd5g\xa2\xd5^{\x84\xd9\x97\xed\xa8\xc5\x91)k\x19\xdcS\x91\x81\xfc\x16\x9e\x88,\xe6\xbc\xd6m\x837\xa8h\xba\x0fy\x81\x1a1G\x0d\xf7\x02c\x82pBn\x02\xda\x98C\x12U\xe4\x84\xfe\x82\x96rk\x1a\x9f\xb5o\x10\xa6\xc7\xd2\xea\xe2\xf8{\xbd\x18\xa1\xb8\xde\xef-P\xda3\xfbb\xc9\x07g\xc6IK\xec\xa3\x8e\x1a=\x96\xc8\xcc\xd1q\xce\x919\x14\xc8<\xe7\x0b\x17j\xc8<\xc70(\xdec\x98\x0bd\xe68\xb8\x81>\x87<\xa9\xe8,\xfd\x02\x04^\xb9K.\xf3\xc2\x1f98\x0e=O8\x15\x9c\xb8\xc7\x0dF(O\xf9\xb4\x13OAj\xafW\x97\xf0\xf4\xe7c\xaf\x17\xf3R\xf5\x84S\xd0\x86\xc7\xef\x9b\x84\xa4\xea\x9b\xadU\x17\xbebi\x16&\xf1\x18\x1c4\xe6X\xb4\xd0\xed,;0\xe5\xb2\x96\x0f] \x1a\xc33;\x9b%\x1f\xb01\xbc4O\xd5b\xb4\x10\xed\xfeh\xfe,\xdb<5\x7f\x16.\xf6\xe3\x8e\x12\xb1\\\xd8\xee2\xb4V\xebv\x90\xb3,\xa7\x98|\xceM\xdc\xef;\xd0#\xd2iJ\x99-\x9f\x8f\x16\x02n\x9b\xcf\xdb8\xa4\x19w\x1b\xdfg\xcdh\xa9\xcd\xe8GW\xe6\xa6\xb9[\xb9k\xf8i\xf3\xab\x83\xac\x0fZ\xbeD\x94n\xac\xa6Y\xf9\x88qn\xeb\x8d\x15\xc1nP,g\x14\x02\xd3\xd5c}$\x15\xffC\xdd\xe3\xcf\x90\xe6\x86\xffy8\xb2d\xbb\xe9\x14\xdfC\xef\xbc<\x1f\xe9\"\xd8\xb6\xabb\xbe\xa6\x0c%\xe5\xb9\xf8\x95\xe6\xc9\x91\xaak\xf3\x16K\xab\x88\xf58i\xeb\xec\xc56\x8a:v%\"\x85vjR;1\xde\xad\xf5\x1dC\x89u\xda\xcb|@\x84 \x0d\xf8\xf2\x16z\xec>|\xf4\x88+\xb7\x03\"Kd\xdd\x97\xde\xc9@q\xaa\xba%\xf3.\xf7\xaa^+\x91,m\x8a5\xd2\x12\x99J%\xb1\xa9e\xf0\x81\x96\xb0\x87>\xd4l\xf8x\x84\x81G\x89w\x1cbzxC\xd8\x99\x18\xf2\x8a\x07\x86L\x90\xa19M1zC\x0c\x853D\xe5\xc89\xa8\xb7\x8cqE\xde\xf5\xf6+\xc29\xd3\x0ckU;\x8ct\x01\x1d\xb1\xc3\xca\x888\xac;1\xe6\xa3\xd1q \x1c\xac\x83\x9b?\xb3[\x14v0\x85\xa9zch:\xd2\xcdW\xa5\xaf\x99\x0c\xf5\x19I\xc9 \x13PV\x1bQ\xd61J\xa4\n3\x8c,\n\xbd\x9e1\x833zLJ\xa9{\xe5\xa3\xc9\x9eMg\xc5\xfd\xff-\xfaQ\x0fm\xc6\xc55\x17\xaf\xd5\x81\xa7)5\xc6\x1a\xed\xd7p\x04\xee\x02\xcb\x16gTk!D\xa9wk!\x8c\x8eEY\xfa\x8c\xc7\x94s\xf3\xed\xe1\x85\xe7\x83\xe5b\xf1\x86k\xd6n\xe0\xc3\xdc\xa3\xb0\xd3\xd39\x1e\xb4\xf3\xffI\x16[a\x1cTr\xe0\x9c\xf2\xff}X\x9d\x17\xafV\x16\xec\x87\x02a\x82\x02\x0f\x8a\x89\xe3\xf9\x97\xcc'6\x083\xfc\x9f\x83e\xab\x8by9Q\x90\xb8\xba[CJ\x19&\xb2\x1ecgw\x02\xa1\x8f9m\xf4IWYld\xf8\n\x030atO\x89\x94\xcdA>\xebpB\x95/)gTKm.)\xe5\xe9\x96a\x94\x8bE\x10e\xcc`\x8a\xa4\x06\x05>6\xe7B\xc9\xbe\x0b\xe30g$\xb1\xd0\xc1s\xbd\xbd9[\x04\xdb(ol\xc9q,@\xf3\xd1\xcc\xce\xeb\x84\xb2\x16sX\xb4l\xa7\x97\xbe\xc6\x0dA\xdef\"\x91\xc8\xb3\x1c\x7f\x1eA\xe8\x06(\x9b\xa8\x01\x046\xea\xc0I\xa4\xe1\x16F\xea\x06x\xb5\xc2\x90wW\x8c8qI\xe3\xe3\x9d\xf1\xbf\xba\x08\x92R0\x83\x9e\xb9Of\xb22\n\xa3/\x86\xc2\xb2\xd7\xe4c\xa9\xde\x1c)U<2W\xdc\xd24\x1bF\x84\xf0\xf2\xfb\xa2\x04\xe6`o&\xd6O\x0e\xfa\xeb`\xa3\xe5\x92\\\x07\x9b\x1a\xdb+\x9d\x85M\xcfKV\xcb\xe2\xb8%\xed\xf5<\x99\x035w\xd94\xe5\x05-\xfe*\xd5d\xa8\xa0q{\xcd\x81\xbfy\xbd\xae,\xf9O\xcba,\x99\xd7Y\xb6\xa1 \x97\xbfR\x1a\xd4\xda\xea\xef5\xeb*fb-\x9fn!0\xe5#\xc6\xee\x96\x82.\xe5\x82\xde\xc5\xec\x1ar\xb7\x80(\x97S\x8e\xcb0\x0e\xd2[\xc7\xf3\x8a\xd7\xcee\x90\xb1\xfbw[-\x07V\xa5\xe8\xde]O$M\xed$\xce^iY)\xcdA\xdd\x0f, \xcf\x0f\x87\xe6\x84\xe7\xf7;\x05\xf47\x1c\xc8(\xde3\x01\"\x9d1\x14\x19\x0bb\x91\xb1 uC7\xf6\xd0\xc2\xaa\xc4O_$ \xc6P\xacB\x17\x8e\xd1\xbeV\xb8\xe6 un\x81*}@\x9f6p\xc9 \x84\xbe\x8c\xd7o\x14\xc7`\xf0\x84\xe6\x81\xf0\xe0)\xad\x1a\xaf.j\xa5\x9eN\x14\xd4\x90\x13\xf4n\xc8p\xa5%\xfe5E\x84\x1f\xd57\xf3n\xdb\x86YfL\xb9\x16\xe0\x03\x84m2\x92\xde\xc0^C\xc3\x16\xed\nt2\x9b\x9bQ\xd0\xaa\xaf\xc8\x95-.\xfb\xf9\xb0?\xfd\x89\x02\xf2\xbd\xeb\x7f\xf5o\x7f\xbc\xf3\xf57\xbd\xc1\xbb\x9f.\xfe\xcf\x87\xff>\xdf\x0f\xa5m\xc5\x12\x88L\xfaw\xccVA\x1a\xccrtD\x81\x15\x0b\xe6,\x85E\xc8\xa29\xc4\xc1\x9a\x99\"h(\xf2_\xb2\xd2\x94\xd1\xda2\xe7\x8ef\x87\xb6iW\xf5msg\xa9\xb93\xc9 \xcc\xd4/f7\xba\x19\xc3F$Ak\x88I\x7fK\xbbqWL\xd0\xde\x16\x7f\xe6I\xcc\xc6\xba\x8d\xca\xe0\x10\xa8?\"6\xbb\xd9\xb0\x0b5Rk\x7fkH'%\x06\xbc\x1a\x849\x85\x88\xa7s\xf9)%/\xa5\xb7y\x92\x9e\xef`D\xab\x8f\x13\xe3\x97u\xda\xca\xc4\xbc\x95\xe8\x9f\xb8\x0e6\xa8\xf6\xfb\xe50\x81\x89\x0c>z\x12\xccV\xed\x81\xb1Us\xc1f\xc3\xe29%\xbb\xa9\x8f\x98n`\xa3G\xb5.\xab \x85\xc0\xd0]\x97\xbe\x18:\x98\xb3\xe9\xc8\xe4\x94T\xf4\x88{ \xc4\x93%\xcb5\xa1\xe4E\xb0f\x99\xcb\xbcz\xff\x9d\xe7:\xcd\x1b:\xef\xb4G\xa1\x9d\x9e\xb1\xc1e2\xbf}\x9b\xb1\xb9\x12\x1e_\xa5\xc9:\xcc\xd8 exC\xbaB\x9c\x9eE)\x0b\xe6\xb7\xc0\xffuL\x87jE\x8b\x18\x90\xad\xd3\x00\x83f[\x1e\xbb\x96\x83j\x0f\x02\x0e8\x84$\x8e\x92`\xde\x05\x05\xf8\xc3\xc5\xa6\x94e\xdb(\xb7Y\xe4\xb1I\xc6W\xa0k\x9b\xb1\xcb\x06X\xa1\xb3\x11\xbc\xdb^n\x9bI'_\xab\xef\xc2\x88\xbdFva\xa6R1\xca?&\xe7$I\x0f\x06|w\x9feZ\xb2c\x12\x97:\x8d0k\x826\x94\x9dj9\xef\xabn\xfdP\x99Q\x91b\xd8-\xa5\xe9l\x98A\xc6\x08t\xf5\xaa\x18\x82B\xa4j\xec4\x95\xa8)K\x05\xe2\xa9\x0e\xeb2\xdc\xd1E\x18\x87\xf9\xb7\xc9\xfc\xb6\x93P\xcf\xd7\x85\xaa\xf1\xb6N\xe3\x10\x19\x97\x91\xc6\xe9UL\x07\x01\x1e\x14\x0d\xbda7\xd8\x90\x9d\xf3i\x17\xc1.\xa3\x04\xc3\xda|\x1b%\x97\x9a~\x15f\xaf\xe4\xdf/\x17B^\x91\xed\xf3\xa2\x9d\xdb_$\xe9\xfay\x90\xa3\xf3\xf4w\xe2\xef\x8e\xfd\xc8\xe2\x9d\xfb\xa2\xcb\x05\x18\xcc\x15-\xaco_\xffp\xa6\xbd\xea\xd8\xad\\>M\x9d\xea\xd4{P\xa0\x0c\xe0\xf5d\xb9\xb4\xebJ\x07\x1an\xc1\x84\xe3\x8cL'\xeaC\x0d\x1a8\x1c\xf3\xf5v\xa7\xc6\xfa6\x97Uh\xbe\x07.\x1f\xbcXT\x1e\xf9\x87\x0f\xb0\xa7u\xd0\xb0f\x80WH+\xb2\xac`\x15\xdb8\xdbn\xb8\xa8\xcf\xe6\xf0\xad\x9c\x0d\xaf\xd9\x16\xfc\xada\x95\xecH!s\x94T\xb7\xd0\xe6\xe2H7(\x90Lf\x9ci\xbb\xce,\x89s\x16\xe7}\x1a\"\x1e\x1a\x9a\xb0LE\xc6\x11u\xb3Z]\x1f\x9c\x9c\xdd\xe4\xfb\x9b(\x08\xe3\xc7\\\x8c\xcfX>y\xfb\xe6\xbb\xfeCG\x05\x97-\xb0H\x86\x8cRo\x06\xbc\x95.\xdd\x18\xaayx\xd1\xf5\xd3\x91@\x8d\xa6qz\xc1f\x13\x85\xb3\x80S\xb6\xfd\x9b\xfe\xf5\xf5u\x9f\xa3x\x7f\x9bFda\x9bWgm\x94`\n\xec \nxI4\xa5\x95\xbf\xca\xeb9!\x8521\xef/\xf2\x1b[@j\xbdPy\x11\x0db\x90\xc8\x04P.\xd6\xa5=\x0dz\xad\xcd\xb6\xe2v\xa7\x9e$\x954`\xe1,\xd9r\x8d1\xc9QdS\xe4\x17x5\x082\xe0\x8bnC\xc8\x1d\xc6\xcc\xb1\xadj\x9d\x85BP-\x91\x97\x0e[\xac\xf3\xd8\x1a%8\x92;\xcfq\xd4\xbeO\xa5\xe5\x17X\xc7g\xebz\x83|\xc5bwk2D\x8b\xe1\xe6D\xfeZh\xd2m \x8ak\x05\x06\xc1Q\xda\xfb\xd85i\x88n^\x98\xf74Kx^\xb1\x84OQ\x956\\yq\xf3i#\xeb\x95\xda\x8b\xddU\x0b*+\xa6/D\xa7\x95\xfb\x0c\xb4\xe7\x00\xbe#\xda\x97\x91\xddB\xd1uQ\x8fj,\n \xae\x15\x9dt\xb4\xe7#\x94\xa8\xbah@\xd5\x9f\xb3$\xfe\x9c\xb6\xfft\xf6\xf2\x05\xf9qX\xa9W\xe9\xbdMY\x98Y-\x18\xf2\xcc\xc5U'\x80\x7f\xff\xe8\xa1\xeaP_\x7f\xa4\x15\xba\xb5\xc4x\xe6\x0f\x06\xf5\xddhK,\xab\xeb\x0d\x92\xd06%\xb7\x85m*S\xed\xccR6gq\x1e\x06QFn\xdf\xc5o\xaeF \xf9\x00\x8a\x00\xb7\xe2\x05\xa1X\xe22\xf9FE\xfe[\xb3|\x95\xcc\xb11\xfaS\xbe'\x87\x19\x86\x7f\xf8t*\xaa\x1cx4I\x18\xef\x1cC\xe9\x9d_\xb57\x18\xf6P\x13\x0ci\x96\xca`i^~\xc3\xec\xf3\xd2o\x19\x98\xb3\xf2\xceI\xd6a\xee\xf8\xb0W,NE\x98\xb2/Vn_\xacv\xd2W\x98;\xf3\xe4\xedfc\xcf\x04\x00\x05\x1a\xdc*\x8f\x0ftF\xef\x8f\xb8\xbcit\xe7\xfb\xe8\xe6r0r\xe2\xc5O\xe7?N\xde\xa8\xe8\x87k\xe9\xf8\x84\x7f\xa8\xc2\xe2\x87\x96\xc5)e\x0b\x96\xa6( \xd0[\x17\xdb)BRj\x1d|\x7f\xf2\xecy\xed\x0b]\xc7\xb7\xc0<\xaa\xdex\xd12\x8a\x92k6G\xb6\xf0\x1f'o I\x81\xb7\x06)\xfb\xdb\x96eyfB\x08\"rR\x83w\xe3nV\x99E\x07\xab\x8c \x83MV{L\xb1!/\xdf\xddq\x0cV\xc3F3B\xabxP\xbam8i\xbam\xc8\x9f\x94.\xdd\x93\x05]\xcb&\xd2\xc3l\"\xd0V\x1d\x0f\xf7\x04\xf3\x9b8\xc6\x06\xec\xcc3\x97\x16P\x83[\x10\xd7\x91\x0d\xaf\x13\x83\xf4 \x16S[W\xeb\xf6\xa6}_\x93\x86\x0d\x951\xf4\xd3\xa3w\xf1\xfe.\xbbY\xdb\xacq\xdb\xd5\xd0b\xa3\x08\x8a\xec\xe2C\xed\xb6\xbf\xfeH\x7f\x07\xb9qc\xa7\xb9A\xd0\xf7*\xf5\xab\x9e\xb5\xf2\xf9\x9c=\x98[\xf9*q\x84\\O\xb8B\xaa\xf3\x04\x1c\xe1\xea#\x95\xe4,\x0f\xf2-'\xb7\x0e\xfd\xe5`jLN\xf3\xe4\xa71\x1c\x0c\x87\xa2t\xf2^\xc5\x8b\xa5\x8fO'\xfc\xab\"\xe7\xe2\xed\x138TU\xe8\x95\xb49\x14\xbfj\x1da\x9118/\xff,\xc7f\xe7\x05\xbe\xce\xb5r\xfc_\x84\x9a\xab\x90\xa9j@\xd5\xd2/4\xf0\xb0\xc1\x82\xe5\xe68rW\"\x16\xa0\x19*tS\xc2\x18\x9c\x8a%\x01\xa7g\x08w\xc6\x1fy@5\x06\x87\x0e\xa7\xa80\xfaX\xcac*|E_\xcd\x8dp\x85m\x0cN\xa1\xd0h\x8dp\x0d\xa3\xf8\xd9*\x00\xf2'Oo[\xcca\xda\xa1\x03o\xdf7eO\x96\xcfG\x98\x05\xe8R\xd7\xd5\xad~odo\xcb\x8c8\xb6l\xc0R\xaa\xe6k#\xfel\xda\x0bM\xfd\x1e\x83\xa3)\x1aT\xa9\x8e\x9ef\xd1\xa8d&\xf4\x10r\xae0\x95\x9dtv:\x95\xfa\xd6\xb9\xe3\x17.P\x85\x1aV\x7f}\x1c\x05\xeb\x0d\x9b\xd7\xbf\x9e\xc6\xf9\xe8\xbe\xb9\x92\xe9\xfdi\x9c\x1f\x1e\x98\x8b\x9b\xde\x7f\x17%\x81\xfd\xc3\xfd\xbb\xe2\x83\xe5z\xea\xba\x93\\\x06\xba\xeb\xc6\x9d;\xc07\xe9/!\xbbn0\xbf\x99\x81\xc0<\x88\xa5\xf4K\x13V\xda0\xe3\x8d7;[\xe9\x8f>\xb4\xc2\x01\xb8\xd5E\x8d\xc4E\xf3@\xebP\x93h-\x11\x9b\xa8\xf8\xbbX\xd9\x11\xa3\x90\x0cB;\x8f\xdd\xd4\xc2\x82$\xcb\"\xf10\xd8L\x99\xe5\x8e\xa1V@$wO\xa0\x07\x8e\x8f\x81\xb1al\xba\x8f\xef\x97\xc6?g\x11\xcbY\xa7\xad\x17EU\x97|\"\x86\xbc\xda\xe5\xf6\x97,\xef\xd4\xb8\xda8\xb9@\xc4F\x82\x8c\x0e\xbb\xf5y\x8e\xcb\xa9R-\x1d\xaf\x82\x9d\x1c\xd0d\x07\x15\x07<77;w\x96\xfb\xca*\x93l\x80\x80\xf2\xea hk_\x08Ym\xb9Y\xe5SI\x96-z\xf4\xacs$\xe7B\xa6\xfc\xe1\xd4\x18\xe3s\xbaqT;\x957\x8c\x11\x9d\";\x98,\xa4u\xd1vkV\xdf\x8f\xba\x83A\xc3 9\xe0)\xb9p\x904\xa32\xfa\xde\x9bM\"\xfaT\xd0\xd5\xe57\x98L\x87\x99\xd8N\xef;\xce\x84\xc5y\x1a\xfe\x16S\xe9\xb6/S\x0eL\x06\xcf\x0fh\x99R\xc51H\x9b\xa1\xc9E\xc8\xb0\x00\x96\xb3\xf8[\xe4\xf3\xcfO~8ys\xc2\xf9%W\xd8}\xa1\x9e\xfb\xe0\xbc|\xf5\xe6\xf4\xe5\x8b3\xfe\xe7\xab\x97g\xf8\xe9\xd5\xdb7\x8ea\x81fZ\x97\xb3(\x89Y\x97\x15\xd7\xa4\xb2\x19ZP\xfc\x86\x15\xbcL\xe6\xb7\xfa)\xdbi\x1cZ\xee\xd8\x1aWP\xa4\xcb\xd7\xc6\xe9\xa9\x97\xf3\xd2\xcb\xf9gNe^9\xf9o\x9a\x14i\x0fc]\xdb\xb0k\x84\x85\xaa1\xae\xaa'\xf6JB\xeb\x18K5D\xd3M\x1a\x94\xcfm\x1a\x8d\x95\x9a\xb2\xc3*\xcf\x07\x9d\xfdi$\xba\xd1\x92\x91\xc5\xa8}\xa1\x1a\x82\x82\xe8\xcb\xe3X\"h5\x9b\xcf\x98R4q\x16N\xd5\xf3\x11\xcc\xd2\xd0\x95\x88c==\x1c\x8e|8\x1c\x1e\xf0\x7f\x0e\xf9?\x0f\xf8?\x0f\x0d\xe82\x1f\xa4l\x1e\xa6\x1d\xd2\x8d\xcb'\\\xa8\xfc.\x97\x9a\x95O\xb7\x96i\x11\xb7\x94\xbb\xa9Pjg\xc9\xdcz@_\x02\xdd\xae\xfb\xd0\x05\xe2\x9a\x95\xa7(\xa1\xa3\xe6\xc6\xcb\xc6;\x80\x1e\x1b|\xafT\xee\x84\xff|M\x06A\x98\xc0\x8c~f\x9b$\xc6{\x9ds\xfe\x1b5\xe7\xae\xab\xaf\xadQ\xcdi-n\x10v@\xb7\xbe \x99\xc3^\x9aml\xa1(\xfc\x9f?\xfe\xf0}\x9eo\xc4<\xec\xa6\x9apG\xcf8\xd0\xb0\xaf\xb9\x14h;\x1e\xb6\xd2\xa7r\x0dB\xc4\xb0\x13\x91\x92\x8f\x02\x9d\x8d\x1br\xc1\xf9Y\x14\xc9m\x13\x9b\xeb\x8a\xa8\xbev\x97\x110#\xa9\xfe0a|qR\xd1\xf8\xdb\xd7?\xa0\xca\x1c\xc2\x11\x84\x03\xed-\x8c\x81\x95\xfdI\xfe\xb3/\xf6\xa3\xcf+\xb5\xf8\xbcH\x93\xa2\xea\xc8\xd0\x0b\xe6\xe9\x97?\xf8257\x19\xbb\x82\xc7\xe0%x;\xe6\xf8\x08\x16\x9d\xa9\xb1|\xd2\xaak\xe8\x0b\x96_'\xe9{i^\x87E\x10Fln\xf2\xfd\x90\x8f\xe8:\x0f\xd7,\xd9v:o\x97\xcf\x17\xeb|\xc3b7Q\xc7Q \x9d\x7fa\xaa\x1d'\x8cg\xd1v\xce\xe8\xf0!)\x9d\xf6p\xc9*\x1c\\\x87\xf9\xea\xb8tND\x15\xd5\x16\xddn\xe46\x96|\xc1\\m\x17\x05\x17!/\x0c>\x00 B;\xf9G\xcb'\xe4\xea\x95\x80:B\x03\x8b\xbb\xb4|\xb8$\xc9+\xc5sWsoO\xb4C\xb7#:\x8a\x1b\xeb/mR\xa9\x99\xd8\"\xf9\x1cl\x92\xe8v\x11F\x91\xc9+X\xfd\xe5:[y\xd1_\xbfk\x90\xb1h\x01G\xf4\xdfXS\xb1>\xeb\xa2l\xec>\x1a\x9a\xae\xaf\xf0\xf7\x0f\xcd\x17\x92\x1e>\xb2\xdc<*\xef\n\x85!\xe6\x84\xb0\xdc\n\x1e2\x8f!)\xbfUQ\x02\xc6\xb5\x9c\xf7\x9f9\xbf\xc3\x87\xd5y$j\x1e\xf5\xf9\xd5!\xeb2\x0df\xef\x19\x9fHg\xd3\x00f\x84\x9b\x9e\xd7e*\x83\x0d+\x8c\xe7\xe1\x8c\x95Zo\xe7\xab\xd4\x01f\x96\xa3\xe4s]zJ\xd9\x86\x05\xad10@\xeb\xa5\xdej\x19d\xeb\xf7\xd2\x9e\x079+Y\xcdN\xcf^\x92\xe1\xac\\\xd6\x1c\x8dg\xce\xa2p\xcd\x15\xb31\xde\x0e\xae}\x97\xc1n\xf6\x0cR-}K\xc7\x90\x8a\xe0\x13\xb6\"\x7fA]\xfde\x1c\xdd\x8e\x8d9\x063\x96\x86A\x14\xfe\xc2\xf8\\vX\xad\xa0v{U>\x86\xbd\xc8\xde\x87\x9b\x17\xdb(\xca,c@p\xe6\x05\xbe\x0f\xe2y\x84\x91Q*V\xf3J\xa3\xba\xc6\x0eL\x04~Q\xf1\xc82\x1f\"\x9f\x8buE\x88\x04\xd3l\xa4%\xdb\xc0R\xd1\xdbZv\xa0{\x82F\x1eV\x89\xb8Xwe\xba !\xdd\x82\xaft\x7f\x0e\xbe\xb6Tq\xe36\xd6RW\xc2\xaf\x9a\x04\xfdP\xb9LQ\x06\xb4\x15\xa7\x93|D[\x01\x0c\xe8\xfbf\xb8\xe2\xcd\x9f+\xf4\x8fm\x81u\xb0{\x9c_\xa1\x84U\x8f\x97A\xefe \x80\xea\x87t\x10f\xe2V\xc1\x95\xa7\x0d\xff\x08\xa6s\x17#\xc4\xc3\xb8:\x07\x8f#\xfb\x84\xa3\xfd\xdc\xcd\xdc\xab\xd2\xa7s\x18\xf3\x9a\xb1^F\xb8x\\y\x9eA\xa5\xe2\x9b\xbd\xf6\xd1~n\xb2\xe0\xe0\x96\x15\xcc\xf0J\x0d\xd1\x10\xff\x8f\x97-\xdf7\x8a<\x0f\x8f\x07\"\xcb\xd6\xdaU\xdc\xdbJ\xda3\x13t\x808|\x98\xc1\x11\xdc\x0e\xb2$\xcd\xdd\x19\xdf\xe0. \x9a\x94\xa9\xf3\x92\xbc\xdd.\xe1 \xac\x95\xb7[\xafw\xd9\xa4\x7f_\xc0\x04\xd6\xd3K\x8b\xc1\x0b\xdd\xbd\n\x80\x9d^`&\x07wY\xbd9\xef^yp\x04K\x99S\x86\xb9\xbc\xa8\x0f FP\xf3Z\xd0\x96\xcf\xb3V5\x86\x1e\xb8\\8p\x06|\xe7/T\x9e\xd2\x0b\x95\x9b\xb4\xb9Q\x03\xd1\xaa\xbd\x91\xfb_&CfQ\xa0\x91\x99\xa9s\xfd:\xe1\x0b\x80n\xe5\xa6\x83 \xcb\xc2e\xec\xfe\xfd#606\xc6\xcdQ\x01\x99\x02\x89\x07x\x8aS\xdc\xf7-\xbd\xd7\xc8W!T\x05\x05\x810\xba\xd1\x9c\x88\xfa\xab\x00\x03\xa0_2\x08\xd4\xe4j9E\xaeD\xdc\x1b\x0do\x82\x81bjp\x04[\xed\xd7X\xffV_\x89\x19\n\xc4u\xe2\x11\x0c\xea\xcc\x01\x8e\xcc\xaf\xc7\xb05\xbc\xae\xf7\xb5\xb0\xf7%\xf9\x14u\xa1~a\xcb\xf2W\xbd\xc1\x8d\xb5A\x11\x18\xea\xa8\xf8s\xac\xa8X\xbd\x1d\xae\xa2\x1b\xb9N\xb1\xb1G\xda\xdfES\x86\x05]\xd9\xdb\xca(\xa5\xbc\xf8\x83N\x8b\xea\x0d\\\x15;K\xb0\x85\x9eU\xcf\x93\x1cy\x8e\xf6\xb3^u\xdd\xd0\xb7.n\xd0 Jop\xa5\xf57\xf5\xd6\x97-\xab]H<\xdaji/\x8be+^\xd6\x91\xad\x04\xd4$\xdc{\xea/4\xa2\x0bo\x93r\xd5\"\xf3U\xa7\xc8\x15\x89h0gi\xe6\x17\x1dY\xb0\xf3m\xfc>N\xaec\xa1k@\xb2A\xf1g\x93&W\xe1\x9c\xcd\x8d\xf8)\xc2\xb1\xe2\x80\x8b\xae\xa6\xb2\xa7\ni\xb7l\xda\"\x8c\x08\xa1\xd1\xa1\x95s\x12\xf9\xces1/\\\xfd\x06\xae*\x80\xba/&o\xd7\xab\xd5\x07z\xedc*\x82*oF!D\xc6\xc2)\xe8\x98\xee.:\xe1\xfd\x0bj]\xbd\xf8s\x8d\x9d\xa2\xff\xc2w\xb4h\xc2\xc0R~9\xe6\x8a?*&\xa8\xba\x07X@\xbc\xe1lF}\x1csE\x9f\xeb\x15\x8e^\xa7>\x9b\x1b\x98@8\xbd\xaeL\x06\x83\xc8\xb8U\x96\x1f{\x18\x0d\xeb\xce\x1d\xc9\xdc\xabw\x1c\x15\x0f?#\x1e~\x06O\xe0V\xe3\xe1g6\xe1\xf6\x18&p;=3\xf0\xefE\x89w\xc7\xd3c\xe2\xdd|\x07N$\xb7\xcd\\\xfe\x1e\xa3\xf8\xde(\x0e\nG0\x97$\x83C\xd6\xca\x87+\x9f\x0bV\x17>,\xab\x8c\xf5cm]\xdec\x07\xe8f\x16\x19\xcc\x9c\xcf\xd0P \x90.\x98\xcf\xff\x9f-Ko_\xa5l\x11\xde\xf0m8r\x0c1\x9e\xc4\xce\xbf/\xf2 \x0c\xe1\x08\x9eA\x0f\xdeW\"\xfc\xe0_\xbf\x8az\xdd\x82\xeb]\xf4nEN\xcd*\x12~Vn#\xb6B\x1c\xa4\x7f\xe0,v\x0c\x07\x06\xa5\x91\x1c(Qi\xa4?ME\x9au\xd29\xdb\xe4\xab1\xdc30\xc1 \x0d\xd6,g\xa9\x18\xc0\x88\x1d\x1a\nEA\x18\xd3j}1]0\xe8\x10L\x05\xda\xbce\xd5\x0ekl\xeeH\xcb\x92\xb1\xffn\xe0N\x7f\x1aL\xcf{\x1e:\xb2N\xffmt\x8e\xf7\xfa,\xbeW 6z\xdf}7\x9d\xfe4}w~\xfe\xcd\xb9gK\\\x03b\x16\xe5\xc2\x94h*m:\x86\xe3\xd4\x0d\xc5Gq\xa5\xda'\xb2\xc5n0!\x85\xbdb\xd6p\x8e\xcd\x97\xa9\x16\xcd\xacZ`/\x1e\xe8[ \x98/\x0c9Z\x15\x1504\x1a\xa5\xab\xae\xc0\xb0$\xdav\x83vF\xa7\xe2\x86;[`=\xfdQ\xc4R\xe4\xf6VB\xb3\x1b`\x08G\xb1\xa88\xa6\x08\x9e@<@\x90n\x0c\xf3\xcdg\x1cA\x0fC\xe7\xef2\xf3`::\x17[3\xf2\xa1/\x02v\x7f\xc6J\x04\xc6\xa0\x14`]\x0ci\xab\xe1\xdd\x8a&HQ\x92\x10\xa3\xc0E\xe8M\xd6\x01tA\xb0Ry\xb9\x0d\x1c\xa9r\xca\xf2\xa2%7\x1b\x89\xe4\x03\xc3\xc7\xd0\xef'm\x8d\x81@\xd0\x90\xa2\x98\xb3i\xd2\x90\xda[>(9LE\x0c\xb6\xc0Cl\xc44\x08\xd3sO\xb28\x9b{\x99\xfet\xb8M-\x1f\xb4\x18\x97\xc1\xe3H\xf2\x86Y\xca\x82\x9c\xa1\x0eg\xd2\xefl\xcf\x95\x08\xe5\xc7\xb7\x8d\xd8b\x91\x9f\x91+y\xe7\x95\xd7\x81\xb6\xc6\x1e\xc9\xd7\x1a\xfcq-\xcc\xbe\xc7\xd5\x87S 4_\x9f\xc6\xb9\xbb\xf5ad\n\xd9`z\xf6\xc2\xecE\xf0\xc2\xcdp\x88\x01b\x1f\x06\xbd\x17\x06\x9a\xcc\xc31\xe3\xab\x8c\xc2\x8c\x8a\x1c\xc8i\xc6P|\xcc\xe8\xd3\x13\xa4\xc7\x8a\xa9\xc1\x91\xda\xc0iv\x8eQ\xf0\xc7\x10N\xb7\xf8g\xeb\xc0\xcc\x18\xa2?\x1cT\xc3\xc6R\xcdm\x08l\xb3\x0f\xe5\xa3\x9b \xec\xa9\x15\xa9\x98\x9a?\xc3\xcc\xf0 \xf6\x84X\x88\x03U{B\xe9\xbd\xd1\x9e\xa0JX4\x96\xe7l\x07{\x02\x8ei\x10.\xe3$e\xba\xe4\xa7dB\xc3G\x1f\x87 \x8d\x0c\x13S\xacl\xbd\x80\xb0D\xbef\xcb\x93\x9b\x8d\xab}\xf10I\xa5n\xae\x085s\x85\xe4\x12\xbc\x83\xba\xe5S~\xc3?eI\x8c\x83=\x11\x9eZ\xc1\xa0\xf8\xe9#f\xb1\xcd\xb1\xf0B\x0e\x06\x17\xea'f\xa5\xc8f\xc1\x86\xbd\n\xf2\x95\xba0\x8b\xa5\x0c\xefy\xf1ml\xab`\xfcR\x1e\xfe\xd6\x90\xd7\xaf\xd5\xad^\xc0c\xbb\xcf\x01]\xd0\xbc\xccXzE\x1e\x9c\xd3syk\xf3\xf2g\xa8f\xfc\x80\xba<]\xbdQ\x17\xed<\xb4\xb6@\x95\x9cv]\x06\xb3\xf7\x14\xc8\xad4`\x98\x98\xa2mV\x07h\x8a\xfd=\xab/I)\x8b*\xe5\x9cJ1-\xb9\xa471<\x81\xf41\xc4\xbd^]\xcb@\xdb\xce4>\xa7e\xc3H\x0bd[\xb7N\x0d\x19VlQ\xb7/S\x16\xbco\x99\xd9\xc2\xcd\xe9\xbe\x88\xaf:\xe3\x7fm8\x14s\x11\x0b\xd3D\xa8\xdfR{E\xabJ\x81\xaaz\x1b\xa2\xa4\xe1\x08\x81R\xc8\x8a\xefF#q\xa8\x1b\x891\x94\xad,.`\x8a\x15\xfb\xa8n\xfc\xf0_n\x88\x89\xbf4jY\xdf\xac\x85\xab\xb2\x01\xd4,\x1a\x18b\x82\x92\xe9\x98\x96\xda(\xa4\xe7\x83<\xf9\xd3\xd9\xcb\x17@9X'\xea\x85k\n\x14\xa3\xe0\"D\x9epAK\xfdg\xce\x9ar\x8f\x84\xa1\xf2[\xe6\x91\x98\xb37\"\xde\x17\x94\xac3\x99\xb0\xced\xfd~\xa3X\x83\xe6\x18\xe4T\xd3\xec\xbc\xc1\xa2\xb8\x97\xd6.\x8e\xf9\xb0\xf1*\xd2g>\xdd\x9cWt\xd0\x08Mf$\xc0\x94\x8f\x98rO\xc5\xac\xb7\x9bg\x92\x0d\x1e\xd9\xac\x93+\xd6\x90o{\x13\xe4\xab1\xdd\x0c\xdc'\xf3\x98\x81\xe0\xb9\x1b\xfb\xc5\x1c\\HK\xae\xd7\x16\x03\xd2\x95\xc8\xf9\xc2\xe7n7\xaf\x18\xf2ADP$i\xa2\x1f\x86B3\xbd\xd0\x8c\x0b\x89.\x89\xa2\x1cJ[\xe7\xcb\x85\x1d2\x11`;\xee\xde\xd0o_r(\x96\x1d\x05\xf3\x86u\x87\x1d\xd6\xbe\xb9\x15\x11}9\xd5X\xa0;kr\x81\xedjF5\xfbEm9\xe0*j\xb2W`\x8f\xb9YDNMm\x08\x15\xb5\xcez\xbd&\xeb'\x07\x8e\x0d\x9e%f\x0d\xc0Q\xc3-f\xc3-\xae\xfau\xde\xbf`>\xff\x87\xed\x1d\x1fm\xd3\xf6u\xd8=\xcd\xc5X\xfd\xc5\xa5\x1c\xc1\x96\xdb\xeciZQ=+\x02\x97\x94:\xb6\x80\n,\x99\xbe\x9bE\x9cR\x08\xb3!\xf1\xf5\x82\xa1\xe7\x94`871tPL=\xd7\x98\xba\xd2\xe1\xf9\xeb\xf2\x9a\xd4\x02 \xf1\xda\x898\xdao\x95vJz\xb9\x90?\xb9bq\xfeC\x98\xe5,F\xfb\xa3\xed\x93\xeb\xac\x93m\xc6\xb6\x1b\x87\xac.\xd6b\xef\xd9m{!lk\x9e\\\xc7m\x05\xdf\xb3\xdb.\xc5f\xab ^2,\x85\x807Of\xdb5\x8b\xf3\x81\xfc\xe3$b\xf8;\xc8\xf3`\xb6\xc2\xda\xae\x93\xc4\xe59u\xad\xa5O\xb1k\x9d\xea\x8c\xbb\xd6+/@\xd7Z\xfazt0A\xc4\x15\xb9;\x16\xaa\x01iO\xb1\x99J\x9b\x80z\x86y[\x8c m\x84\xddV\x12\xa7\n~!R'\x1f\x03\xc9+\xf4\xc3\x12\xc9C\x9e\xadw%r\x80\xc7>\x8c,\x08\xc9 _\x87\xaehH\x02\xb1\x0d\x13\x0d_-\xc8h,i\xc0G{\x8bu\\\xb3\xb5\xa9J6\xe3\xdb\x9c}\n\xbeUju\xc27SO]0\xa7\xdeW1\xb5\n\xeap\x8eT\xc0\x01\x85n`\xd7@I\x99\xbcRD\xd6\x8fd\xad\x8aYJ&\xa8\x19\xff\x8dv\xbe\xb4\x9b\xa0bp \x91F\x90B\xb1Em\xbd\x9a\x01\xac\xc9h\xa8\xb4\xe3\xcfI\x02\xd69\xadW)\xe1\xafQ\xa9\xd63\x94\x1d\x95~\x8d!\xf6\x06\xd9*\\s\xf6\xdd:/\xb9dZ\xc6\xb7%\xeer\x86'\xf2v\xa2%\x06\xdd\x12q'\x90\xadi\x92\xa7\xd9DdH\xab#}!-Ck\x0d\xf6\xa3mo\xbd?C\xee\x17uK\xcb\xac\x82\xd2\xfb\xfa\xb1\x19\xd3\x8c=\x9d\x9ce\x99\x0f\x0e\xff\x831\x87\x1cij\xb56\xa2\xfciv\x12o\xd7\x14\x11\xc3P\xf7\xc3\x07\xdd\xa5\xec\xa3Kq4\x0b\xc8\x89\xe1\x08}\x0b\x12oPD\xb3\x9f@JVR\xfdUb\x04\x94\x9d|\n\x8d`JQ;p\xe12\x11F\xad\xfaQ\x85\xf4(\x1d\xa8Y\xf6F.y1ih\xba\xebU\xda\xd1\xe6\xf1\xb1\xc1,\x89\xb3<\xdd\xce\xd0\xc0=\x99\xe8\xdf\xd0t \x86\xabv \x8e\x8aI\x8d\x0d#3A\xb9\x1d\xea\xb4\x93\xcc#\x0ee\x11\xb6\xaa\x9fh\xf2\xf7\x1a_\x1c\xeb0:)9z\xd7\x8bR\xa2\xc8#Sz!\x07\xcf\xe5K\xed\xb5\xf4\x9b\xb6\xe1\x96!g\x8f\xc4e}\xc8 \x0d\x00\xb3\xc2\x8c\xd58\xb4/\x81[\xc9Bo\xea\xcc\x90\x7fG\xe9\\\xeb`\xe3\x86\xcdc5\xe4\xa4\x91\xf4\xdcz$,\xe9y\x15\xbdE\x80%7\x9f\xc6\xe7\x18W\x9dM\xe3Z\x10\xfc:\xb57\x8c\xca\x90\x87\xa6\xa4\\+\xbaZ\x18\x82G\x15\x83\xa3*2\x1d\x9d\xf3\xb5\xd4\x7f\x8eIX5;\xf0bT6\xb6\n\xae\xc2d\x9b\x8e\xc15\xf4u`\xed\xeb\xa0\xdc\xd7\xc19\x1e3z\x83r\xabx\xc5N\x9a\xd5J#Pg\xe4|\xeb\x9a\xad\x0d\n\xb91&u\xb9\x15\xcf'+:}\xf3\xa5\x13e\xc4\x85\\%\xf2F&Y\xb7\x94\xbf:\x9dF\xe7t\xda\xad\x1f\x91\xceD\xe2\xe8\xe1c\xd8\xc0\x13X\xa8\x067v#\x18o\x11#WL7\x0d\xa7\xe6+.\xf0L\xe7\x0d%\xae0\x97\xe3\xaa\xc1\x12\xb5\xc6\x12\xe1tn\x8b\xef^\xba\x8a\x80W\xde\xec\x12?\x96- \xe3\x13X7\xa9\x1b \xe6\x8a\x0e z'k8\x02>\xa8\x0e>\x83!%\xc0\xce\xd0\xebk\xba\xf4a\xeb\xae\xbcs\xa3\xbb\x99|D\x9clQs[\xbbz \x1fu\xadE\xa76m\xf3\xd7\x8av\x9a\xfb-\x1ex\xdb\x86 \x1f1V\x07O\xbd\x1d\xe1\x17VA\x13Z2\xe9+pk\xbe,)\x9f\xf2\x1a\xd8\x07\xa0\x97Z\xd5J\x18\xd5\\\xfd\xc0H5\xd3)\x17f#\xd5\"\x12$NA\x90\x84\x1dA\x8en\x1ecL\x1e\xcd)\xc1Hd6(R\x1a\xf0\x02\xe7zk\xd3\xd4,\xefg\xe4\x16Q\x8c\xdd/\x06=\x88\x93\x1f\xb7y\x907*\xe6j\xf0\xcc8\xf8\\\x0d^\xe6g\x18\x92\x1e\xcdH\x8f\x06\xc1\x07\x8a\x81V\x0f \xd5@\xc9\xbf\xd1<\xd2\xeb0_\xbd\xc4+R5\xdfI{\xba\xd5L}\xafl]\x8b\x8cg\x0f\x0c!\xf3\x8fC\xec>\x1a\xdd\xab\x10\xa0\x8b\x0b\x96\xfd\x98\xcc\xb7\x11^\xf3\xdf\xad\xcb\xd8\x1d=x\xc0\x17\xd0}t@\xff\x8d\xee\x8b\x9f#\xf1\xff\xa1\xe7\x97\x05[wt\xcf\x1b\xfc\x95\x05\xef\x7f\x0c6]\xfah\x10]}\x99\xc9\xf7p\xe4\xb9U?\x8ePtV\xbd,C^\x0e\xa3\x83\xbb\x95\xf7[j\xea~5Y0\x0d\xfa\xd1\xa8\x1a\xbb\"\xa2\xf2\xd5\xe6g\xf8\xfa^\xd5{d!\xbcG\x0e*\xef\xf1\xdcr\xb0d9_\x91\xf2\xa7y\xc1\xbb\xc2\xec\xe4&gq\x16^F\x95\xcb\x1e\x9c\xedd\x83\xed\"\xcb\x93\xb4\xf2\xe9\x8a,\xca\xa5w\xed\x01d\xab^\x076\xaa)Y\xb8\x88\x8ag\x904\x86%qbx\xaed\xd3V\xd7\xe3\xf2\x98\x97FYg\xc9:\x05\xd6\xc0{\x13(A\xdb\x89\xbf\xa4q\x1bcj\x06\xf9\x88 \x0b?\xe0\x1c\x8e`\xe5.\xc4\xec\x1d\x01\xcf\x8e\xe7a\x0c&\x94}1\xfa\xb6HU\x14\x16\xb37v`8\xf4\xab\x8b Yy\xca\xedAK\xb2\xc1\x9c-\x0c\x83\xf4\xd1?d\xc7m\xb8\xadj\xa8\xee\xa3\x83\xa1\xe7\xaaV\xf1\n\xde\x12o\xbb\xef\x0d1\x96Q\xb1\x963\xb7\xcd\x18\xf1\x00\xf6&\x80\x96\xa5[\x0fs\x7f\xc9\xbb,\x8b\x94\xb1_P\x18\xa4\x17\x9e{\xe5\xf9\xf0\x80\xd6Yc\xff\x1fI~\xdf\xba.\xa6l\xe3\x9f\x8f\x0b\xad\xd0]\x977I\xbb!\xb3\xf4|\x08\x06/NN\x9e\xe3\x01\xba\x0f\x89;u(\x8e\xae\xe3\x83\xb3\n2\xfe\xdf\x92\xe5\xfc\xbf\x8c\xe5\xce\xb9\xdf\x00w\x12\x96n\xb5.j\xeb\x8c>\xf2\xb5x\xc1!\xc6L\xd2\x1a\xcf\x0d^\x1c\xa0`:'\x03\xc4\x1c\x9d\x10\xcc`@\xb0\xb7(\xd2\x7f\\,\xc4\xe1TSP\xe3P\x065\xbeXL\xd99\x8d\xc2\\Zj\x86|U@\xe8\x9b\xbc&\x8c\x0d\x97\x18\xec\x0e\x91\"\xa8-\x02i^\x8b\xe5\xffQ\xdfc\xfa\xbbs\xa2\xf0G\xa3\x87\x96\xc8I\x8dh$\x07\xc6\xae]\xd4\xbe\xf5\x10\xaf\x9d\xf8b1\x82\x1a\x7f\x10\x1c\xab\xc6\x96\x04\xbbz\xe4\xb9N\xb6a\xb3\x90\x95\xd2\x84t\x93\xd8\x10\xf8\x8cb\nj\xe5\x1c?LW(\x84\xf1I3\xa2\xa0}\x8a\x9c\x85PJBHK\\\xcd\xce\xe5\xa9\x1c\x08\x82\xa6\xfb\x90\n\x90T\xe6\x10\xf2\x18\x9a\x86\xe7\x9e\xf2\x1f\x12\x85\x8b\x1c\xf1\x92\x96R7\xe3\xd6T\xf6\xdd\x85\x03Z\xe7\xe1}\xe3\xfas\xf6o\xe6\xba\xc2\xcd\xb3Z-0\xef\xa6\x10\x1a\x86UaBH:w\xab\xef#%\xaf\x18\xa5\x86\xaat\xd0$5DnU\x92\x9b\xe3\xdb\xea\xc8WxxT\x86\x93\xaeR\x00\x1b\\`\xea\x07\x17\xff \xd2\xb1\xae\x1e\x10\x94~\xae\xdbN\xcb\x90\xb2\x04hrojg\xd9\x86\xa3P\x8cr\xe3\xb2A\xd0D\x94+\xe5\x19\x17F\x10\xf0j\xa5\xaa\xd9\x90\x0b\x98Zk\xd6\xc3\xaa<\xd2A\x16\x91|a)\xe8\x9c5 \x94:\x83\xcb\xa7\xa3\xc6\x15Z\x05\xad\x01\xd2\xa4\xc8\xb2W\xf4\xda\xd4b7\xf9B\x1e;4\xcd$F\xe7yT\xf5r\x99\x021\x10\xf1\xa5Y=\xbete\x1c\xc4|\xdb&'WT\x043\xd6\x01\xa0M.\xca%\x00\x18\x9cv\x0d\xb3\x11\xb5\xfe;\x07\x99\x88%\x90\x07\xa2\xb9\x8f\x97\x08\xf6\xf6\xfe\xbb\x9aTF\xfd\xe57(fe!e\\#u>\x84\xb6\xa9\xa3\xdbc)J\xa35\xc4\xeb\x96\x7f\x8d\xb0E\xe7\"$g\xd7\x8b\x9c\xdcE\xd8\xe0\x82S\xbcU\xaf\xe7\x83@r\xa2\xcc~a$\x04\xbc|\x97\xb9)\x8e\x88M\xc3ss*|\xfb\xd2\xa5n\xa4\x8b\\\xe6av\xdbv\xf9\xa0Gg\x80\x92\xbd\x04\xf3\x91]x\x97@\x9b\xec \xe2s \xbeR\xd2s\xeey\"\x11\x03I\xf71_\x93\x99\x1b\xab\x9c8\xc8\xe4D\xfe\x85X\x89\xfd\xc6\xbe,\xee3\x1d0Z>\xff\x88\xd9\x8bD\x0f\xa6\xa9\x9bgi\x80\x10\x1f\xa2f\xcc_\xd4\x91\xc0\x86\x01)YK\xd1\xb7x\xcft/\xb8<\xa1\x14'\xc4H\xbb\xc8\xc5\xa5\x9bt\xcaP9\x9b d7\x0dM\xa8\xd8c\xb8*P\xfb\x0f\xf0\x05$\x94\xaa( \x04D\x8b9\xa3f\xb6\x08\xcc\xf6\x06\x12L\xeeU[\xc9,RQd\x91Wf\x16\xf9fa\x16\x876$uW\xc3\x9b\xce\xf1\xf5\xdd\xa17X\xd4e\x13\x8b\xf9\xe6\x8a\xea\xdcm\x15\x82%\xa5$\xed\xf3\xd6$\x13_\xe2y\x003\xd8\xe6/`\x02\x97\xf5\xd7\xd7\x9c\xbf\xe1!!\xa30;f?\xd4\x13\x98\xc0\x05G\x86\x8b&m\xef\xc6p\x1e%@\xf3\xcaz\xba\x89\xcd\xba\x18\xad\xe7D\xe5\x16\xe1Rx`W\xa5\xf9\x83*\xf4\x85'\x93*\xb8\x1ez\"\xb9U\x95\xca\x83#p/0\x91\x8b\xaen\x1aqm\xc6\xbf\\\xa0j\xea\\\xcc0\xeb\xe2\xe0b&\xa4\xc1K\x9dO a\xc0\xebsK\x1f\xf2\xe9\xf5y\xcd\xca\xc0)\xc0\xca\xe5\xcb\xe9\xa3\xc3\x94O\x04\xd3\x173\xf4\x97,\xf7WA\xe6g,\xf7\xdf\xb3\xdb\xcc\xa7<\x1f\xbe\x98\x8eO\xb7\x0f\x1c\x99\x9e\xce\xe7\xa3\xe9&&\xe0\x16\x82\xbcnZ\xa8\xacu\xb2\xc1 \x8c\xe1\x84\x9c\xcdq\x03\x1c\x1c**L\xa4Em]}\xc3K:{S\xa8uN\xb4e\x16 \xbe\x9e\x9cn\xa1LA\xfa\xd5\xc2\x8d\x0br\x8e\x06\x07\x1a\xae:\xaf\xb3\xab\xec*\x0f\xd1\xc5\x8c\xab\xec\x05\x05\x1frr\xed[\xd5})\x0f\x15z{R+W\x15\x89=\x9f\x82H\xcd\xcb\x8b\xe0d\xe1/\xcc1\xf1\xf6\xb2t\xdc&\x9a\xd1,\x06\xbc\xb5\xfaPjP<&(^W\xcd=dIY\xfap\xed\xf9\x90\x95G\x1a\xe3\xadOe\xf0\xf1|\xd8\xb8b;n(G\xd3\x85\x0f\x89\x9b\x0c\xfe\x03z\x90\x0c\xfe\x8a\xff~\xe7\xc3\x8d\x9c\xf9\x9a\xb3\x90\xb3\xc9J\x98\xa4\xcd\xb0\x16\xa1\x1eTy\xaf\xec#\xe72=O\xb5\xe7\xc3\xfe\xf4\xa7\xa0\xff\xcb\xb0\xff\xe8]\xff\xab\x7f\xfb\xe3\x9d\xaf\xbf\xe9\x0d\xde\xfdt\xf1\x7f>\xfc\xf7\xf9~8\xc8Y\x86\xb9\xd7\xcc\x81Wd\x82\x97\xd9*H\x83Y\xceR\xceW)\xcd\x00,B\x16\xcd!\x0e\xd6\xc6\x9c/\xca\xfa\x94'?$\xd72\xaftyq-sn\xb6\x84t\x9e6\xeb\xd4\x99\xc1\xf1\x11t'$#p\xc5\x98u\xa4\x95\xac\x82\xd6\x10\x93Iv[\x957{[\xfc\x99'1+9\x88\xb5$<\x11\xb7\xa2\xccI\xac\xc0\xa8\xe2\x99\xdf\x1a\xbcF\xc4\x80+i\xc3rS\xb2\xb0\xd6\xb5\x92\xb2C\xbd\xdf\xce\xd9~\x0d\xde}\xa0\xa5\x02\x14\x97sJ\x19\xf2\x13\x0c\xfd\xb1S\xbe\x0c2\x1eQ\xd6bs\x82\x0c\x91\xf9\xbf\x1e\xcd\x14\xbd\xeaL\xddu\xe9\x8bM\x87\xe7>0c\xe86\xadG\xdc\x03q\xee\xb6d\xb9\xe6\x1e\xf7\"X3\xae\xfd\xef\x90!\xaf:\xd7\xa9)\xab\xdcGS\xe6B\xdb\x1e\x19|\x13A]k\x90\xd9\xf8\x95\x04-\xb2 \x0dR\xc6\xe7S\xcd\xdb\xf2,JY0\xbf\x05\xfe\xafc\xba\xcc\\\xc9\xef\xdfi\x80\x06\x7fF(K0\xb5\xd4LM\x81\xec\xd8\x8eY\x93r\x97\xcf6\xdbF\xb6D)x\xff}\xb7\x8c;\xb1\xcb(aZw\x1bO\xa7\xa52\xf8n\x82F\xf1\xf8Z\x15\xb9\x97\xcdT*FW\xa9\xdc\xce?\xf2\x01\xdf\xddg\x99\x96\xac\x96\xdc}:\x8d\xd0\xe0\xc7 \n\xda0\x86\x8cvCP\x04\x9f1\x8cE\x9fQ\x91\x8f\x98\x03\xecm\xce~\xa0\x0b\xbb\x0d3\xc8\x18\x81\xae^\xd5C\x15\xfc\x12'\xd4i*QS| \xc4S\x1d\xd6G\xd54\xdf\xad\xa7E \x0f/JY\x05\xe9\"UC\x12\xa0\xd0\x9c\xdd\x81yZ\x0eE\x91\xd9\xdc\xa0\xa6\xcbG\xf9\x05\x16\x89\x8e\xbe\x8d\x92K\xcd%\xbf\x9a\xecXo\x9f\x17\xed\xdc\xbeL~\xcd\xfb\x90\xe1g:\xf6#\x8bw\xeeK\xcf\x7f\xce\xfb\xab$@\xef\xd8\xad\\>u\xc1\xa2I\x86\xd0z\xd7\xd2mC)\x87\xd4\xba\xd2\x81\x86[\xe8\xf7\xc9\x04\\\xca\xec\xc0:4\xc4\"\xb7\xb9;5\xd6\xb79\xbdB{\x00\x03\x90&\xf1\xf2\xc8?|\x80==S\xb5}\xcd\xd0\x00\xb3\xac\xc8\xb2\x82U\xe8\xd7-\xbe\x95\xb3\xe15\xdbr\xab5\xac\x92\x1d)\x84+hm\x0b\xab1\xa7\xe5\x83\x05K\xf9\xdffI\x9c\xb38\xef\xd3\x10\xf1\xf8\xd6\x12\x04\xadT7\xab\xd5\xf5\xc1\xc9\xd9M\xbe\x8f\x01\xa9\x1es1>c\xf9\xe4\xed\x9b\xef\xfa\x0f1\x04W\x05\x8b\xe4\xe1\x98z3\x10W-Z\xbb1T\xe3\xed\x7f\x0e\x12\xa8\xd14N/\xd8l\xa2\x90\x92<\xee\xdf\xf4\xaf\xaf\xaf\xfb\x1c\xc5\xfb\xdb4\xa2\xe8\xfc\xf3\xea\xac\x8d\x12\x8c\x96a\x8d\x88)\xd1\x94V\xfe*\x8d&!i\xcc\xe6\xfd\x0d)d\xb4\xe44\xf6B\xe5E4\x88AY\x12]\xb1j\xb1.\xedi\xd0km\xb6\x15\xb7;\xf5$\xa9\xa4\x01\x0bg\xc9\x96k\x8cI\x8e\"\x9b\"\xbf\x98t\x17\x82\x0c(\x93]\xa3e\xa2\xcb\x989\xb6\x9d\x9b\xb7\x99\x04\xda\x12&\xb7nq\xc9\xaaY\xa5\x04Gr\xe79\x8e\xda\xf7\xa9\xb4\xfc\x02\xeb\xf8l]o\x90\xafXl\x8aM\xfdQ\x92\xdf\x9c\x88G\xeb8\x7f\x13Pl\x17\"`G\x11P>vQP>\x15\x91\x90o\xb3A\x16\x94\xcf\xc7_\x0bM\xba-A\xc9\xf3\xbe&\xfd\x91\xbfzaS\xcde\xdc\x17\xf2\xba\x1f\n\xaf{u\xb5E:\xdf\x9f+\x1b\xc7`\x91&\xeb\xe3U\x90\x1e's\xe6\xe6\xd3F\xd6+\xb5\x17J\x99`\xcbk\xfa\xd1\xb2\x10\x9dV\xee3\xd0\x9e\x03\xf8\x8eh_Fv\x0bE\xd7E=\xaa\xb1($\xb8Vt\xd2\xd1>\xc7\xf37B\xd5E\x03\xaa\xfe\x9c%\xf1\xe7\xb4\xfd\xa7\xb3\x97/(\x06\xaf\x95z\x95\xde\xdb\x94\x85Y\xab\xe7\x0f\xf9\xf5\xd1\xfd,\x0fU\x87\xfa\xfa#\xad\xd0\xad%\xc6\x08\x94`P\xdf\x8d\xb6\xc4\xb2\xba\xde Q\xda\\F\xf9T\xf1\xcd\xac\x94)\x95\xe9\xbf\xb9\x1a%\xe4\x83\xc2Gv\xa5r4\xc7\x98\x8f\\e\xd7\xf5\xe4NQ\xd6VlL&p\xa5\xf7\xc9\x9c\xd1\xdbd\xce\xfcR\x82\x18`\x9a$\xcc\xbb\xc2l\\z\x06\xf6\x8a\xbd\xc1\xb0\x87\x9a`H\xb3T\x06K\xf3\xf2\x1bf\x9f\x97~\x7f\xf8P_\xa1\x0f\x1f\xc0I\xd6a\xee\xf8\xb0W,NE\x98\xb2/Vn_\xacv\xd2W\x98;\xf3\xe4\xedf#\xed\xbe\x8d\xc8}\xabe\x1a\x87\xa7\xd0\xa7{H\xa6\x8c\xdd\x1f\xdd\\\x0eFN\xbc\xf8\xe9\xfc\xc7\xc9\x1b\xc7+\xefcN\x7f\xa8\xc2\xe2\x07\xe5\x9d\xc1W)[\xb04EI\x80\xde\xba\xd8\x0e\x99V+\x1d|\x7f\xf2\xecy\xed\x0b\xf9\xcbZ`\x1eUoN\xf90&4\x9b#[\xf8\x8f\x937\x90\xa4\xc0[\x939\x873\x13B\x10\x91\x93\x1a|5\x8e\x8f\x0d\xf7\x17\x1d\xac2\x82\x0c6Y\xed\xd3p\xedz\xf2\x8c\xfe\x8ec\xb0\x1a6\x9a\x11Z\xc5\x03B\x1e\xd1~cxb\xfe\xe0\xf6H\x0b\xba\x96M\xa5\x87YT\xa0\xad:\x1e\xdc \xe67q\x8c\x0d\xd8\x99g.-\xa0\x14d\xf8\xed\xeb\xd3\"&\x19\xd7\x91\x0d\xaf\x93\xeeq\xe1:[\xb77\xed\xfb\x9a4l(\xad\xf4\xfe\xbb\xf4\xe8]\xbc\xbf\xcbn\xd66k\xdc\xb4\xda\xe5\x8d\"(\xb2\x8b\x0f\xdd2\xda\x8b\x8d\x1b;\xcd\x0d\x82\xbeWi\xed\x0e\x82|>g\x0f\xe6V\xbe\x9a+_\xfa\xbf\x17\x82\xbbH\xd0-\xae\xeeI%\x99R\xd5SXs\xfe\x17\xe6\nC\xf7\x0d\xf9i\x0c\x07\xc3\xa1\x8c\xfe\xfa^\xfa\x85\x88\x8fO'\xfc\xab\"\xe7\xe2\xed\x138TU\x8a\\\xf8E'\xfcW\xad#,2\x06\xe7\xe5\x9f\xe5\xd8\xec\xbc\xc0\xd7\xb9V\x8e\xffc\x8a\xfc\xaa\xa1\xb1j\x17)/7\x1axDZo\x1b4\xaf\xac\xc7n\xba)a\x0cN\xc5\x92\x80\xd3\xb3\xe4Q\x92\x07Tcp\xceD\xcc\x88P\x06\xa6\x90\xc7T\xf8\x8a\xbe\x9a\x1b\xe1\n\xdb\x18\x9cB\xa1\xd1\x1a\xe1\x1aF\xf1\xb3U\x00\xe4O\x9e\xde\xb6\x98\xc3\xb4C\x07\xde\xbe_=\xc3\xd0\x9f\x8f0\xc3\xe0\xd4\xcd\x94\x174\x97\xca\x91\xbd-3\xe2T\xa3\x1f\xcbGJ\xd5|m\xc4\x9fM{\xa1\xa9\xdfcp4E\x83*\xd5\xd1\xd3,\x1a\x95\xcc\x84\x1eB\xce\x15L`\xaa\xe2\xd5\x9cJ}\xeb\xdc\xf1\x8b(6\x85\x1aV\x7f}\x1c\x05\xeb\x0d\x9b\xd7\xbf\x9e\xc6\xf9\xe8\xbe\xb9\x92\xe9\xfdi\x9c\x1f\x1e\x98\x8b\x9b\xde\x7f\x17%\x81\xfd\xc3\xfd\xbb\xe2\x83%,A\xfbuP\xf9H^\xc0!\x94o\xd2_Bv\xdd`~3\x03\x81y\x10*[\xaf\xb0\xd2\x86\x19o\x9cS\x88\xdd\x87v\xa5\xc4\xc1\xd6\x10C$.\x9a\x07Z\x87\x9aDk\x89\xd8D\xc5 \xd5\xca\x8eP\x94D\xb5\x9d<\x83\x9a\xae\xde)?\xbeu\xb0\xb1:Di\x05`\x82\xa7\xd0\x18\xfd\xd4\xc7\xe8\xa706$\xff\xc1 ^\xc5\xf8\x85\x93z\x97\xad\x17EU\x97|\"u\x9f\xf6J\xfbK\x96wj\\m\x9c\\ b#\xe4f~T\x9a'\xa5{l\xebx\x154\xfbFU:\x96\x1d\xd4\xc2Bs\xe8h\xeb+\xabL\xb2\x01\x02\xca\xab'\x80\xa0\xad}\xe9\xf3\xdb\xe1\x1a\x14\xd4\x02\xdc\xc8\x1e=\xeb\x1c)\xdc\x8d\x88L\x95\xfb\xc5\x18\xe3st\xfc\xcak\xa7\xf2\x861b\xd0\xb2\x0e&\x0bi]\xb4\xe5\xfb\xd3\xf7\xa3\xee`\xd0\x92\xea\x8d\xc9\xc8lfT\xc6\x8b\x89f\x93\x88>\x15\xf23\xfe\xf5'\xd3a&\xb6\xd3\xfb\x8e3\x11\xae\xd2\xbf\xfeT\xba\xed\xcb4\xae\xdf\xf7\x92O\xd3\x94*\x8eA\xda\x0cM.B\x86\x05\xb0\x9c\xc5\xdf\"\x9f\x7f~\xf2\xc3\xc9\x9b\x13\xce/\xb9\xc2\xee\x0b\xf5\xdc\x07\xe7\xe5\xab7\xa7/_\x9c\xf1?_\xbd<\xc3O\xaf\xde\xbeq\x0c\x0b4\xd3\xba\x9c\x89\xf4\x17\xad+\xaeIe\xd2\x13\xdc\xbe\x82\x97\xc9\xfcV?e;\x8dC\xb3+\x96!\x16\xf5G\x1f\"Bnm\x9c\x9ez9/\xbd\x9c\x7f\xe6T\xe6\x95\x93\xff\xa6I\x91\xf60\xd6\xb5\x0d\xbbFX\xa8\x1a\xe3\xaazb\xaf$\xb4\x8e\xb1TC4\xdd\xa4A\xf9\xdc\xa6\xd1X\xa9);\xac\xf2|\xd0\xd9\x9fF\xa2\x1b-\x19Y\x8c\xda\x17\xca\x90D\xb7\\\x84\x96\xc7q,\x83nDm\xa6\x14M\x9c\x85S\xf5|\x04\xb34$/\xd5L\x0f\x87#\x1f\x0e\x87\x07\xfc\x9fC\xfe\xcf\x03\xfe\xcfC\x03\xba\xcc\x07)\x9b\x87)\x05\xd8\xed\xc4\xd2\xb8\xa0.RK]jV>\xddZ\xf6:\x88\x97UwS\xa1\xd4\xce\x92\xb9\xf5\x80\xbe\x04\xba]\xf7\xa1\x0b\xc45+OQBG\xcd&\xeb\xa4|,\xea\x93\x11\xf4\xd8\xe0{\xa5r'\xfc\xe7k2\x08\x02\x86^\xe5?\xb3M\x12g|{\xe7\xfc7j\xce]W_[\xa3\x9a\xd3Z\xd3%\x17\xd0\xad/H\xe6\xb0\x97f\x1b[(\n\xff\xe7\x8f?|\x9f\xe7\x1b1\x0f\xbb\xa9&\xdc\xd13\x0e4\xeck.\x05\xda\x8e\x87\xad\xf4\xa9\\\x83\x101\xecD\xa4\xe4\xa3@g\xe3bN\xa7gQ$\xb7Ml\xae\xeb\x91\xb1\xc4\xee2\x02f$\xd5\x1f&\x8c/N*\x1a\x7f\xfb\xfa\x07G&\xa2\x0f\x07\xda[\x18\x03+\xfb\x93\xfcg_\xecG\x9fWj\xf1y\x91&E\xd5\x91\xa1\x17L\x0f(\x7f\xf0ejn2v\x05\x8f\xf1\xc1$\x97\xcb\xe7\xa3\x8f`\xd1\x99\x1a\xcb'\xad\xba\x86\xbe`\xf9u\x92\xbe\x97\xe6uX\x04a\xc4\xe6&\xdf\x0f\xf9\x88\xaes\x8a\xfe\xfd\x0f\xe9|\xc3b7Q\xc7Q \x9d\x7f\xe1\xe5&'\x8cg\xd1v.\xe2\xd4%\xa5\xd3\x1e.Y\x85\x18\xa5\xec\xb8tND\x15\xd5\x16\xddn\xe46\x96|\xc1\\m\x17\x05\x17!/\x0c>\x00 B;\xf9G\xcb'\xe4\xea\x95\x80:B\x03\x8b\xbb\xb4|0j\xe4 c\xf1\\\x0f\xa6\x9ah\x87n*}\xa0\xf6\xd2&\x95\x9a\x89-\x92\xcf\xc1&\x89n\x17a\x14\x99\xbc\x82\xd5_\xae\x9e\xc1\x163[\x90lQ\x8d\x85\xf6\x07\xd1xiqv\xbai\x94\x9bn\x19\xdd\xbb\xeb\x0d\xc8\x98b\nd\x1b\x1a\xb7\xc0lQ\x14\\\xc0pLQ5\xd5J\x13\xa2Q'\x10\xcd\xa4*\x8d\x9b\xf4\xc6\xe5\x03\xd1|\x13m\xeb\xa9\xfe\xaa\xb6\xd0\xc6\xcd\n\xb5\x18\xef2\x89\xec\xdd\xf2`W\xf9Ml\xe9\x9eQF\xffE*KN\x910\xdc\x9a&\xe7J\xc4\x1b\xcd\xe0I\x11N\xfa\x88k\xd6\xc2\xbf\xe2Y\xee\xa2s\xfd\x8b\xe0E\x9d\xcee\xd7!\xae\x9a5\xdb\xfd,\xc8\x18\x0c\xc7V\xc0\x97\x0dX\x8f\xd7\xe5\x83\x0d\x1d>\xb0\xb7$\x1f-\xd9\x80\xb8z\xd5\x10Y@>\x98\x86\xad\xb9\x18\x0e\xe0\xeea\xfb\x00\xf0J\xac\xcb\xd7\xf4\xf0\xa0\x85\xdb\xc8\xc0\x86\xadm\x06\xd3\xa8\xd73'\xea\x94\x8fY\xf2\x82\xe6\xc9\xe1\xa4F\xf6\xfe\xb9\x0c\x1b\x92<6\x83\xa7\x13\xb8\xfb\x90On\xc6!\xeb\xde\x03\x0f\xd7z\x06}\xb8\xfb\xd0>O\xe5\x95\x8b\x0d\xdc\xbf\xa7\x1ax0,\x1a\xb8\x7f\x0fz0\xb2\xdc\x10\x86\x1d\x1ch\xa9\x97G\x0fT/\xa3\xe1Ac\xf0<\xf9\xa8\x15>|\xe0k\xcb-p\xab#\x045\x96\xb2o\x10\x08\xb0\xe5+\xf1\xe8\x01\xae\xc4'l3\x1f\xe8\x81}\xa0mPp\xd0\x0c\x05\x82\xc4\x98\xa0 \xfd\\(H\x7f\xe7P\x10\xea\x10\xf1\xeb\x83B\xfa\xd9\xa0\xa0F;\xba\x0f\xdf@\x0c=\x93Q\xfd\x0f\xf6_\x82\xdf\x05ER\xe2\x08\xfaz\xea\x94\x8f\xbe\xc6\xca\xf8\n\x15\xab\xa2XVP\xf2\xf2;\xb8w_2\xaa\xc7\xb0\x85'pp\xef\xfec\xe8\xf5\xb6\x1e\x04\xd3-\x86#\xfe\xa3\x03=p]\xfeqt\x1f\x8e\xc0\x19:\"]r\x0f\xb6\x05\x97\x1d\xdd\xf7<\x9b\x87\x8d\xcc\x9e\xd6hFo\xb8E\xd9\x9b\xf0\xfe\xca[\\\xf2ft\x9cR\xceP\xe1\xac\xc8\xb4T\xc5F\xcdRj\x94%\xb6j:I!\xf0=<$\xf9\x8fkNw\xefi\x7f\xdf/\xfe~\xa4\xbd\x1f\x1dh\x1f\x12\x0e\xfb\x87\x8f\xf8\x8c\x12\x0e\xfbw\x0f\xd4[B\xdc\x84\x10W\xbd%l\xc4\xb7\x8f\x86\xea-a\x0f\xbe\x1d\x1d\x1cX\x04xtd\x80>\xc4*\x1dh\xce\xd7P^(BE\x9b\x8b\xd3|K\x0f\x1e\x12\xbdO9T\xfb\x80\x05\x83ib\xb1\xdd*\x82\xc1\xeb\x1e\x0c\xef\x1a+\x8f\x1e\x1d\x00\x0e\xf7)\xdc?\x87\x1e\x7fs\xf0\x10>\xc0\xfdC\xb8\x03\x9dZ\xbew\xef\xe0\xd1}5\xe7{\x0f\x0e\xef\xde5utppWv4:\xd0{\xa2\xbe\xe1\x0e\xdc?\xdcm\x00\xcd\xd6\x87\xb0\xc1v\x80\x10\xd2\xeb\xe9pW2*\xbd}}*\x94\xb1\xb7\xafOa\x1dD\x8b$]3\xab\xdb!\x08\xfb\xc5hx\xc0\x07]\x81P\xdf\xb4\x18w\x87\xf0\x81\x12\xc5\xdd\xbfw\xef\xf0>b\xad\xa8\x9ex\xf0\xe4 \x8cx\x81\xd0\xf3p\xbd\x1e\xd6\xd6ktP[\xb0\xe6u4\x0e\xbc\x03\x01+\x02\x890\x8c\xfbT\x12qs\xe8\x15\x80\xea\x95c7\x96\x15\x95\x96\x88\x05\xd4\x97\xe5\x8e\n\xef\xd8\x94\xb9\x85#K\x98}\x17\xc6!E\xe4:\x02\x87\x93?,~\x99$\x11\x0b\xe2zSG\xe0\xe4\xe9\x96!Y\\\x04QF\x7f9\xfa\xb8\x0b:,\xf5\xa5hw}\xc9\xae\x1e5\xc51,8\x02F\x1e\x18vQ\x87h\xd1\xc2\xc5-&\x0c\xa4[+U\xa5\xc8\x9c\x0fX9\xf1:w\x04MF\x87UgR\xb9ht\xa5\x12\xfa\xd2\xd8\xca_\x89\x0e\xd8\xa2\x18%bD\xba\xe6H\x96\x03<\xb3\xa9\x7f\xe4\xf8B\x99b'\xf6d>\xa6%,qM=\xe3\x83\xcc1\x1c\xa8\x88$\\\xbd\xdbrvL\xd9\xf29GZ\x10+Z\xc0\x13\xd8r\x1e\xb4h2\xe1S\xaa\xe1EC\xa6\x879\xa5$n\xc9\x16\x11\xba\x19\xe6\xb7\xedU\xd3A\xca\x87\xafm\xf9\x12\xf8\xbcQ\x08Skp\x05\x13\x98\xab\xf9\xaea\x02W4\xdf%\xcds O\xe0\x8a\xcfs\xe9\xc1\x8c\xd3\xa4\x15\xf4p8\xf3\xe9\xf2\x9c\xf3\x1b^`-\xd4\xb0\xde\x04\x9a.V`\x08+\xbep\x91^\xdeLp\x88r\x97{\xe4\xdd\xb5W\xaf\x8bj\x02gf\xedDL\xc7o.v\xa1\x8f<\x024\x995\xbe<\xba\x04\x86\x88_\xa1-\xea\xc6\x87\x0f2[\x8fdFJ|,\xb7`\xa8\x9d\x17\"CM\xec\xba\x12)\xf1c \x08\xb5%$\x8fp\xdbW\x8e\x1b#vXn\x94P\xbdN\x8e\x93\xc1:\xb8\xf93\xbb\xcd\x94\xee\xae\xde\x18\x86\xc5\xd1m\x04\xfbU\xb5p\xa6\x84 ^`f\xa8\xb8\xc1m\x93T\xd2443\x15\xaa\xdb\xaf\xb0\x9b\x0d\x8e\xb3\xfe\xd1&\xc0r\xbc\xde m\n}D\xe1\xe9\xb9\x8f\xc86$,\x1b\n\x0c\xf3\xf1\x94\x99\x13\x96K\xf1\xff\x05\x9d\xc1\\\xd3\x7f'T\xe8\x86\xb0\xf1\xa6\"\x00\xdf\xd8\x04\xe0\xb3\xaa\x00|c\x11\x80\xcfp\x8c\xb9^tm\xa5\x1c\xbc\x82\x18<:]\xb9\x87\x0f\x10\x1c\xcf\xe0\x08\x07:\x821\x9c\xa8\x9d9+\xc4\xe0\xb3B\x0c>+\xc4\xe03RJ\xd5[\x12\x83\xcf\xa4\x12 G\xc0es\xe8\xf5(\xc2\xda5Y\x9b\xb1\x8f \x86\x91\xe6\xb4\xc7j\x0e\x035CJ\xba\xa2\xcdp\xd9\xaa\xa0\xf2\x8a\xbd\xde\x12\xabn=\xb8\x82'\xe0\xbe\x87 \xdc@\x1f\x96\\B\xa38\xd5\xb7\xba\x04~\xe5\xc3{N\xa2\xc4\x96]a\xf1^\x9bIl\x96\xc4y\x18ow=\xe6\x03\xe1\x0d7\xe4\x00\xf3\x9bo\xc5Ee+\xcc4\xdc\xf8\xf6\xee\xa1\x18'o\x077\x10\x8e\xc0\xe5\xebz\xa5\x86[]\xd6\x1b\x0f\xe3\xa9q\xd2\xf5\xc7\x83\xa1\xc0\x11\xea\xbfR\xf3\xd2T\xf3R\xaby-\x8f,\xd4\xf6\x188H\xa1\xb7\xf4zk\x1cn\xd6\xc4\xe5\x8f}\x90\xb0\xb1\xb6o8oN\xce\x97\xc3\xd3{\x1b\x04\xc1X\xfb^\x9d\x10B\x98\x8c\xf88\x81\xc8\xbd\xf5a\xc3\xdf]\x8b\xe2\xfc\xdd\xa5x'\x8e\xc4W\xeaH\xfc\xd6\xf3 \x98\xde\x9ec(KXMW\x82\x96\xf0\x17\x86\x9bY 4(\xf7\x18\xe5\x98\xdbsO\xbf\xa6\x85r\x06\x1c\xc1\xf1\xf4Xk\xe6\x12\xc6\xb2\x8b\xe9\xb1\x0f\x97\x16\xc5\x8c\xaf\x06\x06\xf5\xea\xf7\x17^\x93\xc1\x8cou\x99\x16\xdeb/D,\xd5.\x12UE\x8c\xa8\xef\xe7\x1f\xec\xbf\x16\nt\xaet\x95\xe5\xc3\x07X\xf2/^\xfd\x93\x0e\xb7\xe5\xdd\xe3;\xb7\x86'\x90\x19v\xce\xfb\xcc}\xe3Hb\xdd9D\x84\xcf\xd9\xa3\ns\x90B\xc5\x1f\xcak\xd69\x93\xc1#K*\x83\xc3\x87#\xaf\xfdtO\xba\x13\xc8\xebpp\x04\x7f\xffH \x0dAB\x8b\x91\xeb\xc7e\x9d2]\xea\x03\xaeF\xd5\x13\x03\x1e\xb6GI\xb4'\x85HE\xa7\xad~p\xa2|\xe2\xb2Z\xfa\xb3\xd6\xc8p\xd69\x8d\x0e-s\xba[M[D\x81\x05\x1f<\xea2U\xc3\x0cJ\xfaT\x7fD:\x94\x12\x16Qt\xfc\xfbG.\xad\x04\xa83\xd9D\x16\xbc\xf01\x0d,\x9a\x10\xe6\xe9\xe3#\x88\x0c\x82L\xec\xce\xf8\x07\xa0\x98\x81>\x84nDA:g6\xbd\x18\x8aU\xcfv[`\xf3\x19\xeb\xfe7{E\xdb\xdf\xc0,I\xde\x87L\x7fs\x9cln\xd3p\xb9\xca\xdd\x99\x07\x07\xc3\xd1A\xff`8\xba\x0b\xaf\x93u\x10\xc3\xd9*\xbf\x8d\xd6A\xdcT\xe1\x1e\x1d\x9e#\x0f\x99\xa3*O\xfcf\xc4\x99H)w\n\xc4\xd3\x0d\x95\xc3?&\xb0u\xe7>d\xed\xa1)M8SI\xe4\x9d\xb14\x0c\xa2\xf0\x17\x93~\\],E\xa0\xc4v\xd7WZ7O}\xf8P\xbdm\x88pY\xa8n\x05d\x86\x16\xc8L0\xa9\x1e\x88\x06\xc3\x0cB\xf2\xfe\xab\xee2\xeep\xd0\x12\xa8R\x81y\x1c\xac\x9b\x1a\x93\x1auX\x8b4A\x07|\x18\x9e\x9b\xfa\xda\xb6\xf6u\x15D-]\xe1uu\xe8\x813q\xa0\x07\xdbz\x8f\xc2R\x06)W\xb5\x9f-\xadW<#(\xca@\xdft\x18\x8b\xc7\xd4\xd9\x8b\xe0\x85\x1b\x99\" \x89\xaa\xd9\n\x831 \x0dxA&\x00\x03\x14g(\x98?\x86\x1f\x83\x9b\xfe\xb3%\xc3\xc1\xff\x18\xe4\xab\xc1\"J\x92\xd4\x8d\x9a\xa87\x1e\x87\x0c\xe6\xc9:\x08\x8d=\xe8o\xb0\xd7\xe4\x15$'(\xfa\x98\x9cUe\x9b\xea\xd3\xe6\xdd\xe0D\xc1\x8d\xb3C\x87?\x047\x9f\xd3\x9b\x90\xc5v\xe8\xf0sf\xd8\xeaF\xd4\x04\xf4j\xbfu\xa8\xaf\xb5\xd4\x81\xffj2k1L\xc9Y\xebF\xca\xba\x1aP?N\xa9\xab\x04\xfb\x8f\xe1\x9b\xfd\xf2k.\x9a\xed\xff4}\xb7\x1d\x0e\x87\x8f\xf8\xbf\x07\xc3>\xff\xef\x01\xe3\xff>\xa4\x1f\x8b\xc5y\xef\xdf\xf6M\xc7c\xdb\xdf\xeax\xac\x1a\x93\xb9\xfc\xd7'I\xf8\x1dC\xaa\x8b\xfek\xcb\xeb2-\x1c\xc4t\xefk\xd7\xfb\xe6|\x7f\xd9\x16\x8b\\\x1eK\xa0\xbbF\xc9\x9e;\xf4J^\x1ae'\x8d\xf2\xec\xdb4H\xbd\xe3n\xb3,\xb9i\xc8\x1c\xf32+\xb2\x92\xc7c\xbb<\x9eV\xcd\xd3\xb1E\xe4N\xd1U\x00\x1d\x07\xee\xdc\x81\x14m\x97\xf7\x0fG\xe8q\x11C\x0fF\xfa\xc9|\x83X^s\x08\xc1\xca\x16\xc1\x9a\x0e*\x9fbW\x07h\x1c\x12n\x1c\\un0\x1c\xcb\xe3\xcf\xd1\xf0\xe0.|C\xde\x1a8v\x0fz\x90\xf0\x1f\xd8^\x8f\x8e\xf2\xed\xe4'\xa7\xebp\x07w\x87ey(\x84}\xb8\x7f\xb7\xf8\xc7\xf3at\xf0\xd0Z\xc6\x83?\xc2\xfd\xbb\xd62\xe5\xcf!\xfeB\x1f\x84^\xa3\x1bg\xa3\xbd\xban\xf25\x9c\xc6Qh\x89\xbb\x0f1B\x04\xcd\xf4\xe0ny\x84i\xf3$S\xc3\x04R\x9a\x00\xe7\x97\xbc\x03\xfeR\xb5?zt`l\xa0^WTH;\xd8\x0d\xda\xd2O\xea\x90\xb2gw\xf3\xe7@\xc3la\xf9\xedF\xb2J\x91\x86\x0b\x96(\\\xa6z\xfe/\xcb\x19\xb2\xc4\x93\x86[d\xa1\xddAs\x9e\xb4`F\x80V!v\xc3f\x8d\xa9\xc5\x94\xb62\x99L h4\x0d\x83\xd2\xcbCx\x02\\\xbao)\x9c\x90S\xcd\xf0\\\x19\xa7\xc2^\xcf\x0c\xc8p\xbd\n#\xa6\x14'>\x14s\xbb\xd2v\xc7\x81N\xf3x\xe9\x8f\xcc\x19r\xfe`\xdfIK\x8a\x00\xd0\x9d\x04\x85v\xbaS\xbb\xc2\xach\xa3\x8eZz\x8d;\"\xbd\xc1\xd4\x99\xfet\xee\x9c\x97\xcd\x07d;\xe0\xa2l\xcd\x9e\xa3\xda\x12\xa4\xbd\xed\x92\xf0\x0ea\x81\xb0\x1a!%\x1bd\xc96\x9d\xd9\"Fx\xbe,\x18\xca\x82\xe48\x98\x0efI<\x0bD\x10Gv\x0d\xaf\xd9\xf2\xe4f\xe3\xa6\"\xe0\xcf\x07\xc7\xab\x99]\xc1H\xba\xd8`\x11\xc6\xf3\xe3U\x90\x9e\xc6sv\xd3fB\x93\x0f\x87\xd1\\\x87\x0f\x85\x89\xfd\x86\xb3\xa22\xceZ.>\x95,i\x89\xeb\xf9\x02E\x0b\xd7\x98X\xa2\x1c\xda\x1c\xdcx\x10\x05YN\xc3\x7f\n\xb9\xf7\xd8\xe38\xd0\xb8]\x86\xfc\xcc\xbeX\x8aoos\xb6\xd3R\xc8\xd9\xf0\xd5\xc0\x1b\xb4\xb4 \xe4\x95\x858\x83\xf5q&\xe6x\x8b\xc4\xc5\x9fu\xbe\x1a*\x17\x87n\xa6\xebc\xa6j\xf6\x0d\xe0\xd2\x0c\x9e\x88\xc6\xc6\xbd\xb3EY.\xe4\x1b\xe5\x98\xc9\x85\x8d\xea\x89\x88\xfe$\xe8t\x84\xfb\xd4\x92~KQ\xc6\x84\xeb\x8c\x94)?\x99\x0e\x8dq6tyg\x97\xd5j\xbd)\xa3?r\\Hc\n\xdc\x92(\xe8#\xb50\xee%\x7f>\xb6\xedA\x8a\x06W\xd9\x8b\xf1^\x0c\xd8D\xbc\x96\xa5$\xa9\xf2\xc9\x84\xbcA\x92B\xb4+\xcd\x89\x8f\x15}?\x87\x9e\xafdN\xe95\xca<\xa7\xd0=\xa8\x07\xee\xa2Q\xe0\x10\xde$\x9c\xf4\xbdJ\xc2\xb8\xc5\xe6!\x9f.\xb6\x0f\\\xdb\x99lW\xae\xb1\xc6=DjIU\xc4\x13\xd6\x12\xa1~j\xef\x1b\xa7o\xe1\xfajBo\x84\x85\xe8\x8bM\xac?\xb9\xcf\xd7\xf2\xf9w\xdf\x9d\x1b_\xeek\xbb\xfeQ\x1c\x16t=\x13\xf8\xba\xdf\xef\xbf\x8b1\x00\x96\xb3\xca\xf3M6\xde\xdf\xdf\xb0\x1c\xf3\xdd\x0f\xb2\xeb`\xb9d\xe9 L\xf6\xaf\x0e\xf6\xe5\xaf\x9f\xb3$v\xde\xc5\xf3d}\x11\xce\xc7\xe0|%>\xf4\xb7\xa1\xf3\x8e\x0e\xc1\x82\xd2>\xab\xa60\xf2\xc15-\x07\xf4a\xe6\xc1>$\x1dg\xa5?ie{\xb4\xa3\xc0\x0cz\x10\xc17d\xee\x1d\xdc\x83#8\xc08\x0e\xdf`$&\xfe\xbf{\x17\xfa\xf4\xd2C\x95\xd2\xa6\xe0\xd8\x9e\x02Py\x17#\x0e\xac\x08\\\xdf3t\xef\xf5\xf0\x00\xf2 \x10`\x0f\x88L\xd37.\xb1\xa0\x0b\x90\xbe\xd2\x81\x0f\x8f\x1eiPo\xc7\xce\xea\xf3\xd1\x87G\x1d\x8b\x7ft\x9b\xcb\xd9/%5\x90\x84h\x07S\x85|2wK\xf1\x9e\x8dG4\xf2\xb1\x84\xb4\x93\x8c\xc8N\xa4X\xbe\xdd\x8c\xbb[\xbb\xa1h\xd4\x1571\x91*y\xeap\x8c\x8fU|B\x87\xe6\xdcS\xc6\x9d\xdck\x8a\x1d)\x1f\xe1`\xf4|\x9b\x8a\x00\x90q;\xb8\xb3\xf9\x92\xbd\\,2\x96\x9bBz\xeb\xcf'\xed[\x9e\x8c\xc1\x92\xab\x80>\xff\xd7\xb8\x89\xd6\x85q\x9e\xfc%d\xd7\xe5u6]\x9c\xad>\x92Wc\x9c\xf0o\x93m<\x0f\xe3\xe5q\x14\xb28\x7f\xcdf\xb9\xeb\x0dV\x88'\xed+\x14H\x8a\xae\xf8Z\x0f\xc2\xf6j3YM\xe2j{\x95\xc5N\xbcc\xc3Q\x02zm\xa1n0\x05\xf2\x13Xp\x88\n\x91^<\x85\x19\x1cQ\xbc\x01Z\xc91\x04\xe2\xc3\x06\x8e s\x03N/\xf9\x9b\xa2\x00\xb1\xd2\x06\xccn\x80\x81\x19\x8bs\x96\xd6\xb60\xed\xb0\x8b\x99\xdb$]\x94I\xe1>\x1c@\x8f\xa3\x0b\xc7\xaa\x96]\xe7\x85=OL\xefS\xe6\x94\xe5\xc9f\x0c\x81\xbd\xc0:\xb9\n\xe3e\xc7\x0c\xfcP\xd0\x86\xbd\xbd\xfa!\x90|\x1a\xc6\xc3\x81f,\x80\xa7\xb1\x14.\xdfX[Jca\x833N\xbdUN\xb3\xa4\x14?\x90\x7f\x9cDl]s \x04\xc1G[\x17C,\x82\xd0E\x88\x9f\xfd\x17\x1a\x91\xc5\x8f7\xc9\xa6\xcb\xd0\xd0j\xef\x9a\xfb\xa0x\xd7j\xe0\xd4n\x18/\xc5\xc8yo\xea#/k^N\xa4\\\xddd\xe5\xd2l\xde$\x1c\x92wL]\x81\x9bkIN\xa9P\xa0#\xac\x95\x978\x8cc\x96\n\x89\x01\x97y\x86\xc8Bov\x1c\xa3\x00\xadn\x8b\"\xf5T+\xa2\xe6\xc9\x86\x93 \x14\xde\xe2A\x82,\xca\xb4\xfb`\x06W\x83\xb75\x06%\x0drv\x86\x1bQ\x8b\xeah\xa3G\xd2N\xd5\x08N\x96D2e(i \xcb\xaf \x9c\x03\xef\x8ek\xff_\xbb\xed>k@'h\xec\xe8S`M\xc9\xe7\xac\x04^~' \xdc\x15S>\x0d\nw\x86/\x01/\x7f\xa8\xbct\x82\xf9\xfc\xe4\x8a\xc5\xf9\x0fa\x96\xb3Xd\x0c*L.{b\xcaq\xf2\xff\xb2\x98\xcc/\xf8\x9a\xb9%\x9ac\xbc'&E\x1ag\x15fy\x92\xdeV\xad9\x9bm\xb6:\xcb\x83\x9c\xcc<\xa2\x90y\x9d\xb8L\x13\x92 \x08\xe1\xe05\xe3\x85Qj\xd4+\xd7%\x0b\xcaT*>\x0fj\x95\xf9\xe8\x82m\x9e8\x9e\xda\xdc\xea\x82\xb8N\x94\x04s\xc7o\x87 \xeakWE\xb1ql\xeb \xde\x06\x91%\x86=Wq\x1a\x86\xbdI6\x19\xaen\x9b\xe7\xb5|\x18\x86\xe8&K\xdc/,\x16\xdc\x8cRH\x15\x9f\x12T\xf1\xc4\x8bAQ\xce\x06\xf7\xb0\x87\x97\xf3\xc40e\xb0\xf7\xc1*\xc8\x10\x92v].iUL\x06\xa8\xd0\xb8\xde\xa0\xd0\x08\x9aO\x0dZ\xedC\xd2h\xa7 {\xc9\xa4x\xf0\xed\xed\xe9\xdc\xadM!e\x0b\x99\xc1\xef+\xc7\x9b\x8e\x9a\xf2\x05\x83t\x8ek\x1b\x05\xd4\x0c\x05$L&\x850\x99s\x1e\xc3:\x88\xdc \xe4\x98D\x08\xe9\x9c5\xb5+\xf4Cx2\x81\x14\xc8 \x1d\xd0\xff\xdc \x124\xa8\xa8\xd0\xac}\xd9\xa1\xd9D\xb6\xf6L\xae\xebW2\x8aO\xe1\x86\xe5\xb8?}x\xf7.\xf34J\xe5\xbe{\x97}\xf87\xcf\xe4\xc2i\xc5\x9aY\x14\xce\xdewB\x99\xd2\xb1!\x1b\xe4A\xbad\xf9c:\x89q\x9e9\"\xd8L\x1e,_\x04k\xf6\xd8\x13G\x9f\x9b eq\xfe\"\x997$\n\xdfs\xf7\x90\xb1\x8c(\xe0\xd7\xe0z\x15\xceV\xa4&`\x1a\xc8?\xb3[\xfa\xb5fy\xa0~\xcc\xf24R?\x82\x88\x97j\x8c\xfd\x82\x16\xc86h\x94\x90\xa8\xa8\x94\xa2\x10\xf5\x08d\xe52G\x95\xdf\xe3\x9a\x91\xbc\xfa\xc4\x1a5\xd1\x80\xb6\xb9R{\xca?\xd0\x88\xac\xb8\x96\x82\\\xc7\x8d\xeb\xe7k\xd5\xa7\x94\x02pW\x90\x06\xdd\xc5\x0b\xb3\x18\xe4y\x1a^ns\xe6:\x9cv8\"\x85A3\xd9\x12\xc6\xfe\xe2\xce\xf6W\x0e\xf9\xb7n\xc9C:\x1f\xcc\xa2 \xcb8\x90\xb5\x86\xfa\x91\x06\xdf\x06\xb7w\xf9D\x0d\x840-\xdcZ\xdcQ\x9b\x89\x10\x8fW\xber\xc4\xd1j\x87\xbdB\x0c\x88\xe4\xd1J;\xb9\xca$\xac\x10q\x8c>\x95.\x01egJ\x19'\x08\xcf\xc94\xd5\x06}W\xe2\xcac'\xd6\xa5?\x15^\x02\x93\x16c\x164\xab\xd3\xf2Y\xec\xcc\x19\xa9\x16]\xff,3\x9c\x0c\xfa\xb0@/\xeb;\"x\xd9N\xb3\x94(\xa7\xa4<\xf7\xef\\\xdet\x8c>^\xfa\xf3\x11C\xbb\xa2\x94\x91\xf9\"\x83\xf4\xac\xc1\xe8af'\x16V\xf2\x07{!\xe9\x07\xa7^~t\xcb\xdea\x18\x9e\xd1\x18J-\xc5[\xad\xc1f\x13\xdd\x92\xa7 \x8c9\xac\x7f\xf8\x00\xae~\xa2\x1c\x9a\x0f\xa0;\xdd\xc9\x13\xc1\x1b\xe9\x94\xb2\xc8\xc9\xe7\x83sq\xc1\xb2\x1f\x93\xf96\xe2\x92^y_0}\xdbX\xcf\xc8\xa0\xeb\x99\x926m\xdc\xd8\xbd\xeb\x19\x02\xa8\xf0\x0f\x07\xd5\x0f\xa1\xf8pX\xfd\x10\x88\x0f\xf7\xaa\x1f\xb6\xe2\xc3\xfd\xea\x07L\xf6\xe0\x0e+o#,^MJ\x85'G\xbc\x15\x94&\xf1\x0f\xb2\x88\xb9\x87\x0f\x1fT\x1b^P\x94\x17\xcft1\xd3\x90\xf4Y?\x83f\x83b=E\x9c\xd5:\xac\xcb\x9b\xb1-\x97/A,2E\xbdX\xb1h\xc3\xd2l\x90lN\xe7\xe5\xe1\xb6;\x02\xaa\xd1\x0b\x7f:\x0b\xfe\x91\x9c(F\xe7\x89Lj6\xcf:\xa9\x9e\xf1JA\xb5\x92\x9b\x0f..0\xfd\xd9\x05\xc5\\\x1b\xfa\x18\x19R\x16\xf2<\x91#\x11K\x93{g\xe3\xc1D8\xc8\x93\xe52bg\xab\xe4:\xeeJK\xa4\xb0\x1f\x0e6i\xb2i9c\xcc\x85\xd3\xeem\xb2\xcd\x9fa\xdb-\x15b!\xb7-\x9b\x8b\x91\x97\x1cG8$\xd5\xd5\xcd\xab>\xc25;\xc3\x896\x17E\xad\x96s\xae\xd7,K\xa2+6?\xdb^\xe6)k<\x0f\xc53P\xcd?'@;\xf9@$\xc6\xa95\x84!KV\xc9\xb5;u\xd4\x0c2\x87\xec\xd9\xe7>\xec\xd9\x9c\x9a)u\xcfq\x10\xcfXt\xccE\xe2\xae[\x869j\x04\xbdo\xde\xae\xf4\xf64\x7f\xb9\xcdO\xe2\xe02b\xf31\xec\x85B\xa7\xac|\xb1\xb6b\xc8H\x03\xc5\xd8\xdf\xa4\x1c\x10v\x1a\xfb'\x80[\xb6a\xb3\x1d\x80m\x13\x98b\x8a\xea\x0fA\x1be,j\x10\x0c\x7f\xcbU\xe60\x84.\x1b\x7f!\xbf$F\xc9\xc11\x87ejs\xab\xa3M8\xb9a\xb3m\xde)q\"\xec2-F\xed\x9e\xc6\xaf\xd2d\x99\xb2,\x1b7&\xf2n\x18c\x1d\xfb\xba\x0e\xf6\x13\xa1\xe5\x8cEl\x96'\xe9\xaf\x00/]\x08\x13\x1f\xc2\xab _\xd9aK\xdd\x07\xc0\xac\xf6\x1b6\xab\x12\x15.\x9b\xfd\xe9\xcc\xf5\xe8\x12\xb1\xa9\xc4\xd4\xe1\x03Wt\xa6a\xf9\xcdt\xebW\xde\x82_\x0da\x7f\x85\x0d\xb0\x10\xf6\xf2\x1eX\nu\xdf\x06R\xd1\x9b\xb2\x00\xd6 \xc9\xc8>[\x13zZr\x8a\xfb\xa6;\x97\xb57\xca\x11\xc1\x87\xad&\x85\xf8\xc2\x07\x81OA\x7f;5\xcf\xe3=\xbb\x1d\x83\xb3\x0e6Hb\xde$\\\x8c\xce\x1c\xf34\x84\xe8\xdc\xd9]B\x1aJ\xf2A\xb2i\x07\x98\\\xc8)\x1d\x89A\"\xc4\xb4\x9c\xdc\x1d\xe3E\xb8\xcc\xbc\xb63w\n&?Of'7\x9b \xce\xc2\xa4\x834\xc2\x85G\xb6\xf9!\x8c\xdf\x87q\x8bX\xb4\xa5\xe2a\xb6\x89\x82\xdb\x97]\xa5\xa3L\xaf%R\xd9I\xff\x8f\xe6\x9a\x11\xa9\xb6\xdb\x0d\xd7\xa6\x10\xc6\xd7a\xfe#\xa2]\xcb\xeaa'OO\x16\x83\x1f\x83M\xab\xd2\xfe\xb3\xd0\xf4\x17x\x13\xfcOg^\x0b\x8b\x03T4\xc6p\xda\xdc,\x7f\xf2`\xd9\xe9\x86\x05\xa7\xdfV\xef]\xfd\xc9\xa4\xee\x91[\x14-\xfa.\xf4,\xc7\xc2\xdd\xf4g\xce6)\x9b\x059\x17\xf1OI\xf3-^9B]3\xf6\xa5\x15\xa3\xee\x9a\xccS\xf2!\x0e4\x86\xa4\xbdh\xa1\xa7t\xb8JQ\xd6UZTi\xa8\xaa\x8a-j\x19\x96\xaf\xdb \xc4\x82u\xb7X\xb4\xf7R\xd2/;\\\xf0SzU\x8b.\ne\x15\xaaE\xf6\x80\xbaN\xd9B\xf2AW\x81Z\xf4O\xb0\xe8\xc6-\xda(4\xe8\xc7-B\x12X\xd5\xfd\x16\xce\x0ff\x89\x96\x04b<\xd2\xa9}mo\xb0f\xd6\xd5\x9a\xebzB\x04P\xf7_\xd7\x1fa-\x89\xa4\x89V\xb8\xb5\x0b\x8f\"\xf7\xc7\xb6\xabb\n\x9c\xc7\xf0s\xf3\x8c\nm\xba\xcdh\xdf\x11<\xba\x82\xb4v\xb6-\x96P{\xd3\\\xb5tR)*\x97\xde\xb5U\xd7\x0eiUu\xed][uqD\xa7\xaa\x8a\xdf\xcd\xd5\xa4<5\x86\xcb\xf6\x82\x82\x95\x8f\xe1\xba\xbd\xac\xe2\xe3c\xb8h\x19y!$\x8c\xe1e{Y\xad\xe5W\xcd\xa5K\xf2\xd0\x18\x8e\xbb\x94\xd6Z?k.\xaf Och\xd9\x9d\x92\xe44\x86g\xcd\xa5u\xc1r\x0c'\x1d\n\xa3T9\x86\x9b\xe6\xa2\x8bx\x0co\xac%l\x87\xab\xb5\xb7\x1f\xcf=\xbfrO\xe4\xa3\x9b\x0d^mSfJ1\xb9\x92\xe4\x02-\x1d\xb5\xb3\xa9\x12s\xda\xab84\x16t\x00\xdd\xc7J\xdf*\xbc\xa4Z\xd5\xc4\x0c\xaa\xb2\x84\x8d\xf2k\xc6\x05\xcc\x15#&\x00\x13\xa0\\\x14\xbf7\xc7\xaf\xc8\xe6\xf8\x15\xd9\x1c\xbf\"\x9b\xe3Wds\xfc\x8al\x8e_\xfc\xc3Pw\x1a\x8a\xc8\xb9\xcb\x92k\xfa\xb7\xf6\xd9\x9a5\xfadi\xfeX&k\x8cv\\ip\xc7\xf2?\xd9\xe5Jx\x18bq\x992\xa7\x9a\xd6\xc8\xe8\xd4\xf8\x19\x07\xa7d\xa0Z\xb2\xfc\x07$t\x06)\xbe\xab}j\x17\xdbT\xbe\x83\xaa\x1c\x9b\x14\xdf\xc1l\x9b\xa6\\\xbch\x10t\xd1>\xe9\xc6\x98T\xbc\xd1y\x0d\xef\xe8\xb6\xceO\xab\x90Yd\x1dg5r\xa4O\xeb\xd7\xf0\"\x11\xdc\x03D\xf0\x19\xbcS\xe0|\x8d\xe7\xf5_;\xf0ug\xd2Z\x86\x00\x93@\xd5bg\xfc\xa4=T@a\xb3\xe6\xb6\xac\x06\xa3\xa50\\\xfb(\xcf\xa7\xcc88\xd3\x90\xed\x99\x18\x87Nwg>\xccj|\x84Z\xff\x171\x16\xcf\xfftb\x8c \x8b(\x15\xfa\xd5|a\xb0\x8b\xd3\xac\xba\xf0\xc3WL\x91_\x15_?\x82 \xe5 u3\x8fr\xe8\x0f\x1f\xc3\x0c\x9e@\xf6\x18f\xbd\x9e\x07\xd1tv\xae\xd7\x9c\xce\x0ca\x01\xc5R\xc6x\xe1\xd1\xe6\x9c\x8b\x18\xd8\xca-fA\x14 \x96\xc1|\x98\xf2\xba\xe72\xf4b\x84IZ\xc3\xc1,J\xb2N\xeeV\xc2\xc5J\xb7\xfd\xa11\xfc9G\x85\x10\x7f\xbbU\xffz 4\xc3\x8bZ5\xa6\xc77\xe3\xb7\xe0\\_\x96\xe4ub[\x1d\x0d\x9eqwcj\xba\x03;\xa4\xd3\x15\x96\xa6\x1d\x86\x10\xeeb\xf1\x0e\x84\xf1t\xf0\xec\xec\x8d\xbd\x14\xdfm\xed\x04-\x90)m\x1b\xcc`\x98\x0e\x15\xa1)\xd6\xc1\xa9\x81sS\x8aT\x87\xaf]f\xcb\xd0\xd0\xc6\x8a\xe7\xe1U\x8dT\xeb\x8f\xbaV5\x06g\x1e\x06Q\xb2\xecoo\xacWq\xbfH7\x97\xc1\xec\xfd\x1f\xea\xe57Z<9\xa5>^\xcf\xff\x8d\xfaZ\xb1`\xfe)\x9d\xad\x0e\x95\x1c\xe8<\xbb\n\xc2(\xb8\x8c\x18\xea\xfbI\x1a\xfe\"\\\xb8\x9a6\xfbr\x9b\xe7h\xe0\xb5\x0f8\xbf\xdd P\x89\x92\x9d&\x86\xfc\xa0\x8f\xd3k\xa8\x91\xc4\xba\xb9 \xeb\xec\xbc\x02\xd9\xd5\xb2q\xf4\xd7\xe1<_\x8d\xc19\x186\x0cd%\xa2;\xf0R;\x8f`\x9b\xd5e5\xfdY\xa5l1\x06\xe7+\x9c_\xc3 n\xa20~\xff}\xa9\xb0\x05y\x91\xe9~Y\x00\x9c%q\xce\xe2\xdc:\xfbh\x80|\xee\x8c\xfd\xcd\xf5\x06\xeb`S\xcaI\xdex\xfd\xb7\x85~\xce\xda\xcc\xb6\xc8~[\x0e?\x9e\x9d\xbdi=\xf0\x98\x17,\xc1\x1a\xb7D>e\x13X\xcb\x19\x96\xce\"[\x0f\x81*\xa6\xb8\x96\x93\xdb\x92\x91\xaf\xc5\x00\\1{\xd6\xdd\xa1\xe5c\xb3\xb4y\xf8\xd4\xbe}9%\n\xdf\xfeK_\x12\xcf\xbf\xf4\xa5\xff\xc5\xfa\x92\xe0|]4\xa6\xce\x97S\xf2\xeez@\\\xd7/\x06\x1a}|\x93\xa8\x83g\x9bI&\xafim\xe6\xd4\x15\xffR\xda\xccO,\x80\xac\xac\x8dy\xa4\x8b(\xd9\xedU\xb2\xd9n\x1c4,6+u{{\xbb)>\x89\xa8\x13\x14\xee\xce\xde \x0b\x7f\xb1D\x13\xf9\x92:\x10\xef\xb2\x7f\x9d\x06\x9b\xcd\xa7\x08\xbc\x1d\xe4U\xad\xb3\x04\x8e\xc0\xb9\xccc%\x113\x88\x92\xd9{6w`\\\xfd\xb0\x8d\xc5\xa7\xae\xf2\xaa\xf8\xb5\xf3\x14\xb2M\x10kR\xbb\x1c@\xa3\x98\xfe\xcf\"\xe5\xe2\x82\x7f\xa5\xad\xf1W\x1d\x96U\x13|\x1b\xea\x9bG\x8c\xf4\x14\xddkm#\x8f\x85u\xf8_\x92\x0d\xfcK\xb2\x81\x7fI6\xbf\xbddc\xbd7\xc0\x06Y\x9el8\xd4\x07\xcb\x80\xf8\xb0\x99\xff\xc8\xcb\x05\xd2z,:\xb1\x88&\xe8lop\xa9\xff\x9f(\x8e\x94\x1c\xd5?\x8dy\xef\xc6R9\n\x96\x85\x94\x8b\x0b\xceH5\x9am\xf8\xda\x81\x0b8A\x1a\x06\xfd(\xb8d\x91c\xea\x06h\x9c\xd6\x8e\xe4\xf7\x0e]}!>\xfeO\xc2\x93\xd9g\xf2\xe4\x86\xfa\xe6\x11\xff/\xb4\"\xcc8K\xad\xf1\xd4D|\xa9q\xe1PV11\xdb\x99\x89\x0bo\xc5\x87\x1a\x17\xce\xc4\x87\x1a\x17\x8e\xc4\x87\x12\x17\x9e\xc9\xc8G3\x11\xf9\xc8\xc4\x8fg\xbf=?^t\xe5\xc7\xb6\xb0EU*l\xe5\xb9W\"\xafz\x95\x98[}g\x92:\x0fl W$\x16+\x18$1\xa7\xcd\xc7\xab ^\xb6g0\x02\x8d\xcf\xb1A\x1c\xac-\xbaXP\\[\xab\xb0\xe8\xbf\x7fDL`&\xf4\xe3\xfc.\xc3\xbb\xee|H\x9d\x06S\x0fb\xc7\x1b\xa9\x1f\xdf*\x15\xca\x0d\xc8\xe3\xd7\xd2}\x94,M\x91tv\xe8\xbfY8\x08\xda\x14t\x8a\xab\xd0\xc9@B\xc1\x154\x93H\xcd\xe6\xdd\x1a\x80U@\x819\xa25 \x1d\x19\xe4 \xc9w\x96\x99\xc5b\xcd\\s:\xd3\xa0~\xec\xbe\xc3b\x9a7\xb3\xe3Y|P\x84\xfa\xe0\xbf,8\x0ee\xd9)3\xcaN\xc1?@vj6\xe2t1\xf6\xc4U\x00i\x83\xa5\xee\x87\xeeyW\x1bR\x88\x85\xbb\x9d\xd0\x07t\xd2\xcd\x91\xff4g\xeb\xa6\xabH[*Jy\xe0\xda\x8cO\x19\x15\xfe\x96d\xc8\x96\xa3\xf6\xa4do\xb2\x97\xa5\xc0\x19\x8b0\xcaY\xfaIH\xb7\xb77\xc3k?\x96(\xea\x80\xd8g\xef\x7fc\xee\xbfc\xe7r\xe5D\xd4]\xbc~\x94\xdfnXC\x8c\xd8\xa6\xc1\xcc\xbf\xcc`&;\x0c\xa6Q\x8f\xb0\xdd\xbf\xd8\xdd\x088K\xe2<\x08\x9b\x0e\xd9\xf7\xf66h\x95\xe4b\x87\xb5\xdfE\x92\xae\x1b;Nb\x8a\xf2\"o\xa5(6h\xebvS\xa6\xf6mI\x97Z\x16&\xe8t\xc2\xd9v\xba7[\xb1u\xd0z`\x18\xe3\xf2\xb6\xb4\xb5\xd3\xe9\xa6.\xc3\x8c\x81\x95d\x9a\xe6\x9a\x81vy\xad\xe5\xdeK\xf9\x08\xf5\x13\x8e.\x0bN\xea\x7fA\x00\xbd\xcc\xe3VK\xb5\x00P\x8e^\x0b\xfa\xf3\xc8:\x82\xack\xef\\e\xa6\xa3yi\xa3\xee\xac\xcdjR\x96m\xc8\xce\x0fX\xc6\xf1`\xfciC\x15\x1e!\x84H\x1d=B\xeaS*\x00\xc4\xba\xb8e\xeb\xf8'\x8d\xb5e\x0c|\x8b\xe7I\xdc\xe4\x97\xb1\x83\x97\x8as\x8cn\x1bh\n\x9bs\xa25o\x03 \x01\x94t\x18\xf0E 7\x9b%\x1b\xd6\x9f\xb3E\x83/\x87\xa5\x9bMq,q\xc6[\xc9 H\x19l36\x87<\x81e\x1a\xc49\x041\x04\x9bM\x14\x8a\x80\xd3\xf3p\xb1`)\x8bs\x88\xd8\x15\x8b2H\x16\x10\xccf,\xcbx\x95y\x90\x07\x90\xc4p\xc9VA\xb4\xe0\xdf\xf2\x15\x03\x16\xcfy\xa3\xe9\x00N\x82\xd9\n\x9e\xbd:\x85up\x0bs6\x8bx\x7fI\xcc Ia\x9d\xa4\x0cp2\xd9\xa0i\xf7\xf5Q\xf3\xa6R\xf6\xb7m\x98\xb2\x0c\xbbZ$Q\x94\\\x87\xf1R\xb6\x04Dg\x80b\xe1'1\xcb\xe06\xd9\xc25\x9f\x9a\x9ac\x9e\xc0\x19\xa5\xd1\x85\xb7\xa7\x03\x07\xe3\x03\xef\xc6\x81?\x8d\xfb~\xac\xbb\xd64J<\x9f\xcb\x91A2\x9f\x06%\xc5\xbe\xf0\xdb\xb6\xa6w`\x00\x92\xbd\xb5\x05\x8dA\x10oR\xa9\xda\x19\x04\xa7z\x9ft] \xeal\xa3\xa2\xe4b\xbf7\x1b\xd5\xef\xf2<\xc8\xa7?,\x96\xa8\x7f\xb6\x93\xa1\xffy\x17\xb6\xbe\xa8\xda\xdd\xa6T\x8b\xd0\xaaH\x0b\x9aUo2\x905\xeb\xdc\xbb9\xbaw\x93kC\xe5\xe3\xd1\x16\x1a(\xd8\xc1}^h\xdc\xc1&\xfc3\xbb\xe5\xc3hR\xa4#*|\x19d\xe1\xac\xad\xecL9\xd17+\xdb\xb9\xce\x9a\xcc\xda_v\x1db\x06\x93E\x13C\x9a\x05\x19\x031\x0fgl-\x06bh\xb6\x83\x8dV\xce\x02\x1d\xb5&\xe8\xae9AW\xed j\xfaJ\x87\xc8\x1c:+\xec\x10\xf9c'\x0d\x0dHF\x15\x1a\x9a=\x8d&4\xe8\xf6\xf2\xb9LY`9V\x05\xb5\xbf\x08z\x9f\xb1\xbd\xd1\xbf\xb6\xf7\xf7\xb9\xbd\x92U~\xf2\xcev\x928A\xedn\xf3\\|p\xde\xc6\xef\xe3\xe4:Vas4'nTB\xc1\xf1a\xd1\xf5v+t8\x0bo\x1b?\x8d\x1bz\xe0\xf4\x7f\xde\xae7V\x15\xcb\x90h\xe6\x7f\xf8 \xe8\xefR\xba\xfc\x97L\xf9\xbfD\xa6\xe4\x82V\xd2@HU\x1c\x00\xd7A;E\x93\xd0\x14\x17e\xd7,\xcb\x82%k*\x9d\x16\xa5\xb3d\x9b\xce\xac\x02\xd4\xe7\x92\x1e\xdd\xc6\x83\xb3\xb5\x85m\x05\xcc\xd3}\x1b1\x13\xe4\xea\xcfe0{\xbfL\x93m\xd4)\xd5\xe7\xfbm\x80\x1e\xf5\x07\x97\xe7\x1f\x16\x98\xbay\xa7\xa1t#\xaa\xc9\x95\x16t\x7f\xea;w\x8a\xd4\x10\x9c\xe0\xe14\x1c[z\x9c\xfa\x92\xdbX\xd8\xef\"\x94w\x1b\xdc\x83.(u0\xb2\x81\x12\x95\xba\x99\xc4@\x19\xe6\xda\xf7.\xc44\x8d\xcei\xbc\xd9\xe6m1v\x03*\xfb:\xb9n+\xb9\xa5\x92\xc7I\xa3\xb0\x08*\xff$\x1e\x19\x9fp\xc1\xac\xad\xfc\x8c\xca\xff\x18\xa4\xef\xe7\xc9ukX`\xcaB\xe9\xfc C\x9d\xbe\n\xf2U\x9bO\x0e\x08\x17\x96\\\x04W\x12\xa4\xa9\xb9\xc2\x1c Y\x10E8\x85\xcc\xf5v;\xf0\x92\x8fdo$\x11\xf3%9\x9d;\x1e\x9e\x7f}\xba\xe9\xa2\xdb9W\xcb\x19\xea\xean{\x99Y2g\xaaT\xa2\xe2\x04\xbb\x0e\x07B<\x07t\xfe\xff\xff\x0f\\2pz\x8e\xbd\xa5E\x9b\x11\x84\xa2#OU\x16\x19\xcd\xe7\xce\xf1!9\xb7V\xc6\xb4\xb6\x9bF\x87\x98\xd5}\xc3\xf5\xb2y\xd3\x19j\xd0\xb62\xad\xb7\xf4I\xf7\x19\xcb\xf5\x9a\xb3l\x96\x86\x9b\x1c\xa3^7\xcf\xe5\x93\xc7\xa4\x1f\xfc\n\xbd\xa8\xeb\xd6\x96w\xf5\x8b\x8d\xe24\xde}\x0ca\xfc\xd9#\xa0;\x13j\x14\x88\xeec\x07\xc1\xa4\xc1\xf1\xa04\x18\x07\xbe\xc1\x07\x1a\x9dB\xb6mC \xdb\xc0Dx\x8ep\xe5\xabE\xcd*L\x9e\xf2\x92\x06\xfel\x82%\xcf\x87yS\x98\x8a\xae\xde\x83\x9f\xe4g\"\x1fT\xcd[\x0f\xb2\xa1\xfd\xe4\x1d\xc0\xea\xefD\x9f:\x0b\x1a\xa6\x80\xa9\xa6\xc3\xec\xf2\x907m\x97\xd3u\xc1\xa2N\xbbK\xbb\xa67e\xdd\x85+\x91\xfa\x8e\x15\x97\xbcZN\xe3\xc8[6\x0f\xd2%\xcbi\xe3\xede\xe5\xdd\xb7\x8a\xbf<#\x91\xbcmg\x85\xc0ega6\xf6\xc5\no\xfd\x10\xd3L\x87\xadz\xfc\xbf|\n\x8a\xe7\x93\xac\xbe\xffd>\x05\xb0\x9bN\xde\xe9f)\x88\x9e\x7f\x83\xc4\xdc\x0b*\x186\x8cb\xdb%|\x05\xdf\xd1m\xab\xde\x11a\xa9f\x9d`&\xf3a\x0b\xc1w\xb0\xcdXj\xbfP#v\xbfK\xf6RR\xce\x1b4o\xa9\x9c7\xccS*\xe7p\xd4Bs\xe4\xa8m\x8a<\x7f>r\xf0\xb4\x9a\x19\x7f\xeb\x94\xa8\xffp=\xbf\x8bc\x06\x94\\HZ\x95\x0e\xbaM,\xf5\xfcX\xd3\xf39\xda\xd8\xd6\xbe\xbe\xf0\xffK\xb5\xfdv\xed}\x978\x93\xf0;\xd0\xf6\xa3O\xd3\xf6wS\xdf\x17\xbb\x99\x08\x0c\xda\xbe\"z\xedj\x7f\xf2\xab\xaa\xfduc\xa3\xfetP\xfb[N\xccH#\xb1GH,\xd4~\xe7\xdb \x0bg\xe5\xe8\x88\x8e\xbdj\xab\xce\xdb\xac\xc3\xa7]tx\xfb\xb0\xad:\xbc\xadJ\xd0\xb6\x14\xad6\x89O\xd7\xe1?yLU\xdd\xf5\xad\xe4yR}\xb5V\xac\xa8\xaf\x8e\x0f\x1b\xfc\x9f\xeb\xaf\x0d~e\xcd\xc3\xf9\x82\xfa\xabpC\x9f#q\xa7?[j\x10\xafw$\xde\xfe*\xfa\xf1\x17\xdb\xa8WA\x96]'\xe9|\xe7\x8d\xd2\xed\x0c\xbf\xde>\xed\xbe\xfa\xc16O8g\x8bX\xcew!f\xd7\xfd\x8d\x98c\xb7}\xebXZ@P\xc7\xd2\x9f\xb6\xcb_\xc4\n\xf2Y\xde{\xff$V\x10\xd3\x11yy\xc8\x8b\xdf\xbf\x15$\xd5\xac \xf6R \xda\xf7;\x18I\xd2\x16\x99\x8d\x1c\x9b)\xb5\x176gf\xe0\xc14<\xe7\xb2\x85\xaf\x9b@\x9a\xe4V\x94q\x03\xf3n\xa2\xe5\x84Y\xa3\x0b\x94w\xf5\x9f\xc9\xc7aa\x8d\x1b\xb2\xb0\xf98,l>\x0e\x0b\x9b\x8f\xc3\xc2\xe6\xe3\xb0\xb0\xf98,\xc8\xb2R\xfe\xc0\x05Yw!M,\xfc\x8fGw\x1fxf#\xcb\xe2\xb77\xb2l\xbe\xa4\x91\xe5\xf7\xe6\xf80\xff]:>\x04\x9d\x14\xee\x85*\xd9A\xc3\xe3\xbb8\xe3 B\x17\xf8\xb3\x06\xc5\x07\xa3\x98\x0c\x8a\x04d\xae\xd0\xc8\xed5\xae`Bb\xf7\x86$\\%j\xb5f\x16]Wj\xce\xa2\x90\xc5\xf9\xa9H&\xba\x1a\xc8\xdfm\xed,\x8d\xed\x9c\xb1Y\xca\xf2r[\xf4\xae\xad\xbd\xdbJ{R\xacx\x8379\xb0\xb6\xc8Q\xd8\xbfL\xe6\xb7\xceg\xbb\xa7\x04\x9b\x0d\x9d\xb5\xad\x06\xe2O\xfb\xe0\xbe\x84+\x0b]\xdb\x1c\xc3\xf4\xbc\x01\x14\xc5\xe27\xa6\xdb\xd4W\xb51\xb9favkH\xea(\xd7y\xdc\xb8;\xfan\x8c\xe1\xd6X\xee\x1f\xe0\x8e\xf3\xab\x18\x9b\x9a%\xbd\xaeaU@\x85Vi\xa3?\x00\xbbEV\x81]\xa3\xab\xc0\x8e\x11V@\xb0\xe1\xbc\x83\xcdkKS\xec\x96/\x05\x8a0+\x9d\x8c^\"\xa9I\x07\xa3\xd7\x82Jv0zm\xba\x86y\x01\xe9J\xb2\x83\x85lE\xe5w\xb3\x90]Q\xa5\xae\x16\xb25\x9e\x1b\x84\xd9\xcbgg\x87\xcd%9\x89^\xbb^-\xfe\xe01\xd7c1\xea ^o\xc7\x9f\xcd-\xdd\x16-\x11\xf59N\xd9\x9c\xc5y\x18D\x19\xb5T\\\xa4oi\xea\xff\xb2\xf7\xef\xebm\x1b\xc9\xa28\xfa\xffz\x8a\x12fN\x06\x1c\x93\xb0(\xdf\x99(>\x89-\xef8c\xc7\xde\x96\x9d\xcc\xda\x1ao} \xd0$\x11\x83\x00\x02\x80\x944\x89\xdfe?\xcbz\xb2\xdf\xd7\xd5\xdd\xb8\xf6\x0d\x94l\xcb\x19c\xd6r(\xa0\x80\xbeUW\xd7\xbd\xe6\x98\x04\x06I\xfc\"6/\xeci\x0d\x8eu*I\xc8\xe2\xf9\xd9\x91\xc0\x9f\x14\xfc\x96\xfeSg\x98)\xba\x9d\xb9\x07\xdf\xf7\x0d/\x1e\xa1\x15\xe6Cj\x16\xe5\xc2\x82\xb8t9u\x80W\xc5\xdf;\xbaT\xa7\x9c\xad\x1fG![\xbff\x88\xbf\x08\x040\xf4\x0fsC\xe8;y\\/dK\x1dgT\x9a^\x99\xaf\x94?\x06\x07\xdc\x17\xdfm\xca\xd5\xc1\x18\xe8\xed\x16\x1a\x823\xd2\xb9\xbc\xacL\xca\x02\xbd\x0e\xd57\xe8P\xcb\xba\xca4\xe7Ft\x1e/\xab;\x0d\x9dj\xbd\xf5\xd0g\xa7\xff\xa5J\x9b\xc8\xde8\xd6\xb9\\mM\xc3\x14\xaaU\xd9Zj\x868\x86\xb3\x1d=\xbd\\'Z\xd3\x11F%\xc3\xcc9\xdd\xf8s\xfc\xb9\x1ci\xbf\x99\xf5?\xc9R}\xbcy\xf5l\x80{SRo\xd8\xea\x13o\xf2\x98\xe5F\xa9\x19\xd5~\xef\xea\x9f\x17\xd6\x1d}\x9d\xbe#\xac\x83\xd6\xfds\x1a\xb8\\\xd2\xd7\xab\xcei\x1b\xd4/s3F\x077\x88zm\xc7\xe0<\x89\xd3\xb3\xe13\xca6\x1e\xfa\"\xd6\x93\xb8\x87\x93\xf8\x10!5\x0e\\\x81i\xe7\x1b\x01*=\xb0~\"V\xe5:~\x82AB\x98\x01\xe5\xb4\x92\xb4\xb4\x13\xb2ij\xff\xcf\x068\xaf\xb57pe\xf9\x12;X\xf5\x19\xa3E\xa4\xf4\xe71\x15\x17\xa6\x9a\xf8y@UE\xf1\xaeL3\n\xa8\x1b\xa0r8\x11\xf2u\xa6\xdeDa\x7f>\x0dl\xb7\xb5\xb9\xc2 \xfd\xd2\x9f\xe0'/a\x83@\xfe\xd4JE\xfd\xb1\x11\xb0\xda*Z\x04\xcc\x9aV\x8d!\x08h\xe3=\xf9\xf9b\x9b\xa5\xb1b\x98i\xa3\x8dq\x96/}\x16\x18'\xc6r\x8a\xf94\xb4\x08\x87S6\x14\xd9\xda\xd4\xae\xa9d\xf8|(^\x81r\xafqR\x11 \xdb\xf3\xb9\x0bV\xbd6\xbf\xb8\x1bfiF\x98f\xdc\xbf@?B\xaeoi\xab\xe9\xb48\xf3\x8aA\x02B\xea\xf8\x95\x81=`i=\xb4M\xd7\x0e\x14W\xd9\xf0o\x1b\x92\x1b\xc6\xfc\xbf)\x08d~\xee\xafII\xf2\x02}\xe6)#\xc99E\xd4t\xaa9^|\xdce9\xbf\xfaJ\x8c\x19\xd9'\xc5\x96B\x1e\xd4\xdd;\xa3\x9f@f\xbc\x01'\x14\x8fZ>\xf5\xea\xe9\x0bk\xf642\x1cf\x15\xd8`\x02\xf3g=\xcd\xea\x89\xb3:\xc8,\xd8\xa6\x86\x9fA\x07\xbd\x0c\xda+\x86\xfa\x12\\\x1aB\xde*+\xc4\x87 m\xbd\xfduE{\xe9\xa3\xef\x93\x82YWl\xf6\n\x03\xfd\xb2_\xda\xfb\x85O\xe0n\x18\xcd,.W\xb5\xdfd\xf8\x7fl\xd3\xbdK\xec\x81=$\xfb\xa7\xf8\x8fe:W{-\x01W\xc2\xee\xb4\x92\x98\x9d\x9d\xe3 \xd3\xef\"\xe6\x9e\x0e\xcb^\x0df\xa5\xa1\xd1\x13\x12\xacS:]j\xe2\xa03y\xc1\x8a\x04\xef\xe6\xa9\xa2 \xb8\xb84\xadZEt1\x9cc^\xdfV\xe9\xc3\xe8\xdea9\xa2\x1c\xb8\x01s\xfc%\xba\x8a\xb7\x84\xfb\x8c\xd9PD\xaf0*(i\x08gpf\x06\xe6[\xa9\x9a\x19\xf3\x1b\xf5\xce ^\x9a \x1e\x19\xb6\x05p\xdd\xe4% 54\x89\xb5\xf5|\xed\xba\xd4\"\x9d\x8a\xb9OM\x0c\x8bJ]~\x170M\xc4.H\x8dTp\xe7Q\x9au\x94\xd0iO\xaf\x96\x03\xd6^r9\xbd(t\xdal\xea\xbfMM\x97\xf2\xb2\xd4\x15\x84$\xb5\xef\x18\x8e\xae\xc2\x03R5\xe0\xd0f\xb8\x1f\xcf\x03\xf2\x92\xf87<\xeb=\xb0\x859G\xc9H\xc7'eC\xda\xd6&\x887\x1e\xee\xbd\x0c\xf8\xba\x9e\xdb$\xc0\xff4}\xaf\xde\xd2v\xbf\x91\x15_\xb3\xfa\x97\x1d\x81Ej|\x18\x90\x1e\x1fx\xe7\xab\x14\xf9R(K\xc7\xddz\xcc*\xc7\xdd\xf0\n\x1cw{\xe5\x95\x94\x94\xa3\x94\x94W\"\xbb\x97Wj\xe3\x82i$\xc0GS\xd6n\xc3\xea%\x1b\\\x04\x8b\xe4\xb9\x112\xad\x1dq\xd0\x15O\x0d\x19\x0dq\xc1\xf1\xe1\x10R]\xe2\x92\x8d\x88\xf4\xac\\\x00\x15\x0en^\x10\x13?\xd7\xf8\x1f3\xc7\x82\x19\xe8Y2\xce]\xf9\xfa\x82\x1c\xc2\xd8\xcb\xe0\xe4h\xce\xbd\xb6\x02\x81\xc7#C\xdffU\xa4\xba\x16\x8c\xaf\x94\x96M\xad\x17T\x9b{6`S\xaa\xcd\x7fK\x9b|$\xe06\x8a\x91*\x11\xbc\xc5mZm3\xe1\x1covw\xcf\xd1q\x02\xb9H\x9doj\x8a`\x94\xc1/D\n\x019\x06E\x0bp\xb1\xcc\xf4d\xca==\x18K\xca\xcbJDIH\xce_,\xdctd\xf2\x97\x8b\xa0\xf72\xaf\xa0{\x92\xbe\xd5\xf8uXy\xd1C\xc3crx\x15\x1d qA`/g\x1e\xda\x8a\xf1\xc1\xb7t\n\x18\x84\xb9C\xa23\x9d\xcf\x0dv\xba\xa9\x9c\xc7\xf7\xb4\x89\x84\x94\xf5\x8148\xd8P\x04\\1\x0e\xb6\x91KOY0\xaa\xd5\x14\x9e\xe1\xcbsX\xa4cPE\xdf7\x16\xc9WO\x02\xe3\x98\xacF\xdf?\xe8\xd4\x1e\xe9\x89\xcdy\xc46\xaa\xd5y\xc4\xe6\xd3\xe6_\xfb\xe7\xca\xbf\xbe\xf2\xb2M\xb1r\x9d\x9c\x14Y\x9a\x14\x04\xed\xca\x87\xa8\xd3WP3E\xde|\xd6^ev\x1c\xd2\x1a\xba\x9c\xed\xd4\\\xdf\x95\xf8C\xcca\xcf\xf3y\xc8\xe0\xd8T\xb6^hS0\x87R\xa0d\xe9\xc0\xe1!\x92\xd1t\xc1\xa2X\xc4\xe7*C\xdd!\xaa\xff\x12\xfa\xc17\xaf\x9eV\xb2\x9e\x9bu\x03\xa5(A\xd9b.\x03Vr\xeb\x15 \xa3\x9c\x04\xe5\x9bZ\x9f\xd1\x13\xe8t\x0c+\xfe\xd1\xaf\x9c\xd1[\xf6\x93\x8bS\xa7\x95\x84\xe1\x8b\"9\xa6@\xb09\x8b\xe5\xd4\x19\x89\xba\x06\xa2y\x99Lp\xee \xcd\xe6q\x1a\xbc\xc3\x12\xeey\x1a\x9f\x9e\xceK]\x08c\xdbF\xc4\xff\x92B3\x0b\x11\xf1sI\\\x94\xb1\xde\x89\xa9\xce\xc9\xf5\xcc\xa1\x8aD_\x9a\x03\xe4Z\xd69\x19\xb3\x1f\x07X\x15\xd9\xbd\xf7y\x9c\x05\xd0\xd29\xad\x88\x1f\x92\\b\xf53\xed\x19\xbb\xe0\xc9F\x98\xa1\xa0=\xc0\x9b\xd4\x17\xb2\xce\x1b\xd9\xc1\xbb\x12L{\x81\xcc\xc9N\xea\xd1\x86\\d\xfc(\xc3e\xae\xe9\xa2I\xfb\xe1\x8e\xc1\x81u\xe1\xe8G\x1d\x1aGm8\xf3\xa1M\xa0%Y^\xc6;gr\xb1\xa9\xa7\x06=*\x06W\x9c\xdb\xa1X\xa5\x9b8\xac\x08\xe1\x9b,\xf4K\xdb|\xac6\x15\xcd\xeb$\x0e\x9e\xd0\xf9\xa0tI\xea?\xff\xf8\xa3 E\x0fq\x0e\x81?\xdbO\xd9\xf1\xcd\x9f\xf3?\xda\x10aTd\xb1\x7f\xc11\xeb\xb1P\x7f\xb07\xe4\x0f\xa5c\xf8\xdcR\xb2\x8a\xe9\xd4\xc3\x0eM\xca\x9a\xd6\xf0\x06C=T\xd5\x8e\xe5\x93\xac\x7f\xd3\xafx=\x0b3?T\xcax=\xc7\x07\xfc\xc8\x12\x98\xa2\x87\x0c\x98\xf3\x00\xba\\<\xdfPi8\x14\xe4\xe9!\xf8\xde\xbau\xebI\x9a\xbb\x9b1\x14#\x98\x81\xef\xe5\x9d\x9b\xfa\x86B\xa8\n(S\xa1{cL\xa9\xb0\xa2\xa7+\xcf@$\xd7\x974\xafm\xfd\xf9\xea\x10\xf1\xca\xf4\xc7cSE\x97u\xfdb\x92\x96\x8f\xd3\x00I\x12\x86\x87k\xdf[\xd6\xef\x11\x9b\xf4\x1d\x175<\xfa.\x1a\xc0\xe75x\xe3\x98\xd0\xber\xda\xb7{n-\xd2VlO\x1c\xca\x9f\x92\xa4\x9c`\xe4\xd8[JZ\xb6'\xce#~\x13\xa3\xc24y\x85\x80\xeb\x94\x12\xd7 ,\x16\xea\x9c\x81\x8a\x8d\xfb=\x0b\xcf\xd2\xber\x0c\x87]wm\xa3)\x1c,\x0enk_W\xe8p\xf9\x0c\xc3\xe2\xc8\xe8\xf5%.\xa4\x95z\xa7\\\xe0l=8\x98\xe3\xcc\xc1\x90\xf7\xed y\xcb\xa2\x15\xb5\xef\x9a\x92x<\xa2\xe24\x1e\x06\xc7\\\xe0\x96\x8b\x82`1iMn'\xd0E\xaa\x1c\x99f\x96\xd3\x0fm\xe2\xf6\xd1\x18V\xda\xf4\x06v\xcc\xd7\xed>\xf3\xf5\xe6\xd53-\xdf5\xd4)TD&\xd2-\xa0\x1e\x8f%\xa3\xb7\xd2\xa7Xh\x8e\xe7\x98\xe4[\x92\x83\xd8O\xda1a\xf0\xcc\xc0Q\xb1\xcf\x16\x13\xf6\xeeN#+\xe9~1\xafR\x99\xef\xd85\xb6\x1dw\xec[8\xa8\xd1 \x8d!H\xe3S\xd6d5\xeb\x13z\x8f\x1fk\xban8h$\xd4.\xd1\xd5\xf5\xc7\xca}\x9cv\xea1)\xfd(.\x0cy=J\x8c\xa4\xfdP\xab\xf8\xd1Vo\xe8\x92\x85cX_e(S\xd5\xfe& kfc\xa7\xd1G\x8d\xe0\xba7\x8d\xaf\x81S\xf9\xf8_1\xaa\xed\x84_K\xdd\xf4\xb5\xca\xf7\xb6\n\x8e\xc1\x0d<\x04\xe1\x86\xb8]\x95\x99\xae\x03\x18.4\x9f>7\x0e\x8e183\xb80\xb0\xc8\x0c\x8e\xa5'4\x04\x17m\xf2x\x06\x06\xe6\x9c\xf3\xa7\xda\xcc\x89\xf4j\xca+\xba\x98\xb1\xf7\xf5|<\xd2\xcc\x871\xb4\xb2\xea\xd7\xb1MS\x11=\x96\xe7\x97 k\x10|\xed\x0c\xe6\xe6\x06\xd5\xe1-\x97\xf0\x85\x97\xeb?C\xbc{\xdd\xf4\x9f+\xa5\xfe\x13\x9f\xf4\xb4\x96\x91x\"S\x80\xaed\x9a\xd1\x0d\x7f\xd0\xd3\x8c\x16\xfcA\xaf\x8d\x98?\xe8iF\x03\xfe\xa0\x97\x1dy!\x1a\xdf\x7f\xd0}\x94Q\xf1e%\xb4\xa7h}\xec@\x84\xa2\x83\x8a\x9aU\xab\x8f\xafO\xdd\xda\xda\xd6T\xa9\x94\xa5&*\x99\xfd\xac\x99B\xb9\xb0Q\xbcEm\xc5\x9bE\ne\xac\xd0\\\xc7]\xbc\xc9\xe3!\x96-\x9eU\xb9\xad\xce\x90\xcb\x19\xc2LG\xce`!z\xe9\x12o\x93\xc7.\xe6\xe5\x17;5N\x99\xa3\x00\x95\xe4\x99;\x87+\xd1\x14\xca\xe7*\xe5s\xd5\xd4\xe3\x8c\xdc\x91\xc7\x1d\x8f\xd2\xbc\xe7\xf3\x04`\x9d\xe3\x17\xc9|\x7f\xbaT\xba\x86f\x9b\xb3\xa6\xabd\n\x0f\xc1Y\x95eV\xccn\xdeL\x13*Q\n\xbf\x06/JoV\xef9 \xab\xaa\xd7K\x8a\xab\xb4\xb1\xc5\x0d\\\xa8\x15\xa6m\xcb\x9b\xd2\xc6\x16\x08z\xf9K\x14\xc7\xafH@\xa2-\xd2\xb6\xc2\xc2\xec\xa6\x94\xd3\x85\xe2}\xf8\x12\x81\x88;\xb2p\xac\xc7uB`\xdb\xa5\x02\xddr\x95\x03\x96K\x1eZ'\xf3\xb1o/\xa1\xec\xd4\xbc\"[\xa7\xd8\xa9t\xce\x1b\xba\xe3\xf6\xe4\xd3\xed\xab\x9e\x1a\xb1d\x99W\xf8t.\xffM\xde\xe41\xa3Bu\xb1\x83j\xf2TqF^\xb0\xc9s\x92\x94OXj\x08s\x85\x93-%I{\xcc\xf9\x03\x7f\xbb\x1b,4\x97f\x05\xff\xc6f\x0c\x18\x9f\x88~\x16{Q\xf1\x93\xff\x93\xbbB\xfd\xca\x8a)0\xc4K\x1b\xaf\x88\xa3\x80\xd0M\xb2\xd2U\xc9m\xf9dlzy\xc5|\x13\x9fDw\xc3F \x87\xeb\xa4\xd5:\xea\n\xba@=dU\xbf\xac\x12\x92\xb1\x9d]\xb5\x89\x89\xf5\x0c\xf5\xb5\x00\xb5 \xcb\x17\xf3_\xad\x12\x99\x95\xfeR\x9b-F\\\x9d\xdd\xa7\xcdB\xd3~\xa7\xca[\x93\x9a\xdf\xa8\xf7\x9f6\x8bC\x0b\xdc\xc2& \x8c\xe7\xe8\xae\xbei\xe9\xa1!,\xf0\xe5\xcf|L\xa3m|\x0d*\xb2\xc5\x8d\xc5\xe5*5:\xf1\x89+\xc5@M\x816\xcf\xa2\x82\x9e\x8b\xb4ez\x98&c\xc8u9g\xc4\xc5\xd1\x8f\xc7j\xba%\xaf\xa3\x85\xa5\xad2\x98\xc1bTi \xf3Q\xad\x16\xdc\xb9\xb0\xba\xb8XJ\xd1*3\xa4\x05\x9a\xd0\x8b\x9e\x1e/\xb1\xac\x90\x05\x96\xd0+\xcd\xac\xd0\x1b\xaarE\x169@\x01\x83\xb9\xe9JY\xa17T\xdb\xc7\x08\xaa\x91\x8c\xd8\xe3F>D%d\x13\x8a\"3\xa6\xb5\xfd\x06\xa6\xbaB\xde\xab[\x0d\xaf\x8c\x9fR\xa8\xc9\x17p\x856D \xce\xfe^]8\xe9R\x96mYy\xe6\xcf\xc9\xb2-\xad\xe1\x9b\xaaj\xf8F\xaa\x1a\xbe\xbe\xaa\x86\xefFU\xc3\xb7P\xd5\xf0\x8d{5|Y \xcf\x82K\x05m\xe8@\x04\xcb~\x16%~\x0d\\\xfb\xa7\xe4\xd8\xafi\x88\xe0\x10\xee\x9cq\xe6\x8c\x1bPC%\x02J\x0d\xc2\x8e\xb2`\x15\xc5aN4\x944\x1d\xc6\xa9GC\xb8t\xdf\x9aC\xdf\x0c\x90/\xb0p\xb2\x8e%_\xb0\xc38\x0d\x8e\xce3?)\xb4Q\x14\x19?\xb8I\xf6,J\xdeE\x89fFCQ\x04\xd8Y\xf8qAX\n\xfeL\x0dO\xb9\xf4\x0d\x96\xfd\x8c\xfd\x0c\x1dk\x95\xa0[\x06jSes\xcd@\x1f\xf3\x1e\xeb@\x97\x0c\xd4\x04V\x05\x164\xa1\x1aJ1\x9cb\xab\xb7\x15\xb5r\xc8\xe7yz\xa6\x19\xdcY\x14R\xd2\xe0\x1c\xec\xeb\xbccH\xb4\\\x95\x0cjpo7\x85>\x14\x88\xed\x08\\\xab\xbf\xc4\x14\xcf&\xd8\xe7 r8t\xa9\x9aw5\x9d<\x8f\xa3\xe4\xdd\x0f\x83>\xa6\"6:\xad\xa3\xb6\x86rT\xbc\xc8HB \xf6\x91j\x9er\xa3\xf9@\x92JC'xg\xe2)\x1a\xe6{\xce'BcX\xab\x9d\x16y\xba\xfe\xf1\xd8\xfd\xbd\x1b\xcd\x87\x1a\x0f\xa7\x9e\x94\xf7\xe3k\x97\xd0\xb4/\xd4g*\xa1>S \xf5\x99J\xa8\xcfTB}6,GS\xe6vc\x94\xa9\xe4\xeef:\x97\xf3\x05~\xed^sY\xb96@&\xecg\x1f_\xd8\xd7\x9b\xe9\xbe\x08\xfb\xe2\xfap\xc2\xbeP\xa4\xaa\xe1r\xcbT\x05)\x87\xc3@R\x0dc\xc9\xb4\x07\xe9r\x19\x13d1\xd5\xa0L\x82O\x93\xd79\x15\xf8\xf1\xb8T\x03o8\xf0#? Hl\x00.8\xf0\xd19 6\xba|\xfb\x0b\xa3\xe1.\x1b\xa0<\x08\xadU\x12\xabjq\x8cz\x8e\xed\x10s\xea\x1a\x81\xad2q/+P\x8b\xef^\xb0 \xf5\x8b[\xc6\xef\xce+P\x8b\xef\x9e\xb6\xdd\xce*\xc6J\xc3z`\xb8\xbd)w\x02\x15\x9f\xcf\xbc\x90d9 \xfcRW=\xe0\x1c!\xb98\xa4\x06;F0}n\x8bG\x08c\xcak\xf1\x0e\xa1R\x8dn\xe7;\x84\xd0*\xe0^\xf0\x8f\xf0\xe9\xd2\x95\x9c|\x89\xa0~\x1c\xa7g\xaf\xf3\x8b\xa7\xe5\x8b\x8d\x06\x83_\xb3y\x1b\x98-\xe49\xeb0\xff\xfa\x11\x13?\xd5\xe0O\x11\x9c\xb0\xbd\xf94y\x99\xa7\xcb\x9c\x14\x1a,\xf9\x15\x0e\xe1\x9d\xd7P\xea\xa8A\x7fB\xd0\xa6\xeeF\x0d\xfb\na1\xdd\xb7,\xa3\xb7\xb8\x1e#\xc6 %Q\x9ai\xb5@\xcf\xe0\x10\x1e3#_\x15\x02\xae\xd3\x8f\xbd\xa9\xe1\xb3<\x0d7\x81\x1e\xfc7\xee\x8f\x8c\xa9G\x9eEE9r\x1f\x8f\xe1\xc4iT\xd5\xd5\xf5\xee \x1c\xc2\xb6F\x9bc\x1c\xba{<\x86G\x9a\x97\xfe\xddQl9c\xf8n\x0c/4\xca\xab\xef\x9b\xbd<:/ \xeaI\x8b\x91\xfbX\xd3\xcc\xcf\xc8\x04\xd9\xcd\xda\x0f\x0c\xb6YKX\x0d\xfc\x0b\x03\xe6\xf8\xa6\x83\xfc\x91A\x06,w\x9d\x1a\xee\xbf\x19\x9c\x8d\xf2\xf5\x1f\x0c\xd4F\xf9\xfa\xbf\x18(\xc7G\x1d\xe4_\x19d\xe5\xd5\xc1\xb2,h_\xf9?\x9dW\x8e\xf4I^\xfe\xd9ma\xb3^\xfb\xb96\x17\xca\xfff\xaf\x98\x14\xc2\x84\xf2/!\xcf\xe9S\xe3\x86\xda\xa5\xf7\x19f\x8fe)d\xd1\xc4\xf9-\xec\x9b\xdc\x95\xd0\x9d~\xef\x19\xee+\x1e\x9a\x97{\xad\xec>,F\x87\x838\x9c{\xd3\xb9p\xe4\xe8\xe0R\xf43\xf1\x8c\xa1$\xb6\x16R\x10\x1e\x04\xb4\x7f't\xdfI\xd2\x84\x02\xd8\xe69\xb1\x12\xe6\x9b\xaa\xdb*\xe7c}2R\xf9\xf6\\\x06\xe2\xc0\x0dx\x047\xc0\x91\xe9x\xdbP\xea\xd5\x8e\xc2\x99F\x03\xfe\xefZ\x01\xaa\xd4\x80\xaa\xa6\xe0\x9fZ-\xb1\xc0[\x94ngp\xaa\xeea\x83S\xd5\xfa\x98\xb4}K4\xa7w\xab\x84\xd3Z\x0f\xd7\xf0\x9f\xd1\x1c\xf6\xb53\x84\xca!W=M\xffm\xa7x8\x1f:\xfdC0\xb0R\x8d\xab\xeb\xe2\xbf\x1f\xc3c\xba!\x1f\xb3-\xfe\xc7\x1f\xcc\xff\xe4\xf0\xf0\x10\x1e\xd7\xce(\xea\\\x13\x06?\xe8J\x15u\xeb \xd3\xd5S\x15z-\x03\x18\xbaU'\xee\xed\xe9TC\xe8d\x13\x10\xa7~\x18%\xcb\x89\x9fDk_c\x1f\x19\x8d\xe1H\x9bX\xc8`%\x91\xb5\x8d\xea\xcd\xd3$\xcd\xd7\xbe\"\x07\x10&x\xfa\xc5\xcf\x93(Y\xce\xe0qM\"Fc\xf8\xd5\"\xcf\xd1\xb0\xfe4\xd89}\xa9\xca\xab\xc6Bcf\x10M\x83\xff\xb01G\xfc\xaaX\xd4\xd1h\x0c?\xd1y\xfc \xc3=/\x91\xb6E6,\xc1\xf3N\xc24(v\x9f\xd1\x0f\x86YO\xa2$\x84u\x9a\x13\x08EF\x9f+^\xd8\xd6\x0c\x0c\x1f\xb91\xd0\xd5\xd8\xe6\xa99\xeb\xcceq\xeb\xa7\xa6\x18\xa4\xc23u\x1b\xff[\xd7\x86}\xb0\xac\xc5L\xc4\x91\xf6\x0bJ\x8b\xd6O\xda\xe8X\xf6\xb4\x91c\xa7yj\xa87\xd4\x0f\xbaa\xd7R\xc4\x0c~\xb3:\x85yA\x10;\xf1\xa3\xe2Ef\xf0X\x03\xc5+x\xff\x03\xdd%uj\xb8\xa6\xbaL\xeb\xaa\xdb\xd2\x95I\xeb]\x89\xab#\xb9\xcf\xe0\xb9\x86mi*\x12f\xf0R\x0d\xb9H\xa4Ev\xc4e\xcdP5\xb4d\xda\xecE-\x15\x996\x7fQ\xe6\x97\xab\xe7\xdc\xb1\x93q\xe1\x86nr\x17\xe4P\xb1\xe1*l|\xae\xc1\xc1\xbf\xeap\xd0z2\x98M\xfeX\x0d \x1cV5Ly\xda\x91\x1bgB\x03Q\x98\xe5H\xda~\xf5\xda\x16\x15b\x85;\x12\xda\x91\xe31T\x1f\xd1\xe9!\x96\x84\xbb\x83\x91\x90}l\x06s\xafh\xdd\xd1\xacs\xff\xe5\x0b\xafw\xd3\xf0>\x05\xf9\xd9\xcf#\x8a\xf0?3\xed;\xffH\xef\x89a\x18Mx6\x8ca_8Z,HPF[\">\x85\x9d\x11\xdf\xa9\x9e\xe2}3\xfe}\xf5\x15\xbc\xa4\xff\xbc\xc2\x7fLtq\xa7cV((T4Z\xd5\xd8\xff\xd2\x9eo\xec\xa33x\xf5aq\xdf\x96\x98\xf0H\x16\xa6!\x9b\xc1\x13\xc5\xcc\xd7S\x7f\x15S\xfc\xbcRu\xbc\xa4\x12\xf9\xbcL&\xcb<\xddd(ys\xfd\x95\x91\xb3{.\xdeW\xf5\xe8\x17+\xc9Y{Z\xd9\xce\xe20\x92|\xd9\xb5\xad\xec=3(\xacvJn\x9a\xaa\x1f\xb5(k9 \xf6C\xd3wz4\x86\xa7W\xb5\x97\x85 \x1aT\xc1dCw\xf3.\xcd)]'\xaaey\xa6\x19\xe0\xcf\xba\xd6*\xb5\xf1\x0c\x9e\xa9g\xbaJ\xea\xab\x89*\x11\xcc\x90(\xfb\xa0\x8d\xfd\xb0>\xb7[l\xc4Ul\x98\x86-N\x9b#\xd2\x1aK\xb9\xf5a\x06o\xcc@\xfc\x90\xda\x8a\x80\xbf\x97\xfc\xfe\x934w\x19C\xa59\xfc\xfb\x8c\xb4\x95\xce\xdf~\x1b\xa9A\xe4\x86\xad\x19\xbcV\xbf\x82\\\xac\x89\x9a\x10\xf4\xa0\xf8\xdet\xdc\xfe\x1f\x1d\x06\x93J\x17>\x83\xef\xad1\xce@2vq\x1bz\xb9\xc9\x89\xcce\xa8\xca|'w\x19j\x9c\x1c8)\xad\x87y\xb5\x99d\xcf\xf8\xa6\xec?\xaaQ\x85J\x8a\x0b\x8fY\xbc\xba>5\xcc6\xa1\xf3B\xfa\x12Z\xd4\x9e1\xa5\x17\xd2B\xee\x85\xb4\xa8\xbd\x90\xee5S\x19-4\xeeF_b\x8b\xfe\x03\xdd\x8d\xac\xfc~\x86\xc4\xfb\xe7\xf6\x0e-\xe9\x10\x87\x16\xe6\xa6\xd4\xb6\x13\xa9\xa1}K_\xaa\x0d\xd6\xd039\xa7\x14,\\\x9d\x91-5X\x80`QQ\x95=\xd5\xf0\x0d\x0b\x845\xb9\x9ed\x08\xa5s= Y\xd7V\xe9\xd9\xb1\xa9{+\xfe1\x0b\x17\x94-\x03\xcd\xa3e\x94\xf8\xf1\x0b\x9bW0\x12I8\xa2X\xbd\xb1\x84C\xc8\xcc\xb3z\x81K\xc4\xd5\x1d\xc1&\x8fJ\xadU{\xce\x12(Tu`\xab\xae|_j\x8d\xf9\xa7\x9d\xc4\x0b|:\x9f\x1b\x03\xbf\xcf\xe4/\xbe4\x04\x9a\xf3\x1a'?n\xd6\xd9\xeb\x14\x811;\xc4\x07\xb7.\xd7Z\x01\xd6O\xe8\xfc\x8d\x06b\x8d\x16\xb0\xae*(\x05\xd1\x08 \xa7\xba\x1e\n^P\xc5\xb9\xa9?{f\xaf\xa6\xd3\x05>v\x0c\xd0\x1a\xc3r\xcd\xe3\xc8\xe3\xc6ig\xc3\xab\x92\xfb\xba\xabcc\xafX\xd2\x83\xad\xa8\x99],\x8a\xedn\xe9\xdd\xd5\xc8\"{\xfen=\xab\x93\\D\x8a\x02\x04\xef\xc7 :Qg\xdc\xff\xea+\xb8\xf0\x82t\x93\x94\xae\xaeos\xbdY\xbc&\xb93\xd0d\xcc\x1a\x1e\xe3!N\xd4\x941\x94\x98\xef\x97JMT\"\x89r\xec[\xe1^\x982\x89 \x81\xae\x13\x06\x17\xae\xc2\x01\x05z\xacEu\xd7\xac\xb8\xd2V\xc8\xc9\xb4\x08{\x85B\x87!N\xa1\xbb\xcfL\"D\xb0\xb3\x08q=\x03\x19>i\xa6\xb2\x01\xc5\xa6?\xa32\xa3_\xc4\x04q\xed.&hK:\x9b\xb8\x8fK\x1d\x1b<\xb3\x8e\xf4\xdd\xf7c\x94P\xded\x19\xc9\x1f\xf9\x05\x91%W\xd9\x99P-\x86\x13\xaa\xfa\xbb\xe3\xcf\xa0\xc4\xf1g\xaa\xad\x10\x91S_\x94\x16\xff\xb1\xd4H\xcd\xc0\x95\x034\x11\x89Dc`\x14\xf5\xe9\xc6I\xac\xe2PR\x844\xc6\xa1D\x08\xa6\x8fC\xf1\x11F\x1b?\x82u\xf1\xed\x84\xf7\x82w\xecq\x9d\xc6\xc4\x18\xe1AO\xd8\xb2\x99G\xe4\xc3\x9f\x04y3'\x838\x0d\xe8<\x9d\x9e\xb6\x9d\x9d\xa5@\x83\xcd_\xdazUU\x02\x06\x9d\x02J$`\xd0\x98\xa2\xb2\x06\xdf\xca\x9ao\xfbO\xfbXy\x80J\xd8\x1b\x0d\x0e\xb2,\x0d\x91|\x84Wy\x04^7v\x99\x9e\xaa\xcd\x80\x078\xe4\xe5R\xfa\x87[D\xcf\x84\xfb\xb2\xd3-\xea\x96\xd0\x8f\xd8\xe9\";=\xa2\x8f\x7fz\xf8\x98\xc1\xa63J\xf5q\xb2\xad*\xca\xd7\xe6\xa6>\xe6$\xed\xd27b\xa5\xdb\xe1#\xaf\xd2\xb3\xee\xbe\xe6\x83M\x87j*\xa4\x0c\x9d,\x81\xcc\xfb\xf1\x95~\\Z\x9bS\xd7F\xb3\xb4i\x1d\xbb\xe2P^\xe3R\xfd\xc2\xf2\xa5*c\xbc\xaeC\xa2f*\xeb\x93\x1a\xacU\xe3T\x0d\x96[\xc0\xc8\xeb2\xaa\xcb~\xf6\x06\xe3<\x89H\x8cN\xe5\x1f\xb2\x114Q\xb3\xa2\xa1\xeafZECK\x8f$e~qL~\xc3\xec\xb7\xa6\xcc\xa0\xdbF\x8d\xa8f\x9d\x9f1\x1c(\x881=\xbb\xcb\x93}\x85\xb3!\xee\xe4\x93\xa9$ \xc8\xb0\xad\x12\xd5Q\x84\x0cUT\xa5\xdeT\xb8\x8a\x9e\xa3\xcb\xa9BAy\xfe\xb3\x1f\xcb\xf4<\x9d\x04\x96\xef\xdb\x05\x10\xdf\xcb\xcf\x04\xf6\x99\xebu&\xbcJ\xcf\x0c\xc7\xc2\xed\xe9\x9f\xe2X`\x03\xb59\x19(B\xc8\xcf\x04\xe2Q|\xe8?C\xa6\x14\x1eR\xa63\xfd\xf1\xb8\xfa\xe1\xa2\x92\x91+\x1a\x87\x9d\x14\xd6\x94\x88o]#1ap\x9d\xbd\x1a}&H\xdbG\xcc?Q\x02\x13\n\xf0\xe0\xee\xfe\x9f#g \n\x9f\x98\x949\x1a\xc3\xa6O\xca\x15\x82z\x1fp\x91\xe6\xe0\xd2\xaf\xd1 \xaf$p^Bn\x8c\x13\xceR\xff\x16\xa31N\xf4\xfe\xd7\x10\xc07P|\x0d\xc1\x8d\x1b#\x88O\x82\xb7\xcd7O\x02\xf5\xc1B\xb7v\xc4O\xb2\xbe\xb2\x00ei\xa3\xc2 \xf0\xe3\x98k\x0d\xc8\x18N\xe8\xbboE\x11\x87\x18O\xe1\xc8Cs\x85\x1fG\xff\xae\xa5\x07c\x19\x07zE\x1e\xa1\xe3\xed{?\xbfG\xadBz\x865y^\x936\xef\xab\xfa\x1a\xf3$\xaai\x00\xd7X\xe2\xbe\xa3\xdfc\x7f.\xa2\x98PN\x03S-\n\xef%\xaf|\x0b)Z\x0dY E\xac\xce\x9c\xc07\xacVa\n7 \x82o\x0f\x99;n\xc2\xe2\xbbqs\xf39}\xcc\xd6JV]u\xcc4\x19=E\x17\xdd}\x1fC[u\x95\xb5\xcf\x98\x9c\xbf\x8a\x96\xab\x98\xce9\xaf[I$\xc1P\x1d ]\xc6\xff\xf5\xbb\xf7&\x0b\xfd\x92\\\xaf\xfe}\x02e\xdfV\x1f\x90\xc1vV%h\xe87\x14\xa9\x88\x0f\x15\xc3\xb4:.,0\x86\xc4\xc4\xb9\"\x9f\xeaj!&A\x1a\xaa\xca2\x8eQ/v%\xed\x89\xa1Nx\xc5yY57q\xd5^\x1dt]\x9a\x14Z\xd5M\xe71\x07r\xcc\x96i'\xcb\xf5\xc9\x01YYN\xda\xb4\xe4\xc8\xd1\xf5\xfa\x97\x15!qU\x04KG\xd0\xd5_i\xcc\x19\x96=\x80uD\xbf\xa0\xae{\xfa\x9er\x00\xc6M\xd4W\xc3\x99Tpr\xa7\xd7\xe6N\"\x1e9\xcf\xd2\xbc,Z\xc7S\x9f\xbd\x85\x06\xe7\x99\x903\xf8>N\xe7\xee y+[\x83\xf2\"\xc3\x91ST\xa7\xfc@\xc4\x8ad\xdfL\x83\x92\x94\x93\xa2\xcc\x89\xbf\xeeH\xeb\x1d\xf6'ZT\xf5v\xf7\x0e\x0f\xe1,J\xc2\xf4\xccK\xfcm\xb4\xf4\xcb4\xf7\xd6\xc5\xb1\xbf%\xb4\x0f#\xddC7\xefsV$.\x88\x82k\xa3\x87\x1e\xff\xda\x9bW\xcf8\xc61\x0e\xfe\xcd\xabgn\xae\x91\xe9C\x9e\x0c\xa4\x8b\xa6\xbeL\xef\x1dyX/W\xb8\xb6\xc1!8I\x9aP|\x8e\xbcUN(G\x9c\xd2\xdf\x05)\xbf+\xcb<\x9aoJ\xe2V\x9b\xcfa\xb2N\xa3\x1cq\xcd\x00\xd13\xb3\xfb\x1ec$\x9cq\x15\xd3;\x1a\xd7\xdd\x9d\xa7\xe1\x05\xe5\xd9H\x12>ZEq\xe8F\xc8\xa6\x05t\xeb\xba=\xc0\x9c\xac\xd3-\xa9\x01\x1b\x93\x95\x93m\xfa\xae1Y\xa9\xea\xe8}/E\xc9\xeb L\xc9\x95\xbfR1+R\x89Y\xbeJ\xcc\xda\xa8\xc4\xacB%f\xc5\xfcAOb\nx\xca\xc7\xbe\x1cUKZYU\x12B\x98>+\xe0?\x81`\x95\x8f\xc1\x97\x0bV\xd1u\x14\xacr.Xml\x05\xabt\xa8`\x95{\"x\\\x84\xe1\xfc\xc2B\x04\xad\x84\x0e\xde\xd5\\T\x88\xac\xc3\x85\xbc\xa0\xf5QT\xa8\xba'\x02\x10M\x90\xd5k\xcc\xed\xe2-\xe5\x9f{\xad\xbcg]\x14\xf1T\x8f\x18\xfb\xf0\xfa\"#\xac\xd7V\xdd\xace#\xca~\xe4i\\|\x17\x04$+\x7f@\xf5\xaf\x89\x9f30})\xe6v2\xb0\x8f\x11\xba\xedY\xa5@\xf4\x11To\xa4\xdd \x8c\xceO\xa6\xac\x08\xbad\xea4EZ9\xd1\xd3\xe5\xb4d\xde{j\x00\xe1>\xbb\x91BH\xaa\x17\xbd\x1f3\xabs\xafp4\xdd\xad\x96\x82X!\x15\xc4|;A\xacX\xa5\x9b8\xacX\"ka\xc7\xb4/\x1a>M\xdd\xc0@\xe4NH\xff\xb6(\xbf\xcf\xde\xaab\xdb8x\xfdw\x1bN\x84\xd6q\xb0\xeaO9\x14n\xc6\x0e(\xbb\xd7\x86\x97\x07\xbc\xf1\x17\x15\x0f;-\xfa\xe5J4D\x7f\xb6\x9f2D\xe1\xcf\xd9\x1f}\xdch/\xffG\x92\x06\xf5$\xc1F^d\x1e\x19\xd5z\xe9)C\xd2\xc3\x03=yH,\xbdN65\xac!\xa5,\xf3\xd3\xb0\xcc\x13\x8bl\x841\xefm\xd2\xc6-5p\xc8\xdc\\\x06\xa6\x0d]U=\xd6G\xd5l\xf9\x11Zi\xed\x8e1\x89\xdf\xa34$#7\xd5x>\xac\xb1\x98\x8f\x13\xd4d\xd3T\xd1\xc6w\x9d8\xda\x12\xb1\x86\xa6\xca6~\x1d\xbbj\n\"\x91m\xf5\xaf\xbe\x92\xdd\x16Q\xa4\xb27f\xb5\x84\xf7\xb2\xf5D\xdd\xf8)\x1cB\xd1\xac\xf6\xc7\xa6rIJv\x82>b\xe7)\x95p\xc5\xb0\xe9\xacJ\xcd6\xe229\xee\x0c\xd1+T\x1b\xcc\x98\xd9\xe0J\x9a\xb3q\x01\x10\x971O\x16w\x05x\xd5\x88_n\xcf\xb5)q]\xec\xcfI]3\xc4\xe4\x08\xd5i\x0e8b\xa3\xcc\xad\xcb\xa6\xa5\xad\x16\xc3\x89\xab&(L\xb0\x97\\1\xa2\xe065\xc4\xa6\xde\x7f\xc5\x0c\xe6\x1a\xc0\xc6:\x89t\x17\xfc\xe5 \x8eQ\xbeJ#]\xc6\xabA\xc8Q\xe3b\x94\xe8\x92\"Df\xa5\x9a~E\xb5\xd5^\xea`i\xeb|\x94\x1a^\xae\x99y@\x93\x03\xaa\x93y@CP\x18\xf7\xd8a\x11\xcc\xbcd\x8fk\xd0\x1c'\x8a0}U\xfe\xa5\xe1\xdb\xd4B\xc9(\\k\x86b\x0e{o0=i\xbb\xe8\xa8\xc1\xf2\x1d\xba\xb4+\x8dS\xb8\xe1\x88K\xed\x8eS\xa1\xf0\x84\xde\xe39wU\xcd;\xf4 \xd7&\x03\xbc\xa2~\xd8\x04\xbb9\x8f\x1b@]j\xfe\xa1;\x18G\xc9;\xcd<=\xc3\xc7un\x07\xdd\x8c\xb5<\x9bR\xa5gS\xa9b\xa5\x81\xb3\xd3I\xdf\xc3\xa9T{8\x89\x0bYg\xa5\xa7\x93\xb8\xb0|\xc9\xc9\xd4\x00\x15\x027\x18F\xed\x0c\xcepx\x08)<\xac\xf1\xfc\x94'#A'_G\xce\xb8\x80\x99y\xb9\xd0\xad$\x08a\xc5P\x96\xb8\x8e:[\xb1\x1c':6\x15\xd0\x1d\xf8\xb1\xd0\xa6mQ\xafkh`\x91h#\x13\xa1\x8du\x1aZ\x8b\x90iH\x8cC\xaaO%M8/\x0c:I\x803\x07]u\xce\x8c\xa2\xc6\xe1\xa1.m30\xbe\xa4\xabK\x9aa\xd9\x0f\xa5\xaa\xc9\xdc\x15\x0e\xae\xe5\x87\xc0\xfeT\x85\xfeI\xad\x84U\x14\x85n\x15\x83\xde!\xa1K\x8d\xe7;$u\xe9'C\xeaGX\xd6\x99\x83\x98\x85\x98U\x8a\x1a\xb9'-\xfb\xcf\xaf\x85\xa4\x16\xa7\xea\xa0\xdf\x9b\xd6\x03\xf8\x1c2\xb9\x84*w\xacP\xe5\x8e\x15\xaa\xdc\xb1B\x95;V\xa8r\xc7\n\xa5\xe6\x8b\x98?\x91Z\x10\xdcP\xd8\n\xc2\xcaV\x80\xbf\xa6\xb7z\x05\xa4\x17R\x8b\x03\xaa\x07Te\xa5\xc3\x8fo\\X\xd9\x1a\x17\x88\xc4\xb6 C<\xb3hkjo);O)\x0e\x8d}\x914\xc1'+\xf2N%$n\x90\xba<2)\xb9\x12\xe6\xeb\xd3oF\xfd\ns%\x92\xd1m\xf9\x99\x8b*\xec\xe3\xd2/uJ\xeb\xbcO\xb2\xbbK/\xae\xf7h\xd82\n\xb4\x9a\x11\xc8\xcf\x9c\\\xd1Z\xef6\xfa{Q6\x84\xf4\xe8\xa5\xb8\xa4\xc3q\xfa\xac\x1d\xfd\x94\x02\xbf\xe1\n\xdd\x94\xaeF\xb3\xca\x08-Z\xe0RK\x1d*3\x9aP\xfeB\x0d\xc3\xac%\xe6\x02d\xccbb\xe1\x9a\x13\"\xa0Y\xaf\xb8B8\x9d\x12t\x8b\x10v\x9a\xdau\x0dk\xd0\xd4.\xab\xfeYhj/\xf8\x0cVx\xa4\x06\x9dW\xa0\xf6\xf6\xb1S8\x84\x95\x17%\x0b\x92c\xaeS\x8d\"\xe1\x0c\x0ea\xc9\xc5!5\xd4\x11\x1c\x82\xcf8u&\xe2h\x93\xfa\x9d\xd7\xd0\xe4\xdc_g\xb1>\x07\xe0q\x0d\xced%\x0d\xec#8\x84\xadU'\xdeqH\xe1P\xc5\xe5Q%\xfcw\x0c~\x9d\x86$>b\xbd\xd6\x81\xbf`\xe06%\x80^2\xd0*.\xd3TL\xe75\x83\xb7Tp?\x17\x9b\x16i\x97'\xa1Q\xf4\xc8\xbaPP\xf1\x05\xb8g\xee\xc8$/>\x15+\x84\xc5\xb2x\xc7\x9c1<\x7f;\xe6\x8a\xe7\xe7~6r\x7f\x7f\xdfe3\xba\xd7\xafp\x08O\xb9\xc4\x87\x88\xe9\xf4>\xa0\x16\xf1\xeaP?4M=ma\x98#\x94\xe0\x99W`m\xa0hq1r\xbb0T\xccf@KR\x1e\xe3M\xb6AF\xee\xaf\"\xec\xd70\x9b&A2J\x82x\x13\x92W\xc4\x0f_$\xf1E\x8b\xcb\xec^\xf4\xd0\xa3\xc7\xcd\xaf\xf0\x10\xcaJy\x95\xf0;\xa7U\x9fj\xc5V\xce\x9f\xb9\x8d\xcc\x89\xcd\x151\xf5]L\xfb[\xfaI\x85\xe6\x8d9T\xd1^\x9c\xba\xbe\xe8\x01k\xda\xf7V~Q\xad\x1d\x9d\xf2\x90g\xfb\xacnQ\xb9\x14\x07\x95T\x0b\xd2\x9b\xebd\x0c\xcfu\xf3(\x99C\xcdi\xc4\x80\x7f\xc9\xa3\x92hg\xfc\xbd\xde\xfcq\x8e\xbe\xcc\x94v\x9d[\x04\x8a\x89K\xb0\xc0\x94\x1d\xa2l/+&\xf5\xd7\xbf\xe6d\xe1\x08\x97.\xda\xae\x8a\xebQ\xe0;\xddu?Y8\xf05/a\xdcF\x0bTeo\x1a\x16\xff\xd6\xbc\x9a\xb1p\x0d3\xbe&\x16\xaey\xe5\xda\xb8\xb8\xe6\x95\xf2\x1893\xa4\xe0\xd0[{<5%V\xba\xa4YK\\\xc8t\xc9\xd9IqiMKw*\xcd]\xaeQ\xf2)\xe3\xfe\x9aW\xdb\xa4\xc2h\x9by\xf68[(\x8f\x19\x17\x97,v\xbc~V+-(J_\xd6^b\x1c\xeb\xf0q\n1A3\x06A\x05\xe4\x1b\x92\xa2\xf7\xf9\x18\xde\xed\x98\xdc`\x07M>8p\x03\xdc\x0ds#\xd7l,'\xf4K\x9f\xb9\x85+\x03\xff\xafN\xdd>D\xd7\x1f]\xa1\x9a\x7f\xb0n\x7f\xe7}-[\x8bn\xab\xa7\xa7z\x93\xa1\xaa\xf1\x17\xba\x86E\xd5\x1f_\x94)l\xd8&T\xa7\xc4\x18\xce\xcc\xbb\xcdj\xacL\x9dWQ\xf3\xe6\xd0\x1b6Y\xd3\xcet\x84@2\xf1Q\"\x11\xd6\xa8\x19\xcc5[o\xe84\xbe\xb60q\x1b8\x1e\xf5\x94\xb4\xec\xd7|-\x04#E9\x9b\xee-\xef\x1da\xc7(\x88\xc4\xd5\xc7\xe4\xb7^\xd2\xb9\xe6\xd51\xb1\xcb\xf4>\x8a\xf5\x1e\xc3\\\x9b\x83q\xed\xc7\xb5\x83\x81\xc3\x9d=\n\xd0E\xa1 \xe1\xa8^ar\xa43\x1a\x83\x03l\xe9\xbc\xda\x06Uq\x9b?i:\xf1\x9d\x16\xc5+K\x89u\x9a}MV\xfc\xa6Z^S{\xb1c\xa2\xd0\xd5^D>T\x88\x02L\xb5\xfd\"\x0fIN\xc2\x91\x9bhV\x94\x1fB3\xf8I\xb1p\xd5\xd4\x1di\xa6\xee\x91n\xea\xb8h;\x83#\xeb\x99\xd3\xf7e4\xae\x04\xfc+\xb5w\x0e0r\x1e\xc3C8\xf6\xcaT\xc6\x85v\xa2W\xba\x97\xe1\xc0}i\"T\xc8\xb5i\x14<\xf4JpP\x06 :B\xad\xfe\x11,\x17\x064\xa4p\xa4\xad\x87Yo\xdf\x9fR\xe0\xaa\x92j\x95{\x1f\xbc\x94\x05i\xa5\xb7 \xd5fCF \x85u\xe8\xf7\xf7]s\x89\xcc\x9a\xd7TL6T\xffm\x9b\xd0\xea\xbf\xf8\xcdke\x13Z)sG\xacTQ%+UT\xc9J\x15U\xb2RE\x95\xacTQ%+\xa5Mh%lB+\x8c\xc8\xbf-\xb5\x04\xb1g\xbd/W\xe6\xa0\xf6\xedP\xf4]\x91no\xf5\xf1\x0dE[[C\xd1\x97(\x94\x8e\xd1\xca\x14\x85\xa2\xb7\x88d~^\x90\x90oq\x85X\x85\x91\"\x1bt\xdd\x7f\xd9\x04\x1fd\xf2\x12!)\x9c\x1bSk3\x99\xff|\xa9\x16b)\x10S\x91@\x94\x14\xa5\x9f\x04$]\x00\x0b<4\xebC\x12\x1e,\xf9$\x8aQ=\xa52\x8f\x89+\xf1R\x16\xc6g\x91\xc3\xa0y\xe56\xe6\xb5\xe6\xd5] \xca\x0cobydn\xf3R\x9cD\xd5\xe31~\xca\x0f\xbf+^\x93\xf3\xd2\xd5L,\xd7\x1bZ\xf7\xbc\xd3\xe3\x92\xf2\x07\xac\xaa\xbbN\x03!C\xafO\x1b\xa4r\x95\xd9\x02PN\x90\xec\x15\xd7\xea\x88W\x07a\xec\x942@\xb9)\x95\xbd$b\x7f^\xa2\xabWc\xd5\xb4\xb4d\xd6\xc1g\x16YB\xad\xccu\xac^\xc9&\x97$T\x12\x17\xabR\xc2\xf9|5\x98_\x9b;Xz\x8d\x87\xf0\xfb{\xd0\xba\x0fo\x06d>-\xdav\xa3\xd6nT\xbf\x85\xf5A\x06X\xd5\xe8\xc1\\\xfb\xf2\xa1\xa6\x8b\x92\xcf\xc7~I\xb0\xbe\xe8\xebhMt\"\xf4\xba\x9a\x04\x8d4$\xc9\xf5\xd5\xbc(\xc5\xa7\xcb\x92\x8aL\x0d7\xffo\xc3\x87\xe9_\xad \xf6\x9b\x91W\x92\xa2t\x93\x11\x05\xf6O\x1c>#\x93\xc7Q\x91\xa5\x05f\xe6w\xde\xd2\xe3\xe3\xa6_\x96~\xb0\xa2\x07\xb5xI\x05.\xbe%4,\xa1\xdd\xb7\xa4\xe0\xbd~5\xb4G\xec[\xf4h\x82\xd7\xb9\x9f\x14\x0b\x92\xcb\xba\xd6|\xa3\xd75\xeb\xcfI\xdf\xd0(\x8f\xe9*8\xf4\x98u Jx\x9c\xb9\xe9$\xa4[\xf9\xa2\xca\xb1Q\x92\xf3\xf2\xe6\xaa\\\xc7\x16\xban\x0c\xce\xe9\x1e\xf0\xc2\xcaV%;(\xa5\xc9\x0ed\x17K\x80pa\x84\xed\xca?\xb2\xebT\x9f\x94`n\xf1\x8938\x84\x93\x0b\xca\xd0\x15\x9byQ\xe6n\xea\xc5~Q>MBr\xfeb\xe1:7\x9d\x11\xdc\x80\xe9h\x0c\xa7o\xbd_\xd3(q\x9d\x99n\x9b\x8a\x0b\xed\xfc*D\xd5l\x08=\x13\xd4\xc9\xfdpdZv\xe0K\x7f^\x99{\xc8y\x99\xfbA\xf9\x84\xe7oz\x92\xa7k\xde\x8fF7\x98W\xc4\xc8=2\x18\x84\xe8\x85!<\xb43\xcc\xeaG\xe7\xf3\xdc\xc0 i\x9fR\x1aTy]\xd6\x99+\xe8\xc7%\xb7yB\x8b\x17\xf9\x8b\x8c$\x1c3/eIq|\xa3\xc6\x16\xaa\xfa\xec\x06\x07\\\xd8\xa9\x06\x8a\xb88We3hw>\x863\xfd\xa4\x83q\xe2\x9bYf`\x11 #\xff\xb5\x9aM\x91\xcbc\x06g\x83\xc7\xa2|\x81\xb3\xdb\x14\xf1\x94\xe3`)u\xb8\xce\xa8\xfa2\xe7< $%\x96\xd6\x86\xf9\xa6\x84\x8bt\x93\xc3\xd7r/\xda\x99f\x96k\xda\xe7\x06'\x84\xa2\x81\xdbN~\xc8x\xd7\x9b\x14\xe8_7\xb3\xd8\x8f\x92\x9b\x8d\xd9\xff\xc8\x036\xf0k\xc2\x88\xa7\x181\xcc\xe0\xe6\xff\x8d\xd6\xfe\x92\xfc\xebf\x0b\x87\x12\x8f\xbb\xfd\x14\xaeSl\x97\x8e\xd6\xb0\xd1\xa4\xf9\x0e8\xa8Fv\xc0\xd1+\xdb\xd7K\xed!\x80\xf9\x9ed\x9a\xcb\xe6\xb5\xf6\xcf\x7f\x89\xc2r5\x03g\xba\xbf\xff\xff\x93c\" \xe5W7\x94\x073\x1d\xbb\xa8\xd0\xc8\xf0\xb9\xf37a\x94v\xe6\xce\xea\xb8P\x9f\x8d\xf4\x8bzC\x117G\xaa\x1d\xb1tA\xd1h\x1c\xd7O=\x9d\x11]\xado\x96\xacL\xb5\x89\xe8\xc48\xcc\x7f\x88n\x1f\x04O\x17P~\xfc\xbdQ\x9e\xcbtE\xe22o\x0d\xee\xe4\xf5-\xec\xc3C(lw\x80z\xf9\xad\xcd\x7f\x91:\x9c\xf1M\x92\x93 ]&\xd1\xbfIX\x99\x89p\x8e\xbf\x16\x81A\x94\x89\x10A\xee~\x81\xd4\xdd\xd3E\x8a~\xca\xd9/4\xa4\xf8\xd3M\xe4\x06K\x91@\x99\x8a)\xad\x8d\xf7Z\xb7\xa5\xe5\xa5q\xa4\xe1\xc5Vg,\xc0\xb0Tz\x9e*]\xab\xacm\x916UH\x98Yu'\xcb`\x95\xef\xd0}p\xf7\x8e\xc4\x88\xa7\xd7}\xd6\xbe\x9eY\x1c\x95\xeeM\xf7\x9b\x7f\xdd|x\xf2\x7f\xbf}{\xe3\xdb\xd1\xcd\xe5\xc8[DqIr\x0b\x0fK\xfe!\xc7\xa9\xb2\x0dEkY\"\xdc\x8e\xfa\xba\xdd\xdf\xc8\xb6\xbf7\xbf\xf9\xd7\xcd\x1b\xac\x9b\x9c\x11 \xda\x0f\xfb\xf6\x1f\xc6\xaf\xfe\xeb\xa6\xddw7\xb6\xdf\xb5\x9e@\xec\xc0\x9er\\\x80\xc8E0\xef\xf0^$~\xf8\xbdn\xd6\xf8!\xcf\x9d\xd9\xed\x850JuM|\xf0-Li\x13\x0d]Gm\xcb\x9b\xbe\x85\x87\xed?g\xf0\xbb\xe4\xdcg\xb1[\x82\x83\xed?G\xbd\xad'a\x89\xfb\xa01\x1c\xca\xf4\xa6\x01\x1c\xc2IGeSg\xb2\xa5\x7fu\xe2\xac\xe9x\x17c4\x07\xbb\x0b8\x042\x86\xd4]\xd8\xb8\x13\xf3uR)\xeau!]\xec\x14wK\xd6^\xe4\x96\x94uq\x1e\xc5i\x11%\xcb\xd7\xfe\xd2\x81\x19l\xf8\xdd\x17\x19I\xea\xbb>\xbf{L\xe2E\x1b\xdeyM\xe4\xb9\xbe\xe5\x01\x81\xed\xa3\xf7\xfdH\xe2\xba2\x86TeR\x8eLI\xeaX\xfdq\xa4\xe8\xbd\xe7\xad\x81R\x1e\xdf\xa7\x88\x15O&\xf2\x9e\xd2\xad\x95\xbb\xc9\x18b\x85\x92\x0fK\x89\xc3\x0d\x88\xfa\xef\xa3b\xb69\x83us7n\x8c\xa1\xd0\xd9Y(J\xa4'%L@\xe7\xbe\x1dVP\x07\nM\xa1|\xb8l\xb9\xf0\xef\x0c\xe7 ov\xbb\x1aV\x8f\x109\x1d\xac\x9c\x057 ds\x0f7 \xab~ET\xe8\xc4\x80\x05\xec\xcd\x18\xb0\xeb\xc6\xf0kh\xd0\xa6\x0eN\xb4\xc7\xc3\x81\x02o\x91\xe6G~\xb0\xb2\xdb\x1e\xd9 yK\xf7_\xf7\xe4\xa42jfw\xaa\xf0/\xed\xedu\xfc%F\\\xfb\xfb\xaf\xa6o\xe9%\x12\xb6\xde\xfc\xfb^\xdd\xc0\xdf!'\x19\xf1\xd1vB\x99\xbaoVe\x99\x15\xb3\x9b7\x97Q\xb9\xda\xcc\xbd ]\xdf\xfc5M\x8a`\x15G\xc9;\x92\x977[\xf0\xdf6\xbe\xd4\xfc\xe8\xa34\xbb\xc8\xa3\xe5\xaa\x047\x18\xc1\xc1\xfe\xf4\xf6\xe4`\x7fzg\x0c?\xa6 \x1cW\x1f\xf3\x9a\xef<\x8b\x02\x92\x14$\x84M\x12\x92\x1c\xca\x15\x81\xe7O_\x8b\xdbM\xd0\x9b\xd5od\x06X\xd4c3\xb3\x842\x7frw\xdeq\xe3\x08Ab\xaf\x12$\xc8\x08\xcaU\x9e\x9e\xa1\x9d\xe1\xf5EF\x8e\xf2<\xcd]\x87\x9cgL\xdd\xe6\x03\x7fI\x92\"y\x8a(]\x8e*^\xa3\x0fr\xd0\x05\x81\x1b]0\xe1\xa9@\xc4\xc1\xf4w(\xfb\x1f\xca\x19\xf7A\xa9~\xc3\xce\x98\x8fX\x16\xf4\xfe\xc4@S\x9d\x97Vg\xde!\xc5\x1b\xde\x97\xca\x1e\xb1O\xb1\xa9\xfd*z\xc7|\x8d\xa5\x00\xaa\x97\xd1\x0d\xe3[\x98~=\xa2''\x0b]qS\xb8q\x88F\xf8\x12\xbe\xfd\xf6\x10\xa6c:\xc4\xc3\xee\x18E\x8b\xf4P\xe2o\xb4\x1a\x1f\x86\xed5cxw:2\xe1\x82\xc2\xbb)w\xc9\xc8+\xd3g\xe9\x99\xa8D;\xac\x0f\x1f\xdd\x99\xed3,\xfe\xba\xa82\x1b\xd0_\xf7F\x7f\x8e\x82\xaf\xdb/\x05f\xd4\x05f\x84\x17\xfd\x80h8\x81\xe0\xb9\xaa\x8a\xf6\xa8\xe2\xa8\x8e\xceKM1\xef\xb4[\xb2;U\x97\xecN?\xbeZ\x88 t\x9d\xb1\x98-\x8b\xe6z\xddReh>t\xb7Jy\xa7\xd3Sr^\x92\xa4\xe8\x1d\xf6\xef\x99\xe7\xd4\x0c\x9c1\xf0\xa3)1\xd7\xda\x8e\xae\x1bB=e\x9ecG\xeb\xac\xbc0\x94\x89\xef\xc5\xd4\x8a*\xf1\x98S\xb5~'\x12\xfa\xc9\x88\xeb'\xafU\xc5x\xd5\xc8m\xf0\x10\xb1B\x85\x88Q\xc1\xbf(9\xea\x98\xf9S}\x02\xfb\xfc\x0b\x8f\xa3\x02)\x9d\x14\xa1\xf9\xb9\x8f4\x0f{\x8d\xda-\xf4\xf6\xbb\x0c\xaew\xf4\xa9-\xd4\xa7\xad\x9c\"\x0e\x9d\x96\xe9r\xa9\x11>B\xdesY\xfa\xe7\x9e\xeb\x86\xba\xbfQ\x92mJi#\xcc\x04\xee\x04+\x12\xbc\x9b\xa7\xe7\x12MY\xa3\x0b\xfd\x87\xf8\x1e\x1e!\xa8t\x90(tj^\xc9\xac\x9c\x8c\\Q\xc1\xda\xe3\x1f6\x1e\xb7\xa318\xc7$ \x01'\x95mL\xa7\xe7#\xf4Y\x95\xe8\xff\xa49\xa1\xe5&\x93Pj2Q\x94\x93T\xa4\x88\xbeu\xd0\xcb\x0b\xf0%\x17\xb4\xdc\xb0ag\xd4\xb0\xcd\x05-v\xe0.f\x82\xa1\xeeG_}\xd5\xfa[-F$&\x1bD\xc3\x02\x90TC\x18\xb9\x89'$\xc618\xcc9\x03\xad\xcb\x88\x13\xcc\xbaLD^\xc2\x84\xd5PB\x91\xbfOG\x9a\x96\x14\xebCK\\\xdbai\xb2\xad\x94\xc8y\xad\xc2W\x03\xa5\xd6\x9af\x1fS\x1aX\xc9\xb4\x9b\x1a\x94\x8a\xc4\xda\x05IxT6\xce\x15.\x04N\x1e\xe5\xe4\xdct\x0c\xfe\x186*S\x10\xe6\xf3\xe6\xd5*X\xcdA\x8b\x8c\x05\xc2\x00c\x9ci\xc6KX\xea\xf6\x13\x10u M\xd3\xc8\xca\xb5WHg\\\x18\xb5r\"\x19C\xae\x98\xdbF\xf4\"\x96\xf0`k!\x0e\xb3\xaf\xbe\x02\x07\xb5Y\xb8\xdf\xd2z\xa1t\xfa$\xc1\x9a\xe9\xa2\x96\x01\xcf\xc3\xa88>\xf3\x97K\x92\x1f\xa0N\xd6\x87\xaa\x8d\xf3I\x9d\xf9\xf6\x8f?\xd8]L\xcf\xcbi\x11\x8f\xed\xad\xefW w\xabT\x8aj\x88\xc67f\xd8\x0b\x9e=\xea\xab\xaf\xc0m\xf4A\xd1\x83\xddZ\xaa+`\xef \x07\xb0\x1e}tY8h\xb2Y\xcfI\xfe\x9a\xeb\xc7F\xae\xaf\x88\x93\xeb{q\xc90\xdd\x1d}\x9c|\xedU\x12\x86_\xa28~E\x02\x12m\x91;\x91\xd5\xdc\xb7\xce\xc5Ps\xea\x9fxw\x99R\x88G\x97\xda\x83Hd\xa2\x02 \x1b\xee\x84\x1cf*3\x9a\xcd\xeeJ\xab\xed\xe4F\xad|\xd4#q\xa8\x07,%\xf5h\xc4Q=\xd9\xac\x91w\xf5\x81\xe5b\x88:\xf7u\xad \x17\xcd\xc6{53lJoP\x18\x86\xd2\xd84\x1b\x8c\x03\xa1\xff\x9d\x893#'\xbfm\xa2\x9c\x84\x8cT\xe1\xae\xf2\xd9\x19L\xf72\xba\x89x\x8b(/J\xb7\xb3\x01\xb1\x90e\xc1?+jZ\xdam\xc7bTe\xd1\xee\xee\xb4\xfe\x86lo<\x99\x18\xf4\x01\xbc\x05\xec\xce+\xc3q\x9fX\xee\x8f|@V\x8e\xb4\x865\x98\xcb#.?sm\xaf\x9e\xd7 Z{\xfe\xa6%\xaa\x0b\x95\xb7\x1e#\xad\xe9M`Mo\xc2\xea\xb3\xe6\n\x0f\x85\x91\xde`\x95\x07cj\x11\xafX\xa5gGB\xdde(\xef\xc0\xa0\x1f\xa5\xebu\x9a\xd8\xbcs\x81^\xd9\xce\x8fE\x9a\xb0\xcc\xe7O\xd2|m*)\x9b\xbb\xcc\x98\xfc=\x0b\xaaQ\xc2\x9e\n\xc7\n\xc6n\xa8\x01\xcf\xe0\xb0\xc9\xa2\x9c\x9a\x0b\x98\xceM\xf6\xac\xb6\xc1\xc9`\x15Y$Zk6\xd4\xf6#\x83\x95)\xa8\xec3\x85W\x15S\x10\xd8\xea\x06\x06\xbbP\xd0\xf4\x8f\xa2\x9fh\xa4\xf3\xc1{\xf4\x135\xcd$E\xd9\xc8\\hot\x92\x91I\xbbwk\xf3\x93\xa1\xf4X\xc3\xc2\xa3\xc9\x05\x04\x83\x8b\xb65\x8dL\x81\x12R\x97\xe1\xe4\x88\xe1\xafm\x0d\x8ds\x06nSC\xe3\xb8\xb13\xb8\"\xddT&\xa4 \xde\x94!MEC\n-\x93\x12P\x89^\xfd\x81\xef\xea]\xb9H\xf3\xb5\xaf\xed\xe5\x0b8\x04\xf4\x81^!7Rv\x18\x11\xed\x86x \x87\xf0\x82\xbdP\x1a\x10\xf45%\x00\xb47\x8f\xfd\xd2wL5\xf8\x9eS\xe8'\x15t\x94\xd4\xa1\xe5\xea\x97\x9e\xd6\xc3\xae\x19\x0e5\xf8\xaf\xa2\xf3(\x0cD%Y\x17T\x16\xc0\x81t\xab\xc95\xaf\x9f\xe0\x10\xde\xc1Cx\xd7\xe5\xa1\x1cM$\xe7+8\xc4\xc0GW\xd4\xa2\xe8\x12\xf0\x91[Vy{\x95_y\x0c\x87\xb0n~e\xe0\xfb\xcf,\x12Y\xbd\xb1\x80\xf9\xcd\x02\xe6 \x1c\xc2\xdeT\xab)h0z\xcc\xe9\xfeY\x8dOl=:\xec\xe03:v\xda\xc1gM\xbew\x8c\xfd\xe1\xb7\x84(\x87\x86\xe37\xf5\xf7\x04h\xe3koh\x9bo\xea\xf0e\xda\x03\xec\xf5~\x1b\x8e\xf5\xed\xb7\xfa[U\x1b\xe3f\xccB\xd9\x15G\xb1\x02FWL\xd6z\xa4\xe8\xf3\xf6\xb3\xdc\xfbH\x17&\xa8\xb0\x99\xd9\xba$4\xdf\x8c\x12\xa7\xe5\xde }\xe9\ns\xf8\x0fq&\xba\nC\xffSx\xd82#\xd2\x06\xa1\xa2\x070\xeb=T\xf6\xa6=\xb9\xf8au\xc6\x00VF]\xddC\xabT\x0dA\x1ac\xbe\x10\xdaS\xf5\xd9\xa7\xea\xaf\xf3?\xff\xef\xefN\xc3\x8f\xee*f\xb39Y\x9a:\xe9cx9\x86_Q\x0fu\xe2\xc0\x0d\xf8\x15n\x80\xf3\xd6\x19\xc3w\x18\xc2\xb7\xf3\xac\xb5z\x92\xa7\xd9\x84\x9fg\xca)p\xffJ\x1b\x1d\x833\xd2o\xb5\x1d\xa7 $YN\x02\xbfT\xad\xcf\xfbq}\x96\xd6\xdb\xbf\xf1\x16\xc6\x846\xfe\xfep\xab\x15i\x9c\xe4\\g\xdcb\xdbq\xba\xc6\xb0\xa4}~%\x94\xe3\xaf\xae4G\xfa\xb1\x89\x9dgnW\x14o&\x14\x83\x0c\xeeR\xe7\xff\xb0H\xa9~\xfe\xb3\x1f\xeb\xcb\xb0\xc8g\xa8N\xa0\xbf\xa63\xf2X\xcc\xc8\xe3\xff\xf8\x19\xb9\xc2\x1a+;8wV\xdb\xa9\xe1\xe2\xa9!\xca\xe7Zz\xcc\xeb\x9f\xc8\xbei\xc2\x8a\xbd3\xd4\x0b\xc3\x1f\x7f\xc0\xde\x13\xb3$\xab\xed\x87\xca\xf9\x85\xb2+\xea\xb5\x14\xbdw\xbe\x89\xbe\xfdn\xebG1\xa6\xe2@V\xb4\xf8\xe6f\xf4-=\xe6\xe0\x06\xbc\xb1\x88\x8eo^\xc2|\xaa\xc1\x8f\xda7\x8f\x07\xf5\x8eU\xc9\xcd\xde\x8fZ3\xd5\xe0\x94~\xfb0s&\xd82\xbbi\xe3*A6i\x8d9\xfbM9\x98\xd7t,{\xcf\xb5'Z+\xcb\x13\xc6\xdc\xce\x0cY\xed*)\x07\xcb\xebP\x94\x8a\xcc\xd3\xa3\xad$o\xd0uX\xebM\xb8N\xf3'5\x84`\xabf\xf0T\x0d\xd4\xd8Z\xf2\xedVK\x9d\x8c\xd5\xa2\x14\x0f&\xd0p\xb9m\x83\xcfXx\xbd%\xef\xbb\xabV\x84\xd0\xc5+fB\xccc\x7f\xea\x1a\x12\xf5\\^(\x11\x087\xc3\x0b\x0d\xc5:\xd2-\xab\xf5\xba\xd5\x0e\x96\xdd\xba\x88\x06\xa4\xe0\x0e\xd9\x9a\xacVvZ\x1f{\x8d\x8f\x98\xb3\x8e\xd6A\xb3*\xa2\xf6\x8d<\x89\xa5\x84H\xefX\x01G\x816M\x1d\x8en\x9a\x84K\xda\xac\xa9\xc9\xa9\xec\xe0\xc7\xa4,\xa3d\xf9$\xcd\xdd\xa0'g4\x183\xcdD\xd4>k3\xf8\x89\xb96PY\xf5'\xe4U\xd4\xaf %\xa7~\xf6\xae\xca\x89\xf9\xfa\x97R T\xaeT\x81\xca\x95*P\xb9R\x05*W\xaa`\x98+U\xe0\x16\x8d\x8e\x06jO\xe2\xe0\xe3\xfb?-l\xfd\x9f\xbe\x04\x98\x0b@\xfb\x00\xf38\n\xde}j\x87\x17k?$R[?4goevS\xc30\xcb\xe0\x1aU\xferma\xe2m\xfd8\xe2\x85\x1e\xfcu\xe1\x9e\xa4c\xf0\x91\x02UO\xbe'\x8b4'\xfcp\x12\x00\xa8\xb7\xe3\xb3\xe4\xa5 \x7f\xca|::7\xdd\xd1\x18\x12\x8f\xf0?4\xc7\x82\x18\xb4\xf6\x04\xce\xf0\xf4\xd5\x9c\xa3kn\xe1\xe8\xfb\xec\x02\x12*\x837\xda\xcb<\x0d7\xc1\xb0\xb8\xfe\xca\xdb\x8f\x8d\\\x92r\x80\x7f\x94\x19\xc9O\x04 \xae^\xf5\x1a\xeb\xf8\xdb?i,\xbf)\xf6y\xce\xa2\xabme\x93y\x99\x00G)\x10\xe1G\xfc\xd8f\xa9\xa6\xae\xdb\xb1\x8d\x19X\xee\xab\xb2\xc6H+\xa0I\xd3\xc9\xf8\xaat2\x1bU:\x99B\x95N&\xe6\x0f\xe4\x15\xd0Z\xb9c\xaeY\xc6\x98\xfeG\x84\x1e\xfa/\x0f\x1e<\x90 \xe9\"M\xcac\xa6\xcfv\xa2\xd2\x8f\xa3\xa0\x1b\xa2\xd3\xfa34\xd2'\x03\xe3\x00m\x1a!)\x83\xd6\xab\xbb\xa4\xf6\x93\xee\x94\x1fc\xc72\x03\xaf\x18\x02#\xff\xdb\xe9\xd1\x8e\xa5\x9b\xc0L\xb9`\x00\xf5\x82\x81\xfeEP\xb1\x08\xc62@\xc0\x19\x04:\xac\xb6\x17\xd1\xc8u\xc4\xd6V\xf9\x05C#\x94\x06\x9ae\xe1wVyC\x87\xd0\xf2\xfe\xeb\xe39\x01\xf46&C>\x06\x90\xb7yz\xaaI\xca\x00\x9c>\xff\xc0\xcb\xa9\xea\xe3\xe4\x8dI\x06@\xde\x85\xdd\x86;$\xd3\xc0\xd0.M\xf2\xf4l\xd7^\xed\xd2\\\x90\xc6\xfa\x05\xb8l\x92\x02\xd8\xb1\xddV6\x82\x8f\xdf<\xf3\x1a\x1a\x90\x05\xa1\xf4HR\xe6\x17\xb2\x12\xb9&\xdd\xb1\xf0\x01\xee\xc8?d\x0c\x07\x06\xbf%\x10\xee\xbb'\xfb\x9ax\x10q\xa1\x0b\xef\xc9\xd4\xa2\xda\xcf\x9e$\x1f\x83\x1b\x8d\xaa<\x81\xeaL\xd5\xe2\x12N\xbc\x91\xd7\xf1\x19\x7f;\x12N\xb4\x1dOr\xee=\x02\xb3\xc6S\xa3G\x89\xb86\xb2\xa6Z\x0e\xec\xfa\xee\x9a\xd8W\x8b\xbd\x0c\xe2HJ\xb5`\x97\xf0\x0f\x10\xd7P|\x06\xd6lz \x13\x94\xb8vl:\x92(\xa3?]o|^Fb\xa39H\x13\x9b\xf6)\x97\x80\xb6CGx\xcb\x991\x95\xbe\x83\xa6D\x83\x97\xa0\x80\xe5\xdcb\xa6\x1f\x94F\xfdX\xc3t\x93CHS\xbd\x83\x94c\xeb\x88?x\xcbP\x82\xba)\n\x85x\xf7\xba\x89B\x9fT\x83\x19\xc8\x04\x1e* \xb9\x81\x10xP\xdc\xf93\xa8/\x1b\xfc\xbeDK\xd9g\xf9m#5m$\x90k\xaa/\x19\"m0I\x83\x84Q\x99\xe6F\x0d#SF\x92<\xb7P\\2md\xec_\xa4\x9b\xd2\x02\xbf\xb3p\xb9#\xcc \x884\xdcH\x18\xe55\xf8\xf3\xd5\x07\x84\xcaL\x04\x82gv\x8a\x8c\x04\xe6\xe1\x84W9\x9c+\xeb<\xf3\x0b\x93#\xc8h\xa7tj\xb6\xfc\xfc\xa2\xcdL\xeb\x93\xa7C+\xcc\x19gA>\x05\x0c?u\xc7;\x9e\x95\xa5\xe1h\x14\xec}\xd9<\xa2\x94V\xea\x9d\xf6jo\x9f\xaa\x8f\x9f\xf7c,Mgh\x86\xe9\x90\xf4\xa7\x87\xd031\x7f\x1fVg\xaf\xe9+\xcd\x99\x0fx\x08+\xb7\x03\xc5\x1c\xc3\x1a\xae_\x02\x16Co\xc4\xcd\xcc/W\xf8\xbe\xb2\x1f\xc5\xda\x8f\xe3F-F\xbf\x84\xee\xeb\x0d\x7fW\xf5gt\xce\xebFw\xff\xb3UT\x92\xe3\xcc\x0f\x98k;\x99\xe0\n\xabw\x95U\x15Gi\xaa\x01>\xb05)\n\x7fI\xb4\x07\x8b\x16]\x8cC\xc2\x8a\xa0\x93\x90\x04)3\x91;3p\xb0\x12\x8aah\xc1&/\xd0\xdc\x94\xa5QR*\xb9\x1f\xd9\xd8\xb0\xb6\xb5\x8e\xe6i\xaa(W\x07\x7f\xe2\xcd\xa3$t\x19:\xe4R\xbb\xb6\xf3\xe3f\x9dA\x99\x02\x1d\n\xc5\x96\xbc\xd6U\x88\x1fm\xb24\xd4\x04\xb6\x13m\x91C\xe5\xbc\x8c\x8f\x92ZtwJ\x8e%h\x9fEE\xe9E\x05\xfd\x8f\xdb\xd9\x0c\xf6\x9bI\xb2\x97\xb8\x9f\xb0\xc7v\xd5%>\xc4\xd2\x804\xc8!\xfa\xe3&\xe8\xe5\x91c\xcc\xa4\xdd\xa7\xd3\xa4Z\xc6\xd6\xe7v\xde\x19\x9f\x90\x90Z\x13I\x0c\x0fB\xc4\xfd\xc8$\xcd~3\xff\x99 \xd5\x95\xd2\xa86\xd6Z\xd1\xab\xf6+\x06\xda%\xd3\xd6\xad\x94\xda:\x17\xd3k9\xce\x88W\xa4t\xc0\xb1\xb1\x1d \x11\xfcd\xff\xadW\xa6o\xe8va\xf5\x8a\xe0\x06\x10\xaf\x88\xa3\x80\xb8\xd3N\xc7\x04-\x81^\x1d10\xa7\xccm\xf2\xa4-\xa51\xfb\xc2\x17\xbd.\xbf,\xf5\xbaA\x95\xbb\xefO\xa3\xe1\xfd\xe2\xa0jQ\x01\xe9\x12>\x87\xe2\x13u\x12O\xdc\n\xd7\xd0\x93\xb0\xca\x92\xf58\n\x9f\xa7\x9bD\x16Td\xab$\xaf\x95\xe3\xcdl\x1fE\x95\xce\xa837\n\xf0*?R\x7f\xb2\xda\xf3!;J>`\xea/\xd2\x1bT\xfbN\x9d\xe6\xa9s\xbf*\x9d\xcf+)0\x9dH\x13G\xa4\xc3\xbf\xc4\xf8?\x81\xb9\xa39\x04\x93\xb5\xa3\xe2\"M\xa6\x0e\xec\xaeV%\xddv\xb3\xda\x89\x89\x82^\xc8&\x8edR^dD\xb0\xb7\xc8f\xba ?\xfe\xa5\x9f\xd1\xe9\x11\x0b4\xd6\xec\xd4\x03s\xcd\xf4\x9c\xf5J\xab\xf7\xd5\xc4\x85\xa9\x06SZp6\xe22\xe9fR\xe6C`\xa5\x953\xe8\xdb\xf8\xa05\x81\x9bR\x8fm\x80\xaeE}\xc7\xda\xe9z\xa5\xdbB\xcf\x98I\x12@\x8fzU\xa9\xf9\x08\x93^~\x93\xe6\x16cI\xb5co\x91\xa7\xeb\x1f\x8fG\xee\x89C\x0f\xb5(@.\xff\xe6\xafE\x9a8o\x1b\x9c\xe3\xf8\xday:\xd3\x1e\xbd\x10!\x06\xcf\xa2\xe4\x9d&5\xfcug\x10\x13\xf7\xb6* \xfdg\xc9\x18^\x05?\x98H\xf9\xc1\xa8\xe2\x07\x93\x11\xe3|\xf6\xbf\x86\x0d|\x03\xc9\xd7\xb0\xa1\xfc`t\xb2i\xf3\x83\x1b ?(\xf8\xcd\x0f\xc5\x08F#M\x12i\xcc\xb2\xf8\xda_\xa2\x05\x17u1\xa7\x8d\x1bLx\xa5\xccn\xa1X,\xb8B\xe6\xad\xd9\xb2\xc5i\xaf3:5\x98\xb1\x96\xc7\x003\xfd)\xf2F\xb7\x87\xa8\xe6G\xe87^d\xd7\xb9\x87\x9f\x80c\x1a\x14\xadf\xed\xf4\x91\x0fq\xfaH\x07\xa4\xcad eK\x7f\xb9$aE\xb8\x0b]\xc6G\xcc\\lv 11\x0f\xf6\x8aB;\xee*\xdd\x92|\x1b\x913S\x8d\xc1\x17\x1c\xceA\xa1p\xb0\xf56\xad\xad\xb7U(\x9d6\xaa\x1e\xf8$\x9f4z\xe8/\x0bg\x0c\xa5\xc1Y\x98y\xcf\x08\xa7\x92\x08\x1dI\x8c\xb6\xe2\x9dye\xa86M\xd5OT\xc2*_\xb8\x84\x9f\x05\xec\xe4\xb6\x00\xf5(sF\x1d\xe8\x9cl\xd4\xee\n\x00=;F\xf7jbPL\xd9\x95\xe6\"\xe9}\xd3\x85\xef\xaa3A\xa7\x87\x1b\x0e\xf3\xa2S\xcd\x89o\x9a\x90\xda\xef\xc1\xe0\x93j\xf4}\x00\xd6\xc3t\x00\xab\x0f-\x0bN\x992\x86PG\x06\xc4U\xa7\xeb7\xc32b\xb36d\xb0\x15\x17\xf33\x8b, \xe9N1$G\x05\xce\xde%\x0d/\xad\xc6\x06\x1e\xc3\xc6\xd29}g_\x0b\x10\x1b\xcc\xa2\xa7\xc6\xf8[q\x898\\C\nSzE\xe1\x0c\xd2*\x19\x93\xc5\x0bt\x8b%Z/\x9c&\xe4\x8b\xec\xa9\x19u\x9b\xc0/s\xb2\x88\xce\xb1\xb0]\xbd\x0c\xc6\xb7W9Y\xcc\xc0\xf9K\xf5\x12\x8e\xc6\xa2\xd9\x8a\xde0\xda\xa1'\x1a\xb6\xfe\xdbR\xb0&\x08&\xca\x8f\xfeM\xe0\x1bVUDM1o5\x0c\xfa?\xa5u\x9cv\x01L*\x0b!J01\xc9\x1eHm&\xad;\x03\xe5[\x83SI_\xa4\xb3\x12D\xa4\x04\xc7Z\xe4\x10\xd2\xc6\xae^\xc9\xcd\xfa1\x1a\xbe?i$.H\xbcS\xfe\x077VQ!\xb0=\xaf\xff%\xf9\xc4\xe5\xf9}\xde\xea\xc7\xe5S\xf964\xb1\xa8\xed\xed*'\x91\xcc\xc3\x98\x8fb\xe4\x9e$\xc8\xdc\xc0\x1e{[V\xe4\xbf=\xab\xd7\x8a\x81\xd7\x1d8I#\xd7\x83\x89Y\xc7\xa1\x9b\x98tJ\xcev\xe2\x9fc\x8fnE\xdd\x99\xc3(\xa5\xe6\x0c1\x9a\x99\x81\x87J\xffB\xa2\xe5\xaa\x9cAN\xb9\x9dy\x1a\xb3,\xa4I\x9a\xaf}m\xfc\x9ez\xec\xb2\xe4\x00j\xf0\x96wl\x9c\x06\xef\xaad\x04\x94e\x1b\xee\x05l%z\x08\x9f\x0b;\xe9\x83\xce\xca$\xf6\xe7$\xc6\xf3HQ#|\x0cI\xdbT\xbc\xb3/\x03(\xdbW'\x1f\xb4\xb0=\xd8\x1c\x1b\xff\x05\xd7B\xcb\xf84Y\xa4o\xf2\x18\x8f'\xfa\xfb{\xbf /\xfdr\xa5Q8JS+\xa4\xaa\xd4\n\x91*\xb5\x82\xafJ\xad\xb0Q\xa5V(T\xa9\x15\xe2Vj\x05\xb4C\xb7\x01\xea\xdc\x0b\xdcR=\xdd\xbf\x16\xa9\x17zsn\xc5\x11h\xdc(\xbeD%5\xe1\x86\x9eY\xab\xb4\xd0\xe8x\xd8\xa95\xe7\x8b\xb5\xd3q3(\x16\x84\xb64\xd9\xe4jR\xe4\x9c\x00E\x1dx\xf3\xea\x19\x96\xc1-\xd1g\xc1\x81\xb7\xbb$\x80\xd11\xb6vn\xd1\x06\x0c\x85O\x8c\xa5\xd0\x9b\x05\xb8\x12l\x053\xc6\xc2\x00\xac\x85\x81\x98\x0b\x15\xf6\x86~i\x90\x89\x93\x01\x1aM\x00h:\x9e\xf3\x94\x9c\x7f\xfc\x01N\xb9\"\x10\x92-\x89\xe9\xc9c\x905\xd3\xfa\x0b\x14\x93-\x14|\x1c\x9a\xac\xfd\xc8\x08\xefc\xf2<\x87\xb2p\x16\xf1\x1fV\x8cL\xaa\x15/mX\x1e\xa3\x86\x8aq\x94.\x96\xf5*\xfc$*\xa3\x7f\x937y\x99%r\x90\xfb\xbb\x9d8\xc5\x14\x9e\x945\xd4\xb1\xf3L\xb5\xb9\xc9c\x1d\x10\xb3\xd3\x08\xee\xc4\xe4\xe5^\xa2\x0c\xa9\x83bR[S\xca\xd3A\xc7\xcc\xea\x83L\xee\x15x\xcdc\xee\x98\xbc\xcaV\xa8\xa6\xe1\xb1\x8e\x86\xd3\xdeh\xf99\xe4\x984\x829c\x085\x06\xbc\x9a\x19\xd4\x9cZ\xcd9\xd4\xba\x91\xb6\xcfA\x85\xa3\x8d\xfa\xa4\xb8\x949\xb9y8\xb0\xda\xfe\xd7\xedp(T\x87C\xa1:\x1c\n\xd5\xe1P\xa8\x0e\x87\x82\x1d\x0e2\x92_||\x92\xaf\xd7\xa0\x7f!\xf9\xe2\xb2%\xf9\xc2/v\x97 Z\xc6\x1cXo\xa1\xf8Zn\xa1\xeb\xc1_\xf5\xf7\xd6\x17v\xea\xcf\xb2\xb7v\xd6/4u\x0b\x8b4Ugp\xfa\x8f;\xf7\xae\xc7\xa6\x157\xffDB\xd1\x97\x94B\xda\x94BO0\x9f9K\xff`4\xe5\x03\x9fO\x1ed\xd7\xc8 $\x17\x06\"i\\\xf4&\x0b\xfd\x92\xb0\x86e\xc6\xdbO\x9e{\xe8\xd2d\xf2\x03K\x9d\x83\x82\xae\xa5\x96\xfdG\xa9\xd6\x90B\xe9\x8e\x13\xa7~\x18%K\x96\xd5\xb8\xf4\xf8\x9f\xc7\xa5_n\xb4B\"\xc5[g\xe1G1 \x07\xbf\x8bn\x85^\xb0\xc9s\x92\x94\x1cC\x0c\xd2\xeb\xef\xef\xb5\x82(\xba\xde\xb9\x1b\x0f\x0b\xea\xd1\x9e\xe5$tF\xdc\xdb\xb0y\xff/\xbe\xefk\xb3\xa07%W\xfa/\x8e\x0dmw{S\xfe\xbb\xaa\x1a\x7f5\x07$\x8e\x1f\xebU\xfaQ\xb2CN\xfa|XK rf\xaa'|\x9d\xce\xa3\x98\xcc`z0\xb4/N\x94d\x1b\xfbTCut$\x9f\x05\xfe\xba\xf2\xe5,\xf6\x03\xb2J\xe3\x90\xe43p\x18\xea\xc0\xfc\x02J\x7f\xa9y\xab\xbc\xc8\xd0\xbeE\xceu\xdf\xee%*j\x12M\xf5k\xd5\xc1_c\x8aS\xe6\x1b\xe2T\xd8\xe28\xa0U<\x84U\x81qs\x14\x94\xdcn\xf6\x81\x13x_O^*S\xf1R\x99\x8a\x97\xcaT\xbcT\xa6\xe2\xa5\xb2a%\xc53\xca\x15\xb4\xeeb`L\xa6\x89\x9cY\xe0\xc7\xa6\xfbR.,\xfb\xf8\\X\x08\x87\xf0\x84\xb7\xef!\xebAwO\xbb\xcf\xfa@\x1a\xe8\x84\xd7v\xf0\xa4yYse\xc0{\xa7\xe6\x96\xec8%\x11iK\xfb\xa4Wmn\x19|\xc4B\xa3K\xbf$\xd2\n\xae\xe2\x8a\x8a\xa30*\xbfO\xcfg\xb075\x12\x0bGI\xe4#\xc3.\x86+a\x80`P\x02F\x18\xc0\x13\x81H\x95\xc3\xd8?\xacq]4\xa7\xbef\x96\xac\xcdc\xaa\xd3dx\xb6E\x90\x8cD\x9boB;\x14U\xa2\xb7\xa1#\xf8d\xfel\x8c\xcf\x14\xe7\xde\xa34)6k]\xfeD\xa8\x9c\xd62?\xf7\xd7z@\xe6\xb5\x16\x15\xbcf\xb6\x1e8\x1a\xc2\x1eC\xe5\xb7\x96\xf9\xe5\xea\xb9E\x9a\x8e\xcd\x003\x0ep\n\xbfq\x9d\xefYE\x1c\x0dk\n\x9c\x82o\\\xe759/\xbf\xcb\x89o\x02\xcf\x18\xf8*Z\xae\xe2h\xb9*\x1f\xa5\xa1\xd1\x81,d\xef4R\xf0\x99\xde@\xef\xed\x08\x8bg\xe2Z\x91\x92\xe4\xbfD8[\xfe\xf7\x17OC\x92\x94Qy\xe1\xfa\xdc\xe7<\x1fyu\xd9\x94\xc2\x19s\xd3\xf7\xb3\xa8(Gn\xf7\xc8\xea^[,\xa7\xd9\xe8\x1c\xdb*\xae\xcf?\x9a\x93\xdf6\xa4(\x1f\xd9\xf7~\xddBb\xfai\xc4\xccN*Wq[\xf8,\xc8\xde\x98\xd5\x8c\x0c%\n\xd5\x03}\xfbK\xd1>\x12~=\xec\x05\x1c\xc2\x92\x89\xc7z\xc09\x02V\x07\x85\xd1[\xed\xca\xaa6\xcf\xd3\xf0b\x82X`\xf0zpB\xbf\xf4\x19\xe4\x04c6f\x907#8\xec\xdf\x8e\x92\xfa\xdd(\xd1\xd5\xfc\x1a\xc3\x9c.k\xaa\xa9\xae\xb9\xd8m\xb0\xa7\xa7\xc8\xf0\xc3\x0dpW\x0d\xeb\xa3\x03Q\xb2\xf5\xe3\x88e\x070\x0d\x8a\x93\xdf\x0b\x03\xadk\x8b\x0e+? c\xf2\x82\xdfT\x8f\x9d\xee\xbc\x0b:z\xd5\xc8\x8d\xce@\xaa\x91\x13\xab\n\xa3bp\x9a\x1ej\xca\xae\xee\x8e\x86\x13\x96\x91U_P[\x87\x11\x97i\x9b\x84Q\xa9mX\xd5h1\xa0\xc19\xa6\xa0(\x13\x08\xfc$ 1H\xd6\x86u\x04D%\xb50*\xd5PF\xeck\xa4\xa9(\xd3\xe52&O\x05\x99\xd1\xef\xbc\x87\xe0<\xc2\x1ebG\xe8+u\xd5\x02\xcd\xd2\xb3\x0c\x0e\xa6\xf9X\x95\xeb\xf8 \xd6q\xd8i\xbe\xdb\xf1N\xceKq\x8c\x89L\xb4\xc0\xca\x92\xa9?`\xf4U\xe3\xf8\xbf\xd5Oo;\xf1\xad\x89\xeb\xa9(\x81\xc1\xf9Z\x81\x9d\xad\xe4\xcb\x9a}\xa9L\xea\xd4\xbb\xab\xf0.k\xc7\x9c\xd4\x87\xd1\xaay\\\xf6D\x1eq|\n\xdf8m\x02\xe0\xf6\x04\xe0\xf8\xba\xef\xfd\xfe\xbe+\xbfW\xf3\x17\xca\x1f<\xaaz\x10V\xcf\xdf\xb7\x95\x03\xdb\xa6x\xda\xe5\x97\x9b\x98y\x05\x89\xd9\xfdY\xcdLDU\xde\x10T/\xa5B\xbd\xa4\xd0\x1cQ6\xf9\xe6\xf9:\xbe\x19y%)J*\xceJ\xe1(\x83\x8c\xcbf\x02D\xab\x08<\x84\x84\xc7\x80\xd0\x9e\x9e\x9e\xafYu\xb0\xe6M\x99\xe7P\xb4\x00\x97w~\xef\xf0\x10\n\x9db=\x86C\xd8C\x8e\x0f\x93\x17\xfe\xfe\x9e\x8e\xb2\x903M\xc4+HyLY5W'\x1c\xe1fW\xd4\xb0\x1e\x8d\x9b9\xf1\xf5\x9eH\xc5?\xd7\xb1V\xa1\xd7P\x06(\x12\x9cK\x94u@\xe2\x82\xe0\xdc\xb6\x92\xf3\x17x\x0c\xb8\x0e\xce\xb1\xaa[\xfa.i\xbb\x83L\x88\xacEMc\xda\xcf\xb5)\x0d\x17\xf8\xd97\xad7\x14\xd1I\xafXvK\xb7\xe3R\xae$J\xbcE\xe2E\xc9\x82\xe4\xc7X\xe2\x7f\xe4\xe6<\xdaF\x9dg\x8d\xbe\xb7\xa0h|\x8c=\x16/\xa6\xa8\xefT\xcc\x07+\xb0\xf0K\x1e\x95\xe4E\x12_H\xf3]*\xe6EL{kf\x14\n3\xa1\xf7Lj\x19B=~\n\xf4\xcf\xb5\xa44\x99q\xaf\xf0}\xa2\x90\x90\x0d\x8bOw\xd1i]bc\x0c\xa9|\xdc\xa7C\x06\xee\x92N\xed\x0e\xf8\xe3\x0f\x08G\x0c^\xfa\xf96\x03>\x14\xedl\xe8p\xde%\x98\x89\x82`\xa6\x1d\n\xac\x82\xa3\x84=\xa7Bl\xcb\xe0\xea\x95y\xb4vYA6\xbd!\xb6\xb1\x85\x95ek9\x99\xe8\xc7\xba(\xb0\xb3\xc3J\xea\x8eUh\xa8\xa6k\x0c3+\xd9\xf8;v\x8aURc\xbe\x14^\xc2\xfc\xa8\x0c\xc9\xef\xe5\x96\x8e\xeb\xe9J\x7f\xdd+\x10\xd0\x1f\x0f\xee\xdf\x1a\xfd9\x8a\x10\xfc\xf9\x1c\xc2\x189|\x92\x06\x9bK\x96 \xe2$\x88\x15\x94\xa1\x1cB\x98\x068\x0e\x8f\x9c\x93\xe0Q\xba^\xfbI\xe8:A\x9a]\x98Sd\xc9\xa8\xd4\x07\xf3\xcc\xf0\xb8\x12R\xcd\xb4\x95\x9ck\x88\xeb9%W\xe0\xfd\xae\x0e\xce\xac\x8bK:\x8fX\xee&\xd3\x17\xd5T\xb2]\xbf'\xa3\xd2dQ\xaa\xb3\xcb+\xdb)\xc9y\xe9\xe7D](\x11P\x14CTj)\xbb\xf0\x8ezrs\xe2\x87\x8c7b\xb6q5dk$tZ\xd4\xa0V\x89A[\xc52/\x91\x0bT\xb0E\xf2)\xfd\xa0\xe6\xf7\xebP0\xa7\x7f(m\xe8\xa14\x95\x9dJ\xf4\xc9\xf4\xbe\xecX\xa2O\x1eLUqlj\n$\xbc\xd1N$\xa5\x08(\xe3&\xab?U\xd9|\\gE\xfc\x90\xe4EW$\xa5\xe2h\xe9e\x9bb\xe52T\xc3\x84\x9d\xec\xef\xc9?\x9d\xb1x\x9d\xe5\xd1\xc5\x18N\xfe\xf8o\xce\xdf\xb0zf\x9d\xa1\x08n\xc0\xdf\x9c\xbf\x8dx|\xf4\x06M\x12*V\x93\x9e\xaa{\xfbrTC\xb1Wa@\x0e$9C\xc5U\xe6\x17\x8a\x8dP94.\xc6h{\xea\x9c\x1b\xdd)\xf2HR\xe6\x11)\xa8\x90\x04{.\x16\xba\xa1\xc7i\xe6%\xe4\xbctG#/L\x132\xfa\x9a\x8f\xc2d\x8e\xc4L`6\xd6\x91\x15\xefZ\xe3\xc8\x0d\xc7p`R\xcfS\x9e\xedd\xdfP\xa1b\x8dPS\x89#\xa6\xb8(\x12\xad\x1b\xab\xff\x038\xdd\xd5\xde\xc2\x0dpf\x98?m\xcdW[N\x0b\xfa\x84\x00\x02\xbf\x0cV\xa0>Yc\x86\x11\xb8\xc2}{\xc1{XD\x89\x1f\xc7\xaa\x15V\xaf=\xbd\x98\x12%\xf3\xf8\xa1\xd5\xf8\xed*\x06`h\x0e\xf8\xd6\x89GP\xae\xf2\xf4\x8c\xbb\x07u/\xc9<\xfc\x97\xfa/\xfaA\x8e\x8a\xf34\xbc\x90\xa5\xd6\xa1 \xcez\x13\x97Q\xe6\xe7\xe5\xcdE\x9a\xaf'\xa1_\xfa\xcc\xd1\nG\xe6\xbc|q\xfc\x9a\xfd\xdd\xdd\xbb\x1aNa\xa9\xd9\x8f\xc0-|:\xa7\x8e\xb9f_\x82q}\xaa\xfdy:\xc6\x8c\x1c\xf2\xfd\xc9&\x057\xe7\xc51\xf9\x8d\xefN\xdas\xf7\x14\x0e\xe1\xac\xbb;\x97\xc6\xdd |\xf4G\xfd\x8dw\xca7\xacq\xfb\x01\xcf\xf5qd\xdc\x82\xc0\xb7\xe1\x91v\x1b\x02\x9e\x08|\x0f>q0h>J\x8a\xd2O\x02\x92.j\xae\xdb{\x12\xa1\xb0\xd0\xda\xa0\xe7t\x83\x1e\xfe\xffq\x83z\x89\xbf&\xf4\xef\xaf\xcb\x8b\x8c\x1c\xb2{\xf4'\xdf\xb9(P\xf7\xde5\xeem\x90\xe25X\xedq\x10\x98\xb4?F\x8c\x91\xdb\x05m6\x9f\x1e\x9f\xe8\xb5\x87\xc1\xfcg\x8d=\x7f\xa6\xdf\xf3`\xd94\xf0}x!\xf6\xfe|\xe8\xabe\x0f\x1b\x94\xb7#E\xb5 \x84\x97\x13t\x07uo\xfe\xeb_\xc9\xcd\xe5\x18\x1c\xa7\xab\xd8\xe3\xe3/e\xe5\xac\xdb\x1c\x8d\xcf\xb9\x93[\x8aJz\x9b\x8f'\xc4^7F\xefK\xcc\xca\x97\x98\x95O\x11\xb32 Z%B\x95c\xb0\"k\xab\x9a\xd7\x0dp\xab\xcf\x0b\xf1#29\xd5 c\xa0.K\x1b\xb3\x072\xbeD\xc1/\xa0#\\U_\xb0\x1e\x19\xe2J~\x0dCiZ>\x98\x97\xad\xe3-Q\xde\x148\x01\n\xeb\x1f305\xd6\xff\x9aV\xf0n\xba\xa7\xb1\xd0\x17\x8e\x82H\x9b\xf8\x10\xebr\xdd*p\xcc\xa3\xdb\x1b\xb3x\xfd\xf2c\xff\x00\xca7\xbd\xd2\xad\xea\xbc~_\x91\xf64\xec\xa6\x993;\xae\xd4N+\xbcW\xc3\x95h\xc6\x94\xa3M\x1d\x17o\xc5T\x0e\xf2\x98wF[\x89\xc5\\\xe7[Q\x8c\xdb\xa8\xf6R\x16\x8a\xe1d\x16E\x92\x01u\xfcL\xebdY\xb2\x9b\xf7\xce\xa0Z`\x85\xbd\x95 \xb6%\xbbM[jw\x05\xdf\xf5\x8c\xaf\xf9\xc2\xf7} \xbe\xef\xcfg`\xfa\x14gF\xcd\"\x99\xce\x0d\xcb\xb0\x82|@\x90\x00s\xb1\xa8\xc2\x17\xf91\xac\xd1\x96D\xf8\x02'\xf6\xe6\xd8\xd8\x82\x04\x9b<*/\x1e\xd3}\x1d\x95\xa6Z\xc7t+\xe5\xc6x\xdf\x98A\xf9\x9br\x95\xe6\xd1\xbf\xc9\xf7%\xa5\xb0{\xdd@\xb6\xe6\x15\xb0W\xc4Qx\x05\xf60\x8c\xd4\xe5\xc5&\xff\xf8\x03\xfd\x9d\xae\xc4\xea\xc5\xbax\x890\xda\xcd\xb0\x96\x8a+\x89\xa3m\xce\x86z\"\x02m\xd7\x9a\\\x91>\x84\x94u\\\x9b\xdf\xaa\xb1\xad\xd4\xc6\xae\xcaAX\xb7z<~\xbaJq\xf5\x1f\x9b\xeb\xea\x93zo\xc8\xe3T\x03\xb7ht4P\x1f\xad\xd7\xd9wC\x15Xj\xad6\xd9~\xf8\x80\xd2\x88\xfbP\x89*\xf4\xa1\xc9\x87\n\x1a\xf94\xd2\xe45\xbe\xcchD\xfb\x9e+n\xac\xd3\x90\xc4\x942\x8da\x8f\x07\xaaz\xe4<\xf3\x93\x90\x84#\xa1\xea0\xb8\xc6\n\xf8Y\xff\x13\n\n\xd0\xdf\xc3\xf2\xe9\xdd\x98\xb4&\x18iW\xb5&\x87\x89\x11&\x10S\xc8\xe3\xc8\x94\x1a*S\xb8n=ZE\x9f\xba-\xcd F\x99[\xac\xfeK\xee$\xd8\x86\xeaOI7\x9a\xf7\xc3\xf0^6\x11\xbc\x1f\x8e\x0d[E!9&\xf1\xe2Er\x84\xd3j\xe2\xc5\xf4+\x0d\x15\x1bV\xa1\xb5B\xe7C\xf7D\xd2\x89\x07\xac\xf6F\xdes\x0c\x85!\x1a\x90\x0f\xad\xfd\x11s\x80N\xf0\xf5\x94T\xa3\x19\xb4cw\xd8\xaa\xb6\xf3\xf0 \xb8z\xd4\x82\x98p\x08\x991\x956P\x98|\xaa\xe8\xcd\xfe\xfc\xb2U\xe8b\xae.\xdcl\x88F'\xc1\x0c \xea\xf2\xb6\x0d\xb5\xde*\x8a\xc3\x9c$\x943\xfa(M\xebB\x0d\xcd\x0d\xc9\xc2\xcc\xaasM\xc3Q\xdaxi\x05\x9b\xbc@\xa5[\x96F\x892_\x1c\xf4\xb0\xb7\xba\xcb$\xe7?\xed\xe0v\x1fX\xab\x92\x04%\xaa\x1368\x8c\x8b\x95\xed\x12\x1eP\xe4\xd4\xc7\xa0\"|\x17S\xf6\xcb\xbf Ar\x985a\xbb\x87\xa7\x91J\xf5\x85\x02\x990\xb0h\x1d\xd1\x92\xe8\xb5\xee\xc1\xee\xfc\xeey\xde\xfb\x0e\x89k\xb0C\x1d\xaf\x0f$O\\\xf8i=\x10GO\x9b(v\xdc \xbb\x14\x87~\xbf\x1e\xd2\xf83\xf0\xf9\xbb\x96*\xc11\xfb\xa10\xdc_g\xe5\xe0\xe7!\xc1\xf8A\x19m\xc9k\x7f>\xc8VZ\x99aC\xbf\xf4\x0bR\xa2G\x8e\xfc\xc8\xb6\x92Q\xaa^\xa8\xd5\x12\xbd\xdb\x97\x13JP\x13\x98,\xa2\xa5\x02\x8a\x89%\x86\xc0\xce\x00\x13QW\xb9\x86\x9fS\n\xfc\n\xf9\xaa(Y*E\x18G\xc4\xef#\x8b\x18\xa0k\x1b\x12\xef\xc6\x0d\x97~\xba\x02\xb4HS\xd4\x98\xc1\x98R\xf9\xaa\x8d\x99\xc4\x83\xefc\x0b/W\xc9j7\xb2\xce\xb0-^\xffIg\xafq8\xb5\xe0ly\xef\xc6XG\xee\xc4\xd1\x90\xefG%Y#\x9fY\xd3\x9a\xc3\xc3ff\x9d\xc6\xd9\xf2\x10\x1c\xbe\xb3x^\x96\xc1}\xd3\x07\xadt\xba\x16G\xc9;U\x860\xa8\x92\xd9\xf0$8\x8e9\x9dJ[~\xa8\x86\xa5\x1aDD\xc7{\x14F%`\x8c)\xcb\xbe\xc1\x1a\xe1wX\x154\x8dqd\xd7\xa5\xe0\xe7\xc8\xf5Z\x08\xda\xb3\x88'\xe7i5n\xbbBlTW\xb6>l\xc7\xd6\xb9P\xcc\xb1Y<\x92\xcb\x8c\xe8_}\x05\xe9\x18\x8c\xcb\xa0\xa9\x84\xa65\x071b\xab\xad\x94\xd2.M\xa2\xa1\xf55 \xd5\xa6;h\x1d\x06\xda\xc4'\xa4\xa6\x993\xd0\x14\xb3\x14\x14Y\x97\xef\xb4\xf7\xc0(1~\xdef\xa4\x05\x15\xb1z\x12S\xca\x9f\xf4\xa4\xb2H\xbc\"\x13\xbe\x162\xa9l\xc3\x1f\xf4\xda(\xf8\x83\x9eT\x16K\x0dL(\xfe\xb8qS,W\x1b\x98\x16\x1f_<\xcbl\xc53\xbd\xcfn>\x06\xbf\x7f\x92wy\xdfk\xe3\xb3+\x92\x84ozb\xa2\xc2g7\xed\x8b\x8az\x9f\xdd\xbc6X\x1d\xb6\xb7\x8e\x8aG\xcde\x89\xe3\x01\xabE\xc92\xca\x17\xab\xf4\xcc=a\x94\xb3p\xc6@\xde\xd2o\xf7\xe9\xc0\x989Q\x8c\xbb\xe3\xa5+f\xe9\x0dSH\x85\x1a\xdfN\xa8\xb9\xe6\xbc\xbb\x0dc\x9c6\xf8V\xdd!\x1c\x19B\x9f\x9a\xda\xf8\xe6\x92V\xc7\x05J\xb2Q\xdb\xdb\xb7\x03\xe2E\xc5\xf1*=K\x9aK\xdf\x80\xa6\x1c\xc0[\xccB\xa0?\xa0\xed8\x12\xa6\"\x9d\xa7\xe7J\xdeX\xd5L:\xeejX~o\xa9\xfbu=h\x1e\xb4\xc6\xe3\x93\x84Z\x0f\x8e\x90\x9d\xae\x9ax\xb5ZYY2'P\xf6\xa7\xa9]~l\x97]C\x16\xde\xa7T\xa3\x9f\xf5\x06v<\xabc\xe3\x19\x9d\xe1]\xc3\x19\xed\xea\x1e\x82\xf2\x10\x07\xbe\xad\xd0^\xe2\xf06)g\n%\xc6\x9c\x89^\xcc\xa0c\x84\x16G5\xe7\x02\xfc\xa2\x88\x96h\x931\xeb,\xaa\xe3\x806<\xfd\x1aJ\xf8\xa6w*|\x0d%\xa5\xfcj4\xda\xf2<6\xf5\xa1Pj\x82\xed\xaa&s:\xb4d$\xba]%\xfd\xf6V~\xf1\xe2,\x11l\x0c\xd3\x16b\x04\x02\xeeZr\x92\xd3\x13(9\xc9\xdf\xdaF\xc2B\xe3x\xef\xe3D\x1f\x01S\x1bw\x89\xea\xc4&\xda\xc3\x06\x9aCN\xd8\x81\x9a\xc07PV\xb3\x9b\xe8g\x17\x1a+\\\x9e$\x860\xc6\xdc#\xc9fMr\x7f\x8e\xe7a\xebO,&1\xc6\x9a\x88t\xd3o\x04\xd0\xde\xfe\x18x\xf64\xba$X8\xd1\xcd\xbd\xb3<*+\x88\xd1X\xc1d\x12\xfa\xc1w\xe4B\x1a!\".\xdb\xa0<\xa8\x17\xaa\x9a\xff\x92\x87\x9fh\xa6\xa8\xe27(\xeb\xe66P\x89\xee=^ \x12\xd3B\xe5\xbd\x9c\x84\xe2\xea\xf7\xe5\xbd;\xeao\xb3\xc8\xa8\x8c\xae\xd0\"2\xd5\xb9\xb2\xe2U\x80G>\xee\xb9\xa4\x19\x92Z\x8eD$dB\xce\xe0\xf5EF\x8e\xf2<\xcd]\xe7\x91\x9f$i t\xcf\x80\xcf\x8e\x18\xf0\x0b\xf0\xab\xd6T\x825g\xcbT \xf8\xa014c\x87At\x9a4{\xf9\x8a,HN\x92@t\x956\x08+\xbfH\xfeV\xc2\x9c\x90\x04\xd0\xe5\xd4\x8f\xa3\x82\x840\x81b\x93\x91\xdc\x1d\xb5 \xe8\xb0H\xa8+\xb9\x0f\xf5\xfc\xee\x95h\x97N\x11m\x1d\xd8;\xc4\xcc\x9dt\xf2\x90\xc0V\x13\xd2z\xc2\x98}9\x8e@c\x9e\xdc\xa8\xcd\xba\xf2\xcd\xb1$\xe5K\x81|/\x16nd\xe9\x1e\x0dR\x0c\x1c\x82'\x18\xa5.\x1f\xd2W_\xb1\xc21\xa8\x84V\xa0\xcd1\x9dlz\xe0\xe6\xa4((\xf6\xae7E $*W$\x879a\x1fH\xf3\x06\x1e\x8d\x81\xe2\x99\x037\xaa\x86\x14\xabB\xea\xedX\x9fQ\x8c\x87q\xb1s\xad\xfd\xaaa\x97\xd2\xa4(\xf3\x0d\xe5\xcdL\x96o\xbb\xf8\x8c\x9a2\xea\x8b'\xd0K\xd0\xc2\x996b\x1fX7+\xda*M\xc9'.\x05M\x1cq\x87 \x97\xcfT\xd1\xc2(x\x08\xd2\xfb\x1c7f(\xb9\n\xb4<\x94\x8a)n4\x86\xa62b\x0c)\xbd\xa5-\xd7P\xac\xd2M\x1cV\xef\xbc\xc1l\xa5\x96\x95\x03\xb4\x019\x82\xf5\xc0\xed\xa1\x9d\xd7T\"\xaf\xc2\xb70\xa5s\xd5H\xeeY\xf3 \xd3\xb7\xf0\xb0\xfd\xe7\xacg\x1a\xef^Q+\x01;\xdd\xd7\xaa\x02P\xd0\xa03\xcc\x9f\x81\xa5p}\x910\x1f\x80\x9a$\xbc#\x17\x85\x9b#WNZu(F#\x8flI~Q\xb3\x8b\xdaC\xae\xd1b\xe2E\x05\xf2Ac\xb6y\xb2B\xc9\x0c\x01\xe2\x14\x1e\xfd\xedn\xa2\xb9I\xd1\xcf\x94\x9e\x03\xfd\xeeiW\x12:\xddKO\xa8\x9c\x1c\x9d\x10m\xc7\xe4{\xa0\x8f\xb4\x94S\xef\x18\x06\xbb\xc73\xf1\x9e\xae\xd7\x1b\xdc\xa5\xad$\xc3p\x08\xd1\x18H\x83\x89\x8f4\xbc\x8cNa\x06R\xa5\x19\xb4\x07\xf2\x9e%\x88t\xf7E\xdd\x1d|r\xdd\xb4z\xa14WR\xca\x9f\xdc\xef)\xe9\"\xfe\xa4\xa7\xef\xf3\xf9\x83\x9e\xbeo\xc3\x1f\xf4>U\xf0\x07=}_\xcc\x1f\xf4\xf4}\x81T\xdf\xb7@\xf0\xa0s7\xe3\x1f\xb9\xd7t*\x08\xd5\x8a\xc0\xf0\xe3+\x02\xf5e\x8c\x86(\x02\x15\xc1\xfb=\x97\x0c\xad\"0\x96*\x02\x83J\x11\x18\x8f\xc68\xd7\xfb_\xc3\x02\xbe\x81\xf8kXP\x81%8Y\xb4\x15\x81\x0b;E`a\xab\x08\x8c\xec\x15\x81\x01W\x04.yd\xb2\xff=\xaf\xa9n#\xc7\xf1>\n\xdd_\xcb\xaa\xe0E\xc5\x8b\xef\x8eoa\x01\x87\x93\xdak\xa0p\xc6<\x1e\xc7/\x1cz\xae\x9c8a\x1d1\xe5\xbc\xed\xb5\xf3\x9e\xf7\xeeQ\xc7\x13l@\xff\x1c\xe8\xab\x86\xf0\xb3,\x11\xde\x15h@\x15\x8aN\xce\x8f4\xe7G\xbc\xc0\x93\x1b\xbe\"E\x1aoIx\xbc\x99\x979!\xeeI\xb50\x1d\x85\xaed\x85\\\xbar\xf4\x900\xa5\x17(Z\nU\xdb\xf4\x02\xb1T\xa1\xba\xf9\x04\nU\xbd*\xd5F\xe5\xca\xb2\x1d:\xfaa3<\xcf\xfd\x80\xa0\x8d\x18\xb8#\xb9\xaa=F\xb8,\xa9\x90\x1dE\xb4\xebb\x94$$\x9f\x18z\xa7l\n\x1d&\xad\xdb\xda\x0d\xe1\x9c\x12k' z}\xa4\x99#\xa7\xcc\xb5\x9d\xb1\xcb|\x96\xc6\x98\xf8\xec/w\xef\xde5h\\\x17iR\x1e\xb3o:Q\xe9\xc7Q\xb0C\x9a4\xf5`\xc2\xfa\x90jp\x893GG\x99\x1a/\xa9`^h\xa7(\xdd\xe4\x01\x99\xc1\x91\xbc\xbb\xa3Q\x8d\x80\xe7\x94H\x9f\x8b<\xd0\xe7J\xc3\xb4\x95\x0fw\xc7i\xcf\xa2\x8e\x1b\x0bi2\xd9\xae\xd1=\xe9dj\x80\xa2\xf2\xe4\xa9\x8b\xa7\x8e/\xd8\xf2,'\x81_\xea\x99X\xe0\x02\xe6\nm\xa9^T\xa0I\xf5\x1d~\xe8\x9d\xc7\xad&\x85\x9b\x1b>\x91)\xf3\x1f5\xaf-\xe5\xdc\x03?\xfe.\x8e\x96\xc9\x0c\x9c2\xcd\x0c\xf8I\xaf\x8cr\xff\xc9\xf2\x15\xf7\x9c\xd8\xf7\x0e\xc8\xda\xc03\x1amQ,\x026\xf3(\xfe\xff\x82>\x19p\x08\xce<\x8dC=n\xeaw'\x08\xad\x84&\x0d\x04\xb4I\xca\x86G;Vk\xa5\xde~\xa6=\xa3\xef\x17\xa7\x1c\x99\xee\xfb9\xe7dv'\xcc`K\xa3\xa0A\xa7r\xdd\xb0AIy\x80\x1f<\x7f\xd7s:\xf6sc\xee\xb1\x0c\x81w\xef\xb9\xaa\xcb/\xc7\xddT\x00\x16(\xc7\x03\xbd\xd0V\x99\xc0\x0dp\xf0WN\x7f\x9d\xd2_\xbe\xae'F7\x07!\x0f\x1b-\xf1m\xbf\x00\x83\xd5\xab!\x9b\xf1:\x84\x0d\xcd\x00\x86+\x9a\xdb\xe2\x0e\x02\x81\xa1%\xeeIa\xf0 \xe0Q\xdc\x0b\xb8\xa1\xb3\xa8\x8dd\xd62\xf6\xa46\xa8U\x87\xcc\x99\xf1\xb8\xe7'\xe4\xff\xfc?\xa7\xfdV\xf9\xb1\x0f\xa4\xc4\xea@J\xf9\x81\xa4&\xb2\x18\x8dw>\xe1%b\xbd\"\x8e\x02B{s\xa0,\x08+\xae-/\n\x99\xc2CH\xbd2\xfd\xf1\xb8\xfa\x81S\x9a\xf2 \xb2\x8a\x80\xbc\x0c\x19\x07\xb1\xaf,\x1cU\xac\xc9\x074\x99\xb3{\xf7\xee\xe9i\x07h\xe9\x07\xd8\x1c \x0c\x97\x92K\x92G\x18:\xc6\xc1d\x12l\x86\xda\xf1\xfc\xf3U\xbb\x10\xd4\xbc\xaal\x7f\x1e\xd3\x13\xefX0\x816;\xd5f\xce\x9do\xe0\xef\xf0\xed\xa59]\xc9Q`\"\xd75\xa9\xd6EuZ\xd3\xe9>\x8d\x1e\xaa\x8c\xb5$\xd3\x82D\x1f\xabA\x8c\xe4\x19Is\xb5\xb2\xbf^\xe5z\xa2\x0e\x0c&\xdf\xda\xae\xe8\xaf\x1d\x8am\x88\x197\x91,\x1b\x1f)\xa4W\x9a\xd8\xed+E3\xb0F5\x18\x82n G9T@\xa2\x89\xd2\xdc\x8c\x19\xd5\xa0\x81n\x06\xa7 #\xca\x01(\x92\xad@W\xda\xfc\xe9*\xd1\x11U\xaa\x03\xd0\xf1\xa7/\xe8\xd8\xb8.\x89\x8eL\x9f\xfd\x99\xa3\xe3\xab\xabD\xc7$-\x07 \xa3\x01\xad>\xbf#\x11\x0d\x14Wv\x02\xbe\xba\xec XW\xff\xba\x94 \xa0\xaf\x08\x0e\xe2\xb4\xd0\x94K}\xef\xec\xe0G\x98\x19\xfd\x08\x99\xe1\xee\xba9Pe\xca\xcc\x90\x99\xd4M*\xe2O\xa41\xe4\x99*\x86^z\x971\xa8\xdc\xbc\xac\xdc\xc6\xa0\xf2\xf42\xbbR\x01W\xe1G\x83E\xffd&\xf4\xb7^\x94\x84\xe4\xfc\xc5\xc2\x95\xa4\x12j^\xa6\xd8\xa0%\xcf\xeci\xe1\xfa\x03\xdci\xac\x1c\xe0\xd6\x03\xdcw\xcc&y(p\xe7\xb1\xd2u\xc4\x81h\x02?\x83C\xd8R\xd2~\xb98\x17\xd8\xc5\xbb\x02\xe0\n\"l`wg\x06`\xedo/\x13\xe0d\xd5GK;3\xe8\xe7C\x1b\x9d\x0b\xb5\xeb\x82!\xc4\xaf\xf6L\xf0\xe1\x9bC\xd8\x18\xc8L\xbf\xc2\xd3\x89\xe7yo\xb5#pN\x9c1\xac\x85\xdem\xbd\x9b\xae\x1b:\xfa\xeef\x90\xa9Y\xdf\x0d\xd6:o\xa8\xcc\xb5:\xbd7\x98q\xc1\x18\x97\x05\x95\xe2\xb96\xe2\x98\xfbF\x8f\xd0\x7fX\xaa\xab)\xec\xcf~l\xb4R\nX\xceB\xc9+\x1d\x8aK\x91\xcb\x8a=\xaad\xce\x0c\x1e\xee\x1ej+\x0c\xfb\x1a\x13&m\xa9B\xa9K\xc5\x1b\xb6v\xa3\xa0\xda6C4\x11\x01=\xd4\xfc\x12\xe9\x8c\xc1>\xa51\xb4\xa4\xd8\x80K\xb1V\x078\x0bvN\xb4\x9ex\xd0\x10f\x0d\\\x87\x9dh\x0e\xb5\xe8\xeb\x1bU\x1fcpZ\xf17\xad\xe7\xbd\xbb\x1dy\x14o}\xb6\xb1mr\xc93UI\x9e\x91J\xf2\xf4U\x92\xe7F%y\x16*\xc9S]\xad \xeb\xc5qRy\xd4\xcd\xea0\x9c\xe9\xfe\xe7\"\x80\xde\x9d\xd3\xff]?\x19TR\x14\xa1/\xf4)e\xd0\xf4\x03\xc8\xa0;\xe6\xf8\x87\xeb\"\x83\xdaH\x89\xc9@i5\xddAZ5\xcb\x8a\xfe0Yqc+\xda\x16\x18D\xdb\x0d\x15\xd1{\x03\xb0d\xc4{\xe8\x9f\\E\xa4\x18J\x07\xa0\x06S\x9f\x0d$n\xc4yP\x81\xce\xc2K\x8d\x83/\xd2|\xedk\x95\xb6\xc0\xb7#\x7f\xe1|m\x94\xaa\xb654F\xaa\x1a\xc0\xd7\xd2 \x15\x9f\xfec\xc8\xa7\xb1\x1c\x1c|\x03\\\xa8d\xe1vKR\xd6\x0bG\xf7\xb6\xfeE\x94,\xafL\xf2\xc6\xa9\x19C%\x81\xf3\x95\xb8\x02\x11\x9cw\xf1\xa7\xb4\xdc\xb9\x97\x17\xde\xca/\xcc-\xe9\xe7\xeb\x14\x8fe\x18\x83i.)Y<_\xc7\xe8\xfa\xb7\xfa\x0f\xd9\x13vS\x07;m\x0c\xe3\x84\x83\x81\xf1h\xae\xbd\xf3?\xff\x8f\xfe\xcf\xc1\x14\xe2\xce\x0c\x9c1\x1c\x97y\x94,\xddT\xe7M\xdaL\x94T!\xe8Vw\xe6\x9e\x99&\x83K\xaa[\x03\xa7\xdf\xf2II4=\xbc\x9c\xc2\xcb\\\xfa\xeb:(\xbc\xc6Pz\xe2}I <}\x86\xa7k\x91\xe0I\x14Qj\x8d\xc3&\xd3\x13?\x1e\xfa\xd8\x92T\x8f\x7f\xf6%*\xd9\xb4z\x8c\x87\xc0\x15ef\xe2{\xb2\x97\x0d\xc9*\x05S\xd9\xd9yI3W\x92\x1c\xf9\xa2k\x80|}<\x8be:\xd5\x94?\xe8\xe9T#\xfe\xa0\xa7S\xf5\xf9\x83\x9eNu\xc3\x1f\xf4t\xaa\x05\x7f\xd0B\xf2X\x8d\xe4\xf1\xc7G\xf2\xe0\x8a\xb2\x14\xa5*\x05f\xcf\xbbF\xa6\xc0\xcc\x87+0\x95Y\x8a6R\xc5edR\\~\xb2,Ei\xf2:\xbfH7%\xa6\xdfV\x03'\x1c\xf8\x91\x9f\x04$6\x00\xe7\xcc\xab%\xf1\xe71 \xb5\x01\xfe\x86\xba\xdd\xea\xb3\xb1U\xa8<\xbf\x98\xa4\x1buT\xb7\xb6R\xfb|S\x96\xf6Y\xd1\x9dy\x99\x00o\xef\xf4\x94\xfe\x11\xe0\x84\xd8\x147\x97\x1f\xcb\x94\x0fd\x93\x8aa]\x1f\xaa\x9f6\x1dT\xd4\xfc\x1b\x83\xf3:\xbf\x80\xa8\x84tS\x82\xccdfp\xdd\xd4\x17\xf7\xaeX#V\x12\xaak?i\xe1\xe7\x0c\x9e\xf0\x1d\xd0\xa8\x86\xd6\x01o`\xa8\x19\x9c\xe3\xe8\x0c\xf6jc!&\xc8\xa8\x0f\x95\xebYp\xfc\xcb\xa1\xf2\xe5P\xb9\xbe\x87\xca\xfc\"\xf3\x0bC\x91\x16\xe2E\xc5\xf1\x99\xbf\\\x92\xfc\xc0t\x94\xb0\\?\x1a\x12\x86P~\\\xa4\xc7\xab\xf4L{\xe2\x94\xba\xc3\xa0\x19XP\x8f\xd6\x0bVQ\x1c\xe6$A\xa1\x0e\xcb\xfc\x98?bG\xa6\xb7$/\xa24\x99d\xb9\xbf\\\xfb\xca\x13,\x1d\x7f\x88\xe6NO\xd7\xa4(\xfc%\x01\xc5\xfd\xc9\xc4_\xcf\xa3\xe5&\xdd\xa8\x0b~X\xcd\xa5\x12hu\xab\x0e\x0ey\x83\xb4\x18\xca\x14\x18\xc6\xe2\n@]\xea\x06\x13\xc7\xa8>\x94\x99\xdb\n\xd2\x90\xd4\xad\x15\x0c\xf5X\"V? \xa9\xa4a\xf9j\x9a\x91\xc4\xcf\"\xf6\xea\"\"qXP6 IK\x98\x13\xc8rR\x90\xa4\xc4\x8a\xd4+\x02\x85\xbf&\xc0\xf1\x1c\xd2\x1c^d$\xf9\xee\xe5\xd3\xc6\xb8\xeeY\x8e\xdc9\xdedY\x9a\x97$\x14\x0b*z\xe7\xe7d\xc0\xf8\xf8\xd4\xa0\xf0\xf57\xe7\xc0\xdbw\xfeV\xcdR\xb9J\x0b\x02\xe5\xca/a\xed\x97\xc1j\xc0g\xf9\xb4\xcd\xe0\x96\xb7\xef%l\xf6\xdcE\x9a\x039\xf7\xd7YL\xc6\xbb~k\x1f\xbf5\xf2\x1c\x11\xd3BI\xb0\xc5\x16\xd5\xee\xf3\x0f\xb0\xdf\xae\xdf\xf6^GE\x11%\xcb\xcfgs;\xafWt\x87\xa5\xdb($a\xe3u\x08SR`\xad\xdd\"#A\xb4\xb8\x00\x9f\x1eoQg'X\xef$\xbe#\xa3$\x8c\x02\xbf$\xd5\xd7$\x1b\xb9\xdd\x00|\xd9\x83\x97\x11\x10Z5I\xed\x85\x04q\xf2\xcb<\x0e\xc5\xa6\x96=c|\xca\xe7\xc7\xfd_c\xd5\xe5\xe0\xdc\xf4l\x97\x0c\xd48\xae\xfd8\xae0Q \x96\xe5\xf2\x9cm\x12\x9a\xd9u\xb7\x03\x07\x13\xb6\xe3\x7f\xafY\x92v\x8a\xa0\x8f \xc9\x9eE\xc9\xbb\xcf]\xbd\xdd\x18\x87\x0d\xb2pq]\xa9\xde\x96F/1\xe1\xa0$\xe7\xe50$\xf3\x8d\xb8\x93\xa4\xa8\xe1\x96\x88V\xb5N\x05\x1e\x1a<5\xa11\xd9^\x96\x93-I\xca\xc7\xacG\xae\x84\x92*\xf3\x9b\xae\xb0\xa2[\x89\x15\xddn\xb2\xf4N\x0c\xb4\x8b\xd9&=>\xdbT\xe9g\xa9n\x1f\xe3j\xf7\x1d\x89)\xb6\xb9\xb8+F\xacLk\x0b\xa1s=B\xe7\xed\x19\x94O\x86R\x8a\xe6k\x1b\xd9\xb0RJ UU\xc1\xf3u\x9c\x143pVe\x99\xcdn\xde<;;\xf3\xcenyi\xbe\xbcy\xb0\xbf\xbf\x7f\x13_\x93\xbf\xf4\xcf8J\xdeI\xdf\x9c>x\xf0\xe0&\x16 \x94\xbc\xabM\xf0\x93\xa5\x05rc3p\xfcy\x91\xc6\x1be\xf9{^\x05QQ\xbcF\x94?\xdc\xef\xa3\x7f\x17\x99\xd5\xd3J\x16\x85\xc5\xbc^\xac\xe7i,\x9d\xdamD\xce\xbeO\xcfg\xe0\xec\xc3>\x1c\xd0\xff\x93\x0c\x06\x0bNm\x928\x0d\xdeu\xd3\xd3\xe9z\x97\xb1<\xe0\x12\xa4\x9b\x81\xf3|z\xc7\xbb\x0f\xf7\x7f\x98\xde\xfe\xf9\x8ew\xf7\xd1\xf46\x1cx\xf7\xf6o\xc1\xf4\xc0\xbb{\xf7\x0eLa\xba\x0fS\xb8\xe7\xdd\xbau\x1b\xa6p\x97?\xbd\x0bw\xbc\xbb?\xdf]\x1dl'\xde\xfd\xfd\xe9\xa3\xfbp\xcb\xbbw\xe76\xdc\xf7\xee=\xb8\x07\xb7\xe8K\xb7\x82\xa9w\xb0\x7f\x8b\x0e\x07\xf0\xd9\x01\x1cx\xd3\x07\x0f~\xbe\xff\xc3\xed`\xe2\xdd\xb9s\x0b\xf6'S\xf0\xee\xde\xbe;\x99\xc2\x14\x1fM\xef\x05\xfb\xe0\xdd\xb9\xfd\xc0\xbb}p\x9f\xde\xbb\xf5\xc0{p\x87>\xbd\xb5\x7f/\xa60\xf7\xbc[\xf7\xef=\xba\xe3\xdd\xbdw\x00\xd3\xfb\xde\xfd\xbbS\xb8\xeb\xdd\xb9\x03\xd3\x07p\xcf\x9b\xc2\xf4\xc1\xea\x8ew?\xa0\x9f\x80}\x98\xd2\xcfL\xe8W`J\xbf3\xa9>swB\xbf\x13xw\x0enO\xbc\xe9\xdd{\xde\x83;\xb7&\xde\xbd;\xec\x07m\xee\xee\xcf\x0fh\x97\x1eM\xef\xc1}\xdaG\x98\xde\xf5n\xdd9\x80\xfb\xc0&\xec\xdf\x9d\xf9\x1f\x8d>\xf8\xca_\x9bu\xff\x93\xac\xe0\xf3\xe9\x01\xdc\xff\xe1\xfe\xcfw\x10l\x10\n\x7f\x82\xd5\x97\xe4\xb9\xb8\xc4\xe2\xdf\xf6n\xdd\xbe\x0f\xd3\xdb\xde\xfd\xdb\x0f\x82\x89w\xfb\xee\x03\xfa\xff\x93\xa9wp ~\xdd}p\x0f\xf6\x9fQ4\x98z\xf7\xa7\x0f\xe2\xc9\x81w\xf7\xce\x94\n`\x07\xdaW\xf0Q\xe3\x1f\x04\xa0\x98B\x1f\xc7\x07\xde\xbd;\xf7'\xb7\xbc\xe9\x9d \xfd\xf9\x00\x7f\x1e\x04\xb2\x97\xee\x8b\x97\xaa\xdb\x80\xb7\xc5\xcf\xaa\x83\xf7\xbd\xe9\xfd[1vor\xcb\xdb\xbf5\x0dto\x80\xe8z\xf5\x9ca\x1a\xed\x1d\xf6\x89b\xc2\xf4\x0e]k\xf1;P\xbe\xf2)0AY,\xf7\x12\xf8p\xcb;\xb8\x03\xd3\xfdgw\xbd\xe9\xfe\x038\xf0\xee\xdc\x0f&\xde\xc1\xdd\xfb\x13\xef\xe0\x1e\xffqo\x1f\x17\xf7\xc1\xbd\x07\xe2\x81wo\x7f\x8a\xff}p\xf7\x01\xec\xc7\xf7\xbc\xfb\xb7\xe0\x9e\xf7`\xff~@!\xbc\x83{S\xfc\xef\xbd}:[\xf4\xc5x\xd2\x80\x99\x08 \xfa\xe9)\xb6\x83\xdf\x11\xed\xd2\x15\xec4\xfcL\xf4\xf3\xd3\xce\xfa\xa4\x1fyy\x89\xa9\xbf\xe7\xdd\x9e\xde\x07\x9c\xf8\xc0;\xb8w0\x11\x93\xc6~<\xb8\xf7\x00\xf6\x0b\x9c\xcc{\xfbS\x9c\xc8\xbb8\x91\x0f\xf6\xef\x03\x9d\xce\x00\x97@\xcc\x14\xfb\x81/q\xa0I\x05\xd4XQ\xfc\x14N8[\x81~\x93\xb8\xf3\xe9t\xc7\xd8\xc1\xc9=oz{\xfa\x81\xe6\xfd6\x1c\xdcV\xcd;/\xcbqe\xd3\xfd\x00\xeemo\xffp\xc7\xbb\x7f+\xbe\xe5!)\xba\xf3\xe0\xd9}\xb8\x1bO\xee\x02\xfb\xdf\xd4\xbb=\x9d\xd0\x7f\x9eQ(\x98\xde\xfa\xe1`\xfa\xf3\xbdO0t\x16\xf1~e#\xdf\x87\xe9\xfd\xd5\xed\xed\xe4`5\xb9\xbd=\xf8\xf7\xf3[pw{\xb0\x9a\xde\xff\xf9\xee\x0f\xb7\xfe\xbd\xbe\x05\xf7V\xd3\x83\xed\xe4\xe0\x87\xbb\xdb\xff\x8f\xbdw[r\xe4F\x16\x04\xdf\xfb+\x90l\x9d*\xb2x\xc9d\xd6E\x123\xb3\xb2\xd5j\xe9\xb4\xd6T\xdd2\xa9\xfa\xcc\xce\x90\xacj0\x08\x92\xa1\x8c\x9b\x10\x08ff 5\xd6\x0fk\xfb\x03\xbb\x0f;f\xbb/\xfb0k\xf3\xb2f\xfb\x0b\xf3)\xfd%kp\x07\x107D0\x98U\xea\xd3\xe7LS\xb2\xca\x08\x04.\x0e\xc0\xe1\xeep8\xdc\xcf\xeb\x9d\x1d|\x1c\xc5\x84Q\x18D\xfd\xf3O\x07\x13\x9a\xa6\xfe6\xaa\x9f+G\xfd\xe9\xd9Y\xd5\xa6\xd47\x1f\x9e9\xce\x95\xd5\x87\xe9s\xc7\xb9\xb2\xfa\xf0\xb4\xbaCK\xf1\xc3\xf3j\x13\x81\xf3F\xa5\xdd\x9b\xa9\xba\x9e}\xee0u\xdddA\x80\x9f\x9f\xbb\x82\xedxq\x18\xc6QH\xf9\x8d\xce4\xad\x1c\xc5\xba\xd4$\x9ekP\xd5\x0f\xce\x10R\xee\x91+\xf5\x19\xdeX\x04\xd1\xbb\xf5[\x0c\xd7\x95\xd0}\x8b~\xd6_D|\xc3\xe0\xc3|\xa9S\xfc(\xf0#\xf6*^3rEN\xa6\xa5T<\x0d\x85G\x9d\xbeR\"(\x1e\xba\xaa'\x9d\x8aJv\x86\xa7\xa7\xe6\xc5\xb4x\x9f\xc4[N\x93\x9d\xfe\\x/\xa0S\xbd\xf7\x1b\xe7-\xa9^\n\xe6y=rrE\xc4}\xc2\xe2\x0d\xea\x8c\xfa\xa0\xb1\x19\xc1\xc1qOOWoP\xedL\xc4nIV\xe9\x89J\xa3:\xcd\x8b\xb9\xc9\xe6\xd7\xbb\xa6\x92c\x93\x9c\x056-\xad\x8d\xba\xbd\x1e\xef\xc1\xd5\xc9\x8c\xb3~0gK\x03O\xcaD\x1f\xae\x1e\xfe\xfc\xbe\xba\xa4`\x08r\xf3\x11\x95\xb5UY\xc5\xfb\xc5\xa6G\x84\x15*\x1c\x95j\xb2\xa0tR~\xa9Z\xcb\xfa+\xb80\xc9\x06D\xecx|\x0b\xfd\xfe\x8a\xf3\x98\xf7{\xff\x81\xc7\xd1\x96\xfc\x993\x85\xdet\x15\xb0?\xe3\xa1\xa4\x18\x11o\xc7\xbc\x1b\xb8\x9c\x7f\xea\xa1\x13\x8e\xea\xbd0\x8b\x9f\x18\xabF\x8d\x8cM\x1a\x8c\x88\x02[\xab\xe7!\x87V\xe4\xdc\xb0\xfb\xb4_\xfc6\x98lb\xfe\x15\xf5v\xb9-{m\xd5`sy\x99y\xb4\x84i\xc4\xa6\xcd\x1b\xd7Z\xbf\xbe3+\xc4\xd2\xaa\x10\xc6\xa6\x01W\xd4\xef\x8a\xb4\xde\xf93\x8a\xb8\x82\xc1\x87zj\xaa1\xa1\xfcp\x9dj\x06#\x8d\x99\x9e\xae\x18\xf29\xd5\x91\x16\xedU3\x1eK\xd3~4\x18\x91H\xd3\x89&@\xf4\xa1Z\xb7\xde\x01:!\xb6W\xd6\x94~@\x14\x86\xcea=\xe5\xf5\xa4RZG\xe4\x1b\xb3\xbc?\xe2\xb8D\x15\xbax6\xfa\xa0\xa1\xea\x06\xe2\x03\x06\x0c+\xee2l\xe0\xf7+\xe6B\xd1\xa7M\xe1u\x92 ?H\x0dC\xfe\x15\xf9(|\xbd\x81\xa1?u\x1e\x07\xf85%\xa6%\xb1)D\xfeE!\x01\x9c\x8e\xc4\xa6\x97[&~\xcb\x19U\x14<\xb6/\x0ebZ\xec\xb6\xaf$\xa7nS\xe3\xe0\xba\x9b\x98\x93\xbe\xe9e\x0e\xe1Hk\xfc\x03\x16m\xc5n\x04B\xca\xd9\x08D\x92^\xef\x82\xc4\xe3\xf1\xc5\x80P2\xbc\"|\xce\xe6\xfeR1@\xb6T\x8d\xf8\xc3!\xb6\x84]r#\"-\xcea\x1d\xfa\x8f\x0b\xf7x\x9a\x03>\x1c\xfa\xe4\x92\xc4\x17\x03\xd2\xc3\xa5\x80\x8e\xf3m\x17\xc85\xf6\xaa\x80\xa0\x06\x19U\x16s\x0ej`\x9a5\x8c\xc1Q#\xf0\x91\xb0s\xb2\xa3\xa9\x0bC\xd5\xa7,b\xa9G\x13\xf6j\xed\x92=U\x0e\xce\x92\x80z\xec\xabH\xf8\xc2g\xa9K\x12U\xd9\xb0\x9a\xdf\x8b0\xa8\x8b\xa4?\x17\xb4\xfa\x19J\"?e\xb1`o!\xa6\xd5a\xed~\xef2/\xf3rQ\xd8\x88\xbe\x1f\x95\xeb\x03\x95QG\xb2\xd3\xbb<-\xd4\xda#C\x92b\xf6r\xed\x1eR\xc4.5\xb2\xb9Xj9\xeb\x9a\xf4.\x13\xce^^\xaa\xe2P9\xed\xc3g-\x17\xc0u\xe6\xcbS\xf8zy\xaar\x16\x00 3\xd2\xebR\xb02\x0e\x1b\x16y\xae\x85=R2`\xe0\xe2\x0f\xdeH\x91F\x08\x1d;\x17\x8ekjkX\x1b\x8e\xc305\xeb\x93\x80F\xdb\xef8\xdb\xf8wu\xc9)Q\xe4\x9a\x86\xa9K(Q\xdf\xc1\xc9\x0c\xf8\x9f\xd1\x19'i\x12\xf8\xa2\x7f\xbaH\x87\xa7\xdb\xc1@\x87\xf2\x86H\xde\xbc\x1f\xe0\x12\xc6\x1e\xbe\xf5\xb2T\xc4\xe1\x88x\xf3\xb3\xe5\xc0\xfa\xb1p\xe5\x99\xab,\xcb\xca8\xd4\xed\x17U7\x1f\xe3\xd1\xe3U\xef1\x19\x92\x1d\x0c\xbb\xdf\x8f\xfb\x9b\xc1@\x8d\xf8\xe3\xde\xe3R)\xa7)ia\xc6\xd5\xbc\xad\xd5L\xc1\x0c\xf6\xa3\xc9\xce\xdf\xee\x02\x88p\xf4\xe8\x11)\xbcj\xc3\xd5B\xca\x88\xcc\x133\xd90\xeb\x1e\x15}o\x80n)\xfa\xf6\xd3\xa0\x15\x83\x1c\x88\xa1\x87DK\xeb\xd9d\xc7\xe8\xda\x8f\xb6\xb5%\xd8\xbabv\xaa\x0d@\xc7\xdd\xb7l\xcf\x02\xecb\xb95S\xf1\x91k\xd1Yum\xad\xef\xbap\x00c\xda\x1bM\xeev\"\x0c\xfe\x98\xc1\xb1\xed\xe5\x8e\x93\xd3\x97=X\\;\xfe\x12<\n8\x87k\x95\x05\x01\x13o\x03?\x15\xdd T\x168\x08S\xa1\xa2#G#\x0b\x9a\xa7\x13\xea\xf3\x05\x0b\xbbC\x17\xf8\xd5Y\xca+\xa9A\xd6\x0cU\xe0\xd7;\x19s%\xaa\xad\xdd\xc3\xd5&\x98\xaa\xb9v2\xc0\xdee\x1c\xe8e\x03\x95\x93\x97dJ\xae\xc9c\x92\n\xca\x05\xaeP\xf3 \x96&FTu#L \xbc#'!n\x99\x04E\xb5`[\xdf\xa9\xcfE\x06!\x80\x0c\\\x93\x1e\xa2bR\x9d\x99\xbc\xe6N\xe0\x9a\xe1<\xe9\x17jW;\xe659\x07\xe1\xf1%\x05\x1b\x10\x03\x07R*\xce6\x06\x06\x0c\xf3\x15\xbb(\"\x8c\xc1\x11\xcb\x8cV+\xf0C\xba\xed\"\xb2\x9b\x01|LR\xee\x95 M\xb9\xa7\x01\xad\x8fS\xf6\xd0!oX\xbd~\xb85Q\xcf\xfa\x8f \x0d\xf4hc-4P\xf3\x80\xcc\xd5$\xa0]1.\xe1\xc7\xbd\xc7\xeaO\x86\xeb\xbfH\xbf\xc9i\xaf\xb0\xd0+#\x04\x11D\xbb\xd3C\xc8^'\x16X\xcb\x113\xd5T\x8f\xe2\x81G@\xa3\xb27\xd5r\x0c4\x0d\xf5\xac\xe2\xf5\xfd\x11\xd0\xa8\xecM\xb5\x1c\x03MC=\xfc\x08Pxm\x9e\xf9Q p\xd7\xa8v\xa2\xd8\x1d\xb8\x94\xd8i.E\x03\x7f\x1bi\x0eu\xaf\xd6\x8d`wb\x0c\xa93\xa43\x98\xa3\xca\xac\xea\x90\x1d\xd3\xb7]\xad|\x1d\xe5\x1e\xda\xb3\xf5G\xee\xd9qh\xbc\xae\x96O\x05\x8f\x1d\xa2jc\x15\x98\xbf\xa1\x96# q\xd7s\x8c\xe0\xc5BG\xe9# \xa8\x97_\xb3\xa0{\xf3k\x16\xb8\xca\x1f\x01\x80\xa3\x06?J\xbbC\xe0G\xa9\xab\xfc\x11\x108j\x08)\xaf\x0b\x15\x8d5\xa8\xdc\xce\x1a\x8e\x00\xc2UG\x9a\xad\x0e\xad\xb5\x1c#\xb3U\xf3f\x1e>V\xebN\x8e\xa8;i\xab\xbb&`\xee(_\xaf\xb4.\xf1\x90D\xa1\x1b\xa9\xec\xa4Vj'\xb5\x88P\x12\\9\x88l\x1ao\xc4\xd1M@\x81\x94\\whM=\xd6);\xbb\x13\x1d\x07\xad2T\x95\xf1\x11a`N\xcb\xbaTV\xac\xaa^\x93\xa0\xdb\x0f\xae\x87\xaeVu\xae\xd9R\xd3\xe3KU\xe2\xa0\x14\xf7\xf2\xb1\xa3\x99#\x16\x85\xca_SB\xc5\xb1\x88b\xc1\xder\xb69\x04\xad\xe1D\x7f\xc8\xc2\x15\xe3\x08\x9f\xbf&C2\x1dLD\xac\x1d\x938N\x97\x95\x88\xdb\xdbD\x9cm\xc0\x10\xdb\xc9\xc4P\xea\xcdV\xdf\xac\xc9Kr\x06G\xa6\x9c\x0c\xafHof\xf5\x0c\xf0u0\"\x8f\xd5\n2\xea\x1f\x03\xffX\xd5\xfe\xd2\n\xfd\xbf\xdeD\x8fuL\xdf\xc7=\xe2\xaf\xaf\xac\xc4\xff\xb8\xf7rn>\xf5\x96Jxw.:;.\x80Y]wD\xba3eI\xf8\xf1\xe5\x8eW\xc1M\xc7)Kz\xb0N\x14\x1fn\xce\xa22\xc0\xec_\xa6\x0c\x9a\xaeeSY.\xe3\xa0^\\m\xa1\xa1|k\xcf\x8e\xc0\x9f8PM\x9dj@\xeaT\xc4\xd6|\x14\xea\x07>\xcc\x0fNX;j\xe1l\xd6\xa6\xde\x17,\xac-\x0e\x0b\xcc\x11\x1dt\xe9Kl=4\xf2v\xf1\xc1CE\xb3Fr|o\xefR\xd7\xc5\x105-\x06\x92\xe3|\x01\xe3\xabC\xb4\xa2\xde\x0d\xac\x90\xbf\xfe\xaf\xffM\xe1|e\xb0\xd6\xc7\xc8(\x0e\xcd\xd9\xfa\x08\xcd\xdbZ\xd4D\x9c#\xf6^\xeb\x9a\xb0\xb9>N>rC\x7fL\x0d\xc2Q\xc3Q\x02\xf3\xba\xb2\xe9+\x1f\x03\xa5\xe4\x8ad\xc5\xf3\xc3.\xcb\xa8_\xe4\xa4\x84\xf5]\xc4\xa9\x90}8\x8c\xc8\xcb+\"\xf4\xe9\x1a\x19\x93s\xc5\xc7\x15\x9b.+\xcaP\x13\x05\xd6\x07F\x0b\x85/FmU\xd2X\x89\xb9B\xbf\x82\xc6\xea\xac\x9c\xac\x99\xa5iU\x15\xafh\xcf\x8a\xf5\x9c\x97\xda\xd4 Z\xab\x85=Tip\xc5\xb9\xd4\xcf\xf78P\x03ri\x8f\x0f\xa1\xa9\x8a\n\xd5*\xd9\xecya\xaf.\xa7\xe4SS<\xa8\xcd \xf5\x03\x0f\xfa\xea\xc6]1\xb9\"\xf3\xda\x94\xcd{@\xa8{\xe8\xdb\xff\xec\xf9\xc0q\xf03\xef)\xden\xb2\xbcpg\xe1l\xc38\x8b<\x08\x13\x0f\x19?ug\xd4S\xaa3}\xe6\xced\xe9\xa2\xa0~`\xf2~\xde\x0c\xdc\xb9\xce3=k\x82\x0e\x8e-C\x16 \x03\xdft\xea\xce\x9a\x86\x94\x0b8\x06\xb49\xcf\xdd9\x03?\xba\xf17\xf7&\xd7\xd3\xc1\xb2\x94iy\xc4q\xbf\xc3z\xaahd\xc5\xcb\x84\xdc\x1ej+\x92pvA\x18\xb9$\xb1F\xc6\x0b\xc2\x86\xc3A\xa1\n\x8c$\x12\xcf\xd9r~\xb6\x1c\x11x\x98.]\xa6W\xc5\x03vm\xe5Q\"\x10.n\x84Gi.\xf8\x04\x9a\x02D\xe66X\x01\xa2-\x13\xdfg\x01K\xfb\xbd\xde``\xe1\x16\xe4\x92D\x17D(\xf0\xf9\\,\xfb\xac\xd1\x84\xe3\x03n\xc3\x95,A\x1a\xbb\xc6\x8a\x160\xd7\x84i;\x17\x1c\xcb:\xe1SC6\xb3\xd4\xcae\x01\xa9\x830\xb1I\xca=s\x88\xde?]D\xa7[\xbc\xf6:\x11\xdc\x0f]\xe2m\xc0\xf6,p\xde\xdeRm\xa532?\x1b\x91\xa9\x03?\xf3\xbb\xd8\xf32^\x82CWm\xc2h\x0c\x8f\x14X\xa3\xa2\xbd$\x9b\xb0h?\xb2\x1d\xff\xd8\xc6\xafO\xab\xb6\xaa\xdaJ\xe6y\x93\x91\x0c3\xa7\xb6\xbe\x0b\x0b)\x9c\xe6\xa6#\x12\x8c\xe0\x18\xbb~\x04\xfd\xec\x9c\x9c(\x82<\xf1v\x94\x7f\x19\xaf\xd9\x17\xa2\x7f\x96\x9f\x17\x8f\xa7\xf5\"\x9fO\xebE\xa6\xedE\xb4G}f\x1d\xe4\xf7\x96\xb3^{\x11j\x96x\xa1\x8b#2_\x0eF\xa4\x9f\xc1\xd5b:\"S\xe07gDJ\xf2\xfc\xb3:T\x19\xc8}\x8d\xcd\xc0r\x0c\xc8\x15\xa1\x93$N_\xd1\xbb\x11\x8a\x01\x8a\xc1]\x90\x94\\\x92@\xb1\xb0\xe9\x19\xd4L\x01E\x0b\xb5\xa7\x83\x0b\x92\x0e\x87naR\x873\x0c|\x8f\xf5\xcfG$\x1b\x8c4[\x86C}\xf3\x05\x9a\x1a\x91\xd4\xa0\xb9Y\xf4\xe4\x9a\x8c\xa7dF\xfa>l7\xd9\xde\xa7H\x07\xa5\xac\xa7)\xda8\x18\xe9;\xd8\xd0F%\xc7\x1c%Xo 2m\xe3\xc7+\xb2\x19(X\x1c\x14\xb0\x1bq(\xd0=\xf0'\x82Q=p\xa1\xb8\xccF\x0b\xb4\xa4~\xc9\xd8\xd2\xca)\xd2J\x9aKM\xd3\x12M\xac\x954\x0d8\x85*Z=\xde+\x89R\xd4\xca%\x8dR\x92\xaa\xc0J[.a\xcf\xfc\xa0\x03jY\xd3\x82\xc6\xe2\x82\xf0\x82pt\xd2\xef\xab\xf5\xed\xf7\xf9\xa8`R]\xa56\x88\xe3\x83\x8b\x01\x10 \xaeQ'68S\xb7\xd40\xbfb\xc3\xaa\xe4(o\\\xe1Q>\x14 \xde\xa1=c\xde=\x9bx\xc8[\xef/N\xf9\\6W\xcf\xa6U{B\xaa\xd3\xab\x86\xf8h\xed\xff\xec\xfc\xccIA\xd3\x9c\xbc\xd4\xccp\x14t\x9apB\xe4\x80\xf5\x88\xecFd?\"\xe1\x88l\xbb\xd1\xc5\x03\xa4\xf4\x01t1\xa8\xd3\xc5\xd4\xd0E\x0f\xe8b0\"g\xedt\xd1\xeb@\x17\x13rE\x02K\x17\x15\xd1\xf2\x90.n\xc8%\xc6p\xe8?=G\x8a\xb6\x86\xac\x15\xea\xb8Ac\x9c)R\xa4\xf5\xe0\x82lj\xb4\x12\xc8\x80\xaf\x00\xde\x1c\x80f\x0fM(\xc1R\xc7m\x1ca\xfc)\x03\xa4\x82px\xa5(\xc3G\x04\x0fZ\xb6\xf5\xed`\x1c7\xea\x91\"\xc8\xe4\x9a\xf4\xc3:`\x16(%O@\x86^\x0fSw\x83\x02|\x1a<\x07d\x17\x03\x05\x8c\x93\xad\xd8\xd2\x9a)9J[\xde\xb1U\xbc\xacoX\xcdtD\xbcA\x99M\xa4\x93|s2\xdf\"w\xa8\xa6\xb9.\xbe\xe8\xb8\x9c\xa1\xc3\xe4\x0d\xfc?\xecK\xe9\x8a7m>\x1eS\xf1[\x99\n\x10\xccB\x17\xb4\xc7\x8eR\x92\xb6\xa1>\x92\xff\xf8\xc7\xf3\x9f\"g\xf1\x1b8K\xce\x99\xfc\x1agr\xf2\x1f\xffh\xfe\xe3\x1f\xe2?\xe9/\xc4\x7f\xfcv\xfe\xe3\xbb\xf8\x8f\xff7\xe5?\x0fA\xc1F\xfc\x83\x01\x8fpw\x07n>\xec\x0e.\"\x97\x84_\x90H\xed\xe0JX\x01\x08\x16\xcf\xa3\xe5\xc0\xce\xba\x99\x07\xbd\x03\x11f\x00]\xbb\x10\x91{\x8b\xfb\xd7\x1a\x0d\x90\xcaK\xdb\x0c\x18\x80\xfar\xc2{d\xb5\xf4\xa4b\xf8LJ\x0b\xd9\xaa\xd5\x816\xb1\xfc\xa2\x9a\xddx\xd6B}\xb5\xe8\xdfz\xc5c\x17\xa4\x06\x85\xf5\xc7\x8cB\n$t\x85\x8b\xe6F\x1cF2\x0f\xe8\x8a\x05#r2\x053\x1cGUE\xfdV\xb9\xae\xe9\x88$Z\xce\x0e\x14IMM5}`'z\xfb\xcc\x06#r\xb2\xa9^$\xd2\x93\x9d\x0f\x05\x18%\x0e\\\xdd\x04\x04\xa4\x96\xe4\x95K\x8c\x0en\xd6I\xbeaw\x9c\xc348Q\xd1\xdbpo8\xac}\x06/Q\xb9\xb2\x83:\x15\x1an0\xa0']\xe0%\x0e\x98[\xa0%\xfa\nmK\x90\xc3\x96\x0e\x11\xdd)\xdc% *^\x93>lG\xe7\xcbAG8+\xb4\xbf\x19\x12\x81\x0eh\xda\x82\xcdv\x006\xeb\x08V\xa3\x8e\xc6\xfc\xac\xae\xc6eEh~\x06\xa0\x96j\xac\xfa\xa50\x8c\x1f\x0c}\x95U~\x8cQ\x1d\x8f\xbd\x06\xb8\xe0\xe2\x8a\x82\x1eh\x02\xd0&\x886\xab\xd7x\xfei9\xc8\x97]\x91ji\x83\xf5l\x80\xf2\x8c\x9b\xd3\x9b\xdcs[,\x97@\xac\xf6<_$q\xd2\xcf\x03\xbe\xc4\xf9\xbe3\x8b\x04\x9cg]\x17\x13fJ\xac\xe1\xa8%\xe5p\xa3\x87p\xb5\x1c\x1f\xba\xe6\xf0\x98\xee\xe1\xab\x0e\x0e\xd6Z\xc3|\x1b\xccj\x98\x12\xb7\x14\xe2#G-\xf6\xc9\x1ft\xa3\x84\xc4\xd1\xcbC\xb8u\x10q\xea4\xb2\x96\xd2\x0567\x95n\x83\xae\x05\xb2\nT\x1f$W\xd9d\xbb\xbf\xe6\xcd^\xfdruo\x7f>\xee\x0f\x16\xf3\xc5\xf2\xe7\xf7\xc3\xeb'\x93O\x16o\xe4h\xf6\xeb\xcb\x93\xc5b9\x00E\xf0b\xf1\xc9\xb4\xf71\xf6\x10\x0ey\xa5\xb8\xbb\xef\xb0\xb7()\xcf\x1a\xb6\x0dy\xce\xef\xd9\xf6\xab\xbb\x04\xc4]\xb8&\xd4\x7f#\xe7=\x08\xd2\xb8\x88\xfa\x83\xf9\xf2\xf1\xa27\x19\x9d\\\x8f{\xfafO\xaf\x87\xc1\xb7\xb8\xb9\xdb\x83\xa6\x82\xcbA_\x95*_t\xaeC\xd31n\x97\x9d\x804[\xa5\x82\xf7\xa7\x0e\xbc\x1cL\xd2\x98w\x0cN\xaa\xeb+\x9ck\x9a\x13@W\xbd\xa5\xeeI\xec\xdf\xa0\xff\xc9\x03\xc7\xa5g\xe4\xa3\xc2h\xa3\x82\x04_\xfa\xeb\x11\xe9m{j\xe7\xbb\xb1\x92Q\x9e\x17E\x933$\x98\xbb\x92\xc0\x1e\xa3\xc0\xee\xa6+\xd5\xed\xdd\xce\x9c\xd5\xba\xf3\x93\xe2\x86\xb2\xafH>\x14\xb0\xd2{eo\xf9\x12\xe8\xb2\x18\x8f\x9bk#\x06\n\xc1\xee\x84\xdeLP\xbd\xd9\x1b\x1c\xdc\x1b\x9a\x9f\xd5\x80\x9f\x8d@OF\xf3\xdd\xc6f\x12\xd0T|\x13\xad\xd9\x1d~\xf7\xb4\x0c\xb7g\x81\x11\x8d/@|\xdfL\xd8\x1d\xf3\xfa\x19\xe8-\n\xa5^\xa2\xfa\xfc \x95-\xfe4e\x83N5\xd3\xd9\xe2\xcf\x8a%\x99\xde\x98\x06#\x92\xa0>\x8d\x0cI2\x9f.\xf5\xe0v\x08EG\x0e\xf1\x99\xe2\xef=\xb8q>\xbeo\xd6L\xadc\x07\xb5\xb6\xc5\xb1\xde\xb5\xb8\x91\xcc\xcf\x97\x1d\xa2\xe7\x91\xc3\xf2b\xf1\xf7\xd0\xee=d\xeaT\x0f\xba\x15\xf9\xdb\xcc\xce!>_\xfc\x1d\xe0\xf9\xc5\x9f\x82)\x80\x05\x93/\x921I\xe6O\x0d\x8a6\xabR\xcc/-ho\xfa\x01\xb9$Y!\xe1!\xfd}\xc8t\xd9\x95\xf6K,\xa9\x12aT\x04\x0d(\x8d\x91\x98}\xdd\xf4\xd9\x08\\\x1b\xa4#bR\x04\xea\xb4\xdb)\xe6\x07 7&\xd5\x1cZ\x9c.\x86c\xb9\x98,&rq\x8d\xff\xc9\x93\x93\x93\x139\x1a\xc9\xf1\xf8\xb4~\x98q\xba\xe8\xf7=)B\xc9e2X\x0cN\xb7~\xfd`\xa3>w\xde\x8c\xf4\xfe\xfb\x7fsL\x11W\x1f\xfe_\xc7\x87D}\xf8\x7f\x1c\x1fD8#\xbd\xbf\xfe/\xffw\xaf\xf4\xa5\xc1\xda\xa6\x8b4\x95\xcbQ.iIk\xab\x8a\xbe}\x1a\xe4\xa5\xd2\xde\xa8\xc8\nS\xcd\n\xd3&VXc\xc4v\xd3\x94v\xe7\xc7\x19)\x97;\xcc\x96I\x91\xed*,\xcd,\xdb\x85\x95 gQ9/U\xafx\xd0<\xc8Oz\xfa=<\xa3\xb9&\x01\x99\x91\xc0J\xc3\xf1\xa8\xdd\xf6\xac\xfa\xd3\xd2\x97?\x17\x13\x11\x7f\x1b\xdf2\xfe%MY\xbfbtS\xfc\xa9e\xc6'\x82\xa5\xa2O\x07\x16^Z0\xbf\x18\x8eA\xec\xfe\xef\xff_oPH\x9d\xfc|>z\x0f\x1f\xfe\xfa\x97\xffZ\xfc\xd2\x9f_\x9f,\x07\x7f\xfd\xcb\x7f\x85\x8f\x9fL'\x93\xfa\xd7\x9f\x9f\xe9\xb2\x9fL\xd5\x7f\xc5\x0c#[\xef\xa8T\xee\x8d\x9c\xbf\x19/\x07\xe3\xf1\xb8\xaf\x1e\xe4'\x83\xd3m\x085\xfc\xf5/\xff\xfb'\xe7\x95\xbc\x8bt0\x1e\xf7\x17i)\xdb\xffV\xcb6\x7f3^\xa4\xaa\xd2>>\xd5\xb3\x83\xff\x96\\mM?\x8an\xd5\x12\x8d\xf9\xe3\xde\xd2E\x1c }[\xa7\x08\xa7\xf3\xf1\"\xc5\xdd\xd1\xf2\xd4\xb5\xc3\xa2m\x16\x8a'}a\x0e\x02\x01\x7f\x8d`\x0e\xd3~\xe2#\x120\x85\xbc\x85N\xd6\xdb\xc8\x0e\x98^\xdb\xad\x04\xd0em\x10k\x13\x914WF\x91<\x80\xde\xf8\xceM\x9b=\x92\x1d\x91\xfb\x11Y\x8d\xc8\xdb\x11\xb9\xfd0\x82t\xab5\xbf\xab&\xc2\xb4\xd2\xc4`u.\xc5\x9a\xccFaK\xaer\x88a\xe8\xb60tx\xfct;\xdf\xea\x9c\xe4\xf2\x8al\x06\x17d;\x1e\xb7\x9c(\x99_a\x0c\xb6\n\xb9P\xae\xd2\x9b\x14\xd8_\xd9\x15<\xe8,[\xb1\x19v\xe1\x82(\xc1\xca\x03\xc2\x18\x97vAz\xe3\x13\xe3\x86\xc7\x1f\x0c.\xda\x87\xd9\xfc\xc0\xd7\x07\xb9\"'\xb4\xafPX\xefN\xc6d\xaa\x05\xc2\xd4\xeeW\xa6#rO\xaeH\xef1NL\n\xa6\x89\xa0:\xc0\xb2\x01\x1e[']\xe6\xc3\xfcT\xeb{U\xc3zDB\xf57\xe9\x06\xb5\xf9\xc1\xa0\xb4\xcdc_\xcd\x83\x9a\xcaQeJ\xc9f\xa0\xa7\xf4\xa8\x06\x89\x06z7I\xfdh\x1b0\x18\x8a{\xd5R\xa1r\x95\xb69f\x18\x8a\xbf\x1c\xe0{rM\xfao\xe7;\\j\xc5\xe3\xca\xcc\x91<\";\xb46\xc8\x89 Z\xc4\xce\xcf\x97\x15\xb6\x91\xf5\x0b\x02\x80\x9e`G\xb9\xa7K\xd0&\x7f\x0c\x10\xce\x1e\x08\xc2t\xa9X^qI\x1d^+\xae\x9fj\xca\x8f2V \xbe\xd1\xe5WW\x836\xfd\xf6\xe4\x9a\xdc\x1e\xb3\xcf1?\x18\xc5V\x1d\xb4\xeb\x97\xc4\xe9\xcc\x0e\xddQ%\x11ug\xc4\x11\x07\xbb\xed\xa7\xf7J\x9b\xce\x85\xc0j5T\x8b\x03VH\xff0\x02\xf4\xfe\xfa\x97\xff\xe2\x8a\xa0\xea\xfa\xbd',H\xd9G\xad\xfa\xa3\xee\xc1\xc0\xc0\xbc\xea\xf8\x15\xe4\xa9\xdb\xdb[\xf9\x1b\xb9\x98-N\x17\xa7N\xb9\xc9o\xd4L\x9f\xbe\xb9\\\x9c\xd2E\xfa\xe4\xe5\xa9\x91\x90\xda\xc5#Z3^7F\xe8s\x87^CX\x0b.7\x06\xab\xce&\xe82\xaa\xf9\x9c*\xe3\xc1\x8c\x9c4\xc4\xae`!\xf5[>\x8b[_\x08\xc6\x9b+\xd7\xf2\xf2\xd7Q!0g\xd3\xdd\x16\xf3Ko}\xe1\xed\x14\x92l\x99x}\x9f\xb0\xfeA\xa1\xc1\xa3)#\xbd\x8c\x07\xbd\xd9Add\xc7\xacy%\xb2\xccH4\x81\xc8dl\xfd\x9a\xddu\\\xf60\xaa\xd0\x83?\xf1\xc0\x11\xf9\xa6\xfak:w*\xfe\xe0\xc2n{6\x1c\x08\x98\xb5\xbf\xaf\xa1\xe8)\x90D\x0cjF\x18\x96\xafTB\xbf\xb0\xa3z\xa3s\x9c\xfa\xa3\x92[\x9b\xa6\x9f\xe3\x0c\xcc~j\xfcb63Sg\x8ez\xb9\xea\xb4\xe8\xf2\xf5\x11\x0b\xfc\xe8&\x9d\x11V\x1f\x12\x9a\x89X}U\xcb\xa4\x1c\x93\xda\x15L\xea\xd8\x8d\x0co:\x80*\xeee\n;\x80:|jg\x12eA\xab\xe2E\xdf\xc3i\xd8\xe3\x14,\x95\xee]\x96J\xce\xb1\xaemk\xee;\x1e|\x14\xb6+\xa0o\xb9\xffX\xe7\x1f\xb9\xdb\xa0\x1eXD\x822);\xea\x14\x04\xea\xd1\xb7\xd0\xb5\xdc\x9d\xabr\xb6 \x9f[Vw\xfa\xe6\x92\xce_.\xd2\xa5a\x0d\xdb\x01\x1a\x87\xea+\xa3\xbb\xf1xD\xfc~\x9a;\x18P\x89\xc3\xe1@\xc9\xc6\x90\x0bR\n\x9b\xaf\xbc\xad\x18k\xcc\xcbv\x01\x9e\xe8\x0e\xac\xe0\x90Q\xc9\xf9}\x85\x1b\x14.\x13(\xf4F\xa1\x7f5\xc91\xda\xee:l\xaf\xf6\xa5=e\x08\x05\xfb\x81\x82yo\x15\x06F\xbc;L\xf1\x88\x99tOo\xa3\xd7\xd0\x9a\xde\x11np\xc7\xba!\x97\xb6Y4\xbe\xcdM\xdf \xce%\x15\xec[\x05\xc6~\xbeYN2\x1e\xa0\xa6J\xdb%\x1b-\x1a|\xd4;T\xf5Y\xb5\xb4\x1e\x11\xef\x18\x12I\x1e\xa4\x0d'E\x8dx\x90\xab\xa5\x93\x8eJq\x92\x0b{\xebN\x05 \xb2\xc0C;f\x1d\x8c\x1d\xd1;m\xcc\xab\x87\xbf{9}`\xd5f&T\xfd\x99\x81\xe8p.E\xb4\x02\xf3\xa1#\xf1\xd0)\xb6\x98\xd6\xbd\xec\x91\xd3\xfb\xf0>\x15h\xe0\xd1\xd0\x8d\xc7\xdd\xe1\x0b\xd0\x92\x1eP=!\xc3|L\x0c\x91\xe8 \x0e\xa9_P8\xb4zh\x9f\x1f:\x8fG \xf2\xd1\xf3w_9\xbb\xcaJgWY\xf9\xec\xca\x1b\xd9\x834}vu\xb0\x9d\xf6m2\xee\xd5\x0eV\x82\xe7\x1e\xe3\xf1\x05pI\xadM9\xb9\xb2\x14\x9a\xe0\xadmC/\xe0Sf\xac\xd7/\x06\x8a-\xdb6:\xed\xe0\xf6:(\xe2\x88\xf89z\xc4\xfa\xe6+\x1a\xc0\xd9\xe2U\x8ew\xfa\xe4\xa4\xdc\xa1'\xe4\x0b\xcb\xc7&?\xa6\xd5\x8fg\x93\xe9\xf3\xc9\xd3Jj5\xd3\x97qr\xcf\xfd\xedN\xf4\xbd\x019?\x9b>'\xff\xcc\xd96\xe6\xf7\xe4\x7f\xa2^\xbcJ\xc9\xe5\x96\xb3\xedo\xd4?\xe3\x1f!e\xe2\xc5\xe1\xcbj5\xaf\xbeyM\xbe\xf5=\x16\xa5l=!\x85\x18\x86j\xdc\xd28\xe3\x1e\x83X\x86\x01\xe6IOC_\x8c\xf5\xcb$\xd9%\x07\xa0T\x15\xa6\xb3\xd3\xd3\xad/v\xd9JAp\xaa B\x80N\xdbF\xe1\xb4\xf4\x0e[\xd1Q\xd9\x80\xbd\xddF(\x9e\xfcI\xf8\x81q\xb0\xae\x9d\xe2W\xac\xc4\x9c\x02v\x9c_\x94v\x9fe\xc6Q*x\xe6\x89\x98\xcfH\\_\x88\x19\x0fR\xf7\xb6\xb5eG\x9b\xeff\x1d\x1f#v\xfb\x1f\xfch\x1d\xdf\xba?\x97\xb7\xda\xae\xcay\xa6\xd6.\x9b\xe9{3\xf5\x1c\xc5X\xac.'\xd0\"\x0c\xbe\xa3\x14\x9d\xf8\xe9\x97A\x9c\xa2\x13\x9ck\x18\x89WT\xec&!\xbd\xebGj\xaf2R\xd2\xfc\x0cvK#\xa2\x1d\nT\xfd\xd5\x17\x7f\xa0KC0\"\xe1\x8b{\x0b\xc51e\xf1\xeeV\xab.\x86\x98\xcb\x8bfz\xf5N\xf0\x07\xc1[\xdbP?\x0dJ\xd0\xb2OGX,\xcc\xce\x8cnV\xa5\xe9\x04\xb7F|\xb5\\\xef\xddX\x8d\xc0w\xc1mc\x8c\xa8\xb1\xfaU\xbe\xb6\nj\x0bf\x02w@\xa0,\xc8\xf3=\x94\xfb\x17\x1a\xe8\xa8\x03] s\x15\xef\x02#,=\xf74\x14\xc1\xb7j8bb\x19\x95\x93'\x1e\x0d\x02\x13%FS\xe9\xc1(\x8f\x86te\xa3! rM\x04\x99\x91\x13\xbco\n\xbe\\\xec\xe8\xa0V\x08\x8c\xc7\x05\xf1\xa3T\xd0\xc8S\x85\xe2\x89\" \xaf\xe9V\x15.\xfa\x83\x9a\xd9\xd1}m\x89R\x7f0Y\xa9\xa7>+\xfaY\xea2\x88%\xd23k\x16\x05\xcc\xcf\xa8V\x01\x86\x9c\xbc\xb6\x0e'\x83\xcd\xb1\xa3\x94 \xe0TH\x9a\xe4\xd0\x0cF\x8e\xb3\x0cw\x17^\x15i\xf8q}(\x90\xffc:Q(f{QH\x9b\x141\xbf\x99T \xcb\x85\n\xd5c3\xa9\xd5\x1c\x18r\xc2ssV\xcb\x91!\xb3~k\xce^b\xc2P\xa4\x90\xe2&.\x83#f\xe6u\x81q\x1e719\xcb=f^\xf2RvZ\xbe\x80\xdb\x11\x85\xc5\xd2<\x1f\x05\x81\x05j\xb3\xef-\xc3me\x14l_\xbf6\x17(\x88,H\x05\xcd\xfbQ\x83]Jy?\"1p\x99C\x9e\xb3H>n06}\x81j\xaa~U\xc0\x1c\x19t\xd6\xbe\x7f\xe2\xf2\xaa\xfd9\xcfPIS\xb2\xabS\xfa\xa4\xabTp\xea\x89WL\xec\xe2u\x07d\xc0\xa0f=S\xae\xd7\x05\xe1Ph\x9e\x1d\x1e\x04R\x94\xc3\"\xe2G*\x9b\x98\xech\xfa\xc7\xdb\xc8F\xa3\x8fP\x14a\xf3hI\xd0#X\x03\xfb6\xb8\xd8\x05Fv'X\xb4\xee\x08#\x80\x87\xf2\x1f\xcb\xc5\xfbf\xe4\xaan\xe7\xde7\xdc\xcc)m\x15\x1a\x16\x98\x91\x18AW]\x1b\x9b^a;\xd1\x1b\x00\x93*\xa4\x90\x0e\x13L@\xde)\x14\xd2\x81F\x90\x99R\xbe\xcd\xc01V\x83\x843(u\x01\xc2\x03\xb6\xce\x0d-\x81\x07q\x19\xe9$\xcd\x12\xc6a\x01\xe2\x0d\xe95\x0b\x98`\xe5\xae\x8c*;2\x8a\n\x84\xa8\xd3\\\x07\x81\x9f\xa4~:k\xdd\xa2\x17\x7f\xd6\xa4K\xebh^b\x90\x04\x98\x83(\x0b\x02%VD\xe4\x9a\xf4&\x93\x9e\x12~1\xbc\xa21\xf6Rl\x1f\xf4\xfcc\x12Y\xd5\xf1\x90D] \xb6V\xecvDN%\x0f\x7f\xc19\xbd/x\xe8\xd25\x0c\xf2\x8e\x18eq5r\x83\xf9\x15\x96\xa1\xdd\xeb\xb0\xceG\"\xc4\x9c\xbb\xc0\x1aU\xd2\x95m:j\xc5\x87q\xfd8\xcb1 p\xff\xe5\x8bh\xfd%MD\xc6\xd9\x11\x03s\"&\xdb ^\xd1\xc0\x11\x9e\xf1\xcfP\xed\xf7l\xcb\xee\xfeL\xc2,\x15dG\xf7\x8c\x88\x1d#\x8f\xb7\x8f\xc9&\xa0[\x92\xb2Z`F\xf3\xcbG\xac\xb23\xbc \xb8T\xc1@\x8a\x81\xcf\x00}\xb9\xb9\x80\x1f\xf1\x08\"\xe9\xad\xd9\xdd \xdf7Eh\xbf\x82\xe1(\x8c9\x94Jl\xb5\xdf\xb2\x1b\x8az#Pw}\x84\xeb\\\xc6H\xb9Wf\x99!}\xec\xe3m+W\xdc\xdc\xdb\x9d/X\x9aP\x8f\xc1\x08\xce\x08\x04dr\xec\x0f\x8a\xfa\x8e\xc3\xdb\x02\xb7\xde\xc5\x86+\x8d\x18W\xa0\x1a9#O\x90\xb2\x98\xf2\xfa\xd5\xb7\x9d\xf0\xcanw\xbb\x80V\xdc\x96\x08,\x86\xa1UE12\xa5\xf95\nb\x95\xe6\x8eiMJ\xd2\xeb\xc4\x81S&\xbe\x10\xe5\xbdb\x87\xbbkzC\xa3J\xa6\xfd\xc1\x9c-\xf30\xba]\x1a\xdd\xd6\x1b=\xba\xc5.\xed\xe8\xce\xa5]\x1a\xaa*xtK\xad\x0b\xa9\x82\x829\xfeu\x01n[\x07\xae\xcb PU\x06d\xe8\xc2\xebU)\x0c\xae\xf9\xb9G\xe4K\xc5>\xbb\x8cH\xb1U=\x92\xfd\x1e0\xdf^M\xc3I\x1a\xe4\xbb\xf5\xbass\xb9\x9a\x0d\xd5hf\"\xa0\x82\xfe`\x94\xc7^\xac\x10\x14\xd4\xaf\xe9\xb9\xd0\xdc\x0bo\x11D\xe0\xf8\x1d\xefDr\xb5\x13W\x94\x17\xef/\x98\xc4\x0b\x98\xf4l\x92\xee\xfc\x8d\xe8+\x12<&\xb8\xed\xf7QrP\xdc\x9c\"\xc1l\xe2\x88n\x1c\x9d\x189\x85\x16\x03\xcfu\xc5\x0e\xce\xc2x\xcf\xfe\xee\x07\x8f\x16oX\x95FR\x0de\xbbv\x13\\p\xe2 _\xc0\xa8\xc3\xb1\n\x8e\xb7j\xc1c\xfdtD\x1c\xd7m\xc9!\x8d\xd9G\x9d\x89m}\xc9tY1\xb5\xe6;\x93\xe4\x1dM;\xcf\xbb\x15\x8e\xd0\x9a\xa3GzdX\x9d|\xb8(\xdc+\xdc\xa5\x81LL'w\x81(e\xe2\x1b\xc3?\x8f\x80\xaa\xc6\x89\x8f\xe3\x80\xae&\x8fk\xb1\xf3\x90\x1b\x1d\\\x87\x96J:\x8f\xa2\x16\xbcE\xe5`\xb2\x83\xce\x0f\xb0\xe2\x07\xc1\x0f\xf0\x96y\xef\xb2\x87\xd1\x95 \xaa \xf5\xdcb`2\xd2{\xd9\xcb\xa3\xf8\xda\x91R+\xbdwy\x8a\x05{/{\xcb\xa3T\xc7%\xf0:\x0c\x05\x8a\xcd\x96\x0bYA\xbe\x1a\xc5\xcb\xfc\xaaC\xa7\xd7G\xfb\xc0\xcd\x97\x87\x84j\xe2G\x84\x0d\x08sk\x03\x84\x16\x98\xc9\x90<\xc6\x08\x0b\xb0\xf5\xc0\xa8`\xed\xf4<\xa7\x16\xf5\xd1+\xa5\xbcW\xa2xMou\x84\x88\xfcQD\xdf\xceS\xdc\xa5\x89\xa2\xd6\xc9\xc8\xfcm\xbe?\x8c\xb4\xda\xa3-f\x06\x14\xe5\x1d\x98\x7f<\x0d@\x14`\x85\xd3+T\xb5\xe3X\xfe\x9e\xb3M\x7f\xd0\x82 ~N\"\xa0R\xedoZ\xcf\x04\xbb\x13\xfdBm\xa8\xb7oROt\x19\xbd\x02\xcc\x1d\x05f\xb3On\x1e9bm\x87Dc\x1e\x07(\xe6g\xf9:\xc2\xf6e\x8a\xbcC\xed&\xdb\xe6\x95\x1b\x13u\xa3K1\x1b'\xabA\xd5\x190\xb6!\xb9\"\xbd\xb7\xab\x80F7\xbd\xae\xaa\x942<]P\xae$\x81[-k\xfb\x12\x85\x93\x9a\xa1\xa5\x8dC\xd2\x1b#s\x9bu\xa4\xfc5\x8c\xe9\x02\xa9Uek`\xd7\xf1k\xadF\xae*f\x89\xbb\xd5\xbc\xc0\x11\xcd\x19b\xa2uT\xf6X\xce\xa8\xb0\x15\xbb\xc3@\x1e\x93\xef\xfe\xf8\xc37\xaf\xbf\xf9\x97\xaf\xde~\xf3\x87\xaf\xbf\xf9\xc37\xaf\xffc7\n\xe6<\xd69\x82\x8c\xa9\xf2z\x8f\x0f\x1a\xfe\xd3\xfe\xf5\xac7\x7f\xd3[>\xb9\xee\xc9\xc7\xf37\x8f\x97O\xae\x1f\xcb\xf9\x9b\xc7\xbd\xab\xcb\x97\x7f^\xa4\xcb\xe1\xe0\x14\x19\xdc\xe9\xfc\xcd\"]\x9c\xf5\x1e\xbf\\\x9c^-\xee\xce\xa6\xe3\xc5\xdd\xf4\xeb\xc5\xdd\xa7_/\x87\xa7\x134\x0fQ\xb3\xdb\xbf\x9e-\x16\xe9\x93+\xf5O\x0foM\xdao\x83\xeb\xde\xa8\xe8\xcbd\xaer+Vy\xd9?\xf9\xdd\x1f\xbf|\xfd\x1f\xbf\xfbj\xa0^u\xeab\x91\x0e\xf3W1\"= \xeeQ\n\x15\xaa\xcf\x83'\x86\xdb\xe2\xbb,Tq\xd9?\x85F{\xe0o\xe6t~6\xfe\x9c\x8e\xdf}1\xfeO\xcb\xfcq\xb6|rZ\xad\xb3\x0c\x81\xb0\xad\xa8^\x9d^\x17\xda\xcb\xf9\xf7\x88\xf4\xb6~\xcfE\x0b\xd5\xa0\x7f\xb9\xa3\x9cz\x82q\x13Q\xddhZ\xfa\x8f\xa2U\x9a\\\xc8G\xbf\x9e\xbe8\xbb\x90\x8f\x02\xa1\x9e\xe1q\x8b\x8f\xe7\x17\xf2\xd1OY\x0c/O\x9f\xc1\xbf\x9f_\xd4\xaf\xdb\xab\x1f\x989tA\xd8\xd2n\xa4\xb0\xf7\xb0\xf8Q\xb2\x8c\x98//PUzb|]\x82\xf2g\xfe\xf4@nE\x10ON\xc4A7\x1bAE\x93\x1b\x8f\x88\xd0\x9a\xbaf\xab\x81\xc0\xaa\x87\x91c\xa91Ut\xe7\x8bh\x0d\x93w\xff\x87x\xcdR0'\xf6At\xd1Zv\x7fD\xa2\x81M\xec\x17h\xfeWh\xa4\xa1\xca\xf5\xb5\x8f\x81\x81\xd6\x0d\n\xab\x1b\xa4M>\x86H\xe3fJ\x89wq!@\xc9\xa1\xa9\xf0\xaa\xc3\xd12\n^\xb7Q\xf0\xdc\xa3pD'4\xed\xf4\xbbP\xe5\x06(\x8e\xc3x\xad\xdf\x8dr\xb2Y\xd1I[\xba\xdd\xbcp\xf5~]\xaf\x8f\xc8*\xd79Z\x0eA\xd0\xb1\xf3C\xd3\x01{\xf89\xef\xb02\xa29\x07/\xb2\xcd\xd3E\x0b\x92t\x01\xf3\xd4X!\xda)\x84\xcb\xdc\x99\xf2\x91\xecg\x0f\x99\xba\xbaX\xd4(m\x14V\xc2\xd1'85\xc3\x86\xe2\xb2j\x11|Adh9\xe1\xb3\x92q\xc5\xe1Ds \x0f\xad\xa8\xaa!\x83\xcc\xef\x18Q5\x1f\xfb.H\xdc8\x12\xf9\x0c\x1e\x1c\x88\x0f\x06\xd9\xe0\xd4\x87\x00l\xf1\xf2\xe3\x81\xfb\xabr\x06\x87\xb4\xa4\x1a^\x9e\x8e\xb4S\xb0I\xffz\xe6G\x82\xf1\x08\xbc\xf4\xd1@Z\xf2\xe7\xc7\x91z\x01\x92\x14\xf3T2\x95-\xe1~\xcaR\x99\xecb\x81^i\xeee\xc2\xe35fO\xe5&\xce\xa25\xd4$\xfd0\x8cW~\xe0\xb3H\xfa\xd1:S}`\xa9\x0ciD\xb7\xb0VU\xb9\x84q%tI\xc1\xbc]\x14\x07\xf1\xf6^z;\xee\xa7\"\xa4\xa9\xf4\xe20\xcc\"_\xdc\xcb\xb5\xcf\x99\x82\xe1^\xb2u\xe6a\xf5\xec\xa7\xccO\xa0\x1e?J\x85/2\xc1dH\xf9\x0d\x13~\xb4\x95i\x1cd\x08\xd1\x9eb\x81T\xae(\xdfR_=\xc4\x99\xf0\x7f\xca\x98\\\xa1\xa20\x95j\xfb\xaedf\xe9\x05\x8cF\xf8\x10\x8b\x1d<\xc4a\x92 \xc6\xe5\x9a\x85\xb1\xc7\xa9\x90k\x9f\x86q\xb4N%\xf4\xdf\xf7R\xb9\x8b\x83\xb5\x1fmS\x19\xf8\xdb\x1d\xb4\x9fP.\"Us\x12d\xe1\n \xca\x92$\x80\xber\xeaC\x13{\x16)y4\x95\xd4\xa3k\x16\xdeK\x8fr\x06\xd0\xc4aB\xa3{\xe9\xf1\x0c\x06{\x1d\x87\x007\xbbK\xe2\x94\xad\xe5\x06\x9aI\xe5&\x88\xd5X\xc9-\x0d\x02\xc6\xef\xe56\xf3\x05\xe5\x00\x8e\xbf\xa6\xf7\xf2\xc6WX\x11\xc9\x88e\xa9\xa0\\\xc67~Do\xa9\xe4\xcc\xf3\x13\x96J\xce\"A\x03\xf5w\xef\xb3\xdbT\xa6;\xff&\xddQ\x89\xce R\x009\xe6B\xa6\xf7\xa9`a*\xe9\x96E\xde\xbd\\1\x1e\xf8\x91\xf4h\xc88\x95\x1e\xa0\x85\xf4\xe2\xcd\x861\x85/\xeb8\x95\n\x05\xa2\xadd\xa9\xa0\x82I\xa6z\n\xe03.\xe4&\x13\xab8\x9074\xdb\xb0H\x06\xd9]\xc6\xefeH\xfd4\x8ed\x18G4\xdd\xc90KY\x16\xca\x88n\xe3{\x8a\xb8\xa6\xa0L\xa8\xcf\xd5\x1f\x80)\xf6|\x1a\xe0\xa8\xdeKA\x85\x88c)|\x16\xad\xa9\x1a\xe1=\x0b\xe4\xde\xa7?\xb2T\xee\xfd \xa0\xeaO\xaa\xd0f\x1f\x03d\xfb\xf8\x9en\x99\x04\xccF4P\xa3\xbfN\xa5\xb7c4\x91\x9e\xdaw\xc85\x8d<&a\xd1\xcam@S5\xb2Y\xaa\xd0,\xda\xc62\xf2\xa3\x1f)L\xb4^\x0e2\xdd\xc5j\xd4\xe2\x80r)b5\x03\"\xbe\xb9\x8f\xa5\x88\xe3 \x95\xb7j\x8d\xca\xdb\x98\xdf\xa4\x922\x1eK\xca\x13*i\xeaS\xb9b\xa9\x90+\xff\x86\xc9U\x00h\xf9\xee\x9d\x1a\xdeDzA\xb6\x92^\x1c\xabU\x19'rCy(7~\xba\x93[\x7f#\xe46\xe3\x99\xf4\xa3M,\x7f\x8cW\xa9\xbc\xf1o}y\xc3\xd9Z\x064Z\xcb\xc0\x0fc\x19\xf8\xd1\x8d\x0cY\x94I\xb5\x18e\x18\xaf\xa9\x8ch\xc8d\xa2\xf06Q_\x938\x15\xf2\xa7$\x8e$\xf7\xbd\x9d\xe4\xd9\x8e\xcb\x94\xdd\xddK\xe1'\xa9\x1a/\xa6\xfe\x89\xe5-\x8d\xb6\xf2V-\xe7[\xff\xc6\x97\xef\xe2\x88\xa9%%W\xfeZ\xae|\x05\xf0J\xad#\xe9\xb1Xa\xb0Z\xaar\x1b\xef\xa5\x1f y\xe3\x872\xf4\x03\x191!\xe3(\x901\xdf\xaa\xe5/\x93l%\x15\xc0\x82\x052\x8bby\xcb\xd6\xf2\xee\xeeN\xde\xdd\xbf\x93\xd4\x93t-)\x93t#\xe9VR_\xd2@\xd2P\xd2H\xd2X\xd2\x9f$\xe5\x92\xa6\x92\nI3Io%\xbd\x93\xf4\x9d\\Q\xb9Z\xc9\xd5Z\xae\x98\\m\xe4j+W;\xb9\xf2\xe5\xeaG\xb9\n\xe5*\x92\xabX\xae\xb8\\\xa5r%\xe4j/W\xb7ru/W\n|\xe9y\xd2[Ko#\xbd\xad\xf4v\xd2\xf3\xa5w#\xbd@z\xa1\xf4\x14)\x94\x1e\x97^&\xbd\xbd\xf4n\xa5w'\xbd{\xe9\xbd\x93k&\xd7?\xca\xf5\x8d\\\x87r\x1d\xcb\xf5;\xc9<\xc9\x98d[\xc9\xb8d\xa9dB\xb2Ln|\xb9\xf9Qnn\xe4&\x94\x9bXn\xb8\xdcR\xb9]\xc9\xedZn\x99\xdcn\xe4v+\xb7jb\xe56\x90\xdbPn#\xb9M\xe4\xf6'\xb9\xe5r\x9b\xca\xad\x9an\xb9\xbd\x95\xdb{\xb9\xbb\x91\xbbP\xee\"\xb9\xe3r'\xe4.\x93\xfeZ\xfaL\xfa\x81\xf4C\xe9G\xd2\x8f\xa5\xff\x93\xf4\xb9\xf4S\xe9\x0b\xf9#\x93?\x86\xf2\xc7X\xfe\x98\xc8\x1b&o\xb6\xf2f'o|y\x13\xca\x9bH\xde$\xf2\x86\xcb\x9b[ys/o\xde\xc9\x80\xca`%\x03O\x06\xbe\x0cnd\xc0e\x90\xca@\xc8 \x93\xc1^\x06j\xa9\xca\xd0\x93\xe1Z\x86L\x86[\x19\xeedx#\xc3@\x86\xa1\x0c\xd5\n\x96a\"\xc3\x9fd\xc8e\x98\xcaP\xc80\x93\xe1^\x86\xb72\xbc\x93\xe1\xbd\x0c\xdf\xc9\x88\xca\xc8\x93\x11\x93\xd1FF[\x19\xf92\nd\x14\xcb(\x91\x11\x97Q&\xa3w2\x0eeBe\xc2d\xb2\x91\xc9V&;\x99\xdc\xc8$\x90I(\x93H&\\&\xa9L\x84Lner/\x7fR4M\xf2X\xf2T\xf2L\xf2[\x99R\x99\xaed\xea\xc9t-S&\xd3\xadLw2\xf5e\xfa\xa3Lod\x1a\xc84\x94i$\xd3X\xa6\\\xa6B\xa6\x99L\xf72\xbd\x93\xe9\xbdL\xdfI\xe1I\xb1\x96b#\xc5V\x8a\x9d\x14?Jq#E E(E$E,E\"\x05\x97BH\xb1\x97\xe2V\x8aw2\xa32\xdb\xca\xecFf\xa9\xcc\xeee\xf6N\xee\xa9\xdc{r\xcf\xe4~+\xf7\xbe\xdcGr\x9f\xc9\xdb\x8d\xbcM\xe5=\x93\xf7B\xbe\xa3\xf2](\xdf\xdd\x0e\x16\xab\xd3\xaa\xe6\xb47\"\xe8\xffoq\xbb\x1c\xfc\xa6\xbf\xb8\xfdy:\x9a>\x7f?0\xba\xcc\xb2:\x14r_\xcf\xe6\x8b\xf1\xc5\xec\xd1\xd5b\xb8\xf8d\xb4\xb8]L\x96\xc3\xdf\x14\nD\xf6\x897Ub4\xa3\xb6B\x94\x19\x96\xf3\xf1dh\xc5\x87\xe5p\xd6\xbf>i\xfa\xb48]\x9c\x0e\xfa\xd7'\x8b\xf5pqz=\xe8_c\xca\xb5\x13\x90\xbaJ\xb7?\xb9>E\xa5\xaej\xff\xf6\xf6v19\xbadsG\xad\xf6\x17\xd4\xc5\x8b\xb1\x05|\xf8\xe87\xbf^\x9c\xfe\xd3\xd5\x7f~\xdb\x1f\xc8\xc7\x9f\x80@Tg\xe1O\xbc\x0du\xc8\x11\xb3@\x8c\x0f\xaf\x03y\x12=\x1a\x7f\xe2\x81&-''Y\xb7\"\xdf\xb3\x80\n\x7f\xcfl\xb9\xcd\x81S\xc8\xa3/\xfa\x117\x99$\x87NX\x9a\x87\xd0\xd2\xf7\x19I\x9a\xa1\xb54\x7fF\x1cZc\xf3\x0b\xb1\xdf\x0d\xc1~\xba\x10\xf7vj\xd4E\x08\x81\xdb\xe4\x03\xe3bX!\xf9\x17\xa2_\"W\x87\xf8\xb4\x00$\xc6\x95r\xba\xe8\x9fn\x0f\xdc\xb7\x8fJ\xf9\x07\xa7\xdb\x03<\x1b\xb9\x80\x0d\x0e#%9\x1b\x90K\xd2\x07\xf2\x14\x95\x92-!?9\xeb8\xa6$\x9fs\x87w8\x976\xf2UU0\xeb\xaa\x84\xf4#pK\xd5(X\xce\x17\xb7\xcb\x06\xc1rG\xd3\xaf\xb3 \xc8\x8b\x9a\"-\x12\xbf\xa3\x9a\x8c\xfb?x;\x16\xb2\x83\x15\xb8a\xf8\x0f1_\x7f\xa90d#\x18\xaf\x023\x9b\xbfY\xa4\xcb'\xd7\xa6JG\x15E\xe6\xdb]\x1e5\xd3S\x94\x06tM\x7f2\x1dR\xec\xca\xdcb\xc94!\xfa]\xcc\xd2?\xc4\xe2\xf7to)\xf6\x1f\xf9\xefb\xa1\xad\xd3Z\xb2\x7f!\xbee4\x15\x7f\x8c\x98\xe9q\xa5\x8c\x9f~S\x9b\xcc\x9c\x92\xf5]\xe7\xf1\xce\x13\x89r'\xba,\xd7\xea\x82\xd3](\xce\xeb`~\xb6,\x1f\xac\xb6J\xf1\xbd\x1f\xe9\x9e\xa6\x1e\xf7\x131Cg=0\xce\xbd\xfd\xaa\x9c\xd8\xa5G\x87\x86\xbe\xa3\x89\xa0\x9d\xf1\x13\x86\x8e\xe7\xd5\xfa\x07\xfb\x00\xc7:@\x9fw89c\x13A\xdb\x1avO\\\xded\xbbA^\xc7\x82\x87\x81\x7f\x827&NL\x0f\x9aWQ\xcdW\xac\xf99\x91\xa7\x0d\x05\xbb\xa0\x92\x01\xf3\x84\xd9\xf1m#Q\xcd\xc09\x88$\n#P\xf8\x08\n\xf9Q\xf6\xcf]\x06\xef\x01\xc7\xbc\xaf\x8abS\xd7C\xae\xc2\xbe\x18Jv\x84-7\xf5=\x06\xc2\xa2\xc1\xa6\xb3T\xe3<\xc1\x8e\xc3q\xf6W\x98\xc5\x8fs\xe6\x87\x1ej;\x8e\xc2W\xb8\x7f\xe9Zy\xbe\x1f\xecX\x7fq\x94\xbb6R\xf4g\xfb\xc0\x06\x1f\x80A\x0d\x8d4\xce\xa7\xde\x8a\xfd-fT\xef\xd5\xba\xce\xe9\xeb\xf2\xd6\xaek3E\x0d\x00\x96\xed\xd8\xde\x83\xe6\xd88N\xd3\x0d\x82\xe74;\xe1\x0f\x87\xe2\xb8\x89\xef\xfd\xa6k\x93\x8dh\xf0'\xfe\x80E\x9d\xf1\x00\xf7S\xb9\xc2\x13\xc6\xc3(\x8d\xfb\xa8\x00\xbe>uY\xc3VX\x91\xad\xa2A\x1e5\xf9\xbf\xe3,a\xd1\x9a\xad?\x96\xedI\xc6;S\x99?\xf1.4\xa6tO'\xe3\x0dJ\xa2\"\xb6:\xf7\xb8V\x80\xacn\x9ak\x1f\xec\x90\x94}\xc3d0\xa5=\xed+\x10\xcc\xbdGM\x05!\xf4}G\xaf \x0f\\*\xd0\xb2qv\x9e\xfb\xf4~D\xc3\xe4\x02\xe21=\xeav\xcd\xea\xd85R\xbd6\x05\xed?tN\x8c\xbe\xae\xa8P(\xe7\xc3\x05\xd1\x07\xe7XU\xb5\x83\xa3\xf8\x9f\xcc\x12\xc2\x12\xf6#^`}\xcd\xa9\x1f\xf8\xd1\xf6\x87\x80B\xcc\xf6.\xe3S\xae\xb6\x8bl\xe4V\xd1\x97\x17\xb7\xdb\xe1zS\xf3\xeeAy8,Nb\xd1\x19$\xc7X\x1e\x01J\xef\xb4M\xe1Q\xd4\xe0\x1a\x87\xab\xe3i'/F\x8a\xfa\xda\x94\xf7#\xedh\x11c$\xf16?\xa5\x1a\xb0x\x92\xfb\xe5\x84\xbb\xc0\xf9`\xbc7\xbeeFd\xbe\xc4(>\xfd\xa2\xdbx\x1d\x8a\xeaC\xa3a\x1b\x8c\xc8<\x0fa\xde\x1b\x91\x1e\x04\xa4\x86\xf02\xea-\xf0S\xd1s\x85(\x9d\x973Bm\x9f\x7f@m;\xaek9?\xfb\x80Z\xe0\x93\xaeg\xdaZ\x8f\xbb\xbc \xcbm\xea8\xaf\xd4\xd1\x00;\xa3k?\xda\x9aBO\x1f\xd0pP\xa9\xe3\x99{\xf6v\"\x0c\xa0.\x93\xef\xf9\x03\xda\x12t\x15\xd8\x1e~\xda\xa9\x87k\xb6)\x0em\x15m\xdc\x85\x8aPA\xb1\xcf+\x81\x0d\x97\xee\x98x\xd5\x05\x8a\x14<\x0b\xacW\xb6\x8a\xcb){\xdd\x81\xa1\x1b\x1bF.\x89o\xaf)\xb0\xe1pP\xa8BG\x92\x9f\xb3%\xc4\xe7\x82\x87\xe9\xd2%\x8e\xd1@\xcc\x08\xe6<\x87\xf3\x85\xf9r\xa0\xa9\xd2\xa0BzrJa\x9fh\xc1\xad\x11\x04\x82\xf0\xdf\xb1\xaa\x835\x87\xe6\xcd\xf6E{\xfb-\x00\xbee\xe2\xfb,`)\x1e\xa3\xa3\xa3\x04\xec$\xbaH\x10\xe8\x10\xe1dzA(\xb9\xd4GHl\x12\xf8\x91j\x98\"Q\xbd\xf1\x93\xaf\xc2D\xdc\x7f\xebG,\xedS\x08m@\xc9\xcb+\x12\xa1\x17\xfe\x93>\x9b\x88\x1fv\xfeF\xcc\xe9\x12\xae\xdb\xac\x82\x9bo\xa25\x8b\x84\xfb\xfa\x13\x00\xccq\xe0\xe1F\x08\xd4\x12\xcf\xf9Ru\x91\xc2\xf1\xe6\xc9tpA\xf8p\xe8\x90\x130\xea\x85\xf0\xb7;\xa1`\xcfF\x84M\xfc\x14@4\xb0[\xbe\x90\x19\xb9\xaa\x8f\x9dQ_\x07\xa6\xa7y1\xda\xa86W\x8da%#2\x1c\xdaAB\xaa\xa1\xb9RB9\x8b@\xe8\xad\xd7\xda\x12\x0e&\x1f\xe7\xda\xe7\n\x9f\xcaq\xa5\xcc\x0420S]D\x0bQ\x8b%\x99\x82q*W\x1f\xb3\xb3\xb3\xcf\x9e/\xe5|\x91\x9d?;\x7f\xb6\xc8\xce\xcf\xce?\xd3\x89\xd5R\x01\x94\xca\xce\xce\xe8\xd9i!,X\x111\xe1\x8e\x91\x03+G\x84W\xc7P\x81\xe8#\xa2\xb9<)\x03\x02\x94\x92\xe1>>\xb3\xc7\x02\xd5\x9b\xf3\xc0\xe55\xab7\xc2I0\x02'\x10\xb98\x9b\x8eHo\x11\xa9\x14\xabU\\\x88\xde \x8f^W.\x9f\x15\x18p\x93Z\x1b\xd6V}\x0e5\x94\xd3\xb3\x82p\xf2e\xbcf_\x88~4 \xd7:,,F\xf9\xf3t<\x14\x08\xfe\xa6P\xbf\xa7j\xe8i\xda\x00\xee\x85)\x19\x13o@\xfe\x89<3\xc7\xb5\x90\x08\xc5y\x95z\xe8\xd5\x8c>\x15\x99\xf1\x07k\xe6\xc1\xdc\xab\xd54\xa4\xef\x8f\x14q\xf3#f\xfe\xbe\xa2w\x05\x024*\x05\xb4Al\x1fz\x1epZ\x86U?@e\x18kM\x9a\xeb\xae\xae\x96\xab\xdf\x8a\x00\x9c\x0dj\xa8X\xac;\xdf7\xfd\xaa\x0e\x08/\xbaUD\x1e\xd6\x1a<\xa0\xb8Y\xc7\xfa\xe7li\xd5`(\x11\xb0\xa5\xa2\xbc\x85.\x14=\x9f\xbd\x1f\x95\xda,K\x1a\xadM\xd7]\xda\xeb\xfe\xa2(\x87g\x8f\xfdC\x90]V\x00\x1b\xa0\xe8w\xe1\xea%k\x83\xfa\x87\x84zGC\x9cr/\x978\x0d\xd0z\x15\xd9\x0c\x85%\xc8\x1e\x0c\xde\x97;\xca\xd3C\xaezKn1\x9d\x00F\xf6\xe4\xa9\x06\x19\x02\xfdA\xf0\xfd\x96z5w\xc2\x0e\x86\x0c\xd2\x1f\xb9\x04\x97\xf8\xa6n\x07\xdfP\x10\xbf$\x91#b/Z\xaa\x9d4\x0c\xf2x\xccr\xbb\x04\xa6\x96\xedq\xdd\xd92Q\xc7\xdeV \xa9j\x19\xa98]],b\xb0\x8c\x1a=\x14\xa9,\x81\x82\xb6\xe2\x92\xd4/\xaf\xffy\xa0V\x01F5\xf0\xf1\x10\xce,\x87`9\x02\xb7\xad\x8acpr]Z\x19Pjj\x1c\xc1\xdb\xc4Q>\x82(\xc7\xa8~\x0c\x1c\x93\x91iQ\x05|\xb7\xf6\x05\x19\x83\xe1\xac\xf6 \x1a(\xd4\xbf \x81\xa2\xbc\xf1p8\x80\x88ne\xc8\x06j*Ax\x03&?\x18\x01\x07;\xb3)gZ\x1c\xaa\xf54\xc5\xfe\xe0\xc8\xa8\x15&e\xf7\xcee\xf3xY\\\n\x8d}\xd4c\x9d\xd5}UUD+\xb4\x8d;J\xb42\xa9\xee\x90\x83\xee%b\xf6\x82\x0e,2c*\x96j\x12\n\"\xcd%y\x96\x9b\xe3L\x1ds\x18\x03^\\\x81\x8f\x9a)\xee\xdb\x9aVW\xbe\x03\xe2j-\xb9x~\x8b\xdd\x1fl\x02rHy\x15\xd2\x97W\xe4Y\xfb\xc6J\x81:\x1c\x1er\x06k\xf5\x9cZ\x86\xe3\xa3<\xf6{C\x8c*\x1d\x8b\nUf\xb5\xaf6\xe6TN\x05\xd4\x96\"\x1e\x91g\xe0\xe8\xc5va\x04[\xd2ZyP\xc2\xb8\xaf'*\x10\xd3\x19\x99\x8b\x91\x86\xd7\xa1<\xd1\xe1\xab\x18\xca\x8c\xa5\xcf\xef\x95\xf0\x96\x8bI\xef\x7f\x194\xecN\xdf\\\xc7F\xe8|C/^\xb1\x84\x11\xb3\xc8Z\xcf\xbe\x81\xec\xccd\xaf\xa3\xbaG\x86\xe4)yI6\x8dh\xadrM\xcf_\xa0\xd7\x96\x18u\x1def\xe0\xa1\x82\xe3s\xcc\x13\xb7\xd6\x04\x92\xf7\x08%\xe7\xbeg5'\xc0\xda\xfa\x9e\xda\x03\x0d\xc8\x98\xa4\x03rI\x9e\xb6V\xa45\x159\xc5\x01C\xf9\x89\xe0~\xd8/\xeej\xff\xac7\xb5\xad\x95\xf1\x82\x8d]\x03a\x16\x17\xe4\xa4?\x1cf\xa8\xd1A\xc1 :\x90\x16g$+\xcdH\xb6\x04\x9b\xbe\xd2$\xa84P\x7f\xd8<5]P\x03\xb5\xa8\x8d:0\xb1\xb8\xa2[\xca\\\x84\x00\x04\xf8\xe6\xd1\x06\xe5R9\x0b\x8aj0\xb5\x10\xb0\xbe\x81\n\x01\x9a\x9e\xb9\xe9\x0b\x90\x9en\xd4\xc5\x87vs<\xce\xc9MF\x86\x8ae_\x03\xeb\x81\x93\xbfn\xc4\x07\x94\xf1\x0e\xea\x93PN\xc3tFhG\xc2\x84\x8a\x85\x0c\x16\xa7\x93\x1c\xfd{\xa29\xf5\xb0\xbb\xc7Q\x9b\xf0\x10\xb5\xd9\x93\x97$l]\x89/\xce\xb5\xb1[\x05\xdb\xf7\xc3\xe1\xa0\xb5\xa0\x1e\\\x85\xeey\xac\xdf\x90\xde\xfd\x81\xa5\xc2\x8f\xb6\x1f\xb2\xfc\xf5f\xa3\x0e\x13\xac\xe4\xbd\x92\xc84\x11\xc8Y\x17\xab\xeaA \xeaaa,\x01\xc9\xf3\x91\xbd\"{\x14\xce X\xed\x9e\\\x92\x10\xc2\x11\x15\xd6\xe2~@fd\x0f\xd4,D\x81m^\x98\x0d\xa8/\x17[T\x1d\xe3b\x0b#\xcd\x0bP-TS|\x17\x8e6\x8cO)\x94`b\xb3\xa39\xe9\xf7K\xe8\x10\x97\xd0!^\x02`\xfd\x12\n\xc4\xcb\xc1\x00\x03\xa09IZ\xfb\\7\x8b=~\xabXc\x03+\x9fLGpW\xe7\x0c\xaf\xa6l\xec&-!\x97d}A\x92C\xb1\x0b6\xf3d\xa9/eE\xb0\xfa\xdbt6\x04\xaeA4SC\xf3sSE\xf3k\xf6\xd0\xb5k\xedtf\\\xfd\xdb\xc9Q{\x14\x93\x98\xcf\xd1\xa88c\xa0A{\xfa\xf4\xd3:\x8dF\xc1\xb3\x03\xde;\xdb-\xa2\xc8\xf1x}\x18\xe8\x12f\xc7K\xc7\x8a\x0dH\xf9\xc0aT>~\xb8\xaa\x9c{v\xe4)y\x99\xa6\xa0\xc1\x9a\x19@\x84g1\".wue^P \xed\xfb~0\xca\x97\xa8\xd5K#\x11\x8f\xbb3\xbf\x02\xa0M\xf1om\x9c\xdb&\xa6T\x190\xc5\x1b\xe6\xd3\xa5=\x1d\xd2K\x0b\x17\x13\xcd\x97\x16F\xac\xd6s\x93\x90!\x01Z\x94\xcd\x93\"}\xb2\xe9t\x9e,\xdd\x8a\x83\x12\xf9L\xff.xd\x99\x17:\x0cJ\x0eq\xbf~F\x86%9Gm\xd8\xd3V\xce\xf4\xec\xbcE\xee\xce\x80N>zD\x9e=G\xc9\x1b\xa4\xf0\xe7\x07\xa4pX jEN/HF.I\xea<|\xac\x88\xd8\xb5Vm{O\x11B\xda\xd8\x1e\x01\xbfrVT\xf5\xab(\xef\x9a\xfe\x93\xbe\x8f\x1b\x80G\x8fH\xff\xe4\x84k\xbb\x10-\x13j\xa1\xac\xe3b\xd8\xf1\xe6\x85\xfaaR\xdb\xa0z:}\x14N\xda\xe4\xcai\x90\x0b \xf5\xf9\x90s\xa9\xf4y\x9b\x90\x86\\9.\xa3\xe6\x80\\\x93\xb1\x12\xa8\x0dzE\xae\x89\xe6\x15\xf4\x02)\xe0\xd9S\xfd\xack\xe0\xe4\xb2\x84\x07\xf5Zlc\xbc0Z\xf5\xce\xc7\xad\x9d?N\x0e\x8d\x0f\xadD\xf0\x83\xa8F&_&c\xd7\x1e\xb3e\\.\xc9\xb3\xcf\x14ZF\xe4%y\xfeic5\xa8em\\b\xbc\x1d\x08b\x15=m\xa0\xa8\x1d\xdegj\x0e\"ry\xa5\x80i\x13\x9e\x9e\xa1\xee3R\xb0?{a\xa2\xa6\xb6\x88\x16\x16\xb4\xda\xd7\xa6\xe3\xf7B\xa9\x07\xa2\x87yj\xa7\xd7\xb534p\x87\xd9\xb2\x9b\x19)\x01c;\"\xf7#\xb2\x1a\x91\xb7#r;\"_\x8d\xc8\xdd\x88\xfc0\"_\x8e\xc8\xcd\x88|\xe1\x10\xe1\x00\x15\x94\x08\xa9q\xd4(\x14\xb6\x8e\xbc\x0d\x1a;=\x89\xaa\x12^\xaa\xa4\x95lB\x03\xd3\x96Q\xfe\xd0\x8dO\xe8B\xaa\xb5\xbe\xcf\xed\xb7\xef\x8aV\xb8gG\x12l\xace\xb6\xe4\x1a\xef\x017\xafV\xd8T\xa2\xffj\xad\xd4\xd07\xca\xd5<\x911I\xf0~fg\xfa\x1e\xf35\xe3l\xfd6\xf0S\xd1$\x97A\x9e\x19\xd972\x82\xdb\x87KlJz\xed\x08\xea*\x0b\x02&Z!\xfdpx\xac\xc9\xd2[\xbd\x07\xbak\xdb\xf7\x81\x81\xce\xe0\x82\x9c\xf4O\xfa`\xb6\x836\x98\xb0\x81\xea\xdfW\xd5AkD[K[\xe9Rkf\xee\xc9\x98\xac\x958\xf3\x0cX\xb6*\xadPhG.\xc9\xb4\x94\xa2\xa4\xa8uQ~\xa7\n?v\x9dg\x1b\xc6\xce\x17,<0\x80_}\xc8\x00\x06\xd5\xdd<\xea\xc5\xc0H\xc1\xec\xf5\x0b\x08\xbdq\xec6\x8a;\xf1\xfb\xeaN\xbc,\xdd\x82e\x965\x808\xab\xefU\xb4}`\xd3\xc6\x00\xf7\xa6y%j\xaf\xfe\x16f\x11\x88\x99\x1a\xf5\xb7Vn'c\"\xc8K\x9c\x14\xa7=X\x15\xba\xa0\xda\x9b\xb4\x08\xaeW\x83v\xf3\x80\xa9|\xf0&\x050\xbd\xb0'\xf9\n\xb7(tD\xee+\xd2:\xd1\xa6xj\\\x8a\xa6g\xf8~\xbc]\xde\x8d^\\?\xa0\x82\xe1KrE\xee\xec.\xe8\x07rI\xbe\xbc ?4)\x18\x14\xe9\xbd\x9b\xffP\xb4\xe3kW.\xdc\x1cP,4+\x15\xea\n\x05\xd5\xf8M#\xc7W_\xb7m\xf2C\xce\x08)HAg\x83&Eo\xeev#\xe7{\xe52\xee\xe6C\xb7\xa4\xb0\xd6\xf7\xf6\xeb\xad5\x1cXuAB\xc5\xaf\xca\x1c\x04q\x91T\xa8\xf5\x831\xf4\xd6bdn\xc7\xa8\xa4\x8cG\x8f\xda\xcd\x0cHY\xf2G\x1c\x07>?$\xe7\xf5q\x03\x9c\x8c\xf4\xde\xe8\xdc\x08\xcc%\xe6L\xc6\xe4\xbc\x14\xb7\xd3f\x98GKcAevi\xb9\x851\xd2Y\xad\x08\xca\xf3\x0bm\xc6\xd9\xcf\x13U\xcb\xcb\n!+\x14(\xa4G\xe8\xd8\xbc1k\x97\x82\xa1\x7fO\x9b\x8bv$\x08\x99\xb6g\x1b\x92sT+\xf43\xb3\x0b\xf4\x14\x17x\xfe\x99{\x08\x87\xc3lPVDd\xc3\xa1\xc2m\x16\xed'\xe6VCjn\xae\x94\xd2 \\c-\xeb\x84\xb3\x8d3?~\xd0\x85R+\x9a\xe3\xf1f\x80\x0b;S\xcb\xb8\xa1\xcey\x0f\xae\xf0\xa6Km\x1a\xd9\x8d\x04\xda\x9b\x19o9\xdb0\xce\"\xafY\xbdIW\x8a\xda9\xe2\xe1\x1f\x14\xa9\xe2*?\xae\x1d\xf9\xd1\x03RTI\x10\xcd\x06d\x8c\x82S\xf1\x08%+\x0b/\xc3+\xf2\xac.M\x15.\xa2\x14\x1b(1~C\xd9\xec\xd7\xe1U\xedx\xc7\xb6;.}k\xd1\xe0\xe6\x82Z \"Z\x86z\xac\xa1.\xf6\xdd\xaf\xf64\xfe\x90\xd9}03SR\xca\x07\xe9\xbcL\xea\x07Q\xe7\xe3\xe8\xf2A\xad,\x9c\xe8\xb7ka\x9f>o\xd3\xc2\xe2\xb5\xb5\x03\xd5\xe4ZW\xb3\x16\x1cd\xe6\x82<}\x9e\xf3`P\xce\x82\xca\x94\\^\x91\x17\x17\x03\xe2\x83\xf1Wci\x17\xd5;\xe9\xfb\xe4%y\x81\x10\xea\xfa\xb4.&.S\xb5\xd4\xae1kg\xd8OG\xe4\xa9\":\xf9\xcd\x90\xfa\xf7\xe7\xea\xbb\xda\xfae$7\xcc\xac\x01H\xf3\xcb&`=?(\x08DG\xeas\xf1:W\x13\x8d\xda}\x8bX\xec\xb8\xc9\xfd\x11\x94\xbev\x0c;\x02\xebG\xaa\x9dv+\xa8\x9c\xc6CH\x1fm\xc2r\x084\x18\xb3\x07u\xd1\xdb\xf9\xc1\x1a\x1ci\xcd\x97\xb5\x0ev\xec\x97\x99\x84&R\xd26\x0b\xbf\xacZ\xdd\xa4>\xc4\x12pd\xee\xe1\x88F\x8bV{\xa7K\xcb\x10\xcd{GG\x86\x8aa\x8e=\xe0\xe8\xf7K\xec\x91\x96\x88\x1a\xd5:|\xbfH\xc8\xe8R\xcb$\xfdg\xcf\xf3\x8b\xb8\xb5U\x17#mz\x81:_\x8eE\xe2\xf2B\xee\xc7x\x17\xc6BQ`\xb31l\xd7\xfcb\xb9F\xb5^\xe1>\xdc/\xb0\x9cM\x17\xb4\xbe\xe9\xfca\xa8\x7f\x00\xf7:\x82|\xdc\xa2\x06V\x9d\x1f\xbd|\xdc\xe5\xad\xa8\xea\xbf\xf2\x12\xef03\x87W\xfc\xe0# \x16\x85;\xdfg\xe7\xd5\xbb\xdd\n\x81O\xdf\\\xf6\xe7:x\x9fvu=_\xa4\x8b\xd3\x97U\xd7n>f^\x9c:\xb2\xbf\\\x9ev#4#B]\xb4&?\xa0\xa8H\xc5\xb5\xa1\xab\xd8o\xd63$e1\xba.\xbbxJvMF\xe4$\xdf\xdc\xedD\x18\xb4\xca;\x89\xa2M\x8apx\xb0[zyu\xc0<\xf4\xc5\x99{\xeb\xe4\xb5\xef<\x9f\xe2\xa6\xae\x9f\xb9H\x97\xa7w\xae\x8a|a\xbe\xaci_Y8{._rz\xdfv\x1c\xf3\xecS\x00\x1a\xa4\x96\x93\x96\x1b)\xe6g.\xa5<='\xb2z\xf5\xc0\xfc4\x18`t\xf9\xf9\xa7\xaaf\xa1d\xb7\xe9\xf9y-\xfb\xfb.\xdb\xdeg\x9f6\xf7\x9c\xd8c\xa5\xeaV\x11-a\xd1\x95\x9e?(\xb6R\x87\"W\xd2\xb5\xd7\x13\x0f\x0eC{\x82h\xc0\xe7\xe9|Zq\xd6\xb7o\x0b\xd5m\xfcm\xc6\xa1U\xb5\xb3e\x1c\x9fx\xa8\xfe\xee\xa6\xf0\xef9\xfc\xfb\x14\xfe}\x06\xff>\x87\x7f_\xc0\xbf\x8c\xae\xb1\xd4\xce\xc2\x03\x1e2z\xfe\x86\xd3P\xbb\xc1P\xff\x86\x14>\xc6\xe0\xd9\x0f\x9e\x00\xd28\x13I\x06\xef\xf09A`\x12\x1eo9K\xa1\xf3\xe8b\x12\x9e\x98g\xe0N\xc5=\x8e\xa6\xf1\x11\xd1\x13f\xd8\x04tY\xb0;A9\xa3\xf0\xbc\xc1\x0b\xaf=\x01~'\x04\xc7gF!g\x06p\xec\xfd5\x8b{\xcb\xc9&\xe6_Qo\xd7o\xb9\x808g\xcb\xf2\x0dP\xad\x95\xfa\x90\x1b76\xb9\x8b\xf9\x8aCr\xcc\x95)\xb5u\xc0\xdb\xb6\xecv\xf9\x16N\x8e\xc1BdL\"\x97\xb7\x88v\xf6\xdc\xf5\xcau\xd1\x8a\xa0\xce\xc8\x04\xb2\xc9\xc2];\x17\xbb\x0bJ[]\xe4\xd8Am\xd7\xd0RA\xbf\xa4\xfa\x08J\x12x\xb0,\x9f\xcc\x06\xcd\x14\xd7\x87\x0b\x1d\xa80\xd6\xbb\n\x87J#\xb7\xfb\x81\x1b\xbfZ;\xea\xb7\xd6J\xady\x030\xef\x1199}3\x1f\xcf$Y\x0e?9EW\x9b\xb4]$\x80\x1b\x08\x14C\xa9\xf6{\xb2\xa7\xf6\x1f\x10\x03\xb5M\xad\x92\xe8\xeb\xe7)Z$\xa6\xe4\x92\xe472[no\x9f\xc0\xb9\x947O\x97\xe6\xdaH\x1b\x9fE\xff\x05\xa0\xb8M\xe1\xd1+\xb9W2\xd7\xb2[\x05\x83\x83\xde\x98\x89\x01\xed\xf4\xcd\xecz<\x9c]\x9bq[\xb7\xb3\xdf\xe7\x9f\x01H\xeb\xd2\x81Y \xbek\x92 {se=S\xdf{\x18b\x0b\xce\xbe\xb8\xbf\xdd\x89\xde\x80\xcc\x9c5\x9f\x15\xaa\xeb\x05l\x839MB\xaf\xed\x06\xb7\xea\xdc\x18w\x0c\x05tq\xdc\xdb\x81\xb9o\xc1\x14D\x14\xeb\x9d\xed\xcdB\xca\x85\xfc\x04\xfc\xb3\xf5\x06\x05\x04\x1a\x91\xc4\x8c\xc3Ia\xd2Z\xeb\x8e\xdb-_:\x8a\x0b@\xe8\x0f\x98)\xec>\xc4L\xa1+\x1c\x8ao\x1c\x80C\xc1\x00\x8b\xf6\x97\x84\x83\xff\x92@4/\xfe\xae\xe0\xed\x9a\xc0\xa3\x81\xbf\x8df$\x99\xa7.\xc0>\x02\xec\x1d!<\xacw(\xd0\xb2\x8f\x00\xe9/\xa3W\x10\xbb\x87\x1e@|\xc0R\xe4\x0fm\xf3\x88n\xa9U\xf6\x8b\xb7\xa2d\xc6\x03\xcbh\x0f4\x05\x8f\x0b\x1fDW\x8c\xa0r\x8e\xdb+}\xfb\xa7Efy\xf4\xc88)\xcfiz\xe0\xa6\xe9p\x83\xbd\xd1\xaa\xa6;Q?4^\xa4\x0b\xdd!\x87F\x83|0q!\x058\x1a\x8909DdHW@7F\xa0\xc9\xc3\xf3+Q\x0f\xc4\x15\x95\\e\xe2p\xabrD\x9a\xf2\xc0{Y\x8a\xa8$\x91Y1\xc5j7\x8f\x19\x97F\xb2F\x8a\xa4\xad!\x8a\xca!\x8aE\xda\xa8\x16\xe9\xb8\xf8Hi\x12\x9b\xd689\xb4\xce\x89\x83\x8a\x11\xd8\xa2to\xbe\x99\x90\x91n\xcd\x97W{\xe9\xcdn\xad\x8e E\xbf8\xc1\x03!\xea\xc1\xad\xec\xd0\xfcj\x8f\x7f\x82QI\xed\xf3a\xea\x13\x9b\xdce\x03\\\xb0\xe2\xea|r\xedw\xd8\x06\xc7j\xd3\xe7\x1b\x13z{M\xdf}\x18d\xees\xe8\xbd\x1c7\xc5b\x14\xc7#\xd7\xe9\x8f\xce\x12\x95\xda\x89*\xe3F~\x91}\xb6\xb5\xd6o\x15\xd0\xfb,\xf7\x08\x06\x96\x85\x8f\x1e\xd9\x89x\xe9t\x9d\xb7)\xee\xc3\x8d\xaep\x03\x05\x87\xc3\xcd\xc1m\xbc\x9d\xb3\xcdQ{w\xdf0\xc6\x8d1\x81lm\x03\xd0\xf9h\x9b,m\xa7\\4\xfb\xeb\xbc\xd2\xd6\xc1\x01\xb9\"\xf8\x90\xbdJ\x866\xe9J<\xa8\xf8\xafc\xb3\xb6K2\xf0\xe9^\xdb\x0dn\xb5\xd1\xed\xa1\x1e\x91B\xaf\x1a-\xedIA$\xceF$\xfb\x10\xb6{\x04@\xdd\xb8]A\x03\xac`3\xd8Z\xf4\x8d2m>J$\x1d\x8f\x13I\xb7!\xf8\x98\xfcs\xddlKK\x0e\x11t\x82\xfc\xd3\x89'$_\x9d\x07A!\x05pZe2\x92\x8f\x8f\"k\xf3\x8d\x1b\xf9m\xd6C\xa8B\xf4x\xe1\xb5\x1b}\x9d`\x0d/\x86\x86\x8d\xf4\x89^a\xa6\xf7\xc5#>\xba\x1c\x81\xd2\xa0j)W4\xd9gE\x1f\x89E\xfb\x03\xd8\x12\x14\x13\x14M/\xdd\xc5\x18\x91\xf6\xab\x08\xb9\xb7b\xa7\x91\x1bu\xdfF\xd8\x82\x81\xd1\xbd\xb9\x8d\xb0\x05\xb0\xf4\xf15=x\x1b\xa1\x08\xee\xbe\x08`X\x83oW\x1d\x8adT\x1e\x8du7d%%\x0ciCX\xd2\x05i\x89\xd9F\xa0\x18\xb2\xb1\xfdW\x02\xfb\xcb\xfc\x02^\xd3\xb1\xe2\x01\xb6s\xb0\xac\x83\xf9\xb4\\\xf8\x03\x1a]_x\xb5\x14\xe4\xa5/\xdb\xee\x0f\xfa\xda-\xf0\xa6\xc8j\xb3f\xb7T\xa5\x8e\xd6<\xe3\xb4\x95\x82\x8d'\xd0\xc9\xc1a\x90J\x17@\x1e=\"t8\xcc/\x88t\x01\xadn\xec\xd3\x06\x9a\xef\xbe\xfdP\xca\xfc!\x92\xf8:x\xb8\x80\x1ch\x94,H\xc6\x9b\x11\xb9\xff\xc7\xfd\x04\xe7\xfd\x04\xef\xa3\x1d\xba6\x8a\xcb-\xdb\x87\xe2\xfd\x04\xb7\x91\x9a\x0f\x1e\xb6.\x8d,\xaf\x8f\xc5\x07\x95s\xf1\xd4\x11=\xceZ\xf37\xde\x14\xcc}\xce\x0fP\x13\x12\xd5\xaaE\x9dH#\x19*\xe8\x90R\x971\\\xdb\x0d(\xeb\\O\xc9\x7f>^\xba\x82%o\xd51>\xb9$\xf4\x82\xf8m^]\x88\xa1Is\x1f._\xa5]._\x99_\xdc\xc1\xbb\x0b9\xe8\xe1\x858i\xa9\xf9\xe9\xcdM\xd7\xfb\\\x9aN\xe0j*\xda\x0c\xa4\xcd\xd2b\xbe\xd0\xd3\x11\xe1f\xf1\x15\x97\xca\x01rSYzu\xa2\x03K\xc9\x1d\xf5\xa8\x8b\x19DY\x8c\xaaQ\xac\x8eP\x1eV\x96\xf3CMw\xb4\xc1\xfb\x85\xec\xef\xf2an\"\xeem\xe3\xdc6\x86\x1f\x8d\x88\x1d\x8e\xb0r\xfe\xf4\xb9#\xc0J\xd4?\xff\xb4\x92L\x1b\xe2\xae\x08vgbc<\x9d\xba#wD\xec\x16\xa7\x1as\x9d\xbbs\xb1\xd4\xa3\x89\xcd\xf4\xd4\x9diE\xbd\x1b\xe1{7&\x8a\xcb\xd3\x86`!k\x16\x98\x1c\xcf\xdd9\xfc\xc8\xd6\xf1\xc2\x9d#\xa4\xdc\xc4\x1ay\xda\x10Q\x86\x85\xc9\x8e\xa6\xbe\xad\xe93w\xb64[\x99\x1c\x9f7\xe5Ht\x8egg\xee\x1c\x81\x1f\xd9^?k\x18h{\x95\xc4\xac-\xcc\xdd0\xe0\xc5\x8b'&k\xc3\xb0S\x1d\x1e\xc8dk \xd1\"\xa8 \xe4\xf2\xaca\\Y$|qo2}\xd6%0J\xf6Q\x02\xa3\xe4^\x90\x9c\x81Q\xa8 \x8cB10JE\x11\x0c\xd9\xf7\x18\x81\x99}\xebG7\x8a@\x17\x16i\x1d\xea\xb4n\xe9\xb3\xb7\x81t\x91\xd8\xb7E\xcc\xd5\xbc\xc3\x1c\xc6\xabb\xbe9z\xf9J\x8d\xa1\xafXI\xf1\xf8f\xd63\xf1hU\x89\xb9\x0d\xa6\xdb\x1b\x15\xe3\xed\xf6\xc0H\x0bM\x9c\xd6T\xd0\xde\xd2\xd6 \xcc\x11\xce\xac7\x98\x9f-]\xe6:Y\xc5\xe7\xf5kE*[=\x86C\x9fG\xc6KLa\xd4KQ]j\x88\x02\x8ez\x8d\x8e\xac\xf6\x15u\xafI\x9c:4y([y\xd4\xdb\xb1\x7ff\xa2\xef\xc3\xe5\x97\xb3\x01\xe6W\xe8R\xd1o\xb9MP1l\x03b\x8f \x97$\xbe \xa2Mx\xe2s\x01\"\xcbI\xc1g\x08\x04\xe2\xd2\xa0\xfc\xa0@\x19!\x10\xce3\x86$N\xf1\xdeb={)w>\x17\xefG\xa5\xe90\x1b\xfd\x8e\xfe\xdb\x0fNIy\n\xf2!G\xf7\xf40\x98\x97\xc4o\xd6\nF8x\x91q1s\x02\xc3\xc9\xe7\x11\x8e\xd3t0\xc0}\x84{W\xd6\x18\xe8\x187z\xaa\xf5\x97`\xef\xd4z\xbb\x9dM\x12\x16\xad\xfdh\x8b7\x04S\xee\xcd\xf5H/\x1b\x06\x95\xe0d\xe8R\xa0\xf7P\xe4\xe1;L\xe8\x0f\x9aF\xff\xd8\x802\xcdaO\x1ct\xc7\xeap\xfcF\xa7\xdc\xd9\xaf\xc8\xb1bB\x9dd\xf1:\xc2\xa4\xb7\xbe\xf0v\xc4mw\xed\xd1\x94\x91\xe9\xd9\xcc\xfd\xe1\xf3\xf3\xa6\x0f/\x1a>m\x1a\xad\xa7\x9f65\xdf4(\xd3\xf3\xc6\x91o\x82\xebE\xd38>w\x8c\n)\x98\xd29vbk\xb6\xa1Y \xda\xcb5\xf9S\xeap\x94\xd5H\xec\"\xcb.\x80\x1c\x192\x06T\x89\xd7]7G\x83\xc1\xc5@\xd1&'G\x8e\xf4e\nE\x82\xd4\xb6L\xe8\xbb\xe2UJ\xa3\xad\xf4!\xa3Z\x87\x83Q\xce\x82\xca\xf6\xe2\x1f \xe2w\x1e\x8b\xaa2\xc8\xc9;\xa7\x0d\x17E\xe2v[?=\xbc\xd8\xff\x82\xf1\x81\xd1#\xe1h\x8f\xc8\x89p;\x9a\x85\xd3\xcb\xb3\xd2\xf5TSYyV\x9c\x88ck\x98\x1e\xacA\xbb(9\xa0\xc6\xb0\xf4\x19U^>\x9eS\x12\x7f<>\xac\xb9\xb0~\xd4\x1c\xcd\xfb\x9d\xd4\x189\"\x15\xab\xc9\xedE\xce\x14+\x1e\x92iC\xe8\xd9\xe2\xefC4\x1d\xec\x90\xfe\x9d\xe4[\xe1\x1d\xe5kh\xabE O\xdaw\xbd\xc5\xdf{\xf70\xd7Xzi|\n1SG\x87\x81\xd7\x80\xa7\xf1F\x1c\x02\xbc\x03\xd0N\xa3\x11\x0d\xeb\xc1\x13\xb7C0\x1ch\xdfiv\x17\x0f\x87\xe8\x19\x9a\x93\x96;\xdf\xb1\xa2rq\xe3\xfd\x1b$U\xf1\xc7RF\xd8\xa5\xc5\xb59\xb8\x0e\x9c\xa2\xc0<\x7f\xfe\x02\xfdP\x13\xbd\x19;+\xf4\xaa\xb7X\x9c,z\xbf\xfe\xe4\x9f\x1e=\xee\x0f\x9e\x0cG\x93\xd3\xd9\xc5\xe5\xd5\xcb\xeb\xdf\xcc\x97o\xde\xfe\xf9g\xf9\xfe?\x8f{f\xe3\xd2\x1bt\xbboQ6\xb4Z\x92\xabb$\xa9\xca\xe5\x8b.d\xd5\xd2\xd4\x96\xad\x8a\x92\x9bk\xa4\xf3\xf3\x06\xbf\x8b\x07(\xeep\x18\xe3\xc5\xdf:j\xf9\x8d\x8e1\xf1\xb6\xf0\xf9\xf3\x17\n)\xcc]\xb0(\xbf\x88\xd0\xc4\xc8\x8c\x8fg\x85\x10\xc3+r>r2w\xcd?\xb4\xc3J7\xca\xebM\x15\xf8\xf4\xea\xb6B\xbb\x90\x96N+\x14\xa2\xf2 \xb6\xf9\xc7/\n\xf3k]\x1c\xb6\xb1_5\xbf5\x0fuo\xb1\xe8\x99aV\x1b\xc1\x8f\xb3\xea\x8eE\xe4\xd29F\xb3\xa0\xa0c\x89\x1c\xe3*\xc8\xee \xb3\x11\x01\x0f=\xbc\xb4\xa1\xcc\x0c\xb5\xfa\xfcE\x93+\xa1\x8b\x81*\xe8\"w\xa4,rE\xe8\x12\xc3\xd7\xc1_\xb3\x0b\xb0\x84\xac\xdc\xa7)D \x81\x93\xbf\xe6\x8d,\x85sx\xb8\xceH\x0fAIU=\xd4\x85>>\\\xc0\x19+\xa8\xae\xf2\x00\xb6\xe5\xc5\xd7\x85_4\x84\xed!\xa4\xd9i\x85_\x08\x93?'\x8bh9\x04\x93]\xd2k7Q1\x91|\x9a,S\x0e1\xa6\\\xde\xa5\xb5u\xd2uU\xc4E\xca\x93G\xfd\xfd;Z\x1cJ\xb2\xadu>m\x91\xb1\xcf\x1b\xd6N\xdaN\xf2\xdb\xed\xd7R\xf4^\x06w\x91[\xb257\xfe\xcb9\"\xf3u \xce\x94\xbc$g\x18\\\xa0\xda6\xd8.\xcf\xc0)\x96\xd3\xa7\xb9\x82\xee|0\x02\x03\xca\xab\x83\xd7\xdcL\xaef\x9f\xe7~\xee\xed\x8c*\x9c\xd3|\xab\xb9\x00\xd0\x01\xaeC`\x9ec\xdc0\xb8\x99n\xda\xaa\x81\xcc\x15!\xa8\x05\x0d\xf3\xd1\xa74T\x93\xc7O\xb2\x08\xce\xc9\x98\xa4\xa3FF\xacWt:\"\x1c\x0f\x89\x1c@\x9a%\x97\xe2A~\x8c\x8e\xe4u\x0b\x10>.k\xf4v\xdd\xd8\x19TC\xb6\xf6\xd7\xb6\x80\xceH\x9c\xf7\x161\x0f\xda\x0dY[Xj\x96\n\\\xd2T\xc3\xea@\x11\x9b\x01\xd1\xc4\x82b\xef?\x9a\x8d\x17\xbc\xd8P\xa8\xd7$\x1e\x8f\xc9\xcc:\xc1/|\x84\xe7\x18\x1d6]\x82\xa7\xe7&\xa1%\xfa\xc0\x18J\x04wSxjou\xe6}\xd6\xc1\xd4;\"\xd7zF1\x06\xaa\xd6%T\xe6\xd8\xa2K\xbb\x15\nk6 m3\x8c{\xef\xf6\x98\xd6\xb6\xcb*\xb4\xf8@\xc3\x97\x02\xef\xb0\xdd\xd7\xd6qv02P\xa2\x90Y\x01\xe7A\xad\xfco\x963h\xdf\xfd\xff*\x8c\xa1\xb1\xed\x7f\x13|\xe1\xd9\xd3\x0elAg\xfa[p\x85g\x0d\xee0\xdb\x98\xc2\xc9\x95\xae\xe7\xef\x8e-4\xf5&\xe7\n\xad9\x8e`\n\x1a\x0b\x1f\xce\x13t\x05\xff` \x9dX\x82\x1f\xa5\x7fc\x96\xa0Z\xfc\x07K\xa8\xfcZX\xc2\x8b\x06w\xc3\x7f\x0b\x96\xd0\xd8\xf6\xbf \x96\xa0\xdd\x9e\xb5\xb3\x04\x9d\xe9o\xc1\x12tS\xffNXBSor\x96\xd0\x9a\xe3\x08\x96\xf0b\xfa\x81,AW\xf0\x0f\x96\xd0\x89%\x84\x94\xdf\xfc\x8dy\x024\xf9o\x8c)\xd8\xe46\xd3 \xb3f\x89\x0d\x00\xc50\x00\x14\xa8\xfaT\xea\x8b\xe76\xf5\xf33\x9b\x8a\x9e\xe9X\xd53\xdd\xd1Q\xb9\n\xfeR\xeb\x03\x9b\xa1-}-=mH\x0fZY\x98\xe7Z\xc6\xc2u4\x85\x97\x0c\x1a\xc8\xbb\xc8\xc9;\xeaZ\x03\x18\x89j6\x8a\xa1\x95=\x97\xaaU\x0f:\xdc\x16\x81\xd2`5\x0f\xf7\x9a\xfa\xa8\x10\x1e\xeb\xab\xa7\xcf\xc85\x8c\x02\xf4x\xaa\xf0\xe3i!\x9a\x1f\xb6\xee\x80\x91\x16U\x10H%bt;o\xda\xd1\xd5D\x85\x1c\x91u\xe1\x0c9>G\xa7\xb0\x1e\xc0\xc7\xfb\xda[\xad\xad\x80\xf7\xe3\xdc\x15\xf3\xc9t\xa0\xd0\xbc\xbe|<\x1a\xc1J\x9d\x91\xcc1!4\xc25\xe5t\x07\xbff\x81\x1f\xa63\xe27\x10\x97\x07\xd8Z\xe4RO\xf5\xdap+\xe2l\x9a\x0f\xce\x12\x17Nm\x06uF\xa9C*&\xb0\x01\xc0\xb1O>@\\\xfb\xbb\xdcW>z\x84\xfd\xd3s\xa4\xbax]7\xb7\xb0\x01\x05\x90\xad\xa3C\xea\xd3\xfe\x1b9\x7f\xb3X,\x07\xfd\xc5b\xb1\x18\x00\x83>9\xcc\xf9U\xb6(?K\xd5\xb1\xf8\x80\xcc\x18s\x08\xe3\xdc\xd4\xde\x07}p\xfc\xe1\xc0O\x9du\xe0\x87+2_\x0e\xcc\xee\xac\xfe\xbd\xe0V\xd4E\x0e\xe2\xc3\xe8Xv\x0cR\xa7\xcb\xeb\x87\x84\x8d\xac\xac\x1b\xdc=\xd6\x1c\xa1\xba\x17S\xbd\x93s\x7f\xa9\x06\xaf\xde\x03\xa8p\x96W\x9d&\xb8\x9d\xa9H\xfe\x95%ZXCqm\x07\x90\xd9\x08x\x1fc1\x1d\xbbhJa/\x9b\x17M\xcbU\x1d\xc5\xba\x9e\x92\x97\x07\x8c\\N\x1c\xf8ZM\x83 \xd6\xad\xb54EGo\xb9\x16\xd4\xa60\xc8~9K#k\xa7\x93\xe5v:\xf4\x82\xf0\xe3\xa3\xa3\xf3\xc3\x81\xd7\xa6\x0d\x02}\x87\xa2M\x81\xd5y\xf7\xc0\xeahG\x04\xfd\xd4\xe4\x8e\xab\xe1B\xd7\x8a}\xae\x96cT\x11k2\xe3\x05\x10\x05#-\x12\xe1\x1c5\xc65\x8f\x96\xcd\xe4\xaf\x1bMk\xaf\xfc\x12D9\xad\xaah%|\x0e\x82\x11\xbb \x86\x8e\x98\x1e\xb9\xb4\x08Y$f\xe4\xacN8\xda`\x84\xa8\xcd3\xe2\x82\xb1\x94\xb1\x99~\xcf\xe3\xe5\x04\xdan\xec\x08~\xd6\xd2\xc7\x87R\xf2\xd8\xc1\x80\xb3\xd57\x0f\xa0\xf1\x05\"\xcaK\x04\x94~\xc4\xc0\xe4\x05Y\xe4\xecY\xd5u\x99\xd1\x99|\xe6\xd0\x99\x14\xe2\x8a\x9e\x8d?\x9f\x9c\x80\xf2\xf4\xc9pqzum\x15\xa6\xc3\xdf\xe49\x96\xfd\xebY\xfe6^\xfe|6z1}_\xf8>\xb8\xee_\xcf\x16\x93\xa3J\x0c\x9e\x0c^\x9e\xd6\xf56\x05\xd8&\x8b\xf1\xf2\xe7\xe9\xe8\xfc\xf9\xfb\xc1\xac?\x7fs\xf9rqwv6^\xdc\x9d\x9f-U\xd9\x87\xf3\x91\x92n\xa7U\xc2z\xd1\xa8}\xd0\xd4\xa3_\xa5\x16\x9b\xa2\x13\xaa\x97\xbd\x82(\x04\xaa\x90H\xab\x0f)\xb8\xab?\xe9s\x9b9\xab\xc5\xa1,\x94U\xbb\xa1l~\xb6\xd4\x8dL\xf5\xd5~\x0f\xac\x08\x02\xb5\xe7:\xb1\x02C\xd1/W?(\x8ba\x1dd\xef\xd6\xfd\xc3\xc1]Be\x1d\x1c^\x96\x02|\xe69(\x8e\xd6[\xba\xc2S\xb2\xaa\xe3\xc3\xa3[\xed\xb2\xcb8\xb0\xb2\x87zF\xf2[\x98\x03E\xedN04i\x94\x874\xb5\x13\x986M`/\xa4~ b \x87m\x93\xe9\xfdc2K\xbf\x8f:\x99iu2?\x0e\x91.\xd2\xa6y\xcf\x8b1N\xe7:\xf6\xeb\x8e\xe8(\xa5\xfa\x0fD\xe6\xa4\xab\x18CwR\x0f\x0b\x99?>\x04\xd6\xf48\xfe\x05\xb7u\xf0\x17#\x94\xfa\x18\xffs\x0d>\x1d\xads\xbb\x8d\x80\xb2[\x16\xc3\x1f\xfdo\xb2\xd3\xd1E\x9f\x9ec\x04R\x81\xd9\xd4_(\xee\xd3;\xf8\xa3\x9b\xf6C\xfcW\xbfE\x1b\xa8\xc7O\xf0\x95\xfb\xa9\xf9;Y1f\x13'w\x89W|\xces\x05\xb7\xef\xd4s\xb0\xc6\nq\x19\xc0\x13\xf6-Lyb\xfeB\xa9P\xfc\x84 Y\xa2V\x85z\x8c\xd8-|\x8a6\xf8\xc7\xc7\x7f!\x16i\x14a\x7f\xe2\x84\xfe\x94\xb1 \xf6n`+\xa4\x92\x92\xd8DD\x85b\\\xa4\xf0\x9e2\xbe\xf7=\x86\x8fij\xe2\xa1\x9a\x81I}\xb6\xc7\x8f\xbe~G\xb8\xd2\x10\xffD!&\xc74\xb1C`_ \x0b\xfa\x84\xec p\xca\xa9\xfeD\x188V\xe8\x19\x12;?\x0dY\x9a\x82\x06\x8a\xf4D\xf4\xf4\xfc\xd33x\xc2\x16\x05\xccr\xc6\x01\xae=\x0bC\xe8/\x0e\xc1-\x86t\xbd\xf3\x10j\xf5w\x9c\xa5L#\xca]\x18\xf0\xc4\xb3`\x15^\xb1T\x88\xd3\xf8\xee\xe9\xe7\x93\xe7g<\x7fDd\\\xfbYx'8b\xe8&\xc1?\xf8 \xb1\x82j$\x16\x82z\xbb\x90E\xf8v\xab\xfe]\xb1tG1\xf4\xec\xca\x17^\xeccX\xde8\x80\xb9\xf6h\xa0g\xdd\xdb\xf1\x18\x83\xda\xe2\xd3\x98\xdd \x16\xa566o8f{\x16\x89\x15\xf7\x05\x1bS!X\xb4f\x98\x1d \x0c<\xee\x01\xa8u\x10\xd1q\x12\xd0\xfb\xd4\x8f\xb6\xda\xbf\xa3IR\xb9\xa9\x1f!\xea\xaf\x05T\xbe\xde\xaf\xd4\x1f\xb6>\xbfQ\x7f7\xd4c\xc2GX6\xcc\x84\xf9\x8d\xb6:\x84\xaf\x9f\x02zma*\xb7\xbe\xc0?\xef\xc28\xe1\xb1 \xc0\xbb\x154\x80\xbav\x1e\xae\x04=+~\x82\x7f\xb8^\x13\xde\x0b\xfd\x17\x97\x85@L\xfa\x91BK?\xe2\xdb\x0d\xbbO(\x16\x08h*60\xe0j\xd5\xe0\xa2\xa0[\x8dD\xa1M\xe17:%G\xa5\x10\xeb\n\xd3\xf1\x8e\x05zYE8wa\x16\xea8\xbf\xe1\x1e\xa0\x03\x19[=\xc4\x88; \x0dB\xfc\x9bPN\xdf\xbd\x03\xa4K\x02*L4\xe3\x84\xc7w\x10\x1f8I\xef\x01\xce\x9f2\xc6!\xc1,0\x96\xc6\x19\xc7\x95\xc5\x11iyz\x1fA^.\xf4\xb2a^\x1c\xad\x03\x7f\x83KL\xaf\x88t\x8bk\xf0\xe6>\xc1\xf4\x10\xa6*\x8d\x835\xc5\xc0\xc5I,\xfc\x0d4\x96\xe2\xc4\xa4\x82Q\x00+\xc5\xee\xa8\xd74\x01\xc7)\xb0\xc2\xa2-\xc0\x94\xad\xa1\x81,\xe2\x8c\xc2r\xcc\xc4\xf9\xd9\x19DaVx\xc6}D\xd0\xbd\xcfn\xc79\xf4\xb7l\xe5a\xf6[Aq\xf5\xdd{\xfe\xed= \xc3\xdd\xc6GD\xbf\xe3\xf0\xe9>L\xb7\xbc\xb7|8\xff( \xf9\x9f\x0e&\xbf\x7f\xfd\xea\xdb\xb7\xaf\xbf\xf8\xe7\xb7\xdf\x7f\xf5p\x01\xb8\xa2Eq+\x17+A\xf8I~CE+^\xc8Ic0}\n\xc7\x1aE3\x05\x14\x97\x9f\xea;\x8dN\x97\x0e\x06\x17\xa7\x15\x8d\\\x8a\xe5@u\x04\x98\xac3?\x9d\xbeW\x99\x1f\xce*\x8b\x97v\x1c\x04\xab\xc0\x0f\xeb\xfa\xf8\xa7\x9f\xb9\xb9\xa3w(Z8\xde8\xdd\xb8/\xa9<}\xee\xd6Iy\x9a}\xbai\xa6\xbf1f(9\x93\xf1\x0c'+\x1cI\xa0rA\xf1\xe7\xde\x1dF\xaa \xe6\xd3\xa5b %\xdd\x14\xb9&\xa0\xa1\xf8&\x12}\x95\xc1\xe85\x06#2}\x01\x01\xd6\x8b_Gd\x8aa\xb6\n\x97\x81\xfc~\xa4j\xa1}\xa0\xcc\xb4\xff\xe2\xf9\xf3\xa7OK;\xf2\xa0\xcc\xb6\xea\xc4\x1am6\xc0p\xa8\xb1k)2\xe9X\xf1\x01\x05J\xb5\xa7%\x98\xf8\\eY\xb6\x00\xe1\x14\x95\\\x0e\xec\x1e\xfd\xc2\xfe\xeb\xca\xb3\xac\x05\xb5\x99c\xf2\x95\xe0\xe1\xf6[v\xa7>\xfd1k\x88\xca\x01\x07*iC\xc4\x0e\x1am\xbf\xe3l\xe3\xdf\xcd\xd4\x8e$\xdaft\xcb\xc6.\xed\x8b\x1f\xdd\xf8\x9b\xfb\xc6\xf8*7\xaf)\xdf21sJ\x03\xe2>\x89!\xa8\x08\xe3\xee\n\x809\xa63\xd2\xfb\xeb_\xfe\xcf\xbf\xfe\xe5\xff\xfa\xeb_\xfe\x8f\xbf\xfe\xe5\xbf\xb8\xd4]\xfev\x17`\xfc\x91(\x0b\x1cJ\xa8\xfc\x8clF\xce\xab\xa7\x1c\xa5W/\x0e\x938b\x91p\x8e\xb5\x17s\xe6JW?\x9e\x05\x10\x8a\xa5\x07\x9e\xe4z\xa3<\xea\x8b\xda\x1c\x19+\x19|\x03\xc9E1\"x\xd7\x83\x88{\x1f\xca\x05v\xbb^\x8e\xaeV\xfc\\=\xd8\xa3\x0eA\xfd\xa0\xe7\x08\x83\xe8\x98mto\xd7\x05th\xbe72\xce\xf7\xd4\x06\xd9@`\x1aV\xcf;F\xd7\xc8 {;T2\x890\xb0}\x0f\n\x9fu\x90\xbeB\xd0\xa6\x91\x8e\xa5\xdb\x0dv\x1c\xc7\x83\xc0\x17\x02w\x94b\xa7\xe8\x00)\xc5\x00&y\\\x8e<\x14K5FH!\xc2\x87\x0dHR\x08\xef\x82\xbaP\x07\xfc\xbfr\xbf\xfd\x83,\x14?\xfe\xbb$\x0b-\xcb\xae\x0d\xab\xff\xce0\xc6q\x1d\xbe\x801\x8e\xaf\xff\xc0\x18\xf8=\x04cj\xe9\xe4(F\x82\x0c\xa1\x13\x0d\xfd8\xf4\xffCh~'0?\x94\xd4\x1f\xa2\xf1\xff\n4\x1d\xb6]\xf9\xd2\xe4\xc5}IU\x98w\xaffS\x0b\x83#&jf\x1e\xfez<\x8e\xeeQ?\xbf^s\x86\x07\x04\x943\xcc\xc5\x85\xef\xa1\xde\x97\xa6>N&\xcd\xd6>h=A\xc9\xbaZ\xfb\xf8\x07\x93|\x18\x99\x95\x1d\xda\x12:\xac\xe25\x8c&\xb6\xbc\xca\x84\xd0z{\x1a\xed\xf1D\xcb\xa3\x890\xca|\x16 T\xa6{~\x19\x9b\xbc8\xd0\x7f\xb6<\xce\xf0\xc4+W\xef\xe7\xa7]\x82\x1a\x1cZ\xe39\x18\xf3bNE\x8cZ}d\xe9k\xa6$ d\xf2\x1b\xd4\xf3\xfb\xf8\xdd\xc7\xc32\xcc\x05\xb5\xb0\x80\x99S\x0b\x06\x03\xb6\xf1Y\xb0N\x99\x8e\x11\xb5-\x00\xbf\xf1\xb7\x19\xd72\x01\x96P\xb2\x81>\x1b\xd0\n\xf1\xdd\x14\xfe\x05yl\x87\x87k\xa0X\xde=\x87\x7fA\xe9\xaf\xd6\x83\xf9\xab\x0f\xe2l\x9f\xf3\xf5\xa3\xfe\xc2,\xf8!\x0c\xbf\x1f%x.\x88a\xdbz7+\xa8\x04\xacw\xe0\x81mY\x84IP,\xa4x\xde\x12\x9aC6\x08\xe5\xa6\xfe\xfe\x94\xe1\xf1I\xc8\xa2\xcc\xfc\xf5\x05\xf6>d\xbaC\x11\x9e+F1\xce+\xceN\x9c\x08\x0bil\xc7%\xce\x84\x06\xcd\x9c\xad\xe1\x9fxk0\xef'\xf5\x0f\x9e\xe9q\xc8\xc8\xb3\x15\n\xb6\xf0\x0f\xb5\xe7\x00\xa6\xca\x94\x05\xfa<%\xdd\xd1u\x0c\xc7IiH\x03\x80\"\xd7\xc9\xa7 \xf5\x10\xdc4\xa1XPp\xff\x86\xe9\xa7\x18\x89N*\xee\x11\xdb1\x08]/\xcd\xc2\x90\xe2)\x05\x06\x9d\xd3R\xa7z0\xd8,`$\x05\x0b\x93@\x1f8*\"`V\x90P\x13\x0f\x0f(\xb4\x9a\x195gG\x82\xe3\xbf\x14)\xa0\x80\xbc0\xd6\x19\xf4`\x8f\xc7<{\x7f\x8d\x07\xb3\xb7+\xdes\x04\x8a\x03\xa3\xb0^\xba\x87^\xe0\xd2\x0d\xc46\xb8GQ\xd9<\xafQ.5\xaff&i\xe4\x87T0/\x0epm\xe8\xf706c\xac\x13\x04\xa7Qj\xd0\xd7\x92\x81\xc2\xea\xf5\xb9&\x16^\xe0' \xc5.\xaf\xd9F\x0b\xd1)\x9c\xe5\xb0 \xf0\x93\x14\x17\x87\x1f\xd8E\x81\xcb\x04\xcf\xcb\x0c\xdc\xf0`\x84\xe9\x1b\x86G\x9a\xda\xf6\x1e\xe8\xaf\xfdK\xf9\x96\xd3\xb5\xaf\x97'\x9cnq|J\x11\x97\x99\xa0\x862\x84\x06\xb2\xc2_\xa1+O\xe2\xe0~\x1b\xdbG\xcb5\xe9\xda\xa7A\xb1 n\x90N\xe01q\x8e9\x10\x01\n\x9e\xee\xc3U\xac\x0fq\xef\x84\xf9k\x1a\x05\xabzx\xd0\x1d\x14\x061\xed\\\xef}\x06\xe8\xbc\x87\xae;f=\x82Y\xdf\xb0\xdf\x06z=o\xd8\x97j\x12_Q\xc1\xfd;\x93\xa0\xc5\x88\xd70{z\xb819\xd5\x94U\xbdF\xfb8\xd8\xb3b\xc9\xdf\xf9\x9bM\x96\xb2o\x958\xa3\x99\xb2JL\xed\xde\xf3\x15\xd2\x0bH\x144\x12\x90\x13S\xbe\x0e\xe2XC\xf4u\x16y_\xe4\x8f\xbf\xcd\x1f\xff9\x7f\xfc\x1e\x1f\xff\x99fi\xea\xd3\xe8\xb7A\xa6\xe1|\xc5\xf8\x96\x15\x1e\xff`E\x8aW1Ovq\x10o\xef\xf1\xfd\x8f\x9b\x8d\xa1\xc5\xa87,\x80\xf3C\xc2\xbc,\xa0\xbc\xdc\x97\x1f\x92\xb8\x98\xe9\xb5\xb1\x84`\xaf3\xbe\xca\x02%\xb4\xb8F\x1d\"r\xf4B=\x8f!\x8b\xb4e\x89z\xe6\x1c\x97P\x08\"\x0f\x9a(l8\x05\xc4\x0f-^\xe3\xe9f\x08\x04\x99\xad\x91\x04\x84a\x16\xf8h\xea\x81\xa7\xb0H\x92\xd1\xd8!\xdektN\xe8z\xad\xabMv4\x121\x92b\xae\x89L\xc8\x91\x00\xea\x83\xdc\x04\xa8\x1e&\xfc\x84\xe44\xbc\xb7\x98\x1aj\"\x17j\xd2\xa6\xde\xcd\xa3%s!\x92\xb7\xd0\xa0p\xa8\xa1\xcd\"\xcd\x90\xf0 \x00t\x8cU\x0cc\xf5k\x14\x8b\x1c\xd2\x1a\n$\x9e\xc7\xb4m\x80%\xeb4\xf0\xb7\xfa\x01\xbfd\"V\x12q\xc0\xb4,A\xbd\x1b\xc5`\x10\xefW[K\xbcV1\xd7\x90y,\x08\xd4x\xe9\xf9V\xafj<\xcc\xeb\x8ey78\x94V\xc0\x08(2!/`Hvm\xad^\x8cB\x82\xfa\xab\x97\xa9\x17\xc7|\x8d\x89\x9a:A3\x8a!\x8cW4e\x86g\xd2\xd436>\xe6L\xcf \x84M00\xd3w~\x98!`\xaa\x8a\x8d\x9a \x16y\xf7&A\xd59Nw\xfe\x06\xea[1\xbd\xd2V>\n\x1e(!\x16\x96/ZB\xa9\xbfc\xc3o\xe1E\xed\xffz\x95u\x1d\xf3\xb1Z <\x89\x03j7\x1f\xf5\xe41\n+i\xfe9\xe1\xb11\x9e\xc3\x04\xce\x14)4\xf4\x05f\x07\xbb\x80\x8b\x1d\x12Pf\\#k\xf5\xe2\x08\x18'&\xf1\\\xa8]\x03\x97\xd5Y\xf7~\xaa\xf7,\xc8\x14\xd9z\xcbB\xcd\x06Y\xc0\xf6\x16j#\x04\xf8(\xfc\xaa\xbf\xe3XQ<\\\xf9\xf0nF\xa0 z)V=\xb6#\x82\xaf\xc5bq$\xc6\x1b\x1a\xfaA\xfejP\xdb\xbe\x8c\xe9\xfa\xc7,\x15y\x9a\xe0L\x8bA\xfa]c1\xbc\xed)\xf7i\x94\xe7\xbe\xb5h\xb6A\xd9\x03Z\xda\xc2\x06i\x0b\x1b$`\x9dc\x83?E\xb9\xd0\x08eY\xe4#\xe34 %i\xb5@8u9M\x1a\x950Y\x9e8D-?\x82va\x99\xdf\x00 7\x98\x00;\xb5\x1b\xd8\xa9)\xb1L\x17\xbaa\xf7\x89\x929R\xfd\x92&\x10X]\xbf)n\x00\xcf\x96\xd4\x02%\xcd\xc7,`\x8a\xd6\x8d\x0b\xecI\xd5\xcd\x82\xd0\x8ac\xf8\xae:\x99S\xe1@K3\xf9\xe4\x05\xb16P\x1c\xb3\x84\xef\xbc\x1d\x8d\"\x16\xa0\x00\x84=\xbdw\xa4Asw\xd0\x8f;\xe8\x07\xca\x1f*7\xfc\x03_\xee\xe1\x0b\x18|\xbf\x8b\xe3\x90Fk%09d\x94\xac \xa3\xf4P8\x81U\xaa\x97\xb4\x15{Vl\xcf\x02-k\xdbM\x9a\x17\x07Y\x18\xa56\x13\xbe[r\xad?kQm\xcd\xa28\xb4Y\xd7,\xd1:\x0d+\xcb\xe7l\x1a\x1es>\x07\xbbG\xf5\xc05ykbA\x81\xc2\x1f-q\x17H{\xc4\xc4\xce\xf7n\"\xad\x17\x0b\xecV.\xb0\xfaT\xb5\x05-\xef\x83T\x8a]g\xea\xc50j\xf5\\\xe0\xba!\xbd\xb3_\xfc\xc8>\xc6{\xb55\x81U\x03\x8dFqNL\xa3,\x1f\x07#\xad\xf3\xf8\xd6\xa6\xf1\xf8\xd6\x8e!\n\xcc\x06w\n\xe23\xb7\xbd\xe0\xb6\x17\xb8\xe7\x05\x03\xc5\xfc\xb5\x00\x95\xde\x13\xfb\xef\x98\xde[\xf8Z\x8f\x07\xe8e\xb5\x80 \xb5L\xc2\xbeh\xe2\x03\xa2\x88V\xe2\xe9 \xffV\x96L\xb3\xa4\x9ar\x1f\x86Lp\x1f\xe4\xf1}N}\x0e\x8b\xcex\x83\xe3.\xf0\xa3\x9b\x99\x99\xe3\xbb0\x98i\xebzH\xb7\xe2\xba\xfa`G\x03\xaa\x9cA\x8e\xde\xb2`?I\x8a&\x8f\x81\xd3\n\x89T#7\x9b\xab\x9d\x17$\x1a\x8f/\x06\xa8\xe8\x8c\xb6=ru\x05\xa6\xa6\xf1\x86\x88\xb9\xb9}:\x87[\x98\xeaO\xe5f\xd9\x88\xb0\xb9J^6x\xdf2\xa6\x9b\x95\x83\x0d7\xe4^\xbb-\xae\xebp\x93h\xf5\x16^\xa6\xad\xb7\xaf\xbdc\xfb\x11a\x03\xf2\xc7\xd5\x8f\xcc\x13\x85\xf0\xf2;\x9a\xfe\xf16\xfa\x8e+\xd1A\xdcO<\x1a\xc0\xe0i\xcf\xd1\xba\xd7l\x1e-\x1d\x9eT\x8c\xc9N\xc3\x91\x0d\xd1\x80o\xc0\xbb\xdc\xcf\x8b\x9f\xe7\x8bt\xf1\xc3\xf2\x89\xd4\x7f\x17\xef\x17\xefO\xb7a\xbdG\x89*p\xf9O\x95\xec\xff\xf4\xd2\x99y\x0d\xd6jk*\xe8x\xbe\x18/n'\x8b\xec\xec\xec\xb7\x9f\x8e\x17\xd9\xd7_\x7f\xfd\xf5\xf2\xd4q\xf2\x08%\xd4\x12\xc7\x12\xcb\xe1'\x8e\\{\xc8\xd5\xbf\x9e\xe1\xff\x1b\xb9\x13\x03\x91\xa4\xd7\x12o\xd6H\xc1\x02\x89\xd7-\xa4\xe7\xaf\xe5]\x98$\x83\x99\x9c\xbf\xa1\xe3wK9\xa7\xe3w\xc3\xc9b\xbc\x1c\xf6\xafg\x90\xa6\xdefK\xf9\xc9`P5\xb7#\xda\xb3\x154\xb6\xb8\x1d\xe2\"\x93`\x829se\xde\xaa\xccs\xd5\xcd\xb3\xb3\xb1\xfas~\xa6\xfe\xfd\xe2l\x91M_|\xa6\xfe\xfd\xec\xec\xabEv\x8e\x9f\xcf\xcf\xce?W\xff>\xdf,\xb2\xa7ggg\xcb\xd3m\xbd\xca{rEz\x06 \x8b\xf8\xff\x03hf\x15.\x18%m\xed\xe3D\xc9\x0f\x8a\x86\x90\xeb\x03\x16\xe5\xa4\x803XC\xdd\xa9\xee{2\xeb^\x0b\x03\xc0\xda\xe1f\x13\x10\xd1x\xa6\x18,\x18\xe1\x15\xbe\x81M\xa1\xee\x86]\x13\xe4:\xef\xec\xac\x05\xd2&\xea\xb3r\xc3\xedoH\xff\x0b%\xb5M\xfc\x14\xfe\xf6Y\xa3\x85\xa1%Sj\xd1\x9f\xe1=z]\xc6\x98\xb0_\x10\x01\x11\xe7\x0d \x13\xc3\xe1\x80Ds\x81\xebU,\xeb\xcb\x95\x14\xdc\xf5\xd5{\xd3\xb4\xba\x11\xe4\x0d\x8f\xc3vG\x80\n\xda\xb7m\x07\xae\x85:{J\x00\xd9\xf8\x11[\x17\xe7\xec\xd6\x8f\xd6\xf1-\xb9\x06{\x002\xd3\xef\xe5&\x9d6\x83v\xe4o\x9d\x8d*\xc8\xbe\"W\x84\xf2m\x06\x86`&\x92\xfcK\x8c\x0d_\xf0B`\xb3\xcc\xcf\x96\xe4\xba\xfc:#o\x9b\x02\x9a\xde\x95\x0c`\x9b&\x95\xe4\x10\xdfV\xc7\xd2\xfc\xde\xbb\xbd5\xdcM\xf6\x8c\xa7\xaa\x8bW\xa47\x9d\x9cM\xd4\xae\xfan\xc2Y\x18\xef\xd9Z\xc7\xbd>\xf9\n\x9ck|5Y\xc7\x1e\x80\xad^?\x87~\xe5i\x93(^\xb3\xd7\xf7 \xb3\xb6\x9bw\x13?\xfd!K\x92\x98\x0b\xa8\xead:\"wu0\xd4(\xfe@\x8aU\xb9\xc7\xe2\xcb\x06\xbf~\xeaw\xd3\xf2\xed\x8b\x0eu\xff\x11\xf2\xfcN\xe7\xf9\x9a\xd3ms\xde\xef \xef\xef_\xbf\xfa\xf6\xb5>p\xfc\nO\xa5\xdd\xd9_C\xf6?\xd4,\xad\xcd\xef\x95\xfd\xfe5\xe8\x83\xdc\xb9\xbe\xc1\\4dk\x95\xf5\x15M\xdc\xf9~\xb4\xfc\x1a(\xd27\xe4\xbaRLM\xddW\x93W\xf1;H\xfcB\x08\xae\x12g\xe4\x1bw}\x7f\x80v_\xb3\xbb\x86\xde}\x0f\xdf\xbfD\x8b|w\x96\xdf\xe1\xd8\xfe\xf1\xd5wp[\xda\x9d\xe9[\xc8\xf4?\xbf\xfa\xf6\xf7B$\xdf\xb3\x9f2\x966T\xf7\xa7r\x0f\xbf\x85\x1e\x96\x0b\x92\x19\xf9\xd6]\xf8'h\x86Ej\xff\xf6\xa7\xef\x1b\xfa\xfcu\xb9\x85\x9f\xa0\x05[\x86\xcc\xc8O\xee\xb5\xe4\xe4\x17\xdf5-Z\x85\xf6\xef\x14\xf5\xfd\xff\xd9\xfb\xda\xae\xb8m%\xe0\xef\xf7W\x0c~zR\xfb\xe05\x90\xa4\xb7\xed\x06\xc2!\xb0ii\x03\xe4\x02i\xdaK\xf3p\xcc\xaev\xd7\xc1k\xed\xe3\x17^z\xcb\x7f\x7f\x8eF\x92-\xdb\x92\xec%iz?\\\x7fHXk$K\xa3\x91\xe6E\xa3\x99`\x9c\x92\x8a\x88\xdc\xea\x18\xdb\x10\xc4\xff\x8f@\x98D\xd8\x16S\xfe\x08\xe8mBRI\xc1(c1\xc27\x94\xdb.\xd5\xc8\x87u\xf0\x15\xeb\xa0\x1eK\xbf\xc0\x0e\xbc\n\xa2\xc5\x92\xf7\x1b\x95\x14=\xe4\x8f\x08\xc9G\xc9\xa8\xf0P\xb0u=\xf4{\x84\x9e\x91\\ ${u\x7f\x1e\xce\x18\xb5\xea\xe1\x7fRZ\xef\xb7\x80\x7f\x83\x1d8c=\xa7in^\x97?\xa3T\xdc\x9e\x82\xe6\xae\xf6Kc\xa7\xffE\xf4\x85m\x10\xeat\xf0\xfdr\xaf\xdc\x88\x8e\xe8Ds\xf7\x8d!\xfd\x07\x8c\x8c\xa6\xed\xd4W\xb0\x03\x86\x95\xffo\xd8\x81\x89\xbe\xe8W\xd8\x81\xb9\xbe\xe8_\x18wM[D\x08\xec\x80F\xa4cON0(\xa0\xb6,aez\xcf;@F\x05;\x10\xbb\xffy\xf0\xe1\xe2\x03\xa3\xceq\x98\xbbW\x188\xeb\xca\xcd\xf1\xdf\x04\xffM\xf1_\xeay\x06\xdeH\xed\xdf\x89\xf4\xdf\x89\xb0\xd5\x10\xff-\xf0\xdf\xcc\xf8\x85\xd0\xfe\x85\xc2^\x9c\x11Cb\"\xc0[\x81\x96\xc21\xb1\xb0\xb3\xa9\xadpi+\x9c\xd8\n\xe7\xb6\xc2\x1b[\xe1\xc2V8\xb3\x15\xde\xdb\n\xafl\x18\xba\xb4\x15\xde\x12\x8bB;R\xc8\xa2r\xa0\x91.A\xd2\xa3\xa0\x8a\xf7PZ\x93T\xef\"\xe1\xe4\xc3\xbdD>\x98d7\xed\x97J\xcf\x12\xe1(V\xb9Gq\xa7\x1aSkg\xb5\xd6\xb8a\xb99}uh\xf8\x98R\xc6*\xb1\x97\x85ZI\xfb)\xa5LVB\xfaw\xde\x9d\x8d.\xdf\x9e\x9e\xbc>|3\x92\x9fz\xf2\x04\xa6\x81\xfa\xde\x17\x9b\x14\x0f\x82'\xfa}\xb9wz\xb8\x87\x0d\xfab\x9b\xaa\x17\x1f\xec\x9d\xcbb\xdc\xa8\xe4\xfbw\xc7?\x1f\x9f\xbc?f\x8d\x9f\x9f\xec\x9f\xbc9C\xa5a\xcb\xe7;\xd648\xdb{=\xba|}rz\xf9\xd3\xbf\xde\x8dN\x7f\x93\xa5\xcbF\xe9\xf9\xe8\xe8\xed\x9b\xbd\xf3QY}\xc2\x01\xde\xffx\xf2ftyp\xb2\xff\xeeht|.\x0b\x17\xbc\xf0tt\xfe\xee\xf4\xf8\xf2\xe0\xe4H\x16\xcc\x9a\x05\x97\xafO\xf7~P\xab\xde\xb7 \x0e\x8f\xde\x9e\x9c\x96\xe57\xbc\xfc\xf5\xc9\xe9\xfe\xe8\xf2\xd5\xc9A\xd9\xe3\xab\x1aR\xce\xf6\x8e\x0f\xcf\x0f\xff\xcd\xbav\xe4\x8b\x8dI\x96\xfd<\x1a\xbd\xbd\xdc?9>\x1f\x1d\x9f\xfb\x9ciV\xc4\xf1\xee\xf4\xf0\xf2t\xf4\xc3\xe8\xd7\xb7\xac\xe1\x9c *0\x0c\x11\x91i\xd5f\xfc\x05\xdfa7=\x9cZ\x0c\xecI\xb4\xbc\x0dy%\xa7OT\xdb\xf8Z\xb8%Uh\x80\xd8M\x88\x0f\x8c\xd7\xc6.%>D<\xb3\x97\x84\xcbnf\nX^\x82\x85\xe5_Y\xab\x02\xd7Z2\xa5^\xd2]\x8f\xed\xb3Gj\x97\xd2\x12\xb2P\xebx\xb8\x9a\x0e\xf8\xa2(\x87\xbe\xb3\xc3\xa4\x88\x12\x11c7!\x1e\xd6b-U\xf0UmF\xad\x08Oy\xed\x88\x94\xbf`\xecRQ\x9b\x12\x15\xbe\xaa\xcd&\n\xc9S6\x13\xbbgD[\xe8!\x01\xf0\x8e\x95.Wr\xee\xb8\x85\x94\x1b\x96RB\xfe \xb8*\xab\xb7\xc2\x82\xca\xcb\xdc\xa9\xe7\xf3\xadu\xaa\xdd\xfd\x0c\xdc\xed\x84\xf46\x18\x94J\xbe)&\x82\xfa\x08\xbf\xeb\xa1\xc6Z%\x9f\x07K\xce\xb1<\xbd\xb7\xf4\x04dv\x08\x92\xa0<.:\xb6?\x8f\xe2\x89\xc9\x9c\x01h\xd1\x1b\x87\xf9x\x8ey8\xbaZ\xa7ENR&\x92c\xe8rs\x93\xab \xfb-\xe9\xba\x9e\xac>\xdd8XiF\xd8S\xfa\xf0\x0c!g\x1a\xd3\x9e\xfc\xcd\xb0\xc8$\xea\xce\x16\xa6)]\x0c\x1bv\xf6\xe6\xf3\xd0c\x06\xac\x94\x06\x9f86\xb3p\xa1>\x9f:\x14\xf3\xc4\x89\xae\x97\xd85\x9a\xd8\xf4\x9d<\xef\xbf&\xa5a\x96K2\xf61\xdbNf\xe4\x13M\xc1\xbd\xe1\x1b\x12\xca\x04\xdb|$/\xb77\xc4\x1f\x0e\xac#7\xb8\xee\x9a\xbfn\xeae\x0f\xfb\xc8k\xdb\x92\x85&\xd1\x98\xd1\x0ej\xb4\x03r\x0b\xef\xcc\xc3dO\x1a\xa4$[\xd2$C\x1b$\x1b\xacT\xb4\x1d\x1f\xd2\x80.I\xe2:?\x8c\xce\x1dq/e\xc86\xe7\x0d\xc6\x18_\x8c\xe7a\x9a\x91|\xa7\xc8\xa7\x83\xef|D\x89/\xd2\x9a\x06\x19I&.#@\x8fGE\xa9>\xf3\x08Jb\xd3\xb1\xef\xf5\xc0%\xfb\x92\xcb\x06}\xe0\xf1\x18\x83\xafS\xba8\xc33D\xb6\xcf8e\xdf\x9d\x9ek\xd3\xdc\xa7\xf2v\xfc\x93'\x90\x97\xc6 !\xa8\xe3\x95y\x9e^\x94uIg\xdap\x1d\xc7\xf3\x82+:\xb9\xf7L[x\xa2\x16L\xa34\x93\xcdc1\x13\xc4k\xdb3\xa3\xc7\xf7\xfc\xbc0G\xe9oW\\\xb1\x81\xa1\xb8\xbf\xe4]l\xb6\xefw\x81\xde\xc8]7\xd70 \xd8v\x8c\x00\xca-\xads\xe2~\xbd\x9d\xdd\xcc^n\xcf\x80\xa2\x8f\xf0\x0e\x06~k\x0f\xd3\xf5\x9c\x97\xdb\x1b\xb3\x97\xdb\x1b\x0c\xfck\x03#$\x01\x86\xdb:\x13.\x19.j\x91\x18\x82\xc9\xbd\xe62\x82\xbe\x9e\x9d\\\xdczW\x97/\xb7Qo{\xb9\x1d-f\x90\xa5\xe3\x1dg{\xa3\xf1\xe6\x0eh\x82^\xf2;aL\xd2\xdc\xdd\xf266\x9c\x97_{\x9e\xa6\x83\xc0\xd4T\xae7\xed\xf3N\xea\x11o'\xb6\x07W36\x86\xe7\xa3\xfe{\xa3 \xd4\x1f\xc5Ir\xc3\xde\xf9\xe7\x9fl\xd1\x12\x1f\x8e\x82\xb3\x1fO\xde_\x8e\xde\x8c\xb8\xac/_\xec\x9f\x1c\xd5_\x9c\x8f~=\xf7\xbb\xa9\xa1\xf1\xf9\xa3\xe0\xf5\xe1\x9b\xf3\xd1\xe9\xe5\xde\xfe\xfe\xe8\xed\xb9y\xf5\xd5s.\xd5\x8b\xb4\xaf\x0fWFE\xa9\xfd\xee4\xb4\xdfs\x8d\xf6{\x8e\xb1l D\xe8U6&t\n\xe70\x14\x07\x9d\xa6\x86\x88\xa6!\xc2\xd5h')\x16W$UM\xdd\xa4<\x02\xe2\xc7\xba-\x9f\x07\x0ep\x1c.\x0c)O\xf5\x88\xf9\xd8\x12\xb3\x1a\x973\x9b\xcf\xcf\x17\x04]+\xd8\xff\xc1\x94\xa6\xa3pN<\x95\x0c\x8eQ\xfdT\xdf\x9cb\xe8/\x8d\xcfJ9\x7f\x86 \xce\x03\xc6\x99\xf6\xab\xe3 \xed\x91H\xaer\x07\xcewJi/S\xfb\xf1\xb1\xb3\x89R&\xb3@f\x8a`\\\x05\x969\xe1\xb9\x1al\xf9\x7f\xa5\xf4Q\x91m\xddA\xa7{J\x8a%M\x1a\x13\xc2\xe7\xa3\x83\xfd\xf3\xf3\x8e!\x18\x8eH\xe4\x13\xc61\xbd%\x93\xf3p\x96\x0d!\xb1\xa9f>\xac%\xe4\"\xfd\x80\x01\xff\xd8\x1f]\x8b\x80\x8d\x80\xab\xb2k#\xach\xc2/ \xa2$#i\xbe7\xf9\x18\x8eI\x923&\xdeG\xc4\x01\\i\xed\xba\xae\xb37\xcdI:Bg:\x06\x90p\xc1\xe0\xb3\xc9\x94\xcd\xf97c\xadk\xff]\x9b\x12\x1eT\xb0%\xd3\xf0\xd7\xca1]\xf9C\x0f\xbb\xb6\xb1\xbd1\x0br\x92\xe5.Q\x97\x10\x97\x0eV\xd2\x9d*M=\x18\xc74\xe1\xaa\xa0m\x03\xaba\x99'9\xa9:P\x06\xe8c\x1d\xf4\xc1y\x12\xe7/\x1c\xcf\x93\xa6*\x99\xeaA\xdd\xf7\xb9\xb8X\xfeS\x1fO\xd9\xde\x0f>8\xc0$G\xf9\xe2+\xfe\xc2\xafW\xa8\x82J~\x01,\xa8\xdf\xdd\x81\x84\x0d\x93-\xe2\x90\xd1\xa3}[\xddZ\x85\x0b\x9c\xae\xc8\x05V\xd6\x07\xedpiO8\xda\x13.\xea \x17\xf6\x84+\x1e\xcd\xf2\xca]\xbe>;<\x82j\xc5a\xba\xb6>\x86\xf4v\xcc\x15\xdd\xc3\xda\xe4\x1b\xb5.\xa0\x89\x0e\xfa\x970.z\x82_\x13\xb2d#\xd2\xc7ki>\x82\x15T(\x18\x0253\x04\xd0\xebJ\xea\x83\x8ebl.\xc2\xd2\x11\xac@_\xd6n\xb4\xc8\xec\x92(k\x84\x17\xc5\x07/H\xc2\x05\xf1\x91\xf4\xf2\x00\x0f\x98\x82<\x8d\x16\xae\xe7\xf3\xa0\x85u\xbe\xeaC\x16H\xd4\xf2\x04P\xfc7\"\x8f'\xeb\xc8\x02\x89\x1e\x91J\xb3\xc9m\xf7\x94\x18\x96hJ\xe6_W\x1a\x92\x07d\xb8\x85Q\xe4o\x87G?8\xca\x8e&\x05\x9d0\x88&\x1e\xd29\xfb\x8b\x13\x14w^\xab\xbc]1\xa0]\x10.\x97\xf1=\x1e.\xbf%.?\x8e#\xfcG\xc2\xff\n\xcbL\x12\x91\x07/\xa1\xe0\xbcA\x95PD\xb5\x88\xa3\xc9\"c\xc8\xc7\x90\x12Q\xf7\xa0\x93\xca\xe1\xf1\xdbw\xe7\xbaa\xf2\xbb\x0e\n:\xf0f\x1d\xb7\xb6\x0bs\xf9\x05E b\xad`\x7fy\x1eF\xc5\x8d\x92B\xe3\xc7\xa0{\xd8\xc8\xb0\xb9D3\xec\xc4\x07\xc7Qp\xd5\xd9\xa2\x9d\xcb\x83\x18\xaeB(\x18)\xf8\nY6\xf6d\xad\x1c(\xa7\x03\xfe\x9b\x0d\xcfM!J`\x8f\xfd\x8d\x7f]\x13\xcf\xe8P\xd9|\xd8G\x05#d\x04\x87\xff\xa4\x9dl\xcf\xc3\xa3\xb6'O\xe0\xdf\\\n\xa0^\x8f\x99\x079\xfb8P\xac\xfe\xebc\xaa\xf7\x1b\x18\x88\xc1\xad\x95d\xc0\xa9`E\"\x00\xd1\xcc\x19V\xee_\xa7\x1chN\xf8\x18+\xa4\x12\x82\xb4\xd3w\xcc\xa0\xb6\x86\x97~\x15RPn\x0eT\x04\xc1\x1d{\xaa,0\xdc\x80\xc8m7kw\xe4\xc2\xa4 |\xe8\xa6b\xf5\xc1\xb0\xa2\\\xe6\xfe\xd7g\x18#\xa8\xe3L\xaby\xea\xd5@\xf7\xea\x82N\xd3T\xf3i\xaf\xf8\xd4\xf3\xd5\x93\x01\xba\xb4\xc8h\xea\xb3\x82\xb8\x0f\x9d\x83\xb1\x97\xb6$@\xad\x94alb\xa5\x03\xa5\x03U2\x04b?\xd7\x92wM\xfa\xc8Tl\x13:b\xed\x99\xa9\x07\xf9}[\xa6:\xc3\x80>\x07'G\x0e7\x87\xb0\xc1\xbe\xc0\xef\xa6AB\xeer.X\xbf\xf0Z\x0c\x98W\x14\xa1B\x92R\x18;&n\xc2\xb5\x9a\xa4\xd4\x8f\x14\x8d\xff\x049CU\xe6\xf9p\xcajX:\xde\x9a ]\x97\xf5\xb3`\xbcxr\x17d\xa2\xb1\xbe'|}g\xa3\x8f\xf4\xddG\xf2\xee#u\x87\x1d\x924f#\xe4Qqa\x07\x9c\xdf\xef\x9e\x8d\xd7\x06\x83\xdf\xef\x9e\x11\xc6\x88K\xf3\xceZ\xa5\xeb\xe3\xdetH,\xf7\x0b\xa0\xed\x0b\xab\xd4\x0fr\xcaO1<\xc8\xe7)\xbd\xc5\x83\x1d\xa68\x8e\xd2\x94\xa6\xae#\x8b!\xca \xa19\x84%\xf2M\xce\xb0\xe5\xf7Z\xbd\xc5AU_t\x19\x0b\xd7~t\x12\xa5\xf9}\xf5E\xde\x90\x0f\xe1\x15M1N\x8d\x81x\x8c(]\xab\x1d9t\"J\xb5\xbd\xde\xbb#\xecp\x98GcnHa\xc2\x8a\xce\xec\xd2\x84\xeb\xb6\xe6\xe8\xec\xb1\xa55\xac\xde\x9c\xdb%w\xb2\xf6\x04\x19\x18\x1a\xa8NtV\xdd\x1b\xc1t\xb3M>f\xcc\xcf\x91\x9a\xf7\x08\xba\x916/1\xd4M\xdf\x1e\xf0,\xbb\\HK\xf8\x19J} x\xf5#\x06\xc5a\x98\xed\x04k\x9b\x9eW\xb7w\xbf:9\xf8M\x88\xcb\x95\\\xbd\xcb\xf7J\x18B\xc2\xb4\x03\x92L\xf8\x99Xj:$\xb2\x0bdH_\\\\_\x9b\xe0\x7f\x03\x99-\xb8\x14N\xb6\x1d%\x7f\xb7}\xd5\xac\xc9\x91\xa3\x80+\xea\xf0^\xf3\x9b2\x06W \xfd\x14\xf0\x93\xe6\x13\xb6}\xa3\x95\x8b\x1f\xef\xe9{P\xdeC*8kJ\xbc\x17\xb8\xef\x15u\xae\xc2\x0dL\xb4\x86h\xca]x\xd8T\x1f\x13\x97rnB\x8d\xdc\xe4\x80T\x85\x9c\x9dP\x91\x8c\x98\x1a\xfa\xc60\xb3\xb0\xdae\x18\xc4\xacCG\xc1\x11\xb2-\xf8'~\x9e\x904<\xf0_\x80\x8a\xa6\x17\x1e\x845\x02\xe9\x81C\x90\xf4\x82A\xfb\xcd0b^\xef\xb9V\xc2\x80\x7f\xe3]:\xf3e\xaaK\x1f\xc2\x15&Z4\x88G\xb3\xea\xd9-#\xf2\xd2\x94\xd8\xaa\xf9\xc0\xd6dF\xf2}\x9aL\xa3Y/\x1b\xd8\x1e7\xd2r\xdfdMly\xd6\"\x06\x8aj\xb7ij\xb2rW\x95.\xcf\xfaf\xc3\xc9\xe4GJ\xaf\xfb\xf2\x7f\xfd\xd9\x03\"\x1c\x8f\xa3v\xf8\xa9\xd4\x9f\x7f\xe2^\x84'Sh\xc6\xcc=\xcdU\x8cj\xf3ju\xc1\xf4\xfd\xda\x99\x97^\x90n4\x9b\xad\xd4\xae\x1c\xc5\x85F\xa7Q\x1a\xde\x8b\xe3V\xdb\xc6\xa6\xd1\x0fW\xdbZ\xed\xe5\x832\x16\x9e\xce\xb6\x0c\x8b\x9c\x8a\xa2G\xc5W\x16\xfev\xfcpS\xdeSvs\x1f\x9c\xcbK\x92\x1d\xd1 \x0f\xd3S\xef\xfc\x0d7\xe0\xa9\xa9\x02\x94\xd5)O\x8cb7q\x9f7o\x15PQ\xf0\xb4Y\x10\x89\x82g\xcd\x82P\x14|\xd3,(D\xc1?\x9b\x05\x99(\xd8T%f\xf6b\x8b\xbd(\xdf\x94:F\xdc\x9ey\xf5\x06, *T\xe0\xe9\xb1.\xa8\xaf\x88\xaf\xd6\xf4\x0dlF\xd8\x05\x81\x9f\xb1\x95\xee\xca\x9e\xe5\xb6k\x9e\xee\xa6\x0f4\x10\x1f\xf6\xdc|\x1ee\xdc]\x95\x15\x84\xcd\x027\x0f./\xd1Twy\x89\xccb\xd3\x87T\x01\xf2;\xd3\x88P\xd0%\xbb>\xba\xaf\xab\xe0\xc5\x82\x93\xb4\xb4\x88\x99 \"[/\xaa\x8554]\xc3\xe4`lM\x0dM7<\x01\x0f\x0e3z6\xa7\xb7f\x92[Zmh\xe6\x01,;\x87\x18\xf7Et\x94Li\xba\xe01 ;\x88\xc2\xd2\xa1\xb1\xeds\x0bz\x15\xc5d\x08[OWm\x96\x8aqz\x96\x91N:q1\xed\x84\x98wB\xc4rg\xf8D\x0cXx\x08\xc9\xaes\xba|\x0c\x9a\xc2\x1eh\xfa\xaf\x1e@Q\x0e@\xa7\xb3\xd5\xde<|\xf0|\xe5*\xc2\x83[\xb5Y\nS\n\xa3\xcbe)\xec\xc0\x18\xdf\xfe\xbd\n\x8d\x0fy\xf0SF\x13\x14\x15\xc2Kn\xa1D&\xad\xbc\xbd\xa24&a\xd2|\x8d\xe1\x03\x9b/\xb9\xe9\xb1\xf1\xf65M\x17\x1a.-u\xa8{\xa6*\xb5T\"*KZ:Q$JZzW(\xab\xe8\xb4\xa8{\x9d\xde\x95\x89\x82\xd67bQ\xd0\xd2\xbb\xb8\x94\xd7\x14\x88\xa6\x08>n\xbc]\x8aF\xb6\x9a\x8dp\x01\xed\xdb\xc6\xdb\xb9\x04\xdfj\xf5\xf3F\x16\xb5\x86\xb6\x90%\x9b\xdf\xb4\x061\x13\x89\x8a\xb5\n\xe1\xfd\x97U\x08\x97\xe5\xba`=\x08\xa2\xecT\x84\x85\xf6\x95\xa20\xb9\xf7\x1b\x90\x96bN\xad\x86\xa6x\xa1\x0f7\xe5\x9b8\xcar\x15\x82\x91\xb5\xedw\x98\xdc\xd7i\xf5\xaa\xe5*t\xa3w\xf2\xa1\xc9\xfe\xf9\x86\xb6]\xcd:\xff\x1c:\x7fK\xb5\x97:\x7f\xd6,\xd0\xe9\xfc\xaaF\xfe\xa9:\x7f\xac\xb4U\xe9\xfcuK\x80Q\xe7/\xd3J\x1dD\x93#\x1eG\xb6\x05\xf9\xd7\xa9\xff\x93([\x86\xf9x~\xc8t\x860\xe6\xceP\xc6:\xdc\npc\x07\xe2^\xd2\x92\xc0\xf5\x1a\x17\x1aCS7\xe9\xe4\x9d:\x16\xff\xf7\xd9J\x90\x84\xbb\xd0\xc3\x97Z\x17~:\x90\x18\xd5\x90h\x91\xd8W\xb0\xcb\x14\x08;5\x1c\x0e\xe4AN\x7f\xe2\xd7\xaa9{g?]\xd3a\xbb\xf4\x8b\xb4|.F\x17\xbb\xfc~i\xe9\xfe\x18a\xb8\x9a\xbf\xe0\xa6\x80>*\xa9\x0f\xb4=\xe3\x06\xc6\xd3\x06\xac\x9di6c\x02\xfa\xb88x\xa8\xc5\xc2\xe3\xf9\xaa7_\xc0\x18\xb6\xa1x\x01\xe3\xf5u\x0f\xe2\x8b\xf1\x07\xb5\xe6\xc5X\x13kQ\xc6Y\xc4S\xe5\x1d\x03\xf3\xc3=\xae\x93\x01\x8e\xc38\x16\\\x90\xf8p\xc1\xea\x96\xc1$\xb8\x9e\x96\x96\xdbQ\xaf\xc3\"\xe9\xae\xaez\x8er\x92\x17\xfbh \xa2`\x92\x80G\xec\x0e\x18\xa0\x88\x81X\xbeC\xba4,<\xd1\x9a\xec\x15\xe3\xb2\xf2\x9d\x90\x90\xb4\xc7Sl\x1c\xa3\xa4X\xac0\x16\x81\xe7\xd6\x17\xf5\x1f@\x9bvK\x14a\xf4\xf4%\xe4\x89\xbf\x81/\xf6c?+\x08\x0f]\x8c\x96\xf6b\xb4\x9c\x87J\x99\xb8\x8b\x87N\x08\x8f\xf3d\x8c\\\x07\x82\x85\xa6\x01I\x8a\x85\xd92\xcd:G93\xdd\x15\x7f\xb8\x1e\x0c\xf1\xac\xb7\xe82U#Ou\x1d~\"c\xf3s\xea`;V\xbe\x02u\x8b\x1a\x95\x91Jw\xc1\x89\x12\xcc\x07\x84\xd7\xab;\xee%`\x90\xa8Zm\xda\xa3\x96\xb8\x9b\x80\x82ff\xe5]P\xd1\xaceF@\xb69Z,\xf3{q\xa5b\xcd\xc2\xa2\xa0\xc6\xcb\x90\xc8\xd5\xfd\xc0X\xcft\xbb\xd3\xb8\x86b\xdc\xfch\xba8\x08\xf3Pn\x80\x11\xba\xbb\xaf\xb9\xce\xeb\xb2 JD\x0c\xda\x8e\x83\xa3\xdcu\x0e1\x91\xa4]\x10\xa9\xed\xb7b\x8b5Q\x89\xd5\x82\xc6\xea\x0eEs\x96\x9e}\x12\x1d\xadNC\xad\xa9\xeb\x92\x90e~\xaf!\xc4\xfa dk\xd3\x84\xa0\x85|\xdf\x03Q\xcb0\xcbni:\x91\xb8\xe7R-CFU2\x94\xb9\x07\xffk\xf0\xd9\xbd\xc2\x16Q\xf2\x06[\x1b\xda\xfcK'\xe4\x8a\x16\xc9\x98\x9cG\x0bB\x8b|\x08\xcf\xbe\xb1@+\xa1\xe7\xacb\xe9_0\xdb\xad\xd7\x9fU\x02\x95\x16\xcf^\x02(1\xdc]\xef-dJ\xf3\xe8c\xad\x1e<\xae\x06Bc_\xcc\xd1\xf7\xf5\xc2\xdf\xaa\xf2R\x1ady\x98\x0b!\xc0(\x9c\x1d\xe6D'\x9cY\x1c\xae\xd2 #\xf9\x19k\xba\xba\xdao\x8d\n :hg\x91ri\x88Kj\x19\xc9\xb98f\xacd\xf2\xefW\xb0g\x184w\x98b\x03\xef'\x8fj\xc6k\xbd\x1f\xb0\xcax\xe5\xa5<\x11\xce\xe4/\x19o8\x994\x07\xbb\xcaX\xfb\x04\xc4\x10T\x06;p\xe9J\x8a\xeb\x12\x8a\x04\x06\x048w\xcaslau\x1e\x8d\x80\xd5U\x10\x0d\x1az`\xa1\xdfx\xff\x82\x01\xe2B7^\x9c\x15\x1f\xaefF\xdbH\xed\xe5_\xa3-\x95\xd6\xd7\xf7Q\x1c\x9f\x921\x89n\xf0\xb4,\xeb\xa1@\x19\xe7J\x92\xde\xda\x8e\xd0\xa2\x94]\x8f\x89\x7f\xfc\x9d\x9cN\x9bB\xa0\x92\xa3~*:\xf9\xd9\x17\xb2\xa0\xdau\xc4>\xba$?=\xec\xa7KR\x84\xedV\xed\"\x84\xebR'C\x84\xeaR'\x0b\x842\x99OC\xbc\x11,\xb4\xbeP\xd5\xfa\xec\x06\xd4\"\x88\x92)I\xb9\xf8\xe0FA\x94\x93E\xd6\xedhV?Q\xe9\xe1s\xf6\x8ag\xf7\xef\xf0\x1f\xcbP\xb7\xb5\x88W\xd0\xa6h\xb3&\xbc\xec\xd2v\xe7\xd2\xd3\xed\x13\xb5\xddy\xd7\xc6\xaeH\xd5\xe1\xeaR5T\x92\xb5R;\xecQKf\xdf\xed\xbe\xb7/\xd6\x9c\x85\x96\xa1\xad=\x1b\xa2\xbf\xd7\xa0kz1\xfd\x9b\xf5\xe2\x8ey\x14\x0eW\xdc\xedc\x8dGC\x99\x04\x98]\x91\xfd-\xfet=\xd8\x86\xad\xea^\xca$X\x84KE\x10\xf2\x81v\x11^$\x84\xe6\xb4n\x96\xcf:.\x96\xc9\xd9\xb75\x0f\xe2\x13K\xdc\x10xZ\xd7\x9e\x92\x8b|J \x06\xaf\xf1\xf0[/\xd6J\xb6p\xab\x80'\xeb\x82j\xe5\x9d\x8f\x8b\xe5\xc5\xe6\x07\xbe\xe3\xc1:P\xcb\xdd\xe4\xce{Y\x1dsi\x1f-2\xa2\x0e\xa2T}\xbf>f4\x19\xf0\xed|\xc0\xf4\xeb\x01\xdb.\xad\x0e\x81\xa6\xeeY\xdd\xcd\xa0\xfbd\x05Z\xa7+\x1dF*)]\xf7]\x81\xfd\x04{\xf9\x94$\xa3\xaaO|)\xd8)\xc7\xde\x1dy\x9e\x13Y\x96\xbf\x19\xc7V\xf3\x124\xa6\xf6*O\xe0*O\x06\xd9\x02\xb4\xb3<\xe0\xfaH\xc7\x86K\x93\xfd8\x1a_\xf7\x10^\xd4\xa7\xc4^\xa5\x87\xb9]\x88\xb3\x11\x9d\x03\x03pL\x9e\xa8^\x90S~\xf4\xf3X\xd4\xad\x84\xb6p2\x01\x07\xd6\xab\xcd\xab\xc1\xf8\xb8\x1b\xa1\xf1[%B\x91#\x08\xbdM?06\xee\xbd\xc9\x04\xd8g\xb5\xc3\xef\xb4\xb4\xbc-R\xb2\x8a\xb5\xa5r;\xebeo\xf9\xdf\x81\xdf\xca\x07~\xabj\xa9\xff;(\xd3?\x7f\xd1AY\x97\xceB{\x1d\xa7\xd5\x0f\xca\x0c\xa7\x0bx\xf2%\xf4\x9b\xb4\x9f~\x13\xf69\xcc\xea\x10#\xc2\x9e\x1ba\xba\xbaX/Dz\xa5f\xda\xcfX.\x82\x08$\xb6\xdbFuA\x9d\xbb\xc6MS\xba\xf8\xe9\xccs)jYx\xff\xd3\xc9S\x9e`e\x1a\xc6\x999\xe1\x0b\xe8\xa5\xf9\xb2\x1d\xdb\x81\xd7\xaaB}\xb7I\xe1\xd3L\xe4\xa5\x07\xf1\xa3\xf7\xec\xde{\xb2\\\xa1\x9fl\x1f\xb7X\xc6\xd9\xc2\xc9H\x8esrN\xcf\xc2\xc52\xeee#\xaf\xbc\xbb\\\xf6\xe5\x19\xdb\x1cxm\x8e'\xcf%5w \xfd\xdd`\xa2\xb5\xcb\x1bEF\xd2\xf2\x990\xb4:\x0f\x93ILNVi\xfb\xa6\xccw\xdc\xed\xbb\xa1\x0c^\xe7\x03\xe8\x1b\xbd\x85\xe132\x80\xcf\xe9y\xb9V1\x81\x86\x9dO\x9d\xc3\xf2e\x9bdtw\xb4\xeb8\xf8B\x86\xbc\xffbN\x96\xbb\xce9\xb9\xcb\xf7R\x12>\x92\x9b\xd4\x0c\x0c& \xda\x93\xe50R\x9b+\x06\x04c\x1d\xf6\x08\x9e\xc4\xd8M\x16\xfda\x0d\xcfkF\xbddX\xac\x05d\xc3\x1fi\x94\xb8\x8c}x\xfd8\x97EGm\xb0\x89\xfa\x06\xa0\xad\xf5(w\xbe.\x11\x1f\x81\x1fu\xe3E\x1e\x86\xe2E\x87\x7fz\xc1\x818\x91F\xa7\x89\n,\xad\x17\xf0\x10\x92\xb58\x02\x8f\xef\xc2g\xbdt\xd3\xec\xa6\xe9n\x8c\xf8h\x98e\xd1,a\x8c\xcc.\xa6\xd7\x92>o\xf1\xfc\xceMuE\xe4y\xb6\xef\xf3\x95\xa6bJ\x03]~\n\x03'&=\xf3\xc2c(8\xb4Ta\xac\xe9\x1dH.R]\xa0\x89\xd6\x1b\xc9\x90\xeb$X\xa7x\xda\xc5\x9aK\xd1\x83XO\x9ck\x19\xfe7_@\x02\xdbj\xa2\x7f3\xf6@\x99\xb9\xfc\"1`\x0e\x90P\x99tG\xd2\xf0\n\x05\x8a\xdaO\x91|,e\n\xdb4\x9a\x15\x12hm\xb3L\xda\xc7P\xce\xe3\\\xa6\xc1m\x1a\xe5%D\x99}\xaaI\xa7\x845xM\xee\x19\xfe\xf5\x0b\xbe\xff$\xa8\xd6X>\xa1V\x85\x91\x07\x01u\x15\xd2\xe0\x99\xc3R\xf1\x9eG\x07l{\x157\xb6\x9b\xe6\xc5r\xa6\xd8\x14<\x02F\xbd \x14\x05[\x9b\xdf|\xab\x0f\x86Q|\x91\xbbOn{\x99\xf7\x92\x8a\xb5+{\xad\x9f\xb3\x04\x8f\xf5T\x8b\x80\x95\x9b\xc2\xa1\xed\x87IBs`\xeb\x12B\xce\xfb \xccj\xa1\xd8\xdas\xd2!\x90'}\xbd:\xb0\xa3D\xed\xd9)\x99\x92\x94$\xe32D\xdc<\xca`\x1ef\xc9\xd79\\\x11\x92@\xc4\xaf\xb1D\x19\x99\xc0\x00\xb2bIR\xd7\xabA\xb0\xa1\x90I\x87\xf8\xb0\x86\xc7\x0dJB\xc9Z\x10\x1fm8\xbb\\P\x81\x86F\x0d\xfa\x86X\x843\xc2\x98\x1f'\xfa\x93i\xcb-\xc7\xa2y$\xab9d\x93`I\xd2,\xcarSX\x05\xc9\x14\x92\xee\xd3\xbdd\xa5\xe3kU\x1f\xd0o,=s\xaf\xb0\x1e\xd2~=dO\xe9\x06\xf7\x92U\xe1\x82x\xe9\xcd\x86\xe1\xaa\x12\x9aGS\xbc\xe68,\xb7oxYU|\xf2\xa4\x02J\xf1\x88\xa8G\xbe\x066\xd8!\x08p1\xf8\xaeZP\xe1\xcb\x92\x91\x0e\xf4\xeayUd29\xb7\x89\x12\x13-%?\x93\xfb\x03zk7\xa0\xca\xa7\"\x0f\xa9C\x8a\xda\xfa pFI\xceS\xc20\xf1\xfe\x9a\xdcsdNi:&\xc7\x12\xed\xbe\xc85e0\x10\xb2.\xbe\x8a\x8b\xf4\x91\xfdcUM\xf4\xbbb?\xb8\x86\x80\xf0\x11\xe9\xd7\x1f\x1eQs\x1b6\xbd\x92\x86\xba\x84\x0f\xf9\xc8\x05^\xc4\x06/F\x83V-\x03\xfc\x8a\x84=\xb5\x0f'\xc1\x84\xf2\xf1Z*\xdb\x97^.L)\x8a\xed\xa5\x1b\x0d\xf2I\x82(\x13\xbc\x8e\xdf\xd1a\x02L\xd5)\xab\x9f\x19\xdb\x07\xcd\xcb\\\x87\xddGtg\xd3\xd7\xcf\xbf|\x90\x0e\xa6q\x91\xcd\xfbN#TS\x99\xf3\x9a\xb6\xb4\x13Hf\x8c!\xc7\xab\xb4\xafEk.\x1a\xb2}NOXz\xea\x97\x93\xd4\xa7cI\xc3\xc4$\xce\x18D|Z\xe5r\xad\xfeS\xca\xba\xec5\x9f\x98_\xa0\x86\x03\x1b\xc6J\x0c\xe3^$\x91d&--K\xec8\x81\x04\x0d\xb31\x7f!Wx\x14E\x9e\xa4\xac\x08\x0c\xa2X\xfe\xfeR\x0c\xe8\xf1i3{\x07\xdf\xc1\xa9\xee\xe5\"(\xdd\xe6\x98<\xd6f\x8c\xd8\x8en_\xa9Aj\xcd\x87\x9d\"\xa81r1\xb2\n\xf4=A\x07?\x83\xe8|\xc6\x84O w\xcb\x94d\x19\x93\xda\x17E\x96\x03\x89\xf29I\xe1\x8a\xf0\x06h\xaa\xc8\xd2>\x06\x1dv`\xbd\xfc\x90\x862I\xa5\"U\xba?\xe7N\xae\xc8\xdb\xa8\xe8Pz\xd4\x8ei\x92\xe5i1\xcei\xaaS[\xe4#g\xc0L\xef\x95F\xda\x8e8\xa0>R\xff\xb4\xbbA\xa9\xba\xec\xd0\x94\x8cICK\x92{\xbb\x02\x1bYM\xa2\x86]\xd0\xbe\x17\xf3>DUN\x8a\xe5l:\xeb\xa4\xc3t\xcf\xf2T\xa0a\xbd\xf2\x81\xf630\xbf\x8f\xe2\xf8S-\xcch\x95\xab\x8b!\xaeb`n\xdc\xbf\xe8\xb2\x97X\xac\xc9\x7f\x89K\xac\xdcH;\xb7\xd0D\\\xc6\xab\x8dF\xbf}\xe2\xe8k\x8b\xff\xcf?\xcb\x8c\x85\xb84+g[\xc5\x01\xb7Q\xd2[\x8f1\xddi\xf6!\xa9<}\xb5\x93Q~\xac1}I\xb7\x01\xb5\xe74\xbdK\x16\x9f\x83\xbc\xb8t#{k\x92Xzw\xf1o8\x97\x10\xb9\xbe\xec\xf4\xe5*\x91\x15J\x8a\x04R\xb1k\xbfM\x82\xec\x95\"\x9b\xbc\xbaG\xf5\xc6\xe68\xc3\xa3-TUNP\x1f\xb1\x9c\xef\x8a\x90\x0fB\xab2\x03\x16\x02\xd0\xde\\\x86PQ\xb2,\xf2S25\xc3\xc5}\xcd1\xf2\x916\x9c\xff\xf4I\x1aUZ\x7f\x89\x07y\x19\x96<\xf5\x98\xb8\xb3\xa9XA\xec&aR\x9a\x84\x13n\x12\xc6\xac\x85\xf6\xcfK\x1d\xca\x08\xf4\x80~/\x8e\xa0\x18\xc7\x07G\x12\x85S\x1aQ}pJ\xa2\xc0d\xd1u\xa2\xc0\x83\xfb\x16Q4\xde\xf2y\xe7\xed\x8b\xb9\xe5?\xe4k9G\xd6\xd3\xffqG\x0cKt\xf3\x86]\xcb\xdc\x95_/\x1d\x01\xc4o\xfd\xbe\x06C\x08\xfb\xb6g\x88\x17\x0eC#\x910\xba\x98v\x0c\x89\x95\xd3\x8e.0\x1c\x96\xe3a?\x8c=)z\xb5T\xadB\x99\xba\xb4(r\xaeueb\xe8\xba\"\xf3=\xd8\xd6\xdd\xd7\xad\xcd\x06D{\x93h\x8b\xc2\xad-\xa3\x0d\"w\n\xd9\xc1\n\x97\xf8W\xc7\x99\xa5\xe5\xae\xa0\xdc\xd3\x9d\xd1\xdd\x92\x8cs2QM\xfcmBIa\x07\x8e\xc3\xe3v\x01cz\xce\x85\xf0\xf09\xbb_\\\xd1\xf8\x83\xa6~\x04;\xb0\xf1\x7f\x7f\xcf\xd6\xff\xfc=[\xffjc\xd6\x86\x08\x11\xe2b\xb0\xfea\xf3\xeebs\xf0}8\x98~X\xffjC\xe3\xe6T \xe4\xe6\xd5\xc5\xe6\x96\x01\"\xe3\x10\xf4bs\xf0\xad\x01\x841A\xcc\xad\x7f\xa8\x93\x1d\xd8\xde\xaa\xa4f\xa9\xe9\x81B\xe7:\x11NM;R'\xc3\xd7\xed\xa6\xa6\xfa\xa62\x12OY\x0d\xf5\x7f}\x9b\xac\xa4\xdd,\xdb\x80\xc6x\xf6\xcb\xfey-\xe7\xd9\x91\xd6\xa7y\x949\x9e.\xec\xf2\xa4R\"+\x16,\xd3\xe4\xb4\xc1\xe7\xb0\x03Ga>\x0f\x16\xe1\x9dF\xac+K#\x8d\xf8\xd2\xef\xb6'\xef\xf028`\xdbNBou\xf2\xa7r^\x07\xea\xb9\xd8L\xaf\x7fH\xddC&\xba1\x1e\xa8\xac\xad\xf1\xac\x18\xb5 \xd2d\xddiz\xa7\xea{\xa3\x89\x9e\x08\xd2\xac\xa0\xc9\x97nK\xd3\xc2\xeat\xebX\xa2\xbe\x93\xe1\xba\xab5\xde\xed\x16\xd0hD\xa0BC\xaa\x066\xc0Z}\xf2\x04&B`\xf3@{i\xe5AM\x13\xa4\xb1\xcdc.\x15KF\xa9\x9b2\xa8PmBdF)\xdc\xbdQ\xe5/\xffF'U\x93\x17\x1a\xec\xc0\x8cm\x86\xbb\x90\xc3:\x8f)\xd6u\xc6\x0c\xcd\x0cJk\x9a)\xac\x12\xe6\x13\x18\xc2\xba\xe6\xf3D\xb8\xdc\xf2\x84~\x11\xe6\xf33\x1f\x97\x16\"\x1d\xb4\xe5,\x90\xcdp&\xc1`\x17bW\xe4!u\x9f\xa2\x86\xba\x0bOa\x08\xdf1l\x84\nX\x8a\xfdk\xd0\xb3\xfaK\xf5\x8ci0\x17\xed\xa1>\x1e\xd1\xf9\x10a6\x99\xc2\x87\x0c\x85\x13\xf4w\xd7\x0b\x1cSn\xb2\xd3\x96--e\x13\xb4\xd9\xebIH\x9fpLo\xa8K\xbc\xc6v\x02\xea\"\xbe\xea\xf6w\xb4\\_b|2\xb2Jv\x8ca*\xe9\xdbx\xa0\x17_\xa8x\xdcr\x9e26\xae\xa1Js\xa75\x91;\xe5#;M`\x00\xb1\xb5gJ\xc0\xbd\x98\x11W\xc2T\xb6\x9c\xff\xb5\xcdu\xb7%zB\xc0\x00\xc6\xac\xac\xad\x04\xd8\xfax\xdb\xa9\xf4/l\xe1\xff/k\xf9\xc6\x8c9\xca\x18\xd5f$\x17\x82\x99{\xeb\xf7\xdc\x05K_V\x18\x80\x8b\xb8\xea\xbe\x9c\xba\x84]\xb8q\x13\x1fBYi\xec\xa1\x05\xdf\xb8a\xae6\xab\xa3\xce\x9d?S\x08i\x02\x98\x1dk\x17\xae\xf89\x82\xdb\xa4\xb4b\xb5\xaf\xdf\xf5\x99/\xf3JHx\x1c\x06\xcb\x8cR\xd5\xa5\x8c\xe7\xe4\xe2.\x10L63EJQ\x1bP\x086\xf3\xdaV\xfe.\xb3\x86\xa80\xe6_k\x13N\xee\xf90\xad\xf0\xa9W\x14\x01g\xd6F,\xe2^\xb42c\xed\xcf\\\xb9\xa6\x00\xfb=\x17l\x86b\x8c\xaeq\xcf\xd7\xf4\xdc\xe8\xc5\x95c\xe4\xe8\x1ccbn\xfa0s\x85\x15\x06\xf7\xec\xb54\x88 \xe6f\xe0Y\xb0]\xb6[;\x8b\xf0\xee}\x18\xe5\xdc\xfd\x8cq\x98\xb9{\xef\xa6\x81x-[B\xc3{\xe8\xe3&\xee\xe4i\x18\xc5\xc8K\xd1em\x17\x9b\x96/a\x08\x13L\xe0\xd7\xffhT\xb1\x00#\"0)\x98\xc4B&o_\xf1\xebG\xb1X\x15\xd5\xd2ic\x87}\xbd\xf7\xb9\xafn2v\xa1\x80!\x8c\xdc\x85kH\xf0U{\xa9\xb8\x87IW \x1f\x12\xf7\xd9\x96\xa8\xdc\xa1\xe5I\xe7\xc2z\xf7\x9c`#\x8c\xe3\xe0c\xe6\x0c\xe1\xf9\xf3\xe7~\xab\xb0\xc8\xe7\x1b!6\x9aq\xa8\xa7\xcf\x9e\xea\xa1\xd0\x88\xc7a\x9e}\xffL\x0f\x93\x92I1&i&\xc1\x0c\x1f\xccd\xe2! \xf7\x8d\x01nI\xc6\x83\xdb4\\\x0ej]|\xf6\xfd?[\xf0\xfc\x10)k\x8e\xa5\xdd\x01 8'\xf1\xb2\xec\xe9\xd3g\xed\x01I\xc0\xda\xb8\xbf7\x82\xd5\x87\xfe|\xb3\x8dE \xd9\x18\xfd\xf3\xcd-3(C@mH\xcf\x9b&\x06'\xd8\x98\x10\xb2\x1c\xc4Qr\x1d%\xb3\xfa\xb8\x9eo\xb61[\x83V\x06\xf7|\xb3\x8d\x83\x1al\x1c\xde\xd3\"\x97\xc0m\xcc\xd6\x80\xcb|K\x83<\x9c\xe1\x1c.I\x1a|\xcc\xee\xb0\xf2\xb7}+7+\xb6'~Bo\x93\x98\x86\x93A\x91\xc6r\x96\xbekA\x914\xad\x93\xc6\xd6\xd3v\x1f\x18\x10\xdeG\x18\xe4i\x98dS\x9a.H\x9am\xcc)\xbd\x16-?mO\x95\xa1R\xedGB\xf3\x01\x9d\x0eP\xc9\x16\x0d\xb5\xc9\xa3OC\xcb0\x0d\x17$'\xe9\x80&\x84Nec\xed\x89\xeb\xd3\x18\xd3d\x96\x03\xe9\x0e*\xdbj\xcf+kK]\x04[\xedE\xc0@\x1ak\xffi\x9bN\x19Ts\xe9?m\x13(\x8f\x9dP'\xcd\xf6\x8c\n(\xba\xccxV* \xd9\xee\x1c\xa7\xdb\xc6\xce\xa0YF\x02N\x1d\xea\xd36\xbd \xa8\xe6h\xdb\xd4$\x00[\x03n\x0f%\xa6\x8dm\xe6\xbb6Rh\x98=knn\xed\xceq\xa8\"\x9f\x0f\xc8]N\x92\x8cAo\xe0\x06\xda\xdct44\x83\x95\xcb\xe3\xc5l\x83\xf1\xa0\xabp|\x9d\xc9\xd5\xa7\xc1F\xb3\xce<\xcf\x97\x03\xd6\x01YG\xc3M\x9au\xd4\x89\xd6\x90C\x13\xbc\xda\x1c\xd8vQ\xf6\xad\x8dVs\xc5\x8c\xa7X+\xfb\xd8\x8d\x8b\x94\xfc\xbf\x82d\xf9\xe0\x8aN\xee\x07d\x12\xe5\xb4\xdc\x93\x9e\xb5\xf7\x04[\xed\xb2\xc3m\x8aiV\x13\xdd\xac\xb2\x1d\x95\x9fl\x13\xaf\xa1n\xf9\xb5\xf6\xb2\xc0\x1a5n\xf1\xcc\x80\xfc\xda\x04\x19F\xdb`\x7f\xcf\x0d(m\x92\xe1s\x03y \xe3Sh\xb8E\xbe\xedmJ[OO\xfb\x86\x8f\"\xb0\x82C\\HQN\x16%\xde\x0d\x0b\xa0YQE\x98F\x04\xd1\xd6Q\xa38p\x1b\x93D\x91\x01\xe3\xcd\x06\x16az\xcd\x98\xa1\xfc\xaea2[\xd5\xe8\x84\xc4r\x80\xcf\x0d\x84\xd5\xacD\x938J\xc8\x00\xaf\xb6\x859M\x07W\xe1dF\xe4\x97\x0d\xb4\xd6l\xa4df\xd5B4\xac\x89f\xcd\x1b\x9e\x02r\x90\xe5\xe1bYV\xd6\xec\x00 \xd6\x8aINjs\xb2\xd5\x1ef\x86\xb71\xb3\x8d\xa9\xc0\xdf\xd6\xf7m\"\x910\xb5\xad\xba=\xbd\x8c\x06\x9b\xdcF\xd3\x18\x83R[\xd2\xec\x94\x08\xd3\xe04\x9a\xcd\n\xc1\x1aD\xfeT#U\"\x9cF\x9c~\xde&k\x99\xd5\xeecc\xb4m\xc8\"\x8f\xe2\xba\x8c\xdc\x9e\xc4\x9b\x88\xdc\xd6`\x9e\x1b`RJ\xf3A\x94|$\xe3\xbc\xec\xdcw%\xa46]\x0d5^\xd8I\xdc\xa8fly\xd0\xd4\x8e\xda\xb5\xa5\xad9\xbd \x8d[Z\xfc\x06M\x0e\xeb\xb0U\xbb8S\xbf43\x8d\x92 ,\xf8\x0d\xa1\xaf\x1dX\x07\x02\xeb\xe0|\x1d4\x0d\xbdR\xd7V\xfa'\xff\xa2\xc15\xb9\xb7\xe6O\x16\x95\xc5\x11\x0e\x83v\x95\xcb[\x0f>\xd0 %\x19\x8do\x08St\xeb\x17\x1d)+\x8d\x98\n\xbe\xb5\xf9\x0d\xc7\xee\xc3\x07\xef\x1f\x0f\xde\x8b\x7fll\xfc\x1f\xc8h\x91\x8e\xc9Q\xb8\\F\xc9\xec\xdd\xe9\x9b\x9d*\xc3\xe1\xe0\xaaH&1[\xe7\xc1\"\\\xfe\xff\x00\x00\x00\xff\xffPK\x07\x08-\xe3\xb5\x97=9\x05\x00\xf7\x0c\x1b\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x00 \x00swagger-ui-standalone-preset.jsUT\x05\x00\x01\x80Cm8\xec\xbdys\xdc6\x9a0\xfe\xff|\x8aG|w\x152M\xd1\xdd\xad\xc3:,k\x1d\xc7\x9e\xf5\xbb\xf1Q\x963\xf3\x9b\xb7\xa3UQl\xb4\x9a1\x9b\xec\xe1!Y\x13i?\xfb\xaf\xf0\x00 \x01\x10 \xd9\xb2\xb33\xbb5\xacT\xac\x06A\xdcx\xeec\x0b\x16U\x1a\x95q\x96\xba\xa5\x0f\xc4\x83\xdf\xfe\x00\x00\xe0dW\xbf\x92\xa8t\xe0\xf4\x14\xca\xbb5\xc9\x16@\xbe\xac\xb3\xbc,`{\xdb\xf4v\x95\xcd\xab\x84\xc0\x19\xff#\x10\xb5O\x81\xb8\x1e\x1c\x83#\xba\x91?\x9a\x93E\x9c\x12\xda\"\xfb+\x08Ws8\xe3?\xdc\xd9\x05\x0e\xe8\xb8k0g\xe2\xaf\xe0\xfc6\xbc\xbe&\xf9\xcfo\xce\xcb0\x9d\x87I\x96\x92\x0f9)HY\x0f\xa1\xec\xab\xf3\x87\x07\xb7\\\xc6\x85\xdf,\x89X\x8e\x9c\x94U\x9eJK%^\xd0\xe7&\xcc\x81\xc0)\xfc\xf6p\xf2\x87\xbaPT\x85\xd4\xcd\xe5\xca\xf4\x89\x17\xe0\x92Y~\xe1\x89v\xe9\x0f\xb1b'JU\xdavLG7\xcb/h\x17\xcaKl\xeb\x18r\xbfU\x9a\x1c\xc3\xd6\xa4]\xcc\xbb8\x86\xdf\x1e\x94w\x0fj\xa7|T%\x1dU\x14&\x89\x1b\x8b\xc1\xf9\x10\xfb \xfdJ=\xfa3\x81S\xd8\x1aK/\xea\xd6\x9anx\x9bi\xb0\x82S(}H\x83\x88N\x8b\xfe1\x87S\xf5\x10\xfa\xd0Z\xb24\xc8\xf8\xf9\xbc\xbf\x87\xf7x\x1c\x02vL>\xe4\xd9\x9a\xe4\xe5\x1d\xff\xb2\xbdBQ\x96.\xe2\xeb*\x0f\xaf\x12bY\x96\xb4Z\x11\xf1~\xdc~\x7fM\xcac\xc8\xd5\x15\xf3\x9a9\xd29\xa4\xca\x1c\xf4\xd1\x8b\x13R\xd2\xa3^\x06\x97\x97\xa4x+\xeeK\xeb\xac\xc9\x8f\xd8 :\xd7\xb0JJu\x0cp<\xec\xeb\x01{\x9d\x06s\x97\xf8\xe0\x84\x0e]d\x1f\x88:\xbdL\xdf\"\xbd;\xde\x0c\xdf\x99u\x9e\x95\x19\xbd\xa9\xc12,\xde\xdf\xa6b\x8f\xd8i\xc2\xef\xd5\xf6\xd7p\n\xce\x93y\\\x94\x8e\x0f\xa9\x9b\x06\x14pL\xc7\x07\xac\xda\x83;\xd3\xceG*\xf7\xefT\x05\x81\xa2\xcc\xe3\xa8tN\x94[\x99\xc3)\xa4\xee\xfe\xd4S\xf7\x94^\xa8\x99\xf39N\xe7\x8e\x0fNN\x8a,\xb9!\xf4\xcf(K\x8b2\xaf\":\n'N\x8b2L#\xf2~A\x7f\xads2\x8f\xa3\xb0$\xec\x935\x05\x1b)\xd6\xe3[s^\xde%\xf8\xb2\xa0\x7f\xbcH\xe2\xb0 \x85s\xa1\xf6\x9ca\xcfE\x14&a\x8eu\xc9_+\x92F\xf8\xdd*\\\xaf\xe3\xf4\xda\xb9h\xe6PJ`\xb4s\xf9\xe9dS\x1f\xaa\x936\x9c\xa1\xb7\x8c^\x9a\xdf\x1e|\xb1=\x9f\xc9]\xe1\x12/Xd\xf9\xab0Z\xbau\xd3\xadvE+;\x138==\x858\x88\xd39\xf9\xf2~\xe1\x12\xcf\x83r\x99g\xb7\x90\x92[\xc8\xdd\xef~N?\xa7\xd9m\n\xd9\x1a\xa1\x9e\xf3\x1d\x8c\x80\xc0\x08\xbes .`EJ\x88S\x06\xd8c\xac\x90-X\x9d\x92\xd5\xf9\xcb\x8b\xb7?!l\x0f\xbe\xf3\xb4\x8b\xe6\x03\x05\xcaA\x19^3\xc8\x81\xbf\xe8\xe6\xd1\x99\xb1?\xee\xef!\xad\x92\x84\xbf\xe3\x1b\x8a\xaf\xc5\xdf\xf7\xf7\x83\xae\xca\xd6X\xed\x9c\xb7X\x9f\x0bl\xb3\xf9%\xb7\xda\xba\xf4`\xbd\x81\xbc\xd5\xe6\x80a\xb3\xd2Ou>\xf5\xd1\xc3j\xcd/}\xd6\xfcL\xf2y\x8b_j-\xf9\xb0bE\xa5@\xad+\x1fd8\x057\xc5\x0f\x94\xd2\xfa\x83\n\xf1\x9f\x8f\xbf`\xeb\xf4\x14R\n\xea\xe4\xf3\x96\x1a\xce\x9bq\xcd\xd2Yy1\xf0h\xd2\xa7\x9a\x9d\x97y\x9c^\xbb\xc4\xa3\x18\xb2lUzh\x1f\xa8\xca\xf3\x81\x1f\xe9\xac>\xd2\xf5\xb9\xb2\x1dm\xd0F%\x1e:\xba\xc8\x87\x85\x0f\x89\x0fk\x1f\x96\x8c\x06\x81\"x\xdd\xa6r\xe83\xaf+\xfc\xd1\\\xe1\xa6\xaepn\xaepWW\xf8`\xaep]W\xf8\xc1\\\x81\x12\x88\x94\x0b\xc8\xe1\x18n\xe8\xbf3\"N\x17A\x1a\xf8\x81\x12\xf3\xae(\xfe\xed\xc1k\xe8\x0ds\x8b\x97\xbc\xc5\x98\x9eB\xd1Z\\\xb7f\xfe\xe8\nN\xe1\xb2i\x19\xbf\x91\x7f\xe3\xa7'\xadO\xe9\xf5w#Dvx\x98\x10hz\xb8?\x94Lv]\n\xec\xb7\x96\xf4\xdd\x8a\xfe\xef&\x8b\xe70F\x90\xb9\x9aE\x17\x1e\xe5\xa0\xe0\x18Ro\x16]\xf8@\xe9\xa2kZm\x01g\x10\xba R\xc6\xc7p\x87L\x98\xe9\x0e'X\xef5\x7f\x83\xf4\x96\x0f \xfd&\xf1Y\x87\x95\xbb\xf2\xe9\xa1\xa0P\x1e\xb7\xe1g\xcf\x87\xcbYt\x01[\xa7\x90\xe0\xcdu/\xb1\xc6\xda\xf3YOW\xf2[\x17\x7f\x9dB\xa2\x81\xd5f)\xf2 bw9\xf6\xe9I\x83S\x98\xd0?\xfeHI:\xfa\xc79\x9c\xc2\x1e\xfd\xe3\x03\x9c\xc2!\xfd\xe3\x07Z\xe7\x80\xfe\xf5g8\x85]\xac\xf53\x9c\xc2\x01V\xfbH\xdfN\x0f}\xe5\xc6\x17\x9b\xdd\xce]\xe3\xed\xdc\xd3\x8b\xf9\xed\xd4\xef\x1b\xbd\x9dO\x9c'\xd7\xed\xcb\xa9\xf7n`]@b\xe38\xaa\xca\xdc\xd2\xb3\x1c;\xda\xa8\xf3\x8c\x02H\xd2>\\\x1c\xde:N\x83b\xdd\x10F\xa7\xe0\x00\xfd\"\xa5\x18\xe7\x14\x91\x0f\xef(\xf7(%\x90\x84\x11q+\x1f\x9c\xed\xbfVYy\xe2x\x88\x99\xbe\xf3|\x08a\x04\xces\xfamL\xffz\xf6\xc4\xe1d\x9b\xf3\xdc\xb1m\xeffD)\xe7\x8b\xe5\xf2\x94a \xe2\x86\x9e\x0f\xb9\x9b\x07\x1f`\x04y\xf0\x1a\xbe\x87\xd8\xed\xa4\xd2\x04\x1f\xe580+/\\:\x07\xeb\"\x11\\#\x12\x94\xd9O\xd9-\xc9_\x86\x05q\x91{$A\xb1N\xe2\x12\xbf\x0e\x12\x92^\x97Kx\x0e\xbb\xeat=\x1f\x1c\xb6\x86\x94!\xe9C\xdc}\xe8\xc9\xa9R\xc6\xac\xce\xe9\xce\x89\xbbz\x1b\xa7\xf3\xec\x96n\"\xfb+x\x1b\x96Kz\x97\xf1\xdf3\xf1\xfe\xd8\xf2yA\x92\x05\xfd\x98\xfe\xab\x7f\x8a\xef\x8eA\xc0\x01\xd7\x11\x84\xe82.\x1c\xcf\xf5z\xf0\xe05\xc7\x83\xd7\x8f\xc0\x83G\x9d\xa4\xca\xbe\x8e&\xd9\x8d;\xfa\xdfC\xaa\xd8\x89\xb8\x03\x9d\x16\xa0Kb\x90m\xc9\x1b[o0#\xa5\x91d\xe5\x7f\xf27\xed\xe5\xcc\xe9\\b\xfa\xbf\x01\xfb/\xaf^6\xf8p\xbf\xc8\xf3\xf0.\x88\x0b\xfc\xd7\xdcX:\xb8\xb1\xff\xe57E\x9e\xf2\xb0\xb3J9nN\x17\xd0\xbe\x04;\xf2\xe9nM^\xe5y\x96\xbb\xce\xcb0\xfd\xae\x04\x8a\xdd)k\xbd\xcc\xe6\x90\xa5\x00\xec\xac\x9aey\x9bB\xb0\xa6\x15E\xb4e\xb9Vt\xb5\x9a\x1e\x94\xf3\x95\xdfi\x9f\xd0\xf6\xd2\xce\xd3\x89wq\xec\x03\xb9 \x13\xcfuXq\xd3\xfee\xd9\xc7\xbf\xcc\xfb\xf8\x97\x9b>\xfe\xe5\xae\x8f\x7fi\x18\x9c?\xdb\x19\x9c\xe5\xa6\xec\x08\xe5aV}\x8c\xce\x15o\x99\xb2Ns\xc1:\xd9x\xa5.\xdee\xa9\xf1.\x8ckY#3\xa0q-W\xc8\xb5loC\x88\x8c\x05\xbb\xbc\x94\xd5\xa1,\x0b\xf2\n\xc7\x90\"3\xb3b\x8c\xc3Rc^\x9a\xd3\x8f\xb5\xcf\xb0\xb6`rh#Y\xcd\xf7\\\xd7\xdc\xc8\xe9)\xb2:\xdd\x92$\x90H\xc6F\x90d\xa7\xd2\xc5C\xaf'\x05: Dr\xecf\xda?\xa0Oq\x1b#T\n\xf3\xebjE\xd2\xb2\xe0\xb4e\xdfw\xf4\x89\xc2\x82\xc0\xf8\xb8\xb7\x1eH\x02{r\x0be{\x0b\xf5\x07[\x9el\xde\xb2K\x0c\x94\xb5\xfe`\xe3\xd3\xc74\xae\xd0\xd4\xa6\xe7\xa1\xf3m\xab1\xba\xa1\xd6/\xecm\xd5\xea\x95p\xbdN\xee\xb8\xf2\xaf\xde@s\x8b\x0f\xe6u\x11\\\x87\"!\x904!\xb2J\xa5n\xcaE\xce\xfc\xa6\x93\x9b\xcfl\xdc<~\xe6\xba\xab\xe0&\xce\xcb*L\xf0\xe25\xbf\x10\x96x\x9cW\x17\xbc\xfeG\xfa\xcd%\xfd\xdf\x16\xb2\xfc(\x0f`\xdc~\xe2yV\x8e\xfe\x1f\x85\x8b\x9f\xeab3.dk\x953\x1cu\xa8#4\x8a\xa2\x8c\xca\xc3f\xaa$X\xb06\xf7=83W\x96\xd5n\x16\xccE!H\xee\x96\x9e\x8f\xb0'\xa3gtk\x8c\xdc.jL=\x03Y\x04\xcd!\xaa\xeaf\xd5\x0d\x91 \x9f\x87V\x7f\xce5)\x1d\n\xbc\x91\xb8r\n\xf1\xcb@>\xbe\x88\"R\x14Y\xce\x08\x8a\xa2Z\xd3\xfd \xf3-\x0bA\xe1\xdc\x84IEx\xdb\xf4\xd0\x95\x0cY\xa5\x01\xbe\xf0\xfcMI\x0e\xf9\x08l\xa5\xee\xf4\xc8\xb3\xf3\xfd|\x0cO)\x9e0+~\x7f{\xe0\x8a\xcb\xf6\x82\xa2\xe6\xb6S\xa4 w\xd1\xbe\xa0\xea\xfa{A\xd8\xcc\xb3\x9f\xd8o\xe4\x1f\x9a\x1a\xb4\x8f\\\xb4\xebWS\xa3\x06u\xc8\x92K\x82j\xcb%\xda\xdd\xb3\xb0\x85\xa9\xbb7\xf5\x14dk>\xf4\x82\xc5\x0e\x16\xbcF\xecNh5\x99t\xef\xbf:\xb5\xf1\x01;b\x1b\x9f-I\xe67\xb1L\xa8\x9b0\xdf\xa2\x17\xb7}iT\x1a<\x05\xc6k\xd8\xaeL\xdf\xa0\xfb\xf8`uX\xff\x8d\n\x8dne\xba\xb2rCd\x82\x88\x9bc\x1f2\x1f*\x1fB\x1f\n3\xa8\xa4@d\xcbHc!\x03\xd0\xc6\xb9\n\x8fL\xc9T\x88\xe8\x1c\xc9-p\x18\xf76N\x99B\x8e|\x89\x08SJgQT\xe59\x99\x9f\x00\x9dd\xb9$\x90f\xe9\xceJT\x9c\x93\x1b \xe9M\x9cg)\xc5\xffH\x0e\xd3J\x8b*I\x80\xd0VaE\x8a\"\xbc&\x10\xa6s\x08\xe7sTe\x87 ,I\xb2^T \xdc\x86y\x1a\xa7\xd7E\xa0\x9f\n\xfa\x90\xa4 \x1dD*E;3}\xb1.\xcct>}(\x86\x1f\x9bi\x11W]\nR\xcb\x80\x9f\xfck\xf1\xe4\xda`\xdedz\xf8A^\xcc\x92\xd1\xe8\xc2X\xeb\xc1\xf3\xbc \x0dW(\x91}\x93\xde\x84y\x1c\xa6%\xfc)\xce\x92\x10)\x99\xd6WmJ\x8c\xdd\xb2(X\xe4\xe1\x8a\x14\x9f\xb2\x0f\xd9\x9aQ\x1a\xd1\x1f\xcc\x1f\x0e\x82\x01}\x16!OM\x9c\xae\xa4\xac\xeeW\xec\x0b\xb6bvaa\xa3\xd8\xa5\x8eS\xca8\x90`]\x15K7\xed\x10V\xab\xb35_\xacD\x9d\nW\xf2\xca@.\x0b\xe2tI\xf2\x98\x83\xed\xdd}O\xfd\x84\xb1\xe8\x93C\x1d\x03p\x1e}\xf2\xd4\xd8\x16e\xbf*\xe9M=?\xdaK\xec\x86\x0d\x91\xeb\xf9x\x0b\xc7'\x10\xc13\x10\x1c\xd0 D\xa3\x91\xbe\x88\xe2\xc8\x17\xb3H[\xc2\xa4io\xb6`\xcc\xb1Vt\n\xa1R \xa3\xc2f\x94|\xff \xb1\x80\xf9\x16\x8b\x97x\x9e\xccY\xd0\xef\xd4\x91U\x1c\xfb\"\x9b@\x89\xbbP/@\xa9\xec\x16\xb3,(\x83\x9c\x84\xf3\xf0*a@\x98\x1bi\xf0\x92S\xd8\x9a\xb4\xea\xdf\xe6q\xa9\xd6\xafKD}Z\x18&Iv\xfb\xefa\xb2x\xbf&)7\xbdS\x1bRk\xd4\xad\xb5>\xac\x9b\xcc\xd2\x88\xb8\x0eA\x83\xa8u\xf7r\xae[P\xc3\xd0\xf6\xfd=+\xbd\x14\x138/\xc3\x92\x04$\x9d\x13\xb4\xd6\xc9\x83\x94|)?\xc5\xd1gw\xc9\x86\xd0\xdd\xe9\xb2\xbd\x87%m\xcd5\x89\xf2\xccTb\"\xf3b\x8e\x18\xd7\xbf\xc7\xd7\xcb?\x87%\xc9\xdf\x86\xf9\xe7\x16 \xa9\x18\x06j\x86\x83\xfd\xa4\xa5$\xd5\xd4\x17b)w\xab\xde\xfdfB\x9e?h*sR\x94yvG\xe6\xad\xe1\x0f\x1e\xa2$\xcea\xa3\x15\xe7\x14G\xab |\x0c\xf3i\x8e\x98\xfaeP\x8f\x8d\xd60-D]Acu4a\xa12\x113@\xfe\xfd\xa7\xd0X\x9f\xd9&A\xabx\x1d\xdb)m\\p\xc9\xbf\xea\xa3\xfc\xb1C\x86?\xaa$\x11\x17\x16\xcf\xbe/\xdf#\xe2\xcb}\x7f\x13499\xda\xb3\xea\x8a\xec\xbb!\x8e=\xaetN\xd7\xb56\n\xeb\xa3\x8a7\x1c\xdf\xde\xc1\x9e\x01\x8f\xbf\x0d\xcbe\xb0\n\xbfv\xeds7\xde|\x02\xd2\x80\xcc\xe3\xd9\xb73\x88LZ2\x90\xb5\xfb\x87a\x10\xa7\x87\x1b/\xf0\xdf\x85A\x1c64!\xaci+\xc1J8\x93\xee\xa0\xcd\x19\xe3\xdb\x8f\xa8S\xc8\xb5\xb5U\xba\x1d\xf2-\xebg\x9a\x85\xeec\xf7\xdeb\xaeg\x16$\xee\xeb\x06\x96\x8c\x90>:\xf4\\\xa7\xc8#\xdd\xd4\x81\x92\xd3\xb5\xd0\xb6\xcc\x98\x1dI[\xfd\xe5:\x0e\x8c \xf4\xb8=\x8a#j\xca'\x06-\x08\x838-\xd6$*\xcf\xb3*\x8f\xc8\x90C \x08S\xe9f\xf96K \xc1\xa5\x87&\x12=\xb2Y`\xa4\xea\xa9\x8e\x10\x7ffn\xea\x83CYB\x07\xf5@q\xf3\x9b\x1e \x8a\xbc\xe8\xadm\x8c\x97\xa4\xcf\xaa\xe6\x8b\x8a\xd7;\x03\\\xa1\x92i\xb1\x8a\xe0\xd7,N\xdd\xda\xda\xd7\xc3\xf6\x90\xe2\xcd\xe1\xac\x86\x07p\x0c\xa1\xf8\xa9\x94\xc6\xcd\x818\x06wN\x12R\x12|\xefK\xaf\x14K\x8fF\xf2.\xd3[\xf56u0\xd2\xe2.\x1a\xef\x19e;894\xab\x90\xc1\x91\xf8\x08\xb9\xffot\x0d\x7fo\xc0\xb01\xd66_\xbd\x03\x93\xa2\xd9M\xdd\x83\x03\xcf\xc7\xf7\xe3\x86 \xb69\x98\x18\xaf\xe9\xe4@7\xf3\x0b\x8d\xaeT\x9f\xc9\x9d\xd9\xff''\x0b\xf3\x8b\xcb\xcb\x82$\xf6wx]\x8f[ \xcb\xe4%VX\xb7M&[\x83\x9c,\xa4\xcdh7\x13\x0dk\xe63\xb9\xd3\xf6\x14$\x96\xbc\x0d\x1ar!\x962\xc2\x88\xb6\xbc\x92>\xff\xf2/\xec\xf8\x1cC\xd5^\x1c\xfa\xea\x18\xca\xf6\x0b\xdc\x03\x83v\x1b\xb7 m\x97\xaf\xf3l]\x1cChX\xff\xec6%\xf917j\x12\x8f\xd9\xfbI\xb2]\x91\xc4\x1cA\x94\x93\xb0$\xaf\x12\xb2bn\x15}\x94 \x9e\xf1\xda\x17\xa25\xa2\x84\x9e\xc6*I\x0c\xb3\xe0o\xd4\xc1QZ\x83\xdfNY\xdc/\x1e\x14\xc3\xe4\x10\xd3\xc3CP\x03\xef\xae\xb9\xef\xc7\xc2\xf3!\x12\x85 3\x98\x1c\x01\xa1\xfb\xee\xf9 \x8bM\x03v\x84\x05\x1c8\xaeK\xda\xd5\x18\xf2Q+b\x19\x02\xa5\x8c\x810\xe6\xbb\xb7\xbd\x0d[\xa1v5]V\xeeV\xcc\x93\x11\xfd\x1fOZ\xcb\xb7\x84S\xd05\xe8\xb0\x03\xd3\xf6\xca0Y\xc7\xd2\x83*\x88\x96q2\xcfQ\xa4\xa1\xa1%\x94\xb9\xd2\xdaKx\x0e\x13\x13YQ\x0b\xb3\xe6\xc2\xac\xcd]\xd25bb\xac\x1bx\x06\xcb\x13\xb8\x19\x8d<\x98\xcfn.\xe4\xd1\xcdn`\x04S\x83\xfco\xec\xabc\x9a\xab'\xb05\x13\xee\x15\xc8=q\xe8z\xb5\x84\xe4\xc0\x97\x07\x8dO\x94\x9a\x16\xf1#\x9e\x8b;O\xdeD\\xi\x07\xee\xe8\x0et\x0cM\x08\x80\xe9ig\xee\x03c\xfc/\x0eP\x8a\x9e\x96\x14g7\x17\xc7\xaf/\xcc\xeb0*\xb3\xfcn\x90G\xa4v\xc9\x82\xab8\x9d\xbb\xdc\x07\xc9L8\x93@(\xd75/\xc5E\x10%YJ^\xa4\xf3\x8fL\xdc\xfd\x1f\xa4\x97\xb9n\xe6\x18p%\xbd\xcf\xa0,\xfd\x87\xdf\x03\xfa\x07?\xe7e\xc0\xa0\x8a\xcf4\xfb\xebB\x9f?\x1d\xc0f\xf0\xa2\xaa\x0d\x9brTd\x8a\x86\xdb@\x02m\x9b\xe8\x15n\xbfB\xc1\x03\x0e\xbb}j(\x12\xed\x9a\x8b\xb79\xd0\xa9\x14\xa03\x17@\x87\xdd\x9a\xfax\xc80h\xa9\xc3 \xb6\xde\xec\xe0#\x1e\x97\xcft\x0d\xb6\x0c\xef<\x0d\xdaT\x16h\xc3\xca\x15\x15\x11%\xb6T9P\x02g\xb0\xa6\xc5\xa7\x90\xd0\x7f\x8e\xc5/Z\xd7\x00\x9d\xee6\x84Nw\x1e\xac\x87@\xa7\xbb^\xe8t]C'\xbaz+\x06\x9dV\xf0\x0c\xeeN`E\xa1\xd3\xf5l\xa5B\xa7\x95\x05:)\x03\xba\x1et\xff\xf9\xddX\xfa0\x17@\xe0F\x95\x13\xd3\xc3\x1f\x17\x7f\n\x93xn:\xfe\x9bP\xa4\x8a\xbc\x88\x1d\x10AJ00&\xf7\xaa\x10\xc0\x7f\x80~\xe2T\xd2\x0e\x1f\x98Y\xc0\xdd\x83~\xa9@\x87\xb3\x03c%\xcc\xa0+wS\x8f\"P8\xe6\x87\xb0\x99\x8aq\xec\xfa\xc09%\xa6\xab\x8a\x8d\x04ef\x10\xd3\x0b\xc3R\xae!-H\xf9)^\x91\xac*a\x192\xb1\xc5\x15!\xdcK\x97\xcc\x9dn\x91|\xd5\xdfA\x94\x900\xff\x8a.B\xb3\xfc%\xc5s\xd0\x8c\xbe\xd6\xda4Et\xf9\xc6\x06\xc8\xc6\xbf\xcd(\xd3\xb5\x95\"\x880\xb4C\xf7\xb1)\xf6{\xda\xed\x94r\xa4\xec\x0b\xf5\x9a 9\x87\xd1\xa7\xd5\xdc\x1c\xb4l@8\x92l\xb5\x0e\xbd=\xb4\xdb\xe2\n,s[\x16\x10\xf1\xb0eg\x7f\xcdsHm\xb2\x04\xe9 \x9e\xc9?Z\xc4{\xa7\x80(\xad=\x18\xea\xfa\x03\x06\x95\xdb\x06\xa5\x1c\xde3\xf5\xe7\xb1\x04\x85\xa0w`\xb4\x8b\xca\xb6\x8a\xae\xa6\xa2-\x98\nu\xa6i\xfe\xd1\xfeV\xd3@Q\x0c\xb931]\xfe\xb6\x8e\x8e\xf9? J\xe4M\xd5\xeaY:9z\xe0\x83(K\xa3\xb0t#\xb4/\xc4\xb6}\x88D\xa5\xedmX\xba^\x9f\x96\xcet]\xb7\x166j\x96\"\x89\xd0]\x1b\xd4\xe28F\x83uC\x8d\x0f)\x01\x18\xd5\xfaerb;\xe7\xf8\x01\x85\x92\x91X\xd7\x13\x18\x8d\x12x\x86\xdf\xe0\x82\x14\xb3\xe4\"\xc8\xab\xd4\xb5X\xbc\x8a\xa5\x90\xbb\xec\xb9%\xc0%|\xec\x8e\x9a\xf6N\x865\xbc\x92\x0b[Jk\xbd\x1d\xdeP\x85 \x90\xf1d\xc6F\xe9\xa9\x95_\xf8\xc3\xbb\xb1\x830\xf1\xe4n\xd9\x864\xe2\xe9\x87^\xe2\xe9\xef\x08d\xb5\x83\x0c7\xed\xdd\xc3FC\x80V\x07\xc2\x1a\xa0\xbb\x03\xfb\xec\x8do\x1e\xf4\x05{\xe8\xbc\x89s\xbb*qQ\xa5\x92&3\xa44%%x;\x9b\xbbq\x15\x8b\xd3\xb8\xd6:\x0e\xe2\xf1(E\xc0hW\x03\xed<1`\xe9V5J\x1d\xdba\x01\x9d\xcf\xe4\x04Rx\xd6\"\xceO \xa5\xc41\x99\xa5\xb4+\x95@N5\xe28\xe2ZVr+\x96\xcf\xf3a\x82th\x0d\x05\xef\xef\x01\xa3s\x84\xeeR\xa1~\xe7\x92D2\xaf:=\xa6\xc4&p\x9bs)\xde\x06\xee\x85\xd2l\x1c\x94q\x89\xd6\x1f\xceU\x9e\xdd\x16$wh!\xff\xbb\x89\xba\x94\xde\xf0\xf0\x1bq\x10\xe6\xd77\x0c\x7f@\x1cp\xbbAd\xbe\xa4\xdfE]\x1b\xdf\xdd\xe0w\xf3\xf9OqQ\x92\x14\xdb\xbda/Q\xd9\xc0\xfe^,\xc4\x9f9Ye7D\xaf\xccJ_$\x89xQ\x887d\x15\x97\xe2\xefuN\xd6$m\xf5\xc4\x8b\xdf\xa7Q\xab\xddDj\xae\x97\xa1\x98]\xa8\xabw\x15\xa7\xf38\xbd\xeeVR\xe9T\xeb:\xcf\"R\x14\xf5\xc7\xb1f%\xedh[\x14\xdd\xce\x07x\xc89O\x1c\xed\xb3\xe5\x0f\x18\xd9&\\\x88\x91R\xe22y&\xc8\x81\xb3\xe1\xbd\xf9\xd3\xab\xcb7\xef^\xbfy\xf7\xe6\xd3_\xb0\xc6\x04\x9e\xd8V\x9a|)I\xda\x8a\x8bh[\x02\xa6\x9dk\xd3Q6\xf9-.\x0d[:7S-\x9f]\xe2y\x0d\xed\x04\xcf o\xd6\xae\x9c\xc5\x94\xc5\x9e\xa5\x17LD\x1a_|\xfb+$J%9\x9d\xd9]\xa5\x15\xd4\x8fYj\x8c=\xd35\xac:5v\x063n1\x95 N\xa3\xa4\x9a\x93\xa1\xa1\xcb(\xa7_\xf7\xa5\xbc~\xe0\xc6\x0fC[2D@3\x8c_<\x84\x85\xc7C\xe5.\xfdk{[\x84\xc6ce\xf8\xe7\xf66\xe4\xc2\x12\xbd\xd5\n\x1d_\xca\xde\xea\x9c\x06\xbeY\xc4IIr\xb7\xf3-IN(\x11\x17\xa2\x17\n\xfb\x06\xc11z\x0d, \xd4\xe3\xa740d\x0b\x08\xa1\x88\x96d\x15\x06\xf0F\xbcb\xf1\x0d)>\xc8\x16PT\xd1\x12[(Z\xc4a\xe0\x18\x8e\xe3\x12C\x1b\xae\xd6qB\xe6o\x9a\x95\xab8\x0b\xeb\x88\x018>\xcc.\xf4\x0f^}i\x7f \xd6\xd3\xf8\x01E\xcco\xc3u\x17E\nB0\xc4n\x90\xd1\xae\x80>l\xb1\x8e\x8dZv|\xcf\xc3j\xdak\xf0`\x9b\xf6\n\x8b0I\xae\xc2\xe8s+V.}d\x89{\xfdA\x07\xce\x17O:cW\xf1b\x86\xd7\x94\xf9P\x8a\x9e\x9a2C\x0c\xc3vw\x14\x90\x97\x0c\x90\x13\x83Z\xea\x04J\x86\xf9J\x0e\xbd\x1b\xc6W\n\xaf\xa8k\xff@\x12\x0d\xab\xe7\xc55\x9e\x16\xcb\x99\x90/\xb7\xf8+\x0c~|\xf5\xfa\xc5\xcf?}\xaa\xe5b\xa1`\x19:N\x848\x0d\xea07\xf1\xb5\xef\xf2\x80G\x01\xa4\x18\x97\xb6\x8e\xb3\xb1AyF\x9f\xab\x9c\x84\x9f\xdb\xaf\xba\x9c\xe1K\xada\xbd\xab\xc9f]q}\xa8\xa5/\x19\xc8\xfc9\xcf\xd2k`\x9e\x81\x08AD\x97x~\xce\x194\xe1\xbbP\xb3v]F\x01\xcc^\x81\x02vN\x0c\xd6N\xceM \xf3\xe5\x0b\xc8\x0d\xc9\xefz\x80\xa7\xc0\xb3\xb2\x1bN\xa8\x01*\x0dn\x9e\xd7\x916\x05XDn\x88\x83\xc6\x02\xdc,\xa7\x802N\xaf\x13\xc2g\xc8Mq=\xca\xa0\x95a\x9c\n\x98\xab\xbcm\xf9\xec!wA\x1e=\x8dl\xd3i\xd4\x81B\xb59P\xb8i\x9b\x81\xf4\xae5~q\x8f\xc9-\x84\xae\x01o1\xf4id\x89\x05\x1c?\xd6\x1d\xd3\x14\x11\x83\xcc\xa4\xb1M\x1bj\xab\xf8\xdb \xcaP2Ho\x05\xc6\xe4\x81Om\x16\xe9\x83}\xf9j\xcdl\xe9C\xac\x83\xad^},s\xee\x16\x06\xa1\x9b\xb2\xaf\x9a\x0e\xce\x0b\x8a$\x8e\x88{\xe8\xc3\xce\xa4o(\xdd\x0e\xf5{\xbb\xff+\x1d\xea\x87-\xeb?\x80\xd5\xf9\xb7:\xf7\xfb&?U\xe6\xdf\x12\xa7\x8f\xa3\xec\xb3\x9eC:@/+\xb7=\\7+\xf5\xf1\xa3&F\x1d4z\xfaQ\xcf\xd8\x91\x86\xda\xb8a\xfcJj\x19\xc3\xc1\xc8\xb21\xac`\xeaO8\xdc\x0e\xeeR\x81\x9e]G\xe6C\x1e\xaf\xe22\xbe\x19\xbcL*\xa1i\x04\x1d\xf8\xc2p\xbdX\xfc\xc5\xf6\x05a\xe5\xed#\xaeS\xb2FPW-\x16x\xe9\xcb\xfaG]\xed\xc1\xab\xddaR\xf7\xe0\xd0\x0b\xd8{\xb3@es\x0b\x06\x03\xe9\x8e\x1b(9-s=\x80\x08\x06\xf6\x97\x17o\x7fz%\xc2\xae9u\x82\xaa\xb0\xc8d\xdb\xc3U\x98\x7f\xe6\xa6?\xf8\x93\xc7V;mb%\xd1\xfat\xcd\xdc\x8a\xa7`be\x1ef\xb0p\x9bF\xcex\x02\x8c\xba\xa4\xc6b,\xf7\xa4\xe3\xf9\xf5\x90\xd7e\x95\x93\xf32\x8c>\x7f\xcaCth\xb4\xbc\x11\x86\x9cK9\x01X\x86q\x88\xb1\xac\xa05\xd1EYXhy\xbc\x8c\x0eY\xb2\xf6\xaa\xff\xca;,\x9c\xd8 \xe4HZ\xb9\xd5\xf2&W_\x8a\xb9\x0e\xa3U\xea}\x1a\x81s\x0c\x8e\x91f!h%\xd1\xb7 >l1\x07\x9dz\x1f(\x85C\x9a|$\xa6\xed\xd0s\x0b\xca\x94\xd6\xa0\x84\n\xbd\xf6\x026\xf7\x1d\x96\xcdK]\x95Z\x08>K\xdd\xe9x\xeaiV\xf7B\x01\x8a\xef\xf7w'\xe8\x88\xbe\xbf\xdb\xaa\xd7\xc8\xcb\xb1\xde.\xaf\xb7\xc7\xff\xdd\xe7\xff\x1ex\x92\xc5\xcbc\xc5\x9dv/\xc66(S\xcc\xda\xdc lCip,\xd4\xcc\xd6\xdc\xa9\xa5\x9ed\x00\xe7\xeeY\xeap3;Mm\xa0\xdd\x85!ru\xcd\xc4.\x17\x82\xcf\xb8\xa3Q\n#\xc8\xbd\xe6\x00\xef\x1e<>\xae\xce\xe3\x03\xfapV\xea\x11a\x89$%\x8a\x1e\xc4\x84\x87\xf7oE\x1f\xcax\xb9\xce\xb0n\x10=\x99\x05\x8c\xfdg\xf4\xe4\xea\x9bDO6\xdd\x8f\xbfOPa\xd3H\xf0ZF$N,7v\x91dY\xde7:\xcb\xd0\xe2\xe2]\xf8\x0e\x15\xce#\x14#\x8c\xe1\x18\\\xa1\xc1\xc81OZ\xbfD\xc1.\xaa\xe9\x0f\x10\xdcw@\xd5\x10\xb4|\xd4\x9a @X+\x18\xad\xb7\xba\xcc\x13xs\xf5h\xac\xe6_R\xe5\xb2!\x05\xdb\xf27\xfa\x18D\xd7]\xa6\x0b\xad1\xf4\xe4Nh\x0f\xc3\x1a\x9b\xdf6\x92\xdd\xe1#Ah\xb0\xe1`\x14E\xaf\xfc\x0c\x90N\xd6\x9dw0\x0e\"\x9b\x00\xb1\xa6\x12\xd8\x04\x1f\x0e\xbb.qoB\x99\xded2\x8f\x0dTf\x8f\xaefQ\xdaO\xc6\xbd\xb7\xce\x02\x0d\x1e\x15\xd6\xae\x8f^l\x85\xfc\xe2\xf2Z}\xf0\x0c+\xb62\x06VbNm\x19m\xea>\x16\xbe\xdc\xf0\xa8:\xa1k\xa4\xd7\xb0\xed\xca\x87\xc2\xe7\x99\xf0\x0c\x95(\x1e\x8efcC\x00\xe9\x04\xdf\xe8&G\xd9\xb0\xcc{\x1d\x9a/2+.\xba4\x9fZu\x83q\x80\xcf\x8c\x12xv\xbf\x96\xc5(\"\xcf\x98\x07\x00S\x1c\x17|X y\xc0\xe41\xf2\xab\xc2\x87)\x93\xb5\x9eu\xe3BhF\x96\xd4\xf8\x90q\x80\xfa@\xa0/\x16\xa9\xb1\x1d}6}\xc7Xn\x98\x91U\xbf=\x18\x15\xd0\x8f\xbf\x04\xc3.\x9f\xa2\xeb5y\xf01\xedo\x13p\xfd# \xa3\x92\x07L\xff?\x0e\xcf\x84\xec\x9c\xc0M\\\xc4%,\xcbr}\xfc\xe4\xc9\"\x8c\xc8U\x96}\x0e\xae\xe3rY]\x05q\xf6$\xa7\xdf=\x99gQ\xf1\x04?\xde\x99\x93(\x9b\x93>\x81\x9c\x999\xe6\xa3\x91\xc7,\xd5\x9d\xed0\xbf.f\x17X\x8f\xa4\xb4\x89\x9f?\xbey\x99\xad\xd6YJRY\xaf\x96\xc3\x08&\xba\xf2\x8c\xb5\xa1\x06\x7f\x17\xa2\x89,\x1f\x1e9\xbe\x89\x1a_\xf4\x87\x8b?i]\xff\x18\xe4\x10\xee\xba\xaa\x8e\xc1\xf4\xb83\xfa\xba\x0fq;\xacz\xdcs\xea\x06\x9d\x1b\x89\x82\xb2q4\x8f`\xe5\xebb\xf1I\x87\xf7\xcc <\xac^\xb8?\xb4\xff\x12\xeb,\xb7&\xc1\xb78(\x97a\xf9\x11[+\x98\xd8E)z\x1d&\x05Z>\xba\x18H[y\xf7)\xaf\xf8\xab\xb1\xfe\x8a+\x17r\x11\xcfW\xfdn\x19w\x9a\x8f\x88\xb9)\xf9\xf6\xb46^\xf0\x03>\x04\xa5\x9a\xfdO\xe0\x94\x1f\x94\x8d6P\x94v(\xa5\x9e|\xbf\xa5n\xd7\xf7\xf0iI\xe0\x8a 7W\xd9\xbcJ\x08,\xf2l\x05i6'\xc1\xaf\x85__D\xee\xf4\x1ah\xdf\xeb\xcd\xfd[X\x95\xcb,\x07\x80\xd7$\xcf\x8a\x02^\\e\xd5\xe7e8\x8f\x7f%Kx\xb6\xc0\xc2\x7fc\xff\x04Y~\xfd\x1c\x9e \x88\xd4\x94\xb5\x1a\x15\xf6H\x8aA\x12{\xf9\xa4uu\xb9\x1c\xaa\xc5?CC\\\xb4\xb2\xe4A\x93X\x0f\xef\x94\xf2\xb2\xbe\x10\xed\x98+\xd0le\x11|\xfa\xcb\x87W?^\xbe\xf8\xf8\xf1\xc5_.\xcf\x7f\xfe\xf0\xe1\xfd\xc7Op\x06\xd3\xc9\xde\xd3\xbd\xc3\xdd\x83\xbd\xa7p\x0c\x93\xf1\xd3\xdd\xa7{\x93\xc3\xa9\x96\xef\xd6\xd2ah\xc5\x95\x94\xe2\xa4\xc3yF_7\x86\x17\x1f\xc3\xf4Z\xf0\xc9\x14(%\xf1\x1cI\xd190Os\x865:\xcc+l\xb3p\x85\xbd\xd3\xcfqZ\x1e\nCc/\xb8\xbcDl\x7fy\x89!,\x1a\xf9\xea\xb1b*\x82l7o\x00}\x9c\xe8a\xe7\x18\x8c\xe5\xb8\xd3\xa1\x85y=\n\x1b\xc5\x06\xc2\x88\xcb5O\x80\x07\xc4\x97\x95 \x85\x9an\xa0i\xba\xbd6H\xde\x1b\x14\x0d6\x12\x0b\xeb\xb7\x15\x10\xcaN\x89MZ0\x1c\xc9=\x9d\x8b\xda,\xb9\\\x12\xe6\x86\xb2\x88\xf3\xa2\xac\x11?\xac\xaa\x02\xedgB(Z\xd1j\xe5G\x10A\xf6x\x08\x0f\xb63\x105\x01i\x0cr\x1c\xcb\xd6Db\xfd,\x0c\xaae\x0d\x89\xd9l\xe8;!\xb5Q\xe7\xcdm\x87BnR\xdf\x91~\xda\x9c\x89\x16\xcf-W\xe5lo\x03\x91\xcf\x83\xfc\xae\x1dK\xbb\x83\xedFW\xbf\xe0\xea\xae$?\xe1\x89\xf6\xd1\x0co\x0c\x98\xeb\xba)\x86g\x8d4K\xbf\xaa\xdfe\x8bEA\xca\xef\xe8\x11\xc8*4G\xbf\xca\xaat^\xd8vW\xef\x936\x0e#p1\xf7\xf0\xd8\xb3\xf6\xc3\xee\xdc\xf0~0\x00A#cI\xa5\x00n\xa7<\xf0o\x0b(\xd4F.\xd6*x\x81\x8fM\xc5t\x99\xcd#\xe9\x04L\xa4\x0b\x10\xd1\nk\x06H;\xaf\x8a\xc1\xd0O\xd9\xfdc\x93R\xb1\xc5\xd8tx \x1a>\xc7\x05\xad\xf3\xc9\xdf\xdf3\xe7P\xa7*\x17\x87][\xbfU\x04q\xf1\x8a\xc3\x0d7\xb58`\x7f\xe7\x08\xd0\xe2H`\x83!\x056\x94\x1a\xf6\x98n\x12H\xf8t\x0c\xf70g\x1bg\xf6\xd7\x02\x8e\\]\x16T\xa8d\x86\x8e\xb7y\\\x12\xd7\x02U\xd9'u\x96\x02\x97\xf9\x042#\xfc\xb1\x0f\xb1\xf7\xe8\xed\xf2\xfaL\x1f\xc5C\xd7\xb2\xa8\x15\xba\x141uH\xb3j\xd5\x08\xdc\xc3\xd2%\xc2\xe7\xc9\x166c\x08\x906\x9a]Iu\x82\xb8\xf8SLX\xda\xfdv\xb1\xc9\"L\xaa%\x8f\xb4!0\xdb\xa3\xad\xa9\x99-\xd5R\x0e\x11\x1dK\x1caX\xe2\x9b:\xd9f\xd7*pj\xb3\x1eIW(\xc2\x1c\xc3\xfb\x9d\x9cx\xb5\xa2\xcf\x8a Q\xbd\xe5\x84E\x14\xc7\x8eY\xc9\xc5j$a\x19\xa7\x93\xce*Wq\x1a\xe6w\x96* )w\xcd\xe8\x845\x82d^W/U\xb9\xd8\xe9\xac\xc1\x08\xed\xdeQ\xfc\xec\x96\x9eu\xc1\xa1\xe9.*\xa6\xdd\xe3\x89\x8a\x9d\x9e\x1a\xe5br\x90\x90\xbe:;\x1d\x95\xa0\x19\xf7\x14\xbe\xef^\xc1%\xf9\xd2\xdfJ\n\xcf\x9f?\x07\x83?\x114\xdb\x19\x16\xe4`\xaf\xbf\xa9\x1f\xfa\x16\xb2\xd37\x1c\xa0v\x0c\x19\xba1\xc0\x990\x96\xac\x86Ph\xf6SvK\xf2\x97aA0\x03\x19F\xa1k}\xaa\xebR\xcd\xe0\xeb\xa6\x8bc\x11w\xab\x9c\x11\x03\xec\xe7F\x14\x14\xfd\xf9\x02 \xe6\x83:\xbd\x93\x98*\x8b\xfe\xb8\x01\x01eM1\xf2\x05\xdb1l\xa3E\xdc\x92R\xee\x10\x85\x81\xdc?\x0eyNx.K\xe4\xce\xf0\x8d\"\xa2\xa3\xd8}\xa7.9D\x90F+Ie\x1ekp\x94\xfa\xdcB\x82\x852\xc6j1G\xce\xa5\x1ccQ\x88\x04D\xa5\xfa\xe5\x08i\xfd\x94\"\xc0\xb2#\x88\x82\x98e\xdc\xb9\x0e\xc0C\xe0\xc8]\xb7OF\x13\xf6h\\\x99\xc2J\x91\x86}\xda\x99\xc01\\k'\xcarB\x8c\xc2'\xde0\x81m\xa4u|\x8b\x9c\xc1\x86t\x1b\xf1\x85d\x10\xcac\xee\xc0\x19\x1e\x86\xae*\x8d\xe5\x0f\xe7Z\x8d\x95\x93\xb0(\xdfX>\xc0\xb9c\x12%\xfb\xec\x8d\xbc\xcbM\x98\xd4\x84\xbd`WD\xa0\x8a\x9c\x93W\xadP\x14\xe6\x1b\xad\xaf\xbf\x05\x98d,5\x8b%\xbc_(\x1d\\s\x8dB\xa2\x82\xcd[,\xa5\x16`\"\x05\x86\xd1\x18\xffM!\x01'\x04s\x0d\x8c\"=\xc4\x91\x1b\x17Za\x01\xc7ej\xd1\x8eTf\x95\x17\xc4,*\x91\xa0\xd8\xa7L\x18\xd8\xfc\xee\xbdWt\xa5\xa6>\x84\xf0\x04\xff-\xf8\xbf)\xfek\xb8o\xad\"M0k\x1b(\x1f\x06\x0b\x17U\x89\x8c]\xc7<{\xee\xcfo\xd2rr\xf0\xc3+\x97\xc0\xf7r\xb6\x11\xf1\x98\xef\xb9\xd5&H85\xda&\x8d4\x1d\xaaaN \x83g\x10\x9e@6\x1a\x99\x992\xe0\x9d\xe1\xf42\x0f\xc7\x1fQ\xf0\xc1C_-8\x1c\xce`\x07\x16\x9dr\x1d\xd1R\xfd\xa1\x88\xd2\x9dy>\xfb\x1cF|\x81\x8az\xdf\x16tA\xacMr \xbb\xc3\xc2\xd7\xb2\x163\xd89\xe5\xa3\xf1\xf9*X\x80\xb3}mR\x18A\x01\xcf!\xac1I\x08;P\xe08\xf9\xaa=Gf.\xdb\xd9\xe9\x9arM<'<\x88\xed\x9a\xf1\x80kx\x06\xc5 \xac\xbb\x16\x1d\x94\x85\x87\x11\xac=\x16\xa4\x97.\xfe\xbaw\xa5\x81\x9b\xc0\x98\xfc\xbb\xf5\x07\xe3\xeft\xd62\xcbq\x80\x0f1\xa9\xb7+3\xd6\xb3j@vt7k3\xe0[\xf5h\x07\xe8\x061o1J!\xdc\xdf\x9b\xf8\x18\xa1\x04\x97\x90\xb6\x81\xe2\xcd\x05-\xc3\x9b\xa3\x90\xe79\xc4x\x0chqLq\x01\xfea\xee!\xeb\x85\x9d\x19\xfc+L)/7\xb68r\x0bu\xe2\x92|\xe9P=\xe5\xf0\x1c2x\x02\xd3zh\xf8\xabK\xfeP\xb1\xb3W\xb1h\x87\xa3Q\xd5\x05>(\x9aX\x87yA\xde\xa4\xa5K\x82\xa2\xba*\xca\xdc\xa5|B\xe5\xc3\xd4\xf3ar\xd0!7g\xd4\x9a$(\xac\xccu\xcb\x19\xbdi\x98\x8a&\x1c\x00\xf4Dc\x83\x0e\xcde\xcf\xa1\xe1\x8d\xfd\xd5\xfd\x19s\nK\xc7\xc2C\x95\\\xdb\xa0\xd3\xd6\xd3\xd5\xd0\x9e\xec\x06\x03u\x9b\xb2\x11\xd2\xecB 8Q\xb3\xf2L\"\xc6\xb3\xed3\xc1Q\x19D<\xe4\xc4\x8b\xd2M{$\xfam\xc0\xf7\xc0dy\x9bL\xfav\xd8\xa4\x95\xb5\x19\xd4\xf0\x97a\x0d\xff\xd5\xfda\xf3A\x9f\x0fm{\x90VC\x0e\xec\xc0\x83\x93\xf2]\x93\xaeZ}\xb0\xb6\xb7a\xcbu \xc5NS\x0f9\x02~ \x19+!\xed_\xc5\xf9M\xcaO\xc3!\xcb\x84\x93R\xb0\xb1\x7f\xe0C\xc6\xb6=\xf6\xea?m\x9a<+H~\xf8\xda\x03\xff\xaa\x8b\x9fUY\x08\xf4\xe9TXL\xf4\xd5\xa7<\xc8\x0fw%\x91<\xa2[\x85\\E\x85\xfd\x0c\x1b\xd7\x8b\xaeq\xa5RL\xa1\x9af\x1c \xb2\xc5\x10\xf3\x18\x83\x1ab\x14\xddv\x81\xcd\x8c\x85\xf8\xf0E~\x93r\x16\x1bLS\xc5\x83N$\xc6L\x89\xe2A#V\xcaJ\xef\x1e\xc1\x19\xec\xc11\xfb5\xdd\x853\xd8\xe5\xbf&G\x138\x83)\x1c\xdbD/\x08\x91a\x04 \xad\x87[|\x83\xe1Z\x8c\xf8\xc5#\x8f\x8f\x81\x05\xf6kz\xe1kS\xc9p\xf4jY%\xcdh\xb2_\xcfh2\x85{p\xc5\x9c\xe4)Vt\x8a\xd3\xf1\xdeS\xfe\xdd3\xd8\xdf\x9f\x1e\x1dP\x92\x88\x92\xb3\xfbOw\xf7v\xbdo:\xff\xbd\xc7\xcf?\xac\x7f\xedn\xb0\x1ajYhY\xa1Cm\x85\xa4%\xab\xd4%\x0b\xe9\x92\x1d\xec\xef\xef\xee\x03\x06\xf4x\x06\x93\xc9do2\x99J\xcbd\x9c\xa2\x99$\xae\x8d\xb1(_\x84\x9f\xd3\xb6w}\xbc\xc9\x18tl!\xf7\xe7.(>\xa0?\x0f|\x11\xb5x\xc1\xc4\xa8c\xd8\x86\xc9x\xba\x0b\xf7l\x1397\xb3\x7f\xb0;\x1d\xc3={\xb5\xcd\x0c\xc2\xf9w\x1e\x05T\xa3SH\xda\x10\xdf\x06\xa5\xfb)\x12A\x8c\xd8\x15 \x14\xe3\x14\xbc\xbc\xafI>C8,\xee1\xc2\x13\x85\x1b\xf5\x16 \xe9.\x1c\xc7\x0e\x18s\xb32\x10\x04\xf4\x16\x06\xd3\xdcXz\xc0`8\xba\xc9}\xa6\x9a{\xdfCD\xa5\xedEv[\xe8S\xfeE\x82\xda\xb7\xbd\xf0\x81\x04\xe7Iv[\x97t\xef\xc3\xa8l\"\xab`,\xdc.\xbbBT\xdd\xb9#S\xa0\x837\xef\xce?\xbcz\xf9\xe9\xf2\xed\x8b\xff\xef\xf2\x87\xbf|zuN\xcf\xd3\xd8&\x8b;U\x93)\x9b\xcd\x82\xcc\xe5=\xb1\x13\xed\xf9\x8cn\xa4\x88o\x92\xc9\x92\x9e=G<\xb5\x02M\xb6J\xb2\xe3\xb4\xba\x96Y\x00\xd8\x81\xa8\xb3l@8H\xf1\xf0Q\xed\xb5\xe5G\xe21\xc3\x8e\x07\x1f\xf6\xa6\x9cVZd\x99\xebY\xc5\xa1%e\xc8\x98\xa5\xe9\xf6\xb6p\xeb\xad\xcb\xdc\x89\x0f\x13OR*\xb6\x8fjg\x0c4h\xe6\xb0e\x90\x9d\xa8\xe7\xca\xf5\xe8\xc9\xfa\xfc6\xfc\xc2-\xe4P\xc5L\xcf\xd4:\xcb\x92\xf3\xf8o\x14x\x1cN\x8e\xa6\xb4\xe82\xac\xae{M\xb6\xc1\xb6\xb1\x85\xe2\x0c\xa3\x1fo&\xd8\x1e\xe0u$\xb5\x1f5\xe9\x05\x0d\x16\x98\x1dBjW\x1a\x8b2F\xe3\xb9\xa237\xd6\xf1-\xf6\x93<\x9c\xcc\xf66\xff+@{U\xc2\xf3\xb8\xa9e\x17LbF_\x99\xc3\x9c\x16\xbe\xd6\x8a)\xe0)wh7S\xa3\x9d _\x1e\x98\x1a\x01\xc1\xcef\xab\xbf\x81\xed\xa7\xf8\x02Y>D4ca\xd6$\x1bB2\xf3\xbe3\x93\x05`\xde\xd4\x0f\x161\x0b\xea\x86\xc6\x86j\xa1Tb\x00\xf0}\xa7\x05\x17\xe1\xe7\xb4\x08\x17\x83\xe3\xafX2\xb5\xe9\xcdQl\xf1-\x9a\x94\"\xac\x0cjk\xcbmb\xa1\xdd\xdf\xc3V\x19\\\x8a&\x0c\xadG\xd9j\x1d\xe6\xa4\xcf!\x1bd\xf3\xca\xdar\x03\xdb\xd7\xf4QF \xd9\x8b:\xba\xb7P\xac\xb0/\x8c\xb6&\xcc\xf0Eu\\\xee2s\x90\x15{\x8c\x0d'\xf5\xaf\x98\xc5\xa1\xcfdN\x92\x99\xd2\"k\x98Q\x86\xde\xe2t\x8b\xc3\x98\xc5\x17xD\xc9,\xbe\xe8B\"\xa9\xe0\x1cY\xff\xad\x0c$\xf2c\x97\xddZ\x89>\xccw\"\x94zh\x8e\x04g0Q\xe2\xe1Bs^\x84\xf9k\xef\x89\x11l%W\xfe\x94-\xe5\x8fy\xc2}\x06\x06\xdf\xca\x84\xe3\xbf\xc1\x1ee\x80\x8d\xc3?\xa8\x01\x88) )\x0c1\xb3\x18L'\xf8u\xe6\xd5\xc1\xd0!\xb3\xa6\xbc\xfa\xceI\xe2\xa24\x99N\xf2\xe0{\x90-\x04P\xb0YQZ\x0c\x1f\x04\x01m\xa2\xb1\x11>\x98[S\x02$\x18W\x0b!\x0ca\x10\xa4C\xaa\x8b!\x89f\xe9\x85\x95\xdd\x12r)\x05=P\xbch\x86;f>IO\x1d\xa5\x8d\xc2N\x9cW\xdc\x18\xc5\xce\x06\xca \xbc\xfa\x9d\xf6\x8f>\x153\xe6FM8g|E\xf4\xd6\x9e\xb3\x08\xcd\xb9mEg+dg\x8fS\x98\xfb\xa0Pz\x12\xfa\xdc\x1a\xab\xef\x8a\xdbp=9\xe8\xf3\x0c\x17\x0c\x0e\xc6\x8c\xea\xd2\x13\x95F=\x91l\xae\xc9GRP\x12\xbb1\x1d^UI\x19\xaf\x13BWpr\xb0s\x15\x97F\xb4\xa8(\x1a\xc6'h\xbe[\x9e\xb0\xe37\xf5\xe0\x86\xbb&\x11Jm\x8dZ\xd9KA\"\xd1e\x17M\x10\x8b\xa8.\xcb\xee\xf4\x9b.\xcb\xdeW.\xcb\xee\xf4Q\xcb\xb2\xd7Z\x96]\xcfo\x8a\xe82\xb1\x7fLZ\xb8\x0dV\xeb`\xef\x9b\xae\xd6\xe1W\xae\xd6\xc1\xde\xa3V\xeb\xb0\xb5ZO\xcd\xabu\xa0\x15O\xd9?\xfbZ\xf1.\xfbg\xef\xf1kk\x8a\x1f\xd7\xb5\xbah\x9e\xdc\xb5\xc2\x8a\xa6\xa3\x8e\xaa\xc5~\xb6\x02\x08\x9c\xc1\x0b>\x9b1\xa5\xcc\x07\x84\x87\x92\xc7\x93wh\xf2\xe9F+\xf8\x07\x8d`\x98\xcd\x99\xb0\xfa\x1a#\xdb\xf4\\\x9eO\xe3Q\xe2\x0ck\x17\xfd\xa6R\xbd\x91\xda\xd4N*D3<\x8a7\xcda\xb69Y\xc1\x10j\x15\x06Q\xac\xe2\xe1\x9d\xbf\xd8\xa4\xf3.:W<\xbc\xdd_7i\xb7\x93:\x86a\x14\xb2xx\xff\x9f7\xe9\xbf\xd7v\x18\x9a\x86_m\xd2p\x075\x0e\x83(r\x18H\x95\xc3&\x9494\xb3y;l6\xbd\xc4:4v\xd1F\xc6\xfag\x1e\xf9Rx+\x1e\x83\xcd\xbd@~J\xe6\x8e8\x02\xc7\x19j6\x0dF\x9a\xec\x81\x8b\xe4\xd9dmA\xa5T\xa0N\xfeZ\x85Iw`\x170J\x1bzd\x0b\x122\x146\x9a\x9d\x88\x87\xe3\x80\xfb{\x0e,kY\x88\xd9/\\\x9bE\x9c\x16k-xr\x17f\xb2)F\x98\xffRK\xca\xdf9p\x81\x9f\x9es\xb3\xe9\x9a\xae\xa8\xddy\x10Fr\x7f\xc9`\x15\x96\xd1\xd2}\x12\xfc6}xr-2l\x80#\"\xe3\xd6\x8d\xf1\x10\x80,\xc8L\x10\x04\xe0x\x9e\x0f\xce3No\xd4\xe1r\x9e;]\xebb\x91'\xf5\x1a\xb5\x7f\xfb\xad\xd6y<\x05\xb3\xea\x9e\xdb\x0c!\xa2v\x84/\xc8\xb1^/\xaf\xed\xb6\xb4\x17\xcc\xd6,naT\"|\xdd\x11\x03\x8bv\xef\xefQ\x80\x83/b\x1d5\x9b)>\xee\x8f\x9e\xd3\"@\xfbh\xdb|sx\xce\xc7C\xe8_\x9dnBM\xfd^\x17\x02\xad1{-\xa4\x03|H\xeb\xbf\xf2\xfa\xaf\xb8\xfe\xab\xb9|\x83\xc4{\x19\xba\x0e\xec\xd0\xd3\x83!\xcd`\x87\x1e\xa7P\x96\xe8e>T\x1e7\xdf\xc0\x00\xc8B/\x18s\x15\xacb\x99\xc24\xbb\xe3\x13H\x98!\xedh\x94\xd8%\x80\xd1,a\x12\xc0\xc5,\xe9\x94\x00f\x18\xbc,\xe1:sZ\xdb\x0e\x83\x1f!\x01\xcc\xe0\x19\x1a!\xa3\x04\xb0\x82g\x90\xd9%\x802\x94\xc2(\xc2C\"\xbbI}q\xe3\\\\J\x91%\xd7.Ao[\xf7o\xd4\xd9\x9d\x1aR\x03\x03\xaavu\"\x99\xfc\x7fmG\x93\xce\x8e\xd0C\xdf\x0c\xc7l@L\x8b\xb9Y\x93\xb8L|$\xddt\x9f\xf3_\xadVj\x0f\x14\x1d@\x99\x83\xa6\xe4,J\xf9F\xad\x9b\x8f0\xc2\xe0\xb8x\x1d\xa7\x18\x97\xc03\x04d\xe1\xae\x92,r\x81p\x8c\x10\x84\x87\x0f,P\xc7\xcc\xe7\x91t.<\x16\xc9\x11\x92,\xbd\xa6\xfc\xaa\x88Fk\x0f\xa8q\xcf\x00\x85\x18D\xea\xc1\x19\x05\xcc\xac\xd8\x08\x899\x07Ay3\xd9\x9f\x89\xd5\x1db\x94_\xdb\x18K\xa8pGO\xea\n]\xacU,98\xc9\xc1{\x9e\xd7NM\"\xe2 \xe3\xef\xf0\xafA`_r\xeeeg1\xab\xca\"\x9e\xd7A\xa9\xec\xf1I\xf2:\xae\x805^\x86\x02^U'Q\xabJo\x08\xff\xc5/\xdbJ\x0b\x94c\xde\xf2^\xd6k\x18\xdb\xc5\xfb\xbc\xdc\xa0\xcf>\x8e\x8b7y\xb5A\x93_\xab\x8a\x80\xa6\xdb\xdb\x0d\xba\xed\xe5\xb1x\x9b_6h\xf3\x1fN\xd9q>h\xf0\xbd\xdc\x14Z\xf3o\xc4I\xd9,u\x01\x98A\x13s>\xd5\xbd\xa6\x98\xc2\xb1\xdf\xf9T\x97v\xfd\xdf\xf3\xf7\xef\xfa8\n\xbe\"\xe6\x1bJ\xdb9\x06\x11\x0c\xc4\xccr\xcc\xc32<\x06\xdd\x93\x0e\xe9\xa3&oFp\x19\xe6\xb9\x88\x0d\xe6\xf7\xc3R-\xf8*\x05,\xef\xe1\x14\xf6\xc6G\x07\xb6\x90q\xbfv\xe1l!A3I\x92\x1ec\x16\xac\x98\x03\xa3\xce\x97\xd9\x8c\x992@\xa2\xc1)js\xed\x0c\xe40\x87\xde\xcf\xff\xa8S\xfc\x16\x93{3drv\x1bDw\xcb&\xf5t\xb78r\x95\xd8\xa7\xbc\xc1\xb2\xa6+\xa9,\x82\xe3\xb0\xfbG\x98\xab\x1c.F\xe61}\xd3k\xb7\x9ce\x1dS\x8f\x07M\xfdm\xd7\xd4\x15St\x8d\xf1\x90\x877f\xc3\xcbk=^\xc659\xb1m\xd7\xf2Yv\x01#\x98\xee\x1f\xc0\xf7\x90\xcf2S\x90X\xd8t.\x9f\xba\xe6\"4\x12\x13\xd4H\xb0\xd8\x18\xf6H6\x0e#\x01E\x04\xef*NK\xbb}\xc7\x08\xc9 k\xdc\xb7O\xf9]\x9c^c`\x13Lj\x00W\xe4.K\xe7\x82\xf6ak6\xd0\x0b\xf7\xa5*\x82@\xa7\xc8\xc7K!\xbes\xd8\x18\x8ca\x80\xb8\xb0D\xc4\x0f\xb1i\xb2 \xba\xa8\xf1\xe3\x9fY\x03\x03\xe9\x91\xfe\xf4\xd8t\xb6\xe615\x88$t\xb0\xc7\xc1\x9c\x93/ \x8b\x17\x06\xae\xe8\x87\x1ef\x88\xd4>\xfd\x84\xdbS\xef\xe3\x86\x9b\xf5\x92\xca\xed\xd5\xadud\xaf\x17\x1f\xa6\xaa\xe1\x0ewG\x8b/\x00\xf5\x10\xdb\x18\x94\xe7\xd938\x84\xef)\xfd{\x061\x1c\xc3\x04v \xf6<\xb4\xd16\xbc\x184\xe1\x8f\x1bMxoz\xb4wt\xf0tz\xf4\x8df\xbdg\x9f5iOk\x17\xa7\xc5\x16c\xd0\xe4\xde\x0d\xbe\x1f_s\xb0lG\xb5\x03\x9e<\xfa|\xfe\xa4\xcc\xc88\x9dZ\xaer\x7f\xcf\x16`\xec\xb3\xa5\xf6!\xe6<\xae\xdc\xc6t\x97\xbd\xa3+\xb07h\x0c?>z\x0c\x87\x961\xecO\xd9;:\x86Cm\x0c\xf2\xafB\xa7\xeb\x86\xd8\xef\x08\xaf\xb8aJ\xeaS\xf8\xaf\xff*}=\x08&\xe1\xb9O\xfe\xeb\xbf\x88\xcf0\x05\x0bC9\xa2X\xbb\xbe!\xa5\x888RR\xc4^\x17\xe5^\x13\x92\x8c\xe5\xea\x92\xbe!\xe2\x1bR\x7fC\xa4o\xca\xba\x04\x93\x1d\x1b\x03\x985:\xcf\xda\xea\x1a\xd7\xc2\x1a s#\xf9IM\x81\xc1\x8e\x9eeE3\x86\x11\xec\xec\x101\xef\x13<\xda\xe3\x9e\xe9\xd2\x0f\xbe~\xc2\x87C\x00\x02o\x90\xd4s\x9c\xf8\x9a\x82\x83o\xdc\x90\x1e'\x07\xedc5\xa8\xd3\xa9\xa5Sn\xe9\x81\x8b2\xb9@\x9c?l\x1c\xed\xcd\xfe\xbaq \xb5\xa1\x0cf\xc88v\xa7\x8f\\\x8f=}\x1c\xae}A\xe4\xa2)\x16\xb18\x7f\x93\x83\xa7O\x9fN'\x94\x8b\xa8\xdf\xef\x0e\x1c\xf6#\x97\xaf5\xec\xd6\x18.D\xe2Li\x06\x93\x83\xf6\x14\x94Y\xed^t\x8a\xf0\xe9\xb0\xff\xd7A4x~\xca?\x9fL\x0f=.\n\xdf\xe1\xb4\xe3:\xbbu)\x95\x00\xdf\x03\x06\xf3\xec\x05\x07\x7f\x0f\xf0G\x94\x85\x91`[~q\x82\xe4e\x1b\nf\x1a\x14\xcc\xbb\x17)3,Rf]\xa4l\xc0\"}#\x90\x89\xbe\xd7\xf5\x89Gu\xde\xf7\x80\x11!v\xa4{0\x11\xa9\\\x07@\xd7\x0d\x80\xab\x15\x9a\xb5\xd7\xf1F\xf8UX\x81\x8bu\xedw\xa7O\x0f\xe8$S8c\x8c\xd0x\xf2\xf4`\x0c\xf7\x90\xc2q?\x05\xb2\x01\x8c~\xf4t\xd8$\xee\x15\x10\xfe\xfbM\xe7\xdb\x81\xfa\xcd \xbd\n'i\xd9to\xd0p\x87\xad\xfe\xf0\xe1b\xcf\xedA\x0f\x00\xee}\xc3}\x9dd\xa1\x01\xba?n\xb816\xd9(\x1a\xb6\xc6\x82\xeb\x1b4\x8co\xb5j\xadaL\x86\x0e\xe3\xc7\xac\xbaJ\xc8#\x97\xe3\xb0w\x1cc\xc1\x80\x0e\x1b\xc7#\xd7\xa3\x7f\x1c\x93!\xe3@\xe6\xd9\xca\xcdX\x848<\x9d\xa7\x82\xe0\x98\x15\x0b\xaam_\xea\x06\x04:2I=\x96t\xcc\xe6\x88\x12\xdbc\xfce\x1dN\x1fx!H\x13r\xba\x14\x94D\xdaB\x93\xac*#\"N\xa1\x84'\x1039\x90\x15\xbc\xd1\xca\x9dP\xac^I#\x99\xf0w\\\xc9\x14\xabXW\xd3`\xa4$\xad\xa6\x10\x9f\xd5+\xba\xb3\x13c\x808N*\x18\x964\x16K\x9a}\xb3%m\x11\x15\xdd\x16,\x86E\xd5\xd7\x92\x02\x8b\xfd}\x1f\xf5(\xd6|?\xb8;M\x06\\\xb7\xf4\x04\xb4\x96O\x197\xf9\x1f4\x11\x13\x05\xf2\xd5s\x99\xfaLr\xdc5\x9b3\xc3\xf5\xf0\x9b=\x9b\xb0=C\x11)\xa5\xa9>(\x1dl1\x1b\xfb\x91\x166\xd2>\xc9\xc1\x94\xf2\xef8I>\x1b}\x92|\xee\x86IN6\x9a\xa4\x89Z\xf9\xeaI\xee\xf9\x92H|\xd0L\x19\xcd\"f;\xdd\x93\xa6;m\xca'\x07\x96\xbd6\x1cg\xba2\x1f\xcd\xdb\xdfI\x16I+\xf3;l\xff\xe6+cY\x95\x89eU\xa6\xe63\xb3\xdb\xbd2\x93\xc1+\xb3!\x8a\x15\xd2cyY\xb6\xac\x06G\x02\xd4\xb7\xd0\x03\x86\x8e6\xcbN[\xb8%f\xa8d\xc7\xe0\xe6m\xb6\x07C\\lF,=Qz\x1f\x89\xc1+\x19\xdd\x08\x917wJb\x7f\nsL\x86\xdb\xe9\x84.\xf0\xcb\x10C\x14\xf9\x1a\xdew)\x96\xaa\xe0\xf9s\x18S<\x1a~\x13|\xb5!\x05\xf0?e\xa3;\xa8\x88\xaf\xdal\xb1\x17\x12\x81\x915\x04\xc6\xc6;>\xfa\xfb\xec\xf8\xefB\xa0L\xa6O}\xd8\x99L\x0f7\xa7Q\x14\x1d\x12]Z\xe6\x930\xf9\x1a\xfa\xe5w$_v\xa7O\x0f\xe8\\Q\x860\x0c\xb4\xff\x8e4\xcc\xefH\xc2\x04_K{0`\xca\xdd{;\x80\xc4QH\xa2\xaf\"h~Gz\xc6\xbeD\xea\xf5U\x8c$\xc4-\x1e\xb0\x8a\xff@\xc4\x8fE\xfe\xd4\xbd\x8a?i{\xd6\xe7U\xd1\xf4\xb4\xe9~i=M\x06\xf5d\x93\"uw\xf5\xe3c&e\x13\x14m\xd4U\xef\xac\xa2l}\xb7\x19\xdd\xd2\xa4\x9b\x1c\xa3Cd\xed\"\xd8\xd8\xd5\x97\x9a\xa7\x97\x94\xa5\xa41E\x90+\xd0\x0fI\xdd\"Wq\xe45 \x88\xce\x0b\xcc\xfb\xb2/\xbdS\xdc\x8a\x84\xd2\x0cP\x1eVO\x13\xa4\xcb\xf0\xa6\x0c\xf3kR\x9e\x97a^\xf6gC\xad\xcdx\x80\x19kj\xc30\xf7PdU\x1e\x91\x0dz\xc8\xbb\xc6\xcbZ{\x95\xce\xfb\xdb\xcaU\xe7\x8bz\xf5\xd5\x1d\x95\xec\xaf\x08\xc6^\xda\x916Jy92Z\xe5\"A\xcb\xf4[\xb99n=\x12\xc8\x8d\x1b*\x06]\xe6\xcaA\xec\xb1#$M\x0c,]\xc2\xe4\x04b\x9e\xd5`g\x07\xcd\xc2b\x18\x01\x03\x92\x14\xd6\xd1_\xa6\xb8/\xb5\x93\x11eA&d\x17X\x18\xaf\xcd\xb2\xfe\xb105\x9aY\xda\x06\xfd\x1b\xf3\xb9\x14\xa4\xac\xf3\xb8\x94\x8a\xa9N\xca\xcc\x9e2\xcf\x9c\x0bS\xe8\xfd\xba\x00\xc1\"\xc6\xf4\xf6\x1b\x00\x02\x83\xd3\xd5\xc6\x99\xadEz\x02\x0c\xa9\xc1\xd1\xa6vC\x8c\xe9s%\xb8\xd0\xfe\xc4\xe7Y7\xfa2#\x81\xec\xe2$\x07,\xb7Y\x1e\xd1\x87n\xe9t\xff\xa0F\xd4\x96\xf8h\xf6|\xabz\xb2\x19C><\x9b?{\x9d\xf1{h2o\xcb\xb2c\xbfj.\xe0\xdc\xe6Ul\xf3\xfch\xf5\xc7s\x97\x98\xf2\x9d\xf3\xc5b\xa9\x92\xacF\xbf\x1cF\xca\xe0\xe7\x19\xc3\x0dj\x91\xd5*\xfa\xfd`O`\x0c\xe7\xd1\xc4\xcf\xa3\xed\x9b\xa1Tf\x1bl\xe3\xcc\xab%\xba>SF{\xcc\x93\xc8\x8d}h\"{P,gL\x0bo\x87'\x06\x8b}\x04\"L\x93a\x01\"viB\x85\xb6|r\xacB\x96Q\xf8g7\x15)\xeds)\x01\xa6\xd7\x91\xbc\x99\xb2\xdc\"N\x95\xf9\x10\xd6\x13\xe0\xb6z\xe8\xa3\xacLB\xc0\xc5j\x96\xc1\xbfB\xb8\x81\xcd^\xd9\x8a\x91\xa3\x8e\x81N\xf6op\nOf\xff9\xfa\xe5\xc9x\xe7\xe8\xc5\xce\xff\x0bw\xfe\xb6sy\xf1\xe4\xda\xe6z\xf3\xba;\x84+\xa0r\xf6\x0c\x9c1:\xfd\xabiB\x8f\xb5\x02ul\x96\x0e\x7f\xb6*\x00o\xcc\x01\xda\x08\xf0\xa88\x13x\xd2\x9b\xe3\xb2q\x90\x89Ex~S^\x87\xee\x14*1\x0bl\xd3J\xec\xe0\xc1s\x8c\xe6\xbd/P\xf4\xfe\xd3\xdd\xbd\xbd.\x80\x1b\xf3\xfcp\xf6\x1aP_\xd2\xe7\xb0\x7f\xb0;9\xea\xabL\x1f\x96\x88b\x97\x8eggB\x07\xc3\x93ILw\x8f|\x98\x1cM|\x98\x1c\x1eu\x80u\xf1DYZ\xc6ie\xce\xa5$\x1e{\xf6 \xe0c\xaf@\xa4~\xb2J\xf5\xe4\xe7\x1fi\xf4\x98\x10\xaa\xb3Jo/\xdd\xd9\x95\xf0\x98\x1c\xecN\xad)\x04\xc53lU\xfc\xdfy\xc8)\xf7\xd18\x80\x11\xa5\xebvx\n\x82g\xcf`\xc2\x0c]v\xf8l\x8c-\x88\xb4\x89\x9c\xef\x190\x1f;&o\xeeo\xca\x12U\xf4\xdd3\xd6\xe1\x84eg\xe9K\x7f\xc0\x07\x93v\xcf\x83\xef\xdft\xbc7\xb0\xf7\xe9f\xbd\xc3\xf3\xe7\x98\xcb\x00\x03lcB\x83\x94\xfe\x9a\x1e\x0e\x1a\x16\xee\xd3\xb0q\xedn>.L\xba0\x9d\xee\xb1\x10\x1ep\x00\xdbt\x848\xba\x0d\xc6\xda\x03\x1aq\x1e(\x14!\x92\xb4&V\xd2\xdar\xf6\x99p\x86\x19X(i+\x93\xab\xfbu\xd6\x7fy\x8cw\xa6\xe3t'\x13>\xb5\x07\xbfS\xb8&h\xa8\xd4}\xea\x05,\xe8|\xd3q\x19\x90/\xeb,/\x8b:\x85\xf1\xe0\xd6\xf6\x0e5\x8a:f\xc5GZ1\xa5\xd3\x9cY\x86a\xf0y\xd0\xfb\x0b\xc7<\x02\xfb\x89\x15'\xa7\xc0\xefU\xc6\x8c\xae6\xfdb{\x1b\x90\x0d8=\x95\xee\xdd\xc3f\x93\xda\xdd\xf5\\\x16\xb1\xdf\x07'\xcaIX*~m_\xb1\\\xbbOw\x8d\xeb\xb5\xfbt\xcf\xb0`\xb4|_+\xafx\xf9\x81V\x1e\xf2\xf2\xa7\x9e\xc4\x0d\xd4\x07\xbbh/\xe6\x0d\x8f\x0e\xbac\xd0}\xa6\x1c?\x03\x0f\x9f)\xa7sV\xcfk\xad\n\x0d\xa2\x84\x84\xb9\x8b\x87\x9cX\xb3q\xddt\xa7\xd4FQ\x10)\xdd|6\xbe\xf0!\x9fMt\xbb\xff?\xb4\xffRd\xc0t\x0ctWT\x89\xd0\x9c$\x04c\xfc\xc4j\xf95\xa1\x102S\x0b\x97!\xdd\xd7J-,\xb0f\xe8+{_l\xb6\xf7O\xf7,gH\xf9\\_5c\xf8\xfb\x13HwvN\xda\xf0\x17\x05\xa8n9K/p\x01\xa5\xbc\xd1\x1aU\xc9K\xa5,\x9f\xe6+\"\x8ff\xf0\x90\x1b5\x92\x88y\xdad\xc9!\xf4/\xf2\xe8\x8b\xf9\xf4\xe81k\xd8,\xdf\xe5\xe5<,\xc3\xcbK\xe3j\xe4.\xf1\xe0\x0c\xd2\x99E\xbeW\x17\x1f\x83\xb3\x0c\x8b\xa5s\x01\xc7\x90\x06\xabp\xfd\xd8\xf9\xec\x8d-\xe0s\xa2_{\x06\x0e\xf0v\x8b\xa2\x8d`f\xc6D#9\xcb\xe8G!\xe5c\xc7<\xb1\x80\xb0\xc9d\xf7\xb1\x83CP#NH\xec6\xd2N\x8aY\xf3\xaf\x18\xeb\xd3\xb1a\xa8\x9a\xa8a\xd8Hmbbz\xbaY\x0c\x01q\xea\xdbb\x1bT\x12a\x14N\xe3\xb1s\xc6\xd8\"\xaa\x04\xe8\xd8\xe8\xbd\x81\x9d\x98\x1e\xb8\x9d1=l\x1b^\x17\xa7*XB\xf3\xa8\x94:lh\xc6\xd6\xf5\xd8\"\xc1\x0d\xc9\x0b\x8a'j\x0dS]TG\x86sn\xc6\x81\xe3u\xd7\x98\xd0\x1a\xb5]\x8b\xb9\xc6!\xads\xa6,{\x1bO\xa4\xe4K\xf9)\x8e>\xab\xb1\x98;bK\x82\xd8#Q_\x96B\x97\xb6\x08\x0f\x94\x8e\xba\n\xa3\xcf\xc6\x18\x0f\xa2%[\x98\xfb\x9b&\xab$\xb4\xc3J\x9b\xbf\x11\xb1\xb7\xc2.b\x1c\xa3&\x8d{\x02\xd5\xf6$\x80\x14\x16@\x81XI\xb7+X,\xb6\xd8\x93\xdf\xb1\xddb\xbd5}\xe2\x0f\xc0k\x86D+\xe7\xfa\xcd\xac\x83x\x1e\xfa\x86\xda\x93\xdb\xf1\x9b\x0e\xb5\x95{U\x7fzG\xdb\x93\x89\xf1[\x8f\xd6\xb7ir\xc4\xd35\xe0\xde\xd8Z \xcb\xc1\xe9}b\x1ci\x88\x16|\x8a\x1c6\x137\xc1\x83lV\x8dF\x17\xf2-\x99U\x1dq3\xe1[\xac\n\x8bX\xcc\xa5\xc4}\x0bb|\xdd\xc7\xe2? U\xdc\x801 N\xcb,\xda\xee\xde\xa6,\xda\x81\x89*\xc8y\x96B\x13y\x9f\xf5\x91\x8eqJ\x81 \x99q\xae3m\x14\x13\x0f\x86\xe6*\x9by\x86\xe0L\xeb\xf7R3\xe2\xaf\x98e{\xa3\x98\x9c\xa7\x1ek\xfe\xe4 \xb8\xf4\x02L\xa1\xa5\xa2\x84\x1c\x8e\xc1\xcd\xdc\x9cN\xcb\x9734V\x9e\x0f\x99\x1b\xb3H\xb0\xd5\xd0\xccr\x88\x1aL\x8a\xaa!\x01\x88\xd3\x8cc\x04\xde\x80gD\xe3\xa6E\xa1#\x1c\x9a~M\x19b/\xee2\xc5H6\x0fO\x1c\xab\xb8\x85\x01\xf8\xc0%5.1ghKYf\xe8\x98\x9fh\x9e\x13\x1a\x7fJ\x7f\x8f\x15?\xe4f\xee\x03\xb2\xae\xfd^so\xb6\xc6\xb4)\x03\xf3\xb7\xfd\xce\x83\xcb\xa5|\xa3\x1b\x93\xbafZO\xbeH\xa9\xbbwp\xe4\xb9\xce\"\xcb_\x85\x91\x08\xa5\xf5\xa8f%\x1e\xe0H\x17?p\x1e\xe0H\xe7\x0d2\xce\x1b\xe8\x10\x8d\x891\xf6\x9e\x1eJ\x8b\xe2n\xc6\xd0\xf9\x94\xfa\xe2 \xbd\x8d+\xdb\xca\xf4\xf1\x0c\xa6\x94~5\xd8)\x94p\xc6r\x15s\xf3\x8d\xd2g\xc9N\xab$\xa1'\xbcPP\xd7\xf4\xc2W\xa4#\xa8N\x0cy\xe2!\x16g\x15#\xd5\xa6\xa8P\x16v.N\xe4\xf0\x80\x91R\x19\xa1e\xa1Zv\x8b\x01\xd9##]\xcc\x93A\x1a\x12\xa2\xaa\x99 \xd3v\x05\x92V+\xc2_g\xed\xd7\xb7y\\\xb2\x97\xa1\xf2\xee\xc1\x87\x02\x19\xc7\xd8-\xe8\xb0\xe8\xcc\xa2\xe6\x90z\xc1\xf5\x90\xa8\xd3t\xc3\xf8V\xf9\xb00\xb3A\x96]\x89\x1a\xd3\x18\xf3\xe6D\xca\xe6\xecJ\x9bC\xc1\x99\x14\xba\xe8\x182\xce\xe1\xf3\xf7\x14\xae\xa5\xea\xfb\x149\x1c\xb9S\x1e\xc1\x87nh\xd4\x8cAz\xa3\x1d\x06q\x10\x8a\xe6 \x84\x86\x83P\xb4\x0e\x02\x8fa\xde\xde\xf4kR\x1a\xb7\xbc\xa0\xe5\x86\x9dV\x8fB\xd8}\x14Z\x89y\"\xbe\xdb\x11\x1d\x0ff\xc3\xf9\x16 I\x92\xe1\x1c\xdaD\xa9\xc1\x8f\xaf^\xbf\xf8\xf9\xa7O\x9c\xb0\xcc]\x0d\x0e\xb3 \xe7\xc70K\xdd\xfd]O\xcb\xdeO\xbe\xac\x938\x8aK\xfe\xfa)\xdd\x16w\x7f\xf7\x90\xff{\xe4I$\xcf \x18hgP\x05\x8d\x0c\xa9;m p./I\xf16\x9bWZ>\xd6AKG\xdb\x93\x05\\\x8a\xf5C\xea\xd6\x1abwz\xc0AI\xea\xee\x1eq\xaa;u\x0f<\xd7\x11&\x1b\x9f\xc2k\x01Z\x9c\x97\xe7\xe7\x1f\xab\x84\xfc\x14\x17\xa5\xff\xf2\xfc\xfc\xbc\xbcK\xc8\x8f$J\xc2<\xa4#\xa1e\x7f\xa2p\x85UHb\x92\x96\x1fIT\xe2\xcf\x1f\xdf\xbf\x95\xfff\x8d\x8b_\x9f\xb2\xcf$e?\xc22\xfc\x94\x87i\xb1 \xf9\x9b\x92\xac\xb0\xf0u\xcc;\xfd\xf7Oo\x7fz\x91$/\xb3$!8y,\xd1~\xbe\xce\xf2\xd5\xab\x84\xd0[\x8c\xbf\xcf }+J\xde\x92y\x1cbco\xe3\x15\xa1\xe8\x96\xa5\xe9}\x17\xae\xc8\xfc]6'o\xc3\xb5O\xff\xc5:\x1f\xc2\x98\xce\xe1\xaf\x15)\xd8\xd0?$\xd5u\x9c\xf2\x7f\xd8\x97\xe7\x7f\xfa#K&\x87\x15\xce\xff\xf4\xc7w\x88\xa5\xc5\xaf\x0fa\xb9<'\xd7\xf5\xcf,NK\xf1CZ\x85\xf3?\xfd\x91\xcd;\xcb\xd9\xa4\xcf\xd1D\x95\xa1sV@\x97\xfb|I\x08\xfb\xfc\x13eg\xf20\xfa\xfc\x92/x]\xc0~eU\x84#r\x82b\x9d\xc4\xa5\xeb\xf8\x02Z\x8cO0 ~X\xcb\x80\x8b\xd1\xc8\x04g\x11\x1e\xce\x8a\x8b\xf6\xbd\xa7\xe0%\x9fE\x867h0I\xe9\xf2E#\xf4V\xa14\xe6<\xdeJf\xd5\x05\x13\xd2%(\xf9\xa0@\"\x9bE\x94\xab\xc8\x02\\\xd7\x9e\x13\xaf3<\x14\x8e\xfe\xf6P[\x1am*\x96\x13\x02D\x0eH=\x1e\x86\xf5\xd0\x87\x9dI\x1f)e\xbb\xec\xdd\x94`m\"\xd7\x10\x80\x12\xf1\xf72L\xbf+\x81\x0e\x06V\xa4\\fs\xc8R0\xe6\xeaii+7\x1b$\x07-\x83Y\xca\xa9\x0d\xeav\xd2Y\xa8\xc7\xef\x13o\xa6\xbe\x1e\xa1\x87\x19\x16ZR\xa4s\xe3+\xb1\xe3B\xc8\x8b\x80Mlc\xd3\x9f\xa1\xe5\x8eF\x91\xbe\xff\xf4\xde1h\x1aeY\xcc\x83\xfa\xba\xd0^\xb7`\x0d\x1dl\xc9\xa9(w2=\xf4\\'^\xe4\xe1\x8a\xe8\x1d\x89'G\xe8b\x13\xab\"\x92$AA\xc1l0\x8f\x8bu\x12\xdeQ\xac\x97f)q|\x9c\xfb\xa1\x17\x84\xeb5I\xe7/\x97q2g\x99\xca\x83\"\xa7\x80\xd2\xf95\xbc \x8b(\x8f\xd7\xe5\xb1\xe33\xabV\x12DYZ\x92\xb4\xfcs\x9c\xce\xb3\xdb`\x9eEH\\zA\xb6&\xa9\x8bn\x03,j\xa7\xf3\x8c}\xfa\\T ^\x9f2\xc5\xf1\xb3_\x9e\xf0W\x98\x81)\x88\x92\x8cE\x8c/\xf08\xbd>\x81|g\xe7\xc4\x03\xae\x9a\x94t\x8d\xb3l\x96_\xd8\xad\x02\nWS\x89\x9a\xaf5O8\xcf\x94\xd7\x94\xa4\xed\xe7\xa7\x8c\xf0\x89\xabf\x04m\xdb\x0c\x93\xa2\x12\xb7\xf4\xfc:\xdce\xe8\x83\xfa\x9aK$)\xc68e\x0eX\xb4j\xe1\xaaY\x95\x08\xd2\xe0\xc7\x10\xbb\xa9/'\xe8\xed\x07\x87\x02}\xa0\xf7hDb-=~\xae8\x96\xf6\x01?\x9b\xa4\xabx\x17\xbe\xe3\x0e\xce\x1eW\x84\xbb%\xfa\xf5\xb0\x10\xa8\xa9\xb71\xcf.\x11t\xbb\x9e\xeb|&w\x85~\xf2\xd9\xa5U,\xcc7\x1av\x8e\xe1\xa3\xee\xc1\xc5?\x98\xec\xe7\xf1\xa34 #g\xce\xe5e\x94\xe5d\xe7\xd7\xe2\xb2X\x869\x99_^:\xa2O\xf3;\x8a\xe8\x1f;\xa1XL(f\x13\xfa\xed\xa1o:6\xc4\xe9DYZ\x94y\x15\x95Y\xee/\xc3\xe2\xfdm\xfa!\xcf\xd6$/\xef\xfc\xb8\xf8 \xce\xef\xfb\x85\xbf\xe6\xc5o\x8aW5\xbf\xe4\x97\xd9OY\x14&\x84a\x03_\xa0\x05\x9fc\x1e\x99j\xdbl\x95'{^\xb00\xcaTtQKf&\xf6\xfbV\xd6\xcc\x98\xa3\xcau+\xc6#\x9er\xdb\xf9\xb2\xb9\xc6\x18\xd0\x98\x99\xd4\xa0\xb8\xa5\x0d\xcdUfs\xcb\x10PA\xc8,\x94\x17\xbd\xfb\xb7!W9\x9d\x1cy\xee\x96\xec\xeeBq\xcb\xbe\xc7s\xde\xfb\xe0\xb0?\x1c\xbf\xe3\xb0\xa1\xfd\xc9%]\x8a:S>\xf7O\xbaD\x83\xaff\xc8\xbe\x1d\xc5I\xe8\x8d\xb7g\xb6\xaf\xe1\xed\x9a\xa1\xaebHvf\x17\x041@\xda\xee`\x9e\xa5*\xffI\x9f\x07\x06\xbc(\xe0\xc6\xe5m\xe66\x92\x8d\xeb\xad\x9d\x19&\xc2\xfb\x99X\xf7v\xc3[\xb071\xcb\x15[\x9cm\xebF\xd4r\xd7\x02\x89\xb7\xbc[]\xa4K\x08\xd5\xf1\xbb^\xefm2\xed:A\xfd[\xd5%d\xaf\xf3\x11\xff\x9c\xce\xc9\"N\xc9\xdc\xa1H\x84\xc9\x8f\xf8\xabwU\x928Fg1\xa4E;\x119\x0e8\xbf3\x94Jc)g\xc4\xe0\x98\x02QX\xa7\xe6\xd5\xf4\\\xe8\xd1\xca(\n\xbc\x12\xb1\xe7q\xac\x9d\xa1\xb0\x08\xb5\x00\x0e\xab\x80\xc3u+v\xca<\xcfFV\x03KBCP\xe3 m\xdd1T=\x80\xc1D\x02\x8c-\xa8?\x0f\xd3y\xb6r7\xdeM!\x92d\x86\x8a\xaeC \xc2(,]}\x17\xe9xK\x1f\x1c\xef\x92\xd2\x8e\xa3Q*\x92\x04q\xf8\xb1{\xf0x\xb4\xbbk\xbe\n\xfb^M\x8f\xb6/A\xee\xc6\x1c\\\xc7\x9c\xf4\xe3\xf2\x93\xc7\xae\x00\xdd_\xad)fA\xf4\x9bn\x8a7x^\x93\xddn\xaa\xe7\xa8\x9fS\xfd\xef\xa0z\xf6\x9fZ\xf0\xf1\xbe.\xf1\xcb\xcc \xaao\x12\xff\xbb\xf1\xf1\xc1\xc4\xb4\x00\xc1b\xc8>Rn\xc2^ $h\xdb\xe6\x92\x10\xa3\xad\xf3l\x15\x17\x843&\xa5+O\xc4\xea\xc5\xa4y\xb4\"\xd3$\xfdN\x0d\xd2\x9e\x1f\xc29|\xe0}Id\xa5=\xf3!\xea.\xd2\xdalX~\x1e\x04:\xceI\x91%7\x84\x03\xd0\xba\xf0W\x96\x858\xd7\xddZ\x1e\xbe\x82\xff\x98\xec\x99\xa5\x05\x93\xf1#O/\xb3?m\xb2JJk\xc5n\xc6\xffq\xd0L~\x04\x0e\xcc3R\xa4\xdf\x95\x98\xf7g]BN\xae\xc9\x97-\x8b\x8e\x94\x83\xd3\xaf\xba\xd0\xf4\x82b\x8e\xe4\xfe\xabiD\xeep\nO\x82'\x9a|\xc7\x88j\x9d'\xc1\x13\x07f\xe5\x85K\xb4\xbd\x128\xb6\xb5p0\x04o\x93Y~\x81J%\x1f\xb6\xac}@\x0f.7-\xef\xa6z\n\xf3\xe5'A\xa3\xfb@ e\x1b.Tn\xeaN\x0f\x0ft/\xdc\xb8~u\xa8\xbfB\xd2\xceD?\xc4\x01W\xc3 \x85\xd1\xf6\x08\xc8\xeb\xf7g=\xc0DPE\\\xe7\xa8\xed\xd8\xf1\xc0\xaf\xad\x84\x8e2\xd02\x90\xe0\x04\xcb*\xad\xbcFPS\x17I\xe2\x94\xb3f\x8e\xc7\x96\xa1\x9a\x0c\x83*+\x90\xe5\xc3\x91\xb6\x8c!\x9b\xf6\x0ckuWi9I\x0f\xd2\x11\x10\x93\xd9p\xd7N!s\xeb\x1d\xf3:\xb7\xccBPW2A\x9d)@\xb1s\x0f\xff\x1e\xfb\xb7\xc1\xd8\x87\\G\x82h5u\x0f6d\xb6L\x82\x9d\xd4\x9d\x1a\xc9\x9bC\xb3\x01\xc7dl\xf6CAi\xc6c\xc1l\xcc\x1d\x94\x98\xc0G\xfc8Eb\xf4\xb7\x0748j*\xfc\xa6[3:\x97l\xf7\xd0\xbd\x1bC`0\x0f\x84\x98\x87\x9f\x0e)\xf3[v\xb0\xb9U\xb0p\xb5\x08\x06\xbd\xd4Q{;\xb8\x00\xf6\x9a\x94\x92\x84\x89\x0d{C\xbf\x91\xdd\x03}K\x84\xcf\x90\x99\x12\xdd=\xd4\xad\xde\xb9\xcf\xd0\xa1\xceQp\x9f\xa1\xc3\xe9?}\x86\xfeA}\x86(\xaf\x94\xbaO=\x1f\x9c\xb7\xe1\xfa[9\xa1\x1d\xea\xde%\xdc\xebdj\xf6:\xd9\xdb\xd5\x0f ;P\xfa\xf1\x0by\xedG\xfb\x81\x18\xe1o\xc9\x11\x93|\xb628\x06'k\xe4\x0dR\xd5\x8a9\xba\xc4n\x89\xe7\xa1\xa4\xe7\x81\x82\x0c\xc6\xb6\x86\xfd\xc0U_3z\xae\x8f\xc6\xe3\xa7\x93\xa3\xa3\xe9\xfe\xde\xd3\xbd\xf1\xd1\xd1\xa4-nx\xf2\x9f\xee\xd9\xf1\xf8~6\xd99\xba\xf8e\xfe\xbd\xf7/O\xfa\xd6\xc0\xa2\x86\xc1\x10>|:FZxk\xcb%\xd2U\x13\xfa\x13\xc2\xb2\x9f\xc8F\xae13v\xe3hg\xeb\x94\xf9\xee\xe7AI\x8a\x12u\xba\x88\xb1\x84\x0b?\xcb\xffy\xcaC\x97\x96\xf0\xac\xd7\xefd\xc8J\xf5\xad\x82\xed$Xb\xeft\x0c\xf7T\nu:\x08m6\x17\xc2\xec\x84\xd5r\x1e\xa2\xb7\xe1\xc9/\xc1\xfd/3\xf7\xecx\xf6\x9f\xb3_..\xbe\xbfwg\xcew\x17\x9e{v\xec\x9em\xfd2\xf1f\xff\xf9\xcb/\x17\xf7\xbf\xfc\x12x\xdf\x9f\xfd2\xf1~\xb9x\xd2\xbe9O\xfe\xf3\x97\xdb\xef\x1fu@\xb8\x7f_\xa3o\xde\xd2\xc2\xdf\x8bm\xe8>A\x8a9k\xaa\x90bu\xc1U\x96%$L\x9b\x12\xc5Ik\x0bY1z\xbe*q\x9c0\xbaX&\xff\x12_\x10\xb6Cq*d\x88\x1b\xa9\xf9j|\xd4\x96\xe42\xf15\xb9!).\x9d\xf2\x13I\x03!\xe1^\x85_~\x8a\x8b\x92\xa4$o**\x855\xb3/\x8d\xac=\x84|C\xd0\xd5\xd9Xlo\xcc\x04\xda\x9a-8\xedi8\x1bD4k[\x00\xda9L}H\x83Wt-_\xad\xe2\xb2D\xdb{,k\x10\\\xb3\xf2\\\x0d\xa1\xbe\xd5\x16\xbd\xa9\xc3\xa9\xe3\xb7\xea\xfb\x89\xf6}A\xf4\x1av\xa8a3\xd1\x06\x91\xc9\x18\xdd\xc3\x99.\xd7$\x9cH%c\xeduV0K\x8cN\xabm\xf3\xb9\xf2\xd50N\x0f\xea\x8c\xc8*\xee\x8e\xc8 )\x11,\x96\xcd1\x8f&(\x1fsW\xbb\x06\xbf=Pr\x81\xd0\x999M\xd4AwK\xae\x16\xe0k\xee4\xdf*gF.\xedr\xe1\x97i\xa2\xd2x|\x0e\xd9\x14\x97b^\x91!9[\xb0\xb0\x1fb\xf1\x0dY7\xe9\xec\x17\\f\xc7\x1d\xf4~N\xa3\xb0\xba^\x96>Ti\xb1&Q\xbc\x88\xc9\xbc\x9e\x1b\x0e-\x00\xf7;\x9e}\xd7\xf1L\x927\xd6\xdf\x82\xd9t|)\x99 \xefB\xa9\xf6\xd0Z\xe3\xac\xc9\"\xcaW`V^\xd8\xc1.\x83\xcb\xa9\xe75\x0e~\x9a\xed\xb9i\xc9\xba\xfc\xf8\xd2&G\xbfE\x9ah \x7f\xd2\xe5\xca'5\xea\xab\xfb\xb4y\x17\x16\x17r\x82\xde\xb8\xaa}\x92\xb7,\"\xdcD4\xdb\xf6\x91\xed\x84\x92=\xa0J\x813)\xb9\xadG\xbf\xcd2\xe8!\xdct\x1d\xe9\x8d\x83\x0c|\xee\x92@\x0c\x89\x92\xfc\xcd/$\x87}\xfd\xfa2\xae@\xbb\xd2\"\xcaaS\xc4\xc2\x06\x11\x91\x9aOn\xe0\x14fZ\x91\x0f\xe4\xc2X\x91\xf8\xa6\xcet\xb0J\xbb\xbb\x0d\xf3\x94\xcc\x81\xa5\x0b8\xa5\xc8\xbb\x85ZP\xdbjD\x9b\xc7\x06D\x84\xddT\"\xf6\xb0\xde\x1d\xb7)x\x0e\x15vi\x19\x0dsa\x88\xb2\xb4\xc8\x12\xc2\x80\xbf\xeb\xb8i6'\x1e\xd0*\x18>s\x9d\x15E|\x95\x10P\xc8\x84\x15Ye\xf9\x1d$$\xfc\x0csR\x92\xa8$\xf3\x00\xfeu\x0eI=\xeap>\xa7e?\x17\x04\x08\xfbJ\xc7\xf6\xae\x07e\x06q\x1a\xe5\x84\x02\x9b$^\xc5e\xe0\xb4\xb6\xb4\x89\x93j\xa4\xbf\xc4\xf8\xcb<\x8c\x90\x08U\n\\\x91\x0e\xc9v\x932\x14i\x98\xaf\x96^\xb3?\xf9\xf67\xbaY\x82\xc2\xa7(Hy!\xd1\x95&dS25\xd2*\xbb!b\x0et\x98\xb1\xc7\xe3\xbb#\xc2\xa3\x9bNT\xf0#\xa0Y+\x82\x92\xfcKXi57\x10o\x00\xf6\xc9\x96#\xeeYkud}kyS\xfb\x7fQB\xe9w\x81`\xd8\x8c\x0e\xbf\xf4\xcb\xdb\x11w5^\xb0\xfbl$$j\x0c\x901a\x1a\xddQ\xa1s\xcc\xddT\x02k\x94\xea\x97V\xf5\x14\x83\xbdr\xd9T\x0b\x16)\x90T[Q\x15\x98\xaa/\x19<\xd5\xe3-\xab\xb8\xd0p\xa4jlX\x9d@\xb8\xb3C!\x8e!&\x0d\xf0\xc5Hg\xe1E3K\xfa\xab\x99\x17\x9d\xa5R\xc0'\xda\xeeS\xf5\xdf\xc4\xfe\xab\xf6\"I\x86\xf1Vf]{\xebz\xf4\\\x85\xad\x8e97!\xecYf\x1c\xddm\xf3Lg\xf4Q \xa0\xe3\xdc\xed\xed\xce{\xd1\x1e\x92\xb97\xebA'\xe8D\xaf\xccX\xdf\x1en8 \xb6\xb0\xbd\xd0nGLs\xdb'z'\xda\xf9\xc1\xe5\xd0`+\x18y\x9a\xdc\xc2\xd3X0\x83\x1e\xee\xbe Oi\xa1\x8bO\xea\xbbqbotV\xdf\x99\x1dh\xf1\x1d|%\xba\xb6\xd1v\xa8\x93Ag\xd9D\x96\xb6i$\x16'I\xbf\xc6g-\xe2\xcf@\xf9 \x1a\x1f\x8eav\xd17\xd6\x97Y\x95v\x0b\x04tv\xdf\xa6\x1e!\xed\x8dm\x9f\xb3\xc68\x83/\x83!u&z\xee\xd4\x15\x84\x05j?\xbc\xd1\xb8\x11\xfb\x0c;\xc2\x85\xa9_\xf5\x0b 5q.\xcf\xc5!{\xbeO\x0e\x9fz^p^\xe6$\\q\xd7\xdd\xe0# \xe7\xe1\x15Z(\xe0\xef?s\xbfg\xf6\xc1\xe4)\xfa\x86\xfcX\xad\x13\xf2\x85\xa9C1MLP;\xf9\xb1zGS,\xfd\x10\x16\xc5\xa7e\x9eU\xd7K\xa6\xfb\xd8?\x1c\xa4\x83\xed\x0d\xd1d\x0ett#\x92\x99\xb9\x18\x07MyW\x93\x7f\x06\x95?h\xc7\xc4$$\x89\x0b\x8c\xb4\x02\xc2o\x83!\xa1\xb4\xcc\xef\xd4\xa2E\x9c\xc6\xc5\xb2\xcf\xc7\x87>[\x9dK\xa0?\xb5\x96\x8fujG\xed\xa52*{=\x0e\x93r\xa3NQ~\x84\xd6%\x0fD8({\xa3\x80\xfa\xdd5I\xe7qz\x1d]\xed\xecP6\x8f't\x81\x1cW\xd0\xfam\x9b\xf2\x10\x0f \xa2,\xffL\xe6\xdcc\xb5x\x9d\xa3]\xac\xa9XlRIy\\\xd3g\xa7\x86\x00\xa8\xf4y@\xb5\xb7\xc1V\xa8\xe3r\xcb\xb7i\xd5fCB\xee\xe4N\x82\xab<\xbb-\x18\xf12sn\xc6\xc1d\xec\xf8@\xff8\n\x9c\x8b:\xfaW\x13\x0f\x8cA\xc9\xb1\x0f\xfb\x1e\x8f!\xcd\xbci\xb2:\xda\x8f\xda\xdb\xaa\xbe\xa6\xe7e\x88Z\xd9\xeb\xf6pP\xc8\xe2\xee\xeby\x04\xa3 N\x97$\x8f9L\xd8\xd5\xd36\x08\xb1\xa3\xf9\x90\xcc\xc9:'QX\x92c\xbc\xdeO\x0d\x0b\xd8V\x85'\x1c\xfa\xe8z%\xfa\xac\x99\xc6i\xec\xf1\x906\xed\x1aK4\x81h\xf2\xa6(\xde[\x1e\xfcfH\x0c0\xf7\xe1\x86\xf7i\x07\x0cw\xf8\xb1\xe5\xe5\xb5\x114\x03\x97\xaf\x85H\xb23X\xc8N\x1f\xaaW\xda\xf7D\xdcb\"\x0b~\x0dt:\x82\x12\xa6\xe5x\x9b\xcd\xd1\\l\xab\x94\n|\x16V\xd7m\xd7\xd3K(W\xb6\xc5\xfc\xf1\xe8\xf9x_\xbf1PZ\xb5~5X\xc6\xd7\xcb?\x87%\xc9\xdf\x86\xf9\xe7\xf6\x16\xd0'\xc2\x8a\xa2\xdd\x7f\xef\xff`a\x18\xdd\x19L\x0e\xe0\x18&\x07\xbb\x87{\x96UP\x86\x02\\k\xcbh\xd3\x18\xce \x86c\xbe\x16Q\xf3\"\xa2\xe4H\x04\xc7\xb0\xf0\xcd\x8d\xc8\x19\x15[\xef\xbd\x06\x94\x87\xc9\xcb0I\x98\xc0g\xe2\x0b4@\xe6?\xe6a\x9c\xca\x85\x0c\xe2i%\xeaw\x0c3\xa8esR\x94yv\xc7\x0b\xcd;\x92\xe0;\x9e\xe7fN\xa2l\xce\xbd\xablxJ\xa9C?N\xea\xdePB&R\xc1\x00kP-\xbb\xbf\x07\xa7*\x17\x87B\x98$spX@w\\\x9b*\x03\xb3R\x9d\xe2.\x8d\xb8\xb8\x04\x7f_\xe1U\xfe\x90g\x11)\n\xed\xe3,E_\xd1N:O<[\xdd\x94\x92\xfc\xdc41Moe\xd8h>\x9b\xe2\xc9\x99 \xfa.\x8d\xba\xeb1\xf7f\x1cxteG\x87\x94\\\xec\x9f\x95xJ}mE\x07\x0d\x85Q3\x07\xe2\xee\x91\x84\xa4\xbe\xf4\xb7\xe2\x86\xa5?\x0f\x88\x8a\x89g =\xba#G\x8aggGB\xee>\x1a\xe0\xbb\x0dNrc\x1fr\xcf\x97\xb0\x94\xfb\x8as\xe4~k\x1f\x98\xd0\x94 E\x85<\xb5\xe4\\=\xd3_\xd1\xc60f\xbfO\xc5\x1b\xcf\xf3!\x91T\xc5\x83\xf6\xf4R\x05\x8aL\x8en\xdae\"\x1f{\n>\xa4\xbbQ\x89\x9f\x1c\x9e\xa3\xe6@\xc2\x8b\xe8\xbc$V\x8aBN\"0!K*\xc1\xde\xb8\xac\xf7\xe6\x9d\xdc\xcad\xd0l\xae\xa4\xd9\x98&\x91B_\xf4\x03\xf1\x88\xb8\xc6\x1c\x07moc\xf4QA\x0ca\xda\x9b6q\xc4!\xf2\x9c\x969\x06(\xfc\xe0\x96\"\x86\xa5\xc26\xe6n\x03\xbb\x07\xcd\xf3\xd6:vb\xa4?\x0c\xd9\xb4\x04\xcd@t\xd0a\x16\x04\xd5\xdb\x87\xf2y\xa6\x8a\xa0\x98\xcf\xb6~5\xf1o\x84Lv\x82#\x069\x92ln\x89\x02\x02\\\xeao\xe2z\xcd\x98(k$\x05\xe6\nu|\xad\x90\x81\xcd\x82\xad\x1b\xda!\xc7\xa8\xae`&O\x98^\x0e\x95d\x05\x0b\xea\xc6\xa3^\xe0j\xf8\x10\xc2\xe8\xd4$L\xa3\x0f\xc69e\x88\x00\xcd\x7f\xfd\xfa\xf6\xb1\x1bSg4\xf3\xc1q(i\xc1\x10\x80z^F#\xac\xda\x81R\x18IB\xc9\x15\x8bP \xe3c\xcdd)\x8fg\x17\"0<\xc1\xce\xad\x0d\xcf\xb4\xcfz\x17\x05!d\xc4\x9d\xf2\x98\x9a\x8f\x0f\xa2e\x95Z\x18-\xf1\xa0\xb1P \xd29v\xd7M@\xc4\xeb\xe9\x16\xf0\xd0s_\xef\xd0\x04!\x93\xc2\xcd\xc11D\xf5\xa6E>e\xc0\x12\xed8\x98\x17\x8c\xde\xf9\x1a`z\x1b)\xa8\xe8S\xbb\x88\x0b@d?\x0d}2\x1e\x90@\x86\xf2\xado\x81$\xc3\xe0\xf0\x97n\xff(\xc1Abtx%\xab\xb10ld\x85\xfa\xb8\xd0d\xa2\xe1-\xd9O\xbe\x8c\x83\xc6un\x85\x9b%G\xa7\x0d\x0bc\x95Pj\xc0\x1b7A'\xc6SviU\x1aN\"\xda\xeb7\x8e\x05\xf2\xd3\xe7a\x182xe\x9d\x94\x80\xf1_\xbatM\xec\x10\x0d\xe46\xd59\xdd\xdf\x03Q$\x07\x14,Z\x88\x17N\xad T\xd2\x80\x99&{\x18+\\\xd59\xe7\xaa\x90;\x1a\xb8\xa4]\xa8W \xf6\x86\xe6fw\xc8\xd2j\xd3\xa4/\xd9\x94C\xeb\"5\x92EJ\xf2R0p\xad:\x8a\xd4A\xab;e\xe55\x16*\x85\x00I\xbb\x03,\x98\xc8\xec\xe2\x04\xca\x13\x8fN\xa3*\x96,4 \x12\x82t\xd9\xac;\xadyy\xb7\x81d\xaf\x18\xdf\xee\x96J\x1f\xee\xe6\xc4\xfc\xd7\x84\x9b\x93{-{\xac;l:\x8e\xc9\xe5J~0\xcc\xe9\"\xa8%\xae\x9b\x05|\x97U{\xf5\xd2\xbbv\xde\x10\x18\xc7\xe7hL7\x1b+\xc4E#\xf9\xe5\x96JZ\xc5f{)wC\xc2y\xe0\xf8\xe0\xfc\xf8\xea\xc3x<\xde\xb5\xa4F\x83\xf6\x05\xaf\x8b\xed.\xbb\xf8\xda\xb5\xb1\x08\xdc\x13n{\x9b\xff\x15,\xc3\xe2\x0d\xe7\xb7\xc0\xe6\xd3\xf8\x9a\x97IQ\xc7\xda__\xd0\x8bK\xef\xc6\xb0\xda\xbe\xe5,\xac|\xc3\xc8:\xdc\xef\xfa\xe5I\xb5#\xcc\\66-\x1b~\x93\xde\xf6\x15\xf0T\xcd\xdb-\xc9\x8a\xcc\x8f^\xf7a\xcb\x07\x84B\xf3^\xf1]\xedG*5^\xb6\x94\xf2>\xac$\x10\xb1\x8e\xd7\xa4\x0f:0 \x80\x8ah\x9a\x1c\x8a/\xc34\xcdJ\xa0\x0d\xf9\x18\xa7>\xe7\xeaM\x9d\x15\xd1zn\x8b$\xed\x1a:$\xebY\xe4Y\x03cn&\xbb*\xc6\x1e\x19\xdfa\x80\xe4X\xa6\xab\xea\x84\xfb>\xac\x9b\\\xce9nh./\xe8\xd2\x8e\xd2B$\x0d\xd6J*h\x91\xd9|\xf0\x91Zc>\x01\xdd\xfb\x13\x80\xe7\x10\xb4\\A6\x81T\n\x0eM\xa90\xca\x17\xb0\xf0\xd3\x02\x00Rj\x1b\xd1%sr\xd5$\xd3j\xeb[R\xf0}\xd1\xfa\x9d\xe7C\xcc\xe5\xeeg\xc3p\xb7\xa0\x06\xa4#\xc3\xb6>\\\x94$\x07\x92\xcem\xc1*L\xd4\x8d\x84\xa2\xf1\xb0\x98V \xefb\xca\xc3^\xeb\x9c\xb7\x9dK\x07I=c\nZ\"\x9e\xca\xa2H\x00\x89\xb8iH\xe53\xe6\xa9\xa8\x06\xe8\x7f\x1b\xde\xe1Ua\x0b\x81\xb5\x11\xf4\x14PfP\xa0\xb1\x80cM\xd6\xdf\x04\x05a= 9\xa4\xaa\xa3\\C\x9f\"\xd7i\x9a\xa5;\xac\xd9'\x1c\xd3 \x9f\x83\xc1\xbf\xb9A\xae\xb6\xee\x95\xba\xee9+\x89\x05\x1f\x1a[\xf7 f2S\xe6\xe6\xe7\xc6*\x01V\x19\xee~-\x0d\xb2\xed\x0f\xdaq\xf5*\xf1MM\xf7!\xf0R\xd7\xe8\x19\xd5A`\x8e\xdd\xdf\xdc)~}\xb1\xc7\x1e\xe9\xb4\x91<\x92\x9f\x87\xda\x08\xc3\xdeP\x8e\x06_U}A)\x11\x19K\x17\x9e\x99\x05T\x16\x8co\xbd\x03!J9Z|g\xde\x99Y\xaa\x16[\x8d\xac\x86\x91\xb4\xed\x02$ \xd73 \xaaf\xd0\xfc\x1d3\xdd\xd7d_c\xcb\xba\xa0\x05Q-\x18\xc4\xeb\xc1\x04\x0c}\xe7&b#k\xb3\xb5\x1d\xfa\n\x0b\x17\xdc}\xd8\xf0\xc6\x1d\x83A\xf3.?B\xacp\x0cq\x8f\xaa\x8c\"\x1cc\x1c~\xf9\x11\x92\x07c\xee\x05\xf9\xa17\x9d9;\xdb\x8f&\x0b\xd2\x1f Q\x8ey\x19\x8e\x8dL\xbe\xb1\xaeU\xc83:\x85\x89\xf9\xf02I\x8f,) \x1b\xf8\xd1 \x9e\x8b.\x88\x152\xce\x0f/\xb0/\x85\x82\x836 CO\xd5 \xe2I#\xdc\xd9i\x1c\x8d\xba\xda\xae\xd2!\xad+<\x9b\xda\x8bA\xa7!4a\x0c\xc8\xb3\x1f;;\xbe\xa4\x15\xa5\xe4\xab\xa4/\x93\xa4\x1e\xf8\xcb\xa8=k\x0bL\x98\xf6\x8c\x93\xc4\x9dD`A\xca\x1f[\x1a\xf3nZ)\xb6\xa5A\x14\xa4V\x19\x94\xd9O\xd9-\xc9_\x86\x05\xf3\xb0\xd8rg\xce\x92|\xa1\xdc\x11\xd7\xbb\xd3\x7fw\xf0\x8f\xb0\x88\xe2\x98\xfeq\x15\xa7a~\x87\x7f\x85\x059\xd8\xc3ZQ1\xe5\xff\xeeL\xf9g\x93\x83\x84\x88\x16\xc4\xdfyx+\x19\x19\xb9,\xd3\xa2\xa7\x8d\x03\xad\x8cp0\xb59\xe2\x90\xbbm\x8d[\xc1,\xae\x9bt5\x12{@ \xccM\x98 )\x10\xf7\xf6\xb6\x1c\x98\x8e\xb1\xb8\xb5\x8eZ\xc8\xbcr\x19\xde\xe4\x8d \x8bP\x1e3\x10\x8774\x17\xb2Y\xcan)@g\xc8J\x01\"\xe2\xc6>h\\\x0b7\xfdZX]\xb7y&\xd3\xb2)\xd3\x04fiDj\xa1[\x07\xe9F\x1a\x93\xa3\xb1/\x99f\xb5E\xd4 !\x95\xbc\xc5\xa8\x0c\xbc\x82\xb5\xe9\x92\xf1\xdamt\xad\xe4\xdd2\xa8\xb6k\x0bt\x1d\xa0\xf0\x01\xb4\xe7\xd6\xbe\xe6\x852\x1e+\x9fk\xe9\xde\xed\xec\x9f\x9e\xe1~1\x89z\xd3\x1a%\xf7\x8d\xf8[\xbb\xa6U*\xd7\xa9\x7fi\xb5\x9a:\xbd\xfc.\x93\x94\xa4s\xd7\xf3\x81\xb4\"8\xfd\xa1\x19\xa9\x9a\x9b\x11\xb3\xe8\x1f\x8d=\x8a\x0e\xdf\xacVd\x1e\x87%\xd9$\xb5~\x7f\x0e6\xfb\xbe\xf0\x03\xd2\x1b=\xe2\x9b\x0c#u\xf7\x0e\xf7<\xd7\x833\xee\xbf\x8c\xc9\x13\xd1\xb0\xf5p\xff+\xa6z\xd3\x84o>2\x87R\x99\x9a\xd3\xc2\xed\xea\xc1\xc3*\x83k5G\xec\xedPC\xfc\x1275\xb5h\xee\xca\x07\x850\x8a\x0c\xaf\n\xf5M\xf4Uy\x02n\xea\x90\x0d\x0b\x1f4k\xf4\xb8\x95=\xa5\xb2\xf8V\xaa\xdf\xa1B \xc5\x00\xb6\xcc\x1b\xd8k\xfc\\\x17Z\x84\x05\x86#h)\x0bo\xb1\x10Y\n\x16\xf0\xfc\x14\xb3\x14D\xee\x82\xa7\xfc^\xc6\x8d\x93\xd3\x0eDn\xe1.<\xef\x04X\xe4-\x18\x8d\x0c\xea(\xb4\xf3\x91\xa5\xac<\xccP\xc2Q\xe3\x8c\\\xf8\x90\xbb\x89\x94\x02E\xc3\x8f\xbc\xb47\xd3\xfc\xa0\x93\xa6xH\xb4\xb0\x91\x10Tj\x03\x18F\xd4\x9aDo\x96\x14\x8fHa\n\xc2\xc4\xeeA\n\x12]\xa5\xbcx`R\x82\xeeA5\x07\x8b\xd6\xad\xf3\x8b\xb0P\xcc\x9f\xc8\x97\xf2]6'\xaec\xcb\x99\x92ah\x01\xdbx\xb4\xb0\xb8]\x029\x0b\xfb\xcd\x1d\x858\x82g\xcau\x16#\x9bX\xf1w\xb7u\xa1\x90.\xb1!v0\xfdp\xaai\xe5\xc4c\x96\xa8\xa0\xcb\x9aJNY\xe4\xb8i\xe3\xc3\x08u\xfa?V\x1f1x\xe9Zf\x86\x176\x0e\xe6a\x19b\x98\xc2S\x18\x8d2\xf8W\x982s\x07l-(\x96\xf1\xa2t1\x04\x05\x17\xbf\x08\xafkN\xe1\x95\x06m\xd5\x83\x17dW\x05\xc9o\xd0R\xca\xbcx\xd12\xcc\xc3\xa8$\xf9\x8fa\x19\xb6\x82\xfe\xb3V,\x16\xeb\xbd\xf4\x02}X\x9a\x17\x0cai&X\x99\x94{F|(/P\xec\xc0\x15\x94\xa8\xbde\x04\xb0iq\x86\x88\xc5\x1e|3\x1c\xb6^\xe3v\xe4$$p\xec\xaa\xb0&\xc1\xb4\xe4\xf6f\xf6B\xe9\xe8D\xdcO\xdaM\x9d.\xa8C\x8cj\x1c\xca\xdb\xaa\xc4\x84|\xef\xd9\x8e7~\xb1\xb1\xdbze\xbf\x95\xc6\xa6\xffL\xae\xfe#.;:\xb0Th\x1f%\x1bH1\xdf\xa8\xde\xe0\xbb\x80\x8c_\xee\xea\xa2\n\x00\x16\xb8\xd5\xd8lA\xcaO\xf1\x8ad\x15J;\x0c\xdb!U\x182\x80\xa6\xba\xcb\x0e\xfb\xd8<\x98\x96T\xeeA\xba\xb2\x83\xe8\xcaoBeY3h\x9a\xb2f\xaay1\xa7l\\\xfb\xd3}\xfe\xef\xc1\xc6y1;F'\xd2S\x1e\x9a\x92\x8d\xa1\x86\x8f\xa7'P\xc3\x0e\xe7\xdda\x87\xd5X\xe9\x96|WV\xc8 \x84t\xed\x0e\x92,\xc2\xc3~\xdcJaF\x9fe\\\x94Y~g~\x99\xadI\xaa\xb2\x7f\x86J\x98\xf2\xab\xb7\xd6\xeb8\xd1+\xd9\xe6\x0b\xe2\x86K\xf1\x82\x9b3\x7f\x8b\xc9\xcal\x89\xfa\xccV\x1cta\xd8wmxr\xc3\x1dFm\xda\xb8\xb4C\xc5\x9b\xd7\xf1\xde\x0c\x82P\xab=Im\x08\x13\xf3\xb0Ih\x15$\x82B\xbb3\x87\xae\x95\xe3\x83\xf3C\x92]\xd1\x7f_g\xf9\x8a\"=\xe7\xc2;\x01\x16\x16\x13\x13\xf3U\x08\xc0]\xcf\x0b\xe6YJ\x90\xc4E\x8dE\x07\x92\x13z\x97\x98\xe5\x10\xb4\x93\x1f!\xc4)_3\xc693;QV2\x0b/\x86`5,\x91\x0d>\xec\x0b\x93;\x8c\xee\xe0P`\xe0\xd0k\xcb\x0b]=\xc9@\xaf;\xbb$\x1eW\xcf\\\x9f\xb8@h\xd6\xe7>\xdc\xf8p\xe7\xc3\xb5\xde|\x81y\x0f}\x98\x1b\xdc\x92W>\\\xfap\xe5\xc3m/\xbb\x08\x82\x83Z\x83\x08\xb6\xfa\xa2\xc6\x05/\x8c\xf1 \xe8#\xc2\x15v2\x00\x18\xef\x8fe\xec1\x87\xe0k*1C\x8a\x8ej\xd0\xacf/\xfbi\xf8\x86R8i\xad\xdd\xea\xfc\xca\xe2\xfce,\xdddD\xc3Gb\x00vmt\xf9\x05\xbd\xa5G\xe0\xc0\x1bq\xa0\xdb\x95\xce\xe1\xb4^[\n&n\xdaU^Y\xd0\xf1\x0bT\xca5\x82\xedV\x85\xf7p\n/f fNz1s\xfe\xed\xdf\xea\x8b\x85E\xe8\xfc\xf1bvcH\x1a\xfd+\x05\x86L\xdfxc\xe00?S\"\x00\xce\xe0\x1c\xce\xe0\xd6uHZ\xe61)\x10\xa2\xfd\n\xf6\xd4uoX2\xb7<\xbc\xc3\xa9\"\xa2z\x11\xf0\xafio\xef\xdb\x14\xd1\x1bD\xc5W\xf4\x96\xb8o\x18\x19\x8e\"\x0e\xcf\xf3P\xea\xae\x8b\ni\xf5+\xa6>G\xcfj\xf7\xca\x87/>%\x11(\xba\xa5<\x85\x89\xed\xb8\xe2\xabT\xd1\xea\x89\x0fK\xcf\xf3\xe1\x9c\xb6\xf0\x1e\xe1\x8c\xd8 \xec1H\xc3\x15\x93\xad\xbf\xe2x\xfc\xd7\x81P\xe6\xbd\xd5\x9f\xcb\xe3n\xf1[L\xf7\x8bW}\xeb\x15\xdb 1\xb4\x178\xb4_=\x1f\xc2\x19\xa1\x94\xc9\xaf\xf4\xaf/\xf4\xaf\xa5\x0f7f\x11\xdf\xcaj4\xc1\xe6t\x8c\x9bHw\xed\xd6\x15\xd3\xb4\xc8\x14(\x988\x86\xbb\xa6\xba)\xd3\x97x\xf8\xae\x1e\x83A\xb1\xe8\x9bl3A\x90\x89\x97\x14\xc2\xad<\xc0\x7f_\xd0\xa9gt\xea\x97>\xacf\x97\xa6\xf0\xa2,|\x91\x1b\x07\x1f`\x04q\xf0\x1a\xbe\x07wM\xbf{\xe5!\xfc]\x99c\x11\xad\xea\xc2A8\xf7FJH9\xb5\xd0\x0f]\xdfC\x1d\xa7\xa7\xd4\xd2\xe4\xda\x08{\x01\xc1\x8d\xba\xb9\xae\x08\xb3:\xcc\xeb4\xd2\x12}7,\xae\x05\xe4\xb5\x17\xbe+ mk\x0c\x1d\xd6\x81`\x1c\x06\xfd`\xa3\x91X\xe2\xd6\x9aF\xd2\xe30n\x1c\x8c\xd5\x1f\xb9+\xce\xca\x10\xf4S\xf7\xc64\x08DV\x1fX\x9a\x1etb\xe5\x93\xb9\x95\xba\x93}\x16\xa54u\xa7G\x9e]B\xccG\xf3\x14\xb6N-\xcaT\x91\xda{\x1e\xdf8\x9e\x0fN\xf8\xf5j\xd4\xa7m \xa1\xce\xdc\x0b\xc2f\xf2\x1b\x92\xfbS35|\xf4?3\xdd\xa2\xaa\xf6\x9bn\x9a\x19\xa8\x95s\x98\xab\xf1\xcc\xf9A\xa6\x93}\xcf\xdd\xd2)uc&\xf9\xbeu\xb1\xc7\xfa\x0cyB\xc76\")\xda @\x813\x163\x8d\xec\xe5\x9a\xb58\x85\xd0\x83\x94\x1e\xde\x8a\xed_\x88K\xb1\xbd\x0d\x11\x13^\xeb\xc1\x0d\xb8\xf3\"i\xc2\xe7\x16'\x1e\xff\x8e\x12p\xb3b4b\xf1}\xdd\xff\xca\xdc\x08[\xbb\xbfoZ3#\x97h\xb3M\xed\xdd\x9f}s\xaa\xe8\xcel\xfe\x95A\x93\xda\xc5\xf7\x06\xd7\xa4\x94\xb2d\xabV\"\x96c]\x8a\xbd\xe3y+\x91\xc5\x9de\x176\xf9\xae\x9ae\x8b\xf33\x8dW\x85\xf2\xf6L\xfd-\xd1x\xc7\xeag\x9c!?\x83J\x97\xe4n\xb8\xf8\x87\xe6\xc5o%\xe4no\xc5?s\x14\xd7\x03\xee\xcbu\xf8?;G\xb1\xf5\xec\x98\x12/\xfd\xcf\xcd\xa5\xdf\xb9\xcd\xbc\xb7\xf6.+\x16\x8b\xee\x04\xb6\xc1\x04\xd5\xb5<\xb6\xee\xd4RO\xd8,\xd1:{\x96:\xe6\x8c\xb7\x9b\xeda\x9f4m\xb2{\xd0N@\xbf\xfb\xf4\x9f \xe8\xa5\xe7\x7f@\x02\xfa}sR\xc4\x01\x19q-\xe7\xbf\xae`\xb3\x9f\xa4}\xf3@\xe6\xcd\xbe\xc7\x14.\x99y\xe6\x82g\x016\xbf\xa5TOhu\x14\xe1c*DJ\x9c\x82ns\x84 \xd6x6s\x8e\x03\x8e\xc1\xc5\x08\xdb\x98D\xf1e6'/J\xb7\xf0\xe4\xee\x9d\xe7\xc3\xdd\x1f\xa4\xa2e\xe7t\xa5\xdd\x91?r\xf8\x15\xc0!\xa4\xee\xde\xc4s\x13\x0f-i\xbb\x1aK\x1a\xd7\xcb\n\x83\xf4\xfa0\x91\xcc\xae\x1f(eI\xf7\xe1&H\xb3\xdb\xde\xd6\xb0\x96\xb5\xa19\x86\xce\x16\x06\x99\x94\xa2\x9c{\x01\x05zS\x1fb\xfcc\x12d\xe9\x8a]68\xa5\xd4\x07\xc6\xcap\xb3`\x9d\x15%\xbf\x85\x08h&\x18\x81i\x11\x84\xf39&\x1a\x94Se\x197Cj\x00\xc9\xbcE\x10\xafh\x8f\xe7Q\x1e\xaf\xcb\x82\x8e\xac{j\x0by\x0c\xdc\xa1\xdc\x07\xe7{)\xac\x17\x85\x94\xad\x11\xb9\x0e\x9f\x90\x83\xe4\xd4\x16\x1b9\xed\xcb\xc9\xd2\x9c\x84\xf3\xbb\xa2\x0cK\x12-\xc3\xf4\x9a [\x1d\xb9N\x81\xa3r\xbcNK\xf5\"\x08\xd7k\x92\xce_.\xe3d\xeeJ_yA\xbb\xe5\xbe3,\x123\xb1\xc6J\x16MY\xdcS\xab2\xb9\xd3\x94Q\xb2\xa0oN\x84bG\x8f\x99>%\xc4\xd7\xfa\xfe\x18\xd6\x1af\xa0\xb0\xfa\x18\x9a\xecC\x9b\xd1)\xf6\xc1\x9a\x95\x0fVy5},\xce\xf5\xf4\xb996{\xee\xa8\xeb\xd8i\xd7\xda\xdb\xb5\xc5\x04\x9bv\xdd\xd7q\xcf\xeamJ\xe9\xb4\x0c29\xa53\x1ed\xed\xa2O\xbe1u\x89]\xe6YH\x14\xe5\x1e\xea\x9bl\x9e\x857<\xb6U\x16,ZQ\xc4\x05!\x8c9\xc5sRd\xc9\x0d\xf10\x9c-F\xb1[\xc5\x05y\xec\xc2\xb4V\x80-\xcc\x9e\x9d\x04\\\xd1\xad\xef'\x00M\xd4\x9f\xd9\x99\xb2\x0en&9\x963O+N\xdemmQ\x02\xcf\xf9H\xae_}Y#h\x8c\x15\x0f\x9bAS\xb6\xdf\xd6\xda5#u\xa7\x87:A\xd7\xb8v(\xf2\xffA]\xca\x12V\xe3*\xeb\x9dq\x03\x84\xa3\xde\xc5\xb5Q\xd7\x88\xa1\x02\xae\x1b\xc6\xa46\x1eW\x8f\xb12J\x16\xb5\xaeX\x85\x84\x9d\xba5\x15\xcf\xfb\xcb\xb2A\xb9yp\x0e#\xc8\x91Y\xce\xba\xf5\xbc\xf4\x90(\x85\x98\xbf\x9dk*}9|\xd4\xa054\xcb\xae\x89\xecr#\xc2\xb5\xf3}\xec[(\x14\x8e\xba\x8a2\x9d\xd8B\xa9\xf0\x80\x84\x14\x97@\x08Q\x12\x16\x05\x84\x85\xe2%\xfb\xbbLG\x93\xd2\x0bO\xa4\xc9\xbe\xe9\xc4|{W$\xe3Z\xb6\xc8\n\xfe\x02J\xab^\xbc&oS\x96\x1a<\xc5\x18]\\\x9d\x03\xe9h\xd4E\xe8\xe7h\x89\x92Z\x08\xfd\"\xd2\x84\xac\xa0s\x01\x0f\xad\xaeB\xf6\x89\xe4\x95\xbd\x95\x07\x0b\xce\x97\xb1\x80J\xe5\x8c\\l\xb8_\x8f\x03%8WJY\x1d\xea\x1a\xdf\x98\xbf\xda\x1dO\xf5W\x19\x7fE\xe1\x8f\x9c\x86\xb0F|\x86\xdc\xa4\xb5\x89 \x0b\xd4,\x83\xa5\xb2\x1b,iA5\xfe\xd0\xfek#\xf8d\xb9\xea\";\xc1\x163\xc27\x12=\xe7\x14:\x01\xf9\xb2\xceIQ`\xd6\xa4\xaa(\x81\xc4\xe5\x92\xe4p\xc5c\xccf\xb9D\x05\xb1`\xcd\x0e\x8c6\x86J\x1a\xb8\x935s\xccc6\x96\xaa3\x8eJ\xc2\x8d\xed\xe5\x94\xd8-\xd3jC\xa7\xf5\x0d\x0c\x08@\x07\xaa\x91\x96\x85\x95\xd5\xcc\xbd\x0c1,\xd4\xdd\xc6\xfb\xc8\xa8\x11\xb1\xc7g8\xfd\\\xa1CD\xb2\xa1K\\\x83\xcbKJ!}\x93\xfb\xa3\x1aX\xef\x8e\xbfM\xfc\xa4\x03\x93}`\xea\xee\x99\xedz'-\xc5\x12zMS\xe09f\xe1\x07\x0e&\x9eb\x906e\xe5\xbb\xe3\x03\xe3\xf5\x0cMc\x06a\x97\xb6\xce\xb3u\xd1\x845\xa4\x98\xaa\xe4\x01HyIN\x16\x05K\x0d\xc5B\xcc\xad\xe7a\x89\xf9\x0f0Nr&\xad{\xbb\xef\xe2\xef\xd8w\xa4\xba\xdd\x87r\xf4\xa9\xe2# \xa3\xf2e\xb6Zg)\xc1\xbc7\xbf=\xf8J\x95\x82\x94\"EY'\x90\x91\x88\x11%n\xa69\xf4\x90\x04x\xd8\x8f\xdcu\x0e\xf7\xeb\xec\xef|~\x01I\xffZ\x91\x8a\x9c\xf31\xd4V\x15\xbe\x94\x87^\xab\xfb\x92\x87\xa2\x15\x11\x9d|p\xc4\x14T\x01\xa7<\xc9E\x96G\xe4gl\xa8[\xb6f\xe8\xf0u\xf3\xad\x906\x96\x03\x07W\xfa\xe0H]\xab\xe3\x8b\x14\xd8\x17\xcap\xaeP^Qp\x1d)\x85\xaa\x94 \n\x1fb\xb7\x90\x1b\x90Z\xf3\xd4/\xe3\xe2C\x95\x93\xd6\xa9\xe0 D,\x8cB]\xf3\x18B\xf5\xca\xd2\xc6\xa4\xb7\xc5\xb7\x00N\xa9{ ;\xaf\x0b\xf8\xa2\xe1\xbc\xe2mV\xa5%\x99\xf7\xc5\x0d\x14\x14\xb5fc\xa9NC\xdb\xbe6ae\xae/\x1d\x0dm\x18\xe6\xfa\x1f\xc9: #\x16\xa0ph\x1f\xe2n\x18\xea7\x8bm\x86\xec\xf9\xe3\xf7@,\xba\x1c\xac\xfe\x1b7\xfd\xdb\xb7\x1f\xb5\xfd\x04GU\x9e\xe3 \xdd\xdcu\xa2{\x16\xc3\xb2\x9a,\x98#H\xf3\xcburz\x05\x03\xc2\xd4\xf8\x0e\xfa\xdb\x1c\x8c'\xe3\xdd\xdfuQ\x9c\xf3W/?\xbe\xfat\xf9\xe3\xfb\xcbw\xef?]~xq~~\xf9\xe9\xdf\xdf\x9c_\xbe\xffx\xf9\x97\xf7?_\xfe\xf9\xcdO?]\xfe\xf0\xea\xf2\xf5\x9b\x8f\xaf~t\x86\xf4\xa9Q\x12\xd3\x897L*\xd1\x17!\xafu\x97\xcd~z\x14\xfc7T\xb7\xd1I\x8f\xd3\x7f\xba17\xa6\xbb\xba&\x14\n\xae\xb2\xf4\xd5\x97\x92\xa4\x94\xf8-0\xca\xf85)\xb5\x12RD\xe1\x9a\xfcH\xc8\xfa\xa78\xfd\xfc!\xc4\xa4\xcb\x84;\xbb\xb5\x8a\x8be\x98$\xd9\xed\xab\xbfVa\xf2\x1f\xe4\xae\xe0i\x05\xe3d.\x82\xbe\xb0jY^\xb2\xccz$\xb8*3^H\xf28L\xe2\xbf\x91s\x12\xe6\x11ko\x1d\xe6\x85\xfc\xfb\x9a\x94\xe7\xe1j\x9d\x90\xf3hIV\xec;L\xd1\x10\x96\xe4C\x98\x87+\xad\xa4,I\x9e*eo\xe3\xf4'\x91;Z*\x0d\xbf\x18J\xffX\xc5s\xa5\xe0\xc7\xb0$\x9f\xe2\x15Q\n\x99%\x8cR\xf4C\x96%$T;~\x1d'\xeawo\xd2\x92\\#\xad\xd3\x94\xbd\xabVWZ\xd1\xdb8\x8dW\xd5J\x1fn]Fi\xac\x97K\x12}\xe6\xdf\xad\xc8*\x8b\xff\xc6\xba\x8a\x8b7\xabU%\x84~\xa6\xd0>\xe2:_Q\xd6p\xfa\xd4d\xbd\x1e\xd7\xaf\x8fL\xaf3\xfe\xfap\xcf\xf4\xb6\x12\x1f\xef\xee\x9a^\x87\xf5kc\xd7\x05\x7f\xcd9S\xf9\x15\x9d\xdc\xff=\x7f\xff\x8e\xeb\x00\xfa\xec\x19\xec\x9eK\xc2*\x816\xc6\xce\x9b1\xb9-p~\x93\x85\xa4kb\x97\x0d\x11P\x15*+X+\xc6Z\x9d\xf4\xa4\x93\xb2\xa1\xf4:\xedD\xbc\xb8\xeb] \xde\xc8+\x17C\xd6|qy\xe4\x9a2\xfb\xbf\xe7.\xb2]\xaa\xdfj\xdd\xc3\xff\xcf\xde\x9fw\xb7\x8d#\x0f\xa3\xf0\xff\xcf\xa7(\xeb\xc9/C\xb6i\xc5r\x96N\x9c(\x9et\xe2\xa4\xdd\xd9z\xb2\xf42\x8a\xc6\x87\x96 \x8b\x1d\x89TH\xd0\xb62\xf2\xfb\xd9\xdf\x83\x02@\x82$\x00\x82\x8e\xbbg~\xf7^\x9e\xd3\x1d\x8b\x0b\x96B\xa1P{\x85i\x1a\xae;t@E\xb3\xe8\xd8\xaa\xfe\x8d\xbd\xbc\xf70@v4nv4K\x93\xe5O\xef\xdf\xa6S\x92\x125\xef7PO\xab|g\xabr\xe1\x11c*S(VN\xb1\x84,\xe5\x92\xf4\xd9\xbe\xb4}Z\xc0\x8b\x94\x19x\xa3\x8c\xcf\x04oM\x8a\xa6\xde\x93/\x1e\xf1\xfb\xcbp\xe5Q\xccd\x1fe\x14g[\xbe\"\xa6\xf5:\\\x95oB#\xc6 +;D\xf1\xf4C\xe2$\xa2\x80b\x16\xab\x1b\xb8\xa0jV\x0d\x159\xdb\xef\xcf\xa2\x05%J<\xa3\xb1 \x91hA\xefD\xa3\x8d\xf9\xf3\xd9i\x7f\x18N\xe6e\xeb\xc6\x1c\x01\xd2*0J\xc7h\x0dM\xc78{O\xe4^\xd7X#\x9a%\xfe\x18\xc8\xe2$]\xe2 \xc2qn\x08\xef\x03\xa4\x13\xcfcW\xa4m\xc9\xe8\\\xf4\x14e\x05\xdd9\x14}\xe4X\xfd\xf8\x9a{\x91\x13qj\xb6\x8a\x9bu\x97\x10A%^\x87+\x17t2\xa2LJ\xa6\xf9D)\xf2g\xcb\xfdP]W\xe2\xb1\x95\xe5\xa6\x9df&\xd8\xcb\xa0\x12\xd1\x08\xca\x90\xdfa\x97\x7f\xd9\xa8\xcfD=\xabr\xbc\x06\xcb\x9cP\xf7Z\x0f\x84\xa8\xed@\x88D\xa5\xa7\xdd\x00\xf2\xf2n\x1c@\xd4 L\xd9:\xa3d\xf9a\x9e\xc7\x9f_G\xd3\xe9\x82\x9c\x87\xa9]\xe4\x07\x9d\xe5\xce\x04\x13\xd2\x9fJ\xf7I\xc1\x85\xe9K*@\x97Fu/7\xf4H\x86\x0f\x8cyKc\x8fz\xe8\xbfE\x9c$\x8b\xe9\xc3\x1e/_\x8f\xff\xa9\xaf\xe2\xbd\xf1h\x05\x07\xb8v\xb7\xe1\x00\xf6`\x1f!|\x0f\x0e\xe0\x8e\xf8\x9b\xdd\xbf\x0d\xfb\xb0}\xeb_^\xe8\x9dd4\x0d't\xb3\x88\xc2l\x13O7\xd2y{\xc3\xf6\xec&\xf3\x96\x9b\x8c\xa4\xd4?\xd8\xe44\xf17'^\x98\x91\x0d9\x8d\xe2M\x92,<\x12\xc6\xfe\xc1&%\xe1\xe7\xcd\x9a\x12\x7f3\xc1\xc7\xec\xc0\xd9\xcc\xc3t\x83\xf2\xedt\xb3\x08\xb3l\xb3Hb\xb2I\x96\xab\xc5&\x893\xbaIb\x1a\xc59\xf17S\xe2\x9d\xe4\xa7\xa7$\xddL\xa2e\xb8\xd8L\x16aJ63\x8f\xed\xf1\x0dI\xfd\x83M\x14Gt\xb3\xf0\xc8iH\xc9\x86P\xe2\x1f\xf8\x9bi\xb2\x99&\xf9\xc9\x82l\x887\x99'\x9bEv\x10\xcd6\x8b\x8cx\xd1\xcc?`\xf3\x88\xb3<%\x9b8_n\xceHL7\x17\xde\x84\xac\xe8\x86L6+\x0fS4o\x92\x94\xfa\x1bJ\xbcx\x9amPs\xb2Ic\xdf\xf7Y\xd7\x8b\x05\x9d\xa7I~:\xdf\x84\x8b\x8cl\xb0l\xf9b\xcd\x86r\xc1\xa6\x93\x84\xeck\x8f\x84\x939\x9b}D\x18\xd8\x92\xe5&\x8f'\x1e\xdb\xbdl\x80\xa7\x8b\xe4$\\lN\x13\x9alN\xf30\x9dn\"o\xb6Y\xae<\x8e\x03\xd9F\x19D\xecEt3Y\xe4S\xe2\x1d'\xf1\x84\xf8\x07\x9bE\xc4\xa0\x95\xd3\x8d\x14}6\xd4#\xe9,\x9c\x90\x0dI\xe3p\xe1\x1f\xf8\x07\x9b\xcc\xdf,\xbcpy2\x0d7\x84n\x92\xc9\xe7M\x12\x9f\xfa\x9b\xa5\x17M\xd2\x04I\xe0\x06\xf5L\x1b\xaeK\xf07o\xc27\x9b\xd8\x0b\x97$[\xb1\x96B\x1a\x9d\x91\x0d\xb9\xa0\x1br\xbe\x89\x16\x9b\x84n\xf2\xc5\xc2\xdf$\x1e\xb2E\x9b\x15\x8f\xaf\xdc\xa4\x9b\x9cn\xceH\x9aFS\xe2oV^8\xf9\x1c\x9e\x92M\x98\x86\xcbl\x93Fgl]\xd2\x84\x92 %\x0c\x104\x99$\x8bM~\xb2\x88&\xfe&\xf5\xc2\x88a\x8c\x17N\x93x\xb1f\x0b7\xdb\x9cF\x19%\xe9fEB\xba\xf9\x92Gi9\xefl\x92\x93\x0d\xd7\xb3mh\xba\xde0\xaa\xe8\xfb\x9b\xcc;Y\xb3\xc5\x0f\x17d\xba!\x8b\xd9f\x9e\xa4t\x13\x9d\xc6d\xba\x89\xbe\"xB\x1aM6\xa8\xd3\xd9\xa0\xa9a\x93\x9fp\x97\x84M\xbe\"\xe9f\x1dO\xe6i\x12G_\xc9t\x83\xb1\xc4>\x83\xe8r\xb5`\x83\x9f\x93x3\x8f\xb2\xcd\xf7|L\xd1\xce\x06\x87\x11^\xf3z\x8a\xf6\xcc)E\xfb\x14\xab\xfc\xa2AB\xefGR\xbc\xdc\xf4\x86\x99\x06Pw\x06\xae_X\x8b\x8c1\xa6\xd6\xb7N\xf1\xadA\xcb[K\xc6\xd3z\xa7\x01\xc4\"\x83\xc9\x00K\xede\x84za\x00k[\x81\xe2&*H\xa1c\xc9\x84\x8e\\: .1\x19\n\x0fq[\xea\xb9A\x0d\xb1hMU\xdb(\x9a([0\x11\xa7\xc2\x9b\x8d{\x87\x95\x84\xbe$U\xa3\x81\x86\xb8H%\\\xa3\x08J\x80\xf6\xb5l\x12.\x9e\x86\x19\x1b\xd6\x93\xea\x9d\xe7b\x90\xad\xa0\x91\xeaG\x8f\xf6Sn\xe8\xf7n}\xea\x8f\xfe\xd5\xbf5\xfe\xee\xc6-&J4K\x7f\x92~\x16\xc6\x11\x8d\xbe\x92\x8f\xe9\xa2\xb5\x87H\xad_\xabz\xdb0a\xadW\x8b7\xd2\xc9\xd6\x8abp\xa6\xf6\xeck\x8f\xe0SB\x9fL\x18\x97\xcf\xb0%M\x16\x8b(>}G\xb2U\x12g\xed\xd0\xa8\x9dd\xa5\xc2\xbf\x1fe\x8a\xf6_Q\x87\xb0\xa51i\x0c\xaa\xc7\x9e\xfe\xcdR\xbf4\x8b\xe2\xa9\xd7\xaa\xac\x91Wq\xc2e4Li\xf6kD\xe7^o\xafW\xe8#U\x15*\x83\x89\xd7\x9b\xf0\xdd\xc3\xad\xf6\xff\xbe\xf4K,lz\xfe\x01\x98+X\x15\xaa\x1d\xaf'\xba\xe8\x89\xc4\x9b\x1a;\x89\xa1\x8d\x14\x9d\xe64\xe3\xd27\xe2\x17\xca7a\xea*\xb3\xa4\xc5\"O\xa2Y+\xc7\x9aM\x9bx2%d\xb5X\xbf\xa7i\xb4zI\xd65~\xcd\x927\xecZX\xaab\x99[\x94\x81:\xa7L=\xb6ut\xbb\xafZ51\x99N]K\xb7\xd9\xa8\xe4\x8f\xf1q\xb1\xcd\xd4&5\xef5e\xf8\xbf\x19\xb05d\xb1\x86\xa3\x91\xc6\xe4dVh\xe3\x98b\xee\xa1\x17a=D\xd4*\x8a\xc8mv\x87 5<\xa1\x0c\x15o\xe8\xd3V_\x9aU\x90\x91\x86\xec!\x15s\xb1\xa3F\x86\xa2\xdd\xa6\x94\xe2\x80^)\x0c\xb9A-\xeb\xcdp\xddp\xa6\x18\xad\x16\xb4m\xc1)\xb7Z\x94\xd5\x8dMn\xf5P%\xbeU7_n\xdf\xd3T\x94+\x98\x9d6\x83d\x91o\xb1\xd9\x84iM\x18L\xc4g\x1a\xd2\x1f\xa3\x03\xc6\x87\xa4p\xeapX#\xfe\x8da\x8d\x94\xde\x8chR3\xfdU\xdfc\x9bb\"\xfd \xee5\xfc\xfa\xa1\xc8\xbaq\xfbN=<\x05D\xee\x0d\xf4\xb0\xb83\xd0}\xba\x92-\x7f\xbf\xab{\xaa\x0f\x89\xaf\x16_e\x0f\xcf*\x07\x89\n-\xa3\x05\x19\xb3\x16\xf4\xa3\x18\xf5\xe3\x99\x17\x97\x0c\xb8N\xb7\x02\xaa'\x809:\xd7m\xa3\xc1\x01(\"A\x84A\x13\x11\x16Z5\xf2\\.hm\x8d\x95t\xf1<\xc0C\x9c\xe2\xa7Q\x93\x18p\xfe\xad\x9f%K\xd5s\xa2\x8d\xddd\xbd\xac\x95a\x8eb\xc6[\x8db\x8d\xdd\xeb\xb2\xbe%\x9a'\xdf[\x83\xdfc\xeb\xfe\x80\"\x10\xf01\x94\x02T\xef\x97p\x91\x13\x1e\xe8uB`A\xb2\x0c\xe8<\x8cA\xb4\xdck\x8e\xb1\xb9;\xfe0\xf8gv\x18\xd3#\xf3\x98NQ\xe5\x9e\x8aa\xf1\xc6\x9d\x86\xf5Y\xefI\xda~Z\xa0\xa4y\xeb_;\x07\x9f\xa6\xdb\xde\xa7>\xfb\xc7?\x90\xb6\x01EN\xad\x0d4\x04\xc1\xf8\xb8\x0c\xee\xc8\xe0\xfa\xdamt\x0e\x83\x8a!\xe2\x8d;\x0d\xeb\xb5\xceE\xd7mLx*\xd5\xf2+\xd4\xbc\n\xcd\x90\x9bE\x0b\xe24\xc0\x0f\x06\xbfb\xb71\xf6h\x9a\x13N\x1aD\xccR\xb8\xc8\xd4\x1b[\xbb\xca\xdf\x03\xc9\xca\x9bF}\xc2\xbbw\x1a\xf8S\xbd\x8f\xb4\xdb\xb8\xf9`5\n\x1f\xf3\xd8\xc4\xcb.C\xfb\xd9\xe4\xd3\xed68^\xb1\x9f}V\xb8\x0b[VZ6\xef4\xb2w:\xf7s\xb7QIqO\n\x1b}\x9a\xbcJ\xceI\xfa4\xcc\x88\xe7\x07\xb0u\xeb_\xa3\x7f{\xe3\x83\xd1\xee\xce\x83pg6\xfe\xf7\xfd\xcb\x9d\xe2\xef;\x0e\x7f\x0f\xf6.G\xfe\xe5\xd8\x890\xb0\x91;M\xf8\x8d\xd1\x0b\xdf\x9d\x98\x96\xbc\x89\x1b\x9d\xe7]8\x0d\xef\x951t\xa0\xfb\xf0:\x90\xfc\x0e#|f\x08xp\x1e\xdf\x16O\xebpzx\x81\x1e\xc9\xb6\xa5\x9d%\x8bEr\x0e+\xd1I\x0f\xb6u.\xec\xd53\xbc\x19\x9e\xd1:\xb2\xabr\xb67oV~\x9b\xb9Z\x13\xc7\x8b\xac\x1eR\x9e\x93d\xba\x16je\xae`\x8c\xe2\x1ew\x93\xc7_h\xc8:\xbeX.z\xc7\xd0\xf9LyS\xb0\x1e\x867\x17\xe5\x9b<\xc9\x85\xfe\xb5U\xf9\xda,I\x97!5\xbd8\xaf\x8cQ\xec\x00\xc3\xbb\xd3\xca(\xed\xef\x9e\x95\xef\n\xc4\xad\xa7\x1e\x01\x01G\xeet\x950\xa67\xb2f\xe6\\3\x91\xbdT\xcc\x0d\x01\xbf\x8c\xf4\xfd\x83Pe\xf4B\x99\xe0[\xbc_\x15\x9ay\x82\x97H\x16\xd306u\xackJot\x94MN\x92<\xa6&-:\xbbN0\x9c\x8fq$\xcal\xccl\x8d\xb9!\xd4eH&\xa1l\xcb\x8bx\xa6\".\x96X\x06r\xc1\xbe/\xb5i\x95\xcfw[\xbf\xc6\x94\xf1\x92\xf9\xeb\xfe\xf9\xa1\xc1\xc8\x0e\xd2\x00\xd7\xd0B,\xcc\x9e|V\xed\xaa\x9bdvhp\x08\x90\x17O\xef\xad\xd7\x11G6u\xac\xbc\x94\x80\xa7\xc8\x0fD\x7f\xc6/\xda\xed\xcf\xf2\x92\xb4\x88\x1b\xb8{H\xf7 ;\xde\xf88y\\bq\xf6\xe1\xf1\x80c\xe9\xf9\x81\xa1\xfc8h\xf5\xb9 \xb6\xe3\x13F\xd2\xd7\x01\x9c\x16\xb5#0\xb5\xfd\xfb\x00\x0e\xc75\xe1\xd5:\xf6R\xdf\xa4}E\xa7\xe6\x07\xb1\xd4 \xf2\xcfe\xf9 9\xf7w\x82\xd6\xc3,\"\x8b)D\x19\xe6\x0fY\xa5\xc9Y4\xc5\x13@G\xb1e\xa3g\xb6\xc1\xb2\x89\x7f\x85!<\xf3\xa2\x00\xce,N _\xd1\xc4\xc1\xc7\xf3\xd5\xd5\xd9\x00\xc4\x10\xe6\xe5\xd6\x99\xb7\x8d\xe69\x0c\xe1\x0d\x1b\xcd\xdc2\x9a\xe7\xcah\x9ew\x1d\xcd\xb4m\x08\x1fa\x08\xaf\xd8\x10\xea\xa5E\xd4\xeb\xa32\x84\x8f]\x87\x10\x96\x00 \xdbF\xf3\x03\x0c\xe1-\x1bMh\x19\xcd\x0f\xcah~\xe8:\x9aY9\x9aY\xdbh\xbe\xc0\x10\xfe`\xa3\x99YF\xf3E\x19\xcd\x97\xae\xa3\xa9\x1e\x89m\xe3\xf9\xdd\xe2\xb7$/\xe4n\xbc\xdfQC\x1eR\xb2C\x99\x1c\x85\xcd\xaf\xe0\x00~\xf6P\x85\xd6\xcb\x99\xb0Q\xdc}\xc7\xef>\xe5D\xd4\xcc\x17\xc9K\xcc\xf6w\x93\x1bKIf\xab\x07[\xdb\xfc~\x85!|\xf0\"\x0b\xb0qv\xbfv\x18\xe3\xaf\xedc\xac\x1c\x9emC\xfc\x05\x86\xf0\xb9}\x88\xbft\x18\xe2/\xedC\xac\x9e\xd0mc| C8j\x1f\xe3\xcb\x0ec|\xd9>F\x95\xc1j\x1b\xe1\x8b\x96\xa1\x1d#\xf3S\xb0a.\x03}!y\xd6\xa3\xd8\x1b\xf5\"J\x96Y/\x00\xceg\x8f\xfd\x00\xa2\xa6\xa1\xbb\xcd\xd7\x03\x14\xc1\xaam\xdb\xb1\xab\x82I/\xd0I\x82!\x0b\x06\xabV\x97P><\x12\x0fU*\xf0\x02\x190\xf6\xf4)\x13*\x03ap\xe7\xeb`\x1f,\xbb\xa2xJ.\xf6\xa1\xc5g\x90]$M\x93t_\x13/\xa7^\x97\x96x\xb0v\x9cP\x18\xe46\x94\xb8\x01Cx\xdd\x8e\xb47\\pA\x00\xeb\x86+56\xda\xbd5\xfe+\xcdl\nvNI:\x1a}\xbb\xbb\xb1\xc6\xd2 \xc2/\xa8\xab\xd8\xdf0h\xe9\"\xa0\x19\xbco],\x17BwE\x8c\xf2]\xc4\xbd\xae.\x96\x0b\xdc\xb6\xf8\x17\x166\xb2\xad9\xd7\xf3\xb0o\x98\x94/\xbe\xfd\xf7e\xc0\xbe\xbfq#%3\xd5\x1d`\xbdBO\x18\xda\xc7}\xcd\xff\x14%WD\xb9'\xda\x0f\xa7S\xf4M\x0c\x17?\x97O\x0e\xe0o\x8f\x0eX\xe3g$\xcd\xa2$\x1e\xf6\x06\xfd\xdd\x1e\x90x\x92L\xa3\xf8t\xd8\xfb\xf8\xe1\xf9\xce\xfd\xde\xc1\xe3O\xb1pl\x87\xdf^\xbf\x02r\x81K\x0c\x13\x9e\xe2\xf7\x84\xc0)\x89I\x1aR2\x05\x1e\xa4\xf47\xa3\xff\x93\xbc\xa4!LL\xa7\x8f\xa9\xb1\xbd[\x9f\xde\x7f\xf7\xe9\x96\xf7\xe9\xfd\xb6\x7f\xe3\x96\x05\xd9K \xc2\x10\xa2\xd1\xa0\x19\x8c\x08F\xc6B1\x16\x9eJK\xed\xf4)\xea\xcb~{\xfd\xea\x90\xcf\x8d;\x93\xb8\xf8\x80\xb0\x89$\xc2\xc3\xa8l\x8fo\x82\xe7i\xb2\xe4\x1bA\xb4\xd7\x9c\x91T\x8a\x99$\xbb\xa4M\xb2K\xb0\xbcm\xcd\x13&)=a`_\xc9y\x06Pxi\xaaYP\xac\x8e_g\xa2\x0eI=\xa9\x92\xbc\xd8\x12\x94\xe2\xfc\"\x99\x84\xac\xa9~\x86\x8d\x1b\xf4K\xa5\xde\xd2\xb4\xb5z\xa8\xa47\xee\x11y\xf0\x90~\x96\x9fd4\xf5\x06\xbe\xac\x17tS\xa7\x8d\x01\xd5C=\x85(\x86\xd8\x87\xb8^>%\xe5\x8e\x8a\x18g8J\xc7\xb2\xc5!&[\x1bM\xc9$\x99\x92\x8f\xef\x8e\x8a,]^:\xda\x1d\xfbc,\xdd;@u\xa1\xf6\x9d\xc1\x98\xdbU{.\xf8$\xb7us\xcd\x9a\xd9l\xec\xb4\xd5h\x15_\x86+\x07\x7f6\xf19\x12\x83\xea\x8c\x88\x0f\xdb\xd0\x1b\xa2\xb6\xb6\xf9\xb4\x9a\x99T^\x97~\xff\x8f$\x8aqy\x9aS\x13\x19{\xec\x83\x92\xf3\xa9d\xdd\xa0\"n\x17K\xd5yD1W\x04\xd0\xcb\xe9l\xe7~\xcf\xf7\xcb\xbb\xbd\x930#\xf7\xee\xe8\xc6Pf\x10jv\x9d`\xb8Y\x94\xc4\xd9{|\xcb\xe4\xb5\x13.V\xf3\xb0%\x97\xacz\x154\\j\x13\xe7=\x1f\xb7\xd0\x02S\xc1\x85)\xf1\x88\xfa\xccpd\xeb7\xe6\x92\xd0y2\xbd\xf2h\xf8\xe7\xa6\xf1\xc8\xa7\xceLDs\x8c4<\xfd\xb3\xc0Y\x1b\xb2\xf3 5\x98Y\xcb4\xe5\xc6\xce\xe8\x9cT\x94\x8c\xeeQ\x0cF\xbd\x91\xf4\xe6\xa5F\x0f\x11\x85m\xe1\xa5oz\xe5\xdf\xa2\xcc\xd1(\x0e\xd8\x06\x0dt\xfb3\xf5K\x9f\xfa\xff\xd9\xdb\xbdu\x1a@o\xbb\xe7\x8f\xc5\xfe\xd4-\xa9\x91J\x11\xdb\xa6\xd6d\xee\xaa\xac\xa4\xc1\xb1\xa6P\x9a1\xc25- W\xac8\xe5\xb4\xb9\x8ct\xf2\x18\xa9\x8e\xbc\ns\xa9\x143\xa4's\"\xc0:\x8f[d\xcaT:&\xcc\xd9\x98\xd4(\x8d\x96\x9e\xb2H\x9f2\\\xa3c\xb4\xd8\xf4z\xb6\xe1\x1a\x92\xab9\x0d\x93\xc1\xec\xb8\x84\xd9\xd7\xa6{Y\xa0I\xe7\xe6\xd44m\xe6\x9b\xb0\xecd\xf1\xd1\xad\x7f]\xec\x14\xccu\xeb\xb2\x05\xc6\x14t\x7f\xe6\x08\x85\xfdgS\xd8\x976\x85\xf5h#\xecb\x1ba\xf5r\x9f\xca\xff)\x1f\xf0\x94\xdfl\xa7x\xf7\xee\xfb\xfd\x1f\xf2\xd9\x8c\x08\x7fq[\xf5\xa3\xb3\"sSq\xf2\x95x\xa2\xa6\x19\xacX\x8c\xc0%S|o\xc49U\xfe\xe9\x18\x91:nT\x8cr\xca\x06\x89\x94\xae\x1cWjcD\xf59\x0eAaO\xf9T\x94d\xbc\x8bhBL^\x97\xc4\xb8\xbc<\xa4\xaa\x9aL[\xe4K\xe4\x14@-1\xe1c)+S.\xd9zZr\xfdP\xecx\x99\x97\xbe\xaf/\x9b%\xb9\xf4-\xa6\xd6\x16\xc3\xb2\xc5\x17\xae-F\xd6\x16\xb3\xb2\xc5\x1b\xae-&\xed\xb3\xbey\x13\xb6&e\xd3?\xba6\xadI-\xaf4\xbd\xe5mQ.\x87\x8f\x16c\xb7\x06C\xd7\x06\xeb\x898L\x0df\xae\x0d\xce\x1d\x1b\x9c\xb4\xaf\xf8f\x83\xdd:57s\x1d\xdf\xb41>\xf5\x17\xf1R^\x83\x85x\x91\xfc#\xe1\x7f\xc4\x8a3+\xcf\xd5\xcd\xee\xbc$kL\xcf\x17\x8a\x17\xe2)\xb9\xc0\x1b\x19\xbf\xf1$\xcb\x92I\x84\x99!\x00s\xb8\xc4e\x00\x1c`x~\xdc\x97m\xb0\xae\xfbe\x0bl\x00\xfd\xf7\x04k84\xe9\x07\xa6\x19\xf8\xfb\xdf\x8f\x8f\x8f^\xbf\xfe\xf8\xe1\xc9\x0f\xaf\x0e\x8f\x8f>\x1c\xbe\xc3?\x8e\xff\xfew\x8dji\xd5\xfc\xe2\xe5\xe1\xef\x87\xcf\x0c\xaf\xcf5\x1d\xbcyv\xf8\x9b\xf1\x83i\xf3\x83\xb7\xef\x9e\x1d\xbe3~p\x06C\xb8\xdb\xbc\xbd\x86!\x0c\xe0\xd1#]\xb5\xf3S\x18\xc2\x1av@\x93\xaa\x7fi\x90\xf7\x8f\xed5\xae\xf7\xeb\x89$A\xcf\xf9\x9f\\\xa5\x19\x13-?o9\xd8\xb9q\x18\x0b\xbb;\x92\xe4\x0b}\x8bT\x1c\x0dE\x83\xbbn\xdb\xe9=O*\xaf\x7fxh9\x89D\x84\x9bF\xaf^\xa9\x0e%\x0bH{\x98x\\\xa88w\xb0JH*r\x9e\xcb\x94\x05<\xd3\xc6\xeeCLw\x11?\x84h{\xdb\x87t\x14\xf1$\x89\x11\x13\xe8\xcd\xee\xf5\xa9\xd3l\xed\x01\x0d\xaa;:\x06\xa2\n\x98f<\\\x82\xf6\x8f\x8fy\xe9|\xe2\xfd\xc1OW\xf6\xc4\xa9\xe3\xb7\xd6Tb\x85\xf5A)\xe9a\x13\xc1P\xb9\x04\x8f\x1f?6\x995\x84\x92j\x1bb\x11C\xbd\xd9\xc0\x9d\xbd\x07w\x1e\xdc\xfb~\xef\xc1]\x9ca\x19\x99\xf8&|\xa3o\x85MZ\x93\x92\xcf\x04>\"\xcax#\x90\xb7Q\xf1\xe1\x06\x9c?l\xc5\xf2\xeb\xf9\x9c\x0dm|v\x90\xda<\x19jP\x16\x9d\xde\x92Q\x91\x14\x1e\x0da'\xae\x14,\x1cJ\xd0\xd5_&\xf0xXW\xc0\x9a\x06v\xd4\x96\xbd\xf1\x83\x18\xb9\xe3\x86}\xed\xda^\xbd\xaa\x8f\xa1\xbd\x0f\x0e\x80\xab\xc5i\xc4\x986\x97/\xb6\xba\xbf l\x03\x1a\xc5j\xb1\xb4\x8cC\x92\xe5\xe2\x99\xbc`\xac\xde\n\x02\xbf\x9f6\xabT\x83pd\xd6\x9c\x07\xef`\x08{\xcd\xdbo\x9c\xb3\xb6\xf3M\x9d\xa4\xcd6^\xf1\x93N\xbe\xa09\xda\x9e\xc1\x10\xde0\x1cye:\x02\xbe\x1a\x08\xf6<\xca0\xbb\x8833\xfe\\\xae\x94!\x99\xa7\xb4Z\x94\x0b\xc5\xb6\xe0\xa0\xb2l#\xf6\xbd\x85\x8a\xc2\x01\xa4\xc5\x19\x12\x89\xb2\xc0\xd6\xd3\xd0\xe0\x078Mb\xd3\x89\xebH\xab?\xda\xa8\x82uH\x1c\xfd\xac\xe3j\xad\xdcc\x18\xd4\x0fv\xees\xebWW6\xf6\x8b\x9d1\x00S\xd5h\x8a8\xe3\xd4\xc5\xefv5\xe0\xaf\xda\xf4\x1d\x05-\xe7Un\xb5\xc5\x96\xf5\xdd\xfdj\xef\x8e3(o\x90\xd6\x8e\xde`\xedR:ze\xcaM\xa4\x9d\xbb\x92\xb7\xdaiD\xbf8\xc0X\x13\xcc,\xb8\x14\xa7.^Z\xbb(\x92\x01\xa8G\x8e\xdc\x8e \xcf\x95-\x85\xe8>M0]\x83\xb5\x80\xb5\xbc$P\xd1y\xbd\x12\x167\xac\xd5\xe6!\xe7@\xa85\xc3\xfb\x96\xa9^\xd8\xe1\xc5\n3\xd3q\x06\x0d\x92\x14\")\x15 5K2\xe3[.\x0b\xd8\xd3\xcf(\xdd\xf0G\xfb\xe8.o\xeaV\xbb\x8a\xecj\xa6\x083\xc0\xfd\xc5\xb7\xc1\xbdO\x13\x94\xc5$\xc4\xc5\"\x84\xcd\xb5\xa0\x98\x9f\xfd0\xa6\xe9\xbax\x99\xba\x8e\xf2\xc6\xb7\x8dR30\xa2\x0e\x84\x8dSH\x91\xf2V\xe8<\xb6\x1f\xadc\xf3\xbe}pr4h\xe0\"\x14\xef\xd7F\xa6\xfe\xfa\xaa\xa8\xaa\xa8&\x1f\x81e\xb0\xbd\xd1\x918\xa0\xc75\x05t\x00_\xfb/\x0f\x7f\x7f\x0fCx\xca\xfe\xfe\xe5\xc9\xab\x8f\x87\xec\xd7\xcf\xec\xd7\xe1\x9b\x0f\xef\x8e\xf0\xe7\xbb\xa0\xd2\x7f\x14g+\x9e\xed\xbc6\xaa$O\xab\x99\xb9m\xf4\x85\x1d\xf0\xe6\xdc\x0bJ\xcb\xa3g\xe3\x0em\xd6\x1b\"\xdeK\xae\xb7x\xd9Of\x8e\xed\xbc\xf4\n'\x92\xc6\xc0^V\xa7L\xbe8\xb6\xa9\x1b\xdb\xcb\xab/*\x82\xef\xf8\xb84\x8e\xb2\x91\xfc\xbb\x17@\xef\xb2i\xcfQ\xfb\x99\x84\x939yG\xb2\x962\xc7JW[\xbc/\xfc\x10d\xc5\xafB\xd6\xfb\x18\xe3\x83)\x17\x06\x957\x87\xfc\xc5\x12\xeb\xcb\x8a\x0f\xa2\xfc\x99\x14\x1c\xcb\x8f\xc4\xd9\"^\xb0M\xa3\xe8\xdf%\x86HLdB\xcb\x82d\xbc\x02\xa8K\x0f\x89S\x00\xbe\xe8b\xd6\xda\x05\xf1^\x04\xf0\xd2\x0f\xe0Ee\xf1%\xbdu\\\x13=\xa6\xdf\xe0-\xdfp\xc7\xf4\x1b\x16L\xbfQ\x19`II\x1d\x9b\xd6\x0d\xf1\xc65#\xfc\x88!\xfc\xb8\x89\xf07\xae\x19S\xea\xb5\xdd\xf5=|\x13\xa64\xbb \xde\x8f|=\x7ft_\xcf\x1f-\xeb\xf9c\x8dr\xd1o[\xcb\x97\xfd(\xe3-D\x94\xfd\x92\xda[\x86\xdeB]\xcb\xc6\xaf(ro4\xb5\xb7?\x05\xf0\xcf\x00~\x0b\xe0\x1fM\xa5\xe9\xfb\xc3\x7f\xa0\xc2\xd4$9Rj\x11\x1d\x8fCQ+\x83\xd6\x88M\x17\xf6\x95\x18z\x90\xfc\xa50.}&\xebL\xcbC\xf2\x91$\xb26\x88\x1c\xca\xf1gQ\x0b\xab:4\xd2eh\xb1u\xf2Q\xa9\x9f7\xcc\x9f{\x16:+\xe8\xd2\xf6\xee\x84\xe1,\xa8\xdd{*\x0e\x83zm\x1fCG\x91\xa1#y\x16\x95\x06\x8c\x7f8\x1aX\x90\x1b36\xf8\x13k\xcd\xfbI\xe8Z)\xf5F\xe3Ff\x16}\xbby\x0brh\xd2\xe0\x88.\xa8\xdf\xe4\x9a\xbf\x94o\xa4\xfa7~(\xdf\x88\xf5oh\xa5\x9c\x83R\xc8)TOf\xcf\xbe\xabK:\xa3\xcf\x01\x9c\x8dAd\x8a\xed \xf1t\x92Y\xc3\x16\xa0gza\xee\xdb\xa7\xc7\x05\xb9k\x9aEfG\xf2_j\xd8\xa2A\x0f\x0d>\x14\xab\xeb4\x04v\xc29\xa9\xcb\xa8`\xcd\xf4@\x8dL\"xa\xe5H\xd8\x01QZ6\x06\x01\x864\xef>\x84\x1c\x1e\x0d!y\x08\xf9\xf6\xb6\xa9\x11\x10\xe3\x08\xd1S8f\xa2\x15\xec@\xced+\x83\x7f\x15\xc8\xc5\xe6z=\xe2\x85\xa3\xc18@\xc5]8\xda\x1d\xb3/\x03P\x02\xdas\xd8\x86\xa6\x12\x0e\x1a\xe2\x97\xbc\xe4g\x8d\x87\x96\x04s\x0dV\x99g\x83tZ\xa6\xd9\x9f\xbcL\xda\x152B\x96\xaf\x9c\x0d0\x0c\x1b\xbfzV\x96B^\xd2\xf9\xc3}a%\xf0\xb7\xb7\xe11:W\x9b\x1b\x077u\xa7\xbc\x8cjOy]\xc2>\xc7\xcc\xb9P\x1f\xa9i8s\xfbp\xa4E\xbe\xe2w5\x94r}\x8e\xf4z\xa8\xe9\x93j\xbe,\x03\xb8\x05\xbb\x85?\x8b\xf0{\xf1\x03\x89\xce\xf2C\xdb\xc1\xf6\xcfbh\xff\xd4#\xce?\x85\xcd\xa0e\xab\x99\xa0u\xda\x02-\xaa\xaa \xb8\x8a\xc0\xd1WhIm\xceB\xfa\xa5X\xd6\x96BiC\xbf\x1a\xa7\xd4\x13\xaeV\x01\xf4\x9e\xf2(\xde\x8c\x92\x15\x84\xf0.\x8cO \x9c\xaca\x17\x83\x1eAX'w\x83\xea*\xc9\xba#\xb8V~\xa0$\x01\xe0\x9eo\xa2\x1a#.ax\x92\xa1\xeb!\x81G\x82cco\xef\xc4\xd2\x84s\x8c\xc5\"T\xbd\x1f\x89\xa7\x8aj\xf3\x18\x87\x86\x83U\xb1FE\x0f\xfc{B\xa2\x85\xe7\x11\xd8a\x04\xf8\x16\xc4L\xb4\xf2\x99l\xde\x0dw~+`\xf9\x9b\x1ew~\xfb6\xdc9\xd6\xeb\x129\xbe(*\xa5'\xa2\xfaa\xdd2ah\xf6\x84\xda\xdcL\xcf\xadO/\xc4S\xf5\xa1b\xc6\x1a\xfdc,\n\x01\x11\x8f\xd2\x00n\xb0\x95S\xe3\x1eN\x89SIW\xc9\xb5\xb3U`\xe4\x91\xdb\xb4KM\xfb\xe8\xad4g\xf8c]\x05\xf3J\x9f\x9dL2\x15\x7fY\xa5G\xe1![Q-\x95\x1e\xb2CH\xb9\x8b\xac\x11W\x84\x8a\x88z\xf1\x88Q\xae\x14v\xd0\xa3+\x1a\xa3\xf0\xc7:*wf\xc4P\xd1H\xb5\x1bu\x1d\xb4\x93u\xb3\x0e\xe9&\xaa\x9dBc\xf2\xfa\x89\xea56\xdd\xb45\x05\x10\x1e\xa3\xfa\xc3\xc6\x819i\\\xac\xda\x16\xaei\xa1\\\x02/Wf{\x9b\xad\xcd\xf6\xb6C\x14 CuB\x03x\xc1\xe8\xd6\xd5Q\xbd\xee\xe5\xaaC}\xae\x1f\x1eQ-\xcaW\xfa\x9e\x87\xee\xf1lJ\xd3\xf5(wM}\xa2\xeb\xdcX\xbcS\xbe\xb3JSU \xd8ju\xa7%|\xa7%l\xa7E\x0f!1+q\xcfDY\xbc\x14\x173\x82\x1dH`\x1f\x12\x83\x9e\xaf\xb63\xf31V!\xae\xee\xc6D\xab\xb45\n\xa3\xcd\x14\n\xd7\xb5=\x05\xb8\x8c\xfbS\x01\xa1qw\xa6\xad{8\xb9\x8e=\xdcm\x15$\xe4P\xd3\x1a\xfdu{>g{>w\xdb\xe3\xca\"\x8e\xa6\xe5!\x17\x8bC.\xd6\xee\x8b\xc2[\xc5a\xad\x19*\x96\x121\xaeeEhR\x84\x0c\x03\xf7,\xb1\xe5w\xafj\x96\xb5\xd4\xb02\xe8$\xbex\xb1A\x06-vq\xf4\x10\xb6\xbc\x08O\x05\xb5*#(\xb9\xbc\xbdHT]\x84t{[\xec*]\xfdR1\xe5F\x8e -LK}\xf5\xb5\x025I;C\xd5\xa0\xce\xf9\xa2j\x89\xf9v\xf9hh\xd6\xb0\x02\xdd\xb7\x1aQ\xd6\xa1E\xcb\x81\x8b\xc4\x9d\xd1q\x0f\xe0\xd2\x08\x15\x9e\xd3F\xf0R\x81\xf2\xe9\x7f\x01\xcaW\xea\xc8\x17$\xb0\x08!\xe0\xb6\xaa\xa6\x83\x80z\xa0\x14\xc6\xa8\x87\x0e\xcc[4J\xc6\x01#T\x8dC\xc206\xb6KbEK\xc4w\x89\xb1\xf2\xbc\xa4\x9b\xb1M\x9b\x84&\xb6Q2\xe6\xe1\x90\xc5\xd8\xf2\xea\xc0NR\x12~n.\xa8 \xdb\x1a\xc7\x96vy\xffc\xbb\xaf\xb6\xb0F\x82\xa6[l=\x10\xafc\xef\xe1J\xc0\xe3\xf2XmS\x18\xb6oT\x90p\xe3En\x8b\x8dkQ,\xf2\xa0<\xb1\x87\xb5\xafY\xad\xcb\x92\xfdMG\xee\x0c\xefZ\xd0\x805\xbd\xba\x8b]M\xd0\x86\x03\xe8\xbd#+\x12R\x18\x8d{\xb0_\xfe\xe2^\x10\x8aZh\x1bz\xe5=\xfc\x96\xdd\xa1\xd1\x92d\xd0t:^_\x9d)\xd71\xe1|\x08\x1a\x06\xbc\xd2\x8f\xac\xf4\xe3\xca\x85O\xa9\xaa\xf8jFe\xd5\x9a\xc7\x94\x05.\x13\xa9\xec\x1f\x06*#\xca+1{|\xaa\"U\xd2\xba6\xb2\xd7\xa2\xba\xe4\x0e\x0f\xa6\xab3\n\xf5\x91\xa6\xe4\x8c\xa4Y\x177\xed\x16\xb8N\xc9\xc5\xdb\xd9\xd5\xc1\n\x07\xa81\xdc\x19X\xbbY\x84\x19=\xba\x86\xaeJ\x0cm\xed\xf2\xea\xc2\xd4\xeeC\x88\xe1\x91\xb2\xc4\x10;i\"*\xc3\x8d\xeb'ZlUB\xc4Ns\xe9.\xe5tbU\xbb\x11k\xc9f\xc2#\x88%\xc5)Y\xa0X@\xc27\xd6\xd9\x83\xeb\x12?\x1c(l\x05\x9a\xc2H\xe9\x88\x87\xb4\xaaz\x87\x83&f*S=k\xda\xfb\x19}_\n\xfa\xbe\xbcf\xfa\x8e*cI\xde\xf9\x0f\x85\xbas\xed\xee6\xf4\xfa\xfd~y\x97\xc4S\xd8\x06O\x08\x15\xf3B\xcd{\x00=8YW>'+\xcc{\x84I\xe74'\xc1\xf2zO\x029\xdcR\x17 \xdfU\x87\xd28#\x96W:#$\xe7\xe0Q\xd8Q\xfb\xf6\xe1\x96\xd2\x9fq\x7f`\x80\xf4.7\xc8+d\x82\xdf`k\x84:\xf1\xd9\"\xd1\xd8\x1ejCv>wj\x87J\xd1\xa9r\xb8\xa0K\x01\x9e!\xe5\xd3\x80\xdb\n\xf0\x8c)\xef\xfa\xf0hX\xf8\x96.\xa9\xb7\x1b\xc0\xae/\x8e\xa7\xa5@\xeeSB=\xd5* M\x06\xec>\xd1\xdcG\x905\xcf\xae\xe5U\x0e\x9b\xb3\"\xaa\xb2\xb2B\x0d\x85/\x18\x031.\xc3\x1c\xd4r\x07V\x87\x03\xe1Z\x89N\x96\xece\xeeSa\x19((x\xba\x0b\x1b\x93s\x14\x1e\xa1qY\x8d\xd3\x8b\xe1_C5G\xd1w@\xfd\x87\x0c1\x94\x9b\x0f}\xc0\xd7(\xdcR\xdf\xb5\x12\xdcC\xea9\xa5J\x8f\xea%]\x145b\x99\x9a\xffg\xaax\x99\xeb1\x0d\x94UxEG\xd4\x9e(\xb7\xea\xb1\xf2\x96ao\x00o8\xac\xdf\x89\x9c\x19\x14\xd3\xe1\xc0+\x9e\xe8\x1c\x9f3*\x8e\x8d\xb3\x83\xef*Y\x16`\x9fw\xd6 \xc7\xe7a6\x7f\x9aLU\xc8\xc8[:\xe5bT\xaf\nV~\xe8\x08B3\xe3\xf9\x9a\xd6\\M\x11~G\xdccM\xadPji\xa3\xfe5\x1d=\xa5c\xa7/\xb7>\x1b\xc7\x0d\xa6\xc6\xfb\xa2\xea\xc1\xfa(;\x8c\xf3\xa5\x08\xc0Bw8\xdd\x13\xa7\xb1\x98:k\x07\xaf\xfa\xb5p\x98\x8c\x93)\xf9\xb0^\x11@\xd2\x9e\x9dG\xbc\xfeYq\xbf\xad)vM\xc2\x8c\xc0`\xbf\xf5=Ph\x7f?\x8f\xa3/99zf\x9e\xa3\xbc\xb0\xf9\x07\x1d\x9b\x9f&\x13\x0c\x18>\\\x10\xf6\x0f\x9fl\xedf1\x06k\xd3z\xa56\x88-\xa5\xac\x96\xf6=\xfd\xd7l\xb9\xb6\xb7?\xd0@=\xfan\xc2\x07\xbe\xf7?\xe0\xde\xb7\x84\x88\xbc\xa6>\xc3\xfa\x8c\x18=\x1c\xc1\xc1\xd1\xb5\x8aB\x7f\xc8\xfa\xc8C\xfc\x81.\xcfu\x8f\xc1\xde\x9b$\xde!<\x95q\x19H\x98A\x98\x12,\xfa\x86\xd9\xb5\xc9\x14\xc2\x0c>\x93u\xd67\xd5=\x90\xdd\xb3\x0d%\xa2\x8dy9\x89\xd2#$\x80\xa7\xd4\x14W\"/R\xec\x9b}\xd8\xb2\x04x\xb1k\x92\xc4\xb3\xe84w|\xfb<\x8d\xa8\xdb\x9b\x82O\xd7/>\x80\xb9\xa4\x1e\xa8\xe5\x0d+N\xf5\xddH\x86`\x93\x95H\x12\x85\x83\xd7}\xe0\x1b\x1b\xb2\xab\xdb\xd4K\x95\xb5\xdd{\xee\x87\xab\xd5b-\xd8xCD\xbfz]\x06\x162\xc9\xce\xc0\x16\xc8\xb6\x13\xc1\x8aSzI\xf2\x1ax\xff1F\x08\xd1\x042B!\x84\x98\xed\x83\x12rr\x8c\x90\xc4bOXQ\x9f]T\xce\xc1<\xfb\x0e\xf4\xc4z\xeaw:\xed\xa5\xf2\xb5 k\x8caP2\xdah\xf3\x01\xd4\xa0\xc5\xcb)\xb3&y\xfddT\x93\x96\xa5y\x18\xf7@\xa6}G/\xd2\xb7\x06\xde\xbeP\xc7\x10\xce(\xa9\x16\niiG\x03\x05\xbep{\x00\xdf\xf1T\x85\xfd\xc9\x829\xf3Ld\x15\x16\xd6\x97)\xdc\xbdu\x9d\x11\xfcW6_r\x85\xa7\x92\x01\xeau\xb82\xa6<\xfb\xfa\x8d\x96\xc5\xe34IJ\xcd,\xfb\x81\xa2s\x11K\xc3\xf36\xf9:\x93b\xa5\xeb\xacS\xd7\xffP\x93B\xd9\xe7\x94\x11z\x14wh\x1a'\x92\xaf\xa6!%G\xf8\xf22h?c\xcd\xdc\x92}p)Y&g\xed\x92\xb6f\xd6K{\xc3S\xb2 l\x02\xaeM7f\xed:\xe5e\xd7)\xf3N\xea\x0bbO\x1c\xcdE\xc8F\x89\xcb\x03\xe1\n\xe2K\xe3L1\x81\x11\x1d\x8bF\x1d\xc6\xd2D\x0f\xc3h0\xd8\x15\x9d\"E,&Gq\x8b\x8flA\xa2]\x12I\x9c\x898P.\x80-\xcd:\xd1\xbc\xd5\x17\x8f\x91\xbb\\\xf8\xe1\x99\x89\xe2\x99H\x19\x93`\xf0Hk\xc5\xd8\x0c\x86\x10y\xb6\xb2\xdcb\xb92\xbe\\\xc2Y\xb7\x19C\x06F\xa9\xe3\x94z \x03\xb2\xc8\x1b\x9c\x11\x1a@/\x8ay\xb5\xfb\xcfd\xfd3V\x883Cf\x82%\x80-\x1e\xa8\xec\xa5\x99\x98\xf2\x92M\x19\xa9\xd5\x84\xed'\xf3\x07X\xa0\xd4\x9b\x95\x0bhU\x94r\xd6e&f\xcf\x7f-\xd9/\xb1\xdb\xbd \xc3W/)y\x19\xe2\xe3\xd91 `\xa1\xe1\x01\xc4\x9e\x8fc\xd4\xe9\x1a\"\x1eE\xdfi\xd1\x9b\xe0\x9a\xea\x96\xd9\xfa\x0e\x98,Hh-J\xa44\xdet\x8b\xa1\xdc\x1fB\x1c8\xc9yL\xd2\xa3gp BaE\x0c\xe3n\xa0\x9e\x14CQ\xb4S|\x83\xc1\xfb\xc3\xf2\xac\xe0w\xc3\x05\x15\xf5N\xb6\xc4M_pw\xd6\xc9,Iz\xda\xaat\x90\x90\"\x02\xae\xb2ks>\xc0f\x1f\xbfF\xd5\x92c\xb6\xf3\xa4\xe8\x08\xfd\x97\xea|\xd2\xa0\xe9\xc8\xd1\xec\xaeJ\xa0\xec\x86pM\x0fFl\xa9\xd2L\x12 \x84\x03\x07\xad\xaf\xf8\xde \xf0\xf3e8\x90\x7fI\x1d\x0d\x12\xd5}\x88Gj4^\xb3\xa8m\xcb\xf1\x81M>#\x18,\xdbi\x9d#\xd2m\x8dY\x1fN\xeb|%\xd0\x17\xc3J\x88\x87b\x85\xe3\x88\xfe7\xa2\x02\xae\xd6\x81\xfa\xebzQ\"KR\xea\xca\xe7\x1c\x11\xef\x17R\x98\xfd\xdb\xdb\xfda\xdd\x81uT\x1b'\xed\xedWd\xa0\xd6 \x14\xb2\x16[\xa90{\xcdu\x11:\x06@.)\"\x16\xe9\x9f\x87\xd9\x13NO=\x1f\x8f\xa1\xe3c\x12gyJ\xde2z\xedU\x89\xb7d\xa5\xac\x03/zw\xdc\x83\x8d\xf3\xa1zn\xa8\xa3a\xa2\xd8{;\xd8\xc2\xecHjb\xba\xf5\xaf\xf6\xd3\xb22\x05\xc8\xba\xf5 \xce-k\xdb\xdd\x1c\x9c\xa4F\x84\x9c\xc3\x0dw\x99\xa7\x93\x17\xda\xb7:1+\x87{\xe1m\x83r`3\xb3H\x0b\x11\xe1\xc1v\x1e\xc1\x043\x043\xca\xe8l\xee\x01/\xfb\xd4\x02\x01e\xb5[\xf7\x96\x9cI\xc9\xe0\xe8\xb0\x15\x0e\xe0\x9f\xb4dmT\xb6&(\xf3: K\x83\x1c^\xad!%\xf7\x83\xca\xe0\x0c\x04\x83\xa3\x99N\x941\xc9}\x08\xcf5\x9eC\x1fi\x00?\xd0f2\xe0\xd7O~6TO\xfb\xc2\xdeV\x81dR\x0f\xfenN\xfc\x81\xc3oNH$*j\x18\x1f\x8c5>\xac @\x0c\x9d\x9cDt\x89\xe0\x90\x90\x8f\x13\xee\x82\x1c;\xf5\xf9\xcbU\xfa\x9c$yL\xaf\xdc\xe5\xcb\xabt\xf9\x99\xac\x7f\xe4L1i@\xd7\xad\xdb\x17\xd7\xd7\xed\xda\xb9\xd3\x1b\xed\x9d\x1eS^j\xb4\xdc9E\x84M\\\xfa6\x87\x93\xcf\xc8\xbc\x14\x14\xe5'\xea\x89_n\xda\xd0\x1f[S<\xf2\nH\xa6}\xac\x0b\x025!\x0f\xad\xa9,$fGAA}\x10u\xa9FM\xd1\xd4Q\xf8X\xe4\x0c9\x84\x08w\x9bN_a\xc0G\x11%^\xe8\x97\xf8\x82\x06\x10Zy\x15&Qq\x89\xcd\xd3~\xba\xcf\x10Q\xac'e\xfc\xc8\x85\x17\xfa\x01\\x\x0cU\x18\xc4_\xc8\x1c\xae#\xf6\x99k:wB\xec;\xbeVy6\xf74\x9eEF\xf2\x92K\xa0En@\x8e\xac@.v=zm\x95j\x95\x9b7\x01\xb3\xb0V\xd4+<'c\x91\xd8\x97o\x7f7\xce<\xb1\xef\xeeR\x9433\x15\x002\\\x0cu\xf8Ue\x1a\x8e\xb7\x92\x8c\xba\xf2\x9c\xab\x84\xcc\x9ax<\xb9\x8a\xce\xadjx\x9e\x8d2\xf2\x85\x1e>jY9\x13@r\x97e\xe1\xdb\x1c-Cq\x7f\x16\xb1\x93\xc1\x01\xfd\x8a\x8f\xcb\xc4\xb9\xcdA\xfa\xbeb\xedb\x07\xb2\x9af\x17\xe9jy\x8am\x18\xa9\xc0\x94\x87\xca7W7\xb5\xa7\"\x1a\xaa\xf8\xc4\xb6\xe2\x80&pq\x1e\xa5U\xabi\xab\xf7pE\xfe^\x8a\x1a\xa3\x08x\xec\xd2\xf8\xad\xc6e\x02o\xabA0\xa6\xa5\x93\x17\x95n\x19\x86\xf4\xb1\x97\xd5z\xd2\x05A\xc3\xb2\xd2\xf1(\x1a\x17\x0e!\x9a\x81bf\xf2\xca\xd1\xe7\xc5\xa3]G\x89#l9iA\x84\x86x\xf7\xef\xde\x7f\xf0\xe0\xf6\x9d\xbb\x0fx,\xcf\xce\x10\x03ax\x1c\xcc\x9d\xdb\x83{w\xef~\x7f\xef\xae\xef3f\x0f\x1f\xec\xc1M(\xbeQ\xee\xdfa'\xd3\xde\xdd\xbd{w\xee\x0en\xdf\x0d\x80\xc2\xb6h\xea~\x00\x83\xbd\xefy\xf3\xf2\xde\xe0\x9e\xdb42\xe2(\x85\xa4\x02\xc5\x0fm\x15E\xa3\x11\x19\x0b\x01\xa3\xd6\xbb\xfa\xeb\x0b\xba\xba\x08\xde\xec\x0b\x15\xe6p\x18\xb2\xbf\xb9\x15.(\xffD\x9dz\xf1\xd2Q\x1c\xc0\xef-N\x11\xe6\xb9T\x0eCUz\x17\xc7\"g.\xa2\xf2X\x84G\x90\xf3\xd3\xd1HH\xa7\x88\x9e\xd1(\x193\xd4)s-\xb2\x1b\x03\xe7R\xe6\xb5Y\x19\xcd\xf0*\x1fi\x9d!\x16\x1b\xe1;6\xc0\xd3\xb9:\xdd \x9f\xee\x0c\xcfc9\xdd <\x02\x8cm\xda\x9abB\xe0l4\xc1I=\x84\xc9\xf6\xb6\x81![\xc0\x90\x7f\xa7\x17\xc8\x16p\xc0\x9b\x19\x8cq0\x11\xec3\xeeWQN\xea\xbf\xe3|\xb0\x17\xa2g\xd4\x02]\xc9.\xbc\x84IQaIH\xb3\x96\xec8\x18\xc4\x81\x0e~[!\xfb\x7f\xe1\x9a\xf0x\x08\x13]\x98\x8a\x15y\xe4\xc5\xa5Z\xe9\xb1\xf8\xdebp\xaf\xa0\x9b\xe0\xfah\x00\xe8\x88\x1a\xc0\x88u4\xf6+\x1c\x19q\xe1\xc8\xe4%\x9d\x0d\xc8\xc8\x94\x00O^\x11b\xb5 \xff\xb4\"\xa2\xe6\xa8h\xc9\x8d\xd5?@\xcbE\xc9K\"\xbb\x9e6\xb3\xae2\xabQ\x9eMa\x05\":LQ\xf0J9\xd3\xd81\x93\xf7V\x0c\xb7\x90\"em6\xff\x03\xe4\xaf'\xc2\xf6\xbf\x03\x038\x80y\x7f\x95\xf0J\x10\xf3\xd1\x84Q\xa3\xc6\x8d\x11\x1b9\xe3\xc7\xe7\x9c\xc1\xe4\xbf\xfd\x00{\xf6j\xda\xbfyi\n\x97\x02s\x00\xf36\x96\xf42\x80_\xafL\xce\xb4\xd1e\x88]\x86\xcd\x8aB=\x13W<\xafZ?\x9cG~R\x94}\x0c\x9a\x91D\xd2\x10\xae\xe95\x126\xd60\x93snr\xee\xae\x08\xcdF\xe5\xec($\xfc\x11fF\x1e\xf38..#\x11\x1d;Q\x07\xcf\x95\xe9b%3\xb4L\x00\xfd\x84z\xa9 T\x8a\x80H\x04\xcb\x13#\x90\x88E\xaa\xcc$|C\xfd\xf3I\x15\x86\xfa\x97f\x18S\xb95\x04o\x027A\x87\xdaH\xd7\x90PGue\x8e\x96\xa0J:\x1d\x12\xde$\x02_\xdf\xf9J\x8e\x10\x97K\xff\x0e\x1a\xdd\xe1\x00V\xa3\xc5\x18Z\n\xb1sE\xd9\x9c\x9b\xc5\xf8BW\xd7J?;\x1e%>w8(8\x1c0\x94|\xa5\x90\xf7\x99\x95\xbc[\xdc\xbc*\x15\xbf\x04C\xc0\xf63\xaf7\xb3\xf6\x03\xc4\x8c\xdd\x87\x82\xd5\x8f\x1fB\x88i~\x18n\x0ca\xe0C>\n\xc7\x88\x067Q\xb3@F\xc9\xf6\xf6\xd8R\xb3\x0e\x14\xa1t\x94\x8e\xb9\x8a\x8b\xf5\xc8M\"\x98\xe3A\x1f\xcc\xcf\x1e\xaf\x02\x98\x04\x10\x0605@R\x9c\xe7\xec\xffj\xb9z\xb5H\x7f\x93*\x11\xb4x\xb2\x04\xb6\"\x12\x0df\x81c\\\xeaWxS^q\x0eRQp.W\x88?{k\xe03V4\x1fc\x9ck\x0e\xdb\xc6\xd4\xb8\xd0~xs\xa8iA\xd6\xc2!\x15\x1c\xb6\x84\x9a1M \x14\nu\x84\xda\xb6@\xaa\xa8\x84\\!P\xb8\x80.\xa9\x80\x8e\xab\xd6\x10tb\xcf\x86\xf0\x08\"\xdc\xb1>\xbb%h\xbb\x97\xf0-\x1b\xf3\xd7w\x06\xa8\x9d\xe5\xf7\xe8(\x84m\x97rn\x86\xc2\x1f*\xee\x19\x8f\xcc\xe3\x82\x9d(\xac\xa8'5\x93\xe6y\x95\xbb\xe0&\xda\x93\x00\xce\x1b\xe7\xe5/\x7f-;aa$Z\xf8\x08\xce\x10Df\x11)\x81\x03Ht,\x82\xceo\xf2\x97\xffel\x82\x94\xcd\xb4/L\x1cNa\xc6&LF\xa1\x81Lg<\xf8\xc6\x911\xa0\xc4\x9bu=\xa2\x85#\xadC\x0f\x05O\x81\xf6z\xc3\xb1\xd2.\xc3\xed\xec\xac\xe0\x11,\xae,\xb7U\x08\xecn\xa0?\xe0cy\xc0s\xa1y\xc0%\xe5R,c\x14d\"\xce\xfc\x0c\x1e=\xc2#\xbf]L\x9b\xa1\x98\xa6[\xac\xca\x9beT0\x1e\xb3!\xfe\x89\xb4\xd1\x8b`3d\xc2T\xce\xf9 \x06yc[\xad\xf2ZIB\"-k\x01\x92\xbd\x98 \x87\x11\x1a\xcd\x8c\xab\xedm\xfd\x9a\xcf\xbb\x9e\xf2\x8cS\xcc\x88\xc7\x99\x99\x05\x93\x9c\x8cta^\x90K\xe9\x00\xb2\xaaQ\xcbi\x95ZrNj\xc5\x98\xa4:\xd9xyej\xf9\xdf\xacKz\xf9\x9f#\x86\x82\xae\xe9wy\\\xe6Z\x14\x86\xbab\x8e\xa1\x92\xc0\x8f+\x7f\xb8\xbe'&\x8a_\x1d\x0eZH\xe1\x9a1\x14K\xf2\xff }WXr\xee\xb3\x8a\xd5\xf4E\x99\x97P\xc0\x92M\x80\xb1\xee\x13\x93\xf1\xb4\xb3\xa6\xa5]\xcb\xf2\x1f\xd4\xb0\xbc\xd4\x00`\xde\xd8\xe0/\xae\xbc\xc1\xa5\x18\xc3\xa3B\x0b\x9f+\x86 2\xa2\x8e\xdf\x18\x8cu\x0c\xc9\x8b\xeb\xd9\x835U\xaev\x99\x90\xe4!\x06W\x87i\\./\xc3\xea\x19\x05\x12(\xf3\x08\xfd\xc6F\x0ce\xc0\n\xc3H\xd8\x87\x0c-\x01Z4\xaa\xac\x1a\xb68,\xca\x10\x89e\xd3\xe1\xadXv\xde\xa5f\xd7#\xd1)w~c\x91+\xba\xf3\xd2\xb9\xf6\xa5\xfeve\x0d\xac\xa4=n\xd0\x91\x94\xd3\x91\xa8V\xb6\xe8!\xa4\xa2\x84L\xea\x94\"9.\xea\x97\xa0\xe7\xc1X\xadwY\x9f\xdc\xaf\xfaY\xfcrm\x93\xe3L\xa6\xdb\xd4\x0c\xbcN!|\xd5\xe6\xa5\xe7w\x18(\x12(\xb3\xcf$\xfdJ9\x06\x13,@\xa7=}qE0H\x8a\xac\xa0k\x03\xad\x88w\x83\x06\xf0\xd5\x0f\xe0\x86\xdaKL.ZS;\x14P\xa6\x12\xca\xe8_\x19\x94A\x02\xdc\x99\xf2!\xd8\x8b6\x88\xfa\x13\x04\x17\xc9\xac\x0e\xc7\xd4\x98<\x0b\xaa\x8e#\x03)f\x8b\x89Z8\xd6\xa8\xa8\xadZ\n\xe1\xdcg3\xd5AI^\x97en\x9bT\xee\x96\xb6n\xb0\xbe\x99\xa8b!>Q\xf0\xce\xd7v\x1f\x91l\xc4\xc1'\xddS\x0f\xb0\xcc\x1e\xafy\xd6:6\xb5KD\xfbj\x87v\x95FR~f\x19\x83]\xd1\x91\xb4I\x0b\xf8\x92\\\xa6\n\x00\xe4]\xbb\x0cQ\xc3/\x18\xc2O\xd4K\x8c\xf6s\xb0\x8a\x0b\x93$\xa6Q\xdc\xa9\xf8C\xb3\x7f\xe5W\x9f\xfb\xcc\xb6\xecj(\xb7\xa7ic\xb4\xe6J5\xe6I\xad\x11\x90*0\xd9*c\x1e\xea5\xdc\x82;\xcd\x96g\xf2\xd9^\xf3\xd9\xa2\xf8\xce\xe4\xb9\xbf2x\x0c\x9c\x89\xd8\xa1\x0bc~=\x87<\x96\x9a\x88Z\xf6\xe5\x9cxJ\xcaI\x8d\xf0-O\x82\xc8\xa3\x96\x0c\xa3\xb1\xbd\xc6\x03\x1fL*t@\xde3~\\\xa7\xf0\x98g\x8dN\xe1\x11\xac\xe1\x00\xce\x89\xb7\x8b\x0c\xcfY \xe2L\xb1\x10\x04\xf1\xe2>M\xb8\xfc\xedcYZ\xd2\xd9-\x06\xfdD\xdeG_ \xf6\xacI\x03\xd2\xa6\xe9-4\xb5-\xfe&:/\x127O\x8b\xb9\xddaD\xc9\x032%-y@\xd8ArN\x19\x9bL\x1c\xf2\x80(\xc2\x87g\x8e\xb1\xe49\xbc\xc4\x11\xf7\xad9-^E\x19\x85Q/\x80\xde\xb8\x99\xd4\xa2\xd2\x93cR\x8bH\xd6\x8a/\x93\xe2\xfbEVrZ\xcdJn9M\x99\x00[\xb0\x96\xe8+\x83#O\xd2\xe842y\xb6I\x99\x8b\xf5\x14\xf7y\x99P\n7\xe1T\x13\ni\x02P#\xbbF\x05\x06\xdd\xb2k\xb8\xda/\x10d\x84\x83\x8c\xb3U\x95\xaa\xf9&\xbfo\xf4\x0d|\xac:\xb1\x11x\xa4d\x83\xed\xee\xb2\x06x,<\x82]8\x80\xb7\x82\xc7\xc3m\xb6+\"L\xdfJ\xa7\x04\xb4\x00\xf0gD\x1b]\x06`N\xb0Gp=\xe5b\xea\xdf)\xed9\xc74\x8c\x16v\x86J\xba\xf7\x1b_J\xac\x81\x02\x08\xc5\xcf\x18%0 W\xe1$\xa2kn\x10\x1f\xc2{t\xc2\xabG\x0dpy\x10E\xac\x88\xbf\x14\xd5^\xa2\xfd\xe3\x059#\x8b\xf2]\xf3\"n%\x8e\xe1\x06Q\xfa\xd0Z\xee\x00\xf8\xd8\xd6\xba\xd0\x13\x8e\xc6\xec$\xd3w\x13 \xbf\x0b\xae\x8a\xd4\xf7\"\xaa^\x98)y\x0e\xea(F6\x03\x16\x16\xa9\xcf\x19\xdd\xca+`F\xd8\xc2\x0e\xea8}\x1fG\x83o%\x15P5\xa9\xb2v\xc0\xdcJ\x169@9\x84!\x1c\x96\xb9\xb3\xf4\xf3\xdfJ\xf4*\x95\x8a\xe3\xc4\xeeC\xc8\xb8\x8bi\x86~\x92\x02\x16\xd9\xb8\x10\xbf\x8c\x049B7\x91\xb0\x80\x1e\xa3\xf1~\x00a\x9d\x82ip\xf4\xc9\x8c\x92\xc6\xf1\xde\x8a\xa2^\x15G1\xc8\xf8\x1b0UX?Q\xa8oA\xd8\xc8\x8e\xb0\xfaN\x9cp0\xa9\xe2\xa0\xc9\xa2\x848\x98b\xb2L\x86]*\x185(\x88/Ez\xc8\xa0\xf1\xab#r\xca\xcdbE9\xd1d.z\x13\xca\x8a\x08\x95|\x81\xf0k\xcb\x8bi2&\xca\x0f \xaf\"K\xf3x;%\x01,I\xc0\x98\x06[\x1a\xf5\x13\xf3iU\xf2\xea\xf2\x10\xd7BX(\n\x8b\x93]\xbf\x0c\x80J\xbe\xd4\x165\xc3\x0f}3|*\x89D\x04\xe3\xb0\xeb\xd7&\x06\x95\xb8g6\xb70\x00\xa3\x8d\xb5\xa2\xc7 +\xe5\xac\x0c\x9e&\xf2\x92\xc4$\x17\xfeK\x07\x12\xc1\xf8\xf1\xbe/\xa3\xdc\xf1\xa7\x99G\x05\xe1\x97\x92\x8b\xca\x87\xbb\xe8\x19\xbb\x03\xb9\xfd\x93 F\x9a\xee@n\xe0\x1b\xf1\x95\xc7\xb0F\xdca/\xdb\xec\xa1\x02\x08\xad<\xbc\xbc\"t\x9ce\xd3\x9e\x14\xfb\xe1\xd8Rt\x04\x14\xb5\x04V{\xdc\x99\xc0>\xa3\x9a\xf6OD\xcb\xe8\xd9\x15\x8e\xa8>W\nh\xb7\x1d\x80\x0c\xab\xab\xbb\xe5G\xa89nYV\x11 \xea\xbc\x80\x13$/\xd5\x05L\xe0\xf1c\x88\xec\xdf\xcd0\x00f\x9b\x1d\xeb\xf2\x03\xcb2\xcd\x8a\x05\x9d]\xf3\x82\xe2\xb9\xf6\xd0\xe8`\xa1^l\xed\xb5\x19]tW\xa1\x8b2 }\xf5+\x12E\xf6\x98\xa8\xd3\xa6\x90\xaf_\xa1P\x85\xb6\xbel\xb6\xe3\xcb\x8b\x0dcR\xf3%lCpP\x08&G\xf2\x19\xec\xc3\xa4\x0d\xc9A\x8c<\xe7\xae\xe8\x19f\xde\x8f\xf8\xa1\x940\xd4\x88\xd9\xa9\x1d\xf9f\xb7\x04\xb0N\xc9\xb27\x90.6\x1e\xbb%\x948\xd7&\xfb1\x1d\"a#;\xd7\x99E\xa3\x10J59;\x9b\xd98UU9\xfeTT\xe5\x04oH=y\x8c\xbf\xca\xacGa\xa1$\x8f\xf0\x87\"5&\xfc\x86\xd0\x97\xe7\xfcW5\xb9W\xe8\x04\x8a\x0bb\xd3\xa8\x9d\xa2i\xd0C\xc5\"\xb7\xeb3\xf1\xcd\xd1\x14\xfe\xbe e\x13\x88s\xee\x8f/\x92\xf3\xd8c*(w\x9a\x7f$\x89\x9bT\xcc6>@^\x18\xf1R\xf1\xa5\x88l\x1b\x93\xb3\x9c-\x9c\xdb\xa4F\\G\xa1%c\xce\x8c\x9b\xf8&\x1c\x0e|cHXX5I3~B\xc9\xbcQ\x9ed\xc3\xd0\xc6[t\xccXi}\xd8\xa0iE\xb3\xea\xc8\x8b\xe3\x9f\x96n\x99jWA\x05v\x1c\xf2(\xec4xK8(nJ\x13Y\xae\x8e\xb3\x19\x83`\xc2\x9bC3OW\xa8\xd9\xd0\x1f\xa0\x88\xc1\xa3\x8ag*\x15\x1e\xa8k\xe2\xf1\xfc\\\x82-E\xae\x94\x8d\x8a\x89\x97\x8d\x02P\xfa\x91<1\x8f\xa4\xb0\xa0\xd7l\xbf\xaaeU\xcf\x0f\xf2/\x1fq\x81F\xb2\x82\xb0\x0dg&\xa4\xab\xfarJ&R\xf0\xad\xf8\xf5C\xee\xb7\x80\xae8XXuX\xf80\xf0P\xad\x14=\x19\xd8G;C8\xb3\"^[\x99wcE/k\x92\x1e%\xe8EF\x9d\xf1r\xc7\xea\x13\x19\x7f`(o\xac\x98\xf5\xd5t;\x98\x9f\xc1\xcc\xb6\xb7\xb0\xff\x89\x0b\xfb\x8f1\x1e\xb0m*\xce\x10\x1623bc\x8c\xdc\xf4>\x9a\x8dv\xf1\xefm\x0c\x19c-h<\x16\x18>\xe4\xf5\xfd\x95\xb4\x91\xa9\x9c\xe1\x9e\x12s\xc0\x0d\xbf:N\xa5\x1a/Q\x88\x1e\x13\x15\x99f2\xe8t\x1bfl\xd4\x0f}|.\xf6\xd1\x84\x8dkR\xdd\xf1\x070\x92\xc6\xa3\xc9X\xec*&\xd8\xcd`[f\x1f\xc8\xd8\x9fg\xba\x11q\x99\x90=\x9e\x05\xbc\x8c\xfa\x8c\x1d\x00\xfc\xdf\x04\xff\xb5Md\xc1\xa5\xb1\x04#\x08\xf0\xcf\xd0\x7f\x08+\x06\x11\xec9c\xbb\xc9i\n\x95\xa1\xf3\xf1\xea\xf1n\xde\xe6N2\xc5 \x8aG\x18#\xc1\xc9F\xc8%\xee}60\xbc\xad\xa8\xb70\xba\xd1pda\x905\xff\xe6\xe6M\x8c\x03F\xd1l^SA\xb4\xd0\x8a5F\xb0 !\x9f\xf0\xe9-a\x08\xd9CX\xc2c8c\xff0J\xd0&K\x1c\xc3\x10\x16HA\x96z%\x89\xbcXwkAr\x8e\xc7\xbc\xdf\xf2\xb71\x81\x94\x9e\xbf\x93\x1f\xf2\x9e\xcf\x90v\xc1\x10\xe6-\x94 $\x83/A\xe6\xb1E\xc1(\xf6iEq\x92\"\x1b\x13\xfax\xd6=\x1e\xc2\xca\x87\x9c\x81c\x85\x8b\x86\xfff\xdcmaR8(4\x9a\x12z@\xde\x96.|\xb2pGf\xc2q\xc4(\x15\xe2\x87u\xe5\xc4>\x9cX\x85\x19\xb60'\\\xe8~\xfc\x98\x1d\xe8\xb6\x85a\x038A\xea\xba*_\xf7\xe1$%\xe1g\xf3W'BP\xdb\x1e\x82\xc7\xb7\x94\x0f\xdf\xc1 n\x92\x9d\x022b?\x8dN\xf4\xc2\xad~q'\x1c\xab\x1f\x0b5\"o\xa7\x0e\xd2\x8c\xad\xcc\x0e\xcc\xd8\x12M\xf8~x\xc4\xf7C\xe5\x83b93F \xc4\xfb\x92\xba\xec\x08\xaa\xb2\xa3\x8d\xa2\xec\x9c\x924D\xb5Fy\x9cp\xb6\x9bV\xd8\xf9\xb0\xd4\xed\x00\xc6q\x96\xeeU\x13\xd5\xbdj\xea\xea^\xc5\xc8\xc49\xf1r.\xee`\xa4f=\xba\xd1p\x1c\xff\xe1\x96/2U\xf3EV\"\xe8\xcb,k\xa1=\"\x04\x93b[\x99\xe0 Z\x01M\xe9{&\x1c\xc2\x8f\xc5\x9eMp}E\xa5\xbf\xdc\xcbxJI\xbe\xea\xd7\x9dR2\xe5\xf1h\x93\x0e\xe8\x91\xc0c\xe94y\xf3&O\x10Uz%'HR$\xe4\xebYn\x0c+\xf5\xb9-\xc5\x1cw\xab\xdeE\xa5\x9c\xd4Y\x9f\xb1My\xe6\xd4\xfe\x91\xbd}k\xa1\xc7\xa7\x9ce~M\xca\xfa\x8e\xecVg\xbf\x9b\xb3\xff\xf5\xf5\x1d_\xdb\xa1X\x94\xc2\x9c\xd5\x11\xce\xd4\xe0\x07\xd7\x94|U\xd5\xc3\x91bT1+!\xca\x14\xe1(\x02\xe1\x8f}\xb4\xdb\xf7\x8fy\xea \x9e;|\xc1\xed\xcb\x0e\xb9\xc3\x9d\xe6\xf4\xd4\xaaLXre\xc2\x92\x8d\xeb\x03\xf1xu\x9b\x0b\xe25B\xfd\x0c\xad\xffl\x970\x84i'\x90,\xbd1\xf5R.\xf8\xe0(3x\xfdb=6LIA\x0c\n\xff\xac\xe4\xf8\xd9\xd1\x1a\x9aT C\x9e\xb7I\x8f\xb7\\?\xd1\xa6(\xcc\x05y\x1cr\xedi\xf9s\x0f\xbe\x83D:n\xa2\x8d\x88\x1b+\x9b\xc9O\x0d\"\xac\xbcD\xff\xca|\x84\x8a\x05\xa55\xc3>\xf2\xfb4yI\xd6d\xfa\x9e|\xf1\xfc\xee\x94\x99\x8ev\x0d\\\x83\xdf\x9f-\xa2\x95\xc7:x\x1d\xf2|:\nn2\xa2\x9bVp\xb5\x8a\xb9\xaa\x933:\\\xa0\xf1L\x96}c\xd4%\xc2\xc3\x9c+1\x14\xe7\xde\\Q[0\"\x12J\xd1T\xa3\xbcTb\xcd\x8c\xb6\x99\x12\x01rD\xa5\xd0\x1f\x0d\xc6m\x8b\x9dr\xd5\x1e_G1\n\x9ej\xdd8\x08>?\xe1L\x9fK\x12Z\xb6\x90\x8bB)\xa2\x19#\xc90\xf1=\xa9,\xb4\")\x07\xf7\x0d\x17\x94#\xd2s2\x0c\x8c\x1f\x90\x93s\xcc\xbc\xfc\xae\xc5\xeb\x04\xdd\x95\x14\xaf\x93\xe3<#/\xc9:SJYH\x8a\xd7L\xe2k\xea\xf4\x8d\x81\xa6k{\xec\xde\xfc\xab?\xb7\xf9g\x7fn\xf3_[\xe2\xd8\xfeAl)b\x89:\x02R\xed\x9e\xdd`[\xbc\xcd\xabSi\x8e6\xb1?\xc0b\x8e\xb2xIkCgE\x99d\xf1\x91\xac\x7f\x86\xdeg\xb6\xbe\xdd\x07\x0b\xean\x12\xddx\x06F$\xd0U\x14as\x9a\x87Y\xab\x1b*\xa8\x1dE\xf1d\x91OIV\xafj_\xb4(_\xe8\xd6\xec<4\xb78 's\xf2\x8ed\xf9\x02\xf9\xdf8\x00\xc5\xa3\xf0c\x8c\x8f+e\xbbl\x11L\x85ZO\xebL\x01U\n\xd5\xa8g\xe5\xc8\x18\n\xafC\xf4\xb5\xa7fu\x84\xb1\xd8\x95\xe2\x9d\xdau~\\\xdf\xcb\x0e\x82wmR\xbd\xd4n\xca\xaex\xbbf1]\xb2\xf0nN\xac\xf2\x92v\xcd\xd4Z\xbeV^\xc8\xa5\xd0\xd6:\xb6\xf2*\xf7\x19\xba\xb9\x8ev[\xb2!\x01\x86u\xcaw\x95\x0f\x07\xe3@\xf9\xbb\xe1^X\xbf\xecfQ#\x19\x91\x97)\x8b\xb9\x1b>\xb2\x95\xc2\x15\xfe\x99\xc9L\xb0\x0f?\x1b\x11\xa9r\xd3D{\x9f\xb7s\xba\xad\x148\xad\x13\xdd\xb4;i1\xd3\x80\xb4\x1e\xd2\xe9RT\x99\x97%O\xcd\x85~\x0b\x19{(r\xd0G\x18&\x8c\xbe\xf6\xbc\xc4N\xaa\x15\xedp@V\x02\xe44\xbc\xab\x12\xa0\xa8\xc5\xd9\xa6J\x83R\xaf\x9c\x91\xfcXX\x04MD)j\x99\xb2\x9e(9\xcdY\xc5\xe1w\xe6\x14\xce\xdd)\x8d\x14_\x93V*\x83\x8ev\x82\xc0H\xf9\xd5\xfc\xf6\x99\xf0I\x8b8m\xb0\xbb\xa8\xa0o\x82\x95\x06I\xf9\x9dA+\x0c\x14d\xcb\x91\x02\x85\x0c\xdf\xb4\x0b\x00\x06uB\xa3*\xa2a\x8f\x7fl\xf7\\\xb3o\xf0Xe\xb1\xe2\xfan\x8f\xbb0G6.\x8br\xf6\x07-s\xce\x9c\x90<\x05\xbe\xeag\x00*w\xd5a\x9c\xa0\xeeE.%\x9a\xb6\x8c\xae\x8c\x07\x83J\x8dl\xd9\xd2 \x16=\xa1&@\xe4}\xdc\x19\xc0\x8e&\x855\x08\xee\xa1Nc\x8d\\A\x95\xc6V\x1a7\xb4|56\xae\x85;\x8c5\xbc\\\xac\x8f\x0e\xf9\x8f\xf3p-\xc5H.\x03\xd82\xc1N\x1f[d\x9b\x91\xf6\x8c7\xf7\xe0\xb4\xe5\x7fpU\xf9\xb5\x9c\xec\xb8\x19\xa3:\xaa\x19\xf1\xf8\xacH\xd4\xebv\xfcFxL-Y/[[%A\x8c,\xa7o\xf4\xe7\xb2\x03\xc5x\x9a\xbc\x80\xb0\xb5kJ\x0b\xf9\\\x87ia\nl\xde\x94gJ\x9c\x80\xf9\x8c \xf5Uy\xa1\x1d\xe1\x13\x8b[/H\xa9A\xe5\x13\xf0\x832\x91\xe2\xf6v\x00\x91\x87~ \x1c\x02hn6\xe7\xf9dS\xad\xfb\x84\x81\\<;\x1f\xe1\x04\xa6\x1a\x1f\x91X*/\xb6\x03\xad\x03\x9b\xe1\xe8\xfc)q.o\xe5F@\x06eT9\x92\xc4\xfe\x854\x84%.\\ \x08\x9bX6\xda\xb5X\xcd\xe4\x85\xd9,\xb5\x89A\xd5\xab\x8a/34\x15*9\x81\x9ecED\x91[\x1d\x91gfd8\xc1(\xf8\xe8\xf9\x1d7\xdb\xc0\x17W\xe2G\x0d\x11\xa7l\x86\x9d\xdc\x88\x98\x101\x80[\xe8\x83\x83\x81\x88\xe8\x93#\xde\xff,*\x98E\xady\x93\x18\xda\x1c\xf1:ff{\xc2k\xa4\x90\x86\x80\x1cF\xc0 \x81\xcd\x06r\xf6W^\xf4\xc8`\xd2\xa7 W\xa1+\x07\xb1\xe7\x97\x90\xd2\x0fJ8y\xe7\xb0\xa3\xc3\xcc\x0c\x86C\xee\xe9\xe7\xb1\xcd\x96 G\xa4]\xd8\xd7V\x9a8\x13^\x8d\xf6cg\"Y\xcc2\xdc \xc4\xcaZ\xd2\x18\x1a\x96\x06\xc4\x00\xb6\xf0\x94\x8a\xa4Y,,\xd2\xf8x\x93\xfaY\xe1p\x0c\xcb\x0c7\"\xdc\xb4L\nDDQE\xc9\xa4m3:\x89\xe9f4~l~\x00\x93o\xd3SEV\x1e'*\xb2\xea\x95\x8eY\x06B\x87\xd6\x81J8Nu\xfd\x95S\xc3\xa2\x03\x92\xd4\xd7\x12E\x9cqW\x02\xe3\xf3I+1\xbe\x12\xcb&|o7\x1b\xd8\xc2r\x90\xf9\xf66<\x82\xa4\xdcl\x13F\x83\n\xad\x9c8\xc7b,\xf8\x80\xe7X\x84h3\xe1\xe65\x031\n`\xa2\xa3G\x93oT\xd6 \x9b\x1e\xeb\xdfi\x89\xecz:\x896J\xabM\x15\x9fy}\x1c\x96\xf7\x9a\xcfR\xb9V\x0f}\x88ZOK\x06\xaf\xed\xed\x0c\x1e+(\xdfv\x12;E\xbfC[\x04<\xbb.\xedj\x024P\xb5N\xa1\xe0\xaa1 \x96\xd4\xe2Q\x0c\xb0'\x01\xaf\xa3\x13\x88'Oe\x92\\\xf4\xc6P5\x95]\x14\x04U\xac5\x1d\x98\xbf\xbb\x1e\x98v\xb2}M<\xb0\x99\x8c%.{\x84x\x16\x97\xf73\x11da\xa3S\xed\x88n\xe1\xb4'\xad\xa4\x8a\xa7\xe4\xc6\xd3\xb2\xceuO\xfc\x92je\x0d\xb6;\xb3\xb3\xdd~\x00\x9a@\xcbk\xe2\xb9\xbf}Y\x92\xd4e]\xba0\xf7\xdf~\xdet X\xb8\xc9q\x914\x89\xda\xe55MZ(R$\xb3\x0e\x86\x82V\xf8U\xd6\x1f)CT\xa3\x0cQ\xc0\x8f\xb0\xa8\x8d.\xb4\xcb\x0d\x8b\xd2\xeaa\x7f\x99q\xa2\x0b\xac\xe47\xc3\xbfX\x07\x9c\xcb\xcb*x;\x13\xf1L\x16\xf6\x1e\xce\xe7\xd1\x82\x80\xd1)\x0fTu\x00\xda\xae\xd4\x99'\xd8G'\x9a\xe7&$\xfcz-\x86\x8fo\xb6\x04X\xf0\x17\xe9\x94\xa1\xce\x91\x18@1\x1b\xeae-\xb4\xe7LT\x0d1oeve:\xca\x16\xb5(\x10@\xe1\x9e\xb7\xd0\xf3j\x02\x8f\xb0`\xcdM\xc8=\xac\xda\x87e\xf2'\x18\xa8\x0d\xfb2M7R\x84X\x94\x03HPR\xf4\x0bIbk\x17\x8bs\x9a\xf1\xca\xac*g\x0b\xcb\xben\x96P\xfa3L\x19\xa9Y\\\x03\xb1\x8a\xa3\x96B\xe7\xd7F\xa5\x04[\x958))\xa8\x93\xc9\x04\xe4\xb9%R\xcdw2\xcfN\\\xe9\x0d\x88^RA\x01\n\xf7\xeb\xd1`\xcc$T\xd4\x10z\xa1\x8c\xa7@\xecb\xc7h\xeeM\xca#3.\x08G\x1a\xf0\xf3s\xd2N\x16\xd9\x15r\xe7\xdcD\x94F\x9b4\x96\xd7\xda\x82\xf0\x8eJ\x90\xac\xa3g\x97\x19i\xdb(`\xdb\xaa]#C\xdb\x81\xa2\xba\x99\x99~\xb1RT\xee\x91\x89\xd1\xaa:\xf9E\x12\xdc\xd0\x986:2SK\xbe'\xa5v\xa3\xe2 HZ\x8a8 \xb8\x8fR\x1cy\xc4K/\x1e\x00\xffP\xb8\x97\x11\xa3\xfb`\x91e\xdaxD$\xfd,I\xa9\x9b4+>!\x1e\x1d\xdd\x1e\x07\x10\x8fn\x8f\x11\xcb\xe9ho\x0c;\x10\x8f\xf64\x19\x82\xfd\xb2 y-+\x83q\x97\x96;i\x08{\xcd6\xeb\x15\xfal\x0d1\xd0\x8f\x06\xba\x81q\xce\xf5\x85\xa8\xf1\xc1\xdd\xbao\xf0_?z5\x85\xa0 \xa7^Zq\x8a\xfb\xbb(x\xe5b7\xfa6\xed\x82,u\xe0\xdcRG\xe0\xcaK\x02\x99\xad\x0f;\x99\xe0w\x0fC\xd8K\x9fK\x86\xef\x96\x03\xff\xea\xfa6\x07\xf6\xbf\x03g\x88\xab\xd9*\x80\xa1n\x02\x973\xb9\"\xa0\x04\x16\xd8\x00\xc2\x13\x90\xf4\xb3dI\xae\xd2\x01C/K\xf3\xa2\xbe\xd4_\xc8H\xc9\xfc\x989\xe6\xc7\x14\xce\xbe\xa2\x1c\xc5U\xa1\x88\x03\xb4\xcd\xf2\xfa\x05\xe2\x1f[s!p\x13\x0b\xaf\xc9A\xfb\x93$\xceh\x9aOP\xb3\xecF\xdf\x7f28zGE6\x1b\x1e\x81\x84%F\xe8(6j\x0d\x810\x01\xc9\xcd\x818mI\x9c\xcc9\x88\x82\x04Zs\x8aq\x0bv\x14g4\x8c'$\x99)\x15\xcf-N\x11\x089D\x8f\xea\xa7\x95d\x9f\xa9gR=\x17MX9tv\xc5\xa8\x96j\xd7\xb2\xe6e(\xe5g\xb2\xce\x8c~\x89\xf2\xdar\xe3\xca\xd4\x8b\xa6k\x87\xb7\xd8E\xb4\x11\xaeN\x9d\xc8K\xcceJfQL~N\x93\x15I\xe9Zp\xbe\xee\xad\xb0\xeb\x94PE\xb4\xec2\x06y\xa9$\x88\x87Mvj\xe2\xb2\xdd F\xbd\xb2\xcax[\x8fo\xdduJk\x89\x98\x03\xe8=\x0d\xe38\xa1\xacuHb\x08c\x88\x8a\xf4\xbc)\x99$\xe9\xb4\xdf+H&\x8f\xb6\xb3\xb0\x98\xba\xab=s\x9b\xbc\x0c\xd1\x08\xf5\xeb\xb2\x7f\x12\xc5S\xaf\x8c\xbak\xff\xec\x12&!\x9d\xcc\x01\xc1f\x1f\xd0\xa5']\xd3\xe5\x11\x91\x0b\xfd\x04r\xfdq\x88\x81\xbcK\x93\xe5aL\xd35\xd7\x95*\xca\x9fv\\\xe9V(\x81\x0b\x7f\xc3F\x95\x04\x87\xfc\xda\xa4B\x14*\xdd\x1a\xcd\x08%!\x11KT\xfd\xc8\xbc\xacp\x00\x1f\x88p\xe5\xecPmA\x1e-D\xdd\xd9<\xef\x85F\xa2AHF\x99BH\x87\xf0\x9aT\xe1;\x9a\xca\xea\x06\x15\xa8\x17u\x0e4\xfb6\x00\xe2\xbd#\x01\xbc\xf0\x03xw\x05\n\xdc\x14\xfc\x90\x02\xeb0\xa1\xd2|-n\xa0\xb5\\\x1ao\x9b\x17M\xb36\x8c\xfa\x91\xf7\xe4K'\x9a\x81\x8d\xcb/\x9bt\xe1]\x15nN\xa1BgJEf=\xbe\xb1&>Jr\xb8\xa5K6X\x19\xa3L6\x80F\x0d\xe7i\xaa\xcd\x88yJ+\x8798\xfc\xd2o\x04\x89\xd6\x80\xc01\xb7\x15;T\xb2\xa8\x07\x02\xa3\x02\xcf+\x87M\x070\xa4W\x01C\\\x03\xc32\\i\xf0\x15\x04\x18\x1a\x85_\xde}\xdb\x19\x11XB\x94\x9a(Y\x1e\x13\xd5\xc9+\xe6<\x07\xc7e\xea\x11S\xcc\xd2%#P2\xdf\xf2?y7>\xcf\xd2S\xf4`T\x9d\x17\xcdG\x81\xc8\xd7\x1c\xc3>/\x06\xa4\xeb\xcao%\n\xdd\x8e&<\x1eT\xb0\xf8\x16\x08\xca\xe3I\x7f\\\xc4U\xddS\xc3\xa0aD\xdd:\xd8\x8c\x8b\xea\xa8\x90\x97\x96\xa1\xd8\xea}Q\x88 hP\xe1JCT4\xf3U\xc0\x82\xf8\xe8\x17V\x98Wt\xcba[\x8a\xf2$!\xde\x1b\x12\xc0\x0d?\x807\xeaR\xe9\x02\x01\x1d\x89x\x11\x0d\xd8\xa4\xe4o\xbems\xb5R\x1a\xf3\xfah7\x9d3o\x86;\x0cA\xee\xca\x92ig\xea\x86\xf7\xdf\x84\xb0\xd7\x82\xa1\xc4\x15C\x89\xc4P\"14\xe5\xa6\x10\x81\x97N5\xc3\x88\xf7\x8a\x04\xf0\xa3\x1f\xc0\xabo\xe7 ,\xc8\xf7\xeaZ\x90\xef\xcf\xc40\xe2\x8e_\xda\xc9\\\x1b~\xfd\x87\x91\xa8\xc4\x9f\x8e\x88\xf4Lp\xba\xcfT\xe8\x10!\xcc\xb4\xf1\x10\xcdu\x14,D\xbd\x9fg\xff\x95\x88\x84.1\xa6\x87\xec\xfa\x89x\xc6\"z\x8a\x93En}\xab@W,\xd1\x8f\xc2\x00:vr\xb1\xb5\xbc\xb9\xcbo\x1a\xa4Xv5\xf5rZD\xd7\x02\xfb\xbf\x06\xd1\x1d\"C\xdd\xf6\x02\x14\xe1\x95\x15\xb7p\x8b\xf3\xa4\\/\xd2\xe6e\x89\xde\x95\xb6\x11\x02G\x0e]\x18\xa0zI\xde%o}S\x0c\x1e\xf7r\x04\x07<\x91\x0bG\x89\x14Q\xa2\xbc9\xe07\x07\xcd|\xf9\xeaepYt\xa0 \x95s\xb8\x9a\x86\xe0\x9d\xf9\xd1+\xf3\xa3g\xe6G\x98\xa3\xcaK\xe3\x00N(\x13-b\xe5\xcdoT\xb0\x86\xb1\xe0A\xb7\xa1g\xd4\xb0V:\xec||V4\xea\xec\xf3\xb7\xe7qi\xf2\xb1w\xe6\xa8L\xe0i\x9e\xe6Eut\x1b\x9aW7oep#\xaa\x89S\xae\xcc\x85\x89\xaf\x07\xe5\xdfRg\xa1\x89\xd9\xac\xcf\xc4I\xf9[J&Z\x95\x15\xef\xff\xe6Me\x00\x15}\xae~\xb2R\x99\xa0\xda\x06\xcc\xd3\xec\x1f\x93\xe5\x8a\xaeQL.~\x0c!\x8f\x85\xa8\xfd\x1bm\xa6<\xadM\xd5Qc\xdc\\\xb4\xd2J\xcd-\xd4\x7fS\xacZy\xfc9N\xcec\xf8L\xd6\xd0\xfb\x1bl\x03\x85m\xf8[\x0f\x92\x18\xd8/\x89\xc7\x06#y\x05z[%\xf8D1\xfd\xb2\x16\x87\x16)\x1c\xf4\x86\x15cBu\x892\xa9\xd7j\xc1\xadJY\x08e4%\xce\xc1~\xb9\x0e\xcd:\xcc\x955pT\xae\x1b7\x8ey\xa6\xc48\xfb({\x8f\x9a\xf8I\xdcT\x01\xcd\xe2\x00\x16\x0c\xc7z\x7f\xff\xfb\xf1\xf1\xd1\xeb\xd7\x1f?<\xf9\xe1\xd5\xe1\xf1\xfb\xc3\x0f\xc7\xc7\x7f\xff{\xaf\xe9\x08\xb2bog\x0eJ\xa3y;\"\x18\xaa5\x91z\xb5& \x05Y([j\x88\x91\xcd\xe5\x87\xa6\xf4\x8eg\xa0^\xae\xe8\x9a\x87O\x17`tSDL\xdb\xf7bU\xc9\xb5\xb2\x04a\x94\xd9\xeck\xe5\xebb9-\xca\xb3z\x97kJ\\\x93p\x9fY\xe9\xd2\x0c\xf3\x0ex36\xdei\xec\xe9L5\x86v\xd7\xdf\xa0\xd2:\xe7*\xad\xd3\xb8\xd4d\x9d\xff\xbfM\x93uj\x87_\xa1\xee\xd3\x14XT\x7f\xad\xe2\xd1\"\x96\x0et+E\xa9\xb5*\x95Z\xab\xaa\x82I\xfe\xac>\x10\xac\xc1*VuV+\x17\x85\xcf\xca\xa6\xf0Y\xb5)|V\xb1\xdc\x870\x84\xb3X\xdc`[\x11Q2\x00\xe2\xadcF\x9c\xfc\x00\xd6\xd7\xa7\x11Z\xff)\x1a\xa1\xf5uj\x84\x84\xff\xbdM1\xb4\x8eK?}N\xb9O5\x94{\x19\x07p\xcc\xf6\xc9\xda\x81\x16\x9ft%l\xc7\xff!\xc2vn\x85\xe6\x92\x13\xb6%\x1b\xefI\xec=u/\xbby\xf1\x0d\x84\xed3'l\xef\x15\xc2\xc6n\xf5\xf38\x9bG3\xfad\xb1p\x8d\xe6\x7f\xef\xac\xe8~bWt\x1f\xc7\xa5\x83\xed\xb1\xba\xd7\xcecqC\xec\xb5\x13\xdck\x17q\x00\xe7\xd4\x0f\xe0\xe2\xfa\xf6\xda\xc5u\xee\x8a\xf74\x9c|\x86\x11\xdb\x10\xe3\xe6\x86\xb8\xb8\x82+H\xd5\x18?'\xe1\xb4\x89\xcf\xa8\xb7\xa2JRn\xea?\xe4\x89\xd7\xe9\xce\xceC\x1f\xbf\xe7^U\xe6\xbd\x00\x07 \x92\xd0\xe8\xe2\xfe*#_\x11\xf2\xb9\x13\x80\xd8\xa8K\xc3!\xfb\xa5\xc9\xde\xd1\xe8%\xcf\xe6m\xbd(9\xbe\xe5\xfa\xbai\x1d\nM_\xe1L\x82\xbb\x7f\xbb\xd1N\xa00\xc0l\xe0\x01\x02\xb3\xfe\x16\xec\xc0\x80A\xfc1W\x1b\xee\xec\xf8\xf8\x99\x89/\xc0\xcc*E\x1b\xa3\xd8\x90\xfb\x90-X}-\xd8\xa5I\xb4\\\xc5GC0e\xc1i\xe3z(\xf1V\x8d\x8a\xa1\xfcn\xad\xfc\xb9p\xed\xff#\xd6\x8b'\x8d\xc5{\xc2H\x91\x83`\"\xd4\xc9\x98\x1f\xda\xa3\xbe\xcf9\"\xfb\xfa\x959HZ\xa4\x16d\xc0\xf5\xd0m\xd9T\x05o_\x84\x07u\xe0\xd0\x08\xcf\x92gB\x01(\xd1\xc0P\xf5\x18\x8a\xf5o\xa6\xce\x87\x06\x19\xc5;E`\xaci\xfdIm\xfd\xe3\xab\xae\x7f\xd3\xfd\xba\xb1\xfeIke*\x15e\xb3E4!\xde\xc0\xde\xa68\xa6\xba\xb4\xcb\xd0\xd0Q\x1d\xa5\xeb\xca\x05\x83\xeb\xdd\xe9N\xd1Z\xeb\xdd\xa7\x91\xac\xae2\x8b.V\xa6o\x8d\xcf\x16(U\xc3\xa0.x\xc5X\x11;\xd8\x18\x92\xb8\x1c\x99\x8c\xa8|\x16\x8e\x1e\xc5`]\\\xc1b,.\xa2V\xe95h\xb8_{\x95\xa6\xab\x16\xaa\xa2\xa3sZ\x1f}\x99\xa6\xc7\x18\xe3W\x9cLi\xe5d\xc22gQ\x95d\xb1\x83\xe6\xa1\x8fw#\xfb\xe9n_\xc4\xb4\xb6\x88\xd1\x95\xd6\xef\x8fXWa\xba\xb6\x86\xdd\xd4V\x85.\xa9\xa9\xb9R\x10\x14\x0e\xf0L*\xa8\xbd2\x99\x8ea\xc8\xea\xcc\x06\x06=\xd4\xc5\x95\xb5\xa0\"\xee@]\x92\xf2hQ<\xbflH\x11\xf3=\x97\xd6\x10!\xad$\x13Le0H\xac$\x13\xc4o\xd2\x16&\xd0i\xb2n:R\xa7\xd9&z\x1db9S\xed\xd9\x97\xba\x9d\xdc\x8e\x91 \xad^\xff\x92\x9fH\xdb\xe2\x07D\xbf%\xa0\x03\xee\xd9\x8f\xcb`\xb2\xfa\xeag\xc8[je\x1e\xda\xb2\xf3Y3\xf3\xb9D\x05\\\xa0\xd6\x15\x85\x9a!\xbc\xd7H\xef\x87q\x00Otz\xd7\x0fO\x9e\xbe4h^\xdf\xb2\xf7/\x1c\xa4\xfd?\nw\xbd\x96\xfc\xa15\x8f=kF\x99\x92\x19\x8eTN8\xaa;\xeaE%\xfdK\xf9\xaf*upK\x19\xf8\xd9z\xea\x1er=\xc0!\x03\xc8\x1f\xb1\xd7pO14z\xd4..\x16ho4K*\x87\xd3\x08ut\xec\x9f&J\x18!\xa9\xa6\xef\"%o\x1c\xfb\x01\x94.\x93Jh\xc4\xfb\xf5\xf2$Y`\x85\x04\xdb\xf3z[\xb4\x06\x11\xf5\xd7\xdbx\xf4\xa4P/\xbeu\xd1\x06\xbe\xb5i\x03\xdf\xb6i\x03Y\x17\xaam\xed\x8b\x9aE%\x80\xb8\x7fT\x12\xc8\xaf\x01[\xa6X\x97\xfeK\xa4\xc4vH\xf3\xf5\x8cz6V\x04\xc4\x82S\x91\x1b\x97g\xda.\x8f\xf6\xcdFk\xa3\x87\x1acP\xe6{0\x98\xde\xac\xa6m*\xb0GOc\x1a+\x88w\x9b4\x81&G\xf1\x94\\\x90\xe9{\xf2\xc5\x010\n\x89\x7f#\xa2\xce\xddz\xf9\xe9\xbd{\xeb\x08\x1cm*l\x17\xcd\"W\x87pa\x84p\xefn\x1d{!\xa7,\xd2\x94]\xd2I!\x17;\xf6\xde\xa9\xdb\xec:\xbb\xed\xbcI^u\"\xa6\x9d\x9a\xcf\xaa\xb3R >\xce,\xac?/WY\xaa!\xe4\x9c\\ \x052\xae\xee#\xbc\xb86\xd0\xbf\x8a\xb2\x0eK\xbe\"\xd7\xd5/7C\xb8\xf7\xdc\x1b!\xc7r\xb2 \xe3\x9eK\x0f\xa5\xa9\xc3\xb1\xfc\x85Y\xbb\x04\xdb&\xc6\xf2\xba\x9f\xbe\xf2\x12\xc3\xcc\xb91\x8f\x97\xd9e\x94?\xc5\xb0\xc7}\xce\x14\xc2\x01\xe4\x98\x92|\x1fB\xea!\x7f\xd8\x8f2\xc1'J#\xe0\x88\x8e\xb5\x94[\xbd.}wOo\xf5*\x10\xc0\xe2\xf5\xad^\xa6\x8a\x1dP1\x16D\x0d+\x8f\xfd\xabA\xed+\xfb\xb8\xcfD%\x84h\xb4\xebP\xe79)\xed\xad\xb8\x08\xa1\x97\xa0\xc7\xae\x0c\xc4\xcd<\xa5\xd0j\xb3\xde\x96\xbc\xcc\xd9W\xcfD\x95(Q\xfdBW\xd7X^\x92\x92ci\xe9!L\xeaT\x14\xc7\xc4$N\xf9T\xd2S?\x90\xf7f\x8b\x90R\x12{[\xbb\xc2\x12\x83\xdaEM\xd1\x13\xebV\x00\x01\x1c%\xcd\xa8\x13\xba\xc8-\xc4\xfd\xa0\xec\xc0\x87f\x1fJ\x85X\xd86XN\xe4e\x06\xf8%\xaf\x8d\xd6,g\x8b\x0f\xa5\xfaV\xe3\x0e\xed\xc6\x8eH\x8f^\x97\xb4\xc9*\xbbV\xf5 v\x897\x98\xda\x12#k\x0b!4n\x91\x98\xa6Qe\xac.CU\xf4{\xef\xdc\xba9#\xe9\xda\xf1Lq\xe4\x82cK*\xf2\x16.8\x0d\xc0V\xf2\x13\x8a@s\x8e\x03\xbc\xd6\x11~\xa1\x14Z\xe3Z\xa2\xad\x81\x01\xf8uG\x12\xd0\x03\x86\x13]G\xc8\xd4O\xae\x1f\xd4|\x82\x9a\xf0'0\xf5\x19Ok=\xbaT\x8db\xc0d\x9fbNT\xcf`\xde\x00UOz\x80 M\xf4\xe5\xc15\xc3\xe2Z\xa1n\xb0\xa8 KP_q\xeei\x89y\xbb\x89\xaf/S\xa3\x19\x08\xe3@\\6o\xbd\xef\xc2\x92\xc2\xe9!\x1c@\x0f\x19\x1f\xd8\x87^\xd03c2#\xc1=\x8d\x1eU^\xdf\x82\xe96\x1c\x8fE\xa9\xfe\xad\x01\xba\xacn\xa3\xd2\x14\xffE7\xa3-YBJ\x99\x14\xaei\xe1E\x83gN\xaf\xc9Y\x82\xd8\x01N|\xdbg\xb2\xfe\x06\xf2\xf3\xd4iE\x97\x159\xd4\x01\xad\x8a-VM\xd9\xe9\xd4\x19?K;n\xb0\x00\"\xeb\x02\xd7p\xad\xe1\xa0\xf2\x08\xf60?\"\xc3\x14\xd8\xe7\xf9\x90\x1a\xdbAU\x03`\xcdZ\x1b\x01\x84\x03\xf0\"A\xe5\xb09_\xb4K\x8b\xd2\xb7\xbcb`b-\xc8\x9c\xba\x83\xec]t:\xa7\x1d\xe1& \x93\xca\x08\x95\x86(;}\x12\\\x8f0\xbd\xa7F\xbb;\x98\x06\x8d\xbd\xb8\xe3n\x81Tj2\\\xa7\xae\xd0\xb8|E\x0c\xfer\xb5C\x82q#\xddz\xe4yYx\xac\xdc\xbb\x18K\x85\xe9\xb2`\xe8\xbaJ\x9djL\xd4gf\x0c\xc8\x01}?(u\x7f\x03\xad\xf9\xd9\xa9\x97\x93\x9c\xbe\n\xbb\xa8\x07\xf8\xbeF\x0f\x99\xdd\x00v\x06N\xbdD\xd9\xe1rE]l\x0c\xa2\x17\xf5dR\xe4\xf4\xba\xe4\xbe/\x96\xb1\xca\x8c:\xf0\xa2&#\xa4\xd3l&I\x1e\xd7w~\xcb|\x9ex\xb4T%\xf1m/\x04X\xfeq\x07\xbd\n\xf6\xfe\x83+{*\xfaw\xa5R\xa0P\xaa\xaf\xd4\xf3K\x83\x94-\x03\x9eD\x0d\x1d\xf1nc]\xf1{\x917\xc1+\xeb\x94\xf3J\xe2lW\xaa9\x8f\x9d\xa46E\xe6\xd2\xb3\xbb\xf2\xb2\x94R\xc1\xb3@5\xb7\x19*\xe4]\xaa\xe7\xad\xcb\xea\x91/y\xb8\xe8\"l\x9d\xd1\x82l8\xb5/\xb2f:l5\xd5\xe1T\xbf\xb6\x18\xa8\xd5?\xc6ty\x95\xe2L\x94\x96\xf7\xed\x9cb\xb5z\xeb\xcf\xb1_S\xb5Z\xcf$\x0e\xc6A\x0b\x1d3\xc3@\xa2\xa0\x1b\x05\x8e\xaa\x94\xb7\xd5\xfc\xa4P\xb0\x00\x12OG\"\xe5e\x18\x7fgQc\x1ev\x913\x90\x0e\x89\x84\xcbK\x1eC\xb0t\xec\xe5\xa8\x0b\x0d\x97\xfdp\xaf\xd1.=E\xd9\xfb\xfc\xc4\xb1\xc0g!\x03\x0eM>aE\xa5\x14nu\xe6<\xba\xa2\x13r[\xda\xe2<.\x12\xe3t\xc8\xa7\xa5\x9f\xe2\x8a\xf1B]&\xe9\xd9f)`\xa6\xcc\xd2/n\xba\x9fj\x9f\xc9\xfa\xed\xac\xc3\x90\x8aC\x8d1s\x9d y\x0dFB\x1eq\xee~\xc4W\xb42lW?mH\xa9.\xdd.\xba\xab\xd1\x1a%\xbf\xfa\xc8\xcf\xba\xf7\xf7\xf2*\xebb\xe0\xbdq\x8d\xb5\xb9\xac\x9a}/\xc3\x8b\x0e\xbd\xbe$\x9dT\x18\xcb\xf0\xa2\xeb\x99\xfa\xb2\x92\x8f\xc8\xa9\x137\xa3Yc\x06p\x00ob\xee\xc2\xf2\xd5MPZF\xf1\xd5\xa7\xc3\xbb#\xbc;\xd7\xb9\xa5\xa43&jC\x1eA\xdf|\xf69Zu\x80\x9d\xd2\xfe\xeb\x90\xce\xfb\xcb\xf0\xc23T$6tV\x17\xbe]\xa5\x04\xc3\x1ecMzT\xb9\xe3<\x90_\xe7\xd1\xa2\xa3\x99\xa1\x18\xcc\xefW4l|\x8eV\x1fc\x1a-\xbau\xcb\x81.\x87\xdcM\x05\xc5\x13\x82u\xeb\xafi\xe5\xd0d\x06\x03}\x7f4\xfcL:,/\xad\x18 \xae\x80R\xac\xbfkF)\xd6dw\x94b_}\x0bJ]E\x92\xf8\x87\x13w\xab\x940\xfa\x18\xa3\x9a\xb7\x92\xbc\x0d#+[\x18^\xc9NS\xa3vY^L\xa4\x8b\xaa\xb1yJ\x81\x96J\x18\x08vlo\xedL\xd4\xf3o)\xfb_0n\x1a\xc1\x87\xa2J$l\x9b\xa1\xd2L)\xfd\x14\xdf\xde\xbc \xdb\xdb9\n\xa9\xa2AC\xa1ry]\xfa\x01\xe4\xc67.\x03P\xcb \xfd\x17\xadJ\x92vY\x16Z\xf1\xc6b\xdf\xd9\xe5Zv\x85\x16\x8f\x12y\x89q:FY\xaa\x17\xfaN\x85\xc5L\xdb?\x00\xf7\x88G\xf5\xb2F?\xaa\x97!VB\xbd\xa4\xe9&o-N%/\xae\xc3\xaf\x14\xa9\xb2x\xa9\xcaKF4R\x11\xc3\xdb\xfa\x01\xbb2\xe1\xac\xea\xf6\xf6\x04\xdf\x1e\xb4\xb8\xb6\x82n\xafM\x02\xc8P\xe3y\xc0H\xdbp\x08\xef\x84\x98\xf3\x9cad\x86/\xf04\x7f\xa1\xf0\x0c\xf9/X\xdc6\"`\xa5\x00\xda\x87\xdd5\xaf\xec\xe0\xb9*SQ\x1cZ\xdd\x98\n\x19C\xd0\x91/\xed.\x86\xcd\xc3l\xfe4\x99vpt\xa1\xf32\xbb\x00\xd6e\x9a\xab\xd9\x06\xday\x04(\xb6\x17wP\x1e\x0ea\x00\xb7`\xb7\xd8h\x16\xd2%\xcd\xa4\xb3V\x05\x9f\x9b+\x7f*\x8a\xdf\x0e\xf4Uo\x8b\xd7\xf8\xc0\x9c\x16\xbf\xf6\x0d\x1b\xed{\x14\xd2o\xdf\xb9\xbd\xf7`p\xff\xf6\xdd\xdb~P\xdc\x86G\x8f`p\x176@\xe0\xf1\xe3\xc7\xb03\xb8\x1b\xc0\x9d{\x83\xfbw\xee>\xd8\xfd\xbe\xfe\xdem\xe5\xbd\xdb\x01\xdc-\x9fc:w\x8f\xc06\xdc\xbe\x7f\xef\xce\xde\x83\xbd\xc1\x83{\xb0a0\xfd\x17\xdb\xd2\xff\x12\x9f\x0d\xee\x05\xb0\xb7w\xe7\xde\xfd\xbd\xbd\xbbE\xf3\x87\xe2s\xec\xa6x\xf3v\x00\xb7\xf7\xee\xdd\xbbs\xff\xc1\x83\xdd\x07\xbe\xda\x84e\xcby*\x7f\x10c\xad\xcb\x83\x8eP\x83!\xdc\x1e\xc0w\x90\xc26<\x8f\xbd'\x147\xcd\x13\xea\x11\xdfg32w\x0e\x8e\xbbS^\\+~\x85^\xaa\x93r\xe9\xa6\x98\x11v\xd4\xdaA\xb7\xc6\x1d\xdb\xf5\xb5\xe5\xac\xa1 \x88:RX\xb9SW\x06\xb3\xbd\xf8\x9a''Sr\x01\xa8o\xbc\x8eG\x0b\x19\xe0\xfd:\x1e=c\x7f\xbf\x16&\x8b\x8c\xdd\x12\xa1\xa3\xfc\xb6\x08\xac.\xee\xab\x81C0\x84W1>\x89\xe2l\xc5s\xe3\xe3'\xef\x93<\xad\xe6\x95\xd1\x81\xac\xa6D\x12\xee\xad\xd5\xd9a\xeb\x93y\x18\xc5\xbcma\xcb\xe4\xb7\x93\x98\x86\x11F\xa5\xe3\x10\xb8\xee\x12c\xc4S\xdd)9[D\x1dB#\x0b\x01\xe5+1\xae\x84N\xed\xb3:l\xb8\xf7\xbbZ\xff\xcdT15\xcb\x02V\xe1\xae\x93a\xb5\x90&\xa4\x93\xc4( \x1a\x9b\x8bO\x03p\xa3\xaab\x93t\x14\x1a\x97\xe1\xeae\xd5\x07\xd9\x15FW\x00\x02[\xf7:,\xda\xc4\x8c\x06,x4\x82\x05\x08\xd8\xc9Uv\xeb\x87\x18\x93\x9b\xb4f\xeexj\x06\x92<\xd5\xaa}\x19\xda\xf9\xb9\xb5\x9d\x11 \x80\x8e\x9d\x1a{g \x87\xf5\xb3\xb9e\xb3mQ\x97d\\\xd0\x84\xa7aXo\xaegX;\xd7<\xacW\xf6a\xf52\xa4\x81\x15\xe3\x07\x1c\xc0O\xef\xdf\xbe\xe9\xf3G\xd1l\xcd\xd5\xb6\x82Z:\xe6\x16}f%\xc0\x87\xc6L\x9e\x86\xe6\xbe\xb6b\x10\x85G\x05\x07G\xe11\xfe\xbd\x83\xec\x9cS\x07\xcf\x1d:`\xac\xcf6\xec\xdd\xbb{\xe7\xce\xed\xbb\xdf\xdf{\x00\xdb\xe0Q\xc6\x90\xdd\xf3\xf9\x9f\x8f\x1f\xc3^\xf3\xf4\xad.\x94h\xedCT\xaf\xc2h`\x95\xcb\xe5\x95|\xb3\xad\xaeu@J\x1b\xdeV\x82\xa5\x00\xf8\xba\xf2\xd0R&\xa2G\xbe\xaf$-\xc5f\xc5}k\xcb\x97\xac\xf7\xc0\x96GC\x85\xa8\xdel\xe7\x0c\xd2\x80[\xee*1~\xd8\x7f\xeb\xe4\xdd\xed\xa1W\xb0\x9f\x15\x90\x8d\x18ds\xf8\x1f&;\xb0\xad\xc7p \xa9\xb8\x00c\xcc\xef>\x7f\x07\x0e\xe09\x9b{\xce\xd3\x91\xa2\xd5F\xfe\x8cd\xca\xd86\xf0[\xad%\x86T\xe5%\x95p\xde\xc6\x0b\x12\x9e\xb9p^\xd2,7b]\x8c5\x87\xb2oY,\xb6/op\x02 \xf5/\x01\xdc\xe8'3t\xa65~\xc6\xf3\x93(\xde\xf9\xd6s\x96\x14\x1b\xdf+\x88\x81\xb8\xc7\xe8\x80\xc8H\x13\x94\x94\xc8\xcd\xc7\xa9\xab\xcb\xdd\x92z\xbbj\xcaj\x97>\xae\xe0_\xc7\x0e|\xc7\x08\xd5\xebv\xefq<\xf9\xbf^I\xafzC\xfe\xf1,\x0el\xc8\xe6<\x86_#:w9\xa7\xa4\xcc\xa3\xf6b\xc77\xc6\xd3\xc9\x00\x81\xe6\xf8M&\xcb\xca\x9dK\x9fQ\x842=\xec\\\xea\x1b\xd4\x9bE\xdd\x96#t\\o\x0e\xbf3\x8f\x85\x18\xc4kA\x0b\xb3\xb2\x93\x9cv\xd5|:\x9a\xaa\xd3p=\x9b\x0d\x9b/s\xb89@;Q\xf2l\xf3\x12\xda\x15+\x81\xfaX\xb1$\xa8\xb7+&\x85\x17\x81\xaa\xa4\xf5\xf1\xde\x8d\xca\xf2\xf1{?V\x9a\xe6\xf7N\xa8\xe6\xe3s\xaa\xf9\xfa\x82\xd6?oBE\xe6\x97\xdb\x87\xb8 W\x04\xea\xcb\xe6\xfd\xa7\xc9bA\x10\xd2\xfbp\xac)\x90\x81\x01b_5\x0f\xd4\xb4\x92G\x1a\xe7 \x9e\x97o\xa5y\"R\x05^hGI\xf7!\xd3\xe5{\xbb\xbb\xd3O\x9f\xf2\xe9\xfd\xdd\xdd\x1d\xf6\xefl6\xfb\xf4)\xdf\xbd\xcd\x7f\xee\xde\xbe\xc7~\xce\xc8\x1e\xfe\x9c\x91\xbd\x19~3\xc5\x9f{\xbb3\xfet\x97\xf0\x7ffc\xd3\xe0\xcc\x14\xad\x100(\xc9\xa8J\xc7.\xbb\xc1i\xb0\xfb\xa0\xc6\xeb0.\xb2wx\xb1\"\x13J\xa6\x10\x16\xed\xf4\x14c\x8f\xbc\x07\x89\x96\xb0G3\xf0\x94\xf8\x88-\xc5D\xb0\xd9\xc8\xecA\x1cE\xb4\xaf\x11\x1f\xe8\x9e\x864<>\x16\xd9F\x9bX\xa9h\xf1\x84\x14[\x83\x0c\xbb&\x9a\x1aTQP\xb9]\x14\x82M\xaa\xf7yQ\xc4\xbcz\x933\xc4a\xf5f\x86ofUB4\xe9\xb6:\xb7\x1f\xe8\x97\xe7\xce\x83\x96\xe3\x18\xa8\xc8\xcb\xc1Co\x1b\x8e\xeb\xca\xe6\x15\xc6\x0eOT\xe6\x04R\x9c\x80\xf2\xd1V\xc4\xb8\xab\x9b7\xd9\x1f\xb1\x8fJay8\xc6\xec\xaf\x98\x1dA\x95\xfe(\xeb\xf2\xca'\xfe\xed\x07\xb7\xb5\xb3\x1e|_G>\x81\x94\x0f\xeei\x90r\xd0\xc4\xc7\xbd6\xd2!k\xb9pG\xe1\x99\x0e\x15\x17\x98\xb5\xf8&\xe4\xcd\x03\x17\x0b\xb2\xca\xb2\x8c\x8d\xa7s\xc4H\x9dY\x8a\x11\xa8\x15\x03\xe4\x1c\x81\xec-\xd8?sx\x0c+;]F\x9d!\x0f\xd0\xf5\x9b-bAK\xfeX\xa9-6\xc5%n\xb6u\x06C\xd8\x194G\xbd\xe62t\xe3\xfe\xa9\x00C\x08\x07|'\x82\xf4\x8e\xae\xb6\x8dy\x01fx\xfc#\xa9\x0f\x80\xff \xbc\x06\xe8\xf6\xf6\x19<\x82\x956\x11\x00\x1b\xd6\x92\x81ttf\xe0n\x8e\xb1(\xcc\x99\xc6Q\x9c\x01 \xf3\xb1\x89\x13\x18\xc2\x02\x0e \xf3\x8e\x03X\x06p\xc6\x03\x91py\xf7!\xf3\x96\x01\x1c\xe3]\xbe\xfa3\x0d?SK\xe2{b\x92\xae\xd9{'>0\x018\x8aM)\x0b\x10\xa2\x03\xfd\xb3\x93\x94\x84\x9f\x1bO\x9a\xe7\n\xeb\xe8\xd46\n\xb6e;\xd8\x0c\xf0\x93\xc4;\xc5\xd7n\xde\x04oY\xe6\x8c\x9e0\x08Q\xb9-f~\x89K\xa7<\x16\xdf\x18\xdel\xeb\xd1\x06\x050B\x02\xb4\xd0\xb8\x04\xb2\xc8\x08Nb\x89\x0bt\x8c\xfbh\"\x96\xb6\x18\xb8a8\xdf\xba \xda\x13y&N\x10t\xba-~0\xfc_\xff\x9f\xea\x876n\xc8H\xa5\xeas\xa9\xd4_\xdb\x11 /%\x11\xa7\x98&o\xbf\xa0Ml\xdb\xc5\xf0\x08\xd2\x87\xcd\x95C\xd3\xb8GG\xf1\x18\x01\xa7r\x86\xbbZ\xfeOI\xef\xd4\x91\xcc\xdf\x19\xd4y\x83\xe2pkRyQ\x91\xa98^\x9b\xf4\x1e%\x19\xa5\\S\x93\xfc\xa3*\x08\x9f\x1de\x87q\xbe\xe4\x8a\x9f&{\x92\xda\xad\x1db\xe2\x85\xb8VE\x06\xcf\xf7\x85 \xde\xae\xec\x13\xad0\xe6\x9bak.X\xcc\x00z\xec\x0fBz\xfc\xc4\x0d\x9b\xf7\xab\xfd\xe9\x8f\xb4\xcce),\x99\xf2\x15\x06Qch\x10\xeb4\x18h\x9e%m*\x97-\xd2\x8f\x93)aB3\xdek6\x81\xab\x89\xa2w\xb3\x1d\xca\x8d\xd4\xac\x1dZiG\xa3sbk\x9es\xe0\x16\x90A\xc1\xe4\x00\xd2\xfe\x0f\xf9lF\xcaS\xab\xf95\x03\xa3\xc7\x8e\xb7\xb0\x1fe\xb5\xb7Q\x8a\x8d\xccJ\"E\xe2\xa9(\x89\xee\x0f\xfc\xc2X\xdc}\xdf\x1b\x988\xda?''\xabp\xf2\xf9\xe7d\xb1\x9eE\x8b\x05\x0fY\xe9O\xc9*%\x93Z\xedG&O0\x96t\x15\xd29k}4\xc6L\xf1\xf3h1MI,\xbe,~\xb2\xe7e\xb9\xb4)\x99E1\x91\xfb\x0bqr\x91\x84S2\xed\xe9\x14\xab\xa4\xd8a\xfbz\x0e\xa2K\xd1\x19\xda_4\x1e7\x95\xd4\xe6qF\x7f\xc9\x18#\x8716Wk\x08\x83J\x02\x9b\xced\xd4 #\x0c\xea\\t\"\xee\xdf\xd1p\xcb\xb8\xdf\x92~\x94\xb1\xfd4\xe5Q\n\x95\x97\xf8f:\x80\xc8\xcbQ\xe5\xa4\xa7;a\xb7\xb1\xdf\xdd\xbd\xaaZ\x91\xf2\x83\x8d\xd1\x81\xb4]\xb9\xd8\xbe\xb74g\xaa<\xc9\xe5;Z\x87\x17\xa9!\x10\xfa\x05\x91E\x90\x8e\x85;_\xcd\xdf\x84p\x8f\x92H\x16'\xf4\xe2\x9a\xa9\xeb\xf2\xaaX0\xb8_\x97\x818\x16|\x7f\xbf\x15\xc2m\xec\xc4.\xf72\xf0\xb8\x1a\x88\x07\xf1\x17\x9cD\xa1X\xe1\xd2\xe0#H\x1e\xfa<\x85\xe8(\xf2\xc8(\xde\xde\x1e\xfbc\xbdv\x8f\x7f!\x082-h\xebU!\xa0\xd7\xd9\x0d\x1a\xd8.v\xc1^\xfd`\xe3\x8a\x8c;\xdf_\x05^bJii\x18\x8c\xc4{\x07\xc0\x90a\x1f\x12/\xaf\xb8 9M\xae\x97g\x042\x9aF\x13\xaa\xa8\xf6*^X\x0d?\x11\xe9j\x13{\xdf?\xa8\xebF\x94\xe9\x1c7E@&\xbas\x98\xdd\xfb\xbe\xf6\xe5q\xff\x1d \xa7\x8cN\xbe\xa7\xfc@YV_`\x80\xbe\xeb\xf7\x0f\xcfHL\x0f\x97\x11\xa5$mv\x10\xb6\x81Q^%\xd1\x8f2Jb\x92b\xd1M\x8er\x8d\x0ft\x96{\xb1%\xea(\x01\"\xb88\xf6\xee\xef\xfa\x82\x03h\xbe1CA\xfdc\x14\xd3\xfbH\x07\xd9\x9e\xad\x9c\x9f\xcd\x99-85\x1b\xd4\xc0\xb6\xe8G\xf1\x9c\xa4\x11\x15J\xaf\xbb\x1a\xf3\xc0\x8a\xa3\xdd\xdd:\xb1\x06\xa12\xd0 \xd5\xec\xfe\x8am\x9fU\x7fJN\xf2\xd3Er\n\x07\xca\x0f\xaf\x97\xd1\x94\x84\xcb\x9e\x0f\xfbmC\x9f\x06(\xfb\xb3!\xd4w\n\x08\xe1\x88\x81\xb2\x8eK\xe5\xd4\x98X]7\xf9\xb3\x86O\x19\xf7\xd0#i\x9a\xa4=\xc6\xbd.\x92\x8c\xb0?\xa6$\xa3i\xb2f\x7f\xae\xc2\x9c\xdfKI\x96/Iol\x8a\xd6Y\x1a\xd1%\x01\xa1i\x8e\xbd\xbd\x81\xa8a\x81b\xab\xae\xbe\xa0$\x16\x04\xa28\xa3a\x94w\x86\xe5S\xdf\x0f \x13j\x85F\xb6?\x13 OJ\xe5\xb8)\xdaS\xe1!h\x0d\"M\xb0 \xdd\x147i{ym\x8f9q \xa8\xaa\xe2{X\xae\x93^\x89\xc7_\x14xfSJ\x9e\x15\xc5\xdd\xc4\xcb\xacu[*\x15\xce\xc3J\xaa\xc4\xa0N\x04\xdd\xe2\xaa\xd1\xd8\x0f\n\x9d?l\xb3\x86\xab\xd4\x17\xf6\x8b\xaf\x0dJT\xed]RR\xae\xdd\x00\x0e\xb5\x86I\x06\xba\x1c\xeb,zH\xb3\x11\xdf\x9d\xe0\x8aP\xd0\xcf9\xe5Uy&\x85F\xc4KQ\x15\x92\xaa\xdbf\x86\x94\xa6\x19}I\x94\xb8\x83a!\x0c\xd5NK\xcc\x12\\u\xaa\xe8\x1d\xc5g\xe1\"\x9aB\x9c\xc4;\xbc\xd9[\xe2p\x98\xcc\xf3\xf8s\xcf\xb7\xc5\xd3\x18&\"\xb6\xb5\x06n9: \x06\\*A\x02\xee\x15\\L\xc2\xe0\x99\xd7\x86,\x1c\x89\xc4*?\xc6\xc8\x1f\xcf4\xff\xfa\xc7e\xa5\xf9\x9f\xa5j\xf3\xed\xcc#<]\xb1bND\xd8\x10\xa7\xe4#bn\x13\x0c%\xd7\xe3\x06N0e\xa7\xb4z\xe45\xe7\xcb\x16B,\x02\xe7(\xfby\x9c\xcd\xa3\x19\xf5|\x08g\x94\xa4@\xe2)\x10\xc6\xf5\xf7\x10\xd7\xce\x11\xedd:;\x04\x16GU\x97\xb6q\xcb\xc8\x86\x0f\xdf>\xe7M6\x88C^\x1c\x19L\xfa\x8f\x19\xb4 &>\x92\x9b\xf6<\x8d\x84\xae\xbd\x0em!\x85\xcb\xb5:\xa8\x8cw\xc0z{[\xee\x9b\xea3\x9fW\x8fb\xcbP\x1d\x90\x0e\xfb\xea\xaa\x83\xb6\xb5\xda\xa2\x02LH\xb8\xab\xdc\x04n\x92\xa2HV\x8d9,\x99.j\xa4#\x97^\xeeF\xe3\xcf\x15\x1a\xaf\x1b0)\xb8\xa8\x9b7\xe5\x1eVh\xdf\x16\xe1l\xd1\x01\x9b\x02_\xebiHC\xb6\xd4\xa8\xf7b@\xf3v\xf9\x9a:\x12E\x8e\xa4\x05M\x95\xc8\x17\xb36t\x94\xb6\x02\xb8\xff?{\xff\xbe\xdc6\x924\n\xe2\xff\x7fO\x91\xc2o\xc6\x03|\x84h\x92\xba\xd8\xa6M\xeb\x93e\xb9\xc7\xd3\xed\xcbH\xb6\xbb{\xd8\xfa\xa9!\xb2H\xa2\x05\x02l\\(\xab\xc7:\xd1gw\xcf^#\xf6\x01\xf6\x9f=o\xb0O\xb0\xb1\x11\xe7MN\xef\x03\xec+lTV\x15P(T\x01\xa0,\xf7\xec9\xdf\x87\x88nS\xa8B]\xb2\xb2\xb22\xb3\xf2r\xef\x1e\x92F\xc7e\x8bJL\x9a\x16\xfa\xe85\x87\xe7\xd2}C.\xb8\x18\xd4\x9d\x1b\xa9\nU\x17$\x85\x7f\xb8wO\xf7\xba\xe0\xfc\xaaK\xac\x91\x81\xdb\x05\x0c6to\xd7\xf6OO\xf86F\xc3\xe7%\x83\n\xc1\x88\\\x8b\xdf\xe5\n\xe7Y(\xd7\xc9\xffRj\x15u\x1a\x0f3&\x0d vdA@\x11D\xe3\x06.7N\xeb\xb6ix]\x8es\xdf\xc8\xec\x08\xf5P\x19\xd1C\x91\xebN\x1b\xa9\x80.\x02\xd25f\xf1\xa6r\xf3,Hv\\f\xb8\xa9\xc0#\xc8>\xbbl'\x98\x99\xd1qyg\x8eK\x19\xb9\x92SB\xc5\x9fC\x81 \xdfs\x8d'\x0f\x9f\xa3\xd4<\x93 (\x87\xa2z\xc4+]\xf8\xc9[/K\xca.P5]l\xf5\x8b\x94_\n\x86r\xfaT\xd7YBd)\xa9\xd5\x9c\xda\xc91\x95\xcd\xa2\x885\x86z\xb2p\xc3j\x94G_U\xac|\x84\x11<\xdcy\xf8p\xbf\xf7\xd0\xa4/95\xa2n\xae>\x7f2b\xfe\x8dU:N\xf2#\xbb\x87d\xb6B\x9dS\xa6\xf0=(\x1f\x08\xd2\xa9\x9a\x93\xe6\x05\xf1\xa6]z\x08\x88\xb2aQm\x88a%\x80(\x07\x1ac\xa2U\x8dA3!\xcb'\xf6t\x04\x1fQ K\xff\xa5\x9dloSY\xeb\x13\x1d2F\xf7*\xfd5(\xfd\xb5[\xfa\xeba\xf9\xbb}\x17\xd2NG\x9bk\xe0\x86\x9d3\x08U \x0e\xe8!\x92CS\x9e9\xa9h\x0cz\x98\x9f\xb9\xd59}\xac\x87Bn(\xd7H\x8f\xaa\xbd\xf7\xe9\xe9\xa9*+(\xd6/l\x8b\xbe\x16\xef,\xb7XtG\xf7\x0d\x9bI\xce \xb0|\x1f\xef\xfc\xc9\xa5}\xc8#/\x1eV\xdceM\xf3<\xd4\xcf\x93\x0f \xc4$-\xe4.\x18\xc3!\xbf{\xd56\xa0\xcb\x1b\xe3n!%}\x08\xb2\xe0\xaa\x86\x04\x9d\x8e\xf2I\xfe\xa4u`2u\xfc\x93\xb1\xe3\xd2\x05Ln5FY,\xc1z2\x86K\xda\x7f[\xa4\xe0!I\xc10\xea\xf6\xd7\xc2\xb6\x96\xde\xf5\x05\xa1\xab\x86\xf3@\xf5B\xcf\x92\xd94\x17m\xfb\x8a\xce\x9d\xc7Ny0\x0d\xc0\x1a\xa9\x89\xbfL@\xb84\xaer\xae/\xa1\xe0M\xfd\xc9\xa5n\x9c\xad\xfax\xd9\xbc\xc2\x02\xdb\x99\xe6M\xd7\x13\xe2\xbb^1G\xaa\xca\xb4\x1c!Q\xb3\xcd\xd1\xd1\x05u\xc9\xa4\xe5\xdclJ\xaf>\x97\x08 \x8a-l\x8b\x8e\xa7\xb4\xad\x1f\x97\x07\x99\xa7R\xe6\xe3s\x1e+\x02\x8fi\x84\xef\x9a\x0e!\xe5\xe89`]!u\xac0J\xf9\x91\"\xc4\xcf!l\xa5\xec6\xf5i\xa9\x0d\xbb\xa4\xc0\x91\x0f\xa3\x9f\"?\xb4-\xbc\x13\xe9\xf3\x9eyI\xcd\xc1%\x0b\x1a\xdc\x9f\x92\x14>\xb1EQ@\xbc\xd8F\xd9&\xd4X\x94\xd6\xa9Z\x0c\x1a\x8a\x94\xed]\xf5\x00=\x00Lu$\x97H\x91B\\\xb9@[-u\xf2,\xc8\x1c\x06\x9a.\x88\x04\xe5p\x93\xf0\x96\x05\xc5\xa2\xad\xea/\"\xc4\x13Wmt\xd5\x07\xef1qlf\x15\\\n\xdb#\xf0\x8dDI<\x88\xed\x8f\x81\xc5r\xa4\xf4\xa46\xf7\x14\x08uf>\x80\xfa\x81\x82\xb8\x91\x81\xa7\x10\x15p\x8c\x8a\x13\xbf!\xb2\xb2?\x03;c\xd6I\xc5\xe7>\x95\x8e#\x18\xf2\x1f\xe5\x85f\x9b\xc7\xc6\xe9g\xb5\xa6\x96\xe2\xa9\xb4ow:\xb1\xcb\xc1\x81\xab\xbe`Zf\xfefX\xbc!\xdd\xd4\xf3\x03\xae\xe7\xe7\x02\xbc\xa8\xecr\x08A1\xc4\xcc\xa4\x91\x93\x1f\xb3\x85\xa7xn:\x1d}xc0jFA\xb2m\x17\x13\xddFw\xa0\xaam\x0e\x085)q6\x89\xab*p|\xd2\xf5\x82 \x9a\xbc\x0f\x13oF\xdaE\xe1m\xb1+(\xca\xd7\x98\xc5\xc6l\xa7N\xa2\xd55\xaa\xde\x04\xe7c\x97\x83\xe4\x8b\xe0\xbc\x1eSaS\x9c\xf7k\xc2]\xb8M\xc1\x974\xb9\xee\xf0+~\xde\xb9\xc5 K\x19E\xc3ev\xb9{\x13\x9bp\xf4\xb9\x8c\x0c\xbb\xde\xe1\x13\x7f\n=\xd95\x93)\x98\xffd\x910\x17Ql\xc7\x024\xa5\x9dB\x14\xe2\x9d\x02Y\xae\xd2k`J\xe8?i\xe6Bd%9\x13\x02\xe4\xfb\x17\x89\xfd\x7f\xabMrb\x8c\x1dj\xd6\\)=rU\xa1\x98$\xb3\xd2,_V\xf7\\\xce\xcbVD:\x9b\xce\xdej9\xa6\x93v\"I\x8fk\xbfr\xc9\x84\xd9\x93C\xd8\xe9\xe8/\xb20\x1a\xfa8\xe4vq\xc5\xbd\xaaQY\xb6\xadJ\x0f\xf2_\xb2B'f{\xb2^C\xc0\xa5 \x8b\x9d\x9d)\x8c`\xe5\xc5 y\x19\xa2[J_\x17\"e]\xf2;+\xe1\xa0\x9e\x12b\xa43=z\xf2\xf5\xe3\xca\x0d\x9dQ@N\xdd\x98\xffyE\x93-a\xf8\xa8\"\xd3}\xfa$\xd4\x0c\xc5\x8d5\x9f\xf1\x10*\xe2;k\xc7\xcd?qku@G\xec\x92\x18\x86pl\xf3\xcblJ\x10M\xf3\xe4\x04z$TP\x8e\xd4\x9ac`\xfc\xef\xdd\x13\xbd\x98\xdaF>\x99\xa5\x13-\x83\xc6\x88>\x0b\xdb\xa2\xf5\n%\x01\xe6\x15\x11#$\xd2N\"\xd2IS\x95\x97q\xfc\x0b\xdb\xe2u\x02\x92$\x90.\xbc\x10\xaeh\x8d\xa5\x17_Zl\\\xa8\\\x15`\xc3f\x85hw \xd6\x82\xfe\x11\xe1\x95\x19\xde!\xf8l\xe1\x91\xbf\xe3R\xf94\xc2\x01[\x8e+}_R\xa9pMQ\x05\x80:\x8dRI\xe3\xa8*\xd5\x1c\xb9\xc9\xbe\xab\x08\xc2l\x05C\\A\xbe*lic~\xc4\xf7\xe0 \x17\xf0\x86\xfc\x88<0\xe8\xb5\xd0\x0e\xc7\x91u\x7f\xdb\xa8\xec\xd4\xce\"\x07\xa0aFa\xb1\x95$\x85\x07\xc7\x1f1T\xd4\x8d\xe7\xd7(\xa5\xbb\xa8\xb8\x92w\\Q\x10\x9f\xb7\"(R\xc3\x9a\x0bM\x06q\x07\xfc\x04\xc2(\x05\x7f\xb9\n\xc8\x92\x84)\xa9\xd2a\xe5\x06\xc2_\x91\xd67\x10\xb5\x01\xd5\xa2\xb6\x97\x13\xc9\x95\x8f\xae\xc6\x91d8eb\xad&^B\xa07\xd4\x96\x01:\xe0\x0b{\xac\x1af\x0f\x99 }1\xb6\xdfo\xd3\xfe\x98\xfft!\xad\xc9\x13S\xd3\x15\xbfOi\xec\x8b] 5^wI_0\xd3\xb3\x0e\x95n\xe9\xce\xc7%\xc5 \xa0\xa3?N!Z\xa5\xc9\xe8\x8f?Yn\xa9\xb6\x9e\x1f\xa3\x8b\x8c^([\xcc\x90\xb0\xcf\x15r$\x9c\"YJ\xf9\x1dP\x92N\xa3,U\xde\x908\xa6\x92;\x0c\xe1\\\xb9%\x80\xb2\xc3\xb5\xce\x88X<\x0b\xdb\x8a\xc2,\xa4\x03\xb5\xd8m\x92\x08\x88\xca.\xdf\x99\x1e%\xee.\xbc\xe4=\xd6b7\xd8\xa5\x17\x8c\x06,lk\x12\x10/\xccVB\xa7\xb6\x8c\xd6\xdc\xf6\x8d\xc4vn\x1e:\xd7\x96\xce\xfc\xd0O\x16\x96\x0bKm\xf14\xf6\xfc\xd0r!\xd0\x96\x8a\xfdy\xad-\xe5\xb3saB\x89G\xf5\xe3\x90\x92\xeaYM\xd9\xb9\xb6\x8cS\x9b\xb5\xe3\xa2\x85/\xde\x82E\xb2\x96\x10\xaf\xf5\xcf\xafb?-]\xbcn\xa9/\x91\x08\xe6\x9f\x04\xfa\xa8\xf8\xe6\xf5\x9d\x19\xaf\xa2qm\x913d\x86{\xd3\xc68P\x808^2\x18\x91x_\xe4\x11\xc2n\x14N\x88\x00\x0dZ\xbeu\xa3\xb0\x04e=\x9e\x07\x8d\x14\x174v\x15Mrz;\x01B<|\xb3\xbe \x9fs|\x92\xd5\xba\x8e\xa2\xe5\xc5\xf3\xa7\xf8{{\xbb8\xcf\xca\xb58\xfc\x8c+\x8cQ1m\x886~(h\xc1\x7fc\xeb\x84-\x06\xe3b\x17\xe8A\x8cx\xa8\xd1-\xac\xb9+9-3#\xd2\xda\x9c\xab\x171\x89M\xd0\x05\xa1\x12\xe7\xd4*\xcd\xadq(\xfa\xb2\x83\xdd\xees\xa9\\\"\x97\xe8}\xc4\x89\xbb\xf0<.Ux\n}Z\x89\x87_=\xb1\x0b\xfa\xcf\xe3t\xae\x04\x135\xf3\x82\x84\x00v\x0b1IVQ\x98\x10\x17\x84\xady\xa8^\xc0\x96\x96\xb8\xa6\xb4\xd3\xe1\x93C.\xa4\x8b\xedm\xba\x1b\xaf\x1b\x80(H\x15q\\8\xb7\x1b\xa9\x19C8\x86`\xec=;\x17\x14\xc6D\x17L\xb1f\x90s\xe3\xb6j \xcc\xe7Z\nb\xeehYO\x9bx\xdb\x8d\xc7\xc5\xa6\xdd\x9e\xd7u[\x1cva\x97\xfdnw\xf6\x0by\x96\xed\xc4\x9c\xf8k\xbbi{;\x00P T%\x1b\xfb\xaeb\xb2\"\xe1T\x00\xa5\x08P\xae\x96\xb0h\xcd5*\xf4\xee9\x9a\xf0%\x0cy\xf8\x1fcr\x06\x07\x90\xd9\xf2\x0b\xf4n\x92\xfe.[d\x95>\x1d\xc18tK\xaf\xce\xb0\x8a\x08\x1e\xad'x\x12*\x8b\x03\x9b\x1d(e\xfe\x80\xbdS\xb8\x02\x86\xf4\xfc\x9c 1f\xa1 \xb4\xfcn\x0fY\xb1\xe2F.\xe4\xb7y\xb6S\xb9\xd4\xaf\x18\xc1T\x18\xf3Z\x9d\xd5&*\x03\xf3\xda\x17L\xd4P\xbdL\x15\x8f\xc6\xc9\xa5\x90\xc3I\x89\xa3\x17\xd8\xa1\x0d_O?\xea\xd7|T0\x97\xbc\x9c\x07\xccfV\x1cBb\xe4exT\x96\x1d3H\xc5+\xa3t\n\xf6\xb95\xbcX\xc4\x9c]Hy\xc4YnH\xaf\x1f\xf8Vmp\xd2\xb8\x18\x98Y\x83\xedCy\xe6\xfa\xcd\xb2\xe9\xac\xf4\xad\xe4\x8a4\x16\xe7\x1a\"x\x02\xfec\x88:\x1d\x07\xe2qtf\x82A\xad\xc2\xb6b8\x04Z2\xb5\xe61\xdcNlR\x9c\x9f5:8D\x89LZl\xfeY\x97eg\xb03\x17\x9d\x97K\x80\xd8F\xc9\xa7\x8aM\x9c\xf9\x11 \xe4\xbf\xc6\xbd3i\xf7\x9a\x16\xbensF\x95\x1b\xd7:\x899)}Y\xb8Ap\xc3\x0d=\x861\x8a\xce8\x13'gm\xcc\x06h\xb9\xeaA\x10\x18\x8dRY\x84,)lVD\xfb\xf5\xb8\xdcJ\xa8\x07\xbc+*+\x91c\x8d\xcb\x11\xdd\xb9\xba\xf7\xecB\xa4\xa2\xc9\x89\x0d\x0eM\xb1\xa4\xec\x8a%}\xceq\xae<\x94\x04\x85K\xbe\xa6\x9b\x1c\xabu\xeb\xefM\xf3\x93\x0eF\nf\xb8\x8a\xaa\x18m;Z\xc4cL\xdb\x02:?s\x95\xa3\xa68eR\x85\xddo\xc4T\xe0f)eC\x13a|T1?)\xdf@\xbc4GP.\xa2\x9c\xeb\xec\x0c\x15=\x14\xe5n\x9b\x00U\xa8Z\xe9.b\x1c6\xf0\xc92\x1dG\xcd\x16q\xdc\x96\xfb\x08\x0fnd\xde\x0d\x16\x94\xca9R(\xe6\xf8W-\xa6{\x15{\xab\x8dN\xf7\x9a\x1b\x80\xb6g\x7fl8\"\xf2\xe3\xc1\x07?\xe4\xa2\x1d\xd7B4\x89\xbd\x94\x9c,l\x8b\xcefE\xa6\xc0\x85\xfb\xb0\xec/!t\xf1\xf5\x92s\xca,\x1f\xda\xb9A\xf1\xb3[\xbe>0i\xcd\xc0x\x8dI$S\xed*\xf2\xe6\x9a\x04\xce[\xe7\xb00&\x1e\x94!!\x84\xd3\x12(l\xbf4G&\xa7\xfa\x14]\xb6B\xc5o$W*\xa3\xa6^\xb2\xde\xf7\x99Ho\xab\x1f`=a\x95\"\xc4~\x9c\x9f\xef0\xa2+t\xe3\xb9 \xa9\xdb\xb2\x0e\xdaLJ>S\x14\xbb\xc6\xfe\x19\x94\xe3\xd2JR\x01/\xb4EE \xa9\x9b\xdc\xed\x1b\xd1K\xaa\x9bR\xe6\x9f\x87\x81\xadM\xe5\x07\x065\x86\xaf\xbb.\xd7qF\xf3\xfc\x8a\x11\x19$D\x82\xf98:\x93vz\xf7\xc2\x0f\xa7\x9c\xba\xd1\xa2\x1a\x8f\x9cT\xf6\xa6l\x86\x8c\x84B\xe7\xfc\xfe\x908\xc2\xfb;\x16\x14\xa7\x10#\xaa\x13\xd5\xd3\x9e6\xee&\x82\x84\x94|\xbb\x9b\xa3\xd8hL\xaa6rM\xd1Q\xd8\xd2\xc5Qu\x8e\xe5\xd9\xa1\xdf\xc7\xf9,\x8e\x96\xf4T\x86\x11\xbc\xfb\xa7\xa2\xac\x1c1\xdb\xc50\xd8\xed\x02g\x97bpW\xa3M\xb4iB\x1fNc]\x84\xbaz\xa4\x8dI\xeakO\xea\x1a%\xcb\x8dv\xd0\xe5\xcf\xb9\x1bK\x0b\xbb\xa3[_\xf5@\x93\x1bQMd\x01\xfc\xac\xa2\x9c\xd6\xbc.Z3\xee9t\xb2\xce\x98\x9b\xde\x01\xfa\xe0\x14\xc6\x9b\xed\xfbA8\x97\xb8\xd9\x9c\xe7\xf1\x85\xb8 |,\xd0Z\xc7\x00\x91F\xcf&\xe9\xde\xb420\xbb\x16\x02\xe5\x8f\xf9k;\x8f(\xee\xb6Ppo\xf1$\\\x07\x94-\x97'\x18\xb2\xd9\x85\xbaA\xa9/\xcb\xb0\xc2A\xe1\xed+\x9e\xccZu\x96A\xcc*\xfd\x99;d5\xd0\x92[\xc3\xbd\xafg\xef\xe2j\xf4\x85\x8a\x0b\xcd\xb4\xb6\x05%\xaa\xc3\xe7,o_\xfb\xadf\x04\x95ru\n\xe5\nL\x95U\xdf\x86\xb2\xa8\xaaO\x95B~>?\xf6\x9f\xec\xa4\xc8\xb0\x12#H\x84\xec\xd4\x9a\xca\xe1\xf0\x13\x12\xcch\x15\xfc\xf7\xd3'\xb8\xf2\xc3itU\xa5/\xbe>\xb272\x12&_&}\x00\x7f\xc81\xcd\x9f\x16\xaeS\xdds4\xc4~\x816\xc8\x06\xf0\x00\xf2\x9a I\xdf\xf9K\x12eiK)'$W\x10\xd9>;\xc0\x8a\xaf1\x1cB\xc1\xff\xb8\x80\x03\xe0\x85\x15\xb5\x05\xf6\xfb2LI\xbc\xf6\x82[v,>\xd7\xf7,J5]\xcb#C\xfdK\xe9\x83F\xf1\x873\xf9\xa8\x88\xad&\x96\x8fJ\xda\xd2\x98\xcc\x94\xec/\xec\x8d<_\xe5#l\xb7 $\xa55f\x10\x89\xdd\x1c\x0f4s&a\x1c\x05A\x1b\xfd\x90\x0c\x1d;\xa5\xcd\x05\x84\xff\xf9r\x8a\xd2\x87\xfc\xaa\x8a_\xb4\xb7,\xd4\xf4w'\x9d\xa9\xd6p\xb4\xb7s\x84\xf3\xe1$\xf5\xd7\xe8'\xda\xf5\xc4\xcf\xcf\xe9\\\x7f?\xc8/R\xa5\xaa\x1a\x8dV\x91bQm\x15FPl\x99\xe6\\ri\xf7<\n\xc5\xe4\xd9\x9dD\xfe\xb7\xee\xb2G\xe3q\xe5bD\xab}G\xec\xb9\xe5\x92L}\x16\x9b\xa5\x99\x84\x95\xbfP\xb2e\xb2\x01\xa95(\x0e\xe6\xac\x8b\\\x98\xef\xbc\x0d\x87\xa0|\xa3\x1dD\xb5Ni\x18\xe5\xe2\xe2|\xb8M\xde\x9a&\xde\xd9\x14P\xcdGU\xa2\x9f\xc8Q\x88\xea\xd1S\xd8#\xe1\x8d\x82eA\x07R~\xab\x99F\xdfDW,W\x8em\xb4\xfeF\x13\"kA>Zz\xd3\x1eV\x8eq\x90\x1a*l\xd7\xd7\xf0\x92\x89\xef\xd7\xd6\xb8\xf0C/\xbe\xae\xaf\xe2%d\x7f\xb7~$\x93d\xd0Ta\xbb\xa1F:\xeb\xef\x07\xa4\xa9\xcevc\xa5\xd8\xbb2\x94\x83\xe4\x9fm\xc8+\xd9hq\x95\xfbwWwxys\x1b\xf2\xfc\xe8\x18\x19Ee+\x90\x0b\xf7\x07i\xeb\x07.(`3\xff.\xae\xa3\xf8T\x18\x9e5\\\x03\x91\xc7\x8f\x9db`u\xca\x97F\xdc\x85V\xf8+\x9e\x16\x83\x846h\x08\xadP\x11Z\xa2#\xb4EI\xf1H\xd3\xc0\xdaM3 \xbc\xd4\x0f\xfb\x8d\xbd\xd7\xee^\xf1\x88\xbey\x9bM]\xd7nwhEZ\xa0\x05\x8d\x13\x8fP\xe9\x98\x87\xd5\xb8'A8X\xd4\x87\xd8\x12\x0f\xa5\xd96'\xdaez\xcdbQl\xf5\xb4\x9f\xeb4\x84\xba{I\xbc/\x13\xd12\xb6\xca\xc1\xc5\xed\xd213\x1a\xf1X\x85,\xbdQ\xd5'\xc4z\x1f^\x86\xd1U\x08\x82\n\x0c\x81\x0d\xdb\xa8\xc7`\x07l\x99\x12\x15a\x1d\xf2\xb8t:\x8e\xab\x05\xdac#)\xf9(\x92\xc6\xb06)\xe74a\xa0\xd3Dh\x04\xb3\x89k#\xa9\xc0\x0ef~\x10|\xe3\xa1\x96\xce\xbb}/\xb5X-\xcfkV\x9aW\xc0z\xdc\xd9\xa8\xc7Z\x84\x95U\x98\xcc\xfek\x04+\x96f\xdc\x96:^\x98$g\x10\xe3\x0d\xbc$}MP\xce\x16\x81\x11\xe9\xabwQ\x8a\x82\x92\xfc\xeeh\xe11\x8f:\xd9\x1b\xb0\xa4\x0c\xcc\x7f\xe6gUV\x13\xd6\xfa\xc9\x08\xfa\x83\x07\"c\x03<}\n{0\x1a\xc1>\x1c\xc0@\xbc\xd9\xa5o\xfa\xbbp\x00;\xe2\xd5\x0e}\xb5\xd3\x83\x03\xd8\x15\xaf\xf6\xe9\xab\x01\x1c\xc0v\x1f\x86\xb0=\xa8\x1d\x92g8>\x852\xb0\x98\xfev\x19DU!\x7f\x13\x07h\xb4;\x19<\xa4{\xd9\xee?\x1a\xc0=L\x0f\xebH\xb6L\xe5\xa5\xb0\xfe\x9f\xff\xeb\xff4PY\xf40*\xaas{A\xc91\xac_w\xb4\xea\x06\xd27\x0d\xa4_;\x10\xd0\x0df\xa0\x0c\x06\xffV;\x1c\x98:\x1c\xf0\x0e\xdb\x13O\xae\x0f}\xacC2I\x90\x08\xd1\xbd~\xa8`\xfd\x13\xc9\xd7\x0c\xa3y\xa1Wf \xe5qY\xe5}@?t\x94}\x91\xa7l+\xf3[nuS\xb1\xa8`\xb5\x1d\x89\xcb4y?\xe7#\xde\x96\x02\xa0\xd5\xef\xbdD\xab\x01\xa0\xebe\xa7\x85'\x10q0!\xf9\x08\x1dWjt\xf2\xc5\x0cs\xf2n\xb6\"\xa9\x0f\x03\x80\x97\x91\x93\x85\x17\x1fESr\x98\xda\x92\x07\xac\x1aWZ<\xb4\xd1\x98J\xdd{{\x83G\xfb\x80f\xf9OF\xb0\xb7\xbf\xd3\x7fT2\xf8Rp\xa9B\xd0v\x95\x85\xe3)\x9a\xc7\x12D\x06gj\x9d~\xa5N\xff\xcc\x85\xb0pS\xd7\xe6\xd9\xae\xbc\xd1\x9bxh\x89\xa32\x93\xbef&\x83\xe6\x99\xf41\xe5\x85v\xe1\n4C\xa8\xd7\"R]\xaa:\x90\xef\xc3\x0f\xa4\x03\x89]~X\n\xe5@jQ\xdaH\x0d\xf7@fr\\\xc3\xbdtL\x9bS\x82@\xaf\x1a\x0eL\xb7\x12\xa4\x1623\xed\x16\x13\xe3\xafl\xb3\x1d-\x91\xeaq_\x93\x83\xd2ZqV\x83\xbb\x9d\xd9*F\xec\xc06\xde\x94\xa8X\xb1#\xec\xd1B\xb1\x1a\xb5\xf8Qj\xfa\xb3\xf6\x83\xe3\x1a\x86_\xc2\xb4\xb0\x81f\x05w\x87j\xda\xadtP\x8b\x1d\xf9\xa0{.\x02X\xc1\xd4a\x036\xac\xcc\xcc\x8e\xe1|\xa8\x07\xc6\xa2\x86yj\x82\x85\xd4\xb0\xf8E\xca\xd1\xdcX\xc6\xc7\xa8d\x1b\xe4\xa7\xf5\xc2\x7faq\x9b\x9fA\xb9`\xa8\x80\x1f\x97\xcdU\xdd\x9e[\xed\x7f\xbfHB\x87\x9e\x989k&\x98x&\xe7\x18:\x06\xd9\xba\xf12u\xbd\x84\x02>\x1e}\xae\x9a\xdeJ4\xb2\xbd\x8d\x83\xa1\xab\xb7=`bv\xdd\xc0\x90\xb1\x92F\xe6\xb4\x1e\xc3\xe0\xf7\x1f\x03o\x0bC\xef\x8cD\xca\xbc\xf2\xa8v\xf4\xa3\x12\x9d\x97\xb7\x8f\xd9\xb0\x98\xe9 \xcb[\xbeJ\x15E\xb8~\xf5\xeb\xca\xf9\x16V\xa9\x8c\x1c\x9e\x01\xb6\xc1\x0e+\x94[\xbf1\xb4,x\x8f\xf9M\xeb\x86FKL\x1bFR/\xd4S\xcf\xf2v|\xa2!\xa4\xfaq\xd5\xf3Bw*\xa0(+p\xeb\xe1\x14bLy\xd2\x92\x04\xa3\x9cR\xb7\xba\x99)e?/^\x17\x176\x035y\x1f\xcfq\xae\xcf\xcb\xac\xd1\xae#\n#\x04J\xd9T\xca9\x13\xa2j\xda\xf0\x92\xc9}n\x8b\x91\xc6^\x98\xcc\xa2x\xc9\x8c1tn1\x18\x17\xfc\x9d\xa8\xd7\xc2r\nT\xaeY\xe9E/T\x85\xdd\xbcV\xbd\x1fG!\xb5\xe1y3\xb90\x0bi[qY\x1c3\x06\x0e`\xcc\x06\x85\xd0\x857\xb9\x14qj\x96Y\x90\xfa\xab\x80@\xea/Ib\x8cw/\x06\xb2\xc8\xc2\xcb\xdcG%\x1f]\xf1\x86\xa7\xec*L\xadx\x1aWW\x93O[<\xe2\x80apl\xe1}\xe0+\x86;\xb6_ k.\xecc\xe1 \xf8\x9a\xa8\x1bEW\xb6Z\\\xe9\xf1\xa6\xb0\x01\xd58\xdd\xd1\x8e%\xc4\xd1\xd9H\xcak\xae\xaf\xc1\xc1\xc8\x82]\x98\x8a)\xe8kk\x14\xdafZ\xa9|\\\xe8\xad\x97t\x0154\xd5\xa4P\x1e\xb5\x89E\xf2\x89J\x06O\xc5\xbb\x91\\\xc3\x9cgd\x16d\xc9Bj\x80\xfd=\x12%\xc2\xe4\x1e\x0d\xb6W1\xc9\x1d\xf5\xb2&\xbd\xa8\x8e\x9d\x12\xbe\x18e<\xd3\x8fL\x1a\xcd\x81\xfcW)g\x9a\x96\x19\xf3r\xdaZ^\x14\xcaDz\x9c\\\x15\xfb\xa7~\x1e\x9e\x89\xeb+\xdd\xa4hLH\xabLB)\xb1`Z\xc4\xba\xaf\x84 \x10\xe7e\xe5\x9e\xe3\xc8\x0b\x02\xba\x0d\x8bE\x9eF!\x81\xab\x05 \xe1*\xcf\xa8\xb45\x82\x9e\xa5\xe9?U\x89f\x89:n\xd8]\x92\xfaAP\xdajj\x979d4\xbe\x00\x85\xcc\xe6W\xf2\xaa\xb9\xd2;;b\xdcJ\xb4adw\x99@\xab\x93.Q\x90\xdc\xe9\xa9\xdc~\xc5\x97\xac\x18yy0\xa5\xfd\xd6$(T\x00\\|m\x080c\xec\xb6*\xc9\xea\xbb,{\x9a\xd5\x9d\x99(\x9b\xc8\x07\x0c\x85J\xe9\x10J\xf37\xd2m;qa+V\x10I/\x1e\xb5>r\xecXY#<_\xbe\xd0\x89sc\x04\xb1\xeaYP\x7f\xa9R\x0b\xdb\xdc\xe7\x84\xc8\x10\xc5[\x04\x01p\x16B\xb8\xc4\xae`\x0c&\x95\x81\xe9U\xb8,[n\xd4\x15M\x16\xfc/\xe9\x96\xb9-f@\\\xdd\x06=#$Z\xe6i\x90\xf93\x95Q\xac\xb6\xa6l\xb1z{\x0c\x96{=\xe4D\x969\x90\xab\xc4]!.\xb7b\xb5%\x9eZ\x97\x89\x17sH\xcaBQ\x14\x1f{\x93E\xb9\xa2\x94\xe2|\x12\x93\x12.\xb4K\x8b+\xf0*bDSKU\xb9\x0din3\xda\x04@Lgz\xef\xde\x06\x8c\xb6\x9e\x15DK\x97\x10\xbd\xd9\x1c \x18\x04\x10\xd2qxV\xa9|c\xf3\xb4\xb8\x18\xc9X]+\xb7\xa4h\x84\xdb.\x97\x16\x9e\x0e\xfc\xfd3\x9a\x940`\xc7iZ93\xcd\xf5\xf5\xab\x96\xbc\xf6^\xdb\x98X\x16\x95\x18\x84\xa9/\xf0\xe2\xee\xde=\xae\xad\xd8\xc6\xc4\x0c>\x86\xb6\x1e\xe6\x8e\x95x#\xd4\x9c\x1d\xb9\xd5\x1c\xcb\xfe7\xbb\x0f\x06\x8eM\x87\xc4\x91\xd6K\x12\x7f\x1e\xc2\x10\x8bv>\xd7\xa2\xd0\x05\xdf\xc5Tr.x.\xcf\xe6:P\x13\xa4N\x9aH\x0b\xe8\xee+\xe8#\xe7\xcc\x8f\xaf\x95\xaf\xf4\xaeY\x13\x17x\x08@\xad\x07\xd6$\ng\xfe<\xab\xc9$.\x985\xbdl\xd1\xe4\xc1\xb5\xf6\x82\x8c\x0cA1\x02\x96\xd6\x15&^n>V\x9cN\xec\xcec\"]\xe5\xc6\x15\xc9\xba~\xe8\xe6a\x97\x87\\\x8c\x84\xc55\xd4B\xd1\xdd8\xa12\xa5h J\xa6\xb9*k\xc4s\x06\xa60\xa4\x87>B\x86\xb1\x14\xe8\xa7U\xacR,_\xaa\xe0m\x11\xcfn\xfc\xe8\xa1\xe3b:\xd4\xf1\x19\xcbl\xdd@U]\x9d\x02\x9cr>\xde8=\xcb\x99y\xfaG\xb9\n\x92=\x82\xfd<\x86t{\xfb\xb1#|\\-\xcf\x82\x0e\xd8\x9dN\xe8\x14\x1a\xa8\x9d}U\xae\x97\xf4(\xc2i\xc2\xb6f!K\x98\x8bE\xb9\xc4a\xd3\x06 \x0fq\xef\x82\xe5@\x87\xfe\xef\xef\xa2\x8dY(\xbc5\xf1\xec,\xdc\x06\x1e\xc3\xcd\xe32\xcb\xd8z\x8d4\x14\x1f\xe5\x1b\xc3\x9a\x15b\x8f\xc2\xe7\xe0\xa9E\x9c\x8a\xea\xa1\xba7\xe9\x93\xd9\xe8\nU\xde z\xf4\x07\xdd\xed\xf2\xcd\xe7\x12'&r\xe8\xb2\xad\xeb\x91\xbeTM:\xe7\xe7$}s\x15\x8aj\xcfI2\x89\xfdU\x1a)\xf6\xd3\x99\xe9\x83\xd7\xdeR\x0dh\xe2\x99\xea\x9e^//\xa2 iq2i\xd7\x98\x91`~4\xc76Q\xf1\x14\xe5D\xb9\x06\x86\x18\xc8\xec\xc4\x11\xccN!~kC\x0d\xeaW\x1a\x9b\xb6\x99\x87M\xc4\xc2\x14j\x14?\xf2\xd2k\x9b@\xee\xb2\xfa]\x19\x81L\xaa\x0e\x0f0\x82\xdb\x7fY3\x91\xed{r ]/g\xffS\xb9\x95\xcf\xdc\x15}\x1d\xff\x1b\xda\x0fUUs\xa4w\x03\xa3\xdc\xe9mq\x94\x9ek\x9a,xt\xfb\xe4\xc4n<8\xd3B!Fj\x85\x0b$w\xc4\xd8\x10O\xb7\x1a\xe18>C\x07'\xe1H\x91\xa1<\"\xbe\xa8\xacH\xd8\x00g\xb9\x8fv\xfc>\x1f\xfa\xd6\x16W\xf6\xb1\xf0\x03\xe5\x14r\x9f>\x19\xb4d\xc8\xd5\x9b\xf4\x83\x0b\xd24\xdaVX\xa1\xe7\xa3\x88\x0b\xd6\xf99I^E\xd3\x0c\x0dN\xd4\xa5D>G\x16+Yt!/N\xc8\xf7\xde28BnE\x93\x16\x7f]D\x88\x0e\xed\xbdAO\x83q\xc8\xfc\xb0\x80\x0dq\xb7\x18\x04\x1c@\x0cC\xcd\"\x0bSS5\\p\xd1\xa9n`\xb5\xa8\xaa'\x0f|-#\x91\xe3\xaf\x9bx3\xf2M\xe4M+ \xacjID\xce3\xb1\xd0\xc8q|\x88\x03I\xba!\xb9zG\x89@x\x1c\xc7v\xa1IB*\xad\x1c\x97\x1bz\x916\x11\x84\x9d\x87\x06q\x88\x8e\"\xb6\xcbs\xf0\xc3I\x90M\xc9\x10\xc6\xa1=\xe8\xed8g\x12\x12\xfcC\x07\xd3\x1f\x0c\x9c3\x85\xb0-W\x81?\xf1S,\xdf\x1b<\xc0P\x06{\x83\x87\xfc\xdfG\xec\xdf\x9d\xde\x1dM\xe2N7S\x10y\xcc[\x99t\xdf\xbd\xf9\xea\xabo\x8e\xcf\x8f\xde\xbc~\xf1\xf2\xabS|\xf5\xfe\xed\xf3\xc3w\xf2\xab\xda\x9d6\xe8\xed\xfdN;-[M\xbd\xaa\xf6\xd2@\x165\x07\xf3\xf5\x8a\x0c!\xab\x9e\x10+\xef\x9a\x02d\x08v\xcf-\xb6\xa0c\xff\xfdF\xd5\xe2\x02(\x9a?\xd2M\xa3\xf9<\xa87\x0ej\x18\x91&\xabJ>\xa2\xd4\xd4uy12\xfd\xbaYL\xb2K\xce\x19\xe4\xac*\xaf\xa8Y\xff\xfc#63K^\x81\x1cod\xad\x89n\xaeU\xad\n|\x1eA!2\x12\x8dJ\x0ef%l\xec\xef\xa9\x0c\xc8\x97\xc2F^\xa7\x85b'\xa7\xca~\xc8\xe2:\x94\xd1\x8c}U\x1d\x04\xdf\xbca\x83\xae@\xa3i\xd8H\x17\xa1\x18\xac\xa0\xa9\x16\x8b\xde\x19\xba\x9br\x87\x94\x1a\x10\xf9\x1c\x18\xdeQy\xa1\x8f\xb7\">\xdd\xd1\xd6%\xb9N\x90\x91&\xdc\xa3\xc2\xc2\x1d\\\xbc\xc3\xe47C\x16\x14w\x1c\x9e\x9d\x95t.\xa22\xdeZ\x1e\ny\x05%\x0c\x0e\xe9\xd8f]\xa0\x91\x86T\x1d\xc3\xd0\xa7\xb1O\xff\xd2\xe2O\xa3haT}7~\xb9\xd1\x01\xcc \x9a&\x18\xde4\n))\xda2\x1ew\xb7\x1c\x9d:4\xbf\x1cJyK\x96\x87\x98\x90\xfc\xeezE8o\x0c\x1d\xb0\xc4\xed\xaa\x977\xbae\xba\xafn\x18\xec\x86\x9b\xf8\x91~\x0f\xef\xedj\xb7\xf0#\x95\x05\xcbP\x18.\x1a\x0e\xed\xc1\xbecg\x94\xf2\xec;\xb6\xe5\xa7$\xf6\xd2(\xa6\xe8\xd3t\x94\xa7r\xf0\xb2\x1b\xa7F;\xa8\xbb\xba.h&\x8c \xa6#\xa8\xe2EH>\xa6t\x13i\x12\x91\xd3\xdd\x80m\xe3b\xbc\xcc\x87\xbd\x19\xb0%\xf5\x84\n?N\x1a\x1fh\xc1\xba\xdb3\x93\xc0=\xe9\xea\xa3\xc4\x94\xfb$i\xca%\xe8W\x14\x9dEf-\x17\xd7.B}\x04\xe5\xd02N\x81\x98\x06\xae\xf7\x18\x85\xbd\x07;\xbb;\xbc\x7fV\x1f;\xa2\xc8\x82\xce\xdf\xf4-\xf3\xc2L\\\xecd@\xcb2\xd8\xe6\xcdt\xe88\xb7\xf9\xa0\x9e<\x81~\xcf\x81\x0e\xec\xef\xed\xed\xec\xdf\xcd\xa6\xaf\x1c\xa9\xfc\xe0\x18\xf4\x8dg\xea\xc0\xe9\xceI*\x0e\xf9\xe6[Y\xa4\xf3\xeaIjd\xf1H\x03\x8b\x87<\xd1E@L\x0c^l\x13n{\xe4\xdcz'\xf6w\xf4\xd7#\nOV\xa10(\xa4\xb5\x03\xdb+\x92.\xa2z\x034\xc9\x8dl\x0b\xa3\xcd\x0b\x9a:\xf6\xcf0\xc0\xc5\xd8\xfa\x97\x7f\xc9\x87\x83\xaf\xa21\xa5Ng\x9b\xcd\x9b\xae\xf6\x0eJ\xbb\xfd\x1d&\xf5\x0evv\xf9\xbfLM:\xd8ej\xd2\xc1^\xaf\"\x0e\xf7\x1f9B\x14o\xd3Y#C\xad\xc3G\x99E\xf6\xc7\xa1\xddwlK\xdc\xc6\xbf\xf3\xe6\x96s\x06#\xb0~\xc1L\x8d\x1d\xba\xcf\xb7F`\x8d\xd9E\x0b\xfcrf1\x1d\xc1N\xcf\xe1VK\xa5\xe8\xbd\xa2\xa1\xba\xb0\xdd\x1c\xf2y\x9b\x16t\xe89\x80\x01L;`\x9d\x95\x9c\xe3\xb6\xda\xe9\x07d0n\x85\xf6\xee\x80%G\n\xed\xdd\x1d\xc7\x1cx\x8d\x8f\xe4\x01\x9d\xa2^\xd7\x1c\xda\x8f\x1e9\xb65\xf5\xd7Tl\xb0<\xad\x19\xccF\x81\x86\x1fT\n\xd5\x9b\xcc\xaeW\x00\xa0\xd5\xe4%]\xbf\x89\xd0\xd4\xb3\xe6\xe8\xaa\x81'\xb1\xdeV\x813\xe9~\x95\xea\x10\xd3\x95\x9a]\x8e\x13\xc0\x96#\xe6\xb1\xc7\x05I)|\xd1j\xe9\x99\xda(\xca\xd4of\x9b\xb7\xb9\xf5e\x86\xab\x92X\xeb\xc8\x0b\xff\x94\xc2$\n\xd7$N\x81\xa3y\x1a\xc1*\xf6\x97>\x06+\xc4)l*\xd25m\xf7\x81\xe1\xfc\xe9\xef\xe8%\xe8~O\xe5_\xaa\"t\xff\x01\x17\xa1\xfb\xff\xaaE\xe8\x87\x86\x83]}\xcf\x01\xbb\xab\x03,\x05x\xcf\xb1\xad\x97\xc7\xe7oO\xde\xbc{\xa3\x1ez\x9e\xaa\x9e*\x17\xab\xda\xab\n\x15U\xba/F\x8c>?\xf9\xe1>/b9FxXV&\x1e\xa7\xdd\x17\x8f!F\x8b\xb3) HJ\xe4\xac7\xe3h\x1c\x9fir\xa6\n.W\x8d\xed\xaa\xa7\xa3%c\xe5rP\xc7v\xa6b\xbc\xbb\xdc\xca\x1d\xefF<\x05\xdd\xd1\x80\x1b\xd8\x0d\xad\xe7B\xb9\x98{\xe3\x8c3\xb4'\xc6\xec\x93hzVX\xc0\x8c$}\xac\xcf\xb2\x19\xdf\x16\xf1\xf7\x0c\x14\xc5\x80\xf75\x1c\x1b=\x92\xff5(\x8f\xf6\xf4\xa4b_wEG\x99\xc2\xbeco\xb5\xa3\x16\xb78\xd99\x80<.5T\xe9\x00\x82\xa8\xfaz\xc2\xcc7\xab\x10Gsv\xcfaJ\xa2\x8c\x19Z{\x08\x8b{\xf7`\"\xfc\xb44\x1f>\x96\xa3@\xe1j\xe0w\x94,\xe0Z\xb0d!\xff.\xb2'\xd8\xda\xa7OEk\xfa\x05\x9a\xdcv\x81vM<\x12\xb7\xe3\xb3~\xb1\x1c\xba\xe1\x90\x01|\x99\x1c\xe7\xf7\x8ev\xaf\xc0\xe0\x12\xc2\x9a\x18\\\xce\nS.#f\x96\xec)&\x10Km\xcb\xa2\xfb6\xb7\xfa\xbf\xedT*H\xc5pmWg\x9c@ \xb6I\xb5\xdb8\x95\x92^\xe2\xdf\xf4\x94\xff\x15\xe9)\x0d\xe4j\xb0\xa3\xfa\x1dD-8\x18\xc9j7?\xb1j\xcf\xd19I\xdf\x8a\x8aof\xf5A\x92s\x90pZF\xf7\x94\x0b\x11n\xabqt\x06C\x93i\xdf$\n\x934\xce&i\xc4r\xe3\x83\xe4\xb7_.=(\xff-\x1d\xbb\xc3\xf2g\x9c\x08\x1c@\x06\x8aG\xf3\x86\xe0\xef\xdfzK\xcaV\xc7\x9b\xf5\x9e\x1f\x9d\xc2w\x07\xfdH\xf3\x03\xdc\x15\xda\x97\x9e\xe3\xf2\x93h\x8f\x1f\xad(\x0e\x08\xcf\x94\xdd]\xc7\xc5\xfdLe\x03\x177\xed\xa4,\"\x04\xecUI\xb9\xc0\xf2\x82'\xe2~wQq\xcc8:==\xc9XN\xbe\xaa\x19\xc7\xd1\xe9\xe9)eH\x9f\x93I\xe0\xc5\x1e\x9da\xd5E\xe3\xe8\xf4\xf4\x03\x15\xafx\x13ji\xe0\x930=!\x93T_\xfe\xfc\xcd\xab\xdaB6\x17c\xf1\xbb\xe8\x92\x84\xfa\xc1?\xf7R\x8fy\x11\x92\xf8eJ\x96\xfa6^\xf8\x81a\xe4\x7f~\xf7\xea\x9b\xc3 8\x8a\x82\x80L\xf4S\xa7U\x9a\xca_D\xf1\x92k\xbb\xf5\x15N \xfd\xdeX\xe5\x15\x99\xfa\x9e~\x86\xaf\xfc%\xa1b0.n\xf5\xcb\xd7\xde\x92L_GS\xf2\xca[iJ\xa3\xa9a\xd5\xdfz>]\xb1\x9f3\x92\x18\xd6\xe5m\x90\xcd}\xcd|\xd9{\xc3pN?|\xf5\x0d\x1eC\xfa6O?|\xf5:[^\x90\xd8X\xfc\xd6K\x17\xa7\xc4\x80\x0b\xb4<\xf2C\xc3\x80O?|U\x87H\xa7\x1f\xbe\xca\xfdM\x0d5\xa2,\x9e\x10\x16z\xdeP\x83n\x94\xd3\x05!\xa9\x1e\xaa\xef\xc8\xc7\xf4]\xecM.\x8fL[%\xafa(\x8e\xb2I\x0e\xbb\xbc\xe4\x86\xa5\x0b\xf7m\x0cY\xc98\xf05<\x81\xa9\x904a\xdd\xe9\xe8\xf8\xd4k\x17\xe60\x82\xe9x\xad\x18\x9d\xd2g #X\x8c\xe7\x9a\x92sd\xe7u%\x170\x82sJ\xf1\xcfu\xa7\x11\xf0c\x18\xdd\x89\xed\x0bz\xf6~\xfa\x04\x9e}\xe1\xc2\xcc\x85\x95\xe3\xc2\xc58(\xde\x05,\x07s2\x9e\x9f\xb1\xe8\xbaK\x8d/\x03R\xd6kz\xa2\xc7\x0e\\\x8c\xaf\x99\x1a\x99~~\xedB<\xbe>+\xf4\x99\xd0\x96Z7*}\xb4>9\xf4\xbd\xe1~_\xd5\x05e\x82\x954In\xfd\x9d\x07\xfff\xf9\xf4_\x8e\xe5\x93\x99\xd7pl+\x0b\x93I\xb4\xa2\xd2L\xa22o\x1a\xa7m \xdf\x84f\x01\xfcq|\xc6\xae\x00\xfa\x0f\x1c\xdbG\xef\x8f\xbf\x9b\xf5{\x15I~\x1c\x9f\x8d\xd33\xc5\x89^;\x11\x93~\xbf\x16\xf5\xf8\xa2\xea\xc4\x93\xbb5\xc4j\xbfMe\xb7^\xbe\xa1T\xa6;\x11lV\xe9-c\xae\xf6U\xab\xa8\x19\xbe\xae\xdc\xed\x04\x8ckS\xde\xae\xd8[U\xc3\xb0`M\xab\xaf\xa7\x9ct\xa8\xd6\x91k\xf6~W\x1d\xca5\x17,\xd5^\xe7\xfc\xfd\xae\xd3M\x88\xb2e\x97\xbc\xad=\xc7V\xbe:\xe7,\xb1*\xd5^\xf0\xd6T\xf8\\\xf1\xf7*\x01\xfc\x88\x1cf\xae\x8fW\x8eE\x91\x0c{B\x12\xc5\x91\xf0\x18\x8b\xf8\xfd[\xb9\xe8\x10F`\xf1\x8fp\x87\xcf\xecS\xa5\xd77\xf5\xea\xdb\x9f0\x92\xde\x08\xce\xbb\xb3r\x01\xa5\x84[[\xf5\xaa]\xb3\x7f\x9d\xa0\x8e\xc7\xdd\x98$Q\xb0&\xb6\xba\xa6\xf2CX ZY\xe6\x19\xd1\xdd\xcb\xaf\x01\x93\x15\x99 a9\xab\xdd\xc3\xea\x93\xdao\\xc\x96v5\xd9\xfaA\xb2\x0394zl\xf1\xa58!?1\x86\x163_\x8a\xac8\x0b\x12\xdao\x1cY*\xab\x8a\xe55\x1e\xb27*\xf6\xbdl\x9c\xf3\xba\x9aX\x05\xa4s\xc4\xde\xc2\x98\xaf\xe5\xc9\xe4w\xf1,p)\x0e\xdb\xc1)\xa8\x89\xb4J\x7f\xbej\xa2s \xae\xb4\xd2\xee\xb9Q B\xcb\x14\xc7\x01\xf9Y\xe7\xe1\xbc\xcf'\xfa\x1a\xcb\xe6\xa4U\xa0J\x94i\xf7|\xcd\xe4\xc9>.e\xf7\x1c\x00\xe9F\x97\x18\x94e\xe6\xf9\x9ahc\xea\x93\xe0\xc5\x03\xdf\x1b\xcd\xd5'\xbc:E\xb8\xe6\xda3\xac=\x8d\x96\x9e\xdf\x94 \xc4\xb8\x81\xe5\xc7c\xc1.>}b19)\xec0\xdc\xd8[\xc6E\xd1\xbfF\x18\xa4t\x8b)\xf9=d=Fh\xedoc\x0e\xadY\x97\x84)\x89m~\x81\xe0\xd91\x8a\xe6\x94\xc5\x9du\xc9G?\xb5\xb9P\xbf\xd5sX\x1d\x8c\xb4\xb3\xe2\xe6\xff\x070\xb1?\xda\x16\xdfw\xdb\x93\x85\xe7\x870\xb9\x9e\x04\xc4b\xa1\xea\xe9:\xbe\xb4)\x06\x1f\x087\xd0\xd0\x85\xc4\x85 -N\xb0d\x08\x13;6S\x03P\xf7e#Xp\xfc[\x19\x9f\x1f\x9f\xc4\xc4\x94f[<75\xf4\x08\xc2B\x19\x1d=v \xb3\xc3q\xd4\xe9\xe8\"\xc8\x8a\x87n\x12\x1e\xe1&p\xd4p\xad\x9a\xde\xde6\xf6\xb6)\xfe\xea\xb1QF\xac\x1c\xe8\x7ff\xaba \x9c\"\x1c\xa7\xf2\n|\xb9\xd8)\\\x83Rm\xd0I\xa0\x12\xddS\xad\xb7~\xedJ\x9d4\xc2n-\x05S\xab\xc2\x85t\xcf1S\xb4\x8d?X\x184\x84\x01\xe9\x9e_\xd1\x02\xe2t\xcf\xd7,F\x1d\xe9\x9e',{\x04\xe1+l\x13\x86y\xa4{>\xe1\xc6\x94\xf4\xa0xe\x13\xd4]\xd4\x8e\xfcu\xbb\x91\xbb\x86\xc8g X\x9a\xb0{\xae\x0d\x05\x0f\x18\xec5\x9f\x14\xde\x90\xf39\x19\x8e\xdf\xfac\x17\x03M\xb2\x00\xf6bc\x15\x87\x1fL\xd0\x88\xe7\x82\xeefd\x1e\xa6\xe0\xa7 f\xaa\xa9\xa4\xfc \x9c_\xa2%\xd5A[\xe6 $!\xbd\xf9,<\xbf\xd2zGV\xaaM\x87\xba\x84\x82\xf2c\xe0\xca\xc5\xd3\x8ec\x11\xe6\xa1\xf4<~\x8d\x07L\x1f\xcf\xe6\x13\xfe\xfb.\xd9\x80\x93\"\xf3\xed\xadO~g\x88y\xc39\xfa\x87\x0c\xfd\xfb\x14\xbfC\x17\xb6L\xe3m7N>\xbe\xfa\x89\xb4X\xbf\x86\xb5\xbb1\xce\xbf:o\x85\xc9(V\xfc\x12\xf7\xfaq\xed\x86\x9d\xf2\xa8I\xc7.\x88Ma\xb9`\x9d/,\xc7\xc5t\x14\xae\x1c\xd5\xbaU\x14\xa3\xd4F4a\xed\xe6\x98\"\xfeT\x88K-\xd0O\xca\xf1\xb4\xcb_\xe6\x7f\xdd\xb8\xec\x107O\x92\xa9\xf9r\xce\x0e\xff\x92O^\xf6&\x91U\x97\xe5l\xe5\xebJ\xe5\x85\\\x991\x8a\xc5\x80\x9c\xb2-\x8f=\xd8\xddw\xecc\xd9\x86V\x1d\x1f [\xc4\xfc\x16\xa2\xdcO\xb6\x88uu\xac\x0b\x97-\xac\x8f\xa8\x0c5\xd2\x8a\xa9\xec\xca\x19\xf7\x06\x15\xb0\xca\xb5F\xe5\xd4\x83\x94\x92s\xe9\x07\xd9\x18z\x16\xf3?\x87\nL&R\x08_\x0e\xe3<\xf0\xa8\xa7\x96a*\xdfW|\x1e\x98\xb8>\x14\x12Jy\x9d\xcb\xfb\x08\xd1\xa5\xce.\x03\xca\xd6\x89L\x85\x90\x8f\xd3\x88C\x8e\x12.\xcd\xa4\xa0\xc6x\x1a\x8f\xab\xd8%\xb8\xc2\"];?Q\xf0z\xf45\xc6[\xc8\xb3\xf33&\x05KNx\x89\x8c\xcd\xe7]*s\xfe\xd4\xe6\x828\xc5\x93\xed\x18\x97\x13\x7ff\x94\x83\xe6\xc1\xe9Q\x8d-\x1b\x9e8.\x04v\xd0\xfd\n:\x10t\xbf\xc5\xff\xbf\x80\x7f\x86\xadK\x15!\xdf\n\xa6\xe8\xb8\xf41\xb3&\xb5eZ\xc1\xad\xdd\x1f8\xb6\xfcJD\xa3\xcb\x0d\xddY\xc7\xa7\xa5.%z\xa3\xce\x8d\x82\xa7i\x91\x05\x83\xf4\x93\x8e2\x81\xa4z\xea\xb9\xb9\xb4\xef\xb0\xe8\x9bzD\xab\xc0\xa9\x18\xae\x8dl\xd3\xd6\xa5S;j\\\xef\xa6a\xf3Q]\xd9\xf9\xe6\xc8\xd7\xed\x98'\x93i\xc0S\x05\x92\xf6%\xd3\xd4\x0fv\x1fJV\xf0\x95\xbe\x8f\xbb\xcc\xc0\xb9\x8b;\xc8~#\xa3E\xdd\xb4\xbc h\x9a\x92\xcc\xaa\xeaO=F\xb5L\xf6BxsQ\xaf\xbe\xf1y\x15\xb3\xca&j/\xa9\n::\xd6\xdc'\xcaO\xa4\xb7\x9b\x93\x1f\x8a\xe8\x86\x14\n\xf4YSZN\x8f\x91\xf6zV\xb4\xb0\x82\x11D\x9dN3\x07\x98\xd4\xa4p\x10O\xc8(/#\x81tov:n\xa1-\xa3\x18\x81$\xb2\xfd\x08\x01;\xa6\xacE\"\x98\xf4\xb1w\xc6(\xdf\xf6vFKb;l\xe2\n\x8dB3p4\x97\x9a\xd2\xd6\xbb1o\xf9\xa8\x8bG\x97oG\xddu\xdb\x83%\xf6&\x8d{\xf7\xae\x10\xdd\x8c\xc5\xfe\x06X\xbc9nUW\xbd\xd8vP\xa3\xcd\xd3\x88\xb7P\xbf\x02>[\x81\xd8\xf6\xebV@\"A\xf8\xf3V\x97\x83L\xe9\xa5N\x9dgp)\xdd\x1c\xa0\xda^\n \xc84<S l\xc4\xe5\xb6\xa6m\xef\x97m\xe2\x81\x8d\x9fIN\xb38Z\xdaQ\x83\xad\x0c;7\x07F\x90\xe8ma[[\xd6\x17\x01T\xb6\x8a\xb4\xe3\xaa\x86Y\xe8\xcf\xd5\xf7z~A\x02\x9c\x9e\xd8\xa0g\xbf\x06\xa6\x90\x1f\xb9MP\x85:\x9f\x00\xf10\x0f\x80\xb0\xba\x00\xe2\xd1\x9cj.\x0el\x83\xee3]\x1b\xa9\x1d\xd5\xdczk\xe9\xfa\x9d\xa4\xa9\x90\xc8\xa5\x9e\xcbV=\x00\"-u\xe2\xf4\xa6\xa2.\xe4~\x0e\xbb\xfb\xd2\xba\xc5v\xdc}\x0b\x1d\x88\xbb'5wJ3?\xf4\x82\xe0\xba\xad\xba=\xe3\xb7\xc4~\x1e\xc1\x9aJ\xc2\xe2\x0f\x83\xae=4\xddjk\x98\xdd\xca}q(\xab&\x8d\x96\xd7\xfc3\x8fRGT\x84\x95/R\xea\xf8\xab\xca2\xcb\x8f\xce\x9a\x8c\x8al\x94\xad\xf8\xc2\xe3\xe2 u6\x1a\x96\xf9\xae\xf2\x0b\xa2n\xc5\x7fD\x84?\xd8S\xb0\xf1\xb4\x06\x0f\xd3\xb85\x0e\xd2C0\xd5g\xe0\x86<\xd1\x97\xce\x9eV\xdcB\x87]\x82\x86\xed\xfc\xee\x7fX\\\xc68v\x88\x97$\xcd\xd7\xd2m\xe0\x19\xda\x83\xbd\x01\x8f=\xb7\xc3\xff\xdd-\xc7\xaa\xdb{\xc0\xff\xe5\xb1\xea\xf6x\xac\xba\xfd\x1e\xff\x97\x7f\xbf\xcf\xbf\xdf\xe7\xb1\xed\xf6\xf9\xf7\xfb\xfb\xfc_\xde\xce>og\x9f\xb7\xf3\x80\xb7\xf3\xa0\xcf\xff\xe5\xed=\xe0\xed=\xe0\xed=\xe0\xed=\xe0\xed=\xe0\xed=\xe0\xed=x\xa4\x8d\x9d\xc7|j\xdb\xc0\xa2\x11\x8b*\xbeNQ\x1ep\x13\x8f\xe3#\x1e\xae\xb2J\x10\xe5J\xd1\x94\xa0\x17\xb0\x82xH\x06\xd1z`\x8b\xd9\xb5\xf71\x9eJ\x1e\x16#\x8f\x1dR!\x8fr\xa3M\x08\x9a3\xb4\xdc\xe4r|\xe6\xe2\x9c\xf3\xccPy\xa4\x9c\x8c\xf9\xe9\xc6\xf0\x142\xb3v\x80g\xb9\xeb\x14\x99\xa52\x8c\xa2\xe3Sj\xd2\xef\xf7w\xfb\xfd\xbe\xc3r\xf7\x8a;\x91\x13/\x9c\xf3K\x11R\x8e-\xbe\xf6\x02\x7f\n\x93hJ`E'c2\xab\xe4w\xd4\x04\x9e\xb0H\x9dp\x80\xb1~0B,\x8b\xe4\xd9\x01\xdb&\xb0=b\xe5\x0e<}\n\xfd\x1e\xca\x14\x7f\x84~o\xb0\x0b\x1d\x16\xffS\x97|\xcc\xb4'C\x9eSP\xcd\x9c\xbb\xe1\x8ek\xc22CT -\xa52`D\xec]\xb5\xc7\x03\x16;\xa3\x1b{W\\\x10\x8d\num\x1dnP\xcc\xf1\x18\x8e\x84\xf0\x14\xbc\xc7\x0edl]x\x08Z2\xf6:\x9d3\x07\xe3D\xdc\x87\x9eF\x8a\xb0\x8e\xa2,L\x0b\xe7\xac\x90\xcc\xbd\xd4_\x13U|\xe0\xc1\xf8\"x\xaa\x1ar\xf1\xc7\x8e\xe0\xe9\xd3\xa7#\xe8;\xdc\x9b\xb53B\xc3#zb2\x07\xd7\x90\xbdz\xac\xac\xd3\xef\xa7\x84\xdb\x948\x17 \xda\x9a6aQ\xb3n\x1b\x16\xb5\x9a6\xa2\x8eD\x97\xfa\xd0\xad\x00\xe2\x88o\xe7\x84r\x93\x1d\xea\xe6\xe1DM\x99/\xe2[\x10\xd6\x18\x97\xad \xac!\x15\x92(\xec\x84E\x0b%\xac\xf1g\x11\x07\x93dBW\xc5\x0b'\x8b(\xdeH2\xa9\xe5\x06\xf9b`\xd4z+\xf4\x96\xc4\xaaK\xec\xf9\xd9\xc3\xbf\xf0\xe7\x1b\x8d\xbd\xcd\xd0Y\x9b\x16\xfe\xf7\x05G\x1e\xf8\xe1\xe5\xdd\x8f\x9d\xb7\xfa\xc5G\x1f\x05\xd3\xbb\x1f\xfc\xef0\xf0\x99\xff\x91\xdc\xfd\xc8\xd3\xf4\xf7\x18z\x14\xa6\x93(\xf8\x12\xbb\x956MG/\x9a\xff\x82;\x96v\x95\xf8\xbf\x90/7 \xde\xfa\x17\x9c\x83\x9fz\x81?I6\x9aB\x9b\x19\xf8\xbf\x03\x16mLvZ\xc1\x1e\xc9\xfd\"&\xb3/\x0b\xf8d\xe9\x05\xc1F\xa3o3x\xd1\xea\x97\x06=}}\xb9\x19\xe2\xb7\x1a\xbeh\xf6\x8b\x8f?\xbb\xb8\xfb\xc1g\xbf\x07\xd5O\xb2\xd5\x17\x18\xf9\xea\x8eF\x1e\xda\xfb;\x8em-\xbdt\xb2\xb0\\\xe8\xd7\xd7\x96\xc62\xce\xebi\x15\x9dz\x88\x88GH\x02i\xddE\xa2/+\x1aP\xcf\x90\xe7_\x0b\xc7\xc4\x9c\xdaB2\x9b\xf7\xe1@\xd8\xd81\xcf\xa8!\x9a\xb7q}n\xe8\x8c\xc9\x99P\xd8\xc7\x95X\x1f\x10n\x9a\xd5\x9f\x03\x93\xeb\x14-\x17\x06\xb7\x00g\xecV\xdd.\xa0\x15D\xa3&\x88f%\x88\xc62D\xe3\x96\x10\x95\x04\x88\x18C\x95\xf9\x08T\xf6\x86\x832rX\xe8\xa5;\x03hB\xbc\xf8\xdf\xd0\xf3\xce\xa0\xb9\n\xfcT\x8b\x9c\x15\xcbI3\x98\xc4EFh\xf7wUc=\x10z\x8f\xeakv\xb9\x867eU\x8d\x885A\xe3\x14\xcb\xbb\xb8\x98X\x92\x89mYt\x8e\x1a\xa4is\x1d\x02\x92%\x9a\xd0\x01\xe8\x03\x01@\xd9\xd7f$\\\x8bx\x12\x9d\xdc\xceMM\x86\"\x7f\xbb\xe5\xcb\xa9\xd3\x8a\xa8x8:\xfdgkf\xc2\x9f\xb80\xc1p\xd3\x01\x0b\x8b_\xe7u\xbe`\xa1;\xfdy\x18\xc5\xe4\xc8\xc3`}\x96o\xc1\x90\x1ey\xd0\xa1e\xcb,H\xfd\xc0\x0f\xb1hY*\xcaB\x1f\xaf\xda\x0f\xc0\xcaJ\x05I\xeaO.\xaf\xe9\xfbk\xfe\xde<\x84i\xbd\xd3\xfb\xba\xbc\x9a\xb4\xb3\xdd\xc1\xa3\xddG\xfb\x0f\x06\x8f\xf6\xd0\x8e\xff\xe9\xd3\xa7u\x0d`4\xd9b\xbf\xa7\xdd\x04\x83\x9c\xbb\xb0\x80\x0eXs\x93\x85\x00\xaa\xfaX\xf0\xaa\xb8\xdc\x02\xbb\xcb\xbc\xe6\xed\xd0F\xfe`\x1fl\xfd\xf0C\xe2X.,t\xd7\xd0\xf9\x83\x0e\xec\xd7\x0c\x17y\xc0\xce-\xdb\x9e`(1\xd4*C\x07\x92q\xef,\xc7\xf0\xa70E\xad\xe1\x8aG3\xe1*\xa4\xa9+>p\x1c\x17\xb6\xd0h\xbf\xa4\xe0\xc2\xc4\x1f\xbd\xb3\xfc\xe2-v\xebY\x9f\xd2\x83S\x0f0\xd0\x00\x04\xf0\xa4\xaa\xe4\xde\x86\xc1c\x08:\x1dG^\x99B\xa3\x16\xa0\x15\xaf\x8d?FZ\xe5w\xe9\xb9q\xdc\xea\xe098\x9e\x141\x15\xf1\xf2\x9f9\x00\xad\xe8\x07\x0c\x12}\x87g\x89\x90\xc0\xc6b\xc5O\\X\xe5\xad\x8e`\xed8\x8f\x1d\xb8\xee\x06^\x92\xbe\xc4\xb6\xf1>\x83\xf7s\xef\x9e\\\xa4\xc6\xf4\x16\x0f\xdf\x8cSv%S\x84\xf5\xde\x9a\xb1\x06(\xc9\xc4,<\x9f>\x01_1\x96\x93G]>:\xe8bp\xb0\x86\x03X\xf1\xb2\x9e\x0bk\xfc\xa42\x02\xc5,\x99\xb9*X=A\x1a\x85\n\xb3\xe7H\x10\xb3[Q\xb6\xf2\x99\xa9\x92+8\x80\xf1\x19\x0c\x05\x0d\xcau\xb1\xaa\x14\xa8\xd7iK,\x82\x81\xe5\xba\x05Su+>@b\xaa\xc2\x82\xa9\x8a+LU\xa8c\xaa\xe2M\xd9\x80z\xe5|f\x87\xf6\xe0a_U3\xfb\xbchg0P\x8b\"^\xb4\xd7\x7fHIL^&\xc6\x80A\xf1\xf5\\\x1a.f\xda=?'\xc9\xabh\x9a\x05\x18G\x1e\x86\x9a\xa5\x98\x92\x99\x97\x05\xe9P\xbd\x9f\xff\xa7\xea/q\xd2\x8e\xfd.\xff\xca\x85\xa8\xf8i\xa46|L\xd5\xbe'\xd1r\x15\x85\x94\x80\xe8F\x06\x98{B\xf8.}\xe3]GYJ\x17\x8fw\xd8\xb4Y\x8a H\xa8\"_Ny\xb7_S}\x8eW\xe2\x82U@\xbcr\x0b\xc2\x03\xc7\xcb\xe1\xea\x9d*\x9aLl\xca\xf9=\xd4\xa1 \x16\xed\xf5th\xc2\x8a*\xc8\x95\xe5E;j\x91\x97\x17\xed\xabEI^\xf4@>\xda\xf0\xd5\xfe\x9e\x1e\x15'\xbf?*\xcej/\x18\xf3\x91\x91:\xc1\x9f\xd2\xde\x1c\x9b\x1dN\xe8\x88\xe3bA\xa6\x16\xd8\xa4{~\x8e\xce\xe7\xe7\xe7\xc8&\xf4\xdc\x02\x1f\x1d\x9b8\x0e?\xadX\xf5\xfcxTE\x0c\x1d\x98h[\x9e\xd4\x96\x0b)\x1fFTz;\xae\xce\xe5\x92\\\x0f\xc1\x8aI8%\xb1\xe6\xa6\x94\xe3]#3\xb0\x96\xf3c\xac\xe2he\x88?\x03\"UFwN\xd2#\xb1\x85\xcduYd\xf0dE&,!P\x14\xd74\x1c\xb3\xd0\x1fq\xdc\xa2.\xdd\x13\xc4\xb6\x8e\xa20\xf5\xfc\x90T\x1cn\xe4'buO\xa2\xab\xbaZ\x99h1\xa8\xab\xe5\xb1Z\x18\xb57\xb10\x9c\xa9\xb9\xf2\x84U~\x17\xad.\xbc\xb8\xa9\xf2\x8cU~\xe6%\x9c\xde5}\x10\xb0\x0f\xa2\x90r\xeb\x1f\xbc\xc0\x9fzi\x14?\xf3\xa6s\xd2\xf4)&t\xe8\x06\x917\xf5\xc3\xf9i\xea\xa5Y\xa2F\xb2\x97\x9f\x05z/S~\x89\xdd\x9f7\xb0\xf7\x94GZP\x04\xb1\xad%I\x12oN\x90+\xb24J\x01(6A\"P\x9d;T\xf2\xdcQ\xb6o\xf2\x94\xa4\xcf$\xf0\x92\xe4\xb5\xb7$C\xb0\x92+o>'\xf1v\xe6[\xda\xfa7.L\xe0\xc0\xd8\xcf\xc4\xc5$l\x0eO\xc6\xe6\x82\xc5\xe1c!_\xb4b|\xaa\xfe[\xcc\xed\xddv\x9c~8\x8b\x8c#\xbc\x93\x1e\xf8\xc0\xb7'\xf9\xee\xf8=\xba3t\xe2`\xf8\xb7\x99\xe7\x07d\xfa\xaf\x12\x94\x8b\xdd\xd6\xbd\xa5~\x1a\x10c\x0f\xd6\x0b\x04\"\xa4\x11\xd0a\xc1\xe1\xdb\x97\x80l\x88Oi{\xd7r\xcc\x83\xf08rKkq\x84\xae\x95_dE\xcc\xe4\x013A\x9b\x18>\xf1,\xbd\x8f\xdf\xfa\xd3t1\x04\xeb\xe1\xc3\xde\xeacM{\xacz<\xf7\xc3o\xc8,\x1d\x82\xe5ei]\xffE\xfd\x13\x7f\xbeh\xf9AJ>\xa6\x87\x81?\x0f\x87`M\xd0\xdf_\xbfDP9\xdf\xf3\xb7\xff\n\xb01&\xcb(%\x85\xc7n#NZ+\xcb\xe5\xa4v\x8a\x88\xb9\xb5B\xe5_\x92MD,\x8c\x06\xcc\x9cq\xac6\xf7\x11\x89\x1eL\x15\xb2\xa6\nA\xbes\xaa:\x0dE\xea8+\x85H\xba\xb1\x8b&sNIb\xa9\x89(m\x1bl\x8a\x8a\x90;\x15\x8f\xa5\x81\xd3\xd5\xe6Am\xd3\xa2d\xdc\xa7\xcf\xff\xd6\xdf\x91\xad\x96\xa9p\xf2\xc8\xb1\xadrGV\xb3\xf4g\xe6\xd4\xa5J\xbe\x92\x86\x14\xe06\x17o\x83\x87{\x1a\xc1J\x02\x93^\x1ely\x01\x12\xabb\x9f\xa8^\x8c\xb3\xcd0\x8ba\xf5U\xeb\xce\xc2\xabk\x8b\na\x94\\\xb3qWvmy$C\\\x1d\xa7;\xdb\x10b2\x10*\xed3\x89\x8c\x02U\xbd\x8d($\xbaas\x0e\xb6\xca\"=b\x0ey\x0f\xf7\xaa\xfew\xbd}\xa7;\x93\xfd\xe8\xdb\xb4\xd8r\x12\xaa\x01\xeb\xe7Mb\xf0\x88\xbb!>\xe2n\x86|V\x83G\x0ft\x9b\xf4\xf4zy\x11\x05m\x9an\xb2\xf34\xd8\xe1\xaa;\x98\xdby\x1a\xbc\xad\x0d\xce\xd6\x03\xb5q>\xfeG}\xa7\xfb\xf5\xf1\xf7\xe5\xb2 /S>\xe1\xa9\xe5\xd4\x1eXj\xb9G\xeaxXn\xb9=\xf55\xcf-\xa7\xbc\x9d\xe6HR~\xbf\xe6\xefU4\xbd\xe6#T=\xe4\xe6\xfc\xbd:F\x9eV\xae\x82\xed\xec\xb5\x1a\xfe\x92\xa5\x94\x1b\xe83\xcaU\xb0\xed#\x9b\xa8\x1a\xfb\xee\x94\x81E\x95\xd6\x8e\xf9\x08\xd5\xea\x87|U\xd5N\xdf\xb0\xf7j\xf5\x9f\xf0u\xc5\x0d\xf5\x12Fp\xa8\xe6\x90{ #x\xa3\xbe|\x85i\xe1\x94\x97\xefP\x1ed\x18].9\xc2\x92\xbf\x9c\xbey]~\xff\x16FpD\x8f\xf2\xa3n\x82\xaaW\x7fv]\xaeqB\x05G\xdb:_\xf8\xd3) U\x11\xfc5+M\xa3\xb7\xb1\xbf\xf4\x99\xadv\xb9\xc67\xe8\x00\xa6\xcd\xb9_\xae\xf8\x9c\x92{\xdbJp\xf4\xdb1\x99\xfbI\x1a_\xab\xcd\xfd\"\xd7\xaa\xa4\xb9|\xc1J\xa3\xd5\xb6\xa1\xc2{M\x12\xf3r\x8dg\xa6\xf8\x01\xef\xca\xf5~F\x88\xfe\x955V.\xfa\x1eF\xb0\xf53F\x0e\xffY\xca\x08\xa0\xfc\xdd\x9d\xf9\xe1\xf4h\xe1\x07\xd3\xf2\xd7\xdf\x02\x8f\xf18\xa9w\x8d\xe3G\xdf\x03\xd8\x1a\xc1\xa9\xfd\xd2\xfe\xfb\x0d7\x0f\xd33\x91\xed\xe2\xb1@\xd1\xf0K\xd9\xe4\xac^0\xe0\xda\xac\x07\xc6J7N\xd7\xd3\x16V\xd9\xf2\x1bG\xad{\xe3\xc8\xd1\x0f\x0c\x8c\x00H\xa4\xf8\xd2~\xaf\xbf\x9dE\xd7\xd5) HJ\xe0\xfd\x98\x9c\xb9t\x92\xbc=\x1e8,\xc5;\x8a\xf7\xf4\xe7Kl\xa6\x12 \xf9\x06\x86\xf0\xb2\xbcd\x1fj\xb5\x9e \xd9\xd0\xff\xc2|\x0dO\xedw\x05\"\x98\x0d\xd8 K\xa5\x9bV\"|\x96\xbb\xff\x1aF\xf0\x8c\x8e\x98o\x8b\x12\xd6v\xc5\x91]\x02b\x0dBi\x1aI+\x00h\xd5R)\n\xf3\xbb\xba\x19|\xd5\x82\xd5+5<\x12\x8b\xf4\x95\xfd\"_\xc0%\x8b\xf2\x0f#\xb8\xe2\x19\x8d\xe8;Z\xe2\xdb\xbf\xe0\x9d\xdb\x01\xc6c\xc8 \x10f\xe4\xa3\xfd\x9d\xb0\xbc\x93\xe3\x93\xb31a\xb7\xa6\xe2\xf7\x88\xe7\xa8\xc0E\x0bM\x1b\xa1hr\x08\x1f\xed\x1e&\xb6\xd0a6\x0c\x8b\x0e?}b\xd8w\xe2\xc2G\xbb\x8fyv)\x7fR\xf4K\x87\xffm\x0e\x0d\xfa\xed\xcb*_\x0bU`\xfe\xa1\xcd]\xe3R\xeb8\x91;\x93\x87\xcca\xfc\x9a'\x82#th>K}\xc2\xa21\x8a|\xdf\x11<\x05\xff\xb1\x03_\xd9)\x83R<\xf61n\x00\x19\x87\xba\x10\x96b\x05\xeb&\xf0\xe7\xd6\xdb\xe9\x9b\xd2](.|\xcaRY\x19{\xde\xc2\xda\x05\x02!j\xb0\xbc\xa3[>E\xa6\x94\x19\x04\xd8[6#\xd9\x85\x0b'\xff\xf3\x17\xf1[\x94p\xecY\xf8 ]\xbc\xf4\x0c\x0b\xd5k\xd9\xf2\x14\xff\xd2f\x8d\xfc\x19s\xdc\xbd\xd0\xe0\xb5\xa0S\xf9\x90\x08\x1f\xd2\x0b\x16bY\x8f\xa7\xc2n\xe6\xd2\xae\xb1_\x11\x80\n\xab\x8dW\xb6\xca\xa7O\xca\x8e\xe2x[\x8d$sS\x07\x8e\xbf5\xae\xb8\x1a\xee\xe2\x95}\xc1\x9c\xa0c\x1e\xc1 \xe2\x11\x0c\xba\xa5\xdc\x8fl\xf4\x94\xd9b) qe(e;\xc9\x7f%,T#\x0bDa\xc6\x9b\xb8n\xfc\xdfm<~N\xc2\xd8\xf8_a\xe0\xa1\x170\x04>\xa9\x88OJ\x84\xee(&\x95=v\xc4\x9a\xe0f\xcb\xc4\xacB\x8e\xc1\xef\xc5jElJ\xbf\x8cI\xcd>\x8c\xca\xb3*\xea=\xc3\xa5\xf5l\xfb]]\x14,\xc4P\xba\x9ddB_\x0d\x99n1\x96\xb4\x88\x0f\"\xe5(\xaeDN\x17W^+\x9d\xcfX\xaf\xe43\xd6\x93\xbc:\xdd\xca\x14\x89\x94\xd3\x01\xc9\x19\xa9\xac4\xca=\x04\x9b\xf4E)K\xc4\xffOr\xd3\x87\x98\xb4\xe8/.\x15Q`\x04_a\xc4\xa1\xbd]\x07\xff:\xc6\xff\xff\x8d\xbe\xdb\xe7\xaf\xfe\x8c\x15z\x0f\xd9_\xdf\xf1\xf4\x97[\xa1\xfd\xf0!\x02\xd5\xa3\xb3\xb7t\xe2\x82\xe5\xd2\x8f\x91\xbcL\xbb\xf5\x17\xcd|\xbc\x1f\xecEIuE\xc7\x9b\xd9\x19&B\xca0\x11R\xc6T:\xcfTh3\x84\x1dJ\\\x8bl\x17\x90o\xe6\xbfRaa\xe1%/9\xfa\xbb~r\x14\x85\x13/=]\xc5\xc4\x9b\xa2\x90#\xf8/\x17\xcd\xce]n\n\xe623_\x97\x87rt\xd1x\xc8\x95\xe4(W\xac\xcb;o\xee\xca\x99\xfd\xb9\x9d\x91\xe5Z\xf4\x18H\x19\x85\xf8k\xb1E\xd2\xf4\xb1\x03\x0b\xfb\xaf\xe34-'\xbd-HP\x8a\xd9J\x16\xdd$\x8dbB\xa95o\x85\xa4E3!mfm\x93t\x1c*\xedP\x08\x9e\x96`\xc7\xf7w5\xa0Q\x14\xb7d\x15}\xfb9=\xd3:#4^<\x80\xe7tO\x0d\xd9?\xa3j\xea]\x85\xfc^\x92\xeb\x17\xcd]\xa19\xe7\xd7h\xceY\x9b\xd3\xc1\x03\xc6\x01W(\x13\x94\xc3\xed\xf8!<\xd7\xdb\xd3\xd1\x9e\x9e#\x177\x92\xe3\xbb\xd72\xf1YBNI\x9a\x92\xb8AJ\xfb^\x17I\xb2\xd2\x92\xbf\\\x05M\xf6\x05\xdf\x97\xb3\xd7\x01\x94\xf5\xba\xaen\xa1\x0d:O\xa6\x9ao\x91\xca\xaej\xe2F\x99\xf0S\x1b\x93\x96\xfd\xc1>e\x9cN\xedb\xab\xfa\xd5\xafj\x8a}\x92\x0c\xe1\x0f\xe5\ns\x92\xbe\xb9\n\xc5\xf7\xcfI2\x89\xfdUJ\xd1\xe7/u\x15_{K\xda\xd8\xdf\xea\xea\xb0m\x90\x0c\xe1\xbb\x12\x1cQ\xc1R\x06\xa6\xbd\x85\x07l\x8d\x88/\x8e\xc1wjxL!\xa6\x8d\xc3,\x08\xce0\xfe\xcd[[p\x9d\xd6\xdfo\xf8\x9b*\xec\xbd\x8a\x11\x8f\xf2 [\\\x85b:.X\x7f9}\xf3Z\xe3@\xce\xf5EM\xfb\xae\xc4\xfap\x86-=\xe3Y\xe4\x1f\xebb7P\x81\x82sd\xc5a\xef\xebSx\xf3<\xaf\x9c\x1d\xea\x9f\xb9`\x9f\xdb\x95\x94?\x9c\xc1\xffZ6\xe6\x9e\xf3j6i\xc3\x8c\x8b\xbe\xb4\xba!\x16\x1a\x08\xf9\xcc\x8au\xa6\xe3\xd2~\x89c \x03\xc0\x91\x84\x8e\x9dN\xc3\x85\xb7\xdc`\xe9\xa8\xaaz(\xa1\x95\xa4B\x18\xbfFV<\xb4\x07\xfb\x8e\xacZp\xe1u\xa9\x1eK\xc2\xf2f\x86\xd9\xe4\xde\x15\x84\x1b\xff~\xe5\xa5\x0b\x17,\xfa\x0f\xb7S\x81\xc0\xe6J\xc3\x1c\x07\xb6z\xad4\xff\xd2\x0d\xd6\x9ec[K\x92z\xba\xd0\xbb\x1a\xe5m\xa4\xd7\x9a\x8b`\xa4\x8e\xaa\xf3\xf4\xaav\xebI\xa1\xe4\xf3\x93\xe3\x8f) \x13\x9f\xca&\x9f>\xd5\x13D!\xf8\xd4R\xd7 \xa5\x9a\xa8]o\xa5\x9eK\xec\\\xddH\xd6$L\xf9p\xa20\xb1\xa9\xc0\xaf\xec\xc7rW\xf5<\x0e\xe0Q\x9c\xa2\xf7\x91I\xdaC\xb5\x9c\xbe\x90>\xfe\x10\xac7\x16t\xa0\xd3\xf1\xaa\xbc\xa4x\xae\x86j\xb0Z\xf1\xe8\xb4wu\xb0\x0b\x94\x1cR\xd5\x91}}\xfc\xbd68\xf9\xeb\xe3\xe3\xe7C\xd8\xeaWKf^\x92~M\xae[\x9c=\xa0u\xe9\xd0\xa9\xbb\xb85$s$e\x86Fr\x99u\x8a\xde\x14o\xd1\xcd\xc2\x90C\x81e\x01\xc0\xe51J\xe3y\xbd\xa44\xa0\x17\x06{\xac\xbcz\xe1\xb9b\x1d\xd7\xd4\x9d\xa9\\\x93x\xf4\x8b)x\xfcq|\xd6\xad\xe6\xce\xd7\x84p\x9b\x93\xf4[\xe2]n\x02\xf9[\x01dK\x1f\xe3\xa5\xa8M\x8c\x11\xab\xe5\xe73\xc0q\xd5\x06\x1cQ\xf8\"&\xe4\x97\xc6d\x82P4>\xa1\xc7F\xd0\xa5\xc8\x8d\xe6\x146?\xa68\x98\xe8\xef\x19rD\xed\x0c\xab[\xd3\xe4\xca\xbd\x93\x08\x19\xa4'\xc6\xfb\xa6\xe4G\xe6\x89\n\x05]\xac\xcd\xd4\x16\xb2\xc0\xba\xe5\xb5\xc2\x83\xbc\xbaB9\xf7\x90\xb9\xfc2\x94\x02\x84\xf6\x1eug,\xa1J\xef1x\x05\xf30y\xec@\x92g.\xa7\xe7\x867\x9e\xa0\x96\x04\xe5{\xe4*2=O%\x19\x89l\x06\xd0\x87\xfb\x06\x08\xb1\x08\xef~\xc2RY\xc9\x07\x90If\xb5\xb0*\x92\x9c\xd8\xbe}\xa6\xab\xca\xed'_\xe2\xbd\xea \x1a\xb1\x1b:!oV\xcf]+b\\\xbfD\x06\xaf\xfcp\x1a]Q\x88\x16\xbf\ns\x17\x95m\x86\x83\x9aB\x9b\xb5@\x05\x80\xb1\xce+\xa0\x9d\xa8\x8f\x81v\xad1\x1b)|\x8bM\x9e\xe1\x88\xf3Di\x8d\x17 \xe6\xbc7\xb9\x94\xaa!!\xcd\xf9\xe3\xc5\x10\xb9kQ\xa3\xbd\x92\xcdS8\x97\xedn\xf4\x08\xe0\xc0\xdf\x1b-\"\xfa\xbd\x07\x8emy\xc9u8y\xb9\x91\xfd\x86\xf8\x94%GA\x1dL\xab\xef\xda\xd9}<\xba[\xbb\x8f\x9d^\xaf\xc6\x08+\xf9\x0c#\xac\xaa1\x90Y\x12.\xf73\xc4q\xf51\xa7U1\x9fV0\x94\xb6\xb2J\x95}\xbd5D\xd4F\x8c\xa1T\xd6G\x12\xba\x15S\xf9\xe7\xde=4\xa3+\x07v.\x14#\x84eCe\x11\xd9\x12\x92\x82\x97@.Ml\xa9\xe1\x18\xf44\xb0\x02\xa0!h\x17\x05e1+w\xe6\xb0\xc0\x0f\xe1\xef7\xd5\xbb_m\xca\x1b\xf3\xde\xb5\xf9\"R\xd1\xe8\x05o I\x82\xcb\x0d6\xba3\xbbb\x12\x00\xd28XF2\x188\x0e\x1d\xc0\xf8\x8c\xdf\xc5(Yf\x91l\xdf\x86:\x10}f\x8a*W\xc2\xc9\x88\x0c\x0d\xa3V[(\x95Y%\x96\x0f5\x95\x1ceF\x10\xc2\x90\xe5\xc0 \xdb\xf0\x17h]\xb0\xd5wL\xfa\xf6\xc9\x82L.\x87\xd2uB\xabM\xdb\x8aN\xecT\"\xe2}.\x9d\xd8\xfdlKD\xc3!\x14s\x1bUVg\xb3\x81\xdd\x8e\xdc\x08\xc5\x1bZ*\x15\x1d\xb6\xa20M\xf6l\xbb\x06\xdb\xd3==\x97\xb8S\xb1\xf2b2\xfbN_\xb5\xf2bl\xdc\x8e\xfa:\xe1\xd5u\xe9\x89\xe9{\xb5\xf9\x19\x7f\xaf\x0e'\xe0\xcd\xab8\xba\xc2Li%+\xe2r\x85\x85T\xe1\x857I\xa3X\xb1\x85\x9a\xb2\nA\x14\xea\x1bXW\xe3@\\7\xca\xf0mn\xc4\xe7Za\x19\x8d\x87b\x12\x9aD\xfc\xa5\xb7\x1aB\xd4]z+\xbdp?\x8b\xe2co\xb2\xa0u\xf8O}\xbdI\x94\x85):\x1e\xd3\x1f\xfa:i\x84\x04\x90\xd6\xe2?\xf5\xf5\xa20\xb8\x1e\x82&\xe7Y\xb5zn\x9c=\x04\xbf[\xe3\xd3\xf66\x8bI\xa9n\xe9E\xb5~ \x03\x86\xa0\x01\x8e\xbc\xc2C\x98V+\xf8 \xfau\xe5U\xbcn\xf9\x8df\x90q\xb4\xa2\xc7j2\x04\x8d\xf7\x1c\x1b\xd2Q\xe0%\xc9\x10f\xa6r\x8e\x93C\xd0\xac\x13\xab\xf1\xca\xff\xe8\x87C\xd0\xc0\xfe\xf9\x9bWC\xc8\xaa\xef\xd7$N\xfc(\x1c\xc2\xa4Zv~\x9e\xe05\xd6\x10\xd6e\xe4\xd4S\xc8V\xa99\xea\x89\x8e\xacQ3\xf4\x12\x7f~/\x94V\xe9y\xaa\nM\xe2\x02\xb0\x81\xb2\xf5T\x0e\x96\xa5\x13M\xaf\xa2C\xae\xb6~\x1bE\x81\x9a\x8e\x14g\xd1\x9dEY\\W\x8bR\xbd\xfb?\xdc\xef\xdc\x9f\xeb\\{gFA\xc8\xb6,\xe8@\xea\x94\x82\xbd\xff\xe1\xde}K>\x8f\xaa\x0d\x06\xdas\x0d/|i\x1df\x85\x86\x7fN\xa20e\xb9\xb9H\xfe&c7\x88\xb5=\xact\x0b\x05\xd2\xb2\xa4\xd8\x93f\xb3a\x19\xefV\x91\xdb\x99l\xe7c\xc3)\x1b\x88\x9c?]7\x8e\x85\x18\x87\x86\x93\xc4\xe9\xc4$a\xde\x1fb\xc6\x97\xe4\xfamLf\xfeGi\xce\x1c(a\x05(\xf1F@\x996\x03\x85\x0d\xa7\n\x96\x0cK\xf3\xb1U+x50Md\x98j\xa8 ;\xe8(l\x13\x05\xb6\xe5\x05(\xe97\xec \x95\xb1\xd7\x14\xe3b\x84o\xd4M\x17^z\x82\x88\x99\x08d\x17\x8e\x9c\xb05b\n0\xdbW\xa8'm\x87\xbe\x9f\xa0\x9a\x08\x89\xf1a8=a\xf8\xfc5\xb9\xa6\x1dd\xd0\x01{kB\xe7\xcf,yP\xb9C\xff\xc2\xe4\xf2\xf8\xeb\x00,\x0b\x860\xb3\xf1O\x87\x8a2\xf7Qg\x1b\xa2\xe1\x10S\x05M\x9cztYK\xe8\xe2V#g\xacy\xd4\x0c\xd5\x89V\xcc\x90\xdd\x0c\xa1hf\x87b\x08U\x83\x17\xbaV\xe8\x9a\x8b\xa4`j\x13\x8c\x8c\x81\x1d\x96+\xa3\xc6\x7f\xea\x82\xe7\xb8\xb0\xe8\xc6$ ^Bl\xaf~\x0e\xd7&,\xe34\x83\x0eVj@\xfc\n\xa4\x8b\xa3)\x11\x06;u\xf6@\xa5\xad\x81\xee[\xca\xee(\xbd\xacl\x10\xba(\xdetJa\xe0\x87\xf3w\x91\x1d\x88\x89\xdej \xf9F\x96z\x95\xf7\xb2\xf4\xfa\x0e\xc7\xbcp!Q\x04\x8c*\xfb\x96\xb3^u\xa7\x98xP3J\xf1\xa9dM\xa0\xb9x\x10D#(c\x92.\xc9:\xe2\xd1\nS\x17@\x90\xe3\x91z\xdfX\xa6\x0c\xc8O~\x91\x01\xeb\"p S\x01\x9b]q\xb1U\x10\xa6\xda\x0d\xc3|\x19\xa6\xd1\xb7~\xba\xf8Z\xac\xf6\xcb0%q\xe8\x05CX+\xc7,\xe3m\x1b\xf5&B\x87G+\\s\xd7\xc3\xbaA\xe4\xfcp=\xf3/\xf4\xe4M\x00 \x02\x00z\x92Z1\x10/\xf0\xf3\x8b\xf1j\xa1\xbd\xaf\xd31\xdb\xa1M%\xaf\x86y\x0b\xc3\xc1\xae\xd0\xa0Pl\xad (\x07\x12\xac\xaa\xdf\xad\xa2\x95)\xf3\xb5\xc0=\xdc\xbd<\x12|\x15^P\xa7p \xc9\x15~_1B\xaa\xd5\xbfi\x95T\xb2\xc2\x08\x0d\x0f?}\x82\xd8\xb6\x06{h\xcb%\xd16\xdbq5\xf3\xe4w\x1cOx8\x90(\nN\xfd_\x880>V`B\x0f\xb7z\xb3\xa9\x0c\x934\x97^yZAS\xa6o-\xf6\nH\x96\xc6\x86\xebQ\x01\xda\xd2\x98\xb9\xd1kXP/\xb4\xeb\xf8\xf4 2\xfa6\x9f/3:\xce\xff\x1c\xb1\x8cp\xa1\xa0b0\xa2g\xa7\xc6\x02\xb9\xca\xe7P\xce\xa2\xc4\x83\x0fU\x80\xd0\xa7\xc2\xcf\xb7\x84\xc1m\x90\x1cd\xd8m\x82\xe8\xa0Cv\x11\xa8P\x07\x0e\xd0\xe2<\xe8\xf0\xbeb\x92\x05zp\xa6\x8b\x98T\x00\xda\xe6\xc0\x80\xcf\x84V|'\xd0\x8a\x19\xb4tG\x8cx\xda\x03\xac\xe2\xa5\x01z\x98U\xe5\xc0*\xc8\x0c:o\xf8L\xa8\xf9w\x025?\x87\x1a\xe3&\xaa\xb6\x03\xb0)\xe0*\x86O\xd5\x16\x0c\xe7\xdag\xc4\x0fk>\xd7\xfa\x05\x1f\x15?f${\x1f^\xd7\n\xb3\xe5\x05\x89\xe57\x05Ty\x17\xa4\xfb\x87?\xf0\x91\xd1wE\xfe\xf4\x99\xcd8V\xcb\xca\x93\x87y\xd0\x81 \x9dp\x0f\xc5`\xc7\x05\x8d\xc5\n\x9dqM8\xd65\x8a\x9bR\x93CLd\x93\xe8\xa1R\x96\xd0\x89\xc6\x1f\x01d+\x8bkfOq\x0dO\xf2$<\x8f\xe1\xba\xd3q`\n\x9d\x11\xa4\xf6\x8a\x9e\xc9\xe3\xeb3\x17\xd68\x97\x95\x0b\xd7\x0e_\xbd\xea\x0808\xa6\x99C\x98\xb3,\xa5\x06rC\x87?o\"bK\x17\xdd\xc0\xe7\x9c\xbb\xab\xa1\\\xd8\x1c\xbb\xe8\xec\x920\x8d}\x92\xe8\x81!\x9e\x1c(\x17\x0c([\xf6\x12Fp\x8e\xa9\xe9m\xc7\xe9N\xa3\x90<.\x01f\xc9\x0c,%\xd8\\t:f\xe8\x88\x87B\xa9y$\xc6\x01\x98\x01$\x1e:\x89\xabb|\xe6\x91\x88\x07\x0d:lifWhZ\xbbF\x03fN.\xae\xc6\xbd3\x87\"\x9e\x98kO\xcc\xb4\x1e\xac\x06[B\x86+\xb8\x91K[\xac \x01>\x1a\x92\x91\xc9\xcfi\x11+\xba\x0eCb\xdb\xda\xe9[naG\xc2n\xdd\xce\xd8HN\xe1@\xec~\xb8\xf2\xd3\x05\\\x92\xeb\x04\xfenAG\xdcg\xd3\x176qx\x9a[\x17P\xd9d\xddX0\x84S\x17>\xb65?3J\"\xd3R\xc1\x0d\xa5\xb8\x96\xa5\xf2\x1a\xadn\x1b\xeb\x8f@\xad\x8d3\xf7\xe1\xbaw\x8f\xff\xca\x1d\x8b\xabg\xa5\xf5/\xff\x92\x07\n\xd1\x9f\xd3f9)\x97\xf2\x80\xc5\xcdEg\xc3\x18\xcd\x9b\xd3\xb1\xafZ\x80\x1b-\xb2\x89\xc6\xdc\xfa\x0e S\x1e+\xdb\x08me|=\x1a[#k\x08\xd6\xa8g\xc0`k\x88\xc5\x83j\xb8\xa7\x1b\xa3\xc6\xc0\xfa\x03\xc5\xc9\xcaE\xc0\xfd\xf1hxv\x7f\xde$\x9aK\x0d\x91qzV\xed\xb7^\xa6\x0c\xef\x06(=\x9c\xb6 (\xa3\x01-\x1en\x02\x14\x06\x0e\xdb\xea\xb2\xcd\x9c\x8e{\xe8\xe8Ma\xc5\xfe\xee\x9f\xa1\x8dD\x92]0.\xc0\x1e\xd0#Z~\xd1w\x1c \x9a\xf6\xa8\xf7i4p\xee\x1e\xa0\x05\xbe\xea\xf7\xce\xdd\xdc\x80\x0d\x9c\xba\x9bn_\xaf\x07\x18R\x12Y\xb1\xe4\xc7\xa2\x8b\x8b\x98\x95^\\h\x83~z\xd3iL\x92\x84\xd5a\xbf\xb5\xd5b\xc2{\x89\x89\xbe\xa38\xf5'\x01\xe1u\xf0\xb7\xb6Z\xe2Oy%\xfaK[%\x9b\xfa\x11\xabB\x7f\xe9\xaa\\`\xf1\x85\xb6\xc8KX\xfb\xf4\x87\xb6\xc2\xd4g\xe5S__\x1c\xf1b}\xcf\xfe\x9c\x15\xfbsmq\x10M.\x7f\xce\xa2\x94\x8f!\xffS[9\x9a^\xb3j\xd1\xb4\x12P\x05+\xb0\xa5\xd3/\xdcE\x96\xa6Q\xc8*\xe0O]\xa5\x89\x17\xae=\xb6\xb8\xec\xa7\xbe\xd2*\xf5yS\xfc\xb7\xb6\x9a\xcfgE\x7fh+D|i\xe9\x0f}\x85\x80\x97kc\xc6N\xa2`\x1eG\xd9J\xd4\xc1?t\x15\xa7^\xca\x90\x91\xfe0U\x08\xfc$\xcd+\xd1?\xb4\x15\xa7\xac\xcaT[H\xd8p\xa7D;\xdc)I=?Hx\x15\xfc\xad\xad6c\x90\x9d\xce\xb4P\x9d\xfa^\x101\x9cb?\xf5\x95\xd6\xbc\xc6Z[\xcc\xc7\xa9\x1f&\x87\x82v\xfed\x89\x85d\xa9/\xbc S^~A\xb4 \x9a\xf9$\x98\xa2\xe9`l[\xe2\x0f}\xc5\xb9\x8cf\xc5\x9f\x86\xcaYLD\xc5,\xd6\"\xd3,\x8a\xd0+\x93V\xc2\x9f\xfaJ\xf1\x92W\x89\xb5s\\\xf4\xb1x\xd1\xd7\x16\x0eX\xe1@[\xb8\xc3\nw\xb4\x85\xbb\xacpW[\xb8\xc7\n\xf7\xb4\x85\xfb\xacp_[\x88V\x1f\xb4\x98x\xda\xf5\xa0\xef9P\xd8Om\xa5b\x97-\x8c{l\xc1[\xd1\xb7\x90.\x19\xca\xd1\x1f\xba\n\x8c\xc4j \xac?\x8b1\\&-\xc7\x9f\xdaJK\xb6%\xfc\xa5v?\xf8\xe1*c8\x87\xbf\xf4U\x12^A\xbb+//\x18 //\xb4p\xbc$\xd7s\xc2P\x95\xfd\xd4U\n\xbc\x0bN!\xf0\x97\xb6\n\x99\x93\x90\xf5\xc4~j+1h\x05Zp\x05~x\xc9\x8b\xc3K]\x85\xa5\xe7\xb3\x81\xd2\x1f\xfa\n+^\xae]\xe8\xa5\x17_\xf2\xf2X\xdf\x01 3V\x81\x84\x99\xa9\x82\x9frR\"\xfe\xd0W\xe4t[\xe7w\xc8+p\xec\xc5_\xba*\xa1\xc7Ha\xe8iIa\x181\xbfaV\x87\xff\xa1\xab\xc8\x04F\xac\xc6\xc5Z]%\xb6\xbc\xfa\xe3*Z\xa5\xc5F\x12\x7f\x18*\n\xba\x17\x19i^\x94\xa5\x02\xa7\xd9O]%\xd6\x97\xb6\x93\x95\x17{l\x05\xf0\x97\xb6\x8a?I\x05]\xe5\xbf\xb5\xd5D\x15Sq4\xcf9F\xf1\x87\xae\xe2\xcfX\xe3g]Q\xcc&\x12kg\x123(\xc4Z\x08\xc4\xd9\x05\xe3\x99\xe8\x0f]\x056.\xed\x80\x12o\xc9\xfa\xa5?\xb4\x15\n\xd41#NB&\xf9r\xf2\xdf\xfaj\x81\xc0/\xf6S[i\xe9\x05\x0c\xc5X\nN]\x15L\xa3\xc4\xea\xe0Om\xa5\x95\xc7\x07\xb4\xf2\xf4\xa3I\xe3(d$\x95\xfd\xd4W\xba\xe6\x0c<\xfe\xd2V\xc9\x18\xeb\x9ddZ\xe6;\xc9\x96K/\xbe\xe6U\xf0\xb7\xbe\x1a_\x07\xfd~IY\x1c\x95\xd8\xb6R\xe6\xdb\xa2\xa9\x92\xf3\xce\xa9\x89yN\x19\xd9M\xb5$7%\x1f\xd3\\\xa4\x11\x7fh+R\xde\x82\xd5\xa2\xbf\xb4U\x16\xac\\\x9br=\xcd\x8f\xec\xd4tf\xa7>?\x0e\xe9\x0f}\x85T\xc0\x03#L\xeb\xaa0\xaa\x99jIf\x1a{\x93K^\xeeM\xb44\x9e\x11x-u\xcf\x18\x82fZ\xec\\{\xac\xe3\xb5\xa7\xedy\xedO \x13\xa7\xf0\x97\xae\xca\x15\x17r\xae\xf4R\xce\xc4\x8f\x85T\xc9~j+\x05\xfe\xea\xad\xc7\xd7A\xfc\xa1\xab8%3\xc1\xaf\xcf\xb4$\x82\x04\x81\xbf\xe2\x02$\xff\xad\xab\xc6v\x92\x9e5Yzs\xce\xdd,1\x93C\xb5J\xe0\x87\xac\x06\xfda\xaa\xe0\xc5_\xc5\xde\xd4G3f^\xb5x\xa5\xfbh\xe9%\xe2\x1cO\xb4k\xbc\x12\x10Z\x19\xa0\xb3\xf2\xd2\x94\xc4\xa1\xa8C\x7fk\xabE\xc1\xf5\x9c\x13@\xfe\xdbT-\x9f\xa9\xf8CW\x91\xce\xc9\x0bJ\xb3-\xbf\xd2~$\x88kl\"\xadi\xc4\x89L\x1a\xe9\x89\xfd\x9a\xd3\xc3\xb5v\x1d)Q\xc8\xa9\x83\xb6BNtSFuK5\x0c:\"v {\x07:\xa2:\xbbvn3\xdd7\xb9\x07\xfb\xc2\x9e\xecs\xc7\xd1\xdf\xdb\xd8\x01Yx\xe4\xd0\xfe\xe4`\x8cw\xa0\x03\xd6\xd8\x83s\x8f<\xf5\xf6\x97[\x8f\xebcYT\xdckx\xa8\xe7}5V\xb0\xf0\x8b1\xf9\x18\xd7\xda\xa2\x08[\x92\xcfQ\xe9\x03\xb7\x08\xd6\xab\xf5E/3Z\xe3\xc9\x13/\x8c\xc2\xebe\x94%O\x9fj\xb4\xb7\x81Q\xe5\xeb1s\xb9\xb5m\xe1/\xddN\x00\xd4eQ^ym\xe7\xf7\xba\x86zt\xbaX/\x9f\xb7\xa1\"\xbb\xe0\xc5\xaa\xfc\xae\xd7PQ0\xf2\xeb:F\x1e\xf2\xc08X\x91\xdf'\x9b*\xf2 ck\x11\xcf\xd8T\xd1\x0b\xaf\x870\xb5c\xd9\xf6\xef5^`\x9bA\xf9f\xd6\xa4\x82\x17\x8f\xb8\\*\xe2\x99\x14\xe6\xce.DM\xf7\x8b\xca\x15\xccVal\xe0\xc8\xf6\x1d\x0b\xdb\x12n\xdf\xf0\xa3\x05\x1d\x88\xa0\x03\xd6\x8f\x10\xcd\x8a\x94s\xac f\x05\x0b/\x01?\\S\xea\x93{\xcf@\x18\xa5\x98\xc0\x82\x8a\xdd\xfe\x94\x88\xa9vM\xe9C\xc5C\x11\x14\x13I\x8dCC\xb2W\xf1`D\x89\xf2\xa5yV\x1b\xb0B<\xb4\x0b4\xad\xacD\x17\xd0=e\xc8\xbc\xe4\xf3\xa4\xd3\xf71\x16\x99\x02\"\x0c \x8d\xef\x12\xf6.\xc9V\xab\xc0gi>$\xa8\xb9@>\xae\xc8$%S\xf0B\x06\x9d\xaeu\x9b\xebX\xf1\xe4w\xe0<\xd0\xc2\x04\x9e@\x96\x1b\x06L:\x9d\xb6\xa0\x99aj\xc9\x0c\x93\xe2r\xcc\xa2#\x1e\xd3\xb1O\xe8\xaf3\xcb\x05\xaf\x05\xe4\xe8\x02\xcddCJ\xf4T.\x8c.>c\xb2:sx\xf5\xb91\xdc\xe2\xea\xb7\"\x11\x1eb\xf9\xde\xfa\x82;qC$O7@l\xef\xcb#\xb6\xd7\x1a\xb1!\xf1\xc3y@\xe0\x84x\x93\x94s&\x9f\x87\xe5\x9f\xb3\xf0\xa6\xack\x02C\x7fWB\xbce\xd3\xc5/\x99\x19\xb7^c\xe6P\x14zK\x16)K?+\xf5\xf1\x1a\x8d\x9eM\x0f\xc3\xc1\xae\x14\n\x16\xe3\x0d\x97\xde\xe0h\x8a\xad\xdd\x8c}\xe2\x11vp\x95\xc6Z\xb5pc\x1b\xa2W\xab\xcf\x97Gv\xb1\x92\xf4s\xac\x91a\x8d\x7f\x1c\xba\x1b\xb8(\xbc\x92\xbb%\x91\xabu\xb0R\x1fD\x9bk;\x1d\x933Ge0\xe4\x05\x88\x8b\x05\xf0\x0d\xc0\x0e\xab\x94\x05I\xca\xebhJ\x1a9\x8a\xcf\x81\xa1\x89d0\xbe\xf2w%\x18\xff0\xceM\xcc\xb5\x11\xd0\xf2\xa9\xd6L\x93\xdaq`%+\xb3\xad\xd1\x08\x92:T\xbaC\x8e\x8c\xf5\xd98g\x89\xeb\xf2C\xc8\xea\xf7:\xf0 e\xdd\x85\x97H\xd1\x95\xecI+\xd2\x0f\xf5\x0cZ\x17\x19\xb4v\xac\x19|.{\x06\xff\x00\xd2\x15\x85\x1b\x1c\xd1\x1a\xe9@\x8aTW\x11\xd0jL\x0d?o\xeb\x16Q\xd1\xc4\xce`\x810\x1f\x83\x07O \xcd\x19tO\xf6\x866=tR+\xba\xf2\xe9\xd8\x93\x89j\xed\x04@\x12y\xfer\xfa\xe6u\x91?H\x9bYB~6\xdcih\xb2*\x1f~-\xb6Z\x14\xe2\x89\x99o\xcf\xba\xf3\xf2\x16\xe8B)\xda\xef\x8e2R\xe8i\x16\xad\xbb\xb4\xd2\xa4Y\x14\x13\xba\xa0T\x9b\xa9_~\x8c'C\x98\x0f<\xb2\xb7\xfa.\xe4\xab'\xe2\xf4\x96\xd6&\x87U\x17\x8eU\xb1\x14\x8f\x8f\x05\x99\\\xe6`L\\\xb8\xc8R\x88\xc9\x84\xf8k2\x85?&\xe0\xa5\xe0\x87S\xf2\x11\xfe\x98t-\x17\xce1\x99\x0bA\xe7m\x05l\xe6\xd5\xfd]\xb6`\xef1d\xa5\xe5\xc8\x9a\x97\x03\xa4\x1d\x94\x8e\xb3\x86%\x01(\xfb\xd5&\xe5\xd1R\x02\xed\xb4\xa2\x8e\xd0\x9a\xc6\xb6\xd9\x9f\x86\xadxw\xfb-Y\xb4\xb0&\x15\xcfg.\xe9\x7f=\xac\xc6\x8f\xac\xc7\x1f7\xe44Z p9\xb30\x9e\xb4\xc4\xd9Y\x9bf\x817\x1d`\xac\x84;\xe1C\x82\x1c\xd4\xf5\xdb\x01\x1a\xb7D\xbb\x0dswL \xf9\xe8M\xd2\xdf\x11\xeb\x93\xd6X?A\xacO6\xc5\xfa\xc9g`\xfd\xe4\xce\xb1^\xa0p\x86q\xed\x18\xff\xd4\xc4\xb5\xe4;%\xa0;\xa5\x15J\xd3\xda+\xdc)A\xcb\x9d\xb2\xb5\xda\x0cN\x97\x84\xcbdA=9\xfe!|\xe6M\xf3+\x0cZ\xa0\xf0l\x0c\x06,\xc6\x80\x05\xdcs\xe5\x87\x10/\xff\xd0\xd1E\xfb\x95\xec\xf7\x92:\xa5\xef[l\xd35\xf7s[\xd9\x89\x0bAu\xb7\x07\xedv;\x85\xdb4\x07\xdb\xf4\x1f\xb4\x8f+oo$\xafM\xa8\x06B\xd2\xe1\x8f\xd0Z\xe5\x891x\xf2\x02\xf8\xf4 \xfap\x1f\x0b\xf0\x07\x81!f\x00c^2\x84\xfeR\x03@\xe8\xfb^\x18\x02\x13,\xfc\xa4\xbb$I\xe2\xcd\x89\x14\xf8(I\xbd\xc9%\xbaW\xb5j|j\xc8\xff \xcaC\x9b\x11\xa5\xc8\x85\xcc\x85\x04)\xbc\xd6\xe5\x93>6=\x883\xa6\x89D\xa23\xc1\xa4V.\xb0X\xa5\x9e\xc3S.`b&dE\x8f\xbc \xf0\xc3y\x11j\x0dp\xe7xi\x14'0\xf5c2I\x83k\x91\xe4\x85n\x94(\xa6D\xe3\xe2\x1a\xd2\x05\x81\x1fWq\xb4\xda\xa6D'\xf9\x11V\xde\xe4\xd2\x9b\x93.\xbcO\x08\xfc\x987\xd8E\x865\xff\xd3v~\xa4\xfbl\xe2\x05\x01mb\xd9\x85\x13\xe2Ma\x19\xc5\x84r\xae\x8b4]\x0d\xef\xdf\x9f]t\x97\xe4~\x96\x90m\xfcz\xbb\xe8\xc7\xb8I$<\xc48\xd0\xe3\xe8\x0c\x0e\xd0\xd93\xf7W\x15\xef\x18\x91x\xb7 \x85\xacS\"\x9a~\x82\x86\x97\x94\xf1N &?g~\x8cZEY\x9eb|\xb7\x9f&\\\xd4\xf2\x13\xf8\x91vD\xe9(\x0c\xbf\\\x1f\xb9\xbf\xae\xe8\x88Nn\x08\xa9]\xc2\x91&Op\x90\xaf\xe6\xbb\x17~8\xb5\x19\x19\xda\xeak\xc0\x9b\x8b]~r\"F\xaa~\xd7\xabF\x981`\xfc\xba6\xa4\xa3\xe9@v!3a\xbd\xb8k1_\xe1\xf0\xb6\xe7\xb6\xe7p\xe2p\xd0\xee\xa8(\x1d\xa9K\xfay\xdbS\x95\xbeM\x05[\xcf\xd7\xa9\xba(\xaa\x17\x93\x1eb\xd7\xb6\x96\xf2%W>\x8b\x92\x9b{\xef\xe9\xe13\xf1\x12\x92;e\x0fk\xaa\xf0\x9b\xf7\xba*\x85\xbb\xb8\xbe\x16\x14\xd06\xa5 `\x0d S\x84\xe6f\x0c\x9e\xb7\xac\x19\xce.\x99[\xd1\xbas\x8b\xb6I\x97\xacI|m_7x@\x97=\xdeS\xb9\x89\xbaD\x0bk5Bc\xa3\xa8\xb0.9r\x86\xcc\x913\xe4\x8e\x9c\x93\xa6\xdb\x95\x8d\x1c;\xd5\xe7\xa6\xd1\x0f|+n\x953\x82\xce\xc1\x17)O[9\x98\xc7\x8a\x83y\x1b%\xc2c\xd8\xb2}LhPv\xec\xae\xfd\x12\x8a\xbb\x10\x9fyuK\x0b\xd97\x83f\x03gs\xdd\x98Zr\xbd\x18Z\xa8\xad\xb39*\xaf1\xf1\xc5\xb5\x9d\x8d\xfbg\xad&\x02mt;&\x8c\x16\xe1\xa5\x1b\xbf\xaf\xf6\x7f\xd3\x8a\xcc\xcd\xeb\xbd^\xc5=\x8b\xf1|R\xf5\x85p\x00\xdc.\n9?I\xbd~B\xe6\xc7\x1fW\x85k\xba\x05-\xa3\x13\xf1\x9e\xa4\xfc7\x9c\xd3\x14I\xa1\x18\x95\x18[\xff\xf2/R*B\x0b7p\x835\x19\x91\x07\xc8^W\xe1\xc8\"q\xd1\x81\x8b\x11T2W\x1a\x80\xbb4\xc7\x14\x93\x12\xcb\xe1\\rjW\\i1\xb7\xe8*\xe4\xc5\xda\xcc\xb5\xfa\xebJ\\\x82\xfa\xa8O2\x00\x9e{\xa9\x94\xb1g\xea\xa5\xc4\x90\xb4\xa7\xf2%[\xdb\xe2\xdb\x98\xcc\xc9\xc7\x95\xc6\xeb\xd9\x84F\xed\xe0y^\x8f\xac\xfaT\xd1\xe2\xc4n8\xaa\x19\xd2\xd6\x1d\xc3\x8d\xc7\x9e\x98\xbd\x17\"gS{\x86\xd6\x1f\xc5\xac\x0e\xae@]\x05\x0e\xe6\x16#\xaa\x1bP[\x1a\xd3\x14\x89\xae\xfc\x17\xffH\x8a\x88 #v\xc5&g/\x08\x14I\x05F\x94\x95\x0e\xba\xf2\x8b\xc0\x055\xe8\xe7\xad\xccb\xebb\x01\xe5W\xfaw\xd4\xbe\xd5\xdf\xeb\xeewy0\x84[\xb5\xb6.\xc2\xec\xef=tLa\xc5\xfdV\xf6\xcf>\x7fu\xf8\xfa{C\xbc\x87$\xf5R\x7f\xd2\xae\xee\xaa\x08\xb4\xde\xa26\x8f\xf2\xba\xc1\x07\x0b?\x98\x1em\xfa\xd5\x9c\xa4\xcf\x199\xa0;P\xf9\xe6\xfc\xd5\xf1\xc9W\xc7\xcf\xcd\x9f\xbe\x0c\xfd\xd4\xf7\x82\xd3\x14S=l\xf4\xe9\x914\xdcM>\x8dI\x88\xfe\xbd\xe2\x8b7\xaf\x8f\x8e\x8d \xe4[\xe8[?\x08^\xb1p\xaa-@\x92\x7f\xf6\xdc\x9f\xde\xe2+\xda\xd9 \xbb)\xd4\x80\xd4\x84G\x8b(\xa3\xe0\xe0m\xbc_MK\x10m;I\xf5\xbb6\xe3}\xeeOo\xf3\x19v\x17.[\xc3\xe7\xfd\xeb\xd3\xc3\x17\xc7\xe7\xb7\\\x13\xdd\xd7\x1b\x03Y\xd7\xc8\x06S\xcf\xb0\xaa\x94\xcf\xc1z\xf3\xe1\xf8\xe4\xe4\xe5\xf3\xe3\xf3g\x87\xa7\xc7\x1a\xe6\xa7\xda\xce\xc4Htp#\xc6\xfe\x9aLq7\xbd\x88\xa3e\xcd\x8el\xd3\xd7\xcc\xd8\xd7\xd4OV\x81\x87I\xceZ\xb2\xe4\x80\x84W\xfa\x0eT\xbd\xaex\x0c\xd7F\x82\xa6\xb6\xee\x8d\xb2\x9c\x9a\xd8\x9e\xf2\x93\xdf{\x84\xec\x9e;,\x85\x86\x0b;\x1d\x87k\xb4\xc7\xe1\xd9Fw\\\x1aR\xdaz\xdci\xb7\xf25f\x1b\xfc\xfb\x8d\xab+\xd3\x060\x85\x9a\xa1\xddzT\x86\x01}\xc6X*g\xc7\x06\xc3Q\xbe\xc5\x00G\xea\xbb\x11L\xed\xca[ly\xa8\xad\xbd\x11BJ\xa7\xf1\x06\xc3^Il\xaa\x00a\xfenS\xf8\xe5\xccC\xeb\x01l\xb5\xaf\n\xed\xf6\x10\x94\xf7\x91\x1f6\xb7*\x1e\xc1\xe85\x1b\xf5\x8b\x07\xc7\xa3\xda\x02\x86\xadm\x01A\xe8\xbd(\xbb\x88W\x9d\xed\xba\xa5Odo\xf9.\xfc \xadhy6\x9b\xef\xa3\x0c<\xbc\x10I\xc9r\x95\xfa\xe1\x1c\xd2\x88gi\x07\x0fb\x92\x90xM\xa6\x88)t\xa4.\xfc\xf8\xc7\xe4G\x17\xd2\x85\x97\xf2\x03;\xfc\xe1O)\\\x10\x88B\xbc\xa9\xb1\xf8\x8aZpI\xae\xbb\xf0\x9c5\xe5cn:/,,\xa6E\x8b\xf8\x86x\xd3\xc7\xb4\xce\x95\x1f\x04\x90\xa4\xf4\xff\x17\x04\xbc\xc9\x84$,94o\\\xb6\x17\xff\x93>t\xbe\xe9\x11z/\x04\x9a!\xee\xb5\xeeA\xf5\xd7&\xab\x03\x12\xcf=\xa9.4\x1c\xc0d\x1c\x9eqE}\xfbq@!^F\xb6\xee8D\xbd\x87\xe7\x82\xd5z}\xe9RR\xc8^GY,\x19\x0b\xe3\x0dY\xba\xf0B\x88\xc2 \xe9\xc2\xbb\x85\x9fP\xc8\xcf\x02\x7f\x92\xc2\xd2\xbb\xa6k3\xcd\x08m\xc9c\x87Z\xd7ba\x99\xd7\x91?\xb5Q\x8f\x8ct\x0bo\xad\xe3\x86\x80\x93\xf2S\x7f\x01,?\xbc\x13}\x1ch\xf5in\xd6\\\xe3\x86Q\x99Mh\x9a\x97\xa5\xd1\x85\x1fN\xcb&\xf7\x1b\xdcA\xeb\xd3\xfd\x80d$\x98\xa8\x88E(b%cbF\xacs\xcd'\xf7\xeeQd*\xb3p,tm \x8f0?\xc3\xcc\x9b\x10\x13BEk\x12\xc7\xfe\x94\xa3\xd4,\x8e\x96\x1c\xa9\xe8\xd7\x90\xac\xc8\xc4\x9f\xf9\x13\xb40\xef\xc2q\x98d\x0c\xc3RVkI\xd2E4\x85\x10\x93\xd1N#\xbc\x01\xa6-\x06\xde\x8a\x85\xf2\xc4\x91\xf0jhjH\x1c\x97\xdd\\\x94\xb7\x82\x08\xbb\xfb\xe9\x93\x96a\xbc\xcd\xcc\xbe\xc8V!\xedn\xe3\x90q3\xa7\xf00\x11\xa5\xc8`\x1cZ%\x0d\x7f\xaaL7K(\xd9/&\xc8\x160\x8a\x8bAQ2\xceg\x02/\x19\xe9v\xe1\xa7,I\xf9\xb71\x99g\x81\x17\x17\xb6\xf4.=w\x08\xda\x86n\xde\xff\xc6\xbd\xe9 \xea:\xcf\xd7T\xa8\xe1\x8c;\xde\xc7\xfb\xa4\xf3\xf3\x98\x0e\xf60K\xa3g~8}\xeb\xf9\xb1&\x863\xc8\xac\x83G\x8f\x96P\xddf\x19\xcb\x14\xdee\xdc?.)\xff\xedh\xa3\xd0\x8b\x07\xd7Xm\x8c\x19Vxx\x8d\xd5x*\xad\xb9ch8\xf6Z\x98\x8e\xadp\xda\x95\xfe\x9a/\x02\x03{\xc5\x12\x01\xcd\xaa_;0\x1b{gt\xd2\x93\x86\x96jbQ\xcb\x0f\x9d\xd3BG\x00\x9bF\nu\x86\xd3h\xbd\x82\x01\xc4W\xe8\xe6\xd6g\xa4\xa2+(y\xbb\x13\x0c-\xf5\x9b\x16E~\xd6<\xa4w2\xf6Zr\x8f\x80\xfb\x1b\x03\x9b\x9b\x99\x80k\x95\x00\xf2\xd7\xea\x0e|\x1f\xe6V\x04\x94D\xc3*\n\xfc\xc95\xfc1A\x94\xbe$\xf8\xf3jAB\xb6\x03\xe7\x14\xbd\x8b\xadI?Ab|\xcdV\xbff8\x07\x10\x8f=\xc6\x13\xd0\x1f\x14\x19`\xa8\x1b!\x8b*\xcc\xea\xae\xf3\xba\xed\xa0\xcfCT\xf3\xaf'\xcd\xf0d\x11\xadY*\x16\x8f\xf6\xe3\xe6\x1f\xd7~[\xc3+T\x8f\xf8V\x84~a<\xef\xcbbIds\x8b\xb2\x9a\xfc\x01\x9a\xf7\xc4\x05kI\xe29\x11\x89\x97^G\xcf\xb3U@\x0fd\xf25\xb9Nlg\x08G^H\x8f]\xac\x06a\x14n\xb3f\x12$\xe0\xc4\x01\x8d\xc8\xc2r\xa7\x95.\xf5\x90\xe1k\xec\xeb]\xcc-ZXo\xe9U\xc4\xe9w\xc2\x8e{\xca\xe9'\xde\x92P\x14\x1c\xe2\xd1\xdb\xead}LA\xb4\xc2\xa8\xb3\xf4L`Vr\xa2\xea\xc4\xcb\x12nNv\x15\xa9j[\xdb\xa1G\x9c\"L\xdb\x8e\xe088\xdfMw@i\x9c\xf4p\\\xd0\xb7\x97\xe4:\x11,0gL\x0d.\xaa\xc2\x86\xb0\x15ZL\x9bL\x11e\xf6\xd2x\xee\xa1OI\xd7[\xad\x82k\xccE\xe2\xe6\xde \x89\xc1\xd1\x91>(\xd4\x1a\xbe2\xdf\x8f\n\x9b\xb8\xc2\x11%n\xae\\\x18{\x84\xe6\xd3\x1bC\x1ek\xe2G\x83t\xebf\xfbl \xf0\x87>\xd9I\xbb\xfd\xb8\xfel\xc0\x1b\x01n\x04\xea-\x87z\xdd(*\x10f=\xa7\xbb%\x16`WzR[\xd1\xe77\x06\xfd5A#h@X\xb4\x9e\x9f\xfb ~\x84F~\x9a$\xeb\xa0'\xa9U\xa4]6\x0f\xb0\xa4\xaa\xbf\xf5\x18\xf5\x06/\xad\xc6xn\x1c#\x8fY\xce/\x90Z+\xb7p|L\x1f\x1fwI\xf8sF2r\"5\xc51lc\xe95\x9fpK8 c\x9c-\x15`\xb7\x87\xd5\x859\xd90HV\xa2\xf6\x85|\xab.\xf3\xf6p\xae!m\x05d\xeb\xc8%Q\xaeT\xe3\x1a{P(\xd0\xa4*,\x88|p\x94\xf9o\xecY<%/\xc2T\xdb\xaekP\xf5Cg\x04\x83\xa6\xf6A\xd1Y6\x8b\x05\xc0%\"2\x0e\xa1\x03\xfd\x16|*&\x84\x181\xca\xe4\xdf6\x10\xc2\x0d\xa2\xaf\xc8\xb3\xb7\xe2\xda\xedj\x96c\x91\xd07&3\x0cj\xe6\x96\xf6\x850R\x0f\x0b\x93\xf9T\xe4\x172ODh\xef\xf0\x13\x85U\x80\x03\xedk\xdbiT\xe8E\xb6\x865\xf3\xd0\xb0\xaelO\x86\xcc\xf4\x1f5]\x0caI%_\x8e\xfe\xb9\xbf:\xe5]h\xd7\x16=\\\xe4\xeb)*\x050~\x9fR\xc1\xc4\x97.\xee,G\x81\x88\xa7\xdf\xad\x0d\x12o\x8c\xca\xf2\x92\xb5KH\xae\xe0\xc2\x95_\x96\x82\x88`\x8ef\xb9P\x87\xe2<\xd5\xa0'\x12\xdf\xdb+\xd9\x02\x9c8\x8e\x0b+\x9b\xb80\x17?R\xf1c\x89'\xacz-\x82\xbe\x08\xdd\xa9rS\xa2V\xb3\x1d\xd4U\xc8\x83c\x17\xed.XR\nx\xbb\xdb\xedR\x86\xb9\xaa\xdab\xcb\xe3/W\xcc\x1c\x05<\xf8\x915\xf0#\xe7$\x91\x99N\x1cy\xfe\xd3E\xa64'\x13\x8fJ\xb4\xfc\x83A\x14\x92\xffJ\xcb~ \xca\xad\x8d`p5\x80e\xd1\n5\xa9\xd3Y\x80BM\xc1\x0c#\x12j\nD\x04BM\x91p\xd8\xd3\x14\x89(\x83\xba\"\x1eWPS\x84\x91\x04u\xefE\xc8@\x8d\xd62\x8fa\xa6\xf9N\x0er\xa5\xf9\x94\x85\x052N\xcc\xf0\x15\x8f\xc8a*a\xc1\x174\xa5\xdcU\\7\x05\xe6N\xab\x98\xc3jy\xbe\xb0j:\x19\xbb\x10\x96L'C9\x9f\xeag\x10\x0e\xee>\xc9n\x00\x8a[\x13\x17\xac\xf3s\x92\xbc\x8a\xa6Y@,WA?4\xaa\x1f\xca\xd2\xcc\x0d\x1eI\xfc\xf0\xa9\xa3\x1e|\x8aUt\xce\x85\x98dh`\xef\xdeE\xab\x0b/\x1eB$\xfa\xa9\xd42Y\xad\xde(\x84\xd2\xcd\x89\xfc\x8e\x86*\xda\x94\x90\xfa\xa8\xf9\x89\xbb\x05\x14\xe0\x00b\xd0\x8dMX\xd9V\x1c\xb6\xe0\x1f\xbe(\xd5\x03be\x87v\x7f\xf7\xa1\x9a\x03\xd4\x17E{=]^QVT\xc9\x1c\x9a\xe5E\x95l\xa4^^\xb4\xaf\x16%\xdcfU=\xa8&\xcc\x0fWy;\xa3+\x82-\xed\xef1\x9e\x88\xae\xdb\xae\xa3\xb6\x1a\xf0\xf3l\xdf\xd1\xa5*]\x19\xcfg\xd4'\xa6\xe5uN\xeb\xd7\xd9D\xcdoJ\xd0^\xd4r\x07\xd2\xb9a\xba\xff\xb2{.\xf8\x02\xd7\x1d.\xe9\xea\x9c\x7fho\x88\xb8=\x172\xf5\x03\x9br\x9f\xc8v\x9d\x9f#\x13\xd6s!.*\x11\xc7a^E\xb9 \x1d\xea\\B\xc5\xa5|7\n\xdf\xc7\xc1\xd1\xc2\x0b\xe7\xa4\x95+V!\xe6\xa5^<'i\x9dCN\xd4MH\xca\xc4\x00\xb3\x80\x97\xc5\x81JE\xc5\xa3\xf1\x8b\xbeq!\xea\x06\x917=]\x91I\xab\x01GL\x0e\xebR\xa6\xf7\x10\xeb\nA\xeb}\x1c\xa0\x87\xb9\xae\xc64\xba\ni7j\xba\xf3|\x0c\x08\xb7S\xcc\x8e\xd0j\x18z\xb8\xa1\xe7\x9ax\xb3\x88\x89\xc1.\xa6\x98\xb2Mp\xc0\x14\xae\xd87\x99\xd2Y\xe0\xcdrw\x15\x935 \x85t`\x1b\x06.f\xf6>\x0eZ\x0d\\\xea;b\x82W7\x8b\x83\x0d:\xc4\xb1z\xf1\xa4~\xff\x88G\xc0\x89\xa2u\xd0]yqB\xd8\xd7\x8e)\x834\x19[Y\x1cPq\xdb_z1\n\x91\xd6Y\x1ew\xd2\xac\x9c\xa5\\\xd8\x95\x1fN\xa3\xabn\x10\xf1k~\xdcW\x93\x08#\x1f\xdc\xbfoA\xa7Rc\x11%\xa9\xe6\xf5\xcaK\x17\xe6\xeeXmJ\x98\xf8w\x0b?I\xa3\xf8\xba\xfa\x06/v\x98\xcc^-\x93un\\\xac\xb4,\x97\xc5\x1c<\xa0\x83e@KH\xec{\x81\xffK\x0e8]\x86\xde\x9b*\x1am\xb4>b\xd3\xccIz\x14\x853\x7f\x9e\xd8\x0eE\x8c\x84\xa2\xf4\xd8\xa0p\xc1I\x11I\xc7\xc4n\x86r\x899\xef^\xe7\x12Pj\x88v\xc5]\xb2\xf0B\xa7\x0d\xa5\x81<\xb5 \x99\xbe\x0c\xa7\xe4\xe3\xd0\x90\xc2\x1e8\x03$\xe1\xae1\xcb\xb1\x89FE\xe1\x0b?HI\xfc\xc5H+\x03\x7f\xe0]GYZ\xa6k\xacc\x9d\xfd [t\xae<\xd1\x0f\x02\xc9q\x8a\xb4\x90\xa1F\x14'\x14\xd8\xa6\xf8\x92\n@\xab\xfap\xdag\xe9\xa5\xd6\xf9\x88b\xae'\x9dbL;B\xdfF\xa5\xb7\xe3\xea\xa8\xf1\xbe\xcd2\x1a\x98kl\xc29g\xd5\xbc\"L\xd9\xd4\x8cYf\xa0\xb5\xc6\x992\x88T^\x10\xf4\xf3D\x9du\x8b \xd6a\\\xcau\x86f\xa5*\x11Z\xc5\xea\x8e7\x7f\xc4.q\x9a\x08\x02\xde\xa8\xd1\x1d\x1cr\xa2P\xb7\xe9\x0b\x15\xb0\x86\xe0\x9bU\x981k\x7fc\x1a\x03Hg0v1F\xc7`|e\x0bl\x10OkZ\x03z\x9ch(j\xbc\xb7o\x81D\xe2\x06\xec\x8ep\xe86g\x02\xe7\xd7\xa53\x816\x94\xf3\x1c\xe9\xb8\xd0\xf8vK\x10=C>\xe4\xf6@`Z\xce;\x9dy\xc3\x1eb\x80\xd1z\x07\xca\x0f\xbb\xfb.\x11\x13s\xe5\xb8h\x18!n\xae\x89\xf7!\xb6\xf5\xcc\x98pU<\x11\xab\xf8\x8d!i\x9fx\xd0\xc9\x8f\xae\x93\x1f\xce\xb9\x95b\x97\xffIwHVK\x1e\xbc\x9a\x9bqk\xe6\xf9\x01\x99\x1a\xda\xc4\xf3\xde\xebN\xa2\x00\x15\xf3V\x8c\xd9=!S\xdf\xff\xff<\xcf\xab\xb3\xac\x0b\xd0\x11\x80\xe1\xa7y\x9c+\x83\x0f\xa2x\x16\xb5\xf72<`\\=I\x9bb\x17f\xfa\x15TIW\xd3-+}\xa6\xccFh\"\x8eO\x9e\x9aYh\xadE:?\xdd\xfeP\x1f\xdc/5\xb6\x87\xe2\xe1\x1b'\xa50\xad'v.\xe7\xcek\xac\xa4(\x03\xb6j\x98\x03\xcb]\xd94\x054\x07e.S<\x9f\xdd6\xff\xb0\xf6\xb3E\xba\x0c^Dq\xfeQ\xd5uK<7.\x18\x87\x88\xf9\x95\xf2(f\\`\xf4\xf0\n\x86\xa2\xad\xf9;\xd6g\xd3\xdc\xfci1\xbe\xfa\xe9L\xfd\xc4\xbb\x08\xc8t\x08Y}\xc5(d<\xeb\x90\x116I\xd0\xad\xff\x8e\xaf~PO\xb0\xeb\x808uLL63{[\x08b+\xc9\xb0\xcdH\xc2\xd2\xac\xd6\x01RF\x10\xd1\xf4v\x16\x07\xdb\xfcS\xe3\x87)\xaa\x8dY\x9a\xad\x1az\xaa\x01({c\xfeFl\xa5\x02\x94Y\x1c\x98\xab\xb7Z\\\x9e#\xd1pi\xea4\xef7\xffV@\xe4\x19\xbek\xe1\x13\xf8\x93\xcbaem\xf5\x03u\xc1:\xfe\xb8\n\xa2\x984\x05;3\xa2\xc4\xd4_\xb7F\x88\x14\xb5\xd4\xfa\xcd_\xb7\xf17\xe9\xe3*\xf6V+\xf2\x85;a\x13\xd9\xbem_\x91 b\xe6\x8d\xb6\x9c\xd7\x0efA\xfc\xf9\"\x1d\x82\xb5\xd3\xab\xc1\x86+\x7f\x9a.\x9a*%\xf1d\x0831\x90\x1a6#\xa0\xfd\x9d^y\xf39\x89\xe1\xfdK\xc3\xack q\x89\x80'\xac)\xcb\xa9\xfb\x04\x13v\xb7]\x96\xd2^\x11\x8bS\xb7YN\xb3\x8b\xa5\x9f\x0eaaZ\xc1Uw\xe9\xad\xda3\x0b\x92\x04\x9et'A\x14\x8a\x898\xf4\xd3\xfa\xe3\x87q\x06f\x9an\x92\x7f\x1d\x1d\xa5W8\xf73\xc7\x95\x9a\xbe\x91\xa8R\xceCK\xdb_\xbe\xacb\x90Qojd\x18\x94\x02\x80`J~\xccxy\x7f\x15\xce\x1f_x \xd9\xdfu\xfd\x0f\xcf\xde\x9c\\\xf5\xbe\xfej\x1e\x1d\x1e\x1e\x1e\xbe>}\xbf8~??<<|\xb6K\xff&G\x87\xaf\xe8\xbf\xaf\x1e\x04\xfb\x7f\xa5?\xbe\x7f\xf1\xec\xd5\x87\xe3\xf7\xb4\xc2\xfb\xd9\xd5\xad\xfe\xeb\x05\xbf<\xbb\x1f\xf6\x9e\xcd\x16\x1f\x9f\xad~\xba>\xea}\xdc\xbd\x7f\xff\xfe\xfd\xce\xcf\xeb\xdd\xa3\xbf\xac\xfa\xcf{\x8f:\x9dY\xbast\xff\x97\xbd\xfb_\xf7\xf7\xef\xbf\xdfy\xf0\xe8\xfd\xec\xea\xf9l\xef\xe1\xfd\x9f\x1f<\xea\xbc\x8f\x07\xcf\x07'G\x97\x8f\xe8x\xfe\xfc\xdd\xc9\xe9\xbb\xe0\xd5\xe1\xf1\xf1\xe1U\xf8\xe8\xfe\xfd_v\x0e\xe7\xeb\xdd\xfb\xeb\xef_>\xbf\xaf>\xef_\x91\x9f\xfc\xfe\xe5\xe1\xe1\xe1\xf3\x87\xa7\xefO\x9e}\xf8\xf3\xfcY\xf0\xb7W/\x0e\xa3\xbf^=?|w\xf2\xf1\xe2\xbbg\x0ff\x9d\xf5\xdb\xaf\xc3\xe0\xbb\xc3\xbf\x85\xfb\x97\x83\xc9l\xe7\xf0\xd1/\xf7\xdf\xce\xde\x1c=|\xf9\xf2\xfb\xd0\xdf{\xb1\\\x1e>{\xf5\xf0\xc5\xab\xc5\xd5\xbb\xfe\x83\xc9\xa3E\xb8\xf0\xff\xf6M\xff\xe8j}\xfcM?]\xbe}\xde\xfb\xf9\xf4\xeb\x9f\xf7\xe7\xdei\xfa\xed\xfd\xcbW\xdfy\xe1\x87\xe5\xe1\x87\x93\xe7\xef\x83?\xf7\xdf\xac\xb3\xec\xdd\xcb\xd7\xd1\xfe\xe5\xa3\xde\xe9\xc7\xd9\xc3\x9f\x937\xe9\x8b\xfd\xf9\xeel\xd6\x8f\x92\xb7;o\xc2W\x93\x0f\x0f\xa6\xbb\xab_\xa6/\xdf\xa7Y?:\xdc\xfd\xd0{\xfe\xb7\xe8\xeb\xe5\xc7ep\xfc\xfd:}\xfe\xfe\xa7\x9fNw\xd2\xe5\xd7\xcb\x9f\x9fuV\xdf_?\\=\xef\x7fx;{\xf0\xd3\xdb\xe3\xde\xcb\xdd\xde\x9f\xff<\xf1\x9e]\x85\x19\xd9\x9f}\xf5\xcb\xfc\xfat/\xfd\xee\xe5\xfbG\xfbo?<\x88/\x9f\x7f\xfb\xe7\xd7\xdf|\xe8=\xffz\xf7\xc5e\xf4\xf5\xf2\xc5\xea\xf5^\xf4>\\\xfb\x0f\xbf\x8e\xc8\xe1\xe0\xfe_\xbeK\x96\xdf\xfd5\x8b.?\xf6\x12\xff\xa4\xff\xd5\xc3\xf4\x9b\xcb\xd7\xfb\xe4\xd9\xa3\xe4\x9b\xab\xbf\xac\xee__/'\xd7\xde\xdb\xfb\xef\xe2\xb7\x9d\x93\xb7\xcb\x8bW\xaf\xfc\x8f\x93\xbf|\x98\xbf;\xe9{\xef\xff\xf6h'\xfa\xea\xbbd\xfe\xdd_\x0f\xbd\xaf\xf6\x8f\xaf\xe8\xb2\x1c\x9e\xbe\xff\xf0\xe6\xe4\xeb\xbd\xa3\xef_\xbe\x1c}F\xd0\x19\xd2\xbd\xb8N\xc97Lj\xae\xd3.\n\xad\xe2\xc4N5\xf2\x18\xaai\xc6=\x8d\x84\xc34-\xaa\xe9\x1c'\x16;\xf0\xcf`\x87\xd0\x81\xd8\x81\xfb\xb0\x0b\xdb\xd2]\xe9\x8d\x0b\xa4\x9bF\xcf\xaeS\x82\xa6a\xf5\xd7f\xb9\xe9 \xb3\x10\xc4Q2\xcb\x17:*\xe6\xfc:\xee\xf3\\\x14!\xb9\x82\xa8\x92\xe4\xa7\xc6N\x03\xc7I\xa0C+\xb1q*f\xc3x{\xe6BF\xe99%\x06=\x97\x05q\x86\xa7\xd0\xc3\x0b\xe2m\xd8\x85!\xad\x120\xfb\xc5\x00\x9e\xc0\x8c\xfe\xd3\x19\xc1\xae\x83\x90\xf5\xc7iw\xb2\xf0\xe2\xa3hJ\x0eS;p\xce\xe0\xc9\x13\xe8?\x84O\x95\"\xe8@\x9f\x17\x0f\xf4\xc5\x03V\xbc\xaf/\xddq($\xc6I\xa7\x83\xe6\xfa\xf0\xf4)\xf4\xf7\xe1\x1e\x0c\xf6\xf6\xd4\xf7\x0f+\xaf\x07{{pO\x0d-5@)\x9bI\xcf\xe6\xc9\x18\x06K\xe7\xf2\xf4)\xecV;Q\x18\xb3~\xab^\xfa\xbdZ\x90\xed\x9a!\xf6\xf4)\x0cZ\x03\xc0\xd1\xa2\xb4WF\xe0Y\x1c-o\x87\xc2B\x97\xc5\x8d\x12\xe0\x8f\xb0\xc3\xc2=\x8e9>\xf782\xc36\xf8,\xc7\x83G\xff\xe9\x8c\xa0\xbf\xbf\xf3p\xc7\x81\x88\xb1\xe13\x8a\xe0\x99\x8b\xd1n\xb1\x04\x9e\x82\x07\x07\xe0\xc1\xb0x\xa7\xb2\xc0\x0c\xd2>\x1c0@\xa7c\xda\x0d\xdd?\xbc\xd1x\x8c\xc0\x19\x9c\xd1\xcd;&\x0c\xae\xf7`\x7f\x87\xbe\xb0F#\xcbq`\xc8\xb1\xc2\xcf\xd7\xcbf\xed\x0cp\x1d\x1e:\xd016\xdc\xef\x89\x96)b\xe4-\xf3\xae\x06RW\x15\xee=\xbf\x93\xfe)\xf2C\xdb\x92\xec\xb4$E\x91d\xc5\xc9 \xea\xf3\x7f)\x84\xa5\xf8\xab\x92\x9f\xdc{?L\x1f\xb2u<\x90\xff\x18\xb2\x90\x88lQ\xac\xc3gG\xcf\x8f_|\xf5\xe7\x97\x7f\xf9\xfa\x9bW\xaf\xdf\xbc\xfd\xeb\xc9\xe9\xbb\xf7\x1f\xbe\xfd\xee\xfb\xbfy\x17\x93)\x99\xcd\x17\xfeO\x97\xc12\x8cV?\xc7I\x9a\xad\xaf\xfe_\xea\xde\xb4\xc9\x91d9\x0c\xb4\xdd/k\xf6\xfe\xc2~q\xa4\x86\xdd\x99\x83\x04\n@\xdd\xa8F\xd7\xeb\xd7\xd3#55\xd3\xfdl\xaa\x1f\x9fH\x00S\xcaJ\x04\n9\x0dd\x82yTW\xcdT\xafQ\xd2R\xa2H]\xdc\x95(R\x07\x0f\x1d\xe4.IQ\xa4\xb4\x07wy\x99\xed\x9b\xf9#\xfa\x03\xfb\x17\xd6\xc2#\"32#\"\x13\xa8\xaay\xd4\xc2\xac\xbb\x00\xcf\xc88=\xdc=\xdc=\xdc\xafo\xbe\xec\xf5\x07\xbb{\xfb\x07\x87G\xc7\xed\x1d\x8b\xa7\xcbat\xa4\xc8g\xe9\xc1\x13HN\xa0\xdd\xf6\x1cqS+\xc3+b\xc18\x93Q\xd9s\xe8#O\xe7\xec\xe0\x9b\xa9z\x9e\x1d\xa4\xf4\x14\xc35\xc0O\xc0\x1e%c\x0e\xa4\x8b8z\x87\xc4\x13\xa3\xba\x15Q}\x99\xc3W\x178\x1bAO\xd0\x0b\x02\x1e\xac\xb2e\x1a\xac\x97\x98\xf0f\xaf\xaaE\xbb\xca\xef\xe7`\"\x95\xd7s\x9b.\xa6v-;\xfcN\"\xb0x\xad#\xbc\x03=\x0eq\xa3\xe4\xf1\xc8\x87\x8c0\xd3\xfeN\x8b%\xd7\xcc\xc3\xdcD\xf1s\xa4\xe0\xa1\x90\x85+.m\x90\xad@H\xff\xb4G\xb0\xeb \xc2\xd8)] Jr(\xf5\xec\x1f\x1c\xf6\xfb\x07G=\x8a\xd7\xf4 \xba\x8c#\xa6St\xdd\x1f\xf0'\x8c|\xb0\xe7\x03*\x9df\x02\xf3\xed\x88y\x18Q\xfc?\x92p>B\xc8\xa0\n9\x90\x00\x07\xbb\xf0\x08\xa2\xea\xad+>}\x99f+\xe4\xdf\x82\xb1\xd5\xb1d\x0c\xea!\x06\x1d\x0c(jY\xe7\xbaG\xbbZyC\x9eM\xd2\x8d\x897\xab\x0b\xbb\xa7\xa0\x02\x0b\xabM\xe7\xfa\x08>\x84\x80\xca\x02\x942\xa8\x12\x05\xdd\x17v\x9f\xce\xab\xe7\xe8K\xf80\x82\x04\xe7L}F\xd9r\xe7P\x85\xa3\x9f\x10\x9cb\xc3}\x18BO-\xb2\xe6E:\xf4\xb9\xa6\xea\x05K`\x04m\xa8\xe6T@\xc4B^\xbff\x14f\x01\x8f\xf8\x18:s6\x08X\xc0\xd3\xa7#\xe8\xcc\xa9\xe4\xd0\xa6;\x18\xe6t\xdb\x9d`\xf9\xc1\xfe\x01|\x88\xe1\xb2E\x03.\x88\xfa\xe6\xd0\x19\xc1\x91\xa3i\x91\"p\xa4\xb6\x14\x95[\x8a\xf3\x96\xb2\xbc\xa5l\xf3\x96(\x91`7 #\x07\xfb\xda\x87N\xf5\x06\xaa\xe1~3}5\xc2W\x8b\xcc3\x19\x9c\xc2+\xef\x15\x9da\xd8\x81\x1e\x15\xbc\x16\xf9\x9ck\xf44\xc8\xf0>\xf5\xd2Ew\x1d\xbd\xb3\x07\xec\xee[D;Z\xbe\xc8\xaa7\x17KU\xe3\xa8?,U\x15Q$\x94\xf6\x0ce\xe8\xef\xe2 \xad^\x93\xa9\xcdiBq\x9b\"6\x0b\x19\xcf\xd1\x9b\xd6\x1c\xe8\x91w\x9e\xa3\xb7o@o\xf4\xb00\xa07\xc5\xd1\xc1n\xce\xbc\xe5\xd1t\x06{\xb4\xc2\x12\xe8\xf0\xd0\xd1\xe3:\xc5\xe5\x98\x93\xd5H\xdf\x8d\x19/B\xa7\xaf\xa3y~\x85\x12\xd4\x13\xe8\xc1\xed-\xbf#\x8b\x8e\x1b,K\xc4\x13\x14\x8cq\xa7i0\x97\xce0v\xd4\xbbH\xd0-)H^y\xafl\x82>\xf2\xcc\x90\xca\xd0\xe3\x14lJ2\xf2\xc7\xbcJF\xbc\xe7tp\xb8\x0b\xb0\xae\xf92\x8ab\x1b\xbf.\xa3KZz\x87=\xf8\xe4\xd5\xc0q\x81P\\K\xa0\x8cM\x9d\xccq\xe0 \xf4\x91\xf3d\x9d\x0ee\xcb\x1f\x8e\x80\x96\xa7\x07\x82\x11\xee\x94%<\xa5\xfd9\x855\xec@\x02CXW\x10\x89n\x89\xa5CQ,\xa1E\x07\xac\xb6v\x9b\xd6\xb6\xc3j\xcb\xeb\x99\x8b1\xc9\x83(\xb5\x82Om\x82\xb5u\x18\xe6\xca\x8d\x05\xac\xb6\x11,q\xf8\xc8\xbd*E\x96\xe6\xf7F\xd0s\x9c\x13\x08hcG'(\x9f\xb5aQ\x88\xbd\x1e\xa5T\xed\x11\xcc(\xad\xdeAzA\x85\xa7:\x12\x94Qd\x0e\xe0\x96\xbe\xeb\xd3w\x83\x13\xf0\x19\xc5Q\xaa\xcf\x8a\xea\xb3\xbcz_W=\x7f\x15:0\x9b\xc2\xed\x08\xfa\x03\xba\xb1\xae*\x1c\xae\xe1P,+p\xca\xdb6\xf7\xea\x0c\xed\xdd\xc1Q\xe5\xc8[x\x85\x96\x1dk7i\xb2\xb8\x921\xd08\xdb\xc6\xdd\x9f<{\xfd\n\x1d2\xf9W\x9d\x87M\x9e\xe6fXI{S&yMW8\xccwS\xf2\n\xf9\x85\xdd@{[w\xa3\xf1\x9a\xf4\x0e\x92g\xed\xa8\x14\x0d]LPd\x87\xf6\xee\xae\xe2w\x1c\xf0GG{\x8e\xd6\xa57\xfa\xf1\xba\xf4n\xe3\xdd\xde\xa8KU\xd3(H\xf9\x185q\xbbh\xf9\x8a\xe3.\xf3\x11\xa7\xef9\x1b7\x0b\x924^g\xa5\x8eq\xa5j\x94\xcaxM\xd8\xfc\x9c\x12\x03\x161\xc1\xe0\xc3\x11\xdf\xd4(\x8a\x8bP3\xeclT\xf5\x83vN\xa0\x85>\xfaH\xf2\x92Rv\x00f\xee\x0fy\xbc\x0b\x9e\x94\xc0\x85\x16z\xce\n\xa7!\x96\x1f\xc19\xe1\xe34\x18\x85\xde\x83\xef\xb1\x84 u\xda\xf0\x88M\x15\xcb\\n\xa8g\x1e\x84\xderY7\xe4\xfa \xa1\x9f\x16\xfa\x13%]\xbe\xd4\xd2w\x83\xd3\x18l\xd84\x08\xf9L\x9c\xfb2su\xfa\xf1i\xa1\xda[\xf7X\x9ca\xa7:\xe7\xc5\xa9\xf3\xcd\xcd\x9aTN\x9e<\x80\x12\x0bV\xc5\xeeYf1\x8b\xe1\x11\xa4$\xf6.\x96E\xc0\x7f\xe5\xc2V\xd14{\xf2 \xbcb\xb7\x1a\xdb\xfa>\xbc\"\xb4\x8f\xf6\x1d\x17B\xfb\xf8\x00=\xa5\x8b\x0e\xd0\x96\x06\x1bu\xbb\xe07\xfd]\x1d\xc7 \xed\x03\xc7\xb6p\xb6\xd2(\xaez\xea\xb0\xeb\x80\xbb\xa6x\xe1\x94\x89u\x83\xe4\xa5\x98\xebM4\xc89\x85\xd2\x9eUyD\x15\xdc\x8a\xe3\x80\xa5t\xf8\xeew\xf3\xee\xe1\x9d[L\xb7U\x8d\xc9\x12\x97|k7\x9a\xde\x0dWt\xefAWtww_Y\xcb\x81\xd3\xe5w{\xbc$ .\xc3Mj\x92\xd7U\x9a\xca\xd8\x8e\xbbg\xd0\x86\xb8\xfb\xb1\x0b\x16\xabU1\"\xb2V\xd8\xe8\x0e\xa4I\xdb\x08\xa1\x9an\x9a\xeeU\xaf\x94\xf2\xa8\xef\xbd\xaa\x14\xc5p\xeb\xa0:\xbd,F\xfd~5v\xbc\xc7j\x19T\x8b'9J\xf1\xc9\xd3cj\x0b\xbd\x07C{p\xec\xd8F>-\\\xf1\xbe\xd2\xc4e \x068e\x9a,\x91\x88\xceQ\x0d}\xc8t\x9a?K\x8b\xfd<\x80\xce!e\xe9\xc9z\x19\xa4\xb6e9\x1a\xc7-\x1d\xeb!\xe3t\xaap\x9b\xf7\x8e\x0b\x87\xd0\x1aA\xc2\x82\xd5:<\xcf\x91\x9c\x1e\x91=\"\x8e\x93\xab\x89\xe8\x0b\x92%\x86\x1e\xabj\x85\x88R \xe6\x0cm/t\xces\x911We\xd3\xf3o\x9f\xd9F\x82\xee\x9cYC\xa2\xee\xfc\x84\x9e\x8b\xc0\xd7\xe4\x15\xcak^\xbbx&\xf5\xec\xbc\xd2\xb1\xdfnO\x1d\x17\xcf\xa1\xf4\xd0\x14\xdb\x0b\xa7\xebG\xa1\xef\xa5\xf6\xdc^\xa0\x02\x9a\xc2\\<\x89\xce\xf2>\xdc0\x0b\xcc\x15<\x85\x9b\x13\x07\x96\xec\x9e\xd3\xc2\xc5\xb3\xf3l|Cke\xe2\xc2xM't1^\x1b\xf4j\xd2MK\x18B\xb2\xc9\xe6\xd9\x90\xe4<\xe4\x81\x83\xd6w\\Cr(\x0elRO\xb1\xc3\x95\xbd\x19\x88\x8d\x7f\"\xb5\xda\xdf;vl\x8b\xd6n\xb9[\x88\xc65f\xb8\xc0\x8e\xa9`[Fp M7\x19E=\xf5\xda\xf9\xdc\xfe\x89A\xefv\x928\x1f\xda_xW^\xe2\xc7\xc1:\xbd\x9dy\xa9\xe7\xec\x04+u\xd4;\xe3\xcf'\xd7\x83^gr}\xf8b\xbasY-\x12\xb1:\xc7\x9f\x0f\xa7mg\xb8s\xb9RI\xdd\xd8\xeaZ.X;\xb2\xef\xb9\x19K\x12/\x0c\xd2\xe0K\xf2\x83x\xd9t\xf3@\xd8\x92\x98R5\x15\xd7~\xe8Y\xce\xd2y\xb4n\xb4\x12 k\x95\x85\xde>\x1d\xf7\xa6\x0e<\x85\x8e&'\x95\xed9\xdc\xd6\x84\x8a{\xaf\xbb\xa2\xd2\xb3\x1d9\x8e\xb0-1\x0bm\xdcMI\x922\x15\x8e\xe5]DY:\xbcXz\xe1[\x0b\x86\xe0a\xc4<\x19hB\x81M0\xa0\xc0\xe3\xdd=\xbd@\xb4\xbb\xbf\xeblc\x1e\xc6`\xf8\xdd4\xfa$zG\xe2\xe7^Bl\x0c\xd1\xda\xa6C\xa6t \x03\x96W\xe3\x9e\x1a$\xaa`\xbb!\xec\xe9\xc3:\xf4\x0f\xef\x1e\x98\x027Yy4[\xcaUE\xf7\x0e\xaa h\xf8\x04\xefU\xb98\x93\x05\xaad\x8f\x89\x02\x87U\x81\xc2\x03\xae\xfeS%\x81\x98N\xb8\x14\x93e\xc8\x05\xcarIf 8\x85\xa4+\xf2\x87\xe5\x05\xebg\x0d\xb3\x12V\xe6\x0d\x03k\xf2\xa4\x8e\xfal\x80\xaa\xc2<\x92\x93\x1b\x06<\xdfX\x1b,K-\x9a\xc9E}8\x05_\xa4\xfb\xa3\x9b\xa2\xf2\x82\xe0\xc1DS\x19\xaf\xc2\xeaa/\xc3B\x15;\x1aA\xc7\xa3\xdb\xae\xd3\xa3\xbb\xad)~\x80\x89\x9dm.!t\xfa\xdc7\x83\x07\xc1K\xb9\xa2\xb9l\xf2f\n\x90\xd89\x81v;\x84'\x10\x9f8\x10\xf0\x00\x83<\xbcv\xa8\xe6\xc6\x16s\xfa\xa0\x18\xcb9\xa5!~.Z\xed*\xc7\x11\x15\x8f\x83\x1c\xd7TdfX+\xe5\xb2\xdb\x10\x1d\xcd\x87\xac\x88\xdf\xde\xc6\xf0\xa4\xa5\x12 \xae\x86(qW\xf5\xda\x86\x94G$5\xe8m\xc4\xccUB\xd8\x95\xb4$\xef\x95.\x06h\xdbf]\xd4/`\xcc\x9d\x06NE\x07B\x18\xc2\x8c,IJ\x10R\x8ap\xd8\x8c\xa8\x02\xf5\xaa+\x99O\xfa\xb6\x13-D@1\x88\xbb\xe2\xdb\xee^\x95\xe8 \n\xaeO\x92\xb5\xbb\xaf\xcb\x92\x85\x8c\xe0\x8eC\xc8\x0bhu\x83\x04%zSx\x01:\xa5\x01c\xda\x11\xa3H:r+>\xcc]\xe5\x149>\xe5\x88hZF\xb3\xb2\xbe|\xc2\xcb\xc7v\xe8B_:\x9e\xd0w\x93e\xe0\x13\xbb&\x91\xb27N\xa76\xa5\xaaI\x193\xef\xbeR&-H\x93\xa8 0^\xefe!0)\xdfd\xdc\xd7\xe1\x14\x02J\x8dQK\xf9\xe8\x11\x84\xf0\x94\xd9\xf4R<\xd7\x88\xa6\xb6\xd8\x03\xdbv9f\xa4Z\x99_\xf3P\x98YOx\xfbt\x08<\xc5\x1eS\xda\x1e@\x1b\xbd6P\n\x0c\xf9\x03\x1c\xa0\x93\xbf\x84a\xfc\x02\x87\x91\x7f\xfar\xc8_\x0e\xa1\x83\xceXO\xa1\xe7\xb2/#\xad\xd9\xf0\x8aG\xbc`\xac#@\xd6\x11\xc3\x13\x08N\x1c\x88Xh\xb1t\x1c\xd3\x9e\xe8\xfd\x11\xa3;\xe3\xc6~u\xb76\xed\xe2A#.\x19\xe5\xb3\x94m\xb7\x94\x1dp\x1bIO3\n\x18ZJ\x0b\x15\xc4\x16M\x08\xb2`\x8d'\x93lv\xd4\xebu\xe8\xdf\xf9|>\xad\xb8\xa3\xc7\xa2Po\x97\x15\xea\xed\x1e\xcc'\x93lN\x06\xf8sN\x06\xf4\xe7\xa07\xc3\x9f\x83\x9eZ\x05\x9dd\x0b\x9b\xd9\xf5\xc7\xac\x99\x0bSs\xe8\xd85\xfe\xbc\xa1S\xe8\xc3e\x9f\x0e\xe5Jg\xe4\x00\x8b\xcf\xe6\xf3\xa9\xf3\xd5\xe0\xbd\xa52\xf0\xf2`/\xe6\xf3)\x02|sC o(\xcfk~\x9b\xe7Fw,\x16\x89A\x95Y\xb1\x999\xe9\x11\xf6g>=\x15i\xefm\xde\xe9A\xaf7\xe3\xb5\x8e\xb9G\xcd\x94\xd3\xcd[\x0bEL\xc7X\x87\xe5|XU\xff\xce\xa5^\x8e#\xd1\xd5S+\x0f\xed\xe6BX\xad\xbf\xd2\xef%\x8cx\xb6X\x1bGg\x9f\x8e\x8a\x91\xe2\xa0\xe7\xd0\x06\xdf\x05\xeb\xd2\xba\xeb\x9eH\xf9\xa9r\xe9\xb0+\xc2w\xdf\xc6\xd5s\x898\x10V\xa3\x01\x8am\xac;\xb1\xf0\xd1Z\xe3\xc7\xff\xe5\xe7~mj\xddkd\xf5\xccY\xc8JvdS.\x9c\x1f\xf13<\xe2;\x18\xb7\xc72\xdb=\x1a\xf7rC\x02U\x13\x9f\xd31\x8d\xa8F\xde\xd7Pr\x14\xff\xa2\xdc\xdf/\x1d\xb7\xdb\xc1\x14\xe9y\x00O :q\xd81\x87\n\x06\xe98\x98\xa2\xeb\x8dA\x92l:\xcf\xd4`\x83A\xcfU=s\xa3\x96g<\xb9\xf6{\x9d\xc9\xf5\xec`r=;\xeaL\xae\xe7\x07\x93\xeb9~\x99O\xb2^\x9f\x92\x82\xac\xd7?\x9cOw.kpf[zx\x1f\xe4\xb2S\x14\xdfR\xc7a\x96q\x81>\x11]\xdb\n2\xdd}\x12\x0f\x9dJ\x90\x03\xebG?g\x0d\xc1zV!\x14\xd6\x8f\xfe\x96\x1e\xfc\xb7\xf5\xe0\xbf\xa3\x07\xff\x8fz\xf0\xcf\xeb\xc1\xbfI\xc1\x9e\x02\xfe-=\xf8\xdf\xe8\xc1\xffV\x0f\xfewz\xf0\xbf\xd7\x83\xff\x1e\x05?W\xc0\xbfC\xc1\xbe\x02\xfe'\x14\\M\x91j\xfd\xe8\x0f)x\xa6\x80\x7f\x81\x82\xab D\xad\x1f\xfd}=\xf8\x17\xf5\xe0_\xd2\x83\xff\x17\n&\n\xf8\x7f\xd5\x83\x7fW\x0f\xfe==\xf8\x1fP\xf0K\x05\xfc\x0f\xf5\xe0\x7f\xa4\x07\xffc=\xf8\xf7)8P\xc0\xffA\x0f\xfe\x03=\xf8?\xea\xc1\xbfL\xc1\xaf\x14\xf0\x1fQp\xf5\n\xab\xf5\xa3\xff\x89\x82_+\xe0\xffY\x0f\xfe\xa7z\xf0?\xd3\x83\x7fE\x0f\xfeU=\xf8?Qp\xa4\x80\xff\xb3\x1e\xfc\xbf\xe9\xc1\xff\xbb\x1e\xfc\x7f\xe8\xc1\x7f\xac\x07\xff\x1a\x05\xff@\x01\xff\x0b=\xf8_\xea\xc1\xffJ\x0f\xfe\xbf(8S\xc0\xff\xb7\x1e\xfc'z\xf0\x9f\xea\xc1\xff\x9a\x82\xab d\xad\x1f\xfd\x19\x05\xdf(\xe0\xbf\xd0\x83\xff.\x05?S\xb7\xc3oS\xb8\xa7\xc2\x7f\x9d\xc2\xdf,\x14\xf8\x9fSx\xaa\xc2\x7f\x83\xc2\x93jH#\xebk=Y\xfeZO\x7f\xbf\xd6\x13\xda\xaf\x91\x88+\xe4\xed\xeb\xbf\xa3\x07\xff\xbc\x1e\x8c3\xa0\x10\xc3\xaf\x7fA\x0f\xfeE=\xf8\x1f\xe8\xc1Hh\x15\x8a\xfa\xf5\xdf\xd7\x83\x7fI\x0f\xfe\x87z0\x92 \x85,\x7f\xad\xa7\xd6_#eR\xa8\xf5\xd7\xbf\xac\x07#\x99P\xe8\xef\xd7\xffT\x0f\xfe\x15=\xf8W\xf5\xe0\x7f\xa1\x07# R\xf0\xed\xeb\x7f\xa6\x07\xffs=\xf8\xd7\xf4\xe0\x7f\xa9\x07\xe3\x9e\xfd\xab\n\xf8\xd7\xf5\xe0\xdf\xd4\x83\xff\x8d\x1e\x8c\x9b\xf3R\x01\xff\x86\x1e\xfc[z\xf0\xbf\xd5\x83\x91\xd9\xff5\x05\xfc\xdbz0\xca\x00\xca\xc6\xfc\xfaw\xf4`d\xb1\n\x07\xfb\xfaw\xf5\xe0\xdf\xd7\x83\xff@\x0f\xfeC=\x18\xd9\xb7\xc2\xd8\xbe\xfe==X\xcf4\xbf\xd6s\xc7\xaf\xffH\x0fFv\xf2\x93\n\x18\xd9\xc9\x17\n\x18\xd9\xc9_W\xc0\xff'\x05\xbfU\xc0\x7f\xac\x07#'\xf8D\x01\xff\x89\x1e\xfcgz\xf0_h\xc1\xdf\xfc-}i\xe42\xd5\x981\xd6\xd7\x7f\xaa\x07\xff\xb9\x16\xfc\xcd\xcf\xe9\xc1\x7f[\x0fF\xd2\xabH#\xdf\xfc\xbc\x1e\xfc\xf7\xf4\xe0_\xd4\x83\x91 (\"\xcd7\x7fW\x0f\xfe\x05=\xf8\x97\xf4`\xa4\xdf\x8a\x90\xf2\xcd?\xd2\x83\xff\x89\x1e\x8c\x84Z\x91/\xbe\xf9\xc7z\xf0/\xeb\xc1Hc?S\xc0\xbf\xa2\x07\xff\xaa\x1e\x8cT\xb3\x1a\x93\xc1\xfa\xe6\x9f\xeb\xc1\xbf\xa6\x07#\xa1>S\xc0\xffJ\x0f\xfeu=\xf87\xf5`\xa4\xc8\x8aT\xf0\xcd\xbf\xd6\x83\x7fC\x0f\xfe-=\x18)\xf2\x1b\x05\xfc\xef\xf4\xe0\xdf\xd6\x83\x91\xf4VC\xe4X\xdf\xfc{=\xf8w\xf4`$\xa6\x8aP\xf8\xcd\xef\xea\xc1\xbf\xaf\x07\xff\x81\x1e\xfc\x87z\xf0\x7f\xd2\x83\x91\xc6*\"\xe47\xbf\xa7\x07\xff\x07=\xf8?\xea\xc1\x7f\xa4\x07\xffg=\x18I\xef\x0f\x150\x92\xdew\n\x18I\xaf\"\xe3~\x83\xa4W\x11f\xbf\xf9c}i$\xbd?\xa3\x80\xffD\x0f\xfe3=\x18\x89\xe9\x97\n\xf8O\xf5\xe0?\xd7\x82\xbf\xc6\xd5y\xa92\x1e\x9c\xab@\xe1<\xdf\xb0\xe3\x9a\"\xb9|\x83\xc2R\xa4\xc2Q\xb0|\xac\x927\xe4\x1bI\xe1\xcab\xf2\x08a\x8ex\xdb\xab\xe9\xee\xa3Q\x945u\xdc(5\x84tL\xa6\xa5\x17\x9aT\x895J!\x83_\xc8\x81>\x1d\x89\xa2q\xcbx\xf1~\xa3\xeaKo\xde\x12zc\xbcK\x92\xf2\xe4\xdd\xdc\xf2\xc6\x9c\x92\xe4\x81\xa3}\x93\xdb]\xb2\xc2\xee\x82\x1aL\xa6x&\x9b)\x9euv\x12\xf4 \xeb\xf5:\x93\xeb\xc1|r\xbd\xebu&\xd7{\xbd\xc9\xf5\xfeEgr}\xd0\x9b\\\x1f\xd2/\x87\xf3i{\xe7\xae6j\xd1\xc9\xf0>\x9d\xf4:_N\xc7\xcf:?3\xbd\xc5\xff\xbf\x1a\xb8\xef\x11v;\xeeu\x8e\xa7\xf4+{\xc8\xbf \xf4v\xfc9\xfb\xd9\xeb\x1c\xc3t\xe7\x8e\xdd\x0f\x99g\xd8Vv\xae\xdc\x085\x99\\{\xfedr}\xd1\x9fL\xaeg\x87\x93\xc9\xf5\x9c\xfe\x87\nV:\xe1l\xc6q\xca\xd9\x9c\xe3\xa4\xb3Y\x9f\\_0\x85k\x8f+\\\x0f\xe60\x99\xa4\xf4\xf5\x8b\xc9\x84\xbe\xeb\xf5P/;\x9fO&\xe1d\x12c\xa1\xc1\x11\xfbs<\x99d\xfd\x83#Z\xa2\x7f\x84\xd6\x16Z\x11\xfb\xd3g\x7f\x06\xec\xcf.\xfb\xb3\xc7\xfe\xec\xb3?\x07\xec\xcf!\xfb\xc3\xea\xec\x1d\xb3?\x1ek\x81un\x9f\xfe\xd9\xed\xf5\xaaq\xae\x98y\xcd\x826\x0b\xecm0\x9d\xcd\xda\x96\xba\xe1P\x0b=8\xe4\xc3>\xbc\xd0[\xc9\xe8R\xd3I\x9d\xd3\x99\x9a\x1fL\x98\xb6{r\xad\xda\xba<\xad\xe9Mt\x0d-A\x95\x06\x8dU?\xeb\xfc\xcc\x84)\xdaQ\xd3\xceT\xed\x93\xeb\x191\xd9\xd7\xb60\xe4\xf9w2\xe4\xa1\x89l\xbcq\xbf\x96\x92E-\xcb\xed~\x9e\xcer\xb6\x96\x8a\xce\xeb\x8b.x\xd1-\xcd\x07\xb7&\xdb\xa9S\xb5>\xce\x8c\xd6\xc7\x85\xc1\xfa\xa8\xb5\xb5\xe2\x1d\xe8\x8d\x0c\x92\x0b\xbdA\xf2\xaad\x90\xd4\xd7G\x9f\xcd\xca\xaf\xdd\x14&\x96\xf1<\x8fs\x8f\xf3\xdf\xa6\xd3\x86\x96:\xfbt8\xbb].oW\xb71\xb9Mn\xd3\xdb+\xe28\xa7\xdc^9\x8e]\x98\xbb`}`\xa9\xf6NX+\x15}t\xfb\xc9'\xb7\x9f\xde~\xf6\xe2\xf6\xec\xf6\xcd\xedO\xbd\xa8T\x04mX\x9a*+\xfa\xb7\xdc\xa4\x7f\xe2\x8d\xa6\xe6-\x17\xf7\xfb\x87\xf6\xe9\xb0\x7f\xf6\xe6v\xf0\xea\xa3\xdb\xdd\xcf>\xba\xb5O[\xe3\xfe`w\xeaL&\xb37\x7f\xcd\xb1OG\x93\xc9\x05\x92\xf1\xf3\xa9#\xbf\x93\xa4\xb7\x83pv\xbb\x1b\xcfJ\xef\xa4\x8b\xfc\x9dg\x9d\x9fa\xef\x04.\\I\x03\xbb\x97\x8dJ0\xaf\x9b\xcd\x98\x97Y\xe48\xa8\xe6\xf4a\"\xc7a\xd5\x05\x98'@\xeb7:\xd0V;\xcc\x82l\x06_\x12vw\x9b\xe7\xc6\x9cy\xa9w\xae\xcf\x7f\xba\xf0\x92\xc5\x10o\xb6\xc5\xae\xf2p\xe5\xad\xf1\x99\x1d\xd1q\x07\x1a\x0f)\x91f\x0b+(=\xbd\xbb\\\xa6\\\xc6\x11rYU^\xe3\xf6o\xc55\x97\x0bf\x8a\xdb\x8b\xc7\xe1\x03\xed\x9d\xdd\xc4\xec\xc8\xa8\xb3%\x87\xdb\xd9\x92Y\xd6\xcc%\xf1b\x1b-\xc8\x04\x03\xb9\xe8\xa4_1\x13T\xd2U\xfd\xcaD\x18\x7f;f\x1e\xeb\xe3\xfe\xb4\xde\xb4N?\x89\x9c\x0b\x92\xf6\x81e\xed\x92\xc1\xdc\xab\x11\x13x\xca\xf0K\x82\xf2i\x19\xb8\xf0(\x12fe`\x82%\xbd\xf2\x1d\x8f-/u\x1c6\xca\xd2Z\x84\x970\xb5\x9d\xf1d\xfa\xd5\xfb\xdb\xe9\xce%\xd2\xf1\x0f\x1eYR\xb1r3\xb7\xf9}\x07\xa7\xfb\xe1)R\xf4\x89\xed\xdc\xe2\x06\xea\xb69`\xea`M\x1f\xf4\xbb\x1f\x9e2~\xf5\xc1\x9d\xe9z\xcbn\xa1\x0b\x1b%n\xc2\x03\x01o\x1e`\x18\x8d!x\x0e\x13\xfb\xb3\xd2\x8d\x9f\xcdQ'\xcf\xe5\xa6$\xbe\xccs\xb9\xed\x8c?\xefN\xdb\x1f\xect\xc95\xf1m\x8cR\x16\xe0m\xa8\xe2[\xf7\xe5\x8b\xf3\xef\x7f\xf6\xfa\xcdk\xbc\x87j\xe1\xa5\x15\x8b\xdf\xf6Kb\xdf9\xefw\x99\x03W\xd9\x15\x7f\xbb\x99hE\xcc\xd9%\x08\xb7M\xfa)\xed^gl\x9d\x9f\xfbQL:_$\xe7\xc9\xc2\x8b\xc9\xec\xfc\xdct\xa7\xe8\xae*\x05\x8dc\xff\xc6\n\x83\xe6C\xdbf\xb3&\x18\x03\xd2\x96\x85\x87\xac\xe3\xd1\xa3\xdc5\\\xa6I\xe3T\xef\xe6Y\x90\xa5\x0e\x0b\x1e\xc6c\xc6\x90;\xcf\xbe\xce\xfb\xd3:?_F3/Y\x9cSF\x7f\x9e\xc7\x94;?\xd7\x1c\xb9\x14\xbf\xf4\xf2\xf6\xdc\x16\xb5J\x93$\xa6\xa3<\x17\xc1\x1cl\xc5\x83\x0b\xa4\xb33Q\xa6\x0fJ\xde\xca<\xc4P\xbe\xdau\x99\xf4\x85\x7f-\xbf\xba\x82\xd7]N\xd9\x8dU\xe12\xfe\xa0s\xff\xe3\x9f\xce\xfc\xda\xc2i\xf9\n;\x8e0\x90\xc6\xfd\xa0\xe3\xac\xc1\xb1\xa61j\xf6\xb2X\xf9\xe6a\x16;\xa8]\xde\x89L\x18\xeb\xbb\x10\xb2\xdb\xc8\xe8\xc7')\xd7\x08\xf7\xfa&L8\xb8/uh\x12I\xc6\xd3\x07\x12B\xb42\x08\x0b\xd5\"\x89a\xebe\xe0\x93\xa6\x89\xdf\x08\xb9\xf4Bo\xccPH\xbb$-;\x14\xc1\xb6l\xba;\x8b\x04i\x1d\x8c\x1aE\xba\xebh\x8d\xa9\xda\x0bl\xc4k\x15.t:\xf9\x1c\xb9\xd0\xbb\x13\xbb\x15\x93\xf4\x974\xf8\x90\xc7\x13+T\xb6\xe3p:\xee7q\x9f\x87\x1cI\xee\x8b[\x1e\n\xa5t\xa5\x9b\xb1\x0f\xdf\x93Mw\xb2:\xad\x18q\xca\xae\xb9E\xc7\xa7\xd5n\xb7%\x0c\xe1at\xc6\xb4\xe1)^\xb3\x0f\xc7\x01\x9dm\x96\xe0~\x83}m\x1e\xed~\xe3hM\x18\x14\x8bT\xa5\x0e?P\x99n\x96\xdd\x95\xfb7\x12#3r\xb3\x1b\xa1\xa9\xb6;\xf2\xd5Q\x8clb\xb1\xac\xdb\x12\x80e\xcd\x96\x00\x17Q\xb4$^\xc8!\xa7\x94\x0d\xf0T\xae\x16\xb2\x9d\x94\xae \x93\xc8F\xf7\x90)\xb7_\x8c\xd2&\xc0\xb5\xb8$\x1b\xa8\xee\xbf\xdd.0\xd6\xf4-v\xa1f\x03\x16\xdd\xd0\xef\xbe\x101QO\xd3P\xd7\x80\x95\xbbe\x86\x1brv6\xcaoW\xf5\xef\xb7\xedv\x8f\xf6\x1c;\xb4\xf7v\x0f\x9c\xad\x8c\x90\xe63{_\x7f\x1f\xeaPw\x18\x0b\xed\xc3\x83\xc696,s^\x80q\xb3\xcc$\xd0zE\xe0!\xdd]F*\x0c\xb7\x02\xbci\xad\xbe/\xeaH\x04\xb5\xdc\xd5\xd4\x00\xfc\xaed\x84\xe1*\xc3\xda\xbe\xcb\x1f>\x8e\xc4\xf6\xc6\xe9\x14/lx\x86l\x17\nT\x85\xd0^\xfa\x94\xe0\xe4\xd3a\x14\xe0}\xe4Jp\n\xde8AQ\xdc\xa7\x82\xaa\xaf\x91\xc7\x01\xee\xa3Q<2\xdc\xa1P\xe2\xf8p\xbd\xeb\xd1\xde\xd6\xa8 \xc8l`\xa2\xf8\xfd\x928\xf4\xe8\x11\xa6*\x18\x0f\xa6\xec\xd6*\xfd\xde\x9b\xba\x0c\xd8\x9fR~\x96\xb7\xa5\x18\x8e\xa1z\x04J)Af<\xd4Ub<\xdcu\xd6\xfa\x87\xd5\xfbF\xe2:\xa1N\xe5\xd5W\xd5]\x83\xa69\x14wx<\xddd&H\x98\xf8]|e\xf8\x18\xba+`i3b=\xe5\xa3\x0d{\x0e\x96\xbc\xc1(M\x0b\x17f.\xac\xd9\xaep\xe1\xca@1\x91\xee\xca]\xbeAO\x8b\x99\x0b\x0b\x17\"\xb8\xe5w\x0c\xaf\xe8\xa6\xbc\xa9\x1fA\xcd\n\x8a\xb7\xee~\xfak\xbc\xad[]\x91\xeaA\x94Yy\xb6:\x8b\xdeC\xdel>L\x91\x8d\x85dZ\x96\xcb\xfd\x0f\xdea\xb91\xd1\xdf\xcd$\xc6\x07j\xeb\x9e\xa2\xa1>|P\xbf\xaf\xf7b\xea\xf7\xaaV4$\xd5\xbd\xc6 \x1f\x9b\x1e\xf04\xc4\x17D\xf4\xcbh\xae\xde\xd7\x04I8\n\x0d\xb5@.\x1dQF\xe7 &\xfa\x042\x16C\x9aO\xabW:\x13\x96\x11\xbd\xdd\x0e9\x06Q\xa8Z\xbd2\x0e\x10)z<\x13?\x85F1YH\xc9\xf7\x13\x8c\xcd\x8cX/\xc8\xee\x1e\xeb=\xd5\xf6zz\x83\xe8^\xbf\x8a\x12\xc8{\x95@H>\x17\x8e\xaa\x885\xe7\xf0*\".U\xb1\x00\xbdI\x84\xad\xeb\x99\x08\xa2WuOY\x94K\xc5\xdeM\xb5\xc4L.\xc18v\xb5\xc8\xd5\xfd5\xb0B>\xb9q\xe1\xd2\x85\x95\x0e\xfd)\x9a$\xdalT\x17\xf8\x84h\x9e\xbc\x83\x11\x9c\xc3),`\x08\x9e\xf6\xddk\x18\xc1E^BW\xc7\x19e\xf4\xb4\xa2wT\xacY\xc3)\xcc`\x08\xef\x1c\xfak\xa6\x16\x7fA\x8b\xd3Z\xaf\xe5\xe2\xd7\xa6\xe2\xcfD\xc5\xd7\xean~F\xf9\xb9\x8f\xd62u#\xe3&\xf5\xe5`Q\xad\xbe\xba\xd7\xcey\\\xe23\x0c\xd5\\\xb3\xbb\xf2\xf6Zgy\x85+T.\xae\x04;s\\8\xa7\x909S\xfc\x06\x9aU\x1bB\xc4\xa1\xefJ\x0f\xd4\xb1\xb5\xec\x10\x1ea\x90|=\x8dz\x0d#8Cer\x1e\xd9\xc8:?g\x89\x0eg\xe7\xe7\xa6\x0c\xd3_\xc0\x08^H\xaf\x91\xeakzj\x87\xf6\xbe/\xea\x0e\x83o)\x8e\xc3)\xa4,\x984*Vk2H\xbe\x84\x11|\x81Z\xd8\xa28\xd1\xcbD\xc6\xc9\xbe\xb4\xdf\xba\xf0R\xcc\xe3J=&n\"\x03\xb5pQm\xb5\xf6L]\xbe;3F\x95\xd3qc\xec\xb1\xfe\xd4\xb7{\xbc\xaf\xf5\x0b\xc9\xbe}\xbf\x90\xaa\x8c&;\x88`\x01o6\xb3\xd31\x99V'\x83~2\x89\xbey\xb3\x19\x06\xb5* \x94#2\xaf\x8eLq\xe0\x88\xca\xbe\x1a\x99v~\xab\x93\x1b\xde\xcf\xe2\xb3\x91D\xc4\x99i\xe8l\xc48\x7f\x9cbXs[f\xf3t\x8aM\x90\xa6&\x8c\x08m\x8acx\xac\x8fi\xac\xb8\x9ad\x06\xa9\x81\xbbE\x1d\xeb\xa5\x80\xbd^\x95\xdf\xfb*_\xa7\"\xc0@\xe5\xfe9\x8b\xfe\x1e\xd3\x15WytI\x1c\xf8\xc8K\x15G\xd5\x92$\x80a\xd7k%\x81O\xbd\xb5N\x0c\xc8\x9f\xbfB\xa5v\xb5\xc8\x8d\\\x849\xb6T\x8b\\\xcaE\xce\x88\"l\xacJ\xcfQ\x97^-r^*\x82\xca\xf4j\x91\x0bE\xee\xf9^6\x9f\xab\x1d~W\x996\xef\xa7\x02\xf2\xaeZ\xe8z\xe3@\x94g(\x17\x9c\xc25c\x0b\xaf\xe7\x1b\x07\xfe\x13\xb4:v\xe1\xda\x85\x17.<\xab\xa2~\xf2.\xc0\x08|Z\x1d\x96\xef%\x04\xde\x0d\x158p\x06\x98\xcayA[\xa3r\x9e\xd0\xdb[`\xcf_\xcf\xe7 I\x8b\xe7\xecw\xad\x00B?)\x06\x10\xbb\xc0 vy\xf4T\xf6K-\x8f\x1d\xbd\xd0w4\xb7|6\xf5\xb6\xf5\xc2\xa6\xc4=\xc0\xab\x1e\xec\x1bqtY\xbf\xb1\xb5\xa5\xda\x1a\xc2\xd7\x06\xf8Um\xef\"\xbb\x9d\xba\xd0\xd6i\x9d\xf1\xedE\xed\xdbi7\xf4V\x84\xe9/\xf1\x1b\x06jY\x91$\xf1.9\x98\xff0T\x7fc\xe8\xf4\xaa\xbeYfYR\x83\x88\xe6\xef\xcf\xf4\xef\x0bQ\xcd3\xbcvi~\xed\x0b\xe6.P\xcd\x1d&>\xb9Xf\xd3\xfa\x13\x0ch\x8d'\xbd\x96\xd0P\xa0\xb4\xfaE#\xf6 \xe9\xed\x19\xd74\x98\x9b{\x9b\xd7\xf5\x16\xe7\xc3 \xaf\xc1\xed\x08\xe6.<+\x0e\xa2\xe6\x86_b8\xc5\xd7\x88\x88\xaf\xd1T m\xe0Zy\xf0Y\xa1\xb1q\xe1\xa5az\xcf\xcd;\xba\x10\xe3\xcfD\xccJ:\xa83\x11M\xb6\xf4\xa2^v\xbc\xbb\x11\xdb\xe9\x16 3\xf5\x94\xed\xae.i\xdb\xca\x87<\xad\x0e\"\x8cA\xf5\xa5\x89\xb7\xaf v\x85\x15\x8e\xdbm2\x85\x11:\xf5\xa7\x95\xcbq\xce\xb7\xa11\xfbv\x86W;65\xa1@\xd3\xb0\x8cx\xb0\xd7\xd3i\xcc\xfa\xaa\x08\xf5@\xda\x03\x9ewO7\x89\xa8Q\x81G\x10\xa8\xf38gv[\xcd\x89\x123\xef\x19S\xa5.1m\x82M\x1c\xc9\xd2\xd4\xf2\x8d\xf4\xa8Hm\x00#X\x9e\xc0\xba\xc6\xe4\x81\xb9\xb9\xc7k\x83]\xa0e\xfb\xa8\xb1\xc0\xdc(C\xc9\xcbn\xe1lh\xe3\xa0m\xcc\xd03YG\x13i\x1b3\x96[\x88>\x96T\x0c3\x0d]\x14\xe6\x82V%Bg\"+\xea\xd8\x0f\x8dCO>+T4\xf4\xe9il\x0dO`i\x9c\x99K\xb4\xa7\x88\xf91\x98UV\xe8\xce\xb80L_\xe6\xe4\xfa$\x1fox\xae\xf0\xfc\xbb@,J\x11\x7f\x86\x90\xd9\xf4H\x8cP\x86^\x89\xc9\x8c,\x9b3\xce\xe1\x94\xf6p4b\xc7y\x8fW\xc2P\x13\xeb=7\x9b\x9cQE\xa3\xe7 \x171\xf1\xde*OT\x83\xf0\x0d2L\x94\xb2\xfd\xc2\xb7\x1d\xfdF\x16u\x14\x1f\x0dI\x88\xbf7\xa6\x89\xbf@!N\xaaU?\xf5\xefP\xba\x93\x8a\xa9\x03\xba\xa0\xfb\xe6\x1dm\xad\xdc\xc9\x80\xa7lS\xa0\x8c\xd3\xdb\x96\xd8\xf0r\xd8\xf5\x0b\xfa\xecBV{#D[\x16\xdb|'\x97}\xc7\xfc\xd0\xd9\xd4o\xc0\x12\x13\x99)\xe7?(\x82o\x99\x88P\xa6\x91\xfa\xeb\x0e{=}\x0c\xca\xbb\xfbN`\x10\xe1\xc8\x85\xe0\xce\xc7\xe2\xbd\x9e\xfe\xbe\xd0Qc\x97\xd4ZE\xcd\x11\x8b\xefnpHc\xaa\xc6\x08o`G.\x84\x1b\xdc\x0ehf\xb2\x1a\xbd\x816^=)\xc5\xa7\xcf5KR|\xfat\x1c@\x1bX\x8c\xfaqh\xf0>\xbf\xfbl\x9b\xf2\xae\xe8\x8c\x11\n\x0b]s\xe6\xf92y\x11f+\x96\xb0K\xd5R\xf0\xd7.I*\xf1[vfNT\xddEV\xca\x0c\xa4#\x15\xc2J#\xa9\xe5\xc6S\x18V\x0c\xfe.\xc46\xcb\x1b\x94\xd7\xa6\x0dO \xd5XD\xb8'\x1aMh5K\x0c\x0c!\xd0\xe3\xa4\xf7-#M}\x92\x83\x9e\xc8\xe9/c\x91\x9e\xe0f,\x0f\xbf\x86\x89a\x8cN\xf4\xe2D\xea\x15\x8d\x83v\x1b\x13\xc4o@\xc1\x9aB^7N\x84\x81\xb8\xdc\xfd\xa6\xe6\x9eAy\xdc?\xd4_B\xd4'\x0dQme<\x81X\xbf*\x82&\x06\x1b\x9a\xee.\xd7\xf6r\xa8\x8e\xc4\x85\"\xec\x84\xb2\x92\xe8D\x83\xa99\x02\xa3\x00\xca\x9e\xb7\xd0\x19$\xd3\x96ZWJ\xb5\x96(\xbci\xcb.P\x0e\xbe\xbd\x859\xfdoI\xff[\xab\xa5f\x98\xb3\xfc\x94\xb2\x8c\x1c}\x99\xae\x8d\xca0\xba\x9c\xa1r\xce-\xa3\x84\x87~)<\xbe}\xcb\xcf74\xbb\xeb\x8b\xf2\xb3m\xb1*\x90m\xdf\xb0.\"8BUS\x01\xb6\xd6^LB\x0e\xc0\xf7\xd7\xac S,I\x05\x0b\xd5P\x05\xf8Z\xaa\xd2a\xe2\xda\x8d\x0bW\x0e~\x9f1\x03\xf7\x8d\x9e/\xcd\xee\xbb\x8b6&'\"-\xac\xa0\x17\xe9\x89\x03\xb1\xc8\x8a\x12\xea{\x17\xdfy+\xeasS\xec\xe96\xa2\xce\xb6\xdc\xb4?\x0c\xb4#\xe0w\xbab\xae\xa3\xf8\xb6h\xd4\xdd\x15\x1a\xa6\xa4\x1d\xfd\xaa\xec\x16\xe9',\xc3d\x82\xc5\xf4d\xe3|\xfa>^F^\xba;\xe0\xb6w$\xe3\x95\x87\x07{\xfa\x87/\x85\x86E\xf7\xa4\x7f`|dj\xacP\xd9\xe8\x1f=_z\xab5\x99\x99K\x98\xda\xa4\xcfJ\x8db\xa6\xdc\xb1\x0e\x83*o\xea\xeb+\xe9\xeb+\xcfr\xf3G\x05^\xe8\xee\xd5\x07D\x01r\xfbGu58\xae(\x0f\xd0\x18R\x81 \x03H\x05,<(*`a\x0b\xa9\x80\xd1\xfeQ\x85q\x9bG\x05\xfcC\xe2\xbd\xcd\xfb\xd1\xea\xbb\xdbm\xc1\x88o\xc1 '\xf8\xf8\xb3\xd5\xca\xc6tW61\xf7\xc6\x1d\xd9\xec\xcf]#L\xa6fu\xe5F\xfb\xb8F\xf3Ul\xf1\xbeb\xf3\x03\xbe\xcf-6\xc3\xa5d_tr\x18\x1b#\xdd0\x9a\x9177k\x06S\xab\xc0tQx&U\xeba)\xca\xb1\x9e\xb4T\x8f\xc6\xb5\x80\xd2\x10vs\xb8\x98\xe0\x11\xaf\x1a-O>I4~\xba^\x1da\x14\x9f\xfa\xc4\xd3W\xb6+\\Q\x95\xfe\xb1\x98S\\\x8b\xb3\xfbG}'?Zn\xce\x15\xfa\x86\x03Z\x7f\xa3\x03\xdav\xb2eu\xe9P\xf7\x14\xcb \xe3U\x7fx\xa1=\x1eO\x0d\"YHE\xb2\"\x85\xbct\xc8\nq\xff\x97U1-\x9eF\x8e\xb9:\x98\xa4\x8fm\xeeU]\x19\xd2tm;\x19b\xa0<\xe5\xbfQ\xfd$\x99\xbbF\xa0W(\x11>\xc2\xdc\x92{{\xdb\x9cv\xa9\x06E\x8eD\x8e~\x0c0\xe0\xf2\xa1nu\xed\xa6\x99\xba\x9a=!\xf22uW\x1bR\x9b\xca\x92\xf7\xa2\xb1\xd2\x90\x07\x86\x84\xd0\x067\xd9\xbdA\xd5W\x92\xfbP\x0e\xaa'4\xeeC9\xa8\n]\x89^F\xe3N\x94\x8as\x06=t\xf9v\\\x81b0\x0e\xbb\x1axg\x8d\xd0\xa8\x02] 4\xab@g\x08\xad\xe6\xdf\xa3\x07#\x89 \xb2L'\x1a\xb1\x84\xee\xae+4[\xc7\xf8\xbf$\xe4\xd8}\x87\x1dJ\x82\xd2\xbb\xc8\xed\x8b\xd7\x02,\x12\x95\x8a|?\x8eVABD1J\xae\x93hyElV_V*\x8c\xc2FQ_\xc6\xceD\xa5\"\xb9\x90Q\x14\xf3\x9cB\x87\xda\xbcA\xf5\x87\xd2P\xe7c*.;\x96\xb6sM\xc69\xc4>8\x05\x9f\xa2\xba\x9a*\x93\xc7?\x10^\x12Z\xfb\x1e\xdaT\xe7\xb5\x96r\xcd\xca\xa9\xdc\xce\xe4V\xa0\xab\x07\xa7\xd3P\x85\xc6\x03AWE\xbe\xca\x86j\xea]\x0e\xca\xebo\xa8\xc2`\xfe\xafV\x91\xe3\x87\x81\x94\x80\x96MT\x92U_mGovw\x1d;\xb4\x0f\x1d\x17,\xb1&\xa6(5[\xdej\x94j\xe6S\xfc\xf0\x15\x9f\x91\xf4\xe1+\xe5\xcb\xf0@\x15\xf7\x8f\x0c\xa1\xd4\xb6\xb7D\xe4\x82\x87\xb8\xbf\xe7\xf2\xdb)B\xb5\x1e\xd6\x18E#\xaeeW\xb7>p\xa6\x91\x8e#\x9d\xba\x94\xa9Kx~\xb4\xd8\xce\x1cSX[\xd8\\\x8a\xa9\xb9B`\xba\x01\xa9\x0f_\xb57\xd0)\x0b(\xbb\xd4\xc5\xaf\xd2\xad\x86PhV\xcb3\xfewXe\x8bs\xd5\x04\xbf\xdc\xf0\n\xa1A\xc6\xc8\xf8\xe1\xd1c\x99A\x13\xdb\xc7\x95%\xcdW+\x85\x9e;\xd0\x05%\x90Z\x90L\xac\xec\xd4\x90\x07\x17\x89\xd8\x9bh \"\xb8\xc0s\xb8\x85\xe5\x03\xc92\xfd\xa3\x8dn\x83\x1bL[\xb8\xf0\xba@I,\x9d\xa7^|\x96\x86\x1a\xc0)\xa6\xc1mJ|k\xe8\xfe\xce\xf8\xf3\xeex2\x9d\xb6o'c\xfbthwN'\xb3\xb6}:\x9ct'\xb3\xb6s\xea\xdc\xdac\xeb\xf1\xd4\xb1\xe9\xb3\xd3\xd6d\xe0\x8c?\x9fL\xa6\xb7\x93I\xd7\xf9\xf0\xd4\x99\x0c\x9c\xc9\xf4\xd6>\x1d\xe1\x1b\xb7\x93\xf1d\xea\x14_o?p\x9cj^3:\xdc\x9d\xc9\xc4\x9eL\x9c\xd3\xea3\x81\xebGN\x83\x1b\x8a\xe9\xc8\x02\xc5\x0c\xed\x1d\xb0\x9b\xb8\x98N\xf6y4#\x98RV:\x98X\x16r\x14\x11\xfa,.O\x17s\xa2\x8cLGa^GLq\xab\x94C\xff\x83>f\xa2E\xe5y\xaa3A\xc9!%\x18D\x8f:\xd16\x8bH \x8a\xce\x89f\xbf\xf9\x1a\x99I\x06C\xec\xab_\x05\x90,y\"\xf8\x00W5\x84\"\xb4\xa2[\xf1\x14\x026 \n\x8c\x11x\xdf\xf3\x17\xfa\xb8\x07w\xa6\xb4{\xbb\xfa\x83\xc6\xdench\xc3\x1ab\x86\x1b\xb6\xc5\x8f\x92\xe2\x8eK\xdct\x00\xbc\xcf\x11\xad\xd4\")\x9d\xc8\xef:5}\xc35\xfc-mj\x8a\xedL\xd8\xd4\xf4,\xe8\xf0\xae~\x00\xb9X\xe0s\xcb\x07\xe5Q6)\x82\x009\xb9\x15j\xc9\xbcd\xa0\xdd\xf6\xe1 \xcck\xafg'6\x19\xfbS\xa3\xdf\xceR\x90g1\xf7\xd8\xbf5=k\xa1\xbf\x8d\xfa^\xca/s\x97\x1eh\xc5\x074\xac\xd1>\xb6F0\x87SX\xc2\x10Z-{\x0ef\x031g\xa1s\xfc\x9b\xd9k\x17\xe6\xdc\xbekKq\x13\xef\x8d\x87\x06$\xbc\xbb\x97\xc2\xae\xde'doW\xef\xbf\xa2\xca5\xd9\xa6\xc8c\xe8z\xc4\x9cD\x98G\x01\x06\xbcj\xde9w\x9e\xa7\xbc@\x9d\xc2Z,1)\x87\xa8\xaaz\x8c\xdeu\xca7\x91J\xee\xd3\xfd\xb8\x12\xb9\x0e\xee\xd3\xd9\xbd\xdd\xaa2T\xa8\x83\xf4\xa9\xb2\xf7vu\xc4\xe8S/]tW\xdeu\xd3\xb0\xcd\xc2\x98W\xb3\xf5TMA\xcb\xcb\xd5\xaa\x9d\x8aO\xde\x95\x88\x98\xc1+\x13I\xcb#\x93B4\xc9\x13\x9e'\xe8\x0d\xeeA\x1b\x12\x0c\xbc\xe62^\x1c\xd0\xf9\xdeu\\H\xee\x8f\xb6\xc2\x15V\xd1o\xe44V\xf6eb\xde(!\xb4\x01\x05\x9e>\x0c\xa1\xd3wN\xf06K\xd4\xe9\xc0\x10\xda\xed\x88%TW\x90\x85N\x13\xb1\xe9\x91\x0b\xbd\xca$Et\xa4\x9d\x86\xbb\xc7D\xdb\xdbm\xce\xc4_#\xec\x98d\x12\xf8 \xe8\xeb%\x12\xb1w\xe9\xd2\x12\xe8\xa0\x10N`\xd8\x18\xc2\xc1<\x82=\x9d\xa8\xd2\x87\x9d\xaa\"\x0b\xe3\xbbt\x0f\x8f\x0f\x0f\x8ew\xfb\xbb{G\x07\x83\xdd\xfe\xfe!\xd9\xed\x1dm;\x01\xb9\xaa\xfb\x94\xf9^1S\x01\x13\xe3\xa8\x04\x8b_;\x01{\xcc\xc2\xbeu\xe8\xfa\xf7\x1d\xf8\x10\x1d\xeeR\xb1SR:r\xfc7\x92!w\x9d\x0b%^3\xd7&\xe8\xb4\xc3\xaf\xbcW*-\xd8\xf9|\x92\xb4o'I\xfb\x83\xea)\x83Ex\x1ew\xda\xd3\xde\xf5\xb8\xd79\xf6:\xf3i\xfb\x83\x9d@\x15Vv>\xef]\x8c{}\xcdS\x9f=\x8d\xc6\xbd\xce\xa1\xe61\xe5\xe0k/N\xc8\xcb0\xddvI\xe8\x8e\x91\xa3\xbd #`\xbeqR\x95\x10\x05\xb6yc\xa1J\xd3p=\\\xe0\xbf\xd6\xc6\x91\xe6\xd7\xcfN\x8b\xef\xecJ\xb3^\xe8\x89\xd9\xc9\x9e\xdd\x10\xa2\x9b\xa1T\xea\xbd:J\x11\xe4\xae\xa5\x19e\x19\x8f\xda\x95&\xd9e\xb1r2j\x95\x00\x87,\xac6K\x14\xa3\xdd\xc4xN\xf3E\x118\x85\xb9\x9dv\x93e\xe0\x13{\x80j\xa7S\x18\xc0\x10\x8e\xe8\xa8=\xa9X\x84}\xba+r\xf7\x15uK\x03\xb7\xdb\xab\x8a\xd8\x99V \xe7\xa6\x8f\xbdf!\xc9\xcc\x01\x19\xf7a\xb2\x12\xe5W\x86iC)4\xaf\x86\xb2-\x8aGL\x8c\xa1VE\xf1\xfcc\xd3\x172.\xdaf\xf0\x04\"\xe6\xe8\xd4\xc7\xb8q\x81\xed\x8d\xb3)\xbbH\xe6\x9c\x98\xf5\xd1\xa6\xd8\xe7\xdb\xae\x84\x9eN\x18\x82\x0d\xa9\xea\x98L\x08T\x1b\xac\xa7\x86)\xe0\nd\xf2\nT\xef\x1f\x89\x83\x93\xf0\x8d\xd0\xd2\xdeV\xab$\xd5x\x18\x1b\x86\xb1\x8e\x08\xf7e\xae\xe0\x18\x96\xa2\xdfz\xb9\xbe+\xe4\xee\x9f\xe1\x98L\xb7\x8f\x99ne \xc1\xec8~*\x99/\xb9\xd3\x05\x0b\x97!\x9clx<\x18\x92|\x1a\xcd\xb2%\xb1\\\x85\xc1,32,E\x8es\\\xbcs\xbd\x8a\x82/\xc9\xec\xcc[\xad\x97\xe4\xe38Z\x9d\xf9\x0b\xb2\xf2`$=|\x1e\x13/%\x7f\xe3\xd3O^\\c1\x16J\x0d\xbf\xfe\x8d\xd5\xb2\xf2R\x10\xceI,\xfdN\xd4\x9a\xb9\xa1\x1bH\xd7Wk^\x9eh\xf0\xa9\xaf\xa4H \x90\xe7\x87\xf6\xde>=n*H\x85\x8f\x0ev\x9dM\xa3\xb1\xc8|\"\xed\x16\x13\xc9e9\x95\x1a\xcc\xc8\xdc\xcb\x96\xe9\xb0z\xab\xf4;\xea7\x81kj%\"\xf3Q\x8e\x04&\xaa\xcc\xbb'\x90L)\xf3^= \xb2\xa2\xe7d\xe5\x05\xcb-Z\xc8\x12\x12\x7f\x97\xb0\xd5\xe8\xfa\xd1j\xa3\xb6x\xbf\xceg^J:i\xb0\"\xd6\xe6-\xa2\xaf\xc5G^J\x9cn\x1a\xbd<{\xcd\xbc@m\x8d\x1dBs\xda\xc5\xcd\xb9y[\xbd\xcd+=\x9f/#/}\xe0\xaa\x830%\x97\x0f\xdea\x1eD{X#T\x88\x8fX\xe5<\xee\xb6t\x8c\xe9r\x94fQ1\xf8\x0f\xb5\xfd2\xba\xab\x07\xd0\xfaN\\\xe5\xfel#\xb0{.\xc4]\xe6`\x11\xcco\x1c\xadB\x03rC\x8b\x9a\x82H|\x02|>\x8f\xe2\x95g\x88\\EI\x827\xc6\xfc\x91\xe7\x16\xb4!\x98\xa2\x0b\x90\xf6\x12\x92\xc0K\xec]\x90|\x9c\x85\xbecGx\x82\xb2\xd1\x1ek\xfd |\x1bF\xefBxs\xb3&C\xa0\xf5\xa5\xd8\xbb\xba\xa9\xf1M\xc40\xa7J\xa9^u)\x0e\x85\x9e\xf0%\x17\x97\xb2\x9fB\x1f\x8a\x9c\x14\x94\xc9\xe7E\xc6\xfd)\x15\xde\xe4\x9f\x98\xc7\xca8{\xcaR\xe8\xe2\xc5\x81\xf0\xf9\xadY\n\xb4yw9\xfd\xd0\x17\xf1\xb0\x08\xbf\xc4\x17\x10\x8dg/\xf0\xf9\n\xba\xdel\x16\xd0\xc9\xf1\x96\xdfo(?\xc7\xf2AJV\x86\x02h\x14\xe9\x06\xa1\xbf\xccf\xe43\xe2\xcd^\x87\xcb\x1b}\xd1\xb5\\\xf4\x87q\x90\x12ZV/\xe8I\xd3\x9f9e\xdc\x99\x11\xb2^\xdePz\xb6\xfe\xeb\xe4\xc6\xc1#\xff\x07\x1f\xc4dnma\xa5\x94\xe5\x8a\x92ou7\x08g\xe4\xfa\xf5\xdc\xb6\xfe\x8aU\xc9\xcc >\xefM\x16\xa2H\xef\x7f\x1c\xb0\xe0\xb7\x91\xe4\x1a\xae\x176kb\xec\x82hc.f\xc3 \xaf\x8a\xdb6^\x1c{7*\x97\x01\xedy\x01U0\x85\xb7\xf9\xc8l\xed\xbe\xe2\xc1\x06\x14\xcc\xae\xba1\xca\x9fY\xe56\x8b\xfc\xc9E\xf5+*\xd8-\x1cX\x8c\xaf\xa6t%\xe8\xdf\xee\x8c\xacc\xe2{)\x99\xe1\x8d/\xf9Q\xccq\x0d\xd8\x05\xb6\xea\xe3w\x02\xbf\xf0\xf9\x1a\xef\xb9\xcfh\x81\x11\xa46-A\x85B\x83\xd0\x8f\x13\xcd\xb4N\xbe\x03\xb3\xcav\xe9\xd7\x8c\x06W\x90\xbe\xee\xebQ\x01\xaa\x11\x0c\x94y\xf4\x1d\x97\xc5,\xb0o\\\x8c\xb2\xb6\x82\x11\xf4O`\x05O`\xef\x04V\xed\xb6\x03\xb3\xb1U\xee\x12\xa5\x95+:\xb4K}\xb78\xd2\xcfTT6\x91i\x8e?\x0c\x19\xe0\x94\xa7\xb2 \x12v\xbdl\xde\xf5\xc2\x9b\xd7s\xd4\x92\xb1\xaf\xdd\x95\xb7.<5\x9a\xee\xe6\xb2\xf8\xf3:\x9f\x08\x18*ME!\x11M\xe1\xd7\x07lj\x9c\xdas\xfa\x94\xd2q\xd2%a\xb6\xc2\x10\x8c\x82c\xcb\xdf\x87|\xa9B\xca\x0e\x97\xc1\x97\x04\xbb\xe7\xd8\xec5g\xdc\xa3uX\xf3`IX\x8a\x8d\x08\x1d\x9b\xd0\xa5I\x17/_U\x12\xdbU\x19\xbf\x9e\x96\x89\xe1u\x13V\xfe\xd1#\xa6\xb6\x17\x00\xf4h)\xb8\x01{\x8e\x1cF\"C\x8aO\xc6{\xd7x\x04\xd9\x88\xa1\xb2K\xcb\xdf\x1aO\x8d\xb6\xe1\xa9x\xff\xa5\x86\xa7z\xf8|\x13\x86\x19m\xc90\xa3&\x86\x19\xd5\xb3\xf25c\xba\x9b\xf0\xd4\x85\\4\xe7\xa9\xfa\xb23l\x99#\xb4\xbe\xc8\x15\xd26\xfd\xb3\x9b\x9ag\x97(\x86]\xaf\x96\xfa\xc7\x94\x86]b|2\xfd\xf3s|\xbe\x8e\xc9<\xb8\xd6\x97\xb8\xc8kH\xd6\x9eo\xa8\xe6\x1d\x9b\xda0[\xe9\x9f_\xe7\x87d\x03\x03\xcfj\x188\x9a\x07\x1c\x96\xda\xfc\xc7\xc1\xc5\xb3&.\x8e\xd1Y1l\x8c\x15F\xa9wI'\xc7b\xfe\xb1\xf69\x9c\xc29\x15\xcb\x87\x16\xba\xb6;\x94A\xb8p\xc1\xf4\xf37c\xfa\xdc\xba^-\xc3\x043e\x9f\xd3B\xf8\x13o\x03^\x18\x04\x1c\x99)\xa0[\xe5\xdcD|i\xe99\xc5\x07J8\xf0\xef\xed-\\\xd2\xff\xbez\xef2\x08\x0f\\'\xff\xa0e\x18\x96\xc0e\x97\xc7\xe0\xcd\x85\xbf+\xee\x95;u+\x1cbIy\xc3R\x8dZe\xe4\x0c\xf43\x17;\x90\xe5\xa4\xa2\x953?>\xe4\x08U\xfd\xbe\xf8h\xf8\xd3\x8c\xb6>\xdb\xbau\xc1V\xb6n]L\x03/9u\x01%\x9c\xa2\ns\xab\xe7^\x9a\xc6C\xb81T\xee\xc2\x95\x1e\x1b)e?3\xb8XB\xc1\x8a4\xabb\xdfsY\xce6\x9a\x15\x17\xce\x0c\xebb\xdfsa\xb6j\x9f\x97R\nm nk\xd3\x12\x01\x9f\xfa\x17zq\xbbA\x9c~F\xc5ii\xcf\xd0\x9d\xb8\x14\x1b\xf0\x85Y:\xa5}{Q\xb9jh?ct\xa3\xf5b\xfcL\x12\xbcooa-?(Dn*\x8c\x1b\xa6\xab\xd4\x0e}\x8b\x11\x89\xfc\xab\xe8!\xff\xdd\xa58\x1b\\di\xed\xb2\x89\xcf\x15\x8f.YF\x05\xac\x0b\xa54\xda\xd9\xfc\x971\x05K\xf5\xf3\x85\xe8_-\xd3\xae~\xde\x8a\xb78F\x99)\xbd\xf8\xdc\x8c\xf3Q\x0br\xf8l\x9a\xb3,\x14\x9b\xbe\xa0#\xf8\x82>\x91\x80\xcb\xf13<\xf7\xe0\xdf\xf2\xa3\xb7\x14\xfe\x96\x0214f\x82sQ\xbf0\xb5\xa9^\xe4O\xb9\xb3#P;\xef\xca\xce\xe9\xf2\x0cV\x84A1\x00\xbbT\x86\xc1Mv\x19\xe9s\xc5\xe3f\xa6lt\xcd/\x94\xd1\xe3%\xa5\x14|\xa7 \x19\xf5\xa3\xd0\xf7R\n\x1fJt\xf5e\xc3\xb4\xd5\x91Fq\x98\xe4\x0d5\x11\xea\xb2\xb49\x04\xebYx\x93.\x82\xf0\x12|/\x84\x0b\x02\x0b\x12\x13\x83T@;\xedo\xca\x11\xaa\x0d%\xa6s+%r\x0f\xc8g6\xa0\x91|\xe6\xae\xcb\xf8\xbf\xe4\xae\xb1\x12h\xc63&\x94\x17\xf5\x1d]\xd4w\xecT\x96\xb0\x80kl\x85o\xe0\x14\xc6\xfa\xbe\x1b\xfb\xfd\xde\x85kZ\xd1u\xb5\xeb\xef\xb5v\x90\xa5\xd9\x17\x81\xca;\xeci\x19K\xd1\x08Z\xd2s\x05\x82n8vX\xb5:\x01\x1aJ\xfc\xa5\x17{\xb4\xc1!\xb44\xd7\x1b\x83pF\xc2t\x08\xd6$\xad\xdc\xae\xab\x9a\xcb\x00o1\xd4X\xa5h\x7f\xa2\xa2?\xcb&\x13W\xa5<\xc7\xa9\x06\xab\\\x0d\x87\x96<\x05\xf6\xabn1PxK\xec\x0f\x9c\xeeY\x1a\x13O#\xfe\xa3N\x8c~\xb1\xa4\x15\x83\x8a\xf5Jo\xf5\x04\x919\x80\xd24\xcd\xc9\x01=\x05\xd0\xa5\x11\xc7\x1e0\xd1!\xbf\x92k\xb3\xf7\x9c\xee\x17Q\x10\xda\xe8KgYU\xdb\x9a\xf8$\x94\x8c\x19\x84oC4\x08\x1b\xbdD\xd3\xb1\x142\xe0-\xb9I\xec\xd4\x19\xf7\xa6SdyI\xf7\x9c,\xc9\xaa0\xdbr\x80\xa0\xdc\x91\x9bC\x02?\xcaB*\xfd\x84\x12\x0c1\x89\x0d\xab\x0c\xa3-{20%q\x9c\xadS\xcc\x00'\xc0\xfa\x19\xf3\x99\xd3\xbe.4\x14\xf0S2\x957\x95\x87\xf9z\xad\xcd:\xde\xf24l-\x02\"y\xab\xf5m\xa8~r3g\x1b\x1e\x8f\xac\xc7\xd0f\x0epmxl=6\xbe\xf8\x1e\xbd\xa6\xc7dj\x14,7 \x93\xe2z2\xc7\x08%\x94\xad\xf8\xe0\xa5\\\x81B\xfa\xbb\xb9Pv\xc6\x18\xd1\xca\x0c\xf7\x1a\xc4'\xe9\"\xcd\xa48\xb6\xb6\xf9\x0f\x0cty\xee\xcf\xbc\x14\x95RK6\x9d\xb6\xf5\xa45~\xfe\xd1\xb37\xcf\xc6\xf4\xc0)J8\xb9\xe3\xde\xced:\x99>\xdd\xb9t\xc1\x9aN\xa7\xd3\xa7y\xf1\xa7xx\xb5\xa6\xd3\xa7\x16V\xcdW\x13Q\xdf\xe7\xa1k\x96\xd2=\xaed\xc3\xf8\xc5\xf2G\xbb\xb7N\xc1\xc2\x01!T\xd9YpJ1\x90\x0f\x19\x86\xa2\x0b9\x15\x816\xf4\xf1r\x81\xbdd\x89\xb5]T%\xb5zyo\xd1\x13\xd3,T\xbc\xc77no\xa5\xc1\xd5\x8865\x0b%L\xea\xc6w\xf3\xfe$\x9a\xee\x189\xb3~F)E\x19B\xa4\xdf\xd49}\x18\xd2U\xd3\x16\xc9\xc5\xfdd\x08s\x83F.\nS\xe4l\x06e\x13#aC\x08M\x9d@\xca5\x04\xaf\xeey\xd5e\x15\x94\xa9xo\xe0#^\x1d\x1f)\x11\xf2\xc2HL$\x97&\x8a\xcf\xba\x08\xf1\x82 \x12\x89\xcc2\x0f|\x0c\x9fK\xa7$\xbf\x9d`\xa6\x9a\x81\xd14\xce\xd3X*\x95\xd5\xed\x1d\xe1$W\xbc\x94,\x82yZ\x0d\xa8#\x7f*\xc6=\xadKX\xb5|d\x07N\xb3\xc2\x8c~p\xf25gp\xf1\xd1K\xe9z([\n;F\xed\xf5)\xce;\xe3yB\xa1f\xf3\x94\x0b\xa7`=\xd9\xa1T\x8d\xffn\x83\xf5\xd4\x92Kq\x06\xfa\xe8\x11\xb4BZz\x12\xf2\xc7\xe8W\x8c\x17\xc9t\x1b\xcf\xbc\x8aQ\xa3\xd9\xa3\xd5\x92\xf1\x04\x9dr\x8b\xdf]o\xbd&\xe1\x8c\x8a\x0d\xae\x8cO]\x06\x0cJ@\x11\x1d\xccn\xf5\x1c\x17Z\xbdMH\x04]4\x8e\xc9\xf9\xac\x95\xe7K\x9a.i\xa2\x8a\xdd/,\x07\xa7`\x01++=CI\xca\x02\xcb)\xde\x8dq\x85D\xf5|\xfaqo\x08\xd8\x8eiM\xc4\x02\x97\x96\xa5\x15W\xb7\xa4xC.\xa8\"#\xae\x0c\xde\xbd3]\x87\x82\x1a\xa7;-\xcd\xd0\xd0\x0bD\x1a\xf4H6\xa8_9\x0d\x0b\xd5\xb52Q\x16\xf41\xc5\x08\x00\xdd\x04eh8e\x99Px\xaax\xb3\xb5\xc3\xb2\xcc\"\x9c\x89\xcc\x0bW\x00>\xa3\xfc|,A\"\xda\xac\xf894\xb6\xb1\xe0q\xe4\xcd[ef\xe6\xfe\x0b\x863\xe4:}\x13\xf8o\x99\x13J\xba\xe5N\xbc\xaa\x95\x0f+\xc4\x0e\xf5\x1e\xf6\x1c\xda#\x96\x8c\x12\xf2\xd8\xab(\xc9 \xb7\xc79\xe7\xd7V{\xa2\xd0\xb2\x89\x08\xe3\xc1\xd2L\x1agv\xa3g\x94\xf8\xf8]\xb2\nR\xdb\xa2\xd2\x99\xa5\xb5\x9c\x8a\x0f\x15P\xd8\xfaoHT\xeb\xe6\xf1\xa6v\x1e=\xfb\x8a'\xa0[\xbb\x98\"\x91\xb2\xbd\x9e\xa3\x0f\xed\\\xd3\xca\xa5q\xf8\xccf\xdf0\xcb\xe9\xb75\xcb)\x95\xf58\x88\x843\x0b\x7f\xc6\xc4\x9by\x17x\x00\xa7\x04H<\xf7\x97QB\x0c\x91\xee@\x7fl\x00\xc3rT!\xc2M\xa0y\x1c\x0b5=$p\x94\x08\xbb\x92j\x02q\x1b\x8f\xee2\xd4\xc5s\xae\xbe\xe6+\x12'\xa8\xd3\xb0\xfa\xdd\x9ea\xd7\x93\xd0\x8ff\xe8\xe1\x19w\xc5wFr)\xbd\xfa^\x8a\xd9\xd4%K\xb2b*\x85\x02\xf6\"\x87\xd5b\x9f\xd8\x87\xfa\xe1\xa2\xc2a\x08\x99\xcd\xb4\x81E\xecD\xbc\xc8\xc5\x82\x15\xe6\xbe\x06&%\x0c=\x0dm\xe2\xf5 \xc2\x9a\xcb\xf2@\xa2L\xe5@\xba\x88\xa3wH\xc61(\xacm\x85Q\n^\x92\x04\x97!\x99A\x1a\x81\x07,\x14uK'?\x88\xcf\x95\x94\xaa\xbb\xde\xdePdG\x96\x143\xe6\x8a=[\xea-'\xaa\xa1[\xaa\x81\xa9\x80\xdaT\xc0\x10\x94V\x0e\xbc\xdfD\xdb\x08\xaf\xdc\xd6\xc9\x8a\xe2c\xa2R\x86#\x1f\xa5y\x9b.\x89\xc4p\xd9\xee\xa1Ccv<\x91\x01\x9a\xca\xb9\xe2 \xed\xe9\xc6$S\x9dW!$\x96\x91=\xffU\x8a\x1a\xba\xbbg\x88\x18*\x0fG\xb0\xf3\xf2\x00\xadG\xd6\x10\xacG\xdej}R!\x8a\x8f\xad\xc7\xf4\xc9\xcffQZ}d=f/\xad\xa3Dy\xf4\x04\x1f-\xd5w\x9e\xe2\x83\xcb\xf4\xa4\xa0\xa3\xd2\xb0\xb7\xbal\xc5\x89\x17\xa7lH\xbcru\x8f=~d=y\xfax\xea\xec\\\xd6LF\xa5\xc2pL\xaaI\xb4`\xb8m(\x8a\xd2%\xba\x93\xd2\xbc\xf3[\x11\xfd}\xa7\xfb\xe2\x8a\x84\xe9\x8bU\x90\xa6$\xd6)\xf9\xd5\x83t\xccc\xa1.\x02\xe5Z>\xfd\x84\xf6\xee\xbec\x07.&\xd3\x0d\xba\x9f\x15\x14\x93\xb6x\x80\xc0\x1f\xc6A\x9a\x03\xf7\xf6\x8f\x11\xf8Q\xb6^\x92k\x06:\xe8!\xe8M\xec\x85\xc9<\x8aW\x1c\xdaG\xe8\xf7\xbd$y\xb3\x88\xa3\xecr\xc1\xe1\x03\x843\x9d8;\xd8\x05r\xc2\x8f\x00\x9d\xc1j'\xffJ\xca#o\xd2\x9c\x07\xfa\xd3h\x8a\x06a\x1c\x0e\xbb0\xc5X\x0dZ\x89\xe9\x1b\x18\x1bh\xede \x91\xbe*\xc7&}\x93\x91\x96\n\x85\x05\x1f\xc2\x1ac\x92d\xab\xd2\xf7\xdaSY\xd8\x8d\xc2\\$\x0b\xd0\x81\x0e\x01\xb1\x17\x84\x96\x0b\x11B\xce\x83\xe4,\x9d\x05\x11\x957\xe4\x81\x11$*\xb7\xb7`\xb3j\xa8\x18\xe7\x82\x87\x02\x11\xfd\xcd\xc46\x17\x92\xaa\x16\xef\x8a\x874k\xf5M\xf3\xebi\x07\x9bac\x19\xe7\xb8)\xa3c\x9b\xcd^\xb2A\x85\x86{\xe03\x92\xa4qt\xc366\xff\xb1i\xb3\xbe\x9en\xa3\xaf\x90\xed\xb8\xdcN\x1cw\x97A\x92\x92\x90\xc4\xcf)\x1f\xc2\xfd\xe4\x82E(3\xb5\x1c\xc1_\xab\xf4V\xdf\xe2\xdc\x88&\xab\xe8\x8a|\xc2\xdb\xa9\xac\xb9\xf2PZ\x7f\xf5Uy\x9d\xab\xcf\x8a5\xd7\xbe\x89#\xa2\xc2\x92\xaeU\xf9\xa9\xa9\xd5ym\xabsm\xbd\xc5\xd3\x9a\x9d \xc8-\xc3\xe4R?\xab\x10\x19\xdb\xe7\n\xb6\xcf\xf3w\xca\x10v\x94\xa1\x04\xc8b^\xceM4\xdca\x8ec5d]\x7f\xab\xaf\xa0\xeaG=\xa7\xcb\xc2\xe3\x96\x19\x9e0\x1e6\x86\xc8\xa9\xa2R\x8ee\xa9\x16\xcbZ\xcd\\\x0d\x84\x00i\xa7 %\x19#\x8e,E\xbe\xb9Y\x13.I>\xf7B*LR6\x03\x1e\xf8K/I\xc0K\xc0\xcb[\xd2\x1c\x0b\xdf\xf3\x0d\x94\xcb>\x0b\xe2\xcd\x80E\xa3\xe1\x90\xd4\x0b\x96e\x08?\x0e\x8c\xaa^\xcb:$I\xd5\x8c\xe6\xf5r\x9a\x10m\xf5\xf3A\xb7\xa21S~H\xaeS\xa6\x8eR\xc7\xa9\x8af\xf2P\x9eb\xc0\x92|\xb8\xa8\xf5\xc1\xdb\xc0\xc3\xd2\xac\x90\xf2\x94\x10\x17\xdam\xa9\x9a\xf2l\xb8\xa5\xb1g!\xea\xbe\xbf\xfd\xe1\xe7\xfd\xddd\x0ex\xec\x0ci&\xd0\x11\\\x1ec\x051\xb6\x19\xb32b\x13}\xe7\xe2xQk\xddy5\x15'\x1a\xda\xa3.\x9d\x91Z\xbf\xc3\xbe2\xc4\xd3\xd2\x80\xaa8^Y\xf2\xa2%:\xbd.t:RU\xda\x98\x85u3\x82\xb1\x0e\x9bf\xa4\xaew\x0d;\xb0\xdc\xda\x17Q\x106\"\x1c\x9b\xffQu\xfe\xc5E\x0f\x8d\x17s)\xean\xdeY\xe6Zl1m<\xae\nO\xcdM\xe7\xed\xc4\x81\x10\xda#4\x81\x13\xc3\x9a \xaeR;\x7f\xe8{u\xcf1\xc5]o\xb9\x8c|\xbbg\xf0cV0\xa6\xd0\xf57\xa0]13xj\x0eXl\x08\xde\xde\x0f\xc2\xc4\x9b\x13;\x85\xa7O\x9f\xa2v2+O\x9fG\x97\xf3\x04\xb2\x13\x07'.\xc36\xd8\xacF\xfc\xe2\x04^\xde\x8e\xd67,\xb0\x01}\xa5-\n\x96\xa2\x18dl\xd2MS\x1c)S\x9c\x03\xdeSI\x0b\x03s\x06\xdd L\xd6\xc4OK?\xba~\x96\xa4\xd1\x8a\x91\x89\\9\x93/\xd0\xb8ZpZ\x87\xecb7\xe7/i\xd4jlXC0\x92\x1c}\xb8\x1e,.\x05z\xcfMo\xec\xe2h1^\xe3\x89{c\x7f$\x1d\xfb.sw\xbd\xddF+\x90\x88\x0fS\x1cu\x13\x92\xbe\\\xad\xc8,\xf0\xcc\x1e\xae\xdc>\xc3|\x8cx\xcab5&\xb3\xfc\xf1k\xaej\x007\xdb\x98L3\xc0M7iw\x16\xf9\xa8(3\x97[\x97\x12B~_ \xc9k\xcc*\xa7}`\xcc\xa7N\xab\xc2\x8clk:'o\x82\x15\x89\xb2\x14NaM\xc9\xb5[D\x8c\xe7yk\xa6\xccq\xfa\xab\xf7\xdd4bW\xdb\xf9\xe9[$\xb6aQ\x8b\x9a\xe8\x88\xf8Hf\xa0Z\xca-\x7ff\xb6&\xaa\xaf\xf8\x98\xf4[0\x94Q\xa7\xae \xb4\xa1v\xd7Q\x92~\xca\xb3\xf9\xb3\xac?\xc1\x8an\xc93?\x0e\xd6\xa9\xd1\xddG|\x04\x11\xd79\x08V?x\xcc\xefF\xe1\x8a5Woh\xcf\x85\xbf\xbc|\x13\xd3\xab~\x88\xde\x84 \x7f\x18o(f\xc0\xb6,\x17\xac\x0f-~\xa8(\x1a\x0e\xab\xa1\x94K\xb5\xe8W\xc2vP!\xc5\xab~\xbe\xf0\xc2\x90,\xe1\x14l\x1b\xa3\xa7\x90wP~\xe4t\xe9\xbc\xf7\xf5\x03\xaeE\xae\x99\x9d\"\x057\xa9<\xb7\xc0\xd3\x08;1(M\x8a\x01\x0bQ5\x86\xc6E+\nc\xe2\xcdn\x92\xd4K\x89\xbf\xf0\xc2K\x82i\x92\x97\xa3\xddvD\xbe\x8b\xe2\x0e.Z\x06\x0d\x97\xbd@r\xfb\xaa\xdf\x85\x94\x1f_x\xfe[\xe3qV|\xbc\xf82\xd1\xf9\xdb\x89\x8f\xe1\xae=\x14l\xc8\x1f'S\xa6\xdf\x8e\xed\xc4q!i\xb7M\x08\xb7fG4y\xed\x16J\xd9:\x1f\x82\x85y\x89Yzw\xf0\xab\x81\x9b\xa1\xa1\xca\x1a\x1f\x15T\x8e::\"\xa1\x9f\x94\x86\xbb;\x02[h\x17\xeb}\xf4\x1a}\x9e\xe7\xdc\xf5\xa6\xaeL}\x9a@\xf1im\xb8{\xe4O~:\xed\n4k\x16p\xc4'\xc6\xf7(\xd6\xd5\xf7^|\xf2\x14P\x0d\xba\x0b\xdd\x07\xfd\xae{f\xdf[\xdd\x87\xd4\xf9O\xea>\x0d^\xda\xd5\x0f\xf6\xa9\xbfm\x9f\xe2qo\x93\xbbU\xf2\xe7.\xfd\x1a\xdc\xa5_.\xc4\xe3\xfe\x8f\xa3w\xbbw\xef\x1d\xfd\x7f\xf0-\xf7\xb1\xd1\xd5[\xf7A{\xfd\x12U\x0e\x1aw\x0f\xddG/Q\x97J\x98\x84\xa3\xbc\x00\xcc\x83\xd0[.7\xa1\x0f\xccp?\xdf\xe0\xbc`|\xba\xa9\xdfoE\xb7g[Y\xc8\x02\x02\xcedY(!\xcby\x11\xa9?\x0fN\xbc\x08\x12\x0c\x83=\xc4\x02\x92\x0d\xb8\x949\x14y\xb1\xd9\x15`\xf3[Q9\xfb0\x90M3\xf1E\xdd\x03\xe9.#\xdf[\x9e\xa5Q\xec]\x12)\xa2\xa3:)r\xfeTm\x855\xef*\x10aQ.\xb7\xaf\xe5GBa\xc8sn\xa07\x99\x95\xc6\x19a\x87\x7f\x1e\xd2.t\xbai\xf4I\xf4\x8e\xc4\xcf=\x8d\x01Y\xfe\xb5q\xf0R\x10wal+\x8c>\xe2A\x88\xd0\xc0b\x8a\xbd\x0d\x92\xb1\xa9\x1a\x15\x13\x8a\xb14\x9eapm\xb4ai\xe5\x12\xa1m\xa1\x85\xa8\xd2\xb5\xaa\xef\x91\xee\x1e\x81\xf8\xd0*b\xcf'\xa5*\xe0\x14\xfc(L\xa2%\xe9\xe2C\x16\xc0F\x80\xdeyq\x88g%\x1c\xa4\x1aD\x0f\x8c;-W\x170R\x93\xa2I\xaap\xc4j\xda\x87\xc6\xad\xb4\xd1\x1e\xd2+\xe2J\x19\x96\n\xb0\xe4\x06r\xac\xcb\xa3\x14\xda\xfb}\xed\xad\xcfH\xdd\x1e\xdc\xb6G\xe9\x82d\xde\x8b\n\x1c\xa2+\x15\xa9\x01\xc9\x0bG\x12MpS\xac\xb8\x1b\x84\x0b\x12\x07\xd8yt,q%\x98\x1d1'\x93H\xd2\xab\x9f\xa7\x92\xcbH\xddd\x01\xa2\x06\xb7DT\xdb\xde\xc2\xb3\x86.\xcf\xe1F\xcbS~k\xd0\xbf\xc3K\xfd\xfe\x81S8\xc5\xdc\xf1}\xc9}f\x93\x1a\x9a\xec\xcd\xfdc}\x16\xc4\xfe\xb1>\xcf\xcd\xdeAs\xac\xf6\xeaBqK\x04\x0bH-\xc7P\xd2\xeb\xcc\xb3\"zU\x8c\x97R\xd1*g\x13)\x8a5\xe6\xd6\xcb\n\xebWau\xe8z\xc9M\xe8\xf3\xe4\xadYw\x1d\x07\xab \x0d\xae\x08\x9c\xe6.0pZn\x02\x87u\xbc\xef`6\x0c\x1e\x03\xca\xd6\x948pl\x82w\xe5*\xcf\xa4zi\xb1C\x07S\x0e\xc8\xc0\xfd^\x9f\x01\xe9\xd7\x01V\x93w\x15\xfd~\xec\xfd\xde.\x82\xd6,!\xa7\x00\xee!p\x16$\xeb(\x07\xf6\xd1f\xd3]y\xd7\xcf.sX_\xc0\x04\x80\xbd\x19\x939\xba\xa7\x90X\xc0\x0f\xe8\x8e\xa3\x88\x92m\xb9k\x9a\x10i\xef@\x17\xb9\x1du>\xdeE\xa2\xa2\x12>\x99/#9\x97\xf5f\xe8\xc4\xd1$H^y\xafl\x8c\xfb\xcf\xd2x \x96\xa40\x82W\x18\xc3\x153H\x0d\xd8\x9e\x92\x07\xc6\xcb\xc9l\xfd\xe4\xe8\x02\xd9]\xb1 v\x89\x0b~y\x81\x03L\x9dBe\x1f\xbb\xc8?_&\xb9\x8eDv\x04\xb9\xd1\xb8\x83\xbf^\xd3\xc6\x13x\x8c\xa5\x1f\x83\x17\xce\xe01/\xfe\x18|\xe6\xe2sA K\xd0]\xfc\x92\xa4\x0b\x12W\xb5\xe5|\x19\xcbazr\xd1\xc8:?\x17\xd1\x19\xce\xcf-\x16\xaf>\xec\xce\xa3\x18\x9dp \x0cYf)\xcf.B\xe3\x93\xfc[X\x0c#\xe24\x9f]\x0c\xcbh\xd5 s\xd7\n\xa8\x8c\xd1(A\x87c\x82q]R\x1e\xa8\xddW\xee\x13\xb1T\xce\xe7\xe7\xeb8\x9a\x07K\x12\x9f\x9f\x03\x8f\x14^@0$\xa6\xdf\xcd\xd63/%/\xc2+\xbcJ\x9d\x87\x9fx\x90\xbd\xd3\x88\x93\xbb\xba\\\xbcBU+\x89Y\x17A8S\xb1TS\x90.\x95\x8a\xb6r\xe2\xff\xd2\xc3\xa4x(y[\xf1u\x7f\x99\xbc\x08\xb3\x15\x89\xbd\x8b%i\xa2\x07\x9b%j\xd0\xde\x84\xa2\x934g7\xd3\n\xbc\x1f\x18\xe27\xacK\xa5vk\x0ew\xc5n\n\xec\x90\xa58\xf3\xf9q\xdf\xb3)\xae\xa1Ux\xdeM\xa28\xb5\xb5\x04v\x8d\xa9W\x11\xf9\xd7\xb8\xdc\xc3\"\xfbL\x83\xc6}>N\xa7\xc8\xcf\x99\xc4\xed\xd2\x01\xca\x93e<\x88\xf1\xde'\xecE\x96R\xf8T\xd4\xe3\xbb\xb0t!\x1c\xa7S\x17R\x91gD{\xa3\xdctX}\x10\\\xde;\xacRR!\x81\xea\xf3E\x1c\xe9\xd3E\xec\x1d\xf5\x9d\xee\x8a\xa4\x8bh\x96\xe8(\xed\x9e\xf2\x1eg\xd6\xc7\xba\x04\xd3\x9a\xbd\x80g\xc2r\xc9\xf9\xa6\xbbfYl\x0cff,?\x96\x1c\x14J\x89\x1d\x94\xf0\x9d\x0b\x94\x81\xa3J\xcc\x80\x19B\xc9*hL\xdd\xa5?H\xa1o\xb7\x0bW.\xdc\xb8p\xe9\xc2\xca\x85s\x17.\\x\xe7\xc2\xb5\x0bg.\xbcp\xe1\x99\x0b\xaf]\xf8\xc2\x85\xb7.\x86\xb1Z\xe2\xe9KO\xf0\xaf\x98T\xdc\xe2\x020%\xe5\x9cw\xe7\xbai\xc6\xabS\x89\x9eK25\xc5\xfb3\xcct*\x831\xb8\xd3\x08\xce\xba\x97$e\xd1\x87\xcf\xba \xfd\xba\xc2\xaf\xcc\xac\xe1b\x94\xce3f>q\xdcB+\xd3\x8dI\x12-\xafH\xcc\x82\xcc\xbe\xe5\x9c%\x87\xd2=\xfd\x05\x8f\xbc\x144\x04a\xe1\xfc\x97\xfbU\xe5\x04D\xa5\x1e\x94\x1fcp3\xb4\xd6\xbf\xb5#\xa7\xe8\xd2\x88\xf1\xe8\x1b\n\xa4Et\\\xf2%]\xad\xfc\x1c\xfe\x82\x16\xcb\xb8W\xf2%I-\xdc\xb4\x11\xf3\xc5s\\x\xa9\x8dhO\xfb\xc0\xd2\xf2a\x94\xe4\xc2\xfbp\x9e\x93\x13v\x86\x8f\xc6\xbd)\xeaQ\xaap\xd1\xe7\x11\xcb}c\xd6\x08iF&D\x8b\xd8\xb6\x9e\x07\xb1\x9f-\xbd\x18\x82\xf0*\xe2\xaa\x1c\x17\xac\xe7/?{\xfe\x83O\x9e}v\xfe\xf2\xd5O\xbd~\xfe\xec\xcd\xcb\xd7\xafLVwZ\xeb\xa5\xad\x89_\xfe\xbe\x08i]3\x8d\x0f\xd4\x13\xbe\x1a/\x99=2p\xe1\x99\xbc.\x89X\x17n\xc1\xa7bH\x99|\xbap\xe5\xe4y\x07\xe9\xfe\xa8\xd5\xb6\xe1\xe1Y\xbf\xaa\x86\xa1\xb2{\x02\xb5h#\xae\x12\xe4\xa8[\xe0\x90\xc1\xa5\x10\x8dm\xba\xa0\xc9\xa7\n\xbe\x14\n3\x18V\x90\xccqMh\x9ew\xfa\x81\x17\x89\xf9\x03\xa0\xbf\xb0f\x99\xf2\xfb\xe3\xb8VD\xcdu.\xa7\xfa\x7fXR \xdf\xefD\x8e\xc7\xf5\xc4\xb8\x0b\x8d\xd3\x14\xd4.kP\xa6\x06\xba\xcc]\xb8M\xefK\x0dj:\xf7\xc0\xcb7\x0e\xe8\x1e\x0b\xb5\x8b\x17\x88u\xa3\xe2\x97\xe2\xae\x9bi-\xffQ\x1c\\\x06\xa1\xb7\xd4Z\xfb\x85\xb0>\x84/\xd4\x87\\\xd2\x7f\x85\x91\x83\x90\xdb\x8b\x9fj\xd9K\x92nr\x0d\x94\x0f\xf2m.\xe7\xbd\xb5S\x07\xb9\xdc)\xdc\xb0@\x0f\x1c)R\xba\x18*\xd5S[^x\xc9\x16-\x1b\xd6Q\xe3\xda\xa3i\x8a\xf1\xdbMZ3\x900`\xfd\xd5\xf7\x00\xe7\x04\xfd{W\xccM\nF\xf0\x12EU\xee\xbe\xc0~\xbc\x96\xd1\x82=\xb1P\x9a%\xba Q\xea PL\xd8 #\x8fP\xac\xbc\xd4\x0f\x03\xcf\x83\xe7\xf4\xc8'\x89Fn\xde1l\xc5\xdatb\xa3R2\x9f\x9aK9B\x9dC7\x7f\xae\x0ey\x81F\x0f\xccI&\x83\x9f\xe5`>K\x85\x1b\x95\xfdZD\xf1X\x94T\xfa\xfa\xb8\x15j\x7f\xe9\x18\x870S\x1f\xe4g\xe1\x0d&8e\x92-\xdf\x9ej\xb3\xd5\xed}\xa1\x8aj\xe6{,n9\x87\x8e\xba\x86l\x0b\x86\xb8\x05\xc3\xb2\x8cFP\x92 \x99\x8c\x96q)\xb3j7\xde\x92\xa7\xe7\x8an^\x1bg~\xe5*\xa1iki\xc8G\xc1T\x18\x17\xc9[\xa8\xa6=w1\n}P\xefF\x8cH\xdf8w\xbc\x1b\xc5\xd09\xcf\x1d\n~'Mk\xcaW\x8dNhA\xddB\xd6Y\xba\xa3U\xbd\xcb\xf5\xb7\xd6\xcf\xac\xbb\xf0\x121\xf7\xda\xee\x16XP\xd3q\x8e\x18\xb4\xaeT\x93pum\x7f\xa1\x0b\x8c*\xeb\xbe\x86\x10a\xd8*#\x89\x8d\xec\x0b\xcdSN\xbb\";\x13\xa7\x1d\xb5\x15\xe4D\x91\xfdN\xf7\x0cyEd_\xab}\xcer\xc8\x83\x9c\xf0\xfb\xc7\xba\xfc}\xf4\xe4\xaf?\xe1\x0ft'|\xd4Kv}o\x9df19K=\xff\xed\x9b\xd8\xf3%\xb6B\xe48\x1d\x8d\xf6\xa8\x90;#2u\xa7.\xf7\x98\x07\xe5\xfc\x1fj\x89\xa4\xa2c\xd2\x9e\x85#;\xe1\xa1\xb6<\xc6\xd4x4R\x91\xb8\x1f\xed1\x89\xc8\x14\xc9n\xe1F\xa2l\xd8\xf5\xa3\x19\x8a\xddxO\x87\"\x1a-CJ\x02\xcf=\xd6hs\xa3\x02\xe3\xc0\\I\xc1\xe2\x84ln[`\xb1l\x88\xad\x8f\x882\x8f\xa2!X\xb1\xf7\xa5U\xa5Qj\xd9\x0b\x8a\xf1\xd6\xec\x9d\xb7A\xd94\xfe\xf2f\x08\x16\xfdS\x0d-\xecb\x80\x9a\x08s\xb7]x1\xcb\xe1\x16\x7fy\x83\xb4\x81ve\xf6\xce\xc3\xf7\x1eXo\xbbgH\x8d\xaaU\xdc\xa2\x11g\xe5]o\xa0\xd41\x18\x08\x8a[8\x91\xe2o\xeb\xc2\xa0\"w\xa3\xa3n*+:Q\x1a-yhk5\x8df\x17\x9et\x1cS\xf9\x9d\x8cc\x8d\xabi\xa3\xbfN\xc8\x02\x15\xd0}\xdd\xe8{\xc1\x04\xfe\xfe d\xf0\x04\x92\x13h\xb73v\x7f\xad\xd8\xa0\xd9\xd4\xc5\x80\xb7yh\xa2jv\x82J\x1c\xb407\x8bh1\xfd\xdb0\x1c\x1e\xee3\xc3\xa1\xa4ag\xa6\xc3\xc3\x83o\xdbt\xa8_D>V9\xae\xac\x95\xdb\xd4-\x8c\xb4X^\x87\xdaE\xd5;`=\xb0>Y\xe1\x1eA\xd9d\xd1\xb4\x9d\xaa\x1d\x17\xe6f\x8c\x84\x9b\xaf\x0d;\x9em\xebzr\xa7\xbek(&oB\x1fR\x9d]A\x1b*Ks\xc7\x81\xe3\xb0\x1f=\x82`,\xec\x12\x98\xbe\xa1\xf5 f\xd6*\xfe\x1f3\xfc\xe7w\xe5J\x17nS/\x08\xf9n8\xea\xddc7\x88\xd9\x96\xc9\xfc\x96{\xa5\x8e\xd7\xc5E_1\xe7\x88\x08\x17\"\xa06r/\x91\x9d\xbb\xfal\x1eE\xd6\xc3\x18\xda\xc50\x95\xa9\xe4wa\xee\x8a\x0d\x95#b\xc9\xb6\\NDy\xdf\xceW\xee\x92\xba\"\x18\xbb\xc6\x04\xb4\xd4[E\xd7\x1b[r\x16\x9bZrf\xf5\x96\x9c+\x83%\xa7\xd2\xdc\xcd\xa6\x06\x9fK\x9dE\xb5\xac4)\xbf\xb0\xd2\x12\x0c?\n\xe7\xc1e\x86\xb6W=\xd1 \xb9mV\x1f\xf5Z\x04I\xaa#+j\x9akJ\xa2\xe2&a\x05\x84\xc0b<\xb3-\xd1\xa5\xe1RF=\xeb\xfc\x9c\x10t\x1b8\x95b\xcb!\x8c\x1e\xe5(h\xd5\xc5\xbc\xe70\x82\x99P\xc8\\U\xdeva\xe5\xb8RA^,\x1c\xa7S8\xd5\xc5[\xe7O\xe8\x1f\x16\xac\x0d=O\x11:\x821\xb3\xa5\x92i\x01\xe2\x91:\xca3V\x11\xf5B\x9f\x0c\x91\xd0o6K\xae\x1c\x0eL|J\x13\x15\x88\x88|\xcan\x0d7\xb9\x9f\xc8\x8d\xd4\x01{\x03\xaf\x91 \x97\x8df\x8fX\x8c\xadCg\xf7u\xe8\xe7\xf1|\xce\xcf7\x9c\x8a\xf9|\x88\xa2\xef\xa63\xc1i\x84^\xcd\xcd&\xa3\xa5G\x9bR,\x05\xfd\xfb-\xbb\x82X\xce8\x9dn\xf0\x9e\x8a6,\xb6(}[\x9d1\x10\x92w\xc4n\xbe\xd1\xc5\x8b\xc7\xd1\x94\x8a\xb0\x91\x03A\x11\x927\xd0\xcd+{J\xe5\xe4\x81\x88K%4\xfa\x1c\x05\xe3q\xc4]\xe40ie\xdcM\xd6x\xeb1r\xa1\xaf\xbb\xb7\x87\x96\xb4\xb8h6\xaem\x96kc\xc3:\xcf\xf8\xa6eg\n\xc4\xac\xf1~\xe2U\x1e\xd1\xa2v\xdd\x0dt\x82r\xe3\xa0\xbc\xa0\xe6\x15\xd1\xafc}\x1cx\\\xc5Pc#c\xb6!9\xd5\n\xbb\xebH\xd8\x89\x85\xc0\x13\x08\xe9r\x13\x07\xa21\xa1\x0f\xcb\x17\x1dI\xcd%8l4\xc0\xe0\x15\xec2+\xaf\xb7w\x82\x847\xa0/\xb3\xaa\xf9.\x8e\x0bC\x8e\xb6RnJ\x15\xb7\xc9\xaac\xa9\x9b\x80Mnl-\n\xe2\xb2\x08\x92\x86{F\x0d\xf7\x8a6\xb9\x89Un\xaf\"\xaf\xdc\xbf\xf5\x86\x9bVu\xad\xbb%\xdd\xd1\xfd\xfa\xb2\xd1\x8d\xaa\xbf\x14\xfc\xa4\x9fue\x16L\x98\xf7\x1d\xfd\xaf\xf7\xba@\xcch$\xb1\xab:O\xc6K\xe7vP\x85S\xc62\xb7#GGx\xe6\xb6\xec\x0b\xcd\xbc\x08o\xec\xaf\xde3]\x9c,\x1d\xd7_\xa1\x16\xaeb\xccU\x02\xad.3\xdbgq\x88\xf3C#\xadTn\x8c\x08\x9f%:\xa3\xdf\x81\xfb\n\xcc\xdc\xd5\xa9\xea\xd3_\xa3W\xd5\x88\xcd^\x9e\x9b\xb0\x12\x99\xb8h\xaf>p\x80D\xf7+i\xb05\xdeG\xd2\x0b\xe8,d\xa7\xe3\x10-\xcf\xf4o\x19%\x1c\x91\xf4\xce+\x19\xa5\xd5\xeb\xfb\xef\xdd\xedN5\xa8\xf6B}\xd7\x86iy\"~(\xce\x14\xcb\x8aC\xa5\xae\x8b ,\xc5]\xb9\xefQ\x88\xadS\xffX\xa3\x1d(%\x94\xbb\xe3\xa1.`\x9a\x8d\x94\x8a\x07\x0f\xd4\xed\x8d\xce\xd1B\xb3\xcc\x04S6\x92y\x1cUrq\xd5\x9d\xb6Y\xe8v\x14\xddq\x0d\xc7\xa8Gv\x99\x8ax\xea\xb8\xf0\xbd(Z\x12/\xb4Q\x94!E\xb8e,\xc0LA\xe8\x15\xfd\x10c\x96\xf4\xbcG\x07N7HI\xec\xa5\x91>\x90\xe3\xb1\xde}|O\xb9\xcd\xc5\xf6\xe8\xa0\xba\xa3=\xfd\xd6M\xf4\xead_\xbf\xff\xe7\xbc\xcdj\xe5\xcb*^mt\xacV\x0f\xcb\x8b\x878\x8cj\x9e\xcb\x87Q\xf5)\x1e\xe64\xf1\x17\xdf\x1bO\xf2\xe5\xa3\xfa\xb6\x9b\xa8\x10K\x8d\x1e\x94\x8d\xa6\xa4\x17\xb5\xa6$\x0c\xb2T(\xe6\x13\xa6\x98\xf7\xed3\xa4A\x9e}\xc6\x83#\x02\x8f\x16\x8eh\x8e\x0bG!\x11\x0b\xf6\xec\xe4q\xf2\xca\x95\x1bb1\xe0 \xe8\xcc$\xee\xa1S!\xde\xa0\xe1\xbb\x93y{\xda\x97P\xc4\xe9\xa7$\x85a\x11\xbf\xb9\xcdo\xeb\xd1\xf3\xb9}S\x928\xfa\x0e&+\x1bA\x8a\x17\xd1o\x0c\xd2\x10;\xd5\xd1V\x1b\xa4\xf0r\xed\xa5N\x95B\x8c\\R\xb1&t\xe0\x86\xf9\xf2\xa5Z\x07J\xf1\xe1#5$\x0cU\xa0*\xe4\x06\xb3\x05~\xc7\\\x08\xe7|\xa9\x98\x91A\xb5M\xd8\xef\xb0\xbb\xf1\xd48\x178\x0f\xe7\xe8\xe5\xfa\x8e_Ge~4\x94`\x8a\xf9\xa1\x07\xe4\x0b\x18\xc19\x06\x16\xb3\x8b\xc9i]tgQHN\x1c\xb4\xbf\x9f\xc1\xa9\x10\xe2\x983\xf0\x05\xd3\x98p7\xf6\xfc\x17\xe5\xdf\xf6\"\xd7\xa6\\\xbb0\xb3opg,\xf0\xae\x15\x9f\xe6\xebj\xa3\xed\xb6!a\x16]9Mv\xa0\xc2\xdbs^\x83\x0d8\x03\xf2\xda\xebF\x8f\xe3uQoW\xc1\x89k\x8e\x10\xbfz7\xa4\x82]#\x05\xbb*\xc7\x92\x1c\xa9\xb6\xc0\xa2\xd8vx0\xdb:\x9bt\xd5\xd8\x0c| f\x8c\x07\xd8\xb3\xa2\xfbn\x8d\xccW\x89\xb0\x1b3\n8\x1b\xa7,\xcb\x1f\xcb\x9e<=q\xa0\xdd\x8e\xb5\xd4\x0b\x8b\x8e\x80\x17\x9d\x8a\x9c\xab\xf6\x9a\xa9]\xac\xef~\x17\x03\xab\xb9\xe0u/\x13.:\xd5\x1fI\x0bo V\x13\xd3\xb5\x10\x17<&.\xe2\x93~\xf5\xb4Zry\x97\x83\xd8F\xb52/J\xa4J\xc4\x08}y\xfa\xf9\xf9\x8c\xb00\x94A\x14\x9e\x9f\x0f\xc1\xc3\xd0\xa2D\xe7\xccw\x1ez+R\x94\xb9\xb2\xab\x0e\xd0\xef\xcb\xea\x91\xb9\x1dT\x9b\x9cG1}\xbd\x1e\xcb\xf8\xa0\x17\xcc\x0e\x86\x7f\x86\xec\xcf\x08\x02;'\xe8\x8aR\xa4\xf4\xfb-\xb9\xf9x\x93\xc6\x0c\x8e\xe3\xb8\xf9\x08\x04!$(\xd3.\xcc:\xfc\xc5\x98L\x99\xa7s\xce\xc1Hm\xd7\x16^\xf2\x92c\x89\x98\xcb\x98YA\xa4'\xcc\x9f\xcf\x92 J\xaa\xf4 y\x8e\xaa\xaa\xb3\xb5H\xf6R\xa9N-\xc0kU\x1f\xa8\x95s6V\xad\x92\x83EE\xfc\xa7\xf2\xfa\x8a\x92\xc3\xca\xbb\x08\xe3/\xe2w\xe5-\x9e\x13\xa9\xf2\x9e\xc8\x9a\xc4\xde\xe4\xbf\x94w\x13\xe2\xc5J\x93\x0c\xc8\xdfd?\xd4\x17\xd7\xc4\x0fHR}\x93A\xc5\xab\xec\x97\xe6\xdde\x90*o.\x834\x7fo\x19\xa4\xca[\x92\x08PyWz\xc2k\x90 \x9azrAA\xa9'\x7f\x92\xd7\x93C\x94z\xb20\xf1\xa35E\x83\xea,HOx=\x12\xa4\xe4E\x82$F\xa2J\xd5\x9d/\x119\xdaFU{.\xba'\xda\xaf\xb5 \xcb\xba_A\x95*;\xae\xd2\xb1\xc0\xdc1\xb9\xe5MZ\x15\xe4\xdb\xc6\xec\xedL\xef\xd1\xad\x90Qh\x83\xe5(\x0e\xa1\xa5\xdfx\xa4x=\xdf\xb4\xd5\xa4\x92M\x0b\xd4Q.\xcb\xa3\x0cddr\x9b\xa6U\\>\xe1\xed\xe8\xb5\xa3\\\xee\xae\xe4\x86\xc7\xe0\x189\xc6\xd9r\xa7\xf4\xbd\xca\x11\x11{\xe5[\xae\x98S\x8b\xbd\x105\xbf\x10\x94\xe2\xf0\x97\x04f}\x15\xe5\x99\xd0UQH\xe5\xf7\x89\xa5%\xe9g\x8f{[G1b!\xcfP\xdf\xa0\x93\x1cR\x8c\xea\x9f\xcb\x0d\xfac\x90\xd8\x1c\xc52\xdc}4\x9b\xf5:?\n\xb1\xab>Z4\xb9\xbd\xa5\xcf\xe54\x05\xac\xecY^\x16#\x98V\xb3\x18\x9e\xf2\x8b{\xb4\x1d~'\x8ecj\x87\x87\xfe\xb0\xa3b\xd1=\\\xf4\x80\xa2=\xf3\x93\xc5X&\xe3\x1e\xf7q\xc7\x07\xf4E\x17\xbcq\x9f\x03\xbf\xc5\xae\xe7}\xefO\xc7\x11\xe2xvr\xaf~;\xae\xa8\x8c-\xe0\x1d\xf0\x97k8\xb5\x99\x16\xd5\xa1n\x17\x1b\x83\x07\x8f\xa9\xc1\xe4\xac\x1e\x93=\xee^^\x8f\xebyn>c)\x1f\xd9\xc1\x06{\x81\x0b[\x19\xc5.\xf3f\xa0\xaf`\x1a\xc0q\xb2 =\x8d$,\xdd\x9c\x9eJ\xd2\x7f\x86\xe8\xe0\x8d#\x89\x9e\xd6\x93R\x9f!J\xc6\xe24\xb1\xbe\xf6\xa7\xe3\x00\x91.\xba\x03a}\x90\x9e\xe5\x17q\xf3\xce\xd0\xf7\x85\xdf~\xe0\"B\xd3g%\xd0 \xb4\xb0\x18\xb7\x7f?z\x04\xbe n\x0e2\\\xbf\xbb\x8e\xd6\xb6\xe3\xb2E\xe1\xbf\x9c\x0dj\xdeb\xbbH\xd7\x016\xd9'\x9b\x86_\xe1r\x8a,\x97\xa8\xd5\x7fG\xff\xeb\x1eRY\xc5\xf0\x7f\xcco'\xb2\x90\xb4]\x0ci\xc7\x83:\xdf\xe7B\xe2VB\x9c\xdc\xf66G9\xb4w\xa7\xf6W\xef\x91P\xa6\xf6+\xef\x15\xbb\x83\x98\x16I\x1e\xe0\xe1fk\x03\xa9\xbf5z\x18=XYt\xbe\xe3\xb4n)\x1bW\x89\xe4C\x88\xc5\x12\xb9 .:\xc2\x19\xbc\xe0\xca\xc2[PHi\xe18\xd8h\xd7\x95\x85\xac\xa6\xe0\xa1,_6K\xac\xe3B\xc8~\xb5\xdb\xa9\xf3\xed\xf0BIc\x85\xf9\xa3\x90\xf1\xb7p\xa0\xec\x0c_&Va\xe9\xb7\x86*<\x0c\xd1\xd1\xc8+\xdf\x02\xbdy\xc8S\xa0^\xc9\xa0G\xf5\xd0(\x8a\x9a\xe48\xcd|hJF\xf7\n\xc7\x15\xcd\xe09\x82\xb8\x10\xa1\x7f\x01ECM\xd8\xe4\x0dh\xe1F\x18\xce\x8e\xb9L\xcag\x83\xa5d\xc9G5\x00\xe1\xc7\xbb;\xe3<;C\xf9x\x86j\x16M\x136#\x9e\xcb\xf3~\xf3S\x1aC\xfel\x0b\xe4\xe7\xbdi\xd5\xf6\xa6\xe1\xc8@\xe4\xe6=U\x90\xf54\"\xb2W\x16\x91\x93\xb2\x88\x9c\xe4\"\xb2W\xfc\xd2\x88\xc8j\xcd\xc6\x9er\x89\x98\xae\xd4\x86\xd3s\x0f\x96e&\xe4p\xc7\xed\xe5\xcaD\\\xed\xeaw\xf4\xbf\x1e\x86\x07j\xef;\x85v\xff\xb8\n\x8f8\xfcH\x7f\xbfM $..\xcfT\xef\xe0$\xa6\x8bo\xe5b\xdb\x05\x0870mL\x15\xc1\x93\x184\\x\xe7J\xd3\xa5\x0bk\x17\xfd+\xe7\xdcAQ\xa5/u\x0f\xaf\xd0\xba!\xc2\xce\xa9\xcfo\xf0\xb9\x08\xc1X\xc6\xe8\xe2=\xf4\x08\xaf\x97\xe5\x84\xa4QD\x17\xd6\xe2V\x8c\x91\xa1DJ\x07\xbcVj\xd4\xd4\xebC\xad\x80\x88\xd7\x1737\xbb$\x17\x9f{.t\xfa\x945\\\xf1\xcb'\xcb<&\xc2\x9a6\xab\xda\x9c6rX\x8eli\x02\xe1\xaa\xc6o\xf9}e\xfa\xa2P\x04\xe9m\x9e\xbb\xda\xdb\xed\xda\xfb\x93\x90\xbb\xbbI\x11\n\xb4s&;\xee\x8d`\xbc\xc0\x88\x15\xa1p\xe2c\xd4=t\x98\x0d\x0e\xa7V#\xbd\x89O\xcc\x18\x12\xdd\x95KF'\xd6LZ^b\x96|\xe1\x92\xdf\xe0D#>(\x7f\x98\xe9\xa8.R\xec\x8c'4@~=c\xc17\x8a\x80\xc8\xb8\xb7X4\xd8\x88\xf1+\x1e\xcb8\xc6T\nQ\x98\x92\xeb\x14\xf30\xc5\x97\x89\x93\xfbo\xc6,yD\xc00%*P\x88\xae\x89)Et#id\x99\xbe\xf9\xdej\x8a\xc2q\xc5\xeeEr\x9fp\xe3\xa6\x08\xe9\xd0\xd3rV-\x1e\xfeCT\x0f\xa9\x19a\x84\xfc\xccD\x8a\xb4\x1b\xcc\xcc\x9a?\x1e \x13jS\xf9\xd3\x82\x9c\xdd\xd1\xdaXO\x16\xe3\xa4\x08\xda\xcb~\x04\x85MF\xe9>\xbf3\x86X\xa1\xf4\x8a\xffX\xe2\x8f\x9cq\xc5\xdb\xf5e\x81\x0eZZ\x94\xc6\x1b 6-\xc0\x88\x8e\xc3\xa9\x0es*^8\x90u\xe9\xcf\x0dD\xa1\xc4\x9esa\x85\x8b\x14Z \xa5qJ\x12{\xad\xe3\x0fj\xefs\x1a\xc2\xa8\xa2\xe8\xaf\xf9x\xa6\xbd`\x9b\xe1M\xfb\x0d6\xc5g$\x8d\x03rE\n\x8a3\x8b\x08#D\xc1j\xbd$T(\x12h(\x90\xf8\xb1\x96*\x89\x0fk\xda\x9e\xbb\xa0\x1bqe|9\xb5\xff\xafq\x9c\xe5\xcdj\x1aoM\xdf\xf8\xfb\x0f\xd6\xbd\xbc?\xdb\xf5P\xac\x08\xe6n\xe0oh\xd1\xb1\x04)\x04\xaf\xaa\x8a\x81\x85\xca3q\x1a\x93\x8a\x01\xf9`\xbb\xad\x0f\xeaW\xe3\xe7D\x19\xc0R\xfb\x12\x88\x03\xfe\xa64I\x7f\x8e\xc7\xc1\xe8\xe9\x8e\xbeM\xcf\x8e\x1c\x93\x8c\x1f\xe1\\cVF\x9ct\x84x\xb3\x03I\x1elH\xf2\x7f\xd5\xefa\xe9\"\x1asj*\xee\x84y\xccO\xb1\xd5\xe9x\xe2\xe4R:\xac\xb4z\x98\x9fP{]L\xc3\xbf.I\xfa\x19G\xd0\x1f\xd38z\xc5 <\x16LV\xb3\xfd\xef\xa7\xd4\x92\xd2\x0f\xe96X\xe8B%DsXD\xecm\xf1\x88\xbd\x04\x86\"\xa5b#s@\xaf\xb2\xee\xf3\xb33\xba\x1c\xf8\xa5K\x12\xdf[\x17\xfaT\x19\xa8N\x95`,\xcd,H\xc4dP2z\x19\xbc\xd8\xfef\xd1\xec\xdf\x84\x98\xfcl\x16\xc4$\x01\xaf\x08}g\xf4X*\xc5\xbb\x96\x82L\xf1\x10La\x9ea\x81\x12\xcfN\x9f\x1d\x83)ya\xa2t)[\xc2 \xb4\xdb\x01<\x81\xf8\xc4\xc1\x19\xe6\xf9{\xe4B\x01\xde{\x8c\xa0Mg\xff\xe9\x08\xfa(\x05S\x01d\xb7\x8ftgp\x08\"\x03!N@\xc0\n<\x1d\xc1\xdeQ^v\xff\x10\xcb\xd6=\x7f\xf4\x08\xf6\xf6i\x81\x8c\x12\xc6\xc9\x04\x83F\x15\x96\x89\xfe\x01Zr\x80\x12K\x1b\xfb\x1a\xb0*[\xfdJ\xd8\x01\x82uup\xc4\x1f\x88\x0e\x1e\x17_\xf5=D\xe8\xc1~\x0e=\xee\xe5\xd0\xe3\xc3\x1c\xda\x1f\x0c\xf02(\xce\x13\xce\x11\xa5\xe0\xac\xcbe \xce\x9b\xf5\xff\xfe\xc5\x9fY\xb5\xfbPuz\xd78Q\xc8\x18\x8b\x1a\x18\xf6\x0dO\xdan \x91Y\x8a\xcfJt\xe5r\xec\xeeX\xd6\x1b\xbew\xf2\xdb:\xa1\xdd\xef\xdf'\xb0\xa76p=\xad\xd8:?'\xc9\xa7\xd1,[\x12\xabJ\xb5y\x9a 9\x8d\x82\xc3T=\x98K\xaf\xceQ\xc5x}9I\xbd\x94|\x7f\x99]\x06a24l\xdadM|\xd33\xfa\xf1\xb0\xcdd\x08\x99Y\xc8O\xc8\x92\xf8i\x14'C0\x04c\xd2\xbf\xcbR/\x19\xbb\x068\xb6Y\xe6\x13Zs\"\xa6\xc2\xdc\x8f\xbc\xaf\xd1F}\xf5\xf4}U\xf1\xf0;\xfa_\xefU\xf9mn\x87\xf6~\xffX\x89\x90\xcd\xed\x0c:\xbb\x84o\xd3'{J\xa0e\xfeh\x7f\xaf_}\xe4\xe5\x8f\x06J\x90i\xd1\x87\xbd]\xc79\xf9N\xfeL\xe0\x0e\xf8z\xc5O\xca\x98C\x81\x9f\x05s8\xa9\xa0)\xe3\x06_U6\xa7|+G\xa3\x10\x93b\xe6\x05!=\xb65\x1c\xac\x0bC\x1d\xa7eEF$\x93\x19\xbc\xd8(i\xd9\x8fC\x9d\x84\xb9\xd1\xbdB\x99\x07\x1e\xb4X'a\xb1\x1c\x97\xd5 \x93\xdfQ\xbf\xd1q/\x95[B\x97$\xfd$\xf2\xbd\xe5s\xdc\x04\x9b\xc5\xfa\xb3{\x18\x8c\xd8\x8b\x13\xf2\xd3\xde\x8a\xbf\xea\xd8\xb1\x18\xfcv^\x0erC2]|\xdc\xe9t&a\x16/\x87`-\xd2t\x9d\x0cwv\xd6$M\xd2(&\xdd\xe4\x9dwyI\xe2n\x10\xed\\\x0dv\xc4\xaf/\x92(\xb4&\xe1,Z\x9d\x07\xb3!X\x7f\x85?\xe8d\x815 \xd11\xddK\xa3\xf8\x07\xa5:\xa3p\x19\x84\xe5\x1aEAk\x12F^\x96.\x06\x9f\x91Y\x10\x13?-\xde\x1c\xee\xec,\xe9\xbc-\xa2$\x1d\xee\x0ez\xbd\x1dV\xb2\x13\xf3\xa2\xddE\xbaZZ\x93\xf0\xb1v\xd0\x1bQp\xc9\xb5c\xd07hR\xe3\x87\xa9^\x7f\xdc\xdb\xdf\xebi\xb7od\xc4\xdcZ\xf4Q\xbcH\x85\xb5\x120\xfe\xa6\x88\x15=#\xeb\x98\xf8^Jf\xe0\x853\xc9\x91&K\xc8\xac\xdb\xe0C\x03\xf2\xfct\xa9\x98\x87#\xe9\xc9IK\xbbg\xfe\x82\xac\x98uu\xf7\xa8\xf4\xe4\xe3g/?9{\xf6\xf1\x8b\xf3\xb3\xe7\x7f\xed\xc5\xa7\xcf\xb8\xc1vP*\xf3\x93g\xaf_\xc9\xcf\x07\xbd\xdd\xd2\xf3\xe7\xaf?{Q~^~\xff\xa3\x17\x1f?\xfb\xc1'o\xce\xab\xed\xec\xefj\x8b}\xfc\x83O>\x91\x8b\x1d\x95\x8b-#o\x86\xa1\x02\xe8\x97\xea\x83g\xf4P\xc1\x9f=c\x17\xce\xc4\xe3\xc4\x9b\x93O\xc4\xbb\xe2\x87\xae\x80\xa8C\xfa-\x17\x9be\xab5\xc6\x0c\xa4_\xaa\xef\x7f$\x1e\x8a\x1fr\x81\x9f~\xf6\xe9'/\xae}\x82!\xe89\x1e\x96\x86\xf6\xe9\xcbW/?}\xf6I\xddZl8\x87\xe6\xe9K|/D\xd5\x81E\xbfY\xa5gH\xe1\xd8C\xfcZ~\xeaG+\xee{\x12\xd9\x16\xffQ.\xe1\xcdf\xcf\xa5\xf0\xe1X\xb0\x0c\xb3\xee!\xdfI\xfe}\xd5\xab\xfcA>\x9b%0\xbfD\xa5h\xa0\xb3|\xeaJ`/\x9f\xaf\x128iVH\x97_\xf0U\x85\xf2\x1cF0(\x83(\x92\xed\x96A\x14u\xf6\xca\xa0\x85Z\xd7L\xad\xebJ\xad\xeb\x86\xb9\xc2]\xf7z\x9d\xc9u\xefhr\xdd\xfb\xde\xe4\xba\xf7|r\xdd{\xd1\x99\\\xf7?\x9e\\\x1f~\xdc\x99\\\x1f\xedM\xae\x8f\x0e:\x93\xeb\xe3\x8f'\xd9\xc7\x1f\x7f\xfc\x02\xff\xffxz;\x9ed\x1f\x1d\xd1\x97\xb3\x8f\xbe\xf7\xf1\xc7S\xfb\xb4E!\xcf\x19\x84\x96pn\xed\xd3\xe1\xf8\xf3r\xb1\xdb\xcf\x9dJ\xb1\x9dr\xb7.y\xb7\x8e\xf6\xcb\x1ez\xe5R+,\xe5N\xc6\x93\xe9\xe4\xab\xc9\xfb\xea\xe3s\xfa\xf8s\xfbt\xd8\xbam\xb5n[c\xaf\xf3\xe5\xa43m\xb7\x9c\x0fv\x82r\xc9\x8b\xa2\xe4\xf8\xf3\xa2>\xc7>\x1d\xfe\xc4\xb8\xd79\xf6:\xf3\xe9W\x83\xf7\xb7\xec\xfb\x97\x93\xce_9\x99\xecLN\x87\xdf}4\x9a\xb4'\x1f\xb8\xe7\x93n\xeb\x7f\x98|\xf8xbO\x1c\xfa\xf6\xd4\xf9\xf0\x83\x9d@\xc7\"\xde\x19YD\x9f_B\xc33\xe3.\xfb.\x11q\xb5\xaakcU\xc7EM\xbb\x83\x0dj:\xdb\xa6&\xec\xdf\xb6}}alao\xaf\xa8\xea\xb8/}\xdf\x95\x9a\x18\x94~\xeco\xd0\xe03\x83yG+\x9e\xee\x1d\xa1\xb9\x02\xa5K~\xd2>\xc5 9{G0\xa4\xc7\xea'\\\xef\xb0;\x80[`\xc9\x9c\xd91\xbb7@}O\x87\x16j\xd3i\x19B\xa7_\xdb\xb1\xd7\xe6\x998\xca\x15]\xd6\xa4g\xb1\x96s\xc8\x7f\x87\x00\xb9\xc8\x05\x85\xf4\xfb\x07\x12(\xc5BU@?_.\n\n\x19H\xae\xe9\nA\xbd\x81\x04\x9a\xb3R{\x12(f\xa5\xfa\x05\xe8\xbf\xa7\x90]\xe95\xd4}\xec\x16/=\xb6\x1e\xc3\x10\xf6\xa4a\xec`\x0f\xe5\x96&\x14r(u\xe7\xff\xf9y,\xb3/A~\x13\xcb\xc8#E\xaa@\xa1G\xbd\n\xf4\x98)\xabk\x17\xe1\x8b\x9a#\xc6\x93\x11\x1c\xec\xef\xef\xee\xc3)W\\a\x96\xe9\xe7\\\xdfd\xa7\x85\x03j\xf9\x01K\xe9\xd9\xa6\xa7\xb5\x0e\xd6p\x00O\x9fB\x9fJX\xfb\x07\xbb\x83^\xf9\xd1#:\xdf\xbb\x8a\x11\x15\xe4\xd3\xd8[\x90\x13\xd3\x0e\xf6\x0f\x1c\x17^j`\x9f\xb2\x84r\x9f\xc2\x13\x18\xec\x1f\x9c\xc0\xa7\xed\xb6\x03o\xc7\x9f\xd23\xd9k\xfbS\x87\xc7\x19\xe8\xb9\xf0\xb2\x00\xea\x88\xd3\x1b\xad\x1e_hb\xc9;\x08P\x01C\xdeQI\xb7;\x0f\x96$\xf4V\x84\xb2\xf6 \\g)\xde\xdb\x8f\x92 \xc5;\x96i\x97\x9e\x1fd\x18t8\xf0,\xf5\xe2\xb2\x9b\xbc\xda\x97\xe7\xda\xbe0Q\x99\xf7\xb3\xf6\xfd\xef\xeb\xdf\xefF\xe1\x0f\xbd8\x0c\xc2Kv\x96\xcc\x7f\xf2\xeb\xea\xe8y\xca\xeb\xd7-\x0e]\x97\xcf\x94\xd3\"\x15\xd9\x86\x8d\x16\x1a\xf1\xbe1d\x0b?\xa2\x8f \xed^\x918\xa1\xc3x\xf4\x88\xcd\x845\xcb\xd6\xcb\xc0\xf7R~3\xf5'h\x93\xc0\x8eT\x98Q\xca\xe5\x91\x0fC)`\x15{\xb3\\\x12<\x9f\x8a\x96 \x90k\xcfO\xf1b*\xc9U\xba\xb4\x9a\\\xe3n\xc7\x8c+R\xa67m;\x93\xae\xf8\xf6\xc1N\x97\\\x13\xdf\x0e\xc7=\x1e\x03\x8d5\x14,\x97\x9dy\x14\xafdw\xffh\x0e\xe9\x82\x80\xda[*\x8b\xa1\xf4\xf82L\xedx\xdc\x9f\xbal\xafDe\xf8@\xc0\xa5\xb8\x8e\xac\xb5,d#\xc1lhX\xbf\x983\xde\xe6,\xf2\xf3A\x15\x13:\x82\x90E-\xef\xfa\x0b\xe2\xbf\xfd$\x08\xc9\xf7b\xe2\xbd\xa5\xe2[Dw\x90h\n\xef\xdc\x0e\x8a\xaf\xdf\xe7\xad&\xd9\x9a\x8a\xb1d\xd6\xd0hiu+*\xb67\xcf\xfe\xeav\xe8\xa2\xe2\xca\xc0\xb0\xdao\x9e\xfd\xd5\x9a\xc5N\xdfE\x85\xfe\xdf\x12\ny\x16\xd1\x0e\xbf\xd1u8\xef\xa6$I\xed\x18\x03@(K\x9bz\x97\xb0\xf0\xc2\xd9\x92\x80=\x0f\xe2$\xcd+t\xc4$\x94\xfa@[\xc9C*\xa4\xde\xe5\xa7\xde\xda\x85\xb8@\x9b\xc7\xe9\x82\xc4\x84\x1ep=X\xc7\xe4*\x88\xb2dy\x033\xe2/\xbd\x98\xcc \xc9\xe6\xf3\xe0\x1a\xa9\xa2\xf5\x18\xda\x10C\x1b\x1e[R7\x1e;.\\\xb0.\x07\xe6.\xafcB\xab\xb1\x13\xe2G\xe1l\x83>\x8b\xce2\xbf\x87r\xe0\xfc\x92\x96Q\xa5=\xaf\xc4\x92\xe2@U)\xa4\xc8\xdf\xaa\xaa\xe9\x08<\xd1\xa3\x02\xbac\xb0\xd8;\x94\xd8\xf2+\x1e\x888\xb4\x19\xa5<\x08V\x120sz$E\xf5f\xf9\x08\"\xfa\xa7=\x82\xbe\xc3e\x06t\x0e\xf0\xaa\xb6\x15&\xfb=\x19AF\xd7,C\xb9\xa7\xdf\xdf\xeb\xf7\xfb\xc5d\x93\xeb5\xbb\x83\xcf\xa2\x1c\xfc\xe4\xd9\xebW@\xab\xf1\xfc\x94(\xb90A\xdc4\xbca\xab\xe6I4\x84.E\x92\xc6\xc4[\xa1\xc3\x81\x17\x84 \x84Q\xd8Y\xc7A\xc8\xb6z^m\xa2\xab7\xed\xc6$\xc9\x96\x98/\xd53\xad\x99f\xc9>)\x96Lqo\xb9\xe2 \x04\xd0-\xac\xe2,\x833\x1cw\x83\x84\xa7\xdb\x0f%\x0c\xe4\x1a\x9a\x15\x89/ \xac\xbc\xf5:\x08/\x93\x13\xc4\xb6u\x1c]\x053\x8a\xddQ\x16\xfb\x84\xe7o\xa6\x9b@&k\x96\x93\x87\xd8\xa4\x87E[\xf2*xKn\x12;t\x9c|A=x\x02>\xfd\xc3\x164\xc3\x80\x8f\xde\xd4\x95\xe2\x9ce\xd87\x9b\xb0\x90\x94!\xfa\xdb\x04\xecG\xabW\xcfM?\x920Z\xce?\xac\x9b*\xdf\x85\xb9\x8a\xd7Aa\x08\x0cd.\xc3S\xf2\x08#\x91\x95z\x97\xc3\x1bo\xb5\xecF\xf1\xa5;\xe8\xf5\x06C\x9c?\xe6q\xabAsZ7\xbb\xeb\x18$L(2E>\xc0\xa5\xe2\xae0\xf4\xa0\x1d\xe5s\xe7\xc3\x13\x98\xd3?l\xee\x04.Dc\x1fS\x90\x1b\xb07/\xa6\x96\xc1\xe7)\xea]\xe9\x94'y\x8cb\x9e\xde\xa9X\x13\x06\xb0\x99\\\x04t\x8f\xdd\xde\xeaD\xa7\x11x\xecI!`\x95\xe5\x022\x13(\x06o\xc9\x0d&\xe0#\xe3`\xcaB$\xe5\x97~\x83\xe6D>\xea\xe2\x7f\xb9\xd1Y\x8a\x1f2p)\x05\x8d\x92(I\xd1s\x87\xdd\xe8\x12?\xdbmz\xac\xd8\xe5\xc8p\n\xb6\xfc\xc8\xcd\x8f\x9a\xb552Y\xaex\x8d\xca\xe8lz<\xc0\x89\xbd\xa0,\x9en/A\xa8\x18\x85\xc7gmt3\x92$S\x1c\x80\xa8\xacvf>6\xf1\xee\\\x86\x97s\x0e\xd5\x0e\xe1\x84;\x10\x04\xda\xb8\xac\xdc+\xeb\xda\x0e\x1c\x1e}TS[\xbb-\xd7\xa7\xdd)\xb8\xdbv\xd9\xd1\xca\xe0!7\x8bj\x0c~\x9b\xb4\xac}\xf9=\xbc[\x04Td\xe8\xf7\nA\xae\xbf[|\xe7`C\xbf[\xef\x90\x15\xe12\xaa%pv\xbeD\x07\x83\xe6\x89v!\xa6x\xc5\xd6\xfbe8\xa3R*\x9e\x9f\xf8A\x96.\x80\xfc\x90\x16\xdez\xd8\xefu\xbb\x8c\x87\xb0\x0d\x8b\xe1\xc6\x0cq\xa5\x9e\xcd\x0c\x99\x06\x8f{\xc16\x08\xe3\xbe?\xc5\x89\xfb\xd2\x85V\x1f\xbd\xe3\\\xd1\x94@\x0e\xa7\xdc\xbfM\x1aw\x0bf\x8f\xb4 g\xf7|HO\xb9\x83\x10\x9f`\x87\xf3\xb1\x0bo&\x13\x01zj\xf1 !?\x9b\x91\xd0'@\xc24\xbe1\x8a\xd9\xcc\xc7\xacDd\x88\x96\x96\n\x12\xd0\xf28\x8e\xd0\x83\x13Kd$p\x07\xc5\x89\xb4\xfb6\x08g0\x02K\xf4\xc0r\x8b\xcd\x841\xc6\x9a\x04\xca\x9f6\xd3\xa8\\\xc4D\x8c\xd6\xef\x80*\xa6\xd3!\xee\xee\x16\x11\xc2\x1b\x04\x90\xdc\x7fBW\x8f\xb4a\xe8\xf8M\x1a\x18\x8f\x1f+\x99i\x87R\xe5\x03.\x01m\xc2-0\x12m\xc41~\xb3\x17\x86\xb0\xcb\xa4\xa4@D\xb1\xc58\\t\x19Z-k\xf3Z\xd8\x1b\x16\x0b6 \x0b\x94\x91N\xf20\x8a\x03\x9b4\xa7\xbc\x98\x8b\x01\x92\x14p00\xb2~\x89r<\xc9\xb3\xf8\xd1\xd1\xc7\xba\x83pi\x97m\xd2\xbdBL\xcc\xc2\xfc\x04K\xc2\x99\xd0 \xf0\x83\xe8\xbb ]\x04!xpE\xe2\x0b/\x0dVt\xe5\xab\n\x1eS\xa8#.\xb9I\xe3m\x9d1)._M\x96D\xe0T\x9c\x80\xbdK\xa1\xf3\xe0\x07H~\x10\x06r\xed/\xbd\x15C\xc0\x95\x17\xbfM\xac<\x0eqe.X\x16\x85\n\xdd\xcd\x15;\xf2\x195\xf4*:\x9dJ\x9bI\xe6/JGn\xe6\xa5I1\xaf\x8c>\x8c\xb4o6\xef\xeaB7\xaf\xe7*WJ\x15\xba\x02\xe3L\xcd\x97\xd1;J.\xe9v\x8d\xe2R\xff\xcb\xab\xa6#\x7f\xc8\xc8Z\x17\xfa\xf60\x99u\xfd\x1c\x0d\xd1m#F]\xe6)\x08\"\x1a\xc3PU\x83\x85\x8eT\"W8\x85STs\x0d\xe9.\xe5\\\xa2(Ea\xe2\xa9\xee\xb1z~\x16\xe5\x99\xb6-\x0bs\xcd\x9a\xb4\xea\xa8Y\x0bQ\xb3\xf6\x18=\xc1k\x89\xf7\x0f\xcd\xc4[C\x96\x8f\x18Y\x0e\xefA\x96\xcd\x82\x8c\x9e4\x87\xc0K\xc8\xe4\xd9\xd0\x81\x12fV\xb1Zl\xdc\x90o\\v\xd4l\xbd\xb0C\x07\x93\xc76\xd7\xa8\xe5\xb0\xd2\xb6\xc9u \xc5~,\x0f!\x8cf\x04VYR\xe0\x9b\x97\xc2\x92xI\x8a\xaa{I\xcbVb\xd3\xf5\xbb\xa9a\x81\x7fJ\xd2\x86i\xf8\xc2U~I\xf2\xc6\x85K\x17V.\x9c\xbbp\xe1\xc2kf\x8c\xd20\xed7\x06f\xfe}\x033\x97\x16{\x19$) I~Vb\xbfl+Zc\xd4\xd9T\xe8j\xa1\x88\x1e\x9d\xcf\x82\x00pyE\xfc\xcc%\x15\x06@\xb5'\x8c\xd0\x19b]\xc8eLA\x85A\xeb\x1f=R\x04Q\xfbM.\xaf\x96\xc578e\x93\x00\xc3\xca!\x93\x9f:\xd0\\W}\xf8\x84+\xc2>E\x97x\x07\x0d\x1e\xf4\x85O\x0d\xde\x9a'L\x82\xba\xbd\xc5\xcdx\xe2\x94\xbbwZ\xf4\xee\x86\xc9c\xdfJ'a\x88\xd5\xeb\xd6\x8f\x07j\x80\x11\xbc\xa1\x9d\x8cr\x0b\xce\xa7\xf4\xc1\x9ao*z\xea\xbb\x80\x11\xf8\xc5\xa4\xcfs\x92F\xf0<\xd6\xa6\x9c\xecu\x99\xd5\x94\xec\x88\xf9L\xc1)\xbf:\x8eg\xaf\xd789\xdb\xd8X\xdcB\xc9\x9b\x98Og\xc0=w\xcc'4\xe0^;_\xd5\x8475=\xcb\x91T\xfb\xf4\xaa\xf6\xe9M\xed\xd3K\xc3\x06\x04\xeeG\xa3\x0b\"|\x87\xf3\xe3\x92\xab\xac7;?z\xc6$D\x18\x84\xa8\xa9\x1e.\xd6D\xd2\xa1-\xab\xc8\xb4\x07\xecP\x80\x07\x9a\xfd#\xfe\xfd\xf6\x96\xd2\xf2\xb8\xf9\n%\xd2\xc1\xd0\xc5[\xaf\xec\x08h\xd4A\xc9\xefI\x07<\xadL-\x7fX\xaa\xdf\xa6\x91:'pm{t\x9f\x1b\x8a6\xc8W\xf2\x87\xf6p\x9f\xf9[x\x0e\x9c\x99\x1a\xafH\xca\xb9\xc4\xe8Q\x11\xfe\xffc\xee[\xbb\xdb\xb6\x95E\xbf\xf7W\x8cx{\x1c2\x92\x15I~$Qlk\xa5i\xd2z7ur\x9a\xa4\xfbt\xcbj\x16-A6\x1b\x89T\xf9\x88\xed\xbd\xdd\xf3\xed\xfe\xb1\xfb\xcb\xee\xc2\x0c\x00\x82$@\xd2N\xd2\xd6k\xb5\xa1@\x10\xcf\xc1`\xde\x93\xb2d\xe3\xcf\xb5\xdbG\x97\xad\x82\xbf\xe4%\x9c\x82\xfe\xc0\xae\xb7\xd1w\x02\x12\xb6\xf1c\xa4\xc6\x149}\xb6\x8a\xe6\x1f\xa4\xd4\x9a__\xc8l\xb9\xa8kX\xf5\xf2\xa88Z\xc4\x9b\x8f\x02K\x8b\xa2\xb5@r\x02\xb8\x91\xf8\xe4\xff.\xd4\xf9\xc5/$\xc2\xaf_\x97\x86\x9c\xcc\xf2\x0f\x01c\xad\xb9g\xd1\xd5\x93\x14\xee\x9d9\x07\x96\xfa\xee\xf8\x9f\xd2\x13aD\xd8\x98\xf9\x0b~\xf1\x07kN\xcd\x04\xa9\x12\xe8o\xfc ~\x02>\xcc\xa3U\x14\xf2\x95^\x07IR \x9bW\xfe3\xbbKC\x1d\xb3\xa2\xff}\xaey\x9a\xe6X\xdcz\x12_\xf0 \xae\xb3U\x1a\xe0\xd9\xf9\xc0\xaea\xed_\x830q\xd6W\x05\xd5\x1b\xf6\xb9\x19\xdf\x88\x19\xef\x13\xcb\xe5\xf3\x0b\xf2\xd3\x80Mp\xed\xe42yN\xedi08\xc8Y\xcb \x9cG\xeb\x0d\xea_\xd8\x95ec\xf9l\x91\xceS{\xfb\x04\xa2\x18\x96\xd1j\x15]\xb2\x05\x9c]\x83\x8fj\xd0\xd4?\xcbV\xa8\xeca\xebMz\x8d\xca\x0d\"\xfcr\x9c\xa8\xbc\xa6c\xf3\xc6P(\x11\x0dEYeP\xae\xa4\x037DZ\x04T\xca\xa7\xab\x1f+A\x06hB\xb1s\xbc\xd9+k{-b\xd9\x1b\x97\xb7(Hk\xc6\x88\x9e\x81\xa8Qr3\xbfVnV\x80;\x9b\x17c\x93\xe8\xac\xf2Q\x15\xf2\xc4\xd1AH\xb3\x01\xda\xba j\xab\x9c\xae\\\xd4&\xf1d\x81~\xc5\x16\n\xfd\xfe\x81\xc4O\x0f\xce\xbc*\x01d\xa3~\xcaZ]\xccY\xb3\xd4\x93\x88u,\xf9\xc6\x17\xf5\x84\xd2\xc7FB\xe9\xda\xe0\xad\x04\x02H\x859\xa8\xbbi\x86\x05\xd2\x89=\xde\xe9 98IbM\xe9\xc9k0\x1f\xefs8\"\x82ac\xe5EUmN>\x8f\xf6D\x8f\x03\xea\xf1?M\xfeip7\xb2*\xf6(\xc3T\xd3=- \xabM-a\xa5\x8e\x1a\xf3z\xad\x96W\xe8\x0b\xab\xec+i\xd2\x08v\x17\x05\xd8\xfd\xa8\xc1.\xc7\xb7\n~al\x13\x1b\xc7\xf6\xcb\xe4\"\xa7?\x08?\xc2>9\xc5\x9f\x04\xe1\xf9\x8a\xc1\xefY\xc4\xab\x8a\xbdGZ\xa2n\x96\x86\x83t\x1b6\xc3\xdc\xe9\xe78):\x83a95\xbb\x04\x1e-\xc4t\x9f\xff\xd4`\xe2m\xf3\xa9i1\x9eZ\xc9\x88\xf0]\xf5\xd5\xa0\x8d\x18m\xe0\x95\x87d\x03|\x14c\x8dd\x9b-\xce\xa2\xa9\xab\xcbv*\x1aO\x87~\xfb9TrM\x9f\xfcE9\xd0\x7f\x98\xfa3\xafp\xc1\x1c\xa3\xef\x88>\xc9\x16-Rp\xd1\x910\x83\xe3\x1c\x8b\xcf\xcf\xd2\x08]\x89\x1f*Vf\x17\xc6\xf0hO\xfd\xe4l\xc3\xc0\x83#\xfe\xbf\x16\xba\xb2\x80\x14\xda\x11\x19m\x07\xfc\xbb'\x10lo{\xd8\xfb\xd3\xb6k\xc5\x99\x14\x0c\x1b\x87~5\x07\x07\xb0\xebA\x172\xc5R\xa9\x13x\xc1\xae\xfc\x05\x9b\x07k\x7fU\xef\xd2\xa4\xff\xe9K\xf9\x9b\x1b\x95\xe0\xc5N\xb7\xd0ZJ,\xf0!\x8c.C\x10\x11\xd3\x94\xcc\xac\xa6\xeb\xea\xc9\xa8\xc7\xa4~\x8eI\xe9\xe8\xdb0i\xb5\xe1/\x84I\x17Qv\xd6\x06\x93\x96\x06\xd3\x82\x96\xb8\x0dj5\x8f\xc2\x88Z51NGC\xb26\x0c+\x0c\\\xcdXu\x97d\x18\xcd\x8a\xef6X\xd5\xd2H+s'2\x81{#\xac\xdf:\xcf\xdd\x98\xa3\xcd6-V\x07s+\x93\xa7U\xe0'\xb7\xb2x2\x18?\xf6\x8a\xa6N\x9aH\xbd\x14\x8eE7\x84\xbc\x97\x85J\x0c\xb0\x10\xe3(\x19\xc5iw\x92.\xa6\x0fge\xddU\x95\\\xe5`rWS\x14\x94\xba.\xa5\xbc\x95\xdf\x94v\xe1\x9c]\xd1\xcd\xc1\xeb\x8d\xbbl\x06,\xbe\"\xcf\xdd%\xb9}\x12\x92F\xa6w\xe7Q\xfe\xbc;\xd2\xcaw\xf2g)\xe8\xc3\x1f\xfbz\xa5\xc7\xda\xb3Vg\xe7\xa1V_+\x7fL\xa1\x1e\x96\xb5P\x8e7\xce\xbe\xd6\xbd\x10\x9b-IF\xff\xa6\xf9\x18 \xee\xec\xe6\x86\xec\xfb8\x98\xb78X\xcd\xe4J\x80\xbe\xe4ErWX\xad\x8b\x03\xb6\xac\xa5B\x84u\xc6\xb2\x89b\xb8\xe3\x14k\x98g-\x8f\xef\xce^\xdbA\xd4\x0f\x00}eZ\xf4\xd9$\x95h\xbcj\xf29.\x9b\xa5\x8f\xbc\xcdK\xac\xd8l\x05\xe1+1\x8bT\xd3h\xc6gsU@\"\x13\xed\xe6DdP\x14\xdc\x1c\xda\xb3t\xe9\x7f\x99\xc6\xbf\xdfYZ%\xfej\xe3\xb6\xcb?\xbb\xc0\x04\x8af\xf8\xc2\xff\x83\x8c\x078~\xd2wB\xe8\xaf\x0b27Kr\x01\xf9w\x179\x8e\xb9\x14\x15`D\xcb\x10\xfe\xec\x0c%-#\xc6\xbb\x0d\xbeWw8\xbd\x1e\\ \xcc\xe7\x16k\x08C3\xcbv4\xb8<\xd8n\xc4\xf2P;\x1d\x85F\xc8%X\xa0\x99\xa2\xc5\xea\xa6*Q!R\xa4'\xad( \xfd\xbd\x16 \x94\x07\xd0\x96\xde,\xca\xd8\xc0\x998(\x9b\xaa\xa9\xab\x95\x08\xcdnn\x07\x96\xdf\xd5\xc9E\x94\xad\x16h\xabs\xe1\x7fd\xe0\x87\xd7\xd2\xf2\x1a\x95\xb0\xd2\xdf\xbb\xb5\xba[\xe9\x15s\xd1\xd9\x8fjVh\xe4)l\xe1h\xf5\x91\xb9\xda\xd4\xeb\xf1\x84\x06\x13\xef\xfbs\x19;OwM\x93\xfb\xfc\x9e4\xccw\xdc\x82\xcf{~\x05\xb2\xcf=!\xae7\x8c\xbaFh\xbf\xb9\x01g\xe9\xafVg\xfe\xfc\x833\xeb\xc9\xed\x99\x80X\xb7\xda\xeaS\xac=+\xccT\xac\xd1\xd6\x16\xbc\xa7O\xa8\x18\x1f\xcd\xa1d\x10\xa2\xf1=\xdf\xfe\xce\x01\xc6\xe0\xc4\x95\xec\xc2\xbd#H\xfds\xd4< \x98?\x13\xbe\x13\xa2uN+\xf6\xf0 `i\x9a\x97\xdeC\xff\x9b\xca.\x93\xc3{\xd3N\xdeq\xebr#4\xa1'\x13\xdd\xa31\xd9\x82!\xbfS\x9a\xa1s\x94+\xe1\xd0\xcbI\xf7\x91\"~\x94W,\x7fdI(\xd5\xc2\x8a\x7f\xbe\x8a\x12&\xcc\xf8K'\x99_\xe8\x95\x89\xdf\xdc\xc0\xeb\xafr\xf8R\x8f\xcaw\xe1\x87v\x9e\x85\x1a\xfa\xaf\x00\xa9\xc9\xc3P\x90~Z\x18!\xe1KP\x0d#\x94\xf6W\xec\xdc\x9f_\xf7\x94K\x8f\xc8l\xa6m\x18\x99=I\xb1U\x0b\x97E\xdc\xf1\"\x9f\xd1\xfcU\x0f:nIs4\x10tw\x07-z\xcc\xd20\x9ck\x06\xed\x9d\x13m|d\xc1\xdf\xadMC5\xbc\xect\xd63\xfa\xba\x15\xd8=\x19\x0f\x05\x0e\xc8\x8d[\xb8\x07\xa9xH\xc8k\"kiR\x1b\xeb\xe6\xcc!PKNCd\x06\xf8L\xd1\x19\xa0\xa8\xa1\xad\xcd\xb1\xd4\xa8\xa3m3\x04;\xd26\xf8hR\xfc\x05\xfbUPC\xdd[gZ\x1b\xd2\x01\xe4\xb2~1\xc0\xe2\x7f\xb1t\xe7\xae\x81\xa8\x16\x04\x9d6&\xd2;\x8b\xeb\xed'\xe1\xe1\xf7\xd34\x9cI\x19\x1b\xc7\xa7\xaf\x85\xc4\x81\xf0\xa9\x12\x82\xe5`Z\x90<|e\xef\xbc\x88\x0f\x06\x1ak$\xce{\xee\x9e_\x8f(\xdaV\xa4x\x0e\xed+\x8f\xbcbD\x17\x11\xe1A\x1f7_\x90\xccpV\x13\x14\xd0\xad\xfd\xb8\x12\xb7\xe5\xe7\x9c\xa6\x17\xd3D;\x8d\x8df\x9cV\\\x98*\x92\xde\xda\x82sr\xf0,\xee}T\xdc{P\xa18\xc2(\xdc~\xfa\xe6\xd9\xf1\xb1\x16O&\x01?f\x10\x84)\x8b71C\xc7\x87\x04\xd9-\x15tNnmR \x1b\xd0\x82\x9f\x9d\xc0\xee~\xf3\"{\x82\x14hXa\xad\x82\xe6I\xbd\xadc\xc9\xaa<4\x8aQ\x16*\xc03\xf7\xe0(\xecG\xede\xfc\x9dk\x8c\xc2XL\n\xc3d\x86(~G\x0e$\xbd\xa0\xe2\xda\xc9\x901\xa5\x05\xc8\xa7\x80K b\xc9\xd4Wrs\xf3\x82\x1e\xec\xef\x8d\x1e\x8aX\xa9\xfaG\x03Y\x93\x97\x8b<\xfa^\x19\xf7Q\xb2\x04\n\xc5\xd9\xa8YK/\x82\x84\xb6\x100\xfd\x01\xfe\x96\xd131!\x92\xfa!H\x1eQ'\x91\xf1\xd8\x99|\xbc\xb9A\x9e\x9b\xbf\xcc\x03Y\x1eb\xda*\xf9\xab\xd8\x04Q\"XE<\xde\xdc\x90\xd5\x02\x7f\x8b\x01\xaa\xf8;\x19\xa9J\xbdQ\xe4\x1a~)\x7f\x14\xdb.01|j\xf9\x981\nx\xb0b\x8bcQG|\"\xe8wK\xe5\xb7\xf4V\x0d\x1d\xf7.\x07\x06Q\xae\xc9\"\x06j\xb4(\x8e\xd0\x7fJ\x89\x84^\xa6\x1b\x02a\xa1:\x9fH_\x14\x11-m\xa7\x81\x08\x0c\xc5^\"$\x0d\x1c\x158(\xac\x1e\xd3P\xbb\x80<\x08\xf5A\x90\x9bFX8\xb7&\x92\xf3\x89^\xe7 \x0f\xf8\xb8\x0d\xc3'\x1e\xfc\xe0Z<\x8c\xc3|n\xb5\x07\xf4k\x9b8Z\x13E\xc3!\x9d\xe3rW\xc8G\xcb\x96\x1c\xcc-B\xf9\x88\xf3\xfc$\x91aFZH\xac<\x04[\x0c\x07\x10\xf0\x7f(\x04\x1bs\xa3i<\xab\xc7-\xdf\x1b\x0f\x9c<\x99\xdf\x99\xf6/XJ\xaa&T\xc9\xaf\xaa\xe7\x95\xd7\x1a\x8a-\x95\xb5\xe4\xb2N\x07\x06\x9f\x82<\x81C\xe0\xe6\x8aC\xa5\xa1W\x184\x085\xec\xda\x83\xb3,\x85e\x94\xf1[.\x8a\xd9\xad\x128\xe4I\x0c\xbe\xeeU\x93\x1e|\xdf\xb3\xe6+h\xd2B\xb4\xd8S\x04\x99\xb8\xcf\xaeR\x16.\xdc\xea\xf2\xd1\xa1\x1eCV\x9c\x0f\xef\xac\xb4\x1d\x12\xf8\xee\xd8\xd8W\xdaOc\x02\x87Z\xcc,f\xf3\xfd]gS\x8d\x0f\xfc\xe9\xe9\nL\xc1D\x03\xb7\x10z\xb1r\x97r<&.\x12\x89e\xcf\xb2\xe5\x92Pw\x15e\x86E\x94\x19\x8b\x9f\xf3h\x95\xad\xc3B\xa0\xd3\x1c\xee\x02-\xa3\xc19K\xdf\x84\xc1f\xc3\xd2\xa6\x05\xae\x98\xabW\xcfbG\x1b\xae\xa7\x0b\x0dL\xbc7\x88\x00\xf0\xbb\x1a\xc5\xf0pOD\xc0\x91\xf1o\xf4\xd9\n\xeb\x00~\x9do\xd3yvN\x07\xa7\xf1i\xf8\xff\xfe\xaf\x9eU\xc0\xe9\x07\xe1\x82]\xbdZ\xba\xdah\x10\x8b?M\xdd\x80\xf4\x17\x96\x90U\x01lS\xf0\xc0\xc2\"oc\xbf\x0c\x1e\xc0\x88(\x0f3\xb3\x86\xe3\x86~\xbf\x0f8\xf8\xee!\xec\x99\xb9\x946\xeef\xb8Dz\x1e\xbd\xd2Jd\x9c\xec\xd3\xa6\x97\x93Ww^\x9a\xcc\xba,n&\xd0\xf8vieZ\xacJ\xa4\xafJ\xc6\xd7\xf7\x13VE@\x94/\xd7CL\x80\xa8\xba\x80\\\x11sSJ@1\x94\xe0\xbc|4\x00\xefR\xc0\xfcn\xb9\x16t\x0d{\xde\xd5\xee\x8b.8\xbf::\x82\xd2\xcf\x90L\x19\xd86\x1b\xb5\xe3\x18\xef\xf8\xfc\xe8s\x82\x15)\x88{A($\x8f\xea\x1dFK\xbe\x87\xaarN\xb1\xf8)q0\x0e\xc6\xa3W\x98\x00\xf9\xba.\x9f\x9b\xc0\x04\xf9{Q@*\x10\xd2M0\xb9\xa096p\x85\x88\x8az\x19\xd3\xaa1\xde\xad\x11M+L\xf3\x89Hs\xa0])z\xe3\xfc2\x8e]C4\x9c$\x8d+\xd9\xfd>\x04\xe1b\x9c\xabs\x0b\xef\x94\xf7\xd7lu\xdb\xc6\xcd#\xaf\xdb\x17\x91\xe7\xf1Mz\xbdbcp\xd4z9\x7f\xf5q?\x8b\xa2?\xf5\xb8\x1bL\xa7Z\x1f\xf7\xc2\xb1N\xe3\x8c\xe9\xc7\xf8m\xf9\xf7O\xef\x9e\xcbc\xcd\x0b\xf6\xf4\x8f\x97\xfe*)\xd4~Q)x\xfa\xf2\xcd\xf3\xbb\xa2\x85\xbas|\x9b\x81\x7fN\xfc\xe1LE&\x81o\xa2h\xc5\xfcpF}T\xf2\xd2I\nT\xa8\xe1k\xe7^\x8bmL8\xc1\x9a\x82\\\xd2\xad0\x91\x0b4\x06\xb1KmN\xb1 E\xb4\xea\x8b\x16{,\xf7\xbbM_&\x8c\xd1\xae/9\xaf\x17\x96y\xfd\x1d\x10\x88%3\xe2m\xb3\x9aV\xf2\xa6\xed\xe5\xe344\x94\xb5o\xe8\xa1\xd6\x90|*c\xba\xc0\x84\xe9\x820\xfd; :\x12\xd7\xe8\xb2k#\xe0\x04v\x87zS\xc3\xca\"\x17\xee\xe4FU\xe8\x1a_\xe7\xbfD3\xeed\\\xbc\xc7\xf3\x1e\xa8\xf2\xe9i\xdf\x9d\x8c\x83pys\xcc\xff;y\xe1\xddPQ\xe8\x877'\xfe\xc9\xcd\xc9\xd3\x13\xcf\xfbZ7\xb9\xc7\x80\xfc\x98\xadW\xeb\x9c=\xb0K \x8d\xbc\xf3r\x15\xf9_\x84{\xd6\x85\xdb\xa4\x15\xe1\x88\xd6\xedD\x82\x80\xf1t\xda'\x9d\xeaf{\xb3\xcfN\xd2\x18#\xc1\xc8\x11\xc2!H2BX\x1eW\xa8\x91~\x1a\xbd\x8c.\xe5\x89\xe6\xa4\x04L\xf8=>\x06\x11\xfcw:\xeb\x81\xd3\xdd\xceu\xe7\x0c\xe9\x95#q\xc1\xb8d\xf2\xa7h\x91\x1e\xf0\x9a\xcb\x9c\xf4\x10\xa6G0\x11wY\xff\xf5\xab7\xc7o\x8f\x7f~\xfe\xfe\xf8\xe4\xc5\xf1\xc9\xf1\xdb_`,_\x9d<\xff\xeei\xf9\x95\xd3\x0f\xfd0o\xee\xc4?\x811\xb0\"\x85!0\x9b\xcb\xeeFf\x04E2\xe3\x05\x07\x9cZBCX\xe7\xc5Dh\x04\xb7\xe8\x8aIB#\xe6\x9f\xdb \x8d\x10\xees\xb2y\x8c\x0f\xda\xa8\xd8\xdf\x89\xd4p\x89\xd6\xe8\x1c\x92\x1b\x86\x81\xd4hKk\x14\xf0\xa4\x0d\xe2C\xb3l(HN\xfc\x13\xde\x17$\x97A:\xbf\x00\xd7*;\x98\xfb \xd3\xe5\x90cc-\xd0\x16\x07\x81\xcf\xcc\x1dQcJ\x8a\xdb\xa6\xb1\x93\xa7'\xb5\x8d)1m\xab\xc6\xfc\x13\x83<6\xf7x\xb6\x1e7!\xf4\xfb\x12\xab\xc5O\xfeg[\xad\xe3\x93\x17\x9fo\xb5\x8e\xc3e\x9b\xd5\xaab\xa0/\xb7Z\xdb\x9fu\xb9\xb6?\xebzm7.\x98\xe9\xb4\xe7\x9f\x0f\xfa\x03\xc3X\xb4{\xa9H\xf6\xf6 S\xc9\xbc&\x10\xaak\xcaa\x0e\xbfP(\x02fX\x87L\xfe,]C\x99\xfc\n*\xe4\x97\xa2\x8e\xb4\xffy\xdb\xae\xed\xc7\xd7N#A\xd7\xd8\xe2\xa4\xf4\x8b\x93no\xd3\xd9\xcd\x14NO\xd3Y\xd7+\xbc\x1c\xeb\xbd\x17~\x10}H%\xf7=\"\x10\xb1\x85\xfb\xee\xbfn\\N\x8by\xe5n\n\xdf{\x13\xcf\x9b\x14(\xb9V\xea\xdc4X\xb3$\xf5\xd7V+\x96\xcfN\xac\xe5\xe1\xca\x83>\xbbbsA\xb3\xa9\xd2H\x96~\x01r\xcd\x10\x07\xc5\xa23\xd9\x08\xb7L\xf3\xb5\xa7\xf47H\x81\xa9yx\x8a(\xcb'\xa1\xe7'\xf74\xf3\xee\xe7q\x1c\xc5\xae\xf3\xad\x9f2\xe5K\xcbx\x99)(S \xf2\x89v\xd9t8#\xda\xa7\xcb\xa6\xa3\x19y+e\xf4sg\xd6\x83\x0e\x9b\xee\xcer\xf3Wv \xbc\x03\x97\xff\xaf\xff\xee\xed3W,\x83\xc9\xff.\x10\xe1)\xba\xbc \x8aN\xd1e\xd3\xbd\x19\xc5\xa5\xe8\xb2\xe9\xfe\xac\x07l\xfapfC\xc2(p\xc5\x80\xb7\xd3\x873A\x94\x0ez\xb0\xe3=\x81U\xeeK\xb9\xf3\xc4\x83\x15\x1a\xf6\x99\x90\x14\x88\xa8\xd1\xddU\x15\xfd\xd9\xc0\x8bM\x1f\xcfp\xe1\xf9\x9e\xed\xb3]\xb8\x0f\xee\xfe\x00\xee\xe3j\x0df\xd0\x85\xae\xcb\xa6\xc3\xe1\x8c\x83\xd9@\x8a\x00qC\xf4/\xb77\x9e\x88\xcb`]6\x0dzV\x1eFS\xdf\xda\x82e?a\xe9\xdb`\xcd\xdce\xff\\\x93?\n\x0d\xda\xa5\x0b\xce\xd3o\x9e}\xfb\xfc\xc5w\xdf\x1f\xff\xe3\x87\x97?\x9e\xbcz\xfd\xdf?\xbdy\xfb\xee\xe7\x7f\xfe\xcf/\xff\xf2\xcf\xe6\x0b\xb6<\xbf\x08~\xfb\xb0Z\x87\xd1\xe6\xf78I\xb3\x8f\x97W\xd7\xff\x1e\x0cG;\xbb{\xfb\x0f\x1f=\xee>8<\x0dOc\xe7\x96\xec; x\xbe\xc4\x86\xddY\xfbm\xc1\xd3A\xa3b\x9cc\xc7\xc8\xa2\x1e\n)\xf2_H\x1eCa\x9d\x8e\xa8\xe3\"b\xcfr3vi\xbcN1\x00a\x7f\xb7Qk\xc4\xe0\x00\x06\xad4?(\x13\xdf7\xbe\xb6\xe2\xc1\x18\xfe\x0b\x1e\xa1\xf0\xb9\x08\xf6\x9f|q\x06E\xe9\xc5\xf44>\x0d\x0fgB\x86a_\xf4\xa0v[|\x8c\xffc|\x95\xd8\xb7{n\xd1\x07)\xff\xee\xc1\x13\xe0\xab\x9c=\x01\xd6\xedz\xc0\xe0\xbf\xd0\n\x8c\xe4%\xa4\xce\x99\x8b\xfc\x10pt\x04\xc3}\xd8\x82\xd1\xde\x9e\xd7\x03\xbd\xf8Q\xb9t\xb4\xb7\x07[\x90p\xa4\x9f`\x12\x90\x83\x03\xd8\x87\x1b\xf0\x158\x04\x12\x1c\x98\xe9r\x15[4\x00\x19\x087\xc3\x81\xdd\x87}T\xd1|\xd2\x90`\x0c\xc3GJ\xd0Slk`lk$J\xf1S\xe1q\xc8\x97F\xaf\xb3\xab\xbe\x8c1\xe9\xc62\x8e\xd6\xea\xc1\x9d#O\x80\xe8\x1e\x1f\xe7u w[\xa9\x08\x06\xf6\xe0,\x0e!\xd0\xf6Z\x93\xb6\x00\x1d\x93s\x8b\x15\xa1X\x80/k\xc45~\x0d\xae\xb1@\xe7N :\xf1\xe4\xfb\xd3\x00\xb7\x8fo\xfa\xfe\x0eR|Z\xe9\xc8T\xba_*\xdc\xdf\x81-@s\x1c>#7\xe0\x10\xfb\xc8\x83.\xa4SfW\xa8\x16\x01t\x87\xf4\x87\x9fyD0\x86Q\x0e\xae\x85v\x06\xa6vv+\x85\x07\x07P\xeeq\x7f\x17\x1b\x1e\xe6\xc0\\h\xb9:\xc0\x83\x83J\xc3\xfb\xbb\xc5\xf6z\x10\x17\x01O\xfd\xfad\x02\xc2\xca\xceVd\x7f\xc58\x93U\x02\xc1*,\xbc%\x89\x16\xd5x2X\x9c9>\xf1\xca\xb7\x19\xf2\x97\x985\x12\x83[o\x03C\x80\xca\xfc\xb8\x91>z\xae\\\x83\xf9\xe1\x0b\x9f\x90 \xd8\xea6\x16\x88|\xa1\xf3)\x9b\xe5I\xc0\x94\xa8\x96\x16|\xe6\x08f\x15E\xb2q\xb3=\x87\x08\x84\x13\x84\x10\xd7\x1b\xf0\x04\xa2Id\xd3j\x08\nY\xdfo\xecZ\xfe\xdd\xc9P\x07i\x9f\xe6>x5a\x81\x90\xa8;1k^\x16\x11\xce\xa2U\xd2\x0e\x058\xc5SyG\xfa\xa6*\x9c\xf8\x93<\x8cZ\x1c\xfa;\x9e\xe1\x8d\x1f\xc4\xc9\xdf\xeb\x10\x0b\x7f\xdd\x9a\x83\x9a\x89\x19=\x8dc\xff\xda\xf5\xa5\xdb\xa3R\xf4\xf0\x13\xec\xdf\xed\x04\xfbx\x82\xcd'7h}r\x03\xf4\xe1G\x93!\x0d\xe1~`\xd7 \xff\xba\xec\xd6ok%\x9b\xb2\x19Ge\xd1t\xc0o\x19\xfcw6\xfb\xd3\xa1\xde\xb2\x8f&\x9a\xfac9\xd4\x99\xf0\x06\xb6\xeccT\xd8\xc7\xcc\xb8\x8f\x99m\x1f\xf9ne\xb8[Ae\x89{\x10\x89\xb5\x0b\xc4\xda\x05\xb8vV\"&\xfa\xeb\x0fp\xf1\xd6\xbe\xe51N\x98Uun\xf6)\xfcrg\xb8\xf6\x82\x0dB\xb0\xc4\xfe\xd2\xee\xb1\xb0'L\x10\x15\xa2\x0d\xa7lV{\\>/\xc4\xdb\xf0\xfc\xdf\xcd\x8f\xf2\xb7\xe4A\x16.\xd82\x08\xd9\xe2\x13%/5\xcbp\xfbE\xf5*\x19\xe6o\xcb\xcf}\x8c\x82\x85\x8c(V\xd7\xbb\x89\x93\xab\x13\xfa\xfd\xcd\xbc\xa1\x7fK\x1e\xc4\xec\x9c]}\x11U\xca-\xe4f\x01F\xa6\xc1zm.'\xe5Mg\xa6\xb19\nxp\xfa\xc0\x9d\x9e\x07\xeb\xd9}\xef\xeb\x07R\xb3a\xae\x1e\x1bb\x0c\x80\x18\x94\xf3@\x8a\xdd\x07V%\x02i:\xa4\x05o8\x1d\"\x1b&\xd5\x07G\x9c%mq]\xf3\x9e\xd0\x9aw\xcar\x03\xa0\xb8`\x0b\x947Si\xe5K\xdf\xc1\x7f\xce\x8a\xcbS\xa2-:\xa9\xdf\xca\xab[0\"\xea\x81e\xc5P\x93\x95kFY\xaf\xcc\xc7|\"\x92PT\x1au\xd0\xd6\x14\xe6\xb6\xf8\xa4vC\xf8Zu!\xed'Q\x16\xcf\x19ty\x81ua\xd3\xfe\xf9*:\xf3WB\xe7\xd7=\x04\xe7\x9cB\xf5\xe5\xa9\xe7\xf3Wkz\x15\x9c\x87Q\xcc\x9e\xf9\x89\xfe.\xe0\xef\xd8\x97BfO\xb4J\xea~\xd1\xa21]\x06\xe1\"\xbaT@A?\xfb,\xd9\xc4\xc1\xda/\x19\x06\x06\x8d\x98\xd1\xa8N\xf8-y \x07\xff\x17\xe3\xc6\xaa\xbaF\xfe)\x18p\x11\x06\xf8\xe6{\x16\x11!\xc8\xf48}4\x0e\xe3g\xa1\x9eM\x8f\xfd\xf0\x9c\x8dkyo[TQq8^\xc7\xd1y\xec\xaf\xe9P\x84\x18\xfb\x8e\xef\x98\x0c-v\x16-\xae\xb58<\xce\xf3+\x0e\xf9I\x10\x85oR?ek\x16\xa6\x8eVu:\x98\xa9&\\\xe7i\x1cG\x97/\xc4\n\xe7_\x96?`\xea\x0d}\x8bN\xcf\xb7\xfd\xca\xc0\xe6\xebZ\xb1\xba5hD\xd4\x9f\x84\x8eEt\x9c\xe6\xcd\x0f\xb4\x8d\x0f\xeb6\xbe~\xd3\xff\xb0`s\x9b\xc3\x0b\xdej\n\n\x88\x81\x95\xdb0\x14\xbfu(\xe0\xbbc\x84\x82\xbc\xaa\x82\x02^\xd7\n\x04\xc5\xfae \xe0\xc0v\xeb\xaf\x0cf\x10/\xfc`\xc5\x16\x90F\xca\x16B!\x0c\xbb6\xc5\xd8\xc1\xc6\x8f\xfdur\x0b\xab\xd0H\x06T\x0d\xfd\xb5 >\xc5\x0di\xec\x0cW\x1c7\xba\x07\xce7\xabh\xfe\xa1t\xde\xec_\xe1\xf2Mp\x0d\xe4\x02\xbaQ\x0fB\x199x\x8a\x96\x0b\xfc>\x9e\x0egt\x01\x0b\x95\x8b^\xdd\x91\x08\x02#F\xe5\x9f\xd2g\xf5&4w\xbe\xa1\xe5\x00\xfe\xd4;Z\xdd\xba\xcat\xed\xcb\xda8X<\x00\xf6F&\x8b1\xf7\xd1N\xa98\xa3\xda\xe5b\xbfN\xdaW\xac\x9a4\xcb\x15J\x08\x0f\x0e\xe1q\xb1h \x870,i\xb3Vp\x08;\xa3\x12(\xf0\xb2\x9db\xd9\x05/\xdb-\x96-x\xd9^\xb1\xec#/{X,\xbb\xe6e\x8f\x8ae\xe7\xbc\xac4\xbe5\x1c\xc2ni,\xefyY\xa9\xdf3^V\xea\xf7\x12\x0ea\xaf\xd4\xc7\x15\x1c\xc2~\xa9\xbd7\xbc\xac4\xb7\xe7\xbc\xac\xd4\xc7S\xbe|%7\xc4W\xbc\xac\xf4\xedo\xbcl\xbfX\xf6\x01\x93\x15\x96*\x1eca\xa9\x97\x1f\xb1\xb04\x95\xb7ph\x80\xf8\xc1\x18\x9c\xd3\xd3\x81\xe1\x1ez\x88o|\xc3\x9bG\xf8\xe6\xcc\xf0\xe61\xbeI\x0do\x86\xd4Qhz5\xc4W\x1fM\xafF\xf8jiz\xb5\x83\xaf\xca\xd4\x1c\xff\x1b\xd1\xd0\xcbBh\xfe\xb7\xb3;\x86{\xa7\xa7\xce=\xc3\xd8\xa9\xaf\xd3Scg\xd4\xdb\x89\xe9\xdd>M\xed\xbdi\xa5F;\xd4\xeaK\xf3Kj\xf5uI\xc6P\xac\xfa\x8c_\xd6\xce\xb5\xd3\x03\xe7\x17\xfe\xbfk\x96\xe0\xb3\xf8\xe7\xf9\x1b\xfe\x0f\xd2\xbc\xce+\xfa\xff \xff?>\xd2S\x84\x8f\xf4\xffWX{\xb9\xc4\x8a\xe2\x9f\x17/\x9c\x99)\x90\xc6\xeb*\x92\xcc\xc5\xb5%\x0d4Y\x9e\x1c\xd6z\x93\xf5(X\xc6ho\xcf#B\xe8\xca\xa1h\xbd\xa3b[\xca\x02\x19\xab\xef\xef\xed\xed\xc8\x0f2\xf1\xc1\xae\xe1\x033\xc9\xde\xa1FvG\x8fw\x1f\xef?\x1c=\xde\xf3\xbcb\xf8\xdby\xb4`\xb0\x89\x82Bz\\\x8av\xb8\xf6\xafe\xda\x85\xf3\x98\xf9)\x8b)\xf3\xc2\xe0\xea\x85\xf83\xd1\x0d8\xd0wb\xa0\x8f\x8a;[\xf8%o\xbc\xd3SG\xc4p\xcc\x836\x0e\xf0\xfbm\xc5'{\xd0\xd5\x987S\xb0\x92\x9f\xaa\x9b\xa5\x85\xac\xc6\x9d\xc9crG2\"\xb6\x0c0\xfd\xa3\x9f^\xf4\xd7\xfe\x95\x8b\xf9\xc1E\xf1\xcd\x0d\x8c<\x19\xda\xfbC\xb09\x0e?\xfa\xab`Ami\xbf\xf58\xdc\xcbUt\xf9\x92}d+\xa4`\x83\xe4$\xe2kz\xee\xa6\xf9\x1bO\xfa\x1fie\xb2\x97\xf4z%\xe2m\x17\xaeU\x1bE]\xcd\xffkH\xdfU\xe0\xdcrw\xfe\xff\xfca\x919\x87\"\xfb \x19iP\xc6\xd5\xb8\xa40`J'C\xce\xff\xd1\x13\x8a\x88:\xa4\x8c\xe4\xf14\x10Z]q\x16\xd84C\x0f\xeeN\x87\xc8\x99,7]\x1d\x91A/\xff\xcc\xc0\xd5r\xd0\xc8\x94\xff\xb6\xd7\x03\x97\x12\xb8\x95B\x90\xf7eV!\xde\x0foOdt\x98\xf7u7\xcb\x1e\xf8\xd4\x99\x8f\nk\xfd\xd5\xd4\xe7\xe3\x0b\xa7\xd9\x0c\x0e\xcb\x91oA\x13p\x17\xe1\xd9\xd5@\x8c\x03\x0e\xb6\x98H\xf3H\x05;Q\x9c\xfe\xc0\xae)\xd5\x8c\xfaQ\x8c\xde\x1e\xb2\x7f\x06\x0b\x19=]\xfd\xba\xb9\x81G2\xf6y\x18\xfd\xc4\x96\xd4\x86x\xd4[\x08\xa3g\xd1z\xe3\xa7?\xf2\xe3Lu\xb4\x02\xbd\xe6<\xe2\xd0\x8d\xeeV\x97b)\xb5\x02\xbd\xe6\x1d\xe2\xc5\xcb\\Du\x9f<\xbf*\x86\x98\xc7\x9cWa\x1e\xa6\xbe\x98I\x9a\x97,2\xfe\x85\x9f2a\xa7@\xa5Y\xc2\x16\xdf\xeao\n\xc1\xfdL8\xe2\xc4x\x98\x10\xe8\xc5i\n\xe0\xb0\x14:\x96y\"w1)\xe6\xb6\x87\x04\xd7|l\x89f\xaa\xf4\x04\"8\x80\xe4\x89\x879\x1a\xd0j]\xa6\xe6\x17n|\x98\xf8?\xf2\xd0\xda\x87\xfcCD\n\x0b\xd1A\x82\xa9\xdd\nox\x97\x14\xc65Bc!z\x0eu!\xc4\xa9\xe0\x03C\x01\xd7\xddC\x08<>\xc4\xeea\xd9\x9dL\x80\xb0_\xbbD/\xebbo\x9bc\xebJty\x1f4\xce\xce\xd4\xf6\xb7U\x14-\x19\x0e\\\xb1\x15\x87>z\x9c\xd76\xf4okC;\xa3b`\xaa\xe1h\x1f\x99\xf7\xfda9\xf2\xd5\xe8\xf1\x1e\xff\xc5)\x94\xdcm\x82\x93$\xe2\xd7\xcd\x0d\xec=\xdc\xd9\xdd-~\xc7/\xe3\x1d\xfe\x8b\x92Q\xa8\xaa\xbc|\xbf\xd4\xf5p\xb8;\x1c\x0ek'\xf2\xc2:\x11\x9cb\xa9\x1fl\x99?\xbe\xcf\x1f\x9f\xe6\x8f\xaf\xf2\xc7\x0f\xf9\xe3\x8f\xf9\xe3e\xfe\xb8\xa8\x1d\xd6;\xeb\xb0\x1e\xfcz\x1a\xde\x07\x19\xc8D\xdfn\xf9\xc4\x0f\xd27\xd5X#\xbfs2\xa7X\xf4\x0b\xe7U\x8aE\xff\xe4\xb4M\xb1\xe8g\xc0\x88\xd2\xd5A\xfeP\x1fg\x9d\x8f#\xd2\xed\x9b:\x86\xe8'sK\xf9\nO:\x85\xfa\xa8\xbe}Kx\xa0R\xce)\xd5\x7f\x8b\xec\xa3\x85\x04%\xa5\x9d\xc4x<\x9do]\xba\x8c|,;\xcb\x1f\xdf\xe4\x8f\x97\xf9\xe3\xfb\xfc\xf1i\xfe\xf8*\x7f\xfc\x90?\xfe\x98?.\xf2\xc7\xeb\xfcq\x9d?n\xf2\xc7\xe3\xfc\xf1*\x7f<\xcf\x1f/\xf2\xc7\x8f\xf9\xe3\xf3\xfc\xf1713{V\x17C\x82\x07\x839\x8a\x97\xbf\xed\x10\x0bb\xf2\x06\x0e[\xff\x13a\x05c\xdd\xef\xd7\x9a\xcdS\xff\xe3m'@\x91\xdd\x9a'\x02\xe2\xe6\x8a\xa7\xa3\x861\x83\xca\xffB\xb3\x9c\xa3\xfa'\xe2'=\x81.\xe7\xf50\x9b=_\x07Q\x01&\xfcqL\xc9\xeb\xa0\x0b\xffp\xe7\xc4L\xa2\xd2\xa2\xb63{\x98K\xc8A1\xb2V\xfa\x83\x83g\xe65A\xfb\xcf\x8d\xd0~\x0f3\x934+\xf7\xe4\x9fb\xa4s\xaa\\p\xcaV\x1aI\xc8LK\x84\xd0\x111h\xfb\x80\x0e;\x9c]\xdb\xdf\x19\"\x11P\x8dO\x1a!WL\xdf\xec\xef\x8c\x06\x90\x07+\xdd\xd9\xdd\xe1\xcc6\n\xa6^\xbb\xc3\xc1\x08\xbd\x96\x19lS\xeb\x949f[|\xd6%\x1e\x8e/\x1b\xa7\xdd\xc6$\xf3z+\xcce\xbb\x87\xd0AJ\xe6\xdf\xfc\xe2\x99@:\x8df0\xa6[\xee\xb5\xd9\x1bM\xff\x93\xba\xd4\xba=\xf3(}\xa8\xb9!\x11\xfc\xc1\xbee\x05\x99n\xb0\xdeDI\x12\x9c\xad\x84\xb7\xfb\x18\x02!\xaa$\x0b\x10\x8a=\xe64\x11v\x7f\xb8\xf5\xfc\xfc\xd7\xf64Rp(\xe95)\x00\xc4\x90k\x06-@\\D&\x85XRF\xf9E\xc8\xcf\x1b%\xd46\x7f7\"|\xa4\xde\xf1Q8]\x07\xb7K\x1e\xcam\xbalNC\xa7v\x86\xdf[\x19a\xdb\x909l\xe4(u{\x88\xb9/\xa9\xf4\x85a,\x8a\xf8\x99\xb2\xf1/E6\xfe{G\x98\xa2_\xd0\xfe1\xf8\xf39\xdb\xa4 \xaa\xde\xf0\x06^QN0\\\x81{M7MqZ\xd3\xd5\x8cff\xbfy\xecW\x8ad\x87cc\x95\xda\x90\xd3\x06\x83,#\x9b\xdf\xa9\x97\x8f\xfeOA\xc6G\x87\xbe\xcc\xb3\x17\xf4\x07r\xc8a\x8f\x8er\xd8\x83\xce\x10C\xdf\xa8\x9f\x03Cj\xe0\x04\x14\x94P\x13\xe5$\xad\n\xf9\xe9,\xed\x01E\x85+r\xb9\xe5\x14\xa6\xbc\xf9y\x0fV=\xb4\xff\xa8\xbaIq\x00Ea\x87z\x85\xbe=\xf2MU\\\x86\x02;W\x93P\n\x8dX\xae$Q\xbbM\"@-al~\x13\x18\xda\xd1\x8a\x1aZ\xd4?.\xa0:\xa5\xee\\g Z\x12\xf8pF\xa9n([y\x9d\x05\"\x14D\xacDB,\n\xfa\xb6\xec \xf1`C\x0fE\xf6\x9c\xd5\x10\x1b\xceW&\xe2@\xedb\x1c$\xa1\xd6\x12\x91%\xc2)'p\x16\xd3h6\xeb \x1cCf\x80>\xe5`\xa7\xff\x08\xee\xf1t\xb58A\x02\xf8\xf1l\xf0\xa7\xdc\x9b\x823\x1e2\xeb\xbb\xac\xb3\x14[\x875\x8b\xc9\xcc'\"r\xd3\x84\x13\xaa\xe2\x11\x1c\xe5\xf1MS-\x1d{?\xf1\x97\xec\xdb\x92\xb5B\x8d\xe5\x1eM1\xee\xb3\xab\x94\x85\x0b\xb7z\x8e\xc8Fs\x0cYq\xb7\xf0\xc6/\x8d\xeeN>?\x02\x90\xc85V\xba\xd6\xf0\x83\xed\xbc\x7f\xcf\x92\x1f\xa3E\xb6\xaa\xc6.\xfd\xe8\xaf\xb2\xa2w\x1f:\x8a\xf5\xcfY\xfa,\n\x97\xc1\xf97\xd7\xefb\x0c\x86\xdb_D\x97\xe1*\xf2\x17T\x0e\x87\"\x1eB>\x80\xdc\xe9h4\x18j;h\xf8\xd4\xae\xf1*\xdb\x16\x18\x15\xbd\xa2\x92;\xe0C]\x86\xfd%K\xe7\x17^\xc5E+\x9f\x93qJmvU\xd51\x92-\xca\x97\xb8\x9fl\xd8\xfc)\xd6L\xccH2\xf7\xe7\x0dJ\xcb\xe1\xa6^?\xbd`\xe8\x07\x17\xe9\xe9F\xe5\x9f:E\x91y\x14\x80\x9aSM\xbe\x8c\xce\x88\xa8.\xed'\xa9\x9ff \x1c\x1d\xc2\xee\x00\xd3[\x04\xfdl\xb3\xf0S\xf62\xf2\x17Ax\xfe\x06\xdf\xbb\xce\x12\x1d\x17i@\x9c\xb3\xb8e\xb5w\xf1\xcaux\xc1<\n\x93h\xc5\xfa\xa8\x14se\xffo\xd9U\xaa\x91'Y\xbc\xe2@\x86\x17\x07R\x89\xcc\xe5[)\xdcQ\x7f\xf1\xd7+\xea\xc1s\xc3~\xca\xae\xca!\xb4\xa1\xaaF\xfb[\x9d\x1f\x1d\xf2\xcfY\xda\x12\xd2R^\xf78t\xcbw\x15L\x80\xc1\x18\xa6l\xf6\xf7\xc2\x12\xa5s\xaf\x08w~\xfa\xf7\x0c^\x84H\x91\xcb\x1b<\xef\x0b&\x10\x83)9\x93\xd4\xc7\x96\x83\x17\x16[F5\x9a;\xdc\x7fT\xea1\x11#\xd9-\xe2!j\x93\x02I\x92\x0b\x06\x07\xbcL\xbe\xf0\xdc\xa0\x07I\xff\xdd\xebo\x9f\xbe}\xfe\xfe\xd9\xab\x93\x17\xc7\xdf\xbd\xe9\xb5\xdc>\x0c\x0e\x8d\x80\xeccp\xd1\x7f\xbc\xf1\\\xd6\xdf\xf8\xd7\xfc\xa8\xeb(\xde3\xf7\xfa\xf6\xd5w\xdf\xbdl\xdb\xab\xbc9U\x07f\xb5/\x02UEt\xa2\x86\x9c\xf0\x97=\xe8\xc4\xc5\xd1\x05\xc2\xf3t\xe6}\xc5\xf7\xf9\xc1\x83\xff\x03\x14J\xe2G\n\xdb\xf4\xee\xa7\x97\x87\xc9\xa5\x7f~\xce\xe2\xed,\xd8\xe6xg\xe1\xaf\xa2\x90m\xa3N$\xed\xff\x96\xf4\xd7\xfe\xe6\xff\x07\x00\x00\xff\xffPK\x07\x08v\xf2\x8aA\x86\xba\x01\x00\xc5\x87\x08\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00 \x00swagger-ui.cssUT\x05\x00\x01\x80Cm8\xec\xfd{s\xdb8\xb27\x8e\xff\xff\xbc\n=\xbb\x95\x9a\x99\x1dS!EQ\x17\xabf\xeb\xc8\xb1\x93q6r\xc6\xcem\x92\xad\xad)\x8a\x84$\xda\xe0\xe5\x90\xd4\xcdz\xf6\xbd\xff\x8aw\\\x1a $;s\xf6\xf7\xad\xb3\xd9dl\xe2\xd3\x8dFw\x03h4\x00\xb2\x9bl\xed\xe5\x12\xc5\xda\xda;\xfc\x9fN\xe7\xe5\xdf\xfeo'\x08c\xdf\xc6\xde#\xea:I\xd2\xd9\x0c\xbbzW\xef\xfc\xbf\xce\xec\xfac\xe7\x9d\xe7\xa0 A\x9d\xff\xd7Yz\xe9j=\xef:\xa1\xff2@N\x88\xed\xe4%M\xf7\xb7\x97\x8b0H\xb5\x85\xed{x\x7f\x9e\xd8A\xa2%(\xf6\x16\x13'\xc4a|\xfeWs\xde7,\xe3\xdfD\xfd\x9dU\xea\xe3\x03\xf6\x02\xa4\xad\x90\xb7\\\xa5\xe7F\xd7\xb0&\x9a\x9fh)\xda\xa5Z\xe2=\"\xcdv\xef\xd7Izn\xe8\xfa\x8b\x89\xb6E\xf3\x07/\x85K)\xce\xf3\xd0\xdd\x1f|;^z\xc1\xb9N\x95\xd8q\xea9\x18\x9dQ\xcf\x12\xcf\xa5\x9f,\xc20E1\xf5h\x85l\x97y\x14\xd8\x1b\xea\xf7\x049\xa9\x17\x06\x07\xd7K\"l\xef\xcf\xe78t\x1e\xe8\x16\x1b\x87\\K\x99\xf0\xe7=\xe4OJ\x19\xbb\x83!\xf2;\xb4\xa4\x0bo\xe9\xd8Q\xc6\xf0\x8cy\xbc\x8eii}\xdb\x93UZPT\xea0\x90\xdf\xe9\xeb\xd1\x8e\x96+>T\xca\x9d\x87\xbbL\xe4\xdd2\x1f:\x16a\xec\xf3\xca\xfbg\xba\x8f\xd0/1JP\xfa\xaf3\xbe Y\xcf}\x8f)\x01*\xcbf\xb5\x92\xa2(\xfdW=\xb6\xdaQ\x84\xec\xd8\x0e\x1ct^\x14\x01\xd5\x974\xe7\xe7\x9a\x1f>j\x8b\xd0Y'\x9a\x17\x04\xcc\xd4C\x8a\xaa\x04-\x85o\xc1\x16\x95\xf3 \xde\xeb&\x91\xed\xba\xd9l\xa0K\xda\xd0\xb0\x89\xbd`)n@+\xae\x92^\x02,E\xa7\x11\x87p\x9df\xbevnD\xbbr\xec\xed\\\xe4\xc0\x8fh\x972\xb3$\xc2n\x82\xd2C\xd5\xb0\xaei!\xbf\xd3\x1d\xe6\xff\x0e\xb8a\x01\xa3%\n\\h\xda\xac\xe7\x14j\xd6$\x9e\x16\x83a5\xacW\xdd>\xb5\xe7\x18M|{\xa7m=7]\x15\x1d\xa5\xd6\xf2d\xbb\xf2R\xa4\xe5\x83\xf4y\x11y1Sl\xb8\x8cQ\x92\x80\x83\x8f\xd2(Xw\xe1\xbaw\xd9\xeb4\x04\xac\xeb\xac\x90\xf30\x0fwP\x1f\x89m\xd7\x0b\xffu\x92Vd\x0e\x15\xac\xfd9\x8a3\xef-\x19\xe7^\xa9%\x91\x17h@\x17\x14\x10\x85\xeb\x94&:\x94C\x90\xa0\xa1 \xb2cg\x05v\xdfLY\xb9\xc7LJ\x0f\xd3\xc2\xc5\"A\xe9\xb9\xd6cB+\x8aU#K\xf1@s2nX\xdc\x06\x11]\x13\\@\xd2q#[C\xbf\xf00\xd2\xd6\x11\x0em\xb7R\x82pt\xcaG\xed\xcaO\xe9X\x00\xa5\xb6\x87\x13:\nE\xc1Z\x12\x85&k\xdf\xb7\xe3}\x8d\xc0^\x92j^\xca\xf4*\xc7\x0e66\xec\xc4\xb4V\x8b \xed_\xcc$\xe4G\xd8N\x115\x93Rd]\x17\xcd\xd7\xcb\xce\xdf\xa8q! \xb1\xe7v\x96!v\x01\xac\x96\xf7;\x90\xe2\xaf\x8b\xc5\x02\xa2\x98c\xdby\x80)\xd8\xf8\xa7\xa4X\xc6\x9eK\x04Ndx\xdbY\xc7\xf8G\xd7N\xeds\xcf\xb7\x97\xe8e\x14,'Y\xf7\x1d\xf4\xcf\xbc\xcf\x17\xef\xef\xb6\xfa?\xde,\xc3\xe9t:\xbd\xf9\xf0iu\xf5i\x99\xfd\x98\xffs\xfdj\xfau:\x9d^^]\x0e\x07\xef\xb2\x07o~\xbf{\xfd\xe5\xd7\xbb\x8f\xf3\xde7\xdd\xed\xbd\xde\x7f\xbb\xbd\xb8\xf8\xf6f\xec}\xfbp\xf1v\xfe\xe5u\xf0\xed\xf3[\xfc\xf5\xcb\x9d\xe58\x18\xff\x96\x11\xecW\xd1\xe7\xd7+\xfd\xcb\x951{\xef\xdfl\xe6\x1f\xacU\x81\xb7\xfa\xf3\xdf\xa7\xc5\xff.\xb7/\xd1\xaf\x17\xab\xaf\xbd\x14\xbb\xaf.\xbco_\xdch~\xaf{\xc3\xe1\xfa\xe5\xb5w\x11}\xbb\xd4\xbd\xcf\x8f\x9fofW\xc6\xf6\xb6\xf79\xb4?\xad\x06\x8e\xff\xf9#z\xb0>}5\xa3\xf8\xeb#~\xb8\xbe\x1f\xfd|}\xb9\xeb\xbf\x0fV\xa9\xf3\xc6\xc0\xee\x9b\xab%zc$\xf3`6@\x97\xba\xf7\xf5\xcb\xdd\xe6\xab\xffi\x90\xfd>\xff\xf2Y\xff\xfaa\xe4]\xff\xba\x1c\xa07\xc6\xd6}\x93\x8c\xaf\x1f^?\xcc{o\xf1\xf5\xeb\xd5\xcd\xa7W\x17\x97s\xf3-\xbe\xbe\xfc\xb4\xbe\xf1\x8c\xfb\xd9\xc7\xab\xdd\xf5\xa5c\xbd\xbb\xbf2\xde_\xce\xf67\x1f\xb6\xcb\xd9\xfdtw\xf3a\xb4}\xffa\xb4\x9b\xbd\xd2\xb7\xb3\x8f\xe1nv\x19\xeeg\xaf\xa6\xcb\xeb\xea\xef}\x7f\xf9\xdb\xafo\x1f\xbe\xddG\x1f\xee\xae\xbe\xd6\xf28\xfe\x9d\xff\xdb\x87\xb7\xa1\xfb\xeb\xdd\xf6\xbd7\xda\xb8\xa6k\xbe\x0b\x9c\xc7w\xfex\xffm?\xda\xbd\xff\xf8`\xbd{\x9c\xee\xdf=^\xef\xdf\xfd\xfe\xf6\xe1\x9bg<\xa2/\x96\xfe\xf5\xf7e:\x0ff\xf7\x04\xdf\xabo\xbf\xdf\xdc;>\xde\xbao\xf0f\xee]\xec\xbf\xbd\xf9:\xf8\xfa\xe5\xed\xc6\xfd\xfdv|\xed]7:xcl?~\xd2\xc7\xd7\xfeJw\x7f\x9d\x0e\xde\xed\xc7kg_\xdb\xe2~\xde\xd37\xe8\xcd\xeb\xed\xbb\xc7\xab\xf5\xec\xd58\x9d\xe7\xfaY\xa5\xf37\xd6\xe3\xfb\xe0F\xff\xe4\x7f\xa6d\x9e\x07\xb3u\xa9\xd3\xf5\xd7\xde8}g\xaeV\xce\xab\xd1\xee\xdd\xfdt\xe3\x18w\x96\xf3\xe6\xd3\xe6\x93\xff\xf9qn~\xde\x7f\xed}\xfe\xf0\xed\xcb\xd7\xfbk\xef\xa2?\xff\xb2[;\x8fQf{EY\n9\x9c+\xe3\xe6\xfd\xc3\xdd\xe6\xab\xf99\xfd\xf6\xc5\xd2?|\xba\x1d_g\xb6~e=\xd8_n\x07\xb3\x8fw\x97\xef?~\xed\xdf\xe8\x9fz7\xfa\xe7\xd7\xb3\x8f\xaf_\xdf\xdc/{\xb3\xc7o\x97\xb7\xf7\x0f\xdb\x9b\x87\xdb\xfe\xec~\xb9\x9d]]\x13\xfc\xf0\xda1\xefVs\xff\x06\x13\xfc\"\x9a\xdf\xad\x1a\xbf\xcb\xe8\xd2\xf1?\xaf\xdc7\xe3\xfd\xe77\xe3\xcd\xfcR\xf7n\x0b\xfd,?\xbdYm\xdc7\xe3G\xfb\xcdx{}usy}y\xbd\x9d}\xfc\xb4\xfc\xc7\x95\xb1\xfa\xda\xc3\xeb\xbc\xec\xd5\x83\xf7\x9b7\x1d\x95v\x1a\xdc\xbd\xf9\xbc\xb7\x7f\xff\x86\xbf]}\xdb\xcf{\xfa\xd21\xef2\x1d\x0e\xec/\xd6\xa3\xfb\xe6\xf5\xfak\xef\xf3\xdb\xbbK\xdd\xcb\xf0\xef|\x1c}\xbb\x0c\xcd\x9b{g\x7f\xfbpk\xde\xdc\x7f5o\x1f?\xedf\x9f>\xf5n\xef\xdf\xbe\xba\xd5?\xedo.\xa7\xfd\xd9\xc7\xe9vv\x7fe\xce>\\\xd7\xfc\xbe\xbd\x19\xdf\xbb_\x0c<\x0f\xee\x08~w4\xbf\xc7V~\x9bL\xf6w&\xe0\x93\x99\xaf\xbe\x1a\xe7~\xf9\xe9\xe1\xeeM\x81+\xfa]\xde\x0f?\xf6\x97\xbf]\x8e\xfb\xce\x9b\xd7\xf7v\xef\xb3~\xfd\xe6\xf3:\xeb\xef\x8ew\xfd\xf2\xb7\xe4\xe2\xc3\xcfof\xd9\x08q\xff\xe1\xd3\xdd\xc5\xe7_\xef\xed\xaf\x9b\xc7\x97/\x1fG\x97\xef\x92\xcb\xfe\xd2y\xf3\xbb\xf7\xf5j\xfa\xe6\xe2\xfa\x1fo.\x02\xf4\xf2\xe5\xe2u\xb4\x9d.\xb7\xd3\x8b\xf1hj\xbf\xeeE\xf7\xf8\xd3mF~\xf1\xf6\xee\x93u\x15?\xbc].\x97\xbf\xfc\xf2S'F\x11\xb2\xd3\x8e\xde\x11\x8e\xa4\x9a1x\xc6\xc1\xf4\"\x1f\xe6n\x8b\xc1t\xba\x18\xbd\x1c\xaf\xfew0\xfd\xdf\xc1\xf4?u0}\x7f\xf9u\x7fw\xbf\xba\xba\xbb\xcc\x06\xd3\xaf\xfb\xd6\xc1\xafe0m\xf8\xdd\xaa\xf1\xfb\x0f\x1aLo?\xb6\x0e~G\x0d\xa6\xb7\xed\x83\xf3\xf7\x19L7\xaf>\xe8\xc6u6\x18\xcd\xea\xc1\xd4\xbf\xeb\xbf\xb4~\xbex\xfd\xdb\xc5b:{\xed\xbf\x9c],w\xa3\xbb\xe9\x9b/\xaf\x02c:\xf5?,\xcd\xfe\xed\xe0\xe1\xe2\xf2\x1f\xb37\xb3\xcbW\xdb\xebWhv\x8d\xfc\xd7/\xad[{{\xe5E\xd3/\xdbO\xab\xed\xd5\xfd\xecr3\x9f~\xc1_\x1e6\x9f/\xb6\xeb\xd1\xe6\xf6zz1\xbd\xda^\xbc\x8aV\xa3O\x03G\xcf\xc7\xa5+\xfc\xfa\xe3\xc3\x87\xf5\xad\xff\xea\x95\xd2\x00<\xd2\xf2x\x97\x1c\x85\xb3`\x99\x1d~\xef#T\x8f\xbf/\xc7\xf7/\xfb\xb7\xd3\xafw\xbf\xaf\xa2o\xcb\xe9\xf4\xc3\xa7\x87\xff.\x03\xd9\xe6\x7f\xbf\xbdL\xa6\x17\xaf\xaf\xdc/71\xba\xcdF\xe6\xdbj\xe0|\xd9\xbf\x9d\xed\xec_\xeft\xe72\xdc\xbc\xebY\x8f\xef\xfcb\x1c{\x97\x8f\xb5\xe3\xfe\xd7\xdf\xa7\x9b\xd9\x87\xfe\xf6\xddv:\xfa\xcd\\m\xbf~\xb9\x89\xbf\xfd~\xbb\xfc\xea\x7f\x0e\xec/\xfd\xf1\xf5\xfa\xe7\xe1f\x7f\xbd\xb4\xbf\xdc\x8e\xaf\xb1c|\xfcxq\xe3\\\xdd`\xfb\x0d\xbeF\xc1[\xfc\xc9\x8c\xde\x7f~s3\xb0{3\xeb\xdb\xab\xeb\x97\xb9\x8f^f\xfd\xf7\"\xfd\xf6\xfb\xdd\xaa\x19#\x96\xe3\xeb\xb2\xee\xf7\xbe\xf5\xf8\xde\xcf\xc7\xe0M\xd6\xe7\xf31\xf9\xd7\xbb\xf8\xb7\x0fo\xab\xb9\xe2\xeb\xc7\xcf\xd3\xe5mo\xbc\xff\xf6aj\xbc\xbb\xff\x9a~}\xbc\xda\xcd>L\xcd\xf7\x1f\xfa\xbb\x9b\x8f\xcb\xc7\xd9\xfd\xa7\xa4\xec'\x9b\xd9\xe5\xc3f\xf6q\x9a\xce.\xaf\x06\xb3\x8f\xd3\xc1\xec\x9e\x18c_]g\xe3~\xed_\x8d<\x99/\xea^\xad\x1b\xd35\xdd\xbde\xce\xf6\xd6\xc6\xf1\x9d\xcd\xec\xe3\x83\xf5\xfe\xc3h;\xf3F\xfb\x99gd\xf4\xa9cf}\xf1u\xff\xdd\x17\xeb\xf1z\xdf\xf0\xbd{\xf3\xf9\xf1\xab\xf96r~\xbd\x8b\xe6\xbd\xfe2\x1b\xbf\xdf\xfb\xaf\xbd\xb9\xf9Y\xff\xed\xc351Nf\xe3\x00Q\xa7\xcc\x1e\xfb\xff\xc0\xb1\xf9\xf7\xe9\xe0\xd6|\x8b\xbf\xfe~\xb7q\xf0\xddf\xde\xdb\x12\xf3\xe2E87\xef6No\xb5q^]\\\xde\xee\xa7\xfb\xd9\xe5\x95q\xfdju\xf3\xf5\xcbM4\x0f\xb2\xb2eT\xf0\xb9\xb8\xf9\xf81z;\x0fn\xf4\xaf_\xac\xfbo\x9f\xf0\xd5o\x1f\xdef\xfc\xd7\xf6\x17\xfc\xf0\xfe\xe1z7\xbb\xbf\xd6\xdf\x7ft\x1eo\xee\xddW\xb3\xc7\xab\xdd\xdd\xc7o\xaff\x0fo/\xef>^\xeb\xb3\xcb\xe5nv9\xdd\xcf>:;\x82\xdf\xd5\xbcwc\xcc\xbf|^\xbbW\x0d\xbfoo(~z+\xbf|\xee\xac\xe7\x13\xec\xf8\xb8\xf7\xed\xcb\xdd\x1b\xc7\x1f\xa7\xd7\xbf\x16\xba|\xef\x8b\xe7\x85\xdb\xfb\xab\xfd\xec\xfe\xd6\xbay\xbc\xea\xdd\xe8\xd7\x8f\xf9\xbc\xf0p\xbd\xbf}\xb8y=\xbb\xbf\xdd\xbe\xbf\xbc\xda\xce.\xafw7\x8fW^\xc3O\xde\xfa7\x97\xa3\xf0\x1f\x97\xe3_\x7f{\xfc\xf4\xb2\x8d\xa6\xfd\xef\xe2\xe5v:\xbd{5\x9d^O\xa7\xcb\xcb\xe9\x87\xeb\xe9tuu1\xdd]]\xbc\x1c\xddN\xbfd\xe3\xe6\xed\x14\xf8\xdf\xd7\x8b\xe9\xed\x15\xf0\xfc\xfa\xeajzu1\x9d\xce.\x98\x82\x8b\xe9\xe5\xd5\xab\xa9~u7\x9d^]^\xf0<\xef\xae?\xbe\xbe\xf8\xf4\xe5\xea\xc3\xf5\xe6\xa5=\x9dn/\xa7\xb7\xd3WW\xb7\xb3\xbb\xe9\xe5h\x1a\xbe\x0f>~6n?^\x0e\xdf\xbeMV\xbf\x99\x9b\x0f3\xf3\xb7\x97/\xbf)\xcd/\xc6@m\x829*\xbe\xcf\xe6\xd7W\xb7\x0f_\x96\xbd\xe9\xff\xc6\xf7\xff\x7f\x1d\xdf\xab\xce\x01t\x1c\x9e\x8d\xad\x8asV\xcfH\xc9y\xab\x8c!U\xe7\xad\xc7\xcf\xbf\xe2\xed\xb7\x0f\xe3\x0f\xdf~\xbf\xd9\xb8\xbf\xbf\xbd\xcf|\xe9\x9b7{\xb6\xf8Y%\xae\xbfy\xfcj\xce\x1e\xde^\x15I\x97\x99!\x1f\xbf\xdb\xd7\x1d\x0d\xbf\xaf\xad\xfc\x9e-\xbeoOn\x1c\x15\xdf\xdf]\xb6\xf2\xfbN\xf1=\x1a\xbc5\x1f\xb2\x11\xe2\x91M\x96\xe8\x9f.\x93\xd9vv\xff\xe1.\xfc\xfa\x9b\xf5\xe6\xbf\xfb\x1f~\xbb\x99\xdf\xdd\x7f\x9e]\xdd\x1a\x8bWw\x97\xcb\x9f\xbd\xe0\xe5\xe0\xe7\xb7\xc6\xf4\xed\xa7]\xb2\x9c^\xbd\x99NM\xe3b\xfav\xf6A\x7f\xf3\xb5\x18\xcf?|\xfa\xfc\xfe\xee\x1f\xd6\xab\xaf\xd7\xd7\x92\x04J\xb3\x15C\x1f\x8e\xa1\x7f\x03\x8e\xcf\xccCwO=\xe0N\"\xb8\xf4A\x04\xd7\xa3\xcf\xcd\xb8\x98\xfe\x95\xdeZ\xae6\xe6\xe8\x87\xfc\x01\x9dE\x18\xfb\xf4F\xacA\xff\xda\xa3\x7f5\xe9_\xfb\xf4\xaf\x16\xfd\xeb\x80\xfe\x95?\x0b\xb4J}\xba\x15\xf9Nu\xb1\x89\x83|\xdb\xc3\xff\x12\x95\x96\xdbT\xa2\xe2\xc8N\x92m\x18\xbbB@\x8a\xc4\xbcS\xb4K\x85\x85\xeb\x98!,\xb64\xe9G\x1e\xbd\xc7c{\xf4.UH7\x9a>'\x101\xe7\x94\xca\xf3Q\xd4\xb3|\xd7\x93~BKPmK\xd2\x0fW\xf4\xaf\xb4-\xd6\xf8\x94\x0dH\xba7\xd8I\x84\x9cT\xcb\xf7\xd8\x0e\xe2\xf3%b\"M3\x06\xbbq\xb5\x9b\\\x9d0\xb2\x06\xdd\x9e\xf5BF5\xde\x19\x03\x96\xca\x18\x0e\xbb\xc3\xa1\x94\xac\xbf3Y\xaa\xa1\xbc\"s\xd7\xe7\xea1\xcd\xaeiJ\xa9\x06<\xd5`\xd0\x1d\xb4\xc8\xc6\xb7\xc8\xd2\xa5$\xa3\x9d\xc5U\xd3\xeb\xca\x1bd\xedF\\5\x03y5C\xbe\x9a\xa1\xd1\xed\xf7Z\xea\x19r\xf5\xf4\xe5\xf5\x18;\x83#a\xcf,2$\xc5\xc9\xb5C\xedq\xf6< \xf1:E\x934\x8c\xce\xf5I\\zd\xc9M\x9f`\xb4\xc8~'\xce\x0eT\xe7k\xb2\x9f\x1f5/p\xd1.\xfb\xe5\xdf\xff\xe5#\xd7\xb3;\x89\x13#\x14t\xec\xc0\xed\xfc\xe8{Ay\xea\xc0\xd4\x91\xff\xd3A,W\x90<\xa17d\xd4'u\x08\x80P\xadO\x00\x84\xed\xdd\x02\xaaM\xa9g\x00\x84*\x9d\x03\xaa\xaf\xbd\x7f@\x95)t\x11\xa8\xb2\xf6^\x02\xe9Q\xa5\xa3@\xb5\xb5\xf7\x15\x88J\xa9\xbb\xe4\x84\xcf\xdfc\x14\xbaL\xf9\xb0>\xbd3h\xe9G\xfeS\xba\x91\x7fb/\xe2\xe8\x14;\x11G\xa7\xd0\x87\xf8\xba\xd4\xba\x10G\xa7\xd4\x83\xf8\xda\x14:\x10_\x95J\xff\xe1\xabR\xe8>\xbc\x06\x95z\x0f_\x97B\xe7\xe1\x89\xd4\xfa\x8e\xff\xe7w\x9d\xb6^\x82\x9f\xd2K\xf0\x89\xbd\x84\xa3S\xec%\x1c\x9dB/\xe1\xebR\xeb%\x1c\x9dR/\xe1kS\xe8%|U*\xbd\x84\xafJ\xa1\x97\xf0\x1aT\xea%|]\n\xbd\x84'R\xeb%\xf8\xbb\xf4\x12\xb2^\xcf_\x1e\xe8c\xa0\xb4XN\xb8A1y\xce>?W\x9d?\xfd\xbf\x9e\x1f\x85qj\x07)K\x12\xa4\xb6\x17\x00D\xf9s\x82\xac}\xa6;\xf0\xc2d\xd3\xee)\xf2\xc0t\xacH\n2)\xcc\xbe\x85\xa0\xfeirBd\xc7\x89)\x94\x08\x9f&\x11D\xc6IDQ\xce\x97\x9a\x83\x82\x94v\x9d\"\x19t\x1e\x84\xe5O\x13\xa2\xac\xf6sn\x90\x98/\xb54\x8c\x8e\xe6\x93\x86\x11\xc7'\xef4Gs\xe2;\xc5\xbc\xea\xc7G\xf3*\xc88nY\xe7=\x9a\xd7\xf1\x8b\xab\xda*L_P\xaaN`\x98SX ms\n3\x89yNa'\xb1\xd0)\xec\xda\x82\x12\xd5\x11\xa51\xdd\xf1N'\xb2\xdc\xf1\x9c\xc4\x86;\x9e\x97\xccn\xc7s\x93\x99\xedxnmV\x93\x1a\x08\x1f]\x9d\xc8@\xc7s\x12\x1b\xe8x^2\x03\x1d\xcfMf\xa0\xe3\xb91QL\xb7<\xfe\xce\x1f\x83\x07a\x1aqL\x1389O\x94\xc2\xe4zMt\xfc\x18\\\xf1\x08\x92\x13\x84\x05\xa9\x14\xe4%\xe9\xda|[uD\xaa\x98\xfb\xa7\xb4\x03 Ri\x86\xaf\xdc\n\x89\xc0\xf8\x14\x81\x01\"\x15\x811)0\xed\xfb6}\xcf-g9)\x1f\x95\xd18s\xbb\xa7;O+\x9alt\x00\xe8\xb2\xc7\"\xda\xfa^]1\x1e\x00\xd4E\x81\x88~N\xdf_\x86\x18\x94%\"\x0e\xb8\xe2\x90wz\x80>\x7f.\xa2\x0e\x80{\x81\x94\xba\x8e\xef\x8bs;\x9f\xd2\x8f7\x03Av\x8a%\x08\xf2S\x8dA\xb08\xdd\x1e\x04\x93\xd3L\xc2\xa9\x0f\xb2\x8a\x82Y\x14\x86\x9b\xb9\x9d\xcd\xe3'\x98\xca\x7f\x92\xa5\xfc'\x1b\xca\x7f\x06;\xf9O4\x93\xffT+\xc1\x06\xc1'\x19\x04?\xc9 \xf8\xc9\x06\xc1\xcf`\x90'\x0ee\xac\xe6@\x83\xd04Zq\xd5\xaf\xa2\x13\xbc\xe3 \xc3\x05\xc8\x8eA\xb0a\x18\x1c\xd8\xb5\xe3\x07m\x19\xdb{\x06k\x9a&\x87\xf5=\x17\x82Z\x96\xc5A\x01\xd8p8\xe4`\x89\x877\xcd\x85\xef\x128\x1e\x8f9 .\x8c\x0d\xc1m\xdb\xe6%\x0d\xc3\x00\x92\xc1q\x1c\x01k\x00\x8c\x10\x82u\x9b\xdf\xd2d\xc0\x8b~\xf6\x87\xc3\x83P\xf6&g\x85\xd3\xc6:\x0d]%\xd8\xfeQ?\xd3_\x9ce\xb1\xf8Yw\xfc\x93\x80p\xd4B8\x12\x11\x0e[\x08\x87\"\xc2A\x0b\xe1@Dh\xb5\x10Z\"\xc2~\x0ba_Dh\xb6\x10\x9a\"\xc2^\x0baODh\xb4\x10\x1a\"B\xdd\x92\x13\xeaB\xed\xe8\xbd6\xd2\x9e\x98\xd6h%6 \xea|\x8c\xe1\x9c6^\xces\xda3\x1dt\xd8\x82\x88uX\x92\x08p\xd6\x82\x88uV\x92\x08p\xd4\x82\x88uT\x92\x08p\xd2\x82\x88uR\x92H\xa8\x08\xd6AI\"\xc09\x0b\"\xd69I\"\xc01\x0b\"\xd61I\"\xc0)\x0b\"\xd6)I\"\xc0!\x0b\"\xd6!I\"\xc8\x19K*\xd6\x9f(2\xb1+\xf1\x8eH\x11\x82N\x98O`1r\xd9\xc1{\xa8\xf7u~\x9c\xe5\x81\x8bE\xdf0\x07\x82Y\x01\x82\x0f{\x16?\x89\x84\xb1\x1d,\xf9\x81~`\x02\xf3\xf32\xc4<\xd7\xf9\x10@\xee\x11\xc6\xe1\x96\xc6\xf2\xaf\x0e\xa8\xa5\x85\xe0\x7f]\xcc\x17\x86\xcdO\xa8\xd1:\x8e0+\xb0\x85z\x8e\xcdO\xe6\x05w\x90\xc2\xee\x0f\xccE\x0f6J\xe4\x05l\x04\xe2Z\xba>\xe2\xad\xb2\nS\x08\x9d\x99f\xce\xcf\xa9 r\xa4\x0b\xa7v\x10o\x9b.\x1f\x8e\x94\xc1\x10B\x01\x837\xcc\xe1\xd0\xe2\x9b B\xc7\xf6x\xc8\x0b]E\x19<\xc1\x18\xa1\xb9\xc3\xeb$\xb07l@\xa2\xeb\xc6\xbc\xcf\xb3\xce\xa5\x9e\xe35k\x1b]\xef\xf7\xc7|\x08\x03 Mk\x88\\\x91W\x01\xf8\xf1\xc0q\x80 &\xc7\xa3\x04$q\\\x04\x91l\xedd\x85\\\x88`1X,\x16\xbc\xf4%\x01\xa4H4Z\xb8\x0b\xde{K\n\xb8s,\x16\x0e\x9a\x8bH\xa0\xde\xef.\\\xbe\x15d:\x91\"\x10f\x88\xe6\x9aV\xbe\xea\x84&\x80\xde\x7f\xd2\x9d\xc7\xf5\xd0\x1d\xdb\xae\xb7N\xce\xd9\xa1\"6\x18@\xd7\xe8Y1b\xd3\xadq\x8f\x85\x81(\x93EA\xa0>\x032\x00\x8cf\xe8\xac\xe4@R9\xd6\"\x0fc\x067\x1e\x8f\xc7\xc0\xea\xaf\xdew+\xc0y\x92<[iUz!\xd7\x90\xc5:P\xa41\xad\xd8U,\xe0UV\x1bbU\x96\xb5q+\xf7\x16[\xe4\x82*\xe2y\x15\xdb\x81\xa2\x96\xc8\x05kO\xb6\x1cX\xe7\"\xd3Q\"\xff\xe21\"\x17\x03\x90\xb0\x97\x01@\xd0\xd1x\x9c\xc8\xd7\x00\xa4\xc8\xddx\xa8\xdc\xe3\x98\x8c\xdfS\x9c\x8eO\xdd=\xd9\xefT\xa4Sw=\x86\xdb1\xde\xa7\xe0~*\xb9\xbeX'\x12oB\x97d!B\x8f\xe4\x80\x02\x87\xe4p\xb0?\xb20\xa1;r@\xa17\xb2\xc8\x16g|\xb6\x01\x90\xcbN>\xdd\x15\xdbe;\xc2\x13\xfd\xef\xe3\x88\x02\x9fc'!\xc0\xe7X\x88\xd0\xe78\xa0\xc0\xe78\x1c\xecs,L\xe8s\x1cP\xe8s\xc7M\xb9,\xbc6oc \xa2\xa0<\x9e\x06\xfb\x1c\x9b\x80}\xba\xcf\xe1\xe7\xf49|\xb2\xcf\xd1\xfc4\xadx d\xc5\xaeH\xf5\x02/\xe5-\x82\xf8,\xe4d\xa0\xf93\x0eZ\xdeF&\x91\xc0&f\xb6\x84\x08\x03D\xe3\xf2w\xd4\xb5\x0f\xd1\x07\xb8!\xdcn\x8f\xb4-\xd8\x92a\xb5\xc8(\x1cDd\x17\x1e\x08\x9b\x86\xc7\x81\xd6\xe1`\xa0\x818\x14l#&\xee\x15\x9a\x89\xdb\xbe\x17Z\x8a\x0f\xf5\x85\xc6b\xf7\xe2\xebm\xc0v\x83\xa9\x0cl[\"\x1a\x15\x1a\xd1W\xb4!\x8b\x13\x98\x90\x85\xc1\x16\xf4U\x0c\xe8+\xd9\xcfW3\x9f\xafj=68\x16\x1b\xcf?\xc1v\x023\xe1V3aE3\xb18\x81\x99X\x18l&\xacb&\xacd&\xacf&\xacj&6\x9e\x14\x9b \xc3f\xa2\x80\xc9\xcav\xc3\xadf\xd0\xd7\xba\xf3\x87\xe7zG\xef\xf4\xa3]\xa7\x17\xed:\xf4\xa6\xcbD \x05\xd6\xd4\x13\xd54R\xaa F\x815\x99PM\xbd\x92\xbe\xbd]r$Xc_Vc&\xb9\xaeP\x1f\x84\x03k\xb3\xa0\xda\xfa\xa5\xc4m\xb5\xc9p\n\x83\xf0\x01t\xa2lT\xff\xd3\xfcHR\xd9\xf3\xbb\x92\xa0\xb2\xef\xebM-\x95\xb6\x99\xf8x\x87\x12T\xf8,>\xa5\xe0T\n3{\xedi\xfe\x9f\xe8h\xc2\xba\xbe\x83\x9f\x81u}g7\x93\xd6\xd9f\xf4\x13\xbc\x0c\xac\xefOp2\x99?\xe1?\xd1\x9f\x84u}\x07\x7f\x02\xeb\xfa\xce\xfe$\xad\xb3\xcd\xbe'\xf8\x13X\xdf\xf3\xf8\x13Ua\x14\xa3\xfa\x0b\x1e\xda.\xff\xb4E\xfdq.m_~\x08\xa8\xf9\\W\xe2\xc4!\xa6?%\xd2\xcdb@=\xff\xe6\x11\x13\xb0\x15Q\x9f~\x80S\x89E\xa4\xa7W\x9fRb\x8a\xf3\xf0N?\x14\xe9I\xbe>#\xaf\x8f\x0fa\x8b*\x8d\xb2J \xc4-j5\xaaZyD^\xb1QT\xcc\x97fu\xf7\xf2\xba\xf9\xc8\xb8\xa8\xbbW\xd6\x0dD\xceE\xdd\xbd\xaan\x1e\x91\xd7\xdd+\xea\xe6K\xb3\xba\xcb\x86k\xa2\x96\xd7M\x07\x10e\xfdM\xe3\x01L.A\xd5|\xa0<\x97\xa1P\x80&\xd2@\xad\x02\x00Q\xc9P+\x01\xc0\x142\x94j\x00\xca\xab{\xd4\x9a\xb6\xf00>HoS+\xcc\xd0\x07\xde\x99\xb3\x98\x01\xf0\xe7\xc2'\xb3B\xc8-Ko\xcf\x8a\xa5\x0e_\xa4 \x9f\xcf\x1d\xbb\xaa[\xe4\x99u\xf5B\xe7o$\x10\xfb?!\x84\xc0\xc9+9D^Z\xcb!\xec\x08\x8d\x1c\xe2\xbe@\xc8!r\xf8J\x10\x89\xcf75\xc9\xdc\x9e\xa8K\xec\xf9u\xb3\x84\xce_\xcb#\xf6\x7fB\x1eI\x17 \xe5\x11\xf6\x82F\x9e\xb6\x8eP;\xad\xb0/(t\x06\x85p\xb5\xe8!\xbe\xa4\x83\xf8\xd2\xfe\xe1\xb7t\x0f_\xda;|y\xe7\xf0\xdb\xfa\x86\xdf\xde5\xfc\xb6\x9e\xe1\xcb;\x86\xdf\xd6/\xfc\xf6n\xe1\xb7\xf6\n\xbf\xb5S\xf8*}\xc2W\xe8\x12~[\x8f\xf0[;\x84\xaf\xd2\x1f|\x85\xee\xe0\xab\xf6\x06\xffI\x9dA\xe8\xf7X\xe2\xf7X\xea\xf7\xb8\xc5\xef\xb1\xd4\xef\xb1\xdc\xefq\x9b\xdf\xe3v\xbf\xc7m~\x8f\xe5~\x8f\xdb\xfc\x1e\xb7\xfb=n\xf5{\xdc\xea\xf7X\xc5\xef\xb1\x82\xdf\xe36\xbf\xc7\xad~\x8fU\xfc\x1e+\xf8=V\xf5\xfb\xb6\x80\x88&v\x16\xe7\xf6\x82}5j\xf6t\x8e\x16a\x8c\x0e\xe5\xc7{\xcf\xff\xd2\xf9\x0b\xfd\xe5A\x98\xcd\xc1\xc1\xc8\x8e\xcf\xe7a\xbab\x01\x87\xbf=\x86\x99o1\xcfqI\x92I\xc7\x14U\xdc\xf2\x960esqMAYt\xd2N\xb9\x93O\xa3b\x91\x9aRP\xaa\xa6\x18\x12\xac)U\xd8 V\x9d\x8e\x9dl\xa8\x93\x08\xecK\xe5\xf5e\xe2\xfa\xea\xd2\xc2\x82\xc9\x8c[\x17\xc2\x82a\x99`\x98\x12\x8c*u\x03\xd9\xe7\xfc<\xe6S\x81L\xf1\\\xf2A\xc2\xae\xeb\xcd\xdb?4\xd8u\xbd\x94E\x01\xfd\xc5m@`\xa9C\x17k\x0eb\x17\xddn\xaa\xc5\xe1\x96\x81\xc5\xe1\x16Bi\xcb8\\G<\xb6x\xceQ8!^\xfb\x01+A\xfeP\x80\x05+ \x8b8:m\xe1\xed\x90{(\x90\xd8\xde\x87\xeb\xf4<\x7fD\xbc\xfeJ\xa1\x7f\x1c\x18\xdbg=Lf~\xb2\x1c\xf6\x00\x12\x01;\x01\xcfC\xe0\x07\x00\x1046\x89\x83\xbd\x81C\x08\x1d\x82GJ}\x02\x84K\xdd\x02\x10\xa5\xdd3DDR\xe7\xc8\xd73R\xffPp\x10\x85\x01\xd4\xcd\x06:\xa9\xd3\xf8m>\xe3\xb7\xb9\x0c\xcbA\xe41\x1c\x0ev\x18\xbf\xcd_|Uwa\x81ro\x01\xd0rg\xe1\xe4P\xf0\x15\x98F\xee*\xfe\x93<\x05v\n,w\n\xdc\xe6\x14\xb8\xcd)X\x0e\"\xa7\xe0p\xb0S\xe06\xa7\xc0\xaaN\xc1\x02\xe5N\x01\xa0\xe5N\xc1\xc9\xa1\xe0\x140\x8d\xdc)p\x9bSPt\x0b\x8cvu%D\xee\xbd\x0e{5?\xd12\x10\xf9,\xfb\x9dfS\x9a\x08\xe4V\x99\x99aJ\x90\x90E\xc4c^R\xcd^\xa7!\xb5E\x90==7&\x95\x94\xe7F\xc7\xe8\xe4\xd9|\xfa\xb7\xc6\xeb\xf5\xfc\xe7\xea\x85\xa9@\x15\xf9\xe1S\xae\n\xbd\xa9\"\x7f\xe7A\xfd\x13\xc0\xa1\x8c$H\x1ea\xece\xeb\x89\xea\x0b\xe3\x13\xb2\xcc\xf5\xe2\xe2\x95\xff\xe5\x17\xcb\xeb\x9a\x88\x92\x82\xe5\x04|\nH\x90\xc5H@\xf5\xab0\xf6\x1e\xc3 =A\x808\xdc\xb2\xb5s\xfd#/\xdf\xc6vt\xa8\x19d\xbf\x9dg\xffL\xe8_A\xbd\x03\xa4\xc5\xc3 \xfb@P\xaf\x16\xa3\x0d\x8a\x13\x04\xd4_\x15M\xe0\xc7B+6,\x8f\xb6fU\xa3\xd0\x9c\xb4L\xa2R\xd8\xbc2\xb9Z\xcd,\x91\x8c`\x0d\xd8\x1b\x96\xc9K\x91\x9fhIj\xc7)%N\xf1\x19\xfd\xfcyS\x15\xf90\xff9\xff\xbcy\x92\x8f)\x05\x0f\x889\n\\\x805\n\\\x96q\xf6\x88c\x8b\x02\x17bZ\xbe\xe8\x93\xe7[\x14\xb0\xac\xcb\xa7$\xf7\xe2\x11\xc4{n'(\x1b\xc8\x00\xeeU\x11\xcb\xbf~N\xd6P=\x845\x1e\xa3\xd4Y\x81:\xcfKx\xad\x17\x8f\xc9\n\xcag4\xff\x04\xe1Ee\xd0\x8aE\x06\x07\xac\x97A\x85\xc6\xcb\xf9\xe4\xb6\x03\xb84\xa6jxp\x96\xca9T\x86\x02\x98PF\xc9\xf9@6\xc9\xb94&\x01\xf80\xca\xcf9\xc1\xba/uS\xaa\x1e\xd4\x0e\xa9\xe5\x9c\x13\xa8\xe4\xfbu\x92z\x8b=\xd0q\"\xdby`\xfb\x0d\xf1\xac\"\xac\xb2T\"\xedW8\xb6\xf3\xe4\xac\xa8\xbeS?\x01YsF\xa9Q|\x07\xca9\xb1\xfd\x87|\xc8\xd6\x00\x99\xab\xc2\xccQ\xbaE(\xe0+(\x01L\x0d\xd5S\xb6\x8a$\xb2\x1dT1\x83k\xb2\xf3\xd74\x1eh~\xae\x97\xa4\xb17_\xa7H\xc0\xb2\xa0\xa29\x96\x08\xb6\xf7\xe4A\x0da\xc3\xc29\xda,X1\xa3\xbaP\xc3\xaa\xe9Ar{Ul\xd8~\xd4p\xa2\xba\x91\xcc4\x15\xab\xda4<\xaf\xca\x0c43\x89\x11*\x9e\xac\x11\x1a\x96\x84% \xaer;0=\x95\xb4\x04\xd9Qk\x96P_-\x0e\xdf\xea\xccl\xebz\x81\x8d\x8bh\x9c\x88A\xb5\x1c|\xaeO\xca\xffB\x9c\x0c \xa7\x1e\xcb\xc9(9\x19\x10\xa7\x9e\x84\x93\xc9r\xea\x95\x9cz\x10'S\xc2\xa9\xcfr2KN&\xc4\xa9/\xe1d\xb1\x9c\xfa%\xa7>\xc4\xc9\x92p\x1a\xb0\x9c\xac\x92\x93\x05q\x1aH8\x0dYN\x83\x92\xd3\x00\xe24\x94p\x1a\xb1\x9c\x86%\xa7!\xc4i$\xe14f9\x8dJN#\x88\x13\xb6\x93T\xe6\x9cz\xf6?\x96\xe38\xfb\xdf\x84\xf8\x19\x085\x97Y\xd4\xa7\xcb\xd6C\xe5\xbbm7\xe8\\\x9f\xd4$\xe0\xca*\xe7e\xc8\x96o\x0d/\x83\xe0e\x00\xbc\x92U\xec\x05\x0f\x99d\x15i\x80\x966)F\x81\x00\x05)\x89\x0d\x80\xd8\xa0\x88\x0d\x85\\\xdb\x81\xe7O\xe4\xfd\x88\xc6\x9e\xbe\xa4\x86\x18>\xf7\xaaZc\x0e\x0c/\xbe\xcb\xc2\x1a\xac\xe5\xf8\xb55\xcbFmA\xf6\x9c\xcbk\x81\x04\xadK\xafgZa\xe7\xd5W<\x8e^d\xf3\xd4\xa7\xad\xb3a)\x9e\xba\xd4>\xcd\xb8\x7f\xcaj\xfbT\xab\x7f\xbf\x057+\xd1\xf3\xae\xb9a\xee\xcf\xb2\xec\x86Y?\xe3\xca\x1b\xae\xe0\xb9\x17\xdf\"\xfd?\xd7\xfa\x9b\xeabOY\x82\x8b\x18\x1d\xbb\n\x17\xf19a!.bu\xdaZ\\\xac\xa9\x13\x96\xe3\xacY\x9f\x7fE\x0e\xd6\xf0|\x8br\x90\xfd3\xaf\xcb\xc1:\xbe\xd3\xd2\x9c\xb2\xee3\xad\xce)\x9eO^\xa0\x0b\xb8\x9d\xb6F\x170;u\x99.`\xf7\xc4\x95\xba\x80\xeb\xd3\x17\xebB\xc3\x1c\xbb^\xe7\xe7\xeb',\xd9\xe5\xcc\x8e\\\xb5\xcb\x99\x1d\xb9p\x973;r\xed.gv\xe4\xf2]\xce\xec\xc8\x15\xbc\x9c\xd9\x91\x8bx9\xb3#\xd7\xf1rf\xc7/\xe5[\xfc\xf6\x89\xaby\x96\xfb\xe2i\x0bz\x90\xddS\xd6\xf4T\xf7?aY\x0f\xd3\xb3+{\x85\xa5\xbd\xc21\x9a\x9c\xa7\xff\xcc\xcb}\x9e\xdf\xb3\xaf\xf6\xfd?c\xb1\x0fTr\xc2Z\xdf?a5\xf8\xacK}P\x80\xd65\xdfs\xad\xf4\xfd\xa7,\xf4Y\xe2\x13\xd7\xf9\x90\x0cO^\xe6\x9fb\xd7?g\x95\x7f\x9a\xc1\xbf\xe3\"\xdf\xff\x9ek|\x88\xf9\xf3,\xf1!\xce\xcf\xb9\xc2\x87\xf8?\xfb\x02\x1f\xd6\xfd\xb3\xad\xef\xfdgZ\xde\xc3|\x8e^\xdd\xc3lNY\xdc\xc3\x9cN\\\xdb\x8b\xb4t\xca\xd2\xde\xff\xde+{\xa0\x82g\\\xd8\x03\xdc\x9f{]\x0fT\xf1\xbd\x96\xf5\xfe\xf3\xaf\xea\xfd\xe7\\\xd4\x83\xccN\\\xd3\x83\xbcN^\xd2\x83\xdc\x9e\xba\xa2\x07\x99>\xc3\x82^`\x93\xa3\xd7\xf3\xec\xcc\xfc\x94\xe5\xbc\x8c\xd7\xb1\xaby\x19\xafc\x17\xf32^\xc7\xae\xe5e\xbc\x8e]\xca\xcbx\x1d\xbb\x92\x97\xf1:v!/\xe3u\xec:^\xc6\xeb\x84e\xbc\xd4]\x9f\xba\x8a\x97\xae\xae\x8e^\xc4K\x17\x84'\xac\xe1\xfd\xa7-\xe1!\xf2\xe3V\xf0\xa2\xc5:~\xe6\xc5:\xcf\xef\xd9\x17\xeb\xf8\xcfX\xac\x03\x95\x9c\xb0X\xc7',\xea\x9eu\xb1\x0e\n\xd0\xbav{\xae\xc5:~\xcab\x9d%>q\xb1\x0e\xc9\xf0\xe4\xc5\xfa)v\xfds\x16\xeb\xa7\x19\xfc;.\xd6\xf1\xf7\\\xacC\xcc\x9fg\xb1\x0eq~\xce\xc5:\xc4\xff\xd9\x17\xeb\xb0\xee\x9fm\xb1\x8e\x9fi\xb1\x0e\xf39z\xb1\x0e\xb39e\xb1\x0es:q\xb1.\xd2\xd2)\x8bu\xfc\xbd\x17\xeb@\x05\xcf\xb8X\x07\xb8?\xf7b\x1d\xa8\xe2{-\xd6\xf1\xf3/\xd6\xf1s.\xd6Af'.\xd6A^'/\xd6AnO]\xac\x83L\x9fa\xb1.\xb0\xc9\xd1\x8buvf~\xcab]\xc6\xeb\xd8\xc5\xba\x8c\xd7\xb1\x8bu\x19\xafc\x17\xeb2^\xc7.\xd6e\xbc\x8e]\xac\xcbx\x1d\xbbX\x97\xf1:v\xb1.\xe3u\xc2b]\xea\xaeO]\xacKWWG/\xd6\xa5\x0b\xc2\x13\x16\xeb\xf8i\x8bu\x88\x9c[\xac3\xf4\x87\x05\x0e\xed4\x7fG\xce\xe4\x0fz-\xcc@\xe3\x12\x9a\xbf1\xa7\x05\x1b\x94\xd8\x93\xde\x82\xb4\xc8\xdf\x82\xa4.W\x83V\x12\xad\x81+\xbcYH\xfd\xfc\x81\xe6\x1f#\xb2\x7f\x94\xc4\xbe\xba\xc0\xb0l\xc7\x98\xb9\x06\xab\xc9\x86)\xd9\xa8\xd2\xc4\x0e\x12-A\xb1\xb78,\xc2 \xd5\x16\xb6\xef\xe1\xfd\xb9fG\x11FZ\xb2OR\xe4\x9f]`/x\x98\xd9\xce\x87\xfc\xd7\xd7a\x90\x9e\xd9\x1b\x14xq'@\xbb\xea\xe7\xb3\x15\xc2\x1b\x94-r\x9b\x9f:\x01Z\xa3\xb3\xf5|\x1d\xa4\xeb\xb38\x9c\x87ix\x16d\xff$h\x19\xa2\xce\xda;\xb3c\xcf\xc6g\x8d\x14\x8ct\x9c`K\x14\xc6K\xcf>\x83\xc0\xb9t\x9a\xa0E\xc2*J*\x9e\x80\xc7:\xa1\x8b\xa8\xf7\xa0e\x0f(\xa2Wa\x90\x84\xd8N\xce\xfc0\xb0\x9d0\xfbO\x98G\x13,\xa3u\xec\xa1\x98!\xcd\x9fun2\x95\x96\x00\x11}\xad`\x8a\x03\xa3\xf6\xc6\x1e\xa2\xb6\x17\x86\xa3x\x00v\x15R\xa7+\x84\xed\x84&/\x9e\x9dI\xccT\x16\xa9Z5\xf5|D\xd7\x91?\x81\xa0\xf3\xd0\x0d\x03\x8f\xc2^\xe4\x8f:\xb3\x8f\x10\xde\xb1\xb1\x97\xa4!m\x85\xe2\x99\x80bi\xc7\xb6\x1f\x06.-|\xf9\x10\x14\xc9N\x1eP\xbc\xf10\xa6\xfd\x84x\x0e\x91\x95\x8d(>\xa1\xe5\xa56\xf6\x98\x0f_/\x12\xad\xc8\xc3\x91\xc0\xe2\x89\xc2`I\x8f=\xf9;\xafT\xebc\xb0e\x95\nu*\x0c\xd0^6\x88\xaa\xca\xe1\x1f-\x06X#V\xaf\x11\xd25\x8d%M\xb2-r\xc8}\xee\x93\xefT1\xf7E\xf8\xc5\xd6\xa0\x00\x06\x0f\xe8Q\x80\x1e\x0f0)\x00\xf7y\xfa\xc5\xb6/\x17q\xb1\xb5(\x80\xc5\x03\x06\x14`\xc0\x03\x86m\xcd\x1cQ\x80\x11\x0f\x18S\x80\xb1~\xfc\x9b\xba\x19\x8f\x15Z\x84E@Fa1\x90]X\x0cd\x1a\x16\x03Y\xa7U\xe2E\xf1\xb9\xb36\x1b\xb1\x18\xc8L\nm\x1f\xb1\x18\xc8X,&\xb3\x97\x82\xc1\x14F\x05\xba\xbf\x8b\x8d\xe8\xb7\xb5\xc3` \xa0 \xfdv\x0b\xfa\xed\x06l\x11v\x91\x7f\xed\xac\xd5|~\xbb\xf5Z\x1b=b \xa0\xed\xfc#M'\xb6R\xdb\xe0\xc7\x00@+\xe1v+\xe1v+\xe1v+\xb5\x08\xbb\xc8?v\xd6j%\xdcn\xa5\xd6F\x8f\x18\x08h%\xcc[\x89\xc2xA\xb4N\xb5\x18%\xa8\xb9\xdfnG\x11\xb2c;p\x8a/qN4?|d\x1f2&Z\xa7i\x18\x14l\xce\xcfs\xfc\"t\xd6\x89\xe6\x05\x01\xfb\x16`\xa2F\x1eZ~\x86\xed\\\x9fD\xb6\xebz\xc1\x92]\x18\xaf\x8cC\xb9\xd1\xca\xbf>y\xd5\xab\xca\xf8\xd7\x19\xaf\xcc\xaa\xac\xcf\x97\xf5\xab\xb2\x11_f\xd5\xf5\x0d\xf8B\xadW\x17\xf7\xac\x17l\xa1\xa5W\x85\x16\xfb\xa9\xe5\x956\xac)\x87<\xa5\xa1\xd7\xa4\xfcg\x9a\xf3\xcd\xe6\x1cBl;\xf3\xb0\x0d-\xddf\xc5\x15\x93\xf2\x01\xc5\xa4\x84@1-#\x0b\xc8D\xdb@R\xb2\xc0U\xf1\xce\xb9\x12\x90\xfd\xcc\x96{\xc1\n\xc5^ZA\xca_\x15\xe6\x89\x03\xe39\xd9t#q\x1e\xa2\x18\xf2\x1f\xa2\x18r!\xa2\x18\xf2\"\xb2n\xd8\x91\xc8\xea!_\"\xcaAw\"\xcaa\x8f\"E\x10;U\x86j\xf7+JX\xd0\xb5(qA\xef\xa2\x04\x86\x1d\x8c\x16Y\xecc\xbc\xd0\xb0\x9b\x11\xfc$\x9eF\xa0*gS\xf06\x85\xa8d\x95E\x132\x0f\xf4\xa5\x0e\xe8K\xfd\xcf\x97\xba\x9f\xdf\xe6}\xbe\xdc\xf9|\xb9\xef\xf9-\xae\xe7\xabx\x9e\xaf\xe2x~\x9b\xdf\xf9mn\xe7\xb7z\x9d\xaf\xe6t\xac\xbc\x02\x9f\xf3U\\\xce?\xce\xe3`\xe7\xc2R\xe7\xc2R\xe7\xc2R\xe7\xc2R\xe7\xc2m\xce\x85\xe5\xce\x85\xe5\xce\x85[\x9c\x0b\xab8\x17Vq.\xdc\xe6\\\xb8\xcd\xb9p\xabsa5\xe7b\xe5\x158\x17Vq.\xcc9\x17\x05Lc\xdby@\xee\x01\xa34E\xb1\x96D\xb6\x93E^]\x83\xfb>E\x01\xd4\xd2\x8c\x19\x0b\xd7\xba\xba%\"\xf0\xd1\xd2\xe6\xd8\xf72x\xfb\xb8z\x009\xe6\xdf/:F\\\x80\xa2Mb\xa8\x92\\h\x05\xa9\x15f\x83\xba\xaac[\xc2\x11\xb46\x84\xafB\xa1\x1d\x12\x91\xf1\xb1\"s\x04\xad\"\xf3U\x14\"S\x14x\xa5%!\xf6\xdcC\xbe\x8f^u\x16\x0e\x93z)F4\xa6\xdb\xb38\x98\x13F{\x06e)\x98\xfa\x00\x8a\x94;O\xbbT\x1cL$\x18\x0f\xb4\x9e\xc9\x0fk\x89}%\x81}EyY\\\x9b\xb82\xc9\xb0\x92dXQ2\x16g\xb1^\xe5\x05\x0f\x87\x14\xedR\xcdEN\x18\xdb\xe5 Vv\xd1\x9b\xc1\xce\xb8'\xe7\xb6\x93z\x1b\x04\x14\xe4\xcb\\\xe0\xf9*\xdc\xb0k\xe4\xfc\xb9\x80\xff\xc6K\xbc\x145o\x1cMc;H\xbc\xea\\g\x18w\xba\x86\x95t\x90\x9d \xcd\x0b&\xd2R\xbe=\x85\x90\x87p\x9df*:7\xa2]\xc7\x0d\xd3\x14\xb9\x1dg\x1d\xc7(H_eLX\xba$=d\xff\x14Yn-\xddGP\x8e\xc0\xdf\x16\xab\xc1\xda\x15\x81\xd9zk\x90\xe5\\,\xe1o{D9\x1f\xc6\xf8[\x93(\xe7\x03\x19\x7f\xdb'\xca\xf9P\xc6\xdfZd\xfd|0\xe3o\x07\x04\xc0\x84$\x18\x92\x12@U\x8c\x08\xc0\x00\x92qL\x00\xc6\x90\x0c\xc5+\xd4\x1b\xd0I\x9b\xf1\x859\xf2\x85\x93\xdc\"\x0c\x042\n\x0d\x01\xedBC@\xd3\xd0\x10\xd0:\x8c,\xa0\x81h\x0cl#F\x1a\xd0L4\x06\xb6\x14\x8d\x11\x1b\x8b\xc6)\xec\xf6\xab\x8e\xdd\xa5\x15\xfdV#\xfa\xad6\xf4[M\xe8\xb7Z\xd0o5\xa0\xdfn?\xbf\xdd|~\xbb\xf5\xfcv\xe3\xf9j\xb6\xf3\x8f3\x9d\xd8J\xb8\xd5J\xb8\xd5J\xb8\xd5J\xb8\xd5J\xb8\xd5J\xb8\xddJ\xb8\xddJ\xb8\xddJ\xb8\xddJX\xcdJ\x98\xb3\x12\x05\xdb\x1a\x07\x91Z\xb7\xbd\x83H\x9f[\xf3 R\xe4\xb6\x7f\x10ipk\x1d\x84\xaa\xcb<\xa1*e=`\xab\xf5\xaa\xb2\x1ePVq\xe5\xd6\xd0[\xcd\xac\xe8L\x9e\xce\xac\xda`\x9a|Y\xd5\x08\xb3\xcf\x95\xf5+\x9e}\x9e\xa7U\x95q\x0b\xf6\xad6\xa8\xca\x06|\xd9\xb0*\x1b\x02eU\xfb\xb8U\xfeV\x1bUt#\x9en\\\x95\x8d\xf9\xb2,\xe0\x10\xf5\xb7\xad\x96\xae\xbc\xd8\xad\x95\xd35\xb3\xff\xf1\xa0mX\x00\x93\xaaY\x83\xee`0\x18\x0c9d\x9e\xc7.0\xf9b\xbc}\x80?0.\x9aM\x13b/mJ!GmJ!_mJ!w%\xea\x85=\x96\x00@NKH\x06\xf9-Q\x0c\xb9nS\x0cz/Q\x0c90Q\x0c\xf90\xa1\x16\xc8\x8d\x9bb\xd0\x93\x9bb\xd0\x99\x9bb\xd0\x9f\x89b\xc8\xa5 \x9b@^\xdd\x14\xc3\x8eM\xdaD\xe0\xdb\xa4\xeaZ\xdd\x9bh\xab\xcc\xc3\x1bX\xee\xe4\n^\xae\x10\xc6\xe4\x01\x8a\xc4\xf3}\x99\xe3\xfb2\xbf\xf7en\xef\xb7x\xbd/uz_\xea\xf3\xbe\xd4\xe5}\xa9\xc7\xfbR\x87\xf7\xa5\xfe\xeeK\xdd\xdd\x97z\xbb/uv_\xea\xeb\xbe\xd4\xd5}\xa9\xa7\xfbrG\xf7[\xfd\xdc?\xc2\xcd}%/\xf7\xd5\x9d\x1c\xf6g,\xf3g,\xf3g,\xf3g,\xf3g\xdc\xe2\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xee\xcf\xb8\xd5\x9f\xf1\x11\xfe\x8c\x95\xfc\x19S\xfeL!\xc2\x0d\x8a\x178\xdcj\x1b/\xf1\xe6\x18\x1d\xaa\x07\xe7\xe5\x03\x01|\xe5\xb9.\n\x1at\xf1\xbb\x00\x9c8q\x88q\x03.~\x17\x80\xf3H\xaa\x86\xf2;\x1b5p\xc7\xc9\xac\xedZ\xa4\xde\xb1rk;\xb9\xe4;Vvm'\x97~G\xcb\xaf\xedd-\xd8\xf3-\xd8\xb7\xb4`\xcf\xb5`/o\xc1\x9ek\xc1^\xde\x82=\xd3\x82\xfdi\x01-\xebXY\xe8p\x94oQ\x04\n\xeeE\xe1[=\x8cB\xab8\x19I\xa0\xecg\x0c\x91\x92\xab14\n\xde\xc6P\xa88\x1cE\xa2\xeas\x0c\x91\x92\xdb14\n\x9e\xc7P(\xcc\xc1\xaa\x81&\xe7\x92\xfe\x91\x1e\xe9\x1f\xe7\x90\xfe1\xfe\xe8\x1f\xe9\x8e\xfe \xde\xe8\x1f\xef\x8c\xfe\xb1\xbe\xe8\x1f\xed\x8a\xfe \x9e\xe8\x1f\xef\x88\xfe\xb1~\xe8\x1f\xe9\x86*\x1e\x87\x8f\xf48|\x9c\xc7\x1d3\xc7\x92`%\x8f\xc3'x\x1c>\xde\xe3\x8e\x9dki\x02%\x8f\xc3'x\x1c>\xde\xe3\x8e\x9dsi\x02 XKR;\xf5\x9cCq\x055\xcc\xdf\x8d\x91\xb2\xb7Ob\x84\xf3;\xa2\x0d\xaazB\xe3\xecy\x12\xe2uJ\xe0\xaa'4\xae\xf8\xa8~\x0d\xca\x7fU\x18\x8e\x0f\x80\xe0\xd9\xc8\xae$;\x05\x94\x8bOA%-\xa0pE#\x14Z\xa10\xa9\x94M\xf3\x15[\xe6+7\xccWk\x97\x7f\\\xb3\xc4-\xc0\x8a-\xc0\xca-\xc0j-\xc0\\\x0b\xe8N\x92'r\xc3\xc8v\xbct\xcf\xbdu@\x1b7e\xdd1[8\"\n\xd9\xbb\xe9\xda\x90(d/\xc1k\x03\xa2\x90\xbdm\xafYD!{\xad_\xeb\x13\x85\xec\xfb\x034\x93(d_T\xa0\xf5\x88B\xf6\x8d\x08\x9aA\x14rJ\xd0\xad\xa6P\xe7$\xd2{d1{0\"\xd4\x1a\xce\xccy\xfb8L\xed\x14i}\x8b>o\xb0\x08c\xff\xbc(\xfb\xb1o\xb9h\xf9\xd3D\xf0\x1cd7\xd6\xc5\xec\xc6:\xcc\xaex\x0e\xb23L\x89x\x86)\x90\xaf,\x809\x8e$\x12\x1a#\x81\x88e\x01\xc8\xb1\xd7\x93\xc8\xd8\xeb d,\x0b`\x8eC\x89\x8c\xbd\xa1@\xc6\xb2\x00\xe4h\x1a\x12\x19MC cY\xa00\x96\x1e`\xd7\xd2\x88\x0f\x1c<\x8fwI9\x9e\xe6`R\x96\xa7\xfa\x98\x9c\xe9\x89n&ez\xaa\xa7\xc9\x99\x9e\xe8lR\xa6\xad\xfe\xa6\xe0p\n\x93w\xe3\x85\xfes;\xa1\x84\xe1\x89>(\xe1x\xb2\x0b\xcax\x9e\xea\x81\x12\x9e';\xa0\x8c\xe7\xa9\xfe'\xe1\xf9D\xf7\x93z\x1a~nO\x930<\xd1\xd3$\x1cO\xf64\x19\xcfS=M\xc2\xf3dO\x93\xf1<\xd5\xd3$<\xdb=\x8db:\xc7\xb6\xf3\x90EP\xf9y\xce\xf3x9\xb7\x7f\xd4\xcf\xb2?\xdd\xf1O\x10t\x04AG t\x08A\x87 t\x00A\x07 \xd4\x82\xa0\x16\x08\xedC\xd0>\x085!\xa8 B{\x10\xb4\x07B\x0d\x08j\x80P\xdd\x02\xa0:\xdb\xae\xed\xca+\x02\xde\x02\xbbJp\x8e}qf\xe8\xfa\x0b\xded\x05|$\x82\xb3f+\xe0C\x11\x9c5]\x01\x1f\x88\xe0\xac\xf9\n\xb8%\x82\xc3M\xed\x8b\xe0\xac\x19\x0b\xb8)\x82\xb3\xa6,\xe0=\x11\x9c5g\x017Dp\xd0\xa4%\xf6\xaf:{\x93:@v\xacQ\x10\xc3`V`\xae\x1d?h\xcb\xd8\xdeW\x08\xd3dVw\xbe\xe7R\x00\xcbb\x96ad\xe1p\xc8\xacG\x13\x0foP\\\x15s\xefB\xc3\xf95\x0b\x1ad\xdb6#A\x18\x06\x94\x08\x8e\xe3@lH\x08B\x08\xd0E\xae\xdd\n\xb2\xe8g\x7f\x00\xf5\xd7\x80\xc5\x02PV\x8c\xdc\xba\x92\xa1\xde\xd7\x19\x0cQ\xbcX\xf4\x0ds\x00IJ\x81\x86=\x8biN\x18\xdb\xc1\x92\x10c\xc0]\xe9_\x86\x98\xe00\xe7\xae\xd9\xef\x11\xc6\xe1\xb6Dd`H\n\n\xf4\xd7\xc5|a\xd8\x8cy\xa2u\x1c\xe1Z\x10\x0b\xf5\x1c\x9b\xbd\x9c\x90s\xa2qv\x7f`.z\x80\xea\"/\xa8=\xd1\xb5t}\xc4\xe8n\x15\xa6\x14&S\xe0\x9c\xb1\x10]>\xd2aW\xa0Q\xb6\xe9\x0eA\xb7G(\xa8{\x869\x1cZ=\xd6\xb3I\xc0\xd8\x1e\x0f\xfb\xb0\xdf\x11\xb01Bs\x87iW`o\xf6M'5\xe6\xfd> \xcd\x1c\xafQ\x03\xea\xf7\xc7\xec\xcb\n\x88r\xd3\x1a\"\x17\xb4)\x89\x1a\x0f\x1c\x87u\xe1\x1c\x85\x12\x1a\xe8\xb8\x88\x03n\xedd\x85\\\n\xb6\x18,\x16\x0b\x04\xc2(\x15\xa0\xd1\xc2]X \x8eq\xb9\xc5\xc2As\x10H\xf5\x10w\xe1ro'\xc3a\\_\xb1/\x80\xd5-AZkK\xad\x8e<\xe6\xb6\xf3\xb0,\xde\x91ZPH\x83\x90\x8ap\xd4B\xc8\x85$\x15\xe1\xb0\x85\x90\x0bP*\xc2A\x0b!\x17\xaeT\x84V\x0b!\x17\xbcT\x84\xfd\x16B.\x94\xa9\x08\xcd\x16B.\xb0\xa9\x08{-\x84\\\x98S\x11\x1a-\x84\xdc\x0cY\x11\xea\x96\x9c\x90\x0b\x81\xe6K\xad\x8e\x828\xca\xb6\x80\xa8&\x86\xdc\xa7-<\xaa\x89!\x17j\x0b\x96jb\xc8\x8d\xdaB\xa7\x9a\x18r\xa5\xb6@\xaa&\x86\xdc\xa9-\xac\xaa\x89!\x97j\x0b\xb2jb\xc8\xad\xdaB\xae\x9a\x18r\xad\xd6\x00\xact/\x9e\x92\x0f\xc7\xe6K\x8d\x88\xc8x\x02.8\x9b/\xb5&>\xe3\xf1\\\xa86_ju\xb4\xc6\xc3\xb9\xc0m\xbe\x14A\xb90n\xbe\xac\x824\x1e\xcc\x05u\xf3\xa5F\xc5u< \x17\xe2e\x92\xd7Q\x1e\x8f\xe7\x02\xbe\xba\n\x01\x01\x17\xfeU\xba/\x02<\x9e\x00\n\x06+\xc7\x80\xe0\xect9_\x16+\xe4\xc8\x8eQ\x90\xf2\x14D!l\xe3l\xc2\x03\xda\x01D\x98\xf3\xa5\x00\x0c\xc5\x9b\xb5\xa2D$|\xf49_je\x00\n\xe1\xf9X4s\xa3,\x1c\x85\xd0|d:_VA\x00\x87\xe7\xe3\xd4Zz\x11 \x18\xb5\xce\x97U@\nt\x02 \x86\xadk\x11RA\x11me\xb8<\xd4\xe4I\xa0\xf8v\xbe\xd4\xea\x10\x176\x1f\x1b\xedfM\x11\xa1\xf9\xd8\xb7i\x88\x88\x86\x8f\x84\x9b1&\x8b\xe0\x80A \x88\x8b\xf3\x81C\x00\x07\xa2d\xa2\xb3\xc2DP\xcc\x9cu\xd8,l\x86\xc6U>\x82\xaeZ\x91\x87\xab\x10 \x10O/Eh(\xba\xae\xdb \xa0\x81b\xed\x8a\xa6\x0e\xb7\x81\x81\x0d\x88\xbc\xb3a\x87\x08\xbe\x013\x02qxC$R2\x14\x957T\xe2\x0e\x06\xc4\xe8\x0d\x99hT\xe1#\xf6\xf9\xb2\x0e\xd79\x020r\xcf\xef\x97\x17s%t\x07\x9d,\xce\x7fn\xd6N\xec\xbb\xd7rd3\xf3\x8a\xb9\x11\x18\x8a%71\x17\xf0zn\x16sl \x14Cn\xe6.\xd0\xd5\xe4-\xe6W#(v\xdc\xcc^\x80\xe5\xacx6\xdc\xac_\x00\x8bY\\\xcc\xa8,\xa7Xq1A\x01%\xc3\x021C\nE\xb1\xe5\xe2\x86R+U\xe8 Q\\\x0d\xa1\x18r\x81\x05)\x81\x9c#\x81\xa1Xr\xa1\x07\xe1[y8\xd1\xe2\x7f\x05\x86b \x05'\x05E\x0bC\x88\x17;\xdc\x10\x1dI\x1b\xeb-]-C\x90\xecd+h\x92l\xd4\xcax$f\xcc.\x8fH\xb2a+\xe3\xa1\x981\xbbt\"\xc9\x06\xad\x8c\x07b\xc6\xec\xb2\x8a$\xb3Z\x19[b\xc6\xec\x92\x8b$\xeb\xb72\xee\x8b\x19\xb3\xcb1\x92\xcclel\x8a\x19\xb3K5\x92\xac\xd7\xca\xb8'f\xcc.\xe3H2\xa3\x95\xb1!f\xcc.\xf1\x88\xae$\xed 5\x82d\xdc\x96' Ie\x9d\xa4F\xc8\x98\xc3\x1d\xa5J%\xb41\x1f\xca\x99\xc3\x9d\xa5J5\xb41\x1f\xc8\x99\xc3\x1d\xa6JE\xb41\xb7\xe4\xcc\xe1NS\xa5*\xda\x98\xf7\xe5\xcc\xe1\x8eS\xa52\xda\x98\x9br\xe6p\xe7\xa9R\x1dm\xcc{r\xe6p\x07\xaaR!m\xcc\x0d9s\xb8\x13\x95\x81\x9e\x98w\x05 Y\xcb\xa2\xc3e[HW#\n\x8e\xd0\xd2\x00\x0c\x17\xa9\\\x8d\x94=\x174\x02\x8b\"8~$\xd3;\xd2*\xd8(\x12X\xb2\xc0\x01%\x91\x10\x92V\xc0\x84\x95\xc0\xb2\x19\x8e0\xcb\x0c\x92\x94\xb7\x94\xaf \xe4\xac\xd3MR\xceT\x84\x08,\xc9\xe0\x18\x94\xc9NIk\x00\"Q 9\x00\x07\xa5dJK\xae|&4\x05V\x89p\x94J%\xc1\x14\xda!\xadC\x10\xb6Ry\xb3\xf6~@\x06\x9c\xc0\xbaP\x18\xc7V\xa96i\x0d-\xcc\x05\x81-\x95\x98\x93\xf2'q\x82Z\x84i\xbc\x9a\x89B \xbddci\xae\x1a\x85\xb0z\xa9\x12Y/\xd9\xe0ZZ\x93 \xce^\xaa\x84\xdaK6\xda\x96\xd6$\x08\xbc\x97*\xb1\xf7\x92\x0d\xbf\xa55 \"\xf1\xa5J0\xbed\xe3qiM\x82\xd0|\xa9\x12\x9d/\xd9\x00]Z\x93 V_\xaa\x84\xebK6b\x97\xd6$\x08\xde\x97*\xf1\xfb\x92\x0d\xe1\xa55 \xa2\xf9\xa5J@\xbfdcziMpdBl\xf6\xb5\x8fA\x92\x9e\xab\x16\xef\x13\xbb\x83\n\xb5\x89{\xaf\xda\x02\x80\xd8NT\xa8M\xdc\x83\xd5V\x04\xc4\xfe\xa3Bm\xe2^\xac\xb6D 6,\x15j\x13\xf7d\xb55\x03\xb1\xc3\xa9P\x9b\xb87\xab-\"\x88-Q\x85\xda\xc4=ZmUA\xec\xa1*\xd4&\xee\xd5j\xcb\x0cb\xd3U\xa16q\xcfV[wT;l\xe2\xaajDQO\x15\x14\x01\xdbo\x05^\xca\x8c\xe3\x03\xed\xcc\x15\xd0zsN\xcc\xad\x810<\xf9\xad\xbb\x82\xa0\xd8\xbd\x133,\xcb\x19n\xfc\xc6^\x81^\x86X\"\\^\xcap\xe27\xfd\nl\xb1\xc7 \xe6U\x96\x93\xdc\xf8-AR'm\x0c)\x14-$\xb0mX\xd0\x14{\x80b\x9ee9\xc5\x0d\xdaT$%h\xe3I\xa1(\xce\xd0\xc6#\xe1\xb0\x91\xe0\x05\xbd,\x84\xe2 \x9f\xbc\xcb\x08\xaa\xcdI1\xcb\x1a\xc1\xb97\xbbsYjK\xca\x0d\xe2\xc4\xefjR:\x92\xf2#0\x0cW~\xdf\x93PQ\xbec\xd6\xa2\xc6\x02Cq\x85vF\xcbN!g\x08\xf1\x02\xb6M\xc96\xb5p$A\x14_hg\xb5 \xec\x8dd\xcd\x98\x97R\x9c\xa0]WB?s\xbc\x968x\x03ax\xf2\xdb\xb2\x05\x81\x9c\x1d\xcf \xda\xb2%U#\xe7G`h\xed\x01\x9b\xba\x04E\xb5\xaf\xdb\xc2\xb8\x86Q\xbc\xa1\x9d\xdf\x82\x88\xd8\xfc\x15s&A\xb4\xaf\x03\x9b\xc3\x14I\x8b+Q(\x8a3\xb4\x81L\xd1\xb4\x0d\xc74\x8c\x96\x1a\xd8e\xa6\x88\xa43$\x81a\xb8\xf2\xfb\xd0\xa5\x07-\x15b\x02\x12T\xf0\x05\xd2&\xc2\x08\xa18\xa6#\xe5.c,\x0e\x19\xc8#=R\xf6l\xe0\x00U\"\x8a!\xeaC@\xd2\x1a\xa8H\x02b/\n*\xca3CR\xe6Dh\x01\xb1\x16E\x19\xf5\x01#)s\xca 9\xf6\xa2\xb0\x839\x8f\xa4\xa0}y=\x928\xa4>\xc4$\xad\x84\x8a\x19x\xf6\xe2\xc0\x849\xf3\xa4\xd0\x92\x96\xaa\xc4\x91\nyP\xaa\xbd\xb3\x11\xb37_\x898t!\x8eVI\xeb`\x02\x18\xb8\xdf\xc1\xb1Ly\x16Kn\x0f9kQpC\x1d\xdcR\xb1\x85\xbc\x1aQ\xb4C\x9d\xf5j7\x059\x07\xf0\xd5\x88\xc3\x9f\xeax\x98\xbcw\xcb\x99\x0b\xe3!\xfa0\x99\x82\xae\xe4\x15\x89\x03\xa4\xf2\x00\x9a\xb4\x06\"L\xe2Y\x8b#&\xf2\xb4Z\xbb\x19\x889\x1e\xaaD\x18B-\xdb\xf9KY\x8bc*\xea0\x9c\x82 \xa4\xd5\x88\x83,\xf6\xfc\\{ML\xa8\xc5W&\x8e\xba\xe8Sw\xd2\xaa\xf8\xd8\x0b\xe8\x84\xc20\x8c9\xa9\xa7R\x93\xdc\x85\xc5q\x19{\xbcO\xa5\xae\xb6 K\x18\xa8Q\x87\x02Uj\x92\x07&\x92\xc8\xadu\x17\x99\xc0\x08*\x00\xf7\x94#[?\x08\xbe\xdf\x1a\xd9F]\xd4\xedY\xdc{j#\xbb\xd7\x94C\xc5f]\xcc\xbfY7\xb2\xfbu)\xffj\xdd\xc8\xb6\xeaR\xfe\xdd\xba\x91=\xa8K\xf9\x97\xebF\xf6\xb0\xa9\x97\x7f\xbbn\x84\xeb\x06k\x18-R\xae\xd5\xd8\xa0\xcb\xc1\xa6\xe3\x1e\x03\x820&\x8d\x01\x94\x80\xfb4\x04\xd0\x04\xb6h\x08\xa0\x0e<\xa0!\x80N\xf0\x90\x91\x05PL\xdc(&\xce\x06\x16N3\xb1\xc1\x00@\xd5\xc4=\x16\x05\x81L\x06\x04('\xee3\x18@;\xb1\xc5`\x00\xf5\xc4\x03\x06\x03\xe8'\x1e\xb2\xf2\x00\n\x9a7\n\x9a\x87i\x1a\xfa\x9c\x86\xe6\x06\x8b\x00U4\xefq0\x08e\xb2(@I\xf3>\x0b\x02\xb44\xb7X\x10\xa0\xa6\xf9\x80\x05\x01z\x9a\x0f9\x99\x00E\xa5\x8d\xa2\xd20\xe2\xb4\x94\x1aT1\xa8\xa2\xb4Gc \x88IA\x00\xe5\xa4}\n\x01h&\xb5(\x04\xa0\x96t@!\x00\x9d\xa4CZ\x0e@!\x1bF!\x93\x16?\xda@\x1ab\x89@\xbdm\x00\xbdq\x84\x10\x1d\xafL\x96\x0cP\xf0\x86W0K\x05(}\xc3+\x9d\xa5\x02\x0c\xb1\xe1\x0d\xc1R\x01\xc6\xd9\x00\xc6\xe1\x1a\x06Xl\xc5\xce\x125\x11<6\xae\xc0Y\x83!\x02-\xb6\x82\xa6\x12\x96\x10\xa2\x03\xa6\x17\x86\x0c\xb0\xd8\n\x98q\x18*\xc0b+`\x12b\xa8\x00\x8b\xad\x80y\x89\xa1\x02,\xb6\x82\xa6*\xb6a\xc0\xc7\x85l\xfd\xe0\xdb\xf1\xd2\x0bX\xdb\xf8\xb6Q\x95@\x06\xf0\xed^]\x0c\x95\x9aU)\xf0\x95'\xbb_\x15\x02\x9fU\xb2\xad\xaa\x10\xf8Z\x92=\xa8\n\x81\xaf-\xd9\xc3\xbaN\xa0\xa1\xb8j(\x18\xbf\xf8\xd8\xa0\x8a\xc1&\xe3\x1e\x8d\x81 &\x05\x01\x1a\x8f\xfb\x14\x02\xd0\x00\xb6(\x04\xa0\x06<\xa0\x10\x80.\xf0\x90\x96\x03PH\\+\x04\xec\x9b~l\xd0\xe5\xa0J\xe2\x1e\x03\x820&\x8d\x01\x94\x12\xf7i\x08\xa0\x95\xd8\xa2!\x80Z\xe2\x01\x0d\x01\xf4\x12\x0f\x19Y\x00\xc5\xcck\xc5\xc0\xf3\x8c?7\x18\x00\xa8\x9ay\x8fEA \x93\x01\x01\xca\x99\xf7\x19\x0c\xa0\x9d\xb9\xc5`\x00\xf5\xcc\x07\x0c\x06\xd0\xcf|\xc8\xca\x03((\xad\x15\x04\xc4)~j\x90\xa5\xa0j\xd2\x1e\x05\x81\x10&\x89\x00\x94\x92\xf6I\x00\xa0\x91\xd4\"\x01\x80:\xd2\x01 \x00t\x91\x0e)\x19\x00ElhEL\xe4n\xb3\x01\x143Qp\xa4\x0d\xaf-\x96\x0c\xa2\xe248i\xf5\xb4\x0d\xa7\xd4I\xab\xe7m8=OZ=q\xc3\xa9~\xd2\xea\x99\x1b\xde\x1al\x83\x00\x0b\xad\x98Q\xbf\"\x81\x87\xbc\x154 \xd0$\xa0\x85V\xc0\xc4\xc0\x90AT\xfc\\A\x13\x01\x16Z\xf1\xb3\x07M\x03Xh\xc5\xcf'4\x0d`\xa1\x15?\xc3\xd04\x80\x85V\xc0\x9c\xc34(\xb7P\xfb[-\xe9\xd7\nFv\xfer\xce2\x96\x01\xf2-d\xa9 \xe5BA \x84I\"\xc0\xc4\x0b \x00s/$\x00L\xbf\x90\x000\x03C\xc9\x00&a\x08\x84(\x0f\xc3A\x04\xa9\x18\x1e\x07\xc1L\x0e\x06&d8\x14\x98\x93\xe1P`Z\x86C\x81\x99\x19^.09C\xc2D\xf9\x19\x1e#H\xd1\x00@\x08g\xf280Q\xc3\xc3\xc0\\\x0d\x0f\x03\xd35<\x0c\xcc\xd8\x00\xb2\x81I\x1b\x12'\xcc\xdb\x00 A\xea\x06BB@\x13\x00\x82 \x1c\x00\x07\xe6p\x00\x1c\x98\xc6\x01p`&\x07\x92\x0fL\xe6\x90@8\x9f\xc3\"\x04)\x1d\x0e\x06\xa1L\x16\x05&vX\x10\x98\xdbaA`z\x87\x05\x81\x19\x1eN&0\xc9\xc3)\xaa=\xcf\x03kN1\xd5\x03\xeaS-\xdb\x03)Y)\xe1\x03)^)\xe7\x03\x19C)\xed\x03\x19H)\xf3\x03\x1aM-\xf9C\x92*\xe6\x7f8\x92cR@<1D\x0b\x91\xc2\xd3\x9aJ\"\x88#T\xcd\x05q\x84\xaa\xe9 \x8eP5#\xc4\xb7Q9)\xa4\xe5\xdfs\x8f\xe1\xbc\x10Q(H\x0d\x91\x08\x08`\x12\x000AD\x94\x839\"\xa2\x1cL\x13\x11\xe5`\xa6\x88\xac\x1fL\x165\x00Q\xbe\x88E\x08RF\x1c\x0cB\x99,\nL\x1c\xb1 0w\xc4\x82\xc0\xf4\x11\x0b\x023H\x9cL`\x12\x89@\x89\xf2H\x1cD\x90J\xe2q\x10\xcc\xe4``B\x89C\x819%\x0e\x05\xa6\x958\x14\x98Y\xe2\xe5\x02\x93K\x04L\x98_\xe21\x82\x14\x13\x00\x84p&\x8f\x03\x13M<\x0c\xcc5\xf100\xdd\xc4\xc3\xc0\x8c\x13 \x1b\x98t\"pp\xde\x89\x01\x08RO,\n\x02\x99\x0c\x08L@1\x180\x07\xc5`\xc04\x14\x83\x013Q\xac<`2\x8aUPk>\nT\x98ZJ\n\xd2\xa2RV\n\xd0\xacJb\nP\xb6Jn\n\xd0\xbfJz\n0\x89J\x86\n\xb2\x92R\x92\x8a T\xcbS\xb1\x04G\xa4\xaa8R\x80\x12\"\x04\xe7(\x85\x84\x15K\xa6\x98\xb3b\xc9\x14\xd3V,\x99b\xe6\x8ak\x9b(y\xa5\x90\xbdR\xf8&Kd\xeb\x9a_\xc5fPF\xab)\x14%\xb4\x08\x04\x040 \x00\x9c\xcej\xca\xe1lVS\x0e'\xb3\x9ar8\x97E\xd4\x0f\xa7\xb2|f\xad\xc0\"\x0c\x16!Jd\xb10\x08e\xb2(8\x8d\xe5\xf3\xb1=\x0b\xb2X\x10\x9c\xc4\xf2\xf9\x98\x9d\x05\x0d9\x99\xe0\x14V\x83\x12f\xb0X\x88(\x81\xc5\xe1 \x98\xc9\xc1\xe0\xf4\x15\x8b\x82\xb3W,\nN^\xb1(8w\xc5\xc9\x05\xa7\xae\x1a\x988s\xc5aD\x89+\x1e\x08\xe1L\x1e\x07\xa7\xad8\x18\x9c\xb5\xe2`p\xd2\x8a\x83\xc19+^68e\xd5\xe0\x04\x19+\x1a JX1(\x08d2 8]Ec\xe0l\x15\x8d\x81\x93U4\x06\xceU1\xf2\xc0\xa9*FA\n\x99*Hc\xaa\x89*@\x8f\x8ay*^\xb9ji*^\xe1jY*\xde\x08jI*\xde0j9*\xc0X\x8a)\xaa\x86R5C\xc5P\x1c\x95\xa0bi!R\x88\x12\x9c\xae\x94\xd2S\x0c\x9drv\x8a\xa1SNN1t\xca\xb9)\xb6}\xea\xa9)\xbf\x8c\xd4\xa0\xccT]&JL5\x00\xa8\xdcl\xca\xe1\xb4T]\x0cg\xa5\xeab8)U\x17\xc39\xa9\xa6n8%\xe5\xd3k\x04\x16`0\x00QB\xca\xe7\xc3\x7f\x16d2 8\x1d\xe5sq=\x8b\xb1\x18\x0c\x9c\x8c\xf2\xb9\x88\x9d\xc5\x0cYy\xe0TT\x0d\x12f\xa2\x18\x84(\x11\xc5\xc2 \x94\xc9\xa2\xe04\x14\x03\x82\xb3P\x0c\x08NB1 8\x07\xc5\xca\x04\xa7\xa0j\x948\x03\xc5BD (\x0e\x07\xc1L\x0e\x06\xa7\x9fX\x14\x9c}bQp\xf2\x89E\xc1\xb9'N.8\xf5T\xc3\x04\x99'\xaa\\\x94x\xa2A\x10\xc6\xa41p\xda\x89\x82\xc0Y'\n\x02'\x9d(\x08\x9cs\xa2e\x81SN\xb4b\xda3N\x80\xa2\x14\x13N\xbc\xf6\xd4\xf2M\x9cF\x95\xd2M\x9c\x92\x95\xb2M\x9c\xde\x95\x92M\x9c)\x94rM\xbcu\xd4RM5\x9db\xa6\x89\xc6\x1f\x93hb(\x01B\x88\x0e\x9a{T\xd2L4\x95j\x96\x89\xa6RM2\xd1T\xaa9&\xa6]\xa7\xa5\x98\x04\xd9$\\\x85SP6\xa9)\x14e\x93\x08\x04\x040 \x00\x9cMj\xca\xe1lRS\x0eg\x93\x9ar8\x9bD\xd4\x0fg\x930\x13\xd7\xb3\x08\x83E\x88\xb2I,\x0cB\x99,\n\xce&a>\x16gA\x16\x0b\x82\xb3I\x98\x8f\xb2Y\xd0\x90\x93 \xce&5(a6\x89\x85\x88\xb2I\x1c\x0e\x82\x99\x1c\x0c\xce&\xb1(8\x9b\xc4\xa2\xe0l\x12\x8b\x82\xb3I\x9c\\p6\xa9\x81\x89\xb3I\x1cF\x94M\xe2\x81\x10\xce\xe4qp6\x89\x83\xc1\xd9$\x0e\x06g\x938\x18\x9cM\xe2e\x83\xb3I\x0dN\x90M\xa2\x01\xa2l\x12\x83\x82@&\x03\x82\xb3I4\x06\xce&\xd1\x188\x9bDc\xe0l\x12#\x0f\x9cMb\x14\xa4\x90M\x824\xa6\x9aM\x02\xf4\xa8\x98M\xe2\x95\xab\x96M\xe2\x15\xae\x96M\xe2\x8d\xa0\x96M\xe2\x0d\xa3\x96M\x02\x8c\xa5\x98Mj(U\xb3I\x0c\xc5Q\xd9$\x96\x16\"\x85(\xc1\xe9J)\x9b\xc4\xd0)g\x93\x18:\xe5l\x12C\xa7\x9cMb\xdb\xa7\x9eM\xc2eP\x06e\x93\xea2Q6\xa9\x01@\xe5fS\x0eg\x93\xeab8\x9bT\x17\xc3\xd9\xa4\xba\x18\xce&5u\xc3\xd9$L\xaf\x03X\x80\xc1\x00D\xd9$\xcc\x07\xf9,\xc8d@p6 s\xf1;\x8b\xb1\x18\x0c\x9cM\xc2\\l\xceb\x86\xac{U\x1fl?w\x15\x1fV\x00w\x17\x1f\xd4\x00w\x19\x1fR\x01w\x1b\x1f\xd2\x01w\x1d\x1fR\x02w\x1f\x1f\xd2\x02w!\x1fT\x03}\xe7\x1e\xd6\x01}\xe9\x1eT\x00}\xeb\x1ej=}\xed\x1ej:}\xef\x1ej7}\xf1\x1ej4}\xf3\xbelq\xfb\xc1\xcb\x033f\x90\x17UD\xa3\x1d\x05\x01\x07<\x12\x01\x8ey$\x00\x1c\xf6H\x008\xf2\x91\x00p\xf0\xa3d\x00\xc7?\xf6\x00\xabh\x08\xe4q\xe0(\xc8\xc1\xc0\x81\x90C\x81c!\x87\x02\x87C\x0e\x05\x8e\x88\xbc\\\xe0\xa0H\xc0\xe4\xe3\"\x00\x04\x87F\x1e\x07\x8e\x8e<\x0c\x1c y\x188F\xf20p\x98\x04d\x03GJ\x02\xd72XBHp\xbc\x04\x80\xe0\x90 \xe0\xc0Q\x13\xc0\x81\x03'\x80\x03\xc7NH>p\xf8$\x80\xb2\x11\x94\x83\x81\x83(\x8b\x02\xc7Q\x16\x04\x0e\xa5,\x08\x1cMY\x108\xa0r2)l5\xaa\x9ef\x0f\xc8\x83W\xc2\x81\x96@\xc0\xe3l\x03\x80\x87\xd9\xa6\x1c\x1ee\x9brx\x90m\xca\xe11\x96\xa8\x1f\x1eb\xe9\xfd[\xe1\x08\xcb\xc2\xe0\x01\x96A\xc1\xe3+\x03\x82\x87W\x06\x04\x8f\xae\x0c\x08\x1e\\Y\x99\xe0\xb1\xd5gF\x1b\xd1\xd0\xca\xe1\xe0\x91\x95\x85\xc1\x03+\x8b\x82\xc7U\x16\x05\x0f\xab,\n\x1eU9\xb9\xe0A\xd5g\x07\x18\xd1\x98\xca\x03\xe1!\x95\xc3\xc1#*\x07\x83\x07T\x0e\x06\x8f\xa7\x1c\x0c\x1eNy\xd9\xe0\xd1\xd4\xa7\xc6\x1a\xd1`\xca\xa0\xe0\xb1\x94\x06\xc1C)\x8d\x81GR\x1a\x03\x0f\xa44\x06\x1eG\x19y\x14\x86Q\xc1\x88\x89\xeb\xe1F4b\x12\x08x\xc4l\x00\xf0\x88\xd9\x94\xc3#fS\x0e\x8f\x98M9\x96\xdc\xca\x05\xfajr\xc1\xa8\x10\xa6\x95C\xdb7\x12Kf\xae\x1d?\xb4\xf2\x92}I5\xe3\xf3\x80\x0e)\xda\xa5\x9a\x8b\x9c0\xb6S/\x0c\xce\xb1\x17 -]\xc5\xe1z\xb9\xa2 \xd6\x81\x8b\xe2\xac\x98\xa3\xa9K\x18\xc7\x0b51M\x10\x06Ha\xe9s\x00d\xce\xd6Q'\x88\x0d\x91)H\x0e\x91\xe5\xc2+H\xaf\xb0p+\x9b\xe4\x9f\xd4\"\x9eJ\xa5A<\x95B{\xc4\xa2\xe3\x93D\xe7\xa9TD\xe7\xa9\n\xd1)\x8a\xb4D\xd9\xd8[\x06\xe7YT\xc0\x94\xc7dy>Q2\x00\x87\x048(HQ\xac`\xed\x03#E\xed9bA\x18\x08(\x0b\x83)\xc5Q\x90G\xc1\xfbR\\y\x83DF\xbf]D\xffh aaZ-G#`a0$\x0c\x0d\xaa,\x9c\x7f!~\x11\xc6\xfe\xb9cG^jc\xef\x11\xb1P\xccBq\xb8E\xb1c'\x1cr\xcd\"\xd7Q\x04#\x03\x16y\xd2p\x98\x12\xce\xa1\xd4\x12\x00-n\x0c\x00\x16\xb7\x07\x00+\x0c*\xcan\xda\xb8\x98Z;9\xb0\xa4\x99\x1cV\xd2J\x0e\xab\xd0HA{8\xb7\x92\xb5\xe7\x08\x1f\xe4\xb1\x92\xf6pX`8]h\x833\xe6\xc1\n\xd9n>\xab/\xc2 \x8b\xf5\x1e\xd19\x1fR/4\x8b\xa5K\xd6s\x80\x94\x0f\xa1\x17\x06Ql\xf2\xc5=\xa2\xb8\x07\x05\xea\x0b\x93@\x18@\x90\xbe\xe8S\x00\x88\x85E\"\xf8\xe2\x01Q\xdc\x1d\x0d\x01\x06C\x12Q\x00\xda{\xc3\x81\xd5\xbd\x16$\"\xf5g\x9d\xae\xc5\x02\x005a\x04\x9a\x01d\x07\x1a\x01\x99\x82F\x08\xacA\x83`\x83\xb0\x18\xd0&\x0c\x080\x0b\x8d\x10X\x86\x01\x15\x18\x05\xeb(\x8cU\x99\xc9|\xa1\xc5\xfcV\x83q\xb4\xa4\xbd\xfc6s\xf9m\xd6\xf2\x15\x8c\xe5\xb7\xdb\xcaW0\x95\xdff)_\xc1P\xfe\xb1v\x12\x98\x04\x0bM\x82[M\xc2\xd1\x92&\xc1m&\xc1m&\xc1\n&\xc1\xed&\xc1\n&\xc1m&\xc1\n&\xc1\x80I(\x8c\x8f\xecd\x1d\xa3C\xd3O\xb2\xce\x03b\xb2r\n\xd8\x17\x01\x03;\x8e\xc3-\x01\xedq<\xbd\xc0EAZLi\xc5\xcf\xe7Fs\"+m?\xcf\x98\xf86\xc6\x9acG\xe5\xe8\xb0\xb1c\xcf\x0e\xd2\xf3\xe69\x8dO\xe3u\xe0\xd8):\xe4\xc9\x81<5\x82\xce\x83p\x1b\xdb\xd1$\xdc\xa0x\x91\x7f\x9c\xcfs]\x14Lr\xa9\xea\x87\x08c/J\xbcDa\xcc9\xc0\xeaH\x94\xd5\xcb`[4L\xa3EJ\xae\xe3\xbd'\xea\xb9\x1e\x88UU\x9d\x11\x9c\xaem\x05u+\x0c\xf1\x95\xc2|u\x13\xf8\xc7X\xc0W1\x80\xff<\xfa\xf7\x8fT\xbf\xff\xdd\xb4/Q4VW4>F\xd1XE\xd1\xf8y\x14\x8d\x8fT4~\x8a\xa2)\x96U\xb9\xe6\x84Aj{\x01\x8a\x0f\xf5\xa3\xfdy\xe2\xc4!\xc64E\xb1h\xa6\xb7\x12\xecu\x1aN\xc8\x9d\x96\xec\x01\xa3\xddX\xcb\x1e\xf2t\x0c\x0cS\xb0\x86Y{\xe7<\x00bj\xec\xd9\x1buIARPX\x8d9\xf4\x94\x03\x15\x04V\x18M\xcaV\xf8'7\x02\xa0\x84\xdb\xe0\x1f\xdb\x04\xb1\xb4\xf8di\x01JXZ\x0cHK\x8b\x82\xbd\xe8\x10\x85\x89\x97'\x02\x17\xde\x0e\xb9\xff\xd7\xf3\xa30N\xed \x9d\xfcQ\x97\xd8\xf3$\xc4\xeb\x14\x11\x85\x19\xe9y\x8c\x9c\xf4G#\xdau\x88\xbf?\xd1Eg\xc4\xdf\x9f\x14\xcc}\xe0\x04\xcc\x1c\xe7\xcf\x94QAH\x15\x9f\xcc$\xf7\xff\x83\x04\x17\xc9\x88\xff\\\x19)\x01\xb6\x89\x16\x84\xb1o\xb3#u\xf6\x88F\x16\xa370\xa0\xd3\xb0(\xa6#\xc9(>>'X\x0b\xc5\x07J\"\xb9\xe0\x90\x8a\x13\x8d\x85e\xd2)\x88\xa7\xe0m\x8d\xcclt!\x14\x19\nCx\x89\xfd#\x05\x96\xca\xa6jfp\xe6\xe6e\xc3\xbcl\x14f\xa3\xcd\xed\x04\x1d6(N=\xc7\xc6e:;{\xc6\xef\x91l4\xdfsY\xa8\xef\xb9.\xe6\x80i\x18\xb1\xc04\x8c\xb8\xaaS\x9f\xab9\x0fp\x14\x0c~\x00\x9a\x91\xf9\x8ezK\x00\xb4\xb01\x00\x16n\x0f$B\xd1$\x856)8q\xd9P^o\x92vr`q39\xa8\xa0\x95\"\xbb\x1d\xed\xf8e{\xf01\xed\xe1\xc0\xe2\xf6pPA{\xf8\xfa\xcb\xf6PX\xd7\xf3\x0fad;^\xba?7\xb8\xa23\xf6\x01\xf41\xfa\xecq\xf1\xfdym\x8b\xe6\x0f^\x99\x15/f\x90\x92w\xa7kXI\x07ez\xf1\x82IK9'\x86\xbc\xd6J\xfc\xae\xc5\x13\xdaN\xeamP\x03\x19M\x94d\x0c\xd7\xa9\\\xc8p\xcd\xec\x9e-q\xb8=\xe3\x9e@\x82\xe7\xcf\xbf\xa3\xbe\x14\xea\x15\x18|\x95-\x03\xf3S\x11\x9dn\xfe\x9f\x1a\xa8\xab\xa9\xedXQ\x9b\nKC\x95\xf5\x9e\x89Py\xb3\xda@y\x1b\xd9\x16\x18\xdf\xa7\x05\xcd\x06{^+\xa4w\x16R\x98 _\x7f\xb6\xef\xe1/\xe3p{\xd0\xfc\xf0Q\x0b\x93\x9dVd\x0f\xfd0LW^\xb0<_\xc6\xf6>ql\x8c\xea\xb6\xcdm\xe7aa;H\xdbx\x897\xf7p\xd6\xf2r\xc1+)\xa24\x93of\xe5?a;E\xdf~\xd4\x7f\x9a\x88\x9e\x03\x1a\xe5Xu\xba=A\xa7:\x02z:\xe4\xac\xa5\x16^\xdb`\xd7\x89\xe1.\x9b\xeb$\xb7\xc0\x8fFW\xb7HM\x11O\x81:\xcaaI\xc4\xac;\xe6Yu\xc7\x00#\x0d\xdb\xf1\x12\xfd\x7f\xc5A\xbc\xe0\x18\x1f\xe1\xd1OEI\x9d\xa5\x80\x88L \xf2\x9a\xb2\xb4\xcdwz\x90\xeb\xf4\x84\x06o\xf7\x1f\xc0\x17\xb3\x87L0\x1dzAZ\x8fH\xce:N\xc2\xf8\xbc|H#\x93\x95\xed\x86[\x0d\x02N\xea\xc5b\x8c\xb0\x9d\x89\x05\x99\xdd\xc6\xb8\xd3\xb5\x92\x8e\xb3\x9e{\x8e6G\x8f\x1e\x8a\x7f\xec\x1a\x03\xeb\xac;\xea\x9fu\xfb\xfd3\xe3\xa7\xc9\x91x\xb1\x88\xe7\xf6\"\xcd\x04\x0d\x83\x14\x05\xe9\xf9_\xfe\xd2\xf8\x7f\xb8\xd3\n\xe4\xb9\xde\xd1;\xc6 \xdauz\xd1\xaeC\x9e\xf7\xeb\xfd4Q\x86\xe5\x07;c\xdb\xf5\xd6\xc9\xb9\x17\xacP\xec\xa5\x93f\xd2\xe4\xd6\xd1\x93\"\xf3\x99\xe7e\xf4I\x11A\x1a\xba\xfeb\xb2ByN'\xff\xf91\xcf\x98\xee\xce5\xf9\x9cu\x846Ui$\x1a\xcd\xfd\xbb\xd0\xeb\x99\x18Ej_\x10d\xcc\x97\x9a\x1dx\xbe\x9d\xa23\xc1s\xa8/\x11\xa5\xc2\xd0\x89=\xc4IM\xdb\xec(\xd0\n\xa6\xa5~\xd4\xf4Ce\x17\x9d-2\xea\"\x83-\xea\xd5E=\xb6\xc8\xac\x8bL\xb6\xa8_\x17\xf5\xd9\"\xab.\xb2\xd8\xa2\xf1x\\\x17\x8e\xc7c\xa0\x98*\xe7\x00\xbe\xbdk\xa45\xfa\xc3\xfe\xc8\x1c\xf4\x87,\xaa\xf4\xf2\x1aY\xfe\xce\xc3\xbc\xd4\xb3q\x0d\xe3\xb3\x95\x8f\xda:HP\xc3(\xff\x8d\x86\x04(IQf\xa0h\xaf\x15\x11T\xdeM:!\xb3\xaf,\xc2Ej\xb05>\x10\xbf\x9e\x1b\xecB\xa2\xa4k6\xae \xda\x95\x01\xd6\x01c{G`\xcd#\xb0\xfd#\xb0\xd6\x11\xd8\x01\xa3\x17\xe8`\x7fA\x8f\xbd$\xd5b\x94 \xa1q\x08\xc4\x9a{\xf1\x1c\x99\xaf\xd6'94I\xf7\x18i\xe9>B\xc5\xd1*\xa1%\x8b\xed\xa5N\xf4sDm7u\x8f\xdbo\"9&(B\xb1\x9d\x86q\xce\x94\xe0at-A\xfb=\x7f\xd9\xf1\xfc\xe5\x81\x18\xd2\x9b\x9cG\xfe\xab\xeb%\x11\xb6\xf7\xe7s\x1c:\x0f\x02\x1d\x06\x0fI\xc7>\x94\xe7\xe1Mk\x88\\\x17\x9a\x02\xf8\x01k\"-\x95\xd5\x06\x0d\xb6\x0c\xa2\x9c\xf5\x0b\xa9\xc6\x03\xc7Y,\x9e_\xaamlG\x11\x8a\x05\n\xec\x0f\xf4hW\x1a\xf0\\\xef\xe4\x9b&\xa5\x0b\x9d\xeb\x9d^VH\xcd\xf0\xdecVRN\xcf\xf3p7\x01\x9f\xd2\x12\x84Qn\x1a-\xb5\x97Z\x82\x9cL\xeaCe4\x82ymH\xcdO\xb4\x05F;\xf2Y\xf6;%I\x18{\x993V\x99\x18\xaa\xcc\xf5\xe2\xa2\x9a2%:\xa98\x12%N\x88\xd7~0\x01\x9f\n\xc5\x7f\xba\xd8\xe4 \xe0F,\xeai\xfe\x8b\xe6\xa5\xc8O\xaaG\x95E\x0c=\x0b\x97\xb2\x7f\x8c\xea\x9f \x134\x8aB\xc4^\xc2E\x81\xbddR\x9b,\xef\xb9F\xb4\xeb$!\xf6\xdc\"\x1c\xb3\xc6g\x03\xebld\x9cu\xcd\x9f\x84*)\x9d\xb8\x99\xf5\xa9\x1b\x1e:\x1bj\x93\xca$\x8e\x18\xf5I'\xd4;V\xb4\x9b\xe4\xa5\x0b\xdb\xf7\xf0\xfe<\xb1\x83DKP\xec-&U\x1f\x9e\xf7\x0d\xcb\x10\xf2\xee\x06\xa1\xe6\xa2\xc4\xe9$\x91\x1d\x1cH\x03d\xfa>7j\xd5\x9f\x1b\x93\xe2?BV\x9dd\xb3\x84\x82\xa2\\\x85}^\xab\xfdD\xc2\xca\xb71u\xde\xa9_5t[\xcc\x04}]\x9f\xa8HK\xf4\xd1\xdc \x8eWVd\xc7\xb6\x8fR\x14\xff\xf1G6\x15\x90B\xf5\xa2]\xcd\xdf\x8av\x1d\x9db\xef\x87A\x98o\x10P\x82\x0ft]V\xdb\xc6C[\xad\x9a\x06\x1f\x0e\xfc\xca&\x9b\x04\xcch7\xa9\x0e>\x90\xfe`\xa9{\xb9\xc5\xdb\xc3\x82\xedq \xdc\xcd\xc8j(\xba\x02\xd1\x07\xfe\xaa\xeb:\xb3\x10\xe9\xb3\xc3a\xb3\x921\x99E\x8c1\xe6\x16;\x00\x04\x14\xad\xd3M\xedy\x1e8\xa0\xf8\xe9#\xceQ\x0eOV]\xfc\x9c\x8dC\x87\xc6\xdb\xfa\xfc\x90s\x04\xa3\xf3\x85\x17'\xa9\x16.\xf2\xf0\x83a\xdb\xd1;\xfa\x11\xbc\xbaebs\xd5/:9\xe7S\xa7\xf3*\xd7Y\xfc\"\xb3\xbe\xad\x999L\x1eSY\xfa\x8bj\xb5\xd9kV\x9b\x99\x9f\x00kd \x9b\xf3\xfb\x8f\x9a\xa5\xbf\x00\x13=U\x111\xb4.c{\x0f6\xab\xeb%Z\x18\xa1\xa0\x19n\x92\xb5\xef\xdb\xf1\xfe \x1a\xe13\xef\x16h\xa8fQL\x8a\x95'V\xd6\x1a\x95s\xd0\xc4\xf7\x82*\x82\xb5\xb2\xdf A\xd9\x1b\x83\xa3\x9f\xe0~c\x00\xcb\x7f\x83\xe980\xe6(\xd9\xcf\x8e\x01w\xb0=G\xf8\xe9\x1d\xef\xa4\xa9\xfe\xa8f\x95\x922C79,\x0fu\xbd\x1eG\xb9\xc30'\xcc\x1aJ\x02\x95\xfd\x91\x9a\xa1$\x9d[\xc0j\xd5g'J\x95Q\xadi\xeds4\xae\xe8C\x9a\x8f\xd2U\xe8\xca\xe6\xed\\\xcf\xf5\xd6\xe5H'f\xd0A\x16\xa8e\xe3\x05w\x03\x8c\x99\\L\xba\x0b\xe5\xd3ONC\xf5\x04\x9d\xed+\xf2v.\x16\x0b\xc5F\x86\xf9\xd2,3\x80\xe7\xb6\xf5\x97\x92$\xb2\xd3\xd5\x11\xd0?\xfepQ\x14#\xc7N\x11\xa5\xccAD\xf4\xacS{[n~\xbdq\x08\xbdc\x16\xab\x19\xfa\xb7'w\xd0\xc96\x8c]m\x1e#\xfb\xe1<\xffW\xb31\x96\x85c\xaa\xf1R\xb9\x19N\xec\xe8\x0f\x07\xa3h\xc7l\x81\xff\x07\x9a\xaf\x17\xed\xd8\xd3\x9d\xcal\xd8\xcd:,\xbc\xa6\xab\xd4p\xa6\x8b*r\xc8\x16\n\xb1\x17\xe5\xebR\x82\x81\xa9:\xe4<\xdfH\xf3?4\xe9\x90\xd1\xbeZp\xc7\xc8\xad\x18\xe0\xf7\xea\x00\x9f\x98\x95\x9e=\xb2\xe7\xa4\xab\xf6\xad\x19\x19\xcb\xb0m\xc4,5\xe0\xf8\xaab\x19\x85IJ\xbc\x8f\"3p\x7f\xec8c}\xc2\xae\x80\x87\xe6YO\xef\x9f\x19\xfd\xbe0\\\xa1\xb8\n\xa7\x1drN(\xea:\x81\x19(\xb3\n\x1f\xf5p\xf9h9\xd7\xac&\x17\x8em\x98\xbc&{V\xef\xcc\x18\x18g\xfd\x91\x82&\xd7j\x8a,\xaa:\x9e\x17(\xb1\x02\x9b\xd3\xd4\xa8\xc2\xdeE\x18\xa5\x88\x95kl\"\x13\xf1\x9a\xec\x8f\xcf\x06\xbd\xec\xff\xad\x8a,\xd8\xaa\xe92\xaf\xec$v\xa0\xd8j\x9cN\xd4\xa8B\x0dK\xc4:\xe6\xc0\xb0\x17\x0b^\x9d\xe3\xe1\x991\xb4\xcez\x96B\x17_\"5\xc7,\xaa:\x9e\x17(\xb1\x02\x9b\xd3\xd4\xa8\xc2>\xb2Sg\xc5\x88e\xe9\xc8tz\x9c\"G\xfaY\xaf7<3\xc6\n\x8a\xcc\xd9*\xa9\xb2\xa8\xec\x14n\xa0\xd4J\x8cNS\xa7J\x05\x19WF\xae\xb1n\xf4\x00\xb7\xcc\xa6\x1cc\xa4\xe6\x96\x19W%e\x16u\x9d\xc0\x0c\x94Y\x85\xcfi\xaaT\xe1\x1f\xe6\xb1^\xc2H\xa6\xbb\x96m\x0fym\x9agc\xfd\xcc\x18\x0c\xdb\x95Y\xf2U\xd2gQ\xdbi\xfc@\xc1\x15Y\x9d\xa6U\x95*\x88\xb0\xbe>\x15:\x98\xd0\xa2\xa2y\xf6\x07\xce\x14\x8d{\xc0\xab\xa5\xc4\x95(i\xb9\xa8\xefd\x96\x07Hzun\xa7\xe9ZR\x0b!\xa0\xb3B>J\xb8\xa4\x9c\x1aY\xa7[\xfe\xa0\xa5^\x8aQk\xaef\xe1\xe14kD\xb3\xd6*\x9eh^\x90Eq\xd4\xd6b\x1eI\xe7{T:\xb5oU%\xd8{M\n\xd2\x1d\xb9.b\xbc*\xb5\xe7\xa7\xad\x82\xa8\x9a\x8bex\xdd,b\xe3\x1b\xd8\xf3N\xedy\x07{l\x1a\x8d<\x89N\xf1b\x16,\xc7\xaf\xfe\x8a\xfa\xd8\\8\xb7bbv\xf2\x99\xcf\x96\xf5X[C\\\x85\x89\xecb\xdf\xbe`5\xa8WeF\xb4\xa3\xceK\x11)l\xc1\xfe\x1e\xbb\xbdW\x08Q\xfa\xf8\x81\xc9\x90\x81\xbeI\xae\xbe\xb5r\xaf\x1aLJhh\x97\xa28\xb0\xb1\xe6\x86N\"\x87\xe6^\xfdGy\x13\x8a\xb5+\xbd\xcdX\xbb\xa8U\xa5\xb5\x8f7\xa8\xa4)\xdc\x11\x12ik\x84h\xb2ALf\x14h\xd3\xf3\xb6 :\xa6\x01\x020%\x7f\xc4fR\x9f\x9e\xb3\x15\xaa\x939\x0fC\x13\xa3\x1dr\xd6)\xaa\xe0\xf50\x98\xbb\x81\xfc\x9d^\x0ci\xa7;O\x03r\x1c$\xc7\xe5>7.\xcfCw\xaf\xe5;\xb0u,r\xd2\x98\xf7?s \x82\x97\x9ez\x86\\/=P'\x16\xf4V\xfab#\x83T\x9a\"M'A\x189i\xb5\x9bkB\xb3W\x8c\x92(\x0c\x12\x94h^\x100f\x96\"\xb9\xee\xc8\x95[\x82\x9eXN\xa3\xa7u\xc6\xaa\x96,\xec\xf8#I\xedt\x9d\x80{\x0fOeJ<\\\x07n\xe8\xac}\x140\xb9]\xe3\xd8d\xf6X\xcf\xfeH\xaa\xce\xcf>1\x9f\x0f\xcd\xcf\x93UY\xef\xbe\x8e\xfc\xc9\xf36\xb78o\xf5?\xd1Zb<\xfd\xe3\x8f\xc2g\\o\xd3\xf5\xed\xf8\xc1\x0d\xb7\x01\xec]2\xca\x18\x05.\x8a\x91;+9\x80\x9b\x7fE\xa0\x93\xbf\xb9\xcd\xa1\x8f\xc75C-\x10\x9a\x91\xa7\x1c\xa8d\x9e\xd1\xef\xf7\xd1q\x9a\xe1\xf6\x9dT\x1aW\xa9\x85\x9dEThY\xc5t\xa2\x038\xad|g\xc9\xedg\x90\xdc>\x1c%\xf0h<_\xe8\xfd\x89\xe2\xbd'\x15\x89\x9a\xd6\x14\xa9\xf3\xe7h\x13}\xd8qd\xcc\x0d\xddy\x82d\xec\xce\x95\n1'T\xba:N\xd3\x8b\xc5BxbN\xb8\xd3\xaaeSW\xf3\x1b\x0e\xed|\xe4+\x0e\xdd\x93G!\xa9\x0ej6gl\x9b\xfd\xfa\x96\xb7TP\x15F1w\xa6\x0b\xee\xfb\xcc\x95\xef<\xa2)69\xb3\x9f\xca=\xce\xecwx\xe7\x93{\x98C\xab\xe0c\xb5\x8fV(H\n\xf1\xb3\xa0\x83z@\xfd\xa24\x06\xd5/\x89ae;\xd6\x8er\xcd\x15'\x18\x1at\xf3\x96\x86\x16\xban\xb1\xdc\xcf\xba\xddAr.y\xe5-W\xc5{\xc0\x9d\xd0\x05\xd6~2\xf4\xdf\xbb\xbe\xe7\xc4a\xfe\x80|iN\xe9!\xbb\xeaHN_g\xce\xe8\x0c\xd8\x13\xd6Y\x1f\xc8\xdcQ+\xd7y\x89\xf8\xc4S\xee)\xe5\xca\x138tJZj\xe8\x8ezc\x138\xed@n2\xf2\xc6&\x0d\xf8\xd1K=\x8c\xbd\xb5\xdf\xf9\x82\xe6g\xc4\x84/\xe9\x97L\xc4P\xb6\xd9\xd4\xeb\xc5\xed\x90\xdb\xdb+r \xc4+\x88\x88eT\x8f\\\xf3\x9bE6\x83\xdaG \x8ej\x83\xa7\x95\x98s\x1a\x96\xe0P\x13\x07\x93\x8bX'n\x9e\xbe^8i\xa7XQ\xba\xbf+\x1dLzr\x13\xbe\xe7\x92\xa7\x1a-\xb5\xe2\xb8\xb5U,,N\x88D[\x94T/`\xeat\x93a\xd6\xcb\xcf\xe6T\xa0\xe0\x85\xb9\xd5l\xd2\xf8p\xe5\xb3\xe5\x89J\xe2x\x7fq\xd1\"\x9bW\x9a1\xc1x\x8e\xa37\x91\xed\xbc_'\xa9\xb7\xd8W\xe3L\x8d}\xaa7\xfei\xce\xd0\xa2\xf4\xfaQ\xdbH.\xa6,3uD\x8f\xd1\x81\x1e\x03'\xf2,\xfdEs\x18\xb5\xce\xd9\x95\x8c\xa5\xa7O\xf3\x13\xa6g\xc2\x13\xa8T\xb1\xc0\x1fO\xe8\x11\x12-\xcc\xd1\"\x8c\x91 aI\xb5\x93\x8e\x9a\x88Dm5\xdb\x11G\xc8\xb5\xbcG\x01\x07r\xeb \xec<\x0e\xd3\xfc\x87\x8e\x91t\xbc`\xe1\x05^\x8a:\xd94n\xc7g\xc4%\xcf\xc9\xf1\x14\xcd{\x12\xb8\x04x\xb1\xf7i\x9d\x15\xff/\x0e\xbe\xe6\xf3b\x1aF\xe5\x9e\x039;\x0c\xd8{\xb1y\xa6\xa9\xf6\xf3S.\xa0\xff\xfb\xbf*\xf2\x07\xb4_\xc4\xb6\x8f\x92N\xd5\xb0C\x1a\x02\xf7\xa0\xf3R\xf4\xa3\x91\xae\xe3\x80t\x1a\xea\xf9\xbf\xff\xfd_\xcf\xccO\x14\xec\xe7&\xa5N\x93W\xc3\x9c\x02I7\xfb%\x0eq\xa2\xd9\x8e\x83\xa2\xb4\xda\xac)\x87dj\xf3g\x19#\x14<\x85g~\xf5\x83\xe0ED,\xdd!\xf2!K\xcc\xb1\x17<\xa0\xf8`\xe9/\x9a\x17\x86P\xba\x15 H1\xcbc\xb5\x9d\x95y8\xba\xab\xda\xdd \xcc\x93 u\xb8\xe1\x05\xdc\x92\xb2\x06\x9d\x81O\xcf3\xa7\x83\xce\xfaU\xb7\xba\x8b\xea\xeb\xdf$\xc7\xcf6(N\xbc0\xd0\xa2\xd8^\xfa\xf6\x81\xdc\xaa\xa8\x83K\xe4\xb3\xe9?\x9a\xea\x8f?|\x94$\xf6\x12==\x82:u\xde#\xe5&\x06\xfcn\x0f\xf9@\xd8\xcc\\\xa0E>q\xd8\xb4\xcb\xc5\xf4\x82\xc6\xfe\xdd\xf56\xc4\x8bE-\xcbY)\x9dmTb\xde\xc9\x171Mt\\m\x97\xba(\xfbS\x8b\xdb\x8fv\x9d~\x11\xf6\xb2\x8bN\xba\x9ay\x1a\xb4\x9d\xb5&\xaf'\xf5\xc8\x83\x9a\xec\x19A\x93?6h&\xfcH\xbc\x8c\xed\xbd|\x05\x9as\x89\xec\x18\x05\xe9s_e8a\n\x9d\xa7A\xf6WK|\xd1\xc5\xad~\xa9\x19\x8e\xee\x9f\xae\x97\xd8s\x8c\xdc\x7fU\xef\x9b\x08\xc2\xcc\xe5p\xb8En=[uM\x8e\x90y?\x00s\xb9\xc9b\x9aer\xd7\x9fx\x04\xdf&\xc7\x0e\x1c\x84\xd9Sa\x8b\x81> \x97_e\x01i\x12\xb9\n\x0b\x0e|u\xf6:]\x85\xb1\xf7\x88\xe8\xeb\xd8\x13z\xb4\xab\xb8T\x07=\xe5\xa7?y\xe1$\xf5\x16\x89\x86\x05\x0e\xed4\xff\xb6\x0cm>p/\x9e\xa1\xdf,\x0f\x0b\x0fc\xf8\xc8e\x86-w\xaa\x80\xfe\xd9\x1f\x8fu\xd4\x03\x92[T9\xc7Q\xcb\xb8D\xa7\x0d\x9f\xe4\x8aZ\xc0\xb8\xe8\xff\xc7\x0fN4\x83r\x1f\xbcxU\x15\xd7\xb13\xadv\xb8\x03\xe2\x0c\x07l\x0b\x18\xe4\xa4\xf9_F\xdd\x95Y\xec\"\xf3\x98\xb5\x83\xb9\x18P\x0e\x0e\xca\xa2\xd3\\3\x0f\x95s\xce}\x98\xb8\xf7Y\xf6B~w\x8ef\xcc\xa8V\x06-\x0f\x80\x13}E\xcf\xfe\xb4\x89-\xbc\xf5\x0bO*\x05\xeb\xa1\x9e\xfd\xa1X\xcf\xd7i\x1a\x06\xec\xdb}\xc2u\x9a\x0d.\xbc\x02\x0bx\xd7\x0b66\xf6\xdc\x03\xbfVIV\xf6\x03\xeat\xfbI\xc7\x98\xc0O\xdb\x0e\x03\xffu\x81\xb83Fe\xd0{\xc4\xc4\x9b\xa7\x18\xac\xea\x1e:\x7f\xbc\xa7\xcc\xd9\xca\x13\xbb\x8ba\xf6\xa7\xb3\x8e\xf1\x8f\xae\x9d\xda\xe7\x9eo/\xd1\xcbd\xb3\xfcy\xe7\xe3\xc9\xdcN\xd0\xa0\x7f\xf6\xdb\xaf7\xbdo\xfb\x8b\xfe\xfc\xcbn\xed<\xea\x9e\xfd\xeb\x9d\xee\\\x86\x9bw\xa6k\xba{\xcb\x9c\xed\xad\x8d\xe3;\x9b\xd9\xfdt;{5~t}\xc7\xbb\xfe\xf5[\xf4\xedw\xf7\xd5\xdc\\\x8e\xaf\xef\xa7\xcb\xd9\xab\xe9\xbe\xf8{\xfd\xf3\xf5\xab\xe9\xf2\xfar\xb7\xfd\xfa\xfb]x\xfd\xe6v|\xfd\xa0\xeff\xfb\xbe>\xfb\xb8\\\xde\xec\xfb\xfd\x9b\x8f\xf8\xfe\xdd\xfd\xb59\xfb\xa0\xafg\xf7_\xfb\xef\xee\x9d\xed\xfb\xfa\xe7\x07\xf3\xfd\xab\xe9\xf6\xfaU\x7f\x7f\xb3\xef\xefo\xee\x97\xeb\xd9\xbd\xb3\xcf0\xb3\x0f\xf9s\xeb\xe6\x1e'\xef>\xce\xd6\xef?N\xfb\xd7\x97\xb3\xf5\xfb\xcb\x9b\xfbw\x1fj|\x9aa\x9b\x9f\x1f\xcc\xf7\x1f\xa6\xdb\xf9+\xfd\xf1\xdd\xfd\xc3\xf6}\xfe\xdf\xe5\xe3\xd7}V\x9f\x93\xbe\xbb\xbf\xee\xdd\xd4?\x17u\xbc\xfb\x90\xd5\xf1\x90=\xdb\xe5|\xef\x97\xeb\x9b\xc7\xa9U\xfd\xfc\xfe\xa3\xd3\xbf\xbe\xbc\x98\xcd>N\x97\xb3\x8f\xaf\x93\xb2m\xe9l\xdf\xdf\xdd\\\xbe\x1e\\{\xa3\x9f\x7f+\xf4\xf4\xf3O\x9d<\xaf[\x9c\xfc*b\xceN\x10j1\x8a\x90\x9d\x92\xf3ZqS\x9f{#\x84<\xa3\xd9SK|f0\x95(\xa8Y\xb9G\x11\xb2\xe3,Z(F\xa4\xfcEm\xecC\xe6w\xc0\xdd\xff\xe9\xafq\xeaE\x18\xfd\xabJ\xfeZ\xd4\xc15\x0b\xf4V\x80\xd1\x9f\xde]\xe9\xbd\x07.\x89\xd8\xcbg\xd8\xa3\xee\x94 8\x19#\x9d\xbd\xe0\xa5\x94\xdd}\xea\x99\xa4\xfch\xe1?\xb3%\xf5/\xc8\xb7=\xfc\xaf3A\xe9\xc2\xc3HX\x18\xd9I\xb2\x0dcW\x08H\x90\x1d;+aq\xb6\x1e\xa3\x0b\xb3'v\x8clRE:\x91l\xa2\x1dh\xc4\x0c\x8f\xc4\x86\xa1;\xce\xfe\xb4\x0d\x8f\x8b\x85\x9a\x15\xff\xf3\xd5\xd5\xbct&\xdf\x8a\x91\x1b\xbb\xeaO\xd2V\xb4\x81\xea\xd6\xb4\x01\xcbV\xb5\xc1\xf2\xd6\x81\xa0\xaa\x95\x7f\xca0\x00d\x8ar6\x07C\x7fq6\xd6_\x00Y\xb6:\xa5k\xba?jF\xb4\xcbF]0\xe5K\x96\xff\xbb\xa7\xbf8\x1b\xb5\xf2\xeb\xc9\xd9U\xc5\xff6\xf5\x17g\x96\xfe\xe2l\xd8\xcaQ\xeb\xb7HX\x95\xff\xbb\xaf\xbf8\x1b\xb4\xf2kaWs#3k\xff\xab\xd1g\xd1(8\x1403\x07y|\xbc\xd9\x9a\xeaQ\xb7\xe8\xf9\xd5\x137l\x92\x01u\xcb\xbb(\x8e:-\x00\xccMUK\x8aw|\x1d\xf8\xd0\x17\xb8\x1fU\x0f\x11\xce:\xe6\x0f%\x13[r\xe4d\xc2\x9c\xd5\x88QN\"P\xc0\xb3\x9f\xd9rV\xc8y\x98\x87\xbb\x03\x19\xf5\x97+Y`mD\xeez\x08\x1eW*\xd5\xb3?peOx\xfd\x86\x80aD\x1dD\xef\xeb:\xf1\xd1\x8d\xc2\x0e\xe4y\xb9J\xf3,HU\x8bP\xba\xae\x16\x85\x98L\xaag\xff\xaa\x9b\xca/\xa5\xa5t?\xe7\x8a\xfa{\xb7xC\x8f\xf0\x8dJt.K#\xf7\xcb\xf27/Tn7 \xcf\x91\x8f\xca\xedn2\x0ef\xcf|\xd0[Q\x8c\xff\xa1Q\xf6G\xf4\xb2$=_\x02T i!\x97\x08\"\xde\xf1\x90\xf7\x83\xfa\xa7\x13U\xd7\xfe\xca_\x85WFKk;\xcf\x7fB.e0^Y\xf9\x1a\xf8/\xc0\"\xd8Y\xd9q\x82\xd2_\xd6\xe9B\x1b\x9d\xbd0_%\x9be'\xb7\xe0/?\x18\xfa\x0f\x9d\xc2\x82\xbf\xfc0\xfa\xa1\xb3\xf1\xd0\xf6\"\xdc\xfd\xf2\x83\xd9\x19v\x0c\xbd3\xfa\xa1\xb3\xf3q\x90\xfc\xf2\xc3*M\xa3\xf3\x97/\xb7\xdbmwkv\xc3x\xf9\xb2\xa7\xebzV\xc7\x0f/\xcc\xab\x17\xe6\xab\xc8NW\x9d\x85\x87\xf1/?\xbc\xe8\x99}\xa3?\xec_\xfd\x90?\xd0\xe25F\xbf\xfc\x806(\x08]\xf7\x87\x8e\xfb\xcb\x0f\xb3A\xd74\xcd\x8ea\xbd3;\x86\xd1\x1d\x0c\x86\xd8\xc8\x9eh\xd9\xbf\xfdN\xaf\xd3{W<\xce\xc40;\xa3\xac\xec\xf1\x87\x97EMY\xa5/\xcc\xab\xbf\xfc\xd4\xb1\xf4\x17\xcdZ\x93\xd6\xa8\xeb\xd98\\j\xeb\x1d\xf35\x9d \xf9\xa2U\xea\x1e\x8b^\x1dV\xaa^\x03,`\xd8\xe9f\xbaw\xe30\x02\xb8K\x19\x8an\xc1\x8c~\x12V\xe5\x87\xae\x8d\xa9z\xea-m\xae!\xd4\xfe63)\x16\xbf\x9a\xe5\xdcP\x7f\xf3\xc3\xe2\x86\xe2\x937\xf8\xf9\x05JuY\xafm\x81\"\xc8\x07\xe8\xd1\xaeS\x9c\x9c\x92\xbe\x04Z\x8ckUj\xb5\xb1&;\x06g\xf5\xc90\x82O*J\xd8\xd2\x17U\x80{6U\x9e\x9c\x9fk\x95V\xb8\xd2\xba\xe9K>#f\x81=h\x16\xd8O8\x9a\x04\xd5\xff\x94\xd7\xce\xd5\xb1J\xaf8/':*[:\x16\xe96'\x9d\xffQmM\xa7\xeb\xe00AZ\xfe\xf8\x88\x94\xfc\xf3e\x9bd\xc2\xad\xc8\x0f\x83\xf7\xd8c?\x03\xf2\x0d^\x8d\xe8\\\x1eN\xb4Ir\x82[\xf8\xa1+O\xef\x98\xfa\x91g\xea\x85\xb5t\xba\xc4}\xd9$\xb2\x99\x1b\x11<&u\xabc\xb9\xb6\x9e\xfd\x11\x9d\xcc\xe5(\xff\x9e\xba\xcc\x8dK\xf5w\x0f\xe5\xcc\xb44\\.1b\x8fh\xc1\x81\xd7@\x14x\x95\xa6\xccF\xa9N\xd7D\xbe\xc2\xebo\xb8\xe1]\xf8*`u\xe4\xa9\x08\xe8C\x0e$\x03~**\xcf\xf1\x8cu\x17-\x81\xf3=\xe5s\x8eN\x0bc/\xcf\xa6\xe9/\xb2(a\"*\x10\x1b\xaa\xeb\x84\x18\xdbQ\x82\\\xf1\xa9#\x81P\xf9c1\xe7\xf2\xac\x1et\x02\x8d\xdd\xc0\x12\\\xa1=*\xd2k\x0f\xe0\xaa`\xb0\xd7o\x82\xc1\xec\xe7:\x1a\xcc\x83\xea~\xa7\xd7'c\xbd,\x8c3\xf4\xce\xe0\xdd\xa8k\x8d;\xc3n\xdf\xe8\x18f\xd7\x18v\x8c\x1e\xd6\xfa]k\xd4\xe9w\xad\xf1;C\xef\x18#<\xd0\x06m\xf1\x1b\xb7W\x90\x05/\x90\x16\xef\xd7~\xa4\xa5a\xfe60`\xe1\";\x01\xc43\x10\xbfz\x8a:;\xa8u\xfb\\g\x03-\\\xdc\x87\x97\x1f\xe3$\xa0\xd5\xbb\xa5\x8aG+/H\x0f\xc4!\xbb\xfcG\xf6cc\x04T \xab\xd1\x1d!\x7f\xc2\x9f\xe3\xab\x86\xff\xae\x81\xfcN~\x14\x08\xf8\x1eo9<\xaa\x04od\xb85\x84\x1c\x9e\xb8D\x95\xad\xfb\x99\xc3F\xe5\xc9\xb2\x02\x9a\xd4W0ub\xf2\x97\xbdR\x9a\x97M\xc2\xbdz\xc1)1{\xeb\xfc\x0b\x0f`\x9a,\x96b\"7Qh\"\x7f\xef5\xcd\x9e \xd1\x9e\xe5-\x86'\x85Ap\xb2\xe8Y\xdf\x13.\x0f\"\x06:w\xbc\x86S\xd5\x13_\xa3\x0d\xf0;\xe9\xcd\xde\x1c\x9f\xe3\xde_\xce\x92[\xac\x07\x90\xddEo\xdd\xf6\x02\x0e\x0b05\xa8\x0d\x99\xf9\xeaQ\xda\x17*F\xc0e\x97\xfa\x82\xc3Q\x1f\x1c\x02\xde\xc6\xa7>\xd8\xb0\xdf\xeej\x91\xb5\xc5F\xc3\xe3\x98\xd1Q \xf1\xda\x90\xa3\xb8\xe4\xa7\x83\x18&\xad#\x12\xc7\xa6|\x90\x08\x0cLM\x0b\xa3\xfa\nVf\xab\xe6\x15;\x96B\x85\xf3pw\x90\x1e\xdai`T\xc2\x19\x8ca\x95\xcd\xcc\xbe\xcc\xa7\xae\xe4\x08\xb7\xe6Ni\xd5L\xba\xd0\x0b\x87,\xf1\xa4\xce\xf4Ty\xcf\xb4\xf4\xec\x0f\xc4\xac\xa9U\xdb\xdaq\xe0\x05K\x903\xb7|\xab^\xdcR\xddn\x17\x1fV\xe4_Q\x97\x8du\x7f\xcf\xfe)\xa7\xe5\xee<\xb6\x1d\xa4\xe5\xabZjF\x84\xceBEq\x18i\x81\xed\xb3\x87\xb8\xa9\x15I#\x1d@\x9c\xfbx\xa5\x18\xcb\x06\x10(X\xfb\xb2\x0b\x8f9(\x0b\xb1\xed\xf4 \x9e4\xba \x8a7(\x16\\\x1f{\xb6\x0bYd%\xa2\xebW\xf47f@\x06\x9dU\xbf[\x9d%\xaf\xee\x1e\x94\x01E\x8fUcE\x92\xdas\x8c:i\xf55\x16So\x01\xba\"\x9b\xd5\xd2eQ \xf8\x85\xdb u\x1f\x82H\x82i\xc4\x9dNy\xe5\xf0\xeb\xfaKWik\xa3\xdb\xe1^\x0eE\x1c|\x87I\xbbN\xe8G\xeb\xack\xadc\\\x0f\xcd\xfc\x91~\x10_\x1cC\x07\xf5E\x9c\xaa\x9d\x88&l\xce\xf5\x978\x9c\xdbX+\xea\xfa\x8f\xbe%*\x90\xb4\xd6S9\x00\x92g\x9c{\xd50$~=S\xf5\xaa/\xc0\xdd\xcb1C\xe0\xed\xb9\x03@/\xc3\xa12nZ\xb5>?\xaf~\xe0\x99\x94\xc3]\x9a\x9fLJ\xe3\xac?\xd4\xbcX\xafg?\xd6,`\xc0\xf8tu\"\xa5O\xbe\xe2\xab\xd8\x84\x82ZU\xde\xefN2IZ\x12dp\xa7|j\xda\xac\xec\\\x80B\xaa7\xb7)\xe9E\xa2\x91fl\xe9Q{\x0f\x03\xe2\xe6 \xf0V\x9f\x92m\xfe\xea\xc6\x9c\xed\x99\xact\xd5vz\x8cI%\x13\xd7b\xf2c\xf2\x8a\xeb\xb7\x9e\xda\xa9Bf\xae\xaa\xbe\x8c\x93\xb0/\x93\xe0\xce\x02\xc1\x1f\xd52\xf9\x17>Ix\xd2\x97\xcdJ\x86B\xfa?\xfe\xc8grI\xc4\xd1\xd7O\x99\x14\x99\n\xba1\xfa\xef\xb5\x17W\xaf\xc7\x11\x0d\x12\"*\xf86+\x1c\xe0i\x03\xfasCM\xca\xac\xe2\xf6\x97R\xf0\xf2e\xd0V1\n\x0e\xd8o\xae6\xb2\xa0]\x8a\x82\xc4\x0b\x99l2\x81\xf0\x14^\x9csLW\xe5?\xccBT&|m\xfe\x13+\x8d\x91+V\x81\x1f\xa5\xfb?66^\xa3?\xf8\xc4\xb5ID\x03\xe5\xda\x91\x8b\x0e\xb8\x17\x0cJ\xb9\x97\x93=\x15L\x0e\x8f\xe2\xd0\xad\xee%5\xc1<\xffjH\x8c\x80\xab\xee\xfc\xa6^\x1aFs\x9b\xfeb\x0dpE\xa7|s\x0eDZ\xfd\x17~\xcd`\x89\xb1O\xdb%{r\xbe\x07\x14\x98:U\x95\xe7\x06\xd9!U%WB\x8eb\xf9^3\xbbIR\x1c\xb9\x90\xaf_\xd8cD\x95\x84E\xca\x06\xd8\xcc\xe2#\xd1\xca\n\xf5+J\xd61\xae_\xd3\xf7d\xad\xe7m5\x9b\xd6\x9b\x93\xea \x01\xca/r\xa2\xc0e\xaevfO\xd8{\x9dy)\n\\\xf56\xb4\xcc$\xa5\x86\xf8seV\x7f\xb8\x80\xbeJV]h\x12\xdf*\x91\x8b\xd3-f!\xed\xf4\xb3WOw\xeb 8\x99\x0e\xa8\xe3p\xa76\xa9\xbcgG\xcf\x9aJ\x1d\x82\xf6\xd2<\xc0\x92\xbf\x19\xf2\x18\xa1\x8a\xa9\x9f\x93\xa3\xd7\xc8\xd1\x9b\x94\xff!\x94#t\x0b\xea\x04$\xb0\xee(\xcf\x0dR\xbf\x1f#<\xf5\xb4\xbc\xd5$\x89D\xc88\xae_\x1e\xf2\x90\x9c\xe1$\xae\xd5Q\x8b\xa8\xb2qG\x0e:^\xb0\x08\xeb;\x1d\xc0K(\xb3\xf2\xce*\xbf\xee\xd7\xf5m/`\x97urt\x87=\xc4\n\xc0\xb1w\xc6?\x8c\x80g\xc5z\x89\xe0w\xda+\x0f\x0b\x19\x0d\xa0\x02\xf6\xf3\xc8\xc5C\x13z\xd8\x87\x1eZ\xc7\xbf9\xa0\xa0,\xdenU\xad\x8f\x8b\xdbb\xea\xe9C\xdd:\xf2\xa4.\xf4\xee\xf7\\\x0e\x9b\xd5\xeeQ\x1b\x11-\xb6\x80\xae\xc9\x16\xb5\xd2\xef\xbc3\x16\x83\xb1\x03xay7\x9f\xdc\x9f\x02\x98u\xe7v\x824\xe0\xe80\xa9\x0b\x93:\xdbZ\xcf#G)Qh\xcc.\x9bF5\x07O{w/\xc1\x95\xff2\xaad\xc1`\xb5\x1c\xae(\xd6\xef\xe4\xcb\x9d{\xc5\xc0\xc2.\x8d\x93u\xc4\x1dd\xb5\x86\xcc\x01\xb7\xa1;\xea\x8f!\xf3\x92\x92\xe7\xaf\xdbST\x057T\xd9\xebt\xa5\xcd\xd3\xe0i\x01\x0e\xbd6\x7f\x8e\x17U\xc8\xa5,\xeeK\xbba\x80\x0e\xf2\x14rN\xf8\xa4\xa6)M\xd4\xcf\x1a\xbb\x912w\x88\xd7\x040)\xd0&4\xd1\x9a\x97\xe3\x01\x9c\xc0\xe4\xa1\xc1\xdeo(\xd2\x89-\xa7\xe6d\xdc\xe1M)a\x1dl8E3#v\xcd\xcbc\xffV\xb4\x13\x1d\xb7bH\xeb\x8f\x8e\xf3\xc1\xbe\x94\xae\xf5&\x9a\x84\xa0\x08\xa3\xd9\x1b\x90R)Q\x1c\x87q\xc2\x0e\xa8\xd4\x06\x18?Y=y0M\x9c0BIg\xd5{\xfa\x94\x9f\xb3\xd2\\\xb4\x90\x1f\x8b(\x1b\xaa1V\xe9\xc1\x0eXu$\xe2\x92\x9acc\xf4)b^\x80E>\xe5C\xd2\xea\xfaZ\xebd/\xf9&\x15-v\xf9;\xdb\nx\xd3\x0b$e\x8fl\x08\xdf=\x7f\x92]\x05U&\xc4\x8b\x9f\xc0M/\x86\xae\x882\x9f>P\x9e\xb4\x06S\x90\x8c\xd6a\x8f\xba\xac\xa44P+\xb99t\xc7\xb1\xf0\xb7\x03x9\xad\xbc\x971\x02\xeej\x8c~\x9a4\xaf\xc6\x02\xdfAV\x00\x0d\x9e\xd6hH\x0d\xfav\xe0\xff\xb4,\x94\x9d\xee\xf2kaq\xb7\no\x9aTZ\xe5\x1d\xf9J\xef\xff\xbc\xfc\xdb_;I\xb8\x8e\x1d4\xb3\xa3\xc8\x0b\x96\x9f\xee\xde\xfd\xd20\xea:I\xd2\xf5\xed\xe8o/\xff\x7f\x01\x00\x00\xff\xffPK\x07\x08_;\x94/\xe8Y\x00\x00\xa8X\x02\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]w\xdc6\x927~\xefOQ\xab\x8b\x91<\xa3\xb4bgf\xf6<\xda\xf5\x9eu\xec8\xd1\xacck\xfd\xb2\xfb\x99\xe3\x1a=9CYF\x9a\xb2\xe6\x0f\x00\xacp-\xfe\x01@\x9b\xcd\x06U\xbbsx.\x9f\x80\n\xd7MUR@E\x01\xf5\x1a\x03\xfe\x9c\xd3:/W\xa0x\xc87{b\x1f\xbf\xcf\xcb\x0c\x9f\x83h\xfb+\xba\xb8\x81\xafg\x7f\xfc\xe6X>K\xb6\xb8\xe2\x82_,\xf6-\xc9\xdf*L\xb7\xa4\xa4\x98*\x91\x00\x8e\x9f~\xfd\xf5\xf1\xfe\x7f\x07m=\x07\xdad\x19\xa6t\xd9\x14\xed\xdb\xb3\xce\xd34[\xe3\x0d\xea\xbe\x0fP\xef\xb6\xf8\x1c\xc8\xfc\x7fpV\xf7~\xd8VL\xb8:\xef\xb6/\xa8\xaf\xb3. f\xa8\xaa\xd0\xee\xe0\xb7\xbc\xc6\x1b\xcd+\x16 \x04\x99\xe5\xd8\xbf~\xd5T\x85\xfeW\xc5\x9e\xd6U^\xae\x0c\x8f\xf4\xb4\xf8o_\x19\x9e\x02x\x0e\x1f\xdf\xbd>\xab0%M\x95a(\xd1\x06C\xbdF54e\xfes\x83\x8b\x1d\xe4\x0b\\\xd6\xf92\xc7\x94\x9b\x08k\x1b\xc8\xd2\xc8\x90=Cq\x95\xa3\"\xff\x1b^<2>\xb7\xadHM2R\xc0\xbcY.q\x05\x1bL)Z\xe1\x19|X\xe7T\xf6\x0d6\x0d\xad!#e\xcd\x06\x06\xd2\xa9RP\x81\x11\xad\xcdm\x91\x12\xc3\xd1\xd9\x11dkT\xa1\xac\xc6\x15k\x05C\x81h\x0d\x14\xaf6\xb8\xac\x81,\xb9\xe8\x1f\xdf\xbd>\xa6\xc0\x06\x98\x91\x1b\x17\xaa\xc2\xdb\nS\\ZZe\xec\x96MQ\xec\xe0\xe7\x06\x15L\x83\x0b\xa1_\xd9\x14\xd7\xe4 \xa2\x90\x97f&\xd7L\x94\xb3\x15!\xab\x02\xcf\xb8\xce\xe6\xcdr\xf6\xb2\x11C\xec\xfa\xb1\xe8 gK\xd7\xa4)\x160\xc7\xc0]\x8d\x9e\x10d\xa8$e\x9e\xa1\x02\x96\xa4\xda\x98[>\xc1\xb3\xd5\xec\x94\xa9v\xc1>\xc5\xd1\xec\x08r\n%\xa9\xd9`\xc1\xdb\x1a/\x1e\xcf\x1e\x99_\xbf(a\xcb\x94\x9dg\xf8\x14j\x8c6\x14\x1a\xda \xa6\x8em\x853\xb2\xd9\xe6\x05\x93\xb4&\\\x19\xf3\xbcD\xd5\xe1\x08S\xc4\x1d\xd4n\xcbm\x10\xd5\xec\x8d\x9d\xb9i\xfcy\x8b\xb3\x1a\xf2\x1aj\x02\x0de\xad\xf06\x98!\xe1\xcf\xfcS?/w3\xf8\x81|\xc2\xb7\xb8:e\x8a02\xfb\xf8\xee5\x85O\xeb<[sV\xf5\x1a\x9b\x1b\xe6\xce\x08\xc3\xf5\xba\xae\xb7\xd7\xa7\xe2\xbf\xf4\xfa\x14H\x05%\x91\xbf\x9erk\xccP \x84\x8fN\xa6\x113C\\C\xb3\x05\xc4\xfbni\x17W\xb7\xb8\x12\xaa\xd9\xa0-\x15\xa6\xc5%\xaf\x89\x1aY\xb0\xc0\xcb\xbc\xccY\x9b\x14\x1052[\x92\xa2 \x9f\xe8\xb9\xe5\xdb\xfe\x1e.\x96\xfb\x1e1\xb3\xd8V\xe46_\xe0E\xdbi\xf6GDi\xb3\xc1\x8b\x99\x8d\xd1\xf3\x12~\xf8\xf0\xe1\x12\xbe\xff\xee\x03\x90R\x0dA1\xc6v9.\x16\x80\x8co\xffu8,>\xec\xb6\xf8\xa7\xbf\xfed|\x01\xe0\x16\x15\x0d\xb7\x07ao|\x08\xa0\x9a\x7f\xa1mE\x16M\x86\x01\x95\x80\xab\x8aT3\x9b\xd4\xfb\xe9\x99\x02\xaa0\xb3O\xf2 /\x98\xba3\x941\xdfB\xc8M\xb3eSVS\xd4\x14\xe6\x88\xe2\x85\xc5?q\xbb2\xfd\xcc\x8d\x90\xcb\xb8F\xb7\xdc\x047\x9d1\xb4\x10\x83\x08\xa9.\xb1\x7f\xdf\x92|\x01\xa84\x1b\x16H\x01\xb9\xfb\xa8\xf0\x92T\xf8T1`|Q\x9d\xcf\xf3\"\xafwPb\xbc\xe0f4\xc7\xc0]^uk\xe9 \xefK\xb6F\xe5\n\xf3\x97\xf8\x98\x9d\xc1\xc9G\x8aU\x14\xc3\xb4\xc4\xcc\x93\xf9,a\x9f\xa8D+[\xef\xe7\x15F7\xcc\x07I\xc6\xb3\xc7f\x8bzCj|\x0e5\x9bC\x96M\x99\x89\x11\xc6\xfa!}W\xd6T\x15.\xebb\x07\xe8\x16\xe5\x05\x9a\x17Vw\xc9\xec\x91,\x97y\x96\xa3\xc21\x97\xcd\x9b%T\x98\xcdD\xf8\x14P\xb9`\xfeG6\xdaP\xbc`\xa6\xb6\x1f\x97FVs\xbc\xca\xcb\x92u\xf6S^\xaf-\x93\xcbn\x8bg\xc2\xfe\xd16\xa7\xb3\x8cll\xde\xf8=\x1f\xa9\x14H\xbd\x16\x8e\xa2\x1cz)8a\xf2\xb1\x18p\xb3\xadwrh?6O\x82\xf9j]\xc3\xdc\xe2\x94x\xa7Y' \xdfl\x0b\xcc&Y>`\x80nq\x96/\xf3\x0c(\xde\xa0\xb2\xce3\xaa\x1fj|\xac\x8e\x08\x81\xc4\xd8>\x87\xf9\xae6Y\x97o\x94\xf4#sGs\x0c\x88 \x95/:\x01\xceA\x1c#'w4'\xb7f\x9b\x96*\x90CA\xd7}\x1f\xc9\xae\x9f\x97\xbbk\x15\x1eQ\xe6\xb8P5\xcf\xeb\x8a\x0db\xb3\x84ZVj\x8e@\x05\x91\xa6\x07H\xffi\x99w\xe6\x13\x8d\x90p\xde\x0f\x0b\x07\xe1_\x1b\xd5\x19L\xf3R\x0d\x9c\"\x9fs\xb1\xe5\xec\x89\x97\xffd\x9fP\x81\x9a\xef\xa4\xdd+\xe3P\xe3@8\xf0\xa5\xcc\xa7\xf1W\xce\x9e\xeb\x07\xe3\xbb\xcb\x172\x16<\xcc \xe8a\xd6\xf6!\x19\xd0\x9a\xa1\xd3\x12\x9aR@!x!R\xdaw\x89\xa0\xf2\x06L\xf0\xa9\xd6\xb62\xb2\xd0\xa4\xf7\xc4\x0byY\xe3\x95&W\xa5,1/\xebo\x9e\x0e~\x95\xbe?H\x86\x05\xaeQ^$\xd87\xc1\xbe \xf6\x15\x94`_N \xf6=\xa4\x04\xfb&\xd8\xd7D \xf6M\xb0/\xa7\x04\xfb&\xd87\xc1\xbe \xf6\x15\x94`\xdf\x04\xfb&\xd87\xc1\xbe&J\xb0o\x82}\x13\xec\x9b`\xdf\x0eM\x01\xc1%\xd8\x97S\x82}\x7f-\xb0\xef\x16Uh\x83k\\u\xa0\x83\xaf\xb8\xe7\xed\xe2\xb4\xb3\x1b\xdc\x9d\x05m\x10\xa7\xc44\x91t\xa1b# O*I\x98M\x02E-\x00\xcaSA\xabA\xce\x84#\x9al\xd8\xbb@\xcd\xb7l\xc2#%_+\x92\xe5\x92\xe2\x9a-\xbf\xfa\xe2B'\x95Mq\xddu\x8ayy.\xda\xea\xfc\xad\xc2?7y\x85\x17\xe7\xb0DE\x0f\xc43$ \xb4\x89\x01\x8d\x12\x85|&=\x0e\x16\xe5\xb23\\\x95e\xb3\xc1U\x9e\xa9\xbf\xf1\xd1\x96\xa1\x92\xf5GdE\xd6\xb8T\x8ao\xca6\x115\x08?/8\xb7\x02S\xbaW\xa1H\xdd4\x94\xa9\xfa\x06\x07\xea\xb3\xcf\xfe\x8e\x95;\x80\x885\xea-\xf2M\xee\xab]\xfe\xac\x82WM\xc8\xb1HRv-X\x82\xb1M1\x00/EJ\xa2\xfb\xa7\x8b%\x14xY+\xa4]B\xef*h\xe4\xf9U1@D#L\xcf\xf3\x1d`\x94\xad\x01m\xb7\xf7\xa8\xc5.\xfe\xbd\x7f\xdf\xa6\xcb\xce\x1bL\xa3\xdcB \xd4U\x83\x81\xfd#/\x17y\x86j\xdc\"-R\x83\xfcAiH]vy\x99\x15\xcdb\x10\x12\"\xd1J\x0bu\x0d\xbe\x18\x07N;\x19X\xe6\xba{\xe5$=f\x1f/\xe8\xe0k\x0d\xba\xc0\xa3\xe8\nS q\xf3\xe1\xb5\x1f\x8fl\xc8\xcd\xe4h\xcaW%\xa9\x06\xf9k5\x1a\xfbM\x08\xcd\x8c\xfd\xb0sB\n\x8cJ\xdb\x07\xac\xf0-\xaez\xaf\xda>\x9e|z\xf8\xe1\xf2N\xfdD\x85\xf5#\xa1\xc7\x87\xb5\x81K\x8e\xec\x91j\x81\xaba\x02\xcbQs0\x856j\xb4\xeaMb\xff)\xb9Y\xf7\xb2\x9f\xfd\x82\x16\x8b\nS\xfaw\xe7\xae\xf6\xfd\xa6v\xf9\xff\x12\xe3\x17`\x0c\x10\x1e\x820V\xea#\xeb6\xac?R={\xd8\xfb\xd5Mu\x0bQ\x15W\xb5\xb5\xfc\xc0\x99y\xf7I]O^x\xe0Wv\x10St`/.\x88*-\xe0M\x18\x18:\x0b\x0b&(+\x88,*0B\xb1~%\x05\xa3\n\n\xa2\xca \x00\x15\x85I\x8b~\xc5\x041\xa5\x046\x80\xcf\xab\x90`\xe22\x02\xaf\"\x82 K\x08\x9c\x05\x04\x13\x95\x0f\x8c)\x1e\x08.\x1d\x98\xa0p`\xe2\xb2\x01G\xd1\xc0\xe4%\x03wS00y\xb9\x80\x7f\xb1@\\\xa9\x80E\xe9\xaeB\x81\xc9\xca\x04\xfc\x8a\x044Y\n\xb3\x7f\x9d\xb8@\xc0U\x1e0\xb28\xc0R\x1a\xe0\x0cO\x9ce\x01~\xf1\xcb\xb4%\x01\xae\x82\x00\xb7Lq\xc5\x00\xca\xb3k\x18\xbaJ\x01&,\x04\x18Q\x06\xa0/\xde\xb1\x15\x01L[\x02`/\x00\x98\x02\xfe\xf7\xc2\xaf\x1d\xd0\xbf7\xf0o\xc6\xe8\xc2A\x7f3/m>|\x12\xb8?DY\xbeP\xbf['\xde0\x7f\x04\xc8\xaf\xc7\x0e&\x02\xf8\xbd\xe0}7\xb8\xef\x03\xed[\xb5\x18\n\xeb\xfb\x82\xfa&H\x7f\x02@?\x00\xce\x8f\x07\xf3-\x90\xb9/\x90?1\x8co\x91Hk\xa9Q\x00\xbe\xca\xbbj\xf8\x19\xe0\xfb\x89\xc1{3t\x1f\x0b\xdc\xf3\x8c\x80Np=l?-hoZ\xf89\x01{\x13\xa2h\x02\xeb\xa7\x85\xea\xe3\x81z\x03(\x1f\x05\xc9;\xe1\xf70\xf0\xdd\x1bz\x0f\x04\xdeC`w#\xe8n\x96\xc6\x17\xfc\xf4\x03\xdc\x03\xe1\xf6\x00\xb0]\xdb\xb5i\x81v\xd3\xa0\x18\x01\xb2k\xf3\x14F\x88=\x0e`\xb7\x81\xe9\xd3C\xe9\xe3-\xc9\x1bF\xf7\x05\xd1\xfbS\xa4\xff\xf6\xce\x88\xdd\x9d\x03n\xdd\xcd\x9d\xfb\xf6\xd3\xae\xcd\x1e\xa5]\x9b.\xa3\xdc\xd3\xc4\xe0\x89/|\x12\x07\xa0\x18\x99\xa5]\x9bi\xd7\xe6\x9eb\xa0\x16#\xb3\xb4k\xf3\x90&\x82]\xc6\x01/\x11\xd0\xcb$\xe0\xcb\xe4\xf0\x8b\x13\x80\xb9\x03\x08\xe6\xae@\x98;\x80aB\x80\x98X(\xc6\xea\xc3]`\xcc\x84p\x8c/ \x13\x08\xc9L\x0e\xca\xb8a\x99\xd1\xc0L\xda\xb5\xe9\x94,\x0e\xa8\xd1\xb2J\xbb6c \x1b\x17h3\x0dl\xe3\x89E8\xa1\x9b\x00\xf0\xc6\xb9{.\x10\xc0I\xbb6\xd3\xaeM\x1fh\xc7\xa9\xd5Px\xc7\x1f\xe0I\xbb6\x0741\xdc\x93vmv)\x16\xfc\xd12K\xbb6\x03\xa0\xa01`\x90\x96]\xda\xb5\xa9}\xc1\x0b>J\xbb6\xa7\x03\x93\xd2\xae\xcd\xd1P\xd346\xe7\x0d7\xf9\x03N~\xbb6\xe5&\x94\x0e\x8f\xde*R\xfe\xdc;yW\xfd\xad&\xf2(\xd9e?\xf1\x95\xf3C{{\x9eo\xbf5\xa7\xae\x1a\xc7\x06\xb4\xb0\x8d9B\x96\xab\xf9\xee*_\x9c\xfd\x92/\xdc\x1bs\x9e\x8bW\xbe\xdd]\xbc<\xd8\xa3\xa3\xba\xb6\xdf\xa3#\x7f\x10\x9b\xc7T/=\xee\xa1\xfc\xf3\xec\xa9\xed&\xca\x8e\x10\x8f\x94\x8a\x1e\xf6\x1e\x9f+\xa9\x9b\x00\x84,LM\x92\x99\xe1\x00\xdf.$\xdaQ\x9e\x13\x1d\x1d\xb0\xd1\xd9\xc06\x93\xa1U\xfblBG\x07\xbf&t\xd4/\xbb\x06 \x1dM\xe8\xa8\xf1\xc9\x84\x8erJ\xe8\xe8!%t4\xa1\xa3&J\xe8hBG9%t4\xa1\xa3 \x1dM\xe8\xa8\xa0\x84\x8e&t4\xa1\xa3 \x1d5QBG\x13:\x9a\xd0\xd1\x84\x8evh\n\xa4*\xa1\xa3\x9c\x12:\xfa[@G\xf3\xae\xc3\xb6\x9dc\x9b/\x14\x02\xd5G\x0c\xdb\xc5\xeb\x1e3\x9dc\x0e\x9b\xe6x!3\xf3\xcb\x83\x89A\xe6\x9dynj\x8e13Vy\x16'\x9c\x14\xf9\x0dO\x8e\x0d\x1a\xa2\x8fE\x8aD\xda\\\x8f]\xb3]\xf0\xd5WM\x14\x17f,\xb0l\xea\xa6j\x93H\xad\xa4M\xbd\x16\xb8\xee\x84\x98.\xf4\xf1\xa5\xf6L\xd1 \xacw\x8e\xb3\xf57O\xcd\xf8\xee\xb7\xfc\xf7\xcb\n/\xf3\xcfR\xc5\x14\xe6\x9d?\xca\x17|`I-v\xfb\xed!\xaf\x07\x8b\xda\x8a~_m\xb9\xb0\x01\xb8\x9d=K\xd2\xd5\x80\x13z\xed\x7f\x90j\x9b\x0d\x98\x05]8\xfa\xe7\xf6\xa1\x04\xce\x1e\xe81\x81\xb3>\xc9=H\xe0l\x02g\x8dO&p\x96S\x02g\x0f)\x81\xb3 \x9c5Q\x02g\x138\xcb)\x81\xb3 \x9cM\xe0l\x02g\x05%p6\x81\xb3 \x9cM\xe0\xac\x89\x128\x9b\xc0\xd9\x04\xce&p\xb6CS\x00e \x9c\xe5\x94\xc0\xd9_\x0b8\x1b\x01\x10\xb6w\xb4]\xb1\x95\xb0\xf5\xa66\xb5\x0b\xb0\xc6\xf4\x03y/\x06rF\xca[\\\xd5\xb4\xbd\xc7\xed\xb9\xda\x13\xca\x1ec_\xaf\xb7\n\x8f\x06\x13u\x8d\xcb\xe7\x1e,\xa8\xa8\x14+4\x10\x008\xd9\x97\xf7:U8\xd1E=\x0f\xf9\x11\xf7{:\x13\xbc\xd8}!\xc1\x8b\x86\xdf\x13\xbc\xd8\xa1\x04/&xqO ^\xac\x13\xbc\xa8\xa7\x04/*J\xf0b\x82\x17\x13\xbc\xe8\x19%%x\xb1\xa5\x04/v)\xc1\x8b ^\xd4P\x82\x17\xb5\xcf$x1\xc1\x8b\x06J\xf0b\x82\x17\x13\xbc\x98\xe0\xc5\x0eM\x01\xf5$x\x91S\x82\x17\x7f-\xf0\xa2\xc7\xc9\xb8\x02E\xecp\x9ap+dg-=\n\xe8\x14\x0d\xb8\x91N\x81\x8e} \x1ci\xeb \x9d\x12\xe1\x94\xbe\xa6&\xd0\xed\xf3X\x84\xb3\xd7\xa8|\xee\xc1#\x9c\\\x01A\x90\x97%C\xe2\x85~\xf6\xd4\xe4D?{\x98\xe9\x80a\x02?\xf5/$\xf0\xd3\xf0{\x02?;\x94\xc0\xcf\x04~\xee)\x81\x9fu\x02?\xf5\x94\xc0OE \xfcL\xe0g\x02?=\xa3\xa4\x04~\xb6\x94\xc0\xcf.%\xf03\x81\x9f\x1aJ\xe0\xa7\xf6\x99\x04~&\xf0\xd3@ \xfcL\xe0g\x02?\x13\xf8\xd9\xa1)\x80\xa8\x04~rJ\xe0\xe7o \xfc\xc3\xa1\x143/m\x96a\x12\x10%DY\xbe\x00\x8a['\xde\xe0I\x04t\xa2\xcf\xc8L\x04\x9bx\x81&n\xc8\xc4\x070\xb1j1\x14,\xf1\x85JL@\xc9\x040I\x00H\x12\x0f\x91X\x80\x08_xdbp\xc4\"\x91\xd6R\xa3`\x11\x05\x81h\xf8\x19@\x91\x89!\x113 \x12\x0b\x87\xf0\x8c\x80Np=\x182-\x14bZ\xf89a\x10S\x9e\xd6\x04\x81L\x0b\x80\xc4\xc3\x1f\x06\xa8#\n\xe8p\x82\x1aa\x90\x867\xa0\x11\x08g\x84\x80\x19F(\xc3,\x8doJ\xd9\x0f\xc6\x08\x041\x02 \x0cm\xd7\xa6\x85/L\x83b\x04t\xa1\xcdS\x18\x81\x8b8\xd8\xc2\x06QL\x0fP\x8c\xb7$op\xc2\x17\x9a\x18\xb7\x81F\xc0\x01\x13\xed\xa2\x91\x88Ew+\xcd^\xae\xb4G\xa6Gi\x8f\x8c\xcbX\xf741\xa8\xe2\x0b\xab\xc4\x01+Ffi\x8fL\xda#\xb3\xa7\x18\x08\xc6\xc8,\xed\x919\xa4\x89\xe0\x98q\x80L\x04$3 (39,\xe3\x04f\xee\x00\x9a\xb9+p\xe6\x0e\xe0\x99\x10\x80&\x16\xa2\xb1\xfap\x17H3!L\xe3\x0b\xd4\x04B5\x93\x835n\xb8f4`\x93\xf6\xc88%\x8b\x03p\xb4\xac\xd2\x1e\x99\x18(\xc7\x05\xe6L\x03\xe7xb\x14NH'\x00\xd4q\xeeU\x08\x04v\xd2\x1e\x99\xb4G\xc6\x07\xf2qj5\x14\xf6\xf1\x07~\xd2\x1e\x99\x01M\x0c\x03\xa5=2]\x8a\x05\x85\xb4\xcc\xd2\x1e\x99\x00\x88h\x0cH\xa4e\x97\xf6\xc8h_\xf0\x82\x95\xd2\x1e\x99\xe9@\xa6\xb4Gf4\x045\x8d\xcdy\xc3P\xfe@\x94\xdf%C\x9dM*\xf0\x85\xaf\x16\xe2bYn\x14\xba\xe4\xbf\xc3\xcf\x0d\xaer,n\x12\xda\xf7Dy\xbd\xde\xce\x9a\xe7M\xbd\x16o=R\xb2?\xd0\x0d5\xdd\xbew\xa9'\x8cxH\xe4`\xe5$\xb5W\x80\x9a\x83\xc4f\xa3\xc3I\xc0(\x148\xc1\xa4\x0d\xfa|\xb5\xc1\x1br\xd5b\x1f\x16\xcc\xc9\xab\n\xb6\xc9\xcb\xfa\xcf\x7f\xd4\x9e|z\xf8\xe1\xf2N\x18Ya\xfdH\xe8\xf1am\xe0\x92\xd7\x93\x91j\x81\xab\xe1\x82P{}\xf97\x93jcd\x02\xe5l\xbe\xbb\xea\xac\xcdu\x99\x14\x19^\x1a\xb3(*o\xc2V\x89\xfe\x99\x14\xc9\xf5\x91\xea\xf3\xc3\xce\xa2\x98B\xbd\xa8%\xa9%\x17\xe2\x08\xb7ly\x10\xeb\xab\xee\x1c\xc8\x94\x19\x90\x89\xf3\x1f\xe6\xecGX\xee\xc3cI&\xad\xd2k9&\x17`}CV\x94Nb\x93\x94\xd6^i\xed\xe5\x0c\xd5\x94|\xdc\xd1\x98\xa4\xe3?*\xd92\xe1\xae\xd8_\xbc\xc4\x0b\x9dd{\x02\x06\xcd\xb1\\\xa8+\xf2\xa9\xc4\x15=\xfb\x85\xff\x9f\x05\xa6\xe8\xb8\xa1\x97\xec\xd1\xb7\xfc\xbdv\xae\xe5\xd3iQ\xb4\xf7N\xc9O\xa2\xea\xc69\x94\xc6\xbex\x9dg\x1c n;\xc1\xdc\xf7\xdecv\x1d\xb8\xd2LO\xb7\xc7\xdaH\xe5\xcf\xc7\xf2\xd9\xde\xcc\xdd\x91S\xfe\xfc`g\xef\xee\xb7x\x18\x1eC~\xc0\x11C\xde=\x95\x0bR\xa3\xb7\x9bsoG\xb44\x1e\xaa\xb7\x9e!\xe9\xcc\xa7O\xc60I\x90Ci\xe0\xa18p\x81H\xe0\xa7>\x17\x98\x04~l|\xbf\xc2\x94a\x95\xa0\xa8\xe0\xca\xc8M\x82\xd86\x80 \x82\x03-A>*\xda\xfb\x92VI\xb4\xae\x9a\x8c5\xb5\x07\xf4\xf9\x81\xc6e\xeb\x04\x99\xf5j\xb9q\x8b&\x95\xc4\xe8\x0d\x05\xbf{{\xdf\x7f\x00\x0e\xc0\xdc\xe0\x92/p{\x95,\xb2M\xdbX\x16\x9fN>g\x1b\x1d\xfb\xd2\x9ca\xb3\x86\xcf\xadw\xca\x83G\x13\x0e\xc7)\xe1p\xfb\x9f|\x95\x99p8\x1e\xc9u\x02\x9av\xe1\xd7\x1d!l-\xd7\xae\x00y\xc6\xe30\x04R\xc4\x9e\xe5vq8\xa6\x1d\xa39\xad\x0e\x07\xbf\xa6\xd5\xe1\x17^\x1dZW_\x83\xa1#\x96^\xddQ\xb2_\x91\xa9\xe9\xa4]\x98uW0ln\x1e\x0e\x9b\xbbZN&(\xcf\xbd\xb6\x85\x04\xe5I\xbac\xe5\xbaA\xa8\x04\xe5M\xa1\xc5\x04\xe5%(\xef7\x00\xe5\xf1\x99\x96^mp\x8d\x16\xa8F\xe6\x0c\xe3\xff\x0e2\x8c\xf4G\xf9J\x0f\xd0\xcb\n\xeeM\x15\xbb6\xf1X\xe1UNk\xcc\xd6\xfbl\x82oYu'z\xfd ]\xfd\xc6\xe4\x13\x0f6S\xa8:\xfe@B\xc7\xae\x0e\xb4\x0fx\xc4\x7f\"\xf9\xd9\x94y\xedH7\xea\xbb&\xc8\xd8AA\x1e\x89=wg\x059\x93{\x1e]V\xe4\x93z\xea>\xcdb\xd96\xdb$\x06\x84h\xa5w\xc0\xcd*\xbf\xc5\xe6\xa3\x15\xba\xbc\x98\xd2\xf9\x813\xd0\xa0\x9al\x1e\xeb\x93\xa6\x82\xf0\xe7-)\xb1=!\xe9ZFu\xa9\xb3\xa42\xac\xed\x15\x85iI\xc9\xd9U\xd4\x96|\x12\xf3\xd7\x93\xaf\xf7\xbf\x8b\xe4ri\xce9\n\xda4\xb6#\x8e\x04U(\x97{ \xe7\x88\xe2\xab\x16\xef\xc9K\xe1\xa4\xd9\xbf\xf1\xcf\x0d*\xac9NA\xfc\xeb \xaf\xf4\xb1\xcc\xebc*\xd7;\x8e\xd7\x9e\xc8O\xfa\x0c\x9e|\xfd\xff\xb5}\xdc\x8b\xe3z\x9f\x1f;\xa42\xbe\x9d^\x90\xa5\xb0\x8d\xfd\xf99Y\x85Y\x94a>\x1fFP\xdb\x03\xc6\xe2\x98\xb18v\x9c\xad!\xa8\x95\xfd\x19\xfc\xf9\x14\xeauC\xcf\xe1 \xb0\xf7E\xdf\xfe\xeca\xab\xa8\xc8\x11\xb5\x0fc\x1f\xa7\"\xc8\xe1Z\x04y\x0fyW\xc2J\x91\xec\x82X\x97\x149\xe5j\x94\x83]\xfd\xa6\x00~\xef\x01o|\xc6/+ \xbd\xcf\xda\x19_Hf\xc3\x87'T \xa7h\xbd\x85x#\xadE\x0e\xa4\x93Q\xfeM\x1d;G\xd7\xe4S \xa4\x04\xfcY\x1e$e\xe4\xc6{\xf7\xfc\xc3\xdb\x1f\x1f\xcb\xf3\x083\xd3.o\x10\x89\x10n\x19|\xa7\xbe\x10@~n\xeb\x91L\xae\x05\xd2\x9e\x9a*\xff\x02*\xfc\xf8\xeeB\xe4)\x16$k\xf8\x99\x88'\x84\xc5\x0dl%\xfcU\xb6Fy\xf9Xf\xa2$\xe0g\xe4\xd4\xd9\xfa\x9e\x97\"\xbeb\x0bUx\xbb\x15\x7f\x0dV\xcb\x10\xc3\x13\xd4T\xf9\xd5\x1a\xd1\xf5\x97\xd1\xcd\x0f\x88\xae\xc5,H\xd7\xe8\xe9\x9f\xfe\x0c\xaci\x01o\xb4\n\xdb\x12\x16qr\xa8\xf7\xe3\xbb\x0bsdp\xc1\xbc|#\xf13qH\xad@i\x8dop\xa3R\xcd,\xf2Ey\\\xcb\xe3\xd0&V\xab\x8fwlW\xc4\xee\xa9W\xfb>\xb2\xcf\xaa\xee\x8f\xd2.\xbb\xdb\xf3\xa2:k\xf2\x8e\xc9\xb5\xcbr}\xb8\xdbY\xacsQ\xd2\x9e\xcd\x84\x15\xf3\x87\x13V<)V\xdcf\xb5\xbc\xea\x84ul\xce\x06\xa9\xb8\xb4s3\xe1\xc3\xda\xdf\x1f\x12>\x9c\xe0\xd40\xac*\xc1\xa9w\xa8\\7\x10\x98\xe0\xd4)\xb4\x98\xe0\xd4\x04\xa7\xfe\xf6\xe0T\xf7\xc6\x8d\x00,\x95\xaf\xa9\xf7YNm9\xfd!t\xfa\x8f\x86\x9c\x9ab\xaa\xa8\x15\xa0\x13\xfftD7N\xec\xd3\x05RX\xc1 G\xdc\x07\xce\xee r\"\x9e\x1e!\x1c8\x97-\xc3g\x03\xb0N\x07\xb8\x01\xfcPP_\xa4\xd3\x07\xe7\xb4/\x06\xf6\xe4\x8bq\x86hfZ|\xd3\x8dn\x06a\x9bN\xbc\x07B\x91\xcdq\xb8\xe6\xc4\xa8f\x1c\xa69\x1e\xd1\xf4\xc03]\x8eB\x90\x07\x96\xe99\x98]\xc9\x14A\xd3\xa2\x98\xb6a\xee\x97+\x9b\x18\xbf\x8cG/]\xea\x8bA.\xad\xc2\x1apK3j\xe9\xb4\x03?\xa75-^\xe9\x87VZ\xb1\xca\xb0~\x19-iB\x94\xd2\x17\xa34#\x94a}\nB'\xa7\xc6&m\xc8dX7\x8c&\x17\x85Ir\xe9\x0d\x0c=\x11\xc9\x18<\xd2\xb9\xbePd\xc4\"'R\xdaT(d<\x06\xe9\x0d\x95\xd9\xf1\xc7\xe9\xf41\x1d\xf2\x18\x8a;\x8eC\x1d=\x15\xe9\xf6s\xe3\xf0F\x0b\xda\xe8\x0b`L\x84_$\xf8\"\xc1\x17\xff8\xf0\xc50\xca\xed\x99\x9f\x08+,\x87\x8b\xb0\xbfw\xab\xe3\x87\x99\xbb\x11\x1b\xd6\x82\x12U\x81Wi\xd7\x077I\x7f\xe6\xfc\x06\x97I\x0f\x8e\xe6*o\xfe\xb1\xef\xd6\x1e\x91y\xa2\xb8\\\\\xe1\x12\xcd\x0b\xbc\xb0M\x84\xbf\x86\xd4\x91\xb5\x9b\x82t\x89\xd5!\xf9M\xfc\x00\xefq\xb9\xf8N4)\xae\xf5\xec\x8f3\xd4\xd3=\xd0\x1a\xd5\x8d\xa5\xa4\xed\xd3\x1a\xf3\xcb\xffP;v\xcd\xd9\x02\xc6\x98q5\xd5`zu\xe0%\x9b\xac\xd9\x92dq\x0e\x1f\xc5N\xf0n\x8f\xf2R\xdd\xe2\x9eSX\xb4\xcf\x1a/\xa3zE*~7\x1b\xcd\xe9i{eN\x89?\x15;\x16\xeb1\x05t\xb5!\x0f\xf9\xb0]\xac)\x99I\xe32\xb6\xfb\xbe&\x15\xbf\x01F\xdc\x98)\xeev\xdc\xa02\xdf6\x85Xp\xf3\xc5GN{\x85G\xb9\xe9K\x94\xe4\x93B\xc2n0\xde\x1ef\xfa\xf7\xf4\x9c\xfb\x9f~\xf8\xf4\xcf\xa7\xa2-\x0e\xb1\xe0\xcf9\xad\xc5\xa2{\x8e\xb2\x9bO\xa8Z\x98\x9a\xed_\xeaI\x96m\xef\x97y\x81\xb5\xab<\x19\x80\\\xf9\x0ep\x93\xcd\xf7\x8c\xe5\xd2zo\xbf\xca\xc0h\x1c\xae\x86\x97>^\x1b\\\xb4\xdem\xe90Zkar\xe1\xe4u\xde\x92K\x96\xc2\xb2\x14\x96}\xc9\xb0,(\xc29\x1c\xa0\xba8\xa7\xebz\xbb\xa7\xa5u\xff\x8e\xcb\x9a\xfd]\xd9\xa9i\xb4\xf1\xfc\x83\x88\xf2$\xd2[7UI\xfb{\x1c\xc5\xba\x8c_X\xdc^\xf8\xdai\xabeFq]\xe7\xe5\xaa\x8b(?/w\x83\x83\x11\xf8\x12\x8f`q\x9b.\xe7\x89\xba\xd7\xc8r\x0e\xa2B@\xdd\xd1\xadx\xc9\xf1\xbag.\xe6\x9c\x99\xce\xbb \xd7\xce\xd9\xb0v\xba\x88\xed|'\xdc\xee\xc1Q%\xda5\xee?\xcb\x9f{Q\xe2a\xe7\x1fl\x98hw\xf9\xf71H\xad\xf1\x9bs\x8c9\xe26W\xcc\xe6\x13\xeeL\x16\xaby\xc7i\xc6\x18-\x15-sr\xa7\x95 \x15-KJE\xcb\x8a\xf8L\xdb\x19\xcc\x9e\x07\\\xed\xdf\x18\xf0\x0b9\xdb\xea\x9f\xdb\x87R\x949\xf85E\x99w\x10e:\x93\x7f\xc6\x83\x8f\x07\xc3F<\xac\\h\x1b\x98\xc9?\xefH\x03\x9fPY\xf3\x0544\xdb\x19\xbc\xc6,\x84\x13\xce\xaf&,\\\xed\xb1CE1\x0cE!\xb2\xc2m\xf8\x915\x9f\xd7\xa0\xbb\x8c\x14\x05\xe6\x17\xc4\xbf\x92\x9a\xdb4E\x9d\x1f(*\x15y\x87U\xd0\xa6\"\xef;T\xae\xbb<9\x15yO\xa1\xc5T\xe4\x9d\x8a\xbc\x7f\x03E\xdet+\xd7\x98W!7 w\xe6\xba\xf7\x8a\x81\xf6ja\xc6\x9e[\xa2\xf3\x8e\xe1\x96\xe1\xe0\x86\x1c\x8fr\"\xfd\x99\xfc\x07\x82\xc9\x87\x1elJ&\xddN,\xc9'\x193\xed!\xf2Q\x07\xc8?\x90\xdb\x89\xdb\x11\x9c\xee)\xeeSJ\x1f\x0d\x1fN\xe9\xa3\xc9\xd2G\xc3\xc9E\x9bDZ\xf5\xb2H\xed-\x0e\x03\x86]\x94r\xd8\x91\xfd\x15\x0f\xc7T3\xd2=\xb3N\xe9D\xf5\x94uz(Y\xa7\x91\xf7mif\xbbi+\xcfR\xda'vM\x9d\xd2>w\xa8\\w\xc2\"\xa5}\xa6\xd0bJ\xfb\xa4\xb4\xcfo!\xed\xd3l\xb7\xc5\xce\x9c\xe0\xf9\xc0l\xe1=\x7f\xa8\x97\xcf\x116\"\xde\xee\xe5r\xb4U\xd3\x1d.\x8fT\x97\x1eh\xf2\xa5\xab\x90.\xddGH\x97R/\x0f'\xf5\"\x17\xb5\xd2\xe2U\xca\xa5\xb5\xff6\xc52x\xd1;\xc3\xa2M;D\xa4]4\\\x9c>GPJ\xd0t)%h\xfe\x01\x124\xa6\x8e\xf0)\xaf3\xe9\xc4\xef\xe5\xeb\xce\x7f\xc6\x9d|\xed\x1fSV\xe5@?)\xab\xf2E\xb3*)W\x11\xb6\x10L\xb9\x8a;T\xae{\x95\x9dr\x15Sh1\xe5*R\xae\xe27\x93\xab8\x9b\xef\xae:\x0bc\xed\xfe'\xfe\xe0\xdbe\xbf\x02e\x9f\xab\x90\x95&|\xc1\xa6\xcdW(\x06\x8fT\x9f\x1eh\xb2\xc2\xb4\xc4\x1f\xb1\x94\xb3\xe4\x1c\x1c\xd1\x8a-\xdf`}\xd5\x9dk\x982\xd30q\x9e\xc1\x9ce\x08\xcb1\xf8`\xcd\xd2*\xbdV3r\xfd2\xb0dE\xef._\xa4SH -^\x1e\xd6\xe2e\xdc)$6\x1c8t\x96\xea\xf5\xca=IQ|V\xe3r\x81\xabM^\xd6\xed|\x85\xe6Y~\xc5[6OU\x9d\x91\xfe\xfc\xdb\x17\x17\x9cu\xc7\xd3\x89\x9e\xadQ\xb9(p%Ovk\xb6[R\xd5\x94?\xdf\xcep\x8b\xbc\xc2Y]\xf0\x84V\xcb\x91\x03\xe7\xdbm\xc1b\xb9\x9c\x94\xa70\xdfm\x11\xe5\x0b\x87\x0f\xad\xb8\xfc\xb8\x80\x02\xd7\x98-\xcd\x98[l\xf9\xee\x06'u\xcaS\xb8D\x18\x9c/\xb8\xb3\x95\xd2\xe0\x05\x87\xdaOe$\xc8\x8fZ\xdcnO\xa5\xdb<\x85\xedSq\x98B\xcb\x8b\xd6\xa4\xc2\xa3K;[\x95\xc9\x1f\x1f\xecD=\xd25\x1d\xe4\xf1\n\xa298\xce2 \xf3rI\x02_X\xe0\xcfAo\xd8\x05\xd6&\x87\xbd\xb8i\x92\xc2\x06\xb7\x14\xcbn[\x11\xb2\xbc\"[\xa3\xd7\x8e\n\xa4\xb4\xfc\xc01\x13\x80m6\x00\x97@\x82\\\xb3\x02(6\xc6_\xbd|\xbb\xe1\x9b\xee\xc9\x8b\x87G\xf2\x9f\x91\xfe\x10\xed=M\xd7\x96;\x18\x15t\xc9\x8c\xe6\xedv\xef\xab\xcb\xbdk\x12\x19\x1e\x16\x88e\xa8\xc8\xf8\xd11\xe5\n~\xc4\xd5\xcd\xc1\x9e\xd1=U\x84\xd4\xc2\x01\xf3c\xb4\xb2\xc3lM\x97\xe6\x18P5\xcf\xeb\nU;\xd9\xadS\x107d\xf1\xe3\xaa1\xa58c\xbf\xa93\xb9\x8c\x9c\xf0g\xc4\xfc?\x948_\xad\xe7\xa4\xa9\xf8\xfbd\xb8\x9a\xef\xd2\x1a\xd1\xb5\xed\x02\xb27\xa4\xc6\xe7\xe2\xe8\x08\x1e\x92\xf2\x84\xd8\xa2\x11\x13Q{\x80\xa7\xd2 \x0f\x86\xf9\x83\xe6\xcf/Q\x80\xdcr3\xdf~Fs\xd4Mk?\xaa\x14\x86\xd7\x9b\x89\x0f%\xdcB\xdb\xf4\\\x80A\xea \\\xf5\xbca\x8d\x11\xa2\x00j\xd7\x80\xbd\xef\xe6^\xaf\xd9\xf74\xae\x0d#\\8\x9b\xc3\xe8\x16e!\x9e\xd7\xae\xf8v\xfa\xb6\x1f\xe1\xd3\xd6\xcb\xb6k\x9b\xe1\xbc\xafh\xa5\x81hx$s\xf8\x99\xfc>\x91\x12L\xc4e\xc6\xefd\xfeF\xba\xef\x93\x16Z\x83_\xd3B\xcb5R\xf6\xf4\x1c>\xbe{}VaJ\x9a*\x93'\"\xf3uAS\xe6?7\xb8\xd8A\xbe\xc0e\x9d/\xdbJ\x1df\xdd\xc4\x04\xd3\x8aE\x02\xc5U\x8e\x8a\xfco\xd82\xe3p\xe3\xcfH\x01\xf3f\xb9\xc4\x95\xfah\xf2\x88b\xd17\xbe`\xd8\xaf\x13L\x11\n@\x81\x91\xed\x0e\x00Rb8:;\x82l\x8d*\x94\xd5\xb8\x12\x13c\x81h\x0d\x14\xaf\xf8\x11\xb5r\x84~|\xf7\xfa\x98\x0e\xeb|\xfb\xc4\x85j\x8f\x935\xb7\xca\xd8-\x9b\x82W:\xa1\x82ip\xd1?q\x9ai\xf2\x04Q\xeb4t\xcdD9[\x11\xb2*\xf0\x8c\xebl\xde,g/\x1b\x11\x19\\?\x16=\xe1l\xf7\x08\x97\xe1zg\x10YtT\x922\xcfP\xc1\xc7\x90\xb9e~\xef\xc0)S-\x0f\x01\x8efG\xcc\xa9\x95\xa4\x06\x94ex[\xe3\xc5c\xdb\xa4}Q\xc2\x96);\xcf\xf0)\xd4\x18mh{r\xf5\xb6\xc2l\x91\x98\x17LR\xe6\x01\xd7\x18\xe6y\x89\x0e\xfc\xef\x9e\xf8\xb6\xa3\xdd\x16\xd3\x16B\xd8\x99\x9b\x16\xbe\x0er\x9e\xcbn(V\xb0\x0d3$\xfc\x99\x7f\xea\xe7\xe5n\x06?\x90O\xf8\x16W\xa7\xd6x\xe6\xe3\xbb\xd7T\xe6\xf0\xd4\x01Q\xc6g\xb9\x07\xc5p\xbd\xae\xeb\xed\xf5\xa9\xf8/\xbd>\x05RAI\xe4\xaf\xfb\xeb\x1a\x08\x1f\x9dL#f\x86\xb8\x86f\x0bHL\x12\x96\xc7\xaa[\xb5\x9e\xe7'\x08q\xd3\xe2\x92\xd7D\x8d,1\xab\xf0\x83\xad) \xf3i\x8fKR\x14\xe4\x13=\xb7|\xdb\xdf\xc3\xc5r\xdf#f\x16\xf22\xd5E\xdbi>\x01R\xdal,\xc722F\xcfK\xf8\xe1\xc3\x87K\xf8\xfe\xbb\x0f@J5\x04\xc5\x18\xdb\xf1L\xaa\xf9:\x8b\xbf\x0e\x87\xc5\x87\xdd\x16\xff\xf4\xd7\x9f\x8c/\x80*\x05)\xa5\xbd\xb5\xa1.\xa9X\x17\x16M\x86Y\xe4\xcd\xa70]!\x8d\xa0\xdf\xc3\xf3}\x16D\xa0#\x88\xe9L\x94\x04e(c\xbe\x85\x9f\xf8\xd8\"(sD\x07\x10Q\x97\x88\xed\xacI\x10F\xc8e\xe4\xe7\x97\xd5k\xbc\xe9\x8c\xa1\x85\x18DHu\x89\xfd\xfb\x96\xf0|\x8a\xd9\xb0@\n\xc8\xddG\x85\x97\xa4\xc2\xa7\x8aA\xff\xbc\xc7\x12\xe3\x85\xc2A\xb9\xcb\xabn-=\xe1}Q\xc7\xd1\xcb\xe0\x86\xce\xe0\xe4#\xc5p\x8b+\x9a\x13\x16\xd7p\xf3d>K\xd8'*\xd1\xca\xd6\xfby\x85\xd1\x0d\xf3A\x92\xf1\xec\xb1k\xad\xc0\x0f\\[6e&F\x18\xeb\x87\xf4]YSU\xbcn\xa0[tdv\x97\xcc\x1e G\xca\xcd\xb5Fr.\x9b7K\xa80\x9b\x89\xb08\x0dN\xa0\xcb\xac\xd1v\xfd\xd6\x8eK#+^\x07Q\x8a3\xe9l\x97\xb20N3a\xffh\x9b\xd3YF6\xd6;\x9c\xf9H\xa5\xa2\xeeI \xfe\x03/\x05'2\x18\x16p\xb5\x18\xda\x8f\xcd\x93 [\x0d\xc0\xdc\xe2\x94DYB^w\xb0\x0f\xb1\x9a\xed\x9c\xbe\xb7Ae\x9dg\x86\xdb\xec\xef [<$\xdf(\xe9G\xe6\x8e\xd8\x1aY\xa6*\xf7\x01\xceA\x1c#'w4'\xb7f\x9b\x96*\x90CA\xd7}\x1f\xc9\xae\x9f\x97\xbb\xeb\xf62\x03\x0eT\xb5kx\xb3\x84ZVj\x8e@\x05\x91\xa6\x07H\xffi\x99w\x1e\\1\xd3 \x0b\x07\xe1_\x1b\xd5\x19L\xf3R\x0d\x9c\"\x9fs\xb1\xdbK\xb9e\"\x98\xf9\x87-\xcan\xce\x9a\x92\xfd\x87\x9f\xef\xc8\xedB?\x82\xe4Do\x0el\xc8\x12\x9aZ86\xe5\x1e(s\xac\x9d+\x1fV\xb8\xc4\x15\xaa\xb9\xf0\xf5\x9a,\xa8\xec\x96\x96\x1f\x93G|B}{\xdf\xc9l\xc8\x93s\xb8d\xf23\xbf \xbb\x82Z\xa5\xe7%\xbc\xf8\xc3\x1f,\xd3\xe4+B`I\x08<\x83\xd9l\xf6/\xc6\xc7\x980\xa8\xdc\x99\x1f@\xe5n\xc6\xc4xU\x91\xcd\xc9\x92\x90\xc7\xe6Gg3\xf3\xfc\x97/\xe1\x84\xb1\xfa\xc8;\xf2\x81\x9c\xfc\x8e\xf1z\x0c\xbfX|\xb8\x8d\xdf\xdf\xed\xba{\xea\xd0\xdd_\xd0-\x9aLy\xf0\x8c\xc7\x86\xac\x95 4\x94\xd3\x93W\x84\xcc\xb2\x02Q\xeaP\x90\x10\x91\xbd$\xfa\xd8y\xd1,\x83As\xad\xea\xbeq\xa8\xeerW\xafIiQ\x9e\x90\xea\x15!'\xb3\xd9\xcc<\x1b\xb4\x8a;\xb1>\xc3\x8d\x8f\xab5V\xab\x8c\xc9\x85P\xea\xcb\xef\xde\xbfxwq\xf9\xe1\xed\xbb\xc7\xb6T\xee\xdeP\xed\x0d\x8b\xa6\xed\xea\xfc\xa3C\x9d\xdf\x13\xb3&\xb9*\xcf\x9f\xc1\xef\xb6\xf3\xd9+B~\x99\xcdf\x7f7?\x8c\xca\xdd)\x0bC\xd9\x1b[\x11D\xfd\x88*\xbaF\x05S\xb2\xbd#6\x15\x0e\xa5\xb0\x88\x90/\x07\x02|,7{\x11\xb8\x80|\x80\xf0\xa7\xfe\xe9\x19\x94ya5p\xbb\\\x06K\xfe\xc0\xb7'd7\xad/V\x0b\x0d\x98\xef\xf6a\x97\x9a=D\xed\xbc>\xeaUuw\x0d5\xc4,\xc7\x9a\x90\xea\x8c\xad\xdfg\xfc\x07\x16\xae\x1e\xab;\x91T\x1c\xc7-\xc147\x08\x0b\xd17\xd6N-e\xb1kO\xa4\x1f&\x0b\xda0\x19\xd0\xb2\xc6\xba\xa2rA<\x8fq|v\xacoJ\xce\x89Jd\xbe\xdam\xb3\xf4GKBfsT\xf1\xce~>\xdb\xcd\xfev$\xb4\xc8\xd7^Z~\xe6\xa5(\x17\xf5\x88\xf1`\xd3\xa1\xf6\x91\xbf\xbc\x7f\xfbF\xff\xcb\xb3g\xcf\x9e\x99m\x80\xbd\xb7\xcf\xb9\x888\x920w \x83 \xb1\xaekh\x9b\xeb]5\x05\xaa\xf4\xfc\x0e\xd9\xb0W\x16x\x1f\xb6\x9c\x02\xde\xcc1\xbf\x19@\x8e\xeeS\x11\x8e\xeb\xd8\x99.\xd3\xea\x84\x14\xa2$\xe8\xfa\xdf\x99\xea\xaee2\xa1\x0d\xdb\xba\x1fG?@\xa4\xfb9\xb7,@Pv\xc3|\xd0~A\xbc\xcc\x0bl\x9e7\x94\xcf\xba\xc4\x15%\xa5u\xd8\xcaL\xdc2\xafh}\xc5\xbf\xf03xb\xe6\xdc\xbe\xc0\x8cR=\xff4|\x06\x03\xb0Ju\xc4uyt\x0eG\xbaQ\xdbW\xc3L\xf4\xf2\xe8\xd4\xc6\x8f\xf7\xef\x0d\xda0\x9e\xff*\xba\xf0o\xd6\x17X\xff\x06\xcf\x87v\xf2b)\x17\\}[k\x01\x84O\xb8(\xbe\xba)\xc9'Q\x88\xb6F\x14\x90m\x87\x9ayp\xf5M\xfeT\x04\xf0\x83q\xb0\xdfx$\xc5a\x06l\xda\x0b(LZ\xdf\xd85\x1f\x8c\xca\xce\xd7\xa4Xtk\xde\xc4P\xce\xcbv|\x80\xc8\x00\xeaY\x89!\xa3o\x87\x8b0k'\xe7\x13\xe6\xd7\x94\n\x0fRC*c\xfa\xd3_\x7fzl\x19HS\xd8\\\xbfA\xbb\xd9qU1\x96OfO\x9f<\xa5G\x16\x13\x12\xff\xb5\xd6;\xed\xaf\xb0\x86)\n\x95\xc0\xbd\xb1\xa1\xe7\x13'hPq\x16h\xe3\xb4\xbcMpd\xdb\x9b\xaa\xbfd\x8fi\xd2^\x8e\xfc\x1eW\xb7y\x86=j\xbd\xe6\x05\xc9n\xe8Y\x81jL%\xb2\xa7+\xf7\xfa\x1e\xd7\xaf\xf9#\xdf\xb2\xe7\xdb\xdb\x148\xb2\xcc\xff\x0e\x9c\x91\xb6(\xb9\xff\xee#\xd5\xbf\x07Z\xf1\xc4\xfbq\x95\x1b\xef\x14\x88\xaa\xa9\x19q\x03\xa3#\xb9\xb4EU}Eq}\xb5\xc6h\x815p(\xb8$\x07\xa7\xf4\x8c,;;\xc1\x89\xa1*\xb2\xa1\xf4\x8a\xcc\xaa\x02\x1fu\x81[e\xed\xf6\xcbKT\xd5\x14\xd7?p\xcd\x1d~n\xf1\x107\xda\x8b\x97:+\xd1\x98\x88\xbc\x00\xb6{\xad\xd4\x96gjy\xec}M\x177W\xfc\xd5k\xc8KZc\xb48\xbc\xf6u\x8c\x99\xdd\xad\x0d\xc8\xbc\xba\xe5\xeb\x88\xee\x8b\xab,y?y\x01\x9f\xe3kZ\x8b\xc2|\xe4\x02\xf3\x07\xe9\x92\x97\xed\x80\xdfNdAh\xbb\xfd\xb2M\xfa$k\x05\xbd`\xee\xb1\xa4\x0d\x85\x0cmE1\xbfD&\xe5\x9f\xab\xa6\x90\xb7\xebl+\xc2\xfc\xaa]D\xd4~O\x81\xa2\xb2\xff\xe17\xdd\x9eZ2\x11\xdd\xaaZ\x16\xf3\xb5/\x89\xea\xae\xb6>\x86\xaa\xe5\xad\x90\xca\xc2P%\xbd\xf7\xb0\xd8\xb1\xe5\x8a8\xe0\x97\x98`\xa8+TR\x11\x03nP\xb6\xceKm&\x9c\x11\x97N\xeb\xfd\x15y|RS\x05\x93\"\x0f\x16~\xbe\xb2\xceM\x97\\Ch3\x0bT\xe3\xaf\x18?\xc3\x93|\x95e\x9e\x1b\x15M8\xa2\xed\x13\x01\xf8v\x10|&\x04A^s\xa9\"\xaf\x9e\x82wo\xc1=\xc7\xb6\x8fy\xcd\xb5\x8a|\xecH\x91[\xe5\x10\xa2v\xf0W\xbd\xe7\x9c\x96\x15\xbf\xe6\x9f\xfbo M\xbdm\xea\xfd\xdf\xb6\x15\xbe\x15\xea2p\xe3\xbb\xf8\xbfx\x1f\xda\x19\xf3\x0b\xb5\x87\xb6\xdb/\xd4\x12\x1f\x1f\xb2n\xe4\x0b5\x89o\xf3\x05.3\xfc\x85\x9ak\xedo\x1f\xf6X\xe2Q\xe6\xa8 \xc5\xd5\x95<\xb3\xf3\xae\xe5\xeb\x05s\xc2\xe1\xf5\xea\x88\xf7\xe5\xc3|\xef\xaf\xf0$bj\xd2\x02\xf9\xc6\xad\x06\xce\xa9\xca=E\xd5\x9f\x9d\xea0o\x0c\x01\xd7\xe6\x10\xf0\xd5\xa9\x87V!(L\xfe\xf0Y\x16\xfa\xa9\xa4$\x8f,\x05\xea#b\xc7\x7f\x97\x99\x8d\x1fxP\xf7\x87'\x16\x0cS\xed\xd1\xe5\xa5\x8bE\xc1\x94\x06\xed\xe9I\xdcq\xcd\x00\xfe\x1b\x1fW\x18\xfe\xa7\xa15\xa0U\x85\xb1\xbd\xbb\xb2R\x8dos\x17\xa9qk\xfb\xbc\xa4u\x83\x91\xba\xdaR\x88\xfe|\xbb\xfd\x01\xd1\xf5\xfevJy\xec\x01cMm\xb3r\xfd\xd9P1\xe3:\x88\xe9\xa5\xd8 \xd2\x01\x1e\xf8\xe1\x1eK\x11\x89#Y\x0e!\xc5p\\\x81l\x9a\x12\x94/\xb93\x9b\xb77\x00\xd3\x1a\xbe3\x90t\xcb+\xa8\xdd\npuKj|\xe5\xee\x84 O) @\x12F\\\x06\xeb\x0e(E\x01\x02@\xa0\x10\xa0\xd8{=\xe9\xed\x8a\xba\x84\xcb\xc6zu{\x9f\xbe\x82\xf7\x17\xdf\xbf\xf9\xee\xe5\xd5\x8f\xef\xbf\xbf\xfa\xf0\xff.\xbf\xbb\xfa\xf8\xe6?\xde\xbc\xfd\xef7#8\\\xbe\xfb\xee\xbf\xde~\xf8n\x1c\x87\x17o\x7f\xfc\xf1\xe2\xc3(\x1eo/\xdf\xbe\x7f\xfe\xda\x93\x85\xdaQ2R\x1f\xfe\xfe\xbeO\xef\xf3U\x89\x17?\xd2\xd5\x87v'M-\xcb\xcb(\xff\xc9\x9bS\xa76\xa3\x97f\xb1z\xeb\x01\x19\xbf\xe99\xfc\x17\xa9\xadi\x91\x01\x99\xbf\xcb9\\\xf2(\x07\x15~\xec\\\xa9\x8c>E\x0c\x9c\x90\xe5\xa9\xa0\x8a4\xa5%\x03\xd1\xa7\xb0\xb5\xb2 \xdb\x8e\x1f=\xb9\xf3\"}\n\xf4u\x10\xe1\xef\xc0{9\xbf\xa7\x88\xcf\x07\xbe!\xd9\x90\x82r-}\x8a\xd0\x1eDj\x90\x91gV\xa6O1v\xa7(|H(\n\xfd\xe0\x10\xff\xd1!\xf6\xc3\x07fz\xfa\xe4\x95\xf7\xe9S\x9do0\xad\xd1\xc6\x91\xa9\xdfS\x84B|\x93\xa8}jS\x19\xee\x05g\x9fFH\xe8\xfd\xa9\xf6\xc2\x19NT\xd0S\x8c\xdd\x87\xfb\xdb\xf6\x84\xa20\xb1\xeeRc1!\x08\x9b\xd5\xf7\xc51,\xfa\xd8V\x98E\xcc\xa7r\xd7\xcd&\xe7;\x86\xbc\x98\x89\xc7y\xc0-rj\xfbL\x19\xeb\x8b_\x1c\xd2\x89[\\\x8f\xf2\xc8~\xee\xf3\x01\x02\xfdu\xa8\x9fN\x91\xfd\x80Rd\x9f\"{7\xa5\xc8\xde\xf54\xa4\xc8>l\x0e\x14\x94\"{#\x85\x0f E\xa1\x1f\x1c\xe2?:\xc4~\xf8\x14\xd9+J\x91\xbd\xa0p\x7f\x9b\"\xfbC\xfa\xd2\x91=w\x8bW\xb7\xa4\xce\xcb\xd5\xd5\x96|\xf2\xf3\xe1\x81\x1f\"\xcc\x15\xeem\xf6a\xc8\x13\xe4z\"%\xf1u9\xa1\xf6\xf9R\x01D\xccH\xbf\x93\xf0\xd0\x1e\xacS\x80\x11\x07\x9d\x9d\xcc\xda\x0f#\xc3j\xa8?\x11\xc6kY\xe4\x19?<\x8eY\xad\xc3\xe6\n\x16\x88^eE\x8e\xcb\xfa\n\xd55\xcan\xee\x1b\xb6\xea\xf4\xe0\xca\xa3\xb2TP\x80,\x10(\x0fH\xd7\x88\x17\x81QU\xa0L\x10!\x178\n\x8f\xf5\x14!\x18D\n\x07>\xa5\xcbz\n-h\xd6Sd_aD\x7f\xc1\xaf$ZO\x81\x0ekH\xca\x819\xcb\xa7\xf5\xe4,\xaa\xd6\xd3}\n\x1d\xea\x82\x87\xe4W\xac\x1d\xcc\xb6_\xdc=(\xe1\x0e\xe6\xe6Y\xf2\xad'\xdfB\xf0`\xc6\xbd\xc2\xf1\xe0\xf2p=\x85\x16\x8d\xeb\xc9]J\xae\xa7hC\x0e\xcb\xe8(\x8an.4f\xea\x92\xbdp]O\x13\x08\xea\x1bR\xf5\xc9\xb3\xf4]O\xf7\xe4\xfbc\xf2\x050N\xc9\x10\xbe\xb4\xea\xd3\x88\xc4\x91\xa2\x11\xda\x86\x91\x1a\x87\xd8\x84\x92\xa2\x98\x05\xf6\x90\xe2G\xa4\xa2X\xc3\x81\xf1\xc6\x03c\x0dhT\x02JQD\"J\x91\xff\x86\x03=\x8d\xd0\xdf\x08\xbd\x85oY\xd0\x93\xc7F\x06=\xddG\xb7\xbd\xb7\x11\xe8\xe9>DvW\xdd\x9a\xc9w\xffE0c\xdb~\x0d=\x85\xed\xe2\xd0\xd3}\xa8\xdfw\x1f\x88\x9e\xeeCb\xf7N\x12=\xdd\x87\xac\x01{Q\xf4t\x1fB{\xeef\xd1\xd3}\x08\x1c\xb6\x1fFO\xfe\xbbd\xf4\xf4\xe5\xfb=fu\xee\xb9-'\x88\xa7y\x0b\x8f\x9eDD\x11\xa2\xe7\xc8086\xfc\xfd\x07Zx\x06\x95\x18(\x1a\x13\x99\x87C`\x8a\xd2\x8a\xd3\x87\"}\x82\xa0\xb4\xe2\x8c\xb6kE\xf1CQQ\xac\xe1\xc0x\xe3\x81\xb1\x06t\xdf+\xce\xfdU\x9d\xa1\x1a\x14\x9a\xb3o]\xd3\x93sC\x9b\x9eF\x0d\x94q\xc3Dy\xd2\xabe\x814\xd7\xcf\xf9\xd0hC\x0b+#\xed\xd3W\xf0\xed\xeb\xb7/\xfe\xe3\xea\xe2\xe5\xd5\xab\xd7\xcf\xbf\x0f,\xa1\x1c\xd2\x90\xdb\xf3o\xdf\x7f\xf7\xc6\xbf2\xb4OCf\x81e\xa6}\x1a2{s\xe1[m\xda\xa7\xb6\xf6t:\xb5\xc5/\xbd\x05\x89\xc1\xbdxU\xa0U{I\xb9\xba\xed\xe3\xdb\"#7\x17/\xa3@\x19A\xad\x1b\x80\\\x94\x84\xb8^8\xa4\xe8\x92\xa5>\x8d\x1e'\xa3\xddq@a\xc6!M&~\x1c\xd2 (\xb8\x06\xaaO\x93\xf5!\xea\x13\x8cYl z\xc1\x97;\xef\xf3\x95(\xdbf1\x9a\xc2\xf5xY\x95\xda5\x1e\xc1\x9a\xdf\x01+\xf8\xfb/\xbf\xc6\xf5I\xb4\xd6\xdf\x0b\xdf\x96\xd8\xf0=\xfaaYV\x91\x9c\xfd\x84\xa8\\\x16\xd6\xe2\xac\x02$7\xd8\x07\xf1\xdag\xe1\xfc\xb4\xb1\xf7\x11\x14{/\xf7\"\xe6\xfd\x98\xd9~\xdf\x17\xffwb\xa3\xa0\x88\x08(B\x0b\x82bt!(\xda\x8f\x8fr #\x9c\xc7\xb6\x99_9\xaef\xd5S\xb4ra\x94\x82\x19\xe1\xc5\xd3?\xfd\xe9\xc9\xff\x89yu\xa4\xa2a\x9c\xb2\x81\xdf\xe6\x95m\x9f\xfe\xe9\xcf7O\xfe\x11\xc5\x1f\x13\x91]6\xf3\"\xcf\xfe\x03\xefz\x89\xbd\x1b\xbc\xa3\x9d\xcb\x9a\xe2\xe2\xa8\x86bq\xab\xcd\x7f\xb5\x0e)\x90Kh\xe1m\x9fF}\x941\x8b\xf96/\xbc\xadrR\xe5u\xf48\xfe\xa2\xb2+\xa9C\x84\x8dt7\xb1\x8e&\xd2\x8f\x8fPf\xf4\xb8\x8c\xf4\xe0\x91\n\x85\x11J\x85q\xbe{\x84ra\x8c\x82a\xac\xd7\xbe?\xc1\xe3\xfd\xf5\x9dy\xeb\xb1\xbez\x8c\xa7\x1e\xf1!\xe2<\x1dL\xe1\xa3\xbf\xb8\xd4q{Q\x14E\x8a\x1b&*[\x87\x91\xf2\xca\x1f\x04\x0b\x94*L\x9a\xf9\xeeo\xa8\xac\xf3\x12_\x85\xad\x88\xc2VB\x01+\xa0`\xe7\x1e\xee\xd2\x83g\xc8\xc0/ (\xc2\xf7\x05\xcf\x87\xc1\xca\x82(\x85A\xec\xec\x17\xa58\x88S\x1e\xc4\xcfu_V\xcc\x98\x99\xed\x0e\xe6\xb4\xf8\xd9,\xce\xbdF)9\xcc\x99 \x1a1k}\x01\x19\xe3f\xa8@\xc1\x02E\nI\x82GJ\xe2\x9b\xe0\x0e\xcd\x9d\xbef\xb3\xe8\x0b\xbe\x17\xf09\xdf\n8v\x87\xa2\xfe_\x8f\x05\xa1{\xaf\xec\xbeg\xe96;N^c\xc8\xdf\x90\xd3mv\xb6\x18'\xddf\x97n\xb3;$_I \xddfg\xa0t\xe7\x85\xa4t\xe7E\x87\xd2\x9d\x17^\xef\x04\x1dH\x11\x96y\x10\xe4\x83\xc1\xf7\xc9\x9de\xeaS\xa0\xaf\x83\x08\x7f\x07\xde\xc9\x91=E|>\xf0\x0d\xc9\x86\x14\x94\xb9\xeaS\x84\xf6 R\x83\x8c0o\xd6'\xaf,Z\x9f\xbc\x01QE\x11\n\xf1MI\xf7)\x18/V4BB\xefO\x95\xee\xbc\x08\xd3XL\x08\xf2\x0f}\xe7E\xba\xcdNG)\xb2\x97\x94\"\xfb\x0e\xa5\xc8\xde\xeb\x9d\x14\xd9\xbb\x9eU\x14\x1a\xe8E|>\x08\x9f\x03\x05\xa5\xc8\xdeH\xe1CBQ\xe8\x07\x87\xf8\x8f\x0e\xb1\x1f>E\xf6\x8aRd/(\xdc\xdf\xa6\xc8\xfe\x90\xbetd\xff\x00\xf7g\xa5\xdb\xec\xcc\x14j\x9f\xe96;\x17\xd3t\x9b]\x88\\\x90n\xb3sPd_aD\x7f\xc1\xaf\xc0\\O\x81\x0ekH\xca\x819\x8b\xd1\xf5\xe4,Q\xd7\xd3}\n\x1d\xea\x82\x87\xe4W\xfa\x1e\xcc6\xddf\xe7*\xb6\xd7Sh \xbe\x9e\xdc\x85\xf9z\x8a6\xe4\xb0\x8c\x8e\xa2\xe8\xe6Bc\xa6.\xa5\xdb\xec\x84\xf6\xdc\x1b\xa4\xa7\xfb\x108lw\x91\x9e\xfc\xf7\x1c\xe9\xe9\xcb\xf7{\xcc\xea\xdc\xbdC'\xdc\x03\xa6\xdb\xec8M`\x08\xe1anP\x89\x81\xa21\x91y8\x04\xa6(\xad8}(\xd2'\x08J+\xceh\xbbV\x14?\x14\x15\xc5\x1a\x0e\x8c7\x1e\x18k@\xf7\xbd\xe2\xf49\\MOBs\xbe\xa7\x17w\xc9\xb9\xa1MO\xa3\x06\xca\xb8a\x12t\x94\x9b\x9eF\x1bZX\x19i\x9fb\x0f\x83\xd3S\xe4\x11qz\x8a<8NO\xe1\xc7\xc9\xe9i\xd4!sz\x8a_z\x0b\x9a\xea@:=\x05\x1dS\xa7\xa7\xe8\x92\xa5>\x8d\x1e'\xa3\xddq@a\xc6!M&~\x1c\xd2 (\xb8\x06\xaaO\x93\xf5!\xea\x13\x8cYl \xf2=\x98/\x82u\xba\xcd\xaeG\xe96\xbb\xb8((\"\x02\x8a\xd0\x82\xa0\x18]\x08\x8a\xf6\xe3\xa3\x1c\xc8\x08\xe7\x11|\xf7\x83\xa2h\xe5\xc2(\x05C\xec\x9d\x10\x8aF)\x1a\xc6)\x1b\xe2\xef\x8aPt\xbf\xe2\x8f\x89\xc8\xee\xe0. E\xf1wJ(\n-\xbc\xed\xd3\xa8\x8f2f1\xbf\x8d\xbfsB\xd1=\xc8\xbeM\xb7\xd9\x1dR\xf4\xb8\x8c\xf4\xe0\x91\n\x85\x11J\x85q\xbe{\x84ra\x8c\x82a\xac\xd7\xbe?\xc1\xe3\xfd\xf5\x9dy\xeb\xb1\xbez\x8c\xa7\x1e\xf1!\xe2<\x1dL\xe1\xa3\xbf\xb8\xd4q{Q\x14E\x8a\x1b&j\xba\xcd\xceJ\xc1\xce=\xdc\xa5\x07\xcf\x90\x81_@P\x84\xef\x0b\x9e\x0f\x83\x95\x05Q\n\x83\xd8\xd9/Jq\x10\xa7<\x88\x9f\xeb\xbe\xac\x9813\xdb\x1d\xcci\xf1\xb3Y\x9c{\x8dRr\x983\x134b\xd6\xfa\x022\xc6\xcdP\x81\x82\x05\x8a\x14\x92\x04\x8f\x94\xc47\xc1\x1d\x9a;M\xb7\xd9Y=\xb9+\xca\xf0\xfa\x9a>\xd6\x94n\xb3s\x0c\x07\xcf\xa9\"\xa8\xc4\xc4\xab\xa7\xe0\xdd[\x00\xef\x02\x11\xbf\xef\xa9\xc8\xc7\x80\x14\xb9U\x0e!j\x07\x7f\xd5\x07\x16gx\x95a\xf8\x14\\\xf8\x84\xd2\xce\x00\xda\xd3\x14|\x0d!\xa8\x04\"\xe0c\xf8\x955\xc4\x160D\x96*D\x16%\x84\x97\x1f\x8c*4\xf0\x0f\x1b\xa7*\x1e\x08*\x13\x08.\x08\x08\xb0\x9a\x80\x01\xec\x19\xc9D4\xee\x17\xc1x\x83\xf1\x11\x128\xba\x1f\x12:\xf9\x82\xe6\xbf\xd6\xdb\xec|d\xfbV\xec~\xa6P\xe3\xf6R\x05\xf6\xd5\xc4\x0f\xa7b\xf1\xc4\x84\x95E\xdf[\xf3\xed\x15rH\xe8\xb6\x16/s\\,\xd4\x15\x12x\xc1B\xccy\xff.\x8b\xee\xd3v\xa9\xbf\xc7\xf5k6\xd6k.\xe1;L\xb7\xa4\xa4X]\xb6Q\xa9\xff\xe7\x9dX\x92J\xe3\x04\xfe\xb3\xc1\xd5\xee\xac\xcf\x07\xde]\xbe\x18J\xbe\xc1\xf5\x9a,\xf6\xb2)\xcf\xd6y\xac'\xea\xf3\x12\x9a\x12\x7f\xde\xe2\x8c\xf5\x11W\x15\xa9Zy\xba=\xa4\xd9\x1ao\x06\xe7\xbf\x1b\xa76\xf3d\xc6\x1b8\x1c\x81\x961\x97\x91\x85f\xc8\xda\xc3\x1c[\xb8*\x8f\x01\x0c\x92a\x81k\x94\x17\x1a\xc7i\x8b\x10\x8c\x91\x81#\"pE\x02\xec\xf5\xab\xa62\xc6\x82\x1e\xfe\xcb=\xc4\x04=\x87\x8f\xef^\x9fU\x98\x92\xa6\xca0\x94h#\xc7}S\xe6?7\xb8\xd8\x01s\x06u\xbe\xcce\xde\xa3\x16G3\x1a\x19\x8a\x0b$\xaa\x1c\x15\xf9\xdf\xf0\xc2\xbc\xa1\x7f[\x91\x9ad\xa4\x80y\xb3\\\xe2J}\xb4\x99\xb8\x17C\xf4\x0d6\x0dm\x9d\x13 spU`Dks[\xa4\xc4ptv\x04\xd9\x1aU(\xabq\xc5Z\xc1|\x11\x08\x14\xaf6\xb8l=\xf0\xc7w\xaf\x8f)lQ\xbd6r\xe3B\xb5\x07F\x99[e\xec\x96MQ\xec\xe0\xe7\x06\x15L\x83\x0b\xa1_\xd9\x14\xd7\xe4 \xa2\x90\x97f&\xd7L\x94\xb3\x15!\xab\x02\xcf\xb8\xce\xe6\xcdr\xf6\xb2\xa9\xf8\x89 \xd7\x8fEO8[\xba&M\xb1\x809\x9bA\x8c\xfc\x10d\xa8$e\x9e\xa1\x82\x8f!s\xcb'x\xb6\x9a\x9d2\xd5\xf2\xb3 \x8efG\xcc\x99\xf1\xfbR\xb2\x0cok\xbcx<{d~\xfd\xa2\x84-Sv\x9e\xe1S\xa81\xdaPhh\x83\x98:\xc4\xb1Z\xdb\xbc`\x92\xd6\x84+c\x9e\x97\xa82\xc7\xe0\xfc\x8a\x96\xdd\x16\xcb\xbbR\xea5\xde\x99\x9b\x16\xbeN^ \xd4\xd0\xeey\xa05\xfe\xcc?\xf5\xf3r7\x83\x1f\xc8'|\x8b\xabSk|\xf5\xf1\xddk\x15\xbf1V\xccm\x1b\x9f\xe5\x1e\x14\xc3\xf5\xba\xae\xb7\xd7\xa7\xe2\xbf\xf4\xfa\x14H\x05%\x91\xbf\x9erk\xccP \x84\x8fN\xa6\x113C\\C\xb3\x95\x07\xa2Z\xda\xc5\xd5-\xae\x84j6h+\xefT\xe2\x92\xd7\xa4=\x15\x95g/sq\x9d\x0b2\xe7\x1b\x97\xa4(\xc8'zn\xf9\xb6\xbf\x87\x8b\xe5\xbeG\xcc,\xb6\x15aQ\xc3\xa2\xed4\x8fm(m6xa9}\xf5\xf7lr\xfa\xe1\xc3\x87K\xf8\xfe\xbb\x0f\xea\x02\x9d\x8f\xef^\x8b1\xb6\xe3\xd3\xb39\x04\xfa\xebpX|\xd8m\xf1O\x7f\xfd\xc9\xf8\x02\x8f\x94\x1bn\x0f\xc2\xde\xe44\xc2\xbf\xd0\xb6\"\x8b&\xc3\x80J1\x85\x99\xeb\xec~\x0f\xcf\xf7\x87\x96P~c\x10b:\x13\x11D\x862\xe6[\x08\xb9i\xb6 \xb7I\xc2\x1cQK\x15$q\x9d\xf2\xf2\xf1\xddk.\xe3\x1a\xddr\x13\xdct\xc6\xd0B\x0c\"\xa4\xba\xc4\xfe}K\xf2\x05\xa0\xd2\x06\x0f \x01\xb9\xfb\xa8\xf0\x92T\xf8T1`|Q\x9d\xcf\xf3\"\xafwPb\xbc\xa0\"2\x02\xee\xf2\xaa[k=')\x99\x9b-W\x98\xbf\xc4\xc7\xec\x0cN>R\xac\xceubZb\xe6\xc9|\x96\xb0OT\xa2\x95\xad\xf7\xf3\n\xa3\x1b\xe6\x83$\xe3\xd9c\xb3E\xbd!5>\x17\x17\x8b-\x9b2\x13#\x8c\xf5C\xfa\xae\xac\xa9*\\\xd6\xc5\xae\x93\xbb\xb7\xb8K~\xa1\xd3r\x99g9*\x1cs\xd9\xbcYB\x85\xd9L\x84O\xf9Q7y\xad\x1am(^\x88\xa0O\x8dK#\xab9^\xe5e\xc9:\xcbB\\\xcb\xe4\xb2\xdb\xe2\x99\xb0\x7f\xb4\xcd\xe9,#\x1b\x9b7~\xcfG*\x05R\xaf\x85\xa3(\x87^\nNDP\nx\xb3\xadwrh?6O\x82\xf9j]\xc3\xdc\xe2\x94x\xa7y\x9c\x9eo\xb6\x05f\x93,\x1f0@\xb78\xcb\x97y\x06\x14oPY\xe7\x99\xa1\xa4\x95\x8f\xd5\x11!\x90\xc7\xd2\xcd7J\xfa\x91\xb9\xa39\x06$\x965\x9d\x00\xe7 \x8eQ\xc7\x1a\xcd\xc9\xad\xd9\xa6\xa5\n\xe4P\xd0\xde\x10\xe7!\xd9\xf5\xf3rw\xbd_\xbb\xa1\x12P5\xcf\xeb\x8a\x0db\xb3\x84ZVj\x8e@\x05\x91\xa6\x07H\xffi\x99w\xe6\x13\x8d\x90p\xde\x0f\x0b\x07\xe1_\x1b\xd5\x19L\xf3R\x0d\x9c\"\x9fs\xb1\xe5\xc6\x84A\xe5\xce\xfc\x00*w3&\xc6\xab\x8alN\x96\x84<6?:\x9b\x99\xe7\xbf| '\x8c\xd5G\xde\x91\x0f\xe4\xe4w\x8c\xd7c\xf8\xc5\xe2\xc3m\xfc\xfen\xd7\xddS\x87\xee\xfe\x82n\xd1d\xca\x83g<6d\xadL\xa0\xa1\x9c\x9e\xbc\"d\x96\x15\x88R\x87\x82\x84\x88\xec%\xd1\xc7\xce\x8bf\x19\x0c\x9akU\xf7\x8dCu\x97\xbbzMJ\x8b\xf2\x84T\xaf\x089\x99\xcdf\xe6\xd9\xa0U\xdc\x89\xf5\x19n|\\\xad\xb1ZeL.\x84R_~\xf7\xfe\xc5\xbb\x8b\xcb\x0fo\xdf=\xb6\xe5\xfb\xf6\x86joX4mW\xe7\x1f\x1d\xea\xfc\x9eX\x0e\xb0c\xaa<\x7f\x06\xbf\xdb\xceg\xaf\x08\xf9e6\x9b\xfd\xdd\xfc0*w\xa7,\x0ceolE\x10\xf5#\xaa\xe8\x1a\x15L\xc9\xf6\x8e\xd8T8\x94\xc2\"B\xbe\x1c\x08\xf0\xb1\xdc\xecE\xe0\x02\xf2\x01\xc2\x9f\xfa\xa7gP\xe6\x85\xd5\xc0\xedr\x19,\x99-n\xb9\x9e\x95/V\x0b\x0d\x98\xef\xf6a\x97\x9a=\xc4\xc5\xa0\xfa\xa8Wf\xc9XX\xa2o\xeaX\x13R\x9d\xb1\xf5\xfb\x8c\xff\xc0\xc2\xd5c@\x9d\xd9\x8e\xcd\x84\xf2HC-Ca!\xfa\xc6\xda\xa9\xa5,vj]y\x90,h\xc3d@\xcb\x1a\xebR\x86\x82x\x1e\xe3\xf8\xecX\xdf\x94\x9c\x13\x95\xc8|\xb5\x0bXZ\xf4\xd1\x92\x90\xd9\x1cU\xbc\xb3\x9f\xcfv\xb3\xbf\x1d -\xf2\xb5\x97\x96\x9fy)\xcaE=b<\xd8t\xa8}\xe4/\xef\xdf\xbe\xd1\xff\xf2\xec\xd9\xb3gf\x1b`\xef\xeds.\"\x8e$\xcc\x1d\xc8 H\xac\xeb\x1a\x8aU\xbau\xd5\x14\xc8p\xdc\xf6!\x1b\xf6\xca\x02\xef\xc3\x96S\xc0\x9b9^,\xf6\x01\x8c\xc88k\xd9!C\xf6\xa6\x13R\x88<\xf3\xf5\xbf3\xd5]\xcbdB/\xe5\xae>\x8e~\x80H\xf7snY\x80\xa0\xec\x86\xf9\xa0\xfd\x82x\x99\x17\xd8\x95\xdc\xcf\xac\xf9e\xdbYCk\xb2 \x1c\\}\x93?\x15\x01\xfc`\x1c\xa8[\x95[q\x98\x01\x1b\x16WH\x98\xb4\xbe\xb1k>\x18\x95\x9d\xafI\xb1\x90G\xe4r\xc9\xc5P\xce\xcbv|\x80\xc8\x00\xeaY\x89!\xa3o\x87\x8b0k'\xe7\x13\xe6\xd7\x94\n\x0fRC*c\xfa\xd3_\x7fzl\x19HS\xd8\\\xbfA\xbb\xd9qU1\x96OfO\x9f<\xa5G\x16\x13\x12\xff\xad\xd1\xaa\x03\x1a|\x05\xefqu\x9bgL{g\x19\xa1\x1bB\xcf\xe6\x88\xe2\xb3=lvv\xfbd\x8ek\xf4\xe4\x8c\xc3x\xf4\xec\x17Q\x96\xf4w\xc1d\xb5\xdf\x1cJ\x9b\xcd\x06U\xbbs\xf8\x1e\x0b\xec\xe9\xdb\x9d\xb8G\x1b~np\x95c*\x81@\xa6\xe6U~\x8bKY\xe0\xa4|\x16\xd9b\xd1\xe3\x8b\xc5!\x0f\xf9\x8c\x82\x9d:]8~\xfa\xf5\xd7\xc7f\xec\nh\x93e\x98\xd2eS\xdc%he\xael22\x03'\x90c.\xa7qf/\x1c\xb9\x0b\xafJ%\xab\xe4\xe0\x94\x1e\xdc\x15I\xb5W%\x92O\x05\x92\xbd\xf2\xc8\xa9.p\xab\xcc\xb3\xc2\xc8ZYd8\xa5]\xbes\xfc\x929\xd4\x0c\xd5xq\x0e[\x9e\x08\xe4\xa1\xdd5]\xdc\x883\x89\xaf!/i\x8d\xd1\xe2xR3\xbb[\x1bp\x1e\xc7\x1fz\xf0\xbeS&\xf0\x92\x0b\xfc\x8e\xcd\xf7\xb2\x1d\xe8\xd8\x8f\xf3Ty\xe7\xa1\xf7S7\xe9\x93\x0b\x14\xe4w8=\xf4\x0f\x9b\xb7u\xb5w\x0c\xbd\xef\xb1\xf2\xbe\x07\xc8\xf7\x0f\x84\xb70\x0c=*>\xf4Px\xf7\xf1\xef\x1e\x9f\xf4\x8b\x95\xfb\xda\x0fd\x0fj\xc6UW\xe5y\x9c\xfa\x84#\xda]\x82\xea\xd5A\xf0\x99\x10\x04y\xcd\xa5\x8a\xbcz\n\xde\xbd\x05\xf7\x1c\xdb>\xe65\xd7*\xf2\xb1#En\x95C\x88\xda\xc1_\xf5\x9es\xf2\xe0a{\xd5\xaf\xff\xc1\xde^=\xf2\xeaI\xf8\xb1\xdc\x1e\x07pO%\x9e\xf7\xf9\xcdS58\xd4\x87\xf3$k\xeb\xb9\xacagPO\xd5\x07\xdf\x13\xa4\xa7j\xcf}\xfe\xf3T-\x05\x9c\xde\xaf\x98\xdc`T\xca^ \xd1\x9fo\xb7? \xba\x86\x05\xc1\xa2\nE\xd6\x953\xd6\xd46+\xd7\x9f\x0d\x05\x19\xae]\x10/Yx\xdf\xcbk\xcbZp\x1e\x89#\x89\xb6w\xcb\xdb\xcdUO\xa6)\xc1~\xd9\xe0\x046\xef\xbe\xcdpB\xc3w\x06\x92ny\x05-\xd4E\x91W\xfc\xae\x7fw'\x04yJ\x01\x01\x92\x80\xd8\xa4\x8c\xaf\x0cn\xa9O\x01\x02@\xa0\x10\xa0\xd8{=\xe9\xed\x8a\xba\xe4\xb7\xa3J\xd1\xe1}\xf0~\x9b\x8f\xf6d\xbc\x9b~\x1c\x07\xcf=W\x8a\xcc\xf7\xda{\xb2h\xb7b\x8d\xd3\x87\xbf\xbf\xef\xd3{~9\xe7\x8ft\xf5A\xe2,\xa2\xbc\x969*qo\xa77\xa7\x0e\xf4\xdfK\xb3X\xbd\xf5\x80\x8c\xdf\xf4\x9c\xef\x06\xf2=\x17\xc0\xfa]\xce\xe1\x92G9\xa8\xf0c\xe7Je\xf4)b\xe0\x84,O\x05\x05]\x06\x10\xb6V\x16d\xdbP\xa2'w^\xa4O\x81\xbe\x0e\"\xfc\x1dx/\xe7\xf7\x14\xf1\xf9\xc07$\x1bRP\xae\xa5O\x11\xda\x83H\x0d2\xf2\xcc\xca\xf4)\xc6\xee\x14\x85\x0f E\xa1\x1f\x1c\xe2?:\xc4~\xf8\xc0LO\x9f\xbc\xf2>}\xf2\xde\x8c\xaa(B!\xbeI\xd4>\x05\xef\xd5U4BB\xefO\xb5\x17./\x17\xf8s\x98hav\x1f\xeeo\xbd\xb7\xf7*\xba{\x8d\xc5\x84 |\x8fo[{\xc1w\x00W\x98E\xcc\xa7rS\xc7&\xe7\x1bR\xbc\x98\x89\xc7y\xc0-rj\x9d\xb3S\x96\xc4P\x005\xa4N\xdc\xe2z\x94G\xf6s\x9f\x0f\x10\xe8\xafC\xfdt\x8a\xec\x07\x94\"\xfb\x14\xd9\xbb)E\xf6\xae\xa7!E\xf6as\xa0\xa0\x14\xd9\x1b)|H(\n\xfd\xe0\x10\xff\xd1!\xf6\xc3\xa7\xc8^Q\x8a\xec\x05\x85\xfb\xdb\x14\xd9\x1f\xd2\x97\x8e\xec\x1f\xe0\xd9\x98{\x9b}\x18\xf2\x04\xb9\x9eHI|]N\xa8}\xbeT\x00\x113\xd2\xb1\xe7t\xb6\x1fF\x86\xd5P\x7f\"\x8c\xd7\xb2\xc83~V'\xb3Z\x87\xcd\xf1\x13<\xaf\xc4 \x9dW\x88\x1f\x1fz\xdf\xb0U\xa7\x07W\x1e\x95\xa5\x82\x02d\x81@y@\xbaF\xbc\x08\x8c\xaa\x02e\x82\x08\xb9\xc0Qx\xac\xa7\x08\xc1 R8\xf0)]\xd6ShA\xb3\x9e\"\xfb\n#\xfa\x0b~%\xd1z\ntXCR\x0e\xccY>\xad'gQ\xb5\x9e\xeeS\xe8P\x17<$\xbfb\xed`\xb6\xfd\xe2\xeeA w07\xcf\x92o=\xf9\x16\x82\x073\xee\x15\x8e\x07\x97\x87\xeb)\xb4h\\O\xeeRr=E\x1brXFGQts\xa11S\x97\xec\x85\xebz\x9a@P\xdf\x90\xaaO\x9e\xa5\xefz\xba'\xdf\x1f\x93/\x80qJ\x86\xf0\xa5U\x9fF$\x8e\x14\x8d\xd06\x8c\xd48\xc4&\x94\x14\xc5,\xb0\x87\x14?\"\x15\xc5\x1a\x0e\x8c7\x1e\x18k@\xa3\x12P\x8a\"\x12Q\x8a\xfc7\x1c\xe8i\x84\xfeF\xe8-|\xcb\x82\x9e<62\xe8\xe9>\xba\xed\xbd\x8d@O\xf7!\xb2\xbb\xea\xd6L\xbe\xfb/\x82\x19\xdb\xf6k\xe8)l\x17\x87\x9e\xeeC\xfd\xbe\xfb@\xf4t\x1f\x12\xbbw\x92\xe8\xe9>d\x0d\xd8\x8b\xa2\xa7\xfb\x10\xdas7\x8b\x9e\xeeC\xe0\xb0\xfd0z\xf2\xdf%\xa3\xa7/\xdf\xef1\xabs\xcfm9A<\xcd[x\xf4d\xbb\x9cHO\x91apl\xf8\xfb\x0f\xb4\xf0\x0c*1P4&2\x0f\x87\xc0\x14\xa5\x15\xa7\x0fE\xfa\x04Ai\xc5\x19m\xd7\x8a\xe2\x87\xa2\xa2X\xc3\x81\xf1\xc6\x03c\x0d\xe8\xbeW\x9c>\x17[\xe9Ih\xce\xf7\xe6\xd8.97\xb4\xe9i\xd4@\x197L\x82\xae\xd1\xd2\xd3hC\x0b+#\xedS\xecE\\z\x8a\xbc\x9eKO\x91\x97v\xe9)\xfc*/=\x8d\xba\xe0KO\xf1KoAS]\x06\xa6\xa7\xa0+\xc2\xf4\x14]\xb2\xd4\xa7\xd1\xe3d\xb4;\x0e(\xcc8\xa4\xc9\xc4\x8fC\x1a\x04\x05\xd7@\xf5i\xb2>D}\x821\x8b-A\xbe\x97\xa2E\xb0\xceK@\xd6\xab\xd2\xf44\xa6O\x1e\xd7\xaa\x05\xf1\xd3_\xc1\xd6^\xb6\x16\xc4\xcbv1\x9b\x8e\xf6>\x82b\xef\xe5^\xc4\xbc\x1f3\xdb\x87\xdd\x9b\xaf(.\n\x8a\x88\x80\"\xb4 (F\x17\x82\xa2\xfd\xf8(\x072\xc2y\x04\xdf\xbb\xaf(Z\xb90J\xc1\x10{\x1f\xbf\xa2Q\x8a\x86q\xca\x86\xf8{\xfa\x15\xdd\xaf\xf8c\"\xb2;\xb8\xc7_Q\xfc}\xfe\x8aB\x0bo\xfb4\xea\xa3\x8cY\xcco\xe3\xef\xfbWt\x0f\xb2+\xa9C\x84\x8dt7\xb1\x8e&\xd2\x8f\x8fPf\xf4\xb8\x8c\xf4\xe0\x91\n\x85\x11J\x85q\xbe{\x84ra\x8c\x82a\xac\xd7\xbe?\xc1\xe3\xfd\xf5\x9dy\xeb\xb1\xbez\x8c\xa7\x1e\xf1!\xe2<\x1dL\xe1\xa3\xbf\xb8\xd4q{Q\x14E\x8a\x1b&*[\x87\x91\xf2\xca\x1f\x04\x0b\x94*L\x9a\xf9\xeeo\xa8\xac\xf3\x12_\x85\xad\x88\xc2VB\x01+\xa0`\xe7\x1e\xee\xd2\x83g\xc8\xc0/ (\xc2\xf7\x05\xcf\x87\xc1\xca\x82(\x85A\xec\xec\x17\xa58\x88S\x1e\xc4\xcfu_V\xcc\x98\x99\xed\x0e\xe6\xb4\xf8\xd9,\xce\xbdF)9\xcc\x99 \x1a1k}\x01\x19\xe3f\xa8@\xc1\x02E\nI\x82GJ\xe2\x9b\xe0\x0e\xcd\x9d\xbef\xb3\xe8\x0b\xbe\x17\xf09\xdf\n8v\x87\xa2DvW\xdd\x9a\xc9w7K0\xe3\xf0\xbb\x9c\xc2\xf6\xc4\xe8\xe9>\xd4\xef\xbb\xabFO\xf7!\xb1{_\x8e\x9e\xeeC\xd6\x80\x9d=z\xba\x0f\xa1=\xf7\x06\xe9\xe9>\x04\x0e\xdb]\xa4'\xff=Gz\xfa\xf2\xfd\x1e\xb3:w\xef\xd0 \xf7\x80\xe96;N\x13\x18Bx\x98\x1bTb\xa0hLd\x1e\x0e\x81)J+N\x1f\x8a\xf4 \x82\xd2\x8a3\xda\xae\x15\xc5\x0fEE\xb1\x86\x03\xe3\x8d\x07\xc6\x1a\xd0}\xaf8}\x0eW\xd3\x93\xd0\x9c\xef\xe9\xc5]rnh\xd3\xd3\xa8\x812n\x98\x04\x1d\xe5\xa6\xa7\xd1\x86\x16VF\xda\xa7\xd8\xc3\xe0\xf4\x14yD\x9c\x9e\"\x0f\x8e\xd3S\xf8qrz\x1au\xc8\x9c\x9e\xe2\x97\xde\x82\xa6:\x90NOA\xc7\xd4\xe9)\xbad\xa9O\xa3\xc7\xc9hw\x1cP\x98qH\x93\x89\x1f\x874\x08\n\xae\x81\xea\xd3d}\x88\xfa\x04c\x16[\x82|\x0f\xe6\x8b`\x9dn\xb3\xebQ\xba\xcd..\n\x8a\x88\x80\"\xb4 (F\x17\x82\xa2\xfd\xf8(\x072\xc2y\x04\xdf\xfd\xa0(Z\xb90J\xc1\x10{'\x84\xa2Q\x8a\x86q\xca\x86\xf8\xbb\"\x14\xdd\xaf\xf8c\"\xb2;\xb8KBQ\xfc\x9d\x12\x8aB\x0bo\xfb4\xea\xa3\x8cY\xcco\xe3\xef\x9cPt\x0f\xb2o\xd3mv\x87\x14=.#=x\xa4Ba\x84Ra\x9c\xef\x1e\xa1\\\x18\xa3`\x18\xeb\xb5\xefO\xf0x\x7f}g\xdez\xac\xaf\x1e\xe3\xa9G|\x888O\x07S\xf8\xe8/.u\xdc^\x14E\x91\xe2\x86\x89\x9an\xb3\xb3R\xb0s\x0fw\xe9\xc13d\xe0\x17\x10\x14\xe1\xfb\x82\xe7\xc3`eA\x94\xc2 v\xf6\x8bR\x1c\xc4)\x0f\xe2\xe7\xba/+f\xcc\xccv\x07sZ\xfcl\x16\xe7^\xa3\x94\x1c\xe6\xcc\x04\x8d\x98\xb5\xbe\x80\x8cq3T\xa0`\x81\"\x85$\xc1#%\xf1Mp\x87\xe6N\xd3mvVO\xee\x8a2\xbc\xbe\xa6\x8f5\xa5\xdb\xec\x1c\xc3\xc1s\xaa\x08*1\xf1\xea)x\xf7\x16\xc0\xbb@\xc4\xef{*\xf21 En\x95C\x88\xda\xc1_\xf5\x81\xc5\x19^e\x18>\x05\x17>\xa1\xb43\x80\xf64\x05_C\x08*\x81\x08\xf8\x18~e\x0d\xb1\x05\x0c\x91\xa5\n\x91E \xe1\xe5\x07\xa3\n\x0d\xfc\xc3\xc6\xa9\x8a\x07\x82\xca\x04\x82\x0b\x02\x02\xac&`\x00{F2\x11\x8d\xfbE0\xde`|\x84\x04\x8e\xee\x87\x84N\xbe\xa0\xf9\xaf\xf56;\x1f\xd9\xbe\x15\xbb\x9f)\xd4\xb8\xbdT\x81}5\xf1\xc3\xa9X<1ae\xd1\xf7\xd6|{\x85\x1c\x12\xba\xad\xc5\xcb\x1c\x17\x0bu\x85\x04^\xb0\x10s\xde\xbf\xcb\xa2\xfb\xb4]\xea\xefq\xcde\xfbv'n\x1fx\x87\xe9\x96\x94\x14\xab\xeb6*\xf5\xff\xbc\x1bKRi\xdc\xc0\x7f6\xb8\xda\x9d\x0d9\x0d%\x7fw\xf9\x026\xb8^\x93\xc5^>\xe5\xdd:\x8f\xf6\xc4}^BS\xe2\xcf[\x9c\xb1~\xe2\xaa\"U+Q\xb7\x974[\xe3\xcd\xe0\x0cx\xe3\xf4f\x9e\xd0x\x03\x87\xa3\xd02\xee2\xb2\xd0\x0c[{\xa8c\x0bY\xe5Q\x80A2,p\x8d\xf2B\xe3\x05RAI\xe4\xaf\xa7\xdc\x1a3T\x02\xe1\xa3\x93i\xc4\xcc\x10\xd7\xd0l\xe5\xa1\xa8\x96vqu\x8b+\xa1\x9a\x0d\xda\xca{\x95\xb8\xe45iOF\xe5\x19\xcc\\\\\xe9\x82\xcc9\xc7%)\n\xf2\x89\x9e[\xbe\xed\xef\xe1b\xb9\xef\x113\x8bmEX\xe4\xb0h;\xcd\xe3\x1bJ\x9b\x0d^XN`\xfd=\x9b\x9c~\xf8\xf0\xe1\x12\xbe\xff\xee\x83\xbaD\xe7\xe3\xbb\xd7b\x8c\xed\xf8\x14m\x0e\x83\xfe:\x1c\x16\x1fv[\xfc\xd3_\x7f2\xbe\xc0\xa3\xe5\x86\xdb\x83\xb079\x8d\xf0/\xb4\xad\xc8\xa2\xc90\xa0RLa\xe6Z\xbb\xdf\xc3\xf3\xfd\xc1%\x94\xdf\x1a\x84\x98\xceD\x14\x91\xa1\x8c\xf9\x16Bn\x9a-\xc8\xad\x920G\xd4R I\\'\xbd||\xf7\x9a\xcb\xb8F\xb7\xdc\x047\x9d1\xb4\x10\x83\x08\xa9.\xb1\x7f\xdf\x92|\x01\xa8\xb4ADB@\xee>*\xbc$\x15>U\x0c\x18_T\xe7\xf3\xbc\xc8\xeb\x1d\x94\x18/\xa8\x88\x8e\x80\xbb\xbc\xea\xd6Z\xd3IJ\xe6f\xcb\x15\xe6/\xf11;\x83\x93\x8f\x14\xab\xb3\x9d\x98\x96\x98y2\x9f%\xec\x13\x95he\xeb\xfd\xbc\xc2\xe8\x86\xf9 \xc9x\xf6\xd8lQoH\x8d\xcf\xc5\xe5b\xcb\xa6\xcc\xc4\x08c\xfd\x90\xbe+k\xaa\n\x97u\xb1\xeb\xe4\xef-\xee\x92_\xea\xb4\\\xe6Y\x8e\n\xc7\\6o\x96Pa6\x13\xe1S~\xdcM^\xabF\x1b\x8a\x17\"\xecS\xe3\xd2\xc8j\x8eWyY\xb2\xce\xb20\xd72\xb9\xec\xb6x&\xec\x1fms:\xcb\xc8\xc6\xe6\x8d\xdf\xf3\x91J\x81\xd4k\xe1(\xca\xa1\x97\x82\x13\x11\x96\x02\xdel\xeb\x9d\x1c\xda\x8f\xcd\x93 \x8bNanqJ\xbc\xd3\xae\xd6X\xad2&\x17B\xa9/\xbf{\xff\xe2\xdd\xc5\xe5\x87\xb7\xef\x1e\xdbr~{C\xb57,\x9a\xb6\xab\xf3\x8f\x0eu~O,\x87\xd81U\x9e?\x83\xdfm\xe7\xb3W\x84\xfc2\x9b\xcd\xfen~\x18\x95\xbbS\x16\x86\xb27\xb6\"\x88\xfa\x11Ut\x8d\n\xa6d{Gl*\x1cJa\x11!_\x0e\x04\xf8Xn\xf6\"p\x01\xf9\x00\xe1O\xfd\xd33(\xf3\xc2j\xe0v\xb9\x0c\x96\xcc\x16\xb7\\\xcf\xca\x17\xab\x85\x06\xccw\xfb\xb0K\xcd\x1e\xe2rP}\xd4+\xb3d,,\xd17u\xac \xa9\xce\xd8\xfa}\xc6\x7f`\xe1\xea1\xa0\xcel\xc7fBy\xac\xa1\x96\xa1\xb0\x10}c\xed\xd4R\x16;\xb5\xae\xf2\x97\xf7o\xdf\xe8\x7fy\xf6\xec\xd93\xb3\x0d\xb0\xf7\xf69\x17\x11G\x12\xe6\x0ed\x10$\xd6u\x0d\xc5*\xe1\xbaj\nd8r\xfb\x90\x0d{e\x81\xf7a\xcb)\xe0\xcd\x1c/\x16\xfb\x00Fd\x9d\xb5\xec\x90!{\xd3 )D\xae\xf9\xfa\xdf\x99\xea\xaee2\xa1\x97vW\x1fG?@\xa4\xfb9\xb7,@Pv\xc3|\xd0~A\xbc\xcc\x0bl\x9e7\x94\xcf\xba\xc4\x15%\xa5u\xd8\xcaL\x1c\xbf\xd3\xf6\x8a\x7f\xe1g\xf0\xc4\xcc\xb9}\x81WY\xc8\xe7\x9f\x86\xcf`\x00V\xa9\x8e\xb8.\x8f\xce\xe1H7j\xfbj\x98\x89^\x1e\xd9n\x93>\xe2\xfd{\x836\x8c\xe7\xbf\x8a.\xfc\x9b\xf5\x05\xd6\xbf\xc1\xf3\xa1\x9d\xbcX\xca\x05W\xdf\xd6\x845\xe4\x14>\xe1\xa2\xf8\xea\xa6$\x9fJ\xeeg\xd6\xfc\xc2\xed\xac\xa15\xd9\x04\x0e\xae\xbe\xc9\x9f\x8a\x00~0\x0e\xd4\xcd\xca\xad8\xcc\x80\x0d\x8b+$LZ\xdf\xd85\x1f\x8c\xca\xce\xd7\xa4X\xc8cr\xb9\xe4b(\xe7e;>@d\x00\xf5\xac\xc4\x90\xd1\xb7\xc3E\x98\xb5\x93\xf3 \xf3kJ\x85\x07\xa9!\x951\xfd\xe9\xaf?=\xb6\x0c\xa4)l\xae\xdf\xa0\xdd\xec\xb8\xaa\x18\xcb'\xb3\xa7O\x9e\xd2#\x8b \x89\xffnQ\x856\xb8\xc6\xddj\xe1\xaf\xb8\xe7=\x97EG\x1d\x16yy>LeW\xf8\xe7&\xaf\xf0\xe2\x1c\xea\xaa\xe9*\xdd\xb0\xa0\xd6\x95\x90\xd4h\xd5k\xfd=\xaen\xf3\x8c1;\xcb\x08\xdd\x10z6G\x14\x9f\xed\xe1\xbb\xb3\xdb's\\\xa3'g%Y\xe0\xab\xbc\\\x12\xf1\xfaj\xbf=\x956\x9b\x0d\xaav\xe7\xf0=\xae\xdf\x90\x05\xbe(\x97\x04~np\xa5p\x07\x99\xb8\x01\xc6\x82\x9f\x86\xa5|%\xd9b\xa1\xe9\x8bE\xef\xedG\xaa\xc3\x02\xe9\xeaH|\xfc\xf4\xeb\xaf\x8f\xcdp\x19\xd0&\xcb0\xa5\xcb\xa6\xb8K\x9cL\x06$W\x03\x9dt\xc9\xc8\x15\x9c \x92Z\xf4_YOT\xb76\x00\xceF\xf8\x13O-\xa0\xbfG\x96fob\xd6#\xbd\x1d\x87\xa4O\xd7\x90\xf5X\xf3i\x9a\xe9\x7fyCE\x9d\xa3\xa9\"\xa75.y\xcdG\xd4\xfb%\xae?\x91\xca\xa0Q\xc7\xbb\x1e&e|7[\xa3\xb2\xc4:\xa0\xd5\xe3egNoC\xca\xfc\xc6T\xbd\xe7`\xceS\xa3w6L\xea\xcf\xaek|\x9c}\x07\xa8\xb6\x99\xbb\xca\xc7\xc2\xa7s\xde\xba\xd9/\x8cp:|\x1a\x8a\xd1=\xdan\xaf\xa2_\x1ec\x8e\xab\xdc\xa7\x14\xd8\xf8\xfa\xbc\xc9\x8b\xc5U\x7f>\x0cx}E|\xdc\xb3\xa3\xf5\x05\xdeZ[7\x178Z\x8b\x1b\x9d6\xef2\x06\xf9\x0c\xaa\xade\xa5\x1eV\xcf\x1f\x13Ex\x1b\xb2h\nl\x87\xe7=\xae\x10\x89jT\xf25>O\xed\x15\x96amfk\x9c\xdd\xd0F\x1f\xe7\xb7O\xfd($\xcb;\x8bH\x16\x04\xff\x97\x90\xf4B\x7fd\xa8\x08\xd1\xae\xe8\xe2f\x94\xf1\xb5B\x1c\xbf\xcf\xcb\x8c\x9fU\xca\xf8~E\x177\xf0\xf5\xec\x8f\xdf\x1c\x1f\xbc\xd3\x8b\xb2:2\x1e\xc8\xcf\xfe\xa7\x13\xc8\xb5\xd5T-\x98`\xe4\xaa\xab\xcc:`c+\xca\xda\x97a\x0d\xc2HE\xef._\x0cW\x0f\xa9\x1e+\xd5c9\xc7\xb6\x0f\x9e\x07\xa9\x1e+\xd5c\x19\x9fL\xf5X\x9cR=\xd6!\xa5z\xacT\x8fe\xa2T\x8f\x95\xea\xb18\xa5z\xacT\x8f\x95\xea\xb1R=\x96\xa0T\x8f\x95\xea\xb1R=V\xaa\xc72Q\xaa\xc7J\xf5X\xa9\x1e+\xd5cuh\x8a\xda\x98T\x8f\xc5)\xd5c\xfdZ\xea\xb1\xe2k\xa1\xe8\xae\xcc\xf2R\x1e\xf2b\xa8\x84z/\x9ei\x0b\xa1x\xf1\x93|\xd1T\xff$\xdf\x91\xbf>\xd8\xf2\xa7^\xf7\xbb$x\xcd )0\xea'\x82\x9cP\x9f\xecz \xd2\xd7W\x98\xa2t\xd2\x82\xa4\x84\xec%doO \xd9K\xc8\xde\x9e\x12\xb2W'dOO \xd9S\x94\x90\xbd\x84\xec%d\xcf3JJ\xc8^K \xd9\xebRB\xf6\x12\xb2\xa7\xa1\x84\xeci\x9fI\xc8^B\xf6\x0c\x94\x90\xbd\x84\xec%d/!{\x1d\x9a\x02eI\xc8\x1e\xa7\x84\xec%do\x7f\xfc9\xae\xe9Y\x81jLk+\xcc\xf7\x9a?\xd2\xde\x07\xf5\x1e\xd7-\xe2'\xde\xde\x9f\xa8\xfe\x15\xc5\xb5 \xf9;d#\x1f|\xb0 \xa0\xb8\xee\xc2tY\x8e5\xf3`\xbb\xdb\xc4v\xa5^}\x0f(\x93c\xcf\xb63\xc3\xe2\xb8\x9f\xce!\x1dxH\x08\x1eX\x18\xf8\x88*\xc8'\xa7\xa2(\x14\x17\xb32\xd3'G,k\x85\xa9\xf11pcd\x10\x81\x93\xd9;\x80\xea\xb57V\x06S\xe1e\x10\x89\x99Y\x192\xe5z\xe3f0\x1e;\x83`\xfc\xcc\xcaJ\xe6\xf5\x8304\x98\x1aG\x83@,\x0dB\xf14\xbbe\xb7X\x9b/\xa6\x06S\xe3j\xe0\x87\xad\xc1\x94\xf8\x1a\x8c\xc6\xd8 \x0eg\x83\xa9\xb06\x88\xc2\xdb\xec\xc3\x01Q\xbcpcnp7\xb8\x1b\xdc!\xf6\x06w\x83\xbfA \x06\x07q8\x9c\xcb\x05\xfbaq0-\x1e\x07\x01\x98\x1c\x84\xe3r\x10\x81\xcdy\xb8\xcc\xc7\x1e\xf8\x1cL\x81\xd1\x81\x0b\xa7\x03\xff\xf0\xcc\x03\xaf\x83\xc0(.\x18\xb7\xb3r\xe3\x98\x9e\x07v\x07\x01RN\x88\xe1A\x10\x8e\x07Scy\x10\x89\xe7\xd9\xed\x8a\xba1=\x88\xc7\xf5\x8c\xfcX\x8b.l\x0f&\xc3\xf7\xc0\x1f\xa6\x02\x1f\x9c\x0f\xc2\xb0>p%\xe7#1?\xf0\xe0k\xc9\xffM\x84\xffA\x94r\xfdq@\xf0\xe8e\x04\x1e\x08\xb1\x98 \xd8\xb5:\x1d6\x08\xfe\xf8 xb\x84\xe0\x8d\x13\x82\x9f\xd6\xc3\xf1B\x08\xc2\x0c\xc1\x8a\x1b\xc2T\xd8!\x84\xe2\x870\x12C\x04\x0f\xf5\x06`\x89p\x17x\"\xf8\xc8h\x19 \xd3a\x8b\xe0\x83/\xc2\x08\x8c\xd1\xc8\x90=h\xc3\x19aj\xac\x11\x9cx#\xc4b\x8eFnb\x8dj_\xae{`\x8f`\x85H\xc0\x8aAB\x14\x0eide\xc5'!\x16\xa34r\x13q\xa0%k6\x1dV ^x%D`\x96\x10\x86[B\x0cv \xc1\xf8%8f[\x07\xa6\x04\x01\xb8\x92/\x96 1x&\x84b\x9a`\xefx\x0c\xb6id\xd6A\x0e}\x87\x8c\x1f\xc6i\x1d\x10\xe5\xca\x8es\xc2\xb4X'\xb8\xf0N\xb0c\x9e\xc6wb\xb1P\x98\xd0v\x030Q\x08\xc2E\xa1\x83\x8d\xf6\xe9\x96\xd4y\xb9\xba\xda\x92O\xa6\x03\x94\xbd2\x136DO\x90\xba\xe9\xf9j[\xe5\xa4\xcak\x07\"6\xaa\xb5\xfei\xa5\nP\xd4\x9eU\xaa\x05g\x15m\xd1*/\xf9\xb78\x14\xb6\xd7\xc6\xfeA\x91\xe7\xc6!\n\x14\xd7\xa7\x90\xd7T!\x12\x14\x9aR\x18\xf3B$]?\xe5\xb4o\x1fv\xbb\xd0\x165xm\xef\x1d0j7\xfbv\x19\xa9K\xd6\xd3^_Ei\xafo\xda\xeb\xbb\xa7\xb4\xd77\xed\xf5\xdd\xd3\xa45\n!\xf5 A\xb5 i\xaf\xef\xd8:\x84\x88\x1a\x84I\xea\x0f\xc2k\x0f\xd2^\xdf1\xb5\x06!u\x06\x115\x06i\xafo\xda\xeb\x9b\xf6\xfa\xfa\xd6\x08LZ\x1f\x10S\x1b\x90\xf6\xfa\x9a\x1es\xd6\x00\x04\xe0\xff>;YCp\xff\xb4\xd77\xed\xf5\xf5\xc1\xf0\xd3^_Ncp\xfa\xb4\xd7W\xc7\xc9\x89\xc5\xc7\xe2\xf0\xc6\xb9!\xed\xf5=\xa4\xb4\xd77\x02?wc\xe7\xa1\xb8y\x00f\x1e\x8c\x97\x87a\xe5i\xafo\x18\x1e\x9e\xf6\xfa\xb6\xf4\x9b\xdc\xebk\xbbU}\x8f\xc0\xcenpw\x16\xb4AW\x12\xc3D\xd2\x85V\xb8n\xaa\x92'\x95$\xac&\x81\xa2\x16\xf0\xe4\xa9\xa0\xd5 g\xc2\x11L6\xec] \xe6[6\xe1\x91\x92\xaf\x15\xc9rIq\xcd\x96_}q\xa1\x93\xca\x1e\xe0\xd4yy.\xda\xea\xfcm\x7fQ\xfc\x12\x15=\xd0\xce\x90$\xd0&\x064J\x14\xf2\x99\xf48X\x94\xcb\xcepU\x96\xcd\x06Wy\xa6\xfe\xc6G[\x86J\xd6\x1f\x91\x15Y\xe3R)\xbe)\xdbD\xd4 \xfc\xbc\xe0\xdc\nL\xe9^\x85\"u\xd3P\xa6\xea\x1b\x1c\xa8\xcf>\xfb;V\xee\x00\x12\xd6\xa8\xb7\xc87\xb9\xafv\xf9\xb3mI\x83\x01)\x16I\xca\xae\x05K\xd0\xb5)\x06\xe0\xa5HIt\xfft\xb1\x84\x02/k\x85\xacK\xa8]\x05\x8d<\xbf*\x06\x88h\x84\xe9y\xbe\x03\x8c\xb25\xa0\xed\xf6\x1e\xb5\xd8\xc5\xbb\xf7\xef\xdbt\xd9y\x83i\x94[(\x81\xbaj0\xb0\x7f\xe4\xe5\"\xcfP\x8d[\xa4Ej\x90?(\x0d\xa9\xcb./\xb3\xa2Y\x0cBB$Zi\xa1\xae\xc1\x17\xe3\xc0i'\x03\xcb\\w\xa7~d\xe0\\>^\xd0\xc1\xd7\x1at\x81G\xd1\x15\xa6\x12\xe2\xe6\xc3k?\x1e\xd9\x90\x9b\xc9\xd1\x94\xafJR\x0d\xf2\xd7j4\xf6\x9b\x10\x9a\x19\xfba\x87\x87\x83k>`\x85oq\xd5{\xd5\xf6\xf1\xe4\xd3\xc3\x0f\x97w\xea%*\xac\x1f =>\xac\x0d\\rd\x8fT\x0b\\\x0d\x13X\xfa\xab\x92'\xd5\xc6T\xc7V\xfc\"Ne\xf8\xbb\xe0e8\xb8B[M\xa1\x8e\xae\xe8\x95E\x01\xaa\x01\xc1*\xbf\xc5%\x08\xce\xa6S,t<\x1f)M\xa4s,\x14\xd5\xf7PA\x91\xce\xb1\xb0Ph\xcd\x87\x95\x99>\xf1o\xc9\x83M]\xfb\x01\xee\xfa\x0f\x88\xa8\x01\xb1w \x9dc\x11[\x17\x02\xc1\xb5!VV\xe9\x1c\x8bt\x8eEl\xfd\x08\xc4\xd5\x90\xc0Tu$\x10UKb\x1f\x0e\xe9\x1c\x8b\xb0\xda\x12\x08\xac/\x81\xb8\x1a\x13\x97\x0b\xf6\xab3\x81ikM \xa0\xde\x04\xc2kN \xa2\xee\xc4\xc3e\xa6s,\x04\x05\xd7\xa4X\xb9\xa5s,\xd29\x16\x03\x9a\xa6v\x05\xfcK0\xc0\xa7\x86\x05\xc2\xeaX\xc0\x052\xa6s,\xa6\xad\xa3\x01g-\x0d\xc4\xd6\xd3\x18\xb9\xa5s,\xfc\xeao\x8c\xdc\xd29\x16\x9eu9\x10\\\x9b\x03\xe9\x1c\x0b-\xc5\xd4\xed\x18\x99\xa5s,\x14\xa5s,4\x94\xce\xb1H\xe7Xh\x1fpf\x94\xd29\x16\xfb\x9f|\x95\x99\xce\xb10\x945\xa4\x93,\xf6d\xb1\xa6t\x92\x85\xe6\xf5t\x92E@5C:\xc9\"\x9dd\xb1\xa7I\xab\x14B*\x14\x82\xaa\x13\xd2I\x16c+\x11\"\xaa\x10&\xa9@\x08\xaf>H'Y\x8c\xa96\x08\xa94\x88\xa82H'Y\xa4\x93,\xd2I\x16\xbeU\x02\x93V\x08\xc4T\x07\xa4\x93,L\x8f9\xab\x00\x02*\x00|\xcei\x08A\xfe\xd3I\x16\xe9$\x0b\x1f\x14?\x9dd\xc1i\x0cR\x9fN\xb2\xd0qr\xa2\xf1\xb1H\xbcqnH'Y\x1cR:\xc9\"\x02Aw\xa3\xe7\xa1\xc8y\x00j\x1e\x8c\x98\x87\xa1\xe5\xe9$\x8b0D<\x9dd\xd1R:\xc9B\x92\xda\x1e\xbd\xee\xee\xa5\x05\xb9\xdbx\x90\xca\xdeo6\xae\xab&`K\xbdsG}:;\x03\xdcZLgg\xdc\xa1r\xdd\xa7>\xa4\xb33\xa6\xd0b:;#\x9d\x9d\xf1k=;c\x91\xb3\x811o\x98&\xda\x8332\xb2\xd94e^\xef\xae\xb6\x84HP^w`\xc6\x0b\xf5\xdc%!E{L\x86@\x1e\xe5/\xc08@F\xf2\x92j\xcf\xc7\xe8\xb1x\xa4\xfa\xf8@O\xc5\xd8k\xa3K\xf5=\x14L,pI6\xd1P\x01\xda\xb0\xc1\x1d\xf9\xbaO\xa2\xfe%\xce^\x90\xbcS/\x075\xb9\xc1\xa5\xcc\xb3\x0b\xe9\x95'b\x91>\xfbS\x96o\x90\xbe\x00^\x88k\xca8\xbfy\xfb\xe1\xbbs\xbef\x16\xcf\xc9\xc5g\xce\xf1\x81\x978\x93ay\x8b\xc9tcs-C\x91\xaa\xd07F\xf3U\x89\xea\xa6\xc2\xb4\x1d\x89l\x92Z\x91\x15\xe1\x81\xf0\xe1z\xb6_J\xc8\x06\x83RJ\x7f\x8c\x1c\xd3\xfe(\xd1\xbc}\xa0l^:\xd5\x1bA\xf1\x05X\xfd\x818x$UaIJUX6\xbfr\x07\x00\xe6p\x06\xfbO9\x1fZ\xe7\xaf\x05.\xf0\x8a\x1f3t\xf6K\xfb\xef+y\xd8\xcf\xdf\xcf*\xfc U\x0bj\x9e\xd7:\xeb\xb7\x97\xe2\xf5\x9c\x94\x1fX(\xf4N\xbc\xda\x9b\xebD\x8c$\x99\x02\xca\xb2\xaa\x11^\x01\xf1\xe0\xb5e\xd5V#k'B}C\xf2\xc9\x07;#\xf6T\xd9\xa5\xfb\xb0\xdfV\xc1Wc\xcfu\x12\xdd\xb2\xbf\xae\xef\x9b c\x0f\x059\xfa)\xc8\xd5[A\xd6@@\x90\xb3\xb7\x82\xecA\x81 /V>\x01\x82\xa0\xe00\xc1\xaa\x08\x1e@8\x82\x05AQ!\x83\x85\x9fL\xf4\xd9\x02\x07A\xe1\xe1\x83\xab\x10[\xd0\xdey\xbcT\xeeN8\x90}\xceS\xf8\xaa\xbdQi\xf9\x90%W\xbbdqL\xd5\xbf\xd9\x07\x10c\xc2\x11\xe0(/\xd8~\xd1\xa2\x90q\x88\xc6;\xb6\x0d\x0d\x99\x1aj\xf4\xef\xc3\xa7\xa4@\xbb\xa5\xa8QsO\x81\xb6\x98\x93\x95Vx\x8dN\xb3\xe1\xe6\xdd7HK\xb4}0\xd4x\xe8\xa1\x9f\xa6\xe3\xc3nC|\x91\x02nI)\xe0\xfe\xc2\x01\xb7\x0do9\x88\xa5M\xa6x\xf0`o(\xb6\xbf\xaa\xf37\xa1&rS\xd8\xb2?\x19\x8c\xc4s\xeep\xf1p\xf6\xcbA\xb4i9Yv?\xca\x03\x17\x10\xfb\xf9\xd7\xb1hH\xeb\x85\xc3\x9f]\xc3/\xcd\xed-\xfd#\xcd\xed\xc3\x18\xd3\x15_v\x06\x8f\x86\x9bk\x9a\x9fp\x86O\x93\xfb\x80\xd2\xe4\x9e&\xf7\xe8\xc9}/\xf9\xc1Ll\x92\xfc\xe0\xc1\x9e\xe4\xed\xafw-\xf9]\x84%\xc3\x93\xd5-Q\x08\xa9\xda\x9d\xd6\xfd8d\xcfc\x90\x08\xb0\xc5\x1e]n\x8f\x94.\x1eh\xf4qG\xc7\xcf\x1bF\xa1{\x8e\xef(\\k\x88\xb4\xfb\x11\xd8\xcc\xa3f4\xed\x98_\x0e\x13)\xfe\xf3\\\xf7#\x8e\x9e\xe9z\xf6\x95\xe6:Ii\xaeKs\xdd\x83\x9a1\xd82bQ\xa1O}\xb0\xc4:o\xfc\xb7|\xe5\xb9\xec\xad\x9a<\x14\xabV\x0d!\xd3\xc7\x80\xe9#\xa5\x9d\x07:\x87\xe8\xd5\xd6%\xffIa\xc8+\xd2\xb8\xc2<\xfd@\xdf\x13\xb8\xfb\xa1Y$\x9f/)\xf9\xfc\xe4\xf3\xbf\xac\xcf\xe7\n\xb0\xb8\xf2K\xfe{\xeb\xb8\xc5\xe3\xed\x8e\xa0\x0eG\xd8\x90ES`\xbd\xeb\xee<'\x18>R\xdd{\xa0N\xbb\xab\x96.\xf5\x8b\xb3\x842\xba\x1f{oOJG}\xb5\xec\xc9:\x98\xecCi_mY\xa3\xcf\xe6\xb1f\x19\x0dsD\xf1U{\x06\x9f\xadx\xc1\xc5\x88\x94\x0d\x9d\x84Soj\xbb\xc2%\x9a\x17\xd8\xcaiX\xc6\x0b\xce\x15\x14\x1f\x10\xc2\xfe\xbc&19m\xc9!\xf0\xee\xf2\xc5\x80_\x9a\xb2\xd2\x94\xf5\xe5\xa7\xac(7\xbf\xcf\x10\xe8p(^\xbf\x9dS\x9a\xab\xa3-u3A\xbbF\x7f\xd1>\xdcN\x0b(\xcb\x9aMS\xf03!\xf6\xbc\xf88B\x8e26\x0d[\xf9\xd8\x83\x9d\x1c\x86\xda\xeaRO\xa0\x8e*\xba\x93\x84\xf8s.\x0fs\xdag\x11+\x9c\xe1\xfc\x16kJfFN\x16&a\xc11\xac\xc0U\x99\xe6\x18^\xe0\x94N\x90\xb3&\xcdc\xa4\xb8\xf05\xf0c\xe3\xce\xc1 \n\xc6\xda,\x9d\xf7\xadC\x8b\xc2\xdc\x8c\xdci\xec\xc9\x8b\x10\xfcJ\x10b\n\x10\xec\x85\x06Qe\x06\xbc \x03Cg\x91\xc1\x04%\x06\x91\x05\x06FX\xd6\xaf\xbc`TqATi\x01\xa0\xa20i\xd1\xaf\xb0 \xa6\xac\xc0\x06\xf6y\x15\x15L\\R\xe0UP0a9\x81\xb3\x98`\xa2R\x821\x85\x04\xc1e\x04\x13\x14\x11L\\B\xe0( \x98\xbc|\xe0n\x8a\x07&/\x1d\xf0/\x1c\x88+\x1b\xb0(\xddU40Y\xc9\x80_\xc1\x80&ca\xf6\xaf\x13\x17\x0b\xb8J\x05F\x16\nX\xca\x04\x9c\xe1\x89\xb3D\xc0/~\x99\xb6<\xc0U\x1c\xe0\x96)\xae0@yv\x0dCWY\xc0\x84E\x01#J\x02\xf4\x85<\xb6\x82\x80i\xcb\x01\xec\xc5\x00S\x94\x02xa\xd9\x8e2\x00\xef\"\x003^\x17^\x00`\xe6\xa5\xcd\x8dO\x02\xfd\x87(\xcb\x17\xf6w\xeb\xc4\x1b\xf2\x8f\x00\xfc\xf58\xc2D`\xbf\x17\xd4\xef\x06\xfa}`~\xab\x16C!~_\x80\xdf\x04\xefO\x00\xee\x07@\xfb\xf1\xc0\xbe\x05>\xf7\x05\xf5'\x86\xf4-\x12i-5\n\xccW9X\x0d?\x03\x94?1\x90o\x86\xf1cA|\x9e\x11\xd0 \xae\x87\xf0\xa7\x05\xf0M\x0b?'xoB\x17M\xc0\xfd\xb4\xb0}\xa9O\xf9\xb9!Uc\x18\xaf\xce\x8f\xe3L\xb2{~=iu[\\e,\"]\x89d2\xdf\xa4Mkt\x839\x0e\xd5NB\xa2Z\xc6\x84\x0c\xca=\xe7\x1c\xb32}\xb6\x8c\x944_`6@xJ_g\x06\xf5\xba\xc2\x94\xd9\xcf\x03\xd1\x0d\xb3\xd8J\xadY\xff\x1f\xa6\\\x13Tl\x80\xef\x8c\xcf-\xa2\x06D\x05\xe0\xa5\xcc\x82H\xab\xfez\xf6'\xdd\x93\xb7\xb8&W\x0f\xac\xf7b\x85O\x96\xf0_X\xda\x00\x1f\xd3\x1f\xb8\x89\x88\xff\xe5\xc1\x9a\x05\xcc\xef*\xc9l\x19\xac\xf3x1\x1b\xaa\xea\xc9\xd97}Uy\x14~\x89\x801\xa4\xecKF\xaa\xef._\x0c\xf8\xa5\xa2\xafT\xf45Y\xb4\x93\x8a\xbeR\xd1\x97\x9eR\xd1\x17\xa7T\xf4uH\xa9\xe8+\x15}\x99(\x15}\xa5\xa2/N\xa9\xe8+\x15}\xa5\xa2\xafT\xf4%(\x15}\xa5\xa2\xafT\xf4\x95\x8a\xbeL\x94\x8a\xbeR\xd1W*\xfaJE_\x1d\x9a\xa2\x00'\x15}qJE_\xbf\x85\xa2\xafN\x05T\x87\x8fm%\xd9y\xa3\xc5\x9b\xc5g\xeb \xce5\x91\xf7\x8a/Iu\xaa\x0e\xa0\x17g\xc5\xf7\x98\x1d\x89:\x80\xa3\xd3\xbez\x8f8L\xcd~`\x0b\xad#\x89\xbc\x1fMXD\x16T-&\x81?\xf9\x82\xb6DL=\xd2\xaf\x12k\xff\xda\x9e\xf9\xbc\xcaoq \xb4FuC\xb5\x85b-\xa7G\xaaS\x0f\xb4Pl\xa0\x95.\xd5\xf7\x80\x7f)q\xaer\x03\xe2\x1c\x94\xff\xb1\xdc)\xcf\x11\x01se\x91\xa3\x1b\xe0\xd1\x15\xf0\x80\xf3\xc0\xaf?\xe0\x99\x16R\x14\n\xedY\x99\xe9\xf3;\x96\xe5\xce\xd4\x10\x1f\xb8a>\x88\x80\xfa\xec\x1dP\x07k\xfb\xc0}0\x15\xe4\x07\x91\xb0\x9f\x95!S\xae7\xf4\x07\xe3\xe1?\x08\x86\x00\xad\xac\xf6\x87o\xfb\xc3\x8005\x14\x08\x81p \x84B\x82v\xcbn\xe1B_X\x10\xa6\x86\x06\xc1\x0f\x1e\x84)!B\x18\x0d\x13B\x1cT\x08S\xc1\x85\x10\x05\x19\xda\x87\x83\nA\\\xe3\xe6N\xa0C\xb8C\xf8\x10\xee\x06B\x84@\x18\x11\xe2\xa0D\x97\x0b\xf6\x83\x13aZH\x11\x02`E\x08\x87\x16!\x02^\xf4p\x99\x8f= F\x98\x02f\x04\x17\xd4\x08\xfe\xe1\x99\x07\xe4\x08\x81Q\\0\xf4h\xe5\xc6aI\x0f\xf8\x11\x02\xa4\x9c\x10\x86\x84 (\x12\xa6\x86#!\x12\x92\xb4\xdb\x15u\xc3\x92\x10\x0fM\x1a\xf9\xb1\x16]\xf0$L\x06Q\x82?\xd2\x06>P%\x84\xc1\x95\xe0\xc2\x17\"aK\xf0\xe0kIaN\x04aB\x94r\xfd\xa1L\xf0\xe8e\x04\xa4 \xb1\xb0&\xd8\xb5:\x1d\xbc \xfe\x10'x\xc2\x9c\xe0\x0du\x82\x9f\xd6\xc3!O\x08\x82=\xc1\n}\xc2T\xf0'\x84B\xa00\x12\x06\x05\x0f\xf5\x06\xc0\xa1p\x17\x90(\xf8\xc8h\x19 \xd3\xc1\xa3\xe0\x03\x91\xc2\x08\x98\xd4\xc8\x90=h\x83Jaj\xb8\x14\xfe\x7f\xf6\xde\xb6;n\x1b\xcb\xf7}\xefO\xb1o\xee]\xc7\xc99\xb24\xe9\x9e\x99\x17>7g]GV\xba5\x93\xd8\x1aKNV\xafY\xb3*T\x15Tb\xbb\x8a\xac&Qz\x98\xcc|\xf7\xbb\xf0D\x82,%<\xeb-\xcc\n~b\x1f\x19\\\x986\xf8@T\xcbp\xa8\x16\xf2\x86k!\x16\xb2\x85p\xd8\xd6{\xce\xd4p.d\xec\xbb a]H\n\xed\xc2\x8e\x90\xbc1\x15Z\xdc#\x04\xc6*_6/\xc8H\xe9\xc5\x87\xf7\x17\xef/\xdf\xfc8\xbb\xbczs\xf5\xf1r\xf6\xf1\xdd\xe5\xc5\xd9\xe9\xf9\x0f\xe7go\x13\xcez{v\xf1\xfe\xf2\xfcjvq\xf6\xe1\xfc}\xca\x89?\xbf\xbf:\x7f\xf7\xa7\xf4\xf3.\xde\\^&\xd5\xf0\xc3\xd9\xbf\x9c\x9d^%\x9d\xf2\xc3\x9b\xf3\x1f\xbd'\x98\x94\xcb \x0e\xc4\xae\xaa\x98\xd8\xf1\xa5\xec\x03\xf2N\xcao\x7f\xf5p\xea\xb5 \xf9\x1b\x93\x84\xb2\x7f\xe8\xe9\xd3\xdb\xfd]0\xd8\x15\x82\xcd\x1c\xe4\xa9\x9b\x19d\x97^;\x0c\x8e\xa3.<\xecM\xbb\xd7\x1e\xfen)5\x8c.\n\x8b\xad|\x0b\xaazI\xe8\xc0\xef\"\xaft\x81\xb6H\xdf\xdd\xad\xe5\xe0g\\%\x15>\x91\xb3\x8e\xea9\xd9\xad\x9c\xfa{\xa0V\xa2?Y9\xd2\xe25t\x1b\x88\x0bm\x8a\xb6eiU3O\xe4n\xe5\xcc/\xf9\xaaw\xcdX\x05\x0d\xfb\xabL\x80N\xaa\xa5\x1a\x04v\xeb\xa8\xfe\x9e\xaf\x867E\xb9\xf2U\xed\xa6\xac\x8a\xd5LIC\xa8\xd8\x90oD\xc7\x0e-\xbb%\x9a|t\xf9\x8b\xd2\x950\xd2 \x91E\xe5np\x81_nY`z. \"5\x1f\xe9\xdcrW\x16\xb0\xfcpqz\xa4\x83,F\x15\xa5\xaa\x03Oj\xbd\xd9*\x01\x8cm\xc5\xcbU8\x00k\xae\xf4\xb2\x1dj\x94\xc8\xb9\x1a\xab\x16\xfe\xde\xc0\xf3\x90\x1f/\x1fY\xfbr\xef\xb8Bq\xdd\x8ao\x97\xbd\xcbyY\xd5\xfbW\xa6\xaag\xe2[lv\xc7x\xbdWa\xed\xf6z]\xf2\x19/\xd79\x92\xbc\x16\x05g\xafDY\xce\xe3\x8c\xf8\x0c\xab\x16OsA)W\x12\x96g\n\xa3U\xca\x82\x12M\xa8^\x8a\xeb\xa7\x08\xa1&\x94s\x00%\xd6\x84,\n;\x9c%K6E+\x1f\x0ew\xe6\x95sB\x0b:M\x95t\xd2\xaaj-/\x9a'z\xda\xf4\x15\x9f\xe8a\xc3t\x133\x99\x1eLV\xe7u\xc3\xf4\xbd[\x8b\xaf\xe9F\xbf\xb6\x97\xf5\x1dk\xaabw\xc7-e>\xb5\xa8M\xb1\xd4\xddl\xb7\xc1\x83:\xf6\x07\x8e4\x9e\xba?\xeb\xb5G\x17\xf0\xa9,\xf8\xe0\x87\x1f\xf8\x8a=\xf0\xd9'\xf6\xe8\xbe+\xd1{\x12\x8dp\x0f\x9a\xfa_\xbe\xa7\xd6\xd4\xc2L<\xc4\x7fjHD\xce%\xc5?.\x8a%\xfb\xa0\xc4'\x8f\xd5\xef\x9e\xc2\x14\x9d,\x8a\x11\xc5\nG2X\xd7-\x07&Q\x0b\xc9h\x1c\xc39\xb7\xd6N6\xfc\x11J_\xec\x94\xdf\xb2\x86IF\xa7\xaaa-z\x89fr\\\x0f\x98\x1c\xe9\xf7tf\x80P\xe5%_\xb1\xc0\xf0\xa7t\xb1\x84\x17\xe5\x7fT[\xd1\x91E?6\xca\x03V\x9a\xbb\xaf\xbd\xb6\xa3\xe7bD\x9b\xc9\xc2|C\xd1}\xd1B\xcb\xf8\x11\x94\xbc5\x84T\x0b\xdbJu\xe6\x85\x82@\xee\xcbv\xd8?0\x1aI\x86BF\xc9$\xb9J8\xe9\xd9\xed\x0f\x17\xa7\xe3\x06\x90p\x12 'E_9\x98\xd7 L\xa0\xabU\xdf%\xe1$\x04I\x9d\x85\xa2\x9eBP\x93pRFZ:\x85\x94N\xa2\xa4I8i_\"z\x02\x0d\x9d\x85\x84N\xa7\xa0I8i\x1f\xea9\x85x\x9e@;\x93p\x12 '\x91p\x12\x96V\xceJ*O\xa1\x94I8\xc9wX\x94FN \x911\xb2@)\x042 '\x91p\x12\x86&&\xe1$i\xfb\x10\xc3$\x9c\xe4*)J\x05O%\x82\xbd\xef\x06\x12N\xda5\x12N\x9a@\xf2\xc6)\xdeT\x827\x81\xdeM&w\xd3\xa8]\x12NJ#sI8\xa93\x12N\xd2\xd6 '\x19\xbd\x19EoYe\x85\xa2\x99\xa3\xb3\x06\xc1\xdc\x1e\x03\x93\xa1]\x13\x95\x1a\xcf\x93\x9e\x14\xbb\xfc|\xa8\xa5\x13]\xfcLH%\xb2.\x87D'\x9d\xb8\xe4\xd3#\x92!,\xf2iQ\xc8]\xfc\xb1\xac^\xab\xb0\xbe\xf5\xb7^\x12\xec\xa6X\xb5\x11M0p\xd2\xefx\xe2=\xf6\xb0D\x0e\xf6\x93\xed(\x9a\x1dI\xb0#\xa8\xf5$R\xdd\x8c\x87w5\x1f,w\x0dFA\xf9\xe3`\xf8Q\x7f)\x16\x8b\x86\xb5\xad \xcf\xdb\x83^_R\x86\xfbj*\xa9\x07\x9a\xda[\xd1\xee\x80\xd1X\xa9v~\xd3\xd5e-\xdc4\xf5\xfaIj\xdc\x13>\xc7\x9f\xd8\xa3\xaf\xda\xa3\xb7\x8c\x86d\n=So\x18\xdf6\x95\x8c]hnC\xf3\x08\x1dQ##\x0e\xcb\xd1\xd2|\x87\xdf\xf2\x08%\xf3^|W)q?\xa8onZ\xc6\xa1n`X]\xb0\"\xa6-\xe3\x99\xbd\xe5Y\x7fv8Q\xd5\xcf\xe7\xc7\xd1\xda\xafn\x8ct\xa5\xcc\xa5(\xe7\xe6orL\xd2\xba\x86j\xf1\xfd\x96U\xc6\xf1\xdb\xaa\x8bw\x8c\xde\xde\xe7\xb2\xb4\x95\xe8\xf3\x9d\x0bU\x84`\xdb\nW\x7fb\x89\xfe\x1c\x16\x7f`\xe7\x8e\x98#\x87{W\xe5\xba\xc4zW\x1ekp\x1d\x1f\x8a\xa4bav\x0fV\x9f\x9c\xe2\xd7Ai\x1b\xb5\xf2m\xff\xe9\xfc\x06V\xec\x86\x1btK\xb3\\f\xe2#\xc3x\xea\x01Q\x17\x11~\xbe~\x04V\xcco\xa1\xd8l>\xa3\x17m\xa0\xaa??\xe4K\xeb\x0c\xe1Q\xd9Ck)\x83 \xe2?\xcajQ\xce\x0b\xce\xba\x80\xbe!\xf5\xc5\x81\xba#\xd9\xc5\x95\xd5|\xb5]\x8cV\x1e\nu\x95\x8e\xa8\x18\xdd1\xc9\xe7X\x81>\xb9\xaf\xa0\xcd'\x0e\n\xfbx>\x9e\xd8\x8e\x9a \x17k\x1a\xd6j\x92J>^\xfd\xf3(\x1e\xb9c\xfd4\x95\xcb\xaanFaR\xf34\x0e/\xa1<\xb3\xef\x8d\xbd\xae\xeb\x15\xb3\x88`\xc7\x0dl\xd8\x1dk\x06\xa7\x86n\x9e>z|\xe3J\x0b\xc8k\x98\xfbI\x18\x94#\xae\xc1* \x90\xd4\xcd\x825\xe38\xc9eY\xcd\xd9kP\n\xa7\xaf\xda\xc5'\xf8\x87\xe3\x7f\xfccVoL\x92U=\xf9\xad\xfb,*\x17\xa1}\xb8\xcd\x84\xd0h\xacnzDW\x02e\xbd\xc6\x999\xf4\xfc\xad\xb9\xdbN\x91\xd5\x17\xa6\x8d\xcf\\c\xd5G\xcaM\xa2y-g\x1f\x8aA\x0dj\xa4\x06\xab\x0e\xd1\xea\x03\x82\xd9C\xb4\x01\x90q_e\x93\xc8\xbd@yI\xaa\xa8Y\xe9\xbd(\xbf\x97\x9b\xe0\xc33|\x99(\xbei\x1c_\xa0\xb8D\x1d\xd4=Y\xbe\xdc4_\"\xcf\x97\x99\xe8Kc\xfa\x12\xa9\xbeP\x1f\x9e\xa0|\x9a\x95\xecC\xb1}\x19\xe9\xbe}\xf9\xbeI\x84_&\xc6o\n\xe5\x17(\x0c\xadtz\x00\xd2\xefp\xac\xdfAh\xbf4\xde/;\xf1\x87e\xfe\xb2R\x7fx\xee/\x99\xfcKg\xff\xa2C!N\xd3to\xfe/\xaag\x8a\x9aP!(\xc0\x94YW2 \x18z \xa2ULq\xf5\xcb\xc8\x03\xa6\x10\x81\x99\x99\xc0iT`\xa8\x07\xa1\x94K'\x92\x81\x9e\xd28J\xb54\x0f\x1d\x88F\xdc\x10\x84`\x12#\x18\x13\xfd\x9b\xc2 \xc6\xca\xf4\xf2\x02\x99h\xc1tg\xe2\x89\xc1X\xdb&P\x83\x13\xb9\xc1\x10w\x91\x8d\x1dD\xd3\x838~\x10K\x10\"\xbc\x9cN\x11\xa6p\x84a\x1d\xd2,,a\"M\xb8\x1fO\x18sh\x02Sx\x00\xaa0Z;oO\xcf\xc7\x16\"\xe8\xc2\xe9|\xa1\xa78\x1e\xd5\x1b\xcd\xca\x18\xc6(\xc3\x89\x9c\xa1\xa7\xac\xb8\xce(\x825\x0ck\x8c\x86\x14Fs\x13\x87\xd9\x99C?u\x98\x93;\xc4\x90\x87\xe9\xeca\x12}8\x81?L%\x10#\xaa\xa1\xe1\xdaa\x990,\x878\x81DLd\x11\x03\xcd\x9d\xc2#z\x8aB\xe8\x84Na\x12\x03]>\xae\x11\x9a\x91K\x8c\xea\x83\x1e\x82M\xcc\xd5\x17\x13\xf8\xc4\x14B\xd1\xad\xfe\x19\xd2\xfe\x8c~\xbf\x87t?\xf1\x0cT\xe8\x1c\x94\xe6g\n\x17\x15:+\xa8\xf7\x89d\xa5B'\x04\xb4>\x93\xf8\xa9\xe1\x89\x98\x95\x87\\*\x9f\xbd(\x91\xaf\x9b=)j\x1a\xba\xecSA\xa7\xbdE\x943?\x13\x88\xda[r\xfd\x0e \xa7\xf6\x16Q\xf5|z`\xb57\x9c\xa2\xe7\xd3B\xac\xbd\xf9\xd5<\xb1Z\x9e\xb8\xc1#\x9f\x8eg7|\x04U<\x135<{\xadNOyQ\x05Os\x95T\xfdN\xbe?\x95\x10Q\xee\x8c\xbe\x81\x11\xaa\x9d\x882\xc2\x8a\x9d\x88\x02pj\x9d\x91\x82\xa2J\x9d\xd1\x8a\xe0t\xfc0\x1a\x9dY.\x85P\xe7\xe4\x01\xf5*\x88)sF\xfb\x1f\xa6\x07\"49\xa3\xce\x00\x94\x1e'\xa2\x18\xdc\x80\x94\xac\xc4\x89\xd0\xdb\xcc\xab\xb6\x89\xd4\xda\x9c\xa2\xb4\x89\xd4\xd9\x8c:\x1b\xd3\x81Q\n\x9b\x19\xae\x14\xbf\xed\xf9\x945\xfb)\xac\xfd\xd7\x04\xd9@\x94j\xe0H'pT\xde\x87\x8bSR \x04R \xcc6\x1eNb\x0dI%\x10C\x18f\xe1\x0b\xa7\xd0\x85\xa4\x12\x98\x91)L!\n\x93xBR \xdc\x97\"\x9c\xc0\x10f!\x08\xd3\xf9AR \xdc\x87\x1bL\xa1\x0633\x838b0#/\x88\xa5\x05\x1d\x81\x00R \x1c\x1a\x82\x0f\xc4\xce\x92\x92\xd9@R D\x11\x81Sx@R \xf4\x1d\x16e\x00\x13\x08@\x8c\x06^\n\xfdG*\x81\xa4\x12\x88a\xfcH%P\xda>T\x1f\xa9\x04\xbaJ\x8ar|S)>\xef\xbb\x81T\x02w\x8dT\x02'\xd0zqV/\x95\xd4K\xe0\xf4\x92)\xbd4F\x8fT\x02\xd3\xa8\x97@\xe1\xe1\x19\xbc$\x95\xc0\xd2\x1e\xb9\x87[\xbb\xf5\x87\x0c\x02bj\xb5\x1f\xca\x05\x8c\x14\x01\xed\x11\xa9\x94{\xc3\x0d\x86\xc1^\xb0\x837\xdb\xa9\xb24\x19t#\xce\x8e8;\xe2\xec\x88\xb3\xb3,\x07\xf3D\x9c\x9d4\xe2\xec\x88\xb3\xfb=pv]\xe0\xd9W\xff\xee\x80\xd1\xce\x8b*\x06\xa8#{\xac\x85\x9b\xa6^\x0f\xda\xd1flH\x0e\xbcBn@\xe7\xe7)\xae\xc4\xcf\x1f\x14\x1dd@\n\xf9\xa2\x90\x0b\xe8\xc3-\xf7\xeej\xce\x9c\x90\x84U\xc8\x0b\xd3\xcag\nJX\xee\xb0mP\x17\xd5v\xfb\xbe7JDEL\x95\xc4o\xbboOoM \x1a\x85\x0b\xecr\x17Y{\n\xeen\x179\xd7\xbf\xab]\xe4\xc4\xf8nv\xde\x02\x10\xf1k\xab'\xa5\xc4\xb0\xaf\x1c\xc1\x0d\x8a`k\xa3\x086E\xb0{\xa3\x086E\xb0{\xa3\x086\xa7\x08\xb6\xdb(\x82m\x8c\"\xd8\x14\xc1\xa6\x086r\x96D\x11\xec\xce(\x82m\x1bE\xb0)\x82\xed0\x8a`;\x8f\xa1\x086E\xb0=F\x11l\x8a`S\x04\x9b\"\xd8\x96\xe5\x88&R\x04[\x1aE\xb0)\x82\xfd|#\xd89\"\xc2w57\xd1\x14WD\xf8g\xf1s\x17\x0b\x96\x07\xab8\xf0\xb2\xbcc\xd5Nk\x07\x81`y\xee\x0b\xd3\xdeg\x1a\x02\xb6\xdao\x1b\xff\x0c\xd1\xabh\x8a}\xd2\xeaM`\xb7\x11\xd1\xe6\xe9\xfbE\xa9\xe5w\xdf\xe9\x98\xf5\x17P \xd4\x0d\x9b\x17\\<\x02\x17\x0d\xbb\x11\xd34\x15t\xf8U]\xa0\xfd\x15\xca\xaa\xe5\xacX\xe8\xd0\xd6\x8dwf\x05\x9d\xbc\x87\x18\x1fug\xf5\x8fU\xf2sh\xa1\xa6\x90\xe5\x0d\xfc\xbab\xd5\xd7\xfa\x9a\xdf\xc0w\xdf\xc1\xb7\xbf\xea\xe9i\xc1uc\xc5+\xc4[\xdc=\x93Kz\xdf\x1e\xc3y\x05\xc5*\xb0\xdc\xa9\x16\x11\xe7E\xcb\xda#\xbd\xd4*'8#i\x1a\xef\xf9?\xbf\xbf:\x9b\xbd\xbf\xb8:\x7f\xffn\xf6\xf1\xdd\xe5\xc5\xd9\xe9\xf9\x0f\xe7go}_\x07\xd1; \xc0\xaam@\x93\xe0\x95\xef\x8a\xc83\xferv\x89<\xf2\xcd\xf7\x97Wo\xce\xdf!\x8f~\xf7\x1e}\xe0\xec\x97\xf3\xab?\xcf~>\xbb\xf2\x9db \x80\xa4\xa6\xea\xde\x12~\x84\x9e\xc7\x9ei\xe1\xa7U\x19\xa2\xa3(\x0bw\x17e\xe9\x9d\xc6u^\xa8\xeb\xb8\x8e\x8fu \xd79\x81n\xe4><\xda\x99\x94M\xeaR\xfd\xc9\xb8\xf1S\x99x\xc5\xbeWC\x14\x93\"e\x05\xd7\x13\x13\xb5\xde.Fz\xd3[\xe5\xf7\xab?(\xa8L\xbd\xd6\x97\xf5\x1dk\xaa\xa2\x9a\xdb\xf3\x99\xc8\x99\xfe\x1b\xefu\x84\xa5-R\xd5\xaf\xea\x8d]\xdd\xc0\x92\x87\xebr\x7f9\xbb|=\xfe\x83U\xfc\xa3\x9e\xbcL+\\w\xae\xd7\xae?\x0e\x14@\x14\x82\xb5\xc7\x95\xde\xbd\x7f=\xfa\xf7\xc0G{\x95\xdc\xf7\xde\xf15\xfa_\x86W\x93\xe1\x8c;\xc6\xd1\xd7U\xaf\xc2\x0c\x83\x0d\xfe)\xf8E^\x92-\xac'\xa1o\xc3\xb6*%\xb5 \xab/\xba\xbf\xf8\x8f@a\xedfUF6V\x8c\xeah\xd9\xa6\xb7u{\xe9>\xe9\xa5\xe3,L\xc3ES\xadF\xaa{S\x8999\xfa\xb1}\xa3\n\x99\xd7U[\xb6f7\xd8\x0e\xed<\x7f{\xa4\xc6\x101O<2ku~\xe7\xf9:\xc6\xa01\xea\xdb\xc1\xec\x1e'\xcaS\x1355H\xed\x842i\x9fEi\x8b\x80\xd2go\xb4\xcf\"\xe0\xbe|\xbe\xa4}\x16\xe5\xe7w\n7\xab\xbe\xf5?\\\x9c\x8eJ#n\x96\xb8\xd9\xe8;\x1b\xf3\xe2\x02\xe2f\x89\x9b\xf5\x1eI\xdc\xac4\xe2fw\x8d\xb8Y\xe2f}F\xdc,q\xb3\xd2\x88\x9b%n\x96\xb8Y\xe2f\x95\x117K\xdc,q\xb3\xc4\xcd\xfa\x8c\xb8Y\xe2f\x89\x9b%n\xd6\xb2\x1c\x0c#q\xb3\xd2\x88\x9b%n\xf6\xf9r\xb3\xcem\xbbh\x87E\x88\xbb\x91vX<\xa0s\xe3}\x94vX\xcc\xe1E\xdaa\x91vX\xfcrwX\x94\xb4\xd5\xc9o\x92\xed\nl\xad(\xf90;\xefc\xe1\xd8C\xb1\xee3@\xce\xdf\x1e)^\xcc\xbby\xe2\xcf=>\xf6\xac\xb3A|H\xc6$>,\x9a\xd3\x11\x8d+D\xa9\xa6@6G\xa4\xf0\x10\x1b\x8e\x89\x07L\xce\xe2\x80\xd2\x17\x90\xc2\xe5pd\xcd\xe0\xc0\xe6o\xec\x97\xbd\x91\x94\xbb\x11\xed\x14!\x10?\x15\xc0\xc7\x82\xf7)\xc0=\x12\xb4O\x04\xec'\x80\xf5\xc1L\x0d\x1e\xc9\xd3x\x8amA\xe3\xf9\x19\xd1\xce\xa0,\x9e\x9b\x91\xda1\\g\xc5\xf22R:\x89\xeb\x8cHNFb\x87Q6\xa1\xdb\xf4\xa7bFAe\x99s1&gb#\x10\x9c@pi\x04\x82\x13\x08N 8\x81\xe0\xca\x08\x04'\x10\x9c@p\x02\xc1}F 8\x81\xe0\x04\x82\x13\x08nY\x0e(\x97@pi\x04\x82\x13\x08\xfe{\x00\xc1e\xf8\xcdWw\xf9\xe3\xa0\xd6\xea/z\xe3\xdf.x\xb6\xf9l\xbb\xfe\x9e\xc8\xbb\xd3\x9e\xfc\xa6\xfe\x7f&\n\n\xc0}\x17\xf2\xa8\x0e\xef+V+\xeb\xf6\x9a\x1b\xb1\xac\xef`]/\xb6+\xf76\xbf\x7f\xaa\xef~\xfeV\x15\xf4\xc24\xeb\xf9R}e\xb5\x9c)\xdf\xecN\xd9\xc7\xf7\xba?v\xa4(\xd7y\xa8a+\xf9\x9d\xae\"\xf3e\xb5\xdc}}z\xab \xd10\x9c\xa9\x02k\xcaz*58h\xd3\x8f\xacZ\xf2[s_U\xf1\xa0\x8a\x1fW\\\xefi\x8d\xf3\xd5\xf0`\x84\xb3\xf4 Y\xbd\xb5.\xab\x99.\xf7\xf9R^\x0bV\xd5A:+zC\x85\x15\xebz[=\x15\xe0qZ\x976\xd2\xc1\xebO\xac\xd2\xebs\xaa9\x06=\x173\x84\xa2\xd2\x95\x0b-\x05\xbf{\x7fu\xf6ZN\xaa\xd5\xb1\x1d\x0b*N?\xaf\xb8~ow\x8b\xb6m06\xa1_\xea\xea{\xc6\x7f\xd1\xb6\\V\x05\xdf6\xac\xed\x86]\xf1\x05\xb7\xac\x97\xb5|c\xba'\xbe\x03'\xfdTV\xe5z\xbb\xee\xf6{\x97\xecVOp\xf0\x1aX%^\x07\xc1\x07K\xd8\xbax\x98u\xcfL\xb6\xa7\xdb{\x0f\x7f*\x1ed\xbd\xd5\xa5d\xb5\xdf\x08\x97\x89\x89\x91x0\xfb\x07R\x01-\xae7\xafm\xe7U\xc9\xcbb\xa5\x97\xc7a\x0c?t\xb6\xae+~\xbb\xb3\xb4.\xf7J\xc7\x8d+\xf6\xa1\x88Q%\xff.\xec\x7f\xdb\xd6\x8d\x8f\xa6\xccust\xa7\xda\xb0f.f\xc2K\xb5\x88-\xf33Z^|b2\xfe\xd5\xbdcX\x90\x18\xd4\xe9&2V\xe6\xbb+\x92?Z0\xd1\xffe(\xc1u\x97\xf9m\xc3Z\xd1=\x9e\xa6\xe9\xa2\xbf5\xe6S\xf8/\xdd\xfe\x127*&\xda=]\x9b\xa2\xf5\x04j\x00\xde\xea\xc5\x15\xdd'\xff\xe1\xf8\x9f\\G\xde1^\xcf\x9e\xb6qj]\xa0\xbe\x81\x9f\x0d\xbf'\x1f\xb8+y\x83\xd5?\xe5\\*\x80\x00\xd8>\xf0\xdfW\xd16\xb68\x1e{\xe2\xdb\x93?&cbj6\x97\x02\x8a\xe9\x89$\xa1b\x84\x8a\xb9~\xcf4\x15!T\x8cP1\xb7\x11*&\x8dP\xb1]#T\x8cP1\x9f\x11*F\xa8\x984B\xc5\x08\x15#T\x8cP1e\x84\x8a\x11*F\xa8\x18\xa1b>#T\x8cP1B\xc5\x08\x15\xb3,\x07\xb6C\xa8\x984B\xc5\xbe\x08T\xac\x07\x94\xacrB_\x92\xd6\x19]0X\xdd6+\x1c\xcck\xbdo\xe1M\xdd\x1c\x19\xe5H%\xf28(\xec+\x15\xa4\xff\xeah\xe8\xde\xafd\x0cY\xfc >\xb4\xbe\xd2a\xf1\xaf>\x03\xc7e\x102u\xac\x13\xde2\x87\x0c\xf9\xad\xee\xaf\x9d4\x9bR\x90iy\xc1\xb7m\x00\xe1\xd2'\xbe0mz\xa6\x10\xd7\xc83\xb6\xf1\xcf\x10\xfe:\xf4\x1e\xfdz\x90\x88\x80I\xcfc\x8fq\x1e \x05\xf6GE\x11'@.+\xf5\x96\x1a\x1c\x8c\x14\xe7^#\n|2IK\x0e\x14F\xca+x,\\\xa8,5h\x18kF\xc1o\xd1\xa1CeY\x02\x88\xca\x92\xc3\x88\x91\xf2d\x901!\x98\xa8l\xcf\x90\xa2\xb2\xb4\xc0b\xac\x1d*\xe4\x91\x14^T\x96\x1ad\x8c\x14'&/)\xa1FeI\x01\xc7X\x7f\xef\xc2\x91\xd8\xb0\xa3\xb2\xe4\xe0c\xec\xf9l1!He\xd9\x02\x91\xa6\xb8}\xc2\x91\xca&\x04%\x95e M*K\x0fP\xc6\x1e\x133\xef\x89?Q\x07 V*;T\xc8R\xd9\x01\x02\x97\xcaR\xc2\x97\xca\xd0A\xcc\xd8\xa3d\x858\x91\xa1Le\x19\x03\x9a\xca\xb0aMe\x8e\xef\xab\xf8{!5\xc4\x19\x1b\xd6T\x00\x14\x11\xe8T\xb6w\xb8SY0\xe8\xa9\x0c=\xd9C\x04@\x95\xa5\xcd\n\x93\x83\xa1\xb1^z]\xdf1DHT\x19\xbe\xae\x19\xc3\xa3\xca\xf0AReYC\xa5\xca\xa6\x04Lc\xbd\xad\x8d\x87M\x95M \x9e\x86\x8b\x13W\x8d\x85P\x95\xe5 \xa4*CF\x04\x95E\x83\xaa\xca\x12B\xab\xca\x82\xd1\x10iS\xc2\xac\xca\xe2e\x07\x96]\xb3\x05^\x95Mq6>\x08\xab,\xde\xde \x01Ye\x93\xc2\xb2\xca\x82>\xce\x17\xa2U\x86\x0c\xd4*\xc3\x84k\xbb#\x11A[e\xa8\xbb\x90\x1e\xc0U\x86\x0f\xe3*\xf3\x07s\x95e \xe9*K\n\xec*\xdb'\xbc\xab,\xee\xec\x84P\xaf\xb2\xec\x01_e\x88\x9a\x06\x9f\x94|!`e\xd1@\xb0\xb2)\xe1\xe0@qF|8\x14\x14V6%4\x1c(\x8e\x9b5+o\x80X\xd9\xa40q\xa0<\xf5\xb5\x1c[@@\x84\x8c\x95\xf9c[\xca\xfc\xe1ce\xe9A\xe4@a\xc1\xf0\xb29dB\x909P\x9e\x9am\x06\xd7\xf9\xf2\x05\x9c\x95\xc5\xc3\xce\xcaR\x83\xcf\xca\x12B\xd0\xca\x92\x03\xd1\x83\xd3\x90\xe1he\xe17w$L\xa8\x0c\x1b,\xc4\x06\xa8u\xa9\xa9aj}ZJ\xb0ZY\xd0\x05S\x02\xd7\x81\xe2\xac\xc00\xfe\x91\xc2\x05\xb1#\x8fK\xb5\x0c\x87\xb2\x95e\x0ch\xeb\x02Came\x81\xe0v\xe0\xac\xa9aoe\xf9zuB\x08\\\x17\x8c\x0e\x84+sOfT\xfb\xb0\xae[\x0eLb0\x92\xa0\x91[\xb1\xf7\xabFr\xbb}\x9f\xb8\x0d\xbfe\x0d\x934UU\xc3Z\xf4\x12MO\xb9\xba\x9f|{\xed\xe9\xcc\x00\xc3\xac7c\xf4>f\xddn\xf4\xe3\xcd\xee\xbb\x8d\xd9{6\xc8\xd7^\xdb\xd1\xf6\xc6\xfe\x9e\xc3\xef\x0b\xb9\x0b\xfc\x11\x94\xbc54[\x0b\xdbJu\xe6\x85\x02s\xee\xcbv\xd8?0\xdaY\x06OG\xc9g\xb9J8\xe9\xc1\xfe\x0f\x17\xa7\xe3\x06\x90\xa0\x16 je{\xbb\xa52\xf3\xaa\xef\x92\xa0\x16\x82\x8aw\x05B\x93y\xf8d\x12\x9e\x04\xb5\x92Yw\x12\xd4\xb2\x0dA\xb3g\xe3\xd8\xf7#\xd8'\xb0\xebY\xa8\xf5t^\x9d\x04\xb5\xf6\xe1\xd2S\x88t4\x8bN\x82Z$\xa8\x85\x9e%%3\xe4$\xa8\x85\xa2\xc4\xa7\xf0\xe1$\xa8\xe5;,\xca~'P\xdf\x18\xb9\xa8\x14\xd2\x9b\x04\xb5HP\x0b\xc3f\x93\xa0\x96\xb4}\x88k\x12\xd4r\x95\x14\xe5\xa8\xa7\x10\xd4$\xa8e\x1b\x82\x8e&A\xad |s\x9clNe\x9a\x13h\xe6d\x8e9\x8d`&A\xad4.\x99\x04\xb5:#A-m;{/*J\xcd*+\x14\xcd\x1c\x9d5\x08\xe6\xf6\xb8\x1b\x1fnj8\xac\xe7\x93\xe2\xa5\x9f\x0f)u\"\x9a\x9f \x1dE\xd6\xe5\x90\x88\xa8\x13\x0b}z\x144\x84\x7f>-\xf2\xb9\x8by\x96\xd5k\x15\xd6\xb7\xfe\xd6K\xc5\xdd\x14\xab6\xa2\x15\x07N\xca\x1fO\xf6\xc7\x1e\x96\xc8\xc1~\x82\x1fE\xed#I}\x04\x9d\x9fD\xe4?\xcdN\xae{\xdeWSI=\xd0\xd4\xde\x8av\x07\x8c\xc6J\xb5]\x9f\xae.k\xe1\xa6\xa9\xd7OR\xe3\x9e\xf09\xfe\xc4\x1e}\xd5\x1e\xbde4$S\xe8\x99z\xc3\xf8\xb6\xa9d\xecBs\x1b\x9aG\xe8\x88\x1a\x19qX\x8e\x96\xe6;\xcc\x98G(\x99\xf7\xe2\xbbJ\x89>B}s\xd32\x0eu\x03\xc3\xea\x82\x151m\x19\xcf\xec-\xcf\xfa\xb3\xc3\x89\xaa~>?\x8e\xd6~uc\xa4+e\xceH97\x7f\x93c\x92\xd6\xbbT\x8b\xef\xb7\xac2\x8e\xdfV]\xbcc\xf4\xf6>\x97\xa5\xadD\x9f\xef\\\xa8\"\x04\xdbV\xb8\xfa\x13K\xf4\xe7\xb0\xf8\x03;\xd7\xb3\x89\xb3\xe5\xdeU\xb9.\xb1\xde\x95\xc7\x1a\\\xc7\x87\"\xa9X\x98\xdd\x83\xd5'\xa7\xf8uP\xdaF\xad|\xdb\x7f:\xbf\x81\x15\xbb\xe1\x06\xdd\xd2,\x97\x99\xf8\xc80\x9ez@\xd4E\x84\x9f\xaf\x1f\x81\x15\xf3[(6\x9b\xcf\xe8E\x1b\xa8\xea\xcf\x0f\xf9\xd2:CxT\xf6\xd0Z\xca\xa3\x82\xf8\x8f\xb2Z\x94\xf3\x82\xb3.\xa0o2\x12\xc4\x81\x0eQ\xbf\xb2\x9a\xaf\xb6\x8b\xd1\xcaC\xa1\xae\xd2\x11\x15\xa3;&\xf9\x1c+\xd0'\xb7\x93\xb4\xf9\xc4Aa\x1f\xcf\xc7\x13\xdbQ\x13\xe4bM\xc3ZMR\xc9\xc7\xab\x7f\x1e\xc5#w\xac\x9f\xa6rY\xd5\xcd(Lj\x9e\xc6\xe1%\x94g\xf6\xbd\xb1\xd7u\xbdb\x16\xe5\xec\xb8\x81\x0d\xbbc\xcd\xe0\xd4\xd0\xcd\xd3G\x8fo\\i\x01y\x0ds? \x83r\xc45X%\x01\x92\xbaY\xb0f\x1c'\xb9,\xab9{\x0dJ\xf9\xf6U\xbb\xf8\x04\xffp\xfc\x8f\x7f\xcc\xea\x8dT\xb9\xdd\x93\xdf\xba/\xa2r\x11\xda9\xdd\xcc\x05\x8d\xf6\xee\xa6\xa7s%K\xd6\xcb\xd0\x99C\xcf\xdf\x9a\x1b\xfd\xfb\x17\xdf\xf5\x91r\x93h^\x9f\x84n4\xca\x1bEO\xc3\xe2\xb9<\x92\x8e\xf1\x14\x1b\x82s\x84dn\xd4\x0f\xca0Acc\xa9\xe0_\xb00>A*7+\x00\x08q\x08\x10&\x80\x80\xe1\x06\xa4J\xe4\xba\xd6\xf8\x93\x81@\x98\x08\x05\x06\x0bL\x16\xc7\xdd\x13\x0e\x84d@0X\xd4TY\xdc\xac\xa0 $\xc2\x82\x90\n\x0c\x86{\xf6$9\xdc\xac\xe0 \xe0\xe0A\xc8 \x10\xc2\xde\x10!L\x03 !\x17L\x08\x93\x80\xc2\xf0\xe3\x80\x97\xbf=\x00X\x08\x07\x84\x0b\xe10\x80!$B\x860\x0d4\x8c\x0d\xc1\x1c\x05\x1bB^\xe0\x10\x12\xa0CH\x07\x0fa\x02|\x88\x182\xb1B\xb7{C\x88\x10\x03\x11\x01?=C\x00\x89\x908\x8bK\x06\x13\x83\xa5\xa5H\xdbbk\x99\x11R\x84$P\x11r\xc3\x8a0\x11X\x0c\xf7+\xa4\x9c\xedDp\xd1[\x1eGJ\xd9\xe6\x01\x18\x01\xcf\xe1\x01\x06d\x844\x98\x11b\xf4\xd1D\xa8\x11\x10\xe5\x06\x00\x87L\x80#Lr.\x1et\x04D+'\x00\x8f0\x15z\x84\x88\xde[6\xf8\x11\xf0\x00$ !H@\x83\x90\x80\xf3z:\x10 IP$D\xc5i\xb3\xc0\x91\x90\nH\xc2\x9e\x90$ \xdc\x9b\x00K\xc2!\x80I\xc0\xd41\xf0$\xe4\x83'\x01\x03P\xc2\x1e\x10\xa5\xb7@\x8e\x10\xa1\xcd\nSB\x14\xa8\x84\xa9P\xa5\xb74\x8c\xf8,\x02\xae\x84\xa8\xf0lXv6\x1d\xb4\xf4\x16\x15\x95\x9c\x9d\x04azK\x8b\xca\xcd\xe6\x831\x01\x05d\xc2\x04(\x13\xd2\xc0L\x98\x02gB2\xa0 1u\xd5\xb8\x10'\x16\x9c\xc3\xc2\x9a0\x05\xd8\x84Th\x13\xc2\x0d\x9f\x02oz\x0bCI\xcaN\x818\x83\x0f\x04FN6#\xcc 1\xa0\x13&\n\xc9N\x85=!c\xdfM\x80>! \xfc\x04\x8f|lH<6\xba\x1e\x11\x12\x8e\xc5\xc3e\xa1sP\xa2\xb1)\xc0Y\xe8\xac\xa0`,\x12B\x0b\x9d\x10\x10\x8bM\x02\xd3\x86'b\xd6Or\xc9\xc4\xf6jO\xbe\x8e\xf6\xa4\x0co\xe8\xb2OE\xf3\xf6\x16\x91^\xfdL\x84oo\xc9\xf5;$\xf5\xdb[D\x16\xf6\xe9I\xe0\xdep\x92\xb0OK\x07\xf7\xe6\x97\x83\xc5\x8a\xc1\xe2\x06\x8f|B\xb0\xdd\xf0\x11\x94\x81M\x14\x81\xed\xc5^=\xe5E%`\xcdUR\x05`y\x8c\xdc\x88s\x1b\x08\xe9\xd7\xe8[\x18-\xfb\x8a().\xf9\x8a+\x04-\xf7\x1a).*\xf5\x1a\xad\x0eF\x08\x12'\xf2\x9a\xe5R\x08yW\xfe\x0ch\xa2\xa8\xa8k\xd4\x19\x80\x12tE\x14\x83\x1b\xa4\x92\xa5\\\x11\x82\xady\xe5Z\x91b\xadS\xa4Z\x91B\xadQgc:0J\xa25\xcb\x95\xc2\xe2\xac\xd1K\xe0\xfaM6Y\xd6~j<\xfe%^\x91|\x82\xac\xeeZ$\xa8M\xa2\xc4&G\xf2\x92\xa3\xf2>\\\x9c\x92\xb8$\x90\xb8d\xb6\x91=\x9515\x81yo\x81X\xbe4+[J\xe2\x92$.\xd9[Vf4\x85\x17MbEI\\r_.t\x02\x13\x9a\x85\x07MgAI\\r\x1f\xf63\x85\xfb\x9c\xc0|\x92\xb8$\x89K\x92\xb8$\x96\xd9\xcc\xcakNa5I\\\xd2wX\x94\xc9L\xe011\xd2\x89)\x1c&\x89K\x92\xb8$\x86\xa9$qIi\xfbp\x93$.\xe9*)\xcaFN\xe5\"\xbd\xef\x06\x12\x97\xdc5\x12\x97\x9c\xc03\xc6Y\xc6T\x8e1\x81aL\xe6\x17\xd3\xd8E\x12\x97L\xe3\x13I\\\xb23\x12\x97\xd4\xb6#.Y\xda#\xf7\xe0K\xd2:d\x10\x10S\xab\xfdP.`$$i\x8fH\xa5\xdcRp0\x0c\xf6:/\xbc\xd9\xee\xca\xbc\xe0\xd4\x8c\xf6\x93\x7f9\xd1\x01\x7f]\x84K\x07\xe6\xad>\xa2\xd3\x81)\xa4\xa2\x93\xfe\xa3\x8c\xfc\xb5e\xb5\\\xed6{W\x04\xe6\xed\x80S{\xb6\x1a0C\xa7\xd8\xc6?C@\xcb\xba_\x19\x16t\x02\x9b\x18vJ|\x93/\x13\xe6*B\xceSF\x9b\x03#\xd6\xd3\x92\x89\x92h\xe5\xff\x8e6\x07\xc68Q\x8fB\xbd\x07\x0dsc\x9e\x00u\x1d\xf1\xe7\xb9\xd2_3\xa2\x99\x9e\xbdM\xe5\x91\xbc\xbc\xf3L\xed}\x04\x06mE+-$\xab\xd9\x1bmE\x0b\xb8Q\xfcK\xda\x8a\xd6\xccMR\xe0 s\xce\xa8<\x82\x83\xb4\x11\x1cDpPo\x04\x07\x11\x1c\xd4\x1b\xc1A\x9c\xe0 \xb7\x11\x1cd\x8c\xe0 \x82\x83\x08\x0eB\xce\x92\x08\x0e\xea\x8c\xe0 \xdb\x08\x0e\"8\xc8a\x04\x079\x8f!8\x88\xe0 \x8f\x11\x1cDp\x10\xc1A\x04\x07Y\x96\x03\xd4 8H\x1a\xc1A\x04\x07=_8\x8865\x9c\xbac\x1cmjx@\xe7\xc6\xfb(mj\x98\xc3\x8b\xb4\xa9!mj\xf8%nj\xd8Q\xad'\xbfuLc`\xa7C\xcb\x8d\x06\x0d3\xac\xab&[\xcdn\xc4e\xa5\x1e>\xd1\x11\xd5.D\xe6\xb2\xe7o\xfb\xd9\x88>\xfa\xcdb\xd1\xfc\xbd\xa0\xb0>zc\x12P\x16\x05Z\xa3!\x88(\x06\x15AY#\x17\x08!\x9d<\x02\xb1\x92\x08\x9a\xd3\x12\x91U\x04\x98\x9a\x17KEB\xa9\xe9Hj\xdcA\x99q\xd4 \x8c:Y\x86KWr\x02h7*\x8d8;m\xc4\xd9\xe5\x19Y\x88\xb3#\xce\xcem\xc4\xd9I#\xcen\xd7\x88\xb3#\xce\xceg\xc4\xd9\x11g'\x8d8;\xe2\xec\x88\xb3#\xceN\x19qv\xc4\xd9\x11gG\x9c\x9d\xcf\x88\xb3#\xce\x8e8;\xe2\xec,\xcb\xc1<\x11g'\x8d8;\xe2\xec~\x0f\x9c]\x17x\xf6\xd5\xbf;`\xb4\xad\xa4\x8a\x01\xea\xc8\x1ek\xe1\xa6\xa9\xd7\x83v\xb4\x19\x1b\xb2'^!7\xd6\xf3\xf3\x14W\xe2\xe7\x0f\n\x0c2 \x85|G\xc8\xb5\xf3\xe1V\x82w5g~H\xc2*\xe9\x85i\xe53\x05%,\x9f\xd86\xa8\x8br\x80}\xdf\x1b%\xa2\"\xa6J\xe2\xb7\xdd\xb7\xa7\xb7&\x10\x8d\xc2E\xb6\xf0\x8b\xac?!\xb6\xee\x8b\x94\x10\xde\xb2/~2j\xab>o1\x88\x98\xb6\xd5\xbbR\xe2\xdaW\x8e\x80\x07E\xb5\xb5QT\x9b\xa2\xda\xbdQT\x9b\xa2\xda\xbdQT\x9bST\xdbm\x14\xd56FQm\x8ajST\x1b9K\xa2\xa8vg\x14\xd5\xb6\x8d\xa2\xda\x14\xd5v\x18E\xb5\x9d\xc7PT\x9b\xa2\xda\x1e\xa3\xa86E\xb5)\xaaMQm\xcbrD\x18)\xaa-\x8d\xa2\xda\x14\xd5~\xbeQ\xed=\xa3\xc4w57\x81\x14W\x94\xf8g\xf1s\x17\x1f\x96\x07\xab\xd8\xf0\xb2\xbcc\xd5NCw\x83\xc3\xb2\x80\x17\xa6\xbd\xcf4,l9\xc16\xfe\x19\xa2W\xd1\xb4\xfb\xa4\xd5\x9b\xc0\x0e$\xa2\xcd\xd3\xf7\x90R\xcb\xef\x91\x14\xfa\xe7\xb1\x89\x94\xaaj\xe8\x08D{\x8d\xb1j\x1b\xd9\x90J<\x83?\xbf\xbf:\x9b\xbd\xbf\xb8:\x7f\xffn\xf6\xf1\xdd\xe5\xc5\xd9\xe9\xf9\x0f\xe7go\x93\xce\xfb\xcb\xd9e\xd2\xf1o\xbe\xbf\xbczs\xfe.\xe9\x9cw\xef\x13\x0f\x9f\xfdr~\xf5\xe7\xd9\xcfgW\xe1\x13MP}\x92#0\x8bw\xbd\x89\xf1\xe5\xbd\xda\xab\xe4\xbe\xf7\x8e\xaf\xd1\xff2\xbc\x9a\\\xcb\xbdc\x1c}\xdd{V.o\x9fv\x9f\xb9_\xe4%\xd9\xc2z\x12\xfa6l\xabR\x86le\xf5E\xf7\x17\xff\x11(\xac\xdd\xacJ\xeen\xe0\x9a\xf1bQ\xf0b\xf2;\x03\xdf(s)\xa5\x13\xf2\x08\xd6\xd2|\xf7\x13\xaf\xa1\xe0\xbc\x98\xdf\xaa\xc0a(\x04h\xe3k\xb6a\xaa#\xbcj\xf9Su\x83JL\x80\xd0#\xc4\x1bU\xc8\xbc\xae\xda\xb25\xbbqvl\xdd\xf9\xdb#5\\\x89\xf7\xf1\x91Y\x13\xf1\xdf'_\x1f\x1c4FM\xd4\xcc\xce]\xa2<5\x85S\xe3\xe1N\xc8\x88\xf6\xb8\x93\xb6\x08\xa8,\xf6F{\xdc\x01n\x86\xf9%\xedq'?sR\xf8D\xf5a\xf5\xe1\xe2tT\x1a\xf1\x89\xc4'f{\x8f\x12\x9fH|\xa2\xdb\x88O\x94F|\xe2\xae\x11\x9fH|\xa2\xcf\x88O$>Q\x1a\xf1\x89\xc4'\x12\x9fH|\xa22\xe2\x13\x89O$>\x91\xf8D\x9f\x11\x9fH|\"\xf1\x89\xc4'Z\x96\x83\x15#>Q\x1a\xf1\x89\xc4'>_>\x91v\xb7\x9b\xbau\x18\xednw@\xe7\xc6\xfb(\xedn\x97\xc3\x8b\xb4\xbb\x1d\xedn\xf7E\xeen'A\xab\x93\xdf$\xd6\x15\xd8\xd6N\xa2a6_\xbfp\xec_W\xf7\xa4\xfd\xf9\xdb#\x85\x8a\x857\xae\xfb\xb9\xc7\xc7\x9e5u\xefC2&\xf1aQv>\x1aW\x88RM\x01j>Rx\x90\x98\xe7\x11^\xfe)\xf6\xab\x8bs\xf2Q\xf7)\x8b3\xf2\xd3\x08\xf94>>\x9d\x8eOb\xe3'\x91\xf1{p\xf1\x98\x90\x91\xb1\xccL\xfcd\"\xfeIy\xf8\x03\xd2\xf0O\xc5\xc2\x1f\x8a\x84\x7fr\x0e>N\xc1#\x86\x12l\x8f\xcf\xc8\xbf{\xe9\xf70\xfb\x1em\x0c\xae)Y\xa9w7\xf3\x1e\xaf\xc8\xde\xbc{N\xda\xdd\xd5\xcf\x900n*\x8bK(.\xa1\xb8\xce\xdf3\x8dR\x84\xe2\x12\x8a\xeb6Bq\xa5\x11\x8a\xbbk\x84\xe2\x12\x8a\xeb3Bq \xc5\x95F(.\xa1\xb8\x84\xe2\x12\x8a\xab\x8cP\\Bq \xc5%\x14\xd7g\x84\xe2\x12\x8aK(.\xa1\xb8\x96\xe5\xc0\" \xc5\x95F(.\xa1\xb8\xbf\x07\x14W\x86\xdf|u\x97?\x0ej\xad\xfe\xa2\xb7\xbd\xec\x82g\x9b\xcf\xb0\xe7\xe5\xba\xac\xf8\xc9\xdd\xb7\xd7\x8c\x17\xdf\x9e\x14U\xb5-V39Ui{\xb8\xc6\x85Y\xbd\x91\x87^tG\x9a\xf5)\x10\x05\x8aaT\x95\x05}Y\xeaU\xe7$\xac\xc6\x85\xbd0\xed|\xa6\xa0\x95\xc7O\xb6\x05\x97y\x82\x0b<\xf1\x05\x94\x9d\xcb\x9b\x98l\xf4\x1e8\n\x1b\xdc\x15ea\xd9.\xd9\x83\xc6w\x0c\x15\x1dv\x15t\xb2\xd3\x91hSIm\x14)\x0e-\x93\x1e`\x915i\xac,\xab\x9b\x95\xa5\xf0\xe7\x1a#\xcf\xcd!\x9a\xccu?\xa4]A\x81\x01\xb2+I\xff\xf8lG\xc6\x91Wl\xcb4\"\xf6\xee\xf2\x0cz\x1e\x7f:\x8ar\xc3.\x9d\xaf\xa7\x8fi\xfd\x8d\xffpq:\x9e\xb3\xd1\xd8Fc\xdb3\x1f\xdb\xe4\\=0\xf9\xbb\x90\xbf\x0fF5\x95\x9b!\xd3\x91n\xbaG\xb1\x9f\xf3;G\xb5\x9f\xca\x8a\xab\xa2\xf4\xaf\xcfvX\xb3\x1db\xdb\xf0\x13Eye\xa8\xe3j\x1c`>O\xd6\xf5b\xbb\xca\xab\xe2*\xbc=[\xb0\xaa\xf6@\xe2\xd1\x0e\xa3uE\xb9\x8e\x84\xcd\xebR~\xdb\x8ar\x1d\xc7w\xe3\xeb\xac)8\x9b\xa9\xd0\xf6~W^\x17\x0f\xe5z\xbb6\xf3UU\xa4\xf8\xd4\xee\xc7rq\xad`e\xd6\xc5C\x9eJ\xa4\\\xb3\xf4\xe0\xfd\xe8k\x96\x15\xee\x9a\xcb\xbaX\xcd\xae\xebj\xc1\xa6fb\xe8+\x8a\x82\xc4M\xde\xb0f.\xde\x9a\xaaL(x\xbdv}\x1d\\\xaf\xea\xf9\xa7v\xb6a\xcd\xec\x91\x15\xd3\x125\x10Y ]\xf5\xba\xf7\x9c\xba\xb0\xa8&\x88\x0b\x0f\xceA\xbc\xc4\xd5\xb0\x82z\x83\xebw\xb6\x1e\xd3\x88Z\xa5\xf7\xb5\xeb\xf7\xe7\xf6\xbeV/\x1b\xf4\x1b\xdb\xfa\x8a\xd7\x1d\xdd\xa4\xc8\x15=\xd6\xd2\xbd\xad\x14c\xae^UG:]\xa5\xe4-\xb4\xdb\xebvSH\xd4\xac_\xa8\xfb\xc4\x1e\x9do\xf7\xdf\xd1\x9b\x1d\xf3b\x1f\xbc\xd7\x8d\xf8{\xe7\xb1\xac/t\xe3\xe6I\xa3\xedT9\xf7@\x1f\xf6\x9e9i \xa6A\x18h\x10v\x9f\xfe\xdc\x06\xe1P\xcc\xc2<\xa4\xbe\x1e\xd8\x8d\x95\xf6\xb8\xa1\x86T1\xb9\xee\xf7)\xe8G\xdd\x9b!\xbb;%\xe3z\xd4BS\xd9\x80<\xc8'\xf68\xa8\xa2\xf8\xb7 \xa5t5\xd3\xa1x\xd3\xa6\xac\xb5L|\xd3\x99:\x04^v\xd6Hti\x8e\xee\xdew2=s%\xde)\xcb\xb2\xe5\xaca\x8b\xaeY\xad\x8cV\x8a\x1f?\xb1\xc7q\"\xe7\xb8\xed\x03'\xbet\xa6\xcf\xff\xf3K}\xec\xe0\xbd\xd8UI\xff\xf8l_\x8d#O\xdb\xf69\x06\x88\xf0[\x11\xf1\x88\x8b\x9b\x1a>y\xef\xfd\xd5\xbcW\x8f\x07u\xfa\xbeje\x0b\xf6O`7\x9c(\xacF\xf7S\xfd\xc0\xba\x99R\x19+g\x0fe\xcbe\x9e\x88\xe7\x18\xfb\xa9v\x1f\xe3\xee\xdb\x83C\x11\x13\x81\xae\xdbws\x01{\xd4\x19L\n\xd4\xa3\xd7I\x0c\xed&\xb9\x14\xab\x1d\xa6\x1d\xf98\x07\x1a\x1bi&\xcd8F\xbf\xd2\x8c\xe3\x003\x8e\xd8\xcb\xf0o\xdb\xa2)*^V\xac\x0f\xda\xcfyy\xc7N~\xe3\xf5L\x03\x05\x01u\x94\xf3\xf6\xdf\xba\x12\x160\xbfe\xf3O\xad\xc2S\xa1\x98+ \x9f\xdb\xa2\x85z\xc3MzN\x7fEwd\xca.P\x1f\xf0l\xdfhe;\xeb\x9b\xe3XHSE\x8e5|\x8c\xc5\xc7\xf0a\xf9r\xd5I\x8b\xf5\xa8%rs\x83F>v\x94\xb4\xebue\x88\x81vpG\x9c\x83\xed\x87\x8b\xd3~\xc0\x950\xe2\xa8\x9ca/\x91\x031}z\xd1@\xf8\x94\x03a\xe8\xd3\xab\x7f\x90|}\xd0z\xd4\xf4\xd2\xaf\xf9'\xaf\xd5\xa8\xf7\x84\x88\x95k\xcc\xde\xf2\x1a9b\xbf\xd9\xf2\xda<\xc5\xad8B\xb7g\xcb\xebW\xddC\xdc2\xce\xcbji&9\xf6 \xa4\x87u\xe7g\x8b5\x80\\\x0d\x07(\xb9N\xa3\\p\x0c\xe77P\xc0MS\xaf\xed\x9f;\x9e]\x92\xe0\xa6J/z\x07\xea\xaa\xa9\x05\x9e\x82\x0f\x0b\xd0\xcc\xe6\x0b\xebx\xa5]v\xac3t}\x97;\x92\x13:\x7f\xeb\xbb\x02E\x8d\xd4\xca\xa5\xd5,\x83\x8avW\xd3\x87\x0fi4\xdb\xe3/\x86\xcdyv\xaf4\xe1\x89\x99\xa3v\xc6>\xcbx\xd29|\x8f1!\xf2<7l\xce\xca; \xb9\xa9\x1fvW`\x85\xd9\xdd(We\xc6]S~Cim\xbd`e\xccm\xf2U$>\xc1P\xd6\x8c\xc2Z\xce\xa7\xc1\xac\xac\x8ao\xaa{\xdfn\x99`*\xbc\xbb\x85\xa91\x84w\xc2\xfad\xaf\xe0\xcd\xc7\xab\xf7\xb3\x0fg\x97\x17\xef\xdf]\x9e\xa1\xe4\xb9\xc6\xe7\xbc9==\xbb\xb8B\x1f\xfe\xf6\xec\xf4\xc7\xf3wg^7k\xd1\xb0\x94za\xee\x8d=p\x9cU\xbc\x19.\xac\x89\xbbd}\xe7\xd6RNa\xf7=\xd6\x9b\xe8gPT2\xf3y\xf7\xee\xc4+4\x1c\x1a\x94N\xe4Noa\x15W\xcbb\xe2b\x1aB\x96\x03\xad\xa3\xc0\xd1DPY\xc6\xadnwi \xd7\xc0\xa9,8D\x85\x07(\xda\xf5\x96v\xbd\x1d\xd9s\xd9\xf5v0\xf5\xc0}\xbb\x8d\x8a\x19N\x17\xe9\xd3\x8d>\xdd~\xf7\x9fn\x8e\xaf\x1918.\x19\x97\xca\xbe0\x14\xb4\xdb\xf3c\xae\xaf\xaa=\xcd\xf3Uv<\x15\xb4\xc4\x91\xe4\x94\xd0J\xf2\xe1\xb5\x165w\x8c\xa4{\xc7\xd0\x9cB\xd3\xb4'\x00\xf8\xfb0\xed \x00\xb4'\x00\xed @{\x02(\xa3=\x01\x9e\xe7\x9e\x00\x98\xb5\xd3\x93\xdf\xec\xd70-\xa5>\xd7\xa5T3\xf9\xa6\xb5T\xcb\xa2\x13|ZKu\x96Ck\xa9\xf15K\xf79\xb4\x96\xbasD\xbcB\xb4\x96Jk\xa9\xb4\x96Jk\xa9\xb4\x96Jk\xa9\xb4\x96\xfa\xdc\xd7R\xb3\xd4\x99VR\xd3\x96\xa9h%\xf5\x80\xce\x8d\xaf\x01\xd2Jj\x0e/\xd2J*\xad\xa4~1+\xa97\xdbj\xd1\xfa\x97K-_Y8\xf8\x0f\xe2$\xb5xj\xef\xabZ\\\xd7[\x0e\xb2D\xd5\xd5\xe5\x8e\x1f\xd7\x8c\xf5w\xcb\x9a{\xc4\x96P\xcfo\xe0\xba\xe6\xb7P\xd8S\x98\xa2Z\x0c' \xe2\xdeX\x8b\x99\xd5#\xb4\xdb\xf9\xad}\x9d\xae@U\xb1\xf1\x9a%4lY4\x0b\xf9R\xa8o\xfa[v\x7f\xcb\xf4v\x13\xec\xf1\xa5n\x06,\xd8|U\x9aeU\xf9\x8c\x14\xa3 V_\x17\xbb\x7fl+\xb3\xed\x90\x96\xdf6\x05\x99J\x15\xa5\\c\x12N\xb4\x17q\xcd\xa2\xaf\\L\x08\xac\xbb\xcaU^V\xca\n\x0fjTYK\xb8\xe15\xe0\xaa\xae^\x99Z\xbdp\xdd/]U\xb9$^=\x82\xbf.Wr\x80\x93\x1f\x7fP\xf6S\xbd\xb2R\xdbO\x94\x9d\xe7|\x15r.#\x8f\xbb\xdf\x8b\xa1\x8f\x9e\xddB\xf2\xdfF\xf5}&\xdf7\xd9\x97\x92\x03\xeb\xaa\xbb\x9f\x1e\xe2\x9bRj\xcd4l^nJk\xeb\xb2y\xad\xe4\xa4\x03\xfb\xa4u\xa3\x89k\x14\x19Z\xff\xbc\xcd\xecN\xe6\xf3J\xf8^(\xdb/\xf7\x13\x12\xdc\xe6\xad|\xb7\xe4\xa8>\x85\xecA\xb6\xaa\xfd~\x93.\xdb\x14\x0d\xd7\xa2\xe3\xaatxd\xdcZ\xd3\x96\xfew;S\xfet`\xc7y;\xb4\xb2X\xb7V\x16\xd0\xbf2\x86\xb8M\xc2\x8a\xb5\x98\x0ee(\n{\xcf\x01N\xeb\xd2\xdec\x95\xd7\x9fX\xa5\xf7\xb2Q\x0d3S9\x99\xd0\xea\xdf\xf4\xc9T>\xb4\xa1\x12\xc0\xbb\xf7Wg\xaf\xe5H\xad\x8e\xd6*\xef\xea\x93\xfb\xbc\xe2Z\xff\xba\xdb\xfc\xa8\xdd\x99\xee\x0cM\xcbc+\x89\x8e\xd0\x85\xdbrY\x15|\xdb\xb0>\"*\xa6\xfd\xcbzYK\xf5i_\xd8\x04\xebH5\x8e\x98@\x8ej[\xbfmVY\x0d\xdfhZxd\x8f\x80\x8eye\x86\x9f\x0f_:\xa12l\xdb\xbaI\xc30\xa9PL\x10\xd4,\x82\xc9\xc9\x10\xbb+\xebm\x1b\xd8\x98\xaf\x9b\xc58\x8e\xc0\xd4eg&h\xbam\xcb\x9b\xed\\\xdc\xdc\x91F{\xabn\x8b\xb3\xb0\xe1D1<\xb4\x0f*7~\xc1\xca\x8f\x91\xea\xa6\xd6\xd3P\xd5\x11\xda\x92kAPo:%\x85\\v\x8dB.\xfdOXgR\xc8E~n\x8e\x07\x87IQ\x97\x9d\x11\x86\x02/\x14x\xf9\x9d\x05^F\x8f\xc7\xb4\x8f!\xc7\x12\n\xb8\x97Q`\xe2\n\xd2\x1e\xd1\x9aQ\x0b}\x1cO\xbf\xaf\xa4\xfa\xc8\x80\xf3\x1b{\xed\xc1\xedJ\xbdSu\xb1j\xf5\xe6\xad\xc3\xa5\x01\xc8\xdbZ\x8a\xf3`\xbcEq\x1ee\x07vn\x14\xf4y\x9eA\x9fg\x9f>@Q\x9f\x89\x1f:\xde\xe2\x90K\x83@Q\x9f\xa1Q\xd4\xa77\xc4m\x02\x8a\xfaP\xd4\xa77\x8a\xfa\xec\x18E}(\xea\x03\x14\xf5\xd1FQ\x1fc\x14\xf5\x19\x1aE}z\x8b\xcd\xe0(\xea\x93)\xea\x93%\xdb\x85b>\xd2(\xe6C1\x1f\x8a\xf9\xf4F1\x1f\x8a\xf9\xf4F1\x9f\xdfq\xcc\x07-\x93D! \n\x01=\xcf\x10\x90y\xaa(\x044\xb0\xe8\x97\x16\x85\x80\x9c\x96)\x92\x91\xc5m\x14\x02\xda\xb1X\xb7VF! i\x14\x02\xa2\x10\x10\x85\x80(\x04\x14\x8fZP\x08\xc8\x1cL! \n\x01i\x9b0\xd7\xa7\x10Pt\x1e\x17\x9b\xc1Q\x08\x88B@vq\xa8\x10P\x96\xb6R\x00(mu\x9d\x02@\x07tn\x03@\xed\xaaho\xcbj\xd9\x85\x7f\xe4,F\x9f\xe2\x8a\xf1\\\xc8\xdfe\xad\xca\xee\x83\xd6\xfe\x8a5%\xc2\xba^lW\xa6~\x83\xd5\xf9K}\x88*\xeb\x85i\xd73]\x9a\xb7=b\xdb\x1e\x1f\xe4m\xb9\xac\xd8bv\xbd\xaa\xe7\x9f\xda\xd9}Y-\xea\xfb=\xbf'}\x9f\x93\xeb\xb2\x9a\xe9\xcbmX\x93\xe7Z\x9e\x85\x80E}_\xf1r\xcdf\x7f-\xca\xd5l\xb1m<\x8b$\x10\xbf\x96\xecD\xb3\x9b\xa6\x98\x8b\"f\x8bz{\xbdb\xb2\x1d\x93\x8a\x8bV}\xe7z\xaa%\x87\xb8X|\xc9L?b\xd6z\xd8\xe8)\x93\xf3\x1b1\x9c_\xab%\x10\xf3\xc8\xb9n\xbf|\x08\x87\x8b\x18\xbe\xf5\x0596\xa8\x8bw\x9f\xe1\xddF\x1f\xfa\xdf\xa2\xed\xddB\xa8<\xe1DW\xf7\xc3\xc5\xe9\xa8<\xbd\xbck\xfeI_\xe1;\xfe\xa1\xaf\xf0\xec_\xe1\xc9/<1\xa8\x94\xd5rVV7u\xe0\xbdw\xa9\x0e;\x17Guo?}\xaeV@\xbf\x91\xa1q\x19\xb7.x\xdd\x98\x17\xdb\xf0\xd5g\x15\xa3\x7f\x7f\xb6/>\xd1\xaa\xe7\xd1\xd1\xf6\x0dB\xb7\xbch\xf8\xec\x96\x95\xcb[o\x98.ZH\xfc]\x0b\x81\xc1\xb5\xb7?\xcbj@a\xa2f]\x87\x91\xab\xac7e\xd3r1\xb5/\xaa\x85\xf83\x83\xf7\x1f\xc4\x0f\xde\xe2\xb6\x95x\xdd:\xb7\x8a\x11\xb7p\xc1\x1efj\x9a~\xe0\x86\xc7\xdfk\xca\xceE\x95L\xc0\xb0\x15_6\x8d\x8c\x19\x8a1_|\xe9\x89\xf7\xae|\xbb\x0c\xfd2^\xf3\xed\xed\xba\xae\x16,\x10E,+(@N\xb5d0t]<\xaae25+\x82\x026\x0d\x9b\xd7k\xf1\xed[7P\xd5\xfc\x18\xaenK\xbf\xc3\xcb\n\xe6u\xf5\xd7m%\xe7\n*\xe8*f\xfe\xde\x13~\xbd\x94W\xfa^\xce\xf6~\x91\x13\xb0_\xd5\xeb\\\x0c\xe7\xacYw\x0b\xdd\xf2v\xb9\xbe$\x06\xc5\xfdT\xb6\xad)\xee\xfb\x92\xbf\x11\x8f\xe2\xaf\xeex\xa3\xea\x1a\xb3m\xc5\xcb\xe9\xa3t\x7f\xffE\x7f|%n\xd0\x9e}\xe0\xaa\\\xb3\x96\x17\xeb\x0d\xc8\x9a\xe9\xde0\xbc\xe9e\xabk\x0f\x0b\xb9\"\xe0-lU\xde\xb1\x8a\xb5m7\xfft\xbb\x82\xd7\xeb\xeb\x96\xd7O\x14|\xfdE\x03a\xaaG\xa9\x85\x0d\xdd\xb0\xdb\xa2U\xc1\xcb\xbeF\xf0\xf5\xa7r\xe5{\x86\x85\xd5[\xf9\x99\xdf\x17\xd22\xfe\x8d\xf9\xden\x19\xf7w\xbe\xba\x9a\x8f\x1f'\xd5\xd9e\xec^|K\xde\xd5s\xb5\"P7\x86\xd7\xf2\x97&\x1b5\xaf\xab\x9br\xb9m\xd8\x02\xd6e{\xcdn\xcb\xe2\xaev\xec\x8e\x05\xf2\xfbCtV\xf3\xa9#\xd7\x14\x98c\xda\xa5,\xa1+\xe6\x18\x8a\xde\x80\xae\x0f|b\x1b\xb5\x00uW\x97\x0b\xd8V\x15\x13\xef\xd7\xa2yT/:hX\xb1\x18\xaf\x8f\xd8\xf6\xae6k9\xbf^n\xd7_\xbb\x9e\xd0o~\x85bu_<\xb6\xc2\xe9\xc5\xca?\xbe\x0c\x9e\xefSUA\xe7\xe3\x8di\xe6\xcf\xe6\xae[\x13\x0f\x8b\x1b\xe9:\xc5\xcb\xd1d\xc6\xde\xc5\xd1\xb6u]\x95\xbcn\xf4*t\xd9\xb8]\xd2=\x92\xe2{\xea\xae\xe4;\xfb\x95u\xefIy1\xb3\xfe\x8f\x99M\x19\x0bE\xe1\xf7\xf82\xa7P9\x85\xcaG\xf6$\xa1r@=\xcfv\xb0H\xb5J\xdd\xafk\xb6X\xa8%\xc8\xe5 V\xae\xbf0[\xb8\x17\xf7\xccu{\xdc\xf3\x96y\xdd\xa82\xe4\xda\xa5\xc1sui\xf2\x05&\x97 l\xcf8\xdda\xce\xb8\xac\xd7}\xbd\x7f\xf3\x8e|\xf2ch\xc3\n1\x17\xfc\xbeh\xba\x9b\xf4\x1d|\xfb\xbfC'\x0d\xdc\"\xfb\xf7w\xf0\x07\xe7\x19\xff=\xf8cp!\xc4\xfeRC-\x87\xb8\n9\x19|6~\xb88\x1d\xbb\x89\xd6Hh\x8d\xe4\xc9\xd7HB\xa4\x02\xc5\xb7\xd3\x82\x87\x14\xdf>\xa0s\xe3\x91Y\x8ao\xe7\xf0\"\xc5\xb7)\xbe\xfd\x85\xc4\xb7\x07\xcb\xfd'\xbf\xcd\xeb\xaaEd6\xda_\xcfv\xe8{\xfc\xc9\xba\x14\x1f\xbe \n\x1dm*\xee\x0b\x02\xbc0\x8d~\xa61\x80\xbbb5\xb3]\x96\xf5c;\xb8\xac\x1f\x99\xda\xc4\x97\xf4\xa3s\xa3\xf8RR\xec\xf32\xebR~`!?\xbe\x8c\x9f\xa1\xb1\xf1\xcfO\xc8\xbf|\x1f^\xbc\x9f\xb8t?\x1e\xfb{KY\xb8\xcf\xbal\x8f_\xb4\x8f/\xd9\xa3\xefux\xb9\x1ew\xbf3.\xd5\xa3\x16\xeac\xcb\xf4\xf1Ez\\\xbb\xa6-\xd0C\xbd\xf5\xa5\x1dNY\x9e\xcf\xb98\x9f\xba4\x9f\xb00\x8f\xeep\xfb\x0e.\xb9\x16\xe4\xf3-\xc7#\x17\xe3\xe3\xcd\xcb\xbb\x10\x8fY\x86\xc7/\xc2;+<~\xf3\xfbV\xe9\xf5\xea [\x883\xe4\xd4\xc7Q\x98\x8b\xd9\xc7\xae\xbeeY|\xa3\xb57Z{s\xfe\xfe\x9c\xd6\xde\xec\x8f\x11_/\xb4\x8f1O\x84\xf9'\xafu\xb0g\xf4\x8cZe\xed\x99\x07\x13\xfd\xdc\xe2\xc5'\xfbkk\xc1Vl)_`\xed\xc9o\xfa\x1fu#\xeb\x8f\xd3\x91yk\xcey\xdb\x97\xd4}\x81\x15ru\xa5\xff{}\x03\x85\xfe\x04\xeb\xae\xd5\x95\xa4\x9dd\x9e\xd4\xc1\x07\x99\xeb*\xfa\xb8g\xfbe\xd67|\xe6\xa8\xa3\xb1\xcf\xf1\xd8\xf55\x0b?:A\x15\x87\xd8E\xa0\xbf\x90\xeeP\x01@\x0cp\x8f+\xa0\xde\xe4\xf6\xb1\xa3\xeb\x9b\x07\xf2\x9a\xcdo\xff\xf8\x87W\xac\x12C\xf2\xa2{>k_\x88Q\x998\xb3+\xd2MS\x80\x1a\x94\xd4T\xe13\xb5z\xe7\xfa\xfb\xb7\xba+\xd2\xdf\xea\xf6\xb6h\xc2z\x1eS\x9a\xaaJ\xd5\xf30\xfb\x06\x88)\xb7\xfe\xb1asV\xde\xf9\xb4c\xf0\xbe\xeb\xc7\x961\xda->\x82\xf5\xe7h\xfd\x89U-\xdc\xb2\x95\xd4\xb9\x08\x08w\x14s9U\xd6\x1f\x19\x01\xfe\xe7\xbeR\x9a\x19ue\xf5\xae#\xf9=]\xb6P\xb4m=/e\xc4\xb5\xfb\x1e\xf6\x15uWKq\x84M}\xaf\x16`\xeb*\x00\xbdEn\xe9u\xb1*\xaay\xe4\xdd\x9aa\x80\x88H\xbc\xa0\xfaL\\\xde\x05Q\x0c\xb6\x97$\n\xbb \xe4[\xf2\x8a\xb7 \xa5[\xa6\x08\xb7`\\\xd4?D\xf6g\x81\xfcR.V2\xb6U\xdb\x0f\x1a{\x90\xe2E^\xa1\xa8\x92\x8b \x15/\xca\xaa\xb5\xb5\xd4l\xd3=U\xaeE-\x16\xa5,\x96\xd7fp\xe8\x16\xc2$\x08\xd3nKnb\x11\xce\xc2\xe6+\x19\x80\xeb^\xd8S\xbe$]/\xfe\xbe\xc7\xacV\xa3a\xac}\xd9\x03U\xfe\xd2v\x9f\xd3\x8c2'}\x10\x8d\xb4M\x08\xd8\xfa\xfb\x00\xb6\xc2\xfdB~\x17\xb9\xbe*\xecQ\x0b\xbf\x90\xe1\xfc\n\xfapq\xaa\x87\xe1\xfe>\xd2\x1a\xc6\xe8WZ\xc3\xc0\xbcR\x94\xbd\x81\x8f\x1f~C\xfe+\x7f\xcd\x8e\x97\xc7G\xc2\xb52\xd8\xff\xd5\xf1Wb\xfc\x92q\x13\xad=\xf9Mh\x06z^\xc1F\xa6\xd6\xce\xd9\x11pV\xac[\xd8\xb6\xdbB\xb8C\x05\xf06\xe5J\n\xdc\xd4\xeas\xa8\xac\x8a\xc6\x9f\x83 \xa78\x8f\x1b\xd6vp\xc9\xa3\xff\xd2j\xac\x13\xf3<^\xc3\xb6ef.\":\x92x\xb9\xd67\xf0\xa6z<\x86?\xd7\xf7\xec\x8e5G\xde\x99\x9b\xb0\x8f\x1f~43>QT0\xe9G\x8e\xa0\x0c~\xbd\xe5|\xf3\xeb\x91\xfa\xff\xf6\xd7#\x15o\xd2\xbf\x1e\xc9\xde8/*\xa8\xe5\xd3)<\xe2/\x90q\xd8n\xc4'\xc1\xe3&t]\xd6\xdcI!\xe2\x82\xc3\xba\xd8\xb4\xaak\xc9\x9a\xf3\xba\x03r\xe5\xbb\xadT\xef\x91@n\xd9M\xbdZ\xd5\xf7\xed\xeb\xc0\xbd\xfd\x9fRM\xd8\xb4\x08\x06J\xc1\xba\xd1\xfa;s\xbb\x16\xdf\xd0\x81\x82\xdeT\xf0\xe7\xab\xab\x0b\xf8\xd3\xd9\x15\xd4\x95y\x04\xd53\xf6(\xbfY\xfcI`\xff>~,\xae\x1e7\xec?\xfe\xfd?\xbc'\x80y\xd5W\xba\xbf\xe9\xd7\x88\xbcC\x9b\xa6^l\xe7L\x06\xe1\xc4+\xcc\xbf,\xf1?\xe1\xcdf\xb3*\xe7\xfa\x9d,&Y\x85\xf0\x99\x9a\xf2\xcd\x8b\xb9\x18[\xea\xfa\xd3v\xd3\xcd`\xae\x8b6\x94\xe9\x13N\xfe\x92\x9dP\xd6Q\x06\xc2\xf9-[[\xcf\xd0B=D\x85iR\x17@\x0b\xe5\xf4\x80\xae\xa0\x1c>\x1avS7\xec\xc8\x14 \xca-xy]\xaeJ\xfe\x08\x15c\x0bC\xc8\xc9!\xaf\xb9\x0b\xb4D\xb6e~[TK&O\x92\xcf\xec1|\xfd\xb1ep\xc7\x9a\xb6\x94\x81U\xd9=\xc5\x98\xa5\xfagQ\x15\xcbP\xeb\xaf\x1b&W\x98M\xc1\xc7\xdf\x04>|k\xce^\x03\x17\xef\x90\x1b\x1d\xf4/d;\xf4\xd8\xd5\x0b}Z\x93J\xffp)\xfac-g\xe0\xfe\xb9\xa4~\x97]o\xc5\x84U\xbc\x89\x98^i\xe1\xe6\xa2]\xee~\xf7\\z\x8b\x92\x84\xac\\\xc7\x17\xdf\xff\x81\x97\xcb\xe3\x86\x1d\xab\xfe_l\xca\xf6x^\xafC\xa3\xf1\xa5|R[\x1d0\x96,\xe8h\x94\x82\xafu\x82\xbf\xfa\xb0P\x8f\xf67\xfe\x97\xa0\x84`\xae\x03\x83\x92\x02VKn\xad2\xe8%\xb6\x0d\x9b\x977\xe5\x1cZ\xb6.*^\xce=\xba\xa9\x07\x08\xc4\x8c\x0d;K\xfaI\x0cG\xd7\xcc\xc4l\xad \xce\xce\xea\x16\xba\xafw\xf6P\x88\xce\x0f\xdf\xbe\x86\x8bB\x13M\xba)E\xe7\xf4\xb2\x82\xd3\xff\xf5\xbf\x02\xaf\xc9\x1f\xea\x1an\xea\x1a\xbe\x83\xe3\xe3c\x7fV\x8c\xa8LQ=\xfa\x0f(\xaa\xc7cQ\x8d\x1f\x9az\xfd\xf5M]\x7f\xe3?\xf4\xf8\xd8\xff\xfe+o\xe0kQ\xd4G\xd9\x90\xab\xfa\xeb\xff!\xca\xfa&\x98\xe4\x13*\xef\xbf\xc3\xbe\xfbC\xc4w\xffR\xdc\x15\xd9\x9c\x07\xdf\xc9\xb9\xa1\xb8J\x06\x0f\x95\xed\xd7?\xd4\xf5\xf1|U\xb4m\xc4A\xaa\x8a\xe2$\xd5F\xebD\x7f\x1d<\x9e\xeb\\\xf7\xc7\x88\xeb.\x1e\xf9m]\x05\x9c\xa7j\xf5C]\x7f}||\xec\x7f\x1bt\x8e\xfb:x\x8c\xec|\xd2\xadS\xbd*\n9WN}{vy\xfa\xe1\xfc\xe2\xea\xfd\x87oB\xcb\xf4}G\x0d_X]:\xec\xce\x7f\x8c\xb8\xf3O\xb5\xdf\x93\xd2\x95\xaf\xbf\x83\xff\xb1\xb9>\xfe\xa1\xae\x7f;>>\xfeo\xff\xc1E\xf5x$\xa6\xa1\xe2\x8c\x8d\x9aD\xfdT4\xedm\xb1\x12N\x0e7$\xe4\xc2q-\x02U(oF\x15\xf8X\xad\xfb*\xc8\n\xca\x07D\x1e\xf5\x7f}\x07U\xb9\n\xa7\xf9\x05\xeb\xe5\xe9\xc9WrQy\xfe\xa9\x1b\x8b\xcd\x87\x06\\?\xf6\xd3.\xf3\xf6Pk\xa3\xeeY\xaf\xc9\xc8\xd8\xb6\x9e9\xcbK\xc7\x94\xeaD|\xbf\x1f\xcb\x1f\xc4t\xf5%\x14\xd6\xdbN\xbc EO\xf0\xbd\x1bT\x0fq_\xac{\xb5T\xabG\xf3]\xb9\xb3X\xd0M\x93\xa1\xb8\xe1\xcc\xb5R\xa8L\xaec\xbcR\xd3qWq\x85g\xf5\xc6\x9aR\xa8\xe0\xdb\xaf\xff\x9fp\xdd\xafz1\xa1\x9b\xb6\xd97\xc7\xfd\x80\xe8\xe1\xe7u\xe0\x03\xa4\x98\x7f\x12cP\xffA|S\xae\x98\xff\xbda\xc6\xac\x0b\xd6\xb4u\x15|l\xf5J\x9c\xe4\xdag\xf2\x0eG2s\xf5 \xa2S\x9a\xe3\xddy\xb9\xd2|o0\x80`\xad\xbe\x92\xbe\xfc\xea5|\xe5zj\x87n8V\xad\xfc\xea(T\x9el\xdf\xbbb-\xca\xfc\x7fU\x13\xfeO\xf0\x04\xd1\xbe\xd1\xf1\xa9\x8d<\xbf\xd1\x1f\\\xc3\xbe\xa6zC\xd9\xc2=[\xad^}\xaa\xea{\x15\xf8\xbd-Z(t,6\xf1\xe1\x1av\xf9\xa3\xd1\xde\x0b\xea9\xe8\x03K\xba:\xa2\x03{>\xae\n\xd5\xa5\xdd\x17\xfbU>\x8c\xa6\x9f\xdf\xd6\xab\x85\xea\xe4:\x8a,\x1f\xe5Q`\xd57\xb2\xe9G\xc6}\x1dY\x85\xe3\xee\xe5\xfc\xb5\x18\xd7\x8c\x0bw\x96\x86\xcc\x8a\xe9\x7f\xfc\xfb\x7f|\x13x\x90r\xf4\xb9\xe1\x05\xc3\xddN\xbaJ\x14\xf9\xed\xf1\x1f\xbe\xfdC\xfbU\xa0\x0b\xa9\xff\x0f\xa1\x84C4\xc9*j\xf019\xa3\x80{n\x95a\x9e^e\xf3\x86\xa9a,\xacE\xdc\x1b\xf2F*\x8b\xa7\xe1\xda\x96r\xf3\x95\x8dj\x0f\x83\x0fF\xfd\xb7.?\x1cQ\x9e\xddW\x80\xd7\xf5'\xd8\xac\x8a\xb9G\xbf\xb5\xb7y->\xf2eE\xfc\"\xfd\xb6MrbL\xeb\xb6\xb7 \x8e\x1c\xb6`\xe0\xc7mU>(\x15\x85\x10\x8a\xd4\xdb\xc0\x89}\xc11'J\xfc\xa7X\xcd\"\x89\x18\xbd%91\xdd%\xa3\xfa\x0c\\\xa2\x7f3(>\xa249'\x1exF\xea\x85\xf8\x93x\x8c)\xac_\x0cq\x9f\xdd#}U`\xb8Am\xe4\xc5\xaa\xcc\x1a^_Y\xba\x04*kA>\xc82p\x82(\xc9vc\xd8}im\xb4\xe7\xa0g\x15o\x1e\xad\xb4\x97\xc1\xadC\x8c\xc0\xa08\x85\x86\xad\xd8]QqX3^,\n^\x84\xea;\xa8\xad~\xaft{f\x0f*\xa0\x7f\xf4\x15\x86m\xf6\x87\xe1\x93j\xad\xf9\xaf\xcaVm\xb7-7\xde.\xe72`\xe1+\xa6\x9b4\xbd\xb4\xa7\xfe\xd5R\xa6\x91\x052\xc1n\x9az=\xb8\x82\x99\x87\xf4\xddC\xae\x13\xa0\xaa\xd0\xbf\xbb#\x89^\x91\x17v\xfce\xfdt\x1b\x82\x0f\xbe3D\xbd=I%\xc6P\x97\x06\xf4\xe5\x81\xe6\x07#\xa3\xf9\x01\xcd\x0f\x8c\xd1\xfc`l4?8\xec\xfc\x00\xd5\xf3Q\xf7\x18\xdf\xee\x9d6\xfb\xb3\\\xfd,\xbc\xcbuV\",\x94\x81D\x15\xb0\x18\xd2\x94\xd4\xd7@\x81vR\xacN\x80\x0d]?\x90\x1b\x8b\xf3\xa4\xdd\xf8\x80\xfb\x86\xd31\xe5\x1fgy\xdag\xad\x99\xca\xb8+\xdfe&\xed\xed5\xb4\xbf\xbc\x9e\xa2\xd4]i\xe1\x14Mc\x94\xba\x0b_r\xea\xeeNsd\x18g\x10\x1f\x99\x96\xb3;\x8c\xd5x\xe5\xc7\xfa\x1bI\xb9\xbb;\x0e\xa2\xdc]\xcc\x0b\x0f(w\x97rw\xbdGR\xee\xae4\xca\xdd\xdd5\xca\xdd\xa5\xdc]\x9fQ\xee.\xe5\xeeJ\xa3\xdc]\xca\xdd\xa5\xdc]\xca\xddUF\xb9\xbb\x94\xbbK\xb9\xbb\x94\xbb\xeb3\xca\xdd\xa5\xdc]\xca\xddu? \x94\xbb\xbbc\xd8\x1bn\x0c\xe0\xab\xf7\xee\x91\x83\xba\xf7,\x8aU\xf7\x0e\xf7`\x92b\x1c\xb7 5\x8f\xcb\xd3\x86E\xcb\x91m\xd8=2\xa9\x0dC\xf9\xf3\x8c-\xa0\x0cj\x8c\xb7(\x83Z\xd9\x81\x9d\x1b\xcf\xfd\xa5\x0c\xea\x1c^\xa4\x0cj\xca\xa0\xa6\x0c\xeamu]\xcb\xd6\xcc,\xecF\x15\x8e\xddb\xec\xa3)\xc2\xb7\xd7Xw\x8d\x9d]\xc7\xba\xc2d\xeau\xef\xc8\x9d\x99\x98\xe9N\xee\xed\xc7\\5\xd0'<\xdb\xec\xec\xde\xf1\xcf,5{\xd8C\x02 \xb3\x88\x18\x14&\x8c\x03\xaekFs\xa4\x83\x11\xe3\xae8od\x0d\xb7\x13X\xc6\x16\xa6\xef\xfe\x15l\xe1\xdfO\xf6PR\xea\x0e\xe2\x86(\xc3\xa7\xec`o\xa0\xb2q\xaaN\xe9N\xd2\xe9\x9f\xeeHy\xb8\xec\x9c\xa4\xcc\x9cd\x1f\xe12r\x12\xfd4\xca\xc4)\x1dI8h'\xe1\xb2o\x922o\xd0NJkv(\xdbF\xefQ\xa7\x0f PO\xca\xc4kf\xb1])\xa8F\xef\xa5\x07\xe2s\x08\xe5\x8c\xcf\xe9\x84@\xe3\x07M\xc9p\xd7\xf1\x15sL\x11F\xc91\x955O\x89\xa6\xc6\xa4\xa5\xc5\x0c\xaa9N\x99u\xcd\x8eB\xa9\xb3\x986;Z\x0b-\xaf\x1b=!\x93)\xb3\xe2Sx\xc5\xec\xb4XgQ}\xf5\x02y\xb2r\x8buS\xa2\xb5\xc1}%\xdc*\x9e\xf7Wr\xae\xcc\x162e\x97\xf2.\x9c\x07P\xdeE\xff\x13\xd6\x99\x94w!?\xfe\xc6\xcf;~\xef\xb4Qi\x0e\xbeW\xa5e\x04\xaf@{\xaa\x19\xa3\xbc\x8c<\x9fK\x94\x97Ay\x19n\xa3\xbc\x0ci\x94\x97\xb1k\x94\x97Ay\x19>\xa3\xbc\x0c\xca\xcb\x90Fy\x19\x94\x97Ay\x19\x94\x97\xa1\x8c\xf22(/\x83\xf22(/\xc3g\x94\x97Ay\x19\x94\x97Ay\x19\x96\xe5`\xe4)/C\x1a\xe5eP^\xc6\xf3\xcc\xcb\xa0\x8c\x804\xdc\x9a2\x02\x0e\xe8\xdc8\xcbN\x19\x019\xbcH\x19\x01\x94\x11@\x19\x01\x1d\xbe\x15H\x03\xf8/G\x1a\xc0\xcf\xddy\x03\xf8\xbf/\x0e\xca\xea\xa6\x96\xfdSm\xb4\xd6]\xb8++\x04\xfb_\xaa&8.\xa7\x8f~\xb6\xa4\xff\xd8\xa1\xb6\xf1\xcf\x80q\x98]\xa3\x9e\x90~\x1f_r0\xbd\x1b\"\xef\xbd\xbb<@\xa2]\xde\xff\x96\xf8<\x18x\xbe\xac\xe44\xde\xfd\xb9:\x17\xb7\xb7j\xb7\xedl\xb3\xbd\xf6b|Q\xef\x02\xc2\xc3\x80\x80e\x00\xe7aH\xf02L\x00g\x82\x85\xb9\xa3'\x81\xc5\xc4\xdc\x00\x0d\xc4!\x1a\x98\x00\xd2\x84\x1bP\xf0[4L\x03\xb9\x80\x1a\x98\x08\xd5\x04\x0b\x94\xba\xeaX\xb0\x06\xf6\x87k \x19\xb0 \x16\xa5\x03\xffI\x90\x0d\xe4\x06m \x11\xb6\x81T\xe0&\xdc\xb3;\x18\x07\x0b\xdd@n\xf0\x06p\xf0\x0d\xe4\x04p`o\x08\x07\xa6\x818\x90\x0b\xc6\x81I@N\xf8q(\xc4\x07o\x14\xca\x81\xc3\x809p@8\x07\x0e\x03\xe8@\"\xa4\x03\xd3@\x9d\xd8\x10\x8c\x83u /\xb0\x03 \xd0\x0e\xa4\x83;0\x01\xdeA\x0c\x99\xdf \x00\x1e\xc8\x01\xf1@\x0c\xe4\x01\xfc\xf4\x0c\x01\xf4@\xe2,.\x19\xec \x96&\xa1\x1f\x04\xdc\x03 \xb5\xcc\x08\xf9@\x12\xe8\x03\xb9a\x1f\x98\x08\xfc\x84\xfbU\x1b\x87~`:\xf8\xe3-O\\1\x06\xff@6\x00\x08\xf0\x1c\x0b`@ H\x83\x81 \x16\xbd\x9f\x08\x05\x01\xa2\xdc@\x800\x13 \x04\x93\x9c\x8b\x07\x85\x00\xd1\xca \xc0\x10L\x85\x86 \xec\xd5|\xf0\x10\xe0\x01\"@BD\x80\x06\x89\x00\xe7\xf5t\xa0\x08\x92\xa0\"\x08\x82E\x90\x0b.\x82T\xc0\x08\xf6\x84\x8c\x00\xe1\xde\x04\xd8\x08\x0e\x01\x1c\x01\xa6\x8e\x81'!\x1f|\x04\x18\x00 \xf6\x80\x90\xbc\x05r\x99\xf8\xec\x07\x91 7\x8c\x04Q \xa6BI\xde\xd2\xd47j\xf8s\x1d\x01'A\x90\xa1\x80 \xa4\x04\x93@%oQA\x80 \xa6BL\xde\xd2\xd4<0\xb0j\x96\x0ff\x02\x14\xd0\x04\x13\xa0&H\x03\x9b`\n\xdc\x04\xc9\x80\x13D\xde\xb6\x11\xe8\x04\x12\xc0\x13,\xec\x04S\x80'H\x85\x9e \xdc\xf0)\xf0\x93\xb70\x0b-\xc2>28\x08*\xf8@T\xcb0\x08\x05ya(\x88\x01Q\x10\x86\xa2\xbc\xe7L\x85\xa5 c\xdfM\x80\xa6 \x9c\x02\x0b\x9e\x1a\xda_\x8br\xc5\x16\xe1\xe8\xd48\x16>4\xec7\xbc\xba\x12\x18\xf5\x81\xfb[\xa6Wrl\x0d\x0f\xd1\xc3\xaf\x19\xab\xf4\xd1\xfe;\xdc\xd4k)\x11\xc2\x16\xd0\xf2\x82o[\xb5\xdc\xbd\xa3\xf6\xa1L\x1d\xe2k%\xb6\x05\xfaB\xe5X?V\xfd\xdd{\xda\xd7\xaa\x9e\xbd\xf8\x9d\xfe/\x19\xdep\x9f\x82X\x0bb\xd5v\xed\x9f\xa1\xbf\x82\xef\xdf\xbf{;\xbb\xbczs\xf5\xf1r\xf6\xf1\xdd\xe5\xc5\xd9\xe9\xf9\x0f\xe7go\xd1g\x88\x7f%\x1e~\xfe\xeeO\xc8\xe3\x83\x85\x1b)\x87\xa4&(\xc9\x9f'\x08.km!\xd5\x8d\xc1\x02\x06\xe5:\xbb\xfc\xed\xeb\xb2\x9a\xaf\xfc/\xfe\x96\xadn^\xf5\xea;\x9eN\xd0\x83\x12jO\xe2'h\xda\xf8\x92}\xdc\\\xf2:\xfa\x8fe\xdbnUL\xc1\xff*\xb2\xa2\xea}\xa9\x9e\xc5Q\xbbv{7\xa0;n\x84t\xf6\x7f\xe7\xacY\xb7\xe0\xde\x13\xb6\xb7\x88\xe2]\xb6\xb8\xfd\xba\xae\xcaO\xcc\xa1\x14\xd2\x1b\xe2\x06C\x82\x8f\xa0\xbf\xaa\xb5U\xfb\xedv]T\xaf\x1aV,$\xd6%gt1\x1f\x01\xc6O\xa0 \x00\xee% \xe00m4\x97\xb5%\xb7L|\xb3\xff\xb1-\x97U\xc1\xb7\x0d\x83\xaf\xd9C\xf8#\xf9\xe3E\xddHF\xf3_\xd9\xe3u\xd12\xef\xe0\x0dp\xcf\xae\xdb\x92\xe7X\xed\x1f\xb4X\x17\xebl\x91\xf9mUV\x9fBC\xcf|\xdb\x94\xfcq&\xbfU\xe6A\xfd\xc3)5\x8c\xdc\x93\xf1\xe5\x9d-a\xeb\xa2\\E\x83\xe4\xa6(\xd0E\xf9\xdb\xec\x15\xb5\xe9mJSu\xb1\xe6E\xa0\xc2R]#\xf4\xaf\xeeZ\xf5b\xaca\x15JD\xb50\xca\x93\xd8;4\xae\x96\xb9;GP\xde\xf4?\x1e\xc9\x11U\x1f\x11\x80i\x8c:e\xd9\xeeL\xef\x96[K\xfd.\xe6\xa2\x90\x04e\x82\x83b\xb2\x93\xe9N\x92\xc2\x92\x01\x17\xad\xcb\xaa\x13\x9f\xf4\x167\x9cH\xf2\xda\xe8\x10\xb2\x98\x83\xe6\xf5z]\xb6-\xf6\xa5\xd9\x1f>x1Z\x7f\xees*\x0e\xfc\xca\xeb\xaf9k\n\x1e\x96k\xc5\xde\x15p\x94;h\xa8\xd6\xc1\xb4\x0e\n\x96\xa5\nPHA\x17\x06Wj\xac\xf2{\x17\xf1\xdaC\xf9\x0b\x90>\x03]\xa7\xd8\x92<\xe2\x810\x96\xe2Z\xd0\x977\x9f>V\xb7\x91\x7f\x9e\xdf\x16\xcdR\xce \xa3\xc5\xf4\xb3\xc1#\x90\xa9\\7\x12\xdf\n\xeb\x8b\x02\xac\x8b\x87\xd9gv\x80\xa9\xc2\xa0_\xad\x8b\x87r\xbd]\x8f=\x12-L\x8d\x8e\xfd\x93?/*`w\xac\xd1\xaeL\xf6\x8d\xe2M\x9e\x83\x8b\xac\x9a8=\xb5(\xca\xa8\x1a\xad\xccMhX\xd1\xb2\x1dL\xd7\xf2\xb4rR\xb4\xa8\xb8\x13\xb7\x1b\xf1v\x88\x8a\x1d#\x1d\x87}\xe3@\xa2\x83\xadZ\x9a\xe7P\x86\x18\xe4\x1f\\O\xe5}\x04\xb3Swj\xe1\xf6\xcb\xba\xacf\xe2C\xd5\x12\xea\xdf\xe3-\x8cm\xa7\xe3\xaa;\xcb-/[\xf9\x05\x0d\x0b6_\x15\xe3\x94\x90Qa\xb2\xc7\xe9\xa3M\x81A\x85 W\xf2\xc4?;\x0e\xc74\xa8\xcb\x19\xb0\xbe\xb3\xbaV\x1c\x01\xaf\x97j\x05L\xc6\x1d\xb8I\xb6q\x16U\xac\xad\xa4\x1cw\xf5\x7f\xb6\xfc#f\x0e\xe6s]'\xe7\x97\x0d\xb0\x07u\xc7U\xef\x90s\x8d\xb2\xf2\xbc\xed/WE{+\xdeu&9\xc5G\x13\x17\xe2>\xa8GU\x87\xb3\x06\x979R\x0c\xa2D\xe2\xea\xa6\xf1\xbd \xe7\xc5j\xbe]uQ\x9c\x9b\xad\xf8$s_p[\xd9\xdb:\x08\xdf\xd5[\x0e%\x97\xc9\x1b\xd5\x12\xea;\xf9a\xdb\xad9\xc0/\xb7\xacRMu7\xa0\x19\xae\xe0\xb8\xaf:\x9c\xc7\x1e\x8d\xc6\xa4\xb2\x15\x93\x83E\xc9\x0d'VX\xfd\xcdY\xde\xfdm\xdd\xb2>\xaf\xca}Q\xfb6\x96\xed\x80\xc8\xb4z\x84lZ\xdf\x04gI\x8b\xb2\x0b\xd9\xaauw\x89\x15\xba\xaf:\xb8\x7f\xc7\xf0s-\xdd\xba\xa9\xefYcr!\xcd\xedb\x0b\x19\x86\xf5v[\xb3@+\x9b\xe0\xbe\xdaz\xbb\xe2\xe5fU\xaa\xca\x0d\xaf\xbds\xc2\xe0\xa9\xb3R}\x9c\xdbz\xb5/U\n\x90\x94\x9f\xf6\xee\xd1@j\xd0\xd2\x06M%5h\x943\xbf85\xe8\x9d~!\x13\xff\x1c9rA\x0dh\xc7\x9a\xa2\x12}v\xe5\xf6\x91\xd4\xb36\x92z\xce3\xc3L\xcdXS\xdd\x96\xa4\x9e\x11\xd9i\xf9M\x01\x81\x01}\xb7?wg\x9cW7u'\xe8&Z\xd9\x176VuS\xa5\x9av\x0e\xb4\xdb\x86\xe5\xbd0M~\xa6\xbam\xa2\x89\xbb\x13\xf9AU\xc4!\x83\x9b?v\x8b\x16\x80ty\xa67o\xdd \x1a\x9a\xbbe\xc5\xc2\x07\x96\x07\x8b\x85h\xd1\xc2\xf4\ni\x80\xe1Q{i^\x17m9\x87\xebU=\xff$\xdb\xed?>V'@\xd5K\x98\xbcZ&\xe0\n\xb1k\xa8\xb2b\xb3y\xdaKb\x96\xdd\x94\x9d\x1a\x8d<\x98\x17\x1b\xbem:\x80\xd4\xfc\xb9\xd9\xae\x98\xca\x85\xd84\xb5x~\xc2U,\xba\xfb\xa9\xe2a\xe2\x1f\xf3\xdb\xa2\xac\x8e\x02\xdf\x94Z\xccT\xf2\x98\xe2\xed\xdd\x9d\x04\x8b\x82\x17\xc2/\xdb\xb9\xaa\x9b\xfePQ\xb5\n\x14h\x96/\xfb\x00\xc7K\xcfn\xc5\xcaZ.I\x9d\xa6\xa8Z\xf56_\x17\xf3\xdb\xb2\xf2H\xb2Hz\xab\xacf\xa5'\xb9\x0dp\xb74\xc4\x82\x03\xae\x08\x0c\x13\x0e\xf0\x84D\x9d\x9c/\xcb\x1b\x18\xf6\x8e\x1a\x016\x0d\xbb{\xe2\x01\xe0\xb6ho3?\x8cAy!9\xd7\xe1\xb3\x96\xf1Yh\xd85\x86j)\xa0[+,\xb01\xf2\xe0\xb0 \xa826L\xb73\x16w9\xa4\xb8\x1d\xf0\xae\xef:\xdaE\xd1\xf0\x96\xf1?\xcb;\x10\xea\xba\x12\xe2\xe4\xb3p\x95QUEUQWO\\\x8e\xc9\x15z\xf50\x88a\xcfs\x8e\xf8\xe9\x89\xaa\xd7\xab\xfb>\xd1\x05\xc7\xfe\xb8i\xea\xb5\x19\xc7\xa1\xde\xf2\xcd\x96\xf7\x7f\xeb\xc7\x0eOiR:\xff\xc9\xdb\xd0\x8b\xce>\xcd\xf5\x8a\xcd\xe6\x89\xae$\x9f\x0fM\x02<\xd1%\xd9]\xb9`\xd5\x9c=\xd1\xe5\xba\xfe\xd7O\x7f\x02\xaf%1\x02\xd7-\x8bh)C\xb6\xfa\x0d&uj$\x1b|Et\xd3$\xb9\xa4\xa8G\x12\xf5\xceqMc\xee\x8aU\xcb\x82\x99hnZ\x10B\xc4 \xe0^a\x98\x97\x17N\xaaZ\x19\xca\xc1)\xd3\xe2$\xf1\xea`96A\x9f.a\xad\x0c'd\xad\x0c\xe1}@\xde\x01\xd0\xc5\x85\xa5\xad\xfb\xe3\x10w\x00\x12\xef\x02L`;\xa3\x05rg\x90?\xf4y\xa0\x0c\xcdzFK\xeaY\xd0\x18\xf3i,\x95\xfd\x8c\x16\xb8)\xf8-\x9a\x015\xe6\n\xef$\xb3\xa0\xc6\xf0Lh\xb4(\x9b\x19M`C\x8d\xed\xc9\x88\x1aKcE\xa3\xc5i\x8e-\x89\x195\x96\xca\x8eF\x0b\xbc\xa9\x9b$\x86\xd4X\x12K\x1a-m\x8a\x8c\xb62\x14[\x1a-e\xc8\x9eb\x18Sc\xd9X\xd3\xbe\xc0}\x98Sc\x13\xd8ScY\x18Tcx\x165Z\xd4\x80U\x8d3\xa9\xc6\x0e\xc0\xa6\x1a;\x14\xa3j\xec\x00\xac\xaa\xb1\x14f\xd5\x18\x9a]\x8d\x96d\xb3\xad\xb2\x7f\xc7\x19VcI,k\xb449N`\x99Vc<\x8dm5\x96\xca\xb8F\x0bL\x11\xeeV\xb67\xf3j,\"\xe2\xad,a\xea\x18\xfdF\xea-u\x96\x99\xc4\xc6FK\xe3\x86\x9dE0\xb2\xc6Rj\x9c\xc8\xcc\x06\xcb\x1a\xcef\x11\xec\xac\xb1$\x866XRT\x16\\\xd9\x14\xce6\xde?Q\x12\xe1\xca\xa6p\xb7\xb1\x029J.\\Y\x1e\x0e\xd7\x18\x12)5\x16\xe5r\x8d%\xf0\xb9\xc6\":\xbe\xd2\xa6\xf0\xba\xc60\xe5\x07\xa5@\xb3q\xbc\xc6\xa69\x1f\xcf\xf5\x1a\xc3\xb4|\x02\xe7kl\x12\xefk,\xe2\xf1|\xfc\xaf1$\x07l\x0c\xc3\x03[\xc7\"\xb8`c\xc8\xbb\x92\xce \x1b\xc3\xf3\xc2\xc6B\xc2\xe5\xca\xb2\xf0\xc3\xc6\x928bc\xfb\xf0\xc4\xc60\xaeO\xe0\x8b\x8de\xe7\x8c\x8d\xa1\xea\x1by\x92\xd2\xf9\xe3`q\xd7\x8fq\x0e\xd9\xd8\x14\x1e9X\xa0A\x00\xc2\x02\xe8\xca\xa6\xf0\xc9\xc1\x02\xb9Ys\x0b\x88\xa1+K\xe5\x95\x83\x85\xf5,3b\xb9\x03\xc1/\x1b\x0bi4+\x0bI\xa5+K\xe7\x9a\x83\xc5E\xc4\xd4\xcdAx\xf69\xd2A,.: \xac\xae,\x95\x85\x0e\x16\xf6\xf1\xc3\x8f\xc7\x08&\xdaX*\x1bm,\x81\x916\x96\xccJ\x8fND2\xd3\xc6b\xb3\x80\xa8\xf8\xb52,\xd7\x8ae\xa9\xbbrS\x99\xea\xee\xc4\x14\xb6\xdaX\xc4\x19SX\xeb`\x81\x08\xb1veS\xd8\xeb\xe8\xc3\x14\x17nW\x96\xcebGG\xf1\x88\x88\xbb\xb2\x00\x9b\x1d\x11\x8d6E\xc8\x91h\x96\x92`\x86N,\xa3M\x11hS\x04\xf4,))\xf1K}.\xd1\xa6\x08\xb4)B\xaed,d\x1eP4\xf9*!\xe9\n#\xf9\x9f\x92dE\x9b\"\xd0\xa6\x08\x98\xe4'\xda\x14A\xda>IL\xb4)\x82\xab\xa4h2\xd2\x94$$\xda\x14\xc16DR\x11m\x8a@\x9b\"\x0c\x8c6EHK\xd4\xa1M\x11:\xa3M\x11\xb4\x99\x0d\x06vX\xc1\xc1G\xe4\x905\xec\xa9A\xfd\xf7n+\x01\xbe+6o\x0fK{n-\x00\x1e\xa62u\xcb\x01\xe9\x07}\x86k\x83\x81\x8b\xceO\x83\xcd\x05t1\x0e\xc0n\xb0\x9d\xc0\xa5:L\x16b\xbe4\x9f\xedn\x02\xb6+l\x1bTF\x1d\xa4\x9fF\xb9\x9a.gV\x9d\x93\xe4[\xb0la]/\xb6+\xc7\x8a\x84\xb7^\x10\x8dga\xd0\xd2\xe8r\xce\xa01#\x06T\x83\x1e\x8a\x07\xd5\x8f\x9d\xfc\xd2\x0f\xd1\x9b\xeb\xe2\xc1\x12\xfe\x0d\xd5*$w\x1d\xc7\x83\x07\x15\x1f^\xd4T\xdc\x10Q]\x84\xdeRU\xf6U\x9dU\xbc \xc6\x0f\xb3\xd6\xdb\xbb4fU\xc5j\x0d\x98?\xc9\xa9f)\xd7\x1c\xbb\x9b\xe1)\xc9\xe2\x15d|\xda\xfa\xf7\xd7\x1b\xd6\xc0\xa6(\x9b\x13\xde\x94\xb53\x9d\xc0\xda\x81\xe4\x99xf\xb7F\xc6A\xfdm\xb6\x86Ys\x8c\x97\xa2\xd9\xb0\xa6-['\x9e/\x1c;[\xb0\xaa\xf6\xe4\xd8\xa5=\\}i\x03lO\xfcY\xae\x96\xcf\xeb\xb2\x02\xf9{Yi&j\xb7\xc4uY\xcdF\xbc\xef\xc4\xbai\xb5e\x7f\x0f\xdc\xbdRG\xba\xde\x16e\xf5\xea\xbe\\\xb0\x0e\xe7\x8a\xe2\xc5\ne\x12\xd3\xa3bDr*\x88\x13\x14\xfa\xd4\xf3?\x83r\x10\x8c\x88z\xa7D\xd9\x10M\x83\xa8\xa3%\x052,\x8b \x10\x82@\xa2\x11\x10\xdcHE\x10\x08A \xbe# \x02\x91F\x10\xc8\xae\x11\x04B\x10\x88\xcf\x08\x02!\x08D\x1aA \x04\x81\x10\x04B\x10\x882\x82@\x08\x02!\x08\x84 \x10\x9f\x11\x04B\x10\x08A \x04\x81X\x96# O\x10\x884\x82@\xfe^ \x90dX\xa2\xaeW\x01T\xa2\xaeW\x03HB\x1c>\xe0>\x06l\x848\\\xff\xfd\xf9\"\x11]\x83m\x1b\x02\x11\xa2\x91v\x80s\xa7\xd5\xbdyk\x00\xd18NU\xf3\x99\xcaD\x9f\x85\xd4=#+\x19\xfb\x940h\xb5\nA\xd6\xf5\n\x1d\x80\x14^\xf9pqJ\x01G\xa0\x80ct\xb5\x0d\xb3`\x05\x14p\xa4\x80\xa3\xf7H\n8J\xa3\x80\xe3\xaeQ\xc0\x91\x02\x8e>\xa3\x80#\x05\x1c\xa5Q\xc0\x91\x02\x8e\x14p\xa4\x80\xa32\n8R\xc0\x91\x02\x8e\x14p\xf4\x19\x05\x1c)\xe0H\x01G\n8Z\x96#\xf8C\x01Gi\x14p\xfcR\x03\x8e\xe3\xc4ZW\xd8\xf1\xe7>\x0f\xd6\x04\x1f\x8b\xd5\xcaJ}5+\x8b|\xaeT\xcd\x97\xe5\x1d\xab\xf4^\x86\xce\xc8d_\xa2\xfe\xf5\xd9\xc6'C\x89\xc7\xfc3\x84~\x94\x1b\xebfV,\x16\x0dk=G\xa1\xd6?0K\x08\xe0\xb8\xe4 \x16k\xfe6\xde\xf0\xe1\xa5\x7f \xcb\x94\xf7\xbf\xe1\x9a\xcdo\x81U\xf3z!W)\xe5\xa3\xef~\xc5\xcd\xc5\xed\xad\xdam;\xdbl\xaf?1\xefNl\x11\xef\x02\xc2\xc3\x80\x08\xb0\x01\xce\xc3\x90\xe0e\x98\x10l\x0b\x16\xe6^q |\x80\xe4\x0e\xbaA<\xf0\x06\x13\x82o\xe1\x06\x14\xfc\x16\x1d\x80\x83\\A8\x98\x18\x88\x0b\x16(\x9c\x8b\x0e\xc6\xc1\xfe\x019H\x0e\xca\x05\x8b\xd2\xc1\x82\xa4\xc0\x1c\xe4\x0e\xceAb\x80\x0eR\x83t\xe1\x9e\xdd\x05\xf0\xb0\x81:\xc8\x1d\xac\x03\\\xc0\x0er\x06\xed`\xef\xc0\x1dL\x0b\xdeA\xae\x00\x1eL\n\xe2\x85\x1f\x07k\x87\x8eH\x13\x0e\x10\xcc\x83\x03\x06\xf4\xe00A=H\x0c\xec\xc1\xb4\xe0^l\x08\xc6\x05\xf8 o\x90\x0f\x12\x02}\x90\x1e\xec\x83 \x01?\xc4\x90\xf9\x0d\"\xe8\x079\x02\x7f\x10\x0b\xfe\x01~z\x86\x08\x02B\xe2,.9\x18\x18,M\x06\n\x11\x01AH\xa8e\xc6\xc0 $\x05\x07!w\x80\x10&\x06 \xc3\xfd\xaa\x8d\x07\naz\xb0\xd0[\x9e\xb8b,`\x08\xd9\x82\x86\x80\x8f}\x01&x\x08i\x01D\x88\xad\xf8O\x0c$\x02\xa2\xdc\xc0\xa2b\xa6\xa0\"Lr.>\xb8\x08\x88VN\x082\xc2\xd4@#\x84\xbd\x9a/\xe0\x08\xf8\xa0# \x03\x8f\x80\x0e>\x02\xce\xeb\xe9AHH\nDB0\x18 \xb9\x02\x92\x90\x1a\x94\x84=\x03\x93\x80poB\x80\x12\x0e\x11\xa4\x04L\x1d\x03OB\xbe\x80%`\x82\x96\xb0G\xe0\xd2[\xa080\x14\xbc\x84\xdc\x01L\x88\x061aj \xd3[\x9a\xfaF\x0d\x7f\xae#\x02\x9a\x10\x8c\xbb@0\xb0 \x93\x82\x9b\xde\xa2\x82AO\x98\x1a\xf8\xf4\x96\xa6\xe6\x81\xa1}C\xb3\x05@\x01\x15\x04\x85 \x81PH\x0b\x86\xc2\x94\x80($\x07E!\xf2\xb6\x8d\x04\xaa !X\x85\x0d\x90\xc2\x94 )\xa4\x06J!\xdc\xf0)\x01SoaV8\x12\xfb\xc8\xe0\x02\xa7\xc1\x07B\xee\x87\x1f\x08\x9eB\xde\x00*\xc4\x82\xa8\x10\x0e\xa4z\xcf\x99\x1a`\x85\x8c}7!\xd0\nI\xc1V\xb0\x02\xaeC\xfbkQ\xae\xd8\"\x1c\x9d\xba\xae\xeb\x15\xf3.\x1dc\xbf\xe1\xd5\x95t,n\x01\xf7\xb7L\xaf\xe4\xd8\xbb\x10\x8b\x1e~\xcdX\xa5\x8f\xf6\xdf\xe1\xa6^w\xdb\xf0\xca\xb0\xadZ\xeev\x8a\xd8\x82>\xc4\xd7Jl\x0b\xf4\x85\xc6\x9b\x7f\xeb\xbf{O\xfbZ\xd5\xf3\xa4\x93)\xd6\xff%\xc3\x1b\xeeS\x10kA\xac\xdaz4yA\xc6\xd1\xbf\x7f\xff\xee\xed\xec\xf2\xea\xcd\xd5\xc7\xcb\xd9\xc7w\x97\x17g\xa7\xe7?\x9c\x9f\xbdE\x9f!\xfe\x95x\xf8\xf9\xbb?!\x8f\x0f\x16n\xd2?\x93\x9a\x10\xca_E\xf9\x13\xdb \xd4\x85t7\xd6\xf3\x8d~\xf7m\xf9\xdb\xd7e5_\xf9_\xfc-[\xdd\xbc\xea5\xa8=\x9d\xa0\x93\x01\x9e\xa9m\xa6\x9f\xa0i\xe3K\xf6q\xf3\x9a\x17\xab~\xf7\xeev\xabb\n\xfeW\x91\xbd1\xbe\xb5\x9f\xb9\xa7\xa1}\xed\xf6n@w\xdc \xe6o\xff\x9d\xb3f\xdd\x82{\x9b\xec\xde\xba\x06\x84\x9f\xd0\xbd\xe3\xf6\xeb\xba*?1Gvqo\x88\x1b\x0c >\x82\xfe\xaa\xd6\x9e\xff\xb7\xdbuQ\xbdjX\xa1\x84\xb8\xe5\x8c.\xe6#\xc0\xf8 4\x01\xc0\xbd\x04\x04\x1c\xa6\x8d\xe6\xb2}#\xfb\x04\xc5\xfe\xc7\xb6\\V\x05\xdf6\x0c\xbef\x0f\xe1\x8f\xe4\x8f\x17u\xc3\xc5[\xe6_\xd9\xe3u\xd12\xef\xe0\x0dp\xcf\xae\xdb\xd2'K\xaelJ\x8bu\xb1\xce\x16\x99\xdfVe\xf5)4\xf4\xcc\xb7M\xc9\x1fg\xf2[e\xces\xd70rO\xc6\x97w\xb6\x84\xad\x8br\x15\x0d\x92\x9b\xa2@\x17\xe5o\xb37\x11\xbe\xb7)M\xd5\xc5\x9a\x17\x81\nKu\x8d\xd0\xbf\xbak\xd5\xef1\xa16H\xd9ch\x8fo)\x80\xbfC\xe3j\x99\xbbs\x04\xa5\xb5\xe1\xc5\x91\x1cQ\xf5\x11\x01\x98F\xcd\xf5ehs<\xbd[n\xab\xf0\x06\x1a\xb8\x8d=\x92\x1c\xb4(8{%\xca\xca\xe6$\xb5'\x88\xdfE\xeb\xb2R\xfb\x86\x84\xba\xf2p\"\xc9k\x19\xda^1\xceb\x0e\xeaw\x1b@\xbd4\xfb\xc3\x07/F\xeb\xcf\xbb\xdb\xd6\x8c-\xd3+o\xb4\xa3B\xf0\xc1\xc4\xde\x15p\x94;h\xa8DO\x8aU|\x93\x06e\xaa\x00\x85\x14ta\xf0y\xc3\n\xae\xbew\x11\xaf=\x94\xbf\x00\xe93\xd0u\x8a-\xc9#\x1e\x08c)\xae\x05\xb3{E\xb9\xd3m\xe4\x9f\xd5\xfe\x15\x0b\xff\x0e#\xbd\xf5\xb3\xc1#\x90\xf8\xf7\x8d\xc4\xb7\xdc[}\xf4\xb6.\x1e\x02;}\xf4v@\x07\x98*\x0c\xfa\x95\xd9_g\xe4\x91hajt\x1c\xee\x02\xc2\xeeX\xa3]\x99\xec\x1b\xc5\x9b<\x07\x17Y5qzjQ\x94\x01}\x08ce%\x9e\xb6\x96\xed`\xba\x96\xa7\x95\x93\xa2E\xc5\x9d\xb8\xdd\x88\xb7C\xf0M\x03x\xc7a\xdf8\x90\xe8`\xab\x96\xe69\x94!\x06\xf9\x07\xd7Sy\x1f\xc1\xec\xd4\x9dZ\xb8\xfd\xb2.\xab\x99\xf8P\x9d\xf5\x1f\xaa{\xbc\x85\xb1\xedt\\ug\xb9\xe5e+\xbf\xa0a\xc1\xe6\xab\xa2 \xac\x11\x99\x8dy\xf4\xd1\xa6\xc0\xa0\xaa@Y\xcd\x99x[\xb6\xeb\xba}\xd5.>\xc1?\x1c\xff\xe3?;\x0e\xc74\xa8\xcb\x19\xb0\xbe\xb3\xbaV\x1c\x01\xaf\x97j\x05L\xc6\x1dd\xcc@|f;\x8b*\xd6\xf5\xb6\xa3\x8a\xdd\xd5\xff\xd9\xf2\x8f\x989\x98\xcfu\x9d\xd0W6\xc0\x1e\xd4\x1d\xd7\x1b\x11\xd5r\xbb%\xcf\xdb\xferU\xb4\xb7\xe2]g\xf4>|4q!\xee\x83zTu8kp\x99#\xc5 J$\xaen\x1a\xdf\x9bp^\xac\xe6\xdbU\x17\xc5\xb9\xd9\x8aO2\xf7\x05\xb7U\x7f+[\xe9\xbbz\xcb\xa1\xe42Y\xa3ZB}\xc7\xec=\x94\x8e\xe1\x97[V\xa9\xa6\xba\x1b\xd0\x0cWp\xdcW\x1d\xcec\x8fFcR\xd9\x8a\xc9\xc1\xa2\xe4\x86\x13+\xac\xfe\xe6,\xef\xfe\xb6n\xad\xed\xba\xdc\x17\xb5oc\xd9\x0e\x88L\xabG\xc8\xa6\xf5Mp\x96\xb4(\xbb\x90\xadZw\x97X\xa1\xfb\xaa\x83\xfbw\x0c?\xd7\xd2\xad\x9b\xfa\x9e\xa9\xd7\xd45\xebn\x17[\xc80\xac\xb7\xdb\x9a\x05Z\xd9\x04\xf7\xd5\xd6\xdb\x15/7\xabRUnx\xed\x9d\x13\x06O\x9d\x95\xcd\xd3\x83az\xf7A\x95\xf5\xb3\x00\xfffw\x9bb\xa9\xf7\x18\xdb\x1d\xd6\x06\x97\xe9\x0f\x1cJ\xfa\xf5\x7f\xd6\xfd\xde\x95\xd3\xa3,8\x11\x8ch\xfc\xb1\x07>\xf3\xa6\x8fDG\xde(,8h\xea\x7f\xf9\x06fS\x0b3\x16\x8b\xff\xd4\xbcm\xd1\xb6j1\xf0\xa2X\xb2\x0f\xeco[\xd6\xf2c\xf5\xbb\xa7\xb0~+PQ\xacp$\x83u\xddr`\x92Z\x95\xb8\xeb1\x9cs+\x0c\xb5\xe1\x8fP\xfa041\x862\xf9\x18W5\xac\xeb\x86\x991\xcb5\xb2\xc9\xbe\xba\xa73\xb7\xfe\x8f\xed\xd8\x8erj!\xb54+\xaa\xfdv}f\x98\xb54||\xed\xb5\x1d=\x17\x83\xc0L=\x80\x9e\xc3\xef\x0b\xf1\xbe\xe4GP\xf2\xd6\xc0\xe6\xad\x1cEU\x1cF.\\\xdc\x97\xed\xb0\x7f\xf8\x1a\"\xb3\xf3\xfad8\xac\xd4\xe3N\xfa\x9c\xb1^\xfe\xb1\xfb\x81\xd4\x1fG\xbf\x92\xfa#n\xbe\x05\x13\x12\xd2Tg%\xf5GD\xf2\x19\xcf\x91x6%\xe9\x8c\xd4\x1f3&\x98\xa5$\x97%%\x96\x91\xfa\xe3\xbeId\x13\x12\xc8\xb2$\x8f\xa5'\x8e\x91\xfa\xe3>\x89b)Ib\x13\x12\xc4H\xfd\x91\xd4\x1fI\xfd\x11\x9b\xe0\x955\xb9kJb\x17\xa9?\xfa\x0e\x8b&p%$oa\xb4\x0dS\x92\xb6H\xfd\x91\xd4\x1f1 X\xa4\xfe(m\x9f$+R\x7ft\x95\x14M\xa4\x9a\x9aD\xe5}7\x90\xfa\xe3\xae\x91\xfa\xe3\x84\xe4\xa7x\xe2Sj\xd2SB\xc2Sr\xb2SZ\xa2\x13\xa9?\xa6%3\x91\xfacg_\xa4\xfacO\x1d\xf6\x93\x9eWr\xe4}\xbd\x9bV3\xf8\x88\xd4\xc98\xac*\xaeWj\xe1E\x05\x16\x85\xdb\xac\xd0\xb0\xd4xT\xd0\x9eK\xe4\x11\xe4\x1b\xe5\xb5:\xd7\xfa[\xc3\xfe\xb6-\x1b\xb6x\x0d7\xc5j\x10\x1bs~\xa9\x9b*\xf7Q\xe1\xe3O\xec\xd1W\xf5Q\x9cU\x07V\x0b=\xea7\x8co\x9bJ\xe9\x0b\xaaX\x9f\x8emuQX\xb9z\xb5\x1c-\xf3\xc8\x16\x88\x86\xc6\"\xab\xef\xc5;\xba\xae\xe4\xe7m}s\xd32 \xb5\x0f\xab\x0b\xd6\xea{\xcbxfoy\xd62\x1cNT\xf5\xf3\xf9q\xb4\x8e\xa0\x1b#]Ym\xd7\xac)\xe7\xe6or\x80\xd0\xf0\x82Z\xc8\xb9e\x95q\xfc\xb6\xea\xd6\xceF3\xe6sY\xda\x8a\xb5m\xefB\xb5\xda\xb4m\x85\xab?\xb1D\x7f\x0e\x8b?\xb0sGqj\x87{W\xe5\xba\xc4zW\x1ek\x00\x00_\xf8Z\xad\xab\xda=X\x93\x11\xdb\xd5(\xde\xaaVQ\xec?\x9d\xdf\xc0\x8a\xddp\x13\xee\xd7\xf1\x7f3\xcf\x95K\xc2\xea\x01Q\x17\x11~\xbe~\x04V\xcco\xa1\xd8l>\xa3\x17\xed |\x7f~\xc8\x97\xd6\x19\xc2\xa3\xb2\x87\xd6\xc0\x9b-\x03\xf1\x1fe\xb5(\xe7\x92\xd1\xd2\xc1!\xedAy\xa0\xeeHvqe5_m\x17\xa3Yl\xa1\xae\xd2E\xe7FwL\xc6z\xadEc1l\x0e\x98\x96Aa\x1f\xcf\xdb\xd1\xdd\x1a5AN\xfc\x1b\xd6\xea\xa8\xbc|\xbc\xfa\xe7Q\x00\xd9r8\xb6\xe5 tK\x1a\xdf\x92\x9dp\xc12.Y)\x17<\xe7\x92L\xba\xa4\xb3.\xd1\xa1\x10'{\xbc7\xef\x12\x95\x04\x8b\x93\xab/&\xf08)D\x8e[ 8$\x0f\xcc\x9d\xf1U\xdbp\xdf\xbdS\x84\x81\xa5\x00\xb0\xa7<\xac,pH\x14\x18W\xf3I\x82\xc0\xc9r\xc0\xd1u\x92\x90\x14p\xaa\x10p\x92\x0cp\x9a\x080Z\x02x\x82\x00pH\xfe7\xea?\xdc\xcd\xdeW\xf8\x17#\xfb\x8b\x13\xfd\xcd\xd4\xa0\\r\xbfx\xb1_\xbb^{U\xbc;j/\x99\xdf\x88\x8a\x1f\xdf?\xaa\x1c\x95\xf7\x8d\xdeJ@{\x052\n\xfbF\xf5\x0d\xe3\xa2\xbe\x99[\x96Y\xce\x17-\xe6\x1b\x95\xf2Mo\xe7\xbe2\xbex\x11\xdf\xf4\xba\x05\xefA6\xf9^\xacxoT\xba7\xbd\x81\x93e{q\xa2\xbd\xd1\n\xc5\x05{q\xf7#\xa7X\xef>R\xbd\x18\xa1^\xb4S\xc2\x92\x89\xa9\x8eI\x11\xe8\xc5\xbc%\x00-\xcf\x1b\x13\xe7\x1d\xb4d\x7fi\xde\x0c/*\xbc(/\xee.@\xba \xaf\x12\xdd\x0d\x94\xb7\x97\x1co\xd4G\x80\xf2\x13\xa0\x84x\xa3\x1d\xde\x18\xde\x99\x80\x96\xe0\xb5%v#\x05\xa2Efq\xf2\xbb\x07jv\x8a\xf0\xae\x1a\xcb\"\x05\xe6\x90\xddM\x12\xdd=\xa0cPr\xbb\x9d\x9cn\xa4\xc0\xa8\xd8n\xd45()]\x94;p\xef\x04HrZf \xdd\x80\x80.Z>7\xea\x0b\\\xeb2\n\xe7&\xcb\xe6\"Es\xe3\x0d\x99&\x98\xab\xa5P\x1d\xe5\xf9\xe5rs\x8a\xe5\"\xa5r\x93\x85rmQ\\w\xe3\xfc2\xb9yEr1\x12\xb9y\x05r\x11\xf2\xb8\x93\xc4q\x8d\x10\xae\xab\xbc\xa84\xee4a\\\xbd\x1c\xe9(\xcf/\x8b\x8b\x16\xc5\xc5\xc9t&\xabt\x8eJ#\x91Ne$\xd2I\"\x9d\xbd\x91H'\x89t\xf6\x965\xc5!%\xc1!)\xbd\x81D:\xf7Mj\x98\x90\xd2\x90%\xa1!=\x9d\x81D:\xf7IcHIb\xc8\x9c\xc2\xc0Q \x0c\x19\xd3\x17\xb0\xc9\x0b<-u!5q\x81D:\x07\x96\x9c\xaa@\"\x9d\xa8\x04\x85)\xe9 $\xd2\xe9;,\x9a\x92\x90\x90\x90\x80\x91\xa0LIF \x91N\x12\xe9\xc4\xa4\x1c\x90H\xa7\xb4}\x92\x0cH\xa4\xd3UR4\xad`jR\x81\xf7\xdd@\"\x9d\xbbF\"\x9d\x13\x92\x07\xe2\xa9\x03\xa9\x89\x03 i\x03\xc9I\x03i)\x03$\xd2\x99\x96$@\"\x9d\x9d\x1d\"1 G\x9fKH\n\xc0\xa7\x04`D:\x872`VQ\x83\x8f\xc9\xe1Q\x03PaG\xf3k \xe5i\x0fN\xa5\xdc\x8dq0\"\xf6rg\xbc\xd9FD\xfd2\x8a\x9d\x9dX\xd1UUdP\xf8\xec\xad\x15\x8b5\x1ah&$\xe9\x95@3-wK\x9fYE\xbe0\xaex\xa6*h\xbd\xaff\x8e:\x1a\xe3\x9f!\xe4\x15c3\xa2\x17\x00\xc4E`@\xda\x075\xdb\x94!V\x99\x00\xb9X\xd3\x1f;\xba\xbeaC\xae\xd9\xfc\xf6\x8f\x7fxe\x84\xd8zA\xb7`q\xbc\xcf}\x08-Y\x0f\x1f\x9a\xa7o\xf5\xce\xf5\xf7o5\x024\x0c%n(\x9b\xd2\xd4A\x86\x86}\x03\xe4\xe2\xa6\xfa\xb1asV\xde\xf96\xf4\xc6\xfb\xae\x1f[\xfa\xd7\xb5v\\]\xe9\xe5U\x9d\xf0r+\xe6\x98\xd7\x8f\x10\x10\xce*\xe6R*T\xcb\x7f\xfa\xdf\x82\xf5}\xa5\xbe\xb0\xea\xca\xea]zU[\xc6u\xeayYt\x00I(vqg\x93\x19\xf5\x8d(\xd1\x7f\xdd\xc8-\xbd.VE5\x8f, g\x18 \xaa\xda\x9b\xc2\x05\xd8>\xa3\xb0\x97=\x8b\xc1\xf6\x92\xd3\xba\xac,NKv\x88\x9e\xed\xa9\xea\xb5\x91\x92\x157\xb0\xa8t\xe5B\xf1\x82w\xef\xaf\xce^\xcb//\xcd\xef\xa8O\x98R\xae2\x9fW\\O\xee\xba\x95\xfd6\xd8 \xf4\xccOs+\xfe\xc7\xd5d\x8c\xb4\xdddBt\xc2e\xbd\xac\xe5\xb4j\xea:y\xff\x10\xd9\xf4\x8d\xb8\xc2]\xb1\x922\xd2\xb5\xfd\xa0\xb1\x879\xdb(\x9djgq%\xb7\xd6\xdc\xdd\xad\xd1=u<\xcd\xd5\x83\x83\xf6]\xabvHn\xb7%7\xb2\xbf\xce\xc2\xe6+\xa9u\xdd\xbd\xb0\xc7n\xa0\xed\xb3\xa5\x0d\x9aJ\xdbg\xa3\x9c\xf9\x05m\x9f\xbd\xd3#\x86\\\x9e5\x89\x8f\"z\xae\x82N\x9c_\x18D\xeb)#Z/\xcf\x8b\x9eh=\xa2\xf5\xdcF\xb4\x9e4\xa2\xf5v\x8dh=\xa2\xf5|F\xb4\x1e\xd1z\xd2\x88\xd6#Z\x8fh=\xa2\xf5\x94\x11\xadG\xb4\x1e\xd1zD\xeb\xf9\x8ch=\xa2\xf5\x88\xd6#Z\xcf\xb2\x1c\xe4\x14\xd1z\xd2\x88\xd6#Z\xef9\xd1z\xb4\xa7\xf6\xd4\x0d\x8biO\xed\x03:7\xbe\x1b4\xed\xa9\x9d\xc3\x8b\xb4\xa76\xed\xa9\xfd\xc5\xef\xa9mc\xe6'\xbf\x0d!\xde\xc0\x86\xdb\x16V\x86\xa6\xcd{\xe2\x126E\xe9\x86\xcf\xdf\x8e\x15\xbb~O\xc8\xb9\x0f\xdb\x98\x84\x95\xc5\xc0\xf1`\xd1\x10-\x1e\xd2\x90qD\xa0\x03\x17-0G\xa6\xc2\xe2\x91\xd0d\x14\x15O\x00\xc53\xb75\x1d\x11\x8f\xb45\n\x88\xc7\xf0\xf0\xf4\x06\xee\x8f\x86\xe3\xfc\x95\x13\x0b\xc7A\xe1\xe9H\xb8F\xbf=\xe5a\x80\xf0\xe0\x0d\x0c\xc2\xe0Y\x1e\xfa \x06\x8e\xe8\x1b1\x04O|u\x88S\xf8\xea<X\x1a\xaf\xebO\xb0Y\x15s\xe72\xa82\xbd\xad\xbc\xb8fx\xeb\xe4d\xbf\xc4\xb7ON\xf4\xcd\xb0\xa6\xc67\xdb\xaa|\xe87\xd3\xc79\xa6/*\xb0\"\xa2\xb6\x89\x9fEd8\x01\xef\x98\x94\xc6\x8e\xae>x-k\xd4M\x1f\x12\x08q\x82\x1e\xe2\x17\xdb\x95\x8a\x9fi\x18\x0f\n\x8er\xc1\x81\x9a\x1ehSj\x1d\xb1.u\xbcT\xcf*\xde<\xf6$Ye\xbd\xc6#{\xf5\xcb%\xfc\x86\xad\xd8]QqX3^,\n^ \x00G=H*\xa2\xdc~\x8amnR\x1f4\x05\x03sMRZ^\xcb\xed\xa5W+\xf9Q\x0fmY-W\xd6\xd4\xee\xa5k\xb5\xbf\xaf\x98\xf8\x7f'%)\x1e\xb6\xae\xb4~\xa2#>>*\xf98\xbe\x92\x18<[\xc0\xaal\xf9!\xb9.\xd7\xe9'\xaeY\xd4\xe8@\xe2\xbd\xb4\x11\xefE\xbcWo\xc4{\x11\xef\xd5\x1b\xf1^\x9cx/\xb7\x11\xefe\x8cx/\xe2\xbd\x88\xf7B\xce\x92\x88\xf7\xea\x8cx/\xdb\x88\xf7\"\xde\xcba\xc4{9\x8f!\xde\x8bx/\x8f\x11\xefE\xbc\x17\xf1^\xc4{Y\x96\x83\xbd!\xdeK\x1a\xf1^\xc4{\x11\xef\xb5_\x9ds\xf2^.\xa4\xab\xf53]\xd6\xf7\x7f\xb7\x87\x99#X\xd8:\xe8.\xab|\xf9\xc2\xec\n\xda!c\xdc;'\xbb.\xa3Ox\xe6h\x97\xf0\xee\xf3\xdcA9\x06R\xa1V\xb70\x0bD\x90\x1b\x13\x8b\x80bhT,k\x0b\xb3\x02cQM\xaa 4\x16\xc7\xc6\"\xe0X\xb4\x8b)\x8bu4e \xf8\x18\xea\x86(\xc3\"d\xf8\x1b\xa8,/F\x86\x03\xc9\x92P\xb2 >\xc2\xe0d\xc9~\xca\x87\x94\xe1\xa0\xb2$\xac,\xc1Ii\xcd\xce\x06\x97\xed\x87\x97\xa1\x00\xb3\x839\x01K\xa1e\xb8\xeb\xf8\x8ae\xe5\xd4\xd2H\xb5\xac\xac\x1a\xae\xcd\xd9x5\x14\xb1\xb6\x1f\xb3F\x1bOk\x1b4\x956\x9eF9\xf3K\xd8x\x1a\x01u\x06\xbf\x84\x82\x9c\xe7\xa84\x0794\xda\x96\xda\xf9IG\xc4\xa76\">\xf3|.\x11\xf1I\xc4\xa7\xdb\x88\xf8\x94F\xc4\xe7\xae\x11\xf1I\xc4\xa7\xcf\x88\xf8$\xe2S\x1a\x11\x9fD|\x12\xf1I\xc4\xa72\">\x89\xf8$\xe2\x93\x88O\x9f\x11\xf1I\xc4'\x11\x9fD|Z\x96\x83\xbe#\xe2S\x1a\x11\x9fD|>O\xe2\x936\xa8N\xdb\xfd\x976\xa8>\xa0s\xe3[+\xd3\x06\xd59\xbcH\x1bT\xd3\x06\xd5\x7f\x9f\x1bT\xf3\x87\x8e\xf8o\xcb\xf5vUp\xbd\x82\xbd\xa9\xdb]\x92\xffR\x1f\x02\xe6\xd8\x16\xd8\x03\x9bo\xb9hb\x01\xbc)\xaa\xb6\x90\x8b\x94\xea\xa3\xad\xe5\xe5\xba\x90?.\x0b\xd1G\xe4\x90\xa0\xca\x1c\xf0\xfa\xa6\xdc\x17\xa6\x89\xcf\x14\xcd_\x16\xed\xac\xacn\xea\x08\x8df\x0e3c\xa9\xf8o1\xd4\xc8=R\xaf\xeb-\xd7\xee\xe8\xc7O\xedO'\xd2\xe8\xad'D\xc9\x0cQ\x91\xfb\xa2\xe2\xcc\xa1\x14\x0b\x98\xa0\x04\x82\xa6\xc2,\xfc\x03\xfc\xa9h\x7f\x91\x151>Y\x17\x0f\xe5z\xbb\x86mUr\xb9b}_7\x9f\xe0^G&U@\x8c?\xf8\x01\xb5\x0dkD\xe5\\\x1f\xa0\xa2\xd5\xc2\xb9O\xd4\xe6?\x15\xed\xc7\xb6o\x98\xde\xd3\xb6\xbe\x917\xb9\x98s\xc5\x10\xcc\xebJ\x07\x97\x87E\xa9\x11%\xd2\xa1\xf4\xcb\xa1l\xedW\x85 ^\x1c\xa6\xeb,\n^\xec\xe9@\x1c\xcf\xe8\xed2o\x0b^\xc8\xa9^\xf5(k\xd3\x0f\xb57\x8d\xdc\xf2W}9\xc9(s\xb5Xy\x02E`F\xa8\xba\x92\xef\xa7\x9f>^^\x05\xc2\x80+V-\xf9-l\x1avS>\xa8\xe7S\x0e\xddb\xb4o\x99\xf8\x98\xe1L\xd5FUb\xbb\xe2\xe5f\xe5\x0b\x9c\x99:vU\x18\xbfc{{+>n\xc5\x94`\xa1\x89\xa2nS\xe4\x96\x8bY\xd2\xa6\xde\xc8!rq\x04\xd7[.+\xe8m\xf1\xba\xeds\x87\xa0\xacZ\xce\n/\xd8t\xcd\xe6\x85DN8\x14\xab\xb6\x1e.\xf3\xfc\xd4.\x87`\xa0g\xc9gU/'\xf6\x15\\W\xf8\xb1^\x0e+\xb6\xaa\x97\x83Quj\x8fp\x1c\xc0\xeeX\xc5\x9f\xb1\xaa\xb2,\xc6\xfb+\xc2\xe5\xc2\n\xce\x9b\xf2z\xcb\xc3\x198\xb1\xe6*\x8bd\x04\x01\xae\xe9\xca0\x0eP\xe6\xc5\xadmC\xf9\xc2Xt\xd8\xea-\x18\xe9\xef\xedP\x97/\xab\x05{\xc0^~<;v\x19\xee)4v&\x9e\x907\xa6\x07\xa9\xafqM\xf8\x7fb\x8f\xaf\xd4'\xdc\xa6(\x9b\xd0J\x92\xb0\xf1\x9e\xfeE\xa5\x9e>T\xb6D\xa0\x9a\xb2\x82j\"\xd1\x8a/G\x83>\xc1\x82\xdd\xb1\x95\xe8a\xf2;\xb6\xe0\\~Zv\xeb\xde\xde\x02\xed\xa1\x86\x07bff!\xe7{\xb6,\xab\xefW\xf5\xfc\xd3Q\xf7\xb7\xb3j1\xfa\xcb\xe9-\x9b\x7f\xbaz\xf0?\xa4\xd5\xa2;\xf6-[\x95w\xac\xb9z\x08\xc4>\x7f,8k\x8e\xecYx\x0b\xeb\xe2Q|\xa5\xa8\xcc\xda\x85^\xd4\xe0\xb7\xacez\xa0s\xfb\x1a\xe7i\xe9\xe7\xd6\x02:\xa0]\x95s\xb9L\xa2n\x81z\xe25\x03y\xcf\x1a\x06l]r\xee\xe5\xb1\x16[E\xd1\xaa\x81\xdc\xd7\xd2~|\x0f\x8f\xe4\xf6k\xf0\x99\x0f\xe8!x\x1a\xf0# \xee\xb6)K\x05\xa9\xa3\x03\xfc.M\x13\x08.\xe7\x06\xaa!\x0eU\xc3\x04\xb0:\xdc\x80\x82\xdf\xa2\xe1j\x80L\x805L\x84\xac\x83\x05\n\xe7\xa2Ak\xd8\x1f\xb6\x86d\xe0:X\x94\x06A\x93\xa0k\xc8\x0d^C\"|\x0d\xa9\x00v\xb8gwp6\x16\xc2\x86\xdc 6\xe0`l\xc8 d\xc3\xdeP6L\x03\xb3!\x17\x9c\x0d\x93\x00\xed\xf0\xe3P\xb4l\x11\x87\xb4\xe10\xa06\x1c\x10\xd6\x86\xc3\x00\xdb\x90\x08m\xc34p;6\x04s\x14\xbc\x0dy\x01nH\x80\xb8!\x1d\xe4\x86 07b\xc8\xfc\x06\x01tC\x0e\xa8\x1b0\x9f{\xc8\xe9\x19\xf2\x13/e\x16\x97\x0cz\x07K\x93\x108\x02\xf6\x86\x84Zf\x84\xbe! \xfc\x86\xdc\xf07L\x04\xc0\xc3\xfd\xaa\x8dC\xe00\x1d\x04\xf7\x96'\xae\x18\x83\xc1!\x1b\x10\x0ex\xae\x190`8\xa4\xc1\xe1\x10\xa39'B\xe2\x80(7\x00\x8ce\x02\xc6a\x92s\xf1\xe08 Z9\x01 \x87\xa9\x109\x84\xbd\x9a\x0f&\x0728(>\xf8@Hh+\x00\xc6C^8\x1eb\x80<\x84!y\xef9S\xe1y\xc8\xd8w\x13 zH\x02\xe9\xc1\x82\xe9\x87\x86\xfb\x02\x1fD\xc1v\xf1\x0e\x13I\xeb\x0f\x91\xaf!wYbDSP\xcc\x9b\xea\xb1\xf5\x7f6:\xc1\xc6\x7f\x1e\x1c\x1c\xd643@\xa0\xadP\xc5-\xf96\xf5\x94\xb9w#\xbdd\xcd]9g\xc7]\x19$A\xa5\x8c$\xa8H\x82\xaa7\x92\xa0\" \xaa\xde\xb2FBS\xa2\xa0I\x11P\x92\xa0\xda7\xda9!\xd2\x99%\xca\x99\x1e\xe1$ \xaa}\"\x9a)\xd1\xcc \x91L\x92\xa0\" *\x92\xa0\xc2F\"\xb3F!\xa7D I\x82\xcawX4\xd2\x98\x10e\xc4\x08,\xa5D\x17I\x82\x8a$\xa80\x91B\x92\xa0\x92\xb6O4\x90$\xa8\\%E#~S\xa3}\xdew\x03IP\xed\x1aIPM\x88\xd2\xc5#t\xa9\xd1\xb9\x84\xc8\\rT.-\"G\x12TiQ7\x92\xa0\xea\x8c$\xa8\xb4\x19\x8d\x90\xebza\xbf\xfb\xcaj\xe7O^\x99(W\xec\xe7\xffi\xd8\xcdkx\xf9\x7f\x9fX\x0b\x87Zj\xe3\x98?\x1ck\xa9\x8d>4\xa5v\x88y\xa9\xcb\x18\x8bu\xe8H\x96[\xae\x83?\xe8c][n\xfe\x89\xf1\xab\x87V%\xe1\xdd0>\xbf\x15\x83\xfcC+\xe5t\xec\x0c\xcb\x81\n\x87u\x92\xfe\xf9i\x848\x90N\xb3\xaag\xc2\x82/_\xf4\xb5\xa0\x80\xde\xc0(\xa0\x87[\x10\x02\n\xe8Q@\xcf{$\x05\xf4\xa4Q@o\xd7(\xa0G\x01=\x9fQ@\x8f\x02z\xd2(\xa0G\x01=\n\xe8Q@O\x19\x05\xf4(\xa0G\x01=\n\xe8\xf9\x8c\x02z\x14\xd0\xa3\x80\x1e\x05\xf4,\xcb\x11\\\xa1\x80\x9e4\n\xe8} \x01=\xa5ji\x151\xf8\x88T\xbf\x9al\xb2U\xd9\xaa5oK\xb7^\x1e\xb1\xf3E:E\x88\x7f\x1c.q\x04J<\x1f\xf0\xf3z\xb5b\xb2:?\xe8\xcfw\xa93\xbd\xd3V\xda\x8b&m\xa3\x0f\xda\x8b\xe6\x80\xce\x8d\xef\xa2B{\xd1\xe4\xf0\"\xedEC{\xd1\xfc>\xf7\xa2\xe9\xbd!k0\xbb\xf6\xbf\xb2\xfe0Z\xec}\x05\xef?\xbc=\xfb0\xfb\xfe/\xb3\x8f\xef./\xceN\xcf\x7f8?{\xfb\xda\xf9\xd7naY\xae\x06o+5yl\xeb\x86\xf7\x8d\x87\xf7\xe2\xff\xbe\x7f4\x0f\xbc\x1cK\xde\\\x9e*\xcf\x95-\xcc\x8bv\xbc$m\xd5\xe1\xcd\xe5\xe9\xeb\xc1\xbf\xba]\xe9\x8a\xa1\x97\xbd%\xbc=\x1b\x14!\xfe\xd9\x951\xbeU{\xde\x84\x9d\xb1\x86U\xdb\xf5p\x1e\xe2v\xaf\xef\x907\x97\xa7\xbe\x9fD;\x067UQ9\xe1\xe2\xadg\x04\xfbT\xc8\xc9\x86~;\xc8\xff\xd6C\x8d\xd9\xfe\xef\x08Z^4\xe2\xe1\xe0\xf0\xed\xb1\x8a\xd4r+@\xbb\xa3\xc6c\x0d\xfc\xf2+H\xbf2\xfa\x03\xb2x>2\xca\xd3\x0b2\xd1u~`\xce\xb3\x81\xd5\xf7M],\xe6E\xcb\xaf\x1e\xe0\xda\xfc\xb7=\xffw\x82q\xd6Y/L\xf5\x9f\x02\x8c\xe3\xe9\xe0\x19\x7f\xe8\xc4>|\x18\xd7\xa4\xed\x80nY\xb9\xbculS\x04\x980\xa4\xc5\xa9y6T\xe2%_\xb1\xd7r\x95\xebzU\xcf?\xe9\xeb9\x8e\xe5\x0f\xb7E{;\xb1\"\x83[\".f\x7f\xf9\x89r]kO\xf3z\xc1\xdaM1\xf7\x84a\xa3\x17\xd5m{W\xacU1F\xb6\x04N\xeb\x85\xeb\x8b\xdfM\x02B\x94\x06\x04\x94\xa7\x07.\xe8\xe4U\xc45\x9d\x11\xd8\xe9\xbb@\x8d/$F\x0d\xf1\x01\xd6\x1e\x99\x18\x86\xe3\xb4\xa6\xb8\x9f\x1dz3!q\xdf\xeb-\xdfl\xbb\xd9\xaa\xb5E\xc8\xcb\x16V\xf5r\xc9\x1a\xf8\xba)\xee\xf5\xc5\xbe9\x86\x9f\xbc[\xe0\xf8\xc3\xffU]\xbdZ0\xce\x9auY\x95-/\xe7\xae\x16\xaf\xea\xe53\xde\x9bb\xdd.g\xd1\xddf\xe2\xddRY\xbcsBh/)e\xd1N\x00\x91=\x9c\x94\xc5\x9c\xab\xec\xf3lm$\x8b\x8c\x1c\x83t\x842\xdcnO\xcap\x8eQ\x86p\x8f2\xb4\x93\x94\xe1]\xa5\x0c\xb5\x17\x94\xb2\x04\xaf)\x8bj\x7f\xdb\x96X:n\xbc\x1aZ\xbf\xefR\xf7\xc9Q\xf57\x18\xee\x9bb\xb3a\x8d\xf8\xc6mB8Yob\x00\xfc\xc4\x1e\xe5\xea\xba\x9a\xd0\x15MDT\xdd\x98jhk\xb6\x98\x933\xcf\xe2^\x8d\xf2\x810gr\xcb/\xe5uT6\x83i5\xab\x06{\x0c%5\\\x82\xb4b\xdc\xef\x9e\x8bX{\x0d~\xfd\x89=\x9e\xf4\xfb[i\x10W|\x80\x8f\\\x11)\x0e\xeb\xa8\x147\xa5o\xc6\x14,No\xd4d\xb6dj\xebu\xa4S\x04\xb7b\x82\x84\xc6\xbc\xf9\xfe\xf4\xfc'\x15\xc2\xf8\xb1^\xf6\xdd\\\xf8x;\xe7\xdb\x86\x99FJ\x01\xc3Jm\x87\x16\xe01\xf9\x83,\xb3\x8b\x8b\xac\xea\xa5\xbb\x8e\xb8\x1ab\xe7\x0fb0X\xa8\xa9\x83\x7f\xfb\x1d\xd4\x1c\xc1\xbd\xe5,`\x06\x9c\xe1GH\x1f\x8d\xb5v435\xc4\xd5%\xdb\x96\xb2\xc8)\xea\x9b\xc1v\xaa\x8dJ\x982$\xe9\xeew\x9bm\x99\xf6\x81\x9dTQ\xb3\xdd\xab\xf8&\x8eT\x93{&W\xd1\x97f\xfc5\xc9\xa3[\x8bE\xbd\x00\xe8\xe7\x02\xa6f\xd2\x04\xcaK\xdaR,k6M4\x9f&wF\x0d>\xa7&SV\xcd\xb4\xbc\x9a@q\x89\x9b\x88\xed\x99[\x93;\xbb&1\xbf&s\x86MZ\x8eMb\x96M\xa8\x0fw\xf97\xd8<\x9b\xcc\x996\xa8\\\x9b\x8c\xd96\xfb\xe6\xdbL\xca\xb8\xc9\x94s3%\xeb&P\x18z\x9b\xb0\x03d\xde\x1c.\xf7\xe6 \xd97i\xf97\xd93p\xb098Y\xb3p\xf0y8j\x1a\x91\x90\x89\x93\x9e\x8b\x13\x1d\nq\x1b\x82\xed\x9d\x8f\x13]\x10@M\xa8\x10Y9)\xb3\xae\xe4\xcc\x9c\xd0K\x10\xbd\x05\x18\xae~\x19\xf3sR2t2\xe7\xe8L\xcb\xd2 \xf5 \xd4\xb6_\x133u<\xa5q\xd4\x96_y\xb2u\xd0)'\x88\x8c\x9d\xa4\x9c\x9d\xd8\x8e9S\xf2vbez\xf9\xddL\xd9;\xe9\xce\xc4g\xf0\xc4\xda6!\x8bgb\x1eO\x88\x83\xce\x96\xcb\x83\xce\xe6\xc1\xe5\xf3`3z\x10^N\xcf\xeaI\xc9\xeb o\xe2\x95%\xb7'1\xbbg\xbf\xfc\x9e\x98C\x13r|\x0e\x90\xe5\x13\xad\x9d\xb7\xa7\xe7\xcb\xf5Ad\xfbL\xcf\xf7\xf1\x14\xc7\xa3\x9bue\xcd\xf9\x89e\xfdL\xcc\xfb\xf1\x94\x15\xdf\xa4\x0b\x91\xfb\x13\xde\xa0+\xb4=W\xee\x0c\xa0\xec9@\xfe,\xa0\x9cy@\x98L\xa0\xf4\\\xa0\xa4l\xa0 \xf9@\xa9\x19A\x91-\xb7\xc2\xb5\xc3\xe6h`\xf3\x82&d\x06%\xe6\x06\x05\x9a;%?\xc8S\x14b\x93\xad)9B\x81.\x1f\xdf`+c\x9ePts\xadC\xe4\n\xe5\xea\x8b \xf9B)\x19C\xee\xad\xb3x\xb9f-/\xd6\x9b\x89\x91!\xdc\x97\xefU\xd9/\xc8o\x1avW\xd6\xdbV\xd1m\xc7\xf0C\xddh\xc4\xad\x85\xff\x03\xdf\x1eA\xc9_\x866T\xbc\x97\xc7\xca\xee\xbf(\x0b1V\xfbn\x89\x1cAM\xfb\x8cl\x83^\x17\xb8\xaby\xff\xdd\xa9j\xf2c\xd1\xf2\xd3z\xbd.\xb9o\xb8\xed\xab\n\xdf}\x07\xdf\x1ey_\xb5\xa2\x05\xe2k\xb4-[Y\x03W\x81!0\x87?\x03\xde\x89G\xd0\x9bh\xd7\x004n\x13k\xae2\x04b\x83h\xba2\x8c\x03\x94\xa1\x80\x1a\x94/\x8c\xa1V\xbc\x94!\x89\x9bC]>\x8a\xbb)S\x97\x1f'8\xb8\x0c7Z\x18\x93\xacF\x0f\xf9\xc8\xf4\xb2\xb6\xac\x96+I\xe9\xbc\xea\xe1\x93\xd8\x0e\x83E\xdb\xd6\xf3R\xae\x0c\xe9\xddQ\x87\xd2\x9fc\xc3VS\xc1$2\xea\xd0\xda\xe4\x03,\xd8\x1d[\x89\x1e&\x97\xd4\x0b\xce%\n\xdeM\xfc\xbc\x05Z(\x02\xf0\xc0\x07\xa6\x81U\xbfg\xcb\xb2\xfa^\x8c^G\xdd\xdf\xce\xaa\xc5\xe8/\xa7\xb7l\xfe\xa9\xe3\xb5wML\x16\xcc\xb1o\xd9\xaa\xbcc\xcd\xd5C`\xe1\xe0\xc7\x82\xb3\xe6\xc8\x8e\xe5\xb7\xb0V\xdc\xc4\xdf\xb6\xac\x11\x9f-*K\x8f\xdf\xb2\x96\xe9\x81n\x9f\x85S\xcd\xf3t\xf8\x8bf\x96t\x06\xab\xc1s\xd4W\xe1\x9c\xb5\xf2\xda\xbe\x99\x8fM \xc8\xd8\x84w\x14\xb7ko2\xbd\x80\xdf\xd6\xe2\x8f\xeeK\xaazy\x8a\xd3\xd3\x8bVkD\xd4\xfe/QS\xfaMS\xafeC\x8b\x8a\xb3c\xf8\xe5\x965\xach\xe1\xc7z9\xda\xbcR\xd5\xd1\xf7\x14\x84\x02\x16\xd6\xc7\xc8\x9a\xf1bQ\xf0\xe2\xa8\xbb\xbe\xfc0\x1d61\xde\xbc\xc4\x9d0\xffp\xfc\xed\xb7G\xe2?\xfe\xf1\xf8\x9f\xe4\xff\xff\xd3\xce\xd9\xf1>r\xf5\xd0\xd1\xdb\x11D\xaaa+vWT\x1c\xf8\x83\x04\xba=\x1f\xf0\xc6\x172$\xe7j\x0f/\x96\xad\x05\xbb\xa9ou-\xfe\x01\xabz)\x06+9a]\xb0y\xbd`\x8ba\xef\x0f\xe5$\x83\x9db\xb1\xcf\x9e\x9fv~\x07\xed\xf9I\x12\xc1\xd1)B\xfc9S6 l\"\x89`\x0c\xce\x94\x05f\x9a\x822\x91DpF\x80)\x05_J\x82\x97H\"x_di\x02\xb0\x94\x05WJ\x87\x95H\"x\x1fH)\x05Q\xca\x0c(\xe1\xf0\xa4\x8cp\x12\x16Mr\xac:\x92D\xf0\xd0\x10k#\xd8YR2\x88D\x12\xc1(\xfch\n|D\x12\xc1\xbe\xc3\xa2\xc0Q\x02n\x84\x11\xc0MA\x8dH\"\x98$\x821@\x11I\x04K\xdb\x07!\"\x89`WIQhh*2\xe4}7\x90D\xf0\xae\x91D\xf0\x044(\x0e\x06\xa5bA PP2\x12\x94\x06\x04\x91Dp\x1a\x02D\x12\xc1\x9d\x1d\x02\xfb\xc9\xd1\xe7\x12\x90\x1f<\xf0\x83\x91\x08\xce\xbc\xe7\xa77\x88\x11T\xe9\x92\xda\x0fI\xa1\x97\xc8\x97\xfa\xe0K\xd8\\\xa0\x8b\xa1\x15\xf7\xa14\xf4u \xb2\xe4\xa9\xcb\xae\x88\xa0\xb2W\xf0\xfd\x87\xf7o\xde\x9e\xbe\xb9\xbc\x9a\xfd\xf4\xfe\xed\x99WP\xd0s\xf8\xf7?\xbe?\xfdW\xcc\x81\x97\x7fyw\x8a9\xee\x8d\xf3\xc0N\x990\xa1\xb6\xf1\xb5\x86.\xfc\xf8S\xbd`\x96\x0e\xa5\\\xb9\xef\xe4\xe6\x84\xb7=qL\x90\x81\xdd\x9dh&|\xb88\xed\xe2\x99\xae\xbe\x1f\xf2\xfak\xf8O\xd6\xd4\x9a\x1c\x91\x0f\xbf\xb8\xbeT\x96\xf4\x8c[\xee\x9b\xb2\xe3+\xf9W+\xf8\xcc-M=\x19\x95\x12\xd7\x91z,j\\[IA\xe3\xfb\xa2\xe4\xad'\x94 \xdf\xf1\x0fz\x15u.\xb14\xaet\x0b\x0b\xcd\xab\xa1\xaa+\xee\xf8Nm\xc5\x1f\xb3V\xb6\x00\xcd\x98\xf4\xd2'}\xacZLXq\x95}\xe3\xac\xed\x9bI\xd5UJ\x8f\xae5\x9fr-\xc9A\xce\xc6\xd5\nw\xeaAX^Jo\xf4Qy\xf5O\x9e\x14\x94\xd7\x85\x8c\xfb\xb0\xdd\xbd\xd5_R\xb7B>\x91\xdd\xe3\xe47E*\xfe\xb7:\xd5\xb33\xb2$\x85~)\xf9\xed\xd5C\xdb\xed\x8e\xac;\x98Z\xd3\xd3\x00\x03\xf0\x87n\xcdu\xe0\xa7\x97N\xac\xe3\x9f\x8e\xff`6$\x1e\xef\xabl_R\x1f\xf24\x12\x92\xf8\xbd\x95\xed*\xd2\xfe\xca\xd2\x08\x9e x\xa27\x82'\x08\x9e\xe8\x8d\xe0 N\xf0\x84\xdb\x08\x9e0F\xf0\x04\xc1\x13\x04O gI\x04OtF\xf0\x84m\x04O\x10<\xe10\x82'\x9c\xc7\x10i\xda\xa3\xe3-\xf2'3\x02\xc8\x95\x1b\xcf4\n\xec\x93\xbd\xe1\x1d\xbd\xd4\xd7-\x08\xd47\xfc^\xeb\x10\x17\x9b\xcdJ}i\xc9E\x90b\x05_\xd5\xd5+]\xa0\xaf\xff\xcf\xeb\xf5\xba\xa8\x16-,\xb6\xd2\x19\x81\xaa\xc9\x81\x1c\xbeg\xcb\xb2\x92{;\xeb\xa9V?\x85\xea\xeed\xe9IV\xedMiD\x17\xabV\x86\x11\xbc\xad\xe55,\x18gs\x0e\xf7\xb7L.\xb0\x15}\x93\x8d+\xe6E\x05\xb7E\xb5X1(`Y\xfe\xff\xec\xbd{w\x1bG\xb2'\xf8\xbf>E\xac\xf7\x9c\x91t\x87\"m\xb7\xdb\xb7\xafv\xbdgi\x89vs\xae,iI\xca\xde\xde9w\xa9\"\x90 jT\xa8\x82\xab\n\x94\xd8\x9a\xfb\xdd\xe7\xe4\xab^\xc8Gd\"!\xc1V\xc4\x1f\xdd\x16Q\x15\x95\x19\xf9\x8e\xdf/\"\xef\x98\xcd\xe9\xd85\x8c\xf0\xb1\xdb\xbe\xa9+!U\xd6\xd2e\xd3vM\xc9\xd7\x8a\x1b\xc6J\x81 \x18\xd2=\xf7\xa2\x0bz\xd4%9\xb7;\xf5\x94C\xbf\xcf\x04\xde\xd52o\xa0\xda\xb4O\xaa\xc5\x93y\xd62\x99B{`k\x8b\xbe\xab|\xc5\xa0\xaa\xe1\xef:\xc8\xd8\xf6\xe1\x9ae\xb3%_\x92\xe4v\xbb\xff\xae(0\xfb\x90\xb7\xa6&l\xf3\xe8\x91\xa5}\x87\xbc6O\xb8\x9e\x1d\xc6\xdfs\xbe\xce\xce\xb2\x96\xcd\x9f\xca\x1a\x0b0\xa0\xa3VH\xa7\xbeh\xacy\xf7\xe4\xb1x\xd2\xa2p\xf4>\x14\xd5m>\xb3\x19\xae\xeb\x075[Uwl\x0e\x8b\xbaZ \x13^>\xffw\xeb\xb9_lL\xf2F\xed[\x95\x13[\xf8\x85\x8f:x\xa4\x9b-\xdae]\xbd7L\x89\xf6\xd8t\x08i\x01s\x8c:L\xad\xff?m\xd6\xbf\xeao\xe4\x18\x05\xack\xf3\xad\x94kw\xcdj\xfeI\xfbd\xf0J\x1d\xd5\xe6\xfcd,\xdaQ\x19f\x92\x16^K^.\xaa\xc8\xba+\x82\x88\xb5G _U\x0fA\xf5\x1e\xf5nj+\x17\x95\xc2lT:~\x1bdS\x95Of\xcb\xcc\x8e@7\x9b\xd9R\xa6\x87\xb8\xcd[1\x0f\xe7\xea\x02\x0b\xe1 \xcf\xda\xaan`&\x80\xe7l\xd3V\xab\xac\xcdg\x0eHS\x17\xb0\xad\x0c\x0f\xe8U\xe5zV\xe4|\xcf\xd2\xb4Y\xeb\x1c\xc0V\x82\x85o\xcd\x05\x04\xc9\x02\xd1N\x80\x9e\x03 \x96j\xe1\xd0\xb7\xe5mw8\x9f\xd2\xd2-\xbc\x84\x8b\xd4\x94\x0b<\xe9\"\x11\xed\"\x8ex\xe1P\xc7\x0d\x8a\xa6^\xecL\xbeHM\xbf\x08$`$\xa6`\x84\x910\x02i\x18\xae>\xdc\x114\xb0D\x8c\xc4T\x0c\x14\x19#!\x1dcWBF\x14%#\x11)#\x86\x96\xe1P&\xf7X^b\xc6^\xa8\x19\xfb#g\xec\x85\x9e\x11F\xd0HN\xd1\xc0\x924\x92\xd24\xf0D\x8d`\xaaF8Y\xc3;\x15>F\xd05\x12\x106<\x94\x0d\xe4\x86\nA\xdb\x08\xd9u\x05S7\\\x8b\xe0Mu\xc7\x10\xe4\x0dl\xf9\x12\x128B(\x1c\x89I\x1cq4\x0eW\x0fj\xfcD\x8eh*\x87E\x1b\xff\x9a\x8f\xcc\x91\x8a\xce\x81\xe6$ (\x1dA\xa4\x0e\x0f\x06\x1bE\xec\xf0\xe9\xb4\x02<\x89\xe8\x1d\xe1\xc6\xc4S<|u\x8b\xa0yD\x12=\\@Y2\xb2\x07\x9a\xee\x81#|`)\x1f\x08+\x87\xd3>B\x88\x1f.\xeaG\"\xf2G \xfdc7\x02\x88\xcf\xa0\x01$\x90=\xd0@\xbc\xa5\xb3\xf6\xf4td\x10\x04\x1d$\x9e\x10bQ'\x9c\x8e\x0eJHbR\x88\x8f\x16\x12I\x0c\xb1\xe8\x92'C\xd7\xe1\x18A\x0eq!\xd8.\x82Hz\x8aHr\x92\x88\x9d&\x92\x92(\x82\xa1\x8a\x84\x93E\x82\xe8\"\x11\x84\x91P\xca\x88\x934\xe2\x86\xf0\xf1 >\x968\x12A\x1d $\x8f8\xaa\x1bC \xb1\xa8\x1a\x903pC\x02G\"qt\xf9\xf2\xd6M#IJ$\xf1PI\xf6C&I\xd5\x17\x03\x08%!\x94\x92\x9eT\"\x05\x91\xa4y@\xf3\xf0\xc7+\xdb\x924\x0f\xc9&\x94\xa4\x99\xc2\x9b\x8d\xbfSx\xf3@(\xbc\x99\xc2\x9b{I\x8a\xad\x85 kA\xb8\x1a\x857\xef\x8a\xa6E`iI\x90\xb4p\x1c\x8d\xc2\x9bw\xc1\xcfB\xd0\xb3\xc4\xd8\x19\x0e9K\x88\x9baQ3\xc3\x86\x98\xc2\x9b\xc7\x82\xc0\xc9\xb0\xbb\xa4`\x8c\x8c\xc2\x9bQ\xc8X\x0c.F\xe1\xcd\xb6\xc7\xbcXX\x00\x12\x86 \xde\x0dA\xc1(\xbc\x99\xc2\x9b1X\x17\x857\x0b\xd9\x05\xdd\xa2\xf0f\x93&/\x9e\x15\x8bfY\xd7\x06\no\xde\x16\no\x8e@\xad\xfc\x98U(b\x15\x80W\x05\xa3UaX\x15\x857\x87\xa1S\x14\xde\xdc\xc9>\x10\xa9\x14}.\x00\x8d\xc2cQ\xb1\xe1\xcd\xabj\xbe)\xd8\xb5\xf2\xbd4\xf6\x08\xe7_\xc4\x83\xbf\xaa\xe7FA\xceE\xde\x08\xa7\xa9\xd4\xa5\xfd8\x8d\x0c\x95\x131Hz\xdeB\xa4\xfa\xfd\x8b1\xfd\xf1\xf8\xeb\xea\x89\x83\x8d\x906\x1au(\xedg\x00\x8d\xeca\xd2(o\x89\n\xa9+\xc7 \xbcUU\x8d\xef\xa8\xea\xef\xf0M\xed\xa1\xd9\xd8c\x18\xbb\x82\xcdx[\x96\xcd\xa6\x99\xc6N;K\x89 \x81\x1c\xf5\xbd\xce5\xc3\xe7Z\xd5\xe1\xa53\xaf\xd9.\x82\xe5\xbc`\xee\xf7[\x8f\xfa]<\x93~&|\xea\xd3\xd1(\xdd\xa8*\xba\x99\xe5u_J\x83B\xadi\xbc\xcf@\xe0\xda\xe3\xf1\x19\x0fmO\xc6\xf9\xe4\x99\x8b\xd7\xcf:t{\xfa\x9b\xc7\xa8\x04\x82O~%\x10\xdc\xd7\xb1{!\x10\x9c@p\xb3\x10\x08.\x84@\xf0m!\x10\x9c@p\x9b\x10\x08N \xb8\x10\x02\xc1 \x04'\x10\x9c@p)\x04\x82\x13\x08N 8\x81\xe06!\x10\x9c@p\x02\xc1 \x04\x1fH\n@\x92@p!\x04\x82\xffY@p\xd7M\xc5\n3+\x1d\x17\x16Op\xc0\xc1\x1b\x12a\x933Uwcq\xd6\x1f\xd6\x0d8\xe36.9\x80\xc5\xe1\x05\xcb\xee\xf8D |1\xd2\xa9\xb0\x95$`\xc1Z\x95r\x95\xaf}\x01h;\xa8\xfb\x93\x7fW\x1c\x00-\xfd\x05\xca\x8b\xach\x86\xc558\x0cB \x05}\x0eR]q\x99\x86\xf4\xe4\xa3\x98\xecd&\xd9\xff\xb4\xf3\x0c\x06\xc7\xf87J\xd53\xad\xe9\x92+\x1a\xe7W\xef\xac+>\"\xc7\xac\x18\xa4\xc2\x07\xd7\xf7a1-\xb4\xf5\xa6\xe1g\xd6w\xac.Y\xd1e\xf2.\xd9\x87v\x8c\x1a\xe7\x0d\x88\xa4\xae\xc7p\xae\xd4\x89=\xc8\xd0\x93\xd3\xb4U\xcd\xc7\xbf\xcc\xe3,v\x17*K\xeeX\xc3\x03_u.^?\x93Yp\xe5a^\xfb\x83\nv\x9b\xcd\xeeUe\x07\x8b\xb4@~\xea\xf5\x8cw\xc5>\xdd1\x94\xd5{Y\xf9\xf3\x1f\x9f\x89I0o\x1b\xe0\x93b\xcd\xd6E6\x13\x9e\xa5^\xc9#\xe1\xcezzrr\x9b\xb7\xcb\xcd\x8d\x18\x9b\xaa=\xf3\x9b\xd9\x93\xdb\xea\xe4\xa6\xa8nN\xbe\x9d\xfd\xedo_g\xdf~\xcb\xfem\xf1o\xb3\xd9\xbf\xfeu\xf1\xfd\xb77\x7f\xfd\xf6_g\xd9\xbf}\x97e\xff\xfa\xd7\x19\xfb\xe6\x9b\xaf\xbf\xff\xfa\xeboN\xc4\x80\xe6\xaf\x9e\xcc\xaa\x9a\x9d\xc8\xf4\xb3'w\xdf\x9c\x88\xae'\xc7\xfb\xff\xfe\xe2\xaf\xdf\xe9\x0d\xf9\x88\xdba\xb6\x8bz\xf2`9\x1e\xb6~\x1e\x04\xa8z\xfco\x8a\xda\xe0!\xcaHA\x80\xf4fC\xc7\x83\xf5\x96\x86\x9b<;\x04\xed\xf5\xdf\x08\x8d\x9f\xfcJh\xbc\xaf\x07\xf7Bh<\xa1\xf1f!4^\x08\xa1\xf1\xdbBh<\xa1\xf16!4\x9e\xd0x!\x84\xc6\x13\x1aOh<\xa1\xf1R\x08\x8d'4\x9e\xd0xB\xe3mBh<\xa1\xf1\x84\xc6\x13\x1a?\x90\x14\xc8(\xa1\xf1B\x08\x8d\xff\x12\xd0\xf8\x01&<\xd0\xe3B\xe3\xb7\x90\xd6\xfe\x86i\x01\xb8v\xf7\x91\xf2n\xc2\x1b\xadf\xbfoX3v\xc4\x8b51o4\xe4\xa5\xd4m\xca9\xabU\x1f\x10\x98\xf0\x14]\x16^\xfe\xaa\x1e9\x93\xf2\xf2\xe9\xd4\xf7\xde\xe3\xebm\xbd\xf1\xc0\xeb\x00\xe6\x9bZ}\xb0{\xb6i\x97\xff\xec@\xf7\xdb:+[G\xf0\xfe\x05k7u\xd9t\xdc\x81\xb7\xa7\x9bvY\xd5\xf9?\xa5K\xfe\x08\x84\x02\xe9\x0c\xe4\x06\x91\xffd|\xc7\xd2\xff\xb3s/\x8e\xd0\xdb\x9f\xc5\xa7\x1f\xe8\x9a\x1f(Z;4\xd0P\xda\xcf\x00\x95eC\xdb\xbb\x9dE\x8e\xfbY\xfd\xdf\x01\x04,\x078\xbf\x14 \xdd;ZB!:\xa72\xb3\x9f\xc6qlI\x0d\xd5\x81\x1f\xae\x83\x08\xc8\xce]\x81\xac]\xa2a;H\x05\xddA$|\xe7T\x18xs\xeb\xce0\x1e\x04CyNU\nb\x08\x82\xf3 5\xa4\x07\x81\xb0\x1e\x84B{\xee\x9e\x1dq\x8fkb\x88\x0fp0\x1f\xa4\x84\xfa`g\xb8\x0f\xe2 ?H\x05\xfbA\x14\xf4\xe7\x1e\x0e\xd8{]\xf7\x02\x01\xc2\x1ea@\xd8\x0f\x14\x08\x81p \xc4A\x82\xbe)\x18\x07\x0bBZh\x10\x02\xe0A\x08\x87\x08!\x02&DL\x99\xb8\xdb^\x13\xc0\x85\xe0\x83\x0c\x01\xbf=C@\x87\x10\xb8\x8b\x0b\x86\x10\x9d\xda\xf0w\xbf\xe2K\x99\x10N\x84 H\x11R\xc3\x8a\x10 -\xba\xfb\x15\xea\x1e\xd8h\x88\xd1\xaa\xafE\xdd\x05\x9b\nj\x04\xd0\xe15K\x07\x9b\x02\n:\x85\x08\xf8\x14\xc2 T\x88\x81Q!\x18J\x05\xdf]\xb4\xbe\x1b@\xf1\x10\x17\x16V\x85\x18h\x15B\xe1UpW<\x06f\xb5*C\xdcL\x1b\x07\xb7:\x07\x84\xffv\xda\xa4\xb0+\xf8\xa0Wp\xc3\xaf\xd6wbaYH\xd8w\x03\xe0Y\x08\x82ha\xeb\x0e[-\xec\xc3:\xaf\x11\x08\x15\x8a\xce<\xcfZ\xf6\xa4\xcdW6+\xab8G\xc7A\x9f\xbf\x0c\xef\x97\xac\xec\xf1H\xd9\x1dE9e\nf\xdd=\xd7\xf5\xa6d\xf3c8\xb7\x1fP\xcbMQ\xf0>>\xd4go\xcay\xc5\x9a\xf2a+\xfd\x98\x99,Ko\x1fx$]O\xb3\xaa\x9c+?\xb6\x8b\x9e\xffv\x04\xff9:\xeb*\xbb\x87l\xbd.\x84o4/\x85\x0bF\x868\xab\x02\x9b6\xa0\x98|\xd6\x02\xb1\x85\xdb\xfc\x8e5\xb0f\xf5*od\x00y[\x01\xfb\xc0f\x1b\x8b\xff\x88\x7fW\xed\xf1\xd4\xa6H\xae\x8c\x03Kp\xcbl/l~g\xce\xc8$\x934\xd6\x12\xb9\xed\x00j>d{t\xda\xa0k\x82UkYg\xb7yi\xe9\xcf\xa3\x02\xf6\x0fJh\x82 \xb7\xd2\xe0\xaf:j\xdc\x84VKi]\xd8\xad\x1b\xb5-\xd9\x87\xf6\xfa\x1d\xbb\xb7\x07Y:\x87\x9c\xd7 \x88\xe9\x1f})4?\x82\xff\xa7\xf2\xa3gM#\x81\x83\xd7\xd9-\xbb\x90\xd4\x8ac\xf9\xbbE\x99L\x92\xd0\xea8\xfb5_\xc7VU\xd3\x02\x13\xdeh\xe1\xc6\xee\xe3\xecot4Gn\x1b\xbd|\xb01\x01c\x94\x15\xac\xaa\x9ai\xd8\xc2\xb4\xa5j\xab6\xb3\x80\xdfhc:\xb2\xcf\xfb&.\xf1yaE\xf1\x1f\xe5fu#\x9d\xa5:\xc8j\x10\xd1c\xab\xef\xd0\xd0\xb3jS\xb6\xd7B\x99m\xe2x\x9f5\xd0\xb0\xf6H$\x00P R#\xa8-\xbc3\xcf\xa5\x9f\xfc}\xde\x8c\xfb\x07\"z\\\x12=\xe2\xa3\xc5O\xc7\x83\x9c\xc2\xc2\x95PX8\x85\x85\xf7Ba\xe1\x14\x16\xdeKR\x0eI\x08\x7f$\x88;Ba\xe1\xbb\xf2D\"8\"I\xf8!\xe1\xdc\x10\n\x0b\xdf\x85\x0b\x12\xc2\x03\x89\xe0\x80PX8\x85\x85SX8\x96\xc3\x91\x94\xbf\x11\xc3\xdd\xa0\xb0p\xdbc^\x8eF\x00?\x03\x13\xf4\x1c\xc2\xcb\xa0\xb0p\n\x0b\xc7p,(,\\\xc8.<\n\n\x0b7i\xf2r%by\x12\xd6\xb5\x81\xc2\xc2\xb7\x85\xc2\xc2#\xf8\x0d~nC(\xaf!\x80\xd3\x10\xccg\x08\xe32PXx\x18_\x81\xc2\xc2;\xa1\xb0p%:,\\\x81\xb8\x03\x1d;\xe71\x9f*g\xfbQ\xbejn\xaf[\x05z\x0c\xdeq\x1d\x82_)\xef\xe9\xd1\xe8\xe5#Iw\x10P\x9e\xe8\xd0\x12G\x15\xcb\xac\xc2\xc4WY;[N;\xf6m~\xc7J\xaei\xeb@\x9e\xb0\x96=\x1c~\xfc\x8e\xdd\xdb\xea9\xc1\x97\x15\xa0\x9c\xa9%\xae\x161\xe9\xc2\xe9\xa70N\x05\xe4u\xe8\xb3p\xd5\xddN|Z\xa2\x062e\xbe\x1bQ~\xc5-U\x95\xe2,_-\x16\x0dk\xf9\xf1x\\\\\x18@\x0d\x0dk\x13[\xcb\xe2\xb81\x18Q\x96\x0f\xd9_Te\x84)\xcb\xcd\x8a\xd5\xf9L\xffM\xcc\x86\xb3\xac\xe4\xf5\x91^+\xde\x87\x94\xe17e\xe7(\x9c\x1c\x0f\xce\x85\xb6\x825MoB\xe9Z\xdb4\xdc\xd4\xefX\xa0=\xc7\xea\xf7l\xdc >o0o\x91\xafr\xacu\xc5\xb3\x1a\xdd\xb6\xc1\xf6\xd2\x89<\xec\xc1\n\x0b\xdf\x14\x13pY\xba\x8c\x86\x7f:_@\xc1\x16\xad\xa69(\xde\x83\xde\xd4\x0b\xff\xb7\x1c \xf2#\xdc\xce7\xf7\xc0\xb2\xd9\x12\xb2\xf5\xfa3ZqH>\xe8\xdfw\xd9r\xf0\x86\xc8\x9d\xc1D\xfd\xdaz\xc3@\x92\x9a\xe6\xf9\xac\xbb\xb5\xa1\xb7\xa0xPu\xa4\xa1\xba\xbc\x9c\x15\x9b\xf9d\xcb\x9e\xc9\xaftP\xe4\xa4\xc5\x04\xb0=\xf0\x90\xf3\xa5u@\xe6\x99L.o\xce\x9bIkM\xaa \xa6\xdf\x9a5\x8a\x82 \x86W?\x1e\xf9\x90;V\xa3)\xbf-'\x99B\xa0\x1b\x8d\xe3OH\xcb\xec\xda\xb07UU\xb0A\x1c\xb7\xa1\x01kv\xc7\xea\xd1\xab\xae\xc6SOO\x1b.\x1f\x90Wjf\x1e #=\xfc\x1b\xac\x14\xc8kU\xcfY=u0z.\xeeOa\x8d\x98d*'j\x9bp\xf2Q\xfd\x87\xe3\xce\x92\x9f\xe5\x13\x92!\xa3\x8c1\xe4\xb0\xbd\x15\xbf\x8cs\xae\xf0A\xad4\xeb\xa6\x1f\xb5\x86\xf9\xd2\x87\xef\xf5\xa5\x0f\xdb9X\xf4\xf7\x1fh\x0bQ*\x16/=E\xed3\xa3\xa1\x19\xd5\x80\xd1\xefS*\x18J\x05C\xa9`\x1c\xb2#u\x07\x82\xe9;NU\x94\n\x86R\xc1\xc4R| \x8e\xe6\x03\xa9\xa8>\x10E\xf7q\x0f\x07J\x05\x13F\xff\x81@\n\x10\xc4\xd1\x80|S0\x8e\n\x04i\xe9@\x10@ \x82pZ\x10DP\x83\x10S&\xa5\x82\x91\x12L\x1brj\xa3T0\x94\nf\"i\xe8E\x80g\xc9\x00\x86f\x04aT#\xf0q\x03\")G\x80\xd0K\xa9`\x1c\x12EI\x02J\x05\xa3$\x8a\xae\x04A\x94%\xa0T0\x18*\x13\xec\x83\xce\x04\x982R*\x98\xb4T'\xf0\xd2\x9d \x96\xf2d\xd5F\xa9`p\x14)\xab6J\x05\x83\xa4NA0}\n(\x15\x8cQb\xa8UVe\x94\nF\x0b\xa5\x821\xc8gN\x05\xe3\xce\xa6\xb0\x8d\xa1\x02\xfb\xd0\xb2r\xde@\xd6e\x84i\x97pS\xb5K\xd1u\xb2\xf9\xbcfMc \xb0Q+\x81\xce%\xc2\xc7N\x97:\xc4\xf8\xc2y\x07\xf1\xf3\x8e\xc8\x0f\xc1M\xde\xc8&\x11o\x0b\x88Z\xfe{\xeb\xfd\x91\x13C\xb1\xb7\\YN\xc6\xd7pP.\x13\xe3\x03\x94\xcb\xa4\xff kL\xcae\xd2\xe72\xd1\x84\x89\xf8\x94&c\xde\x07e4QB\x19M(\xa3I/\x94\xd1\x842\x9a\xf4\x92\x94\n\x11B\x83\x08\xa2@PF\x93]\xe9\x0e\x11T\x87$4\x87p\x8a\x03e4\xd9\x85\xd2\x10Bg\x88\xa02PF\x13\xcahB\x19M\xb0T\x84\xa44\x84\x18\n\x02e4\xb1=\xe6\xa5\x1a\x04\xd0\x0c0\xf9:B\xe8\x05\x94\xd1\x842\x9a`\xa8\x02\x94\xd1D\xc8.t\x00\xcahb\xd2\xe4\x85\xfcc\xe1~\xeb\xda@\x19M\xb6\x852\x9aD\xc0\xf4~\x88>\x14\x9e\x0f\x80\xe6\x83a\xf90H\x9e2\x9a\x84\xc1\xee\x94\xd1\xa4\x13\xcah\xa2\xc4\x9dtd\xe2\xcb\xee\xa3\x9a\xdbz\xe3\x8d\xdd\xa7d\x1cq\x99\x0e(\x19\xc7\x1e\x8d\xebO#A\xc98RX\x91\x92qP2\x8e/.\x19G\xad\x93q\xd4\xded\x1c\xf5$\x19\x87+\x15\xc7Q\xc7\xbb\xearr\xd4\x89rr\xd4\x94\x93c*>\x82\x05\xe5\xe4\xd8~\x06\x11\xf4\x89\x01%\xb4\x84\x12K\x9c\xca\xcc\xe8\x82\xc3\xd9\x96\x9a`\x02~\x92 D\x10M\xdc\x15\xa0\x9c\x1c\xb1\xe4\x13\x08&\xa08UQN\x0e\xca\xc9\x11KR\x818\xa2\n\xa4\"\xab@\x14a\xc5=\x1c('G\x18\x81\x05\x02I,\x10Gd\xf1M\xc182\x0b\xa4%\xb4@\x00\xa9\x05\xc2\x89-\x10AnAL\x99\x94\x93CJ0\xf1\xc5\xa9\x8drrPN\x8e\x89\xa4!\xc8\x00\x9e\xe7\x01\x18\xa2\x0c\x84\x91e\xc0\x87nG\x92f\x00\xa1\x97rr8$\x8aT\x03\x94\x93CI\x14\xe1\x06\x82H7@990d\x1c\xd8\x07!\x070e\xa4\x9c\x1ci\xc9:\xe0%\xec@,i\xc7\xaa\x8drr\xe0H>Vm\x94\x93\x03I\xfe\x81`\x02\x10PN\x0e\xa3\xc4\x90\x83\xac\xca('\x87\x16\xca\xc9a\x10\xca\xc9q 99n\xee\x07\x85\xdbr\xeaRN\x0e!\x94\x93\xa3\xff kL\xca\xc91\xc8\xc9Q\xa7\xc9\xc9QSN\x8e\xb1PN\x0e\xca\xc9\xd1\x0b\xe5\xe4\xa0\x9c\x1c\xbd$\xa5B\x84\xd0 \x82(\x10\x94\x93cW\xbaC\x04\xd5! \xcd!\x9c\xe2@99v\xa14\x84\xd0\x19\"\xa8\x0c\x94\x93\x83rrPN\x0e,\x15!)\x0d!\x86\x82@99l\x8fy\xa9\x06\x014\x03L\xc6\x89\x10z\x01\xe5\xe4\xa0\x9c\x1c\x18\xaa\x00\xe5\xe4\x10\xb2\x0b\x1d\x80rr\x984y!\xffX\xb8\xdf\xba6PN\x8em\xa1\x9c\x1c\x110\xbd\x1f\xa2\x0f\x85\xe7\x03\xa0\xf9`X>\x0c\x92\xa7\x9c\x1ca\xb0;\xe5\xe4\xe8\x84rr(\x19\xe7\xe4\x18\x1e\xf0('\x07\xe5\xe4\xa0\x9c\x1c\x94\x93#\xce\x8a\x94\x93\x83rr\xfc9sr,\x18\x13\x8be\x97\x96C\xe07Y9c}F\x0e\xfd_\xcc\x91\x9b\xe3T\xbf\xd6\xe5\xe5X0f\xb9\xf5\xc8B\xb8\x1a%\xd9\xe8\xf4=\xd0\xb5>\xd0\x04\x1b\x9d\xbd<\xec\xb0\xee9\xb9z\xf5\xff\xd46\xe2\xc3s` \x0b\x1bm'\x8e\x983\x01\x87\x17G\xc08\xe2\xbbo\xe8eD\xd1\x02\xf5\x1c\xb5i\x98\xaa\xa5\xe0\xa9\x96\xbd\x1d,\xea\xe4{y\x0d\x8bM97\xc2#\xce\xac I+\xc5\\\x95\xbaa\xbcF\xba1\xadq\xfd}\xbb\x8bC\xbbD\xa1\xb8\x82\x87\x8d\xbd\x8a\x8e>\x06\xe8:\xf4_V\xbb\xa4\xac\xbc\xe7\x85\xb8\xc9\x9a|v\x04kV\xe7\xd5\x9c\xff\x97Fp\x17\xcc\xd6(\x9d*\xf3)\xdd\xd9C\xc1\xdbK\x01\xc1\xfbA\xb4,\xa0-\x03\xb1\xec\x1f\x87\xbe\xa0\xb4)I\x19@^\x0ePj\x16\x10\x9e\x07\x94\x88 \x14\xc7\x05r\xa8\x0bL\x94\xb2#\x1f(5#(\x90\x13\x94\x98\x15\x14\xc6\x0b\nd\x06\xb9\xfapDj\x94\xa4\xec \x14?(!ChW\x8eP\x14K(\x11O(\x86)\xe4P\x86N\x85\xb2\x07\xb6\xd0\xfe\xf8B{a\x0c\x85q\x86\x92\xb3\x86\xb0\xbc\xa1\xa4\xcc!y\xd4\xf3q\x04\x14\xdf\xce\x18\x94\xa9\xc5t\xf4\x0b\"V\xa2;\xf7\xc6\xc7I\xf4Gq\x8a\x91PB1\x12\x14#\xd1\x0b\xc5HP\x8cD/IOC!g\xa1\xa0\x93\x10\xc5H\xecz\xfe\x898\xfd$9\xfb\x84\x9f|(Fb\x97\x13O\xc8y'\xf1i\x07w\xd6Ix\xd2\xc1\x9es\x02O9\xa1g\x1c\x8a\x91\x18I\xf0\xa9\x86b$(F\x02(F\xa2\x17\x8a\x91\xa0\x18 \x8a\x91\xa0\x18 \x9bP\x8c\x04\xc5HP\x8c\x04\xc5H\x0c$\x05_\x9db$\x84P\x8c\xc4\x97\x19#\xe1:E\xc6\xd2\xfa:\x02\xdfH\xdb\x16\xd3-Yx\x86b\xea\x05\xd5*\x88\xd77\xaa\xdaH\x99\x8f\xcd\xb7c\x1d\xe3\x99\xbcM\x10\x81\xb7\xbfYO\xb8\xd15O\xb7\x11;\x01e!7e\xf7\xe0/\xc5\xeb-s\x18\x08\x9e\x93\x97\x8b\xf2^a\x1c@\xb0\xc30\xb6*\xf4\xf3sw\xbf\xb7/\xb4zA\xe3\xd9\xaa+\x8a\xa9\xeb\xe5\xea\xe2\xeb\x92\x90\xaf\xebe\xecz{0 z1 \xb0h\xc0\xb57\x04\xd8 \"pi\xa72\xb3s\xd2qVO\x8dO\x83\x1f\xa3\x86\x08\x9c\xda]\x01\xba\xf60\x16\xbb\x86`\xfc\xda\xa9\x8a\xae=\x8c\xe2\xf6&\xc6\xb5\x01\x87mCJ|\x1bv\xc6\xb8!\x0e\xe7\x86TX7D\xe1\xdd\xee\xe1\x80\xe5\xfa\xee\x05\xf7\x86=b\xdf\xb0\x1f\xfc\x1b\x021p\x88\xc3\xc1}S0\x0e\x0b\x87\xb4x8\x04`\xe2\x10\x8e\x8bC\x046\x8e\x982q\x0c\xe0\x04\x189\xf8pr\xc0o\xcf\x10x9\x04\xee\xe2\x82qs\xa76\x1c\x1f\xd8\x97\x89=)'\xd8\xcc\n\x06k\xa8\xe8`\xf6\xe4\xff|\xd8\x04\x06\x8b\xd2\xd5\x05B\\\x999z\xa1\xab\x0b\x80\xae.\x18\xc8\x98\x8e\xbf\xc3\xbd\x05\x03\xcf\x1a\x11\xf2\x95\x10!?\x8d\xc3+\xd4\xf1\xa1\x9d\x1bV\x85X\xa7GR\x87\x07\x11\xf2\x89\x90\xdfKRGF\x88\x13#\xc8\x81A\x84\xfc]\x9d\x15\x11\x8e\x8a$N\x8ap\x07\x05\x11\xf2wqH\x848#\"\x1c\x11D\xc8'B>\x11\xf2\x89\x90\xdf\x12!\xbf\x17\x0c\xdd\x9c\x08\xf9\xb6\xdf\x88\x90o|\x86\x08\xf9D\xc8\xb7\x08\x11\xf2\x89\x90O\x84|\"\xe4\x0f$\x059\x9a\x08\xf9B\x88\x90\xff\xe5\x10\xf2\x87\x96\xdc\x911N\x97\x16\xc4f\x84\xa7K\x0b\xf6h\\\x7f\xba}\xba\xb4 \x85\x15\xe9\xd2\x02\xba\xb4\xe0\x0b\xb9\xb4 o\x9a\x0d\x9b\xf77\x16\xc8\x97\xddaN?\xde\xff\xac\x82a,\xf1N\xb7\xf9\x1d+\xf9X\xceJ\x1dI\xa2\xb4\x8d\x9a\xe1\xa1\xd1 \xdf?T\xcfZB\xa4\xba\xaf?\xd0\x06\xa2X)!>r\x05\xc5J%\xad\x1e\xc5J\xd9\x95Q\xac\x94\x07\xd7\xa6X)?\x8d\x08RQ\x89 \x92N\xe4TH\xb1R\xbbS\x8c \x90f\x04\xa1T#w\xcf\xa6X\xa98\xfa\x11\xc4Q\x90 \x15\x0d \xa2\xa8H\xee\xe1@\xb1Ra\xd4$\x08\xa4'A\x1cE\xc97\x05\xe3hJ\x90\x96\xaa\x04\x01t%\x08\xa7,A\x04m 1eR\xac\x94\x94`J\x93S\xdb\x9f\"VJ,fb>\xbba\xac\x04\xe9\x13\xb0\xdc5\xa8\x85\"\xa4\x84P\x84T\xff\x13\xd6\x98\x14!5\x89\x90\xea\\Z)B\xa5z\xef\xdc0fjZ;\xb3\xeb\xad{\x88B\xab&\xbfRh\x95\xafO\xf7\x12\xea'\xd1\xbe\x10\xabB\xac\x8f$\xa9\x7f\x84B\xab(\xb4\xaa\x97\xa4~\x8f\x10\x9fG\x90\xbf\x83B\xabv\xf5mD\xf85\x92\xf84\xc2\xfd\x19\x14Z\xb5\x8b\xff\"\xc4w\x11\xe1\xb7\xa0\xd0*\n\xad\xa2\xd0*\n\xadj)\xb4\xaa\x17L\xe0\x10\x85V\xd9~\xa3\xd0*\xe33\x14ZE\xa1U\x16\xa1\xd0*\n\xad\xa2\xd0*\n\xad\x1aH\x8a0\x17\n\xad\x12B\xa1U_Nh\xd5\xf0\x80G\xa1U\x14ZE\xa1U\x14Z\x15gE\n\xad\xa2\xd0\xaa?gh\xd5m]m\xd6'w\xdf\xc8\xff\xb8\xce\xcbEu\xf2Q\xfd\xf7\xdc\x11W\xf53\x7f\xe4\xbc\\T\xa2|9k@\xbc\x04\\A\xcfKU\x7f\xeb\xb2\xdf\x8e\x82\xa3:\x15\x0ft\xc5\x0e4$\x8a\xd7\xc9C\x17\x13\xd5V3go\x1a\xcd\x11\x13fHJ\x10\xcb\xe7\xfbc3\x8d+6\xd7\xd5\x924\x088\x7f\xae\xe7\x1bK\xad\xf8yo\x95\x1b\xf8u\x80)\xdf\x98\xec\xc7\x15u\x01K39\xdbM\x02\x97D)\x1e6\xf2YSiV\xac\xcd\xe6Y\x9b\xa5(\x90\x15\x18\xd1\x1f\x11[\x93\xf2~\x00?t\xbf\xf0\xe5\xadm\xb3\xd9R\x82\xa3v\x98\xd3jW\x05\x1bFV\x04\xd1\xf2>\x1e\x9b*\x80\x9e\xef\xe5\xc4\x98\xcd\xde\x0dq\xce\xack\x91\x15??\xd5\xcd2_[\xd45m\xbd\x99\xb5\x9bZ\xae\x82\xb6\xa3\xc8{\xb9K\xadY\xf6\x0e\xd8\x87\xbc\x11\xf1w|tTMV4\xc7\xf0\xdb\x92\x95|\xbe\x16vW\xdf\xb4\xa9b\x02\xab\xcb\x1bU\xe0\xf9\x91\xed\xa3\xd5P\x9dhTq\x10\x14|\xb1Uu\xc7\xeb\xbe\xcc\x9b\x81A,z\xf2rV\x0b\xc0O\xc4\xd3\xcd\xc5\x86\xc7\xf6\xcdY\xb6iX_\xb3~\x16\xad\x8a9\xab\xf5\xb7T\xc7\xcf\xf5\x84k%\\.\xb2\xdc\xc4\xb3\x15\xeb\xf9\xb5\xb4DdO\x1a\x0d\x89\xa1>=T\x9b\xcdj4\xd4\xacq<\x802+l3k$\x89fT\x9f\x87\xcd\x94dc\xdf\xa9\xbb\x08\x04Rb\x8a\xe5I\x826f\x19t\x85\xbe\xab\x04'D\xfd*\x165\\6\xd4[\x81\xcc+G\xe8\xd7\xf6\xca\xba)DR\xf6P]\x04\xa9\x08\xc7(\xd2\xea\xb8\xbd\xec\xb5\x14\x14\x17+\xfdB\n\xb2\x968*\x86\x94\x10\x8b\xe8\"\xfaI\x19j\x84\xdaY\x19\x03\x85\xb1\x8e\xd7\xc1B\xd1\xef\xa2\xf4\xc9\xa3\x90\xb0\xd02_\xc3\x0dk\xdf\xb3\x01U$+\xcdG\xaa\xcc\xdaD\x86\xa9HqP\xbbq0&\xc4I\xdf\xad\xcch\xafg\xc8\xa9\xda]r\xe1\xb5\xe2@>\xe0\x12\xabZS.<\xca\x85\xf7\xe5\xe4\xc2\x1b\xee\x14\x1d\xac\xad\xc9\x13\x13MD\xe7\xea\x85\xe8\\D\xe7\xea\x85\xe8\\D\xe7\xea\x85\xe8\\-\xd1\xb9\xccBt.-D\xe7\":\x17\xd1\xb9\x90\xbb$\xa2suBt\xae\xa1\x10\x9d\x8b\xe8\\\x06!:\x97\xf1\x19\xa2s\x11\x9d\xcb\"D\xe7\":\x17\xd1\xb9\x88\xce5\x90\x14\xd4\x1a\xa2s !:\x17\xd1\xb9b\x080\xfb\xa2sQ\x92\xbc\xd8\x0cd\x94$o\x8f\xc6\xf5\xf7QJ\x92\x97\xc2\x8a\x94$\x8f\x92\xe4}\x11I\xf2\xd6U\xc1\xe7\xc0\xe6\xfa\xe6\xfeZ\xa4\x1d;\xf9(\xfe\xcfGGn~\xbc?\x15\x19\xcd\xc6)\xf3\xb4:>\x8ce\xc6\xb3 \xfbr\x9b\x9d\xfcZ\xbd\xa2\x14>\xd0\x95>P\x96\xf2\xd8l\x87\xc1\xc6\xf0\x10k\x11H\x84\x8bPkHV7h\xec{\xf3\x89\xf0\x0f\xc7\x9fv$\xfaC\x95vbAd\xb2?{\xaa??S7\xb4P\x0e\xf4\x08\xc1\xceE\xa7\xfc\x03D\xefpf\xffC\xd5,\xbcs8\xaa\x1f\x94\x0b\xd0\xaa\xa5\x9f\xcd\xeeEn3\\J@\x9d\x14PfV\x83\x0c\xe6\xf9b\xc1j\xbe+U;\x84\xaa\x84\x0c\xea\x8d\xc4\\uJ=\xb3]\xe7l\x96\xf3\x9a\xc8\xf9\xc9B3\xf5N7\x80\x98r\x00A\x02\x03\\SB@KA\x04!\xcc\xa9\xac5\xa2\x82\x0e'yjb\x18\xf8\xc9a\x10A\x10sW k\x97h\x92\x18\xa4\"\x8aA$Y\xcc\xa9\x90\x1b\x17M\x18\x83\xddIc\x10L\x1cs\xaaR\x84\x96 \xf2\x18\xa4&\x90A \x89\x0cB\x89d\xee\x9e\xdd\x91\xcc\xb0d2HM(\x03\x1c\xa9\x0cR\x12\xcb`gr\x19\xc4\x11\xcc \x15\xc9\x0c\xa2\x88f\xee\xe1\xa0\xd3\xc4\xfa\xc6\xcd^\x08g\xb0G\xd2\x19\xec\x87x\x06\x81\xe43\x88#\xa0\xf9\xa6`\x1c \x0d\xd2\x12\xd1 \x80\x8c\x06\xe1\x844\x88 \xa5!\xa6\xcc\xc7\x08b\x1a\xa4 \xa7\x81\x8f\xa0\x06\xf8\xed\x19\x82\xa8\x06\x81\xbb\xb8`\xc2\x9aS\x9b \xb3!Hk\x10P\xca\x84\xe45\x08\"\xb0Aj\x12\x1bD\x12\xd9\xdc\xfd\xaa\xf1\x93\xd9 \x9e\xd0f\xd5\xc7\xbf\xe8#\xb5A2b\x1b\xe0\xf9Y\x80!\xb8A\x18\xc9\x0d|\xac\x94H\xb2\x1b \xf4:\x80\xefD\xc47\x882.\x9e\x00\x07\x88ZF\x10\xe1 \x96\x0c\x07n\xab\xa6#\xc5\x01\x9e\x18\x07Hr\x1c\xa0 r\x80\xb3z8Q\x0e\x82\xc8r\xe0$\xccA*\xd2\x1c\x84\x12\xe7`G\xf2\x1c \xcc\x1b@\xa2\x83}\x10\xe9\x00SF\xc7HHG\xaa\x03\x0c\xb1\x0ev \xd7Y\x15J\x07\xb4\x9d`\x07\xa9Iv\xe0%\xdaA,\xd9\xce\xaaM\x9eQ\xdd\xc7u\x04\xe9\x0e\x9c\xdc p\x92\xef \x8a\x80gU\xe5$\xe6A,9\xcf\xaaM\xee\x03\x1d^\xb3t$=@\x11\xf5 \x82\xac\x07a\x84=\x88!\xedA0q\x0f<\xab\xad\x87L\x05\x01\x84*,\x89\x0fb\x88|\x10J\xe6\x03w\xc5cH}Ve\x03\xca\x1cv\xc8\xe0\xc8}\xce\x01Q\xde\xba ~\x90\x96\xe4\x07>\xa2\x1f\xb8\xc9~\xd6wbI\x80\x90\xb0\xef\x06\x90\x01!\x88\x10\x08\x03R\xe0X|\xd7#\xa1\xfc\x12\xd8\xbc<\xd8\xe3~\xf85I\x12d\xb3O\xedYc\xbe/I\n\xa6\\SHq\x92\x99g\x99\xdf.\x9f\x14\xec\x8e\x15P\x95Of\xcb\xcc\x12'\x9a\x97\xd2X\xbc\x9b\xf3n\x99y Z\x7f\xd1\xc6,\x88.}\xcf\x84\x04\"n\x12\x14+\x9c\xde\xbf\x19T\x19\x11p\xca\xe7#\x84\xf2\xf9\xf4?a\x8dI\xf9|\xfa|>\x13n\xd5$\xaf\x8f\xe9\xb5\x13\xd3{\x94\xd7g \x94\xd7'\x0d\xe7(\x94\xc6\xa1}\xdfV\x85X\nGR\xfa\x06\xe5\xf5\xa1\xbc>\xbd$\xa5e\x84P2\x82\xe8\x18\x94\xd7gW\xeaE\x04\xed\" \xe5\"\x9cnAy}v\xa1W\x84P+\"h\x15\x94\xd7\x87\xf2\xfaP^\x1f,-\")%\"\x86\x0eAy}l\x8fyi\x0f\x01\x94\x07L\xd6\x9a\x10\xaa\x03\xe5\xf5\xa1\xbc>\x18\xda\x02\xe5\xf5\x11\xb2\x0b5\x81\xf2\xfa\x984y\xe9\x07\xb1\xd4\x03\xeb\xda@y}\xb6\x85\xf2\xfaDP\x06\xfct\x81P\xaa@\x00M \x98\"\x10F\x0f\xa0\xbc>a\x14\x00\xca\xeb\xd3 \xe5\xf5Q\xa2\x13/d\x83\xc8}p\x07C\x0f\x93\x02\x8cC\xa1\xb7\xd1\xe8\x9d\x93\xfbP\x0e\x9f\xb8\x04)\x94\xc3g\x8f\xc6\xf5g\x9f\xa1\x1c>)\xacH9|(\x87\xcf\x17\x97\xc3G\xfe\x84\xbeU\xb4'z\x88\x7f:\xb2\xf9\xc8\xbf\xf47\xaf\xb9\x12\xf9\x88\x7f>\xd05\xa7D>\x9d\xf8\xe8\x17\x94\xc8\xa7\xa5D>&\xc1\x802@\x89|(\x91\xcf\x96\xf8\xa6\x1c@\xb0\xbe\x00\xd7\x94\x10\xd0R\x10\xc1\x00s*k)\x91\x0f%\xf2 `\x89A0S\xcc\xa9\x8a\x12\xf9P\"\x9fX6\x19\xc41\xca \x15\xab\x0c\xa2\x98e\xee\xe1@\x89|\xc2\x98f\x10\xc86\x838\xc6\x99o\n\xc6\xb1\xce -\xf3\x0c\x02\xd8g\x10\xce@\x83\x08\x16\x1ab\xca\xa4D>R\x82\x19jNm\x94\xc8\x87\x12\xf9L$\x0d\x93\x0d\xf0\x84,\xc00\xda \x8c\xd5\x06>\x1aJ$\xbb\x0d\x10z)\x91\x8fC\xa2\xd8o@\x89|\x94D1\xe3 \x88\x1d\x07\x94\xc8\x07\xc3\x9a\x83}0\xe7\x00SFJ\xe4\x93\x96U\x07^f\x1d\xc4\xb2\xeb\xac\xda(\x91\x0f\x8e\x8dg\xd5F\x89|\x90,=\x08f\xea\x01%\xf21J\x0c\x8b\xcf\xaa\x8c\x12\xf9h\xa1D>\x06\xa1D>_|\"\x9f\xaci\xaaY.N\xf7b\xb13\x0f\xb2n\x83g\x84\xe8)\xaf\x8f\x10\xca\xeb\xd3\xff\x845&\xe5\xf51\xe5\xf5\x11\xff\x8c\xc8\xeb#\xe9^\x94\xd7\xa7\x17\xca\xeb\x93\x86\x82\x14\xca\xea\xd0\xaep\xabB,\xa3#)\x9b\x83\xf2\xfaP^\x9f^\x92\xb24B\x18\x1aA\xec\x0c\xca\xeb\xb3+\x13#\x82\x85\x91\x84\x81\x11\xce\xbe\xa0\xbc>\xbb\xb0-B\x98\x16\x11,\x0b\xca\xebCy}(\xaf\x0f\x96%\x91\x94!\x11\xc3\x8e\xa0\xbc>\xb6\xc7\xbc,\x88\x00\x06\x04&kM\x08\xf3\x81\xf2\xfaP^\x1f\x0c\x8b\x81\xf2\xfa\x08\xd9\x85\xa9@y}L\x9a\xbcl\x84X&\x82um\xa0\xbc>\xdbBy}\"\x18\x04~\xf6@(s \x805\x10\xcc\x18\x08c\x0bP^\x9f0F\x00\xe5\xf5\xe9\x84\xf2\xfa(\xd1\xc9\x18t\x1c\xf6@ID\x9c\xb6\x82\xa7\x1f6\xdb\x98\xf0\xce\x19~B\x12\x82P\xea\x1f\xf0\x9b\x91R\xff\xec\xd1\xb8\xfe>J\xa9\x7fRX\x91R\xffP\xea\x9f/'\xf5\xcf\xfdu^.\xaa\x93\x8f*/\x89#\xe7\xcf\xc0nSF\x9a!\xf3\xcf\xbd\xe4}u\xb1\xbc\xdb\xf9O:m&\x1a\x9a%C\x90\xf8\x9cz\xe4`\x93\x03\xf1\x8a\xdb\x98\x1bQ\x8c2gf\x1f/\xf4\x908\xab\x8f;\xa7\x8f\xb74\x08FV\xc4.\xd1TPG.\x1fo)S\xe7\xf1qg\xf1 +\x8e\x15\x18J\x99\xbf\xc7\xd7\x0b\x9c\xb9{\xbc\xf5 \xed\x04\xd6*\xa7\xc8\xd9\x13\x97\xb1'Y\xbe\x1eT\xb6\x1e\xe7\xe4\x01\xde \x04\x10,.D\xb3\x01\xba] \x96\xcb\xe5\xd0\x17\x94\x9f')\x9f\xcb\xcb\xe8J\xcd\xe9\xc2\xb3\xba\x12\xf1\xba\xe2\x98]\x0eu\x81\x19yvdw\xa5\xe6w\x052\xbc\x12s\xbc\xc2X^\x81\x9dV\x049\x11\x7f,\xdc\x98x\x0e\x99\xafn\x11<\xb2H&\x99\x0b\x89O\xc6&C\xf3\xc9p\x8c2,\xa7\x0ca\xe5p^Y\x08\xb3\xcc\x9d\x11' \xbb,\x90_\xb6\x1b\xc3\xccg\xd0\x00\x96\xd9\x1exf\xde\xd2Y{z:\xb6\x19\x82o\x16\xcf8\xb3\xa8k\xbd\x99o\x92\xb2\xce|\xbc\xb3H\xe6\x99E\x97?\xe3\x0d\x82}\xe6\xcev\xe3\xcau\x93\x9a\x83\x96\x9c\x85f\xe7\xa1\xa5d\xa2a\xb8h\xe1l\xb4 >Z\x04#-\x94\x93\xe6\xc9_\xe3.\x1d\x96%\x84e\xa6Ep\xd3\x02\xd9i\x8e\xea\xc60\xd4,\xaa\x10\x19kbXj\x8e.\xef\xcfV\x93\x90\xa9\xe6\xcdT\xb3\x0f\xb6Z\xaa\xbe\x18\xc0X\x0b\xe1\xac\x99\xf3\xd0\xf8\xb2\xd0x\xcf\xf0\xb8\x0c4\xb8\x03r\xe2\xec3\xce\xdc3\xfe\x12\x85\xe7\x9d\x19\xe6\x981(\xf4e\x9d \xca`!\xca4I^\xb1\x95\xaeB\x17\\>5Q\xd8R\xde\n\xca[Ay+z\xa1\xbc\x15\x94\xb7\xa2\x97\xa4\x98f\x08\xa2\x19\x84gR\xde\x8a]Q\xcc\x08\x0c3 \x82\x19\x8e_R\xde\x8a]p\xcb\x10\xd421f\x89C,\x13\xe2\x95X\xb4\xd2p\x10\xa1\xbc\x15cA\xe0\x93\xd8]R06Iy+P\x88d\x0c\x1eIy+l\x8fy1\xc8\x00\x04\x12\x93\x95!\x04}\xa4\xbc\x15\x94\xb7\x02\x831R\xde\n!\xbb\xa0\x8a\x94\xb7\xc2\xa4\xc9\x8b#\xc6\xa2\x88\xd6\xb5\x81\xf2Vl\x0b\xe5\xad\x88@\x0b\xfdXa(R\x18\x80\x13\x06\xa3\x84a\x18!\xe5\xad\x08C\x05)oE'\xfb@\x02S\xf4\xb9\x00\x14\x10\x8f\x01b\xf2V\xa8\xc8\xbe\x81\x8e\xc0\x08\xcav\x92\xbbb\x1a\xf2\xbcC\xce\x8a\xb0\x08_\xf5\xa8)\x98W@dM\x17\xb8\x9b\x15\x85,\xb2\xa0\xa26m\xd6v\xc7\xe9Q\xe5\x1f\x1a\xa3\x98\xff\xf5\xf8\x9b\x87\xea\xe9\xed\xb8]m\xc8\x83\x0d\xd7\x1d\x9aj(\xedg\x80\xacla\xb5A\x9e\x1aGT\xe5\xc4\xc41a\xb5\xce\xc0ZT9\xe3\x82k\x1f6\xf6\xf0Z_\x80mx\xb1\x1c^\xac\x94a\xb6\xe0\xb2\xb33\xc6\x16U%T\x8f\xf0]\x80\x11\x18e\x0b+\xbe\xf4\xd5\xcd2_[\x15\xe2Blu\x90\xadp\\\x03\xfb\x907\xed0\x98\xb69\x86\xdf\x96\xacdw\xac\x16\xed\xa0\xbekW\xc6\x84\xb35oT\xb1\xe7G\xf6\x0fWC\x95\xa2\xa1\xc5Z. \xffUu\xc7m\xb0\xcc\x9b\x81a\xac\x9a\xf2rV\x0b\xaf-\xdf\n\x94sI*\xb4>=\xcb\xf8)\xa6\xaba\x1f\x96U\x15sV\xeb\xef\xa9\x81\x91\xeb\x84\x0b\xd6{[\x00\x16Yn\xe60\x8aT\x1f\xd7\xd2&;\xf4\xb0\xd1\xa0\x19\xea\xd4C\xba\xd9\xac\xc6k\xa2j\xa6\x87\xaa=,^k\x1f-\x07U8\x1c5\x07?\xf2\xc3\xe99\xef\x1d\x08a\x8a[\xa1\"x9V\x986\xb3\xcdE\xe3\x1d\xc0[\xb9^Jh\xb2(\xfa\x96m@\x15\xa3\xdfB<\x9c\xe8\xa2\x1b\x9c\x84\x8c\xaaJ78\xa1\x8c\xf9\xc5\xdd\xe0\xb4\xd5/z\xfe[\xe3\xa0\xbd5\xd3{\x99&Zl\x1b\xf8\x07}!\x88\x077\x12\xe2\xc1\xe1\x16$ \x1e\x1c\xf1\xe0\xacO\x12\x0fN\x08\xf1\xe0\xb6\x85xp\xc4\x83\xb3 \xf1\xe0\x88\x07'\x84xp\xc4\x83#\x1e\x1c\xf1\xe0\xa4\x10\x0f\x8exp\xc4\x83#\x1e\x9cM\x88\x07G<8\xe2\xc1\x11\x0fn )8I\xc4\x83\x13B<\xb8/\x81\x07G\x97\x1f\x85\xdd,C\x97\x1f\xed\xd1\xb8\xfek{\xe8\xf2\xa3\x14V\xa4\xcb\x8f\xe8\xf2\xa3/\xe1\xf2\xa3\xe6\xfa\xe6\xfeZ\xf0IO>\x8a\xffs\\|$y\x15?\xde\x9f\n\xaa\xea\xe8\xae\xa3\x86\x0f[IaU\x9cU\xdd\xc4\x06\"\xb4\xd2\xf0@\xd7\x8e\xf8\xd0^\xea\x02\xf1\xa1\x89\x0f\xdd \xf1\xa1\x89\x0fM|\xe8\x1d\nG|\xe8\xf4|h\xb5\x0d\x10\xdb\xa4\x9e -\xee>\x14\xb8'\xffc\xe7e6N\xd8D\x8a\x16B\xa4\xe8\xfe'\xac1\xbf8R\xb4#)\xa8\xde^\xbb\xb8\xd1\x93G&\xba&\xc4\xe9\xbe\x00D\x88\x1e \x11\xa2}\xbd\xb2\x17\"D\x13!\xda,D\x88\x16B\x84\xe8m!B4\x11\xa2mB\x84h\"D\x0b!B4\x11\xa2\x89\x10M\x84h)D\x88&B4\x11\xa2\x89\x10m\x13\"D\x13!\x9a\x08\xd1D\x88\x1eH\nr*\x11\xa2\x85\x10!\xfaK Dg\x03\xf6\x16\x84\xf2v2;kg\xc7\x9c\xa0\xc4\xd8\x8e\xa5\xc3\x12c{\x8f\xc6\xf5s\x8d\x89\xb1\x9d\xc2\x8a\xc4\xd8&\xc6\xf6\x17\xc3\xd8\x96d\xb9\x93\x8fjaE\x90\xb6\x7f\x91\x94\xc5m\xd6\xb6\xe22bh\xdbR\xc7\x03]G\xe2m{\x19\x16\xc4\xdb&\xdev'\xc4\xdb&\xde6\xf1\xb6w(\x1c\xf1\xb6?3o{\xd8\xe2D\xdf6>@\xf4\xed\xfe'\xac1\x89\xbe=\xa2o\xcbm\xb6\x9b\xbf\xad\xb6\xf3\xb5\x99\xc1\xdd\x12q\x9b\x88\xdb\x01\x0b=\x11\xb7\x89\xb8\xad\x84\x88\xdbD\xdc&\xe26\x11\xb7\x89\xb8M\xc4m\"ncwID\xdc\xee\x84\x88\xdbC!\xe26\x11\xb7\x0dB\xc4m\xe33D\xdc&\xe2\xb6E\x88\xb8M\xc4m\"n\x13q{ )H\xb4D\xdc\x16B\xc4\xed/\x83\xb8-h8\x03\x1d\x13\xea\x8ed\xe9(\xc0i\x08\xf6N\xe9a@tm\xa2k\x13][\x08\xd1\xb5\xfb?\xe3\xadHtm\xa2k\xff\xc9\xe9\xda\x9a\xf6w\xf2Q\xff\xd7u>wP\xb5_\xab\xa7:\x92v\xd61\x07{\xe2`\xf7\x97|n\xe7jkM\x0ft\xfd\x0e\x94\xaa\xad+\xe3c\x8cuuVT\xb1\xee\xdf\xe5\xa2J\xca\x0e\xb3\xf1\xb5\xbdh\x02\x82\xca\xe4fj\xe7s=\xe9\xe8\xda\x99\xcez\xa2o]\xaf\xab\"\x9f\xdd_\xab=Yd\x891\x00\x82\xf9\x83\x0ev\xb7x\xdc\xa2J*1\xd5\xcaM\xf6NT\x93\x944oW\x13\xc9\xdfF\xfb\xef\xa1\xb4\x0e\xba\x10\xb8(C\x10l\x8a\xae$\x1d\xbbs\xd2b\xac\x19\xf79V\x1b\x91\xb6fs\xb3\xca\xdb\xeb6_Y\xd06o\xb1p\xc4]\\;\x0eJ\xe3g\xedv3\x85\x9d\xb8+\xf5Y\x88\xbb\xb2\xfb;\x89\xfb\xe8\xcac\xa7\x06\xcfX\xd4\x1cu\xc1\xd8\x97\x03Q\xffi\xc4\xcb\xce\xda\xae\xf6\xae\x9a7\xfcM\xab\x83_p\xad\xa4w*o@\xf0B\xf9\x9eg@?\xce\nXoj\xdey\xe4~\xc6;k\x1d\x941\xc7e\xf2\xd9\xd49\xb1\x0d\x0d\x8e1\xedo\xb2\x87\xce\xd9,\x17\x1fRZ\x06\xe1\x0c\x86\x10 X\xd4\x16\xdf\x0e\x9fx\xd8]^m\x1a\xa5\xc9\xf6\xdd.\xe6@\xf9sf\x15\x1fH\xa5\xc4\xad;\xca\xf7\xdb\xd3\x1f_]\\\x9d=\x7f\x0bM\x9b\xb5\x9b\xe9F\xb6\x974=D~\xc4\xdc'p\xed)5\x98\xb8\xf3 \xb9\xf3\xeb\xaa\xc9\xdb\x01\xbb\xbc\xc8\x17\xb6\xe9}v?+\xd8\xd6r\x0c\xe7e\xde\xe6Y\xd1s~/]S\x07\xa23\xb3r\xb3\xb2M\xf5O\xe0\xf5\xc5\xab\xd7\xaf.O_\\_^\x9d^\xbd\xb9\xbc~\xf3\xf2\xf2\xf5\xd9\xb3\xf3\x9f\xce\xcf\x9e\xa3\xdf\xb9|\xf3\xe3/\xe7WW\x01o\x9c>{v\xf6:\xe4\x85\x8b\xb3\xffv\xf6,\xe4\x05\xd5\xb3\xd0\xcf\xffv~\xf5\xf7\xe7\x17\xa7\xbf\xbd\xb4\xf4\x0eIn\x0e4\xd7\"/\xb3\xe2\xba\xcd\x8a\xe2\xfeZ\x9e@v\xe9|\xdb\xda\xc6\xee\xfbf\xb3\x92\xc9\x0f\x8aB\x85\xc9\xb09\xdcU\xad\x85\xa5\x00\x92\x0b\xb4\xcc\x1b\xdb\xa8\xeb&\x1a\x81\xd5\xf0\xd3<\xd7\xa6\x18\x83\xfa\xd0(}\x02Y;\x98\x8dl\xbe\xc6\xac\x9c\x8b\xb1i\xfd^\xb5\xde\x14\x82\xf3\xa0\x90&^\xd5\xbc\xbc=\xe2\xea\xef*9I\xb1:\xaf\xe6\xc0J\x11We%\xe3vEg\x1f\xd8l\xd3\x8aBY\x1e\x15\x0eb\x11\x0f\xb6\xcc\xd6kV6\x12ep\x8d6+\xa5\xda\xb7\xf3\xe7r\xcf\x9ak\xb1A\xb2\xe3\xc5\xde1\x0d\xd3N\xd3)\xd5\xdb\xe6\xae\x03\xa8P\xaa{\xd6\xc8\xbe`C?\xb3\x9b\x86w\xa5\xf4E\x1b)\xb6\x15O=d\xd9\x1br)\xab\xf4E\xd3:m\xa5*+\xb7\xcd\xca\xea\x9a\xafe\xd7w\xac\xddO\xe9&\xdam\xe5\xe4O\x98\xca(\xc7\xcc\xb5\x1c3\xd7\xac\xdc\xf5\xdc\x99bg\xbdU\xa6\xceq\xd9\xed\xb0o\x04\x13T!7\xf2y\x8b\xb2\x95b\xc4\xcd\xabr\xea\xb3\xec\xe5M)\xdc\xc4\xd9\xc0\xddP\xc0/\xcd\xed\xd9\x076\x13;\xa1\xac(\xd8\\\x7f\xf5Q[\xa9I\xc3\xb6p\x0f7\xfc\xcb\xca\x06\xe4\x83\x9c\xbe\x84/\xaaws\xa8\x8f\x88\xbd\xdftBk\x1e\xdb&N=\x11v\xe8\x18\xaf\xaf\xed\xb3\xc2/\x99\xf3\x0dZ^\xb6G\x9a\x1b\x00o\xb7\x97\x8f\xb7\xfc\xb7\xb7rO\xf3\xd6\xba\xe8\xb0b\xdem\xe3\xac\xdf\x9c\xcd\xaaz\x9e\x97\xb7\xc5=l\xd6s[\x84\xa2\xb4kU'X\x0c'\xaat'\x12\x95\xd4>\xd9\xc9\xde\xca\xa9I\xaeh\xd3\xbd\xd7\xcb\xaa\xbd\xd8X\x82\xc7\xbd\xa3\x06\xb9\xf1:\xfb\x7f\xcf\x9e\xbd\xb9zuq}qv\xf9\xe6\xc5U\xd8\x0el\xfa\xf2\xcbWW\xd7\x17o\xcc\x9b\x18\xe7\x8b\x97o\x9e=;\xbb\xbc\x0c\x7f\xf1\xa7\xd3\xf3\x17o.\xce,M9\xdd6\x85UV\xe1\xa8\xfbsr8\x16r\xccR\xee\x8f\x91\x02LG\x91\x82\xeb\xf7RB\xe3\xa5\x9c\xcaZ#i\xd6\x8eNC\xea\xb8)\xf0\xc7NAD\xfc\x94\xbb\x02Y\xbbD\xc7PqiS\xc4QAd,\x95S!7.:\x9e\nv\x8f\xa9\x82\xe0\xb8*\xa7*\x15\xef\x11\x14[\x05\xa9\xe3\xab 0\xc6\nB\xe3\xac\xdc=\xbb\x8b\xc1\xc2\xc6ZA\xeax+\xc0\xc5\\A\xca\xb8+\xd89\xf6\n\xe2\xe2\xaf U\x0c\x16D\xc5a\xb9\x87\x83\xc6\xe0|\xe3f/\xf1X\xb0\xc7\x98,\xd8O\\\x16\x04\xc6fA\\|\x96o\nnQ1Z\x906N\x0b\x02b\xb5\x00\x82\xe3\xb5 \"f\x0b1e>F\xc4mA\x8a\xd8-\xf0\xc5o\x01~{\x86\x88\xe3\x82\xc0]\\p<\x97S\x9b\x88\xf5B\xc4tA@)\x13\xc6vAP|\x17\xa4\x8e\xf1\x82\xc88/w\xbfj\xfc\xb1^\x10\x1f\xefe\xd5\xc7\xbf\xe8\x8b\xf9\x82dq_\x80\x0f_\x02L\xfc\x17\x84\xc5\x80\x81/h#2\x16\x0c\x10z\x1d\xbc\xf0Dqa\x10e\\||\x18 j\x19\x11'\x06\xb1\xb1b\xe0\xb6j\xba\x981\xc0\xc7\x8d\x012v\x0c\xd0\xf1c\x80\xb3zx\x1c\x19\x04\xc5\x92\x813\x9e\x0cR\xc5\x94Ah\\\x19\xec\x18[\x06\x08\xf3\x06\xc4\x98\xc1>\xe2\xcc\x00SF\xc7HH\x17s\x06\x98\xb83\xd8!\xf6\xcc\xaa\xb0\x15\xcc3{\xfc\x19\xa4\x8eA\x03o\x1c\x1a\xc4\xc6\xa2Y\xb5\xc93\xaa\xfb\xb8\x8e\x88I\x03g\xe8\x0c8c\xd3 *>\xcd\xaa\xca\x19\xb7\x06\xb1\xb1kVmr\x1f\xe8\xf0\x9a\xa5\x8ba\x03T\x1c\x1bD\xc4\xb2AX<\x1b\xc4\xc4\xb4Ap\\\x1bxV[O\xac\x11\x04\xc4\x1bac\xdc &\xce\x0dBc\xdd\xc0]\xf1\x98\x987\xab\xb2AD\x19v\xc8\xe0b\xdf\x9c\x03\xa2\xbcu\xc7\xbfA\xda\x188\xf0\xc5\xc1\x81;\x16\xce\xfaNl\x8c\x1c$\xec\xbb\x01\xb1r\x10\x14/\x07\x83\x98\xb9\xb1\xe0N\xe0\x1a\x00\x93\x1c\xd4\"o\x84[\xfbm3\x7fw\xfcKs\xfbV\xf9\xca\xbb~#a\xeb\xb93\xe9f\x0f^\x8b$\xa0\x13\xcf\xc9\xa8X\"\xe6@\xb3\xfc\xcd\x99\"\xbbh\x02\xba\xce\xbf\x17\xca\nIY!{\xa1\xac\x90\x94\x15\xb2\x97\xa4\xa8e\x08b\x19\x84VRV\xc8]\x91\xc9\x08T2 \"\x19\x8eFRV\xc8]\xd0\xc7\x10\xe41\x02u\xa4\xac\x90\x94\x15\x92\xb2BbQ\xc3\xa4\x88a\x0cZHY!m\x8fyQ\xc1\x00D\x10\x93\xf30\x04 \xa4\xac\x90\x94\x15\x12\x83\xeaQVH!\xbb w\x94\x15\xd2\xa4\xc9\x8b\xce\xc5\"s\xd6\xb5\x81\xb2Bn\x0be\x85\x8c@\xd4\xfchZ(\x92\x16\x80\xa2\x05#ha\xe8\x19e\x85\x0cC\xc8(+d'\x94\x15RI\x97\xd3\xabON5\xd0cL\xc0tm\xb9`\xb6\x8f\xbb\x1cNE;'\x88\xb4\xa4\xfb\x08N\xc0\xd5\x8c3p\x9d\x88HK\xa9\xc1\x94\x87kpn\xbe\xe2O^\xc8\x98E\x99\x96L\xcd\xbc\xc2#\xdd\x073f\xc34\x11\xe3\xd8F\x18F\xf17-\x1f.y9\x0e1\xe5#\x8b\x95\xd2\xfd$/\xf3\x9bU\xab\xf5\xa6ez\x04\x08\xe7\x93\xfc\xe8@U\xd6\xb2A\xe8\xbc\x1c7\xd2\xc1RV\xc2\xef B.\x8f\xe1\x95\xa2\xc0\x0b'\xce2+\xe7G|\x976)\xa3|x\xa0O\x14)o\xa1\xc9WkQ\xd7\xbe\xf6\xa6\x80UY\x1eh\xda\xaa\xee3\xb7u\xca\xfa\x0f\xb5\x0d+\x16\xba\x97lg.\x1b\x18\\=s\xb0\xc9\xcb\x06\xbdh(\xa3\xb2\xc8~2\xbc\xe6\xb2\x96\x17\x0d\xf2}\x1a\xffm{\xe9\xb6\x96\x04\xbc\x10\xa0'\x7f\x81\xd7\xf9\x950o\x01\"gAXq\x12\xe4*p\xe7)\x08+\xce.\xf9 \xb0\xb9 \x82K\x14\x9d\x93`\x9b[0\x18\x87fz\xc1xf$\x86\x81\x16b\x18\x10\xc3\xa0\x17b\x18\x10\xc3\xa0\x17b\x18\xb4\xc400\x0b1\x0c\xb4\x10\xc3\x80\x18\x06\xc40@\xee\x92\x88a\xd0 1\x0c\x86B\x0c\x03b\x18\x18\x84\x18\x06\xc6g\x88a@\x0c\x03\x8b\x10\xc3\x80\x18\x06\xc40 \x86\xc1@R\xa0\xbd\xc40\x10B\x0c\x03b\x18x\x18\x06\xf2b\xa4Cg\x18\\\xdf\xdc_\x0f\xaf\x149\xf9\xa8\xee\xd8q\xdc\xf758=\xeb`\xdd\xe6\xc7{y\x81\x97\xbc\x0cD_\x04\xd6\xdf\xff\xd1\xe5 \xdc\xbe|\xa9S&\xef\x7f\x19_\xb74B\xda\xcd_SO\x1e,\xde\xde\x19\xe10\xb00\xdbUaA. \xc756\x13+G^\x18\x16re\x18\xaa\xe4\x18\xff\x0f\xa4\xbd8\xccuu\x98\xef\xf2\xb0\xa4uJy\x85\x98\xfb\x121\xef5b\xee>/\xc5\x99e;\xdc0]\x89v\xbcN\x0cq\xa1\x18\xaap\xb8\xab\x0f\xf0\xad\x1bu\xb1\x98U\xdb\xfb\xacq_-\x86\xba\\,\xc8\x10\xf8\xc9\xc4;n\x91\x17b\xb9\xa0\xef\x8e\xf2\x85\xb8\x0b+\xd55R!W\x8d}.\xd3&\xb9r,\xf6\xd2\xb1\xc8k\xc7\xac\xda\x16u\xb5\xc2^<\x96\xfc\xea\xb1t\xbd\xc6u\xfd\x18\xbe}S^A\x96\xec\x122T7w\xdd\x87\x11w\x15Y\xcced\x11\xd7\x91E\\H\x16~%Y\xf8\xa5d\x10{-\x19\xfeb2|\xb7\x8c\xb9\x9c\xcc>\x84\xab\x965\xe0\xbb\x9e,\xf0\x822\xfb\x88\xea/.\xf3^Q\x96\xf4\x92\xb2\xa0k\xca\x02/*\xf3\x9e<\x00q\xfa\x00?\xddW\nb\xf4CZ\xea\xaf\x14\x04\x01XJL\x01\x13\x90\x81\xa5\xf8\xaf.\x8b+\xe0.\xf4`)X\x92\xb0\x94\xc82F\x13\x86\xb5 \xaf1C\x150\xf5~>\xe9uf\xc8\x0b\xcd\"\xae4\xb3jR9\xe3\xd0\x97\x9a\xa5\xbc\xd6,\xf0b\xb3\xd4W\x9ba/7C_o\x86\xbc\xe0\x0c\xdf\xb9\xd2]r\x16\x7f\xcd\x19jT\xa1\xb7va\xf7\x7fy_w_w\xb6\xc3\x85g\xd1W\x9e\x996e\xa1\x95\xd6Y\x1f\xf7\xec\x94qn\x0dp\x9b\x03?Y\xbf\x7f\n\xb1r\xe0G\x86\x94P\xfa\xbeG]kdq9H\x0dB\x82\xa9\xfc\x1e}Y\xeb#\xf4K \xa5\xf5\xfb\xaa\x11z!Z\"\x8a\xbf\x94`\xa2\xbfG\x9f\x08\x03\x08\xa0\xfbK\xd9\x91\xf4/%\x8c\xfa\xef\xabG\xe4\xe5h\xe1a\x00\x1eu\xfc\x84\x15\x12\x0c %($\xc0\xd7\xdf\xbb\x80\x01l`\x80\x94\xe0\xf0\x00\xdf\xf8l0A\x02R\x92\x85\nhu\xbb\x04\x0cH\x89\x08\x1b\x90\x92$x@Jx\x08\x81o\x98\xe0/M\xdbK8\x81\x94}\x05\x15H\xd9Ch\x81\x94\x90\x00\x03)\xe80\x03\xdfP\x1a\x04!\x88\xbe\xec\x0f6\x90\x920\xe4@\n6\xf0@J\x1b\x16~ %4\x08\xc17\xad\x05]\xa5\x96 A\x8a\xf7:\xb5\x80\xcd\x1e\"DAJ\xd8\xae08\\\xc1\xd7K\x03.V\x0b)k\xc2\x00\x06)\xf80\x06)I\x83\x19\xa4\xc4\x844\xf8z\x1b\xf2\x92\xb5\xb8\xf0\x06\xb7\xba\x16y\xd1Z\xaaP\x07)H\xce\xbe\x14o\xd8\x83\x94\x80\xe0\x07)\xde\xbb\x8b\xa2\x02!\xa4\xf8u;/-I\x14\x1a!%\xc6\xd8\xf80 )\xfe\xfaF\x84LH\x89\n\x9c\x90\xe2\xbe\x18&Y\x10\x85\x14d(\x85\x14L@E\xf7$\"\xacB\n\xaa\x15\xc2C,\xa4\xe0\x03-\xa4\xb8\xafeK\x14t!%(\xf4B\xca.\x01\x18R\xfc\xc6\x0e\x08\xc6\x90\x92<$C\n\xa2\xa4\xce\x91\x92.HC\x8a7TCJL\xc0\x86C\x9d\xf6\xa5\xfb\xaek\x8b\x0b\xdep\xa8k\xb5\xcf\xcaye[d \x87C\x1f\xe6\xda6TP\x87\x14\xf7\xedO\xbe\xcb\xdbb\xc2<\x1c\xca\xbc\x17\xb8E\x86\x818\xf4y/qK\x19\x12\"\xc5\x1f\x18\"%4\xd6Lt\x84\xb2\x82UU3\x0d\xaa\x98\xc6\x7f[\xb5\x99\x05\xccG\x1b\xd3\xc1co\xf3\xb6`\x8e\x99O|^XQ\xfcG\xb9\xd1S\x88N%5\x80\x0cl\xf5\x1d\x1aZ0\xce\xae\x852\xdb\xea\"b(X{\x04y\xdb\xf4\x94\x98M);\xf3\\\xfa\xeb\xdf\xe7\xcd\xb8\x7f\xb8\xe7\xc9\xd1\xcd\x99\xe3\x00\xb8I\xa2K\xd3\x8b\xdd\xad\x9a\xe38=J\x80\xd9\x0b%\xc0\x0c\x88\xa9\xa2\x04\x98aL\x19J\x80\xb9;\x17&\x8c\x05C 0\xcd\nq<\x97`\x86\x0b%\xc0\xdc\x85\xc3\x12\xce^\xa1\x04\x98\xbb\xb0TB\xf8)hf\n%\xc0\xa4\x04\x98\xe8]R0\xa3\x84\x12`\xa28#1l\x11J\x80i{\xcc\xcb\x04 \xe0\x80`\xd2;\x86\xf0>(\x01&%\xc0\xc405(\x01\xa6\x90]\xf8\x17\x94\x00\xd3\xa4\xc9\xcb\xaa\x88\xe1SP\x02\xcc\xa1 \xb8\x12\x94\x003\x82\xed\xe0\xe79\x842\x1c\x02\xb8\x0d\xc1\xac\x860>\x03%\xc0\x0cc)P\x02\xccN(\x01\xa6\x12\x9d\x00S%H\x1b\xe8p\x9d\"\xfd\xd9\xf2\xda.\x01\xd7Z\x03P2\xf1\xc9\x04\xb9\xec\xa0\xe5\xe1\xf4\xb5s\xd2\xcc.\xadg\x87#\x1f\xbfc\xf7\xb6\xcaM\x90Y\x05\xc5fja\x90\xd7J\xca\x1b#%:\xa8\xe0\xaf\x0e\xb7\x15\x0e\xae\xdb\x89'H\x00\xb1|2\xf3a\xb1\xaf\xf82^\x95\xe2\x04\\-\x16\x82VP\xc3\xb8\xb80p\xd07\xac\x9d\xda\xeaw\x95\xfcSKo\xacEV4^kY\xdc\x1d\x06#\xca\xf2!;\x89\xaa\x8c0e\xb9Y\xb1:\x9f\xe9\xbf\x899d\x96\x95\xbc>\xd2\xd7\xb3d\xa56\xfc\xa6\xec\xdck\x93M\xb5\xcc\xc9#\xb2Wt&\x94\x0e\xa9M\xc3M\xfd\x8e\x05\xdas\xac~\xcf\xc6\x9d \xdb\x06\xf3\x16\xf9*\xc7ZW<\xdb\xe5\x0b\xb1\x00\xde\xd2\xf5:\xec\xc1\x8aK\xd1_^*e-\x1d-\xc3?\x9d/\xa0`\x8bV\x13\x04\x14c@o\x85\x85\xd7X\x0e\x10\xf9\x11n\xe7\x9b{\x99H)[\xaf?\xa3\x15\x87\xb0}\xff\xbe\xcb\x96\x837Dn\x12&\xea\xc7'\x1a\xe0\xff\x91\x97\xf3|\x96\xb5\xac\xc3\x8ft\xfa\x0c\xfe\xa0!\xa2\xd9\xe8f\xf2+\x1d\x807i1\x01\x07\x0f\xfc\xca|A\x1a\xb1`F\xca\xde\x9cOs\xceM\xaa \xce\x065k\x14p/\x86W?\x1e\xf9\x90\xd3\x19\xae\xf2\xdb\xb2\xaa'^y=\x1a\xc7\x9f\x90\x96\xd9\xb5ao\xaa\xaa`\x03*\x97\xa1\x01kv\xc7\xea\xd1\xab\xae\xc6SOO\x1b.\x1f\xd0>jf\x1e #=\xfc\x1b\xac\x14xeU\xcfY=u\xcb]\xe6\xe5\x8c=\x05\x99_\xf9I3\x7f\x07_\x1f\x7f\xf7\x97\xa4\xd6@'u\xbe\xabZv}s\x7f\xadW\xcfk\xfe\x87zr\x87\xf4G\xf1GGv\xe7_\xab\x96\xfd\xd81M\xf8\xbf\xea.\x9fs&\xb3\xa1\xc9\x93\xb2\xa4\xbf Xh.\xfe\xde\x01\\\xa3\xa4\xcd\x06}\x0f\xb4\x19\x0e4c3\xaf\x8c\x87\xa2&\xec\xa0\xe6Y\xf1\xdf\x03\x0e\xdc\xc0\xde\xdb\xb6\xe9\xc5Z0\xf0\x12:\x06_\xd8\x1f\xb1\xcaH\xff\x03\xd35\xea\xad'\x99\xb30@dA\xb7\xac^{\xf6\x97\x16k\xebl\x0f\xe6b\x8c\xbe\"\x1f\x1c\xb6n\xfd\xb0\x81\xd9\xb2\xcagLC\xca\xae\xea\"j\xe5\xcan\xf4\x04~}uuv\xfd\xea\xf5\xd5\xf9\xab\x97\xde\xcc>\xd3\xe7\xffqfK@4~\xee\xf4\xc7\xcb\xab\xd3s[\x9e\xa3\xf1\xb3/_!\x1f\x13\xe9%\xaf\x7f=\xbb2\xbf\xd0\xe51\xc2W\xd0\x9d%\xdbkg\x0c\xe8\x956?6\xef.\xa6N\xe1\xcd\x1d\xed\xad\x0b.\xcf\xdc\xa8\xc6\x93\xd4\xd0\xed(\x89\xdc{yw\xbf\x9e\xbf\xecy\x9f\x11\xc4D\xc3$o\xbe~\xdb\xbe\x1ah!Nb/\xc4I$Nb/\xc4I$Nb/\xc4Il\x89\x93h\x16\xe2$j!N\"q\x12\x89\x93\x88\xdc%\x11'\xb1\x13\xe2$\x0e\x858\x89\xc4I4\x08q\x12\x8d\xcf\x10'\x918\x89\x16!N\"q\x12\x89\x93H\x9c\xc4\x81\xa4\xe0\x87\x11'Q\x08q\x12\xbf\x04N\xe2\x00\xfb\x1e\xe81\x82\xd5\xdb\x97rK\xbc\xfa\xd3^\xca\xdd\x17\xfdn\x02w\x99\xb1\xed\xc1\xbdI\xf2o\x13\xa0;a\x99\x83\xa8%\xcd\x90[2f\x95\xb8\xd9$M\x0f\xf89\x98$V\xf2\xc8\xe0\xf5\x07\xba\x8a\x07L\x1c9\x10t\xcdK\x11 \xf2.\xe1\xef\x91\xdd\x89(\xe2\xa4\x8a\xa0\n\x9c\x8e.\xe2&\x8c$\xa7\x8c\xa0j\xe7\xbb\x14\x0b\xcf\xab0\xbda\xa7\x8e\x84\x91G\xd0\xf4\x91`\x02I\x14\x85\xc4G\"AY\x1e\xe3\xa9\x84\xc4T\x12;\x99\x04A'A\xd5\nG)\xc1\xd7>\x8co\xe2Qc\xb9\x12oT\x16\xbe>\x0c/.V\xcb\x8aL\xeb\x87\xccl'\xaf\x86\xd5Y\xedtb\xc4\xbb\xee\xc2\xd8-R\xdfT\x1f\xe5\xb5\x13\xe2\x8a\x9e\xe8\x85\xf2\xda\x01n]\xfd\x92\xf2\xdaM\xb6yv\xea\xd8p+\xa9\x07\xc9DaK\xb41\xa2\x8d\xa5Y\xcc\x896F\xb41\xb3\x10mL\x08\xd1\xc6\xb6\x85hcD\x1b\xb3 \xd1\xc6\x886&\x84hcD\x1b#\xda\x18\xd1\xc6\xa4\x10m\x8chcD\x1b#\xda\x98M\x886F\xb41\xa2\x8d\x11ml )(F(kbi)\xee2\x88\x0e2h\x85)\x9bgD\xdd\xd1\x850\xe98\x19v\x0d\xe9% \xa6\x0f1}\xac0\xd7\x1e@2\xd7\x11C\x0d\x0d[\x07\xd4G \xd5\xebo\xd8l\xf9\x97o\xa7\x14s\xfdP[\xf1\xb9Q:_\xd4\x847\xd0\xbb\xe3\xd1#v\x06oN>v\x7f\x16\xee\x0b\xd7,\xae\x1fTc\xb6\xe9\x039\xf4\x1f\xaa\x122E\x99\xedg\"\xaeV\xe9\x1a\xcf\xe2S}\x0ft\xbd\x0ft.\xd7\xd5L:\x96,\xddU\xd1@5\x1fyrh\xd5\xc4 A\x90\xe8,\xdd\xc8-\xb8\x98\xe9\x87V\xd7\xb2\x0bay@\xe0\x19\xfes>\xc7>\x1a\xa0\xdd\xfc<\xf4X\x1e\xa2y\x0f\x97\xafz\xa9q\xea\xc7?\x99\xdf\xdc\xcd\xb0\x81\xfd{\xcf\xa7\x07R\xf2\x9e\xefe\xfb?\x15\x9f\x87\x9b\xbc\xe7\xe4='\xef\xb9\x12\xf2\x9e\xa3F:y\xcf\xb7t\x91\xf7\xdc\xd2s\xc8{\x0e_\xb2\xf7\xdc\xc3\xe5F\xf9\xd4M\x1az\x0e7\xb9\xd9\x81\xdc\xec\xe4f\x1f\xfc\xe0t@\x13\x9b\x9c\xfc\xe2\xe4\x17\xdf\xd5\xa3K~\xf1\x14V$\xbf8\xf9\xc5\xbf4\xbfx\x83I\xdea\xf2\x887Q.\xf1a\x86v\xbdm\xdf\xf2\xda\x9a\xfd\xe0\x7f\x94\xd8\xf0\xa0}-\x11\xc8\xc9\x05N.pr\x81{\x1f'\x178\xb9\xc0GB.pr\x81O\x85\\\xe0\xfdOXc\x92\x0b|\xec\x02O\x91\xc7\x84\x12\x98\x08!'89\xc1\xb5\x90\xb79\xdc\xc7A\xdef\xf26\x93\xb7\xb9\x17\xf26\x93\xb7\xf9\x0f\xe9m\x16\xeb\xb2z\xc5\xe4_~-~\xef\x1c\xca\xf2\xf1\xce\xbb\xd93+\xaa\xf9\xa6\xe8\xb6\x83f/\xb1T\xf5@W\xeb@]\xc5C\x83\x0cerf\x15f\x98\x84\x95\xa9\x0d\x8e\xb6\xce\xd8&\xbd\xecpJ]e\x1f\xae\xc5\x94y]\xb0\xf2\xb6]\xba\x0eX\xb6\xad/\x8c\xb7\xbf\xee\x03\xd6*\xfb\x90\xaf6+\x90\x9f\xe35\x13\x0e\">w\x17E\xf5^\\\x9dR:=A\x88\x03\x8e\xec\x18\xa8\xc3\x8d:\xce\xa8^y\xf1\xfa\xd9D\x1f\x1dn\xe8p\xf3\xe9\x0f7\x98Yw\x95\xd5\xefX\xad\x92;\xb3\xa6\x99Ue[W\xc5\xc9\xc7|\xee\x80\xf7\xba\xc3\x0d\xc8\xb7\xa0f\xb3\xaa\x9eK8o\xea\xac\x9bf\xe1g\xcd\xc1\xcf\xb6{I\xda\x1c\xdd\xb7v\xf5V\xafY\xbd\xca\x9b&\xafJ\x8f\x0es\xb5\xa4X+'\xc5[\x08\xf0bA\x02\x94x\xf6\xec\xec\xf2\x12\x01,\x8c\x1e\xff\xc5\x85\xa3\x0c\x9e\xfb\xf1\xcd\x85\x1d\xf9\x19<\xf7\xfc\xec\xf5\xab\xcbs\x94\xca\xdf\xce\xaf\xfe\xfe\xfc\xe2\xf47\xcc\xb3\xcf\xcf^\x9c]\x9da\x9e<}\xfe\xcb9\xaa\xa4W\x17\xa7//\x7f:\xbb\xb0>\xdbC7x\xcb\xba\xd7\xc6\xa1\xc8\xd1<\xdap\xcc\xf3\xc5\x82\xd5\xe2\xfcz\xbf\x96\xd9\xc5\x07\xfdO\x9c4\x1c\n3\x90\x13\x92\xbe\xdb\xb8\x81\xdb:+[\xe1n\xa8\xc4\xd4\xa2/\xe0r(1\xf6#\x93\x05z\xcf>\x94\xd5\x93j-.\xfbR>~\x1b\xe49\xfe\x00\xefyO\x87\xff\xe8\xd8\x87\xeajxq\xca\x9a\xd5,S\xf7W\xf2z\xf1c\xfc\xa2\xab*\xea;\xbc\xe7>\x1d\xfe\xc3\xf0\x9d93~G\xec\xf9\xa4Q\xa53aV\xe5%,Y!\xee\x07\xed\x7f\xc5UX\x0d\x8d\xa7\x93\x7f\x1b\x8a\xc3\xcf,]s\xd6Lt\x8a\x998\xaf\x88\x9b\xe7\xd5\x0f\xea\xe4\xbebm&.\x86if\x15\xef5r\x93\x8a*\x91\x1e\x81O\xa7\x7f0\x94\xa9f\xab\xea\x8em\x15\xaa1\x94jQW\xab\xadbU\xae\xd6j\xeb\xacl\x16\xac\x96\x06\x16\xef\x0fu\x0e\xaet\xc8J\xe1uw\x8d\x03\xf90\xb6M\xf8\xbc\xf2t\xfcOC\xedE\xdd\xf5\xd5vl~\x04\x8b\xbcTw\x90\x8b\x95\xbc\xcd{\xdb\xe4\xa5\xbcr\x10f|\x9bP\x14l\x0eM\x9b\xb5\xec\x18\xae\x96\xb9\xfdj~\xd0\x1b\x82\xach\xd4f\xbc\x19\xa8\x90\xca\xb5\xfbF\xfck>!\xe4Ne\xce\n\xc6\xc7#\xca\x12b\xde|:\xfa\x97\xc1\x0e\xd9|\xae\x8b)f\x97F\xefd\xc4\x9a\x0f\xaa\xe2\x1aPT\x06\x19Lb\xb8V\xd1S\xf3\xd3\xe9\x1f\x8cS\xc4]\xf5\x8e\xb7M\xc3\xcay\xbfaR\x03v0\x82\xe5\xb8\xe0\xaf,\xb2\x19\x7f=k\x19\xb0\x0f\xb3eV\xdeZY\x1a .\x88\xcd\x9bn\xb3\x96\xdf.\xdb\xce\x99\xa2fZ\xde J\xb88\xbb\xbc\xba8\x7fv\xe5\\wU+\x9a>\x87Y:\xe4\xa2\xf13\xb7|\x8f\xf4\x8ak;\xab\xa2`\xe2\xbe\xf9\xe9\xaa\xa1P`\xa3:\xeds\x17\x882+\xd8\xad\xbc\x97~<\xe8\xd4\xb6v\\d\xc4\x19P\x96\x15u\x064\xbd~\xf2\x8b(\x86Z&\xe9\x14H\xa7@\xef.\x193\x82\xb8\x9c\xc2\x9b\x8b\x17'5k\xaaM=\xd31\x0e\xcb\xac\x85M\x99\xff\xbea\xc5=\xe4sV\xb6\xf9\"\x1f\xd3i\xac\n\xc5\xae\xa1\xbb\xde\xd9\xbe\xbf\x12\xb7\xb7\xce\xaa\x02n6|\xa7\xa7\x1bM.\x0c\x9a~\xb8\xda4\xad\xe6 \x82c\xc7W\xb0\xaci\xed\xdf\xaaJ\x06_\x9d|\x05\xb3eVg\xb3\x96\xd5\xc7\x82q#.\xf3n\xd8\xed\x8a\xf5~\xe77\x17/\x1e6Spm,\xa2P\xdd\x8d\xbe\xf6\xaf\xb6\x86{\xc6\x85}\xb5\x8b\x9b[\xf2Q\xd6@n\xb9\xd6\x9a\xcb[^\x14\xeb\x8d\xb7o\x1f\xcb\x9a\x08\xb5=\x04\x96\xdb\x97\xb9\x8c/\xa3U\x99\xcf\xb2B\x8c!\xfb\x97\x1f\xb1\xe3\xdb\xe3#nZ\xe1\xf3\xfd\xea\xf8+>o\x95U+\xe6\xffu\xcb\xe6\x8f\xa7.\xe0\xa1\x9c\x97\xb0\xe6\xc6\xceg\xec\x08Z\x96\xad\x1a\xd84\x9b\x8c\x9bc\xcd\x8f\xf9\xabu^\xb0~\x7fp\x93\x97Ym;4\x02\xdf\x02\xa8\x83\x80\xc6\x18\xee\xed\x9f\x96s\x1d\xe4b\x93\xb4\xe1\xf3\xad\xdc\x1d\xf2\x8e\xc4>\x88\xa6>-\xef\x8f\xe1\xef\xd5{v\xc7\xea#\xe7\xd6\xe1\xcd\xc5\x8bF\xdd\xaf\xac.\x8f\xb7\x7fX\xcc\xa0\x0c\xde.\xdbv\xfd\xf6H\xfe\x7f\xf3\xf6\x88o\x8b\xcaJ\xfdz$z\xe3l@\x02*\xec\xd5\xe6\x9b\xdf\xcdZ1\xa0\x1c\xdfe\xf5\x9d\xb8\xb4^\xa4\xc9^7\xb2k\x89\x92\xf3\xfd\x9a\xba\xa8Y\x9cR\xc4=\xd0\x0dd\xf6\xbd\xd7\xa2\x12\xdb\xad\xa7\x8e\xb6\xfd\x178_\xf45\xe2\xddB\xa7\xe2\xee*-`\xcd\xa6\xd9\xac\xd8\xdcq\xc8\xfa\x17\xbe8\xfd\xfd\xea\xea5\xfc|v\xc57\x0ej\x08\xca1&.\xc6\x073\xb7\x8b\xcb\xd6\xcd\xd3W\xf7k\xf6\x1f\xff\xfd?\xac/t\x97\x17\x96\xaa\xbf\xa9eD\xb4\xd0\xba\xae\xe6\x9b\x19\xe3\xa7C\xb1\x84\xd9\xb7A\xff\x02\xa7\xebu\x91\xcf2e\xcb\x9a\xc9-\xaad0\xcd\xb2\x19\x9f[\xaa\xea\xddf\xddA,7Yc\xbc\xffPJ\xe5\xa6\"\x8aN(\xca(\xee\xdcj\x97l5\x18Cs9\x882]%\xfe\xdfwU>\x1fQ\xde\xb7E\x16PL\x1f5[T5;\xd2\n\xb8\xde\xac\xcd\xd5\xb6\xb2dl\xaew\xdab\xca\xab\xef\x1c5\x11u\x91\xdbH\xb9\x03\xe6c\xf6\x18\x1e\xbdi\x18\xdc\xb1\x9ao\xc3\xb8\x95x\xf7\x14\xc9\xe7D\xff\xcc\xca\xec\xd6U\xfb\x9b\x9ae\xef\xc4\x91S*>~l\xefQ/\xab\x96=\x95\x07\xa6\xc5\xa6\x9c\xc9\x11\xc6\xeb\xa1\xe6\xae\xd9\xa6\xae\x05\xb1`\xc8\x91\xb2O\x97\xbc?V\x02J\xb7S\xa3\xd4Zv\xb3Y@\xcd\xf8J\xc4\x8e\xc4%\xf2\x12~\xe6\x1f\x15\x10\xbe\xd8\xdf\xe9qiU%\x88\x12\x82o\xcf7\xab\x8e\xc5e\xfb^t\xd7l|)Fj#iZ\x92\x120\x99\xa5\xe0\x91\xc2 $\x9e-\x87\xf6c\xfb\"(6\xff7\x8eII\xf2\x16\xf8\x8e;_\xad\x0b\xb6\xean\xbfW\xf7\xac\xce\xa0a\xab\xacl\xf3\x99\xe5$\xb4\x07W\xf6T\xb0\xbb\xa4_\xf8tt\xc3$\xa4\x9f\xcf\x07\x1b\x9c\xad}\x8c\x06\x0fo\xaa;{\x9f\xee\xaf\x9am-\xb4xL\xc9\xde\x9e\x96\xf7o\xf5\xf6H\xf0J\xb3\xfa&ok>\x88\xed%4\xaa\xd2kDVT\xaa\xebAfnZ>;\x8b\x85F\x96\xf0\xc6\xc0\xb2\x1e|[\xef\xea,]\xf3\xb5\x1e8E~#\x8a\xad\xd6\x91F\x1f'\xf9\xfc\xb0\xcef\xefN6%\xff?\xben\x9b \xb9R\xd4Bo\xdf\xd8T\x0b\xd8\xb4rb\xd3\xd3C#\xbc\x16\xf3y.\xe7\n\xb8e%?7\x8b\xc2\xf3\x83\x96F<\x8d\xfaxyd\x13\x9a\xbfw\xf6!\xe3\x9d\x1f\xbey\n\xafy\xf9\xf9\xbc\xa0\xaa\x92uF\xcfKx\xf6_\xff\xabc\x99\xfc\xa9\xaa`QU\xf0\x03\x1c\x1f\x1f\xff\x1f\xd6\xc7xa\xb2\xf2\xde\xfe@V\xde\x1f\xf3b\xfcTW\xabG\x8b\xaazl\x7f\xf4\xf8\xd8\xbe\xfe\xe5\x0bx\xc4U\xbd\x11\x15\xb9\xaa\x1e\xfd\x17\xae\xeb1|t\xcc\xe1.}\xff\xe9\xb6\xdd\xb7\x1e\xdb\xfd\xb7\xec.Kf<\xf8A\xec\x0d\xf9W\x12X(o\x1e\xfdTU\xc7\xb3\"k\x1a\x8f\x81d\x11\xf9K\xb2\x8e\x83\x17\xede\xb0X\xae3\xdd_<\xa6{}\xdf.\xab\xd2a\xbb8\x7f}\xf5\xea\xe2\xb1\x0b\x0c\xea;\xaa\xfb\xc3\xf2\xd3ns~\xe71\xe7\xcf\x95\x03O\xe0\xa6|\xfa\x03\xfc\x97\xf5\xcd\xf1OU\xf5\xf1\xf8\xf8\xf8?\xed\x0fg\xe5\xfd\x11\xdf\x86\xf27\xd6r\x13\xf5KV7\xcb\xac\xe0FvW\xc4e\xc2i)\x1cE\xc8\x17\x93\x02\xbc)W}\x11D\x01\xc5\x00\x11O\xfdo?@\x99\x17\xce\x0e\xee.\x97\xa5'_ \xee\xc9\xec]7\x17ww\xfe\xdc\xdc\xf7\xdb.\xbdzH\xaa\xbfy\xd7\xab\x89y\x9b\xc6\xb2gyh\xd8R\x9d\xf0\xf3\xfb\xb1\xf8\x81oW\x1fB6X\xed\xf8J\xc8{\x82mm\x90=\xc4\xfc\xb1ni)\x8b{}\xae\xdcr\x16t\xdbd\xc8\x16-3y\x07\xa5\x08?\xc6\xc3\x93\x87\xe6O\xa95Q\x17Y\x9cv\x81\xa9\x1e\xfd\xd5\xa2\xaa\x8eo\xb2ZT\xf6\xc3\xc9\xfd\xf1?\xbf\x92V\x14g/\xa3>\xfbQT\x14\xf5+\xae\x83/\x87\xc6GD\xd0\x9c\xf1\x97\x1f~\xf8\xe1\x07{\x1f\xe0\xef\xf5>\x97L;w\xf96Vl\x82\xe4\xb9n\xd30\xedY\xbd\xdd\x14Ym\xd6\xb7\xad\x86\xbf2g\xfd\xb6\xe5\x08\xd8\xea\x86\xcd\xe7\xfd\x06\xe6Hn\xc7M\xea2\x8b\xf7f\xb0\xa5X\x88\x83\xec\xdb\xff\x9b\x9b\xee\xadr&t\xdb\xb6a\xe3\x98\x07\x88\x9a~\x9e:\x0e \xd9\xec\x1d\x9f\x83\xfa\x03\xf1\"/\x98}\xdd\xd0s\xd6kV7U\xe9\x1c\xb6\xca\x13\xb7\xc8\xeb\xa6\x15Wp\xc2\x0f\xf0\x8d]s\xf7\x02\xef\x94\xfa\xf9o\xc3W0\x00g\xa9\xbe\x12\xb6\xfc\xea)|e\x1a\xb5c3\x1c\xcbZ~u\xe4\xd2'\xea\xf72[q\x9d\xff\xa7\xac\xc2\xff\xe5|\x81\xd7o\xf2|h%\xcf\x17\xea\xc05\xeek\xb27\xe4\x0d\xbcgE\xf1\xe4]Y\xbd/\xc5<\xb3\xcc\x04\xba\xb1i\xdaj\x158\xb8\xc6]\xfeHn\xe0'\xe3\xa0\x8f\x93R\xc5\xe1\x1d\xd8r\xb8\xcad\x976\x7f\xec\xad\x18\x8c\xba\x9f\xcb\x18>\xe1~\x13%\x97C9/\xbb\xf1\xa1\x802\xb3*9d\xcc\xdf\x11E8\xee\x16\xe7G|^\xd3&\xdcr\x0di\x8f\xe9\x7f\xfc\xf7\xffx\xec\x18H)\xfa\xdc\xf8\x83\xeen'L\xc5U~s\xfc\xed7\xdf6_9\xba\x90\xfc\x7fW\xa4I>\x9c\xb0\xc7A&:n\xbf\x869+\xabUG8\xdc\xe2\x0e\xec\x18Z\x12\xcc\x15\xab6e+\xa0\xf1\x8f\xa2`X\xb2\x98\x0c\x99\xc9\xdal;\xc8S\xd6P\xbd=\"\x8du(\x1a\x7f\xfby\x1f5z\xb0\xfc1\x8b\x07\xc4\xe9\xfb\xd8\x0e\xc4\xef\x8d<\x8d1esi\xac\xf1\xb2c\x8b>\xd4H\xa6\xb6^<\x9c\xb9\xdd\x04\x84b\x12\x8ai\x10\x8c\x17\x0c\x08\xc5$\x14\xd3\xfa$\xa1\x98B\x08\xc5\xdc\x16B1 \xc5\xb4 \xa1\x98\x84b\n!\x14\x93PLB1 \xc5\x94B(&\xa1\x98\x84b\x12\x8ai\x13B1 \xc5$\x14\x93P\xcc\x81\xa4@\x94\x08\xc5\x14B(\xe6\x97\x80b\x0e\xe1;0\x01Z\xe2\x01\x9d\xf8\xa9\xad\x84\x0f\x086[\x19\xb5>\x1d\x8aY\x14v\xd4\xf2BdTj\x86\x99e\x8b\xa2\x0b`U\xbe\xc2\x9b\xa2\x9a\xbd\x9b-\xb3\xce\x853\xceuQ\x14\x12\xb9<\xf8|\x17\xaaZ\x04?\x11\xfcD\xf0\x93\x10\x82\x9f\x84\x10\xfc\xb4-\x04?\x11\xfcd\x13\x82\x9f\x08~\x12B\xf0\x13\xc1O\x04?\x11\xfc$\x85\xe0'\x82\x9f\x08~\"\xf8\xc9&\x04?\x11\xfcD\xf0\x13\xc1O\x03I\x01\x05\x10\xfc$\x84\xe0\xa7?\x0b\xfc\xa4\x85n\xf1\x1b\xc9\xa8\xcat\x8b\x1f\xca\x98t\x8b\x9f\x0c\x0b\xec0\xca\x1d\xa2\x02;\x1d\x94\xe2\x14(8\xd0\xeb\x9a\xc4x\xf7\x80\xd0YBg\xadO\x12:+\x84\xd0\xd9m!t\x96\xd0Y\x9b\x10:K\xe8\xac\x10Bg \x9d%t\x96\xd0Y)\x84\xce\x12:K\xe8,\xa1\xb36!t\x96\xd0YBg \x9d\x1dH\n\xa4\x8c\xd0Y!\x84\xce\xfeY\xd0YWp`\xd3f\xedfx0ra\x96\xaf4>+\xdf\xe2\xad\xb0\xc8\x8bV\\\xd9\xa9\xd0\xd9qa\x9e\xc0/\xa7\x17\xff~vq}yuz\xf5fr\xef\xab\xf5'x\x02oJ\xd1\x87O\xceKyx\x968\x16\\NKk\xf8\xc6\xeb\x8bW\xaf_]n\x7f@\xff\x1d\x9e\xc0y\x99\xb7yV\xf0\xf9t\x91\xdf*\xa3\xc3\x9a\xd5y5?\x82\xcdz./>\x94\xfe\xb9#h\xabw\xac\xd47\xb7\n\x87P\xcd\xf8a\xef\xd8]\x90\x9f\xce_\x9e\xbe8\xff\xff\xb6K\xd2\xfd\x00O\xe0\xd9\xa8\x08\xdd\xc5\x9fGP\xb3l.\xb3\xb3\xaa\x0f\x8b\x8fn]\xb89\xfd\xe8\xe9\xb3\xab\xf3_\xcf\xa6_\x94\x7f\x85'p)u\xe5\x8d\xae\xc3\x11\xd4\x9b\x82I\x87d.\xd0\xf6\xd9\xd4\xb70\xfd\xc4\xb3\xd3\x97\xcf\xce^\xbc\xd8\xaeW\xf7\x03\x7fE6\x18\x9f\x7fn\x18+\xfb\xbbF\x8f`\xcdJ\x81\x0e\xccY\xd3\xd6\xd5\xbd\xfbc\xcf\xcf.\xaf.^\xfdc\xfbc\xdd\x0f\xfd\xc7\x94\xa1\xc4\x9c'\xe6%VB\xcdf\x99\xfc\xac\xbe@\xb5\xe1\xcd\xde\xe4sV\x8bl\xad\xa2\x0c|\xe6*\xe7PV\xb0\xd8\xd4[W\xc0f\xea\xcc\xaf:\xc44.\xf6w\x15\xcc\xaa\xa5\x0f\x8c]dE\xe3\x89\x8c\x05\xe3\xf5\xdb\x8eq\xe3|N\xf7q\xe7C]\xf7s>%\xbb\x8c\xf3\x91\xae\xbd\x9dOu\x0d5\x9ad\xd4\xed\xd7\xfej\xea\x89\xaa\xa7\x84\x1c\xbfc\xf7\xc8 K\xb1*2\xb5\xd7\xabE\xec\xb0\xf0~+\xa0_!\xda\x1d\x05C\xf8\xaco'\xce]\xd1\xc0\xfa\xc2W\x17\xad\xe2\x15\xdf\x99W\xa5pjU\x8bE\xc3Z\xa8j\x18\x17\x17\x06\x98[\xc3\xda\xe4\x9d\xc9\xe8\xc14\x18Q\x96\xcff\xc7\x89\xf7PUF\x98\xb2\xdc\xacX\x9d\xcf\xf4\xdf\xc4\xb6`\x96\x95\xbc>\xd2}\xbbd\xa56\xfc\xa6\xec<\xe6\x93\xa5\xe1\\h+X\xd3\xf4&\x94>fy\xb7\xee;\x16h\xcf\xb1\xfa=\x1bwBR1\x98\xb7\xc8W9\xd6\xba\xe2YM\xef\xb0qW$\x9a2\xec\xc1\x8a\x0c\xb2)&,\x0b\xe9;\x1d\xfe\xe9|\x01\x05[\xb4\x9a\xeb\xa3\xc8?\xfat+\x80 9@\xe4G\xb8\x9do\xee\x81e\xb3%d\xeb\xad<\x00\x9f\xd0\x8aC\x06N\xff\xbe\xcb\x96\x837\xb8EE\x0f\xadD\x86\x02\x00q\xa1\xf3<\x9fe-\xeb aeA\xf1\xa0\xeaHCuy9+6\xf3\xc9\xd95\x93_\xe90\xf9I\x8b \x86\xc7\x00*\xe2k\xf8\x80\xd06\x99\\\xde\x9cO/\xcd\x9fTA\x1c\xf7k\xd6(.\x8e\x18^\xfdx\xe4C\xeeX\x8d\xa6\xfc\xb6\xac\xea \xd0\xa6G\xe3\xf8\x13\xd22\xbb6\xecMU\x15lp\xfb\xb3\xa1\x01kv\xc7\xea\xd1\xab\xae\xc6SOO\x1b.\x1f0\xb8jf\x1e #=\xfc\x1bj\x93Q\xd5sVO=\xed\x97y9cOaV5\xab\xaay\xd2\xcc\xdf\xc1\xd7\xc7\xdf\xfd%\xa95\xc22^H&\xd1\xc9\xc7|\x8e\xcb\xd7\x0f|\x8e,\xba\xdb\xc7o\xee\xd5-\x04\x12\x95\xa8Y\xa3\xf7\xc8\x86t\xfd\x0ftu\x0e:\xe7\x85\x8dT\x15\xc5\xf3l\x9d\xdc(/,\x88\xc1\xd5\x92\xb3\xa2p\x9c\xa8\x18F\x94\x9b\xf9\x14\xc5{\x12\x9f\xb0(\xf4\xb2\x9e\x12p\x9e\"\x19OV\x9e\x08\x8e\xef\xb4\x13\xdb)\x8a\xeb\xc4\x8f 6+\xe2\x98N1<'\x17\xfb\x00\xc5rJ\xccqB1\x9c\x12\xf2\x9b\xbc\xec\xa6D\xdc\xa6]\x98M\xc1\xbc\xa6\x04\xac\xa6\xc4\x9c&\x0f\xa3)9\x9fi?l\xa6\xe4\\&<\x93)\x8e\xc7\xe40\xba\x8f\xc5\x94\x8c\xc3\x84c0\x19\\\xa8\xf6\xf951{\xc9\xc7]\xda\x91\xb9\xe4\xe0-y\xb7'^\xce\x12n\xff\x92\x96\xaf\xe4c+\xf9\xcb\x14\xc7T\xd23\xbbA\xa1\x8f\xa7\x94\x90\xa5\xb4\x03G\xc9\xcc,t1\x94\xd2\xf2\x93\xdc\xec\xa4\x14\xdc$\x14\xb9\xc6\xc3KB\xb3\x92\xec\x04\x82pF\x92]\x97\x11\xacK\xc2E\n1\x16\x96\x87\xe4\xb7 \x9a\x83\x14\xc1@2\x03\x9b\x89\xd8G(\xee\x91\x9fy\x84\xe1\x1d9\xad\x18\xca9\xc22\x8el|\xa3\x04l\xa3\x00\xaeQ<\xd3\xc8\xc1\xe7\xc1\xb2\x8c\x12s\x8c\x1c%2\xf6\xd4(v\x91\xf6\xb5\x1a\xf4Y\xb8E\x89\x99Ev^Q,\xabHx\x04L\x057s\x8a\xd22\x8al\x07?/\x9b\xc8Fw\xb01\x89\xd2\xf2\x88\xe2YD\x16\xc6P\x14_\xc8\xcb\x0d\nc\x06\xa1yA\x81\xac\xa0\x10N\x90\x95\x11d/\x0d\x96\x99\x81c\x03\x05r\x81\x02\x98@\xc6\xaa\xa5e\x01\xd9\x06\xc5\x0e\x0c \xa3\x9f\xc2\xca\xff\x89c\xff\xb8\x98>\xe9y>\xbb\xf7$4\xc7\x07\xcb\xf0\x19/\x91\x88\xa0r \x00\xa0\x02\xcaU\x08\xf9/\xd3\xeb\x8c\xa1[2(\x98\x9c\x82\xc9)\x98\\ \x05\x93S0y/1 \x8bU\x19\x05\x93oK\"\xc0e7\xc8%\x02tI\x02\xbb$\x07^\xbc\xd0\xcb\x1e\xc0\x97}\xc1/{\x00`B \x98X\x10\xc69\x87\xfb`\x98\x84@\x0c\x16\x8a \x04c\x92\xc31~@fgH\x86\x82\xc9\xbd%\x8b\x83h\x8c\xaa(\x98<\x06\xac\xf1\xc15i\x00\x1b$\n\xe1\x05m\x02`\x1boPo tC\xc1\xe4\x14L\x8e\x01u\xbcV\x0d\x05v\xf0\xd0\x0e\x05\x93O$1\xd0C\xc1\xe4C\x89\x85}\x8c\xca(\x98<\x00\x04\xda\x05\x062\xaa\xa3`r\xe3\x0b(\xe0\x88\x82\xc9\xd3\xc1H\x14L\xbe3\xc8\x94\xa6\xcf\xa1\x81&<\xd4\x84\x0b&\xcf\x87\x13\xf6\xe8\x00)N\xa422\x85\x9fvT\xb4\x8a\xec~\xab)\xc6\xf4I/\x9b\xe5\xa5\xac\xde\xa3Cof\x15\x9f2\xab\x92\xef\xbbd\xf0M6\x13\x01[\xea\x95Q\xc0\xcd\x99\xd0\xfd@W\xe1@\x03n\xa4\x05\x0e\x03x\x12\x1d#\xda\xe5\x92\xadxKD\xbe\x8eqx<\xab\xf2A\xc2z\x95\x18@:+\xc6\xb7(\xf3\xe92+U\x81lg\xf3\x97\xaf\xae\xce\xe4\x0d\xcc\xf29\xb5L\xe7\xc2\x93r^\xb6j\x02\xeb\xbcW\xc3Y\xcc\xa8Pn\xea\xcc\x1fk\xf2\xdb2k75k\xba\xc1\xc4\xb7\xb0\xb7\xd5m%\xa6\x8c\xf1\xca\x8f\x00\x93e\xe7F\x81\xc9\xa6\xd7\x15\xb4,\xb5\x10\xa4\x0c\x04){\xfd\xa9\x98\x11\n\x04)\x13\xa4l}\x92 e!\x04)o\x0bA\xca\x04)\xdb\x84 e\x82\x94\x85\x10\xa4L\x902A\xca\x04)K!H\x99 e\x82\x94 R\xb6 A\xca\x04)\x13\xa4L\x90\xf2@R\xc0{\x04)\x0b!H\xf9\xcb\x86\x94\xb7\xe0d\x1d\xb9\xf8y\xf1\xe4[\xd6\x8a\xe2\xacX\x9b\xcd\xb36;\xf9(\xfe\x89\x02\x973\x01\xf7B\xcdfU=\x97(s\xe9\xc2\x97%\x84\xf6\x9c\xeb\xffE}\xee\x81\xae\xdf\x81\x82\xcd\xda,6P**\xbf\xe3\xb0&\xc6\xde\xe6\xf1\xac\x88\x16\xba\xde\x94y\xeb\x00\xafl\x80\x19\xb8@3\xf0UL\x8a\x0f<\x03\x1f4\x0e\xfeJj\xc1xa\xfag\xf9\xc0\xea&U9\xe7\xa9\xc5p\x08\xfb\xdc\xe6w\xac\x94O;\xf5q\x13\x0b\x10\x066Y[\xad\x1e\xdb7\xcf\xec\xc3\xba*\x99\x1d\xcc\x07/\x9a\xda\xcb\x00W\xb5\xdc,.%\xc42\xba|C\xe3\xac\xab\xf7\xd2Y\xf6\xcd\xd7\xfd\xefbY\xaaJ\x97/X\xc2o\x8ec\x16\x1f\xd0Y\xaev\xd47Y\xc3\xaee\xc3\x88\x84\xc62\xc5-\xffo\xc6\xb7\xd9}{8\xf5\x89I\xe3M\x99\xb7\x0f\x1b\xd5n\xce\xc7\xbfQ]\xe1\x07\xf8\xe6\xeb\xff\xbf\xab[_\x14\xf7\xdb\x02v\xd3<\x89A\xf9\xab\x85\xec\x07=~$o%p\xe0#0,;W\xf0\x90+x\xe8\xf1,\xc3\xb0\xc5~\x80\xef\xf9na\xd3<\x85o\x80\xbf-k\xf5\xbd\xb7OfE\x9e5\xae!\xea\x9f(\xa48\xa7\x0b)\xc8\xc1\xec\xbb\x12_\x8a*\xb8\xcc\xdf^\xe4\x8d0\x9c\x1a\xc6\xfa7\xbdz\xfa\xbb\x8ek\x98\xbb\x92\xf1\x0f\xa5o\xc2\xc1\xf8\xc9x\x996\xb3v\xea\x8b\xcd<\x85\x1a1o6\xaa_\xa8\xa1\x92\xcf$K\xc7\xdc\xaa>\xf3\x0d\x16\x86\xe9,\xa8\xcd8\x1cH27\xb3\xab\xb0\xb3\xca\x08\xcc\xf01\x11\xb5ra'-\xfe\x81i\x0d\xc4\xdf\xe4@|\xd4\xe3\xec\xfc\x97\xaeN\x16mb$\x0f\xc6\xd3\xd7\xc6A3\xcf\x9bu\x91\xdd\xa7\xa8\x97\xb5'\xa9oty\xdd\xd5\n\xb5\xb9\xbdeM+\xee\xf7\x10\xf3$\xefO]\x15\xdd\xaadF\xf1Y\x91s;\x99\xaa%\xf6\xa5 \xea\xf4\xd0\x9c\x85\xfc\xa1\xab\xa3>\x14\x8b\xae&\xa0\xb5\x9a%\xd1%\xa2\x7f\xc7Jx\xc4n\x9f\xc23\xa1\x14N\xf9\x84f\xd2\xd8\xdc\xafn\xaa\xfd\xe6\xc3\x96\x9f\xe8\xaf5\x10w\xe8\xc8\xbfi\xd2D\xb3\xe4\xe7\xc0\xaa\x04\xf6A\xe3\xab\xbc\xf4\x16\x85\xa7W\xaf~y\xac\xb843\x9b\x87\x02t\x1fn\x84\x8fI~\\5\xad#Y\xa8/!\xbc\x96M\x9d\xef\xd5ho.\xce\x05\xd8\x0d\xf3j\xb6\x11\x1c\x9eG\x15_\xe1\xa1Z,\x9e\xcc\x96Y^>V7n(W\x8bE\xcf\xc0Q\x93\x97r\xff\x93W\xe5qw\x83S\xa0)\xbe7\x9b\xe2z\x995\xcb}\xdb\xe3\xefY\xb3\x94+W\xb3\xcc\xbe\xfd\xeb\xf7\xc0?*\x1ce\xbd\x91\xd6\x15\xdf\x05\n\x07\xea\x9b\x8bs\xdb\n~\xce\xe7h\x01\xe1\xb6\x15\xdc\xb1:_\xdc\x0bc\xdaL!\xba\x8e\xfe\xc4<\x9f\x97\x0f[\x05\xd7'4\xa4\x7f\x9e\xd3G;\xc4Rix;\xb3\xaf\x82\xb6\xd5O\x1cpG\xa7\xcax\x96\xa7\xe9pJ\xf4N\xa2w\x1a\x047#\x10\xbd\x93\xe8\x9d\xb6'\x89\xde)\x84\xe8\x9d\xdbB\xf4N\xa2w\xda\x84\xe8\x9dD\xef\x14B\xf4N\xa2w\x12\xbd\x93\xe8\x9dR\x88\xdeI\xf4N\xa2w\x12\xbd\xd3&D\xef$z'\xd1;\x89\xde9\x90\x14T;\xa2w\n!z\xe7\x97@\xef\x9crI>)U\x93\xb7s^\xde\xa2s\xffdE\xa1\xd9\x98\x0d\xa8\x97E7\x91\xf47\x95\x0fHd\x08RJFl\xcd\xbf\xcb7\x1e\xe8j\x1d(C\xf3&+\xb8\x9d\x0e\x04WR,\xdf\x1d|*F\xd2\xb0\xc21;\x0e\xb1\xe6\x0b\x89\xaa\x8b\xb6e\x16o\xaah^wq\\\xf4/\x0f\xf5\xcbc-)>\x9bI\xf1\xf2EQ\xd6\x03oZ%)(U\x18\x0f\x91\x94\xc0DK\xde\xc2\xbb\x1c\x8d\x91\x89\x98\x1c\xfa\xd4\xb2\xe1J\xc7$%,)S/#C\xca\x94dCR\xd0<_,X\xcd\xcaV\xfd&|\xcb\xc3\xcemt_\xba\xc9p?\xaa\xd7\xbbF\xe9\x98\xe9\xdd(\xe2m\xa1\xbf\xb2\xce\xf2Z\xfaS-\xaej>\xad\xe6\x8aw\xb85\xa9f\xdb$~\x10+\xc9\xadj\xf7\xed\xce82I\xff\xe0\xb0\xbc\x1a\xbd\x1a\xfe\xaci\x8f\xdc\xfc\xaci\xb7\xed\xe2\x1c\x91\xee\x91X\xb2\x0f\xed\xf5;\x16\xcb\x80\xf3:\x83\xfd\xd4\x11\x18\x94B\xcfy\xfc?\x156\x925\x8a\x0c\xf3:\xbbe\x17\xca\x02\xf2w\x8b2\xb9\x18r5\\-7$\x83U\xd5\xb4\xc0\x04\xe2 `\x8ac8o\x07[\xb3u{\x0f\xb9\x0d|o\x97\xacf\x02\x8e*+XU5\xd3\xf0\x93\xb1\x83Vm\x16\xcbY\xd3\xc6\xdc\xd8I\xe0>2\xa8\xf8\xbc\xb0\xa2\xf8\x8fr\xb3\xba\x91\xces\x8d\x98\x0d\xe0\x19[}\x87\x86\x16}\xfeZ(\xb3\xcd\x11\xef\xb3\x06\x1a\xd6\x1eA\xde6\x1a\x08l`S\xcaN=\x97\xd8\xc8\xfb\xbc\x19\xf7\x0fD\xf26\xb5\x17\x89\xe7\xf5\xc8\xd0\x93\xbf\x8b\x85\xb2\xa1\xf4m@\xfc\x1e\xef\xfa\x8f]\xfd\x89\xdfC\xfc\x1e\xb3\x10\xbfG\x08\xf1{\xb6\x85\xf8=\xc4\xef\xb1 \xf1{\x88\xdf#\x84\xf8=\xc4\xef!~\x0f\xf1{\xa4\x10\xbf\x87\xf8=\xc4\xef!~\x8fM\x88\xdfC\xfc\x1e\xe2\xf7\x10\xbfg )\xb8\x16\xc4\xef\x11B\xfc\x9e/\x81\xdfs\x187\x82\xf5\xe5\xe9\x91\xdf\xe3w\xec\xdeV\xb6 \x96\xaa\xc0\xd3LM\xe95k7u)\xf3\x84H\xd2K\xb3d\xa56\xfc\xa6\xec\x1cc\x93\xed\xf0\xb9\xd0V\xf0>\xd4\x99P\xba\x926\x0d7\xf5;\x16h\xcf\xb1\xfa=\x1bw\x82E\x1b\xcc[\xe4\xab\x1ck]\xf1l\x9fn\xc5\x0cQK\xa7\xe9\xb0\x07+\xd8wSL\xc0T\xe9\"\x19\xfe\xe9|\x01\x05[\xb4\x1a\xd2W\x18\xbf\xde\xc4\n\x7f\xaf\x1c \xf2#\xdc\xce7\xf7\xc0\xb2\xd9\x12\xb2\xf5\xfa3Zq\x08\xb4\xf7\xef\xbbl9x\x83[T\xf4\xd0JL4 \x93\xae\xc9lC\x1d\xf2\xa3,(\x1eT\x1di\xa8./g\xc5f>\xd9\xa2f\xf2+}\xf2\x9eq\x8b w\xe0\x11\xe6K\xc9\x80\xb72\x99\\\xde\x9c7\x93\xd6\x9aTA\xec\xeak\xd6(\xc8]\x0c\xaf~<\xf2!w\xacFS~[V\xf5\xc4\x9f\xaeG\xe3\xf8\x13\xd22\xbb6\xecMU\x15l@\xe124`\xcd\xeeX=z\xd5\xd5x\xea\xe9i\xc3\xe5\x03\xa2F\xcd\xcc#a\xa4\x87\x7f\x83\x95\x02i\x14)\xf6\xa6\x0e5o\xd2\xa0\xdd\xad\x11\xc6g-Y\x9b5\x0dk\xa57\xd2Ck}\xc9\xdaS\xfe\xf0\xaf\xe2ae\x88\x06J\xd6\x82P\xa2|\x9a\xa2\xdf\x8d\xd6\xe3\x11\xa7u\xac\xe5\x81\xae\xe3\x81R[K\xd6^\x8b\xca]\xcb\xca\x1d\x06\xb5b]\xe73\x0f\xa8p \xc9C\xfdDP\x84\x1a\x0c\x8c\x00\xe1\x14P\x04\xd13-\xcd\x13I\xf2\x8c\xa5x*6\x9a\xe8\x1czU\x9fU\xbch-S\xeb\xac\xc6ux\x8f~\xd8\xc0]UlV\xe6\xf2\xca\x9f\x12\x00W\x0e\xfa\x9c\x9f@\xa7\xcb\xa1\xab\xd3/v\xa2q\x9b\xf1\xf6_.\xae\xefYmo\x82\xf5\xa6\x9e-\xb3\x0e\xc9\\2i.\xe3\xf3\x9b\xf5q\x7f8\xb9\xc9\xcaw\xb0\xaa\xe6\x9b\xa2;F\x1b\xee\x84\x95\x8a\x1e\xe8\xfa\x1c(\x1fch\x8e\xa1Lr\xf9\x08\x9b\x0c\xf3\x1b\x8dm\"\x9aud\x90^\xac\x85\x02/*\xb5\xca>H\xfa\xd45?\x9a\x17\xbbf\xf1\xd9!\xf1\xccs>o\xcd\xf8 \xfd)\xbc\xae\xd9B\xde\xf6\xc97Qoy!e\xf1\xdeB^6-\xcb\xe6\xc7\xf0K\xf6!_mlW4*\xeeC\xb5\x00\xf9\xa2\xf0\x9f\x16E\xf5\xbe\x03\x90\x95\xf3S\xde\xc59\xb7m\x04X\x99\xdd\x14\xec\xfa\xb6\xbac\xb5\xe8\xe7.\x03MI^C\xc1x~`p\xc3_\xbe\x80\xfe\xa3\xd2\xd1,6\x17uU\x88\xfe +\xd1@n\xbd\x1cM\xfa\xaeM{\x8fMY3\xde\x98\xb3\x96\xcd\xe5%\xa5\xd75\xbbe\x1f\"\x1b\xdf\xd7\xb2\x99\xde\xb8\x01\xfb\xc0\xd7\xa6F\xdc`\xa9o(\xcb\x8a|\x9e\xb5l\x84\xc8\xbb\x9cA\x00\x8b\xbaZA\xc9{\\\xa1\xafRU\x89\xad\x1ax\xd4\x1b\xcd\xb6\x1ct\xcff5\x93;\xf5f#\x86\x8e\xf0J\x15Y\xcb;\xb3\xc8)\xa6\x0b\x97W6W\xb2,m_-\xd3\xf9\xad\xef\xbd{\xb2\xefJ\x8e\x84\xe0>oQ\xb75\x12\x10\x94\x089\x13\xa3\x12-)\xf6\x83Z\x04.^?\x9b\xe8#\x1e\x04\xf1 \xbc \x00n6%\x1e\x04\xf1 lO\x12\x0fB\x08\xf1 \xb6\x85x\x10\xc4\x83\xb0 \xf1 \x88\x07!\x84x\x10\xc4\x83 \x1e\x04\xf1 \xa4\x10\x0f\x82x\x10\xc4\x83 \x1e\x84M\x88\x07A<\x08\xe2A\x10\x0fb )0i\xe2A\x08!\x1e\xc4\x9f\x85\x07\x11F4\x900\x17\xfaf3\x85\x8aU\x0b \xeeUe\x8f\x8b\xa9\xbby\xd4\xbb#\xaa\xc1\xa5xK\xfdr\xb0$\x03[\xd2\x02\xab*\xf0\x025\x8el\n\x1e\xf7\x84+\x83\x82\xf3U\xbf[ e\xbe\x84\xa8L \xf6\x19\xca\x9e#!,;\x02\x02n\x95}\x12\x05\xb7\x9a^W\xf7\xdaH-\x04\xb8\x02\x01\xae^o\xa3\x7fdJ!\xc0\x95\x00W\xb3\x10\xe0*\x84\x00\xd7m!\xc0\x95\x00W\x9b\x10\xe0J\x80\xab\x10\x02\\ p%\xc0\x95\x00W)\x04\xb8\x12\xe0J\x80+\x01\xae6!\xc0\x95\x00W\x02\\ p\x1dH\n\xf0\x8b\x00W!\x04\xb8\xfeY\x00\xd7?C\xe09k\xb3y\xd6f'w\xdf\x9c(\x1cW\xfc\xf3\xa3\xfe\xe1\x9a\x17\xd7\x81\x10\x0f.\xc29\x95\xef?\xcf\xda\x8c?*;\x9aR\n\\\x17dMS\xcd\xf2.dXl\xd8\xe4g\xb4U\xfaI\xf7\x99v\x0e\x1d\xa98\xd3Y\xc5G\xe2\\\xfa\xf8\xd4\x91\xb4\x0f\xd1\x1dG\xb8+\xad\x83\x12\xa9\xc7\x0e\x16\x83\xb68X\x9c\xae\x95QA\xafzc\x0b\x83\xea^\xa5\"v\xe5\x11\xdab\xeb-e[N\x8e\x81%Q\xc8\xa9\xc2J\xb7\x1b@\xcb\xc5\xebg\x04\x9e\x02\x81\xa7\x1e\xcf\xe1\x1e\xfc\x8e\xaeY{4\xeb\xd9\xba\xe1\xe4\xee/>\xf0\xa6C\x8b\xaf\xa3EU\xbd\x83\xcdz<\xca\x02g5\xd8}\x15\x00\xb3\x15\x82\x17\x87\xf9\xbc>\xf9\xc8\xff\xb7q\xac\x06?\xb3\xf6\xc7\xfb\xd3\xf9\x9c\x8f\xcb\xb6\xce\xd9\x9d\xcc\xcd/ms\x9b\xdf\xb1R\xb8'\x94\x95\x1e\xb1\xe6\xb1q\xfe\xee\xd4<\xd0\xf5=\xd0Y[4\xdf\x81\x8c5Q\x96\xeb|\x9ev\xb4L\xc5\x97O\x01\xe0\x8d +\xc0\xf9s\xb5\x16\xe4\x8d,\xda1\xc0y\xcf\x06j\xe6\xef\x8eOe7\xb0j\xe2Sf\xbd\xc8frU\xe1'\xf3\xf7KVw\x97\x0229h:VP^\xc23q\xd3\x92\xd9<\n\xe9\x10\x9d\xec\x00\xcc$\x9c\xf3b\xf4\x8fJ\xa6\xee\xb9\x1b\x1eHG\xbf\xbb\xb0\xe2Z\xee\xb2\x98\xb6\xb1\x06B\xf9^Kx\x1etS\x18uT\xef\xcb\xd1\x9c8\x16W\x8f\x96b\xed\xd7R<\xbd[\x8a\xaf\x8fKQ\xed\xefz\x04\xd5\x8e\xeaA\xd9T\xdd\xb6|1\xda\xb7>\x92\x18jn\xccN\xa2\xa5\xae\n\xeb\"%\xc5\xdf\x1f\xa4dBW?rt1\xba&\x1c1'\xdc@5H\x83\xce\xe4P\xd9\xb8@o\x081\x18+7\xce\x8b\xa2@,(\xafO/\xae\xfeq}\xf5\x8f\xd7g\xd7o^^\xbe>{v\xfe\xd3\xf9\xd9\xf3\x90\xd7^]\x9c\xff|\xfe\xf2\xf4\xea\xd5E\xc8[\x97g\x17\xbf\x9e?;\x0bz\xe7\xfc\xe5\xafg\x97\x81\xdfy\xf6\xe6\xf2\xea\xd5\xf3\xf3\xd3\x97!/\xbd\xfa\xedeX\xc9N\x7f\xfa\xe9\xfc\xc5\xf9\xe9\xd5Y\xc8K\xaf~yy\xfe\xe3\x9b\xcb\x90W^_\xbc\xfa\xf5\xec\xe5\xe9\xcbgA\x1fz\xf6\xea\xe5\xd5\xc5\xab\x17/\xc2\xea\xf4\xeb\xe9\x8b\xf3\xe7\xdef\xd5\x87\x81\x98\x8e\x84\x01l{\xb1\xf5\xd5\xa8O\x83\xa2\xc0\xca\xd3\xc9\xac*\xa5c\xc5\xf3\x8e\xad\xe3?5\xffY}C^\xccT\xd5\xb9\xb8\x06\xd1\xc1\x9b2}D\x8f\x93\xa7\xa6?\xf6\xd8\xef\x9c\xdd\xb4\x82\xd3\x94\xcf\x84\xebQ\x03\xb5A\xdf\xd2\xe3\xeb\xa9\xe9\x8f\xa22\x12\xe9\xcdg\x90\x97w\xac \xadK7\x16\x9f\x1a\xff\xaa\x9b\xa4l\xf3\xf6^.\xb0]\xfd\x84#l\x9eg\xa5\xaa\xa4\xba\xe2J\x986\xac\x92bl?\xdd\xfa\xcb -\x99\x98\xd1\xd7Y-\x190Y)\x97\\\xbd\xe2\xf0\xf53\xe8\x83\xdd\xdc\xf0\xd4\xf8WiW\xf99\xe9m)![,\xf2\"\xcfZ\x06\xd9m\xcd\xc46!\xe8\x93jfyj\xf8\x9b\xfc\x9c\xd8\xabdEGA\x90\x9f\xef\xf64\"\x01\x1b\xaf\xf8\xaa\xcco6\x0d\x88T\x85\xe3\xf8\x01\\A\xfa\xf9\xea\xa9\xf9\xcf\xa0\xee,\x85\xf1e\xac]\x03t\x0e\xd7\xc1%kb\x9d\x17\x0c\x04hVY\xad\x8a\x9c\xcdZ\xc8f\xc1\x83\xb8\x9f\x1b\x9f\x9a\xff<\xee\x95=\x10!m\xd43s\xd4(W\xdb\x10x\x943`e\xd5:\xf8@\xa6\xe2t\x93\xeeS\xe3_M\x85\xd1\xd9\xe5\x1a}r\x13c\xa2+\x89\xe3\xf3\x9aM\x89\xd9\xa1\xb9\xf2\xfeuO\xca\xdd\xd3\xfb%S\x94)\xdd\x8c\x0f\x9b>>\x80WA\x7f\xd8\xaa\x0d\xb3\x0f;\x85\xd7\x831\xaa\xf7\x85|\x08\x9d\xe4%\xe8s\xac\xd8\xa7\xf5\x0eM\x87>\xe5\xea\xd4\x9d\xc9\xf2$v\xcd\xbaZ\xb2F\xe4\xb7\xe4\xbb\xe4\xbe\x1bC[\xad\xa1`w\xacP\x1by=\xad\xd4lV\xd5s\xfbT&w\x96\xc7S\xc5\x82\xf4\xc9m+\x0e\xec]\xda?>\x92\xad\xaaV\xd5<_8\xb8\xc0\x02\xda\xe3'\x94\xc1nV\x1f\x0d\xe5\xd7\xc7'\xbb\xbc\x84M\xe9\x1aw\xc2\xb2\xba\xc4E.\xbc\x9c\x8a\xb8\xda\xc8\x9c\x82\x16:\x9b\xf4\xf1\x08\x0f\xc1\x9e\x0f\x9c\xfc\xd5Z\xd4\x08\x90o\x1c\xdf\xd6\xd8;\xf6\xc8w\xd7\x1f\xdeD\xd9D\xdf\xe6SI\xdb\xd6\xf9\xcdF$\xeb\xbc\x17\xce?\xab\xba\x1b\xa6\xd8\xb5\x82Y!`I9/\xeb\x85\x8c\xf7\xf2\x19S\xa4\xd6\xc9\x05\xdb\xbd(\xc7\xc8\xb5\x98)\xaf\xeb\xaa(6kws\xb9\xe7bl{\xfd\xa6\xa6\xe9\xac(\xba\xc19r?(Fn\xd3\x0dR1\xdb\xb8\xcc\xa1'\xb9\x91\x9a\x87\x8d\x9e\xea$\xfaho\x1f\xd9\x00ES\xa9\x94\xb4bk\xc0'H\xbd^\xfc \xee\xff\x96\x85S:\xb3\xd2>\xa7\xabr\xeb\xda\xc5rF/\xc5\xf7\xfa\x80\xbc\xba\xaaZ\x10\xd9{Y\xa9\x9c^|\xd9(\n6\xd3\xec\x08\xd7l\xce\x0b.zLU2\xbe\x8bYU5\xb3\x17qT@\xe9\xc7\x1c\xd2W\xef\xf5\xdf\xba;v\x07H\x12o\xbfE\xb5)\xb7\x12\xe4\xea\x06=\x10\x8f\xa8,\xcd\x9e\x9d}\x9f\xd6\xb1\x88\xe9W \x08O\xc2\x0b\x9b\xcf\xf5>\xa0\xdb\xcb\x1a\xdc\x8d\xef\xb3n\xb3lU\xa8\x92\x05\xcb\xe1'\x0dk\x9evT\x8f\xdb\xf3\xbaJ\x8eD\xd7S\xe4H4;NB\xde\"G\"9\x12\xb1\xb3\xad\x14r$n\xfd\x91\x1c\x89\xe4H4}\x92\x1c\x89\xe8\x12\x92#\x91\x1c\x89Rp\x8eD\x7f\xc9\xbaC\xb9\xe2\x170\xb1\x07\x94\xb9%\xda\\\x9f\xf9\xb8=x\xb7w\xb9R\x9cE\x11\x94*[!\xfd{D\x7f=d\x82\x8c\xaa7\xde\xd0\x8b\xa5\x8e\xe8\xec\x03\x9bm\xc4IGmw\xed\x14\xe0\xf6~\x9d\xcfDR\x04\x11\xea\xc5\xb5\x1b\x9fU\x8av\xa8Z\xc2s\x9e\xde\xc4\x8bIS\xc66\x88tMm%\x98\xff\xb3\"ge\x7f\xe6\x13n?\xab\xaemz\xae\xf3\xa0\x97m\xe6\xb9\xd5\n\xd8\xf2?SW\x08\xdd\xdc\x1f\xc1f=\xef\xfe\xbb\xcdW\xaci\xb3\xd5\xba9\xd2\xc1\xeaPnV7\xac>r\xbafjV\x08\x1dy\xb9\xa8l!N\x88\x13$\xe6\xfc\xa8n\x82\xb9\xe6\x85vMP\x88\x0e\x01\x83N\xc1\xd5=\xe1\xd5w\xa9\x94cC9\xd4\xd9 \x7f\x9c\xcfj\xca=\xc6\xca\xb6\xbe\x17\xa7z\xf7m5}\x1dn,\xf7\xebHA\xd6`P*\xcb!X\xae\xdf\xaa\xc9EQ\xa5C\xcb\xaaTu\x89\x83\xb6\xb1\x08\xf9R\x05\xf5V\xe4S\x1aZ\xe019\xd2\xd2j\x90\xf9Kg#2\xf72\xa04[\xee3\x93\xe2\x9f\xe1A\xc4tu\xab\xf1d&\x90\xb5\xcc\x1b\xc8\xcbY-\xf6\xa0\xf6\xbb\xc8za\xd9l\xa9\x9a\xc3\xfa\x9c\x95x\xddKXS\x05\xd4\xb1\x0b\xff\xdf\xc24\xdc>\x1a1\xac\xf2\xaa<\x91u\x03vg\xdf\x94\xfbKu\xca'\xf7\x9f\xf8z\xd2\xc0,[\xcb}Q)[V\xa4\x88\xbb\xa96\"\xf7\x8f\xec\xfe\xbe\xad\xb7H-\xf2\x8e\xa9.\xd9ek)\xe7zD\xb1{\xe9d^esS51\xcb\xc9\xa5Z\xf2;\x87\xbaa\xf5\x87\xec6\xcbK^\xe0nM4\xea\x1a;I\xf9\x1bY9c\x16\x88\xe1j\xe0L\x13\x91[\"5L6Q\xc2+\xab\xb6Zj\x03fT\x96\x97wUq'2\xf5\x18\x7f\x97\x89\xf7~SV\xab\x99\x00\x9f\xcaJz\xfb/$<\xa0\xbd|\x99\x82\x18\xac\xa8m\x0f6d\xda|G\xa2Q\xb5-\xc5\xbc\xb1\xaa\xeeLw\xe1\x8d\x11\x04\x0d\xe5\x8c1\x04\xfd\xd7 \x14A\x81\x1c\x87\x01\"|\x92]\xecI\x97\xd8\xad\xee]\xb6\xd2\x0c\xc7\x00\xbf\n\x8cs\xa5\xf2\x9eH\xcf\xbeU\x9d\x01[?-\x9a\nT\xec\"\xdf&\xfe\xc4O\xa2\xd6\xed\xed\xa7AM0\x96\xe9\xc1\x0b\xbd\x9b\xd7\xa3l\x8aZ\x0c\xd1 \xab:iOx$\x88\xe4|F]\xe4E\xcbj6\x87ww\xeb\x9a-\xf2\x0f\xbc\x13\xd5Y[\xd5\xe6#\xb1\xf2\x81[\xcd\xe2\xad\x90R\xd0e\xd1\x1bN\xa8\xba&\xd3\\\x7f\xf7\xe08\xd3\xf6\xf3[%\xfc\x0d\xd5b\xa1N\xf7\xc2B}\xfa\x14\xff\x0e \xd1\xa6\x18\x01\xa9 \xba\x0f\xa0\xcc)\x9e\x1a\xef\x81\xb6\x1c.}\xba'W\xd7\x80\xbeq\xac\xcf,\xb3f\x99\xaeZ\xbc\xdc\\\xa3\x8a\x9c\xef\x89\x19\xba\x8f8a\x16\xd7\xa4\x04\xc1e\xf1mNT\xde\x83\xed\xfdHW\xd8G\xfc\x83\"\xc2\xdc\x15a\x0b\xfd\xc1\x9aw\xd6IK\xcd\xaa\xd5\x8ao\xed2g\xaa+\x112\xf8\xc9\xaa.?'\x0f\xd7\xba\xd8\xfd\x9a)2\xbd9\xb7\x11Z\xba\xe8&x$U>\xee\x97ha\x93\x93\xce\x0czjs\xea\xe3\x9b\x84w\x96\xfe\x91\x97\xebM\xfb\x87\x80_}\xbd\x18\xdd\x98\xb8\xfda//yS\xea\xf4\x83\xb3b3\x97So\x91\x97\xef\xe0&\x9b\xbdSa\xf0\x83,\x8d\x1e\x85\xbc\x138\x12\xaa\xa8\x99\xd7\xb1\xa4JAW\x17\xb1\xbcJ\xc1us\xc34\xaa\x16\xcb\xde[\xfcSU\xc3Y\xd3f7E\xde,=\x080\xe8\x8d\xa8\xcb\xb5\xec\x9bO\x03\xcc\x11RK\xf3\xa4\x9b\xb3\x99\x80\x19\x86+2\xaf\xb2G\xe1\xeb\xbaZW|\x85A\xd4\xb7\x9b\"\xd3VZ\\\xe8\xbc\xd6\xe5X\x08\x86G[of\xe2\xc4&\xf6\x13*S\x90CY\xd3f\xed\xc6G\x83@\xda\xf8|x\x0b\xb7\xd8v\x88 I\xec\xd6t\xb7\xd2\x05\xf5\x8e\xab\x0eH\xf9\x1f\x1bqf\x93\x1es\xde\x84\xc2\xc5\xb7\xde\xb8\xc1\x1e\xb4-qL\x84\x8b\xb3g\xaf.\x9e_\x9f\xbf|\xfd\xe6\xea\xfa\xf2\xea\xf4\xea\xcde\x00\x9ck~\xff\xf5\xc5\xab\xd7\xaf.#_\x96\x7f\xf3L\x8c\n\xfd\xde\xa5\xf0a\xb3\xab\xd7P>K{^\x1f\x00\xa1\x1e\xb8G,\x94Y\x91\xcfO6\xa5<\xff\xc8\xbe\xc8\xfb\x85\xe7EOs\x99\xed\xa9\x7f\x9dB\xb5\x83\x110\xcc\x0b\xd9\xcd:\x82\x8c\xdb\x9did\xf7\x8e+\x9f\xfc\x9b\xb9t\xf2o\xe6\xb2\xe5rp\x8ev6\xeb\x9a\xdd\xe5\xd5\xa6)\xee\xb7\x86\xed\x00\xe6\xb4\x96SM\x18Wu6{'\x81&\xb93\xe9N:L\xaf&\x98\xd3\x89w\xf6\x19*\xdf\xda\x9f\xf2\xfa\xcc\x969\x93\x19{\xa1\xda\xb4\xbc\xd2\x8e\xe9\xc7W\"\xa9\xe1\x0f\xb1\xcb\xfa\x0c\xeb\xec\xdf\xd5\x1a\xdb\x11\xfe\x95\xc1\xbb..\xff}\xd2\x9dO=\xfa&.\x91O\xb4\x92]\n]\xba\x1e\xba+\xf5G\xee\xc9\x81\xc8\xa3M\x94_\xd9A\x0d\xc1\xbc\xbc\xd5y\n\x8e\x16Y^lj&\xb3_\xb3\xd2\x9a\xed\xa9S\x87m3\xec\xd2v\xf9\xe6E\xf0\xba\xb0\xfd\xe6\xeb\xd3K?]l\xfc\xca\xe5\xbf\x9f\xbf\x0e|\xe5\xa7\xd3\xf3\x17\xd8U/\xa6^\xe1\xeb\x9d\xe5+>\xc3[_\x1c\xadq\xb0)\x1b\xe6\xa3\xb5\x040\xc4\xb6\x9blj(\xfe\xb7\xd1B\xc1\x06\xfd\x9e\x0f\xe0>\xbdF\xe8\xe7xsO?\xc7\xff6\xf8\\W\x15~*n\xf2\xb9>;\x8b\x0f\xbf\xcb\xd7k6\x87\xf9F\xacR\xab\xbci\xf80R\xb3\xbf\xc8\xa9Ud\xf7l\xde\x977\xb4\x80\xbcsM\x0b\xc8\xfff\xb5GO\xb06\x96\x9a\x8fl\x93\xfb\\\x0bf:\x92\xc7\x8bWr\xf6`\xe5,[7\x9b\xa2+\x8a^\xce\x16b\xd1v{\xb1\xa0_\xcb=\xfc\x1b\x7f\xb9\xe4w\x1f5\x8f\x07\xa9\xa0D\x86\xfdj\xa1\xcdS\xde\x8e&OOr}\xb9\xbd\xd7\x0f\xf7\xd1.:\xec\xc31\xfd\x1f&\x0b\x7fZ*m\xa8\xde\xb3\xad\xce\xd9\xa3\x07\xed]\xc5\xe1\xf6\xd6p\x81\xe1ewK\x9ev\x8e\xf1j!\xf6w\xa29\xb3\xb6\xcdfK\xf9\x95\x8e\x07\xc2\xc7\x17\xcbf\xe6\xa5n\xdc\xebU\x9f\x14\xa7S\x07eidH\x85\xfb\x8c!$\xfd\xc7 \x04I\xe6\xc2\xe1F=\x10\x14\xe9\xd3vO\xd5\xe0]\x0c\xc86\xb64\x86&\x9d3\xc1\xb0\x890\xc3\xe1g\xb1\xa9+\x8chq\x17\x016\xfa\xfe\x9ey:>\x9f\x0b\xc2\xe6\xb0\x9d`J\xf8\x10;{\xb6\xcb\xbc\xbc\xb5\xcf\xf1\x08\x1bBtI\x06\xff\x94\xb3\x8a\xbf<\xef\xd9M\x93\xb7\xce\xd4l\x10Y\x1eq'A\x05\x8b\xbc\x9c\x0b\n\x82\x04\xa6]t,\x80|V\x95\xfb*\x8bt\xf5\xf1/\x98\xbf?\x8af\xdd{\xd8\x12> \xb6\x8f\xf9U+\xc50\xac;d\x1c)\xb2\xc1\xb5&\x16|\xce\x1a\xfa\x8f#\x11\xf1>\xe1\xb1>\xa1q>\xa11>\xc1\xf1=A\xb1=\xc1q=\x811=\xe1\xf1<\xe1\xb1<\x81q<\xb11<\xd8}\x9a\xbd\xdf\xd9>)I\xdd\x0e\x85\x01q;{\x8f\xd9\xf9T\xf1:\xfb\x8c\xd5\xf9\xecq:\x9f4F\xe7\x13\xc7\xe7\x1cDl\xcea\xc7\xe5\x1cPL\xce\xe7\x8a\xc7\xf1{\x04@F\xbc\\\xf1\x8e\x91\xd5\xd2\xd9>\xcf\x17\x02VhE\xa4K\xd3E\x9f\xf0c\x81CQ\xd74\xabL\xdc\xcaa\xdb\xb5x\xcbt*\x93\xa5\xf4\xb4KE\x8eVt:\x9dZB\xdch-7U\x8f\\\x01\x06\xed\x92\xe5\xf5\xd0\xf7+jen/]\x07q\x12\xbd\xceM\x94F)\x9ff\xef\x8589b\x17\xcc\xde\xa8\x96\xbc\x02\"\xa5\xb1\xca?*\x13Y\xd83\x8fr\x11\x972J\xff\xd0\xf4x\x1a\xee\xd2\x10\xac\xd7\xcbQy4)\xb8]\x0e2\xc6\xaa\x0eq\x04\xfa\xce\xdd\xc6L_\xeaV\xf1F\xde&hru4]\xbe\x0e\x8c\xab\xc3X\xf0\x81\xd7\x02\xb6SqL\xf2\xc0\xf6\x0e\x11\x83&\x84\x8bd\xd47\xc9K\xf2 \xbc$\xea{\xcf\x07\xc7\xf5\xa1\x8f\xa4\xfb\xaayD9MA>\x92\xa9\x90\x8f\xc4\xfeX\xb0\x8f\x043yI\x19vny\xdb\xcc\xad\xc1\x1d\xa8\xe3v\x96Y9\xbfw%\x9d\x99Dvf=\xb5\xe9\xe0\x9d9j\xb4\x9f:\xe2\xb3\xaa\xf7e3\x99h\xf2\xd62\xd2\xc9\x8b\xe3~\x83\xbc8\xae\xc7\xc9\x8bc\xfe;yq|\xdf!/\x0eyq\xc8\x8bC^\x9c\xcf\xed\xc5\xc9F^\x9c{U\x8a\x91'g\xb1)\x8aE^\x14L\x06\x15[U5\xf9\xad\xb8\xd4?\x83\xb6\xce\xcaFv\x9a\xa8\xe3\x97v\x1b|\xaa\xa3\xaa\xc3>\xde\x00\x8e\xf15\x93\x8d;\x1e\xce\x99\xd7\xc5E(ET\xd7\x10\x00\xd7\x99\xfc&/\xb3\xfa\x1e\x1e\xf5\x91\x19:\xf4\xda\xe2`+\xb2\xa6q\x06U\xe0\x0b$\xe3\xbb\x14\x97K\xc4d\xb5\xdd=\xfa\xc3n!\x99M\xd9Maj,wC=S:\x02\\S\xce~\xd7\x1c\x85\xb8\xa6\xcc\x16\x8cwW\x8d=Hc\x8f\x95y\x10\xed\xec\xb4RqT\xe4\xb2J\xe1\xb2J3l\x1cs\xd2K5\xa2${Q\xb5\xbd\xba\xd9V'\x81\xe9\x12\xaaX\xb5L\xfc\xca\x8e\xc8\xd8/2\xf2q8{u\xbd\xc0\x17\x1a\xd5\xee'\x16-\xeb\x15\x8b\x90`\x95NK\xb0R\xdb\xaa\x8b\xa0\xedgmg.\\\x8a\x99\xdc\x92\xcf\x10\xcb\xf1\x19c&1E<\xe7=\xdd\xbc\x9e\xca\x90\xed\xa3\xbeO\xba3\x87\x01\xc8Eu\x10\x06\xf5\x88\xe5\"O\xe0$\xb9\xc2c~Z\x91_q{\x0f\xe40t<\xd0\xddE\x1a=\xc7\x9ev\xe9\xfb$\x03~\xb4#n\xb26oT\n\xa8\n\xb2\xf5\xba\xb8w\xcf\xb5\xb2I.\xb7\xf2\xd6(\x9eq\xa6\x1e0\xbe\xef\x9dS\x10]\x13S_\xb1+\xeb\xa6;\xfb=\x16\x9eX\xa1\xd1\xfc$f$\x11z\xd3MT\xe6n)\x19\xee\xd7\xa2*\xd1u\xb8R\xfbJ\xa9l\x1a\xdd4Y\xf0\x1e\xa9\xc6\xb4\xb7\x99\x0c\xeb\xabj\x1d\xf4\xf7\xe2\xfc\xf2\xca6\xa8\x10m\xe0\xf6\xed>\x81\xe7g?\x9d\xbf<\xbf:\x7f\xf5\x12\xef\xc1\xdb~\xcb\x1b\xf7\xba\xfd\x8a'\xda\xd5\xf6\x82\xb0\x87\xe5\xad\xce#\x19^)\xff\xfeX\x8a\xd3`v;;^\x9a\xc6\x06\x89\xc8\xd6\x13\x15\xe9jU(\xd2\x1d\xd8\xa7\"{\x0bm\x1b\xc7\x10\xe6\x9a\xf5!\xe8*\xaf\x82\xf2\xeb\x88\x14U\x8f\xba\xb5Q#?e\xd5BU>\xf1%\xc4\xb7\xb5\xe9v\x99\x0c\xc1\xad:\xc5\x83\x9e\x0d\xb7\x02\\'\xebux1D\xd7\xb2\x95E\xfch.Pvo*\xce\xf8\xa6\x0f\xf1h\xef\xce\x81ev\xe7Z\xd2\xb9\xf6\x86O\x8a\xd6\xbcN\xea\x1a\xe4\xfc\xa6\x90W\xc2\xec\xff\x8e\x06\x02\x91\x08D\"\x10\x89@$\x02\x91\x08D\"\x10\x89@\xa4O\x03\"]\x8d\xba\xe2`\xd7\x83H#\xe1\xae\x96\xe9t\xac\xbf\xfd\xe7\xef\xff|W\x7f\xb7(\x8f\xe4\x0eN}r\xb2\xac\x8f\xf9\x1b\xdd\x9f\xcd\x1f\xae\xd9L~si\xfd\xe6\xfb\xef\xbe\x9d\xff\xfe\xed\xff\x98\xdf\xad\xe6\xd9?7\xef\xff9\xcb\xe6\xf3\xe5\xf2o\xb7\xab\xcd\xefK\xf6\xcf\xef\xbe;\x86\xf3E\xa7/\xefr\xaa\x19\xf2{l\x97\xa5U\xf9\xdcmM\xdf\xed\xa8\xc5\n\xa7\xb8\x1c\xf6\xda\xf2o\xf3\x91\xc8\xe6b,\xf6\x1f\xfc\xf1^/8G\xd6\xf4#\x0d\x9a\x0b#S\xcf\xb7]\x12\xd5A~\xfcK\xd6\xfd\xf9z\xb4\x19i+1\xe6\xe5^]\xfc\xce\x0b\xb2\x02\x95\xb3\\\xfa\xc4u\xbbtys\xcf\xe7O\xcd\xa3F=\xa8W\xc4\xc1P~\xf8\xed\xd7_?\xb4/\xab\x83\x14F\xfb\\OG$\x89\xae\xd4\xdb\x93\xfb\xa8p\xe6\x97\xf4\xce\xe3}\x9d\x89\x14H\xe6\xc6\xd9&\xc6;\x973\xf7b\xe6)4\xf8\xb4\x83\xf7\x0b\x10\xc0\xa1@-~H\xa07)\x93\x02\x19\xbc\x8294\xa1\xa3\x83\x1c:\xcc\x83u*\xde\x86\x03T\xe3AZ:\xc3.\x11D\xc8f\x80\x1d\xca\x13\x11G\x84\x8e$\x8a-UL4\x11.\x9eh\x97\x12\xf9c\x8a|G\xaf\xa1$\x8e+\n\x8f,B\xc7\x16a\xd0\x13/~\x824|\xe2\x18#|\x94\xd1\xa7\xac\xa4\x1f(\x8a\x82\x8ab\xc0\xa2p\xb8(\x1c0\x8a\x80\x8c\x02A\xa3\x08\xd8(\x188\x8a\x81\x8eb\xc0\xa3`\xf8(\x1e@\n\x99\xae\xa2@$\xa7\xbe\xd0\x9b\xa0\xf7\x0e$}:(i\xbf`\xd2\x01\xc0I\x9f\x18P\xfa\xe4\x90\xd2\x81\x80J\x87\x0e+\x1d\x14\xb0\xf4\xf9\xa0%\xdc9)!\xbc\x84\x06\x98p%K\x18\xa9\x942V \x15\xad\x84\xdc\x92\x85\x9c\xb0\x9d\xb6\xf2R\xa8\x83\xa2\x96\xfa4\xaa\xea)\xa3\x970\xf1Ka\xc5J\x12\xc3\xe4o\xbaTqLI#\x99<\xad\x8f\xdb\xbc\x19\x1dn\x9a\xa8\x186\xdc\x14\x8ee:N\x8e\xfc{\xd7\xf9\xfc\x9a\x1fb\xcd=\x00Wl\xa3\xc2\xde_l\xbc\xb8\xd5\xa2*\x9f\x9fL\xee\x14\xc6\xfa\x19\x01\xe3T\xf2;\x94\xa6u\xd9qd\xa0\xe6*\x9c\x95\xc1P\xba\x0e\x0e\xce\xde\x8bOlY\xcd5\xb9\x9b\x00\x11\x9b\xfba\xab\x89\xe5\x95\x95\x87m\x9dk}\xaf\xa64\x92\xfa\xd7\xba\xaa{\x07\x9a+\x16g\xaa\x0em\x9b\xf1\x1f6\x9bC\xefE\x86\x02+\x9b\xa1\x95\x88w\xc6\x96\x8d\xb4\x1f\xef\x88;\x9a+\xd6\x12\xfc\xd3\xba\xb3(PO~\xa9\xbb\xf9{O}&A\x17\x89\xad\xf3\xa0\xb1\x05\xec\nK\xf6A\xd7:\xb8\xb6\x86\x8e\xe4\x88\xa1\xed!\xbf\xed\xba\x7f\x0e\xe6D\xe3\x87\x9b\xbc\xdf\x00\xc4w \x08tB\xb6?r\x92H\x0e=\xf9\xe1\x17d\xf1}\xbb>)i\x82z!(\xb0\x17\xbc\xc1\xbd\x80tI#\x9c\xd2\xa8\x1e&\x05\xd3\xcf\xa4\xf8\x9aH\n\xb2\xa1\xd4\xc31\x81\xbf\xa0\xbe\x82\x08\xfe\x85\xc8\x02y#JA\x1c\x92[D\xa40B\x11.\x96\x18\xf0\xf1\xc4\x10Zm\xe4\xa8\x97\x12b#\xef\xe1\x18\x11l\xcbe\x10\x81\xec\x8f\xb9\x95\xe2\x8f3\x86P3\x85\xd6\x1c\x1ds\x8c\xd0'\x02\xb1\xf1q\xc7\x10P\xdc\x94\xf1\xc7\x10\x18\x83\xecQ\xd5E(\xfb\xe3\x90\x01\x11\x8b\x0ch\xab\x84\xc6$\xbb\x1b\x82Ok\xbb\xc4%\x03v\xcaCvg\xac\x0d\xda4q\xca\x10\x1d\xab\x0c\xb8xe@\xd7)K\xbc\xb3\xab(\x07\x14\xf3\x0c\x80\x89{\x86\xb0\xd8gH\x7f\x92\xf0NW\x98 +\x92\xe4\x12Gs\x89!\xba\xc4P]\xa2\xc8.\xc1t\x97(\xc2K\x04\xe5%\x8e\xf4\x12G{\x89 \xbe\xecB} [\x13\xc2\xe9/\x1eu\n^\x0e!\xc0|\x12\n\xcc\xa7$\xc1\xec\x9b\x06s\x10D\x98ON\x85\xf9\x0cd\x98\x83\xa1\xc3\x1c>!\xe6\xc0(1\x9f\x93\x14\x83=\xa4%%\xc6\x04Pc\x92\xc4_\x03\xaa\x9a\x11q\xd8\x1e];\xc4bK\xc1\xae\x8e[>\xef\x11\xbf \xe82h\x07\xbf`\x04\xf2\xb8\xf9\x05\xf8\xa2\x1bT\xc61\x0cL\x1c\x03S\xcdm\xc8\x1d\xc2=\x8fq\xcc\x8f\xeb\xe3?\x0exw\xf1HG0\xd6\xde\xb0UF+\xd7\x00\xe1BjB\xb8\x06[\x8d\xed\xe3\x1a\x1c\x8e\x8dvd\x1cL\xd5\xa1-\x14\x02'\x1f\x90\xb5bx\x07\x18\xe6A\xa4\x15\x97Y\xb3d\xf3T\x9e\xda\xfd\x9boP^\xdd\xe3\xe4\x9f\xdc\xee\x08. \x0c\xe6&j\xa0\xcd\x14[\xff\x04d\x0d\xfcp\x0b\xa0\xccI \xa9\x95\x99>\x97\x87.kCUb\xc2\x85|\xde;\xbc\xe6}\x883\xae\xca\xa8\x95\x0e\x90\xab\x1d\x041\xeb\xa4 \xfb\x0f\xe0\x87\x1a\x046\x0c\x040\xee\xd0\x8aB\xd7B\x88a\xdfI9L\x0b\xfa\xd6H\xaf\xc2\x10n\x99\x14\x04O\xe9\x0fj\xcb\xb8\x15t[\x95a\x15\x0d\xd4\x10\xd6\x06\xbe\xc5\x03\xc2L\xbe\x9b\x1d\xbdK\x89W_ \xe3Q\xca^;\xe1n\x16\xd9\x89\x15hR\x88\xe2\x06\x02\xb2\xdc\x86\x13\xf8o\"+E\xdd\x1f 3h\xf2\xf2\xb6p\x9eN\x9a-D\xbf\xa9V\x0c\xd8\x87\xb6\xce\x06\xcc8\xe9?\xcc\xdb\xed\xe2\xfa\x0bk\xa4;J\xd7\xcc=\x94\x9b\xd5\x0d\xab\xa1\xaa\xbb\xa4\x1a\xd6\xc2N\x14\x18\xa1\xfc\x91\x81\xfb\x13\xbcA\xdb\xa3|\xd1g'{\xbcM\xd1\x14\xbflw\xc6Qu\xd5S\xd2I8\xab\xd6\xf7\xfd^R\xfe \\\x842N\x9e\x97\xb3]\xb2F'X1,w\xce\xcdF@\x9a\x10\xeb\xc6\xc2;v\xfc\x8d \x86\x8far\x17\x8d\x05\x93\xc9h\x94XH\xb7+\xa6D6\x9a\x8d9\xed\xd0X\xf4w\x1a\\\xf6\xa3c\xdb\xb7\xce[a\x94\xach*\x0d\x04\x1b\x18\x1a\xe3\x12YT\xa5\xc8\x8bdPmJ\x0d\xe4\xea57UU0\x0b\x13\x00\xd7m\x8c\xc9\x88\xc4\xd0Y\x14\xd9\xad\x98`\xde/\x99\xe8E\xe3\xd4D\x16}6\xafU\xb3\x1dm\x85\xea\x1f}\xfe\xa3\xadTDZ\xd8\x07Y\x05\xe7\xe9'\x95\xbd&\x1f\xb3\x9bJ=(Jo\xcd?/T,\xeaj\xe5\xadd\xdfN\x969\x10\x12Vr\xf21L\x7f\xb0\x92\x9a;\x1d%\xdcW\x9bz\x92\xc9J\x8a\xbbT\xc6\xb0:T\xde\xc9\x89\"\x99\x85\xd2\x1c\xa5w\xf1\xfa\x19\xe5\xa0\x04\xcaA\xe9Y\x8b?q\x0e\xca\xe9\xa2n\xeb\x89\x931\x13\xbb\x17H\xb3\x03p\xcc\xeb\xa3\xb5u\xc7u}\xe7\xd5<\xf1\x1a\x1e\x9e\xcfs\xd2St\xa3\x9b\x96dd\xc3G\xaf\xe66\xbcd\x875\xdc\xb1rsS\xfd\xae\x12\x8aj\xe9m\xb5\xc8\x8af\xdbX\xd3UM[k\xb2 #\x0d\x15\xb9\x8c\xf7\x0b\xf6H\xdb\xa7\xa8\xe7dMF\xd63j%\x1f\xac\xd9#e\x96\xf5{\xf7Z&N6{\";\xb2\xfc\x95[\xcf\x91~\xd6\x04\x9a\xf7\x19g\x8dS\xca(\xdf\xac\xc4\xc1\xb59F\x899\x0d\xaa\xf5\x82z\xb0y9Mn\x01\xdb\xd2\xbd\xfb\x99\xd8\xb5\x8b\xdd)X\x1ew\xf2\x06\xdc\x9a\x8dt\x9c&\x8e_L\x97\xfd\xc2\xe9dK\x15\xb7\xd8L\x19\x1c\x8e\xa8E_\xcc\xa2kg\xa8\xc5\xcb2\xf6\xf6\")\xfe\xbe$\xc5\x87\xbd\x02\xb6Q\xd4\xa3qQ\x8a-&`\x07\xa2\x8a\x82p\xc5&\x8aN\xc4\xc6&\xaa\xb9(\xa9\xf7\x195\x92\xa5\xe0\xed\xd2&\x89H\x0c\x8eG\xc4D#\x06\x98&\xac\xbe\xe9\xe2\x10\x83\xa3\x10q\x05M\x1b\x81\x18\x12\x7f\xa8\xbe\xe3\xd4\x87\x8b>\xf4\xc7\x1ebl\x11\x1aw\xe8\x9b\xeaw\x8b:DLa\xa8N\x8b\xaby\x9b*\xda06\xd6\x10\x15i\x88\xa9Kx\x94\xa1\xebv\xd4\xc0\xfbQ\x91m\xe2\x0b\xd7\x89\x8d.\x8c\x8a-\x8c\x88,\x8c\x8b+\xdc)\xaa\x10\xe7\x90\x05\x9f\xf1\\VO\x10O\x18\x1cMx\xa8\xb1\x84\x07\x13I\xf8\x87\x88#l\x11Q\x84A1\x84 w\xf6\xde=\x8do2\xb2Gc\xe1_B\xc6\x0d\x86G\x0d\x86\xc7\x0cFD\x0c\x06\xc6\x0bFD\x0b\x06\xc7\n\xc6D\n\xc6\xc4 \x06G \xc6\xc7\x08\xe2gx{\x8f\xa4\xf4\xd8\x11\x91\x81\xfb\x8d\x0b<\x80\xa8\xc0O\x1c\x13\xf8\xc9#\x02\x0f$\x1e\xf0\xd0\xa3\x01\x0f*\x16\xf0\xf3E\x02b\x0eQI\xa3\x00\xbbF\xf2\xc5\x00&\x89\x00\xf4U/\"\xfa\xcf}P\xdf-\xf6\x0f\xb7\xeamy\x8d\xdb\xc8\xb8?G\xd4\xdf$6e\xd7\x9c\xc2\x06u=\xb93$0b\x97h?\xafs\xdb\xef\xd6\x1e\xd7\xc3\xb7eO\x01\x90\xe0\xec\x0b \xe3\xfb\x8cT\x00\x1b\xcbp\xd2\xb0\xbeH\x86\xcfo\x17_\xbc\x82\x87\x0d\x8d\x8b\xb7\x99|2\x84\x1a~\x00\x16\x8a\x89B\xf0\xc6\x1f\xc4Y\x0e\x15\xc3w\x00&s\xc7\xeeiS8\xf4E\x1b\xe9\x93&X\x9e~\xd8\x19f\x91j0m\x85\x1e\xb8\xa3\xf5\xf0\xb51*\x86\x88H\xbd\x11\xb1g\xb78=\xef\x1a\x05\xa8u\n\x82#\xf4P=\x05\xb0\x03 \x82\x1a\x02\x02\"\xf3|\xfcy-A\xab\x18\xc4F\xe5\x1d\x9a\xd5|\xab\x9bG]\x1b\x18\xf5\x84\x88\n\xfa\x83\xd9/f\xed\xdbV\x14\x1e\x7f\x17ou\x7f\xec\x1d\xda\xc8\xbb\xd8\x0e\xb3\x1c\xec\xb5\xf7%\xecl\xbb\xd8a\xe7X;D\x97\x8c ]K\x13e\xd7l\xe1\xd7A1v\x14\x8b\x86=\xd6\x07\xf0\xcf{I\xc3D\xef\xa5\xb1\xf3\x94{\xa1X\xb4\xa1\xd8O*\x89z\xc9\xf0\x88Q\x0en\xe8\xd2\xd8n%\xee\xea\x977\xf5\x9b5\x9c\x8b\x91\xd5\xbb\xa5\x16\xdb\x9e.\xb5\xff\x92]\xce\xceN\x1b\xed{\x0d\x9b-g\x01\xf2\xdb\xb2\xf2~\xdf\xe9\xac@o\xf1(\xd6MK\xaaJF1\xe4\xad#q\xd7X7\xc3\xda\x16\x1f\xe9fr S\x9c\x9b\x12\x8as\xa38\xb7\xddv\x17\x8e=\x05\xc5\xb9I1\xf6\x14\xdd\xe8\x13R\x91\xab\xa1c\xb7\n\x11\x1b\x04D[[\xb6\x05\xc1\x9b\x01\x07\xb2e\xd8\x02$\xb3;E\xccQ\xc4\xdc\xb8S\x0e#\xe6\x94ZS\xac\xdc\xc0R\x86\xadE\xf3SU\x9bc\xebu<\x9d\x01\xb3\x1b\x95\xa4q\x85\xd6\xd9\xda\xec\xca4\xc8\x10\xeb\x00f\x0d82\xac\x00\xe6\xa2[\xce\x8e\x813\xff\xd1h\xd1q\x99\xaa/\x86\xf9\xc3)\xe6|8\xef\xdd\\y\xeb\x98\xb8\xb6\xcb\xd2\xca\x881\xdb%\xb9=+G8k\xd4m\xd6\xf6\xdajN\x8d\xae\x9f/\xcc\xd2\xda\x15\x1fh\xeb\xfc\x81\xc2/\x0fdK9*\x93{g\xb8s\x0e\xe2\xe9xv9C\x11\x9bQ\xc0{\xdd\x13\x07q\xfa\xe3\x06\x91\xc5\xf7\xb1\x7f\xa4\xa4\n\xe6\x0c\x0b\xe7\xf4\x07t\xba{l/^\xea7\xaa\x87I\xc1\xf43)\xbe&\x92\x82l(\xf5p\\x\xa7:\xb8\xed\xaf@^\x04\x00\xd2\x85y\xe2\x03=\x03B=\x03\xab\x8d\x1c\xf5RBl\xd4& \xf9\x8c\x08\xfa\xc4\x85}\x06\x9a)\xb4\xe6\xe9\x82?#\xc2?\xf1\xc5M\x1b\x02\x1a\x16\x04\xeaQE\x97P\xf6J0S\x1e\xb2;cm\xd0\xa6\n\x0b\x8d\x0f\x0cE\x86\x86b\xeb\x14\x1e\x1e\xeaTG\x97P\xd2%\x94\xbb\x06\x8dF\x84\x8d\xbaZ\xf0\xf3\x06\x8e\xda\xdb\xfb\x93\x87\x8ez\xba\xde\xa1\x04\x8f\xe2\xc2G\x03\x03H\x93\x9f$\xbc\xd3\x15f\xc2\xb2\x07\xee\x85\xbc\x86\x0c&\xb5\x84\xd0\x85\xbc\x83\n(\xb5\x85\xb8\x85\xbc\xe4\x0f*\xb5\x85\x95\x85\xbc\x84 ,\xb5\x86q\x85\xbc\x85\x0c.\xb5EA9_\x8a\x0f0\x0d[\x13\xec}5\xea\xd3t \xa5\xe1[\xc9\x83Mmc\xf1\x93\x86\x9b\x9a\xc6\xf6^\x03Nms\xc3\x1eCN\xcd3\xcbg\x08:\xb5\xceW\x07\x13vj\x9d\x1b?O\xe0\xa9m\xd2\xfd\x14\xa1\xa7\xd8CZ\xd2\xf0\xd3\x80\x00\xd4D!\xa8\x98jF\x84\xa1zt\xed\x18\x88\x8a_\x1d\xb7|\xdemd0*]B\xb9+\x004\xae\x8f\xff8\xe0\xdd\xc5#\x1d\xc1X{C\xc2 \xd5\x00\xf6\xa7\x94Ic\xfb\x83{\x0e\xc5F\xbe\x90\x1eg\xbf\xdcV\x87\xb6PXt\xc5\xc1X+.\x80\xc7\x1b\xbe\x13kET\x00\xeb\x01\x99\x8f.\xa1\xdc-\xa4\x15?\xdc\xb6\xe2|\xe8\x12\xcaN0\xab\x1d\x04\x87\xb8\xa2\xfb\x0f\xe0\x87\x1a\x046\x0c\x04\x84\xba\xa2\x15\x85\xae\x85\x10\x1b\xeez\xa8\x16\xf4\xad\x91^\x85m`\xe8!*L\xef\x0fj\xcb\xb8\x15t[Ux\x10lX\x18lx l\x90\xc9w\xb3\xa3w)\xf1\xea\xa3K(=\n\x91\xa1\xb1\xb8r\xa7 \x8f\xdd9@\x16SX#\xddQ\xbaf\xfaK(\x17\xfb\xbc\x84rZj\xf3S\x96\xee\xe7\xecp\xfe\xda;\xbe5\xea]\xd3Kw|\x06@\xd6\xc9<\xc9\xec\xa7N\xc39\xc4\xbc\xd4\x1bti7D\xd6\xf4\x9chV\xce\xaa9\x9b\xab\x02NkJA\xd9\x8e\xd9l\xfa1\x0cI~,\x18\xca\xbc?l\xaa\x97q\x07\xb0\xba=\xdeB\x90\x03\xb6\x17\x01\xad\xf7\x197\x8f\x1b{\xcdG\x9d\xc8Lg\xe3\x93\x94\x97\xc1\xc9\xf2\x98\xe4\xef~\xf1\xb1\xe4\x92\xa6\x119FQV\xcc\xb3b\xb7\x88o\xd1\xfe\xbb\x0f\xef\xad\x1dB~L\xa1h\xb5\xf1%\xf0&\xf3 \x89c\xa1\x89o.\xce\xbfh\xd3J:\xf1\n\xcf\xfa\xd2\xd2\xdaE@\xbd\xf8\xde\xa1\xaf\x1d\xb7\x8c\xcf4\x0bO\x92iv\xa9\x1bN\xeeG1\x17|\xed\xf6\x93na\x0b \xb7\x81\xbc\xc2\xf1A\xd91>\x93\xda\xa39\x82\xd6W\x83?\xff\xe3\x9aqmMIu!\x0c+6\xed\x0b\\\xc8\x1bCcU\xbc\xf3\x1a^\xdc\xa6\n\x1aT\xa7\xf5C\x05RI\xb8\xf4u\xc9+\xb9\xb2\x1d\x94f\"\xb0\xccy\x8eC\xc8\xa3\x02\xc0\xcc\xf4\xa8\xe0\xd0\xd6\xd1\x12\xd1\xa5pkq\xec\xa4\xd7d\xb4!g]{\xe7\x01s\xa9\xb3\x83hY\x18%pSq\xfe\x88Q\xc6\xf8\xf7@[W\x7f\xfe}\xe3\x0cz\x1e\xfe4\xa1;6{\x9b_$\xdb6\xbfh\x83\xf2\x8b\xb6\xa9&>:\x07\xf9h\x9e=\xd5\xa4\xa6\xd200\x9a\xc7Q\x9f~\x1c\xe0\x8b\x90\x1e\x07\x13\xca\x10\x17C\xcb\x91`\x82sz\x0e\x86\xb0\xab\xb3a\xac\xf6\x84\x85\x89\x02?\xe0b\x19\xe21\xf0\xfb\x05\xfaz\x02\x82\xfcl\x82_3s[\xf6\x85\x85\xbd\xfc\xec\x0e\xe4\xee\xb0s\xbeq\x9ao@\xb3\x9c\xec\x07\x9d\xe5\xad'\xf6g\xe6\xa2i<\xd5\xfd}\xbc\xec{\xa2\xef\x9e\xdb\x1b\xe0\xacg\xf8\xfe\xa7\xf6\xe6Q\xa5\x01\xac{N\x1ft27\xce\xdf\x0d`\xf6\xb3x\xf7\xf4=db\x01\xa2Z\x9e\xab\x81\x937\xe4\x14.wB\x03N\xe8\xdc\x1d\xa8q\xfc\xee?.N\xb7^w\xd5\xb6^\xf7\x0d\xf2\xba7}j[\x87;\xc0\xe1\xbeMj\x18\x1a1\xbeMjX#s\xc3\xe1\xf8\xdb\xa4\x861\xb8\xb8Mj\x80\x1ez\xd16\xa9\xa19\xc6+Mj\xf8\x9b_5y\xee\x89\xb5\xa9[_\x0b\xa7\xb6[\xe1\xc9\x92[\xea\x1c\xdc\x9b\xa2]5\xd2~\x15\xfc\x8b\xa2t\xb3/\x81]\xd6\xe7\xa0\x93\xb1\xe7*7h\x01\xae~\x8d\x1b\xbc\xc4\x85\xe2\x00\xbc\xc0\x85\\\xdfB\x87\xecwu\x1b\xf6\xa0\xacpmk-\x05<\xda\xa5\xed\xff\x85+\xdb\xe1\xdb\xe0_\xfa\xd2\x16\xe8\xbf\x00y.\xda\xbe\ntq\xfe\xa5\x05p\xeb\xb3\xd8\xfa,6\xcbg\xc1\xe5\x82\x01j\xeb\xb5X\x9f\xf1\x17x\xf0\xf3\xec\xf2$I\x94\x9f\x13\x18\x14\xe8\xb0\xf7\x0c@\xbf(\x027\xdb\xe6\xdb\x90\xed\xbb\x0d\xfc\xdb\x06\xfe\x0d\xb2!\xffoX\x91\xff\xd2\xb6\xa0h\xdb\x00\xbeN\x03lz\xc0\x152\x023\x0f\x0d\xf3\xec{\xa0m\x03\xf8 \xb7\xd2\xa8\xd7\x0c\x0d\xb93\xf0\x80\xdb\x06\xf0\x896\xfa<\x0d\xbb}\xf0\x00\xdc\x06\xf0\xb5Z\xdf; \x0f\xa8m\x00\xdf6\x80O\xb7m\x00\x9f\xeb\xaf\x01\x83y\x1b\xc0\xd7i\xdb\x00\xbe\xfaOPfn\x03\xf8\x1a\x9e$\x90\x13\xbc\x05@\xb9\xc4M\xcf\xd66xO\xb6\xad#|\x83\x1c\xe1\xff\xca\xfe\xeam\x94\xdd\xd0\x10\xa6m\x94\xdd\x1a\x99\x1b\x8e\x0f\xdbF\xd9\x8d\xc1\xc5m\x94\x1d\xf4d\x8a\xb6Qv\xcd1^Y\x94\x9d\xb8t\x9a\xd1\xc5\xde\xdf\xf2\x1e\x07X\x91E\xf5\xd3\xd7\xaelI\xf2*:\x8d\xa7F\xf9zOh!\x16\xfd\x0d\xbd'\xfa\xc2\x08\xe1\xfa\xacH(W\xfb\x181\xbc\x98\xb0\x15r\x81cg\xbf\xb1U\xe3\xcb?n\xecm\xad(,TU4\x1e\xd7\xcctXr-\x1a9\xe7\xb3\xa9\x9e\x98\x02\xbde\xa8t\xef\xea:\xb3\xf3\xda/\xde$\x19\x83\x0e\xb4\xdbK; \xee\xdbK;k\x831\x0f\x0d;(x\xa0m/\xed \x9e(\xd4k\x86\x86\x1cA<\xe0\xb6\x97v\xa2\x8d>O\xc3\x0e3\x1e\x80\xdbK\xbbV\xeb{\xc4\xf1\x80\xda^\xdam/\xedt\xdb^\xda\xb9\xfe\x1a0\xb6\xb7\x97v\x9d\xb6\xbd\xb4\xab\xff\x04e\xe6\xf6\xd2N;\x13@\x17v\xea\x8aN{@\xb6Y+\xdb\xcb:\xdb\xdf7\xe9\xb2\xae\x1bF\xbe\xcd[\x01\xb8S\xb7\xf7\x80C/Y\xb6\xf7\x80kdn\xf8\x06k{\x0f8\x06\x17\xb7\xf7\x80\xd0\xc3\xee\xf6\x1e\x105\xc7xe\xf7\x80\xa1\xa7C\xe5\xcb\x80\x0c)j}\xf0\xf2Q\x83\xf3\xbd\x05\xfa\xff\xe4o\xb6O\x81\x8a\xe6\xb1B_\xdb\x85\xdb\xbf\xf4\xa5\x99\x1f+\xbe\xb9z<\xc2)O\x90\xf5k\x9b-x\xdb\xe3\xe3\xf6\xf8\xb8Y\xc7\xc7\x7f\xe53^_U\x99\x93(\xcb\xe3\xbd\xbf\xc5\xff_\xb3\x93\xb5'f\xe6\x82\xff\x8a\x19\x148\x8ff\xf2Q\"\xd1U\xcb_\x17\x0f\xaf\xb8\x00\xd1\xa3\xec0KD:u\xe3\x1d4\xaf\x8a\x92Y\"\x18MH4{\x7f(\x7f\xaa\x8e\xfa;\x88\xbc\xbb1L;\xf1\xd7\x83\xbb\xc3\x1b\xb2\xff\x84\x9f\xca\xea\xe3Q\xf9x\xf4x\x94$\xf7G\x8f\xd1\xe7\xa7\xb2x\xf8p\x18\xdf\x1d\xfe\x8c\xef\xe71~\xaa\x1e\x9e\"\x1c\xc7\xb3\xd9\xa7\x9by\xf5~\x1e=\x91\xf7\xef\x18B\x1a\x1e\x0f)\xd9\xa51?|\xc9\xf8\x9d\x89\n\x01\xaa*\x1a\xb7\x11\xf8|\xf0\xf9\xb7O\x13|\xb8{4}\x7f\xb4\xfb\xe1\xe83\xde\xfd\xf4\x11\xff\xb6;%\x11>\x98\xec\x1f\x1d\x1c\x92}\xc4_l\x120\x9at4\x86=\xb8{rRq\xf7\x98\xdc>\x90\xe4\x1d\xba\xa4s\x9a\xe0=\xb6~US\x93\x96\xb4\\\n\xf5\xadi\x8c\xaa\xa2\xccb\x8aSI\xa8z\x83\x9a1\xb8/\xa1|\xdf\x1fw\xbe\xe8+\xc4B\xc8\xff\x05\xce\xcb\xa5\xc4\x89+m\xa5\xa5\x98\xf6\xed9\xa4\x96\x1b\xc7\xd6\xaf\x82\xbbb@qNN\x11\x9eNiBqI\x10\xbe\xc9 7Cz\x0e*\xa5\xce\xb1\xe5\x9b\x18\x90[=8\x11\x1e\xf4l*\x11\xd0vS\x9e%\x82\xf8yJ'U\x81&8\xbdUZ\xb1'*\xb5,;\xb6\x7fV7\x9e\xad\xab\\=\x0dF\xfdm6\x05F\x91Dq\xd2\x9d\xe3\\\"\x8d\xa3\x12\xe1h\xc0\xa6\xae\xe5\xe6\xb1\xfdss}\x8a\xaa\x8e5\x9f\xb4\x0d\xa9v\xbd4a\xd0[J\x10I\xb3\x92\xf8\x8d\x99.BZ \x1f[\xbf\xda\xd0\xb9\xc7 \x8d\xf9\x12\x96)g|\x7fh\\\xbc\x08\xa8\xfc\xa2\x90e\x11\xbei2~+\xac/\xed\x90\xd6\x13\xfa\xa6@\x05\xbdIqY\xe5\xfc\\\xaa\x06\xf7\xc0\x83Yr'\xe8\xdc\xd8\xb7\xca\xbed\x9bj\x8f\xa6L\x84q\xbe0K\xcf\x0b\xa6[qS-.g7\xb8f\xbb\xe2\xe7l\xc6\x07J\x8azi\xa32[\xa0\x84\xdc\x93DU,\x15\x02\xc7\x03I\x9d\xd5\x85\x8d\xfa\xae\x0d\x9a;\xb2\x19\x9f\x11N\x97\xea\xe8\xee\x13\x97|\xef\xcf\xb3\x98N\xbda\xf3<\xaa\x9c\x9d\x8f\x0c\xdbX\x1d`\x05\x06\xcd\xd3\xa7w\xe5U\xa9\xf0(\x963\x8dwB\xb9\x0b6KM\xb7\xb25L\x975\x86\xc95\xe6\xfe\x97g9V\x05lt\xf8:8\xd1L\x92GJ\x91U\xca8\x86\xabr\x96\xe5\xf4IH\xc4\x9cD\x84\xde\xfb\x16B6\x9d\xee\nq\xc3\xe7\xa5\x9b\x84\xaa]\x0c\x0e \xfc\xda\xeb\x9a\xaf\xbb\xeb\xe0qol>\xa4FubS\xf9\xb0\xd9\x17\xf1K-\x82\xbck\xd3\xf0\xa6\\\x968\x8dq\x1e7\xaa\xea\n\x0dVp\x7f\xe4\x1c\xe7\xb7\x96+\xd2\xba\xa9_{\xf3gr\x82\x8aj\xb1\xc8r\x86\x9f>@r\xcc\xf9\x8e`\xc2\xa8,s:\xa9J\x82\xe6x\xc9\xfd\xf1\x1e\x80\x13\xc2\xe4uz\xc3\x0b3s.H)\xafT#\xdb\x1b\x11\xb3D,\x01?f\x93n\x9fk.s\xaf\xf3,I\xaaEhZC\x92\x1d>\xaf\x7fI\xb1\x8f\x93Dom\xb5\xd2k\x970-\x0b\xbd\xc5=\xc0\xd4\xa5\x9c\x12\x96\x0d@o\n%2\xa7\x94$\xb17\xe5HLGRd\x88\xa4x\x92\x88\xd39\x0fD\x94:\xe8\xdf\xb9OY (\xa0\xfa\xe6\xbevj+\x1a\xed\x93\x01c\xdb%\x1fU\x85\xbc`\x94gY)\xee\x06H*]|L\x15% \xe1&N}\xf7\xe0\xc2Q\x95\xf7\x16\xd1\x96\xf2\xc6\xc2\x83\xa8r\x95^\xd3t\x9a\xd9\x97\n\x8c\x92\x06\xa0\xda\x0fg\xa6\xc8\xe0IV\x89X=\x1a\xef\xd5\xae \x07\xc0Z\xc9X\x7f\x10ty\x85\x9d]\xcf\xe9&n0\xd1\xbcx\xe2\xb7\x93\xf8\x81\xf7\xd6\x8e\xb1\xc6\xbd\xadk\xb3k\x8e/r2\xa5\x9d\xec\xa7\xba\xad\x99\n9\xbe\"F\xfe\x17\x93\x8e:/\x8a\xe8\x1f\x07\x89\x11\xff\xa8\xaa\x17\x98\x16\xafp\xb3 \xa8(6\xbe4\xa9\x06\x80\xf3\xf3\x83\xad\x80\x15\xd9\xd0\x97Bu\xcd\xcd\x8f]\"\x1cB\x8c\x80\xeeI^\x8cH\xdb\x08S\xdc\x976s\xd2\xf8\xbfg\xe4QQ\x07\xa6\xcaX\x00n\x81\xca\x0e\x87\xe3IU\x13Z@\xb4:\xe04\x04\xae\xeb\ne\xcd\x82VR\xb1\xe2\x9c\xafe[K\xd4\xfc\xf2\xd8\x07\xa5q\x13\x05\x92\xdbjN_Hx\xc3\x99\x02\x11\xefPX0\x96\x18\xff5\x82\x90X+oZ\xa865\x82\xfe\xec\x01gU\x93pn\xbd\x80\x82\xd0\xe3\x8e\xa2%\xe0\xa4\x8e\xb0\x14\x06\x91:\x82\xd2p\xac\x966\xd1\xeaT\xd4\xa5\xd2\xe7\xcdXWd\xad\xc4\xc6\xc5\xf2\xa0Z\x08\x8f\x80\xeaQ\xbcz\x018\xbb\xc0\xad\x0e\x8fk\x18w\xdc>\xcb\x8f{\xc9\xee*vPR\x92A;\xbb-Q\x0f\x0f\xd8\x7f'\xa2<\xedQN\xb4\x9f]2\xde\xb5\xf1\x90:4\x86\xd9\xe3w\xb2\x01\xdcl\xa0\xc5$\x1adI\x89\x16tj\xa9\x06\x9cc\xf9\xe31\xe2\x18`\x91\x0cP\x0f\xb8h\xe3F3\x0c\x88g\xe8\xc9HXL\xc3\nQ\x0d\xc3\xe3\x1a\x86F6\x0c\x8dm\x18\x1c\xdd0(\xbeap\x84\xc3\xc0\x18\x87\xe1Q\x0e\xc3\xe3\x1c\x06F:\xac\x1a\xeb\xd0O\xc2\x8b\xe6\x8cw\x00\xf4\xb5\xf7\x1c\x1a\xf1\xf0l1\x0f\xcf\x1d\xf5\xf0\x1cq\x0f\x1b\x13\xf9\xf0\"\xb1\x0f/\x14\xfd\xb0Q\xf1\x0f\xaf#\x02b\x03c ^6\n\x02\x1e\x07\x01\xbd/\xd3\xbf\x1e1\x16\x02n\x0b\x8e\x14\x0f1(\"\x02\x8a\xa5\xbe\x1b\x94\xce\x12\xc2+0\x88b\xd7\xa5H\x8a\xc7\"\x8e\x81\xe7Y{C\xafQ\x18-\x9ex\xe9C\x1af\xb7\xc2h\xe3 4eV\xb3\xcf\xbc\x90\x97\xf7\x86\xe4\x91DUp\xbfJs}\x87\xe1G#\x9c$K\x14%\xb8(\xd8\x08\xce\x8e\xb2\xd3\x08\xe4\xae\xe1L\xab\x0e \"{\x95\x92D\\\x9e3\x0d\xcbTz\x94\xf0\xda1Z\xa6\xc4\xb8\xc4^x\xdd%\x1a<\xd4\xe2*\xf6U\\\xedG\xcf\x17~\x9c\x8e\xd1d\xb9\x83\xaaE\xac\xff]\xd29)J<_\x14;\xda\x1d&\xaa\x8a\xec\xf8\xe9\xe1\x19Z \x16\xe9\x88\xd3\xccM\x06\xf8\xc4\x0c=/\x0b\xcf@|\xcd\x88\x08 B\xe0\x02B\xc6\"b`w\x19[B\xa0\xc5\x1e\x93\xf1Fd\x8fu\x11\x95O\xf8\x06\"i\x99/y\xe1:\x89/\x88\xa6\x89\xa7T\xb5h=(\x82I\x01$O\xd0\x0e?\x8109\xe4\xea \n8\xa4\x03\xbf\xbc?\x93+\xf0\xd5La\x82\x8bR!\x0d\"lC\xe7\x91\x87\xcf\xd1\x11'R\x8a\x0c\x18\xb1\xae\xa2\x0f\xcdf\x94\x80\xf0\xd4\x88\x16\x0d\xce\x19f+K\xdb\xa5%\xe7\x04gh\x81h\x1a\xe5\xdc\x9a\x07\xf8\x8f\xb8\x0c\xe7\xb5\xaa\xc4\x8c{;8\x0bW4\xdbZV\x84I\xb7\xc4\xc3\xf6\x0cD\x10\x0e\x97\x004K\xf7\x04\xbd\x88\xdc\xfb\x8f=0\x0cO\x98\x8a\xfb\xc6\xb4k\x81\"\xbc\x10V\xa65\n\x87\xed@/(\xbd\xce34\xc7\xb7D.u\x955\xc7\xd4\x95\xdc\xd8d\x89\x1eH\x1e\x981\x1c\xbb~\x00U\xba\x97\xd2\x80\x8a\xeb\xc7\xf8\xb5-\xa5\xad\x0b|\x83iZ\x94\xc6\xe9\xc4 \xaf\xe9Jg\xbdp\x1a\xf9\n\x94_\x19nT\x9e\xa2>\xc3\xf7\xc4\x18Ir\x98\xc7\x88\x95\xea\x88I\x89[,\xd0\xf4>K\xee\x9b\xf9\xed\xed\xf6\xfd\x8c\x9d\xa4\xff\x92\x9cn\x95\xb4\xbdhD\x04#,#\xca\x1aY\xfc\xedV\xc7\x97a\xc5R\x91\xb7\xad\xf8\xcbs\xea\xe7\x19\xc7\xcb\x06\xa0\xbe\xb4\xf1\x048\xc0\xa7\xb5\x05nX\x84\x835\xc6\xc1o\x0e\x02l(\x88\xfd\xf4\xfcWX\xed@\xacF\x8d\x03{\x00C\xb3\x0e\x87\xdb\xb24\xe6\"\x14\x99\xb0V\x9a\x02B\xae\x83\xe6\xd0\xf0\x04\xd4\xa8\x9a\x10\xfe\x0d(>mC8\xd3\x0dz2\xbe\xd4\x1c\xf2\x82+\x1b54`\x1c\x92\xff|\x1d<2\x90\xad\x1d\x12\xc67\xc9'/\xbc\xe6&\x03\xf1\xc9\x1f\xb8\x01f\xce\x10\xaaG\x88\xdd\xe8\xb7kFZ\x08Ch])x\xc3\xb9P<$\xab A\x9f^D}\x891\x81\n\xab\xdaf\xce\x89\x88>o\xb4\x91\xa1\xfbu\xe5Y\xc8L\x82t%\x02\xeaK\x84 \xa1\xd7\xa2\x01\x97\x06\x82\xcb \xb4\x9e`l\xd1\xf4L\x85u'z\x1e\xea\x00\xc7\x99\x16\xd2\xc35\xa9 \x0c\xc8'\x986E\x9b\xc7\xab1t+BF\x96\x03\x90g!\xbd\x81\xfa\xb1j\x18\xfd\xa3h\x10\xd4s\xb5\x8c\xbcH\x86Q\xbe\xa2>A\xf6%d'_]l\x00\x82\xc9\xe1\xe4X\x81\x8ew\xe2\xb2G\xa9\xad\xf9\x00\xd6\xa6i\x04[\x03(B\xa0\\G\x16,\x9d\xfa&x\xa1\x85:\xae\x8b\xa0r\xeaL{XAm\x0e\xa7VVLm\x80=\xf8\xd4\xfc\x10\x92A\x1b\xc4\xb3.\xe2\x92\x7f=\xc0XR\x9a\x06\xf32\xa4\xb8\x80\xac\x1b\xce\x13\x88\xd2\xf2\x82[\x85\xfa\x91\x16\xcep\xeaWT\\\x80\xe5ec\x05\x04_\xe9t\xfc\x8bW)\xcckU\x84UiU\xed\xbbJcTds\x82\xc8c\x99\xdbo\x86\xcd\x07\xb3\xa7Y\x8e\xa8%S:\x8c\x93\x1c\xb0\x10A\x14K\xe3E\x08]JQ\xfdBWSD\xbc\x98\xa2\x05\x98Q^\xd1SLQ\xfe\xaa\xbbD\xc4\xc2x\xde\xc8\x7f\x81\x8ck\xb9\x8e\xa4\xb4\x9f=*c\xaf^\x1cu\x98\xb4 \xf5\x1dB\x7f\xf2\xb2\x032\xe9\xdc\x0bKF\xe6[Ja\x9c$E\x86n\xd3\xec!E\x98\xad\xdfo\xcc\x10\xf2\x86k\xbc\x84\xeb\x18\xc6\xb1:\xf1@m?u\xef\xa12\x0eZY\x05\x01\xd1\xa9y\x8d\xde\xf2\x9a\x95\xb4\x9c\xa1)MJ\x92\x93\x18\xdd\xde+\x0d_\x92\x1c\x97Y\xee\x0e\x1b\x931\xe9^v\x81\x08\x94\x80\x94\xbciX\xbe\x8a21\xd5\xde\xd2\x0dZ\xe6,\x9b\xb7Q\x19\x8f\xd3\xcb\xa6S\x19\x11\xd7|=\x02\xca\xac\xe0\xa2\x18\xcd!\x03L\x97\x00.E\x04\x9e\x06\x84:7\xec\x9d\xe0F>\x1dj\xcb\x06\xa1\xc9\x89\xf5\xfen\x86\x8b\xd9\xf8\xa42:\x18dNDj\xd4hQk-\x98F\x11\x12\x8ah\x10^\x80)\x90\x05\xbc-\xb7\xd8\x1a\xf9\xb7l\xe0k\xf63\x7f\x14\x13k:P\x8d\xd7\x80o\xcef\x94\xcd\xe7Y\xca\xc7\xf3G\x87\x8a\xc7;^\x84\x1dbh\x11\xa8\xa6\xc8\xa8oM\xf9;[\xc1\xcbe\xd5t\xe1i\xf4V\x80\xfd\xb5\xbe\xac\xe5|\xda\xd3\xac\xf1\xde\xda\xaa\xc6D/M\xef\xb3[\xcfZ\xa2\xe9\xa2*_m\xea\x16d\x17\xf4\x9ax\x88\xd1\xd7n\xdf\xd9\xb4\xcbgQe\xcdr6\xf1 Mo\xd1\x04G\xb7\xb2v;\x00\x12\x8fV\xe0I\x18|\xd1\xf8}]\xba\xc6z\xd8\xd9\xd5\x93\x05@\xf3@4\xf8V\xb1\x88o\xa9\xe8\xebh\xf0o\xa0\x14\x8a\xafE\x89' -f$Va\x0d\xa1\xf0q\x88\x1c\xef\xc9\xa6\xbe\x94\xdb\x05>%\x11O10\xac\n\x00<\xc6(t\x9eg\x8b\xac\x80\xf3@\x8b\xe5\xf50b\x9ags\xbew9NS\xee\xdb+\xf3*\xe2qE\xdcF\x9a\xe3\xbc\x98\x05\xc2\xd7\x11*J\\V\xc1\xad\xdf\x8f\xff\xa7:\x8b\x85N\x85\xd9\xc4\x05\x1f\x17\x91j\x19*\xa4A\x13\xa0\x13,~V<\x82HD\xcb\xb3)\xe6\xf7e\x8b*,\x9e{\xf1\x18\x9e\x05y\xf1\xf5\xcb\xd9\xc5\xef\xd7\xa7\xdf\xcf\x7f\\]_^\x9d\\\xfd\xb8\xec\x95\x99\xe6\x82q~qv~v\xb9\x02\x00\xf1-\xd8]g\xd6\xadJH\x7fI\x1ed\x1ed\x06\x02 \x8c\x84*@j\x08\x8f\xfb\xc2 \x8d\xf7\xaaT\x9c\x17\xc5\xbaek\x07\xd090\x95v\x1e\xab\xbf\xb6S\xbf\x8c\x1d\x93\"\x9cOh\x99\xe3|YK0^_P\x9f\xf9\xc4V\x18\x8e\xa3\xf8f\xc7P|\xb3\xe3G\xc5\x86nX`\x8b\x9c\xdc\xd3\xac*\xf8\xab\x9a\xcd\xadn\xa4Kyq\x95\xc2\xe6*\xc7\xd1\xad\xf0\x8d \xcbI\x9f\x00\x89\xd2I\xd0S\x19Hz\x99\x83t\xeclF[4\xa3\xe4^\xa0\xdb\xb7\x93\xd3?\x82\xdd\x0c\x9d<\x94\xcea\xda\xd81\x1adR\x9c\x9d\x1b\x1a\x18Ui\xf3MtW\xeb\x99\x1f\xdf\x9d\xd26\xf3\xd8\xb7\x86\n#\xc6nb\x1a\xb4~9j\xc8\x90l9\xb4\x87d\xdf\x8c!5I{Q\x96\x164V\xde\x07>\xf8-\xe5\xf7\x17\xb1xDkN\x0b\xfeF\xbb\xd4GY\x8eb\x92\xe0%\x89\x81)\x8a\x0e$\xd9\xe2k#\xc9\xbe9\xf9R_-Z1g2\xc3\x15\x8a\xae\x1aT\xe8\x89C\xd5\x99\x90O$\x8d\xf0\xa2\xa8\x12\x8d\x92\x94[\xfc\x14\x0b\xf1#\xa2\xda\xf2\x00d\x1b\xc3p\x148\xbc-~E\xf5\xcb\xb7\xfc\xc9\xecl\xaaX\x96\xde4\xc4u`\x96\xd8O\xc5AFu\xa8\xcb\nS\x98\xe9\xf0:j&\xb5\xb1T\x0c\xac\xef2\x00z\xb6\xb0\x96W\xb2\x96P\x92\x97G\x0ep\xe1\xd9>\xd1W\"\xd9\x94[\xae|\xcaqY\xe2h&F\xd3\x19\xadlo\x12\x1c\xb9\x0ba7w\x8c\\\xc7\xfc\xec\x1eL\xdcn\xb0Xb$9\x97\xa5\xd2\xa1!?\xcbl';\xc9\xdaq5J\xa0R\x13Z B\xc9\x88Dr\x02l,\x815G$\x81|xk\xdc(z|g\x90\x91\x9c\xd0`\xe0P=\x0d\x9b\x1c1\xd4\xc6rx\xa8\x90\x86\x04a ,0q\x13\xd82F\xb8j\xbdl\x80\xec\x11\xce\x82\xa0or\x13\xf8c\xa0\xaa\x18$\xbd~\xfc\xd3Z8\xf4\x02\x11Q\xc6\xc8\xa1P\xa81v\xca+\xcc\x86\x00P\x05\xd2\x12\x08\xa8)\xd06\x19B\xb6g\xa0.x:\xd8&C\x0c\xe2\xd5\x18\xda\x05\xa1m2\x04\x9c\xf2\x91\x17\xc90\xcaW\x8c)E}\x92!\xa4\\\x1e3\x15\xc2\x02r\xbcD\x08i_?g\x1aD\x93\x9e\x11,\x0b\xa0\xe8\x80\xf2\x1bup\x0c\x9cN\xfc\xfb\xa0_\x02Dk\xb2\xc3*iSx\xb4\xb2\"j\x82\x03sh-\xf1\xeb\xeb\xe7\xd6\xba\xd2\x1e\x06r\xf1\xb5\x1c\x81,\xf8Z\xceA^H#0,\xa4\xcf\x81l\x1aJ\xff(\x9a\x1cJw'\xa3b\xcc3\x92\x15\xb8\xf3\xac\x04\x02\xc5\x05.\xa2\xb1\xfb\xcc\x14$\x19\xa4\xe9\x10P\xdb\xa1\x9e\x89\x7f\x08\xbe~\x10|\xab\xa1\x9e\x13\x83z$\x02\x82\x01\xf5\xd5\x85hXB \xdaX\x0e\x86td\x10`\xd9+\xb5\x0b\xc1\x12\xa2^)/\x87i\xd0.(\x8b\x16\xed \xa1\xdf\x1c\x84\x94\x07\xea\xc7\xf2\xd5\xf8\x18T%Ax\xbd\xd3-Q\xef\xa4C\xf4\x9c\x1c\x19\xe1\xb0\x08X\xaaC\x93\x10\xc5\xb5\xb0;\x07Q\x1e\xe7\xd6\x91\x82(@{\x92\x0d\xe5\xd8\xf2\x1a\xb8\x9b9\xc8s\n\xbb\xf3\xdc\x1a\x84\xffJ\xc4\xd1E\xd9bY\x9bi\xe2\x0f\xcd\xfc$\xc4\xb3\x19]C\x06\xf4\xb8_{\x07\x9d\xdf\xc1\x15 \x99\xcf\x8e\xab\x1b\xabm\xa8fR(\xc9\x1dD\xde\xdd\xb8\xf6\x94\xf8\xe9\xc1\xdd\xe1\x0d\xd9\x7f\xc2Oe\xf5\xf1\xa8|\x90\xc4\xca\xcc@\x02\xe5X\xec\xac+\xec\xf5f\xe8\xd1\xa7\xfd\xf7\xd3O\x93h\xf7\xe3\xfe\xc7\xdfv?\x90\xc9\xd1\xee\xe7\xa3\x83\xe9\xee\xe1\xc1\xe1\xc1\xc7\xdf\x0e\xa2C\x12\xb5\x18*\x06[\x89\xa5\x02\xc4\xc1\xdd\xa3\x93\xa9\x9f\x8b\xbb$\x9a\xbd/\x1e\x1f\xd2\x0f\x1f~\x1e\xed\xff|\xba)?\xe5\xc5\xec\xfen9\xcd\x7fF\xb9\x8b\x1c\xfe\x9c2cB\x96&\xcb\x9a\x05\x88\xf2\xc4=\xe3\xfa\x00'E\xe6\xc2O\xbeva\x15\xd7\xee\xb3rp2e\xc8\x85yz\x15\xd9[\x0d\x9f\\\x99\xa1$\xcbn\x99t\xb6@\x91\xc9>\xc2!\xe9\xc3\xc3\xf7\x0e\x00lU5\x86\x12Bj\x9a\xe0\x1b\xae6\xf4\xb3\x01\x99\xfa\x19'\xc1\xad&\x05\x10\xa9\xb9d\x84PAj\xed\xa2\x8ej\xc5\"K\x0bk\x04\x87FG&\xb7?\x13\xf1f\xb2}\x88~\xffr/V\"\x9f<\n\x84\xbcG\xf1\xb1\xa8o\x0d\xe6&^\xfe\x90c\xef\xbc\xcc\xe4 x\xb0O\x88H\xc5u\xa7\xd5\x80F$\xb25\x18d\x86\x9d\xf9\xbd\x1aF\x8a\x96Y\x95K\xd3\xa4I\xa2\x1f+\x99Nu!\xb9\x83\xea\xe8:\xf1\xdf\x8cj\x19\x91M\xd0?+\x92/\xf7Tq\xdd\x8b\xf3/-`\"\x93\xb3\x1e^\x85\xd2\x1a?k`s\x92\xa2*%\x8f\x0b\x121\xebJ\xbc\xcdd\x9b\xa7\"\x9a\x919nN\x8b\xd3\xd8r\x1bZ|\x80\xee\xe4z\x04h\x94\xc5\x16i':\xb8j\x8c\xabS)M\xcb\xf7\x87\x1d\x069\xeas{p\x88I\x89i\xb2!E0X\xf7\xeb*w>\x0b\x13TF~\xdf\xafS\xfdB}\xbf~\xf5\x9b\xf1\xfd\xfa\xe9\x97\xdd\x03\xddt\xb1\x92A\xcb\x0bvaU7\xd7*\x1e8/\xdd\xf2\xf1\xda\xc5\xe0\x00\xc2\x83$\xae\xf9\xba\xbb\x0e\x1e\xf7\xc6\xe6C\xbdQ\x9b\xca\x87\xcd\xbe\xa8\xfc\xdd\"\xc8\xbb6\x0do\xcae\x89\xd3\x18\xe7\xb1\xa90\xa4\x06\x13^\xc49\xceo\xbd\x8f\xf6\xab_\xfb\xb6\x03\x9b\xb0\xa2Z,\xb2\xbcQK\x92c\xfeN^e\xe3\xb2\xcc\xe9\xa4* \x9a\xe3%w~z\x00N\x08\x93\xd7\xe9\x0d\x89\xd1d\xc9\xb9 \xa5|]/,K#f\x8909W\x10\x8b/N4\xe9\xf6\xb9\xe62\xf7:\xcf\x92\xa4Z\x84\xa65$\xd9\xe1\xf3\xfa\x97\x14\xfb8I\xf4\xd6V+]^\xed\xa41\xa2ea\xbfLm6u\xf5\xa1\x84e\x03\xd0\x9bB\x89\xcc)%I\xecy8^MGRd\x88\xa4x\x92\x88\xd39\x13\xb5J\x07\xfd;w\x04\x0b\x04\x05T\xdf\xdc\xa7\xfa\x11\"E\xa3}2`l\x13\x17s\xfaY}\x94gYi\x94\xdb\x15\x17uQ\x96$\x84\x9b8\x0cm\xa9\x03\x1c\x00\x19\x01|\x15\xf1\x9b\x89\\\\Ux\x10U\xaeRO\xe8%\x8c\x92\x06\xa0\xda\x0f\x17\xaa\x1a\xe6\xf6\xad\x18\xd7\x03\xd6?\x87\\^ag\xd7s\xba\x89\xbb\xbe\xf6\x95\x8b\xbdh\x8e\x872\x08\xd7LE( \xb0\xa6\xc8\x93F\xa5\x81\x89\x7f\xf83\xa8\xd6D\x90W\xb8Y\x10D\xbe\x9a+!\x0f4\x88\x1f\xeed\x1d\x04eC_\nq(\x81n,\xdaF\x98\xe2\xbe\xb4\xad\x94\ngY\x00n\x81\x1a\xce-\x87\xe1\xde\x85\x16\x10\xad\x0e8\xdd:)\x96+\x945\x0b\xda`\xae8h\xce\xd7\xb2\xad\x03 \xe1\xde\x0b\x1e\xd4\xbeO\x82\xc9mh\xfa\xf7\x8b3\x05\"\xde\xa1\xb0`,1\xfek\x04!\xb1V\xde\xb4Pmj\x04\xfd\xd9\x03\xce\xaa&\xe1\xdcz\x01\x05\x01K\xb3\x1e\x7fa\x8c\xb0\x14\x06\x91:\x82\xd2p\xac\x966\xd1\xee\xfc/\x9f7c]y\x18\x12\x1b\x17\xcb\x83j!<\x02B\xe1~\x08\xc1\x05s\x86\xd9\xca\xd2vi\xc99\xc1\x19^\xf6:\xca\xb95\x0f\xf0\x1fq\x19Np4\x933\xee\xed\xe0,s\xd4lkY\x11&\xdd\x12\x0fK\x04^h\xa3H\x01E\xb3tO\xd0\x8b\xc8\xbd\xff\xd8\x03\xc3\xf0\x84\xa9\xb8oL\xbb\x16(\xc2\x0baeZ\xa3p\xd8\x0e\xf4\x82\xd2\xeb\xc1\xb4)\xda<^\x8d\xa1[\x11\xda\xbe\xbc \xa7|\xe4E2\x8c\xf2\x15\xf5 \xb2/!;\xf9\x9dWW\xc68kY\x81\x8ew\xe2\xb2G\xa9\xad\xf9\x00\xd6\xa6i\x04[\x03(B\xa0\\G=^\x1f\x0b_h\xa1\x8e\xeb\"\xa8\x9c:\xd3\x1eVP\x9b\xc3\xa9\x95\x15S\x1b`\x0f>E\xbd\x1ev\xda \x9eu\x11G\x80\xd7\xc4,\xbdZ\x11\xeaCy\x19R\\@\xd6\x0d\xe7 Diy\xc1\xadB\xfdH\x0bg8\xf5+*.\xc0\xf2\xb2\xb1\x02\x82\xaft:\xba\x9f\x00\xd3\xbe\xab5\xbc\x01f\xc5I\x0e\xe8y\x19\xac\xfeE#\xbd\xf9-\xb5\xad \xb3Ff\xfb/\xdcy\xdb]\x18b9\xee\x07eVpQ\x8c\xe6\x86\x01&I\x00\x97\"\x02O\x03B\x9d{\xf5NH#\x9f\x0e\xb5e\x83\xd0\xe4\xc4z\x7f7\xc3\xc5l|RK\xf9T7'\"5*\xb3\xa8\xb5\x16L\x9e\x08 E4\x08/\xc0\x14`\x11\xaef\xb9\xbb\xd6\xc8\xbfe\x03\xf3g\xc9\xfd\xb1K\xac\xe9\xf04\xb6 Z\xb3\x19e\xf3y\x96\xf2\xf1\xfc1\xa1\xe2\x81\xa7\x17a\x87\x18Z\x84\xa7)2\xea\xbb\xd22\x83\\)\xab\xa6\xabD\xa3\xb7\x02\xec\xaf\xf5\x15-\xe7\xd3\x9ef\x8d\xf7\xaeV5&ziz\x9f\xddz\xd6\x12M\x17U\xf9j\x13\xb6 \xbb\xa0\xd7\xc4CL\xbdv\xfb\xce\xa6]\x94 R\x05\xc6\xf9+.4\xbdE\x13\x1c\xdd\xca\xb2\xec\x00H\x1e\x95\x8fG\x8fGIr\x7f\xf4\x18}~*\x8b\xbb\xc7\xe4\xf6\x81$6\x8c\xc3\x05\xa8\xc6bh\xab\xdcTM~\xb3\x16]\x80T\xf1\xe3\x83\xbbG'\xb1\x9f\x8b\xbb$\x9a\xbd/\x1e\x1f\xd2\x0f\x1f~\x1e\xed\xff|\xba)?\xe5\xc5\xec\xfen9\xcd\x7fF\xb9\x8d\x0b\xc1\xcb\x98\x91\x98\xd0\xbaz\xd1\x1c\xc6w\x87?\xe3\xfby\x8c\x9f\xaa\x87\xa7\x08\xc7\xf1l\xf6\xe9f^\xbd\x9fGO\xe4\xbd\x0d\xb2\xccnQe\xad\x1c&\xb7\xe0\x82\xaf\xe2=\x8c\x0d\xed\xd1\x04/\xa6 \xbe\xe1\xd2R\xd7\xc8\xcf\xd4/=\x9aA\xc3h\xdcM\xe8CI\xb1\xc8\xd2\xc2\x1a\xab\xa0\x90\x90B\xf4y(6E\xfa@\x82\x15\x88\xbe\xf4\x92G\x81\x82\xf7\x949\x16\xbd\xad\xc1\xdc\xf4\xca\x1fr\xec\x9d\xf7t\x1c\x04\x8fc \x11Y\xf3\xd9\xa1\xd3\xd0\x88D\xb6\x06\x83L\xaa3uU\xc3H\xd12\xabr\xa98\x9b$6\xb0\xe2\x85]/$+P\x1d%&\xfe\x9b\x91(#\x8b \xfagE\xf2\xe5\x9e\xa8\x04{q\xfeE&6\xd6\xb0U\x08\xe8/\x8e\xa1NRT\xa5\xe4qA\"\xa6\xd8\xc5KB\xb6I(\xa2\x19\x99\xe3&\xcf\x9dz\xde\xad\xe3\xf9\x00\xdd\x99\xf3\x88\xe0(\x8b-\x9e5\xd1\xc1U\x11[\x9d\xa6hZ\xbe?l\xfd\xd5YM\xda\x83CLJL\x93\x0d)\xde\xc0\xba_W\xb9\xf3\x11\x93\xa0:\xe39\x8f\x83{[\xcf\xaa\x0b\x9c\xe39)In\xe0\xbc+\xd2`k=pA \x96l9#z5\x1b\xd4\xf2\xc3L\xd7\xfc\xe4h\xe1\xa4\xc8\x18n\x06;$f-\x8cj$<\xa8I^\xb4L\xd7\x1av\xd9*\xb4\x85i*\xb2|p\xd9\x0e\x86\xe1\xaf\x8dL\x88s(=\x8a\xba\xc4W\xa38\xb8\xb0c\xf2\x0c7\xf2\xd7\xf5\xa44\x19\xd5`P=z\x9bS!\x8al\x94h`'h\x82c\xd3\xf3\xac~\x84\xe8\xf4\xd8\xa4\xf8\xca1\xe9\x1c \x93\xfa\x07Z\xce\xb2\xaal\xce\xbfm\xb36\x18z\xe2\xe4\xa6\x86\x97.\xd1\x03^r\x0d\xa3J\x81\xd5V\xd1\xdb\xc6\x0e6\xb9\x8e;|7\xf9\xfd\x8b\xd1\xc7\xc0\xed\xd7\x06rW\x0f\x19\x9b\x1a\xfe\xfcK6\xf5\xcchs{\x99SindM\x1a\xfbQ\x9c\xa5oJ.\x02\xf8\x85\xbf,w\x83\n<'-\xb1m\xe7\x17\x87\xfe\x96\x89]\xc5mch^\xfc\xa9\xc3M\x84\xdb\xc2Xu\x13\xdbN\xae\xa68#\x05J\xb3R-+TT\xd1\xac\xcb/\x0fZ-L\xf83:\x93\xac\x9c\x19KxR\x95u\xa4\x83\x06\x14\xd3)\xff\xa4\x96pa.\xd9\x7f,\x95;e\xc7X\x00\xf5X\x85|\xae\xa7\xd4\x05\x85\x0c\x14/IY[\xe6\xaa\xe3^\x96w,W6\x0f\xb9H\xdfl\xd8\xe7\x8d\x9b\x04\xd9W#)\xbe\xeaJT\xa7qm*\xa8G\xc0\x94qgX)o\x0e\xf7\xf7\xdf\xb8]CF*\xeb:}B\x9c\xb2\xc0\x0d\x95\xd5O'mt\xe1\x1e\xd3\xf5:#\xf5(\x12\x9aeI\\\xc8\xcb*\xad\xe6\xfa\xde\xa0\xad~\x9d\xe5sTz\"eB~\xa0\xd0e\x19\x82ys\x80\xb1\x07\xe1dG\x84~\x88\xc2\x99\xa7\xbf\xd7u\x0f\x84\xfc@\xe8t\xbeH\xf8\xe3p\x05*\xe2\xdbw'\x81T>\xc4]{\xf9\x14G\xc2\xd3\xc9+J\x8a\x07\xb1DO\"\xf6\x9a2\xd1\xdbV~\xb3}\xc9\x8ay\xe6\x1a\xac\x00g\xbe>/3k\x01St\x13V\xf5\xfd\xb5\xffV\xbd\xd1S\x1c\x15xe\x0b\xa2\xe6\x02'I\xf6 \x85\xb3\xbch\xf6\x81\x8b\xdc\x97\x99\xfc)qO4\x97\xcfS\xaaZ\xb0\xecHp\xcf\x88\x16\xde9\xa2\xe1u\x95\xc4\xc4\xf67$\xdf\xaa\x14r\x7f\xc5\xaf\xd5o\xf4\xcb]\xafk\xbeR\x82H\x9a\x95\x81\x1a\xcf]\x84\xb4@>\xb6~\xb5\xa1\xc3K)\xf2%,\xca\xdc\x88\xfd\x01\xa9\xc8\x83\xf4\xf3\xcd!\xcb\"\x1c8b\xfcVX_\xfa\xeaAO\xe8\x9b\x02\x15\xf4&\xc5\xe2%\xe6B\x0f\xee\x81\x07\xb3\xe4N\xd0\xb9\xb1o\x95}\xc96\xd5\x1e\xaf3-\xf8\xc2,=/\x98v\xf9\xef`\xe9\x98>\x9a\xed\x8a\x1f\xb4\xe53\xc8\xf5\xd2Fe\xb6@ \xb9'\x89<$\x84\xa3\x81\x95+D\xd8\xa8\xef\xda\xa0\xb9w\x92\xf1\x99\xbb\xe6\xe4\xd1\xdd'.\xeb\xc7\xdb\x97\xee\xb7\x97\x85q\xcb\xcfG\x96\xa7\x1f\x04\x06\xcd\xd3\xa7w\xe5U);\xadq.+\xbc\x13Z\x94\xa2\x90\x94y\xe1\xea\n\x06d\x98\\\xe3\xc8\xff\x18\xc2\x88\xc7\xaa\x80\x8d\x0e_\x07'\x9aI*v\x99\x11\xce9\x86\xabr\x96\xe5\xf4IH\xc4\x9cD\x84\xde\xfb\x16B]p\x99\xcfK\xb7z\xbdv18\x80\xf0X\x97k\xbe\xee\xae\x83\xc7\xbd\xb1\xf9Po\xd4\xa6\xf2a\xb3/\n\x8f\xb7\x08\xf2\xaeM\xc3\x9brY\xe24\xc6yl*\x0c\xa9\xc1\xc4[\xeds\x9c\xdfZ\xe2\xa2\xea\xa6~\xed\xdb\x0el\xc2\x8aj\xb1\xc8\xf2F)K\x8e9\xdf\x11\xa2\x96UN'UI\xd0\x1c/\xf9%\x88\x07\xe0\x840y\x9d\xde\x90\x18M\x84\x0b]J\xf9\xba\\Y\x96F\xcc\x12ar\xae \x96\xc0z\xd1\xa4\xdb\xe7\x9a\xcb\xdc\xeb\x10\x1b\xfaR\x88C\xf9{c\xd16\xc2\x14\xf7\xa5m\xa5L<\xcb\x02p\x0b\xd4pj;\x0c\xf7.\xb4\x80hu\xc0\xe9\x96i\xb1\\\xa1\xacY\xd0\x06S\xd5As\xbe\x96m\x1d\xc8G\xf7^\xf0\xa0\xf6}\x12LnC\xb3\xcf_\x9c)\x10\xf1\x0e\x85\x05c\x89\xf1_#\x08\x89\xb5\xf2\xa6\x85jS#\xe8\xcf\x1epV5 \xe7\xd6\x0b(\x08X\x96\xf7\xf8\x0bc\x84\xa50\x88\xd4\x11\x94\x86c\xb5\xb4\x89v\xe7!\xfa\xbc\x19\xebJ\xa7i\x84\xdcv[P-\x84G@\xe8%\xde\x01\x85\xc75\x8c;n\x9f\xe5\xa7\xdfZ\xad\x0bx;J\x9e\x80\x1e\xe1\xb0\x95\xf0\x96\x8cwm<\xa4\x0e\x8da\xf6l\xe6\xa3)A\xa7\x96j\xc09\x96?\x1e#\x8e\x01\x16\xc9\x00\xf5\x80\x8b6n4\xc3\x80x\x86\x9e\x8c\x84\xc54\xac\x10\xd50<\xaeahd\xc3\xd0\xd8\x86\xc1\xd1\x0d\x83\xe2\x1b\x06G8\x0c\x8cq\x18\x1e\xe50<\xcea`\xa4\xc3\xaa\xb1\x0e\xfd$\xbch\xcex\x07@_{\xcf\xa1\x11\x0f\xcf\x16\xf3\xf0\xdcQ\x0f\xcf\x11\xf7\xb01\x91\x0f/\x12\xfb\xf0B\xd1\x0f\x1b\x15\xff\xf0:\" 60\x06\xe2e\xa3 \xe0q\x10\xd0\xfb2\xfd\xeb\x11c!\xe0\xb6\xe0H\xf1\x10\x83\"\"\xa0X\xea\xbbA\xe9,!\xfc\xdd)\x91B\xc4\xff s\xcdnR\x9e\xba\x15x\xf9>\x88\xd6H%ha\xb4\xf1\xac\x9a2\xab\xd9g^\xc8\xcb{C\xd8\x13c\xd2\\\xdfa\xf8\xd1\x08'\xc9\xb2~\\\xde\xd9Qv\x1a\x81\xdc5\x9ci\xd5\x01D\xe4)S\x92\x88\xcbs\xa6a\x99J\x8f\x12J\xd2\xfa|\xcb#\x1b\xbc\xf0\xbaK4x\xa8\xc5UL\xbd\xdc\xe9C\xcf\x17~\x9c\x8e\xd1d\xb9\x83\xaaE\xac\xff]\xd29)J<_\x14;\xda\x1d&\xea\xd8\xf9\x1f\x7f\x14 S\x89|\x9el\x9a\xb9\xc9\x00\x9f\x98\xa1\xe7e\xe1\x19\x88\xaf\x19\x11!A\x08\\@\xc8XD\x0c\xec.cK\x08\xb4\xd8c2\xde\x88\xec\xb1.L\x82\xca\xbb\x7f\x92\x96\xf9\x92?J&\xf1\x05\xd14Y\x8eH\x11L\n \xd4y\x1c\xde\xf4\x13\x08\x93C\xae\x9e\xa0\x80C:\xf0\xcb\xfb3\xb9\x02_\xcd\x14&\xb8(\x15\xd2 \xc26t\x1ey\xf8\x1c\x1dq\"\xa5\xc8\x80\x11\xeb\xaa\xf4\xd4lF\xdd\xa7\x8f\x1fBp\xc1\x9ca\xb6\xb2\xb4]ZrNp\x86W\xdd\x8ern\xcd\x03\xfcG\\\x86\x13\x1c\xcd\xe4\x8c{;8\xabU5\xdbZV\x84I\xb7\xc4\xc3\x12\x81\x17\xda(R@\xd1,\xdd\x13\xf4\"r\xef?\xf6\xc00K\xee\x9b\x05\x00\xda\xed\xfb\x19;I\xff%9\x9d\x13\x99L-B\xbb.\x1a\x11\xc1\x08\xcb\x88\xb2F\x1d\x89v\xab\xe3\xcb\xb0b\xa9\xc8\xdb\xbe4+M\xcc\xb3{\xd7\xd3\xb3\xf5\xa5\xcd(\xcf\xd1\xb4\xc0\x0d\x8bp\xb0\xc68\xf8\xcdA\x80\x0d\x05\xb1\x9f\x9e\xff\n\xab\x1d\x88\xd5(\x02a\x0f`\x903\x1b\x08Mh\xccE(2a\xad4\x05\x84\\\x07\xcd\xa1\xe1 &(\x10W \xc1K\x1b\xc2\x99n\xd0\x93\xf1\x05\xf8F@\xd9(2\x02\xe3\x90\xfc\xe7\xeb\xe0\x91\x81l\xed\x900\xbeI>y\xe1e\xed\n\xf9\x037\xc0\xcc\x19B\xf5\x08\xb1\x1b\xfdv\xcdH\x0ba\x08\xad+\x05o8\x17\x8a\x87d\x15$8\xe6\x9b6\x0d\xa0h\xecw?!3 \xd2\x95\x08\xa8/\x11\x82\x84^\x8b\x06\\\x1a\x08.'\xd0z\x82\xb1E\xd33\x15\xd6\x9d\xe8y\xa8\x03\x1cgZH\x0f\xd7\xa4&0 \x9f`\xda\x14m\x1e\xaf\xc6\xd0\xad\x08m\x1f\xfe\x84S>\xf2\"\x19F\xf9\x8a\xfa\x04\xd9\x97\x90\x9d\xfc\xce\xa3/c\x9c\xb5\xac@\xc7;q\xd9\xa3\xd4\xd6|\x00k\xd34\x82\xad\x01\x14!P\xae\xa3\x1e\x8f\x9f\x85/\xb4P\xc7u\x11TN\x9di\x0f+\xa8\xcd\xe1\xd4\xca\x8a\xa9\x0d\xb0\x07\x9f\xa2^\xefJm\x10\xcf\xba\x88#\xc0cf\x96^\xad\x08\xf5\xa1\xbc\x0c). \xeb\x86\xf3\x04\xa2\xb4\xbc\xe0V\xa1~\xa4\x853\x9c\xfa\x15\x15\x17`y\xd9X\x01\xc1W:\x1d\xdd/\x90i\xdf\xd5\x1a\x9e \x93\xb0=\xcf\x8d\xa9\xd1\x1d\x8fz\xc9l\xdc\xee\xdc\x8a\x19}\xde\x90}\x81\x8ck\x9d\x8d\xa4m\x9f=\x9cb\xaf\x9e\xd5:\xbeYV:E\xe8O^/@f\x8b{a\xc9\x90zK\x0d\x8b\x93\xa4\xc8\xd0m\x9a=\xa4\xbch,\xfa\xc6,\x18o\x9c\xc5K\xf8|a\x1c\xab3\x06\xd4\xcaU\x17\x16*U\xa0\x95\x0e\x10\x90y\x9a\xd7\xe8-/6I\xcb\x19\x9a\xd2\xa4$9\x89\xd1\xed\xbdR\xcd%\xc9q\x99\xe5\xeex/\x19L\xeee\x17\x88@ H \x8a\x86\xc9\xaa(\x13S\xed\xad\xb9\x80\xea\x9a\xc5\x8dk\xa4\x8c\x07\xd8e\xd3\xa9\x0cek\xbe\xf0\x07eVpQ\x8c\xe6I\x01\xe69\x00\x97\"\x02O\x03B\x9d\xab\xf1NT\"\x9f\x0e\xb5e\x83\xd0\xe4\xc4z\x7f7\xc3\xc5l|RK\xf9\xd87'\"5\x8a\xab\xa8\xb5\x16\xcc\x7f\x08 E4\x08/\xc0\x14`\x11qf\xb9~\xd6\xc8\xbfe\x03\xf3r\xcf\xfe\xf0#\xd6t\x84\x19\x7f6\xa09\x9bQ6\x9fg)\x1f\xcf\x1f\xd6)\x9e\xdaz\x11v\x88\xa1E\x84\x99\"\xa3\xbe\xee,3\xc8\xad\xb0j\xbah4z+\xc0\xfeZ\xdf\xb2r>\xedi\xd6x\xaf[Uc\xa2\x97\xa6\xf7\xd9\xadg-\xd1tQ\x95\xaf6\xe7\n\xb2\x0bzM<\xcc\x82l\xb6\xefl\xdaE\x15!Um\x9cM|B\xd3[4\xc1\xd1\xad\xac\xe7\x0e\x80\xc4\xc3\x0cx\xf6\x04_4~'\x95.\xa4\x1f\xf6R\xf5d\x01\xd0<\x10\x0d\xbeU,\xe2[*\xfa:\x8c\xfb\x1b(\xf7\xe1kQ\xe2IB\x8b\x19\x89UJ\xf7\xf2\xc7\x1f\x83\xb4T\xb7\xf7\xf9\xc9%,\xcb\xbd\xd9\xed\xf2\xbfN\xcf\x07t\xfbvr\xfaG\xb0\x9b\xa1\x93\x87\xd29L\x1b;F\x83L\x8a\xb3sC\x03\xa3*-H\xd8V\xe3\x17\x12}\x12\xdb\xbbS\xdaf\x1e\xfb\xd6Pa\xc4\xd8ML\x83\xd6o>\x0d\x19\x92-\x87\xf6\x90\xec\x9b1\xa4&i/\xca\xd2\x82\xc6\xca\xfb\xc0\x07\xbf\xa5\xfc6\"\x16\xef_\xcdiQ\xb0\xcd)\xf5Q\x96\xa3\x98$xIb`n\xa1\x03I\xb6\xf8\xdaH\xb2oN\xbe\xd4w\x82V\xcc\x99\xccp\xc5\x90\xab\x06\x15z\xe2Pu&\xe4\x13I#\xbc(\xaaD\xa3$\xe5\x16?\xc5B\xfc\x88\xa8\xb6<\x00i\xc20\x1c\x05\x0eo\x8b_Q\xfd0}\x95\x94\\HK\x96\xf1g\x00kq\x1d\x98%\xf6Sq\x90Q\x1d\xeaz\xc0\x14f:\xbc\x8ebGm,\x15\x03\xeb\xbb\x0c\x80\x9e-\xacu\x91\xac\xb5\x8f\xd43yv@\xe1\xd9>\xd1W\"\xd9\x94[\xae|\xcaqY\xe2h&F\xd3\xa9\xa8lo\x12\x1c\xb9+X7w\x8c\\\xc7\xfc\xec\x1e\xcc\xb8n\xb0Xb$9\x97\xa5\xd2\xa1!?\xcb4%;\xc9\xdaq5J\x84Q\x13Z \xb4\xc8\x08!r\x02l,\x815\x87\x12\x81|xk\xdc(z|gt\x90\x9c\xd0`\xc4O=\x0d\x9b\x1c\xea\xd3\xc6rx\x8c\x8f\x86\x04a ,\xa2p\x13\xd82F\x9ci\xbdl\x80\xec\x11\xce\x82\xa0or\x13\xf8c\xa0\xaa\x18$\xbd~\xfc\xd3Z8\xf4\x02\xa1L\xc6\xc8\xa1\x18\xa61v\xca+Lc\x00P\x05\xd2\x12\x08\xa8)\xd06\x8bA\xb6g\xa0.x:\xd8f1\x0c\xe2\xd5\x18\xda\x05\xa1m\x16\x03\x9c\xf2\x91\x17\xc90\xcaW\x0c\x06E}\xb2\x18\xa4\\\x1e3\x87\xc1\x02r\xbc\x0c\x06i_?g\xfeB\x93\x9e\x11,\x0b\xa0\xe8\x80\xf2\x1bup\x0c\x9cN\xfc\xfb\xa0_\xe6Bk\xb2\xc3*iSx\xb4\xb2\"j\x82\x03sh-\x81\xe7\xeb\xe7\xd6\xba\xf2\x15\x06r\xf1\xb5\x1c\x81,\xf8Z\xceA^H#0,\xa4\xcf\x81l\x1aJ\xff(\x9a\x1cJw'\x15b\xcc3\x92\x15\xb8\xf3\xac\x04\x02\xc5\x05.\xa2\xb1\xfb\xcc\x14$\x19\xa4\xe9\x10P\xdb\xa1\x9e\x19{\x08\xbe~\x10|\xab\xa1\x9e\x13\x83zd\xf0\x81\x01\xf5\xd5\x85hX&\x1f\xdaX\x0e\x86td\x10`\xd9+'\x0b\xc12\x99^)/\x87i\xd0.(\x8b\x16\xed \xa1\xdf\x1c\x84\x94\x07\xea\xc7\xf2\xd5\xf8\x18T%Ax\xbd\xf3$Q\xeflA\xf4\x9c\x1c\x19\xe1\xb0\x08X\xaaC\xb3\x07\xc5\xb5\xb0;yP\x1e\xe7\xd6\x91;h\xc5H\x8c\xe7\xc9'T?\x90\xa8je\\\xd8\xd8\xa8\xd3\x13\xdf\xd2\xa9z\xcf\x99\xc4\xbfv\x93\x10\xf9_\xbaK\xa6u\xb7\xc4\x7f%B\xf2\xa2l\xb1\xac->\xf1\x87f\xaa\x93@\xca\x95\xf7\x180 \xfc\x86\x80\xdfo\x1a\\\xd9\xe1Y@\xc6 (\xc2)\"\x94\x17\xe1\x9e\x10\x84\xf9\"\xdeA\xe4\xdd\x8dkK~>\xf8\xfc\xdb\xa7 >\xdc=\x9a\xbe?\xda\xfdp\xf4\x19\xef~\xfa\x88\x7f\xdb\x9d\x92\x08\x1fL\xf6\x8f\x0e\x0e\xc9\xbe\xa8\xc2\xae$D\xe4~\x1eN*u9\xa0\x0f\xd7\x83\xbb\xa7\x1b\xb2\xff\x84\x9f\xca\xea\xe3Q\xf9x\xf4x\x94$\xf7G\x8f\xd1\xe7\xa7\xb2\xb8{Ln\x1fHb\xc38\x94\x8a8\x16;\xeb\"s\xbd\x19z\xf4i\xff\xfd\xf4\xd3$\xda\xfd\xb8\xff\xf1\xb7\xdd\x0fdr\xb4\xfb\xf9\xe8`\xba{xpx\xf0\xf1\xb7\x83\xe8\x90D-\x86\x8a\xc1Vb\xa9\x00qp\xf7\xe8d\xea\xe7\xe2.\x89f\xef\x8b\xc7\x87\xf4\xc3\x87\x9fG\xfb?\x9fn\xcaOy1\xbb\xbf[N\xf3\x9fQ\xee\"\x87\xbf(\xcc\x98\x90\xa5\xc9\xb2f\x01\xa2<\x05\xcep\xc4\xe3\xa4\xc8\\\xf8\xc9\x07\x1f\xac\x82/x\xcf4\xd2\x9c\xb6n\x954\xfb\x95\xd0l\xf0\xd9\x07\xe2\xe0\xee\xd0\xc9\xe5\x87\x0f\x87\xf1\xdd\xe1\xcf\xf8~\x1e\xe3\xa7\xea\xe1)\xc2q<\x9b}\xba\x99W\xef\xe7\xd1\x13y\xefa\x80\xfb\xf4=.\x03\xccS\xb3\xc8\x1ak\xf8\x02\xcb\x0cMi\xca\x05b`er\xbd\x91J[V\xcc\xafL2\xb6t\x90\xd9I\xc2\x83\xea#\xd3\xf7\xe2\x00\x8c\xce\xc6Pb\xaa\xa7 \xbe\xe1\xf8\xea\x07\n2\xf53T\x06\x9e\xbc\x94\xbaK\x863\x15\xc4H\xa3W\x07\xcbb\x91\xa5\x85\x97l\xa9\x08\x9f\x87pS-\x87H\xf7\xae\x15u\xc6\xebI4y\x14xx\xdd\x05c\x11\xdd\x1a\xccM\xb4\xfc!\xc7\xdey\xe1\xcaA\xf0\x80\xa4\x10\x915\xb3\x1d\xe6\x08\x1a\x91\xc8\xd6`\x90\x99u\xe6 k\x18)ZfU.m\x9e&\x89~\xacd\x11\x8b\xe2B\xb2\x07\xd5!\x80\xe2\xbf\x19\xd92l\x9c\xa0\x7fV$_\xee\xa9>\xe8\xe2\xfcK\x0b\x9c\xc87\xad\x11P\x01\xbf\xc6\xcf\x1a\xf8\x9c\xa4\xa8J\xc9\xe3\x82D\xccp\x13O?\xd9f\xaa\x88fd\x8e\x9b\x13\xe3\xb4\xe3\xdc6\x1c\x1f\xa0;\xbd\x1e\xa1\x1ce\xb1E\xc4\x89\x0e\xae\x12\xe6\xea\xecL\xd3\xf2\xfda\x87A\x8e\xf2\xdf\x1e\x1cbRb\x9alH\xa9\x0e\xd6\xfd\xba\xca\x9d\xaf\xce\x04\x15\x1c\xcfp\x1d\xdc\xdb\xea\x99X\xe0\x1c\xcfIIr\x03\xe7]\x91\xd4k\x9a\n\xaeE\xd8\xda\x14\x83\x8d\x8bqM\n\x9a\x1e\xa3\x05.\xcd\x00L\xb6\xddiN\xe2cT\xe6\x95)\xee\xadlS\x1cP\x86\x1d\x90\xfc\xbe\xc7\x8fa\x87\x0e\x9f-<\xe4P\xc1\xb8u\xc7\xa4\x93\x95]S\x9c\x14p~\xe9\x03\x03\x94c\xbdO\x18C\xcf\x15\x9ak\x0dh\x16\x0e\x8e}\x86X\xe1\xe4`;/\x8c8[\x86%\x0c\x9c\xae\xc1\xb6\xb3a%[)\xecZ\xcc#\xd2\xd9\xb0\x84\x81\x94\x0e\xb5\x9e\x0d;\xb9\x01\x0fn>\x0e!\xbcmZ\xb5)\x97vlO\xda\xfb\x18\xd0\x86\xa9\xbc\x01t\xb7\xaca \xdd\x03m\xe8\xdaZnS\xbev:[\x061\x90\xceAf\xb4a07\x809\x8c\xe7\xd5\xa9,\xf1M\xc3&\xf9\xa7\x84\xb6\xc7d\x06Iq\x1a\x91\xbd9)q\x8cK\xbcw\x7f\xb0'\x17\xe0\x1eN\xa4\x81uC\xb4\xf1\\T\xf39\xce\x97\xc7\xaaL\xc3I\x92\xa0\x9c\x949%\xf7\x84 \xdeD-_E\x82\xae\x03s\x1a\x9b\x9d~Q\x84\x88i5\xf0{s\xb8\xbf\xff\xc6m\xab\x1b\x99d\xeb4\xd2\x9d\xe7\xeb\x970w\x052~su\xe58\xaa\x91\x825\xc2\xf9?h[\x99\xae\xd1`\x1c\xdbV\xa6\xdbV\xa6\xb34\xe0RD\xe0i@h[\x99\xaen!\xa1\x88\x06\xe1\x05\x98\x82me\xbaF\xdbV\xa6\x13\xedej\x90@vA\xaf\x89\x0f9\x84mm[\x99\x0e\xb6U\xb6\x95\xe9\xb6\x95\xe9\xb6\x95\xe9\xea\xd6\x8b\xc7}\x8a\xe4\xacV\xd0-T\xcel0\x80me\xbame:8\x8e\xdb\xcath[\x99\xcelp\xab\xf0\x85u\xfd\xb62]\xb0m+\xd3yzo+\xd3\x89\xb6\xadL\xb7\xadL\xb7\xadL\xe7i\xdb\xcatf\xeb#`\xdaX\xa2me\xbame:\xdd\xb6\x95\xe9\xb6\x95\xe9\xc2\x19p\x1a\x12\x84%\xb0*1\x9b\xc0\x961j\x07\x95\xb0\xc2]\xf5\xa0\xaf\xa5,C\xb0\"\xc3z8\x14J\xa5\x05\xf2e\x00\xc1\xc1\xbc\xd9\x91v\x8a\xae;4f\xd5\x85\x06P\xb4\xadLgm\xc0\xcd\x82\xda\xbc7\xc3Z\xadz\xa3\x11\xc8\xec7\xc9\xf5D\x855\x07z\x1e\xea\x82\xa7\x83me\xbaA\xbc\x1aC\xbb \xb4\xadL\x07\xa7|\xe4E2\x8c\xf2\x11\x8a\x0dX\x96\x90\xf7p\x01)\xe3\x03%\xc6\x022p\xccp\x82\xdaV\xa6\x03\xf0\x1bup\x0c\x9cN\xfc\xfb\xa0_5\x9e\xd6d\x87U\xd2\xa6\xf0heE\xd4\x04\x07\xe6P\xbf\"'\x1b\xc3\xadauu\x825u\x86r\xf1\xb5\x1c\x81,\xf8Z\xceA^H#0,\xa4\xcf\x81l\x1aJ\xff(\x9a\x1cJw\xa7\xcc\xce\x98g$+p\xe7Y \x04j[\x99\xce\xd5\xfaL\x0c\xdaV\xa6\xb3\xb4U9\x18\xd2\x91A\x80\xe5\x8a5\xc0z\xebK\xb4\xb9\xbc\x1c\xa6A\xbb\xa0\xb6\x95\xe9\xb6\x95\xe9\xb6\x95\xe9\xc2\x95\xe9\x04\xe8\x02\xe1\\\x04|\xb5j\xcf\xb5{\xbf\xb6\xf2q\xdbb:\xaa\x8dE\xe4\xa0,`\x07,H1\x1d\xd1\x16\xf8\x86\xa6\xdc\xc0\xb0S\x07\xc3\xbd\x86\"\xd2\"\x98\xb1\xc3\xfb\xe0\xc4\xfc[]\xdcD\x95\xe1\xf1\xe3o\x97\x8aAk3lg\xde\x92\xa5[\x82\x82d'Hu\xc3\x98\x87\x04Bb\xc2EjJN\xca*\x97u)\xcf\xf1\x0dQ%\x8d\xde\xa5\xe4\xb1\xbcf?.3\x0f\xb4 \xb9\xa1\xa9\xab\xe8\x1dk<\x13\\\xc5\x9b0\x98l\x96\x08\x9agE\x89\xc8tJ#J\xd22Y\xbeCgi\xb2DYJ\xfc\xd6V6\x9d\x16\xa4DY\xce\xe8\xf0\x8d[\xcc\xb2*\x89\xd1\x84\xa0\x828fWA\x1bi~*\x9a\x96\x1f?\x8c0C\x92F\x91;V\xcdIN#\xf5\x8d\x0b\xdd\x08\xa7\x8c.\x11\xfc;#)g\x85\x1b\x1c-P\x95\xe2{L\x13\xed9\xe6a\xecHo-\xb6\xc2<\xc0\x0c\xedDS\xf4\xe3\xb4\xf0\xceo\x8bt^A\x88\x19\x10\xa2\xe6\x1b\xdf\xf6\xb5\x9c`\xa2\xe0\x1d:\xf5yDh\x81\xe8M\x9a\xe5\xa6\xcc\xf0\xff\xdc\xb3\x1ds\xc2\x0e!\x1e\x87\xe4\xd8\x0bA\x0e\xd8^\x04\xb4\xdeg8'\xad\xbd\xe6\xa3N\xb8\x9d\xd8\xf8\">\x1ceyL\xf2w\xbf\xf8XrI\xd3\x88\x1c\xa3(+\xe6Y\xb1[\xc4\xb7h\xff\xdd\x87\xf7\xd6\x0e\xa1\xc8=\xa1h\xb5\xf1%\xf0&\xf3 \x89c\xa1\x89o.\xce\xbfh\xd3J\xc6\xcc\x15\x9e\xf5\xa5\xa5\xb5\xb3\xfe\xac^|\xef\xd0\xd7\x8e\x93\xc6g\x9a\x85'\xc94\xbbDQ'\xe9E1\x17|\xed5\xcc\xa6.{\xd2m \xafp|Pv\x8c\xcf\xa4\xf6h\x8e\xa0\xf5\xd5\xe0\xcf\xff\xb8f\\[SR]\x08\xc3\x8aM\xfb\x02\x1722\xd4X\x15\xef\xbc\x86\x17\xb7\xa9\x82\x06\xd5\xa9\xd4 |iq%\xe1\xd2\xd7\xcc\xdc'|\x07\xa5\x19\x9ag\xb9\xe7\x1c\x87\x90G\x05\x80\x99\xe9Q\xc1\xa1\xad\xa3%\xa2K\xe1\xd6\xe2\xd8I\xaf\xc9hC\xce\xba\xf6\x0e\x8f{'\xe5\x0e\xa2e\xa1\x12\xba\x99M%\xce\x1f1\xca\x18\xff\x1eh\xab\xa4\xbb\x7f\xdf\xd4\x85\x85\xfa\xd4\x10\xed\x94#\xd2\xe0\xce\xbfl\xab\x88\xa2m\x15\xd1\xc0\xfe{\xe6*\xa2\xdbZl>:\x07ya\x9e\xbd\x16[M\xa5aB4\x0f\x9c>\x0d8\xc0\xdb }\n&\x94!N\x84\x96\xab\xc0\x04\xe7\xf4\x0d\x0caWg\xc3X-\x06\x0b\x13\x05~\xc0\xc52\xc4'\xe0?\xf9\xf7=\xeb\x07\xf9\xd9\x04\xbff\xe6\xb6,\x08\x0b{\xf9\xe9\x1c\xc8\xdda'y\xe3\xbc\xde\x80f9\xbb\x0f:\xad[\xcf\xe4\xcf\xccE\xd3<\xaa\xfb\xfbx\xd9\xf7\xcc\xde=\x997\xc0YO\xe9\xfd\xcf\xe5\xcd\xc3H\x03X\xf7$>\xe8\xecm\x9c\xb0\x1b\xc0\xec\xa7\xed\xee\xf9z\xc8\xc4\x02D\xb5<9\x03'o\xc89\xdbV\xdc7t\xb2\x0e\x9e\xa5W\xe7\xc6\xc0\"\xa2\x0b\x12\xed\xfd]\xb4\xf2\x00\xffW\x00r\x97\x15\xbdl\xc4O\x08\xce\xd4\x15dZ\xe1\x15\xca\xa6\x17)\x95\xf8\xca\xe2\xa0\xb6R\xa3\xcdU\x14H\x17\xf6\x07\x0c\x82\xd0\x0e\x1d\xc5\x91*r\x96M\xe5Z\x95\xd9\xae\xd2\xeb 2]\xa5\xc0\x0cT^l\xd2F\xbd\x95\x0eC\xb5\xe9|G3\xd5\x82\x15H\x82\xabH\xb4\xf0Z\x12-\x14\xbf\x89\xa0\x93\"\x7f*\xa6\x86GY\xea\xf5\x11./UB+}\xf5G\x05\x10\xce\x81\xeb\xf1y-H\x1a\xe1$Y\x8aD\xf92Se\x12\x83`x\xc9\xc3\xebp\xf5G\x9d\x885\"\xb1\xa0\x9d,\x1a\x9c/\xe5(\xe5\xefz\x17\xbf\x83\x94\xc3\xe9\xc1\x9a~\xf4\x8eW\xf4\xaew\xc9;\x18\xa2\xa7l35\xd5\xba\x8a7\x10\x15=w\xea\xd5\xbc\x83p\x1a\xc85\xc8\xaa<\"F\xfd\xa9\xb7\xf2\xbd\x8bV\x95\xdf_\x99m%\xc6\xf1\xc2\xc3\xd2n\xf0\xddW\x18\xbe\x99\x95D\xfc 7\x05\xf9\xac\xf0\"\x1f\\\xc6\xcb:\xd7\xa8\xc0%-\x98\x9e\x12\xd5\x06\x16\x8bd\x19\x12\xf56\x8b \xa7\xb1*\x8c\x80\xe5\x0f\x1c\x10\x00\"\x0c\xb4ha\x943P\xb5\x94\xe5U\x9b\xba\x15n\xc3\xd5/PS\xdeq \xc6\xab\x13i\xc1\xe7Z\xb0\xc2\xec\xbe\xe6$\xadD\xcb\x15\xa3D\x9ffQ\xabpTK\xff\xbe\x0d\x971\x97\xb5\xd6\xb2\\Ub\xfb\xe3\xf4\xf2\xca\xbd\xed@s\x12\xaa\xab\xb4\x8b~\xff\xfa\xed\xf4\xfb\xe9\xd5\xe9\xd9\xf7\xeb\xab\xff>\xff\n\xac4\xd4\xed\x07(Z\xd8\xed\x14,T\xe8\xea\xc2y\xe3\xec\xa7\x8b(\x0d!.|;\xa7\x9a\x97y>\xae{\xbaA\x8b\x16\xca\"\x85{\xb2h\xa1\xf0u\xf8D\x97{\xc6\xbal\xb2\xd4%\xc4u\xbd\xd1\xfa\xbe\x86\xfd\x17\xbf\xe8z\xab5,\x17e\xb4@iV\xeaJ%^\xa5\xe9\x9a\xe1.V\x96Z\x84\xaa\x1a\xb0\x92\x9d\x9dz\x84-\xbd?\x04\x11\xbe\xd4\\\xd8\xf0?\xdaQ\xc2K\x1bBQ\x96$$*\xe5\xad-\xffiQ\x9b%3|\xef7\x0b\x18\xfc\x82 OO\xea\x8f<\x8c\xd2IB\xae\x178`I\x8fh\xd9\x07m\x9a\x900bsp~rq\xf5\xdf\xf0\xcd\xda\xe9tvq\xfa\x1f\xa7\xdfO\xae\xce.\xe0}.\xbf^\xfcy\xfa\xe5k\x8f\x1e\xa7\xdf\xff\xfcz\xd9k\x8c/?.\xaf\xce~?=\xf9\x0e\xefr\xf6\xd7\xf7>8\x9d|\xfbv\xfa\xc7\xe9\xc9\xd5Wx\x97\xb3\xff\xf7\xfd\xf4\x1f?\xfc%\xf0\x1a\x1d\xce/\xce\xfe\xfc\xfa\xfd\xe4\xfb\x97\x1e\x83|9\xfb~uq\xf6\xc7\x1f}h\xf9\xf3\xe4\x8f\xd3\xdf\x03\x93\xa8\x85|\xef%\x03\x97\xf0\xee\x15\xe9\x1a\x16\x05^C\xc0\xa9\xbc\x17\x06V\xb9s,\xeec\xfbg~\x9b\xc1+D\xf2k\x05\xca}\x96\xa1\x93\x8eu/\x1c\xdb>\xd6\xc1(1\x99\x94\xa8 \xf9=\x8dhz\x83\xa6U\xcaeZ\xa02\x9bu\x0f\x1d\xdb>\x8ak\x19\x1e\x0bO#D\xd3{R\xf4\xa3C\xef\xb7c\xebW\xc9(\x92\x96\xb4\\\n\xa5\xa5i\x8b\xaa\xa2\xccb\x8aSI\xa0\x08\x13\x12L\xedC \xdf\xbf\xc7\x9d/\xedb\xbaLD/%>\xd9C*\xfc\xed\xfc\x02\xb6$\xf3\x1e\xc3\xe9\xfd\x7fl\xfd*8*\x06\xe3V6['\xd3)M(?\"\xdc\xe4\x84\xccI\x1a\xa8\xcfh\x93\x1e\xc7\x96ob0n\x01\xe3D\x98\xfc\xd9T\x0e..\xd7\xb2\xb4\xcc\xb3D\x10=O\xe9\xa4*\xd0\x04\xa7\xb7\x08G\xfc\xaa\xa0\x07\x1a\xb5L:\xb6\x7f\xd6\xa6J\xf3\xaeD\xb3>'\x8b\x9c\x14$-ej\x90.S,^>l=\x95\x81\xa3\x9e\x9b\xb6\x96\x7f\xc7\xf6\xcf\xcd\xb5\xf80\xa3\xd1\xcc\xe0\x8f>G\xa8]\xad]\x18\x94 \x92fe\xc0g\xe3\x10\xac\xc7\xd6\xaf6T\xb8}\xc9\x97\xab\xf0\xae\x8b}\x001\xa9 \x87(\x84\xce\xd9$\xf0\xb3\x94\xca\xb6\x89\xe9\x94\xdbL%\xca\xb3\x84\x88i\xa2\xc2L\xb2\xe7\xf7\xa8\xa6'i\x8e\x97l\xca\xddV\x8f\xac1\xddX\x98\x86\xdd\xd4>\xccY\x01\x85\xc8\xb3\x9d\xca\x95\xc3\x83\xdbq\x9d+\x8c\xc0A]\\\xdc1y\x8b\x93${ \xf1\x9e\xba\xbf\x91\x8e\x84=YN\xda\xda\x1f\xa6\xf5:^\xe3\xd2Rr\xb0\xb0\\\xa0\xb4\x9b\xa7,\xa1\xa5\xc8\x87\xdd,\x84\xa1l\x017\xacf\xc8*\x15C\x82\xce\xed\xb0[\xbbIG\xc8d\x1f\xe3\x82\x04\xc6_\xd4\xc1\x0d\x0d\xae\x11R\xf4\xc9\x8a\xb6\x16\xdd\xd8d\xbe\x84r\x9e=k\xaf\x0b\x0c\xc8\x95>\xe9\xa5\x1b\xc0\xa1!\x99\xcc\xc1\x1c\xe6a\x9c\x03\xd5\x01\xd9\x00\x96\xc1\xea z\xe0\x0df\x92?}\x1b\xc4\x9aaT\x07S\xb5\xc7\xdaL=+~\xc0\xa9\x19\xad\xda\xc7\x88\xb5>\x82:\n\x81\xf4\x14\xea]\xe5\x03\xb4R\x10t#\xa1^\x13\x81zT\xf7\xd0?\x0c\xc0\xeb\xa5\xc5\xd0\xd0\xca\x1e\x9b\xc6\xb5\x90v\x0b\x80+{VN\x00T\x16xe\xfc\x1b\xa2\xfb\xba\x80\xfa\xd7\xf0\x18\xce\xf5p\xfd\x0e0\x93W\xe1\x1dD\x1d\xacu\xf5\x8d\xb8\xd8V\xe1\xc3\xca\xf5:\x00K\xb2\xcb\x940\xc6\x96\x93n\xa8l\x87\x05J\xd1\xb9\xbf\xae\xcbz\x00Jx\xbc\xb6\"\x1c\x05(\".\xb8\xae\xc2\xb3\x83l\xcf0D8E2`\x82_S\xb1\xa9\xdfA\xe4\xdd\x8dkS\xc4d\xfaq\x12\xed\xe3\xdd\xe8s\x1c\xef~\xf8\xf4\xdb\x87\xdd\xcf\x1f>Mw\x8f\x0e\xf7?\x92\x8f\xfb\x1f\xf7\xf1\xa7\x0f\xc2a&wh@\x9760r\x05]H\xd5\xeaEL\x8d\xc3\x00\x1e\xdc\xed\xef\xef\xc7\xfbw\x87\xe4\xd3\xc3Q\x81\x97G\xef\xf1\xf4.&\xc5\xe3\xe2\xf0\xe9\xee\xe96\xff0M\x9d)\xc2\xa7\"\xe4\x1f'E\xa6\xae\x12-\xf7\xf8M\x8c\x1c\xa0r\x12 lfNl\x1e>\x1c\xc6w\x87?\xe3\xfby\x8c\x9f\xaa\x87\xa7\x08\xc7\xf1l\xf6\xe9f^\xdd\xcd\xc8\xd3\x87\x0f6j\xdd'\x95\x91V\x89y\xc4He\x18\xa2\xe1\x06)3\x94d\xd9-\xaa\x16>&\xca\x8c\x1a\xe1\x96\x9av=]\xd2\xfe\x12K\xce\x1d\x9d\xd6\xb0{-\xc6\x96\x17\x01\x95\x97\xed\x1d\xdf\xeb\xac\x00\x9bx\xdbZ:\xaa\x8dE\xe4\xa0,.\xe7N\x0c\xd7\xd2\xf1ce\xd1m\xa0\xfc\xd2\x16\x183\xdb\xb4\xe9\x12\xde&\x9a\xca\xb6M4\xdd\xa0D\xd3\xb6\xc8t\xad\xc4\xd6~\x19jg\x8cc]xl\x8a\x86\xde^\xd1fX\xd9R\x18\xd9>\xa0\xe91Z\xe0\xd2|\x88\xaaN\xec)\xf3*\x98\xbe\xa6&\xbd\x15T\xe4\x9b\xe8\xa1\xa6\xc2\x00\x03\x010\xd7\x0e\xb3\xa0\xb71\xe0\xb9\xd9\xb2\x98\x00C2\xaa\x1c\x9c\xdf\xe6u\xfb\xe8\x1cd\x11<{^\xf7\xf0\xf4\xb8b\x0f'R3\x00\x13\xe2\x8a\x93$A9)sJ\xeeI\x810\xff\xaf\xee\n.\xa0YpF\x01\x8cW\x95 \xb7!\xda\xbd\x81\x93_I\xaf\xfc\xa4\x04\xcco \x1a\xc0.@p\x07\xe8\xc8\xf9t\xe1\x14. \xfa\xa1@\x0c\xd1\xc6\xca\xab\xeb\x97Y\x17\xce\xad\xf3\xaf\xd8\xba\x05\xa3pA+L4\xc8:\x13-4E\xa2\x01'J\xfexX\xa6\x9d\xb4\xa1\xd7\x87P\xd0\x19\x8b\xc6\xcb\xb8\x83\xe7\xdc\xf5\xc8\xba\xebI6p\xd7\x8b\xd6\x87G\xe5(\xd9w\x03\xf2\xef`\x19x=\xd9\xd4\x97\xf2\xf1\xf2\xf0\x06d\xe2\xc1\xd1\x1d7\x1b\xaf_>^\x00\x94\xc0\x03\x98\x91\x07\xc9\xc9\x83r\xa5o^\x9e\x7f\"\x98X[-3\x0f(\xf2\x80\xcb\x19\xca\x83r\xac\x0c\xbd\xe19z\xc0,=(M\xfd3\xf5\xbc\xe0&\xa4o\xae\x1ex\x8e )2C\x92\xda\xec=\x019{\xee\xbc\xa8A\x9d\xfcy{h\xb5\xcc\xbd\x90+\xb7\xd9\x06g\xef\x8d\x92\xbf7 \x83\xcf7\x83/\x9b\xc3\xe7\x9e\xefg\xcf\xe2\x0b,\xbdM\xc9\xe3\x83e\xf2\xf5\xcc\xe5\x1b\xfd$\x11\x14W\x10\x81\xe5\xce\xa1\xea\xd3\x0d\x98\xd7\xe7\xc8f\xea\xd3\x07\x94\xdb\xe7\xca6\xea\xd3)\x9c\xdf\xe7\xca\xf0\xe9\xd3 \x92\xe3\xe7\xcc\xa8\xe9\xd3\x0b\x98\xe7\xe7JH\xf1v\x1a\x9e\xeb\xd7O'\xb8\xd7\xea\xa0\xa1\x91\xca\xa7\xe9\x93\xf1\xe7\\\xf8c\xe6\xfc9\xf6\xc9Z\xb2\xfe\x1c\xfbk\xb4\xbc?\xd7^|\xd6\xcc?\xdb\xde^k\xee\x9fK6\xac1\xfb\xcf.Y^ \xff\xcf)\xaf6&\x03\xd0)\x1b_&\x07\xd0%t\x9f#\x0b\x10zH\x1b5\x13\xb0G.\xe0H\xd9\x80\x102\x07d\x04\x06`\xad\x98\x13\x08\xd7\x8e\x1d\x9fw90/\xd0\x9b\x19\xd8#7\x10\x8e\xba\x05d\x1d\x96\xda/\x1dc\x95\x0cA\x90{\x1e\xe2\x98o\xd2\x13>\x0e\x04\xadx\xa0#\x18\xcao4b\xbe`\x8f@<\xd1Z\x93\x1d\xce\xb3\xd8\x14\x1e\x85\xb2+\x82\xd1\xdd\xd0,\xa0\xd6\xb0\xfd\x02\xdd7\x86[\xc3r)\x82\x99\x14C\xb9\x08\xca%\xdc \xf6m\xdf\x14_-\xbb\x10\xbe\xdd:)\x17\xdb7\xc5u\x83h;\xd4;\xdb\x10\xbc~\x10|\xab\xa1\x9e\x13\x83zd\x1d\x82\x01\xf5\xd5\x85hh\xe6\xe1\xa6r0\xa4#\x83\x00\xcb\x9eY`\xa0\x8c\xa9W\xca\xcba\x1a\xb4\x0b\xaa\x7f>b\xbf\x8c\xc4\xfe9\x89\xbdX\xbe\x1a\x1f\x83\xaa$\x08o\xfb\xa6x\x00 0K\x11\x86\xf78\x99\x8a+\xe7*\xa2vRb\xd4\x8dlt<>\xee\x08\xf0T\xed\xb5eAn\xd3\xa7T\x1b\x8b\xc8A\xc1\xd2\x0eX\x90\xf4)\xd1\xb6O\x91w\x1aH\xe4\x824>\x8cyh\xd8\xe3`\x1eh\xdb\xa7\xc8\x91\xe3]\xa7v\x83\xcf\xd0\x90g\xc7<\xe0\xb6O\x91\x8b6\xfa<\x0d{\xc0\xcc\x03\xb0\xdc>E\xdel}\x9f5\xf3\x80\xda>E\xbe}\x8a\\\xb7\xedS\xe4\xae\xbf\x06N\x05V\x8a\xb6O\x91k\xfel\x9f\"\x071s\xfb\x14\xb9#\xc1r\xd4\xba\x11<\x03t[;B\xb6m\xed\x08\xdf\xce|\xe6\xda\x11\xdbdv\x1f\x9d\x83\xfc3\xcf\x9e\xcc\x8e\xb6\x8f\x94\xf7*\xe4\xb0}\xa4\\\xb4537\xfc\xbc\xf6\xf6\x91\xf21\xb8\xb8}\xa4\x1cz*G\xdbG\xca\x9bc\xbc\xb2G\xca\x8b([\x90\xbd\xbf\xf9\xff\xf9\xdf%\xbfd?A\x05\xc1y4S\x99\x01\x88\xf7S\xf3\xe9b\xf1\xd5\x8c\x88\x1f\"\x1a\xef0\xae\xca\x93t\xbc#r\xde\xea\x02Y\xe2W\x96\"Y\x9f\x0f>\xff\xf6i\x82\x0fw\x8f\xa6\xef\x8fv?\x1c}\xc6\xbb\x9f>\xe2\xdfv\xa7$\xc2\x07\x93\xfd\xa3\x83C\xb2\x8fj\x8ct\xf5\xa9\x9a\xff\xbc\xf0\x15\xff\xe3\xc1\xdd\xd3\x0d\xd9\x7f\xc2Oe\xf5\xf1\xa8|]\x04\xf4\x7f\xc8\x9f\x1d\xdc=:Q\xf9\\\xdc%\xd1\xec}\xf1\xf8\x90~\xf8\xf0\xf3h\xff\xe7\xd3M\xf9)/f\xf7w\xcbi\xfe3\xca9\x8e\x1a\xa0\xbcCU\xa8\xdaP\xacQ\x91\xb8\xca\x1bU{\x95Q\xf1\xc7\x83\xbbC'\x82\xee\x1a]\xef\xe7\xd1\x13yo\xae\xfe\x7fc\xba\x80K\x149C2 \xa8F\x93\x0bF\xb9J\n\xbd\xcb\xde9@\x08\xf6\xe9\xf8\x03\x13\x8cZE\xf2B[\xd8O\x0c\xb6\xe8\xa3\xe1\x85G1x\n\x1dD\xb2\xd4\xf0\x00\xb9\xc6\xe0\xae\x08nxHCC\xb1e\xa7A\x1d\xaf=\xd0\xc0\x04\xe7\xc4\xb2\x10\xd9\xaf\xca\x19Y\xa28K\xdf\x94\"z\x8d\x0b2\x95g\xc9\xc1\x1b\xcb\x11\xa3 \x8e\xcd\x9bp\x03Q\xfd\xa3s\x0e\x9f\x87\xd77V6\xe2\x87f\xbdzP\x9c\x11\x91/+L\x8a\xb2\xde\xc5\x99\x1cp\xa0\xea\xddk\x86m\x88\x8f\xae\x9b\xf3\x15|\x9f\x0e\x8cP\x08*\nBF\n\xfa3\xbdC\x14r\x0b\xb2\xf6CT\x9d:\xfd\xbd\xce\xc6\x11\xeb\x1e\xa1\xd3\xf9\"\xe1\xe9k\x05*\xe2\xdbw'B\x9c{`\xd1\xb4$\xf9\x14G\xc2D\xac\n\xc2\xac\xb5\\+M\"6\x88\x91H\xe3\x81\xf5\x85\xdb2.&\x82ku=/3k\xf9\xdd\x0cd\xd2\xb9y<\x10\xca\x7f\xe7\xd6\x8aV\xd2\xb5B\x88\x9a\x0b\x99\x90\xc4\xf3\x0di\xb0\xacVa\x08\x81v\xe3\xa9\x91\x9e\x18a\x9fSN\xb5`\xd2{p\xcf\x88\x16\xde9\xa2\xc9\xb5\xe4\xff\x11p\xde\xe5O\xc5\xc4\xb6\x12\x90d\xc2$z\xabR\xf1\xfc\xa9\x80y\x96\x04\xcbgAV\x90h\x98\xc3\xabw\xa4BFO\xb90\x10\xc8c \x8d\xce]\xe4Y$\xb6\xa0\xb7\xa8\x9a\xec\x00g\x1e\xa4N\xc1\xe0J\x05Ck\x15\x0c\xabV0\xac^\xc1\xc0\x8a\x05\x03j\x16\x0c\xacZ0\xa8n\xc1\xd0\xca\x05Ck\x17\x0c\xaa^\x80V\xaa_\x10\xbal\xea\xb6\x91k\x18\x0c\xacb\xf0Lu\x0c\x9e\xb7\x92\xc1\xfak\x19lH5\x83\x17\xa8g\xf0\"\x15\x0d6\xa8\xa6\xc1k\xa8j\xb0qu\x0d^\xb6\xb2\x81\nN\x0eY\x16\xb0\x88)\xf9[a}\xe9\x8b@=\xa1o\nT\xd0\x9b\x14\x97U\xce\x0f\x99jp\x0f<\x98%w\"*/(\x01,\xedK\xb6\xa9\xf6h\xcaD\x18\xe7\x0b\xb3\xf4\xbc`\xdaE\x02\xb1^\\\xcenp\xcdv\xc53\x10T\xfd\x07\xbd\xb4Q\x99-PB\xeeI\"\x0f \xe1\x1c\x13\xe5\xbc\x106\xea\xbb6h\xee-d|F8]*\xd7\x8cO\\\x8a\"\x91YL\xa7\xde\x98;\x1e\x92\xc6\xceG\x86m\xac\x0e\xb0\x02\x83\xe6\xe9\xd3\xbb\xf2\xaa\x94\x9d\xd68\x97\x15\xde -\x18\xe7\xb3\xb4\xe1|r\xc5\xf81L\xae1\xf7\x9b<\xcb\xb1*`\xa3\xc3\xd7\xc1\x89f\x92 \x89\x98\x93\x88\xd0{\xdfB\xa8\xab\xb3\xbak\\6\xdc\xfb\xed\xc6\xaf\xee\xae\xf9\xba\xbb\x0e\x1e\xf7\xc6\xe6C\xbdQ\x9b\xca\xa7\xd4\x95\xebZ\x04y\xd7\xa6\xe1M\xb9,q\x1a\xe3<6\x15\x86\xd4`\xc2\x898\xc7\xf9\xad\xb7\xd8\xaa\xfa\xb57\xf86'\xa8\xa8\x16\x8b,g\xf8\xe9\x03$\xc7\x9c\xef\x08&\x8c\xca2\xa7\x93\xaa\xe4E\xf8\xb8\xef\xd3\x03pB\x98\xbcNoH\x8c&\"|NJy\xa5\x1a\xd9\xde\x88\x98%b\xb9\x843\x9bt\xfb\xf0r{\xcb\xeb\x16m#Lq_\xdaV\xca\xef\xb6,\x00\xb7@-\x82\x05S`\xb8w\xa1\x05D\xab\x03N\xb7\xf8\x97\xe5\ne\xcd\x826X\x00\x054\xe7k\xd9\xd6\x81*'\xde\x0b\x1e\xd4\xb7\xd0WsN_Hx\xc3\x99\x02\x11\xefPX0\x96\x18\xff5\x82\x90X+oZ\xa865\x82\xfe\xec\x01gU\x93pn\xbd\x80\x82\x80\xd5\x0e\x19\x7fa\x8c\xb0\x14\x06\x91:\x82\xd2p\xac\x966\xd1\xeaT\xd4\xa5\xd2\xe7\xcdXW\xe6\x86\xc4\xc6\xc5\xf2\xa0Z\x08\x8f\x80\xeaQ\x9e\xb1\x18$<\xaea\xdcq\xfb,?T?T\xd6.\xb2c\x8bzx\xc0\xfe;\x11\xe5i\x97/\xb7\x88s\xb4`\xbck\xe3!\xf4\xfc%\xfb\x83\xf1\x0b\xb0%%Z\xd0\xa9\xa5\x1ap\x8e\xe5\x8f\xc7\x88c\x80E2@=\xe0\xa2\x8d\x1b\xcd0 \x9e\xa1'#a1\x0d+D5\x0c\x8fk\x18\x1a\xd904\xb6apt\xc3\xa0\xf8\x86\xc1\x11\x0e\x03c\x1c\x86G9\x0c\x8fs\x18\x18\xe9\xb0j\xacC? /\x9a3\xde\x01\xd0\xd7\xdesh\xc4\xc3\xb3\xc5<\xbcP\xf4\xc3F\xc5?\xbc\x8e\x08\x88\x0d\x8c\x81x\xd9(\x08x\x1c\x04\xf4\xbeL\xffz\xc4X\x08\xb8-8R<\xc4\xa0\x88\x08(\x96\xfanP:K\xe4\xbb\x95\xbc\xf2$\xff\x83H\xf9\xa17)/\xdf\x18x\xd18\x88\xd6H\x85\xcda\xb4\xf1\xaa\xe4eV\xb3\xcf\xbc\x90\x97\xf7\x86\xe4\x91DUp\xbfJs\x9d?e*\xdf\xa1\xe4\xafPz\x8b\x9c\xcbN#\x90\xbb\x863\xad:\x80\x88\xaa\x01\x94$\xe2\xf2\x9ciX\xa6\xd2\xa3\x84\xe7sk\x99\x12\xe3\xd2\xffPJw\x89\x06\x0f\xb5\xb8\x8a}\xe5\xda\xfa\xd1\xf3E\xbe\xbc=Y\xee\xa0j\x11\xeb\x7f\x97tN\x8a\x12\xcf\x17\xc5\x8ev\x87\x89L\xdf\x1d?=<\xcb)\xe1ph:\xcd\xdcd\x80O\xcc\xd0\xf3\xb2|D\xfc\x9a\x11\x11\x12\x84\xc0\x05\x84\x8cE\xc4\xc0\xee2\xb6\x84@\x8b=&\xe3\x8d\xc8\x1e\xebR?l\xce\xa4~\xbe\xe4Uo$\xbe \x9a&\x9e:\x97\xa2\xf5\xa0\x08&\x05\x10\xea\xbc$m\xfa \x84\xc9!WOP\xc0!\x1d\xf8\xe5\xfd\x99\\\x81\xaff\n\x13\\\x94\ni\x10a\x1b:\x8f<|\x8e\x8e8\x91Rd\xc0\x88u\x15\x15j6\xa3\xc4\x90\xa7\xc0\xa4hp\xce0[Y\xda.-9\xa7\x9fa\xa5i\x94sk\x1e\xe0?\xe22\x9c\xd7\x8f\x103\xee\xed\xe0,\x8c\xd4lkY\x11&\xdd\x12\x0fK\x04^h\xa3H\x01E\xb3tO\xd0\x8b\xc8\xbd\xff\xd8\x03\xc3\xf0\x84\xa9\xb8oL\xbb\x16(\xc2\x0baeZ\xa3p\xd8\x0e\xf4\x82\xd2\xebK\xee\x9by\xdb\xed\xf6\xfd\x8c\x9d\xa4\xff\x92\x9cn\xd5\xc3\xbbhD\x04#,#\xca\xd8\xfes\x02\xac\xe3\xcb\xb0b\xa9H\x8bW\xfc\xe5 \xe5\xf3\x8c\xe3e\x03P_\xda\x8c\xf2\xc8Y\x0b\xdc\xb0\x08\x07k\x8c\x83\xdf\x1c\x04\xd8P\x10\xfb\xe9\xf9\xaf\xb0\xda\x81X\x1a\x01w\x00C\xb3\xb2\x85\xdb\xb24\xe6\"\x14\x99\xb0V\x9a\x02B\xae\x83\xe6\xd0\xf0\x04\x13\x14\x88+\x90\xe0\xa5\x0d\xe1L7\xe8\xc9\xf8\x02|y\xc6X<`\x0e\xc9\x7f\xbe\x0e\x1e\x19\xc8\xd6\x0e \xe3\x9b\xe4\x93\x17^s\x93\x81\xf8\xe4\x0f\xdc\x003g\x08\xd5#\xc4n\xf4\xdb5#-\x84!\xb4\xae\x14\xbc\xe1\\(\x1e\x92U\x90\xe0\x98/\xa55\x80\"\xd7\x0bi2\xa2\xcf\x1bm\x84,/\xa3Af\x12\xa4+\x11P_\"\x04 \xbd\x16\x0d\xb84\x10\\N\xa0\xf5\x04c\x8b\xa6g*\xac;\xd1\xf3P\x078\xce\xb4\x90\x1e\xaeIM`@>\xc1\xb4)\xda<^\x8d\xa1[\x112\xb2\x1c\x80<\x0b\xe9\x0d\xd4\x8fU\xc3\xe8\x1fE\x83\xa0\x9e\xabe\xe4E2\x8c\xf2\x15\xf5 \xb2/!;\xf9\x9d\xa7\xc4\xc68kY\x81\x8ew\xe2\xb2G\xa9\xad\xf9\x00\xd6\xa6i\x04[\x03(B\xa0\\G=\x9e\xd4\x0c_h\xa1\x8e\xeb\"\xa8\x9c:\xd3\x1eVP\x9b\xc3\xa9\x95\x15S\x1b`\x0f>E\xbd^+\xdc \x9eu\x11\x97\xfc\xeb\x01\xc6\x92\xd24\x98\x97!\xc5\x05d\xddp\x9e@\x94\x96\x17\xdc*\xd4\x8f\xb4p\x86S\xbf\xa2\xe2\x02,/\x1b+ \xf8J\xa7\xa3\xfb)K\xed\xbbj\xbcTi\x85\xd5\xfb\xf5J+Nr\xc0B\x04Q,\x8d*\xcd\xba.\xa2\xfeE#\xbd\xf9\xad\xf5a\x0f\xb3Df\xfb/\xdcy\xdb]\x18b9E\x0beVpQ\x8c\xe6\x86\x01&I\x00\x97\"\x02O\x03B\x9d{\xf5NH#\x9f\x0e\xb5e\x83\xd0\xe4\xc4z\x7f7\xc3\xc5l|R\x19\x1d\x0c2'\"5*\xb3\xa8\xb5\x16L\x9e\x08 E4\x08/\xc0\x14`\x11\xaef\xb9\xbb\xd6\xc8\xbfe\x03_\xb3\x9f\xf9c\x97X\xd3\xe1il\x13\xb4f3\xca\xe6\xf3,\xe5\xe3\xf9cB\xc5\x93P/\xc2\x0e1\xb4\x08OSd\xd4w\xa5\xfc\xc5\x8b\xe0\x95\xb2j\xbaH4z+\xc0\xfeZ_\xd1r>\xedi\xd6x\xefjUc\xa2\x97\xa6\xf7\xd9\xadg-\xd1tQ\x95\xaf6a\x0b\xb2\x0bzM<\xc4\xd4k\xb7\xefl\xda\xe5Kj\xb2\xbe8\x9b\xf8\x84\xa6\xb7h\x82\xa3[Y\x95\x1d\x00\x89\xc7(\xf0\xd4\x0b\xbeh\xfc\x1e.\xfd\x04@\xd8\xc5\xd5\x93\x05@\xf3@4\xf8V\xb1\x88o\xa9\xe8\xeb\x18\xf0o\xa0\xc4\x89\xafE\x89' -f$V\xc1\x0c\xa1\xa0q\x88\x1c\xef\xc9\xa6\xbe\x94\xdb\x05>%\x11O,0\xac\n\x00<\xc6(t\x9eg\x8b\xac\x80\xf3@\x8b\xe5\xf50\x82?\x0d\xbfP8M\xb9G\xaf\xcc\xab\x88G\x13q\x1bi\x8e\xf3b\x16\x08ZG\xa8(qY\x05\xb7~?\xfe\x9f\xea\xdc\x15:\x15f\x13\x17|\\D\xaae\xa8\x90\x06M\x80N\xab\xf8Y\xf1\xb8!\x11#\xcf\xa6\x98\xdf\x92-\xaa\xb0x\xee\xc5cx\xee\xe3\xc5\xd7/g\x17\xbf_\x9f~?\xffqu}yur\xf5\xe3\xb2W>\x9a\x0b\xc6\xf9\xc5\xd9\xf9\xd9\xe5\n\x00\xc4\xb7`w\x9dO\xb7*!\xfd%y\x90y\x90\x19\x08\x800\xd2\xa8\x00 !<\xda\x0b'4\xde\xabRq^\x14\xeb\x96\xad\x1d@\xe7\xc0T\xday\xac\xfe\xdaN\xf82vL\x8ap>\xa1e\x8e\xf3e-\xc1xUA}\xe6\x13[a8\x8e\xe2\x9b\x1dC\xf1\xcd\x8e\x1f\x15\x1b\xbaa\x81-rrO\xb3\xaa\xe0\xef[5\xb7\xba\x91$\xe5\xc5U\n\x9b\xab\x1cG\xb7\xc2#&,'}\x02$J'AOe \xe9e\x0e\xd2\xb1\xb3\x19m\xd1\x8c\x92{\xf16dV\x95!\xb1\x93\xa5 \xec\x04\xa4Wk\x15\xbe\xb0\xae\xffO\xa9\xe7KU\x01U\xb0\x13VvA4\xd1cO{\x01\xdan\xa8\x17\xd0\xa0\x97\x1c\xa6\xa2K-\xc1\xda\x8dQ\x1f\x08\x01\xc0\xea\xfc&\xc9\x1b\xb9\x95iz\xa3\x9e\xb7\xd9\x99b\x9aT9\xe0\x08\x89\x98\x1a^\x88g\xd8\x82?\xee5\xeb}\x94\xee\xe5\x8f?\x06i\xa9n\xef\xf3\x93KX\x8a|\xb3\xdb\xe5\x7f\x9d\x9e\x0f\xe8\xf6\xed\xe4\xf4\x8f`7C'\x0f\xa5s\x986v\x8c\x06\x99\x14g\xe7\x86\x06FU\xda|\x9d\xd4\xd5zf\xc5w\xa7\xb4\xcd<\xf6\xad\xa1\xc2\x88\xb1\x9b\xf8+\xdd\xfa\x9d\xa7!C\xb2\xe5\xd0\x1e\x92}3\x86\xd4$\xedEYZ\xd0Xy\x1f\xf8\xe0\xb7\x94\xdfZ\xc4\xe2\xb9\xab9-\xf8k\xa9R\x1fe9\x8aI\x82\x97$\x06&&:\x90d\x8b\xaf\x8d$\xfb\xe6\xe4K}\xa1h\xc5\x9c\xc9\x0cW\x00\xbajP\xa1'\x0eUgB>\x914\xc2\x8b\xa2J4JRn\xf1S,\xc4\x8f\x88j\xcb\x03\x90c\x0c\xc3Q\xe0\xf0\xb6\xf8\x15\xd5\x0f\xac\xf3\xc7+\xb3\xa9b\x99|KX\x89\xeb\xc0,\xb1\x9f\x8a\x83\x8c\xeaP\x17\x13\xa60\xd3\xe1uTJjc\xa9\x18X\xdfe\x00\xf4la-\xaad-\x9c$/\x8f\x1c\xe0\xc2\xb3}\xa2\xafD\xb2)\xb7\\\xf9\x94\xe3\xb2\xc4\xd1L\x8cV?\xd7\x97\xe5\xbc5n\x14=\xbe3\xb4HNh0\\\xa8\x9e\x86M\x8e\x13jc9<@HC\x82\xb0\x04\x16\x8e\xb8 l\x19#H\xb5^6@\xf6\x08gA\xd07\xb9 \xfc1PU\x0c\x92^?\xfei-\x1cz\x818(c\xe4P\x00\xd4\x18;\xe5\x15\xe6@\x00\xa8\x02i \x04\xd4\x14h\x9b\x02!\xdb3P\x17<\x1dlS \x06\xf1j\x0c\xed\x82\xd06\x05\x02N\xf9\xc8\x8bd\x18\xe5+F\x92\xa2>)\x10R.\x8f\x99\x00a\x019^\xfa\x83\xb4\xaf\x9f3\xf9\xa1I\xcf\x08\x96\x05Pt@\xf9\x8d:8\x06N'\xfe}\xd0/\xed\xa15\xd9a\x95\xb4)FX\xcb\xdc\xea\n\x81\xe7\"\xb9eQ\x01I\x1eh\x87\xd5\x16Wg\x9e\xd7Mg\xcb\xa8\x02\xd29\xc8\x143\x8c\xae\x060\x87\x01\xb6:\x95%\xbei(\xbf\x7fJh{\x8b<\xbb')N#\xb27'%\x8eq\x89\xf7\xee\x0f\xf6\xf8\x02\xdb\xfb[\xa9\xbb\xff\xdd\x13\x8bq\xefo\xc6\xaa\xff\x15\x90n\x886\xdc\x8aj>\xc7\xf9\xf2X\xbf\x02P\x10\x9cG3\xf9d\xa0\\\xc8\x8a\"\x177\xaf\xea\xbb\x1c&\x0ew\x10\x9d\xaa\xd7\x08\xe3\x1dU\x1b) 9\x7f\xa9\xd9\xb3\xb2\xd8d\x08ix\x9c\x13\xbb\x1d\xc5/6\xa2\xa1\xfcu\x07\xb8\xe6\xb7\xa9\xfc\xc6\xb0\x10m\x8f.\xe9\x9c&8O\x96;5\x0ee\xa3\xaa\xb2\xd5f\xe1\x15R\xfc~\x901\xd4p\x83\x97\xe6\xf5\xae(o\xd2\x08ZYf\xd5\x9b\x9c\xd4\xe33;:\xe7\x0eDDS\xf3}\x8a\x7fC\xa7S\x94\xa5\xc9Rg\xdbk\xfdZ\xaf\x1b\xf9\x84\x9b\xe9F\xe5\x0ff\x18e\xb6rRVy\xca\xdf\xbe\xb0\x81\xd66_\x03.N\x92\xa6\x17\x94\x0d\xc3g\xb2/\xf8z\x82\xde\xb2\xc9\x90\xa3\xed\xd5\xdf\x7f\xb5\x8e\xd6\x9e\x1f5\xaes<\xac\x19\xaf\xa8\xd0\xaf\x95)\nq\x1a\xef\xd5\x0b\xe2\x9a6\xf9\xd7\xda\\\xb6\x01\xf5ON\xd0\x04\xc7\xa6\xebV\xfd\x08\xd1\xe9\xb1\x89\xd8Us\x8dr\xf1\xc9\x17&Nc\x94fV\xee\xbfk\x01\x90O\x91\x94\x0f\x19[\xce\xfc9\x92l\xda\x94%&I\xdc\x8d.\xc1\xf2\xff27\xcc\x12\xc5Y\xfa\xa6\x94\x1c\x9f\n\xd9\xcd7\x12c\x1e\xef\xd6\x18\xfe\xa4\xc3\xd5\x1d4\xa9J\x94f\xa5\x85\xb3\xb8Q\xe5\xbc\x0bF\xbc\xbcV/eF\x96\x9e-\xf6G\xbdg\xe2\x8c\x14\x0c\xcf9.\xa3\xe6+?F\x7fsF\xfe\xb1T\xc7\xed\x1d\xc3l\x12O\xc4H\xe3J\xbc\xe7R\xea\x8a3\x06\x86\x97\xa4\xacM7\xd5\x93Q\xd4\xb1\xe7\x18\xbbr\x91\xe0\xd7\xb0\xe0\x1a\xbe\xe6\xe6B\xd3\xaaA\x17+:\x8d\xb5.y\xff\x8b\"K\xa8\x7fC\x8f\xbd9\xdc\xdf\x7f\xe3v\x1e\x18\xc9\x8e\xeb\xf4\x1ap\xca\x02w\x18VO\x8e\xb4\xe2\x84 \xd4\x15\x1d#\xf5l\x0e\x9aeI\\\xe8\xeb\x0c\xb1\xf9\xfb^\xb1\xac~\xdf\xe1\xf3dyB)B\x8e\x82\xd0m\n\x82\x1d\xf7\x81\x97\xd3\xe1l8\x84~\x88\xca\x8a\xa7\xbf\xd7\x89\xf1b\xbb#t:_$\xfc\xf5\xb0\x02\x15\xf1\xed\xbb\x93@\xae\x97\xd4YS\x1c W\x18/9(\xc4\x94\xe8I\xc4^S6\\\xdb\x0cl\xb6/Y1\xcf\\\x83\x15\xe0\xd4\xc8\xe7ef-a\x8anF\xa3\xbe\xe0\xf4_\xbb6z\nS\x92\x97> j.p\x92d\x0fR\x8d\xc9\x9bH\x1f\xb8\xc8}\xdb\xc5\xdf\x9a\xf6\x84\xfb\xf8\\i\xaa\x05\xebR\x04\xf7\x8ch\xe1\x9d#\x1a^W\xcdDl\x7fd\xf0\xad\xca1\xf6\x97\x84\xca\xb3$X\x0b\n\xb2\x82D\xc3\x1c^\xbd#\x152F\xfd\xd3HV\x06\x05\x06\xda\xc8,d\x02\xa8\x87\xd8\x8by\xb0\xba\x0e\xaeg\xf6\xfbu\xac\x1f\xbf\xef\xd7O\xbdf\xdf\xaf\x97z\x93\xbe_/\xfd\xc8|\xbfn\xfcY\xf8~]\xf4\x83\xee\xfd\xba\xc9'\xd9\xfbu\xaa\xdfM\xef\xd7\xaf~\xc9\xbc_?\xfd\xdex\xa0\x9b.\xa61hy\x85m\x95fs\xad\xe2\x81\xc3#$\x1fS\xe7\x17<=\x8ab86\xc5\xb1\xfd\xb3\x1cE>\x11\x9f\xd3\x1b\x9a\xe2\x12R\x1b\xd0\xba\x87\x8em\x1f\x95\xb1^\xa0\x98LJT\x90\xfc\x9eF4\xbdA\xd3*\xe5/\xe3\x87\n:\xb8\xf6\xde\xb1\xed\xa38-\xf1\xc8\x17\x1a!\x9a\xde\x93\xa2?=z\x9f\x1e[\xbf\xa2\xc6;\xf7\\}k\x1a\xa3\xaa(\xb3\x98\xe2T\x12*\xfd=\xe2\xd9\xfb\x9eh\xf0}\x7f\xdc\xf9\xd2\xae\xc7\xb50\x1e\x95\xe7J[i)\xa6}{\x0e\xa9\xe5\xc6\xb1\xf5\xab\xe0\xae\x18P\x1c\x94S\x84\xa7S\x9a\xf0\xd7\xd4\xf1MN\xb8\x19\xd2sP)u\x8e-\xdf\xc4\x80\xdc\xea\xc1\x89\xb8H\x95/w.k\xbb)\xcf\x12A\xfc<\xa5\x93\xaa@\x13\x9c\xde*\xad\xd8\x13\x95Z\x96\x1d\xdb?3\x84T\xe5 5\x0f\xe64\xe4d\x91\x93\x82\x9bb<\xd2PW=\x93\x8e\xadf\xe5]\x1c\x0d\xd8\xd4\xb5\xdc<\xb6\x7fn\xae\xcf\x87\x19\x8df\x06\x9f\xeaG\xdc\xe5\xae\xd7EA)A$\xcd\xca@\x11\xe0.BZ \x1f[\xbf\xda\xd0\xe1\xb5\xf6\xf8\x12\x16uP\xc4\xfe\x80\x94lA\xfa}\xdf\x90e\x11\x8e,0~+\xac/\xed\x9b\xd6\x13\xfa\xa6@\x05\xbdI\xb1x\xaa\xb7\xd0\x83{\xe0\xc1,\xb9\x13tn\xec[e_\xb2M\xb5\xc7\x0b\x11\x0b\xbe0K\xcf\x0b\xa6\xfb\xce~\xe4\xaf-\xd2G\xb3]\xf1s\xb6|'\xb7^\xda\xa8\xcc\x16(!\xf7$\x91\x87\x84p\xb8\xa8:\xab\x0b\x1b\xf5]\x1b4\xf7d3>\xf3\xd8Jyt\xf7\x89\xcb\xfau\xef\xa5\xfbq^a\xdc\xf2\xf3\x91\xe5m\x00\x81A\xf3\xf4\xe9]yU*\\\x8a\xe5L\xe3\x9dP\xee\x83\xcd\x1a\xaf\xf59\xe3\xfc\x19&\xd78\xf2W\xcb\x1f\xf1X\x15\xb0\xd1\xe1\xeb\xe0D3I\x05\xb72\xc29\xc7pU\xce\xb2\x9c> \x89\x98\x93\x88\xd0{\xdfB\xa8+\xf2\xf2y\xe9\x967\xd7.\x06\x07\x10\x1e\x0cq\xcd\xd7\xddu\xf0\xb876\x1f\xea\x8d\xdaT>l\xf6Ee\xea\x16A\xde\xb5ixS.K\x9c\xc68\x8fM\x85!5\x98x\xcc{\x8e\xf3[\xefS\xf2\xea\xd7\xbe\xed\xc0&\xac\xa8\x16\x8b,o\xd4:\xe4\x98\xf3\x1d!\x8a\x1d\xe5tR\x95\x04\xcd\xf1\x92;\xe4=\x00'\x84\xc9\xeb\xf4\x86\xc4h\xb2\xe4\\\x90R\xbe\xaeg\x95\xa5\x11\xb3D\x98\x9c+\x88%\xf2Z4\xe9\xf6\xb9\xe62\xf7:\xcf\x92\xa4Z\x84\xa65$\xd9\xe1\xf3\xfa\x97\x14\xfb8I\xf4\xd6n\x86q\xb3)\xa0e\x81,7\xfb\xed\xa6n\xe5\x94\xb0l\x00zS(\x919\xa5$\x89=\xcf\x99\xab\xe9H\x8a\x0c\x91\x14O\x12q:g\xa2V\xe9\xa0\x7f\xe7Ne\x81\xa0\x80\xea\x9b\xfb\xda\xab\xadh\xb4O\x06\x8cm\"\x80M?\xf6\x8e\xf2,+\x8dr\xb0\xdc\xe6EQ\x96$\x84\x9b8\xf5\xe5\x83\x0bGF\x00_EYJ\xf4\x95\x85\x07Q\xe5*\xf5\xc4O\xc2(i\x00\x82W\xb5r\xfbVj%c\xfdA\xd0\xe5\x15vv=\xa7\x9b\xb8\xc1D\xf3\xe6\xa9\x1c\\\x8cDs<\x94\xe1\xb6f*BIj5E\x9e4\x1f\x0dL\xfc\xc3\x9f\xe1\xb3&\x82\xbc\xc2\xcd\x82 \xf2\xd5\x04 y\xa0A\xfcp\x07\xef#(\x1b\xfaR\x88C ^c\xd16\xc2\x14\xf7\xa5m\xa5T-\xcb\x02p\x0b\xd4p\xee3\x0c\xf7.\xb4a\x95<\xbau<,W(k\x16\xb4\xc1\\f\xd0\x9c\xafe[\x07\x12\x96\xbd\x17<\xa8}\x9f\x04\x93\xdb\xd0\xf4\xe4\x17g\nD\xbcCa\xc1Xb\xfc\xd7\x08Bb\xad\xbci\xa1\xda\xd4\x08\xfa\xb3\x07\x9cUM\xc2\xb9\xf5\x02\n\x02\x96\x06<\xfe\xc2\x18a)\x0c\"u\x04\xa5\xe1X-m\xa2\xdd\x89j>o\xc6\xba\xf2-$6.\x96\x07\xd5Bx\x04\x84^\xe2\xa1Hx\\\xc3\xb8\xe3\xf6Y~\xfa1\xce\xba\xc2\xb3\xa3&\x06\xe8\x95\x06[\x8dg\xc9x\xd7\xc6C\xea\xd0\x18f\xcff\xbe\xaa\x11tj\xa9\x06\x9cc\xf9\xe31\xe2\x18`\x91\x0cP\x0f\xb8h\xe3F3\x0c\x88g\xe8\xc9HXL\xc3\nQ\x0d\xc3\xe3\x1a\x86F6\x0c\x8dm\x18\x1c\xdd0(\xbeap\x84\xc3\xc0\x18\x87\xe1Q\x0e\xc3\xe3\x1c\x06F:\xac\x1a\xeb\xd0O\xc2\x8b\xe6\x8cw\x00\xf4\xb5\xf7\x1c\x1a\xf1\xf0l1\x0f\xcf\x1d\xf5\xf0\x1cq\x0f\x1b\x13\xf9\xf0\"\xb1\x0f/\x14\xfd\xb0Q\xf1\x0f\xaf#\x02b\x03c ^6\n\x02\x1e\x07\x01\xbd/\xd3\xbf\x1e1\x16\x02n\x0b\x8e\x14\x0f1(\"\x02\x8a\xa5\xbe\x1b\x94\xce\x12\xc2\x1f&\x12\xf5\xa5\xf8\x1fdf\xd0M\xcak.\x05\x9eF\x0f\xa25R\x8dR\x18m<\x83\xa6\xccj\xf6\x99\x17\xf2\xf2\xde\x10\xf6\x06\x954\xd7w\x18~4\xc2I\xb2\xac_\x1fwv\x94\x9dF w\x0dgZu\x00\x11\x89\xac\x94$\xe2\xf2\x9ciX\xa6\xd2\xa3\x84\x92\xb4>\xdf\xf2\xc8\x06/\xbc\xee\x12\x0d\x1ejq\x15S/w\xfa\xd0\xf3\x85\x1f\xa7c4Y\xee\xa0j\x11\xeb\x7f\x97tN\x8a\x12\xcf\x17\xc5\x8ev\x87\x89Bg\xfe\xd7\x01E\x8aV\"\xdf\xaf\x9afn2\xc0'f\xe8yYx\x06\xe2kFDH\x10\x02\x17\x102\x16\x11\x03\xbb\xcb\xd8\x12\x02-\xf6\x98\x8c7\"{\xac\x0b\x93\xa0\xf2\xee\x9f\xa4e\xbe\xe4\xafVI|A4M\x96#R\x04\x93\x02\x08u^\x0f7\xfd\x04\xc2\xe4\x90\xab'(\xe0\x90\x0e\xfc\xf2\xfeL\xae\xc0W3\x85 .J\x854\x88\xb0\x0d\x9dG\x1e>GG\x9cH)2`\xc4\xbaJ\x015\x9bQ\x18\xe8\xe3\x87\x10\\0g\x98\xad,m\x97\x96\x9c\x13\x9c\xe1e\x99\xa3\x9c[\xf3\x00\xff\x11\x97\xe1\x04G39\xe3\xde\x0e\xcerF\xcd\xb6\x96\x15a\xd2-\xf1\xb0D\xe0\x856\x8a\x14P4K\xf7\x04\xbd\x88\xdc\xfb\x8f=0\x0cO\x98\x8a\xfb\xc6\xb4k\x81\"\xbc\x10V\xa65\n\x87\xed@/(\xbd\xce34\xc7\xb7D.u\x955\xc7\xd4\x95\xdc\xd8d\x89\x1eH\x1e\x981\x1c\xbb~\x00U\xba\x97\xd2\x80\xd2\xf1R\x86-\xa5\xad\x0b|\x83i\xca\x1f\xb9W\x96\x84\x13^\xd3\x95\xcez\xe14\"\x9eh\xb2+\xc3\x8d\xcas\xd4g\xf8\x9e\x18#I\x0e\xf3\x18\xb1R\x1d1)q\x8b\x05\x9a\xdeg\xc9}3\xc1\xbd\xdd\xbe\x9f\xb1\x93\xf4_\x92\xd32#=\xcdDh\xd7E#\"\x18a\x19Q\xd6H\xe3o\xb7:\xbe\x0c+\x96\x8a\xc4m\xc5_\x9eT?\xcf\xee]o\x93\xd6\x976\xa3\xbcW\xd2\x027,\xc2\xc1\x1a\xe3\xe07\x07\x016\x14\xc4~z\xfe+\xacv V\xa3\xc8\x81=\x80\xa1Y\x88\xc3mY\x1as\x11\x8aLX+M\x01!\xd7Ashx\x02j\x94M\x08\xff\x06\x14\x9f\xb6!\x9c\xe9\x06=\x19_\x80E\xe4\xcbF\x11\x0d\x18\x87\xe4?_\x07\x8f\x0cdk\x87\x84\xf1M\xf2\xc9\x0b\xaf\xb9\xc9@|\xf2\x07n\x80\x993\x84\xea\x11b7\xfa\xed\x9a\x91\x16\xc2\x10ZW\n\xdep.\x14\x0f\xc9*Hp\xccGO\x1a@\xd1\xd8\x0fCBf\x12\xa4+\x11P_\"\x04 \xbd\x16\x0d\xb84\x10\\N\xa0\xf5\x04c\x8b\xa6g*\xac;\xd1\xf3P\x078\xce\xb4\x90\x1e\xaeIM`@>\xc1\xb4)\xda<^\x8d\xa1[\x11\xda\xbe\x0c \xa7|\xe4E2\x8c\xf2\x15\xf5 \xb2/!;\xf9\x9dWA\xc68kY\x81\x8ew\xe2\xb2G\xa9\xad\xf9\x00\xd6\xa6i\x04[\x03(B\xa0\\G=^\xc7\n_h\xa1\x8e\xeb\"\xa8\x9c:\xd3\x1eVP\x9b\xc3\xa9\x95\x15S\x1b`\x0f>E\xbd\x1e\x1e\xda \x9eu\x11G\x80\xd7\xae,\xbdZ\x11\xeaCy\x19R\\@\xd6\x0d\xe7 Diy\xc1\xadB\xfdH\x0bg8\xf5+*.\xc0\xf2\xb2\xb1\x02\x82\xaft:\xba\x9f\xa8\xd2\xbe\xab\xe7z\xa3J\x0e\xe8y\xa4J\xffBWSD\xbc\x98\xa2\x05\x98Q^\xd1\xfb^Ud\x7f\xb0E,\x8c\xe7\x8d\xfc\x17\xc8\xb8\x96\xebHJ\xfb\xd9\xa32\xf6\xea\xc5Q\x87I\x0bR\xdf!\xf4'/; \x93\xce\xbd\xb0dd\xbe\xa5\x14\xc6IRd\xe86\xcd\x1eR\x84\xd9\xfa\xfd\xc6\x0c!o\xb8\xc6K\xb8\x8ea\x1c\xab\x13\x0f\xd4\xf6S\xf7\x1e*\xe3\xa0\x95U\x10\x10\x9d\x9a\xd7\xe8\xed\xffg\xef\xdb\x9a\xe2\xd6\x95\x85\xdf\xf7\xaf\xd0[\xb2NA\x06H\xc8\x85\xaa\xefavVr6\xb5s\x80\x05d\xadGJck\x18\x07\x8f=\xd820\xec\xda\xff\xfd+]-\xdb\xba\xb4=\x1e.U\xcbO\x89\x19\xb7\xfa\"u\xb7\xa4\xbe\xf0\x9a\x95 ]\xa0y\x92RR\x90\x18\xdd\xdc)\x0bOI\x81i^\xb8\xc3\xc6dL\xba\x97] \x02% \xa5o\x1a\x9e\xaf\xa2L\x88\xda[\xbaA\xeb\x9cu\xf36*\xe7qz\xf9|.#\xe2\x9a\x9d\xe4\xa0\xcc\nN\x8a\xd1\x0ed\x80\xe9\x12\xc0\xa9\x88\xc0b@\xa8s\xc3\xde n\xe4\xe2PK6\x08M\n\xd6\xfb\xbb\x05.\x17\xe3\x93JeSiNDf\xd4hQs-\x98F\x11R\x8ah\x10^\x00\x11\xc8\n\xde\x96[l\x8d\xfc[60o\xa0\xed\x8fbb\x8f\x0eT\xe3E\xe0\x9b\xd2\x8c\xf2\xe52\xcf\xf8x\xfe\xe8P\xd1\xd2\xe9Y\xd8!\x86\x16\x81j\x8a\x8c\xfa\xd6\x94\xe6\x90\xcbe\xf5\xe8\xca\xd3\xe8\xad\x00\xfb[}Y\xcb\xf94\xd1\xac\xf1\xde\xda\xaa\x87\xa9\xde$\xbb\xcboi\xfcg]\xba\xc8z\xf8\xb0\xab'\x0b\x80\xee\x81x\xe0K\xc5\xa2\xbe\xa5\xa1\xaf\xa3\xc1\xbf\x83R(\xbe\x95\x14\xcf\xd2\x847\xe5\x97a\x0d\xa1\xf0q\x88\x1e\xef\xc9\xa6\xbe\x94\xdb\x15~B\"\x9eb`x\x15\x00x\x8cQ\xe8\xac\xc8Wy \xe7\x81V\xcb\xdba\x04oQ\xb8R8\xcd\xf9\xd9\x1e-\xaa\x88\xc7\x15q\x1fi\x89\x8br\x11\x08_G\xa8\xa4\x98V\xc1\xa5\xdf\x8f\xff\xc7:\x8b%\x99\x0b\xb7\x89+>\xae\"\xd54TH\x83\x04\xa0\x13,~U<\x82HD\xcb3\x11\xf3\xfb\xb2U\x15V\xcf\xbdx\x0c\xcf\x82<\xff\xf6\xf5\xf4\xfc\xf7\xab\xe3\x93\xb3\x9f\x97W\x17\x97\xd3\xcb\x9f\x17\xbd2\xd3\\0\xce\xceO\xcfN/6\x00 \xde\x05?\xd7\x99u\x9b\x12\xd2_\x93\x07\x99\x07\x91@\x00\x84\x91P\x05H\x0d\xe1q_8M\xe2I\x95\x89\xfd\xa2\x98\xb7l\xee\x00>\x0e\x88\xd2\xcec\xf5\xd7v\xea\x97\xb1b2\x84\x8bYB\x0b\\\xack\x0d\xc6\xeb\x0b\xea=\x9fX\n\xc3q\x14\xef\xec\x18\x8awv\xfc\x12\xb1\xa0\x1b\x1e\xd8\xaa wI^\x95\xe9\xba\xb3\xd4\x8dt)/\xaeR\xd9\\\x168\xba\x11gc\xc2s\xd2;@\xa2l\x12tW\x06\xd2^\xe6 \x1d?\x9b\xd1\x16-\x12r'\xba\x9b\xe4\x15\x0d\xa9\x9d<\x03a' \xbdZ\xaf\xf0\x99m\xfd\xbf\xa4\x9d\xa7\xaa\x16\xaa`'\xac\x00\x83x\xc4\x17\x93\xba\x9f|\xeb\x18\xea\x19,\xe8\x05\x87\xa9\xe8RS\xb0>\xc6\xa87\x84\x00`u\xa6\x93\xe4\x8d\\\xcaIv\xad\x1a\xe6\xec\xccq\x92V\x05`\x0b\x89\x98\x19^\x91,\x06 \xb2\x8f\xd4\xfb\x18\xdd\x8b\x9f?\x06Y\xa9\xee\xd7g\xd3\x0bX\xb2|\xf3\xb3\x8b\x7f\x1f\x9f\x0d\xf8\xec\xfb\xf4\xf8G\xf03\xc3&\x0f\xa5s\x985v\x8c\x06\x11\x8a\xf3\xe3\x86\x05FUV\x92\xb0\xaf\xc6\xef5\xfa\xe4\xc7wE\xdaf\x1e{\xd70a\xc4XM\xcc\x82\xd6\x9d\xa3\x86\x0c\xc9\xa6C{H\xf6\xce\x18R\x934\x89\xf2\xacLbu\xfa\xc0\x07\xbfI\xf8\xfdE,\xbah-\x93\xb2d\x8bS\xda\xa3\xbc@1I\xf1\x9a\xc4\xc0\x14E\x07\x92l\xf2\xb5\x91d\xef\x9c|\xa9\xaf\x16\xad\x983\x9d\xe1\nEW\x0fT\xe9\x89M\xd5\xa9\xd0O$\x8b\xf0\xaa\xacR\x8d\x92\xd4[|\x17\x0b9GD\xb5\xe7\x01\xc86\x86\xe1(px[\xfe\x86\xea\x06\xe8UJ\xb9\x92\x96,\xcb\xae\x1b\xea: %\xf6S\xb1\x91Q\x1f\xd4e\x85\x13\x98\xeb\xf0:j&\xb5\xb1T\x0c\xac\xef2\x00v\xb6\xb4\x96W\xb2\x96P\x92\x97G\x0epaiO\xf5\x95H>\xe7\x9e+\x179\xa6\x14G\x0b1\x9a\xcehek\x93\xe0\xc8]\x08\xbb\xb9b\xe4<\xe6{\xf7`\xe2v\x83\xc5\x12#\xc9\xb9<\x93\x07\x1a\xf2\xb5\xccv\xb2\x93\xac\x0f\xaeF TjB\x0bD(\x19\x91HN\x80\x8d)\xb0\xe5\x88$\xd0\x19\xde\x16\x17\x8a\x1e\xdf\x19d$\x05\x1a\x0c\x1c\xaa\xc5\xf0\x92#\x86\xdaX\x0e\x0f\x15\xd2\x90 ,\x81\x05&\xbe\x04\xb6\x8c\x11\xaeZO\x1b {\xc4aA\xf0l\xf2%\xf0\xc7@U1H\x9e\xfa\xf1W[\xe1\xd03DD\x19#\x87B\xa1\xc6X)\xaf0\x1b\x02@\x15\xc8J \xa0\xa5@\x7f'C\xc8\xe7 \xa8\x0b\xee\x0e\xfeN\x86\x18\xc4\xab1\xac\x0bB\x7f'C\xc0)\x1fy\x92\x0c\xa3|\xc3\x98R\xd4'\x19B\xea\xe51S!, \xc7K\x84\x90\xfe\xf5S\xa6A4\xe9\x19\xc1\xb3\x00\xaa\x0e(\xbfQ\x07\xc7\xc0\xee\xc4\xbf\x0e\xfa%@\xb4\x84\x1d6I/\x85G\x1b\x1b\xa2&80\x87\xb6\x12\xbf\xbe}nm+\xeda \x17_\xcb\x16\xc8\x82\xafe\x1f\xe4\x854\x02\xc3B\xf6\x1c\xc8\xa6\xa1\xf4\x8fb\xc9\xa1tw2*\xc6\xdc#Y\x81;\xf7J P\\\xe1\xa2$v\xef\x99\x82$\x83,\x1d\x02Z;\xd43\xf1\x0f\xc1\xe7\x0f\x82/5\xd4S0\xa8G\" \x18P_[\x88\x86%\x04\xa2\x17\xcb\xc1\x90\x8d\x0c\x02\xa4\xbdR\xbb\x10,!\xea\x95\xf2r\x98\x05\xed\x82\xb2X\xd1\x9e\x10\xfa\xc9 d\xcf\xf0\xc1\xee\xe1\xfc\xfd\xe1\xee\x87\xc3/x\xf7\xf3G\xfciwN\"\xbc?\xdb;\xdc? {\xa2\x04\xbd\xd2k\x91\xbb7^\x93\xcb>\\\xf7o\x1f\x9d\\\xbe}Ho\xeeIjef \x81r,v\xd6\x15\xf6z3\xf4\xf0\xf3\xde\xfb\xf9\xe7Y\xb4\xfbq\xef\xe3\xa7\xdd\x0fdv\xb8\xfb\xe5p\x7f\xbe{\xb0\x7f\xb0\xff\xf1\xd3~t@\xa2\x16C\xc5`\x1b\xb1T\x80\xd8\xbf}p2\xf5Ky\x9bF\x8b\xf7\xe5\xc3}\xf6\xe1\xc3\xaf\xc3\xbd_\x8f\xd7\xf4sQ.\xeen\xd7\xf3\xe2WT\xb8\xc8\xe1\xed\x94\x19\x13\xf2,]\xd7,@ O\xdc3\xae\x0fpZ\xe6.\xfcd\xb7\x0b\xab\xbav\xef\x95\x83\xc2\x94!\x17\xe6\xeeUdo5\xce\xe4h\x8e\xd2<\xbfa\xda\xd9\x02E&\xfb\x88\x03I\x1f\x1e\xbe>\x00\xb0Y\xd5\x18J(\xa9y\x8a\xaf\xb9\xd9\xd0m\x03r\xf53N\x82\xdbL\n \xd2r\xc9\x08\xa1\x92\xd4\xd6Em\xd5\xcaU\x9e\x95\xd6\x08\x0e\x8d\x8eLn\x7f\"\xe2\xcdd\xfb\x10\xfd\xfe\xe9^nD>y\x10\x08y\xb7\xe2cQ\xdf\x1a\xccM\xbc\xfc!\xc7\xdey\x99\xc9A\xf0`\x9f\x10\x91\x8a\xebN\xaf\x01\x8dHdk0\x88\x84\x9d\xf9\xbd\x1aF\x86\xd6yUH\xd7\xa4I\xa2\x1f+\x99Nu.\xb9\x83\xea\xe8:\xf1\x7fF\xb5\x8c\xc8&\xe8\x8f\x8a\x14\xeb\x89*\xae{~\xf6\xb5\x05Ldr\xd6\xc3\xabPZ\xe3g\x0dl\xa6\x19\xaa2\xf2\xb0\"\x11\xf3\xaeDo&\x9b\x9c\xcahA\x96\xb8)\x16\xa7\xb3\xe5v\xb4\xf8\x00]\xe1z\x14h\x94\xc7\x16m'>p\xd5\x18W\xbb\xd2$\xa3\xef\x0f:\x0cr\xd4\xe7\xf6\xe0\x10\x13\x8a\x93\xf4\x85\x14\xc1`\x9f_U\x85\xb3-L\xd0\x18\xf1\xdc\xd1\xc1_[\xf7\xfc+\\\xe0%\xa1\xa40p\xde\x15\x06S\x9b^\xd7\x0cl\xad\x87\xbe\x0e\xe20\xb7\xd0\xe7\xad\x0cq\xfb\x92\xec\x08\xad05\xc3 \x99bH\n\x12\x1f!ZT\xa6\x81\xb0\xb2Xq\xabu\x9a\xdd\xe0\xd4 \xf7a4\xcc\x8c}\x0bP\x94\x83w:\xe3\xeeo\x18\x07n\x99\xda\xb4\xb2`\x8e\xd3\x12\xcc\x83\xda\xdd\x06\xb2\xa0\xbf\x7f>\xd4+\xd7\xecl@\xb3\xcc\xee\xb1=\xf0\x0d\xfcn\x9b\xb7=\xa2\xb4\x1an,P`\xc3\\_\xcb^s\x88\xc77\x84\xf6\xb67\xd4!^\xba\xa0}\xe9\xef\xe3\xfd\"\xcb \xcf\xcf\x81\x96+\x0bd\xc0@\x07\xb8vu\x1b\xd0\x9e\x82\xce\x967\x0b\xa4s\x90\x0flx\xbb\x0d`\x0e\xcfws*)\xben\xb8\x14\x7fHh\x13\xa6:H\x86\xb3\x88L\x96\x84\xe2\x18S<\xb9\xdb\x9f\xf0u8\xf9\x8fR;\xff\x9d\x8897\xf9\x8f\xb4E\x8cc\xff\x9d\xc8\xe9*\x00_\x13\xed\x1d\x97\xd5r\x89\x8b\xf5\x91*\xfdV\xa2\x92\xe0\"Z\xc8V\x97j\x96+\x12]\xec\xbd4\xa2\xc5Zj_\xa8\x15\x8b\xea\x87\xbb1^\xff\x05\xec\xbb\xa0\x8bd\x99\xa4\xb8H\xd7;\xe6\n\x96\x18kxm\x83\x85j68Q\x18\xc1\xc00\x16j\x80\x86\x1b\xb1\xc3\xac\x8a\xb2\x1a;\xaa*\x1a\xc2\xf5\xe8\x10\x17c\x0c\xf7\xa2\x1e\xf1\x7f\xd0\xf1\\\xd8\xbe\xa6\xb9\xab\xd1\xc4ij\x94\xee\x93\xb9;R\x8c\x85I'\xad\x8a\x8c\xb7\\\xb1\xc2\xae%\xd4\x80\x9e\xd0\x9a\x0f\x86Pp\x167\xcb\xf6\xb4\x8a\x16\xf2\xc5l\x1f\xb05\x1f\xb8f\x10S\x96.\x88\x9e\xcd\x06\xb5|\xcf\xd8\xf5\x0e9Z\xcc\xea3\xdc\x0cvH\xccZ\x18\xd5HxP\x93\xbchy\x965l\xda\xaa\x0b\xa7\xed\x0f\xa6\xf2#\x0d\x8f\xb7\xc9\x99\x11\xe7Pz\x14\xe5v\xabQ\x1c\\\xd81y\x86\x1b\xe5\x16\xb4P\x9a\x8cj0\xa8\x1e\xbd\xcd\xa9\x10E6J4\xb0)\x9a\xe1\xd8\xbceQ?B\xc9\xfc\xc8\xa4\xf8\xd2!t\x8e\x84I\xfd}B\x17yE\x9b\xf2\xb7-\xd6\x06C\xa7Nnjx\xd9\x1a\xdd\xe3579\xaar\x9dv\xad\xd0\xdb\xc6\n6\xb9\x8e;|7\xf9\xfd\x0f\xe3\x1b\x03\xb7\xdf\x1a\xc8]\xde\xe7L4\xbcoQ>\xf7H\xb4\xb9\xbcLQ\x9a\x0bY\x93\xc6~\x14\xe7\xd9\x1b\xcaU\x00\x8fO\x91\xd5\x99P\xc9\xf6yM\xb5m\xe7\x17\x87\xfe\x96\xa9]\xc5mch^\xab\xac\xc3M\x84\xdb\xcaX}&\x96\x9d\x9cMqNJ\x94\xe5TM+TV\xd1\xa2\xcb/\x0fZ-Lx\xff\xa7YN\x17\xc6\x14\x9eU\xb4\x0e\xcc\xd1\x80\xe2d\xce_\xa9)\\\x9aS\xf6\x9fkuj\xb5cL\x80z\xacR\xf6\x99\xa2\xba\xfe\x95\x81\xe2\x05\xa1-\x1f\x1eg\xf1$/\x0c\x7fG\xc0`r(D\xb6q\xc3\x93m8\xf2\xf2[\x8d\xa4x\xab\x0b\xa7\x1d\xc7\xb5\xabp(\xff\xa8\xbc=\xc3mys\xb0\xb7\xf7\xc6}\x02gd^o\xf3\xe8\xcdqo\x10>1\xd5[!\xc6\x1f]h6R\xdd\xbcx\x95\xd9R\xba\xf8\xda\xcc\xbdMl\xc1-\xee:\xb3\x1b]\xdd:HC!\xa8(\x08\x19\x05\xefE\x11\xec\xd0\x0c\x18*\x13\xce\xcdE\xe8\xa7\xa8\xf3z\xfc{]\xa6C\xe8\x0f\x84\x8e\x97\xab\x94w5,Q\x19\xdf\xbc\x9b\x062O\x11?A-\xe68\x12\x07\xcc\xbc\x00\xaa\xe8\xe4&\xbe$b\xad)\x9f\xbd\xed\xf67\x9f\xafy\xb9\xcc]\x83\x95\xe0D\xed\xa7ef\xad`\xcan~\xb5\x0e\xb7\xf0\x07\x814\xbe\x14[\x05^\x88\x85(Y\xe04\xcd\xef\xa5r\x96\x89\xed>p\x9d\xb3\x84\xfa\xe1=\xf0=\xc1\x87\xbe\x03i\xf5\x04\xab\xe4\x04\xd7\x8cx\xc2+G\x99^\x9e\x9e\xf7\xfb\xee\xe2\xdb\xf9\x9f\xc7_\xbf\xf5\xfc\xea\xf8\xe4\xcfo\x17\xbd\xc7\xfa\xfa\xf3\xe2\xf2\xf4\xf7\xe3\xe9I\xbf\xcfN\xff:\xe9\x8b\xdf\xf4\xfb\xf7\xe3\x1f\xc7\xd3\xcbo\xfd>;\xfd\xbf\x93\xe3\x7f\xfe\x0c\xd7\xe8i|tv~\xfa\xe7\xb7\x93\xe9\xc9\xd7\x9e\x83}==\xb9\x85EU&\xb1> \x05\xa4\x90\xee;\x1e\xf2,\xc2!<\xc6o\x85\xf7\xa5\xef\"\xb4@\xdf\x94\xa8L\xae3,Z\x88\x97zp\x0f<\x98'7Eg\xc6\xbaU\xfe%[T\x13^\x16]\xf0\x85yz^0\xedj\xf5\xc1JG},\xdb%\xdfh\xcb\xfe\xdd\xf5\xd4F4_\xa1\x94\xdc\x91Tn\x12\xc2\xc1\xeb\xea(D\xf8\xa8\xef\xda\xa0\xf9\xe9$\xe33?\x9a\x93[w\x9f\xba\xe4k\x9f\xb7b_\xbb\x9b\x86\x0b\xe7\x96\xef\x8f,\x9dJ\x04\x06\xcd\xdd\xa7w\xe6U\x19/!\xc7\xb8\xac\xf0N\x93\x92\x8a\xbag\xe6\xd5\xa4+l\x94ar\x85#\x7f\xef\x8e\x11\xb7U\x01\x1f\x1d>\x0f\xa6\x9aI\xaaV\x1a#\x9cs\x0cWt\x91\x17\xc9\xa3\xd0\x88\x05\x89Hr\xe7\x9b\x08u}p.\x97n\xb3\x05}\xc4\xe0\x00\xc2C\x8a\xae\xf8\xbc\xbb\nn\xf7\xc6\xe6C\xbdP\x9b\xc6\x87I_\xd4\xc9o\x11\xe4\x9d\x9b\xc6i\xca\x05\xc5Y\x8c\x8b\xd84\x18\xd2\x82\x95\xfc[\xa9\x8d\x8c\xf5\x07\xc1#\xaf\xf0a\xd7S\x1e\x137\x98h^:\xd3\xc1\xa5\x914\xc7C\xf9\xb6[\xa6\"\x942[S\xe4I:\xd4\xc0\xc4?\xfc\xf9\x86[\"\xc8\xab\xdc,\x08\"_\x85\xa2\xd0 4\x88\x1f\xd8\x9b\x88\nbC_\nq(\xddt,\xdaF\x10q_\xda6J\x1c\xb5L\x00\xb7B\x0dWb\x80\xe1\xde\x85\x16P\xad\x0e8\xdd\xaaB\x96+\x94-+\xda`e\x05\x90\xcc\xb7\xb2\xac\x03\xe5\x13\xbc\x17<\xa8}\x9f\x04\xd3\xdb\xd0b \xcf\xce\x14\x88z\x87\xc2\x82\xb1\xc4\xf8\xdf\x08Jb\xab\xbci\xa1\xda\xb4\x08\xfa\xb5\x07\x9c\xd5L\xc2\xb9\xf5\x0c\x06\x02V\x94`\xfc\x891\xc2T\x18D\xea\x08F\xc31[\xdaD\xbb\xb3%}\xa7\x19\xdb\xcaZj\x84\xdcv\x9f\xa0Y\x08\x8f\x80P8\xebZ< \xe9\x02\x97:<\xaea\xdcq\xfbL?\xdd\x1a\xb8\xae7\x1f\xd9+\xf4\x80z\xc6\xd8*\xceK\xc6\xbb\x16\x1eR\x9b\xc60{^f\x8f\x9f\xe0\xa1\x96z\x802\x96?\x1e#\x8e\x01\x16\xc9\x00=\x01\x17\xcf\xb8\xd1\x0c\x03\xe2\x19z2\x12\x16\xd3\xb0AT\xc3\xf0\xb8\x86\xa1\x91\x0dCc\x1b\x06G7\x0c\x8ao\x18\x1c\xe100\xc6ax\x94\xc3\xf08\x87\x81\x91\x0e\x9b\xc6:\xf4\xd3\xf0\xe2q\xc6;\x00\xbe\xb5\x7f94\xe2\xe1\xc9b\x1e\x9e:\xea\xe1)\xe2\x1e^L\xe4\xc3\xb3\xc4>\xf4|\xe5\xdb\xe9\x18\xcd\xd6;\xa8Z\xc5\xfa\xdf4Y\x92\x92\xe2\xe5\xaa\xdc\xd1\xc7a\xa2\x16\xa3\xbfW\xa9H\x98Je7\xbdy\xee&\x03\xbcc\x86\xee\x97\xc5\xc9@|\xc5\x88\x08)B\xe0\x04B\xc6$b`w\x19[B\xa0\xc5\x1a\x93\xf1Fd\xc2>a\x1aT\xde\xfd\x93\x8c\x16k\xdeCO\xe2\x0b\xa2i\xb6\x1e\x91\"\x98\x16@r\x07\xed8'\x10.\x87\x9c=A\x05\x87t\xe0\x97\xf7gr\x06\xbe\x1a\x11\xa6\xb8\xa4\ni\x10a/T\x8e<|.\x19Q\x90Re\xc0\x88u\x15\xd4j>Fy\xad\x8f\x1fBp\xc1\x9ca\xbe\xb2\xf4]ZzNp\x86\x17\x89\x8f\n\xee\xcd\x03\xce\x8f\xb8\x0e'8ZH\x89{?p\x16\x05k>[\x99\x11&\xdd\x12\x0fK\x04^h\xa1H\x05\x95\xe4\xd9D\xd0\x8b\xc8\x9d\x7f\xdb\x03\xc3p\xcaL\xdcwf]K\x14\xe1\x95\xf02\xadQ8l\x05zA\xe9y\x9e\xa3%\xbe!r\xaa\xab\xac9f\xae\xe4\xc2&ktO\x8a\x80\xc4p\xec\xfa\x01\xd4\xe8^\xa8E\xbd\xda\xa0\xbd \x9eu\x11G\x80\xde{\x96\xafZ\x11\xeaCy\x192\\@\xd6\x0d\xe7 \xc4hy\xc1mB\xfdH\x13g8\xf5\x1b\x1a.\xc0\xf4\xb2\xb1\x02\x82\xaf\x9e?\xacSt4{\x16v\x88\xa1E\x84\x99\"\xa3\xbe\xee\xa49\xe4VX=\xbah4z+\xc0\xfeV\xdf\xb2r>M4k\xbc\xd7\xad\xeaa\xaa7\xc9\xee\xf2\x1b\xcf\\J\xb2UE_m\xce\x15d\x15\xf4\x12<\xcc\x83l>'L\xec\xa2\x8a\x90\xaa6\xce\x1bm%\xd9\x0d\x9a\xe1\xe8F\xd6s\x07@\xe2a\x06<{\x82O\x1a\xff!\x95.\xa4\x1f>\xa5\xea\xc9\x02\xa0{ \x1e\xf8R\xb1\xa8oi\xe8\xeb0\xee\xef\xa0\xdc\x87o%\xc5\xb34)\x17$V\xf1\x08\xa1\xb8o\x88\x1e\xef\xc9\xa6\xbe\x94\xdb\x15~B\"\x9e\x1b`x\x15\x00x\x8cQ\xe8\xac\xc8Wy \xe7\x81V\xcb\xdba\x04o\xe2\xb9R8\xcd\xf9\xa1\x1c-\xaa\x88\x07\x04q\x1fi\x89\x8br\x11\x88;G\xa8\xa4\x98V\xc1\xa5\xdf\x8f\xff\xc7:\xfd$\x99\x0b\xb7\x89+>\xae\"\xd54TH\x83\x04\xa03#~\xf1\x06\x1d2\xcc\x9d\x89\x98_t\xad\xaa\xb0z\xee\xc5cx\xfa\xe2\xf9\xb7\xaf\xa7\xe7\xbf_\x1d\x9f\x9c\xfd\xbc\xbc\xba\xb8\x9c^\xfe\xbc\xe8\x95R\xe6\x82qv~zvz\xb1\x01\x00\xf1.\xf8\xb9N\x89\xdb\x94\x90\xfe\x9a<\xc8<\x88\x04\x02 \x8cL(@N\x07\x0f\xd8\xc2i\x12O\xaaL\xec\x17\xc5\xbces\x07\xf0q@\x94v\x1e\xab\xbf\xb6s\xb6\x8c\x15\x93!\\\xcc\x12Z\xe0b]k0^\x18P\xef\xf9\xc4R\x18\x8e\xa3xg\xc7P\xbc\xb3\xe3\x97\x88\x05\xdd\xf0\xc0V\x05\xb9K\xf2\xaaL\xd7\x9d\xa5n\xe49yq\x95\xca\xe6\xb2\xc0\xd1\x8d8\xd4\x12\x9e\x93\xde\x01\x12e\x93\xa0\xbb2\x90\xf62\x07\xe9\xf8\xd9\x8c\xb6h\x91\x90;\xd1\x97$\xafhH\xed\xe4\x19\x08;\x01\xe9\xd5z\x85\xcfl\xeb\xff%\xed>\x1b\xf0\xd9\xf7\xe9\xf1\x8f\xe0g\x86M\x1eJ\xe70k\xec\x18\x0d\"\x14\xe7\xc7\x0d\x0b\x8c\xaa\xac$a_\x8d_H\xf4Il\xef\x8a\xb4\xcd<\xf6\xaea\xc2\x88\xb1\x9a\x98\x05\xad{>\x0d\x19\x92M\x87\xf6\x90\xec\x9d1\xa4&i\x12\xe5Y\x99\xc4\xea\xf4\x81\x0f~\x93\xf0\xdb\x88X\xf4\xbfZ&e\xc9\x16\xa7\xb4Gy\x81b\x92\xe25\x89\x81\xb9\x85\x0e$\xd9\xe4k#\xc9\xde9\xf9R\xdf Z1g:\xc3\x15C\xae\x1e\xa8\xd2\x13\x9b\xaaS\xa1\x9fH\x16\xe1UY\xa5\x1a%\xa9\xb7\xf8.\x16r\x8e\x88j\xcf\x03\x90&\x0c\xc3Q\xe0\xf0\xb6\xfcM\xdf\xec\x8b+#\x86\x95d\x99h\xac\xab\xd5u@J\xec\xa7b#\xa3>\xa8\xeb\x01'0\xd7\xe1u\x14;jc\xa9\x18X\xdfe\x00\xecli\xad\x8bd\xad}\xa4\xda\xe4\xd9\x01\x85\xa5=\xd5W\"\xf9\x9c{\xae\\\xe4\x98R\x1c-\xc4h:\x15\x95\xadM\x82#w\x05\xeb\xe6\x8a\x91\xf3\x98\xef\xdd\x83\x19\xd7\x0d\x16K\x8c$\xe7\xf2L\x1eh\xc8\xd72M\xc9N\xb2>\xb8\x1a%\xc2\xa8 -\x10Zd\x84\x109\x016\xa6\xc0\x96C\x89@gx[\\(z|gt\x90\x14h0\xe2\xa7\x16\xc3K\x0e\xf5ic9<\xc6GC\x82\xb0\x04\x16Q\xf8\x12\xd82F\x9ci=m\x80\xec\x11\x87\x05\xc1\xb3\xc9\x97\xc0\x1f\x03U\xc5 y\xea\xc7_m\x85C\xcf\x10\xcad\x8c\x1c\x8aa\x1ac\xa5\xbc\xc24\x06\x00U +\x81\x80\x96\x02\xfd\x9d\xc5 \x9f'\xa0.\xb8;\xf8;\x8ba\x10\xaf\xc6\xb0.\x08\xfd\x9d\xc5\x00\xa7|\xe4I2\x8c\xf2\x0d\x83AQ\x9f,\x06\xa9\x97\xc7\xcca\xb0\x80\x1c/\x83A\xfa\xd7O\x99\xbf\xd0\xa4g\x04\xcf\x02\xa8:\xa0\xfcF\x1d\x1c\x03\xbb\x13\xff:\xe8\x97\xb9\xd0\x12v\xd8$\xbd\x14\x1eml\x88\x9a\xe0\xc0\x1c\xdaJ\xe0\xf9\xf6\xb9\xb5\xad|\x85\x81\\|-[ \x0b\xbe\x96}\x90\x17\xd2\x08\x0c\x0b\xd9s \x9b\x86\xd2?\x8a%\x87\xd2\xddI\x85\x18s\x8fd\x05\xee\xdc+\x81@q\x85\x8b\x92\xd8\xbdg\n\x92\x0c\xb2t\x08h\xedP\xcf\x8c=\x04\x9f?\x08\xbe\xd4PO\xc1\xa0\x1e\x19|`@}m!\x1a\x96\xc9\x87^,\x07C62\x08\x90\xf6\xca\xc9B\xb0L\xa6W\xca\xcba\x16\xb4\x0b\xcabE{B\xe8'\x83\x90\xf1@\xfdX\xbe\x19\x1f\x83\xa6$\x08\xafw\x9e$\xea\x9d-\x88\x9e\x92##l\x16\x01Suh\xf6\xa0\xb8\x16v'\x0f\xca\xed\xdc6r\x07\xad\x18\x89\xf1<\xf9\x84\xea\x07\x12Um\x8cK\x1b\x1buz\xe2\xdbd\xae\xfa9\x93\xf8\xb7n\x12\"\xffKw\xca\xb4\xee\x96\xf8\xafDH^\x94\xaf\xd6\xb5\xc7'\xfe\xd0Lu\x12H\xb9\xf2\x1e\x03.\x81\xdf\x11\xf0\x9f\x9b\x06gvX\n\xc8\x18\x04E8C$\xe1E\xb8g\x04a>\x89w\x10yw\xedZ\x92_\xf6\xbf|\xfa<\xc3\x07\xbb\x87\xf3\xf7\x87\xbb\x1f\x0e\xbf\xe0\xdd\xcf\x1f\xf1\xa7\xdd9\x89\xf0\xfel\xefp\xff\x80\xec\x89*\xecJCD\xee\xf6p\xd2\xa8\xcb\x01}\xb8\xee\xdf>^\x93\xbdG\xfcH\xab\x8f\x87\xf4\xe1\xf0\xe10M\xef\x0e\x1f\xa2/\x8f\xb4\xbc}Ho\xeeIj\xc38\x94\x8a8\x16;\xeb\"s\xbd\x19z\xf8y\xef\xfd\xfc\xf3,\xda\xfd\xb8\xf7\xf1\xd3\xee\x072;\xdc\xfdr\xb8?\xdf=\xd8?\xd8\xff\xf8i?: Q\x8b\xa1b\xb0\x8dX*@\xec\xdf>8\x99\xfa\xa5\xbcM\xa3\xc5\xfb\xf2\xe1>\xfb\xf0\xe1\xd7\xe1\xde\xaf\xc7k\xfa\xb9(\x17w\xb7\xeby\xf1+*\\\xe4\xf0\x8e\xc2\x8c y\x96\xaek\x16\xa0\x84\xa7\xc0\x19\x07\xf18-s\x17~\xb2\xe1\x83U\xf1\x05\xef\x99F\x92i\xebVI\xb3_)\xcd\x06\x9f} \xf6o\x0f\x9c\\\xbe\xffp\x10\xdf\x1e\xfc\x8a\xef\x961~\xac\xee\x1f#\x1c\xc7\x8b\xc5\xe7\xebe\xf5~\x19=\x92\xf7\x1e\x06\xb8w\xdf\xe32\xc0\xdc5\x8b\xac\xb1\xc6Y \xcd\xd1<\xc9\xb8B\x0c\xccLn72\xe9\xcb\n\xf9\xca$c\xcb\x072;I\x9c\xa0\xfa\xc8\xf4u\x1c\x80\xd1\xd9\x18J\x88z\x9e\xe2k\x8e\xafnP\x90\xab\x9f!\x1ahy)m\x97\x0cg*\x89\x91F\xaf6\x96\xe5*\xcfJ/\xd9\xd2\x10>\x0d\xe1\xa6Y\x0e\x91\xee\x9d+j\x8f\xd7\x93h\xf2 \xf0\xf0\x1e\x17\x8cEtk07\xd1\xf2\x87\x1c{\xe7\x85+\x07\xc1\x03\x92BD\xd6\xccv\xb8#hD\"[\x83A$\xeb\xccA\xd602\xb4\xce\xabB\xfap\x950W{\xe7$\xa3\xef\x0f:\x0cr\x94\xff\xf6\xe0\x10\x13\x8a\x93\xf4\x85\x94\xea`\x9f_U\x85\xb3\xebL\xd0\xc0\xf1\x0c\xd7\xc1_[O&V\xb8\xc0KBIa\xe0\xbc+\x92z\xb5[\xe3\x9a\x81\xad\x15\xd1\xd7\xf9\x1e\xe6r\xfb<\xc1!.u\x92\x1d\xa1\x15\xa6f\xb0&S\x0dIA\xe2#D\x8b\xca4\x0dV\x16+n\x19~\x05\x90a\x83=\x11\xc3\xe7h\xaf^\x87\xff1\x1a\x95\xf5\x96\x00Hd\xff=\xc4\xd0\x9d\x83\x9e\x19\x0dh\x96Y2\xf6.a\x83\xbd\x81mG\xc0du\xcb\xac\x85UXs\x9c\x96`i\x19\xce>P\\\x83\xb7\x07\xe3n\nF\xe4A\xc3\x0f\x06ra\xa8\xeflx\xc9\x0dxp\xe7q\x08\xe1m\xc7\xaaM\xb9\xf4b{\xd2\xde\xc7}6\x1c\xe5\x17@w\xcb\x17\x06\xd2=\xd0\x83\xae}\xe56\xe5[\xa7\xb3\xe5\x0e\x03\xe9\x1c\xe4D\x1b\xeer\x03\x98\xc3u\xde\x9cJ\x8a\xaf\x1b\x1e\xc9\x1f\x12\xda\x84iL\x92\xe1,\"\x93%\xa18\xc6\x14O\xee\xf6'|\xf9M\xfe\xa3\xb4\xed\x7f'\x8d\xad\xe65\xd1~tY-\x97\xb8X\x1f\xe9.\x1a%\xc1E\xb4\x90-7\xe5W\x8a\x16\x17\x1f/\xeb\x8bT\xa6\x11w\x98\xaaW\xaa|G\x15&\x0b(\xcf\x7f\xd4\x8c\xd9Xs2\x844<\xce\x83\xdd\x8e\xbd\x15\n\xca\xb0\xb9\xfa\x03\xb8#f\xf3\xc0\x1a\xc3B\x9c/t\x91,\x93\x14\x17\xe9z\xa7\xc6\x816\xaa\x92[]\x05^\x9e\xa8e\xea[\x94\x8ca\xda\x1b\xbc\x0c\xf8f\xeb\xbczS\x90z|\xb6\xad)\xf8y=J2\xb3\xbf\xcb\xff\xa0\xe3\xb9p\x0fp\xdb\xc4\xd6\xf3F\xb6@4\xef0x\xc3\x19\xa3\xc6]AhUd\xbcw\x8c\x0d\xb4\xe9l\xd4pq\x9a\xd6w\x142MJH\xb2/\xf8Z@o\x990\xe4h\x93\xfa\xfdo\xd6\xd1\xda\xf2Q\xe3:\xc7\xc3\x9a\xf1\xda\xa5U\xdd\xfe\x14\x858\x8b'\xf5\x84\xb8J\x9a\xfck-.\xdb\x80\xfa'S4\xc3\xb1yS\xa2~\x84\x92\xf9\x91\x89\xd8es\x8er\xc5\xc9'&\xceb\x94\xe5V\xee\xbfk\x01\x90\xad|\xe8}\xce\xa63o\xe7\x93\xcf\x9b\xba\xc4$\x89\xdfaI\xb0\xfc\x7f\xe6\x82Y\xa38\xcf\xdeP\xc9\xf1\xb9\xd0\xda|!1\xe6\xc9=\x801\xfc\xb4\xc3\xd5\x1d4\xab(\xcarj\xe1,nt \xe8\x82\x11\x9d\x0b\xeb\xa9\xcc\xc8\xd2\xd2\xc2r\xc3\xc2\x7f\x19\xe7\xa4dx.1\x8d\x9a]\xb2\x8c\xefM\x89\xfcs\xadN?v\x0c\xdfJ\xb4X\x92\xae\x84\xe8\x87Du\xb9'\x03\xc3\x0bB[\x0e\x9c\xa4H\xbfT@\x18\xbb\n\x91]\xeb>\x06mN4m\x1at\xa5\xb0\xe3X\xdb\x12ub\xa1\x0c\xbfa\xc1\xde\x1c\xec\xed\xbdq\x9f\xe5\x18\x99\xc6\xdb<\xc4q\x1c;\x87O\xdf\xb4#\xcc\xf8\xa3\xcb\xa4F\xaa\xed\x14Z\xe4i\\\"u{(\x16\xff\xdb\xc4\x16\xcb\xe1\xbe\xd1\xdc\xfcz\xd1w\xfa\xe8\x89c\n\x9d\xdb\x84./\x11\xec\xf4\x05\x18\x19\x12NEE\xe8\xa7(kz\xfc{]\x95B,w\x84\x8e\x97\xab\x94w\xdf+Q\x19\xdf\xbc\x9b\x06\x12-\xa5\xcd\x9a\xe3H\x1cU\xf2z\x9fBM\x89/\x89Xk\xca{k;\x80\xcd\xe7k^.s\xd7`%8/\xf9i\x99Yk\x98\xb2\x9bN\xac\xa3\x0b\xfc1\x0f\x8d/\x85+\xc9\xeb\x8e\x10%\x0b\x9c\xa6\xf9\xbd4c2\x8f\xdb\x07.r_\xc4\xf0^\xed\x9eX;\xdf\xc9\xa6z\x82Ea\x82kF<\xe1\x95#\x1e\xbc\xad\x82\xa5\xd8\xde\xa4\xf3\xadJ\xf0\xf7\xd7c+\xf24X\x88\x0d2\x83\xc4\x839\xbczE*d\x8c\xe2\xc3\x91,\xcb\x0b\x8cr\x93%\x00\x08\xa0\x18i/\xe6\xc1\x8a\xaa4Z\xb4\xf7\xa93\xd2\xec\xd0\x7f~\xfc\xbf\xc7'\xd3\xcb\xd3\xf3~\xdf]|;\xff\xf3\xf8\xeb\xb7\x9e_\x1d\x9f\xfc\xf9\xed\xa2\xf7X_\x7f^\\\x9e\xfe~<=\xe9\xf7\xd9\xe9_'}\xf1\x9b~\xff~\xfc\xe3xz\xf9\xad\xdfg\xa7\xffwr\xfc\xcf\x9f\xe1\x924\x8d\x8f\xce\xceO\xff\xfcv2=\xf9\xdas\xb0\xaf\xa7'\x97\xe7\xa7?~\xf4\xa5M\xf7\xeb\x0f|\xa6+\xd9\x0c\x9a^a_\xa5\xf9\xb8f\xf1\xc0\xe1\x91\x88\xf2\x92\xf7m=*\xd28\x16\xc5\x91\xfd\xb5\x1c\x05\x97\xbc\xa7h\x91\\'\x19\xa6\x90\xc2\x9c\xd65td{\xa9\x9c\xf5\x12\xc5dFQI\x8a\xbb$J\xb2k4\xaf\xb2\x88\x9b\xb1\x9e\xa3\xa9\xb5wd{)vK<\xd0,\x89P\x92\xdd\x91\xb2?=z\x9d\x1eY\xdf*\xd1d4\xa1ka\xbe5\x8dQU\xd2:|\x1eL5\x93Ti0F8\xe7\x18\xae\xe8\"/\x92G\xa1\x11\x0b\x12\x91\xe4\xce7\x11\xear\xd8\\.\xdd\xde\x02\xfa\x88\xc1\x01\x84\xc7\xa6\\\xf1yw\x15\xdc\xee\x8d\xcd\x87z\xa16\x8d\x0f\x93\xbe(\x0b\xdf\"\xc8;7\x8d\xd3\x94\x0b\x8a\xb3\x18\x17\xb1i0\xa4\x05\x13\xcd\xf0\x97\xb8\xb8\xb1\xc41\xd5\x8f\xfa\xb5o90\x81\x95\xd5j\x95\x17\x8dB\xa3\x1c\xf3w2\xbe\x00SZ$\xb3\x8a\x12\xb4\xc4k~ \xef\x018#L_g\xd7$F\xb35\xe7\x82\xd4\xf2u1\xb9<\x8b\x98'\xc2\xf4\\I,i\x0f\xe2\x91\xc7>W\\\xe7^\x15y\x9aV\xab\x90XC\x9a\x1d.\xd7\xbf\xa4\xda\xc7i\xaa\x97\xb6\x9a\xe9\xf5\x99pBK\xbd\xc4=\xc0\xd4\xad\x9cR\x96\x0d@oJ\xa52\xe7 Icg\x849R\xe1\x1e8-sD2\xd9\xd7\xa7\xda\x8aF\xbb0`l\xbb\xe0\xa3\xf2.\x06\x84\x97a\xcesj\xd4b\xe6>/\x8a\xf24%\xdc\xc5\xa9/\x1f\\82\x02\xf8,\xca3\xa2\xaf,<\x88\xaa\xa3RO\xcc+\x8c\x92\x06\xa0\xfa\x1c.TR\xce}\xb6R\x1b\x19\xeb\x0f\x82G^\xe1\xc3\xae\xa7<&n0\xd1\xbcy\xa2\x83+\x01i\x8e\x87\xd2K\xb7LE(C\xb4\xa6\xc8\x93c\xa7\x81\x89\x7f\xf8\xd3\xeb\xb6D\x90W\xb9Y\x10D\xbe\x82<\xa1\x13h\x10?\xfcy\x97 6\xf4\xa50\x98]9\x16m#\x88\xb8/m\x1b\xe5IZ&\x80[\xa1\x86\x0b\x0f\xc0p\xefB\x0b\xa8V\x07\x9cn\x11\x1d\xcb\x15\xca\x96\x15m\xb0\x90\x00H\xe6[Y\xd6\x81j\x01\xde\x0b\x1e\xd4\xbeO\x82\xe9mhm\x80gg\nD\xbdCa\xc1Xb\xfco\x04%\xb1U\xde\xb4PmZ\x04\xfd\xda\x03\xcej&\xe1\xdcz\x06\x03\x01\xcb\xc1\x1f\x7fb\x8c0\x15\x06\x91:\x82\xd1p\xcc\x966\xd1jW\xd4\xa5\xd2w\x9a\xb1\xad\xf4\x17\x89\x8d\x8b\xe5A\xb3\x10\x1e\x01\xa1pj\xb4x@\xd2\x05.ux\\\xc3\xb8\xe3\xf6\x99~\xba\x13n]^\xddQ\x90\x06\xd4\"\xc5V`]2\xde\xb5\xf0\x90\xda4\x86\xd9\xf32[\xda\x04\x0f\xb5\xd4\x03\x94\xb1\xfc\xf1\x18q\x0c\xb0H\x06\xe8 \xb8x\xc6\x8df\x18\x10\xcf\xd0\x93\x91\xb0\x98\x86\x0d\xa2\x1a\x86\xc75\x0c\x8dl\x18\x1a\xdb08\xbaaP|\xc3\xe0\x08\x87\x811\x0e\xc3\xa3\x1c\x86\xc79\x0c\x8ct\xd84\xd6\xa1\x9f\x86\x17\x8f3\xde\x01\xf0\xad\xfd\xcb\xa1\x11\x0fO\x16\xf3\xf0\xd4Q\x0fO\x11\xf7\xf0b\"\x1f\x9e%\xf6\xe1\x99\xa2\x1f^T\xfc\xc3\xeb\x88\x80x\x811\x10\xcf\x1b\x05\x01\x8f\x83\x80\xde\x97\xe9_\x8f\x18\x0b\x01\xf7\x05G\x8a\x87\x18\x14\x11\x01\xc5R\xdf\x0d\xca\xc3\x12\xc2\xbb\x82\x89\xe2n\xfc\x0f23\xe8:\xe3%\xce\xbc\xa1\xd7(\x8c\xd6H\x05\x82a\xb4\xf1\x0c\x1a\x9a\xd7\xec3/\xe4\xe5\xbd!\xac\x01\x9ct\xd7w\x18~I\x84\xd3t]\xb7\xfew~(?\x1a\x81\xdc-\xeci\xd5\x06D\xa4\xb0&$\x15\x97\xe7\xcc\xc22\x93\x1e\xa5 \xc9\xea\xfd-\x8fl\xf0\xc2\xebN\xd1\xe0\xa6\x16Wq\xe2\xe5N\x1fz\xbe\xf2\xedt\x8cf\xeb\x1dT\xadb\xfdo\x9a,II\xf1rU\xee\xe8\xe30Qe\xd0\xdf\x9aS\xa4h\xa5\xb2y\xdc\x97\x8c(H\xa92`\xc4\xba*35\x1f\xa3N\xd3\xc7\x0f!\xb8`\xce0_Y\xfa.-='8\xc3k\xa2G\x05\xf7\xe6\x01\xe7G\\\x87\x13\x1c-\xa4\xc4\xbd\x1f8\xabK5\x9f\xad\xcc\x08\x93n\x89\x87%\x02/\xb4P\xa4\x82J\xf2l\"\xe8E\xe4\xce\xbf\xed\x81a8e&\xee;\xb3\xae%\x8a\xf0Jx\x99\xd6(\x1c\xb6\x02\xbd\xa0\xf4<\xcf\xd1\x12\xdf\x109\xd5U\xd6\x1c3Wra\x935\xba'E@b8v\xfd\x00jte9\xb6:^\xca\xf0\xa5\xb4w\x81\xafq\x92\x95\xd4\xd8\x9d8\xe15\x8f\xd2\xd9W8\x8b\x88'\x9a\xec\xd28F\xe59\xea\x0b|G\x8c\x91$\x87y\x8c\x18U[\xcc\x84\xb8\xd5B\x92\xdd\xe5\xe9]3\xc1\xbd\xfd\x9c\x9c\xb2\x9d\xf4_\x92\xd32#=\xcbEh\xd7y#\"\x18a\x19Q\xd6H\xe3o?u|\x19V,\x15\x89\xdb\x8a\xbf<\xa9~\x99\xdf\xb9\x1a\x03\xd7\x976\xa34\x0bj\x81\x1b\x16\xe1`\x8dq\xf0\xbb\x83\x00\x1f\n\xe2?=\xfd\x15V;\x10\xabQ\xe4\xc0\x1e\xc0\xd0,\xc4\xe1\xf6,\x0dY\x84\"\x13\xb6JS@\xc9u\xd0\x1c\x1a\x9e\x80\x1ae\x13\xc2\xbf\x01\xc5\xa7\xbd\x10\xcet\x83\x9e\x8c7\xc0\x0e\x0e\xb4QD\x03\xc6!\xf9\xcf\xd7\xc1#\x03\xd9\xfa@\xc2x'\xf9\xe4\x85\xd7\\d >\xf9\x037\xc0\xcc\x19B\xf5\x08\xb1\x1b\xfdV\xcdH\x13a\x08\xad\x1b\x05o8'\x8a\x87d\x15$8f\xc7\xa1\x06P4vWV\x88$A\xb6\x12\x01\xed%B\x90\xd0k\xf1\x00\xa7\x06\x82\xeb \xb4\x9d`l\xf1hI\x85m'z\x1a\xea\x00\xdb\x99\x16\xd2\xc3-\xa9 \x0c\xc8'\x985E/\x8fWc\xd8V\x84\xfen\xcb\n\xa7|\xe4I2\x8c\xf2\x0d\xed \xb2O!;\xf9\x9d\x96C\x98\xcd\xdf\xef\xcc\x11\xf2\x86k<\xc7\xd11\x8ccu\xe2\x81Z~\xea\xdeCe\x1c\xb4\xb2\n\x02\xaaS\xf3\x1a\xbd\xe55+\x13\xba@\xf3$\xa5\xa4 1\xba\xb9S\x16\x9e\x92\x02\xd3\xbcp\x87\x8d\xc9\x98t/\xbb@\x04J@J\xdf4<_E\x99\x10\xb5\xb7t\x83\xd69\xeb\xe6mT\xce\xe3\xf4\xf2\xf9\\F\xc45\x1b7B\x99\x15\x9c\x14\xa3\x1d\xc8\x00\xd3%\x80S\x11\x81\xc5\x80P\xe7\x86\xbd\x13\xdc\xc8\xc5\xa1\x96l\x10\x9a\x14\xac\xf7w\x0b\\.\xc6'\x95\xca\x8e\xee\x9c\x88\xcc\xa8\xd1\xa2\xe6Z0\x8d\"\xa4\x14\xd1 \xbc\x00\"\x90\x15\xbc-\xb7\xd8\x1a\xf9\xb7l`\xde\xfd\xc6\x1f\xc5\xc4\x1e\x1d\xa8\xc6\x8b\xc07\xa5\x19\xe5\xcbe\x9e\xf1\xf1\xfc\xd1\xa1\xa2\xc3\xd6\xb3\xb0C\x0c-\x02\xd5\x14\x19\xf5\xad)\xcd!\x97\xcb\xea\xd1\x95\xa7\xd1[\x01\xf6\xb7\xfa\xb2\x96\xf3i\xa2Y\xe3\xbd\xb5U\x0fS\xbdIv\x97\xdfx\xe6R\x92\xad*\xfajS\xb7 \xab\xa0\x97\xe0!N_\xfb9ab\x17\xc5\x88T\xd1r&\xf84\xc9n\xd0\x0cG7\xb2x;\x00\x12\x8fV\xe0I\x18|\xd2\xf8\xcf\xbat\x91\xf5\xf0aWO\x16\x00\xdd\x03\xf1\xc0\x97\x8aE}KC_G\x83\x7f\x07\xa5P|+)\x9e\xa5I\xb9 \xb1\nk\x08\x85\x8fC\xf4xO6\xf5\xa5\xdc\xae\xf0\x13\x12\xf1\x14\x03\xc3\xab\x00\xc0c\x8cBgE\xbe\xcaK8\x0f\xb4Z\xde\x0e#x[\xc9\x95\xc2i\xce\xcf\xf6hQE<\xae\x88\xfbHK\\\x94\x8b@\xf8:B%\xc5\xb4\n.\xfd~\xfc?\xd6Y,\xc9\\\xb8M\\\xf1q\x15\xa9\xa6\xa1B\x1a$\x00\x9d`\xf1\xab\xe2\x11D\"Z\x9e\x89\x98\xdf\x97\xad\xaa\xb0z\xee\xc5cx\x16\xe4\xf9\xb7\xaf\xa7\xe7\xbf_\x1d\x9f\x9c\xfd\xbc\xbc\xba\xb8\x9c^\xfe\xbc\xe8\x95\x99\xe6\x82qv~zvz\xb1\x01\x00\xf1.\xf8\xb9\xce\xac\xdb\x94\x90\xfe\x9a<\xc8<\x88\x04\x02 \x8c\x84*@j\x08\x8f\xfb\xc2i\x12O\xaaL\xec\x17\xc5\xbces\x07\xf0q@\x94v\x1e\xab\xbf\xb6S\xbf\x8c\x15\x93!\\\xcc\x12Z\xe0b]k0^_P\xef\xf9\xc4R\x18\x8e\xa3xg\xc7P\xbc\xb3\xe3\x97\x88\x05\xdd\xf0\xc0V\x05\xb9K\xf2\xaaL\xd7\x9d\xa5n\xa4Kyq\x95\xca\xe6\xb2\xc0\xd1\x8d8\x1b\x13\x9e\x93\xde\x01\x12e\x93\xa0\xbb2\x90\xf62\x07\xe9\xf8\xd9\x8c\xb6h\x91\x90;\xd1\xdd$\xafhH\xed\xe4\x19\x08;\x01\xe9\xd5z\x85\xcfl\xeb\xff%\xed>\x1b\xf0\xd9\xf7\xe9\xf1\x8f\xe0g\x86M\x1eJ\xe70k\xec\x18\x0d\"\x14\xe7\xc7\x0d\x0b\x8c\xaa\xac$a_\x8d\xdfk\xf4\xc9\x8f\xef\x8a\xb4\xcd<\xf6\xaea\xc2\x88\xb1\x9a\x98\x05\xad;G\x0d\x19\x92M\x87\xf6\x90\xec\x9d1\xa4&i\x12\xe5Y\x99\xc4\xea\xf4\x81\x0f~\x93\xf0\xfb\x8bXt\xd1Z&e\xc9\x16\xa7\xb4Gy\x81b\x92\xe25\x89\x81)\x8a\x0e$\xd9\xe4k#\xc9\xde9\xf9R_-Z1g:\xc3\x15\x8a\xae\x1e\xa8\xd2\x13\x9b\xaaS\xa1\x9fH\x16\xe1UY\xa5\x1a%\xa9\xb7\xf8.\x16r\x8e\x88j\xcf\x03\x90m\x0c\xc3Q\xe0\xf0\xb6\xfc\x0d\xd5\x0d\xea\xab\x94r%-Y\x96]7\xd4u@J\xec\xa7b#\xa3>\xa8\xcb\n'0\xd7\xe1u\xd4Ljc\xa9\x18X\xdfe\x00\xecli-\xafd-\xa1$/\x8f\x1c\xe0\xc2\xd2\x9e\xea+\x91|\xce=W.rL)\x8e\x16b4\x9d\xd1\xca\xd6&\xc1\x91\xbb\x10vs\xc5\xc8y\xcc\xf7\xee\xc1\xc4\xed\x06\x8b%F\x92sy&\x0f4\xe4k\x99\xedd'Y\x1f\\\x8d\x12\xa8\xd4\x84\x16\x88P2\"\x91\x9c\x00\x1bS`\xcb\x11I\xa03\xbc-.\x14=\xbe3\xc8H\n4\x188T\x8b\xe1%G\x0c\xb5\xb1\x1c\x1e*\xa4!AX\x02\x0bL| l\x19#\\\xb5\x9e6@\xf6\x88\xc3\x82\xe0\xd9\xe4K\xe0\x8f\x81\xaab\x90<\xf5\xe3\xaf\xb6\xc2\xa1g\x88\x882F\x0e\x85B\x8d\xb1R^a6\x04\x80*\x90\x95@@K\x81\xfeN\x86\x90\xcf\x13P\x17\xdc\x1d\xfc\x9d\x0c1\x88WcX\x17\x84\xfeN\x86\x80S>\xf2$\x19F\xf9\x861\xa5\xa8O2\x84\xd4\xcbc\xa6BX@\x8e\x97\x08!\xfd\xeb\xa7L\x83h\xd23\x82g\x01T\x1dP~\xa3\x0e\x8e\x81\xdd\x89\x7f\x1d\xf4K\x80h ;l\x92^\n\x8f66DMp`\x0em%~}\xfb\xdc\xdaV\xda\xc3@.\xbe\x96-\x90\x05_\xcb>\xc8\x0bi\x04\x86\x85\xec9\x90MC\xe9\x1f\xc5\x92C\xe9\xeedT\x8c\xb9G\xb2\x02w\xee\x95@\xa0\xb8\xc2EI\xec\xde3\x05I\x06Y:\x04\xb4v\xa8g\xe2\x1f\x82\xcf\x1f\x04_j\xa8\xa7`P\x8fD@0\xa0\xbe\xb6\x10\x0dK\x08D/\x96\x83!\x1b\x19\x04H{\xa5v!XB\xd4+\xe5\xe50\x0b\xda\x05e\xb1\xa2=!\xf4\x93A\xc8x\xa0~,\xdf\x8c\x8fAS\x12\x84\xd7;\xdd\x12\xf5N:DO\xc9\x91\x116\x8b\x80\xa9:4 Q\\\x0b\xbbs\x10\xe5vn\x1b)\x88\x02\xb4'\xd9P\x8e-\xaf\x81\xbb\x99\x83<\xa7\xb0+\xe7\xd6 \xfcW\"\x8e.\xcaW\xeb\xdaM\x13\x7fh\xe6'!\x9e\xcd\xe8\x1a2`\xc7\xfd\xd6;x\xf8\x1d\x9c\x91\x10yv\x8e\xba\xb1Z\x86J\x92\xc2H\xee \xf2\xee\xda\xb5\xa6\xc4O\xf7o\x0f\xae\xc9\xde#~\xa4\xd5\xc7C\xfap\xf8p\x98\xa6w\x87\x0f\xd1\x97GZ\xde\x7f8\x88o\x0f~\xc5w\xcb\x18?V\xf7\x8f\x11\x8e\xe3\xc5\xe2\xf3\xf5\xb2z\xbf\x8c\x1e\xc9{\x1bd\xffi\xefH\xd4\xebs\xdc\x08g\x88$\xbc\x02\xf9\x8c \xcc\x97\x9e\x97\xe8/\xfb_>}\x9e\xe1\x83\xdd\xc3\xf9\xfb\xc3\xdd\x0f\x87_\xf0\xee\xe7\x8f\xf8\xd3\xee\x9cDx\x7f\xb6w\xb8\x7f@\xf6D z\xa5\xd7\"wo\xbc&\x97}\xb8\xee\xdf>:\xb9|\xfb\x90\xde\xdc\x93\xd4\xca\xcc@\x02\xe5X\xec\xac+\xec\xf5f\xe8\xe1\xe7\xbd\xf7\xf3\xcf\xb3h\xf7\xe3\xde\xc7O\xbb\x1f\xc8\xecp\xf7\xcb\xe1\xfe|\xf7`\xff`\xff\xe3\xa7\xfd\xe8\x80D-\x86\x8a\xc16b\xa9\x00\xb1\x7f\xfb\xe0d\xea\x97\xf26\x8d\x16\xef\xcb\x87\xfb\xec\xc3\x87_\x87{\xbf\x1e\xaf\xe9\xe7\xa2\\\xdc\xdd\xae\xe7\xc5\xaf\xa8p\x91\xc3\xdb)3&\xe4Y\xba\xaeY\x80\x12\x9e\xb8g\\\x1f\xe0\xb4\xcc]\xf8\xc9n\x17Vu\xed\xde+\x07\x85)C.\xcc\xdd\xab\xc8\xdej\x9c\xc9\xd1\x1c\xa5y~\xc3\xb4\xb3\x05\x8aL\xf6\x11\x07\x92><|}\x00`\xb3\xaa1\x94PR\xf3\x14_s\xb3\xa1\xdb\x06\xe4\xeag\x9c\x04\xb7\x99\x14@\xa4\xe5\x92\x11B%\xa9\xad\x8b\xda\xaa\x95\xab<+\xad\x11\x1c\x1a\x1d\x99\xdc\xfeD\xc4\x9b\xc9\xf6!\xfa\xfd\xd3\xbd\xdc\x88|\xf2 \x10\xf2n\xc5\xc7\xa2\xbe5\x98\x9bx\xf9C\x8e\xbd\xf32\x93\x83\xe0\xc1>!\"\x15\xd7\x9d^\x03\x1a\x91\xc8\xd6`\x10 ;\xf3{5\x8c\x0c\xad\xf3\xaa\x90\xaeI\x93D?V2\x9d\xea\\r\x07\xd5\xd1u\xe2\xff\x8cj\x19\x91M\xd0\x1f\x15)\xd6\x13U\\\xf7\xfc\xeck\x0b\x98\xc8\xe4\xac\x87W\xa1\xb4\xc6\xcf\x1a\xd8L3Te\xe4aE\"\xe6]\x89\xdeL69\x95\xd1\x82,qS,Ng\xcb\xedh\xf1\x01\xba\xc2\xf5(\xd0(\x8f-\xdaN|\xe0\xaa1\xaev\xa5IF\xdf\x1ft\x18\xe4\xa8\xcf\xed\xc1!&\x14'\xe9\x0b)\x82\xc1>\xbf\xaa\ng[\x98\xa01\xe2\xb9\xa3\x83\xbf\xb6\xee\xf9W\xb8\xc0KBIa\xe0\xbc+\x0c\xa66\xbd\xae\x19\xd8Z\x0f}\x1d\xc4an\xa1\xcf[\x19\xe2\xf6%\xd9\x11Zaj\x86A2\xc5\x90\x14$>B\xb4\xa8L\x03ae\xb1\xe2\x96\xb1;\x002l\xf0~b\xdc]\x04\xe3\xc0-SNV\x16\xccqZ\x82yP;\xb5@\x16\xf4\xf7\x82\x87\xfa\xbe\x9a\x9d\x0dh\x9694\xb6\x9f\xbb\x81wk\xf3iG\x94V\xeb\xfe\xa5!'\xb8\xc3\xbb%\xe4\x1a\x9e,p6\x0d\xf3~-\xdb\xcd!N\xdf\x10\xda\xdb\x0eQ\x87x\xe9\x85\xf6\xa5\xbf\x8f\x03\x8c,\x83\x18B\xc1Y\xdc\xac\xd8\xd3\xaaW\xc8\x17\xb1}\xc0\xd6|\xe0\x1aALY\xba z6\x1b\xd4\xf2\xedb\xd7e\xe5h1W\x84\xe1f\xb0Cb\xd6\xc2\xa8F\xc2\x83\x9a\xe4E\xcb\xdd\xada\xd3VI8mw0\x95\x1fix\xbcC\xce\x8c8\x87\xd2\xa3(\xffE\x8d\xe2\xe0\xc2\x8e\xc93\xdc\xa8\xb4\xa0\x85\xd2dT\x83A\xf5\xe8mN\x85(\xb2Q\xa2\x81M\xd1\x0c\xc7\xe6\x05\x8b\xfa\x11J\xe6G&\xc5\x97\x0e\xa1s$L\xea\xef\x13\xba\xc8+\xda\x94\xbfm\xb16\x18:urS\xc3\xcb\xd6\xe8\x1e\xaf\xb9\xa9QE\xeb\xb4K\x85\xde6V\xb0\xc9u\xdc\xe1\xbb\xc9\xef\x7f\x18\xdf\x18\xb8\xfd\xd6@\xee\xf2>g\xa2\xe1-\x8b\xf2\xb9G\xa2\xcd\xe5e\x8a\xd2\\\xc8\x9a4\xf6\xa38\xcf\xdeP\xae\x02xh\x8a,\xcc\x84J\xe607\xd5\xb6\x9d_\x1c\xfa[\xa6v\x15\xb7\x8d\xa1y\x99\xb2\x0e7\x11n+c\xf5\x99Xvr6\xc59)Q\x96S5\xadPYE\x8b.\xbf5W\x1a\x1f\x9e\x9e\x1f\xff\xef\xf1\xc9\xf4\xf2\xf4\xbc\xdfw\x17\xdf\xce\xff<\xfe\xfa\xad\xe7W\xc7'\x7f~\xbb\xe8=\xd6\xd7\x9f\x17\x97\xa7\xbf\x1fOO\xfa}v\xfa\xd7I_\xfc\xa6\xdf\xbf\x1f\xff8\x9e^~\xeb\xf7\xd9\xe9\xff\x9d\x1c\xff\xf3g\xb8\xb2\xbe\xb5\xa1\xc3\x8b~\xf2),\n2\x89\xf5\x01\xa9\x1d\x85t\xcb\xf1\x90g\x11\x8e\xde1~+\xbc/}\x07\xa1\x05\xfa\xa6Der\x9da\xd1=\xbc\xd4\x83{\xe0\xc1<\xb9):3\xd6\xad\xf2/\xd9\xa2\x9a\xf0\x8a\xe8\x82/\xcc\xd3\xf3\x82i\x17\xaa\x0f\x169\xeac\xd9.\xf9F[\xb6\xee\xae\xa76\xa2\xf9\n\xa5\xe4\x8e\xa4r\x93\x10\x8e[WG!\xc2G}\xd7\x06\xcdO'\x19\x9f\xf9\xd1\x9c\xdc\xba\xfb\xd4%_\xfb\xbc\x0b\xfb\xda\xdd/\\8\xb7|\x7fdiR\"0h\xee>\xbd3\xaf\xcax\xf58\xc6e\x85w\x9a\x94T\x94<3\xaf$]\x11\xa3\x0c\x93+\x1c\xf9\xdbv\x8c\xb8\xad\n\xf8\xe8\xf0y0\xd5LRe\xd2\x18\xe1\x9cc\xb8\xa2\x8b\xbcH\x1e\x85F,HD\x92;\xdfD\xa8K\x83s\xb9t\xfb,\xe8#\x06\x07\x10\x1eMt\xc5\xe7\xddUp\xbb76\x1f\xea\x85\xda4>L\xfa\xa2D~\x8b \xef\xdc4NS.(\xceb\\\xc4\xa6\xc1\x90\x16\xac\xe4\xe7\x91K\\\xdcX\"\xcf\xeaG\xfd\xda\xb7\x1c\x98\xc0\xcaj\xb5\xca\x8bF\xd1U\x8e\xf9;\x19\xf3\x81)-\x92YE Z\xe25\xbf\x04\xf1\x00\x9c\x11\xa6\xaf\xb3k\x12\xa3\x998B\x97Z\xbe.\xac\x97g\x11\xf3D\x98\x9e+\x89%\x05D<\xf2\xd8\xe7\x8a\xeb\xdc\xab\"O\xd3j\x15\x12kH\xb3\xc3\xe5\xfa\x97T\xfb8M\xf5\xd2V3\xbd>\x12Nhi\x8f:h>\xea\x86L)\xcb\x06\xa07\xa5R\x99\xf3\x84\xa4\xb13n\x1d\xa9\x10\x1c~eC2\xd9g\xba[\x97\xa2\xd1.\x0c\x18\xdb.\xf8\xa8\xbc\xa3\x03\xe1%\xa9\xf3\xdc8}\x17>/\x8a\xf24%\xdc\xc5ahK\x1b\xe0\x00\xc8\x08\xe0\xb3(\xcf\x88\xbe!\xf1 \xaa\x8eJ=1\xca0J\x1a\x80\xeas\xb8Py=\xf7\xd9Jmd\xac?\x08\x1ey\x85\x0f\xbb\x9e\xf2\x98\xb8\xc1D\xf3\xd2\x99\x0e\xae\x8a\xa49\x1eJ\xb5\xdd2\x15\xa1l\xd9\x9a\"O\xbe\xa1\x06&\xfe\xe1O5\xdc\x12A^\xe5fA\x10\xf9\x8a\x13\x85N\xa0A\xfc\xc0\xde\x1cT\x10\x1b\xfaR\x88C\x99\xa6c\xd16\x82\x88\xfb\xd2\xb6Q\xce\xa8e\x02\xb8\x15j\xb8\x08\x03\x0c\xf7.\xb4\x80ju\xc0\xe9\x16\x14\xb2\\\xa1lY\xd1\x06\x8b*\x80d\xbe\x95e\x1d\xa8\x9c\xe0\xbd\xe0A\xed\xfb$\x98\xde\x86\xd6Ixv\xa6@\xd4;\x14\x16\x8c%\xc6\xffFP\x12[\xe5M\x0b\xd5\xa6E\xd0\xaf=\xe0\xacf\x12\xce\xadg0\x10\xb0z\x04\xe3O\x8c\x11\xa6\xc2 RG0\x1a\x8e\xd9\xd2&Z\xed\x8a\xbaT\xfaN3\xb6\x95\xb0$\xb1q\xb1\xd3Ow\x05\xaeK\xcdG\xf6\xe2<\xa0v1\xb6b\xf3\x92\xf1\xae\x85\x87\xd4\xa61\xcc\x9e\x97\xd9\xde'x\xa8\xa5\x1e\xa0\x8c\xe5\x8f\xc7\x88c\x80E2@O\xc0\xc53n4\xc3\x80x\x86\x9e\x8c\x84\xc54l\x10\xd50<\xaeahd\xc3\xd0\xd8\x86\xc1\xd1\x0d\x83\xe2\x1b\x06G8\x0c\x8cq\x18\x1e\xe50<\xcea`\xa4\xc3\xa6\xb1\x0e\xfd4\xbcx\x9c\xf1\x0e\x80o\xed_\x0e\x8dxx\xb2\x98\x87\xa7\x8ezx\x8a\xb8\x87\x17\x13\xf9\xf0,\xb1\x0f\xcf\x14\xfd\xf0\xa2\xe2\x1f^G\x04\xc4\x0b\x8c\x81x\xde(\x08x\x1c\x04\xf4\xbeL\xffz\xc4X\x08\xb8/8R<\xc4\xa0\x88\x08(\x96\xfanP\x1e\x96\x10\xde!M\xa4\x10\xf1?\xc8\\\xb3\xeb\x8c\xa7nyC\xafQ\x18\xad\x91\x8a%\xc3h\xe3Y54\xaf\xd9g^\xc8\xcb{CX3<\xe9\xae\xef0\xfc\x92\x08\xa7\xe9Z\xb4\xf7\xf7\x16N\x96\x1f\x8d@\xee\x16\xf6\xb4j\x03\"\x12\x96\x13\x92\x8a\xcbsfa\x99I\x8f\xd2\x84d\xf5\xfe\x96G6x\xe1u\xa7hpS\x8b\xab8\xf1r\xa7\x0f=_\xf9v:F\xb3\xf5\x0e\xaaV\xb1\xfe7M\x96\xa4\xa4x\xb9*w\xf4q\x98(\xc3\xe8oS*\x12\xa6R\xd9Ho\x9e\xbb\xc9\x00\xef\x98\xa1\xfbeq2\x10_1\"B\x8a\x108\x81\x901\x89\x18\xd8]\xc6\x96\x10h\xb1\xc6d\xbc\x11\x99\xb0O\x98\x06\x95w\xff$\xa3\xc5\x9a\xb7\xcf\x93\xf8\x82h\x9a\xadG\xa4\x08\xa6\x05\x90\xdcA;\xce \x84\xcb!gOP\xc1!\x1d\xf8\xe5\xfd\x99\x9c\x81\xafF\x84).\xa9B\x1aD\xd8\x0b\x95#\x0f\x9fKF\x14\xa4T\x190b]\xb5\xb4\x9a\x8fQY\xeb\xe3\x87\x10\\0g\x98\xaf,}\x97\x96\x9e\x13\x9c\xe1\xf5\xe1\xa3\x82{\xf3\x80\xf3#\xae\xc3 \x8e\x16R\xe2\xde\x0f\x9c\xf5\xc0\x9a\xcfVf\x84I\xb7\xc4\xc3\x12\x81\x17Z(RA%y6\x11\xf4\"r\xe7\xdf\xf6\xc00\x9c2\x13\xf7\x9dY\xd7\x12Ex%\xbcLk\x14\x0e[\x81^Pz\x9e\xe7h\x89o\x88\x9c\xea*k\x8e\x99+\xb9\xb0\xc9\x1a\xdd\x93\" 1\x1c\xbb~\x005\xba\x17*\x0fZ\xc5K\x19\xbe\x94\xf6.\xf05N\xb2\x92\x1a\xbb\x13'\xbc\xe6Q:\xfb\ng\x11\xf1D\x93]\x1a\xc7\xa8<\x87\x7f\x81\xef\x881\x92\xe40\x8f\x11\xa3j\x8b\x99\x10\xb7ZH\xb2\xbb<\xbdk\x16\x00h?'\xa7l'\xfd\x97\xe4tAd2\xb5\x08\xed:oD\x04#,#\xca\x1au$\xdaO\x1d_\x86\x15KE\xde\xf6\x85Yib\x99\xdf\xb9\x9a$\xd7\x976\xa34Nj\x81\x1b\x16\xe1`\x8dq\xf0\xbb\x83\x00\x1f\n\xe2?=\xfd\x15V;\x10\xabQ\x04\xc2\x1e\xc0 %\x1b\x08Mh\xc8\"\x14\x99\xb0U\x9a\x02J\xae\x83\xe6\xd0\xf0\x04\x13\x14\x88+\x90\xe0\xa5\x17\xc2\x99n\xd0\x93\xf1\x06\xd8\xcd\x826\x8a\x8c\xc08$\xff\xf9:xd [\x1fH\x18\xef$\x9f\xbc\xf0\xf2v\x05\x9e0\x9f\xfc\x81\x1b`\xe6\x0c\xa1z\x84\xd8\x8d~\xabf\xa4\x890\x84\xd6\x8d\x827\x9c\x13\xc5C\xb2\n\x12\x1c\xb3\xfbR\x03(\x1a\xbbC-D\x92 [\x89\x80\xf6\x12!H\xe8\xb5x\x80S\x03\xc1\xf5\x04\xdaN0\xb6x\xb4\xa4\xc2\xb6\x13=\x0du\x80\xedL\x0b\xe9\xe1\x96\xd4\x04\x06\xe4\x13\xcc\x9a\xa2\x97\xc7\xab1l+B\x7f\xb7\xa8\x85S>\xf2$\x19F\xf9\x86\xf6\x04\xd9\xa7\x90\x9d\xfcN{\xa21\xf6ZV\xa0\xe3\xed\xb8\xecQj[\xde\x80\xb5i\x1a\xc1\xd7\x00\xaa\x10(\xd7Q\x8f6}\xe1\x0b-\xd49\xba\x08\x1a\xa7\x8e\xd8\xc3\x06\xea\xe5pjc\xc3\xd4\x06\xd8\x83OQ\xaf\x0eh/\x88g]\xc4\x11\xa0\xed\x9e\xe5\xabV\x84\xfaP^\x86\x0c\x17\x90u\xc3y\x021Z^p\x9bP?\xd2\xc4\x19N\xfd\x86\x86\x0b0\xbdl\xac\x80\xe0+\x0f\x1d\xdd\xbd\xf2\xf4\xd9\xd5\x16\x9a\xe5I\xd8\x9enyjtg\xbb<~\xfe\xda\x95\xad\x90\xe8\xd3\x86\xec\x0bd\\\xf3l$k\xfb\xe4\xe1\x14\x93Z\xaau|\xb3\xact\x8a\xd0\x9f\xbc^\x80\xcc\x16\xf7\xc2\x92!\xf5\x96\x1a\x16\xd3\xb4\xcc\xd1M\x96\xdfg\xbch,\xfa\xce<\x18o\x9c\xc5s\x9c\xf9\xc28Vg\x0c\xa8\x99\xab.,T\xaa@+\x1d \xa0\xf34\xaf\xd1[^l2\xa1\x0b4ORJ\n\x12\xa3\x9b;e\x9a))0\xcd\x0bw\xbc\x97\x0c&\xf7\xb2\x0bD\xa0\x04\xa4\x14E\xc3eU\x94 Q{k.\xa0\xbafq\xe3\x1a)\xe7\x01v\xf9|.C\xd9\x9a\x8d,\xa1\xcc\nN\x8a\xd1NR\x80y\x0e\xc0\xa9\x88\xc0b@\xa8s5\xde\x89J\xe4\xe2PK6\x08M\n\xd6\xfb\xbb\x05.\x17\xe3\x93Je[zNDf\x14WQs-\x98\xff\x10R\x8ah\x10^\x00\x11`\x11qf\xb9~\xd6\xc8\xbfe\x03\xf3r\xcf\xfe\xf0#\xf6\xe8\x083\xde6\xa0)\xcd(_.\xf3\x8c\x8f\xe7\x0f\xeb\x14\xcd\xcc\x9e\x85\x1dbh\x11a\xa6\xc8\xa8\xaf;i\x0e\xb9\x15V\x8f.\x1a\x8d\xde\n\xb0\xbf\xd5\xb7\xac\x9cO\x13\xcd\x1a\xefu\xabz\x98\xeaM\xb2\xbb\xfc\xc63\x97\x92lU\xd1W\x9bs\x05Y\x05\xbd\x04\x0f\xf3 \x9b\xcf \x13\xbb\xa8\"\xa4\xaa\x8d\xf3\x8eEIv\x83f8\xba\x91\xf5\xdc\x01\x90x\x98\x01\xcf\x9e\xe0\x93\xc6\x7fH\xa5\x0b\xe9\x87O\xa9z\xb2\x00\xe8\x1e\x88\x07\xbeT,\xea[\x1a\xfa:\x8c\xfb;(\xf7\xe1[I\xf1,M\xca\x05\x89U\xb1\x14\x86\xe3(\xde\xd91\x14\xef\xec\xf8%bA7<\xb0UA\xee\x92\xbc*\xd3ug\xa9\x1byN^\\\xa5\xb2\xb9,pt#\x0e\xb5\x84\xe7\xa4w\x80D\xd9$\xe8\xae\x0c\xa4\xbd\xccA:~6\xa3-Z$\xe4N\xf4%\xc9+\x1aR;y\x06\xc2N@z\xb5^\xe13\xdb\xfa\x7fI;OU\x11S\xc1NX\xe5\x04\xf1\x88/&\xfa\x14\xa0}\x0c\xf5\x0c\x16\xf4\x82\xc3Tt\xa9)X\x1fc\xd4\x1bB\x00\xb0:EI\xf2F.\xe5$\xbbV\xadnv\xe68I\xab\x02\xb0\x85D\xcc\x0c\xafH\x16\x83\x04\xd9G\xea}\x8c\xee\xc5\xcf\x1f\x83\xacT\xf7\xeb\xb3\xe9\x05,\xcb\xbd\xf9\xd9\xc5\xbf\x8f\xcf\x06|\xf6}z\xfc#\xf8\x99a\x93\x87\xd29\xcc\x1a;F\x83\x08\xc5\xf9q\xc3\x02\xa3*+I\xd8W\xe3\x17\x12}\x12\xdb\xbb\"m3\x8f\xbdk\x980b\xac&fA\xeb\x9eOC\x86d\xd3\xa1=${g\x0c\xa9I\x9aDyV&\xb1:}\xe0\x83\xdf$\xfc6\"\x16\xfd\xaf\x96IY\xb2\xc5)\xedQ^\xa0\x98\xa4xMb`n\xa1\x03I6\xf9\xdaH\xb2wN\xbe\xd4w\x82V\xcc\x99\xcep\xc5\x90\xab\x07\xaa\xf4\xc4\xa6\xeaT\xe8'\x92ExUV\xa9FI\xea-\xbe\x8b\x85\x9c#\xa2\xda\xf3\x00\xa4 \xc3p\x148\xbc-\x7f\xd37\xfb\xe2\xca\x88a%Y&\x1a\xeaju\x1d\x90\x12\xfb\xa9\xd8\xc8\xa8\x0f\xeaz\xc0 \xccux\x1d\xc5\x8e\xdaX*\x06\xd6w\x19\x00;[Z\xeb\"Yk\x1f\xa96yv@aiO\xf5\x95H>\xe7\x9e+\x179\xa6\x14G\x0b1\x9aNEek\x93\xe0\xc8]\xc1\xba\xb9b\xe4<\xe6{\xf7`\xc6u\x83\xc5\x12#\xc9\xb9<\x93\x07\x1a\xf2\xb5LS\xb2\x93\xac\x0f\xaeF\x890jB\x0b\x84\x16\x19!DN\x80\x8d)\xb0\xe5P\"\xd0\x19\xde\x16\x17\x8a\x1e\xdf\x19\x1d$\x05\x1a\x8c\xf8\xa9\xc5\xf0\x92C}\xdaX\x0e\x8f\xf1\xd1\x90 ,\x81E\x14\xbe\x04\xb6\x8c\x11gZO\x1b {\xc4aA\xf0l\xf2%\xf0\xc7@U1H\x9e\xfa\xf1W[\xe1\xd03\x842\x19#\x87b\x98\xc6X)\xaf0\x8d\x01@\x15\xc8J \xa0\xa5@\x7fg1\xc8\xe7 \xa8\x0b\xee\x0e\xfe\xceb\x18\xc4\xab1\xac\x0bB\x7fg1\xc0)\x1fy\x92\x0c\xa3|\xc3`P\xd4'\x8bA\xea\xe51s\x18, \xc7\xcb`\x90\xfe\xf5S\xe6/4\xe9\x19\xc1\xb3\x00\xaa\x0e(\xbfQ\x07\xc7\xc0\xee\xc4\xbf\x0e\xfae.\xb4\x84\x1d6I/\x85G\x1b\x1b\xa2&80\x87\xb6\x12x\xbe}nm+_a \x17_\xcb\x16\xc8\x82\xafe\x1f\xe4\x854\x02\xc3B\xf6\x1c\xc8\xa6\xa1\xf4\x8fb\xc9\xa1twR!\xc6\xdc#Y\x81;\xf7J P\\\xe1\xa2$v\xef\x99\x82$\x83,\x1d\x02Z;\xd43c\x0f\xc1\xe7\x0f\x82/5\xd4S0\xa8G\x06\x1f\x18P_[\x88\x86e\xf2\xa1\x17\xcb\xc1\x90\x8d\x0c\x02\xa4\xbdr\xb2\x10,\x93\xe9\x95\xf2r\x98\x05\xed\x82\xb2X\xd1\x9e\x10\xfa\xc9 d\xa1\xfa\x81DU\x1b\xe3\xd2\xc6F\x9d\x9e\xf86\x99\xab~\xce$\xfe\xad\x9b\x84\xc8\xff\xd2\x9d2\xad\xbb%\xfe+\x11\x92\x17\xe5\xabu\xed\xf1\x89?4S\x9d\x04R\xae\xbc\xc7\x80K\xe0w\x04\xfc\xe7\xa6\xc1\x99\x1d\x96\x022\x06A\x11\xce\x10Ix\x11\xee\x19A\x98O\xe2\x1dD\xde]\xbb\x96\xe4\x97\xfd/\x9f>\xcf\xf0\xc1\xee\xe1\xfc\xfd\xe1\xee\x87\xc3/x\xf7\xf3G\xfciwN\"\xbc?\xdb;\xdc? {\xa2\n\xbb\xd2\x10\x91\xbb=\x9c4\xear@\x1f\xae\xfb\xb7\x8f\xd7d\xef\x11?\xd2\xea\xe3!}8|8L\xd3\xbb\xc3\x87\xe8\xcb#-o\x1f\xd2\x9b{\x92\xda0\x0e\xa5\"\x8e\xc5\xce\xba\xc8\\o\x86\x1e~\xde{?\xff<\x8bv?\xee}\xfc\xb4\xfb\x81\xcc\x0ew\xbf\x1c\xee\xcfw\x0f\xf6\x0f\xf6?~\xda\x8f\x0eH\xd4b\xa8\x18l#\x96\n\x10\xfb\xb7\x0fN\xa6~)o\xd3h\xf1\xbe|\xb8\xcf>|\xf8u\xb8\xf7\xeb\xf1\x9a~.\xca\xc5\xdd\xedz^\xfc\x8a\n\x179\xbc\xa30cB\x9e\xa5\xeb\x9a\x05(\xe1)p\xc6A2}\x1d\x07`t6\x86\x12\xa2\x9e\xa7\xf8\x9a\xe3\xab\x1b\x14\xe4\xeag\x88\x06Z^J\xdb%\xc3\x99Jb\xa4\xd1\xab\x8de\xb9\xca\xb3\xd2K\xb64\x84OC\xb8i\x96C\xa4{\xe7\x8a\xda\xe3\xf5$\x9a<\x08<\xbc\xc7\x05c\x11\xdd\x1a\xccM\xb4\xfc!\xc7\xdey\xe1\xcaA\xf0\x80\xa4\x10\x915\xb3\x1d\xee\x08\x1a\x91\xc8\xd6`\x10\xc9:s\x905\x8c\x0c\xad\xf3\xaa\x90>O\x93D?V\xb2\x88Ey.\xd9\x83\xea\x10@\xf1\x7fF\xb6\x0c\x1b'\xe8\x8f\x8a\x14\xeb\x89\xfa\x06\x9d\x9f}m\x81\x13\xf9\xa65\x02*\xe0\xd7\xf8Y\x03\x9fi\x86\xaa\x8c<\xacH\xc4\x1c7\xd1\xfa\xc9&\xa92Z\x90%n\n\xc6\xe9\xc7\xb9}8>@W\xbc\x1e\xa5\x1c\xe5\xb1E\xc5\x89\x0f\\%\xcc\xd5\xde9\xc9\xe8\xfb\x83\x0e\x83\x1c\xe5\xbf=8\xc4\x84\xe2$}!\xa5:\xd8\xe7WU\xe1\xec:\x134p<\xc3u\xf0\xd7\xd6\x93\x89\x15.\xf0\x92PR\x188\xef\x8a\xa4^\xed\xd6\xb8f`kE\xf4u\xbe\x87\xb9\xdc>Op\x88K\x9ddGh\x85\xa9\x19\xac\xc9TCR\x90\xf8\x08\xd1\xa22M\x83\x95\xc5\x9a[\xdaY\x86\xf2\xab\xb7w=\xd4\xa7\xd61q\x16\xa3,\xb7r\xff]\x0b\x80\xec\xf2C\xefs6\x9dy\xa7\x9f|\xde\xd4%&I\xfczK\x82\xe5\xff3\x17\xcc\x1a\xc5y\xf6\x86J\x8e\xcf\x85B\xe7\x0b\x891O\xba[\xc6\xf0\xd3\x0eWw\xd0\xac\xa2(\xcb\xa9\x85\xb3\xb8\xd1@\xa0\x0bF45\xac\xa72#KK\x0bK\xdf\x90\xff2\xceI\xc9\xf0\\b\x1a5\x1bh\x19\xdf\x9b\x12\xf9\xe7Z\x1d\x8c\xec\x18n\x97\xe8\xbe$\xbd\x0c\xd1*\x89\xeaJP\x06\x86\x17\x84\xb6|;I\x91~\xa9\x800v\x15\"\xf1\xd6}B\xda\x9ch\xda4\xe8\"b\xc7\xb1\xb6%\x87\xffPd \x9f\xc00no\x0e\xf6\xf6\xde\xb8\x8fy\x8c$\xe4m\x9e\xef8N\xa4\xc3\x07s\xdaGf\xfc\xd1\x15T#\xd5\x91\n-\xf24.\x91\xbaX\x14\x8b\xffmb\x0b\xf3p_vn~\xf3\xe8;\x98\xf4\x848\x85\x8etB\xf7\x9a\x08v0\x03\x0c\x1a g\xa9\"\xf4ST<=\xfe\xbd.X!\x96;B\xc7\xcbU\xca\x1b\xf3\x95\xa8\x8co\xdeM\x039\x98\xd2f\xcdq$N1y)P\xa1\xa6\xc4\x97D\xac5\xe5\xd8\xb5}\xc3\xe6\xf35/\x97\xb9k\xb0\x12\x9c\xb2\xfc\xb4\xcc\xac5L\xd9\xcd4\xd6\x81\x07\xfep\x88\xc6\x97\xc2\x95\xe4%I\x88\x92\x05N\xd3\xfc^\x9a1\x99\xe2\xed\x03\x17\xb9\xefhx\x1bwO\x18\x9e\xef\xd0S=\xc1z1\xc15#\x9e\xf0\xca\x11\x0f\xdeV-Sl\xef\xdf\xf9V\xe5\xfe\xfbK\xb5\x15y\x1a\xac\xd1\x06\x99A\xe2\xc1\x1c^\xbd\"\x152F]\xe2HV\xec\x05\x06\xc0\xc9\xea\x00\x04P\xa7\xb4\x17\xf3`\xf5V\x1a\xdd\xdb\xfb\x94 i6\xef??\xfe\xdf\xe3\x93\xe9\xe5\xe9y\xbf\xef.\xbe\x9d\xffy\xfc\xf5[\xcf\xaf\x8eO\xfe\xfcv\xd1{\xac\xaf?/.O\x7f?\x9e\x9e\xf4\xfb\xec\xf4\xaf\x93\xbe\xf8M\xbf\x7f?\xfeq<\xbd\xfc\xd6\xef\xb3\xd3\xff;9\xfe\xe7\xcfp\xb5\x9a\xc6Gg\xe7\xa7\x7f~;\x99\x9e|\xed9\xd8\xd7\xd3\x93\xcb\xf3\xd3\x1f?\xfa\xd2\xa6[\xf9\x07>\xd3En\x06M\xaf\xb0\xaf\xd2|\\\xb3x\xe0\xf0H\x04\x80\xc9\xab\xb8\x1e\xc5j\x1c\x8b\xe2\xc8\xfeZ\x8e\x82K\xden\xb4H\xae\x93\x0cSH\xcdN\xeb\x1a:\xb2\xbdT\xcez\x89b2\xa3\xa8$\xc5]\x12%\xd95\x9aWY\xc4\xcdX\xcf\xd1\xd4\xda;\xb2\xbd\x14\xbb%\x1e\x83\x96D(\xc9\xeeH\xd9\x9f\x1e\xbdN\x8f\xaco\x95h2\x9a\xd0\xb50\xdf\x9a\xc6\xa8*i\x1e'8\x93\x84\xca\xf3\x1e\xce\xe0\xbe\x84\xf2u\x7f\xd4y\xd3\xae\x93\xb7\xc2\x05]K\x9c\xb8\xd1VV\x8aY\xdf\x9eCj\xbdqd}+\xb8+\x06\x14\x1b\xe5\x0c\xe1\xf9\xb2\xbe\xb5\xa1\xc3k`\xf2),\xea\x13\x89\xf5\x01)\xa5\x84t\xeb\xec\x90g\x11\x0e\x141~+\xbc/}`\xad\x05\xfa\xa6Der\x9da\xd1\x05\xbb\xd4\x83{\xe0\xc1<\xb9):3\xd6\xad\xf2/\xd9\xa2\x9a\xf0\x02\xe1\x82/\xcc\xd3\xf3\x82i\xd7m\x0f\xd6\xfc\xe9c\xd9.\xf9>[\xb6\xa0\xae\xa76\xa2\xf9\n\xa5\xe4\x8e\xa4r\x93\x10\x0e\xe3V{u\xe1\xa3\xbek\x83\xe6'\xd9\x8c\xcf<\xe6Yn\xdd}\xea\xb2n\x9c\xbfv\xf7\xbd\x16\xce-\xdf\x1fYzv\x08\x0c\x9a\xbbO\xef\xcc\xab2q\xa4H\x17\x1a\xef4\xe1g\xb0y\xa3\x11\xa63\xff\x86ar\x85#\x7f\x17\x8b\x11\xb7U\x01\x1f\x1d>\x0f\xa6\x9aI\xaaj\x18#\x9cs\x0cWt\x91\x17\xc9\xa3\xd0\x88\x05\x89Hr\xe7\x9b\x08u\xa5l.\x97n\xdb\x01}\xc4\xe0\x00\xc2\xc3V\xae\xf8\xbc\xbb\nn\xf7\xc6\xe6C\xbdP\x9b\xc6\x87I_T\x8co\x11\xe4\x9d\x9b\xc6i\xca\x05\xc5Y\x8c\x8b\xd84\x18\xd2\x82\x89>\xf9K\\\xdcXB\x9c\xeaG\xfd\xda\xb7\x1c\x98\xc0\xcaj\xb5\xca\x8bF\x0dR\x8e\xf9;\x19`\x81)-\x92YE Z\xe25?\x90\xf7\x00\x9c\x11\xa6\xaf\xb3k\x12\xa3\xd9\x9asAj\xf9\xba\xce\\\x9eE\xcc\x13az\xae$\x96\x8c\x08\xf1\xc8c\x9f+\xaes\xaf\x8a[\xa9\x8d\x8c\xf5\x07\xc1#\xaf\xf0a\xd7S\x1e\x137\x98h\xde<\xd1\xc1E\x824\xc7C\x99\xa7[\xa6\"\x94B-p\xc3\"\x1c\xac1\x0e~w\x10\xe0CA\xfc\xa7\xa7\xbf\xc2j\x07b5\x8a\x1c\xd8\x03\x18\x9a\x858\xdc\x9e\xa5!\x8bPd\xc2Vi\n(\xb9\x0e\x9aC\xc3\x13P\xa3lB\xf87\xa0\xf8\xb4\x17\xc2\x99n\xd0\x93\xf1\x06\xd8\xdc\x816\x8ah\xc08$\xff\xf9:xd [\x1fH\x18\xef$\x9f\xbc\xf0\x9a\x8b\x0c\xc4'\x7f\xe0\x06\x989C\xa8\x1e!v\xa3\xdf\xaa\x19i\"\x0c\xa1u\xa3\xe0\x0d\xe7D\xf1\x90\xac\x82\x04\xc7lF\xd4\x00\x8a\xc6n\xd8\n\x91$\xc8V\"\xa0\xbdD\x08\x12z-\x1e\xe0\xd4@p=\x81\xb6\x13\x8c-\x1e-\xa9\xb0\xedDOC\x1d`;\xd3Bz\xb8%5\x81\x01\xf9\x04\xb3\xa6\xe8\xe5\xf1j\x0c\xdb\x8a\xd0\xdf\x1d[\xe1\x94\x8f\x94\x97!\xc3\x05d\xddp\x9e@\x8c\x96\x17\xdc&\xd4\x8f4q\x86S\xbf\xa1\xe1\x02L/\x1b+ \xf8\xcaCGw\xeb8}v\xf5T\xbd\xe3\xe4\x80\x9e\xe6q\xfa\x17\xba\x9a\"r\xb5\x8e3\xca+z;\xc7E\xf6&\x9f\xcb\x88\xb8fOG(\xb3\x82\x93b\xb4\x03\x19`\xba\x04p*\"\xb0\x18\x10\xea\xdc\xb0w\x82\x1b\xb98\xd4\x92\x0dB\x93\x82\xf5\xfen\x81\xcb\xc5\xf8\xa4R\xd9\xec\x9d\x13\x91\x195Z\xd4\\\x0b\xa6Q\x84\x94\"\x1a\x84\x17@\x04\xb2\x82\xb7\xe5\x16[#\xff\x96\x0d\xcc\x1b\x8d\xf8\xa3\x98\xd8\xa3\x03\xd5x\x11\xf8\xa64\xa3|\xb9\xcc3>\x9e?:T4\xdfz\x16v\x88\xa1E\xa0\x9a\"\xa3\xbe5\xa59\xe4rY=\xba\xf24z+\xc0\xfeV_\xd6r>M4k\xbc\xb7\xb6\xeaa\xaa7\xc9\xee\xf2\x1b\xcf\\J\xb2UE_m\xea\x16d\x15\xf4\x12<\xc4\xe9k?'L\xec\xa2\x18\x91*Z\xce\x04\x9f&\xd9\x0d\x9a\xe1\xe8F\x16o\x07@\xe2\xd1\n< \x83O\x1a\xffY\x97.\xb2\x1e>\xec\xea\xc9\x02\xa0{ \x1e\xf8R\xb1\xa8oi\xe8\xebh\xf0\xef\xa0\x14\x8ao%\xc5\xb34)\x17$Va\x0d\xa1\xf0q\x88\x1e\xef\xc9\xa6\xbe\x94\xdb\x15~B\"\x9eb`x\x15\x00x\x8cQ\xe8\xac\xc8Wy \xe7\x81V\xcb\xdba\x04\xef8\xb9R8\xcd\xf9\xd9\x1e-\xaa\x88\xc7\x15q\x1fi\x89\x8br\x11\x08_G\xa8\xa4\x98V\xc1\xa5\xdf\x8f\xff\xc7:\x8b%\x99\x0b\xb7\x89+>\xae\"\xd54TH\x83\x04\xa0\x13,~U<\x82HD\xcb3\x11\xf3\xfb\xb2U\x15V\xcf\xbdx\x0c\xcf\x82<\xff\xf6\xf5\xf4\xfc\xf7\xab\xe3\x93\xb3\x9f\x97W\x17\x97\xd3\xcb\x9f\x17\xbd2\xd3\\0\xce\xceO\xcfN/6\x00 \xde\x05?\xd7\x99u\x9b\x12\xd2_\x93\x07\x99\x07\x91@\x00\x84\x91P\x05H\x0d\xe1q_8M\xe2I\x95\x89\xfd\xa2\x98\xb7l\xee\x00>\x0e\x88\xd2\xcec\xf5\xd7v\xea\x97\xb1b2\x84\x8bYB\x0b\\\xack\x0d\xc6\xeb\x0b\xea=\x9fX\n\xc3q\x14\xef\xec\x18\x8awv\xfc\x12\xb1\xa0\x1b\x1e\xd8\xaa wI^\x95\xe9\xba\xb3\xd4\x8dt)/\xaeR\xd9\\\x168\xba\x11gc\xc2s\xd2;@\xa2l\x12tW\x06\xd2^\xe6 \x1d?\x9b\xd1\x16-\x12r'\xba\x9b\xe4\x15\x0d\xa9\x9d<\x03a' \xbdZ\xaf\xf0\x99m\xfd\xbf\xa4\x9d\xa7\xaa\x16\xaa`'\xac\x00\x83x\xc4\x17\x13}\n\xd0>\x86z\x06\x0bz\xc1a*\xba\xd4\x14\xac\x8f1\xea\x0d!\x00X\x9d\xe9$y#\x97r\x92]\xab\x869;s\x9c\xa4U\x01\xd8B\"f\x86W$\x8bA\x82\xec#\xf5>F\xf7\xe2\xe7\x8fAV\xaa\xfb\xf5\xd9\xf4\x02\x96,\xdf\xfc\xec\xe2\xdf\xc7g\x03>\xfb>=\xfe\x11\xfc\xcc\xb0\xc9C\xe9\x1cf\x8d\x1d\xa3A\x84\xe2\xfc\xb8a\x81Q\x95\x95$\xec\xab\xf1{\x8d>\xf9\xf1]\x91\xb6\x99\xc7\xde5L\x181V\x13\xb3\xa0u\xe7\xa8!C\xb2\xe9\xd0\x1e\x92\xbd3\x86\xd4$M\xa2<+\x93X\x9d>\xf0\xc1o\x12~\x7f\x11\x8b.Z\xcb\xa4,\xd9\xe2\x94\xf6(/PLR\xbc&10E\xd1\x81$\x9b|m$\xd9;'_\xea\xabE+\xe6Lg\xb8B\xd1\xd5\x03UzbSu*\xf4\x13\xc9\"\xbc*\xabT\xa3$\xf5\x16\xdf\xc5B\xce\x11Q\xedy\x00\xb2\x8da8\n\x1c\xde\x96\xbf\xa1\xbaw}\x95R\xae\xa4%\xcb\xb2\xeb\x86\xba\x0eH\x89\xfdTld\xd4\x07uY\xe1\x04\xe6:\xbc\x8e\x9aIm,\x15\x03\xeb\xbb\x0c\x80\x9d-\xad\xe5\x95\xac%\x94\xe4\xe5\x91\x03\\X\xdaS}%\x92\xcf\xb9\xe7\xcaE\x8e)\xc5\xd1B\x8c\xa63Z\xd9\xda$8r\x17\xc2n\xae\x189\x8f\xf9\xde=\x98\xb8\xdd`\xb1\xc4Hr.\xcf\xe4\x81\x86|-\xb3\x9d\xec$\xeb\x83\xabQ\x02\x95\x9a\xd0\x02\x11JF$\x92\x13`c\nl9\" t\x86\xb7\xc5\x85\xa2\xc7w\x06\x19I\x81\x06\x03\x87j1\xbc\xe4\x88\xa16\x96\xc3C\x854$\x08K`\x81\x89/\x81-c\x84\xab\xd6\xd3\x06\xc8\x1eqX\x10<\x9b| \xfc1PU\x0c\x92\xa7~\xfc\xd5V8\xf4\x0c\x11Q\xc6\xc8\xa1P\xa81V\xca+\xcc\x86\x00P\x05\xb2\x12\x08h)\xd0\xdf\xc9\x10\xf2y\x02\xea\x82\xbb\x83\xbf\x93!\x06\xf1j\x0c\xeb\x82\xd0\xdf\xc9\x10p\xcaG\x9e$\xc3(\xdf0\xa6\x14\xf5I\x86\x90zy\xccT\x08\x0b\xc8\xf1\x12!\xa4\x7f\xfd\x94i\x10MzF\xf0,\x80\xaa\x03\xcao\xd4\xc11\xb0;\xf1\xaf\x83~ \x10-a\x87M\xd2K\xe1\xd1\xc6\x86\xa8 \x0e\xcc\xa1\xad\xc4\xafo\x9f[\xdbJ{\x18\xc8\xc5\xd7\xb2\x05\xb2\xe0k\xd9\x07y!\x8d\xc0\xb0\x90=\x07\xb2i(\xfd\xa3Xr(\xdd\x9d\x8c\x8a1\xf7HV\xe0\xce\xbd\x12\x08\x14W\xb8(\x89\xdd{\xa6 \xc9 K\x87\x80\xd6\x0e\xf5L\xfcC\xf0\xf9\x83\xe0K\x0d\xf5\x14\x0c\xea\x91\x08\x08\x06\xd4\xd7\x16\xa2a \x81\xe8\xc5r0d#\x83\x00i\xaf\xd4.\x04K\x88z\xa5\xbc\x1cfA\xbb\xa0,V\xb4'\x84~2\x08\x19\x0f\xd4\x8f\xe5\x9b\xf11hJ\x82\xf0z\xa7[\xa2\xdeI\x87\xe8)92\xc2f\x110U\x87&!\x8akaw\x0e\xa2\xdc\xcem#\x05Q\x80\xf6$\x1b\xca\xb1\xe55p7s\x90\xe7\x14v\xe5\xdc\x1a\x84\xffJ\xc4\xd1E\xf9j]\xbbi\xe2\x0f\xcd\xfc$\xc4\xb3\x19]C\x06\xec\xb8\xdfz\x07\x0f\xbf\x833\x12\"\xcf\xceQ7V\xcbPIR\x18\xc9\x1dD\xde]\xbb\xd6\x94\xf8\xe9\xfe\xed\xc15\xd9{\xc4\x8f\xb4\xfaxH\x1f\x0e\x1f\x0e\xd3\xf4\xee\xf0!\xfa\xf2H\xcb\xfb\x0f\x07\xf1\xed\xc1\xaf\xf8n\x19\xe3\xc7\xea\xfe1\xc2q\xbcX|\xbe^V\xef\x97\xd1#yo\x83\xec?\xed\x1d\x89z}\x8e\x1b\xe1\x0c\x91\x84W \x9f\x11\x84\xf9\xd2\xf3\x12\xfde\xff\xcb\xa7\xcf3|\xb0{8\x7f\x7f\xb8\xfb\xe1\xf0\x0b\xde\xfd\xfc\x11\x7f\xda\x9d\x93\x08\xef\xcf\xf6\x0e\xf7\x0f\xc8\x9e(A\xaf\xf4Z\xe4\xee\x8d\xd7\xe4\xb2\x0f\xd7\xfd\xdbG'\x97o\x1f\xd2\x9b{\x92Z\x99\x19H\xa0\x1c\x8b\x9du\x85\xbd\xde\x0c=\xfc\xbc\xf7~\xfey\x16\xed~\xdc\xfb\xf8i\xf7\x03\x99\x1d\xee~9\xdc\x9f\xef\x1e\xec\x1f\xec\x7f\xfc\xb4\x1f\x1d\x90\xa8\xc5P1\xd8F,\x15 \xf6o\x1f\x9cL\xfdR\xde\xa6\xd1\xe2}\xf9p\x9f}\xf8\xf0\xebp\xef\xd7\xe35\xfd\\\x94\x8b\xbb\xdb\xf5\xbc\xf8\x15\x15.rx;e\xc6\x84\xe2@\xd2\x87\x87\xaf\x0f\x00lV5\x86\x12Jj\x9e\xe2kn6t\xdb\x80\\\xfd\x8c\x93\xe06\x93\x02\x88\xb4\\2B\xa8$\xb5uQ[\xb5r\x95g\xa55\x82C\xa3#\x93\xdb\x9f\x88x3\xd9>D\xbf\x7f\xba\x97\x1b\x91O\x1e\x04B\xde\xad\xf8X\xd4\xb7\x06s\x13/\x7f\xc8\xb1w^fr\x10<\xd8'D\xa4\xe2\xba\xd3k@#\x12\xd9\x1a\x0c\"ag~\xaf\x86\x91\xa1u^\x15\xd25i\x92\xe8\xc7J\xa6S\x9dK\xee\xa0:\xbaN\xfc\x9fQ-#\xb2 \xfa\xa3\"\xc5z\xa2\x8a\xeb\x9e\x9f}m\x01\x13\x99\x9c\xf5\xf0*\x94\xd6\xf8Y\x03\x9bi\x86\xaa\x8c<\xacH\xc4\xbc+\xd1\x9b\xc9&\xa72Z\x90%n\x8a\xc5\xe9l\xb9\x1d->@W\xb8\x1e\x05\x1a\xe5\xb1E\xdb\x89\x0f\\5\xc6\xd5\xae4\xc9\xe8\xfb\x83\x0e\x83\x1c\xf5\xb9=8\xc4\x84\xe2$}!E0\xd8\xe7WU\xe1l\x0b\x134Fo\xea\x12\x93$~\xe3#\xc1\xf2\xff\x99\x0bf\x8d\xe2<{C%\xc7\xe7B\x95\xf3\x85\xc4\x98\xc7?k\x0c?\xedpu\x07\xcd*\x8a\xb2\x9cZ8\x8b\x1b\xa5\xf9\xbb`D\xbb\xc0z*3\xb2\xb4\xb4\xd8\x1f\xf5\x9a\x89sR2<\x97\x98F\xcd\xd6T\xc6\xf7\xa6D\xfe\xb9V'\x1a;\xb5\xe7%\xfb\x1aI\x97E4!\xa2\xba8\x92\x81\xe1\x05\xa1-\x17OR\xd4\xf1{\x18\xbb\n\x91\x8b\xda\xf0t\x1a\x8e^s\xa2i\xd3\xa0\xebj\x1d\xc7\xda\x96\xa8\xdef\xca\x1b0\xcc\xda\x9b\x83\xbd\xbd7\xee\xf3\x19#/w\x9b\x073\x8eS\xe5\xf0y\x9av\x95\x19\x7ft\x19\xd2H\xf5z\xe25H\xcb\x96\x0b\xf86\xb1E>\xb8\x8b\x90nt\xaf\x17\x99^\x9e\x9e\xf7\xfb\xee\xe2\xdb\xf9\x9f\xc7_\xbf\xf5\xfc\xea\xf8\xe4\xcfo\x17\xbd\xc7\xfa\xfa\xf3\xe2\xf2\xf4\xf7\xe3\xe9I\xbf\xcfN\xff:\xe9\x8b\xdf\xf4\xfb\xf7\xe3\x1f\xc7\xd3\xcbo\xfd>;\xfd\xbf\x93\xe3\x7f\xfe\x0c\x17p\xd9\xb57\xfb\xef\xf7]\xdd~\xbf\xdfw\xbaI~\xe03]\xf7e\xd0\xf4\n\xfb*\xcd\xc75\x8b\x07\x0e\x8fD\xa0\x94\xbcC\xebQ\xbf\xc5\xb1(\x8e\xec\xaf\xe5(\xb8\xe4\x8d<\x8b\xe4:\xc90\x85\x94\xb1\xb4\xae\xa1#\xdbK\xe5\xac\x97(&3\x8aJR\xdc%Q\x92]\xa3y\x95E\xb4s\xd2\x17\x1eM\xad\xbd#\xdbK\xb1[\xe2\x11^I\x84\x92\xec\x8e\x94\xfd\xe9\xd1\xeb\xf4\xc8\xfaV\x89&\xa3 ]\x0b\xf3\xadi\x8c\xaa\x92\xe6q\x823I\xa8<\xef\xe1\x0c\xeeK(_\xf7G\x9d7\xed\xd2q+\\\xd0\xb5\xc4\x89\x1bme\xa5\x98\xf5\xed9\xa4\xd6\x1bG\xd6\xb7\x82\xbbb@\xb1Q\xce\x10\x9e\xcf\x934\xc1\x94 |]\x10\xee\x86\xf4\x1cTj\x9d#\xcb;1 \xf7zp*\xee\xaee\xbb\xd9u\xed7\x15y*\x88_f\xc9\xac*\xd1\x0cg7\xca*\xf6D\xa5\xd6eG\xf6\xd7\x0c!U$E\xc9\xc1\x14CAV\x05)\xb9+\xc6DP\x17\xe8\x93\x07[\xcd\"\xd18\x1a\xb0\xa8k\xbdyd\x7f\xdd\x9c\x9f\xf7\x8b$Z\x18|\xd2>\xa4Z\xf5\xba~mB\x10\xc9r\x1a\xa8W\xddEH+\xe4#\xeb[\x1b:\xbc,$\x9f\xc2\xa2d\x8fX\x1f\x90\xeaBH7\xa5\x0ey\x16\xe1\xf8\x0e\xe3\xb7\xc2\xfb\xd2G\xd5Z\xa0oJT&\xd7\x19\x16\xfd\xa5K=\xb8\x07\x1e\xcc\x93\x9b\xa23c\xdd*\xff\x92-\xaa \xaf\x99-\xf8\xc2<=/\x98v)\xf3`\x19\x9c>\x96\xed\x92\xef\xb3es\xe7zj#\x9a\xafPJ\xeeH*7 \xe1\xc8f\xb5W\x17>\xea\xbb6h~\x92\xcd\xf8\xccc\x83\xe5\xd6\xdd\xa7.\xeb\x96\xf4kwGi\xe1\xdc\xf2\xfd\x91\xa5\x8d\x85\xc0\xa0\xb9\xfb\xf4\xce\xbc*\x13G\x8at\xa1\xf1N\x13~\x06\x9b7ZL:SR\x18&W8\xf27v\x18q[\x15\xf0\xd1\xe1\xf3`\xaa\x99\xa4\ni1\xc29\xc7pE\x17y\x91<\n\x8dX\x90\x88$w\xbe\x89P\x17\x8f\xe6r\xe9V\xe2\xd7G\x0c\x0e <\xde\xe4\x8a\xcf\xbb\xab\xe0vol>\xd4\x0b\xb5i|\x98\xf4E\x11\xf5\x16A\xde\xb9i\x9c\xa6\\P\x9c\xc5\xb8\x88M\x83!-\x98\xe8@\xbf\xc4\xc5\x8d%6\xa9~\xd4\xaf}\xcb\x81 \xac\xacV\xab\xbch\x94\xe5\xe4\x98\xbf\x93\x91\x11\x98\xd2\"\x99U\x94\xa0%^\xf3\x03y\x0f\xc0\x19a\xfa:\xbb&1\x9a\xad9\x17\xa4\x96\xafK\xaf\xe5Y\xc4<\x11\xa6\xe7JbI\x12\x10\x8f<\xf6\xb9\xe2:\xf7\xaa\xc8\xd3\xb4Z\x85\xc4\x1a\xd2\xecp\xb9\xfe%\xd5>NS\xbd\xb4\xd5L\xaf\xcf\x84\x13Z\xda/\xa7\x9b\x8f\xba\x95S\xca\xb2\x01\xe8M\xa9T\xe6\x8b\xf2\x8c\xe8+\x0b\x0f\xa2\xea\xa8\xd4\x13\xc5\n\xa3\xa4\x01\xa8>\x87\x0b\x15`s\x9f\xad\xd4F\xc6\xfa\x83\xe0\x91W\xf8\xb0\xeb)\x8f\x89\x1bL4o\x9e\xe8\xe0\xba9\x9a\xe3\xa1d\xcc-S\x11\xca\xa7\xac)\xf2d\xa4i`\xe2\x1f\xfed\xb4-\x11\xe4Un\x16\x04\x91\xaf|M\xe8\x04\x1a\xc4\x0f\x7f\x96\"\x88\x0d})\x0c\xe6\"\x8eE\xdb\x08\"\xeeK\xdbFY\x85\x96 \xe0V\xa8\xe14}\x18\xee]h\x01\xd5\xea\x80\xd3-9c\xb9B\xd9\xb2\xa2\x0d\xa6\xdd\x83d\xbe\x95e\x1d\xc8\xad\xf7^\xf0\xa0\xf6}\x12LoC3\xe9\x9f\x9d)\x10\xf5\x0e\x85\x05c\x89\xf1\xbf\x11\x94\xc4Vy\xd3B\xb5i\x11\xf4k\x0f8\xab\x99\x84s\xeb\x19\x0c\x04,c}\xfc\x891\xc2T\x18D\xea\x08F\xc31[\xdaD\xbbS\xe9|\xa7\x19\xdbJi\x91\xd8\xb8X\x1e4\x0b\xe1\x11\x10\n\xa7\xe4\x8a\x07$]\xe0R\x87\xc75\x8c;n\x9f\xe9\xa7\xfb\xc6\xd6\xc5\xc8\x1d\xe5[@\x0dEl\xe5\xc8%\xe3]\x0b\x0f\xa9Mc\x98=/\xb3\x01L\xf0PK=@\x19\xcb\x1f\x8f\x11\xc7\x00\x8bd\x80\x9e\x80\x8bg\xdch\x86\x01\xf1\x0c=\x19 \x8bi\xd8 \xaaax\\\xc3\xd0\xc8\x86\xa1\xb1\x0d\x83\xa3\x1b\x06\xc57\x0c\x8ep\x18\x18\xe30<\xcaax\x9c\xc3\xc0H\x87Mc\x1d\xfaix\xf18\xe3\x1d\x00\xdf\xda\xbf\x1c\x1a\xf1\xf0d1\x0fO\x1d\xf5\xf0\x14q\x0f/&\xf2\xe1Yb\x1f\x9e)\xfa\xe1E\xc5?\xbc\x8e\x08\x88\x17\x18\x03\xf1\xbcQ\x10\xf08\x08\xe8}\x99\xfe\xf5\x88\xb1\x10p_p\xa4x\x88A\x11\x11P,\xf5\xdd\xa0<,!\xbc\x87\x96(\x85\xc6\xff 3\x83\xae3^[,\xd0\xc5?\x88\xd6H\xe5ta\xb4\xf1\x0c\x1a\x9a\xd7\xec3/\xe4\xe5\xbd!\xac]\x9at\xd7w\x18~I\x84\xd3t]7\xcaw~(?\x1a\x81\xdc-\xeci\xd5\x06D\xe4\xb5&$\x15\x97\xe7\xcc\xc22\x93\x1e\xa5 \xc9\xea\xfd-\x8fl\xf0\xc2\xebN\xd1\xe0\xa6\x16Wq\xe2\xe5N\x1fz\xbe\xf2\xedt\x8cf\xeb\x1dT\xadb\xfdo\x9a,II\xf1rU\xee\xe8\xe30Q\xa8\xcf\xdf\xc8R\xa4h\xa5\xb2\xd5\xda\x97\x8c(H\xa92`\xc4\xba\xaa-5\x1f\xa3\xf6\xd2\xc7\x0f!\xb8`\xce0_Y\xfa.-='8\xc3+\x88G\x05\xf7\xe6\x01\xe7G\\\x87\x13\x1c-\xa4\xc4\xbd\x1f8+F5\x9f\xad\xcc\x08\x93n\x89\x87%\x02/\xb4P\xa4\x82J\xf2l\"\xe8E\xe4\xce\xbf\xed\x81a8e&\xee;\xb3\xae%\x8a\xf0Jx\x99\xd6(\x1c\xb6\x02\xbd\xa0\xf4<\xcf\xd1\x12\xdf\x109\xd5U\xd6\x1c3Wra\x935\xba'E@b8v\xfd\x00jt/\xa4\x03\xa5\xe3\xa5\x0c_J{\x17\xf8\x1a'YI\x8d\xdd\x89\x13^\xf3(\x9d}\x85\xb3\x88x\xa2\xc9.\x8dcT\x9e\xa3\xbe\xc0w\xc4\x18Ir\x98\xc7\x88Q\xb5\xc5L\x88[-$\xd9]\x9e\xde5\x13\xdc\xdb\xcf\xc9)\xdbI\xff%9-3\xd2\xb3\\\x84v\x9d7\"\x82\x11\x96\x11e\x8d4\xfe\xf6S\xc7\x97a\xc5R\x91\xb8\xad\xf8\xcb\x93\xea\x97\xf9\x9d\xab\x8dn}i3Jk\x9d\x16\xb8a\x11\x0e\xd6\x18\x07\xbf;\x08\xf0\xa1 \xfe\xd3\xd3_a\xb5\x03\xb1\x1aE\x0e\xec\x01\x0c\xcdB\x1cn\xcf\xd2\x90E(2a\xab4\x05\x94\\\x07\xcd\xa1\xe1 \xa8Q6!\xfc\x1bP|\xda\x0b\xe1L7\xe8\xc9x\x03\xecw@\x1bE4`\x1c\x92\xff|\x1d<2\x90\xad\x0f$\x8cw\x92O^x\xcdE\x06\xe2\x93?p\x03\xcc\x9c!T\x8f\x10\xbb\xd1o\xd5\x8c4\x11\x86\xd0\xbaQ\xf0\x86s\xa2xHVA\x82c\xf6\xe7i\x00Ec\xf70\x85H\x12d+\x11\xd0^\"\x04 \xbd\x16\x0fpj \xb8\x9e@\xdb \xc6\x16\x8f\x96T\xd8v\xa2\xa7\xa1\x0e\xb0\x9di!=\xdc\x92\x9a\xc0\x80|\x82YS\xf4\xf2x5\x86mE\xe8\xef&\xa6p\xcaG\x9e$\xc3(\xdf\xd0\x9e \xfb\x14\xb2\x93\xdfi`3\xc6^\xcb\nt\xbc\x1d\x97=Jm\xcb\x1b\xb06M#\xf8\x1a@\x15\x02\xe5:\xea\xd1\xc8-|\xa1\x85:G\x17A\xe3\xd4\x11{\xd8@\xbd\x1cNml\x98\xda\x00{\xf0)\xea\xd5#\xeb\x05\xf1\xac\x8b8\x024f\xb3|\xd5\x8aP\x1f\xca\xcb\x90\xe1\x02\xb2n8O F\xcb\x0bn\x13\xeaG\x9a8\xc3\xa9\xdf\xd0p\x01\xa6\x97\x8d\x15\x10|\xe5\xa1\xa3\xbb\x9b\x9a>\xbb\xdaB;5+Nr@O\x935\xfd\x0b]M\x11\xf1b\x8a\x16`FyEO1\xc5F\xf9c\xf3\x11\x13\xe3i#\xff\x052\xae\xe9:\x92\xd1~\xf2\xa8\x8cI=9\xea0iA\xea;\x84\xfe\xe4e\x07d\xd2\xb9\x17\x96\x8c\xcc\xb7\x94\xc2\x98\xa6e\x8en\xb2\xfc>C\x98\xcd\xdf\xef\xcc\x11\xf2\x86k<\xc7\xd11\x8ccu\xe2\x81Z~\xea\xdeCe\x1c\xb4\xb2\n\x02\xaaS\xf3\x1a\xbd\xe55+\x13\xba@\xf3$\xa5\xa4 1\xba\xb9S\x16\x9e\x92\x02\xd3\xbcp\x87\x8d\xc9\x98t/\xbb@\x04J@J\xdf4<_E\x99\x10\xb5\xb7t\x83\xd69\xeb\xe6mT\xce\xe3\xf4\xf2\xf9\\F\xc45;&B\x99\x15\x9c\x14\xa3\x1d\xc8\x00\xd3%\x80S\x11\x81\xc5\x80P\xe7\x86\xbd\x13\xdc\xc8\xc5\xa1\x96l\x10\x9a\x14\xac\xf7w\x0b\\.\xc6'\x95\xca\xfe\xe7\x9c\x88\xcc\xa8\xd1\xa2\xe6Z0\x8d\"\xa4\x14\xd1 \xbc\x00\"\x90\x15\xbc-\xb7\xd8\x1a\xf9\xb7l`\xde\xeb\xdd\x1f\xc5\xc4\x1e\x1d\xa8\xc6\x8b\xc07\xa5\x19\xe5\xcbe\x9e\xf1\xf1\xfc\xd1\xa1\xa2k\xd6\xb3\xb0C\x0c-\x02\xd5\x14\x19\xf5\xad)\xcd!\x97\xcb\xea\xd1\x95\xa7\xd1[\x01\xf6\xb7\xfa\xb2\x96\xf3i\xa2Y\xe3\xbd\xb5U\x0fS\xbdIv\x97\xdfx\xe6R\x92\xad*\xfajS\xb7 \xab\xa0\x97\xe0!N_\xfb9ab\x17\xc5\x88T\xd1r\xde (\xc9n\xd0\x0cG7\xb2x;\x00\x12\x8fV\xe0I\x18|\xd2\xf8\xcf\xbat\x91\xf5\xf0aWO\x16\x00\xdd\x03\xf1\xc0\x97\x8aE}KC_G\x83\x7f\x07\xa5P|+)\x9e\xa5I\xb9 \xb1\nk\x08\x85\x8fC\xf4xO6\xf5\xa5\xdc\xae\xf0\x13\x12\xf1\x14\x03\xc3\xab\x00\xc0c\x8cBgE\xbe\xcaK8\x0f\xb4Z\xde\x0e#x\xa3\xc8\x95\xc2i\xce\xcf\xf6hQE<\xae\x88\xfbHK\\\x94\x8b@\xf8:B%\xc5\xb4\n.\xfd~\xfc?\xd6Y,\xc9\\\xb8M\\\xf1q\x15\xa9\xa6\xa1B\x1a$\x00\x9d`\xf1\xab\xe2\x11D\"Z\x9e\x89\x98\xdf\x97\xad\xaa\xb0z\xee\xc5cx\x16\xe4\xf9\xb7\xaf\xa7\xe7\xbf_\x1d\x9f\x9c\xfd\xbc\xbc\xba\xb8\x9c^\xfe\xbc\xe8\x95\x99\xe6\x82qv~zvz\xb1\x01\x00\xf1.\xf8\xb9\xce\xac\xdb\x94\x90\xfe\x9a<\xc8<\x88\x04\x02 \x8c\x84*@j\x08\x8f\xfb\xc2i\x12O\xaaL\xec\x17\xc5\xbces\x07\xf0q@\x94v\x1e\xab\xbf\xb6S\xbf\x8c\x15\x93!\\\xcc\x12Z\xe0b]k0^_P\xef\xf9\xc4R\x18\x8e\xa3xg\xc7P\xbc\xb3\xe3\x97\x88\x05\xdd\xf0\xc0V\x05\xb9K\xf2\xaaL\xd7\x9d\xa5n\xa4Kyq\x95\xca\xe6\xb2\xc0\xd1\x8d8\x1b\x13\x9e\x93\xde\x01\x12e\x93\xa0\xbb2\x90\xf62\x07\xe9\xf8\xd9\x8c\xb6h\x91\x90;\xd1\xdd$\xafhH\xed\xe4\x19\x08;\x01\xe9\xd5z\x85\xcfl\xeb\xff%\xed>\x1b\xf0\xd9\xf7\xe9\xf1\x8f\xe0g\x86M\x1eJ\xe70k\xec\x18\x0d\"\x14\xe7\xc7\x0d\x0b\x8c\xaa\xac$a_\x8d\xdfk\xf4\xc9\x8f\xef\x8a\xb4\xcd<\xf6\xaea\xc2\x88\xb1\x9a\x98\x05\xad;G\x0d\x19\x92M\x87\xf6\x90\xec\x9d1\xa4&i\x12\xe5Y\x99\xc4\xea\xf4\x81\x0f~\x93\xf0\xfb\x8bXt\xd1Z&e\xc9\x16\xa7\xb4Gy\x81b\x92\xe25\x89\x81)\x8a\x0e$\xd9\xe4k#\xc9\xde9\xf9R_-Z1g:\xc3\x15\x8a\xae\x1e\xa8\xd2\x13\x9b\xaaS\xa1\x9fH\x16\xe1UY\xa5\x1a%\xa9\xb7\xf8.\x16r\x8e\x88j\xcf\x03\x90m\x0c\xc3Q\xe0\xf0\xb6\xfc\x0d\xd5=\xe7\xab\x94r%-Y&\xda\xb7ju\x1d\x90\x12\xfb\xa9\xd8\xc8\xa8\x0f\xea\xb2\xc2 \xccux\x1d5\x93\xdaX*\x06\xd6w\x19\x00;[Z\xcb+YK(\xc9\xcb#\x07\xb8\xb0\xb4\xa7\xfaJ$\x9fs\xcf\x95\x8b\x1cS\x8a\xa3\x85\x18Mg\xb4\xb2\xb5Ip\xe4.\x84\xdd\\1r\x1e\xf3\xbd{0q\xbb\xc1b\x89\x91\xe4\\\x9e\xc9\x03\x0d\xf9Zf;\xd9I\xd6\x07W\xa3\x04*5\xa1\x05\"\x94\x8cH$'\xc0\xc6\x14\xd8rD\x12\xe8\x0co\x8b\x0bE\x8f\xef\x0c2\x92\x02\x0d\x06\x0e\xd5bx\xc9\x11Cm,\x87\x87\niH\x10\x96\xc0\x02\x13_\x02[\xc6\x08W\xad\xa7\x0d\x90=\xe2\xb0 x6\xf9\x12\xf8c\xa0\xaa\x18$O\xfd\xf8\xab\xadp\xe8\x19\"\xa2\x8c\x91C\xa1Pc\xac\x94W\x98\x0d\x01\xa0\nd%\x10\xd0R\xa0\xbf\x93!\xe4\xf3\x04\xd4\x05w\x07\x7f'C\x0c\xe2\xd5\x18\xd6\x05\xa1\xbf\x93!\xe0\x94\x8f\xb7\xb6\x95\xf60\x90\x8b\xafe\x0bd\xc1\xd7\xb2\x0f\xf2B\x1a\x81a!{\x0ed\xd3P\xfaG\xb1\xe4P\xba;\x19\x15c\xee\x91\xac\xc0\x9d{%\x10(\xaepQ\x12\xbb\xf7LA\x92A\x96\x0e\x01\xad\x1d\xea\x99\xf8\x87\xe0\xf3\x07\xc1\x97\x1a\xea)\x18\xd4#\x11\x10\x0c\xa8\xaf-D\xc3\x12\x02\xd1\x8b\xe5`\xc8F\x06\x01\xd2^\xa9]\x08\x96\x10\xf5Jy9\xcc\x82vAY\xachO\x08\xfdd\x102\x1e\xa8\x1f\xcb7\xe3c\xd0\x94\x04\xe1\xf5N\xb7D\xbd\x93\x0e\xd1Srd\x84\xcd\"`\xaa\x0eMB\x14\xd7\xc2\xee\x1cD\xb9\x9d\xdbF\n\xa2\x00\xedI6\x94c\xcbk\xe0n\xe6 \xcf)\xec\xca\xb95\x08\xff\x95\x88\xa3\x8b\xf2\xd5\xbav\xd3\xc4\x1f\x9a\xf9I\x88g3\xba\x86\x0c\xd8q\xbf\xf5\x0e\x1e~\x07g$D\x9e\x9d\xa3n\xac\x96\xa1\x92\xa40\x92;\x88\xbc\xbbv\xad)\xf1\xd3\xfd\xdb\x83k\xb2\xf7\x88\x1fi\xf5\xf1\x90>\x1c>\x1c\xa6\xe9\xdd\xe1C\xf4\xe5\x91\x96\xf7\x1f\x0e\xe2\xdb\x83_\xf1\xdd2\xc6\x8f\xd5\xfdc\x84\xe3x\xb1\xf8|\xbd\xac\xde/\xa3G\xf2\xde\x06\xd9\x7f\xda;\x12\xf5\xfa\x1c7\xc2\x19\" \xaf@>#\x08\xf3\xa5\xe7%\xfa\xcb\xfe\x97O\x9fg\xf8`\xf7p\xfe\xfep\xf7\xc3\xe1\x17\xbc\xfb\xf9#\xfe\xb4;'\x11\xde\x9f\xed\x1d\xee\x1f\x90=Q\x82^\xe9\xb5\xc8\xdd\x1b\xaf\xc9e\x1f\xae\xfb\xb7\x8fN.\xdf>\xa47\xf7$\xb523\x90@9\x16;\xeb\n{\xbd\x19z\xf8y\xef\xfd\xfc\xf3,\xda\xfd\xb8\xf7\xf1\xd3\xee\x072;\xdc\xfdr\xb8?\xdf=\xd8?\xd8\xff\xf8i?: Q\x8b\xa1b\xb0\x8dX*@\xec\xdf>8\x99\xfa\xa5\xbcM\xa3\xc5\xfb\xf2\xe1>\xfb\xf0\xe1\xd7\xe1\xde\xaf\xc7k\xfa\xb9(\x17w\xb7\xeby\xf1+*\\\xe4\xf0v\xca\x8c y\x96\xaek\x16\xa0\x84'\xee\x19\xd7\x078-s\x17~\xb2\xdb\x85U]\xbb\xf7\xcaAa\xca\x90\x0bs\xf7*\xb2\xb7\x1agr4Gi\x9e\xdf0\xedl\x81\"\x93}\xc4\x81\xa4\x0f\x0f_\x1f\x00\xd8\xacj\x0c%\x94\xd4<\xc5\xd7\xdcl\xe8\xb6\x01\xb9\xfa\x19'\xc1m&\x05\x10i\xb9d\x84PIj\xeb\xa2\xb6j\xe5*\xcfJk\x04\x87FG&\xb7?\x11\xf1f\xb2}\x88~\xfft/7\"\x9f<\x08\x84\xbc[\xf1\xb1\xa8o\x0d\xe6&^\xfe\x90c\xef\xbc\xcc\xe4 x\xb0O\x88H\xc5u\xa7\xd7\x80F$\xb25\x18D\xc2\xce\xfc^\x0d#C\xeb\xbc*\xa4k\xd2$\xd1\x8f\x95L\xa7:\x97\xdcAut\x9d\xf8?\xa3ZFd\x13\xf4GE\x8a\xf5D\x15\xd7=?\xfb\xda\x02&29\xeb\xe1U(\xad\xf1\xb3\x066\xd3\x0cU\x19yX\x91\x88yW\xa27\x93MNe\xb4 K\xdc\x14\x8b\xd3\xd9r;Z|\x80\xaep=\n4\xcac\x8b\xb6\x13\x1f\xb8j\x8c\xab]i\x92\xd1\xf7\x07\x1d\x069\xeas{p\x88 \xc5I\xfaB\x8a`\xb0\xcf\xaf\xaa\xc2\xd9\x16&h\x8cx\xee\xe8\xe0\xaf\xad{\xfe\x15.\xf0\x92PR\x188\xef\n\x83\xa9M\xafk\x06\xb6\xd6C_\x07q\x98[\xe8\xf3V\x86\xb8}Iv\x84V\x98\x9aa\x90L1$\x05\x89\x8f\x10-*\xd3@XY\xac\xb9\xa5\x1d:(\xbfz{\x80C\xfd>\xcd\xb3\x064\x0b\xff\xc6\xf6\xf16\xf0\xecl\xfe\xdch\xb22vr@a\x0d\xde\xfb\x8d\xbb\xe3c\x1c\xb8e\x86\xc4\xca\x829NK0\x0fZ\xb7/\x0d\xe2\xe1\xee\xee\x96\x90k\xf8\xb1@\x11\x0d\xf3}-\x9b\xcd!.\xdf\x10\xda\xdb\xeeP\x87x\xe9\x83\xf6\xa5\xbf\x8f\xfb\x8b,\x83UV\xac\x0f\xcf.N\xff\xeb\xf4\xfb\xc9\xd5\xd9E\xbf\xef.\xbf^\xfcu\xfa\xe5k\xcf\xafN\xbf\xff\xf5\xf5\xb2\xf7X_~\\^\x9d\xfdqz\xf2\xbd\xdfgg\x7f\x7f\xef\x8b\xdf\xc9\xb7o\xa7\x7f\x9e\x9e\\}\xed\xf7\xd9\xd9\xff\xfb~\xfa\xcf\x1f\xf1\x82<\xd6G\xe7\x17g\x7f}\xfd~\xf2\xfdK\xcf\xc1\xbe\x9c}\xbf\xba8\xfb\xf3\xcf\xbe\xb4\xfdu\xf2\xe7\xe9\x1f\x80\x89\xd6u|\x06-\xaf\xb8\xb1b?\xbeU\x9a\xed\x8a\x1f\xb4e\xb3\xeefi#Z.PNV$\x97\x87\x84x\xa4\xbar\x85\x08\x1b\xf5M\x1b4\xf7N2>s\xd7\x9c<\xba\x87\xc4%\xdf\xfb\xbc\xef\xfa\xda\xdf!\\\x18\xb7\xfc|\xe4hK\"0\xb0O\x9f\xc1\x95\xb7,x\xbd8\xc6e\x85w\x9e\xd5T\x1493\xaf!}1\xa2\x0c\x93k\x9c\x84\x1bu\x8cx\xac\x8a\xd8\xe8\xf0up\xa2\x99\xa4\n\xa31\xc29\xc7\xf0\x92\xce\xca*{\x10\x12\xb1\" \xc9V\xa1\x85\xd0\x14\x03\xe7\xf3\xd2\xed\xac\xa0]\x0c\x1e <~\xe8\x9a\xaf\xbb\xeb\xe8qol>4\x1b\xd5V>l\xf6EQ\xfc\x16A\xc1\xb5ixS.).R\\\xa5\xa6\xc2\x90\x1a\xac\xe6\xfe\xc89\xaen\x1d\xb1f\xcd\xa3~\x1d\xda\x0el\xc2\xea\xe5bQVV\x99U\x8e\xf9\x1b\x19\xe9\x82)\xad\xb2\xc9\x92\x124\xc7k~ \x12\x008!L^\x177$E\x13\xe1B\x97R\xbe)\xa5W\x16 \xb3D\x98\x9c\xab\x89#\xe9C<\xd2\xeds\xcde\xeeuU\xe6\xf9r\x11\x9b\xd6\x98d\x87\xcf\xeb\xdfR\xec\xe3<\xd7[[\xad\xf4\xc6%\x9c\xd1\xda\x1di`?\xea\x86L K\x0b\xd0\xabZ\x89\xcciF\xf2\xd4\x1b\xa9\x8eT\xe0\x11\xbf\xb2!\x05\x9e\xe4\xe2t\xceD\xad\xd2A\xff\xc9\xbd\xca\x02A\x0154\xf7\x85\xee\xcf\xa5htO\x06\x8cm\x97|T\xde\xc3\x81\xf0\"\xd4eix\xdf\x85\xcd\x8b\x922\xcf 7q\x18\xdaR\x07x\x002\x02\xf8**\x0b\xa2oH\x02\x88*Wi *\x19F\x89\x05\xa8\xf1\xc3\xc5\n\xea\xf9}+\x8d\x92q\xfe \xea\xf2\x8a;\xbb\x1e\xd3Ml1\xd1\xbct\xa6\x83\xeb i\x8e\xc7\x92k\xb7LE,?\xb6\xa1(\x90a\xa8\x81\x89\x7f\x84\x93\x0b\xb7DPP\xb89\x10D\xa1rD1\x0f4\x88\x1f8\x98u\nbC_\nq,\xb7t,\xdaF\x98\xe2\xbe\xb4m\x94%\xeaX\x00~\x81\x1a/\xbb\x00\xc3\xbd\x0b-\"Z=p\xba%\x84\x1cW([\x16\xb4\xd12\n\xa09\xdf\xca\xb6\x8e\xd4J\x08^\xf0\xa0\xf6}\x12LnC+#<9S \xe2\x1d\n\x0b\xc6\x12\xe3\x7f#\x08\x89\xad\xf2\xa6\x85\xaa\xad\x11\xf4\xeb\x008\xa7\x9a\x84s\xeb \x14\x04\xac\x02\xc1\xf8\x0bc\x84\xa50\x88\xd4\x11\x94\x86g\xb5\xb4\x89\xf6\xa7F\x86\xbc\x19\xdbJQ\x92\xd8\xf8X\x1eU\x0b\xf1\x11\x10\x8a\xa7X\x8b\x074\xbb\xc0\xad\x0e\x8fk\x18w\xdc>\xcbO\xf7\x01n\x8a\xcb'\xeer<\xa0\x061\xae\xf2\xf2\x92\xf1\xbe\x8d\x87\xd4\xa11\xce\x9e\xddl\xe8\x13uj\xa9\x078\xc7\xf2\xc7c\xc41\xc0\"\x19\xa0\x1ep\xf1\x8c\x1b\xcd0 \x9e\xa1'#a1\x0d\x1bD5\x0c\x8fk\x18\x1a\xd904\xb6apt\xc3\xa0\xf8\x86\xc1\x11\x0e\x03c\x1c\x86G9\x0c\x8fs\x18\x18\xe9\xb0i\xacC? /\x1eo\xbc\x03\xe0[\xf7\x97C#\x1e\x1e-\xe6\xe1\xb1\xa3\x1e\x1e#\xeeag\"\x1f\x9e$\xf6\xe1\x89\xa2\x1fv*\xfe\xe1yD@\xec`\x0c\xc4\xd3FA\xc0\xe3 \xa0\xf7e\xfa\xd7#\xc6B\xc0m\xc1\x91\xe2!\x06ED@\xb1\xd4w\x83\xd2YBxO4\x91B\xc4\xff s\xcdn\n\x9e\xba\x15\x0c\xbdFq\xb4F*\x8f\x0c\xa3\x8dg\xd5\xd0\xb2a\x9fy!/\xef\x0da\xed\xef\xa4\xb9\xbe\xc7\xf0\xcb\x12\x9c\xe7k\xd1\xd0?X*Y~4\x02\xb9[8\xd3\xaa\x03\x88HR\xceH..\xcf\x99\x86e*=\xc93R4\xe7[\x1e\xd9\x10\x84\xd7]\xa2\xd1C-^\xa6Y\x90;}\xe8\xf9\xc2\x8f\xd3)\x9a\xac\xf7\xd0r\x91\xea\x7f\xd3lNj\x8a\xe7\x8bzO\xbb\xc3D\xe1\xc5pcR\x910\x95\xcb\xd6y\xd3\xd2O\x06\xf8\xc4\x0c=/\x0b\xcf@z\xcd\x88\x88 B\xe0\x02B\xc6\"b`\xf7\x19[b\xa0\xc5\x1e\x93\xf1F\xe4\x80}\xc2$\xa8\xbc\xfb'\x05\xad\xd6\xbca\x9e\xc4\x17D\xd3d=\"E0)\x80\xe4 \xda\xe3'\x10&\x87\\=Q\x01\x87t\xe0W\xf0gr\x05>\x9b)\xccqM\x15\xd2 \xc2vt\x1ey\xf8\\6\xe2DJ\x91\x01#\xd6W=\xcb~\x8cZZ\x1f?\xc4\xe0\x829\xc3lei\xbb\xb4\xe4\x9c\xe0\x0c\xaf\x08\x9fT\xdc\x9a\x07\xf8\x8f\xb8\x0c'8\x99\xc9\x19\x0f~\xe0\xad\x00f?[Y\x11&\xdd\x12\x0fG\x04^l\xa3H\x01\x95\x95\xc5\x81\xa0\x17\x91U\xf8\xd8\x03\xc3\xf0\x84\xa9\xb8oL\xbb\xd6(\xc1\x0bae:\xa3p\xd8\x0e\x0c\x82\xd2\xeb\xbcDs|K\xe4RWYsL]\xc9\x8dM\xd6\xe8\x8eT\x91\x19\xc3\xa9\xef\x07P\xa5{\xa9\xf2\xa0U\xbc\x94aKi\xeb\x02\xdf\xe0\xac\xa8\xa9q:\xf1\xc2\xb3]\xe9\xec+\\$$\x10Mve\xb8Qy\x0e\xff\x0c\xaf\x881\x92\xe40\x8f\x11\xa3\xea\x88\x99\x11\xbfX\xc8\x8aU\x99\xaf\xec\x02\x00\xed\xe7\xfb\x19;I\xff-9]\x11\x99L-B\xbb.\xac\x88`\x84eD\x99UG\xa2\xfd4\xf1eX\xb1T\xe4m_\x9a\x95&\xe6\xe5\xca\xd7\x16\xb9\xb9\xb4\x19\xa5UR\x0b\xdc\xb0\x08\x07g\x8cC\xd8\x1c\x04\xd8P\x10\xfb\xe9\xf1\xaf\xb0\xda\x81XV\x11\x08w\x00\x83\x9c\xd9Hh\x825\x17\xb1\xc8\x84\xad\xd2\x14\x11r\x1d4\x87\x86'\x98\xa0@\\\x81\x04/\xed\x08g\xbaAO\xc6\x1b`\xff\nj\x15\x19\x81qH\xfe\xf3y\xf0\xc8@\xb6qH\x18\xef$\x9f\x82\xf0\xcav\x05\x9e8\x9f\xc2\x81\x1b`\xe6\x0c\xa1z\x84\xd8\x8d~\xbbf\xa4\x850\x84\xd6\x8d\x827\xbc\x0b%@\xb2\n\x12\x1c\xb3\xdf\x92\x05\x14\x8d\xdd\x93\x162\x93 ]\x89\x80\xfa\x12!H\xe8\xb5x\x80K\x03\xc1\xe5\x04\xdaN0\xb6x\xf4L\xc5u'z\x1c\xea\x00\xc7\x99\x16\xd2\xc35\xa9 \x0c\xc8'\x986E\xbb\xc7\xab1t+B/Mi\xe1\x94\x8f\xbcH\x86Q\xbe\xa1>A\xee%\xe4&\xbf\xd3\x90h\x8c\xb3\x96\x13\xe8x'.w\x94\xda\x96\x0f`m\x9aF\xb05\x80\"\x04\xcau\xd4\xa31_\xfcB\x0bu\\\x17Q\xe5\xd4\x99\xf6\xb8\x82\xda\x1dNm\xac\x98\xda\x00{\xf0)\xe9\xd5\xf3l\x87x\xd6E\x1c\x01\x1a\xed9\xbejE\xa8\x0f\xe5eLq\x01Y7\x9c'\x10\xa5\x15\x04\xb7 \xf5#-\x9c\xe1\xd4o\xa8\xb8\x00\xcb\xcb\xc5\n\x08\xbe\xd2\xe9\xe8\xef\x8e\xa7}W[h\x8f'a\x07\xfa\xe3\xa9\xd1\xbd\x0d\xf2\xb8\xff\xb5;\xb7bF\x1f7d_ \xe3[g#i\xdbG\x0f\xa78hf\xb5\x89o\x96\x95N\x11\xfa\x8b\xd7\x0b\x90\xd9\xe2AX2\xa4\xdeQ\xc3\xe2$\xafKt[\x94w\x05/\x1a\x8b\xbe1\x0b&\x18g\xf1\x14>_\x18\xc7\x9a\x8c\x01\xb5r\xd5\x85\x85J\x15h\xa5\x03Dd\x9e\xe65z\xcd\x8bMft\x86\xa6YNIERt\xbbR\xaa\x99\x92\n\xd3\xb2\xf2\xc7{\xc9`\xf2 \xbb@\x04J@JPX&\xab\xa2LLu\xb0\xe6\x02jj\x16[\xd7H%\x0f\xb0+\xa7S\x19\xcaf\xb7\xae\x842+\xba(F\xf3\xa4\x00\xf3\x1c\x80K\x11\x81\xa7\x01\xa1\xce\xd5x'*\x91O\x87\xda\xb2Qhrb\x83\xbf\x9b\xe1z6>\xa9T6\xa2\xe7D\x14Fq\x15\xb5\xd6\xa2\xf9\x0f1\xa1\x88\x06\xe1\x05\x98\x02,\"\xce\x1c\xd7\xcf\x1a\xf9\xd7l`^\xee9\x1c~\xc4\x1e\x1da\xc6\xdb\x06\xd8\xb3\x99\x94\xf3yY\xf0\xf1\xc2a\x9d\xa2}\xd9\x93\xb0C\x0c-\"\xcc\x14\x19\xcdu'-!\xb7\xc2\xea\xd1E\xa3\xd1k\x01\xf6\xb7\xe6\x96\x95\xf3\xe9@\xb3&x\xdd\xaa\x1e&z\xb3bU\xde\x06\xd6RV,\x96\xf4\xd9\xe6\\AvA\xaf\x89\x87Y\x90\xf6\xf3\x9dM\xbb\xa8\"\xa4\xaa\x8d\xf3.EYq\x8b&8\xb9\x95\xf5\xdc\x01\x90x\x98\x01\xcf\x9e\xe0\x8b&\xec\xa4\xd2\x85\xf4\xe3^\xaa\x9e,\x00\x9a\x07\xe2\x81o\x15\x87\xf8\x96\x8a\xbe \xe3\xfe\x06\xca}\xf8ZS<\xc9\xb3zFR\x15\x8f\x10\x8b\xfb\x86\xc8\xf1\x9el\xeaK\xb9[\xe0g$\xe1\xb9\x01\x86U\x01\x80\xc7\x18\x85\xce\xabrQ\xd6p\x1eh\xb1\xbc\x1dF\xf0\x8e\x9d\x0b\x85\xd3\x94;\xe5h\xb5Lx@\x10\xb7\x91\xe6\xb8\xaag\x91\xb8s\x84j\x8a\xe92\xba\xf5\xfb\xf1\xffT\xa7\x9fdSa6q\xc1\xc7E\xa4Z\x86\ni\xd0\x04\xe8\xcc\x88\x9f\xbcA\x87\x0csgS\xcc/\xba\x16\xcb\xb8x\xee\xc5cx\xfa\xe2\xc5\xd7/g\x17\x7f\\\x9f~?\xffqu}yur\xf5\xe3\xb2WJ\x99\x0f\xc6\xf9\xc5\xd9\xf9\xd9\xe5\x06\x00\xc4\xbb\xe8\xe7:%nSB\xfaK\xf2(\xf3 3\x10\x01adB\x01r:x\xc0\x16\xce\xb3\xf4`Y\x88\xf3\xa2X\xb7l\xed\x00>\x8eL\xa5\x9b\xc7\xea\xaf\xed\x9c-c\xc7\x14\x08W\x93\x8cV\xb8Z7\x12\x8c\x17\x06\xd4g>\xb1\x15\x86\xe3(\xde\xb91\x14\xef\xdc\xf8ebC[\x16\xd8\xa2\"\xab\xac\\\xd6\xf9\xba\xb3\xd5\x8d<\xa7 \xaeR\xd8\\U8\xb9\x15N-a9\xe9\x13 Q: z*\x03I/s\x90\x8e\x9d\xcdhKf\x19Y\x89\xbe$\xe5\x92\xc6\xc4NY\x80\xb0\x13\x90\x9e\xadU\xf8\xc4\xba\xfe\xbf\xa5\x9e\xa7\xaa\x88\xa9`'\xacr\x82x\xc4\x17\x07\xda\x0b\xd0vC=\x81\x06\xbd\xe40\x15]j 6n\x8c\xe6@\x08\x00\xd6\xa4(I\xde\xc8\xad\x9c\x157\xaa\xd5\xcd\xde\x14g\xf9\xb2\x02\x1c!\x11S\xc3\x0bR\xa4\xa0\x89\xec3\xeb}\x94\xee\xe5\x8f?\x07i\xa9\xee\xd7\xe7'\x97\xb0,w\xfb\xb3\xcb\xff9=\x1f\xf0\xd9\xb7\x93\xd3?\xa3\x9f\x19:y(\x9d\xc3\xb4\xb1g4\xc8\xa4x?\xb640Z\x165\x89\xdbj\xfcB\xa2Ob{wJ\xdb\xccc\xef,\x15F\x8c\xdd\xc44h\xd3\xf3i\xc8\x90l9\xb4\x87d\xef\x8c!5I\x07IY\xd4Y\xaa\xbc\x0f|\xf0\xdb\x8c\xdfF\xa4\xa2\xff\xd5<\xabk\xb69\xa5>*+\x94\x92\x1c\xafI\n\xcc-\xf4 \xc9\x16_\x1bI\xf6\xce\xcb\x97\xe6N\xd0\x899\x93\x19\xbe\x18r\xf5@\x85\x9e8T\x9d \xf9D\x8a\x04/\xeae\xaeQ\x92r\x8b\x9fb!~D\xd4X\x1e\x804a\x18\x8e\x02\x87\xd7\xf5o\xa8i\xfe\xbf\xcc)\x17\xd2\x92e\xa2\x89\xae\x16\xd7\x91Yb?\x15\x07\x19\xf5AS\x0f8\x83\x99\x0e\xcf\xa3\xd8Q\x1bK\xc5\xc0\xe6.\x03\xa0gkg]$g\xed#\xd5&\xcf\x0d(>\xdb'\xfaJ\xa4\x9cr\xcb\x95O9\xa6\x14'31\x9aNEe{\x93\xe0\xc4_\xc1\xda\xde1r\x1d\xf3\xb3{4\xe3\xdab\xb1\xc4Hr\xae,\xa4CC\xbe\x96iJn\x92\xb5\xe3j\x94\x08#\x1bZ$\xb4\xc8\x08!\xf2\x02\xb4\x96\xc0\x96C\x89@>\xbc-n\x14=\xbe7:HNh4\xe2\xa7\x99\x86]\x0e\xf5ic9<\xc6GC\x82\xb0\x04\x16Q\xb8\x0bl\x19#\xce\xb4Y6@\xf6\x08gA\xd47\xb9\x0b\xfc1PU\x0c\x92^?\xfej+\x1cz\x82P&c\xe4X\x0c\xd3\x18;\xe5\x19\xa61\x00\xa8\x02i \x04\xd4\x14\xe8%\x8bA>\x8f@]\xf4t\xf0\x92\xc50\x88Wch\x17\x84^\xb2\x18\xe0\x94\x8f\xbcH\x86Q\xbea0(\xea\x93\xc5 \xe5\xf2\x989\x0c\x0e\x90\xe3e0H\xfb\xfa1\xf3\x17lzF\xb0,\x80\xa2\x03\xcao\xd4\xc11r: \xef\x83~\x99\x0b\xad\xc9\x8e\xab\xa4]\xe1\xd1\xc6\x8a\xc8\x06\x07\xe6\xd0V\x02\xcf\xb7\xcf\xadm\xe5+\x0c\xe4\xe2s9\x029\xf0u\x9c\x83\x82\x90F`XL\x9f\x03\xd94\x94\xfeQ49\x94\xeeN*\xc4\x98g$'p\xefY \x04\x8a\x0b\\\x94\xa5\xfe3S\x94d\x90\xa6C@m\x87zf\xec!\xf8\xfaA\xf0\xad\x86zN\x0c\xea\x91\xc1\x07\x06\xd4W\x17\xa2a\x99|hg9\x18\xd3\x91Q\x80\xb4WN\x16\x82e2=S^\x0e\xd3\xa0]P\x0e-\xda\x13B\xbf9\x88)\x0f\xd4\x8f\xe5\x9b\xf11\xaaJ\xa2\xf0z\xe7I\xa2\xde\xd9\x82\xe8192\xc2a\x11\xb0T\x87f\x0f\x8aka\x7f\xf2\xa0<\xcem#w\xd0\x89\x91\x18/\x90O\xa8~ Q\xd5\xca\xb8v\xb1Q\xa7'\xbe\xce\xa6\xaa\x9f3I\x7f\xeb&!\xf2\xbft\x97L\xebn\x89\xffJ\x84\xe4%\xe5b\xddX|\xe2\x0fv\xaa\x93@\xca\x97\xf7\x181 \xc2\x86@\xd8o\x1a]\xd9\xf1Y@\xc6 (\xc1\x05\"\x19/\xc2=!\x08\xf3E\xbc\x87\xc8\x9b\x1b\xdf\x96\xfc|\xf8\xf9\xf7O\x13\xfcn\xffh\xfa\xfeh\xff\xc3\xd1g\xbc\xff\xe9#\xfe}\x7fJ\x12|8y{t\xf8\x8e\xbc\x15U\xd8\x95\x84H\xfc\xed\xe1\xa4R\x97\x03\x86p=\xfc\xf5pC\xde>\xe0\x07\xba\xfcxD\xef\x8f\xee\x8f\xf2|ut\x9f|~\xa0\xf5\xaf\xfb\xfc\xf6\x8e\xe4.\x8cc\xa9\x88c\xb1\xb3)2\xd7\x9b\xa1G\x9f\xde\xbe\x9f~\x9a$\xfb\x1f\xdf~\xfc}\xff\x03\x99\x1c\xed\x7f>:\x9c\xee\xbf;|w\xf8\xf1\xf7\xc3\xe4\x1dIZ\x0c\x15\x83m\xc4R\x01\xe2\xf0\xd7\xbd\x97\xa9\x9f\xeb_y2{_\xdf\xdf\x15\x1f>\xfc@wz\x03B9)S\x87\x88\x13\x1f\xf8J\x98\xab\xb3sV\xd0\xf7\xef:\x0c\xf2\x94\xff\x0e\xe0\x90\x12\x8a\xb3|GJu\xb0\xcf\xaf\x97\x95\xb7\xebLT\xc1\xf1\x0c\xd7\xc1_;=\x13\x0b\\\xe19\xa1\xa42p\xde\x17I\xbd\xda\xac\xf1\xad\xc0\xd6\x8e\xe8k|\x0f3\xb9C\x96\xe0\x10\x93:+\x8e\xd1\x02S3X\x93\x89\x86\xac\"\xe91\xa2\xd5\xd2T\x0dN\x16knic\x19\xca\xaf\xde\xd6\xf5P\x9bZ\xf3\xcc\x82\xe6\xe0\xdf\xd8\xf6\xf3\x06V\xb3\xcbVfs\xf5\x8b\xc9Q\xe7dMq^\x83g\xcb0\x83\x81\xd35\xd8p\x1e\xd7\\\x1e\x9f\x07\xad\xcb\"\x00\x0f\xfa\xdb\xce\x86\x95\xec\x9c\xe5\xae\xc5<\"\x9d\x96%\x0c\xa4t\xa8\xf5l\xd8\xc9\x16<\xb8\xf98\x84\xf0\xb6i\xd5\xa6\\\xda\xb1=i\xefc@\x1b\xa6\xf2\x0e\xd0\xdd\xb2\x86\x81t\x0f\xb4\xa1\x1bk\xb9M\xf9\xd6\xe9l\x19\xc4@:\x07\x99\xd1\x86\xc1l\x01\xf3\x18\xcf\x9bSI\xf1\x8de\x93\xfcKB;`2\x83\x14\xb8H\xc8\xc1\x9cP\x9cb\x8a\x0fV\x87\x07|\xfb\xd5\x078\x97\xf6\xd5\x0d\xd1\xb6s\xbd\x9c\xcfq\xb5>\x16\x8d2\xea\x93\xa2\xa4\x9a\xe2D\x1c$y56\xd1\x0fF|\xcb\xd6oE\xf4\xcejo\xce\xf6\xf3\xa5\xac\xe7\xa5\x7f\xc0\xfa\xc92\xc7`\xacm\xb4l\xddM\xfc\xd2\xf7@\xb1\xdb)\xeb[q\xef\xc3s\xc4\x89\x9a\x1b\x9c\xe7\xe5\x9d\xcc\xf6\x979wa\x80\x01\xb7\x19\x12\xbdu\x9fm\"?\xb0\xd4\x1cx=\xc8\x1f\x8b\xe9\xc6/-\xf5\x1d\x9f\xf4a$<=~`w\xf3v\xbf\xe5\x97\x96\xfa\xce\x8f^Z\xea\x9b\xcfKK}\xc7\x86yi\xa9\xdf{\x8c\x97\x96\xfa/-\xf5_Z\xea\xbf\xb4\xd4\xff\xff[K\xfd>\xfa\xef\x8a;\xd8T{}\xbd\xdc\x11-\x17('+\x92\xcb\x03\x08$nO\xf9\xf0\x84\xb5\xfb\xa6\x0d\x9c\x17\\g\xee\xe1-j\xf7\xf7Y\x1b'\x9ae\xaat\x0cc\x02\xe7\x1f^\xd2YYe\x0fBrV$!\xd9*\xbc8\x9a\x82\xa9|\x9e\xba\xd5\xa7\xb5\xa3\xc3\x0b\x86\xdf_^\xf3\xf5x\x0d8Xn\x83#\xcdf\xb6\x15\x16[\x13\xa2\x80p\x8b\xb0\xc8\xaa5\xbc;\x97\x14\x17)\xaeRS\xc9H\xbd'\x1a'\xcfqu\x1bi\xdb\xad~\x1f\xde,l\x02\xeb\xe5bQVVa:\x8e\xff\x1by\xeb\x86)\xad\xb2\xc9\x92\x124\x0f\xaeL\xa4\xef\xe6\x92\x19.nH\x8a&k\xce\x0d\xa9\x1b\x9a\xf2Ce\x910K\x06\xc5\xbc!\xc4\x11D\xab\x1e\xe9\xa8\xba\xe6\x12\xfc\xba*\xf3|\xb9\x88/\x81\xb8\xae\xe8\xb3\x06\xfe\x96\xaa\x04\xe7\xb9\x16\x0ej\x7f\xc8+\xe6\"E\x19\xad\xb5\x90\x08\x82\x93m(\x90\x12\xbc\x16\xa8W\xb5\x12\xbf\xd3\x8c\xe4i\xa0\xcd4R\xd7\xa58\xafKD\n<\xc9\x85\xc7\x80 n\xa5\xdb\xfe\x93VK\xe5\x02\x13p\xc3\xeb\xa4hz\x99HJ}S\x03e\xa0h5\xad\x9bq\xa3\xaa,\xa9Q\xeb\x93\xdb\xd8()\xf3\x9cpS*\xe4%\xd17Fw\x85Xue\xc1k\xb7\xf3\x1e\xd7At\x95\xebw\x94\xccb\x0bX\xe3E\xdc\xb4tQP\x14\x02\x1cu\x10\x17\xdd\xe3\xbb\xc0-\xa6\x9a\x17\xf8t\x83\xfa\x13z\x06\xe2iM[\xa4&\"5ZH\xa2\xc1)\xbe\n\x10\x80\x1f\xe2\x1f\xb1\xcc\x90\x1d\xe0I\x83(\n\xd5\x94\x18\x8d7\xb1\xf4! K\xfa\xd3\x1aM\x15\x1a\x93\xca\x91&\xbe?\x95\x1b\xa6\xff8\x96EH\x8eCrj\xa14t!F$\xba\x17R\xb7J\x84\xe3\xe6\xe9Q\xe4; _\x16\xb8\x12\xb6&\x02\"\xc9\xb1\x91\x1b2\xd4\xbe\x94\x83\xaa\x0cx:\xec\x8e0h$\xe5\x11M/\xb4\x075\xfe7\x92H\xd9:\x9fZ(\xdbZE\xbf\x0e\x02l\x958\xe8\xcf\xb9'S2\xb0\xa4\xd4\xed,\x97\x91\x16\xc8@\xa2GQ<\x9e5\xe4\"\xdfB3\xde\x9421\x0f\x87n\x98]\x03Y\xf8\xab\x18E\xba\xbddbF\x1b\xa9\xe7\xb9%t\xbe\xa4\xb7\xa8g,\"\x07\xc5\xe5y`A\xd2[\xc4\xb3\xc0\xfc\xca\x91\xa1\xb6\x01\xee\x0d\x14\xed\x1cPN\x0b\xf3oM\xba\x81J\x8c \xe3\xef\x96YQ\xf3*n\\\xdd\x92\xb5_\xcc\x81\x84\x1cH\x07\xc2\x98\x87\x04Bb\xc2\x85\x17\xb2\"tY\xc9L\xf1s|CT\x92\xd1\x9b\x82\xdc\xd3k\xf6cZ\x06\xa0M\xc8MV\x84\x9cM<6S\xd5&g0\xd9,\x114/k\x8a\xc8t\x9a%\x19)h\xbe~\x83\xce\x8a\\zfB\xf1.\xe5t*\xee\xaf\x19\x1d\xa1q\xebY\xb9\xccS4!!?\xa1\x806\xd2\xfc,\xb3\x82~\xfc0\xc2\x0cI\x1a\xf9$\x15\xcb9\xbf\xda\x96\xef\x84/\x19\x17\x8c.\xd1(fF\n\xce\n?\xb8\xacF\xcb\x02\xafp\x96\xe3IN\x82\x9e\xc1S>j\xce\xbb}\xa8\xb9ac\x16h\xc9[\x02\xdc\x92a\x13%g#4tx\xa2\xf2l\x9e\xed\xdc\x165\xa6\xf7G\x8b\xfc\xe8\xe3|y\xf7v\xf5yM\xf3\x87\xf7\xbf\x96\xef\x7f\xde\x7f\x9c\x9bK\xe4\x9fk%\x1b\xf78\x87\x9a\xac\x99B\x95\xb8m\xe7V\x8b\xb3+U\xf2\xc2\x8c\x7f\xbd$\xfa\xb5]\x1a\x98\xc7J\x1f\xf0r1f\x19\x12\xf97\xb5\xf8\x8dC\xb8\xb2\xc4L|\x0e\xf8\xb1\xc9\x81\x92bC\xb7\xc6\x83\xb5H\xe4\xafv\xbb\xd8\xc3\xb5EZ\xc4E\xe4\xf8B\xe9V\xeb^:\x16\xe0\xb4\x81\xcb'\x82.\x8aAG\xd1\x11P{\x94`\xdc\x14\xe0l\x05p4\xa1\xc6;\xb2\x14\xa5\x1f\x9a\xaa\xd2Ml\xbe\xcd\xf8HN\x959q\xde1\xad\xd9\xfd/~\xe1\x9f;c\xdctX{df\xd5\x13\x9d\x03\x04\x9a\x07\xf6\xc4Z\xa9\x00\xe7\x00u\xb7\xd9w<7\xd2\xf4\xe9,+\xbc\xe5j\xdb_o\x05\x1f\xe3\xbf\xca\x93\x1a\xc7\xea\x8eL\xea\x8c\x06\xbd\x07\xe2\x19\x86\xd5\x8f\x8b?u-.\xb2\"\x85\xf0!\xb2%\x12B*K\xcab\x9b\x18\x95S\x84\x0b>\x8a\xf7\xfa\xd7L\x10\n-\xb0\x90\xbbG=\xd1\xcc+\x10%\xf6l\xeb\xb4*i\xea\x9a\x19v\xfdv\x9bLs\xb8\xce\x8aU\x99\xafHTX=\x06\xad\x90\xaa\x12\x83\xeaI\x0c\xa9$\xd1\xbf\x86D\xff\xea\x11\x03\xeaF\xf4\xac\x181\xa0VD\xef*\x11C\xeaC\x0c\xa9\x0c\xd1\xbb&\xc4\xf0j\x10\xf1;\xae\xe6\xf1V\x80\xf0\xbc\x8f\xa5\xb1\xf5\xad\xfd\xf0\x08U\x1f\x1e\xaf\xde\xc3v+=\xec@\x8d\x87G\xae\xee\xf0\xe8u\x1dv\xa4\xa2\xc3\xae\xd7r\xd8\xa9*\x0eOW\xbf!v\xb9+\x1e^\x11\xe1\x8a-\x11\x15\xd0\x9cfS\x9e\xf8Iy%\x84Zg\xd3\xb2\xc3G\x10\x94\x9e\xa49^\xb3)\xf7[=\x00\xccNDV\xbb\\\xb7\x19QU\x07Zy\xb9\x0c)i\x9a\xbd\xc6E(\x0c\x85\xceHV\x99y\xe0\x9c:\xdf\xec\xb5\x1b\x1d\xed\x84\xbd\n<\xb7\xc2\x15l\xc3\xe4\xc4\xdd\xc8.K\x9b\xc2y\\\n\x07\x80\x89Y\x98\xe0Z\xd5ch\x1f\x90=a\xbf\x91\xc5\xe0\xf0\xf5\xa9Xd\x15!\xcf\x8b$\xcae\xb2\xe7\x01S\x91\xba\\V \xa9\xf7\x1a\xdd_\xefq/WR\x16u\x96J\xcf\x11*\x97t\xb1\xa4u\x90\xdc`\xb5\x0f\xdbA\xe3r\xcd\x94\x85\xac\xb9\xe0rU\xca\xabs\x17\xb3\xecL\x08\x7f|>l\x01t\xa1\x0d\xcb\xaa\xdb \xa7.\xea\x94\x88;$,*b\x9bt\x0c\xaf\x10\x8c\xb9h\xb4,:\xa7\xf3\xd7w\xf2\xb4\xe74\x96A\xf7\xe4L\xd90s\x0e\x94\x08\x15L\x1f\xdae\xdex2\xa8Z\xaf\x03\xe0\x86\xe4\xca\x19?\ng\xca\x81\xf83\x88\xf4\x11r\xe4\xfa\x92:\xc2R\x18D\xeaF\x99q\xc1\xd5\xd2&\xda\xbe\x8c\xe9\xd2\x1a2b\xb6\x15cU\xc7o\x0e\xa2c \xc08\xa8\xd7\xfd\x01p\xbe\x81\x9b\x7f\xf4[\x04\xb0\xd7;fW\x89\xe7\x0f\xc3\xc3m*}\x8d\x1c\xa0\xb0Y\x8b\xbbQ\xceFK\x19C&\x14\x81.\"\xc0\x93\x896\xbe\x8c\x00O\x0c\xda\x08\xabAW\x12=.%\x86\xe36\xecb\x02z5\xb1\x19^\xf1\xeb\x89\xceg=6\xce\xac\xcc\xd3Z\xa6\xe7\xda\xb7u\xfc\xcc\x9a\xd5h\x86\x8b4\\\xaf\x8b\x96\xcd\xd9T\x15\x15\xaci\xb5L\xe8\xb2\n\x14_\x03\xdf\xaa\xc0\xce\xa9\x80\x93*x\"\xa4\x00:q\x97\x03\xe7\x9c)\xef\x8a\xba%\x033\x1a\x90 \xf0\x8b\x95\xc7'\x17r\xc12\xf0\x8ae\xd8%\xcb\x90k\x96!\x17-\x83\xaeZz_\xb6\x0c\xban\x19p\xe12\xec\xcae\xd8\xa5\xcb\x80k\x97M.^\xfa \xb8\xfe\x97/\x11p\x83Jo?\xc2\x05\xccc^\xc1l\xfb\x12f'\xaea\x1e\xfd\"\xe6 \xaebv\xe62f\xf7\xafcv\xecB\xe6)\xafd\xa0\xa7\xb2Q\xafez\\\xcc@\xf1\xc3\xd6\xe5\xccZbd]\xd0L\x97y>\xcd\xf2\\Fq\x07\xc1\xd5\xd9\x0doA\x8d\x11\xadpQ\x8bE\xb5\x95#\xa8\xba\x05x\n\x0f@\x84\xa7\xdc8nle\xac\"]\xf5\x02\xe7\xecm\xb6g\x04\x18\x84o3\\\xcfF`\x83\xa4\x8f\x11\xc0 Z\xd7I\x93\xac\xc0\xd5\x1a\xbdn\xeaLgEMq\x91\x04\xb6i\x92\xe3\xba\x0e\xb4\x8c\x17O?\xe4\xcc\x86\x96\x1c\xfe\x81\x92\xc4\x16\xab\x10\xb9'\xc9\x92\xe2\x89\xb7\x04||2\xbfHX\x9b\xdfY\x8d|k\x15\xb9\xb7\x82\x9b\x87u\xf0R\xcb}\x95\xe8\x05\x16\xb8\xef\xea^\xc3\x8eRN\xd2 t\xd8\xdd\x97\xeb\xf6\xcbM\xbf\xef\x08\x0fp\x89A\xdcam\x9aF\xd89@\xe9\x06\xe5:r`\xe9\xbd\x14\x8b\x8a.\xd4\xf7f\xcc1\xed\xb1\xeb\xb1]\xe2\xd4\x867e]\x80=\xf8d\xbf\x18\xa9\x96\xe0c\xf0\xac\x8b\xb8\xe4_\x0f0\x8eb\xc7\x83y\xf9\x04\xb5'\xbb\x08\xc4\xae\xd6\x82\xe06\xa1~\xa4\x853\x9c\xfa\x8dn\xdb@\xcb\xcb\xc5\n\x08\xbeN\x93\xc1_\xb22(\x1d[R\xb1HQ]\xce \"\xf7\xb4\xc2\xc6\xf5\x930\x152G\xd5\xa18\xc2\x16\xe1\xa2\x93t\xb16\x92BU\xeaQ\x00O\x0b\xcbv\xa7\x06\x9b\x84\xd7<%\x92\xa7\xe2\x93\xf4\xb76\xbef\x1e\xd9\xcb\xb5\xe6\x08\xfb\x0b(\x98G\xbf\xd6\x1c\xd7\xde\x8f\x08\x86\xef\xf28p!{\xdb\xb3\xa3\x95\xaa\xdf\x93T\x04\xeb\xe4\xe3@1N\xf1tl\xe1`;\xd0\xac`Vz\x9c\xcc\xd1\xae-\xa2w\xad\xb0u&\x9e\xd8\x14\x89\x078Q\xf2\xc7\xc6\xf1L\xaf\x1c\xce\xa5\xc8\xa7l\x94\xe8\x19\xb1\xf9i_\x84\xa2\x0e\x1a\xc4\xdd \x1a\x0b\xf4\x9a\xae\x17Y\x82\xf3|\x8d0c)-\xe5\x993\xea\xb1\xb5N\xbc1\xe7\x95\x14w\xe1\x9d.\x9e^d\x03w\xbdx\xfa\xf0(\xea\xd6x\xfd\x0d\xc4\xa2\xaf5;\x95g\xf5\x8c\xa4r\xd7zcw\xd5\x13so\x88\xa7\x17\x9b\xfaR\xae\xfc!\xb80:m-2\x92p\xe9c\x9c4\x01\xf0\x18\xa3\xd0yU.\xca\x1a\xca\x03(\xba\xa7l\xc3\xb9\xfd\x15\x98/\xe3\xbdf\xa5s\xefC\x04\x9epZ\x18\x1d\x84^\xcb\x0c\xf9\x92\xbb\x91\xcb\xe9T\xb6\x82\x0e\xd7\xbbE\xe2\xba++\x08\xbf\xbd\xe7R!\xf2s]#ic\x15q\xc2\xcb2\xf0Y\xe2\x9e\x15\xcb\xbbYc\x9a\xd5L\xdfq?:^,\xf2\xc8\xed>\x13kb\xca.;\xf6\x99P8\x08\xcb\x1fx\x01\x81D\x1ep9Cy\xc0\xbddZ:\xfb{\xc4Ua\xd4\xd9cIH.\xf1\xd8ZhD\xa5\x7f)\x8b\x82\x18\xd7\x9c\xb4\x8di\xba\x92~?Y\x0bE+\x1dWa\x01\xf4\x9aMx\x10\xdc\x84\xa0\x8b\xaf_\xce.\xfe`\xc4\x88\x7f]\xffyzy\x15\xda\x98\xc09\x8a\xc7\x13\xec\xa3?\xbe~;\xfd~zuz\xf6\xbd\xdful\xf7\xcb\xf3\x8b\xb3\xf3\xb3\xcb\xde\x9f \x92\x07}\xc4\xf9\x14\xf8R\xdft\x0f#2~\x8ei\x9e #\xc3s\x10\xf8\xd0\xb8\xe2\x8c\xf4D]\x16\xb7EyW\x1cd\x05\xbf\\\x12\x15\x8a\xc2\xa2\xce?\x83]\x86\xa9\xbf\x98\x08q\xbb\x8f\xab\x92\xa6\xca\"\xfb\x1f/O\xf9Z\xebi\x15\xc1T\x94T\xbbx\xa3)O\xee\xf9\xee\xe2%w\x8ey\x13\xac\x1a6*I\x8b\x0d-\xc2\x8b7\xb5\xec\x87a\xa8\xf0\xa5\xe7\xc3\x87\xff\xd1\x8d\x14^\xbbP\xb2:\xe3\x89\x9f6\xd7\x81h\x86W1\xd3\x82\x87g3!\xcb\xe4`H\x0c.\xca\xa2\xce&\xb9h\xb5\x18\xb1\xd8G>ID\xc5\x15D`\xbd\x04@y>z \x80z \x80r>/\x01P/\x01P/\x01PpD^\x02\xa0\xa2>\xa4\x97\x00\xa8\x90\xd5$\xf0\xbb\xb2\x96\xa9ay\xb5\x0f\x8c\x1ePq2]\xde\x003H\xc4>\x88\x86\xe3:\xa4\x1b[\xd4\xcc\xe3\x91T\"g\xfb@G\x9a\x08'\xc6\x81\x0c\x13\xf1\x00\x82j\xc7\x8e\xcf\xdb\x8a\xffp\x1d\xa4\xbd\xa0\x82\xd1\x1f\xc6\xdd\xceX\xb1\x1f\x0e\x90\xe3E~\xb8(\xdfr\xdc\x87MO\xfc8\x10\xb5\xe2\x81\x8e`(\xbfQ\x07Go\xcc\x07\xc0\x85T\xf7\x8b\xf8hM\xf6.\xc7{8Q\x1d\x1e\xeda\x83\x03sh+\x17\xf6\xdb\xe7\xd6\xb6\xe2<\x06rq\x86\xeb\x19I\xc7\xf2\xd4n\x9f}\x06\xbej\xc5\x89Waw\x04\xea\xa6\x98\x0fa\xd8\x13\x04\xc5\xb4\x87\x8f\x85\xc4D\x97\x12\x94\xeeN\x08IH\xa5\xa1\x9eT9\x81\xa3\xac\xafZ3Aq\x81\x8b\xb2\xb4qx\x19\xc5\xd8a$\x834\x1d\x02j;\xd43\xd2\x11\xc1\xd7\x0f\x82o5\xd4sbP\x8f\xc8G0\xa0\xbe\xba\x10\x0d\x8b\x80D;\xcb\xc1\x98\x8e\x8c\x02\xec\x17\xcb\x86`\x11`\xcf\x94\x97\xc34h\x17\x94C\x8b\xf6\x84\xd0o\x0eb\xca\x03\xf5c\xf9f|\x8c\xaa\x92(\xbc\xde\xf1\xa5\xa8w\x94%zL\x8el\x18q\xd9\x058j\xd4\xa5\xe3\x04\xee\x8f\xb9\x0c\x9cN\xea\xedG\\Z\xd5\xf2\xbd\xf1\x96\xce\xda\xf8\xee.\xa8\x83\xa3-\x9fW;\xf3\x1a\x14\x1f\x19\xdd\x0f\xf1 B\x8e\xc1 \xad!\xecg`\xa3\x0870\x0b\x1d_\xdc\x8c\xbb\x99\x84\xfd\xf0Ajhk\x89\xee\xf7\xee\x86\x10\xa1\xa9\x18\xaf\xebz\xd2\x0dU\x0e5\xfe\xf2@\xa3\xde\xb4\x9eP\xcd;\xe4o\xd6M\xc1\x1d\xea\x93@t3\xda\x02\xc3:\x92&\xd2'\xcd\xc72\xb7,\n2\x8bC\xf3\x82\xf33\xab\xd5\xc5n\xbb|\x1a\xd82\xcf\xcbu\xd9H\xaf\xc7\x8a\xf0H`4\"\x91\x83\xfa\xe5ygNu\xd1\xf3u\xce\x8ba\xd5\xad\x00\n\xea\xe3\xd9\x82bt\xf5\xb4\x9d\xee\x17\xe7_^\x1az\xa2\x97\x86\x9e\x11\x1b\xe0\x91\x1bz\xb6\x8d \xdfJl\xed\x96\xa16\xc80\xcb#dcX\x96\xc5`\x1b\"+\x8e\xd1\x02\xd3\x99\xf1\xaa\xe9MF++H\xce9 \xed\xc6\xa1\xb6A\x00\xe4\xea@k\xc2\xb2\x1b\xfc\xd3\xd4\xcb\x86\xf0\xe9\x89\xcd\xbb\xb8uye\xda\x02=9\xd5\xdb\x8cp\x1d\xb0\xfap\xa9k\xed9\xe6\xae5\xa4\xb7\x16[a\x01`\x86v\xca\n\xf4\xe3\xb4\x0e\xceo\x8b\xf4\x92m\xba\x8a\x87M\xe9\xba\xda\x8d\x9c`\xa2\xe0\x0d:\x0d9\xd5\xb3\x1ae7EY\x992#\xfc\xf3\xc0v\xac\x08;\x90\x04\xe2>\xc6^\x08r\xc0\xf6\"\xc8\x9a}\xc6-ak\xaf\x85\xa8\x13\xf9\xd7l|R\xf0b/e\x95\x92\xea\xcd?B,\xb9\xcc\x8a\x84\x1c\xa3\xa4\xac\xe7e\xbd_\xa7\xb7\xe8\xed\x9b\x0f\xef\x9d\x1f\xc4\x9c\x89B\xd1j\xe3K\xe0M\xe6\x13\x92\xa6B\x13\xdf\\\x9c\x7f\xd1\xa6\x95\xf4\xa7\xd5\x81\xf5\xa5\xa5\xb5\x8f\x80f\xf1\xbdA_;n\x93\x90i\x16\x9f$\xd3\xecR\x17m\xdc\xd5a.\xf8\xc6\x0f'c$\x1c\x80\xfc\x06\xf2\x06\xc7\x07e\xc7\x84L\xea\x80\xe6\x88Z_\x16\x7f\xfe\xcf7\xe3\xda\x9a\x92\xeaB\x18V\xfcZ\x01\xd7\xf2\xe2\xcaX\x15o\x82\x86\x17\xb7\xa9\xa2\x06\xd5iS\x8e_* \x9f\xbe\xa6\xbc^)\xdbAE)\"\x86\xbc\xe78\x84\x02*\x00\xcc\xcc\x80\n\x8em\x1d-\x11}\n\xb7\x11\xc7^zMF\x1br\xd6\xb7w\xee0\x97:{(\xa3\xb5Q\xe8\xb5\x10\xe7\x8f\x14\x95\x8c\x7fwY\xeb\x06*\xbco\xdc\xe1\xa8c\xe6\xe4\xf0`\xd9\x97\xbc\x1c\xf9\xbc\xe4\xe5\xecP^\xceK\xd4\x7f\x88\xceA\xde\x99G\x8f\xfao\xa84L\x0b\xfb \x1a\xd2\x8c\x03\xbc\x10\xd2\xd7`B\x19\xe2\\h\xb9\x10Lp^\x9f\xc1\x10vu6\x8c\xd3\x92p0Q\xe0\x07\\,C|\x05a\x8f@_\x1f@\x94\x9f6\xf8-3\xb7eY8\xd8\xcbO\xed@\xee\x0e;\xe1\x1b\xe7x\x0b\x9a\xe3L?\xe8\x14\xef<\xab?2\x17M\xb3\xa9\xf9>\xc4\xcb\xbeg\xf9\xee\x89\xdd\x02\xe7<\xbd\xf7?\xaf\xdb\x87\x14\x0bX\xf7\x84>\xe8Ln\x9c\xbc-`\xeeSx\xf7\xdc=db\x01\xa2Z\x9e\xa8\x81\x937\xe4\xfc\xad\x12\nM8\xb1\x13w\xf4\x8c\xbd97z\xa7\xab\x91\xba\xce\xca\xe2\xe0\x7f\xe5?\xf8-\xed\xbfE\x16\x9b\x80\xe3M^C5\xc1U2SA\xa6\xe2vN\xcd\xad\x8f\xddW:\xec$K\xf7\x18\x87\xe5\x99:\xdd\x13\x91hM\"\xb2\xf8\x95#\x19\xf9\xf3\xe1\xe7\xdf?M\xf0\xbb\xfd\xa3\xe9\xfb\xa3\xfd\x0fG\x9f\xf1\xfe\xa7\x8f\xf8\xf7\xfd)I\xf0\xe1\xe4\xed\xd1\xe1;\xf2\x165\x18\xe94\xe3f.\x9a|\xe3\xc3_\x0f7\xe4\xed\x03~\xa0\xcb\x8fG\xf4\xfe\xe8\xfe(\xcfWG\xf7\xc9\xe7\x07Z\xff\xba\xcfo\xefH\xfeF\xe0,\xd8\xc3\x81\xed\x99g\xaf\x16\xfe<\x83Z\xddn\x1b\xdft\x11\xd0\xff\x91?;\xfcu\xefE\xe5s\xfd+Of\xef\xeb\xfb\xbb\xe2\xc3\x87\x9fGo\x7f>\xdc\xd0OU=[\xfdZO\xab\x9fI\xc5q\xd4\x00ef\xadB\xd5\x85b\x83\x8a\xc4U\x16\xe3p\x17{\x11\x7f<\xfc\xf5\xce\x8b\xe0\xdd\x87w\xe9\xafw?\xd3\xd5<\xc5\x0f\xcb\xbb\x87\x04\xa7\xe9l\xf6\xe9f\xbe|?O\x1e\xc8{s'\xfc\x07\xd3\x0b\\\xba\xc8\x19\x92q6\x0d\x9a\\H\xcaUR\xeb\x1d\xf7\xc6\x03\xc2X\xb8m0j\x15\xc9{maK1\xd8\xe2\x1b\x0d/>\x8a\xc1S\xe8 \x92\xa5\x86/\xc87\x06wJp#D\x1a\x1d\x8a-{\x16u\"\x88\xce\xc4\x04W\xc4\xb1\x10eh\xe6\x1a\xa5e\xf1\x8a\x8a\xca\x8c\\\xa8\xa9\x1e\"\x1c\xbc\xb1\x1c1\x9a\xe0\xd4\xbc\x137\x10\xd5?:\xe7\xf0E\x13~se#~\x80\xd6\xab\x07\xa5%\x11\xbd`\x84yA\x9b\xcdS[}\xc1\xc47\xcdX\x9d\xbaR\x86\xcc(kb\xdey2i\xcc\xe7E\x05E\xf3\x8c0=\x13&\xd6\xff\\+{c\xcfBC\x0f/\xfcBTi\\sn.\x89~}m~{PV\xad,\xf6Z\xeb\x0c\xe3\xe0\xa2>i\xd8,>\x95\x9f\xa8\xed\xd5\xcd\xe3U'\xf8\xdd\xce\xdb\x8d\xf8R\xf5\xf6\xed\x06p\xf8.\xd17p\x83z0B1\xa8(\n\x19\xe9(\x9cP\x18\x11\xc0\x8b\x00p\xb6\"\x80\x87\x90=?D\xc2\xee\xe9\x1fF\xa2._\xf8\x08\x9d\xce\x179O\x85\xa8Q\x9d\xde\xbe\x91\x99|\x01XYAI5\xc5\x89\xb0\x17\x975a\xa6[\xa5\xb5&\x11;\xa4j\xaa\xc4\x07`}\xe1\x86\x8d\x8f\x89\xe04\xe7\xc7e&\xf5\x14\x8c\xd0y\x1e< *|\xfd\xd6\x8a[\xd2\x8d\xf0\x88\x9a\x0b\x15\xe2}\x97\xd1Y\x16\xed\x19\xeb\x0f\xba\x929\xa4\x81\x08\xdb\x90\x87N=\xd1\xa0\xf9\xe8\x9e\x11O|\xe7\x88G\xae\xa5\xf0\x8f\x80\xf3.\x7f*&\xb6\x15\xcf,\x93o\xd0k\x95\xd6\x11N+\xa9\xca<\x9e\xdc\x0dXA\xe2\xc1\x1c^\xb3#\x152z\xca\x85\x85@\xee)\xb4\xf4\xec\xa2*\x13\xb1\x05\x83\x1d\x83\xe5\x07p\xe6Ar^\x07g\xbd\x0e\xcd{\x1d\x96\xf9:,\xf7u`\xf6\xeb\x80\xfc\xd7\x81\x19\xb0\x83r`\x87f\xc1\x0e\xcd\x83\x1d\x94 \x8b6\xca\x85\x8d\xdd;u\x9f\x91\xf3a\x07f\xc4>RN\xec\xe3f\xc5n?/vG2c\x9f 7\xf6I\xb2cw(?\xf69d\xc8\xee\\\x8e\xec\xd3f\xc9\xaa8\xe5\x98e\x01\x0b\x9e\x92\xbf\x15\xd6\x97\xbe\x15\xd4\x13\xfa\xaaFuvS`\xba\xac\xf8!S\x0d\x1e\x80\x07\xb3\xe4ND\x16\xaf\x12\xc0\xd2\xbed\x9b\xea +\x98\x08\xe3|a\x96^\x10L\xbb\x036\x8e\xe51\xf6\xd1lW<\x19Ae\xf1\xea\xa5\x8dh\xb9@9Y\x91\xdc\xaa\xd7\x12\x0e\x1b\x14\xde\x0ba\xa3\xbei\x83\xe6\xeeB\xc6g^M\\\xfafB\xe2Rd\x14\x97i6\x0d\x86\xdf\xf1\xe84v>2lcu\x80\x15\x18\xd8\xa7\xcf\xe0\xca[\x16\xec\xb4\xc6\xb9\xac\xf0\xce\xb3\x9a\xaa\x0c\xd9\xc6\x0f\xe3\x0b\xf7c\x98\\c\xee7y\x94cU\xc4F\x87\xaf\x83\xa6L\x8f\xaf\x7fK\xb1\x8f\xf3\\om\xb5\xd2\xe5\xd5N\x91\xf2\xb0\xb5\x8e\xab\xb5\xfb\xb4\xeb\x1cX\x80^\xd5JdN3\x92\xa7\xc1\xd0e1\x1dy]\"R\xe0I.N\xe7\x11\xa9\xc9|\x03\x91\x82Vk^\x00G\xe2\x0b\xa2i\x12(y)\x9e\x1e\x14\xc1\xa4\x00\x92'h\x8f\x9f@\x98\x1cr\xf5D\x05\x1c\xd2\x81_\xc1\x9f\xc9\x15\xf8l\xa60\xc75UH\x83\x08\xdb\xd1y\xe4\xe1s\xd9\x88\x13)E\x06\x8cX_\x85!\xfb1\xea\x0d\x05jM\x8a\x07\xce\x19f+K\xdb\xa5%\xe7\x04g\xb2\x1aeERqk\x1e\xe0?\xe22\x9c\x17\x93\x103\x1e\xfc\xc0[%\xc9~\xb6\xb2\"L\xba%\x1e\x8e\x08\xbc\xd8F\x91\x02*+\x8b\x03A/o\x91\xb8\xb9uu\xc2T\xdc7\xa6]k\x94\xe0\x85\xb02\x9dQ8l\x07\x06A\xe9u^\xa29\xbe%r\xa9\xebj\xdfE\xaa66Y\xa3;REf\x0c\xa7\xbe\x1f@\x95\xee\xa54\xa0t\xbc\x94aKi\xeb\x02\xdf\xe0\xac\xa8\xa9q:\xf1\xc2\xb3]\xe9\xec+\\$\xa1B\xa7W\x86\x1b\x95\xd7F\x99\xe1\x151F\x92\x1c\xe61bf\xeb\x1e/@\xd5d1T\xeb\xf1\xfb\x19;I\xff-9\xdd*\x8dwaE\x04#,#\xca\xd8\xfe\xf3\x02l\xe2\xcb\xb0b\xa9\xc8\x8bW\xfc\xe5\x19\xe5\xf3\x92\xe3\xe5\x02\xd0\\\xda\x8c\xd32\xc5\x067,\xc2\xc1\x19\xe3\x106\x07\x016\x14\xc4~z\xfc+\xacv \x96F\xc0\x1f\xc0`\x97\xb6\xf0[\x96\xc6\\\xc4\"\x13\xb6JSD\xc8u\xd0\x1c\x1a\x9e`\x82\x02q\x05\x12\xbc\xb4#\x9c\xe9\x06=\x19o\x1a\x0e\x05\xc1\x19\x8b\x07\xcc!\xf9\xcf\xe7\xc1#\x03\xd9\xc6!a\xbc\x93|\n\xc2\xb37\x19\x88O\xe1\xc0\x0d0s\x86P=B\xecF\xbf]3\xd2B\x18B\xebF\xc1\x1b\xde\x85\x12 Y\x05 \x86\xf4\"\xeaK\x8c TX\xd5.sND\xf4Ez\x12i\xdd\xafK\xc3Af\x12\xa4+\x11P_\"\x04 \xbd\x16\x0fpi \xb8\x9c@\xdb \xc6\x16\x8f\x9e\xa9\xb8\xeeD\x8fC\x1d\xe08\xd3Bz\xb8&5\x81\x01\xf9\x04\xd3\xa6h\xf7x5\x86nE\xc8\xc8r\x00\xf2,\xa67P?V\x0d\xa3\x7f\x14\x0d\x82z\xae\x96\x91\x17\xc90\xca7\xd4'\xc8\xbd\x84\xdc\xe4\xb7\xbb\xaf\x8er\xd6r\x02\x1d\xef\xc4\xe5\x8eR\xdb\xf2\x01\xacM\xd3\x08\xb6\x06P\x84@\xb9\x8e\x1cXz\xf5M\xf4B\x0bu\\\x17Q\xe5\xd4\x99\xf6\xb8\x82\xda\x1dNm\xac\x98\xda\x00{\xf0\xc9~\x11\x93A;\xc4\xb3.\xe2\x92\x7f=\xc08R\x9a\x06\xf32\xa6\xb8\x80\xac\x1b\xce\x13\x88\xd2\n\x82\xdb\x84\xfa\x91\x16\xcep\xea7T\\\x80\xe5\xe5b\x05\x04_\xe9t\x0c\xb4\xb4T\xbe+\xabe\xa5\x13V\xef6\x96N\x9c\xe4\x80\xb5\x08\xa2X\x1b%\x9bu]D\xfd\x0b+\xbd\xf9\xb5\xb3\xc7\x87Y#\xb3\xfd\x17\xee\xbc\xed.\x0c\xb1\x1c\x1e7\xde_ \xe3[\xa4#\xa9\xeaG\x8f\xc58h\x96D\x13\x1c-H}\x83\xd0_\xbc\xd8\x80L5\x0f\xc2\x92\xf1\xf8\x8e\x02\x18'y]\xa2\xdb\xa2\xbc+\x10f\xab\xf6\x1b3\x7f\x82A\x1aO\xe10\x86q\xacI7P\x9bN\xddv\xa8<\x83V.AD`j^\xa3\xd7\xbcReFgh\x9a\xe5\x94T$E\xb7+\xa5\xd7)\xa90-+\x7f\xb0\x98\x8cD\x0f\xb2\x0bD\xa0\x04\xa4\xa4\x8ce\xef*\xca\xc4T\x07\x0b6hI\xb3\xb6\xef\xa0J\x1e\x9dWN\xa72\x0e\xce\xeeJ\x0beVtQ\x8c\xe6\x86\x01&I\x00\x97\"\x02O\x03B\x9d{\xf5NH#\x9f\x0e\xb5e\xa3\xd0\xe4\xc4\x06\x7f7\xc3\xf5l|R\x19\x1d\x0c2'\xa20*\xb3\xa8\xb5\x16M\x9e\x88 E4\x08/\xc0\x14`\x11\xae\xe6\xb8\xbb\xd6\xc8\xbff\x03_\xb3\x9f\x85c\x97\xd8\xa3\xc3\xd3\xd8&h\xcdfR\xce\xe7e\xc1\xc7\x0b\xc7\x84\x8a\xfePO\xc2\x0e1\xb4\x08OSd4w\xa5\xbc\xfdE\xf4JY=\xbaJ4z-\xc0\xfe\xd6\\\xd1r>\x1dh\xd6\x04\xefj\xd5\xc3DoV\xac\xca\xdb\xc0Z\xca\x8a\xc5\x92>\xdb\x84-\xc8.\xe85\xf1\x10S\xaf\xfd|g\xd3.\x9b\xaa\xc9\x02\xe3l\xe2\xf3\xac\xb8E\x13\x9c\xdc\xca\xb2\xec\x00H\xe0\xb3o'\xa7\x7fF?3t\xf2P:\x87ic\xcfh\x90I\xf1~li`\xb4,\xecV\xa5\xbe\xa7gV|wJ\xdb\xccc\xef,\x15F\x8c\xdd\xc4\x1bv\xeb>OC\x86d\xcb\xa1=${g\x0c\xa9I:H\xca\xa2\xceR\xe5}\xe0\x83\xdff\xfc\xd6\"\x15\xfd\xae\xe6Y\xcd[\xa7J}TV(%9^\x93\x14\x98\x98\xe8A\x92-\xbe6\x92\xec\x9d\x97/\xcd\x85\xa2\x13s&3|\x01\xe8\xea\x81\n=q\xa8:\x13\xf2\x89\x14 ^\xd4\xcb\\\xa3$\xe5\x16?\xc5B\xfc\x88\xa8\xb1<\x009\xc60\x1c\x05\x0e\xaf\xeb\xdfP\xd3l\x9dw\xb2,\xa7\x8ae\xb2\xb1\xb0\x12\xd7\x91Yb?\x15\x07\x19\xf5ASL8\x83\x99\x0e\xcf\xa3RR\x1bK\xc5\xc0\xe6.\x03\xa0gkgQ%g\xe1$yy\xe4\x01\x17\x9f\xed\x13}%RN\xb9\xe5\xca\xa7\x1cS\x8a\x93\x99\x18\xad\xe9\xd7WV\xe3\xfdO\x1f\xf1\xef\xfbS\x92\xe0\xc3\xc9\xdb\xa3\xc3w\xe4\xad(\xda\xaedB\xe2\xef&'\xd5\xb8\x1c0\x84\xeb\xe1\xaf\x87\x1b\xf2\xf6\x01?\xd0\xe5\xc7#z\x7ft\x7f\x94\xe7\xab\xa3\xfb\xe4\xf3\x03\xad\x7f\xdd\xe7\xb7w$wa\x1c/@5\x16C[\xe5\xa6\x1a\xf2\xedZt\x11R\xc5\x8f\x0f\x7f\xdd{\x89\xfd\\\xff\xca\x93\xd9\xfb\xfa\xfe\xae\xf8\xf0\xe1\xe7\xd1\xdb\x9f\x0f7\xf4SU\xcfV\xbf\xd6\xd3\xeagR\xb9\xb8\x10\xbd\x8c\x19\x89 \xad\xab\x17\xcd\x03%Y,\x16\x84@\x1c\xfez\xe7e\xc0\xdd\x87w\xe9\xafw?\xd3\xd5<\xc5\x0f\xcb\xbb\x87\x04\xa7\xe9l\xf6\xe9f\xbe|?O\x1e\xc8{\x17d\x99\xdd\xa2\xcaZyLn\xc1\x85P\xc5{\x18\x1b\xda\xa3 ^Ls|\xc3\xa5\xa5\xae\x91_\xaa_\x064\x83\x86a\xddM\xe8CI\xbd(\x8b\xda\x19\xab\xa0\x90\x90B\xf4q(6E\xfa@\x82\x15\x88\xbe\xf4\x92{\x81B\xf0\x949\x16\xbd\xad\xc1\xfc\xf4\xca\x1fr\xec\xbd\xf7t\x1c\x04\x8fc\x89\x11\xd9\xf0\xd9\xa3\xd3\xd0\x88D\xb6\x06\x83L\xaa7uU\xc3(\xd0\xba\\VRq\xda$ZX\xf1\xc2\xae\x17\x92\x15\xa8\x89\x12\x13\xffg$\xca\xc8b\x82\xfe\xb5$\xd5\xfa@T\x82\xbd8\xff\"\x13\x1b\x1b\xd8*\x04\xf4\x1f\x9e\xa1N\n\xb4,\xc8\xfd\x82$L\xb1\x8bNB\xaeI\xa8\x93\x19\x99c\x9b\xe7^=\xef\xd7\xf1|\x80\xee\xcc\x05DpR\xa6\x0e\xcf\x9a\xf8\xc0W\x11[\x9d\xa6\xb2\x82\xbe\x7f\xd7\xfa\xab\xb7\x9at\x00\x87\x94P\x9c\xe5;R\xbc\x81}~\xbd\xac\xbcML\xa2\xea\x8c\xe7<\x0e\xfe\xdayV]\xe0\n\xcf %\x95\x81\xf3\xbeH\xf3\xb4\x8c\x03\xdf*\xfc?{\x1b\xf6\xb4'\x1c\x9f\x8eeDd\xc51Z`j\x86\xe5\xb1\xdd\x9cU$=F\xb4Z\x9a\x82\xdc\xc9:\xcd\x05is\xfa8\xd0\x12D}M\xd4a\x86i\xc8.\x1bbx2n\xfdb\x02\xc9\xc9\xae)\xcek0\xbf\x0ck\n\xc8\xb2\xc1\xf6\xd7\xb8V\xd7\x88FX\xcb\xdc\xea.\xff\xc7\"\xb9eQ\x01I\x1eh\x875\x16Wg\x9e\xb7Mg\xcb\xa8\x02\xd29\xc8\x143\x8c.\x0b\x98\xc7\x00\xdb\x9cJ\x8ao,\xe5\xf7/ \xed`Q\x95+R\xe0\"!\x07sBq\x8a)>X\x1d\x1e\xc8\xfdv\xf0\xbfM\x89\xa0\x7f\x8b\xefo\x886\xd7\xea\xe5|\x8e\xab\xf5\xb1\xaa\x9cU\xa3\x9a\xe0*\x99\xc9N\x81j\xcf*J|\\\xbc2\xc2nZ\x1aE\xacs\x87V\x81k\x94\xa0*\x01\xab\x11t\x99\xcd\xb3\x1cW\xf9z\xcf\x94G\x12c\x0d\xaf\xad\x0bQ\xc3\x06/\n#\x98\x04\x8c\x85\x1a\xa0\xa1i\xf6P6U\x0d\x1d\xd3=U^\n\xe1ft\x88\x16\x1aC\x035#\xfe\x07:\x9d\xa2\xb2\xc8\xd7jn\xe4\x15T\x83&\xce\xf3V]3L\xd54V&\x9dtY\x15\xbcc\x85\x13v3C\x16\xf4\x8c6|0&\x05\x17\xa9]\xff\xa4U\xf3\x8d\xefY\xf7\x80\xad\xf5\xc0\x05\x80X\xb2tF\xf4j6\xa8\xe5\x87\x98\xae\x01\xc1\xd1\xc2y]2\xdc\x0cvH\xccZ\x185H\x04P\x93\xbch\x19\x1f\x0dl\xda*\xb0\x85\xb3Bd\xf7`\xda\x0e\x82\xe1]F&\xc4;\x94\x1eE]\xde\xabQ<\\\xd83y\x86\xad\xbcu=)6\xa3,\x065\xa3\xb79\x15\xa3\xc8E\x89\x06v\x82&85=\xce\xeaG(\x9b\x1e\x9b\x14_y&\x9d#aR\x7f\x97\xd1Y\xb9\xa4\xf6\xfc\xbb6\xab\xc5\xd0\x13/75\xbcb\x8d\xee\xf0\x9ak\x16U\x02\xac\xb1\x86^[;\xd8\xe4:\xee\xf0\xdd\xe4\xf7?\x8co\x0c\xdc~\xb3\x90\xbb\xba+\xd9\xd4\xf0\xb6/\xe540\xa3\xf6\xf62\xa7\xd2\xdc\xc8\x9a4\xf6\xa3\xb4,^Q.\x02\xf8E\xbf,s\x83j<'-\xb1\xed\xe6\x17\x87\xfe\x9a\x89]\xc5mch^\xf4\xa9\xc3M\x84\xdb\xc2X}&\xb6\x9d\\MiIjT\x94T-+T/\x93Y\x97_\x01\xb4Z\x98\xf0\xf69\x93\x92\xce\x8c%\xbf\xb6\xebQ\xea\xc4\xb3)\x8e\xdd\xaf\xe5(\xb2\xf1\x7f\x95\xddd\x05\xa6\x90\x8a\x8f\xce=t\xecz\xa9\x0c\xf4\x1a\xa5d\xc2N\x04\xd5*K\xd8\xb1r\xba,\x12\xdar~CFS{\xef\xd8\xf5R\x1c&y\x83+oY\xb0\xd3\x1a\xe7\xb2\xc2;\xcfj*\xeaG\x99\xf7\xac\xbe\x18@\x86\xc95N\xc2=\x10F &\xb7\xa1I\xe7O\xce\x14\x88x\x87\xc2\x82\xb1\xc4\xf8\xdf\x08Bb\xab\xbci\xa1jk\x04\xfd:\x00\xce\xa9&\xe1\xdcz\x02\x05\x01K\xee\x1e\x7fa\x8c\xb0\x14\x06\x91:\x82\xd2\xf0\xac\x966\xd1\xeaT\xd4\xa52\xe4\xcd\xd8V\x16\x8d\xc4\xc6\xc7\xf2\xa8Z\x88\x8f\x80\xd0S\xb4\xff\x84\xc75\x8c;n\x9f\xe5\xa7[\xac6u\xbb=\x95N@\xbd7\\\x95\xbb%\xe3}\x1b\x0f\xa9Cc\x9c=\xbb\xd9+%\xea\xd4R\x0fp\x8e\xe5\x8f\xc7\x88c\x80E2@=\xe0\xe2\x197\x9aa@\x8a\xd6H\x95ga\xb4\xf1\xa4\x1aZ6\xec3/\xe4\xe5\xbd!\xac\xb3\x984\xd7\xf7\x18~Y\x82\xf3|\xdd\xf4\x94\xf7~(?\x1a\x81\xdc-\x9ci\xd5\x01D\xa4'g$\x17\x97\xe7L\xc32\x95\x9e\xe4\x19)\x9a\xf3-\x8fl\x08\xc2\xeb.\xd1\xe8\xa1\x16/\xd3,\xc8\x9d>\xf4|\xe1\xc7\xe9\x14M\xd6{h\xb9H\xf5\xbfi6'5\xc5\xf3E\xbd\xa7\xdda\xa2|]\xb8\xe7\xa3\xc8\x97\xcaeW\xb2i\xe9'\x03|b\x86\x9e\x97\x85g \xbdfD\xc4\x04!p\x01!c\x111\xb0\xfb\x8c-1\xd0b\x8f\xc9x#r\xc0>a\x12T\xde\xfd\x93\x82Vk\xde\x8bL\xe2\x0b\xa2i\xb2\x1e\x91\"\x98\x14@\xa8\xd3\x13\xde\xf4\x13\x08\x93C\xae\x9e\xa8\x80C:\xf0+\xf83\xb9\x02\x9f\xcd\x14\xe6\xb8\xa6\ni\x10a;:\x8f<|.\x1bq\"\xa5\xc8\x80\x11\xeb+\xf0d?F\xb9\xa7\x8f\x1fbp\xc1\x9ca\xb6\xb2\xb4]ZrNp\x86\x17\xdbN*n\xcd\x03\xfcG\\\x86\x13\x9c\xcc\xe4\x8c\x07?\xf0\x16\xa9\xb2\x9f\xad\xac\x08\x93n\x89\x87#\x02/\xb6Q\xa4\x80\xca\xca\xe2@\xd0\x8b\xc8*|\xec\x81ax\xc2T\xdc7\xa6]k\x94\xe0\x85\xb02\x9dQ8l\x07\x06A\xe9u^\xa29\xbe%r\xa9\xab\xac9\xa6\xae\xe4\xc6&ktG\xaa\xc8\x8c\xe1\xd4\xf7\x03\xa8\xd2\xbdTi\xd0*^\xca\xb0\xa5\xb4u\x81opV\xd4\xd48\x9dx\xe1\xd9\xaet\xf6\x15.\x12\x12\x88&\xbb2\xdc\xa8<\x85\x7f\x86W\xc4\x18Ir\x98\xc7\x88Qu\xc4\xcc\x88_,d\xc5\xaa\xccWv\xfe\x7f\xfb\xf9~\xc6N\xd2\x7fKNWD\xe6R\x8b\xd0\xae\x0b+\"\x18a\x19Qf\x95\x91h?M|\x19V,\x15i\xdb\x97f\xa1\x89y\xb9\xf2u\x9cm.mF\xe9B\xd3\x027,\xc2\xc1\x19\xe3\x106\x07\x016\x14\xc4~z\xfc+\xacv \x96U\x03\xc2\x1d\xc0 g6\x12\x9a`\xcdE,2a\xab4E\x84\\\x07\xcd\xa1\xe1 &(\x10W \xc1K;\xc2\x99n\xd0\x93\xf1\x06\xd8\x1a\x80Z5F`\x1c\x92\xff|\x1e<2\x90m\x1c\x12\xc6;\xc9\xa7 \xbc\xb2]\x80'\xce\xa7p\xe0\x06\x989C\xa8\x1e!v\xa3\xdf\xae\x19i!\x0c\xa1u\xa3\xe0\x0d\xefB \x90\xac\x82\x04\xc7lec\x01Ec\xb7\xfb\x84\xcc$HW\"\xa0\xbeD\x08\x12z-\x1e\xe0\xd2@p9\x81\xb6\x13\x8c-\x1e=Sq\xdd\x89\x1e\x87:\xc0q\xa6\x85\xf4pMj\x02\x03\xf2 \xa6M\xd1\xee\xf1j\x0c\xdd\x8a\xd0K\xbfO8\xe5#/\x92a\x94o\xa8O\x90{ \xb9\xc9\xef\xf4z\x19\xe3\xac\xe5\x04:\xde\x89\xcb\x1d\xa5\xb6\xe5\x03X\x9b\xa6\x11l\x0d\xa0\x08\x81r\x1d\xf5\xe8y\x16\xbf\xd0B\x1d\xd7ET9u\xa6=\xae\xa0v\x87S\x1b+\xa66\xc0\x1e|Jz\xb5\x93\xda!\x9eu\x11G\x80\x1ef\x8e\xafZ\x11\xeaCy\x19S\\@\xd6\x0d\xe7 Di\x05\xc1mB\xfdH\x0bg8\xf5\x1b*.\xc0\xf2r\xb1\x02\x82\xaft:\xfa\x1b\x8fi\xdf\xd5\x16:\x8fI\xd8\x81.cjtO//\x99\x8d\xdb\x9d[1\xa3\x8f\x1b\xb2/\x90\xf1\xad\xb3\x91\xb4\xed\xa3\x87S\x1c4\xb3\xda\xc47\xcbB\xa7\x08\xfd\xc5\xeb\x05\xc8l\xf1 ,\x19R\xef\xa8aq\x92\xd7%\xba-\xca\xbb\x82\xd7\x8cE\xdf\x98\x05\x13\x8c\xb3x\n\x9f/\x8ccM\xc6\x80Z\xb9\xea\xc2B\xa5\n\xb4\xd2\x01\"2O\xf3\x1a\xbd\xe6\xc5&3:C\xd3,\xa7\xa4\")\xba])\xd5LI\x85iY\xf9\xe3\xbdd0y\x90] \x02% %(,\x93UQ&\xa6:Xs\x015%\x8b\xadk\xa4\x92\x07\xd8\x95\xd3\xa9\x0ce\xb3\x1b\xfbA\x99\x15]\x14\xa3yR\x80y\x0e\xc0\xa5\x88\xc0\xd3\x80P\xe7j\xbc\x13\x95\xc8\xa7Cm\xd9(49\xb1\xc1\xdf\xcdp=\x1b\x9fT*{|s\"\n\xa3\xb8\x8aZk\xd1\xfc\x87\x98PD\x83\xf0\x02L\x01\x16\x11g\x8e\xebg\x8d\xfck60\xaf\xf6\x1c\x0e?b\x8f\x8e0\xe3]\x03\xec\xd9L\xca\xf9\xbc,\xf8x\xe1\xb0N\xd1a\xebI\xd8!\x86\x16\x11f\x8a\x8c\xe6\xba\x93\x96\x90[a\xf5\xe8\x9a\xd1\xe8\xb5\x00\xfb[s\xcb\xca\xf9t\xa0Y\x13\xbcnU\x0f\x13\xbdY\xb1*o\x03k)+\x16K\xfals\xae \xbb\xa0\xd7\xc4\xc3,H\xfb\xf9\xce\xa6]T\x11R\xc5\xc6\xd9\xc4\xe7Yq\x8b&8\xb9\x95\xe5\xdc\x01\x90x\x98\x01\xcf\x9e\xe0\x8b&\xec\xa4\xd2u\xf4\xe3^\xaa\x9e,\x00\x9a\x07\xe2\x81o\x15\x87\xf8\x96\x8a\xbe \xe3\xfe\x06\xca}\xf8ZS<\xc9\xb3zFR\x15\x8f\x10\x8b\xfb\x86\xc8\xf1\x9el\xeaK\xb9[\xe0g$\xe1\xb9\x01\x86U\x01\x80\xc7\x18\x85\xce\xabrQ\xd6p\x1eh\xb1\xbc\x1dF\xf0\x8e\x91\x0b\x85\xd3\x94;\xe5h\xb5Lx@\x10\xb7\x91\xe6\xb8\xaag\x91\xb8s\x84j\x8a\xe92\xba\xf5\xfb\xf1\xffT\xa7\x9fdSa6q\xc1\xc7E\xa4Z\x86\ni\xd0\x04\xe8\xcc\x88\x9f\xbc?\x87\x0csgS\xcc/\xba\x16\xcb\xb8x\xee\xc5cx\xfa\xe2\xc5\xd7/g\x17\x7f\\\x9f~?\xffqu}yur\xf5\xe3\xb2WJ\x99\x0f\xc6\xf9\xc5\xd9\xf9\xd9\xe5\x06\x00\xc4\xbb\xe8\xe7:%nSB\xfaK\xf2(\xf3 3\x10\x01adB\x01r:x\xc0\x16\xce\xb3\xf4`Y\x88\xf3\xa2X\xb7l\xed\x00>\x8eL\xa5\x9b\xc7\xea\xaf\xed\x9c-c\xc7\x14\x08W\x93\x8cV\xb8Z7\x12\x8c\x17\x06\xd4g>\xb1\x15\x86\xe3(\xde\xb91\x14\xef\xdc\xf8ebC[\x16\xd8\xa2\"\xab\xac\\\xd6\xf9\xba\xb3\xd5\x8d<\xa7 \xaeR\xd8\\U8\xb9\x15N-a9\xe9\x13 Q: z*\x03I/s\x90\x8e\x9d\xcdhKf\x19Y\x89\xb6$\xe5\x92\xc6\xc4NY\x80\xb0\x13\x90\x9e\xadU\xf8\xc4\xba\xfe\xbf\xa5\x9e\xa7\xaa\x88\xa9`'\xacr\x82x\xc4\x17\x07M{\xff\x96\x1b\xea 4\xe8%\x87\xa9\xe8RK\xb0qc4\x07B\x00\xb0&EI\xf2Fn\xe5\xac\xb8Q\xadn\xf6\xa68\xcb\x97\x15\xe0\x08\x89\x98\x1a^\x90\"\x05Md\x9fY\xef\xa3t/\x7f\xfc9HKu\xbf>?\xb9\x84e\xb9\xdb\x9f]\xfe\xcf\xe9\xf9\x80\xcf\xbe\x9d\x9c\xfe\x19\xfd\xcc\xd0\xc9C\xe9\x1c\xa6\x8d=\xa3A&\xc5\xfb\xb1\xa5\x81\xd1\xb2\xa8I\xdcV\xe3\x17\x12}\x12\xdb\xbbS\xdaf\x1e{g\xa90b\xec&\xa6A\x9b\x9eOC\x86d\xcb\xa1=${g\x0c\xa9I:H\xca\xa2\xceR\xe5}\xe0\x83\xdff\xfc6\"\x15\xed\xaf\xe6Y]\xb3\xcd)\xf5QY\xa1\x94\xe4xMR`n\xa1\x07I\xb6\xf8\xdaH\xb2w^\xbe4w\x82N\xcc\x99\xcc\xf0\xc5\x90\xab\x07*\xf4\xc4\xa1\xeaL\xc8'R$xQ/s\x8d\x92\x94[\xfc\x14\x0b\xf1#\xa2\xc6\xf2\x00\xa4 \xc3p\x148\xbc\xae\x7fCM?\xfaeN\xb9\x90\x96,\xe3]\x00\x1bq\x1d\x99%\xf6Sq\x90Q\x1f4\xf5\x803\x98\xe9\xf0<\x8a\x1d\xb5\xb1T\x0cl\xee2\x00z\xb6v\xd6Er\xd6>R]\xf2\xdc\x80\xe2\xb3}\xa2\xafD\xca)\xb7\\\xf9\x94cJq2\x13\xa3\xe9TT\xb67 N\xfc\x15\xac\xed\x1d#\xd71?\xbbG3\xae-\x16K\x8c$\xe7\xcaB:4\xe4k\x99\xa6\xe4&Y;\xaeF\x890\xb2\xa1EB\x8b\x8c\x10\"/@k l9\x94\x08\xe4\xc3\xdb\xe2F\xd1\xe3{\xa3\x83\xe4\x84F#~\x9ai\xd8\xe5P\x9f6\x96\xc3c|4$\x08K`\x11\x85\xbb\xc0\x961\xe2L\x9be\x03d\x8fp\x16D}\x93\xbb\xc0\x1f\x03U\xc5 \xe9\xf5\xe3\xaf\xb6\xc2\xa1'\x08e2F\x8e\xc50\x8d\xb1S\x9ea\x1a\x03\x80*\x90\x96@@M\x81^\xb2\x18\xe4\xf3\x08\xd4EO\x07/Y\x0c\x83x5\x86vA\xe8%\x8b\x01N\xf9\xc8\x8bd\x18\xe5\x1b\x06\x83\xa2>Y\x0cR.\x8f\x99\xc3\xe0\x009^\x06\x83\xb4\xaf\x1f3\x7f\xc1\xa6g\x04\xcb\x02(:\xa0\xfcF\x1d\x1c#\xa7\x93\xf0>\xe8\x97\xb9\xd0\x9a\xec\xb8J\xda\x15\x1em\xac\x88lp`\x0em%\xf0|\xfb\xdc\xdaV\xbe\xc2@.>\x97#\x90\x03_\xc79(\x08i\x04\x86\xc5\xf49\x90MC\xe9\x1fE\x93C\xe9\xee\xa4B\x8cyFr\x02\xf7\x9e\x95@\xa0\xb8\xc0EY\xea?3EI\x06i:\x04\xd4v\xa8g\xc6\x1e\x82\xaf\x1f\x04\xdfj\xa8\xe7\xc4\xa0\x1e\x19|`@}u!\x1a\x96\xc9\x87v\x96\x831\x1d\x19\x05H{\xe5d!X&\xd33\xe5\xe50\x0d\xda\x05\xe5\xd0\xa2=!\xf4\x9b\x83\x98\xf2@\xfdX\xbe\x19\x1f\xa3\xaa$\n\xafw\x9e$\xea\x9d-\x88\x1e\x93##\x1c\x16\x01Kuh\xf6\xa0\xb8\x16\xf6'\x0f\xca\xe3\xdc6r\x07\x9d\x18\x89\xf1\x02\xf9\x84\xea\x07\x12U\xad\x8ck\x17\x1buz\xe2\xebl\xaa\xfa9\x93\xf4\xb7n\x12\"\xffKw\xc9\xb4\xee\x96\xf8\xafDH^R.\xd6\x8d\xc5'\xfe`\xa7: \xa4|y\x8f\x11\x93 l\x08\x84\xfd\xa6\xd1\x95\x1d\x9f\x05d\x0c\x82\x12\\ \x92\xf1\"\xdc\x13\x820_\xc4{\x88\xbc\xb9\xf1m\xc9\xcf\x87\x9f\x7f\xff4\xc1\xef\xf6\x8f\xa6\xef\x8f\xf6?\x1c}\xc6\xfb\x9f>\xe2\xdf\xf7\xa7$\xc1\x87\x93\xb7G\x87\xef\xc8[Q\x85]I\x88\xc4\xdf\x1eN*u9`\x08\xd7\xc3_\x0f7\xe4\xed\x03~\xa0\xcb\x8fG\xf4\xfe\xe8\xfe(\xcfWG\xf7\xc9\xe7\x07Z\xff\xba\xcfo\xefH\xee\xc28\x96\x8a8\x16;\x9b\"s\xbd\x19z\xf4\xe9\xed\xfb\xe9\xa7I\xb2\xff\xf1\xed\xc7\xdf\xf7?\x90\xc9\xd1\xfe\xe7\xa3\xc3\xe9\xfe\xbb\xc3w\x87\x1f\x7f?L\xde\x91\xa4\xc5P1\xd8F,\x15 \x0e\x7f\xdd{\x99\xfa\xb9\xfe\x95'\xb3\xf7\xf5\xfd]\xf1\xe1\xc3\xcf\xa3\xb7?\x1fn\xe8\xa7\xaa\x9e\xad~\xad\xa7\xd5\xcf\xa4\xf2\x91\xc3;\n3&\x94E\xbenX\x802\x9e\x02g8\xe2q^\x97>\xfcd\xc3\x07\xa7\xe0\x8b\xde3\x8d4\xa7\xad[%\xcd~%4->\x87@\x1c\xfez\xe7\xe5\xf2\xdd\x87w\xe9\xafw?\xd3\xd5<\xc5\x0f\xcb\xbb\x87\x04\xa7\xe9l\xf6\xe9f\xbe|?O\x1e\xc8\xfb\x00\x03\xfc\xa7\xefq\x19`\x9e\x9aE\xd6\x98\xe5\x0b\xa4%\x9af\x05\x17\x88\x91\x95\xc9\xf5F!mY1\xbf2\xc9\xd8\xf1\x81\xccN\x12\x1e\xd4\x10\x99\xa1\x8e\x030:\xad\xa1\xc4TOs|\xc3\xf1\xd5\x0d\nJ\xf53D#-/\xa5\xee\x92\xe1L51\xd2\xe8\xd5\xc1\xb2^\x94E\x1d$[*\xc2\xc7!\xdcT\xcb1\xd2\x83kE\x9d\xf1z\x12M\xee\x05\x1eAw\xc1XD\xb7\x06\xf3\x13-\x7f\xc8\xb1\xf7^\xb8r\x10< )Fd\xc3l\x8f9\x82F$\xb25\x18df\xbd9\xc8\x1aF\x81\xd6\xe5\xb2\x926\x8fMb\x18+Y\xc4\xa2\xbe\x90\xecAM\x08\xa0\xf8?#[\x86\x8d\x13\xf4\xaf%\xa9\xd6\x07\xea\x1btq\xfe\xa5\x05N\xe4\x9b6\x08\xa8\x80_\xe3g\x16>'\x05Z\x16\xe4~A\x12f\xb8\x89\xd6O\xae\x99\xaa\x93\x19\x99c{b\xbcv\x9c\xdf\x86\xe3\x03t\xa77 \x94\x932u\x888\xf1\x81\xaf\x84\xb9:;g\x05}\xff\xae\xc3 O\xf9\xef\x00\x0e)\xa18\xcbw\xa4T\x07\xfb\xfczYy\xbb\xceD\x15\x1c\xcfp\x1d\xfc\xb5\xd33\xb1\xc0\x15\x9e\x13J*\x03\xe7}\x91\xd4k\x98\x7f\xbe5\xd8\xda\x13\xfd\xed\xc5\xa1V\xa2\xb6S,h]\xdbpt\x8bp\x03;\xd0e\xfde\xc51Z`j\x86\x8a2\xc1\x94U$=F\xb4Z\x9a\x8a\xc99\xc1z\xae\xe4\xd0\xd0\x99\xeayP\x1av<\nY\xedC\x8e?\x8c[\xbf\x98\x1cu\xb2k\x8a\xf3\x1a\xcc/\xc3\x0c\x06\xb2l\xb0\xe1<\xae\xb9<>\x0fZ\x97E\x00\x1e\xf4\xb7\x9d\x0d+\xd9\xb9'\xba\x16\xf3\x88tZ\x960\x90\xd2\xa1\xd6\xb3a'[\xf0\xe0\xe6\xe3\x10\xc2\xdb\xa6U\x9bri\xc7\xf6\xa4\xbd\x8f\x01m\x98\xca;@w\xcb\x1a\x06\xd2=\xd0\x86n\xac\xe56\xe5[\xa7\xb3e\x10\x03\xe9\x1cdF\x1b\x06\xb3\x05\xcccX\x1d\x1e\xc85v\xf0\xbf\x8d\x15\xf2\xef\x03\xb1*\x0f\xfe\x97\xb1\xeb\xdf\x02\xda\x0d\xd16u\xbd\x9c\xcfq\xb5>\xd6\x1d5j\x82\xabd&\xdbo\xca\x15\xad\xa8\xf2q\xf4\xaa\xb9Te:`\x8f\x99\x02J\xac\xed\xa9\"e\x11u\xf1\x8f\x86E\x1b\xeb\n\x86\x90\x86\xc7e\xd2~G\xcf\x0bQe\xe8z\xfd\x01\\\xd1\xbb4\xbc5,D\xb9\xa3\xcbl\x9e\xe5\xb8\xca\xd7{\x0d\x0e\xd4\xaaP\xee4Qx\xa9\xa2\x96)\xd8\xa2d\x0c\xd3\xcf\xe2eD\xeb\xad\xcb\xe5\xab\x8a4\xe3\xb3#N\xc5}\xf7(+\xcc^/\xff\x81N\xa7\xc2|\xc4m\xa3\xa2Y7\xb2\x1d\xa2y\x9f\xc1\x9b\xcf\x18\xf5\xee*B\x97U\xc1\xfb\xc8\xb8@\x9b\xc6h\x03\x17\xe7ys_!S\xa6\xc4L\xf6\x05\xdfL\xd0k6\x19r\xb4\x83\xe6\xfdo\xce\xd1\xda\xf3\xa3\xc6\xf5\x8e\x875\xe3\xb5\xb1\xa0:\xff)\nq\x91\x1e4\x0b\xe2:\xb3\xf9\xd7\xda\\\xae\x01\xf5ON\xd0\x04\xa7\xe6\xad\x89\xfa\x11\xca\xa6\xc7&bW\xf6\x1a\xe5\"\x94/L\\\xa4\xa8(\x9d\xdc\x7f\xd3\x02 \xdb\xfa\xd0\xbb\x92-g\xde\xda\xa7\x9c\xda\xb2\xc4$\x89\xdfgI\xb0\xfc\x7f\xe6\x86Y\xa3\xb4,^Q\xc9\xf1\xa9\x90\xdf|#1\xe6I\xeb\xca\x18\xfe\xa4\xc3\xd5=4YRT\x94\xd4\xc1Ylu\x0c\xe8\x82\x11]\x0c\x9b\xa5\xcc\xc8\xd2\xb3\x85\xa5)\xc8\x7f\x99\x96\xa4fx\xce1M\xec\x8eY\xc6\xf7\xe6\x8c\xfcs\xad\xd3Um\x06-\xaf\xb8\xadb?\xbeUv\xbeu\xa1\xc3\x8b^\xf2%,\n\x12\x89\xfd\x01\xa9\x9d\x84t\xaf\xec\x98e\x11\x8f\x0c1~+\xac/\xed\x9f\xd6\x13\xfa\xaaFuvS`\xd1\xf6\xba\xd6\x83\x07\xe0\xc1,\xb9\x13tn\xec[e_\xb2Mu\xc0+\x82\x0b\xbe0K/\x08\xa6]\xa8=Z\xe4\xa7\x8ff\xbb\xe2\xe7l\xd9s\xbaY\xda\x88\x96\x0b\x94\x93\x15\xc9\xe5!!\x1e\xb7\xad\xce\xea\xc2F}\xd3\x06\xcd=\xd9\x8c\xcf<\xc8Y\x1e\xddC\xe2\xb2\xe9\x94\xbf\xf67\xba\x16\xc6-?\x1f9\x9at\x08\x0c\xec\xd3gp\xe5-\x0b\xe1R\xa43\x8dw\x9eq\x1fliu\xbe\xf4&\xdc0L\xaeq\x12n[1\xe2\xb1*b\xa3\xc3\xd7\xc1\x89f\x92*\x13\xc6\x08\xe7\x1c\xc3K:+\xab\xecAH\xc4\x8a$$[\x85\x16BS\x1a\x9b\xcfK\xb7\xcf\x80v1x\x80\xf08\x95k\xbe\xee\xae\xa3\xc7\xbd\xb1\xf9\xd0lT[\xf9\xb0\xd9\x17%\xe2[\x04\x05\xd7\xa6\xe1M\xb9\xa4\xb8Hq\x95\x9a\nCj0\xd1\x18\x7f\x8e\xab[GLS\xf3\xa8_\x87\xb6\x03\x9b\xb0z\xb9X\x94\x95Ut\x94c\xfeF\xc6\x9f`J\xabl\xb2\xa4\x04\xcd\xf1\x9a;\xe4\x03\x00'\x84\xc9\xeb\xe2\x86\xa4h\xb2\xe6\\\x90R\xbe),W\x16 \xb3D\x98\x9c\xab\x89#\x05B<\xd2\xeds\xcde\xeeuU\xe6\xf9r\x11\x9b\xd6\x98d\x87\xcf\xeb\xdfR\xec\xe3<\xd7[[\xad\xf4\xc6'\x9c\xd1Zo\xf1\x000u+\xa7\x84\xa5\x05\xe8U\xadD\xe64#y\xea\x8d6G*\x1c\x08\xe7u\x89H\x81'\xb98\x9d3Q\xabt\xd0\x7fr\xa7\xb2@P@\x0d\xcd}\xe3\xd5V4\xba'\x03\xc6\xb6K>*\xefh@xI\xe6\xb2\xa4F]fn\xf3\xa2\xa4\xccs\xc2M\x9c\xe6\xf2\xc1\x87##\x80\xaf\xa2\xb2 \xfa\xca\"\x80\xa8r\x95\x06\xe2_a\x94X\x80\x1a?\\\xac\xbc\x9c\xdf\xb7\xd2(\x19\xe7\x0f\xa2.\xaf\xb8\xb3\xeb1\xdd\xc4\x16\x13\xcd\x9b':\xb8*\x90\xe6x,\xd5t\xcbT\xc4\xb2E\x1b\x8a\x02\xf9v\x1a\x98\xf8G8\xd5nK\x04\x05\x85\x9b\x03A\x14*\xce\x13\xf3@\x83\xf8\x11\xce\xc1\x04\xb1\xa1/\x85\xd1L\xcb\xb1h\x1ba\x8a\xfb\xd2\xb6Q\xce\xa4c\x01\xf8\x05j\xbc\x08\x01\x0c\xf7.\xb4\x88h\xf5\xc0\xe9\x16\xd4q\\\xa1lY\xd0F\x8b\n\x80\xe6|+\xdb:R9 x\xc1\x83\xda\xf7I0\xb9\x0d\xad\x13\xf0\xe4L\x81\x88w(,\x18K\x8c\xff\x8d $\xb6\xca\x9b\x16\xaa\xb6F\xd0\xaf\x03\xe0\x9cj\x12\xce\xad'P\x10\xb0|\xfc\xf1\x17\xc6\x08Ka\x10\xa9#(\x0d\xcfji\x13\xadNE]*C\xde\x8cm\xa5\xc2Hl|,\x8f\xaa\x85\xf8\x08\x08\xc5\xd3\xa4\xc5\x03\x9a]\xe0V\x87\xc75\x8c;n\x9f\xe5\xa7\xbb\xe26\xa5\xd6=\xc5i@\xedR\\\xc5\xd6%\xe3}\x1b\x0f\xa9Cc\x9c=\xbb\xd9\xde&\xea\xd4R\x0fp\x8e\xe5\x8f\xc7\x88c\x80E2@=\xe0\xe2\x197\x9aa@mG8\xd3\x0dz2\xde\x00\xbb9P\xab\x88\x06\x8cC\xf2\x9f\xcf\x83G\x06\xb2\x8dC\xc2x'\xf9\x14\x84go2\x10\x9f\xc2\x81\x1b`\xe6\x0c\xa1z\x84\xd8\x8d~\xbbf\xa4\x850\x84\xd6\x8d\x827\xbc\x0b%@\xb2\n\x12\x1c\xb3\xfb\x90\x05\x14\x8d\xdd\xa1\x152\x93 ]\x89\x80\xfa\x12!H\xe8\xb5x\x80K\x03\xc1\xe5\x04\xdaN0\xb6x\xf4L\xc5u'z\x1c\xea\x00\xc7\x99\x16\xd2\xc35\xa9 \x0c\xc8'\x986E\xbb\xc7\xab1t+B/-Z\xe1\x94\x8f\xbcH\x86Q\xbe\xa1>A\xee%\xe4&\xbf\xd3\x9eg\x8c\xb3\x96\x13\xe8x'.w\x94\xda\x96\x0f`m\x9aF\xb05\x80\"\x04\xcau\xd4\xa3M]\xfcB\x0bu\\\x17Q\xe5\xd4\x99\xf6\xb8\x82\xda\x1dNm\xac\x98\xda\x00{\xf0)\xe9\xd5\x01l\x87x\xd6E\x1c\x01\xda\xce9\xbejE\xa8\x0f\xe5eLq\x01Y7\x9c'\x10\xa5\x15\x04\xb7 \xf5#-\x9c\xe1\xd4o\xa8\xb8\x00\xcb\xcb\xc5\n\x08\xbe\xd2\xe9\xe8\xef\x15\xa7}W\x8f\xd5,N\x0e\x18\xe8\x16\xa7\x7f\xa1\xab)\"_\xaf8\xa3\xbcb\xb0U\\\xe2\xee\xba#\x16\xc6\xe3F\xfe\x0bd|\xcbu$\xa5\xfd\xe8Q\x19\x07\xcd\xe2h\xc2\xa4\x05\xa9o\x10\xfa\x8b\x97\x1d\x90I\xe7AX22\xdfQ\n\xe3$\xafKt[\x94w\x05\xc2l\xfd~c\x86P0\\\xe3)\\\xc70\x8e5\x89\x07j\xfb\xa9{\x0f\x95q\xd0\xca*\x88\x88N\xcdk\xf4\x9a\xd7\xac\xcc\xe8\x0cM\xb3\x9c\x92\x8a\xa4\xe8v\xa54<%\x15\xa6e\xe5\x0f\x1b\x931\xe9Av\x81\x08\x94\x80\x94\xbc\xb1,_E\x99\x98\xea`\xe9\x06-s\xd6\xf6mT\xc9\xe3\xf4\xca\xe9TF\xc4\xd9M\x1c\xa1\xcc\x8a.\x8a\xd1\x1c2\xc0t \xe0RD\xe0i@\xa8s\xc3\xde n\xe4\xd3\xa1\xb6l\x14\x9a\x9c\xd8\xe0\xeff\xb8\x9e\x8dO*\x95\xdd\xdd9\x11\x85Q\xa3E\xad\xb5h\x1aEL(\xa2Ax\x01\xa6@V\xf0v\xdcbk\xe4_\xb3\x81y_\x91p\x14\x13{t\xa0\x1a/\x02o\xcffR\xce\xe7e\xc1\xc7\x0bG\x87\x8an[O\xc2\x0e1\xb4\x08TSd4\xb7\xa6\xb4\x84\\.\xabGW\x9eF\xaf\x05\xd8\xdf\x9a\xcbZ\xce\xa7\x03\xcd\x9a\xe0\xad\xadz\x98\xe8\xcd\x8aUy\x1bXKY\xb1X\xd2g\x9b\xba\x05\xd9\x05\xbd&\x1eb\xf4\xb5\x9f\xefl\xdaE1\"U\xb4\x9cM|\x9e\x15\xb7h\x82\x93[Y\xbc\x1d\x00\x89G+\xf0$\x0c\xbeh\xc2\xbe.]d=\xee\xec\xea\xc9\x02\xa0y \x1e\xf8Vq\x88o\xa9\xe8\x9bh\xf0o\xa0\x14\x8a\xaf5\xc5\x93<\xabg$Ua\x0d\xb1\xf0q\x88\x1c\xef\xc9\xa6\xbe\x94\xbb\x05~F\x12\x9eb`X\x15\x00x\x8cQ\xe8\xbc*\x17e\x0d\xe7\x81\x16\xcb\xdba\x04o1\xb9P8M\xb9o\x8fV\xcb\x84\xc7\x15q\x1bi\x8e\xabz\x16 _G\xa8\xa6\x98.\xa3[\xbf\x1f\xffOu\x16K6\x15f\x13\x17|\\D\xaae\xa8\x90\x06M\x80N\xb0\xf8\xb9\xe4\x11D\"Z\x9eM1\xbf/[,\xe3\xe2\xb9\x17\x8f\xe1Y\x90\x17_\xbf\x9c]\xfcq}\xfa\xfd\xfc\xc7\xd5\xf5\xe5\xd5\xc9\xd5\x8f\xcb^\x99i>\x18\xe7\x17g\xe7g\x97\x1b\x00\x10\xef\xa2\x9f\xeb\xcc\xbaM \xe9/\xc9\xa3\xcc\x83\xcc@\x04\x84\x91P\x05H\x0d\xe1q_8\xcf\xd2\x83e!\xce\x8bb\xdd\xb2\xb5\x03\xf882\x95n\x1e\xab\xbf\xb6S\xbf\x8c\x1dS \\M2Z\xe1j\xddH0^_P\x9f\xf9\xc4V\x18\x8e\xa3x\xe7\xc6P\xbcs\xe3\x97\x89\x0dmY`\x8b\x8a\xac\xb2rY\xe7\xeb\xceV7\xd2\xa5\x82\xb8JasU\xe1\xe4V\xf8\xc6\x84\xe5\xa4O\x80D\xe9$\xe8\xa9\x0c$\xbd\xccA:v6\xa3-\x99ed%\xba\x9b\x94K\x1a\x13;e\x01\xc2N@z\xb6V\xe1\x13\xeb\xfa\xff\x96z\x9e\xaaZ\xa8\x82\x9d\xb0\x02\x0c\xe2\x11_\x1ch/@\xdb\x0d\xf5\x04\x1a\xf4\x92\xc3Tt\xa9%\xd8\xb81\x9a\x03!\x00X\x93\xe9$y#\xb7rV\xdc\xa8\x869{S\x9c\xe5\xcb\np\x84DL\x0d/H\x91\x82&\xb2\xcf\xac\xf7Q\xba\x97?\xfe\x1c\xa4\xa5\xba_\x9f\x9f\\\xc2\x92\xe5\xed\xcf.\xff\xe7\xf4|\xc0g\xdfNN\xff\x8c~f\xe8\xe4\xa1t\x0e\xd3\xc6\x9e\xd1 \x93\xe2\xfd\xd8\xd2\xc0hY\xd4$n\xab\xf1{\x8d>\xf9\xf1\xdd)m3\x8f\xbd\xb3T\x181v\x13\xd3\xa0M\xe7\xa8!C\xb2\xe5\xd0\x1e\x92\xbd3\x86\xd4$\x1d$eQg\xa9\xf2>\xf0\xc1o3~\x7f\x91\x8a.Z\xf3\xac\xae\xd9\xe6\x94\xfa\xa8\xacPJr\xbc&)0E\xd1\x83$[|m$\xd9;/_\x9a\xabE'\xe6Lf\xf8B\xd1\xd5\x03\x15z\xe2Pu&\xe4\x13)\x12\xbc\xa8\x97\xb9FI\xca-~\x8a\x85\xf8\x11Qcy\x00\xb2\x8da8\n\x1c^\xd7\xbf\xa1\xa6Y\xfd2\xa7\\HK\x96\x157\x96\xb8\x8e\xcc\x12\xfb\xa98\xc8\xa8\x0f\x9a\xb2\xc2\x19\xcctx\x1e5\x93\xdaX*\x066w\x19\x00=[;\xcb+9K(\xc9\xcb#\x0f\xb8\xf8l\x9f\xe8+\x91r\xca-W>\xe5\x98R\x9c\xcc\xc4h:\xa3\x95\xedM\x82\x13\x7f!l{\xc7\xc8u\xcc\xcf\xee\xd1\xc4m\x8b\xc5\x12#\xc9\xb9\xb2\x90\x0e\x0d\xf9Zf;\xb9I\xd6\x8e\xabQ\x02\x95lh\x91\x08%#\x12\xc9\x0b\xd0Z\x02[\x8eH\x02\xf9\xf0\xb6\xb8Q\xf4\xf8\xde #9\xa1\xd1\xc0\xa1f\x1av9b\xa8\x8d\xe5\xf0P!\x0d \xc2\x12X`\xe2.\xb0e\x8cp\xd5f\xd9\x00\xd9#\x9c\x05Q\xdf\xe4.\xf0\xc7@U1Hz\xfd\xf8\xab\xadp\xe8 \"\xa2\x8c\x91c\xa1Pc\xec\x94g\x98\x0d\x01\xa0\n\xa4%\x10PS\xa0\x97d\x08\xf9<\x02u\xd1\xd3\xc1K2\xc4 ^\x8d\xa1]\x10zI\x86\x80S>\xf2\"\x19F\xf9\x861\xa5\xa8O2\x84\x94\xcbc\xa6B8@\x8e\x97\x08!\xed\xeb\xc7L\x83\xb0\xe9\x19\xc1\xb2\x00\x8a\x0e(\xbfQ\x07\xc7\xc8\xe9$\xbc\x0f\xfa%@\xb4&;\xae\x92v\x85G\x1b+\"\x1b\x1c\x98C[\x89_\xdf>\xb7\xb6\x95\xf60\x90\x8b\xcf\xe5\x08\xe4\xc0\xd7q\x0e\nB\x1a\x81a1}\x0ed\xd3P\xfaG\xd1\xe4P\xba;\x19\x15c\x9e\x91\x9c\xc0\xbdg%\x10(.pQ\x96\xfa\xcfLQ\x92A\x9a\x0e\x01\xb5\x1d\xea\x99\xf8\x87\xe0\xeb\x07\xc1\xb7\x1a\xea91\xa8G\" \x18P_]\x88\x86%\x04\xa2\x9d\xe5`LGF\x01\xd2^\xa9]\x08\x96\x10\xf5Ly9L\x83vA9\xb4hO\x08\xfd\xe6 \xa6;\xaen\xac\xb6\xa1\x9aI\xa1$\xf7\x10ys\xe3\xdbS\xe2\xa7\x87\xbf\xde\xdd\x90\xb7\x0f\xf8\x81.?\x1e\xd1\xfb\xa3\xfb\xa3<_\x1d\xdd'\x9f\x1fh}\xf7\xe1]\xfa\xeb\xdd\xcft5O\xf1\xc3\xf2\xee!\xc1i:\x9b}\xba\x99/\xdf\xcf\x93\x07\xf2\xde\x059\xec\xed\x1d\x89z\xed\xc7Mp\x81H\xc6+\x90O\x08\xc2|\xeb\x05\x89\xfe|\xf8\xf9\xf7O\x13\xfcn\xffh\xfa\xfeh\xff\xc3\xd1g\xbc\xff\xe9#\xfe}\x7fJ\x12|8y{t\xf8\x8e\xbc\x15%\xe8\x95\\K\xfc\xbd\xf1l.\x87p=\xfc\xf5\xe0\xe5\xf2\xaf\xfb\xfc\xf6\x8e\xe4NfF\x12(\xc7bgSa\xaf7C\x8f>\xbd}?\xfd4I\xf6?\xbe\xfd\xf8\xfb\xfe\x0729\xda\xff|t8\xdd\x7fw\xf8\xee\xf0\xe3\xef\x87\xc9;\x92\xb4\x18*\x06\xdb\x88\xa5\x02\xc4\xe1\xaf{/S?\xd7\xbf\xf2d\xf6\xbe\xbe\xbf+>|\xf8y\xf4\xf6\xe7\xc3\x0d\xfdT\xd5\xb3\xd5\xaf\xf5\xb4\xfa\x99T>rx;e\xc6\x84\xb2\xc8\xd7\x0d\x0bP\xc6\x13\xf7\x8c\xeb\x03\x9c\xd7\xa5\x0f?\xd9\xed\xc2)\xae\xfdg\xe5\xe8d\xca\x90\x0b\xf3\xf4*\xb2\xb7,\x9f\x1c-Q^\x96\xb7L:;\xa0\xc8d\x1f\xe1\x90\x0c\xe1\x11\xea\x03\x00[U\xd6PBHMs|\xc3\xd5\x86n\x1bP\xaa\x9fq\x12\xfcjR\x00\x91\x9aKF\x08\xd5\xa4\xd1.\xea\xa8V/\xca\xa2vFphtdr\xfb#\x11o&\xdb\xc7\xe8\x0f/\xf7z#\xf2\xc9\xbd@(x\x14\x1f\x8b\xfa\xd6`~\xe2\xe5\x0f9\xf6\xde\xcbL\x0e\x82\x07\xfb\xc4\x88T\\\xf7Z\x0dhD\"[\x83Af\xd8\x9b\xdf\xaba\x14h].+i\x9a\xd8$\x86\xb1\x92\xe9T\x17\x92;\xa8\x89\xae\x13\xffgT\xcb\x88l\x82\xfe\xb5$\xd5\xfa@\x15\xd7\xbd8\xff\xd2\x02&29\x9b\xe1U(\xad\xf13\x0b\x9b\x93\x02-\x0br\xbf \xb3\xaeDo&\xd7<\xd5\xc9\x8c\xcc\xb1=-^c\xcboh\xf1\x01\xba\x93\x1b\x10\xa0I\x99:\xa4\x9d\xf8\xc0Wc\\\x9dJ\xb3\x82\xbe\x7f\xd7a\x90\xa7>w\x00\x87\x94P\x9c\xe5;R\x04\x83}~\xbd\xac\xbcma\xa2\xca\x88\xe7\x8e\x0e\xfe\xday\xe6_\xe0\n\xcf %\x95\x81\xf3\xbeP\x98\x86\x89\xe2[\x83\xad\x1d\xd1\xdf\xa6\x19j\xc9h\x9b\xc5\x82\xd6\xb5_F\xb7Z6\xb0U\\\x16JV\x1c\xa3\x05\xa6f\x10&\x13KYE\xd2cD\xab\xa5\xa9\x9e\x9c\x13\xac\xe6\xaa\xe5K\xb7fi\x90\xf12\x1af\xc6\xa9 \xb8\x8c\x06\x9f\xb3\xc6=]1\x0e\xfcbB\xdb\xc9\x82)\xcek0\x0f\xd4\xc2\x002\xa0\xefQk\xd8\x01+d\xf7\x0f9@\x8d\xc8/\xcb\x8c\x052m\x98\xe9\xeb8k\x0e\xb1\xf8\x86\xd0\xde\xb6\x86:\xc4K\x13\xb4/\xfd}\xac_\xe4\x18\xe4\xe99\xd02e\x81\x0c\x18h\x007\xa6\xae\x05\xed1\xe8lY\xb3@:\x07\xd9\xc0\x86\xb5k\x01\xf3X\xbe\x9bSI\xf1\x8deR\xfcKB;`j\x90\x14\xb8H\xc8\xc1\x9cP\x9cb\x8a\x0fV\x87\x07r!\x1e\xfcocD\xfc\xfb@\xae;\x01\xe7\x86hc\xb8^\xce\xe7\xb8Z\x1f\xeb^\x155\xc1U2\x93\x8d-\xe5W\x8a\x1e\x1f/\xaf\x9a{F& \xf7\x98\x0eW:zO\xd5\xed\x8ah\x9f\x7f4\xcc\xd9X\xf50\x844<.\x96\xf6;*@\x087C\x0d\xe8\x0f\xe0:\xc0%\xfc\xada!r\x1f]f\xf3,\xc7U\xbe\xdekp\xa0V\xedo\xa7\xf6\xe2\xd5{Z6\\\x8b\x921l6\x8b\x97\x11\xfbg]._U\xa4\x19\x9f\x9dM*^S\x0fe\x85\xd9E\xe5?\xd0\xe9T\xd8}\xb8m\xa34\xebF6\x1a4]\xfc\xbc\xad\x8bQ\x02\xae\"tY\x15\xbcC\x8b\x0b\xb4iE6pq\x9e\xdbb\x98\x0d\xc3g\xb2/\xf8f\x82^\xb3\xc9\x90\xa3\x1d4\xef\x7fs\x8e\xd6\x9e\x1f5\xaew<\xac\x19\xaf\xa8\xd0=\xf5\x14\x85\xb8H\x0f\x9a\x05q\x9d\xd9\xfckm.\xd7\x80\xfa''h\x82S\xf3NB\xfd\x08e\xd3c\x13\xb1+{\x8dr\xe1\xc9\x17&.RT\x94N\xee\xbfi\x01\x90\x0ds\xe8]\xc9\x963o\x9aSNmYb\x92\xc4\xafx$X\xfe?s\xc3\xacQZ\x16\xaf\xa8\xe4\xf8THn\xbe\x91\x18\xf3\xf8g\xd6\xf0'\x1d\xae\xee\xa1\xc9\x92\xa2\xa2\xa4\x0e\xceb\xab\x16\x7f\x17\x8c\xe8\x0f\xd8,eF\x96\x9e-\xf6G\xbdg\xd2\x92\xd4\x0c\xcf9\xa6\x89\xdd\x8b\xca\xf8\xde\x9c\x91\x7f\xae\x95\x0bc\xaf1\xb4d##i\xa1\x88\xaeCTWC20\xbc$\xb4e\xd1I\x8a:f\x0ecW%\x92O-\xc3\xc6\xb2\xeb\xec\x85\xa6U\x83.\xa4u\x9aj]\xf2\xf1\x1f\x8a,\xa1\xfc\x0d-\xf6\xea\xdd\xdb\xb7\xaf\xfc\x0e\x19#\x11w\x9b\x9e\x18\x8f\x1b9\xee@\xd3\x961\xe3\x8f\xae;\x9a\xa8\xe6N\xbc\xe8h\xdd\xb2\xf8^g\xaeP\x07\x7f\xd5\xd1\x8d.\xf2\xa2\x0e\xf2@\x98O\xcc\xf9\x12\xbb%C0\x17\n0p\"\x9e\xa9\x89\xd0\x0fQ\xf5\xf3\xf4\x8f\xa6h\x83\xd8\xee\x08\x9d\xce\x179\xefqW\xa3:\xbd}s\x12\xc9C\x94:k\x8a\x13\xe1n\xe4\xe50\x85\x98\x12_\x12\xb1\xd7\x94\x05\xd76\x02\xed\xe7KY\xcfK\xdf`58m\xf7q\x99\xd9H\x98\xba\x9bm\xab/\xdf\xc3!\x01\xd6\x97\xc2\x94\xe4e9\x88\x9a\x0b\x9c\xe7\xe5\x9dTc2\xcd9\x04\xaes\xb2l\x1e\xde\x11=\x10\x8a\x16rO\xaa'Z3%\xbag\xc4\x13\xdf9\xe2\xc1\xdb\xaa\xe7\x89\xdd\xad0_\xab\xfc\xf7p\xb9\xb2\xaa\xcc\xa3u\xca +H<\x98\xc3kv\xa4B\xc6\xa8\xcd\x9b\xc8\xaa\xb5\xc0 0\x99!O\x00\xb5:{1\x0fVs\xc4j\x84\xde\xa7\x0c\x87\xdd\x07\xff\xe2\xf4\xbfN\xbf\x9f\\\x9d]\xf4\xfb\xee\xf2\xeb\xc5_\xa7_\xbe\xf6\xfc\xea\xf4\xfb__/{\x8f\xf5\xe5\xc7\xe5\xd5\xd9\x1f\xa7'\xdf\xfb}v\xf6\xf7\xf7\xbe\xf8\x9d|\xfbv\xfa\xe7\xe9\xc9\xd5\xd7~\x9f\x9d\xfd\xbf\xef\xa7\xff\xfc\x11\xaf\xd8\xe2i\xfa\xdf\xef\xbb\xa6\xdf~\xbf\xeftW\xfc\xc8g\xba\xd0\xcb\xa0\xe5\x15\xb7U\xec\xc7\xb7\x8a\x07\x0e\x8f\x90l\xf9\xcf/\xcdz\x14l\xf1l\x8ac\xf7k9\n\xaey\xe7\xce*\xbb\xc9\nL!u+\x9d{\xe8\xd8\xf5R\x19\xeb5J\xc9\x84\xa2\x9aT\xab,\xc9\x8a\x1b4]\x16 \xed8\xf6\xe2\xa3\xa9\xbdw\xecz)NK<\xa4+KPV\xacH\xdd\x9f\x1e\xbdO\x8f\x9do\xd5\xd4\x144\xa3k\xa1\xbe5\x8d\xc9\xb2\xa6e\x9a\xe1B\x12*\xfd=\x9c\xc1} \xe5\xfb\xfe\xb8\xf3\xa6]+n\x81+\xba\x968q\xa5\xad\xb4\x14\xd3\xbe=\x87\xd4r\xe3\xd8\xf9VpW\x0c(\x0e\xca\x05\xc2\xd3i\x96\xf3\x9e\xff\xf8\xa6\"\xdc\x0c\xe99\xa8\x94:\xc7\x8ewb@n\xf5\xe0\\\\V\xcb\xfe\xb2\xeb\xc6n\xaa\xca\\\x10?/\xb2\xc9\xb2F\x13\\\xdc*\xad\xd8\x13\x95F\x96\x1d\xbb_3\x84TU\x145\x0f\xe64TdQ\x91\x9a\x9bbl\n\x9a\x8a|\xd2\xb1eW\x85\xc6\xc9\x80M\xdd\xc8\xcdc\xf7k{}\xde\xcd\xb2df\xf0I\xdb\x90j\xd7\xeb\x82\xb5\x19A\xa4(i\xa4@u\x17!-\x90\x8f\x9do]\xe8\xf0:\x90| \x8b\x1a=b\x7f@\xca !\xdd\x85:fY\xc4\x03:\x8c\xdf\n\xebK{\xa6\xf5\x84\xbe\xaaQ\x9d\xdd\x14X4\x94\xae\xf5\xe0\x01x0K\xee\x04\x9d\x1b\xfbV\xd9\x97lS\x1d\xf0\"\xd9\x82/\xcc\xd2\x0b\x82i\xd7.\x8f\xd6\xbd\xe9\xa3\xd9\xae\xf89[vsn\x966\xa2\xe5\x02\xe5dEryH\x88\x872\xab\xb3\xba\xb0Q\xdf\xb4AsO6\xe33\x0f\x06\x96G\xf7\x90\xb8lz\xd0\xaf\xfd-\xa4\x85q\xcb\xcfG\x8e\xbe\x15\x02\x03\xfb\xf4\x19\\y\xcbB\xb8\x14\xe9L\xe3\x9dg\xdc\x07[Z=%\xbd9(\x0c\x93k\x9c\x84;9\x8cx\xac\x8a\xd8\xe8\xf0up\xa2\x99\xa4*g1\xc29\xc7\xf0\x92\xce\xca*{\x10\x12\xb1\" \xc9V\xa1\x85\xd0T\x8b\xe6\xf3\xd2-\xbd\xaf]\x0c\x1e <\xc0\xe4\x9a\xaf\xbb\xeb\xe8qol>4\x1b\xd5V>l\xf6E\xd5\xf4\x16A\xc1\xb5ixS.).R\\\xa5\xa6\xc2\x90\x1aL\xb4\x9c\x9f\xe3\xea\xd6\x11\x8c\xd4<\xea\xd7\xa1\xed\xc0&\xac^.\x16ee\xd5\xe1\xe4\x98\xbf\x91\x81#\x98\xd2*\x9b,)As\xbc\xe6\x0e\xf9\x00\xc0 a\xf2\xba\xb8!)\x9a\xac9\x17\xa4\x94oj\xad\x95E\xc2,\x11&\xe7j\xe2\xc8\n\x10\x8ft\xfb\\s\x99{]\x95y\xbe\\\xc4\xa65&\xd9\xe1\xf3\xfa\xb7\x14\xfb8\xcf\xf5\xd6V+\xbd\xf1 g\xb4v\xdfE\xdb\x8f\xba\x95S\xc2\xd2\x02\xf4\xaaV\"s\x9a\x91<\x0d4\xddW\xd3\x91\xd7%\"\x05\x9e\xe4\xe2t\xceD\xad\xd2A\xff\xc9\x9d\xca\x02A\x0154\xf7\x8dW[\xd1\xe8\x9e\x0c\x18\xdbD\xc3}^\xe4\x9f\xf0*\xc5eI\x8dR\xc5\xdc\xe6EI\x99\xe7\x84\x9b8\xcd\xe5\x83\x0fGF\x00_EeA\xf4\x95E\x00Q\xe5*\x0d\x84\xad\xc2(\xb1\x005~\xb8X\xc55\xbfo\xa5Q2\xce\x1fD]^qg\xd7c\xba\x89-&\x9a7Otp\xa1\x1c\xcd\xf1X\xf6\xe5\x96\xa9\x88%P6\x14\x05R\xd040\xf1\x8fp\xf6\xd9\x96\x08\n\n7\x07\x82(T\xaf&\xe6\x81\x06\xf1#\x9c\x96\x08bC_\n\xa3\xc9\x87c\xd16\xc2\x14\xf7\xa5m\xa34B\xc7\x02\xf0\x0b\xd4x^>\x0c\xf7.\xb4\x88h\xf5\xc0\xe9\xd6\x98q\\\xa1lY\xd0F\xf3\xecAs\xbe\x95m\x1dI\xa6\x0f^\xf0\xa0\xf6}\x12LnCS\xe7\x9f\x9c)\x10\xf1\x0e\x85\x05c\x89\xf1\xbf\x11\x84\xc4Vy\xd3B\xd5\xd6\x08\xfau\x00\x9cSM\xc2\xb9\xf5\x04\n\x02\x96\xa2>\xfe\xc2\x18a)\x0c\"u\x04\xa5\xe1Y-m\xa2\xfd\xb9s!o\xc6\xb6rX$6>\x96G\xd5B|\x04\x84\xe29\xb8\xe2\x01\xcd.p\xab\xc3\xe3\x1a\xc6\x1d\xb7\xcf\xf2\xd3\x8db\x9b\xea\xe3\x9ez-\xa0\x0e\"\xae\xfa\xe3\x92\xf1\xbe\x8d\x87\xd4\xa11\xce\x9e\xdd\xec\xf8\x12uj\xa9\x078\xc7\xf2\xc7c\xc41\xc0\"\x19\xa0\x1ep\xf1\x8c\x1b\xcd0 \x9e\xa1'#a1\x0d\x1bD5\x0c\x8fk\x18\x1a\xd904\xb6apt\xc3\xa0\xf8\x86\xc1\x11\x0e\x03c\x1c\x86G9\x0c\x8fs\x18\x18\xe9\xb0i\xacC? /\x1eo\xbc\x03\xe0[\xf7\x97C#\x1e\x1e-\xe6\xe1\xb1\xa3\x1e\x1e#\xeeag\"\x1f\x9e$\xf6\xe1\x89\xa2\x1fv*\xfe\xe1yD@\xec`\x0c\xc4\xd3FA\xc0\xe3 \xa0\xf7e\xfa\xd7#\xc6B\xc0m\xc1\x91\xe2!\x06ED@\xb1\xd4w\x83\xd2YBx\xd3,Q\xfb\x8c\xffAf\x06\xdd\x14\xbc\x98X\xa4m\x7f\x14\xad\x91\xea\xe7\xc2h\xe3\x194\xb4l\xd8g^\xc8\xcb{CX\x7f4i\xae\xef1\xfc\xb2\x04\xe7\xf9\xba\xe9\x8c\xef\xfdP~4\x02\xb9[8\xd3\xaa\x03\x88Hc\xcdH..\xcf\x99\x86e*=\xc93R4\xe7[\x1e\xd9\x10\x84\xd7]\xa2\xd1C-^\xa6Y\x90;}\xe8\xf9\xc2\x8f\xd3)\x9a\xac\xf7\xd0r\x91\xea\x7f\xd3lNj\x8a\xe7\x8bzO\xbb\xc3De\xbep\xe7J\x91\xa2\x95\xcb\xdej\xd3\xd2O\x06\xf8\xc4\x0c=/\x0b\xcf@z\xcd\x88\x88 B\xe0\x02B\xc6\"b`\xf7\x19[b\xa0\xc5\x1e\x93\xf1F\xe4\x80}\xc2$\xa8\xbc\xfb'\x05\xad\xd6\xbc\xa3\x9a\xc4\x17D\xd3d=\"E0)\x80P\xa7\xb3\xbd\xe9'\x10&\x87\\=Q\x01\x87t\xe0W\xf0gr\x05>\x9b)\xccqM\x15\xd2 \xc2vt\x1ey\xf8\\6\xe2DJ\x91\x01#\xd6W^\xc9~\x8cbK\x1f?\xc4\xe0\x829\xc3lei\xbb\xb4\xe4\x9c\xe0\x0c/\x19\x9eT\xdc\x9a\x07\xf8\x8f\xb8\x0c'8\x99\xc9\x19\x0f~\xe0-\x11e?[Y\x11&\xdd\x12\x0fG\x04^l\xa3H\x01\x95\x95\xc5\x81\xa0\x17\x91U\xf8\xd8\x03\xc3\xf0\x84\xa9\xb8oL\xbb\xd6(\xc1\x0bae:\xa3p\xd8\x0e\x0c\x82\xd2\xeb\xbcDs|K\xe4RWYsL]\xc9\x8dM\xd6\xe8\x8eT\x91\x19\xc3\xa9\xef\x07P\xa5{)\x0d(\x1d/e\xd8R\xda\xba\xc078+jj\x9cN\xbc\xf0lW:\xfb\n\x17 D\x93]\x19nT\x9e\xa3>\xc3+b\x8c$9\xccc\xc4\xa8:bf\xc4/\x16\xb2bU\xe6+;\xc1\xbd\xfd|?c'\xe9\xbf%\xa7eFzQ\x8a\xd0\xae\x0b+\"\x18a\x19Qf\xa5\xf1\xb7\x9f&\xbe\x0c+\x96\x8a\xc4m\xc5_\x9eT?/W\xbe\xbe\xb9\xcd\xa5\xcd(\xbdtZ\xe0\x86E88c\x1c\xc2\xe6 \xc0\x86\x82\xd8O\x8f\x7f\x85\xd5\x0e\xc4\xb2\x8a\x1c\xb8\x03\x18\xecB\x1c~\xcb\xd2\x98\x8bXd\xc2Vi\x8a\x08\xb9\x0e\x9aC\xc3\x13\x90U6!\xfe\x1bP|\xda\x8ep\xa6\x1b\xf4d\xbc\x0168\xa0V\x11\x0d\x18\x87\xe4?\x9f\x07\x8f\x0cd\x1b\x87\x84\xf1N\xf2)\x08\xcf\xded >\x85\x037\xc0\xcc\x19B\xf5\x08\xb1\x1b\xfdv\xcdH\x0ba\x08\xad\x1b\x05ox\x17J\x80d\x15$8fC\x1e\x0b(\x1a\xbbi)d&A\xba\x12\x01\xf5%B\x90\xd0k\xf1\x00\x97\x06\x82\xcb \xb4\x9d`l\xf1\xe8\x99\x8a\xebN\xf48\xd4\x01\x8e3-\xa4\x87kR\x13\x18\x90O0m\x8av\x8fWc\xe8V\x84^\xba\x96\xc2)\x1fy\x91\x0c\xa3|C}\x82\xdcK\xc8M~\xa7c\xcd\x18g-'\xd0\xf1N\\\xee(\xb5-\x1f\xc0\xda4\x8d`k\x00E\x08\x94\xeb\xa8G\xe7\xb6\xf8\x85\x16\xea\xb8.\xa2\xca\xa93\xedq\x05\xb5;\x9c\xdaX1\xb5\x01\xf6\xe0S\xd2\xab)\xd6\x0e\xf1\xac\x8b8\x02tbs|\xd5\x8aP\x1f\xca\xcb\x98\xe2\x02\xb2n8O J+\x08n\x13\xeaGZ8\xc3\xa9\xdfPq\x01\x96\x97\x8b\x15\x10|\xa5\xd3\xd1\xdf>M\xfb\xae\xb6\xd0?\xcd\x89\x93\x1c0\xd0UM\xffBWSD\xbc\x98\xa2\x03\x98Q^1PL\xd1*\x7fl>ba\x1dj\xcbF\xa1\xc9\x89\x0d\xfen\x86\xeb\xd9\xf8\xa4R\xd9\xf0\x9c\x13Q\x185Z\xd4Z\x8b\xa6Q\xc4\x84\"\x1a\x84\x17`\nd\x05o\xc7-\xb6F\xfe5\x1b\x987w\x0fG1\xb1G\x07\xaa\xf1\"\xf0\xf6l&\xe5|^\x16|\xbcpt\xa8h\x93\xf5$\xec\x10C\x8b@5EFskJK\xc8\xe5\xb2zt\xe5i\xf4Z\x80\xfd\xad\xb9\xac\xe5|:\xd0\xac \xde\xda\xaa\x87\x89\xde\xacX\x95\xb7\x81\xb5\x94\x15\x8b%}\xb6\xa9[\x90]\xd0k\xe2!F_\xfb\xf9\xce\xa6]\x14#RE\xcby\xff\xa4\xac\xb8E\x13\x9c\xdc\xca\xe2\xed\x00H\xfbvr\xfag\xf43C'\x0f\xa5s\x986\xf6\x8c\x06\x99\x14\xef\xc7\x96\x06F\xcb\xa2&q[\x8d\xdfk\xf4\xc9\x8f\xefNi\x9by\xec\x9d\xa5\xc2\x88\xb1\x9b\x98\x06m:G\x0d\x19\x92-\x87\xf6\x90\xec\x9d1\xa4&\xe9 )\x8b:K\x95\xf7\x81\x0f~\x9b\xf1\xfb\x8bTt\xd1\x9agu\xcd6\xa7\xd4Ge\x85R\x92\xe35I\x81)\x8a\x1e$\xd9\xe2k#\xc9\xdey\xf9\xd2\\-:1g2\xc3\x17\x8a\xae\x1e\xa8\xd0\x13\x87\xaa3!\x9fH\x91\xe0E\xbd\xcc5JRn\xf1S,\xc4\x8f\x88\x1a\xcb\x03\x90m\x0c\xc3Q\xe0\xf0\xba\xfe\x0d5M\xe6\x979\xe5BZ\xb2Ltk\xd5\xe2:2K\xec\xa7\xe2 \xa3>h\xca\ng0\xd3\xe1y\xd4Ljc\xa9\x18\xd8\xdce\x00\xf4l\xed,\xaf\xe4,\xa1$/\x8f<\xe0\xe2\xb3}\xa2\xafD\xca)\xb7\\\xf9\x94cJq2\x13\xa3\xe9\x8cV\xb67 N\xfc\x85\xb0\xed\x1d#\xd71?\xbbG\x13\xb7-\x16K\x8c$\xe7\xcaB:4\xe4k\x99\xed\xe4&Y;\xaeF T\xb2\xa1E\"\x94\x8cH$/@k l9\" \xe4\xc3\xdb\xe2F\xd1\xe3{\x83\x8c\xe4\x84F\x03\x87\x9ai\xd8\xe5\x88\xa16\x96\xc3C\x854$\x08K`\x81\x89\xbb\xc0\x961\xc2U\x9be\x03d\x8fp\x16D}\x93\xbb\xc0\x1f\x03U\xc5 \xe9\xf5\xe3\xaf\xb6\xc2\xa1'\x88\x882F\x8e\x85B\x8d\xb1S\x9ea6\x04\x80*\x90\x96@@M\x81^\x92!\xe4\xf3\x08\xd4EO\x07/\xc9\x10\x83x5\x86vA\xe8%\x19\x02N\xf9\xc8\x8bd\x18\xe5\x1b\xc6\x94\xa2>\xc9\x10R.\x8f\x99\n\xe1\x009^\"\x84\xb4\xaf\x1f3\x0d\xc2\xa6g\x04\xcb\x02(:\xa0\xfcF\x1d\x1c#\xa7\x93\xf0>\xe8\x97\x00\xd1\x9a\xec\xb8J\xda\x15\x1em\xac\x88lp`\x0em%~}\xfb\xdc\xdaV\xda\xc3@.>\x97#\x90\x03_\xc79(\x08i\x04\x86\xc5\xf49\x90MC\xe9\x1fE\x93C\xe9\xeedT\x8cyFr\x02\xf7\x9e\x95@\xa0\xb8\xc0EY\xea?3EI\x06i:\x04\xd4v\xa8g\xe2\x1f\x82\xaf\x1f\x04\xdfj\xa8\xe7\xc4\xa0\x1e\x89\x80`@}u!\x1a\x96\x10\x88v\x96\x831\x1d\x19\x05H{\xa5v!XB\xd43\xe5\xe50\x0d\xda\x05\xe5\xd0\xa2=!\xf4\x9b\x83\x98\xf2@\xfdX\xbe\x19\x1f\xa3\xaa$\n\xafw\xba%\xea\x9dt\x88\x1e\x93##\x1c\x16\x01Kuh\x12\xa2\xb8\x16\xf6\xe7 \xca\xe3\xdc6R\x10\x05\xe8@\xb2\xa1\x1c[^\x03w3\x07yNaw\x9e[\x83\xf0_\x898\xba\xa4\\\xac\x1b3M\xfc\xc1\xceOB<\x9b\xd17dD\x8f\x87\xb5w\xd4\xf9\x1d]\x91\x90\xf9\xec\xb8\xba\xb1\xda\x86j&\x85\x92\xdcC\xe4\xcd\x8doO\x89\x9f\x1e\xfezwC\xde>\xe0\x07\xba\xfcxD\xef\x8f\xee\x8f\xf2|\xf5\xff\xb1\xf7\xaf]r\xdbF\xc28\xfe>\x9f\xa2~z\xb1\x927\xa3\x96%\xdb\xc9F\xcf\xe3\xe7\xacnvf\xa3\xcb\xac4\xca\xee\x9e=\xf9\xb7\xd8\xdd\xe8\x19f\xd8d\x9bdk4N\xf2\xdd\xff\x07\x00A\x12$.U {,9\xa87\xb6\xa6\x89\x02P(\x14\nu\xc3w\x9f\xd6\x7f\xf8\xb9\xae\xae\xbf}\xb4\xf9\xe9\xd1_7\x1fw\x9b\xe4\xe7\xc3\xf5\xcf\xebd\xb3\xb9\xbc\xfc\xb7\x8b\xdd\xe1\x9b\xdd\xfag\xf6\x8d \xb3\xdb\xda;\xd3\xec[;\xee:\xc9\x81\xa5\xa2\x02\xf9\x8aA\"\xb6\x9es\xd2\x7fx\xf8\x87\xdf\xff\xdb*yt\xff\xbb\xed7\xdf\xdd\xff\xf6\xbb?$\xf7\xff\xedw\xc9\xef\xefo\xd9:y\xb8\xfa\xfa\xbb\x87\x8f\xd8\xd7\xb2\x04\xbd\x92kk\xfb\xdbx:\x95]c}\xf8\xd3\xcfV*\xff\xf4)\xbb\xbaf\x99\x91\x98\x9e\x04\xca\xb9\xc8\xd9U\xd8#\x13\xf4\xbb\x7f\xfb\xfa\x9b\xed\xbf\xad\xd6\xf7\x7f\xf7\xf5\xef~\x7f\xff[\xb6\xfa\xee\xfe\x1f\xbe{\xb8\xbd\xff\xe8\xe1\xa3\x87\xbf\xfb\xfd\xc3\xf5#\xb6\x1e\x10Tv6\x89\xa4\x12\xc5\xc3\x9f>Y\x89\xfa\x87\xea\xa7l}\xf9M\xf5\xe9:\xff\xf6\xdb\xbf~\xf7\xf5_\x7f\xbe\xa8\xff\xad\xac.?\xfet\xb3-\xff\xba.m\xd3\x11\xcf)s\"\x14yv\xd3\x91\x00R\x91\xb8\xd7s\x1f$YU\xd8\xc6\xd7\xbcva\x14\xd7\xf6\xbb\xb2w1\x9b\x90\x8b\xfe\xedUfoi6\xb9\xba\x80\xac(\xae\xb8t6`i\x92}\xa4A\xd25\x0e\xd7;\x008\xae\xd2\xba\x92Bj\x9b%\x17\xe2\xd8h\x9f\x0d(\xd4gb\n\xf6cR\"iN\xae&B\xa8b\xdd\xe9\xa2\xaej\xd5\xbe\xc8+c\x04G;\x9c&\xb9\xfd\x96&\xdfO\xb6\xf7\xcd\xdf\xcd\xee\xd5\xa4\xe9\xb3Or@\xce\xab\xf8\\\xb3\x1ftf\x9f|\xf3\xa1\x18\xbd\xd5\x99)P\x88`\x1f\xdf$\x15\xd5\xadZ\x03\xcc8\xc9Ag\x98\x15\xb6\xe6\xf7\xb68r\xb8)\x0ee\xa3\x9a\xe8St\x8f\xaaI\xa7z\xdbP\x07\xba\xe8:\xf9o>\xeb&\"\x9b\xc1\x7f\x1eXy\xf3@\x15\xd7}{\xf6l\x80Lfrv\xdd\xabP\xda\xdeg\xdah\x9e\xe4p\xc8\xd9\xa7=[s\xedJ\xbe\xcddZ\xa7j}\xc9v\x89\xbe,Ve\xcb\xaeh\x89\x0e\xc6\x8b\xeb\x10\xa0\xebbc\x90v\xb2\x81\xad\xc6\xb8\xba\x95\xa6y\xfd\xcd\xa3\x11\x81,\xf5\xb9\x1dc\xd8\xb0:I\xb3\xcf\xa4\x08\x06o\xbe<\x94\xd6ga\xbc\x87\x91\xc8\x1d\x0dnm\xbc\xf3\xef\x932\xd9\xb1\x9a\x95\xbd1\xdf\x97\x07fOE\xb1\xf1\xe0`G\xd0u\x9aPM\xa6\xd5Y4lc\xfdev\xade\x82\xaeb\xd2P\xd2\xfc1\xec\x93\xba\x1f\x84\xc9\xc5RZ\xb2\xcdc\xa8\xcbC\xffx2.\xb0Z\xab\xde\xdd\x04\xb9X\xc1\xb7\x99y\xef0\x9c\x02?q\xd1h$\xc16\xc9*4\x0d\x14\xf9\x91\x04\xa0^h\xc2\xae1.\xed:\xe4\x9a2#\xbd\x06\xfe\x17\x8dVx\x85\xf7H\x83\xd34Y\xe4\x8a\x86i\xbf\x86\xebf\x88\xd2\x172\xf7\xa1B4\x9a|\xa3\x85R\xe7OQ\x80\xc1\xd0\xc9/O\x81\x816\x8b$@\xa0\x0e\xdci\xbb\x1a\xb6\xdb\x98\xe7@\xa1E\xce3H\x0d\xee)\xbc\x1a2\x8b\xf2;}\x96ur\xa1i\x15\xff\xd9`{\xc0OB\x96'\xf9\x9a=\xd8\xb1:\xd9$u\xf2\xe0\xe3\xc3\x07\x8a\x11\x1f$Y\xa3#]\xb0V\xff\xad\x0e\xbb]R\xde\xdan\x04\x0cKI@V!C\xafq\xf3q|\xb4\xdd\xde\x84BH|\xe6t\xe0\xfb\xd9\xc3\x17}\xe3\xa3\xed\xc6F\xf1\xd1\xf6>\xc4G\xdb\x0d\x1b&>\xdaN\xee#>\xda\x1e\x1fm\x8f\x8f\xb6\xc7G\xdb\xe3\xa3\xed&\x88\x8f\xb6c*\xa2\xac\xe3\xa3\xed\xf1\xd1v+ o\xcc\xd8\xfbr|\xb4\x1d9#\x9c\x14\x00\xf0?\xf6\x1d\x1fm\x8f\x8f\xb6\x1b!>\xda\x1e\x1fm7\x02n\x84\xf1\xd1\xf6\xf8h{|\xb4\xbd\xef\xe1\xb6\xe9Q\x08\x1d\n\xa3?\xdd\xbe\x0bk@\xda^\xf8\x95\xb5\xd6\x8a\x1e>e\xd7,{k\xe1O\xe3;\xe2\x9c\x1fJM>\x98\xf0\x95/\x10u!\xbe\x10\x9a\x8d\x07\x0e\x88\xda+\x86V\xf1\xd1\xf6\x06\xa6\xcc~&\xc6 \x9f\xfd\xc4\x83\x0b\xc1^&R`\xc6\xfb\x8b>\xda\xde\xe0\xae\x84M\x95\xd3f\xf8,\xfb\xb0\xfd\x97V#%\xa6\xa2+\x98k\x92A98\x16\\\x98Tt \xfbD\xc4WZ\xfd\x82\xb8\xb1wXZ\x1fJ\xeb\xc9\xea\xfd\xd6%\x07\xab,v\xf7\xf8\xcdR\xd0\xab\xdd\xf9u\xbb+\xe6\xf0\xf9\xa2d&\xea\xa8\xc5\x11\x0f\xe4\x80\xe4\x82\xcb\xe7|KV\x1f\xca\\\xdaR\xce\x92\x0b\xa6*\x02,r\xf6\xa9^\xf2\x8f\xeb\xc2\x81m\xc5.\xd2\xdc\xee\xf8\x01\x99\x87\xa5\xde\xe8\xe18\xf9*1\xd8\x15U\x0dl\xbbM\xd7)\xcb\xeb\xecf\x01o\xf2\xec\x06\x8a\x9c\xb9\xcf\xb0b\xbb\x95\xc1\xba|\x1e\xae~\xab\xcb\xe2\x90m`%\x82\xb3lg\x9c\xc46\xd3\xfa\x1c\xdc\xaei\xfc\n5s\x14\x8b\x94\x1fv\"\x8e\xb7\xf9\x9b\x0c\xbbHr>/\xf9`\xe2%\xcb\x05)\xec\xe8\xd2\n\x0ey\xf21I\xb3d\x95\xb9\\\x83\x00\xa7\xa2\xd7L\xbcz\xa7\xd6\x86\xf7\x99\xc3A<\x8du\xc5\xc2\x16\xaaY\x0dW\xd7\xee\x85\xca\xd2\x9d+\xe8\xe9\x97Y'1(\xa5\x91\xd4E\x9dd\xbdze\xea\x9d\xaa\xba\xe0S\xeb\xed2\x07\xc2\xba}\xdfJl\x12\xf7Rm!c\xdb\x1a\xd8n_\xdf@\xda8s\x9b\xe8\x7f\xf9Z\x92\xdc\xe0r\x00|-V..\x11Q\x0b\xc9~o[\x01\xe1F_\x8aY\xfa\xd6\xc1\x17^\x8a\xa7p\xafS\x10\xd1\x87bfuy`0\x08:N|\xb5[\x1b\xbar\x14\x8dhh\x0e7\x17\x91\x139\x02\xa5\xfa\x0c\xd7X\xa4\x85A\xbb\xb5\xc0\\CIA\xeftJsx\x7fZ9\xd7w0uQ\xb3\x81+\x10\xb2f\x8a\xd8\xf6\x9d\x9c\xe0\xa2`\x01\xa7\xae\xfbvZAz\x91\x17e_f\xb8?wl\xc7\x92\xf1\x0b\x87#tenFh:\x1c2A\xda\xed\xb3\xa4d\x83\xbd\xe6\x9a\x9d\xf4\x1b\xf0\xfe\xe5\x9b\x9aP\x94\x1bV\xbaB\x18\x00\xde\xa5\xf9\x9a=\x86uQ\xed\x8a\xea~\xb5\xb9\x82\xaf\x17\xdf~cl\xe0\x0bs\x91\x07m\xab|\xc9q\xb3\xdd\x8am6\xf2$\xbex{\xf6\xacU\xad\x9a\x00\x9d\xca\xc1_\xad\xb4\xb6\xd6\x18k\x99o\x01/FF\x13\x97j\xe6_\xa4\xbe\xda\xa5r@\x84\x95\xa3\xcf\xf0\x9dQNl&\xa3>iW\x90'\\\x1f\x94\x1e\xe3R\xa9\x1d'\x87W\xfb\xd2\xe8\xf3w\xdb\x8a\xb7\xdaTs\\H\xc5\x8a/\xfb>\xa9\x9a\x1c\x8a\x1eW,\x9c\x8a\x97\xd0\xa9\xbc\n\xd5is&\x08\xd6\x12\x87\x84\xed\xbc\x1e\xc7\xe4X\xefq\x00\x8e#\x00ML\xc7\x11\xec\xdb:\xadD\xb4\x1d\xb8\x9d8\xb6\xce\xb7O\xe8\x9e\x9c\xb5\xed\x1d\xf1V(\xabO \xad\xab\xe6P\x15:\x95\xbc\x7fl\xa0\xe0\xf4\xbbN+\x9d?\xdc\xfb\xa6\x97\xd3O\xa9\xc15.\x05\xa0\x80\x0b\x8cX\x87+\xd6\xe1\xf2\xec\xc0[\xae\xc3\x15k\xa1\xb8\xe6\x19d\x87\xb9\xf5Z(\xdd,{J\x84~\xe5t\x9d\x81\x01\xf6\x86\xc6\xaa\xd0\xc7\x12bF\x18\x18\x0b\xfa\xe8\xac\xd6\x81\x10r\x8d6\x8cQg0\x10Q\x8e\x0f\xc9,!V\x01\xf7\xdd\x9fz\xdb\xf7\xd2SG\x7fd\xe2\x0et\x08\x03y\xc5\xfd\x1cI\xdd\xb0\xbb|\xef\xc6\xaea3\xdc\xde\x83\xee\xeb\xc6[\xf9-S\xb1\xaf u\xed]\xb4\xa4\xde\xda\xc7ws\x0d\x9d\xf1\x9eN\xbf\x99\xeb\xd7\x11\x0d\xd9\xf8.\x1et\xfb\xee\xdd\xb15d\xe6\xfb\xf6\xf8\x86\x1d\xb2\xb0\x08Q\xdd\xdc\x9d\x91\x8b\x17r\xd3nv\x82\x86\xc7w\xb7\xf6\xde\xa6\xa7S\x83Z\xc4K\xec?Q;\xa0\xbaL\xf7\x0f\xfe\xd6\x84$\xfcC\xe20\x15\xf4\xea\xd1\xee\xcf\xbc\xf1\x1b\xd5\xb8!M/\xacJs\xec \xce\xcf\xd2J\xb2\x7f\x93\xf2=x\xb1;\x91\x8d\xa5P\x10\xa3R\xbc\xa2\x15\x07\xd3\xfbm\xbe\xf8|\xeb\x83\xb5\x01C\xf3*\xd4\x16\x9du0GA\xf1b\xdb.H\x05\xf7\xf8P\xbe2\xa5>\xe9\xab\xf2\xa5\xfbP\x9d\xa5\xa4A\x88>\xc1\xe8\x13\xc4^\x97\xa3O\xb0\xf9K\xc0\xc2\"Du\xf4 \n0\xfb\x049\xb5\x1e||\xf8 +\x8a\xab\x03\xca\x0f\xf8V\x12\xe8\xa5h F\x98\xaa\xa2\xe7Y&\xa8_\xc1\xaa8\xe4\x9b^i7\x93\xd7O\xf3\xeciH\x7f\xa3&\xfb\x99:\xf6\xcc\x15\x8a'h\xa0\x16%O\xbd^\x92K\xac|_\xe3\xc9\xab\x00mS0xt\xfa\x95\x13{?\xab0M\xab\xcf&\x9a \xfa\x10\xcd\x04_\xbc\x99@HNMF\x85\x9b\n\xde\xb2\xaa\xc8>\xb2h\x1f\x80h\x1f\xf8\xdc\xed\x03\x1a\x03\xaa\xda1u\x01\xdb4\xdf\xc8\xda\xf9\xea\xbdI\xdd&>\x9b]!\xde\xb8i\xd7\x99x\xe3>\"q\xfdw\xc5x\xe3\x9e\x83\x8a\xf1\xc6\x1do\xdc\xbf\xfe\x1b\xb78\x89+\xfb=\xfbL\xfc\xde^\xb0\xe5\xe7\x8a\xfb\xc4\xd9\xbb+6\x87\x8c\x19#e_';&\x11\xfcF\xcd\xe33\xbdL\xf7\xc9\xd0\x87\xc1\xddTL^\xddK\xa5W\xbb\x8d,lh\xa2\x93\xa3\x83 \xb7\xd1]\xf2iY\xb1\x8b\x1d\xcb\xebe\xc6\xf2\x8b\xfa\xd2u\x95r=\xee\xd0St\xddW\xa9]\xf2)\xdd\x1dv \xbbSw~hF!\xc4v\x96\x15\xd7\xa6\xc1\xa6\xf9\xad\x0f6\xcdC\x07\x9b|Z\xf2o\x97\x19\xfb\xc8L\n;\xcc;R\xeb\x0dU\xd1\xbb\x93\xe4\xfd)T\xed\x1c\x16\x00/>%\xbb\xbd\xfd%\xd8\x0f\xdb\xa2X\xac\x92r\xb1J~\xfe\x00\xd7J\xdd3\x85\xa6\x08\x8c\xcbC^2~Lr /\x88\xe1$\x83+\x8a\xa7\x99\xe4\x86\xef\x87\x9d\xd8\"\xe9\x16\xfa\xe8\xe5\xa4\xae\xd8\x8d\x14\xa6\xa2\x7f~\x17.!/\xf4M\x81\xb8\x08K\xc1\x82\xba\x017w\xdeF\x96\xbd={6\xc0\x17/\xc1\xf1\x12|\xfb\x97`\xca1]Js\xcd\x83\xbf\xf1?8\xcd\xe2\xd2\xac\xd37\x88\xd7\xbd\xb7\x88\xc6\xaf\x9fI\xabm\xde\xbd\x0f7\xb0\x88\x0b|\xcdO\x9f\xed\xf1mM\xb6p\xae\x8c\xb2l7\xbf\xab*\x82\xea\xb6\xddZ\x1a\x94\xa6\xd3,B56\xb2v\"\xce6\x04\x9b\xdc\xd4\xc8\xf5_M\xac\x81|MU{\xefQi\x80\xe2$\xd8l\xa0:\xac\xee\x0ba\xadk\x1a\x08\xb9\xd9,)Ep\xea\\\xa0 J\xcd(5o_j\xbaL\x87\xb9\xfe\xca\xa5\xc6}y\xf3\xc6f\xb3\x89\xb5\x1d>\xab\xd9\x10#\xd6w\xd5\xc5\x96\xb1\x8aK\xf6$\xcb\xec\xe2\\\xb4\x15\x1e\xcdW\xd5E\xd5\xbc\\+\x9e\x8f\xe2\xcdMIt;\xe3EL\xe0y\x92e\xaf\xaa\x8b\x1f\x18\xfb\xecoc\xbb\xeab\xc9'\xf8y\xec\x02>\x9a\xc9;!\xd9\xc8'\xd5\x93\x8c\xcf\xcc\x8a\xc6\xfbX\x9b\x8eG\x18?\xf7\xc9\x0d\xa49$\xf9\x0d<+\xd2\xfc\x1e\xac\x92\xaay\xfb5\x81\xe7,/\xec\x8fq'\xf9\x06\x9e\xec\x8aC^\x9f4\xffU\xe6\xd4\x9fYY\xd8\xdea\xf6\xd0\x13\x104\x05\xc1Zy\xb1\xb3\xff\x8c *\x87D\x0c{\"\x1a\xf7\xb1\xd9\x01\xa7o\xe7\x97\x86\xba\xb8b\xb9R\xa4\xc4t\x94\xa1\x8d\x136\xc9\x9b\xc1\xf9\xdfi;\xe7\xc2H\xd2_>q+_b>\xcd\xebf\xcf\xa7\xfc\xca\xb7S\x0f{[\xb1\x89w\xe0w\xcd\xc9l\xef\xb4\xd5,zz\xc5\xea\x06.\x8a\x8bb_\x16\xb5\xe5\x0d\xd9\x92\xad\xd3}\xca\xec\xc4\xf6\x12\xba\xc5\xb0\xe4,Z-\xf7E\x9a\xd7V\x0eq\x1f\xbc\x12|7o\xf7\x86\x92\xe2Pi@\xeb\xa2\x14\xd6\xfek\x99\"\\W\xe2\x91a~?\x95\xf6\xee\xee5u3eS\xf1\xb4z\x95V\xb50\x06m\x8bC)\x9e\xf2\xab\xcc\x9f?\\H{Qu!U\xaeC\x99\x9d@\xba`\x0bx \x8d\x83\x8bU\x92_->>\\\xb1:y\xb8xU]\xbcc\xb9eQ\x1f-Z#H' \xc4\x19q\xaf\xd9\xcf\xc5V\x08\x08\xc1\xa4_\x99\x91|\xb3\xe8\xe2,\xda\x95\x123a\x8c\xcb\x14A c\xcb\x0f\xe6\x85\xfd`\xee\xe7\xdb\x85\xb4\xaa\xaa\x1e\xd2\n6l\x9d%\xa5\xcc\xc7\xbe\x91\x1e\x02\xfe;k\xcei\x81\xd4\x88Kv\xa4lo|\xa0\xf7\xbe\xbe\xff\xf0\xeb\x93\xaf\xbf\xfez(\xbdb\x08\x8a\x061\x04\xa5\xfb K\xcc\x7f\x86\x10\x94f\"\xedu\x90\xf3x\xeb\x84\xe6\x9a\xe8\xae\xba\xb8+\x9f\x0e\xb5+\xa1-\xc6x'\x1c\xfc\x1a\xef\x84\xb7|'\x8c\xb1\x1b4\xc7x\x8c\xdd8\"q\xfdQ\x071vc\x0e*\xc6\xd8\x8d\x18\xbb\xf1\xeb\x8d\xdd\xe8Y\x0f\x89\xe1\x1b\x83\x90\x05\xcea\x9f\x14\xba\xa6\xa9f7\x94\x17\xe4\x18\xc2!a\xc2mn\x9b\x15E\xb9\xbcH\xaa\xe5\xbeL\xd7\x16\xf5\xc7w\x87X\x17yU'y-\xcf\xcb\xba\x80u\x92\xad\x0f\x19\x17KB\x13\x17{\xf6\"\xa9\xe4\xbf\xaa\xcb\xa4d\x95\xbc\xf1[\x10\n}}W]\xf0\x06\xe6\x11\xf9,}>m\xd1k\xe5C(|>\x0b\x9f\x17\x05\xce\xba7\xb7moN\xcb\x1e\xca\xae\x17b\xd5\xcb/\x93\xear\xb9g\xe5\xf2Pm\x96\xbb\xf4\xf87\xe4\xe6\xd4\xe3\xfd\xc2\x9e\x95p\xa86\xb0K3!\x8b\xd6E\xfe\x91sS~!\xfe\\\x17\xf2;\x03:\xf9\xa5x\x82z\xcb\xd8\xd2\xc1d\xde\xa17\xe3\xea0\n3\x92\xc0\xa8t+\xf9\x0f>\xa4\xb4R\x83\x14;PC\x88\xf0\xbd\xc6\x98\x95x\xd3n\xc1';?\xc7\x9b6F=\xa9?q\xcd\xa4=\x9b\x96\xbb\xeab)\xcc\xc7\x9d\xe7k_T\xce\xd2\xae\xcfT\xe3\xf3O?\x88\xb3,\xdd\x89\x7fV\xc0>\xb1\xf5AH\x88\x04\xea2\xc9\xabd\xdd\x9abYU\xa7\xbbD\xfcx\x91t\xf6\xe2\x03g\x03)\xb5u\xdb\xb8\xd1U:\xe8\xba\xf9\xe4\xb3\xd5zt\x7f\xe0g\xc2\xb9\xce3\xdf\xcbx\xee\xf3\xde\xd3\x1cs\xd6\xcf{\xd2\x07\x9d\xf3\xcd\x89nD\xe8:\xe5\xe9g\xbcK\xa9\x1c0O\xfb\x9ei3\x91b\x0b\xeb\"\xcd\x95\x0dA$W7-\xb8\xd6h@\xd8\xbbG(\x10\xe7}\xe4M\x88\xbc9\xe6M?A:\xeei\x99S*\x90\x1d\x8b\x8a\x1fs\xc66l\x03\xf6\xea\xbe\xbd\xb3\xa2\x82{\xcd\x9d\xa7\x82\xdf\xaa\xfb\x92\xd1'\x9a\x175\xd7X/\x99\xfaJ\xe8\x7f\xea\x80\xe8U\xae\x16\xd7;\xf1\x91\xb8\xde\x19P\xc9;\xa5\xbcl\x0e \xd1\x9c[l\xc3/\x88$}\xc5\xabx7\xbb_\xebA\xa9\x9d\x1d \xf9\x1fu\n\xf6\xe9\xa5!u/\xd9\xe0\xf0$(\xbaQ\xc3\x8d\x1a\xae\xf1\xf7\xdb\xd6p]\xbe\xa4U\xb1\xe9\x13'\xcdG\x7f\xb2\x06\n\xce\xc4t\xf5\xa7%\x1fk\xa8\x940F\x03h\x9bHu\xd0\xba\x15z:v]\xb4\x8a\xf8P\x845{S\xe8\xf9\xb6\xdb\xb8s\x84\xfep\x84q\x17\xca\x8e-\x06\xc6j\xed\xaa\xde\x882e\x0d3\xe0K\xb7\\\xbe\x8b\x86\x06\xcf\x860<\x0cgy\x91T\xcbd\xf3\xd7CU\xef\x8caPr\x86\xd2\xa2o]\x83mV$\xe3\xcd\xe2R\xd3\xf4n[\xf1\xdd\xfde\x9b\xac\xeb\xa2l\xd4\xb4\xdd!\xab\xd3}\x96\x1ak\xde\xaaj-\x1c\x81:\x14:\x93\xf8JFg\xd4\x9f\xd4:O\x94\xfe]M\xdb\xfe\x0b\x0ct\xd9\x8f\xb9u\x96\xec:)7\xc2(\xbe\xce\x92t\xb7\xdc\xb32-6K\xf9\xf7\xe5&\xe5\x8c\xb7:\x08\x05@\xe2\xf2\x0f\xb0c\xf3\x9e\x9bV_\xac-\xdb\xa6\xe1\x05\xddDQ\x16i\xaf\xbe\x85\xb8C\x85\xd8\xa2\x91\x96\xe8\xa3\x0c\x8flh\xb6\x18\x94\x83\xcd\xc9\xa3\x11\x91,\xc6N#\x98\xd7\x9a\xe9S\xef\xbd\x96L\xef\x92\xf8\xad\x98\x1e\x14~[\xf01,\xc1\xbf\x06\xca\xf9m\xbf\xde1\xf8\xed\xbe#\xe2\x93L\xbb\x8e5\xc0\x1ap\xfd\xe6[\x8c\x9dtn\xd3\xad\xc3p\xeb\x1f\xce\xccF[\x9f\xc9v\x82\xb1\x88\x1f\xb3&\x83\xd1\x00S\xe3\xac\xf7\x19\x8a\xdaV\xd1N4\xf85\xda\x89n\xd9N\xd4\xaa\xc96\x16\x1c\xec\x96s\xab\xfe\xc0Lj\xaf\xae\xee\x9a<\xd8\xba\x921\xb1\x88\x1c\xf8\xaf\xcb\x03\xfd\x900mmz\xf8I_'\xfa\x84\xd7%\x13\xd2l\xe0\xf59\xd6\xcc\x897\xab\x86\x1f\xc4\xac*\xcc\x8bb=B\x19\xe5\xe6\x93\xa6X\xe08\xf0\xa7!\x96\xec\xaa\xe1\x8d\xfe\x84\xf8}\xf6\x92A\xb2\x96\xe6\x83$\xdf\x18\"\x80\xba\x9b\xaa#\x14\xc85\xb0\xe6\xfb\xcf\xf6\xf2\x14V\xa3u\xa4\xadtUY[C\x8e\xa0\xbe\xa2\xae]\xe7o8\xa2\xf9PD\\\xcd\xfb\x80Z\xb0\xacE\xde\xa6Hb\x13\x1f\xd7\x83\xbcSI\xf9\xe0\xbeR\xe9\x97*\xb9\xf9\xec\xda\xb6O\xab\x92 \xd5Su#\x10(\x9b\xe0N~\xdfbYz\x91\xae2]|UCc[\x1f\x9a\x99\xfd\xb3\xc4\x93\xc8cB\xca\x14\xd4R\x88\x0b\xad\xf8\\\xb1\x84@\xe1\xa6\x97s\x1e,?8Hq\x1f\x9e\xbd|r\xfaj\xf9\xee\xfc\xc9\xf9\xfbw\xcb\xf7\xaf\xdf\x9d\xbdxv\xfa\xc3\xe9\x8b\xe7\xf8&\xe2\x9fO\x9e\xbe|\x81m\x12\xd6\x00?\xa4\x17\xff}v\xfa\xd6\xfa\xb9\xd2\x96\xa93o\xf4~\xa1\x92\xbf\x93K\xd4x\x0f\x840k\x0dv\xa9u\x03Hn\xf8\x05\x04\x8cK\xe7p\xcb\x14\x8c\x9c\x90\xe7\xe2\x13)\xd9\xfbY'I\xfb \xe5]\xed\x98\x96\xf2\xc3!\x8c\x95\x98\xb8\xeb\xbb\xf7\x1aCg\xb4\xf1\xc4\xf8\x98\x0eb|\xcc\xf0\xe3\x18\x1f\x83\x8a\x8fqK\x81\xa6\xb0\xbd]96\xc6\xc8\x18\xedA\x8d\x16/\xe4C\xaek\x9bBi\x07[\xcc~4\x82D#\xc8\x08n\xd9\x08\xe2y;\xd3x\x7fr\x9d\xc1\x93\xef\xf2\xba\xb1Bn\x18\xdb\xe8\xfe>\xb6T4z\xa8\xed\xae\xb7;T\xb5(\x87?\xf0\xa4;t\xca\xc7=I#\x94&O\xc3VQ\xe4\x0d\xc5,\x840\x1c\xcd\xc4\xa1b\xea-\xdb\xff\xf37\x96\xa3\x1d4\x1d\xa6u\x99\x15O\xbd!\xfb\xb4O\xf5\x00\x81\x10G\xf7\x88Q\xc7z=R\x97G\xea\xef(\x9d\x1d\xa1\xa7{us\xbc>\x1e\xa3\xd2h,\x12\xa3\xd2 F\xa5\xc5\xa8\xb4\x18\x95&!F\xa5}\x11Qi\xba=\xbai\x89\xf2\x99\x9c5M\xec^\x12\x85Tw\x81\xe8\xd3\xe3Sp\xf8?T'\xcd\x17\x9f\xad\xc7\xc3H\xc6>\xfc\x12W\x9a[\xb6\xfd=\xc9\xd5\xcd\x91\xef\x94C\x9e\xfet`\xd9\x0d\xa4\x1b\x96\xd7\xe9\xf6\xc6\xe0r\xb0\xf8\x15\x84!#|\xe4>C\x08\x88\xc7\x8a\xf9\x18/Y\xb6\xd7\xc7\xf7\xd6d'\xe8\xa0a\xc7\xc5\xbdW\xc9\xa7s\xde\xcdK\xf1\x0e\xed\xf7\x0f\xbf\x1d\xbdA\"\xa1O\xa0c\xce\xe8\xddeQ\xd6j\xb36\xbd\xae\xd4\x8e#L\xeay7^5\xb5\xaf\x0d\x0f\xacHh]\xc6l\xb9-\x8b\xdd\xd2\xea\xf6\x93\x80\x98\xa8\xc6O\xda\xf5\x95K\xaft\xc3*\xd8\x1e\xf2M\xf7\xd8e\xdfc\x04\xfb\xa2\xc8\x10\xae*R\xe2\xf2\xa8\x04\xd5A\x8aw\xf9\x96f\xe3\xee\xd5d\xd5?\x8b\xb7\xa9d;\xf9\x82\xa6\x8c\xa7\\%\x19?[P\x84\xf5$ \xb7\x98\x9b\xc5\xee4\x9a\xba\xe81\x1d$\xdb\x9a\x95`w\xff\xe9~B\xf1\x96\x9e\xb4\x19\xff\xb3,QcEX\xbaQQ\x96f\xb8\x1d\x92,k\x16IykW7\xe2%\xact\x9d\xee\x93\xbc\xb6W~P^\xdd}R\xd5\xfaJ\xfd\xb3\xac\xce.\xf9\xa4D\xd2\xea\xc6'<\xb5Ez\xd5b\xf9\xe6\xcb\xa1IZ\xb5\x13\xe0{\x91\xe5\x9b\x13\xf7S\x85\x1c6I\x9dHSDZ+w\xe4a\xef\xe6\x15E\x95\xe5.\xf9t\xdb\x94\xb1O\xff\xd5\xfbw\xe7|\xd2\xe6\xb1k;\xf53\\\xd6\xf7\x950\x98\xd4\xac\xcc\xc5k\xb5\xda\x8b\x16\x9c\xc1\xeb2Y_I'\xd5\xa1,Y\xde\xe8\x04V\x84r\xaawE \xbf\xb8\xe7\xa4;\x0b\xd7'\xeb\xfa\x90d_\x00\xcf\xb3\xa1\x10\x10{^r\xfb\x0f\xa7\xafO\xdf\xfd\xd1\xbd\xbd9\x9c\xe6i\x9d\n\nW\xac\x86\xa4\x92\x96W?\xcf\xfcRb]W\xd1E\xf0\xa1:o\xe5\xd3\xa0\x87\xdc\x14J#\xa1\xe1\x14D\x1a\xd7\x91\xe6\xe1X\xd3g}.V\x07Uc\xb7\xd5\xaf\x8b|oT\xf0\xf0\xbe\x90eV|i\xbea\x9f\xd2\xfc\xc2L \xa1J*\xcd\xe7\x97[W\x07=v\x8d\xca\x9a[\x96>\x19F\xa3\xae\xad\xf5\x9e\xc0\xa3\x87Y\xa2}%h\xe3U\x8b$C\xea\x8c\xab\x13N>_(\xe4\xbb\xf3'\xe7/\x10\x91\x80\xdd\xb7g/^??}\xfd\xa3\xf7\xbbF\x15\xf0~\xa7\x84\x8a\xf7Cd\x88#vF\x8d9\xeb\x9d\xa0\xba\x16\xd5h\x0cL6b\x11~na,^J\x9f\xc4\xe7\xc2\xe8?\x96\xc9\x9a\xa9\x0d/-\x14\xc3\xa3\\\xd1]\xb9O\\\xcf|\xe7#\x0d\xf8\x90\xd7i6\xc2\xc9r\xf1\xac\x95\x0b\x95ZE\xeb\x07\x8e\xb3\xe5\xa7C\x92\xa5\xdb\x9b4\xbfX6\x95\xd5\xdd\xf46\x1b\xba%X\xcd\xdd\x12\x10\x97(\xdc5\x8a\xafY\xc6.\x1c\xc2@\x02\xaaC@w\n\xbd\xdb\xa8\x87V\x1d \xb8\xb4\x03\x14\xbfv`\xbc\xeb\xf6\xf8\xaas\x90(zY\xad\x06\n\x1ai\xfe9\xceot\xce\x04\xcd\xafY\xbf\xa6\x01\x972\xfe\xeb\xb4\x04\xac\x9c\xe8``~h\x1d\xc4\x87\x8a\x95]\xdc\x13\x02Q\xa3\x0fe7\xedD\xdb\x07\xed?&Y\xbaIj\x9b&\xd5\x07\xf4v\x00\xd2\x96\x00\x8ca\xa3\x03\x12\xc3`\x8c\x1d\x1d\x10P+>\xbf\x1d>hX7\xf2A\x0f\x08\x8b\x05G\xe4\x83\x9e<\xff\xc8\x96U\x9d\\1\xaea\xaf\x19?\x8c=\xe7\x0b\xd0\xfa\nb\x9dF\x84tC\xd2\xc2\xa3V,+\xae\x9d\xbaA\x07-\x87\xdc\xad`_\\\xb3\x12\xca$\xbf\xb2\xde<:\xe8\x9f \x9f%\x8d\x9a\xed\xf5\xcb\xd1\x886\xe6'\xe2l}\xde\xec\xe0\xae\xf6\x81z\xa7\xb0\xf9{\xf3`C\x92\xdb\xef\x8e\x12\xd2\xba\xf7X\x8f\xcc\xa5K\xb3\xb4\xbe\x81u\x99\xd6\xacL\x13\xd7\xe0\xc5\xdb\x10[f\x881\xd7\xbe\xc2\x8a\x0c\xbc\xb8\xf8B5)E/\xbf\xa6\xf1ejR\xf8\xf9\xfd\x12\x9aT\xd7Yw\x982-\x94\x1c\x81L\xf8\x8b\x93uYT\x95pT\xb6\x9b\xbe:\x01\xed\xe9\xa4\xad!Ub\x0c\xdd\xc3*+&#\xed\xec~\xe8\x0e\xd0;\nH\xbb\n\xbe\xbcC\x98\xc6\x0dRx\x9e7\xcb3\x14\x9ej\xd9nIx~,\xe2\x15\x14+89\xad\xfcB\xe5\xcb\x14\x9a\xb8\xb9\xfd\xaa\x05&'\x01\x02U\x14\x96F \xa0n\x89\xbfl\x1f\x89\xf2(o@\xeb\x80\xbcO\xfcA\x8c\x1d\x9c\x15U\xcao\x11\xdd\x0bW\xa5T\xd6\xd3\n\x92\xbdx\xf1\xaa\x89\xbdC k\x8a\x9b%\xd7I\xb9\xe9^\xbe\xe2\x9c\xa8\xf8\xec\xfa\x92\xd9\x9d\x0d\x1d\xac\x8b\\>\x89Z\xd9m\xa8\x1d$%\x83\x1d\xab\xefq\xd6\xcf\xe5\xd5B\x86\xd4\xb7h|\xb6\xdf\x0e\x94OT\x0cZ\xe5\x15\xc9\xf5\x15\x7f\xfbj\x01O\x9aL\n\xcb\xd3\x10:\xfc\xcc\xcaB\xe58\x8bm+L\xf0\xc9\x8e\xa1&VA\x91\xbbGM\x93D\xf2\xb0\xfes1\xbe\xe5|,\xe4\xfb\xcf\xed1\xcd\x0fb\x0f\xb6\xc0cZ\x1b\xf2\x7f\xb6\xe6n96uIlR\x82vI~\xd3\xca\xa8\x9b\xbd]\xa8kH\x9f4O\x92\xca[\xa7\x94\xb2\x85\x08\xc4\xef9=L\x98\x9a\x9d\xa3\x19\xfcG\x9fi]\xe9\xc5 \x94\x8f@\xbd\xe11\x0e\xc7_\xd6\xbd0|\x05\xb1^\x81\x0e\xda\x9cc\xbd\x02\x141\xff\x19\xea\x158K4\xeai,mm\x82u\x91\xd7I\xaa?\xe0aNyQ\xe0\xc8\xa1\x89\xc5\x08\x86\xb4\x8a\xc5\x08n\xb7\x18Aw\x88\xd8xp /\x9f\xc06\xcdj\xbe\x9f\xa5_B\x9c\xa2\x86\xd4\xb1q\xb6\xff\x7f\xbe\x7f\xf1\xf6\x7f\x96\xe7\xffs\xf6b\x98\xeb_\xed\xd9:\xdd\n\xd5P\x1f\xc8\xb0\xdd\x93\x97/\x1f\x8b\x1b\xca0OM8\xc0G\xa9\xfe\xbd\x96M\x04\xc6c\xd87ag\x83\xa0\x15\x81\xe0{W\xd7\xcf\xceO\xff\xfc\xe21H#\xb9\xb1\xb9\xa3\xf5\x9b\xf7\xe7\xef\xce\x9f\x0c\x86 ^\x87\xb7\xa3sMG\x05\"<\x86m\x9a\xa7\xd5e[\x8e\xd9:\xa2\x90\xfc\xc4\x11\xa3\x99\x8a \x98\x97\xd5\xfe\xd1\x93\x97/\xed?\x9a\x02e\x0c\xcb`\xff\xbdGh\xfbG\x86\xf0\x996\x14\xc63\x9dX[\x80\xc61\xb1\xb6\x00\xc4\xda\x02\xb1\xb6@\xac- !\xd6\x16\xf8\x12k\x0b<\xf8\x9b\xf3\xe1\x1a\xed\xf63x\x9cf\xa0\x95`\x9e\xa0\x19\xa1\xfb\x8d\x9a\xf1\x17QB\xc0v\x0f \xb2\x8c\xdc\xda\x9b-\xf3\x94\x00p\x14\x00\xf0\x8e\xd8gU\x08L\xfd'&\xfe\xf7\x89r\x9cy\x84'\xfc\x07\xa6\xfb\x93\x92\xfd\xbd\xd3\xd3\xb8f\xb6D\x7fd\x9a\xbf\xd6\xf9\x9cI\xfe\x9e[\xbfo\x9b\x82\xdf\xd1\xe4%\xac\xdf\xa1\xe4AAI\xeb\xc7\x99\xf9\x03R\xfa\x9d\xc9_\xe8\x84\xfe_\xc3r`R\xf8\xf1\xcb@N\xdf\xe7\xfb\xcf61B\xf2\xfe\xafa%\x08\xe9\xfa\xc6\x90\x80\xe0d\xfd_\x05\xf1(\xe9\xf9\xc6h\x91\x89\xc9\xf9\xbf\x06\"\xe2\xd3\xf1\xbdc\xa1*v\x13\x13\xf1\xb1i\xf8\xe8q\xbbSo\x91\x02q\xbe\xf4{o\xf2=1\xf5\xfe3\xa1C@\xca=>\xe1\x1e\x9fn\x7f\x0cj\x84%\xda\x13\xd2\xec\x8f1h\xeb\x12\xce\x9c^\x8fM\xae'\xa5\xd6\xdf*AfK\xa9\xc7'\xd4#\xd2\xae\xd1$\xa0\x8b\xe5 \x89\xf4\xf84\xfa\xd9\xc7o]\xbfy\xd3\xe7]\xc9\xf3\xd4\xd4\xf9\xdb\xa3\xc1\x8c)\xf3.\xdd\xc8\x91.\xaf\x8d34Y\xdeK0W\xa2<>M\x1e\x97$\x8fK\x91G&\xc8c\xd2\xe3\x89\xc9\xf1\xd3S\xe3\x91\x89\xf1\xdeU\x99\x8d\x8dgM\x88\xa7\xa7\xc3\xfb\xd2\xde\xad\xd2\x1f\x9b\xf2.)iOxw\xa6\xbb{\xaf%\x98\x8b \xa0\x12\xdd\x11]\x01\xb2;\xa0\xe7\x17x\xf9\xad\x03\x04\xe7u`\xbc+NI\xfe&\xe6\x16\xdc\xce\xbcfHj\x0f\xce+\xc0\xed\xf2\x0ep\xe9\xec]\x92\xb2\x17ax\x123\x92\xe5\x81\xc0\xf6\xe07\x04t@`\x0e\xbfq\xa0\x034\xda\xe0\xf4u\xf2\x9a\xa3R\xd7\xe3\x9a\x0f\x01\xb7\x1a@A;1U\x1d\xddO\x00\x93\xcc\x95\xa4\x1e\x98~=1A\xfd\x98\x94\x99+5=\x882\x94\xd1\xce\x9b\x94>!\xab\x12\x93\x90\x8e\x14\x05X1\xf0\xc5i<\xc8$\xed/N\xe3\xc1\xce\xeb\xb65\x1e\x7f\x16%\xae\x82\x0b2\xe9\xbc\xd9e^t\xa4,J\xe4\x9e\x01\xc2\xbe\x81/\xe7\xf8\xa4\xac\xfc\xbc)\xe6\x13D\xa1/\xbd\x1c\xb9\xa4\xd8\xe5\xfc\xe2\xc4 \"\xed\xfa\x8b\x13\x81\x989\xfdJ\xc5_?qW\x886/\xc2(\xfaPhCR\xc6\xd1\xc8\x89;\xc1\x17\xfe\xd6\xc1\x8c\xa9\xe23%\x8aS\xd2\xc4\xe7K\x12\x9f7E|B\x82\xb87=\x9c\"_\xe6L\x0d\x0f:^\xb5\xc1\xce\x93\x16\xae\xa1\x0cL\n\xa7\xa7\x84\x9f\x8f\x9c\x07\x8d\xa8\x93]_'\x8e\xb7\xeb\xf1\x19\xaeOoN\x9f\x9b\x93\\K\x99\x86;\xf2\xd1\x99\xa7\x10SZ\x07\xbf\xc6\x94\xd6[NiM76\xde\xe3;)\xdd\x98\x1dr\xfc\xa8\x119\x16}&\x9c\xfc\xb4\xb6\xe5\xf04\xa7c\x88d\xf5\xb4\xd5ce>\xc8\"9\xd4\x97\x8b\x8f\x0fW\xacN\x1e.\x9a\x97\xf2\x9f\xde\xd4\xac:/\xde\x89\xce\xd4\xae\x95\x08G\x8b=^\xde&fq)\xc7\xda\x8dc4\x03\xb3\xbcw\x8dAy>\xd5\x8e\x168\x85\x02\xd8\xb4\x92\x9fC\xb9_7\xd8v\xac\xbe,6]J\x8c1\x19\xe6wnrH\xa4\xe7\x85\x18R098{U\x0ej\x80\x89\x15\x9d$2\x8e\xcbK\"\xf1\xf5\\\x14z\xca\xd6\x97\xdf<:+\xd96\xfdD\xa6\xccJ4^\xeeEk,\x9f\xb49\xaf\xa6\xae\xed\x93\xef\x7f\xcd'\xdfM;`\xd6gI\xf7\x96'b\x9e\xbb\xe4\xd3r\xc7v\xc5r}\x99\x94\xc9Z\x17+N>\xd0w\xf5\xa7e\x95^,E\xfedp\xfb\x9f\xd9r]T\xf5r\xcfJ\xc1\x91!\x88\xf8(>\xb22\xdd\xdeH\\l\xf3\xe8\xbb\xef\x1e\xfea\x0eT\x15[\xef\x1f}\xf7\xbb\xab\x87td\x1a\x97\xc8\x15j\xab\xcep\x9e\xe8dz{c\xe4\x8b\n\xbbbs\xc8\x84n`Zj!:\x9f\xc8\xabj\xbb\x81:U\x06\xcd\x03\xcdmw\x1c\x1e\xee\xe6\xf6\xbbf\xbe\\<\xba+;\x1e\xe8_\x9e\xd1Z\xb7G\xd3|\xdc\xb2\xb7U\x10\x04\n\xa5\xca\x90\x1a\x03]\xc2\xacA\x98\xf5\x06\xeby\xef\xbe\\<\x81\xf7o_>(YU\x1c\xca5\x13'\xbdT\x7f\x87\xa9ji\xc3M\x82r\xf2\xa4\x1f\xa0\xaa\xf8\xad!K\x7ff\x9b\xe1\x95h_\x16u\xb1.2X\x1d\xb6[V*\xd5m\x01\xe7\x97i\xd5\x8cY\x9aC\x1a\x05\x19\x92\x1a2\x96T\xf5\x10\x13\xbfW\xdcyp\x07Z\x81\xb2\x10\xcaG\x96T5T\xecb\xc7\xba|\xdd\xf7o_\xde\xad\x84\x96a*\xd7\xd7\xde\x9d\x86=\xf0\xa6\xdbC\x96\xdd4\xe1.\\\xfd\x17TQi\xc0|\xfe\xf7\x92\n\xd2|\xd8\xf4\x03\xef\xec\xc1EQ\\dl!\xe6\xbc:l\x17\xcf\x0f2\xf8\xe8\xc3Wr\xac\x02YW\x1c\x80Ov\x80g\x9d\xe4E\x9e\xae\x93L\xec\xf6a/\xf7\xd8\xe2bq\xc2\xc9#\"Q\xef,\xeep\xee\xce\x8b\x9a3\x15\xdb\xd7l\xf3\xd50\x11\x16\xe04\x87='X\xbaf'P3.\"\x0e\xd5ADq\xeeK\xb6.v\xfb4\xe3ci2\xbbVi\x9e\x947\xc2\xe0\xc4\xe7;\xbcE*o\xf6\xcd\xb0\x1by\xff\x80T$\xf5\x1e*\xa6\xf2\xd7\xf9\xb2\xb2Obi\x9e\xe47\x0b\xf8cq\xcd>\xb2R\x9a\xb0\xde\xbf}Y\xc1\xf5e\xba\xbe\x1c`\xe3\x088\x9b\x0d\xf9\x8c\xdf`\x18|\xb8\xac\xeb\xfd\x87\x13\xf9\xdf\xea\xc3 \x08\x83A\xf3\xeb\x89\xe0\x94u\xaf\xe8V\x13\xafz\xd8\x8f\xc8\xcdg8\xea\x83\x95\x1f\x95\xd9d\x97\xec+\xb9\xecb\xa4u\xa1\xf8\x17z\x8a%\xbf\xe4o\x8b,+\xae\xab\xc7#\xea\xff+\x9cn\xbb\xb1\x81\x8cD\xfd\x98n\xd8\xa6\x1d\xbe0PT\xd5a\xc76\xc3\n/\xf0\xaf\xfcr\xf7\xc7\xf3\xf33\xf8\xf1\xc5\xb9r\xff\xbf\x7f\xfbRn\x99\x9b\x94e\x1bH\xe0\x7f\x87\x8cw~\xb3g\x7f\xf9\xdf\xbf\x0c\x90\x81*\xe3\x94\xabU\x96G\x8a\xa0\xdf\xbe,6\x875\x83$\x97\x17\xbc\xe15\xfb_\xe1\xc9~\x9f\xa5\xeb\xa4\x99s\xc98\x8f\x14\xd7\xd2\xa2\xb4N\xd6|/\x16\xc5\xd5a\xdf\xa6r\xab\xe8x\xa3\xc9\xe6\xfd\xdb\x97\xa2_eP\xd9\xf5\xb8q#\xd91Q\xc3\xe4\xff\xff\xb1H7\x90\xe4\xe3;\x9a\xecTl\xb0\x92m\x8b\x92\x9d\xa8f\x1c[R+\xe3F\xce\xd8F\x15Y\x10\x02\xa0\xfch\x88\x91-r.`\xf2\x0b&>\x15;`\x01\xf7\xdeW\x0c>\xb2\xb2J\x8b\xbc\xa9\xa8#\xf6\xb2\xe4\x88$O.\xc6\xf3[\x95,\xb9\xe2\xbb\xb4A\xb7\xf8j\xb8\xb6\xaf\x8b\x9a=\x96\xd1\xc9\xdbC\xbe\x96\xbc\xcaG\xda\xec\xe9\xee\xe5\x82^q/\x131\x0bQ^c\\\xc9K\xb1\x03\x94\x8cKTv\xd2X\x86T\x07\xa2\x98\x87\xd0\x0bZ\x0e\x17\xa5QDj\xe2uZ_\x8e\x04\xe4\xcd\x9e-$\xaf%\xfb\xb4Z\xac\x8b\xddX\xde\xbc\x13\x9c^\xc9\xfa`\xb2\xe0\xc7`\xbf\xc2\xbdF\x17\x91\xd5*\xe4\xd6\xf8\nv\xe9\xc5e\x0d\xab\xd1\x86\x945G\xd2\xfa\x12\xd2\xdd>c\\\xd0K\xc3zS\xe3h\x0d\x15\xdb%y\x9d\xae5\x1b\x93\xe1\x8al=(\x8d%U\xc0{\x82\xbe\xe2\x9bp\xc5\x94y\xb1w\x0c\x8e\xce\xbd\xe6\x08IV\xc5G\x06mq&\x13}\x7f\xe3\xef\xfb\xc3\x93\xfc\xe6CgQJrH\xcaUZ\x97\x9c\xe9\x1dcP\xb2+\xc9\nm\xfe\x82\xb6I\x9f\xec\\\xc2\x08\x01(\xc7\xb0\x1a+\x00\xfd~\xd4\x99\xae\xb1\xc2\x99b\xbe,]\x89\x81\xb5\xb9\xcc\xd5a\xbf/JqN\xec\x93\xf5\xd5\x83C\xce\xff\xc3O\x07\xb9f\xd5\x98\xcb\x87\x87a\xb1\x85C-\xb7\xb5\xda:\x15\x17&\xc9F\xda\x89\x93\x0c.X\xceJ\x114%U\xb9J\x0d\x9c\xf7# \xdd\xc7\xf8\xe2S\xc2\x99\x0b\x1er=z}%vJ3\xb0\xa4%\\\x9a\xc3\xb3\xdf\xfev$\xa4\x7f(\n\xd8\x16\x05|\x0f\x8b\xc5\xe2\xff\x0c~\xe4\xdd%\xf9\xcd\xf0\xcfI~\xb3\xe0\x1d\xfdP\x16\xbb{\xdb\xa2\xf8j\xf8\xc1b1\x94\xc0\xe9\x16\xee\xf1f\xef\xc5\xb0\xce\x8b{\xff\xc2\xdb}\x05\x7f\x1b\xc9\x9eq\xdb\x7f\x98\xe6\xfa\xc83\xd7\xffH>&A\x93\x85\xef\xc5Y\xcf1\x12\xe7\x96V\xf7~(\x8a\xc5:K\xaa\xca85\xd95\xffT\x8e\xb8\xf7\xf9\xb0\x17m\xce\xed\xa4\xbf\xf1L\xfa\xec\xa6\xbe,\xf2\xd1\xb4e\xbf?\x14\xc5\xbd\xc5b1, \xd0N\xf9\x9e\xe1\x17\xb1\xcc\x82\x0c\x18*\xf0\x06\xa7\x92\x08\xcf_\xbc{\xf6\xf6\xf4\xec\xfc\xcd\xdb\xaf\xc6\x96\xbe\x8e\x11L\xa8%r\xd3\xf4\xbf\xf5L\xff\xc7b\xe4\xd4\xe0S\x7f\xfc=\xfc\xcb~\xb5\xf8\xa1(\xfe\xb6X,\xfe1\xfc$\xc9oN\xb8\xda\xc0\xbf\xdb\xcbC\xf3URV\x97I\xc6\x89b\x1a\xe0x\xf2\xc3~F\x9d\xa4\xdbA\x17\xef\xf3]\xd7\x89\x18\x82`6\xf1\xd5\xff\xf7=\xe4if` S\xcf\x1a\xa7\x9c\x8b{\xf3\xfa\xaa\x95\x1bJa\x13\xe9\xe0C\xa9&\xddB7m\xa9\xa5C\xa5\x9d_w\x0dG\xe6\x03~\xc7X\x88\x1f\xb8\x12q\x97\xeb\x8f\xadt\xe5\x92W\xe4\xa8]\xb2f}\xfa\xe8ZQ\x96g7JG\x1e]YZ\xf5\xa4I0\xa8\xd5-\xe9\xee\x83\xbb}di\xaeu+5r\xd6\xf0\xc9\x9dmQ,VI)\x06\xfc\xe9\xc1\xcd\xe2\xe7;r\xaeR\xe7\x1c*\xce\xa2\xbb;\xfc+.V{?\xfc\xc7\xbb7\xaf\xfb\xff\xfe\xfe\xfb\xef\xbf\x1fR\x9b\x7f\xd3\xdd\xca\xe4\xd9^\xf0\xad\xd0\x1ctRk=TL\xdd\xe4/\x0eYR\xf6\xb1\x8c\x1b\xd7\"\x02\xaf;\xa4N\x80\xedVl\xb3\xe9\x8e\xab\x93\xe6\xdc\xd3\xeer\xbd\x03d+&\xfa\xe1\xdf\xf9T?\xc8K\x8a\xee\xc4Q\x84[\xa8\xcd\xf5x\xa4\x80%\xeb+\xbe\xaf:\xf5|\x9bfl(\xa7\xd4\xee;ceU\xe4\x06\x96mn\xc9\xdb\xb4\xac\xea\xa5\xa0\xf4\xf7\xf0p\x88\xa5\xfd\x8c/\xb5\xfa\xea\x91[&\x02\x18z\xbb#f|\xe71\xdc1\xf1\xae>\x95\x85\x1c\xf3\x9d\x931\x161\xda\xd7\xc9\x8ec\xfa\xbfrh\xff\xcf\xf0\x19\x1f\xed\xe0+\xd7\x90O\xb7\x8d\xe2\xa8\xaf\xa5\\\x8b\xb4\x82k\x96e\xf7\xaf\xf2\xe2ZzA/\x93\n\x12X\x1f\xaa\xba\xd8\x8dXQg\x9a\x13\xa9\xf0\x0c8\xa9+%\xdct\xc8\x19$\xbf\x80D\xb2G\x1f\xdd\x07\xc1\xa6\x8aS.\x8b\xac\xf1Z\xf6z\x177\xfe\x86\xc3T%\x95\x86\xc1\xfa\x98\x04\xea\x96\xab@\xf8\xc3\xd5DGW=ec\xf8\xcb\xff\xfe\xe5\xab\x11\x03\x86\xaf\xae\x8e\xdc\xb4\xc0b\xba\x1c\xd1\xc3\xc5\xa3\x87\x8f\xaa;\xa3e\x03\xab\x0ek\xb2\x9f\xd9\xcd\xd8\xfc\xaf\xa2\xc5\x83\xa6 \xbc={\xd6`R\x16m\xbf\x9d.\xc0\x89\xd14\x1cZ\xeatW\xe1\xc8E8\xc2,\xc1\xe6\x12\xac-\xae@\xeb]\xc5w)\x99\xd5\xb0\xe72\xed\xcdi\xdc\x9b\xd1\xbc\xe70\xf0M2\xf1\xcdg\xe4\xf3\x99\xf9\x02\x0d}s\x9b\xfa\x1c\xc6\xbe\xb9\xcd}V\x83\xdfd\x93\xdf\x08_b4\xfa\xcdm\xf6\x9bl\xf8\x9b\xdd\xf47\xc9\xf87\xbf\xf9oF\x03\xe0\xdc&\xc0\x19\x8d\x80\x183\xe0\x8c\x86@\xbb)p\x9a1p\x84\xccd\x1cD\x9a\x07\xa7\x1a\x08G\xe8\xc6\x06\xc3`\x93\xa1%\xae\xc6q\x14[\x0d\x87\xfeS:\xd0x8\x16\\Z\xa5\xf7\xfet\\#\x98\xd9\x84h2\"\xcebF\x9c\xd9\x9086%N6&j\xb8\xea\x91aq\x9ai\xd1co\xb3\x9a\x17\x11\x06F\xa3%\x84`d4\xb7\xff\x87y\xeeA\xa6F\xec\xe4}\xe6F\xf7L\xbd&G\x92\xd1q|\xc5\x9ehx\xf4\x98\x1e]\xc6G\xb7\xf9\xd1J\x15\xac \xd2o\x84\x1c\x9b!'\x19\"Q\xa6\xc8\x10c\xa4\x99\x14^\x83\xe4l&IK\xff\x03N\x9a\xd509\xbbirf\xe3\xe4\xbc\xe6I\x87\x81rl\xa2\x1c\x1b)\xe72S\xceh\xa8\x9c\xdbT\x895V\"\xcc\x95h\x83%\xcedi0Z\x9a\x0c[x\xd3\x96\xdbp\x896]\xa2\x8c\x97\xa3\xc1\xcfi\xc0\x9c\xdd\x849\xa7\x11sN3\xe6\xb4\xf5\xf6\x9a2\xfd\xc6Le\xce\x84.\xfePY\x07\xe5\x83\x05|I?\xa5U\x93\x85#\x7fiZ\x98^\x0e\xd44s\xc3\x8b\x81\xb5\x10\xf5\xbd\x07%\xa06>\x14h\xb45\x9a-\x8d\xe6\x07\x01\xadW\x1b\\D\xc4\xe8\xe1\xbfY\x1e\xfc\x9b\xeb\xa1?\xd4\x03\x7f\x86\x87\xfd\xbcD1d\xed\xd9\xb2\x82\xa6<\xdc\x87|\xb0\x8f\xf6P\x9f\xdf\"\x8f\x08\xab\x1f\x99\xe4+\x83M^\x8d\xd3\xfa\x16\x87\xd5d\xffJ\x84'7\xa8\x9f\xdep\x11\x1bj\xbd\x8fa\xb6DK\xfclv\xf8\x18f;\xc1\xf6\x1e\xc3li\xf6\xf6\x89\xd6\xf6\x99m\xed\x13,\xeds\xdb\xd9g\xb3\xb2\xcfkc\x9f\xcd\xc2\xee\xb7\xaf\xcff]\x8fa\xb61\xccv\x8a\x8d<\x86\xd9N\xb3\x85c\"Oc\x98m\x0fb\x98-\xc40\xdb\x18fK\xb7e\xcfj\xc9\x9e\xd3\x8e\x1d\xc3lc\x98\xad\x8e\x05g\xabFX\xaac\x98m\xb8}:|u\xbd\xb6i\x9fe\xda\x1bf\xeb\xb0\xa59\xed{}\x1c\x0f\x0cH\xe0\xed\xd93L\xf8\xad\xd64\x06\xe1\x86\x98\xfdb\x10n\x0f\xe62\x01\xfa\x8c\x80\x81f\xc0\xb9\x0d\x811\x087\xdc(8\xd9,8\xbbap\x92ip~\xe3\xe0\x8c\xe6\xc1\xb9\x0d\x843\x9a\x081F\xc2\x19\xcd\x841\x08\xb7\x81@\x83b\x0c\xc2\x0d50\xc6 \\ u\x0c\xc25\xce=\xc8\x10\x89\x9d\xbc\xcf\x18\x19\x83pc\x10n\x0c\xc2\x8dA\xb81\x087\x06\xe1z\xcd\x9ah\xc3&\xca\xb4\x19\x83p\xe70rN[o\xaf\xa1\xd3o\xea\xa4\x1a;qq\x8c\xfd\xe6\xba\x9d\xb3\xd2L\x9c\x8a\x1c\xa4\xa2\xb9\x02\xab\xac\xcbJ\xb6|\xee{\x05wG\xd3\xde;k\xbd6\x12\xad\xab\xf2*a\xd4\xa9\xb9c\xf0\x95\xef\x05L\x8c\xc7(F\xd6\\\xcaw\x02.{Y\xdf0\xa4\xde\x12\xbf\xf3\xa05\x94\xfb\xa5\"\xd6X\xc1\xc0c\x98\xc0\xdd\xa6Z\xb0\xd1\x8a\xbfJ*\xb6\x90\x95\xdb\xbb\xf2\xcfm,2\x9a\x83\xb5hs\xe3\xfc\x8c7w{\x84y\x13X\x9e4\xa7|\xc9\xeaC\x99\x0b;U\x13+\xdd\xc4\xc7\xb7Q\xe8\xc2\xcat\x91\xf6\x9f)\x11\xd3\x12\xef\xf8{\xe2\xcb\xdfp\x0d\xaay\xccB>\x1e\xcd\xef\xa3W\xac\x7f\xd7\xec,\xcc\x15\xab\xd5F\x1b\xbe4\xed\x9c\xf9\x80]\xecso\x86 \xa6\x9f\x1fv\xacL\xd7\xeao\xfd\xe7\x11\xa5\xd1\xe5\x92\xe5\x8aX\x87\xbc\xb5W\xf5\xb5[\xf9\xb6t\xc6\xaa\xaa\x9b\xb54\x03\x1d*N\x9d+\xe6\"A3\xf1\x1e>\x9d\x04\xc1\xf5\xba]\xf6\x12\x81T\xb1\xb6-\x9c^\xda\x15\xfb\x9c\xd1l\x84C\xa69\x82\xa4\x8d\xa3\xfb\xc3\xe9\x162\xb6\xadU*A\x93[\xa0\xf4va\x06\x95L';\xe0\xa4X\xdd\x00K\xd6\x97\x90\xec\xf7j\xde\xbd(\xfd\xe1\xecWE\x91\xb1\xde\x9b\xf4\xf6y\xf6\x90\xf0\xd9\x8a\x15.\xc4\xd3\x08\xe2\xf9\xba4\xdf\xa4\xeb\xa4f\xdd\xc3\xb2rv\xe2\xc3\xd1\xba\xa4\xf9:;l4=\xe2XY\xbe\xd1EtQnX\xa9\xdb\x9b\xac)\x0f\xb6\x1d\xaeT\xb2w\xc5N\x89\xd9\xb1\xba\xf5CQ@U\xec\xd8\xb2=\xea\x8d*}OT\xf7\x17\xae\xaf\xd5KE\xaa\xc9Yi\x07\xd1o\x98\xaa\xad\xd4j\xaci\x0e\x17\xfc\xb4h\xde\xaeQC\x96\x95\xe5[\x19\xd2\xa0\xea\xfa\xe5\xba\xe7c\xc4\xd1B\xd4\x8e\xc6\xe9Ls\x1c0\x93\xd3\x97\xe6H]\xf2\xa6-\x19\xe5\x0bN\xba\x0e\x97\xbcE\x87MQ\xb2&%u\xf8&\xe4#\x0dX\xb1\xa7\xcd\xd8x\xb1\xf9\xa4e\xc6kA\xbcN\xaf_\x17\xa5\xfcH\\\xb7\x06\xbc+nv\xe2\xc4\xec\xcf\xaa\xdd\xc8\xfa\xa6lz\x1a\xed\xca\x92\xed\x99\xb0J?M\xca\x96d\xf6}\xd9\xa0\x11\x9c1\xdc\x92\xc3\xeb\xd2\x93\xfc\x06\xbd!\xeaQ\x08\x83\x91/\xecrq\xa6\x80\x05s\xa8\xc2w\xb3\xdf\xd1\xect1#\x9c\xcb>\xb7\xb2\xe6\x93\xd5\xb1c\x9d\x8av'2\xc2}\xecq\x1c\xb7\xc3\x9b\xcbY<\xa3\x9bx\x1e\x07\xf1<\xae\xe1\xb0\x95s\xba\x83]\x8e`a&)\xf7\xeb\xc5ER\xb3\xeb\xe4fQ\x1e\xf2:\xdd\xb1\xc5\x8b\xeeUj\x84\xb5d\xf0\x86\xb5AG\xd5\xdf\xac\x96\x1f\x0c\xdf\xaa\xde\x1a\xde\xa8n(\xe8\xc4=z\x8b\xba\x8e9-\x1a\xccc.\x92\x10n4\x1a\xa1\x8a9-a&&\x03\xb5bN\x0b\xdd %a\x82YJ!\x98\xcd8%!\xd0D\xd5\x8ef6C\x95\x84Y\xccU\x12\xe63ZI\x98\xc5t%!\xe6\xb4\x8c>\x9bf\xf8\x1a\xa1\x8b9-1\xa7%\xe6\xb4\x8c~\x889-=\x889-1\xa7%\xe6\xb4\xe8\xe8f4\x1aJ\x98\xcdt(a.\x03\xa2\x84\x98\xd3\x12sZ\xbc\xe6\xc8\x06\x8f\xdf(\xd9|\x18sZ\xfe\xa9rZ\xda\xd8\xc8\xfc\xaa\x8d\x8a|\xce\xf2b\xf7\xe6:gx\xa3f\xb2\xd9\x94\xac\x1a\x99\x15]\x11`M\x13-\x91D\xfdM\xacyq\xcd\x95x\xd8'e\x9d\xae\xb9\xd8\x81\x0d\x1f\x98\n\xeel\xb0\xae\x92,\xc9\xd7#\xa3'*\xd5D\xe0\x1b\x9b.\x0d\xf7\xa2d\xa7W\xf4\xb6~j\x0f\xf0|V\xa4]\x95\xfd\x04\xea\xe2\x8a\xe5\x8d\x14\xd4&&\xf6\x08\xbf\xbb\x88.5U\xe3\xf5\x9b\xf3\x17\x8f\x85\xdc\x96?6B2\x15w\x9d\xd3\xbcnX\xbc\xbd\x1fj|.\x8f\xb2\x1e\xb6*\xbd\xc8\x93\xfaP\xb2J\x04'\xa6\xa5\x12F\"H\x82iCH\x18m\x8b~\x03#c\xcf \x9a$\xd8U\xacIbJ!\xc7 +mN=a2\xdc\x99j\x86\xfd\xd3\x8bO\xaf\xe9\x1b\xd6E\x9b\"\xca9\x83\xa2*h[\x897\x1e\xf6-\xfe&Y\xed^\xe7\xbc\xe5\xbftd\x12\\\xa9x\xa6\x87\xef{\xf8\xbae\x91MZ\xed\xb3\xc4\x97\xefd_\x96\xa6}\x9b>\xd8\xc8\xac\xc3\xc5\x05\xab\xb8F\xd6\xecT\xbe8\xed0\xc7\xcde\xee\xcd:K\xf9\xfc\xd4\xd0\xb8\xc4\xa3\x8c\xeb\xae9=\xee\xeepE\xef\nQ\xda\xbf\x9ah\x1eu\xa1\xbb\xdfc\x17\x8f\xe1\x99@\x04O\xf8\x96RX\xaa\x9b\xdd\xaa\x08\xcf\x86\x91\xcd\xbblS\xdeW\xf37\xe5\xf9\xae.\xf9e\xba\xc8\x81}RN=1\x9a'\xe7o^}%C\x15z\x08\xd7\xba\x99\xa5\xe1\x81J\x18\xacd'\x0d\x89\xd1\x99\x84\x00\x872\x0d\x9e\xe0\xfb\xb7\xa72\xaduS\xac\x0f\"\x08\xe2^\xc1e4\x14\xdb\xed\xfd\xf5e\x92\xe6_5\x89\xc5\xad+\xa7\xb5\x0b\xf5\xd0\xa4\xb9'\x95l4\xa4\xfe\xf7\xc3\xdc_\xb7\xb6\xf3\x8e\xe5\x9b\x17\x12\x9d\x8c\xc7XK\x9b@\xa3\xa8$\x1a\x0d\xa0\xaa\x93\xfaP\xc1\xbd\xebK&\xbc\xca\xc9x\x12\x90V\xba\x06\xc0\x11\xf0\xd6\xbd\xe3\xdd>\xa0\xe7|\xb9\xb9@\xde<\x86\xf7\x95\x90n\xfd\x11\xa6\xb9\xaa\xf5\x91\xf2\x1b\x97\xfav\x10w^\nGb\x95V'\xad}\xab+\x93\xc94g\xfd\xdc\xa5;\xce`\xa0\x9b\xdbD\x875\xd2\x8d\xa6\xa6\x16Ji\x11\xed\xbf\xf9\xd1\x94\xc9\x1b\x10\x17>-\x83\xc6\xa7B)\xb9\xf60S\xbe=\x00\"\xe7^|\x14\x9f\nm\x9f\n\x1d\xcb/@\x14\x1d\xea5k\xb0\xbd={\xa6\x06i(C4\x14\x9bM\xe3P\x919\x94\x98\xa8\xdd`\x10\x84\x96U\x8f\xfe \x03\xa7\x0c\x96\x0c\xc3%M\x13\xc3\x93\xb2\x0e\xd6\x10\xb7i\xa5D\x93\x19d\xa7\x998\x8d\x8d\xcc\x0d\x87\xb3\xf7/\xbe\xc5\xec \x96s\x1clv\x1e\xcby\x0e\x8e3\x1dl\xe7:\xb8D\x99j\xe76 \x02\x84\x9bE\x8d\xc8\x0c\xbe\x94\x0el\xe6Qh'b6\x91\x82\xc7L\n\xc8\x99\xcee.\x850\x93\xa9\x11\x8f\xd37\xd3\x01\xddt\n\x13\xcd\xa7F\x84\xad\x0f\xc7bB\x85`3*\xd8M\xa9\xe0\xd8d\x12,&U\xf0o\x90\xd9L\xab\xe0U\x9df0\xb1\x02P\xcd\xac\x003\x9bZadn\x05\x17\x95\xdd\xdbr\x8a\xe9u\x80\xaa\xc7u_k\xac52\xc1\x02z\xbc\xa3%\x9ch\x8e\xed\xa10\x9adad\x96\x05\xf4X\xbd\xe6Y\x80yL\xb4`0\xd3\x02z\x98#\x16\x98l\xb2\x1d\xe0\x13\xb9f\xebat\x1c\xdet\x0b>\xf3-\x0cM\xb8\x10>\xf9\x99\xcc\xb9\x803\xe9\x82\xcf\xac\x0bF\xd3.L\x9a\xdf$3\xef\x00]]\xd8L\xbd\x00!\xe6^\xf0\x13\xc4.\x0f\xe8\xa6_0\x99\x7f\x9dj\xb8Q=v*\xe3\xfd\xd6\x0f\xb4\xe6\xc4K[\x17\xa6D\xb7u\xc9\x93\xa6\x10\x8d\x87\xba\xf9\xbc\xf6\xaeQ\xf0\\\x1f\x8b?H`\xa6@: \xa3\xebj\x7f,\xb7\xa4\xf1\x9b-z\x9ef>\xd59\xf8z;\xc24\xe5\x96;B\xd6\xdczG\x7f\xc7]~%\xb8\xa6>9PO\xc3\xa6\x82\xf6\xb4?N\x8e\xdd\xd37C\x13\xc7g\xe2JW8\x9f\xf6\xbdS\x1eFSg4u~\x19\xa6N\xc3\xf1\xa5q\xa4V\x87Th#\xbd\x16=\x1b\x96,z\x8b~G\xc0r\x8eV\x93M\\G>G\xad\xc60\xa7\xeag1\x88\xb9n\xeb\xce\xe0'\xe3!\xe9>&\x1d\x07\xa5\xf7\xee\xef?\xf9\xd4W3\x1a\xc8<&2\xb7\x91\xcco&\xf3\x1b\xca\xb0\xb3\x9e\xd3X6\x9f\xb9\x0cm0\x0b5\x99\x85\x18\xcd|#E\x99\xcd\xa6\x18\xce\x9c\xa63\x9f\xf1\xcci>Cl\xa2YMh\xbeC\x19\xe62\xa3\x85\x18\xd2\x8e`J3\x19\xd3&)\xeb3\x9a\xd4\x1cF5\x8bY\x0d?r\xc3\xc2\xce`\\\xf3\x9b\xd7L\x066\xfc\xa8QF\xb6\xf9\xcclfC\x1b~\xb8\x06\xf6\x087\xb7\x8dP\xf5\"&M\x067\x9a\xc9\x0dat3\x98\xdd&\x91bF\xe3\x1b\xda\xfc\xe6\xb57\x81\xd5\x047u\xaes\x1a\xe2|\xa6\xb8Pc\x1c\x82<.)\x12f\x923\x1a\xe5F]iDUZyW|D\xd8)\x84\xb8\xd1\xc2\xe9\x84\xe4o\x82\x86Jv\x91V5+\xf5\xba\xc6\xbc\xcb\x18J\x14\xef\xd7_\xe2\xfdzt\xad%\x9a\xa6\xab@\xdb\xf4Lo\xf3\x11v\x849\xf8\x14\x1c\xba\xf5/\x1f\xfda\x89\xbe\xee\xda\x8d#\xb0\x01q\x94\xcc\x19\x89\x0d\xed\xedz\x18\x8d\x0d\xe6\x88l\xf0\x0ep\x86\xc8l\x98;:\x1b\xcc\x11\xda0=J{\xc8_B\x8c\x8e#\xb5!4Z{\x80c\x18\xbbm\x8e\xd8\x06\xb1H\xae\xa8m\xb0\xf2\xa0\xb6\xb8A\xd1\xdbN\xb15xq\xb1\x8fy,\xb3\xdaG\x07?=\xe0}\xf4\xa5\x88\x18\x81SF\xf5\x98\x8e,\xa8b>\x07I\x8a\x98%\xc8HzD\xe5**W\x9f\xabr\xf5wMJ\x19d\x87\xc7y\xd1\xb5h=\x16\x12\x9f\xf1>\xf5{\xa7\xe0\xda7\x1b'\xa6\xba\x98\xb6V\xb03\xbc\x8fd\x8a\x1f\xfc\x88\xa9.\x95Z\xfa\x98\xf4\xa2A\x14\xa6\xc31|\xd6\xc2TW\xf9\xac\xf2L\xe3K\xfda\xca.\xcec\xdb\x86q(mP\x0d\xb4\x0b\xfa\xb8[\x19v\xce\x14\x9f\xf1\xbb\xc3~\x9f\xdd\xbc\xd9\x92%\xefP\xca\x11v\x92A\x9cZ8&&\xcc\x98\xb8l\xb0d\x98\x8c\x19\xd5\x86\x962s\xcew\x8blJ\xe6\x8fJ4\x8b\xe7\xf2\xe7w.7\x92V.P{\x1e\xcb\x7f5\x0e#q\xfe6\x0d\xbc\xc7\xafF\x9d\x80\xb3\xb8\xd7\xda\xe3\x98!\xc8\x98xZ\xc7\xd3\x1a\x0c\x03\xb5\xc95\x8c\x10\xed5k\xb0\x8dl\xc9\x16i\xda\xbbe\xa1\x05\xe8@\xb8\x19V\x89Z\xa1\xa0e\xdf\x89\x16\x91\xce\n\"\xd1i\xe6\x8fv\xfa\x15k\xa7\xcf\x05\xe6\x8c\xf36\xab\x1e\xbdO\xcc\xb3\x9e(\xb6\xe7\x13\xd8\x18Q\xdd'c\xcd\xf2\x0d+wi^\xb7\x14}\xf2\xf4\xd9\xa9`J\xf2\xb9L|\xb6\xaa\xdd\xf7Yq\xe1\\\x944\xdf\x16\x9e\x0f6\xec\x93\xf3\x0bs\xc7Ao\xf8\x07>1\xbb/\x8bb\xbb,\xf6a\x9e\x1b\xad\x1dXt\x1e\x98\xd9a#\x9a\x8d\xfe\xea\x90\xea0\xa4)\xb2\x8d\xf3\xc9\x11\x00=9\xba\x83p\x9c>\xef\xd0\x19_\xac7\xfbnK\xe7\xc0\xc9\xd4\x04Y\xa9Ge\xd6I\xb6\x16\xfe\x8d\xfc\x02^\xb1\xf2*cP\x16E=\x0el\xe3;[8\x08\xd7\xc5aX\x9c\x1ad\x88I\xf7P\x89z\xc1H:\xe5Et&\xab*\xb6\xe6\xbf $\xbd\x92\xf1#L9K/.W\xc5\xa1\x14\xed\x8a\x8d\xe1\x19\x99\xcb\xa4\xba4f5\x88\x07{D\x1cL\xdd\xd4\xedN`s\x90\xef#\xb5\xf1>\x8a2B\x9a\xc8\x0f\x9b\xd3q\x84\xd0\xf4\xda\xd8y'o\xda\xdf\xeczP\xd3\x99\xb0\xec4\x04\x16\xdbHu\xc9E[\xdd\x8bVS\xdf\xebW,\xca\xbc*\xc3\xc4t\x07\xd5x\x06\x97\x9c\xe6\xae3\x03,\xe2\x87\xcb\xcbj\x9f\x8ckCx\xcf\x9b\x91\x8c6\xfb\x804\x03\x80\xf8\xa9m(L\x05\x0d6\xdd\xd6\x8a\xa3\x97\xeaX\"s\x11M'\x98\xe7\xf0y\x9a\x15\xeb+\xf4\x81s\xc9\x92\x0d\x1b=\xa5\x88\x12\xa8\xcd\x9bW\x03\xa1*5:\x19F\xb3\xe2C\x11g\x8f\xfe\x8dM\x96\xda%\xe9\xaa\x9bT\x1f\x9c\xe2\xcb\xa1 \x03$\xfb\xfd|\xe8\xdc\xb2\xf0\x19_\xe4\xbc:T\xb0N\xf6R\xb1\x90\xb78\xf5\xe7\xf2\x905!\xb1\xfb\xb2X\xb3\xaa\x92e\xf8\x15\xf5\x06\xe8x[\xf1\x93\x88L;\x19\n\x884_g\x07Y\xc8\x9f\xdfG\xda\x0f\xa5\xe0k\xd9\xb9j\x9f\xec\x90\xbd\x1b_yL\xba\xa7\xdd\xee\x8e\xdc\xf2\\\xf1dP\x97I^\xc9\x9a\xff\xbbd}\x99\xe6\xdaKS\xa2\xe7ejt\xf8\x8e\xc8<\x14\x02\x8eO\xed\xc1\xedu\x8a\xce\x9aV(6I\xcd\xee\xf3v\xbd_\xc5\xcb\x13\x82x\x96\xd1\x93\xb8\xd7\x14\xc3\x87\xe46\xc3\xc9\xbbO\xcazY\xb1z9\xdc\xbb\n\x1c\xba\x8a/\x87\xc2p\x01m\x7f2*\xa3}\xf0%\x1c\x98\xc9\x00>R\x80O\xb9id\xceYR\xd6\x15\xab\xff(\xa8\xf2\x1b\xc3\x07B2\x9e>\x1f.\xf3\xba\xd8\xed\xd2\x9a\x92\xebl\x1dM\xd3\x11G%\xf7\x94\xdc\xc3|\xeb\xf5\xbe\xe3\xff\x9c\xa1;\xf1<\\R\x17e5\x03\xb2\xe1\xd8\xb7\xa5\x08\xb1f\\\x06@q\xa8\xf7\x87\xba\xfb\xdb\xbed\x1f\xe5\xd4z\x18\x84\xb5e\xd61\xb5\x12r\x06\\\xc9~?\x03\x16\xc1/\x8d\xb1d\x06t\xecc\xbaa\xf9\x9a\xcd\x80\xaa]\xbf\xeeX\x19\x9c\xbb|\xe3\x17\x15+\x97\xc6Tik\x7f\xee\xb3m\x88T\x19j\x8a2\xbdH\xf3\xa49\x80\xda\xcfT\xc6\xeaI3\x8dz\xa4\xf3\x8awm\x9e\xb2\xf5\xe57\x8f\x9a\xd1\x8c\"\xa5N\xf3\x9eB\xd4\xc4-)5\xeb\x03'K\xf5\xe1\x04V\x87Z\xd92\xdf=\xff\xd3 \\\x8b\x03\xf7#+k\x18\xe5c \xa3\x8a\xd6\xe7\xb0K\x11\n\xc5\xea\x9a\x95\xf0\xfe\xbf-j\xb7\x94;\x9a\x16\xd9)\x8f\xc27\xdf\x8d\xba!\x8b\x14\xe0\n_p\x01\xab\xfa\xd3\xf4\x9b\xadQ\xf6\xe2\xec\xae#\xa68\xffT\xc9 ke\x12\x15z\x84\xbckH\xad\xe1\xdf%\x01\x16\x7f\x14G\xfeo\x1f\x8e\xd6X\x9as\xc4\xc3\xc6Y\xc6'\x08\xad\xf9T\x88\x98\x05\xc0\x7f\xb1\xbb%\x83\xbf\x1e\xaa\x1a\x92\x8b\x921\xae\xf2\x18\x1f\x95\x95ie\xe2\xf1\xa6Q?BG\xdf\xb1$oF,\x87\xf5d\xbf\x17A\xf2\x9b\x82\xc9GP\xa5R%b\xff*\xc6\x873\xb2\xd7?\x97w\xd3^\x92v\xc5d\x1e\x11W\x90\x92\xe6\xf5\xc8\x06O\x1b!\xd8\x97\xa1J\x18\x04\xb1\xc0\xb81\x84\xf1\x01\xd9\xc2\xd1^k\x96\x1f\x8b\x9a-\xcd\x03\x91\xe0\xd4K|\x9a \x80\xc0o\xb4b\x80\x1f9 :\x00\x85\xc6\xfa+BS\x91\xc0\xf2\x83%\x15U\xc1}xw\xfa\xe3\xeb\x17\xcf\x97\xaf\xde\xfd\xb8<\xff\x9f\xb3\x17\xcb\xf7\xaf\xff\xf4\xfa\xcd\x7f\xbd&\xb6:{\xfb\xe2\xcfo\xce_\xd0[={\xf3\xea\xd5\xe99\xb9\xdd\x9b\xb37\xef\x9e\xbct4k\x02>\x1f\x07\xcc\xcfgS\xea\xc3\xbb\xf4\"g\x9bW\xd5\xc5y{\xc3\xae\x9b\xf7c+\xf1S\xff\xd1H\xf3K\xd3\x1d\xb4\x87\xa6\xe1\x99M\x0d\xac\xf4\x7f\x0c\x7f.j\xc3S\xe9\xde\xd6\x92\x9e\x8f\xe1L\x1c\x91IfGa\xba\x1f\xe9\x80dN\x9f\x9e.\xa1,\x0e\xb91f\\\x81\xffB \xa1\xd7\xdd7\x8f\xac\xdf\x99/[: \xf68 \xf798\xef#\x1d I\n\xbe;J\x1f\xbc\x178\x1d\x90\xb3\x06\xc2\xcc\x01\x9cW\xbd\xc1\x87\xc8uV\x80c/\x05\x98E\x00\xdaB\x00e1\x10\xd7G\xe3\xe7\xe3\xcb\xe4\xf0\xb3\x1d\xab\xeadg03\xf5>\xc2M\xcae\xa9\xd0\xa1\xbd\x7f\x99\xb5|\x1d\x88\xbd;I\xd9u<\xf0$\x8d\x01\xcbO8\xb9\xd1\xba\xeb\xfc]\xce1S\xec\x11\xc5O\x03=\xfb\x90_\x9a\x8b\x9a\x9d\xf0\xff\x91&\x87\x13(J\x90\xff+\x94\x1b+2q\xf1\xee\xae\xd6|\x9c\xf6s\xaaw\x96\x99~\x16Z\xd4*jQQ\x8b\x82\xa8E\x19\x01\xc9\x9c\xb8c.jQ\x80')\xe0d\xb0\x84\xa8E\xf5\x00\xb3\x08@[\x08\xa0,F\xd4\xa2\xb0\xbdG-\x8apD}\xb6Z\x94\xd8\xf6\xcb\x8fE\x9d\xe6\x17KQ\x0c\xcb\xadQ9\x89\xe6\xdf\xea\x1d_\x1c\xbf/\xef\x96#\xf4\xe2\xdaj\x18\x1ex\xae\x8c\x8b\x9c\x11^4\xa6\xc5\xce\xcc\xaa\x8c\x8d\xd2\xbc\xde\x12\xc9\x88\xaaQg\xea\xeb\x82\xb7\xdff\xe9Z\x04\x1dq\x8e1\xacq\xc6\x95\x84\xa5\xac\xe3\xb1L\xea:Y_\x1d\xd3\xb4\xd9\x1b\xd1\xd2\x12\xea \x01q\x8a\xf9\xfa\x82\x96\x18\x88\x93\x13\xd1\x1f \xfb\x04C\xb4\x89\x19\x90\x9d\x02\xa1c\xb0\xc5\xab\x98\x01\x13\xc5bi\x89\x1f;\x10\xc7\x0f\xf68\x183 6\xea\x10\xd4\xc65\xc6\xcc\x98\xc1\x18Ic\x86\xdb\x18\x10F\xac\x0c\x01\x1f\xa1\x83Bg\x8c\xe2\xf1\xc5\xed\x98\x81\x12\xcd\x83B8\x8c\xf8q\xc7\xf8\x98\x01\x13\xf9c\x06s<\x90\x19H\xcc\xe2\xbf\xd5) \xa1\xc5\x9c\x97}\x18G\x1fY\xbe\x0b\x1b\x84_sU\xe0\x88_2\xc3\x91\xe5\x16\xf6~\x02t\xe2\x00N\xe5\xd4\x81xyT@\xa4\x12\x04P\n(\x97J\x05\xd8\xcb\xc0\x10h\xdc\xad\x80\xb2\x98\x10\xb6\xa0\x10\xb2\xa8\xe4K\xe8\xa0\x99\xef2\xaa\xc0\x1d5f\x06\"\x0d\x88s\xc7\xc5\x9d\x99\xc1\x12\x8df\x86cN\xc3\x19;f\x86c\x0e\xc7\x9eFg\x06l\xe0\x1c\n\xd90\xb8\xce\x0c\xfe\x90;3\x1c\x93l\xae\xa0=3\x1cs4\xe6\xb0?3\x1cs\x1c\x9e\xc0A3\x1cs@\x8e\xd0C3\x1cs0\xfe\xe0E3\xb8C\x1a\xcdp\xbcy\x10\xa3\x01M!\x80f\x90G\x8dor\x04\xdd\x84\xa2\x93|&\x9a\xb5\xd7\x8f\xa2\x80\xaa\n\xe1\xec\xa3\n\xa2Jm\x85\xa8R\x0b\xa0\xb1\xb5\x02\xcabB\xd8\x82B\xc8\xa2\xde\x96J\xdd%]c\xa8 go\x7f\xc6@\x07\xe7\xa3\x06:\x90\x99\x91\xce\x8aJ\x82,\xb7Yb\xa8\xa5n\x83\xa0\x05\xf7\xc7O\xe8p\x1f\x9e\xbe|\xf3\xecO\xcb\xd3\xe7\xcb\x1f^>\xf9\x11\x11k0\x84!\x86'O\xdf\xbdx\xed\x0e\x8f\xd0a\x88\x00\x11_\xa1\xc3\x10\xc1\xebSW\x98\x85\x0em\xd0\xc542\xd0\xee\x0d\x12\xe4F\xd9\xfc\x90%\x17\xbdw\x0fd\xd1\x82\xa7\xd9\xba\xb8:}\xee\x8d\xbf\xd0\xa1\xddR\x90\xe2M\x97D\xdf\xa7\x0eA<\x1a$\x92\x10Na\x1d&\x0d\x0dov\x93\x80r\xa6\xea0i|h\xd2\x85\xd8\xc6\x01\x9e \xf5\xf3]z!\xe3\x83\xf89\xaf\x8c\xc7\xc2?\xab\x92\x1a\x90\xe8\xd2\x1c\x92\x06\xa7\xcf`L\x1d\xaf\xc4\xaa\xa7a\xb4>B\x91\xdf\xa1\xd4\xee\xeb\xc4\x13d\xd4\xaa\xdd\xcd+\x08\x89\xca\xe7\xe8\xae\xdb\xf6\xd1w{\xa8b\x88P#\xefy\x83=e\xba\xb1\xf98\x0f\x7f\x82\"OO\xe4L$`\xe7#\x81$\x87\xc8\x1b\x89\xb8\x89\xf6\x87\xd5\xb8p\x95\x0dHD\x012a8\xb0\xcd\xa3\xef\xbe{\xf8\x07\xec\xe7\x01\x04\x02:\x91@\x94\x1dZ\xef\x1f}\xf7\xbb\xab\x87\x9f\xdb\xd0\xa8\xa7\xf3\xd9a\x95\xa5\xeb?\xb1\x1b\xed2\x7f\xc5n\xfa\xe5\xb2\xf0\xe7\xeb\xa1b\xb2\xac\xd1\x9f\xdb\xcd\x8ah\x89\x894\xd1\x81LL\xea\xc5\xa55\xbe\xec\xcb\xb4(\xd3\x9a\xb4'\x8e2.5\"\xdf@\x08\xdb\x92\xb2! r\x8aH\x04\x12\x8f\x13$\x14\x81\x10@$\x06\xd0e\x13\x91(@%\x0c\x84H\xa5\xe3\x0f\x8a&\x8f\xb0\xd2\x88\xcb\x19\x14B\xaa,\xa2J\"\"\x01\xf1\xbb\x1dBe\xd0\xd1F\x84\x0f\nl[\xe0\x87\xe2\x1f\x06\xd7W\x8b|\xe96\xd8\"z\xf4\xf7\xb4\xba\xf99\xc9\xeb4gK\xbf\xc6\xe9\xd74=\x1a&JH\xe1D\x13JB#($\x01\xb9\xcfQ\xf2\x185I@O\x14(\xd2\x17=a\xc0O\x1ah\xb2\xf68C\xc0JV\x8aL5?\x8f\xa9\x03J\x9a\xe2\xc5\x04\x9a8\xfe\x8d+\x81(5g\xec\x1f/!\x11\x9d\"\xba\xf3\x19\x8a\x08\xbdL\x0de~\xc9\xa5\xf23\x11P\xfcD\xc4\x13\xfb\xc2\x99\xa5\xbd\xc1\x88\xab\x17\xc4\x9e\xd45\xdb\xedE(s]\xc0.\xad2\x96l\xc4\xbb\xbb\x17\x97u\xf3\x10\xa12T\xf4\xe2V:\x82\x18%\x8fY\xca\xccR\xa0\xcb\xe0\xc8\x938L\xae\x16\x9bs.V\xe6\xd2~\xb2\xd2O\x81o\xab|~\x95\xb9l\x0e!\x9b:1gI\x13\xaf\x8b\xc6C\x14\xbb\xdb\x85\xe2`!\xb8R\x08N\x13\x9c{\x84\xec\x08\xd1\xd6\xd1\xeb\xc5\xf0\xfb&P^\x08\xcf2x8\xd3q4 \x11\xdb\x8f\x04\xa7\x07\x00\x89\xdd0l\xed\x9c\xc1\x9a\xe5\xcd\x06w\xfb\x91E2\xa2\x9b\x8d\xe4=lCs\xb9\xb9\x18\xebS\x19$_AW\xcfT\x90I\xfep\"/\xa9| MX\xcd~PO\xacA#k~7u\xbed}\xff\x95^J\xcc[=\xf5GV\x8b>\x9f\xde\xc8\xdaT\xe4\n\xde\xe3\xa3\x89r\xc2N\xae\x03\xe7<\x82\x02\x0eH\xcb\xb1\xe3>r\\\xc7\xcd\x9c'\xae\xf3x1\x1e-\x83\xfc\x99\xe6\x9b\xbb\xfd\xb7B\xf7\x19K*&t\xfd\x0f\xd5\xe6JF\xd1\x7f\x804\xafj\x96l\xee\x06-\xeb\xe0\x02\xae\xc3\x8a\xd6\x99[b\n\xd7Y[\"\x83\xab\x83\n\xd8\xc1\xb4\"v\x80\x12c:\xccZ\xcc\x0e(\x05\xed`rQ;\x1b\x06|a;@'k\x11\x18\x1a\xa3\xd5K@%h\xe1\xae\x12\x12l\xbe\x9f1`\x93\xb2\x90\xb2\x03\x08\xf2\x03\xbc\xb7\x9a\x0e\x08d\x07\xdf ?\x04\xd4UQ\x07\x025\x80H\x11\x0e\xa4\x84+\n_(\xc0\xb3\xa6\x02\xecB\x01}\xb1\x80\xba`\xc8\x8b\xaa\xb1 &\xa9\xca\xeb\xfan?\xc4O\xd4gc\xd1\x01\xe5\xc2\xe9C\xc0H\xbc\xa4&\x14\xd4\x03\"\x1f\xe2\xe5\x13:\x1fd~\nP\x8e\xd0Y\x8b\xedq \x15\xdc\x03\x7f\xd1=\xf0\x96/\x06\xbc\\\xc3\xca\xb3\xa8!F\x0d\xd1\x0eQC\xc4\x1f\xc3QC\xf4\x01\x81\xec\x80?\x03$D\x0d\x11\x01\xd8\x85\x02\xfab\x01u\xc1\xa2\x868\x82\x80\x91xI\x1d5D\xfc\x11\xfaEh\x88\xf8\x18c\xc0\x13\x14'J\x90e\x9aa\xee~Q[\x99\xd8\xa3o\x0bc\xf9f\xc6\x12\xce@.\xe3\x0c\x01\xa5\x9c\x01w\xf2aN;tYg\xc0\xf5 \xc8~\x81R\xe2\x19\xf0}\x03\xa1\x7f@\x97{\x06\xda\x00\x808\x08\xa0\x95~\x06\xc0\xc7S\x99\x818\x17\x08\x98\x0fPKA\x03^\x00\x0cA \x04t\x05f \x84\xb2\xd0p\xcb\x83\xc3\x8a\xae!\xe0b\xc5\xd0\xe8\xac\x0f\xbe\xa3n\x9e\n<\x91ff\xc0\xc6\x9f\xa1\x11\x9a\xe2\xd4\xfcQif\xc0\xc6\xaa\x99\x81Rb\x1aB\x18\x0fw\x83V@F\x8f=\xf3\xfb\x80-;\x0d\xd3\x06\xe4S t \x97\xa0\x86\xdb\x93\x9d\x94{\x1e\x84\x11\x0d\xf0*\xb8\x0e\x01\x17u\x05\x01\xd4\x83@\n\x02\xf5\x02\xaf\x80r\x81\x1a\x02}g(\xa0.8\x84/:\x84.|\xd0\x85_\x01\xe1\xe2\xaf\xc0\x1f\xe7h\x86\x00\xba\x04\xd0\x03\x1f)i\x06RYk\xb8\xa5iy\xa3\x1b\xcdp\x1bC\xc3\xa7Kw\x80\x0d\xf7D#\xb4E\xd5\x8f\x01\x17,j\x86\xdb \xa7/\xdc\xd4\x0c\xb712JIl\xb8\xa51!B^\xcdp\x1b\x83#\x97\xca\x86[\x1a\x18.\xec\xd6\x0c\xfe`\\3\x1c\x7f^!\xb73d\xd4/\n\x17\xa6\"7\xa0\xabr\x03]-\xa3\xaac\x9f\xe1\x85\x04\xe5\xeaS\x10\xa2\x11\xe2M\xeb\n\xe2M\x84\xb0\x07%\xc4\x9b\x88\x15\xe8[B\x01u\xc1!|\xd1!t\xe1o\xfb&B\xab\xfe\x0d-E0\xf5K\x15 \xeb\x98*\x08b\xe00\xf6\xf5\x96\x9b\xb0C0c\xe0\xc2\x90t\xa0\x14\xaf\xb0\x03\xa1\xac\x85\x1d\x08\x05/\xec\x80+\x85a\x07r\x91\x0c;\xd0\xaf^\x12\x90\xf56\x88X\xbd\xd59\xec@v\xe9\xeb\x10\xcc\xcf\xc1b\x0e\xe18\x1d\xc3\xe4a\xd2,\xa9\x12\xd01\x02:L\x1e+\x89\xa4!\xca\xbb\x04l9\x13\x02JB\xa5q\x08\x1c;\xbaX\n\n\x9b\xb5\xa0\n\xaa\xea8P*\x8f\x03\xed\x8c\xa3\x9cl\xfe\x9a\x90}\xa0\x9d\xe4\x84S\x9c0; \x949J \xcb\xb8\xa0\xcd\x18\xb0\x11Q5'\xfb@&\x16\x04\x11\x0c(u)\xfb\x10D8\x08#\x1e\xd0jW\xf6\xe1v\x87\x19\xa25`k]\x12P\x86U4\x07R\x0d\xcc>\x04\x119\xe4\xc2\xb6\xa7\xd5\xc9\xec\xc3-\x8cq\x8f\xacv\x0e\xf4\xedM\xdd\xd8D9\x18@\x1c\xf2\xfe J@\"\x81 \x80H\x10&\xfb\x02\x88\x05!\x04\x83P\xa9w{\x03\xa4\xcb\xbb\xd9\xa5]\xa8\xac\x0b\x91t\x01\x84\xa5I\x10\x98\"\xe3\x8e>:Z\x1co\xdb\x8a6,\xdc\x90P\x95\xd5\x01\xdf;\xaeWJ\x95u@k\xd2\x08\x0d\x1a-\x0c\xf1\"\x10}B )(\x81 C\xd0\xe7\x01z\xf2@\"\x00P\xa5?\x89\x10@#\x06\xd0e\xfdq\x87C\x91\xecX\x99\x8e|\x01\x83&\xcdi\xe2\x88D4\x9cP\x90\x10 \xb5\x8f0\x16\x9a\x84F\x0e\x00\xd95\xc6pG\xec\xd1g\x94\xc3\xda\x87\xe6\xac\xf4\x0e\xe1\xd5\xde\xc1V\xf1\x1d\\R\xce.\xd1f\xaf\xf2hq\x12K|\x88\xd2\xb2#\xc7o,\xefh\x84X\xdeQ\x03\x97\xb3\xd1\xa5B\x1d\xab\xd2\x16\xca\xfd\x87 \x9e\xdb\xa5Gu\xde\x11\xddtD\x87\x1c\xde\xf5\x16\xe4d\x9b\xbb\x1a=P<[\x88\xa5Bp\xf9\xed<\\\x82\xf0*\x11z\xb2Lg\xc6\xaa\xf5#t\xa3c\x18\xed\x90\xb18[\x06\xe8\x8c\xae\x97\xb6*xG3UH\xfc]\x9a\xafE@^\xb5+\xaa\xfb\xd5\xe6\n\xbe^|\xfb\xfbX4|\x04^\xb6RL\x15\x8b\x86w_\xe1\x92\xb6b\xd1\xf0\xfe_1\xe8b\xd1\xf0!\xf8\x94\x96\xa8U\x9aX%\x16\x0d\x1f\xfeH\x98\x977\x8b$\x16\x0dw`DdP\x84\xa2\xfe\x92\x8b\x86\xfb\xcf\xf2a\x07\xe2\x15\xa2K\x06E\x99^\xa4y\xd2\x1c\xb4\xedg\xca\x92}b@%'\xcb\xb5\xc9\x84\xeb\xb6O\xf5\xa7\x87\x0c\x0dNs8g\xea \xa2\x13\xa8/y\xdfMe\xb2\x0f\x9cd\xd5\x87\x13X\x1dj\xa5 \xbc{\xfe\xa7\x13\xb86\x89\xb0\xe6\xcd#Hk\xa8\x8ba\xdf\xa6\xae\xb9n\xb2bu\xcdJx\xff\xdf\x0e\x05\xdb\x9fY\xd1\xcd \x96V\x87XZ=\x96V\xf7\xe9N\xb1\xb4\xba\xfe\x8dO{\x93\x80\x8bX\x8f\x853q\xf3\xf5\x8b1\x1db\xe1L\xbf\xf3\x1fh\x0c\x8d\xb9\xfbH@e\xd3\xe1.\\\x12\\N\x14\x1d\xb0YsH\xd9\x01\x04\xf9\x01\xde\xbb_\x07\x04\xb2\x83\xef\x84\x1f\x02\xeaB\xad\x03\x81\x1a@\xa4\x08\x07R\xb6\x1b\x85/\x14\xe0YS\x01v\xa1\x80\xbeX@]0\xe4u\xde\xd8\x04\x93\xb5\xe65\xce\xb7\x1f\xe2'\xea\xb3D\xe9\x80\xf6E(\x08\x18\x89\x97\xd4\xb1p&\xfe\x08\xfd\"\ng\xc6\xd2\xea\xd4\x96QC\xec j\x88QCt\x01Rv\x00A~\x00A\xf1 \x90\x1d\xf0g\x80\x84\xa8!\"\x00\xbbP@_,\xa0.X\xd4\x10G\x100\x12/\xa9\xa3\x86\x88?B\xbf\x08\x0d\xf1\x17\x0c\xf8\x8d\xa5\xd5\xc7\x10K\xab\xc7\xd2\xea\xbe\xefH\x03\x00\xe2 \x96V\x97\x80\x14\x00CP\x02\x81T\xbd<\x96V\xf7C,\xadn\x06lD\x9f\x19biu7L\x18\x90O%\xd0!\x96V\xc7\xaa\xe0:\x04\\\xd4\x15\x04P\x0f\x02)\x08\xd4\x0b\xbc\x02\xca\x05j\x08\xf4\x9d\xa1\x80\xba\xe0\x10\xbe\xe8\x10\xba\xf0A\x17~\x05\x84\x8b\xbf\x02\x7f4\xa8\x19\x02\xe8\x12@\x0f|<\xa9\x19biu\xda\xd0h\xf9\xcd\x12\xb0A\xb1h\x84\xf8*d\xb8\x90Z3\xdc\x069}A\xb9f\xb8\x8d\x91\xc5\xd2\xea\xc4\xc1\xc5\xd2\xea=8\xfe\xbcBng\xfe\x00`\xbcd\x89\xa5\xd5\x87@W\xbbP\xae>\x05!\x1a!\xde\xb4\xae \xdeD\x08{PB\xbc\x89X\x81\xbe%\x14P\x17\x1c\xc2\x17\x1dB\x17\xfe\xb6o\"\xb1\xb4\xba\xb7\xb6\x82\x19\x82\x19\x03\x17\x86\xa4\x03\xb5:\x83\x19\x885\x1b\xcc@\xac\xe4`\x06|}\x073\x04U}0\x03\xfd\xea%\x01Y<\x82\x88\x15Uj\xc2\x0cd\x97\xbe\x0e\xc1\xfc\x1c,\xe6\x10\x8e\xd31L\x1e&\xcd\x92*\x01\x1d#\xa0\xc3\xe4\xb1\x92H\x1a\xa2\xbcK\xc0\xd6\xdc \xa0\x8c\xa5\xd5]\x9f\x92\xce8\xca\xc9\x86+\x04\xa9\x80v\x92\x13Nq\xc2\xec$P\xe6(\x81,\xe3\x826c\xc0FD\x17\x92T@&\x16\x04\x11\x0c\xa8\x05&\x15\x04\x11\x0e\xc2\x88\x07\xf4\xc2\x93\nnw\x98!Z\x03\xb60%\x01eh\xb9aj\xa1J\x05AD\x0e\xb9\xb0\xed\xe9\x05,\x15\xdc\xc2\x18\xf7\xb1\xb4\xba\x03\x88\x12\x90H \x08 \x12\x84\xc9\xbe\x00bA\x08\xc1 T\xea\xdd\xde\x00\xe9\xf2nvi\x17*\xebB$]\x00ai\x12\x04\xa6\xc8\xb8\xa3\x8f\x8e\x16\xc7\xdb\xb6\xa2\x0d\x0b7\xa4XZ\xdd\x0cx\x11\x88>!\x90\x14\x94@\x90!\xe8\xf3\x00=y \x11\x00\xa8\xd2\x9fD\x08\xa0\x11\x03\xe8\xb2\xfe\xb8\xc3\xa1Hv\xacL\x8f\xa5\xd558\xc2Xh\x12\x1a9\x00d\xd7\x18\xc3\x1d\xb1G\x9fQ\x0ek\x1f\x8a\xa5\xd5;p\xadf,\xad\x8ep\xafz\x8f#\xff\x11\x14\x8b`j\x10K\xabc\xbcTD7\x1d\xd1!\x87w\xbd\x059\xd9biu\xf4\xb1\xe6\xf5*\x11z\xb2L\xe7WWZ}0\x86\xbf\xf7\xc7\xf0T\xe6\xf0TP\xb3\xb6\xe2$'\xa1\xfc\xe1D\xaa\x9b|PM\xc8\xda~P\xb2\xb3\x87j\x9b\xb2l\xa3\x8af\xb2\x0d?\xf1Wz\xb5\xce\xd1PZr\xfc\xc8j\xd1\xe1\xd3\x1bY\xbf\xf1-\xab\xf6E^1U8\xb4T\xff\x16c\xe3\xdar\xe7&\xfe\xcf\x03+o\x1e\x0c1\xa8\xfc\x9d\xb7g\xcf`\xc7\xea\xcbb\xc3\xfb\x975\xe4\x17\xab\xa4b\x8bn\xc6\x8b\x8f\x0fW\xacN\x1e.~d\xf5K\xbe\xe9$*5\x08\xc9j#\xb19\x16\x94\xe3\x03\xdd(k\xcd\x12v|\x1aYY\xd9\xc2\xc0\xce\x03:@\x83\xb2\x1c\xc4h\x85gt\xf0\xceY\xeb\xd6y\xb0\x1a\x0f\xd4A\x02\xa2z]\xe09\xdb\x97\x8c\x8b\xda\xcdc\xd8g,\xa9\x98\xb0\x9a}h\x1f$\xf8\x00i^\xd5,\xd9\xc4\x17\x07F\xe0\x95\xb6j\xfd\xe2\x8b\x03\xddW\xb8\\\xc6\xf8\xe2@\xff\xaf\x18t\xf1\xc5\x81!\xf8t\xf9x\xd92\xb1J|q`\xf8#a^\xde\xe4\xaa\xf8\xe2\x80\x03#\"\xb1(\x14\xf5\x97\xfc\xe2\x80\xb5\x7fbY}\xb9\xe3b-\xfdXK?\xd6\xd2\xb7k\x05\xb1\x96\xbe\xfe\x8dO/\x91\x80KQ\x88\x95Rq\xf3\xf5\x8b1\x1db\xa5T\x7f\xb4\x07\xd0\x18\x1a\xa3\xd5K@\xa5O\xe2\xae\x12\x12\\^3\x1d\xb0i\x92H\xd9\x01\x04\xf9\x01\xde[M\x07\x04\xb2\x83\xef\x84\x1f\x02\xea\xaa\xa8\x03\x81\x1a@\xa4\x08\x07Rz#\x85/\x14\xe0YS\x01v\xa1\x80\xbeX@]0\xe4E\xd5\xd8\x04\x93\xa6\xe8\xf5\xc6\xb4\x1f\xe2'\xea\xb3\xb1\xe8\x80v>)\x08\x18\x89\x97\xd4\xb1R*\xfe\x08\xfd\"*\xa5\xc6Z\xfa\xd4\x96QC\xec j\x88QCt\x01Rv\x00A~\x00A\xf1 \x90\x1d\xf0g\x80\x84\xa8!\"\x00\xbbP@_,\xa0.X\xd4\x10G\x100\x12/\xa9\xa3\x86\x88?B\xbf\x08\x0d\xf1\x17\x8c\xf0\x8e\xb5\xf4\xc7\x10k\xe9\xc7Z\xfa\xbe\xefH\x03\x00\xe2 \xd6\xd2\x97\x80\x14\x00CP\x02\x81T\xae>\xd6\xd2\xf7C\xac\xa5o\x06l\xac\x9a\x19b-}7L\x18\x90O%\xd0!\xd6\xd2\xc7\xaa\xe0:\x04\\\xd4\x15\x04P\x0f\x02)\x08\xd4\x0b\xbc\x02\xca\x05j\x08\xf4\x9d\xa1\x80\xba\xe0\x10\xbe\xe8\x10\xba\xf0A\x17~\x05\x84\x8b\xbf\x02\x7f\x9c\xa3\x19\x02\xe8\x12@\x0f|\xa4\xa4\x19b-}\xda\xd0h \xed\x12\xb0\xe1\x9eh\x84\xf8\xb2s\xb8`Q3\xdc\x069}\xe1\xa6f\xb8\x8d\x91\xc5Z\xfa\xc4\xc1\xc5Z\xfa=8\xfe\xbcBng\xc8\xa8_\x14\xaeXK\x7f\x08t\xb5\x0b\xe5\xeaS\x10\xa2\x11\xe2M\xeb\n\xe2M\x84\xb0\x07%\xc4\x9b\x88\x15\xe8[B\x01u\xc1!|\xd1!t\xe1o\xfb&\x12k\xe9{\x8bi\x98!\x981paH:P\xcbq\x98\x81X\xa4\xc3\x0c\xc4\xd2\x1df\xc0\x17\xf40CP\x99\x0f3\xd0\xaf^\x12\x90\xd5B\x88XQ\xb5E\xcc@v\xe9\xeb\x10\xcc\xcf\xc1b\x0e\xe18\x1d\xc3\xe4a\xd2,\xa9\x12\xd01\x02:L\x1e+\x89\xa4!\xca\xbb\x04l\x91\x15\x02\xcaXK\xdf\xf5)\xe9\x8c\xa3\x9cl\xb8\xca\x9f\nh'9\xe1\x14'\xccN\x02e\x8e\x12\xc82.h3\x06lDt\xe5P\x05dbA\x10\xc1\x80ZQTA\x10\xe1 \x8cx@\xaf4\xaa\xe0v\x87\x19\xa25`+\x91\x12P\x86\xd6\x97\xa6V&U\x10D\xe4\x90\x0b\xdb\x9e^\xb1T\xc1-\x8cq\x1fk\xe9;\x80(\x01\x89\x04\x82\x00\"A\x98\xec\x0b \x16\x84\x10\x0cB\xa5\xde\xed\x0d\x90.\xeff\x97v\xa1\xb2.D\xd2\x05\x10\x96&A`\x8a\x8c;\xfa\xe8hq\xbcm+\xda\xb0pC\x8a\xb5\xf4\xcd\x80\x17\x81\xe8\x13\x02IA \x04\x19\x82>\x0f\xd0\x93\x07\x12\x01\x80*\xfdI\x84\x00\x1a1\x80.\xeb\x8f;\x1c\x8ad\xc7\xca\xf4XK_\x83#\x8c\x85&\xa1\x91\x03@v\x8d1\xdc\x11{\xf4\x19\xe5\xb0\xf6\xa1XK\xbf\x03\xd7j\xc6Z\xfa\x08\xf7\xaa\xf78\xf2\x1fA\xb1\xbc\xa3\x06\xb1\x96>\xc6KEt\xd3\x11\x1drx\xd7[\x90\x93-\xd6\xd2G\x1fk^\xaf\x12\xa1'\xcbt~u\xb5\xf4\xdb\xaa\xe0\x1d\xcdT!\xf1wi\xbe\x16\x01y\xd5\xae\xa8\xeeW\x9b+\xf8z\xf1\xed\xefc\xd1\xf0\x11x\xd9J1U,\x1a\xde}\x85K\xda\x8aE\xc3\xfb\x7f\xc5\xa0\x8bE\xc3\x87\xe0SZ\xa2Vib\x95X4|\xf8#a^\xde,\x92X4\xdc\x81\x11\x91A\x11\x8a\xfaK.\x1a\xee?\xcb\x87\x1d\xa8\xd7\x86\x8a2\xbdH\xf3\xa49h\xdb\xcf\x94%\xfb\xc4\x80JN\x96k\x93 \xd7m\x9f\xea\x0f\x1f\x19\x1a\x9c\xe6p\xce\xd4\x03D'P_\xf2\xbe\x9b\xcad\x1f8\xc9\xaa\x0f'\xb0:\xd4JAx\xf7\xfcO'pm\x12a\xcd\x8bK\x90\xd6P\x17\xc3\xbeM]s\xddd\xc5\xea\x9a\x95\xf0\xfe\xbf\x1d\n\xb6?\xb3\xa2\x9bA,\xad\x0e\xb1\xb4z,\xad\xee\xd3\x9dbiu\xfd\x1b\x9f\xf6&\x01\x17\xb1\x1e\x0bg\xe2\xe6\xeb\x17c:\xc4\xc2\x99~\xe7?\xd0\x18\x1as\xf7\x91\x80\xca\xa6\xc3]\xb8$\xb8\x9c(:`\xb3\xe6\x90\xb2\x03\x08\xf2\x03\xbcw\xbf\x0e\x08d\x07\xdf ?\x04\xd4\x85Z\x07\x025\x80H\x11\x0e\xa4l7\n_(\xc0\xb3\xa6\x02\xecB\x01}\xb1\x80\xba`\xc8\xeb\xbc\xb1 &k\xcdk\x9co?\xc4O\xd4g\x89\xd2\x01\xed\x8bP\x100\x12/\xa9c\xe1L\xfc\x11\xfaE\x14\xce\x8c\xa5\xd5\xa9-\xa3\x86\xd8A\xd4\x10\xa3\x86\xe8\x02\xa4\xec\x00\x82\xfc\x00\x82\xe2A ;\xe0\xcf\x00 QCD\x00v\xa1\x80\xbeX@]\xb0\xa8!\x8e `$^RG\x0d\x11\x7f\x84~\x11\x1a\xe2/\x18\xf0\x1bK\xab\x8f!\x96V\x8f\xa5\xd5}\xdf\x91\x06\x00\xc4A@,\xad.\x01)\x00\x86\xa0\x04\x02\xa9zy,\xad\xee\x87XZ\xdd\x0c\xd8\x88>3\xc4\xd2\xean\x980 \x9fJ\xa0C,\xad\x8eU\xc1u\x08\xb8\xa8+\x08\xa0\x1e\x04R\x10\xa8\x17x\x05\x94\x0b\xd4\x10\xe8;C\x01u\xc1!|\xd1!t\xe1\x83.\xfc\n\x08\x17\x7f\x05\xfehP3\x04\xd0%\x80\x1e\xf8xR3\xc4\xd2\xea\xb4\xa1\xd1\xf2\x9b%`\x83b\xd1\x08\xf1U\xc8p!\xb5f\xb8\x0dr\xfa\x82r\xcdp\x1b#\x8b\xa5\xd5\x89\x83\x8b\xa5\xd5{p\xfcy\x85\xdc\xce\xfc\x01\xc0x\xc9\x12K\xab\x0f\x81\xaev\xa1\\}\nB4B\xbci]A\xbc\x89\x10\xf6\xa0\x84x\x13\xb1\x02}K(\xa0.8\x84/:\x84.\xfcm\xdfDbiuom\x053\x043\x06.\x0cI\x07ju\x063\x10k6\x98\x81X\xc9\xc1\x0c\xf8\xfa\x0ef\x08\xaa\xfa`\x06\xfa\xd5K\x02\xb2x\x04\x11+\xaa\xd4\x84\x19\xc8.}\x1d\x82\xf99X\xcc!\x1c\xa7c\x98%\x9dq\x94\x93\x0dW\x08R\x01\xed$'\x9c\xe2\x84\xd9I\xa0\xccQ\x02Y\xc6\x05m\xc6\x80\x8d\x88.$\xa9\x80L,\x08\"\x18P\x0bL*\x08\"\x1c\x84\x11\x0f\xe8\x85'\x15\xdc\xee0C\xb4\x06laJ\x02\xca\xd0r\xc3\xd4B\x95\n\x82\x88\x1cra\xdb\xd3\x0bX*\xb8\x851\xeeciu\x07\x10% \x91@\x10@$\x08\x93}\x01\xc4\x82\x10\x82A\xa8\xd4\xbb\xbd\x01\xd2\xe5\xdd\xec\xd2.T\xd6\x85H\xba\x00\xc2\xd2$\x08L\x91qG\x1f\x1d-\x8e\xb7mE\x1b\x16nH\xb1\xb4\xba\x19\xf0\"\x10}B )(\x81 C\xd0\xe7\x01z\xf2@\"\x00P\xa5?\x89\x10@#\x06\xd0e\xfdq\x87C\x91\xecX\x99\x1eK\xabkp\x84\xb1\xd0$4r\x00\xc8\xae1\x86;b\x8f>\xa3\x1c\xd6>\x14K\xabw\xe0Z\xcdXZ\x1d\xe1^\xf5\x1eG\xfe#(\x16\xc1\xd4 \x96V\xc7x\xa9\x88n:\xa2C\x0e\xefz\x0br\xb2\xc5\xd2\xea\xe8c\xcd\xebU\"\xf4d\x99\xce\xaf\xae\xb4\xfa`\x0c\x7f\xef\x8f\xe1\xa9\xcc\xe1\xa9\xa0fm\xc5INB\xf9\xc3\x89T7\xf9\xa0\x9a\x90\xb5\xfd\xa0dg\x0f\xd56e\xd9F\x15\xcdd\x1b~\xe2\xaf\xf4j\x9d\xa3\xa1\xb4\xe4\xf8\x91\xd5/9\xb7\xd7\xa2\xdb\xb7\xac\xda\x17y\xc5T\xd9\xd0R\xfd[\x8c\x8c\xeb\xca\xfc\xaf\xffy`\xe5\xcd\x03\xbde\x83\xee\xed\xd93\x95\xbf\xb3c\xf5e\xb1\xe1}\xcb\xfa\xf1\x8bUR\xb1E7\xdb\xc5\xc7\x87+V'\x0f\x17-\xa2V\xb9~\xc7j5\x12\xc9m#\xc99\x96\x95R:\x0eu\x0f#S\x9a\x8e(\xd3\xcd\xd9$\xe4G\xc2\xdd\"\xd4m\xc2\xdc\"\x13\xac\x9b\xc7r\x1du\x1c%\xaec\x847[\x1eJ\xe3!\xef\xd9\xbf\x18\xa5\xf6 \xbc\x7f\xfb\xf2A\xc9\xaa\xe2P\xae\x19\xe4\xc9\xae\xd9J\x87<\xfd\xe9\xc0\xb2\x1b\xe0\xfb\xabN\xb7is\x19\xab\x9b\x9a*\xb6\xd0\x83\x8a\x95i\x92\xa5?\xb3\x8d9+l_\x16u\xb1.2X\x1d\xb6[V\xaa\xa2,\x0bY\xffS\xce\x05v\x87\xaa\xdd\xe7\x90\xd4\x90\xb1\xa4\xaa\xcd\xf8\x8a\x9c\xc1\x9d\x07w`}\x99\x94\xc9\xbaf%\xc7\xc4\x84v\x0c\x15\xbb\xd8\xb1\xbc\x15B\xef\xdf\xbe\xbc[\xc1>\xa9/E\x07Ftm\x06\xbc\xb97\x8ef{\xc8\xb2\x1b\xf8\xe9\x90d\x9c*\x1bI\xb3\xa6\x0bA\x9d{I\x05inF\xf0\x81w\xff\xe0\xa2(.2\xb6\x10\xb4X\x1d\xb6\x8b\xe7\x87R\xa4\xd2}\xf8J\x8e^\xa0\xac.\x8bC\xb6\x81\x95(XcN\x8cX'y\x91\xa7\xeb$\x13\x1b\xc4\xdc\xe3=\xb6\xb8X\x9cp\x12\x8a\xa4\xc0;\x8b;\\T\x88\xba\xae\xeb5\xdb\xd7l\xf3\xd5\xe27\xe6\xa6\xa79\xec9Q\xd35;\x81\x9a%\xbb\n\x0e\xd5!\xe1\xd3\x975\x01\xf6i\xc6GW\x17\xb2|j\x9a'\xe5\x0d$Yf\xa6\xdd\xcd\x9e5\xb5]\xebKvc\xee\x92}\xda\xb3\xb5*#|\xa8T\xb1\x1e\xc1\x0c\xec\x93X\xca'\xf9\xcd\x02\xfeX\\\xb3\x8f\xac<\x11\x12\xee\xfd\xdb\x97\xe6\xcb\xbd\xd4\x078\x1a\xce\xaef~]_\xb2\x1d\x83\x0f\x97u\xbd\xffp\"\xff[}\x10\x95\x0e\xf2\xa2\xf9\xf5Dp\xd9:\xc9\xa1\x10\xbbIP`|\xa0H8\xec\x9b\xcaC\x96\xfeX\xf9\x91\x95\x92\x0c\xbbd\xdf\xd4[\xe63\x10\xd7\xbe\xa6D\x910\x7f\xa4\xb2Jmb\x9e\xdb\xb6\xc8\xb2\xe2\xbazlY\xbb\x7f\x85\xd3m7\x03\xbe\xe4\xfb\xb2\xe0\x87\xe5\xa6\x9d\xa48\xa6\xab\xea\xb0c\x1bK\x89\xa3\x7f\x85'9\xfc\xf1\xfc\xfc\x0c~|q\xde\x94\xf6\xe5c\x95\x1b\xf4F\x1cbf\xce\xfc\xdf!\x8b\x9f\xdf\xec\xd9_\xfe\xf7/\xc6\x8f\x85,?\x88\xb5nxH\xca{\xb1\n\xfb\xb2\xd8\x1c\xd6\x0c\x92\x1cXY\x16\x96\xe8\xed\x7f\x85']Fj%\xaa\x14'\x9c>\xf2l]'k.\x13\x8a\xe2\xea\xb0\x87&\x17\x01\xf8\xe1\xb6\x81\"\xb7mt\xcbP\xdf\xbf})\xc6u\x99|\x14l\xb5\xeb\xed\x85\x8d\xdc\x0c\x89\x9a\x06\xff\xff\x8fE\xba\x81$\xb7\xd9m\xe5\xa0\xc4\xb6/\xd9\xb6(\xd9\x89j\xccq&u\xbaJ\xb3\xb4\xbe\x81\x9c\xb1M%\xf5\x04\x10\"\xaa\xfch\x0d\x98)r.\x0e\xf3\x0b&\x1a\x88}\xb7\x80{\xef+\xa6\x92\xe59U8\xdbq9#\xf9.\xc9\x93\x0b\xdb\x8cW%K\xae\xb8\xech\x90.\xbe2s\xcb\xeb\xa2f\x8fe\x11\xf1\xed!_\xcb\x9d\xc2\xc7\xde\xc8\x9b\xf5\xa1,Y^g7=c\x9e##\xba\xd8n\xd3u\x9ad\x8esdu\xd8B\xc9\xf8\xe9\xc0ND\x9erZ\xab\xce\x0e|q\x85\xfa\xd3\xee\xaf\x15\xbbH\xf3\xdc\xa6\xebr\xed\xcd\"\xf4o\xf6l!\xf99\xd9\xa7\xd5b]\xecl\x12\xf3\x9d\xd8m\x15\x14\xf5\xa5\xdc\xe4\xf9P\xb2\xc0\xbdF%c\xbb}}\xd3l\xcf\xaf\x8c\xc8v\xc2\xf2\xb3\xb2\x08\x121A\xa1r\xa6\xbb}\xc6\xf8A'\x98\x1f\xaa=[\xa7\xdbt\x0d\x15\xdb%y\x9d\xae\x0dqEb\xbf\x05\xa8\x14\x94\xeb\x80E\xe3x\xc5E\xc7\x8a\xa9\x8a =\x85a\xa4\x1b\xa8\\\xf3U\xf1\xd1\xa2l\xc8\xa96\xec<\x9c\xa6o4\x1f\x9e\xe47\x1f\xba\xebD\x92CR\xae\xd2\xba\xe4\x9b\xcf1\xaaFF\x8f\xd0%Y\x91_\xc8\x15I\xc6K\xc6\xa5\xa6\x10\xfarT\xab\xb1:\xd5\xefSiE\x066;S\x8c\x9f\xa5+1\xd4F\xaeWP\x1d\xf6\xfb\xa2\x14'\xe7>Y_=8\xe4\xfc?\xfc\xbc\x94\xeb-\xb4\x92!:\xa1\xd1\x18\x95\x87b\x0b\x87Z\n\x1f\xb5\x9d+.\xf8\x92\xcd&\x95{\x1b.X\xce\xca\xa4\x16\x03\xe6W\x87\xb6<\xc0\x13\x83\xbc\x93K4\xee\xe7\xc5\xa7\x8430<|\x0cg|\xbc|\x1f7CO\xfa5\xfb\x9e\xfd\xf6\xb7\x96c\xea\x87\xa2\x80mQ\xc0\xf7\xb0X,\xfe\x8f\xf1\x13N\x84$\xbf1\xff\x98\xe47\x0b\xde\xf5\x0fe\xb1\xbb\xb7-\x8a\xaf\xcc\x9f-\x16\xe6\xb3'\xdd\xc2=\x8e\xe2\xbd\x18\xf4yq\xef_8\x8e\xaf\xe0o\x16yj\xc3\xf3\x0f;m\x1eyh\xf3\x1f\xc9\xc7d2q\xe0{\xa1[q\xec\x13\xa8\x90V\xf7~(\x8a\xc5:K\xaa\xcaA\x049$\xde@\xce\xa7\xd7\xc8\xdc\xaf\x81:-y\xbe\xf1\x90\xe7\xec\xa6\xbe,r\x0b\x81\xe4H~(\x8a{\x8b\xc5\xc2,\x89[\xe2\xdc\xb3\xfe.\x18H\x90\x8dJ5\xde\xf8T\x12\xed\xf9\x8bw\xcf\xde\x9e\x9e\x9d\xbfy\xfb\x95\xcdf\xd31\x9a\xbd3\xd9\x9d\x9d\\\xdfz\xc8\xf5ca\xa9\xe8\xc1I\xf5\xf8{\xf8\x97\xfdj\xf1CQ\xfcm\xb1X\xfc\xc3\xfca\x92\xdf\x9cpu\x8d\x7f\xbd\x97\n\xc8\xab\xa4\xac.\x93\x8c\x13\xd1>p\x1b\x99\x86=[\xbaM\xb7\x83N\xdf\xe7\xbb\xae[1(\xc1\xd8\xe2\xab\xff\xef{\xc8\xd3\xcc\xca\xa0\xf6\xb1\x188\x91_\xda\x04\x1d\x95\x1cT\xca6\xacn:UEIl\xf90\xc7\x8d2\x80\x8e\xb0\x1d*\xc3\x99\x7f\xd7\xa0\x86<\xe0w\xd1\x85\xf8\x81\xabrw!\xe9\x9d*\xfc\xc4ij\xb7\x8c{\x10\xab>\xee\xa4\x15\xe3yv\xa3\xeeM\xa3\x0bo\xab:B\xb2\xad\x99\xd4f\xf8}{<\xe4\x07w\xc7]4\x17:5Dy\x83c\x0dg\xde\xd9\x16\xc5b\x95\x94br\x9f\x1e\xdc,~\xbe#\xa9%\xef\x1a\xe6k\x95\x18\xca\x1d\xfe-?^F?\xff\xc7\xbb7\xaf\xc7\x7f\xfd\xfe\xfb\xef\xbf7\xaf#\xff\xbe\xb3\x03H\x9d\xaa\xe0\xdb\xb4Q\x18\xe4]\xe5P1ep\xbb8d\x89\xa1\xb6\xdd\x18\x05\xff|\xc3\xbac\xfe\x04\xd8n\xc56\x9b\xee\xc0o\x8c\x88\x89\xc1z\xd0;v\xa5\xf5\xf0\xc3\xbfsr|h.\xb9\x9aUT\x11w\xa1\xb6\xfcc\x8b\x12\x9d\xac\xaf\xf8\x9e\xef.k\xdb4cf\xf9\xab\xe4\xc3\x19+\xab\"\xb7n\x9b\xc6\x82#\xdeyY\x8a\x95\xf9\x1e\x1e\x9a1\xb6\x1f\x0bWf\xf3\xed#\xbc\xf4\x07\xb0\x8e\xe2\x8e\xa0\xcd\x9d\xc7p\xc7\xb4k\xf4\xe9.\xe4\x8c\xee\x98^T\x12\xb8\xc4\\^';\x8e\xef\xff\xca!\xff?\xeb\xc7|.\x83o\xb1\x13:\xdd6\x17\x03\x9d'\xe4j\xa6\x15\\\xb3,\xbb\x7f\x95\x17\xd7\xb9\xd8\xd7\x97\xe2\x91\xa7\xf5\xa1\xaa\x8b\x9d\x85\xc9u\x16<\x91\n\xe8\x80/\xd5+Am\xb7\x9c\xd1\xf2\x0b\xc3\xbd^\xb0\xdd\xb8\x93\x0fbC(>\xbc,\xb2MS;\xab\x1b\x99\xb0`5\xfc\x0b\x8d\xb5\xa8a\xdf1>\xd1M\xcb\xb9p\x8f\xcb\x07E\x8a\x91YAY\xce\xfe\xf2\xbf\x7f\xf9\xca\xc2\xe4SyD\xef\xc8\xce&\x82\x0c\x1c\xdd\xc3\xc5\xa3\x87\x8f\xaa;\x96e\xef\xff\xcb\x15_\xe1\xb8\x89\xd9\x1d\xb6\xde\xe0\x91\x00\xac\xda5\xaa5\xf8+\x7fC\xddw3\xb4&\xf9\xfb\x15k];\xfb\xe4\"\xcd\x05\xed\xba\xc1h8\xbb\x0f\xda\xb0\x9f$\xef\xffU\xa1W\xbe\x8d\xee\\\xaeMFu\xb39]T\x15\x19\xd9\xe5\xad\xf4\xb0\xdet\xed\xfe!\xe8\xf5\xa2\xc8\xc3\xff\xb71\xda$U%\xadQg\xc9\x05{\xcb~:\xb0\xaa^\xc8\xdf\x07H~:\xb0\xf2F4\xe7\xe88%\x18\xec\x8a\xaa\x06&L\"\xc2\x86\xb2\x80\xd3\xba\xb7w\xf7\xf5\x0d\xa4\xc38\x93\xba}\xb1+/`W\x94L\xd9\xbe\xfa\x8a\x8d!\x84\xc0K\x14CI>[\x98\x97@/\xa8!\xfe'?\xecV\xf2f\xaf\xccp=[\xd0p\xfc}B\xad\x8bC^/\x05\x92\xe16\xbfN*\xa8X}\x02i])Kb\x05\x87\\2\xd3F\x1ac\xae\xd3&d\xcc\xbc~N\x8f\x96\xd3\xb7\xd6 h=l}\x04Oo\xe4\x13k\xf0\xf6\xec\x19\xc9\xbb\xf6\xba\xd8\xb0\xd3|[\x90}j\x8dJ\xb9\xcc\x8b\x0d[\xa6\xf9\xb6\x18\xfa\xc6P{E\x99<\x96\xc6\xe2\x9aFDvd\xe2\x97G\x06w\xb7\xd3\xd6\xe4`5k}\xccp\x84\xc6\x8a\x96a\xe8\xf4\x15\xd8\xa0vV\x96V5\xcbE\xf4\x01\xea\xfb\x9c\xd5\xd7Ey\x85\xfa\xd6\xb1\x84\xa3o\xd7\x97I\x9e\xb3\xacB}l\x95\x91\xbb\"O\xaf\xcc/\x87\x8f\x90\x88\xbd9\x99\xbd\xeaO\xb6\n\xdf\x8e5,\xf7k\xd2\xa3\x9e\xbd\x92\x97\xe3}A\xd8\\\\\xd1E\xd1&\xd9\xef\x97\xe8\x8f)\xcb|\x91\xba\"\x07G\x9f\xaf\x0ei\xb6Y\xd6\xc9\x05\x8e/.\n\x97\xd8\xb0`\xdf\xb0\xbd\x11\xfb8^\xcb\x18\xabe\xe5\x19\xb7s}\x9f\xd4\xc6\xa86\xe7\xceo\xcf\xba]\xb19dL \x19}\xe4\xa8JLB\xde\xe0\x19}W\x99\x03\xc2p\xb8\xd7\x97l}U\x1dvC\"\xca__\xc9\x9e\x87\xfa\xdd\x9f\xe5HN\xf5*T\xf2([V\x9b+\xd2\xa2\xb7\x9d\xdd}\x97\xe6kQ\xe6\x8a\xe3\xb9_m\xae\xe0\xeb\xc5\xb7\xdf\xdcm\xbf\xd5\xb5\xcfn\x0cF\xfd\xd3prv\xa6\xf4\x11\xb6\xfe\xe1?j\x86\x0b\xa7Q\xcdD\x14\x8dDF9\xe6\xdf\xdd\xe4\xeb4\xbf \x9f\xf2\x95l7\x14?\xab\xa2\xc8X\x92\x8fg\xda\x8f\x1d\x1a\xf4\x89\x9ch\xd3*p\x9e&\x9d\x88<\xe9\x18.\xa4Z\xc4p\xa1\x18.\x14\xc3\x85 \x86\x0b\xc5p\xa1\x18.\x14\xc3\x85$\xc4p\xa1\x18.$(\x15\xc3\x85\xfa\x10\xc3\x85F\x80\x8f\x88\x89\xe1B\xa6Ob\xb8P\x0c\x17\x8a\xe1BC\x88\xe1B1\\(\x86\x0b\xb5\x10\xc3\x85b\xb8P\x0c\x17\x8a\xe1B1\\(\x86\x0b\xfd*\xc3\x85\\>\xad[\x0e\x18\xfac\xaf\xc8\xcc\x88\xc5\xc7\xec=\x0e^\xf0\xbc\x89K\xd86\x86\xc8\x1c:{\x8c\xa2q\xa8(\xec\xa6\x1c\xdc;\xaf\x80}\xbf\xd5\xf2B+\xf6\x0dV\xe3\xdb\xaa:!\xcc\xaf\xac\xfa\xdeQ\x1d\xbf\x94j a\xb0+U\x7f\x93\xd4\xd9lX\xa1\xc4\xf2r(\x81\xc3\xc6\x95\x88\xbc\xdc1\x10\xca\xce\xe2L\xc6\x91\x80;\xfa\xc8\\\x84IbB\x14\xbb\x1aE\xa3\x99\x8b-9\xceb\xc7\xf9\xe3,\xaad,\xa6d\x7f;\xd2\xb9\xd2Z\xcf\xfe\x17\x1e\x0do8b\xd1[\x9f\x06\xc4\"\x18\x8e\xcf\xfb\xc8\xa1V\xe7\xdf\xfd\x9c\xc0\xeaP+{\xc6\xbb\xe7\x7f:\x81k\xa6J\x00I\x0f\xb6\xbd\xaf~W\xfclZ\xb1\xbaf%\xbc\xffoCX\x93\xff\xc1\xbcn\xa4\x0d \xbaw\xf1<\x9a\x86\x8c\x0dCk\x1az|\x9dq\xf9\xac\xb1t\x96\x10Kgs=ZN\x8b\x91s\xb5\xd6\xe2\xe1(Qp\x1ej\x9d\x95E\xb1}\xb3G\x93K|\xe2\x1a\xb1v\x1f\xc1\xee6.i\xa9\xad\xcc\x9b\xaa\x99O\xff\xda\xc5\xa7 o]\xad\x07u\x9dd\xebC\x96\x88J\x96\xafXy\x951(\x8b\xa2\x96\xa1*\xbd\x13`]\x1c:\xfb\xc0\x8a\xf5\xbci\xca\x9d/\xad\xa2\x1cO\xce\xaa\x8a\xad\xf9oB\x83\xea\xdb\x00s\xae\xc5\xac\x8aCoBy\xb1i\xed~\\Bun$\xe9s>\xef\xef\xce\x046\x07\xa9e\xb5\x9e55Oq\x9b\x97\x1f\xaa\xcbA\x17\xa8\xd3m\"\xc4\xbei0VhV(\xf6G\x0eS\xd3y\xad\x8f\xc2\xa0aX\xe3\xd3\x9c\x96\x81\xf1]X\xe3\xc4P<.?\xedt\x0e\x1d\x0dX\xe7S \xc1\xdc\xaaa\xe9s\xae\xc6\xb3\x12t\xce\x950#\xffJ\xd0\xb9\xd8v\xddU\xec\xcb\xfbk\x08\xb6\xe7\x7fj\xd1\xae\xa4\xfd!K+\x11s\xa5\xbe_\x04\xed\xbb\xca2p\xd3\x88=\xfb\xae\xbd[\xa37\x1eF\xe9\x18\x85l\x1a\xf7\x9ey\xe7\xd5\xc6\x00M\xeb.p\x07%\xcc\x18\x8ei\x0f\xc4\x9c/\x04s\xb6\xe0Kk\xd8\xa5\xc9\xff\x84\x0c\xb8\x9c+\xd4\xd2\x1dd\x19\x14^\x19\x1cX)\xe6;\x8c\x07\xb4\x86T\x06\x07SJ[\xfe\x00\x9b%\x8crJ\x00\xa5\x08\x96\x1c\xce\xc6\xe0\xe3\x0b \x9a\xb4\x07HN\x0c\x8dD\x05E\xe2\x03 '\x84>N\x08z4\x08\x8c\x19C\x1b\xe7\x0dj\x9c-\x9c\xd1\x1f\xc88[\x08\xa3-xqJ\xd8\xa21D\xb1\xc6\x04'\x86\x86%ZC\x10\x03\x83\x0f\x0da\x87\xd6\x83\x12\xe7\x80\x19\x9d\xa0\x81\xe1\x85](\xa1\x89\xbe\xbf\xf1\xf7=-\x98P\x06\x0f\xf6\xd0\x8d\xc3\x08g\x08 \x9c\x16:8\xe0\xf2\xe1a81\\\xb0!t\x1f\xe3\x94\xc0@g\xd4\x9b%\x18\xd0\x1b\x068\x8e\x08\xc2\x87\xfe\x8d\xdb\xfe\xc34\xd7\xa0@?\xccd}\xc1}\xf6\xb9y\x03\xfa\x08\xa1|z\xd4\xc3\xc4\xf0=g\xe0\x9e=d\xcf\x15\xacg\xa4\x026@\xcf\x17\x9a7\x0c\xca\x9b\x10\x8e\x87\x08\xc4\xa3\x87\xe0\x19\x02\xde|aw3\x05\xdc\x19z\xd68eRx\xdd0\x9cnJ \x9d!pnR\xc8\xdc0Dn\xce\xe08kX\xdc0Vh\x18\n7O\x10\xdcl\xe1o\xf3\x06\xbe\xe1B\xde\xbc\xc1n\xcd-\xd9\x17\xe6\xd6|\xe6\x0cp\x1bE\x82\x8d{\xc3\x86*\xb9\xc3\xd9\x90\x81l\x88\x106m\xc8s\x86\xadM\nX\x1b\x07\xa8\xcd\x17\x9a6_PZ\xf8\xeaz\x03\xd1|!hJ|\x9b\xc3\xce\x8c\x9a\xb8\xc9\xab\xed\x082C\xe2\x98\x12R\xe63\x10v\xfe\x1c\xb4\x89P\xaf\xc9a\x98\xc3\xb8p\x87\xe1#\x8c\x7f\xcbT\xa8\xc3\xf0\x99\xa9@\x87 \x9b\xa10\x87\x15\x9b^\x90\xa3>\x82\x07\xc2T|\xc3z\xbd\xf3\x16\xdd\xb0\x14\xdc@#4\x15\xda0\x14\xd9\xf0\xe33\x14\xd7\xa0\xb8\x14\xc1ST\xc38\x00L1\x8d9\x0bi\xf46\xd2\xba\xbc\xd9\xd7\xc5\xa2}\xb9\x11\xbd\x8bF/f:\x85A\xefZox\xdd\x12\xd7T\x85\xc2\x10\x1e\x994\x863q\x18%\x99\x1d\x85\xe96\xa0\x03\x929}Z\xa9\x84\xb28\xe4\x1b\x7fo.\xf5WB\xaf\xbbo\x1eY\xbf3_-t@\xecq@\xeespj\xdf\x1d I\n>\x8d\xbc\x0f\xde\xeb\x8a\x0e\xc8Y\x03a\xe6\x1c\x1c\x17\x9b\xc1\x87\xc8uV\x80c/\x05\x98E\x00\xdaB\x00e1\x10\x97%\xe3\xe7\xe3\xab\xd3\xf0\xb3\x1d\xab\xeadg0\xaa\xf4>\xc2M\xcau/\xd7\xa1\xbdm\xd8k\xf2w@\xec\xddI\xca\xaec\xcb\x13\x02\x1d`\xf9 '7\xb8\xb0O\xb8b\xed\xefr\x8e\x99b\x8f(~\x1at>t~:\xf1+bQ\xb3\x93&\xbcw\x97\xcapc\xf9\xbfB\xb9\xb1\"\x13\xd7\xcc\xee\"\xc9\xc7i?\xa7zg\x99\xe9g\xa1E\xad\xa2\x16\x15\xb5(\x88Z\x94\x11\x90\xcc\x89;\xe6\xa2\x16\x05x\x92\x02N\x06K\x88ZT\x0f0\x8b\x00\xb4\x85\x00\xcabD-\n\xdb{\xd4\xa2\x08G\xd4g\xabE\x89m\xbftU\x92k\xbf\xf4\x13\xcd\xbf\xd5;\xbe8~_\xde-G\xe8\xc5\xb5\xd50<\xf0\\\x19\x179#\xbchL\x8b\x9d\x99U\x19\x1b\xa5M\xbd%\x92\x11U\xa3\xce\xd4\xd7\x05o\xbf\xcd\xd2\xb5H\\\xe7\x1ccX\xe3\x8c+ \xcbu\x96\xb2\xbc^&u\x9d\xac\xaf\x8ei\xda\xec\x8dhiq\xecK@\x9cb\xbe\xbe\xa0%\x06\xe2\xe4D\xf4\x07\xc8>\xc1\x10[a\x06d\xa7@\xe8\x18\xdc\x8f\x89\x0d\x01\x13\xb3ai\x89\x1f;\x10\xc7\x0f\xf6\xa8\x0f3 6\xea\x10\xd4\xc65F\x88\x98\xc1\x187b\x86\xdb\x18\x10F\xac\x0c\x01\x1f\x8f\x82Bg-y\xe7\x8aR1\x03%v\x05\x85p\x18\xdf\xe2\x8eh1\x03&\xce\xc5\x0c\xe6\xe8\x173\x90\x98\xc5\x7f\xabS@B\x8b9/\xfb0\x8e\xb5\xb1|\x176\x08\xbf\xe6\xaa\xc0\x11\xadc\x86#\xcb-\xec\xfd\x04\xe8\xc4\x01\x9c\xca\xa9\x03\xf1\xf2\xa8\x80H%\x08\xa0\x14P.\x95\n\xb0\x97\x81!\xd0\xb8[\x01e1!lA!dQ\xc9\x97\xd0A3\xdfeT\x81;F\xca\x0cD\x1a\x10\xe7\x8e\x8b\xb22\x83%\xf6\xca\x0c\xc7\x9c\x863R\xca\x0c\xc7\x1c\x0eX\xab+\x9b\x01\x1b&\x86B6\x0c%3\x83?\xc0\xcc\x0c\xc7$\x9b+D\xcd\x0c\xc7\x1c\x8d9\xc8\xcd\x0c\xc7\x1c\x87'L\xce\x0c\xc7\x1c\x90#\xd0\xce\x0c\xc7\x1c\x8c?T\xcf\x0c\xee\x00>3\x1co\x1e3\x84\x00\x9a\xc1\xf4\xc8\xf8\x18\x08\xba E'\xf9L4k\xaf\x1fE\x01U\x15\xc2\xd9G\x15D\x95\xda\nQ\xa5\x16@ck\x05\x94\xc5\x84\xb0\x05\x85\x90E\xbd-\x95\xba\xf5?\xa0\x96T\xce~\x1c\xd7j\x06c\xb4\xab\x19\xc8\xccHgE%A\x96\xdb,\xb9\xc06\n\\p\x7f\xfc\x84\x0e\xf7\xe1\xe9\xcb7\xcf\xfe\xb4<}\xbe\xfc\xe1\xe5\x93\x1f\x11\xb1\x06C\x18bx\xf2\xf4\xdd\x8b\xd7\xee\xf0\x08\x1d\x86\x08\x10\xf1\x15:\x0c\x11\xbc>u\x85Y\xe8\xd0\x06]L#\x03\xed\xde An\x94\xcd\x0fYr\x01i\xbe\x11N\x8f\xa6\"$<\xcd\xd6\xc5\xd5\xe9so\xfc\x85\x0e\xed\x96\x82\x14o\xba$\xfa>u\x08\xe2\xd1 \x91\x84p\n\xeb0ihx\xb3\x9b\x04\x943U\x87I\xe3C\x93.\xc46\x0e\xf0L\xa8\x9f\xef\xd2\x0b\x19\x1f\xc4\xcfye<\x16\xfeY\x95\xd4\x80D\x97\xe6\x9048}\x06c\xeax%V=\x0d\xa3\xf5\x11\x8a\xfc\x0e\xa5v_[\xdew\xef\x83T\xbbk\x99\xb7\x92\xa8|\x8e\xee\xbam\x1f}\xb7\x87*\x86\x085\xf2\x9e7\xd8S\xa6\x1b\x9b\x8f\xf3\xf0'(\xf2\xf4D\xceD\x02v>\x12Hr\x88\xbc\x91\x88\x9bhT\xb4\xda\x05$\xa2\x00\x990`\xaa\xff\xe1\x032\x81\x80N$0\xd7\x17\xf1\xc1\xed\x0c\x8dz:c\x0b\x9d \xd1\x99\xcb\xa1\xf8\x00\x13i\xa2\x03\x99\x98\xd4\x8b\xcb\xde\xf7\xea\xa1\x19\x8e8.5\"\xdf@\x08\xdb\x92\xb2! r\x8aH\x04\x12\x8f\x13$\x14\x81\x10@$\x06\xd0e\x13\x91(@%\x0c\x84H\xa5\xe3\x0f\x8a&\x8f\xb0\xd2H\xd4\xdf\xf4!\x03U\xf3\x98 \x8b\xa8\x92\x88H@\xfcn\x87P\x19t\xb4\x11\xe1\x83\x02\xdb\x16\xf8\xa1\xf8\x87\xc1\xf5\xd5\"_\xba\x0d\xb6\x88\x1e\xfd=\xadn~N\xf2:\xcd\xd9\xd2\xafq\xfa5M\x8f\x86\x89\x12R8\xd1\x84\x92\xd0\x08\nI@\xees\x94\xf1\xefy\xe2\xdf\xa4\xa3\x98\xf4\x93\xa9%\xfe\x9d\xfa\x88c\xb2f=\x04\xab\x83 \xf5\x0f\xa4\xee\xe1\xd7;\x10\"\xa0\x83\xe9\xc2\xa0\x03\xaf\xae\xe1 \xb1\x83\x9b,\xfa\x05\x02\x99Y\xaf\xb0\xea\x14\x08\x8c\x83\xe1\xcd\xa4G\x98u\x88\xf9\xf4\x07\x8f\xee\xd0\x0e\x1c-\xc0-\x1b\xc9H\xc0\xe1\xe6\xf1o\x1b\xef\x86\xf1n\x15\xd7&An\x8fy6\x86cK`u.\xc3\x06p6\x1d2\xbd\x81\xddq]\xcf\xc2\xdc#f{\xde\x16gE\xf0\x99V\x90\x95p\"\x8c\xf6\xb0q\xff\xdaU\xf7\x89\x85W'\x15]\x95eV\xfbc\x1f\x15\\\x9dVlu\x96B\xab\xe3u5U\x18@/\xf4\xb0$)A;\x13\x9f\xf6\xfe\xed\x90\xe3\xa6s\x1c[\xf8\n[\xea\n_\xdc\nY\xce\x8aT\xc0\xca\xfc^\xbe\x02j\x91*W!*j\xe9)j\xb1\xa9h#\x85h#\x1d\xc2\x91l\xa4\x16\x1d\xd3\xcbn&\xfd\xd2\xa3\x04{q\x0e\xa6\xe6,dD\xe7e\x8b\xeeK\x1b\x95\xfd\xdc\x0c)34,'\xf4\x1b\xad\xf7\xbe\xdc\x19\x95\x12\x1a\x96`\x8c\xa7F\x0b\xf1\xd4h\xc1\xcb\xdc\xf1\xd4\xe8A<5\xe2\xa9\xf1\xeb>5\\\xb1\x13\xc6)\x99X\xd3ZH\x0e\x8da\xda\xbd\xdeL\xcd\xb02o\xbd\x92n\x0d\x1eca\xb7\xd1\x95\x8f|\xcb\xf3>qA8\xc0M\x8fX\x04H\xd7\xb1\x1e\x00>\x91b\xf3Jcu\x02\xf3\xb7\xf6\xc2\xc9x\xdd\xc0\xf6\xb5\xa5H2IG\x00\xaf\x9e\x003\xeb\n\x10\xa0/\xd8\xda\xf8\xca\x1a\xdbb=Q\xc7\xac\xe9\xc8\xb2\xa4\xd9\xbb\xcfA\x9b\xfc\x05g\xc2\xfc\x84\x13\xfbX\x87*B\xcf\x00\xdf\xc8\xc1;zp\xeb\x1c\xe0\xa5\xb7\x02\x9f\xee\x01\xde\xc4r/\xb9\xc0O2\x84.\x02.}\x04\xec: \xf8\x86\xe8\xf6\x98x\xf5\x13\xc0\xe27L\xdd[\xaa7|\xcf8\xa2G\xc2F\xeb\x8eO\x0c\xd6cl\x141\x96\xd65\x16\xd45=F\x10O\xc3x\x1a\xc6\xd3P\x83x\x1a\xc6\xd3\xb0\xf9 \xc3\xca\xf14\x84/\xf24\xf4eGX\xa7kc}g\xd9x2\xb6\xf9\x0cG\xf6\x15\x98\xcb\x12\x006k\x00\xa0\x8b\xbb\x1b\xe5\x9aY\x96y\xca\xb7\x07h4\x9e\x02\xedSN\x8b\xe3\x8aro\x91ujiu\xef\x98\x005.\xc0\x15OG\x1d\x01\xd0cno]roy\xf4\xb9\xbb\xc4$#I\xc0\x97=\x87\xae\xa4\xb9k\xaaA\xc5\xce)%\xce\xbb\xf2\xe5\x0e\x84\xd4\xc2\xe6\xd4r\xe6\xfe\"\xe6\x88%\xf5\x95UD\xa0\xc0\xa9<\xee\x92\xe4\xa4n|u\x90\x90E\xc7g\xdc\xd1\xfe\xb2y\xa8 \x02F\xaf\x93\x80R\x89\x15\xa0f\n\xe8\xd9\x82_Un?C\xa9\xcc\n0|\xa4\xc0Or\xa0\x90\x1d\xf0\xa4G\xaa\xd6\x83\x8f\xdd\x15\x08\xf1\xa5\xbcQ3B\xcd\x84^\xac\x1bQ\xa2{\xae\xe1\xa1\xabI\xcf\xd5\xe1\x90\x1e\xde\xfa\xd9\xce\xda\xd8\xb4\x8a\xd8s\xcd\x01[\xf3z\xae\xfe\xfcU\xad\xe7\xea\x89P\xb7z\xae.\x91\x95\xa9\xe7\xea\x0eH\xb5\xa7\xf7\xe8\x8a\xd3\xf3\x8co\xe6\x9a\xd2\xaeJ\xd2\xde\xc3\xca\x7fH\xdd\x9aR\xe3\xa9\x06\x8d;\xfd\\F\x07\x05Q\x9b\xe9\x005S@\xcf\x16\xa263\xb76\x83\xa9\xa2,\xe7\xe2\xae\xfc\xe8\xad\xf9\x88d\x05,#x\x13\xee\xfb@X\x0c\\\xfdc\x7ff\x0f\xae\x1d\xb2\xd6\xb17\x0b\x08\xd7\xcc_\xd7\x18\x991d\x06l\xed\x9c\xf9*\x17{k\x02\xf4\x01a\xca\xd6\x81\xc05\x84\x0d\x8c\xacC\x1c\xd0\xb9\xef\xae-\x01]i8`\x04\x9e\xe9\xe3\xcdL\xf8\n\xc2\"\x0b\x0b\x81\xc9l\x99\xc1\x8d(<=\xd1\x82\x10Q\x19\xd8S\x0f\xd8)M\xdd2\xd4W\x7f\xcd'\xed\x9d\x92\x1e!\xe51\x12\x1e\xb1C\x91\xec\x89bMD\xbd5\xc4\xc4\x0099\xc0WZCN\x12\xb0\x13\x05J\x8d\xb5\xf9;\xc7\x9d\x10\xf3\xd6VCTV\xc3\x14\x17\x03\x19\xe2\x91\x1e\xde\xa5El]\xaf\xac\x98\xde\x892\x9d\xce\x8b\xaaK\xb7\x0bL\xaa\x93@M\xad\xf3\"\x943\xa0&\xd8I\xa0\xa6\xd9I\xf0'\xdbI@3\x82/F]\x02\x1a\x9d\xefL\xea\x83;\x15\xaf\xf9\x86\xde1.T\x10\x99\x9c'\xe1H\xb2\x05\xa3\x7f\x03\x8d\x08\xe0W\xc5t \\|\x14\x10\xa8\x01D\x8a\x00\xf6B\xa4\x00\xa3\x00\x0f\x01\xcf\xa1\n\xb0\x0b\x05\xf4\xc5\x02\xea\x82\x91.P\x83&\xeepy \xf8\x14@ \x84\xf9\x12\xe6IO\n\x94\x80H\x0d\x94p\x8ca\xa3\x13\xed$\x1cc\x08\xf3\xa6\x0fJ\xa0%\x11J8\xc6\xdc\xb0i\x85\x12\x8e1\x02\x7f\xa2\xa1\x84c\xf4MH=\x94p\x8cA \x93\x11%\x1cc\x00\xb4\xf4D \xf8$E \xf3\x8f{\xe6\xb4E \xae\xe4E \xc8\x83\x1a{@\xff\x82\xaa\xa2'\xc1Q\x02E\x17\xf0\x1b\xc5\x14D\x1d1\xea\x88\xbe\xaf\x81\xb0P@_,\xa0.\xd8\xb1uDLb\xa5\x049Swz\xa5\x04o\x92\xa5\x04\x12c\xd1\xd8\x8a\x94v)\x81\xbc\x90\xb8\x14L \xa1\x89\x98\x12\x02\xd31%\x04&eJ\xa0\xa7fJ\x98\x94\xa0)\x01\x13\xe4\xdf\x87\xb9\x925%\x90R6%\xa0\x9dJ:\x90\xf9\x8e,>\x90\xa9\x9c\x12\x82\x87\x83\xb3\xd5H\xf0z\xa9t\x08\x1e\x13\x8aDTc\xe8\x9cI\x9f}|.k!e\x8c\xa44P'&\xe3\x0b\x96\x8edP \x9e\x94P \x08\xd9\x8f\x91\xf8\xbe$Q \xb8\x93\x0bqj!F-\x013v hYA\xda\x04\x84\x0d\xe0MQS\x80\x9e<\x90\x08\x00\xfe\xe4\x13\x1dH\x84\x00\x1a1\x00\x93\xa6\xa2\xc3q\x87C9\x05)Y/\x08t\xbe\xbc\x18\x1d|\xeeu\x1dHD\xa3(\xf0\xa8|\x1a\x1d\x8e0\x16w\x02\xab\x04\xe4v\xc2n$\xa4\x1c!L\x16\xcd\xa7H \x82\x9c0\x10&\x0d4\xd9A\x98\xbdo\xa2\na\xc0\x87\x0b^\x9fK\xa5P\xe0\x0dP\xf7\xa9\x18\n\xecA\xe8\x8e\xa5\x98\xfd5Bs\xf88\n\x9d\xed\x06\xe0 \n\x9f\xb03\xec\xd1!h\xee\xb5\\tQ\xc19\xce\x91\x83w\xf4`Wy\xda\x9f\x9d\xaa\x8f\x02\xcc\x9d\xd5\x1dH\xe3%\x17\xf8I\x86\x0c\x8fq\x06\xc4\xf8\xc3\xa4Q\x9ch\x1c\xa1_\x95R\xe0\x08w\x0e\xed\xde\x1b\xe8\x1b\x8ax\x9a\n\xa6\x00\x17\x8c\x1c:F_\x88q(^{\xe0p(FD8p(jO\x90o(Z\\\xe8\xae?X7\xac\xff\x89*\xa2\x02S\xd0m\x80\x926\xfba\x18\x9f\xe6\x8d\xa7\xe0\x10n\xe1\x14t\x05\x82\xca1\x9a\xdd6V\xa7\x8dg\x89|\x0b\x84\n\xe1D\x10\xcfW\xcf\x87\x16\xa1H\x0c\xc5$\x06_\xe2\xc3-\x83\x02,\xb5\xf5\xf7FJ\xe2b \xd1Q\x8f\x88\xa5Bp\xf9mU\x08\xf1F(\x12z\xb2LG;\xc6H!\x85\xc6\x80A\xf7\xd5\x97\x14\x14h\x08\xfc\x1b\xa03\x86\x01Z\x02\xff\x8cr\xc0\xbc\xfbc\xc5\xe6~K\x8f\x80\x8c\x15\x9b\x7fu\x15\x9b\xcdqc\x01J\xe9\xcc\x1a\xb7\x83\x8d'\xa8\x90N\x06\xf6r\x96\x87\xaf<\xac;\x0d\xfd\xfcL\xebfY\xd4\xaa\x99\xd8\x15\xc1\xacA\xb8}\xe1\x01V\xa4C\x84f{\xbd\xc93/;\x18\xb1\xdb\x98\xc5\x1c\xb5}\x08G\x91\xa3zO\xc0~<\xc2k\xf7\xce\n\x8a\x8br\xdc\x00\x9e\xc8\xfe:\x1bT'\x8e\xa9\x0d\xa2\xa6\x06\xd1\x99cj\xe2\xae\x9f\x11\xe4\xd4\x01\xc0\xe5\xc6\xa0+dh~\x1f\x1f\xf3[\x7fG\xfb\x85\x00\xcf \xc8\xcd\x86\xa8wA\xec\xd0_\xdb\xc2\xeb/\x02z\xaf\x8ei\xce\xec;\x1a\xa1\xb4\x84N\x86\xfb\x90L\xb2\xccUN\xc2QD\xc2*\xa6\x1c\x81\xb4\x8e\xa4D\x97\xc8<\x96o\xfb\x16\\\xa5\x9e$\xc4\x99d=\"\xfd\x101\x19\xc0L\x08\xfcF} \xf3u\xe8\x17\xabd\x0f\x80\x15\x93'\xdd\xd0\xe7\xd2\x02\xdc\xc4\xfd\x1a\x12\xc2c abofW\x17\xf8X\xd3\xcd\x94G\xbc;yv\x94w?\xf9w\x93w/y'\x00\xfeI\x00n\x17\xcd\xd3\x95o\xff\xcc\xb5{\x9c{\xc7\xbfs\xbc\x93\xf5\xed\x1a\xe4\x9e\x99\xd4\x8f\xcf\xe3\x06\xbe\x0eL\xc8-E\x01\x8cxL\xed\xddi\xff\xa6\x93u\xea\xeb\xb7\x96\x1d\xee\x98\xb9\x95K-\xfb\xd9\xb1\x93]{\xd8\xb1{=\xeb\xee\xdcF\xce\xbd\x1a\x8exn\x07\xb6\x8b/\x11k3fx\xef\x96\"bum\x1f4\xbb\x1b\xae\x16\xce\xb6\xfa\xb5\xc1\xac`\x07f\xa2\x8f\xdf\xbb\x0e\xce??K\xca\xfa\x9d2K\xc8\x99\x8d\xf6\xc0\x98\xf3\x07\x86\x1b\xd9bh\xa41\x111$\xe9\xd0b@\x19ME\xbe:H\x9c\xc9\x84\xf2`\xdf\xb8!\xd9\xce\xe9\x13\xc7\xf8\xc2\xcd>p\x0b\x99M&p\xeb\x8a\xd8\x84\xe7\xd8\xb7\xedEa\xb2o8|\xd8\x01\xdc;o\xfe\x89\xd7R\xedT\xc7\xdd\xaa\xb8\xc3\"m\x16r}\xf0i\x8a\xc7\xf24y-\xccV\xcb\xb2\xdbw\xec\xe5\x9c\xd1hp>b\x8bo\x98\xda\x9d\xd3\x9fJE6\xdd\xd7\xeb\xf7\xf1R\xc7\xe4\xf2\xe5Rq\x99}\xb6T,\x1e\xdf,\x15\x9d\xc3\x07KE\xe5\xf7\xb5\xba}\xac\xb4\xfef\xf0\xa5\x0e}\xa8\x04\xc5c\x96\x83\xc2\xe0\x13\xb5K\xb8\x1e\x12\xcd\x07\x1aO\x08\xed\xa7_\xe1 a\xf39\xca\xf1\x1c7)\xc3\xebK\xf4\x10\xc5\xee;\xa4\xf8\x0c \xbeB\x82\x8f\x10\xe7\x1b$\xfb\x04\xe7N\xf2B9\xf2<\xcb\xe0\xe1\xcc\xe3\xd5\x81\xf38\xe6\x90\xd8\x0d\xc3\x9e\xd1\x01\xe7*w\x16\xeep\x1bW\xac\xd3\x1dm\x96\xbbs\xf3b\xbf$\xd6\x88<\xfd\xed4~9_\xe7I\xeb\x9b\xfc\xae\xdf\xb5\xedb\x7f\x9b\xff7\xd0\xdf\x19\xaeqh\xc4\xfd\xbb\"\xae6W\xb9h|\xae|\xd1d\xdc?\xecXU%\x17LEd\xf7^\x97V\x14\xb5\xce\xef\xb1X\xf4\xca\xf5\x9d\x9c\xc5c8\x13\nI\x92U\xa6\x05iMm\xfd\xc5pZ2\x02K.\x19L\xa1\x04U\xc4h\xf8\xf4\xea\"\x83-e1s\xd2\xd0\xccg\xd4\x9ch't\x18/Q8\xec\xac\xf0N9\xc3\x11\xdc\x10M\xf2\xd1$\xff9\x9b\xe4\xc7\x1e`\x82\xd4\x99\xe1\x06ga7+\xb3\xd9Y\xcd\xcahNnp\xf0\x82\x83\xc5\xc2P\xce\xcb\\3\xe4\xfd)\xf00\x15 \xdfd\x1f\xcfX\xee\x165>\xef\xb0n\xf5&k\x87\xc3\xeb\x88O\x872\x7f\xa3\xebQ\xd6oFW\x0f\x8f>\x05X\x9d\n\xacz\x15\xcc\xa4[Y\xe7d\xd0\xafl\xdf\x9at,\x98R7w`.\x91\xed\x1c\x1e\xaf\xd6L26\x91\x10\x04\xddt\xbbX,\x98;\xf8Q7qLs\xea:\xef\xc7N<\xbd\xa1w(\xd2|\xc3>\x85\xf0\x98\xe1\x9a\x8b\xeb\xdd\xbc\x91\xc5\xb5\xb5d\xfb\x92U,\xaf\xc5\xa5\xb6d\x1f\x8b\x9a\x9d\xf0\xff\x917\xcd\x13(\xca\xe6\xd2\xc9O\x04&\x8d\xe3\xbd\x8a\xe8\x9d5\xa1\xb7\xc55)\xdb\xf8O\x17\xff\x7f\xf6\xfe\xb59\x8e#I\x13\x85\xbf\xf7\xaf\xf0\xe5\xfb\xda\x90\x9c\x01\x8b+\xf5\xcc1;\xdcU\xdbB$%\xa1G\"\xb1$(m[[[!P\x15\x00\xb2Y\x95Y\xca\x8c\x02\x81\xd9\xed\xff~,n\x99q\xf1\xb8df\x14Z\xbdS\xf9E\"*\xd3\xe3\xe6\xe1\xe1\xe1\xe1\xcf\x13\xfd\xf9`\xb6\xb1E\x81\xdd\x81\xb6Z\xc7\x95\xd6\xa9g\xeeg\xf8\x16}\xee\xa9\xa6q\xdc\x88\x9cf\x968\xc5DO/c\xa7\x96\xab\xa6\xdb6\xdd\xe2\x8attq\xf7\xd5\x15e\xe4\xab\xc5\x1b\xbaz\xddTu\xf6\xd0\xaci\xddl\xa3}L\xb6\xcd\xbe\x8e\x99`\\)UEz\xdf\x85\x00k>\xd3Z:*D\x96[\xd5\xa2\xb5\xa2S\xf8\x9fV\xd5\x96lT\x81\xfd\xfa\xf2N\xac\"\x17\xb7T\xfd\x00\xd7\x15\xdd\xac\xc5ZU\xf3RT\x98\xac\xda\xee6t+\xf4_\x8c\xeb\xbec\xcd\x16\xb6\x94\xdd6kw\xdau\xd0\xd2_\xf7U+\xa3/7\xcdM\xb3k\x1b\xd6\x18}\xba\xaex\x03\xaf\xf6\xbczF\xdfn\xe8\x8d\xa8\xb1\xfa\xbf\xa6\xfd@\xbf\x90v\x9d\xdd\xdb\xe3\xccOk\x08\x1f^)\xbb\x1ft\xc6\xdf\x94\x81XsW\x17\xa2\xaf\x87\xbd\x8e\x82\xda!\x9fr:\"\x9f\x1cM +~@KL\x13-O%\xf5\x90\xa8/\xc5\xd9\xd3Z\x7f\xf4\xb4\xd3\xff\xcf;A\xeaBJC\xcfIK\xb6\xf9v\x99\xaf\x07\xfb\xbab\x0fKF\xbc\x85\xcc\x1aOnc\x96\xbd\xfb\x8f+\xa6\xfdAS\xef\xbbQ_\xf0\xa1_\xb7\xe4\x8b\x98\x1aKZ\xf3\xed\x8d\xf7\xc5U\xd3l(\xa9\xfd\xee\x97-\xb7\x0f\xf5d\xee\xd5N\xfe\xc2\x0d;\xff\xab\xd9o\xb0m\xd6\xfb\x0dM\xf5\xea\xff\xdc\xd3\xf6\xe1\xb5\xee\xab\xf3\xa6\xd9|\xa0\xdd\x8e/\x1c\xd9=\xbdk\x1a/\xff\xea8\x91\x7f+\x13\xd9k$\x1f\xae\xbeI\xfd,\x11\x7f~\xca\xffP\xd5\x1db\x02z_#\xac0\xbc%b\xf9\xd7\xff\xe6]\xaeu\xd3\xfc\xfa\xa5\xf5\xb9\xee\xa4\x0f\xe7\xafU+\xb3tv0E\xd2\x02u\xa3\xf5V\xce\xdb\x03\xc7$\x8f\xaa[Pu\xd5\x88Y\x96P\xff\x8d\xacV\xed^\x1f9\x0d\x8bKl5\x8b\xebQ\xbe:{\"\xa6\xeb\xf2\x05\xdf\xd2\xfe\xa6\x15:y\n\x1bTnw\x9d4_\xc7Po\x01\xcc[\xa0\xbe\xf2\x89\xe7K\xa0\x93Q>\xc1Z\xcb\x07\x9f\x98\x19\x9f\xa6\xc1\x8c\x93\xa7j\xb0\x9a\x8b\xdfa\x9cIs\xe60\"N\xcdj\xe4\x97\xfc\xc9\x9d\xb2aS\x9dM\xf9\xe4\xb9\x9cH=\\3\xc3\xb7\xbd)S\xd3\xf4\xc9Th>z\xd99x\\T\n.*b\xbcl\xe7z\xbf\x15\xcac\x0f\xfb\x88\x95\x04\xb3\xe2S\x96\x13S\xce\xc45\xa5i\x87\x83\x93\xd1\x0b\xca\xcc\x83[G\xb9\xac\xae3\xa2sf\xd7\x9b\xd7\x18\x0eS\x8b\xf7\x9d\x9e\xbc\xf5\x0d\xef\xb4\xdc\xc1\xc0\x9a?z$L!\x93\x87\xe1\x17\xb5\x05<\x95\xab\xe6\xe8\xb1\xb0\xb6\x90\xa9\xe8\x8a\xd35\xee\xb7V\x97\x0f\xbd\xac\x7fe\x0d\xfc\xca\xeb>\xae\xa3\x03\x0d\x9c\xd0\xdb\x8e\xa4\xb1].\xb7\xcb\xa3;xg\xc4\x17\xbc6\xef\xfc-\xb8\xf8\x13e\xb4\xd5\xa1Nc\xc7m\x0eL\xd6\xe1J Z\x01aC\x1d\x8fZ\xc4>\x8cG/\"_&\xa2\x18\xc3\x97\xc1H\x062>Q\xfdP\x9a\xa1\x02 #\xf5\xa0\x9f\xb4\"{\xad\xeb\x84\x7f>R)V\xfd\xa7\x01\xc5\x18^\xb0\x94C\xfe\x99\xff\xd5\xb2j\xd0\xd2\x15\xad\xee\xe8z\xb2\x92\xb8\x95\x81\x88\x0b]2\xff5\xe8:G\xbd\xdf\xb0\xdb\x1c\xf9,\xe52OvC\x02\xd5\xc3\xdc\xe59\xbe\x89',\xe4*\xe79,\xea\xac\xd0\xb6\xba\x11\xdd\xce7\xb8\x88\x10c\x8e\x8d\x9ab\xef\xf7\xacc\xa4^W\xf5M\xe1\xddk\xd6\xcc\xf0\xbe\x85\xe3\xb4\xf8\xbf|Z@\xb4K\"\x8ai\xee\x1e\x9b\xe1Wx\xb6\xaf_\xe8\x15\xae~\xee+\x97YQ>\x9b\x88a\xd6\xab\x9a\xde\xefh\xddUw\x94{O\xac%\xab\xcf'|\x03\xd1|\xe9\xa0\x13\xdd\x01\x1d\x11q\xd6\xd5-]}No&2f\xd6\x84\x89\x8e\xf4\xc6\xd4E\xf5\xe3F\x80\xd3FO\xf3N~\xe7N\xf3\xac\x0dE\xf6\x06y\x08R\xedh[5\x81\xa0\x13:\xcd\xd0\xb3z\xf5SKV\xcc[}'m\xa5\xedn|{Gkfg9\x0c\xba%:\x0c\xe8\x9dB\xcd\x0f\xcf\x0f\"\x7f\x88k\x01W\xb0jU11\xd7U2S\xc7\x9aVd\xd4\xd9\x1f]\xdc\xf2\xf7;\xa8)]\xd35W\xd6\x15\xd9\xac\xf6\x1b\xc2\x04\xbc\xb0mvm%\xfe_\xce\xef\xe6\x1a:F>K,\xffgZ\xdb\x11\x16\xaekCPE\x83:HK{W\xb1\x06r\xcd(\x9f,\xb2\x19\xb7\xa4\x83f\xb5\xda\xb7-\x0dE_\x94\x82\xd8;r\xf5\xb7\xb83\xb5#7\xca\xc0\x05\xbdx\xfd\x82\xe3\xc9\xf7\x7fV\x9d\xa7\xa7\xd4$7M\x80/\x03\xd9\x9c\x88\xca\x053\x88b\xfa3\x94\xa2\xad\x00\xff_\xd6\xc0\x15oN\xd7\xc9\xa1='7\xf4\x03\xfduO;\xb6\x90\xbf;B\xe46\x8f\x7f\xce\xc5\xf1\x8e\xe0\xbb\x98\x8e\x01\xbd\xbe\xaeV\x15\xad\xd9\xe6a\x01g\\\xb16\x1b.\x9bnw\xec\x01*\x97\xbc\x9d\xdd\xd2\x96\x8a\x81\xaf\x1b\xd8r\xc5S\xc0LS\xf9\x90t\xadd\xa7 \xb30\xc4\xe5#\xe38\xbc7\xc4\xff\xd4\xfb\xed\x15m\xb9\x02\xab\xaa\x18\x89\xa5^\xfd\xcd\x8eZq\xc5_\n!\xee\xda\xf4\x85t\xd0Qv\x02\x15\xeb\xb8\x1e\xee\x85\x0d\xde\xd7R\x99\xd6\xd0\xf0~\xf8Ru\xb1\x84\xa6\xa8\x15\x9d`\xd2\x95\x84\x11v\xbc\xff\xf4t\xb5\xdao\xc5\xd4_\xbfv\xb6\x16\x19\x86\x1c\xdb\x8d\x1c\xc2\x96\x1f\x83\x9d\xd3\x83\x9dx\x03\xe3\n`\xadC\xc3\x0b\xc6x+1\xae\x13\xf4\x99\xee\x18\x10\xdeS\xed\xbe\xae\xf9\x92!\xa6\x12mO`Ejn=\x8cU\x81\x01\xa9\x1fD\xcac\xb6\xba\xfa\xceK\xb6\xae>\xca\xc9\xd8QQ\x0f\xa6\xa8S\xbd\xf8\xdew\x97\xf2\x8a\xb8\xedY\xba:\xb8u\xd9:\x1a\xf6YQ\xa5@WH\xdfC\xf5\xbeM\xf4\xf4$\x7ft\xa4'Z\xc8\x07\x9d\xef}\xaa\xa1\xd4HV{\xa7s\xba\xd9h\x06\xac\xd1\x9b\x1cj]\x15\x05\x0728\xfc\xf5\xe5\xbe\xf5R\xe0g\x04\x11N\xe1\xd3\x87\x1f_\xb6\xb4k\xf6\xed\x8aBM\xb6\n\xdf\xbb\xaf\xab_\xf7t\xf3\x00\xbca\xac\xba\xae\x94\xef\xcc\x14\xa2\xc2',\x02\xe8h[\x91M\xf5\x1f\x14\xd9\xe4\x8b\xb9\xbfj6p\xb5\xbf\xbe\xa6\xad\x86b,\xa4r\xc8\xba\xc3v\xdf\xf5\xa0c\xbedl(\xe9\x98/\xab\xa9)\xed`G\xd8\xad\x10\xee\x89\xeau\xde/\x85\x7f~\xbd\xdfl\x1e\xe0\xd7=\xd9\xf0\x1eX\xcb\xfeQ\xa2EO<#\x1dT\xb5\xff\xf1%/\xf2\xe5M\xd3\xdcl\xe8B\xb4\xfdj\x7f\xbdx\xb3o\x85\xee^>\x975\x16\xe2\xba\xdbf\xbfY\xf3\xe5\x927\xda\x93\xb4\"uSW+\xb2\x11\x16\xc0/\xe9\x19]\xdc,NxW {\xf8d\xf1DL\xb5\x86\xf1\xc5\x9c\xee\x18]?\xc7\";g5\xec\x84\xf1X\xd1\x13`\x94l;\xd8w{\xc2\x9b+\xf3\xecw\x15w\x9ckn&o)\\U5i\x1f\xe4\x11\xe9\xc3\x8e\xfat\x97Bi\xd8-}\xf0\x8b\xe26w\xc5\xa0b|\xe6\xef;\x13~\xc3\xf8.\xa4\xb9\x86\xd3\xfaa\x01?4_\xe8\x1d\xf7\x1e\xf8D\xff\xf4\xe1G5\xc3=y\\\x04W?_\xffV\xb7tK\xe1\xf2\x96\xb1\xdd\xe5\x89\xfcow)\xd0\x02u\xa3~=\x11\xda\xc3\xfd\x93F\xcc\n\xd1\xe2\x8e2\xd8\xef\xa2'wm\xb3\xde\xaf(\xf7\x0eh\xdb6\xde\xfd\x1c\xa26C\xf6\x7f'\x0c\xb4Xb\xb5\xe9_\xf1\xb9\xda4\x9f\xf7\xbb~\xabvE\xf8\x0e\xb6\xa9Q\xb3\x02\xbc)\xa2\xec[r'\x86~k\xe8\xe8Z*)\xd1U\xe5\xff\x7f\xd7Tk\xeeo\"\xa2d\xc1b\xfa\xb5\xf4\xbai\xe9\x89\xfe\x90\xcb#\xac\xba\xaa6|\xfd\xe7kU\xa77\xd8\xdcD\xb4wt\x8d\xc8kjn\x86\xea\x1b*^\x16sc\x01\xcf>uTS\xf4\xf1Vs\xf5\xe0s]\xea\x07\xa9\xc9\x0d\xd6\xca\xab\x96\xcaUO \\\x8d\xaf\xa8v\xcb\x8c\x85\xd6[W\xd5\xe2D\xae\x9a;d\x81\x96MR*i6'V\x83\xcb\xd3\xfa\xe1r\xe0\x02!5\x90\xf6\xaab-\x9f4\x91\x9ah;H6\x8d\xd3\x17r\xa7b\x0f\x05\xb7V\xc2\xa0\xca\x9a\\\xf9\xee\x86Y\x96\xf6\x1e\x1c\x959\xd7\x8a\xbb\xa9\xaeD\xf5\x94\x1d\xed\xa0\xdb\xefvM+V\xa0\x1dY}~\xb9\xaf\xf9\x7f\xf8\xba#\xc7\xb1\xc3f\x89\xbf\xe06\xd7\xb0g\xd2@\xe8\xe9\xd7\x81\xcc\xa4\xa8\xe4\\\x84\x1bZ\xd3Vl\xa0\xe5\xe6\xa8\xcf\x168u\xec\x91\x1c\x02[\xfe\xdb{\"6!_\xbd\x82s^?>\xefTU\x89\x89^}\xfd/\xff\x82,\x03\xdf5\x0d\\7\x0d|\x03\x8b\xc5\xe2\xbfy?\xf3\xc6\x92\xfa\xc1\xff\x81\xd4\x0f\x0b^\xdcwm\xb3}v\xdd4\xcf\xfdW\x16\x0b\xdf\xceW\xd7\xf0\x8c\x7f\xfaIT\xf0\xa2y\xf6O\xfc\xdb\xe7\xf0\xbf\x11\xdb\x86}\xff7\xbc\xed_'\xda\xfeGrG&7\x1e\xbe\x11\xbe\x06\x97:\xa1\xa5U\xf7\xec\xbb\xa6Y\xac6\xa4\xeb\x02\x0d\x95U\xe0/\xcb\xba\x1b\x1f\xf8e9=\xd0w\xc1\xef\x13]p\xfe\xc0n\x9b\x1a\xe9\x04Y\xfawM\xf3l\xb1X<\xc7\x06Zv\xc03\xf47\xa1\x04\xa2[r{\x85\x7ft&;\xe5\xcd\xdb\x8f\xaf?\x9c\x9d_\xbc\xff\xf0\xdc5\x8a\xa0\xc4KE\xc1\x0b\x90E\xe0\xdd\xf1\xaf\x89\xee\xf8\xbe\xf1{Bt\xc5\xabo\xe0\x9fvW\x8b\xef\x9a\xe6\x7f/\x16\x8b\xbf\xf9/\x91\xfa\xe1\x84\xbb1\xfc\xcd\x9d\\\xbc\x7f\"mwK6\xbc\x93\xf0\x8ab]\xe1\x96\x86\x14U];\x05}\xaa\xb7CQ\xa2\"B!\xc5[\xff\xe5\x1b\xa8\xab\x0d\xaa`x\xf9\x8e&]\x88S\x8e\xd5\xe7\xde\x06i\x87\x12\xae\x1e\x86\xe5][I\x19\xec\x7f\xd0\x18|\xbe$\xda\xe2\x9e\"\xcb\xf5K\xbe7\x12l\x05\x0b\xee\xda<\xe5>no\xb1\xb95\xd7\xe8P9b\xb6\xc0\xde4\xd6\x9b\x07\xed\xcf{\x9b\xad\xdemR\xbbz\xa6\xf7xO_>\xb5\xc5\xa9\x0d\x85.Z\xee \xa8\xd2\x9e'\xd7M\xb3\xb8\"\xad\xa8\xf4\xfd\xcb\x87\xc5\x7f<\x91-\x96~\xb1\xef\xe2\x8b\"\x9f\xf0\xf7\xb8y\xb6~\xfa\xe3\xc7\xf7\xef\xec\xbf|\xf3\xcd7\xdf\xf8}\xcf\xdf\x1b\xf6\x96\xd2\x9fh\xf8tQ\x8b\xa9\xf4\xaf\xf7]\x8fi\xb8\xd9oHk\xcb\xf1?g\"{oX\x06O\x80n\xaf\xe8z=,\x88'jmuv\xa4\xc6\xf2$\xa3{\x97\xff\x837\xfbR\x85P,\x9a/\xdd\x89\x0b=\xfd^!\x0e\"Y}\xe6so\xd8P\\W\x1b\xea\xdb7=G\xcfi\xdb55\xaa\xcej\xe7\x7f]\xb5\x1d[\x8a\x9e\xff\x06\xbe\xf2%\xf5/\n\x16P\xf5\xde\xd7i\x8b\n\x80\x96\xfaD\xb4\xff\xc9+x\x82i\xb6\xdd\xac\x85\xac\xfd\x93\x13L\x8e\xa8\xf7;\xb2\xe5\xb2\xfe\xbb\xac\xe2\x1f\xd0\x17y\xbd\x9d\xf7R\x95?\xbbV\x8e\xad=\xc6r\x84\xaa\x0e\xbe\xd0\xcd\xe6\xc5\xe7\xba\xf9\"\xe3\xbc\xb7\"\x14\xaf\x02\xb3\xbe\xa2\xda\xeat\"\x9d-G\xc7\x86S?U$W\x1c\x81\x1c\x17jc\x0b\xbc\x14J\xacu\xe8\xb6\xd9\xac\xad\xd0\xb0\x98\x02U\xdd\xeb\x1e\xa8H\x82R=[\x96\x10\xdfk\x1c<\xe3\xf3W7\xd7\xdb\xb6\xea(\xca_\xfe\xfc\x97\xe7\x88r\xce\x19o\xbb\x00|\xc8E\xb3\xb9\xa8\xaf\x16_\x7f\xf5u\xf7\x04\x19F\xfd\x7f\x96W\xdd\xf3\xe7\xb5\x94\xed\xdbZ\xc2\x0c\xf4\x1f\xbb\xe3\x99\xf6\xf1L\xfb\xb7~\xa6mcB\x91xyNn\xaf\xf1\x99\x92\xf6\xe1\xfc\xb5\xae\xa4w\xa0\x8d\x87\xea\x8b\xc7\xe9\xb3\xe6\x04C\xc3\xef\xc1\xe1\x8fo\xea\x0b\x06\xde\xc3a\xf7rA\xf7b!\xf7`\xc0}F\xb8\xbdT\xb0=\x1ej\x9f\x14h/\x1bf\x0f\x06\xd9\xcb\x86\xd8\x03\x01\xf6\x99\xe1u\xaf\xbb}\xcf\xbbth}f`\xbdpX}FP\xbdtH\xbdX@\xbdl8\xbdX0=\x1dJ/\x16H\x0f\x85\xd1\xe7\x04\xd1\xd1\xa09\xe2\xb9\xfa\xf6f^\xc0\x1c \x90O\x0c\x8f#\xc1\xf1\xa4\x9f\x14w\x1e\xbd\x15tbP|\x08\x82c\xfd\xfb\xbbt\xd9\x85\xc3\xe1~0\xbc@(\xbch \xdc]\x0cg\x06\xc1\x91\xc0\xf7\x9c\xb0w4\xee\x1b\x08y'\x03\xde~\x8c-?\xd8\xed\x7f\xfb7\xac\xad\x93\xc2\xdc9\x8dM\x85\xb8\xc3mK\x86\xb7G\x04\xb7\xedX\xc6\xcc\xc0v4\xac\x1d\x0ej\xc7B\xdah/\xe4\x86\xb3S\xc1l7\x94=#\x90\x9d\x11\xc6\x1e\x1f\xc4FB\xc8\xa9\x00v\xa1\xf05R\xb2\xa5)E\x03\xd7\x85\xc3\xd6E\x83\xd6%C\xd6\xc1\x80\xb5\x1b\x05t\x83\xd5eB\xd5\xc5\x02\xd5e\xc3\xd4yA\xead\x88:3@\x9d\x13\x9e\xf6\x82\xd3~i\xb9\x81\xcax`:3,\x9d\x11\x94\xb6\xaa\\2 ]8\x1c].\x18].\x14=}t\x93a\xe8T\x10Z\x9a\xefH\xf0nJ\xe4\xae\xbf\x1f\xf6\xc3\xf9k%\xcb\x8b\xd7\xdd4w\x06\xc5\xe8\xae\xe9\xaa\xfc\x84\xe8\x9d\xe2\xcbF\x08\xabsr\xa1\xd7\xb2\xb8&\xce\xbd\x8e3\xc0\x96\xcd\xd3\xfd;\x01\x03\xc6\xa1\x02\xea p\x80\xb3\x9a=&\x1c@)\xd0\xd0&]g=\xd6\x8a\x93\xa9\x06\xb2\x12\x11o\x93\xd1D\xfc\x95U}\x16\x94\xd6\xae\xb8\xb2\x8e$\x1d\xddV\xf5rm\xaa9\x1cU\xea7\xa2R^\xd3~\xaa\xeaj\xbb\xdfj\xddQ\xe0\x10\xad\x16\\eh\xcd=6y\x8d\x03HP\x86\x96\xb5%\xf7z\xa0\xf3\xe0\x1a\xe1\xf8\xc1O\xe4^\xd4C\x8a\x11\xd58\xe5-\xe5\x8b\x16m\x85\xee\xea*\xf2\x8e\x1d\x14\x17\xce\xea\x8aU\x16~_\x86Y\xc0\xbc\x16\x11\xb6M\xcdn1\xc0\xb9\xa5\xe2>\xb5M\xa7\x00\x16\xe2%\xee\xe5\xc2MsG\xdb\x9ap\x93\xaf+\xd1\x05\xa6\x8f\xbe\xeb {\xe6\xcc4\xf6\"\xb0\xed\xdb\xf1\xe39\xce\xf1\x1c\xe7x\x8e\xa3\x9f\xe39\x8e\xfe\xfcx\x8es<\xc79\x9e\xe3\x1c\xcfq\x8e\xe78\xc6\xbf\x8f\xe78\xc7s\x9c\xe39\xce\xf1\x1c\xe7x\x8es<\xc7\x81\xe39\x8e\xf5\xda\xf1\x1c\xe7x\x8e\xa3\x9f\xe9\xa3[\xe8\x1cG\xde\x9c\xb7\xf7\xe8\x8c\x1c\x1f\xdc\xbf\xe3U\xdfE\xba\xfcxqz\xf1\xe9\xe3\xf2\xd3\xbb\x8f\xe7o_\x9f}w\xf6\xf6M\xf4\xbd7o\xcf\xdf\x7f<\xbbX\x9e\xbf\xfdp\xf6>\xfe\xea\xcf\xef/\xce\xde}\x9f\xf3\xe6\xf9\xe9\xc7\x8f\x89r?\xbc\xfd\xe3\xdb\xd7\x17\x89\x97\xbe;=\xfb\xd1x\xa5\xbf86\xa7\xb1\xe1X\xb7\x0e`~\x14=-\xfaRx\xbe\x06\x07\xa1\x1a\x05y\xd5\xa1\x11\x97\xb5\xf4%\xda\xe9\xd1J:$\xedr%\xec\xc3\xd3\xb2\xecE\xbc({\xdc\xfc\xd2\xec\xdf\x8d\xc0\xbeS\x0c\xac\xf7\xc2\n\xca\x9a\x88\x80\xb0Q\xb0\x1d\x19\x0fT\xc5\xd2\x0b\xbf&\xd6\xcfy\x15\x91q\xf9\xb1\xf5\x90Z\xe7W@\xfe=R\xb25\xc6\xd2\xac\xdd\x123\x90'!*\x89\xe2\xb5F\xfb\x15\xd0\xbf\xcc\xa9\xc2\x15\xa55\xb4\xf4\xaft\xc5\x925\x91\xd3\xc6\xaf\x87\xfc\xfb\x9cZ\\\x93j3\x14\x7f]\xd5d\xb3dd\xb3yX\xca\x18\xd6\xab\x8c\xe9\xe7\x7f\xa5O\xa4\xc5/ ~Q11\xed\x99\x0c\x07#\xbf\xdc\xd2\xda\x10&\x10Ar\x81\xe9\xeb}W\x11\xb8\xf9p\xfe\xfaD\xc5\x8a\xf4\x11T\xdd0\xd85;\xc5y\xb7\xafY\xb5q\xb6\xcdZ\xc4\xd3\xce>\x1a\x12\xeb\"\xad\xd7\x13\xc9\xdd\x9f>\xd0\xeeiVd\x85\\u\xdc_\xcaz\xf7i\xdd\xe4 \xad\x9b%\xf7\xdc\x96w\x945\xc9\x0f\xba\xfd\xd5\xb6bKVmso\xf9u\xef*\xd6gg\xb4^\xcf\x11#/Z?\x9e\xb8\xfeFO\\\xd5\x0d\xf8\x1d#\xed,mQrf)\x8b\xd5\xc9zuw\xeelh\xa9\xea\x99-wM[e\xeb\x90c\xcf\xc4\xa9\xe7G\xc3=\xf3\xaah\xbae9.YjY\x0f\xbe\x86\xb9b 7,\xe9\x82E\xdd\xafl\xd7\x0bW\xf8\x12.\xd7#\xb9[\xa919\x84\xab\xe5\xb87\x8f\xeeb%\xcb?\x8ck\xe5\xb8U\x8f\xe9R\xe1\xee\xd4c\xb9R\x83\x1b\x85X\x1au\xf5\x92\xd0\x8f\xd1\xa8\xd7\xc0z\x99\xe5\xa6\xa0y\x1a\x90s\x0c\xe4\xc1\x9e\x91\x04\xbd\x88 lE\xc5\xd6y\xf8\xbf\xf7\x86\x8f\xc9\xbe\x80'i\x8eC\xe0 +|\x8f\x87\xe5\x00\x15M\xf9\x03'\xed/\x9a\x11\xebL\xae\x9c\x84X]\xd9\xcc|X\xb3\x98\xf1\xf7h\xe8\xc4\xac\xc3z\xbd\xc1\xe9\x1eU\xe4\x08\xd3A`\xd2Ot\xa5\xff\x13_\x1b[\xce\x18\x146\x07\x07\xb9\x1a\xf6\x0f.\xe7\xf9,\xb3`\xeb\x974\x11\xa8\xda\xeb\xfa\x1cYX\x8e,,\xff\x18,,\xeez2b\xdd\xeaF-\\\x13o\xd9T[\xf9\xe8e\x9b\xd6;~b\xb2\xbcs\xb3\xa52D\xc7\x1a\xf5\xfe\xa4\x19\xa5\x8bBn\x89\nj\x90U\xd7\x1fi}\xc3nu\x08\x12\xcd\x15\xef\xf3\xc4cm\xb6_\xcah\xb4\xfa`R\xabQ\x98\x02\x1c\x1d\xea\xe9kh\xd1\x15t\xbeC\x0dn\xe3g\x81\x1d \x01x\x80\xec\xd9\xe2'\xfb\x15\x04?@\x00\x00\x01\x0e\x08\x02\xe4\xe9A|>\x9a\xafd\xccF\xf1\xfa\xa4\xb9\xf8\xeb\xbei\xf7\xdb\xcc\xce\xcc[\xd1\xfd^V\xa3\xbf\xa3\xed\x8a\xd6\x8c\xaf\xc5\xdc`\x89\xd5\xacc\xe435\xae\xe2\xb8k\x18U\xea\xa1\x8eW\xbc\xb5\xfd\xcaK\xcc]5uW\xad)WH\x11\xa7\xb3\x16\xe7\xdb\x96v|<\x1f\xa9\x8d\\CZ\xa62V\xfeD\xc5)\x0d\x95`\x16S\xdf\xb9/\xb3\x8072\xd0\x87k\xd1\x7f]\xfc\x9b\xd9\x90;\xca\x9a\xe5#\xb7F\xba\x02\xcd5\xfcL\xd5\xd8\x889!.\x86W\xff\x14\xc9\x04n\xf3\x92#\xc6\x1bC\xd7}\x07\xe8&\x7f\xf5\xf2\xf7\xc8\xce\xf8\x00\xd76\xfb\xfe\x84\xaa\xfch\x8fB\xb7\xfa\xd5\x94\xd9W0\x9c\xe5A\x90 \xb6F\x86WH\x16\xb8\xd5e\xf6\x8e\xb1 4 \x12\xb7\xbb\x94\x84(AI\x98\x12\xc4\xefx\x99\x05W\x82\x82\x90%H\xc2\x96`*t \xe6\xc0\x97\xb0\x1e{\xd8 } \xde\xf72\x03\xc6\x84\xc8\x92\x8eT\xf0\xce\x97yp&D\xdc~\x17\xbc\xf7\xa54\xac \xe6C\x9b\xa0<\xbc \xe6A\x9c`\x1e\xcc \x9f\xa2h%\x8b\x81\x9f\xa08\x00\nJ\x82\xa0 \x0b\x08\x05%\xc1P\x10\xbd\x1ff\x1e(\n\x9b\xe3\xe8\x1d1\xd2\xd4$\xa1R0\x1b.\x85\x08\xc4n\x8a\x99\x0c\xa2\x82\xd0m1\x89%>rcL\xce\xfa?\x11X\x85\x99\xbd\xe0\xbd1\xa9z\xcc\x03Y9\xc2\x04\xe4\n\xbd=\xa6\x08\xd8\nJ\x03\xae\x00\x01]\xc1|\xe0\x95#\x8d!\xf7\xc8\xcc\x83bA\n\xa1\x04\xb1\xdbd2`Y\x10\xba\xc6b\x04<+,\xc3K\xcf\x9f\x05\xd5\x82\x11\x9d\x91\x82lA\xb2\xddI\xe8\x16\x8c\x83o\x01z'\xc2L\x18\x17\xa4\xa0\\\x90\xb8k&u\xdbL\xa4\x97r\xa1]\x90\x01\xef\x02\xf4\xd6\x99Y0/\xc8\x83z\xc1$\xb8\x17\x04;& \xfb\x82r\xd0/\x08\xd7\xc2\xd3\xb4\xa200\x98 \x05sDa\xf7\xd2\x14\x06\x87Aa\x80\x18\xc4o\xa7\xc1\xee\xa7\xc1n\xa8)\x05\x18\x83\x92\xa01(\x0e\x1c\x03\xc8\x05\x8fA\x0e\x80\x0c\xf2Ad\x90 $\x03\xfc\xc6\x1a\xfc\x0e\x93|\xd8Q\xea\xd6\x9al`\x19\xe4\x81\xcb\x00kFI\x90\x19\xcc\x05\x9a9\xb2\x90\xdblJB\xcf\xa0(\xfc\x0cf\xebC\x12\x86\x06\x19P4\xb0n\xb6\xf1!i\x10\xdb\xcd\xb8\xd04H\xa5\xee&\xdf\x0dB\xd4\xf0\xd7C05\xfcm\x0f\xaa\x86\xbf\x86\xc0\xd5\xf0\x17\x1d\xc8\x1a\x8c\xc9\x9d\x1e>\x88\xe5p\x94\xc8\xa5\xd6\xcf#\xe5T\x87\x8b;|n\xb5~\x10\x08\x19^\xa5\x03\xe7Z\x8f\xae\xcfar\xaf\xfbj\xf8\xd06\xbc\x1a\x87\xcb\xc5\xd6O\x18\xe2\x86\xd7\xe80\xb9\xd9\xfa\xb1\xa1n\x90\x80\xbbA2D\xa1s\x91\xf7\xc3\xa0(0R\x8b|d\xd4d\x91\x01H\xdd \xef\x98\x1d\xf4\x8f\x9f\x1d\x14\x01\xe6\xc1T\xc5 \x82\xf4&J,\x0e\xd8\x8b\xe6M\xba\xe9\x07Y\xf9\x0d\xbaR\xa3\xf2&\xd5G\xe3S'u[\xfe\xd1R\xfe\xd1\xc4\x88\xc9\x06\x82\x05\xd3#\x126\"=\xe1\xa1|\x92D*M\xa2t\xa2D\xe1T\x89D\xb2\xc4\xect\x89\xb2 \x139)\x133\x92&\xca\xa6Md%N\x94M\x9d\xc8H\x9e(\x9e>\x91H\xa0\x98\x96B\x81\n\x8a\xa6U\x14I\xac\xc8L\xad@\xbf\x1c\x95n1;\xe1\xa2t\xcaE8\xe9\xa2p\xda\xc5!\x12/\n\xa7^\xe4&_\x14N\xbf\x88'`\x14O\xc1\x08'a\x8cH\xc3\x98\x9e\x88\x81\n\x0bq\xd9\xcagF2F0\x1d#\xe9RDS2\xf2<\x8eri\x19\xf1\xc4\x8ctm\x8a&g\xc4\xd33\x8a%h\xccM\xd1\xf0\xc4 \x8f\x06u\x1e\xca\xa6i\x84\x125\xe6\xa7jd\xe4'D\xd352\x136\x82\xa7\xbe#\x936\xc2r\x90\xa3\xb0\xd9\xa9\x1bc:''}#\xdd\x0bY)\x1c\xa3\x938\xf0\x83\xc2\x02\x89\x1c\x19\xa9\x1c\xa9d\x8et:G\xb4\xd7\xc6\xa4t\xe4%u\xe0i\x1d\xb3\x13;\xb2S;\xa6&w\x84\xbb)+\xc1\xa3h\x8aG\xa4.\x88&\xceJ\xf4\xf0\xa4!\x89\x1fES?B\xc9\x1f3\xd3?\xfc*\xfb\xe9 \xe5\x13B\x12)!xR\x08\x9e\x16R21\xa4pj\xc8!\x92C\xc6\xa4\x87d&\x88\x8cJ\x11\xc9O\x12 \xa4\x89\x84\x12\x03\xf2S\x03\xd2\xa9\"\xa3\x92E\xb2\xd3E\xd0\x06\x95N\x19)\x9b4\x12H\x1b)\x9d8R:ud\xbe\x8ed\xa5\x8f\xe4%\x90\xd8)$x\x12It\x0f\x86%\x92\x8cK%I'\x1cd|\x10K'\xc9N(\x19\x91R\x92\x99T2!\xad$\x95XR6\xb5\xe4\xd1\x93K\xd2\xa3}\xc8\xf4\x92`BGR\xa7\x0e\x97b2\xaaN\x87M3 &\x9a\xfc}RMR\xc9&\x8f\x9fn\x82%\x9c\xa4SN\xd2\x81\x9fYi'\x9e4,\x0d\xa5t\"\n\x9a\x8a2>\x19e\xf2)d %%\x95\xa6\x10JKI|\x87\xa7\xa6$>\x8a\xa7\xa7D>\x0e\xa6\xa8d\x1d\x00c\xa9\x01\xa9D\x95\x19\x82#\xe9*\xe1\x84\x95#I\xdc\xe8\x14\x96\xc2I,\xa5H\xe2\x92\xa9,3T+\x9a\xd02Y\xee\x01\xd2Z\x8e\xfctG~\xba\xdf.?\xdd\xffA\xf3\xac\xc6\x11\xc9\xe8\x8fFeZ]p\xaf\xe5\x83\xe8\x82\xd1\xb9V\xc2\xe3 \xcc%\xe9\x0d\x99\xd3\xa8\x95\x1d\xc8Uo2\x0f\xd4?\xce\xfd\x0f\x91,:\xa4\xcbs\xc6W|6jl\x7fn\x18\x1d=\xa8w\x0d\xf3\xee\x0e\xc8\x1a\x9b`J\xdc\xf8Y\xcc\xeb\x90Gx-Sk\xecW\xe3+\xfe\x1b\xbak\xe9\x8a\xfb\xcc|e\xa1\xd7\xb4\xd5IC\x97RXw U\xdd1J\xd6*\xbd\xac_\xc2;\xca\xfc\xc3Pn#+\xda\xb9\xb6@\x1c\xd1\xaceH\xbc\xba\x86\xcb\x0d\xad\x9f)\xf9\xcf\xe1\x9bo\xe0\xabK\x15f'L5B\xb8\xdf_\xa88\xbe\xff\xca\xf5\xc0\xcfj\x91!\xe5\xfcU&\x0c\xacHG;kw \xcc\xb1\xde\xed\xb3\x06~~\x7f\xf1v\xf9\xfe\xfc\xe2\xec\xfd;38\x80\xe5\x9c#\xc3\x84\xe3\x90\x022\xa3\xef\xfd\xe9\xed\xc7\xe8\xef\xa7\xdf~\xbc8={\x17}\xe7\xdd\xfb\xc4\xcf\xcb_\xce.~X\xfe\xfc\xf6\xe2\xbd\xa3\x15*\xc8\x93\xae\xb8\x1a'L\x01\x0f\x9b\xd7\x8di\xb3|\x12\xde1\x1e\xe1\x83\x11\x03\x85\xbd\xed\x0f\x17\xf6\x16>h\xd8\x9b\xde\xd0\xe1/\x05\x06P>#\x86q\xf8$\xb5\x03\x00\xe0\xa6\xf2\xbd\x9c\x86h\xacN\x10\xfe)\xbd\x00I\xfcwS\xddQ<\x0d\x0c\xf5A\xd17\xc3\xc3\x13l\xa0\xb1S\xa9\x9b\x17\xcd\xce\xacZ\xe0\xe8\xd1\x1b\xd5W\xee\x1f\x0c\xa1\x0f\x8a\x0cp\x8cH\xa5\x02\xaf\xb0?\x82I?-\x17\xe5\xd1\xf2\xdf\xbd\x7f\xe5\xfc\xdb\xea\x85 \xf2\x06\x1ds%\x0f\xbf\xd8e\x88\x0d\xe1\x9d&\x18\x0c\x96&\x0d\xf8\xc8)\x9c\x8a&\xff\"\x84\xd2\xb5\xa1\xa5C\xdd\xf6u%\xe2M='\xa5\xf8\x9fn\xb7\xa9\xdc\x1b\x8e\xf8\xf3\xb1\xaaW\xf4\x95r\x19^t\xeb\xcf\xf0_\x17\xff\xfa{\xdb\xd2I\x0f\xfa)\xfe\xea\xd3\xfe\xddp\xady=\x8d\x1a\xca\x0e\xab\xe3\xbb3\x10y\xe5\xe2KA\x94\xd917\xdew\xf6\xe6DGhi{\xd2\xdfU\xeb\x0d\x87\xcf\xcah:B9\xae\x96\xa8E\x1e##\x7fu\xa3\x86x\xf8(\xed\xd2\x15v\xeaF\xb9u\x8f\xe4\xd8\x1d\xc4\xb5;\xbcsW\xde\xbd{D\x07/\xe6\xe2\x8d9\x8a@\xdc\xbc\xa2\x8e^\x96\xab\x97\xef\xec\xc5k?\xd5\xe1+\xe5\xf2y\xf5\x93\xac\xdf:\xf0\xca\xbf\x91\x8e\x80\x9c\xf4\xdd\xf1H\xe0x$\xf0[?\x12\xf0\xb7\x17\xb9[\x97\x0c6y\x11L>7\xeev\xc8\xd8\xb4\xb8\x970\xa0C\x81\xeafX/\xe7^\xba\xe0\x90\xf6\x87\xaeX@.$\x98X\xfb?\xa0\xb5o'\\\xa7\xe0\xc3\xa9\x8c\xab\x14B\xd7(L\xac5\xda\xe7S\xafMp\xfa|\xd4% \x86\xde9\x06U\xfcI\xe82\x7f\xa5\xaaoT\x15\x9a\x1a[D\xba\x98^\x7f0\xf2{2\xf4\xda9TB\xba\xd8;LB\xde\xb1\x0f\x91\x90\x17\xf0\xc3#\xefE\xbf\xbbds\x8c\xe5\xb5c\xa4^\x93V\x1d\xa4i\xcf5\xfb\x02\xe6\x9f\xfb\x13\x9e\x8c\xceA\xc3\x08Q-\xb4\x0c\xb0\x134@>t\xb7L\xe1\xd96/8`\x9f\xdc a\x81\xb9\x01\x0183\x0bpB\x01\xc5\x82\x00h\xd7\xbb;\xc7\x9c\xddbl\x87\x98\xda\x15Fv\x82\x19\xbb\xbf\xcc\x1d\x9f\xb7\x9d?D\x94\x0c\xdf\xb0\x1fc,\x99\x99\xcf\xc8\xd6\xbb\xd8\xa6;s\xbb}\xf0\x8dv\xe1-\xf6!7\xd7%\xb7\xd5\x8f\xb2\xa1\xc6\xb7\xd2\x81\xe9\x17\xdb\xdd\x14\xda8'\xb6\xcc9\x9be\xbc\x96S6\xc8%\xb6\xc6\x81\xe5\xff\xbda\xf6\xbc\xde6M\\\xca\xb0\x85\xccY\xcc\x88\x05LW\xc2`e\x99)\xdc8M5I\xc6\xe0(I\xbe!:\x90\xf9)bt\xca\x9b\x9a\xf9\x06\xe6\x80f\x05\xd7\xf5\xaa\xbe\x19\xb9\xcf\x0d\\w\x8aZ%K\xe1\x92\xd7\x9cZo\x9bu\x0b\xed\x85\x94\x8cq{ \xdf\x16f7\xddu\x87\xfe\xf3x\x9b1\xc7\xa6\x9c\xfd\x00\xd4\x86\xf8-)fG|\xd1\x13m\x89/\xa8\x84=\xf1\xa5N\xb1)\x98\x94\x82v\x05\x10G%\xbem\xef\x97\xfd\xd9nI\xd0!\xb1\xe6\xfd\xe2\x8d \xed\xc8\x98\xe73w\xf5\nI\xd2\xc4w\xf6.d\xe3\x10\xfb7\x14P\x12\xdc\xbe\xe1 \x92 \xee\xe6d\xc8\x88)d\x0eVD#CLyy\x90\x10\xbcYJ\x81\xacy++\xa5\xc6Z\xca\xe2\x7f^\x89p7\x90\xf5\xba\xa5\x9d\x88\x18\x8a\xbf\xb2\xea\xce\xf7\x92\x02z:rAFo\xe2>j\xd3oA\x9b\xbc\xa6\xcd\xbaC;v\x7fv\xda\xfd\xb2C\xf3\x05\xef\xcc\xc6\xee\xcb6\xef\xca\xb6ja\xa9x\xc8\xafSE\xe7G\xb7\x17\x1a\xdd\x91=i\xa6YvE\x99p\xe0\xa8\x1b\x0b\xd0\xd3F\xe2n\xa9\xb0SQJ\xda\x18\x1dmI*\xda\x824\xb4\x11\nZ6\x87~\xb6\x1c\xf5l\x8avv\"\xe5\xecd\xbaY\xd1n\x1f<\x1e\xa1\x9a\x9dL3+m\xaf'/H1;\x87^\x16\xf6;O^\x88Zv\n\xadl\x8cBv6}l\x16u\xec\x18\x9a\xd8Y\x14\xb13\xe8aQ\xb3R\x94\x06\xb64\x05lA\xfa\xd7\x1c\xea\xd7\x82\xb4\xafa\xca\xd7\xa2t\xaf8\xd5+\xcb\xa3y\x9dJ\xf1\x1a\xb8k\x17\xa3w\x9dL\xed\x8a\xd2\xbaF\x96\xe2\x08\x9dkj\x95.E\xe3\x1a\xa6p\x8d\xd5`\x1eu\xab\xa4j\xb5\x04b\xb4\xadE([\xe7\xd1\xb5z\xb3\xc4_pK\xd2\xb42\x84\xa2u\x1e=k\x82}4H\xcb\x9aA\xc9\x8a\xf13\x8e\xa1b\xc5\xbe\xff\x1b\xde\xf6\x89\xf4\xaby\x8dO\xd3\xae\xc6Z\x9aA\xb7:\x8aj\xd5\xe5\xa5\x9bM\xb1\x9a\xa0W\x8dQ\xab\xc6iU\x03\xbd\x92O\xa7\x9a\xa6R\xf5iTgQ\xa8f\xd1\xa7N\xa1NE\xa9J\xd3\x94\xa9\xc5\xe8R\xd1\xf2\x1dM\x9aE\x91\xeaS\xa2\xce\xa1CE\xe9OgQ\x9f\xfaT\xa7eiN#\x14\xa7>\xf3\xa3OmZ\x8a\xd6\xb4 \xa5ii:\xd3\\*\xd3\x0c\x1aS\xb5\xf3OS\x98\xaa\x17\x13\xf4\xa5\x08\xd3'Vj.\x1de\x8a\xb24\x9b\xae4\x8b\xaa\xd4\xa9|Y\x8a\xd2Y\xf4\xa4\x18\x1diI*\xd2\x924\xa4s\xc6;\x83~4M=\xaa\x8d\xbfK8\x8a\xee\x0d\xfcS\xe1<6\xcd\x14\xd5d\xf4\xd5\x10\xa5h\x06\x99h\x16\x8dh\x92@t\x14uh\xf8\x0c\xa0\x14]\xe8#\x12\x85\xa6\xc6\xedP\x14\xa1\x08\x11\xe7\xdf\x85\x164\xab\x1e\x87\xa3\x02EH@\x1f\x9b\xfe3L\xfc\xf9\x98\x94\x9f6\xd9g\x8c\xe63<\xfdfQ{J*\xcfA\xd8L\x0eOg\xf3\xaeE\xe4\x90u2\xec\x14\x06?\x83y\xa0\xddr\xe5\x1f_\x06\xa2>*\x85c\xc4\x17u3\xee\xe5\x1e\x19\x91\xf9\x19J\xbf\x89\x8a\x0f\xd1\x0c\x86\xc96G\x89 Pk\xb2\x03\x9c\x9a\x1dO\xa7\x87'\xf7t:B|9j\x98\x834\x97\xa3\xa4l)#k\xc2\xc8\x98Sm\xfd\x8d\xec\xab\x07#d\xd9\xffB\x18#\xab[y*\xc1<\xd6aKZ .M\xfc`\xfa\xa3\xe1$z\xad\xb2S\x8a\xd3\xbeR\xca\xb9\x08\xbe\x869\x84 g0\xe9\x08F\x9d\xc0l\x07\x10\x9fb%\x1c\xbfGr\xfaRcr\x08\x87\xcfq\xb2\x1e\xdd\xd1K\x96\x7f\x18\x07\xcfq\xee\x1e\xd3\xb1\xc3\x9d\xba\xc7r\xe8\x06g\xce62\x02\xdb\xac2kF\x93-\x05\x16\xe7,?IW\xb4\x00\xa9%\x924\x19\x11\x84-\xdf\x98S\x01\x85)\x08\x8fW\xcb\xa7X\xb9\xe7_-\x1f\xf6\xb6\x8a\xa6a\x82\x93\x8a\x19\xeaqlr\xe5P\x0d\xe8\xca&)i\xad\xe9;\x9e,M'\xcb\x1d\xd6\xbb\x0e\xce\xf4\xac\xb3p\x84u\"0\xdf'\xba\xec\x8f\xc3_u\xe4\xe7\x1fc J\xf1\xf3\xc7\xba`\xa6E\xb0\xf5KZ\x07T\xedu}\x8e\x8c8GF\x9c\xdf*#\x0e\xbab\x8db\xc7\xd1\xdf\xe4\xaeY2\x8b{\xf4\x8a\xa5\x11\x84\x06\xcc\xc1k\x8c\xf5\x8e\x9f'N\x19\xdf\x86\xb7TF\x06Y\xa3\xde\x9f4\x99\x02\x80F\x88)\xcf8`\xe3\x10N\x8b\xb6\xd9~)\xa3\xd1\xea\x83I\xadFQ#pt\xa3\xa7/\x9fE\x17\xcf\xf9n4\xb8\x8d\x9f\x85=\x81\x04\xfe\x04\xb2g\x8b7\x06%\xb1(\x10\xc0\xa3\x80\x83IQ\xb7s\xc4\xe7\xa3\xf9J\xc6l\x9c~o\x87K\x1d\x063:s&c\x98#\xee\xcaK.\x0dq\x88\x01\xa01d\x95\xce\xf1\x03\x14:+B\x93\xb7\xb0.\xe2\x19\xed\x01\xe8\x06\xbf\x9a2[\xe6\xc7\x9a|\x18\x17<\xd2\xc2\xc7\x02\xd0.H\xad})\xbd\x93OQ\x98\x17$\xa0^\x00e\xe1^P\x16\xf2\x05q\xd8\x17\xc0L\xe8\x17\x14\x85\x7fA\x06\x04\x0c\xa6\xc3\xc0`\x0e\x14\x0c\xef\xbb\x87\x9d\xd0\xa1 \x1c\x0c\xe6@\xc2Pi\xd2\x7f\n\xc2\xc2`&4\x0c\x15\xb8\xdf\x05\xe1a0\x11\"\x86\n\x8a\xc0\xc6\xa0\x04t\x0cr\xe1c\xe8\x97# e0\x17V\x06\xf3\xa0e\xa1\x89\x1e\xa8jA\xc8\x19\x1c\x00v\x06e\xa1g\x90 ?\x83\xb2\x104\x88\xc2\xd0\x00\nC\xd1 \x08G\x03e\xb82 i0\x03\x96\x86\n\x13P5\x14\x9a\x06s\xe0i\x10\x82\xa8A\xda\xa5\x88@\xd5 \xd3\xe3(\x05Y\x83(l\x0d2j3\x0f\xbe\xe6\x89\x13p6\x14\xc2\x06\xa5`l0\x1b\xca\xe6\x89\x13\x1e\x0d\xea<\x94\x84\xb4\x81\x9eFH\x83\xe6A\xdb \x8d\xf0\x82\x18\xc4\x0d\xf2`n\x10\xc2\xd7\x8c\x84\xbbAD\x0e\x02Q\x98 }\x83Q\x9d\x93\x86\xc0AF/d@\xe1`,\x1c\x0e\xf0\xde\x99\x0f\x8b\x8344\x0e\x12\xf08HB\xe4 \xdek\xf9P9\xc8\x82\xcb\x01\n\x99\x83\xb9\xb09\xc8\x85\xce\xc1D\xf8\x1cD\xba)\x03F\x07%\xa1t\x10\xab\x0b\xa2\x89\xb3`u\x9e4\x0ff\x073\xa1v~ \x08\xf4\x0e\xe6\xc2\xef\xfc*\xbbp<(\x0e\xc9\x838,\x0fPh\x1e\xa0\xf0<(\x08\xd1\x83\xb20=8\x00T\x0f \x1f\xae\x07y\x90=\x18\x03\xdb\x83l\xe8\x1e\x04\xac\x7f\x00\xd2\x05#`])\x18\x1f\x8c\x81\xf2A.\x9c\x0f\xf0\x06\x95\x85\xf5\xc1\\h\x9f'\x0d\x81\xfaAa\xb8\x1f\x14\x86\xfcA\x01\x1d\xc9\x80\xfeA\x16\xfc\x0f\x0c\x08 0@\x88\xed\xbf\xf0K\xa3SI\xd2\xb1w\x83\xb0@\xfc\xf5\x104\x10\x7f\xdb\x83\x07\xe2\xaf!\x10A\xfcE\x07&\x08c2\xc5\x87\x0fb\xb9+%2\xc7\xf5\xf3H\x19\xe4\xe1\xe2\x0e\x9fI\xae\x1f\x04\xb6\x87W\xe9\xc0\x99\xe5\xa3\xebs\x98L\xf3\xbe\x1a>\x9c\x10\xaf\xc6\xe12\xcf\xf5\x13\x86\x15\xe25:L&\xba~lx!$ \x86\x90\x0c\xe3\x14\x80\x1a:\x12g\xe2\x0d\x1di\xc8\xc1\x83\x96\x9a\x03A\x84\xd8\xc9a\xf8\xdc0\x00G\x84x\x84/\x02KL|\x89\xc3\x13\xd3\x1fEa\x8a\x91\xcfQ\xb8b\xe4\xfd0\x84\x0c\x8c\\+\x1f\x8d6Yd\x00\xc6\x08\x8ftj|L\x97z\x8ct\xa9\x08\x18\x12\xa6*N\x10\x189Y\xa2\x0f\x92\x8c\x8a*\x0b\x96\xf4$\x96\x00LF\xd3X\xdd\x14\x93\xac\xf4\x15]\xa9\xdc4V\xf5\xfe\xf8LV\xdd\x8c\x03\x83/Ja.\xf0\xbc\x97\xb0\x0d;\x04\x86\x82E2`\x92\x07Vi\xfb$\x9f\xa9y0\x01q\xf6qN \x9aZ<\x17\xa6x6L2\x1f\xa6@FL\xe9\x9c\x98\xbc\xac\x98Yy1\xa53c2scJg\xc7d\xe5\xc7L\xcf\x90 \x89\x13\x94\xca\xd1\x1c\x99\x82Y2\xc9<\x99B\x992sreFg\xcb\x14\xc8\x97\x99\x9e1\x13\xb4<\xe8A\x83~\ng\xcd\x1c&o\xa6x\xe6L~\xeeL\xf1\xec\x99T\xfe\xcc\x94\x0c\x9a\x80\xa0>\xaf&\x92C3*\x8b\xa6p\x1eM*\x93ff.M$\x9b&\xc3=Id\xd4\xe4\xfa/%\xb3jRy59u*\x9c[\x93\xca\xae)\x98_S<\xc3&\x96c3+\xcb\x06\x91\xc6k\xc2\x02y6%2m\xb2\xd2I\x12\xd96\xd9\xf96\x91#\xf8\xd1971Y\xe8\xd9b\x81\xcc\x9bq\x9d\x95\x97}\x93\xd3'\x99\x198\x13rpB\xe7\xb0E\xf2p\xb22q\xd2\xb989\xd98\x89^\x1c\x97\x91\x93\x9b\x93\x13\xca\xca)\x90\x973\"3gznN\xac\xd32\xf3s\ng\xe8Dk\x84jj\xd9<\x9d@\xa6N\xe1\\\x9dp\xb6N\xe9|\x9d@\xc6\xce\xac\x9c\x1dDZh\xe3\x97\xc8\xe3 e\xf2\x84ry\xcaf\xf3\x14\xcf\xe79LF\xcf\xb8\x9c\x9e\xec\xac\x9e\x91y=c2{\x82\xb9=\xe1\xcc\x8d\xfc\xdc\x8d\x9c\xfc\x9e\x91\x19>#r|\x02M\x9b\x91\xe73bR\x94\xcd\xfd f\xff\x94\xcf\xff)\x9f\x01TB\x932\xb3\x80r\xf3\x80\xecL <\x17(\xba{\xc4\xf2\x81\xc6e\x04\xa5\xf3F2>\x88e\x05e\xe7\x05\x8d\xc8\x0c\xca\xcc\x0d\x9a\x90\x1d\x94\xca\x0f*\x9b!\xf4\xe89B\xe9\xd1>d\x96P0/'\xa9S\x87\xcb\x14\x1aU\xa7\xc3f\x0b\x05\xf3\x85\xfe>\x19C\xa9\x9c\xa1\xc7\xcf\x1a\xc2\xf2\x86\xd2\x99C\xe9@\xd5\xac\xec!O\x1a\x96MT:\x9f\x08\xcd(\x1a\x9fS49\xb3$\x92Y\x94\xca.\x89g\x17%\xbe\x0eg\x18\xa5?Lf\x19ED\x043\x8d\xb2\x8e\xd4\xb1|\x8cT\xbe\xd1\x0c\xc1\x91\xac\xa3\xc7=\xb3?\xf2\x1e\x8e\xc9E*\xc5{\x98\xccH\x9a\xa1Z\xd1\xbc\xa4\x19r\xf1\xec\xa4\xfc\x8c\xb3\"\x19J\x07\xc9Q:r?\x1e\xb9\x1f\x7f\xbb\xdc\x8f\xff\x07M\x9a\x1bG\xfa\xa4?\xcaM\x9b\xbb\xe0\xde\xd4\x07\xd1\xfa\xd1\x89s\xc2\x13\x0bL#\xe9\xa5\x993\xa8\x95}\xc7\xb5n2\xc7\xda?\xf6\x95.\x91\x0cId\x18r\x86[|\x96;\xd4?7\x8c\x8e\x1e\xe3\xbb\x86y7\x81d\x0d\x956\xbc\x05X\xe5y\x1d\xf2\x18\xe5e\xa6\xd3\xdf\x81\x12L\x16<\xca\x8b\x95\x0f\x1e3\x02\xb1\x9f\xfb\xf9\xfd\xc5\xdb\xe5\xfb\xf3\x8b\xb3\xf7\xef\xa21#\xff\xed?\xbd\xfd\x98\xf1\xd6\xe9\xb7\x1f/N\xcf\xdee\xbc\xf9\xee}\xd6K\xcb_\xce.~X\xfe\xfc\xf6\x02{\xbd\x8f\xfe\xe47+\xed?\x02p\xad~/^\xc1\xa3?\x82\x1fQ\xe9\x05H\x9e\xc4\x9b\xea\x8e\xe2\x14C\xa8\xe3\x80\xbe\x19\x1e\x9e`\x03\x0d?\xb7n^4;\xb3j\x81#3oT_\xb9\x7f0\x84>(R\xc51\"\x95\n\xbc\xc2\xfe\x08&\x1f\xb74\xa5\xa3\xe5\xbf{\xff\xca\xf9\xb7\xd5\x0b\x13\xe4\x0d:\xe6J\x1e~\xb1\xcb\x10\xdb\x89;\xcd\xe0\x18,\xed\x0b\xadnn\xc7mD\x1d\x0d\xfdEH\xa0kC%\x87\x8a\xec\xebJ\x84+z\xbeN\xf1?\xddncR\xff\x96E\x06`\x8e7k<\xdf\x9bWd\xa8B\xd8\xa3\xe4\xcd2\x1a$;\xb3\x8e\xbb\xdb \xf2\xb8\xc5\x97\x82s\xb4cnt\xe9\xec\xcdI_\x8b\xf6\xa4\xbf\x88\xd8\x1b*\x9f\x12\xd3\\\xcfr\x16KQ\x8b$\x1d&\x7fk<\x86@\x90\x81\xba\xebdY\xfc@pA\xcd\xda\xe9!N2\xb2\xacFD\xa1K\xeb\xe3F0\xc2\x8blr\x99\x8d-\xb4c\x97\xda\xdc\xc5v\xccr\x9b\xb9\xe0\x8e\\r'-\xbay\xcbn\xe1\x85w\xd4\xd2\xfbH\x8b\xefA\x96\xdf\xc3/\xc0\xe5\x97\xe0G\\\x84c\xcb\xf0\x98`c\x89\xa5\xb8| l\xd2\x82\x1c\x0f\xf2L]\x94K-\xcb^\xfd$-\xb6\x8ev\xf0o~\xdd\xd3\xb6\xa2\xd2 t\xc78\xdc1\x0e\xf7[\x8f\xc3\xf9~`\xae{\x19\xa7[\x17\xd1\x9as\xe3\xb2\x82\x0c\xc7\xd2\xbdU\x00\x1d\x85\xb0\xf6\xcd\xbdI\xc0\xe1\xae\x0f\xdd\x1b\x80\xd0\xef\xa7+\xfa\x07\xb4\xa2\xed\x84{\x02|\xb4\x87qG@\xe8~\x80t\x05\xd1\x9e\x9cz'\x80\xd3\x93\xa3n\x000\x14\xc71\x86\xe2OB\x0f\xf9+U}\xa3\xaa\xd0\xd4\xd8\x02\xd0\x05t\xf2\x83qP\x9f\xa1\x93H\x14\x16\xe9\xcc@\xf4\x15y\xd3\x8f\xba\xe2/\x05\xa3\xad\xde\xeb~\xef\xc9&\x1a+e\xc7H\xbd&\xad\x8aFk\x075\xe76\xe0\x9f\xfb\x90hF_\xa1\xbb6T\xf5P3\xea\xec\xd1\x90\x0f\xbd}\xd9!\xf6\x9e\xf8\xce+\xe2\x06\x85R\xe1r\xb7!\xe9\x1dV\xde\xde*\xb9\xab\xca\xdeO\x8d\xdcI\xa5\xf6P\xc5vO\x99\xfb\xa6\x83\xef\x98\n\xef\x95\x0e\xb9K*\xb9?z\x94\x9d\x11\xbe'\nL\xbf\xa2\xfb\xa0\x12\xb7\xb9\x8f\xde\xf5\xe0\x8b\xf0\x94\x9dN\x89=\x8eo\xfc\xdf\x1b\xd6\xd0\xeb\x0e\xfb\x1a\xf8\xb8\xb1\x08Y\xb9\x98m\x0bX\xb4\x84\x1d\xcb\xb2^\xb8\xcd\x9aj\xa9\x8cqQ\x92|\xfbt \xabT\xc4\x16\x95\xb7@\xf3\xed\xce\x01\xad\x8d\xa7\xe6U}3r\xaf\x12\xb8\x831m1\x92w/Zo\x9bu\x0b\xb9\xc3JF\xb6\x1b\xec\xdb\xc9\xecV\xbb\xbe\x11\xda\\\xd7\x1fJY\x06\xff\x1d\xdb\x07Jy?\x11\xbf'\xc3\xe3\xc9\xb2\x16\x10\xf5r\xcaY\x0d@-\x87\xdf\x92b\xd6\xc3\x17=\xd1\x82\xf8\x82JX\x11_\xea\x14K\x82I)hM\x00\xf1Z\xe2\xbb\xb49\x9e\x8a\x9a\xcb\xdb\xaaf\x8b\xbb\xaf\xae(#_-F\xda.\xfe\xed\xd2I\x91Eg\xb2\ni1Eb\xb0j*\x01\x9f\xe2\xdf\xabw\xaa\xfaz#\"\x94K\xae\xf4K\xc92\x92'u\xabn\xd1$u\xbd'\x1bEP\x02U=\xc8\x04.\xd3+hK\xee\xc7\x15\x90\x92W\xa5\x0c\x9a\x96\xa7\xa2\"\xa8\xbc\x9b\x86l\x96WM\xbd\xa6\xa9\xd5@I\xe3\x1f\xf0NU\xd1*\x90\xdf\x02a\xcdV\xa3\x0f\xae6\xcd\xeas\xc7\xd7\x98\xe5\x03%\xf1\xadq04\xa9\x8a\x93\xd4Mt\xad\x84\xf2b\x81\x0b\xf5\x95S-6\x12Hg\\\x1c\xaa#\x80|\xf4a\xdb\xac\xf7\x1b\x1a\xd2G\x11$<\x15\xe3z\xde6wU\xc7-\xdf\xe8sf\xa9\x18\xcb]/!\xb3\x03\xac\x80\xb5\xd54O\xa2\x8eu*r\x1b\xd16\x01\x95\x90:i\xbc(bV1\x97=\xda\xe6hL\xd5\x14\xf0\xd2\x95\x80\x07Y\xfd\xde>\xd3J9\xba\x9b{u\x9e\xdd\xbd\xc3\xc4\x08t\xeb\xf0B^wz\x8d\xca\x89M\xf7\x1f\xc5r\x05\xfd\x0e\x9cx5x\xf4>\xde\xf8M\xbc\xca\x05\x1c\xa6\x92\xd9\xf9Y':\x98!\x87X\xb0*m\xd0!m\xd4sJ\x18g\xdc!l\xe0\xc7\x14\x96#\xbb\xaaG\xca\x8e\x19}\x08\x19\xfe\x1c\xc9\x19\x0b\x00\xc4\x16\x81h\x19\xe9s\xaa\xfc\x05\xe1\x00w\xf2\xca\x89a\xfb/\xaf\x0d5\xcb\x98x\xdd\xfe\xaa\xdb\x91U\xdc\xd9\xb0N;\x91\xdf\x9d\xb3\x94\xb8\xd7\xd6\xdb&\xa3\xba\xa6#[\xd5\xeb\xea\xaeZ\x8b\x85C\xcfr\xa5\xf9\x92\xb1B2&\x9aB\xf8+R\xd0\xb9\x1f\x82w:i\xb6\x95\x8a\x19)\xcbF\xe9C\xec\xbe\x15\x93\x8c\x93?@\x10\xd6\xd8\xdcci\x84\xea,>h\x01\xe5-\xa4\xb8\xe2\x83\x8f\xaa\xa1\xe3\x87Ew\xd1\x81O4\xf0\x91\x88X\x8f\xcf\xf4\xa1T\xf2[V\xf5\x8a\xbeRc\xfd\xa2[\x7f\x86\xff\xba\xf8\xd7\xff\xc7W*\xdbK\xf1\xc6\xdf\x9aL\x96\xa6I/\xbaG\xe4\x8aX@O\xca\xda\xd2\x9b\xaac\xe2\xc0\xb9W\x8c\xbe\x9d\xa2\x8d2v`\xd4>Qm\\i?Z\xea0BMS\xa6v\x9a\x1a'\xcd\xed\\\xad04A\x95k\xab\x80*%\xd1\x89\xbf\xeeIK\xb8\x1bK\xfb\x8e<\xdd\xb3\x06\x9b\xf3\xc1\x08\xf9\xe9\xa7\x8b\xf7\xcb\x0fo?\x9e\xbf\x7f\xf7\xf1-\x1a#\xb7\xdf8}\xfd\xfa\xed\xf9E\xe0\xc77o_\xffx\xf6\xee\xad\xea8\x15\xc4\x8a\x97\x80\xcf=\xb3\x19n\x00kh5\x90=k^\xf4\xda\xac\xc2Yfx;Xv\xa4Z\xc6T!LD\x83\xf6\xac\xd9\x12V\xad\x86\x89sK$0]\x90\x02\xf4\xd4\x90zM\x12\\\xd5[Jj%\xa3n\x0c\x19D\x10\x1a\x1a\xb4\xcd\x8c|\xa6\xf5 T\x0b\xba\x10\xd0w%\xc4n[\xc5}\xf3\xeb\x13\xdd4\xaeT\x9a\xe6\xc2\xe8\x8f+zK\xee\xaa\xa6\x15\xa96&y\x02>\x8an'\xc8\xbf\xda\xed\xefh\xbd\xee\x8c\xda\xf6\x0d\x11\xc7\xf6\x9a\x17\xfa\x04\xae\x1ev\xa4\xeb\xb8\x051\xb42T\xbc\xd2\x13\xb7|\xf5\xe71\x15X\xd3\xd5\xa6\xaa\xa9\xb9\x1e&f\xc5\xdb\x9a\xb5\x0f\xd9v\x865K\xb2^\xb7\xb4K\xed\xf4-=\x1e\xbe\x1a\xbc\xd2\x15\xad\xee\xc4>^\xfe\xa0\xfb\xe6\xbam\xb6S\x8a0\xbf\xd3\x85\xf0\xaeB\x8ah-{\xe0Ij\x1d\x07\xdaV\xbc\x8e2\xa6\xd7\x05vK\xf9\xa2\xf1\xa5\xd1%\xd0\xceu\xc3\x92q\xf7\x94\xbd\xc1\xde\xb2l\x0e\xf6\x82iw`\xa2\xed\xf1t\xc4Z2y\xa7\x18\xebf#\xc8\xbdu\xf7\xf3\xb1\x00R\x8b\x94\xb6\xb8\"\xfe\xcf\xfeO\xeb\xef\xf6\xf5:?>:M\x0f-_\xc6W\xca\xaafTl\xf0Z\xba\xaav\x95\xc1\x84\xcfw\xe1\x9df\x1e\xb9\xa3\xc2\xce\x19\xa2\x86\x96\xf5&f_k[\xb04Us\xa2\x1f\x99\xdd\xa8`\xb1\"\xc3RO\n\xda\x9a\x8d\xe9\x0d\xf7\x8e\xb4\xcc\xbe\xb0\x80[{!\x0f\x1e(3t^\xf4\x87n\xaa\xf8\xc7\xa4fe\xbb\xc7(YD\xd07\xc6 \"r\x9c]'Uv2\x1d\x84)d\x0e\x0f\x84f}0\xe5\xe5\xd3=XM\x93*\xacm\x9a\xac\xc9@\x18^\xd5\xa6\x12\xf7\xbb-\xd4\xb6\xe95\xc6\x1d\xf2\xab\xa6\xd9PR\xe3\xc5\xeb\x8fD\x0d\xda=\x85\xeaZ\xe9\xd25\x9f\xf8\xf0\x85\xb6\x82}\xfd\xaej\xf6\x9d\xb3\x90\x85\x14\xde\xb5\x1e\xfdPu\xac\xdd\xafx\x179\x94v]l\";\x938f\xb4h\xfb`\x9a\xc7\xf1\xbbJn>\x97\xda|\x1ex\xee`\xa6\xd2\x14\x84L\xa0\xe9\xcb\xb7|\xf0E|\\\xa1#\x16t\xf9\xf8\xcb:\"\xb5\xd0\xe2.\x9fHSB \x879\xcb=\xfe\xae\xb7\xe8\xe3\xaf\xb9K\xbf|2\x1d\x00\xfdrx\xfb?\xd3+\xb0d\x19\x1e\x02R\xb0=E\xfa\xe5\xcb\x1e0Z\xb3\xb6\xa2\xca\xe3`\x92\xb8E\x92\xf5\x8a\x0d\xbc\x16]\x00\xdd\xe1\x1f\n\x1c\x81\x1eG\xa0GY\xa0\x87\xcd\xc1\x81\xae0\x96z~8\x7f=\xcc6\x91Kh}\xa3\x84\xf53!\xb1\xa2\x9du\xc6z:zE\xab\xba\xa5\xb1\x80\x8er\x0d\xecO\x1d\x07\xc1\\|nI\x07\x0d\xf7m\xe5m0\xee\xc6:\xd2\x97h\xdb\xe2}Y\x83\xf5\xd1\xc8\xcet]\x93\xd1\xfd\xf9+\xba3\x82\xdf\xac\x8f\x80\xe4\x94\x17\xdc`\xc9\x07\xd9f\xc9'c\xb3%\x1f\xac\xef\xe43.B\x0e\x19\xcd\x9f\xb3\x15\xf3\x84\xa9\xadY\xde\x86L>\xce\xb6L>\x13;`\x12>\xfe\xc8\xf0\xf7\xf7a\xf8Kw\xc3\xd4\xbd\xa0'(\xe0\x1a\xfb;D\xf9\xe0\x8b\x81\xfe\xa6\xd8n\x11\x11\xe8t\xc2\xfc\x9d\xa3%NDOP\xebdU\xc2\xb5\xe9\xbcuU}\xdd\x00\xb9j\xf6L\x95\xd0UL%\xe2 \x91\xe3\xa3#{td\xe5\xdf\xff\x81\x1c\xd9\x90/\x14\xf7\xbfz \xce\x9cq=\xb0nC\xba\xdb\xaa\xbe\x99\x9ai\xcbm+]/U\x0e\xcf\x97\xaa^7_\\g\xcb\x193=^\xe6pm\xabz\xa9D\xedh;N\x8e1\x19\xd6\xcd\x97\x9aU[\xba\xfc+\xa96\xcb\xb5\xbaK *Gt\xc0\xf2\xba\x95\x07i\xcbu\xb3\xbf\xdaPQ\x97\xf1\xc5{\xb2dm\xc6\n\xb2\x94A\xe5j\x18\xa6\x94\xd9Iv\xfd-\x82Wrv\xea\x11\xf53X\xbd\xb1\x9e\x9dp\xe3\xf9\xd5YF/\xae3\x903\xd7\xdd\xa9\x9e\xd0\x9f,\x99\x8eQM\xe9RDf\x8eNE>\x0fV)\xa9_\xe3\x85\x16\xd7\xb5\xde\xe8\x96J\xaaK\xe9\xef\xc7\xea\xa6\xae\xea\x9b\xb3\xfa\x1aMU\x88c\x9c\xc8F\x0cKU\xdf,\xb9+1I\x9d\xd1\xad_H3\x04o\xf4-\x82\x00M\x0e[pu\xfbAH\x03\xa2\x1df\x01\xc9!\xaci\xc5\x1a$n\xde\x01\x02+R\xaf\xf9\x9f)\xbc\xff ~\xd8\xd7\x7f\x15\x8c\xff\x86\xc8\xaa^\xd3\xfbes}\xdd\xd1\xf9\xb5\x8b{\xd1g\xbc(\xed\xe1s?n\xd5\n'\x9f\xae\x81\x92\xd5-p\xbd\x16Za\xb7\x86\xa8$Rw\xb5\xadj\xfe\x137(b\xe7\xb1%\x0frG(m\x82\x80\x89\xd2U\xb3\xddVL\xde\xaa\xcc\xd4\x15\xe0\xdem\x92\xab\xa6\xfe\xab\xba%R\xeek\x90\xcb\x00.?\n\xa9\xdf\n\xfb\xf5\x8b05\x97}\x92!\xa3\xed\xb6_\x96E\x87\xe2\x97\xc8^\xfeTq\xd7K\n\xf9\xb6b\xa7|Syi\xfa@rx\x96\xe2\x8e\x82\x91\xa3\x11b\xc5\x8f\x8d\xc8E\xb5\xa5\x1d#\xdb\x9d\xbc\x15A\x8d\x8d=\x04U\xa7j\x05\xeb\xbd\x88Po\xaa;Z\xd3\xce\xbdMB[&\xdb\xa5\xdb^u\xac\xf1\xf65\xe1]M\xbc\xbe\xbf\xdcRqw\xad\x1cO}/\xab\xa8\xe6-\xe9\xe4\xa6b(\x13\x9e}\xae6\xbc\xe2|\xab\xe0\xdd*?|\xdaQ\xf6\\x\xb1\x95p\xdf\xdc\xa1o\xea\x95\xab\x96R\xad\xc4\xa6\x95o.\xef\x1ay\xe13\xaf\x97\xc8f\xab\x1f\xa4\xaf\xe7+\xdauu\xb3\xe7{\xd1m\xd5]\xd1\xdb\x8a\xdc\xd9wIo\x85\x82\xe8eR\xb8\x9a\x99\xc4\xb9\xd3\xa7\xe5)\xa8r\xe03\xdd\xb1\xe1\xa2\xe8}]\xd3\x15\xed:q\xc9:\xd7Th)Yw\x1e7\xc1\xbb\x86\xa9\xbd\xdf\xe5\xc7\xfd\xf6\x19\xa6\xe3\xcf/\x81l\xbe\x90\x87\x8ew\x17\xd9\xb8\xaac\xcd\x8b\xd7\xb22\x97\x81\x1d\xa1\x8dQ\xd4#b,\x08F\xa8\xa2\x1f\xb0\xa7\x1d(\x93/w\x8f|\x90\xb6M]\xb1\xc6\xe9EvK++\xb5R+\xbbH\xba\xba\xab\x98\xc9z-M\xb1\xbb\x9e\xf4'of\x81b\x9b\xa1\xd9\xb3\xef\xc8F\x00\xda\xf5*\xf2;@\xb6-\xa1u.g=5>S\xd2>\x9c\xbf\xd6\xad\x1a\xbd\xc2\x8e\xf7\x13\xb1e\xb5l\xf4ul\xe85\xbc\x06G\xc3c\xe1)u\x80\x958\xb6\x16O\xaee*\xaeUxM.\xb8*\xe7\xad\xcb\x85V\xe6\x9c\xb59\xb6:g\x8d\x0f\xbeB\xa7\xc7\xa8\xe4*\x8d\xaf\xd3\xe1\x95zD\x04\x12\xa9y\xc9\xf5z\xc4\x8a]r\xcd\xceY\xb5\xb3\xd6\xed,\x15\x992\x85\xe7\xae\xdf%V\xf0\xe4\x1a\x1eo\xc6\x8cu\xdc\x1e\x86~M\xf7W\xf2\x9c\xb5<\xb6~\x93\xcdf\xa8\x88n?\x16]\x1e\xb1\x8d<\x86\x82\x8f\xa1`\xfdEx\x0ce\x91\x86\xfb\xd7X\xd7\xcbV\xb5\xb8\xf5n\xf0\x08\xd5\xad\xae\x1d|\x11}m\xafv\xab\xa6\x95/\x8a\xb40\xe5\x94\xf6\x17\xc1r\xab,\x02>f3\xad\xb6\xe97?6\xdb\xa1R\xe8M\xb0-\xddQq\xe3\xde\xb7\xa4\xed{6t\xbf\xb1\xd5F\xa1\\\xee\xdd\xc6\xf2j\xd7\x94\x9b<*\xeed~\xa7\xe4\x8dq\x941\xab\x95\xed#\xe7\xe4b\xe3^+:\x13\xf0\x05\xa4\xa8\x8f\x8a{\xa7#j\x13^\x01\nz\xa1\xd3\xfdO\xd3\xdf4\x04b\x9e\xe7l\x9f3\xeem\xe2~f\xb4\xa7}\xdf2\xdc\xdb\xa5\xfcI\xd7\x93\xc4|H\xdc{\x0c\xd7\xad\x94\xc7\x98\xe5+\xce\xf0\x12\x0d\xaf\xd0\x10\x88\xf8\x87 \xcf\xb0\xc8\xf4\x99\xe3\x01\xce\xf3\xfd\"^\x1f^\xdd\x19\x9e\x9e\x1f\xb1\xb1|<\xd4\xbb\xd3\xa6\x9b\x91\xcf\xa6\xe5\xfe\xb6\xa9\xd7\x1f\x8d\xcb\xc1\xbdQ\xb0\x11\x8e\xdf\xbe\x7f\xf7&|\xd3\xb5\xfb;\xffW\xf4\xc7\xb3w\xdf\xa3\xbf\x1a\x1f\xf6\xd9\xc7\xb1\xa2q\x8fah[\xef\xc9\x1aw\x02\xf7\x1dlb\x1c\x03\x85\xbc\x02\x94x\xab\x86\xaaV\x14`\xc3$\xb3\xef\xc7\xc6\xbb\x84\xcb\x93\xff\x87\x8d\xb8TBu]\xaf\xb4\xebQyg\xef\xbe\xd7\x02\xcf\xde}\x1f\x95\xb8\xaf\xaf\xa4\xbf\x13\x10\xa8\xab\x97Q\xb9\xa1b\x01\xd5z\xcd\x0dH\xd7U#\xf8\xe7V\xfd'\x82\x9a\xc4\xf0 \xc2S\xde\xfd\xc6\xca\x0c\xa8\xea\x8aU\"\xc8\xa8_\x02\x05~\x15\x9e\xa3>\xd13\xc5\xb5\x94H\x8e SC\xf4\xaf#v4\xbc\x9cL\xc7\xddj\x1c\xffN\xeb\xabSmX\xdd\x92\xf6FnS\xd6tCo\xc4\x06\xec\x04\x84\x03\xa0\x0fF\xad :\xb9_N\xad\x87\xb7W\xd0\xc2\xac\x0e\xd6\xdc,nM]\xf7j\xe5EL\xe8\x9d\xa4\xcfhoh\xa2\x05\x92c\xa3lC\x0c\x99h{\xd6\xa4\x12\xd9l\\\x1ddR\x89\x1f*s\xd6J\xd1\xfa@S\xf6;\xee\x96,G\xe4C$\xdc\x18C\xa0V\x96\x0d\xe9\xd8\xe0\x1fz\x03B:EV\x82\xc1\xa2\x86\xb9\xda\xf7\x86!\xc0a \xd3\xf4\x86\xd6\xfcH\x1a\x81\x0f\xc3\x84\xce\xb0\x04\xf6`\xa3=u\x90Y\xe3\xcf\x98t\xd9\x96\x82\xcd\x9d%b^\x98\xf6(6C\x82\xb3cB\xa5'\xcd\x88\xa1\xeef\x95\xe3\xb3\x01\xaf\x86\xa3(3\xac\xb8\xb6\xe0=\xbe?KQ\xdfH\xcd\x18\xb3Z\xf5\xca4\x05N\xec}\xac\xb5\xf7\x8a\xaen\x7f\xff\xf5\x0bZ\xaf\x1a\xc1\x17\xa5~U\xfd\xdd\x7f\xa6U\xa0o\xdb\x94Jx\x1f\xe7U\xc2[\x18\xbb[\xd2\xfaP\xc4X\xc9\xf2\x0b5\xcaf\xcb$\x9f\x03\x91\xe9\xca+Z\xdd\xa1\xf6\xaa\xf7\xf1\x86as\x13w\xb8\x7f\xa2\xb6\xac\xcdgZwpK7\"\xf3Y\xa6\xc1\x8b\xccl\xb9\x19R\xa2\x9a/\xb5L\x8dnj\xa3\x9f%\x97v\xd5\x01\xe9\xbafU\x890\x8e\xde\x08\xf7\xf4\xbe\xcd\x17\x195kj\xea\x0eK\x96\xca\x8d>W\\;\xda\x8a~\x86\x7f\nq\xcd\x85\xecu\xb5\x94\x06C\\\x8b\xf3+TJ\x9b\x01\xd1\xe8\xfcZ\x8c\xd7lO\x84\x15\xf3,\xa8\xe1PZ\xcb\xc1\xd5t\xfe\\\x91\x0d\xa9}6\xa1L\xc5\xcc%;\xc4`\x1ei\xb3c\xf5\xecd8\xc7 b\x0e\x8a\xc3\xc7\xe7\xe7A5R\x86\xd0\x8c\xfb\x8a\xc8\x0d\xd9\xd0Z\xc4B\x0cU\xa2\xf7\x02\x08$7s\x0cVM\xcdHUw}\xea\xb4\x1aD\x11D\\\xaf+\xf1\x0dk\xb4\xfe\xf6\xf1Iql\xd1\xed+&\x8e\x08\xb8s\xb8\xda\x08hV\x0f\xbe\x8d\xda\xbf\xa1!\xb9\x86o\xdb\xd4\xd5\xe7d\xd8\xc8\xea\"\xf5\x891\xd2\xb7\xfb-\xa9_\xb4\x94\xacE\xb5\x05\xb5\x94\x8e\x87{\xea\\\xadi\xcd*\x16'\x1a\x8c9WZ\x80\x197\x90\xf4Jd3\xfc\xd8\x8f=<\xa3\xf7\x0b\xf8t\xde\xb4\x0c,\xb7\xea\xdf\xe9\xc3\x15\xe9\xe8s]\xb1/\xf4\xaa\xab\xc69}\xea\x13\xb4&\xfa\xb7MU\x7f\xee\xd7u\xba\xda\xb7\x15{X\n\xfdX\xa5\x82\xdd\xb6\x1dt\xbeE\x0b\xa5[RmD\xdf\xeb\xd7A\xbd\xae\xab\xb0\xa6\x8cT\x9bQ\xbe\x85\xfaD\x9b`\x19\xa5\xec\x8bT\xbf\"s\xc9\xd0G4\xf2a\xbc\x1c\xd1\xea\x1f\xaa\x8e5m\xb5\"\x9bQ\xa7 \xb7\x94\xac}\xbd\xce2\x9aw\xb4\xed*/9[\x1ex\\\x91\xaeZ\xa9S\x80j\xc8\x82\x8a\x94\x01Ql\x9e\x90\xe4\xfe1\xb24B\xfc\\\x12\x80\xecv\xe5\xc4\xc5\xf7\xfd\xaf\xb9A\xaa\xbb}\x07+\xb2\x93fVn\x17\xf5\x9f\xdb\xfdf\xb8\x9emE%\x05\x17\xe9{\xcf\x11'\x96`\xfe\xd3\xea\x96T\xf5\x89\x9f\x94\xbb\xda\xec%\xe3\xc4fc\xbc\x08\xe2\xd2\x98\x1e+\xd6\xf5w\xb5\xc8\xd2\xd1H\x03\xd9\xed6\x95\x8c\xbf?\xed\xdc\x82:\xc6\xb7l\xac%u'\xed\xf4\x96\xacnM\xc60\xb9\x8b\xacj\xef\xb6\xe5@7\x17I\xd0\x9e\x90\x9a\x8fe\x05mH\xc7\xe4\x91\x81_{\xa9\xe1\xbb\x96\xde\x15T\xf0[\xd2\xddNTH/\x19ABo\x97\x1deKwz\xeb'XCHBd\x91\xd4\x80\xfe'!\xb5\xaa\x19\xbdA\xd2x \x91f\x03\xc1n\x80TW@\xbc;\xfaA;'-\xeb(\xfbA\xf4\x8a;\xdc\xf2\xe4i\xe9W!\xa9A^\x91\xaa8.J\xce-\xa9(|\n\x1a\xef\xf1\x7f\x16(n\xc8\x89) \xcc\xad{\xcfRBv;h\xf6l\xb7g&s\x89\x9e\x03\x86\x04\x91\xecR\xb4N\xbd\xa5, \x8b\xecv\x05\xa4\x08}Q\x19\x15\x05\xc4\xd1;\xee\x8f\xadh\x01Q\xfd\xf8\x0d\xcb\x8bc\x9ev\x82\x12\x9a\x8e\xdd\xf2\xa6\x81LrVY\x11\xb4\x01\x9a,\xce\xbe\xe4,\x906\xc9\x08$!\xe9\x0ce\x93\x95\xf9_\xc3\xbb\xfc\xa8m\x89/\xed\xbeh\xab\xf9\xa1\x1d\xffS?{O\xcb\xf9o\"j\x00:fP\xd5\xf0\xc7\x8f\xef\xdf-\xac\xf7\x87\xf9\xb0\xdb_y\xc9kQ\xe3\x1e3\xed\xfc\xb3\xe5\xbeEm{\xc2\xfa\xa6z \xc4\x19\xf9\xa7\x0f?\xbeli\xd7\xec[M\xac+\xf6\x81\xfb\xba\xfauO7\x0fjSr]\xa9\xdec\xea:\x01,Y\x18\xc4.\xa1\xad\xc8\xa6\xfa\x0f, \x1ad[Y\xb3j6p\xb5\xbf\xbe\xa6\xadN\x9cR\xe9&\xb2-\xb0\xddw\xfd6\x14\x08\x83\x0d%\x1d\x92\xce\n\"Y\x81\xc2\x93\x97ODh\x9c\xac\x18m\x17b\x07.\xce?:z\xb35\xa8A>}\xf8\xf1i\x07;\xc2nE\x01\xa8\xb8>\xaa\x82\x97\xc6\xc5\\\xef7\x9b\x07\xf8uO6\x82\x9bV\xf6\x99*B\xf4\xce3\"\xf2\xb6Q\x01\x97\xbc\xf8\x977Ms\xb3\xa1\x0b\xd1\x17W\xfb\xeb\xc5\x1b\x05\xa9\xbc|.k/D\x0e\xcc\xac\xbc\x13Pi+R75\xdf]\x08C\x80\x97\xf8\x8c.n\x16'\xbc\x0b\x85\xff\xf9d\xf1D\x9f&kV\x91\xe78)\x05\xc0Y\x0d;\x11\xad_\xd1\x13`\x94l;\xd8w{A\x0f+\xd3\x85v\xd5\x86J\n\x1d\xe1\xffV\xb5H\xa9\xe8I\xae\xed\x87 Nl\xa1\\\xec\x96>\xe0E\xca\x9b\n\xa0\x12!\n\xc9\xa1\xaf\xfdrF\xef\xc5P\x9e\xd6\x0f\x0b\xf8\xa1\xf9B\xefh+\xb9\xf6?}\xf8\xd1\x9f\xbb\xfc\x91\xa1 .\x06\xcd\x91\xe7O\xb7\xba\xa5[\n\x97\xb7\x8c\xed.O\xe4\x7f\xbb\xcb\x13\x99i\xa3~=\x11Z\xb62\xf6\xaa\x9b\x07\x914\x83 \xdc\xef\x80\x88\xb6\x06\xca\xa3\xed\x1dU\x07\xe7[\xb2\xeb\xa4\xca\xf0\x16\x88\xcb9T\x1a\xa1\xb0W\xc2\x81\xef\x80\xe0m\xbbn6\x9b\xe6K\xf7*0v\xff\x0cg\xd7C\x0b\xf8\x90kF\xb3\xbe\x91*\xc4\xb7\xdf\xd25v\xb3\xaa\x10rZ\xc3\x0f\x17\x17\xe7\xf0\xfd\xdb\x0bhj=\x8d\xe4\x04}\x10\xe1-\\3\xff\xec\xaa\xf8\xc5\xc3\x8e\xfe\xe5\xcf\x7fA_VT\xff|\xac\x95\x0e\xc9uM\x8c\xc2\xaem\xd6\xfb\x15\x15\xa9Gm\xebf\x98\xeb\xe7\x9f\xe1t\xd8\x16Ib\x1c\xc2\xfbG\x9e\xf4\xad\xc8\x8a\xdb\x84\xa6\xf9\xbc\xdf\xf59\x97W\xa4\xa3kh|\x80\x05\xc8\x89\x1e\xa8\xea\xa7\x0f?\x8az\x89\xf49vK\xb7\xc6\\P|RD7\xa3O9\"\xb5\xcb\x92\xa3\x1fY)1\xed[z\xdd\xb4\xf4D\x7f\xcce\x12V]U\x9b\x8a=\x88\xeb\xcc\xf5\x19\x970Q\xed\x9d\x03\x93\x19\x9e\xa6V\xa7\xbb\xe2\x031\xef\x16\xf0\xecSGut\x80\xf7\nW;ng\xa4\xde\x91\x9a\xdc\x84Z|\xd5R\x11\xd5\xd0B\x17\xcfqmy\xd70\xfaJ0m\xc3\xb5J\x18$\xa2\xee\xca\xde\x0c\xc40F\"1\x0e;\xe1O#2\xa8\xfd\x1cb\xf9h\xc5\x82\x96\xf2\xd5\x81\xaa\xa0u\x9f*\xd3\xe3\xb3\x87\xf9uEo\xaa\xba\x0e\xedT\xbeT\xec6`\xf4\x1fvt!\xf5\x99\xec\xaan\xb1j\xb6!\x8b\xf9Q\xcc\xb6N\x85\x99\xd8-\xa9]\xcb\x02\xcfTlQ&\x82\xcb\xe9\xf9\x1c\x15\xb6\x15\xe9\xa9W\x01C\"\x1a(\x02\xd4}@Y\x1d+H\xd6\xf4\x15ttKjV\xad<\xbaI\xf4j\x0d\xf9$\\\x8a\xe8v.\xcf\xe3\xf8\x89\x9b\x8e+\xaa\x83i\x86\xc3\xe0\xf9\x06jQ%W\xcd]\xc0\xd9\xd0\x04\xf1r\x8c\x9cwR\xb5\xb9<\xad\x1f.\x8dhwm\\\xe8\x1b\xa9\x95\xb2\xd1\x9e8\xb2i\xea\x1bud\xe0\x0f\x19\xb7\x9a\xc2\xe8\xcbZ]\xf9\xee\x94Y\xa6\xf6\x8a\x105;\xd7\x8a\xbf\xa9\xaeDU\x95]\xef\xa0\xdb\xefvM+V\xce\x1dY}~\xb9\xaf\xf9\x7f\xf8z)\xc7\x1bE\x93 \x8f\x06u\x1e\x9ak\xd83i|\xf4t\xee\xb8\xe1\xd3G\x00d\x037\xb4\x16\xf7\x07\xac\xd5\xf1E\xefT\x9f\"\xf6N\x0e\x91_\xce\xdb{\xc2\x15\x18\xbez\x05\xe7D\xe5'\xab\xaa\x93~A\xacjx\xfd/\xff\x12X\xa6\xbek\x1a\xb8n\x1a\xf8\x06\x16\x8b\x05\x9aG/:\x81\xd4\x0f\xf8\x8f\xa4~X\xf0\xa2\xbfk\x9b\xed\xb3\xeb\xa6y\x8e\xbf\xb6X\xe0kOu\x0d\xcf\xb8\x88O\xa2\xd2\x17\xcd\xb3\x7f\xe22\x9e\xe3\xe9\xff\x119\x7f\x0b\xf7\xcd\xd7\x89\xbe\xf9#\xb9#\xb3;\x07\xbe\x11\xbe\x15\x97>\xa3\x17\xaa\xee\xd9wM\xb3XmH\xd7E:AV\x89\x7f \xdbc|\x84\x97\x8b\xf4N\xdf=\xbfOt\xcf\xf9\x03\xbbm\xea@\x07\xc9\x9a|\xd74\xcf\x16\x8b\x05n\x89\xfb\xcey\x16\xfc](\x90\xe8\xb6\xb1\xbd\xc6?>\x93\x9d\xf6\xe6\xed\xc7\xd7\x1f\xce\xce/\xde\x7fx\x8e\xc7\xdbdQR\xd1\xc2\x85\xc9\xe2\xc2\xdd\xf5\xaf\x89\xee\xfa\xbe\xc1{Jt\xd5\xabo\xe0\x9fvW\x8b\xef\x9a\xe6\x7f/\x16\x8b\xbf\xe1/\x92\xfa\xe1\x84\xbbk\xfc\xed\x9dt@~\"mwK6\xbc\x13\xc3\x15\x0fu\x93[r\xa0\xd8\xea\xda)\xf4S\xbd\x1d\x8a\x15\x95\x12\x8a-\xde\xfa/\xdf@]m\x82\n\x1a\xae\x0b\xa2\x89\x17\x82\x1cf\xf5\xb9\xb7\x83=}\xf0\xd5\xc3\xe0\xaah\x8b-\xb1`\x0f:\x9d\xd9\x93\xb6\xef\x905\xff)\xe2\x86\xbc\xe4{\xd1\x85\xf8\x81\xbbrO\x81\x18\xab\n_q\xd4q\x82_\x82\x18u\xbf\x90\xde\x8c\xd7\x9b\x07\xbdo\xf26\xbc\xbd\xeb\x08\xe4\x9aQ\xe9\xcd\xf0\xfd\xb6_\xe5\x97O\xfd\"\xd4\x86NWQ\xee\xe0\xa8\xd2\xcc'\xd7M\xb3\xb8\"\xadh\xdc\xfd\xcb\x87\xc5\x7f<\x91\xbd%\xf7\x1a\xf8\xb6JT\xe5 \x7f\x97//\xde\xcf\x7f\xfc\xf8\xfe\x9d\xff\xd7o\xbe\xf9\xe6\x1b|\x1c\xf9\xfbC\x1c@\xe1\x1c\x04a\xa6t\x18\xe4^e\xdf\xf5w>\xdd\xec7\xa4\xf5e\xf9\"d\xfe\xc7\xb0\xcc\x9f\x0ch55\xfbN\x94\xff\x80D\x0f\x8ceW\xe6\x15\\\xfe\x0f\xde\x1d\x97j\x93\xdb\xbb1f\xe7.\xf4\x94\x7f\x15p\xa2\xc9\xea3\x9f\xf3\xc3f\xed\xba\xdaP\xdc\xfej\xfbpN\xdb\xae\xa9\x83\xd3FEp\x04zj)F&\x84m\x1b^\x16\x81[\xf5\xee\xd7\xf9\xd6\x1f X\x8b'\xa2o\x9e\xbc\x82'\xd8\xac\xb1\x9b\xbb\x90-zr\x12\x92%\xda\xf2\x8el\xb9\xbc\xff.\xab\xfc\x87\xe0\xcb\xbc-\xce\xbb\xb9\x0d:\xbbV\x1b\x03['\xe4hV\x1d|\xa1\x9b\xcd\x8b\xcfu\xf3E&\xa1\xdc\x8atJ\x95>\x82+\xb9\xad\x82'\x0e\x15\xa5\xd4\xcb\x01\x98\xaa\x8a\xe5\x8aV\xdf \xfbz\xa1v~!\x97bBh=\x94W \x1b\x89-b:9\x99#\xfcg\xa5\xbe\xbe^Z\xdb\xf0$\xc23%S\xdd\x86\xc7Oz\x1b\x9e1\x15\n\x04\x84\xa6\xa7\xc4\xa1\xe2\x9a\xd6K\x8e\x1b\x1e/Mnx\xc6\xb4dl\xea\xdc\xf0\x84\x93\xe8\x86gLM\x02}:1\xdf\x0e\x95\xe5\xe4\xe0\x0d\x8f\x97\x8d7\xa7PD\xa3\x8bki\xb3x\x87\x1a\xe0}%J$\x82\xf6\xe7F\x8a\x1a\x885\xadl\x80\xbe8JA\\\x14\xcf=\x9f\xdbL\xa8\xa0tsw\xb4\xed\xaaNA\xdb.\xebK%l\xdb\x0c\xf9{-]\xd1\x9a9\x15\xd7?>\xbb\xac/\x15%Q\xcf\xac\xef\x16xy\xdb\x7f\xbaT\xf76^\x0e^\xde\xf3\x08\x1cg\xe4\x8d\x1e!\x9f\x1b\xb5\x97\xd6\xf08N\xb3\xb2\x88\xd2\x81V\x81Dq\xbe\xee\xba\xbe|]\x1c\xb2\xb4\xdd\x12\xdd\x1c\xfe\x0cB$[\xa0\xae\x88^b\x07\x8a\xbf\xe1\x1d\xb3*\xaaw\x0b\xd4\xc3c\x18\xd0\x17n\x0e5\x1a\xee\xe0lZ\xa0\x95\xb0\xc4}\x07\x99\xa6\xc0\x02\xc2\xb5\xd4\xf8\xe5\xd9\x8e\xb6\xb0#U\xfb\x92\xb5U\xd3\xef\xff}})\xd0\"_\xa8n\xcb\xd0\xab\xc3;}\xe3X\xa3\xe7\x88\xae\x1do\xe1\xd2\xc1\xba\xa65l\xf8\xcar\x9e\xf8\x9fEpg%\xf1\xac\x03p\xb5\x1f\xd7\xaa^:;\x8fD\xb9\x18_$\"\xa5\xf7\xd1oIU\xbf\xf8R\xad\xa9^\xe8=\x07F\x9cC\x98\x1e\xba\xed\xbfJ\xd7U-\xa0\xc3\xaa\xf3;\xaf\x13\xd4\x0d\x19f\x078\xf4$\xbe\x01\x89\x99\x87\xa6\xd9d\x1b\x87\xbaaKi\xce\x97n\x84\x16\xe9\xc5\xdc7\xad\xe6\xf5x^^1\xde\xbdCR[KV\xa2MjA\xe1f\xben\xd8\x0b\xf5O\x89^\xee\xf6\xbb\xdd\xe6A\x1f<\xf2\x9f\x948W-\x02\xdd!\xd8 \x8b\xf0\x12,\xfd+\x95\xd1\xbdg\x94\xa0\xc0s\\\x83\xdb\xd7\xf0\xc65\xc1u\x00)\xa7?\xe5\x0e#%d\xf1\x0e\xc4\x04\xb9\xdb\x96\x04=\x02\xcco\xc34\xee\x84\x98 \xb7\x0d\xf8\x19\xc2\x98\x8aOcV\xf0\xc4x\xed\x9f\xcd\xb0\xe0\xc8\xab<\x88\xe6|\xd2\x05W`\xed%E\xa0\x1d\xefq1\xc0\xd4I\x84^\xc7\x19\x19\xbb\xd05\x9c\xc1O\xe2c4\x99\xab\xc1\x913\x87\xb0\xc1\x11\x85_\xb9\x99\xc7\xe1\x00\xd1\x06\x97\xe1r0\x04Z\xc9\xa93\xa9\x1d\x0cI\x16\xc9C\xa8A\x81%\x85\x17\x11c$6\xda\xf7\xe1\xfc\xb5\x92%\xbb\xce\x98p\x81K\xab\xa3c\x1a\xbe\xb0zF\x90\xb6\xd4zYt\xc5\x0c_S\x9d\xbfj\xc6\x9b>k\xe5\xb4$\x19\x8cH\x98\xc6\x14X=\xbd\xf5\x13\xdc\xc6ak\xd00\xa8\x9b\x8d3\xe3\xbb\xa7\xc3\x15\x1d\xbe%-p\xfd\xb3\nD\x1f\xef|>^\xf41\xfb\xa2\x0f|\xfc\x92\xfe[\xd0m4\x05\xbc\xc4$\x18\x97\xaaf;\x90\x9ft,r\x8e'9\x04\x86\x1f\xd7\x91<\x08\xcdB!_/\xe0\xe7%}\xbc\x195/\xe4\xd7\x05\x1c /\xc8,\x1flx\xe5\xe3\x0d\xb2\xf9\xc1$> \x99\x02\xd2\xd4\x81\x04)\xf9$\xbc\xcb41P\xba\xa3\xe5\xe3\xd4Fw\xb6\xfa\xd7p\xd1\xc6\x10\xeegM\xf39 l\xb7!+\x0f\xeb 2\x9ff\xb7\xa1\xa2\x9c\xd0\x89\xfe\x886\xc7N\xf5\x9dv;\x05\xeb\xe6\xed\xeb\xea~H\x88\x1a\xda6\xbc\x8e\xb5B%\xfe,\x03\xde\xa8|\x92\xad\xc8\x1b\x17\xa7,k\xa9W\xee\xbcze#\xa1\xca\xeb\xfdF\x9e\xeb\xe2\xf2\xd4\xf6\x02\x08K4\xb2`\xe3\"ugMn\x8d\xd2\xdd\x85X\xff\xb75k\xad\xac\xd5a\x88\xe5\x9c\x95\x98r_VK7\xf4\x8e\xd4\x8c\xaf@dM\x18\x89n\xc7\xf4\xc9\x11\x91\x97V\xe1gb\xea\xa5\\\xd7\x18i\x8d<\xea\x95\xae\xa4p\x1a\xbb\xaa\xbe\xd9\x18\xfb\xb0\xa7\xc6\x8d\x11\x960\xfe7g7'\x0f\x97\x95\x04\xf3\xfc\x99w\x13\x9f\x12/\x9avM\xb9c\xbf1N\xc2\x8e^\xe9\xd1+\xfd\xc7\xf0J\xdd\xf93\xc3=\x8d\x8a\x9a\xe2\xa7\xf69I\xa3\x9d\xd3~\xa2\xba.i\xd6\xb4\x89\xf3y\x055%nz'2y\x0d\xcc]\x8e\xbc\x14\x8fW\x9c\xc5+\xe8\x90\x85\x9d1\x16\xe4\xef\x8a.s\xe9\x05\xa90sW\x9c\xb7\xab,kWQ\xce\xae(c\x17\x9b\xc7\xd7U\x92\xad+\xcd\xd55\x99\xa9\xab$O\x17K\xb3t\x95\xe4\xe8J2t\x15\xe6\xe7\x8a\xb2sM\xe1\xe6\x8a\xf3p\x15`\xe1\xca\xe2\xe0\x1a\xc7\xb75\x93m\xab,\xd7V\xe8\xbc\xa4(\xcfVy\x96\xad\xa2\x1c[y\x0c[E\xf9\xb5b\xecZ\x85\xb9\xb5B\xccZ,\x97Wk*\xab\x96d\xd0B\x04\xe2\x9cZ3\x18\xb5\x02|Z\xd1%>\xca\xa5\x95^\xff\xcb\xf1h\xc5X\xb4\xe2\xf5(\xca\xa0\x15\xe3\xcf*\xc4\x9e5\x8f;\x0b\x99I\xd8R^\x967\x8b\xa1\xacYs9\xb3\x92\xa4P\x11\xbe\xac,\xb6,\x9c\xac`/\x8d\xe1\xc2\xcaa\xc2\xc2x\xb0f\xb2`er`Mc\xc0\npN\xe5\xb0_\x15\xe4\xbe\n\xd4\xc2\xd3\xb4Y\xacW\x18\xcbUA\x8e+\x9c\xe1j\x16\xbf\x15\xc6gU\x9a\xcd*\xcae\x85\x91\xfc`\x15l\xbf\xd5\xdbe\x98\xa7\x86\x1c\x93\xe9\xb7pz\x1a\xe9\n\x9d\xc385\xe0\xd3B\x87\xaf\xe1\x8a\x19\xff\x98\xc75\xc5\xc6\x1fL\x04Y\xa6\xa2A\x0b\xab\xfa\x85\x18\xa6\xc2\xfcR\xf9UAC$\xd3\x99\xa5l\x8c\xa9~B\xbcRAV\xa9\xfc\xfaOe\x94J\xf3I\xe5\xd7\x01\xed\xc3rLR\x01\x1e\xa9 \x8bT~\xc5G3H\xc5\xf9\xa3\x82\x05\x87\xd3\xa1\xe2\xfdX\x987\xca]4\x83\xacQ1\xce\xa8d#\xf1\xfc\xa7\xdc\x86\xce\xe4\x8a\x1a\x9a\x98d\x8a\n\xf1D\xb9\x19Z\x13Y\xa2&X\xd64?Tz\xda\x95\xe5\x86\x1a\xc9\x0c\x15l3$\xf3\x0e\xc3\xfcA\xd1\xe9\x0cY\x9d\x02\xc5\xd9\xa0b\xbcHq&\xa8B\xcd)\xc6\x01e#\xe8\xc71@e\xf1?\x15l\xf0h\xe6\xa7\xc0\x19\x16\xd8\xed\xce\xe5}\x8a\xb2>E\x9b\x99\xce\x0d\xb5:a\n\xb1\x13F\xe2\x94\xa4p\x9a\xe8\x06\xcf!o\x12\x7fu\xe4\x0db\xfc\x13\x8b\x04qS\xb8\xa2\xa5I\x9b\x8aR6\xe1\x84M\x05\xe9\x9a|\xb2\xa6rTM\xe6v\xcc,\xa1$M\x13J\xd2tU\x96\xa2 !h*M\xcf4\x8e\x9c)\x80`\xf1\x12\xf32\xb2\x03\xfd\x8fg\xa5\x04\x8e\x07\xac\x0c\xc4@\x83\xc9\x91\x9f\x95\xc5\xa9\xc4\xb3\x07\xa3v9\xb5\xf0L\xcc!\x0c\xca9\xde\x06\x9a\x99S\x98\xca*,\x9dWX8\xb3\xf0x\x1b\xa8\xf5\x94\xcc2\xcc\xca3,\x9bi\x98\x91kX<\xdb\xf0x\x1b\xa8|Fe'\xce\xceO,\x9d\xa1x\xbc\x0d\xd4|\xf2r\x15\x0bg+\x1eo\x03=\xde\x06z\xbc\x0d\xf4x\x1bh:\xb31#\x9d\xefx\x1bhN\xe7\xe4d;\xa6{!+\xe3qt\xce\xe3\xf16P\xf5\xe4\xe4@\x1eo\x03\x9d\x9f\x11y\xbc\x0dtt\xb6\xa4_\xe5\xe3m\xa0\xa52)\x0f\x91K9&\x9b23\x9frTFe~N\xe5\xf16\xd0)\x19\x96es,\x8f\xb7\x81\xc6\xb2-\xf3\xf2-\x8f\xb7\x81N\xcc\xbf\x8cnL\x8f\xb7\x81\xba\xd2\x8b\xe7d\xfa \x94S\xeb\x13%\x15\x9b\x9f\x9b \x81\xecL\x08\xe7gz\xa9e\x8524'\x1f\xf9\x1co\x03\xcd\xcc\xd9D\xc5\x1do\x03-\x9a\xc3y\xbc\x0dtx\ngu\x8e\xc8\xeb<\xde\x06j<\x85\xf2<'\xdb\xe7t\xb6g\xbaW19\xf32>G\xe7|&\xb2>Sy\x9f\xc7\xdb@\xe76\xacX&\xe8\xbc\\\xd0\xccl\xd0\xe2M\x1f\x9d\x13\x1a\x94\xc6\x8e\xb7\x81\x8a\xe7x\x1bh\xbc\xc2\xa5\x13K\x0b\xa7\x96\x1eo\x03\x1d\x91f\xfa\x9f\xef6Pp\xb5{H\xd4\xb4\xec\xe7\xf0\xe7\xe3\x85\x00\xfa9R\xaf\xbau\xf8\x07\xa2^\x8d$5\xe7\x11\xae\"\x02F\xe4T\xdb\xd7\xd6\x8eN\xa7\xbe\xad:\x16\x98a\xfc'kn\x19\xb7\x87\x8a\x99+S%\xe5\x95\xbdjG9i\x92\xc9\xab\x811m\x1a\x05sS\xd9c\xbe\xab\xa4\xb4\xec\x8at\xd5J^*,\xea\xef\xbf\x17\xdbp\xc4\xb7\x1bB*\xee\x99&\xfd\xd2\xc8\xfc\x90\x0f\xd9\xed\x0e#:\xe5>\x01\xbc\xd6i\xe3\xb0\";y\x05\x8et\xf9\xf4\x9f\xdb\xfdF\xdd\x90\xbbk\x9b\x15\xed:\xb9\xb1\x13\xfd\x81\xc8S6Y\xfc,\xeee=\xc1NE\xaaz\xb5\xd9\xcbc\x1en\xaa\xfa\x97\xb9/Kx{\xf7+Y\x17\xe5\xc8\xa8Z\x04\xf3\xbe\xc9\x90|\xf9\x14\xb9\xe6I\x9e\x15P`-\xa9;y\n\xb4%\xab\xdb\xaa\xf6r\xb6D-\x96\x95w&\x12\x1d\x8a\xd0\x8d\x07\xd1\xd1\x8b\x05\x82\x0e\x00\x14\x13g\x9c\xa2\xa3\xf1\xd6\xc9\x19\xb4k\xe9\xdd\x81&\xd0-\xe9ng*y \xeboGZ\xb6\xec([bfF?\x89XC\xaa\xf6\x80/\x89\xd6\xcf\xa2\x04\xf7^g\xf7I_p\x11\xeb*\xc8\xe9.HwY?\xe0\xe7\xa4e\x1de?\x88\x9e\xc3TF\xec\xfd\xd8\x12\xafR\x96F\xa2UP\xc5s\xb1r^K\xa5\xe3\xd3\xdfy\x97\xff\xa9p\xf1\x83\x87ZX\xb0\xdb.q\xb0)\x1c\xff\xdd\x0e\x9a=\xdb\xed\xd9\xf0\xb7a\xae9R\x84\xb3x\xb0:\x0e8\xa1\xb2r\xc9nWX\xa2\xd0?\xe5\x0f\x16\x16M\xf9n\xab^\xd1\xc2b\xfb\xf1\x1f\x96O\xc4\x8crK\xd3tt\xeam\xcay[\x109\xa3-\xef\xae_V\xe5\x8eL\xce8i3\xcde\xf0\x8el:\x8a\x12T\xf8\x17 \xa1\xd7\x08ELm\xcc\xc8\xa6\xf0x\x90\xea\x98\x1cw\xa7\x1c6\x0fF\xe2\xf3 \x03\xa3\x07\xe9\x85*\xb5L\xb1\x08^\x0f\xd2=\x08\x99\xbd\x083\xb0{A\x81\xccJB\x0f\xe4\x80N\xc4\xf0\x05\x85E\xb0}0\x15\xdf\x17\x94&*\x95\xc0\xf8\x01\x14\xc0\xf9\xc1t\xac_P\x1e\xc9\xc2\xfb\xc1<\xcc\x1fL\xc5\xfd\x85\xab\xbd\xd9\x88\xfeJb\xff`\"\xfe/(L\xa0~20\x800\x03\x07\x18\x16HY\n\x0b\x08%\xf1\x80\x90\xc6\x04B)\\ \xcc\xc2\x06\xc2x| \x94\xc0\x08\xc2\x0c\x9c`\xc4>\x05\xb6\xc4\xfa)\x8c\x17\x84\x03a\x06\xa1\x0e\x13\xc6b1a\x14\x1e\x13\"+X\x04s\x07#pw9\xd8L\x18\x8b\xcf\x841\x18M\x087r\x06Vs\xe4\xe4\x9a\x81\xe1\xc4u;\x84\xe3\x84\xc9XN\\T\x08\xdf \x07\xc0xB!\x9d\xcb\xc4zB6\xde\x13<\xcc'\x04q\x9f\xd0\xef\x8dq\xec'd\xee-'c@Qi:e1\x8c\x03\x85 \x16\x14\xdc\x1a\x97\xc3\x83B:\x90\x80\xe3Ba\x146\x14{;\x80\x0f\x0d\xbd\x8aaD\xfdw\x83BGaE\x01BxQH\xf7\x975R\xa5p\xa30d\x04\x07\xb1\xa30\xb2n\x01\xbd\x1f\x8d#E\xa5\x98i\xeb!,)85JU\xd8\xf8\xc7\\L)\xcc?\xa2\x8c\xe0K!=\x12\xe06\xae\x18\xce\x14\x12XS\x98P\xb9H`p\n\xee4(L\xdf!\x12\xc1\x9eB\x1c\x7f\n\x13Z7\x1d\x87\n\x99XT\x98P\xabH\x9f\x97\xc4\xa5B\x0c\x9b\n\xa2RA|*Lh\xd6\x04\x9c*d`U!]\x95T\xceZN\xef\xcf\xc0\xae\xa2\xf2l,G\x1a\xbf\nI\x0c+\xe4w\xc4l\xc4U9L+\x8c\xc5\xb5B\x14\xdb\nn\x0b\xe6\xe0[a\xfeZ\x91\x83u\x85\xcc^\x87\x19\x98\xd7\xa0\xc0+:\x1e\xf7\n\xe9~\x81\x8c\xbe\x81\x04\x06\x16\xd2\n\xad\x9f\xdc\xee\x83Ix\xd8\xa8\xb8\x0c|(d\xe0b\xe10\x8d-\x88\x91\x85\xd98Y\xc8\xc7\xca\xc2\xe1\xbac\x1cn6*\xceM\xb3\x1b\x83\x9d\x854~\x16\xf2:!\xc7\xaa\xc3\x88\x8e*\x86\xa7\x85\x10\xa6\x16\xf2p\xb5\x90n\x7fN\x9b\x8abl!\x0fg\x0b9X[\xc8h\xc0\\\xcc\xad'\x10\xcd\xe2\x9a\x8c\xc3\xf5$i\\n\x10\x8b\x0b\xa5\xf1\xb8\x10\xc0\xe4Ba\\.\x0c[d\x04\x9b\x0b\x9eO7\n\x9f\xeb\xc9\x12x\xdd\x10F\x17\n\xe0t1\xc5\xc0\xb1\xba0\x17\xaf\xebI\xc3\xf0\xbb\x90\x83\xe1\xc5gK\x04f\x18\x048*h\xa3\xfd\x95\x92\xf7\xe1\xfc\xb5\xae[\x1e\xc4\xf1\x9c\xbb\x90\xe3o\x8a\x11\x9e\xa7\xe1\x1cY\xad\x93?\xaa\x18\xb2\xc8\x01\x15\xe7\x81\xdaW\x95kO\xd5\xc1\xb6Y\xef7\xd3\xb0\xc3\x93n;\xb4*\xe9l\x04\x94U\x95\x9b\x02\x15\x04\x16y'\x98+\xcf\xd7\xe2\x01%\x82\x95\x8ea\x91\xc2{9;\xa8b \xd7\x15\xd3K\xfc\x00\xd7\x1d\xdeq\xabFk\xd6z\xae\xeb\xeczy\x16\xde(\xca\xa8%\xe8?\x89\x03\xcbJX\xf8\xbe\x13MX\xbf\x97\xbd\xdbR\xe3\xd7g;\xda\xc2\x8eT\xedK\xd6V\x8d\x15S\x19\xa0\xb2\x07j\xa9_\x80n\xdf\xd0\xfb\x06^W\xbf\xc3\x1a\xd8\xd1\xb6\xab:+(\xc1[\xbe\\\xd3\xba\xd9N\xd1\xd2\xe1k\xcb\xe1\xe3\x7f\x16\x016n$A\xfc\xae\x90\xf9\x96.T\xf5\xd2\xd9ue\xd6!\x84\x1dG$\xf6\xfb\x91[R\xd5/\xbeTk\xda\xdf\x1a\xe7:[\xec\xd6\x03\x03\x10\xc7/\x97.\xb9Z\xb8\x87\xd5M|eu\x0cb\xbcR\x06S\xbe=\x02\xfe}\xde4\x9b\xf1\x96\xb1i6!\xbb\xd84\x1b\x9bP\x81\xff\xa1\xaa\xaf\x9bI6\xb0n\xd8R\xaeR\xcb\x11\x17w\x8f\xf9\x02\xe9q\xa3K\x92\xfd\xcd[\x97\xdf\xdb\x1f\x8c\xe9?~A2\x8d\xc7R\xd7\xcah\x9f\x14Q\xf6\x1a3\xb3Lw\x03\x10 2\xc4\x82\x0b\xc3A\xc6a\xa1X^9z\x1a_\xd1\xd5\xed\xef\xbf~\xa1\xf1T6*+.\xca\xf7\xa8\xfb\xb9\xbd\xec\xda\xd5\x81[\x84\x96\xe5\x1f7Z\x8b\x8c\x84O\xa1\xe24\xbeL\xf7@\xacq\xeb\x8e=Z\xe3\x8c\xb2\xe2\x8d\x0b\x8cU\xc74\x85K\xba\x85\xe8\xea*\x1fl:\x0d\x0f\x8aM4?\x9c\x05\x06\x97\xb1\xbe\xa6\x8eD\xd5\xe5\x93\x11\x80HG\xd8\xe5\x933H\xf2qj\x076\xcb\x87\xfc\x9b\xe6\x85\x8c\x85h,EeM\xf3\x19v\x1b\xb2B\xb3\xceAFWw\x1b*\n\x8e\xc5dFvJ*.3\xaac\xec\x1aZ\xfd\xb2\xaf\xab\xfb!\xd8\x9eTcW`\xa8STTyyE6\xa4^\xcd\xed\x94\xfc\xa6:\xe5\xa2\x91n\xfd\xdb\x97[\x1ak\xa4m\xaf\x18i\x19\x16\x91\x92\x8f\xdc\x9br\x13\xf1h-\x1d\x8a\xd4\xd6h\xd8\xc0\x1b\xc6\xe6Eo\xa3\x92\xb2\xe4\x04\x92\xdbh\xb3\xf1\xa1\x83\xbe\x9c\x9a\x9a\xae\xc5\xdb\x9a\xb5\xc6\xc1\xaf\xdd\xc1\xd2.\x85\xb3\x06A`\x85\xeeH\xcd\xb8SC\xd6\x84\x11\xac^V\xad\xf4\xf6\x80\xb42\x04i\x15\xa8~t\x85\xa4\x9ae6\xc8\xceI\xdcT\x1d\x93 \xf3\x1diY\xb5\xdao\x88\xe1H#`\xea\xa1:\xf5\x8dp\x0e\x91\xe0\x86 N\xb0$*\xe0\xb1u\xfc\xe5\x14\xd9\x0f\xbe'.pB\x13Xn\xc2KM`\x99\x89.1\x89\x1b\xedM/\x92\xd7'\x90\x8dp\\\xc5\x8e\xab\xd8q\x15;\xaebAY\xff7\xacbQ}\x8b\x8e@\xba=^[\xcc\xa0\x02\xfdu_\xdd\x91\x0d\xad\x99\\V\xbc\x97\x11\x81\xf4~EwL\xa6HW(\xbd\xc3\x80\xb8\xec\xb5\xd6\xc9gVC'\xed\x9a\x88O#\xe7(\x00\xdd\xbeb\"\xf8&\x12\x0f6U\x80N\xa2\x0fB\x98}\x1b\xeb\x19\xb3\x99\xb9\xdd\xe1\xb4\xdb^\xde\xd5\x82jW\xae\xe7\xe5\x18\xd3\x0bV\x9bmqH\xfb\xbd\x96\x1f G\x8f\x84\xa3\xbfU\xc2Q\xfb(\x0e\x0dB\xa6\x02\x9d\xd6GJ\xda\xe8\x83\xb8O\xfa\x8c\xe4\x8dg\x04\xb2\x83\xa0\xf2\x9c\xc5\x0dzf\xcd\x8dD\xe01\xa8\x0fV_N\x8b*\xe2\x11\xc4!\xe45\xa3B\x9e\x90\xbc\n\xa1\x1b\x94\xc8Y\xd3a\xd9\xb92v\n \x7f(\xb5;H\xaf\xd7\xfe\x8e\xa0\xc2\xf7\x02\xc6Y\x1fw\xf7QQ\x81-@\x86\xf3\x9f\xd9\xce\xec$Q\xd7\x9b\xaf0G~hQ\xccW\xcf\xf0\xd2\x0b\x04\x82c>\xb9\xc2f\xa8W6\x92\x0dd\xbd\xdf\xc8\x94\x0fLZKW\xb4\xba\xa3@X\xb4i\x85\x9a\x14\xa93k\xf2\xea\x92\xea\"\xc4\x88:\x9e\xb2\x91\xa5\x1c\xf5\x93\x13\x1er4\xc2\x83\x1ew{\x91\x9e\xb0\x17\x81\xb4\x02:\xd6\x88\xac\xa6\xcdFFw\xba\xaa\xbe\xd9P3\xb2c\x14+\xc38\x83@\xae\xc5\xfd'FZO\xcd\xfb\x83\xeb\xf9\x8b\xa6]\xd3\x96\xaeE\xf8HV\x11\xaf\x9e\xc9\xca\xed\xb8\xa9\xb1\x15\x12i\x91\x12\x98\x7f>\xd8'z\xbd\xf1W\xe8\xec\x15\xd2\x08\xef<\xd2!\xe1Pb\xa1\xe5 \xb1R\xcbg\xcc\xbc\xfc\x8d\x1c\x11\x1e\xb65\xd3<\x81\xb8(\xbf5e@n\x16\x86\xcd\xf4\x90\x84!\x90?*s\xe9EQR}a\x98\x94\x1eI<\xe4\x94\xa8\\Li\x94o\xe9F\xc4/H\x0dd%\x9co\xbf\xc1g\xdc\x11\xf0w\xbf\xcd\x97Z\xc6>\x9a\xda\xb0Q\x8a`KP\xcc5\xab\x8a\xf4\xe9\x84\xc2\xe72\xf2\xf2|y\xd7\\\x92_N`(\x02\x0b\xd6\xe4 \xe7%\xef\xc8':\xa62\x824\xf2\xb3\xd4\xe8\xbd\x96\xe9>:\xea#\x06j\xc8\xc8\x1c\xb2\x80DG\xf3q\xdb\xcaa\xf3{\xee\xdd\xfb\x8b\xb7\xaf\x04I\x83\nuI\xb6\x83J,\x91g\xb5\xf6\xe8z\x120\x95\xe4\x83\xc3\xd8\xa5\x01\xf7\x0b\xe9\x11t\\_\x7f\xddW\xadT\x8a\x9b\xe6\xa6\x11\x88\xeb\xdc\xc8\x08\xbe\xe0\xd8q\x917\xa1\x98\x88%i\x08\x02\xfd\x0e\xd3\x98\xd1\xb1\x10\x1d\xff0e\x1d\xc3\x1f\xc7\xf0\x87\xf9\xf7\xdfZ\xf8CU\xd4\xf6\xe9b\xdeU\xd0\xbb3\x05\xbc\xc4$\x18\xee]\xaew7\xda\xa5\xeb\xd7\x80Iq\x8f8\xf5u^\x94\xc1\x1b\xf2\x89D\xd7\x03\xa9\xb5#/Eq\x1d'\xb7\x0e.{\xe1E\x8f\x05\xa9\xac\xa3k^j\xf9\x9aN\\\x1dp\xc6\xe2\x94\xd5S\xc8\xaa\xc3\xa4\xd4\x93\xe8\xa8\x85xDX\x94\x88\x9a\xcd\xa3\xa0\x9eH>\x8d\x92\"\xa4i\xa7'\x13NO\xa2\x9a\xe6\x1b`\xac\xc7\xd2$\xd3S\xe8\xa5C\xa4\xafIb\xe9\xa9\x94\xd2\xdc\x8a#\xe2\xa2d\xd2Sh\xa4\xe3t\xd1\x05\x88\xa2\xb3(\xa2\xc7QA\xcf$\x81\x9eJ\xff\x0c\xe8\xe9}hoX\x94\xf2\xb9<\xd9sQ\x9a\xe7<\x82\xe7i\xd4\xce\x81\x0e\x8e\x91:\x8f\xa7s\x1eh\x9b\xb19\x1e rf\xb9\x14\xceS\xc9\x9b%I3\"\x10\xa7m\x9eA\xd8\x1c\xa0j\x8e.\xf1Qz\xe6\xf4\xfa_\x8e\x929F\xc6\x1c\xaf\xc74\x02fmI\x1da1\xea\xe5B\xa4\xcb3\xe8\x96\xf1\x99\x84-\xe53(\x96yy\x8e4\x86\x92+\xcf\xa5UNr\x02G\xa8\x94\xb3H\x94q\xae\xd3q\xc4\xc9\xb8\x0c\x8fKp6Mrng\xe4P#\xc7\xdb\x9dE\x87<\x92\x08\xd9\xe7V,@~\x9c\xa4=\x8e\x13\x1e\xa7\xa8\x8e\x83\xbd4\x86\xde8\x87\xd8\x18\xa34\x9eIf\x9cIc<\x8d\xc08@\x11\x9cCZ\\\x90\xae8P\x0bO\xd3&\x91\x13C\x84\x88\xb8 \x051N><\x95v8H1<\x83\\\x18\xdd\x86D)\x841~S\x8c6\xb8\x1ca\xf0t\xaa`\x84\x16x\x12!p\x94\xfc7\x9f\xf67\x8b\xf0W\xc51r\xa8~\xd5\xabI\x92_\x94\xf9\x16/=\x97^5M\xe9;\x82\xcc7\x93\xc6\xd7k\xc6\x0c\xea^T\x8dg\x10\xf4z\xd1\x16\x94\x9aw\x1a)o\x88\x80\xb7,\xf5\xee<}\xc8\xa2\xdb\xcd!\xda5\x97\x15\x8c\\W\xeef0Z\xdd\xf8.a2\x95.\xce\x1c\x12$\xd1\xc5\xe8s\xed\xd3\xe0B\xc4\xb9\xc1m\x1dF\x96\x9bK\x93\x9bE\x90\x9bG\x8d\x9b$\xc5\x1dA\x87\x9b\x85n\x1f\xe4\x1a\xbd]\x86\xfcv\xc8\x9d\xc02\x02\xf2j\xe2i\xa4+t8U\x08\x90\xdc\x9ag\x0b!Y\xc1\xec\xf4p\xc5\x8c\x7fX\x07\x1b\xe6\xdf\xb3(m\xd9\xf8\x83\x89 \x81m4haU\xbf\x10im\x98\xae6\xbf*h\x88d\n9mOB\x8b\xc8\x0b\xd1\xd2\x06 i\xf3\xeb?\x95\x846M?\x9b_\x07\xb4\x0f\xcb\x91\xcd\x06hf\x83\x04\xb3\xf9\x15\x1fM*\x1b\xa7\x93\x0d\x16\x9cIz\xe3\xf5\xe3\x0c\xdaX\x11\xeeu\xc4\xb9\x8bf\x900v\x12\xb5S<\xf37\xb7\xa13)a-4l\x9c\x0c6D\x03k\xd5t:\x01\xec\x04\xcb\x9a\xa6{MO\xbb\xa9\x14\xafp\x85ExG\x92\xbb\x06\xdb\x0cI\xa7qF\xe9^\xc5\xe4\xcc\xc3\x1a\x8dF\x1b%2JS9\xa51\xccQ\xd2\x00@f\x17Aq\xe4Q\x1c{\x94B\x1f\x15mX1\x0c\xd2<\x14R&\x0e\xa9x\xd3G\xa3\x91\x82\xd2\xec\xbdE6\x1e)\x81HJ68eY!\xb3C\xa6\xc0\x95p\x83\xe2C\x982@L\xb3|\xf79P&O\x98z+\x0cfJ\xc2\x99\xe2\x15.\x0di*\x0cj\n\xc1\x9a\x8a\x02\x9b0hSIp\x13\x04\xe1Me\x01N\x01\x88Sq\x90\x13\ns*\x0ft\xca\x80:\x81\xab\xddC\xa2\xa6q\x88\xbd\xd9\x88\x96\xfe\xba\xa7-\x175\xbc\xa3\x85\x1c\xd3\xaa\x8fi\xd5\xbf\xa1\xb4j\xb7\xa2\x81\xec\xe5l(\x9fH\x92V\xb2R\x88>\xf3\xd6C\xd9\xe5\x9e\x02\x07\xef_\xc2\xf2\x96\xd1\x81r\xf6\xbaS0r>&n@\xacu\xedjJE,\xc5@\xa5\xf9A[\xfb\nd\x990\xac3\xa4\x0di\xea{\xbf\xaa\xeb\x8e\x15\xac\xaa!-QU\xfc\"w]s\xb7\xbe\x1e\\\x8f\x1d \xf7=\x01\xc8\xcb\xd8\xceO\x89_\x8c\xba\x12\xdd\xbf\xf8\xdc\x93\x87`\xef\x12\xa8\xbb\x8c\x86M\x8dS\x14\xba\xd6<\x84\x0bK\x00\xf1f\xb8\xd0c/)\x8f\xd7\x1f\xbd\x9a<|!\xf9\x8cz\x8f\xber\xdc\xb9X\xdc\x13\x18\xb9h8-\xcf\xc4\xc8\x80\xf7i\xd0\x99\x19\x17!0\x84\x98\xb1\x02\x9f\x8dg^\xa4\xc0\x10\xe4e\x96G\x9f\xe3\x18G3\x98=gV\x7f&\xb3h\xac+&\xb3\x89\x169\xc6L3\x88Z\x9f\xf79VsYC\xd5\xdeD\n\x1bO\x11\x9ao\xb2\x7fc\xa7\x95S\xcc\xc6\xa3\x1cR\x8e6\x0f3\x0e'\xad\x190\xd9\x0c\x18\xd3\xce\x10\xe7WtB\x05'Ow\xbc\x99\xc5\xa6x\xc6\xd1d\x9f\x0b\x97\xad\xf3a*\xcetGY#9\x91x\xd3!\xda4\x04\x06(7\xc3d\x9b\xa8\xdb\x80;\x0d\x0c\xa5\xd6\x0c\xae\x07\xf1\xc5\xac \x91f\x98B\xb3\x1cyf1\xda\xcc a&\x9bN\x95Y\x8a$3N\x8f9\x89\x18s2%\xa6h\xaf\xbb3\x0e\x92aN\xa6\xc1DqB\x01\x02\xcc9\xd4\x97\x82\xe6\xd2m\x0d\xc2\xce2\x85\xee2Lm9\x93\xd42\x8b\xce2\x9f\xbar\x06i\xe5\x0c\xbaJ\xc4`\x14$\xa5,KGY\x8c\x882MAY\x8c|2D;9\x87p\x12%\x97d9\xb4\x92S %\x83\xe4\x91\x13i#\x11\xc2\xc8\xe0B\x99\x87\xd5\xf0V\xd0\x89\xc4\x90\x03 $\xd6\xbf\xbfK\x97=\x8f\x06R\xd2>\x1a\xe2|\x02\xc8\x02\xd4\x8f\xf3H\x1f\x1d-w\x17\xc3\x99D\x8f\xaa\xa3M\x89s(\x1d\xa3|\x85\x01\x1a\xc7$\x81\xa3\xcf\xe5\x96O\xda\xe8\x7f\xfb7\xac\xad\x93(\x1as\x1a\x9b\xa2e\x0c\xb7-I\xc58\x82\x84\xd1\xe6\xab\x9aI\xbc\x18\xa5\\\x0c\x93-\xc6h\x16\xd1^\xc8\xa5VL\x91*\xbat\x8a3\x88\x143(\x14\xc7\x93'\"T\x85)\xc2\xc4BT\x89H\xc9\x96\xa6\xcc\"Ft\x89\x10\xe7P \"\x94\x87\xb3\xc8\x0e]r\xc3\x92\xb4\x86ABC\x97\xe5\xcd%1,C_X\x8c\xb8\xb0,ea\x1eYa\x92\xa6P\xed\x92S\x04\x85\xea\xb5(5\xa1\xc7\xe1\xe7\x97\x96K2\x17'\"\xcc\xa4 \xcc \x1f\xb4\xaa\\\x92pp\x16\xd5\xa0O-X\x8eT\xb0\x1c\x9d\xe0\xf4\xd1MR\x08\xa6\xc8\x03\xb5\xf9v \x03\xa5\x0f\xeeR\x05\x86}\xdd\x82\xf4\x80(1\xa0K h\xd5\xa4\x04\x19 \xba\xe9p \x00s\xa8\xff\x92\xa4\x7fi\xba\xbf(\xd1_&\xc5\x9fK\xee\x87\xb6\xcf\xea\xc5\xf9\x84~\xc3\xe1\xb2K\xe5\x97.\xdd\xd2&W\xd0\x10\xed\x1dG\xdc\xd7\xcb\xe9\x86*\x0ee\xe2\x151\xfea\x05\x99\xcd\xbf'i\xfaX~\xb0\x18%\xe5\x0bn\x81\xad\xaa\x16 \xe2\xc3)\xf8\xf2\x8a\xf7!&\x93 \xf7\xc0\xc9\x13\x01\x94j\x0f%\xd9\xcb\xab\xeb\x14b\xbd8\xa5^^\xb9\x13\xf9\xf20n<\x94\x15/\xaf\x16\xa3\x98\xf0\xc2\x1cxha\x19\x07\x95\x96\xa2\x14\xe4\xbasW\x16\x94\xe5.\xc4o\x17mL\xe2\x803\xd0 6\x92\xc7nh\x80!.\xca`\x87q\xd7\xb9G\xaf\x13X\xebF\x98\xab8G]\xdc>\xcc\xe0\xa5\x13\xe1EG\\\x1e#\x1d\xda6\x88&\xed\xe2\\e\xc1\xa9\x06\xc9\x86CQ\xb6\xb9\x10\xedX\x98anf\xd5\xc7\xf3\xc9\xa1\x9a\xad\x9fqLrI\x0e\xb9\x02\x8d\x1b\xcd\x18\x87\x84\xf7\xc1f\xcb\xcb\xe1\x8a\x0b\xb2\xc4\x05\x9b4\x02\x90:\x85\xfc\xcd%z\x8bR\xbc\x8d\xf4\xe9\xe6\x10\xba\x89\xbf\xfe\xcel\xe8\x90\xe5kn\xa6\"$nx\xc5J\x12\xb7\xcd\xa7l\xd3GrJ\xe0p~=\x97\xa6\xcd\xa1f\x9bI\xca6\xec\x0b\x94\xbc\x81\x8em6\x11\x9b\"\x8eR\xe2\x06\n\xb6\x82\xe4k\x0e\xedZI\xc2\xb5\x04\xd5\x9aJ\xab\xe1\x95_\x90\xabU\xd5'\xd6\x9c~\xfb\xfa\xec'\x19:\xf8\xb1\xb9\xc9\xce\xae\xd9v7\xcb\xaa^\xd3{wRV5\xa37t\xb0\xbd\x98\x8f\xb6\xd1\x05\x01>\x97\xe9\x1d\xad\xd9\x81sk\xc5\xeb\xd6_\"\xb6\x8f0\xd6VW{\x84\x17\x17\xab\x9a|P\x90f\xc4'\x80$;-r\x01\xaf|\xa2\xcbP\xe4b\xbc\xd9\x0b\xd8\xa9\xee\x17so\xd1w\x16|i\xc9n\xc7M\x98 \x89c\x8a\xab\x8e\x1b%Q%D qI\x1c\xe5#+\xd8AUw\x8c\x92\xb5\xe0v#_\xc4al\xf8Bx\x878\xef\xa3\x90\xf1\x96\xabV_[Z\x83\xfc\x83NN\xb3*\xacy\x07\x87\xd1\xb7\x04\xeat\xa4\xcf\xf4\xe1\xa5\x0c@\xefH\xd5v2J\xc8mU^\xad\xc3u\x16U3y\x10\xa1\xdbT+\xe1\x03\x98\xb5V%~\xe1U\xa6\xdb\x8a \xeb\xb3\x17\x91\xde\xae\xb1\x96izOW{\x96\xc8\xea\xb3\x0d\x82\xb18u\xac\xdd\xaf\xc4\xe6Y\xd5H\xf8\xbe5\x083\xc0=\xc8{\xf1\xads\x97\xe0\xa6\xb9\x89\xdb\x1f\xdd\xb9\xd9\xa6\x07I\x8d\xb3\x14\xd8Qw\xef\x0d\xbc\xc3\xe7\xa9\xb2A\x18\x9a\x1a\xf5`O|O\xba\xb3\xfa\xba\xc9\xee\x87\x1b\xd2-\xbf\x90\x9a\xf9\xb1\xd3\xc0\xcer\x1f\xd9'\x7fO\xba_\x84,\xed\x18i\xffs_WL\x9c\x8c\x7fi\xda\xcf\xf0E\xe5\xf4\xc8\xd5\x96\xdd\x8b#z\xda\xf2\x12\x16F\xb5\xf8\x8e\xa9L\xa5>uC\x95\x86\xc5\xf6\x86\xfb\xb5+&s\xd4VM\xadR\xa30\x01\xbcK\x07\xc7\xfa~\x98\x03B\x88\xca=\x8b\x8e\xcb\x07\xe1\x19e\x0f\xcb\x9a0\x92\xd9v+\x99$lm\xdf\x10FD\nX\xfd \xa4CK\xd9\xbe\xadu\x14[\x07\xfeE,\xa2^ohkLt8c\xf0\xd3\xa7\x8f\x17\x868;\x7ffC\xeb\x1bv\x0b\xbb\x96^W\xf72)Ud\xa5\x0b\xf8\x11\xe5;v>%x\xa9\xb20\xe9fP\xe4\xc6\xd0\xbe\xd0\xce:X~Cw-]q\x0fF\xa5t\xcac3\x91\xdbYm6\xb0kv\xd2\xc19\x81\xab=\x13\x15\xa1\xad\xf0/4\x9a\xc9\x10\xa6&\xd5\xef\xac\xe6\xac\x88\xc8&d@6]c\x9f\xc0\xfd\xd4\xdd\xd8\x14\x9b\x9f>\xfc\xa8\x155\xe5\x858C\xc2\x8d\xa1\x0d_nn\xa0\xaa\xe5Xr}J\x0f\x86\x12|to\x8a\xba7\x91\xe4,\xf9L\xf5\x7f -\xdaq\x81\xcdG\x8a\xc6o\xbc\xca\xf1\xad\xc4\x12?\xacJU7`I>\xd3\x87\x17\x83\xc7\xc1w\xf9]\xb3\xaa\xc8\xb0\xb7\xc1\x10\xb8B\xeb\x82\xce\x92S\x05\xe9_\x08S\xdf\x01\x19\xd2:aM\xef\xe8\x86\x8f\xa2\x08\x8e\x11\xc6\xc8\xea\xd6<\x137&\x84\xad\x8fN\xd6\x88\x06R~Ko\xaa\xfa\xdbM\xb3\xfa|\xd2\xff\xedm\xbdv\xfe\xf2\xfa\x96\xae>_\xdc\xf3\xf5\x16\x95\xf2\x86n\xaa;\xda^\xdc;Y9?\x12F\xf9V\xb0%uGT\x12\xd8\x96<\xf0\x8d\x95&\x93\xdew\x02\x9drK;\xaa&f\xc05\xfbCQ\xd7\xcc\x90\xa5-\xa9\xf1\xa7\x98\xf50-\xe3#\x18\x11\x1fL\x10\x9d5)\xbd.\x08)\x88\x81\nJ\xc2\n\n\x02\x0b\"\xd0\x82Y\xe0\x82r\xf0\x82\x14\xc0`\"\xc4\xa04\xc8 \x023(\x0d4\x08B\x0df\x83\x0d\x98c\xd6\x91\x08\xb2q\xc2\x8eA\xd8\x01\xc2\xaa\xc8AGp\x1b7f\xd3\x17\xcb~(v\xbc-\x9f\xd4!w\xa82\x05\x930f\xa7_\x04\x95\xeb\xe2~\xf4\x9d\x003\xd2\xd5\xd5e\x81|\x15\xbf\xda4\xab\xcfJ\x96V\xda\xfb[\xd2\xdd\x8e9\xa7\xe4\x82\x8c\x03\x0fn\xa6o\x17}\x9f\xadi\xb7#I\xd6(U'\xbe~\x88\xd7\xfb\xac\xf1\xd7\xcd\x9a\x1a\xb2\\19\xc9_\xbe}\x90\xa7\xb3\\\x9e\xaeg\xc6\x19:fd\xc4\xd0\x9e\xe8}\x82z\xb5%_\x96#\x8fz\xad\xb9\xc3\xfb\xb3\xd9\xb3\xdd\xbe\x8f\xf1\x1b\xe7aO;\xd8477\xb4\x85g\\\xb7\xa4\xd0\xe7\x0b\xf8I\x1c2\x19R\xea\xa6~\xb1\xa6\x8c\xb6\xdb\xaa\xae:V\xad\x8cS\xe8\x03\x9b\x1b$U\xcf\x94\xe3\x8e\x99|\xc2\x04\x92V_\x9a\x82\x10\xeb\xe5\x9et\x9b\xaf?\xce\xa12C\xce\xc1\x8d_\xc2G\xbf\xe13q\xf3s\xac\x11\xf2 4E>\xd1\x06\xc9'\xde,\xf9\x04O\xcc\xe5\x93h\xa1|\"\x87\xe3\xf2\xc9\x90\x92\n'\xeag\xea\"\x14\xaf|(iP>\xa9U\xc0~\xd2-\x99\xbc\x82Eu\x0c\xab\xff\xec\x05\xce|R\x0d\x9b~\xa0\xed\xf7\xa1\x91{\xe8\xfd\xe8\x1dgC\xa2rs\xd3\x11-a\xda\xc5WI\x89\xa9\xd2sM?\x9f\"\xebQV\xbf\xea\x13\xfd kE:E3,t\x89\xe1rF\xe7\x08FV\xeaS+\xfd\xae\x95\x97&\xeb\x83\x99\xc1\xe1\x98\x98\x07\x98]\xb0N\xf7\x13\x99\xf5~\xb1\xcc\xcbH\xcf\xc2\x96\xb1#o\xe2\xfc\xf4\x86#o\xe2\x8c\x94\x86#o\xe2\xb84\x86\x99I\x0c\x85S\x18f$0\x94N_(\x96\xbcP6u\xa1X\xe2B:m\xa1X\xd2\xc2\x917\xf1\xc8\x9b8'\xf5\xe0\xc8\x9b8/\xc5 \x87J\xf0\xc8\x9bh\x08\xd5\xdbl@\xee\x0cxa\xa2\xa4\x81GNh\xd6k1\x84@WM\xf7\xd01\xba]\xc0\xe9n'gS\xf3[\xb510\xbe1\x12\x18\xb9\x8e\xee[\xa28/\x9b\x1d\xady/myy\xe7\x1f\x80\xdcp\x93\xcc\xd4\xe1A\xb5\x11r\xc9\x9a7\xb9\xa6_`Ez:\x12\xb1\xcb\xa8\xba\xa1\xdbEw\xa9\xb0\xae2\xc5U;\xd4\x01\xbaFE~\xab\xebk*h\xe0\xa4 \xc2[#\x0ek\x88\xec\xe3\x8eq\xfdW\xa7\"\xd2oV\xa31\xac\xbe\x01}\x0ehM\x1f\x17Ww2\x0e\xa3\xd5\xab\x06\x9f\x91jO\xa6\xcah\xe9_\xc5\xa8,\xb02\xa5\xca\xbf\xf2\xfeb\x96\xe4\xe8\x9e\xd8\xbd\x89X\x03\xef\xb27\xcdJY\x01%\xfe\x8e\xb6\xd2\xee\xcb\x1b\"u\"\x8b\\Be:\xb0W\x0b5%_\xf9\x7f\x92\xee\x9c\xe4\x1e\xb4\xeb!\xf5\x86\xb7T\x94\xf8`\x92d9\x1c\xd6\x8c\xde\xb3=\xd9xA\x10\xbe\xc5\xdc\xe9\x0d\x8d:\x12\xb3\xdfQ\xf2D\xdd\xdd.\x12\x9c7\xcd\xad\xee\xa77\xff\xbe\x80\x0f\xf4\xfa\x15\x883\xc2W/_\xd2j\xd7-\x04\xb9(\xddo\x17M{\xf3\xf2\xed\xd9\xf9G\xfe\xe7\x17|\x11R\xdf\xbd\xd6\xeay\x82T\xaa\xea\xd4\n \x97\x03\xdec\xb6\x1d\xbc#mEj\xa6\xa3\x1bW\xfb\xfel\xb4w]\x06\x16\xcd\x8fo\xfe\xdd\x88\xf4.\xe0\x82{\x12b\x06\xbe=;\xe7u:\x81\x87f/\xce\x99\x07\xe3\xbb#\x9d\x11\x82\xba\xbc\xb8\x7f\xdd\xd4\xd7\xd5\xcd\xa5\x9c\xe0\">\x85\xf8I\xea\xfbK]\xdb\x1f$\xf0\xe1Rw'/M\xa6\x94\xf0J\xf1\xad\xcc\x9a\xae\xaa\xb5X\x06d8XMT%H}\xe2\x0eqLG\xffm\xf1\xb5\xe5\xd5\xf4Lx{v;\x8a\x00\xce\x98Lc\x83\x1d\xff\xff\x96+\xc4\xd3\xff\xdfK#\xdb\xe2\xa5_\xa5\x8f\xa2\x04^\xa9\xa7\xfd\xc7\xe1=\x9bY\x1f\x8b\xcb\xd84H\xc3\xdd\x05\xcap\xac\xb5y\x10\xddn\x88St\xac\xc6_\xf8\xdc\x92\xe4d\xcd\xb5\xf0\xb1\x85\x8f#\x126\xb6\x84\xa9+\xa7]\xb1z\x01\xf9\xb6Y?<\xed\xec\x98\xbf\xda'\x89\xf1\x16aU-U\xe3Uvm\xb5\x15g\xbfBV\xbf%ij\xea%\xd7\xec\xc8C\xe7\x86\xbf\xaei?\xdd\xaf\xa9\x11! \xf7\xe1w\xb4\xa7L\xbe\xa6rU\xbe!\x1dl\xaam\xc5\xfa\x9e3\xb7\xb9F\xddU%-\x9ez'\xd5'\xd5\x1e\xd1\x8a\xbe\xeaR6\xa5\x8a\x8c\xd6\x903\xd0\xd2\x9a\xd2-j\xdcU\xd3\x89\xdc$zG6{I\xee+\x96\xcbf-\x81%\xebFd\x89\xea\x1b\x19\x0c1\xd2\x13\x90\xf1\x10S\xbc>\x1f\x1f\xd4\x85\xaf\xa2\x92'\x97v\xac\xda\x8a\x00\xcd]\xc5W\xc0\xadb ^8\xf3\"+\x19Pnt\xb0\x0c\x07?P\x87\x86\xe9\"A\xbaX\x88nM\xebf\x8b\x05\xbb\xa2Q4\xac\xb6\xc9\xcfR\xe1\xb1\xd7MU\x1b\xbb|q \xcb@\x9c\\7\xdb\xaa\x96&\x95\x0f%\xa9U%0J\x8dw\xef/\xdeJT\x8a\xda?\xf6\xfc\x7f\xa4\x86\xb3Z\xdf\xaf\xd0[j3\xb6\xef \x93\xc7t~!\xbd\x1au\xc3\xfc\xbfz\x80\x9b\xe6\xa6\x11;S\xfb`R\xc1[T}\x8alL\xaf\xff\x13)p0\xb3\x17\xbc\x85'U\x8fyt8\x8e0A\x8e\x83\xde\xc5S\x84\x16\x07JS\xe3\x00B\x8f\x03\xf3)r\x1ci\x0c\xb9\x95g\x1ei\x0e\xa4\xb8d v7O\x06\x81\x0e\x84.\x05\x19A\xa4\x13\x96\xe1\x11)\xcc\"\xd5\x81\x11\x9d\x91\"\xd7\x81d\xbb\x93$;0\x8eh\x07\xd0\x1b&f\x12\xee@\x8at\x07\x127\xf7\xa4\xee\xee\x89\xf4R. \x0fd\x10\xf1\x00z\x87\xcf,B\x1e\xc8#\xe5\x81I\xc4<\x10\xec\x98$A\x0f\x94#\xe9\x81p-A-UL\x84\xa4\x08\xfabBDE\x90\x9c]\xfa\x99NX\x14\x10Hj\x9f\xb4\x082\xaa3\x95\xbc\xc8\x13d\x1cay\x04FP\x8c\xc4\x082\x88\x8c`>\x99\x11${\xae(\xa9\x11`\xc4F\x00\x05\xc8\x8d\x1cy\xd2\xffn|o\xbe\x18\xc9\x11\x14%:\x82\x91dG\x10G\xe2\xcc\"=2\x04\xf5\xf4G&\xf1\x11\x7f\xa6\x90\x1fe%$\xaaj\xf7\x19\x89\xea\xdf\xccHIT\x9f!\x89\x89\xd1<\xc4\xefh~\xde\xa1\x8bq\xc1\x16\x9d\xb9d|(\xfa&h\xddq\xd4M\xe0\xf5X\xa6\xdbd\xa4\x8d)d\x0e\xc8F\x83jLy\xf9x\x9a\x990X\x04\x02\x8b\xf6a\x00\xfa\x8aa\x0d\x0bA^q\xb8k.\xd4\xd5\x81\xb9\xa2m\n\xdb\x8b\xd9\xd0V\x81\xb44\xa7\xc2\x04X++\x08i\xc5\xe1\xac\xb3\xa0\xac\x1a\xbcj\xc8\x8b\xc0X=\x08+:\"\x98:\x15\x85\xadN\x87\xacN\x86\xab\x9a\x00U\xb3\xaf&AUG\xc0Tq\xed\x16\xd4\x14\xd2\x9d\xc0M\x85F\xa0\x8a\x86\xea\x05L\xcd\xe0\xdf\x0dFC\x99\x141\x85\xaf\x1e\xbcQ\x17\xa6P\xecuA\x84\xd1\x84\x1d\xa4\xd7\xd7t\xc5\xaa\xfex\xeb\xc9\x0d\xe9vm\xb5\xa2Oz\xf7G\x9a\xc9^\xdf\xe5u\x10\xcd\x96\xc2\xb6\xdaV\xf5~\xab\x8a\xd5\xa9\x16C\xba\xc4\x96nwM\xb3\xc1W\xba\xef)\x13^\xe6/\x15\xbb\xbd\xb8\xef&d\xdd\x1f\x88\x9a\xe5\xe2>@\xc9\xc2\xee\xa57\xe1\xf4\xab\xb39V\xdf\x8a\x7f,+\x8f\xe40\x0f\x11\x90\x9f\xa6\x1f\xd8D\xedH\xcb\x96\x1de\xcb[J\xd68Js\\2V\xc3H0\x13+\x94\x95\x1d\xcb\xc9\xf6\x9b\x08\xa9}cp\xbf\xa8,\xd49iYG\xd9\x0f\xa2\xc5\xbfs~\x14\xbav\xf6\xc6\x1c\x9diCS\xa6?U\xaa\x03\xd2\x03\xb2\xbaW\xa4\xabV\n\xc7\xc1\xf7r\x81\x9e\x9a\xc4V\xec4\xde|\x92\xfb\xf6\x08\xdb\x86|\xc8nw\x18\xd1\xa9\xad3w\x1a\xeb\x8e\xd6\xdd\xbe\x83\x15\xd9I?\x8d\xc9\xe4*\xf5\xe7v\xbfQ,I\xd66P\xf4\x07\"\xcf\x9c\xd6\xc2\xf2{\x1bB\xf9\x167\xdcz\xb77\xbc,w*\xfd~f\xb0\xdb\xb2\x16\xc1tB+\x1f\x16+\xb0c\x84)\x03$\x03\xae[\xb2\xba\xadj\xeanaE-,\x0b\xa4\x9f\xc8P`X\xa4\xc4'\xf1y\xce\xaa\xed\xd4\xf4\x8e5a\xf4\x05\xff\xdeyC\x1c\x1d\xf8\xf6U?3f\x06n\x94 UaH\x07\xb3\xa2\xf6X?\x05\x82\x7f\x01;\xdd\xff\x1c\xb5\xd7\xfa\x89ci\xe4\x13\xee*\xc8\xe9.HwY\xc2\xae;/\xd9\xf6]?BU$>sYr\xc5\x81\xa1`.V\xcegi\xad\xf9\xb4w\xde\xe5\x7f*\\\xbc\x88\xcd\x13\xd6\xb4]a\xc1n\xbb\x86\x10\xd4n\xa73\xf7\xfb\xbf\xedZz\x87\x9a\xcf\x9a\xde\xb3\xe5\xc1\xea\xd8[\xf4\xc2r\xc9nWX\xa2\xd0?\x95\xcaYX4\xbd\xab\xd6\xb4^\xd1\xc2b\xfb\xf1\x1f\x96M\xc4\xff\xe0\x86\xa8\xe9h\xbbT\x14\x1e\xa5\xca\xb7\x16y9\xe1m\xbe\xc3><(\x88\xb95\xce\x95\xbf\x97\x03\xe5\x1c\xe5\xa2Y\x1b\x8c\xfe\x8f\xc8FC?\xc1c\x9d\x845\x9c\x99\xcexq\xdf\x19\xd4\xbbW\nQ#\xb7\x80\xd2W\xf8\x1fjk\xf2\x83X\xdc\xff\xe5+4qIF\xcbD\xce\xfcf#\xf6:\x12\xac\xd5\xaa\x83\xc0\x05\xc0/\xf4iK\xe1\xaf|#HnZJ\x07bTD\x9e\xa4\x93\x14a\x00\xb4<\x81\x7f\xd8RR\xab\xda\xcb*\x9e\xeev?\x90\xeev\xd8\x7f\x0fav\xdaQ^-\xdb\xcdQ\xca\xfa\x86\xfbZVD\xbc\xa3\x12 a\xef\xd3\x84\xac\xb5\xe5\xd9\x19\xe2\xf4\x94\x9a\xad:\xb8 \x98\xa7?A\xbf \xe5\x15\xac\xf7\xd2\xa3\xa4\xcb\xbb\x86\xd1e\xb8r\xf2Iz!\xe9\x12\xf9#\xca\"\xe1\xdf\xb3\n\x82\xcc\xc2@\x8b\x8b\xbe\x91\x9c\x89\xe6\xe3\xf2{\xe0\x8f\xa4\x1a~\xfbf\xf9\xd3\xc7\xef\x97\x17\x7f:\x7f\xbb\xfc\xf4\xee\xdf\xdf\xbd\xff\xe5\xdd\x84/\xcf?\xbc\xfd\xf9\xfd\xc5\xdbi_\xbe~\xff\xd3Og\x17\x93\xbe}\x7f\xfe\xfec\xcf\xbe\x1fz,\xf2\xfc\xf1\xedM\x9b1\xfb\x11\xfc\xb8\xeb\x9f\xba\x9b\x0b\x95\x16#\xb1'|J\xab\xa8\xaa\x91o\x18\x06\x93\x0eO\xbf\x9c\xa1\xc6\xc8y\x82c\xf3\n~n\x98w\x8e\x97)A\xf6\xf3+8\x17\x8b'\xd9\xc4\xc5\x84vb\xf63B\xa1s\xbcz\xf9\xb4\xcd\xbeF6V\xf6\x93\xb7\x95\x90\x8fQ\xf4\xef\xbf\x8e\xbe\x1b\xde\xd6\xd9O\xa6\xed\x80\x11\xf6\x03\x92\xbb\x9a\xe1\x19\xd1\xed\x90Z\xe1\xdd'k\xabh?#z\x03F\xf6\x08\x7f\x12\x9bJ\xfb\x19\xa3\x17\xfa\xc9WM\xfd\xe4\x0e\x14\x8c\x1f,\x18;`\x99\x1bU\xf4\x13|\xdb\xea\xbe\x8af\x94!/\xe674\x15c\xb1\x9f~'\x17\xf6\xf7\xedgBM\x92]=T\"\x91\x15$\x9f1z\x98o\x9f\xfa3\xe0\xbc\xe2K\xf6\xc0\x98%\x94\xafR\xf6m5|\xab\xde0z\xa2\xb0\x80\xdbJ\xa2\x16\xe5\xff\ng-*Pl\xf9\x87\x0d=\xafs|\x1d5\xd6\xdb\xd0+\xc2C\xbc:z\x88\xf9_\x1e=\xc4\xe19z\x88G\x0f1\xf6d\xda\x0e\x18a?`\x84\xe31\xa2\xdb!\x7f\x0d\x90\xcf\xd1C\xccxr\x07\n\xc6\x0f\x16\x8c\x1d\xb0\xa3\x87\xe8=\x13j\x92\xec\xea\xa3\x87\x98\xbf\x84\xfeCx\x88\xc2\xac,\xef\x1aV\xd57\xcb]\xf3%n\xeb\xfe?\xf6\xde\xbd;n\x1c\xcb\x13\xfc??\x05\xc6{N\xdb\xee\x96\xc3\x99\xd9U5g4\x93}F\x96\xe5Lu\xfb\xa1\xd5\xa3\xb2k\xeb\xd4J\x10\x03\x11b\x9bAF\x91\xa0,Uo}\xf7=\xc0\x05H\x10\x0f\x02$!gf\x0f\xf0\x8f\xad y\xf1\x06.\xee\xefw/\x02\x1b4l)\xe9\xc7\xd2\xd7\xcd7h*O\xcc\xd17\x85C\xc7\xcd[iHf\x83\xe7D\x98\x91{\xb3\xbb4,\x036\xd35\xa0S\x9c\xa4G~\xa9\x98\x8cM\x91g\x9c\xf8\xc8\x1d\x8e\xecc\xa2`\n\xcf5\xc4\x96\xbd\xe6N\x10\x9f\xbf\x969[)\xe1\xf5\x08\x81\x06R@\x9e(0_\xd45T\xe0n\x1f\x987\x9a\x90?r\xf0\x9e\xeciB\x01\xd0\xc4B\xa01\xe6\x94=\x85\xf2\xa9\xecib]\xd0\x8c\xfa\xa0qF\x96=\x05.\x00z\x92\x0b\x82\x93\xbdeONN\x97=}\xcd\xc2\x85.]z\n\xe3\x8a\x05\x8b\xb3s\xcaBO\x9e2y\x98f\xf6\x14\xca?\x0b\x16h\xe3\xa9\xf9Yi\xf6\x14\xcaU\xb3'7\x83\xcd\x9e&\x0f\xbc\xb0\x13\xb4L\x93\xc5\x87\xee\xf9j\xb2\xf3\xe5\xeciA\x81|*\xc10y\x18w\xf6\xf4\x95\xd6\xce)\xe7<4\xaf\xd1P\xb8\n>L3\x0e\xea2\xcdh=4\xb3\x05\xd1\xd4\x03\xbcLS\x0ePz\x9a>3d\x9a\xda\xe1h~\xa7\xa3\xb9\x1d?\xeb\xc0/\xd3\x84\x83\xbfL~\x9e\xa3=\xcdh\x97\x19\xed\x11\xce\x94\xb4\xa7\x11\xfe\xa4=}\x8djy\xd9\x8d\xf6\xf45\x8af\xf7\xd9\x1aO\xa1t\xcf`\x81.V\xbd\x99\xc2\xc8\xa2\xf6\xf45\x9a\xd3G7\xb5\xa7\xafQ27a\xd5\x9e\xbeF\x99\x02(\xaf\xf6\xf45\n\xe7!\xcd\xda\xd3\xd7(X\x18\xed\xd6\x9e\xfcd\\{z\xfaz\xcd9\x9d\x05\xb2~\x83d\x99\xcc`{\x82\x9d3\xa4\xdd&\xaaeS\xd5\xb1_\xe1\x81$\x08\xea\x93i\x8eF\x18nZ\x97)\x9dD&\xccAH\xe9$\xe2L\xd3\xa7\x84LS;\x1c\xcd\xeft4\xb7\xe3\xbf\xf6I\xa4\x0f\x92\x11\xda2\xd0\"\xe3\x97\x0d\x0d\x93\xf7\xea\xa1a\x9a5\x80\xe7\x0d_\xb92]o\nl\xbdq\xca\x9df\x0f\x8c0\x1a\xd20\xbdB\xfc.\xc4\xeb\xd3\xb7\xd7\xef\xde\x1f\xfd\x18H\xd1\xd1\x93.\xe5\xe8\xcd\xc5\xc9G?\xc3h\x98t!\x814\xa5a\xd2\x85|<\xf5\xb1\x95\x86\xa9\xbf5sq\xb3L?zA\x82I\xb6~W\xe0-\xca\xcb5\xc7\xd9\x1a\x11{\xe1M\x91U\x9fO\xdfN2&C\xea\xa6#\xca\xf5k\"}i2\xa4?L\xb3\xc7\xf3\xece.\x0085\xd3\xe2bN\xb3\xa4B\n\xe6\x08\x0c\xd3\xe2\xb2Nj\xd29\xca;$\x88\x0dy\x91o\x81\x96\xc7t\x0f\x89#p\xda\x81\xf4\xc3\x9a \x92\xdf\xac*bN\x06|6\xa7\xec ]\x8f\xab& m\x11\x8d&\xfc\xe8\xf1\x85\xdf\x93\xb4\xeb\xc3\xc2a\xe9\x92\xd6[:\xc6k\xd2\xcf\xbf\x86x\x8f\x04\x13\xf6\xb8);[_V\xff\xbbSw\xf2 \xbb\xf8\x84\xdaA\x9aRGH\x93\xd7\xb8Y\x93q\xc6D\xdc\xb7\xb7\xd7\x01w\x1f\xf6irc\xa1Y\x0d\xc6\x12Y\x7f\xff\xfb\xdf\x7f\xf7?\xa6|2\xb3\xe1\xd0\xbc\xc6C<\xa0V\xb6\xff\xfe\xf7\x7f\xf8\xfc\xdd\xaf\xb9\x98s\xb4\x86\xb3\xf6\xb6\xc8\xb3\x7f#\x8f\x03c\xc9g\xf2\xd8(\xd7\xd8L\xdb\xf3\xdb\x86@\x98\xbd?v\x13?\xf0\xebP\x92\xd60\xcdj\xe49\x07\xb6\xceF\xb6\xaf\xf3\xaa\xce\xe9\xe4\xf9\xf4\xa4e\x94\xa5\x0b)\xd4\xc4\xe9=ubO\\\x07g4\xce\xe4\xf91q\x05\x9c\xd8@hF#\xa1yk\xdf\x8c\xc6Bs\x1a\x0c\xcd]\xf5\xbe^\x01\xa7\xafw\xd1W\xbb\xb9k\xdd\x9c\x95nF\xc3N[A\xd0\x925\xee\xc9K7\x8d\xc7\xdb}5\xadXaEb:yU^\xfb\x0d\xed\x81\xb9\x87\xe5z\xfb\xf87\\\xd2\xbc$\xd7a\x1au\x98&\x1d\xa0A\x07/\x86\xe1K`\xf0\x0e\x11\xd8\x82\x90&\xac!\xc1\xfbAp\xe5\xd1\xa4\x06@SW\xffI\x0d\x81\xa65\x06\x9a\xbe\xd6?mq\xa6\xac\xec\xa1k:\xbf\xf1\xc8'\x0cM\\\xcd\xa7-G\x93\x1a-lQ\x804c\xd5~\x82\xb2L[\xa1\x03\x0b\x10\x98u\x88\xe1nb\x8e>\xa3\\\xa8}\xe8=\xdb%\x8e\xb9\xbf\xc1\x11w7\xf0y=\x80\x8d\xc7)O\xf1\x8f\xc1\x94\x92\xdd\x1eB=Wh\x977\x05\xc1k\x84\xc1\xc7\x01\x81\x8f\x83j R(^\xc3\x86r\xaer\xee\x15-z\x94G\x07H\x0c\xf2\x02\xc2\xc3\x1a\xc0o\n\xefhM)\xbc\xe3 \x8d\x81\x8dc*\xd4SE\xda\n\x82\xff\x02\x1ao\x1c\xd2\x9b\n\xdeM\x84\xe9&\x02r\xe1\xd0\xdb,\x90m\xd0\xff^t,\x0c\xef\nF\xb6\x02\xba*`\x94{\xb6\xb7 \x99\x8cok^TiBN\x8e\xea\x0c\xf6\xcdP\x98\xc7\x0d\xde\x8co\xc3\xc1\x80\x8c\x03l\xd1\xc4Y\xa1\x97=\xde\x8a\xabD\xfaF\x1b\x94\xaa\x7fA\xb9\x8fD\xf9Q^\xaf /\x81Q.\x01\xb1\xad%\xf6\x15\x843`\x8d#\x8d\xb3\xbb\x9c\x9d4v\xa5J\x9f\x8b\xbc\x02\x84\xfdW^B\xd24p\x07\xfd\x19\xde\x92s\xb8\x82a\x05\xcf5!\x7fmI\x0dW\x0b0q\xac%\x08\xdaU\x0dE\x84_\x8b\xceoQ_\xa1S\xaa\xdc9\xb8\xa7\x8f(\xd7u\"\xdaE\x97,+\xb4\xabj\"o\xbcWG\x88e\xbb\xf36\x8a\xc5}\xccu$\xe1\xe2yk\xf0\xff\x94\xed\xee\x16\xee\xfc\x96\x97\xef+\xb7\xc1\xeb\xe5W\x1b\x8a_\x1cr\xcd\x85\xe8\xaeQld\xf2\x9b2r\xda\x88\xfb/\xf2\x06\xb5%\x8c\xa55\\\xcc\xfe%\x17\xc7\x1b\xfb|p\xdc\x940\xe5\xfa!MDw\x05\x91,\xae\xf5V\xa7\xdf\xaf\xbew\xdd\xdc\xd0_\x82\x04\xbdc\x8cus\x9cS\xc5\x1f\x7f\xf9M\x0c\xb2\xf2\xf2\xfa0\xcb\xed&\xf4\xe1\xba\x1e\x14\xd2ZP{a\x91CI\xf6\x8e>\xe7\xe0\xbb\x94\xf1F\x85\\u\x94?\x98\xda\x963\xa3A;\\\x0eo\xa2\xe0Z\x9b:\x7f\xb2jM\x9a=\xb6G4\xb5\x08\x17e\xfd\x88w\xf0Y\xb7\xba\x1dWk\xa2\xc9\xb5\x89\xb4i\x9e\xee\x96\x19T\xa5\x1b\xd5LvH,__\xdb\x9c\xf39\xcc\xd7\xc8\xe6@\xde\x90\xad\xbc^\xe3/\xd7E\xb5\x9d#\xdaXYY?\x08g \x9b\xbf$*\xaa\xed\x96\xd4\xe8E\x8d\xbf\x08\xe1/W\xe8\x03\xbf\x00O\x93TV\xe5\xab5\xa1\xa4\xde\xe5e\xde\xd0<\x1b\x1c\x01\xabmc+\xef\xd3^\x8f\xb9k\xb6\xeex\x1a\xbe\x13\xc7\xf8Y\xc3h\x7fH\xa3z\x8a\xed\x96P\xf5\xb3_\xe6\xd2M.\xc2\xf1,H\xf1\x1a\xbfO\x14\xd2x\x05!ym\xc2\xde\xcaB\xf2W\x19R\x80!6\xa0\xf6\x90<\x97\x8aB\n\x94\x16j\xe1a\xa9\xbf\xf9\xb3S\xf1\xca\xbeC\xd0\x97\x1a\xef\xf7\xa4F_\xb8\xca\"4\xa7Q\x81\xb8\\\x8b\xcd\x1e\xd7\xc6\xe5\x8e\xc3\x04\x15\x19\\_\xc5V \xbel\xd9\xf9Aa5\xbb\xe0r\xe1>QY+R\x8a\x0bF\xa1\xf7\xb5\x8a\x89\xcb*\xbd\xe3\xd3U\x1f\xa1\xa7\xb3\xc6y\xdd\xdf\x98*/\xf2\xeana\xd4\xab\xea\x90\xe6l\x80\x90\xea\x8b\xeb@\xbb\x93\x03FM\x91\x83\x89Nm\x00\x197\x9d\xd5^\\\x88io\xf1\x96\x15\x9c\xdfye\xaf\xd8\n0\xc9v\xcc>\xb9nk\xe7e`\x8e\x95\xd97\x13\x10:BW\xe7\xef_\xd7\xa4\xa9\xda:#\xa8\xc4;q\xcao\xcb\xfc\xaf-)\x1e\x11;\xfa\xd3|\x93\x0b\x9c\x88\x8ap\x8f\xf6E\xab!u\x8e\x8b\xfco\xc4\xb8\xd0\x1eA\xfdh\x95U\x05\xbam7\x1b\xd2]A\xbf\x82k \xa0\x0ep\xe5\x9d\\\xd60E\x05\xc1\x0d\xb5I\xabJ\x82\x9e\xbd~\x86\xb2;\\\xe3\x8c\x92\x1a\xee\xda+pCQC\xb6;Rv\xf3\xea\xea\xfc\xfd\xf3\x06\xed1\x85\x1b\xf5,\xc2\xba\xa0\\\xb6\x9c\x98\x88M[\x14\x8f\xe8\xaf-.\xe0\xe6J\xdeRB\xe0\x13\xfd\xea\xfc\xbd\x0da\x04\x93$\x13B\xef\xac\xbbE\x93\xdd\x91\x1dA7w\x94\xeeo\x0e\xe0\xdf\xe6\x86\x87Z++\xf1\xf4\x80\x8f\xa8\x0c\x97\xa8\xda\xc3\xe2W_\x93uW\x15n\x0dl\xf8Jd\x8d\xa4\xfa\x8f\xe8\xa8D?]^\x9e\xa1\x1fO.\xc5\xfd!\xacL0\xdd\xf8\xcd\x94\x08\xa3?\xeb\x83\xf4\xf2qO\xfe\xf2\xe7\xbfX\x04\"iX)\xe5H\x80\xe5\x93\xb7\xe9\xbe\xae\xd6m\xc6/\xa7\xe57\xd2\xdaT\x8a\x7fDG\xfdn\x07w<\xf2+\xd8\xc1$\x96\xe1\x8c_\x17]}n\xf7\x9de\xe8\x167\xfc\xf6l\xfb\x14\xb5\x16\xf2\xea\xfc=/\x11\xbf\x1a\x96\xde\x91\x9d2\x96\xc5\xa5\x99XV\x80\xfd\xff\xbe\xca\xd7\xec\xd0j\x15\x06\xc5\xe1\xd3\xb5\xe6\xb7\xef\x1e\xc8O\x99DL\xf3\xdb\xbc\xc8\xe9#* YwW\x0d\xb3e\xa5\xbew(9U).\x97\xe5\xaf\xf3Y\xb3B/\xae\x1a\"#n\xb1\xd6`\xc3\x87\xad\x0e0~p\x89\xb7\xf6\xba\xde\xd6\x04\x7ffs^\x88\\\xbd\xb4^9SQr(.\xbam\xcb\x0cF:+\xb5X%\xb2\xb6\xae\xb9AQ5\xc49\xef\x9b\xe1\xf6G\xd3\x02\x87\xe4j\x7f\xdbn\xf8M\xe2\xb8!\x07\\C\x87\xcb\x90YF\xfc\xc6T\xbe{w\xf3\xe3\x96l\xf3\xb2\xb4\x9f1l\xb7\xac#\xb1\xd4\xac`\xdc\xe2}\xde\xac\xb2jg_\xdf.\xf8\xeci\xc0\xfa\xc7\xa6g\xa9\xaf\x07\xe8\x85\xb0\xbc\x80\xf9\x14\xa6\xdbK\xb4\xd3LG2\xddZ\xa7?\xaf\x16'Etw\\\x83\xd1Z\xdcz\x9c\xa1\x86\xecpI\xf3\xcc\xd0\xb4\x1dG\xb1\xd1-~\x14;\xf0\xef\xff\x1f\xba\x0b\x95\xb9\x99^\xd9\xc0\x8d\xddZ\xea\xa8\xb7\xd5\xbdu\xeb\xef.u\xe6=2xc\xbc\x1c7G\xe5\xe3\x8drn(\x11\xaeosZ\xb3\x895R\x1e\xb1\x92j\xc2pQ\x95[qk\xb9\xde=l\xbd\xe3\xcb2\x94\xe7\xd6Ti\xd4\xfc\xa4vb\x0c\xa639\xb0\x8b\xfc\x96\x17R\xac\xc6Mw!1\xbf\"9\xfb\xfc\xba-\xd9?l\x1f\x83\xbem\xec3\xc9\xb6\x95W\x1b\xd4RXN\xe44m\xd8B\x86{\xd5|KJRc\xca\x8bJ\xef\xaau\x177\xec\xc8X\xbf\xa0K\xf4?=\xbb\xfct\xfe\xd2n\xe3\xea\x07\x92+\x1b\xc8\xc8\xd5<\xbf\xf34\xcf\x8f\x95\xd5z\xc1\x9a\xe6\xf0\x07\xf4\x0f\xfb\xdb\xd5\xbb\xaa\xfa\xcf\xd5j\xf5w\xdbk\xb8|<`*\x14{w\x0f\xea\xc1\x07\\7w\xb8`\x8d\xe6*\xb0\xbda\xf4<\xad\x19\xe6\x1b-\xbb\xabr\xd7g\xc8\x8b\xc3\x07-\x7f\xeb\xbf\xfd\x80\xca\xbcp\x0c@W)\x8c\x91v\xc9o\xf7\xcf>w\xab\x98Tn\xd9\x91z\xaf\xaf\xb5\x80p>J^\x03')j\x02\x9f[T\x82\xd7\xec\xfc\xb6\xe2\x0f\x98*\xf5\x9c\xe9\xdc\xdd\xda\xcf\xf6\x05\x11\x80Q\x13\x05=\xaag\xd0-\xb7e\xf1(O\x1d\xc6\x01\xb1S\xdb\x10\xdePq???\x9b>\x7f\xfd\\\x17(\x8e>\xb20p\xd6!b\x84=\xdbT\xd5\xea\x16\xd7\xbc\x1a\x0f\xaf\x1fW\x7f{\x06\xad\x00Z\xbb\xed\x18\xc2\xb3}\xc6\xded\x8b\xbe\xf6\xf0_/>}\xd4\x7f\xfb\xe1\x87\x1f~\xb0\xf5\x0b{\xb7?\x1b\x83\x1eS\xf1\xbb\xfca\xd3\x863@\xdb\x10\x89\x8an\xdb\x02\x1b!\xa8M\x01\xec\xe55\xe97\xdb\x03Dv\xb7d\xbd\xee\xb7\xdd\x03\xb1\x87\x1b'je\x03\xdc\xf0\x06\xb8\xf9\xdf\xac n\xc4!p@\\\x90\x0d\xba\x92\xd3\xf5\xd0\xaa\xa8\xe2\xec3\x9b\xad\xfd\xe1g\x93\x17\xc4\xb6J\xcay}F\xea\xa6*\x1d\x03_\xd81\xf8%\x8c\xd7\xbc'~@\xdf\xd9\xa4u\xafr\x96\xa1x\xf3\xfb\xb0\xd5\x19!G\xee\xcfxk<;D\xcfl\xb3`X\xc5\x15\xd4\xe3\xd9\x81]\x12\xaf\xc1G\xbcc\xd2\xfe\x17\x14\xf5_\x1c\xaf\xb2\x1aho\x86T\xe3t#\xd4\xeda\xdfC\xbf\xe5\x0d\xfaB\x8a\xe2\xd5\xe7\xb2\xfaR\xf2\xf9y\x87\x1b\x84Q\xd66\xb4\xdaY\x87\xf1p\xa0\x1d\x80\xb2\xa7\x8d\xbe\x9e\"!2e\x03\xaa\xdc\x1a\xd6\x16>\xb8\xf4\x0cn\xf8\x80\x97c\xed\xae*\xd6\"\x84m_&n\xb9\x11c\x14 [\x89\x18\xa2\xba4\x9eE76\xd1\x0b6\xebe\x13\x18Gqi/\xfa\xcb\x9f\xff\xf2\xd2:\x8c\x97\x8d\x87a&\xae!\xc1\xab\xcf\x84}\xb7\xfa\xfe\xbb\xef\x9bg\xd6N\xee\xff\xef\xa0a9\x0f4\x1e{y\xde\x9b\xdc\xf65\xb9\xcf\xab\xb6\x117\x98\xa2w\xec\x8c\xcf1\xfe\x06\xfd\x0b\xfa\xee\x00\xe5\xf49t\xcd\x17\xfe\xabq\xfe\xde\x91u\x8e\xd9Z\xa47%_7d\xb9;\x95\x1aNGHjI\xc9\n\xfd|Gj\x82\x1b\xf4\xbe\xda6:[\x95\x95\xe9\xc0j0T\x94\xc7\x1d\xa1x\x8d)>\xe8r\xe0\xea\xfc\xb0\xd0j\x81M\xfb\x89\x95\xc0\xf7\xfd\xea\xbb\xef\x0e\xd8\x7f~\xb7\xfa=\xff\xf7\xf7\xddW\xee~\xeb\xa9}>8\xba&\x05\xb9\xc7%E\xf4\x01\x82\xcd\x0f\xc7\xa1\xac\x157R\xab\xe5\xa5x\xdb(\x84\x008\xa3\xc8\xa8\xf3E\xc5\xe9\xc4\\}Y\x93\xacZ\x935\x0c\x82A\x89\x07\x14\xc4Q\"\xa4J\x81\xbc|\xe8\x88\x8fN^c\xc3\xc7\xec\x0cv\xa3\xb2\xf0\xdb\xb6\x19csY\xce\x81ld\xc5\x8b\xbc\xe1 \x95\x85\x0c\xd9X\xd8\x90SK\xea\xd8\xfc\\[\x9e\xdd\xb9hd\xeb\x19\xe3\x88\xf9\xd9\x93v\xfe\xe4h\x86\x938\x94N\x16\xe5h\x16\xa1LJ\x1b\x97R\n\xb6\xb3\xea\xc6Z+\x8cQi\xe3T\x86\xb7\x97\x8fW\xe9`V\x86g`\xb0+\xc3\xe9)~~\xa5\x87\xa5b\xe3X\x8e\xa9\x8d\x0e\x95qT]\x1cW\x15G\xd9\x96\xe3#\x03\x92\xcf\xbb\xcb\xc1\xb9\xf4*\x87n\xde\xa5O\xaf\xf6\x90\x12\xbd\xba\xb5\xaf\xc9 \xb9\x8e\x0b\x83\xe7>\xdd7\x84\x85\xe9\xaf.$/\x133\xa8\xea\x90B\x1a\x00R\x00\x1f3\xb0- \x05q2'H\xf4\xa9\xda\xc34\x95\x99\xe9o\x9c)\xdc\xcc9\xec\xcc\xf0\x1a\xcebh\xba\x87?[\x14\xbd\x1c\xcd\xd8,\xcd\x11\x9efhCD\xe6j\x06\xb05G\xf8\x9a!\x85^\xc0\xd9tHs\xb36\xfd\xe5 \xdd\x1a\xe9\x18s\xd3\xbb+\x9a\xec\xcd\xf0\xfd| \x83\xd3\xcd\xe1\x9c\xadQ.er\xba\xb8\x9cOQ\xa0\x00F\xa7\xc9\xe9\x1c\xddV|\x067;\xb3\xd3\xbb\xbe\xfbF)\x8a\xcf\xef\xf41\xad!H\xd2U\xdd\x8c\xda\xc8\x9c\xda\xd8\xac\xda\xe9\xbc\xda\xf1~\x8c\xc6\xad\x1da\xd7\xce\xe5\xd7\x1aeW\x19\xa3.\xa6i_\xa1\xf0\x88\xba\x03~\xdf\xfc\xf0\xba\x08\xbde\xdae\xc6m\x82\xfb\xaa\xa1\xe8\xfe\xdb\xd5\xef\xfe\xb0z8\x84\xd3$\xc4v\x05\x12K\xff\x95u\x93JAyEJAy-Ay\x8d\x1a[k\xeb\xa8\xa9\xa8ex\xa5\xf8\x97\xf6!c\xe1\xa7\x87Q\xdf/\x1f\x9a7\x8f\xb0\x7f\x08Q\xe7g\xc7\xa3T\xf8\x0f\xd5\x9a\x9cv\x9c\x1fc\xd2\x98\x13\x06\x94\x8bC\xbd\xdeB\xe7\xe8\xce\x81\x8a\x1e\xd2\xe4\xdbR\xa1\xb0N\x98\x98;3\xfa,\xe4\xc6\x1e\xc8\x16a\xe29\xbf\x83\xfd&Q\x0fk\xcehl\x00\xdb\"\xf1\xbfB\x17\xa7?~\xbc\xfe\xf0\xe9\xed\xc9\xf5\xd5\xc7\x8b\xb3\x93\xe3\xd3w\xa7'\xfa\xdd\x04\xea[oO\xcfO\x8e\xf5\x10\xfa\xea\x0b\x97'\xff~yu\xa4\x07\xce7E\\\x1f]\xfd\xfb\xc8K\xefO~<:\xfe\xd3\xf5\xd1\x87\xd3\x8f\x9f\xae\xf99\xdd\xfd\xee\xc9\xe9\xd9\xf5w\xff\xe3\xbb\xc1\x1b]\x84~\x7f\x05\xc7\xd5\x95\x8b|[\xb21\xa4\xf7\xbc\xd2'\x80'\xd2\x06U_J\xd4\x90\xac\xads\xaa\x9f:\xb6-\xae\x99>`\xdb\x9b9\x89\x87u\x8f\xc2^\xc9\xaa\xb2\xc9\xd7\xa4f\xfb\x1d\xaa\xc96oh\xfd\xc8-jE\x81\xc0\x9c\xc1\xca\xc0\x0b`p$\xc5 \xf2\x98O\x06D\xb2\xaayl(\xd9\xad\xd0\xd1~\xdf\x88E\x91\n\xd6\x08\xac\xcb\x12\x053i(k!\x13\x18\x8d\xbc\xf0E\xfe\x99\xa8\"\x85EC\xf9\xc6FW%eV\xb55\xdeBq\xaa=)Y+\xefXm\xcf\xce\x11\xde2\xa5\x89\n\x98\x7f\xc1\xf5\xba\xd1\xf8H\xe3]s\xb4\xcb\xcb\n\xce3\xca\xecF5\xd9U\xf7p\xf7\x08\x00Kl\x0e\x8c\x0e\x1b\xb1!\x1e\x9a?)\x03F\xaa\x16P(\xd6\x90'\xa7g\x88\xbf#\xfbJ\xddF\xf4v|\xfbo+tN6\x87\x883t\x0e_\xbf&\xf9\xbeY\x11\xaew\xb7\xbbUUo_\x9f\x9c\x9e]\xb0\x9f_\xb1\xcdY\xef\x88c9\x1d\x0e,\xa5\xcc\x1b\xb1\xe7\xc1\x06\xc8\x9at\xb0\x8e\xebK\x0e\xaes\\R\xc3\x00p\xdbv\xcc\xa6\x8e\xee\xc3\x0f\xcf\xa0S\xbe\xfd7\x05O\\\xa1\xcb\n\x91\x92\xaf\x0f'\xa7g\xac\xcc\xba\xd1\xfa\xb1j9\xa3\xcc\xb2\xd5\xb0\x13N\x8f+\xdc\\>\x1cW\xe5&\xdf\xde\xc0\xea\xc4A\x87R\xa7\x1c\x99\xd6\xe1\x1bY\xc9\x9fp\xb9.H}#\xbb\x85\x95\x06H\xae\xac\xd0;\xccJ\x9d\xe5k\xbe\x0d\x02\xd0(\xd6\x13]\xa2\xf8V\x1f;A\xb3\x02.\xcd`i\xd7\x164\xefu\xc7@\x7fO\xa9y\xaf>\xb0\xcf{\xdfO\xa9\xe2\xb2_\x87ZU \x94u\xfe\xa4\xc9\xb7\xaaz;P\xd2\xa4d\x8d\x16\xa4+\xca\x9d\x82^\xd5\x0e\xd1\xe3G\x06(x\xf0\xc1\xe16\xa7\xdc\xdel\x1c\x1d\xe4\x03e\xf2\xc1\x1a\xc0\xaf\x87d\xdb\xa4\xe8\x9e\xaet\xb8\xdf\xe4za\xe1\xc7\n\xf2@k|}\x9b\xd3\xe6\xba\xa1Um\x8f\xd5<\xe5\x86\x0bR\x18\xd6r\xefAy`=p\xeb\xd8\xc7l\x81\xcc\xe8\x9b\x9c\x1e\xf16\xca\xedS\x85u&\xf7>\xed\xec\x00\xacY\xc1\xc0?\xd0\xb6\xb82\xcd\xce\xc0b?#e\xd3\xd6\xa4cPsEsM\xd6`\x8a\xa2\xf83i\x80|\xbc\xcb\xcb|\x87\x0b\x84\xb9\xdb\x82\"p8M\xa1\x10\x00\xe1s\x98\x0b\x04\xe6\xe5\xd6Z\n\xb6\xf4\xd0;\xa6x\xa0\x06o$\xdfR,I%%\xe5Z\x10.\xb3\xaa\x14\n\x02j\x81\xc4\x06\x82\xd8X\xe6\x1b\xe3TW\xe7\x89\x93\xd4\x98\x9e\x03\xf3N_\ny(\xcd\xaa\x1aN\xeak9\xe3\x9a\xfel\n[\xbe\xf8S\x0ejE\x9c\x04\xdf\xd9qAZe\xf5 \xba\xe7\x17\xaa\xf2)\xf2\x8dR,>%e!\xe0\x94\xcc\x16\x02\xae\x07\xd8>\x1e\x9f\xe0\x17\xcaY?`\x86\x0f\x8f\xeb\x8b\x8e\xea\xd6\xe9\xa3\x1f\xd1\xfd\xc7\xf3\xd1\xa3\xf9\xf8\xb1\xdc{$\x0f=\x8e\x8f\x1d\xc5\x03\x8f\xe1\xee\xe5a\xee\xf1\xdby\xe0\x8ez\xd8^t\xd06\x8f\xd6q\x8f\xd5Q\x8f\xd4q\x8f\xd3\xb3\x8f\xd2_\xe9\x18m=B?\xfd\xf1y\xca\xd1\xf9\xa9\x8f\xcdQ\x8e\xcc\xee\xe3\xf2\xe2\xa3\xf2\x13\x1e\x93\x97\x1e\x91\xf9\xa1X\x91\xa7\x1d\x8f\xa3\x1e\x8d\xcdc\xf1\xa4#\xb1\xff8\xfc\xf5\x8f\xc2\xb3\x8f\xc1_\xf1\x08\xbc\xe8\xf8\xbb\xe8\xe8k=\xec.=\xe8\xb2\xa3\xad:`\xb5Cn\x94\x03n\xdc\xc3m\xc0\xc1v\xf4P\xabk\xb9\xa0 \xba\x14\xcb\x81\x0e'W\xa9\x0e\xed\x16\xdd4tqa\xbb)\x9b\x9b\xdd|\xa4\n\x0d\xb5AM\x9b\xdd\xb1\xcf\x8a*\xc3\x05\x8c=\xcb\xe2\xad\xfayA\x15\xad\xfa\xec\xa7zM\xea7\x8f\xaa\x1e\xabh\x96\xaaV\xf9\n}:\x7f{r~\xfd\xe6O\x16=Lyxtql\xfe\xf8\xf6D\xfc\xdaiuNav\x85\xce\x9e\xbb]\x8cc\xef\xaej\xdak\xcc\x15\xab\xf7\n\x89\xea\xcbbq\x02\xce\xd1\xc514\x1f\xdbN\xb0\x82\xb6\x0f+y8\xf8\xab\x07\xee\x9b\x8c\xc0\xc9\x86ga\xf9\x96\xb5\xc5\xe1\xf0\xcf\xeekVy\xe3s1\xe0\x94\xb2\xf2w\xf9\x12\x04\x95\xea^6;\xf8\x82\x0f\xbcI0&\x1c\x81\x86\xa8\xff\x04\x13\x02\xb5z\xd0;\x0f\xfd\xe3\x18ZD\x7fy\xb7\xa7|<\x1f\xf9h\xde\xf1N\xbfx:\xdf#>\x96/\xfc\xb8\x17\xfc,\xff\xf7\xd9\x9e\xef\xbc\xbe\xba\x85\xd9\xe9\xf3>\xdb\xdb\x1d\xd4\x0dM\x9a\xc3\xcf}\x89\x87;7(\xe9\xb5\xb18a\xcc\xf1jw{\xb0/\xf4]\x0f\xf2Z\x0f\xf7P_\xe0\x9b\xbe\xc0+\xdd\xb2`D\xf4=\x8f\xebu\x1e\xcd\xdf\xdc\xefi\x1e\xcd\xc7\xdc\xe5]\xbe\xc4\xaf\xdcJ\x7f\xa4!\xde\xe3s\xfd\xc6\x9d>\xe23\xbd\xc3-\xe4\xebi\xd6q\xe4\xddAg\xfa\x7f\xf7\xbe\xde\xb6\xf6\xfd\xc6\x9f\xf72oo\xf0\xeeV\xc4\x99~\xde\x11<\xbc\x97\xf9vk\xa3\\\xdf\x0c\x17\xfas\x8b\x86\x1e\x9c\\\x16xn\x8f\xba%;\xbc\xb5\xbd~\xda\xa6\xcbf\xb8o\xb6\xf9\xed\xdfmu\x9d\xe5\x89\x1dRY\x9f\xf7\xb5\xbbn^\x8f\xeb \xbe\xd6C\xb7\xb4\x85\xfe\xd5\xa3\x9e\xd5n\x9f\xea1ojk+\x84zP\xfb|\xa7u\xaf\xe9\x05\xfe\xd2\x01\x9e\xd2\xd3}\xa4-\x1e\xc9>\xbf\xe8H\x1e\xd1\x96\x9c\x07#e\x91\xff\xb3\xee\xef\xbc\xc4\xd3\xd9\xe2\xd9\xbc\xc8\xa7Y\xf7a\x8e\xe9\xbd\xec\xf4[\xd6\x9d9u_\xe58^\xca\xd1\xfc\x93\xe3z&\x87\xf9${\xbd\x91\x03\xfd\x90C<\x90\x0dW]3\xb7P_\xd2q\x7f\xe3@O\xe3\x00\x1f\xe3A\x91c\xfa\x15/\xf2(6=\x88\xe3\xf9\x0e\xc7\xf3\x1a\x9e\xdf\xbb^Oa\x9f\x8f\xb0\\\xbe;\x92\xc2l\xa6R \xc2C;\xa2\x1d\x07B\xb2=$\xb3I\x11\xd6\xbbJ)\x98\xae\x85\x03\xf1\x99<>\x97\x96\x91\x86\xfc\xb5%\xa5\x1a\xbc\xddz\xccp\xf8o\xb8\x95|)\xb7c1\xc8\xbf\xe5Q\"\xe3\x1e(\x07b\xc0\x0dj?X\x9a;_\x90\x8c{,S-\x80?\xb4\n\xdf\xdd0\xda\xe6\xf7\x84\x8f\xd1\x9a4\x8d4\xa9\xb3\x03\x98\"p\xe8\x15\xb9\xaf\xb9\xc3\x1c\x9b8\x05~\x04\x17\xcb\xcf\xe2 fw3\xe9\xcd\xa6Z\x97\xf5\xfc\x10\xdeEN\xe2\x18\xad\xf6\xaf\nrO$)~\x8c5v\x91\xef\xda\x02S\xe9\xb5\x13l\xa8U\x83\x9e\x06\x8eW\xe7M\n\x83\xf1J\x1fd\x87\xaa\x97\x02\xb0\xe1&Jj\xf7@[\xa1\x0bR\xae9\xfaL\x1f\x04\x00\xad9\x9f\xd1\x87k\xfe{\xe0@t3\xc1\xb4\xf2^\x8b\xdc\xc4\xee\xcbJ\xa0\x86\x8aU\xde\xb5b;\xff<:\x14\x06\xbd\xd3{\x1b\xc1\x9f\xd4\xe6l$\xbf\x11\"|\x9eF}\x16\x13o\xdc\xd8\xe2F[\xb7\x06u\x90\x8fe\x99U\xbfa|[\xb5\x94\x07\xd8\xe5\xb6\x0b\xa1h\x89\x0e\x1e\xc4\xd75\xcaa/\x0b\x1a T\xec5jX|\xe3\xc6\xcd\x1a?\xe2\xe6g\x9eQ\x07\xbc\xe1\x87|\xd7\xeeP[rB\xcf\x06}\xa9\xea\xcf\xe8\x8b\xb0\x00\x82 \x8b>\x98n\x83{R\xb3B\xac\xb4Z\x98\xb1\x8d\x17\xd7\xe1G\xdc\\5}\x81\xf1 \xca1\xce(\xd8\xbbe\xb8cY 0T::\x18\x1e\xf6C\x92\xff\xd5m$\x8b\xba\xd2\xbc\x1e\xc3\xdb\x00\x13-So1\xc5@\xda|\x04NeMh[\x97\xd2\x0fZj\x13\xdc\xfe\xcaq_%d9:\xd5\x11\x93\x0fW\x17\x97\x16\xc3\\A\xca-\xbdc;\xc0&\x7f\x80q\xce\xc12\xbe\x9a\x91=\xae1%\x90;d\xca6P\xa6\xd0\xd8\xa3\x0ev\x05h\x8c\xc3\xb7\xba\x0c^\x023\x8a\xe9\xe6\x1c@b\n\xda\xbe\xda\xf39\xbe>\xe0\x98;+\x10\xa9\xf9M\x17\xd2oQ\x13(VN=\x9f[\x92a\x0e]\x00\xa1c\xa8\xee\x7fh\xb6C7H\xa6\xfa+\x02\x8c{/\x9c}:\xdeu\xef\xab\xed0c\xeeQ\xad\xac.\x8e\x1et5\xa7Z\xc6t\xd5\xdeh\x15 \xf9\x83\x88\xa4\xab\xf6\x944>\x9ae\x9a\x150$]\xb57\x90\xf4k\xb8jo\xc65\x1a\xe2\xc2\x0cM\x9e\xdc\x04\xb4\x9f\xad;\x92\xf2\x8e\xba\xa8\xffB\x0bY\xba\xc2 ]a`\x95\x96\xae0@\xe9\n\x03{>\x0bi RH\x00\x19\xc4\xfae0A\x04\xd2\x02\x9a\x08\xa4\x05d\x11\xd7Dw\x145\x1a\x8d\x04R\\2 \xa4h\x94\x12H~b \xa4h\xf4\x12H\xe9\n\x83t\x85\x01\xd8V\xd2\x15\x06JZFs1\xc4\xd1t\x85\x81\x9f\x1a\x03\xc9\x17\xbc\xdfO\x93\x81\x94\xae0\x98F\xab\x81\x94\xae0\xe0\xc9G\xc3\x81\x94\xae0\xa0\x0b\x08;\x90\xd2\x15\x06\x13\xe9>f\x91\xd3\x15\x061(B\x90\xe2\x12\x85 \x85\xd1\x85 yIC\x90\x02\xa9C\x83\x97\xd3\x15\x06<\xc5\xa4\x1aAZD82\xa4\xa5+\x0cb_a0~B\x19X\x9eMhPZ\xad\xfbW\xf8@as\x9a\x1b\"4iG\xe5\xe3\xb48h>\x02E@\xbcV\xf9\x8dF\xa4\xf01(.\xf3}0i\x02\x80w\x9d\x81\xe2 \x8ac\xc8\x85\xe4\xb2\xc3\xafIY\x191S\x9d'e\xbdD\xa3\xaf\xbbi0\x08\x1dW\xb9\x1aC\x9aV\x9fI)\xf6\x07(\x92\x0c)\xcdV\x03vz\xe5\x19k\x8a\xdf\xc7O\x97'\x87|_\x13\x14\x85\x0e\xc9\xc6%:-\xa9\x98\xb6\x9d\x0da0w\xa1\x93\x06\xf2\x9a|[b\xda\xd6\xa4\x91\x01\x0c\xb8\x8e\xb3\xad\xb6\x15\x9f+\n=\x01\xb8s\"[\x83'\xc1\xf7\xa9|\xff\x8d|y\xbf'\xb5\xde\x8dZs\xc9\xd0\xc3\xfc\xddN\"P\xc74\x92\x1a\xda\xe3G\xbe\x0f k\x8b\xcc\xc9\xde\xde\x97\xf9\xbe\xe3H\xe5\xfb\xdev\xb4#\x14\xbf\xd2\xa2&\xc0\x17\xceycci\x05\x0f\xe6\xdbjm \x1bV\xad\xbbX\xda\"\xce;7\x9dq\x93\xb8\xd2\x96}1\xb5V\x0cb\x88\xc8\x90\xf1 \xe1\xa2 \xe1J\x08WB\xb8\x12\xc2\x95\x10\xae\x84p\x0dSB\xb8\x12\xc2\xe5\xd78\x12\xc2\x95\x10\xaeAJ\x08\x97H \xe1J\x08WB\xb8\x82rN\x08WB\xb8\xba\x94\x10\xae\x84pi)\x14\xbdH\x08WB\xb8|c\xe4\x97C\xb8\x84\xd1\x19\xbcs\xe4U\x9c\xdd\xaf`\x0b\x00\xaf\x0c\xf0\xc4#\x1d\xe8\xa0I\xea/\x1b\xd0\x9b\x08\xaey\xedd\x02\x9e\xc2\xfbG\xf8\xa9\xb3\x91\x06^\x84\xd5\x86\xdfp!n\x89\xd5\xe4\x1c\xb5\xf4\x8e\x07\x070.\x1fRb3\xc3\xc5\xb0\x97\x0f\xcf\x1b\x05(Y\xa1\x13\x9c\xdd\xf5p\x89\x0c\n \x80\x0b\xe3\xe6,\xcc\x07\xa9\xe9\xe1C\xbb\xebJ\xd9\xde\xc5\xf7-6o\xf9\x85\xde(\xa7\xa8\xca\xb2\xb66}\x19\xdfp7\xd4{R\xca\x19\"\xbf\xd3\x0b\xf4B\x9a>\xbb\x9bk\xf9{\xf6>3,$<`\xf1\x86\xd45\x18\xa4\xb0\x04,\xf2\x1d?m\xf6\x81\x10\xf6\xf8\x11\x9em\x88\x0e\x14\xca\xf4\xe5\xae*\xcc\x9b\xdcT\x1f\xf0\xfe\xe7\x1d\xd9U6\xd0b\xb2\x1b$\x13$=X\xfbcrYQ\xf2:\xabv\xdc\xcc\x0e\x03R\xf6\x0f\xd2`\x17\xa3\xe5\x7f>:\xffx\xfa\xf1\xc7C\xb68dE\x0e\xb7\xfc2\xf1\x10w\xa0xD\xe4AD\x13'\x0fT\x9a\xc3\xcb\x8a\x9a\x97\xb9e\xb8(\xf8\x82\xb9\xab\xac\xd7\x1b)\x97\x18\xc0\x9b7\xac\xe07\xd2\xef\x14\xbdh\x88.RF\xac\xde\xe6\xf4\xae\xbd\xe5K\x02\x80W\xaf{T\xebu\xde4-i^\xff\x8f\xef\xbe\xff\xfe\xa5\xda\xeal\xccU-\xbd\x86{\xe7\x03\xdb\xdf\x7fw\xaaq\x99\xac\xc8G\xe2_\xfc2|y\xd9=\xe8f\xb0(\x83G\xb8\x12\xdf\x80/\xfae\xa5\x8f\xde\xdb\x0eC\x03\xcd\x95/\xe3wx0\xdb\xc9\x03%e\x93W\xe55\x18\xc3\x13&\x960\xb1\x84\x89%L,ab \x13K\x98\x98\x9e\x12&\x9601\xbf\xc6\x910\xb1\x84\x89\x0dR\xc2\xc4DJ\x98X\xc2\xc4\x12&\x16\x94s\xc2\xc4\x12&\xd6\xa5\x84\x89%LLK\xa1xG\xc2\xc4\x12&\xe6\x1b#O\x88\x89 [\xb7q61\xec\xce`\xd0\xe8N'\xf2W\xde\x9f\x19.{,\xe2V\xd7\xbb\xb9I\xdb\x00\xaa\xbe\xdc\x91R,Gpw\x80\x9a\x0f\\\xb1*oU_\xb1q\xc9\x14 X\xc0\x1a\xc2o\x15\x1e\x8as\xd8L\xd9(\xcdp\xf9\x9c\x9f\xf7\xc0Im\x0d\xb0\x93a\x9f\xe7\xd7y\xc2\x15\xbb\x8a\x90\xb2*\xaf\xb3:\xa7y\x86\x8b\xebd\x8cO\xc6\xf8AJ\xc6\xf8d\x8cO\xc6\xf8d\x8cO\xc6xKJ\xc6\xf8d\x8c\xf7k\x1c\xc9\x18\x9f\x8c\xf1\x83\x94\x8c\xf1\"%c|2\xc6'c|P\xce\xc9\x18\x9f\x8c\xf1]J\xc6\xf8d\x8c\xd7R\xa8\xa15\x19\xe3\x931\xde7F\x921>\xba1\xfe\xb1\x1bu\xf9\xb6\xacT\x87\x9a\xc1\x99\xed\xf2\xe1\x8d\x12~\x8a\x87\xa2\xe2\x17#\x0e\xae\x12dM\x80\x8b\xa2s\xc2a\xff\xa2\xea\x9et\x86\"\xdc\xd2\xbbyWrv^7\xdd\x876O\x81N~\x17\x14\xac\xa5wU\x9d\xff\x0d\xe6WM\xf8]]#\x11\xb3\xd4\x11%\x0f\xef`b\x84*\x1dH\x07\x96]\xc5\x8ey\xacU7\x9dCE\xef\xe93+\x0c\x9dq\xd2\xf7\xdf\x978\xbc\xb6\xb3\x8f\xc86p\xa3R~\x17\xa6N\x9a\xdd\x89\x1dS\\\xa4\xd6\xb9>)\xe2\x86\x1eT\xbd\xd7\xd3\xd0\xcd\x89V\xe2*\xbe\xac*K\x92Q\xb6\\u\x19\xf2\xb8i\xeauE\x8a\xc0\"\xff<\xd0\x1f\xc6\xae\xe0d\x8a[\xd5\xf0\xb1\x01#I\x1b\x9a\xb2\xb7\x1b\x8a\xcb5\xae\x85Z\xd4\x99\x9dn\xeb\n\xaf3\xdc\xf0\xc2\x0d\xa3\xb8\xd9\xe3\xb4\xbd\xe9\xc2\xafQ\x7f\xac6\xe9Q6\xab\xcf\x83C\x0fR\x07\xf64b$\xf2\xd9\\\xa2\xe2McXSL\x9c)\"\xc64\x82/-\xc2\x96\xe2\xe1J>Li&\x9e4\x1bK\x02\xfb\xb5\xa5\xb5\x9c8\xd2l\x0c T\x18C\x9e\x13?Z\x82\x1d\xa1vo\xc8s\xe1Fs0\xa31|h16\x14\x84\x0bM\xc1\x80\x16\xe1?\x0b\xb0\x1f\xeb\xb2\x12\x15\xe3\x89\x8d\xefD\xc4vBp\x9d\x88\x98\x8e\x1b\xcf\x89\x8a\xe5\xd8q\x1c\x8b\x8ao[\xa5\xe6\xe27\x80\xd5\x18\xe2l\xd8\xcdl\xdc\xc6\x8a\xd9\x8cl\xc5#X\x8do\x97\x8e\x85\xd1\xb8\xf1\x99\xb1\x12,\xc3e\x00\x87\x19\x08\xb4a2Q\xf0\x98eX\x8c1K\xcc\x0d7&\x06C-\xf8\xcb2\xec\xc5\x03-81\x97\x00\xbc\xc5f|\x9d\x82\xb3\xd8\xbe\xff\xbb\xbd\xee3\xb1\x95\xb0\xca\xfb1\x95\xb1\x9a\x06`)\x93p\x14\xdd\xe8\xb4\x18?\xf1`'c\xb8\xc98f\xe2h\x95p\xac\xc4\x8f\x93\x98\x18\xc9\"|$\x08\x1b\x99\x83\x8bXq\x08?\x1e\x12\x0d\x0b\xb1\xe6\xaf\x8d\xa4E\xf8\x87\x89w,\xc1:\xac\xd8\xc6\"\\\xc3\xc41\xe2b\x18#\xf8\x85i\xd65q\x8bX\x98ED\xbc\"6V\x11\x8aS\x04`\x14\xc1\xf8D\x186a1\xe3\xdbr\x0d\xb55\xfb\xf0\x88`,\"\x08\x87\xd0\n\x1f\x17\x7fX\x84=\xd8\xb0\x86\x988CL\x8caI\x7f\x07`\x0b~\\\xa1_\xfc\xddZ\xb54\x18\xce\x08v\xe5\x08o5;\xb4\x95#\x98U\xcc@V\xb6 Vtz\x00\xab\x88\xc1\xabD;\x0dN\xd8\x8b\x82V\x99a\xaa,!\xaa\x86\xe1\xa9\xacg\xc5\xb1!\x133$\xd5\x92pT\"\xac\x94V\xb6A(\xaa\x19a\xa8f\x87\xa0r\x85\x9f\xb2\xb6\xaf#\xec\x94\x0dH\x8a\x19n\xca\x17jj\xc4\xb3\x85&$a\x90\x12\x92\x90\x90\x84\x84$$$!! IHH\x82\xf6\xc8\xb7K'$\x81&$!! IHHBB\x12\x12\x92\x90\x90\x84\x84$$$!! \xbfz$\xc1\xe6\x99\xb0\xc4+\xc1\xe2\x87\x10\xd1\x07\xc1b [\x14\x08(4\x08\x10M\xa6\xd2AJ\xa6\xd2d*M\xa6\xd2d*M\xa6\xd2d*M\xa6R\xed\x91o\x97N\xa6\xd2d*M\xa6\xd2d*M\xa6\xd2d*M\xa6\xd2d*M\xa6\xd2d*M\xa6\xd2d*\xfd\xe5L\xa5\xf60-\x91C\xb4PR\xaeI\xbd\xcbK\xba\xc2\xb7Y\xbe:\xb9'%\x0d\x0e\x84\xc1_\xe9\xbb\xc2<\x98aJ\xeb\xfc\xb6\xa5O\x1d+\xe33y\x8cqL\x8cv\xde\xcc\xcb5y\xb0\x0b\xba\xad\xaa\x82`5.\xca\xa0Ky\x07\x1c\xc9f\x03\x87\x81&/\xb7\x05a\x95|\x05\xbb\xda\x1e\xe7\xf5\x01\xc2MSe9?\x07\x89- \x11\xf6\xb5%`J7=\xb8x\xb0\x155\x08\xf76$\xb4&\xf7\xa4`\x8d\x0b\x01^(\xc5\xd9\x9d\xba\xa9)!]\x14j\xff9i\xf6U\xd9\x907d\x9b\x97o\x8a*\xfb|\xd0\xfdvR\xae\xb5_\x8e\xefH\xf6\xf9\xf2\x81\x0dy\xed\xfb\xb7\xa4\xc8\xefI}\xf9\xd0\xe9\xa7\xef1%\xf5\xc1 v\x0b\xda\xe1G6\x1d\xfe\xda\x92\x9a)/m\xc3\xa3\xbb\xf0i\xc6+\xde8Gt\xd7\xa0\xc1C{0\xa2\xacC\xc0\xd2\xf9\xda\xf8 \xfdL\x1b-\xe68y\x8a\x11\"\xa2\xe0\xb4\xfbm\x8d\xd7\xa4\x0b\x85\xf3\xa1Z\xb7\x05\xf9#\x18\xd6\x82[\x8bi\x0b\x9ez\x8b\x85Z5\xef\xe3\xfd\x1e\xedx~\xb2\xfd\xd4l\x9d\x92\xc6I\xfd\x19\x1bOe\xd36R\x9a#\xb7A\x9bv\x9e\x00\x83\xeaw\xc6\x1c\xd6\xc4\xf0\xa90\xd35f6\xdd\xc8\xbd\xc8\xcb\x8c\x97C\xba1\xa0oW\xbf\xfbgw\x8b\x9f\x158jC\xbb\xedL\x17\x84\xc2N\xc1;A\xba\xb2\xc8\xf2\x00L\xc4\x1f\xc9\x8d\xa7U\xfc\x17\xc4k\x03\x0dEk\xe1\xa6\xda\xd0/lSd+\xc8~_\x809\x807\".\xd0\xb3\xaa|%\x84\xde\x12Rr0D\x1c\xa8d\x86\x07(\xa7\xbc\xdd\x15qC[\xaa\xc0&:\x18\xa8/k\xde\xa0\xaa\xa5\xaf\xaa\xcd\xab5\xa6\xa4\xd7Wdq.s6\xe7\xd4H_?\x81_K>\xd0sj\x82\xb3;\xa6\x91\x8aSe'\x9f\x0f\x07\xf2\x90S\xd5\x07'p\x92\xb2\x12\xbdb\xef\x07\x8c\xcf\xb7LU\xce\xd8ru\x08e\x06\xccBT\xa3\x01l\x827\xe0\xba{s\xa5\xbci\xe9\x89\xa2\xda\xe6\x99Z\xc9\xae\x0fj\xb2\xab\xee\xc9\xbaw\x1a\xbbx\xfbo\x03\xeb\x08?\x1b\xe4\x8d8\xce \xbb<7\x81\x1ft\xc8L7S\xe8]]}\xe9<\xbf&\xf9&\x0dW1\xfb\xb2\x84\xc4\xa1W\xfa#\xd1\xce\x19\xa9\xef\xe5\x9d\xb0`\xefI\xcdD\x93\xb5j\xc3\xf8$\xac\x00k\x94o\xa0\xc5D\x85\x1a\xd2\xf5\xea0J\xdf\xd8\">(\x177\xfb)\x9aDg\xd4\xef&f\xb9\xa9\x04\xcc\x93\x97Y\xd1\xae9\x0e\xf5J\xbf{\xbfi\x99\xc6\xd1\xf0iF\xf9\x02\x91S\x18\xec\xdc\"\x8fiU\xb3e\xb7-\xd6\x08\xb7\xb4b\xba\x08\x04\xea\x93\xf9P9\xd9\xe5Ru\x0d\xaen\xd7\x0d\xc5\xd4\x18\xaf\x9ani\xd7,\xa9\x95\x0e\xe0\xd4\x08\xc7A\x86\x88D\x007\x0d \x1e \x1a\x05\xc0I\x00\xb0Y\xa4\x02\xe1\xffX\xe0\xff8\xf4?\x0b\xf8\x8f\x0b\xfb;A\xff\xb8\x90\xbf\x03\xf0_\x08\xf7\x1b\xcdM-`\x7f\\\xa8\x7f!\xd0\x1f\x19\xe6_\x00\xf2\xc7\x86\xf8\xa3\x01\xfcq\xe1\xfdh\xe0\xbe\x1f\xda\x8f\x06\xec\xbb`\xfd%\xa0\xbe\x15\xc4\xb7X\xd2\xcc\xf5f\x19\x80o\x01\xecg\xc2\xf5\x16\xe3\x89s\xa3t\x1aN\xc6w\xd0\x99 }\x0f\xca\xdb\xda\xf7\x1b\x7f\xde\x91\xe1y\x13\x9c\x8f\x00\xcdG\x05\xe6\xf5\xcdp!(/\x1aZ\x95\xb8\x04\x86\x1f\xc5\xa1\x1d\x10\xbc\x17\x8071\xbfp\xf0\xdd\xfc\xf6\xef\xb6\xba\xce\x82\xddC*\xeb\x83\xdc\xddu\xf3\xc2\xed\x13\xc0\xf6!\xb6\xb2\x10h\x1f\x85\xd9\xdd \xfb\x18\xc4nm\x85Px\xdd\x07\xae\xeb\xd0\xfa\x02`=\x00V\x9f\x0e\xaa[ m\x1f\xa0\x1e N\xb7\xe4<\x18)Q\x81\xf4\xc80zT\x10=&\x84\xee\x04\xd0uTR\x07\xcf\xe3@\xe7\xd1\x80\xf3\xb8\xb0y\x18h\xee\x85\xcc\x03\x01\xf3\x10\xb8\xdc\x00\xcb\xcd\xdcB\x81\xd3q\xa0<\x10&\x0f\x00\xc9\x07E\x8e \x90G\x86\xc7\xe3\x81\xe3\xf1\xa0\xf1\xf9\xbd\xeb\x85\xc5}\xa08,\xdfv\x1d\xf6\xac\xc0*\x98\xa1by\xf8\xb6j)\xc2h_\xe0\xb2\xec\x8d\xad\xbc7\xb9!9\x97\xa1\x9d\x84,\x1e\xa9k\x04@\xfa\xbf[R?\x1e\x81!\x9e\xe5+!\xbe`\x88#\x96\xf1\xf4N\xda\xb8\xc1\xcc2\x88\xe7\xa4\xdaOY\xcd\xd1\x17\xdc\xa3\x07#\x0d\xe9\xaa\x9c\xcc\xa5\x96\x7f\xf3\xf9!\x11\x16\xfe\xd5k\xe53!\xed\xfc\xecX\x0e \xd8h\xbc\xcd\nw\x9b\xd0\xc7\xc9\x8d*\x02\xb5\x8d\xb4\xea\xa0\xc2\xcf\xad \xd6\x1f\xe0*\x16a\x04\xb6\x97\xc8\xdd\x12\xa2\x15\xe4\x07\x9e\xaa\x1e\xc3a|\xd6\x08\xdaw\x88\x9aQ1\xde\xd9\xb9\\(x\x16\xdd\x90g\xcfVZ\x03\x05Y\x89\x87\xa0\x1c\x9ao!^\x02\xd0i\xa2lp\x1d\x8a\x0d\xd9!+l\x87\x96Cw\x9a4\\4\x95\x01\xdf\xa1\x08\x10\x9e&\xce\x00\xf4\xd0rPO\x93&zN\xcf$&\xb8\x87\\\x00\x1f\x9a\x04\xf2!\x03\xe8C!&\x1d\x13\xf0C\xdeq\x1f\x11\xf8Cc\xe0\x1f\x9a\x04\x00\xa2e \xb2\xece(\xa4\x05\x87{\x1a\x1a\x05\x05\xd1R`\x10\x05\x82\x83\xc8\x00\x08\xd1X]\\w\xab-\x03\x0b5aK\x11Cc1Q~\xf0`\x88\xc8\xb5C\xa0\x11\x96\x9a\x0bODc-\x89\xbc\xb3\x07\xc5\xc5\x16\x91\xc7\xcd8&\xc6\x88b\xe2\x8ch\xdc\xd9x\x11\xde\x88\"b\x8e\xc8\x8b;\xa2\xb9\xd8#Z\x82?\xdaZ\xecq/\xef\x90\xb3;\x1e/\xc0!-\xb2`\xedr:\x1f/\xc3#-\xe2\xda\xbd\xd3\x0196.\x89\x96c\x93(>>\x89\x96a\x94h\x19Ni\x9f\xa2\xd6BFC/Qt\x04\x13\xc5D1Q\x10\x92\x89b\xa2\x99h\xd4Qy\x19\xaai\x9b\xe3Vg\xe5@\xac\x13-\xc6;-\x02m.\xcb\xb3QP\xe4\xa2\x91{\xb6\xf8\x11\xd7\xe5\x90\xfd\x7f&2j[\xf6\x9c\x0e\xcc\xber,CI5a\x1c3\xb5\xba1GAKQl\xc4\x14Y\x9d\x99\x17#\xa7\x9a4jqh^\x86\xa5\"\x1f\xc4\x88\xc6\xdc\x9a\x03pU\xe4\xbc\xcc?\x1c_u\xcb0\xec\xeb\x8b\xb0V4\xa11|\x98+\xf2\xd6\xdb\x8b\xbd\xa2i\xf8+\xb2:\xe7-\xc4a\x91\x0f\x8bE\x1e\xa7g\x9f\xdb\xf3H+\x85b\xb3(\x00\x9fEV\xf7\xe7E8-\n\xc3j\xd1,\xbc\x169\x1b\xc6\x8b\xdb\xa2x\xd8-r\x97\xc2\x18iQq\\\xb4\x10\xcb\xd5D\xd9\x1c\xa4#\xa3\xbb(2\xc2\x8b\xc6\xdd\xa4m\x8e\xd26W\xe9X\x88/\x8a\x89\xfa\xa2\xe8\xc8/\nF\x7fQ\x08\x02\x8c\xc2Q`\x14\x88\x04#\xbb\xeb\xb4\xdd\x996\x1c7\xf4\xb9O\x07#\xc3(\x0c\x1dF\xb6j\xc4D\x89\xd1R\xa4X\x93eq\xab\x8e\x89\x1d\xa3\xa8\xf81Z<\x1e\xbc82\n\xc0\x92\x91\x07Ov!t!0\xa8\xf2\x99\x906\x19\x06\x1d8\xe95\x93\xe1A\xf0\xe4\xbb\x16'\xf3'\xf6L6\xb1\xc1\xd1\x83`\x88\x97$$\xc3W\xd2+\xdb\xe17)\xbe\x9b\xe6= i\x0c\x97\x88\xe0I \xc9\xe9Oi)\xc3\xf0\n\xada?\xa3\xe1\xe5kP\x08\xb0\xc7\x08H\x8f\xe4u_\x1aE\x90\x94\xe0e\x06\xd8\x07\xe6\xe8\xacP?\x7f=\xfc\xfe\x9b~~t\x13C\xfe6\xd5\xc9\x94\xcb\xbf\x12\x98\xc6\xb1\xac\xe3\x05\xc5\x94L\x9e?=4\"\xe5\xd8=\xac\xfc\x8e\xcf\xdd\xb0\xb3\xf3\x0d\xfe\xf9\xb9\xaf\xc1\xc7k\x14\xde\xf0v9\xb6\x0e\xe8Z\x18\xb7\xf4\xeeo]\xfb\xfeX\xe3 q\x130\x90 \xfe\xc6\xd7h\xbd\xd9\x82(\x0749\xa6-\x07\x8c\x92cZ\x180\x04\x06m\xa3\x8d\x92c\xda\x14\x00h!\xf8\x13\x19\xf8Y\x00\xfa,\x00|,\x0bFDh'.\xac\x13\x0d\xd2\xf1\xc39\xd1\xa0\x9c\xe4\x98\x96\x1c\xd3&@.\xc91M4\xb4*q \x98\x12\xe2\xab\x95\x1c\xd3\x94\x94\x1c\xd3PrLK\x8ei\xc91-\x16L\x11\x0d\xa2\x88\x0bO\x84A\x13^X\"\x10\x92\x08\x81#\x92cZ/k\x11\xdc\x90\x1c\xd3\x82\x1c\xd3\xb8] \xaf\xad\x16/\x87\xa1\xd0\xf4$\xb0\xb1\xca\xd9\x0b\xbdW\xc4\xb6\xc6%\x95\xbe\x0c\xfb\xbc\x16\x8el\xa2\xf3\xf6u[r\x1f\x93\x0d*\xdb\xa2\xe0aVu\x0d\x93KP\x9bo]\x91\xa6|N\xe1|\x8a!\xbf\xbe.\xe8\x05\x1co\xb2\xaa\\\x0b+\x00\xeb\xdc\x9b\x81\x89o\xd0\xa9;\xfc(\\mh\x85\xf2RP\xd5I_|\xd8\"\xed\xb6ung\xe4N,\x0d\xda\x93z\x977`\xdb\xa6\x15\"\x0f$k\xbbS\x0b\x93&\xf6+\xe9w\xc3W9\xa5\xe4\xac&\xe3\x06\xcd#\xd3NI\xfd\xd6M^ R\x8f\xf62\xbc\xe3 \x1e\x9b\xac\xa4\xc9J\x9a\xac\xa4\xc9J\x9a\xac\xa4\xc9J\x9a\xac\xa4\xc9J\x9a\xac\xa4\xc9J\x9a\xac\xa4(YIEJV\xd2d%MV\xd2d%\xd5R\xb2\x92v)YI\xff\x0f\xb3\x92\xea\x16R\xd3\x8c\x07\xb7c\xady\xd4\x0ca,\xa5w\xe8\xb6\x02\x06\xac\x0c\x14E:\xfdOX\xea\x84<6J\x84}\xaf\xdb0\xe1\xb2\x0d\x88\x1fRrE\xb2\xc9\x1bh\x14\xfe\xfe_[R?\xc2\xdf.k#ga\xfe\x089\xf1\x7f\xa6\xb3\xbay\xa9\x9e\x98\xccmX6U)\x96s\x92a\xe5\xf4\xbc\xef\xb0x\xaa_Y\xc2\x8d\x8c\x05\x1cq\xd9@\xfbgN\x8fd\xdfi\x0eRD\xab(\xa4\xf1\xd0#1-\xa4\x90\xa2\xd9I!\x8d\x06 Yd3\x85\x14\xcbr\n\xc9\x1f\x86d\xa6\x15\x15\xd2l[\xaa\xbd\xed\xfc\xc1H\x16\xd8U\xad\xd2\xbc\x01I\x96\xd9X\xad\x02G\x83\x92\xcc\xb3\xb7Z\x05\x8d\x86*Yl\x89\x95B\x02\xec\xb1\xd6/\x83m\xb4\x90\x16Xj!-\xb0\xd7\xba&\xba\xa3\xa8\xd1,\xb9\x90\xe2\xdas!E\xb3\xeaB\xf2\xdbv!E\xb3\xf0B\x1a\x0bj\xb2\xcc\xdak_+\x1c\x81M\x02\xed\xc0\x90\xe6Z\x83\xad\xc2\\\x16bH3\xed\xc4\x90\x1c!N\xbc*\xc5h\x98\x930\x8dc\xa6\x15\xd9\xbe\x98\x8e\x04;\xf1\x97f\x99]\xd9\x107\x16\xf2$\x8a\x8d\x19\xd22K\xb3!\x8ek4V\xe5a\xa1\xd5\xd9\xcc\xc9\x1a\xfcd\x99-\x1a\x927\xe6\xc7h\x08\x94\x00\xeb4$G$\x85 \x96jH.9\x16\xf7\xf2E\xb6kH\xe1\x8d\xe3\xb3cC\xf2\xb5\x82\xd7\xa6\x0di\x82e\x1b\x92\xcd\xf9~\xa1\x95\x1b\x927<\x8a/@\x8a?D\xcah\xab\x85\xda\xc0!\xf9,\xe1\x90l\xa1R\x16Y\xc5!\x05\xd8\xc6!M\xb7\x90Cr5\x93\xd7Z\x0e)\x92\xcd\x1c\x92\xb3,\x96\x91\xb8\xc8\x8anH\xb3\x04SYf[7s\xb0\x06TYhq7\x8bl\x86X\x89k\x87\x874\x1af\xc5\x1eh\xc5\x1ej%\x96}\x1eR4+=\xa4\xb8\xb6zHa\x16{H^\xbb=\xa4@\xeb\xfd\xe0eo\xe0\x15G\xe8\x15W\xb0\x8dp\xbb\xaf?\xfcJ\xb0m_\xbc\xec\xb7\xf0C\xb2T(\xa6\xb5\x1f\xd2\"\x9b\xbf!\xcd\x1a\x8a%&\x12\xa0d\x13\x05\x0f\x80\xb4t\x8cx\xb1\x01!. (K\x8f\x13@\xb2\xa1\x05\x90F\xceac\x91\xda\xedq\xbb\x17\xa3\x08\x03i\xc2*n\xc5\x12 MC\x14 \x0d\x0ek\x00\x06\x0c#~\x88\xdf \xc7\xb5\x1cE\xa20r\xa7\xde\xe3m^j\x0d:\xbc@\xa2{\x01ll\x84\x9f\xfb\x94_e\xb4\x1b\x19t\xa2\xd7\x01h8q\xb9$\x0f\xf4\xfa3y\x8c\xca\xc72\x02\xc7\xcb\\d\x9c\x0c\xf6_a \xc2M\x03mt\x86\xb7\xe4\x9c\xfc\xb5%\x0d]\xc1sM\x08\xef\x0b\xfe9\x13\xc7Z\x82\xa0]\xd5PD\xb8\xf9\x85\xdbk\xf8\xad\x0e\xfd:\xb1\xa7\x8f(\xdf\xe8\x03\xf6\x8e\xd4\x84\xdb\xdd\xca\n\xed\xaa\x9aH;\x9b\xaaD\xd1\x8a\xe2P6\xf7H\xb8\x1bWtz.\x9e\xb7\x06\xffO\xd9\xeen\xc1\x8a M~\x8a\xddI/\xbf\xdaPY\xd5\x96\xf4\x9a\x0b\xd1\x97\x94/\xb8A\x0d\xa1\x07<\xf4\x8d\xb0Z6\xa8-a0\xad\xc1\xf0\xf3%o\xa0\x1fGB\x9fX\xd1\xb2\xf0\x88'\x83\xcfC\"\x9c(\x99\xd6 \xa2K\x10]\x82\xe8\x12Dg$\x9a \xba\x04\xd1Y_N\x10]\x82\xe8\xcc\x94 \xba\x04\xd1\xa1\x04\xd1\xe9\x82\x12Dg\xa4p\x14*At\xb6W\x12D\x97 \xba\x04\xd1\xe9)At \xa2K\x10]\x97\x12D\x97 \xba\x04\xd1%\x88\xeeW\x02\xd1\xc1\xc5\xe6}\x01@J\x82\xe8\x12D\xf7[\x82\xe8\xeae\x10]=\x07\xa2\xfbubs ;K\xd8Y\xc2\xce\x12v\x96\xb0\xb3\x84\x9d%\xec,ag ;\xb3\xa4\x84\x9d%\xecl\x90\x12v&R\xc2\xce\x12v\x96\xb0\xb3\xa0\x9c\x13v\x96\xb0\xb3.%\xec,agZ\n\xc5E\x12v\x96\xb03\xdf\x18\xf9-agh\x04YXv\x95\x88)l \xc7l\xfa9\xd7\x8a\x98c\xcb}\xcd\x08\xa4\xc0\xcbF \x8dAQ\xc1\x17\x8f@\xa2\xe1\xd7\x8fX\xf2\x1e\xd4j\x1c#d\xa3_\xa2\x95\xb7\x8f +LX\xa1\xf2\xfbo\x0d+\x0c\x03 \x05\xa53~:\xe3\x8b\x94\xce\xf8\xc6\x19\xbf[j\xd8\x9f\xcf\x93sY:\xed+\xdf\xfc\x97:\xed\x07\x1d\xf2\x8d\xe3\xfd\x18R_n\xfas\xfbq\x81\x9b&\xf8\x94\x9e\xaf\xf5\xd3\xb9\xd63\xb6\xa6\xcf\xd7\xdd\\\xe2GK~\xc4\xe9\x0f8\xdd\x82\xf3\xf1\xdd%\xe2\xe1R\xd82*\xdc\xbb\x9b|\x97\x17\xb8\x1e\x8eK\xa9\x992%Y=\xb8\x9e\x9c\x1f\xff\xf7\xef\xbf\x13/\xb2MvFa\xf9\x19@-\xee]\xbb\xc3\xe5\xab\x9a\xe05\x1f\x18\xea\xb1\xc3,\xb0:\x98? \xa5U\xfc\xd4<\xeen\xab\"\xacD\xf0.W\x14K\x84ookr\x9f\xf3\x98DQ\\\x9dG\xea\xc6\xad\xca\x93k\x96\xf5Dj\xeb\x17\xf6\xaf\x90f\xc4EcG)\x17\xaf}\x01\xc1Z\x93\xe4\xb7D\x0f\xed\xcf\xc8 Z\xa39\x15\x88G\xbaF&\xf1\x1aY\xc8\xd7(\xa0\x94QH\xd8\xc8E\xc4\x0e)A4B6\xd2\xed\xfa!\xb9\x1b\xbd\xb4\x98\xa0\xad\xc9c\xb2\xa6\x92\xb4\x91\x15H@\x01\xd5\x99\x0c(\xd8\xfbr\x00/ \xd7DG)N\xf5\x04\xf8\x01\xc5\x84 \x90\xcf\x9d\xdc\xa6\xd7\x07B\x11(\"\x1c\x81\xbc\x90\x04\x9a\x0bK\xa0%\xd0\x84\xad\xc5\xfc.\xe4\xb3!\n\x8b,\xaf\xfb\xf8\x12\xa8\xc2\".\xc5\xa9^\x06_\xa0e\x10\x86}\x8aZ\x0b\x19\x0d\xd8@\xd1\xc1\x0d\x14\x13\xe0@A \x07\x8a t\xa0\x14\xa7\xda\x96\xcdL\x80\x04\xfdW\x8dS\x8d\xbc\xe5X\x06\xa0h\xc28\x9cb\x01QP\x1c \x05\xc5\x06S\x90\x05PA\xcbA\x15M\x1a5 \x16\xb4\x10fA>\xf4\x01\xb9\xe1\x16\x14\x02\xb9 \xe7\xed\xf3\xe1\xd0\x8b[\x86az[\x04\xc3\xa0 \x8d\xe1\x83c\x90\xb7\xde^X\x06M\x83f\x90\xf5&\xee\x85\x10\x0d\xf2\xc14h\x14\xaaA\x1e\xb8\x06\x8d\xb5R(l\x83\x02\xa0\x1bd\x81o\xd02\x08\x07\x85\xc18h\x16\x94\x83\x9c\x0d\xe3\x85tP \x03\xcb?\xbe\xbb\x9c\x0c\x94\x97\x1b\xc3\x134h%0\x83\xf1\xa1\xb1A\xef\x1a\xd9\x8b\x03\xf3i\xf2l\xf8\xf6\xd4BN\x08\xd4\x87\xe68\xf5M\x0d\xda\x87\xbe\x9e\xbf\x9d\"$y\xd9u).\x9a\x19\x15\xcbL^vQ\xf1K\xeaG/cb\x97^\xe422n\x99\xbc\xec\x96\xa3\x90q1\xc8\xe4e\x17\x8a8\x1c\xff]\xe6\xf7\x15_9\xc4S~\xce\xeb\xf9\x03[>\xec\x00\x8f\xd2\xc4}\xab\x16\xd3\\\xb1QpA\x03Vn}\xd9\x86\xc2\xaf\x86\xbd\xa2\xcd\xd1\xd1\x02\xb8\xe7*\xb2tZ\xe0l\x15#\x8bMW\xfe\x91k\xb2\xc2\xa4\xd2\xa7kM\n\x80\xa0\xd9\x06pK\xe8\x17\xa2,\x01lE\xc5J\xb5\xad\x93\xf5\xac*\xf2\xecq\x92\x02a\x0cf\xffb\xaa\x0db\xcb\xbe\x0eE\xde\xf3\xd2\xac~\xe9\x95\xe1\xe9\xb4\x96_Tg\xd1\x9aw\x91\xea\xe2^6\xa6)0\xda T\xe4t\xfa\x8cC\x8b\x81\xdd\x0da\xb4\xce7\x1bR\x93\x92\x8a\xa3\x14S\x100\xaa[\x0e\xbew\xda\x83\xac\xf5\x9ad9+\xdf54\x86^\xfb\xa0\xe5\x9cZYra+\x97\xb1\xc4F\xe4\xc4\xb9\xd9p\xf1xp\xd1\x18pN\xee\x1b\x9d\xcfz\x8b\xc5w\x1bg\xba\xcd\xe2\xb8\xcdf\xb7\xf1\xfa\xea\xa4,'\xafm6\xa3\x0d\x0c\xaa\x9a4\x07\x97m \x8b\x8d3\xd6\xf4\xdaX\x80\x969\xcc57Km!?-\x88\x99\x16\xceB[\xc0?[\xc0<\xb3,\x18\x11\xf9eq\x99e\xd18e~6Y4\x1e\x99\x8bA\xb6\x84;f\xe5\x89\xd1\x10\x86\xd8\\n\x98\x93\x076\x93\x01f\xe1~y5\xecq+\xbe\xb1\x83\xce\xe4x\xf5|.[\xfb~\xe3\xcf{\x19\xa3\x0b\x18\\\x8a8\x93\xcb\x15\x81\xc5\xb5\x8c\xbf\xa5\x8dr}3\\\xc8\xd9\x12\x0d\xadJ\\\xc2\xce\x1a\xa5\x1e9\x18Y^.\x96I\xcb\x08\xe7_\x99\xdf\xfe\xddV\xd7Yl\xab\x90\xca\xfa\x18V\xee\xbayYU\x13\xf8TC\xe8y!\x87j\x94=\xe5\xe6M\x8d1\xa6\xac\xad\x10\xca\x92\xf2\xf1\xa3tf\xd4\x02NT\x00\x1bj:\x0f\xca\xc2:\xf2q\x9f\"\xb1\x9e,9\x0fF\xca\"\x8e\x93\xceiZ\xc2f\xb2\xb0\x97\x16\xf1\x96t\x9eRL\x86\x92\x93\x9b\xa4\x136t>R\x1c&R4\x0eR\\\xf6Q\x18\xef\xc8\xcb8\n\xe4\x1a\x85\xb0\x8c\x0c:\x8e\x99[(_d\x9cS\x14\xc8&\n\xe0\x11\x0d\x8a\x1c\x93;\xb4\x885d\xb2\x84\xe2\xf1\x83\xe21\x83\xe6\xf7\xae\x97\x0d\xe4\xe3\x01\xc9\xe5\xfb\x97G\xa4\xc0\xde\xe6\x01\xa6:\xfdZ\xb3\x0b.\xc0\xa9\x84\xc0\xde\xf6\xa9\xdb\xc1'\xe2U\xcb\xcd\xdf>\x0cg:X\xb9\x14\xa6\xe9\x81\x99'2I\x8f\x831&\x10\xb3dhF\x05_:\xba\x91 \xc0\xe0\x01\x08,\xb71\xbdS\xe5\x94-\xab\xf2\xd5\xdfH]\x89\xde8P\xda\xa6\\\xf7e\xee\x8ak\x1b\xa9g\xc2\x96\x1d4\xdb\x9b\x06\xba\xa7\xeb\x0f0\x82\xaf\xd9&\xa2\x1ao\x15\x81<`R3F\xe9\x92\xec\x95.bT\xc7\x0c\xeb\xe0\xcf\xa3>~\x04[\xad\xc4\xf3\x0c\x97\x82;\xd0\x99\xa7\xba\x02\x88\xbf\x15\xbe\x97D\xa4i\xc5A\xea5A\xed^\xd1U\x8ez\xcbsV\x95M\xdeP\x80\xf1\xb8\x0d&\xbc \x1c\xe5\x80V`[\x11\x9b\x1c\xec\xdf\xa6\xda\x91\xce\xd4\xa3\x90~,Wk\xa8\x84\x12\x17\xf5\xe7DX\xd8\xcf\x15\x9b\xbcq\xe6S\xed\xe0\x93l\xe0\xc1\xf6\xef`\xdbw\xa0\xdd{\xba\xcd\xdbN\xfc\xb07S\x1f\xa3\x8c_\nPmt\xf4\xa1\xaa\xfbX[rL\x875\xdc!:*\xc5\xd1\xbf\xc3*\xb8\xed\x13\x0cN\xab\x00i\xa2e\x0f\xd1\xcf\x04\x0cL\xec\xfbGBQ\xdd\x82Z!\xcb\x18\"L\xb4\xfe!\xd7\x02\xba\xca\x01\xfb\xa6C\xa4\xd8j-\x88Bk\x84\xf9)R\x82?\x9c\xd8@Br\x12\xdd\xa7\xe5T\x13\xda\xd6%\x8f\xe7\x02\xe69kf\xeb|]>\xa7\"\xcf>K\xd7\xa0\xbfPh\x19\xa1\x83\xddI\x07\xf03\x1e\xbcl\x07/\xd3\xc1\xc7r\xf01\x1c\x82\xd9\x0d\xe3\xb3\x00\xda\xad\x1b\xfd=\xb5\x87\xffN\xec\x83\xdd\xcc\xc96\xc6%#\x87\xf5\xaeg\xbc\xeb\xad|\xd8\xb1\\\x04\x89\x86/\xbf=S\xec\x8e\x94&Ul\xa4S\x0e\xd1;\x8e/\xba\xa5\xf5\x18d\x87\xcf\xae\xab\x92t'\x84\xaa\xa5Y\xd5\xe1\xd1b\x0d\xa7\x1aM\xeay\xa3\x93\x9eF\xca&\xc7C\xec\xb2\xe5\x0d\xaa\xc9\x7f\x90L\xdc\x04\xb4\xa8\x8cbH\x86\x15q\xb0\xb5\xe6\x0d\xdaUk8$\xf5\xe8\xb6\xc8I\xa9\xccH\xe6\xddx?\x1c\xec\xc8\xb8d{-\xdb\x11\xd75\xfeRZ\xb0\xf3\x86\xe2\x1ah\xb2\xb2\x01xl9\x99\xd5\xcfP\xe0\xbc\xe9\xb8+}\x03\x8b\x1a\xe6\x0d\xfaYf`[ux\xf0\xb5.B\xd2\xe4Xqy\x17K\x05\x19L\xdarSIL\xbc\x0f\xc1$\x83\xbe\x0dB\x90L\"\xd9\xe8\x17i9\x8d\xc0#\x11!\xc7)\xbf\x8e@)\xc8\x0c\x96\x82\x82Y'\xc1AS\xf4Po\xe8\xe9\x83\x07\xf9\xc2\xbe![\xfc\x94\xd1\x12\xcc\x08\xc69-\x92\x8a'\x14\x1cBf88\x143$\x1cr\x84\x85C1B\xc3\xe9\x85\xd6\x02\xc5\xa1H\xc1\xe2X\xb2\x07\x8cC\xc1\xa3kQ\xe08\xe4p\xd5\x19\xcd~B`\xaa\xe9n;\xe3\xfe:\xf6\xb5RV\x1b\xc2X\xaa\xc1\xe6\x94`\x97\xe3K/\xb8[L\xbfjQ4\xec\xd3\xf2`\x80l=\xe9\xfa\xc2\x91\xe9o\xf5\x81\x98\xb2\x02\x9b\xa1\xec,b\x03\x02\xdaAr\xb4\x05\x1ai\x0f\xe4\nq\x07i\xa4Y\x90\xb9)Lr\x95\xea\x93m\xc2B\x9a\x92\xbd\xe3\x16\xa1\x05\xfeUVyC\x9f\xab>\xd9w5\xf1\xcd\x84j\x04\xecp\xfe\xf0x\x90\xecA\xf2 y\x8a4\xbe.A\xd2;?pm\xb2{nYDj\x1d\xba(\x96\x9ee\xca\xf5\xf9Z&[\xef\xae#\xff\x1e\xec\x01\xdc\xee\xb3\xcd\xefI\xd9\xcdy)\xce\x16<}\x90A\xff\xc2 \xfe\xba\xf2\xb3\x80$\xe4\x92;K\xafLA\xd8S\x10v\xe4\xde\xf2\xb5=\xda\xb2\xeb\xeboLP\x00\xb8\xefoN\x9a7\x8fGL\xf7\x9f\xac\x08(\x0eQ\xf9S\xf3b\x1d{\xdf\xc8\xf28\xb6\xe7\x05::B\xfa\xd5\xa9\"\x96\xe3\xe0\x94\x96\x08<\x12\x9a\x07B\xf7\xe6\x19\x9a\xb9e\xef\x0f\xd8G]'EC\x96\xad\xf7\xacG\xc8H\x9dg\xa9\xce\xb4\x03\xa5;4'$w\x80NH\x8b\xc2tBr\x06\xeb\x844SU\xa5\xe9\x92\xebt\xc9u\xba\xe4\xdaK\x7f\xb7JK\x97\\\xcf\xa7\xc9\xa3P\xaa\xbc\xf5\xcb \xf4y\xb4\x94B\x8f\x96\xd1\xe8]\x13\xddQ\xd4\x88\xf4z\xf4\x04\x14{\x14\x97f\x8f\x02\xa9\xf6(.\xdd\x1e\xa5K\xae\xd3%\xd7\xe3\xf4|\x94.\xb9\x9eA\xdb7\xc4\xd1t\xc9u\x08\xa5\x1f\x05\\\xef\x1cB\xedG\xe9\x92kH\x93\xa8\xff(]r-\x93\xdf5\x00\xa5K\xae\x17\xbb\x0d\xa0t\xc9\xf5tW\x03\xb3\xc8\xe9\x92\xeb8. \xe8 \xdc\x12\xd0\x04\xd7\x04\x14\xe6\x9e\x80\xa6\xb8(\xa0`7\x05\x94.\xb9\x9e\xe1\xc2\x80\x96\xba1\x18\xd2\xd2%\xd7\xb1/\xb9v\xb1g\x82\xac\xea.\xa4\xdaw\xec\x99N\xab\xe9\xa3\xe1\xba\x84M\x82\xb4\x17F\xca\x1d\x08\xb4\x83M\x16`H\x82k\x1d\xcc\xad|\x99\xf3\xa3\xd1\xa6\x82\xc5\xb7\xdb\xba\x07\xb0MB\xb9\x13\xca\xfdkE\xb9\xbb\xe2z\x11i\x0b\xec\xad\xbd)$\xcd\x02\xbf\xf9\x9f \xfcN\xe0w\x02\xbf\xa7t^\x02\xbf\x13\xf8\x9d\xc0\xef\x04~'\xf0;\x81\xdf \xfcN\xe07J\xe0w\x02\xbf\x13\xf8\x9d\xc0\xef\x04~'\xf0\x1bR\x02\xbfyJ\xe0w\x02\xbf\x13\xf8=H \xfcN\xe0\xb7\x96B\x81\xcd\x04~'\xf0\xdb7F\x12\xf8\xfd\xdb\x06\xbf]\xf7\xee\xf9\x90pK\xc8?EP\xb7\xc1\x0f`\xa5\x04\x91'\x88\xfc7 \x91\x0fp\xebQ\x88\xfcG\x050\x9c\n\x91?F\x88\xd05a\x1aX\xa1ng\x87G\x82\xb9\xed \xf7\x9ca\xb6\x10\xde~\xfa@_q\xc3|\x19\xd3)\x1e\xa0m\xf6R\xb4``\xe3U\x88 b\x8fC\xd8\x8b\x01\xecQ\xf8\xda:\xe9\xd0(tM\x9d\xc0\xf5\x88n\xe3kO\x14\x1f\xb2\x1e\x07\xac\xe3\xc2\xd5Q\xc1\xeaQ\xa8\xdavn\x9f\x00T\xc7\x84\xa9\xfd \xf5l\x88:&@M\xfd\xf0tLp\xda\x0bMG\x06\xa6Ga\xe99\xa0\xf48\x00\x1d\x01~\x0e\x02\x9f\xa7\x01\xcd\x0ba\xe6\xb8 \xb3\x0b\xf7\x8c\n0\xc7\x87\x97\xa3\x82\xcba\xd0rT`y\x0cV\x8e\x0c*\xbb e\x8b\xbd\xc1\xbe\xbe\xcd\x85\x93\x1d\xd7\x99\xd9/4[\x04%;\x80\xe4\xd1-~\x14D\xf6\xef\xff\xf1\x00\xe41\xf8x\xbc\x1cQ\xa1\xe31\xe08\x12l\xbc\x0c4\xb6\xcc$\xdbV\x1e\x170\xa6V\xb8x)X\xecECG\x80\xe2 \x98\xd8\x8e\x1aM\x83\x88\xed2\x0c\x8b\xf1bp8\xb41B\x80\xe1\xf1z\x07\x81\xc2\x13!a\xd3\x82\x1e\x01\x0e\xf6\x82\xc1\xe3P\xb0\x0f\x08v\xb6\xd2\x14\x108\x04\x02\xb6\x01\xc0\x0b\xe1\xdf@\xf0w\x1e\xf4\xeb\x00[C`\xdf\x88\xa0\xaf\xa3\x14\xc6H[\x04\xf7\xda\xe0\xdd\x88\xe0\xae\x1d\xda]\x04\xec\xda\x80\xdc\xd80\xee(\x88kC\xb7l\x00n<\xf86*x\x1b\x1f\xba\x0d\x07n\x83`\xdb \xa0m(dk\x05l\xed\xb9\x87\x02q~\xb0v\x02T\x1b\x08\xd4\x1a\xd5\x88\x0d\xd2\xc6\x84h\xad\x00m\\x6.8\xbbl<\x04\x01\xb3!\xb0\xac\xba\xad\xfdU0\x86\xa00\xbf\xc5H\xd7\xc1\xb8/\x84Yx%\x8c!\x8dm\x8d\xb6Ka\xe2]\x0b3v1L\xf8\xc8[|9\xcc\xd7\xe0\xf8L\xdfE\x8cKb,Rm\xcc\x9d\x18\xdb\x05\xd2'\xa6 sk\xbc\x1c52\x05\x85{7St\x8aD\xbd\x19\xa4\xdf\x1c\xf5& ,\x85\xf1\x8a\x1c\x98BX\x90Z\x04W:$\xbd(\xe9EI/Jz\x11Jz\xd1\xff\x01z\x91\xda\xfcI=J\xea\xd1\xaf]=\x1aQX\xecjQw#\\\xb8\x81(i@I\x03J\x1aP\xd2\x80P\xd2\x80~\x9b\x1a\xd0\xf3\x1bX\x91\x817Z\x14\xaa\x1e$\xb2e\x1aJC1%\xab\xe7BF\xd2z\x92\xd6\xf3k\xd5z\xfe?\x8bQhL\xed\xd1\xd5\x1d\xf1\xf5E^f\xe4P\xa8>\xaf\x9a\xf5g\xf4\xed\xeaw\xff}\xf5\x9dK\x1d:\x13\x0b\xe8d\x85H\xae\xbc\xae\x99$\x1e\xcb\xa2\xf7\x7f\x97\x9bj\xd6\xac\x89\xeeCe\xe8E\xf9Z\xae\xd76\x8f\x18\xden\xc2\x1d\xe6z\x81/\x99M\xce\x88\xca\x04\x0b\xb1\xe9\xb2\xb4\xc4\xb7j\x9e\x9edk\x14\xf8mpe;rh\xc7\xc8\xa6!\xa3\xe02w9u\xa7^\xad\xb1H3\xec=R\x0f\x16\x97\xa6\xbd\xdd\xe5\xf4\x9a\xedy\x81M\xb6\x04\xcaWr\xf3\xef\xb5\xdd\xdc0q|\x90\xa3m\xbf0\x82\xbe\x92\xcf\xda 3PNa\xac\xca\x9f\x86.\x80\xb4\xab\x8d\xad&\x0d\xfb\xc2\xa0\"r\xe7)\xa0B\xe5\x0d\xe2;\x05S\x06\x14\xe5\x00\x17h\xdf\xd6\xacS\x81\xb3\xe6\x9c\x97_\xb5Q\x86yz\xdbF\x905\xb0-\xde+\xef\xfe\x91&\xfa\x19F\x8a\xf4\xca\x93\xb2\xf2\xa6\xd3\xc4-Z=\xda\xd4\xd5\xce\xc8\x8c\xdc\xe7U\xdb\x08 z>\x9d\xda,\xf6\xf3\xacb\x03\xb8\x04j}gZ\xba9z\xf3\xe9\xfc\xf2\xe4\xed\x0d\xd7\xaf\xda&r\x8f\x82\xd0\xc3 \xfd\x01_\xd84N\x04\x1a\xe7\xbejrU\x7f+\xf2\x0dA\xd9cV8\\\x01\xbb\xb5\x0e\x9d\x969\xcdq\xd1\xef\xe6\x17\xb6)92\xc8H\xd9\xee\xf4%\xef\x15:;\xfft\xf6\xe9\xe2\xe8\xfd\xf5\xc5\xe5\xd1\xe5\xd5\xc5\xf5\xd5\xc7\x8b\xb3\x93\xe3\xd3w\xa7'o\xbd\xef^\\\xbd\xf9pzy\x19\xf0\xe6\xd1\xf1\xf1\xc9Y\xc8\x8b\xe7'\xffzr\x1c\xf2\xa2\xe8y\xef{?\x9f^\xfe\xf4\xf6\xfc\xe8\xe7\x8fZ/r\xce\xeba`\xf57y\x89\x8bk\x8a\x8b\xe2\xf1\x1a\x94\xb4)\x83\xc2\xfcz\xc8\xadl\xda\x1d\xdf2\xd8\xe9\x01Ndd\x8d\xee+J\x1a6X5a\xec\x0c\xa9\x8f\xf2n\xe2r\xb2+\xce\xee\xf8\xd7\xc2\xf9\x8ek\xc5y#\x14bL\x95\xd9\x0d~Dl\xd4\x1b\x12\xab}[p\x87\x08A\xb9e\x85\xcf\xcb\xed\x01\x13p_\xc1\xf4&u^\xad\x11)\xf9\xa1\xda\xbd\xe0\x92\x07\x92\xb5\xac$\xc6!\x9ds\xff\xf8a\xff\x0e\xef\xf7\xa4l\x80\xeai\x1b\xcf\x93||\x1fIs\xcd\xb7d\xfd\xc1\xe8\x11V\xeb\xc6N\x88\xd4\x89\xba\xae\x11\xe7\xe9G\xd2@/\xad4A\xf8\xb6a\x9d\xbb\xbc\x08\x03A\xaeb\x88\x974-\x83\xa5\xb2Z^\x04)\xc3\x95{Y\xd9\xdb\xa0\xac\xae\xd9*}}Oh\x9cRh\xd2\\\xe5ao\xa8e\x81\xb1z\x0dc\xf5\x9a\x94Su\xf79:\x97\x91\xa7,l\xaf{\xddr\xa7GA~\x15\xf3i\x07\x0ed\x9a\xb0uU\x12c[\xbb*\x0b\xa6\x95c\xd4\xb4YF\x9af\xd3\x16\x05\xfa\xd0lO\x1eH\xc6\xf7b\\\x14d-syA+1 \x89\xc1\xcd\xedU\xbe\xbb\xca\xe4\xff\xf3i\xcf\x04\xf6\xf9H\xa1\\\xbb\xd0\x17\x82\xe6\xe5A\xb7T\x80\xb9l(\xef\x96\xf0\xfa\x18Dt\n\xa6\xb1}\x95\x97\xf4@:\x10\xa0\x1bs\xe1\xbca\xcfn`\x97\xbd\x81\x8d]\xd7T\x85\xc2`\xe4\x91eU\xbd\xce\xcbm\xf1\x88\xda\xfdZ\xb7$A\xfbT\xf5\x8c\xe5]\xfbTv6/|\x17\xe6`x\x9c\xeb\xd7D}\xde\x18\xbb\xfc\xc7\x8a\x9e\xb7e\x9c-\xfe\xe4\xdfO\x8e\xaf.?\x9d_\x9f\x9f\\\\\xbd\xbf\x0c\xdb\xeb\xf5\x8f>~\xba\xbc>\xbf\xfa\x18\xfe\xc1\xc5\xd5\xf1\xf1\xc9\xc5E\xf8\x07\xef\x8eN\xdf_\x9d\x9fh]\xa0o\xd8a\x95\x11$\xf0\xe5\xc7\xc2tCB\xd4\x90\x13\x91\x83N\xa4\x1b\x12\x06)f\x00\n\x18\xadM\xba!aF0\n\xab\xa0tC\x82\x9a\xe2\x06\xafH7$\xa8),\x8cE\xe4@\x16\xe9\x86\x84tC\x82'\xc0E\xba!az\xb0\x0bC\x1cM7$\x84\x85\xbe\xf0\xdf\x0d\x10\x16\xfe\"\xdd\x90\xc0\xd3\xc4p\x18\xe9\x86\x04\x91B\xc2c\xa4\x1b\x12\x96\x07\xcbH7$L\x0e\xa4a\x169\xdd\x90\x10+\xc8\xc6S\x84\xd9\x98\x12h#0\xd4\xc6\xa4`\x1b\xe1\xe16\xd2\x0d hF\xf0\x8d\xb8\xe17\xd2\x0d c\x818\xc2Bq\xe87$\x8c\x9fP\xa4\xd1\x19\x187E\xdep\xf3\xd7M\xb3\xfe\xbc\xfa\xd0lo\x84-\xad\xeb?\x80f\xd6l\x13t\x13\x00\x80,)N\x84\xa6\x9b\x82N\x9f\x1b2\xf5\xe4\xd3@\xd7\x04\xf9\xba\x0c\xab\x0e\xc1/f3\xf3\xfe\x8bx+\x8c\xb3\xf2Bxy\xa3%{\nn\xde/\xe5\xc9`o \x07G\xcf\x0d\xc78\x00\x99\xf0\xd2/\xe5\xea\x8d\xb0\xf5\x82FY\x10\x1b\xdeb\xe0\x88\xc5\xdas\xf0\xf6F\x99{A\x15\xf3O\x1fK\xadb1\xf8F9|K9_!<\xbe\xa7n\xa2H|\xbe0F_DN\x9f\x97\xd5\x17\x8d\xd7\xb7\xbc\x97m\xdc>\x7f\xff,\xe3\xf7\x99\xeb\x98\xbaV\x063\xfcF\x87\x9f\x8d\x020\x8d\xe77\x85\xe97\x81\xeb7\x81\xed\x17\xce\xf7\x0bg\xfcM\xe6\xfc\xf9Y\x7f\xfe\xe1\x12\x95\xf9g\xe7\xfe-d\xff\x19\xd2ll\xc0\xb8|\xc01F` 'p6)c\x84\x19\xe8\x85P\"\xb1\x03\xbd\xfc\xc0i\x05Y\xc8\x11\x1cc N+\xc8\\\xa6`\x18WprYf\xf2\x05\xbd\x8c\xc1\xa0\xbd\x7f\xae\xde\x17\x959\xe8\xe0\x0e\xc6d\x0f\xfa\xf8\x83\xcb\x18\x84\xe6\xda N\xcc6\x0ead\x16\xa1\x93G\xe8e\x12z\xb8\x84\xfeA\x10\x95O\x18\xc8(\\\xa6R\x84Q\xf1\xbc\x9f\xd9\x99\x853\xb8\x85\x93\xd9\x85\xf3\xf9\x85.\x86\xe1\xecC\xaduK\x1b\xdf\xd4\xc6\xb9\x86\xde\x95\xd3?\"!\xcde\x1c:\xc4\xd1\x01p\xee\xc0\xad\xa2\xb3\x0e\xa3\xf3\x0e\xbd\xcc\xc3\x08\xdc\xc3\xd8\xec\xc30\xfe\xe1\"\x06bl\x0eb \x0b16\x0f1\x88\x898\x9f\x8b\xe8\x12G\xa8\x8f\x8d\x18\x91\x8f\xe8e$F\xe2$.a%N\xe6%F`&\xce\xe7&:W\x1e\xe4f'F\xe7'>\x0dC1:G1\x9c\xa5\x18\x9d\xa7\xe8c*\xce\xe1*:\x04u\x0c\xc6\x11\xb6\xe2$\xbebd\xc6\xa2\x8f\xb3\xb8\x90\xb58\xc2[\x0cPO<\xdc\xc5P\xfd%&\x7f\xd1\xc7`\x0c)Sd\x16\xa3\x8f\xc7\x18\x91\xc9\x18\x9d\xcb8\xc6f\\\xc4g\xb4Hc%\xa1\x0eFc\x0cNc\x10q\xcf\xc3k\x0cf6\x8e\x90\x9d&\xb3\x1b\xc7dYY\x1c\x118\x8e\xd3\x1a+\x8c\xe7\x18\xd2&\x81\\\xc7\x19lG\x17\xe3%\n\xe31\x88\xf3\xe8g=\x86\xf0\x1e=\xad8\x8d\xfb\x18\xca~t\xf1\x1f#0 'p \xe7\xb3 \xc7\x1a-\x90 \x19\x99\x0b9Z\"\xebH\x8d\xcb\x88tp\"#\xb3\"\xdd\xbc\xc8\xd8\xccH\x077r\x11;\xd2\"\xcdu\xf0\xf30&]\x9cI\x17k2.o2:s\xf2i\xb8\x93\xd3\xd8\x93\xc1\xfc\xc9\x89\x0c\xca)\x1cJ'\x8b\xd2\xcd\x91\x0bg\xc9\x850)'r)'\xb0)\x1dU[\xc0\xa8\x9c0)\xe2\xb2,\x9d<\xcb\xf8L\xcb\xf8\\\xcb\x18#)\x90o\x19\xca\xb8\xd49\x97\xfe3UL\xde\xa5\x83y i\xac \x1d\xd7R\x06\xee\xec\xeeH\xeb\x88\x1eG}\\Z\xb6\xce\x8a\xe7\x19.\x05]k \xaf'x\x0d{\x8e\x87)\x1d2\x80h\xc5I^Np\xce\x93\xb98\xa6\x7f\x83e`\x0e\xc7\xbe\xf2B\xe0X\xffcE\xc9\x9bn~\xb1\xbf\xa6\xdfG\xc5\xda\xcc1\xe49 O\x14\x91\xff_\xd9\x92\xe4>u\xcd\x11\x1c\xa0\xfc\xd5\xb3\xa6\x80\")\xb0sBc\x8dv\xda\xc2\xd0\x0b\xa2\xbf\xb3\xc1F\xf2\xe7\x15 ,\x88\xd1Z5r{8\xc8V\x1c`u\xa0Q\x1c\xba\xa5\xc2\x0bj/\xd4\xcf\x1b\x94\xddUyF$\xfeh\xf7Up\x96\xda\x1eb\xeb\x8f\x9f.O\xae?\x9d]\x9e~\xfa8\x1aUK}\xefO'fL,\xf5\xf9\xd1\x9b\x8b\xcb\xa3S3\xd0\x96\xfa\xce\xc7O\x9e\xc7\x9c\x0d{\xfd\xc7\x93\xcbOZ+ \xba\x8b\xbf\xe0_?\xbe3\xeb'\xb57\x9e4b\xb2\xe6jA\x07d;\xeea\xd1O`\xb6\xa7\x0f)\xd9#\x1b\xf7\xc8\xf22\\\xb9,/N\xbaR\x8f}\xd1\xbc\x99\x1f@\x9d\xaf\xfb\x87\xda\xe2\x13\xd7E\xcb\xb9J\x05\xb1)\xfd\x9e\x14\xb3\xd6*\xebj5Z\xa0\xe5+\x96}\xcd\x8a\xb6j\xcd\xa2\xf1\xf9\x97\x00\xdb\x9b\xe6\xea\x15\xb6~yW\xb0\xe05l\xd2*\xf6Ky\xc2\xe9k\xd9W\xf1([\xb6\xa6Y\x04\xb2%Fuz\xc1\xf01\x98 <\xa7tpg\x90'ti\x94\xe9\x9c\x1cL\x8d(\x9d\xd1\xd3\x19\xfd\xd7~F\x1f\xdbx\xcd\xdd]yi\xc2\xd9\xa4y\xf38\xffP\x926\xf4.\x85.\xf0iC\xf7\xbc\x916\xf4\xb4\xa1{6\xf4\xdbG\xb1\x9f\x0f&J\xda\xc9\xd3N\xfe[\xd8\xc9=\x87t\xf9\x86\x7f\x0fW\x8c\x91\xc1\xbb\xb6\xc5\x98m\xed\x85\x85Fl\x87\x01\xdb\x9f\xd5L\xc3\xb5i\xb4\xf6g5\xd5X=f\xa8\x0e\xcam\x99\x81zhz\x1eD\x06\x10\x1f\x9a\xbe\xdd\xa6\xa3\xb6e\x18\xfd\xb1\xb3.\x07\x8c\x1f\xabJf\xad\xbdc\x0e/S\xc04\xd5\xcb\xdf\xec\x93\xd5-]\xd1\x8a\xa0bYK\xa9\xabU!\n\xd5\x98*\xe5S\xa2F\xd4\xa7\x00\xc5)Pe2\x95%\x7f\x0f-W\x90\xac\xaa\xd1\xe8\x984\xd5\xa1\x88\x8a\xd0<\x15\xc86+?)c\xd1\xa8\x8f:\x80|\x83\xc75p\xc6\x06\x8dc\xc0x\x06K\xd0@\xb1\xab6}\x8dy\xdd8\xd3^L4\xeeI\xa1,c\x8d\xe4\xa5\x0c\xac:=\x15\xc5\xd9\x1e\xcer\xf5<\x9a\x12\xb5e\xefv\xa1d*xU\xca\x8535\xa1m]\x9a\x0e^Fs\x1f\xea?(\xb4\x1d\xb9w*+\xb4\xbbo\x0em?\xaae\x17[c\x80\xc4\x8f\x9f\x0e\xb5\xbf\x95B\x89\xbd\xcf'\xa1\xef|]V\xffd(\x95\xc3\x93l\x87\xd3\xe5\xef\xeb\xea\x9e\x94\xb8\xcc\xc8\nSZ\xe7\xb7-%l\x1e\x1c\xc9?\x82\xb7\xa8\x12{\xd7\x81\xe1\xc6\xcav\x06\x99\x0b\xff\xba\xdbm\x86\xeeD\xa3K\xca@\x7f\x1f\x91\xcfevj\x92\xfc\xf9\x9a\xcb\x0e\xfe\xbeS G\nfn0G\x97\x97\xe7\xa7o\xae.O\xae/\xfftv\xe2\xdcc\xf4\xd7\xaeNG\x9fs\xda\xe3\xc8\xf3\x8b\xcb\xf3\xd3\x8f?\x8e\xe6p~:\xf6\xf8\xf4\xe3\xe5\xd8\xe3w\xef?\x1d\x8d\xbepv\xfe\xe9\xf2\xd3\xd8\x0bo\xfet\xa9l\xa5\xdd\n\x16\xd0\\\xb6\xc3H7`/\x1f\xf7dp\xd0\xa4\x8a\x0b\x14\xdf\xd7\x1aZ\xd5\xdc\xe9\x12\xb4\x13\xf9\xa1\"\x8c\xf7\xb6\x1c,z\xb0?k\xb7\x8b\"\xf1A#\xd4\x9c\x81p\xb6\xa1\xddVm\xb9\xee\x8f\x83\xe4a\x9f\x03\x9b\xf2\x9am\x8c\x81\x03\xde\xb3\x87^\xe6\xd2q\x9f\xadJ]\xee\xfc$\xc93\x14\xe3Wo\xc2\xae\xf9\x04\x81\x15\xdc\x93\xd7\xec\x80\xfb\x1a\xc6~\x7f\xf7?\xdb\x04\xac\x14?,\x9d\xbf\x84\xc6\x17\xb2\xbe\\v3\xd0\xb3\xd5z\xc7\xc5\xd8\x14\x1a\x9b>\xe3Sgd\xda\x8cL\x99\xd1\xe92:UF\xa6I\xe8\x14\x19\x0c\x88\xae\x87\xc7ZpL\xa4\xb2\xcd Im\xc9\xc9\xd9\xafed7\xd6qr4Z;\xc1\x14\x7fu:\xd8\xfa\x8du\x96\x0d\xe0\xdeyR\x0c\n\xf1\xd0\xe2\xcc\x80\xfe\xf8;\xd4\xb6\xf9\xdaY\n\xd6\xddF)83{B)\xd8^#\x8b\"~f\xff\xfd\x8f\xa6*\xf9|p\xe6\x0e\x03\xca\xc8\x1f~\x9eR\x02\xee \x99g\x83\xf6p\xb7\xfc\xf9\xa9\xd9\xf0\xe7\xa7S\xf2S\xb6\x08\xdb`7\xc4\x9f~\xbc\x9c \xbeDyI\xc9\x96\xd4\xe8E\x86\x1b\x8ax\x90\x0c\xfa\x87\xdf\xbdt\xe6\xc9g\x91\x91+\xffuB\xbehST}\x86\xa6\x1bU\x84\x1fhw\x9bq Yc\xc3\x8c\x08\x1f\x89\x07\xe33\xcf\x0c3v\x19y\xc2di\xa6\x1eH#\xc5v\xd15\xbc\xa7\xd6\xb1\x97\x87& \xc7[\x9a!\xc8\xf1\x96a\x0er\xbc74\n9^\x1a\x9a\x86\x1c/\xe9\x06\"\xc7k\xba\x99\xc8\xf1\xda\xd0X\x04)\xf4<\xdc'\xd7J;\xdf|d\x08\xb2\xe9\x93\xdd\xb3\xc9\xf7F\xcc0+Ar\x1a\x97\xbcYN\xe2\xae\x84\x9a\x9bD\xae\xd6\xe6\x8faz\x1a6s\xa9\x18\xa0\x069\xf7~\xc3Z7\xc9\xe3XR\xbc\x92\xe2\xf5\x1bU\xbc\x82\x14.]\xd5\x12\x92\xa6*Z\xb3OZ\x1eM\xcb\xd6!O\xa4c\xfd \x0b\x96t,5\xf9\xf4\xa2\xa4c\xb9\xdfJ:\x16J:VP\x96I\xc7J:V\xd2\xb1~{:V\x98UKW\xb2\xe4\xc0\x0f\xd4\xb2\x00p\x98\xaca\xed\x15\xa8\xc5\xa8\xcf\xde\x041\xf8O\x84\x92\xbaS\xa1z\xd8\x02\xd2\x84I\xe4\x06nzA:x\x83\x9c\x00\x0eB\xb1A\x1cK\xc3\x86t\xa1\xc0~\xce\xcf\x8eC;\xef\"\xc3\xe5\xe4\xaeK\xcaqR\x8e\x93r\x9c\x94\xe3\xa4\x1c\xa3\xa4\x1c'\xe58)\xc7\xbfn\xe5\xd8PtBT)\xf6~\x80\x12\xf5\xa1\xd9\x1e\xad\xd7\xa1\x88\xee\xa0X\x8eO\x07k\xe9\x87f\xfbZ}\xc9\xf4\xf6\x1b)\xd8[R\x10J\xe6\x96\xcd\xf1\xb5Q<\xed\xbd\x19%|\xcb\xaf\xf3\xcd\xe8\xac\x92vc\xd1/\xceQt\xe3}!pJE.\x08\x0dgG\xe9-m\xff\xd8(\xed\xf0\xb5I\xc5\xbb\xe27\x03v\x15<\xe9\xf6\xba\x89%\xf5\xca1\n-\x1c\x9bf\x17uY\x01\x9d\xc5\xd2\xde\x1b-\xe1\x0e\xd7\x9fI\xcdI\xe0\xfc\xd6H\xb5(\xca\xf2\xa9\xb1\xbf\xf9U\x80v\xd67<\xfa0`_\xc3oo\xae\xce?\xea\xbf\xbd=9\xfbtqj\xbc*/\x166_\x7f\x7fry\xa2\xffz\xf4\xf6\xc3\xa9!\xf9\xf2\xfc\xe8\xe3\xc5\xbb\x93s\xd1\x92R7\xb4\x97\xdc>\xe9\xa0E\x06\xcd\xbb\xce7\x1bR\x13vz\xe3\x97\xa4U\x1b\xb4'\xb5\xb8\xe6W\xb0\xca0\x82F\x95\x17\xb4Hmb[\xe3\x92\xdf\xc1\xc9\xce\xcb\xa5\xd4\xe0T\x87-\xb3t\xb6\x12#\xd5\x99\xe8U\xb5wx))=q\xa8\xfe\xd1\xd1\x0e\xc5\x9dT\xb4By\x99\xd5\x04\x8b\x80\xfd\xac\xd4\xc5#0\xb9\xa1\"\x86L\xd6\x93\x87\xea\x1f\x16\x99kb\x95\xc9M\x1b\xd0\xd7\x0f\x07\x7fYj\x81\xd7k\x991\x9fu\xc2WRR\xd9D\xb1\xa5\xf6/\xaa\xa3Ld\xb3\xfd\xe4rr\xa8\xff`\x9dN\xf7\xd5g\xc2Y\xe7\xe5\x1a1M\x1e\xce\x000\xe0\x95\x19\x00c\x8d}\xb2\xc1\x19\xfb\x1cS\x82\xc8\x03\xdc\xce&\xcb\xc0\xaf\xdf\x14\x95\xa9\xf9\xd5a\xb9\xb8bC\xac/\xackJt~\xc2\x0e\xf5\xc7\x97'oe\xabzV\xfa\x1fY\xc3\x84[\xc5\x02\x1c\xaf\x94\x06\x9ce\xa12\xd4u\xd3\x8c2\xb2\xf7h/|\xd0\xcd\x12\xb6}H{2\xdc\x8d\xb4\x87\xda\x9ed|\xaa\xecL\xda3u\x7f\xd2\x1e\x0dv)H\xbe\xbdJ\xbe\xe5\xa2A.\xde\xb7\x06\xb2\xe4\x1e\xe6\xdd\xbd E\xdd\xc34\x91\x11w2M\xf2\xd7\xdc\xcf\xb4\xac\x7f\x91]M+\xc3/\xb2\xb7AZ\xbe\xc3\x19\xed\xf9\x0b\xeds\x90\xe2\xecvZ\x9d\xbe\xf2\x9e\xa7\xe5\xfe\xcb\xed|\x90\x16\xed\x7f\xe3\xaa=\xdf\x02{\xe3!\xbf\xd9\xa6*\n\xc2/>\xd4\xd7H\xe1T\xdbY^7\xddPf\xdd\xb7\x85+\x11\x87\xc36\xabJZW\x85s#~\x83\x0b\xf6K\xd4MX\xab\xb1,\xad\xec\xab!\x14u\x0b\x05\xe0\xa6\xd6~\x8dbsq\xde\x0e\x1e\x8c1\xadIY\x19\x08\x89\xd3h\x87w\x95\x11\x12\xdf\xf9\xfa\x98u\xf3\x98\xad2\xfd\xd6C\xab\xcf\xa4\x14\x1d\x0bE\x92\xe6Z\\\xaey_\xef`\xad\x19\x08\xf9\xf8\x89-0\xdc\x08\xcf\x1f\x8b\xfb\xb2x\xe8\x16tZR\x11#\xa3\xbb\xbc\x15Z^\\@\x04F\xb7\xe1\x16\x9boKL\xdb\x9a4\xdc:\x9c\xd7p\x01\xdc\xb6\xdaV\xdcWqe\xefY\xdeK\x8eM\x1e\x9e\xf1\x95T\xedb1%tC\xa7\x18\x86\x03\x87F-J\x10k\x0f)i\x8f\xf3\x1a.\xa9\xcdKn\xe8\xcd\x89:\x1b\xba\x15\x87\xe5\xc8\xefo\xea7_\xeb,\xf8\xc0\xffwA1m\xc3\xcc\x0f\x1f\x8e\xce\xff\xed\xe4\xfc\xfa\xe2\xf2\xe8\xf2\xcan\x85\x18\xbeqv\xfe\xe9\xec\xd3\x85\xf3\xf1\xbb\xd3\x8fG\xefO\xff\x1f\xe7\xf3\xa3\xe3\xcb\xd3?\x9e8\x1e\x1e\x1f}<>y\xff\xde\xf9\xf1[\xb6,}\xfaSgg\x10\xba\xddx\x15\xecCXm\xa7A\xbf\xdf\xe3:\xaf\xda\x066\xa5\xa6W\x12\xbae\x08\x97pI\xbdjkp\x96`\xa4p\xe8\x15\xba\x12\xee\xe6\xa7\xc2\xdd\x1c\n\x85\xa0T.\xe9\xb2\x03t\xd1\xf2w\xf4\n\x9d\x969\xcd\xe1\xc2\xa4M\xbe\x15\x17[\xb1\xf57\xaf\xd6\x07\xa8\xe5\x16\xadF\xde ~ f\xaeP\xc3\xf8\x85\xd45\xc1j\x18Fg'\xebe\xe8\x1e\xa0W\xe8x\x90y\xa7\x11\x1c\xa0\x9a\xe05\xbf\xd7\\f\xc9\xb3\x1b\x9cOmcF\xcf\x0b~E\xaf\xd0\x05H\xc9\x1bY\xee\x03T\xb7\x85\x88\xf5\x98s\xb4(#\xce\xbatcN\x97\xdf=`\x9f@\xc7\xdc\xe1\x06\xdd\x12R\xf6j\xc8\x01\xda\x93\x92O\xcc5ih]=\xba\xb2\xe9\x86\xae\x9eM\xf7\xa0\xcfF4\x0b\xbf\x1d\x8e\x03:\xa4D5\xc90d(\xf5\xa8\x06\xee\xc3Z\x13\xb6\xc4\x89\xdc \xdc\xcbQVh\xd3\xd6L\xc3\xeb\x96\x11\nW\xc1C\x97;\xf7\xd0\x8f\x84\x1e5\x0d\xa1\x7f\xec\x99\x05\x01;\xe9\xbe\xce3\xc3c7\x08\x84\xb3\xec\\\x8e\x8d\xc8\xb6k\xf97\xec\xc1\x8e\x15a\xbf\x8a\xbb[\x85\xefUb\x93\xe1\x0d-\xb5\x8f\xacb\xb9t\xa4\n\xc9\x87a\xdd\xf7\xbcA\xf7U\xd1v\xf82\xfc\xe1\xd1t\x1c`\x9e\x0d\xc8\x03y\xb2 =\x86\xc7\x9b\xb4\xd1Nrp+\x1b\xa9 \xda\xb7uv\x87\xc5\xdd\xf3\x8a8\xca\x83\xdc\xe5\x99,.,P\xeb\xeb\xdb\xa2\xca>_\xdf\xf1 \x84\x8b\no\x13(K\xcf\x7fC\xe2\xb7j\xc3\xef\xb5\x14\x1f|\xa3\x88\x18\xcc\x0ce\x14A%\x9f7\xa8$\x14\x1a\xdf\x169\xa0\x9fa3\xc2\x06p\x90\xf3\x1a\x16\x85E\xcd0\xe8\xc3\xb7d\xcf\xd6\x14J\xd6\x87\xe8\x8c\x1f=\xd9\x01\xa2m\x08\xbaa\x99Bv7(/\x1bJ\xf0z\x85>\x08\xba\x9a\x18\xf8\x95\n\xce\x8a\x05\xab\xa3\xaeu\x9b&\x1c\xce\xc4\xb2\xac\xb2 H\x89o\x0br\xbd\xad\xeeI]\xf6j{_\xb1\xdb\xaa*\x08.\xed\xd3:/\xd7y\xc6\xf7\xb0|\x83z\x19\xe8\x96\x0f.qPh\xfa\x93\x19\xdc\xac\xd8\xaf}\x88\x87z\xa9\xd9\x9a\x99gl`\xf0\xe9\x7f]\x93-y\xf0\xb4\xb0\x9d\xaa&\xee\x96E\xe4a\xcf4<8\xa5\x01\xba\xcfwvv \x13M\xc2\xb3\x12\xcc\x088\xa3\x97\xac\xd3\nE\x1e\xb4\x97d74\xe8E_Eu1\xea\x9e\xb3}N\x9c\xe1\xf8Xb\xd9\xee\x0bL\xd9h\x00[\x80(\x04P+\xca\xc1e\xa3}\x91_*c.h\xb4iD\xc6ndL\x1e\x0f\x83\xce\x0d\x8fJ!42kL\x8a~\xc6\xc9\x00\x0e\xa4\x99\xce<]\x14E!\xf8\xfc6\x95\xbbd5\x0d\xab\xdf\x0c\x8b\x07\xc9(\xa4\xfa\x81\x95\xad\xe4b\xde\x05\x18\x8e\xb5\xd7\x0c\xf3\xb1\xf6\xdc0\"k\xcfm\xa6d\xed\x15\xabA\xd9\x10c\x98\x95\xb57L\xe3\xb2\xf6\x82\xc5\xc4\x0c)\xcc\xd0,\xdfu\x9b\x9b!\xcd5:[D\xedz\x9dr\x82\xe9\x19\xd2\x13\x18\xa05\xc1\xd1\xcd\xd0\x9a\xfc\xafo\x8c\xd6\n\xf0\x0b\x9a\xa4\xb5\x92\xfc\x82\x86iH\xb1\xcc\xd3Z\xbd~a#5\xa4\x98\xa6j\xad~\xbf\x88\xc1Z+\xc3/m\xb6\x86\xb4\xd0x\x0d\xc9\x8f\xf5-1d\x0f\xc4\xc9.\xf6\x99\xb3]\x85\xb2h.(\x80\x8f\x08V\x04\xf8NH\xb2\xb2\x13M\x15)\x90\x95\x16!f\xd7\xe5\xdd0T\x97\x19\x9a\x8b\xeb\xa9\x03\x13k\xbcH\\#\x8dP\x14\xd0|\xd3uE1\xd6\x9eVUd\xaf_\xb7u\x11\xac+\xfa\xb5\x8d#tu\xfe\xfeuM\x9a\xaa\xad3p3\x01m\x02b\xe7\x17\x8f(_\x93\x92\xe6\x9b\xdcd\xed\x1b\xc2\xfa\xd0\x80\xa6B\xc1m\x1aYU\xa0\xdb\x96\xa92\xf2\xda{XS\xa5\xb7\xcf\xaem\xba`\x7f\x08ST\x10\xdcPSVU\x12\xf4\xec\xf53\x94\xdd\xe1\x1ag\x94\xd4+>\xa4\xf8\xe1\xbd!\xdb\x1d\x81\x83\x08+\xee\xd5\xf9\xfb\xe7\x0d\xdacz\xc7\x85\x1b\xa2\xba\xa0\x9bf.\xec\xf3M[\x14\x8f\xe8\xaf-. ~7o\x1f!\x9a\xb7\xc4\x0b\x1e\xdc\xd1\xfc\xf8\x86e\xf9z[U\xdb\x82\xacx\xddo\xdb\xcd\xea\xad0\x88\xde\xbc\x84\x12sq\xcd]\xd52\xb5\x82\x9b+M%.\xc3eU\xe6\x19.\xf8\xf9\xde\xcc\xe9\x05YmW\x07\xac\xa9\xb8%\xf2\xd9\xea\x19\x9b\x12eE\xf9b\xb9\xa7d\xfdr\xf5\x8d\xf9\xd9i\x89\xf6\xac\xf1\xf2\x8c\x1c J\xd8\xd1\xaamZ~\xe3\xf5\xbe&Y\xb5\xdb\xe7\x05\xe9\xb7\xc2\xdb\xbc\xc4\xf5#\xb7Hr\x0d\xd4\xd2Z\x98\xfba=\x9aY\x91\x87=;\x97\xe6T\xda\x18\x84\x1a\xc3:\x9a<\xf0\xae:*\x1fW\xe8\xa7\xea\x0b\xb9'\xf5\x01\x9f\xbdW\xe7\xef\x1b0\xa8\x19\xf2Z\xd0\xd6\xcc\x8c\x9a\xec\x8e\xec\x08\xba\xb9\xa3t\x7fs\x00\xff67\x07l\x87/+\xf1\xf4\x80\x8f\x9eL\xf1-`;\x08\xa1\xa8\xdd\x1b\xf2\xc0a\xc2\x92\x0f\xa9\xef\xa5mk\x87\xf7\x0d\x0c\x05^b\xa6j\xc0\xc8\x06\xb58\x17\xa6W\xb6#s\xcd\xe0\xd0\xd2\x17\xff\x88N7} Y\xf7\xb15*_3=ET\x82\xdb0\x9a\xa6\xdd\x91\xb5E[\xffGtT\xa2\x9f./\xcf\xd0\x8f'\x97\xf2\xe6\x88\xab\xf3\xf70\xa1\x1e\xb9\x99\x12\xa3?\xeb\xc3\xf1\xf2qO\xfe\xf2\xe7\xbf\x18\xe2\x90$\xce\x97\xb2\xdf\xc1\xb4\xc4[r_W\xeb6#\xc8\x08S\xaf\x96f\xbf/\xf2\x0c\x8b\xba\xd7D\x9a_X\xf3d8cs\xb5\xaa>\xb7\xfb\x8e\xf7\x0f\xb6\x9b\xca\xee\xf9\x83XUx\xde<\xca \xbd#;e\x8c\xaea\x90bYT\xf6\xff\xfb\x8a\xdfQ\xad\x9f\x82Y\x82\x8c\xf9\xf4\xab\xc9\xa6\xaa\xc9\x81\xfc\x90\xc9\xc34\x17\xbaLI\xc8Z*m|\x89\xa8\xef\xc9\xda\"\xaf*\x11\xe8,\xa0f\xb1\xb9\xb1B/\xae\x1a\x82\xeeI\xcd\xb4\x04\x02\x81\x84\xf9\\\x87\xf1\x81K\xbc\xb5\xd5\xf2\xb6&\xf83?k\x80\xc0\xd5K\xb3\xa7?V\x94\x1c\x82\xe6\xbci\xcb\x0cF0+\xaf\x98\xf3Y[\xd7\xdc%Du\xa5\xb07k\xc5\xfdGL\x0f\n\xb1V\xdf\xb6\x1bT\x13\xb6\x02\x93\x03n\x14\xcf\xa9\xcc\xa4\x15V\\e\xdc\xdf\x92m^\x9663\x02\xb7\xf3\x98\xcb\xc5\xe3\x9e\xac`<\xe2}\xde\xac2\xb6\xdd\x9b\xaf]\xf0\x19\xd1\x80\xd7\x06\x9bp\xa5>\xbb\xd1\x0b\xb1\xd5\x83\xdb\x0bL\xa1\x97h\xc74DC\xdc\xade2\xf3\xcapE\xae3\xdc\x83\xca*nm\xc8PCv\xec\xd4\x9cij\xf2S9`Zv\xe9\x0fl\x1a\xdf2\xb5\x1a\xa0B=\x06\xaf\xb2\xafJ$\xe0\xb6\xba\xb7l\xd0\xddE\x14T\xf3\xc2\x1c+\xc1\xcdQ\xf9x3\x88\xc1\xdb_\xaa2R\x12\xb9\x0e\xe2\xa2\xd2\xda\x02\xd4\xe6aW\xb0\xd5\x8a/\xa8P\x92[\x8b\x93\xa0\x92\x97\xd4\x1e\xb4!s&\x07n\x91\xdf\xf2\xe2\x89u\xb4\x91g\x04n\x1c\xc5\xd9\xe7\xd7m\xc9\xfea\xfb\x8e\xb4\xc6Zf\x89\xb9\xe1V\x1b\xd4RX \xe4\xf4k\xf8\x01r\xbd\xcea.B,k\xd0\xf9\xb9\xde\xdd!\"G\xdaz\x04]0\x94\x7f\xf2\x80\xd9 D\xdf\x1d\xa23V>6\xefDQq\xd7\xa0y\x89\x8e\xff\xe9\x9f,\xdb\xc0\xbb\xaaB\x9b\xaaB?\xa0\xd5j\xf5?\x8d\xc7\xac\xb2\xb8|4\x1f\xe0\xf2q\xc5\xb2{WW\xbb\x17\x9b\xaazi\xbe\xb2Z\x99\xeb|\xbeA/\xd8\xa7W\xbc\x80\x97\xd5\x8b\x7f`\xdf\xbeD\xffiY\xdbl\xdf\xff\xdd^\xf7\xef=u\xffW|\x8fgW\x1e\xfd\xc0u\x0d&uFM\xf3\xe6\xc5\xbb\xaaZe\x05n\x1aGE\xa1\x08\xece(\xbb\xf2\x81\x99\x97\xd6\x02]\x13\xfc\xb3\xa7 \xce\x1e\xe9]UZ\x1a\x01r\x7fWU/V\xab\xd5K[GC\x03\xbc\xb0>\xe3\x83\x807Kh\xab\xb0\x8fN\xa1Q\xde\x9e\\\x1c\x9f\x9f\x9e]~:\x7fi\xb3\x1a\xf7\x03\xc5\x9e\x01dao\x8e\xdfy\x9a\xe3\xc7\xcab\xc0dMq\xf8\x03\xfa\x87\xfd\xed\xea]U\xfd\xe7j\xb5\xfa\xbb\xf9\x12.\x1f\x0f\x98\x1a\xc3\xde\xdc\xc3\xe6\xfd\x01\xd7\xcd\x1d.X#\xd9\x0bjk\n=7KV\xf9F\xcb\xe8\xaa\xdc\xf5Y\xf1\x82\xf0\x01\xc9\xdf\xfao?\xa02/\xac\x03\xcc\x9e\xbf6\x92.y \x8c\xecs\xb7\x06I\x85\x12\xdd>\xf6\xdb\xbb\\%\xc1s\xf4Q\x9a\xb1\xd9\x968\x14\xf7\xdc\xb2]\xbffg\xa3\x15\x7f\xc0T\x9b\xe7L\xc7\xedVl\xb6\x9a\xb3\xde\xa2\xfc\x166V\x92\xa1\xc0ni,\x8bG\xa9\xcf\x1b\x87\xadNmBxC \xec\xf2\xfc\x8c\xf7\xfc\xf5\xf3\xa18q\xa0\x90Y\xc3 \x82\x88\xd1\xf3lSU\xab[\\\xf3B?\xbc~\\\xfd\xed\x19\xd4\x18\xf4bS\xc5\xe7Y>c\xef\xb1\xe5y\xf0\x88\xc7\x04\x18\xfc\xf2\xc3\x0f?\xfc`\xb6=\xbf\x82\xc1r\xa1C)6S\xd0\xaf\xdb\x86H\xe3\x05G\x10\x87r\xcc\xcf\xd9\xabk\xd2o\x83\x07\x88\xecn\xc9z\xddo\x88\x07\xdd\x85%\x03Q\xca\xf6\x04\x9c\x85\x9b\xff\xcd\xaa}#\x18\x0b\xdd\xd6\xae6\xe2JN\xbfC\x8b\x82\x88\xb3\xcfl\xee\xf5\x07\x8aM^\x10s}\x93s\xf4\x8c\xd4MUZ\x87\xb38\xf9o\xf2\xba\xa1\xd7\xbc\xe5\x7f@\xdf\x99\x92\xba\x17\xd9\x00\x90\xef}\xef_Q\x11\xb2\xe6\xfa\x8c\xd7\xff\xd9!zf\x1b\xd9\xc3j\xad\xa0\xf4\xcf\x0elrx\xb9?\xe2\x1d\x93\xf5\xbf\xa0\x88\xffb}\x91\x95[{\xcfW\xf8\xd3\x8dPl\x87}\x0c=\x947\xe8\x0b)\x8aW\x9cC\xc6\xe7\x1ag\x0cI\xba\x899P\x87\xc3\xe9\x00\x94-m\x8c\xf5.\xe4\"K6p8\xef\x90\x0f\x9b\xa1\xc0\x1b>\x88\xe5\x18\x82\x10\x03\xb4'\xbc\xf0)\x90\x97\xdd\xd8\x93Vh1\xf4\x86\xb2\xb8\xf8n\xc4\xa1\x17l\xfe\xca\xea\x1a\xc7ViE\xf9\xcb\x9f\xff\xf2\xd228\x97\xf4\xf70\x03{\x97\xf3j3Q\xdf\xad\xbe\xff\xee\xfb\xe6\x99\xa5\x1b\xe1\xdf\x14\xf3 \xc5<\xf8\xb5\xc7<\xd0\xe0\x06\xc3\x00\x1ed^\xef\xbe\x12\xb2B\x00\x87\xb7\xa4\xacv\x1f\x04r8\xdd\xdc\xee\xb8\x194h\"\xa8\x0d\x10\xd2\xed\xc0\x0fj\xcb\x9cZ\xec\xf16\xbe\x85\x95ma- $\x97\xbd\x1f\xb9\xe8\xfd\xc8\xc7\xdd\xf0\x9b\x14\x90\x94m\xdc\xfe\x0b\xfb\xacj\xe9\x86{1\xe1m\xd6\x0cVa/\xc8j\x8bZL\xab\xddKS?%\x0f\xfb\xaa$\xa6\xe3\x01\xea*b\x8b\xa2\x06\xc9\x1dK\x0dRHMe\xfeje\xf7\xd5\x17\x98\x88\xdf}\xdb?\xe7\xbbbU\x12@\x0b\xac\xb2j\x9c\x0b\x85\xf5\x167\x04\xd8c\x00}\xa2\xaa^\x03\xcf\x890-\xb6o;\xab\x1c>\x03\xae\xca\x9c>o\x04/\xcb\xfa\xdaw\xa2\xe1\x7f@\xdf}\xfb\xffv\xe5\xec\xb3\xb6\x7f\xc5Q\x01\xc9oU\xcaYm\xa0\x8fz3\xb8\xe0\x9b\xe1\xbew\x18\xf4\x90\xda\xca?\xa0?0\x05\xa3m\x0e\xd1w\x88}\x05\xa5\xff\x83s|\xe0\"\xc7\x8dm\xf8\x8f\x91\x9a\x90\x9b\xd8\x84\xfc\x13DF.\x82\x9c\xb9}\xbdC\xc8\xc5\x1c\x90\xcf\xe4r\xa7\xcc\x03M\xe0\xf8\x9e\xa8\xf4\xf5\xf0\xf2^\x88\xbf\xa4\xdb\xbd\xb0c\xd0\x0ch\xcal\x1e\xf6\xbeGM\x9e\x01\xffv\xd8\xb4\xa2\x8e\xca\x02\xa6\xcfvYcu0n\x94\xcbp\xb3*W\x0b\xc2FR\xd0\x9a\xe9\x9b\x96L\x90^\x16\xfe\x1b\x0c\xd3\x17=(\xc6\x9e\xf4\xcdg\xc4\xa4\x1a\x8c\xbao\x07Ck\x9d7\xfb\x02\x87\xea;\xe3](d)\xe4S\xbeV\xb6\xdb\xad\x02XCGvE\xb7\x8b\x00g\x9f\xac`Z\xcc@\x0f1\x83\x05\x86\x95\xf5\xf9E^f\xe4P\\\xf9\xfc\xaaY\x7fF\xdf\xae~\xf7\xcf\xcfm#\xe19_\xd6Uf\xd9\x00\xd1\xe4\xa4\xf8\x17d{\x88\x8e\xb90t\xc4\xa6\xab*\xa9y\xdc\xddV\xa1\xda\xd2\xf8\x10\x00QR\xc1\x10n(\xf0\x9bD\"\x9b;v\xb8\xa9\xca\x8e\x18\xd2@\xe9\x8e.?}0V\x11\x0e$g\xfa\xd1\x17\xc91\xd4pC\x82\xa4\xd3\xf1\xae0\x11\x07{S*/\xb5u\x1e\xa5\xf2W\xe7\xa7\x1c\xa9B\xeb*k9`\xfd\x82\x9d\xf1\xd9~\xb4y\x95\xdd\xe1\xbc|\xa9_}\xd7\x9d\xe15Qy ;d^\x95+\xf4I\x1c\x1e\x02\xab\xf6\x87a\xd5\xae\xefpc\x8dq:\xa7~?\xe1\xe6\x0e\x96\xd5\xe6\x0e\x7f\xff\xfb?\xb0\x03\xea\x1dp\xf7\xbaJ\xef+\xb6\xefs\xab\xd4\xd5\xf9)S\xe9\x9f7\x1c\x91\xd1\xc4\xd1\n\xdd\x93:\xdf<\xf2F\xd1\xab\xc6\xbbT\x8a\\\xe7\xeb\xf29\x15\x18\xda\x82\x06q\xaf\x07Rk\x0dX\xcb\x95\xaf\xb0\xb9L\xebG\x06\xb7b<\xaa\x86\xab_\xbf\x1e|>\xaa\x81\x9f4Y]}\x99\xacz\x13\xfe\xd9\xd3\x12]\x92Ok\x9f\xc2\xfc\x84F\x0eu\xc3~\x0e9\xd0\xc1i\x0e\xbe\x13\x92B\x8et?\x81\x97\xea\xe4\x11%\xbca\x9f\x98<5\x95g\xaf\xb5\xe9\x1c\xefoH\x9a\x0f\xb8\x9a\xedd\xaa\xbe\xf5\xf88~\x80\x1c9Bzud\xfb\xcc\n\xf8\xd4\x7f&\x9b=\xd7,\xb2\x96L9\x8b81 -O\xc2\xe6b\x9f\x06\xcd0\xdf\xcb\x1c\x92\xdd\xc0\x14\xc1\xe3| o@\x1c\xb6\xf8\x9d\xa3d\xd8L\x86M\xf8\xfd7d\xd8\xd4\xb6\xa6\xf0M\xf0'\xbe\xa0O1l\xc2w\x937A\x90\xa2o\x81A\xe3\x9fZi\xc13\x15\xf7\x88\x84`7\x1d8\x1e\x198\x1a\x15\xd8I\x04\xa6\xf3i\xc0\xb1H\xc0\xe3\x14\xe0Y\x04\xe0\xb8\xf4_'\xf97.\xf5\xd7A\xfc]H\xfb5\x9a\x9bZH\xbfq)\xbf\x0b \xbf\x91\xe9\xbe\x0b\xc8\xbe\xb1\xa9\xbe\xd1\x88\xbeqi\xbe\xd1H\xbe~\x8ao4\x82\xaf\x8b\xde\xbb\x84\xdck\xb5\xfd\xd3\x10*\xef2\"\xaf\x85\xb8;\x93\xb6k!\xedzu\xa2qE\xd1\xd8Ag\x92u{r\xae\xad}\xbf\xf1\xe7\x1d\x99\xa6k\x92t#Pt\xa3\x12t\xf5\xcdp!9W4\xb4*q \x1dw\x94\x8f\xea\xa0\xe2z\x89\xb8&\xf7/\x9c\x84k~\xfbw[]g\xd1oC*\xeb\xa3\xde\xba\xeb\xe6\xa5\xddN \xdd\x0e9V\x0b \xb7\xa3t[7\xd9v\x8cjkm\x85P\x9a\xad\x8fd\xabSl\x17\x10l\x03\xe8\xb5\xd3\xc9\xb5\x16j\xab\x8fX\x1b\x89Vk\xc9y0R\xa2\x12j#\xd3i\xa3\x92icRi\x9dDZ\x9d\x9d\xa8\x93h\xe3Ph\xa3\x11h\xe3\xd2g\xc3\xc8\xb3^\xeal q6\x846k\x90f\xcd\xdcB \x94\xe3\x84\xd9@\xbal\x00YvP\xe4\x98D\xd9\xc84\xd9x$\xd9x\x14\xd9\xf9\xbd\xeb\xa5\xc7\xfa\xc8\xb1\xb0|\x0ftX\x8b\xd1,\xdc<\x17d\x91\x1bDo\x9b\xee\xda_\x12z\xcdc\xbb\xc1M\xa0O\x0cSi\xe1\x14Ge\x8c\xc9A\xb3\xb9\x83n\xd0g\xe43\x1f\xe0\x13\x0f\xee\x89\n\xf6\xb8\xa0\x9e\xa9@\xcf\xc2\x10\x8d\x90\xf4@\x8dB\xb4\xbb\xd1G\x8c\xf6cW2.\x0d\xe0h\x08\x943S\x0d\xe3\x08i<\x98#\xa4\x85\x15\\\x12\xdeq hF\x90\xc7\xc1\xf7\xdac\xe0\xd1\xa9q\xff\xf8\x07# \x85\xbeNqx$\x9c\xf91\xfcT\x0em\x82\x84\xe6\x05sX6W\xadhZi2D\x9d\x0c\x88\x87'4\xe9\x16\xee\xae\x86\xf7\xb5@\x7f5\xc9H~?ELM\xb2|\x9f\x13\x85\x9c%\xd0\xdb5i\xa8l+N\xff\x96c&\xdf\x91\xaa\xa5\x86\xea\xec\xee\x92K\xf8Bj\xbd5)0\x0fn)cZ\x02~8P\x8d\xd5\x0d\x9eu\x84\xc8\x94\xf5\xc1:o\x98\xfa\xb1F_\xeeH\xc9\x01sZ\xa1og)n5\xb9\xcf\xd9\xc6x\x0d'\x8e\x80q\x87\x82\xf46hW\x90\xdd1\x11\x84\x83\x05\xabB\x8f\x98\x0ebmv\xc5\xb1\x9dJ\x16\x16G\xb4=\x9b\x08\xc2\x9e\n\xde42O}h\x0c\xf4\xa1\x9f\xba#\x0cF\xbb\xaa\xac(p?\x8aG\x19\x0b\x97_8\x81\xa9\x19\x9d\x0c\x1c\x06\xe0\x8a\x12\x0es\xb3\xd1\x8f\xb7\x98i\xa8]XU!\xbe;\xb3\xb5\xf5\xbejxHaE\x12?#q\x93V98\x1dojB\xfe\xc6\xf1k\xf0_\xd1F)\xfb\xb7\xa1x\xb7\xf7\xcc\x08G+\xfa\x07u\x97\x017\x9a\xdd6U\xd1R\x82J\\V\x0d\xc9\xaar\xdd\xa0&gjm[\xe6\x0f\x88\xec\xab\xecn\xf6\xd8\xde\x91]\x156\xb1;^#\xfb\xe4\x1bd\xe9Ve\xd7S\x0f\x96\x0d\x8f\xc3\xdcE\xc6\xdd\xb4\xe56\xbf-\xba\xed\xe0E\xbe\"|\x85m^\xa2[B\xbf\x10\xd2Y\xa5O\x8f/\xbe\xffV\x1c\x0d\xd6\xb0`4+tA\x08{\x82.\xf6$Cw\xa4\xeem\xcf\x1cb?|\xfdz\x9b\xd3\xbb\xf6\x96[\xf5\xc0\xef\xe1u~\x9b\xbd\xa65!\xafw\xb8\xa1\xa4~\xdd\xecI\xf6\x1a\xef\xf7\xaf\xf3\xacy\xf5\xed\xf7\xdf\xbe\x92\xa5z\xc5K\xf5J\x96\xf6\xffb#\xf0\x158=\xb0\xe5Vl\xfcYU\x93\x15\x0c\x0e\xb6\xdd\xff\xa4\xcc\xad\x80\x9d\xde\xb9DL\x19E\xf3\x97\x05\xe7\x9203\xfb\xa0e\xc0>\xe8?\xf23L\x01\\\xd1s\xf1~\xbf2\xf0\x95\x80\xed\x86l\x82SDpv\xd7\xe5v\x97\x17\x04}&d\xdf\x17V\n\xf8\x08\xb6\x1e*\xdc\xa1:\xde\x15j\xaa\x1d'e5\xa4lZv\xf0\xdbVuN\xefv\x0d\xda\xe1G\x94\xddU\x15S\x04\xab\xae\x9d\xf8d\xe9k\x98\x97(#5'\xea\xb1Y(\x18P\xdc\x05\xf5\x0e\xd7\x9cN\xf2\xb99\x80(\xca\xafv8\xbb\xcbKi\xbb\xd0\x191\xe8\x94\xb7TCP\x86\x1b\xd2\x1c\x0c\x1a@\x94_k\x80\xa6\x02\xaf \x10(\x8a\xc4\x8e\xb4y\xd9\x92.\xf0rU\xe6\xd6\x95\x94\xb0\x1e\x11`\xdb\xb0\xa1\x85\xc0-\xe1n\x93\x0d\xa1\xd6\xb9=o\xb9^\xb8Tw\x0b\xb4\x10\xa7,\xd3\x96%z\xe4\xae\xb0K6\xb2\x95\xe9\xa9\x8cq\xebMa\x97\x7f:;\x19\xbb'\x8c??\xfe\xa4\\\"\xae>\xe8\x833\x8b\xa1?\xbc\xc3\xcb*\xdc~pq\x16\xc8)Lh\x949\xdc\xb6\xf5\xba\x85\xdb\xb7\x848y\x88V\xa96f\x9d\x0e\x8d_D\xb7+\xa6R\xcd'\x0c\x97k>\x01\xe4\xd2\xcem\x08/D\xc5_:\xf2\xea\x9b\xe9\xd0\xf1\xbb'_\xb0\x90p=\x9c)\xae\xd7r\xa3\xf8\x01mp\xd1\x88*\x8a\x81\xdc\x8f\x83\x81\xcd\x8e\xca{\x06:\xe6\xbf}\x145\xdb\xa3\x8c\xe6\xf7\xd8{\x05\xbf\xcc\xce\xfc`\x90\xef\x87f\xfbZ\xbe0<\x83\x8e\x15a\xbd\x0e\xba\xe3C)\x83\xfe\x85Y\x08\xf9\xc6\x94R\xbc\x13Q\xe5e\x0d\x82\xc8\xe0\x16m\xc1+J-n\xff\xd9k\xe7wS*1\xa5\xd0\xb6/lM9\xbd\x14\x93P;{\x13\xdaE\xd8\x8a7\xb4\xfd\xcbR\xca\xb5z\xbc\xaco\xda\xba\x0c+\x9e\xf6\xb2Q\x10\xf60\xb8\x89\x8e\xf9\x0d\x03\xc1\x19\x0f_7\xb2\x86\xc7\xc1\x99\xbf%\x05\xa1d\xe2\x9c\xb3}d\x14D}ibq&\x16\xc4S\x84\xe0\xcc\xe5\x84\x0b\xce^\xff\xc0(\x80|!\xb8\x08\xfc\xd2\x82\xa3\xa2\xa8\xbe\xb0g\x9e\x82\xd87T\xa7\x14\xa3t\x8e\xd7,\x93\xc6i'\xfe\xd0lOo3y$\nn8\xcb7F\xe9\x94w\x82\x9b\xefC^\xd2\xe0B\xa8/\x1b\xb9\xb3\x87\xc1\xd9^\x10\x1a~\xedB_\x00\xfbgFQ\x86\xafM)\xd4\x94\xd0L\x83b\xd9]\xd7-\x05\x1b\xbc\x18^4no>\x15\x17\x02\x9d\xf1\xab\\p\xe0\n\xa8\x8e\xf3q9fy\xad\xaf\x0bq\xa1e\x9f<\xd6\xbd\x03}\xf2(\xbf\xe2\xb8\xf7\xbb\xaa\xce\xc8zZq\xd4\xc6\x1b\x93b\x94\xd1\xf6\xf2\xc4\x86\x03\x11\xe7\xc2\x96{Di\x9d\xdf\xb6t\x8eB\xe0\x93\xe4P\xa9\\\x9fM\xac\xc1\x05)\xd7oI\xf9\xf8>o\x02\xd7\x1a\xb3\xec6\x19\x8e6W_\x9d\xa8\xcf\xfc\x9c\xd3\xbbu\x8d}\x91!\xfa\xa1\xaa\x7f`\x14I\xbe0\xdadb5`\x85\x08_\x15\xbf\xcae4\xb2h\xfdui\x86\x90\xae\xaf\x96\xdfP\x83\xce\xcf\x8e\x850;\xda\xaa6T\xbb\xce\xe9\xbb\x9c\x14\xeb&\xb8\x81\x04D|\xcdFI\xa0\x85\x8b\xbd\xfa\x8a\xe6;\x83\xf2\xc2*\xc0\x1e\xbef\x0f\xc1\x8c\xca=\x97HI\xebG\xee\xbd+r\xd3\xf2\xbe\x0d\xbc\\\x92\x9a\x91\x16\xba\x8b\xc2\xb8\x01E\xc0\xdd<\xd3\x9adU-s\x92\xac\xa0\xafSK\x85W\xa4\x17 VUw\xd5Z\x10\xb9\x8d\xba\n\x1f4=\x1f=\xa2\x9e=\x8e\x9e\xc8^u\xcf\x17\xf2$3\x8cg\xaf\x99\xdc\xb8i\x81[\x1d\x07l*\xc1G\x0d\xab\xb1\x9ae\xe7\x84$\xef\xdd\x12Y\xb0f\x90\x17\x84\xbf\x86\xac\xb8\xc1\xce\xbeP*\xd3\x01exO[~\x05x\x17\x1d \xe1[\x8e!H\xe6\xbbr\xe7\xdc\x0e\x7f\xee\xea\xc0\x1b\xba\xf3h,\xd7\xb2\xc7\xc9#\xf0\xe0vx=\xb2v\x1dW%\xadqF/\xf6$;]\x9f\x96\x9b*|f\x8aO\xaf\x9b=\xc9\xae\xf3u\xe0\xb8\x1d\xb8\xa7\xb9y\x98\xba\xf4nY\xc2_\xb8\x88n\xd8\xc9\x17;O:\xde\x14\x8a\xa4\xc12h\n\xbe\xde\xd7d\x93\xfb\xae\xd2\xf5\x97\xde!W\x96[\xfc\xb5\xafj\xfa\xff\xb3\xf7v\xcdq\xdbJ\xfe\xf0\xfd\xf9\x14\xb8;J\x95,9\x89\x93\x93\xb8\xea\x7f\xa1u\xec]\xd5\xe6\xb1]\x96\x9cS{\xa5\xa2f0\x12\x8f8\xe4\x98\xe4\xc8\x9e\xd4~\xf8\xa7\x80\x06@\xbc4\xdeH\xceH9;\xa8JU<\"\x1b\x8d\x176\x1a\xdd\xbf\xee\xd6\xd0\xfd\xf6K^&\xcd\x1f\xb6\xdb}O7\xd2\xe1\x00\x14u\xfe\"F\xa5\xd1\xcb\x1a\x1f[\xa1\x9c30\xc09#\xa5\xe0\x94tq\xff\xe3\x0f\x82\x92\x12\x13N\xec\x7f\x1a\x8f S\x9e\xca\xa3>\x99\xfc\xff\xef\xe97\xc9e\x94;daB\x07\xbc\xfb}\x0f\xf1\x1f\x8fE[6\xdb\x8e\xcb\x1c\xd2\xd2\xbb\xa2\x15a\x01\xb2\x0bA\xc3\xf8\xb0H\x19:\xe1\xf5\xee\xd4+\xc9\x12\xc5\xe8h\xa4D\x11B\x16\xd2?\x0c\xc9\x1fZ\xa1\xc1\x94\x9d5\x1c\x0b\xc0\xa0\xcf\xa2M\xf3\xb7\xe1o\x86\x9cV\x94#\xa2\xc8\x99\x01\xe2\xcf\x1132\xb9\xe2\x05y_\xac\xe9\xc0Q\x7f_\xd6w\xbaO\x19\x1d_\x0e}\xed\x9f\xb0Y\xb1^\xbe\xd2\xdb\xae\xecGg\xf9\xe0\x91\xbb\x0dY\x95\xf5\x12\xfc]\xee\x8bz \xb0G\xa9!\xd88Y\x99\x81o\xdb*\x17N\xf3\xb5\xa6\xed\x8d8\xaeF\x06n\xe0\xba\xcbE@Sk\xbe\xcaTNj\xd7\x96\xbd\xda\xb5\x9b\x82\xef\xcd\x9b\xb2~l\xaaG\xea|\x92c\x98\xc2ju\xbf \x1f/>]\xff\x8f\xcfa\x87<\xf4\xe1\xd3\xe5\x7f^\xbe\xbf\xb8\xfe\xf0\xc9\xff\xcc\xd5\xdbO\x7f\\\xbey\x1bx\xe2\xf2\xfd\x1fo\xaf\x824\xde|\xbe\xba\xfe\xf0\xdb\xe5\xc5\xfb\x00+\xff|\x1f\xea\xe3\xe2\xdd\xbb\xcb\xdf//\xacj\xde&\x85\xff\xef\xfd\xe5\x7f|\xbe\xf2?\xf0\xf1\xd3\x87?\xde\xbe\xbfx\xff&@\xe4\xcd\x87\xf7\xd7\x9f>\xfc\xfe{\x88\x97?.~\xbf\xfc\xcd\x9a4\xe5\xd7\x8c.A(l\xc6\xb7\x82>\xb2\xc2\xc1\xc9\xf3t\x18\x84\x94K\xde\xf8\xd5\xb7\xf8\xaf\xf1\x9f\x05u\x08ph\xda\x92g\xf0\xb2+=\xa3{\xe55\xf6#Q\x81\xffKz\xdb\xf3\xf4*\xe5\x82\xc73\xca\xc8\xfd\x00e\xb9\xc7^c?\x82k\x94\xcb\x92rA\xca\xfa\x91va>\xd5~|\x8d\xfe*\xa7\xb5\xeey\x89c\xf6\x85+\xde9\nqY\x16\xb5\x18\x80\x08\xfa\xe0\x93\x14\x1a\x00\xdf\xdf\xaf\x9d_\x8c\xec\xc2e\xc7e\xc5N\xf4\xcfe\x99\x947L,\x04\xc8\xab\xef\xe35\xfa+\xcc\x10\x10W\x15\x8cW\xab\xb2\xe2b\xb5\xb8k)\xbf\xe6\x85\xf8\x87\xaf\xeb5\xf2\x1b\x10\xe7\x92\xaf\x80dA\x8ci\xe8L%\xb4\xe5\xb1\x06lP\xeb\xba\xbc\xddv\xe4\xb6\xa8\x1f\xa4\x10\x0dt;|\xb3\xaf\xf1\x9fY\xe72j@\xce\xa5>\x95v\xc2\xe9\xaaYl\xd9k\na\x92\x19\x16\xd1Fe\x18\x8c jf\xba\xe5\x98yH\xe6OV\xa3\x13\x19\x8dNT\xceh\x1e\x8b\xc4\xee\x10r\xe3\xf0\x1c\x187\xa6\xf2\x1b\xeaFOl\xc6\xdf=\xefUv\x17}^\xe97\xba\xd8\xf6\xc5m\x05\xf3b\xaf/zk1\xcc\xc2\n\x9c-6\xd0\xa9Z\x96\xeeT\xc3\x90\xc9\x08\xe3\xa2\xe6AJ]\xb9\x94\x05\xe5\x9bm\xbf\xd9\xcaB\xf7\xfa\xbc\xe6\\\xa4D\x8c\xdd\xbe\xeeS\xfe\xd3\xdd&\xc4\xa1`\xb4\xe4\xa8/\x9e:\x88]CO9\x82N{kIW?\xdf.^\x16/\x16\xbf.\x97/^\xfd\xf2\x8fW/~}\xf5\xcb\xea\xc5O?\xbc\xfc\x99\xfe\xfc\xf2\xe7\x97\xc5/\xaf@\x92\x89\x9b\xba\xb5\xdd\x9c\x9e\xad$\x07l3C\xa7\xeaM\xf6\xf8\xf7_^\xbe|\xb9|\xf9\xe5\x07\xfa\xcb\xd7\x9f\xbab\xf7\xd3\x8f\xc5\xea\xcb\x92v\xdf6?\xfc\xf9\xe5\xcf\x87\xf6\xd5\xca\xcc\x8cr \xc8\xb6\xa2\xea\x1a\x18\x8c\xf84\xcc{\xa2\xd1\x9f\x19\x81\xbf\x80^\xef\xbd\xbd~}\xf5\xc3\xf2\xcb\x0f\xffZ>\xae\x97\xc5\x9f\xdb\xaf\x7f.\x8a\xe5\xf2\xfe\xfe\x97\xbb\xf5\xf6\xcb=\xfd\xf3\xd5+9ie\xbd\xa8\xb6Kz\x03\x0c\xf0\x0b\xbes\x0b\xb0C\xe7\xfc\x8b\x86Q\x83\xe3nU\x15w|'~\xbd\xa7\x90\xe0\xaa\x91O\xf3\xdd\x0e;^3\xd9\x12{%:\xf7\x1b\xf3\xae\x94\xc0\x92J\x7f\x82\x1c,\xfd\x06\xec\x95\xcb\x9bR\x99\x1d\xc9\x88qZ\x84\xfcC\x14\x0f\x82J\xb2\x04\xb3\xc7\xaa\xe5u\x10\xa8\xb1\xa0&\xa3\xc3S\x99\"\xe7\x9bA\x12M#\xee\x9a\xd0d\x0b\xce \xc96\xa9ao\xcd\xd2o\x92\xa9M6\xaf\xc9M\xb6\xbc\xde\xd3Lp\xb2\xe1\xa68\xd9\xf2{\xc6Ls\xe8\xc3H\xba\x88\xb1\xa6:\x84\x90i\xbc\xc3Lv\xb2yMw\xb2a\xd62\xd9\xbcE\xa1\x82\x137\xd9\xb4'\x9b\xdf\xc4\xa7\xba\x9a\x9dy\xcc\x04([\x92)\x10}\xd8c\x12D\x9fEM\x83\xe8\x93\xa8\x89\x10}\x127\x15\xa2\x8f\xba&C\xf41\xdct\x88>\x8a\x99\x10\xd1\x07=\xa6D\xf4Y\x8fI\x11}\x163-\xca\x96nb\x1c\xde\x88}\xe63\x9a\x1ce\xf3\x98\x1ee\xdb\x83 \x12%=\xab)\x12\xeda\xb2I\x12\xa5z\x18\xd3$\xda\xf5\xfc&J\xb4\x9b}\x98*\xd1\x8e\x0eg\xb2D\xbb\x7f\x06\xa6K\x94\xafC\x9b0Q&\xf6j\xca\x94\x0d\xb3A\x0em\x82\xa5\x13\xa5\xa7[?e\x0bq0\x935Tu\x95m\x15\x95\x0d\xb5\x8e*\xb2S\xafJ\xb3XMes\x8b\xd5\x91\x18\x8f\xd3\xac\xa9\xb2aVU\xd5CB\xf7#\xad\xac\x16\x15g\x1fM\xb3\xba\xdac\x1cl\xb09\xd6\xd7\xa1\x19\xfa\x06j;hj1\xcf\xf8\xc6\x1c2\x88\x1b\\\x0d\xc6\x08\xd7\xd2\xe5\xf4\xeb\xcc\x11J\x80(\x04\x0f\x8e\x16,\x97\xe7\xc3\xa6\xb5\x08\xfa\x11s\xe6\x95f\x84\xe9\xc2\xe65s\xb3\x05\xbf\xc7\xb86h\xf7NbxA\x84\x06j\xf1\xb5\xafz\xce\x92\xd8\xf8A\xd9\x0e9\xda\x14\xb0a\x02\x99\xe8X\xcd\x1fLL\x9cl\x07\x1d\xb7\xcb\x10\xf1\xc2\x14\x11z\x89pL\xbc{\x13\xb6([p\xf8\xb9#\x1c\x01g\xc4 \xc5\xc62b)s\xc7\x92\x05{\xc4I\x04\xe0\x8f\x84h~\x8e\xc1Oa[\xeb\x93\xf0J\x8e\xd8\xf3 \xbd\xceo\xfb\x0d\xda.C\x96\xcb.j\x01\x8e\xdaV\x82\x1f\xd9lv`\xbf\x895\xc2^X\xb5}/\xb4\x8dO\xa0jABW\x91\x9dL\xe5\x0bTA\x0d!\xdd\x10Z\x89V\xe8%\xa4\xac\x99J\xe0g\x7ft w\x8f\xb5\x9aD-\xd6$h\xb5&\xf1\x89\x15\x0fiZ\x9bZQ>Z\xcf+\x8c\xaaG=\xd4\x1fI\xed\xb8\x18\x08\x92\x93~\xb7\x11\xe9E\n\xc23\x9a m\xb2\xd5\xb4R\xcf\x9dK~\xd0\xf8'\x00-\x89\xaf\xc8\xe7\x00-\xbc)\xc53\xb1\xeb\xc0\xc9\xbb\xa6%o;\xa6\x03\x97\xdd=\xb2\xe9\x86\x06\xdb\xbb\xf3\x8d\x1d\xbf,\xc8\x964\xec\xd4\x11\xa9:\xd7\xf5P\xcd\x9blJ\xba\xe0\x9f\xa1\xaeb\xb2\xe1\x05\x88A\xac)]\x86\xc7\x16c\xeb\x92\xedT\xfcNP\xf0\xcds:\xec/\xd0\xf5\xe1J\xe0\xddD\xfcZ\xbc\xa0\xe4D\x00\x16T\xe1r\"\x0b\x977\xa2\x07H\xb8\xc2>\x14\x0f1\x95\x198[\xaa]\xf0\x84]|>\xf9M\xc4\xb8*wE_v\"\\\xaa!\x05\xa4L\xbd/q\xbb\x17L\xae9A\xfc\xc6\x03\xf9c\x0b\xf1\x80\xf3n\xf0+\x9f$\xb1/\xc0\x08\xa5\x04\x0e\x04\x1f:\xa1Q*\x0eL\x93\n(\xbd\x02d\x83(\xe8&D\x86\xbb\x99\xc0\xfd}\xc3Y\xcf\xe6\xf9Z\xdc`\x81\xc8 'Q\xec\xc7\x89\\\xa8Oo\xdf|\xf8\x84;\"\x9aV\xfc\xf5\xe6\xf7\xcb\xabkl\xebOp\x88\xfc\xf6\xf6\xdd\xe5\xfb\xcb\xeb\xcb\x0f\xefSL\xe7\xd8\x1b\x1f?}\xf8\xf8\xe1*\xf9\xf1\xc0@}\x0f\xf3q#o(\xd3\x7f\xde \xe2\xdaedbr;$\x9a\xad\xb8\xa8\x89H\xb8t.\x120Y9\xd4\x8d\xe6\x9fm\x97\x07\xf9\x17\xbd3\xae\x16p\xc19\xd4\x8ce\xff\xe2EsO\xd4)#\x1d\x96u\xd3+[\x84\xd7\\\x89\xaf\x91\xcb\x0f\xfcn\x98\xc9e\x05\x80\xb5*\x0c7\xc8P^\xd0\xd0:\xf5\xf2X\xe0\xdb\xc4\xc7\x07\xff#\xceL\xb1\xc3XY4UE\x17\xf2\n'rl\xab\xe3\xf8\xbex\xf4\x1d\x90\xbd\xc8)\xc7e\x0b&Z6M\xdd\x95\xb7\x15\xbd\x11\xb6\xa7=(\x8a\x81\xf3\xdb/\x0c2\xfd\xa3y\x1e\xd2\x1c\x1fi\x8e\x974\xcbO\x9a\xec)\xcd\xf2\x95fxK\xf3\xfc\xa5y\x1e\xd3\x0c\x9f\xe9\x18\xafi\x9a\xdc\x1c\xeb9\xf5\x10\xe3\xfeT\x12\xf1\x9d\xee\xd5{z\x08\xff\xe9\xbe<\xa8O\xeaC=\x98\x17\xf5\x80~\xd4'\xf7\xa4>__\xea3\xf1\xa6>\x85?5v!\x18\xedS\xf5P\xb3cJ\x86&\xf8\xb86\xb6\x9b\xa6q\xd8\x97\x91\xbf\xa1\xaf#\xc3\xc0n\x86\xba;\xcd\xbc\xd4\x80/\xccsY\x04\x042w\xd7BQ\x95s\xe5\x8b\x83\x0b\xec\xb9p\xa9Yofx\xd1\xd0\x9b\x16\xe2C3\x0c\xbb\xb8\x0f-~\xea!$\xa6x\xd1\x88pO\xba#\xb0\xad\xec#\x8d\xc0&\xbf#n\xec\x11\x9bWl\xbe\x88\xc3\x83\xd7\x9f\x86\xcd\x02J\xcf\xe3Os\x16\xc7\xe7O;\xfc\x98Gz\xd5l2\xd1\x11\xa7\xb8b\x9e`\xf4\x13}k\x8ew-sV\xee\x8b\xee\x9e.\xc7\x9a\xac\xe6\x9f\x0e\x8d\x1f9\x0f\xf0\x13X\xbef\xde\x16\xb8s1:\xec\xdcqMp0\xc6\xc7\x93\x00\x7f\x80\x96\xc25\x0e\x85(}\xe2\xdb\x009\xa0\x04\xcb\xe5`MX\x0eQJ\xe1!E\x9d<1\x17O\x1c%\x01-j\"\x88nq\x928\xb1d&\xf4\x04\xb4.\x05C\x01-\x19I\x01\xedigd\xf4Y\x80\x11K\x9c\x8f\xb4s\x81<\xfd\xdcxO\x8aD\x12z\x12\xa9T,\x06F\xc7'4I\xda\x14\x8d\x1b\xff$\x11\xea\x92K\x1b\xe9\xc4\xcd0n\xa4\xa3\x10\x1c\x18\xa1 \x8e\x83D\xf8C\xae9\xff\xe4a}\xed\xa0\xd2\x17\xa4+\xeb\xbb*A;\x05\x07\xe2\x9a\x12\xfa\xado\x0b\x0d\x0d\x01\xc6\x93R\xab6\xe5g\n\x85\x9e\xc0\xbdu\xa7*\xd6\xb6*\xfa\x10cJ\xbfI\xa1\xbe3c\xc2\x86\xb1h\xaf\x9d\x94\xab!\x0d\xe8w\x03,\xc6\n[5\x86a\xc4\xa2.\x9a\xcdnP\xd6DX\xe8}\xd1\x8b\xf8)H]I!y\xf6\xb6\xea\xbb\xe9\xf1\x92\xce\x01\xe8\xdd\xbb\xe1\x1dk\x13M\x0bP\x07\xba\xd3\x83\xd4\x1d\x0el\xff\xf1|\xc1\xeadz\xc0:\x997h\x9dD\x03\xd7\x89Z\xd7h\xddWga'\x05\xb1\xbb\x83v?;\x17\xc6\x1c\\IO0; \x05\xb4\x93 \xe3\x9f\x1c\xdcn\xd1\xf31\xef\x0dr'\x13\x98\x9f\x1a\xf0n\x91\xdb5\xdbv|\xd0{BvcA`?a\xef\xe2\x8c\x82\x99u\xe4e$y\xc7\xb0\x1e\xfb\x97\xb4^Eq\x06\xdc\xa0\xbeb\x18\xed9\xe2\xc6\xbd\x174\xff\xd5lDl\x84\xb1\xf7\x92b\xc4\xbdc'\x99}i\xff$\xc1\xb8\xf0`Lxz\x8f\xe9\xb1\xe0\xfe8\xf0\xbc\xde|\xf1\xdfaq3.\xee{\xd0\xb6\xec\xd9\x0b\xc4|\x07\xe3\xbd}\xb0\x00\x14\x10\xe0\x9d\x98Y\xe2\xbb\xc3\xb1\xdd\xf30\xeaC+$\xe3\x14R\x11\ni\xd8\x844TB\"\x1e!\x01\x89\x90\x88AHB\x1f\xa4\xe2\x0eR\x11\x07IX\x83<\x94A\xec\xe68\x0eY\xe0\x89\xc9\x0e`\n\xf6\x84&\xd8/\x8e`~\x04\xc1\x13a\x07\x0e\x80\x1a8\x08^\xe0 \x91\x02\xcf\x11#\xf0\xe4\xe8\x80\xc3\xe2\x02fN\x1b\xa9\x91t\x04\xe3\x8c\x01\xd3\xe3\x82\xa5\xbd\x81\xd2\xa3\xef\x01},\x1a\"58\xda\x8du\x88)E\xfd\xf8\x80h_0t\xac\xcb A\xd0\xd8\x9e\x98-\xf8yR\xe0\xf32\x1d\xae\x81o0\x1b\xb0\xe1\x98yMK\x88_y@_\x1c\xec\xb9 \x10\x0d\x82\xd7M\xf0\xc132\xee\xd16o\x89\x1b\xc7\xfb\xfd\x84U(\xbb\xb7\xa8+.\x08\xbd@\x1cp\xceTcn\xb7}\x8fj\x84;-\xe4&Ip/\x1cx|~\xcf\x89\xfb\x17\x8bV\x86#\xcc\xfc\x9b\xeb\xfe\x1aiNw\xc9\x8epp\xa5\xf3\x9d\xb1<9|g\xbb\xab\x12\x161\xdb\xf0\xe8wMy$jQ\xcb\xfd\x10uK\xe5\x98\x1f\xbb\x8b\xaa\xca\xcd\x1f|L\xd1\x9ak\xb1\x0e\xa5h%dS\xf0{g\xe9M^:<\xa0T\x01UsL\xfb\x9b\nC\xec\xa4\xe5Z\xb20\xea|{\xa0\xbb\xc4\xaf/M8\xfe\xaf\xfdY>P\xb8\xf7\x89X\x9e\x96\xf6\xdb\xb6\x06\xcc\xcd\xc7\xe2N\xd5\xe4=\xab\xe9\xb7\xfe\x86=\xdc7\xe4\x96\xde9\xfa\xfa\x97-mw\xec\xebe#f\x0f\xb3I\xa1d\xddt=\xa1\xabU\xb9(i\xddW\xbb3\xf2\xa1\xaev\xa4\xa9\xb9z\xd6\xacVp\xe9glX\x04\xbb\xfbf[-y\x08&\xed\x0d\xfb\x1e\x7f)sV\xb6f\xa9:\x12\x15W\x825>5\xf5v\xcd\xaf\xfa\xe27\xb8T\x165\xe3\x8d\xdf\xfb\xf8\x95\x00&\xd2\xa2\xb2\xad\x8b\xc7\xa2\xac\x98\xca\x89\xb9\n\xcb\x8eTLCR\x13\xc4h\xd7d\xcb\xa4\x10#\x98;[v\x17\xee\xe4U\xe5\xba\xdc\xfb\xdc\xf1N\xa4t\xef\x9b\xbe\xa8\x94\xa3]Fuv\xb0\x8f\x8c\xfd&|?\xdb\xcaA\xe3r-\xd6\x9e\xbe\x15\xa9\xe8\xaa't\xbd\xe9w\xa4\x14\x89\x08\x84\xc1\x0c\"\xd0`KCGl\xe6nwPh\xb0\xd8l\xcc\x03o[\xf77\x9cOlf\xf2}k\x1aA6\x0b|\xcf4\xa4o\xb7\x94X6\x82\xa2\xd7F\xcd\x1f\x14\x0bi\x12\x14\x12\xcdq]COR\x19\xb1g\x9a\x9b\x8a\x89\xda\x80\\\x1ei\x92\xca\xf9\x84?_v\xce,[Ci\xd8vd\x12\x9e.T\xae\x87\xe1Ka\x1f\xc3\x99\xd8\xd7\xe5]\xdd\xb4N\x94\xbd\xfcR\x1c\xd7mgo\xd4\x962\x05\x06\xbd\x08\xe6/\x88 f/F9\xecFn]\xc0v\xa4E\x89\xf5Ck\x8e\xbeo\xda%m\xcf\xfef\x0f\xe5\xaa\xac\x17\xf45Y4\xdd\xba\xe9^t\xcb\x07\xf2\xf2\xec\xd5\x8f\xea!q\xe14\xe40\x08\xda!\xf37\xe7\x83\xaeo\xe9r |\xdc}\xfa\xf8F\x9dd\xe2Z\x07\xe7\x8b\x92\x1c\x1a\xb9a\x8d\xcf\xc8[qw\xc8\xd0\x8a4m\x84L\xcaC\xce\x08Mp\xca\x02\x1f\xb3\xe4#?\xa6\x9a\xc1\xde\x9e\xee2\x86\x16t\x9e\xce\xea>\x16\x04\xfd3J\x12P\xbe\xa1l*\x91\x19%\xa3\x9c\xcb\xee{\xb3\xf5\x9e\xecn\x86\x16MD\x9e\xcfC\xba\x03\x1aZ8\x1d\xf9\xb8\xfeC)\xc9cG\x03\xb4q\xeei\x94Tzb\xf2\x84\xd4\xe4~?0\xb4\xf1q\xec\xb3\xb8\xb0\xa1\xc5\x93\x94\xefo\x18\xc7p|\xdb\xb5\x97\xf2\xe01\x1c\x9f$\n\x86\xb1Ns\x0f\xb1c8\xbe\xfdc\xaa3\x1d\xa1{8\x97:\xd2\xf9~\x1c\xebHG\xfbr\xaf#]\x1d\xd6\xc9\x8e0\xf0L\\\xed\x08gO\xe1pG\xd8\xd8\xbb\xdb\x1d\xda3\x0b\xc7\xf7\xf01\xa3\xdf\x1e\xda8\xef=\xb4`\xb2\xf3\xa8\x1a\x93vU\xf3\xcc\xc3(g?J\xc9\xbbP\xbe\x94\x87iJ\xe6\x04H\x00\xb4P\x96\xf4T&&\x80\x04\x0c:\xc8\"\xcc\x06\x18\x806 6\x00mv\xf0\x80\xe2\xcct\xc2\x8d\xc9\xf7\x80\x12\x19|p18\x81C/\xe8r\xb7\xef\\#\xad16\xcf#\xb6\xe1\x0cA\xef6\x17Q\xf8\x01J\xc5ri\xfa\xa2\x80\x9dez\xca\xdc\x0f\x1efr \n8\xa1\x84q\xc7\xfc\xe1\xd0\x9e`\x0e\xbc\x1e\xf5\x84\xd7\xc7E\xf5\x9aO\xec1\x0d\x82\xdb\xd1\x08\x90\x03F*>\xaa\x91\x0b\x9c?\xaal\x08\x04FdR\xb4\xeeHP\x84A\xa3\xb3\x01\x12qh\x04\xc2\x981\x86\xc1l\xaf\xd4\xcbpmP%\xbd\x9e[<\xed1\xec\xd0f~*\x88\xc3\"\xe7\x84\x1dB\xc3\xc0\x1cd\x8f\x80\x0e\x12\xd2,\xfcz\x85\x03\xee 193\xb1D\xc7x\xb0\x07Bl\x1a\xe2\x03\xe7\x0e\xeb\xc7\x0b\x04!\x1e0\x08I\x9dE\x04\xd8@\x92\xe6q\x1ep\x08\x89\x00D\xc8\xdc \x11\xe2\x05\x8a\x10\x14,Bp\xc0\x08\xd9\xfb\xfc\x8e\x07\x90 \xc4\x04\xb8\x02\x05\x91\x90I@\x12\x84\x98\x05-!!x \xcaQ\x924S\x13\xa0&\xfeO\xcd\x037!S!'\x08\xbd\xb2Fa'd\x02\xf4\x04\xeb\x05\xc0(^\xf8 A!(\xc4\x07C!3,\xdc|\x90\x14\x92\x04K!qh\n \x189\xc6CT,B\x03`\xc5\xfa\x03\x86Z\xc9\x83e*\xeb>\xbf\x12\xea@\xa7\xc1\xa2 \xcd=\xae\xc2\x93\xa1\xd6\xc9\xe3\x11S\x89\xe6Cf\xaaCX\xc8Au\x1e\x93M\xd1 \x1b\xb8\xb6,g\xf0w\x8b\x08?\xa4\xa3'\xf4\xe5P\xc6GHA\xa46]\x0b\xd6\xde\xba\x01\x17\xbf\xa3\x17\x13\xe2\x85\xd0\xe5\x81\x0b}{P\x89\x02\xdf\x890\xc8\x1d\x87\x7f}\xa24\xc1bo\xc2\xaf\x05\xff\x1cOI\xd9wZ\xc6\xff\x1a\x14\xc4%i\xd8<|-\x85\xb1\x1a\xff\xca\xa3`&2-\xcfE:\xac\xea7\xc65\xb7$^\xef6\x06\x86J[\x10\xdd\x7f\x9eR\xcd\"Z\xbf\"R\xb1\"^\xa3\"\xb9*\x05>\xff\xe3+O\x18U&\x04\xb5`\xad\x89\xe7P]\xe2I\xeaI<\xbb\n\x12\xbdS3B\xc1\xce\xf4o\xc0\xea]\x99\xe5\x97\xea)\xfdc,;\xb5\xdc\xde/\xcc\x02u9\xa7\x88{\x82\x98n\x0cT@.\x931fK\x0cU\x96Bs\x19C\x8e\xa1X\xb18\xe58\x1e\xccE\x80\xa5Q\xb5Q^\xf8\xd7?\x0e\xc9\xe5\xa0\xb6\x045\x03\xbb\xe5\xd9\x03\xffI\xfb\xff\xd8],\x97m6X\xb5[4\x1b\xbaol*\xeb\x03\xf1X\x04.p\x01#\x83\xdf\x07\xf6\x19`\xa4\x97\xbfi\xf0Q\xd6\xf5\x19!\x97\xebM\xc5A\x08\x1d\xe9\x96\x0fg\x12rV\xd6=mW\xc5\x82\"Z\"\xafz\xcd\xd4\xf5V\xb96)h\xc4Z\xaes\xf2\x86+\xb2\xe6p#\xb0\xd9\xb9\x87\xcd\xe5\x0e\x1b\xa7e\x08U\x98\x08nB\xed\xed\x0c\xef\x98fL\xa08\x17\x95s%\xb2\xbb\xf3\x0dY\xd6\xda\x94\x1a\xefqP\x89'!\x0c\x06\xb7\xf3@\xed\x02~\xb1\x18\xa2V\xac\x0f\xf6\xa7\xa8\xd5\\Mm\x81\xe3\x10O\xa4\xb4\xc7\xe0\x11mSy\x80\xbc1\xfcB\xc1\xdf\x1dv\xaa\xecNM5\x18\xbb\x99\xc6\x1c\xcc\x9d\xb9i\x9b\x05lM\xb4\x8c%I\x99\x80#~\xd1DP\xa5\xc7\xb7\xb2\xb1\x16\xdb\xfe\xbei\xcb?Ar\xb4tA\xcbG\xaa\x95\x84f#p\xe8\xa1\xa9\xcaaF\x8dg\xb9\x8d\xe3\xc6\x88E\xca\xb86EG5lrS\xd0\x0e\xe6\x9f\x00\xa3\xeeF\xbb\xea\x8bzY\xb4K]8\n\x19\xddq\xfc\xc9\xbah\x1fh\xab~s7\x1a\x9b\xd0n\xbb\xd94-\xeb\xd14\xf5\xf0\xbd\xc6>\xcd\xbeo\xcb\xdbm\xcfmS\xe0{\xbauo\x01\x8b\xfb\xa2\xbe\xa3Kr\x0b&v!\xb7\xa4`g\xbbn\xc1NJ\xd4\xb7$.\xb2\xbc\x86\xe9\xee\xa6m\xaaj\xbb\xc1\xa7\x1d\x97U\xb1y\xff\xa7\x10_EU\xa9\x8f\xc1\xb8F\xf2\xc9*\xd9\xa5\\|\x14\xd2\n\xe8~KB8\x18\xaf\xff\xbd\x93\"bU\xd2j\x89\xb8\xf0`\"\xab\xae!\xb4.n+\xb8%q\x1f\xb5\x90\x9b\xff\x8f\xbb\xbc\x80\x19A\x8b\x03\x88\x80\x1f\xdf'\x9d\x8an\xba\xe2t\x87\xfa\xe4m\xd3\xf4\x9a\x85Q\xe2gu\x13\xa3\x94r\x8c\x19\xb6\xaa\x06=\xee`o\xc1\x9e\xe5\xb0b0\x02v\x1d\x0dAU\xef\xe4o\xfc\x13\xf8J[:T\x03\xe0c^5\xdbZ\xe1\xb6\xe4\x82\xec\xd92\x04\xbd\xccd$\xd9\x8f\xe1%\xb6\xc9U\xf0r\x18\x05,\xa6\xbd\x18\x94/\xa8\xc8\xee\xd0\x83\xed\x0d\x13c~\xae\x1b\xbc\xd4\xf0\xc8\xf3\xe1hh9\x1aZ\xe2\xcf\x1e\x0d-\xf6-%\xe5\xe9\xa3\xa1\xe5hh9\x1aZ\x9c_\x8f\x86\x96\xa3\xa1\xe5hh\x99\xdd\xd0\"8P7,\xe1\xec\xa3\\\xa1\x81\xf8\x07\xfe\x07\xbe\xf7\xd9\xa0x`\x01\x9el\x19\xcfM\x13Pl\xfc\xc3\xe7\xd1\x8e\xae_[\xd7oE\xa4#\xfb?\xa1\x83\x9d\xb2\xbe\xcaEQU.r\x98\x87L*p\x85\xfa\x15^\xcc`y\x82\xb2/5E\x88\x19`\x97N.\x8b\xd91\xc0\xce\x9aE\xc5\xc1\xd1\xea\x03\xe2\xb6\xa4ae\x1dr2=\x0b\xa6\xed\x17\xdb\xa5\x8bz\x8e\xf1\xf7\x86\xdf)\xd8\xbd\xf1\x94l7K\xf5\xff}\xb9\xa6]_\xac7\xdd\xa9\nX\x02\xf0\x1a\xc4w\xb6\xb4B\x19\xc4\x92\xe8\x04\xae\x0f\xc1\xf8E`\xed\x861\x85}\xad\x11\xe5Y.\x1a{\xfd\x05\x1b\x0eFb\x88\xf5e\x8f\x9d\xb3\xc7\x00p\xcb7\x1d\xad\xfbv\xc7\xaf`\x82\x17/\x8f\xb7HPD\x94C<\xefyo\xa7\xb4\x11}H\x0c\xe8\x02\xab\xaf.\x96\xeeY\xccUUt\xbdd\xc8\xcb\xe8>'\x8c\x1bk\xcb\xc8\x8c\x89M\xed\xe7\xa2\xac{zG1eM\xce\x16\x1e)\x10\xbb`2\x15B\x1c\x0d\xd6\x97\xa5\x10>e\xbdh\xb9b#e\xbb\x07\xb8/\xa7\xd3\xf9\x93\xc02\x8f\x9f\xe2\x04\xdeE\x1f\x88!\x94\xc2\x96-\x9b\xfa\xdc\xc3\x1fk\xf4\xd1\xd5\xdc\xfc\xbd_0\xe1\xf6\x8e\xc9\xcf\x8e,\x8a\x0d\x1c\xb2h\xd45\xdf~j?4d]< \x13\xc4\xb7\x88\x8a\xd8\xab\x97r'\xd3\x1dX\xba\xd6\xc5R\x7f+h\xb3\x13G\x93\xb2\xda!\xa7\x14)\xee\x8a\xb2f\x8c)Yo\xd00-?2\xa9\x80e\x9f\xbc\xd6,\x0f\x1c\xfa|_\xce\xaa\xe9\x9cc\xd9\x0ba\x18g\x84\xfca@\\\x85\xc9\x10\x96\xc2\xa1\xa6;\x9d.\xaa\xae!\x1c\xfdK\n\xa6r\xbccW\x01G\x05\x9a\xd7\x8c\x1a\x1a\xe9`\xe5\x94\x1a\x9c\xdc\xc1\x1e\xf3fPh\x9fp\x84\x1d\x932\xab\xb2\xeaiK\x97\xe4\xe1Q\x86\xd5\xf7\xb4-\xfa\xa65\xef\x1a\xc2\x08\xe7\x0c\xd3\xcb\xb0xA\xeeEC\xc8HNa9\xaa\x9d\x8c\x15\xdea6\x91A\x064\xfc\x82\xd6\xacVzj\x13=d\xd77\xe0\x91\x8aS\xc0\xe6\x9a&\xfd{;9\x8bu\xb5\xe4\xf3\xa0\xf6\xac\x981\x87\xdc|\xf9W\x8aZs\x1b\xca\x05B\x8d\xaa\xd3\xd2\xad\xf8N=\xb8\x99`\x07\x9dd\xe6\x84u\xc0\x93\xbd\x9c\x0e\xb7\x0e\x97Yd\xae.\x95\x85\xb6\x14\x01\x12\xfc\x13\xe3\x1f\xa0\\`\xc9\x90Zg\xef\x84\xfdk\xcbUV\xb0:\xb1%\xe0\x18\xf6\xcd\x167xF\xe7&\xec\xcd\x12\x017\x97\xef?~\xbe\xbe\xb9\xba\xbe\xb8\xfe|\x15\xf5r\xf8\xde\xb3\xc2\xbb\xd2^2B\xbe\xcc\xa6<0c\x98\x8c\xd9`\xa0E'\xc07s\x91\xd7\xb0\x001\xbb\x89@\xb1s\x118&\xf6\x0c[O\xcf\x0b\x91i\xc7\xe7 \x89&\xb3whM\x8a\xf6\xb6\xec\xdb\xa2\xdd\x0d_77\x8a\xa9c\x04\xb6a\x1e_2\xba\xcc\xff7\x9c\xa7\xb2s\x03\xbc6-},\x9bm\xc7#\xbb\xad\xcfi0\xc9;\xfc\x89\x0f\xf7\xba-\x16\x0f`o\x85\xb3O)\x95T\xca\xd9\x90B\xe8\xd7\xb35b\x8ev\xc2\xf8^\xdc\x97\xf4\x11\xf2\xaa@66\x80\x97!\xa1\xe7H\xcf\"\x7f\xdbS\x9e\xd3{<_\xfeK\x9c-\n\xcc'&Hm9\xf8\xf7\xf9\xa0\xb2K\xdd\xd7C\xd0s{\x99&\xd9\xaf\xf8\xbb\x92O\xb9\xb4\xc3-\x03\x03\xa4yH\x89\xf1\x89-_\xd6w\xa4\xdbr$\xe1\xe9\xaa(\xabmKO\x99>\xb8\x81\xe0\xfcqs\x1e\x13\xf5W\x9f\x7fO\x96\x9f\xee\x1b\x1f/\xae\xfc.{\xf3\xd1\xab\xff\xbe\xfc\x98\xf8\xe8\xbb\x8b\xcb\xdfc\xd2?\x87\xeft\xb9\xef\xa1\x9a\xdb!1d=\xd9\xd6\x1d\xedS\xfc\xf1\xee\xe4\xda=\xb3\xdf\xac8\xd4a\xe7\xf1\x00t\xd8@\xab-\xa6\xd0\xa0\xdd\xb0\x85\xb1\xbba\xbfi\xdd(\xd6\xcf\xcdt\x92\xbc\xc3\x87\x92g\xd7ZB\x92\x93u\xd9\xf1\xdc2B\x0e6-Y\xd2\xaa\xd8\xd1\xe5\xc0g*cl\x1b\xd8\x8c\xb1\xdf\xbc\xe3\x1f`\\(\xb7\xec\x9b\xa2H\n\xb7\xd0\x07\x0f\n\xea\x07\xf8Ni\xbd(6\xdd\xb6R]K\x01\xbe\x82hl.\x08\xd4Y\x84\x0e4P\xad\x16\xe9\x1f\xe8\x9ft\xdf\x91!\xea\x9f'+hVr\xd8\"\x85\x92\xec]@\x95\xb9\xa2\x88 \xf6\x05\x04OJ\x8c\xa9\x04e\"\x82\xf2i0yv\xafr\xe0\x83\xf9J\xdc\x8dp\x88\x9eC\xcfo\xd32rO\xa0+p!\xfb:iV\\\xb3\xe0\xcbP\xf4}\xb1\xb8\x07\xaa\xca\x01\xc8\xf69\xaf\x0ee\xec8\x83\x9a\xd8+\xfc>\x12\xab\xd8*\xa1\xa4\x86\x1dV\xfe\x98d\x86\x85\xc8]6I{6\xc5\xeeg\x9b\x88\x05\x99V^\x06\x0dow\xffD\xfe\x13\x89\xf1\x96n\x0c\x85w\xee\xf6\x90\x18v\xa4\x91,=\xc0\x1f\x7fgr\x8f\xd1\xf0\xff\xa1E\x8a\xc6\xe4\xf4\x1bO\x0e0\xb4P\xa1\x98\xdc>}\x05b\"\xf5WF\xea\xe4\xf10\x89!\xd2CHD=\xd8&e\xbf\xc6J\xae\xcc\xc9\xb9_\x01\xcd@\xcd\xa6#fS\xd1\xb2\xa9H\xd9d\x94l\x12B6\x19\x1d\x9b\x88\x8cMG\xc5\xa6#b\x13\xd1\xb0\xb9H\xd8\xd8\xb9\xef\xdf\x0fa\x04,`]\x11rAm{o\xc8\xd7}\xa3^\xf7\x81x}2\xb4\xebA\x90\xae\x07B\xb9>)\xc2\xf5y\xa2[\x9f\x01\xb2\xf5\xd0\xa8\xd6\xd0Mrd\xd9\x13\xb2F\x8b\x9e\xb9%O\x02\x90\x1d\xa3\xd4Ii\x979\x91\x01z\xbc[P\x1eN\xd8}\xa2\xbf\xa7\xa5+04\xeb\x16\xe7\xda\x9c\xf7\x85\x95_|\xafZ\xd1\xa4\x8b\xe60)\x9e\xa8\xafr9d\xd1\x81p?\x98\x9b\xdb\x02\xf3w75r-\x89_19\x94g\x86\xca\x1f\x93\xaa~\xf8\xa7J\xbbE\x127 \xd1\xceJ\xe4\xb9\x98j\xf4\x8c+\xaa\xb1W\x8e\xb7T\xe4f&\xe8\xcfS\xfc\xf4xG\xfd?xG\x8d\xcb\xc1\xa9)\xef\xdc\xd9\x0c\x16.=\xe0\xa5Y|=S\x8b\x94\x1eo\xcb\xc7\xdb\xf2\xf1\xb6\x8cl\xa8\xe3m\xf9x[>\xde\x96\x8f\xb7\xe5\x7f\xb3\xdb\xf2\xac\x85A\xc7\x16\x05\x0d\x14\x04\x9dtU\x89\"MET\x89Q\xed\xd3\xbd1\x12\x0f\x0e(\xae\x8d\xf5S\xaay\xfa+y\xc6;\x9eT\xc1\x13\xdf-3V\xee\xdc\xd3\xfd\xdd\xbcb\x9bWx|\x17j\xb7x\x8dN4\xde\xe7\xff\xf8\x1d~\xdc\x96D\x84\xcf{\xb1K?i\xb9\xfbeq\x0d\x19~:\x84zZ\x06+\x1c\xfd`\xfc\xf8\x97\x86\xf9\xeb_\xb2Z\x1d\x1f\n\xba\x9f\x07>^\x0c\x84xl \x04\xb8\x03\xdc\xa7oT\xc8\xc6 \x99\xd0\x14H\xc78\x02\xf3\xef\x87\x8b#\x08\xb1r\xc9\xb6\x0e.\xbc!\x18\xe7tX\xfcSQ\x9d\x92\xc9nt\x85%4\xf9\x84\x96<\x1f\x85\x15k\xf6\x1d\xd3\x1f\x81:\xb7\xd4\xf0]\x8b\x10R\x05\x03\x93E\xc6\x85\xca\x17\x01\x88;CS\xe9\x8a\xbe\xecD\x0cvC\x8a\xcd\xa6\xda\xe1xT\x98\xc0+'\x80U\xe0\xa6\n\xf1\x80\xf1\x9e\xf7\x13\x1b%\xfa.@\xbfW_\xb7\x95\x81AKA!QY\xda\xe7\xe8P\xe3\x1f$\x07\xcf\xaa\xef\xd4\xdc\x1c\x80\xa4\xbb\xe1\xac&\xf3x-T\x06Q\x07\xcd\x8a\x16\xb5\xe4\xf1\x89\\\x04\x01lGv\xb1V\xda\xc4\xde\xba\x819\xc4mD)\xe5wBO{#5\"%y\xe2\x0f\x0e\xc5y\x86\x96\\\xa6G\x7f%l\x14\x19_\xba\xc7!e\xa1w\x03E|B\xdd\x1f\xbe\x9cO\x88\x9b\x03\x14\xf6\x89w\xffd%~\x86\xd6;\xc5~d\x13%\xb5\xca\xdb\n\x12\xab\xce\x97\xb1\xf1h\xec5\xccT\xb1\x87\x8e\xc6^\xb3\x1d\x8d\xbdGc\xef\xd1\xd8{4\xf6\x1e\x8d\xbd\x93\x8c\xbd\xd7\xc6\x96\xd2N{[\x91\xff\x9b\xf3\xaa\xc56v[\xd2\xed~\xe6E\x00\xccv\xc2\xa4\x039 lm@\x00\x8d\xce\xb5\x02e\xec2w.,\x7f\xeaY\xffY\xa1\xdb\xe1\x08\x127\x92\x00\xd6\xd1\xa89f\xbe\xba\xe9o\xf8\x0f\xa3l|\x96\xfec\x8cBQ6\xb9.\x96\xcb\xb6\xd3\x0c\x8f\xb7\xdb\x9e\xeb\xbc\x1aWV\x10\x87UH\x8f\x84\n\xa5\x8a\x12\xa9\xea\xa5\xb4\x92\xa8\xae\xc1\x00\x86\xea\x98\xc3F\xd5m\x8c\x9a\xb7\x90\xfbv\x88\xd0h\xd3\x15b\xaeB\xfbA\xcdRs\x99\xa2L\xf3Sh\x9c\xf9\xd6$\x8f\xdd\xc8\xfe\xd6\xc7\xda\x87\\k\x90 \x98a\x13\xd2\xed@\x9e\xdd\xf8\xe1\xea\xa2\xaa~o\x16L\xe1\xeaDy\xe2\xe4\xfd(R\xa3\xdc\xb4\xfa{\xc3\xbbv\xe2U\xbf\xdc\xb1\x08\xc1!\xbe\xaa\x8a;\xbe\x87Uv\xd6F>(\xe5\xacx\xba&\xbbf\xab\xeb^`Z9S\xd3\x90^\xc1[\xae\x8dJ\x8c\xa7W\xf7\x96\xd3\xd9) X8\xb3F\x9eT\xc3{\xef\xe5\xbbE\xe5\xeeB\xdc\x7f\xf5\x1a\xeeP\x8cZ\x14 We\xbeym\xef;\xe7\xdc\xe5\x15\xbce\x8ch\xa8\x88\xf7\x87\xba\xdaA\x91\x8a\x95,\x8c\xdf\xb4\xbc\xda\xbdIP\x14\xf9\xbf\xa5vM\x12x)sV\x90\xfa\xdd\xe1\xdb\x90`\x0d\xd2%m\xd7\\\x81\x17\xbf\x81\x8aX\xd4t:\xa8\xe9\xa7\xe2\xb6\xaf\x19>\n\xe0\xe0\xc4 \xa8\x97S\x03N\xbes\xf3\xe2\xab91?\xcem[\xf2\x9d\\\xf6\x7f\xef\xf4\x97t\x8e\x06\xb4\x89\xa5\xae\x1a\xa34t\xd0E\xb3\xd9\x11\x953B|5v\xc2O\xda\xa9\x9c\x1a\xa3\x14A\xaf\x1aM&\xc8\xc5\xa9*\xb5E\x8e)\xd8\x96ZM<\xaa5\xd9\xa3zM\xfc\x1f}\x083\x82|#\x11\xafJ\x10-\x117\xb6\x8fW\xbd\x11b\xd3\xf4o\x9c;\xac\x1f\xafZN<\xaa9I\x9dED\xcd$I\xf38\x8f\xaaN\"\xea:\x99[e'^\xb5\x9d\xa0\xaa;\xc1\xd5w\xb2\xf7\xf9\x1d\xaf\xce#\xc4\x84\xaa\x8b\xaa\xf4d\x92Z\x8f\x10\xb3\x14}\x12R\xf6IP\x8e\x92\xa4\x99\x9a\xa0\xf8\xfb?5\x8f\xf2O\xa6^\x00\x10ze\x8d^\x02\xc8\x84\x8b\x00\xd6\x0b\\\x0d\xbc\x97\x01\x82^\x08\x88\xefR@fX\xb8\xf9.\x08$\xe9\x92@\xe2\x17\x05\x82\xd8 e\x1b\x7fa\xb0\x08\x0d\xd7\x07\xeb\x0f\xd8\x1d\"\xcfH\xa6\\\x92lg\x1a\xd7\xce\xc1D*1\xd1\xd2r>J3\x92\xc7c\xa6U#\xd3N\xa6\x0ea!\x07\xd5yL6E'\x1cy\xda\xb2\x9c\xc1\xdf-\"\xfc\x90\x8e\x9e\xd0\x97\x03\x12WH\xc1\x95E\xc7-\xdd\xe0\xa8\x96\x84x\x0d\x1ay\xa6\x1e\xdf\x1eT\xa2\xc0w\"\x0cr\xc7\xe1_\x9f(M\xb0\xd8\x9b\x90'\xfd\xa3\xfd)/\xff;`\x95jP\x10\x97\xa4a\xf3\xf0\xb5\x14^\xb8\xa4+n\xba\xc7f\xc2%W\xbc\xf5\x91\xe9\xaa]\xf2\xf5v]|c\x17\xc1\x9b\x8a\xd6w\xbd\xe3\x91\xb0k\xd3\xb8\x15i\x8c\xf1C\xdf\x86\xab\x10Q\x9d%\xdb/\xe4]r\xdd,\xb7\x15\x15c\xec\xd2\x07\xf9o\xe9\x14\xf0m(l\xe4IV\x13\xe3EA.\xc9\x1d\xe8\xf4\x99i9\xd9h;\xd1\x19\xd9&\xb8U\x84j\x01\x1bc\x94|\xf6\xedk\xe2\xdd\xdb\xc4Sq\xe9x'O\xd8\xd1\x169\xe7N\x9e\xb8\xabs\x04\xe5\xf4}\x9d+?,#\x1dr\xae\xfd\xf5$\x8c=\x199\"%{\xba3\x05\x888\x1f\xecYL\xfaJ\x10\x83\xaaW\x0f\x19oL\xf5\x9aRc}E\xcc\xa8!#j\x8ct\x9a\x01\xd5\xbf\xf5f6\x9e\x8e7\x9d\xfe\x95\x0d\xa7\xe9\xdb\xef\xaf/\xce\x9d\x0f\xefS\xbc/\xf2\x95D\xf5r\xe8!\xd3\xd7\x02`\x9c\xed\xd6\xa8\xeb\xd9\xa7\xbb[,9f\x8c{\xa8\xc7 \xb5%\xcbeGNXW\xae\x8e\xc5F.\x92\x0e\x82\x8e\xf3\\\xcd\xf3\x8e\nF\xfc\"\xfdh\xa2OV\xd1\x88o\x15\xc8\xd1D\x7f4\xd1\x1fM\xf4f\x8b\xcf\xefx\x95\x10!v4\xd1\x1fM\xf4G\x13=\x89+\x9b$`\x1e\x1d\xaftZ\x84\x8e&\xfa\xa1\x1dM\xf4\xffF&z\xe7\x12\x93d\x93\xcf\xbb(\x053\x05\x18\xdc q\xfd\x1d\x955$\xd9_VVh\xbf\x16\xb9\xed\xef\xbc\xdf%\xdf\xccR\x8c\xbd\x83\xe5\x1f\xaf\x88}\"-\xe1*\x0ftS\xe9\xa9\xa6eVi\xf6\xb3\x18\x10S\xc9\xc4\xdb\xecf&\xecD\x8b\xa6\xee\xd9\xf6\x17\xf47m\xb3\xe0\xc5\xbe\xcdrt(\x87vE\x94\x84J(\xf1\n(\xb1\xca'\xb1\x8a'\xd1J'\xc1\n'\xd1\xca&\x91\x8a&\xf1J&\xf1\n&\x91\xca%\xa9\x15K\xfc\x12tJ\x85\x12\xbc\x1e\xc9\xecuH\xf6U\x7fd\xce\xba#\x07\xaf7\xb2\xd7:#{\xae/\xf2$uE\x9eW=\x91'\xac#r\x98\xfa!\xd2Dd\x1fl\xf6M@\x1cN\xca\xa2\xa5\xa6\xf8\xef\x1d\xaf\xce\\\xf4\xdb\x96\xab\x08\x92\xe0\xdf\xb4\xb7.\xa0\x00\x89\x94!\xe2td\xbb\xf0\xbc\xac\xd9\x17\xcb\x19\xe4\xc7\x9e\xeb\xee\xd5\xaa\xf1\x86N\xf2\xeb\xdd\xc6\xb0\xb3j\xe7\x9e~\xe6E\xce\xbb\xf0Y\x17:\xe7Bg\\\xf0|\xf3\x9em\xc1s-p\xa6\x85\xcf\xb3\xf0Y\x168\xc7R\xce0\xfc\xfc\x9a\xf7\xec\x9a\xf5\xdc\xda\xc7\x995\xd7yu\xd0\xb3jo\xe7\xd4\x1e\xcf\xa8\x83\x9fO\xcf\xe7lz\xa2s\xe9\x10g\x9283&\x94\xac\x12\x05\xaa|\xa7\x05\xdc\x96\xf6s\xf3\xeb\xed\xaa<\xd6*\xf2\xfd\xa0\xaev\xe2\xe2&\x88\xccQ\x90\x07\x08\xea\xf7\xc0\xf4rF\x86\x81\x02\xea\xef\xa0\x9eA\xd9\xc9I?\xd4\xe6\xe15\x8ed\xc1#>f\x8d\x96\x1a\xfd\xa2Y\xaf\x9b\xda\xa8\x15\x0c6\x82\x11\x0c\xc2\x8b\xf0i\xcb\x8e\xad\xea\xa5j_\xb3%\x05{\xd9 \xbc\xf6\x9d\xb8M\x1b\x03\xe6c8W\xccB\xfd\xae\xa2cr\xb9y\x10\xf3is\"6\xd3PYK7\xce\xc9\x8f\x1fJ\xdfW;Y\xfc\x9e}\x0d\x82\xb6xDP\x93\xaeQ\xabT\x9ag#s\x93\xcb\xff\x95<\x84\xee`I\xdco/\xacFI\xb6(\xa3\x83L\xb7\xfdA\xf2\x0c>7\xdf\xfb_\xd2\x9f\xee\xdfS\xe9F\xce\x9c]\x05\xe5\xcf\x927\xd2Ha\xcd^;\x17\xc2\xa5\xa4\xedp\xc0\x80\x089#\xe4\x0f\xa3\xdc4\x08$\xcd\xa2\xa8\xd1\xe2\xe0\x903B.\xaa\xae!\xbc.7)\xd8\"\xbcc2Q\xab\xe8\xdc\xd1\xae+\x9b:\x96\xd0*\\\xc4\xce\x94%K\xb9g\x05me\xe7\xec-q)\x8b\xe6\x1b\xc5\xea\xcd\xaa\x94\xfc\xb4Z\x95UO[\xba$\x0f\x8f\x9b\x96\xae\xcaoL3m\x99\xfe/\x8f\x9f\x8d\xae\x0c\xf8\x18\xdb\x98B>Q\xc63\xdd\xe7\x1b]l\xc1O\xa3\xefL\xbdD\x9d\xfb]\xbaE23>\xca\x1c@\xcc,J\x0bq\x14\x97\xd4\x1eS\x15\x18\xe2|\x17)=8\x92eN\x85\x86D\x94\x1a\x82(6d\x0c\xd3\xd3\x94\x1c\x8b\x98\xf8\xdc\xd3\x14\x1d\"\n\xa4\xda\x1fw\x12\x0c-9\xea\xdf]\xd7\xc0$Y\xd2\xfb=\x9b\x0f\xe1\xd3\x82\xc3\x80\x7f\x88UY?\x90\xdbb\xf1\xc0}\xd0\xec\xda\xc0\x0e^nA\xe0sez\xc4\x91J\x9cQ.\x02\xa0%\xdf\x07\x95[\x9b\x13\x9a\xfb]\x05\xf9\xf2m\"\x12\xf8\xdc\xa2\x05<\x1dZ(\xa7\xbd[8u\xf8C\x98\xddU\xdb\xac\xf9\xfe\xe0\xe5BW\x05\x8f\xd8h\xb7\x0bnO\xe4\x82u]\xb4\xdd\xbd0(\xca\xd6\xf5E\xbfu\x00h\xfe\x19\xb8T\x96\x8br\xa5\xd5}\xe5\xdb^.\x8f\xec^\xadR\xd3\x92\x7f\xb1\x13\xb3p\xc8\xc1\xed\x95M\xa9\xac$\x9c>n\xdb\x03\x07\xed\x05\xf9\xf4\xf6\xcd\x87O\xbf\xdd\\\xbe\xff\xf8\xf9\xfa\xe6\xea\xfa\xe2\xfa\xf3U\xb0\xaa=\xfe\xc6\xc7O\x1f>~\xb8J~\x1c~s>3a\xe9\xcbc)\x06\x12\x89\x0e\xd1\x9d\x95\xc8\x0b\x9aA\x8a\x97w\xe5\xe6\x85\xf3m\xcd\xd5\x16\x87\x18\xac8[\x19\xe7O\x91\xc9\xc4gB\xfe\xd56\x8bi;\xab&E{[\xf6m\xd1\xee\x86o\x8d\xbb\xa7\x95\xd0\x85M\x94\xca\x11\xfc\x86\xf3\x03\xbf\xe1\xdc\x94\xb0\xcd\x8d\x93c\xd3\xd2\xc7\xb2\xd9v\xd5\xce\xfd\x00\x06c\x94\xc6\x99\xf8\xbc\xae\xdbb\xf1\x00j2\x9c\x11J \xa2R\xa2\xe1j\x0c\xbc\xae\xbf\xe3\x1c\xc1\x8c\xb1\xc5}I\x1f\xc1\xe4\x03\xd5\xb9\x19C.AQ\xb9{\xbf\x07\xd4l\"\xf8\xbf\x84\xf8\xe5'\x12\xdb\x00bhj\x1f\xc0\xbf\xcf\x07MP*\\\x0e)\xa7\x84z\xbe8\xbc\xe2\xcf[\xf8\x01M]u\xb5\xa4Rr\x88|V|\xbf\x95\xf5\x1d\xe9\xb6\x0bF\xe8tU\x94\xd5\xb6\xa5\xa7L\x82n\x00\xc7\x95>\x87~\xf9x\xf5\xf9\xf7\x041\xe4>\xfb\xf1\xe2\xea*\xfa\xd0\xd5\x7f_~\x8c>\xf4\xee\xe2\xf2w\xbf\xb0L\xe3/ELz(\x05:\x19>{\x87`Q\x93m\xdd\xd1\x1e\x87\x01\xe0\x9d\xb2)\xb3{c\xbf\x19\xd2\x85j;\x86#\x8d`\xf9W\xdb*\xde\x01\x9bn\xbb\x03\xf6\x9b\xd6\x81b\x97\xa9\xaa]\xb9\x94\xea-\xef\xea\xa1\xdcl\xe8\x92,\x01\xc7\xba.;\x0e\x1f\x16\xb2\xa5i\xc9\x92V\xc5\x8e.\x07\x0e\xe3,\xb1\xc5\xb5Yb\xbfy\xc7,>\x1f\x1f\x9f\xec+\xa0\xcb3W\x80\x82\n\xf5\x01\x04\x00\xad\x17\xc5\xa6\xdbV\x8a\xbe\x94y+($\xcf\xbfL%\x9f-\xef-\xfe\x8d\x03\x85\x93\xee;\xcd\x9a\xc1\x01e\xcdJr/`\xee\x92~\x03\xb8\"Pk\xdc\x0b\x9e\x9c\x00\x81\xd8\xb4%q\xa7Wp\x1fi\x10\xf0\x7f\x156u9\xa8\xc1\\ \xb4k\xe3A\xd3f\xa0\xaf\x01f=\x80E\xb2\xe7\xf2B\xd9\x16\x9a\x15?\x19\xf9\x84\x16}_,\xee\xe1\xc0+\x94\xa9\xa2i!\xba\xce\xdc\x02\x86\xc8\xe4\x9an\x8a?\x1b\xf6\xc7\xe5\xf2\xb2^5\xc9\xa6#\xe4&3r\xf6\x15%\xb5}\x8a\xaf\xfc\xf1\xce\x9ap'8H\xbcw\x03\xc6\x96\xf9\x18\xb9\x91\xd6\x1ba>\x85\x7fm\x9aV\xff\x0c\xd5\xd3.?CX\xd5\x8c<\x0dD%_\xda/\xe9\xbc\x81\xfew\x93`\xf9\xcbaN\xa3*\xb9\x13\xb7\x15\xfeS\"{l\x81#La\xfd\xb3\xd7d\xaf\xb7tq\xff\xe3\x0f\xe2-\xf2H\xdb.\xd4\xafLF}S\xaa\xad\xeftb\n\x07\xfd\x05R\x9a\xfe\x97\xe2\xb6\xd9\xf6\xc3\xca0\x89\xa1T`\x04|\xeep\x93ey\xcb\xca\xa3\x9d\n\xa2\x96D\xbd_\"\x0c\xcc\xfa\x10\x89>1\xf6\xb7H\xe6\xe3*\xe9\xb3\x94\x0f\xa3\xcca\x1f&\x99\x91\xc1\x9co\xd4\xcf\xa8\xf9\x19\x90\x10\x7f\x08\x1b\xc9_\x83\x9f\x81\x8c B\x18\xd0\x87\xcf\xff\xff\x9e~\x93,X]k\x13\x86\xf8K\xf4si\xf0x>\x16-\xbbE\xf2/\x8f\xb4\xf4\xaehy\xdc\x862z\x95q\xff\xc8%S\xdb\x92O\xba\x04Q9\xa7\xa1p\xd2\xc1:\x97Ap\x0el@\xd4\xd6gw\x8aX\xf5B=\xe7Z\xf2\xecK+\xa6\xcaN\xb3\xdb\x81B\xab\x91C-v\xe8\x98\\\x9c|\xba1,\xd92\x97d\x93\xcb\xb6\xc6\xf9O\xcb\xe8 \xd2;!A\xdb\x9b\xc7\xd6\xf6\x9c\xacl\xcf\xca\xbe6\xda\xb2\x16\x17\xabW\xdaW\xe6\xect\x13\x19\x9b\xb6\xf6I\xbb;\xba\xb3\xb3v5\xbe\xa3\xa3\x0c\xa7\x11\xcf\xde\xc9\xcfe\x17?\xc7\x1d|!\xc3\xb2\xd8\x84\x01\xceT\xdad\xea\xe1\xd8S\xf7\xe9\xd8\x0e\x06\x1bI\xb2f\x90~J\x8e7\xc7Z\xa6\x8f\x843l\x82\xb1U3\xaej\x04S\xcc\xac\xc9\x87Z\xdch\x191\xa7F\x0c\xa9A\x13j\x86\xf14|\xaaM1\x98\x12\x03\xa1\x140\x95\xee\xd1H\xfa\xac\xcc\xa3\x874\x8c\xcej\x12\x0d\xca\x92\xab\x0d]\x8c\xb3\xa9\xb1\xdb\xc0H\xfd\x1f3\x8f\x08r1\xeb\x9ai\xce\xc4mm\x82\xd4\xcc\x067\x93j\x92\xd5M\xbc\xe2aO\x9a<\xe1\x87Y\xecp\x86\x04\x88v'\xc7\x80\xfce\x18\x8fF0ydsZ\xefBC\xca\xb2\xe7y\xc9`\x83\x18i\xe3S\xef&\x996p6\xcc\xd5\xc8\xb0\xfa\xa1/\xfa\xad\x7f\n\xe9\xc4\x1e'\xe5\xd2\x98\x1f\xcb\x1e\xe8a5\xcb\x14h\xb3\x97h\xbaI\xb3m9\x1eC\xbb7\xaf\\1\xa6AI\x16\x8b\x1abJtf{\x0f&\xc5\xe8\xa8R\x84Q\x84DpL!\x11E\x0e1\xbe\x1c\xa1e\xd1\xb2Dr\xfa\xb8\xc7\x1a6#\xa3I\x15\x0b\xa3\xd7+cyr\xf8\x8e\x1bJ\xf3\x17\x111\xa3*.l\xbd$\xdd\xa6\x8a}\xc1 v\xd6+\xfd\xb5d-\xa8\x9b\xc1\xbd+\xd4<\x01<\xc7\xa0\xeaF/\xb6\x9f;\xe1|\x15=pco\xb3\x12s+\xees\"\x17\x0c\xf8}E\xda$\xa4\xd3\xd2p\x16?C\xfc\xab\x18#?\xf2\xd5\xc4\xb9\xf0C\xc4n\x9bJ\xba\x18^\xe6p\xe8rQT\xd5\x0e\xd4\xee\xbeQ\x18d\x8e \xbe\xb1!\xcfG8m\xd4\xc4\xee\xd0B8\xc5;\x06c\x9e\xb1_eH\x11`\xc3O\x87\xa5;%E\xbd$]\xb3m\x17tPq\x0cr'\xb4\xe4\xa14\x00]P\xe1\x08\xdf\xb1\xeb\"\xd0\x05c\x18\xdb[\xc6\x8b*v\xc9\xfe\xf2\x0c~\x95\x1dH\\9\xf9w(\xc3O\xba\xa2/;\xf6\xf9\x03\x86b\xb3\xa9v6\xd2\x0d\x91W|L\x02\xbaQ\x88\x07\xc4\x1b\xc8\x86\x0f\xc9\x08\x8bS\xf6\xe8\xf0Mqk\x10j\x92\x91\xc6+\xfd\xb3\xe0\x1f\x82\x99\xfeq\xf8RT\x9a\x1f\x0e\xbf\xb9\xe1,\x05y\xb9\x16\xa1\xc9\"\xa9\x9der\xb2\xa4\xd5\x89\x9cNa\xd53\x98\x10\xd6\xbf\xdf/\xaf\xae\xbf\x0b\xcf\x89k\x13\xfa\xed\xed\xbb\xcb\xf7\x97\xd7\x97\x1f\xde\xe3A\xfe\xbe\xe7P\x07\x87\xfd\x90\xe5\xdc\xf0?\xc2yW\xcf)CQ\ns!SQ\xe0\xfd q\x14_\xc7\x91u\xdcL|.\xcc\xc6\xe0g\xd4?\x18\xff<\xb9\xfd!V\xe2b\xf0\xa8\x0d\xf9\xbb\xd8\xbfx\x02\xb3\x13%\x0b\xf9\x07Vv\xa4nz\xd2\xd4/\x8c4S\x1e>\xa4\xa5\x18\xff\xdd2\xee<\x1a\x01d\x8e\xa5\xd8\x92\xc8)\x1d\xf3\x05\xf6\xf5\xce\xff\x88\xb3P\xec0\x06\x16MU\xd1\x85T\x83\xf9\xa3C\\9\xb9/\x1eM\x01\xcf\xe8u\xec\x93\xd7\"\xdaD\xcc_y[\xd1\x1b\x11[>\xea\xf4wN\x13\x17\xd1\x1a\xc9B\x82<\x84\xe6\xdd\"\xc1\x8c$\xc8\x13H\xee-\x12\xceN\x82\x00x\xf1@\x84ry>XT,r\xbd'\xf2\xe7\xcc\\\x9d|\x93\xa9\xc9g\xe6]9hI\x8a\x9f\xf4f\xdf$'\xe2 \xa1\x86\xc4&\xb8\x9d\xa0\xd1 \xe4\xa0\xe3\x1c\x11\xab\xe0\x12\x89\x8c2\x06\x88'\x87\x1d\xf1\x84\xe8\x05\xe2F0d\xcd\x04\x1a\x82%\xdb\x01\xa7`l\x88\x16N.4h7l\x83\xc4\x86\x9a7\x9a\x91\x01\x1c6\x19w\x14N\xc0\x84+tI\x12\xb7(!\x92\x16\x01\x86\x90\xc32CE\x86\x12qt\x84\xdd\x1c6\xfb\xf8}:j\xfe\x8e\xda\xf9\xe3\x13I\xc6D\x90y\xe8t\xb8K\xdb}\xd0Y=\x9f\xcc&O8\x0b#\xa58F*i\x0eR$:y\xca\xf9\xf0\xca\xf8$\x02X\xca\xad\xfcy\xc2E\x1fI\x99\x961\xa3\x9e \x08]b)\xe3\x9b\xb0\xecc\xc6\x97\x1d\xf1\x86\x93 D\xbe\x91 g\xc8\xa5\xe2\x9fm\xb1\xd9\xd0vP\xa5\x0b\xd2\x95\xf5]\xe5\x8b\x8b\xafu}\xa2k\xd6\x94\xd0o}[h\xfe{\x91\x86\xa4\x1f\xa2\x9f\x9fW!\x9d.\x88i\xf0\xae{x\xbdm\xa2i\xf832\x13\x06\xcd\xe1\xc0\xf6:\xce\x87E#\xd3\xf1hd^L\x1a\xc9+X\x12^\xc7q\x1852\x1fN\x8d$a\xd5\xc8\xacx5\x82_\xf6\xbc\xb85\xa2\xe67\xbf\xe2\xd4d\x0c\x9bE\xaf\xd7\xaaG\xe9\xcc\xff\xf5\xcbe\x85\xb1m \xf5\xb3\xc4\xeb\xf3\xa3\xdb\xc4\x99\x01s\xeaH\xde\x08\xcawX\x89\xfd\xcbl\xafj6\x03\xf6,C\xe4\xf8l|\xb3b\xcd,\x9c\x19\x861\xf3\xb9'Q\xd7d\xe0\xba\x15\xbal\xf9\xc0]\x11}*\x03G\xd6\x870di\xdd\xcc\x80\x1d\x0b\xe2\xc6\"\\Dn\x0c\xf3\x86a\x93\x00\xe8+m\xb6<\xcam\x9f\x0d\xf4\xf2\x87e\x13?l\xcd\xcf\xc4l\xe0\xae\x99\x80]8\xa8\xcb\xc7\xff\x1c`\xae| \x97\xe7\xe3\xc9\x16]s\x02\xb7\"\xa0-/`\xcb\xc7\xdb\x14\xa0\x16q\xfc\xb7^\x90\x96w\xce0\xc4F\x0e0+\x19\x94\x95\x08\xc8J\x07ce\x03\xb1\xc2\xea\xd2l\x00\xac|\xf0\xd5s\x02^=)\xe8\xea\xd9\x02\xaez\x0f\xd8*\n\xb4\x1a\xa1\xc5\xa0'\x9c\xaf\xf0Q\"\xf2&\x15P\x95\x06\xa6J\x03R%\x82\xa8\x12\x00T\x89\xe0\xa9$\xe0T*h*\x150\x95\x04\x96\xca\x03J\xc5\x8cu\xb3\x02\xa4\x82u\x9f\xd0M3\x15\x18\xb5_P\xd4\xfc\x80\xa8'\x02C\x1d\x00\x08u\x10\x10\xd4\x13\x02\xa0\x9e#\xf8\xe9\xc9\x81O\x87\x05=\xcd\x1c\x8e\xae\x91\xccG0a*\xf8x\xe4\x92\x13\x9aN\x92\xc2\xd3\xa1\xcd\x8cX\n\xa2\x95\xfc\xc7\xc9T\x94\x12\xc1\xf2\xc9\xfa\x10J\x19\x06\xb4\x10*)\xdf|\x96\x83\xd4\xf2z\xb7\xc7\x19\xa5\x13\xd0G\x13\xc7\x93\x0f.\n@\x17\xa2\xb8\x9dYY\x8f\x81\xe6\xfc\xdeH\xf7/\x16\xa5\xb1#\xf6\xc2\x85\xf6<\xd4)\xf0\xa0\xb4\xc1\xcd\x96\xcdu\x06(\x90\x9fc\xc7s\x9c\x8b\xbbD \x904\xe8\x0fq\xb6Q\x1e\xec\xc7k\x83\xf6[\xa0mv\xdd\x1b^\xd0\xe89\x11\xa3f\xf7\xee\x15~\x1e\xcf\x1fI\x85\xf58\xab\xf2\x140L\x0f\x13AY\x99@&:\xd6\x98\x14%\x87\x1e\xf7\x04\xb9J\xf2\x12J\xbb\xdd\xef\x05\x9d\xe8v1B(\xb9\x84bc\x19\xb1\x94\xb9c\x19\x05\xc1IX\xf0L\x07n>\xec\x86\x83m\x04\xc1\x10\xe4&\xdd\x8d\xdb]TUn\xc2\xa6c.\x9b\\\x9f\x7f(\x97\x0d!\x9b\x82\x1bu\x0c\xbf\xb8\xc1\xcb\xf0\x80\xbaD5\xfcOE\xa5\xffM\xf9\x9e:\xe9\xfd\x97,\x8c\xba.<\xd0]\xa2j\x93\xa6\xad\xfd\xaf\xfda>P0\xaa\x08\xb3rK\xfbm[\x83R\xf0\xb1\xb8\xa3\x12\xdfpV\xd3o\xfd\x0d{\xb8o\xc8-\xbds.\xc3_\xb6\xb4\xdd\xc9\xf2\xda\xeca6)\x94\xac\x9b\xae't\xb5*\x17%\xad\xfbjwF>\xd4\xd5\x8e45\xbf\xdf6\xab\x15X\xd4\x18\x1b\x16\xc1\xee\xbe\xd9VK\xee\x83\xa3\xbd.\xad\xe0\xa5\xccY\xd9\x96u\xff\xf3+\xff\xbc8\x02K\xb0\xc6\xa7\xa6\xde\xae\xb9\x1dM\xfc\x06\x16\x9b\xa2f\xbcq\xa3\n\x87\x06\xc0DZT\xb6u\xf1X\x94Uq[Q\x0fl\xa8\xe25\xb1\xe4\x041\xda5\xd9\xf2\xa2E\x0f4{\xb6\xec.\xdc\xc9\xab\xcau\xb9\xf7\xb9\xe3\x9dH\xd9\xde7}Q\xb1)\xbc\x05\x93\x9d\xac\xc9\xce\xf7\x91\xb1\xdf\xe0[a\x7f\xb5\xe8m\xb89\xc0\x9e\xbe\x15\xa9\xe8\xaa't\xbd\xe9w\xa4\x14\x80\x0da\x8d\x06g\x08li\xe8\x88\xcd\xdc\xed\x0ej\x95\x17\x9b\x8d\xa9\x99o\xeb\xfe\x86\xf3\x89\xcdL>:I#\xc8f\x81\xef\x99\x86\xf4\xed\x96\x12\xcb\x00W\xf4\xda\xa8\xf9\x83b!M\x82B\xa29`B\xe8I\xaa+\xf6Ls?\x0cQ\x1b\x90\xcb#MR9\x9f\xf0\xe7K\x17\xdbf\x0d\xa5\xa9+\xb0G\xd1\x85\xc2\xc4\x0c_\n\xfb\x18\xceL8\x9cEN~)v70K\xe6\x05\x8f\xa94\xe8U5\x7fA\x041{1\xcaa7\x16-\xc5w\xa4E\x89\xf5\x03\x15\xe7H\xd3.i{\xf67{(We\xbd\xa0\xaf\xc9\xa2\xe9\xd6M\xf7\xa2[>\x90\x97g\xaf~T\x0f C\x9d!\x87A\xd0\x0eI\xd28\x1ft}K\x97K\xe0\xe3\xee\xd3\xc77\xea$\x13\xf618_\x94\xe4\xd0\xc8\x0dk|F\xde\x8a\x9bH\xb2>\xa4\xe9\"dB\xc26Ff4\xac\x0dx\x98!q\xdb\xb8<\xd6\xc9U,:\x1cN\x17\xa4\x15\xa2G\xa2\x00;hA=<\x15\xd54\x05r\x07m\x1a\xf4\xcb\x03f\x9a\x00\xc5C\xe9\x99\xb5M\xb4\xdf=\xa9\xdf\xfcnm\xf1\x9e/{Hp\xc5\xa1\xc5R\xc0\x85\x93\xc0E'V<\x94\x0e\xe0\x13/\xc4R\xc1\xe5u<\x03\xa4\x0fZ\x10\xd8\x07-\x89\xafhX\x10\x89nJ\xf1L.\x0e0@+\x98\x1a.\x9c\x1c.q\xd8\xa9#\xcaC\x0e\x06\x88\xa5$\x89\x8b\xb35\x1b\x96\x10\xdaL\x88Bh\xfedq\xb1q\xcd\x811\x84\x96\x8f4\x84\x16\xfc\xca'I\xec \x08D\x94^\x11\xc3!B\x0b\xa6\x8f\x8b\xf1<\x05\x99\x88\x12\x8c%\x91\x8b\xceq(\xbbT:>\xcf\xf7F \x99\\2z1\xfc0\x9ePn\x04\x92Q\xbe\x16\xb3&\xce\x88j\x84\x96\x8fm\x84\xf6\x9c\x10\x8e>\x8e\x0e\x88s\x0c\xb3\xf0\xe4hGh} \xc1\\\x02\xf2Q\x10\x99\xa6(\x06\xceo\xbf0\xc8\xc0E\"\x8fG\xd2\xcd\xa5b$\x91g\x83)\xe7\x92\xf1\x92\xc8\xc3\xfe\xb4s\xc9\xd8I\xe4\xe1P\xea\xb9t\x1c%\xf2t$\xfd\\\"\xa6\x12Z\x1e\xb2R\xbe\x13\x97\x9bcQ\x96\x1eb\x1c{\x19\xc2ZB\xdb\x13\xe2\x12!>;\xee\x12\xe9c\x16\xf4%B\xf7p\x18L\xa4\xf3\xfd 1\x91\x8e\xf6\x85\xc7D\xba:,*\x13a\xe0\x99`3\x11\xce\x9e\x02\xa1\x89\xb0\xb1w\x9c&\xb4\xd8\xc5s$\x8c\xd3C\x0d\x03wB\x1b\x0d\xf14^G\x861\x1e\xee\xe9\x90\x1a\x97\xaanv\xe8'\xb4 \x00\x14\xe9\x17\x99\x9a\xa9`P\x87`\x9f\x94\xb4n\xb4\x118\x04\x12\x856\xcd\x04\x1c\x9b/2+x\x14\x9a7-R\x02\x90\x14\xda\xa1\xc7<\x12E\x15\x02\x01\xa2\xdd\xa4@o\x9e`\xf4\x13\xb1T\x19HU\xb4\xfb`z\xbb'\x98\x8e)8V\x8c`x\x02|\xf9\x9e\"\xc3\xce\x1d\xd7\x04@Y|< \x88Wh)\\OA\xbf\xa2\x04G\xa5\xbe\x8b:yb.\x9e8*\x16Z\xd4D\x10\xdd\xe2$qb\xc9LhYh]\nf\x16Z2r\x16\xda\xd3\xce\xc8\xe8\xb3\x00#\x968\x1fi\xe7\x02y\xfa\xb9\xf1\x9e\x14\x89$\xc6\xa6\xc8KC\xe0BK\x98\xa2q\xe3\x9f$B]ri#\x9d\xb8\x19\xc6\x8dt\x14b\x17#\x14I\x9b\x17\xe6o2\x86\xd7\xa0&\xf1\xbc\xd1\xe4y\x16S(\xdaD\xdd\x1c\xbfr\x86\x96h\xf7J\x1a>\xb7t|\xc7,c6\xf3S\x11\xc7\x169'\xcb\x184\x0cyL\xf6\x88>&!-\xc6\xaf\xbf8Hd\x12\x935\x13\x83;\xc6#\x93\x11b\xd3\xe0\xc98wX?^\xd42\xf1 \x97I\xea,\"(\\\x924\x8f\xf3 \x99I\x04\xcdL\xe6F4\x13/\xaa\x99\xa0\xc8f\x82\xa3\x9b\xc9\xde\xe7w<\xda\x19!&\x00 (\xe2\x99LB=#\xc4,\x1c4 a\xa1IP\x8e\x92\xa4\x99\x9a\x80\x8b\xf6\x7fj\x1el4\x99\x8a\x8fF\xe8\x955\x8a\x91&\x13p\xd2X/\"\x91\xa8\x0f+MP\xbc4\xf1a\xa6\xc9\x0c\x0b7\x1f~\x9a$a\xa8I\x1cGM\x02\xb6\xf0\xf1xj\x8b\xd0\x80\xae\xb6\xfe\x80A\xac\xf3b\x88\x94\xdb\x8e_'uT\xfe`\xce\xe0\xfb\x96k\x14\xb6\xc2\x93\xa1\xd6\xc9\xe3\x11S\x89\xe6\x0b#R\x87\xb0\x90\x83\xea<&\x9b\xa2\x13\xce-mY\xce\xe0\xef\x16\x11~HGO\xe8\xcb\x01\x10,\xa4 RR\xa6\x057N\xdd\x90u\xd3\"z1!\xdex\x8f\xbcH\x18\xdf\x1eT\xa2\xc0w\"\x0cr\xc7\xe1_\x9f(M\xb0\xd8\x9b\xf0k\xc1?\xc7SR\xf6\x9d\x86\x1d\xaaAA\\\x92\x86\xcd\xc3\xd7Rx\xa1\xf0\xaf<\x82\xbe'S\xd2\xdaN\x8b\x01x\xd7\xb4o\xc4%\x11\xab&\x0f+\xe7|\x07\x91\x9c\xb7\x86\xc5\x0d]n\xbf0\xb4 \xa5e\x16\x9f#\xab\xb8y}\xd5\xfe0_6\xf1\x89\x99\xc4g\xcc\"~\x0cl\xcd\xbdf\x86\x02[\xd3\xbf\xfa\xc8\xf7F\x90` AM\x8a\x83\xa8<\xf0u\xb1\x0f!q\x8c\x1e:F\x0f\x1d\xa3\x87\xf4\x96`\x17>F\x0f9-\xc1o\x12\xdb\x94\xe2\x99c\xf4\xd01z\xe8\x18=d\xb7c\xf4\xd01z\xe8\x18=t\x8c\x1eJb\xe1\x18=\x14\x17\x05\xc7\xe8!;~!\xe5\xc1c\xf4\x10I\x94\x9b\xc7\xe8\xa1c\xf4\x10\xda\xf91z\xe8\x18=t\x8c\x1e:F\x0f\x1d\xa3\x87\x8e\xd1C\xe4\x18=4\x1a1\x1e\x8bA\x88\x86\xe9<\x8b\xd1\xfb\xa1\xc3\xee_Pz\xc7\xe8\xa1\x10\xc1c\xf4\x90j)\\\xa3\xc4\xc81zh/\xf1 ^i\x1f\xd1z\x8e\xd1CI\xc4\x12\xe7#\xed\\ O?7\xde\x93\"\x91\xc41z(w\xa4\x137\xc3\xb8\x91\x1e\xa3\x87\xed\x1b\x9d<)\xa9\xec\x8b\x0b-\xfaM\x9c\x07_\x8b\xc1\x0b \xb0<\x06f\xc65&s\xdd`UV=m\xe9\x92<<\xca\x1bJ\xcf\xce\x95\xa6\xd5\x8d\xef\x9b\xb6Y\xd0\xce\xba\x92\xfa\x18\x15\x0fKm\xca\xb8`K\x0ea\xea\xab\x9dT\x98v\xdcD\xff\x8d.\xb6\x8e\x86El\xc4\x95{\xfe\xe1\xb6n\xefM\xdb\x7f\xc7\x16\x02\xda\xd5\x8c\x83:\xb1\x98\x88\xde\x86\xf7Y\x9e\x15>v\xb5'\xc5,Y\xc4p\xdc^j\xef8\x14O,\x07\x82b\xc5mc)\xbd\xa1:?\xe0\xeb\x10\xf5\x93*&N\xfa\x01{\xc7QZ\x02\xce\x89P\xb3fo\xd1\xac\xd7M\x8db\xb9@\x98\xcd8\x10 \x08\x07\x84\xc4\x9bZ\xc8\x11y\xb0\x13\xb6\x95$\xcc\x8b\xbf\x869\xad\x84\x88\x11\xc8\xb4s5(\xf5\xe5\x96\xf5c\xf3`\xac\x0f\x86/\xf6\x01F\x02\xe5\xf6\xb3]\x07#\xed\xa5\xc6\xe1\xc71\xd8\x02\x8c\x04g)\xff\xe8\xab\xb2~ \xb7\xc5\xe2\x81\x87\x0f\xdeS\xf0.q\xa7?\x9fO\xafEs\x1f\x06m\xdfGk\xa1\x93\x1cL\xae\x1f\x9d\xea\xc3\xdcF\xf8\x0c\xfb\x15\xfd\x9f\xb5\x0fa\xabp\xb4(=/\xf7\xfdt|'\x8f\x98Q`\xb4\x15\xbf+\xf5\xedv\xd1o!4t[\xaf\x8b\xb6\xbb/*\x87D\xd7\x17\xfd\x16\xc7H\x05g\xe7R\x01\x0b\xca\x95\x06T\xe7\x9f\x94\\J\xc9\x8aZ\xd1\xa6%\xff\xdav\xb8 \xb2\x10\x0eaa\x99\xf7\xc1\xde#\xf3\x11\xc2b\n\xa4\xda\xe5\xfb\x8f\x9f\xafo\xae\xae/\xae?_EA9\xf8[\x11L&\xf6\x8a\x17\x97\xa9\xa0B\xf9\xec\xa5\xd8\x82\xa2\xc3\xc6g+\xf2\x92\x89\xb8\x14H\xcbs\x81\xbcD \xc2\xee\xd0\xb4i\xab\x85'\x1a\x9f\x1d\x04\x92i\xef\xc4\x9a\x14\xedm\xd9\xb7E\xbb\x1b\xbe[\x0esV\x07\x00l\xb8\x1c\xae$$\xd3\xff7\x9c\xa3\xb2sq\x90\x9b\x96>\x96\xcd\xb6\xe3!\xeb\xd6G3\xe0E,\xee$\x10\xa1-\x16\x0fp_\x11\xe0t\xa9\xe4Q)5\xfd*\x1a\x90\xd0\xdfsT\x06\xc6\xe0\xe2\xbe\xa4\x8fp\x9b\x04\xe0\x00c\x0c'*\x80\x05\x87?8\xf7\"\xfe\xffK\x88~~Z\xb2\x0d#\x86\xaf\xf6\x0d\xfc\xfb|\xd0\x86\xa5\x82\x89\x92C\x96\x80L\x10\xbfW\xfc=\xc9\x9f\\0\xa5\xc6\xe3\x86H\xe0\xd8\xf3y\xf2\xfdZ\xd6w\xa4\xdb.\x18\xb1\xd3UQV\xdb\x96\x9er4?\xa4\x0c\xc8\x9f\xe3\xb0<\xbe\xfa\xfc{\xa2\xa8s\x9f\xffxq\x85\x83@\xed\x07\xaf\xfe\xfb\xf2c\xd2\x83\xef..\x7f\x0f\x0b\xe8t~SE\xb3\x87b^g\x0e\x00\xbe\xa3\\}\x0f\xa1:\xb1\xe9\xb4{e\xbfY\x98\xeea\x87\xf1\x00x\xd8*\xab\xad\xabW\xa0\x9d\xb0\xa5\xb0;a\xbfi\x9d(\xb6\x99\xaa\xde\x95K\xa9\xe2\xf3\xee\x1eJn\x85_B\x8a\x95u\xd9\xf1\xcc6B\x865-Y\xd2\xaa\xd8\xd1\xa5\xf7:\xeba\x8b-\xbc\xcd\x16\xfb\xcd;\xf6\xc1\xd1\x85\xf2\xca\xbe\x1c\xea8\x83b\xf0\xaf\x0f _h\xbd(6\xdd\xb6R\xddJ\xb1\xbb\x82x\x03\xfe\xa1\xab\xa3\x02\x19\xa2{`\xf8z\x06\xca'\xddw\x9a\xd5\x8b\xa7GhVr\xb0\"i\x93\xec\xb7\x01_;\xd7\xd4\\\x01\xcd\x1f\x91s&\x1c\xf3\xd8A1\xd2\xe8\x9d\x96\x1d#n\x0d\x17\x83\x1d\xac:\xa8\xc5X\xcay\x8b\x9a\xdf\xd0\xa3\xd9\xff\x91\xf9\xbeP\xe6\xa0f\xc5\x0fx>\xe9E\xdf\x17\x8b{\x11=\xa6\xacKM\x0b\xa5R\x8d]\xa5\xd1\x12;\x82+\xfd\x08\x9c\xd1ri\xf0^=\x18>\x0b\xb5\xa7.}\x96\xe1:\xea?\x1b\x83\xcc#v\x84\xbf5\x89\xe9\x06L\xcf]u\xe2FRTc\x00:\x04*1L\x0b\x86\x8c\x98\x8b\xb1\x14d\xc3\xf04\xce\x1f\xb7\xb4\"N\xe9\xd9x\x1c:\x90|j\xbf\xe4\xf1\xea\xc5\x95\xcd\xc6l\x16R,\xc8\xae\x0bh\xf02\x89\xf1\x92\nM\xc0y\x80\x19F\xfdO\x11Y\xa9\xbf\xe8\x87h\xf1\xc7P\x18\x96E\x0f\xe5n\x94}Xr\x96ikLO\x83(;\xf0~\xed0h\x0f.JM\x9c\x0f 53\x97I\x9f\xbe|\xd8\xcb\xac\xef\xe3'{`8G\x0e\x84\x19\xc7\xb1BA~\x11\x96\x92\xbf\xb003#&\x0fa&\x8e\xcf\xc1&\xd2:\xb6;\x14\xab\x19=\xbb\xf5\xd7\xa6\x1f\xe0>P}\xfeq\xdea0\xcb\x89\x92\xde\x11xf_\xb1\x93\xde\x0fFBA\xf2\xd6\x04\xefO\x15\xe8\xd2\x91\x8e\xd6+\x01vc\xb0\xb5\x89\xacG\x96b\n\x86}\xec\x88\xf7\xa5_\xc4\x86\x9a\xa5u\x04I\xf9\x067V\x1b r\x9e*A\x939v\xa0\x86\xb9\xea\x0bJ\xc0\xaf\xc6\x18\xb82\xe2l\xa3<\x8c\xf9\x08\x9d\xc6f7\xf3\x1cI?\x84Q\x03\x94\xdd\xbbW\xf8y0^$\x153\xee\xac\xca\x9eu\xa4\xa4\xd1\xa6\xc8\xca\x042\xd1\xb1\xc6\xa4(9\xf4\xb8'\xc8U\xe2\xca\xd6\xbc\xf9\x98\xaa\xb9%\x8cp\xa4Pr \xc5\xc62b)s\xc7\x12\xd7\n\xa3$\x02xm\x83\x1b\x03t6h\x816\x1a; s\x1d\xc4\xb5A\x82\xd3\xbc,\xa2\xc7\xac\x94\xb9\x80\xc9PV\xca\xbcT\xc9S\x0b\x1ed\xe8\xfd{\xcf\x93<\xbe\xa8\x81IgZ=\x03$\xdd\xbe\xb7p\x01V\xb4 :+H\xa2\xe4\xb0\xe4\x99\xa7HA\xa8@\xc1\xac\xc5 \xf0\xc2\x04\xee\xe4!\x05 \xe6\x9f\xbb\xf1\x05\x08\xc4_-zh\xf1\x81\xf1\x85\x07\xec2\x03\xde\x12\x03\xb8\x84\"\xd1\xf1O(+ \x17\xd2$\xe8))0\xa9\x9c\x80\x0b!\xc7J \x8c-# \x8b\x06X\xe4|%\x04\xdc\xf2\x01h\xe9\x80\xb1\x0b2_\xb9\x80e\xb4T@\xa4L\x80\xf0\x83\x19rx|y\x00\xad \xc0@\x0e\xab\x05\x80(6\x9a\xd6\xa1\xae9Z.eu|\xe9\x98\xfe\xdc\x0c\xeaz\xea\xf6d\xd5\x06\xf4\xaa=';\x86Nle\xd5{a\xdd\x0bJ5\x0cg\x19\x17?\x80\x92\x1ab\n\xb2\xa2\x08\xa0\xf9b \xa0E\x86\x98\x06{\xf5\xcc\xc0\xb8\x18\x03\x94\x94\xd0\xd5O\xb6\x1d\xcd\x894\x80\x86\xc6\x1b@\x0b\x0f`l\xec\x01JL\x83Z\x8c\x8b@\x80\x16\xd8\xe2$!\xe2\xdf\x1b\x93\x00-\xb2\x1d\x08\x995>\x01Z(\xbbp\x1e?\xb9\x11\x0b\xd0|_?\xc9\xea\xdf\xb3\x85\xc8\x84H\x06/\xc1\xa6\xcd\x88g\x80\xe6\x8bj\x806\xcb0G\xc59x\xa9\xc9\xf8\x871\xd1\x0e\xd0\xfems\xaa\xc7m.\xb2\xe5\x87N\x04\x88uhP\x054\xe5\x14\x9f8\xb4\x84\xbc\x10)[\xf1\x98\x1d}\x96\xec\xe8\xc0\xfd\x8c\xd9\xf8\xc7\xc7t@\xf3C\x8b\xa1\xa5\xcc\xe3\x98(\x8f\x009\x11\xff\x91\x1a\xeb\x01-i\xceBiwIJ\x18D\xf6\xbb\xc1\x18\x90\xd0\x8b\x81\x0c\xdd\x84\x0b\xac\xd1\xf1 \x92@\xaa\xc4\x8bNJhFs\"D\x02d\xac\xd8\x91h\x9c\x08\xb4\xe7\x19-\x12\xe2\xed\xc9cF\xa0\xcd\x109b\x10\xf2\xddfF\x87\x95\xa0\xe4<\\\xa0\x01'\xd0\x9eRk9\xd0\x197*@%@/\xbc\xded\xa6\x13eL\xe0J\xe8D\x811\x8f\x0e_\x81\x96\xb4&)GLN\xcc\x06\xfe\x967\xac\x05\x7f\xdc\x1b\xdc\x82?\xee q\x816*\xd0E\xbe\x9as\xe6\xcc\x14\xf4\x02-?\xf4\x05\xdaA\x02`\xf0\xae\x9eI\x18\x0c\xce\xdca\x82a\xa0\xc5\x04\xc6\xf8\xc0\x18\x0f\xc1\x80\x8e\x1a\xe6el\xa8\x0cJ\x0c\x94\xdf\x8c\x80\x19h]0l\x06\xda4\x13e\xcaglsA\xd2\xc3iPz\xe1\xec)\xf6\xbe\xf1\xaf\xd2\x88\x00\x1b\x87\x86\xb9s#a6\xd0\x108&I\x0b\xb6\x81\xa6\x8c\x01S\xb2c\xcf\x80\xde\xd5\xe99\x93>\xceS\x10\xb4s\xcc\xb8QU?1\xf8n,\x8f\xf5\xa1RX\xdb\xdd%\x01v\x03i\x87#H\xfeYy\xf7H\x05\x8c\x13\x12\xc3\xf9\x87)\x85\x86\xfb\\2LO\x04\xefZ\xb4\xbc#\x9e#\xa5\xb4F*\x05\x1f\x17\xe2*\x10^\x84t\xec;GF\x87\x1a\xa1\xe4L\x84\xee^\x12@\xfbC\x90\xa0%\xdc\"\x12L\xb6\xc6\xdcM\x0bJ\x82\x16\x0dM\x82\xb6G\xee\x93\xc4\x9c/\xcc\x06ZR\xc8\x12\xb4=\x0c$p\xa3\x19\x13\xdf\x14%\x16\x9a\x8393%\xcf\x14 \x05m\x96\x95\xc9\x9b\xf6Q\x00Y\x9d\x00\x1aN\x05MH\x12\x7f(B\x9cY\x84D\x96\x8a\xe6\x10\xf4i\xd7\xf3*l\xdeh\x84\xe8\n\xcew\xb0\xc6b\x12\xb0Y@\xe9\xc5t\xbeXL\xc2\xe1\xc7\x9c\"-\x13\xc8DG\x9c\x02g\x7f\x82\xd1O\x8cO\xc8\x88\xfeB\xbb\x7f.\x9a%\xc2\xcf4\xf52i\x02\xe6P4\x13\xc6\x95z\xe2D a\xe3q\x02 \xa6h\xa9(1\xbf\xb6\xba\xd0#\xcaP\x82\xc7\xda%C\xb3\xb9\xf2J{\x8f\xedeh]J\x1c\x1a4gE\x0f\xae\x16g\xcc\xc8\xe8\xb3\x00#\x968\x1fi\xe7\x02y\xfa\xb9\xf1\x9e\x14\x89$\xb0\xcc\x03c\xe6lN\x8d\xec\x10\x7f\x93\x03\xe4\x0cj\xc1\x02%@\xaaS\xc5,\xcd\xe2#J\xac=\xb7R\x16\xc7\xb2\x076\xf3S\xa3\xf8,rN\xd9\x03hX4\x1f\xb1y\x9b1\xa2\x8f\x84\xd4\x11\xbf\"\xe2D\xf7\x91\x98\xd0\x98\x18\xf9<>\xda\x0f!6-\xe4\x0f\xe7\x0e\xeb\xc7\x1b H<\xd1\x80$u\x16\x91\xc86\x924\x8f\xf3D\x07\x92H\x84 \x99;J\x90x#\x05 \x1a-H\xf0\x88A\xb2\xf7\xf9\x1d\x1fA\x88\x10\x13\xd1uh\x14!\x99\x14I\x88\x10\xb3b\x0bI(\xbe\x90\x04\xe5(I\x9a\xa9 \xb1\x86\xfeO\xcd\x13oH\xa6\xc6\x1c\"\xf4\xca\x1a\x8d;$\x13b\x0f\xb1^ \x1a\xd1\x1b\x7fH\xd0\x18D\xc27\x0f\x12\x87HfX\xb8\xf9b\x12e\x7f\xe1\xb8D\x12\x8fMd\xcd\x07&\x18\x1f\xa3h\x11\x1a\"\x16\xad?`a\x8byq\xf9\x9b\xb6y,\x97\x02 cD\xba\x0ev\x89f%5\n[\xe1\xc9P\xeb\xe4\xf1\x88\xa9D\x88H\x1c\x19\x9a\xaf\x0ea!\x07\xd5yL6E'\xd0!\xda\xb2\x9c\xc1\xdf-\"\xfc\x90\x8e\x9e\xd0\x97B\xe8\xf15\xe5R\xd06\xb43\xb5\x0cj\xc9\xd7\x0dY7-\xa2\x17\x13\xe2\x8d\xa1\x0eL\nrF\xf8\xf6\xa0\x12\x05\xbe\x13a\x90;\x0e\xff\xfaDi\x82\xc5\xde\x84\x1cKF\xfbSR\xf6\x9d\x0c|\xe9\xc8\xb6\x06\x05qI\x1a6\x0f_KQ\xbd\x08\xff\xca\xdd\xd0W2\x00\xa4\x86\nZ\xc1\x00[A*5\xcc67{\x08\xeaCG\x97\xca/\xc8,\xe7\xb9*\x7f'o}Fu9\xfb\xb5\xef\xbf\xfcpG_\xfeY\xfc\xd9o\x7f\xfe\xa9\xff\xf6\xd3\xb7\x9f\xaa\xea\xf1\xa7o\x8b_\xff\xec;\x7f]\xb9\x1f\xd7\x8b?\xe9\x8f\x92\x9a\xeb{\xce\x1c\x81\xf2$'\xd5\x02\xfc\xf5\xfb_\xff\xf1\xcbm\xf1\xc3\x8b\x9fV?\xfe\xf4\xe2\xd5O\xbf\x16/~\xf9\xb9\xf8\xc7\x8b\x15]\x14\xdf\xdf\xbe\xfc\xe9\xfb\x1f\xe8K\xa3\x0e\xa0\xe1\x87v\xab\xec\xf1?\x7f\xff\xe5O\xef<|\xf9V=|\xa5\x95\x1a.\x12\x87\x9b;`E\"m\xc8?\xfd\xf2\xf2\xc7\xd5/\xb7\x8b\x17?\xbf\xfc\xf9\x1f/^\xd1\xdb\x9f^\xfc\xfa\xd3\xf7\xab\x17?|\xff\xc3\xf7?\xff\xe3\xfb\xc5\x0fta\x0dY\x80\xc9\xfc\x83\x86\x07\xbe\xff\xf2\xcd;\xec_\xbb/\xd5\xe2\xfe\xc7\xee\xdb\xd7\xfa\xd5\xab\x7f\xfd\xf4\xf2_\x7f\xde\xf5\xbf\xb4\xdd\xfd\xe3\x97\xdd\xaa\xfd\xd7\xa2\xd5\x19\xbc\xe6\x95:\x8b\x1a\x94\x035\x10v\x8a\x16\x06P\xa0\xa8\xbaF\xe7C\x1c\x15\xca\xd4a\xfa6\xd0i\x15RI\xf7:@\x94\xa2\xe1}\xeb\x1bR5\xcd\x83v\xf0\xc9\x1b/g\xc7\xee#?\xfd\x8d\x00\x7f\xc4\xaf\xcd\xf0\x1f\x7f\\##\xac4\xe2\xda\xd6QeY\x19\x12p\xa0\xe9{\xc4\xc29Q\xf9#\x06 (\xa5\x8dA>=a\x08\xc7TI 3\x9d\x9c*\xc9\xe8\xd5<~Hr\x1a\x89\xac\x1c\x12\xd9 $\xac/\xcd\xe0X}>\xba\x15\x11~\xe4W\xa4\xfb\xa6Zv\xd6\xbe:\xe1J9\x1f\x13]~7Jc\xb4X\xf2\xbe\xed\xa7@\x82h\xab\xa4\xeb8j4\na\xbc?CI\xca\xcb\xdf\x88\n\xc4\xe7,\x9c\x11r\xb9\xdeTtM\xeb\xbe#\xdd\xf2\xe1\xecB\x004\xca\xba\xa7\xed\xaaX`w\x14F\x83\xe7_\x00U\x12\xde\xa0p\xcfa\xd3[\xb6p\x93x\xc3\xaf'\xf6\xd0\xa3@\xef\xfdL\x81\x92\xa1X)\x04e\xf2\xe6O\x19\xf5N\x91\x9b\x0fk<(\x89\xca\x99+\xaa\xaa\xf9*\xa2z$\xd0\xdd\x16\xd8\xac5_k\xda\"nL\x182\x1e\xd1\xe5\x8d\xe7\xf2\xee;h1\xb7\xe9l L\xd85)\x16`X8\x91\xf1\x08xHq\xdbT\xfed\x0b\xd1X\xab\x82\xbf?\xecf\xd9\xa9\x96 e!R\x8cD\xdc(\"R\x81\x06\xf2B$MF8\x82\xea\x05\xf9x\xf1\xe9\xfa\x7fn\xae\xff\xe7\xe3\xdb\xa4\xd8\x1f\xe3\x85\x0f\x9f.\xff\xf3\xf2\xfd\xc5\xf5\x87Oi\xcf_\xbd\xfd\xf4\xc7\xe5\x9b\xb7\x89O_\xbe\xff\xe3\xedU2\xed7\x9f\xaf\xae?\xfcvy\xf1>\xed\xf1\x0f\xff|\x9f\xca\xc7\xc5\xbbw\x97\xbf_^\\\xbfM{\xfc\xc3\xff\xf7\xfe\xf2?>\xfb\xe3\xc9\x8c\x87?~\xfa\xf0\xc7\xdb\xf7\x17\xef\xdf$\x12\x7f\xf3\xe1\xfd\xf5\xa7\x0f\xbf\xff\x9e\xca\xfb\x1f\x17\xbf_\xfe\x16X \x15~\x96\xb5\x0d\xe2\xc6'h\xbe\xdd\xe5\xeb\x8e\xeb\x11\xfe\xc0)\xda\xb6M\x9b\x12h\xe6\xd9\xa4\xaf\xf1\x9f\xa1WRt`\xd6.\xb9Y'\x14\xb5\x89\xee\xe9\xd7\xd8\x8f\x83\xc5hIo{\xd2\xd1\xf6\xb1\\0\xbdr\xb5\xad\x17\xbd\xa5v\x86z\x91\xdf\xc2k\xecGP\xbf\xb8[\xb1\\\x90\xb2~\xa4]:\xff\xea\xbby\x8d\xfe*&\x87\xd6}\xd9\xef\xe0PRcZl\xbb\xbeY\x96E-\x06&R\x86\xf1\x89L\x1d\x18\xff\x0e_;\xbf\xd8q\xd9\x9b\xa2\xedw\x82\x17~XI\xa9\xceN\xa1\xc4\xae\xd4w\xfc\x1a\xfd\x15f\x11:\xe2Q\xb0lO\xacVeU\x16=%\xc5]K\xf9\xa1\x9a\xd8\x99\x90\x02\xaf\x91\xdf\xa0#~\x9a\x17\x15\xe8\xb0\xcdJt\xacN\xfd\xb6\xa9`\xb0\xeb\xba\xbc\xddv\xe4\xb6\xa8\x1f\xe4i\x92\xc8\xc2 [^\xe3?K\xb3\xb6e\xc7W\xd3\xdd\xd2MK;\xaeHp\xc4\x83\x8ar\x87+\xb9\x95\xe1\xa7Xd|\x94\x83\x1c{\x8d\xffl\xee\xbb\xaf\xf7%\x94f\x12\xf32\xe4\xe9\x11_\xadJ\x9aRRB\xeb\xa6\xf7$\x19r\x19Q\x02\xf25\xfa+\xc6\x06\xcf\x9d\xc0\xb7&\xc4\x14\xc2~\x0f\xa7\xe2\x90~\xdf\xb0V\xe33\xf6\x8bg@\xfbP\xb7+\xb5P\x7f\xefHW\xde\xd5\x05ORR\x0eNf\x84NX\x83\xb9 \x1f\xb5\xefL\xeaO\xecc8\xe7 \x8e`\xbc\\\xc3\xb1C\xc6\x0b\x94\xa0\x17C\x16?A\xae\xf9\x0d\x89\x8d\xaf\xa4\xdd\xb0\x15I\xdflHE\x1fi%\x94V\xd3<\x82\x89\x1d\xd0\xbd\xcel\x92<\xad\x1d\x9b7R\xd4;y\xfd\xea\xe0\x0b\\7\xcbr\x85:qz\x19\xf8\x8f\xa4\xbc\x03\xfa\xe6\xbd\xa3\xac\xc9\xb6\xe6A\xc4e\x8f\xb9\xf3$7U\xc9\xee~\xb2\xd6\x9b4J\xd8\xce\"\xd6\xf3M\xb1\xc0\x93\xc5MP\xd6=\x1ad|\x95.\xd4`\xe5\xf5\x82\x0d\x84\x8f\xbc\xd8\xf6\xf7M[\xfe \xf2\xa5\xa5\x0bZ>\xd2!+\x10B\x8c\xcf+ZD\x13f\xd8z\x85[\xcfo\xf8.\xb8\xf1^\x1a\xa6\x8eo\xf8\x0cL\xd1\xccV \xcc\xf7\x89\xc9\x13\xe4&\xb9\xea\x8bzY\xb4K]\x9c\n\xb9\xdeq$\xd3\xbah\x1fh\xab~C}\xa4-%\xddv\xb3iZ\xbd\x04*\xf0s&\x8c\x96E\xdf\xb7\xe5\xed\xb6\xa7d]\xec\xa4\xf9\x12\xa1\xb5\xb8/\xea;\xba$\xb7\xe0\xc4\x11\x92n\x88\x8fn\xea\x05;e\xbd\xdeK~\xad\xbe\xe1r\xe8\xa6m\xaaj\xbb\xf1-\xc2xW\xe6?\x85\xc8+\xaaJ}0\xc6u\x96O\\\xd9w\xea\xc3\x91I+\xb1/N\x08\x12\x83\xc0\xdf;)NV%\xad\x96\xa8\xbb\x18\xa6\xb5\xea\x1aB\xeb\xe2\xb6\x82\x9b\x19GD\x08y\xfb\xff\xb8\x83\x15\x18\x12\xd4\x8a\x1a\xbb\xbaI+\xb6\x18\x8b9\xa9\xe1\xe9\xb8\xe2\xd4%\x9c\x88]7\x9b^KU\xc3\xf5/\xb2h\xaa\x8a.\xa4;RZ\x99\x18K67\xb7\x02\xd6\xd1\x82\xcb\x0daH\xc5\xec\xe4\xd6\x051^\xcc\n\xc1A\xee\xc5\x88\x00x&\xe6-\xd7\xf87:tP\xcd\xd8\x9ekuX\xfd\x90Q!\x82\x8a\x08\xfc\xcf\x88\xca\x0c#\x18\x1e\xfa\"\xb1x\xbf\x08\xe38~8\xfd\xb4\x18\xa8\x90\x04@p\x84\x99\x11\x93\x870\x13\xc7\xecb\x13\xe9~\xeb\xfe\x10\x8e\x94\x0f\xde\x88\xd9\xc8\xf9\xea-j\x1e\xbb\xe8L2\xc0\x1b\x921\xd3\x8eE\x8f1\xa3\xeb\x88\x88\xe8\"AvA\x11\x12\x8b\xb28\xd8 S$L\x8cFx\x88\xda\xbfF|E\xb3\x8e\xd5b\xc5\x94PN\xf0\x03B\xce\xf8H\xe3\xa3\x9f*\xc2bCJ\x15n\xb1\x89 \x0ca\xc4\x92e\x0d!.\x12c\xcc\xdb\xabj\x81%\x1cw\xf5\xbcI\xe4E/\xf6\x14\x05<,!\xef\xca\xfe\x12\xad\xc7\x9dg\xd3\xe8\xa7,;\x11\x99\xce\xb5\xa4HFd\xa0[e\\\x1a\xbfPbzZ$1q\xf6FV\xb7w\xffp\x9f&\x19b\xc4\x85\x16]\x0b\xf1\xd0\x147Z\xd8\x91\x163DA\x9b\xcf\x99\x96\xe8NK\x9c\x98xR\xc2,o\x8a\xf3J\x82[-\xd7\xb1\x96\xebZ\xcbv\xaee\xb9\xd7\xb2\x1dl\x99.\xb6|'[\xbe\x9b-\xd3\xd16\xd6\xd5\x96&\xf9\xa0\xcd\xecn\xcbp\xb8\xed\xdd\xe5v(\xa7\xdb>\xddnO\xeex;\xa8\xeb\xed\xc0\xce\xb7g\xe1~{\xde\x0e\xb8g\xe4\x82{\x1a'\\\xdc\x0d\x173U\xab\xa7fp\xc5\xc5u\xa0\xf1\xee8\x0fAoBM2p\xa3\xec\xeb\xe2\xf6J\xb9r\x051\xd5\xfc\x0f\xfc\x1ba\x83\x94\x95\x80\xbc4G\xe6s\x89W\xad\xe21sr\xc4\xba\x9bH\xd8\xd5\x87<\xb9B?<\xc5\xe7\x7f\xb7)\x17EU\xed\x02\x15m\x04\x81\x11\xc3\x98\xe1B#\xb5[\x80\xd7\x96\xb4\x02g\x0f;f\xd8y\xb6\xa8x\xb0\xa6\xfa\x10\x97E\x8f\xbba\x1dg\xad\xffFSl\x97X4f\x1a\xbfo\xf8\x9diInw\xa7d\xbbY\xaa\xff\xef\xcb5\xed\xfab\xbd\xe9N\x95\xed\x00\x82kN=\x1e\x12BZZ\x89\xfc\xbc\xab\xc6e3zM\x8a]\x92\xe0z\xb7\xbcaL\xfa\xa4A\xc2e@.2#\xf3\x82\x0d\xd3Gj\xa8\x01\xc5\x1e=g\x8fB\xb0 \xdf\xb8\xb4\xee\xdb\x1d\xbf\x92\n\xbe\x82<\xdf\"A\xdd\xd0\x128\xc6\xabc\xe97;8\x04\xc5R\xc6\x12\xd4\x8be~v\xf3X\x15]/\x99\x0b2~\x88\xc9\xe4p\x822a6\xc5\xc7\x11\xe6\xa8\xac{zG}\x8a\xa6\x9cI<2\x1aZ\xec\xe0!\\\xf5\x11G\x97\xf5\xc5\xc2\x88x2\xa6E\xcb\x952)U<\x01\xcb\xd0`\xba\xd1?\x8bX\xce\xe9\xcb\x908\x1e\xd1\x1fZ\xee\x8co\xfb\xb2\xa9\xcf\x03\xfc\xb2F\x1fqm4\x82\xafa\xc2\xf5\x1d\x93\xe3\x1dY\x14\x1bP\x12P\xcf\x08\xdf\xbej\x0f\xe1\x16\xaau\xf1@\xc5\xd6\x92\x98\xf0\xa2^\xca\xaf\x81\xee\xc8W\xdaR\xb2.\x96\xf60b\xa2\xfcJ\x1c\xa3\xca\xcb\x8c\x9c\xa8\xa4\xb8+\xca\x9a\x97\x15\x92\xe7\x8fC\xc7\xb4\xba\xb1\xa7y\x04\x86\xeb[\xbf\xd6,9B*,\xd8\x80\x82\x02\xd6\xcf\x08\xf9\x83\x87\x1f\x89@\x17\x01~CI!\xa1j\x17U\xd7\x10(\xfe\xcc\xab\x8a\xbfc\x070\xea\x00\xdb\xa7Y'R\xcfxi\x9bs\xa4\x8d\xd0\x06\xf0\xe9`=\x94\x94\xc8\x9dt\xc2\xb3\x83\x94\xfd=Y\x95UO[\xba$\x0f\x8f\xf2D\xeai[\xf4M\xebz\xad\x05t\x0c\x1d~p\x00\xb2\xd8\xa4\xf8>\x0d\x0dIr\x0e\xcbV\xed\xe4\xb7\xb9\xf3!r\xb4\xda\x9f\xdc\xfd\xdf\xacV\xc2\xe1\xee$\x95\x0e\x96\x90\x9evm\x9c-9Go\xbaL\x1c0\x03\x9f\x1f\xb5\xe7\xc5L\xa2$C\x95\x9f\xf3\xf8\xb9\x17\xc5\x9d\x8bz\x08ST\x8b\xe8\x85\x0d\xfa\xbe~\x92\xd5\x7f\xc8w\x01>o\xcc]!\x99;a\x1d\xf1z%\xa7\x01_\xb6lMk\xcf\xf6\xa2Y\xaf\x9b\x9a\xf7\x83\xa36 \x95\xd2^\x87 ]\x80\xaf\x1b\xf2\x9e\xb5v\x0dv\xe5\xe9f\x9b\xd4_~\x88\xb5\x13 \xf7\xdd`\xd1\xe7\xf3r\xae\x86\xacdHY?6\x0f\xc8\xdaBi_\xbf\xd0{\x1ahoh\xb7%-D\x9a\xc6\x03\xed=[\x06\x91\xa4\x12\x12yA\xfe\xb9\xb2~ \xb7\xc5\xe2\x81'\x95\xbd\x17\xe1\x881\x88 [<\xfc\xb2\xadR=\xfao\xdb\x89CK\xb0\x85\xa4lE\xe2\x8a'q\x82\x0c(\xa7wMK\xde\xca\xba\xfd\x01D\xb1J\xd7\xe9\x83C\x1d\xa8r\xbd_\xc0\x95t\xc1!p\xfa\xf1\xc4\x86\x17 \xf6\xb1m6\x0d\x93\xd0\x91\xb1)\xb14\xcf\x00y\x8a\xbb\x8d\xec{\xc5\x8d\x06}\xbb]pG*?L\xd7E\xdb\xdd{\xe0V\xf3\xd4\xd2\xbfT\xe8\xc8r\x05\x87\x13\x17\x14\\\x94\xc8m\"\x99\x8b\xa0\xd1\x08\xc8\xe2\x7fm\xb9\x1b\x15\xd0\\\xa2\xce\x14\xa79m\xce\xe2(\xf5Oo\xdf|\xf8\xf4\xdb\xcd\xe5\xfb\x8f\x9f3\xeb\xbf\xe3\xef~\xfc\xf4\xe1\xe3\x87\xab\x11/\xc2o\x01\x81\xa5j\xe4\x8fc8]\xe2E'%4\xa3\x91W\x8d\xaa\xf9\x012e\xcd\xc1\x8d\xe7\xdb\x1a\x14t\xd8_l\xcd\x03/E\x96\x04\x9f;\xf9W\x1b\xf2\xab\xed\xe8\x9a\x14\xedm\xd9\xb7E\xbb\x1b$\x05O\xd4\xa0\x0eP\xd8\xb2\xf9\xbc\xc1o8g\xf0\x1b\xceW \x1f\x9a\xa1\x19lZ\xfaX6\xdb\x8egp\xb7>\xc1\x016\x8b\xf2(>\xfa\xeb\xb6X<\xc0\xa5^\x14\xf5\x97*:\x95R>\xa6Z\x87o3\x1aQG\x7fccX\xdc\x97\xf4\x11Rz\xca\"\xfbu\xecF\xe3\xfc \xde|vZ\xcb\x81\xce\xb8\xff\x12\xe7[/\x93\xb4\x88\x89T[\x15\xfe}>\\\x96\xf0$\x8a\xb2\xc5\xe0Z\xf3\x9c(W\x9c\x86\xe4[n\x89\xe1\xbe\x97\x98`D61f\xf1\xe9\x94\xf5\x1d\xe9\xb6\xa6cb\x9c3d[w\x94\xdf\xf4Rbx\xdc\x89\xb79`\xbf\x19b\x99j;\x95'\xb7\x87\xcd\xb6\xda\xfa\x940\xb4+\xb6hvW\xec7\xad+5\x04v\x87\xeb\xca\xa5\xb8\x01B\xa7\x0f%7>.\xa1\x88\xca\xba\xecx\xed\x1a!s\x9b\x96,iU\xec\xe8r\xe05\x879\xb6El\xe6\xd8o\xdey\x18\xec\xf2(\xc7\xec;\xb4\xb1a\xb2\xc5\x04\x06(\xdc\x1f\xe0\x1b\xa7\xf5\xa2\xd8t\xdbJ\xb1 \x0f\x8e\x15?\x12A\x90\xc8\xf3\xd0C0\xa0\xa3\x86y\x81\xbeN\xba\xef\xc8P|\x80\x17IhVr*D\xe9&\xc9I\xe3+.B\x84\xf2+\x1f\x1c\xb2\x0f\xc9$=\x1e!\xfc<\xe2\x8em.\xe4\x84\x0c\x06Lq{\xec\x9c0d\x94\x9e\xc7\xb2)-\xbf\xd6;\xfeU\xbaPv\xcff\xc5\xb5!\xbeTE\xdf\x17\x8b{\xa0\xae\x02\x01\xd87\x82\xe2w\xcd\x9d+\xf6\x17\xbf\x87y\x83I\x8c)\x13\x1c\x88\x19ijq\xe9\x14?\x0b(\xae9$e\x0c\x18\xe5\xa56\xdfNwO\xfb\\7\x9eI\x1f\xe7)\x08\xda9f\xdc\xa8\xaa\x1f\xaf\xa7Y,\x80\xd7\x8b;0\xe29|\xd8\x1a\xa9\x14/u\x88\xabg\x0c#\x0cp\x1d\xbd\xdb\xc5nvG\x14\xe1H\xee\x93\xc4\\\nD-*\xe8\xc8~\x06\x12\x85\xb3\xcd \xf7\xc8\x11E\x98=\xed#\xc1)$\x05E($\xc9\x14\x0c!B\"KEs\x08\xfa\xb4\xeby\x15\xb6'E\x0f\x9a<\xc44\xba.\x928\xce\x9b:\xceY\x9c\x83(~IcN\x91\x96 d\xa2#\x9e\x05P6\xff\xe8\xfd\xf03\xf7/(=\\}N\x9d\x95\xe7\xa2Y\"\xfcLS/\x93&`\x0eE3a\\\xa9'N\x94P\x1c(9QKE\x89\xf9\xb5\xd5\x85\x0e\xefF \x1a\x9a\xac\xa5\xb5z\x874Yu\xb5\x871\xe1\x84\x9eQw\xb2\xb9\x1a\x87\x14'\xe9hq\x92\x87\x18'O>#\xa3\xcf\x02\x8cX\xe2|\xa4\x9d\x0b\xe4\xe9\xe7\xc6{R$\x92\x18\x87.w\xe9\xcc\xa9\x91'\x8f\x7f\x92\x08u\xc9\xa5\x8dt\xe2f\x187\xd2 J~\xc2\x96IE\xa1\x83+\xc2\x0fB\x17\n\xe9\x1c\x18t \x15@\x9d\x8b\xbe\xac\x92\xd1N\x9dK\x8b\xa8V\xbcr\xd1lv\x83~$\xcaK\xda\xc0Z\x80\xb1[U\xa9\xd1s\x08?}\xbc\xb6+\xefN \xef\x0f\xcb\x80\x95Z!yxu\x8e*\xc9\xc4k\x07\x1a9*e\xe1I*!L\xa6WN\xb6\xa8\xd9%\x85\x89\xe4)\xa3\x962 \xe7\xc7N\xcb\x90\xf6 yb&\xd7WN\x99\x1axe\xae\x8a\xcbdJ\xd5e\x82T^&(j\xd6\xbb\x08\xc2\x9d\x96]\x85\x99\xf8+1\x0f\xfday\xe5\xc2\xab>SUf\"D\x7fNYc\x12\xac\xceL\xe6\x18\x94\x1eM\x14\x1d\x97|z\x86ay+6\x93 \xa3\x9a\\\xbd\xd9\xa2\x17[\x13\xe7t#\x13\x98\x9fZ\xd1\xd9\"\xb7k\xb6mBUg\x18\x1c\x19\x00\x04\xf0\xef~r]g\xd6\xf1\x95\x86\xcdr>w\x1d\xba\x14\x87)\x05 I\x01\xf8\x91\x17j\x94\x08+\xc2Wl\x1c\\\x08\x01\x05 z\x0e4hO0\xa0g\x03\xf99$\xbcG\x9c&\xfa\x86\xb4\xc8>\x16m\xd9l;\x8e$\xa4:x\x06:\x92\x90r\xfff\xbf\x1a\x0e\x1bG\x15\xf5\x94.7T\x12\xf4$D/\xa9\x18\xd2dB\x05o\"\xeauk\xd4\xb2*ww^\xf0\xcf\xb4!\xf5x\x11\x96\xa4\x8a\xdcv\x0e\xce\xe4J\xdcv\x05n\x18\xc2\xbcA\xaf\x9e\xe0\xbd\xc05ULO\x91U\x02\x00K\xfc/ \xe5f\xf4'\xc1\xbc\xfd\x01\xceqhjrf\xfe\xd4|\xfciY\xf8\xd3r\xef'f\xdcO\xc8\xb3\x9f\x98]?)\xa7~j&\xfd\xd4\xfc\xf9IY\xf3\xf3r\xe5\xc7\x8c(\xe3\xf2\xe2C\xf6{\x87X\x00I\xbb\xa7\x1c\xf8\xfb\xcd|?\x7f\xbe\xfb'\xcar\x7f\x80\xdc\xf6\x07\xc9h\xff\x84y\xec\x9fc\xf6\xfa'\xcfY\x7f\xc8L\xf5\xbe\xfc\xf4\xfe[\x9d:ZG\xe5\xa2\xc7\xb1\xc3\xe3\xf3\xce[e\xa0\x1d'\x95_R\x8f,\xf7l\x15w\xd6\x08\x8e+\xf3\xdcO)\xef\x8c\xa4\xa5\x0d\x97uF\xcb9gh~\x96\xe6\xe3\x9f\xdd\xf1e\x9am\x856^\x9e9X\x969\x97\xefq\xe5\x97\xe5\x92i\x94\xa6\x94]\x1e]nY+\xael\xed\xb1\xc42\xcb\xe1\xf2\xca\xb8T\xf0\xcf\xe6\xf82\xcaZ\xd1dc )\xe5\x93G\x96M\x96<\xb8\x9f4bPR\xc3\x9cZ\x1ey(\x88,\x08\xdae\x91C\x97\xf0\xcb\xe5\xa52&\xee\xf9*\xbet1\x8b\xb9\x90X\x05\xf7\xb3\xbd\xfd\x13\xb9Hq\xd0;\xb8I\x04{8\x1fC.2R\xfb%\x891\xd3c\x17\x17b\xc3[)\x0eiO\xa7 \x93\x80t\x1a\xf7\x0d\xfb\x81\x9e\x069mK\x0fV\x0fi\xad\xe26\xeb\x96\xde\x15\xed\x92\x11\x16^\x19R\x86\xac\xb2\x9c\xe0'\xddh=\xdfG\xe2\x17z\xea\xe3Hr\x9aM\xf4$:\x0e2\xfe\xe7\x0c\xbf!\x9e\xf29>\xe4\xff5\x86l\xe5z\xf6z\xf7\xec\xd1\xcf\xe8\xcaC]\xdd\xf1q\x18K7\xd2\xbd=\x9fk\xdb\xef\xfd\xca=z\xa7y\xbc\\P\x87\xf8\xdcp\x0f\xd7\xe0\xcbY`\x99\xf4\xf2\xb9\xd6\xe1\x17Q\xa6\xd5y\x9a\xc5\xb3\xd7#\x97\xcb\xf3d/\x9c\xc5\xb5\x7fr-\xef[.\xa3S=n\xdc\xc7f2\x8a{\xdbt\xb9;\xb8\xda\x04\xc4\xc5\xf5\xb4\x81\n\x95\xe4g\x13\x94a\x82\xf2D\xfak|\x86\xc4\x1e\x01&UJI\xfe\xa3>>\xb4'\xbc7\xa4G\xef\xdb~\n\xc4\x0br!a;t\x04\xef\x17\n\xb1\x9e\xe0ZA\xa8 gK\x9e\x8bE6\xbf\xabE\xb6\xfdL\xc1\x14W\x0cB\x8e\xdf\xec\x93]2\xb2\xd9\xae\x19\xd9\xb0\x8b\xbal\xdet*\xde}\x07-\x86Z\xf6\xb8pd\x0b\xae\x82xd\x8cKG\xb6PM\xe7X\xe6\x829\xeb9'UsN\x98\x8cp\x02\x93do\x11\xfaBB\x15\xe74\xef\x11\xfat\xb4\x82s\xa27 }<\\\xbd9\xd1\xbb\x84>\x1e\xab\xdc\x9c\xeamB\x9fO\xa8\xda\x9c\xe4}\x92-\xcf\x0b5\xbc\x15\xf6F\xc96\xce+\xe5%\x97\\\xabyO^*\x94\xfc\xec\xde*\xb4\x97Y\xbcV(\xe5\xc3y\xaf\xd0\xee\xf7\xe3\xc5B\xbb\xda\x977\x0b\xed\xec\xb0^-\x94\x85g\xe2\xddBy{\n/\x17\xca\xc8\x9e\xbd]\xb2\xc5\xaa2\x87\xbc_\xea\x99 ^0\x8b\x86Gf\xcf\xe6\x15\x93\xcd\xf1\x8e\xc9\x16?AFz\xcb\x10J\xa6\xffl\xa4\xd7L\xb6I\xde3\x84\x9e\xe4&\xecE\x93\x0d\xf5\xa6\xc96AY\xf7h\x90\xf1U\x1a\xefuC\x88\xf1y\x8d{\xdfd\x0bz\xe1d\x9b:\xbeq\xde9\x84\x92\xdc$S\xbct\xb2\x8d\xf6\xd6!\xb4\x06\xff\x1d\xc9\xf0\xda\xc9\x16\xf6\xde\xc9\x16\x96n\xf1U\x18\xef\xd5\xc3\xbe8\xe5\xe7K\xf4\xee\xc96\xd2\xcb\x87\xed\x05a\xa46\xbc}\xb2\x85\xa7c\xaa\xf7\xcf\"\xa7|\x81\x8e\x17P6\xe5Iq\xa3\x08\xc2\x9c\x1a/\x0e\x96\x8c\x84\x0c\x18\xc8\xbd\x18\x11\x00\xcf\xc4\xbc5\x83\x9bR65c\xbe\xe0\xe4\x99\xb9\x1c\xe5\xc6\x94\x0d\xf1\xb0\xed\x9f\xe1\xa1\xaf|7\xa7l\xf0\xbb\x1b\xa0Hb\xfc\xce\xe9\xfe\x94m\xf4\xe4\xcd\xec\x16\x85\x06\xbfv\xde\x0c\n)\x1f\xbc\xfev\xd6WoQ\xf3\xd8Eg\x92\x01\xde\x8c\x083\xedX\xf4\x183\xba\x8e\x88\x88.\x92\xe3&(BbI\x0e\x0e6\xc8\x14 \x13\xa3\x11\x1e\xa2\xf6\xaf\x11_\xd1\xacc\xb5X1%\x94\x93{\x00!g|\xa4\xf1\xd1O\x15a\xb1!\xa5\n\xb7\xd8\xc4\x04\x860b\xc9\xb2\x86\x10\x17\x891\xe6\xedU\xb5P\x0c\xe3@\x8d\xc9\xe1,\xa2\x17{\x8a\x02\x1e\x96\xa7)_\x1fw\x9eM\xa3\x9f\xb2\xecD\x14\x1a\xd3r\x12/\xf4\xc4<\x96kM\xcb@\x8c\x12\xd3\xb3\x12\x8b\x89\xb37\xb2\xba\xbd\xfb\x87\xfb4\xb5\x08\".\xb4\xe8Z\x88\x87\xa6\xb8\xd1\xc2\x8e\xb4\x98!\n\xda|\xce\xb4DwZ\xe2\xc4\xc4k\x02dyS\x9cW\x12\xdcj\xb9\x8e\xb5\\\xd7Z\xb6s-\xcb\xbd\x96\xed`\xcbt\xb1\xe5;\xd9\xf2\xddl\x99\x8e\xb6\xb1\xae\xb64\xc9\x07mfw[\x86\xc3m\xef.\xb7C9\xdd\xf6\xe9v{r\xc7\xdbA]o\x07v\xbe=\x0b\xf7\xdb\xf3v\xc0=#\x17\xdc\xd38\xe1\xe2n\xb8\x98\xa9Z=5\x83+.\xae\x03\x8dw\xc7y\x08z\xebY\x90\x81\x1be_\x17\xb7W\xca\x95+Hi\xc6\xff\xc0\xbf\x116HY\x88\xd7Ksd:\xd5\xf0\xb4\xf0LE}3\x8cXw\x13 \xbb\xfa\x90^B\xe8\x87v\x92'h\xfdnS.\x8a\xaa\xda\x05\n\xca\n\x02#\x861\xc3\x85Fj\xb7\x80\x9b-i\x05\xce\x1ev\xcc\xb0\xf3lQ\x95\xb4\x1e.7v\x1c\xdb\xd0\x1cg\xad\xffFSl\x97%:\xda\x14~\xdf\xf0;\xd3\x92\xdc\xeeN\xc9v\xb3T\xff\xdf\x97k\xda\xf5\xc5z\xd3\x9d*\xdb\x01$\xb8;\xf5xH\x08ii%\xca\xe3\xac\x1a\x97\xcd\xe85)vI\x82\xeb\xdd\xf2\x861\xe9\x93\x06 \x97\x01\xb9\xc8\x8c\xcc\x0b6L\x1f)\xd8\xd3\xc2{L\xcf\xd9\xa3L|\x08\x1f\x14\xad\xfbv\xc7\xaf\xa4\x82\xaf \xcf\xb7\xbb \x1ck\x9cxnvp\x08\x8a\xa5\x14\x88\xec\x85\xaf>\x9cX\xe6g7\x8fU\xd1\xf5\x92\xb9 \xe3\x87\x98L\x0e'(\x13fS|\x1ca\x8e\xca\xba\xa7w\xd4\xa7h\xca\x99,\xeb\xfe\xe7Wa\xb6C8\xd6Z\x1d]\xd6\x17\x0b#\xe2\xb9\x90\x17-W\xca\xa4TA\x8b+\xc9\x06\xd3\x8d\xfeYTH\x9a\xbe\x0c\x89\xe3\x11\xfd\xa1\xd5\xc6\xf9\xb6/\x9b\xfa<\xc0/k\xf4\x11\xd7F#\xf8\x1a&\\\xdf19\xde\x91E\xb1\x01%\x01\xf5\x8c\xf0\xed\xab\xf6\x10n\xa1Z\x17\x0fTl-\x89 /\xea\xa5\xfc\x1a\xe8\x8e|\xa5-%\xebbi\x0f#&\xca\xaf\xc41\xaa\xbc\xcc\xc8\x89J\x8a\xbb\xa2\xacyU_y\xfe8tL\xab\x1b{\x9a\x87W\xb8\xbe\xf5k\xcd\x92\xf3\xb5\xac*r_\xfe)f\xa7\xa5\x1cEQ7\xe0\xf8\xfed\xc4\xda\x93B\xf8\xd9\xd1\xfae\x83\xb7\xbd\x90Su\xca\x17M\xce\x1b\xff\xc6\xd7\xcd\xa3]\x00o\xb0\xbf\x8e*,a\xbd\x9e\xe5\\C\xadc\x1e%\xe0\xd9Y\x97mo\xe7\x90%\xd4\xebC3\xa3\x00]\xfdA\x9b\xcb\x83\xd4\x80p\xfa\x8b8\xdd\xd5\xe3A\xd6C\xde\xe3Y\xd9\xf7\xc83\x94\x95\xa8g>B*R\xd2\x11|\xdd\xcca-\xec\x92\x08c\xf4O\x94H\xba\x16\xea\xd0\x0b:\xe9gRJm\x9eG\x9cV3\xe8\x0c6\x17^ \x180\xcf&\x97\xbbq\x96\xe9 \nn\xe2\xc8S\xa4g\x12\xa1\x84q/\x92\xaa\x98<\xc1\x1c\xb8\x8c\x89\xf9Hx\x1dC\xba\xe6\xce\xcd\x1c\xfad\xd2XS\x85q\x02\xa9\xf8\xa8F.p\xfe\xa8F\n\xea\x84m\xa0\x0f1\xc4\x9704\xf8\xeb\xd2\xa8\xfb\xef\x0c\x85i\x8c\xbe\x05\xe1@\x99\x9a\xe1 #@\xe3\xa4\xd4\x01\xbe\"\xda\x8a.\xbf\x93\x9dz\x12\xb9\xcc\x0b\xa7\x83N\xecM2\xf2h\xd9\x9bw\xeb|X\xa6\x01\xfb\x04\xac\x9f\x11\xf2\x07\x0f:\x92I\xeb\x00\xf2\x86\x92B\x02\xd4.\xaa\xae!\x0fu\xf3\xb5&\x05\xdb-\xef\xd8\xb1\x8b\xba\xbd\xf6i\xcc \xcf\xc0\x80\xde\x93\x9bXZ\x06m\xd8\x9e\x0e\xd1CI\x89$J'<'H\xd9\xdf\x93UY\xf5\xb4\xa5K\xf2\xf0(\xcf\xa1\x9e\xb6E\xdf\xb4\xae\xafZ\x00\xc6\xd0\xe1\x07\x07 ^\x94_\xa5\xa1\x17I\xcea\xd9\xaa\x9d\xfc\"w>\x1c\x8e\x96(\x9f;\xfd\x9b\xd5J\xb8\xd9\x9d\xcaM!\xcf\xc2\xc4\xcb\xe2l)9z\xd3Q\xe2@\x18\xf8\xfc\xa8=/f\x12%y_t\xf7\xf3\xf0\xc3(qfj-%\xa8\\D/X\xd0\xf7\xf5\x93\xac\xfeC\x1e\x0b\xf0tcN\n\xc9\xdc \xeb\x88\x17 =\x0dx\xb0ekZ{\xb6\x17\xcdz\xdd\xd4\xbc\x1f\x1c\xab\x01\xd9\x91\xf6:L\xe8\x02<\xdcP\x84\xa8\xd5\x0c\xec}\xa3\x03M\xd8&\xf5\xd7\xfce\xed\x04\xc8}7\xd8\xf1\xf9\xbc\x9c\xab!+\x19R\xd6\x8f\xcd\x03\xb2\xb6P\\\xc3/\xf4\x9e\x06\xd0\x1b\xdamI\x0b\x91\xa6\xe7@{\xcf\x96\x01b[E^.(\x06U\xd6\x0f\xe4\xb6X<\xb0\x7f\xb0m\xc8\xddC1` [<\xfc\x8a\xad\x92\xdf\xf9\xef\xd8\x89CK\xb0\x80\xa4lE\xe2\x8a'q\x82\x0c\xd8\xa6wMK\xdev}q[\x95\xdd}\x00G,K\x07v>\x10TH~%\x0e;uD\xb8\x80+\xe9\x82\x03\xdf\xf4\xe3\x89\x0d/@\xecc\xdbl\x1a&\xa1#cSbi\x9e\x01\xf2\x8cu\x1b\xd9\xf7\x8a\x9b\n\xfav\xbb\xe0\xeeS~\x98\xae\x8b\xb6\xbb\xf7\x80\xac\x08/;\xb3\x0d\x81\xe1\x13\xe6\xf1Ra\"\xcb\x15\x1cN\\PpQ\"\xb7\x89d.\x82A# \x8b\xff\xb5\xe5\xceS\xc0p\x89\xe2\xce\x9c\xe6\xb49\x8bc\xd3?\xbd}\xf3\xe1\xd3o7\x97\xef?~\x0e\x94\x83J\x7f\xf7\xe3\xa7\x0f\x1f?\\\x8dx\x11~\x0b\x08,UAj\x1c\xc3\xe9\x12/:)\xa1\x19\x8d\xbcjT\xa5\n\x90)k\x0ei<\xdf\xd6\xa0\xa0\xc3\xfebk\x1ex)\xb2$\xf8\xdc\xc9\xbf\xda@_mG\xd7\xa4ho\xcb\xbe-\xda\xdd )xz\x06u\x80\xc2\x96\xcd\xe7\x0d~\xc39\x83\xdfp\xbeJ\xf8\xd0\x0c\xcd`\xd3\xd2\xc7\xb2\xd9v\xd5\xce\xfd\x04\x07\xb0,\xca\xa3\xf8\xe8\xaf\xdbb\xf1\x00WyQVK\xaa\xe8TJ\xf9\x98j\x1d\xbe\xcdhD\x1d\xfd\x8d\x8daq_\xd2G\xc8\xd0\xd9l{6\xd0\xa6\x8e\xddh\x9c?\xc1\x9b\xcfNk9\xd0\x19\xf7_\xe2|\xebej\x161\x91j\xab\xc2\xbf\xcf\x87\xcb\x12\x9e:Q\xb6\x18Hk\x9e\x13ETJ\x13|\xcb-1\xdc\xf7\x12\xd3\x8a\xc8&\xc6,>\x9d\xb2\xbe\x93\xe5\xe9NWEYm[z\xca\x0e\x9d\x0d\xad\x97\xc1\xe9NY\x93\x94#&\\k0\xe5-\xad\xfe`\xca\xe3ZM\xc2\x94\xc7U\x9dB\xac%\xd6.\xc4_\xcd9s\xf2k\x1c\x06\x0f\x10\xbb\xfa!I\x8c\xdc\xd9K-\xc4\x94\xae\x9e\xac>b\ns\xfb\xac\x99h\xb7\x98\xc0\x00\x85\xfb\x03|\xe3\xb4^\x14\x9bn[)\x16\xe4\xc1\xb1\xe2G\"\x08\x12y\x1ez\x08\x06t\xd40/\xd0\xd7I\xf7\x9d\xf2aA\xb1p2Tu\x84*\xb5\x8a\x13Hi\x85\x12\x03\xe5W>8\xe4\x1c\x92\xa6c\x8f\x10~\x1e\xd1\xc66\x17rB\x06\x03\xa6\xb8=vN\xf01J\xcfc\xd9\x94\x96_\xeb\x1d\xff*](\xbbg\xb3\xe2\xda\x10_\xaa\xa2\xef\x8b\xc5=PW\xf0\x7f\xf6\x8d\xa0\xa8]s\xe7\x8a\xfd\xc5\xefa\xde\x10\x12c\xca\x04\x07bF\x9aZ\\:\xc5\xcf\x02\x80k\x0eI\x19\x03F\xf9\xa6\xcd\xb7\xd3\x9d\xd2>\x87\x8dg\xd2\xc7y\n\x82v\x8e\x197\xaa\xea\xc7\xeb_\x16\x0b\xe0\xf5\x1d\x0f\xd3x\x10\xa7\xb1\xdd]\x18T\xa3\x9e\x0e\xf1\xfd\xd4\x90H\x8c\x93q\x18\x9a\xa4\xe1\xc2-\xcckl9\xe4x5V\xe4\x80\x85Y\x83\xff4\xcb\x88\xe7\xf0\\k\xa4R|\xd3!\xae\x9e1x0\xc0u\xf4n\x17\xbb\xd9\x1d\xb1\x83#\xb9O\x12s)\xc0\xb4\xa8\xa0#\xfb\x19H\x14\xc46\x83\xdc#G\xec`\xf6\xb4\x8f\x84\xa4\x90\x14\xec\xa0\x90$S\x90\x83\x08\x89,\x15\xcd!\xe8\xd3\xae\xe7U\xd8\x9e\x143h\xf2\x10\xd3\xe8\xbaH\xba8o\xc28gq\x0e\xa2\xf8%\x8d9EZ&\x90\x89\x8ex\x16\x18\xd9\xfc\xa3\xf7\x83\xce\xdc\xbf\xa0\xf4p\xf59uV\x9e\x8bf\x89\xf03M\xbdL\x9a\x809\x14\xcd\x84q\xa5\x9e8QBqx\xe4D-\x15%\xe6\xd7V\x17:\xa8\x1b%hh\xb2\x96\xd6\xea\x1d\xd2d\xd5\xd5\x1e\xc6\x84\x13zF\xdd\xc9\xe6j\x1c>\x9c\xa4c\xc4I\x1eN\x9c<\xf9\x8c\x8c>\x0b0b\x89\xf3\x91v.\x90\xa7\x9f\x1b\xefI\x91Hb\x1c\xa6\xdc\xa53\xa7F\x9e<\xfeI\"\xd4%\x976\xd2\x89\x9ba\xdcH'(\xf9 [&\x15{\x0e\xae\x08?\xf4\\(\xa4s \xcf\x81T\x00k\xae\x1e\xb0\xa1\xe6(\xc0\xdc*fiu\xa5U\xa8\\4\x9b\xdd\xa05\x89*\x926\xdc\x96v\xca\xf71\xb0\x8f\x9eN\x81\x82\x8d\xce \xe4\xdd<\xe1-\xa3\xcc#I\x15\x80\xc9\xf4*\xc0\x165\xbb&0\x91\xa5\xddG\x0d\x19M\x91Y\xb4\xdez5E\xe1\x8e\xf2\x900\x87I\xd3\x95\xa5\x17\x07\xa7\xd9\xf7!\x0f\x1f\xdb\xa0\xf0>\x16m\xd9l\xc1\xfeAZzW\xb4K\xd6a\x81n\xf92\xe9{V\xcf\xa7\x7f\xd2^$L\xfa\x96\x14H\x12\x95<\xdf\x8d=4\xc7bA\x87\xf4\xd9\xc2\xd7\xed?\xb9\xd6\\\xa1\x96\"\xa5\xb4w\xb8\x19?C\xa1v-\x95ij\xd5\x05\x04\xbc\xa8\xd1\xf6\xf7e}\xe7\xbb\x0d\x8d\xa2\xaf\xfd\x136$\xd6\xcbWz\xdb\x95=\xbd\xd9\xb6\xd5\x98^>\x7f\xfa\x9d\x9d]\xab\xb2^\xf2\xe4t\x90\xd6\xccN\x9eY.\x9azJ\x0f\x10E\xc2\xa8H\xaaF\xf9=:.~7\xf4\xd1\x0f\x05\x06\x85T\xd1\xab>\x86w\x8fH\x12w#\x93\xc2\xcd\xc1\x1b\x86~MJ\xf7\x9f\x92\xe0?\x9e\xd2?\x9e\xc4?!m\x7f$Q\x7fBj\xfeh2\xfe\x94\xf4\xfb) \xf7\xa3)\xf6\xd3\x93\xea\x87\x94\xc3q\x89\xf3!=\xbeA\xc8\x03\xb8\xddCr\xfc\xfd\xa5\xc3\x9f7\x01\xfe\x13\xa4\xbc\xdfs\x92\xfb\xbd\xa7\xb5\x7f\xa2D\xf6\xcf-u\xfd\x93&\xab?\\zz\xa1~\xf1L\xef\xd7l\x0d\x8b\x16\xee\xcd\xcbr\xc5\xddc=\xcf\xf0\xde\xa9\xc4\xecM\xad\x81pyq\xd7m\xe7hs\x86\x80\xbb\x80\xa2\xbcC\xdeT\x91\x95X\xe4\x90\x90\x05Q9aaB-jn\xe3,\xf5\xafY\x8bH\xe1\x1c\xc9)\xb3\x8d\xcb\xb3(\x01\xd9\xf7\xa7a\x90\x86\xefQ\xd7\xc1;RTU\xf3U\xa4\x18\x90c\xbd-:Yx\xd9\x88\xb0At\n{r]\xcd]\xe5\xcc\x95\xb6\xe3\xb2\xa5K9\xed\xa7\xa4\xa5]\xb3m\x17\xec\x7f\xd5Q\xa1\x8c\xa9l\xce1\xe0\xb5\x90t\xba\xf3/\xf9&\xf1I\xb7\xa0\xcc\x7f\xa1\x08\xdc\xcflt|\x92ez\xb9\xf8\xe5GZ\xfc\xe3\xe5\x0bZ,\x96/^\xbd\\\xd1\x17\xbf\x16\xcb\xd5\x8b\xef\x17\xab\x9f\xbf\x7f\xf5\xcb\xed\xea\x97\xe2\x07\xc4*mt\xa6\x1bq\x0d\x13(<\xcc\x9e\xfd\xfeK\xfd\xf5\xee\x97\x9f\xeb\xae\xe8\xbf\xfd\xb4\xa9~\xfay\xbd\xfd\xfa\xf2\xf1\xd7]_\xfd\xf9\xe3\x97\xed\x8f\xff\xfa\xf6\xf3Zr%\xadF\xc6&wv\xb8m\x8d\xf2\xcf\x0bN/\xc5\x18\x85z\x7f\x8d\x91\x07\xad.\xa511\x98\xe5\xcd\xb4R\xce5P\x9dZ\xda0\xe1\x8d\x91\x83\xe4\xd7}\xed]{\x90^\xbbh\xee\xf8&\xdbB-\xc3\x84\x7f5,\x1bh.\xa3S\xed\x9e\xdc\xd2i2\x8a\xdb<\x03b\xf1\xd3\xd0\xb7\xe1T\xd3\xec\xa0\xe2]\xcd\x1aj\n\xd6<\xd3\xa8\xd63Lk\xba\x04T&!\xcb\x1c\xe3\x8c\x17yR\x0eP%\xc3\x9a\xc9\xb6\xe1a\xc7K\xc5O\xc9\xa16s\x15\xdc\x89\xd6$\xd9\xbc6\x17\xfb\x8f\x93\xacK\xb2y\xe7\x90D!E\xfe4\x17\xc19$\xd9V(\xec\xadY\xfaM\xb2N\xc9\xe6\xb5R\xc9\x96\xd7{\x9a\xd5J6\xdcz%[~\xcf\xae5K6\xafUK6L\xb1\x95\xcd\x1bT\x1f\xe4p.\xab\x97l~\xeb\x97l\xf3\x8f!\x14\x1b\x9ed%C\x1f\x8e\x94\xc3\x8c[\xcd\xd0'\x83%0\x13\xach\xe8\xa3\xfe\xb2\x97 V5\xf4\xd1P\xa9\xcb\x14+\x1b\xfal\xa4\xbce\xd4\xea&[\xba\xf5mx\xc3o\x85\x93m6k\x9cl\x910\xf8=X\xe7P\xd2\xb3Z\xe9\xd0\x1e&[\xebP\xaa\x87\xb1\xda\xa1]\xcfo\xbdC\xbb\xd9\x87\x15\x0f\xed\xe8p\xd6<\xb4\xfbg`\xd5C\xf9:\xb4u\x0feb\xafV>\xd9\xc2\xc9\x15&\x18\x01Qz\xbaaP\xb6\x10\x073\x19\ne\xf3\x19\x0ce\x0b\x18\x0ee\xdb\x87\x8e\x12\xbc\xbf\xc4\x0f\xa8i\x86F\x84`S#\x17#S\x9d\xf3-\xda\x04\x03\xa4\xbb\x16\xd2\x1c\x99c\x88\x1c\x9ay5\xc6.\xc5*\x0d\x04f\xb9ArB\x98P\x0d\x17\xc5\x16^*\xf7\xed\x01\xbb\x91\x1fr\xe818Y\xab4\xe2*\xbe@1Y\xb2\x8d\xbf\x87\xc7\xf7\xb1\xd1u\x0e\x80\x0b\xfb\xd2\xf1@\x13s\x0d|\xf1%\x07\x1bd\n\x0e,F#\x13{\xecSXdc6\xd9\xd1VY\x0f5\x1b\xb09\xb40\x1f\x85a\x9b\xdd\x89\x9e\x0d\xfb\xecj[U\xab\xb2\xaa\xe8\x92|\xbd\xa75\xe9\xca\xbb\x9a\xc7$\xe1\xc3n\x8b\xba\x83M\x91}-\x91f\xc4}^\xd5<\xf3\xd0\xc7j\xb4\xf0)1>\x0dO\xe2t\xefB\xf9\xf2\xd6\xa7)\x99\xbdVrEM\xe7mY\x17\xed\x8e\x9c\x0c\x05X\xca\xba\xeb\x8bz\x81|\n\xbcd\xd1\xd8\xc4K\x82 (\xa5$Ry\xf0\x12HR\x8a\x99\xcb\x0c)\x9b\x8b\xdb\xca^\x08\xff\"\xbc\x11\xef\xcebv\x9e\xc1\xf0\x9cez\xf6\x98\xec\xd1\x8c\xc4\xb6{bT\xea;\x94H\xba%\xda\xa1g\xa5g c@FZcl\x9eGl\xc3\x19\xf2\x7f\xd9\\xM\xd4A\x81k\xae\xb37!\x92\xb3LO\x99\x06\xcf\xc3L\xae\xdd:%\xb5\x8d\xd3\x95\xf9\xc3\xd3%\xc3K`\x8c\x04\x92\x1c!Og'82\x9f\xd8cF8\xb7\xa3\x91\x86\xee\xfc\x15\x1f\xb9\xc0\xf9\xa3\x1ae\xfbN\xda\x06\xfa\x10C|\xa1\xe7\x96?\x8f\x11*U,i\xe2\xcdqD\xd2+\xea\x1a\x03\n\xe4:\xc2%~g&\xa6\xf0\x81\x03\xbd9\x91\xfcH\xff\xa3\xd3`F\xa7\xc14e\xce\xf3\x81\xbd\x17:\x1ed\xe4\x12\xe5\x8e\xca\xaabW\x01( !\xee\x01.\xa7(\xbd\xd2S\xee\xf4\xdf\xb6$\xa6\xae+\xab\x15\x0d\xd5\xe0\xeb\xe7-lX\x0c\x04y-\xd7rQT\xd5\x0e\x8a\xb8\xf4\x8d*\x87:\xdc\x07|\xd7f\xf1\x1d\x1f\x0bi:-i\xd8\xa9#:p!\xcd\x18[\x97l\xa7\xe2\xb70\xa8\xa5{:\xec\xafSqX\xb1K\x98w\x13\xc9\xdaz'\"N\xaf1KN\x7fG\xfaF\xf4\xc0=P\xfcC\xf1\x10\xdb\x14m\xb1\xa6=\xc5f!<\xae\x0b\xc2MF+Y\xc6\xc9\xb0ptE_vL\x04C\x1d\x9b\xcd\xa6\xda\xf9\xef\xf70\xb9W\xce\x91-\x8a\xeb\x14\xe2\x01\xe7\xdd\xe0W>Ib_\x80-Q \x1c^\xad\x0e+\xf4&\xbf\x97A*\xa0\xf4Dyc^\xd9M\x89\x0cw3A\xc4\xd6\x0dg=\x9b\xe7ka7\x00\"\x83\x9c\xc4\x12\x8f\x93\x13\xb9P\x81\xda\x9eM+k?\xfe~yu\x8dm\xfd\xc8\x1c\x87b\x0c~{\xfb\xee\xf2\xfd\xe5\xf5\xe5\x87\xf7i^\x11\xf7\x8d`9S\xf7\xf1\xc0@}\x0f\xf3q#o(\xafN\xde Rt\xf1\xe0\xc4\xe4v\xe8\x94\x9a\xe3\x05K\xcfE\x01S\xa8\x1c\x8d\x8b\x05\xffl\xbb< UJ\xf9\xc1\x08\x82S\x94\xa7\x16\xf6\xf1{\xdaRr\xa2N\x19\xe9\xb9\xae\x9b^Y~\xbc\x08`|\x8d\\~\x90\xda\xa4\xb2J\xb6\xdc\xf4N}R\xeb\xd4\xcbc\x81o\x13\x1f\x1f\xfc\x8f83\xc5\x0ece\xd1T\x15]\xc8\x0b0\x7ft0\x8b\x93\xfb\xe2\xd1w@r\x0c\x18\x13Xhqy\x11\xb5Z\xdeV\xf4FX\xfb\xf6\xa0(\x1e\x1d\xe2)\x0f\x1f\x1d\xe2G\x87\xf8\xd1!~t\x88\x1f\x1d\xe2G\x87\xf8\xbf\x93C\xfc\xda\xd8n\x9a\xc6a_F\xfe\x86\xbe\x8e\x0c\x03\xbb\x19\xea\x0eL\xf3R\x03\xbeG\xcfe\x11\x92fp/;\x84\xfc\x9c+\xef'\\`\xcf\x85\x0b\xd3z3\xc3g\x89\xde\xb4B5T\xbb \xfeJ\x84D\xba\xb7\xf2X\xaa\xebX\xaa+\xcfC\x19+\xf8cu3\x8b\xf3j\xfe\xd1\xfb]]\xee_Pz\xc7R]!\x82\xe1 \xd8\xa3c\xd6\xeef\xb4[66\x1e\xc7\xcdy,\xd5\x95\x84B!\xf1u&\xf1-N\x12'\x96\xcc\x86J!\xe9\xc8\x14\x92\x87N!O>#\xa3\xcf\x02\x8cX\xe2|\xa4\x9d\x0b\xe4\xe9\xe7\xc6{R$\x92\x18\x87dq\xe9\x1cKu\x91}\x8et$\xda\xc5%4 \xf1\x82\\s\xa2u\xbb:\xafv:\x0b\xda\xc5\xc9\x06\x19\xa8\xeb\xe5\"]l__\x0e\xd2\xe5\x99U\xff\nbW\xbc\xfb2\xbc\x1bm\xa2i9W9\xddQyWC\xdd\xdb\x8e\xe1\xe9\x99XIB6V\xa2&o|}\xa0\x85\x0b\xc8\x8a\xa5,\xb5(-n~\xc9\x19<\xb1\xb2\xb6\x12$!*9V\xb5\n.\xda\xb8\xec\xae\x16\xb9pU+\xd5\xbb?\xcf\xaa\xd2\x87\xb1ZW\xe2\xed\xb9s\xbc\x8aC\x0d&\xd4\x11\xc2\x91$\xd7\xc32\xec_|{5\xcb\x19\x80\x86\xfaB\xf9\xf7\xcf\xd4l\xa9\xde;\x9d\xff6\x87\x9b%\x82\xaa\x97\xc1rR\xd6\x01\xef\xe8If_\xda?I0\xc7@0\xbb@z\x8f\xe9\x19\x05\xfc\xb9\x04\xf2z\xc3\xf3\x07\x04\x83\xf3}\xee{\xd4q\x9f\xa6\xbcL\xccp\x1a\x8e\xc2\x9f\x87_\x1f\xb8 \x19V\x90\n(H\x83\x12\xa4\x81\x08\x12\xe1\x03 \xc0\x81D\xc8@\x12X \x15&\x90\n\x10H\x82\x06\xe4\x81\x02b\x17\xbdq@\x00OV\xd2\x00\x04`O\xce\xff\xfd\xba\xfd\xe7w\xf8?\x91\xab\xff\x00N\xfe\x83\xb8\xf7\x9f\xd0\xb1\xff\x1c]\xfaO\xee\xcc?\xac\x1b\x7f\xe6\x9aB\x1aIG0\xce\x9824\x94.\xd4\xb6\x8a\xedEA (\xe8\xe1\xd3aZJP\xe2\xec\xd8P:Pl!\xe6I\x03:)\x12\xdb\x98\xa0.\x88g\xc0L\x00\x16\x9c\xc1M\xde\xe9\xb1\xdc\x19\xd3\xe0\xbe5\xd89\x13\xa0\x0b\x04\xa9\x14\xeb]\x85\x8c\xbb\xe2\xc2\x9b\xe23\xff\xa2hN\xf3bd\x06O\xcc\xdb\x84e\xca\xdc\x1f\xb7)N\"\x7f\xde\xc6`N\xc4Y\x99vm\xac\xa1\xaeI8\xc9f \xadld\x94\xae\xbb&\xed\x96e\x91Hq\xbe$\xf1\x931\xcf\xc9\xd3\x99\xed3 .E\x9e\xf5\xca\xef\x16A\xbf\x1e\xe1 \x11\xe4B\xfe\x90d\x1bVwQU\xb9\xc5\xda\x8e\xb5\xacr\xad\x9d\xa1ZV\x84l\n~}*\xbd\x15\x9f\x86\x07\xd4\xf9\xda\xf0?\x15\x95\xfe7\x15\xfc\xd6I\xc3\xa7da\xd4\x01\xf2@w\x89\xdfZ\x9aL\xfb_\xfb#|\xa0p}\x11\x11$-\xed\xb7m\x0dH\x8f\x8f\xc5\x1d\x95\xa6\xdd\xb3\x9a~\xebo\xd8\xc3}Cn\xe9\x9d\xa3v~\xd9\xd2v\xc7>W6b\xf60\x9b\x14J\xd6M\xd7\x13\xbaZ\x95\x8b\x92\xd6}\xb5;#\x1f\xeajG\x9a\x9a\xdf5\x9a\xd5\n\xee\xae\x8c\x0d\xfb\x0b\xbfo\xb6\xd5\x92\x07\xfe\xd1\xde\xb0V\xf1\x972ge[\xd6\xfd\xcf\xaf2\x84\x93`\x8dOM\xbd]\xf3\x1b\xab\xf8\x0d\xeeFE\xcdx\xe3\xd7\x17\x1eh\x0d\x13iQ\xd9\xd6\xc5cQV\xc5mE\xcfl\x1f\xc7%\xa7^1\xfdCM\x10\xa3]\x93-\x93?\x8c`\xeel\xd9]\xb8\x93W\x95\xebr\xefs\xc7;\x91\xe2\xbco\xfa\xa2\xd2\xfc\xbc\xc2s\n\xfb\xc8\xd8o\xc2u\xb0\xad\x1c\x0c(\xd7\x0e\xed\xe9[\x91\x8a\xaezB\xd7\x1bv\x03\x17\xe1\xef\xc2\xee\x03qO\xb0\xa5\xa1#6s\xb7;B\x8b\xc5=)6\x1b}N\xf8]\xf6\x86\xf3\x89\xcdL\xbe_F#\xc8f\x81\xef\x99\x86\xf4\xed\x96\x12\xeb\xaa[\xf4\xda\xa8\xf9\x83b!M\x82B\xa29~U\xe8I\x1e\xde\xf6L\xf3\x0b\x10Q\x1b\x90\xcb#MR9\x9f\xf0\xe7\xcb\xce\x99ek(\x0d\xdb\x8e-\xf7\xde\xaa\x0c\x03\xc3\x97\xc2>\x863\xb1\xaf\xcb\xbb\xbai\x9d\xd8n\xf9\xa5\xd8\xdd\xc0,\xe9\x8b\xd2R\xa6\x9a\xa0E\xfd\xf3\x17D\x10\xb3\x17\xa3\x1cv#\xbf$c;\xd2\xa2\xc4\xfa\xa15\xc7|7\xed\x92\xb6g\x7f\xb3\x87rU\xd6\x0b\xfa\x9a,\x9an\xddt/\xba\xe5\x03yy\xf6\xeaG\xf5\x90\xb8\xc2\x19r\x18\x04\xedP%\x91\xf3A\xd7\xb7t\xb9\x04>\xee>}|\xa3N2q]\x82\xf3EI\x0e\x8d\xdc\xb0\xc6g\xe4\xad\xd0\xe3S\x95!M\x15\x19\xbcy\xd9\x05\x1b\x19\x95\xb1\x0e=\xe0`z\xe1\xc6cR\x13\xec\xed\xe9\xbeFhA\x9f\xdb\xcc~Gh\x819% \x88\xd2c.\xf4\xb9s\x91\xa7y.\xa1\x1d:\x17\xfa\x13\xa6\x1b\x9f\xd3\xd3 \xed\x98u\xfc\x18dm\xbbNR\x9e>\x06Y{\x9e\xda\x97\x9f\x15!>\xbb\xb7\x15\xe9c\x16\x9f+B\xf7p\x9eW\xa4\xf3\xfd\xf8_\x91\x8e\xf6\xe5\x85E\xba:\xac/\x16a\xe0\x99xd\x11\xce\x9e\xc2/\x8b\xb0\xb1w\xef,\xb4g\x16d\xed\xe1cF\xf7.\xb4XM\xc8\xa8\xab\x17\xda\xfet\x9d\x19\xc2!\xc7\xba\x83Qb\xd2E\x1ct\nC\xf3/\xe5<\x0ebh\x93\xdc\xc4\xd0\xe6u\x16C\x0b\xb9\x8c\x91^\x91I\x9a\xe8>v\xe8y\x9c\xaf\xce\xaa\x8d4\x14,\xbcneh\xd3\xac\x04\xb1\xc9\"6\x0b9\xfeg\\2\xf8\" \xe3\x9eih\x07\x1ep\x8a\x0b;N%6\xdc\xa0\xd3\x15\xda\xa1\xc7\x9d\xe7\xf4F \xc6\\\xcdN\xb7{\x0c\xf2\x1e\xe1#\x8f\xd1\x89\x0cf\xe4Bf\x0e&\xdb\x9f\xeeP\xf0\xd7\x9b$\x11vf\xf0\xb0\x1b\xf4\xc6\xc4\x1db\xf6`\xa5K\xc9HC\xa4s%\x81\x9e[\xcc\xe01\xf8\xe9\xd0\xc1O\xd00X\x00\xd9#4\x80\x84\x94\x02\xbfJ\xe0\xc0\x04HL\xa4\x04O\x86\xb8\xb4\x19\x0f\x1b@\x88M\xc3\x0e\xe0\xdca\xfdx!\x05\xc4\x03+ \xa9\xb3\x88\xb8\xc8I\xd2<\xce\x033 \x11\xa8\x01\x99\x1bn@\xbc\x90\x03\x82\xc2\x0e\x08\x0e= {\x9f\xdf\xf1P\x04\x84\x98p\xd3\xa3p\x042 \x92\x80\x10\xb3@\n$\x04T A9J\x92fj\x02h\xc1\xff\xa9y\x80\x0bd*x\x01\xa1W\xd6(\x80\x81L\x001`\xbd\x00\xac\xc1\x0bd (\x98\x81\xf8\x00\x0dd\x86\x85\x9b\x0f\xdc@\x92\x00\x0e$\x0er \x01\x83\xc4x\xb0\x83Eh\x80>X\x7f\xc0\xf0\x0fy\x00?e\xc7\xe6\x97;\x1d23X\x02\xa4\x0b\xcfUx2\xd4:y\x92\x16\xc5y>\x96\x1a\xc5y!\x94\x1e\xc5y8\x96\"\xc5y!\x9c&\xc5y<\x9a*\xc5y#\x9a.\xc5y#\x9c2\x85\x8cB\xdc\xc8\xf7\xe2\xb8\x1bh\xe3\xd07\x01\x82\x89)T\xc8~\x918H\x07{\xc1\xe3 \xfd\xcc\x86\xcaAh\x1f\x16\x9b\x830\xb0?\x84\x0e\xd2\xd9>q:Hw\x87G\xeb L<#\xcc\x0e\xc2\xddS!w\x10V\x0e\x80\xdf\x81\x16B\xf1@\xf3\xdf9\x8d\xa7&\"z\x0c*^\x99>\x1e\xdd\xe3!\x18L\x0f\x93r\xce\x8c\xc4\xfb\xa0\xb4$\x06h2\xea\x07Z?\x12\xfb\xe3\xe5-\x03\x01\x04\xcd\x8b\x03\x826\xf1B\xe0\xd5IS\xd6m\xd7\xc3\x1b\xae\xb5.\xc9\xed\xee\x94l7K\xf5\xff}\xb9\xa6]_\xac7\xdd\xa9\xf2%\xc1\xbd\x06j\x9a\xb5\xb4\xe2\xcf\x9a\xd5\x8c3\xae\xaa\xa0./oX\x97\x9973\xf6\xca\x0b\xc6\xa0\xf9\x1al\x84\x1e\xd0\x8e\xf4\x9c=\x00v\x15\xbe\xee\xb4\xee\xdb\x1dW\xd8E\xcf\x08/\xb7\xa9\x17g\xad/\x8f\xce\x0c\x92YL\xae\xb8\xd8/\x9aV\xefUL\xf7\x13\xcc@Ut\xbd\xec\x1eah\xeei\xe0\xe0\xd4\xd2;\x0fb{a}\x96uO\xefh\x8b\xce\x81\xf7z\xce\x8eA\xe9.1\xb7.\xb0Sv\xa4\xac\x17-?\x96\xe5\xd7\xc3\xc3\xa1a\xfc\x1aIa-\xca\x9b\x0d\xbd{A\x00\x01VR\xd8\x1ceS\x9fC\xb7\xbcB\xb8#A\x0d1q\xc1\xbe\xe3wL\xe5\xd3+\xc7\xcfw\xf3\xba\xe1}\xc6L#\x97\xcbK\xe5h\xdd\xb3\x81\xc4vP+R\xc4\x0by\x11\x03\xfa\xff\xd9\xfb\xbe\xe6\xb8md\xdf\xf7\xfd\x14]\xfb\x12\xa7n\xac\xd8I\x9cM\\\xb5\x0fZ\xdb9Gu\x13\xc7\xc7\x92w\xefy\x9a\xa5f0\x12#\x0e9&9\xb2\xe4\xba\x1f\xfe\x14\xf1\x87\xc4\x7f4@\x8c4\xce\x19<\xd9\x1a\xa2\xd1\xdd\x00\x1a\x0d\xf4\x0f\x0d\x0d\xd22\xd54P,\xb3y\xc1\xa0Q\xa4\xcf-,\xd9\xf0_\xf3\xd92A_\xd2_\xa2\xd8\xe3\xff\xcc\xce\xa0Dw\xf2\xac\xa4\xbf\xa1\x99T1*V\xce\xacL`Q'\x9e\xa6\x11J\xb16\x1d\xc6\x88\xb8T5r\xb0l\x82 \x08\x15\xab\xabT`\x8b\x87\xcd\xe42\xbcH\xb9\x9al\x87%*b*$\xcag\x12\xac \x17$\xdc\xf1\xbe \xea6\x0e\xcbc~BZ\xec\x0cF\x19\x0c'\xa3\xf3R\x92\xe1g\xa4\x93\x81\x08\x05Y\x18\xc0\xccKSa\x8c\x0b\x1b.\x8b\xad\x96\x13,\xeb\xb6h\xcbf\xc7\xe6\x1e\xb4\xe4\xaahiH\xb1\x18W.\x7fr1\xf6Q\xf4\x03-\xac\x9an\xa7pS\xd5\xb2~C\xc2\xa8s\x07;R\xa8\x85\xcePg\x06?4j\xf2~[\x05AY\x82\x16\xb6@\x08\x1c\xdf=\x89\x8e\x9fX\xe9\x1d\xdf=1N\xa4\xc3\x9f\x1e\xdf=9\xbe{\xe2$\x9d=>c\xb4\x90%FcP}\xb88\x8d\xd1\xf4~b5F3\xfb\x8a\xd7\x18\x0d=l\xcc\xc6h\xfe@\xe26\x06_\x8f\x11\xbb1\x98\xd8s\xfc\x06\xfe\x17\xbf{\x92+\xb6\x03F|\x07\x10\xa7\xab\x86\xc8\x19c=`\x89\xf7\x80-\xe6\x03{p\xbd\xe7\xc5\x804b\xac?m\xbe\xb7\x16\x0b\x82 _3\x03D\x1a55\\\x04>W\xde\xed\xc8\xbbCG\x10rj\xfd\x01\x14\x80\x88 \x8a\x19F\x02O( B\x9c!c)\xfe\x90\x12x\xc3J\x10\xe2!\xa3v\x1c!&\xf0\x84\x99 \xc4\x1eRE\x81p\x13\xb8BN\x00\xbe\xb0\x13xCO\x10\xd8\xd2\xa5\xc6\xa4,\xa4\x8c(\x15\xb8\"U\x80Th\x9e\x88\x15xT\x90-r\x05Q\xd1+\xf0Z\xb7\x9cQ,\xb0E\xb2 o4\x0b\xf2F\xb4\x00\x17\xd5\x025\xaa\x81>5W\xabD]L\xb7\x1f\x9a\xa7\x9d\x98g:\x86\xcb\x16R\x03\x7fX\x0dr\xf2\x86;;\xb7\x84$\x82a6\xc8\xcaf\xd4 z\x90]k\x84 \xe63l\x18\xb5\xf4\x98\x9c\x93\x90M\xa6\xe4\xc8\x80T\x1f\x17\x1b\xf0\xb2\x11\xa1O\x9c\xda\xc2!\x03\x9c\xbe\xadA\x1f\xf3Rs\x80\xa9\x8cA>pvi\x92\xb7k\x0f\xfaAhmw\x0ej\xc8\x17\x00\x84P\x10\x10\xf2s\x893j\x960\x17`\x82\x82\xb0\x07\x86\xa3\xcc\x9b\x97q{R /\xbf\xb9\x83\x85\xe0 \x18B\x023a+\xe0\x0e\x1cN\x07\x14\x8e4:\xee9o\xad8\xc7I\xb1\x07\xca\x92|\x16\x9d7\xa4\xd5M\\\xc5\xf4\xd6\x9cV\xc0.\xa1F\xcdb$\x0cU\xef\xc1\xe7 J\x85\xb1\x1a\x01\x12^\x99\xd4?D\xac\x95\xb9\xe43\x19\x10\xb2\x9a\xbfh\xb44\x13\x84\x97;\xd53 H\x83\xb5O\xc9\xfd\x15\xd1=1|\x87MY|'Z\x10\x12:\n\xd3\x93\xc2FlA\x86\xdde\xb3!@\xee\xfa\xb6\xe0g\xb4\xeb\x92'\x0e\xe1\xd4\xca>\x0c\xa08\xbe\xcf\x86atn&\x99\xe3\xfbl\xc7\xf7\xd9\xe4\x9f\xfc6(O\xc6\x97\xe3\xfblq\xd9\\\x8e\xef\xb3\x1d\xdfgc\xe5\xf8>\x1b&\xd7J\xda\xfbl\xba\xab\x13\xf9T\xdbT \xde\xbf{\xc5IaSY\xa4=\xda\xc6\xeb\xea\xceC\xde\xfc\x0e\xbc\x15}\xf3\xed<[\n\xe4eu\x1c\x91\xb3\xe2\xdd\xcf\x07\x8eC\xfc\xd8UV\xe6\xd0\x0f\xcd&VR1\xadVbR\x92\x0f[t\x9d\x15+\xbe\x95\x15\xdbp\x98J\xf0\xa9\x83\xe3\xdbg \xd8X\x0f\xad\xe3\xdbg6p!\xf6\xfb\xe3\xdbg\xa1\x1a\xc7\xb7\xcf\xac\x038\x07\x1a\xd7\xd2\xc0^0\xb9\x96v\xb2!s-\xb4\x1f\x16\x9fka`\x7f(]Kc\xfb\xc4\xeaZ\x9a{x\xc4\xae\x85\x89\x03\xc2\xedZ\xb8{,\xf4\xae\x85\x95\x07\xc0\xf0\xb2r|\xfb\xcc\x86\xf3e%'\xda\x97\x15\x13\xf3\xcb[\xf2;Y~\xb5\xa4\xa1\x80\xed\xfa\x17\xc8`+\x16\x98\x95\xa5\x0d\x11\x17\x9f\xfb\xdd\x8f/\xfa\xbb\x17w/\xaa\xea\xf6\xc5\xdd\xf2\xe7\xcf}\xf7\xf1\xae\xba\xf9D*\xc1\x83-4\x1c+\xf0\x14\xf4E\x89\xfc\xe2\xa7g\xdf\xaf\x7f\xba\\>\xfd\xf1\xd9\x8f\x7f{\xfa\x03\xb9|\xf1\xf4\xe7\x17\xcf\xd7O\xbf{\xfe\xdd\xf3\x1f\xff\xf6|\xf9\x1dYj\"\xab!c\x8b\xd0\xec\x83\xe7\x1f\xef\x9cb\xff\xdc}\xac\x96\xd7\xdfww\x9f\xea\x1f~\xf8\xe3\xc5\xb3?>_\xf5?\xb5\xdd\xf5\xed\xc7\xfbu\xfb\xc7\xb2\x95\x19\xbc\xa0\xd0\xc9\xa2fK\xeb(\xc8\xb0\x06\x15J\xa8\xa4\xa8\xbaF\xe6\x83\x1b\xda\xd5\xb4\xed^6\xed*\xfa\x89\x17E\xbb\x12\x0d\xe6Ws\xa5\xb0\xbfk:\xd1\xab=\xff\xf8\x9dS#\x9f~\xf8n\xf5\xf1\xbb?V\xb7\x9bU\xf1y\xf7\xe9\xf3\xb2X\xad\xae\xaf\x7f\xba\xda\xec\xbe\xdf,?\x93\xef5!\x10\xaf\x00\x06\x85\xa0\x00Q>\xe5\xe9\xbf\xc7s\x06*K\xdf\xc0\xba\xac\xe9\xf9\xc2\xd8\xe7\xf4\xfcC_\xdd\x85\x9eYg\x08F\xc5\x16\x9a\xfeQg5>s\x00\x0f \x86\xf7\xe1\":\xc6\xcfzT\x83\xce\xceJ\xc6\x83\x9a\xe9\xe2\xb2#\xed\x01\xc5\xba\xccg\x9e\x13\xc2\xb1/>f\xbd\xd1\x11sf9\x19?&\x96@h\x18\x9dXBiU[\xc0\x00\x7f\xd76\xea\xb5\xf8.\xfe~\xad:\xbfVF\xa4O\xb0:\x9eF.\xc7\x0c\x98\xd7M\xb5\xea\xf4I\xf1\x84:\xf7T,\xb2\xfa:\xc9\xf3\xd4xr\xd6vS\x00o\xe4\x1d\xb5\xad\xb7\x1e>\xf9`\x87\x1f\xd8\xad\xd8\xb3\xd70^\xa4d\x16\x0d\xe0l\xb3\xad(\x84\xb3\x83nusr\xca\xe1be\xdd\x93v],m{\x9d\x81\xc6\xae\xa3\x98\xdbv\xf4\x10\x08\xdb/\x0d\xea-[\xb6#yE\xb79\xba\xe8\xc1k\xc2\xfbQ\xc1d>-\x17\x81\xc7\xd3s\xfa\x95\xfc\xbbm\x075\x14\x9a\x91\x9b\x08\xcd\x15U\xd5|\xe2\x18\xd2\xb2\x96\x14\xac\xd5\xa4w\xa7,!J&\xb2\xfd\xa2\xb0\xf3\x9a\xb0s\xdc\xb1\x12B\x7f\x04.\x08\x07B&\x003/\x07\xfb\xae\x06#\xb0\xbc\xd9\xae\x05\xa3.\x05#\x94\xe1\xbf\x10\x1c}\x1d8\xf62p\xdcU\xe0\xb8\x8b\xc0\x91\xd7\x80#.\x01G^\x01\x8e\xba\x00\x1c{\xfd7\xf6\xf2o\xd4\xd5\xdf\xb4\x8b\xbf\xe1C,V2_\xfaE_\xf9\xdd\xf3\x85\xdf\x87\xb9\xee\xbb\xbf\xcb\xbe\x8f|\xd5\xf7\x01/\xfa>\xe85\xdf\x03\xb8\xe4{\xc8W|\x0f\xe6\x82\xefc\\\xef\x0d]\xee\xf5\x07\x0d\xf87\x19.\xf6\x06\xee\x00%_\xea\xb5<\xdb\x03\x12\xae\xc4\xf81\xbc\x82\\\xd0-\x92\xb8\xf1;\x0eE\xe8\x9b-T\xe4\x96T\xdciU\x8fPlf\x87\xf9^':\xc9\xcd\xaecw\x85\xa1\xa8\xef\xc5\xf6\xab\x93.\xc5Y\x83A=\xbb\xddW\xc8\x1e\x9d\xd8\xb20\xfa\xea\xbe\xa3\xacaW\x0f\xfe\xbc\xe3\xea\xb3\xe0\xa6*\x87\xbd\x1f4\n\xbc\xda@\xd0\x0d-/\x8a\xe5\xd2\xea\x1f\xcfp\xd6\x1d\x1ed\xb8\x97NGa\xc5\xf6b\x10\x84J^\xec\xfa\xeb\xa6-?3\xfb\xd2\x92%)o\x07K\xb7~\xea\x9a&\xdakB\xf2\xe5i\xf9\x98K\x14z\n\xbf\xa0\xa3`\xe1\xdc4\xcc\x95o\x9a\x06\xaai\x1ez\x89\x85\x01l\x0c[(\x89Ar\xde\x17\xf5\xaahW\xb29\xe5v\x9d\xdd\x91\xdb\x14\xed\x0di\xc7\xbfYc\xad-\x81n\xb7\xdd6\xed\xd0\xea\xb8\xd9\xa0\xfc\x9c\xf0\xe3\xdb\xa2\xef\xdb\xf2r\xd7\x13\xd8\x14\xf7\xe2 \xd7Bky]\xd4W\xf4.4\x95\x89[:\xb1\x1c\x0c#r9\xac\xb2\xce((\xddV/\xa8\x1dZ\xb4MU\xed\xb6\xaeNH\x0f\x89\xfe\x8b\x9b\xbc\xa2\xaa\xa4\x97I\xa4\xa1A\x15W\xf6\xddt\xa4Bg\xb7U`aH\x14\x02_u\xc2\x9c\xd0\xab\xec\xd6\xb03Sk\xd55@\xea\xe2\xb2b;3\x8a\xac\xe0\xf6\xf6\xef4P\xcb\x18\xe2\xd4\xec7\xc8\xc5\xd9.\x97EU\xaa_\x1d\xec\xee\xdfx\xfb\x11\xda\xa6\x91\x9fU\xa1\xfe\x17,\x9b\xaa\"K\x11\xd6\x1cO7?\xd5\xc6F\xf2\x92\xc3CZ\x16\xba\xb304\xe2\xb7\xe7=f\x80\x86b\xdb\xf7\xc5\x16\x03p \xc7[\xe6\xe9_\xf25\x92Qc\xc7G\x0c\x1c\x0cOmA\xe8\xeeG\x80q;\xce\x18\xbfZLT\x00\x01\"\x0e0\x93\xa0<\x0b3a\xec\xafM\x91\xe6\\w\xdf\xc3\xc0L\xf8\xb4\x0b\x18\xd0Xp\x05\xb6s\xd1L6\xc0y\xe5\"\xd3\x88\xb5.cJ\xd3\x01\x13\xd1y\x9e7\x00\xfb\x13\x07F\x13\xfb\xb6#a!1\x16&D\xc3/\xa2\xf4\xbf\x84Y\x94UV\x8d\x15\xd5B\x19\x17$,\xe4\x94I\x1a\x96~\xae \x0b\x89\x845n!\xc5xDH\xe8\xb2(\x11\xc2&1\xc4\xbc\xde\xab\x1al\xe4\x98c\x97\x96p\xf0l\x1e}L\xb7\x1fs\xec\x8e%\x10B\x0b\xf6\x05\xffhN\x18\xed\x98c\x17\x1dM1\xaa \xc2j\xb1\x81\xb5\xd8\xd0Ztp-*\xbc\x16\x1d`\x8b\x0c\xb1\xc5\x07\xd9\xe2\xc3l\x91\x81\xb6\xd4P\x1b\xce\xf2\xb1\x929\xdc\x16\x11p\xdb{\xc8\xed\xa1\x82n\xfb\x0c\xbb=z\xe0\xedACo\x0f\x1c|;\x88\xf0\xdba\x07\xe0\x0e(\x04\xf78A\xb8p\x18.tT=~\x95!\x14\x17\xf6\x81\xd2\xc3q\x0e\x82\xc7\x1c\xbbJ9\xe6\xd85w4\xc7\x1c\xbbSAl\x06D'g\xcb\x0d{\xcc\xb1\x9bG\x8f\xc7\x1c\xbb\xc7\x1c\xbbR9\xe6\xd8\x95J\xc8\x94\x1fs\xec\x1es\xec\x1e\xd2\xe9\xb2\x1e\xed\x9c\xae[:ch\xea\x85I\xd3\x7f\x90t\xf9 )\xc8\x8c\xf6\x02A\xf7\xf1s/\xeb\xbe\xe8qV\xf6\x1d\xf6\xcc\xcaJ02\x1f \xe5\x97\x98\xff\xf30d\x96\x98\x99\xf6K\xd2\xdf2\xc9\x9d#'\x9aL\x0b\x13\xd4C1\x96\xd8\x0b1jN\x8a\xe0\x1ds\xec\x06\xf7?\x82\xe5\x19^W`2A^p\x14+\xa3\xa6\x8f9vE\x89\x15\xc4\xe3%[\x18K\xb3\xe621\x9f\x0e\\\x96\x0dp\xa2\xef\x03\x91\xc5J\x96\x9e\x89S{\xa2\xa5\x03{\xbf\xa9b\x19\xf9\x1dS\xfcO+\x11\xbc\x17j\xd0\xf3\x06\xe939\xa5:\xcf \xabU\x06\x9fA\xe7\xc2i\x01=\xc7\xb3\xc7\x1c\xbbQ\x19W\x8f9v\xdd4r\xf8\x93(Y\xb1\xc6\x18A*,Ub\x07\xc7K\x95h\xa8\x11\xc3@\x16\xd1\xc7\xd7\xe3\xe4\xd8\xa5a\xa8{)\xbb\x96\x96lWO\xfc\xe5\xc8\xe5\x92\x17!\xc7\x1a\xd1\xfb=q\xb5\xd8[\xc0\xea\xdbI\xf3\x13\x9c\x89\xb1~\x02\xf0Oz\x8f\x88\xdfX\xe1(6+)\xcb\x9d\xb3\xd3\xaak\xe0\xa6n>\xd5P\x0c\x03\xe0\x97a%\xb5F\xb2\xf6y>\xe3\xd7\xc0\x04\xc8\x13#E\x1c\xf6\xe9H<\x19ug%\xc5\x13%=\xa1i>\xca\xfe\x1a\xd6e\xd5\x93\x96\xac\xe0\xe6V,-=i\x8b\xbei\xcd\xf03\xc7\x80Y\xc5\xf7\n\xc0+\x8a\x89\xa6\xb8:\x82s\xd6m\xd5\xbd\x98d\xf7.h\xcdt\x94\xda\xd08~\xb3^\xf3\xc8\xb9\x91e\xda\x17,\x98\xb9\xff\xcb\x96e\xa3Wc\x1f\x06*\x81\xeag\x1c\xf3\\\x93V\x92\xd7Ew\x9d\x87\x9f\x81\x12e\xa6\x9e\xee\x1b\x8e\x9d\xe8\xc4\xff\xb9f?D\xb5\xef\x0bB\xb0\xe0\xb5-\xee \x98{24D\xd3\x84}\xe3 J\x8b\xd2\xb4\xba\xb6\x97\xcdf\xd3\xd4\xb4\x1d;\xfc\x82eE\xda\xab\x98\xac \x16\xb4fI\xceZ\xe9\xcc\x9c\xa6\xcd\x1dC\xd6\xc3 u]q`\xe5 #\xf7\xf5t4O\xf5\xf2\xed(\xf2hC\xca\xfa\xb6\xb9\xb1\xf4mYow\xfd\xc1at}\xa3\x0d\xd5\x118\xd7\x85\x95\xb7C7\xf0\xac\x95,+\x17\xb5YUY\xdf\xc0e\xb1\xbc\xa1Yf\xaf\xf9\xbd\xc2\x10\xd6o\xe8<\xfb\xaey\xccs\xe7\xde6#EC\x1cj`\x86\"\x98\xe6\x89\xaf \x13\\\xe9\x97\xa6\x857]_\\Vew\xed\x81\x06\x83\x08\x12\xb9pM>\xfb\x85\x14\x1b+\x91\xdd\xc0\x95dI\xb1l\xf2\xf24\x88\xe7!\xf6\xaem\xb6\xcd`\xa1\x03\xb2\x8df)\x8f\x804_\xddV\xb4\xbd\xa6\xbb\xff\xbe\xdd-iD\x94.\xa6\x9b\xa2\xed\xae\x1d\xb8)\x80\xae/\xfa\x9d\x0f\xdf\x8e\xd0\xe3\xd9\x08s,\xd7lq\xa2\x86\x82\x9a\x121L\x04s\x01X\x190[\xfc\xc7\x8e\xc6C\x19,k\xe8\"\n_\xd9\xee\xdc\x88A\x94\xce\xc2p\xf3\xf7o^\xfd\xfe\xfe\xf5\xe2\xec\xed\xbb\x0f\x17\x8b\xf3\x8b\xd3\x8b\x0f\xe7(h\xb1\xab\xee\xbb\xf7\xbf\xbf\xfb\xfd<\xa1\"\xfb\x9b\xc7`q\x08t*\xc3x\x8b\x17T\x8aO\xa3\x81\xaa\x12B\xd6\x0b\x9f.k\x8aR\xfcvW3\x07\x9d\x8d\xaf\xa1\xcf=\x95\x02]b\xd7\x9d\xf8U\xc7\xeeJ#\xba\x86\xa2\xbd,\xfb\xb6h\xef'KA3.\x8c\x0b(\x1b\xb2\xf1\xbc\xb1\xbf\xd99c\x7f\xb3\xf3U\xb2\x89\xa6x\x06\xdb\x96\xdc\x96\xcd\xae\xa3)\xdd\xb5)8\xe1_\xad<\xf2I\x7f\xd1\x16\xcb\x1b\xb6;g+\xff\xe8\xa2\x13a\xe5C\xae\xb5\x7f7#\x115\xfc\xb7A\x86\xe5uInY~\xcef\xd7\x0f\x826uhGc\xfc\xc4j\x1e\x9c\xd7\xf2@k\xdc\x7f\xf2\xf5\xad\x17\xd9V\xb8\"\xc7\xa1\xca\xfe\xff\xed\xb4Y\xb2gC\x14%\x84\xbb\xca\xb3\xa2\x9cS\x1a\x82o1$\xa6\xfd\x1e2S\x88(\\f>u\xca\xfa\n\xba\x1dM\xfd\xf2\xcd\xba(\xab]K\xbe\x19\x16\x9d-\xcb\xee?\xafO0K\xcc\xf9\x87_\xa3l\xb5Y\xeb\xdd\xe9\xb9\xff\xce\x8e\xfa\xf9\xf9\xff={\x17\xf1\xf9/\xa7g\xbfbV\x9eX9\xe2\xd6\x1c\x07\xf5\x94\x86AYg`Ww\x84\xee\xf40\x97qL\xc5\xeb\x1c\x0c\x7fS\xcc2\x91F*\xcdv\xcf\x06\xdbz\xe7r\xc2\xacM\x0d\x9d\xa675\xfcMjj\x14a\xd8\xc3u\xe5\x8a\xef\x00Y\xa37%=R\\\xb1WU6eG\x1f\xb3\xe16\xb7iaE\xaa\xe2\x9e\xac&^c\x98\x1b\x86\x88\xce\xdc\xf07\xa7\x1e\xa6\x03v+\xc7\xc3<\xd4A^\xa2\x84\x0c\x06s\xb8\x7fgs\x9c\xd4\xcbb\xdb\xed\xaa\x91\x05\xb1p\xac\xe9\x92\xc8\x0c\x89X\x0f\x1d\x04=>\xaa\x9f\x17\xd6\xd6\x93\xeek\x98\x1e#\xa0\xaf&4k\xa1\n\xfe\x96\x93\xe0\xa4q\xbd6\x02\xdc\xf9\x15\x1fNi\x84D\xb6\x1d\x87\x11>\x8c\x0b\xc4:\x17B!\xd3\x01&\xdf=v\xc6}b+=\xc7\xc9\xa68\xf9\xd5\xea\xb8{\xe9t<\xf7l\xd6\xd4\x1b\xa2]U\xf4}\xb1\xbcf\xd4GD\xff0G\xac@\\u\xe4\xf2\xf1E\xf7a\xce[!\x8a\xca8\x07\\#M\xcd7\x9d\xfc\xcf\x1cS\xab\x8a4\x1e\x06$\x85\x9b\xd5\xda\xf88\xb3+\x06\xe3PzZ\xa4\xc0{\xce\x91q\xa0\x8e\xed8C\xc6\xbc\x03\x9c\xe1\xe0I\x8d\x0f\x12\x07\xd6\x9b\xf3\xe3d\xc6\xaf}|?6\xca\xd1\xc6I\x1a,\x06%.\xdb\x859\x0f[\x1eR^\x89\x15!0?\xd6\xa0\x7f\xca\"q\x8e`\xb4D\n\x13n\xf6qu\xc0x@\x0f\xd7\xc1\xbd]hgw\x84\x03&r\x8f2s\x18\xacY\xd0\xd0\xc1~\x04 \xe2\xd22\xd8=8\xc2\x01\xa3\xd5\x9e\x882\x01\x0c\x1c\x90[\x929`@\x0b\x89(\x17\xcd \xe8\xf2\xae\xf3:l\x8f\n\x03Ty\x08yt] \x03\x9c3\x07\x9c\xd19\x0f\xe2\xf8\xa1d\xc6XK\x04\x99\xa0\xc4Y\x90a\xf9\xa5w\xe3\xc8\xcc_\xac\xf4\xec\xee3V+\x87\xe2YZ\xf8\x99\xe7^\xa2\x14\x90\xc3\xd1D\xc8\x85]q\x82\x84\xc2\x88\xc7\x99^\xaa\x95\x98\xdb[]\xca8m+A\xc5\x93\xd5\xbcV\xa7H\xb3]W]\x8c\x19+tF\xdfI\xe7*\x0d\xf2\x0dx\xd87\xc4A\xbf\xe1\xd15\x92\xbc\x16\xd8\x88!\xf5\x81[\x17\xe0\xf1u\xe3\\)\x90$\xd2`\xe2&\x9d\x9c\x1e9Z\xfeY&\xd4$\x87\x93t\xe6`H\x93t\x86\x93\x8f\x182X89\x0bE\xb8\xd1\xe4\xdc!\xcd\x01&WZft=\xc0r\xf1\x01gi\\T\xa4\xb7\x13%r\xf6W\x14\x8d\xf7.\xb5\x93#\xe9\x11\xcbe\xb3\xbd\x9f\\+\xfe\xca\xa4\x8e\xc9\x1d\x1a7^\xb8\xb6.a\x9e\x87\x1a\x8de\xca9\xc2\xfc\xe3j\x90\xedYgp?\xed\x0c#\xfb\xb6\x8cu~\xfeS\x9fy\xd6\xc8,\xc7G\x9f\x01\xf7\xd43\xf8\x9e{\x86\x0c\x02\xc9\xcbJP$\xf1\xb1\xed\xfd\x01\xa40\xce'\xa0a\x860\xb3\x9f\x83\xb6\x0c/\x7fOh\xcb$\xcc`~\xee\x13\xd1\x1a\xb9\xfbf\xd7b\x9e\x89f\xd2\xc1\x84b`\xff\xef\xe7>\x14M\xefg\xfdN\x1f\xf4\xb9.\xb7\xefeM\x19\x0b\xbf\xb9\xe8\x1b7m,\xf6\xe6\x8bx\x9c\x1b`[\xd0D\xbd\xa5\x9c\xa1L\xe1e\xfa`L\x1e5\xa6\xdd\x92~\xdb\x16m\xb1!=}n\x89\xf7\x0bg!\xc9\xa5\xba!\xf7H\x8b\xee\xdc\xb2)R\xfc\x7f}<\xdf\x10\x96\x84\x93_\xa1hI\xbfk\xb97\xfa\xae\xb8\"b\xe4\x9d\xd4\xe4\xae_\x0c\x1f\xf7\x0d\\\x92+c \x7f\x1c\x06\x9f\x00\xd3\x0c\x1f\x0fJ!\xb0i\xba\x1e\xc8z].KR\xf7\xd5\xfd \xfc>,\xe6\xf4a\xa654\xeb5\xcb\x92<\xb0\xa1\x11\xec\xae\x9b]\xb5\x1a\x96}\xedm.V)R+;3g\x9c\x7f\x9es\xd6\xd8M\x9f\xdd\x86\xe6A\xe6\x7fcI\x04\x8b\x9a\xdeh\xa4P\xd9kRsEjTvuq[\x94UqY\x99\xb9\xc1\xce(\xf5\x8a\xe2(\x85\x82\x06\xda5\xec(0\xec\x86DkKo\xc2T^Un\xf4\x1c\x98\xf9uG\x1b\x11\xb6\xaao\xfa\xa2\x926@\x02\x81E\xc7\x912\xde\xfa\x11\x9f\xa5\xd1\xdbR\xf8\x8d\xae\xbe5Td\xdd\x03\xd9l\xfb{(yv5\x0e\x86d\xb8!6\xa4YC\x83\xe6.\xef)~\x08\x8a\xedV\xd6 \xcdD\xb7\xa0|\xe6Y#$\x82\xc0\xde\x96\xa3\x97\x90\xda\x1d\x01-\x1dr\xd1KR\xd3\x0fyG\xaa\x04\xb9E\xd3UP\xb0\x96\x84[\xa6k\x9a\xc2\xa5a\x1c\x80\xd4\x1eI\x96\xca\x98\xc2\x1f\xce:C\xcb\x9a(\xd4\x13\x1fV\x1f\xb2\xec\xc5\xc0\x9ff\xca0\x19N\xf8\xb8.\xaf\xea\xa65\x82\xfeb\xa6\xe8\xcd\x98/\xf0\xb5\xe4\x96\xb4]&\x7f\x90\x13\xd3;\xa3\x9cFc\xd1\x12\xfb\x88\xd4(\x0d\xed0T24\xed\x8a\xb4f6\xbe\xf3\xb2^\x92\x97\xb0\xa4\x0f\xf1?\xedV7\xf0\xec\xe4\x87\xef\xc7\x8f8\x12N\xb1\xc3\xcc\xd0\x8e\xab\x1a\xe3\x83l.\xc9j\xc5\xf8\xb8\x1a\xd6r\xb1\x92q<\x1a[_F\xcb!\x91\x9b\xfa\xf8\x04\xde\xf0\x13R\xbb~\xac\xab\xff\xe4d\xf0c\x02\xd3\xc7P\xeb\x0d\x9e\x06'\x18\xedo\xb0\xd5\x05\xedpLQ\xdf\xb4\xbb\xf7\x9a\x95S\xb4r\xca\xde\xf7l\xd6#x\xa5\x83'CS_[\xaf\xb5\xf2\xdc\xdc\xea\x99\xf5\xa1\x9d\xc8X\xafB;\x0c\xfe\x17\xe9.\xb3bs\xde`\x8f\x0e\x1c\xb8z\x01\xbcA\x1d\xc3\x99\x83\xd0\x01\xac\xf7\x1c>|.\x9b\xee\xdcY\x88\xcd\xf3\xf0\xec\xdc\xd9\xdaq:~\xe0p\xfe\x00\xabE\x8b#\x03(=\xe6q\x06!\xe0\x10Bn\xa7\x10\x9c\x8e!X\x9dC\xb0;\x88\xb0w\xfd\xa6;\x8c\x16b\xdc\x99\xb2:\x8d0\xcbq\xb4\x10\xd3\\I\xf0\xb9\x93\xe0\xb5\xa3\x80\xd2\xd4\x0c\xd7\xd2=\xd5\x1c\xee%\xccu1-\xf4\xca\xda\xeaf\xc2\x0cW\xd3\xd6\ns>\x9d\xee&X]Np\xb9\x9d\x90\xa1\xe3\xf2\xb9\xa0\x80rC!\xec\x8a\x02\xb8/f\xa4\xbb\xa4\x1a\xa1\xc9A\xd5~\xb0y\xa9q\xc70\xe3\x9bA\xf4|Y\xde\xd8L\x18\x8ff-<\n\xfd|0\xc2\x8b\x12\xcb#\xca\x8dJ>\x89\x19\x17an\x07\xc7\xf5\x18\xb6E\xc7o\xdaH\xddr\xc2~\xd7\x88\xd0E:\xb8B\x9fq\xa3G\xfb\x94ZA\xcb\x11\xb1\x96F\xdcpC\x01\x9c[\xe6\xb8\xc3\x04\xd7\x18\x1cM\x81kE\x98\xec\x8e\xc1\xbf\xac(\xc9\xb0\xe8\x83\x90\xde\xcb#\xfd7\xf4\x81u\x9eD\xa4\x83]\xcd\x1c\xc4\x154\x83\x1e>\x95\x1d\xebG\xdc&\n\x7fT\xab\xd6\xe4\xe4P\xc7\xb6\xbfuW\xa7\xab\xd5+\x1e\x16?\xdf\x92\xe5EC\xd3\xba\x0f\xff\x0c\xec\xaa\xecR\xa0(z\x85\x9a\x08}\xeb\xa6\x14#\x1e\xad\xf4\xba\xe8\x8bSz[3 \x96>\x8a\xbc4\x0cA\xe8\x1bc+jP\xe9\xa5\xecb)\xe5r:].O9\xba\xb7o\xc6HQ\x98w\xda\xb5\xe9l+\xd5}\x1c\xb3\xa7\xcb&.\x07\x93(\x0cC\x98\xdb\x7f\x94\xf5\xea\xf7\xf3_\x9be\xd17!nM\xfbX\xb1z\xfan\x1ceW)\xdfH\xfb\xc1\xf5$\xde\x8d\x10h\xebA%\xa4^m\x9b\xb2\xa6\x0b\xd5@r\x05\x97\xb2'\xcc9\\\xec\xda2\xae-^q\xa2\xbfkK\xe9;R/\xdb{:\x8d\"\xd6\x06N\x9aJ\xdeI$\xa8\xb5\xd7\xb3\xc9\xba\xbd\x8a\xd7\xd3\xf3\x15\xbc\xe3\xb8\xc6\xe9\x03Jd\xca\x01\xf4\x0d\x7fSLzn\xad`\xad?\x91\xc8I\xaf\xafq\x1e\xcc3\x8fb\xd4\x83lDwm\xc9Q1_ur\x15\x99\x1bK`K\x1e\xee\xd6\xf1\xe77\x9f\x83\x8dQ\xaaqjX\xe3\xf2\x9aT\xa4'\xb2\x89\xfa\xa5m6\xb3\x0d(\x92,\xd6\x8a\x06\xc8\xd1c7\xfey\x9a\xd0#\xf42\x9f\xc0\x06\xc9ta'`h\\\xb7\x1em\x99\xa5\xad\xa3-{\x10[\xe6\x18\x81q\x93`\xac\x1e9\xf0\x19\xd6q\xde\\Vi\x84\xad\xb0\\+&\x0e\xa05\x98\xd1\x1ay\x08\xc6u\x83\x85Pd\x87\xccv`\xbddL\x8f\xb0m6\xecu\xa6\xf7\x9d6\xf3\x17\x8dV\xc4\x15\xc5\xd0\xc5D\xa7\x981\xd2$^=\xc4\xf3\x1d\xd1=1|G_$Dtb`\xf1\x0d\xdb[\xec:\xec\xa6\x84^\x92) \xd4\xde\xde\xb4{\xfc\"O\x84\x99WkD\xdbw^_\"h\xd8\xf3YF|d\x0f9\xd0pv`\xa4\xea\xb4\xd2\xea\x95\xae\x13\xab\xc2\xf6`\x80u\xe2^C;}m\xe7\xcf\x95\xe9'\x1b\x8f\x11\xb9\x94B\xbc:\xf3ydc6*C\x87\x97\xddT{\xad]\x1f\x0c\xd9e;\x0fcB$\xf3~\x96\xdf\xc8*\x15!&\x91\x9b\x1d\x96b\xe5\xce1\xb7\xc1\x0b\x93\xb4_#\x06\x9f^!\n+)\xdf\x1d\xb5\xcev\xe5b\xf0\x89Kq\xae\x0c\x14\x99\xb9DM}\xf1\xb1\x93Y\xd7\xe4\x87=0\x1cc\x07\xfc\x8c\xdbs4x\xf9\xb5\xb0\x84\x9ea~f\x12\x94ga&\xec\xce\xd8\x14\x89qXb\xcf\xee\xa5J\x91G\x96R\xcdy\xbbQn4b\xf7\xa2\x96j\xd1\x9e\x8aA\xee\xa1\xf6\xa1*\xf3\xc8\x85\x03\xb7\xba\x19F^m+\xe4\xddD\xee@\xb5^\xd8\x9f\xfb\x13\xb1\xd9\xd4\xaax\xd8M\xde\xbb\xe0X\x0ftE\xc6\x8d%Z\xe2}\xf9T!Q\xa3<-/)\x97p\xa9\x1e\x98\x97s\xec\xaa\x81\xe68p\xf4\x06A\xee\xecGp\xb8\xacf`\x0c\xa3\xb8|f ~\x9c\xff\xc0\x0dBk'\xde\xf10\x14\x05)\x07p\x16\x1a\x1d&?\x19\xea \x0e\x1eXZ\x8c\xadD\x90 \xca\x1a\xb2\xa2\xf0\xd0r\xcf\xb0\xab\x10whg6?\xd7[EH\x98h\x94LB!Y\x12\xba2V\x96\xb0'\x1c$\x91|\xb8\x97\x01%\xe2\xa2\x13w\xb0\x87A*\xb8\xee\xc1Fx\xcc\xean?\xd6W6\xb2\xe3\xe4=\xd4\xb3o\xf8gz%\xe9\x9b|\xef\x06?\x13W\x18\xfbl\xdd\x8e\x067\xf4\xb9\x18\x9c\xbb\x89wm\xe0q\x9eY\x86\x8d{\xb4\x82\x1et\xb3\x1e /\x9a\xea\xa4l\xd5\xa3\xc1E.\x8bc\xf7\\CfGqWcm\x8fN-\xb4M\xcf`\x89\xac\xfej\x96y\x15\xf2Em\x12:-\x94\xcf\xdf\xcc\xc9m\x84\xad\xb2\xb8\x16*)\xe9\x7f\x113\x13\xc7\xb4\xe3\x88\xdb\xd1\xb4j\xd5\xa6?Ori\xd4\xb0R\xce3yQ^\x1e\x8a\x9f\x08=\xa3\xd5\x19\xb6\x8b1]\x81\xb6\x97\xf3\xfd\xb5\x19pFV\x9feW\x8b7\x9fc\xdaN\xbc\xedT\xab\xcc2\x9c<;cfc\x19\x9b\xd9\x147\x8d\xa5\x0c\xa7N3\xa9\xe6'=\xb1km\x1fvQ\xa7\x1e0\x8a\xe3\xe7\x0e\x16\xa3}\x94h6M?F\xfaK4\xbb\xfc\x9f\xd9\x196m\x8d\xbd\xd1Q\x06\xf9o\xdeS\x0d\xbfL\xc9\xb6Z\xaa\x8f3\xd4^6\"\xf4\x89S[\xbc}\xb6\xeb\xdb\xba\xf3\x88=\xb6T*\xba\x8f+\x99\xef\x83\x884\xdbu\x99tD)X\x8b<\xe9\xc0\x1fZ\x89\x06\xe2w\xa1\x10\xda\x89B~.qF\x8d\x7f\xecd\xd6e\xd4`\x0f\x0cG\x997/\xe3s\x0f\xef&*8\x83\xe0e&Ay\x0f\xbb{U\xdd \xec\xfe\x95/\xdb\x11;X^\xe5l\xf5\xaa\xd9l\x9b\x9a\xd4\xe2\xddx\x8c\xcfeQ\xa5U\x85\xb6\x04\x14\x0e\x0dr\xed \xd1\xe8WF\x82\xef\xbfb2\xd1\xffU\xe1R\x1d}\x91\\Z\x06\x9dp\x05\xed\xfc^i\xfc\xd2?#\xf2\xda\x8f<[\xd7-<\xd7\xda*U\x18\xba\xe5\x0f0\xf0tc4g\x0e\xadb\xaa\x1a\x93\xdb\xfe\xaf\x9e\x11-\x06\xd8\xebi\x80M\x9e\xf6\xba$\xd5j\xca\x03\xb7\x9c>\xa1\x9e\xf4\xa6\xb8!\xb0\xdbN\x17\x15\xf8\xf8.\xf5\x11]\x17\x1b2\x8c\xe6wE[l\xf0\x03xS\xdc-:r\xb5!u\xbf\xa8H}\xd5_\xeb\xca.\xeb\x9e\\\x91)\xe7\x8e\xb0\xa0j\x92\x15\xde\x07\x9b\xe2\xae\xdc\xec6\xc0H\x0d\x16\x80\xc6_y\x0b4\xf3UU5\x9fD\xe3e\x9d\xb5\xf1\xb2\x8ei\xbc\xb8\xa3\xf1\xe2EEnIe\xe4z\x8cjY\x19zB\x07S2\x19\x99\x8dn\xe4\xe3\x04\xe0\xcd]\xb1\xd9\x0e\x04\xfe\xbdn\x9a\x93\xcb\xa2=\xb9,>\xff[\xa2\xf5I\xe4\xa9\x13)\x95h\xcd\xc5\xaen\xc90\x94\x97=\x0fz\x1b\xec\xebY\xa48\xa3+\xd2\x93vCo0\x95k\x90\xc90&o\xc8=\xcb\x12E\xdba\xfb\xb7\xba\xb1\xdc`a\xc3l\xccr\xc8\xfcO\x9a\xc3k\xcb~\x11\x03\x9a\x92\xdd4\xab]E\x1c#\x96&\xaaa\xf4\xa2\xf7\xbc[i\xb4\x1be\x9dgQ\xca||O\xba\xa6\xba\x8d\x8f\x1a\x16z6X\xdf\x8a]\x88\xf5x\xa9\xbc\x82\xa1\xdc1\xa5\xaai\x197R\xce\xa1Iy!\xcb\xa7\xa8\xee_<\x1b,\xbb\xfe\xdd\x95Wu\xd1\xefZ\xaa\xbe\x96|\xdc\x95-\xcb\x81V\xacV\xd0\xed.\x9f\xd2n\xb68\xab6\x15a\xba\x80WA\xe9\x9f\xe6\xf2\xfb\xb5inv\xf19\x8cU\xfc\x15\xab\x90\x92\xbcX\xf4S\xcdj\x8b\xf9\xd5\xc1e\xb3\xabWP\\\x0d.L\x0f\x85\x9a\xa9\x98W\x8f\xc9\xb3\xb7\x9a\xae\xd5\xda\x12\xe6:\xb3\xe4FX\xebc\x86\xbdc\x86=p\xfa\xe8\xeeI\x171\xaf9-\xef\xec\xe6\xd9\xa8\xde\x16\x9b\x90qU\x18\xb5TS\x1c\x1b\x91\xae\xea-7\x97\x13\xabn>^\xb5\xa4\xe8\xc9\xfb\xa6\xe9\x13\xb8\xb1W\x1ey\x1a\xf8Q?\xc1r\xc5rB$pdV444}\x82\xe5\x86]rO\xe0\xc6\xachp3}\x82\xe2\x86\xd1Z6\xedj\xd6:`7\xf1t_O\x8d\xfaP\x87\xff\x1a\xb5\x98\xfb\x16\xeeU\xca\xc2\xcd\xe9~JX\xb2\xff\x02\x16\x8b4\xe9\x8f\x1d\x08t}\xbb[RR;n\x98/\xcbz\xc53D\\\x97\xdb\xc1H\x15L\x8c\xeb\x92\xb4E\xbb\xbc\xa6\xb6\\l\xc5\x97MU\x91\xa58\xfd+\xc4\xe5{\xed\xa0\xa9\xbbZ\x13\xd2\x0d\xfd\xf7\xaa\xa8\x96\xbb\xaa\xe8\xc9\xc5\xdd/\x84t\xb1\x0f!\xf5w\x0bz\xaa\x1b\xe8\x0d\xeb\xba\xa5\x0cNAH\x18\xb6\xbe-\xea\xae`\x82\xf4\x0dt\xe5\x86r)\xd6\x08\x9e\xb5zqYtd\xb1\"u\xb3 p\xe0^ MR\xc0\xf3,\xd3\x86 ;\xa4g?\xd0\xbf\x0eV\xf6\xaa\xe8`P\xa1D\xa7\\\x0f\x8e1\xad`\xc9\xad]_\x17\xdd\xb5\xe0\xfe\xaa\xe8\x16\xc5\xea\x8f]\xd7\x0f\x1b\x02\x9ds\xb6\x1a\x19\xba[WM\xd1\xeb\xe3PY\xd9T\xb2B\x93\xd2_\xd6\xc5\xb2oZ\xbe\xf4ovU_n\xab\x92L.\x93\x1ar ]_n\x8a\x9eLi\x99/\xd9\xfa\xdf\xdf\x89\xfe\x10\xd7%\x14\xed\xda\x87\xd4\xb4b\xb9^\xd7\xf0\x04\xa4=\xe35\xd2 -V\xab\x92\xb9r\x8b\x81d\x92?jDZ\\q\x16m`\xca4,~L\xb1\x19\xbc \xe4\xe7>\x87\xefUSJ\xce+\xf4\xcd\x0d\xa9E\xd6\x16\xca\x92\xf0`\x8b\xc1]\xaey\xc3Zn\xf2\xb7\xbf_\xbcy \x17\xc3\x00\xa2?\xb33Aj\xa4j8\xab{\x9eI\xa6\x1c\xb6\xaf|[{M`\xb9\xeb\xfaf\xc3{Q\xa17\xdaH\xc9B^\xde\xc3Us\xd5l\xdb\xa6oN\xf4\xa1\xad\xf5\x14K\x13>\xb1\xd3\xaca\xd9\x94\xb5H\xd1-\xb2\xc2R\xb96\xdd\x95<;\xa9\x7fv\xec\xee\x03\xednw\x0cu\xea\xb7\xb1\xf3\x99\xbf>\x0d\x01\xfacM\xc8\x8a\xdbem\xe9P\x9e\x12\x16\xa3\x02\xfe\x8f0\xdf_\xcb:\xa8\x9b\x9e;\x0c\xfcW\xa0\xaf\xb0rs#=\x80\xb3\xae\x1a\xbe\x02l\xdbr)\x0e\xeb\xd8)\x9e\x10K\xd8\xce\xd5\xe2\xaa\xc0.\x8e;\xeb)\xaeBi\xb4\xe9\xa3\x02\x86?\xba\xe5\xa7\xc4\xfc\xc6\x19\xbd\x9f@\x99\xe7\xdf\xba\xab_\x08\xde\x1ao\xba\xab\xc5\xf0\xd9b\xd7V^-\xa9\xc6\xe0\xa5\xae$e\xd8\xa8\xdf\xd27J\xb6\xc5=\x945}\x91z\x98-O\xe0\xb2\xe8\xcaeQU\xf7P\xc0k\xba\xb4\x0f\x93\xe3\x94\xaaU~\xf5\x97\xfdE\xbcs\xf2\x99\xb4\xcd\xd7\x1a\x9b\xa8m\xbe\xc528&\xba\xcd*D:4\x19\xecA^k\x80\xb5\x05-Y\x96\xdb\xd2\xe2\x11)\xa2\x8f_\x0d\x1e[\xd9-h\x12\xb2\x84H\x89%m\xe3/d\x9c\x08\xcb\xa6\xa5\xcf\xcc|b/S\xf5\x9d\x94J\x8dnK\xc6\x1ciBoe\x0f\xcb\xa6\xee\xca\xae\xa7\xc7\xf8\xebf\xd7\x0e6\xa1\xef\xc4\x07\xcfOh\xcd\xc1\x0c\xd1\xd9\xb5k\xabo\xa0\x9f\"\\|\xe8\xae\x8ba\xe8\xb2\x1d\x00\x9dG\x9bN\x9e\xb2\x93XG\x9b\x90\xdd&\xd0}\xd3bK\xda\xc5\xae[-6\xa5\x7f\x99\x08-\xa6\xfc\xb8o\xa0 [\xd2\xc2\xae[\xc1\xa6\xac\xe8B\xb7l\xea\xdb\xa1\x97\xea+\xfag\xb1g\xe3$\xd8\xaf4z\xbf&\xb8-'os\xaaI\xe7\xdc\xb8\xc3\x94w\x95T\x8d\x9c\x81\xe9\\\"-\xb6\xc9\xe7\x90=\xbc)M0\xba\xa8\x9fV\x15\xb3{\xf1;\xa9a\xed\xde\xbfOm\xf7\x10dR6\xd7\xda\xe1-\xf0j\x8eC\xe1\x19\x9e\x83A\x89{\x12^\xff\x81\x15\x87>\xc0\x0b\xdfs\xec5\xc0\xa7\x14p\xee9\x02\xd5\xfc \xc7\x19\xb6\xc5\xa04\xc7\xc4\x18\xc4\xb8\xc91\xfe\x8e\xb5<\xacX|\x12V\x9c\n\x0b\xf9'ru[\xbc\xd9\x1dq\xb6\x0f\xdc\xb9~\x0b+A\xef\x85\x95y>\x0c+\x89\x9e\x0c+y\xfc\x19Vf{5\n5\xee\xe1\xa8\xbe\x0d\x1cC\x8e\xc7\x90#\xfb\xfb\xa1\x85\x1c9\xa3\xca\xbbJ\xe3S\xa7EU\x0d\x93\xfc\xab\x8e\x19rv\x06c>\x06\xbc\xf1{\x17_\"~\xca\xb9\x91\x00O\xe7\xce\xdcPh\xd4\xf8A\x95e(Fa\xfc\x1d.\x82g\xa5w\xb9\x07\xce*~\xd7 \x97c\x90\xd1-\xb0;\x051.\x81gC\x02\xf3LF\xfa\xe6\x04\x82\x1b\x14\xf0\xb1\x96w\xa3\xb2' XK>\x15\xedj0-\xa7\xf4h\xf35\xa9\xc8U\xd1\xe3\xad\n\xf79\x16\xfcd8m\x1f\xa9\x06\xd4\xb9\x173\xd9\xf2nG\xdf\x1dY\xef*Xq\xfe\xc65\x86\xa3\x02s\xb6o\xe0\x0c\xbd\xeds\xf9\xf9\x0f\xf4\x16\x976\xdf\xdd\xd3Y\x88\xca'\xe0\xf8\xca\xee\xae#-lv]\x0f\xd7\xc5\xed0\xe7\xda\x96\xae\xcac\xf3\xc2\xf1\x94h\xdd\x16U\xb9*\xfa\xa6M\xb2\xcf\xf8\x81\x8d<6\x11\xfd\x92\xa6\x17\xde\x05\x7fF\xbdH\xf3\xe5\x96,\xba\xbe\xb8!\x83\xdd[\x92\xba/\xab\x10\x82\xc3:Q\xa6\xda\xca\xf3\xe1\x97\xa4j>Q\xb5\x8d*\xf8j\xf0\xb2?\x91\x16\xda\xa2\xbe)\xeb+\xdb$\x9a\xcb\x14\xef\xba\xb9L\xd9\x07\x87j\xa4\xe4\x077\x989\xe5\x7f\xe7\x08\x87a\x01\x1c\x9c\xb6q\xf5!UyU^\x96U\xd9\x8b\xa3\x94e[\xf6\xa4-\xf5\x07 t\xb3x\xd1\x16u\xb7\x16\xef\xa8\x1c\x9eY\xec9\x7f\x8fe\x16\xcd\xf6s\x98\xc5\xa9\xf2d \xc8\xf8n\xc7d\x07\x8ae\xdbt\x1d\xf5\xae\xc7Q\xd5\xc9\xf1&%\x86\xb7&-L\x10\x98K\xc2^\nO\xbc\xb4\x9e\xd9>\xf8F\xbd\x18\x83\xfa\xa8\xd7\x85\xca7\xea\xff\xd9\x1c\xae#p\xdb<\x9e\x13\xa0\xb6}\x90#}`\xf1`G\xb9\xb4(/F\xbcT\xe8\xbe\xa2?\x04\xa1h\xf5]\xd3\x95\xc3B6\x81\xb1Z\xb6\x08\x0d{\x9b-\x03g\xf5\x0d;\xecg\x9b\xc6b\x18\xf8\x13\x14k\xd0\x9e,\x14\xd3#\xddn.\x9b\x9a\x1d\xae)GxEK\x81\xfeO\xd6\xf4\x1e\x07[\xe0\x9a\xba\xba\x9f>\x1fO\x12\x99\xcf\xc2:\x88b\x13G]H\xf4\x86_\xbf>\x81S\xf1\xf2\xcf\x9a\x1er\x8b\x03\x19:\x14(\xf7\xc5\x86(lt\xd0\xd4>\xe8\xf34\xafu+r\xdb\xb0G\x92\xf2\xd9\x90WUQn\xc8\xea=\xfd\xc3;\xd2\x96\xcd\xea5\xe9\x0b\xb1\xb5C\x98\x94\xe5@a\xf0C\xcaF}\xa3!a\x80PZ\xc0hM\xc9K\x19\x16\x86\x0d\x82Y\xe4\xd9.S\x8c\xa6\xe5r\xb7\xe1\xf8\x16\xba\xcd\x94\xda\xb6\x89\xc6t\xf6\xd2N\x93\xfd\xd8\xb9\x08=\xee<\xfe\x13\x06G\xed\x13\xc79\x98AK@\xd1\x92\xab\xa2\xa5\xcf\xa8\x17\xf5\x04\x14\xfe\x8a\x0f\x0dNm\x90\x98\xf5+C\xd8)\x1d\xeb\x9cP\xbfuW\x94\x8d\xd3\xaab|\xc4\x9f\x01\xb2\xf1\xceH.h\xa3\xfa\xa8\xcf\x1bg\x81\xb5-\xe8h \xbd\x9e\x90\xcf\x93\x89\x8dto\x07\xe9\xeb\xa4z:\x01?'\xe4\xe5x}\x9c\xa0{\xe2\xf7o\x02\xd5\xc3Kx\xbe\xb9\xccJ\xc6\x19\xcd\x8a\xcf\xab\x89\x99\xdd\x80PG\x92?#y/\x06\xc1xo&\xc2\x97qK3\xc7\x8f\x99|\x97\xbf\x84\xe5x\x08\xd7\x83z\x1e\x9c\x96\xb6\xd0\x06\x9c\x0e\x96,C\xd6E\xb4\xef\x91z\x1c\xeew\x0f\xc60\xc9\x15\xa9I+\x00\x15\xcb\x81\xdf\xb2\xa9\xddjt\x0b\xe4\xd1&\xa5:t-\xe7\x83\xd3\xc3\xe9\xf0M\xbd\x8aQ\xa0\x85i\x17\x057\xc7\xa4^\xa5\xf1\xfb_\xbb\xa2b\xe9'Y\x00\x06\xdd\xcb+\x05\x8ee\xadd\xaf\x08\xbe\x88,\xe4p-\xe3`Z\xe0\x8b\xd2B\x16~\xa2`[\x80\x8b\xdc\x1a\xad\x18\xb69'\x84\x0b\xecp%8P_\x1c\x01\xf1\x82\xb0\xfe2B\xbd\xe0\x0b\xd3\x1f\x16\n\xe6\xa1\x11To2FL#\xa4!\xc6 \x065\x063\xf8O\x86\x93\x85\xf8w\xb7;\x0fd&\x11\x92\x82\xe6J\xb8|(\xbd\x82(\x83/\xc6\xb2\x1bH/x\\\xcbn\xe7'\xa7e\x8f\xc7\xe6h\x84$\xa4\x0eD\"\xd1\xe0 MWh\xea\xa4\"\xd5\x90S\xe7\xb6\xf9\xf2\x1c\"\x052\x06\x8f;eL^\x0e~\xba \xe0lp\x90S%\x04u\xf3T\xc4\\n1za.\xf4M\xef\x0bI\xef\x1e\xf8\x1b\xcc\x83\xc0\xb9\x06@*\x0c\x0eT(\x1c LV\x16H\x1ch\xb08\xadY}\x17(\x9c\x98\xa6\xa6\xa2m\x8a\xfa~\x1c\xe3\xf7[6E\xad\xdbI\xd7)\n\x1bV\x88m\xa5'\xec\x90\xef,a\xf4t\x82\x98#\x94\xf1>b\xd70\x07\x8a\xc8P\x01SG^\xc4O ,\xe0\xb1\xa8\xdesxD(\xc0\x17\x06\x98\xd9l\xda\xd1?\xe2\xd8?\xe5\xc8\xdf\xb9\xbc\x1d\xc1JQ\xd3\xcb \x96\x03\xac\xe4\x13=\xeb\xf1}\xdc\xd1=\xf2\xd8\xde\xce}\xd6\xe3z\xfcQ\xbd\x1bN\xcet\xc7\xd8z]\x0eC\xf0r\xd7\xc7\x1c\xa8:\x8dT\xf2\xba7\x0cA\xcd8 \xed\xefc\x99\xbd\xa0os\x8a\x1b\xf9\xda\xa2\xcbO\xcfh\xbad\xfa\xc3%\xa9\x9a\xfa\xaa\x83i\xa8\xca\xabq\xb7\xd86M\xb5X7\xedB\xd6\xcbKw\xcb\xddnC\xd3\x88T\x15m\xfe\xaa-\x06'\\\xb1_\xb4y\xfbX|\xcc\xd5^\x96\xd8#\xe0\xba\xac\x8b\x8a\xbe\xca\xb1,\xbe\x10\xc9\x12\xee0\x04\xc6\x97\x9eKCt3\x9f\xc1^](\x13\x8c\xd4\xabp\xeeo\xa5\xf9SXW\xc5\xd5\xe4\x89\x0f\xb6\xa4dc]\x99d#\x0f|\xa0_\x17\x1d\xd0\xd6|\xe6\xcckB\xbea\xf4\xcaN\x93^q\x18\xcaxLI\x16\xeb\xb6\xd9,\x0c\xa7\x19|l+\xdd\xa5\x8c\xe2a\xac\x96+\xd2\xc1zW\xaf\xa6\x97|d\xf7\x0e\xb6MS\xb9\xc2<\x98\x98\x06#\xc6!(\xcd\x9a65\xe8\x86=\x92\xcf\x91\x96\xca\xd48\xfc\xc0FK6EY\x97\xf5\x15;\x96\xbc,\xaaa\xbe{\x14a\x0c\x99\x0b:+8\x15\xae\xfe\xc9n\xf6\x8d\xd4\xe5P\xac{\xd2B\xad\xba\xd3\x1a=\x8a\xf4d\x0b\xd2\xe1\xab\x8fo\x18\x12 \xd4\xb6\x015l9\x98\x02\xc5F\xe4\xf2\x9e>!S.\xcbm1\xf82bc\xb2-:}\x7f\xa1\xe8\xf4\xf05\xb7)\xee\xc4\xd4\xbb\xbc\xb7\x9b\x01E\x81\x02\xe5.\xe62Q\xd1s\xf4\x0f\x9c\xca\x17 <\x07\xe1\xb7MU5\xb7\xa4\x0d\x8f\x1f\xed\xea\xe1\xf8t/\xf3\x9c\xc7Mr\x03\x82\xe4\xe1+A9=\xee\xc8\xb2\xa9W\xd8u\x00\xbb\xa2\xbf\x9d\xaeD0\xfal\xb1P\xf1sP\x15\x9d\xeav\x8as\x8e\xae/\xda~\xd1\x97\x1b\xec\xba.\xf8Z\x15=y:\xd4\x8b1\x08\xe5\x86\x08\xf6\x94E\x04\xba\xebfW\xad\x80rC!u\xdd\xa7\x92\xfal\x0d\x9c_\x9c\xbe\xbf0v\x9at?)\x0bD\xee\xb6d\xd9\x93\xe9\x04\x87\xd4\xab\xc7\x97\xab\xecF\xc6\x06YH\xbd\xfafz\x7fjU\xf4\x05\xbd\x86\xa0\x91+{\xe1S\xef\xb6\xb6>\x13\x92-6\xc5]~\xe9\xdc\xc2\xfc\xf6\xe1\xfcb\x10\xe1\xc45\xc2\x1fP\xe5\x1f\x06\x1d\x0e\xael[\xd3g\xf6\x94\xd7t\x86\x01\xd4\xb7\xc5\xf2\x86\xf9\xfc\xfc~\x86\x95\xba1\xae\xc1\xa9\xca\xd5\xc1\xc7\xf4F\x8em\xb5\xd4\xce\xd3\x8d\x86\x84v\xd8\xa9\x9dU-8\xc9l'\xa4O\x07\x93~\xf1\xc6s\x8c(\xbex\xf7\xe6\xed\xeb\xb3\xb7\xff\xe1\xf8\xd5\xbe0\x88_\xc5\xe4p\xfcl;\xef\x1cO;\xfd\xfc\xf1\x8d\xe59\xd5\x8dr\xbci=\xd6\x97\xea\x92\xbbm\xd9\xb2\x0b\x89\xcdz\xdd\x910\x18\x96\x15\xec\xf80\x8c\xc8\x7f\xb4\xc5\x92\x88\xd1\xcdv&\xbaQ\x17z\xa2\x07Z\\\x9aq|i\xe4\x84\x87\xb1\xab\xfb\xb22(\x91\x9a>\xae6\x10\x10\xda\xd5\xeb\xeb\x8b\xf6\xc7\xf1\n\x99\xef\xe2\xe8~\xd3\x7f\x999I\xa6\xe2! \x01\xb2\x10\xba\xa0;\x15\x8f\xbf)\x8a\xf7\xac[\x14\xab7\x8d\xcf\x1f2\x15\xefe\xde\xa9\xec\x87\xef\xe8\xbc'SA^\xfc\x9d\x8a\x7f\xf6L%6+\x8a\x93\x90\x9e\xed\xc3\x95\xdfc*\x81!\x08\x88a\x08\xee\xad\xceT\x10\x9d\x19\xca\x91\x06\x182\xc8,+SA\xf7Qd\xe6\x95c\x1f\xb9\xfb(&\x93\xcbT\x82t#:3!\xcf\x8b\x93\x98\xf5\x8d0\xb5D\xe5~\x99JN\x89\x132\xc3\xa4K\x8c\xe1*)o\x8c\x95\x92\xed\x8e\xb9\x91\x06c*f.\x19\xe9\xb7?\xe9\x8al\xcd\xfb2\x95\x83]\x91C|\xef{E\x8eK\xcf\xe16\x9a\xea\x0bT\x90\x90\xd7f*\x7f\xae\xe5\x00\xd3#Iyrr\x98\n5w\xceT\xfe\xacf\xc2\xc8u3\x95\x835\x11>\x9e\xbfp\xf3\x80\xcc\xe33\x95?\x97i\xc0d\x03\x9aJ\x90\x18r\xe4\xb9\x02\xfbS\x89\xce\x1a\xe4V\xd1'\xe3!=d\xfe \x89FR&!'9\xf5\x91=dN!'5[\xae\xa1\xa9hY\x87\xa6\x82\x99\x87\xa9\x99\x88\xac\xc40\xcb\x81\xc2TJv\"\x07)F\x80\x07\xd6\x98\xe5\xe8\x1b\x86\xa6\x9d\x8e\xfb\xa6\xfa||*\x87c\x7f\xb1\x12\xbe01\xc0\xcc4\xb0\xa6>\x15\x16d\x1f\xa7\xee\xc7(\x0dC\xab/J\xfd\x92\x9f\xc1\x13\x12\xfe\xd4 \x14\x18\xfd\xe9b\x98\xc7\x8c\x17}F\xcb\xc7\xbdO\xe1\xbf>\xbcy\xff\xdf\x8b\x8b\xff~g;KU~>\xfd\xf5W\xdb\x9f\xd5\xf3_\xb5\xc6\xab\x8b\xb3\x7f\xbe\xb1\xfd\xf2\xfb\x87\x8b\xf3\x8bSgE\xe5\\x<\xf1\xf5\xb0\xaa\xf4\xd8\x088tI\xf7\x12vu\xb7%\xcbrM\x8d\xcc\xfdv\x9c=\xba\xc0/\xe9\xaa\xa2v\x7f\xc7\x8eH;k\x1d\xae\x8d\x97\xb0\xe5\xc1*m\xe8\xd0\xaa\x7f\xb77G\xb5\xf5\x12\xd8\xf6\xd6Z\xd1ZO\xd2\xe5\xd4,\xcde\xe3&dg^\xa8\xfd%\xac\xcb\xba\xec\xae\xc7\xdbl\x16.\xe4!>\x0c6\xe3\x90]\xc7\xcd7\x0c\xb2\x195\xa0g\x81\xf9\xa4\xa5\xd9vD=\xf7.\xc2\x9e`\xd0\xf3\xc0\x7fV\xf8\x9f\x97\xb3\xcc\x10@U\x9ah6,\xabT<\x140\x1a\x0c\x88\x84\x03z\x05P:q6$0\x08\n\xb4,Rsa\x81^\xc7\xf7 n\x8d`@\x82a\xb7'\x19(hP\x12!]'T\xf0\xf0U\xea\x03\x0e\xe2T\x99\x0c\x1e4\xd5Yt\xbd\x0f>x\xf8\xdaD\x80 \x1d\x9b\xf2h8\xe1\x17\xa0\x0c\x0c\xb8\xd0q\xae\x92\x08/<|\xa5\x84\xc1\x86\x99\xfc\x88D\xc8a\x18t\x88\xe2\xcf\x0e\xa6B\x18\x94|\xe0C\x0b\x92\x01\x0d@|$\x19\x93\x80\x88n(\"\x06\x8c\x98O\xd28H\"\n\x94\x98\x8f9K7\xa4\x82\x13\x0dB\x02\xac\xe8\x82'\"\x01\x8a{\x1563P\xd1\x0eU\xf4\x82\x15Q\xe2\xc5\x98\xb5\x04\xc8\"\x06\xb4\x98\x89OK\x1f$\xa2\x19\xcd\xe9nA7\xe2\xf1\x8d\x99\xe4\xcb\x86r\xb4\xe2\x1c\xb5\xc6b\x91\x8e^\x19]\xf7\xc1Cx\xc7\x10\xe21\x84y\x0c\xa2\x1e\xfd\xb8G\xc0\"\x1f\xe7`\x1f\x83\xe8\xc7L\xa3\xc72;2\xa3 \xe7\xe3 \xad\xfeC\x08\x0bi?jb%\xff\x83\xf0>Td\x800\x04\x89\x03>\xc4\x1ap\x93EA\x05\x8e\x1c\x1b\x82\x14\xa4!:\xdc\xbaO\xfeg %\x13B\xaf\xe1y6\x95lxIH@\xe3!\x86'\xa0\x86(\xf8voSAu0&\xda\x8a\"\x15\x8d\x9f\x8c\xea\xb7\\\x18\xcac\xbf\xe9%\x11S\x89\xa2\x1d\xd5\xc59\x91\x95\x08\xa4!\xa4\xa3+\xf3\xcb\x9e\x13c\x89\x92\x1d\xc7[>\xa4e4\x80\xca\x8f\xb6DL\xc9\xf0t<\xf0\x95>\x80`<\xf8\x95>\xcc\xffC\xac\xf4\x99\x80V\x99\x91\x98\x88\xf1\x0b\xa81\x0c\x87\xb7\xa4\xe0\xfa(\x1f23\xc1\xb4\xb8\xd0\x99\x88n w\xc9\x81\x9b\x15\x0f\xea\xf1\xe0M\x8a\x9f\xf7?\x859\x89Fn\"\xc6,\xa0\xc6-\x1c\x9e)\x89\xc3q\xa2\x08\xa2Ge\x18\xcd\x99\x13\xcf\x99\x07\xd1\x99\x1d\xd3\x99\x1b\xd5\x19\xc2uz\x90\x9d\xd8\xd9\x9a\x15\xdd\x89\xc3wj\xac\xcdCxj\xc4\"1\x9e1(O5g\xa38%dv\xa4c\xb9\xe9\x04\xe6\x88\xc2\xd8\x16\x03\xb7\xa2\xa9c\x1a\xc7\xfe\x98\xc6\xf1\x00\xd38Z3^\xdb1\x96*\x18\xb9\xb2\xcd\x86i\x1apr\xe3d\xf0\xbf\x19\xab%`e\xfa7Fs\x08\xcd\xf9\xa0/\xd9\xb1X\x96\xff!;=\xa9\xb3\xd2N\xb6t\xce\x11\xb3>\xfb#o,\x8a\xa8'i6\xf4\xe9M\xcfl\xe5@\x0f\xc1\xa1\x921\xa3\xd20#\x120\x07S/\x07\x92.\xe3\xd3-\xa7$Zf:\xcf6\xd6\x95Xs \xa1\xb2\xdd\xa5\xb0\xceat\x12e\x18\x13'\xcb\xf2I\xe9\x93\xc3v\x83\x861O$%\xca\x06DR\x8bz\xad!\xd09\xc1\xc1\x14\x18H\xdeA\xe4\x19@\xb8\xc1c_w\xddB\xbd\x94V\x00\xed\x9e\x80K\xcc\xa1\n\xed\x0b\xba\x1c\xb1)\xec\xa8\xe5\xa83\xfe\xcbW\x8d\xf1\xa6U\x9a\xfcK\xbb\xa6\xd4*4\"\xcd\xab\xc4\xce\xa8\xf0K\xe6\xe8\xd5(\xcb\x94L\x07\xf7k\xb0~+\x07\x19\xa1\xfc2\xd7\xa8F\x15g(\x0e\xb2\x1f\x01\xd6\x0f\xc2\xf4\xad,*]0\x0b\x9a\xef\x01\xe5\x1b\xa6w\x0e\x1c\xff1W\xfd\x10\xc8\xde\xbd\xf3L\x06\xd6+@z\x89\xa0\x0e\xa9\x7fL\xb5p\xcbe\x1c\xa3\xf9\xd5\x91\x0c\x8e\xd73\xeb*z:\x0c\x8d\x04\xc0\xee\xd6\x93\xcc(\x98\xfb\xa3\n\x17\x02\xaf[\x0f\x99\x13`\xeb\x8f)\xa4\x02\xc15\xc0\xe8\xc9\xab\\\x02\xf4\xdc\x07:\xf7\xf2a\x02bUC<\x03O\xae\xe2\xbf\x10\xc8\xf19\x8c\xaa\x96c&B\x1cJ\xd9t\x18\xd8p?*|\x8e\x14x\x0c\xb82\xf4\xf6\xa8\xcaT\x94\xb7-\x05\xad\x05\xdf\x1dDvg\x13d.\x82\x1b\x94\xd7\x08\x15\xec\xb6\x03-\x9ca\xfe\xab\xab{\x10\xa3\xedGg'\xf3\x93\x08\xbc6\x80\xd6\x18\x88u2\x93Y\x00\xd5\x1a\x94\xda\xaa\x05\x0c\x88\x1ayj\xe3\x03\"\xbb\xc1\xd2n\x98\xb4\x07 \xed\x82F#@\xd1iph\x0f\x10:\xb9\x8f\x95 \x9d\x11\xf0<\x07\xea\xac,r>x3\x93:\xef\x1dz\x17\x80\xd9A\xc6G\nph\x03\x87\xc3$J0\x1eju\xfbb\xc1\xbd\x08dA^>\x13A\xc8Q(\x02\xf7H\x9fJ,\xe4x\x02\xa8Z\xc9a@\xab\x9e\xa1\x04\x08(\x80\x17\x04\x10\xe8\xa4P\xe0\xdf[=\nB\x8c\xd2}$l\xf8\x7f\xb3\xee\xe3a\xc0\x01vP\x1d\x94\x00\xfae\xf0V+9'\xe45\x01\xe8\x9bC\xba\x04Xo\xbct!N\x92@\xbcnXD\x18\x10\xe1\x02\xee\xfe\x19V8\x0f\xa8\xf5\xa0V8\x1f\x9f\xfbZ\xe1\xe2\xb0q\xd6t\x18 C\xbe\xe6\x80l\xbfL3\x1c\xd2v\x12hv\xceT\xb6\x01e\xff\x0c\xd3\xd8\x01$=\xa8)\xec\xe2\xf1\x0b\x9c\xbeQ\xa0\xd6/s\xea\xe2\xa1\xaasG\x90\x1f\x98\x1a\x0dI\x95\x80\xa7V\x82z\xff\xa1\xc0\xa8i0T\xca\xa3\x7fP!\x01\xa8\x1e\x98\xa9\x15`\x1a\x9a'\xd9@\xa5!\x93\xab0\x92\x0e$U\xc8D@H\x1d\xe0\xd10\xa6\xe0\xe4|:\x863\x06\xb8\nSq\x9dZ\xd9O\xcf\xec'g\x8eS3\xdb\x89Y\xe0\xb4L\xd1\x94\x84;1\xbe\x96\x01'\x8e\x04\x95\n\xffS^JGzH\xbd\x1e\x97\xf0%\x8b\xcf\x08XK\xb8\x9e%\x83%\xb2\xe6\x88=\xe1x\x13o\xbd\xd8#\xc5\xff \x00\x00\xff\xffPK\x07\x08m\xc1\xf3\x81\x08\xb1\x04\x00k\xa08\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!(\xb9\xb1\xf1mT\x02\x00\x008\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\x81k \x00\x00oauth2-redirect.htmlUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(-\xe3\xb5\x97=9\x05\x00\xf7\x0c\x1b\x00\x14\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\xef\x0c\x00\x00swagger-ui-bundle.jsUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(v\xf2\x8aA\x86\xba\x01\x00\xc5\x87\x08\x00\x1f\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81wF\x05\x00swagger-ui-standalone-preset.jsUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(_;\x94/\xe8Y\x00\x00\xa8X\x02\x00\x0e\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81S\x01\x07\x00swagger-ui.cssUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(m\xc1\xf3\x81\x08\xb1\x04\x00k\xa08\x00\x0c\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\x80[\x07\x00swagger.yamlUT\x05\x00\x01\x80Cm8PK\x05\x06\x00\x00\x00\x00\x08\x00\x08\x00E\x02\x00\x00\xcb\x0c\x0c\x00\x00\x00" fs.Register(data) } diff --git a/client/docs/swagger-ui/swagger.yaml b/client/docs/swagger-ui/swagger.yaml index 7310a906ff..773a81bc7c 100644 --- a/client/docs/swagger-ui/swagger.yaml +++ b/client/docs/swagger-ui/swagger.yaml @@ -466,7 +466,7 @@ paths: type: boolean tags: - Query - '/cosmos/auth/v1beta1/accounts/{address}': + /cosmos/auth/v1beta1/accounts/{address}: get: summary: Account returns account details based on address. operationId: Account @@ -847,7 +847,7 @@ paths: type: string tags: - Query - '/cosmos/auth/v1beta1/address_by_id/{id}': + /cosmos/auth/v1beta1/address_by_id/{id}: get: summary: AccountAddressByID returns account address based on account number. description: 'Since: cosmos-sdk 0.46.2' @@ -1275,7 +1275,7 @@ paths: } tags: - Query - '/cosmos/auth/v1beta1/bech32/{address_bytes}': + /cosmos/auth/v1beta1/bech32/{address_bytes}: get: summary: AddressBytesToString converts Account Address bytes to string description: 'Since: cosmos-sdk 0.46' @@ -1491,7 +1491,7 @@ paths: format: byte tags: - Query - '/cosmos/auth/v1beta1/bech32/{address_string}': + /cosmos/auth/v1beta1/bech32/{address_string}: get: summary: AddressStringToBytes converts Address string to bytes description: 'Since: cosmos-sdk 0.46' @@ -2092,7 +2092,7 @@ paths: } tags: - Query - '/cosmos/auth/v1beta1/module_accounts/{name}': + /cosmos/auth/v1beta1/module_accounts/{name}: get: summary: ModuleAccountByName returns the module account info by module name operationId: ModuleAccountByName @@ -2695,7 +2695,7 @@ paths: } tags: - Query - '/cosmos/bank/v1beta1/balances/{address}': + /cosmos/bank/v1beta1/balances/{address}: get: summary: AllBalances queries the balance of all coins for a single account. operationId: AllBalances @@ -2833,7 +2833,7 @@ paths: type: boolean tags: - Query - '/cosmos/bank/v1beta1/balances/{address}/by_denom': + /cosmos/bank/v1beta1/balances/{address}/by_denom: get: summary: Balance queries the balance of a single coin for a single account. operationId: Balance @@ -2896,7 +2896,7 @@ paths: type: string tags: - Query - '/cosmos/bank/v1beta1/denom_owners/{denom}': + /cosmos/bank/v1beta1/denom_owners/{denom}: get: summary: >- DenomOwners queries for all account addresses that own a particular @@ -3271,7 +3271,7 @@ paths: type: boolean tags: - Query - '/cosmos/bank/v1beta1/denoms_metadata/{denom}': + /cosmos/bank/v1beta1/denoms_metadata/{denom}: get: summary: DenomsMetadata queries the client metadata of a given coin denomination. operationId: DenomMetadata @@ -3625,7 +3625,7 @@ paths: type: boolean tags: - Query - '/cosmos/bank/v1beta1/spendable_balances/{address}': + /cosmos/bank/v1beta1/spendable_balances/{address}: get: summary: |- SpendableBalances queries the spenable balance of all coins for a single @@ -5571,7 +5571,7 @@ paths: } tags: - Service - '/cosmos/base/tendermint/v1beta1/blocks/{height}': + /cosmos/base/tendermint/v1beta1/blocks/{height}: get: summary: GetBlockByHeight queries block for given height. operationId: GetBlockByHeight @@ -7843,7 +7843,7 @@ paths: type: boolean tags: - Service - '/cosmos/base/tendermint/v1beta1/validatorsets/{height}': + /cosmos/base/tendermint/v1beta1/validatorsets/{height}: get: summary: GetValidatorSetByHeight queries validator-set at a given height. operationId: GetValidatorSetByHeight @@ -8380,7 +8380,7 @@ paths: format: byte tags: - Query - '/cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards': + /cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards: get: summary: |- DelegationTotalRewards queries the total rewards accrued by a each @@ -8473,7 +8473,7 @@ paths: type: string tags: - Query - '/cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards/{validator_address}': + /cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards/{validator_address}: get: summary: DelegationRewards queries the total rewards accrued by a delegation. operationId: DelegationRewards @@ -8540,7 +8540,7 @@ paths: type: string tags: - Query - '/cosmos/distribution/v1beta1/delegators/{delegator_address}/validators': + /cosmos/distribution/v1beta1/delegators/{delegator_address}/validators: get: summary: DelegatorValidators queries the validators of a delegator. operationId: DelegatorValidators @@ -8590,7 +8590,7 @@ paths: type: string tags: - Query - '/cosmos/distribution/v1beta1/delegators/{delegator_address}/withdraw_address': + /cosmos/distribution/v1beta1/delegators/{delegator_address}/withdraw_address: get: summary: DelegatorWithdrawAddress queries withdraw address of a delegator. operationId: DelegatorWithdrawAddress @@ -8685,7 +8685,7 @@ paths: format: byte tags: - Query - '/cosmos/distribution/v1beta1/validators/{validator_address}/commission': + /cosmos/distribution/v1beta1/validators/{validator_address}/commission: get: summary: ValidatorCommission queries accumulated commission for a validator. operationId: ValidatorCommission @@ -8750,7 +8750,7 @@ paths: type: string tags: - Query - '/cosmos/distribution/v1beta1/validators/{validator_address}/outstanding_rewards': + /cosmos/distribution/v1beta1/validators/{validator_address}/outstanding_rewards: get: summary: ValidatorOutstandingRewards queries rewards of a validator address. operationId: ValidatorOutstandingRewards @@ -8822,7 +8822,7 @@ paths: type: string tags: - Query - '/cosmos/distribution/v1beta1/validators/{validator_address}/slashes': + /cosmos/distribution/v1beta1/validators/{validator_address}/slashes: get: summary: ValidatorSlashes queries slash events of a validator. operationId: ValidatorSlashes @@ -9437,7 +9437,7 @@ paths: type: boolean tags: - Query - '/cosmos/evidence/v1beta1/evidence/{evidence_hash}': + /cosmos/evidence/v1beta1/evidence/{evidence_hash}: get: summary: Evidence queries evidence based on evidence hash. operationId: Evidence @@ -9819,7 +9819,7 @@ paths: format: byte tags: - Query - '/cosmos/gov/v1beta1/params/{params_type}': + /cosmos/gov/v1beta1/params/{params_type}: get: summary: Params queries all parameters of the gov module. operationId: GovParams @@ -10672,7 +10672,7 @@ paths: type: boolean tags: - Query - '/cosmos/gov/v1beta1/proposals/{proposal_id}': + /cosmos/gov/v1beta1/proposals/{proposal_id}: get: summary: Proposal queries proposal details based on ProposalID. operationId: Proposal @@ -11140,7 +11140,7 @@ paths: format: uint64 tags: - Query - '/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits': + /cosmos/gov/v1beta1/proposals/{proposal_id}/deposits: get: summary: Deposits queries all deposits of a single proposal. operationId: Deposits @@ -11459,7 +11459,7 @@ paths: type: boolean tags: - Query - '/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits/{depositor}': + /cosmos/gov/v1beta1/proposals/{proposal_id}/deposits/{depositor}: get: summary: >- Deposit queries single deposit information based proposalID, @@ -11707,7 +11707,7 @@ paths: type: string tags: - Query - '/cosmos/gov/v1beta1/proposals/{proposal_id}/tally': + /cosmos/gov/v1beta1/proposals/{proposal_id}/tally: get: summary: TallyResult queries the tally of a proposal vote. operationId: TallyResult @@ -11930,7 +11930,7 @@ paths: format: uint64 tags: - Query - '/cosmos/gov/v1beta1/proposals/{proposal_id}/votes': + /cosmos/gov/v1beta1/proposals/{proposal_id}/votes: get: summary: Votes queries votes of a given proposal. operationId: Votes @@ -12282,9 +12282,9 @@ paths: type: boolean tags: - Query - '/cosmos/gov/v1beta1/proposals/{proposal_id}/votes/{voter}': + /cosmos/gov/v1beta1/proposals/{proposal_id}/votes/{voter}: get: - summary: 'Vote queries voted information based on proposalID, voterAddr.' + summary: Vote queries voted information based on proposalID, voterAddr. operationId: Vote responses: '200': @@ -12561,7 +12561,7 @@ paths: type: string tags: - Query - '/cosmos/gov/v1/params/{params_type}': + /cosmos/gov/v1/params/{params_type}: get: summary: Params queries all parameters of the gov module. operationId: GovV1Params @@ -13418,7 +13418,7 @@ paths: type: boolean tags: - Query - '/cosmos/gov/v1/proposals/{proposal_id}': + /cosmos/gov/v1/proposals/{proposal_id}: get: summary: Proposal queries proposal details based on ProposalID. operationId: GovV1Proposal @@ -13895,7 +13895,7 @@ paths: format: uint64 tags: - Query - '/cosmos/gov/v1/proposals/{proposal_id}/deposits': + /cosmos/gov/v1/proposals/{proposal_id}/deposits: get: summary: Deposits queries all deposits of a single proposal. operationId: GovV1Deposit @@ -14214,7 +14214,7 @@ paths: type: boolean tags: - Query - '/cosmos/gov/v1/proposals/{proposal_id}/deposits/{depositor}': + /cosmos/gov/v1/proposals/{proposal_id}/deposits/{depositor}: get: summary: >- Deposit queries single deposit information based proposalID, @@ -14462,7 +14462,7 @@ paths: type: string tags: - Query - '/cosmos/gov/v1/proposals/{proposal_id}/tally': + /cosmos/gov/v1/proposals/{proposal_id}/tally: get: summary: TallyResult queries the tally of a proposal vote. operationId: GovV1TallyResult @@ -14685,7 +14685,7 @@ paths: format: uint64 tags: - Query - '/cosmos/gov/v1/proposals/{proposal_id}/votes': + /cosmos/gov/v1/proposals/{proposal_id}/votes: get: summary: Votes queries votes of a given proposal. operationId: GovV1Votes @@ -15020,9 +15020,9 @@ paths: type: boolean tags: - Query - '/cosmos/gov/v1/proposals/{proposal_id}/votes/{voter}': + /cosmos/gov/v1/proposals/{proposal_id}/votes/{voter}: get: - summary: 'Vote queries voted information based on proposalID, voterAddr.' + summary: Vote queries voted information based on proposalID, voterAddr. operationId: GovV1Vote responses: '200': @@ -15552,7 +15552,7 @@ paths: format: byte tags: - Query - '/cosmos/quarantine/v1beta1/active/{to_address}': + /cosmos/quarantine/v1beta1/active/{to_address}: get: summary: IsQuarantined checks if an account has opted into quarantine. operationId: IsQuarantined @@ -15600,7 +15600,7 @@ paths: type: string tags: - Query - '/cosmos/quarantine/v1beta1/auto/{to_address}': + /cosmos/quarantine/v1beta1/auto/{to_address}: get: summary: AutoResponses gets the auto-response settings for a quarantined account. description: >- @@ -15756,7 +15756,7 @@ paths: type: boolean tags: - Query - '/cosmos/quarantine/v1beta1/auto/{to_address}/{from_address}': + /cosmos/quarantine/v1beta1/auto/{to_address}/{from_address}: get: summary: AutoResponses gets the auto-response settings for a quarantined account. description: >- @@ -16100,7 +16100,7 @@ paths: type: boolean tags: - Query - '/cosmos/quarantine/v1beta1/funds/{to_address}': + /cosmos/quarantine/v1beta1/funds/{to_address}: get: summary: >- QuarantinedFunds gets information about funds that have been @@ -16288,7 +16288,7 @@ paths: type: boolean tags: - Query - '/cosmos/quarantine/v1beta1/funds/{to_address}/{from_address}': + /cosmos/quarantine/v1beta1/funds/{to_address}/{from_address}: get: summary: >- QuarantinedFunds gets information about funds that have been @@ -16710,7 +16710,7 @@ paths: type: boolean tags: - Query - '/cosmos/slashing/v1beta1/signing_infos/{cons_address}': + /cosmos/slashing/v1beta1/signing_infos/{cons_address}: get: summary: SigningInfo queries the signing info of given cons address operationId: SigningInfo @@ -16808,7 +16808,7 @@ paths: type: string tags: - Query - '/cosmos/staking/v1beta1/delegations/{delegator_addr}': + /cosmos/staking/v1beta1/delegations/{delegator_addr}: get: summary: >- DelegatorDelegations queries all delegations of a given delegator @@ -17148,7 +17148,7 @@ paths: type: boolean tags: - Query - '/cosmos/staking/v1beta1/delegators/{delegator_addr}/redelegations': + /cosmos/staking/v1beta1/delegators/{delegator_addr}/redelegations: get: summary: Redelegations queries redelegations of given address. operationId: Redelegations @@ -17558,7 +17558,7 @@ paths: type: boolean tags: - Query - '/cosmos/staking/v1beta1/delegators/{delegator_addr}/unbonding_delegations': + /cosmos/staking/v1beta1/delegators/{delegator_addr}/unbonding_delegations: get: summary: >- DelegatorUnbondingDelegations queries all unbonding delegations of a @@ -17900,7 +17900,7 @@ paths: type: boolean tags: - Query - '/cosmos/staking/v1beta1/delegators/{delegator_addr}/validators': + /cosmos/staking/v1beta1/delegators/{delegator_addr}/validators: get: summary: |- DelegatorValidators queries all validators info for given delegator @@ -18503,7 +18503,7 @@ paths: type: boolean tags: - Query - '/cosmos/staking/v1beta1/delegators/{delegator_addr}/validators/{validator_addr}': + /cosmos/staking/v1beta1/delegators/{delegator_addr}/validators/{validator_addr}: get: summary: |- DelegatorValidator queries validator info for given delegator validator @@ -19030,7 +19030,7 @@ paths: type: string tags: - Query - '/cosmos/staking/v1beta1/historical_info/{height}': + /cosmos/staking/v1beta1/historical_info/{height}: get: summary: HistoricalInfo queries the historical info for given height. operationId: HistoricalInfo @@ -20687,7 +20687,7 @@ paths: type: boolean tags: - Query - '/cosmos/staking/v1beta1/validators/{validator_addr}': + /cosmos/staking/v1beta1/validators/{validator_addr}: get: summary: Validator queries validator info for given validator address. operationId: Validator @@ -21207,7 +21207,7 @@ paths: type: string tags: - Query - '/cosmos/staking/v1beta1/validators/{validator_addr}/delegations': + /cosmos/staking/v1beta1/validators/{validator_addr}/delegations: get: summary: ValidatorDelegations queries delegate info for given validator. operationId: ValidatorDelegations @@ -21542,7 +21542,7 @@ paths: type: boolean tags: - Query - '/cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}': + /cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}: get: summary: Delegation queries delegate info for given validator delegator pair. operationId: Delegation @@ -21805,7 +21805,7 @@ paths: type: string tags: - Query - '/cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}/unbonding_delegation': + /cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}/unbonding_delegation: get: summary: |- UnbondingDelegation queries unbonding info for given validator delegator @@ -22071,7 +22071,7 @@ paths: type: string tags: - Query - '/cosmos/staking/v1beta1/validators/{validator_addr}/unbonding_delegations': + /cosmos/staking/v1beta1/validators/{validator_addr}/unbonding_delegations: get: summary: >- ValidatorUnbondingDelegations queries unbonding delegations of a @@ -23203,7 +23203,7 @@ paths: description: Response code. data: type: string - description: 'Result bytes, if any.' + description: Result bytes, if any. raw_log: type: string description: >- @@ -23735,7 +23735,7 @@ paths: RPC method. tags: - Service - '/cosmos/tx/v1beta1/txs/block/{height}': + /cosmos/tx/v1beta1/txs/block/{height}: get: summary: GetBlockWithTxs fetches a block with decoded txs. description: 'Since: cosmos-sdk 0.45.2' @@ -23999,7 +23999,7 @@ paths: type: boolean tags: - Service - '/cosmos/tx/v1beta1/txs/{hash}': + /cosmos/tx/v1beta1/txs/{hash}: get: summary: GetTx fetches a tx by hash. operationId: GetTx @@ -24199,13 +24199,13 @@ paths: } parameters: - name: hash - description: 'hash is the tx hash to query, encoded as a hex string.' + description: hash is the tx hash to query, encoded as a hex string. in: path required: true type: string tags: - Service - '/cosmos/upgrade/v1beta1/applied_plan/{name}': + /cosmos/upgrade/v1beta1/applied_plan/{name}: get: summary: AppliedPlan queries a previously applied upgrade plan by its name. operationId: AppliedPlan @@ -25296,7 +25296,7 @@ paths: type: string tags: - Query - '/cosmos/upgrade/v1beta1/upgraded_consensus_state/{last_height}': + /cosmos/upgrade/v1beta1/upgraded_consensus_state/{last_height}: get: summary: >- UpgradedConsensusState queries the consensus state that will serve @@ -25528,7 +25528,7 @@ paths: - Query /cosmos/authz/v1beta1/grants: get: - summary: 'Returns list of `Authorization`, granted to the grantee by the granter.' + summary: Returns list of `Authorization`, granted to the grantee by the granter. operationId: Grants responses: '200': @@ -26020,7 +26020,7 @@ paths: type: boolean tags: - Query - '/cosmos/authz/v1beta1/grants/grantee/{grantee}': + /cosmos/authz/v1beta1/grants/grantee/{grantee}: get: summary: GranteeGrants returns a list of `GrantAuthorization` by grantee. description: 'Since: cosmos-sdk 0.46' @@ -26500,9 +26500,9 @@ paths: type: boolean tags: - Query - '/cosmos/authz/v1beta1/grants/granter/{granter}': + /cosmos/authz/v1beta1/grants/granter/{granter}: get: - summary: 'GranterGrants returns list of `GrantAuthorization`, granted by granter.' + summary: GranterGrants returns list of `GrantAuthorization`, granted by granter. description: 'Since: cosmos-sdk 0.46' operationId: GranterGrants responses: @@ -26980,7 +26980,7 @@ paths: type: boolean tags: - Query - '/cosmos/feegrant/v1beta1/allowance/{granter}/{grantee}': + /cosmos/feegrant/v1beta1/allowance/{granter}/{grantee}: get: summary: Allowance returns fee granted to the grantee by the granter. operationId: Allowance @@ -27286,7 +27286,7 @@ paths: type: string tags: - Query - '/cosmos/feegrant/v1beta1/allowances/{grantee}': + /cosmos/feegrant/v1beta1/allowances/{grantee}: get: summary: Allowances returns all the grants for address. operationId: Allowances @@ -27659,7 +27659,7 @@ paths: type: boolean tags: - Query - '/cosmos/feegrant/v1beta1/issued/{granter}': + /cosmos/feegrant/v1beta1/issued/{granter}: get: summary: AllowancesByGranter returns all the grants given by an address description: 'Since: cosmos-sdk 0.46' @@ -28036,7 +28036,7 @@ paths: type: boolean tags: - Query - '/cosmos/group/v1/group_info/{group_id}': + /cosmos/group/v1/group_info/{group_id}: get: summary: GroupInfo queries group info based on group id. operationId: GroupInfo @@ -28285,7 +28285,7 @@ paths: format: uint64 tags: - Query - '/cosmos/group/v1/group_members/{group_id}': + /cosmos/group/v1/group_members/{group_id}: get: summary: GroupMembers queries members of a group operationId: GroupMembers @@ -28607,7 +28607,7 @@ paths: type: boolean tags: - Query - '/cosmos/group/v1/group_policies_by_admin/{admin}': + /cosmos/group/v1/group_policies_by_admin/{admin}: get: summary: GroupsByAdmin queries group policies by admin address. operationId: GroupPoliciesByAdmin @@ -29109,7 +29109,7 @@ paths: type: boolean tags: - Query - '/cosmos/group/v1/group_policies_by_group/{group_id}': + /cosmos/group/v1/group_policies_by_group/{group_id}: get: summary: GroupPoliciesByGroup queries group policies by group id. operationId: GroupPoliciesByGroup @@ -29612,7 +29612,7 @@ paths: type: boolean tags: - Query - '/cosmos/group/v1/group_policy_info/{address}': + /cosmos/group/v1/group_policy_info/{address}: get: summary: >- GroupPolicyInfo queries group policy info based on account address of @@ -30361,7 +30361,7 @@ paths: type: boolean tags: - Query - '/cosmos/group/v1/groups_by_admin/{admin}': + /cosmos/group/v1/groups_by_admin/{admin}: get: summary: GroupsByAdmin queries groups by admin address. operationId: GroupsByAdmin @@ -30691,7 +30691,7 @@ paths: type: boolean tags: - Query - '/cosmos/group/v1/groups_by_member/{address}': + /cosmos/group/v1/groups_by_member/{address}: get: summary: GroupsByMember queries groups by member address. operationId: GroupsByMember @@ -31021,7 +31021,7 @@ paths: type: boolean tags: - Query - '/cosmos/group/v1/proposal/{proposal_id}': + /cosmos/group/v1/proposal/{proposal_id}: get: summary: Proposal queries a proposal based on proposal id. operationId: GroupProposal @@ -31529,7 +31529,7 @@ paths: format: uint64 tags: - Query - '/cosmos/group/v1/proposals/{proposal_id}/tally': + /cosmos/group/v1/proposals/{proposal_id}/tally: get: summary: >- TallyResult returns the tally result of a proposal. If the proposal is @@ -31764,7 +31764,7 @@ paths: format: uint64 tags: - Query - '/cosmos/group/v1/proposals_by_group_policy/{address}': + /cosmos/group/v1/proposals_by_group_policy/{address}: get: summary: >- ProposalsByGroupPolicy queries proposals based on account address of @@ -32365,7 +32365,7 @@ paths: type: boolean tags: - Query - '/cosmos/group/v1/vote_by_proposal_voter/{proposal_id}/{voter}': + /cosmos/group/v1/vote_by_proposal_voter/{proposal_id}/{voter}: get: summary: VoteByProposalVoter queries a vote by proposal id and voter. operationId: VoteByProposalVoter @@ -32611,7 +32611,7 @@ paths: type: string tags: - Query - '/cosmos/group/v1/votes_by_proposal/{proposal_id}': + /cosmos/group/v1/votes_by_proposal/{proposal_id}: get: summary: VotesByProposal queries a vote by proposal. operationId: VotesByProposal @@ -32932,7 +32932,7 @@ paths: type: boolean tags: - Query - '/cosmos/group/v1/votes_by_voter/{voter}': + /cosmos/group/v1/votes_by_voter/{voter}: get: summary: VotesByVoter queries a vote by voter. operationId: VotesByVoter @@ -33250,7 +33250,7 @@ paths: type: boolean tags: - Query - '/provenance/attribute/v1/accountdata/{account}': + /provenance/attribute/v1/accountdata/{account}: get: summary: AccountData returns the accountdata for a specified account. operationId: AccountData @@ -33269,7 +33269,7 @@ paths: QueryAccountDataResponse is the response type for the Query/AccountData method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -33298,7 +33298,7 @@ paths: type: string tags: - Query - '/provenance/attribute/v1/accounts/{attribute_name}': + /provenance/attribute/v1/accounts/{attribute_name}: get: summary: AttributeAccounts queries accounts on a given attribute name operationId: AttributeAccounts @@ -33336,7 +33336,7 @@ paths: QueryAttributeAccountsResponse is the response type for the Query/AttributeAccounts method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -33409,7 +33409,6 @@ 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 @@ -33420,10 +33419,9 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - '/provenance/attribute/v1/attribute/{account}/scan/{suffix}': + /provenance/attribute/v1/attribute/{account}/scan/{suffix}: get: summary: >- Scan queries attributes on a given account (address) for any that match @@ -33501,7 +33499,7 @@ paths: was set, its value is undefined otherwise description: QueryScanResponse is the response type for the Query/Scan method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -33581,7 +33579,6 @@ 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 @@ -33592,10 +33589,9 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - '/provenance/attribute/v1/attribute/{account}/{name}': + /provenance/attribute/v1/attribute/{account}/{name}: get: summary: >- Attribute queries attributes on a given account (address) for one (or @@ -33675,7 +33671,7 @@ paths: QueryAttributeResponse is the response type for the Query/Attribute method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -33753,7 +33749,6 @@ 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 @@ -33764,10 +33759,9 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - '/provenance/attribute/v1/attributes/{account}': + /provenance/attribute/v1/attributes/{account}: get: summary: >- Attributes queries attributes on a given account (address) for any @@ -33847,7 +33841,7 @@ paths: QueryAttributesResponse is the response type for the Query/Attributes method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -33920,7 +33914,6 @@ 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 @@ -33931,7 +33924,6 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query /provenance/attribute/v1/params: @@ -33956,7 +33948,7 @@ paths: 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: @@ -33979,7 +33971,7 @@ paths: format: byte tags: - Query - '/provenance/marker/v1/accesscontrol/{id}': + /provenance/marker/v1/accesscontrol/{id}: get: summary: query for access records on an account operationId: Access @@ -34035,7 +34027,7 @@ paths: QueryAccessResponse is the response type for the Query/MarkerAccess method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -34231,7 +34223,7 @@ paths: type: string tags: - Query - '/provenance/marker/v1/accountdata/{denom}': + /provenance/marker/v1/accountdata/{denom}: get: summary: query for account data associated with a denom operationId: MarkerAccountData @@ -34248,7 +34240,7 @@ paths: QueryAccountDataResponse is the response type for the Query/AccountData default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -34654,7 +34646,7 @@ paths: QueryAllMarkersResponse is the response type for the Query/AllMarkers method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -34911,7 +34903,6 @@ 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 @@ -34922,10 +34913,9 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - '/provenance/marker/v1/detail/{id}': + /provenance/marker/v1/detail/{id}: get: summary: query for a single marker by denom or address operationId: Marker @@ -35110,7 +35100,7 @@ paths: QueryMarkerResponse is the response type for the Query/Marker method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -35306,7 +35296,7 @@ paths: type: string tags: - Query - '/provenance/marker/v1/escrow/{id}': + /provenance/marker/v1/escrow/{id}: get: summary: query for coins on a marker account operationId: Escrow @@ -35337,7 +35327,7 @@ paths: QueryEscrowResponse is the response type for the Query/MarkerEscrow method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -35533,7 +35523,7 @@ paths: type: string tags: - Query - '/provenance/marker/v1/getdenommetadata/{denom}': + /provenance/marker/v1/getdenommetadata/{denom}: get: summary: query for access records on an account operationId: MarkerDenomMetadata @@ -35636,7 +35626,7 @@ paths: QueryDenomMetadataResponse is the response type for the Query/DenomMetadata default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -35831,7 +35821,7 @@ paths: type: string tags: - Query - '/provenance/marker/v1/holding/{id}': + /provenance/marker/v1/holding/{id}: get: summary: query for all accounts holding the given marker coins operationId: Holding @@ -35894,7 +35884,7 @@ paths: QueryHoldingResponse is the response type for the Query/MarkerHolders method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -36134,7 +36124,6 @@ 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 @@ -36145,10 +36134,9 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - '/provenance/marker/v1/netassetvalues/{id}': + /provenance/marker/v1/netassetvalues/{id}: get: summary: NetAssetValues returns net asset values for marker operationId: NetAssetValues @@ -36195,7 +36183,7 @@ paths: QueryNetAssetValuesRequest is the response type for the Query/NetAssetValues method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -36413,7 +36401,6 @@ paths: amount of supply to allow a marker to be created with enable_governance: type: boolean - format: boolean description: >- indicates if governance based controls of markers is allowed. @@ -36434,7 +36421,7 @@ paths: 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: @@ -36624,7 +36611,7 @@ paths: } tags: - Query - '/provenance/marker/v1/supply/{id}': + /provenance/marker/v1/supply/{id}: get: summary: query for supply of coin on a marker account operationId: Supply @@ -36653,7 +36640,7 @@ paths: QuerySupplyResponse is the response type for the Query/MarkerSupply method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -36849,7 +36836,7 @@ paths: type: string tags: - Query - '/provenance/metadata/v1/accountdata/{metadata_addr}': + /provenance/metadata/v1/accountdata/{metadata_addr}: get: summary: |- AccountData gets the account data associated with a metadata address. @@ -36868,7 +36855,7 @@ paths: AccountDataResponse is the response type for the Query/AccountData RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -36900,7 +36887,7 @@ paths: format: byte tags: - Query - '/provenance/metadata/v1/addr/{addrs}': + /provenance/metadata/v1/addr/{addrs}: get: summary: GetByAddr retrieves metadata given any address(es). operationId: GetByAddr @@ -36968,7 +36955,6 @@ paths: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role associated @@ -36997,7 +36983,6 @@ paths: be changed by the entity indicated once it is set. require_party_rollup: type: boolean - format: boolean description: >- Whether all parties in this scope and its sessions must be present in this scope's owners field. @@ -37063,7 +37048,6 @@ paths: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role associated @@ -37542,7 +37526,7 @@ paths: GetByAddrResponse is the response type for the Query/GetByAddr RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -37575,7 +37559,7 @@ paths: minItems: 1 tags: - Query - '/provenance/metadata/v1/contractspec/{specification_id}': + /provenance/metadata/v1/contractspec/{specification_id}: get: summary: >- ContractSpecification returns a contract specification for the given @@ -37944,7 +37928,6 @@ paths: recspec1qh00d0q2e8w5say53afqdesxp2zw42dq2jdvmdazuwzcaddhh8gmuqhez44. include_record_specs: type: boolean - format: boolean description: >- include_record_specs is a flag for whether to include the the record specifications of this contract specification @@ -37952,13 +37935,11 @@ paths: in the response. exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -37966,7 +37947,7 @@ paths: ContractSpecificationResponse is the response type for the Query/ContractSpecification RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -38011,7 +37992,6 @@ paths: in: query required: false type: boolean - format: boolean - name: exclude_id_info description: >- exclude_id_info is a flag for whether to exclude the id info from @@ -38019,7 +37999,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_request description: >- include_request is a flag for whether to include this request in @@ -38027,10 +38006,9 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - '/provenance/metadata/v1/contractspec/{specification_id}/recordspec/{name}': + /provenance/metadata/v1/contractspec/{specification_id}/recordspec/{name}: get: summary: RecordSpecification returns a record specification for the given input. operationId: RecordSpecification2 @@ -38254,13 +38232,11 @@ paths: specification address. exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -38268,7 +38244,7 @@ paths: RecordSpecificationResponse is the response type for the Query/RecordSpecification RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -38323,7 +38299,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_request description: >- include_request is a flag for whether to include this request in @@ -38331,10 +38306,9 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - '/provenance/metadata/v1/contractspec/{specification_id}/recordspecs': + /provenance/metadata/v1/contractspec/{specification_id}/recordspecs: get: summary: >- RecordSpecificationsForContractSpecification returns the record @@ -38579,13 +38553,11 @@ paths: recspec1qh00d0q2e8w5say53afqdesxp2zw42dq2jdvmdazuwzcaddhh8gmuqhez44. exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -38595,7 +38567,7 @@ paths: Query/RecordSpecificationsForContractSpecification RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -38638,7 +38610,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_request description: >- include_request is a flag for whether to include this request in @@ -38646,7 +38617,6 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query /provenance/metadata/v1/contractspecs/all: @@ -38799,13 +38769,11 @@ paths: properties: exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -38848,7 +38816,6 @@ paths: each app. count_total: type: boolean - format: boolean description: >- count_total is set to true to indicate that the result set should include @@ -38862,7 +38829,6 @@ paths: is set. reverse: type: boolean - format: boolean description: >- reverse is set to true if results are to be returned in the descending order. @@ -38899,7 +38865,7 @@ paths: ContractSpecificationsAllResponse is the response type for the Query/ContractSpecificationsAll RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -38928,7 +38894,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_request description: >- include_request is a flag for whether to include this request in @@ -38936,7 +38901,6 @@ paths: in: query required: false type: boolean - format: boolean - name: pagination.key description: |- key is a value returned in PageResponse.next_key to begin @@ -38983,7 +38947,6 @@ 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 @@ -38994,7 +38957,6 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query /provenance/metadata/v1/locator/params: @@ -39022,7 +38984,6 @@ paths: properties: include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -39030,7 +38991,7 @@ paths: OSLocatorParamsResponse is the response type for the Query/OSLocatorParams RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -39059,10 +39020,9 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - '/provenance/metadata/v1/locator/scope/{scope_id}': + /provenance/metadata/v1/locator/scope/{scope_id}: get: summary: >- OSLocatorsByScope returns all ObjectStoreLocator entries for a for all @@ -39101,7 +39061,6 @@ paths: type: string include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -39109,7 +39068,7 @@ paths: OSLocatorsByScopeResponse is the response type for the Query/OSLocatorsByScope RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -39142,10 +39101,9 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - '/provenance/metadata/v1/locator/uri/{uri}': + /provenance/metadata/v1/locator/uri/{uri}: get: summary: >- OSLocatorsByURI returns all ObjectStoreLocator entries for a locator @@ -39184,7 +39142,6 @@ paths: type: string include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -39227,7 +39184,6 @@ paths: each app. count_total: type: boolean - format: boolean description: >- count_total is set to true to indicate that the result set should include @@ -39241,7 +39197,6 @@ paths: is set. reverse: type: boolean - format: boolean description: >- reverse is set to true if results are to be returned in the descending order. @@ -39278,7 +39233,7 @@ paths: OSLocatorsByURIResponse is the response type for the Query/OSLocatorsByURI RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -39311,7 +39266,6 @@ paths: in: query required: false type: boolean - format: boolean - name: pagination.key description: |- key is a value returned in PageResponse.next_key to begin @@ -39358,7 +39312,6 @@ 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 @@ -39369,10 +39322,9 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - '/provenance/metadata/v1/locator/{owner}': + /provenance/metadata/v1/locator/{owner}: get: summary: OSLocator returns an ObjectStoreLocator by its owner's address. operationId: OSLocator @@ -39407,7 +39359,6 @@ paths: type: string include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -39415,7 +39366,7 @@ paths: OSLocatorResponse is the response type for the Query/OSLocator RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -39448,7 +39399,6 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query /provenance/metadata/v1/locators/all: @@ -39486,7 +39436,6 @@ paths: properties: include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -39529,7 +39478,6 @@ paths: each app. count_total: type: boolean - format: boolean description: >- count_total is set to true to indicate that the result set should include @@ -39543,7 +39491,6 @@ paths: is set. reverse: type: boolean - format: boolean description: >- reverse is set to true if results are to be returned in the descending order. @@ -39580,7 +39527,7 @@ paths: OSAllLocatorsResponse is the response type for the Query/OSAllLocators RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -39609,7 +39556,6 @@ paths: in: query required: false type: boolean - format: boolean - name: pagination.key description: |- key is a value returned in PageResponse.next_key to begin @@ -39656,7 +39602,6 @@ 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 @@ -39667,10 +39612,9 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - '/provenance/metadata/v1/ownership/{address}': + /provenance/metadata/v1/ownership/{address}: get: summary: >- Ownership returns the scope identifiers that list the given address as @@ -39695,7 +39639,6 @@ paths: type: string include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -39738,7 +39681,6 @@ paths: each app. count_total: type: boolean - format: boolean description: >- count_total is set to true to indicate that the result set should include @@ -39752,7 +39694,6 @@ paths: is set. reverse: type: boolean - format: boolean description: >- reverse is set to true if results are to be returned in the descending order. @@ -39789,7 +39730,7 @@ paths: OwnershipResponse is the response type for the Query/Ownership RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -39822,7 +39763,6 @@ paths: in: query required: false type: boolean - format: boolean - name: pagination.key description: |- key is a value returned in PageResponse.next_key to begin @@ -39869,7 +39809,6 @@ 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 @@ -39880,7 +39819,6 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query /provenance/metadata/v1/params: @@ -39902,7 +39840,6 @@ paths: properties: include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -39910,7 +39847,7 @@ paths: 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: @@ -39939,10 +39876,9 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - '/provenance/metadata/v1/record/{record_addr}': + /provenance/metadata/v1/record/{record_addr}: get: summary: Records searches for records. description: >- @@ -40063,7 +39999,6 @@ paths: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role @@ -40093,7 +40028,6 @@ paths: be changed by the entity indicated once it is set. require_party_rollup: type: boolean - format: boolean description: >- Whether all parties in this scope and its sessions must be present in this scope's owners field. @@ -40225,7 +40159,6 @@ paths: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role @@ -40709,25 +40642,21 @@ paths: title: name is the name of the record to look for include_scope: type: boolean - format: boolean description: >- include_scope is a flag for whether to include the the scope containing these records in the response. include_sessions: type: boolean - format: boolean description: >- include_sessions is a flag for whether to include the sessions containing these records in the response. exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -40735,7 +40664,7 @@ paths: RecordsResponse is the response type for the Query/Records RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -40798,7 +40727,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_sessions description: >- include_sessions is a flag for whether to include the sessions @@ -40806,7 +40734,6 @@ paths: in: query required: false type: boolean - format: boolean - name: exclude_id_info description: >- exclude_id_info is a flag for whether to exclude the id info from @@ -40814,7 +40741,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_request description: >- include_request is a flag for whether to include this request in @@ -40822,10 +40748,9 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - '/provenance/metadata/v1/record/{record_addr}/scope': + /provenance/metadata/v1/record/{record_addr}/scope: get: summary: Scope searches for a scope. description: >- @@ -40936,7 +40861,6 @@ paths: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role @@ -40966,7 +40890,6 @@ paths: be changed by the entity indicated once it is set. require_party_rollup: type: boolean - format: boolean description: >- Whether all parties in this scope and its sessions must be present in this scope's owners field. @@ -41098,7 +41021,6 @@ paths: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role @@ -41576,31 +41498,27 @@ paths: record1q2ge0zaztu65tx5x5llv5xc9ztsw42dq2jdvmdazuwzcaddhh8gmu3mcze3. include_sessions: type: boolean - format: boolean description: >- include_sessions is a flag for whether to include the sessions of the scope in the response. include_records: type: boolean - format: boolean description: >- include_records is a flag for whether to include the records of the scope in the response. exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. description: ScopeResponse is the response type for the Query/Scope RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -41652,7 +41570,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_records description: >- include_records is a flag for whether to include the records of the @@ -41660,7 +41577,6 @@ paths: in: query required: false type: boolean - format: boolean - name: exclude_id_info description: >- exclude_id_info is a flag for whether to exclude the id info from @@ -41668,7 +41584,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_request description: >- include_request is a flag for whether to include this request in @@ -41676,10 +41591,9 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - '/provenance/metadata/v1/record/{record_addr}/session': + /provenance/metadata/v1/record/{record_addr}/session: get: summary: Sessions searches for sessions. description: >- @@ -41815,7 +41729,6 @@ paths: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role @@ -41845,7 +41758,6 @@ paths: be changed by the entity indicated once it is set. require_party_rollup: type: boolean - format: boolean description: >- Whether all parties in this scope and its sessions must be present in this scope's owners field. @@ -41977,7 +41889,6 @@ paths: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role @@ -42463,25 +42374,21 @@ paths: for in the provided scope. include_scope: type: boolean - format: boolean description: >- include_scope is a flag for whether to include the scope containing these sessions in the response. include_records: type: boolean - format: boolean description: >- include_records is a flag for whether to include the records of these sessions in the response. exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -42489,7 +42396,7 @@ paths: SessionsResponse is the response type for the Query/Sessions RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -42554,7 +42461,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_records description: >- include_records is a flag for whether to include the records of @@ -42562,7 +42468,6 @@ paths: in: query required: false type: boolean - format: boolean - name: exclude_id_info description: >- exclude_id_info is a flag for whether to exclude the id info from @@ -42570,7 +42475,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_request description: >- include_request is a flag for whether to include this request in @@ -42578,7 +42482,6 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query /provenance/metadata/v1/records/all: @@ -42870,13 +42773,11 @@ paths: properties: exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -42919,7 +42820,6 @@ paths: each app. count_total: type: boolean - format: boolean description: >- count_total is set to true to indicate that the result set should include @@ -42933,7 +42833,6 @@ paths: is set. reverse: type: boolean - format: boolean description: >- reverse is set to true if results are to be returned in the descending order. @@ -42970,7 +42869,7 @@ paths: RecordsAllResponse is the response type for the Query/RecordsAll RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -42999,7 +42898,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_request description: >- include_request is a flag for whether to include this request in @@ -43007,7 +42905,6 @@ paths: in: query required: false type: boolean - format: boolean - name: pagination.key description: |- key is a value returned in PageResponse.next_key to begin @@ -43054,7 +42951,6 @@ 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 @@ -43065,10 +42961,9 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - '/provenance/metadata/v1/recordspec/{specification_id}': + /provenance/metadata/v1/recordspec/{specification_id}: get: summary: RecordSpecification returns a record specification for the given input. operationId: RecordSpecification @@ -43292,13 +43187,11 @@ paths: specification address. exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -43306,7 +43199,7 @@ paths: RecordSpecificationResponse is the response type for the Query/RecordSpecification RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -43361,7 +43254,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_request description: >- include_request is a flag for whether to include this request in @@ -43369,7 +43261,6 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query /provenance/metadata/v1/recordspecs/all: @@ -43576,13 +43467,11 @@ paths: properties: exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -43625,7 +43514,6 @@ paths: each app. count_total: type: boolean - format: boolean description: >- count_total is set to true to indicate that the result set should include @@ -43639,7 +43527,6 @@ paths: is set. reverse: type: boolean - format: boolean description: >- reverse is set to true if results are to be returned in the descending order. @@ -43676,7 +43563,7 @@ paths: RecordSpecificationsAllResponse is the response type for the Query/RecordSpecificationsAll RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -43705,7 +43592,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_request description: >- include_request is a flag for whether to include this request in @@ -43713,7 +43599,6 @@ paths: in: query required: false type: boolean - format: boolean - name: pagination.key description: |- key is a value returned in PageResponse.next_key to begin @@ -43760,7 +43645,6 @@ 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 @@ -43771,10 +43655,9 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - '/provenance/metadata/v1/scope/{scope_id}': + /provenance/metadata/v1/scope/{scope_id}: get: summary: Scope searches for a scope. description: >- @@ -43885,7 +43768,6 @@ paths: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role @@ -43915,7 +43797,6 @@ paths: be changed by the entity indicated once it is set. require_party_rollup: type: boolean - format: boolean description: >- Whether all parties in this scope and its sessions must be present in this scope's owners field. @@ -44047,7 +43928,6 @@ paths: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role @@ -44525,31 +44405,27 @@ paths: record1q2ge0zaztu65tx5x5llv5xc9ztsw42dq2jdvmdazuwzcaddhh8gmu3mcze3. include_sessions: type: boolean - format: boolean description: >- include_sessions is a flag for whether to include the sessions of the scope in the response. include_records: type: boolean - format: boolean description: >- include_records is a flag for whether to include the records of the scope in the response. exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. description: ScopeResponse is the response type for the Query/Scope RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -44601,7 +44477,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_records description: >- include_records is a flag for whether to include the records of the @@ -44609,7 +44484,6 @@ paths: in: query required: false type: boolean - format: boolean - name: exclude_id_info description: >- exclude_id_info is a flag for whether to exclude the id info from @@ -44617,7 +44491,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_request description: >- include_request is a flag for whether to include this request in @@ -44625,10 +44498,9 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - '/provenance/metadata/v1/scope/{scope_id}/record/{name}': + /provenance/metadata/v1/scope/{scope_id}/record/{name}: get: summary: Records searches for records. description: >- @@ -44749,7 +44621,6 @@ paths: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role @@ -44779,7 +44650,6 @@ paths: be changed by the entity indicated once it is set. require_party_rollup: type: boolean - format: boolean description: >- Whether all parties in this scope and its sessions must be present in this scope's owners field. @@ -44911,7 +44781,6 @@ paths: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role @@ -45395,25 +45264,21 @@ paths: title: name is the name of the record to look for include_scope: type: boolean - format: boolean description: >- include_scope is a flag for whether to include the the scope containing these records in the response. include_sessions: type: boolean - format: boolean description: >- include_sessions is a flag for whether to include the sessions containing these records in the response. exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -45421,7 +45286,7 @@ paths: RecordsResponse is the response type for the Query/Records RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -45484,7 +45349,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_sessions description: >- include_sessions is a flag for whether to include the sessions @@ -45492,7 +45356,6 @@ paths: in: query required: false type: boolean - format: boolean - name: exclude_id_info description: >- exclude_id_info is a flag for whether to exclude the id info from @@ -45500,7 +45363,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_request description: >- include_request is a flag for whether to include this request in @@ -45508,10 +45370,9 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - '/provenance/metadata/v1/scope/{scope_id}/record/{record_name}/session': + /provenance/metadata/v1/scope/{scope_id}/record/{record_name}/session: get: summary: Sessions searches for sessions. description: >- @@ -45647,7 +45508,6 @@ paths: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role @@ -45677,7 +45537,6 @@ paths: be changed by the entity indicated once it is set. require_party_rollup: type: boolean - format: boolean description: >- Whether all parties in this scope and its sessions must be present in this scope's owners field. @@ -45809,7 +45668,6 @@ paths: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role @@ -46295,25 +46153,21 @@ paths: for in the provided scope. include_scope: type: boolean - format: boolean description: >- include_scope is a flag for whether to include the scope containing these sessions in the response. include_records: type: boolean - format: boolean description: >- include_records is a flag for whether to include the records of these sessions in the response. exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -46321,7 +46175,7 @@ paths: SessionsResponse is the response type for the Query/Sessions RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -46386,7 +46240,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_records description: >- include_records is a flag for whether to include the records of @@ -46394,7 +46247,6 @@ paths: in: query required: false type: boolean - format: boolean - name: exclude_id_info description: >- exclude_id_info is a flag for whether to exclude the id info from @@ -46402,7 +46254,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_request description: >- include_request is a flag for whether to include this request in @@ -46410,10 +46261,9 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - '/provenance/metadata/v1/scope/{scope_id}/records': + /provenance/metadata/v1/scope/{scope_id}/records: get: summary: Records searches for records. description: >- @@ -46534,7 +46384,6 @@ paths: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role @@ -46564,7 +46413,6 @@ paths: be changed by the entity indicated once it is set. require_party_rollup: type: boolean - format: boolean description: >- Whether all parties in this scope and its sessions must be present in this scope's owners field. @@ -46696,7 +46544,6 @@ paths: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role @@ -47180,25 +47027,21 @@ paths: title: name is the name of the record to look for include_scope: type: boolean - format: boolean description: >- include_scope is a flag for whether to include the the scope containing these records in the response. include_sessions: type: boolean - format: boolean description: >- include_sessions is a flag for whether to include the sessions containing these records in the response. exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -47206,7 +47049,7 @@ paths: RecordsResponse is the response type for the Query/Records RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -47269,7 +47112,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_sessions description: >- include_sessions is a flag for whether to include the sessions @@ -47277,7 +47119,6 @@ paths: in: query required: false type: boolean - format: boolean - name: exclude_id_info description: >- exclude_id_info is a flag for whether to exclude the id info from @@ -47285,7 +47126,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_request description: >- include_request is a flag for whether to include this request in @@ -47293,10 +47133,9 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - '/provenance/metadata/v1/scope/{scope_id}/session/{session_id}': + /provenance/metadata/v1/scope/{scope_id}/session/{session_id}: get: summary: Sessions searches for sessions. description: >- @@ -47432,7 +47271,6 @@ paths: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role @@ -47462,7 +47300,6 @@ paths: be changed by the entity indicated once it is set. require_party_rollup: type: boolean - format: boolean description: >- Whether all parties in this scope and its sessions must be present in this scope's owners field. @@ -47594,7 +47431,6 @@ paths: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role @@ -48080,25 +47916,21 @@ paths: for in the provided scope. include_scope: type: boolean - format: boolean description: >- include_scope is a flag for whether to include the scope containing these sessions in the response. include_records: type: boolean - format: boolean description: >- include_records is a flag for whether to include the records of these sessions in the response. exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -48106,7 +47938,7 @@ paths: SessionsResponse is the response type for the Query/Sessions RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -48171,7 +48003,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_records description: >- include_records is a flag for whether to include the records of @@ -48179,7 +48010,6 @@ paths: in: query required: false type: boolean - format: boolean - name: exclude_id_info description: >- exclude_id_info is a flag for whether to exclude the id info from @@ -48187,7 +48017,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_request description: >- include_request is a flag for whether to include this request in @@ -48195,10 +48024,9 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - '/provenance/metadata/v1/scope/{scope_id}/session/{session_id}/record/{name}': + /provenance/metadata/v1/scope/{scope_id}/session/{session_id}/record/{name}: get: summary: Records searches for records. description: >- @@ -48319,7 +48147,6 @@ paths: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role @@ -48349,7 +48176,6 @@ paths: be changed by the entity indicated once it is set. require_party_rollup: type: boolean - format: boolean description: >- Whether all parties in this scope and its sessions must be present in this scope's owners field. @@ -48481,7 +48307,6 @@ paths: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role @@ -48965,25 +48790,21 @@ paths: title: name is the name of the record to look for include_scope: type: boolean - format: boolean description: >- include_scope is a flag for whether to include the the scope containing these records in the response. include_sessions: type: boolean - format: boolean description: >- include_sessions is a flag for whether to include the sessions containing these records in the response. exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -48991,7 +48812,7 @@ paths: RecordsResponse is the response type for the Query/Records RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -49054,7 +48875,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_sessions description: >- include_sessions is a flag for whether to include the sessions @@ -49062,7 +48882,6 @@ paths: in: query required: false type: boolean - format: boolean - name: exclude_id_info description: >- exclude_id_info is a flag for whether to exclude the id info from @@ -49070,7 +48889,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_request description: >- include_request is a flag for whether to include this request in @@ -49078,10 +48896,9 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - '/provenance/metadata/v1/scope/{scope_id}/session/{session_id}/records': + /provenance/metadata/v1/scope/{scope_id}/session/{session_id}/records: get: summary: Records searches for records. description: >- @@ -49202,7 +49019,6 @@ paths: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role @@ -49232,7 +49048,6 @@ paths: be changed by the entity indicated once it is set. require_party_rollup: type: boolean - format: boolean description: >- Whether all parties in this scope and its sessions must be present in this scope's owners field. @@ -49364,7 +49179,6 @@ paths: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role @@ -49848,25 +49662,21 @@ paths: title: name is the name of the record to look for include_scope: type: boolean - format: boolean description: >- include_scope is a flag for whether to include the the scope containing these records in the response. include_sessions: type: boolean - format: boolean description: >- include_sessions is a flag for whether to include the sessions containing these records in the response. exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -49874,7 +49684,7 @@ paths: RecordsResponse is the response type for the Query/Records RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -49937,7 +49747,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_sessions description: >- include_sessions is a flag for whether to include the sessions @@ -49945,7 +49754,6 @@ paths: in: query required: false type: boolean - format: boolean - name: exclude_id_info description: >- exclude_id_info is a flag for whether to exclude the id info from @@ -49953,7 +49761,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_request description: >- include_request is a flag for whether to include this request in @@ -49961,10 +49768,9 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - '/provenance/metadata/v1/scope/{scope_id}/sessions': + /provenance/metadata/v1/scope/{scope_id}/sessions: get: summary: Sessions searches for sessions. description: >- @@ -50100,7 +49906,6 @@ paths: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role @@ -50130,7 +49935,6 @@ paths: be changed by the entity indicated once it is set. require_party_rollup: type: boolean - format: boolean description: >- Whether all parties in this scope and its sessions must be present in this scope's owners field. @@ -50262,7 +50066,6 @@ paths: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role @@ -50748,25 +50551,21 @@ paths: for in the provided scope. include_scope: type: boolean - format: boolean description: >- include_scope is a flag for whether to include the scope containing these sessions in the response. include_records: type: boolean - format: boolean description: >- include_records is a flag for whether to include the records of these sessions in the response. exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -50774,7 +50573,7 @@ paths: SessionsResponse is the response type for the Query/Sessions RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -50839,7 +50638,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_records description: >- include_records is a flag for whether to include the records of @@ -50847,7 +50645,6 @@ paths: in: query required: false type: boolean - format: boolean - name: exclude_id_info description: >- exclude_id_info is a flag for whether to exclude the id info from @@ -50855,7 +50652,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_request description: >- include_request is a flag for whether to include this request in @@ -50863,7 +50659,6 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query /provenance/metadata/v1/scopes/all: @@ -50939,7 +50734,6 @@ paths: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role @@ -50970,7 +50764,6 @@ paths: set. require_party_rollup: type: boolean - format: boolean description: >- Whether all parties in this scope and its sessions must be present in this scope's owners field. @@ -51054,13 +50847,11 @@ paths: properties: exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -51103,7 +50894,6 @@ paths: each app. count_total: type: boolean - format: boolean description: >- count_total is set to true to indicate that the result set should include @@ -51117,7 +50907,6 @@ paths: is set. reverse: type: boolean - format: boolean description: >- reverse is set to true if results are to be returned in the descending order. @@ -51154,7 +50943,7 @@ paths: ScopesAllResponse is the response type for the Query/ScopesAll RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -51183,7 +50972,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_request description: >- include_request is a flag for whether to include this request in @@ -51191,7 +50979,6 @@ paths: in: query required: false type: boolean - format: boolean - name: pagination.key description: |- key is a value returned in PageResponse.next_key to begin @@ -51238,7 +51025,6 @@ 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 @@ -51249,10 +51035,9 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - '/provenance/metadata/v1/scopespec/{specification_id}': + /provenance/metadata/v1/scopespec/{specification_id}: get: summary: >- ScopeSpecification returns a scope specification for the given @@ -51730,7 +51515,6 @@ paths: scopespec1qnwg86nsatx5pl56muw0v9ytlz3qu3jx6m. include_contract_specs: type: boolean - format: boolean description: >- include_contract_specs is a flag for whether to include the contract specifications of the scope specification in @@ -51738,7 +51522,6 @@ paths: the response. include_record_specs: type: boolean - format: boolean description: >- include_record_specs is a flag for whether to include the record specifications of the scope specification in the @@ -51746,13 +51529,11 @@ paths: response. exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -51760,7 +51541,7 @@ paths: ScopeSpecificationResponse is the response type for the Query/ScopeSpecification RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -51800,7 +51581,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_record_specs description: >- include_record_specs is a flag for whether to include the record @@ -51810,7 +51590,6 @@ paths: in: query required: false type: boolean - format: boolean - name: exclude_id_info description: >- exclude_id_info is a flag for whether to exclude the id info from @@ -51818,7 +51597,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_request description: >- include_request is a flag for whether to include this request in @@ -51826,7 +51604,6 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query /provenance/metadata/v1/scopespecs/all: @@ -51967,13 +51744,11 @@ paths: properties: exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -52016,7 +51791,6 @@ paths: each app. count_total: type: boolean - format: boolean description: >- count_total is set to true to indicate that the result set should include @@ -52030,7 +51804,6 @@ paths: is set. reverse: type: boolean - format: boolean description: >- reverse is set to true if results are to be returned in the descending order. @@ -52067,7 +51840,7 @@ paths: ScopeSpecificationsAllResponse is the response type for the Query/ScopeSpecificationsAll RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -52096,7 +51869,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_request description: >- include_request is a flag for whether to include this request in @@ -52104,7 +51876,6 @@ paths: in: query required: false type: boolean - format: boolean - name: pagination.key description: |- key is a value returned in PageResponse.next_key to begin @@ -52151,7 +51922,6 @@ 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 @@ -52162,10 +51932,9 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - '/provenance/metadata/v1/session/{session_addr}/scope': + /provenance/metadata/v1/session/{session_addr}/scope: get: summary: Scope searches for a scope. description: >- @@ -52276,7 +52045,6 @@ paths: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role @@ -52306,7 +52074,6 @@ paths: be changed by the entity indicated once it is set. require_party_rollup: type: boolean - format: boolean description: >- Whether all parties in this scope and its sessions must be present in this scope's owners field. @@ -52438,7 +52205,6 @@ paths: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role @@ -52916,31 +52682,27 @@ paths: record1q2ge0zaztu65tx5x5llv5xc9ztsw42dq2jdvmdazuwzcaddhh8gmu3mcze3. include_sessions: type: boolean - format: boolean description: >- include_sessions is a flag for whether to include the sessions of the scope in the response. include_records: type: boolean - format: boolean description: >- include_records is a flag for whether to include the records of the scope in the response. exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. description: ScopeResponse is the response type for the Query/Scope RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -52992,7 +52754,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_records description: >- include_records is a flag for whether to include the records of the @@ -53000,7 +52761,6 @@ paths: in: query required: false type: boolean - format: boolean - name: exclude_id_info description: >- exclude_id_info is a flag for whether to exclude the id info from @@ -53008,7 +52768,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_request description: >- include_request is a flag for whether to include this request in @@ -53016,10 +52775,9 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - '/provenance/metadata/v1/session/{session_id}': + /provenance/metadata/v1/session/{session_id}: get: summary: Sessions searches for sessions. description: >- @@ -53155,7 +52913,6 @@ paths: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role @@ -53185,7 +52942,6 @@ paths: be changed by the entity indicated once it is set. require_party_rollup: type: boolean - format: boolean description: >- Whether all parties in this scope and its sessions must be present in this scope's owners field. @@ -53317,7 +53073,6 @@ paths: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role @@ -53803,25 +53558,21 @@ paths: for in the provided scope. include_scope: type: boolean - format: boolean description: >- include_scope is a flag for whether to include the scope containing these sessions in the response. include_records: type: boolean - format: boolean description: >- include_records is a flag for whether to include the records of these sessions in the response. exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -53829,7 +53580,7 @@ paths: SessionsResponse is the response type for the Query/Sessions RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -53894,7 +53645,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_records description: >- include_records is a flag for whether to include the records of @@ -53902,7 +53652,6 @@ paths: in: query required: false type: boolean - format: boolean - name: exclude_id_info description: >- exclude_id_info is a flag for whether to exclude the id info from @@ -53910,7 +53659,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_request description: >- include_request is a flag for whether to include this request in @@ -53918,10 +53666,9 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - '/provenance/metadata/v1/session/{session_id}/record/{name}': + /provenance/metadata/v1/session/{session_id}/record/{name}: get: summary: Records searches for records. description: >- @@ -54042,7 +53789,6 @@ paths: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role @@ -54072,7 +53818,6 @@ paths: be changed by the entity indicated once it is set. require_party_rollup: type: boolean - format: boolean description: >- Whether all parties in this scope and its sessions must be present in this scope's owners field. @@ -54204,7 +53949,6 @@ paths: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role @@ -54688,25 +54432,21 @@ paths: title: name is the name of the record to look for include_scope: type: boolean - format: boolean description: >- include_scope is a flag for whether to include the the scope containing these records in the response. include_sessions: type: boolean - format: boolean description: >- include_sessions is a flag for whether to include the sessions containing these records in the response. exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -54714,7 +54454,7 @@ paths: RecordsResponse is the response type for the Query/Records RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -54777,7 +54517,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_sessions description: >- include_sessions is a flag for whether to include the sessions @@ -54785,7 +54524,6 @@ paths: in: query required: false type: boolean - format: boolean - name: exclude_id_info description: >- exclude_id_info is a flag for whether to exclude the id info from @@ -54793,7 +54531,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_request description: >- include_request is a flag for whether to include this request in @@ -54801,10 +54538,9 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - '/provenance/metadata/v1/session/{session_id}/records': + /provenance/metadata/v1/session/{session_id}/records: get: summary: Records searches for records. description: >- @@ -54925,7 +54661,6 @@ paths: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role @@ -54955,7 +54690,6 @@ paths: be changed by the entity indicated once it is set. require_party_rollup: type: boolean - format: boolean description: >- Whether all parties in this scope and its sessions must be present in this scope's owners field. @@ -55087,7 +54821,6 @@ paths: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role @@ -55571,25 +55304,21 @@ paths: title: name is the name of the record to look for include_scope: type: boolean - format: boolean description: >- include_scope is a flag for whether to include the the scope containing these records in the response. include_sessions: type: boolean - format: boolean description: >- include_sessions is a flag for whether to include the sessions containing these records in the response. exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -55597,7 +55326,7 @@ paths: RecordsResponse is the response type for the Query/Records RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -55660,7 +55389,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_sessions description: >- include_sessions is a flag for whether to include the sessions @@ -55668,7 +55396,6 @@ paths: in: query required: false type: boolean - format: boolean - name: exclude_id_info description: >- exclude_id_info is a flag for whether to exclude the id info from @@ -55676,7 +55403,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_request description: >- include_request is a flag for whether to include this request in @@ -55684,7 +55410,6 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query /provenance/metadata/v1/sessions/all: @@ -55755,7 +55480,6 @@ paths: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role @@ -55937,13 +55661,11 @@ paths: properties: exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -55986,7 +55708,6 @@ paths: each app. count_total: type: boolean - format: boolean description: >- count_total is set to true to indicate that the result set should include @@ -56000,7 +55721,6 @@ paths: is set. reverse: type: boolean - format: boolean description: >- reverse is set to true if results are to be returned in the descending order. @@ -56037,7 +55757,7 @@ paths: SessionsAllResponse is the response type for the Query/SessionsAll RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -56066,7 +55786,6 @@ paths: in: query required: false type: boolean - format: boolean - name: include_request description: >- include_request is a flag for whether to include this request in @@ -56074,7 +55793,6 @@ paths: in: query required: false type: boolean - format: boolean - name: pagination.key description: |- key is a value returned in PageResponse.next_key to begin @@ -56121,7 +55839,6 @@ 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 @@ -56132,10 +55849,9 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - '/provenance/metadata/v1/valueownership/{address}': + /provenance/metadata/v1/valueownership/{address}: get: summary: >- ValueOwnership returns the scope identifiers that list the given address @@ -56160,7 +55876,6 @@ paths: type: string include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -56203,7 +55918,6 @@ paths: each app. count_total: type: boolean - format: boolean description: >- count_total is set to true to indicate that the result set should include @@ -56217,7 +55931,6 @@ paths: is set. reverse: type: boolean - format: boolean description: >- reverse is set to true if results are to be returned in the descending order. @@ -56254,7 +55967,7 @@ paths: ValueOwnershipResponse is the response type for the Query/ValueOwnership RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -56287,7 +56000,6 @@ paths: in: query required: false type: boolean - format: boolean - name: pagination.key description: |- key is a value returned in PageResponse.next_key to begin @@ -56334,7 +56046,6 @@ 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 @@ -56345,10 +56056,9 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - '/provenance/name/v1/lookup/{address}': + /provenance/name/v1/lookup/{address}: get: summary: ReverseLookup queries for all names bound against a given address operationId: ReverseLookup @@ -56386,7 +56096,7 @@ paths: QueryReverseLookupResponse is the response type for the Query/Resolve method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -56459,7 +56169,6 @@ 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 @@ -56470,7 +56179,6 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query /provenance/name/v1/params: @@ -56503,13 +56211,12 @@ paths: `foo.bar.baz` would be 3 allow_unrestricted_names: type: boolean - format: boolean title: determines if unrestricted name keys are allowed or not 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: @@ -56532,7 +56239,7 @@ paths: format: byte tags: - Query - '/provenance/name/v1/resolve/{name}': + /provenance/name/v1/resolve/{name}: get: summary: Resolve queries for the address associated with a given name operationId: Resolve @@ -56547,13 +56254,12 @@ paths: title: a string containing the address the name resolves to restricted: type: boolean - format: boolean description: Whether owner signature is required to add sub-names. description: >- QueryResolveResponse is the response type for the Query/Resolve method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -56657,7 +56363,7 @@ paths: was set, its value is undefined otherwise title: response for querying all msg's with fees associated with them default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -56725,7 +56431,6 @@ 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 @@ -56736,7 +56441,6 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query /provenance/msgfees/v1/params: @@ -56782,7 +56486,7 @@ paths: 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: @@ -56868,7 +56572,7 @@ paths: CalculateTxFeesResponse is the response type for the Query RPC method. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -56969,7 +56673,6 @@ paths: period. claim_period_ended: type: boolean - format: boolean description: >- A flag representing if the claim period for this reward has ended. @@ -57000,7 +56703,7 @@ paths: QueryClaimPeriodRewardDistributionsResponse returns the list of paginated ClaimPeriodRewardDistributions default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -57068,7 +56771,6 @@ 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 @@ -57079,10 +56781,9 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - '/provenance/rewards/v1/claim_period_reward_distributions/{reward_id}/claim_periods/{claim_period_id}': + /provenance/rewards/v1/claim_period_reward_distributions/{reward_id}/claim_periods/{claim_period_id}: get: summary: >- ClaimPeriodRewardDistributionsByID returns a claim period reward @@ -57127,7 +56828,6 @@ paths: description: The total number of granted shares for this claim period. claim_period_ended: type: boolean - format: boolean description: >- A flag representing if the claim period for this reward has ended. @@ -57138,7 +56838,7 @@ paths: QueryClaimPeriodRewardDistributionsByIDResponse returns the requested ClaimPeriodRewardDistribution default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -57178,7 +56878,7 @@ paths: format: uint64 tags: - Query - '/provenance/rewards/v1/reward_claims/{address}': + /provenance/rewards/v1/reward_claims/{address}: get: summary: >- RewardDistributionsByAddress returns a list of reward claims belonging @@ -57256,7 +56956,7 @@ paths: QueryRewardDistributionsByAddressResponse returns the reward claims for an address that match the claim_status. default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -57348,7 +57048,6 @@ 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 @@ -57359,7 +57058,6 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query /provenance/rewards/v1/reward_programs: @@ -57647,7 +57345,7 @@ paths: QueryRewardProgramsResponse contains the list of RewardPrograms matching the query default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -57736,7 +57434,6 @@ 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 @@ -57747,10 +57444,9 @@ paths: in: query required: false type: boolean - format: boolean tags: - Query - '/provenance/rewards/v1/reward_programs/{id}': + /provenance/rewards/v1/reward_programs/{id}: get: summary: RewardProgramByID returns a reward program matching the ID. operationId: RewardProgramByID @@ -58011,7 +57707,7 @@ paths: QueryRewardProgramByIDResponse contains the requested RewardProgram default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -58858,7 +58554,6 @@ definitions: key is set. - format: boolean reverse: type: boolean description: >- @@ -58867,7 +58562,6 @@ definitions: Since: cosmos-sdk 0.43 - format: boolean description: |- message SomeRequest { Foo some_parameter = 1; @@ -69774,7 +69468,7 @@ definitions: properties: rate: type: string - description: 'rate is the commission rate charged to delegators, as a fraction.' + description: rate is the commission rate charged to delegators, as a fraction. max_rate: type: string description: >- @@ -69795,7 +69489,7 @@ definitions: properties: rate: type: string - description: 'rate is the commission rate charged to delegators, as a fraction.' + description: rate is the commission rate charged to delegators, as a fraction. max_rate: type: string description: >- @@ -73385,7 +73079,7 @@ definitions: description: Response code. data: type: string - description: 'Result bytes, if any.' + description: Result bytes, if any. raw_log: type: string description: |- @@ -73913,7 +73607,7 @@ definitions: description: Response code. data: type: string - description: 'Result bytes, if any.' + description: Result bytes, if any. raw_log: type: string description: |- @@ -74862,7 +74556,7 @@ definitions: description: Response code. data: type: string - description: 'Result bytes, if any.' + description: Result bytes, if any. raw_log: type: string description: |- @@ -75181,7 +74875,7 @@ definitions: description: Response code. data: type: string - description: 'Result bytes, if any.' + description: Result bytes, if any. raw_log: type: string description: |- @@ -77329,7 +77023,7 @@ definitions: format: byte index: type: boolean - description: 'EventAttribute is a single key-value pair, associated with an event.' + description: EventAttribute is a single key-value pair, associated with an event. description: >- Event allows application developers to attach additional information to @@ -77348,7 +77042,7 @@ definitions: format: byte index: type: boolean - description: 'EventAttribute is a single key-value pair, associated with an event.' + description: EventAttribute is a single key-value pair, associated with an event. cosmos.upgrade.v1beta1.ModuleVersion: type: object properties: @@ -78853,7 +78547,7 @@ definitions: grantee is the address of the user being granted an allowance of another user's funds. allowance: - description: 'allowance can be any of basic, periodic, allowed fee allowance.' + description: allowance can be any of basic, periodic, allowed fee allowance. type: object properties: type_url: @@ -78933,7 +78627,7 @@ definitions: grantee is the address of the user being granted an allowance of another user's funds. allowance: - description: 'allowance can be any of basic, periodic, allowed fee allowance.' + description: allowance can be any of basic, periodic, allowed fee allowance. type: object properties: type_url: @@ -79020,7 +78714,7 @@ definitions: grantee is the address of the user being granted an allowance of another user's funds. allowance: - description: 'allowance can be any of basic, periodic, allowed fee allowance.' + description: allowance can be any of basic, periodic, allowed fee allowance. type: object properties: type_url: @@ -79132,7 +78826,7 @@ definitions: grantee is the address of the user being granted an allowance of another user's funds. allowance: - description: 'allowance can be any of basic, periodic, allowed fee allowance.' + description: allowance can be any of basic, periodic, allowed fee allowance. type: object properties: type_url: @@ -83329,7 +83023,6 @@ definitions: supply to allow a marker to be created with enable_governance: type: boolean - format: boolean description: indicates if governance based controls of markers is allowed. unrestricted_denom_regex: type: string @@ -83965,7 +83658,6 @@ definitions: supply to allow a marker to be created with enable_governance: type: boolean - format: boolean description: indicates if governance based controls of markers is allowed. unrestricted_denom_regex: type: string @@ -84339,7 +84031,6 @@ definitions: recspec1qh00d0q2e8w5say53afqdesxp2zw42dq2jdvmdazuwzcaddhh8gmuqhez44. include_record_specs: type: boolean - format: boolean description: >- include_record_specs is a flag for whether to include the the record specifications of this contract specification @@ -84347,13 +84038,11 @@ definitions: in the response. exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -84685,7 +84374,6 @@ definitions: recspec1qh00d0q2e8w5say53afqdesxp2zw42dq2jdvmdazuwzcaddhh8gmuqhez44. include_record_specs: type: boolean - format: boolean description: >- include_record_specs is a flag for whether to include the the record specifications of this contract specification @@ -84693,13 +84381,11 @@ definitions: in the response. exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -84830,13 +84516,11 @@ definitions: properties: exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -84872,7 +84556,6 @@ definitions: 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 @@ -84886,7 +84569,6 @@ definitions: is set. reverse: type: boolean - format: boolean description: >- reverse is set to true if results are to be returned in the descending order. @@ -85034,13 +84716,11 @@ definitions: properties: exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -85080,7 +84760,6 @@ definitions: app. count_total: type: boolean - format: boolean description: >- count_total is set to true to indicate that the result set should include @@ -85094,7 +84773,6 @@ definitions: is set. reverse: type: boolean - format: boolean description: >- reverse is set to true if results are to be returned in the descending order. @@ -85223,7 +84901,6 @@ definitions: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role associated with a @@ -85251,7 +84928,6 @@ definitions: changed by the entity indicated once it is set. require_party_rollup: type: boolean - format: boolean description: >- Whether all parties in this scope and its sessions must be present in this scope's owners field. @@ -85317,7 +84993,6 @@ definitions: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role associated with a @@ -85801,7 +85476,6 @@ definitions: properties: include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -85837,7 +85511,6 @@ definitions: 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 @@ -85851,7 +85524,6 @@ definitions: is set. reverse: type: boolean - format: boolean description: >- reverse is set to true if results are to be returned in the descending order. @@ -85892,7 +85564,6 @@ definitions: properties: include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -85932,7 +85603,6 @@ definitions: app. count_total: type: boolean - format: boolean description: >- count_total is set to true to indicate that the result set should include @@ -85946,7 +85616,6 @@ definitions: is set. reverse: type: boolean - format: boolean description: >- reverse is set to true if results are to be returned in the descending order. @@ -85992,7 +85661,6 @@ definitions: properties: include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -86015,7 +85683,6 @@ definitions: properties: include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -86029,7 +85696,6 @@ definitions: type: string include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -86062,7 +85728,6 @@ definitions: type: string include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -86074,7 +85739,6 @@ definitions: type: string include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -86111,7 +85775,6 @@ definitions: type: string include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -86125,7 +85788,6 @@ definitions: type: string include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -86161,7 +85823,6 @@ definitions: 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 @@ -86175,7 +85836,6 @@ definitions: is set. reverse: type: boolean - format: boolean description: >- reverse is set to true if results are to be returned in the descending order. @@ -86218,7 +85878,6 @@ definitions: type: string include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -86258,7 +85917,6 @@ definitions: app. count_total: type: boolean - format: boolean description: >- count_total is set to true to indicate that the result set should include @@ -86272,7 +85930,6 @@ definitions: is set. reverse: type: boolean - format: boolean description: >- reverse is set to true if results are to be returned in the descending order. @@ -86330,7 +85987,6 @@ definitions: type: string include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -86366,7 +86022,6 @@ definitions: 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 @@ -86380,7 +86035,6 @@ definitions: is set. reverse: type: boolean - format: boolean description: >- reverse is set to true if results are to be returned in the descending order. @@ -86407,7 +86061,6 @@ definitions: type: string include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -86447,7 +86100,6 @@ definitions: app. count_total: type: boolean - format: boolean description: >- count_total is set to true to indicate that the result set should include @@ -86461,7 +86113,6 @@ definitions: is set. reverse: type: boolean - format: boolean description: >- reverse is set to true if results are to be returned in the descending order. @@ -86532,7 +86183,6 @@ definitions: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: A Party is an address with/in a given role associated with a contract provenance.metadata.v1.PartyType: @@ -86590,7 +86240,6 @@ definitions: properties: include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -86607,7 +86256,6 @@ definitions: properties: include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -87028,13 +86676,11 @@ definitions: address. exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -87250,13 +86896,11 @@ definitions: address. exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -87440,13 +87084,11 @@ definitions: properties: exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -87482,7 +87124,6 @@ definitions: 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 @@ -87496,7 +87137,6 @@ definitions: is set. reverse: type: boolean - format: boolean description: >- reverse is set to true if results are to be returned in the descending order. @@ -87699,13 +87339,11 @@ definitions: properties: exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -87745,7 +87383,6 @@ definitions: app. count_total: type: boolean - format: boolean description: >- count_total is set to true to indicate that the result set should include @@ -87759,7 +87396,6 @@ definitions: is set. reverse: type: boolean - format: boolean description: >- reverse is set to true if results are to be returned in the descending order. @@ -87810,13 +87446,11 @@ definitions: recspec1qh00d0q2e8w5say53afqdesxp2zw42dq2jdvmdazuwzcaddhh8gmuqhez44. exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -88039,13 +87673,11 @@ definitions: recspec1qh00d0q2e8w5say53afqdesxp2zw42dq2jdvmdazuwzcaddhh8gmuqhez44. exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -88296,13 +87928,11 @@ definitions: properties: exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -88338,7 +87968,6 @@ definitions: 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 @@ -88352,7 +87981,6 @@ definitions: is set. reverse: type: boolean - format: boolean description: >- reverse is set to true if results are to be returned in the descending order. @@ -88630,13 +88258,11 @@ definitions: properties: exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -88676,7 +88302,6 @@ definitions: app. count_total: type: boolean - format: boolean description: >- count_total is set to true to indicate that the result set should include @@ -88690,7 +88315,6 @@ definitions: is set. reverse: type: boolean - format: boolean description: >- reverse is set to true if results are to be returned in the descending order. @@ -88754,25 +88378,21 @@ definitions: title: name is the name of the record to look for include_scope: type: boolean - format: boolean description: >- include_scope is a flag for whether to include the the scope containing these records in the response. include_sessions: type: boolean - format: boolean description: >- include_sessions is a flag for whether to include the sessions containing these records in the response. exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -88840,7 +88460,6 @@ definitions: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role associated with a @@ -88868,7 +88487,6 @@ definitions: changed by the entity indicated once it is set. require_party_rollup: type: boolean - format: boolean description: >- Whether all parties in this scope and its sessions must be present in this scope's owners field. @@ -88994,7 +88612,6 @@ definitions: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role associated with @@ -89448,25 +89065,21 @@ definitions: title: name is the name of the record to look for include_scope: type: boolean - format: boolean description: >- include_scope is a flag for whether to include the the scope containing these records in the response. include_sessions: type: boolean - format: boolean description: >- include_sessions is a flag for whether to include the sessions containing these records in the response. exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -89540,7 +89153,6 @@ definitions: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role associated with a @@ -89568,7 +89180,6 @@ definitions: the entity indicated once it is set. require_party_rollup: type: boolean - format: boolean description: >- Whether all parties in this scope and its sessions must be present in this scope's owners field. @@ -89622,25 +89233,21 @@ definitions: record1q2ge0zaztu65tx5x5llv5xc9ztsw42dq2jdvmdazuwzcaddhh8gmu3mcze3. include_sessions: type: boolean - format: boolean description: >- include_sessions is a flag for whether to include the sessions of the scope in the response. include_records: type: boolean - format: boolean description: >- include_records is a flag for whether to include the records of the scope in the response. exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -89708,7 +89315,6 @@ definitions: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role associated with a @@ -89736,7 +89342,6 @@ definitions: changed by the entity indicated once it is set. require_party_rollup: type: boolean - format: boolean description: >- Whether all parties in this scope and its sessions must be present in this scope's owners field. @@ -89862,7 +89467,6 @@ definitions: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role associated with @@ -90308,25 +89912,21 @@ definitions: record1q2ge0zaztu65tx5x5llv5xc9ztsw42dq2jdvmdazuwzcaddhh8gmu3mcze3. include_sessions: type: boolean - format: boolean description: >- include_sessions is a flag for whether to include the sessions of the scope in the response. include_records: type: boolean - format: boolean description: >- include_records is a flag for whether to include the records of the scope in the response. exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -90442,7 +90042,6 @@ definitions: address, e.g. scopespec1qnwg86nsatx5pl56muw0v9ytlz3qu3jx6m. include_contract_specs: type: boolean - format: boolean description: >- include_contract_specs is a flag for whether to include the contract specifications of the scope specification in @@ -90450,7 +90049,6 @@ definitions: the response. include_record_specs: type: boolean - format: boolean description: >- include_record_specs is a flag for whether to include the record specifications of the scope specification in the @@ -90458,13 +90056,11 @@ definitions: response. exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -90913,7 +90509,6 @@ definitions: address, e.g. scopespec1qnwg86nsatx5pl56muw0v9ytlz3qu3jx6m. include_contract_specs: type: boolean - format: boolean description: >- include_contract_specs is a flag for whether to include the contract specifications of the scope specification in @@ -90921,7 +90516,6 @@ definitions: the response. include_record_specs: type: boolean - format: boolean description: >- include_record_specs is a flag for whether to include the record specifications of the scope specification in the @@ -90929,13 +90523,11 @@ definitions: response. exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -91055,13 +90647,11 @@ definitions: properties: exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -91097,7 +90687,6 @@ definitions: 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 @@ -91111,7 +90700,6 @@ definitions: is set. reverse: type: boolean - format: boolean description: >- reverse is set to true if results are to be returned in the descending order. @@ -91252,13 +90840,11 @@ definitions: properties: exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -91298,7 +90884,6 @@ definitions: app. count_total: type: boolean - format: boolean description: >- count_total is set to true to indicate that the result set should include @@ -91312,7 +90897,6 @@ definitions: is set. reverse: type: boolean - format: boolean description: >- reverse is set to true if results are to be returned in the descending order. @@ -91405,7 +90989,6 @@ definitions: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role associated with a @@ -91433,7 +91016,6 @@ definitions: by the entity indicated once it is set. require_party_rollup: type: boolean - format: boolean description: >- Whether all parties in this scope and its sessions must be present in this scope's owners field. @@ -91499,13 +91081,11 @@ definitions: properties: exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -91541,7 +91121,6 @@ definitions: 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 @@ -91555,7 +91134,6 @@ definitions: is set. reverse: type: boolean - format: boolean description: >- reverse is set to true if results are to be returned in the descending order. @@ -91630,7 +91208,6 @@ definitions: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role associated with @@ -91658,7 +91235,6 @@ definitions: changed by the entity indicated once it is set. require_party_rollup: type: boolean - format: boolean description: >- Whether all parties in this scope and its sessions must be present in this scope's owners field. @@ -91738,13 +91314,11 @@ definitions: properties: exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -91784,7 +91358,6 @@ definitions: app. count_total: type: boolean - format: boolean description: >- count_total is set to true to indicate that the result set should include @@ -91798,7 +91371,6 @@ definitions: is set. reverse: type: boolean - format: boolean description: >- reverse is set to true if results are to be returned in the descending order. @@ -91881,7 +91453,6 @@ definitions: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role associated with a @@ -91899,7 +91470,7 @@ definitions: context is a field for storing client specific data associated with a session. audit: - description: 'Created by, updated by, timestamps, version number, and related info.' + description: Created by, updated by, timestamps, version number, and related info. type: object properties: created_date: @@ -92041,7 +91612,6 @@ definitions: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role associated with a @@ -92197,13 +91767,11 @@ definitions: properties: exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -92239,7 +91807,6 @@ definitions: 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 @@ -92253,7 +91820,6 @@ definitions: is set. reverse: type: boolean - format: boolean description: >- reverse is set to true if results are to be returned in the descending order. @@ -92327,7 +91893,6 @@ definitions: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role associated with @@ -92494,13 +92059,11 @@ definitions: properties: exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -92540,7 +92103,6 @@ definitions: app. count_total: type: boolean - format: boolean description: >- count_total is set to true to indicate that the result set should include @@ -92554,7 +92116,6 @@ definitions: is set. reverse: type: boolean - format: boolean description: >- reverse is set to true if results are to be returned in the descending order. @@ -92620,25 +92181,21 @@ definitions: provided scope. include_scope: type: boolean - format: boolean description: >- include_scope is a flag for whether to include the scope containing these sessions in the response. include_records: type: boolean - format: boolean description: >- include_records is a flag for whether to include the records of these sessions in the response. exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -92706,7 +92263,6 @@ definitions: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role associated with a @@ -92734,7 +92290,6 @@ definitions: changed by the entity indicated once it is set. require_party_rollup: type: boolean - format: boolean description: >- Whether all parties in this scope and its sessions must be present in this scope's owners field. @@ -92860,7 +92415,6 @@ definitions: - PARTY_TYPE_VALIDATOR: PARTY_TYPE_VALIDATOR is an entity which validates given assets on chain optional: type: boolean - format: boolean title: whether this party's signature is optional title: >- A Party is an address with/in a given role associated with @@ -93316,25 +92870,21 @@ definitions: the provided scope. include_scope: type: boolean - format: boolean description: >- include_scope is a flag for whether to include the scope containing these sessions in the response. include_records: type: boolean - format: boolean description: >- include_records is a flag for whether to include the records of these sessions in the response. exclude_id_info: type: boolean - format: boolean description: >- exclude_id_info is a flag for whether to exclude the id info from the response. include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -93346,7 +92896,6 @@ definitions: type: string include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -93382,7 +92931,6 @@ definitions: 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 @@ -93396,7 +92944,6 @@ definitions: is set. reverse: type: boolean - format: boolean description: >- reverse is set to true if results are to be returned in the descending order. @@ -93425,7 +92972,6 @@ definitions: type: string include_request: type: boolean - format: boolean description: >- include_request is a flag for whether to include this request in your result. @@ -93465,7 +93011,6 @@ definitions: app. count_total: type: boolean - format: boolean description: >- count_total is set to true to indicate that the result set should include @@ -93479,7 +93024,6 @@ definitions: is set. reverse: type: boolean - format: boolean description: >- reverse is set to true if results are to be returned in the descending order. @@ -93992,7 +93536,6 @@ definitions: would be 3 allow_unrestricted_names: type: boolean - format: boolean title: determines if unrestricted name keys are allowed or not description: Params defines the set of params for the name module. provenance.name.v1.QueryParamsResponse: @@ -94018,7 +93561,6 @@ definitions: would be 3 allow_unrestricted_names: type: boolean - format: boolean title: determines if unrestricted name keys are allowed or not description: QueryParamsResponse is the response type for the Query/Params RPC method. provenance.name.v1.QueryResolveResponse: @@ -94029,7 +93571,6 @@ definitions: title: a string containing the address the name resolves to restricted: type: boolean - format: boolean description: Whether owner signature is required to add sub-names. description: QueryResolveResponse is the response type for the Query/Resolve method. provenance.name.v1.QueryReverseLookupResponse: @@ -94085,7 +93626,6 @@ definitions: title: the address the name resolved to restricted: type: boolean - format: boolean title: whether owner signature is required to add sub-names title: >- NameRecord is a structure used to bind ownership of a name hierarchy to a @@ -94796,7 +94336,6 @@ definitions: description: The total number of granted shares for this claim period. claim_period_ended: type: boolean - format: boolean description: A flag representing if the claim period for this reward has ended. description: >- ClaimPeriodRewardDistribution, this is updated at the end of every claim @@ -94837,7 +94376,6 @@ definitions: description: The total number of granted shares for this claim period. claim_period_ended: type: boolean - format: boolean description: A flag representing if the claim period for this reward has ended. description: >- ClaimPeriodRewardDistribution, this is updated at the end of every @@ -94883,7 +94421,6 @@ definitions: description: The total number of granted shares for this claim period. claim_period_ended: type: boolean - format: boolean description: >- A flag representing if the claim period for this reward has ended. diff --git a/contrib/devtools/proto-tools-installer.sh b/contrib/devtools/proto-tools-installer.sh index f5eadc73bf..e4aed26327 100755 --- a/contrib/devtools/proto-tools-installer.sh +++ b/contrib/devtools/proto-tools-installer.sh @@ -86,12 +86,12 @@ f_install_buf() { f_install_protoc_gen_gocosmos() { f_print_installing_with_padding protoc-gen-gocosmos - if ! grep "github.com/gogo/protobuf => github.com/regen-network/protobuf" go.mod &>/dev/null ; then + if ! grep "github.com/cosmos/gogoproto" go.mod &>/dev/null ; then echo -e "\tPlease run this command from somewhere inside the cosmos-sdk folder." return 1 fi - go get github.com/regen-network/cosmos-proto/protoc-gen-gocosmos 2>/dev/null + go get github.com/cosmos/gogoproto/protoc-gen-gocosmos@latest 2>/dev/null f_print_done } diff --git a/go.mod b/go.mod index 23b8bba721..55a1321393 100644 --- a/go.mod +++ b/go.mod @@ -3,30 +3,29 @@ module github.com/provenance-io/provenance go 1.21 require ( - cosmossdk.io/errors v1.0.0 - cosmossdk.io/log v1.2.1 + cosmossdk.io/errors v1.0.1 + cosmossdk.io/log v1.3.1 cosmossdk.io/math v1.2.0 cosmossdk.io/simapp v0.0.0-20231107193120-9814f684b9dd - cosmossdk.io/store v1.0.1 + cosmossdk.io/store v1.0.2 cosmossdk.io/x/evidence v0.1.0 cosmossdk.io/x/feegrant v0.1.0 - cosmossdk.io/x/tx v0.12.0 + cosmossdk.io/x/tx v0.13.0 cosmossdk.io/x/upgrade v0.1.0 github.com/CosmWasm/wasmd v0.50.0 github.com/CosmWasm/wasmvm v1.5.0 - github.com/cometbft/cometbft v0.38.2 + github.com/cometbft/cometbft v0.38.5 github.com/cometbft/cometbft-db v0.9.1 github.com/cosmos/cosmos-db v1.0.0 - github.com/cosmos/cosmos-proto v1.0.0-beta.3 - github.com/cosmos/cosmos-sdk v0.50.1 + github.com/cosmos/cosmos-proto v1.0.0-beta.4 + github.com/cosmos/cosmos-sdk v0.50.4 github.com/cosmos/go-bip39 v1.0.0 github.com/cosmos/gogoproto v1.4.11 + github.com/cosmos/ibc-apps/modules/async-icq/v8 v8.0.0 github.com/cosmos/ibc-go/modules/capability v1.0.0 - // github.com/cosmos/ibc-apps/modules/async-icq/v7 v7.1.1 // TODO[1760]: async-icq: Need a v0.50 compatible version. github.com/cosmos/ibc-go/v8 v8.0.0 // github.com/cosmos/rosetta v0.50.2 // TODO[1760]: rosetta github.com/ghodss/yaml v1.0.0 - github.com/gogo/protobuf v1.3.3 github.com/golang/protobuf v1.5.3 github.com/google/uuid v1.4.0 github.com/gorilla/mux v1.8.1 @@ -34,28 +33,29 @@ require ( github.com/hashicorp/go-metrics v0.5.2 github.com/otiai10/copy v1.14.0 github.com/rakyll/statik v0.1.7 - github.com/regen-network/cosmos-proto v0.3.1 - github.com/rs/zerolog v1.31.0 - github.com/spf13/cast v1.5.1 + github.com/rs/zerolog v1.32.0 + github.com/spf13/cast v1.6.0 github.com/spf13/cobra v1.8.0 github.com/spf13/pflag v1.0.5 - github.com/spf13/viper v1.17.0 + github.com/spf13/viper v1.18.2 github.com/stretchr/testify v1.8.4 - golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa + golang.org/x/exp v0.0.0-20240213143201-ec583247a57a golang.org/x/text v0.14.0 - google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 - google.golang.org/grpc v1.60.0 - google.golang.org/protobuf v1.31.0 + google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f + google.golang.org/grpc v1.60.1 + google.golang.org/protobuf v1.32.0 gopkg.in/yaml.v2 v2.4.0 ) +require github.com/regen-network/cosmos-proto v0.3.1 + require ( cloud.google.com/go v0.110.10 // indirect cloud.google.com/go/compute v1.23.3 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect cloud.google.com/go/iam v1.1.5 // indirect - cloud.google.com/go/storage v1.30.1 // indirect - cosmossdk.io/api v0.7.2 // indirect + cloud.google.com/go/storage v1.35.1 // indirect + cosmossdk.io/api v0.7.3 // indirect cosmossdk.io/client/v2 v2.0.0-beta.1 // indirect cosmossdk.io/collections v0.4.0 // indirect cosmossdk.io/core v0.11.0 // indirect @@ -65,6 +65,7 @@ require ( filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.2 // indirect + github.com/DataDog/datadog-go v3.2.0+incompatible // indirect github.com/DataDog/zstd v1.5.5 // indirect github.com/aws/aws-sdk-go v1.44.224 // indirect github.com/beorn7/perks v1.0.1 // indirect @@ -79,12 +80,12 @@ require ( github.com/cockroachdb/apd/v2 v2.0.2 // indirect github.com/cockroachdb/errors v1.11.1 // indirect github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect - github.com/cockroachdb/pebble v0.0.0-20231119032537-b9be64b88e6a // indirect + github.com/cockroachdb/pebble v1.1.0 // indirect github.com/cockroachdb/redact v1.1.5 // indirect github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/gogogateway v1.2.0 // indirect - github.com/cosmos/iavl v1.0.0 // indirect + github.com/cosmos/iavl v1.0.1 // indirect github.com/cosmos/ics23/go v0.10.0 // indirect github.com/cosmos/ledger-cosmos-go v0.13.3 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect @@ -97,17 +98,18 @@ require ( github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect github.com/distribution/reference v0.5.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect - github.com/dvsekhvalnov/jose2go v1.5.0 // indirect - github.com/emicklei/dot v1.6.0 // indirect + github.com/dvsekhvalnov/jose2go v1.6.0 // indirect + github.com/emicklei/dot v1.6.1 // indirect github.com/fatih/color v1.16.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect - github.com/getsentry/sentry-go v0.25.0 // indirect + github.com/getsentry/sentry-go v0.27.0 // indirect github.com/go-kit/kit v0.13.0 // indirect github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.6.0 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/googleapis v1.4.1 // indirect + github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/glog v1.2.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/mock v1.6.0 // indirect @@ -140,17 +142,16 @@ require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect - github.com/klauspost/compress v1.17.4 // indirect + github.com/klauspost/compress v1.17.6 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.7 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect - github.com/linxGnu/grocksdb v1.8.6 // indirect + github.com/linxGnu/grocksdb v1.8.12 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/manifoldco/promptui v0.9.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect github.com/minio/highwayhash v1.0.2 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect @@ -163,19 +164,19 @@ require ( github.com/petermattis/goid v0.0.0-20230904192822-1876fd5063bc // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/prometheus/client_golang v1.17.0 // indirect - github.com/prometheus/client_model v0.5.0 // indirect - github.com/prometheus/common v0.45.0 // indirect + github.com/prometheus/client_golang v1.18.0 // indirect + github.com/prometheus/client_model v0.6.0 // indirect + github.com/prometheus/common v0.47.0 // indirect github.com/prometheus/procfs v0.12.0 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect - github.com/rogpeppe/go-internal v1.11.0 // indirect + github.com/rogpeppe/go-internal v1.12.0 // indirect github.com/rs/cors v1.10.1 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect - github.com/sagikazarmark/locafero v0.3.0 // indirect + github.com/sagikazarmark/locafero v0.4.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect github.com/sourcegraph/conc v0.3.0 // indirect - github.com/spf13/afero v1.10.0 // indirect + github.com/spf13/afero v1.11.0 // indirect github.com/subosito/gotenv v1.6.0 // indirect github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect github.com/tendermint/go-amino v0.16.0 // indirect @@ -186,17 +187,18 @@ require ( go.etcd.io/bbolt v1.3.8 // indirect go.opencensus.io v0.24.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.16.0 // indirect - golang.org/x/net v0.19.0 // indirect - golang.org/x/oauth2 v0.13.0 // indirect + golang.org/x/crypto v0.19.0 // indirect + golang.org/x/net v0.20.0 // indirect + golang.org/x/oauth2 v0.16.0 // indirect golang.org/x/sync v0.5.0 // indirect - golang.org/x/sys v0.15.0 // indirect - golang.org/x/term v0.15.0 // indirect + golang.org/x/sys v0.17.0 // indirect + golang.org/x/term v0.17.0 // indirect + golang.org/x/time v0.5.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/api v0.149.0 // indirect + google.golang.org/api v0.153.0 // indirect google.golang.org/appengine v1.6.8 // indirect - google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 // indirect + google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect gotest.tools/v3 v3.5.1 // indirect @@ -212,7 +214,11 @@ replace ( // TODO[1760]: wasm: Put this CosmWasm/wasmd replace back with an updated version (or delete it). // github.com/CosmWasm/wasmd => github.com/provenance-io/wasmd v0.30.0-pio-5 // TODO[1760]: sdk: Put this replace back with an updated version of the sdk from our fork. - // github.com/cosmos/cosmos-sdk => github.com/provenance-io/cosmos-sdk v0.46.13-pio-2 + github.com/cosmos/cosmos-sdk => github.com/provenance-io/cosmos-sdk v0.50.5-nullpointer0x00-msg-based-fee-support + + // TODO[1760]: Update once async-icq creates tag with our changes https://github.com/cosmos/ibc-apps/pull/168 + github.com/cosmos/ibc-apps/modules/async-icq/v8 => github.com/provenance-io/ibc-apps/modules/async-icq/v8 v8.0.0-prov-1 + // TODO[1760]: ibc: Put this ibc-go replace back with an updated version (or delete it). // github.com/cosmos/ibc-go/v6 => github.com/provenance-io/ibc-go/v6 v6.2.0-pio-1 // dgrijalva/jwt-go is deprecated and doesn't receive security updates. @@ -221,8 +227,7 @@ replace ( // Fix upstream GHSA-h395-qcrw-5vmq and GHSA-3vp4-m3rf-835h vulnerabilities. // TODO Remove it: https://github.com/cosmos/cosmos-sdk/issues/10409 github.com/gin-gonic/gin => github.com/gin-gonic/gin v1.9.1 - // TODO[1760]: proto: Check if we can get rid of this gogo/protobuf replace. - github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 + // replace broken goleveldb github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 github.com/tecbot/gorocksdb => github.com/cosmos/gorocksdb v1.1.1 diff --git a/go.sum b/go.sum index 0ac27853c1..0845e08d13 100644 --- a/go.sum +++ b/go.sum @@ -3,7 +3,6 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= @@ -16,7 +15,6 @@ cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOY cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= @@ -170,12 +168,11 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= -cloud.google.com/go/storage v1.30.1 h1:uOdMxAs8HExqBlnLtnQyP0YkvbiDpdGShGKtx6U/oNM= -cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E= +cloud.google.com/go/storage v1.35.1 h1:B59ahL//eDfx2IIKFBeT5Atm9wnNmj3+8xG/W4WB//w= +cloud.google.com/go/storage v1.35.1/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8= cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= @@ -187,8 +184,8 @@ cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xX cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= -cosmossdk.io/api v0.7.2 h1:BO3i5fvKMKvfaUiMkCznxViuBEfyWA/k6w2eAF6q1C4= -cosmossdk.io/api v0.7.2/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38= +cosmossdk.io/api v0.7.3 h1:V815i8YOwOAQa1rLCsSMjVG5Gnzs02JLq+l7ks8s1jk= +cosmossdk.io/api v0.7.3/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38= cosmossdk.io/client/v2 v2.0.0-beta.1 h1:XkHh1lhrLYIT9zKl7cIOXUXg2hdhtjTPBUfqERNA1/Q= cosmossdk.io/client/v2 v2.0.0-beta.1/go.mod h1:JEUSu9moNZQ4kU3ir1DKD5eU4bllmAexrGWjmb9k8qU= cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s= @@ -197,16 +194,16 @@ cosmossdk.io/core v0.11.0 h1:vtIafqUi+1ZNAE/oxLOQQ7Oek2n4S48SWLG8h/+wdbo= cosmossdk.io/core v0.11.0/go.mod h1:LaTtayWBSoacF5xNzoF8tmLhehqlA9z1SWiPuNC6X1w= cosmossdk.io/depinject v1.0.0-alpha.4 h1:PLNp8ZYAMPTUKyG9IK2hsbciDWqna2z1Wsl98okJopc= cosmossdk.io/depinject v1.0.0-alpha.4/go.mod h1:HeDk7IkR5ckZ3lMGs/o91AVUc7E596vMaOmslGFM3yU= -cosmossdk.io/errors v1.0.0 h1:nxF07lmlBbB8NKQhtJ+sJm6ef5uV1XkvPXG2bUntb04= -cosmossdk.io/errors v1.0.0/go.mod h1:+hJZLuhdDE0pYN8HkOrVNwrIOYvUGnn6+4fjnJs/oV0= -cosmossdk.io/log v1.2.1 h1:Xc1GgTCicniwmMiKwDxUjO4eLhPxoVdI9vtMW8Ti/uk= -cosmossdk.io/log v1.2.1/go.mod h1:GNSCc/6+DhFIj1aLn/j7Id7PaO8DzNylUZoOYBL9+I4= +cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= +cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= +cosmossdk.io/log v1.3.1 h1:UZx8nWIkfbbNEWusZqzAx3ZGvu54TZacWib3EzUYmGI= +cosmossdk.io/log v1.3.1/go.mod h1:2/dIomt8mKdk6vl3OWJcPk2be3pGOS8OQaLUM/3/tCM= cosmossdk.io/math v1.2.0 h1:8gudhTkkD3NxOP2YyyJIYYmt6dQ55ZfJkDOaxXpy7Ig= cosmossdk.io/math v1.2.0/go.mod h1:l2Gnda87F0su8a/7FEKJfFdJrM0JZRXQaohlgJeyQh0= cosmossdk.io/simapp v0.0.0-20231107193120-9814f684b9dd h1:KwV+LjYFc4N+KwUrPtCfKW6m+zIdCI0kz1Zr+RrDW/Y= cosmossdk.io/simapp v0.0.0-20231107193120-9814f684b9dd/go.mod h1:qnOJ7OPtF1kNzces9lnB3vpeMhQu4uQE9i+h0+vb+RA= -cosmossdk.io/store v1.0.1 h1:XBDhCqlL+2MUgE8CHWwndKVJ4beX+TyaPIjB5SV62dM= -cosmossdk.io/store v1.0.1/go.mod h1:EFtENTqVTuWwitGW1VwaBct+yDagk7oG/axBMPH+FXs= +cosmossdk.io/store v1.0.2 h1:lSg5BTvJBHUDwswNNyeh4K/CbqiHER73VU4nDNb8uk0= +cosmossdk.io/store v1.0.2/go.mod h1:EFtENTqVTuWwitGW1VwaBct+yDagk7oG/axBMPH+FXs= cosmossdk.io/x/circuit v0.1.0 h1:IAej8aRYeuOMritczqTlljbUVHq1E85CpBqaCTwYgXs= cosmossdk.io/x/circuit v0.1.0/go.mod h1:YDzblVE8+E+urPYQq5kq5foRY/IzhXovSYXb4nwd39w= cosmossdk.io/x/evidence v0.1.0 h1:J6OEyDl1rbykksdGynzPKG5R/zm6TacwW2fbLTW4nCk= @@ -215,8 +212,8 @@ cosmossdk.io/x/feegrant v0.1.0 h1:c7s3oAq/8/UO0EiN1H5BIjwVntujVTkYs35YPvvrdQk= cosmossdk.io/x/feegrant v0.1.0/go.mod h1:4r+FsViJRpcZif/yhTn+E0E6OFfg4n0Lx+6cCtnZElU= cosmossdk.io/x/nft v0.1.0 h1:VhcsFiEK33ODN27kxKLa0r/CeFd8laBfbDBwYqCyYCM= cosmossdk.io/x/nft v0.1.0/go.mod h1:ec4j4QAO4mJZ+45jeYRnW7awLHby1JZANqe1hNZ4S3g= -cosmossdk.io/x/tx v0.12.0 h1:Ry2btjQdrfrje9qZ3iZeZSmDArjgxUJMMcLMrX4wj5U= -cosmossdk.io/x/tx v0.12.0/go.mod h1:qTth2coAGkwCwOCjqQ8EAQg+9udXNRzcnSbMgGKGEI0= +cosmossdk.io/x/tx v0.13.0 h1:8lzyOh3zONPpZv2uTcUmsv0WTXy6T1/aCVDCqShmpzU= +cosmossdk.io/x/tx v0.13.0/go.mod h1:CpNQtmoqbXa33/DVxWQNx5Dcnbkv2xGUhL7tYQ5wUsY= cosmossdk.io/x/upgrade v0.1.0 h1:z1ZZG4UL9ICTNbJDYZ6jOnF9GdEK9wyoEFi4BUScHXE= cosmossdk.io/x/upgrade v0.1.0/go.mod h1:/6jjNGbiPCNtmA1N+rBtP601sr0g4ZXuj3yC6ClPCGY= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= @@ -232,12 +229,13 @@ github.com/CosmWasm/wasmd v0.50.0 h1:NVaGqCSTRfb9UTDHJwT6nQIWcb6VjlQl88iI+u1+qjE github.com/CosmWasm/wasmd v0.50.0/go.mod h1:UjmShW4l9YxaMytwJZ7IB7MWzHiynSZP3DdWrG0FRtk= github.com/CosmWasm/wasmvm v1.5.0 h1:3hKeT9SfwfLhxTGKH3vXaKFzBz1yuvP8SlfwfQXbQfw= github.com/CosmWasm/wasmvm v1.5.0/go.mod h1:fXB+m2gyh4v9839zlIXdMZGeLAxqUdYdFQqYsTha2hc= +github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dXCilEuNEeAn20fdD4= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/zstd v1.5.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ= github.com/DataDog/zstd v1.5.5/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= -github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= +github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= +github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= @@ -336,15 +334,15 @@ github.com/cockroachdb/errors v1.11.1 h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZ github.com/cockroachdb/errors v1.11.1/go.mod h1:8MUxA3Gi6b25tYlFEBGLf+D8aISL+M4MIpiWMSNRfxw= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= -github.com/cockroachdb/pebble v0.0.0-20231119032537-b9be64b88e6a h1:X736kLTBU9S4kkBma7KBac16E4UBImQmlHLtvPi4VBY= -github.com/cockroachdb/pebble v0.0.0-20231119032537-b9be64b88e6a/go.mod h1:acMRUGd/BK8AUmQNK3spUCCGzFLZU2bSST3NMXSq2Kc= +github.com/cockroachdb/pebble v1.1.0 h1:pcFh8CdCIt2kmEpK0OIatq67Ln9uGDYY3d5XnE0LJG4= +github.com/cockroachdb/pebble v1.1.0/go.mod h1:sEHm5NOXxyiAoKWhoFxT8xMgd/f3RA6qUqQ1BXKrh2E= github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/cometbft/cometbft v0.38.2 h1:io0JCh5EPxINKN5ZMI5hCdpW3QVZRy+o8qWe3mlJa/8= -github.com/cometbft/cometbft v0.38.2/go.mod h1:PIi48BpzwlHqtV3mzwPyQgOyOnU94BNBimLS2ebBHOg= +github.com/cometbft/cometbft v0.38.5 h1:4lOcK5VTPrfbLOhNHmPYe6c7eDXHtBdMCQuKbAfFJdU= +github.com/cometbft/cometbft v0.38.5/go.mod h1:0tqKin+KQs8zDwzYD8rPHzSBIDNPuB4NrwwGDNb/hUg= github.com/cometbft/cometbft-db v0.9.1 h1:MIhVX5ja5bXNHF8EYrThkG9F7r9kSfv8BX4LWaxWJ4M= github.com/cometbft/cometbft-db v0.9.1/go.mod h1:iliyWaoV0mRwBJoizElCwwRA9Tf7jZJOURcRZF9m60U= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= @@ -359,10 +357,8 @@ github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= github.com/cosmos/cosmos-db v1.0.0 h1:EVcQZ+qYag7W6uorBKFPvX6gRjw6Uq2hIh4hCWjuQ0E= github.com/cosmos/cosmos-db v1.0.0/go.mod h1:iBvi1TtqaedwLdcrZVYRSSCb6eSy61NLj4UNmdIgs0U= -github.com/cosmos/cosmos-proto v1.0.0-beta.3 h1:VitvZ1lPORTVxkmF2fAp3IiA61xVwArQYKXTdEcpW6o= -github.com/cosmos/cosmos-proto v1.0.0-beta.3/go.mod h1:t8IASdLaAq+bbHbjq4p960BvcTqtwuAxid3b/2rOD6I= -github.com/cosmos/cosmos-sdk v0.50.1 h1:2SYwAYqd7ZwtrWxu/J8PwbQV/cDcu90bCr/a78g3lVw= -github.com/cosmos/cosmos-sdk v0.50.1/go.mod h1:fsLSPGstCwn6MMsFDMAQWGJj8E4sYsN9Gnu1bGE5imA= +github.com/cosmos/cosmos-proto v1.0.0-beta.4 h1:aEL7tU/rLOmxZQ9z4i7mzxcLbSCY48OdY7lIWTLG7oU= +github.com/cosmos/cosmos-proto v1.0.0-beta.4/go.mod h1:oeB+FyVzG3XrQJbJng0EnV8Vljfk9XvTIpGILNU/9Co= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= @@ -370,8 +366,8 @@ github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= github.com/cosmos/gogoproto v1.4.11 h1:LZcMHrx4FjUgrqQSWeaGC1v/TeuVFqSLa43CC6aWR2g= github.com/cosmos/gogoproto v1.4.11/go.mod h1:/g39Mh8m17X8Q/GDEs5zYTSNaNnInBSohtaxzQnYq1Y= -github.com/cosmos/iavl v1.0.0 h1:bw6t0Mv/mVCJvlMTOPHWLs5uUE3BRBfVWCRelOzl+so= -github.com/cosmos/iavl v1.0.0/go.mod h1:CmTGqMnRnucjxbjduneZXT+0vPgNElYvdefjX2q9tYc= +github.com/cosmos/iavl v1.0.1 h1:D+mYbcRO2wptYzOM1Hxl9cpmmHU1ZEt9T2Wv5nZTeUw= +github.com/cosmos/iavl v1.0.1/go.mod h1:8xIUkgVvwvVrBu81scdPty+/Dx9GqwHnAvXz4cwF7RY= github.com/cosmos/ibc-go/modules/capability v1.0.0 h1:r/l++byFtn7jHYa09zlAdSeevo8ci1mVZNO9+V0xsLE= github.com/cosmos/ibc-go/modules/capability v1.0.0/go.mod h1:D81ZxzjZAe0ZO5ambnvn1qedsFQ8lOwtqicG6liLBco= github.com/cosmos/ibc-go/v8 v8.0.0 h1:QKipnr/NGwc+9L7NZipURvmSIu+nw9jOIWTJuDBqOhg= @@ -418,14 +414,14 @@ github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:Htrtb github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= -github.com/dvsekhvalnov/jose2go v1.5.0 h1:3j8ya4Z4kMCwT5nXIKFSV84YS+HdqSSO0VsTQxaLAeM= -github.com/dvsekhvalnov/jose2go v1.5.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= +github.com/dvsekhvalnov/jose2go v1.6.0 h1:Y9gnSnP4qEI0+/uQkHvFXeD2PLPJeXEL+ySMEA2EjTY= +github.com/dvsekhvalnov/jose2go v1.6.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/emicklei/dot v1.6.0 h1:vUzuoVE8ipzS7QkES4UfxdpCwdU2U97m2Pb2tQCoYRY= -github.com/emicklei/dot v1.6.0/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s= +github.com/emicklei/dot v1.6.1 h1:ujpDlBkkwgWUY+qPId5IwapRW/xEoligRSYjioR6DFI= +github.com/emicklei/dot v1.6.1/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s= github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -447,15 +443,15 @@ github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8 github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= -github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= -github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= -github.com/getsentry/sentry-go v0.25.0 h1:q6Eo+hS+yoJlTO3uu/azhQadsD8V+jQn2D8VvX1eOyI= -github.com/getsentry/sentry-go v0.25.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= +github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps= +github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= @@ -495,6 +491,12 @@ github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFG github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.2.0 h1:uCdmnmatrKCgMBlM4rMuJZWOkPDqdbZPnrMXDY4gI68= @@ -582,7 +584,6 @@ github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= @@ -613,7 +614,6 @@ github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMd github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= -github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE= @@ -722,19 +722,20 @@ github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/X github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= -github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= -github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/klauspost/compress v1.17.6 h1:60eq2E/jlfwQXtvZEeBUYADs+BwKBWURIY+Gj2eRGjI= +github.com/klauspost/compress v1.17.6/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= @@ -750,8 +751,8 @@ github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6 github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/linxGnu/grocksdb v1.8.6 h1:O7I6SIGPrypf3f/gmrrLUBQDKfO8uOoYdWf4gLS06tc= -github.com/linxGnu/grocksdb v1.8.6/go.mod h1:xZCIb5Muw+nhbDK4Y5UJuOrin5MceOuiXkVUR7vp4WY= +github.com/linxGnu/grocksdb v1.8.12 h1:1/pCztQUOa3BX/1gR3jSZDoaKFpeHFvQ1XrqZpSvZVo= +github.com/linxGnu/grocksdb v1.8.12/go.mod h1:xZCIb5Muw+nhbDK4Y5UJuOrin5MceOuiXkVUR7vp4WY= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= @@ -774,8 +775,6 @@ github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= -github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= @@ -876,7 +875,6 @@ github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= -github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -887,24 +885,24 @@ 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.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= -github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY= +github.com/prometheus/client_golang v1.18.0 h1:HzFfmkOzH5Q8L8G+kSJKUx5dtG87sewO+FoDDqP5Tbk= +github.com/prometheus/client_golang v1.18.0/go.mod h1:T+GXkCk5wSJyOqMIzVgvvjFDlkOQntgjkJWKrN5txjA= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= -github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= +github.com/prometheus/client_model v0.6.0 h1:k1v3CzpSRUTrKMppY35TLwPvxHqBu0bYgxZzqGIgaos= +github.com/prometheus/client_model v0.6.0/go.mod h1:NTQHnmxFpouOD0DpvP4XujX3CdOAGQPoaGhyTchlyt8= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= -github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= +github.com/prometheus/common v0.47.0 h1:p5Cz0FNHo7SnWOmWmoRozVcjEp0bIVU8cV7OShpjL1k= +github.com/prometheus/common v0.47.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= @@ -913,6 +911,10 @@ github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= +github.com/provenance-io/cosmos-sdk v0.50.5-nullpointer0x00-msg-based-fee-support h1:eVD2/kZ4KJN34a+EXZocVmNaROjMVnVE0BAo4rAxRYg= +github.com/provenance-io/cosmos-sdk v0.50.5-nullpointer0x00-msg-based-fee-support/go.mod h1:UbShFs6P8Ly29xxJvkNGaNaL/UGj5a686NRtb1Cqra0= +github.com/provenance-io/ibc-apps/modules/async-icq/v8 v8.0.0-prov-1 h1:p+7pxHB0ukO2aow+M6uW9gHgeQl7YJyYGyMSKHZ5My8= +github.com/provenance-io/ibc-apps/modules/async-icq/v8 v8.0.0-prov-1/go.mod h1:tObW9uxibh5Z22CtOaHVeTDotCSMyc/2B4MrYdaViBo= github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= @@ -920,27 +922,25 @@ github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5X github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/regen-network/cosmos-proto v0.3.1 h1:rV7iM4SSFAagvy8RiyhiACbWEGotmqzywPxOvwMdxcg= github.com/regen-network/cosmos-proto v0.3.1/go.mod h1:jO0sVX6a1B36nmE8C9xBFXpNwWejXC7QqCOnH3O0+YM= -github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= -github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= -github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo= github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.31.0 h1:FcTR3NnLWW+NnTwwhFWiJSZr4ECLpqCm6QsEnyvbV4A= -github.com/rs/zerolog v1.31.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= +github.com/rs/zerolog v1.32.0 h1:keLypqrlIjaFsbmJOBdB/qvyF8KEtCWHwobLp5l/mQ0= +github.com/rs/zerolog v1.32.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/sagikazarmark/locafero v0.3.0 h1:zT7VEGWC2DTflmccN/5T1etyKvxSxpHsjb9cJvm4SvQ= -github.com/sagikazarmark/locafero v0.3.0/go.mod h1:w+v7UsPNFwzF1cHuOajOOzoq4U7v/ig1mpRjqV+Bu1U= +github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= +github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= @@ -964,11 +964,11 @@ github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasO github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.10.0 h1:EaGW2JJh15aKOejeuJ+wpFSHnbd7GE6Wvp3TsNhb6LY= -github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= +github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= +github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= -github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= +github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= +github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= 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.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= @@ -979,8 +979,8 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.17.0 h1:I5txKw7MJasPL/BrfkbA0Jyo/oELqVmux4pR/UxOMfI= -github.com/spf13/viper v1.17.0/go.mod h1:BmMMMLQXSbcHK6KAOiFLz0l5JHrU89OdIRHvsk0+yVI= +github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ= +github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk= 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= @@ -1075,13 +1075,11 @@ golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= -golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY= -golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.19.0 h1:ENy+Az/9Y1vSrlrvBSyna3PITt4tiZLf7sgCjZBX7Wo= +golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= 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= @@ -1093,8 +1091,8 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= -golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= +golang.org/x/exp v0.0.0-20240213143201-ec583247a57a h1:HinSgX1tJRX3KsL//Gxynpw5CTOAIPhgL4W8PNiIpVE= +golang.org/x/exp v0.0.0-20240213143201-ec583247a57a/go.mod h1:CxmFvTBINI24O/j8iY7H1xHzx2i4OsyguNBmN/uPtqc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1122,8 +1120,8 @@ golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= -golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.15.0 h1:SernR4v+D55NyBH2QiEQrlBAnj1ECL6AGrA5+dPaMY8= +golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1165,14 +1163,12 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -1188,8 +1184,8 @@ golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= -golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= +golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo= +golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= 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= @@ -1215,8 +1211,8 @@ golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= -golang.org/x/oauth2 v0.13.0 h1:jDDenyj+WgFtmV3zYVoi8aE2BwtXFLWOA67ZfNWftiY= -golang.org/x/oauth2 v0.13.0/go.mod h1:/JMhi4ZRXAf4HG9LiNmxvk+45+96RUlVThiH8FzNBn0= +golang.org/x/oauth2 v0.16.0 h1:aDkGMBSYxElaoP81NpoUoz2oo2R2wHdZpGToUxfyQrQ= +golang.org/x/oauth2 v0.16.0/go.mod h1:hqZ+0LWXsiVoZpeld6jVt06P3adbS2Uu911W1SsJv2o= 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= @@ -1290,13 +1286,11 @@ golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7w 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-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1335,16 +1329,16 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= -golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y= +golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= -golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= +golang.org/x/term v0.17.0 h1:mkTF7LCd6WGJNL3K1Ad7kwxNfYAW6a8a8QqtMblp/4U= +golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= 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= @@ -1365,8 +1359,12 @@ golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= +golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= @@ -1418,7 +1416,6 @@ golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4f 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.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= @@ -1427,8 +1424,8 @@ golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.15.0 h1:zdAyfUGbYmuVokhzVmghFl2ZJh5QhcfebBgmVPFYA+8= -golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk= +golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ= +golang.org/x/tools v0.18.0/go.mod h1:GL7B4CwcLLeo59yx/9UWWuNOW1n3VZ4f5axWfML7Lcg= 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= @@ -1487,8 +1484,8 @@ google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.149.0 h1:b2CqT6kG+zqJIVKRQ3ELJVLN1PwHZ6DJ3dW8yl82rgY= -google.golang.org/api v0.149.0/go.mod h1:Mwn1B7JTXrzXtnvmzQE2BD6bYZQ8DShKZDZbeN9I7qI= +google.golang.org/api v0.153.0 h1:N1AwGhielyKFaUqH07/ZSIQR3uNPcV7NVw0vj+j4iR4= +google.golang.org/api v0.153.0/go.mod h1:3qNJX5eOmhiWYc67jRA/3GsDw97UFb5ivv7Y2PrriAY= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1521,7 +1518,6 @@ google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200324203455-a04cca1dde73/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= @@ -1538,10 +1534,8 @@ google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -1608,12 +1602,12 @@ google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqw google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17 h1:wpZ8pe2x1Q3f2KyT5f8oP/fa9rHAKgFPr/HZdNuS+PQ= -google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:J7XzRzVy1+IPwWHZUzoD0IccYZIrXILAQpc+Qy9CMhY= -google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 h1:JpwMPBpFN3uKhdaekDpiNlImDdkUAyiJ6ez/uxGaUSo= -google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 h1:Jyp0Hsi0bmHXG6k9eATXoYtjd6e2UzZ1SCn/wIupY14= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:oQ5rr10WTTMvP4A36n8JpR1OrO1BEiV4f78CneXZxkA= +google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3 h1:1hfbdAfFbkmpg41000wDVqr7jUpK/Yo+LPnIxxGzmkg= +google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3/go.mod h1:5RBcpGRxr25RbDzY5w+dmaqpSEvl8Gwl1x2CICf60ic= +google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f h1:2yNACc1O40tTnrsbk9Cv6oxiW8pxI/pXj0wRtdlYmgY= +google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f/go.mod h1:Uy9bTZJqmfrw2rIBxgGLnamc78euZULUBrLZ9XTITKI= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0 h1:/jFB8jK5R3Sq3i/lmeZO0cATSzFfZaJq1J2Euan3XKU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0/go.mod h1:FUoWkonphQm3RhTS+kOEhF8h0iDpm4tdXolVCeZ9KKA= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -1655,8 +1649,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.60.0 h1:6FQAR0kM31P6MRdeluor2w2gPaS4SVNrD/DNTxrQ15k= -google.golang.org/grpc v1.60.0/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM= +google.golang.org/grpc v1.60.1 h1:26+wFr+cNqSGFcOXcabYC0lUVJVRa2Sb2ortSK7VrEU= +google.golang.org/grpc v1.60.1/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -1674,8 +1668,8 @@ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= -google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= +google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= 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= diff --git a/internal/antewrapper/msg_fees_decorator_test.go b/internal/antewrapper/msg_fees_decorator_test.go index c382f130f9..0f0b85b782 100644 --- a/internal/antewrapper/msg_fees_decorator_test.go +++ b/internal/antewrapper/msg_fees_decorator_test.go @@ -9,7 +9,6 @@ import ( "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/auth/signing" - "github.com/cosmos/cosmos-sdk/x/auth/types" "github.com/provenance-io/provenance/internal/antewrapper" "github.com/provenance-io/provenance/internal/pioconfig" @@ -138,7 +137,7 @@ func (s *AnteTestSuite) TestMsgFeesDecoratorWrongDenom() { s.Assert().ErrorContains(err, `insufficient fee`) } -func createTestTx(s *AnteTestSuite, feeAmount sdk.Coins) (signing.Tx, types.AccountI) { +func createTestTx(s *AnteTestSuite, feeAmount sdk.Coins) (signing.Tx, sdk.AccountI) { // keys and addresses priv1, _, addr1 := testdata.KeyTestPubAddr() acct1 := s.app.AccountKeeper.NewAccountWithAddress(s.ctx, addr1) diff --git a/internal/handlers/msg_fee_handler.go b/internal/handlers/msg_fee_handler.go index 137e5f69ca..d17ac1d139 100644 --- a/internal/handlers/msg_fee_handler.go +++ b/internal/handlers/msg_fee_handler.go @@ -2,6 +2,7 @@ package handlers import ( sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" msgfeestypes "github.com/provenance-io/provenance/x/msgfees/types" @@ -15,8 +16,6 @@ type PioBaseAppKeeperOptions struct { Decoder sdk.TxDecoder } -// TODO[1760]: fee-handler: Uncomment NewAdditionalMsgFeeHandler once the FeeHandler type is back in the SDK. -/* func NewAdditionalMsgFeeHandler(options PioBaseAppKeeperOptions) (sdk.FeeHandler, error) { if options.AccountKeeper == nil { return nil, sdkerrors.ErrLogic.Wrap("account keeper is required for AdditionalMsgFeeHandler builder") @@ -41,4 +40,3 @@ func NewAdditionalMsgFeeHandler(options PioBaseAppKeeperOptions) (sdk.FeeHandler return NewMsgFeeInvoker(options.BankKeeper, options.AccountKeeper, options.FeegrantKeeper, options.MsgFeesKeeper, options.Decoder).Invoke, nil } -*/ diff --git a/internal/handlers/msg_fee_handler_test.go b/internal/handlers/msg_fee_handler_test.go index 034cbd1718..cbd5c8a900 100644 --- a/internal/handlers/msg_fee_handler_test.go +++ b/internal/handlers/msg_fee_handler_test.go @@ -1,7 +1,5 @@ package handlers_test -// TODO[1760]: fee-handler: Uncomment these tests. -/* import ( sdk "github.com/cosmos/cosmos-sdk/types" @@ -69,4 +67,3 @@ func (s *HandlerTestSuite) TestMsgFeeHandlerSetUpIncorrect() { }) s.Require().Error(err) } -*/ diff --git a/internal/handlers/msg_fee_invoker_test.go b/internal/handlers/msg_fee_invoker_test.go index 568f1a031d..61bcf691b1 100644 --- a/internal/handlers/msg_fee_invoker_test.go +++ b/internal/handlers/msg_fee_invoker_test.go @@ -16,12 +16,12 @@ import ( moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" "github.com/cosmos/cosmos-sdk/types/tx/signing" xauthsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" - "github.com/cosmos/cosmos-sdk/x/auth/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "github.com/cosmos/cosmos-sdk/x/bank/testutil" simapp "github.com/provenance-io/provenance/app" "github.com/provenance-io/provenance/internal/antewrapper" + piohandlers "github.com/provenance-io/provenance/internal/handlers" "github.com/provenance-io/provenance/internal/pioconfig" msgfeetype "github.com/provenance-io/provenance/x/msgfees/types" ) @@ -47,35 +47,31 @@ func (s *HandlerTestSuite) TestMsgFeeHandlerFeeChargedNoRemainingBaseFee() { feeGasMeter.ConsumeBaseFee(sdk.Coins{sdk.NewInt64Coin("atom", 100_000)}) }, "panicked on adding fees") s.ctx = s.ctx.WithGasMeter(feeGasMeter) - // TODO[1760]: fee-handler: Uncomment all this once the FeeHandler type is back in the SDK. - _ = acct1 - /* - feeChargeFn, err := piohandlers.NewAdditionalMsgFeeHandler(piohandlers.PioBaseAppKeeperOptions{ - AccountKeeper: s.app.AccountKeeper, - BankKeeper: s.app.BankKeeper, - FeegrantKeeper: s.app.FeeGrantKeeper, - MsgFeesKeeper: s.app.MsgFeesKeeper, - Decoder: encodingConfig.TxConfig.TxDecoder(), - }) - s.Require().NoError(err) - coins, _, err := feeChargeFn(s.ctx, false) - - s.Require().ErrorContains(err, "spendable balance 0nhash is smaller than 1000000nhash: insufficient funds", "feeChargeFn 1") - // fee gas meter has nothing to charge, so nothing should have been charged. - s.Require().True(coins.IsZero(), "coins.IsZero() 1") - - s.Require().NoError(testutil.FundAccount(s.ctx, s.app.BankKeeper, acct1.GetAddress(), sdk.NewCoins(sdk.NewInt64Coin(NHash, 900_000))), "fund account") - coins, _, err = feeChargeFn(s.ctx, false) - s.Require().ErrorContains(err, "900000nhash is smaller than 1000000nhash: insufficient funds: insufficient funds", "feeChargeFn 2") - // fee gas meter has nothing to charge, so nothing should have been charged. - s.Require().True(coins.IsZero(), "coins.IsZero() 2") - - s.Require().NoError(testutil.FundAccount(s.ctx, s.app.BankKeeper, acct1.GetAddress(), sdk.NewCoins(sdk.NewInt64Coin(NHash, 100_000))), "fund account again") - coins, _, err = feeChargeFn(s.ctx, false) - s.Require().NoError(err, "feeChargeFn 3") - // fee gas meter has nothing to charge, so nothing should have been charged. - s.Require().True(coins.IsAllGTE(sdk.Coins{sdk.NewInt64Coin(NHash, 1_000_000)}), "coins all gt 1000000nhash") - */ + feeChargeFn, err := piohandlers.NewAdditionalMsgFeeHandler(piohandlers.PioBaseAppKeeperOptions{ + AccountKeeper: s.app.AccountKeeper, + BankKeeper: s.app.BankKeeper, + FeegrantKeeper: s.app.FeeGrantKeeper, + MsgFeesKeeper: s.app.MsgFeesKeeper, + Decoder: encodingConfig.TxConfig.TxDecoder(), + }) + s.Require().NoError(err) + coins, _, err := feeChargeFn(s.ctx, false) + + s.Require().ErrorContains(err, "spendable balance 0nhash is smaller than 1000000nhash: insufficient funds", "feeChargeFn 1") + // fee gas meter has nothing to charge, so nothing should have been charged. + s.Require().True(coins.IsZero(), "coins.IsZero() 1") + + s.Require().NoError(testutil.FundAccount(s.ctx, s.app.BankKeeper, acct1.GetAddress(), sdk.NewCoins(sdk.NewInt64Coin(NHash, 900_000))), "fund account") + coins, _, err = feeChargeFn(s.ctx, false) + s.Require().ErrorContains(err, "900000nhash is smaller than 1000000nhash: insufficient funds: insufficient funds", "feeChargeFn 2") + // fee gas meter has nothing to charge, so nothing should have been charged. + s.Require().True(coins.IsZero(), "coins.IsZero() 2") + + s.Require().NoError(testutil.FundAccount(s.ctx, s.app.BankKeeper, acct1.GetAddress(), sdk.NewCoins(sdk.NewInt64Coin(NHash, 100_000))), "fund account again") + coins, _, err = feeChargeFn(s.ctx, false) + s.Require().NoError(err, "feeChargeFn 3") + // fee gas meter has nothing to charge, so nothing should have been charged. + s.Require().True(coins.IsAllGTE(sdk.Coins{sdk.NewInt64Coin(NHash, 1_000_000)}), "coins all gt 1000000nhash") } func (s *HandlerTestSuite) TestMsgFeeHandlerFeeChargedWithRemainingBaseFee() { @@ -96,32 +92,30 @@ func (s *HandlerTestSuite) TestMsgFeeHandlerFeeChargedWithRemainingBaseFee() { feeGasMeter.ConsumeBaseFee(sdk.Coins{sdk.NewInt64Coin("atom", 100_000)}) // fee consumed at ante handler }, "panicked on adding fees") s.ctx = s.ctx.WithGasMeter(feeGasMeter) - // TODO[1760]: fee-handler: Uncomment all this once the FeeHandler type is back in the SDK. - _ = acct1 - /* - feeChargeFn, err := piohandlers.NewAdditionalMsgFeeHandler(piohandlers.PioBaseAppKeeperOptions{ - AccountKeeper: s.app.AccountKeeper, - BankKeeper: s.app.BankKeeper, - FeegrantKeeper: s.app.FeeGrantKeeper, - MsgFeesKeeper: s.app.MsgFeesKeeper, - Decoder: encodingConfig.TxConfig.TxDecoder(), - }) - s.Require().NoError(err, "NewAdditionalMsgFeeHandler") - - s.Require().NoError(testutil.FundAccount(s.ctx, s.app.BankKeeper, acct1.GetAddress(), sdk.NewCoins(sdk.NewInt64Coin(NHash, 1_000_000))), "funding account") - coins, _, err := feeChargeFn(s.ctx, false) - s.Require().ErrorContains(err, "spendable balance 0atom is smaller than 20000atom: insufficient funds", "feeChargeFn 1") - // fee gas meter has nothing to charge, so nothing should have been charged. - s.Require().True(coins.IsZero(), "coins.IsZero() 1") - - s.Require().NoError(testutil.FundAccount(s.ctx, s.app.BankKeeper, acct1.GetAddress(), sdk.NewCoins(sdk.NewInt64Coin("atom", 20000), sdk.NewInt64Coin(NHash, 1000000))), "funding account again") - coins, _, err = feeChargeFn(s.ctx, false) - s.Require().Nil(err, "Got error when should have successfully paid all msg fees and swept remaining base fees") - s.Require().True(coins.Equal(sdk.Coins{sdk.NewInt64Coin(NHash, 1000000), sdk.NewInt64Coin("atom", 20000)})) - s.Require().NoError(err, "feeChargeFn 2") - expected := sdk.Coins{sdk.NewInt64Coin("atom", 20000), sdk.NewInt64Coin(NHash, 1000000)} - s.Require().Equal(expected, coins, "final coins") - */ + + feeChargeFn, err := piohandlers.NewAdditionalMsgFeeHandler(piohandlers.PioBaseAppKeeperOptions{ + AccountKeeper: s.app.AccountKeeper, + BankKeeper: s.app.BankKeeper, + FeegrantKeeper: s.app.FeeGrantKeeper, + MsgFeesKeeper: s.app.MsgFeesKeeper, + Decoder: encodingConfig.TxConfig.TxDecoder(), + }) + s.Require().NoError(err, "NewAdditionalMsgFeeHandler") + + s.Require().NoError(testutil.FundAccount(s.ctx, s.app.BankKeeper, acct1.GetAddress(), sdk.NewCoins(sdk.NewInt64Coin(NHash, 1_000_000))), "funding account") + coins, _, err := feeChargeFn(s.ctx, false) + s.Require().ErrorContains(err, "spendable balance 0atom is smaller than 20000atom: insufficient funds", "feeChargeFn 1") + // fee gas meter has nothing to charge, so nothing should have been charged. + s.Require().True(coins.IsZero(), "coins.IsZero() 1") + + s.Require().NoError(testutil.FundAccount(s.ctx, s.app.BankKeeper, acct1.GetAddress(), sdk.NewCoins(sdk.NewInt64Coin("atom", 20000), sdk.NewInt64Coin(NHash, 1000000))), "funding account again") + coins, _, err = feeChargeFn(s.ctx, false) + s.Require().Nil(err, "Got error when should have successfully paid all msg fees and swept remaining base fees") + s.Require().True(coins.Equal(sdk.Coins{sdk.NewInt64Coin(NHash, 1000000), sdk.NewInt64Coin("atom", 20000)})) + s.Require().NoError(err, "feeChargeFn 2") + expected := sdk.Coins{sdk.NewInt64Coin("atom", 20000), sdk.NewInt64Coin(NHash, 1000000)} + s.Require().Equal(expected, coins, "final coins") + } func (s *HandlerTestSuite) TestMsgFeeHandlerFeeChargedFeeGranter() { @@ -142,21 +136,20 @@ func (s *HandlerTestSuite) TestMsgFeeHandlerFeeChargedFeeGranter() { feeGasMeter.ConsumeBaseFee(sdk.Coins{sdk.NewInt64Coin("atom", 100_000)}) }, "panicked on adding fees") s.ctx = s.ctx.WithGasMeter(feeGasMeter) - // TODO[1760]: fee-handler: Uncomment all this once the FeeHandler type is back in the SDK. - /* - feeChargeFn, err := piohandlers.NewAdditionalMsgFeeHandler(piohandlers.PioBaseAppKeeperOptions{ - AccountKeeper: s.app.AccountKeeper, - BankKeeper: s.app.BankKeeper, - FeegrantKeeper: s.app.FeeGrantKeeper, - MsgFeesKeeper: s.app.MsgFeesKeeper, - Decoder: encodingConfig.TxConfig.TxDecoder(), - }) - - coins, _, err := feeChargeFn(s.ctx, false) - s.Require().Nil(err, "Got error when should not have.") - // fee gas meter has nothing to charge, so nothing should have been charged. - s.Require().True(coins.IsAllGTE(sdk.Coins{sdk.NewInt64Coin(NHash, 1000000)})) - */ + + feeChargeFn, err := piohandlers.NewAdditionalMsgFeeHandler(piohandlers.PioBaseAppKeeperOptions{ + AccountKeeper: s.app.AccountKeeper, + BankKeeper: s.app.BankKeeper, + FeegrantKeeper: s.app.FeeGrantKeeper, + MsgFeesKeeper: s.app.MsgFeesKeeper, + Decoder: encodingConfig.TxConfig.TxDecoder(), + }) + + coins, _, err := feeChargeFn(s.ctx, false) + s.Require().Nil(err, "Got error when should not have.") + // fee gas meter has nothing to charge, so nothing should have been charged. + s.Require().True(coins.IsAllGTE(sdk.Coins{sdk.NewInt64Coin(NHash, 1000000)})) + } func (s *HandlerTestSuite) TestMsgFeeHandlerBadDecoder() { @@ -172,18 +165,17 @@ func (s *HandlerTestSuite) TestMsgFeeHandlerBadDecoder() { s.ctx = s.ctx.WithTxBytes(bz) feeGasMeter := antewrapper.NewFeeGasMeterWrapper(log.NewTestLogger(s.T()), storetypes.NewGasMeter(100), false).(*antewrapper.FeeGasMeter) s.ctx = s.ctx.WithGasMeter(feeGasMeter) - // TODO[1760]: fee-handler: Uncomment all this once the FeeHandler type is back in the SDK. - /* - feeChargeFn, err := piohandlers.NewAdditionalMsgFeeHandler(piohandlers.PioBaseAppKeeperOptions{ - AccountKeeper: s.app.AccountKeeper, - BankKeeper: s.app.BankKeeper, - FeegrantKeeper: s.app.FeeGrantKeeper, - MsgFeesKeeper: s.app.MsgFeesKeeper, - Decoder: moduletestutil.MakeTestEncodingConfig().TxConfig.TxDecoder(), - }) - s.Require().NoError(err) - s.Require().Panics(func() { feeChargeFn(s.ctx, false) }, "Bad decoder while setting up app.") - */ + + feeChargeFn, err := piohandlers.NewAdditionalMsgFeeHandler(piohandlers.PioBaseAppKeeperOptions{ + AccountKeeper: s.app.AccountKeeper, + BankKeeper: s.app.BankKeeper, + FeegrantKeeper: s.app.FeeGrantKeeper, + MsgFeesKeeper: s.app.MsgFeesKeeper, + Decoder: moduletestutil.MakeTestEncodingConfig().TxConfig.TxDecoder(), + }) + s.Require().NoError(err) + s.Require().Panics(func() { feeChargeFn(s.ctx, false) }, "Bad decoder while setting up app.") + } func setUpApp(s *HandlerTestSuite, additionalFeeCoinDenom string, additionalFeeCoinAmt int64) (moduletestutil.TestEncodingConfig, error) { @@ -208,7 +200,7 @@ func createTestApp(t *testing.T) (*simapp.App, sdk.Context) { return app, ctx } -func createTestTx(s *HandlerTestSuite, err error, feeAmount sdk.Coins) (xauthsigning.Tx, types.AccountI) { +func createTestTx(s *HandlerTestSuite, err error, feeAmount sdk.Coins) (xauthsigning.Tx, sdk.AccountI) { // keys and addresses priv1, _, addr1 := testdata.KeyTestPubAddr() acct1 := s.app.AccountKeeper.NewAccountWithAddress(s.ctx, addr1) @@ -228,7 +220,7 @@ func createTestTx(s *HandlerTestSuite, err error, feeAmount sdk.Coins) (xauthsig return testTx, acct1 } -func createTestTxWithFeeGrant(s *HandlerTestSuite, err error, feeAmount sdk.Coins) (xauthsigning.Tx, types.AccountI) { +func createTestTxWithFeeGrant(s *HandlerTestSuite, err error, feeAmount sdk.Coins) (xauthsigning.Tx, sdk.AccountI) { // keys and addresses priv1, _, addr1 := testdata.KeyTestPubAddr() acct1 := s.app.AccountKeeper.NewAccountWithAddress(s.ctx, addr1) diff --git a/internal/handlers/msg_service_router.go b/internal/handlers/msg_service_router.go index 88628e3629..cf13fe18ca 100644 --- a/internal/handlers/msg_service_router.go +++ b/internal/handlers/msg_service_router.go @@ -5,18 +5,22 @@ import ( "fmt" "sort" - gogogrpc "github.com/gogo/protobuf/grpc" - "github.com/gogo/protobuf/proto" + gogogrpc "github.com/cosmos/gogoproto/grpc" + "github.com/cosmos/gogoproto/proto" "golang.org/x/exp/constraints" "google.golang.org/grpc" + "google.golang.org/protobuf/runtime/protoiface" "github.com/cosmos/cosmos-sdk/baseapp" + + "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/provenance-io/provenance/internal/antewrapper" "github.com/provenance-io/provenance/internal/helpers" + "github.com/provenance-io/provenance/internal/protocompat" msgfeeskeeper "github.com/provenance-io/provenance/x/msgfees/keeper" ) @@ -24,6 +28,7 @@ import ( type PioMsgServiceRouter struct { interfaceRegistry codectypes.InterfaceRegistry routes map[string]MsgServiceHandler + hybridHandlers map[string]protocompat.Handler msgFeesKeeper msgfeeskeeper.Keeper decoder sdk.TxDecoder circuitBreaker baseapp.CircuitBreaker @@ -31,14 +36,14 @@ type PioMsgServiceRouter struct { var _ gogogrpc.Server = &PioMsgServiceRouter{} -// TODO[1760]: msg-service-router: Make sure any fixes in the SDK's MsgServiceRouter are also considered with our PioMsgServiceRouter. -// var _ baseapp.IMsgServiceRouter = &PioMsgServiceRouter{} // TODO[1760]: msg-service-router +var _ baseapp.IMsgServiceRouter = &PioMsgServiceRouter{} // NewPioMsgServiceRouter creates a new PioMsgServiceRouter. func NewPioMsgServiceRouter(decoder sdk.TxDecoder) *PioMsgServiceRouter { return &PioMsgServiceRouter{ - routes: map[string]MsgServiceHandler{}, - decoder: decoder, + routes: map[string]MsgServiceHandler{}, + hybridHandlers: map[string]protocompat.Handler{}, + decoder: decoder, } } @@ -65,119 +70,167 @@ func (msr *PioMsgServiceRouter) SetMsgFeesKeeper(msgFeesKeeper msgfeeskeeper.Kee msr.msgFeesKeeper = msgFeesKeeper } -// RegisterService implements the gRPC Server.RegisterService method. sd is a gRPC -// service description, handler is an object which implements that gRPC service. -// -// This function PANICs: -// - if it is called before the service `Msg`s have been registered using -// RegisterInterfaces, -// - or if a service is being registered twice. -func (msr *PioMsgServiceRouter) RegisterService(sd *grpc.ServiceDesc, handler interface{}) { - // Adds a top-level query handler based on the gRPC service name. - for _, method := range sd.Methods { - fqMethod := fmt.Sprintf("/%s/%s", sd.ServiceName, method.MethodName) - methodHandler := method.Handler - - var requestTypeName string - - // NOTE: This is how we pull the concrete request type for each handler for registering in the InterfaceRegistry. - // This approach is maybe a bit hacky, but less hacky than reflecting on the handler object itself. - // We use a no-op interceptor to avoid actually calling into the handler itself. - _, _ = methodHandler(nil, context.Background(), func(i interface{}) error { - msg, ok := i.(sdk.Msg) - if !ok { - // We panic here because there is no other alternative and the app cannot be initialized correctly - // this should only happen if there is a problem with code generation in which case the app won't - // work correctly anyway. - panic(fmt.Errorf("unable to register service method %s: %T does not implement sdk.Msg", fqMethod, i)) - } - - requestTypeName = sdk.MsgTypeURL(msg) - return nil - }, noopInterceptor) - - // Check that the service Msg fully-qualified method name has already - // been registered (via RegisterInterfaces). If the user registers a - // service without registering according service Msg type, there might be - // some unexpected behavior down the road. Since we can't return an error - // (`Server.RegisterService` interface restriction) we panic (at startup). - reqType, err := msr.interfaceRegistry.Resolve(requestTypeName) - if err != nil || reqType == nil { - panic( - fmt.Errorf( - "type_url %s has not been registered yet. "+ - "Before calling RegisterService, you must register all interfaces by calling the `RegisterInterfaces` "+ - "method on module.BasicManager. Each module should call `msgservice.RegisterMsgServiceDesc` inside its "+ - "`RegisterInterfaces` method with the `_Msg_serviceDesc` generated by proto-gen", - requestTypeName, - ), - ) +func (msr *PioMsgServiceRouter) registerHybridHandler(sd *grpc.ServiceDesc, method grpc.MethodDesc, handler interface{}) error { + inputName, err := protocompat.RequestFullNameFromMethodDesc(sd, method) + if err != nil { + return err + } + cdc := codec.NewProtoCodec(msr.interfaceRegistry) + hybridHandler, err := protocompat.MakeHybridHandler(cdc, sd, method, handler) + if err != nil { + return err + } + // if circuit breaker is not nil, then we decorate the hybrid handler with the circuit breaker + if msr.circuitBreaker == nil { + msr.hybridHandlers[string(inputName)] = hybridHandler + return nil + } + // decorate the hybrid handler with the circuit breaker + circuitBreakerHybridHandler := func(ctx context.Context, req, resp protoiface.MessageV1) error { + messageName := codectypes.MsgTypeURL(req) + allowed, err := msr.circuitBreaker.IsAllowed(ctx, messageName) + if err != nil { + return err } + if !allowed { + return fmt.Errorf("circuit breaker disallows execution of message %s", messageName) + } + return hybridHandler(ctx, req, resp) + } + msr.hybridHandlers[string(inputName)] = circuitBreakerHybridHandler + return nil +} - // Check that each service is only registered once. If a service is - // registered more than once, then we should error. Since we can't - // return an error (`Server.RegisterService` interface restriction) we - // panic (at startup). - _, found := msr.routes[requestTypeName] - if found { - panic( - fmt.Errorf( - "msg service %s has already been registered. Please make sure to only register each service once. "+ - "This usually means that there are conflicting modules registering the same msg service", - fqMethod, - ), - ) +func (msr *PioMsgServiceRouter) registerMsgServiceHandler(sd *grpc.ServiceDesc, method grpc.MethodDesc, handler interface{}) error { + fqMethod := fmt.Sprintf("/%s/%s", sd.ServiceName, method.MethodName) + methodHandler := method.Handler + + var requestTypeName string + + // NOTE: This is how we pull the concrete request type for each handler for registering in the InterfaceRegistry. + // This approach is maybe a bit hacky, but less hacky than reflecting on the handler object itself. + // We use a no-op interceptor to avoid actually calling into the handler itself. + _, _ = methodHandler(nil, context.Background(), func(i interface{}) error { + msg, ok := i.(sdk.Msg) + if !ok { + // We panic here because there is no other alternative and the app cannot be initialized correctly + // this should only happen if there is a problem with code generation in which case the app won't + // work correctly anyway. + panic(fmt.Errorf("unable to register service method %s: %T does not implement sdk.Msg", fqMethod, i)) } - msr.routes[requestTypeName] = func(ctx sdk.Context, req sdk.Msg) (*sdk.Result, error) { - // provenance specific modification to msg service router that handles x/msgfee distribution - err := msr.consumeMsgFees(ctx, req) - if err != nil { - return nil, err - } + requestTypeName = sdk.MsgTypeURL(msg) + return nil + }, noopInterceptor) + + // Check that the service Msg fully-qualified method name has already + // been registered (via RegisterInterfaces). If the user registers a + // service without registering according service Msg type, there might be + // some unexpected behavior down the road. Since we can't return an error + // (`Server.RegisterService` interface restriction) we panic (at startup). + reqType, err := msr.interfaceRegistry.Resolve(requestTypeName) + if err != nil || reqType == nil { + panic( + fmt.Errorf( + "type_url %s has not been registered yet. "+ + "Before calling RegisterService, you must register all interfaces by calling the `RegisterInterfaces` "+ + "method on module.BasicManager. Each module should call `msgservice.RegisterMsgServiceDesc` inside its "+ + "`RegisterInterfaces` method with the `_Msg_serviceDesc` generated by proto-gen", + requestTypeName, + ), + ) + } - // original sdk implementation of msg service router - ctx = ctx.WithEventManager(sdk.NewEventManager()) - interceptor := func(goCtx context.Context, _ interface{}, _ *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { - goCtx = context.WithValue(goCtx, sdk.SdkContextKey, ctx) - return handler(goCtx, req) - } + // Check that each service is only registered once. If a service is + // registered more than once, then we should error. Since we can't + // return an error (`Server.RegisterService` interface restriction) we + // panic (at startup). + _, found := msr.routes[requestTypeName] + if found { + panic( + fmt.Errorf( + "msg service %s has already been registered. Please make sure to only register each service once. "+ + "This usually means that there are conflicting modules registering the same msg service", + fqMethod, + ), + ) + } - if err = helpers.ValidateBasic(req); err != nil { - return nil, err - } + msr.routes[requestTypeName] = func(ctx sdk.Context, req sdk.Msg) (*sdk.Result, error) { + // provenance specific modification to msg service router that handles x/msgfee distribution + err := msr.consumeMsgFees(ctx, req) + if err != nil { + return nil, err + } - if msr.circuitBreaker != nil { - msgURL := sdk.MsgTypeURL(req) + // original sdk implementation of msg service router + ctx = ctx.WithEventManager(sdk.NewEventManager()) + interceptor := func(goCtx context.Context, _ interface{}, _ *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { + goCtx = context.WithValue(goCtx, sdk.SdkContextKey, ctx) + return handler(goCtx, req) + } - var isAllowed bool - isAllowed, err = msr.circuitBreaker.IsAllowed(ctx, msgURL) - if err != nil { - return nil, err - } + if err = helpers.ValidateBasic(req); err != nil { + return nil, err + } - if !isAllowed { - return nil, fmt.Errorf("circuit breaker disables execution of this message: %s", msgURL) - } - } + if msr.circuitBreaker != nil { + msgURL := sdk.MsgTypeURL(req) - // Call the method handler from the service description with the handler object. - // We don't do any decoding here because the decoding was already done. - res, err := methodHandler(handler, sdk.WrapSDKContext(ctx), noopDecoder, interceptor) + var isAllowed bool + isAllowed, err = msr.circuitBreaker.IsAllowed(ctx, msgURL) if err != nil { return nil, err } - resMsg, ok := res.(proto.Message) - if !ok { - return nil, sdkerrors.ErrInvalidType.Wrapf("Expecting proto.Message, got %T", resMsg) + if !isAllowed { + return nil, fmt.Errorf("circuit breaker disables execution of this message: %s", msgURL) } + } + + // Call the method handler from the service description with the handler object. + // We don't do any decoding here because the decoding was already done. + res, err := methodHandler(handler, sdk.WrapSDKContext(ctx), noopDecoder, interceptor) + if err != nil { + return nil, err + } + + resMsg, ok := res.(proto.Message) + if !ok { + return nil, sdkerrors.ErrInvalidType.Wrapf("Expecting proto.Message, got %T", resMsg) + } + + return sdk.WrapServiceResult(ctx, resMsg, err) + } + return nil +} - return sdk.WrapServiceResult(ctx, resMsg, err) +// RegisterService implements the gRPC Server.RegisterService method. sd is a gRPC +// service description, handler is an object which implements that gRPC service. +// +// This function PANICs: +// - if it is called before the service `Msg`s have been registered using +// RegisterInterfaces, +// - or if a service is being registered twice. +func (msr *PioMsgServiceRouter) RegisterService(sd *grpc.ServiceDesc, handler interface{}) { + // Adds a top-level query handler based on the gRPC service name. + for _, method := range sd.Methods { + err := msr.registerMsgServiceHandler(sd, method, handler) + if err != nil { + panic(err) + } + // TODO[1760]: msg-service-router: Do we need to add the registration of this? + err = msr.registerHybridHandler(sd, method, handler) + if err != nil { + panic(err) } } } +func (msr *PioMsgServiceRouter) HybridHandlerByMsgName(msgName string) func(ctx context.Context, req, resp protoiface.MessageV1) error { + return msr.hybridHandlers[msgName] +} + // SetInterfaceRegistry sets the interface registry for the router. func (msr *PioMsgServiceRouter) SetInterfaceRegistry(interfaceRegistry codectypes.InterfaceRegistry) { msr.interfaceRegistry = interfaceRegistry diff --git a/internal/handlers/msg_service_router_test.go b/internal/handlers/msg_service_router_test.go index ac8b614316..41997a70fe 100644 --- a/internal/handlers/msg_service_router_test.go +++ b/internal/handlers/msg_service_router_test.go @@ -179,7 +179,7 @@ func TestRegisterMsgService(t *testing.T) { app := baseapp.NewBaseApp("test", log.NewTestLogger(t), db, encCfg.TxConfig.TxDecoder()) router := handlers.NewPioMsgServiceRouter(encCfg.TxConfig.TxDecoder()) router.SetInterfaceRegistry(encCfg.InterfaceRegistry) - // app.SetMsgServiceRouter(router) // TODO[1760]: msg-service-router + app.SetMsgServiceRouter(router) require.Panics(t, func() { testdata.RegisterMsgServer( app.MsgServiceRouter(), @@ -204,7 +204,7 @@ func TestRegisterMsgServiceTwice(t *testing.T) { app := baseapp.NewBaseApp("test", log.NewTestLogger(t), db, encCfg.TxConfig.TxDecoder()) router := handlers.NewPioMsgServiceRouter(encCfg.TxConfig.TxDecoder()) router.SetInterfaceRegistry(encCfg.InterfaceRegistry) - // app.SetMsgServiceRouter(router) // TODO[1760]: msg-service-router + app.SetMsgServiceRouter(router) testdata.RegisterInterfaces(encCfg.InterfaceRegistry) // First time registering service shouldn't panic. diff --git a/internal/protocompat/protocompat.go b/internal/protocompat/protocompat.go new file mode 100644 index 0000000000..6b8cdc0818 --- /dev/null +++ b/internal/protocompat/protocompat.go @@ -0,0 +1,232 @@ +package protocompat + +import ( + "context" + "fmt" + "reflect" + + gogoproto "github.com/cosmos/gogoproto/proto" + "github.com/golang/protobuf/proto" // nolint: staticcheck // needed because gogoproto.Merge does not work consistently. See NOTE: comments. + "google.golang.org/grpc" + proto2 "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/reflect/protoregistry" + "google.golang.org/protobuf/runtime/protoiface" + + "github.com/cosmos/cosmos-sdk/codec" +) + +var ( + gogoType = reflect.TypeOf((*gogoproto.Message)(nil)).Elem() + protov2Type = reflect.TypeOf((*proto2.Message)(nil)).Elem() + protov2MarshalOpts = proto2.MarshalOptions{Deterministic: true} +) + +type Handler = func(ctx context.Context, request, response protoiface.MessageV1) error + +func MakeHybridHandler(cdc codec.BinaryCodec, sd *grpc.ServiceDesc, method grpc.MethodDesc, handler interface{}) (Handler, error) { + methodFullName := protoreflect.FullName(fmt.Sprintf("%s.%s", sd.ServiceName, method.MethodName)) + desc, err := gogoproto.HybridResolver.FindDescriptorByName(methodFullName) + if err != nil { + return nil, err + } + methodDesc, ok := desc.(protoreflect.MethodDescriptor) + if !ok { + return nil, fmt.Errorf("invalid method descriptor %s", methodFullName) + } + + isProtov2Handler, err := isProtov2(method) + if err != nil { + return nil, err + } + if isProtov2Handler { + return makeProtoV2HybridHandler(methodDesc, cdc, method, handler) + } + return makeGogoHybridHandler(methodDesc, cdc, method, handler) +} + +// makeProtoV2HybridHandler returns a handler that can handle both gogo and protov2 messages. +func makeProtoV2HybridHandler(prefMethod protoreflect.MethodDescriptor, cdc codec.BinaryCodec, method grpc.MethodDesc, handler any) (Handler, error) { + // it's a protov2 handler, if a gogo counterparty is not found we cannot handle gogo messages. + gogoExists := gogoproto.MessageType(string(prefMethod.Output().FullName())) != nil + if !gogoExists { + return func(ctx context.Context, inReq, outResp protoiface.MessageV1) error { + protov2Request, ok := inReq.(proto2.Message) + if !ok { + return fmt.Errorf("invalid request type %T, method %s does not accept gogoproto messages", inReq, prefMethod.FullName()) + } + resp, err := method.Handler(handler, ctx, func(msg any) error { + proto2.Merge(msg.(proto2.Message), protov2Request) + return nil + }, nil) + if err != nil { + return err + } + // merge on the resp + proto2.Merge(outResp.(proto2.Message), resp.(proto2.Message)) + return nil + }, nil + } + return func(ctx context.Context, inReq, outResp protoiface.MessageV1) error { + // we check if the request is a protov2 message. + switch m := inReq.(type) { + case proto2.Message: + // we can just call the handler after making a copy of the message, for safety reasons. + resp, err := method.Handler(handler, ctx, func(msg any) error { + proto2.Merge(msg.(proto2.Message), m) + return nil + }, nil) + if err != nil { + return err + } + // merge on the resp + proto2.Merge(outResp.(proto2.Message), resp.(proto2.Message)) + return nil + case gogoproto.Message: + // we need to marshal and unmarshal the request. + requestBytes, err := cdc.Marshal(m) + if err != nil { + return err + } + resp, err := method.Handler(handler, ctx, func(msg any) error { + // unmarshal request into the message. + return proto2.Unmarshal(requestBytes, msg.(proto2.Message)) + }, nil) + if err != nil { + return err + } + // the response is a protov2 message, so we cannot just return it. + // since the request came as gogoproto, we expect the response + // to also be gogoproto. + respBytes, err := protov2MarshalOpts.Marshal(resp.(proto2.Message)) + if err != nil { + return err + } + + // unmarshal response into a gogo message. + return cdc.Unmarshal(respBytes, outResp.(gogoproto.Message)) + default: + panic("unreachable") + } + }, nil +} + +func makeGogoHybridHandler(prefMethod protoreflect.MethodDescriptor, cdc codec.BinaryCodec, method grpc.MethodDesc, handler any) (Handler, error) { + // it's a gogo handler, we check if the existing protov2 counterparty exists. + _, err := protoregistry.GlobalTypes.FindMessageByName(prefMethod.Output().FullName()) + if err != nil { + // this can only be a gogo message. + return func(ctx context.Context, inReq, outResp protoiface.MessageV1) error { + _, ok := inReq.(proto2.Message) + if ok { + return fmt.Errorf("invalid request type %T, method %s does not accept protov2 messages", inReq, prefMethod.FullName()) + } + resp, err := method.Handler(handler, ctx, func(msg any) error { + // merge! ref: https://github.com/cosmos/cosmos-sdk/issues/18003 + // NOTE: using gogoproto.Merge will fail for some reason unknown to me, but + // using proto.Merge with gogo messages seems to work fine. + proto.Merge(msg.(gogoproto.Message), inReq) + return nil + }, nil) + if err != nil { + return err + } + // merge resp, ref: https://github.com/cosmos/cosmos-sdk/issues/18003 + // NOTE: using gogoproto.Merge will fail for some reason unknown to me, but + // using proto.Merge with gogo messages seems to work fine. + proto.Merge(outResp.(gogoproto.Message), resp.(gogoproto.Message)) + return nil + }, nil + } + // this is a gogo handler, and we have a protov2 counterparty. + return func(ctx context.Context, inReq, outResp protoiface.MessageV1) error { + switch m := inReq.(type) { + case proto2.Message: + // we need to marshal and unmarshal the request. + requestBytes, err := protov2MarshalOpts.Marshal(m) + if err != nil { + return err + } + resp, err := method.Handler(handler, ctx, func(msg any) error { + // unmarshal request into the message. + return cdc.Unmarshal(requestBytes, msg.(gogoproto.Message)) + }, nil) + if err != nil { + return err + } + // the response is a gogo message, so we cannot just return it. + // since the request came as protov2, we expect the response + // to also be protov2. + respBytes, err := cdc.Marshal(resp.(gogoproto.Message)) + if err != nil { + return err + } + // now we unmarshal back into a protov2 message. + return proto2.Unmarshal(respBytes, outResp.(proto2.Message)) + case gogoproto.Message: + // we can just call the handler after making a copy of the message, for safety reasons. + resp, err := method.Handler(handler, ctx, func(msg any) error { + // ref: https://github.com/cosmos/cosmos-sdk/issues/18003 + asGogoProto := msg.(gogoproto.Message) + // NOTE: using gogoproto.Merge will fail for some reason unknown to me, but + // using proto.Merge with gogo messages seems to work fine. + proto.Merge(asGogoProto, m) + return nil + }, nil) + if err != nil { + return err + } + // merge on the resp, ref: https://github.com/cosmos/cosmos-sdk/issues/18003 + // NOTE: using gogoproto.Merge will fail for some reason unknown to me, but + // using proto.Merge with gogo messages seems to work fine. + proto.Merge(outResp.(gogoproto.Message), resp.(gogoproto.Message)) + return nil + default: + panic("unreachable") + } + }, nil +} + +// isProtov2 returns true if the given method accepts protov2 messages. +// Returns false if it does not. +// It uses the decoder function passed to the method handler to determine +// the type. Since the decoder function is passed in by the concrete implementer the expected +// message where bytes are unmarshaled to, we can use that to determine the type. +func isProtov2(md grpc.MethodDesc) (isV2Type bool, err error) { + pullRequestType := func(msg interface{}) error { + typ := reflect.TypeOf(msg) + switch { + case typ.Implements(protov2Type): + isV2Type = true + return nil + case typ.Implements(gogoType): + isV2Type = false + return nil + default: + err = fmt.Errorf("invalid request type %T, expected protov2 or gogo message", msg) + return nil + } + } + // doNotExecute is a dummy handler that stops the request execution. + doNotExecute := func(_ context.Context, _ any, _ *grpc.UnaryServerInfo, _ grpc.UnaryHandler) (any, error) { + return nil, nil + } + // we are allowed to pass in a nil context and nil request, since we are not actually executing the request. + // this is made possible by the doNotExecute function which immediately returns without calling other handlers. + _, _ = md.Handler(nil, nil, pullRequestType, doNotExecute) + return +} + +// RequestFullNameFromMethodDesc returns the fully-qualified name of the request message of the provided service's method. +func RequestFullNameFromMethodDesc(sd *grpc.ServiceDesc, method grpc.MethodDesc) (protoreflect.FullName, error) { + methodFullName := protoreflect.FullName(fmt.Sprintf("%s.%s", sd.ServiceName, method.MethodName)) + desc, err := gogoproto.HybridResolver.FindDescriptorByName(methodFullName) + if err != nil { + return "", fmt.Errorf("cannot find method descriptor %s", methodFullName) + } + methodDesc, ok := desc.(protoreflect.MethodDescriptor) + if !ok { + return "", fmt.Errorf("invalid method descriptor %s", methodFullName) + } + return methodDesc.Input().FullName(), nil +} diff --git a/internal/provwasm/simulation.go b/internal/provwasm/simulation.go index de70de2c96..f7b5037516 100644 --- a/internal/provwasm/simulation.go +++ b/internal/provwasm/simulation.go @@ -7,7 +7,7 @@ import ( "strings" "github.com/CosmWasm/wasmd/x/wasm" - "github.com/CosmWasm/wasmd/x/wasm/keeper" + wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" "github.com/CosmWasm/wasmd/x/wasm/types" sdkmath "cosmossdk.io/math" @@ -20,6 +20,7 @@ import ( moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" + "github.com/cosmos/cosmos-sdk/x/bank/exported" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" "github.com/cosmos/cosmos-sdk/x/bank/testutil" "github.com/cosmos/cosmos-sdk/x/simulation" @@ -45,13 +46,13 @@ type Wrapper struct { nk namekeeper.Keeper } -func NewWrapper(cdc codec.Codec, keeper *wasm.Keeper, validatorSetSource keeper.ValidatorSetSource, ak authkeeper.AccountKeeperI, bk bankkeeper.Keeper, nk namekeeper.Keeper) *Wrapper { +func NewWrapper(cdc codec.Codec, keeper *wasmkeeper.Keeper, validatorSetSource wasmkeeper.ValidatorSetSource, ak authkeeper.AccountKeeperI, bk bankkeeper.Keeper, nk namekeeper.Keeper, router *baseapp.MsgServiceRouter, ss exported.Subspace) *Wrapper { return &Wrapper{ - cdc: cdc, - // wasm: wasm.NewAppModule(cdc, keeper, validatorSetSource, ak, bk), // TODO[1760]: wasm: Extra args needed here. - ak: ak, - bk: bk, - nk: nk, + cdc: cdc, + wasm: wasm.NewAppModule(cdc, keeper, validatorSetSource, ak, bk, router, ss), + ak: ak, + bk: bk, + nk: nk, } } diff --git a/proto/buf.gen.gogo.yaml b/proto/buf.gen.gogo.yaml new file mode 100644 index 0000000000..c6788ff538 --- /dev/null +++ b/proto/buf.gen.gogo.yaml @@ -0,0 +1,8 @@ +version: v1 +plugins: + - name: gocosmos + out: . + opt: plugins=grpc,Mgoogle/protobuf/any.proto=github.com/cosmos/cosmos-sdk/codec/types + - name: grpc-gateway + out: . + opt: logtostderr=true,allow_colon_final_segments=true \ No newline at end of file diff --git a/proto/buf.gen.swagger.yaml b/proto/buf.gen.swagger.yaml new file mode 100644 index 0000000000..3c51600042 --- /dev/null +++ b/proto/buf.gen.swagger.yaml @@ -0,0 +1,10 @@ +version: v1 + +plugins: + - name: swagger + out: ./tmp-swagger-gen + opt: + - logtostderr=true + - fqn_for_swagger_name=true + - simple_operation_ids=true + strategy: all \ No newline at end of file diff --git a/proto/provenance/marker/v1/marker.proto b/proto/provenance/marker/v1/marker.proto index ee96e0e000..4a869ce161 100644 --- a/proto/provenance/marker/v1/marker.proto +++ b/proto/provenance/marker/v1/marker.proto @@ -51,7 +51,7 @@ message MarkerAccount { string denom = 5; // the total supply expected for a marker. This is the amount that is minted when a marker is created. string supply = 6 [ - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false, (gogoproto.moretags) = "json:\"total_supply\" yaml:\"total_supply\"" ]; diff --git a/proto/provenance/marker/v1/tx.proto b/proto/provenance/marker/v1/tx.proto index cad727ba4e..95cd931405 100644 --- a/proto/provenance/marker/v1/tx.proto +++ b/proto/provenance/marker/v1/tx.proto @@ -199,7 +199,7 @@ message MsgTransferResponse {} message MsgIbcTransferRequest { ibc.applications.transfer.v1.MsgTransfer transfer = 1 [ (gogoproto.nullable) = false, - (gogoproto.customtype) = "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types.MsgTransfer" + (gogoproto.customtype) = "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types.MsgTransfer" ]; string administrator = 2; } diff --git a/proto/provenance/reward/v1/reward.proto b/proto/provenance/reward/v1/reward.proto index fb2de89be5..494b3e5579 100644 --- a/proto/provenance/reward/v1/reward.proto +++ b/proto/provenance/reward/v1/reward.proto @@ -4,6 +4,7 @@ package provenance.reward.v1; import "gogoproto/gogo.proto"; import "google/protobuf/timestamp.proto"; import "cosmos/base/v1beta1/coin.proto"; +import "cosmos_proto/cosmos.proto"; option go_package = "github.com/provenance-io/provenance/x/reward/types"; option java_package = "io.provenance.reward.v1"; @@ -154,11 +155,17 @@ message ActionDelegate { // Maximum amount that the user must have currently delegated on the validator. cosmos.base.v1beta1.Coin maximum_delegation_amount = 4; // Minimum percentile that can be below the validator's power ranking. - string minimum_active_stake_percentile = 5 - [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false]; + string minimum_active_stake_percentile = 5 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; // Maximum percentile that can be below the validator's power ranking. - string maximum_active_stake_percentile = 6 - [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false]; + string maximum_active_stake_percentile = 6 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; } // ActionTransfer represents the transfer action and its required eligibility criteria. diff --git a/scripts/proto-update-deps.sh b/scripts/proto-update-deps.sh index 07950d78f2..ab54c6f97b 100755 --- a/scripts/proto-update-deps.sh +++ b/scripts/proto-update-deps.sh @@ -20,17 +20,15 @@ EOF DEST="${1:-$( cd "$( dirname "${BASH_SOURCE:-$0}" )/.."; pwd -P )/third_party}" # Retrieve versions from go.mod (single source of truth) -CONFIO_PROTO_URL="https://raw.githubusercontent.com/confio/ics23/go/$( go list -m github.com/confio/ics23/go | sed 's:.* ::' )/proofs.proto" -GOGO_PROTO_URL="https://raw.githubusercontent.com/regen-network/protobuf/$( go list -m github.com/gogo/protobuf | sed 's:.* ::' )/gogoproto/gogo.proto" +ICS23_PROTO_URL="https://raw.githubusercontent.com/cosmos/ics23/go/$( go list -m github.com/cosmos/ics23/go | sed 's:.* ::' )/proto/cosmos/ics23/v1/proofs.proto" +GOGO_PROTO_URL="https://raw.githubusercontent.com/cosmos/gogoproto/$( go list -m github.com/cosmos/gogoproto | sed 's:.* ::' )/gogoproto/gogo.proto" COSMOS_PROTO_URL="raw.githubusercontent.com/cosmos/cosmos-proto/$( go list -m github.com/cosmos/cosmos-proto | sed 's:.* ::' )/proto/cosmos_proto/cosmos.proto" COSMWASM_V1BETA1_TARBALL_URL='github.com/CosmWasm/wasmd/tarball/v0.17.0' # Backwards compatibility. Needed to serialize/deserialize older wasmd protos. COSMWASM_CUR_TARBALL_URL="$( go list -m github.com/CosmWasm/wasmd | sed 's:.* => ::; s: :/tarball/:;' )" IBC_PORT_V1_QUERY_URL='https://raw.githubusercontent.com/cosmos/ibc-go/v2.3.1/proto/ibc/core/port/v1/query.proto' # Backwards compatibility. -# TODO[1760]: proto: Ensure this ibc-go is correct. IBC_GO_TARBALL_URL="$( go list -m github.com/cosmos/ibc-go/v8 | sed 's:.* => ::; s: :/tarball/:; s:/v8::;')" COSMOS_TARBALL_URL="$( go list -m github.com/cosmos/cosmos-sdk | sed 's:.* => ::; s: :/tarball/:;' )" -# TODO[1760]: proto: Get the cometbft tarball instead of tendermint. -TM_TARBALL_URL="$( go list -m github.com/tendermint/tendermint | sed 's:.* => ::; s: :/tarball/:;' )" +COMETBFT_TARBALL_URL="$( go list -m github.com/cometbft/cometbft | sed 's:.* => ::; s: :/tarball/:;' )" # gnu tar on ubuntu requires the '--wildcards' flag tar='tar zx --strip-components 1' @@ -43,9 +41,6 @@ cd "$DEST" PROTO_EXPR='*/proto/**/*.proto' # Refresh third_party protos -CONFIO_FILE='proto/proofs.proto' -rm -f "$CONFIO_FILE" "$CONFIO_FILE.orig" -curl -f -sSL "$CONFIO_PROTO_URL" -o "$CONFIO_FILE.orig" --create-dirs GOGO_FILE='proto/gogoproto/gogo.proto' rm -f "$GOGO_FILE" @@ -70,16 +65,7 @@ rm -rf 'proto/cosmos' curl -f -sSL "$COSMOS_TARBALL_URL" | $tar --exclude='*/third_party' --exclude='*/testutil' "$PROTO_EXPR" rm -rf 'proto/tendermint' -curl -f -sSL "$TM_TARBALL_URL" | $tar --exclude='*/third_party' "$PROTO_EXPR" - -## insert go, java package option into proofs.proto file -## Issue link: https://github.com/confio/ics23/issues/32 (instead of a simple sed we need 4 lines cause bsd sed -i is incompatible) -# See: https://github.com/koalaman/shellcheck/wiki/SC2129 -{ - head -n3 "$CONFIO_FILE.orig" - printf 'option go_package = "github.com/confio/ics23/go";\n' - printf 'option java_package = "tech.confio.ics23";\n' - printf 'option java_multiple_files = true;\n' - tail -n+4 "$CONFIO_FILE.orig" -} > "$CONFIO_FILE" -rm "$CONFIO_FILE.orig" +curl -f -sSL "$COMETBFT_TARBALL_URL" | $tar --exclude='*/third_party' "$PROTO_EXPR" + +ICS23_FILE='proto/cosmos/ics23/v1/proofs.proto' +curl -f -sSL "$ICS23_PROTO_URL" -o "$ICS23_FILE" --create-dirs diff --git a/scripts/protoc-swagger-gen.sh b/scripts/protoc-swagger-gen.sh index 842e37598e..fb1f89aae5 100755 --- a/scripts/protoc-swagger-gen.sh +++ b/scripts/protoc-swagger-gen.sh @@ -15,23 +15,13 @@ for dir in $proto_dirs; do query_file=$(find "${dir}" -maxdepth 1 -name 'query.proto') if [[ -n "$query_file" ]]; then [[ -n "$verbose" ]] && printf 'Generating swagger file for [%s].\n' "$query_file" - buf protoc \ - -I "proto" \ - -I "third_party/proto" \ - "$query_file" \ - --swagger_out=./tmp-swagger-gen \ - --swagger_opt=logtostderr=true --swagger_opt=fqn_for_swagger_name=true --swagger_opt=simple_operation_ids=true + buf generate --template proto/buf.gen.swagger.yaml "$query_file" fi # generate swagger files for the transactions. tx_file=$(find "${dir}" -maxdepth 1 -name 'tx.proto') if [[ -n "$tx_file" ]]; then [[ -n "$verbose" ]] && printf 'Generating swagger file for [%s].\n' "$tx_file" - buf protoc \ - -I "proto" \ - -I "third_party/proto" \ - "$tx_file" \ - --swagger_out=./tmp-swagger-gen \ - --swagger_opt=logtostderr=true --swagger_opt=fqn_for_swagger_name=true --swagger_opt=simple_operation_ids=true + buf generate --template proto/buf.gen.swagger.yaml "$tx_file" fi done diff --git a/scripts/protocgen-any.sh b/scripts/protocgen-any.sh deleted file mode 100755 index 2a094265d3..0000000000 --- a/scripts/protocgen-any.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env bash - -# This script generates a custom wrapper for google.protobuf.Any in -# codec/types/any.pb.go with a custom generated struct that lives in -# codec/types/any.go - -set -eo pipefail - -go install github.com/gogo/protobuf/protoc-gen-gogotypes - -buf protoc -I "third_party/proto" --gogotypes_out=./codec/types third_party/proto/google/protobuf/any.proto -mv codec/types/google/protobuf/any.pb.go codec/types -rm -rf codec/types/third_party - -# This removes the call to RegisterType in the custom generated Any wrapper -# so that only the Any type provided by gogo protobuf is registered in the -# global gogo protobuf type registry, which we aren't actually using -sed '/proto\.RegisterType/d' codec/types/any.pb.go > tmp && mv tmp codec/types/any.pb.go diff --git a/scripts/protocgen.sh b/scripts/protocgen.sh index f821e453b3..eb3051fb7a 100755 --- a/scripts/protocgen.sh +++ b/scripts/protocgen.sh @@ -7,36 +7,27 @@ set -eo pipefail protoc_gen_gocosmos() { - if ! grep "github.com/gogo/protobuf => github.com/regen-network/protobuf" go.mod &>/dev/null ; then + if ! grep "github.com/cosmos/gogoproto" go.mod &>/dev/null ; then echo -e "\tPlease run this command from somewhere inside the cosmos-sdk folder." return 1 fi - go get github.com/regen-network/cosmos-proto/protoc-gen-gocosmos@latest 2>/dev/null + go get github.com/cosmos/gogoproto/protoc-gen-gocosmos@latest } protoc_gen_gocosmos proto_dirs=$(find ./proto -path -prune -o -name '*.proto' -print0 | xargs -0 -n1 dirname | sort | uniq) for dir in $proto_dirs; do - buf protoc \ - -I "proto" \ - -I "third_party/proto" \ - --gocosmos_out=plugins=grpc,\ -Mgoogle/protobuf/any.proto=github.com/cosmos/cosmos-sdk/codec/types:. \ - --grpc-gateway_out=logtostderr=true,allow_colon_final_segments=true:. \ - $(find "${dir}" -maxdepth 1 -name '*.proto') - + proto_files=$(find "${dir}" -maxdepth 1 -name '*.proto') + for file in $proto_files; do + # Check if the go_package in the file is pointing to provenance + if grep -q "option go_package.*provenance" "$file"; then + buf generate --template proto/buf.gen.gogo.yaml "$file" + fi + done done -# command to generate docs using protoc-gen-doc -buf protoc \ - -I "proto" \ - -I "third_party/proto" \ - --doc_out=./docs \ - --doc_opt=./docs/protodoc-markdown.tmpl,proto-docs.md \ - $(find "$(pwd)/proto" -maxdepth 5 -name '*.proto') - # move proto files to the right places cp -r github.com/provenance-io/provenance/* ./ rm -rf github.com diff --git a/third_party/proto/amino/amino.proto b/third_party/proto/amino/amino.proto new file mode 100644 index 0000000000..fb099b8ee6 --- /dev/null +++ b/third_party/proto/amino/amino.proto @@ -0,0 +1,84 @@ +syntax = "proto3"; + +package amino; + +import "google/protobuf/descriptor.proto"; + +// TODO(fdymylja): once we fully migrate to protov2 the go_package needs to be updated. +// We need this right now because gogoproto codegen needs to import the extension. +option go_package = "github.com/cosmos/cosmos-sdk/types/tx/amino"; + +extend google.protobuf.MessageOptions { + // name is the string used when registering a concrete + // type into the Amino type registry, via the Amino codec's + // `RegisterConcrete()` method. This string MUST be at most 39 + // characters long, or else the message will be rejected by the + // Ledger hardware device. + string name = 11110001; + + // encoding describes the encoding format used by Amino for the given + // message. The field type is chosen to be a string for + // flexibility, but it should ideally be short and expected to be + // machine-readable, for example "base64" or "utf8_json". We + // highly recommend to use underscores for word separation instead of spaces. + // + // If left empty, then the Amino encoding is expected to be the same as the + // Protobuf one. + // + // This annotation should not be confused with the `encoding` + // one which operates on the field level. + string message_encoding = 11110002; +} + +extend google.protobuf.FieldOptions { + // encoding describes the encoding format used by Amino for + // the given field. The field type is chosen to be a string for + // flexibility, but it should ideally be short and expected to be + // machine-readable, for example "base64" or "utf8_json". We + // highly recommend to use underscores for word separation instead of spaces. + // + // If left empty, then the Amino encoding is expected to be the same as the + // Protobuf one. + // + // This annotation should not be confused with the + // `message_encoding` one which operates on the message level. + string encoding = 11110003; + + // field_name sets a different field name (i.e. key name) in + // the amino JSON object for the given field. + // + // Example: + // + // message Foo { + // string bar = 1 [(amino.field_name) = "baz"]; + // } + // + // Then the Amino encoding of Foo will be: + // `{"baz":"some value"}` + string field_name = 11110004; + + // dont_omitempty sets the field in the JSON object even if + // its value is empty, i.e. equal to the Golang zero value. To learn what + // the zero values are, see https://go.dev/ref/spec#The_zero_value. + // + // Fields default to `omitempty`, which is the default behavior when this + // annotation is unset. When set to true, then the field value in the + // JSON object will be set, i.e. not `undefined`. + // + // Example: + // + // message Foo { + // string bar = 1; + // string baz = 2 [(amino.dont_omitempty) = true]; + // } + // + // f := Foo{}; + // out := AminoJSONEncoder(&f); + // out == {"baz":""} + bool dont_omitempty = 11110005; + + // oneof_name sets the type name for the given field oneof field. This is used + // by the Amino JSON encoder to encode the type of the oneof field, and must be the same string in + // the RegisterConcrete() method usage used to register the concrete type. + string oneof_name = 11110006; +} \ No newline at end of file diff --git a/third_party/proto/cosmos/capability/v1beta1/capability.proto b/third_party/proto/capability/v1/capability.proto similarity index 75% rename from third_party/proto/cosmos/capability/v1beta1/capability.proto rename to third_party/proto/capability/v1/capability.proto index c433566d32..31136cc5de 100644 --- a/third_party/proto/cosmos/capability/v1beta1/capability.proto +++ b/third_party/proto/capability/v1/capability.proto @@ -1,9 +1,11 @@ syntax = "proto3"; -package cosmos.capability.v1beta1; -option go_package = "github.com/cosmos/cosmos-sdk/x/capability/types"; +package capability.v1; import "gogoproto/gogo.proto"; +import "amino/amino.proto"; + +option go_package = "github.com/cosmos/ibc-go/modules/capability/types"; // Capability defines an implementation of an object capability. The index // provided to a Capability must be globally unique. @@ -26,5 +28,5 @@ message Owner { // CapabilityOwners defines a set of owners of a single Capability. The set of // owners must be unique. message CapabilityOwners { - repeated Owner owners = 1 [(gogoproto.nullable) = false]; + repeated Owner owners = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } diff --git a/third_party/proto/cosmos/capability/v1beta1/genesis.proto b/third_party/proto/capability/v1/genesis.proto similarity index 74% rename from third_party/proto/cosmos/capability/v1beta1/genesis.proto rename to third_party/proto/capability/v1/genesis.proto index b5482439c8..f345f6b2cf 100644 --- a/third_party/proto/cosmos/capability/v1beta1/genesis.proto +++ b/third_party/proto/capability/v1/genesis.proto @@ -1,10 +1,12 @@ syntax = "proto3"; -package cosmos.capability.v1beta1; + +package capability.v1; import "gogoproto/gogo.proto"; -import "cosmos/capability/v1beta1/capability.proto"; +import "capability/v1/capability.proto"; +import "amino/amino.proto"; -option go_package = "github.com/cosmos/cosmos-sdk/x/capability/types"; +option go_package = "github.com/cosmos/ibc-go/modules/capability/types"; // GenesisOwners defines the capability owners with their corresponding index. message GenesisOwners { @@ -12,7 +14,7 @@ message GenesisOwners { uint64 index = 1; // index_owners are the owners at the given index. - CapabilityOwners index_owners = 2 [(gogoproto.nullable) = false]; + CapabilityOwners index_owners = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // GenesisState defines the capability module's genesis state. @@ -22,5 +24,5 @@ message GenesisState { // owners represents a map from index to owners of the capability index // index key is string to allow amino marshalling. - repeated GenesisOwners owners = 2 [(gogoproto.nullable) = false]; + repeated GenesisOwners owners = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } diff --git a/third_party/proto/cosmos/app/module/v1alpha1/module.proto b/third_party/proto/cosmos/app/module/v1alpha1/module.proto deleted file mode 100644 index 487e195c32..0000000000 --- a/third_party/proto/cosmos/app/module/v1alpha1/module.proto +++ /dev/null @@ -1,13 +0,0 @@ -syntax = "proto3"; - -package cosmos.app.module.v1alpha1; - -import "cosmos/app/v1alpha1/module.proto"; - -// Module is the module config object for the cosmos.app v1 app module. -message Module { - option (cosmos.app.v1alpha1.module) = { - go_import: "github.com/cosmos/cosmos-sdk/app" - use_package: {name: "cosmos.app.v1alpha1"} - }; -} diff --git a/third_party/proto/cosmos/app/runtime/v1alpha1/module.proto b/third_party/proto/cosmos/app/runtime/v1alpha1/module.proto new file mode 100644 index 0000000000..c026121702 --- /dev/null +++ b/third_party/proto/cosmos/app/runtime/v1alpha1/module.proto @@ -0,0 +1,65 @@ +syntax = "proto3"; + +package cosmos.app.runtime.v1alpha1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object for the runtime module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "github.com/cosmos/cosmos-sdk/runtime" + use_package: {name: "cosmos.app.v1alpha1"} + }; + + // app_name is the name of the app. + string app_name = 1; + + // begin_blockers specifies the module names of begin blockers + // to call in the order in which they should be called. If this is left empty + // no begin blocker will be registered. + repeated string begin_blockers = 2; + + // end_blockers specifies the module names of the end blockers + // to call in the order in which they should be called. If this is left empty + // no end blocker will be registered. + repeated string end_blockers = 3; + + // init_genesis specifies the module names of init genesis functions + // to call in the order in which they should be called. If this is left empty + // no init genesis function will be registered. + repeated string init_genesis = 4; + + // export_genesis specifies the order in which to export module genesis data. + // If this is left empty, the init_genesis order will be used for export genesis + // if it is specified. + repeated string export_genesis = 5; + + // override_store_keys is an optional list of overrides for the module store keys + // to be used in keeper construction. + repeated StoreKeyConfig override_store_keys = 6; + + // order_migrations defines the order in which module migrations are performed. + // If this is left empty, it uses the default migration order. + // https://pkg.go.dev/github.com/cosmos/cosmos-sdk@v0.47.0-alpha2/types/module#DefaultMigrationsOrder + repeated string order_migrations = 7; + + // precommiters specifies the module names of the precommiters + // to call in the order in which they should be called. If this is left empty + // no precommit function will be registered. + repeated string precommiters = 8; + + // prepare_check_staters specifies the module names of the prepare_check_staters + // to call in the order in which they should be called. If this is left empty + // no preparecheckstate function will be registered. + repeated string prepare_check_staters = 9; +} + +// StoreKeyConfig may be supplied to override the default module store key, which +// is the module name. +message StoreKeyConfig { + // name of the module to override the store key of + string module_name = 1; + + // the kv store key to use instead of the module name. + string kv_store_key = 2; +} diff --git a/third_party/proto/cosmos/app/v1alpha1/config.proto b/third_party/proto/cosmos/app/v1alpha1/config.proto index ed77500611..ee3e70659e 100644 --- a/third_party/proto/cosmos/app/v1alpha1/config.proto +++ b/third_party/proto/cosmos/app/v1alpha1/config.proto @@ -14,6 +14,11 @@ import "google/protobuf/any.proto"; message Config { // modules are the module configurations for the app. repeated ModuleConfig modules = 1; + + // golang_bindings specifies explicit interface to implementation type bindings which + // depinject uses to resolve interface inputs to provider functions. The scope of this + // field's configuration is global (not module specific). + repeated GolangBinding golang_bindings = 2; } // ModuleConfig is a module configuration for an app. @@ -33,4 +38,18 @@ message ModuleConfig { // config is the config object for the module. Module config messages should // define a ModuleDescriptor using the cosmos.app.v1alpha1.is_module extension. google.protobuf.Any config = 2; + + // golang_bindings specifies explicit interface to implementation type bindings which + // depinject uses to resolve interface inputs to provider functions. The scope of this + // field's configuration is module specific. + repeated GolangBinding golang_bindings = 3; } + +// GolangBinding is an explicit interface type to implementing type binding for dependency injection. +message GolangBinding { + // interface_type is the interface type which will be bound to a specific implementation type + string interface_type = 1; + + // implementation is the implementing type which will be supplied when an input of type interface is requested + string implementation = 2; +} \ No newline at end of file diff --git a/third_party/proto/cosmos/app/v1alpha1/module.proto b/third_party/proto/cosmos/app/v1alpha1/module.proto index 990857172e..e541378650 100644 --- a/third_party/proto/cosmos/app/v1alpha1/module.proto +++ b/third_party/proto/cosmos/app/v1alpha1/module.proto @@ -57,7 +57,7 @@ message PackageReference { // // When a new version of a module is released and items are added to existing // .proto files, these definitions should contain comments of the form - // "Since Revision N" where N is an integer revision. + // "Since: Revision N" where N is an integer revision. // // When the module runtime starts up, it will check the pinned proto // image and panic if there are runtime protobuf definitions that are not diff --git a/third_party/proto/cosmos/auth/module/v1/module.proto b/third_party/proto/cosmos/auth/module/v1/module.proto new file mode 100644 index 0000000000..dbe46a157c --- /dev/null +++ b/third_party/proto/cosmos/auth/module/v1/module.proto @@ -0,0 +1,31 @@ +syntax = "proto3"; + +package cosmos.auth.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object for the auth module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "github.com/cosmos/cosmos-sdk/x/auth" + }; + + // bech32_prefix is the bech32 account prefix for the app. + string bech32_prefix = 1; + + // module_account_permissions are module account permissions. + repeated ModuleAccountPermission module_account_permissions = 2; + + // authority defines the custom module authority. If not set, defaults to the governance module. + string authority = 3; +} + +// ModuleAccountPermission represents permissions for a module account. +message ModuleAccountPermission { + // account is the name of the module. + string account = 1; + + // permissions are the permissions this module has. Currently recognized + // values are minter, burner and staking. + repeated string permissions = 2; +} diff --git a/third_party/proto/cosmos/auth/v1beta1/auth.proto b/third_party/proto/cosmos/auth/v1beta1/auth.proto index 963c6f1519..ebc18b69f0 100644 --- a/third_party/proto/cosmos/auth/v1beta1/auth.proto +++ b/third_party/proto/cosmos/auth/v1beta1/auth.proto @@ -1,6 +1,7 @@ syntax = "proto3"; package cosmos.auth.v1beta1; +import "amino/amino.proto"; import "cosmos_proto/cosmos.proto"; import "gogoproto/gogo.proto"; import "google/protobuf/any.proto"; @@ -11,33 +12,48 @@ option go_package = "github.com/cosmos/cosmos-sdk/x/auth/types"; // for basic account functionality. Any custom account type should extend this // type for additional functionality (e.g. vesting). message BaseAccount { - option (gogoproto.goproto_getters) = false; - option (gogoproto.goproto_stringer) = false; - option (gogoproto.equal) = false; + option (amino.name) = "cosmos-sdk/BaseAccount"; + option (gogoproto.goproto_getters) = false; + option (gogoproto.equal) = false; - option (cosmos_proto.implements_interface) = "AccountI"; + option (cosmos_proto.implements_interface) = "cosmos.auth.v1beta1.AccountI"; - string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - google.protobuf.Any pub_key = 2 [(gogoproto.jsontag) = "public_key,omitempty"]; - uint64 account_number = 3; - uint64 sequence = 4; + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + google.protobuf.Any pub_key = 2 [(gogoproto.jsontag) = "public_key,omitempty", (amino.field_name) = "public_key"]; + + uint64 account_number = 3; + uint64 sequence = 4; } // ModuleAccount defines an account for modules that holds coins on a pool. message ModuleAccount { + option (amino.name) = "cosmos-sdk/ModuleAccount"; + option (amino.message_encoding) = "module_account"; option (gogoproto.goproto_getters) = false; - option (gogoproto.goproto_stringer) = false; - option (cosmos_proto.implements_interface) = "ModuleAccountI"; + option (cosmos_proto.implements_interface) = "cosmos.auth.v1beta1.ModuleAccountI"; BaseAccount base_account = 1 [(gogoproto.embed) = true]; string name = 2; repeated string permissions = 3; } +// ModuleCredential represents a unclaimable pubkey for base accounts controlled by modules. +// +// Since: cosmos-sdk 0.47 +message ModuleCredential { + option (amino.name) = "cosmos-sdk/GroupAccountCredential"; + // module_name is the name of the module used for address derivation (passed into address.Module). + string module_name = 1; + // derivation_keys is for deriving a module account address (passed into address.Module) + // adding more keys creates sub-account addresses (passed into address.Derive) + repeated bytes derivation_keys = 2; +} + // Params defines the parameters for the auth module. message Params { - option (gogoproto.equal) = true; - option (gogoproto.goproto_stringer) = false; + option (amino.name) = "cosmos-sdk/x/auth/Params"; + option (gogoproto.equal) = true; uint64 max_memo_characters = 1; uint64 tx_sig_limit = 2; diff --git a/third_party/proto/cosmos/auth/v1beta1/genesis.proto b/third_party/proto/cosmos/auth/v1beta1/genesis.proto index c88b94ee4e..d1aa66e462 100644 --- a/third_party/proto/cosmos/auth/v1beta1/genesis.proto +++ b/third_party/proto/cosmos/auth/v1beta1/genesis.proto @@ -4,13 +4,14 @@ package cosmos.auth.v1beta1; import "google/protobuf/any.proto"; import "gogoproto/gogo.proto"; import "cosmos/auth/v1beta1/auth.proto"; +import "amino/amino.proto"; option go_package = "github.com/cosmos/cosmos-sdk/x/auth/types"; // GenesisState defines the auth module's genesis state. message GenesisState { - // params defines all the paramaters of the module. - Params params = 1 [(gogoproto.nullable) = false]; + // params defines all the parameters of the module. + Params params = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // accounts are the accounts present at genesis. repeated google.protobuf.Any accounts = 2; diff --git a/third_party/proto/cosmos/auth/v1beta1/query.proto b/third_party/proto/cosmos/auth/v1beta1/query.proto index 1775f12865..804f2ff080 100644 --- a/third_party/proto/cosmos/auth/v1beta1/query.proto +++ b/third_party/proto/cosmos/auth/v1beta1/query.proto @@ -7,45 +7,55 @@ import "google/protobuf/any.proto"; import "google/api/annotations.proto"; import "cosmos/auth/v1beta1/auth.proto"; import "cosmos_proto/cosmos.proto"; +import "cosmos/query/v1/query.proto"; option go_package = "github.com/cosmos/cosmos-sdk/x/auth/types"; // Query defines the gRPC querier service. service Query { - // Accounts returns all the existing accounts + // Accounts returns all the existing accounts. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. // // Since: cosmos-sdk 0.43 rpc Accounts(QueryAccountsRequest) returns (QueryAccountsResponse) { - option (google.api.http).get = "/cosmos/auth/v1beta1/accounts"; + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/auth/v1beta1/accounts"; } // Account returns account details based on address. rpc Account(QueryAccountRequest) returns (QueryAccountResponse) { - option (google.api.http).get = "/cosmos/auth/v1beta1/accounts/{address}"; + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/auth/v1beta1/accounts/{address}"; } // AccountAddressByID returns account address based on account number. // // Since: cosmos-sdk 0.46.2 rpc AccountAddressByID(QueryAccountAddressByIDRequest) returns (QueryAccountAddressByIDResponse) { - option (google.api.http).get = "/cosmos/auth/v1beta1/address_by_id/{id}"; + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/auth/v1beta1/address_by_id/{id}"; } // Params queries all parameters. rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { - option (google.api.http).get = "/cosmos/auth/v1beta1/params"; + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/auth/v1beta1/params"; } // ModuleAccounts returns all the existing module accounts. // // Since: cosmos-sdk 0.46 rpc ModuleAccounts(QueryModuleAccountsRequest) returns (QueryModuleAccountsResponse) { - option (google.api.http).get = "/cosmos/auth/v1beta1/module_accounts"; + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/auth/v1beta1/module_accounts"; } // ModuleAccountByName returns the module account info by module name rpc ModuleAccountByName(QueryModuleAccountByNameRequest) returns (QueryModuleAccountByNameResponse) { - option (google.api.http).get = "/cosmos/auth/v1beta1/module_accounts/{name}"; + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/auth/v1beta1/module_accounts/{name}"; } // Bech32Prefix queries bech32Prefix @@ -68,6 +78,14 @@ service Query { rpc AddressStringToBytes(AddressStringToBytesRequest) returns (AddressStringToBytesResponse) { option (google.api.http).get = "/cosmos/auth/v1beta1/bech32/{address_string}"; } + + // AccountInfo queries account info which is common to all account types. + // + // Since: cosmos-sdk 0.47 + rpc AccountInfo(QueryAccountInfoRequest) returns (QueryAccountInfoResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/auth/v1beta1/account_info/{address}"; + } } // QueryAccountsRequest is the request type for the Query/Accounts RPC method. @@ -83,7 +101,7 @@ message QueryAccountsRequest { // Since: cosmos-sdk 0.43 message QueryAccountsResponse { // accounts are the existing accounts - repeated google.protobuf.Any accounts = 1 [(cosmos_proto.accepts_interface) = "AccountI"]; + repeated google.protobuf.Any accounts = 1 [(cosmos_proto.accepts_interface) = "cosmos.auth.v1beta1.AccountI"]; // pagination defines the pagination in the response. cosmos.base.query.v1beta1.PageResponse pagination = 2; @@ -101,7 +119,7 @@ message QueryAccountRequest { // QueryAccountResponse is the response type for the Query/Account RPC method. message QueryAccountResponse { // account defines the account of the corresponding address. - google.protobuf.Any account = 1 [(cosmos_proto.accepts_interface) = "AccountI"]; + google.protobuf.Any account = 1 [(cosmos_proto.accepts_interface) = "cosmos.auth.v1beta1.AccountI"]; } // QueryParamsRequest is the request type for the Query/Params RPC method. @@ -122,7 +140,7 @@ message QueryModuleAccountsRequest {} // // Since: cosmos-sdk 0.46 message QueryModuleAccountsResponse { - repeated google.protobuf.Any accounts = 1 [(cosmos_proto.accepts_interface) = "ModuleAccountI"]; + repeated google.protobuf.Any accounts = 1 [(cosmos_proto.accepts_interface) = "cosmos.auth.v1beta1.ModuleAccountI"]; } // QueryModuleAccountByNameRequest is the request type for the Query/ModuleAccountByName RPC method. @@ -132,7 +150,7 @@ message QueryModuleAccountByNameRequest { // QueryModuleAccountByNameResponse is the response type for the Query/ModuleAccountByName RPC method. message QueryModuleAccountByNameResponse { - google.protobuf.Any account = 1 [(cosmos_proto.accepts_interface) = "ModuleAccountI"]; + google.protobuf.Any account = 1 [(cosmos_proto.accepts_interface) = "cosmos.auth.v1beta1.ModuleAccountI"]; } // Bech32PrefixRequest is the request type for Bech32Prefix rpc method. @@ -179,10 +197,17 @@ message AddressStringToBytesResponse { // // Since: cosmos-sdk 0.46.2 message QueryAccountAddressByIDRequest { + // Deprecated, use account_id instead + // // id is the account number of the address to be queried. This field // should have been an uint64 (like all account numbers), and will be // updated to uint64 in a future version of the auth query. - int64 id = 1; + int64 id = 1 [deprecated = true]; + + // account_id is the account number of the address to be queried. + // + // Since: cosmos-sdk 0.47 + uint64 account_id = 2; } // QueryAccountAddressByIDResponse is the response type for AccountAddressByID rpc method @@ -191,3 +216,21 @@ message QueryAccountAddressByIDRequest { message QueryAccountAddressByIDResponse { string account_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; } + +// QueryAccountInfoRequest is the Query/AccountInfo request type. +// +// Since: cosmos-sdk 0.47 +message QueryAccountInfoRequest { + + // address is the account address string. + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// QueryAccountInfoResponse is the Query/AccountInfo response type. +// +// Since: cosmos-sdk 0.47 +message QueryAccountInfoResponse { + + // info is the account info which is represented by BaseAccount. + BaseAccount info = 1; +} diff --git a/third_party/proto/cosmos/auth/v1beta1/tx.proto b/third_party/proto/cosmos/auth/v1beta1/tx.proto new file mode 100644 index 0000000000..1edee03709 --- /dev/null +++ b/third_party/proto/cosmos/auth/v1beta1/tx.proto @@ -0,0 +1,43 @@ +syntax = "proto3"; +package cosmos.auth.v1beta1; + +import "gogoproto/gogo.proto"; +import "cosmos_proto/cosmos.proto"; +import "cosmos/msg/v1/msg.proto"; +import "amino/amino.proto"; +import "cosmos/auth/v1beta1/auth.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/auth/types"; + +// Msg defines the x/auth Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // UpdateParams defines a (governance) operation for updating the x/auth module + // parameters. The authority defaults to the x/gov module account. + // + // Since: cosmos-sdk 0.47 + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); +} + +// MsgUpdateParams is the Msg/UpdateParams request type. +// +// Since: cosmos-sdk 0.47 +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "cosmos-sdk/x/auth/MsgUpdateParams"; + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // params defines the x/auth parameters to update. + // + // NOTE: All parameters must be supplied. + Params params = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +// +// Since: cosmos-sdk 0.47 +message MsgUpdateParamsResponse {} diff --git a/third_party/proto/cosmos/authz/module/v1/module.proto b/third_party/proto/cosmos/authz/module/v1/module.proto new file mode 100644 index 0000000000..8005866826 --- /dev/null +++ b/third_party/proto/cosmos/authz/module/v1/module.proto @@ -0,0 +1,12 @@ +syntax = "proto3"; + +package cosmos.authz.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object of the authz module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "github.com/cosmos/cosmos-sdk/x/authz" + }; +} diff --git a/third_party/proto/cosmos/authz/v1beta1/authz.proto b/third_party/proto/cosmos/authz/v1beta1/authz.proto index 75681b256c..3fee736436 100644 --- a/third_party/proto/cosmos/authz/v1beta1/authz.proto +++ b/third_party/proto/cosmos/authz/v1beta1/authz.proto @@ -2,6 +2,7 @@ syntax = "proto3"; package cosmos.authz.v1beta1; +import "amino/amino.proto"; import "cosmos_proto/cosmos.proto"; import "google/protobuf/timestamp.proto"; import "gogoproto/gogo.proto"; @@ -13,28 +14,17 @@ option (gogoproto.goproto_getters_all) = false; // GenericAuthorization gives the grantee unrestricted permissions to execute // the provided method on behalf of the granter's account. message GenericAuthorization { - option (cosmos_proto.implements_interface) = "Authorization"; + option (amino.name) = "cosmos-sdk/GenericAuthorization"; + option (cosmos_proto.implements_interface) = "cosmos.authz.v1beta1.Authorization"; // Msg, identified by it's type URL, to grant unrestricted permissions to execute string msg = 1; } -// CountAuthorization gives the grantee unrestricted permissions to execute -// the provided method on behalf of the granter's account up to the allowed authorizations count. -message CountAuthorization { - option (cosmos_proto.implements_interface) = "Authorization"; - - // Msg, identified by it's type URL, to grant unrestricted permissions to execute - string msg = 1; - - // Allowed number of authorizations assigned to grantee - int32 allowed_authorizations = 2; -} - // Grant gives permissions to execute // the provide method with expiration time. message Grant { - google.protobuf.Any authorization = 1 [(cosmos_proto.accepts_interface) = "Authorization"]; + google.protobuf.Any authorization = 1 [(cosmos_proto.accepts_interface) = "cosmos.authz.v1beta1.Authorization"]; // time when the grant will expire and will be pruned. If null, then the grant // doesn't have a time expiration (other conditions in `authorization` // may apply to invalidate the grant) @@ -47,7 +37,7 @@ message GrantAuthorization { string granter = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; string grantee = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - google.protobuf.Any authorization = 3 [(cosmos_proto.accepts_interface) = "Authorization"]; + google.protobuf.Any authorization = 3 [(cosmos_proto.accepts_interface) = "cosmos.authz.v1beta1.Authorization"]; google.protobuf.Timestamp expiration = 4 [(gogoproto.stdtime) = true]; } diff --git a/third_party/proto/cosmos/authz/v1beta1/genesis.proto b/third_party/proto/cosmos/authz/v1beta1/genesis.proto index 310f62656f..9fefff4506 100644 --- a/third_party/proto/cosmos/authz/v1beta1/genesis.proto +++ b/third_party/proto/cosmos/authz/v1beta1/genesis.proto @@ -4,10 +4,11 @@ package cosmos.authz.v1beta1; import "gogoproto/gogo.proto"; import "cosmos/authz/v1beta1/authz.proto"; +import "amino/amino.proto"; option go_package = "github.com/cosmos/cosmos-sdk/x/authz"; // GenesisState defines the authz module's genesis state. message GenesisState { - repeated GrantAuthorization authorization = 1 [(gogoproto.nullable) = false]; + repeated GrantAuthorization authorization = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } diff --git a/third_party/proto/cosmos/authz/v1beta1/query.proto b/third_party/proto/cosmos/authz/v1beta1/query.proto index 62154ac19a..fcd56815a6 100644 --- a/third_party/proto/cosmos/authz/v1beta1/query.proto +++ b/third_party/proto/cosmos/authz/v1beta1/query.proto @@ -65,7 +65,7 @@ message QueryGranterGrantsResponse { cosmos.base.query.v1beta1.PageResponse pagination = 2; } -// QueryGranteeGrantsRequest is the request type for the Query/IssuedGrants RPC method. +// QueryGranteeGrantsRequest is the request type for the Query/GranteeGrants RPC method. message QueryGranteeGrantsRequest { string grantee = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; diff --git a/third_party/proto/cosmos/authz/v1beta1/tx.proto b/third_party/proto/cosmos/authz/v1beta1/tx.proto index 068218fff8..a1abff0d6f 100644 --- a/third_party/proto/cosmos/authz/v1beta1/tx.proto +++ b/third_party/proto/cosmos/authz/v1beta1/tx.proto @@ -7,12 +7,15 @@ import "gogoproto/gogo.proto"; import "google/protobuf/any.proto"; import "cosmos/authz/v1beta1/authz.proto"; import "cosmos/msg/v1/msg.proto"; +import "amino/amino.proto"; option go_package = "github.com/cosmos/cosmos-sdk/x/authz"; option (gogoproto.goproto_getters_all) = false; // Msg defines the authz Msg service. service Msg { + option (cosmos.msg.v1.service) = true; + // Grant grants the provided authorization to the grantee on the granter's // account with the provided expiration time. If there is already a grant // for the given (granter, grantee, Authorization) triple, then the grant @@ -33,38 +36,41 @@ service Msg { // on behalf of the granter with the provided expiration time. message MsgGrant { option (cosmos.msg.v1.signer) = "granter"; + option (amino.name) = "cosmos-sdk/MsgGrant"; string granter = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; string grantee = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - cosmos.authz.v1beta1.Grant grant = 3 [(gogoproto.nullable) = false]; + cosmos.authz.v1beta1.Grant grant = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } -// MsgExecResponse defines the Msg/MsgExecResponse response type. -message MsgExecResponse { - repeated bytes results = 1; -} +// MsgGrantResponse defines the Msg/MsgGrant response type. +message MsgGrantResponse {} // MsgExec attempts to execute the provided messages using // authorizations granted to the grantee. Each message should have only // one signer corresponding to the granter of the authorization. message MsgExec { option (cosmos.msg.v1.signer) = "grantee"; + option (amino.name) = "cosmos-sdk/MsgExec"; string grantee = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - // Authorization Msg requests to execute. Each msg must implement Authorization interface + // Execute Msg. // The x/authz will try to find a grant matching (msg.signers[0], grantee, MsgTypeURL(msg)) // triple and validate it. - repeated google.protobuf.Any msgs = 2 [(cosmos_proto.accepts_interface) = "sdk.Msg, authz.Authorization"]; + repeated google.protobuf.Any msgs = 2 [(cosmos_proto.accepts_interface) = "cosmos.base.v1beta1.Msg"]; } -// MsgGrantResponse defines the Msg/MsgGrant response type. -message MsgGrantResponse {} +// MsgExecResponse defines the Msg/MsgExecResponse response type. +message MsgExecResponse { + repeated bytes results = 1; +} // MsgRevoke revokes any authorization with the provided sdk.Msg type on the // granter's account with that has been granted to the grantee. message MsgRevoke { option (cosmos.msg.v1.signer) = "granter"; + option (amino.name) = "cosmos-sdk/MsgRevoke"; string granter = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; string grantee = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; diff --git a/third_party/proto/cosmos/autocli/v1/options.proto b/third_party/proto/cosmos/autocli/v1/options.proto new file mode 100644 index 0000000000..b023490c97 --- /dev/null +++ b/third_party/proto/cosmos/autocli/v1/options.proto @@ -0,0 +1,124 @@ +syntax = "proto3"; + +package cosmos.autocli.v1; + +option go_package = "cosmossdk.io/api/cosmos/base/cli/v1;cliv1"; + +// ModuleOptions describes the CLI options for a Cosmos SDK module. +message ModuleOptions { + // tx describes the tx commands for the module. + ServiceCommandDescriptor tx = 1; + + // query describes the queries commands for the module. + ServiceCommandDescriptor query = 2; +} + +// ServiceCommandDescriptor describes a CLI command based on a protobuf service. +message ServiceCommandDescriptor { + + // service is the fully qualified name of the protobuf service to build + // the command from. It can be left empty if sub_commands are used instead + // which may be the case if a module provides multiple tx and/or query services. + string service = 1; + + // rpc_command_options are options for commands generated from rpc methods. + // If no options are specified for a given rpc method on the service, a + // command will be generated for that method with the default options. + repeated RpcCommandOptions rpc_command_options = 2; + + // sub_commands is a map of optional sub-commands for this command based on + // different protobuf services. The map key is used as the name of the + // sub-command. + map sub_commands = 3; +} + +// RpcCommandOptions specifies options for commands generated from protobuf +// rpc methods. +message RpcCommandOptions { + // rpc_method is short name of the protobuf rpc method that this command is + // generated from. + string rpc_method = 1; + + // use is the one-line usage method. It also allows specifying an alternate + // name for the command as the first word of the usage text. + // + // By default the name of an rpc command is the kebab-case short name of the + // rpc method. + string use = 2; + + // long is the long message shown in the 'help ' output. + string long = 3; + + // short is the short description shown in the 'help' output. + string short = 4; + + // example is examples of how to use the command. + string example = 5; + + // alias is an array of aliases that can be used instead of the first word in Use. + repeated string alias = 6; + + // suggest_for is an array of command names for which this command will be suggested - + // similar to aliases but only suggests. + repeated string suggest_for = 7; + + // deprecated defines, if this command is deprecated and should print this string when used. + string deprecated = 8; + + // version defines the version for this command. If this value is non-empty and the command does not + // define a "version" flag, a "version" boolean flag will be added to the command and, if specified, + // will print content of the "Version" variable. A shorthand "v" flag will also be added if the + // command does not define one. + string version = 9; + + // flag_options are options for flags generated from rpc request fields. + // By default all request fields are configured as flags. They can + // also be configured as positional args instead using positional_args. + map flag_options = 10; + + // positional_args specifies positional arguments for the command. + repeated PositionalArgDescriptor positional_args = 11; + + // skip specifies whether to skip this rpc method when generating commands. + bool skip = 12; +} + +// FlagOptions are options for flags generated from rpc request fields. +// By default, all request fields are configured as flags based on the +// kebab-case name of the field. Fields can be turned into positional arguments +// instead by using RpcCommandOptions.positional_args. +message FlagOptions { + + // name is an alternate name to use for the field flag. + string name = 1; + + // shorthand is a one-letter abbreviated flag. + string shorthand = 2; + + // usage is the help message. + string usage = 3; + + // default_value is the default value as text. + string default_value = 4; + + // deprecated is the usage text to show if this flag is deprecated. + string deprecated = 6; + + // shorthand_deprecated is the usage text to show if the shorthand of this flag is deprecated. + string shorthand_deprecated = 7; + + // hidden hides the flag from help/usage text + bool hidden = 8; +} + +// PositionalArgDescriptor describes a positional argument. +message PositionalArgDescriptor { + // proto_field specifies the proto field to use as the positional arg. Any + // fields used as positional args will not have a flag generated. + string proto_field = 1; + + // varargs makes a positional parameter a varargs parameter. This can only be + // applied to last positional parameter and the proto_field must a repeated + // field. + bool varargs = 2; +} diff --git a/third_party/proto/cosmos/autocli/v1/query.proto b/third_party/proto/cosmos/autocli/v1/query.proto new file mode 100644 index 0000000000..a998978ef0 --- /dev/null +++ b/third_party/proto/cosmos/autocli/v1/query.proto @@ -0,0 +1,28 @@ +syntax = "proto3"; + +package cosmos.autocli.v1; + +import "cosmos/autocli/v1/options.proto"; +import "cosmos/query/v1/query.proto"; + +option go_package = "cosmossdk.io/api/cosmos/base/cli/v1;cliv1"; + +// RemoteInfoService provides clients with the information they need +// to build dynamically CLI clients for remote chains. +service Query { + // AppOptions returns the autocli options for all of the modules in an app. + rpc AppOptions(AppOptionsRequest) returns (AppOptionsResponse) { + // NOTE: autocli options SHOULD NOT be part of consensus and module_query_safe + // should be kept as false. + option (cosmos.query.v1.module_query_safe) = false; + } +} + +// AppOptionsRequest is the RemoteInfoService/AppOptions request type. +message AppOptionsRequest {} + +// AppOptionsResponse is the RemoteInfoService/AppOptions response type. +message AppOptionsResponse { + // module_options is a map of module name to autocli module options. + map module_options = 1; +} diff --git a/third_party/proto/cosmos/bank/module/v1/module.proto b/third_party/proto/cosmos/bank/module/v1/module.proto new file mode 100644 index 0000000000..2849dbf089 --- /dev/null +++ b/third_party/proto/cosmos/bank/module/v1/module.proto @@ -0,0 +1,20 @@ +syntax = "proto3"; + +package cosmos.bank.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object of the bank module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "github.com/cosmos/cosmos-sdk/x/bank" + }; + + // blocked_module_accounts_override configures exceptional module accounts which should be blocked from receiving + // funds. If left empty it defaults to the list of account names supplied in the auth module configuration as + // module_account_permissions + repeated string blocked_module_accounts_override = 1; + + // authority defines the custom module authority. If not set, defaults to the governance module. + string authority = 2; +} \ No newline at end of file diff --git a/third_party/proto/cosmos/bank/v1beta1/authz.proto b/third_party/proto/cosmos/bank/v1beta1/authz.proto index c69ae91d40..d42c619a5b 100644 --- a/third_party/proto/cosmos/bank/v1beta1/authz.proto +++ b/third_party/proto/cosmos/bank/v1beta1/authz.proto @@ -1,6 +1,7 @@ syntax = "proto3"; package cosmos.bank.v1beta1; +import "amino/amino.proto"; import "gogoproto/gogo.proto"; import "cosmos_proto/cosmos.proto"; import "cosmos/base/v1beta1/coin.proto"; @@ -12,14 +13,19 @@ option go_package = "github.com/cosmos/cosmos-sdk/x/bank/types"; // // Since: cosmos-sdk 0.43 message SendAuthorization { - option (cosmos_proto.implements_interface) = "Authorization"; + option (cosmos_proto.implements_interface) = "cosmos.authz.v1beta1.Authorization"; + option (amino.name) = "cosmos-sdk/SendAuthorization"; - repeated cosmos.base.v1beta1.Coin spend_limit = 1 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; + repeated cosmos.base.v1beta1.Coin spend_limit = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; // allow_list specifies an optional list of addresses to whom the grantee can send tokens on behalf of the // granter. If omitted, any recipient is allowed. // // Since: cosmos-sdk 0.47 - repeated string allow_list = 2; + repeated string allow_list = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; } diff --git a/third_party/proto/cosmos/bank/v1beta1/bank.proto b/third_party/proto/cosmos/bank/v1beta1/bank.proto index 0856398440..cbf6a41cf8 100644 --- a/third_party/proto/cosmos/bank/v1beta1/bank.proto +++ b/third_party/proto/cosmos/bank/v1beta1/bank.proto @@ -5,12 +5,13 @@ import "gogoproto/gogo.proto"; import "cosmos_proto/cosmos.proto"; import "cosmos/base/v1beta1/coin.proto"; import "cosmos/msg/v1/msg.proto"; +import "amino/amino.proto"; option go_package = "github.com/cosmos/cosmos-sdk/x/bank/types"; // Params defines the parameters for the bank module. message Params { - option (gogoproto.goproto_stringer) = false; + option (amino.name) = "cosmos-sdk/x/bank/Params"; // Deprecated: Use of SendEnabled in params is deprecated. // For genesis, use the newly added send_enabled field in the genesis object. // Storage, lookup, and manipulation of this information is now in the keeper. @@ -23,10 +24,9 @@ message Params { // SendEnabled maps coin denom to a send_enabled status (whether a denom is // sendable). message SendEnabled { - option (gogoproto.equal) = true; - option (gogoproto.goproto_stringer) = false; - string denom = 1; - bool enabled = 2; + option (gogoproto.equal) = true; + string denom = 1; + bool enabled = 2; } // Input models transaction input. @@ -37,8 +37,12 @@ message Input { option (gogoproto.goproto_getters) = false; string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - repeated cosmos.base.v1beta1.Coin coins = 2 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; + repeated cosmos.base.v1beta1.Coin coins = 2 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; } // Output models transaction outputs. @@ -47,8 +51,12 @@ message Output { option (gogoproto.goproto_getters) = false; string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - repeated cosmos.base.v1beta1.Coin coins = 2 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; + repeated cosmos.base.v1beta1.Coin coins = 2 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; } // Supply represents a struct that passively keeps track of the total supply @@ -60,10 +68,14 @@ message Supply { option (gogoproto.equal) = true; option (gogoproto.goproto_getters) = false; - option (cosmos_proto.implements_interface) = "*github.com/cosmos/cosmos-sdk/x/bank/migrations/v040.SupplyI"; + option (cosmos_proto.implements_interface) = "cosmos.bank.v1beta1.SupplyI"; - repeated cosmos.base.v1beta1.Coin total = 1 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; + repeated cosmos.base.v1beta1.Coin total = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; } // DenomUnit represents a struct that describes a given diff --git a/third_party/proto/cosmos/bank/v1beta1/genesis.proto b/third_party/proto/cosmos/bank/v1beta1/genesis.proto index 664a990649..caf05a95bb 100644 --- a/third_party/proto/cosmos/bank/v1beta1/genesis.proto +++ b/third_party/proto/cosmos/bank/v1beta1/genesis.proto @@ -5,29 +5,34 @@ import "gogoproto/gogo.proto"; import "cosmos/base/v1beta1/coin.proto"; import "cosmos/bank/v1beta1/bank.proto"; import "cosmos_proto/cosmos.proto"; +import "amino/amino.proto"; option go_package = "github.com/cosmos/cosmos-sdk/x/bank/types"; // GenesisState defines the bank module's genesis state. message GenesisState { // params defines all the parameters of the module. - Params params = 1 [(gogoproto.nullable) = false]; + Params params = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // balances is an array containing the balances of all the accounts. - repeated Balance balances = 2 [(gogoproto.nullable) = false]; + repeated Balance balances = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // supply represents the total supply. If it is left empty, then supply will be calculated based on the provided // balances. Otherwise, it will be used to validate that the sum of the balances equals this amount. - repeated cosmos.base.v1beta1.Coin supply = 3 - [(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", (gogoproto.nullable) = false]; + repeated cosmos.base.v1beta1.Coin supply = 3 [ + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; // denom_metadata defines the metadata of the different coins. - repeated Metadata denom_metadata = 4 [(gogoproto.nullable) = false]; + repeated Metadata denom_metadata = 4 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // send_enabled defines the denoms where send is enabled or disabled. // // Since: cosmos-sdk 0.47 - repeated SendEnabled send_enabled = 5 [(gogoproto.nullable) = false]; + repeated SendEnabled send_enabled = 5 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // Balance defines an account address and balance pair used in the bank module's @@ -40,6 +45,10 @@ message Balance { string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; // coins defines the different coins this balance holds. - repeated cosmos.base.v1beta1.Coin coins = 2 - [(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", (gogoproto.nullable) = false]; + repeated cosmos.base.v1beta1.Coin coins = 2 [ + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; } diff --git a/third_party/proto/cosmos/bank/v1beta1/query.proto b/third_party/proto/cosmos/bank/v1beta1/query.proto index 4652657c86..5b21a30bed 100644 --- a/third_party/proto/cosmos/bank/v1beta1/query.proto +++ b/third_party/proto/cosmos/bank/v1beta1/query.proto @@ -7,6 +7,8 @@ import "google/api/annotations.proto"; import "cosmos/base/v1beta1/coin.proto"; import "cosmos/bank/v1beta1/bank.proto"; import "cosmos_proto/cosmos.proto"; +import "cosmos/query/v1/query.proto"; +import "amino/amino.proto"; option go_package = "github.com/cosmos/cosmos-sdk/x/bank/types"; @@ -14,54 +16,105 @@ option go_package = "github.com/cosmos/cosmos-sdk/x/bank/types"; service Query { // Balance queries the balance of a single coin for a single account. rpc Balance(QueryBalanceRequest) returns (QueryBalanceResponse) { - option (google.api.http).get = "/cosmos/bank/v1beta1/balances/{address}/by_denom"; + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/bank/v1beta1/balances/{address}/by_denom"; } // AllBalances queries the balance of all coins for a single account. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. rpc AllBalances(QueryAllBalancesRequest) returns (QueryAllBalancesResponse) { - option (google.api.http).get = "/cosmos/bank/v1beta1/balances/{address}"; + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/bank/v1beta1/balances/{address}"; } - // SpendableBalances queries the spenable balance of all coins for a single + // SpendableBalances queries the spendable balance of all coins for a single // account. // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. + // // Since: cosmos-sdk 0.46 rpc SpendableBalances(QuerySpendableBalancesRequest) returns (QuerySpendableBalancesResponse) { - option (google.api.http).get = "/cosmos/bank/v1beta1/spendable_balances/{address}"; + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/bank/v1beta1/spendable_balances/{address}"; + } + + // SpendableBalanceByDenom queries the spendable balance of a single denom for + // a single account. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. + // + // Since: cosmos-sdk 0.47 + rpc SpendableBalanceByDenom(QuerySpendableBalanceByDenomRequest) returns (QuerySpendableBalanceByDenomResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/bank/v1beta1/spendable_balances/{address}/by_denom"; } // TotalSupply queries the total supply of all coins. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. rpc TotalSupply(QueryTotalSupplyRequest) returns (QueryTotalSupplyResponse) { - option (google.api.http).get = "/cosmos/bank/v1beta1/supply"; + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/bank/v1beta1/supply"; } // SupplyOf queries the supply of a single coin. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. rpc SupplyOf(QuerySupplyOfRequest) returns (QuerySupplyOfResponse) { - option (google.api.http).get = "/cosmos/bank/v1beta1/supply/by_denom"; + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/bank/v1beta1/supply/by_denom"; } // Params queries the parameters of x/bank module. rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { - option (google.api.http).get = "/cosmos/bank/v1beta1/params"; + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/bank/v1beta1/params"; } - // DenomsMetadata queries the client metadata of a given coin denomination. + // DenomMetadata queries the client metadata of a given coin denomination. rpc DenomMetadata(QueryDenomMetadataRequest) returns (QueryDenomMetadataResponse) { - option (google.api.http).get = "/cosmos/bank/v1beta1/denoms_metadata/{denom}"; + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/bank/v1beta1/denoms_metadata/{denom}"; } + // DenomMetadataByQueryString queries the client metadata of a given coin denomination. + rpc DenomMetadataByQueryString(QueryDenomMetadataByQueryStringRequest) + returns (QueryDenomMetadataByQueryStringResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/bank/v1beta1/denoms_metadata_by_query_string"; + } // DenomsMetadata queries the client metadata for all registered coin // denominations. rpc DenomsMetadata(QueryDenomsMetadataRequest) returns (QueryDenomsMetadataResponse) { - option (google.api.http).get = "/cosmos/bank/v1beta1/denoms_metadata"; + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/bank/v1beta1/denoms_metadata"; } // DenomOwners queries for all account addresses that own a particular token // denomination. // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. + // // Since: cosmos-sdk 0.46 rpc DenomOwners(QueryDenomOwnersRequest) returns (QueryDenomOwnersResponse) { - option (google.api.http).get = "/cosmos/bank/v1beta1/denom_owners/{denom}"; + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/bank/v1beta1/denom_owners/{denom}"; + } + + // DenomOwnersByQuery queries for all account addresses that own a particular token + // denomination. + // + // Since: cosmos-sdk 0.50.3 + rpc DenomOwnersByQuery(QueryDenomOwnersByQueryRequest) returns (QueryDenomOwnersByQueryResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/bank/v1beta1/denom_owners_by_query"; } // SendEnabled queries for SendEnabled entries. @@ -72,7 +125,8 @@ service Query { // // Since: cosmos-sdk 0.47 rpc SendEnabled(QuerySendEnabledRequest) returns (QuerySendEnabledResponse) { - option (google.api.http).get = "/cosmos/bank/v1beta1/send_enabled"; + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/bank/v1beta1/send_enabled"; } } @@ -104,14 +158,23 @@ message QueryAllBalancesRequest { // pagination defines an optional pagination for the request. cosmos.base.query.v1beta1.PageRequest pagination = 2; + + // resolve_denom is the flag to resolve the denom into a human-readable form from the metadata. + // + // Since: cosmos-sdk 0.50 + bool resolve_denom = 3; } // QueryAllBalancesResponse is the response type for the Query/AllBalances RPC // method. message QueryAllBalancesResponse { // balances is the balances of all the coins. - repeated cosmos.base.v1beta1.Coin balances = 1 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; + repeated cosmos.base.v1beta1.Coin balances = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; // pagination defines the pagination in the response. cosmos.base.query.v1beta1.PageResponse pagination = 2; @@ -138,13 +201,41 @@ message QuerySpendableBalancesRequest { // Since: cosmos-sdk 0.46 message QuerySpendableBalancesResponse { // balances is the spendable balances of all the coins. - repeated cosmos.base.v1beta1.Coin balances = 1 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; + repeated cosmos.base.v1beta1.Coin balances = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; // pagination defines the pagination in the response. cosmos.base.query.v1beta1.PageResponse pagination = 2; } +// QuerySpendableBalanceByDenomRequest defines the gRPC request structure for +// querying an account's spendable balance for a specific denom. +// +// Since: cosmos-sdk 0.47 +message QuerySpendableBalanceByDenomRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // address is the address to query balances for. + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // denom is the coin denom to query balances for. + string denom = 2; +} + +// QuerySpendableBalanceByDenomResponse defines the gRPC response structure for +// querying an account's spendable balance for a specific denom. +// +// Since: cosmos-sdk 0.47 +message QuerySpendableBalanceByDenomResponse { + // balance is the balance of the coin. + cosmos.base.v1beta1.Coin balance = 1; +} + // QueryTotalSupplyRequest is the request type for the Query/TotalSupply RPC // method. message QueryTotalSupplyRequest { @@ -161,8 +252,12 @@ message QueryTotalSupplyRequest { // method message QueryTotalSupplyResponse { // supply is the supply of the coins - repeated cosmos.base.v1beta1.Coin supply = 1 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; + repeated cosmos.base.v1beta1.Coin supply = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; // pagination defines the pagination in the response. // @@ -179,7 +274,7 @@ message QuerySupplyOfRequest { // QuerySupplyOfResponse is the response type for the Query/SupplyOf RPC method. message QuerySupplyOfResponse { // amount is the supply of the coin. - cosmos.base.v1beta1.Coin amount = 1 [(gogoproto.nullable) = false]; + cosmos.base.v1beta1.Coin amount = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // QueryParamsRequest defines the request type for querying x/bank parameters. @@ -187,7 +282,8 @@ message QueryParamsRequest {} // QueryParamsResponse defines the response type for querying x/bank parameters. message QueryParamsResponse { - Params params = 1 [(gogoproto.nullable) = false]; + // params provides the parameters of the bank module. + Params params = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // QueryDenomsMetadataRequest is the request type for the Query/DenomsMetadata RPC method. @@ -200,7 +296,7 @@ message QueryDenomsMetadataRequest { // method. message QueryDenomsMetadataResponse { // metadata provides the client information for all the registered tokens. - repeated Metadata metadatas = 1 [(gogoproto.nullable) = false]; + repeated Metadata metadatas = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // pagination defines the pagination in the response. cosmos.base.query.v1beta1.PageResponse pagination = 2; @@ -216,7 +312,21 @@ message QueryDenomMetadataRequest { // method. message QueryDenomMetadataResponse { // metadata describes and provides all the client information for the requested token. - Metadata metadata = 1 [(gogoproto.nullable) = false]; + Metadata metadata = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// QueryDenomMetadataByQueryStringRequest is the request type for the Query/DenomMetadata RPC method. +// Identical with QueryDenomMetadataRequest but receives denom as query string. +message QueryDenomMetadataByQueryStringRequest { + // denom is the coin denom to query the metadata for. + string denom = 1; +} + +// QueryDenomMetadataByQueryStringResponse is the response type for the Query/DenomMetadata RPC +// method. Identical with QueryDenomMetadataResponse but receives denom as query string in request. +message QueryDenomMetadataByQueryStringResponse { + // metadata describes and provides all the client information for the requested token. + Metadata metadata = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // QueryDenomOwnersRequest defines the request type for the DenomOwners RPC query, @@ -240,7 +350,7 @@ message DenomOwner { string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; // balance is the balance of the denominated coin for an account. - cosmos.base.v1beta1.Coin balance = 2 [(gogoproto.nullable) = false]; + cosmos.base.v1beta1.Coin balance = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // QueryDenomOwnersResponse defines the RPC response of a DenomOwners RPC query. @@ -253,13 +363,37 @@ message QueryDenomOwnersResponse { cosmos.base.query.v1beta1.PageResponse pagination = 2; } +// QueryDenomOwnersByQueryRequest defines the request type for the DenomOwnersByQuery RPC query, +// which queries for a paginated set of all account holders of a particular +// denomination. +// +// Since: cosmos-sdk 0.50.3 +message QueryDenomOwnersByQueryRequest { + // denom defines the coin denomination to query all account holders for. + string denom = 1; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryDenomOwnersByQueryResponse defines the RPC response of a DenomOwnersByQuery RPC query. +// +// Since: cosmos-sdk 0.50.3 +message QueryDenomOwnersByQueryResponse { + repeated DenomOwner denom_owners = 1; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + // QuerySendEnabledRequest defines the RPC request for looking up SendEnabled entries. // // Since: cosmos-sdk 0.47 message QuerySendEnabledRequest { // denoms is the specific denoms you want look up. Leave empty to get all entries. repeated string denoms = 1; - // pagination defines an optional pagination for the request. + // pagination defines an optional pagination for the request. This field is + // only read if the denoms field is empty. cosmos.base.query.v1beta1.PageRequest pagination = 99; } @@ -268,6 +402,7 @@ message QuerySendEnabledRequest { // Since: cosmos-sdk 0.47 message QuerySendEnabledResponse { repeated SendEnabled send_enabled = 1; - // pagination defines the pagination in the response. + // pagination defines the pagination in the response. This field is only + // populated if the denoms field in the request is empty. cosmos.base.query.v1beta1.PageResponse pagination = 99; } diff --git a/third_party/proto/cosmos/bank/v1beta1/tx.proto b/third_party/proto/cosmos/bank/v1beta1/tx.proto index 8aa1246b01..a4e8fae41f 100644 --- a/third_party/proto/cosmos/bank/v1beta1/tx.proto +++ b/third_party/proto/cosmos/bank/v1beta1/tx.proto @@ -6,32 +6,51 @@ import "cosmos/base/v1beta1/coin.proto"; import "cosmos/bank/v1beta1/bank.proto"; import "cosmos_proto/cosmos.proto"; import "cosmos/msg/v1/msg.proto"; +import "amino/amino.proto"; option go_package = "github.com/cosmos/cosmos-sdk/x/bank/types"; // Msg defines the bank Msg service. service Msg { + option (cosmos.msg.v1.service) = true; + // Send defines a method for sending coins from one account to another account. rpc Send(MsgSend) returns (MsgSendResponse); // MultiSend defines a method for sending coins from some accounts to other accounts. rpc MultiSend(MsgMultiSend) returns (MsgMultiSendResponse); - // UpdateDenomMetadata defines a method for updating the denom metadata. Only usable in x/gov proposal. - rpc UpdateDenomMetadata(MsgUpdateDenomMetadata) returns (MsgUpdateDenomMetadataResponse); + // UpdateParams defines a governance operation for updating the x/bank module parameters. + // The authority is defined in the keeper. + // + // Since: cosmos-sdk 0.47 + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); + + // SetSendEnabled is a governance operation for setting the SendEnabled flag + // on any number of Denoms. Only the entries to add or update should be + // included. Entries that already exist in the store, but that aren't + // included in this message, will be left unchanged. + // + // Since: cosmos-sdk 0.47 + rpc SetSendEnabled(MsgSetSendEnabled) returns (MsgSetSendEnabledResponse); } // MsgSend represents a message to send coins from one account to another. message MsgSend { option (cosmos.msg.v1.signer) = "from_address"; + option (amino.name) = "cosmos-sdk/MsgSend"; option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; string from_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; string to_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - repeated cosmos.base.v1beta1.Coin amount = 3 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; + repeated cosmos.base.v1beta1.Coin amount = 3 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; } // MsgSendResponse defines the Msg/Send response type. @@ -40,28 +59,66 @@ message MsgSendResponse {} // MsgMultiSend represents an arbitrary multi-in, multi-out send message. message MsgMultiSend { option (cosmos.msg.v1.signer) = "inputs"; + option (amino.name) = "cosmos-sdk/MsgMultiSend"; option (gogoproto.equal) = false; - repeated Input inputs = 1 [(gogoproto.nullable) = false]; - repeated Output outputs = 2 [(gogoproto.nullable) = false]; + // Inputs, despite being `repeated`, only allows one sender input. This is + // checked in MsgMultiSend's ValidateBasic. + repeated Input inputs = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + repeated Output outputs = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // MsgMultiSendResponse defines the Msg/MultiSend response type. message MsgMultiSendResponse {} -// MsgUpdateDenomMetadata represents a message to update denom metadata -message MsgUpdateDenomMetadata { - option (cosmos.msg.v1.signer) = "from_address"; +// MsgUpdateParams is the Msg/UpdateParams request type. +// +// Since: cosmos-sdk 0.47 +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "authority"; - option (gogoproto.equal) = false; - option (gogoproto.goproto_getters) = false; + // authority is the address that controls the module (defaults to x/gov unless overwritten). + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + option (amino.name) = "cosmos-sdk/x/bank/MsgUpdateParams"; + + // params defines the x/bank parameters to update. + // + // NOTE: All parameters must be supplied. + Params params = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} - string from_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - string title = 2; - string description = 3; - Metadata metadata = 4; +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +// +// Since: cosmos-sdk 0.47 +message MsgUpdateParamsResponse {} + +// MsgSetSendEnabled is the Msg/SetSendEnabled request type. +// +// Only entries to add/update/delete need to be included. +// Existing SendEnabled entries that are not included in this +// message are left unchanged. +// +// Since: cosmos-sdk 0.47 +message MsgSetSendEnabled { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "cosmos-sdk/MsgSetSendEnabled"; + + // authority is the address that controls the module. + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // send_enabled is the list of entries to add or update. + repeated SendEnabled send_enabled = 2; + + // use_default_for is a list of denoms that should use the params.default_send_enabled value. + // Denoms listed here will have their SendEnabled entries deleted. + // If a denom is included that doesn't have a SendEnabled entry, + // it will be ignored. + repeated string use_default_for = 3; } -// MsgUpdateDenomMetadataResponse defines the Msg/UpdateDenomMetadata response type. -message MsgUpdateDenomMetadataResponse {} \ No newline at end of file +// MsgSetSendEnabledResponse defines the Msg/SetSendEnabled response type. +// +// Since: cosmos-sdk 0.47 +message MsgSetSendEnabledResponse {} diff --git a/third_party/proto/cosmos/base/abci/v1beta1/abci.proto b/third_party/proto/cosmos/base/abci/v1beta1/abci.proto index ddaa635617..9e3b4e55db 100644 --- a/third_party/proto/cosmos/base/abci/v1beta1/abci.proto +++ b/third_party/proto/cosmos/base/abci/v1beta1/abci.proto @@ -3,6 +3,7 @@ package cosmos.base.abci.v1beta1; import "gogoproto/gogo.proto"; import "tendermint/abci/types.proto"; +import "tendermint/types/block.proto"; import "google/protobuf/any.proto"; option go_package = "github.com/cosmos/cosmos-sdk/types"; @@ -156,3 +157,21 @@ message SearchTxsResult { // List of txs in current page repeated TxResponse txs = 6; } + +// SearchBlocksResult defines a structure for querying blocks pageable +message SearchBlocksResult { + option (gogoproto.stringer) = true; + + // Count of all blocks + int64 total_count = 1; + // Count of blocks in current page + int64 count = 2; + // Index of current page, start from 1 + int64 page_number = 3; + // Count of total pages + int64 page_total = 4; + // Max count blocks per page + int64 limit = 5; + // List of blocks in current page + repeated tendermint.types.Block blocks = 6; +} diff --git a/third_party/proto/cosmos/base/node/v1beta1/query.proto b/third_party/proto/cosmos/base/node/v1beta1/query.proto index 8070f7b904..95df568f11 100644 --- a/third_party/proto/cosmos/base/node/v1beta1/query.proto +++ b/third_party/proto/cosmos/base/node/v1beta1/query.proto @@ -2,6 +2,8 @@ syntax = "proto3"; package cosmos.base.node.v1beta1; import "google/api/annotations.proto"; +import "google/protobuf/timestamp.proto"; +import "gogoproto/gogo.proto"; option go_package = "github.com/cosmos/cosmos-sdk/client/grpc/node"; @@ -11,6 +13,10 @@ service Service { rpc Config(ConfigRequest) returns (ConfigResponse) { option (google.api.http).get = "/cosmos/base/node/v1beta1/config"; } + // Status queries for the node status. + rpc Status(StatusRequest) returns (StatusResponse) { + option (google.api.http).get = "/cosmos/base/node/v1beta1/status"; + } } // ConfigRequest defines the request structure for the Config gRPC query. @@ -18,5 +24,20 @@ message ConfigRequest {} // ConfigResponse defines the response structure for the Config gRPC query. message ConfigResponse { - string minimum_gas_price = 1; + string minimum_gas_price = 1; + string pruning_keep_recent = 2; + string pruning_interval = 3; + uint64 halt_height = 4; +} + +// StateRequest defines the request structure for the status of a node. +message StatusRequest {} + +// StateResponse defines the response structure for the status of a node. +message StatusResponse { + uint64 earliest_store_height = 1; // earliest block height available in the store + uint64 height = 2; // current block height + google.protobuf.Timestamp timestamp = 3 [(gogoproto.stdtime) = true]; // block height timestamp + bytes app_hash = 4; // app hash of the current block + bytes validator_hash = 5; // validator hash provided by the consensus header } diff --git a/third_party/proto/cosmos/base/tendermint/v1beta1/query.proto b/third_party/proto/cosmos/base/tendermint/v1beta1/query.proto index 2d51690121..6de6f2cdbc 100644 --- a/third_party/proto/cosmos/base/tendermint/v1beta1/query.proto +++ b/third_party/proto/cosmos/base/tendermint/v1beta1/query.proto @@ -10,8 +10,9 @@ import "cosmos/base/query/v1beta1/pagination.proto"; import "cosmos/base/tendermint/v1beta1/types.proto"; import "cosmos_proto/cosmos.proto"; import "tendermint/types/block.proto"; +import "amino/amino.proto"; -option go_package = "github.com/cosmos/cosmos-sdk/client/grpc/tmservice"; +option go_package = "github.com/cosmos/cosmos-sdk/client/grpc/cmtservice"; // Service defines the gRPC querier service for tendermint queries. service Service { @@ -45,9 +46,9 @@ service Service { option (google.api.http).get = "/cosmos/base/tendermint/v1beta1/validatorsets/{height}"; } - // ABCIQuery defines a query handler that supports ABCI queries directly to - // the application, bypassing Tendermint completely. The ABCI query must - // contain a valid and supported path, including app, custom, p2p, and store. + // ABCIQuery defines a query handler that supports ABCI queries directly to the + // application, bypassing Tendermint completely. The ABCI query must contain + // a valid and supported path, including app, custom, p2p, and store. // // Since: cosmos-sdk 0.46 rpc ABCIQuery(ABCIQueryRequest) returns (ABCIQueryResponse) { @@ -55,16 +56,14 @@ service Service { } } -// GetValidatorSetByHeightRequest is the request type for the -// Query/GetValidatorSetByHeight RPC method. +// GetValidatorSetByHeightRequest is the request type for the Query/GetValidatorSetByHeight RPC method. message GetValidatorSetByHeightRequest { int64 height = 1; // pagination defines an pagination for the request. cosmos.base.query.v1beta1.PageRequest pagination = 2; } -// GetValidatorSetByHeightResponse is the response type for the -// Query/GetValidatorSetByHeight RPC method. +// GetValidatorSetByHeightResponse is the response type for the Query/GetValidatorSetByHeight RPC method. message GetValidatorSetByHeightResponse { int64 block_height = 1; repeated Validator validators = 2; @@ -72,15 +71,13 @@ message GetValidatorSetByHeightResponse { cosmos.base.query.v1beta1.PageResponse pagination = 3; } -// GetLatestValidatorSetRequest is the request type for the -// Query/GetValidatorSetByHeight RPC method. +// GetLatestValidatorSetRequest is the request type for the Query/GetValidatorSetByHeight RPC method. message GetLatestValidatorSetRequest { // pagination defines an pagination for the request. cosmos.base.query.v1beta1.PageRequest pagination = 1; } -// GetLatestValidatorSetResponse is the response type for the -// Query/GetValidatorSetByHeight RPC method. +// GetLatestValidatorSetResponse is the response type for the Query/GetValidatorSetByHeight RPC method. message GetLatestValidatorSetResponse { int64 block_height = 1; repeated Validator validators = 2; @@ -96,14 +93,12 @@ message Validator { int64 proposer_priority = 4; } -// GetBlockByHeightRequest is the request type for the Query/GetBlockByHeight -// RPC method. +// GetBlockByHeightRequest is the request type for the Query/GetBlockByHeight RPC method. message GetBlockByHeightRequest { int64 height = 1; } -// GetBlockByHeightResponse is the response type for the Query/GetBlockByHeight -// RPC method. +// GetBlockByHeightResponse is the response type for the Query/GetBlockByHeight RPC method. message GetBlockByHeightResponse { .tendermint.types.BlockID block_id = 1; @@ -114,12 +109,10 @@ message GetBlockByHeightResponse { Block sdk_block = 3; } -// GetLatestBlockRequest is the request type for the Query/GetLatestBlock RPC -// method. +// GetLatestBlockRequest is the request type for the Query/GetLatestBlock RPC method. message GetLatestBlockRequest {} -// GetLatestBlockResponse is the response type for the Query/GetLatestBlock RPC -// method. +// GetLatestBlockResponse is the response type for the Query/GetLatestBlock RPC method. message GetLatestBlockResponse { .tendermint.types.BlockID block_id = 1; @@ -141,8 +134,7 @@ message GetSyncingResponse { // GetNodeInfoRequest is the request type for the Query/GetNodeInfo RPC method. message GetNodeInfoRequest {} -// GetNodeInfoResponse is the response type for the Query/GetNodeInfo RPC -// method. +// GetNodeInfoResponse is the response type for the Query/GetNodeInfo RPC method. message GetNodeInfoResponse { .tendermint.p2p.DefaultNodeInfo default_node_info = 1; VersionInfo application_version = 2; @@ -179,8 +171,7 @@ message ABCIQueryRequest { bool prove = 4; } -// ABCIQueryResponse defines the response structure for the ABCIQuery gRPC -// query. +// ABCIQueryResponse defines the response structure for the ABCIQuery gRPC query. // // Note: This type is a duplicate of the ResponseQuery proto type defined in // Tendermint. @@ -199,11 +190,10 @@ message ABCIQueryResponse { } // ProofOp defines an operation used for calculating Merkle root. The data could -// be arbitrary format, providing nessecary data for example neighbouring node +// be arbitrary format, providing necessary data for example neighbouring node // hash. // -// Note: This type is a duplicate of the ProofOp proto type defined in -// Tendermint. +// Note: This type is a duplicate of the ProofOp proto type defined in Tendermint. message ProofOp { string type = 1; bytes key = 2; @@ -212,8 +202,7 @@ message ProofOp { // ProofOps is Merkle proof defined by the list of ProofOps. // -// Note: This type is a duplicate of the ProofOps proto type defined in -// Tendermint. +// Note: This type is a duplicate of the ProofOps proto type defined in Tendermint. message ProofOps { - repeated ProofOp ops = 1 [(gogoproto.nullable) = false]; + repeated ProofOp ops = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } diff --git a/third_party/proto/cosmos/base/tendermint/v1beta1/types.proto b/third_party/proto/cosmos/base/tendermint/v1beta1/types.proto index 3d6c04c26a..624ff41491 100644 --- a/third_party/proto/cosmos/base/tendermint/v1beta1/types.proto +++ b/third_party/proto/cosmos/base/tendermint/v1beta1/types.proto @@ -6,28 +6,30 @@ import "tendermint/types/types.proto"; import "tendermint/types/evidence.proto"; import "tendermint/version/types.proto"; import "google/protobuf/timestamp.proto"; +import "amino/amino.proto"; -option go_package = "github.com/cosmos/cosmos-sdk/client/grpc/tmservice"; +option go_package = "github.com/cosmos/cosmos-sdk/client/grpc/cmtservice"; // Block is tendermint type Block, with the Header proposer address // field converted to bech32 string. message Block { - Header header = 1 [(gogoproto.nullable) = false]; - .tendermint.types.Data data = 2 [(gogoproto.nullable) = false]; - .tendermint.types.EvidenceList evidence = 3 [(gogoproto.nullable) = false]; + Header header = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + .tendermint.types.Data data = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + .tendermint.types.EvidenceList evidence = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; .tendermint.types.Commit last_commit = 4; } // Header defines the structure of a Tendermint block header. message Header { // basic block info - .tendermint.version.Consensus version = 1 [(gogoproto.nullable) = false]; + .tendermint.version.Consensus version = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; string chain_id = 2 [(gogoproto.customname) = "ChainID"]; int64 height = 3; - google.protobuf.Timestamp time = 4 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + google.protobuf.Timestamp time = 4 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.stdtime) = true]; // prev block info - .tendermint.types.BlockID last_block_id = 5 [(gogoproto.nullable) = false]; + .tendermint.types.BlockID last_block_id = 5 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // hashes of block data bytes last_commit_hash = 6; // commit from validators from the last block diff --git a/third_party/proto/cosmos/base/v1beta1/coin.proto b/third_party/proto/cosmos/base/v1beta1/coin.proto index 69e67e0995..1447d642d5 100644 --- a/third_party/proto/cosmos/base/v1beta1/coin.proto +++ b/third_party/proto/cosmos/base/v1beta1/coin.proto @@ -3,6 +3,7 @@ package cosmos.base.v1beta1; import "gogoproto/gogo.proto"; import "cosmos_proto/cosmos.proto"; +import "amino/amino.proto"; option go_package = "github.com/cosmos/cosmos-sdk/types"; option (gogoproto.goproto_stringer_all) = false; @@ -16,8 +17,12 @@ message Coin { option (gogoproto.equal) = true; string denom = 1; - string amount = 2 - [(cosmos_proto.scalar) = "cosmos.Int", (gogoproto.customtype) = "Int", (gogoproto.nullable) = false]; + string amount = 2 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; } // DecCoin defines a token with a denomination and a decimal amount. @@ -28,16 +33,29 @@ message DecCoin { option (gogoproto.equal) = true; string denom = 1; - string amount = 2 - [(cosmos_proto.scalar) = "cosmos.Dec", (gogoproto.customtype) = "Dec", (gogoproto.nullable) = false]; + string amount = 2 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; } // IntProto defines a Protobuf wrapper around an Int object. +// Deprecated: Prefer to use math.Int directly. It supports binary Marshal and Unmarshal. message IntProto { - string int = 1 [(cosmos_proto.scalar) = "cosmos.Int", (gogoproto.customtype) = "Int", (gogoproto.nullable) = false]; + string int = 1 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; } // DecProto defines a Protobuf wrapper around a Dec object. +// Deprecated: Prefer to use math.LegacyDec directly. It supports binary Marshal and Unmarshal. message DecProto { - string dec = 1 [(cosmos_proto.scalar) = "cosmos.Dec", (gogoproto.customtype) = "Dec", (gogoproto.nullable) = false]; + string dec = 1 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; } diff --git a/third_party/proto/cosmos/circuit/module/v1/module.proto b/third_party/proto/cosmos/circuit/module/v1/module.proto new file mode 100644 index 0000000000..7104bad4c9 --- /dev/null +++ b/third_party/proto/cosmos/circuit/module/v1/module.proto @@ -0,0 +1,15 @@ +syntax = "proto3"; + +package cosmos.circuit.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object of the circuit module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "cosmossdk.io/x/circuit" + }; + + // authority defines the custom module authority. If not set, defaults to the governance module. + string authority = 1; +} diff --git a/third_party/proto/cosmos/circuit/v1/query.proto b/third_party/proto/cosmos/circuit/v1/query.proto new file mode 100644 index 0000000000..0115d335f4 --- /dev/null +++ b/third_party/proto/cosmos/circuit/v1/query.proto @@ -0,0 +1,61 @@ +syntax = "proto3"; +package cosmos.circuit.v1; + +option go_package = "cosmossdk.io/x/circuit/types"; + +import "cosmos/base/query/v1beta1/pagination.proto"; +import "cosmos/circuit/v1/types.proto"; +import "google/api/annotations.proto"; +import "cosmos/query/v1/query.proto"; + +// Query defines the circuit gRPC querier service. +service Query { + // Account returns account permissions. + rpc Account(QueryAccountRequest) returns (AccountResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/circuit/v1/accounts/{address}"; + } + + // Account returns account permissions. + rpc Accounts(QueryAccountsRequest) returns (AccountsResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/circuit/v1/accounts"; + } + + // DisabledList returns a list of disabled message urls + rpc DisabledList(QueryDisabledListRequest) returns (DisabledListResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/circuit/v1/disable_list"; + } +} + +// QueryAccountRequest is the request type for the Query/Account RPC method. +message QueryAccountRequest { + string address = 1; +} + +// AccountResponse is the response type for the Query/Account RPC method. +message AccountResponse { + Permissions permission = 1; +} + +// QueryAccountsRequest is the request type for the Query/Accounts RPC method. +message QueryAccountsRequest { + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +// AccountsResponse is the response type for the Query/Accounts RPC method. +message AccountsResponse { + repeated GenesisAccountPermissions accounts = 1; + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryDisableListRequest is the request type for the Query/DisabledList RPC method. +message QueryDisabledListRequest {} + +// DisabledListResponse is the response type for the Query/DisabledList RPC method. +message DisabledListResponse { + repeated string disabled_list = 1; +} diff --git a/third_party/proto/cosmos/circuit/v1/tx.proto b/third_party/proto/cosmos/circuit/v1/tx.proto new file mode 100644 index 0000000000..71f708bb2a --- /dev/null +++ b/third_party/proto/cosmos/circuit/v1/tx.proto @@ -0,0 +1,83 @@ +syntax = "proto3"; +package cosmos.circuit.v1; + +option go_package = "cosmossdk.io/x/circuit/types"; + +import "cosmos/msg/v1/msg.proto"; +import "cosmos/circuit/v1/types.proto"; + +// Msg defines the circuit Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // AuthorizeCircuitBreaker allows a super-admin to grant (or revoke) another + // account's circuit breaker permissions. + rpc AuthorizeCircuitBreaker(MsgAuthorizeCircuitBreaker) returns (MsgAuthorizeCircuitBreakerResponse); + + // TripCircuitBreaker pauses processing of Msg's in the state machine. + rpc TripCircuitBreaker(MsgTripCircuitBreaker) returns (MsgTripCircuitBreakerResponse); + + // ResetCircuitBreaker resumes processing of Msg's in the state machine that + // have been been paused using TripCircuitBreaker. + rpc ResetCircuitBreaker(MsgResetCircuitBreaker) returns (MsgResetCircuitBreakerResponse); +} + +// MsgAuthorizeCircuitBreaker defines the Msg/AuthorizeCircuitBreaker request type. +message MsgAuthorizeCircuitBreaker { + option (cosmos.msg.v1.signer) = "granter"; + + // granter is the granter of the circuit breaker permissions and must have + // LEVEL_SUPER_ADMIN. + string granter = 1; + + // grantee is the account authorized with the provided permissions. + string grantee = 2; + + // permissions are the circuit breaker permissions that the grantee receives. + // These will overwrite any existing permissions. LEVEL_NONE_UNSPECIFIED can + // be specified to revoke all permissions. + Permissions permissions = 3; +} + +// MsgAuthorizeCircuitBreakerResponse defines the Msg/AuthorizeCircuitBreaker response type. +message MsgAuthorizeCircuitBreakerResponse { + bool success = 1; +} + +// MsgTripCircuitBreaker defines the Msg/TripCircuitBreaker request type. +message MsgTripCircuitBreaker { + option (cosmos.msg.v1.signer) = "authority"; + + // authority is the account authorized to trip the circuit breaker. + string authority = 1; + + // msg_type_urls specifies a list of type URLs to immediately stop processing. + // IF IT IS LEFT EMPTY, ALL MSG PROCESSING WILL STOP IMMEDIATELY. + // This value is validated against the authority's permissions and if the + // authority does not have permissions to trip the specified msg type URLs + // (or all URLs), the operation will fail. + repeated string msg_type_urls = 2; +} + +// MsgTripCircuitBreakerResponse defines the Msg/TripCircuitBreaker response type. +message MsgTripCircuitBreakerResponse { + bool success = 1; +} + +// MsgResetCircuitBreaker defines the Msg/ResetCircuitBreaker request type. +message MsgResetCircuitBreaker { + option (cosmos.msg.v1.signer) = "authority"; + + // authority is the account authorized to trip or reset the circuit breaker. + string authority = 1; + + // msg_type_urls specifies a list of Msg type URLs to resume processing. If + // it is left empty all Msg processing for type URLs that the account is + // authorized to trip will resume. + repeated string msg_type_urls = 3; +} + +// MsgResetCircuitBreakerResponse defines the Msg/ResetCircuitBreaker response type. +message MsgResetCircuitBreakerResponse { + bool success = 1; +} diff --git a/third_party/proto/cosmos/circuit/v1/types.proto b/third_party/proto/cosmos/circuit/v1/types.proto new file mode 100644 index 0000000000..1bd8d9d448 --- /dev/null +++ b/third_party/proto/cosmos/circuit/v1/types.proto @@ -0,0 +1,49 @@ +syntax = "proto3"; +package cosmos.circuit.v1; + +option go_package = "cosmossdk.io/x/circuit/types"; + +// Permissions are the permissions that an account has to trip +// or reset the circuit breaker. +message Permissions { + // level is the level of permissions granted to this account. + Level level = 1; + + // limit_type_urls is used with LEVEL_SOME_MSGS to limit the lists of Msg type + // URLs that the account can trip. It is an error to use limit_type_urls with + // a level other than LEVEL_SOME_MSGS. + repeated string limit_type_urls = 2; + + // Level is the permission level. + enum Level { + // LEVEL_NONE_UNSPECIFIED indicates that the account will have no circuit + // breaker permissions. + LEVEL_NONE_UNSPECIFIED = 0; + + // LEVEL_SOME_MSGS indicates that the account will have permission to + // trip or reset the circuit breaker for some Msg type URLs. If this level + // is chosen, a non-empty list of Msg type URLs must be provided in + // limit_type_urls. + LEVEL_SOME_MSGS = 1; + + // LEVEL_ALL_MSGS indicates that the account can trip or reset the circuit + // breaker for Msg's of all type URLs. + LEVEL_ALL_MSGS = 2; + + // LEVEL_SUPER_ADMIN indicates that the account can take all circuit breaker + // actions and can grant permissions to other accounts. + LEVEL_SUPER_ADMIN = 3; + } +} + +// GenesisAccountPermissions is the account permissions for the circuit breaker in genesis +message GenesisAccountPermissions { + string address = 1; + Permissions permissions = 2; +} + +// GenesisState is the state that must be provided at genesis. +message GenesisState { + repeated GenesisAccountPermissions account_permissions = 1; + repeated string disabled_type_urls = 2; +} diff --git a/third_party/proto/cosmos/consensus/module/v1/module.proto b/third_party/proto/cosmos/consensus/module/v1/module.proto new file mode 100644 index 0000000000..8e188cc77c --- /dev/null +++ b/third_party/proto/cosmos/consensus/module/v1/module.proto @@ -0,0 +1,15 @@ +syntax = "proto3"; + +package cosmos.consensus.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object of the consensus module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "github.com/cosmos/cosmos-sdk/x/consensus" + }; + + // authority defines the custom module authority. If not set, defaults to the governance module. + string authority = 1; +} diff --git a/third_party/proto/cosmos/consensus/v1/query.proto b/third_party/proto/cosmos/consensus/v1/query.proto new file mode 100644 index 0000000000..84648d97c0 --- /dev/null +++ b/third_party/proto/cosmos/consensus/v1/query.proto @@ -0,0 +1,27 @@ +// Since: cosmos-sdk 0.47 +syntax = "proto3"; +package cosmos.consensus.v1; + +import "google/api/annotations.proto"; +import "tendermint/types/params.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/consensus/types"; + +// Query defines the gRPC querier service. +service Query { + // Params queries the parameters of x/consensus module. + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/cosmos/consensus/v1/params"; + } +} + +// QueryParamsRequest defines the request type for querying x/consensus parameters. +message QueryParamsRequest {} + +// QueryParamsResponse defines the response type for querying x/consensus parameters. +message QueryParamsResponse { + // params are the tendermint consensus params stored in the consensus module. + // Please note that `params.version` is not populated in this response, it is + // tracked separately in the x/upgrade module. + tendermint.types.ConsensusParams params = 1; +} diff --git a/third_party/proto/cosmos/consensus/v1/tx.proto b/third_party/proto/cosmos/consensus/v1/tx.proto new file mode 100644 index 0000000000..4323de703a --- /dev/null +++ b/third_party/proto/cosmos/consensus/v1/tx.proto @@ -0,0 +1,46 @@ +// Since: cosmos-sdk 0.47 +syntax = "proto3"; +package cosmos.consensus.v1; + +import "amino/amino.proto"; +import "cosmos_proto/cosmos.proto"; +import "cosmos/msg/v1/msg.proto"; +import "tendermint/types/params.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/consensus/types"; + +// Msg defines the consensus Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // UpdateParams defines a governance operation for updating the x/consensus module parameters. + // The authority is defined in the keeper. + // + // Since: cosmos-sdk 0.47 + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); +} + +// MsgUpdateParams is the Msg/UpdateParams request type. +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "cosmos-sdk/x/consensus/MsgUpdateParams"; + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // params defines the x/consensus parameters to update. + // VersionsParams is not included in this Msg because it is tracked + // separarately in x/upgrade. + // + // NOTE: All parameters must be supplied. + tendermint.types.BlockParams block = 2; + tendermint.types.EvidenceParams evidence = 3; + tendermint.types.ValidatorParams validator = 4; + + // Since: cosmos-sdk 0.50 + tendermint.types.ABCIParams abci = 5; +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +message MsgUpdateParamsResponse {} diff --git a/third_party/proto/cosmos/crisis/module/v1/module.proto b/third_party/proto/cosmos/crisis/module/v1/module.proto new file mode 100644 index 0000000000..fe9249626a --- /dev/null +++ b/third_party/proto/cosmos/crisis/module/v1/module.proto @@ -0,0 +1,18 @@ +syntax = "proto3"; + +package cosmos.crisis.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object of the crisis module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "github.com/cosmos/cosmos-sdk/x/crisis" + }; + + // fee_collector_name is the name of the FeeCollector ModuleAccount. + string fee_collector_name = 1; + + // authority defines the custom module authority. If not set, defaults to the governance module. + string authority = 2; +} \ No newline at end of file diff --git a/third_party/proto/cosmos/crisis/v1beta1/genesis.proto b/third_party/proto/cosmos/crisis/v1beta1/genesis.proto index 5c2916046d..b0ddb9b66f 100644 --- a/third_party/proto/cosmos/crisis/v1beta1/genesis.proto +++ b/third_party/proto/cosmos/crisis/v1beta1/genesis.proto @@ -5,10 +5,11 @@ option go_package = "github.com/cosmos/cosmos-sdk/x/crisis/types"; import "gogoproto/gogo.proto"; import "cosmos/base/v1beta1/coin.proto"; +import "amino/amino.proto"; // GenesisState defines the crisis module's genesis state. message GenesisState { // constant_fee is the fee used to verify the invariant in the crisis // module. - cosmos.base.v1beta1.Coin constant_fee = 3 [(gogoproto.nullable) = false]; + cosmos.base.v1beta1.Coin constant_fee = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } diff --git a/third_party/proto/cosmos/crisis/v1beta1/tx.proto b/third_party/proto/cosmos/crisis/v1beta1/tx.proto index fea9059f6f..4fcf5bf659 100644 --- a/third_party/proto/cosmos/crisis/v1beta1/tx.proto +++ b/third_party/proto/cosmos/crisis/v1beta1/tx.proto @@ -6,24 +6,60 @@ option go_package = "github.com/cosmos/cosmos-sdk/x/crisis/types"; import "gogoproto/gogo.proto"; import "cosmos_proto/cosmos.proto"; import "cosmos/msg/v1/msg.proto"; +import "amino/amino.proto"; +import "cosmos/base/v1beta1/coin.proto"; // Msg defines the bank Msg service. service Msg { - // VerifyInvariant defines a method to verify a particular invariance. + option (cosmos.msg.v1.service) = true; + + // VerifyInvariant defines a method to verify a particular invariant. rpc VerifyInvariant(MsgVerifyInvariant) returns (MsgVerifyInvariantResponse); + + // UpdateParams defines a governance operation for updating the x/crisis module + // parameters. The authority is defined in the keeper. + // + // Since: cosmos-sdk 0.47 + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); } // MsgVerifyInvariant represents a message to verify a particular invariance. message MsgVerifyInvariant { option (cosmos.msg.v1.signer) = "sender"; + option (amino.name) = "cosmos-sdk/MsgVerifyInvariant"; option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; - string sender = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + // sender is the account address of private key to send coins to fee collector account. + string sender = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // name of the invariant module. string invariant_module_name = 2; - string invariant_route = 3; + + // invariant_route is the msg's invariant route. + string invariant_route = 3; } // MsgVerifyInvariantResponse defines the Msg/VerifyInvariant response type. message MsgVerifyInvariantResponse {} + +// MsgUpdateParams is the Msg/UpdateParams request type. +// +// Since: cosmos-sdk 0.47 +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "cosmos-sdk/x/crisis/MsgUpdateParams"; + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // constant_fee defines the x/crisis parameter. + cosmos.base.v1beta1.Coin constant_fee = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +// +// Since: cosmos-sdk 0.47 +message MsgUpdateParamsResponse {} diff --git a/third_party/proto/cosmos/crypto/ed25519/keys.proto b/third_party/proto/cosmos/crypto/ed25519/keys.proto index 6ffec34483..31768075a2 100644 --- a/third_party/proto/cosmos/crypto/ed25519/keys.proto +++ b/third_party/proto/cosmos/crypto/ed25519/keys.proto @@ -1,6 +1,7 @@ syntax = "proto3"; package cosmos.crypto.ed25519; +import "amino/amino.proto"; import "gogoproto/gogo.proto"; option go_package = "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519"; @@ -11,13 +12,28 @@ option go_package = "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519"; // ADR-28. Nevertheless, you will like to use ed25519 in app user level // then you must create a new proto message and follow ADR-28 for Address construction. message PubKey { + option (amino.name) = "tendermint/PubKeyEd25519"; + // The Amino encoding is simply the inner bytes field, and not the Amino + // encoding of the whole PubKey struct. + // + // Example (JSON): + // s := PubKey{Key: []byte{0x01}} + // out := AminoJSONEncoder(s) + // + // Then we have: + // out == `"MQ=="` + // out != `{"key":"MQ=="}` + option (amino.message_encoding) = "key_field"; option (gogoproto.goproto_stringer) = false; bytes key = 1 [(gogoproto.casttype) = "crypto/ed25519.PublicKey"]; } -// Deprecated: PrivKey defines a ed25519 private key. +// PrivKey defines a ed25519 private key. // NOTE: ed25519 keys must not be used in SDK apps except in a tendermint validator context. message PrivKey { + option (amino.name) = "tendermint/PrivKeyEd25519"; + option (amino.message_encoding) = "key_field"; + bytes key = 1 [(gogoproto.casttype) = "crypto/ed25519.PrivateKey"]; } diff --git a/third_party/proto/cosmos/crypto/hd/v1/hd.proto b/third_party/proto/cosmos/crypto/hd/v1/hd.proto index bb079ce665..e25b70d1a1 100644 --- a/third_party/proto/cosmos/crypto/hd/v1/hd.proto +++ b/third_party/proto/cosmos/crypto/hd/v1/hd.proto @@ -2,6 +2,7 @@ syntax = "proto3"; package cosmos.crypto.hd.v1; +import "amino/amino.proto"; import "gogoproto/gogo.proto"; option go_package = "github.com/cosmos/cosmos-sdk/crypto/hd"; @@ -9,6 +10,8 @@ option (gogoproto.goproto_getters_all) = false; // BIP44Params is used as path field in ledger item in Record. message BIP44Params { + option (amino.name) = "crypto/keys/hd/BIP44Params"; + option (gogoproto.goproto_stringer) = false; // purpose is a constant set to 44' (or 0x8000002C) following the BIP43 recommendation uint32 purpose = 1; diff --git a/third_party/proto/cosmos/crypto/keyring/v1/record.proto b/third_party/proto/cosmos/crypto/keyring/v1/record.proto index 14c6da63eb..e79ea7f466 100644 --- a/third_party/proto/cosmos/crypto/keyring/v1/record.proto +++ b/third_party/proto/cosmos/crypto/keyring/v1/record.proto @@ -8,6 +8,7 @@ import "cosmos/crypto/hd/v1/hd.proto"; option go_package = "github.com/cosmos/cosmos-sdk/crypto/keyring"; option (gogoproto.goproto_getters_all) = false; +option (gogoproto.gogoproto_import) = false; // Record is used for representing a key in the keyring. message Record { diff --git a/third_party/proto/cosmos/crypto/multisig/keys.proto b/third_party/proto/cosmos/crypto/multisig/keys.proto index 7a11fe3369..fa0dec5718 100644 --- a/third_party/proto/cosmos/crypto/multisig/keys.proto +++ b/third_party/proto/cosmos/crypto/multisig/keys.proto @@ -3,6 +3,7 @@ package cosmos.crypto.multisig; import "gogoproto/gogo.proto"; import "google/protobuf/any.proto"; +import "amino/amino.proto"; option go_package = "github.com/cosmos/cosmos-sdk/crypto/keys/multisig"; @@ -10,8 +11,20 @@ option go_package = "github.com/cosmos/cosmos-sdk/crypto/keys/multisig"; // which nests multiple public keys and a threshold, // it uses legacy amino address rules. message LegacyAminoPubKey { + option (amino.name) = "tendermint/PubKeyMultisigThreshold"; + // The Amino encoding of a LegacyAminoPubkey is the legacy amino + // encoding of the `PubKeyMultisigThreshold` struct defined below: + // https://github.com/tendermint/tendermint/blob/v0.33.9/crypto/multisig/threshold_pubkey.go + // + // There are 2 differences with what a "normal" Amino encoding + // would output: + // 1. The `threshold` field is always a string (whereas Amino would + // by default marshal uint32 as a number). + // 2. The `public_keys` field is renamed to `pubkeys`, which is also + // reflected in the `amino.field_name` annotation. + option (amino.message_encoding) = "threshold_string"; option (gogoproto.goproto_getters) = false; uint32 threshold = 1; - repeated google.protobuf.Any public_keys = 2 [(gogoproto.customname) = "PubKeys"]; + repeated google.protobuf.Any public_keys = 2 [(gogoproto.customname) = "PubKeys", (amino.field_name) = "pubkeys"]; } diff --git a/third_party/proto/cosmos/crypto/secp256k1/keys.proto b/third_party/proto/cosmos/crypto/secp256k1/keys.proto index a22725713a..e2358d6dc8 100644 --- a/third_party/proto/cosmos/crypto/secp256k1/keys.proto +++ b/third_party/proto/cosmos/crypto/secp256k1/keys.proto @@ -1,6 +1,7 @@ syntax = "proto3"; package cosmos.crypto.secp256k1; +import "amino/amino.proto"; import "gogoproto/gogo.proto"; option go_package = "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"; @@ -11,6 +12,18 @@ option go_package = "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"; // the x-coordinate. Otherwise the first byte is a 0x03. // This prefix is followed with the x-coordinate. message PubKey { + option (amino.name) = "tendermint/PubKeySecp256k1"; + // The Amino encoding is simply the inner bytes field, and not the Amino + // encoding of the whole PubKey struct. + // + // Example (JSON): + // s := PubKey{Key: []byte{0x01}} + // out := AminoJSONEncoder(s) + // + // Then we have: + // out == `"MQ=="` + // out != `{"key":"MQ=="}` + option (amino.message_encoding) = "key_field"; option (gogoproto.goproto_stringer) = false; bytes key = 1; @@ -18,5 +31,8 @@ message PubKey { // PrivKey defines a secp256k1 private key. message PrivKey { + option (amino.name) = "tendermint/PrivKeySecp256k1"; + option (amino.message_encoding) = "key_field"; + bytes key = 1; } diff --git a/third_party/proto/cosmos/distribution/module/v1/module.proto b/third_party/proto/cosmos/distribution/module/v1/module.proto new file mode 100644 index 0000000000..accf920cb5 --- /dev/null +++ b/third_party/proto/cosmos/distribution/module/v1/module.proto @@ -0,0 +1,17 @@ +syntax = "proto3"; + +package cosmos.distribution.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object of the distribution module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "github.com/cosmos/cosmos-sdk/x/distribution" + }; + + string fee_collector_name = 1; + + // authority defines the custom module authority. If not set, defaults to the governance module. + string authority = 2; +} \ No newline at end of file diff --git a/third_party/proto/cosmos/distribution/v1beta1/distribution.proto b/third_party/proto/cosmos/distribution/v1beta1/distribution.proto index 73174303fb..0c20286f9a 100644 --- a/third_party/proto/cosmos/distribution/v1beta1/distribution.proto +++ b/third_party/proto/cosmos/distribution/v1beta1/distribution.proto @@ -7,25 +7,39 @@ option (gogoproto.equal_all) = true; import "gogoproto/gogo.proto"; import "cosmos/base/v1beta1/coin.proto"; import "cosmos_proto/cosmos.proto"; +import "amino/amino.proto"; // Params defines the set of params for the distribution module. message Params { - option (gogoproto.goproto_stringer) = false; - string community_tax = 1 [ + option (amino.name) = "cosmos-sdk/x/distribution/Params"; + + string community_tax = 1 [ (cosmos_proto.scalar) = "cosmos.Dec", - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (amino.dont_omitempty) = true, (gogoproto.nullable) = false ]; + + // Deprecated: The base_proposer_reward field is deprecated and is no longer used + // in the x/distribution module's reward mechanism. string base_proposer_reward = 2 [ (cosmos_proto.scalar) = "cosmos.Dec", - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", - (gogoproto.nullable) = false + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + deprecated = true ]; + + // Deprecated: The bonus_proposer_reward field is deprecated and is no longer used + // in the x/distribution module's reward mechanism. string bonus_proposer_reward = 3 [ (cosmos_proto.scalar) = "cosmos.Dec", - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", - (gogoproto.nullable) = false + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + deprecated = true ]; + bool withdraw_addr_enabled = 4; } @@ -42,8 +56,11 @@ message Params { // read that record) // + one per validator for the zeroeth period, set on initialization message ValidatorHistoricalRewards { - repeated cosmos.base.v1beta1.DecCoin cumulative_reward_ratio = 1 - [(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins", (gogoproto.nullable) = false]; + repeated cosmos.base.v1beta1.DecCoin cumulative_reward_ratio = 1 [ + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; uint32 reference_count = 2; } @@ -51,23 +68,32 @@ message ValidatorHistoricalRewards { // period for a validator kept as a running counter and incremented // each block as long as the validator's tokens remain constant. message ValidatorCurrentRewards { - repeated cosmos.base.v1beta1.DecCoin rewards = 1 - [(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins", (gogoproto.nullable) = false]; + repeated cosmos.base.v1beta1.DecCoin rewards = 1 [ + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; uint64 period = 2; } // ValidatorAccumulatedCommission represents accumulated commission // for a validator kept as a running counter, can be withdrawn at any time. message ValidatorAccumulatedCommission { - repeated cosmos.base.v1beta1.DecCoin commission = 1 - [(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins", (gogoproto.nullable) = false]; + repeated cosmos.base.v1beta1.DecCoin commission = 1 [ + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; } // ValidatorOutstandingRewards represents outstanding (un-withdrawn) rewards // for a validator inexpensive to track, allows simple sanity checks. message ValidatorOutstandingRewards { - repeated cosmos.base.v1beta1.DecCoin rewards = 1 - [(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins", (gogoproto.nullable) = false]; + repeated cosmos.base.v1beta1.DecCoin rewards = 1 [ + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; } // ValidatorSlashEvent represents a validator slash event. @@ -78,37 +104,48 @@ message ValidatorSlashEvent { uint64 validator_period = 1; string fraction = 2 [ (cosmos_proto.scalar) = "cosmos.Dec", - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", (gogoproto.nullable) = false ]; } // ValidatorSlashEvents is a collection of ValidatorSlashEvent messages. message ValidatorSlashEvents { - option (gogoproto.goproto_stringer) = false; - repeated ValidatorSlashEvent validator_slash_events = 1 [(gogoproto.nullable) = false]; + repeated ValidatorSlashEvent validator_slash_events = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // FeePool is the global fee pool for distribution. message FeePool { - repeated cosmos.base.v1beta1.DecCoin community_pool = 1 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins"]; + repeated cosmos.base.v1beta1.DecCoin community_pool = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins" + ]; } // CommunityPoolSpendProposal details a proposal for use of community funds, // together with how many coins are proposed to be spent, and to which // recipient account. +// +// Deprecated: Do not use. As of the Cosmos SDK release v0.47.x, there is no +// longer a need for an explicit CommunityPoolSpendProposal. To spend community +// pool funds, a simple MsgCommunityPoolSpend can be invoked from the x/gov +// module via a v1 governance proposal. message CommunityPoolSpendProposal { + option deprecated = true; option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; - option (gogoproto.goproto_stringer) = false; option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; string title = 1; string description = 2; string recipient = 3; - repeated cosmos.base.v1beta1.Coin amount = 4 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; + repeated cosmos.base.v1beta1.Coin amount = 4 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; } // DelegatorStartingInfo represents the starting info for a delegator reward @@ -121,29 +158,32 @@ message DelegatorStartingInfo { uint64 previous_period = 1; string stake = 2 [ (cosmos_proto.scalar) = "cosmos.Dec", - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", - (gogoproto.nullable) = false + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true ]; - uint64 height = 3 [(gogoproto.jsontag) = "creation_height"]; + uint64 height = 3 + [(gogoproto.jsontag) = "creation_height", (amino.field_name) = "creation_height", (amino.dont_omitempty) = true]; } // DelegationDelegatorReward represents the properties // of a delegator's delegation reward. message DelegationDelegatorReward { - option (gogoproto.goproto_getters) = false; - option (gogoproto.goproto_stringer) = true; + option (gogoproto.goproto_getters) = false; - string validator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string validator_address = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; - repeated cosmos.base.v1beta1.DecCoin reward = 2 - [(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins", (gogoproto.nullable) = false]; + repeated cosmos.base.v1beta1.DecCoin reward = 2 [ + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; } // CommunityPoolSpendProposalWithDeposit defines a CommunityPoolSpendProposal // with a deposit message CommunityPoolSpendProposalWithDeposit { option (gogoproto.goproto_getters) = false; - option (gogoproto.goproto_stringer) = true; option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; string title = 1; diff --git a/third_party/proto/cosmos/distribution/v1beta1/genesis.proto b/third_party/proto/cosmos/distribution/v1beta1/genesis.proto index 4662e8df42..5608bfb982 100644 --- a/third_party/proto/cosmos/distribution/v1beta1/genesis.proto +++ b/third_party/proto/cosmos/distribution/v1beta1/genesis.proto @@ -8,6 +8,7 @@ import "gogoproto/gogo.proto"; import "cosmos/base/v1beta1/coin.proto"; import "cosmos/distribution/v1beta1/distribution.proto"; import "cosmos_proto/cosmos.proto"; +import "amino/amino.proto"; // DelegatorWithdrawInfo is the address for where distributions rewards are // withdrawn to by default this struct is only used at genesis to feed in @@ -29,11 +30,14 @@ message ValidatorOutstandingRewardsRecord { option (gogoproto.goproto_getters) = false; // validator_address is the address of the validator. - string validator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - - // outstanding_rewards represents the oustanding rewards of a validator. - repeated cosmos.base.v1beta1.DecCoin outstanding_rewards = 2 - [(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins", (gogoproto.nullable) = false]; + string validator_address = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + + // outstanding_rewards represents the outstanding rewards of a validator. + repeated cosmos.base.v1beta1.DecCoin outstanding_rewards = 2 [ + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; } // ValidatorAccumulatedCommissionRecord is used for import / export via genesis @@ -43,10 +47,10 @@ message ValidatorAccumulatedCommissionRecord { option (gogoproto.goproto_getters) = false; // validator_address is the address of the validator. - string validator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string validator_address = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; // accumulated is the accumulated commission of a validator. - ValidatorAccumulatedCommission accumulated = 2 [(gogoproto.nullable) = false]; + ValidatorAccumulatedCommission accumulated = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // ValidatorHistoricalRewardsRecord is used for import / export via genesis @@ -56,13 +60,13 @@ message ValidatorHistoricalRewardsRecord { option (gogoproto.goproto_getters) = false; // validator_address is the address of the validator. - string validator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string validator_address = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; // period defines the period the historical rewards apply to. uint64 period = 2; // rewards defines the historical rewards of a validator. - ValidatorHistoricalRewards rewards = 3 [(gogoproto.nullable) = false]; + ValidatorHistoricalRewards rewards = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // ValidatorCurrentRewardsRecord is used for import / export via genesis json. @@ -71,10 +75,10 @@ message ValidatorCurrentRewardsRecord { option (gogoproto.goproto_getters) = false; // validator_address is the address of the validator. - string validator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string validator_address = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; // rewards defines the current rewards of a validator. - ValidatorCurrentRewards rewards = 2 [(gogoproto.nullable) = false]; + ValidatorCurrentRewards rewards = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // DelegatorStartingInfoRecord used for import / export via genesis json. @@ -86,10 +90,10 @@ message DelegatorStartingInfoRecord { string delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; // validator_address is the address of the validator. - string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; // starting_info defines the starting info of a delegator. - DelegatorStartingInfo starting_info = 3 [(gogoproto.nullable) = false]; + DelegatorStartingInfo starting_info = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // ValidatorSlashEventRecord is used for import / export via genesis json. @@ -98,13 +102,13 @@ message ValidatorSlashEventRecord { option (gogoproto.goproto_getters) = false; // validator_address is the address of the validator. - string validator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - // height defines the block height at which the slash event occured. + string validator_address = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + // height defines the block height at which the slash event occurred. uint64 height = 2; // period is the period of the slash event. uint64 period = 3; // validator_slash_event describes the slash event. - ValidatorSlashEvent validator_slash_event = 4 [(gogoproto.nullable) = false]; + ValidatorSlashEvent validator_slash_event = 4 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // GenesisState defines the distribution module's genesis state. @@ -112,33 +116,40 @@ message GenesisState { option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; - // params defines all the paramaters of the module. - Params params = 1 [(gogoproto.nullable) = false]; + // params defines all the parameters of the module. + Params params = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // fee_pool defines the fee pool at genesis. - FeePool fee_pool = 2 [(gogoproto.nullable) = false]; + FeePool fee_pool = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // fee_pool defines the delegator withdraw infos at genesis. - repeated DelegatorWithdrawInfo delegator_withdraw_infos = 3 [(gogoproto.nullable) = false]; + repeated DelegatorWithdrawInfo delegator_withdraw_infos = 3 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // fee_pool defines the previous proposer at genesis. string previous_proposer = 4 [(cosmos_proto.scalar) = "cosmos.AddressString"]; // fee_pool defines the outstanding rewards of all validators at genesis. - repeated ValidatorOutstandingRewardsRecord outstanding_rewards = 5 [(gogoproto.nullable) = false]; + repeated ValidatorOutstandingRewardsRecord outstanding_rewards = 5 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; - // fee_pool defines the accumulated commisions of all validators at genesis. - repeated ValidatorAccumulatedCommissionRecord validator_accumulated_commissions = 6 [(gogoproto.nullable) = false]; + // fee_pool defines the accumulated commissions of all validators at genesis. + repeated ValidatorAccumulatedCommissionRecord validator_accumulated_commissions = 6 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // fee_pool defines the historical rewards of all validators at genesis. - repeated ValidatorHistoricalRewardsRecord validator_historical_rewards = 7 [(gogoproto.nullable) = false]; + repeated ValidatorHistoricalRewardsRecord validator_historical_rewards = 7 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // fee_pool defines the current rewards of all validators at genesis. - repeated ValidatorCurrentRewardsRecord validator_current_rewards = 8 [(gogoproto.nullable) = false]; + repeated ValidatorCurrentRewardsRecord validator_current_rewards = 8 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // fee_pool defines the delegator starting infos at genesis. - repeated DelegatorStartingInfoRecord delegator_starting_infos = 9 [(gogoproto.nullable) = false]; + repeated DelegatorStartingInfoRecord delegator_starting_infos = 9 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // fee_pool defines the validator slash events at genesis. - repeated ValidatorSlashEventRecord validator_slash_events = 10 [(gogoproto.nullable) = false]; + repeated ValidatorSlashEventRecord validator_slash_events = 10 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } diff --git a/third_party/proto/cosmos/distribution/v1beta1/query.proto b/third_party/proto/cosmos/distribution/v1beta1/query.proto index a09413fc99..ffb8912135 100644 --- a/third_party/proto/cosmos/distribution/v1beta1/query.proto +++ b/third_party/proto/cosmos/distribution/v1beta1/query.proto @@ -7,6 +7,7 @@ import "google/api/annotations.proto"; import "cosmos/base/v1beta1/coin.proto"; import "cosmos/distribution/v1beta1/distribution.proto"; import "cosmos_proto/cosmos.proto"; +import "amino/amino.proto"; option go_package = "github.com/cosmos/cosmos-sdk/x/distribution/types"; @@ -17,6 +18,12 @@ service Query { option (google.api.http).get = "/cosmos/distribution/v1beta1/params"; } + // ValidatorDistributionInfo queries validator commission and self-delegation rewards for validator + rpc ValidatorDistributionInfo(QueryValidatorDistributionInfoRequest) + returns (QueryValidatorDistributionInfoResponse) { + option (google.api.http).get = "/cosmos/distribution/v1beta1/validators/{validator_address}"; + } + // ValidatorOutstandingRewards queries rewards of a validator address. rpc ValidatorOutstandingRewards(QueryValidatorOutstandingRewardsRequest) returns (QueryValidatorOutstandingRewardsResponse) { @@ -41,7 +48,7 @@ service Query { "{validator_address}"; } - // DelegationTotalRewards queries the total rewards accrued by a each + // DelegationTotalRewards queries the total rewards accrued by each // validator. rpc DelegationTotalRewards(QueryDelegationTotalRewardsRequest) returns (QueryDelegationTotalRewardsResponse) { option (google.api.http).get = "/cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards"; @@ -71,44 +78,64 @@ message QueryParamsRequest {} // QueryParamsResponse is the response type for the Query/Params RPC method. message QueryParamsResponse { // params defines the parameters of the module. - Params params = 1 [(gogoproto.nullable) = false]; + Params params = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// QueryValidatorDistributionInfoRequest is the request type for the Query/ValidatorDistributionInfo RPC method. +message QueryValidatorDistributionInfoRequest { + // validator_address defines the validator address to query for. + string validator_address = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; +} + +// QueryValidatorDistributionInfoResponse is the response type for the Query/ValidatorDistributionInfo RPC method. +message QueryValidatorDistributionInfoResponse { + // operator_address defines the validator operator address. + string operator_address = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + // self_bond_rewards defines the self delegations rewards. + repeated cosmos.base.v1beta1.DecCoin self_bond_rewards = 2 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins" + ]; + // commission defines the commission the validator received. + repeated cosmos.base.v1beta1.DecCoin commission = 3 + [(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins", (gogoproto.nullable) = false]; } // QueryValidatorOutstandingRewardsRequest is the request type for the // Query/ValidatorOutstandingRewards RPC method. message QueryValidatorOutstandingRewardsRequest { // validator_address defines the validator address to query for. - string validator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string validator_address = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; } // QueryValidatorOutstandingRewardsResponse is the response type for the // Query/ValidatorOutstandingRewards RPC method. message QueryValidatorOutstandingRewardsResponse { - ValidatorOutstandingRewards rewards = 1 [(gogoproto.nullable) = false]; + ValidatorOutstandingRewards rewards = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // QueryValidatorCommissionRequest is the request type for the // Query/ValidatorCommission RPC method message QueryValidatorCommissionRequest { // validator_address defines the validator address to query for. - string validator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string validator_address = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; } // QueryValidatorCommissionResponse is the response type for the // Query/ValidatorCommission RPC method message QueryValidatorCommissionResponse { - // commission defines the commision the validator received. - ValidatorAccumulatedCommission commission = 1 [(gogoproto.nullable) = false]; + // commission defines the commission the validator received. + ValidatorAccumulatedCommission commission = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // QueryValidatorSlashesRequest is the request type for the // Query/ValidatorSlashes RPC method message QueryValidatorSlashesRequest { - option (gogoproto.goproto_getters) = false; - option (gogoproto.goproto_stringer) = true; + option (gogoproto.goproto_getters) = false; // validator_address defines the validator address to query for. - string validator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string validator_address = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; // starting_height defines the optional starting height to query the slashes. uint64 starting_height = 2; // starting_height defines the optional ending height to query the slashes. @@ -121,7 +148,7 @@ message QueryValidatorSlashesRequest { // Query/ValidatorSlashes RPC method. message QueryValidatorSlashesResponse { // slashes defines the slashes the validator received. - repeated ValidatorSlashEvent slashes = 1 [(gogoproto.nullable) = false]; + repeated ValidatorSlashEvent slashes = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // pagination defines the pagination in the response. cosmos.base.query.v1beta1.PageResponse pagination = 2; @@ -136,15 +163,18 @@ message QueryDelegationRewardsRequest { // delegator_address defines the delegator address to query for. string delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; // validator_address defines the validator address to query for. - string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; } // QueryDelegationRewardsResponse is the response type for the // Query/DelegationRewards RPC method. message QueryDelegationRewardsResponse { // rewards defines the rewards accrued by a delegation. - repeated cosmos.base.v1beta1.DecCoin rewards = 1 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins"]; + repeated cosmos.base.v1beta1.DecCoin rewards = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins" + ]; } // QueryDelegationTotalRewardsRequest is the request type for the @@ -160,10 +190,13 @@ message QueryDelegationTotalRewardsRequest { // Query/DelegationTotalRewards RPC method. message QueryDelegationTotalRewardsResponse { // rewards defines all the rewards accrued by a delegator. - repeated DelegationDelegatorReward rewards = 1 [(gogoproto.nullable) = false]; + repeated DelegationDelegatorReward rewards = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // total defines the sum of all the rewards. - repeated cosmos.base.v1beta1.DecCoin total = 2 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins"]; + repeated cosmos.base.v1beta1.DecCoin total = 2 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins" + ]; } // QueryDelegatorValidatorsRequest is the request type for the @@ -214,6 +247,9 @@ message QueryCommunityPoolRequest {} // RPC method. message QueryCommunityPoolResponse { // pool defines community pool's coins. - repeated cosmos.base.v1beta1.DecCoin pool = 1 - [(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins", (gogoproto.nullable) = false]; + repeated cosmos.base.v1beta1.DecCoin pool = 1 [ + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; } diff --git a/third_party/proto/cosmos/distribution/v1beta1/tx.proto b/third_party/proto/cosmos/distribution/v1beta1/tx.proto index 68fea0c27c..32318bd812 100644 --- a/third_party/proto/cosmos/distribution/v1beta1/tx.proto +++ b/third_party/proto/cosmos/distribution/v1beta1/tx.proto @@ -8,9 +8,13 @@ import "gogoproto/gogo.proto"; import "cosmos/base/v1beta1/coin.proto"; import "cosmos_proto/cosmos.proto"; import "cosmos/msg/v1/msg.proto"; +import "amino/amino.proto"; +import "cosmos/distribution/v1beta1/distribution.proto"; // Msg defines the distribution Msg service. service Msg { + option (cosmos.msg.v1.service) = true; + // SetWithdrawAddress defines a method to change the withdraw address // for a delegator (or validator self-delegation). rpc SetWithdrawAddress(MsgSetWithdrawAddress) returns (MsgSetWithdrawAddressResponse); @@ -26,12 +30,33 @@ service Msg { // FundCommunityPool defines a method to allow an account to directly // fund the community pool. rpc FundCommunityPool(MsgFundCommunityPool) returns (MsgFundCommunityPoolResponse); + + // UpdateParams defines a governance operation for updating the x/distribution + // module parameters. The authority is defined in the keeper. + // + // Since: cosmos-sdk 0.47 + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); + + // CommunityPoolSpend defines a governance operation for sending tokens from + // the community pool in the x/distribution module to another account, which + // could be the governance module itself. The authority is defined in the + // keeper. + // + // Since: cosmos-sdk 0.47 + rpc CommunityPoolSpend(MsgCommunityPoolSpend) returns (MsgCommunityPoolSpendResponse); + + // DepositValidatorRewardsPool defines a method to provide additional rewards + // to delegators to a specific validator. + // + // Since: cosmos-sdk 0.50 + rpc DepositValidatorRewardsPool(MsgDepositValidatorRewardsPool) returns (MsgDepositValidatorRewardsPoolResponse); } // MsgSetWithdrawAddress sets the withdraw address for // a delegator (or validator self-delegation). message MsgSetWithdrawAddress { option (cosmos.msg.v1.signer) = "delegator_address"; + option (amino.name) = "cosmos-sdk/MsgModifyWithdrawAddress"; option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; @@ -40,58 +65,151 @@ message MsgSetWithdrawAddress { string withdraw_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; } -// MsgSetWithdrawAddressResponse defines the Msg/SetWithdrawAddress response type. +// MsgSetWithdrawAddressResponse defines the Msg/SetWithdrawAddress response +// type. message MsgSetWithdrawAddressResponse {} // MsgWithdrawDelegatorReward represents delegation withdrawal to a delegator // from a single validator. message MsgWithdrawDelegatorReward { option (cosmos.msg.v1.signer) = "delegator_address"; + option (amino.name) = "cosmos-sdk/MsgWithdrawDelegationReward"; option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; string delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; } -// MsgWithdrawDelegatorRewardResponse defines the Msg/WithdrawDelegatorReward response type. +// MsgWithdrawDelegatorRewardResponse defines the Msg/WithdrawDelegatorReward +// response type. message MsgWithdrawDelegatorRewardResponse { // Since: cosmos-sdk 0.46 - repeated cosmos.base.v1beta1.Coin amount = 1 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; + repeated cosmos.base.v1beta1.Coin amount = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; } // MsgWithdrawValidatorCommission withdraws the full commission to the validator // address. message MsgWithdrawValidatorCommission { option (cosmos.msg.v1.signer) = "validator_address"; + option (amino.name) = "cosmos-sdk/MsgWithdrawValCommission"; option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; - string validator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string validator_address = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; } -// MsgWithdrawValidatorCommissionResponse defines the Msg/WithdrawValidatorCommission response type. +// MsgWithdrawValidatorCommissionResponse defines the +// Msg/WithdrawValidatorCommission response type. message MsgWithdrawValidatorCommissionResponse { // Since: cosmos-sdk 0.46 - repeated cosmos.base.v1beta1.Coin amount = 1 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; + repeated cosmos.base.v1beta1.Coin amount = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; } // MsgFundCommunityPool allows an account to directly // fund the community pool. message MsgFundCommunityPool { option (cosmos.msg.v1.signer) = "depositor"; + option (amino.name) = "cosmos-sdk/MsgFundCommunityPool"; option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; - repeated cosmos.base.v1beta1.Coin amount = 1 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; + repeated cosmos.base.v1beta1.Coin amount = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; string depositor = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; } // MsgFundCommunityPoolResponse defines the Msg/FundCommunityPool response type. message MsgFundCommunityPoolResponse {} + +// MsgUpdateParams is the Msg/UpdateParams request type. +// +// Since: cosmos-sdk 0.47 +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "cosmos-sdk/distribution/MsgUpdateParams"; + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // params defines the x/distribution parameters to update. + // + // NOTE: All parameters must be supplied. + Params params = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +// +// Since: cosmos-sdk 0.47 +message MsgUpdateParamsResponse {} + +// MsgCommunityPoolSpend defines a message for sending tokens from the community +// pool to another account. This message is typically executed via a governance +// proposal with the governance module being the executing authority. +// +// Since: cosmos-sdk 0.47 +message MsgCommunityPoolSpend { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "cosmos-sdk/distr/MsgCommunityPoolSpend"; + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string recipient = 2; + repeated cosmos.base.v1beta1.Coin amount = 3 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; +} + +// MsgCommunityPoolSpendResponse defines the response to executing a +// MsgCommunityPoolSpend message. +// +// Since: cosmos-sdk 0.47 +message MsgCommunityPoolSpendResponse {} + +// DepositValidatorRewardsPool defines the request structure to provide +// additional rewards to delegators from a specific validator. +// +// Since: cosmos-sdk 0.50 +message MsgDepositValidatorRewardsPool { + option (amino.name) = "cosmos-sdk/distr/MsgDepositValRewards"; + option (cosmos.msg.v1.signer) = "depositor"; + + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string depositor = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + repeated cosmos.base.v1beta1.Coin amount = 3 [ + (gogoproto.nullable) = false, + (amino.encoding) = "legacy_coins", + (amino.dont_omitempty) = true, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; +} + +// MsgDepositValidatorRewardsPoolResponse defines the response to executing a +// MsgDepositValidatorRewardsPool message. +// +// Since: cosmos-sdk 0.50 +message MsgDepositValidatorRewardsPoolResponse {} diff --git a/third_party/proto/cosmos/evidence/module/v1/module.proto b/third_party/proto/cosmos/evidence/module/v1/module.proto new file mode 100644 index 0000000000..5b2ede6513 --- /dev/null +++ b/third_party/proto/cosmos/evidence/module/v1/module.proto @@ -0,0 +1,12 @@ +syntax = "proto3"; + +package cosmos.evidence.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object of the evidence module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "cosmossdk.io/x/evidence" + }; +} \ No newline at end of file diff --git a/third_party/proto/cosmos/evidence/v1beta1/evidence.proto b/third_party/proto/cosmos/evidence/v1beta1/evidence.proto index 83f9ec3d37..21b2c5d8e9 100644 --- a/third_party/proto/cosmos/evidence/v1beta1/evidence.proto +++ b/third_party/proto/cosmos/evidence/v1beta1/evidence.proto @@ -1,9 +1,10 @@ syntax = "proto3"; package cosmos.evidence.v1beta1; -option go_package = "github.com/cosmos/cosmos-sdk/x/evidence/types"; +option go_package = "cosmossdk.io/x/evidence/types"; option (gogoproto.equal_all) = true; +import "amino/amino.proto"; import "gogoproto/gogo.proto"; import "google/protobuf/timestamp.proto"; import "cosmos_proto/cosmos.proto"; @@ -11,12 +12,20 @@ import "cosmos_proto/cosmos.proto"; // Equivocation implements the Evidence interface and defines evidence of double // signing misbehavior. message Equivocation { - option (gogoproto.goproto_stringer) = false; - option (gogoproto.goproto_getters) = false; - option (gogoproto.equal) = false; + option (amino.name) = "cosmos-sdk/Equivocation"; + option (gogoproto.goproto_getters) = false; + option (gogoproto.equal) = false; - int64 height = 1; - google.protobuf.Timestamp time = 2 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; - int64 power = 3; - string consensus_address = 4 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + // height is the equivocation height. + int64 height = 1; + + // time is the equivocation time. + google.protobuf.Timestamp time = 2 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.stdtime) = true]; + + // power is the equivocation validator power. + int64 power = 3; + + // consensus_address is the equivocation validator consensus address. + string consensus_address = 4 [(cosmos_proto.scalar) = "cosmos.AddressString"]; } \ No newline at end of file diff --git a/third_party/proto/cosmos/evidence/v1beta1/genesis.proto b/third_party/proto/cosmos/evidence/v1beta1/genesis.proto index 199f446f7e..33b354e247 100644 --- a/third_party/proto/cosmos/evidence/v1beta1/genesis.proto +++ b/third_party/proto/cosmos/evidence/v1beta1/genesis.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package cosmos.evidence.v1beta1; -option go_package = "github.com/cosmos/cosmos-sdk/x/evidence/types"; +option go_package = "cosmossdk.io/x/evidence/types"; import "google/protobuf/any.proto"; diff --git a/third_party/proto/cosmos/evidence/v1beta1/query.proto b/third_party/proto/cosmos/evidence/v1beta1/query.proto index eda00544c7..f4af8ab7f8 100644 --- a/third_party/proto/cosmos/evidence/v1beta1/query.proto +++ b/third_party/proto/cosmos/evidence/v1beta1/query.proto @@ -2,17 +2,16 @@ syntax = "proto3"; package cosmos.evidence.v1beta1; import "cosmos/base/query/v1beta1/pagination.proto"; -import "gogoproto/gogo.proto"; import "google/protobuf/any.proto"; import "google/api/annotations.proto"; -option go_package = "github.com/cosmos/cosmos-sdk/x/evidence/types"; +option go_package = "cosmossdk.io/x/evidence/types"; // Query defines the gRPC querier service. service Query { // Evidence queries evidence based on evidence hash. rpc Evidence(QueryEvidenceRequest) returns (QueryEvidenceResponse) { - option (google.api.http).get = "/cosmos/evidence/v1beta1/evidence/{evidence_hash}"; + option (google.api.http).get = "/cosmos/evidence/v1beta1/evidence/{hash}"; } // AllEvidence queries all evidence. @@ -24,7 +23,13 @@ service Query { // QueryEvidenceRequest is the request type for the Query/Evidence RPC method. message QueryEvidenceRequest { // evidence_hash defines the hash of the requested evidence. - bytes evidence_hash = 1 [(gogoproto.casttype) = "github.com/tendermint/tendermint/libs/bytes.HexBytes"]; + // Deprecated: Use hash, a HEX encoded string, instead. + bytes evidence_hash = 1 [deprecated = true]; + + // hash defines the evidence hash of the requested evidence. + // + // Since: cosmos-sdk 0.47 + string hash = 2; } // QueryEvidenceResponse is the response type for the Query/Evidence RPC method. diff --git a/third_party/proto/cosmos/evidence/v1beta1/tx.proto b/third_party/proto/cosmos/evidence/v1beta1/tx.proto index 223f7e1110..5eeaa6e909 100644 --- a/third_party/proto/cosmos/evidence/v1beta1/tx.proto +++ b/third_party/proto/cosmos/evidence/v1beta1/tx.proto @@ -1,16 +1,19 @@ syntax = "proto3"; package cosmos.evidence.v1beta1; -option go_package = "github.com/cosmos/cosmos-sdk/x/evidence/types"; +option go_package = "cosmossdk.io/x/evidence/types"; option (gogoproto.equal_all) = true; import "gogoproto/gogo.proto"; import "google/protobuf/any.proto"; import "cosmos_proto/cosmos.proto"; import "cosmos/msg/v1/msg.proto"; +import "amino/amino.proto"; // Msg defines the evidence Msg service. service Msg { + option (cosmos.msg.v1.service) = true; + // SubmitEvidence submits an arbitrary Evidence of misbehavior such as equivocation or // counterfactual signing. rpc SubmitEvidence(MsgSubmitEvidence) returns (MsgSubmitEvidenceResponse); @@ -20,12 +23,16 @@ service Msg { // Evidence of misbehavior such as equivocation or counterfactual signing. message MsgSubmitEvidence { option (cosmos.msg.v1.signer) = "submitter"; + option (amino.name) = "cosmos-sdk/MsgSubmitEvidence"; option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; - string submitter = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - google.protobuf.Any evidence = 2 [(cosmos_proto.accepts_interface) = "Evidence"]; + // submitter is the signer account address of evidence. + string submitter = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // evidence defines the evidence of misbehavior. + google.protobuf.Any evidence = 2 [(cosmos_proto.accepts_interface) = "cosmos.evidence.v1beta1.Evidence"]; } // MsgSubmitEvidenceResponse defines the Msg/SubmitEvidence response type. diff --git a/third_party/proto/cosmos/feegrant/module/v1/module.proto b/third_party/proto/cosmos/feegrant/module/v1/module.proto new file mode 100644 index 0000000000..c5d6c24e07 --- /dev/null +++ b/third_party/proto/cosmos/feegrant/module/v1/module.proto @@ -0,0 +1,12 @@ +syntax = "proto3"; + +package cosmos.feegrant.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object of the feegrant module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "cosmossdk.io/x/feegrant" + }; +} \ No newline at end of file diff --git a/third_party/proto/cosmos/feegrant/v1beta1/feegrant.proto b/third_party/proto/cosmos/feegrant/v1beta1/feegrant.proto index ec4e7a1e09..a1c67eafbd 100644 --- a/third_party/proto/cosmos/feegrant/v1beta1/feegrant.proto +++ b/third_party/proto/cosmos/feegrant/v1beta1/feegrant.proto @@ -6,21 +6,27 @@ import "gogoproto/gogo.proto"; import "google/protobuf/any.proto"; import "cosmos_proto/cosmos.proto"; import "cosmos/base/v1beta1/coin.proto"; +import "amino/amino.proto"; import "google/protobuf/timestamp.proto"; import "google/protobuf/duration.proto"; -option go_package = "github.com/cosmos/cosmos-sdk/x/feegrant"; +option go_package = "cosmossdk.io/x/feegrant"; // BasicAllowance implements Allowance with a one-time grant of coins // that optionally expires. The grantee can use up to SpendLimit to cover fees. message BasicAllowance { - option (cosmos_proto.implements_interface) = "FeeAllowanceI"; + option (cosmos_proto.implements_interface) = "cosmos.feegrant.v1beta1.FeeAllowanceI"; + option (amino.name) = "cosmos-sdk/BasicAllowance"; // spend_limit specifies the maximum amount of coins that can be spent // by this allowance and will be updated as coins are spent. If it is // empty, there is no spend limit and any amount of coins can be spent. - repeated cosmos.base.v1beta1.Coin spend_limit = 1 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; + repeated cosmos.base.v1beta1.Coin spend_limit = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; // expiration specifies an optional time when this allowance expires google.protobuf.Timestamp expiration = 2 [(gogoproto.stdtime) = true]; @@ -29,37 +35,49 @@ message BasicAllowance { // PeriodicAllowance extends Allowance to allow for both a maximum cap, // as well as a limit per time period. message PeriodicAllowance { - option (cosmos_proto.implements_interface) = "FeeAllowanceI"; + option (cosmos_proto.implements_interface) = "cosmos.feegrant.v1beta1.FeeAllowanceI"; + option (amino.name) = "cosmos-sdk/PeriodicAllowance"; // basic specifies a struct of `BasicAllowance` - BasicAllowance basic = 1 [(gogoproto.nullable) = false]; + BasicAllowance basic = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // period specifies the time duration in which period_spend_limit coins can // be spent before that allowance is reset - google.protobuf.Duration period = 2 [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; + google.protobuf.Duration period = 2 + [(gogoproto.stdduration) = true, (gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // period_spend_limit specifies the maximum number of coins that can be spent // in the period - repeated cosmos.base.v1beta1.Coin period_spend_limit = 3 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; + repeated cosmos.base.v1beta1.Coin period_spend_limit = 3 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; // period_can_spend is the number of coins left to be spent before the period_reset time - repeated cosmos.base.v1beta1.Coin period_can_spend = 4 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; + repeated cosmos.base.v1beta1.Coin period_can_spend = 4 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; // period_reset is the time at which this period resets and a new one begins, // it is calculated from the start time of the first transaction after the // last period ended - google.protobuf.Timestamp period_reset = 5 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; + google.protobuf.Timestamp period_reset = 5 + [(gogoproto.stdtime) = true, (gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // AllowedMsgAllowance creates allowance only for specified message types. message AllowedMsgAllowance { option (gogoproto.goproto_getters) = false; - option (cosmos_proto.implements_interface) = "FeeAllowanceI"; + option (cosmos_proto.implements_interface) = "cosmos.feegrant.v1beta1.FeeAllowanceI"; + option (amino.name) = "cosmos-sdk/AllowedMsgAllowance"; // allowance can be any of basic and periodic fee allowance. - google.protobuf.Any allowance = 1 [(cosmos_proto.accepts_interface) = "FeeAllowanceI"]; + google.protobuf.Any allowance = 1 [(cosmos_proto.accepts_interface) = "cosmos.feegrant.v1beta1.FeeAllowanceI"]; // allowed_messages are the messages for which the grantee has the access. repeated string allowed_messages = 2; @@ -74,5 +92,5 @@ message Grant { string grantee = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; // allowance can be any of basic, periodic, allowed fee allowance. - google.protobuf.Any allowance = 3 [(cosmos_proto.accepts_interface) = "FeeAllowanceI"]; + google.protobuf.Any allowance = 3 [(cosmos_proto.accepts_interface) = "cosmos.feegrant.v1beta1.FeeAllowanceI"]; } diff --git a/third_party/proto/cosmos/feegrant/v1beta1/genesis.proto b/third_party/proto/cosmos/feegrant/v1beta1/genesis.proto index 5b1ac4ca55..ac7e57e1e4 100644 --- a/third_party/proto/cosmos/feegrant/v1beta1/genesis.proto +++ b/third_party/proto/cosmos/feegrant/v1beta1/genesis.proto @@ -4,10 +4,11 @@ package cosmos.feegrant.v1beta1; import "gogoproto/gogo.proto"; import "cosmos/feegrant/v1beta1/feegrant.proto"; +import "amino/amino.proto"; -option go_package = "github.com/cosmos/cosmos-sdk/x/feegrant"; +option go_package = "cosmossdk.io/x/feegrant"; // GenesisState contains a set of fee allowances, persisted from the store message GenesisState { - repeated Grant allowances = 1 [(gogoproto.nullable) = false]; + repeated Grant allowances = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } diff --git a/third_party/proto/cosmos/feegrant/v1beta1/query.proto b/third_party/proto/cosmos/feegrant/v1beta1/query.proto index baef777016..591537acd9 100644 --- a/third_party/proto/cosmos/feegrant/v1beta1/query.proto +++ b/third_party/proto/cosmos/feegrant/v1beta1/query.proto @@ -7,17 +7,17 @@ import "cosmos/base/query/v1beta1/pagination.proto"; import "google/api/annotations.proto"; import "cosmos_proto/cosmos.proto"; -option go_package = "github.com/cosmos/cosmos-sdk/x/feegrant"; +option go_package = "cosmossdk.io/x/feegrant"; // Query defines the gRPC querier service. service Query { - // Allowance returns fee granted to the grantee by the granter. + // Allowance returns granted allwance to the grantee by the granter. rpc Allowance(QueryAllowanceRequest) returns (QueryAllowanceResponse) { option (google.api.http).get = "/cosmos/feegrant/v1beta1/allowance/{granter}/{grantee}"; } - // Allowances returns all the grants for address. + // Allowances returns all the grants for the given grantee address. rpc Allowances(QueryAllowancesRequest) returns (QueryAllowancesResponse) { option (google.api.http).get = "/cosmos/feegrant/v1beta1/allowances/{grantee}"; } diff --git a/third_party/proto/cosmos/feegrant/v1beta1/tx.proto b/third_party/proto/cosmos/feegrant/v1beta1/tx.proto index a12d9aaab1..a45eec3ba3 100644 --- a/third_party/proto/cosmos/feegrant/v1beta1/tx.proto +++ b/third_party/proto/cosmos/feegrant/v1beta1/tx.proto @@ -5,11 +5,13 @@ package cosmos.feegrant.v1beta1; import "google/protobuf/any.proto"; import "cosmos_proto/cosmos.proto"; import "cosmos/msg/v1/msg.proto"; +import "amino/amino.proto"; -option go_package = "github.com/cosmos/cosmos-sdk/x/feegrant"; +option go_package = "cosmossdk.io/x/feegrant"; // Msg defines the feegrant msg service. service Msg { + option (cosmos.msg.v1.service) = true; // GrantAllowance grants fee allowance to the grantee on the granter's // account with the provided expiration time. @@ -18,12 +20,18 @@ service Msg { // RevokeAllowance revokes any fee allowance of granter's account that // has been granted to the grantee. rpc RevokeAllowance(MsgRevokeAllowance) returns (MsgRevokeAllowanceResponse); + + // PruneAllowances prunes expired fee allowances, currently up to 75 at a time. + // + // Since cosmos-sdk 0.50 + rpc PruneAllowances(MsgPruneAllowances) returns (MsgPruneAllowancesResponse); } // MsgGrantAllowance adds permission for Grantee to spend up to Allowance // of fees from the account of Granter. message MsgGrantAllowance { option (cosmos.msg.v1.signer) = "granter"; + option (amino.name) = "cosmos-sdk/MsgGrantAllowance"; // granter is the address of the user granting an allowance of their funds. string granter = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; @@ -32,7 +40,7 @@ message MsgGrantAllowance { string grantee = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; // allowance can be any of basic, periodic, allowed fee allowance. - google.protobuf.Any allowance = 3 [(cosmos_proto.accepts_interface) = "FeeAllowanceI"]; + google.protobuf.Any allowance = 3 [(cosmos_proto.accepts_interface) = "cosmos.feegrant.v1beta1.FeeAllowanceI"]; } // MsgGrantAllowanceResponse defines the Msg/GrantAllowanceResponse response type. @@ -41,6 +49,7 @@ message MsgGrantAllowanceResponse {} // MsgRevokeAllowance removes any existing Allowance from Granter to Grantee. message MsgRevokeAllowance { option (cosmos.msg.v1.signer) = "granter"; + option (amino.name) = "cosmos-sdk/MsgRevokeAllowance"; // granter is the address of the user granting an allowance of their funds. string granter = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; @@ -51,3 +60,18 @@ message MsgRevokeAllowance { // MsgRevokeAllowanceResponse defines the Msg/RevokeAllowanceResponse response type. message MsgRevokeAllowanceResponse {} + +// MsgPruneAllowances prunes expired fee allowances. +// +// Since cosmos-sdk 0.50 +message MsgPruneAllowances { + option (cosmos.msg.v1.signer) = "pruner"; + + // pruner is the address of the user pruning expired allowances. + string pruner = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// MsgPruneAllowancesResponse defines the Msg/PruneAllowancesResponse response type. +// +// Since cosmos-sdk 0.50 +message MsgPruneAllowancesResponse {} \ No newline at end of file diff --git a/third_party/proto/cosmos/genutil/module/v1/module.proto b/third_party/proto/cosmos/genutil/module/v1/module.proto new file mode 100644 index 0000000000..86e6f5763d --- /dev/null +++ b/third_party/proto/cosmos/genutil/module/v1/module.proto @@ -0,0 +1,12 @@ +syntax = "proto3"; + +package cosmos.genutil.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object for the genutil module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "github.com/cosmos/cosmos-sdk/x/genutil" + }; +} \ No newline at end of file diff --git a/third_party/proto/cosmos/genutil/v1beta1/genesis.proto b/third_party/proto/cosmos/genutil/v1beta1/genesis.proto index 958d15feb9..dfd34943ea 100644 --- a/third_party/proto/cosmos/genutil/v1beta1/genesis.proto +++ b/third_party/proto/cosmos/genutil/v1beta1/genesis.proto @@ -2,11 +2,17 @@ syntax = "proto3"; package cosmos.genutil.v1beta1; import "gogoproto/gogo.proto"; +import "amino/amino.proto"; option go_package = "github.com/cosmos/cosmos-sdk/x/genutil/types"; // GenesisState defines the raw genesis transaction in JSON. message GenesisState { // gen_txs defines the genesis transactions. - repeated bytes gen_txs = 1 [(gogoproto.casttype) = "encoding/json.RawMessage", (gogoproto.jsontag) = "gentxs"]; -} + repeated bytes gen_txs = 1 [ + (gogoproto.casttype) = "encoding/json.RawMessage", + (gogoproto.jsontag) = "gentxs", + (amino.field_name) = "gentxs", + (amino.dont_omitempty) = true + ]; +} \ No newline at end of file diff --git a/third_party/proto/cosmos/gov/module/v1/module.proto b/third_party/proto/cosmos/gov/module/v1/module.proto new file mode 100644 index 0000000000..9cade9af01 --- /dev/null +++ b/third_party/proto/cosmos/gov/module/v1/module.proto @@ -0,0 +1,19 @@ +syntax = "proto3"; + +package cosmos.gov.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object of the gov module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "github.com/cosmos/cosmos-sdk/x/gov" + }; + + // max_metadata_len defines the maximum proposal metadata length. + // Defaults to 255 if not explicitly set. + uint64 max_metadata_len = 1; + + // authority defines the custom module authority. If not set, defaults to the governance module. + string authority = 2; +} \ No newline at end of file diff --git a/third_party/proto/cosmos/gov/v1/genesis.proto b/third_party/proto/cosmos/gov/v1/genesis.proto index cb44a7f34c..1398b33268 100644 --- a/third_party/proto/cosmos/gov/v1/genesis.proto +++ b/third_party/proto/cosmos/gov/v1/genesis.proto @@ -17,10 +17,24 @@ message GenesisState { repeated Vote votes = 3; // proposals defines all the proposals present at genesis. repeated Proposal proposals = 4; - // params defines all the paramaters of related to deposit. - DepositParams deposit_params = 5; - // params defines all the paramaters of related to voting. - VotingParams voting_params = 6; - // params defines all the paramaters of related to tally. - TallyParams tally_params = 7; + // Deprecated: Prefer to use `params` instead. + // deposit_params defines all the paramaters of related to deposit. + DepositParams deposit_params = 5 [deprecated = true]; + // Deprecated: Prefer to use `params` instead. + // voting_params defines all the paramaters of related to voting. + VotingParams voting_params = 6 [deprecated = true]; + // Deprecated: Prefer to use `params` instead. + // tally_params defines all the paramaters of related to tally. + TallyParams tally_params = 7 [deprecated = true]; + // params defines all the paramaters of x/gov module. + // + // Since: cosmos-sdk 0.47 + Params params = 8; + // The constitution allows builders to lay a foundation and define purpose. + // This is an immutable string set in genesis. + // There are no amendments, to go outside of scope, just fork. + // constitution is an immutable string in genesis for a chain builder to lay out their vision, ideas and ideals. + // + // Since: cosmos-sdk 0.50 + string constitution = 9; } diff --git a/third_party/proto/cosmos/gov/v1/gov.proto b/third_party/proto/cosmos/gov/v1/gov.proto index 8a8572335d..0ebfbc1d1f 100644 --- a/third_party/proto/cosmos/gov/v1/gov.proto +++ b/third_party/proto/cosmos/gov/v1/gov.proto @@ -8,6 +8,7 @@ import "google/protobuf/timestamp.proto"; import "google/protobuf/any.proto"; import "google/protobuf/duration.proto"; import "cosmos_proto/cosmos.proto"; +import "amino/amino.proto"; option go_package = "github.com/cosmos/cosmos-sdk/x/gov/types/v1"; @@ -27,35 +28,86 @@ enum VoteOption { // WeightedVoteOption defines a unit of vote for vote split. message WeightedVoteOption { + // option defines the valid vote options, it must not contain duplicate vote options. VoteOption option = 1; - string weight = 2 [(cosmos_proto.scalar) = "cosmos.Dec"]; + + // weight is the vote weight associated with the vote option. + string weight = 2 [(cosmos_proto.scalar) = "cosmos.Dec"]; } // Deposit defines an amount deposited by an account address to an active // proposal. message Deposit { - uint64 proposal_id = 1; - string depositor = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - repeated cosmos.base.v1beta1.Coin amount = 3 [(gogoproto.nullable) = false]; + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1; + + // depositor defines the deposit addresses from the proposals. + string depositor = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // amount to be deposited by depositor. + repeated cosmos.base.v1beta1.Coin amount = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // Proposal defines the core field members of a governance proposal. message Proposal { - uint64 id = 1; + // id defines the unique id of the proposal. + uint64 id = 1; + + // messages are the arbitrary messages to be executed if the proposal passes. repeated google.protobuf.Any messages = 2; - ProposalStatus status = 3; + + // status defines the proposal status. + ProposalStatus status = 3; + // final_tally_result is the final tally result of the proposal. When // querying a proposal via gRPC, this field is not populated until the // proposal's voting period has ended. - TallyResult final_tally_result = 4; - google.protobuf.Timestamp submit_time = 5 [(gogoproto.stdtime) = true]; - google.protobuf.Timestamp deposit_end_time = 6 [(gogoproto.stdtime) = true]; - repeated cosmos.base.v1beta1.Coin total_deposit = 7 [(gogoproto.nullable) = false]; - google.protobuf.Timestamp voting_start_time = 8 [(gogoproto.stdtime) = true]; - google.protobuf.Timestamp voting_end_time = 9 [(gogoproto.stdtime) = true]; + TallyResult final_tally_result = 4; + + // submit_time is the time of proposal submission. + google.protobuf.Timestamp submit_time = 5 [(gogoproto.stdtime) = true]; + + // deposit_end_time is the end time for deposition. + google.protobuf.Timestamp deposit_end_time = 6 [(gogoproto.stdtime) = true]; + + // total_deposit is the total deposit on the proposal. + repeated cosmos.base.v1beta1.Coin total_deposit = 7 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // voting_start_time is the starting time to vote on a proposal. + google.protobuf.Timestamp voting_start_time = 8 [(gogoproto.stdtime) = true]; + + // voting_end_time is the end time of voting on a proposal. + google.protobuf.Timestamp voting_end_time = 9 [(gogoproto.stdtime) = true]; // metadata is any arbitrary metadata attached to the proposal. + // the recommended format of the metadata is to be found here: + // https://docs.cosmos.network/v0.47/modules/gov#proposal-3 string metadata = 10; + + // title is the title of the proposal + // + // Since: cosmos-sdk 0.47 + string title = 11; + + // summary is a short summary of the proposal + // + // Since: cosmos-sdk 0.47 + string summary = 12; + + // proposer is the address of the proposal sumbitter + // + // Since: cosmos-sdk 0.47 + string proposer = 13 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // expedited defines if the proposal is expedited + // + // Since: cosmos-sdk 0.50 + bool expedited = 14; + + // failed_reason defines the reason why the proposal failed + // + // Since: cosmos-sdk 0.50 + string failed_reason = 15; } // ProposalStatus enumerates the valid statuses of a proposal. @@ -81,52 +133,139 @@ enum ProposalStatus { // TallyResult defines a standard tally for a governance proposal. message TallyResult { - string yes_count = 1 [(cosmos_proto.scalar) = "cosmos.Int"]; - string abstain_count = 2 [(cosmos_proto.scalar) = "cosmos.Int"]; - string no_count = 3 [(cosmos_proto.scalar) = "cosmos.Int"]; + // yes_count is the number of yes votes on a proposal. + string yes_count = 1 [(cosmos_proto.scalar) = "cosmos.Int"]; + // abstain_count is the number of abstain votes on a proposal. + string abstain_count = 2 [(cosmos_proto.scalar) = "cosmos.Int"]; + // no_count is the number of no votes on a proposal. + string no_count = 3 [(cosmos_proto.scalar) = "cosmos.Int"]; + // no_with_veto_count is the number of no with veto votes on a proposal. string no_with_veto_count = 4 [(cosmos_proto.scalar) = "cosmos.Int"]; } // Vote defines a vote on a governance proposal. // A Vote consists of a proposal ID, the voter, and the vote option. message Vote { + // proposal_id defines the unique id of the proposal. uint64 proposal_id = 1; - string voter = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // voter is the voter address of the proposal. + string voter = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + reserved 3; + + // options is the weighted vote options. repeated WeightedVoteOption options = 4; - // metadata is any arbitrary metadata to attached to the vote. + // metadata is any arbitrary metadata attached to the vote. + // the recommended format of the metadata is to be found here: https://docs.cosmos.network/v0.47/modules/gov#vote-5 string metadata = 5; } // DepositParams defines the params for deposits on governance proposals. message DepositParams { - // Minimum deposit for a proposal to enter voting period. + option deprecated = true; + + // Minimum deposit for a proposal to enter voting period. repeated cosmos.base.v1beta1.Coin min_deposit = 1 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "min_deposit,omitempty"]; - // Maximum period for Atom holders to deposit on a proposal. Initial value: 2 - // months. + // Maximum period for Atom holders to deposit on a proposal. Initial value: 2 + // months. google.protobuf.Duration max_deposit_period = 2 [(gogoproto.stdduration) = true, (gogoproto.jsontag) = "max_deposit_period,omitempty"]; } // VotingParams defines the params for voting on governance proposals. message VotingParams { - // Length of the voting period. + option deprecated = true; + + // Duration of the voting period. google.protobuf.Duration voting_period = 1 [(gogoproto.stdduration) = true]; } // TallyParams defines the params for tallying votes on governance proposals. message TallyParams { + option deprecated = true; + + // Minimum percentage of total stake needed to vote for a result to be + // considered valid. + string quorum = 1 [(cosmos_proto.scalar) = "cosmos.Dec"]; + + // Minimum proportion of Yes votes for proposal to pass. Default value: 0.5. + string threshold = 2 [(cosmos_proto.scalar) = "cosmos.Dec"]; + + // Minimum value of Veto votes to Total votes ratio for proposal to be + // vetoed. Default value: 1/3. + string veto_threshold = 3 [(cosmos_proto.scalar) = "cosmos.Dec"]; +} + +// Params defines the parameters for the x/gov module. +// +// Since: cosmos-sdk 0.47 +message Params { + // Minimum deposit for a proposal to enter voting period. + repeated cosmos.base.v1beta1.Coin min_deposit = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // Maximum period for Atom holders to deposit on a proposal. Initial value: 2 + // months. + google.protobuf.Duration max_deposit_period = 2 [(gogoproto.stdduration) = true]; + + // Duration of the voting period. + google.protobuf.Duration voting_period = 3 [(gogoproto.stdduration) = true]; + // Minimum percentage of total stake needed to vote for a result to be // considered valid. - string quorum = 1 [(cosmos_proto.scalar) = "cosmos.Dec", (gogoproto.jsontag) = "quorum,omitempty"]; + string quorum = 4 [(cosmos_proto.scalar) = "cosmos.Dec"]; // Minimum proportion of Yes votes for proposal to pass. Default value: 0.5. - string threshold = 2 [(cosmos_proto.scalar) = "cosmos.Dec", (gogoproto.jsontag) = "threshold,omitempty"]; + string threshold = 5 [(cosmos_proto.scalar) = "cosmos.Dec"]; // Minimum value of Veto votes to Total votes ratio for proposal to be // vetoed. Default value: 1/3. - string veto_threshold = 3 [(cosmos_proto.scalar) = "cosmos.Dec", (gogoproto.jsontag) = "veto_threshold,omitempty"]; + string veto_threshold = 6 [(cosmos_proto.scalar) = "cosmos.Dec"]; + + // The ratio representing the proportion of the deposit value that must be paid at proposal submission. + string min_initial_deposit_ratio = 7 [(cosmos_proto.scalar) = "cosmos.Dec"]; + + // The cancel ratio which will not be returned back to the depositors when a proposal is cancelled. + // + // Since: cosmos-sdk 0.50 + string proposal_cancel_ratio = 8 [(cosmos_proto.scalar) = "cosmos.Dec"]; + + // The address which will receive (proposal_cancel_ratio * deposit) proposal deposits. + // If empty, the (proposal_cancel_ratio * deposit) proposal deposits will be burned. + // + // Since: cosmos-sdk 0.50 + string proposal_cancel_dest = 9 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // Duration of the voting period of an expedited proposal. + // + // Since: cosmos-sdk 0.50 + google.protobuf.Duration expedited_voting_period = 10 [(gogoproto.stdduration) = true]; + + // Minimum proportion of Yes votes for proposal to pass. Default value: 0.67. + // + // Since: cosmos-sdk 0.50 + string expedited_threshold = 11 [(cosmos_proto.scalar) = "cosmos.Dec"]; + + // Minimum expedited deposit for a proposal to enter voting period. + repeated cosmos.base.v1beta1.Coin expedited_min_deposit = 12 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // burn deposits if a proposal does not meet quorum + bool burn_vote_quorum = 13; + + // burn deposits if the proposal does not enter voting period + bool burn_proposal_deposit_prevote = 14; + + // burn deposits if quorum with vote type no_veto is met + bool burn_vote_veto = 15; + + // The ratio representing the proportion of the deposit value minimum that must be met when making a deposit. + // Default value: 0.01. Meaning that for a chain with a min_deposit of 100stake, a deposit of 1stake would be + // required. + // + // Since: cosmos-sdk 0.50 + string min_deposit_ratio = 16 [(cosmos_proto.scalar) = "cosmos.Dec"]; } diff --git a/third_party/proto/cosmos/gov/v1/query.proto b/third_party/proto/cosmos/gov/v1/query.proto index b9d5914507..006d12fd61 100644 --- a/third_party/proto/cosmos/gov/v1/query.proto +++ b/third_party/proto/cosmos/gov/v1/query.proto @@ -1,4 +1,3 @@ - // Since: cosmos-sdk 0.46 syntax = "proto3"; package cosmos.gov.v1; @@ -12,6 +11,11 @@ option go_package = "github.com/cosmos/cosmos-sdk/x/gov/types/v1"; // Query defines the gRPC querier service for gov module service Query { + // Constitution queries the chain's constitution. + rpc Constitution(QueryConstitutionRequest) returns (QueryConstitutionResponse) { + option (google.api.http).get = "/cosmos/gov/v1/constitution"; + } + // Proposal queries proposal details based on ProposalID. rpc Proposal(QueryProposalRequest) returns (QueryProposalResponse) { option (google.api.http).get = "/cosmos/gov/v1/proposals/{proposal_id}"; @@ -37,7 +41,7 @@ service Query { option (google.api.http).get = "/cosmos/gov/v1/params/{params_type}"; } - // Deposit queries single deposit information based proposalID, depositAddr. + // Deposit queries single deposit information based on proposalID, depositAddr. rpc Deposit(QueryDepositRequest) returns (QueryDepositResponse) { option (google.api.http).get = "/cosmos/gov/v1/proposals/{proposal_id}/deposits/{depositor}"; } @@ -53,6 +57,14 @@ service Query { } } +// QueryConstitutionRequest is the request type for the Query/Constitution RPC method +message QueryConstitutionRequest {} + +// QueryConstitutionResponse is the response type for the Query/Constitution RPC method +message QueryConstitutionResponse { + string constitution = 1; +} + // QueryProposalRequest is the request type for the Query/Proposal RPC method. message QueryProposalRequest { // proposal_id defines the unique id of the proposal. @@ -61,6 +73,7 @@ message QueryProposalRequest { // QueryProposalResponse is the response type for the Query/Proposal RPC method. message QueryProposalResponse { + // proposal is the requested governance proposal. Proposal proposal = 1; } @@ -82,6 +95,7 @@ message QueryProposalsRequest { // QueryProposalsResponse is the response type for the Query/Proposals RPC // method. message QueryProposalsResponse { + // proposals defines all the requested governance proposals. repeated Proposal proposals = 1; // pagination defines the pagination in the response. @@ -99,7 +113,7 @@ message QueryVoteRequest { // QueryVoteResponse is the response type for the Query/Vote RPC method. message QueryVoteResponse { - // vote defined the queried vote. + // vote defines the queried vote. Vote vote = 1; } @@ -114,7 +128,7 @@ message QueryVotesRequest { // QueryVotesResponse is the response type for the Query/Votes RPC method. message QueryVotesResponse { - // votes defined the queried votes. + // votes defines the queried votes. repeated Vote votes = 1; // pagination defines the pagination in the response. @@ -130,12 +144,19 @@ message QueryParamsRequest { // QueryParamsResponse is the response type for the Query/Params RPC method. message QueryParamsResponse { + // Deprecated: Prefer to use `params` instead. // voting_params defines the parameters related to voting. - VotingParams voting_params = 1; + VotingParams voting_params = 1 [deprecated = true]; + // Deprecated: Prefer to use `params` instead. // deposit_params defines the parameters related to deposit. - DepositParams deposit_params = 2; + DepositParams deposit_params = 2 [deprecated = true]; + // Deprecated: Prefer to use `params` instead. // tally_params defines the parameters related to tally. - TallyParams tally_params = 3; + TallyParams tally_params = 3 [deprecated = true]; + // params defines all the paramaters of x/gov module. + // + // Since: cosmos-sdk 0.47 + Params params = 4; } // QueryDepositRequest is the request type for the Query/Deposit RPC method. @@ -164,6 +185,7 @@ message QueryDepositsRequest { // QueryDepositsResponse is the response type for the Query/Deposits RPC method. message QueryDepositsResponse { + // deposits defines the requested deposits. repeated Deposit deposits = 1; // pagination defines the pagination in the response. diff --git a/third_party/proto/cosmos/gov/v1/tx.proto b/third_party/proto/cosmos/gov/v1/tx.proto index 9306c51e8c..21920a5ffc 100644 --- a/third_party/proto/cosmos/gov/v1/tx.proto +++ b/third_party/proto/cosmos/gov/v1/tx.proto @@ -8,12 +8,16 @@ import "gogoproto/gogo.proto"; import "cosmos_proto/cosmos.proto"; import "google/protobuf/any.proto"; import "cosmos/msg/v1/msg.proto"; +import "amino/amino.proto"; +import "google/protobuf/timestamp.proto"; option go_package = "github.com/cosmos/cosmos-sdk/x/gov/types/v1"; // Msg defines the gov Msg service. service Msg { - // SubmitProposal defines a method to create new proposal given a content. + option (cosmos.msg.v1.service) = true; + + // SubmitProposal defines a method to create new proposal given the messages. rpc SubmitProposal(MsgSubmitProposal) returns (MsgSubmitProposalResponse); // ExecLegacyContent defines a Msg to be in included in a MsgSubmitProposal @@ -28,22 +32,61 @@ service Msg { // Deposit defines a method to add deposit on a specific proposal. rpc Deposit(MsgDeposit) returns (MsgDepositResponse); + + // UpdateParams defines a governance operation for updating the x/gov module + // parameters. The authority is defined in the keeper. + // + // Since: cosmos-sdk 0.47 + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); + + // CancelProposal defines a method to cancel governance proposal + // + // Since: cosmos-sdk 0.50 + rpc CancelProposal(MsgCancelProposal) returns (MsgCancelProposalResponse); } // MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary // proposal Content. message MsgSubmitProposal { option (cosmos.msg.v1.signer) = "proposer"; + option (amino.name) = "cosmos-sdk/v1/MsgSubmitProposal"; + + // messages are the arbitrary messages to be executed if proposal passes. + repeated google.protobuf.Any messages = 1; + + // initial_deposit is the deposit value that must be paid at proposal submission. + repeated cosmos.base.v1beta1.Coin initial_deposit = 2 [ + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins" + ]; + + // proposer is the account address of the proposer. + string proposer = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - repeated google.protobuf.Any messages = 1; - repeated cosmos.base.v1beta1.Coin initial_deposit = 2 [(gogoproto.nullable) = false]; - string proposer = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"]; // metadata is any arbitrary metadata attached to the proposal. string metadata = 4; + + // title is the title of the proposal. + // + // Since: cosmos-sdk 0.47 + string title = 5; + + // summary is the summary of the proposal + // + // Since: cosmos-sdk 0.47 + string summary = 6; + + // expedited defines if the proposal is expedited or not + // + // Since: cosmos-sdk 0.50 + bool expedited = 7; } // MsgSubmitProposalResponse defines the Msg/SubmitProposal response type. message MsgSubmitProposalResponse { + // proposal_id defines the unique id of the proposal. uint64 proposal_id = 1; } @@ -51,9 +94,10 @@ message MsgSubmitProposalResponse { // This ensures backwards compatibility with v1beta1.MsgSubmitProposal. message MsgExecLegacyContent { option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "cosmos-sdk/v1/MsgExecLegacyContent"; // content is the proposal's content. - google.protobuf.Any content = 1 [(cosmos_proto.accepts_interface) = "Content"]; + google.protobuf.Any content = 1 [(cosmos_proto.accepts_interface) = "cosmos.gov.v1beta1.Content"]; // authority must be the gov module address. string authority = 2; } @@ -64,11 +108,19 @@ message MsgExecLegacyContentResponse {} // MsgVote defines a message to cast a vote. message MsgVote { option (cosmos.msg.v1.signer) = "voter"; + option (amino.name) = "cosmos-sdk/v1/MsgVote"; + + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1 [(gogoproto.jsontag) = "proposal_id", (amino.dont_omitempty) = true]; + + // voter is the voter address for the proposal. + string voter = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // option defines the vote option. + VoteOption option = 3; - uint64 proposal_id = 1 [(gogoproto.jsontag) = "proposal_id"]; - string voter = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - VoteOption option = 3; - string metadata = 4; + // metadata is any arbitrary metadata attached to the Vote. + string metadata = 4; } // MsgVoteResponse defines the Msg/Vote response type. @@ -77,11 +129,19 @@ message MsgVoteResponse {} // MsgVoteWeighted defines a message to cast a vote. message MsgVoteWeighted { option (cosmos.msg.v1.signer) = "voter"; + option (amino.name) = "cosmos-sdk/v1/MsgVoteWeighted"; + + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1 [(gogoproto.jsontag) = "proposal_id", (amino.dont_omitempty) = true]; + + // voter is the voter address for the proposal. + string voter = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // options defines the weighted vote options. + repeated WeightedVoteOption options = 3; - uint64 proposal_id = 1 [(gogoproto.jsontag) = "proposal_id"]; - string voter = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - repeated WeightedVoteOption options = 3; - string metadata = 4; + // metadata is any arbitrary metadata attached to the VoteWeighted. + string metadata = 4; } // MsgVoteWeightedResponse defines the Msg/VoteWeighted response type. @@ -90,11 +150,64 @@ message MsgVoteWeightedResponse {} // MsgDeposit defines a message to submit a deposit to an existing proposal. message MsgDeposit { option (cosmos.msg.v1.signer) = "depositor"; + option (amino.name) = "cosmos-sdk/v1/MsgDeposit"; + + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1 [(gogoproto.jsontag) = "proposal_id", (amino.dont_omitempty) = true]; - uint64 proposal_id = 1 [(gogoproto.jsontag) = "proposal_id"]; - string depositor = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - repeated cosmos.base.v1beta1.Coin amount = 3 [(gogoproto.nullable) = false]; + // depositor defines the deposit addresses from the proposals. + string depositor = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // amount to be deposited by depositor. + repeated cosmos.base.v1beta1.Coin amount = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // MsgDepositResponse defines the Msg/Deposit response type. message MsgDepositResponse {} + +// MsgUpdateParams is the Msg/UpdateParams request type. +// +// Since: cosmos-sdk 0.47 +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "cosmos-sdk/x/gov/v1/MsgUpdateParams"; + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // params defines the x/gov parameters to update. + // + // NOTE: All parameters must be supplied. + Params params = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +// +// Since: cosmos-sdk 0.47 +message MsgUpdateParamsResponse {} + +// MsgCancelProposal is the Msg/CancelProposal request type. +// +// Since: cosmos-sdk 0.50 +message MsgCancelProposal { + option (cosmos.msg.v1.signer) = "proposer"; + + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1 [(gogoproto.jsontag) = "proposal_id"]; + // proposer is the account address of the proposer. + string proposer = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// MsgCancelProposalResponse defines the response structure for executing a +// MsgCancelProposal message. +// +// Since: cosmos-sdk 0.50 +message MsgCancelProposalResponse { + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1 [(gogoproto.jsontag) = "proposal_id"]; + // canceled_time is the time when proposal is canceled. + google.protobuf.Timestamp canceled_time = 2 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; + // canceled_height defines the block height at which the proposal is canceled. + uint64 canceled_height = 3; +} diff --git a/third_party/proto/cosmos/gov/v1beta1/genesis.proto b/third_party/proto/cosmos/gov/v1beta1/genesis.proto index be9b07e467..f0c679a318 100644 --- a/third_party/proto/cosmos/gov/v1beta1/genesis.proto +++ b/third_party/proto/cosmos/gov/v1beta1/genesis.proto @@ -4,6 +4,7 @@ package cosmos.gov.v1beta1; import "gogoproto/gogo.proto"; import "cosmos/gov/v1beta1/gov.proto"; +import "amino/amino.proto"; option go_package = "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1"; @@ -12,15 +13,18 @@ message GenesisState { // starting_proposal_id is the ID of the starting proposal. uint64 starting_proposal_id = 1; // deposits defines all the deposits present at genesis. - repeated Deposit deposits = 2 [(gogoproto.castrepeated) = "Deposits", (gogoproto.nullable) = false]; + repeated Deposit deposits = 2 + [(gogoproto.castrepeated) = "Deposits", (gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // votes defines all the votes present at genesis. - repeated Vote votes = 3 [(gogoproto.castrepeated) = "Votes", (gogoproto.nullable) = false]; + repeated Vote votes = 3 + [(gogoproto.castrepeated) = "Votes", (gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // proposals defines all the proposals present at genesis. - repeated Proposal proposals = 4 [(gogoproto.castrepeated) = "Proposals", (gogoproto.nullable) = false]; - // params defines all the paramaters of related to deposit. - DepositParams deposit_params = 5 [(gogoproto.nullable) = false]; - // params defines all the paramaters of related to voting. - VotingParams voting_params = 6 [(gogoproto.nullable) = false]; - // params defines all the paramaters of related to tally. - TallyParams tally_params = 7 [(gogoproto.nullable) = false]; + repeated Proposal proposals = 4 + [(gogoproto.castrepeated) = "Proposals", (gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + // deposit_params defines all the parameters related to deposit. + DepositParams deposit_params = 5 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + // voting_params defines all the parameters related to voting. + VotingParams voting_params = 6 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + // tally_params defines all the parameters related to tally. + TallyParams tally_params = 7 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } diff --git a/third_party/proto/cosmos/gov/v1beta1/gov.proto b/third_party/proto/cosmos/gov/v1beta1/gov.proto index 0e65d65b20..99b97191c1 100644 --- a/third_party/proto/cosmos/gov/v1beta1/gov.proto +++ b/third_party/proto/cosmos/gov/v1beta1/gov.proto @@ -7,12 +7,11 @@ import "google/protobuf/timestamp.proto"; import "google/protobuf/any.proto"; import "google/protobuf/duration.proto"; import "cosmos_proto/cosmos.proto"; +import "amino/amino.proto"; option go_package = "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1"; -option (gogoproto.goproto_stringer_all) = false; -option (gogoproto.stringer_all) = false; -option (gogoproto.goproto_getters_all) = false; +option (gogoproto.goproto_getters_all) = false; // VoteOption enumerates the valid vote options for a given governance proposal. enum VoteOption { @@ -34,10 +33,14 @@ enum VoteOption { // // Since: cosmos-sdk 0.43 message WeightedVoteOption { + // option defines the valid vote options, it must not contain duplicate vote options. VoteOption option = 1; - string weight = 2 [ + + // weight is the vote weight associated with the vote option. + string weight = 2 [ (cosmos_proto.scalar) = "cosmos.Dec", - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (amino.dont_omitempty) = true, (gogoproto.nullable) = false ]; } @@ -45,11 +48,15 @@ message WeightedVoteOption { // TextProposal defines a standard text proposal whose changes need to be // manually updated in case of approval. message TextProposal { - option (cosmos_proto.implements_interface) = "Content"; + option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; + option (amino.name) = "cosmos-sdk/TextProposal"; option (gogoproto.equal) = true; - string title = 1; + // title of the proposal. + string title = 1; + + // description associated with the proposal. string description = 2; } @@ -59,29 +66,60 @@ message Deposit { option (gogoproto.goproto_getters) = false; option (gogoproto.equal) = false; - uint64 proposal_id = 1; - string depositor = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - repeated cosmos.base.v1beta1.Coin amount = 3 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1; + + // depositor defines the deposit addresses from the proposals. + string depositor = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // amount to be deposited by depositor. + repeated cosmos.base.v1beta1.Coin amount = 3 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; } // Proposal defines the core field members of a governance proposal. message Proposal { option (gogoproto.equal) = true; - uint64 proposal_id = 1; - google.protobuf.Any content = 2 [(cosmos_proto.accepts_interface) = "Content"]; - ProposalStatus status = 3; + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1; + + // content is the proposal's content. + google.protobuf.Any content = 2 [(cosmos_proto.accepts_interface) = "cosmos.gov.v1beta1.Content"]; + + // status defines the proposal status. + ProposalStatus status = 3; + // final_tally_result is the final tally result of the proposal. When // querying a proposal via gRPC, this field is not populated until the // proposal's voting period has ended. - TallyResult final_tally_result = 4 [(gogoproto.nullable) = false]; - google.protobuf.Timestamp submit_time = 5 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; - google.protobuf.Timestamp deposit_end_time = 6 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; - repeated cosmos.base.v1beta1.Coin total_deposit = 7 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; - google.protobuf.Timestamp voting_start_time = 8 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; - google.protobuf.Timestamp voting_end_time = 9 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; + TallyResult final_tally_result = 4 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // submit_time is the time of proposal submission. + google.protobuf.Timestamp submit_time = 5 + [(gogoproto.stdtime) = true, (gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // deposit_end_time is the end time for deposition. + google.protobuf.Timestamp deposit_end_time = 6 + [(gogoproto.stdtime) = true, (gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // total_deposit is the total deposit on the proposal. + repeated cosmos.base.v1beta1.Coin total_deposit = 7 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + + // voting_start_time is the starting time to vote on a proposal. + google.protobuf.Timestamp voting_start_time = 8 + [(gogoproto.stdtime) = true, (gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // voting_end_time is the end time of voting on a proposal. + google.protobuf.Timestamp voting_end_time = 9 + [(gogoproto.stdtime) = true, (gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // ProposalStatus enumerates the valid statuses of a proposal. @@ -111,24 +149,31 @@ enum ProposalStatus { message TallyResult { option (gogoproto.equal) = true; + // yes is the number of yes votes on a proposal. string yes = 1 [ (cosmos_proto.scalar) = "cosmos.Int", - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false ]; + + // abstain is the number of abstain votes on a proposal. string abstain = 2 [ (cosmos_proto.scalar) = "cosmos.Int", - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false ]; + + // no is the number of no votes on a proposal. string no = 3 [ (cosmos_proto.scalar) = "cosmos.Int", - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false ]; + + // no_with_veto is the number of no with veto votes on a proposal. string no_with_veto = 4 [ (cosmos_proto.scalar) = "cosmos.Int", - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false ]; } @@ -136,30 +181,35 @@ message TallyResult { // Vote defines a vote on a governance proposal. // A Vote consists of a proposal ID, the voter, and the vote option. message Vote { - option (gogoproto.goproto_stringer) = false; - option (gogoproto.equal) = false; + option (gogoproto.equal) = false; + + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1 [(gogoproto.jsontag) = "id", (amino.field_name) = "id", (amino.dont_omitempty) = true]; - uint64 proposal_id = 1 [(gogoproto.jsontag) = "id"]; - string voter = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + // voter is the voter address of the proposal. + string voter = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; // 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. VoteOption option = 3 [deprecated = true]; + + // options is the weighted vote options. + // // Since: cosmos-sdk 0.43 - repeated WeightedVoteOption options = 4 [(gogoproto.nullable) = false]; + repeated WeightedVoteOption options = 4 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // DepositParams defines the params for deposits on governance proposals. message DepositParams { - // Minimum deposit for a proposal to enter voting period. + // Minimum deposit for a proposal to enter voting period. repeated cosmos.base.v1beta1.Coin min_deposit = 1 [ (gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", (gogoproto.jsontag) = "min_deposit,omitempty" ]; - // Maximum period for Atom holders to deposit on a proposal. Initial value: 2 - // months. + // Maximum period for Atom holders to deposit on a proposal. Initial value: 2 + // months. google.protobuf.Duration max_deposit_period = 2 [ (gogoproto.nullable) = false, (gogoproto.stdduration) = true, @@ -169,32 +219,35 @@ message DepositParams { // VotingParams defines the params for voting on governance proposals. message VotingParams { - // Length of the voting period. + // Duration of the voting period. google.protobuf.Duration voting_period = 1 [(gogoproto.nullable) = false, (gogoproto.stdduration) = true, (gogoproto.jsontag) = "voting_period,omitempty"]; } // TallyParams defines the params for tallying votes on governance proposals. message TallyParams { - // Minimum percentage of total stake needed to vote for a result to be - // considered valid. + // Minimum percentage of total stake needed to vote for a result to be + // considered valid. bytes quorum = 1 [ - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", (gogoproto.nullable) = false, (gogoproto.jsontag) = "quorum,omitempty" ]; - // Minimum proportion of Yes votes for proposal to pass. Default value: 0.5. + // Minimum proportion of Yes votes for proposal to pass. Default value: 0.5. bytes threshold = 2 [ - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", (gogoproto.nullable) = false, (gogoproto.jsontag) = "threshold,omitempty" ]; - // Minimum value of Veto votes to Total votes ratio for proposal to be - // vetoed. Default value: 1/3. + // Minimum value of Veto votes to Total votes ratio for proposal to be + // vetoed. Default value: 1/3. bytes veto_threshold = 3 [ - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", (gogoproto.nullable) = false, (gogoproto.jsontag) = "veto_threshold,omitempty" ]; diff --git a/third_party/proto/cosmos/gov/v1beta1/query.proto b/third_party/proto/cosmos/gov/v1beta1/query.proto index 168e1f5e07..28352ed40c 100644 --- a/third_party/proto/cosmos/gov/v1beta1/query.proto +++ b/third_party/proto/cosmos/gov/v1beta1/query.proto @@ -6,6 +6,7 @@ import "gogoproto/gogo.proto"; import "google/api/annotations.proto"; import "cosmos/gov/v1beta1/gov.proto"; import "cosmos_proto/cosmos.proto"; +import "amino/amino.proto"; option go_package = "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1"; @@ -36,7 +37,7 @@ service Query { option (google.api.http).get = "/cosmos/gov/v1beta1/params/{params_type}"; } - // Deposit queries single deposit information based proposalID, depositAddr. + // Deposit queries single deposit information based on proposalID, depositor address. rpc Deposit(QueryDepositRequest) returns (QueryDepositResponse) { option (google.api.http).get = "/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits/{depositor}"; } @@ -60,7 +61,7 @@ message QueryProposalRequest { // QueryProposalResponse is the response type for the Query/Proposal RPC method. message QueryProposalResponse { - Proposal proposal = 1 [(gogoproto.nullable) = false]; + Proposal proposal = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // QueryProposalsRequest is the request type for the Query/Proposals RPC method. @@ -84,7 +85,8 @@ message QueryProposalsRequest { // QueryProposalsResponse is the response type for the Query/Proposals RPC // method. message QueryProposalsResponse { - repeated Proposal proposals = 1 [(gogoproto.nullable) = false]; + // proposals defines all the requested governance proposals. + repeated Proposal proposals = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // pagination defines the pagination in the response. cosmos.base.query.v1beta1.PageResponse pagination = 2; @@ -104,8 +106,8 @@ message QueryVoteRequest { // QueryVoteResponse is the response type for the Query/Vote RPC method. message QueryVoteResponse { - // vote defined the queried vote. - Vote vote = 1 [(gogoproto.nullable) = false]; + // vote defines the queried vote. + Vote vote = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // QueryVotesRequest is the request type for the Query/Votes RPC method. @@ -119,8 +121,8 @@ message QueryVotesRequest { // QueryVotesResponse is the response type for the Query/Votes RPC method. message QueryVotesResponse { - // votes defined the queried votes. - repeated Vote votes = 1 [(gogoproto.nullable) = false]; + // votes defines the queried votes. + repeated Vote votes = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // pagination defines the pagination in the response. cosmos.base.query.v1beta1.PageResponse pagination = 2; @@ -136,11 +138,11 @@ message QueryParamsRequest { // QueryParamsResponse is the response type for the Query/Params RPC method. message QueryParamsResponse { // voting_params defines the parameters related to voting. - VotingParams voting_params = 1 [(gogoproto.nullable) = false]; + VotingParams voting_params = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // deposit_params defines the parameters related to deposit. - DepositParams deposit_params = 2 [(gogoproto.nullable) = false]; + DepositParams deposit_params = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // tally_params defines the parameters related to tally. - TallyParams tally_params = 3 [(gogoproto.nullable) = false]; + TallyParams tally_params = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // QueryDepositRequest is the request type for the Query/Deposit RPC method. @@ -158,7 +160,7 @@ message QueryDepositRequest { // QueryDepositResponse is the response type for the Query/Deposit RPC method. message QueryDepositResponse { // deposit defines the requested deposit. - Deposit deposit = 1 [(gogoproto.nullable) = false]; + Deposit deposit = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // QueryDepositsRequest is the request type for the Query/Deposits RPC method. @@ -172,7 +174,8 @@ message QueryDepositsRequest { // QueryDepositsResponse is the response type for the Query/Deposits RPC method. message QueryDepositsResponse { - repeated Deposit deposits = 1 [(gogoproto.nullable) = false]; + // deposits defines the requested deposits. + repeated Deposit deposits = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // pagination defines the pagination in the response. cosmos.base.query.v1beta1.PageResponse pagination = 2; @@ -187,5 +190,5 @@ message QueryTallyResultRequest { // QueryTallyResultResponse is the response type for the Query/Tally RPC method. message QueryTallyResultResponse { // tally defines the requested tally. - TallyResult tally = 1 [(gogoproto.nullable) = false]; + TallyResult tally = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } diff --git a/third_party/proto/cosmos/gov/v1beta1/tx.proto b/third_party/proto/cosmos/gov/v1beta1/tx.proto index 00ce2253ef..9de763be36 100644 --- a/third_party/proto/cosmos/gov/v1beta1/tx.proto +++ b/third_party/proto/cosmos/gov/v1beta1/tx.proto @@ -6,13 +6,15 @@ import "cosmos/gov/v1beta1/gov.proto"; import "cosmos_proto/cosmos.proto"; import "gogoproto/gogo.proto"; import "google/protobuf/any.proto"; - import "cosmos/msg/v1/msg.proto"; +import "amino/amino.proto"; option go_package = "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1"; -// Msg defines the bank Msg service. +// Msg defines the gov Msg service. service Msg { + option (cosmos.msg.v1.service) = true; + // SubmitProposal defines a method to create new proposal given a content. rpc SubmitProposal(MsgSubmitProposal) returns (MsgSubmitProposalResponse); @@ -32,35 +34,48 @@ service Msg { // proposal Content. message MsgSubmitProposal { option (cosmos.msg.v1.signer) = "proposer"; + option (amino.name) = "cosmos-sdk/MsgSubmitProposal"; + + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; - option (gogoproto.equal) = false; - option (gogoproto.goproto_stringer) = false; - option (gogoproto.stringer) = false; - option (gogoproto.goproto_getters) = false; + // content is the proposal's content. + google.protobuf.Any content = 1 [(cosmos_proto.accepts_interface) = "cosmos.gov.v1beta1.Content"]; - google.protobuf.Any content = 1 [(cosmos_proto.accepts_interface) = "Content"]; - repeated cosmos.base.v1beta1.Coin initial_deposit = 2 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; + // initial_deposit is the deposit value that must be paid at proposal submission. + repeated cosmos.base.v1beta1.Coin initial_deposit = 2 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + + // proposer is the account address of the proposer. string proposer = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"]; } // MsgSubmitProposalResponse defines the Msg/SubmitProposal response type. message MsgSubmitProposalResponse { - uint64 proposal_id = 1 [(gogoproto.jsontag) = "proposal_id"]; + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1 [(gogoproto.jsontag) = "proposal_id", (amino.dont_omitempty) = true]; } // MsgVote defines a message to cast a vote. message MsgVote { option (cosmos.msg.v1.signer) = "voter"; + option (amino.name) = "cosmos-sdk/MsgVote"; + + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; - option (gogoproto.equal) = false; - option (gogoproto.goproto_stringer) = false; - option (gogoproto.stringer) = false; - option (gogoproto.goproto_getters) = false; + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1; - uint64 proposal_id = 1; - string voter = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - VoteOption option = 3; + // voter is the voter address for the proposal. + string voter = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // option defines the vote option. + VoteOption option = 3; } // MsgVoteResponse defines the Msg/Vote response type. @@ -71,15 +86,19 @@ message MsgVoteResponse {} // Since: cosmos-sdk 0.43 message MsgVoteWeighted { option (cosmos.msg.v1.signer) = "voter"; + option (amino.name) = "cosmos-sdk/MsgVoteWeighted"; + + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1 [(gogoproto.jsontag) = "proposal_id", (amino.dont_omitempty) = true]; - option (gogoproto.equal) = false; - option (gogoproto.goproto_stringer) = false; - option (gogoproto.stringer) = false; - option (gogoproto.goproto_getters) = false; + // voter is the voter address for the proposal. + string voter = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - uint64 proposal_id = 1 [(gogoproto.jsontag) = "proposal_id"]; - string voter = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - repeated WeightedVoteOption options = 3 [(gogoproto.nullable) = false]; + // options defines the weighted vote options. + repeated WeightedVoteOption options = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // MsgVoteWeightedResponse defines the Msg/VoteWeighted response type. @@ -90,16 +109,25 @@ message MsgVoteWeightedResponse {} // MsgDeposit defines a message to submit a deposit to an existing proposal. message MsgDeposit { option (cosmos.msg.v1.signer) = "depositor"; + option (amino.name) = "cosmos-sdk/MsgDeposit"; + + option (gogoproto.equal) = false; + option (gogoproto.stringer) = false; + option (gogoproto.goproto_getters) = false; + + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1 [(gogoproto.jsontag) = "proposal_id", (amino.dont_omitempty) = true]; - option (gogoproto.equal) = false; - option (gogoproto.goproto_stringer) = false; - option (gogoproto.stringer) = false; - option (gogoproto.goproto_getters) = false; + // depositor defines the deposit addresses from the proposals. + string depositor = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - uint64 proposal_id = 1 [(gogoproto.jsontag) = "proposal_id"]; - string depositor = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - repeated cosmos.base.v1beta1.Coin amount = 3 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; + // amount to be deposited by depositor. + repeated cosmos.base.v1beta1.Coin amount = 3 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; } // MsgDepositResponse defines the Msg/Deposit response type. diff --git a/third_party/proto/cosmos/group/module/v1/module.proto b/third_party/proto/cosmos/group/module/v1/module.proto new file mode 100644 index 0000000000..d1e7ffb206 --- /dev/null +++ b/third_party/proto/cosmos/group/module/v1/module.proto @@ -0,0 +1,24 @@ +syntax = "proto3"; + +package cosmos.group.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; +import "gogoproto/gogo.proto"; +import "google/protobuf/duration.proto"; +import "amino/amino.proto"; + +// Module is the config object of the group module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "github.com/cosmos/cosmos-sdk/x/group" + }; + + // max_execution_period defines the max duration after a proposal's voting period ends that members can send a MsgExec + // to execute the proposal. + google.protobuf.Duration max_execution_period = 1 + [(gogoproto.stdduration) = true, (gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // max_metadata_len defines the max length of the metadata bytes field for various entities within the group module. + // Defaults to 255 if not explicitly set. + uint64 max_metadata_len = 2; +} diff --git a/third_party/proto/cosmos/group/v1/query.proto b/third_party/proto/cosmos/group/v1/query.proto index 20516d3277..80b09255af 100644 --- a/third_party/proto/cosmos/group/v1/query.proto +++ b/third_party/proto/cosmos/group/v1/query.proto @@ -8,6 +8,7 @@ import "google/api/annotations.proto"; import "cosmos/group/v1/types.proto"; import "cosmos/base/query/v1beta1/pagination.proto"; import "cosmos_proto/cosmos.proto"; +import "amino/amino.proto"; option go_package = "github.com/cosmos/cosmos-sdk/x/group"; @@ -24,7 +25,7 @@ service Query { option (google.api.http).get = "/cosmos/group/v1/group_policy_info/{address}"; }; - // GroupMembers queries members of a group + // GroupMembers queries members of a group by group id. rpc GroupMembers(QueryGroupMembersRequest) returns (QueryGroupMembersResponse) { option (google.api.http).get = "/cosmos/group/v1/group_members/{group_id}"; }; @@ -39,7 +40,7 @@ service Query { option (google.api.http).get = "/cosmos/group/v1/group_policies_by_group/{group_id}"; }; - // GroupsByAdmin queries group policies by admin address. + // GroupPoliciesByAdmin queries group policies by admin address. rpc GroupPoliciesByAdmin(QueryGroupPoliciesByAdminRequest) returns (QueryGroupPoliciesByAdminResponse) { option (google.api.http).get = "/cosmos/group/v1/group_policies_by_admin/{admin}"; }; @@ -59,7 +60,7 @@ service Query { option (google.api.http).get = "/cosmos/group/v1/vote_by_proposal_voter/{proposal_id}/{voter}"; }; - // VotesByProposal queries a vote by proposal. + // VotesByProposal queries a vote by proposal id. rpc VotesByProposal(QueryVotesByProposalRequest) returns (QueryVotesByProposalResponse) { option (google.api.http).get = "/cosmos/group/v1/votes_by_proposal/{proposal_id}"; }; @@ -93,35 +94,30 @@ service Query { // QueryGroupInfoRequest is the Query/GroupInfo request type. message QueryGroupInfoRequest { - // group_id is the unique ID of the group. uint64 group_id = 1; } // QueryGroupInfoResponse is the Query/GroupInfo response type. message QueryGroupInfoResponse { - - // info is the GroupInfo for the group. + // info is the GroupInfo of the group. GroupInfo info = 1; } // QueryGroupPolicyInfoRequest is the Query/GroupPolicyInfo request type. message QueryGroupPolicyInfoRequest { - // address is the account address of the group policy. string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; } // QueryGroupPolicyInfoResponse is the Query/GroupPolicyInfo response type. message QueryGroupPolicyInfoResponse { - - // info is the GroupPolicyInfo for the group policy. + // info is the GroupPolicyInfo of the group policy. GroupPolicyInfo info = 1; } // QueryGroupMembersRequest is the Query/GroupMembers request type. message QueryGroupMembersRequest { - // group_id is the unique ID of the group. uint64 group_id = 1; @@ -131,7 +127,6 @@ message QueryGroupMembersRequest { // QueryGroupMembersResponse is the Query/GroupMembersResponse response type. message QueryGroupMembersResponse { - // members are the members of the group with given group_id. repeated GroupMember members = 1; @@ -141,7 +136,6 @@ message QueryGroupMembersResponse { // QueryGroupsByAdminRequest is the Query/GroupsByAdmin request type. message QueryGroupsByAdminRequest { - // admin is the account address of a group's admin. string admin = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; @@ -151,7 +145,6 @@ message QueryGroupsByAdminRequest { // QueryGroupsByAdminResponse is the Query/GroupsByAdminResponse response type. message QueryGroupsByAdminResponse { - // groups are the groups info with the provided admin. repeated GroupInfo groups = 1; @@ -161,7 +154,6 @@ message QueryGroupsByAdminResponse { // QueryGroupPoliciesByGroupRequest is the Query/GroupPoliciesByGroup request type. message QueryGroupPoliciesByGroupRequest { - // group_id is the unique ID of the group policy's group. uint64 group_id = 1; @@ -171,7 +163,6 @@ message QueryGroupPoliciesByGroupRequest { // QueryGroupPoliciesByGroupResponse is the Query/GroupPoliciesByGroup response type. message QueryGroupPoliciesByGroupResponse { - // group_policies are the group policies info associated with the provided group. repeated GroupPolicyInfo group_policies = 1; @@ -181,7 +172,6 @@ message QueryGroupPoliciesByGroupResponse { // QueryGroupPoliciesByAdminRequest is the Query/GroupPoliciesByAdmin request type. message QueryGroupPoliciesByAdminRequest { - // admin is the admin address of the group policy. string admin = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; @@ -191,7 +181,6 @@ message QueryGroupPoliciesByAdminRequest { // QueryGroupPoliciesByAdminResponse is the Query/GroupPoliciesByAdmin response type. message QueryGroupPoliciesByAdminResponse { - // group_policies are the group policies info with provided admin. repeated GroupPolicyInfo group_policies = 1; @@ -201,21 +190,18 @@ message QueryGroupPoliciesByAdminResponse { // QueryProposalRequest is the Query/Proposal request type. message QueryProposalRequest { - // proposal_id is the unique ID of a proposal. uint64 proposal_id = 1; } // QueryProposalResponse is the Query/Proposal response type. message QueryProposalResponse { - // proposal is the proposal info. Proposal proposal = 1; } // QueryProposalsByGroupPolicyRequest is the Query/ProposalByGroupPolicy request type. message QueryProposalsByGroupPolicyRequest { - // address is the account address of the group policy related to proposals. string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; @@ -225,7 +211,6 @@ message QueryProposalsByGroupPolicyRequest { // QueryProposalsByGroupPolicyResponse is the Query/ProposalByGroupPolicy response type. message QueryProposalsByGroupPolicyResponse { - // proposals are the proposals with given group policy. repeated Proposal proposals = 1; @@ -235,7 +220,6 @@ message QueryProposalsByGroupPolicyResponse { // QueryVoteByProposalVoterRequest is the Query/VoteByProposalVoter request type. message QueryVoteByProposalVoterRequest { - // proposal_id is the unique ID of a proposal. uint64 proposal_id = 1; @@ -245,14 +229,12 @@ message QueryVoteByProposalVoterRequest { // QueryVoteByProposalVoterResponse is the Query/VoteByProposalVoter response type. message QueryVoteByProposalVoterResponse { - // vote is the vote with given proposal_id and voter. Vote vote = 1; } // QueryVotesByProposalRequest is the Query/VotesByProposal request type. message QueryVotesByProposalRequest { - // proposal_id is the unique ID of a proposal. uint64 proposal_id = 1; @@ -262,7 +244,6 @@ message QueryVotesByProposalRequest { // QueryVotesByProposalResponse is the Query/VotesByProposal response type. message QueryVotesByProposalResponse { - // votes are the list of votes for given proposal_id. repeated Vote votes = 1; @@ -281,7 +262,6 @@ message QueryVotesByVoterRequest { // QueryVotesByVoterResponse is the Query/VotesByVoter response type. message QueryVotesByVoterResponse { - // votes are the list of votes by given voter. repeated Vote votes = 1; @@ -316,7 +296,7 @@ message QueryTallyResultRequest { // QueryTallyResultResponse is the Query/TallyResult response type. message QueryTallyResultResponse { // tally defines the requested tally. - TallyResult tally = 1 [(gogoproto.nullable) = false]; + TallyResult tally = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // QueryGroupsRequest is the Query/Groups request type. diff --git a/third_party/proto/cosmos/group/v1/tx.proto b/third_party/proto/cosmos/group/v1/tx.proto index 1983d31ba8..5a5f028bb3 100644 --- a/third_party/proto/cosmos/group/v1/tx.proto +++ b/third_party/proto/cosmos/group/v1/tx.proto @@ -9,11 +9,12 @@ import "gogoproto/gogo.proto"; import "cosmos_proto/cosmos.proto"; import "google/protobuf/any.proto"; import "cosmos/group/v1/types.proto"; - import "cosmos/msg/v1/msg.proto"; +import "amino/amino.proto"; // Msg is the cosmos.group.v1 Msg service. service Msg { + option (cosmos.msg.v1.service) = true; // CreateGroup creates a new group with an admin account address, a list of members and some optional metadata. rpc CreateGroup(MsgCreateGroup) returns (MsgCreateGroupResponse); @@ -66,12 +67,13 @@ service Msg { // MsgCreateGroup is the Msg/CreateGroup request type. message MsgCreateGroup { option (cosmos.msg.v1.signer) = "admin"; + option (amino.name) = "cosmos-sdk/MsgCreateGroup"; // admin is the account address of the group admin. string admin = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; // members defines the group members. - repeated MemberRequest members = 2 [(gogoproto.nullable) = false]; + repeated MemberRequest members = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // metadata is any arbitrary metadata to attached to the group. string metadata = 3; @@ -79,7 +81,6 @@ message MsgCreateGroup { // MsgCreateGroupResponse is the Msg/CreateGroup response type. message MsgCreateGroupResponse { - // group_id is the unique ID of the newly created group. uint64 group_id = 1; } @@ -87,6 +88,7 @@ message MsgCreateGroupResponse { // MsgUpdateGroupMembers is the Msg/UpdateGroupMembers request type. message MsgUpdateGroupMembers { option (cosmos.msg.v1.signer) = "admin"; + option (amino.name) = "cosmos-sdk/MsgUpdateGroupMembers"; // admin is the account address of the group admin. string admin = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; @@ -96,7 +98,7 @@ message MsgUpdateGroupMembers { // member_updates is the list of members to update, // set weight to 0 to remove a member. - repeated MemberRequest member_updates = 3 [(gogoproto.nullable) = false]; + repeated MemberRequest member_updates = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // MsgUpdateGroupMembersResponse is the Msg/UpdateGroupMembers response type. @@ -105,6 +107,7 @@ message MsgUpdateGroupMembersResponse {} // MsgUpdateGroupAdmin is the Msg/UpdateGroupAdmin request type. message MsgUpdateGroupAdmin { option (cosmos.msg.v1.signer) = "admin"; + option (amino.name) = "cosmos-sdk/MsgUpdateGroupAdmin"; // admin is the current account address of the group admin. string admin = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; @@ -122,6 +125,7 @@ message MsgUpdateGroupAdminResponse {} // MsgUpdateGroupMetadata is the Msg/UpdateGroupMetadata request type. message MsgUpdateGroupMetadata { option (cosmos.msg.v1.signer) = "admin"; + option (amino.name) = "cosmos-sdk/MsgUpdateGroupMetadata"; // admin is the account address of the group admin. string admin = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; @@ -143,6 +147,7 @@ message MsgUpdateGroupMetadataResponse {} // MsgCreateGroupPolicy is the Msg/CreateGroupPolicy request type. message MsgCreateGroupPolicy { option (cosmos.msg.v1.signer) = "admin"; + option (amino.name) = "cosmos-sdk/MsgCreateGroupPolicy"; option (gogoproto.goproto_getters) = false; @@ -161,7 +166,6 @@ message MsgCreateGroupPolicy { // MsgCreateGroupPolicyResponse is the Msg/CreateGroupPolicy response type. message MsgCreateGroupPolicyResponse { - // address is the account address of the newly created group policy. string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; } @@ -169,6 +173,7 @@ message MsgCreateGroupPolicyResponse { // MsgUpdateGroupPolicyAdmin is the Msg/UpdateGroupPolicyAdmin request type. message MsgUpdateGroupPolicyAdmin { option (cosmos.msg.v1.signer) = "admin"; + option (amino.name) = "cosmos-sdk/MsgUpdateGroupPolicyAdmin"; // admin is the account address of the group admin. string admin = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; @@ -180,16 +185,20 @@ message MsgUpdateGroupPolicyAdmin { string new_admin = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"]; } +// MsgUpdateGroupPolicyAdminResponse is the Msg/UpdateGroupPolicyAdmin response type. +message MsgUpdateGroupPolicyAdminResponse {} + // MsgCreateGroupWithPolicy is the Msg/CreateGroupWithPolicy request type. message MsgCreateGroupWithPolicy { option (cosmos.msg.v1.signer) = "admin"; + option (amino.name) = "cosmos-sdk/MsgCreateGroupWithPolicy"; option (gogoproto.goproto_getters) = false; // admin is the account address of the group and group policy admin. string admin = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; // members defines the group members. - repeated MemberRequest members = 2 [(gogoproto.nullable) = false]; + repeated MemberRequest members = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // group_metadata is any arbitrary metadata attached to the group. string group_metadata = 3; @@ -207,7 +216,6 @@ message MsgCreateGroupWithPolicy { // MsgCreateGroupWithPolicyResponse is the Msg/CreateGroupWithPolicy response type. message MsgCreateGroupWithPolicyResponse { - // group_id is the unique ID of the newly created group with policy. uint64 group_id = 1; @@ -215,12 +223,10 @@ message MsgCreateGroupWithPolicyResponse { string group_policy_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; } -// MsgUpdateGroupPolicyAdminResponse is the Msg/UpdateGroupPolicyAdmin response type. -message MsgUpdateGroupPolicyAdminResponse {} - // MsgUpdateGroupPolicyDecisionPolicy is the Msg/UpdateGroupPolicyDecisionPolicy request type. message MsgUpdateGroupPolicyDecisionPolicy { option (cosmos.msg.v1.signer) = "admin"; + option (amino.name) = "cosmos-sdk/MsgUpdateGroupDecisionPolicy"; option (gogoproto.goproto_getters) = false; @@ -240,6 +246,7 @@ message MsgUpdateGroupPolicyDecisionPolicyResponse {} // MsgUpdateGroupPolicyMetadata is the Msg/UpdateGroupPolicyMetadata request type. message MsgUpdateGroupPolicyMetadata { option (cosmos.msg.v1.signer) = "admin"; + option (amino.name) = "cosmos-sdk/MsgUpdateGroupPolicyMetadata"; // admin is the account address of the group admin. string admin = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; @@ -247,7 +254,7 @@ message MsgUpdateGroupPolicyMetadata { // group_policy_address is the account address of group policy. string group_policy_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - // metadata is the updated group policy metadata. + // metadata is the group policy metadata to be updated. string metadata = 3; } @@ -260,7 +267,6 @@ message MsgUpdateGroupPolicyMetadataResponse {} // Exec defines modes of execution of a proposal on creation or on new vote. enum Exec { - // An empty value means that there should be a separate // MsgExec request for the proposal to execute. EXEC_UNSPECIFIED = 0; @@ -275,6 +281,7 @@ enum Exec { // MsgSubmitProposal is the Msg/SubmitProposal request type. message MsgSubmitProposal { option (cosmos.msg.v1.signer) = "proposers"; + option (amino.name) = "cosmos-sdk/group/MsgSubmitProposal"; option (gogoproto.goproto_getters) = false; @@ -285,7 +292,7 @@ message MsgSubmitProposal { // Proposers signatures will be counted as yes votes. repeated string proposers = 2; - // metadata is any arbitrary metadata to attached to the proposal. + // metadata is any arbitrary metadata attached to the proposal. string metadata = 3; // messages is a list of `sdk.Msg`s that will be executed if the proposal passes. @@ -295,11 +302,20 @@ message MsgSubmitProposal { // whether it should be executed immediately on creation or not. // If so, proposers signatures are considered as Yes votes. Exec exec = 5; + + // title is the title of the proposal. + // + // Since: cosmos-sdk 0.47 + string title = 6; + + // summary is the summary of the proposal. + // + // Since: cosmos-sdk 0.47 + string summary = 7; } // MsgSubmitProposalResponse is the Msg/SubmitProposal response type. message MsgSubmitProposalResponse { - // proposal is the unique ID of the proposal. uint64 proposal_id = 1; } @@ -307,6 +323,7 @@ message MsgSubmitProposalResponse { // MsgWithdrawProposal is the Msg/WithdrawProposal request type. message MsgWithdrawProposal { option (cosmos.msg.v1.signer) = "address"; + option (amino.name) = "cosmos-sdk/group/MsgWithdrawProposal"; // proposal is the unique ID of the proposal. uint64 proposal_id = 1; @@ -321,16 +338,18 @@ message MsgWithdrawProposalResponse {} // MsgVote is the Msg/Vote request type. message MsgVote { option (cosmos.msg.v1.signer) = "voter"; + option (amino.name) = "cosmos-sdk/group/MsgVote"; // proposal is the unique ID of the proposal. uint64 proposal_id = 1; + // voter is the voter account address. string voter = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; // option is the voter's choice on the proposal. VoteOption option = 3; - // metadata is any arbitrary metadata to attached to the vote. + // metadata is any arbitrary metadata attached to the vote. string metadata = 4; // exec defines whether the proposal should be executed @@ -343,7 +362,8 @@ message MsgVoteResponse {} // MsgExec is the Msg/Exec request type. message MsgExec { - option (cosmos.msg.v1.signer) = "signer"; + option (cosmos.msg.v1.signer) = "executor"; + option (amino.name) = "cosmos-sdk/group/MsgExec"; // proposal is the unique ID of the proposal. uint64 proposal_id = 1; @@ -361,6 +381,7 @@ message MsgExecResponse { // MsgLeaveGroup is the Msg/LeaveGroup request type. message MsgLeaveGroup { option (cosmos.msg.v1.signer) = "address"; + option (amino.name) = "cosmos-sdk/group/MsgLeaveGroup"; // address is the account address of the group member. string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; diff --git a/third_party/proto/cosmos/group/v1/types.proto b/third_party/proto/cosmos/group/v1/types.proto index d975d6b62d..97af45fff7 100644 --- a/third_party/proto/cosmos/group/v1/types.proto +++ b/third_party/proto/cosmos/group/v1/types.proto @@ -10,6 +10,7 @@ import "google/protobuf/duration.proto"; import "google/protobuf/timestamp.proto"; import "cosmos_proto/cosmos.proto"; import "google/protobuf/any.proto"; +import "amino/amino.proto"; // Member represents a group member with an account address, // non-zero weight, metadata and added_at timestamp. @@ -24,7 +25,8 @@ message Member { string metadata = 3; // added_at is a timestamp specifying when a member was added. - google.protobuf.Timestamp added_at = 4 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + google.protobuf.Timestamp added_at = 4 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.stdtime) = true]; } // MemberRequest represents a group member to be used in Msg server requests. @@ -43,12 +45,13 @@ message MemberRequest { // ThresholdDecisionPolicy is a decision policy where a proposal passes when it // satisfies the two following conditions: -// 1. The sum of all `YES` voters' weights is greater or equal than the defined +// 1. The sum of all `YES` voter's weights is greater or equal than the defined // `threshold`. // 2. The voting and execution periods of the proposal respect the parameters // given by `windows`. message ThresholdDecisionPolicy { - option (cosmos_proto.implements_interface) = "DecisionPolicy"; + option (cosmos_proto.implements_interface) = "cosmos.group.v1.DecisionPolicy"; + option (amino.name) = "cosmos-sdk/ThresholdDecisionPolicy"; // threshold is the minimum weighted sum of `YES` votes that must be met or // exceeded for a proposal to succeed. @@ -65,9 +68,10 @@ message ThresholdDecisionPolicy { // 2. The voting and execution periods of the proposal respect the parameters // given by `windows`. message PercentageDecisionPolicy { - option (cosmos_proto.implements_interface) = "DecisionPolicy"; + option (cosmos_proto.implements_interface) = "cosmos.group.v1.DecisionPolicy"; + option (amino.name) = "cosmos-sdk/PercentageDecisionPolicy"; - // percentage is the minimum percentage the weighted sum of `YES` votes must + // percentage is the minimum percentage of the weighted sum of `YES` votes must // meet for a proposal to succeed. string percentage = 1; @@ -79,7 +83,8 @@ message PercentageDecisionPolicy { message DecisionPolicyWindows { // voting_period is the duration from submission of a proposal to the end of voting period // Within this times votes can be submitted with MsgVote. - google.protobuf.Duration voting_period = 1 [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; + google.protobuf.Duration voting_period = 1 + [(gogoproto.stdduration) = true, (gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // min_execution_period is the minimum duration after the proposal submission // where members can start sending MsgExec. This means that the window for @@ -92,7 +97,8 @@ message DecisionPolicyWindows { // `voting_period + max_execution_period`, or else the above execution window // is empty, meaning that all proposals created with this decision policy // won't be able to be executed. - google.protobuf.Duration min_execution_period = 2 [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; + google.protobuf.Duration min_execution_period = 2 + [(gogoproto.stdduration) = true, (gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // VoteOption enumerates the valid vote options for a given proposal. @@ -125,6 +131,7 @@ message GroupInfo { string admin = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; // metadata is any arbitrary metadata to attached to the group. + // the recommended format of the metadata is to be found here: https://docs.cosmos.network/v0.47/modules/group#group-1 string metadata = 3; // version is used to track changes to a group's membership structure that @@ -137,7 +144,8 @@ message GroupInfo { string total_weight = 5; // created_at is a timestamp specifying when a group was created. - google.protobuf.Timestamp created_at = 6 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + google.protobuf.Timestamp created_at = 6 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.stdtime) = true]; } // GroupMember represents the relationship between a group and a member. @@ -163,7 +171,9 @@ message GroupPolicyInfo { // admin is the account address of the group admin. string admin = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - // metadata is any arbitrary metadata to attached to the group policy. + // metadata is any arbitrary metadata attached to the group policy. + // the recommended format of the metadata is to be found here: + // https://docs.cosmos.network/v0.47/modules/group#decision-policy-1 string metadata = 4; // version is used to track changes to a group's GroupPolicyInfo structure that @@ -174,7 +184,8 @@ message GroupPolicyInfo { google.protobuf.Any decision_policy = 6 [(cosmos_proto.accepts_interface) = "cosmos.group.v1.DecisionPolicy"]; // created_at is a timestamp specifying when a group policy was created. - google.protobuf.Timestamp created_at = 7 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + google.protobuf.Timestamp created_at = 7 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.stdtime) = true]; } // Proposal defines a group proposal. Any member of a group can submit a proposal @@ -190,14 +201,17 @@ message Proposal { // group_policy_address is the account address of group policy. string group_policy_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - // metadata is any arbitrary metadata to attached to the proposal. + // metadata is any arbitrary metadata attached to the proposal. + // the recommended format of the metadata is to be found here: + // https://docs.cosmos.network/v0.47/modules/group#proposal-4 string metadata = 3; // proposers are the account addresses of the proposers. repeated string proposers = 4 [(cosmos_proto.scalar) = "cosmos.AddressString"]; // submit_time is a timestamp specifying when a proposal was submitted. - google.protobuf.Timestamp submit_time = 5 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + google.protobuf.Timestamp submit_time = 5 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.stdtime) = true]; // group_version tracks the version of the group at proposal submission. // This field is here for informational purposes only. @@ -216,20 +230,31 @@ message Proposal { // proposal for each vote option. It is empty at submission, and only // populated after tallying, at voting period end or at proposal execution, // whichever happens first. - TallyResult final_tally_result = 9 [(gogoproto.nullable) = false]; + TallyResult final_tally_result = 9 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // voting_period_end is the timestamp before which voting must be done. - // Unless a successfull MsgExec is called before (to execute a proposal whose + // Unless a successful MsgExec is called before (to execute a proposal whose // tally is successful before the voting period ends), tallying will be done // at this point, and the `final_tally_result`and `status` fields will be // accordingly updated. - google.protobuf.Timestamp voting_period_end = 10 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + google.protobuf.Timestamp voting_period_end = 10 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.stdtime) = true]; // executor_result is the final result of the proposal execution. Initial value is NotRun. ProposalExecutorResult executor_result = 11; // messages is a list of `sdk.Msg`s that will be executed if the proposal passes. repeated google.protobuf.Any messages = 12; + + // title is the title of the proposal + // + // Since: cosmos-sdk 0.47 + string title = 13; + + // summary is a short summary of the proposal + // + // Since: cosmos-sdk 0.47 + string summary = 14; } // ProposalStatus defines proposal statuses. @@ -293,7 +318,7 @@ message TallyResult { string no_with_veto_count = 4; } -// Vote represents a vote for a proposal. +// Vote represents a vote for a proposal.string metadata message Vote { // proposal is the unique ID of the proposal. uint64 proposal_id = 1; @@ -304,9 +329,11 @@ message Vote { // option is the voter's choice on the proposal. VoteOption option = 3; - // metadata is any arbitrary metadata to attached to the vote. + // metadata is any arbitrary metadata attached to the vote. + // the recommended format of the metadata is to be found here: https://docs.cosmos.network/v0.47/modules/group#vote-2 string metadata = 4; // submit_time is the timestamp when the vote was submitted. - google.protobuf.Timestamp submit_time = 5 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + google.protobuf.Timestamp submit_time = 5 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.stdtime) = true]; } diff --git a/third_party/proto/proofs.proto b/third_party/proto/cosmos/ics23/v1/proofs.proto similarity index 61% rename from third_party/proto/proofs.proto rename to third_party/proto/cosmos/ics23/v1/proofs.proto index ffa5321226..beac166b44 100644 --- a/third_party/proto/proofs.proto +++ b/third_party/proto/cosmos/ics23/v1/proofs.proto @@ -1,19 +1,18 @@ syntax = "proto3"; -package ics23; -option go_package = "github.com/confio/ics23/go"; -option java_package = "tech.confio.ics23"; -option java_multiple_files = true; +package cosmos.ics23.v1; + +option go_package = "github.com/cosmos/ics23/go;ics23"; enum HashOp { - // NO_HASH is the default if no data passed. Note this is an illegal argument some places. - NO_HASH = 0; - SHA256 = 1; - SHA512 = 2; - KECCAK = 3; - RIPEMD160 = 4; - BITCOIN = 5; // ripemd160(sha256(x)) - SHA512_256 = 6; + // NO_HASH is the default if no data passed. Note this is an illegal argument some places. + NO_HASH = 0; + SHA256 = 1; + SHA512 = 2; + KECCAK = 3; + RIPEMD160 = 4; + BITCOIN = 5; // ripemd160(sha256(x)) + SHA512_256 = 6; } /** @@ -23,24 +22,24 @@ algorithm, the length will be prepended to the key and value bytes. (Each one with it's own encoded length) */ enum LengthOp { - // NO_PREFIX don't include any length info - NO_PREFIX = 0; - // VAR_PROTO uses protobuf (and go-amino) varint encoding of the length - VAR_PROTO = 1; - // VAR_RLP uses rlp int encoding of the length - VAR_RLP = 2; - // FIXED32_BIG uses big-endian encoding of the length as a 32 bit integer - FIXED32_BIG = 3; - // FIXED32_LITTLE uses little-endian encoding of the length as a 32 bit integer - FIXED32_LITTLE = 4; - // FIXED64_BIG uses big-endian encoding of the length as a 64 bit integer - FIXED64_BIG = 5; - // FIXED64_LITTLE uses little-endian encoding of the length as a 64 bit integer - FIXED64_LITTLE = 6; - // REQUIRE_32_BYTES is like NONE, but will fail if the input is not exactly 32 bytes (sha256 output) - REQUIRE_32_BYTES = 7; - // REQUIRE_64_BYTES is like NONE, but will fail if the input is not exactly 64 bytes (sha512 output) - REQUIRE_64_BYTES = 8; + // NO_PREFIX don't include any length info + NO_PREFIX = 0; + // VAR_PROTO uses protobuf (and go-amino) varint encoding of the length + VAR_PROTO = 1; + // VAR_RLP uses rlp int encoding of the length + VAR_RLP = 2; + // FIXED32_BIG uses big-endian encoding of the length as a 32 bit integer + FIXED32_BIG = 3; + // FIXED32_LITTLE uses little-endian encoding of the length as a 32 bit integer + FIXED32_LITTLE = 4; + // FIXED64_BIG uses big-endian encoding of the length as a 64 bit integer + FIXED64_BIG = 5; + // FIXED64_LITTLE uses little-endian encoding of the length as a 64 bit integer + FIXED64_LITTLE = 6; + // REQUIRE_32_BYTES is like NONE, but will fail if the input is not exactly 32 bytes (sha256 output) + REQUIRE_32_BYTES = 7; + // REQUIRE_64_BYTES is like NONE, but will fail if the input is not exactly 64 bytes (sha512 output) + REQUIRE_64_BYTES = 8; } /** @@ -65,10 +64,10 @@ in the ProofSpec is valuable to prevent this mutability. And why all trees shoul length-prefix the data before hashing it. */ message ExistenceProof { - bytes key = 1; - bytes value = 2; - LeafOp leaf = 3; - repeated InnerOp path = 4; + bytes key = 1; + bytes value = 2; + LeafOp leaf = 3; + repeated InnerOp path = 4; } /* @@ -77,21 +76,21 @@ one right of the desired key. If both proofs are valid AND they are neighbors, then there is no valid proof for the given key. */ message NonExistenceProof { - bytes key = 1; // TODO: remove this as unnecessary??? we prove a range - ExistenceProof left = 2; - ExistenceProof right = 3; + bytes key = 1; // TODO: remove this as unnecessary??? we prove a range + ExistenceProof left = 2; + ExistenceProof right = 3; } /* CommitmentProof is either an ExistenceProof or a NonExistenceProof, or a Batch of such messages */ message CommitmentProof { - oneof proof { - ExistenceProof exist = 1; - NonExistenceProof nonexist = 2; - BatchProof batch = 3; - CompressedBatchProof compressed = 4; - } + oneof proof { + ExistenceProof exist = 1; + NonExistenceProof nonexist = 2; + BatchProof batch = 3; + CompressedBatchProof compressed = 4; + } } /** @@ -111,13 +110,13 @@ Then combine the bytes, and hash it output = hash(prefix || length(hkey) || hkey || length(hvalue) || hvalue) */ message LeafOp { - HashOp hash = 1; - HashOp prehash_key = 2; - HashOp prehash_value = 3; - LengthOp length = 4; - // prefix is a fixed bytes that may optionally be included at the beginning to differentiate - // a leaf node from an inner node. - bytes prefix = 5; + HashOp hash = 1; + HashOp prehash_key = 2; + HashOp prehash_value = 3; + LengthOp length = 4; + // prefix is a fixed bytes that may optionally be included at the beginning to differentiate + // a leaf node from an inner node. + bytes prefix = 5; } /** @@ -138,12 +137,11 @@ some value to differentiate from leaf nodes, should be included in prefix and su If either of prefix or suffix is empty, we just treat it as an empty string */ message InnerOp { - HashOp hash = 1; - bytes prefix = 2; - bytes suffix = 3; + HashOp hash = 1; + bytes prefix = 2; + bytes suffix = 3; } - /** ProofSpec defines what the expected parameters are for a given proof type. This can be stored in the client and used to validate any incoming proofs. @@ -158,13 +156,17 @@ tree format server uses. But not in code, rather a configuration object. */ message ProofSpec { // any field in the ExistenceProof must be the same as in this spec. - // except Prefix, which is just the first bytes of prefix (spec can be longer) - LeafOp leaf_spec = 1; + // except Prefix, which is just the first bytes of prefix (spec can be longer) + LeafOp leaf_spec = 1; InnerSpec inner_spec = 2; // max_depth (if > 0) is the maximum number of InnerOps allowed (mainly for fixed-depth tries) int32 max_depth = 3; // min_depth (if > 0) is the minimum number of InnerOps allowed (mainly for fixed-depth tries) int32 min_depth = 4; + // prehash_key_before_comparison is a flag that indicates whether to use the + // prehash_key specified by LeafOp to compare lexical ordering of keys for + // non-existence proofs. + bool prehash_key_before_comparison = 5; } /* @@ -178,17 +180,17 @@ This enables: isLeftNeighbor(spec: InnerSpec, left: InnerOp, right: InnerOp) */ message InnerSpec { - // Child order is the ordering of the children node, must count from 0 - // iavl tree is [0, 1] (left then right) - // merk is [0, 2, 1] (left, right, here) - repeated int32 child_order = 1; - int32 child_size = 2; - int32 min_prefix_length = 3; - int32 max_prefix_length = 4; - // empty child is the prehash image that is used when one child is nil (eg. 20 bytes of 0) - bytes empty_child = 5; - // hash is the algorithm that must be used for each InnerOp - HashOp hash = 6; + // Child order is the ordering of the children node, must count from 0 + // iavl tree is [0, 1] (left then right) + // merk is [0, 2, 1] (left, right, here) + repeated int32 child_order = 1; + int32 child_size = 2; + int32 min_prefix_length = 3; + int32 max_prefix_length = 4; + // empty child is the prehash image that is used when one child is nil (eg. 20 bytes of 0) + bytes empty_child = 5; + // hash is the algorithm that must be used for each InnerOp + HashOp hash = 6; } /* @@ -201,37 +203,36 @@ message BatchProof { // Use BatchEntry not CommitmentProof, to avoid recursion message BatchEntry { oneof proof { - ExistenceProof exist = 1; + ExistenceProof exist = 1; NonExistenceProof nonexist = 2; } } - /****** all items here are compressed forms *******/ message CompressedBatchProof { - repeated CompressedBatchEntry entries = 1; - repeated InnerOp lookup_inners = 2; + repeated CompressedBatchEntry entries = 1; + repeated InnerOp lookup_inners = 2; } // Use BatchEntry not CommitmentProof, to avoid recursion message CompressedBatchEntry { oneof proof { - CompressedExistenceProof exist = 1; + CompressedExistenceProof exist = 1; CompressedNonExistenceProof nonexist = 2; } } message CompressedExistenceProof { - bytes key = 1; - bytes value = 2; - LeafOp leaf = 3; + bytes key = 1; + bytes value = 2; + LeafOp leaf = 3; // these are indexes into the lookup_inners table in CompressedBatchProof - repeated int32 path = 4; + repeated int32 path = 4; } message CompressedNonExistenceProof { - bytes key = 1; // TODO: remove this as unnecessary??? we prove a range - CompressedExistenceProof left = 2; + bytes key = 1; // TODO: remove this as unnecessary??? we prove a range + CompressedExistenceProof left = 2; CompressedExistenceProof right = 3; } diff --git a/third_party/proto/cosmos/mint/module/v1/module.proto b/third_party/proto/cosmos/mint/module/v1/module.proto new file mode 100644 index 0000000000..2ea1ef3d8f --- /dev/null +++ b/third_party/proto/cosmos/mint/module/v1/module.proto @@ -0,0 +1,17 @@ +syntax = "proto3"; + +package cosmos.mint.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object of the mint module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "github.com/cosmos/cosmos-sdk/x/mint" + }; + + string fee_collector_name = 1; + + // authority defines the custom module authority. If not set, defaults to the governance module. + string authority = 2; +} \ No newline at end of file diff --git a/third_party/proto/cosmos/mint/v1beta1/genesis.proto b/third_party/proto/cosmos/mint/v1beta1/genesis.proto index 4e783fb544..b6cc1504c1 100644 --- a/third_party/proto/cosmos/mint/v1beta1/genesis.proto +++ b/third_party/proto/cosmos/mint/v1beta1/genesis.proto @@ -3,14 +3,15 @@ package cosmos.mint.v1beta1; import "gogoproto/gogo.proto"; import "cosmos/mint/v1beta1/mint.proto"; +import "amino/amino.proto"; option go_package = "github.com/cosmos/cosmos-sdk/x/mint/types"; // GenesisState defines the mint module's genesis state. message GenesisState { // minter is a space for holding current inflation information. - Minter minter = 1 [(gogoproto.nullable) = false]; + Minter minter = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; - // params defines all the paramaters of the module. - Params params = 2 [(gogoproto.nullable) = false]; + // params defines all the parameters of the module. + Params params = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } diff --git a/third_party/proto/cosmos/mint/v1beta1/mint.proto b/third_party/proto/cosmos/mint/v1beta1/mint.proto index 9cfe2b7607..440a392dbd 100644 --- a/third_party/proto/cosmos/mint/v1beta1/mint.proto +++ b/third_party/proto/cosmos/mint/v1beta1/mint.proto @@ -5,52 +5,57 @@ option go_package = "github.com/cosmos/cosmos-sdk/x/mint/types"; import "gogoproto/gogo.proto"; import "cosmos_proto/cosmos.proto"; +import "amino/amino.proto"; // Minter represents the minting state. message Minter { // current annual inflation rate string inflation = 1 [ (cosmos_proto.scalar) = "cosmos.Dec", - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", (gogoproto.nullable) = false ]; // current annual expected provisions string annual_provisions = 2 [ (cosmos_proto.scalar) = "cosmos.Dec", - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", (gogoproto.nullable) = false ]; } -// Params holds parameters for the mint module. +// Params defines the parameters for the x/mint module. message Params { - option (gogoproto.goproto_stringer) = false; + option (amino.name) = "cosmos-sdk/x/mint/Params"; // type of coin to mint string mint_denom = 1; // maximum annual change in inflation rate string inflation_rate_change = 2 [ (cosmos_proto.scalar) = "cosmos.Dec", - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", - (gogoproto.nullable) = false + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true ]; // maximum inflation rate string inflation_max = 3 [ (cosmos_proto.scalar) = "cosmos.Dec", - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", - (gogoproto.nullable) = false + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true ]; // minimum inflation rate string inflation_min = 4 [ (cosmos_proto.scalar) = "cosmos.Dec", - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", - (gogoproto.nullable) = false + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true ]; // goal of percent bonded atoms string goal_bonded = 5 [ (cosmos_proto.scalar) = "cosmos.Dec", - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", - (gogoproto.nullable) = false + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true ]; // expected blocks per year uint64 blocks_per_year = 6; diff --git a/third_party/proto/cosmos/mint/v1beta1/query.proto b/third_party/proto/cosmos/mint/v1beta1/query.proto index acd341d777..db5c90fb31 100644 --- a/third_party/proto/cosmos/mint/v1beta1/query.proto +++ b/third_party/proto/cosmos/mint/v1beta1/query.proto @@ -4,6 +4,8 @@ package cosmos.mint.v1beta1; import "gogoproto/gogo.proto"; import "google/api/annotations.proto"; import "cosmos/mint/v1beta1/mint.proto"; +import "amino/amino.proto"; +import "cosmos_proto/cosmos.proto"; option go_package = "github.com/cosmos/cosmos-sdk/x/mint/types"; @@ -31,7 +33,7 @@ message QueryParamsRequest {} // QueryParamsResponse is the response type for the Query/Params RPC method. message QueryParamsResponse { // params defines the parameters of the module. - Params params = 1 [(gogoproto.nullable) = false]; + Params params = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // QueryInflationRequest is the request type for the Query/Inflation RPC method. @@ -41,7 +43,12 @@ message QueryInflationRequest {} // method. message QueryInflationResponse { // inflation is the current minting inflation value. - bytes inflation = 1 [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false]; + bytes inflation = 1 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; } // QueryAnnualProvisionsRequest is the request type for the @@ -52,6 +59,10 @@ message QueryAnnualProvisionsRequest {} // Query/AnnualProvisions RPC method. message QueryAnnualProvisionsResponse { // annual_provisions is the current minting annual provisions value. - bytes annual_provisions = 1 - [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false]; + bytes annual_provisions = 1 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; } diff --git a/third_party/proto/cosmos/mint/v1beta1/tx.proto b/third_party/proto/cosmos/mint/v1beta1/tx.proto new file mode 100644 index 0000000000..ec71fb73aa --- /dev/null +++ b/third_party/proto/cosmos/mint/v1beta1/tx.proto @@ -0,0 +1,43 @@ +syntax = "proto3"; +package cosmos.mint.v1beta1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/mint/types"; + +import "cosmos/msg/v1/msg.proto"; +import "amino/amino.proto"; +import "cosmos/mint/v1beta1/mint.proto"; +import "gogoproto/gogo.proto"; +import "cosmos_proto/cosmos.proto"; + +// Msg defines the x/mint Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // UpdateParams defines a governance operation for updating the x/mint module + // parameters. The authority is defaults to the x/gov module account. + // + // Since: cosmos-sdk 0.47 + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); +} + +// MsgUpdateParams is the Msg/UpdateParams request type. +// +// Since: cosmos-sdk 0.47 +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "cosmos-sdk/x/mint/MsgUpdateParams"; + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // params defines the x/mint parameters to update. + // + // NOTE: All parameters must be supplied. + Params params = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +// +// Since: cosmos-sdk 0.47 +message MsgUpdateParamsResponse {} diff --git a/third_party/proto/cosmos/msg/textual/v1/textual.proto b/third_party/proto/cosmos/msg/textual/v1/textual.proto new file mode 100644 index 0000000000..4f8cd141b0 --- /dev/null +++ b/third_party/proto/cosmos/msg/textual/v1/textual.proto @@ -0,0 +1,18 @@ +syntax = "proto3"; + +package cosmos.msg.textual.v1; + +import "google/protobuf/descriptor.proto"; + +extend google.protobuf.MessageOptions { + // expert_custom_renderer is an informative identifier to reference the + // algorithm used to generate the custom textual representation of the + // protobuf message where this annotation is applied. We recommend to use a + // short, versioned name as this identifier, e.g. "replace_with_username_v1". + // We also recommand providing a human-readable description as protobuf + // comments on this annotation, for example a short specification or a link + // to the relevant documentation. + // + // Also see the section on Custom Message Renderers in ADR-050. + string expert_custom_renderer = 11110009; +} diff --git a/third_party/proto/cosmos/msg/v1/msg.proto b/third_party/proto/cosmos/msg/v1/msg.proto index 89bdf3129f..853efa1f7c 100644 --- a/third_party/proto/cosmos/msg/v1/msg.proto +++ b/third_party/proto/cosmos/msg/v1/msg.proto @@ -8,6 +8,14 @@ import "google/protobuf/descriptor.proto"; // We need this right now because gogoproto codegen needs to import the extension. option go_package = "github.com/cosmos/cosmos-sdk/types/msgservice"; +extend google.protobuf.ServiceOptions { + // service indicates that the service is a Msg service and that requests + // must be transported via blockchain transactions rather than gRPC. + // Tooling can use this annotation to distinguish between Msg services and + // other types of services via reflection. + bool service = 11110000; +} + extend google.protobuf.MessageOptions { // signer must be used in cosmos messages in order // to signal to external clients which fields in a @@ -19,4 +27,4 @@ extend google.protobuf.MessageOptions { // kind in case the signer information is contained within // a message inside the cosmos message. repeated string signer = 11110000; -} \ No newline at end of file +} diff --git a/third_party/proto/cosmos/nft/module/v1/module.proto b/third_party/proto/cosmos/nft/module/v1/module.proto new file mode 100644 index 0000000000..a5c2c63429 --- /dev/null +++ b/third_party/proto/cosmos/nft/module/v1/module.proto @@ -0,0 +1,12 @@ +syntax = "proto3"; + +package cosmos.nft.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object of the nft module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "cosmossdk.io/x/nft" + }; +} \ No newline at end of file diff --git a/third_party/proto/cosmos/nft/v1beta1/event.proto b/third_party/proto/cosmos/nft/v1beta1/event.proto index 96964f08a3..d2cb29d2b2 100644 --- a/third_party/proto/cosmos/nft/v1beta1/event.proto +++ b/third_party/proto/cosmos/nft/v1beta1/event.proto @@ -1,26 +1,43 @@ syntax = "proto3"; package cosmos.nft.v1beta1; -option go_package = "github.com/cosmos/cosmos-sdk/x/nft"; +option go_package = "cosmossdk.io/x/nft"; // EventSend is emitted on Msg/Send message EventSend { + // class_id associated with the nft string class_id = 1; - string id = 2; - string sender = 3; + + // id is a unique identifier of the nft + string id = 2; + + // sender is the address of the owner of nft + string sender = 3; + + // receiver is the receiver address of nft string receiver = 4; } // EventMint is emitted on Mint message EventMint { + // class_id associated with the nft string class_id = 1; - string id = 2; - string owner = 3; + + // id is a unique identifier of the nft + string id = 2; + + // owner is the owner address of the nft + string owner = 3; } // EventBurn is emitted on Burn message EventBurn { + // class_id associated with the nft string class_id = 1; - string id = 2; - string owner = 3; + + // id is a unique identifier of the nft + string id = 2; + + // owner is the owner address of the nft + string owner = 3; } diff --git a/third_party/proto/cosmos/nft/v1beta1/genesis.proto b/third_party/proto/cosmos/nft/v1beta1/genesis.proto index 6f36ed34dc..441b48b1b1 100644 --- a/third_party/proto/cosmos/nft/v1beta1/genesis.proto +++ b/third_party/proto/cosmos/nft/v1beta1/genesis.proto @@ -3,13 +3,15 @@ package cosmos.nft.v1beta1; import "cosmos/nft/v1beta1/nft.proto"; -option go_package = "github.com/cosmos/cosmos-sdk/x/nft"; +option go_package = "cosmossdk.io/x/nft"; // GenesisState defines the nft module's genesis state. message GenesisState { // class defines the class of the nft type. repeated cosmos.nft.v1beta1.Class classes = 1; - repeated Entry entries = 2; + + // entry defines all nft owned by a person. + repeated Entry entries = 2; } // Entry Defines all nft owned by a person diff --git a/third_party/proto/cosmos/nft/v1beta1/nft.proto b/third_party/proto/cosmos/nft/v1beta1/nft.proto index b124126003..4234bd4291 100644 --- a/third_party/proto/cosmos/nft/v1beta1/nft.proto +++ b/third_party/proto/cosmos/nft/v1beta1/nft.proto @@ -3,7 +3,7 @@ package cosmos.nft.v1beta1; import "google/protobuf/any.proto"; -option go_package = "github.com/cosmos/cosmos-sdk/x/nft"; +option go_package = "cosmossdk.io/x/nft"; // Class defines the class of the nft type. message Class { diff --git a/third_party/proto/cosmos/nft/v1beta1/query.proto b/third_party/proto/cosmos/nft/v1beta1/query.proto index c1d8070f4d..bdc794ff6c 100644 --- a/third_party/proto/cosmos/nft/v1beta1/query.proto +++ b/third_party/proto/cosmos/nft/v1beta1/query.proto @@ -5,7 +5,7 @@ import "cosmos/base/query/v1beta1/pagination.proto"; import "google/api/annotations.proto"; import "cosmos/nft/v1beta1/nft.proto"; -option go_package = "github.com/cosmos/cosmos-sdk/x/nft"; +option go_package = "cosmossdk.io/x/nft"; // Query defines the gRPC querier service. service Query { @@ -48,67 +48,91 @@ service Query { // QueryBalanceRequest is the request type for the Query/Balance RPC method message QueryBalanceRequest { + // class_id associated with the nft string class_id = 1; - string owner = 2; + + // owner is the owner address of the nft + string owner = 2; } // QueryBalanceResponse is the response type for the Query/Balance RPC method message QueryBalanceResponse { + // amount is the number of all NFTs of a given class owned by the owner uint64 amount = 1; } // QueryOwnerRequest is the request type for the Query/Owner RPC method message QueryOwnerRequest { + // class_id associated with the nft string class_id = 1; - string id = 2; + + // id is a unique identifier of the NFT + string id = 2; } // QueryOwnerResponse is the response type for the Query/Owner RPC method message QueryOwnerResponse { + // owner is the owner address of the nft string owner = 1; } // QuerySupplyRequest is the request type for the Query/Supply RPC method message QuerySupplyRequest { + // class_id associated with the nft string class_id = 1; } // QuerySupplyResponse is the response type for the Query/Supply RPC method message QuerySupplyResponse { + // amount is the number of all NFTs from the given class uint64 amount = 1; } // QueryNFTstRequest is the request type for the Query/NFTs RPC method message QueryNFTsRequest { - string class_id = 1; - string owner = 2; + // class_id associated with the nft + string class_id = 1; + + // owner is the owner address of the nft + string owner = 2; + + // pagination defines an optional pagination for the request. cosmos.base.query.v1beta1.PageRequest pagination = 3; } // QueryNFTsResponse is the response type for the Query/NFTs RPC methods message QueryNFTsResponse { - repeated cosmos.nft.v1beta1.NFT nfts = 1; + // NFT defines the NFT + repeated cosmos.nft.v1beta1.NFT nfts = 1; + + // pagination defines the pagination in the response. cosmos.base.query.v1beta1.PageResponse pagination = 2; } // QueryNFTRequest is the request type for the Query/NFT RPC method message QueryNFTRequest { + // class_id associated with the nft string class_id = 1; - string id = 2; + + // id is a unique identifier of the NFT + string id = 2; } // QueryNFTResponse is the response type for the Query/NFT RPC method message QueryNFTResponse { + // owner is the owner address of the nft cosmos.nft.v1beta1.NFT nft = 1; } // QueryClassRequest is the request type for the Query/Class RPC method message QueryClassRequest { + // class_id associated with the nft string class_id = 1; } // QueryClassResponse is the response type for the Query/Class RPC method message QueryClassResponse { + // class defines the class of the nft type. cosmos.nft.v1beta1.Class class = 1; } @@ -120,6 +144,9 @@ message QueryClassesRequest { // QueryClassesResponse is the response type for the Query/Classes RPC method message QueryClassesResponse { - repeated cosmos.nft.v1beta1.Class classes = 1; + // class defines the class of the nft type. + repeated cosmos.nft.v1beta1.Class classes = 1; + + // pagination defines the pagination in the response. cosmos.base.query.v1beta1.PageResponse pagination = 2; } diff --git a/third_party/proto/cosmos/nft/v1beta1/tx.proto b/third_party/proto/cosmos/nft/v1beta1/tx.proto index 95b402ceda..9eecfdd2d5 100644 --- a/third_party/proto/cosmos/nft/v1beta1/tx.proto +++ b/third_party/proto/cosmos/nft/v1beta1/tx.proto @@ -1,15 +1,19 @@ syntax = "proto3"; package cosmos.nft.v1beta1; -option go_package = "github.com/cosmos/cosmos-sdk/x/nft"; +option go_package = "cosmossdk.io/x/nft"; +import "cosmos_proto/cosmos.proto"; import "cosmos/msg/v1/msg.proto"; // Msg defines the nft Msg service. service Msg { + option (cosmos.msg.v1.service) = true; + // Send defines a method to send a nft from one account to another account. rpc Send(MsgSend) returns (MsgSendResponse); } + // MsgSend represents a message to send a nft from one account to another account. message MsgSend { option (cosmos.msg.v1.signer) = "sender"; @@ -21,10 +25,10 @@ message MsgSend { string id = 2; // sender is the address of the owner of nft - string sender = 3; + string sender = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"]; // receiver is the receiver address of nft - string receiver = 4; + string receiver = 4 [(cosmos_proto.scalar) = "cosmos.AddressString"]; } // MsgSendResponse defines the Msg/Send response type. message MsgSendResponse {} \ No newline at end of file diff --git a/third_party/proto/cosmos/orm/module/v1alpha1/module.proto b/third_party/proto/cosmos/orm/module/v1alpha1/module.proto index cb7bbbeeaf..260db36997 100644 --- a/third_party/proto/cosmos/orm/module/v1alpha1/module.proto +++ b/third_party/proto/cosmos/orm/module/v1alpha1/module.proto @@ -5,10 +5,10 @@ package cosmos.orm.module.v1alpha1; import "cosmos/app/v1alpha1/module.proto"; // Module defines the ORM module which adds providers to the app container for -// module-scoped DB's. In the future it may provide gRPC services for interacting -// with ORM data. +// ORM ModuleDB's and in the future will automatically register query +// services for modules that use the ORM. message Module { option (cosmos.app.v1alpha1.module) = { - go_import: "github.com/cosmos/cosmos-sdk/orm" + go_import: "cosmossdk.io/orm" }; } diff --git a/third_party/proto/cosmos/orm/query/v1alpha1/query.proto b/third_party/proto/cosmos/orm/query/v1alpha1/query.proto new file mode 100644 index 0000000000..4500e99d5d --- /dev/null +++ b/third_party/proto/cosmos/orm/query/v1alpha1/query.proto @@ -0,0 +1,131 @@ +syntax = "proto3"; + +package cosmos.orm.query.v1alpha1; + +import "google/protobuf/timestamp.proto"; +import "google/protobuf/duration.proto"; +import "google/protobuf/any.proto"; +import "cosmos/base/query/v1beta1/pagination.proto"; + +// Query is a generic gRPC service for querying ORM data. +service Query { + + // Get queries an ORM table against an unique index. + rpc Get(GetRequest) returns (GetResponse); + + // List queries an ORM table against an index. + rpc List(ListRequest) returns (ListResponse); +} + +// GetRequest is the Query/Get request type. +message GetRequest { + // message_name is the fully-qualified message name of the ORM table being queried. + string message_name = 1; + + // index is the index fields expression used in orm definitions. If it + // is empty, the table's primary key is assumed. If it is non-empty, it must + // refer to an unique index. + string index = 2; + + // values are the values of the fields corresponding to the requested index. + // There must be as many values provided as there are fields in the index and + // these values must correspond to the index field types. + repeated IndexValue values = 3; +} + +// GetResponse is the Query/Get response type. +message GetResponse { + + // result is the result of the get query. If no value is found, the gRPC + // status code NOT_FOUND will be returned. + google.protobuf.Any result = 1; +} + +// ListRequest is the Query/List request type. +message ListRequest { + // message_name is the fully-qualified message name of the ORM table being queried. + string message_name = 1; + + // index is the index fields expression used in orm definitions. If it + // is empty, the table's primary key is assumed. + string index = 2; + + // query is the query expression corresponding to the provided index. If + // neither prefix nor range is specified, the query will list all the fields + // in the index. + oneof query { + + // prefix defines a prefix query. + Prefix prefix = 3; + + // range defines a range query. + Range range = 4; + } + + // pagination is the pagination request. + cosmos.base.query.v1beta1.PageRequest pagination = 5; + + // Prefix specifies the arguments to a prefix query. + message Prefix { + // values specifies the index values for the prefix query. + // It is valid to special a partial prefix with fewer values than + // the number of fields in the index. + repeated IndexValue values = 1; + } + + // Range specifies the arguments to a range query. + message Range { + // start specifies the starting index values for the range query. + // It is valid to provide fewer values than the number of fields in the + // index. + repeated IndexValue start = 1; + + // end specifies the inclusive ending index values for the range query. + // It is valid to provide fewer values than the number of fields in the + // index. + repeated IndexValue end = 2; + } +} + +// ListResponse is the Query/List response type. +message ListResponse { + + // results are the results of the query. + repeated google.protobuf.Any results = 1; + + // pagination is the pagination response. + cosmos.base.query.v1beta1.PageResponse pagination = 5; +} + +// IndexValue represents the value of a field in an ORM index expression. +message IndexValue { + + // value specifies the index value + oneof value { + // uint specifies a value for an uint32, fixed32, uint64, or fixed64 + // index field. + uint64 uint = 1; + + // int64 specifies a value for an int32, sfixed32, int64, or sfixed64 + // index field. + int64 int = 2; + + // str specifies a value for a string index field. + string str = 3; + + // bytes specifies a value for a bytes index field. + bytes bytes = 4; + + // enum specifies a value for an enum index field. + string enum = 5; + + // bool specifies a value for a bool index field. + bool bool = 6; + + // timestamp specifies a value for a timestamp index field. + google.protobuf.Timestamp timestamp = 7; + + // duration specifies a value for a duration index field. + google.protobuf.Duration duration = 8; + } +} diff --git a/third_party/proto/cosmos/orm/v1/orm.proto b/third_party/proto/cosmos/orm/v1/orm.proto index 389babd196..e8509392b8 100644 --- a/third_party/proto/cosmos/orm/v1/orm.proto +++ b/third_party/proto/cosmos/orm/v1/orm.proto @@ -52,8 +52,11 @@ message PrimaryKeyDescriptor { // with a 32-bit unsigned varint in non-terminal segments. // - int32, sint32, int64, sint64, sfixed32, sfixed64 are encoded as fixed width bytes with // an encoding that enables sorted iteration. - // - google.protobuf.Timestamp and google.protobuf.Duration are encoded - // as 12 bytes using an encoding that enables sorted iteration. + // - google.protobuf.Timestamp is encoded such that values with only seconds occupy 6 bytes, + // values including nanos occupy 9 bytes, and nil values occupy 1 byte. When iterating, nil + // values will always be ordered last. Seconds and nanos values must conform to the officially + // specified ranges of 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z and 0 to 999,999,999 respectively. + // - google.protobuf.Duration is encoded as 12 bytes using an encoding that enables sorted iteration. // - enum fields are encoded using varint encoding and do not support sorted // iteration. // - bool fields are encoded as a single byte 0 or 1. diff --git a/third_party/proto/cosmos/orm/v1alpha1/schema.proto b/third_party/proto/cosmos/orm/v1alpha1/schema.proto index ab713340e3..cbe90de3d3 100644 --- a/third_party/proto/cosmos/orm/v1alpha1/schema.proto +++ b/third_party/proto/cosmos/orm/v1alpha1/schema.proto @@ -40,11 +40,8 @@ message ModuleSchemaDescriptor { // StorageType enum StorageType { - // STORAGE_TYPE_DEFAULT_UNSPECIFIED indicates the persistent - // KV-storage where primary key entries are stored in merkle-tree - // backed commitment storage and indexes and seqs are stored in - // fast index storage. Note that the Cosmos SDK before store/v2alpha1 - // does not support this. + // STORAGE_TYPE_DEFAULT_UNSPECIFIED indicates the persistent storage where all + // data is stored in the regular Merkle-tree backed KV-store. STORAGE_TYPE_DEFAULT_UNSPECIFIED = 0; // STORAGE_TYPE_MEMORY indicates in-memory storage that will be @@ -58,19 +55,4 @@ enum StorageType { // will by default be ignored when importing and exporting a module's // state from JSON. STORAGE_TYPE_TRANSIENT = 2; - - // STORAGE_TYPE_INDEX indicates persistent storage which is not backed - // by a merkle-tree and won't affect the app hash. Note that the Cosmos SDK - // before store/v2alpha1 does not support this. - STORAGE_TYPE_INDEX = 3; - - // STORAGE_TYPE_INDEX indicates persistent storage which is backed by - // a merkle-tree. With this type of storage, both primary and index keys - // will affect the app hash and this is generally less efficient - // than using STORAGE_TYPE_DEFAULT_UNSPECIFIED which separates index - // keys into index storage. Note that modules built with the - // Cosmos SDK before store/v2alpha1 must specify STORAGE_TYPE_COMMITMENT - // instead of STORAGE_TYPE_DEFAULT_UNSPECIFIED or STORAGE_TYPE_INDEX - // because this is the only type of persistent storage available. - STORAGE_TYPE_COMMITMENT = 4; } diff --git a/third_party/proto/cosmos/params/module/v1/module.proto b/third_party/proto/cosmos/params/module/v1/module.proto new file mode 100644 index 0000000000..75e7f99583 --- /dev/null +++ b/third_party/proto/cosmos/params/module/v1/module.proto @@ -0,0 +1,12 @@ +syntax = "proto3"; + +package cosmos.params.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object of the params module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "github.com/cosmos/cosmos-sdk/x/params" + }; +} diff --git a/third_party/proto/cosmos/params/v1beta1/params.proto b/third_party/proto/cosmos/params/v1beta1/params.proto index da23e1a989..c8efa13106 100644 --- a/third_party/proto/cosmos/params/v1beta1/params.proto +++ b/third_party/proto/cosmos/params/v1beta1/params.proto @@ -6,23 +6,22 @@ option (gogoproto.equal_all) = true; import "gogoproto/gogo.proto"; import "cosmos_proto/cosmos.proto"; +import "amino/amino.proto"; // ParameterChangeProposal defines a proposal to change one or more parameters. message ParameterChangeProposal { option (gogoproto.goproto_getters) = false; - option (gogoproto.goproto_stringer) = false; option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; + option (amino.name) = "cosmos-sdk/ParameterChangeProposal"; string title = 1; string description = 2; - repeated ParamChange changes = 3 [(gogoproto.nullable) = false]; + repeated ParamChange changes = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // ParamChange defines an individual parameter change, for use in // ParameterChangeProposal. message ParamChange { - option (gogoproto.goproto_stringer) = false; - string subspace = 1; string key = 2; string value = 3; diff --git a/third_party/proto/cosmos/params/v1beta1/query.proto b/third_party/proto/cosmos/params/v1beta1/query.proto index 97d0a71d7f..827422eac9 100644 --- a/third_party/proto/cosmos/params/v1beta1/query.proto +++ b/third_party/proto/cosmos/params/v1beta1/query.proto @@ -4,6 +4,7 @@ package cosmos.params.v1beta1; import "gogoproto/gogo.proto"; import "google/api/annotations.proto"; import "cosmos/params/v1beta1/params.proto"; +import "amino/amino.proto"; option go_package = "github.com/cosmos/cosmos-sdk/x/params/types/proposal"; @@ -35,7 +36,7 @@ message QueryParamsRequest { // QueryParamsResponse is response type for the Query/Params RPC method. message QueryParamsResponse { // param defines the queried parameter. - ParamChange param = 1 [(gogoproto.nullable) = false]; + ParamChange param = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // QuerySubspacesRequest defines a request type for querying for all registered diff --git a/third_party/proto/cosmos/quarantine/v1beta1/events.proto b/third_party/proto/cosmos/quarantine/v1beta1/events.proto deleted file mode 100644 index 01151d8c47..0000000000 --- a/third_party/proto/cosmos/quarantine/v1beta1/events.proto +++ /dev/null @@ -1,32 +0,0 @@ -syntax = "proto3"; -package cosmos.quarantine.v1beta1; - -import "cosmos/base/v1beta1/coin.proto"; -import "cosmos_proto/cosmos.proto"; -import "gogoproto/gogo.proto"; - -option go_package = "github.com/cosmos/cosmos-sdk/x/quarantine"; - -// EventOptIn is an event emitted when an address opts into quarantine. -message EventOptIn { - string to_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; -} - -// EventOptOut is an event emitted when an address opts out of quarantine. -message EventOptOut { - string to_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; -} - -// EventFundsQuarantined is an event emitted when funds are quarantined. -message EventFundsQuarantined { - string to_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - repeated cosmos.base.v1beta1.Coin coins = 2 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; -} - -// EventFundsReleased is an event emitted when quarantined funds are accepted and released. -message EventFundsReleased { - string to_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - repeated cosmos.base.v1beta1.Coin coins = 2 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; -} diff --git a/third_party/proto/cosmos/quarantine/v1beta1/genesis.proto b/third_party/proto/cosmos/quarantine/v1beta1/genesis.proto deleted file mode 100644 index 7e8fea369c..0000000000 --- a/third_party/proto/cosmos/quarantine/v1beta1/genesis.proto +++ /dev/null @@ -1,20 +0,0 @@ -syntax = "proto3"; -package cosmos.quarantine.v1beta1; - -import "cosmos/quarantine/v1beta1/quarantine.proto"; -import "cosmos_proto/cosmos.proto"; -import "gogoproto/gogo.proto"; - -option go_package = "github.com/cosmos/cosmos-sdk/x/quarantine"; - -// GenesisState defines the quarantine module's genesis state. -message GenesisState { - // quarantined_addresses defines account addresses that are opted into quarantine. - repeated string quarantined_addresses = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - - // auto_responses defines the quarantine auto-responses for addresses. - repeated AutoResponseEntry auto_responses = 2; - - // quarantined_funds defines funds that are quarantined. - repeated QuarantinedFunds quarantined_funds = 3; -} diff --git a/third_party/proto/cosmos/quarantine/v1beta1/quarantine.proto b/third_party/proto/cosmos/quarantine/v1beta1/quarantine.proto deleted file mode 100644 index c89e3c321e..0000000000 --- a/third_party/proto/cosmos/quarantine/v1beta1/quarantine.proto +++ /dev/null @@ -1,73 +0,0 @@ -syntax = "proto3"; -package cosmos.quarantine.v1beta1; - -import "cosmos/base/v1beta1/coin.proto"; -import "cosmos_proto/cosmos.proto"; -import "gogoproto/gogo.proto"; - -option go_package = "github.com/cosmos/cosmos-sdk/x/quarantine"; - -// QuarantinedFunds defines structure that represents coins that have been quarantined. -message QuarantinedFunds { - // to_address is the intended recipient of the coins that have been quarantined. - string to_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - // unaccepted_from_addresses are the senders that have not been part of an accept yet for these coins. - repeated string unaccepted_from_addresses = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - // coins is the amount currently in quarantined for the two addresses. - repeated cosmos.base.v1beta1.Coin coins = 3 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; - // declined is true if these funds were previously declined. - bool declined = 4; -} - -// AutoResponseEntry defines the auto response to one address from another. -message AutoResponseEntry { - // to_address is the receiving address. - string to_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - // from_address is the sending address. - string from_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - // response is the auto-response setting for these two addresses. - AutoResponse response = 3; -} - -// AutoResponseUpdate defines a quarantine auto response update that should be applied. -message AutoResponseUpdate { - // from_address is the address that funds would be coming from. - string from_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - - // response is the automatic action to take on funds sent from from_address. - // Provide AUTO_RESPONSE_UNSPECIFIED to turn off an auto-response. - AutoResponse response = 2; -} - -// AutoResponse enumerates the quarantine auto-response options. -enum AutoResponse { - option (gogoproto.goproto_enum_prefix) = false; - - // AUTO_RESPONSE_UNSPECIFIED defines that an automatic response has not been specified. - // This means that no automatic action should be taken, i.e. this auto-response is off, - // and default quarantine behavior is used. - AUTO_RESPONSE_UNSPECIFIED = 0; - // AUTO_RESPONSE_ACCEPT defines that sends should be automatically accepted, bypassing quarantine. - AUTO_RESPONSE_ACCEPT = 1; - // AUTO_RESPONSE_DECLINE defines that sends should be automatically declined. - AUTO_RESPONSE_DECLINE = 2; -} - -// QuarantineRecord defines information regarding quarantined funds that is stored in state. -message QuarantineRecord { - // unaccepted_from_addresses are the senders that have not been part of an accept yet for these coins. - repeated bytes unaccepted_from_addresses = 1 [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress"]; - // accepted_from_addresses are the senders that have already been part of an accept for these coins. - repeated bytes accepted_from_addresses = 2 [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress"]; - // coins is the amount that has been quarantined. - repeated cosmos.base.v1beta1.Coin coins = 3 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; - // declined is whether these funds have been declined. - bool declined = 4; -} - -// QuarantineRecordSuffixIndex defines a list of record suffixes that can be stored in state and used as an index. -message QuarantineRecordSuffixIndex { - repeated bytes record_suffixes = 1; -} diff --git a/third_party/proto/cosmos/quarantine/v1beta1/query.proto b/third_party/proto/cosmos/quarantine/v1beta1/query.proto deleted file mode 100644 index bed3dc09e1..0000000000 --- a/third_party/proto/cosmos/quarantine/v1beta1/query.proto +++ /dev/null @@ -1,100 +0,0 @@ -syntax = "proto3"; -package cosmos.quarantine.v1beta1; - -import "cosmos/base/query/v1beta1/pagination.proto"; -import "cosmos/quarantine/v1beta1/quarantine.proto"; -import "cosmos_proto/cosmos.proto"; -import "google/api/annotations.proto"; - -option go_package = "github.com/cosmos/cosmos-sdk/x/quarantine"; - -// Query defines the quarantine gRPC query service. -service Query { - // IsQuarantined checks if an account has opted into quarantine. - rpc IsQuarantined(QueryIsQuarantinedRequest) returns (QueryIsQuarantinedResponse) { - option (google.api.http).get = "/cosmos/quarantine/v1beta1/active/{to_address}"; - } - - // QuarantinedFunds gets information about funds that have been quarantined. - // - // If both a to_address and from_address are provided, any such quarantined funds will be returned regardless of - // whether they've been declined. If only a to_address is provided, the unaccepted and undeclined funds waiting on a - // response from to_address will be returned. If neither a to_address nor from_address is provided, all non-declined - // quarantined funds for any address will be returned. The request is invalid if only a from_address is provided. - rpc QuarantinedFunds(QueryQuarantinedFundsRequest) returns (QueryQuarantinedFundsResponse) { - option (google.api.http) = { - get: "/cosmos/quarantine/v1beta1/funds" - additional_bindings: { - get: "/cosmos/quarantine/v1beta1/funds/{to_address}" - } - additional_bindings: { - get: "/cosmos/quarantine/v1beta1/funds/{to_address}/{from_address}" - } - }; - } - - // AutoResponses gets the auto-response settings for a quarantined account. - // - // The to_address is required. If a from_address is provided only the auto response for that from_address will be - // returned. If no from_address is provided, all auto-response settings for the given to_address will be returned. - rpc AutoResponses(QueryAutoResponsesRequest) returns (QueryAutoResponsesResponse) { - option (google.api.http) = { - get: "/cosmos/quarantine/v1beta1/auto/{to_address}" - additional_bindings: { - get: "/cosmos/quarantine/v1beta1/auto/{to_address}/{from_address}" - } - }; - } -} - -// QueryIsQuarantinedRequest defines the RPC request for checking if an account has opted into quarantine. -message QueryIsQuarantinedRequest { - // to_address is the address to check. - string to_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; -} - -// QueryIsQuarantinedResponse defines the RPC response of an IsQuarantined query. -message QueryIsQuarantinedResponse { - // is_quarantined is true if the to_address has opted into quarantine. - bool is_quarantined = 1; -} - -// QueryQuarantinedFundsRequest defines the RPC request for looking up quarantined funds. -message QueryQuarantinedFundsRequest { - // to_address is the intended recipient of the coins that have been quarantined. - string to_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - // from_address is the sender of the coins. If provided, a to_address must also be provided. - string from_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - - // pagination defines optional pagination parameters for the request. - cosmos.base.query.v1beta1.PageRequest pagination = 99; -} - -// QueryQuarantinedFundsResponse defines the RPC response of a QuarantinedFunds query. -message QueryQuarantinedFundsResponse { - // quarantinedFunds is info about coins sitting in quarantine. - repeated QuarantinedFunds quarantinedFunds = 1; - - // pagination defines the pagination parameters of the response. - cosmos.base.query.v1beta1.PageResponse pagination = 99; -} - -// QueryAutoResponsesRequest defines the RPC request for getting auto-response settings for an address. -message QueryAutoResponsesRequest { - // to_address is the quarantined account to get info on. - string to_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - // from_address is an optional sender address to limit results. - string from_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - - // pagination defines optional pagination parameters for the request. - cosmos.base.query.v1beta1.PageRequest pagination = 99; -} - -// QueryAutoResponsesResponse defines the RPC response of a AutoResponses query. -message QueryAutoResponsesResponse { - // auto_responses are the auto-response entries from the provided query. - repeated AutoResponseEntry auto_responses = 1; - - // pagination defines the pagination parameters of the response. - cosmos.base.query.v1beta1.PageResponse pagination = 99; -} diff --git a/third_party/proto/cosmos/quarantine/v1beta1/tx.proto b/third_party/proto/cosmos/quarantine/v1beta1/tx.proto deleted file mode 100644 index 9b799e8ba2..0000000000 --- a/third_party/proto/cosmos/quarantine/v1beta1/tx.proto +++ /dev/null @@ -1,107 +0,0 @@ -syntax = "proto3"; -package cosmos.quarantine.v1beta1; - -import "cosmos/base/query/v1beta1/pagination.proto"; -import "cosmos/base/v1beta1/coin.proto"; -import "cosmos/msg/v1/msg.proto"; -import "cosmos/quarantine/v1beta1/quarantine.proto"; -import "cosmos_proto/cosmos.proto"; -import "gogoproto/gogo.proto"; - -option go_package = "github.com/cosmos/cosmos-sdk/x/quarantine"; - -// Query defines the quarantine gRPC msg service. -service Msg { - // OptIn defines a method for opting in to account quarantine. - // Funds sent to a quarantined account must be approved before they can be received. - rpc OptIn(MsgOptIn) returns (MsgOptInResponse); - - // OptOut defines a method for opting out of account quarantine. - // Any pending funds for the account must still be accepted, but new sends will no longer be quarantined. - rpc OptOut(MsgOptOut) returns (MsgOptOutResponse); - - // Accept defines a method for accepting quarantined funds. - rpc Accept(MsgAccept) returns (MsgAcceptResponse); - - // Decline defines a method for declining quarantined funds. - rpc Decline(MsgDecline) returns (MsgDeclineResponse); - - // UpdateAutoResponses defines a method for updating the auto-response settings for a quarantined address. - rpc UpdateAutoResponses(MsgUpdateAutoResponses) returns (MsgUpdateAutoResponsesResponse); -} - -// MsgOptIn represents a message for opting in to account quarantine. -message MsgOptIn { - option (cosmos.msg.v1.signer) = "to_address"; - - string to_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; -} - -// MsgOptInResponse defines the Msg/OptIn response type. -message MsgOptInResponse {} - -// MsgOptOut represents a message for opting in to account quarantine. -message MsgOptOut { - option (cosmos.msg.v1.signer) = "to_address"; - - string to_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; -} - -// MsgOptOutResponse defines the Msg/OptOut response type. -message MsgOptOutResponse {} - -// MsgAccept represents a message for accepting quarantined funds. -message MsgAccept { - option (cosmos.msg.v1.signer) = "to_address"; - - // to_address is the address of the quarantined account that is accepting funds. - string to_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - // from_addresses is one or more addresses that have sent funds to the quarantined account. - // All funds quarantined for to_address from any from_addresses are marked as accepted and released if appropriate. - // At least one is required. - repeated string from_addresses = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - - // permanent, if true, sets up auto-accept for the to_address from each from_address. - // If false (default), only the currently quarantined funds will be accepted. - bool permanent = 3; -} - -// MsgAcceptResponse defines the Msg/Accept response type. -message MsgAcceptResponse { - // funds_released is the amount that was quarantined but has now been released and sent to the requester. - repeated cosmos.base.v1beta1.Coin funds_released = 1 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; -} - -// MsgDecline represents a message for declining quarantined funds. -message MsgDecline { - option (cosmos.msg.v1.signer) = "to_address"; - - // to_address is the address of the quarantined account that is accepting funds. - string to_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - // from_addresses is one or more addresses that have sent funds to the quarantined account. - // All funds quarantined for to_address from any from_addresses are marked as declined. - // At least one is required. - repeated string from_addresses = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - - // permanent, if true, sets up auto-decline for the to_address from each from_address. - // If false (default), only the currently quarantined funds will be declined. - bool permanent = 3; -} - -// MsgDeclineResponse defines the Msg/Decline response type. -message MsgDeclineResponse {} - -// MsgUpdateAutoResponses represents a message for updating quarantine auto-responses for a receiving address. -message MsgUpdateAutoResponses { - option (cosmos.msg.v1.signer) = "to_address"; - - // to_address is the quarantined address that would be accepting or declining funds. - string to_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - - // updates is the list of addresses and auto-responses that should be updated for the to_address. - repeated AutoResponseUpdate updates = 2; -} - -// MsgUpdateAutoResponsesResponse defines the Msg/UpdateAutoResponse response type. -message MsgUpdateAutoResponsesResponse {} diff --git a/third_party/proto/cosmos/query/v1/query.proto b/third_party/proto/cosmos/query/v1/query.proto new file mode 100644 index 0000000000..e42e73d74d --- /dev/null +++ b/third_party/proto/cosmos/query/v1/query.proto @@ -0,0 +1,35 @@ +syntax = "proto3"; + +package cosmos.query.v1; + +import "google/protobuf/descriptor.proto"; + +// TODO: once we fully migrate to protov2 the go_package needs to be updated. +// We need this right now because gogoproto codegen needs to import the extension. +option go_package = "github.com/cosmos/cosmos-sdk/types/query"; + +extend google.protobuf.MethodOptions { + // module_query_safe is set to true when the query is safe to be called from + // within the state machine, for example from another module's Keeper, via + // ADR-033 calls or from CosmWasm contracts. + // Concretely, it means that the query is: + // 1. deterministic: given a block height, returns the exact same response + // upon multiple calls; and doesn't introduce any state-machine-breaking + // changes across SDK patch version. + // 2. consumes gas correctly. + // + // If you are a module developer and want to add this annotation to one of + // your own queries, please make sure that the corresponding query: + // 1. is deterministic and won't introduce state-machine-breaking changes + // without a coordinated upgrade path, + // 2. has its gas tracked, to avoid the attack vector where no gas is + // accounted for on potentially high-computation queries. + // + // For queries that potentially consume a large amount of gas (for example + // those with pagination, if the pagination field is incorrectly set), we + // also recommend adding Protobuf comments to warn module developers + // consuming these queries. + // + // When set to true, the query can safely be called + bool module_query_safe = 11110001; +} \ No newline at end of file diff --git a/third_party/proto/cosmos/reflection/v1/reflection.proto b/third_party/proto/cosmos/reflection/v1/reflection.proto new file mode 100644 index 0000000000..1f575b8359 --- /dev/null +++ b/third_party/proto/cosmos/reflection/v1/reflection.proto @@ -0,0 +1,27 @@ +syntax = "proto3"; + +package cosmos.reflection.v1; + +import "google/protobuf/descriptor.proto"; +import "cosmos/query/v1/query.proto"; + +// Package cosmos.reflection.v1 provides support for inspecting protobuf +// file descriptors. +service ReflectionService { + // FileDescriptors queries all the file descriptors in the app in order + // to enable easier generation of dynamic clients. + rpc FileDescriptors(FileDescriptorsRequest) returns (FileDescriptorsResponse) { + // NOTE: file descriptors SHOULD NOT be part of consensus because they + // include changes to doc commands and module_query_safe should be kept as false. + option (cosmos.query.v1.module_query_safe) = false; + } +} + +// FileDescriptorsRequest is the Query/FileDescriptors request type. +message FileDescriptorsRequest {} + +// FileDescriptorsResponse is the Query/FileDescriptors response type. +message FileDescriptorsResponse { + // files is the file descriptors. + repeated google.protobuf.FileDescriptorProto files = 1; +} diff --git a/third_party/proto/cosmos/sanction/v1beta1/events.proto b/third_party/proto/cosmos/sanction/v1beta1/events.proto deleted file mode 100644 index 703d187426..0000000000 --- a/third_party/proto/cosmos/sanction/v1beta1/events.proto +++ /dev/null @@ -1,29 +0,0 @@ -syntax = "proto3"; -package cosmos.sanction.v1beta1; - -import "cosmos_proto/cosmos.proto"; - -option go_package = "github.com/cosmos/cosmos-sdk/x/sanction"; - -// EventAddressSanctioned is an event emitted when an address is sanctioned. -message EventAddressSanctioned { - string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; -} - -// EventAddressUnsanctioned is an event emitted when an address is unsanctioned. -message EventAddressUnsanctioned { - string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; -} - -// EventTempAddressSanctioned is an event emitted when an address is temporarily sanctioned. -message EventTempAddressSanctioned { - string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; -} - -// EventTempAddressUnsanctioned is an event emitted when an address is temporarily unsanctioned. -message EventTempAddressUnsanctioned { - string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; -} - -// EventParamsUpdated is an event emitted when the sanction module params are updated. -message EventParamsUpdated {} \ No newline at end of file diff --git a/third_party/proto/cosmos/sanction/v1beta1/genesis.proto b/third_party/proto/cosmos/sanction/v1beta1/genesis.proto deleted file mode 100644 index b342d4b2a3..0000000000 --- a/third_party/proto/cosmos/sanction/v1beta1/genesis.proto +++ /dev/null @@ -1,17 +0,0 @@ -syntax = "proto3"; -package cosmos.sanction.v1beta1; - -import "cosmos/sanction/v1beta1/sanction.proto"; -import "cosmos_proto/cosmos.proto"; - -option go_package = "github.com/cosmos/cosmos-sdk/x/sanction"; - -// GenesisState defines the sanction module's genesis state. -message GenesisState { - // params are the sanction module parameters. - Params params = 1; - // sanctioned_addresses defines account addresses that are sanctioned. - repeated string sanctioned_addresses = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - // temporary_entries defines the temporary entries associated with on-going governance proposals. - repeated TemporaryEntry temporary_entries = 3; -} \ No newline at end of file diff --git a/third_party/proto/cosmos/sanction/v1beta1/query.proto b/third_party/proto/cosmos/sanction/v1beta1/query.proto deleted file mode 100644 index 0278df2117..0000000000 --- a/third_party/proto/cosmos/sanction/v1beta1/query.proto +++ /dev/null @@ -1,84 +0,0 @@ -syntax = "proto3"; -package cosmos.sanction.v1beta1; - -import "cosmos/base/query/v1beta1/pagination.proto"; -import "cosmos/sanction/v1beta1/sanction.proto"; -import "cosmos_proto/cosmos.proto"; -import "google/api/annotations.proto"; - -option go_package = "github.com/cosmos/cosmos-sdk/x/sanction"; - -// Query defines the gRPC querier service. -service Query { - // IsSanctioned checks if an account has been sanctioned. - rpc IsSanctioned(QueryIsSanctionedRequest) returns (QueryIsSanctionedResponse) { - option (google.api.http).get = "/cosmos/sanction/v1beta1/check/{address}"; - } - - // SanctionedAddresses returns a list of sanctioned addresses. - rpc SanctionedAddresses(QuerySanctionedAddressesRequest) returns (QuerySanctionedAddressesResponse) { - option (google.api.http).get = "/cosmos/sanction/v1beta1/all"; - } - - // TemporaryEntries returns temporary sanction/unsanction info. - rpc TemporaryEntries(QueryTemporaryEntriesRequest) returns (QueryTemporaryEntriesResponse) { - option (google.api.http).get = "/cosmos/sanction/v1beta1/temp"; - } - - // Params returns the sanction module's params. - rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { - option (google.api.http).get = "/cosmos/sanction/v1beta1/params"; - } -} - -// QueryIsSanctionedRequest defines the RPC request for checking if an account is sanctioned. -message QueryIsSanctionedRequest { - string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; -} - -// QueryIsSanctionedResponse defines the RPC response of an IsSanctioned query. -message QueryIsSanctionedResponse { - // is_sanctioned is true if the address is sanctioned. - bool is_sanctioned = 1; -} - -// QuerySanctionedAddressesRequest defines the RPC request for listing sanctioned accounts. -message QuerySanctionedAddressesRequest { - // pagination defines an optional pagination for the request. - cosmos.base.query.v1beta1.PageRequest pagination = 99; -} - -// QuerySanctionedAddressesResponse defines the RPC response of a SanctionedAddresses query. -message QuerySanctionedAddressesResponse { - // addresses is the list of sanctioned account addresses. - repeated string addresses = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - - // pagination defines the pagination in the response. - cosmos.base.query.v1beta1.PageResponse pagination = 99; -} - -// QueryTemporaryEntriesRequest defines the RPC request for listing temporary sanction/unsanction entries. -message QueryTemporaryEntriesRequest { - // address is an optional address to restrict results to. - string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - - // pagination defines an optional pagination for the request. - cosmos.base.query.v1beta1.PageRequest pagination = 99; -} - -// QueryTemporaryEntriesResponse defines the RPC response of a TemporaryEntries query. -message QueryTemporaryEntriesResponse { - repeated TemporaryEntry entries = 1; - - // pagination defines the pagination in the response. - cosmos.base.query.v1beta1.PageResponse pagination = 99; -} - -// QueryParamsRequest defines the RPC request for getting the sanction module params. -message QueryParamsRequest {} - -// QueryParamsResponse defines the RPC response of a Params query. -message QueryParamsResponse { - // params are the sanction module parameters. - Params params = 1; -} \ No newline at end of file diff --git a/third_party/proto/cosmos/sanction/v1beta1/sanction.proto b/third_party/proto/cosmos/sanction/v1beta1/sanction.proto deleted file mode 100644 index 06aa1ffcfb..0000000000 --- a/third_party/proto/cosmos/sanction/v1beta1/sanction.proto +++ /dev/null @@ -1,47 +0,0 @@ -syntax = "proto3"; -package cosmos.sanction.v1beta1; - -import "cosmos/base/v1beta1/coin.proto"; -import "cosmos_proto/cosmos.proto"; -import "gogoproto/gogo.proto"; - -option go_package = "github.com/cosmos/cosmos-sdk/x/sanction"; - -// Params defines the configurable parameters of the sanction module. -message Params { - // immediate_sanction_min_deposit is the minimum deposit for a sanction to happen immediately. - // If this is zero, immediate sanctioning is not available. - // Otherwise, if a sanction governance proposal is issued with a deposit at least this large, a temporary sanction - // will be immediately issued that will expire when voting ends on the governance proposal. - repeated cosmos.base.v1beta1.Coin immediate_sanction_min_deposit = 1 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; - - // immediate_unsanction_min_deposit is the minimum deposit for an unsanction to happen immediately. - // If this is zero, immediate unsanctioning is not available. - // Otherwise, if an unsanction governance proposal is issued with a deposit at least this large, a temporary - // unsanction will be immediately issued that will expire when voting ends on the governance proposal. - repeated cosmos.base.v1beta1.Coin immediate_unsanction_min_deposit = 2 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; -} - -// TemporaryEntry defines the information involved in a temporary sanction or unsanction. -message TemporaryEntry { - // address is the address of this temporary entry. - string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - // proposal_id is the governance proposal id associated with this temporary entry. - uint64 proposal_id = 2; - // status is whether the entry is a sanction or unsanction. - TempStatus status = 3; -} - -// TempStatus is whether a temporary entry is a sanction or unsanction. -enum TempStatus { - option (gogoproto.goproto_enum_prefix) = false; - - // TEMP_STATUS_UNSPECIFIED represents and unspecified status value. - TEMP_STATUS_UNSPECIFIED = 0; - // TEMP_STATUS_SANCTIONED indicates a sanction is in place. - TEMP_STATUS_SANCTIONED = 1; - // TEMP_STATUS_UNSANCTIONED indicates an unsanctioned is in place. - TEMP_STATUS_UNSANCTIONED = 2; -} \ No newline at end of file diff --git a/third_party/proto/cosmos/sanction/v1beta1/tx.proto b/third_party/proto/cosmos/sanction/v1beta1/tx.proto deleted file mode 100644 index 256c2301fa..0000000000 --- a/third_party/proto/cosmos/sanction/v1beta1/tx.proto +++ /dev/null @@ -1,65 +0,0 @@ -syntax = "proto3"; -package cosmos.sanction.v1beta1; - -import "cosmos/msg/v1/msg.proto"; -import "cosmos/sanction/v1beta1/sanction.proto"; -import "cosmos_proto/cosmos.proto"; - -option go_package = "github.com/cosmos/cosmos-sdk/x/sanction"; - -// Msg defines the sanction Msg service. -service Msg { - // Sanction is a governance operation for sanctioning addresses. - rpc Sanction(MsgSanction) returns (MsgSanctionResponse); - - // Unsanction is a governance operation for unsanctioning addresses. - rpc Unsanction(MsgUnsanction) returns (MsgUnsanctionResponse); - - // UpdateParams is a governance operation for updating the sanction module params. - rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); -} - -// MsgSanction represents a message for the governance operation of sanctioning addresses. -message MsgSanction { - option (cosmos.msg.v1.signer) = "authority"; - - // addresses are the addresses to sanction. - repeated string addresses = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - - // authority is the address of the account with the authority to enact sanctions (most likely the governance module - // account). - string authority = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; -} - -// MsgOptInResponse defines the Msg/Sanction response type. -message MsgSanctionResponse {} - -// MsgSanction represents a message for the governance operation of unsanctioning addresses. -message MsgUnsanction { - option (cosmos.msg.v1.signer) = "authority"; - - // addresses are the addresses to unsanction. - repeated string addresses = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - - // authority is the address of the account with the authority to retract sanctions (most likely the governance module - // account). - string authority = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; -} - -// MsgOptInResponse defines the Msg/Unsanction response type. -message MsgUnsanctionResponse {} - -// MsgUpdateParams represents a message for the governance operation of updating the sanction module params. -message MsgUpdateParams { - option (cosmos.msg.v1.signer) = "authority"; - - // params are the sanction module parameters. - Params params = 1; - - // authority is the address of the account with the authority to update params (most likely the governance module - // account). - string authority = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; -} - -// MsgUpdateParamsResponse defined the Msg/UpdateParams response type. -message MsgUpdateParamsResponse {} \ No newline at end of file diff --git a/third_party/proto/cosmos/slashing/module/v1/module.proto b/third_party/proto/cosmos/slashing/module/v1/module.proto new file mode 100644 index 0000000000..524330757b --- /dev/null +++ b/third_party/proto/cosmos/slashing/module/v1/module.proto @@ -0,0 +1,15 @@ +syntax = "proto3"; + +package cosmos.slashing.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object of the slashing module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "github.com/cosmos/cosmos-sdk/x/slashing" + }; + + // authority defines the custom module authority. If not set, defaults to the governance module. + string authority = 1; +} diff --git a/third_party/proto/cosmos/slashing/v1beta1/genesis.proto b/third_party/proto/cosmos/slashing/v1beta1/genesis.proto index 312d56aa2f..a2f516bbe7 100644 --- a/third_party/proto/cosmos/slashing/v1beta1/genesis.proto +++ b/third_party/proto/cosmos/slashing/v1beta1/genesis.proto @@ -6,36 +6,37 @@ option go_package = "github.com/cosmos/cosmos-sdk/x/slashing/types"; import "gogoproto/gogo.proto"; import "cosmos/slashing/v1beta1/slashing.proto"; import "cosmos_proto/cosmos.proto"; +import "amino/amino.proto"; // GenesisState defines the slashing module's genesis state. message GenesisState { - // params defines all the paramaters of related to deposit. - Params params = 1 [(gogoproto.nullable) = false]; + // params defines all the parameters of the module. + Params params = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // signing_infos represents a map between validator addresses and their // signing infos. - repeated SigningInfo signing_infos = 2 [(gogoproto.nullable) = false]; + repeated SigningInfo signing_infos = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // missed_blocks represents a map between validator addresses and their // missed blocks. - repeated ValidatorMissedBlocks missed_blocks = 3 [(gogoproto.nullable) = false]; + repeated ValidatorMissedBlocks missed_blocks = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // SigningInfo stores validator signing info of corresponding address. message SigningInfo { // address is the validator address. - string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string address = 1 [(cosmos_proto.scalar) = "cosmos.ConsensusAddressString"]; // validator_signing_info represents the signing info of this validator. - ValidatorSigningInfo validator_signing_info = 2 [(gogoproto.nullable) = false]; + ValidatorSigningInfo validator_signing_info = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // ValidatorMissedBlocks contains array of missed blocks of corresponding // address. message ValidatorMissedBlocks { // address is the validator address. - string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string address = 1 [(cosmos_proto.scalar) = "cosmos.ConsensusAddressString"]; // missed_blocks is an array of missed blocks by the validator. - repeated MissedBlock missed_blocks = 2 [(gogoproto.nullable) = false]; + repeated MissedBlock missed_blocks = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // MissedBlock contains height and missed status as boolean. diff --git a/third_party/proto/cosmos/slashing/v1beta1/query.proto b/third_party/proto/cosmos/slashing/v1beta1/query.proto index f742c1f8ae..e7279709ed 100644 --- a/third_party/proto/cosmos/slashing/v1beta1/query.proto +++ b/third_party/proto/cosmos/slashing/v1beta1/query.proto @@ -6,6 +6,7 @@ import "gogoproto/gogo.proto"; import "google/api/annotations.proto"; import "cosmos/slashing/v1beta1/slashing.proto"; import "cosmos_proto/cosmos.proto"; +import "amino/amino.proto"; option go_package = "github.com/cosmos/cosmos-sdk/x/slashing/types"; @@ -32,21 +33,21 @@ message QueryParamsRequest {} // QueryParamsResponse is the response type for the Query/Params RPC method message QueryParamsResponse { - Params params = 1 [(gogoproto.nullable) = false]; + Params params = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // QuerySigningInfoRequest is the request type for the Query/SigningInfo RPC // method message QuerySigningInfoRequest { // cons_address is the address to query signing info of - string cons_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string cons_address = 1 [(cosmos_proto.scalar) = "cosmos.ConsensusAddressString"]; } // QuerySigningInfoResponse is the response type for the Query/SigningInfo RPC // method message QuerySigningInfoResponse { // val_signing_info is the signing info of requested val cons address - ValidatorSigningInfo val_signing_info = 1 [(gogoproto.nullable) = false]; + ValidatorSigningInfo val_signing_info = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // QuerySigningInfosRequest is the request type for the Query/SigningInfos RPC @@ -59,6 +60,7 @@ message QuerySigningInfosRequest { // method message QuerySigningInfosResponse { // info is the signing info of all validators - repeated cosmos.slashing.v1beta1.ValidatorSigningInfo info = 1 [(gogoproto.nullable) = false]; - cosmos.base.query.v1beta1.PageResponse pagination = 2; + repeated cosmos.slashing.v1beta1.ValidatorSigningInfo info = 1 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + cosmos.base.query.v1beta1.PageResponse pagination = 2; } diff --git a/third_party/proto/cosmos/slashing/v1beta1/slashing.proto b/third_party/proto/cosmos/slashing/v1beta1/slashing.proto index 0aa9f61ffe..2347f34973 100644 --- a/third_party/proto/cosmos/slashing/v1beta1/slashing.proto +++ b/third_party/proto/cosmos/slashing/v1beta1/slashing.proto @@ -8,38 +8,55 @@ import "gogoproto/gogo.proto"; import "google/protobuf/duration.proto"; import "google/protobuf/timestamp.proto"; import "cosmos_proto/cosmos.proto"; +import "amino/amino.proto"; // ValidatorSigningInfo defines a validator's signing info for monitoring their // liveness activity. message ValidatorSigningInfo { - option (gogoproto.equal) = true; - option (gogoproto.goproto_stringer) = false; + option (gogoproto.equal) = true; - string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - // Height at which validator was first a candidate OR was unjailed + string address = 1 [(cosmos_proto.scalar) = "cosmos.ConsensusAddressString"]; + // Height at which validator was first a candidate OR was un-jailed int64 start_height = 2; - // 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`. + // Index which is incremented every time a validator is bonded in a block and + // _may_ have signed a pre-commit or not. This in conjunction with the + // signed_blocks_window param determines the index in the missed block bitmap. int64 index_offset = 3; // Timestamp until which the validator is jailed due to liveness downtime. - google.protobuf.Timestamp jailed_until = 4 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; - // 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. + google.protobuf.Timestamp jailed_until = 4 + [(gogoproto.stdtime) = true, (gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + // 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 misbehavior. bool tombstoned = 5; - // A counter kept to avoid unnecessary array reads. - // Note that `Sum(MissedBlocksBitArray)` always equals `MissedBlocksCounter`. + // A counter of missed (unsigned) blocks. It is used to avoid unnecessary + // reads in the missed block bitmap. int64 missed_blocks_counter = 6; } // Params represents the parameters used for by the slashing module. message Params { + option (amino.name) = "cosmos-sdk/x/slashing/Params"; + int64 signed_blocks_window = 1; - bytes min_signed_per_window = 2 - [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false]; - google.protobuf.Duration downtime_jail_duration = 3 [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; - bytes slash_fraction_double_sign = 4 - [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false]; - bytes slash_fraction_downtime = 5 - [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false]; + bytes min_signed_per_window = 2 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + google.protobuf.Duration downtime_jail_duration = 3 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.stdduration) = true]; + bytes slash_fraction_double_sign = 4 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + bytes slash_fraction_downtime = 5 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; } diff --git a/third_party/proto/cosmos/slashing/v1beta1/tx.proto b/third_party/proto/cosmos/slashing/v1beta1/tx.proto index 7c90304b84..2499b4fd05 100644 --- a/third_party/proto/cosmos/slashing/v1beta1/tx.proto +++ b/third_party/proto/cosmos/slashing/v1beta1/tx.proto @@ -5,26 +5,63 @@ option go_package = "github.com/cosmos/cosmos-sdk/x/slashing/types"; option (gogoproto.equal_all) = true; import "gogoproto/gogo.proto"; +import "cosmos/slashing/v1beta1/slashing.proto"; import "cosmos_proto/cosmos.proto"; import "cosmos/msg/v1/msg.proto"; +import "amino/amino.proto"; // Msg defines the slashing Msg service. service Msg { + option (cosmos.msg.v1.service) = true; + // Unjail defines a method for unjailing a jailed validator, thus returning // them into the bonded validator set, so they can begin receiving provisions // and rewards again. rpc Unjail(MsgUnjail) returns (MsgUnjailResponse); + + // UpdateParams defines a governance operation for updating the x/slashing module + // parameters. The authority defaults to the x/gov module account. + // + // Since: cosmos-sdk 0.47 + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); } // MsgUnjail defines the Msg/Unjail request type message MsgUnjail { option (cosmos.msg.v1.signer) = "validator_addr"; + option (amino.name) = "cosmos-sdk/MsgUnjail"; - option (gogoproto.goproto_getters) = false; - option (gogoproto.goproto_stringer) = true; + option (gogoproto.goproto_getters) = false; - string validator_addr = 1 [(cosmos_proto.scalar) = "cosmos.AddressString", (gogoproto.jsontag) = "address"]; + string validator_addr = 1 [ + (cosmos_proto.scalar) = "cosmos.ValidatorAddressString", + (gogoproto.jsontag) = "address", + (amino.field_name) = "address", + (amino.dont_omitempty) = true + ]; } // MsgUnjailResponse defines the Msg/Unjail response type message MsgUnjailResponse {} + +// MsgUpdateParams is the Msg/UpdateParams request type. +// +// Since: cosmos-sdk 0.47 +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "cosmos-sdk/x/slashing/MsgUpdateParams"; + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // params defines the x/slashing parameters to update. + // + // NOTE: All parameters must be supplied. + Params params = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +// +// Since: cosmos-sdk 0.47 +message MsgUpdateParamsResponse {} diff --git a/third_party/proto/cosmos/staking/module/v1/module.proto b/third_party/proto/cosmos/staking/module/v1/module.proto new file mode 100644 index 0000000000..fd92a54805 --- /dev/null +++ b/third_party/proto/cosmos/staking/module/v1/module.proto @@ -0,0 +1,26 @@ +syntax = "proto3"; + +package cosmos.staking.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object of the staking module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "github.com/cosmos/cosmos-sdk/x/staking" + }; + + // hooks_order specifies the order of staking hooks and should be a list + // of module names which provide a staking hooks instance. If no order is + // provided, then hooks will be applied in alphabetical order of module names. + repeated string hooks_order = 1; + + // authority defines the custom module authority. If not set, defaults to the governance module. + string authority = 2; + + // bech32_prefix_validator is the bech32 validator prefix for the app. + string bech32_prefix_validator = 3; + + // bech32_prefix_consensus is the bech32 consensus node prefix for the app. + string bech32_prefix_consensus = 4; +} diff --git a/third_party/proto/cosmos/staking/v1beta1/authz.proto b/third_party/proto/cosmos/staking/v1beta1/authz.proto index 677edaad1a..409280c1ed 100644 --- a/third_party/proto/cosmos/staking/v1beta1/authz.proto +++ b/third_party/proto/cosmos/staking/v1beta1/authz.proto @@ -4,6 +4,7 @@ package cosmos.staking.v1beta1; import "gogoproto/gogo.proto"; import "cosmos_proto/cosmos.proto"; import "cosmos/base/v1beta1/coin.proto"; +import "amino/amino.proto"; option go_package = "github.com/cosmos/cosmos-sdk/x/staking/types"; @@ -11,7 +12,8 @@ option go_package = "github.com/cosmos/cosmos-sdk/x/staking/types"; // // Since: cosmos-sdk 0.43 message StakeAuthorization { - option (cosmos_proto.implements_interface) = "Authorization"; + option (cosmos_proto.implements_interface) = "cosmos.authz.v1beta1.Authorization"; + option (amino.name) = "cosmos-sdk/StakeAuthorization"; // max_tokens specifies the maximum amount of tokens can be delegate to a validator. If it is // empty, there is no spend limit and any amount of coins can be delegated. @@ -20,9 +22,9 @@ message StakeAuthorization { oneof validators { // allow_list specifies list of validator addresses to whom grantee can delegate tokens on behalf of granter's // account. - Validators allow_list = 2; + Validators allow_list = 2 [(amino.oneof_name) = "cosmos-sdk/StakeAuthorization/AllowList"]; // deny_list specifies list of validator addresses to whom grantee can not delegate tokens. - Validators deny_list = 3; + Validators deny_list = 3 [(amino.oneof_name) = "cosmos-sdk/StakeAuthorization/DenyList"]; } // Validators defines list of validator addresses. message Validators { @@ -44,4 +46,6 @@ enum AuthorizationType { AUTHORIZATION_TYPE_UNDELEGATE = 2; // AUTHORIZATION_TYPE_REDELEGATE defines an authorization type for Msg/BeginRedelegate AUTHORIZATION_TYPE_REDELEGATE = 3; + // AUTHORIZATION_TYPE_CANCEL_UNBONDING_DELEGATION defines an authorization type for Msg/MsgCancelUnbondingDelegation + AUTHORIZATION_TYPE_CANCEL_UNBONDING_DELEGATION = 4; } diff --git a/third_party/proto/cosmos/staking/v1beta1/genesis.proto b/third_party/proto/cosmos/staking/v1beta1/genesis.proto index bf3c298e39..c3f1ce5dee 100644 --- a/third_party/proto/cosmos/staking/v1beta1/genesis.proto +++ b/third_party/proto/cosmos/staking/v1beta1/genesis.proto @@ -6,33 +6,39 @@ option go_package = "github.com/cosmos/cosmos-sdk/x/staking/types"; import "gogoproto/gogo.proto"; import "cosmos/staking/v1beta1/staking.proto"; import "cosmos_proto/cosmos.proto"; +import "amino/amino.proto"; // GenesisState defines the staking module's genesis state. message GenesisState { - // params defines all the paramaters of related to deposit. - Params params = 1 [(gogoproto.nullable) = false]; + // params defines all the parameters of related to deposit. + Params params = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // last_total_power tracks the total amounts of bonded tokens recorded during // the previous end block. - bytes last_total_power = 2 - [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", (gogoproto.nullable) = false]; + bytes last_total_power = 2 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; // last_validator_powers is a special index that provides a historical list // of the last-block's bonded validators. - repeated LastValidatorPower last_validator_powers = 3 [(gogoproto.nullable) = false]; + repeated LastValidatorPower last_validator_powers = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; - // delegations defines the validator set at genesis. - repeated Validator validators = 4 [(gogoproto.nullable) = false]; + // validators defines the validator set at genesis. + repeated Validator validators = 4 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // delegations defines the delegations active at genesis. - repeated Delegation delegations = 5 [(gogoproto.nullable) = false]; + repeated Delegation delegations = 5 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // unbonding_delegations defines the unbonding delegations active at genesis. - repeated UnbondingDelegation unbonding_delegations = 6 [(gogoproto.nullable) = false]; + repeated UnbondingDelegation unbonding_delegations = 6 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // redelegations defines the redelegations active at genesis. - repeated Redelegation redelegations = 7 [(gogoproto.nullable) = false]; + repeated Redelegation redelegations = 7 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + // exported defines a bool to identify whether the chain dealing with exported or initialized genesis. bool exported = 8; } diff --git a/third_party/proto/cosmos/staking/v1beta1/query.proto b/third_party/proto/cosmos/staking/v1beta1/query.proto index 2cbb750b0b..08eb9f3245 100644 --- a/third_party/proto/cosmos/staking/v1beta1/query.proto +++ b/third_party/proto/cosmos/staking/v1beta1/query.proto @@ -6,90 +6,127 @@ import "gogoproto/gogo.proto"; import "google/api/annotations.proto"; import "cosmos/staking/v1beta1/staking.proto"; import "cosmos_proto/cosmos.proto"; +import "cosmos/query/v1/query.proto"; +import "amino/amino.proto"; option go_package = "github.com/cosmos/cosmos-sdk/x/staking/types"; // Query defines the gRPC querier service. service Query { // Validators queries all validators that match the given status. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. rpc Validators(QueryValidatorsRequest) returns (QueryValidatorsResponse) { - option (google.api.http).get = "/cosmos/staking/v1beta1/validators"; + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/staking/v1beta1/validators"; } // Validator queries validator info for given validator address. rpc Validator(QueryValidatorRequest) returns (QueryValidatorResponse) { - option (google.api.http).get = "/cosmos/staking/v1beta1/validators/{validator_addr}"; + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/staking/v1beta1/validators/{validator_addr}"; } // ValidatorDelegations queries delegate info for given validator. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. rpc ValidatorDelegations(QueryValidatorDelegationsRequest) returns (QueryValidatorDelegationsResponse) { - option (google.api.http).get = "/cosmos/staking/v1beta1/validators/{validator_addr}/delegations"; + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/staking/v1beta1/validators/{validator_addr}/delegations"; } // ValidatorUnbondingDelegations queries unbonding delegations of a validator. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. rpc ValidatorUnbondingDelegations(QueryValidatorUnbondingDelegationsRequest) returns (QueryValidatorUnbondingDelegationsResponse) { - option (google.api.http).get = "/cosmos/staking/v1beta1/validators/" - "{validator_addr}/unbonding_delegations"; + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/staking/v1beta1/validators/" + "{validator_addr}/unbonding_delegations"; } // Delegation queries delegate info for given validator delegator pair. rpc Delegation(QueryDelegationRequest) returns (QueryDelegationResponse) { - option (google.api.http).get = "/cosmos/staking/v1beta1/validators/{validator_addr}/delegations/" - "{delegator_addr}"; + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/staking/v1beta1/validators/{validator_addr}/delegations/" + "{delegator_addr}"; } // UnbondingDelegation queries unbonding info for given validator delegator // pair. rpc UnbondingDelegation(QueryUnbondingDelegationRequest) returns (QueryUnbondingDelegationResponse) { - option (google.api.http).get = "/cosmos/staking/v1beta1/validators/{validator_addr}/delegations/" - "{delegator_addr}/unbonding_delegation"; + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/staking/v1beta1/validators/{validator_addr}/delegations/" + "{delegator_addr}/unbonding_delegation"; } // DelegatorDelegations queries all delegations of a given delegator address. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. rpc DelegatorDelegations(QueryDelegatorDelegationsRequest) returns (QueryDelegatorDelegationsResponse) { - option (google.api.http).get = "/cosmos/staking/v1beta1/delegations/{delegator_addr}"; + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/staking/v1beta1/delegations/{delegator_addr}"; } // DelegatorUnbondingDelegations queries all unbonding delegations of a given // delegator address. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. rpc DelegatorUnbondingDelegations(QueryDelegatorUnbondingDelegationsRequest) returns (QueryDelegatorUnbondingDelegationsResponse) { - option (google.api.http).get = "/cosmos/staking/v1beta1/delegators/" - "{delegator_addr}/unbonding_delegations"; + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/staking/v1beta1/delegators/" + "{delegator_addr}/unbonding_delegations"; } // Redelegations queries redelegations of given address. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. rpc Redelegations(QueryRedelegationsRequest) returns (QueryRedelegationsResponse) { - option (google.api.http).get = "/cosmos/staking/v1beta1/delegators/{delegator_addr}/redelegations"; + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/staking/v1beta1/delegators/{delegator_addr}/redelegations"; } // DelegatorValidators queries all validators info for given delegator // address. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. rpc DelegatorValidators(QueryDelegatorValidatorsRequest) returns (QueryDelegatorValidatorsResponse) { - option (google.api.http).get = "/cosmos/staking/v1beta1/delegators/{delegator_addr}/validators"; + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/staking/v1beta1/delegators/{delegator_addr}/validators"; } // DelegatorValidator queries validator info for given delegator validator // pair. rpc DelegatorValidator(QueryDelegatorValidatorRequest) returns (QueryDelegatorValidatorResponse) { - option (google.api.http).get = "/cosmos/staking/v1beta1/delegators/{delegator_addr}/validators/" - "{validator_addr}"; + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/staking/v1beta1/delegators/{delegator_addr}/validators/" + "{validator_addr}"; } // HistoricalInfo queries the historical info for given height. rpc HistoricalInfo(QueryHistoricalInfoRequest) returns (QueryHistoricalInfoResponse) { - option (google.api.http).get = "/cosmos/staking/v1beta1/historical_info/{height}"; + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/staking/v1beta1/historical_info/{height}"; } // Pool queries the pool info. rpc Pool(QueryPoolRequest) returns (QueryPoolResponse) { - option (google.api.http).get = "/cosmos/staking/v1beta1/pool"; + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/staking/v1beta1/pool"; } // Parameters queries the staking parameters. rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { - option (google.api.http).get = "/cosmos/staking/v1beta1/params"; + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/staking/v1beta1/params"; } } @@ -105,7 +142,7 @@ message QueryValidatorsRequest { // QueryValidatorsResponse is response type for the Query/Validators RPC method message QueryValidatorsResponse { // validators contains all the queried validators. - repeated Validator validators = 1 [(gogoproto.nullable) = false]; + repeated Validator validators = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // pagination defines the pagination in the response. cosmos.base.query.v1beta1.PageResponse pagination = 2; @@ -114,20 +151,20 @@ message QueryValidatorsResponse { // QueryValidatorRequest is response type for the Query/Validator RPC method message QueryValidatorRequest { // validator_addr defines the validator address to query for. - string validator_addr = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string validator_addr = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; } // QueryValidatorResponse is response type for the Query/Validator RPC method message QueryValidatorResponse { // validator defines the validator info. - Validator validator = 1 [(gogoproto.nullable) = false]; + Validator validator = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // QueryValidatorDelegationsRequest is request type for the // Query/ValidatorDelegations RPC method message QueryValidatorDelegationsRequest { // validator_addr defines the validator address to query for. - string validator_addr = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string validator_addr = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; // pagination defines an optional pagination for the request. cosmos.base.query.v1beta1.PageRequest pagination = 2; @@ -137,7 +174,7 @@ message QueryValidatorDelegationsRequest { // Query/ValidatorDelegations RPC method message QueryValidatorDelegationsResponse { repeated DelegationResponse delegation_responses = 1 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "DelegationResponses"]; + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.castrepeated) = "DelegationResponses"]; // pagination defines the pagination in the response. cosmos.base.query.v1beta1.PageResponse pagination = 2; @@ -147,7 +184,7 @@ message QueryValidatorDelegationsResponse { // Query/ValidatorUnbondingDelegations RPC method message QueryValidatorUnbondingDelegationsRequest { // validator_addr defines the validator address to query for. - string validator_addr = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string validator_addr = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; // pagination defines an optional pagination for the request. cosmos.base.query.v1beta1.PageRequest pagination = 2; @@ -156,7 +193,7 @@ message QueryValidatorUnbondingDelegationsRequest { // QueryValidatorUnbondingDelegationsResponse is response type for the // Query/ValidatorUnbondingDelegations RPC method. message QueryValidatorUnbondingDelegationsResponse { - repeated UnbondingDelegation unbonding_responses = 1 [(gogoproto.nullable) = false]; + repeated UnbondingDelegation unbonding_responses = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // pagination defines the pagination in the response. cosmos.base.query.v1beta1.PageResponse pagination = 2; @@ -171,7 +208,7 @@ message QueryDelegationRequest { string delegator_addr = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; // validator_addr defines the validator address to query for. - string validator_addr = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string validator_addr = 2 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; } // QueryDelegationResponse is response type for the Query/Delegation RPC method. @@ -190,14 +227,14 @@ message QueryUnbondingDelegationRequest { string delegator_addr = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; // validator_addr defines the validator address to query for. - string validator_addr = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string validator_addr = 2 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; } // QueryDelegationResponse is response type for the Query/UnbondingDelegation // RPC method. message QueryUnbondingDelegationResponse { // unbond defines the unbonding information of a delegation. - UnbondingDelegation unbond = 1 [(gogoproto.nullable) = false]; + UnbondingDelegation unbond = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // QueryDelegatorDelegationsRequest is request type for the @@ -217,7 +254,7 @@ message QueryDelegatorDelegationsRequest { // Query/DelegatorDelegations RPC method. message QueryDelegatorDelegationsResponse { // delegation_responses defines all the delegations' info of a delegator. - repeated DelegationResponse delegation_responses = 1 [(gogoproto.nullable) = false]; + repeated DelegationResponse delegation_responses = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // pagination defines the pagination in the response. cosmos.base.query.v1beta1.PageResponse pagination = 2; @@ -239,7 +276,7 @@ message QueryDelegatorUnbondingDelegationsRequest { // QueryUnbondingDelegatorDelegationsResponse is response type for the // Query/UnbondingDelegatorDelegations RPC method. message QueryDelegatorUnbondingDelegationsResponse { - repeated UnbondingDelegation unbonding_responses = 1 [(gogoproto.nullable) = false]; + repeated UnbondingDelegation unbonding_responses = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // pagination defines the pagination in the response. cosmos.base.query.v1beta1.PageResponse pagination = 2; @@ -267,7 +304,8 @@ message QueryRedelegationsRequest { // QueryRedelegationsResponse is response type for the Query/Redelegations RPC // method. message QueryRedelegationsResponse { - repeated RedelegationResponse redelegation_responses = 1 [(gogoproto.nullable) = false]; + repeated RedelegationResponse redelegation_responses = 1 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // pagination defines the pagination in the response. cosmos.base.query.v1beta1.PageResponse pagination = 2; @@ -290,7 +328,7 @@ message QueryDelegatorValidatorsRequest { // Query/DelegatorValidators RPC method. message QueryDelegatorValidatorsResponse { // validators defines the validators' info of a delegator. - repeated Validator validators = 1 [(gogoproto.nullable) = false]; + repeated Validator validators = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // pagination defines the pagination in the response. cosmos.base.query.v1beta1.PageResponse pagination = 2; @@ -306,14 +344,14 @@ message QueryDelegatorValidatorRequest { string delegator_addr = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; // validator_addr defines the validator address to query for. - string validator_addr = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string validator_addr = 2 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; } // QueryDelegatorValidatorResponse response type for the // Query/DelegatorValidator RPC method. message QueryDelegatorValidatorResponse { // validator defines the validator info. - Validator validator = 1 [(gogoproto.nullable) = false]; + Validator validator = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // QueryHistoricalInfoRequest is request type for the Query/HistoricalInfo RPC @@ -336,7 +374,7 @@ message QueryPoolRequest {} // QueryPoolResponse is response type for the Query/Pool RPC method. message QueryPoolResponse { // pool defines the pool info. - Pool pool = 1 [(gogoproto.nullable) = false]; + Pool pool = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // QueryParamsRequest is request type for the Query/Params RPC method. @@ -345,5 +383,5 @@ message QueryParamsRequest {} // QueryParamsResponse is response type for the Query/Params RPC method. message QueryParamsResponse { // params holds all the parameters of this module. - Params params = 1 [(gogoproto.nullable) = false]; + Params params = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } diff --git a/third_party/proto/cosmos/staking/v1beta1/staking.proto b/third_party/proto/cosmos/staking/v1beta1/staking.proto index 6dc965feab..24ec65d102 100644 --- a/third_party/proto/cosmos/staking/v1beta1/staking.proto +++ b/third_party/proto/cosmos/staking/v1beta1/staking.proto @@ -8,7 +8,9 @@ import "google/protobuf/timestamp.proto"; import "cosmos_proto/cosmos.proto"; import "cosmos/base/v1beta1/coin.proto"; +import "amino/amino.proto"; import "tendermint/types/types.proto"; +import "tendermint/abci/types.proto"; option go_package = "github.com/cosmos/cosmos-sdk/x/staking/types"; @@ -17,51 +19,53 @@ option go_package = "github.com/cosmos/cosmos-sdk/x/staking/types"; // recent HistoricalInfo // (`n` is set by the staking module's `historical_entries` parameter). message HistoricalInfo { - tendermint.types.Header header = 1 [(gogoproto.nullable) = false]; - repeated Validator valset = 2 [(gogoproto.nullable) = false]; + tendermint.types.Header header = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + repeated Validator valset = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // CommissionRates defines the initial commission rates to be used for creating // a validator. message CommissionRates { - option (gogoproto.equal) = true; - option (gogoproto.goproto_stringer) = false; + option (gogoproto.equal) = true; // rate is the commission rate charged to delegators, as a fraction. string rate = 1 [ (cosmos_proto.scalar) = "cosmos.Dec", - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", - (gogoproto.nullable) = false + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true ]; // max_rate defines the maximum commission rate which validator can ever charge, as a fraction. string max_rate = 2 [ (cosmos_proto.scalar) = "cosmos.Dec", - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", - (gogoproto.nullable) = false + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true ]; // max_change_rate defines the maximum daily increase of the validator commission, as a fraction. string max_change_rate = 3 [ (cosmos_proto.scalar) = "cosmos.Dec", - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", - (gogoproto.nullable) = false + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true ]; } // Commission defines commission parameters for a given validator. message Commission { - option (gogoproto.equal) = true; - option (gogoproto.goproto_stringer) = false; + option (gogoproto.equal) = true; // commission_rates defines the initial commission rates to be used for creating a validator. - CommissionRates commission_rates = 1 [(gogoproto.embed) = true, (gogoproto.nullable) = false]; + CommissionRates commission_rates = 1 + [(gogoproto.embed) = true, (gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // update_time is the last time the commission rate was changed. - google.protobuf.Timestamp update_time = 2 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + google.protobuf.Timestamp update_time = 2 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.stdtime) = true]; } // Description defines a validator description. message Description { - option (gogoproto.equal) = true; - option (gogoproto.goproto_stringer) = false; + option (gogoproto.equal) = true; // moniker defines a human-readable name for the validator. string moniker = 1; @@ -84,9 +88,8 @@ message Description { // exchange rate. Voting power can be calculated as total bonded shares // multiplied by exchange rate. message Validator { - option (gogoproto.equal) = false; - option (gogoproto.goproto_stringer) = false; - option (gogoproto.goproto_getters) = false; + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; // operator_address defines the address of the validator's operator; bech encoded in JSON. string operator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; @@ -99,31 +102,38 @@ message Validator { // tokens define the delegated tokens (incl. self-delegation). string tokens = 5 [ (cosmos_proto.scalar) = "cosmos.Int", - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false ]; // delegator_shares defines total shares issued to a validator's delegators. string delegator_shares = 6 [ (cosmos_proto.scalar) = "cosmos.Dec", - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", (gogoproto.nullable) = false ]; // description defines the description terms for the validator. - Description description = 7 [(gogoproto.nullable) = false]; + Description description = 7 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // unbonding_height defines, if unbonding, the height at which this validator has begun unbonding. int64 unbonding_height = 8; // unbonding_time defines, if unbonding, the min time for the validator to complete unbonding. - google.protobuf.Timestamp unbonding_time = 9 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + google.protobuf.Timestamp unbonding_time = 9 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.stdtime) = true]; // commission defines the commission parameters. - Commission commission = 10 [(gogoproto.nullable) = false]; + Commission commission = 10 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // min_self_delegation is the validator's self declared minimum self delegation. // // Since: cosmos-sdk 0.46 string min_self_delegation = 11 [ (cosmos_proto.scalar) = "cosmos.Int", - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false ]; + + // strictly positive if this validator's unbonding has been stopped by external modules + int64 unbonding_on_hold_ref_count = 12; + + // list of unbonding ids, each uniquely identifing an unbonding of this validator + repeated uint64 unbonding_ids = 13; } // BondStatus is the status of a validator. @@ -142,9 +152,6 @@ enum BondStatus { // ValAddresses defines a repeated set of validator addresses. message ValAddresses { - option (gogoproto.goproto_stringer) = false; - option (gogoproto.stringer) = true; - repeated string addresses = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; } @@ -152,17 +159,16 @@ message ValAddresses { // It is intended to be used as a marshalable pointer. For example, a DVPair can // be used to construct the key to getting an UnbondingDelegation from state. message DVPair { - option (gogoproto.equal) = false; - option (gogoproto.goproto_getters) = false; - option (gogoproto.goproto_stringer) = false; + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; string delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; } // DVPairs defines an array of DVPair objects. message DVPairs { - repeated DVPair pairs = 1 [(gogoproto.nullable) = false]; + repeated DVPair pairs = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // DVVTriplet is struct that just has a delegator-validator-validator triplet @@ -170,36 +176,34 @@ message DVPairs { // example, a DVVTriplet can be used to construct the key to getting a // Redelegation from state. message DVVTriplet { - option (gogoproto.equal) = false; - option (gogoproto.goproto_getters) = false; - option (gogoproto.goproto_stringer) = false; + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; string delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - string validator_src_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - string validator_dst_address = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string validator_src_address = 2 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + string validator_dst_address = 3 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; } // DVVTriplets defines an array of DVVTriplet objects. message DVVTriplets { - repeated DVVTriplet triplets = 1 [(gogoproto.nullable) = false]; + repeated DVVTriplet triplets = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // 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. message Delegation { - option (gogoproto.equal) = false; - option (gogoproto.goproto_getters) = false; - option (gogoproto.goproto_stringer) = false; + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; - // delegator_address is the bech32-encoded address of the delegator. + // delegator_address is the encoded address of the delegator. string delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - // validator_address is the bech32-encoded address of the validator. - string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + // validator_address is the encoded address of the validator. + string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; // shares define the delegation shares received. string shares = 3 [ (cosmos_proto.scalar) = "cosmos.Dec", - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", (gogoproto.nullable) = false ]; } @@ -207,88 +211,99 @@ message Delegation { // UnbondingDelegation stores all of a single delegator's unbonding bonds // for a single validator in an time-ordered list. message UnbondingDelegation { - option (gogoproto.equal) = false; - option (gogoproto.goproto_getters) = false; - option (gogoproto.goproto_stringer) = false; + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; - // delegator_address is the bech32-encoded address of the delegator. + // delegator_address is the encoded address of the delegator. string delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - // validator_address is the bech32-encoded address of the validator. - string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + // validator_address is the encoded address of the validator. + string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; // entries are the unbonding delegation entries. - repeated UnbondingDelegationEntry entries = 3 [(gogoproto.nullable) = false]; // unbonding delegation entries + repeated UnbondingDelegationEntry entries = 3 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // unbonding delegation entries } // UnbondingDelegationEntry defines an unbonding object with relevant metadata. message UnbondingDelegationEntry { - option (gogoproto.equal) = true; - option (gogoproto.goproto_stringer) = false; + option (gogoproto.equal) = true; // creation_height is the height which the unbonding took place. int64 creation_height = 1; // completion_time is the unix time for unbonding completion. - google.protobuf.Timestamp completion_time = 2 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + google.protobuf.Timestamp completion_time = 2 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.stdtime) = true]; // initial_balance defines the tokens initially scheduled to receive at completion. string initial_balance = 3 [ (cosmos_proto.scalar) = "cosmos.Int", - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false ]; // balance defines the tokens to receive at completion. string balance = 4 [ (cosmos_proto.scalar) = "cosmos.Int", - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false ]; + // Incrementing id that uniquely identifies this entry + uint64 unbonding_id = 5; + + // Strictly positive if this entry's unbonding has been stopped by external modules + int64 unbonding_on_hold_ref_count = 6; } // RedelegationEntry defines a redelegation object with relevant metadata. message RedelegationEntry { - option (gogoproto.equal) = true; - option (gogoproto.goproto_stringer) = false; + option (gogoproto.equal) = true; // creation_height defines the height which the redelegation took place. int64 creation_height = 1; // completion_time defines the unix time for redelegation completion. - google.protobuf.Timestamp completion_time = 2 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + google.protobuf.Timestamp completion_time = 2 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.stdtime) = true]; // initial_balance defines the initial balance when redelegation started. string initial_balance = 3 [ (cosmos_proto.scalar) = "cosmos.Int", - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false ]; // shares_dst is the amount of destination-validator shares created by redelegation. string shares_dst = 4 [ (cosmos_proto.scalar) = "cosmos.Dec", - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", (gogoproto.nullable) = false ]; + // Incrementing id that uniquely identifies this entry + uint64 unbonding_id = 5; + + // Strictly positive if this entry's unbonding has been stopped by external modules + int64 unbonding_on_hold_ref_count = 6; } // Redelegation contains the list of a particular delegator's redelegating bonds // from a particular source validator to a particular destination validator. message Redelegation { - option (gogoproto.equal) = false; - option (gogoproto.goproto_getters) = false; - option (gogoproto.goproto_stringer) = false; + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; // delegator_address is the bech32-encoded address of the delegator. string delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; // validator_src_address is the validator redelegation source operator address. - string validator_src_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string validator_src_address = 2 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; // validator_dst_address is the validator redelegation destination operator address. - string validator_dst_address = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string validator_dst_address = 3 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; // entries are the redelegation entries. - repeated RedelegationEntry entries = 4 [(gogoproto.nullable) = false]; // redelegation entries + repeated RedelegationEntry entries = 4 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // redelegation entries } -// Params defines the parameters for the staking module. +// Params defines the parameters for the x/staking module. message Params { - option (gogoproto.equal) = true; - option (gogoproto.goproto_stringer) = false; + option (amino.name) = "cosmos-sdk/x/staking/Params"; + option (gogoproto.equal) = true; // unbonding_time is the time duration of unbonding. - google.protobuf.Duration unbonding_time = 1 [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; + google.protobuf.Duration unbonding_time = 1 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.stdduration) = true]; // max_validators is the maximum number of validators. uint32 max_validators = 2; // max_entries is the max entries for either unbonding delegation or redelegation (per pair/trio). @@ -300,20 +315,21 @@ message Params { // min_commission_rate is the chain-wide minimum commission rate that a validator can charge their delegators string min_commission_rate = 6 [ (gogoproto.moretags) = "yaml:\"min_commission_rate\"", - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", - (gogoproto.nullable) = false + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (cosmos_proto.scalar) = "cosmos.Dec" ]; } // DelegationResponse is equivalent to Delegation except that it contains a // balance in addition to shares which is more suitable for client responses. message DelegationResponse { - option (gogoproto.equal) = false; - option (gogoproto.goproto_stringer) = false; + option (gogoproto.equal) = false; - Delegation delegation = 1 [(gogoproto.nullable) = false]; + Delegation delegation = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; - cosmos.base.v1beta1.Coin balance = 2 [(gogoproto.nullable) = false]; + cosmos.base.v1beta1.Coin balance = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // RedelegationEntryResponse is equivalent to a RedelegationEntry except that it @@ -322,10 +338,10 @@ message DelegationResponse { message RedelegationEntryResponse { option (gogoproto.equal) = true; - RedelegationEntry redelegation_entry = 1 [(gogoproto.nullable) = false]; + RedelegationEntry redelegation_entry = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; string balance = 4 [ (cosmos_proto.scalar) = "cosmos.Int", - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false ]; } @@ -336,8 +352,8 @@ message RedelegationEntryResponse { message RedelegationResponse { option (gogoproto.equal) = false; - Redelegation redelegation = 1 [(gogoproto.nullable) = false]; - repeated RedelegationEntryResponse entries = 2 [(gogoproto.nullable) = false]; + Redelegation redelegation = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + repeated RedelegationEntryResponse entries = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // Pool is used for tracking bonded and not-bonded token supply of the bond @@ -347,14 +363,32 @@ message Pool { option (gogoproto.equal) = true; string not_bonded_tokens = 1 [ (cosmos_proto.scalar) = "cosmos.Int", - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false, - (gogoproto.jsontag) = "not_bonded_tokens" + (gogoproto.jsontag) = "not_bonded_tokens", + (amino.dont_omitempty) = true ]; string bonded_tokens = 2 [ (cosmos_proto.scalar) = "cosmos.Int", - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false, - (gogoproto.jsontag) = "bonded_tokens" + (gogoproto.jsontag) = "bonded_tokens", + (amino.dont_omitempty) = true ]; } + +// Infraction indicates the infraction a validator commited. +enum Infraction { + // UNSPECIFIED defines an empty infraction. + INFRACTION_UNSPECIFIED = 0; + // DOUBLE_SIGN defines a validator that double-signs a block. + INFRACTION_DOUBLE_SIGN = 1; + // DOWNTIME defines a validator that missed signing too many blocks. + INFRACTION_DOWNTIME = 2; +} + +// ValidatorUpdates defines an array of abci.ValidatorUpdate objects. +// TODO: explore moving this to proto/cosmos/base to separate modules from tendermint dependence +message ValidatorUpdates { + repeated tendermint.abci.ValidatorUpdate updates = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} diff --git a/third_party/proto/cosmos/staking/v1beta1/tx.proto b/third_party/proto/cosmos/staking/v1beta1/tx.proto index b4866d36db..238645ba92 100644 --- a/third_party/proto/cosmos/staking/v1beta1/tx.proto +++ b/third_party/proto/cosmos/staking/v1beta1/tx.proto @@ -8,13 +8,15 @@ import "gogoproto/gogo.proto"; import "cosmos_proto/cosmos.proto"; import "cosmos/base/v1beta1/coin.proto"; import "cosmos/staking/v1beta1/staking.proto"; - import "cosmos/msg/v1/msg.proto"; +import "amino/amino.proto"; option go_package = "github.com/cosmos/cosmos-sdk/x/staking/types"; // Msg defines the staking Msg service. service Msg { + option (cosmos.msg.v1.service) = true; + // CreateValidator defines a method for creating a new validator. rpc CreateValidator(MsgCreateValidator) returns (MsgCreateValidatorResponse); @@ -38,30 +40,36 @@ service Msg { // // Since: cosmos-sdk 0.46 rpc CancelUnbondingDelegation(MsgCancelUnbondingDelegation) returns (MsgCancelUnbondingDelegationResponse); + + // UpdateParams defines an operation for updating the x/staking module + // parameters. + // Since: cosmos-sdk 0.47 + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); } // MsgCreateValidator defines a SDK message for creating a new validator. message MsgCreateValidator { - // NOTE(fdymylja): this is a particular case in which - // if validator_address == delegator_address then only one - // is expected to sign, otherwise both are. - option (cosmos.msg.v1.signer) = "delegator_address"; option (cosmos.msg.v1.signer) = "validator_address"; + option (amino.name) = "cosmos-sdk/MsgCreateValidator"; option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; - Description description = 1 [(gogoproto.nullable) = false]; - CommissionRates commission = 2 [(gogoproto.nullable) = false]; + Description description = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + CommissionRates commission = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; string min_self_delegation = 3 [ (cosmos_proto.scalar) = "cosmos.Int", - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", - (gogoproto.nullable) = false + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true ]; - string delegator_address = 4 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - string validator_address = 5 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + // Deprecated: Use of Delegator Address in MsgCreateValidator is deprecated. + // The validator address bytes and delegator address bytes refer to the same account while creating validator (defer + // only in bech32 notation). + string delegator_address = 4 [(cosmos_proto.scalar) = "cosmos.AddressString", deprecated = true]; + string validator_address = 5 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; google.protobuf.Any pubkey = 6 [(cosmos_proto.accepts_interface) = "cosmos.crypto.PubKey"]; - cosmos.base.v1beta1.Coin value = 7 [(gogoproto.nullable) = false]; + cosmos.base.v1beta1.Coin value = 7 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // MsgCreateValidatorResponse defines the Msg/CreateValidator response type. @@ -70,21 +78,22 @@ message MsgCreateValidatorResponse {} // MsgEditValidator defines a SDK message for editing an existing validator. message MsgEditValidator { option (cosmos.msg.v1.signer) = "validator_address"; + option (amino.name) = "cosmos-sdk/MsgEditValidator"; option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; - Description description = 1 [(gogoproto.nullable) = false]; - string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + Description description = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; // We pass a reference to the new commission rate and min self delegation as // it's not mandatory to update. If not updated, the deserialized rate will be // zero with no way to distinguish if an update was intended. // REF: #2373 string commission_rate = 3 - [(cosmos_proto.scalar) = "cosmos.Dec", (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec"]; + [(cosmos_proto.scalar) = "cosmos.Dec", (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec"]; string min_self_delegation = 4 - [(cosmos_proto.scalar) = "cosmos.Int", (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int"]; + [(cosmos_proto.scalar) = "cosmos.Int", (gogoproto.customtype) = "cosmossdk.io/math.Int"]; } // MsgEditValidatorResponse defines the Msg/EditValidator response type. @@ -94,12 +103,14 @@ message MsgEditValidatorResponse {} // from a delegator to a validator. message MsgDelegate { option (cosmos.msg.v1.signer) = "delegator_address"; + option (amino.name) = "cosmos-sdk/MsgDelegate"; - option (gogoproto.equal) = false; + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; string delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - cosmos.base.v1beta1.Coin amount = 3 [(gogoproto.nullable) = false]; + string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + cosmos.base.v1beta1.Coin amount = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // MsgDelegateResponse defines the Msg/Delegate response type. @@ -109,48 +120,61 @@ message MsgDelegateResponse {} // of coins from a delegator and source validator to a destination validator. message MsgBeginRedelegate { option (cosmos.msg.v1.signer) = "delegator_address"; + option (amino.name) = "cosmos-sdk/MsgBeginRedelegate"; - option (gogoproto.equal) = false; + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; string delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - string validator_src_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - string validator_dst_address = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - cosmos.base.v1beta1.Coin amount = 4 [(gogoproto.nullable) = false]; + string validator_src_address = 2 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + string validator_dst_address = 3 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + cosmos.base.v1beta1.Coin amount = 4 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // MsgBeginRedelegateResponse defines the Msg/BeginRedelegate response type. message MsgBeginRedelegateResponse { - google.protobuf.Timestamp completion_time = 1 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + google.protobuf.Timestamp completion_time = 1 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.stdtime) = true]; } // MsgUndelegate defines a SDK message for performing an undelegation from a // delegate and a validator. message MsgUndelegate { option (cosmos.msg.v1.signer) = "delegator_address"; + option (amino.name) = "cosmos-sdk/MsgUndelegate"; - option (gogoproto.equal) = false; + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; string delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - cosmos.base.v1beta1.Coin amount = 3 [(gogoproto.nullable) = false]; + string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + cosmos.base.v1beta1.Coin amount = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // MsgUndelegateResponse defines the Msg/Undelegate response type. message MsgUndelegateResponse { - google.protobuf.Timestamp completion_time = 1 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + google.protobuf.Timestamp completion_time = 1 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.stdtime) = true]; + + // amount returns the amount of undelegated coins + // + // Since: cosmos-sdk 0.50 + cosmos.base.v1beta1.Coin amount = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // MsgCancelUnbondingDelegation defines the SDK message for performing a cancel unbonding delegation for delegator // // Since: cosmos-sdk 0.46 message MsgCancelUnbondingDelegation { - option (cosmos.msg.v1.signer) = "delegator_address"; - option (gogoproto.equal) = false; + option (cosmos.msg.v1.signer) = "delegator_address"; + option (amino.name) = "cosmos-sdk/MsgCancelUnbondingDelegation"; + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; string delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; // amount is always less than or equal to unbonding delegation entry balance - cosmos.base.v1beta1.Coin amount = 3 [(gogoproto.nullable) = false]; + cosmos.base.v1beta1.Coin amount = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // creation_height is the height which the unbonding took place. int64 creation_height = 4; } @@ -159,3 +183,24 @@ message MsgCancelUnbondingDelegation { // // Since: cosmos-sdk 0.46 message MsgCancelUnbondingDelegationResponse {} + +// MsgUpdateParams is the Msg/UpdateParams request type. +// +// Since: cosmos-sdk 0.47 +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "cosmos-sdk/x/staking/MsgUpdateParams"; + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + // params defines the x/staking parameters to update. + // + // NOTE: All parameters must be supplied. + Params params = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +}; + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +// +// Since: cosmos-sdk 0.47 +message MsgUpdateParamsResponse {}; diff --git a/third_party/proto/cosmos/base/kv/v1beta1/kv.proto b/third_party/proto/cosmos/store/internal/kv/v1beta1/kv.proto similarity index 58% rename from third_party/proto/cosmos/base/kv/v1beta1/kv.proto rename to third_party/proto/cosmos/store/internal/kv/v1beta1/kv.proto index 4e9b8d2850..4243444acc 100644 --- a/third_party/proto/cosmos/base/kv/v1beta1/kv.proto +++ b/third_party/proto/cosmos/store/internal/kv/v1beta1/kv.proto @@ -1,9 +1,11 @@ syntax = "proto3"; -package cosmos.base.kv.v1beta1; +package cosmos.store.internal.kv.v1beta1; import "gogoproto/gogo.proto"; -option go_package = "github.com/cosmos/cosmos-sdk/types/kv"; +option go_package = "cosmossdk.io/store/internal/kv"; + +// This is duplicated from the base kv directory to avoid a circular dependency with the cosmos-sdk // Pairs defines a repeated slice of Pair objects. message Pairs { diff --git a/third_party/proto/cosmos/base/snapshots/v1beta1/snapshot.proto b/third_party/proto/cosmos/store/snapshots/v1/snapshot.proto similarity index 75% rename from third_party/proto/cosmos/base/snapshots/v1beta1/snapshot.proto rename to third_party/proto/cosmos/store/snapshots/v1/snapshot.proto index 5dba369fd4..af49bdaa53 100644 --- a/third_party/proto/cosmos/base/snapshots/v1beta1/snapshot.proto +++ b/third_party/proto/cosmos/store/snapshots/v1/snapshot.proto @@ -1,9 +1,9 @@ syntax = "proto3"; -package cosmos.base.snapshots.v1beta1; +package cosmos.store.snapshots.v1; import "gogoproto/gogo.proto"; -option go_package = "github.com/cosmos/cosmos-sdk/snapshots/types"; +option go_package = "cosmossdk.io/store/snapshots/types"; // Snapshot contains Tendermint state sync snapshot info. message Snapshot { @@ -29,8 +29,6 @@ message SnapshotItem { SnapshotIAVLItem iavl = 2 [(gogoproto.customname) = "IAVL"]; SnapshotExtensionMeta extension = 3; SnapshotExtensionPayload extension_payload = 4; - SnapshotKVItem kv = 5 [(gogoproto.customname) = "KV"]; - SnapshotSchema schema = 6; } } @@ -66,19 +64,4 @@ message SnapshotExtensionMeta { // Since: cosmos-sdk 0.46 message SnapshotExtensionPayload { bytes payload = 1; -} - -// SnapshotKVItem is an exported Key/Value Pair -// -// Since: cosmos-sdk 0.46 -message SnapshotKVItem { - bytes key = 1; - bytes value = 2; -} - -// SnapshotSchema is an exported schema of smt store -// -// Since: cosmos-sdk 0.46 -message SnapshotSchema { - repeated bytes keys = 1; -} +} \ No newline at end of file diff --git a/third_party/proto/cosmos/store/streaming/abci/grpc.proto b/third_party/proto/cosmos/store/streaming/abci/grpc.proto new file mode 100644 index 0000000000..25366cdbdc --- /dev/null +++ b/third_party/proto/cosmos/store/streaming/abci/grpc.proto @@ -0,0 +1,36 @@ +syntax = "proto3"; + +package cosmos.store.streaming.abci; + +import "tendermint/abci/types.proto"; +import "cosmos/store/v1beta1/listening.proto"; + +option go_package = "cosmossdk.io/store/streaming/abci"; + +// ListenEndBlockRequest is the request type for the ListenEndBlock RPC method +message ListenFinalizeBlockRequest { + tendermint.abci.RequestFinalizeBlock req = 1; + tendermint.abci.ResponseFinalizeBlock res = 2; +} + +// ListenEndBlockResponse is the response type for the ListenEndBlock RPC method +message ListenFinalizeBlockResponse {} + +// ListenCommitRequest is the request type for the ListenCommit RPC method +message ListenCommitRequest { + // explicitly pass in block height as ResponseCommit does not contain this info + int64 block_height = 1; + tendermint.abci.ResponseCommit res = 2; + repeated cosmos.store.v1beta1.StoreKVPair change_set = 3; +} + +// ListenCommitResponse is the response type for the ListenCommit RPC method +message ListenCommitResponse {} + +// ABCIListenerService is the service for the BaseApp ABCIListener interface +service ABCIListenerService { + // ListenFinalizeBlock is the corresponding endpoint for ABCIListener.ListenEndBlock + rpc ListenFinalizeBlock(ListenFinalizeBlockRequest) returns (ListenFinalizeBlockResponse); + // ListenCommit is the corresponding endpoint for ABCIListener.ListenCommit + rpc ListenCommit(ListenCommitRequest) returns (ListenCommitResponse); +} diff --git a/third_party/proto/cosmos/base/store/v1beta1/commit_info.proto b/third_party/proto/cosmos/store/v1beta1/commit_info.proto similarity index 56% rename from third_party/proto/cosmos/base/store/v1beta1/commit_info.proto rename to third_party/proto/cosmos/store/v1beta1/commit_info.proto index 98a33d30e7..37459a0d05 100644 --- a/third_party/proto/cosmos/base/store/v1beta1/commit_info.proto +++ b/third_party/proto/cosmos/store/v1beta1/commit_info.proto @@ -1,15 +1,17 @@ syntax = "proto3"; -package cosmos.base.store.v1beta1; +package cosmos.store.v1beta1; import "gogoproto/gogo.proto"; +import "google/protobuf/timestamp.proto"; -option go_package = "github.com/cosmos/cosmos-sdk/store/types"; +option go_package = "cosmossdk.io/store/types"; // CommitInfo defines commit information used by the multi-store when committing // a version/height. message CommitInfo { - int64 version = 1; - repeated StoreInfo store_infos = 2 [(gogoproto.nullable) = false]; + int64 version = 1; + repeated StoreInfo store_infos = 2 [(gogoproto.nullable) = false]; + google.protobuf.Timestamp timestamp = 3 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; } // StoreInfo defines store-specific commit information. It contains a reference @@ -19,7 +21,7 @@ message StoreInfo { CommitID commit_id = 2 [(gogoproto.nullable) = false]; } -// CommitID defines the committment information when a specific store is +// CommitID defines the commitment information when a specific store is // committed. message CommitID { option (gogoproto.goproto_stringer) = false; diff --git a/third_party/proto/cosmos/base/store/v1beta1/listening.proto b/third_party/proto/cosmos/store/v1beta1/listening.proto similarity index 52% rename from third_party/proto/cosmos/base/store/v1beta1/listening.proto rename to third_party/proto/cosmos/store/v1beta1/listening.proto index 753f7c1655..14bc2e7a78 100644 --- a/third_party/proto/cosmos/base/store/v1beta1/listening.proto +++ b/third_party/proto/cosmos/store/v1beta1/listening.proto @@ -1,9 +1,9 @@ syntax = "proto3"; -package cosmos.base.store.v1beta1; +package cosmos.store.v1beta1; import "tendermint/abci/types.proto"; -option go_package = "github.com/cosmos/cosmos-sdk/store/types"; +option go_package = "cosmossdk.io/store/types"; // StoreKVPair is a KVStore KVPair used for listening to state changes (Sets and Deletes) // It optionally includes the StoreKey for the originating KVStore and a Boolean flag to distinguish between Sets and @@ -20,15 +20,9 @@ message StoreKVPair { // BlockMetadata contains all the abci event data of a block // the file streamer dump them into files together with the state changes. message BlockMetadata { - // DeliverTx encapulate deliver tx request and response. - message DeliverTx { - tendermint.abci.RequestDeliverTx request = 1; - tendermint.abci.ResponseDeliverTx response = 2; - } - tendermint.abci.RequestBeginBlock request_begin_block = 1; - tendermint.abci.ResponseBeginBlock response_begin_block = 2; - repeated DeliverTx deliver_txs = 3; - tendermint.abci.RequestEndBlock request_end_block = 4; - tendermint.abci.ResponseEndBlock response_end_block = 5; - tendermint.abci.ResponseCommit response_commit = 6; + tendermint.abci.ResponseCommit response_commit = 6; + tendermint.abci.RequestFinalizeBlock request_finalize_block = 7; + tendermint.abci.ResponseFinalizeBlock response_finalize_block = 8; // TODO: should we renumber this? + + reserved 1, 2, 3, 4, 5; // reserved for from previous use in comet <= 0.37 } diff --git a/third_party/proto/cosmos/streaming/abci/v1/grpc.proto b/third_party/proto/cosmos/streaming/abci/v1/grpc.proto deleted file mode 100644 index f7ce91bc72..0000000000 --- a/third_party/proto/cosmos/streaming/abci/v1/grpc.proto +++ /dev/null @@ -1,60 +0,0 @@ -syntax = "proto3"; - -package cosmos.streaming.abci.v1; - -import "tendermint/abci/types.proto"; -import "cosmos/base/store/v1beta1/listening.proto"; - -option go_package = "github.com/cosmos/cosmos-sdk/streaming/plugins/abci/v1"; - -// ListenBeginBlockRequest is the request type for the ListenBeginBlock RPC method -message ListenBeginBlockRequest { - tendermint.abci.RequestBeginBlock req = 1; - tendermint.abci.ResponseBeginBlock res = 2; -} - -// ListenBeginBlockResponse is the response type for the ListenBeginBlock RPC method -message ListenBeginBlockResponse {} - -// ListenEndBlockRequest is the request type for the ListenEndBlock RPC method -message ListenEndBlockRequest { - tendermint.abci.RequestEndBlock req = 1; - tendermint.abci.ResponseEndBlock res = 2; -} - -// ListenEndBlockResponse is the response type for the ListenEndBlock RPC method -message ListenEndBlockResponse {} - -// ListenDeliverTxRequest is the request type for the ListenDeliverTx RPC method -message ListenDeliverTxRequest { - // explicitly pass in block height as neither RequestDeliverTx or ResponseDeliverTx contain it - int64 block_height = 1; - tendermint.abci.RequestDeliverTx req = 2; - tendermint.abci.ResponseDeliverTx res = 3; -} - -// ListenDeliverTxResponse is the response type for the ListenDeliverTx RPC method -message ListenDeliverTxResponse {} - -// ListenCommitRequest is the request type for the ListenCommit RPC method -message ListenCommitRequest { - // explicitly pass in block height as ResponseCommit does not contain this info - int64 block_height = 1; - tendermint.abci.ResponseCommit res = 2; - repeated cosmos.base.store.v1beta1.StoreKVPair change_set = 3; -} - -// ListenCommitResponse is the response type for the ListenCommit RPC method -message ListenCommitResponse {} - -// ABCIListenerService is the service for the BaseApp ABCIListener interface -service ABCIListenerService { - // ListenBeginBlock is the corresponding endpoint for ABCIListener.ListenBeginBlock - rpc ListenBeginBlock(ListenBeginBlockRequest) returns (ListenBeginBlockResponse); - // ListenEndBlock is the corresponding endpoint for ABCIListener.ListenEndBlock - rpc ListenEndBlock(ListenEndBlockRequest) returns (ListenEndBlockResponse); - // ListenDeliverTx is the corresponding endpoint for ABCIListener.ListenDeliverTx - rpc ListenDeliverTx(ListenDeliverTxRequest) returns (ListenDeliverTxResponse); - // ListenCommit is the corresponding endpoint for ABCIListener.ListenCommit - rpc ListenCommit(ListenCommitRequest) returns (ListenCommitResponse); -} diff --git a/third_party/proto/cosmos/tx/signing/v1beta1/signing.proto b/third_party/proto/cosmos/tx/signing/v1beta1/signing.proto index 12d5868ba8..584eff4e41 100644 --- a/third_party/proto/cosmos/tx/signing/v1beta1/signing.proto +++ b/third_party/proto/cosmos/tx/signing/v1beta1/signing.proto @@ -25,13 +25,14 @@ enum SignMode { // 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. It is currently not supported. + // from SIGN_MODE_DIRECT. + // + // Since: cosmos-sdk 0.50 SIGN_MODE_TEXTUAL = 2; // SIGN_MODE_DIRECT_AUX specifies a signing mode which uses // SignDocDirectAux. As opposed to SIGN_MODE_DIRECT, this sign mode does not - // require signers signing over other signers' `signer_info`. It also allows - // for adding Tips in transactions. + // require signers signing over other signers' `signer_info`. // // Since: cosmos-sdk 0.46 SIGN_MODE_DIRECT_AUX = 3; diff --git a/third_party/proto/cosmos/tx/v1beta1/service.proto b/third_party/proto/cosmos/tx/v1beta1/service.proto index 5b6016f015..7e19a18652 100644 --- a/third_party/proto/cosmos/tx/v1beta1/service.proto +++ b/third_party/proto/cosmos/tx/v1beta1/service.proto @@ -40,28 +40,77 @@ service Service { rpc GetBlockWithTxs(GetBlockWithTxsRequest) returns (GetBlockWithTxsResponse) { option (google.api.http).get = "/cosmos/tx/v1beta1/txs/block/{height}"; } + // TxDecode decodes the transaction. + // + // Since: cosmos-sdk 0.47 + rpc TxDecode(TxDecodeRequest) returns (TxDecodeResponse) { + option (google.api.http) = { + post: "/cosmos/tx/v1beta1/decode" + body: "*" + }; + } + // TxEncode encodes the transaction. + // + // Since: cosmos-sdk 0.47 + rpc TxEncode(TxEncodeRequest) returns (TxEncodeResponse) { + option (google.api.http) = { + post: "/cosmos/tx/v1beta1/encode" + body: "*" + }; + } + // TxEncodeAmino encodes an Amino transaction from JSON to encoded bytes. + // + // Since: cosmos-sdk 0.47 + rpc TxEncodeAmino(TxEncodeAminoRequest) returns (TxEncodeAminoResponse) { + option (google.api.http) = { + post: "/cosmos/tx/v1beta1/encode/amino" + body: "*" + }; + } + // TxDecodeAmino decodes an Amino transaction from encoded bytes to JSON. + // + // Since: cosmos-sdk 0.47 + rpc TxDecodeAmino(TxDecodeAminoRequest) returns (TxDecodeAminoResponse) { + option (google.api.http) = { + post: "/cosmos/tx/v1beta1/decode/amino" + body: "*" + }; + } } // GetTxsEventRequest is the request type for the Service.TxsByEvents // RPC method. message GetTxsEventRequest { // events is the list of transaction event type. - repeated string events = 1; + // Deprecated post v0.47.x: use query instead, which should contain a valid + // events query. + repeated string events = 1 [deprecated = true]; + // pagination defines a pagination for the request. // Deprecated post v0.46.x: use page and limit instead. cosmos.base.query.v1beta1.PageRequest pagination = 2 [deprecated = true]; OrderBy order_by = 3; - // page is the page number to query, starts at 1. If not provided, will default to first page. + + // page is the page number to query, starts at 1. If not provided, will + // default to first page. uint64 page = 4; + // 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. uint64 limit = 5; + + // query defines the transaction event query that is proxied to Tendermint's + // TxSearch RPC method. The query must be valid. + // + // Since cosmos-sdk 0.50 + string query = 6; } // OrderBy defines the sorting order enum OrderBy { - // ORDER_BY_UNSPECIFIED specifies an unknown sorting order. OrderBy defaults to ASC in this case. + // ORDER_BY_UNSPECIFIED specifies an unknown sorting order. OrderBy defaults + // to ASC in this case. ORDER_BY_UNSPECIFIED = 0; // ORDER_BY_ASC defines ascending order ORDER_BY_ASC = 1; @@ -91,18 +140,19 @@ message BroadcastTxRequest { BroadcastMode mode = 2; } -// BroadcastMode specifies the broadcast mode for the TxService.Broadcast RPC method. +// BroadcastMode specifies the broadcast mode for the TxService.Broadcast RPC +// method. enum BroadcastMode { // zero-value for mode ordering BROADCAST_MODE_UNSPECIFIED = 0; - // BROADCAST_MODE_BLOCK defines a tx broadcasting mode where the client waits for - // the tx to be committed in a block. - BROADCAST_MODE_BLOCK = 1; - // BROADCAST_MODE_SYNC defines a tx broadcasting mode where the client waits for - // a CheckTx execution response only. + // DEPRECATED: use BROADCAST_MODE_SYNC instead, + // BROADCAST_MODE_BLOCK is not supported by the SDK from v0.47.x onwards. + BROADCAST_MODE_BLOCK = 1 [deprecated = true]; + // BROADCAST_MODE_SYNC defines a tx broadcasting mode where the client waits + // for a CheckTx execution response only. BROADCAST_MODE_SYNC = 2; - // BROADCAST_MODE_ASYNC defines a tx broadcasting mode where the client returns - // immediately. + // BROADCAST_MODE_ASYNC defines a tx broadcasting mode where the client + // returns immediately. BROADCAST_MODE_ASYNC = 3; } @@ -160,7 +210,8 @@ message GetBlockWithTxsRequest { cosmos.base.query.v1beta1.PageRequest pagination = 2; } -// GetBlockWithTxsResponse is the response type for the Service.GetBlockWithTxs method. +// GetBlockWithTxsResponse is the response type for the Service.GetBlockWithTxs +// method. // // Since: cosmos-sdk 0.45.2 message GetBlockWithTxsResponse { @@ -171,3 +222,71 @@ message GetBlockWithTxsResponse { // pagination defines a pagination for the response. cosmos.base.query.v1beta1.PageResponse pagination = 4; } + +// TxDecodeRequest is the request type for the Service.TxDecode +// RPC method. +// +// Since: cosmos-sdk 0.47 +message TxDecodeRequest { + // tx_bytes is the raw transaction. + bytes tx_bytes = 1; +} + +// TxDecodeResponse is the response type for the +// Service.TxDecode method. +// +// Since: cosmos-sdk 0.47 +message TxDecodeResponse { + // tx is the decoded transaction. + cosmos.tx.v1beta1.Tx tx = 1; +} + +// TxEncodeRequest is the request type for the Service.TxEncode +// RPC method. +// +// Since: cosmos-sdk 0.47 +message TxEncodeRequest { + // tx is the transaction to encode. + cosmos.tx.v1beta1.Tx tx = 1; +} + +// TxEncodeResponse is the response type for the +// Service.TxEncode method. +// +// Since: cosmos-sdk 0.47 +message TxEncodeResponse { + // tx_bytes is the encoded transaction bytes. + bytes tx_bytes = 1; +} + +// TxEncodeAminoRequest is the request type for the Service.TxEncodeAmino +// RPC method. +// +// Since: cosmos-sdk 0.47 +message TxEncodeAminoRequest { + string amino_json = 1; +} + +// TxEncodeAminoResponse is the response type for the Service.TxEncodeAmino +// RPC method. +// +// Since: cosmos-sdk 0.47 +message TxEncodeAminoResponse { + bytes amino_binary = 1; +} + +// TxDecodeAminoRequest is the request type for the Service.TxDecodeAmino +// RPC method. +// +// Since: cosmos-sdk 0.47 +message TxDecodeAminoRequest { + bytes amino_binary = 1; +} + +// TxDecodeAminoResponse is the response type for the Service.TxDecodeAmino +// RPC method. +// +// Since: cosmos-sdk 0.47 +message TxDecodeAminoResponse { + string amino_json = 1; +} diff --git a/third_party/proto/cosmos/tx/v1beta1/tx.proto b/third_party/proto/cosmos/tx/v1beta1/tx.proto index a71a3e115d..cfaac70449 100644 --- a/third_party/proto/cosmos/tx/v1beta1/tx.proto +++ b/third_party/proto/cosmos/tx/v1beta1/tx.proto @@ -1,6 +1,7 @@ syntax = "proto3"; package cosmos.tx.v1beta1; +import "amino/amino.proto"; import "gogoproto/gogo.proto"; import "cosmos/crypto/multisig/v1beta1/multisig.proto"; import "cosmos/base/v1beta1/coin.proto"; @@ -87,13 +88,8 @@ message SignDocDirectAux { // sequence is the sequence number of the signing account. uint64 sequence = 5; - // Tip is the optional tip used for transactions fees paid in another denom. - // It should be left empty if the signer is not the tipper for this - // transaction. - // - // This field is ignored if the chain didn't enable tips, i.e. didn't add the - // `TipDecorator` in its posthandler. - Tip tip = 6; + // tips have been depreacted and should not be used + Tip tip = 6 [deprecated = true]; } // TxBody is the body of a transaction that all signers sign over. @@ -141,14 +137,13 @@ message AuthInfo { // based on the cost of evaluating the body and doing signature verification // of the signers. This can be estimated via simulation. Fee fee = 2; - // Tip is the optional tip used for transactions fees paid in another denom. // // This field is ignored if the chain didn't enable tips, i.e. didn't add the // `TipDecorator` in its posthandler. // // Since: cosmos-sdk 0.46 - Tip tip = 3; + Tip tip = 3 [deprecated = true]; } // SignerInfo describes the public key and signing mode of a single top-level @@ -205,8 +200,12 @@ message ModeInfo { // which must be above some miminum to be accepted into the mempool. message Fee { // amount is the amount of coins to be paid as a fee - repeated cosmos.base.v1beta1.Coin amount = 1 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; + repeated cosmos.base.v1beta1.Coin amount = 1 [ + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins" + ]; // gas_limit is the maximum gas that can be used in transaction processing // before an out of gas error occurs @@ -227,9 +226,14 @@ message Fee { // // Since: cosmos-sdk 0.46 message Tip { + option deprecated = true; // amount is the amount of the tip - repeated cosmos.base.v1beta1.Coin amount = 1 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; + repeated cosmos.base.v1beta1.Coin amount = 1 [ + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins" + ]; // tipper is the address of the account paying for the tip string tipper = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; } diff --git a/third_party/proto/cosmos/upgrade/module/v1/module.proto b/third_party/proto/cosmos/upgrade/module/v1/module.proto new file mode 100644 index 0000000000..6493f5c7ff --- /dev/null +++ b/third_party/proto/cosmos/upgrade/module/v1/module.proto @@ -0,0 +1,15 @@ +syntax = "proto3"; + +package cosmos.upgrade.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object of the upgrade module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "cosmossdk.io/x/upgrade" + }; + + // authority defines the custom module authority. If not set, defaults to the governance module. + string authority = 1; +} \ No newline at end of file diff --git a/third_party/proto/cosmos/upgrade/v1beta1/query.proto b/third_party/proto/cosmos/upgrade/v1beta1/query.proto index 870cf9ee6b..2b90a78888 100644 --- a/third_party/proto/cosmos/upgrade/v1beta1/query.proto +++ b/third_party/proto/cosmos/upgrade/v1beta1/query.proto @@ -4,7 +4,7 @@ package cosmos.upgrade.v1beta1; import "google/api/annotations.proto"; import "cosmos/upgrade/v1beta1/upgrade.proto"; -option go_package = "github.com/cosmos/cosmos-sdk/x/upgrade/types"; +option go_package = "cosmossdk.io/x/upgrade/types"; // Query defines the gRPC upgrade querier service. service Query { diff --git a/third_party/proto/cosmos/upgrade/v1beta1/tx.proto b/third_party/proto/cosmos/upgrade/v1beta1/tx.proto index 7a2931da21..4a6c9ee11f 100644 --- a/third_party/proto/cosmos/upgrade/v1beta1/tx.proto +++ b/third_party/proto/cosmos/upgrade/v1beta1/tx.proto @@ -6,17 +6,21 @@ import "gogoproto/gogo.proto"; import "cosmos_proto/cosmos.proto"; import "cosmos/upgrade/v1beta1/upgrade.proto"; import "cosmos/msg/v1/msg.proto"; +import "amino/amino.proto"; -option go_package = "github.com/cosmos/cosmos-sdk/x/upgrade/types"; +option go_package = "cosmossdk.io/x/upgrade/types"; // Msg defines the upgrade Msg service. service Msg { + option (cosmos.msg.v1.service) = true; + // SoftwareUpgrade is a governance operation for initiating a software upgrade. // // Since: cosmos-sdk 0.46 rpc SoftwareUpgrade(MsgSoftwareUpgrade) returns (MsgSoftwareUpgradeResponse); + // CancelUpgrade is a governance operation for cancelling a previously - // approvid software upgrade. + // approved software upgrade. // // Since: cosmos-sdk 0.46 rpc CancelUpgrade(MsgCancelUpgrade) returns (MsgCancelUpgradeResponse); @@ -27,12 +31,13 @@ service Msg { // Since: cosmos-sdk 0.46 message MsgSoftwareUpgrade { option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "cosmos-sdk/MsgSoftwareUpgrade"; - // authority is the address of the governance account. + // authority is the address that controls the module (defaults to x/gov unless overwritten). string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; // plan is the upgrade plan. - Plan plan = 2 [(gogoproto.nullable) = false]; + Plan plan = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // MsgSoftwareUpgradeResponse is the Msg/SoftwareUpgrade response type. @@ -45,8 +50,9 @@ message MsgSoftwareUpgradeResponse {} // Since: cosmos-sdk 0.46 message MsgCancelUpgrade { option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "cosmos-sdk/MsgCancelUpgrade"; - // authority is the address of the governance account. + // authority is the address that controls the module (defaults to x/gov unless overwritten). string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; } diff --git a/third_party/proto/cosmos/upgrade/v1beta1/upgrade.proto b/third_party/proto/cosmos/upgrade/v1beta1/upgrade.proto index 4d19a29998..5dfb289db5 100644 --- a/third_party/proto/cosmos/upgrade/v1beta1/upgrade.proto +++ b/third_party/proto/cosmos/upgrade/v1beta1/upgrade.proto @@ -5,14 +5,15 @@ import "google/protobuf/any.proto"; import "gogoproto/gogo.proto"; import "google/protobuf/timestamp.proto"; import "cosmos_proto/cosmos.proto"; +import "amino/amino.proto"; -option go_package = "github.com/cosmos/cosmos-sdk/x/upgrade/types"; +option go_package = "cosmossdk.io/x/upgrade/types"; option (gogoproto.goproto_getters_all) = false; // Plan specifies information about a planned upgrade and when it should occur. message Plan { - option (gogoproto.equal) = true; - option (gogoproto.goproto_stringer) = false; + option (amino.name) = "cosmos-sdk/Plan"; + option (gogoproto.equal) = true; // 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 @@ -26,10 +27,10 @@ message Plan { // Deprecated: Time based upgrades have been deprecated. Time based upgrade logic // has been removed from the SDK. // If this field is not empty, an error will be thrown. - google.protobuf.Timestamp time = 2 [deprecated = true, (gogoproto.stdtime) = true, (gogoproto.nullable) = false]; + google.protobuf.Timestamp time = 2 + [deprecated = true, (gogoproto.stdtime) = true, (gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // The height at which the upgrade must be performed. - // Only used if Time is not set. int64 height = 3; // Any application specific upgrade info to be included on-chain @@ -49,12 +50,17 @@ message Plan { message SoftwareUpgradeProposal { option deprecated = true; option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; + option (amino.name) = "cosmos-sdk/SoftwareUpgradeProposal"; option (gogoproto.equal) = true; - option (gogoproto.goproto_stringer) = false; - string title = 1; + // title of the proposal + string title = 1; + + // description of the proposal string description = 2; - Plan plan = 3 [(gogoproto.nullable) = false]; + + // plan of the proposal + Plan plan = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // CancelSoftwareUpgradeProposal is a gov Content type for cancelling a software @@ -64,10 +70,13 @@ message SoftwareUpgradeProposal { message CancelSoftwareUpgradeProposal { option deprecated = true; option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; + option (amino.name) = "cosmos-sdk/CancelSoftwareUpgradeProposal"; option (gogoproto.equal) = true; - option (gogoproto.goproto_stringer) = false; - string title = 1; + // title of the proposal + string title = 1; + + // description of the proposal string description = 2; } @@ -75,8 +84,7 @@ message CancelSoftwareUpgradeProposal { // // Since: cosmos-sdk 0.43 message ModuleVersion { - option (gogoproto.equal) = true; - option (gogoproto.goproto_stringer) = true; + option (gogoproto.equal) = true; // name of the app module string name = 1; diff --git a/third_party/proto/cosmos/vesting/module/v1/module.proto b/third_party/proto/cosmos/vesting/module/v1/module.proto new file mode 100644 index 0000000000..88bb89c187 --- /dev/null +++ b/third_party/proto/cosmos/vesting/module/v1/module.proto @@ -0,0 +1,12 @@ +syntax = "proto3"; + +package cosmos.vesting.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object of the vesting module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "github.com/cosmos/cosmos-sdk/x/auth/vesting" + }; +} \ No newline at end of file diff --git a/third_party/proto/cosmos/vesting/v1beta1/tx.proto b/third_party/proto/cosmos/vesting/v1beta1/tx.proto index 732fe12536..67008724c4 100644 --- a/third_party/proto/cosmos/vesting/v1beta1/tx.proto +++ b/third_party/proto/cosmos/vesting/v1beta1/tx.proto @@ -5,13 +5,15 @@ import "gogoproto/gogo.proto"; import "cosmos/base/v1beta1/coin.proto"; import "cosmos_proto/cosmos.proto"; import "cosmos/vesting/v1beta1/vesting.proto"; - import "cosmos/msg/v1/msg.proto"; +import "amino/amino.proto"; option go_package = "github.com/cosmos/cosmos-sdk/x/auth/vesting/types"; // Msg defines the bank Msg service. service Msg { + option (cosmos.msg.v1.service) = true; + // CreateVestingAccount defines a method that enables creating a vesting // account. rpc CreateVestingAccount(MsgCreateVestingAccount) returns (MsgCreateVestingAccountResponse); @@ -31,13 +33,18 @@ service Msg { // account. message MsgCreateVestingAccount { option (cosmos.msg.v1.signer) = "from_address"; + option (amino.name) = "cosmos-sdk/MsgCreateVestingAccount"; option (gogoproto.equal) = true; string from_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; string to_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - repeated cosmos.base.v1beta1.Coin amount = 3 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; + repeated cosmos.base.v1beta1.Coin amount = 3 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; // end of vesting as unix time (in seconds). int64 end_time = 4; @@ -52,12 +59,18 @@ message MsgCreateVestingAccountResponse {} // // Since: cosmos-sdk 0.46 message MsgCreatePermanentLockedAccount { - option (gogoproto.equal) = true; + option (cosmos.msg.v1.signer) = "from_address"; + option (amino.name) = "cosmos-sdk/MsgCreatePermLockedAccount"; + option (gogoproto.equal) = true; string from_address = 1 [(gogoproto.moretags) = "yaml:\"from_address\""]; string to_address = 2 [(gogoproto.moretags) = "yaml:\"to_address\""]; - repeated cosmos.base.v1beta1.Coin amount = 3 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; + repeated cosmos.base.v1beta1.Coin amount = 3 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; } // MsgCreatePermanentLockedAccountResponse defines the Msg/CreatePermanentLockedAccount response type. @@ -71,14 +84,15 @@ message MsgCreatePermanentLockedAccountResponse {} // Since: cosmos-sdk 0.46 message MsgCreatePeriodicVestingAccount { option (cosmos.msg.v1.signer) = "from_address"; + option (amino.name) = "cosmos-sdk/MsgCreatePeriodVestAccount"; option (gogoproto.equal) = false; - string from_address = 1; - string to_address = 2; + string from_address = 1; + string to_address = 2; // start of vesting as unix time (in seconds). int64 start_time = 3; - repeated Period vesting_periods = 4 [(gogoproto.nullable) = false]; + repeated Period vesting_periods = 4 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // MsgCreateVestingAccountResponse defines the Msg/CreatePeriodicVestingAccount diff --git a/third_party/proto/cosmos/vesting/v1beta1/vesting.proto b/third_party/proto/cosmos/vesting/v1beta1/vesting.proto index d5c1c9e583..12e9cdd2e0 100644 --- a/third_party/proto/cosmos/vesting/v1beta1/vesting.proto +++ b/third_party/proto/cosmos/vesting/v1beta1/vesting.proto @@ -1,6 +1,7 @@ syntax = "proto3"; package cosmos.vesting.v1beta1; +import "amino/amino.proto"; import "gogoproto/gogo.proto"; import "cosmos/base/v1beta1/coin.proto"; import "cosmos/auth/v1beta1/auth.proto"; @@ -10,16 +11,28 @@ option go_package = "github.com/cosmos/cosmos-sdk/x/auth/vesting/types"; // BaseVestingAccount implements the VestingAccount interface. It contains all // the necessary fields needed for any vesting account implementation. message BaseVestingAccount { - option (gogoproto.goproto_getters) = false; - option (gogoproto.goproto_stringer) = false; + option (amino.name) = "cosmos-sdk/BaseVestingAccount"; + option (gogoproto.goproto_getters) = false; cosmos.auth.v1beta1.BaseAccount base_account = 1 [(gogoproto.embed) = true]; - repeated cosmos.base.v1beta1.Coin original_vesting = 2 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; - repeated cosmos.base.v1beta1.Coin delegated_free = 3 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; - repeated cosmos.base.v1beta1.Coin delegated_vesting = 4 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; + repeated cosmos.base.v1beta1.Coin original_vesting = 2 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + repeated cosmos.base.v1beta1.Coin delegated_free = 3 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + repeated cosmos.base.v1beta1.Coin delegated_vesting = 4 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; // Vesting end time, as unix timestamp (in seconds). int64 end_time = 5; } @@ -27,43 +40,45 @@ message BaseVestingAccount { // ContinuousVestingAccount implements the VestingAccount interface. It // continuously vests by unlocking coins linearly with respect to time. message ContinuousVestingAccount { - option (gogoproto.goproto_getters) = false; - option (gogoproto.goproto_stringer) = false; + option (amino.name) = "cosmos-sdk/ContinuousVestingAccount"; + option (gogoproto.goproto_getters) = false; BaseVestingAccount base_vesting_account = 1 [(gogoproto.embed) = true]; // Vesting start time, as unix timestamp (in seconds). - int64 start_time = 2; + int64 start_time = 2; } // DelayedVestingAccount implements the VestingAccount interface. It vests all // coins after a specific time, but non prior. In other words, it keeps them // locked until a specified time. message DelayedVestingAccount { - option (gogoproto.goproto_getters) = false; - option (gogoproto.goproto_stringer) = false; + option (amino.name) = "cosmos-sdk/DelayedVestingAccount"; + option (gogoproto.goproto_getters) = false; BaseVestingAccount base_vesting_account = 1 [(gogoproto.embed) = true]; } // Period defines a length of time and amount of coins that will vest. message Period { - option (gogoproto.goproto_stringer) = false; - // Period duration in seconds. int64 length = 1; - repeated cosmos.base.v1beta1.Coin amount = 2 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; + repeated cosmos.base.v1beta1.Coin amount = 2 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; } // PeriodicVestingAccount implements the VestingAccount interface. It // periodically vests by unlocking coins during each specified period. message PeriodicVestingAccount { - option (gogoproto.goproto_getters) = false; - option (gogoproto.goproto_stringer) = false; + option (amino.name) = "cosmos-sdk/PeriodicVestingAccount"; + option (gogoproto.goproto_getters) = false; BaseVestingAccount base_vesting_account = 1 [(gogoproto.embed) = true]; int64 start_time = 2; - repeated Period vesting_periods = 3 [(gogoproto.nullable) = false]; + repeated Period vesting_periods = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // PermanentLockedAccount implements the VestingAccount interface. It does @@ -72,8 +87,8 @@ message PeriodicVestingAccount { // // Since: cosmos-sdk 0.43 message PermanentLockedAccount { - option (gogoproto.goproto_getters) = false; - option (gogoproto.goproto_stringer) = false; + option (amino.name) = "cosmos-sdk/PermanentLockedAccount"; + option (gogoproto.goproto_getters) = false; BaseVestingAccount base_vesting_account = 1 [(gogoproto.embed) = true]; } diff --git a/third_party/proto/cosmwasm/wasm/v1/authz.proto b/third_party/proto/cosmwasm/wasm/v1/authz.proto index 96ecbfb38d..151ccc04c9 100644 --- a/third_party/proto/cosmwasm/wasm/v1/authz.proto +++ b/third_party/proto/cosmwasm/wasm/v1/authz.proto @@ -4,51 +4,86 @@ package cosmwasm.wasm.v1; import "gogoproto/gogo.proto"; import "cosmos_proto/cosmos.proto"; import "cosmos/base/v1beta1/coin.proto"; +import "cosmwasm/wasm/v1/types.proto"; import "google/protobuf/any.proto"; +import "amino/amino.proto"; option go_package = "github.com/CosmWasm/wasmd/x/wasm/types"; option (gogoproto.goproto_getters_all) = false; +// StoreCodeAuthorization defines authorization for wasm code upload. +// Since: wasmd 0.42 +message StoreCodeAuthorization { + option (amino.name) = "wasm/StoreCodeAuthorization"; + option (cosmos_proto.implements_interface) = + "cosmos.authz.v1beta1.Authorization"; + + // Grants for code upload + repeated CodeGrant grants = 1 + [ (gogoproto.nullable) = false, (amino.dont_omitempty) = true ]; +} + // ContractExecutionAuthorization defines authorization for wasm execute. // Since: wasmd 0.30 message ContractExecutionAuthorization { - option (cosmos_proto.implements_interface) = "Authorization"; + option (amino.name) = "wasm/ContractExecutionAuthorization"; + option (cosmos_proto.implements_interface) = + "cosmos.authz.v1beta1.Authorization"; // Grants for contract executions - repeated ContractGrant grants = 1 [ (gogoproto.nullable) = false ]; + repeated ContractGrant grants = 1 + [ (gogoproto.nullable) = false, (amino.dont_omitempty) = true ]; } // ContractMigrationAuthorization defines authorization for wasm contract // migration. Since: wasmd 0.30 message ContractMigrationAuthorization { - option (cosmos_proto.implements_interface) = "Authorization"; + option (amino.name) = "wasm/ContractMigrationAuthorization"; + option (cosmos_proto.implements_interface) = + "cosmos.authz.v1beta1.Authorization"; // Grants for contract migrations - repeated ContractGrant grants = 1 [ (gogoproto.nullable) = false ]; + repeated ContractGrant grants = 1 + [ (gogoproto.nullable) = false, (amino.dont_omitempty) = true ]; +} + +// CodeGrant a granted permission for a single code +message CodeGrant { + // CodeHash is the unique identifier created by wasmvm + // Wildcard "*" is used to specify any kind of grant. + bytes code_hash = 1; + + // InstantiatePermission is the superset access control to apply + // on contract creation. + // Optional + AccessConfig instantiate_permission = 2; } // ContractGrant a granted permission for a single contract // Since: wasmd 0.30 message ContractGrant { // Contract is the bech32 address of the smart contract - string contract = 1; + string contract = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; // Limit defines execution limits that are enforced and updated when the grant // is applied. When the limit lapsed the grant is removed. - google.protobuf.Any limit = 2 - [ (cosmos_proto.accepts_interface) = "ContractAuthzLimitX" ]; + google.protobuf.Any limit = 2 [ (cosmos_proto.accepts_interface) = + "cosmwasm.wasm.v1.ContractAuthzLimitX" ]; // Filter define more fine-grained control on the message payload passed // to the contract in the operation. When no filter applies on execution, the // operation is prohibited. google.protobuf.Any filter = 3 - [ (cosmos_proto.accepts_interface) = "ContractAuthzFilterX" ]; + [ (cosmos_proto.accepts_interface) = + "cosmwasm.wasm.v1.ContractAuthzFilterX" ]; } // MaxCallsLimit limited number of calls to the contract. No funds transferable. // Since: wasmd 0.30 message MaxCallsLimit { - option (cosmos_proto.implements_interface) = "ContractAuthzLimitX"; + option (amino.name) = "wasm/MaxCallsLimit"; + option (cosmos_proto.implements_interface) = + "cosmwasm.wasm.v1.ContractAuthzLimitX"; // Remaining number that is decremented on each execution uint64 remaining = 1; @@ -57,11 +92,14 @@ message MaxCallsLimit { // MaxFundsLimit defines the maximal amounts that can be sent to the contract. // Since: wasmd 0.30 message MaxFundsLimit { - option (cosmos_proto.implements_interface) = "ContractAuthzLimitX"; + option (amino.name) = "wasm/MaxFundsLimit"; + option (cosmos_proto.implements_interface) = + "cosmwasm.wasm.v1.ContractAuthzLimitX"; // Amounts is the maximal amount of tokens transferable to the contract. repeated cosmos.base.v1beta1.Coin amounts = 1 [ (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" ]; } @@ -70,13 +108,16 @@ message MaxFundsLimit { // the maximal number of calls executable. Both need to remain >0 to be valid. // Since: wasmd 0.30 message CombinedLimit { - option (cosmos_proto.implements_interface) = "ContractAuthzLimitX"; + option (amino.name) = "wasm/CombinedLimit"; + option (cosmos_proto.implements_interface) = + "cosmwasm.wasm.v1.ContractAuthzLimitX"; // Remaining number that is decremented on each execution uint64 calls_remaining = 1; // Amounts is the maximal amount of tokens transferable to the contract. repeated cosmos.base.v1beta1.Coin amounts = 2 [ (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" ]; } @@ -85,14 +126,18 @@ message CombinedLimit { // message. // Since: wasmd 0.30 message AllowAllMessagesFilter { - option (cosmos_proto.implements_interface) = "ContractAuthzFilterX"; + option (amino.name) = "wasm/AllowAllMessagesFilter"; + option (cosmos_proto.implements_interface) = + "cosmwasm.wasm.v1.ContractAuthzFilterX"; } // AcceptedMessageKeysFilter accept only the specific contract message keys in // the json object to be executed. // Since: wasmd 0.30 message AcceptedMessageKeysFilter { - option (cosmos_proto.implements_interface) = "ContractAuthzFilterX"; + option (amino.name) = "wasm/AcceptedMessageKeysFilter"; + option (cosmos_proto.implements_interface) = + "cosmwasm.wasm.v1.ContractAuthzFilterX"; // Messages is the list of unique keys repeated string keys = 1; @@ -102,7 +147,9 @@ message AcceptedMessageKeysFilter { // executed. // Since: wasmd 0.30 message AcceptedMessagesFilter { - option (cosmos_proto.implements_interface) = "ContractAuthzFilterX"; + option (amino.name) = "wasm/AcceptedMessagesFilter"; + option (cosmos_proto.implements_interface) = + "cosmwasm.wasm.v1.ContractAuthzFilterX"; // Messages is the list of raw contract messages repeated bytes messages = 1 [ (gogoproto.casttype) = "RawContractMessage" ]; diff --git a/third_party/proto/cosmwasm/wasm/v1/genesis.proto b/third_party/proto/cosmwasm/wasm/v1/genesis.proto index b7622c206a..9082c8b8b2 100644 --- a/third_party/proto/cosmwasm/wasm/v1/genesis.proto +++ b/third_party/proto/cosmwasm/wasm/v1/genesis.proto @@ -3,46 +3,37 @@ package cosmwasm.wasm.v1; import "gogoproto/gogo.proto"; import "cosmwasm/wasm/v1/types.proto"; -import "cosmwasm/wasm/v1/tx.proto"; +import "amino/amino.proto"; +import "cosmos_proto/cosmos.proto"; option go_package = "github.com/CosmWasm/wasmd/x/wasm/types"; // GenesisState - genesis state of x/wasm message GenesisState { - Params params = 1 [ (gogoproto.nullable) = false ]; - repeated Code codes = 2 - [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "codes,omitempty" ]; + Params params = 1 + [ (gogoproto.nullable) = false, (amino.dont_omitempty) = true ]; + repeated Code codes = 2 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (gogoproto.jsontag) = "codes,omitempty" + ]; repeated Contract contracts = 3 [ (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, (gogoproto.jsontag) = "contracts,omitempty" ]; repeated Sequence sequences = 4 [ (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, (gogoproto.jsontag) = "sequences,omitempty" ]; - repeated GenMsgs gen_msgs = 5 [ - (gogoproto.nullable) = false, - (gogoproto.jsontag) = "gen_msgs,omitempty" - ]; - - // GenMsgs define the messages that can be executed during genesis phase in - // order. The intention is to have more human readable data that is auditable. - message GenMsgs { - // sum is a single message - oneof sum { - MsgStoreCode store_code = 1; - MsgInstantiateContract instantiate_contract = 2; - MsgExecuteContract execute_contract = 3; - // MsgInstantiateContract2 intentionally not supported - // see https://github.com/CosmWasm/wasmd/issues/987 - } - } } // Code struct encompasses CodeInfo and CodeBytes message Code { uint64 code_id = 1 [ (gogoproto.customname) = "CodeID" ]; - CodeInfo code_info = 2 [ (gogoproto.nullable) = false ]; + CodeInfo code_info = 2 + [ (gogoproto.nullable) = false, (amino.dont_omitempty) = true ]; bytes code_bytes = 3; // Pinned to wasmvm cache bool pinned = 4; @@ -50,11 +41,14 @@ message Code { // Contract struct encompasses ContractAddress, ContractInfo, and ContractState message Contract { - string contract_address = 1; - ContractInfo contract_info = 2 [ (gogoproto.nullable) = false ]; - repeated Model contract_state = 3 [ (gogoproto.nullable) = false ]; + string contract_address = 1 + [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + ContractInfo contract_info = 2 + [ (gogoproto.nullable) = false, (amino.dont_omitempty) = true ]; + repeated Model contract_state = 3 + [ (gogoproto.nullable) = false, (amino.dont_omitempty) = true ]; repeated ContractCodeHistoryEntry contract_code_history = 4 - [ (gogoproto.nullable) = false ]; + [ (gogoproto.nullable) = false, (amino.dont_omitempty) = true ]; } // Sequence key and value of an id generation counter diff --git a/third_party/proto/cosmwasm/wasm/v1/ibc.proto b/third_party/proto/cosmwasm/wasm/v1/ibc.proto index d880a7078f..feaad2936d 100644 --- a/third_party/proto/cosmwasm/wasm/v1/ibc.proto +++ b/third_party/proto/cosmwasm/wasm/v1/ibc.proto @@ -25,6 +25,12 @@ message MsgIBCSend { bytes data = 6; } +// MsgIBCSendResponse +message MsgIBCSendResponse { + // Sequence number of the IBC packet sent + uint64 sequence = 1; +} + // MsgIBCCloseChannel port and channel need to be owned by the contract message MsgIBCCloseChannel { string channel = 2 [ (gogoproto.moretags) = "yaml:\"source_channel\"" ]; diff --git a/third_party/proto/cosmwasm/wasm/v1/proposal.proto b/third_party/proto/cosmwasm/wasm/v1/proposal.proto deleted file mode 100644 index b8a143b672..0000000000 --- a/third_party/proto/cosmwasm/wasm/v1/proposal.proto +++ /dev/null @@ -1,218 +0,0 @@ -syntax = "proto3"; -package cosmwasm.wasm.v1; - -import "gogoproto/gogo.proto"; -import "cosmos/base/v1beta1/coin.proto"; -import "cosmwasm/wasm/v1/types.proto"; - -option go_package = "github.com/CosmWasm/wasmd/x/wasm/types"; -option (gogoproto.goproto_stringer_all) = false; -option (gogoproto.goproto_getters_all) = false; -option (gogoproto.equal_all) = true; - -// StoreCodeProposal gov proposal content type to submit WASM code to the system -message StoreCodeProposal { - // Title is a short summary - string title = 1; - // Description is a human readable text - string description = 2; - // RunAs is the address that is passed to the contract's environment as sender - string run_as = 3; - // WASMByteCode can be raw or gzip compressed - bytes wasm_byte_code = 4 [ (gogoproto.customname) = "WASMByteCode" ]; - // Used in v1beta1 - reserved 5, 6; - // InstantiatePermission to apply on contract creation, optional - AccessConfig instantiate_permission = 7; - // UnpinCode code on upload, optional - bool unpin_code = 8; - // Source is the URL where the code is hosted - string source = 9; - // Builder is the docker image used to build the code deterministically, used - // for smart contract verification - string builder = 10; - // CodeHash is the SHA256 sum of the code outputted by builder, used for smart - // contract verification - bytes code_hash = 11; -} - -// InstantiateContractProposal gov proposal content type to instantiate a -// contract. -message InstantiateContractProposal { - // Title is a short summary - string title = 1; - // Description is a human readable text - string description = 2; - // RunAs is the address that is passed to the contract's environment as sender - string run_as = 3; - // Admin is an optional address that can execute migrations - string admin = 4; - // CodeID is the reference to the stored WASM code - uint64 code_id = 5 [ (gogoproto.customname) = "CodeID" ]; - // Label is optional metadata to be stored with a constract instance. - string label = 6; - // Msg json encoded message to be passed to the contract on instantiation - bytes msg = 7 [ (gogoproto.casttype) = "RawContractMessage" ]; - // Funds coins that are transferred to the contract on instantiation - repeated cosmos.base.v1beta1.Coin funds = 8 [ - (gogoproto.nullable) = false, - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; -} - -// MigrateContractProposal gov proposal content type to migrate a contract. -message MigrateContractProposal { - // Title is a short summary - string title = 1; - // Description is a human readable text - string description = 2; - // Note: skipping 3 as this was previously used for unneeded run_as - - // Contract is the address of the smart contract - string contract = 4; - // CodeID references the new WASM code - uint64 code_id = 5 [ (gogoproto.customname) = "CodeID" ]; - // Msg json encoded message to be passed to the contract on migration - bytes msg = 6 [ (gogoproto.casttype) = "RawContractMessage" ]; -} - -// SudoContractProposal gov proposal content type to call sudo on a contract. -message SudoContractProposal { - // Title is a short summary - string title = 1; - // Description is a human readable text - string description = 2; - // Contract is the address of the smart contract - string contract = 3; - // Msg json encoded message to be passed to the contract as sudo - bytes msg = 4 [ (gogoproto.casttype) = "RawContractMessage" ]; -} - -// ExecuteContractProposal gov proposal content type to call execute on a -// contract. -message ExecuteContractProposal { - // Title is a short summary - string title = 1; - // Description is a human readable text - string description = 2; - // RunAs is the address that is passed to the contract's environment as sender - string run_as = 3; - // Contract is the address of the smart contract - string contract = 4; - // Msg json encoded message to be passed to the contract as execute - bytes msg = 5 [ (gogoproto.casttype) = "RawContractMessage" ]; - // Funds coins that are transferred to the contract on instantiation - repeated cosmos.base.v1beta1.Coin funds = 6 [ - (gogoproto.nullable) = false, - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; -} - -// UpdateAdminProposal gov proposal content type to set an admin for a contract. -message UpdateAdminProposal { - // Title is a short summary - string title = 1; - // Description is a human readable text - string description = 2; - // NewAdmin address to be set - string new_admin = 3 [ (gogoproto.moretags) = "yaml:\"new_admin\"" ]; - // Contract is the address of the smart contract - string contract = 4; -} - -// ClearAdminProposal gov proposal content type to clear the admin of a -// contract. -message ClearAdminProposal { - // Title is a short summary - string title = 1; - // Description is a human readable text - string description = 2; - // Contract is the address of the smart contract - string contract = 3; -} - -// PinCodesProposal gov proposal content type to pin a set of code ids in the -// wasmvm cache. -message PinCodesProposal { - // Title is a short summary - string title = 1 [ (gogoproto.moretags) = "yaml:\"title\"" ]; - // Description is a human readable text - string description = 2 [ (gogoproto.moretags) = "yaml:\"description\"" ]; - // CodeIDs references the new WASM codes - repeated uint64 code_ids = 3 [ - (gogoproto.customname) = "CodeIDs", - (gogoproto.moretags) = "yaml:\"code_ids\"" - ]; -} - -// UnpinCodesProposal gov proposal content type to unpin a set of code ids in -// the wasmvm cache. -message UnpinCodesProposal { - // Title is a short summary - string title = 1 [ (gogoproto.moretags) = "yaml:\"title\"" ]; - // Description is a human readable text - string description = 2 [ (gogoproto.moretags) = "yaml:\"description\"" ]; - // CodeIDs references the WASM codes - repeated uint64 code_ids = 3 [ - (gogoproto.customname) = "CodeIDs", - (gogoproto.moretags) = "yaml:\"code_ids\"" - ]; -} - -// AccessConfigUpdate contains the code id and the access config to be -// applied. -message AccessConfigUpdate { - // CodeID is the reference to the stored WASM code to be updated - uint64 code_id = 1 [ (gogoproto.customname) = "CodeID" ]; - // InstantiatePermission to apply to the set of code ids - AccessConfig instantiate_permission = 2 [ (gogoproto.nullable) = false ]; -} - -// UpdateInstantiateConfigProposal gov proposal content type to update -// instantiate config to a set of code ids. -message UpdateInstantiateConfigProposal { - // Title is a short summary - string title = 1 [ (gogoproto.moretags) = "yaml:\"title\"" ]; - // Description is a human readable text - string description = 2 [ (gogoproto.moretags) = "yaml:\"description\"" ]; - // AccessConfigUpdate contains the list of code ids and the access config - // to be applied. - repeated AccessConfigUpdate access_config_updates = 3 - [ (gogoproto.nullable) = false ]; -} - -// StoreAndInstantiateContractProposal gov proposal content type to store -// and instantiate the contract. -message StoreAndInstantiateContractProposal { - // Title is a short summary - string title = 1; - // Description is a human readable text - string description = 2; - // RunAs is the address that is passed to the contract's environment as sender - string run_as = 3; - // WASMByteCode can be raw or gzip compressed - bytes wasm_byte_code = 4 [ (gogoproto.customname) = "WASMByteCode" ]; - // InstantiatePermission to apply on contract creation, optional - AccessConfig instantiate_permission = 5; - // UnpinCode code on upload, optional - bool unpin_code = 6; - // Admin is an optional address that can execute migrations - string admin = 7; - // Label is optional metadata to be stored with a constract instance. - string label = 8; - // Msg json encoded message to be passed to the contract on instantiation - bytes msg = 9 [ (gogoproto.casttype) = "RawContractMessage" ]; - // Funds coins that are transferred to the contract on instantiation - repeated cosmos.base.v1beta1.Coin funds = 10 [ - (gogoproto.nullable) = false, - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; - // Source is the URL where the code is hosted - string source = 11; - // Builder is the docker image used to build the code deterministically, used - // for smart contract verification - string builder = 12; - // CodeHash is the SHA256 sum of the code outputted by builder, used for smart - // contract verification - bytes code_hash = 13; -} diff --git a/third_party/proto/cosmwasm/wasm/v1/proposal_legacy.proto b/third_party/proto/cosmwasm/wasm/v1/proposal_legacy.proto new file mode 100644 index 0000000000..8bb872e2a8 --- /dev/null +++ b/third_party/proto/cosmwasm/wasm/v1/proposal_legacy.proto @@ -0,0 +1,333 @@ +syntax = "proto3"; +package cosmwasm.wasm.v1; + +import "gogoproto/gogo.proto"; +import "cosmos_proto/cosmos.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmwasm/wasm/v1/types.proto"; +import "amino/amino.proto"; + +option go_package = "github.com/CosmWasm/wasmd/x/wasm/types"; +option (gogoproto.goproto_stringer_all) = false; +option (gogoproto.goproto_getters_all) = false; +option (gogoproto.equal_all) = true; + +// Deprecated: Do not use. Since wasmd v0.40, there is no longer a need for +// an explicit StoreCodeProposal. To submit WASM code to the system, +// a simple MsgStoreCode can be invoked from the x/gov module via +// a v1 governance proposal. +message StoreCodeProposal { + option deprecated = true; + option (amino.name) = "wasm/StoreCodeProposal"; + option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; + + // Title is a short summary + string title = 1; + // Description is a human readable text + string description = 2; + // RunAs is the address that is passed to the contract's environment as sender + string run_as = 3 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // WASMByteCode can be raw or gzip compressed + bytes wasm_byte_code = 4 [ (gogoproto.customname) = "WASMByteCode" ]; + // Used in v1beta1 + reserved 5, 6; + // InstantiatePermission to apply on contract creation, optional + AccessConfig instantiate_permission = 7; + // UnpinCode code on upload, optional + bool unpin_code = 8; + // Source is the URL where the code is hosted + string source = 9; + // Builder is the docker image used to build the code deterministically, used + // for smart contract verification + string builder = 10; + // CodeHash is the SHA256 sum of the code outputted by builder, used for smart + // contract verification + bytes code_hash = 11; +} + +// Deprecated: Do not use. Since wasmd v0.40, there is no longer a need for +// an explicit InstantiateContractProposal. To instantiate a contract, +// a simple MsgInstantiateContract can be invoked from the x/gov module via +// a v1 governance proposal. +message InstantiateContractProposal { + option deprecated = true; + option (amino.name) = "wasm/InstantiateContractProposal"; + option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; + + // Title is a short summary + string title = 1; + // Description is a human readable text + string description = 2; + // RunAs is the address that is passed to the contract's environment as sender + string run_as = 3 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // Admin is an optional address that can execute migrations + string admin = 4 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // CodeID is the reference to the stored WASM code + uint64 code_id = 5 [ (gogoproto.customname) = "CodeID" ]; + // Label is optional metadata to be stored with a constract instance. + string label = 6; + // Msg json encoded message to be passed to the contract on instantiation + bytes msg = 7 [ (gogoproto.casttype) = "RawContractMessage" ]; + // Funds coins that are transferred to the contract on instantiation + repeated cosmos.base.v1beta1.Coin funds = 8 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; +} + +// Deprecated: Do not use. Since wasmd v0.40, there is no longer a need for +// an explicit InstantiateContract2Proposal. To instantiate contract 2, +// a simple MsgInstantiateContract2 can be invoked from the x/gov module via +// a v1 governance proposal. +message InstantiateContract2Proposal { + option deprecated = true; + option (amino.name) = "wasm/InstantiateContract2Proposal"; + option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; + + // Title is a short summary + string title = 1; + // Description is a human readable text + string description = 2; + // RunAs is the address that is passed to the contract's enviroment as sender + string run_as = 3 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // Admin is an optional address that can execute migrations + string admin = 4 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // CodeID is the reference to the stored WASM code + uint64 code_id = 5 [ (gogoproto.customname) = "CodeID" ]; + // Label is optional metadata to be stored with a constract instance. + string label = 6; + // Msg json encode message to be passed to the contract on instantiation + bytes msg = 7 [ (gogoproto.casttype) = "RawContractMessage" ]; + // Funds coins that are transferred to the contract on instantiation + repeated cosmos.base.v1beta1.Coin funds = 8 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + // Salt is an arbitrary value provided by the sender. Size can be 1 to 64. + bytes salt = 9; + // FixMsg include the msg value into the hash for the predictable address. + // Default is false + bool fix_msg = 10; +} + +// Deprecated: Do not use. Since wasmd v0.40, there is no longer a need for +// an explicit MigrateContractProposal. To migrate a contract, +// a simple MsgMigrateContract can be invoked from the x/gov module via +// a v1 governance proposal. +message MigrateContractProposal { + option deprecated = true; + option (amino.name) = "wasm/MigrateContractProposal"; + option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; + + // Title is a short summary + string title = 1; + // Description is a human readable text + string description = 2; + // Note: skipping 3 as this was previously used for unneeded run_as + + // Contract is the address of the smart contract + string contract = 4 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // CodeID references the new WASM code + uint64 code_id = 5 [ (gogoproto.customname) = "CodeID" ]; + // Msg json encoded message to be passed to the contract on migration + bytes msg = 6 [ (gogoproto.casttype) = "RawContractMessage" ]; +} + +// Deprecated: Do not use. Since wasmd v0.40, there is no longer a need for +// an explicit SudoContractProposal. To call sudo on a contract, +// a simple MsgSudoContract can be invoked from the x/gov module via +// a v1 governance proposal. +message SudoContractProposal { + option deprecated = true; + option (amino.name) = "wasm/SudoContractProposal"; + option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; + + // Title is a short summary + string title = 1; + // Description is a human readable text + string description = 2; + // Contract is the address of the smart contract + string contract = 3 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // Msg json encoded message to be passed to the contract as sudo + bytes msg = 4 [ (gogoproto.casttype) = "RawContractMessage" ]; +} + +// Deprecated: Do not use. Since wasmd v0.40, there is no longer a need for +// an explicit ExecuteContractProposal. To call execute on a contract, +// a simple MsgExecuteContract can be invoked from the x/gov module via +// a v1 governance proposal. +message ExecuteContractProposal { + option deprecated = true; + option (amino.name) = "wasm/ExecuteContractProposal"; + option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; + + // Title is a short summary + string title = 1; + // Description is a human readable text + string description = 2; + // RunAs is the address that is passed to the contract's environment as sender + string run_as = 3 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // Contract is the address of the smart contract + string contract = 4 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // Msg json encoded message to be passed to the contract as execute + bytes msg = 5 [ (gogoproto.casttype) = "RawContractMessage" ]; + // Funds coins that are transferred to the contract on instantiation + repeated cosmos.base.v1beta1.Coin funds = 6 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; +} + +// Deprecated: Do not use. Since wasmd v0.40, there is no longer a need for +// an explicit UpdateAdminProposal. To set an admin for a contract, +// a simple MsgUpdateAdmin can be invoked from the x/gov module via +// a v1 governance proposal. +message UpdateAdminProposal { + option deprecated = true; + option (amino.name) = "wasm/UpdateAdminProposal"; + option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; + + // Title is a short summary + string title = 1; + // Description is a human readable text + string description = 2; + // NewAdmin address to be set + string new_admin = 3 [ + (gogoproto.moretags) = "yaml:\"new_admin\"", + (cosmos_proto.scalar) = "cosmos.AddressString" + ]; + // Contract is the address of the smart contract + string contract = 4 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; +} + +// Deprecated: Do not use. Since wasmd v0.40, there is no longer a need for +// an explicit ClearAdminProposal. To clear the admin of a contract, +// a simple MsgClearAdmin can be invoked from the x/gov module via +// a v1 governance proposal. +message ClearAdminProposal { + option deprecated = true; + option (amino.name) = "wasm/ClearAdminProposal"; + option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; + + // Title is a short summary + string title = 1; + // Description is a human readable text + string description = 2; + // Contract is the address of the smart contract + string contract = 3 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; +} + +// Deprecated: Do not use. Since wasmd v0.40, there is no longer a need for +// an explicit PinCodesProposal. To pin a set of code ids in the wasmvm +// cache, a simple MsgPinCodes can be invoked from the x/gov module via +// a v1 governance proposal. +message PinCodesProposal { + option deprecated = true; + option (amino.name) = "wasm/PinCodesProposal"; + option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; + + // Title is a short summary + string title = 1; + // Description is a human readable text + string description = 2; + // CodeIDs references the new WASM codes + repeated uint64 code_ids = 3 [ + (gogoproto.customname) = "CodeIDs", + (gogoproto.moretags) = "yaml:\"code_ids\"" + ]; +} + +// Deprecated: Do not use. Since wasmd v0.40, there is no longer a need for +// an explicit UnpinCodesProposal. To unpin a set of code ids in the wasmvm +// cache, a simple MsgUnpinCodes can be invoked from the x/gov module via +// a v1 governance proposal. +message UnpinCodesProposal { + option deprecated = true; + option (amino.name) = "wasm/UnpinCodesProposal"; + option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; + + // Title is a short summary + string title = 1; + // Description is a human readable text + string description = 2; + // CodeIDs references the WASM codes + repeated uint64 code_ids = 3 [ + (gogoproto.customname) = "CodeIDs", + (gogoproto.moretags) = "yaml:\"code_ids\"" + ]; +} + +// AccessConfigUpdate contains the code id and the access config to be +// applied. +message AccessConfigUpdate { + // CodeID is the reference to the stored WASM code to be updated + uint64 code_id = 1 [ (gogoproto.customname) = "CodeID" ]; + // InstantiatePermission to apply to the set of code ids + AccessConfig instantiate_permission = 2 + [ (gogoproto.nullable) = false, (amino.dont_omitempty) = true ]; +} + +// Deprecated: Do not use. Since wasmd v0.40, there is no longer a need for +// an explicit UpdateInstantiateConfigProposal. To update instantiate config +// to a set of code ids, a simple MsgUpdateInstantiateConfig can be invoked from +// the x/gov module via a v1 governance proposal. +message UpdateInstantiateConfigProposal { + option deprecated = true; + option (amino.name) = "wasm/UpdateInstantiateConfigProposal"; + option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; + + // Title is a short summary + string title = 1 [ (gogoproto.moretags) = "yaml:\"title\"" ]; + // Description is a human readable text + string description = 2 [ (gogoproto.moretags) = "yaml:\"description\"" ]; + // AccessConfigUpdate contains the list of code ids and the access config + // to be applied. + repeated AccessConfigUpdate access_config_updates = 3 + [ (gogoproto.nullable) = false, (amino.dont_omitempty) = true ]; +} + +// Deprecated: Do not use. Since wasmd v0.40, there is no longer a need for +// an explicit StoreAndInstantiateContractProposal. To store and instantiate +// the contract, a simple MsgStoreAndInstantiateContract can be invoked from +// the x/gov module via a v1 governance proposal. +message StoreAndInstantiateContractProposal { + option deprecated = true; + option (amino.name) = "wasm/StoreAndInstantiateContractProposal"; + option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; + + // Title is a short summary + string title = 1; + // Description is a human readable text + string description = 2; + // RunAs is the address that is passed to the contract's environment as sender + string run_as = 3 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // WASMByteCode can be raw or gzip compressed + bytes wasm_byte_code = 4 [ (gogoproto.customname) = "WASMByteCode" ]; + // InstantiatePermission to apply on contract creation, optional + AccessConfig instantiate_permission = 5; + // UnpinCode code on upload, optional + bool unpin_code = 6; + // Admin is an optional address that can execute migrations + string admin = 7; + // Label is optional metadata to be stored with a constract instance. + string label = 8; + // Msg json encoded message to be passed to the contract on instantiation + bytes msg = 9 [ (gogoproto.casttype) = "RawContractMessage" ]; + // Funds coins that are transferred to the contract on instantiation + repeated cosmos.base.v1beta1.Coin funds = 10 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + // Source is the URL where the code is hosted + string source = 11; + // Builder is the docker image used to build the code deterministically, used + // for smart contract verification + string builder = 12; + // CodeHash is the SHA256 sum of the code outputted by builder, used for smart + // contract verification + bytes code_hash = 13; +} diff --git a/third_party/proto/cosmwasm/wasm/v1/query.proto b/third_party/proto/cosmwasm/wasm/v1/query.proto index ffe48d2429..16840585a3 100644 --- a/third_party/proto/cosmwasm/wasm/v1/query.proto +++ b/third_party/proto/cosmwasm/wasm/v1/query.proto @@ -5,6 +5,8 @@ import "gogoproto/gogo.proto"; import "cosmwasm/wasm/v1/types.proto"; import "google/api/annotations.proto"; import "cosmos/base/query/v1beta1/pagination.proto"; +import "amino/amino.proto"; +import "cosmos_proto/cosmos.proto"; option go_package = "github.com/CosmWasm/wasmd/x/wasm/types"; option (gogoproto.goproto_getters_all) = false; @@ -76,7 +78,7 @@ service Query { // method message QueryContractInfoRequest { // address is the address of the contract to query - string address = 1; + string address = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; } // QueryContractInfoResponse is the response type for the Query/ContractInfo RPC // method @@ -84,10 +86,11 @@ message QueryContractInfoResponse { option (gogoproto.equal) = true; // address is the address of the contract - string address = 1; + string address = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; ContractInfo contract_info = 2 [ (gogoproto.embed) = true, (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, (gogoproto.jsontag) = "" ]; } @@ -96,7 +99,7 @@ message QueryContractInfoResponse { // RPC method message QueryContractHistoryRequest { // address is the address of the contract to query - string address = 1; + string address = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; // pagination defines an optional pagination for the request. cosmos.base.query.v1beta1.PageRequest pagination = 2; } @@ -105,7 +108,7 @@ message QueryContractHistoryRequest { // Query/ContractHistory RPC method message QueryContractHistoryResponse { repeated ContractCodeHistoryEntry entries = 1 - [ (gogoproto.nullable) = false ]; + [ (gogoproto.nullable) = false, (amino.dont_omitempty) = true ]; // pagination defines the pagination in the response. cosmos.base.query.v1beta1.PageResponse pagination = 2; } @@ -122,7 +125,8 @@ message QueryContractsByCodeRequest { // Query/ContractsByCode RPC method message QueryContractsByCodeResponse { // contracts are a set of contract addresses - repeated string contracts = 1; + repeated string contracts = 1 + [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; // pagination defines the pagination in the response. cosmos.base.query.v1beta1.PageResponse pagination = 2; @@ -132,7 +136,7 @@ message QueryContractsByCodeResponse { // Query/AllContractState RPC method message QueryAllContractStateRequest { // address is the address of the contract - string address = 1; + string address = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; // pagination defines an optional pagination for the request. cosmos.base.query.v1beta1.PageRequest pagination = 2; } @@ -140,7 +144,8 @@ message QueryAllContractStateRequest { // QueryAllContractStateResponse is the response type for the // Query/AllContractState RPC method message QueryAllContractStateResponse { - repeated Model models = 1 [ (gogoproto.nullable) = false ]; + repeated Model models = 1 + [ (gogoproto.nullable) = false, (amino.dont_omitempty) = true ]; // pagination defines the pagination in the response. cosmos.base.query.v1beta1.PageResponse pagination = 2; } @@ -149,7 +154,7 @@ message QueryAllContractStateResponse { // Query/RawContractState RPC method message QueryRawContractStateRequest { // address is the address of the contract - string address = 1; + string address = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; bytes query_data = 2; } @@ -164,7 +169,7 @@ message QueryRawContractStateResponse { // Query/SmartContractState RPC method message QuerySmartContractStateRequest { // address is the address of the contract - string address = 1; + string address = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; // QueryData contains the query data passed to the contract bytes query_data = 2 [ (gogoproto.casttype) = "RawContractMessage" ]; } @@ -189,13 +194,14 @@ message CodeInfoResponse { (gogoproto.customname) = "CodeID", (gogoproto.jsontag) = "id" ]; // id for legacy support - string creator = 2; + string creator = 2 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; bytes data_hash = 3 [ (gogoproto.casttype) = - "github.com/tendermint/tendermint/libs/bytes.HexBytes" ]; + "github.com/cometbft/cometbft/libs/bytes.HexBytes" ]; // Used in v1beta1 reserved 4, 5; - AccessConfig instantiate_permission = 6 [ (gogoproto.nullable) = false ]; + AccessConfig instantiate_permission = 6 + [ (gogoproto.nullable) = false, (amino.dont_omitempty) = true ]; } // QueryCodeResponse is the response type for the Query/Code RPC method @@ -214,7 +220,8 @@ message QueryCodesRequest { // QueryCodesResponse is the response type for the Query/Codes RPC method message QueryCodesResponse { - repeated CodeInfoResponse code_infos = 1 [ (gogoproto.nullable) = false ]; + repeated CodeInfoResponse code_infos = 1 + [ (gogoproto.nullable) = false, (amino.dont_omitempty) = true ]; // pagination defines the pagination in the response. cosmos.base.query.v1beta1.PageResponse pagination = 2; } @@ -229,8 +236,7 @@ message QueryPinnedCodesRequest { // QueryPinnedCodesResponse is the response type for the // Query/PinnedCodes RPC method message QueryPinnedCodesResponse { - repeated uint64 code_ids = 1 - [ (gogoproto.nullable) = false, (gogoproto.customname) = "CodeIDs" ]; + repeated uint64 code_ids = 1 [ (gogoproto.customname) = "CodeIDs" ]; // pagination defines the pagination in the response. cosmos.base.query.v1beta1.PageResponse pagination = 2; } @@ -241,14 +247,15 @@ message QueryParamsRequest {} // QueryParamsResponse is the response type for the Query/Params RPC method. message QueryParamsResponse { // params defines the parameters of the module. - Params params = 1 [ (gogoproto.nullable) = false ]; + Params params = 1 + [ (gogoproto.nullable) = false, (amino.dont_omitempty) = true ]; } // QueryContractsByCreatorRequest is the request type for the // Query/ContractsByCreator RPC method. message QueryContractsByCreatorRequest { // CreatorAddress is the address of contract creator - string creator_address = 1; + string creator_address = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; // Pagination defines an optional pagination for the request. cosmos.base.query.v1beta1.PageRequest pagination = 2; } @@ -257,7 +264,8 @@ message QueryContractsByCreatorRequest { // Query/ContractsByCreator RPC method. message QueryContractsByCreatorResponse { // ContractAddresses result set - repeated string contract_addresses = 1; + repeated string contract_addresses = 1 + [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; // Pagination defines the pagination in the response. cosmos.base.query.v1beta1.PageResponse pagination = 2; } \ No newline at end of file diff --git a/third_party/proto/cosmwasm/wasm/v1/tx.proto b/third_party/proto/cosmwasm/wasm/v1/tx.proto index 04acc8ef7f..199ca37640 100644 --- a/third_party/proto/cosmwasm/wasm/v1/tx.proto +++ b/third_party/proto/cosmwasm/wasm/v1/tx.proto @@ -2,14 +2,19 @@ syntax = "proto3"; package cosmwasm.wasm.v1; import "cosmos/base/v1beta1/coin.proto"; +import "cosmos/msg/v1/msg.proto"; import "gogoproto/gogo.proto"; import "cosmwasm/wasm/v1/types.proto"; +import "cosmos_proto/cosmos.proto"; +import "amino/amino.proto"; option go_package = "github.com/CosmWasm/wasmd/x/wasm/types"; option (gogoproto.goproto_getters_all) = false; // Msg defines the wasm Msg service. service Msg { + option (cosmos.msg.v1.service) = true; + // StoreCode to submit Wasm code to the system rpc StoreCode(MsgStoreCode) returns (MsgStoreCodeResponse); // InstantiateContract creates a new smart contract instance for the given @@ -24,16 +29,69 @@ service Msg { rpc ExecuteContract(MsgExecuteContract) returns (MsgExecuteContractResponse); // Migrate runs a code upgrade/ downgrade for a smart contract rpc MigrateContract(MsgMigrateContract) returns (MsgMigrateContractResponse); - // UpdateAdmin sets a new admin for a smart contract + // UpdateAdmin sets a new admin for a smart contract rpc UpdateAdmin(MsgUpdateAdmin) returns (MsgUpdateAdminResponse); // ClearAdmin removes any admin stored for a smart contract rpc ClearAdmin(MsgClearAdmin) returns (MsgClearAdminResponse); + // UpdateInstantiateConfig updates instantiate config for a smart contract + rpc UpdateInstantiateConfig(MsgUpdateInstantiateConfig) + returns (MsgUpdateInstantiateConfigResponse); + // UpdateParams defines a governance operation for updating the x/wasm + // module parameters. The authority is defined in the keeper. + // + // Since: 0.40 + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); + // SudoContract defines a governance operation for calling sudo + // on a contract. The authority is defined in the keeper. + // + // Since: 0.40 + rpc SudoContract(MsgSudoContract) returns (MsgSudoContractResponse); + // PinCodes defines a governance operation for pinning a set of + // code ids in the wasmvm cache. The authority is defined in the keeper. + // + // Since: 0.40 + rpc PinCodes(MsgPinCodes) returns (MsgPinCodesResponse); + // UnpinCodes defines a governance operation for unpinning a set of + // code ids in the wasmvm cache. The authority is defined in the keeper. + // + // Since: 0.40 + rpc UnpinCodes(MsgUnpinCodes) returns (MsgUnpinCodesResponse); + // StoreAndInstantiateContract defines a governance operation for storing + // and instantiating the contract. The authority is defined in the keeper. + // + // Since: 0.40 + rpc StoreAndInstantiateContract(MsgStoreAndInstantiateContract) + returns (MsgStoreAndInstantiateContractResponse); + // RemoveCodeUploadParamsAddresses defines a governance operation for + // removing addresses from code upload params. + // The authority is defined in the keeper. + rpc RemoveCodeUploadParamsAddresses(MsgRemoveCodeUploadParamsAddresses) + returns (MsgRemoveCodeUploadParamsAddressesResponse); + // AddCodeUploadParamsAddresses defines a governance operation for + // adding addresses to code upload params. + // The authority is defined in the keeper. + rpc AddCodeUploadParamsAddresses(MsgAddCodeUploadParamsAddresses) + returns (MsgAddCodeUploadParamsAddressesResponse); + // StoreAndMigrateContract defines a governance operation for storing + // and migrating the contract. The authority is defined in the keeper. + // + // Since: 0.42 + rpc StoreAndMigrateContract(MsgStoreAndMigrateContract) + returns (MsgStoreAndMigrateContractResponse); + // UpdateContractLabel sets a new label for a smart contract + // + // Since: 0.43 + rpc UpdateContractLabel(MsgUpdateContractLabel) + returns (MsgUpdateContractLabelResponse); } // MsgStoreCode submit Wasm code to the system message MsgStoreCode { - // Sender is the that actor that signed the messages - string sender = 1; + option (amino.name) = "wasm/MsgStoreCode"; + option (cosmos.msg.v1.signer) = "sender"; + + // Sender is the actor that signed the messages + string sender = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; // WASMByteCode can be raw or gzip compressed bytes wasm_byte_code = 2 [ (gogoproto.customname) = "WASMByteCode" ]; // Used in v1beta1 @@ -53,10 +111,13 @@ message MsgStoreCodeResponse { // MsgInstantiateContract create a new smart contract instance for the given // code id. message MsgInstantiateContract { + option (amino.name) = "wasm/MsgInstantiateContract"; + option (cosmos.msg.v1.signer) = "sender"; + // Sender is the that actor that signed the messages - string sender = 1; + string sender = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; // Admin is an optional address that can execute migrations - string admin = 2; + string admin = 2 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; // CodeID is the reference to the stored WASM code uint64 code_id = 3 [ (gogoproto.customname) = "CodeID" ]; // Label is optional metadata to be stored with a contract instance. @@ -66,17 +127,29 @@ message MsgInstantiateContract { // Funds coins that are transferred to the contract on instantiation repeated cosmos.base.v1beta1.Coin funds = 6 [ (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" ]; } +// MsgInstantiateContractResponse return instantiation result data +message MsgInstantiateContractResponse { + // Address is the bech32 address of the new contract instance. + string address = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // Data contains bytes to returned from the contract + bytes data = 2; +} + // MsgInstantiateContract2 create a new smart contract instance for the given // code id with a predicable address. message MsgInstantiateContract2 { + option (amino.name) = "wasm/MsgInstantiateContract2"; + option (cosmos.msg.v1.signer) = "sender"; + // Sender is the that actor that signed the messages - string sender = 1; + string sender = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; // Admin is an optional address that can execute migrations - string admin = 2; + string admin = 2 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; // CodeID is the reference to the stored WASM code uint64 code_id = 3 [ (gogoproto.customname) = "CodeID" ]; // Label is optional metadata to be stored with a contract instance. @@ -86,6 +159,7 @@ message MsgInstantiateContract2 { // Funds coins that are transferred to the contract on instantiation repeated cosmos.base.v1beta1.Coin funds = 6 [ (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" ]; // Salt is an arbitrary value provided by the sender. Size can be 1 to 64. @@ -95,33 +169,29 @@ message MsgInstantiateContract2 { bool fix_msg = 8; } -// MsgInstantiateContractResponse return instantiation result data -message MsgInstantiateContractResponse { - // Address is the bech32 address of the new contract instance. - string address = 1; - // Data contains bytes to returned from the contract - bytes data = 2; -} - // MsgInstantiateContract2Response return instantiation result data message MsgInstantiateContract2Response { // Address is the bech32 address of the new contract instance. - string address = 1; + string address = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; // Data contains bytes to returned from the contract bytes data = 2; } // MsgExecuteContract submits the given message data to a smart contract message MsgExecuteContract { + option (amino.name) = "wasm/MsgExecuteContract"; + option (cosmos.msg.v1.signer) = "sender"; + // Sender is the that actor that signed the messages - string sender = 1; + string sender = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; // Contract is the address of the smart contract - string contract = 2; + string contract = 2 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; // Msg json encoded message to be passed to the contract bytes msg = 3 [ (gogoproto.casttype) = "RawContractMessage" ]; // Funds coins that are transferred to the contract on execution repeated cosmos.base.v1beta1.Coin funds = 5 [ (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" ]; } @@ -134,10 +204,13 @@ message MsgExecuteContractResponse { // MsgMigrateContract runs a code upgrade/ downgrade for a smart contract message MsgMigrateContract { + option (amino.name) = "wasm/MsgMigrateContract"; + option (cosmos.msg.v1.signer) = "sender"; + // Sender is the that actor that signed the messages - string sender = 1; + string sender = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; // Contract is the address of the smart contract - string contract = 2; + string contract = 2 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; // CodeID references the new WASM code uint64 code_id = 3 [ (gogoproto.customname) = "CodeID" ]; // Msg json encoded message to be passed to the contract on migration @@ -153,12 +226,15 @@ message MsgMigrateContractResponse { // MsgUpdateAdmin sets a new admin for a smart contract message MsgUpdateAdmin { + option (amino.name) = "wasm/MsgUpdateAdmin"; + option (cosmos.msg.v1.signer) = "sender"; + // Sender is the that actor that signed the messages - string sender = 1; + string sender = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; // NewAdmin address to be set - string new_admin = 2; + string new_admin = 2 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; // Contract is the address of the smart contract - string contract = 3; + string contract = 3 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; } // MsgUpdateAdminResponse returns empty data @@ -166,11 +242,255 @@ message MsgUpdateAdminResponse {} // MsgClearAdmin removes any admin stored for a smart contract message MsgClearAdmin { - // Sender is the that actor that signed the messages - string sender = 1; + option (amino.name) = "wasm/MsgClearAdmin"; + option (cosmos.msg.v1.signer) = "sender"; + + // Sender is the actor that signed the messages + string sender = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; // Contract is the address of the smart contract - string contract = 3; + string contract = 3 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; } // MsgClearAdminResponse returns empty data message MsgClearAdminResponse {} + +// MsgUpdateInstantiateConfig updates instantiate config for a smart contract +message MsgUpdateInstantiateConfig { + option (amino.name) = "wasm/MsgUpdateInstantiateConfig"; + option (cosmos.msg.v1.signer) = "sender"; + + // Sender is the that actor that signed the messages + string sender = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // CodeID references the stored WASM code + uint64 code_id = 2 [ (gogoproto.customname) = "CodeID" ]; + // NewInstantiatePermission is the new access control + AccessConfig new_instantiate_permission = 3; +} + +// MsgUpdateInstantiateConfigResponse returns empty data +message MsgUpdateInstantiateConfigResponse {} + +// MsgUpdateParams is the MsgUpdateParams request type. +// +// Since: 0.40 +message MsgUpdateParams { + option (amino.name) = "wasm/MsgUpdateParams"; + option (cosmos.msg.v1.signer) = "authority"; + + // Authority is the address of the governance account. + string authority = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + + // params defines the x/wasm parameters to update. + // + // NOTE: All parameters must be supplied. + Params params = 2 + [ (gogoproto.nullable) = false, (amino.dont_omitempty) = true ]; +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +// +// Since: 0.40 +message MsgUpdateParamsResponse {} + +// MsgSudoContract is the MsgSudoContract request type. +// +// Since: 0.40 +message MsgSudoContract { + option (amino.name) = "wasm/MsgSudoContract"; + option (cosmos.msg.v1.signer) = "authority"; + + // Authority is the address of the governance account. + string authority = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + + // Contract is the address of the smart contract + string contract = 2 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // Msg json encoded message to be passed to the contract as sudo + bytes msg = 3 [ (gogoproto.casttype) = "RawContractMessage" ]; +} + +// MsgSudoContractResponse defines the response structure for executing a +// MsgSudoContract message. +// +// Since: 0.40 +message MsgSudoContractResponse { + // Data contains bytes to returned from the contract + bytes data = 1; +} + +// MsgPinCodes is the MsgPinCodes request type. +// +// Since: 0.40 +message MsgPinCodes { + option (amino.name) = "wasm/MsgPinCodes"; + option (cosmos.msg.v1.signer) = "authority"; + + // Authority is the address of the governance account. + string authority = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // CodeIDs references the new WASM codes + repeated uint64 code_ids = 2 [ + (gogoproto.customname) = "CodeIDs", + (gogoproto.moretags) = "yaml:\"code_ids\"" + ]; +} + +// MsgPinCodesResponse defines the response structure for executing a +// MsgPinCodes message. +// +// Since: 0.40 +message MsgPinCodesResponse {} + +// MsgUnpinCodes is the MsgUnpinCodes request type. +// +// Since: 0.40 +message MsgUnpinCodes { + option (amino.name) = "wasm/MsgUnpinCodes"; + option (cosmos.msg.v1.signer) = "authority"; + + // Authority is the address of the governance account. + string authority = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // CodeIDs references the WASM codes + repeated uint64 code_ids = 2 [ + (gogoproto.customname) = "CodeIDs", + (gogoproto.moretags) = "yaml:\"code_ids\"" + ]; +} + +// MsgUnpinCodesResponse defines the response structure for executing a +// MsgUnpinCodes message. +// +// Since: 0.40 +message MsgUnpinCodesResponse {} + +// MsgStoreAndInstantiateContract is the MsgStoreAndInstantiateContract +// request type. +// +// Since: 0.40 +message MsgStoreAndInstantiateContract { + option (amino.name) = "wasm/MsgStoreAndInstantiateContract"; + option (cosmos.msg.v1.signer) = "authority"; + + // Authority is the address of the governance account. + string authority = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // WASMByteCode can be raw or gzip compressed + bytes wasm_byte_code = 3 [ (gogoproto.customname) = "WASMByteCode" ]; + // InstantiatePermission to apply on contract creation, optional + AccessConfig instantiate_permission = 4; + // UnpinCode code on upload, optional. As default the uploaded contract is + // pinned to cache. + bool unpin_code = 5; + // Admin is an optional address that can execute migrations + string admin = 6 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // Label is optional metadata to be stored with a constract instance. + string label = 7; + // Msg json encoded message to be passed to the contract on instantiation + bytes msg = 8 [ (gogoproto.casttype) = "RawContractMessage" ]; + // Funds coins that are transferred from the authority account to the contract + // on instantiation + repeated cosmos.base.v1beta1.Coin funds = 9 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + // Source is the URL where the code is hosted + string source = 10; + // Builder is the docker image used to build the code deterministically, used + // for smart contract verification + string builder = 11; + // CodeHash is the SHA256 sum of the code outputted by builder, used for smart + // contract verification + bytes code_hash = 12; +} + +// MsgStoreAndInstantiateContractResponse defines the response structure +// for executing a MsgStoreAndInstantiateContract message. +// +// Since: 0.40 +message MsgStoreAndInstantiateContractResponse { + // Address is the bech32 address of the new contract instance. + string address = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + + // Data contains bytes to returned from the contract + bytes data = 2; +} + +// MsgAddCodeUploadParamsAddresses is the +// MsgAddCodeUploadParamsAddresses request type. +message MsgAddCodeUploadParamsAddresses { + option (amino.name) = "wasm/MsgAddCodeUploadParamsAddresses"; + option (cosmos.msg.v1.signer) = "authority"; + + // Authority is the address of the governance account. + string authority = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + + repeated string addresses = 2 [ (gogoproto.moretags) = "yaml:\"addresses\"" ]; +} + +// MsgAddCodeUploadParamsAddressesResponse defines the response +// structure for executing a MsgAddCodeUploadParamsAddresses message. +message MsgAddCodeUploadParamsAddressesResponse {} + +// MsgRemoveCodeUploadParamsAddresses is the +// MsgRemoveCodeUploadParamsAddresses request type. +message MsgRemoveCodeUploadParamsAddresses { + option (amino.name) = "wasm/MsgRemoveCodeUploadParamsAddresses"; + option (cosmos.msg.v1.signer) = "authority"; + + // Authority is the address of the governance account. + string authority = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + + repeated string addresses = 2 [ (gogoproto.moretags) = "yaml:\"addresses\"" ]; +} + +// MsgRemoveCodeUploadParamsAddressesResponse defines the response +// structure for executing a MsgRemoveCodeUploadParamsAddresses message. +message MsgRemoveCodeUploadParamsAddressesResponse {} + +// MsgStoreAndMigrateContract is the MsgStoreAndMigrateContract +// request type. +// +// Since: 0.42 +message MsgStoreAndMigrateContract { + option (amino.name) = "wasm/MsgStoreAndMigrateContract"; + option (cosmos.msg.v1.signer) = "authority"; + + // Authority is the address of the governance account. + string authority = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // WASMByteCode can be raw or gzip compressed + bytes wasm_byte_code = 2 [ (gogoproto.customname) = "WASMByteCode" ]; + // InstantiatePermission to apply on contract creation, optional + AccessConfig instantiate_permission = 3; + // Contract is the address of the smart contract + string contract = 4; + // Msg json encoded message to be passed to the contract on migration + bytes msg = 5 [ (gogoproto.casttype) = "RawContractMessage" ]; +} + +// MsgStoreAndMigrateContractResponse defines the response structure +// for executing a MsgStoreAndMigrateContract message. +// +// Since: 0.42 +message MsgStoreAndMigrateContractResponse { + // CodeID is the reference to the stored WASM code + uint64 code_id = 1 [ (gogoproto.customname) = "CodeID" ]; + // Checksum is the sha256 hash of the stored code + bytes checksum = 2; + // Data contains bytes to returned from the contract + bytes data = 3; +} + +// MsgUpdateContractLabel sets a new label for a smart contract +message MsgUpdateContractLabel { + option (amino.name) = "wasm/MsgUpdateContractLabel"; + option (cosmos.msg.v1.signer) = "sender"; + + // Sender is the that actor that signed the messages + string sender = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // NewLabel string to be set + string new_label = 2; + // Contract is the address of the smart contract + string contract = 3 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; +} + +// MsgUpdateContractLabelResponse returns empty data +message MsgUpdateContractLabelResponse {} \ No newline at end of file diff --git a/third_party/proto/cosmwasm/wasm/v1/types.proto b/third_party/proto/cosmwasm/wasm/v1/types.proto index 216b24e3b4..5790585c8c 100644 --- a/third_party/proto/cosmwasm/wasm/v1/types.proto +++ b/third_party/proto/cosmwasm/wasm/v1/types.proto @@ -4,6 +4,7 @@ package cosmwasm.wasm.v1; import "cosmos_proto/cosmos.proto"; import "gogoproto/gogo.proto"; import "google/protobuf/any.proto"; +import "amino/amino.proto"; option go_package = "github.com/CosmWasm/wasmd/x/wasm/types"; option (gogoproto.goproto_getters_all) = false; @@ -19,10 +20,9 @@ enum AccessType { // AccessTypeNobody forbidden ACCESS_TYPE_NOBODY = 1 [ (gogoproto.enumvalue_customname) = "AccessTypeNobody" ]; - // AccessTypeOnlyAddress restricted to a single address - // Deprecated: use AccessTypeAnyOfAddresses instead - ACCESS_TYPE_ONLY_ADDRESS = 2 - [ (gogoproto.enumvalue_customname) = "AccessTypeOnlyAddress" ]; + + reserved 2; // was AccessTypeOnlyAddress + // AccessTypeEverybody unrestricted ACCESS_TYPE_EVERYBODY = 3 [ (gogoproto.enumvalue_customname) = "AccessTypeEverybody" ]; @@ -42,10 +42,10 @@ message AccessConfig { option (gogoproto.goproto_stringer) = true; AccessType permission = 1 [ (gogoproto.moretags) = "yaml:\"permission\"" ]; - // Address - // Deprecated: replaced by addresses - string address = 2 [ (gogoproto.moretags) = "yaml:\"address\"" ]; - repeated string addresses = 3 [ (gogoproto.moretags) = "yaml:\"addresses\"" ]; + reserved 2; // was address + + repeated string addresses = 3 + [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; } // Params defines the set of wasm parameters. @@ -53,6 +53,7 @@ message Params { option (gogoproto.goproto_stringer) = false; AccessConfig code_upload_access = 1 [ (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, (gogoproto.moretags) = "yaml:\"code_upload_access\"" ]; AccessType instantiate_default_permission = 2 @@ -64,11 +65,12 @@ message CodeInfo { // CodeHash is the unique identifier created by wasmvm bytes code_hash = 1; // Creator address who initially stored the code - string creator = 2; + string creator = 2 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; // Used in v1beta1 reserved 3, 4; // InstantiateConfig access control to apply on contract creation, optional - AccessConfig instantiate_config = 5 [ (gogoproto.nullable) = false ]; + AccessConfig instantiate_config = 5 + [ (gogoproto.nullable) = false, (amino.dont_omitempty) = true ]; } // ContractInfo stores a WASM contract instance @@ -78,9 +80,9 @@ message ContractInfo { // CodeID is the reference to the stored Wasm code uint64 code_id = 1 [ (gogoproto.customname) = "CodeID" ]; // Creator address who initially instantiated the contract - string creator = 2; + string creator = 2 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; // Admin is an optional address that can execute migrations - string admin = 3; + string admin = 3 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; // Label is optional metadata to be stored with a contract instance. string label = 4; // Created Tx position when the contract was instantiated. @@ -90,7 +92,8 @@ message ContractInfo { // Extension is an extension point to store custom metadata within the // persistence model. google.protobuf.Any extension = 7 - [ (cosmos_proto.accepts_interface) = "ContractInfoExtension" ]; + [ (cosmos_proto.accepts_interface) = + "cosmwasm.wasm.v1.ContractInfoExtension" ]; } // ContractCodeHistoryOperationType actions that caused a code change @@ -138,7 +141,7 @@ message AbsoluteTxPosition { message Model { // hex-encode key to read it better (this is often ascii) bytes key = 1 [ (gogoproto.casttype) = - "github.com/tendermint/tendermint/libs/bytes.HexBytes" ]; + "github.com/cometbft/cometbft/libs/bytes.HexBytes" ]; // base64-encode raw value bytes value = 2; } diff --git a/third_party/proto/gogoproto/gogo.proto b/third_party/proto/gogoproto/gogo.proto index 49e78f99fe..974b36a7cc 100644 --- a/third_party/proto/gogoproto/gogo.proto +++ b/third_party/proto/gogoproto/gogo.proto @@ -1,7 +1,7 @@ // Protocol Buffers for Go with Gadgets // // Copyright (c) 2013, The GoGo Authors. All rights reserved. -// http://github.com/gogo/protobuf +// http://github.com/cosmos/gogoproto // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are @@ -33,7 +33,7 @@ import "google/protobuf/descriptor.proto"; option java_package = "com.google.protobuf"; option java_outer_classname = "GoGoProtos"; -option go_package = "github.com/gogo/protobuf/gogoproto"; +option go_package = "github.com/cosmos/gogoproto/gogoproto"; extend google.protobuf.EnumOptions { optional bool goproto_enum_prefix = 62001; diff --git a/third_party/proto/ibc/applications/fee/v1/ack.proto b/third_party/proto/ibc/applications/fee/v1/ack.proto index be0d74a401..2f3746d2cb 100644 --- a/third_party/proto/ibc/applications/fee/v1/ack.proto +++ b/third_party/proto/ibc/applications/fee/v1/ack.proto @@ -2,16 +2,14 @@ syntax = "proto3"; package ibc.applications.fee.v1; -option go_package = "github.com/cosmos/ibc-go/v6/modules/apps/29-fee/types"; - -import "gogoproto/gogo.proto"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/apps/29-fee/types"; // IncentivizedAcknowledgement is the acknowledgement format to be used by applications wrapped in the fee middleware message IncentivizedAcknowledgement { // the underlying app acknowledgement bytes - bytes app_acknowledgement = 1 [(gogoproto.moretags) = "yaml:\"app_acknowledgement\""]; + bytes app_acknowledgement = 1; // the relayer address which submits the recv packet message - string forward_relayer_address = 2 [(gogoproto.moretags) = "yaml:\"forward_relayer_address\""]; + string forward_relayer_address = 2; // success flag of the base application callback - bool underlying_app_success = 3 [(gogoproto.moretags) = "yaml:\"underlying_app_successl\""]; + bool underlying_app_success = 3; } diff --git a/third_party/proto/ibc/applications/fee/v1/fee.proto b/third_party/proto/ibc/applications/fee/v1/fee.proto index b38ae9d6e5..867e884551 100644 --- a/third_party/proto/ibc/applications/fee/v1/fee.proto +++ b/third_party/proto/ibc/applications/fee/v1/fee.proto @@ -2,40 +2,46 @@ syntax = "proto3"; package ibc.applications.fee.v1; -option go_package = "github.com/cosmos/ibc-go/v6/modules/apps/29-fee/types"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/apps/29-fee/types"; +import "amino/amino.proto"; import "cosmos/base/v1beta1/coin.proto"; import "gogoproto/gogo.proto"; import "ibc/core/channel/v1/channel.proto"; +import "cosmos/msg/v1/msg.proto"; // Fee defines the ICS29 receive, acknowledgement and timeout fees message Fee { // the packet receive fee repeated cosmos.base.v1beta1.Coin recv_fee = 1 [ - (gogoproto.moretags) = "yaml:\"recv_fee\"", (gogoproto.nullable) = false, - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", + (amino.encoding) = "legacy_coins" ]; + // the packet acknowledgement fee repeated cosmos.base.v1beta1.Coin ack_fee = 2 [ - (gogoproto.moretags) = "yaml:\"ack_fee\"", (gogoproto.nullable) = false, - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", + (amino.encoding) = "legacy_coins" ]; + // the packet timeout fee repeated cosmos.base.v1beta1.Coin timeout_fee = 3 [ - (gogoproto.moretags) = "yaml:\"timeout_fee\"", (gogoproto.nullable) = false, - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", + (amino.encoding) = "legacy_coins" ]; } // PacketFee contains ICS29 relayer fees, refund address and optional list of permitted relayers message PacketFee { + option (cosmos.msg.v1.signer) = "refund_address"; + // fee encapsulates the recv, ack and timeout fees associated with an IBC packet Fee fee = 1 [(gogoproto.nullable) = false]; // the refund address for unspent fees - string refund_address = 2 [(gogoproto.moretags) = "yaml:\"refund_address\""]; + string refund_address = 2; // optional list of relayers permitted to receive fees repeated string relayers = 3; } @@ -43,14 +49,13 @@ message PacketFee { // PacketFees contains a list of type PacketFee message PacketFees { // list of packet fees - repeated PacketFee packet_fees = 1 [(gogoproto.moretags) = "yaml:\"packet_fees\"", (gogoproto.nullable) = false]; + repeated PacketFee packet_fees = 1 [(gogoproto.nullable) = false]; } // IdentifiedPacketFees contains a list of type PacketFee and associated PacketId message IdentifiedPacketFees { // unique packet identifier comprised of the channel ID, port ID and sequence - ibc.core.channel.v1.PacketId packet_id = 1 - [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"packet_id\""]; + ibc.core.channel.v1.PacketId packet_id = 1 [(gogoproto.nullable) = false]; // list of packet fees - repeated PacketFee packet_fees = 2 [(gogoproto.moretags) = "yaml:\"packet_fees\"", (gogoproto.nullable) = false]; + repeated PacketFee packet_fees = 2 [(gogoproto.nullable) = false]; } diff --git a/third_party/proto/ibc/applications/fee/v1/genesis.proto b/third_party/proto/ibc/applications/fee/v1/genesis.proto index 8f52be195a..e48ceb5354 100644 --- a/third_party/proto/ibc/applications/fee/v1/genesis.proto +++ b/third_party/proto/ibc/applications/fee/v1/genesis.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.applications.fee.v1; -option go_package = "github.com/cosmos/ibc-go/v6/modules/apps/29-fee/types"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/apps/29-fee/types"; import "gogoproto/gogo.proto"; import "ibc/applications/fee/v1/fee.proto"; @@ -11,34 +11,29 @@ import "ibc/core/channel/v1/channel.proto"; // GenesisState defines the ICS29 fee middleware genesis state message GenesisState { // list of identified packet fees - repeated IdentifiedPacketFees identified_fees = 1 - [(gogoproto.moretags) = "yaml:\"identified_fees\"", (gogoproto.nullable) = false]; + repeated IdentifiedPacketFees identified_fees = 1 [(gogoproto.nullable) = false]; // list of fee enabled channels - repeated FeeEnabledChannel fee_enabled_channels = 2 - [(gogoproto.moretags) = "yaml:\"fee_enabled_channels\"", (gogoproto.nullable) = false]; + repeated FeeEnabledChannel fee_enabled_channels = 2 [(gogoproto.nullable) = false]; // list of registered payees - repeated RegisteredPayee registered_payees = 3 - [(gogoproto.moretags) = "yaml:\"registered_payees\"", (gogoproto.nullable) = false]; + repeated RegisteredPayee registered_payees = 3 [(gogoproto.nullable) = false]; // list of registered counterparty payees - repeated RegisteredCounterpartyPayee registered_counterparty_payees = 4 - [(gogoproto.moretags) = "yaml:\"registered_counterparty_payees\"", (gogoproto.nullable) = false]; + repeated RegisteredCounterpartyPayee registered_counterparty_payees = 4 [(gogoproto.nullable) = false]; // list of forward relayer addresses - repeated ForwardRelayerAddress forward_relayers = 5 - [(gogoproto.moretags) = "yaml:\"forward_relayers\"", (gogoproto.nullable) = false]; + repeated ForwardRelayerAddress forward_relayers = 5 [(gogoproto.nullable) = false]; } // FeeEnabledChannel contains the PortID & ChannelID for a fee enabled channel message FeeEnabledChannel { // unique port identifier - string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; + string port_id = 1; // unique channel identifier - string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; + string channel_id = 2; } // RegisteredPayee contains the relayer address and payee address for a specific channel message RegisteredPayee { // unique channel identifier - string channel_id = 1 [(gogoproto.moretags) = "yaml:\"channel_id\""]; + string channel_id = 1; // the relayer address string relayer = 2; // the payee address @@ -49,11 +44,11 @@ message RegisteredPayee { // for recv fee distribution) message RegisteredCounterpartyPayee { // unique channel identifier - string channel_id = 1 [(gogoproto.moretags) = "yaml:\"channel_id\""]; + string channel_id = 1; // the relayer address string relayer = 2; // the counterparty payee address - string counterparty_payee = 3 [(gogoproto.moretags) = "yaml:\"counterparty_payee\""]; + string counterparty_payee = 3; } // ForwardRelayerAddress contains the forward relayer address and PacketId used for async acknowledgements @@ -61,6 +56,5 @@ message ForwardRelayerAddress { // the forward relayer address string address = 1; // unique packet identifer comprised of the channel ID, port ID and sequence - ibc.core.channel.v1.PacketId packet_id = 2 - [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"packet_id\""]; + ibc.core.channel.v1.PacketId packet_id = 2 [(gogoproto.nullable) = false]; } diff --git a/third_party/proto/ibc/applications/fee/v1/metadata.proto b/third_party/proto/ibc/applications/fee/v1/metadata.proto index 3afdba164c..1e82e7c250 100644 --- a/third_party/proto/ibc/applications/fee/v1/metadata.proto +++ b/third_party/proto/ibc/applications/fee/v1/metadata.proto @@ -2,15 +2,13 @@ syntax = "proto3"; package ibc.applications.fee.v1; -option go_package = "github.com/cosmos/ibc-go/v6/modules/apps/29-fee/types"; - -import "gogoproto/gogo.proto"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/apps/29-fee/types"; // Metadata defines the ICS29 channel specific metadata encoded into the channel version bytestring // See ICS004: https://github.com/cosmos/ibc/tree/master/spec/core/ics-004-channel-and-packet-semantics#Versioning message Metadata { // fee_version defines the ICS29 fee version - string fee_version = 1 [(gogoproto.moretags) = "yaml:\"fee_version\""]; + string fee_version = 1; // app_version defines the underlying application version, which may or may not be a JSON encoded bytestring - string app_version = 2 [(gogoproto.moretags) = "yaml:\"app_version\""]; + string app_version = 2; } diff --git a/third_party/proto/ibc/applications/fee/v1/query.proto b/third_party/proto/ibc/applications/fee/v1/query.proto index 3153051c8f..726370ee03 100644 --- a/third_party/proto/ibc/applications/fee/v1/query.proto +++ b/third_party/proto/ibc/applications/fee/v1/query.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.applications.fee.v1; -option go_package = "github.com/cosmos/ibc-go/v6/modules/apps/29-fee/types"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/apps/29-fee/types"; import "gogoproto/gogo.proto"; import "google/api/annotations.proto"; @@ -83,6 +83,8 @@ message QueryIncentivizedPacketsRequest { message QueryIncentivizedPacketsResponse { // list of identified fees for incentivized packets repeated ibc.applications.fee.v1.IdentifiedPacketFees incentivized_packets = 1 [(gogoproto.nullable) = false]; + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; } // QueryIncentivizedPacketRequest defines the request type for the IncentivizedPacket rpc @@ -114,6 +116,8 @@ message QueryIncentivizedPacketsForChannelRequest { message QueryIncentivizedPacketsForChannelResponse { // Map of all incentivized_packets repeated ibc.applications.fee.v1.IdentifiedPacketFees incentivized_packets = 1; + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; } // QueryTotalRecvFeesRequest defines the request type for the TotalRecvFees rpc @@ -125,11 +129,8 @@ message QueryTotalRecvFeesRequest { // QueryTotalRecvFeesResponse defines the response type for the TotalRecvFees rpc message QueryTotalRecvFeesResponse { // the total packet receive fees - repeated cosmos.base.v1beta1.Coin recv_fees = 1 [ - (gogoproto.moretags) = "yaml:\"recv_fees\"", - (gogoproto.nullable) = false, - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; + repeated cosmos.base.v1beta1.Coin recv_fees = 1 + [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; } // QueryTotalAckFeesRequest defines the request type for the TotalAckFees rpc @@ -141,11 +142,8 @@ message QueryTotalAckFeesRequest { // QueryTotalAckFeesResponse defines the response type for the TotalAckFees rpc message QueryTotalAckFeesResponse { // the total packet acknowledgement fees - repeated cosmos.base.v1beta1.Coin ack_fees = 1 [ - (gogoproto.moretags) = "yaml:\"ack_fees\"", - (gogoproto.nullable) = false, - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; + repeated cosmos.base.v1beta1.Coin ack_fees = 1 + [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; } // QueryTotalTimeoutFeesRequest defines the request type for the TotalTimeoutFees rpc @@ -157,17 +155,14 @@ message QueryTotalTimeoutFeesRequest { // QueryTotalTimeoutFeesResponse defines the response type for the TotalTimeoutFees rpc message QueryTotalTimeoutFeesResponse { // the total packet timeout fees - repeated cosmos.base.v1beta1.Coin timeout_fees = 1 [ - (gogoproto.moretags) = "yaml:\"timeout_fees\"", - (gogoproto.nullable) = false, - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; + repeated cosmos.base.v1beta1.Coin timeout_fees = 1 + [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; } // QueryPayeeRequest defines the request type for the Payee rpc message QueryPayeeRequest { // unique channel identifier - string channel_id = 1 [(gogoproto.moretags) = "yaml:\"channel_id\""]; + string channel_id = 1; // the relayer address to which the distribution address is registered string relayer = 2; } @@ -175,13 +170,13 @@ message QueryPayeeRequest { // QueryPayeeResponse defines the response type for the Payee rpc message QueryPayeeResponse { // the payee address to which packet fees are paid out - string payee_address = 1 [(gogoproto.moretags) = "yaml:\"payee_address\""]; + string payee_address = 1; } // QueryCounterpartyPayeeRequest defines the request type for the CounterpartyPayee rpc message QueryCounterpartyPayeeRequest { // unique channel identifier - string channel_id = 1 [(gogoproto.moretags) = "yaml:\"channel_id\""]; + string channel_id = 1; // the relayer address to which the counterparty is registered string relayer = 2; } @@ -189,7 +184,7 @@ message QueryCounterpartyPayeeRequest { // QueryCounterpartyPayeeResponse defines the response type for the CounterpartyPayee rpc message QueryCounterpartyPayeeResponse { // the counterparty payee address used to compensate forward relaying - string counterparty_payee = 1 [(gogoproto.moretags) = "yaml:\"counterparty_payee\""]; + string counterparty_payee = 1; } // QueryFeeEnabledChannelsRequest defines the request type for the FeeEnabledChannels rpc @@ -203,20 +198,21 @@ message QueryFeeEnabledChannelsRequest { // QueryFeeEnabledChannelsResponse defines the response type for the FeeEnabledChannels rpc message QueryFeeEnabledChannelsResponse { // list of fee enabled channels - repeated ibc.applications.fee.v1.FeeEnabledChannel fee_enabled_channels = 1 - [(gogoproto.moretags) = "yaml:\"fee_enabled_channels\"", (gogoproto.nullable) = false]; + repeated ibc.applications.fee.v1.FeeEnabledChannel fee_enabled_channels = 1 [(gogoproto.nullable) = false]; + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; } // QueryFeeEnabledChannelRequest defines the request type for the FeeEnabledChannel rpc message QueryFeeEnabledChannelRequest { // unique port identifier - string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; + string port_id = 1; // unique channel identifier - string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; + string channel_id = 2; } // QueryFeeEnabledChannelResponse defines the response type for the FeeEnabledChannel rpc message QueryFeeEnabledChannelResponse { // boolean flag representing the fee enabled channel status - bool fee_enabled = 1 [(gogoproto.moretags) = "yaml:\"fee_enabled\""]; + bool fee_enabled = 1; } diff --git a/third_party/proto/ibc/applications/fee/v1/tx.proto b/third_party/proto/ibc/applications/fee/v1/tx.proto index b099b5eedf..e59dddfd17 100644 --- a/third_party/proto/ibc/applications/fee/v1/tx.proto +++ b/third_party/proto/ibc/applications/fee/v1/tx.proto @@ -2,14 +2,18 @@ syntax = "proto3"; package ibc.applications.fee.v1; -option go_package = "github.com/cosmos/ibc-go/v6/modules/apps/29-fee/types"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/apps/29-fee/types"; +import "amino/amino.proto"; import "gogoproto/gogo.proto"; import "ibc/applications/fee/v1/fee.proto"; import "ibc/core/channel/v1/channel.proto"; +import "cosmos/msg/v1/msg.proto"; // Msg defines the ICS29 Msg service. service Msg { + option (cosmos.msg.v1.service) = true; + // RegisterPayee defines a rpc handler method for MsgRegisterPayee // RegisterPayee is called by the relayer on each channelEnd and allows them to set an optional // payee to which reverse and timeout relayer packet fees will be paid out. The payee should be registered on @@ -39,13 +43,15 @@ service Msg { // MsgRegisterPayee defines the request type for the RegisterPayee rpc message MsgRegisterPayee { - option (gogoproto.equal) = false; + option (amino.name) = "cosmos-sdk/MsgRegisterPayee"; + option (cosmos.msg.v1.signer) = "relayer"; + option (gogoproto.goproto_getters) = false; // unique port identifier - string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; + string port_id = 1; // unique channel identifier - string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; + string channel_id = 2; // the relayer address string relayer = 3; // the payee address @@ -57,17 +63,19 @@ message MsgRegisterPayeeResponse {} // MsgRegisterCounterpartyPayee defines the request type for the RegisterCounterpartyPayee rpc message MsgRegisterCounterpartyPayee { - option (gogoproto.equal) = false; + option (amino.name) = "cosmos-sdk/MsgRegisterCounterpartyPayee"; + option (cosmos.msg.v1.signer) = "relayer"; + option (gogoproto.goproto_getters) = false; // unique port identifier - string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; + string port_id = 1; // unique channel identifier - string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; + string channel_id = 2; // the relayer address string relayer = 3; // the counterparty payee address - string counterparty_payee = 4 [(gogoproto.moretags) = "yaml:\"counterparty_payee\""]; + string counterparty_payee = 4; } // MsgRegisterCounterpartyPayeeResponse defines the response type for the RegisterCounterpartyPayee rpc @@ -77,15 +85,17 @@ message MsgRegisterCounterpartyPayeeResponse {} // This Msg can be used to pay for a packet at the next sequence send & should be combined with the Msg that will be // paid for message MsgPayPacketFee { - option (gogoproto.equal) = false; + option (amino.name) = "cosmos-sdk/MsgPayPacketFee"; + option (cosmos.msg.v1.signer) = "signer"; + option (gogoproto.goproto_getters) = false; // fee encapsulates the recv, ack and timeout fees associated with an IBC packet - ibc.applications.fee.v1.Fee fee = 1 [(gogoproto.nullable) = false]; + ibc.applications.fee.v1.Fee fee = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // the source port unique identifier - string source_port_id = 2 [(gogoproto.moretags) = "yaml:\"source_port_id\""]; + string source_port_id = 2; // the source channel unique identifer - string source_channel_id = 3 [(gogoproto.moretags) = "yaml:\"source_channel_id\""]; + string source_channel_id = 3; // account address to refund fee if necessary string signer = 4; // optional list of relayers permitted to the receive packet fees @@ -98,14 +108,14 @@ message MsgPayPacketFeeResponse {} // MsgPayPacketFeeAsync defines the request type for the PayPacketFeeAsync rpc // This Msg can be used to pay for a packet at a specified sequence (instead of the next sequence send) message MsgPayPacketFeeAsync { - option (gogoproto.equal) = false; + option (amino.name) = "cosmos-sdk/MsgPayPacketFeeAsync"; + option (cosmos.msg.v1.signer) = "packet_fee"; option (gogoproto.goproto_getters) = false; // unique packet identifier comprised of the channel ID, port ID and sequence - ibc.core.channel.v1.PacketId packet_id = 1 - [(gogoproto.moretags) = "yaml:\"packet_id\"", (gogoproto.nullable) = false]; + ibc.core.channel.v1.PacketId packet_id = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // the packet fee associated with a particular IBC packet - PacketFee packet_fee = 2 [(gogoproto.moretags) = "yaml:\"packet_fee\"", (gogoproto.nullable) = false]; + PacketFee packet_fee = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } // MsgPayPacketFeeAsyncResponse defines the response type for the PayPacketFeeAsync rpc diff --git a/third_party/proto/ibc/applications/interchain_accounts/controller/v1/controller.proto b/third_party/proto/ibc/applications/interchain_accounts/controller/v1/controller.proto index 072d2617c2..2e6bbe1a13 100644 --- a/third_party/proto/ibc/applications/interchain_accounts/controller/v1/controller.proto +++ b/third_party/proto/ibc/applications/interchain_accounts/controller/v1/controller.proto @@ -2,13 +2,11 @@ syntax = "proto3"; package ibc.applications.interchain_accounts.controller.v1; -option go_package = "github.com/cosmos/ibc-go/v6/modules/apps/27-interchain-accounts/controller/types"; - -import "gogoproto/gogo.proto"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller/types"; // Params defines the set of on-chain interchain accounts parameters. // The following parameters may be used to disable the controller submodule. message Params { // controller_enabled enables or disables the controller submodule. - bool controller_enabled = 1 [(gogoproto.moretags) = "yaml:\"controller_enabled\""]; + bool controller_enabled = 1; } diff --git a/third_party/proto/ibc/applications/interchain_accounts/controller/v1/query.proto b/third_party/proto/ibc/applications/interchain_accounts/controller/v1/query.proto index db7e888bf0..31885fcb2e 100644 --- a/third_party/proto/ibc/applications/interchain_accounts/controller/v1/query.proto +++ b/third_party/proto/ibc/applications/interchain_accounts/controller/v1/query.proto @@ -2,10 +2,9 @@ syntax = "proto3"; package ibc.applications.interchain_accounts.controller.v1; -option go_package = "github.com/cosmos/ibc-go/v6/modules/apps/27-interchain-accounts/controller/types"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller/types"; import "ibc/applications/interchain_accounts/controller/v1/controller.proto"; -import "gogoproto/gogo.proto"; import "google/api/annotations.proto"; // Query provides defines the gRPC querier service. @@ -25,7 +24,7 @@ service Query { // QueryInterchainAccountRequest is the request type for the Query/InterchainAccount RPC method. message QueryInterchainAccountRequest { string owner = 1; - string connection_id = 2 [(gogoproto.moretags) = "yaml:\"connection_id\""]; + string connection_id = 2; } // QueryInterchainAccountResponse the response type for the Query/InterchainAccount RPC method. diff --git a/third_party/proto/ibc/applications/interchain_accounts/controller/v1/tx.proto b/third_party/proto/ibc/applications/interchain_accounts/controller/v1/tx.proto index 31de5e7e82..1287cfa2d3 100644 --- a/third_party/proto/ibc/applications/interchain_accounts/controller/v1/tx.proto +++ b/third_party/proto/ibc/applications/interchain_accounts/controller/v1/tx.proto @@ -2,49 +2,79 @@ syntax = "proto3"; package ibc.applications.interchain_accounts.controller.v1; -option go_package = "github.com/cosmos/ibc-go/v6/modules/apps/27-interchain-accounts/controller/types"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller/types"; import "gogoproto/gogo.proto"; import "ibc/applications/interchain_accounts/v1/packet.proto"; +import "ibc/applications/interchain_accounts/controller/v1/controller.proto"; +import "cosmos/msg/v1/msg.proto"; // Msg defines the 27-interchain-accounts/controller Msg service. service Msg { + option (cosmos.msg.v1.service) = true; + // RegisterInterchainAccount defines a rpc handler for MsgRegisterInterchainAccount. rpc RegisterInterchainAccount(MsgRegisterInterchainAccount) returns (MsgRegisterInterchainAccountResponse); // SendTx defines a rpc handler for MsgSendTx. rpc SendTx(MsgSendTx) returns (MsgSendTxResponse); + // UpdateParams defines a rpc handler for MsgUpdateParams. + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); } -// MsgRegisterInterchainAccount defines the payload for Msg/MsgRegisterInterchainAccount +// MsgRegisterInterchainAccount defines the payload for Msg/RegisterAccount message MsgRegisterInterchainAccount { - option (gogoproto.equal) = false; + option (cosmos.msg.v1.signer) = "owner"; + option (gogoproto.goproto_getters) = false; string owner = 1; - string connection_id = 2 [(gogoproto.moretags) = "yaml:\"connection_id\""]; + string connection_id = 2; string version = 3; } -// MsgRegisterInterchainAccountResponse defines the response for Msg/MsgRegisterInterchainAccountResponse +// MsgRegisterInterchainAccountResponse defines the response for Msg/RegisterAccount message MsgRegisterInterchainAccountResponse { - string channel_id = 1 [(gogoproto.moretags) = "yaml:\"channel_id\""]; + option (gogoproto.goproto_getters) = false; + + string channel_id = 1; + string port_id = 2; } // MsgSendTx defines the payload for Msg/SendTx message MsgSendTx { - option (gogoproto.equal) = false; + option (cosmos.msg.v1.signer) = "owner"; + option (gogoproto.goproto_getters) = false; - string owner = 1; - string connection_id = 2 [(gogoproto.moretags) = "yaml:\"connection_id\""]; - ibc.applications.interchain_accounts.v1.InterchainAccountPacketData packet_data = 3 - [(gogoproto.moretags) = "yaml:\"packet_data\"", (gogoproto.nullable) = false]; + string owner = 1; + string connection_id = 2; + ibc.applications.interchain_accounts.v1.InterchainAccountPacketData packet_data = 3 [(gogoproto.nullable) = false]; // Relative timeout timestamp provided will be added to the current block time during transaction execution. // The timeout timestamp must be non-zero. - uint64 relative_timeout = 4 [(gogoproto.moretags) = "yaml:\"relative_timeout\""]; + uint64 relative_timeout = 4; } // MsgSendTxResponse defines the response for MsgSendTx message MsgSendTxResponse { + option (gogoproto.goproto_getters) = false; + uint64 sequence = 1; } + +// MsgUpdateParams defines the payload for Msg/UpdateParams +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "signer"; + + option (gogoproto.goproto_getters) = false; + + // signer address + string signer = 1; + + // params defines the 27-interchain-accounts/controller parameters to update. + // + // NOTE: All parameters must be supplied. + Params params = 2 [(gogoproto.nullable) = false]; +} + +// MsgUpdateParamsResponse defines the response for Msg/UpdateParams +message MsgUpdateParamsResponse {} \ No newline at end of file diff --git a/third_party/proto/ibc/applications/interchain_accounts/genesis/v1/genesis.proto b/third_party/proto/ibc/applications/interchain_accounts/genesis/v1/genesis.proto index c52bab7324..4393e5b0bc 100644 --- a/third_party/proto/ibc/applications/interchain_accounts/genesis/v1/genesis.proto +++ b/third_party/proto/ibc/applications/interchain_accounts/genesis/v1/genesis.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.applications.interchain_accounts.genesis.v1; -option go_package = "github.com/cosmos/ibc-go/v6/modules/apps/27-interchain-accounts/genesis/types"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/genesis/types"; import "gogoproto/gogo.proto"; import "ibc/applications/interchain_accounts/controller/v1/controller.proto"; @@ -10,44 +10,38 @@ import "ibc/applications/interchain_accounts/host/v1/host.proto"; // GenesisState defines the interchain accounts genesis state message GenesisState { - ControllerGenesisState controller_genesis_state = 1 - [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"controller_genesis_state\""]; - HostGenesisState host_genesis_state = 2 - [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"host_genesis_state\""]; + ControllerGenesisState controller_genesis_state = 1 [(gogoproto.nullable) = false]; + HostGenesisState host_genesis_state = 2 [(gogoproto.nullable) = false]; } // ControllerGenesisState defines the interchain accounts controller genesis state message ControllerGenesisState { - repeated ActiveChannel active_channels = 1 - [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"active_channels\""]; - repeated RegisteredInterchainAccount interchain_accounts = 2 - [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"interchain_accounts\""]; - repeated string ports = 3; - ibc.applications.interchain_accounts.controller.v1.Params params = 4 [(gogoproto.nullable) = false]; + repeated ActiveChannel active_channels = 1 [(gogoproto.nullable) = false]; + repeated RegisteredInterchainAccount interchain_accounts = 2 [(gogoproto.nullable) = false]; + repeated string ports = 3; + ibc.applications.interchain_accounts.controller.v1.Params params = 4 [(gogoproto.nullable) = false]; } // HostGenesisState defines the interchain accounts host genesis state message HostGenesisState { - repeated ActiveChannel active_channels = 1 - [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"active_channels\""]; - repeated RegisteredInterchainAccount interchain_accounts = 2 - [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"interchain_accounts\""]; - string port = 3; - ibc.applications.interchain_accounts.host.v1.Params params = 4 [(gogoproto.nullable) = false]; + repeated ActiveChannel active_channels = 1 [(gogoproto.nullable) = false]; + repeated RegisteredInterchainAccount interchain_accounts = 2 [(gogoproto.nullable) = false]; + string port = 3; + ibc.applications.interchain_accounts.host.v1.Params params = 4 [(gogoproto.nullable) = false]; } // ActiveChannel contains a connection ID, port ID and associated active channel ID, as well as a boolean flag to // indicate if the channel is middleware enabled message ActiveChannel { - string connection_id = 1 [(gogoproto.moretags) = "yaml:\"connection_id\""]; - string port_id = 2 [(gogoproto.moretags) = "yaml:\"port_id\""]; - string channel_id = 3 [(gogoproto.moretags) = "yaml:\"channel_id\""]; - bool is_middleware_enabled = 4 [(gogoproto.moretags) = "yaml:\"is_middleware_enabled\""]; + string connection_id = 1; + string port_id = 2; + string channel_id = 3; + bool is_middleware_enabled = 4; } // RegisteredInterchainAccount contains a connection ID, port ID and associated interchain account address message RegisteredInterchainAccount { - string connection_id = 1 [(gogoproto.moretags) = "yaml:\"connection_id\""]; - string port_id = 2 [(gogoproto.moretags) = "yaml:\"port_id\""]; - string account_address = 3 [(gogoproto.moretags) = "yaml:\"account_address\""]; + string connection_id = 1; + string port_id = 2; + string account_address = 3; } \ No newline at end of file diff --git a/third_party/proto/ibc/applications/interchain_accounts/host/v1/host.proto b/third_party/proto/ibc/applications/interchain_accounts/host/v1/host.proto index e5baae5d66..f036857113 100644 --- a/third_party/proto/ibc/applications/interchain_accounts/host/v1/host.proto +++ b/third_party/proto/ibc/applications/interchain_accounts/host/v1/host.proto @@ -2,15 +2,13 @@ syntax = "proto3"; package ibc.applications.interchain_accounts.host.v1; -option go_package = "github.com/cosmos/ibc-go/v6/modules/apps/27-interchain-accounts/host/types"; - -import "gogoproto/gogo.proto"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/host/types"; // Params defines the set of on-chain interchain accounts parameters. // The following parameters may be used to disable the host submodule. message Params { // host_enabled enables or disables the host submodule. - bool host_enabled = 1 [(gogoproto.moretags) = "yaml:\"host_enabled\""]; + bool host_enabled = 1; // allow_messages defines a list of sdk message typeURLs allowed to be executed on a host chain. - repeated string allow_messages = 2 [(gogoproto.moretags) = "yaml:\"allow_messages\""]; + repeated string allow_messages = 2; } diff --git a/third_party/proto/ibc/applications/interchain_accounts/host/v1/query.proto b/third_party/proto/ibc/applications/interchain_accounts/host/v1/query.proto index 4b77391737..6f206a14c8 100644 --- a/third_party/proto/ibc/applications/interchain_accounts/host/v1/query.proto +++ b/third_party/proto/ibc/applications/interchain_accounts/host/v1/query.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.applications.interchain_accounts.host.v1; -option go_package = "github.com/cosmos/ibc-go/v6/modules/apps/27-interchain-accounts/host/types"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/host/types"; import "google/api/annotations.proto"; import "ibc/applications/interchain_accounts/host/v1/host.proto"; diff --git a/third_party/proto/ibc/applications/interchain_accounts/host/v1/tx.proto b/third_party/proto/ibc/applications/interchain_accounts/host/v1/tx.proto new file mode 100644 index 0000000000..5a8073bc93 --- /dev/null +++ b/third_party/proto/ibc/applications/interchain_accounts/host/v1/tx.proto @@ -0,0 +1,35 @@ +syntax = "proto3"; + +package ibc.applications.interchain_accounts.host.v1; + +option go_package = "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/host/types"; + +import "gogoproto/gogo.proto"; +import "cosmos/msg/v1/msg.proto"; +import "ibc/applications/interchain_accounts/host/v1/host.proto"; + +// Msg defines the 27-interchain-accounts/host Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // UpdateParams defines a rpc handler for MsgUpdateParams. + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); +} + +// MsgUpdateParams defines the payload for Msg/UpdateParams +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "signer"; + + option (gogoproto.goproto_getters) = false; + + // signer address + string signer = 1; + + // params defines the 27-interchain-accounts/host parameters to update. + // + // NOTE: All parameters must be supplied. + Params params = 2 [(gogoproto.nullable) = false]; +} + +// MsgUpdateParamsResponse defines the response for Msg/UpdateParams +message MsgUpdateParamsResponse {} diff --git a/third_party/proto/ibc/applications/interchain_accounts/v1/account.proto b/third_party/proto/ibc/applications/interchain_accounts/v1/account.proto index 56ea941e7a..4a6947c1c6 100644 --- a/third_party/proto/ibc/applications/interchain_accounts/v1/account.proto +++ b/third_party/proto/ibc/applications/interchain_accounts/v1/account.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.applications.interchain_accounts.v1; -option go_package = "github.com/cosmos/ibc-go/v6/modules/apps/27-interchain-accounts/types"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/types"; import "cosmos_proto/cosmos.proto"; import "gogoproto/gogo.proto"; @@ -12,9 +12,8 @@ import "cosmos/auth/v1beta1/auth.proto"; message InterchainAccount { option (gogoproto.goproto_getters) = false; option (gogoproto.goproto_stringer) = false; - option (cosmos_proto.implements_interface) = "InterchainAccountI"; + option (cosmos_proto.implements_interface) = "ibc.applications.interchain_accounts.v1.InterchainAccountI"; - cosmos.auth.v1beta1.BaseAccount base_account = 1 - [(gogoproto.embed) = true, (gogoproto.moretags) = "yaml:\"base_account\""]; - string account_owner = 2 [(gogoproto.moretags) = "yaml:\"account_owner\""]; + cosmos.auth.v1beta1.BaseAccount base_account = 1 [(gogoproto.embed) = true]; + string account_owner = 2; } diff --git a/third_party/proto/ibc/applications/interchain_accounts/v1/metadata.proto b/third_party/proto/ibc/applications/interchain_accounts/v1/metadata.proto index eba844f95a..df72b41eb6 100644 --- a/third_party/proto/ibc/applications/interchain_accounts/v1/metadata.proto +++ b/third_party/proto/ibc/applications/interchain_accounts/v1/metadata.proto @@ -2,9 +2,7 @@ syntax = "proto3"; package ibc.applications.interchain_accounts.v1; -option go_package = "github.com/cosmos/ibc-go/v6/modules/apps/27-interchain-accounts/types"; - -import "gogoproto/gogo.proto"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/types"; // Metadata defines a set of protocol specific data encoded into the ICS27 channel version bytestring // See ICS004: https://github.com/cosmos/ibc/tree/master/spec/core/ics-004-channel-and-packet-semantics#Versioning @@ -12,9 +10,9 @@ message Metadata { // version defines the ICS27 protocol version string version = 1; // controller_connection_id is the connection identifier associated with the controller chain - string controller_connection_id = 2 [(gogoproto.moretags) = "yaml:\"controller_connection_id\""]; + string controller_connection_id = 2; // host_connection_id is the connection identifier associated with the host chain - string host_connection_id = 3 [(gogoproto.moretags) = "yaml:\"host_connection_id\""]; + string host_connection_id = 3; // address defines the interchain account address to be fulfilled upon the OnChanOpenTry handshake step // NOTE: the address field is empty on the OnChanOpenInit handshake step string address = 4; diff --git a/third_party/proto/ibc/applications/interchain_accounts/v1/packet.proto b/third_party/proto/ibc/applications/interchain_accounts/v1/packet.proto index ac337fd591..f75a1463e9 100644 --- a/third_party/proto/ibc/applications/interchain_accounts/v1/packet.proto +++ b/third_party/proto/ibc/applications/interchain_accounts/v1/packet.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.applications.interchain_accounts.v1; -option go_package = "github.com/cosmos/ibc-go/v6/modules/apps/27-interchain-accounts/types"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/types"; import "google/protobuf/any.proto"; import "gogoproto/gogo.proto"; diff --git a/third_party/proto/ibc/applications/transfer/v1/authz.proto b/third_party/proto/ibc/applications/transfer/v1/authz.proto index db3e0bb763..7b7a9f0846 100644 --- a/third_party/proto/ibc/applications/transfer/v1/authz.proto +++ b/third_party/proto/ibc/applications/transfer/v1/authz.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.applications.transfer.v1; -option go_package = "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types"; import "cosmos_proto/cosmos.proto"; import "gogoproto/gogo.proto"; @@ -11,9 +11,9 @@ import "cosmos/base/v1beta1/coin.proto"; // Allocation defines the spend limit for a particular port and channel message Allocation { // the port on which the packet will be sent - string source_port = 1 [(gogoproto.moretags) = "yaml:\"source_port\""]; + string source_port = 1; // the channel by which the packet will be sent - string source_channel = 2 [(gogoproto.moretags) = "yaml:\"source_channel\""]; + string source_channel = 2; // spend limitation on the channel repeated cosmos.base.v1beta1.Coin spend_limit = 3 [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; @@ -24,7 +24,7 @@ message Allocation { // TransferAuthorization allows the grantee to spend up to spend_limit coins from // the granter's account for ibc transfer on a specific channel message TransferAuthorization { - option (cosmos_proto.implements_interface) = "Authorization"; + option (cosmos_proto.implements_interface) = "cosmos.authz.v1beta1.Authorization"; // port and channel amounts repeated Allocation allocations = 1 [(gogoproto.nullable) = false]; diff --git a/third_party/proto/ibc/applications/transfer/v1/genesis.proto b/third_party/proto/ibc/applications/transfer/v1/genesis.proto index 71d3f383c5..f7d707f6cc 100644 --- a/third_party/proto/ibc/applications/transfer/v1/genesis.proto +++ b/third_party/proto/ibc/applications/transfer/v1/genesis.proto @@ -2,18 +2,19 @@ syntax = "proto3"; package ibc.applications.transfer.v1; -option go_package = "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types"; import "ibc/applications/transfer/v1/transfer.proto"; +import "cosmos/base/v1beta1/coin.proto"; import "gogoproto/gogo.proto"; // GenesisState defines the ibc-transfer genesis state message GenesisState { - string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; - repeated DenomTrace denom_traces = 2 [ - (gogoproto.castrepeated) = "Traces", - (gogoproto.nullable) = false, - (gogoproto.moretags) = "yaml:\"denom_traces\"" - ]; - Params params = 3 [(gogoproto.nullable) = false]; + string port_id = 1; + repeated DenomTrace denom_traces = 2 [(gogoproto.castrepeated) = "Traces", (gogoproto.nullable) = false]; + Params params = 3 [(gogoproto.nullable) = false]; + // total_escrowed contains the total amount of tokens escrowed + // by the transfer module + repeated cosmos.base.v1beta1.Coin total_escrowed = 4 + [(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", (gogoproto.nullable) = false]; } diff --git a/third_party/proto/ibc/applications/transfer/v1/query.proto b/third_party/proto/ibc/applications/transfer/v1/query.proto index cf8896fea2..788296718f 100644 --- a/third_party/proto/ibc/applications/transfer/v1/query.proto +++ b/third_party/proto/ibc/applications/transfer/v1/query.proto @@ -3,24 +3,25 @@ syntax = "proto3"; package ibc.applications.transfer.v1; import "gogoproto/gogo.proto"; +import "cosmos/base/v1beta1/coin.proto"; import "cosmos/base/query/v1beta1/pagination.proto"; import "ibc/applications/transfer/v1/transfer.proto"; import "google/api/annotations.proto"; -option go_package = "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types"; // Query provides defines the gRPC querier service. service Query { - // DenomTrace queries a denomination trace information. - rpc DenomTrace(QueryDenomTraceRequest) returns (QueryDenomTraceResponse) { - option (google.api.http).get = "/ibc/apps/transfer/v1/denom_traces/{hash}"; - } - // DenomTraces queries all denomination traces. rpc DenomTraces(QueryDenomTracesRequest) returns (QueryDenomTracesResponse) { option (google.api.http).get = "/ibc/apps/transfer/v1/denom_traces"; } + // DenomTrace queries a denomination trace information. + rpc DenomTrace(QueryDenomTraceRequest) returns (QueryDenomTraceResponse) { + option (google.api.http).get = "/ibc/apps/transfer/v1/denom_traces/{hash=**}"; + } + // Params queries all parameters of the ibc-transfer module. rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { option (google.api.http).get = "/ibc/apps/transfer/v1/params"; @@ -28,13 +29,18 @@ service Query { // DenomHash queries a denomination hash information. rpc DenomHash(QueryDenomHashRequest) returns (QueryDenomHashResponse) { - option (google.api.http).get = "/ibc/apps/transfer/v1/denom_hashes/{trace}"; + option (google.api.http).get = "/ibc/apps/transfer/v1/denom_hashes/{trace=**}"; } // EscrowAddress returns the escrow address for a particular port and channel id. rpc EscrowAddress(QueryEscrowAddressRequest) returns (QueryEscrowAddressResponse) { option (google.api.http).get = "/ibc/apps/transfer/v1/channels/{channel_id}/ports/{port_id}/escrow_address"; } + + // TotalEscrowForDenom returns the total amount of tokens in escrow based on the denom. + rpc TotalEscrowForDenom(QueryTotalEscrowForDenomRequest) returns (QueryTotalEscrowForDenomResponse) { + option (google.api.http).get = "/ibc/apps/transfer/v1/denoms/{denom=**}/total_escrow"; + } } // QueryDenomTraceRequest is the request type for the Query/DenomTrace RPC @@ -102,4 +108,14 @@ message QueryEscrowAddressRequest { message QueryEscrowAddressResponse { // the escrow account address string escrow_address = 1; -} \ No newline at end of file +} + +// QueryTotalEscrowForDenomRequest is the request type for TotalEscrowForDenom RPC method. +message QueryTotalEscrowForDenomRequest { + string denom = 1; +} + +// QueryTotalEscrowForDenomResponse is the response type for TotalEscrowForDenom RPC method. +message QueryTotalEscrowForDenomResponse { + cosmos.base.v1beta1.Coin amount = 1 [(gogoproto.nullable) = false]; +} diff --git a/third_party/proto/ibc/applications/transfer/v1/transfer.proto b/third_party/proto/ibc/applications/transfer/v1/transfer.proto index 9c60ad65db..12914b7a4b 100644 --- a/third_party/proto/ibc/applications/transfer/v1/transfer.proto +++ b/third_party/proto/ibc/applications/transfer/v1/transfer.proto @@ -2,9 +2,7 @@ syntax = "proto3"; package ibc.applications.transfer.v1; -option go_package = "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types"; - -import "gogoproto/gogo.proto"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types"; // DenomTrace contains the base denomination for ICS20 fungible tokens and the // source tracing information path. @@ -23,8 +21,8 @@ message DenomTrace { message Params { // send_enabled enables or disables all cross-chain token transfers from this // chain. - bool send_enabled = 1 [(gogoproto.moretags) = "yaml:\"send_enabled\""]; + bool send_enabled = 1; // receive_enabled enables or disables all cross-chain token transfers to this // chain. - bool receive_enabled = 2 [(gogoproto.moretags) = "yaml:\"receive_enabled\""]; -} + bool receive_enabled = 2; +} \ No newline at end of file diff --git a/third_party/proto/ibc/applications/transfer/v1/tx.proto b/third_party/proto/ibc/applications/transfer/v1/tx.proto index 7504a905a7..42c70d3bed 100644 --- a/third_party/proto/ibc/applications/transfer/v1/tx.proto +++ b/third_party/proto/ibc/applications/transfer/v1/tx.proto @@ -2,48 +2,78 @@ syntax = "proto3"; package ibc.applications.transfer.v1; -option go_package = "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types"; +import "amino/amino.proto"; import "gogoproto/gogo.proto"; +import "cosmos/msg/v1/msg.proto"; import "cosmos/base/v1beta1/coin.proto"; import "ibc/core/client/v1/client.proto"; +import "ibc/applications/transfer/v1/transfer.proto"; // Msg defines the ibc/transfer Msg service. service Msg { + option (cosmos.msg.v1.service) = true; + // Transfer defines a rpc handler method for MsgTransfer. rpc Transfer(MsgTransfer) returns (MsgTransferResponse); + + // UpdateParams defines a rpc handler for MsgUpdateParams. + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); } // MsgTransfer defines a msg to transfer fungible tokens (i.e Coins) between // ICS20 enabled chains. See ICS Spec here: // https://github.com/cosmos/ibc/tree/master/spec/app/ics-020-fungible-token-transfer#data-structures message MsgTransfer { - option (gogoproto.equal) = false; + option (amino.name) = "cosmos-sdk/MsgTransfer"; + option (cosmos.msg.v1.signer) = "sender"; + option (gogoproto.goproto_getters) = false; // the port on which the packet will be sent - string source_port = 1 [(gogoproto.moretags) = "yaml:\"source_port\""]; + string source_port = 1; // the channel by which the packet will be sent - string source_channel = 2 [(gogoproto.moretags) = "yaml:\"source_channel\""]; + string source_channel = 2; // the tokens to be transferred - cosmos.base.v1beta1.Coin token = 3 [(gogoproto.nullable) = false]; + cosmos.base.v1beta1.Coin token = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // the sender address string sender = 4; // the recipient address on the destination chain string receiver = 5; // Timeout height relative to the current block height. // The timeout is disabled when set to 0. - ibc.core.client.v1.Height timeout_height = 6 - [(gogoproto.moretags) = "yaml:\"timeout_height\"", (gogoproto.nullable) = false]; + ibc.core.client.v1.Height timeout_height = 6 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // Timeout timestamp in absolute nanoseconds since unix epoch. // The timeout is disabled when set to 0. - uint64 timeout_timestamp = 7 [(gogoproto.moretags) = "yaml:\"timeout_timestamp\""]; + uint64 timeout_timestamp = 7; // optional memo string memo = 8; } // MsgTransferResponse defines the Msg/Transfer response type. message MsgTransferResponse { + option (gogoproto.goproto_getters) = false; + // sequence number of the transfer packet sent uint64 sequence = 1; } + +// MsgUpdateParams is the Msg/UpdateParams request type. +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "signer"; + + option (gogoproto.goproto_getters) = false; + + // signer address + string signer = 1; + + // params defines the transfer parameters to update. + // + // NOTE: All parameters must be supplied. + Params params = 2 [(gogoproto.nullable) = false]; +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +message MsgUpdateParamsResponse {} \ No newline at end of file diff --git a/third_party/proto/ibc/applications/transfer/v2/packet.proto b/third_party/proto/ibc/applications/transfer/v2/packet.proto index 5b3b004c6e..bff35bdd6d 100644 --- a/third_party/proto/ibc/applications/transfer/v2/packet.proto +++ b/third_party/proto/ibc/applications/transfer/v2/packet.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.applications.transfer.v2; -option go_package = "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types"; // FungibleTokenPacketData defines a struct for the packet payload // See FungibleTokenPacketData spec: diff --git a/third_party/proto/ibc/core/channel/v1/channel.proto b/third_party/proto/ibc/core/channel/v1/channel.proto index 2d301af2fc..44c3240e2b 100644 --- a/third_party/proto/ibc/core/channel/v1/channel.proto +++ b/third_party/proto/ibc/core/channel/v1/channel.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.core.channel.v1; -option go_package = "github.com/cosmos/ibc-go/v6/modules/core/04-channel/types"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types"; import "gogoproto/gogo.proto"; import "ibc/core/client/v1/client.proto"; @@ -21,7 +21,7 @@ message Channel { Counterparty counterparty = 3 [(gogoproto.nullable) = false]; // list of connection identifiers, in order, along which packets sent on // this channel will travel - repeated string connection_hops = 4 [(gogoproto.moretags) = "yaml:\"connection_hops\""]; + repeated string connection_hops = 4; // opaque channel version, which is agreed upon during the handshake string version = 5; } @@ -39,7 +39,7 @@ message IdentifiedChannel { Counterparty counterparty = 3 [(gogoproto.nullable) = false]; // list of connection identifiers, in order, along which packets sent on // this channel will travel - repeated string connection_hops = 4 [(gogoproto.moretags) = "yaml:\"connection_hops\""]; + repeated string connection_hops = 4; // opaque channel version, which is agreed upon during the handshake string version = 5; // port identifier @@ -85,9 +85,9 @@ message Counterparty { option (gogoproto.goproto_getters) = false; // port on the counterparty chain which owns the other end of the channel. - string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; + string port_id = 1; // channel end on the counterparty chain - string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; + string channel_id = 2; } // Packet defines a type that carries data across different chains through IBC @@ -99,20 +99,19 @@ message Packet { // with a later sequence number. uint64 sequence = 1; // identifies the port on the sending chain. - string source_port = 2 [(gogoproto.moretags) = "yaml:\"source_port\""]; + string source_port = 2; // identifies the channel end on the sending chain. - string source_channel = 3 [(gogoproto.moretags) = "yaml:\"source_channel\""]; + string source_channel = 3; // identifies the port on the receiving chain. - string destination_port = 4 [(gogoproto.moretags) = "yaml:\"destination_port\""]; + string destination_port = 4; // identifies the channel end on the receiving chain. - string destination_channel = 5 [(gogoproto.moretags) = "yaml:\"destination_channel\""]; + string destination_channel = 5; // actual opaque bytes transferred directly to the application module bytes data = 6; // block height after which the packet times out - ibc.core.client.v1.Height timeout_height = 7 - [(gogoproto.moretags) = "yaml:\"timeout_height\"", (gogoproto.nullable) = false]; + ibc.core.client.v1.Height timeout_height = 7 [(gogoproto.nullable) = false]; // block timestamp (in nanoseconds) after which the packet times out - uint64 timeout_timestamp = 8 [(gogoproto.moretags) = "yaml:\"timeout_timestamp\""]; + uint64 timeout_timestamp = 8; } // PacketState defines the generic type necessary to retrieve and store @@ -123,9 +122,9 @@ message PacketState { option (gogoproto.goproto_getters) = false; // channel port identifier. - string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; + string port_id = 1; // channel unique identifier. - string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; + string channel_id = 2; // packet sequence. uint64 sequence = 3; // embedded data that represents packet state. @@ -139,9 +138,9 @@ message PacketId { option (gogoproto.goproto_getters) = false; // channel port identifier - string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; + string port_id = 1; // channel unique identifier - string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; + string channel_id = 2; // packet sequence uint64 sequence = 3; } @@ -160,3 +159,13 @@ message Acknowledgement { string error = 22; } } + +// Timeout defines an execution deadline structure for 04-channel handlers. +// This includes packet lifecycle handlers as well as the upgrade handshake handlers. +// A valid Timeout contains either one or both of a timestamp and block height (sequence). +message Timeout { + // block height after which the packet or upgrade times out + ibc.core.client.v1.Height height = 1 [(gogoproto.nullable) = false]; + // block timestamp (in nanoseconds) after which the packet or upgrade times out + uint64 timestamp = 2; +} diff --git a/third_party/proto/ibc/core/channel/v1/genesis.proto b/third_party/proto/ibc/core/channel/v1/genesis.proto index ef0e514827..382a8048d4 100644 --- a/third_party/proto/ibc/core/channel/v1/genesis.proto +++ b/third_party/proto/ibc/core/channel/v1/genesis.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.core.channel.v1; -option go_package = "github.com/cosmos/ibc-go/v6/modules/core/04-channel/types"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types"; import "gogoproto/gogo.proto"; import "ibc/core/channel/v1/channel.proto"; @@ -13,20 +13,17 @@ message GenesisState { repeated PacketState acknowledgements = 2 [(gogoproto.nullable) = false]; repeated PacketState commitments = 3 [(gogoproto.nullable) = false]; repeated PacketState receipts = 4 [(gogoproto.nullable) = false]; - repeated PacketSequence send_sequences = 5 - [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"send_sequences\""]; - repeated PacketSequence recv_sequences = 6 - [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"recv_sequences\""]; - repeated PacketSequence ack_sequences = 7 - [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"ack_sequences\""]; + repeated PacketSequence send_sequences = 5 [(gogoproto.nullable) = false]; + repeated PacketSequence recv_sequences = 6 [(gogoproto.nullable) = false]; + repeated PacketSequence ack_sequences = 7 [(gogoproto.nullable) = false]; // the sequence for the next generated channel identifier - uint64 next_channel_sequence = 8 [(gogoproto.moretags) = "yaml:\"next_channel_sequence\""]; + uint64 next_channel_sequence = 8; } // PacketSequence defines the genesis type necessary to retrieve and store // next send and receive sequences. message PacketSequence { - string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; - string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; + string port_id = 1; + string channel_id = 2; uint64 sequence = 3; } diff --git a/third_party/proto/ibc/core/channel/v1/query.proto b/third_party/proto/ibc/core/channel/v1/query.proto index f22a3753ef..42c4caea7d 100644 --- a/third_party/proto/ibc/core/channel/v1/query.proto +++ b/third_party/proto/ibc/core/channel/v1/query.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.core.channel.v1; -option go_package = "github.com/cosmos/ibc-go/v6/modules/core/04-channel/types"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types"; import "ibc/core/client/v1/client.proto"; import "cosmos/base/query/v1beta1/pagination.proto"; @@ -98,6 +98,12 @@ service Query { option (google.api.http).get = "/ibc/core/channel/v1/channels/{channel_id}/" "ports/{port_id}/next_sequence"; } + + // NextSequenceSend returns the next send sequence for a given channel. + rpc NextSequenceSend(QueryNextSequenceSendRequest) returns (QueryNextSequenceSendResponse) { + option (google.api.http).get = "/ibc/core/channel/v1/channels/{channel_id}/" + "ports/{port_id}/next_sequence_send"; + } } // QueryChannelRequest is the request type for the Query/Channel RPC method @@ -374,3 +380,23 @@ message QueryNextSequenceReceiveResponse { // height at which the proof was retrieved ibc.core.client.v1.Height proof_height = 3 [(gogoproto.nullable) = false]; } + +// QueryNextSequenceSendRequest is the request type for the +// Query/QueryNextSequenceSend RPC method +message QueryNextSequenceSendRequest { + // port unique identifier + string port_id = 1; + // channel unique identifier + string channel_id = 2; +} + +// QueryNextSequenceSendResponse is the request type for the +// Query/QueryNextSequenceSend RPC method +message QueryNextSequenceSendResponse { + // next sequence send number + uint64 next_sequence_send = 1; + // merkle proof of existence + bytes proof = 2; + // height at which the proof was retrieved + ibc.core.client.v1.Height proof_height = 3 [(gogoproto.nullable) = false]; +} \ No newline at end of file diff --git a/third_party/proto/ibc/core/channel/v1/tx.proto b/third_party/proto/ibc/core/channel/v1/tx.proto index eba65f1ebb..4b9ad3d75c 100644 --- a/third_party/proto/ibc/core/channel/v1/tx.proto +++ b/third_party/proto/ibc/core/channel/v1/tx.proto @@ -2,14 +2,17 @@ syntax = "proto3"; package ibc.core.channel.v1; -option go_package = "github.com/cosmos/ibc-go/v6/modules/core/04-channel/types"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types"; import "gogoproto/gogo.proto"; import "ibc/core/client/v1/client.proto"; import "ibc/core/channel/v1/channel.proto"; +import "cosmos/msg/v1/msg.proto"; // Msg defines the ibc/channel Msg service. service Msg { + option (cosmos.msg.v1.service) = true; + // ChannelOpenInit defines a rpc handler method for MsgChannelOpenInit. rpc ChannelOpenInit(MsgChannelOpenInit) returns (MsgChannelOpenInitResponse); @@ -57,17 +60,20 @@ enum ResponseResultType { // MsgChannelOpenInit defines an sdk.Msg to initialize a channel handshake. It // is called by a relayer on Chain A. message MsgChannelOpenInit { - option (gogoproto.equal) = false; + option (cosmos.msg.v1.signer) = "signer"; + option (gogoproto.goproto_getters) = false; - string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; + string port_id = 1; Channel channel = 2 [(gogoproto.nullable) = false]; string signer = 3; } // MsgChannelOpenInitResponse defines the Msg/ChannelOpenInit response type. message MsgChannelOpenInitResponse { - string channel_id = 1 [(gogoproto.moretags) = "yaml:\"channel_id\""]; + option (gogoproto.goproto_getters) = false; + + string channel_id = 1; string version = 2; } @@ -75,40 +81,43 @@ message MsgChannelOpenInitResponse { // on Chain B. The version field within the Channel field has been deprecated. Its // value will be ignored by core IBC. message MsgChannelOpenTry { - option (gogoproto.equal) = false; + option (cosmos.msg.v1.signer) = "signer"; + option (gogoproto.goproto_getters) = false; - string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; + string port_id = 1; // Deprecated: this field is unused. Crossing hello's are no longer supported in core IBC. - string previous_channel_id = 2 [deprecated = true, (gogoproto.moretags) = "yaml:\"previous_channel_id\""]; + string previous_channel_id = 2 [deprecated = true]; // NOTE: the version field within the channel has been deprecated. Its value will be ignored by core IBC. Channel channel = 3 [(gogoproto.nullable) = false]; - string counterparty_version = 4 [(gogoproto.moretags) = "yaml:\"counterparty_version\""]; - bytes proof_init = 5 [(gogoproto.moretags) = "yaml:\"proof_init\""]; - ibc.core.client.v1.Height proof_height = 6 - [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; - string signer = 7; + string counterparty_version = 4; + bytes proof_init = 5; + ibc.core.client.v1.Height proof_height = 6 [(gogoproto.nullable) = false]; + string signer = 7; } // MsgChannelOpenTryResponse defines the Msg/ChannelOpenTry response type. message MsgChannelOpenTryResponse { - string version = 1; + option (gogoproto.goproto_getters) = false; + + string version = 1; + string channel_id = 2; } // MsgChannelOpenAck defines a msg sent by a Relayer to Chain A to acknowledge // the change of channel state to TRYOPEN on Chain B. message MsgChannelOpenAck { - option (gogoproto.equal) = false; + option (cosmos.msg.v1.signer) = "signer"; + option (gogoproto.goproto_getters) = false; - string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; - string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; - string counterparty_channel_id = 3 [(gogoproto.moretags) = "yaml:\"counterparty_channel_id\""]; - string counterparty_version = 4 [(gogoproto.moretags) = "yaml:\"counterparty_version\""]; - bytes proof_try = 5 [(gogoproto.moretags) = "yaml:\"proof_try\""]; - ibc.core.client.v1.Height proof_height = 6 - [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; - string signer = 7; + string port_id = 1; + string channel_id = 2; + string counterparty_channel_id = 3; + string counterparty_version = 4; + bytes proof_try = 5; + ibc.core.client.v1.Height proof_height = 6 [(gogoproto.nullable) = false]; + string signer = 7; } // MsgChannelOpenAckResponse defines the Msg/ChannelOpenAck response type. @@ -117,15 +126,15 @@ message MsgChannelOpenAckResponse {} // MsgChannelOpenConfirm defines a msg sent by a Relayer to Chain B to // acknowledge the change of channel state to OPEN on Chain A. message MsgChannelOpenConfirm { - option (gogoproto.equal) = false; + option (cosmos.msg.v1.signer) = "signer"; + option (gogoproto.goproto_getters) = false; - string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; - string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; - bytes proof_ack = 3 [(gogoproto.moretags) = "yaml:\"proof_ack\""]; - ibc.core.client.v1.Height proof_height = 4 - [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; - string signer = 5; + string port_id = 1; + string channel_id = 2; + bytes proof_ack = 3; + ibc.core.client.v1.Height proof_height = 4 [(gogoproto.nullable) = false]; + string signer = 5; } // MsgChannelOpenConfirmResponse defines the Msg/ChannelOpenConfirm response @@ -135,11 +144,12 @@ message MsgChannelOpenConfirmResponse {} // MsgChannelCloseInit defines a msg sent by a Relayer to Chain A // to close a channel with Chain B. message MsgChannelCloseInit { - option (gogoproto.equal) = false; + option (cosmos.msg.v1.signer) = "signer"; + option (gogoproto.goproto_getters) = false; - string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; - string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; + string port_id = 1; + string channel_id = 2; string signer = 3; } @@ -149,15 +159,15 @@ message MsgChannelCloseInitResponse {} // MsgChannelCloseConfirm defines a msg sent by a Relayer to Chain B // to acknowledge the change of channel state to CLOSED on Chain A. message MsgChannelCloseConfirm { - option (gogoproto.equal) = false; + option (cosmos.msg.v1.signer) = "signer"; + option (gogoproto.goproto_getters) = false; - string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; - string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; - bytes proof_init = 3 [(gogoproto.moretags) = "yaml:\"proof_init\""]; - ibc.core.client.v1.Height proof_height = 4 - [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; - string signer = 5; + string port_id = 1; + string channel_id = 2; + bytes proof_init = 3; + ibc.core.client.v1.Height proof_height = 4 [(gogoproto.nullable) = false]; + string signer = 5; } // MsgChannelCloseConfirmResponse defines the Msg/ChannelCloseConfirm response @@ -166,14 +176,14 @@ message MsgChannelCloseConfirmResponse {} // MsgRecvPacket receives incoming IBC packet message MsgRecvPacket { - option (gogoproto.equal) = false; + option (cosmos.msg.v1.signer) = "signer"; + option (gogoproto.goproto_getters) = false; Packet packet = 1 [(gogoproto.nullable) = false]; - bytes proof_commitment = 2 [(gogoproto.moretags) = "yaml:\"proof_commitment\""]; - ibc.core.client.v1.Height proof_height = 3 - [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; - string signer = 4; + bytes proof_commitment = 2; + ibc.core.client.v1.Height proof_height = 3 [(gogoproto.nullable) = false]; + string signer = 4; } // MsgRecvPacketResponse defines the Msg/RecvPacket response type. @@ -185,15 +195,15 @@ message MsgRecvPacketResponse { // MsgTimeout receives timed-out packet message MsgTimeout { - option (gogoproto.equal) = false; + option (cosmos.msg.v1.signer) = "signer"; + option (gogoproto.goproto_getters) = false; - Packet packet = 1 [(gogoproto.nullable) = false]; - bytes proof_unreceived = 2 [(gogoproto.moretags) = "yaml:\"proof_unreceived\""]; - ibc.core.client.v1.Height proof_height = 3 - [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; - uint64 next_sequence_recv = 4 [(gogoproto.moretags) = "yaml:\"next_sequence_recv\""]; - string signer = 5; + Packet packet = 1 [(gogoproto.nullable) = false]; + bytes proof_unreceived = 2; + ibc.core.client.v1.Height proof_height = 3 [(gogoproto.nullable) = false]; + uint64 next_sequence_recv = 4; + string signer = 5; } // MsgTimeoutResponse defines the Msg/Timeout response type. @@ -205,16 +215,16 @@ message MsgTimeoutResponse { // MsgTimeoutOnClose timed-out packet upon counterparty channel closure. message MsgTimeoutOnClose { - option (gogoproto.equal) = false; + option (cosmos.msg.v1.signer) = "signer"; + option (gogoproto.goproto_getters) = false; - Packet packet = 1 [(gogoproto.nullable) = false]; - bytes proof_unreceived = 2 [(gogoproto.moretags) = "yaml:\"proof_unreceived\""]; - bytes proof_close = 3 [(gogoproto.moretags) = "yaml:\"proof_close\""]; - ibc.core.client.v1.Height proof_height = 4 - [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; - uint64 next_sequence_recv = 5 [(gogoproto.moretags) = "yaml:\"next_sequence_recv\""]; - string signer = 6; + Packet packet = 1 [(gogoproto.nullable) = false]; + bytes proof_unreceived = 2; + bytes proof_close = 3; + ibc.core.client.v1.Height proof_height = 4 [(gogoproto.nullable) = false]; + uint64 next_sequence_recv = 5; + string signer = 6; } // MsgTimeoutOnCloseResponse defines the Msg/TimeoutOnClose response type. @@ -226,15 +236,15 @@ message MsgTimeoutOnCloseResponse { // MsgAcknowledgement receives incoming IBC acknowledgement message MsgAcknowledgement { - option (gogoproto.equal) = false; + option (cosmos.msg.v1.signer) = "signer"; + option (gogoproto.goproto_getters) = false; Packet packet = 1 [(gogoproto.nullable) = false]; bytes acknowledgement = 2; - bytes proof_acked = 3 [(gogoproto.moretags) = "yaml:\"proof_acked\""]; - ibc.core.client.v1.Height proof_height = 4 - [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; - string signer = 5; + bytes proof_acked = 3; + ibc.core.client.v1.Height proof_height = 4 [(gogoproto.nullable) = false]; + string signer = 5; } // MsgAcknowledgementResponse defines the Msg/Acknowledgement response type. diff --git a/third_party/proto/ibc/core/client/v1/client.proto b/third_party/proto/ibc/core/client/v1/client.proto index 0f1e6ab2c1..7a09e360ac 100644 --- a/third_party/proto/ibc/core/client/v1/client.proto +++ b/third_party/proto/ibc/core/client/v1/client.proto @@ -2,20 +2,20 @@ syntax = "proto3"; package ibc.core.client.v1; -option go_package = "github.com/cosmos/ibc-go/v6/modules/core/02-client/types"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/core/02-client/types"; -import "gogoproto/gogo.proto"; -import "google/protobuf/any.proto"; import "cosmos/upgrade/v1beta1/upgrade.proto"; import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; +import "google/protobuf/any.proto"; // IdentifiedClientState defines a client state with an additional client // identifier field. message IdentifiedClientState { // client identifier - string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""]; + string client_id = 1; // client state - google.protobuf.Any client_state = 2 [(gogoproto.moretags) = "yaml:\"client_state\""]; + google.protobuf.Any client_state = 2; } // ConsensusStateWithHeight defines a consensus state with an additional height @@ -24,26 +24,58 @@ message ConsensusStateWithHeight { // consensus state height Height height = 1 [(gogoproto.nullable) = false]; // consensus state - google.protobuf.Any consensus_state = 2 [(gogoproto.moretags) = "yaml:\"consensus_state\""]; + google.protobuf.Any consensus_state = 2; } // ClientConsensusStates defines all the stored consensus states for a given // client. message ClientConsensusStates { // client identifier - string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""]; + string client_id = 1; // consensus states and their heights associated with the client - repeated ConsensusStateWithHeight consensus_states = 2 - [(gogoproto.moretags) = "yaml:\"consensus_states\"", (gogoproto.nullable) = false]; + repeated ConsensusStateWithHeight consensus_states = 2 [(gogoproto.nullable) = false]; } -// ClientUpdateProposal is a governance proposal. If it passes, the substitute +// Height is a monotonically increasing data type +// that can be compared against another Height for the purposes of updating and +// freezing clients +// +// Normally the RevisionHeight is incremented at each height while keeping +// RevisionNumber 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 RevisionNumber is incremented so that +// height continues to be monitonically increasing even as the RevisionHeight +// gets reset +message Height { + option (gogoproto.goproto_getters) = false; + option (gogoproto.goproto_stringer) = false; + + // the revision that the client is currently on + uint64 revision_number = 1; + // the height within the given revision + uint64 revision_height = 2; +} + +// Params defines the set of IBC light client parameters. +message Params { + // allowed_clients defines the list of allowed client state types which can be created + // and interacted with. If a client type is removed from the allowed clients list, usage + // of this client will be disabled until it is added again to the list. + repeated string allowed_clients = 1; +} + +// ClientUpdateProposal is a legacy governance proposal. If it passes, the substitute // client's latest consensus state is copied over to the subject client. The proposal // handler may fail if the subject and the substitute do not match in client and // chain parameters (with exception to latest height, frozen height, and chain-id). +// +// Deprecated: Please use MsgRecoverClient in favour of this message type. message ClientUpdateProposal { - option (gogoproto.goproto_getters) = false; + option deprecated = true; + option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; + option (gogoproto.goproto_getters) = false; + // the title of the update proposal string title = 1; // the description of the proposal @@ -57,11 +89,15 @@ message ClientUpdateProposal { // UpgradeProposal is a gov Content type for initiating an IBC breaking // upgrade. +// +// Deprecated: Please use MsgIBCSoftwareUpgrade in favour of this message type. message UpgradeProposal { + option deprecated = true; + + option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; option (gogoproto.goproto_getters) = false; option (gogoproto.goproto_stringer) = false; option (gogoproto.equal) = true; - option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; string title = 1; string description = 2; @@ -75,29 +111,3 @@ message UpgradeProposal { // planned chain upgrades google.protobuf.Any upgraded_client_state = 4 [(gogoproto.moretags) = "yaml:\"upgraded_client_state\""]; } - -// Height is a monotonically increasing data type -// that can be compared against another Height for the purposes of updating and -// freezing clients -// -// Normally the RevisionHeight is incremented at each height while keeping -// RevisionNumber 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 RevisionNumber is incremented so that -// height continues to be monitonically increasing even as the RevisionHeight -// gets reset -message Height { - option (gogoproto.goproto_getters) = false; - option (gogoproto.goproto_stringer) = false; - - // the revision that the client is currently on - uint64 revision_number = 1 [(gogoproto.moretags) = "yaml:\"revision_number\""]; - // the height within the given revision - uint64 revision_height = 2 [(gogoproto.moretags) = "yaml:\"revision_height\""]; -} - -// Params defines the set of IBC light client parameters. -message Params { - // allowed_clients defines the list of allowed client state types. - repeated string allowed_clients = 1 [(gogoproto.moretags) = "yaml:\"allowed_clients\""]; -} diff --git a/third_party/proto/ibc/core/client/v1/genesis.proto b/third_party/proto/ibc/core/client/v1/genesis.proto index 02bafd8135..43610b0d46 100644 --- a/third_party/proto/ibc/core/client/v1/genesis.proto +++ b/third_party/proto/ibc/core/client/v1/genesis.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.core.client.v1; -option go_package = "github.com/cosmos/ibc-go/v6/modules/core/02-client/types"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/core/02-client/types"; import "ibc/core/client/v1/client.proto"; import "gogoproto/gogo.proto"; @@ -13,19 +13,16 @@ message GenesisState { repeated IdentifiedClientState clients = 1 [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "IdentifiedClientStates"]; // consensus states from each client - repeated ClientConsensusStates clients_consensus = 2 [ - (gogoproto.nullable) = false, - (gogoproto.castrepeated) = "ClientsConsensusStates", - (gogoproto.moretags) = "yaml:\"clients_consensus\"" - ]; + repeated ClientConsensusStates clients_consensus = 2 + [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "ClientsConsensusStates"]; // metadata from each client - repeated IdentifiedGenesisMetadata clients_metadata = 3 - [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"clients_metadata\""]; - Params params = 4 [(gogoproto.nullable) = false]; - // create localhost on initialization - bool create_localhost = 5 [(gogoproto.moretags) = "yaml:\"create_localhost\""]; + repeated IdentifiedGenesisMetadata clients_metadata = 3 [(gogoproto.nullable) = false]; + Params params = 4 [(gogoproto.nullable) = false]; + // Deprecated: create_localhost has been deprecated. + // The localhost client is automatically created at genesis. + bool create_localhost = 5 [deprecated = true]; // the sequence for the next generated client identifier - uint64 next_client_sequence = 6 [(gogoproto.moretags) = "yaml:\"next_client_sequence\""]; + uint64 next_client_sequence = 6; } // GenesisMetadata defines the genesis type for metadata that clients may return @@ -42,7 +39,6 @@ message GenesisMetadata { // IdentifiedGenesisMetadata has the client metadata with the corresponding // client id. message IdentifiedGenesisMetadata { - string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""]; - repeated GenesisMetadata client_metadata = 2 - [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"client_metadata\""]; + string client_id = 1; + repeated GenesisMetadata client_metadata = 2 [(gogoproto.nullable) = false]; } diff --git a/third_party/proto/ibc/core/client/v1/query.proto b/third_party/proto/ibc/core/client/v1/query.proto index de16d91751..0032306ec9 100644 --- a/third_party/proto/ibc/core/client/v1/query.proto +++ b/third_party/proto/ibc/core/client/v1/query.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.core.client.v1; -option go_package = "github.com/cosmos/ibc-go/v6/modules/core/02-client/types"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/core/02-client/types"; import "cosmos/base/query/v1beta1/pagination.proto"; import "ibc/core/client/v1/client.proto"; diff --git a/third_party/proto/ibc/core/client/v1/tx.proto b/third_party/proto/ibc/core/client/v1/tx.proto index 74ad6d9d7c..b504ab692a 100644 --- a/third_party/proto/ibc/core/client/v1/tx.proto +++ b/third_party/proto/ibc/core/client/v1/tx.proto @@ -2,13 +2,18 @@ syntax = "proto3"; package ibc.core.client.v1; -option go_package = "github.com/cosmos/ibc-go/v6/modules/core/02-client/types"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/core/02-client/types"; +import "cosmos/msg/v1/msg.proto"; +import "cosmos/upgrade/v1beta1/upgrade.proto"; import "gogoproto/gogo.proto"; import "google/protobuf/any.proto"; +import "ibc/core/client/v1/client.proto"; // Msg defines the ibc/client Msg service. service Msg { + option (cosmos.msg.v1.service) = true; + // CreateClient defines a rpc handler method for MsgCreateClient. rpc CreateClient(MsgCreateClient) returns (MsgCreateClientResponse); @@ -20,18 +25,28 @@ service Msg { // SubmitMisbehaviour defines a rpc handler method for MsgSubmitMisbehaviour. rpc SubmitMisbehaviour(MsgSubmitMisbehaviour) returns (MsgSubmitMisbehaviourResponse); + + // RecoverClient defines a rpc handler method for MsgRecoverClient. + rpc RecoverClient(MsgRecoverClient) returns (MsgRecoverClientResponse); + + // IBCSoftwareUpgrade defines a rpc handler method for MsgIBCSoftwareUpgrade. + rpc IBCSoftwareUpgrade(MsgIBCSoftwareUpgrade) returns (MsgIBCSoftwareUpgradeResponse); + + // UpdateClientParams defines a rpc handler method for MsgUpdateParams. + rpc UpdateClientParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); } // MsgCreateClient defines a message to create an IBC client message MsgCreateClient { - option (gogoproto.equal) = false; + option (cosmos.msg.v1.signer) = "signer"; + option (gogoproto.goproto_getters) = false; // light client state - google.protobuf.Any client_state = 1 [(gogoproto.moretags) = "yaml:\"client_state\""]; + google.protobuf.Any client_state = 1; // consensus state associated with the client that corresponds to a given // height. - google.protobuf.Any consensus_state = 2 [(gogoproto.moretags) = "yaml:\"consensus_state\""]; + google.protobuf.Any consensus_state = 2; // signer address string signer = 3; } @@ -40,15 +55,16 @@ message MsgCreateClient { message MsgCreateClientResponse {} // MsgUpdateClient defines an sdk.Msg to update a IBC client state using -// the given header. +// the given client message. message MsgUpdateClient { - option (gogoproto.equal) = false; + option (cosmos.msg.v1.signer) = "signer"; + option (gogoproto.goproto_getters) = false; // client unique identifier - string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""]; - // header to update the light client - google.protobuf.Any header = 2; + string client_id = 1; + // client message to update the light client + google.protobuf.Any client_message = 2; // signer address string signer = 3; } @@ -59,20 +75,21 @@ message MsgUpdateClientResponse {} // MsgUpgradeClient defines an sdk.Msg to upgrade an IBC client to a new client // state message MsgUpgradeClient { - option (gogoproto.equal) = false; + option (cosmos.msg.v1.signer) = "signer"; + option (gogoproto.goproto_getters) = false; // client unique identifier - string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""]; + string client_id = 1; // upgraded client state - google.protobuf.Any client_state = 2 [(gogoproto.moretags) = "yaml:\"client_state\""]; + google.protobuf.Any client_state = 2; // upgraded consensus state, only contains enough information to serve as a // basis of trust in update logic - google.protobuf.Any consensus_state = 3 [(gogoproto.moretags) = "yaml:\"consensus_state\""]; + google.protobuf.Any consensus_state = 3; // proof that old chain committed to new client - bytes proof_upgrade_client = 4 [(gogoproto.moretags) = "yaml:\"proof_upgrade_client\""]; + bytes proof_upgrade_client = 4; // proof that old chain committed to new consensus state - bytes proof_upgrade_consensus_state = 5 [(gogoproto.moretags) = "yaml:\"proof_upgrade_consensus_state\""]; + bytes proof_upgrade_consensus_state = 5; // signer address string signer = 6; } @@ -82,12 +99,15 @@ message MsgUpgradeClientResponse {} // MsgSubmitMisbehaviour defines an sdk.Msg type that submits Evidence for // light client misbehaviour. +// This message has been deprecated. Use MsgUpdateClient instead. message MsgSubmitMisbehaviour { - option (gogoproto.equal) = false; + option deprecated = true; + option (cosmos.msg.v1.signer) = "signer"; + option (gogoproto.goproto_getters) = false; // client unique identifier - string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""]; + string client_id = 1; // misbehaviour used for freezing the light client google.protobuf.Any misbehaviour = 2; // signer address @@ -97,3 +117,59 @@ message MsgSubmitMisbehaviour { // MsgSubmitMisbehaviourResponse defines the Msg/SubmitMisbehaviour response // type. message MsgSubmitMisbehaviourResponse {} + +// MsgRecoverClient defines the message used to recover a frozen or expired client. +message MsgRecoverClient { + option (gogoproto.goproto_getters) = false; + option (cosmos.msg.v1.signer) = "signer"; + + // the client identifier for the client to be updated if the proposal passes + string subject_client_id = 1; + // the substitute client identifier for the client which will replace the subject + // client + string substitute_client_id = 2; + + // signer address + string signer = 3; +} + +// MsgRecoverClientResponse defines the Msg/RecoverClient response type. +message MsgRecoverClientResponse {} + +// MsgIBCSoftwareUpgrade defines the message used to schedule an upgrade of an IBC client using a v1 governance proposal +message MsgIBCSoftwareUpgrade { + option (cosmos.msg.v1.signer) = "signer"; + cosmos.upgrade.v1beta1.Plan plan = 1 [(gogoproto.nullable) = false]; + // An UpgradedClientState must be provided to perform an IBC breaking upgrade. + // 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. Correspondingly, the UpgradedClientState field has been + // deprecated in the Cosmos SDK to allow for this logic to exist solely in + // the 02-client module. + google.protobuf.Any upgraded_client_state = 2; + // signer address + string signer = 3; +} + +// MsgIBCSoftwareUpgradeResponse defines the Msg/IBCSoftwareUpgrade response type. +message MsgIBCSoftwareUpgradeResponse {} + +// MsgUpdateParams defines the sdk.Msg type to update the client parameters. +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "signer"; + + option (gogoproto.goproto_getters) = false; + + // signer address + string signer = 1; + + // params defines the client parameters to update. + // + // NOTE: All parameters must be supplied. + Params params = 2 [(gogoproto.nullable) = false]; +} + +// MsgUpdateParamsResponse defines the MsgUpdateParams response type. +message MsgUpdateParamsResponse {} diff --git a/third_party/proto/ibc/core/commitment/v1/commitment.proto b/third_party/proto/ibc/core/commitment/v1/commitment.proto index 3852662453..b4753be2d9 100644 --- a/third_party/proto/ibc/core/commitment/v1/commitment.proto +++ b/third_party/proto/ibc/core/commitment/v1/commitment.proto @@ -2,10 +2,10 @@ syntax = "proto3"; package ibc.core.commitment.v1; -option go_package = "github.com/cosmos/ibc-go/v6/modules/core/23-commitment/types"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/core/23-commitment/types"; import "gogoproto/gogo.proto"; -import "proofs.proto"; +import "cosmos/ics23/v1/proofs.proto"; // MerkleRoot defines a merkle root hash. // In the Cosmos SDK, the AppHash of a block header becomes the root. @@ -19,16 +19,14 @@ message MerkleRoot { // The constructed key from the Path and the key will be append(Path.KeyPath, // append(Path.KeyPrefix, key...)) message MerklePrefix { - bytes key_prefix = 1 [(gogoproto.moretags) = "yaml:\"key_prefix\""]; + bytes key_prefix = 1; } // MerklePath is the path used to verify commitment proofs, which can be an // arbitrary structured object (defined by a commitment type). // MerklePath is represented from root-to-leaf message MerklePath { - option (gogoproto.goproto_stringer) = false; - - repeated string key_path = 1 [(gogoproto.moretags) = "yaml:\"key_path\""]; + repeated string key_path = 1; } // MerkleProof is a wrapper type over a chain of CommitmentProofs. @@ -37,5 +35,5 @@ message MerklePath { // should be succinct. // MerkleProofs are ordered from leaf-to-root message MerkleProof { - repeated ics23.CommitmentProof proofs = 1; + repeated cosmos.ics23.v1.CommitmentProof proofs = 1; } diff --git a/third_party/proto/ibc/core/connection/v1/connection.proto b/third_party/proto/ibc/core/connection/v1/connection.proto index 8ec7a00a1d..852f3999bf 100644 --- a/third_party/proto/ibc/core/connection/v1/connection.proto +++ b/third_party/proto/ibc/core/connection/v1/connection.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.core.connection.v1; -option go_package = "github.com/cosmos/ibc-go/v6/modules/core/03-connection/types"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types"; import "gogoproto/gogo.proto"; import "ibc/core/commitment/v1/commitment.proto"; @@ -17,7 +17,7 @@ import "ibc/core/commitment/v1/commitment.proto"; message ConnectionEnd { option (gogoproto.goproto_getters) = false; // client associated with this connection. - string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""]; + string client_id = 1; // IBC version which can be utilised to determine encodings or protocols for // channels or packets utilising this connection. repeated Version versions = 2; @@ -28,7 +28,7 @@ message ConnectionEnd { // delay period that must pass before a consensus state can be used for // packet-verification NOTE: delay period logic is only implemented by some // clients. - uint64 delay_period = 5 [(gogoproto.moretags) = "yaml:\"delay_period\""]; + uint64 delay_period = 5; } // IdentifiedConnection defines a connection with additional connection @@ -36,9 +36,9 @@ message ConnectionEnd { message IdentifiedConnection { option (gogoproto.goproto_getters) = false; // connection identifier. - string id = 1 [(gogoproto.moretags) = "yaml:\"id\""]; + string id = 1; // client associated with this connection. - string client_id = 2 [(gogoproto.moretags) = "yaml:\"client_id\""]; + string client_id = 2; // IBC version which can be utilised to determine encodings or protocols for // channels or packets utilising this connection repeated Version versions = 3; @@ -47,7 +47,7 @@ message IdentifiedConnection { // counterparty chain associated with this connection. Counterparty counterparty = 5 [(gogoproto.nullable) = false]; // delay period associated with this connection. - uint64 delay_period = 6 [(gogoproto.moretags) = "yaml:\"delay_period\""]; + uint64 delay_period = 6; } // State defines if a connection is in one of the following states: @@ -72,10 +72,10 @@ message Counterparty { // identifies the client on the counterparty chain associated with a given // connection. - string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""]; + string client_id = 1; // identifies the connection end on the counterparty chain associated with a // given connection. - string connection_id = 2 [(gogoproto.moretags) = "yaml:\"connection_id\""]; + string connection_id = 2; // commitment merkle prefix of the counterparty chain. ibc.core.commitment.v1.MerklePrefix prefix = 3 [(gogoproto.nullable) = false]; } @@ -89,7 +89,7 @@ message ClientPaths { // ConnectionPaths define all the connection paths for a given client state. message ConnectionPaths { // client state unique identifier - string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""]; + string client_id = 1; // list of connection paths repeated string paths = 2; } @@ -110,5 +110,5 @@ message Params { // maximum expected time per block (in nanoseconds), used to enforce block delay. This parameter should reflect the // largest amount of time that the chain might reasonably take to produce the next block under normal operating // conditions. A safe choice is 3-5x the expected time per block. - uint64 max_expected_time_per_block = 1 [(gogoproto.moretags) = "yaml:\"max_expected_time_per_block\""]; + uint64 max_expected_time_per_block = 1; } diff --git a/third_party/proto/ibc/core/connection/v1/genesis.proto b/third_party/proto/ibc/core/connection/v1/genesis.proto index c9d4608149..a5eb6b3a1c 100644 --- a/third_party/proto/ibc/core/connection/v1/genesis.proto +++ b/third_party/proto/ibc/core/connection/v1/genesis.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.core.connection.v1; -option go_package = "github.com/cosmos/ibc-go/v6/modules/core/03-connection/types"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types"; import "gogoproto/gogo.proto"; import "ibc/core/connection/v1/connection.proto"; @@ -10,9 +10,8 @@ import "ibc/core/connection/v1/connection.proto"; // GenesisState defines the ibc connection submodule's genesis state. message GenesisState { repeated IdentifiedConnection connections = 1 [(gogoproto.nullable) = false]; - repeated ConnectionPaths client_connection_paths = 2 - [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"client_connection_paths\""]; + repeated ConnectionPaths client_connection_paths = 2 [(gogoproto.nullable) = false]; // the sequence for the next generated connection identifier - uint64 next_connection_sequence = 3 [(gogoproto.moretags) = "yaml:\"next_connection_sequence\""]; + uint64 next_connection_sequence = 3; Params params = 4 [(gogoproto.nullable) = false]; } diff --git a/third_party/proto/ibc/core/connection/v1/query.proto b/third_party/proto/ibc/core/connection/v1/query.proto index 04d7c3ea71..c0f1a6f577 100644 --- a/third_party/proto/ibc/core/connection/v1/query.proto +++ b/third_party/proto/ibc/core/connection/v1/query.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.core.connection.v1; -option go_package = "github.com/cosmos/ibc-go/v6/modules/core/03-connection/types"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types"; import "gogoproto/gogo.proto"; import "cosmos/base/query/v1beta1/pagination.proto"; @@ -106,7 +106,7 @@ message QueryClientConnectionsResponse { // Query/ConnectionClientState RPC method message QueryConnectionClientStateRequest { // connection identifier - string connection_id = 1 [(gogoproto.moretags) = "yaml:\"connection_id\""]; + string connection_id = 1; } // QueryConnectionClientStateResponse is the response type for the @@ -124,7 +124,7 @@ message QueryConnectionClientStateResponse { // Query/ConnectionConsensusState RPC method message QueryConnectionConsensusStateRequest { // connection identifier - string connection_id = 1 [(gogoproto.moretags) = "yaml:\"connection_id\""]; + string connection_id = 1; uint64 revision_number = 2; uint64 revision_height = 3; } diff --git a/third_party/proto/ibc/core/connection/v1/tx.proto b/third_party/proto/ibc/core/connection/v1/tx.proto index 94d676bbc3..3ba8ff4566 100644 --- a/third_party/proto/ibc/core/connection/v1/tx.proto +++ b/third_party/proto/ibc/core/connection/v1/tx.proto @@ -2,15 +2,18 @@ syntax = "proto3"; package ibc.core.connection.v1; -option go_package = "github.com/cosmos/ibc-go/v6/modules/core/03-connection/types"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types"; import "gogoproto/gogo.proto"; +import "cosmos/msg/v1/msg.proto"; import "google/protobuf/any.proto"; import "ibc/core/client/v1/client.proto"; import "ibc/core/connection/v1/connection.proto"; // Msg defines the ibc/connection Msg service. service Msg { + option (cosmos.msg.v1.service) = true; + // ConnectionOpenInit defines a rpc handler method for MsgConnectionOpenInit. rpc ConnectionOpenInit(MsgConnectionOpenInit) returns (MsgConnectionOpenInitResponse); @@ -23,18 +26,23 @@ service Msg { // ConnectionOpenConfirm defines a rpc handler method for // MsgConnectionOpenConfirm. rpc ConnectionOpenConfirm(MsgConnectionOpenConfirm) returns (MsgConnectionOpenConfirmResponse); + + // UpdateConnectionParams defines a rpc handler method for + // MsgUpdateParams. + rpc UpdateConnectionParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); } // MsgConnectionOpenInit defines the msg sent by an account on Chain A to // initialize a connection with Chain B. message MsgConnectionOpenInit { - option (gogoproto.equal) = false; + option (cosmos.msg.v1.signer) = "signer"; + option (gogoproto.goproto_getters) = false; - string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""]; + string client_id = 1; Counterparty counterparty = 2 [(gogoproto.nullable) = false]; Version version = 3; - uint64 delay_period = 4 [(gogoproto.moretags) = "yaml:\"delay_period\""]; + uint64 delay_period = 4; string signer = 5; } @@ -45,28 +53,29 @@ message MsgConnectionOpenInitResponse {} // MsgConnectionOpenTry defines a msg sent by a Relayer to try to open a // connection on Chain B. message MsgConnectionOpenTry { - option (gogoproto.equal) = false; + option (cosmos.msg.v1.signer) = "signer"; + option (gogoproto.goproto_getters) = false; - string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""]; + string client_id = 1; // Deprecated: this field is unused. Crossing hellos are no longer supported in core IBC. - string previous_connection_id = 2 [deprecated = true, (gogoproto.moretags) = "yaml:\"previous_connection_id\""]; - google.protobuf.Any client_state = 3 [(gogoproto.moretags) = "yaml:\"client_state\""]; - Counterparty counterparty = 4 [(gogoproto.nullable) = false]; - uint64 delay_period = 5 [(gogoproto.moretags) = "yaml:\"delay_period\""]; - repeated Version counterparty_versions = 6 [(gogoproto.moretags) = "yaml:\"counterparty_versions\""]; - ibc.core.client.v1.Height proof_height = 7 - [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; + string previous_connection_id = 2 [deprecated = true]; + google.protobuf.Any client_state = 3; + Counterparty counterparty = 4 [(gogoproto.nullable) = false]; + uint64 delay_period = 5; + repeated Version counterparty_versions = 6; + ibc.core.client.v1.Height proof_height = 7 [(gogoproto.nullable) = false]; // proof of the initialization the connection on Chain A: `UNITIALIZED -> // INIT` - bytes proof_init = 8 [(gogoproto.moretags) = "yaml:\"proof_init\""]; + bytes proof_init = 8; // proof of client state included in message - bytes proof_client = 9 [(gogoproto.moretags) = "yaml:\"proof_client\""]; + bytes proof_client = 9; // proof of client consensus state - bytes proof_consensus = 10 [(gogoproto.moretags) = "yaml:\"proof_consensus\""]; - ibc.core.client.v1.Height consensus_height = 11 - [(gogoproto.moretags) = "yaml:\"consensus_height\"", (gogoproto.nullable) = false]; - string signer = 12; + bytes proof_consensus = 10; + ibc.core.client.v1.Height consensus_height = 11 [(gogoproto.nullable) = false]; + string signer = 12; + // optional proof data for host state machines that are unable to introspect their own consensus state + bytes host_consensus_state_proof = 13; } // MsgConnectionOpenTryResponse defines the Msg/ConnectionOpenTry response type. @@ -75,25 +84,26 @@ message MsgConnectionOpenTryResponse {} // MsgConnectionOpenAck defines a msg sent by a Relayer to Chain A to // acknowledge the change of connection state to TRYOPEN on Chain B. message MsgConnectionOpenAck { - option (gogoproto.equal) = false; + option (cosmos.msg.v1.signer) = "signer"; + option (gogoproto.goproto_getters) = false; - string connection_id = 1 [(gogoproto.moretags) = "yaml:\"connection_id\""]; - string counterparty_connection_id = 2 [(gogoproto.moretags) = "yaml:\"counterparty_connection_id\""]; - Version version = 3; - google.protobuf.Any client_state = 4 [(gogoproto.moretags) = "yaml:\"client_state\""]; - ibc.core.client.v1.Height proof_height = 5 - [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; + string connection_id = 1; + string counterparty_connection_id = 2; + Version version = 3; + google.protobuf.Any client_state = 4; + ibc.core.client.v1.Height proof_height = 5 [(gogoproto.nullable) = false]; // proof of the initialization the connection on Chain B: `UNITIALIZED -> // TRYOPEN` - bytes proof_try = 6 [(gogoproto.moretags) = "yaml:\"proof_try\""]; + bytes proof_try = 6; // proof of client state included in message - bytes proof_client = 7 [(gogoproto.moretags) = "yaml:\"proof_client\""]; + bytes proof_client = 7; // proof of client consensus state - bytes proof_consensus = 8 [(gogoproto.moretags) = "yaml:\"proof_consensus\""]; - ibc.core.client.v1.Height consensus_height = 9 - [(gogoproto.moretags) = "yaml:\"consensus_height\"", (gogoproto.nullable) = false]; - string signer = 10; + bytes proof_consensus = 8; + ibc.core.client.v1.Height consensus_height = 9 [(gogoproto.nullable) = false]; + string signer = 10; + // optional proof data for host state machines that are unable to introspect their own consensus state + bytes host_consensus_state_proof = 11; } // MsgConnectionOpenAckResponse defines the Msg/ConnectionOpenAck response type. @@ -102,17 +112,35 @@ message MsgConnectionOpenAckResponse {} // MsgConnectionOpenConfirm defines a msg sent by a Relayer to Chain B to // acknowledge the change of connection state to OPEN on Chain A. message MsgConnectionOpenConfirm { - option (gogoproto.equal) = false; + option (cosmos.msg.v1.signer) = "signer"; + option (gogoproto.goproto_getters) = false; - string connection_id = 1 [(gogoproto.moretags) = "yaml:\"connection_id\""]; + string connection_id = 1; // proof for the change of the connection state on Chain A: `INIT -> OPEN` - bytes proof_ack = 2 [(gogoproto.moretags) = "yaml:\"proof_ack\""]; - ibc.core.client.v1.Height proof_height = 3 - [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; - string signer = 4; + bytes proof_ack = 2; + ibc.core.client.v1.Height proof_height = 3 [(gogoproto.nullable) = false]; + string signer = 4; } // MsgConnectionOpenConfirmResponse defines the Msg/ConnectionOpenConfirm // response type. message MsgConnectionOpenConfirmResponse {} + +// MsgUpdateParams defines the sdk.Msg type to update the connection parameters. +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "signer"; + + option (gogoproto.goproto_getters) = false; + + // signer address + string signer = 1; + + // params defines the connection parameters to update. + // + // NOTE: All parameters must be supplied. + Params params = 2 [(gogoproto.nullable) = false]; +} + +// MsgUpdateParamsResponse defines the MsgUpdateParams response type. +message MsgUpdateParamsResponse {} \ No newline at end of file diff --git a/third_party/proto/ibc/core/types/v1/genesis.proto b/third_party/proto/ibc/core/types/v1/genesis.proto index dd389d412e..4b34f68893 100644 --- a/third_party/proto/ibc/core/types/v1/genesis.proto +++ b/third_party/proto/ibc/core/types/v1/genesis.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.core.types.v1; -option go_package = "github.com/cosmos/ibc-go/v6/modules/core/types"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/core/types"; import "gogoproto/gogo.proto"; import "ibc/core/client/v1/genesis.proto"; @@ -12,12 +12,9 @@ import "ibc/core/channel/v1/genesis.proto"; // GenesisState defines the ibc module's genesis state. message GenesisState { // ICS002 - Clients genesis state - ibc.core.client.v1.GenesisState client_genesis = 1 - [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"client_genesis\""]; + ibc.core.client.v1.GenesisState client_genesis = 1 [(gogoproto.nullable) = false]; // ICS003 - Connections genesis state - ibc.core.connection.v1.GenesisState connection_genesis = 2 - [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"connection_genesis\""]; + ibc.core.connection.v1.GenesisState connection_genesis = 2 [(gogoproto.nullable) = false]; // ICS004 - Channel genesis state - ibc.core.channel.v1.GenesisState channel_genesis = 3 - [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"channel_genesis\""]; + ibc.core.channel.v1.GenesisState channel_genesis = 3 [(gogoproto.nullable) = false]; } diff --git a/third_party/proto/ibc/lightclients/localhost/v1/localhost.proto b/third_party/proto/ibc/lightclients/localhost/v1/localhost.proto deleted file mode 100644 index ad0141afb3..0000000000 --- a/third_party/proto/ibc/lightclients/localhost/v1/localhost.proto +++ /dev/null @@ -1,18 +0,0 @@ -syntax = "proto3"; - -package ibc.lightclients.localhost.v1; - -option go_package = "github.com/cosmos/ibc-go/v6/modules/light-clients/09-localhost/types"; - -import "gogoproto/gogo.proto"; -import "ibc/core/client/v1/client.proto"; - -// ClientState defines a loopback (localhost) client. It requires (read-only) -// access to keys outside the client prefix. -message ClientState { - option (gogoproto.goproto_getters) = false; - // self chain ID - string chain_id = 1 [(gogoproto.moretags) = "yaml:\"chain_id\""]; - // self latest block height - ibc.core.client.v1.Height height = 2 [(gogoproto.nullable) = false]; -} diff --git a/third_party/proto/ibc/lightclients/localhost/v2/localhost.proto b/third_party/proto/ibc/lightclients/localhost/v2/localhost.proto new file mode 100644 index 0000000000..635db85214 --- /dev/null +++ b/third_party/proto/ibc/lightclients/localhost/v2/localhost.proto @@ -0,0 +1,16 @@ +syntax = "proto3"; + +package ibc.lightclients.localhost.v2; + +option go_package = "github.com/cosmos/ibc-go/v8/modules/light-clients/09-localhost;localhost"; + +import "ibc/core/client/v1/client.proto"; +import "gogoproto/gogo.proto"; + +// ClientState defines the 09-localhost client state +message ClientState { + option (gogoproto.goproto_getters) = false; + + // the latest block height + ibc.core.client.v1.Height latest_height = 1 [(gogoproto.nullable) = false]; +} diff --git a/third_party/proto/ibc/lightclients/solomachine/v1/solomachine.proto b/third_party/proto/ibc/lightclients/solomachine/v1/solomachine.proto deleted file mode 100644 index 46d102bbb6..0000000000 --- a/third_party/proto/ibc/lightclients/solomachine/v1/solomachine.proto +++ /dev/null @@ -1,189 +0,0 @@ -syntax = "proto3"; - -package ibc.lightclients.solomachine.v1; - -option go_package = "github.com/cosmos/ibc-go/v6/modules/core/02-client/legacy/v100"; - -import "ibc/core/connection/v1/connection.proto"; -import "ibc/core/channel/v1/channel.proto"; -import "gogoproto/gogo.proto"; -import "google/protobuf/any.proto"; - -// ClientState defines a solo machine client that tracks the current consensus -// state and if the client is frozen. -message ClientState { - option (gogoproto.goproto_getters) = false; - // latest sequence of the client state - uint64 sequence = 1; - // frozen sequence of the solo machine - uint64 frozen_sequence = 2 [(gogoproto.moretags) = "yaml:\"frozen_sequence\""]; - ConsensusState consensus_state = 3 [(gogoproto.moretags) = "yaml:\"consensus_state\""]; - // when set to true, will allow governance to update a solo machine client. - // The client will be unfrozen if it is frozen. - bool allow_update_after_proposal = 4 [(gogoproto.moretags) = "yaml:\"allow_update_after_proposal\""]; -} - -// ConsensusState defines a solo machine consensus state. The sequence of a -// consensus state is contained in the "height" key used in storing the -// consensus state. -message ConsensusState { - option (gogoproto.goproto_getters) = false; - // public key of the solo machine - google.protobuf.Any public_key = 1 [(gogoproto.moretags) = "yaml:\"public_key\""]; - // diversifier allows the same public key to be re-used across different solo - // machine clients (potentially on different chains) without being considered - // misbehaviour. - string diversifier = 2; - uint64 timestamp = 3; -} - -// Header defines a solo machine consensus header -message Header { - option (gogoproto.goproto_getters) = false; - // sequence to update solo machine public key at - uint64 sequence = 1; - uint64 timestamp = 2; - bytes signature = 3; - google.protobuf.Any new_public_key = 4 [(gogoproto.moretags) = "yaml:\"new_public_key\""]; - string new_diversifier = 5 [(gogoproto.moretags) = "yaml:\"new_diversifier\""]; -} - -// Misbehaviour defines misbehaviour for a solo machine which consists -// of a sequence and two signatures over different messages at that sequence. -message Misbehaviour { - option (gogoproto.goproto_getters) = false; - string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""]; - uint64 sequence = 2; - SignatureAndData signature_one = 3 [(gogoproto.moretags) = "yaml:\"signature_one\""]; - SignatureAndData signature_two = 4 [(gogoproto.moretags) = "yaml:\"signature_two\""]; -} - -// SignatureAndData contains a signature and the data signed over to create that -// signature. -message SignatureAndData { - option (gogoproto.goproto_getters) = false; - bytes signature = 1; - DataType data_type = 2 [(gogoproto.moretags) = "yaml:\"data_type\""]; - bytes data = 3; - uint64 timestamp = 4; -} - -// TimestampedSignatureData contains the signature data and the timestamp of the -// signature. -message TimestampedSignatureData { - option (gogoproto.goproto_getters) = false; - bytes signature_data = 1 [(gogoproto.moretags) = "yaml:\"signature_data\""]; - uint64 timestamp = 2; -} - -// SignBytes defines the signed bytes used for signature verification. -message SignBytes { - option (gogoproto.goproto_getters) = false; - - uint64 sequence = 1; - uint64 timestamp = 2; - string diversifier = 3; - // type of the data used - DataType data_type = 4 [(gogoproto.moretags) = "yaml:\"data_type\""]; - // marshaled data - bytes data = 5; -} - -// DataType defines the type of solo machine proof being created. This is done -// to preserve uniqueness of different data sign byte encodings. -enum DataType { - option (gogoproto.goproto_enum_prefix) = false; - - // Default State - DATA_TYPE_UNINITIALIZED_UNSPECIFIED = 0 [(gogoproto.enumvalue_customname) = "UNSPECIFIED"]; - // Data type for client state verification - DATA_TYPE_CLIENT_STATE = 1 [(gogoproto.enumvalue_customname) = "CLIENT"]; - // Data type for consensus state verification - DATA_TYPE_CONSENSUS_STATE = 2 [(gogoproto.enumvalue_customname) = "CONSENSUS"]; - // Data type for connection state verification - DATA_TYPE_CONNECTION_STATE = 3 [(gogoproto.enumvalue_customname) = "CONNECTION"]; - // Data type for channel state verification - DATA_TYPE_CHANNEL_STATE = 4 [(gogoproto.enumvalue_customname) = "CHANNEL"]; - // Data type for packet commitment verification - DATA_TYPE_PACKET_COMMITMENT = 5 [(gogoproto.enumvalue_customname) = "PACKETCOMMITMENT"]; - // Data type for packet acknowledgement verification - DATA_TYPE_PACKET_ACKNOWLEDGEMENT = 6 [(gogoproto.enumvalue_customname) = "PACKETACKNOWLEDGEMENT"]; - // Data type for packet receipt absence verification - DATA_TYPE_PACKET_RECEIPT_ABSENCE = 7 [(gogoproto.enumvalue_customname) = "PACKETRECEIPTABSENCE"]; - // Data type for next sequence recv verification - DATA_TYPE_NEXT_SEQUENCE_RECV = 8 [(gogoproto.enumvalue_customname) = "NEXTSEQUENCERECV"]; - // Data type for header verification - DATA_TYPE_HEADER = 9 [(gogoproto.enumvalue_customname) = "HEADER"]; -} - -// HeaderData returns the SignBytes data for update verification. -message HeaderData { - option (gogoproto.goproto_getters) = false; - - // header public key - google.protobuf.Any new_pub_key = 1 [(gogoproto.moretags) = "yaml:\"new_pub_key\""]; - // header diversifier - string new_diversifier = 2 [(gogoproto.moretags) = "yaml:\"new_diversifier\""]; -} - -// ClientStateData returns the SignBytes data for client state verification. -message ClientStateData { - option (gogoproto.goproto_getters) = false; - - bytes path = 1; - google.protobuf.Any client_state = 2 [(gogoproto.moretags) = "yaml:\"client_state\""]; -} - -// ConsensusStateData returns the SignBytes data for consensus state -// verification. -message ConsensusStateData { - option (gogoproto.goproto_getters) = false; - - bytes path = 1; - google.protobuf.Any consensus_state = 2 [(gogoproto.moretags) = "yaml:\"consensus_state\""]; -} - -// ConnectionStateData returns the SignBytes data for connection state -// verification. -message ConnectionStateData { - option (gogoproto.goproto_getters) = false; - - bytes path = 1; - ibc.core.connection.v1.ConnectionEnd connection = 2; -} - -// ChannelStateData returns the SignBytes data for channel state -// verification. -message ChannelStateData { - option (gogoproto.goproto_getters) = false; - - bytes path = 1; - ibc.core.channel.v1.Channel channel = 2; -} - -// PacketCommitmentData returns the SignBytes data for packet commitment -// verification. -message PacketCommitmentData { - bytes path = 1; - bytes commitment = 2; -} - -// PacketAcknowledgementData returns the SignBytes data for acknowledgement -// verification. -message PacketAcknowledgementData { - bytes path = 1; - bytes acknowledgement = 2; -} - -// PacketReceiptAbsenceData returns the SignBytes data for -// packet receipt absence verification. -message PacketReceiptAbsenceData { - bytes path = 1; -} - -// NextSequenceRecvData returns the SignBytes data for verification of the next -// sequence to be received. -message NextSequenceRecvData { - bytes path = 1; - uint64 next_seq_recv = 2 [(gogoproto.moretags) = "yaml:\"next_seq_recv\""]; -} diff --git a/third_party/proto/ibc/lightclients/solomachine/v2/solomachine.proto b/third_party/proto/ibc/lightclients/solomachine/v2/solomachine.proto index ea5cb89d8d..9dc2690c5d 100644 --- a/third_party/proto/ibc/lightclients/solomachine/v2/solomachine.proto +++ b/third_party/proto/ibc/lightclients/solomachine/v2/solomachine.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.lightclients.solomachine.v2; -option go_package = "github.com/cosmos/ibc-go/v6/modules/light-clients/06-solomachine/types"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/core/02-client/migrations/v7"; import "ibc/core/connection/v1/connection.proto"; import "ibc/core/channel/v1/channel.proto"; @@ -16,11 +16,11 @@ message ClientState { // latest sequence of the client state uint64 sequence = 1; // frozen sequence of the solo machine - bool is_frozen = 2 [(gogoproto.moretags) = "yaml:\"is_frozen\""]; - ConsensusState consensus_state = 3 [(gogoproto.moretags) = "yaml:\"consensus_state\""]; + bool is_frozen = 2; + ConsensusState consensus_state = 3; // when set to true, will allow governance to update a solo machine client. // The client will be unfrozen if it is frozen. - bool allow_update_after_proposal = 4 [(gogoproto.moretags) = "yaml:\"allow_update_after_proposal\""]; + bool allow_update_after_proposal = 4; } // ConsensusState defines a solo machine consensus state. The sequence of a @@ -29,7 +29,7 @@ message ClientState { message ConsensusState { option (gogoproto.goproto_getters) = false; // public key of the solo machine - google.protobuf.Any public_key = 1 [(gogoproto.moretags) = "yaml:\"public_key\""]; + google.protobuf.Any public_key = 1; // diversifier allows the same public key to be re-used across different solo // machine clients (potentially on different chains) without being considered // misbehaviour. @@ -44,18 +44,18 @@ message Header { uint64 sequence = 1; uint64 timestamp = 2; bytes signature = 3; - google.protobuf.Any new_public_key = 4 [(gogoproto.moretags) = "yaml:\"new_public_key\""]; - string new_diversifier = 5 [(gogoproto.moretags) = "yaml:\"new_diversifier\""]; + google.protobuf.Any new_public_key = 4; + string new_diversifier = 5; } // Misbehaviour defines misbehaviour for a solo machine which consists // of a sequence and two signatures over different messages at that sequence. message Misbehaviour { option (gogoproto.goproto_getters) = false; - string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""]; + string client_id = 1; uint64 sequence = 2; - SignatureAndData signature_one = 3 [(gogoproto.moretags) = "yaml:\"signature_one\""]; - SignatureAndData signature_two = 4 [(gogoproto.moretags) = "yaml:\"signature_two\""]; + SignatureAndData signature_one = 3; + SignatureAndData signature_two = 4; } // SignatureAndData contains a signature and the data signed over to create that @@ -63,7 +63,7 @@ message Misbehaviour { message SignatureAndData { option (gogoproto.goproto_getters) = false; bytes signature = 1; - DataType data_type = 2 [(gogoproto.moretags) = "yaml:\"data_type\""]; + DataType data_type = 2; bytes data = 3; uint64 timestamp = 4; } @@ -72,7 +72,7 @@ message SignatureAndData { // signature. message TimestampedSignatureData { option (gogoproto.goproto_getters) = false; - bytes signature_data = 1 [(gogoproto.moretags) = "yaml:\"signature_data\""]; + bytes signature_data = 1; uint64 timestamp = 2; } @@ -84,7 +84,7 @@ message SignBytes { uint64 timestamp = 2; string diversifier = 3; // type of the data used - DataType data_type = 4 [(gogoproto.moretags) = "yaml:\"data_type\""]; + DataType data_type = 4; // marshaled data bytes data = 5; } @@ -121,9 +121,9 @@ message HeaderData { option (gogoproto.goproto_getters) = false; // header public key - google.protobuf.Any new_pub_key = 1 [(gogoproto.moretags) = "yaml:\"new_pub_key\""]; + google.protobuf.Any new_pub_key = 1; // header diversifier - string new_diversifier = 2 [(gogoproto.moretags) = "yaml:\"new_diversifier\""]; + string new_diversifier = 2; } // ClientStateData returns the SignBytes data for client state verification. @@ -131,7 +131,7 @@ message ClientStateData { option (gogoproto.goproto_getters) = false; bytes path = 1; - google.protobuf.Any client_state = 2 [(gogoproto.moretags) = "yaml:\"client_state\""]; + google.protobuf.Any client_state = 2; } // ConsensusStateData returns the SignBytes data for consensus state @@ -140,7 +140,7 @@ message ConsensusStateData { option (gogoproto.goproto_getters) = false; bytes path = 1; - google.protobuf.Any consensus_state = 2 [(gogoproto.moretags) = "yaml:\"consensus_state\""]; + google.protobuf.Any consensus_state = 2; } // ConnectionStateData returns the SignBytes data for connection state @@ -185,5 +185,5 @@ message PacketReceiptAbsenceData { // sequence to be received. message NextSequenceRecvData { bytes path = 1; - uint64 next_seq_recv = 2 [(gogoproto.moretags) = "yaml:\"next_seq_recv\""]; + uint64 next_seq_recv = 2; } diff --git a/third_party/proto/ibc/lightclients/solomachine/v3/solomachine.proto b/third_party/proto/ibc/lightclients/solomachine/v3/solomachine.proto new file mode 100644 index 0000000000..194905b38b --- /dev/null +++ b/third_party/proto/ibc/lightclients/solomachine/v3/solomachine.proto @@ -0,0 +1,99 @@ +syntax = "proto3"; + +package ibc.lightclients.solomachine.v3; + +option go_package = "github.com/cosmos/ibc-go/v8/modules/light-clients/06-solomachine;solomachine"; + +import "gogoproto/gogo.proto"; +import "google/protobuf/any.proto"; + +// ClientState defines a solo machine client that tracks the current consensus +// state and if the client is frozen. +message ClientState { + option (gogoproto.goproto_getters) = false; + // latest sequence of the client state + uint64 sequence = 1; + // frozen sequence of the solo machine + bool is_frozen = 2; + ConsensusState consensus_state = 3; +} + +// ConsensusState defines a solo machine consensus state. The sequence of a +// consensus state is contained in the "height" key used in storing the +// consensus state. +message ConsensusState { + option (gogoproto.goproto_getters) = false; + // public key of the solo machine + google.protobuf.Any public_key = 1; + // diversifier allows the same public key to be re-used across different solo + // machine clients (potentially on different chains) without being considered + // misbehaviour. + string diversifier = 2; + uint64 timestamp = 3; +} + +// Header defines a solo machine consensus header +message Header { + option (gogoproto.goproto_getters) = false; + + uint64 timestamp = 1; + bytes signature = 2; + google.protobuf.Any new_public_key = 3; + string new_diversifier = 4; +} + +// Misbehaviour defines misbehaviour for a solo machine which consists +// of a sequence and two signatures over different messages at that sequence. +message Misbehaviour { + option (gogoproto.goproto_getters) = false; + + uint64 sequence = 1; + SignatureAndData signature_one = 2; + SignatureAndData signature_two = 3; +} + +// SignatureAndData contains a signature and the data signed over to create that +// signature. +message SignatureAndData { + option (gogoproto.goproto_getters) = false; + + bytes signature = 1; + bytes path = 2; + bytes data = 3; + uint64 timestamp = 4; +} + +// TimestampedSignatureData contains the signature data and the timestamp of the +// signature. +message TimestampedSignatureData { + option (gogoproto.goproto_getters) = false; + + bytes signature_data = 1; + uint64 timestamp = 2; +} + +// SignBytes defines the signed bytes used for signature verification. +message SignBytes { + option (gogoproto.goproto_getters) = false; + + // the sequence number + uint64 sequence = 1; + // the proof timestamp + uint64 timestamp = 2; + // the public key diversifier + string diversifier = 3; + // the standardised path bytes + bytes path = 4; + // the marshaled data bytes + bytes data = 5; +} + +// HeaderData returns the SignBytes data for update verification. +message HeaderData { + option (gogoproto.goproto_getters) = false; + + // header public key + google.protobuf.Any new_pub_key = 1; + // header diversifier + string new_diversifier = 2; +} diff --git a/third_party/proto/ibc/lightclients/tendermint/v1/tendermint.proto b/third_party/proto/ibc/lightclients/tendermint/v1/tendermint.proto index cb0544b580..5053612228 100644 --- a/third_party/proto/ibc/lightclients/tendermint/v1/tendermint.proto +++ b/third_party/proto/ibc/lightclients/tendermint/v1/tendermint.proto @@ -2,11 +2,11 @@ syntax = "proto3"; package ibc.lightclients.tendermint.v1; -option go_package = "github.com/cosmos/ibc-go/v6/modules/light-clients/07-tendermint/types"; +option go_package = "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint;tendermint"; import "tendermint/types/validator.proto"; import "tendermint/types/types.proto"; -import "proofs.proto"; +import "cosmos/ics23/v1/proofs.proto"; import "google/protobuf/duration.proto"; import "google/protobuf/timestamp.proto"; import "ibc/core/client/v1/client.proto"; @@ -19,29 +19,21 @@ message ClientState { option (gogoproto.goproto_getters) = false; string chain_id = 1; - Fraction trust_level = 2 [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"trust_level\""]; + Fraction trust_level = 2 [(gogoproto.nullable) = false]; // duration of the period since the LastestTimestamp during which the // submitted headers are valid for upgrade - google.protobuf.Duration trusting_period = 3 - [(gogoproto.nullable) = false, (gogoproto.stdduration) = true, (gogoproto.moretags) = "yaml:\"trusting_period\""]; + google.protobuf.Duration trusting_period = 3 [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; // duration of the staking unbonding period - google.protobuf.Duration unbonding_period = 4 [ - (gogoproto.nullable) = false, - (gogoproto.stdduration) = true, - (gogoproto.moretags) = "yaml:\"unbonding_period\"" - ]; + google.protobuf.Duration unbonding_period = 4 [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; // defines how much new (untrusted) header's Time can drift into the future. - google.protobuf.Duration max_clock_drift = 5 - [(gogoproto.nullable) = false, (gogoproto.stdduration) = true, (gogoproto.moretags) = "yaml:\"max_clock_drift\""]; + google.protobuf.Duration max_clock_drift = 5 [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; // Block height when the client was frozen due to a misbehaviour - ibc.core.client.v1.Height frozen_height = 6 - [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"frozen_height\""]; + ibc.core.client.v1.Height frozen_height = 6 [(gogoproto.nullable) = false]; // Latest height the client was updated to - ibc.core.client.v1.Height latest_height = 7 - [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"latest_height\""]; + ibc.core.client.v1.Height latest_height = 7 [(gogoproto.nullable) = false]; // Proof specifications used in verifying counterparty state - repeated ics23.ProofSpec proof_specs = 8 [(gogoproto.moretags) = "yaml:\"proof_specs\""]; + repeated cosmos.ics23.v1.ProofSpec proof_specs = 8; // Path at which next upgraded client will be committed. // Each element corresponds to the key for a single CommitmentProof in the @@ -50,13 +42,12 @@ message ClientState { // under `{upgradepath}/{upgradeHeight}/consensusState` For SDK chains using // the default upgrade module, upgrade_path should be []string{"upgrade", // "upgradedIBCState"}` - repeated string upgrade_path = 9 [(gogoproto.moretags) = "yaml:\"upgrade_path\""]; + repeated string upgrade_path = 9; // allow_update_after_expiry is deprecated - bool allow_update_after_expiry = 10 [deprecated = true, (gogoproto.moretags) = "yaml:\"allow_update_after_expiry\""]; + bool allow_update_after_expiry = 10 [deprecated = true]; // allow_update_after_misbehaviour is deprecated - bool allow_update_after_misbehaviour = 11 - [deprecated = true, (gogoproto.moretags) = "yaml:\"allow_update_after_misbehaviour\""]; + bool allow_update_after_misbehaviour = 11 [deprecated = true]; } // ConsensusState defines the consensus state from Tendermint. @@ -67,11 +58,8 @@ message ConsensusState { // was stored. google.protobuf.Timestamp timestamp = 1 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; // commitment root (i.e app hash) - ibc.core.commitment.v1.MerkleRoot root = 2 [(gogoproto.nullable) = false]; - bytes next_validators_hash = 3 [ - (gogoproto.casttype) = "github.com/tendermint/tendermint/libs/bytes.HexBytes", - (gogoproto.moretags) = "yaml:\"next_validators_hash\"" - ]; + ibc.core.commitment.v1.MerkleRoot root = 2 [(gogoproto.nullable) = false]; + bytes next_validators_hash = 3 [(gogoproto.casttype) = "github.com/cometbft/cometbft/libs/bytes.HexBytes"]; } // Misbehaviour is a wrapper over two conflicting Headers @@ -79,9 +67,10 @@ message ConsensusState { message Misbehaviour { option (gogoproto.goproto_getters) = false; - string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""]; - Header header_1 = 2 [(gogoproto.customname) = "Header1", (gogoproto.moretags) = "yaml:\"header_1\""]; - Header header_2 = 3 [(gogoproto.customname) = "Header2", (gogoproto.moretags) = "yaml:\"header_2\""]; + // ClientID is deprecated + string client_id = 1 [deprecated = true]; + Header header_1 = 2 [(gogoproto.customname) = "Header1"]; + Header header_2 = 3 [(gogoproto.customname) = "Header2"]; } // Header defines the Tendermint client consensus Header. @@ -97,13 +86,11 @@ message Misbehaviour { // hash to TrustedConsensusState.NextValidatorsHash since that is the last // trusted validator set at the TrustedHeight. message Header { - .tendermint.types.SignedHeader signed_header = 1 - [(gogoproto.embed) = true, (gogoproto.moretags) = "yaml:\"signed_header\""]; + .tendermint.types.SignedHeader signed_header = 1 [(gogoproto.embed) = true]; - .tendermint.types.ValidatorSet validator_set = 2 [(gogoproto.moretags) = "yaml:\"validator_set\""]; - ibc.core.client.v1.Height trusted_height = 3 - [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"trusted_height\""]; - .tendermint.types.ValidatorSet trusted_validators = 4 [(gogoproto.moretags) = "yaml:\"trusted_validators\""]; + .tendermint.types.ValidatorSet validator_set = 2; + ibc.core.client.v1.Height trusted_height = 3 [(gogoproto.nullable) = false]; + .tendermint.types.ValidatorSet trusted_validators = 4; } // Fraction defines the protobuf message type for tmmath.Fraction that only diff --git a/third_party/proto/tendermint/abci/types.proto b/third_party/proto/tendermint/abci/types.proto index 44f8611293..89bafb6cd5 100644 --- a/third_party/proto/tendermint/abci/types.proto +++ b/third_party/proto/tendermint/abci/types.proto @@ -1,42 +1,64 @@ syntax = "proto3"; package tendermint.abci; -option go_package = "github.com/tendermint/tendermint/abci/types"; +option go_package = "github.com/cometbft/cometbft/abci/types"; // For more information on gogo.proto, see: -// https://github.com/gogo/protobuf/blob/master/extensions.md +// https://github.com/cosmos/gogoproto/blob/master/extensions.md import "tendermint/crypto/proof.proto"; -import "tendermint/types/types.proto"; import "tendermint/crypto/keys.proto"; import "tendermint/types/params.proto"; +import "tendermint/types/validator.proto"; import "google/protobuf/timestamp.proto"; import "gogoproto/gogo.proto"; -// This file is copied from http://github.com/tendermint/abci // NOTE: When using custom types, mind the warnings. -// https://github.com/gogo/protobuf/blob/master/custom_types.md#warnings-and-issues +// https://github.com/cosmos/gogoproto/blob/master/custom_types.md#warnings-and-issues + +service ABCI { + rpc Echo(RequestEcho) returns (ResponseEcho); + rpc Flush(RequestFlush) returns (ResponseFlush); + rpc Info(RequestInfo) returns (ResponseInfo); + rpc CheckTx(RequestCheckTx) returns (ResponseCheckTx); + rpc Query(RequestQuery) returns (ResponseQuery); + rpc Commit(RequestCommit) returns (ResponseCommit); + rpc InitChain(RequestInitChain) returns (ResponseInitChain); + rpc ListSnapshots(RequestListSnapshots) returns (ResponseListSnapshots); + rpc OfferSnapshot(RequestOfferSnapshot) returns (ResponseOfferSnapshot); + rpc LoadSnapshotChunk(RequestLoadSnapshotChunk) + returns (ResponseLoadSnapshotChunk); + rpc ApplySnapshotChunk(RequestApplySnapshotChunk) + returns (ResponseApplySnapshotChunk); + rpc PrepareProposal(RequestPrepareProposal) returns (ResponsePrepareProposal); + rpc ProcessProposal(RequestProcessProposal) returns (ResponseProcessProposal); + rpc ExtendVote(RequestExtendVote) returns (ResponseExtendVote); + rpc VerifyVoteExtension(RequestVerifyVoteExtension) returns (ResponseVerifyVoteExtension); + rpc FinalizeBlock(RequestFinalizeBlock) returns (ResponseFinalizeBlock); +} //---------------------------------------- // Request types message Request { oneof value { - RequestEcho echo = 1; - RequestFlush flush = 2; - RequestInfo info = 3; - RequestSetOption set_option = 4; - RequestInitChain init_chain = 5; - RequestQuery query = 6; - RequestBeginBlock begin_block = 7; - RequestCheckTx check_tx = 8; - RequestDeliverTx deliver_tx = 9; - RequestEndBlock end_block = 10; - RequestCommit commit = 11; - RequestListSnapshots list_snapshots = 12; - RequestOfferSnapshot offer_snapshot = 13; - RequestLoadSnapshotChunk load_snapshot_chunk = 14; - RequestApplySnapshotChunk apply_snapshot_chunk = 15; + RequestEcho echo = 1; + RequestFlush flush = 2; + RequestInfo info = 3; + RequestInitChain init_chain = 5; + RequestQuery query = 6; + RequestCheckTx check_tx = 8; + RequestCommit commit = 11; + RequestListSnapshots list_snapshots = 12; + RequestOfferSnapshot offer_snapshot = 13; + RequestLoadSnapshotChunk load_snapshot_chunk = 14; + RequestApplySnapshotChunk apply_snapshot_chunk = 15; + RequestPrepareProposal prepare_proposal = 16; + RequestProcessProposal process_proposal = 17; + RequestExtendVote extend_vote = 18; + RequestVerifyVoteExtension verify_vote_extension = 19; + RequestFinalizeBlock finalize_block = 20; } + reserved 4, 7, 9, 10; // SetOption, BeginBlock, DeliverTx, EndBlock } message RequestEcho { @@ -49,22 +71,17 @@ message RequestInfo { string version = 1; uint64 block_version = 2; uint64 p2p_version = 3; -} - -// nondeterministic -message RequestSetOption { - string key = 1; - string value = 2; + string abci_version = 4; } message RequestInitChain { google.protobuf.Timestamp time = 1 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; - string chain_id = 2; - ConsensusParams consensus_params = 3; - repeated ValidatorUpdate validators = 4 [(gogoproto.nullable) = false]; - bytes app_state_bytes = 5; - int64 initial_height = 6; + string chain_id = 2; + tendermint.types.ConsensusParams consensus_params = 3; + repeated ValidatorUpdate validators = 4 [(gogoproto.nullable) = false]; + bytes app_state_bytes = 5; + int64 initial_height = 6; } message RequestQuery { @@ -74,13 +91,6 @@ message RequestQuery { bool prove = 4; } -message RequestBeginBlock { - bytes hash = 1; - tendermint.types.Header header = 2 [(gogoproto.nullable) = false]; - LastCommitInfo last_commit_info = 3 [(gogoproto.nullable) = false]; - repeated Evidence byzantine_validators = 4 [(gogoproto.nullable) = false]; -} - enum CheckTxType { NEW = 0 [(gogoproto.enumvalue_customname) = "New"]; RECHECK = 1 [(gogoproto.enumvalue_customname) = "Recheck"]; @@ -91,14 +101,6 @@ message RequestCheckTx { CheckTxType type = 2; } -message RequestDeliverTx { - bytes tx = 1; -} - -message RequestEndBlock { - int64 height = 1; -} - message RequestCommit {} // lists available snapshots @@ -124,28 +126,97 @@ message RequestApplySnapshotChunk { string sender = 3; } +message RequestPrepareProposal { + // the modified transactions cannot exceed this size. + int64 max_tx_bytes = 1; + // txs is an array of transactions that will be included in a block, + // sent to the app for possible modifications. + repeated bytes txs = 2; + ExtendedCommitInfo local_last_commit = 3 [(gogoproto.nullable) = false]; + repeated Misbehavior misbehavior = 4 [(gogoproto.nullable) = false]; + int64 height = 5; + google.protobuf.Timestamp time = 6 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + bytes next_validators_hash = 7; + // address of the public key of the validator proposing the block. + bytes proposer_address = 8; +} + +message RequestProcessProposal { + repeated bytes txs = 1; + CommitInfo proposed_last_commit = 2 [(gogoproto.nullable) = false]; + repeated Misbehavior misbehavior = 3 [(gogoproto.nullable) = false]; + // hash is the merkle root hash of the fields of the proposed block. + bytes hash = 4; + int64 height = 5; + google.protobuf.Timestamp time = 6 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + bytes next_validators_hash = 7; + // address of the public key of the original proposer of the block. + bytes proposer_address = 8; +} + +// Extends a vote with application-injected data +message RequestExtendVote { + // the hash of the block that this vote may be referring to + bytes hash = 1; + // the height of the extended vote + int64 height = 2; + // info of the block that this vote may be referring to + google.protobuf.Timestamp time = 3 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + repeated bytes txs = 4; + CommitInfo proposed_last_commit = 5 [(gogoproto.nullable) = false]; + repeated Misbehavior misbehavior = 6 [(gogoproto.nullable) = false]; + bytes next_validators_hash = 7; + // address of the public key of the original proposer of the block. + bytes proposer_address = 8; +} + +// Verify the vote extension +message RequestVerifyVoteExtension { + // the hash of the block that this received vote corresponds to + bytes hash = 1; + // the validator that signed the vote extension + bytes validator_address = 2; + int64 height = 3; + bytes vote_extension = 4; +} + +message RequestFinalizeBlock { + repeated bytes txs = 1; + CommitInfo decided_last_commit = 2 [(gogoproto.nullable) = false]; + repeated Misbehavior misbehavior = 3 [(gogoproto.nullable) = false]; + // hash is the merkle root hash of the fields of the decided block. + bytes hash = 4; + int64 height = 5; + google.protobuf.Timestamp time = 6 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + bytes next_validators_hash = 7; + // proposer_address is the address of the public key of the original proposer of the block. + bytes proposer_address = 8; +} + //---------------------------------------- // Response types message Response { oneof value { - ResponseException exception = 1; - ResponseEcho echo = 2; - ResponseFlush flush = 3; - ResponseInfo info = 4; - ResponseSetOption set_option = 5; - ResponseInitChain init_chain = 6; - ResponseQuery query = 7; - ResponseBeginBlock begin_block = 8; - ResponseCheckTx check_tx = 9; - ResponseDeliverTx deliver_tx = 10; - ResponseEndBlock end_block = 11; - ResponseCommit commit = 12; - ResponseListSnapshots list_snapshots = 13; - ResponseOfferSnapshot offer_snapshot = 14; - ResponseLoadSnapshotChunk load_snapshot_chunk = 15; - ResponseApplySnapshotChunk apply_snapshot_chunk = 16; + ResponseException exception = 1; + ResponseEcho echo = 2; + ResponseFlush flush = 3; + ResponseInfo info = 4; + ResponseInitChain init_chain = 6; + ResponseQuery query = 7; + ResponseCheckTx check_tx = 9; + ResponseCommit commit = 12; + ResponseListSnapshots list_snapshots = 13; + ResponseOfferSnapshot offer_snapshot = 14; + ResponseLoadSnapshotChunk load_snapshot_chunk = 15; + ResponseApplySnapshotChunk apply_snapshot_chunk = 16; + ResponsePrepareProposal prepare_proposal = 17; + ResponseProcessProposal process_proposal = 18; + ResponseExtendVote extend_vote = 19; + ResponseVerifyVoteExtension verify_vote_extension = 20; + ResponseFinalizeBlock finalize_block = 21; } + reserved 5, 8, 10, 11; // SetOption, BeginBlock, DeliverTx, EndBlock } // nondeterministic @@ -169,18 +240,10 @@ message ResponseInfo { bytes last_block_app_hash = 5; } -// nondeterministic -message ResponseSetOption { - uint32 code = 1; - // bytes data = 2; - string log = 3; - string info = 4; -} - message ResponseInitChain { - ConsensusParams consensus_params = 1; - repeated ValidatorUpdate validators = 2 [(gogoproto.nullable) = false]; - bytes app_hash = 3; + tendermint.types.ConsensusParams consensus_params = 1; + repeated ValidatorUpdate validators = 2 [(gogoproto.nullable) = false]; + bytes app_hash = 3; } message ResponseQuery { @@ -196,11 +259,6 @@ message ResponseQuery { string codespace = 10; } -message ResponseBeginBlock { - repeated Event events = 1 - [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; -} - message ResponseCheckTx { uint32 code = 1; bytes data = 2; @@ -211,38 +269,15 @@ message ResponseCheckTx { repeated Event events = 7 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; string codespace = 8; - string sender = 9; - int64 priority = 10; - // mempool_error is set by CometBFT. - // ABCI applictions creating a ResponseCheckTX should not set mempool_error. - string mempool_error = 11; -} - -message ResponseDeliverTx { - uint32 code = 1; - bytes data = 2; - string log = 3; // nondeterministic - string info = 4; // nondeterministic - int64 gas_wanted = 5 [json_name = "gas_wanted"]; - int64 gas_used = 6 [json_name = "gas_used"]; - repeated Event events = 7 [ - (gogoproto.nullable) = false, - (gogoproto.jsontag) = "events,omitempty" - ]; // nondeterministic - string codespace = 8; -} - -message ResponseEndBlock { - repeated ValidatorUpdate validator_updates = 1 [(gogoproto.nullable) = false]; - ConsensusParams consensus_param_updates = 2; - repeated Event events = 3 - [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; + // These reserved fields were used until v0.37 by the priority mempool (now + // removed). + reserved 9 to 11; + reserved "sender", "priority", "mempool_error"; } message ResponseCommit { - // reserve 1 - bytes data = 2; + reserved 1, 2; // data was previously returned here int64 retain_height = 3; } @@ -282,33 +317,75 @@ message ResponseApplySnapshotChunk { } } -//---------------------------------------- -// Misc. +message ResponsePrepareProposal { + repeated bytes txs = 1; +} + +message ResponseProcessProposal { + ProposalStatus status = 1; -// ConsensusParams contains all consensus-relevant parameters -// that can be adjusted by the abci app -message ConsensusParams { - BlockParams block = 1; - tendermint.types.EvidenceParams evidence = 2; - tendermint.types.ValidatorParams validator = 3; - tendermint.types.VersionParams version = 4; + enum ProposalStatus { + UNKNOWN = 0; + ACCEPT = 1; + REJECT = 2; + } } -// BlockParams contains limits on the block size. -message BlockParams { - // Note: must be greater than 0 - int64 max_bytes = 1; - // Note: must be greater or equal to -1 - int64 max_gas = 2; +message ResponseExtendVote { + bytes vote_extension = 1; +} + +message ResponseVerifyVoteExtension { + VerifyStatus status = 1; + + enum VerifyStatus { + UNKNOWN = 0; + ACCEPT = 1; + // Rejecting the vote extension will reject the entire precommit by the sender. + // Incorrectly implementing this thus has liveness implications as it may affect + // CometBFT's ability to receive 2/3+ valid votes to finalize the block. + // Honest nodes should never be rejected. + REJECT = 2; + } } -message LastCommitInfo { +message ResponseFinalizeBlock { + // set of block events emmitted as part of executing the block + repeated Event events = 1 + [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; + // the result of executing each transaction including the events + // the particular transction emitted. This should match the order + // of the transactions delivered in the block itself + repeated ExecTxResult tx_results = 2; + // a list of updates to the validator set. These will reflect the validator set at current height + 2. + repeated ValidatorUpdate validator_updates = 3 [(gogoproto.nullable) = false]; + // updates to the consensus params, if any. + tendermint.types.ConsensusParams consensus_param_updates = 4; + // app_hash is the hash of the applications' state which is used to confirm that execution of the transactions was deterministic. It is up to the application to decide which algorithm to use. + bytes app_hash = 5; +} + +//---------------------------------------- +// Misc. + +message CommitInfo { int32 round = 1; repeated VoteInfo votes = 2 [(gogoproto.nullable) = false]; } +// ExtendedCommitInfo is similar to CommitInfo except that it is only used in +// the PrepareProposal request such that CometBFT can provide vote extensions +// to the application. +message ExtendedCommitInfo { + // The round at which the block proposer decided in the previous height. + int32 round = 1; + // List of validators' addresses in the last validator set with their voting + // information, including vote extensions. + repeated ExtendedVoteInfo votes = 2 [(gogoproto.nullable) = false]; +} + // Event allows application developers to attach additional information to -// ResponseBeginBlock, ResponseEndBlock, ResponseCheckTx and ResponseDeliverTx. +// ResponseFinalizeBlock and ResponseCheckTx. // Later, transactions may be queried using these events. message Event { string type = 1; @@ -320,51 +397,78 @@ message Event { // EventAttribute is a single key-value pair, associated with an event. message EventAttribute { - bytes key = 1; - bytes value = 2; - bool index = 3; // nondeterministic + string key = 1; + string value = 2; + bool index = 3; // nondeterministic +} + +// ExecTxResult contains results of executing one individual transaction. +// +// * Its structure is equivalent to #ResponseDeliverTx which will be deprecated/deleted +message ExecTxResult { + uint32 code = 1; + bytes data = 2; + string log = 3; // nondeterministic + string info = 4; // nondeterministic + int64 gas_wanted = 5 [json_name = "gas_wanted"]; + int64 gas_used = 6 [json_name = "gas_used"]; + repeated Event events = 7 + [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; // nondeterministic + string codespace = 8; } // TxResult contains results of executing the transaction. // // One usage is indexing transaction results. message TxResult { - int64 height = 1; - uint32 index = 2; - bytes tx = 3; - ResponseDeliverTx result = 4 [(gogoproto.nullable) = false]; + int64 height = 1; + uint32 index = 2; + bytes tx = 3; + ExecTxResult result = 4 [(gogoproto.nullable) = false]; } //---------------------------------------- // Blockchain Types -// Validator message Validator { bytes address = 1; // The first 20 bytes of SHA256(public key) // PubKey pub_key = 2 [(gogoproto.nullable)=false]; int64 power = 3; // The voting power } -// ValidatorUpdate message ValidatorUpdate { tendermint.crypto.PublicKey pub_key = 1 [(gogoproto.nullable) = false]; int64 power = 2; } -// VoteInfo message VoteInfo { Validator validator = 1 [(gogoproto.nullable) = false]; - bool signed_last_block = 2; + tendermint.types.BlockIDFlag block_id_flag = 3; + + reserved 2; // signed_last_block } -enum EvidenceType { +message ExtendedVoteInfo { + // The validator that sent the vote. + Validator validator = 1 [(gogoproto.nullable) = false]; + // Non-deterministic extension provided by the sending validator's application. + bytes vote_extension = 3; + // Vote extension signature created by CometBFT + bytes extension_signature = 4; + // block_id_flag indicates whether the validator voted for a block, nil, or did not vote at all + tendermint.types.BlockIDFlag block_id_flag = 5; + + reserved 2; // signed_last_block +} + +enum MisbehaviorType { UNKNOWN = 0; DUPLICATE_VOTE = 1; LIGHT_CLIENT_ATTACK = 2; } -message Evidence { - EvidenceType type = 1; +message Misbehavior { + MisbehaviorType type = 1; // The offending validator Validator validator = 2 [(gogoproto.nullable) = false]; // The height when the offense occurred @@ -388,26 +492,3 @@ message Snapshot { bytes hash = 4; // Arbitrary snapshot hash, equal only if identical bytes metadata = 5; // Arbitrary application metadata } - -//---------------------------------------- -// Service Definition - -service ABCIApplication { - rpc Echo(RequestEcho) returns (ResponseEcho); - rpc Flush(RequestFlush) returns (ResponseFlush); - rpc Info(RequestInfo) returns (ResponseInfo); - rpc SetOption(RequestSetOption) returns (ResponseSetOption); - rpc DeliverTx(RequestDeliverTx) returns (ResponseDeliverTx); - rpc CheckTx(RequestCheckTx) returns (ResponseCheckTx); - rpc Query(RequestQuery) returns (ResponseQuery); - rpc Commit(RequestCommit) returns (ResponseCommit); - rpc InitChain(RequestInitChain) returns (ResponseInitChain); - rpc BeginBlock(RequestBeginBlock) returns (ResponseBeginBlock); - rpc EndBlock(RequestEndBlock) returns (ResponseEndBlock); - rpc ListSnapshots(RequestListSnapshots) returns (ResponseListSnapshots); - rpc OfferSnapshot(RequestOfferSnapshot) returns (ResponseOfferSnapshot); - rpc LoadSnapshotChunk(RequestLoadSnapshotChunk) - returns (ResponseLoadSnapshotChunk); - rpc ApplySnapshotChunk(RequestApplySnapshotChunk) - returns (ResponseApplySnapshotChunk); -} diff --git a/third_party/proto/tendermint/blockchain/types.proto b/third_party/proto/tendermint/blocksync/types.proto similarity index 77% rename from third_party/proto/tendermint/blockchain/types.proto rename to third_party/proto/tendermint/blocksync/types.proto index f5c143cf5b..11c39a713b 100644 --- a/third_party/proto/tendermint/blockchain/types.proto +++ b/third_party/proto/tendermint/blocksync/types.proto @@ -1,9 +1,10 @@ syntax = "proto3"; -package tendermint.blockchain; +package tendermint.blocksync; -option go_package = "github.com/tendermint/tendermint/proto/tendermint/blockchain"; +option go_package = "github.com/cometbft/cometbft/proto/tendermint/blocksync"; import "tendermint/types/block.proto"; +import "tendermint/types/types.proto"; // BlockRequest requests a block for a specific height message BlockRequest { @@ -17,7 +18,8 @@ message NoBlockResponse { // BlockResponse returns block to the requested message BlockResponse { - tendermint.types.Block block = 1; + tendermint.types.Block block = 1; + tendermint.types.ExtendedCommit ext_commit = 2; } // StatusRequest requests the status of a peer. diff --git a/third_party/proto/tendermint/consensus/types.proto b/third_party/proto/tendermint/consensus/types.proto index 5048f85452..542bdc1917 100644 --- a/third_party/proto/tendermint/consensus/types.proto +++ b/third_party/proto/tendermint/consensus/types.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tendermint.consensus; -option go_package = "github.com/tendermint/tendermint/proto/tendermint/consensus"; +option go_package = "github.com/cometbft/cometbft/proto/tendermint/consensus"; import "gogoproto/gogo.proto"; import "tendermint/types/types.proto"; diff --git a/third_party/proto/tendermint/consensus/wal.proto b/third_party/proto/tendermint/consensus/wal.proto index 44afa2c0c3..fafcf11fa9 100644 --- a/third_party/proto/tendermint/consensus/wal.proto +++ b/third_party/proto/tendermint/consensus/wal.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tendermint.consensus; -option go_package = "github.com/tendermint/tendermint/proto/tendermint/consensus"; +option go_package = "github.com/cometbft/cometbft/proto/tendermint/consensus"; import "gogoproto/gogo.proto"; import "tendermint/consensus/types.proto"; diff --git a/third_party/proto/tendermint/crypto/keys.proto b/third_party/proto/tendermint/crypto/keys.proto index 5b94ddaec9..8fa192fa4b 100644 --- a/third_party/proto/tendermint/crypto/keys.proto +++ b/third_party/proto/tendermint/crypto/keys.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tendermint.crypto; -option go_package = "github.com/tendermint/tendermint/proto/tendermint/crypto"; +option go_package = "github.com/cometbft/cometbft/proto/tendermint/crypto"; import "gogoproto/gogo.proto"; diff --git a/third_party/proto/tendermint/crypto/proof.proto b/third_party/proto/tendermint/crypto/proof.proto index 975df76853..ae72195e86 100644 --- a/third_party/proto/tendermint/crypto/proof.proto +++ b/third_party/proto/tendermint/crypto/proof.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tendermint.crypto; -option go_package = "github.com/tendermint/tendermint/proto/tendermint/crypto"; +option go_package = "github.com/cometbft/cometbft/proto/tendermint/crypto"; import "gogoproto/gogo.proto"; diff --git a/third_party/proto/tendermint/libs/bits/types.proto b/third_party/proto/tendermint/libs/bits/types.proto index 3111d113a5..e6afc5e8ec 100644 --- a/third_party/proto/tendermint/libs/bits/types.proto +++ b/third_party/proto/tendermint/libs/bits/types.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tendermint.libs.bits; -option go_package = "github.com/tendermint/tendermint/proto/tendermint/libs/bits"; +option go_package = "github.com/cometbft/cometbft/proto/tendermint/libs/bits"; message BitArray { int64 bits = 1; diff --git a/third_party/proto/tendermint/mempool/types.proto b/third_party/proto/tendermint/mempool/types.proto index b55d9717b1..60bafff03d 100644 --- a/third_party/proto/tendermint/mempool/types.proto +++ b/third_party/proto/tendermint/mempool/types.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tendermint.mempool; -option go_package = "github.com/tendermint/tendermint/proto/tendermint/mempool"; +option go_package = "github.com/cometbft/cometbft/proto/tendermint/mempool"; message Txs { repeated bytes txs = 1; diff --git a/third_party/proto/tendermint/p2p/conn.proto b/third_party/proto/tendermint/p2p/conn.proto index b12de6c827..a7de695ac8 100644 --- a/third_party/proto/tendermint/p2p/conn.proto +++ b/third_party/proto/tendermint/p2p/conn.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tendermint.p2p; -option go_package = "github.com/tendermint/tendermint/proto/tendermint/p2p"; +option go_package = "github.com/cometbft/cometbft/proto/tendermint/p2p"; import "gogoproto/gogo.proto"; import "tendermint/crypto/keys.proto"; diff --git a/third_party/proto/tendermint/p2p/pex.proto b/third_party/proto/tendermint/p2p/pex.proto index dfe238dbe6..2191866609 100644 --- a/third_party/proto/tendermint/p2p/pex.proto +++ b/third_party/proto/tendermint/p2p/pex.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tendermint.p2p; -option go_package = "github.com/tendermint/tendermint/proto/tendermint/p2p"; +option go_package = "github.com/cometbft/cometbft/proto/tendermint/p2p"; import "tendermint/p2p/types.proto"; import "gogoproto/gogo.proto"; diff --git a/third_party/proto/tendermint/p2p/types.proto b/third_party/proto/tendermint/p2p/types.proto index 0d42ea4002..157d8ba1ca 100644 --- a/third_party/proto/tendermint/p2p/types.proto +++ b/third_party/proto/tendermint/p2p/types.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tendermint.p2p; -option go_package = "github.com/tendermint/tendermint/proto/tendermint/p2p"; +option go_package = "github.com/cometbft/cometbft/proto/tendermint/p2p"; import "gogoproto/gogo.proto"; diff --git a/third_party/proto/tendermint/privval/types.proto b/third_party/proto/tendermint/privval/types.proto index 0fc8b61dc9..13190ca42f 100644 --- a/third_party/proto/tendermint/privval/types.proto +++ b/third_party/proto/tendermint/privval/types.proto @@ -5,7 +5,7 @@ import "tendermint/crypto/keys.proto"; import "tendermint/types/types.proto"; import "gogoproto/gogo.proto"; -option go_package = "github.com/tendermint/tendermint/proto/tendermint/privval"; +option go_package = "github.com/cometbft/cometbft/proto/tendermint/privval"; enum Errors { ERRORS_UNKNOWN = 0; diff --git a/third_party/proto/tendermint/rpc/grpc/types.proto b/third_party/proto/tendermint/rpc/grpc/types.proto index ee948a4065..68ff0cad71 100644 --- a/third_party/proto/tendermint/rpc/grpc/types.proto +++ b/third_party/proto/tendermint/rpc/grpc/types.proto @@ -1,6 +1,6 @@ syntax = "proto3"; package tendermint.rpc.grpc; -option go_package = "github.com/tendermint/tendermint/rpc/grpc;coregrpc"; +option go_package = "github.com/cometbft/cometbft/rpc/grpc;coregrpc"; import "tendermint/abci/types.proto"; @@ -19,13 +19,17 @@ message RequestBroadcastTx { message ResponsePing {} message ResponseBroadcastTx { - tendermint.abci.ResponseCheckTx check_tx = 1; - tendermint.abci.ResponseDeliverTx deliver_tx = 2; + tendermint.abci.ResponseCheckTx check_tx = 1; + tendermint.abci.ExecTxResult tx_result = 2; } //---------------------------------------- // Service Definition +// BroadcastAPI +// +// Deprecated: This API will be superseded by a more comprehensive gRPC-based +// broadcast API, and is scheduled for removal after v0.38. service BroadcastAPI { rpc Ping(RequestPing) returns (ResponsePing); rpc BroadcastTx(RequestBroadcastTx) returns (ResponseBroadcastTx); diff --git a/third_party/proto/tendermint/state/types.proto b/third_party/proto/tendermint/state/types.proto index f3fdc0ef39..c76c25fa85 100644 --- a/third_party/proto/tendermint/state/types.proto +++ b/third_party/proto/tendermint/state/types.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tendermint.state; -option go_package = "github.com/tendermint/tendermint/proto/tendermint/state"; +option go_package = "github.com/cometbft/cometbft/proto/tendermint/state"; import "gogoproto/gogo.proto"; import "tendermint/abci/types.proto"; @@ -11,13 +11,28 @@ import "tendermint/types/params.proto"; import "tendermint/version/types.proto"; import "google/protobuf/timestamp.proto"; -// ABCIResponses retains the responses -// of the various ABCI calls during block processing. -// It is persisted to disk for each height before calling Commit. -message ABCIResponses { - repeated tendermint.abci.ResponseDeliverTx deliver_txs = 1; - tendermint.abci.ResponseEndBlock end_block = 2; - tendermint.abci.ResponseBeginBlock begin_block = 3; +// LegacyABCIResponses retains the responses +// of the legacy ABCI calls during block processing. +// Note ReponseDeliverTx is renamed to ExecTxResult but they are semantically the same +// Kept for backwards compatibility for versions prior to v0.38 +message LegacyABCIResponses { + repeated tendermint.abci.ExecTxResult deliver_txs = 1; + ResponseEndBlock end_block = 2; + ResponseBeginBlock begin_block = 3; +} + +// ResponseBeginBlock is kept for backwards compatibility for versions prior to v0.38 +message ResponseBeginBlock { + repeated tendermint.abci.Event events = 1 + [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; +} + +// ResponseEndBlock is kept for backwards compatibility for versions prior to v0.38 +message ResponseEndBlock { + repeated tendermint.abci.ValidatorUpdate validator_updates = 1 [(gogoproto.nullable) = false]; + tendermint.types.ConsensusParams consensus_param_updates = 2; + repeated tendermint.abci.Event events = 3 + [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; } // ValidatorsInfo represents the latest validator set, or the last height it changed @@ -33,8 +48,9 @@ message ConsensusParamsInfo { } message ABCIResponsesInfo { - ABCIResponses abci_responses = 1; - int64 height = 2; + LegacyABCIResponses legacy_abci_responses = 1; + int64 height = 2; + abci.ResponseFinalizeBlock response_finalize_block = 3; } message Version { diff --git a/third_party/proto/tendermint/statesync/types.proto b/third_party/proto/tendermint/statesync/types.proto index 8d4a714c1d..eac36b3dec 100644 --- a/third_party/proto/tendermint/statesync/types.proto +++ b/third_party/proto/tendermint/statesync/types.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tendermint.statesync; -option go_package = "github.com/tendermint/tendermint/proto/tendermint/statesync"; +option go_package = "github.com/cometbft/cometbft/proto/tendermint/statesync"; message Message { oneof sum { diff --git a/third_party/proto/tendermint/store/types.proto b/third_party/proto/tendermint/store/types.proto index af2f97ad08..b510169a4c 100644 --- a/third_party/proto/tendermint/store/types.proto +++ b/third_party/proto/tendermint/store/types.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tendermint.store; -option go_package = "github.com/tendermint/tendermint/proto/tendermint/store"; +option go_package = "github.com/cometbft/cometbft/proto/tendermint/store"; message BlockStoreState { int64 base = 1; diff --git a/third_party/proto/tendermint/types/block.proto b/third_party/proto/tendermint/types/block.proto index 84e9bb15d8..d531c06a00 100644 --- a/third_party/proto/tendermint/types/block.proto +++ b/third_party/proto/tendermint/types/block.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tendermint.types; -option go_package = "github.com/tendermint/tendermint/proto/tendermint/types"; +option go_package = "github.com/cometbft/cometbft/proto/tendermint/types"; import "gogoproto/gogo.proto"; import "tendermint/types/types.proto"; diff --git a/third_party/proto/tendermint/types/canonical.proto b/third_party/proto/tendermint/types/canonical.proto index e88fd6ffe3..bbff09b660 100644 --- a/third_party/proto/tendermint/types/canonical.proto +++ b/third_party/proto/tendermint/types/canonical.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tendermint.types; -option go_package = "github.com/tendermint/tendermint/proto/tendermint/types"; +option go_package = "github.com/cometbft/cometbft/proto/tendermint/types"; import "gogoproto/gogo.proto"; import "tendermint/types/types.proto"; @@ -35,3 +35,12 @@ message CanonicalVote { google.protobuf.Timestamp timestamp = 5 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; string chain_id = 6 [(gogoproto.customname) = "ChainID"]; } + +// CanonicalVoteExtension provides us a way to serialize a vote extension from +// a particular validator such that we can sign over those serialized bytes. +message CanonicalVoteExtension { + bytes extension = 1; + sfixed64 height = 2; + sfixed64 round = 3; + string chain_id = 4; +} diff --git a/third_party/proto/tendermint/types/events.proto b/third_party/proto/tendermint/types/events.proto index a1e5cc498d..98ce811be7 100644 --- a/third_party/proto/tendermint/types/events.proto +++ b/third_party/proto/tendermint/types/events.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tendermint.types; -option go_package = "github.com/tendermint/tendermint/proto/tendermint/types"; +option go_package = "github.com/cometbft/cometbft/proto/tendermint/types"; message EventDataRoundState { int64 height = 1; diff --git a/third_party/proto/tendermint/types/evidence.proto b/third_party/proto/tendermint/types/evidence.proto index 451b8dca3c..1f35049bdc 100644 --- a/third_party/proto/tendermint/types/evidence.proto +++ b/third_party/proto/tendermint/types/evidence.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tendermint.types; -option go_package = "github.com/tendermint/tendermint/proto/tendermint/types"; +option go_package = "github.com/cometbft/cometbft/proto/tendermint/types"; import "gogoproto/gogo.proto"; import "google/protobuf/timestamp.proto"; diff --git a/third_party/proto/tendermint/types/params.proto b/third_party/proto/tendermint/types/params.proto index 0de7d846fb..f96a2e2f57 100644 --- a/third_party/proto/tendermint/types/params.proto +++ b/third_party/proto/tendermint/types/params.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tendermint.types; -option go_package = "github.com/tendermint/tendermint/proto/tendermint/types"; +option go_package = "github.com/cometbft/cometbft/proto/tendermint/types"; import "gogoproto/gogo.proto"; import "google/protobuf/duration.proto"; @@ -11,10 +11,11 @@ option (gogoproto.equal_all) = true; // ConsensusParams contains consensus critical parameters that determine the // validity of blocks. message ConsensusParams { - BlockParams block = 1 [(gogoproto.nullable) = false]; - EvidenceParams evidence = 2 [(gogoproto.nullable) = false]; - ValidatorParams validator = 3 [(gogoproto.nullable) = false]; - VersionParams version = 4 [(gogoproto.nullable) = false]; + BlockParams block = 1; + EvidenceParams evidence = 2; + ValidatorParams validator = 3; + VersionParams version = 4; + ABCIParams abci = 5; } // BlockParams contains limits on the block size. @@ -25,11 +26,8 @@ message BlockParams { // Max gas per block. // Note: must be greater or equal to -1 int64 max_gas = 2; - // Minimum time increment between consecutive blocks (in milliseconds) If the - // block header timestamp is ahead of the system clock, decrease this value. - // - // Not exposed to the application. - int64 time_iota_ms = 3; + + reserved 3; // was TimeIotaMs see https://github.com/tendermint/tendermint/pull/5792 } // EvidenceParams determine how we handle evidence of malfeasance. @@ -68,7 +66,7 @@ message VersionParams { option (gogoproto.populate) = true; option (gogoproto.equal) = true; - uint64 app_version = 1; + uint64 app = 1; } // HashedParams is a subset of ConsensusParams. @@ -78,3 +76,17 @@ message HashedParams { int64 block_max_bytes = 1; int64 block_max_gas = 2; } + +// ABCIParams configure functionality specific to the Application Blockchain Interface. +message ABCIParams { + // vote_extensions_enable_height configures the first height during which + // vote extensions will be enabled. During this specified height, and for all + // subsequent heights, precommit messages that do not contain valid extension data + // will be considered invalid. Prior to this height, vote extensions will not + // be used or accepted by validators on the network. + // + // Once enabled, vote extensions will be created by the application in ExtendVote, + // passed to the application for validation in VerifyVoteExtension and given + // to the application to use when proposing a block during PrepareProposal. + int64 vote_extensions_enable_height = 1; +} diff --git a/third_party/proto/tendermint/types/types.proto b/third_party/proto/tendermint/types/types.proto index 3ce1694594..a527e2ffb2 100644 --- a/third_party/proto/tendermint/types/types.proto +++ b/third_party/proto/tendermint/types/types.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tendermint.types; -option go_package = "github.com/tendermint/tendermint/proto/tendermint/types"; +option go_package = "github.com/cometbft/cometbft/proto/tendermint/types"; import "gogoproto/gogo.proto"; import "google/protobuf/timestamp.proto"; @@ -9,17 +9,6 @@ import "tendermint/crypto/proof.proto"; import "tendermint/version/types.proto"; import "tendermint/types/validator.proto"; -// BlockIdFlag indicates which BlcokID the signature is for -enum BlockIDFlag { - option (gogoproto.goproto_enum_stringer) = true; - option (gogoproto.goproto_enum_prefix) = false; - - BLOCK_ID_FLAG_UNKNOWN = 0 [(gogoproto.enumvalue_customname) = "BlockIDFlagUnknown"]; - BLOCK_ID_FLAG_ABSENT = 1 [(gogoproto.enumvalue_customname) = "BlockIDFlagAbsent"]; - BLOCK_ID_FLAG_COMMIT = 2 [(gogoproto.enumvalue_customname) = "BlockIDFlagCommit"]; - BLOCK_ID_FLAG_NIL = 3 [(gogoproto.enumvalue_customname) = "BlockIDFlagNil"]; -} - // SignedMsgType is a type of signed message in the consensus. enum SignedMsgType { option (gogoproto.goproto_enum_stringer) = true; @@ -89,7 +78,7 @@ message Data { repeated bytes txs = 1; } -// Vote represents a prevote, precommit, or commit vote from validators for +// Vote represents a prevote or precommit vote from validators for // consensus. message Vote { SignedMsgType type = 1; @@ -101,7 +90,16 @@ message Vote { [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; bytes validator_address = 6; int32 validator_index = 7; - bytes signature = 8; + // Vote signature by the validator if they participated in consensus for the + // associated block. + bytes signature = 8; + // Vote extension provided by the application. Only valid for precommit + // messages. + bytes extension = 9; + // Vote extension signature by the validator if they participated in + // consensus for the associated block. + // Only valid for precommit messages. + bytes extension_signature = 10; } // Commit contains the evidence that a block was committed by a set of validators. @@ -114,11 +112,34 @@ message Commit { // CommitSig is a part of the Vote included in a Commit. message CommitSig { - BlockIDFlag block_id_flag = 1; - bytes validator_address = 2; - google.protobuf.Timestamp timestamp = 3 + tendermint.types.BlockIDFlag block_id_flag = 1; + bytes validator_address = 2; + google.protobuf.Timestamp timestamp = 3 + [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + bytes signature = 4; +} + +message ExtendedCommit { + int64 height = 1; + int32 round = 2; + BlockID block_id = 3 + [(gogoproto.nullable) = false, (gogoproto.customname) = "BlockID"]; + repeated ExtendedCommitSig extended_signatures = 4 [(gogoproto.nullable) = false]; +} + +// ExtendedCommitSig retains all the same fields as CommitSig but adds vote +// extension-related fields. We use two signatures to ensure backwards compatibility. +// That is the digest of the original signature is still the same in prior versions +message ExtendedCommitSig { + tendermint.types.BlockIDFlag block_id_flag = 1; + bytes validator_address = 2; + google.protobuf.Timestamp timestamp = 3 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; bytes signature = 4; + // Vote extension data + bytes extension = 5; + // Vote extension signature + bytes extension_signature = 6; } message Proposal { diff --git a/third_party/proto/tendermint/types/validator.proto b/third_party/proto/tendermint/types/validator.proto index 49860b96d6..7b55956fcd 100644 --- a/third_party/proto/tendermint/types/validator.proto +++ b/third_party/proto/tendermint/types/validator.proto @@ -1,11 +1,23 @@ syntax = "proto3"; package tendermint.types; -option go_package = "github.com/tendermint/tendermint/proto/tendermint/types"; +option go_package = "github.com/cometbft/cometbft/proto/tendermint/types"; import "gogoproto/gogo.proto"; import "tendermint/crypto/keys.proto"; +// BlockIdFlag indicates which BlockID the signature is for +enum BlockIDFlag { + option (gogoproto.goproto_enum_stringer) = true; + option (gogoproto.goproto_enum_prefix) = false; + + BLOCK_ID_FLAG_UNKNOWN = 0 [(gogoproto.enumvalue_customname) = "BlockIDFlagUnknown"]; // indicates an error condition + BLOCK_ID_FLAG_ABSENT = 1 [(gogoproto.enumvalue_customname) = "BlockIDFlagAbsent"]; // the vote was not received + BLOCK_ID_FLAG_COMMIT = 2 [(gogoproto.enumvalue_customname) = "BlockIDFlagCommit"]; // voted for the block that received the majority + BLOCK_ID_FLAG_NIL = 3 [(gogoproto.enumvalue_customname) = "BlockIDFlagNil"]; // voted for nil +} + + message ValidatorSet { repeated Validator validators = 1; Validator proposer = 2; diff --git a/third_party/proto/tendermint/version/types.proto b/third_party/proto/tendermint/version/types.proto index 6061868bd4..3b6ef45479 100644 --- a/third_party/proto/tendermint/version/types.proto +++ b/third_party/proto/tendermint/version/types.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tendermint.version; -option go_package = "github.com/tendermint/tendermint/proto/tendermint/version"; +option go_package = "github.com/cometbft/cometbft/proto/tendermint/version"; import "gogoproto/gogo.proto"; diff --git a/x/attribute/client/cli/cli_test.go b/x/attribute/client/cli/cli_test.go index 4df41610ae..0d1a0b04ec 100644 --- a/x/attribute/client/cli/cli_test.go +++ b/x/attribute/client/cli/cli_test.go @@ -8,7 +8,7 @@ import ( "testing" "time" - "github.com/gogo/protobuf/proto" + "github.com/cosmos/gogoproto/proto" "github.com/spf13/cobra" "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" diff --git a/x/attribute/client/rest/grpc_query_test.go b/x/attribute/client/rest/grpc_query_test.go index 7b72ab97e6..eb3b5e98e8 100644 --- a/x/attribute/client/rest/grpc_query_test.go +++ b/x/attribute/client/rest/grpc_query_test.go @@ -4,7 +4,7 @@ import ( "fmt" "testing" - "github.com/gogo/protobuf/proto" + "github.com/cosmos/gogoproto/proto" "github.com/stretchr/testify/suite" codectypes "github.com/cosmos/cosmos-sdk/codec/types" diff --git a/x/attribute/types/attribute.pb.go b/x/attribute/types/attribute.pb.go index d6b5590471..9b624e2198 100644 --- a/x/attribute/types/attribute.pb.go +++ b/x/attribute/types/attribute.pb.go @@ -5,9 +5,9 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" @@ -855,7 +855,7 @@ func (m *Attribute) MarshalToSizedBuffer(dAtA []byte) (int, error) { var l int _ = l if m.ExpirationDate != nil { - n1, err1 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.ExpirationDate, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.ExpirationDate):]) + n1, err1 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(*m.ExpirationDate, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(*m.ExpirationDate):]) if err1 != nil { return 0, err1 } @@ -1330,7 +1330,7 @@ func (m *Attribute) Size() (n int) { n += 1 + l + sovAttribute(uint64(l)) } if m.ExpirationDate != nil { - l = github_com_gogo_protobuf_types.SizeOfStdTime(*m.ExpirationDate) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(*m.ExpirationDate) n += 1 + l + sovAttribute(uint64(l)) } return n @@ -1784,7 +1784,7 @@ func (m *Attribute) Unmarshal(dAtA []byte) error { if m.ExpirationDate == nil { m.ExpirationDate = new(time.Time) } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(m.ExpirationDate, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(m.ExpirationDate, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/attribute/types/genesis.pb.go b/x/attribute/types/genesis.pb.go index fb7fb11d01..ae40aa6aef 100644 --- a/x/attribute/types/genesis.pb.go +++ b/x/attribute/types/genesis.pb.go @@ -5,8 +5,8 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/attribute/types/query.pb.go b/x/attribute/types/query.pb.go index 1114d83c5a..3d7a337143 100644 --- a/x/attribute/types/query.pb.go +++ b/x/attribute/types/query.pb.go @@ -7,9 +7,9 @@ import ( context "context" fmt "fmt" query "github.com/cosmos/cosmos-sdk/types/query" - _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" diff --git a/x/attribute/types/query.pb.gw.go b/x/attribute/types/query.pb.gw.go index da350e6d89..a74f4df3c9 100644 --- a/x/attribute/types/query.pb.gw.go +++ b/x/attribute/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 func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryParamsRequest @@ -438,12 +440,14 @@ func local_request_Query_AccountData_0(ctx context.Context, marshaler runtime.Ma // 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_Params_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 { @@ -451,6 +455,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Params_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) @@ -464,6 +469,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Attribute_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 { @@ -471,6 +478,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Attribute_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) @@ -484,6 +492,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Attributes_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 { @@ -491,6 +501,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Attributes_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) @@ -504,6 +515,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Scan_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 { @@ -511,6 +524,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Scan_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) @@ -524,6 +538,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_AttributeAccounts_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 { @@ -531,6 +547,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_AttributeAccounts_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) @@ -544,6 +561,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_AccountData_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 { @@ -551,6 +570,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_AccountData_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/attribute/types/tx.pb.go b/x/attribute/types/tx.pb.go index b8ba4cc33d..a504a1a79b 100644 --- a/x/attribute/types/tx.pb.go +++ b/x/attribute/types/tx.pb.go @@ -8,10 +8,10 @@ import ( context "context" fmt "fmt" _ "github.com/cosmos/cosmos-sdk/types/msgservice" - _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" @@ -983,7 +983,7 @@ func (m *MsgAddAttributeRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) var l int _ = l if m.ExpirationDate != nil { - n1, err1 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.ExpirationDate, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.ExpirationDate):]) + n1, err1 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(*m.ExpirationDate, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(*m.ExpirationDate):]) if err1 != nil { return 0, err1 } @@ -1177,7 +1177,7 @@ func (m *MsgUpdateAttributeExpirationRequest) MarshalToSizedBuffer(dAtA []byte) dAtA[i] = 0x22 } if m.ExpirationDate != nil { - n2, err2 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.ExpirationDate, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.ExpirationDate):]) + n2, err2 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(*m.ExpirationDate, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(*m.ExpirationDate):]) if err2 != nil { return 0, err2 } @@ -1464,7 +1464,7 @@ func (m *MsgAddAttributeRequest) Size() (n int) { n += 1 + l + sovTx(uint64(l)) } if m.ExpirationDate != nil { - l = github_com_gogo_protobuf_types.SizeOfStdTime(*m.ExpirationDate) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(*m.ExpirationDate) n += 1 + l + sovTx(uint64(l)) } return n @@ -1538,7 +1538,7 @@ func (m *MsgUpdateAttributeExpirationRequest) Size() (n int) { n += 1 + l + sovTx(uint64(l)) } if m.ExpirationDate != nil { - l = github_com_gogo_protobuf_types.SizeOfStdTime(*m.ExpirationDate) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(*m.ExpirationDate) n += 1 + l + sovTx(uint64(l)) } l = len(m.Account) @@ -1889,7 +1889,7 @@ func (m *MsgAddAttributeRequest) Unmarshal(dAtA []byte) error { if m.ExpirationDate == nil { m.ExpirationDate = new(time.Time) } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(m.ExpirationDate, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(m.ExpirationDate, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2393,7 +2393,7 @@ func (m *MsgUpdateAttributeExpirationRequest) Unmarshal(dAtA []byte) error { if m.ExpirationDate == nil { m.ExpirationDate = new(time.Time) } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(m.ExpirationDate, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(m.ExpirationDate, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/exchange/client/cli/cli_test.go b/x/exchange/client/cli/cli_test.go index 3b1b2e24aa..0c8ccdceee 100644 --- a/x/exchange/client/cli/cli_test.go +++ b/x/exchange/client/cli/cli_test.go @@ -9,7 +9,7 @@ import ( "testing" "time" - "github.com/gogo/protobuf/proto" + "github.com/cosmos/gogoproto/proto" "github.com/spf13/cobra" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/x/exchange/client/cli/helpers.go b/x/exchange/client/cli/helpers.go index bf710ef0cc..7afae54aa6 100644 --- a/x/exchange/client/cli/helpers.go +++ b/x/exchange/client/cli/helpers.go @@ -5,7 +5,7 @@ import ( "fmt" "strings" - "github.com/gogo/protobuf/proto" + "github.com/cosmos/gogoproto/proto" "github.com/spf13/cobra" "github.com/spf13/pflag" "google.golang.org/grpc" diff --git a/x/exchange/codec.go b/x/exchange/codec.go index aabffb6502..ab42039948 100644 --- a/x/exchange/codec.go +++ b/x/exchange/codec.go @@ -18,7 +18,7 @@ func RegisterInterfaces(registry types.InterfaceRegistry) { registry.RegisterInterface( "provenance.exchange.v1.MarketAccount", - (*authtypes.AccountI)(nil), + (*sdk.AccountI)(nil), &MarketAccount{}, ) diff --git a/x/exchange/events.go b/x/exchange/events.go index 2b07a81fff..c606ef8041 100644 --- a/x/exchange/events.go +++ b/x/exchange/events.go @@ -1,7 +1,7 @@ package exchange import ( - "github.com/gogo/protobuf/proto" + "github.com/cosmos/gogoproto/proto" sdk "github.com/cosmos/cosmos-sdk/types" ) diff --git a/x/exchange/events.pb.go b/x/exchange/events.pb.go index afe695a1be..646f09ebcf 100644 --- a/x/exchange/events.pb.go +++ b/x/exchange/events.pb.go @@ -6,7 +6,7 @@ package exchange import ( fmt "fmt" _ "github.com/cosmos/cosmos-proto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/exchange/events_test.go b/x/exchange/events_test.go index aa161a7f13..62f606f584 100644 --- a/x/exchange/events_test.go +++ b/x/exchange/events_test.go @@ -4,7 +4,7 @@ import ( "fmt" "testing" - "github.com/gogo/protobuf/proto" + "github.com/cosmos/gogoproto/proto" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/x/exchange/genesis.pb.go b/x/exchange/genesis.pb.go index dc3556a30f..5a94677298 100644 --- a/x/exchange/genesis.pb.go +++ b/x/exchange/genesis.pb.go @@ -5,8 +5,8 @@ package exchange import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/exchange/keeper/suite_test.go b/x/exchange/keeper/suite_test.go index fa9670d41b..c8352028e8 100644 --- a/x/exchange/keeper/suite_test.go +++ b/x/exchange/keeper/suite_test.go @@ -7,7 +7,7 @@ import ( "strings" "testing" - "github.com/gogo/protobuf/proto" + "github.com/cosmos/gogoproto/proto" "github.com/rs/zerolog" "github.com/stretchr/testify/suite" diff --git a/x/exchange/market.go b/x/exchange/market.go index 7ca7b61e44..4d4930c4c8 100644 --- a/x/exchange/market.go +++ b/x/exchange/market.go @@ -26,7 +26,7 @@ const ( ) var ( - _ authtypes.AccountI = (*MarketAccount)(nil) + _ sdk.AccountI = (*MarketAccount)(nil) _ authtypes.GenesisAccount = (*MarketAccount)(nil) ) diff --git a/x/exchange/market.pb.go b/x/exchange/market.pb.go index 1fbb6cf1d8..214a3d0cb9 100644 --- a/x/exchange/market.pb.go +++ b/x/exchange/market.pb.go @@ -8,8 +8,8 @@ import ( _ "github.com/cosmos/cosmos-proto" types1 "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/x/auth/types" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/exchange/orders.pb.go b/x/exchange/orders.pb.go index b712c8cab8..cbf9a75a03 100644 --- a/x/exchange/orders.pb.go +++ b/x/exchange/orders.pb.go @@ -8,8 +8,8 @@ import ( _ "github.com/cosmos/cosmos-proto" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/exchange/params.pb.go b/x/exchange/params.pb.go index bba524b724..8dafdfb8cd 100644 --- a/x/exchange/params.pb.go +++ b/x/exchange/params.pb.go @@ -5,8 +5,8 @@ package exchange import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/exchange/query.pb.go b/x/exchange/query.pb.go index 5cd58e502c..953d5d54d2 100644 --- a/x/exchange/query.pb.go +++ b/x/exchange/query.pb.go @@ -9,9 +9,9 @@ import ( _ "github.com/cosmos/cosmos-proto" types "github.com/cosmos/cosmos-sdk/types" query "github.com/cosmos/cosmos-sdk/types/query" - _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" @@ -1462,99 +1462,99 @@ func init() { } var fileDescriptor_00949b75b1c10bfe = []byte{ - // 1472 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0xcd, 0x73, 0x14, 0x45, - 0x14, 0x4f, 0x27, 0x24, 0x24, 0x8f, 0xaf, 0xb2, 0xb3, 0x50, 0x9b, 0x05, 0x36, 0x61, 0xa0, 0x20, - 0x15, 0xc8, 0x0c, 0xbb, 0x0b, 0x51, 0x0e, 0xa8, 0x04, 0x0d, 0x95, 0x2a, 0x29, 0xc2, 0x68, 0xa9, - 0xc5, 0xc1, 0xa5, 0x77, 0xb7, 0x33, 0x4c, 0x31, 0x3b, 0xbd, 0xcc, 0x0c, 0x4b, 0x52, 0xa9, 0x1c, - 0xfc, 0xb8, 0xe0, 0xc9, 0x2a, 0x3d, 0x60, 0x51, 0xe2, 0xc5, 0xbb, 0x1e, 0xbc, 0x79, 0xf0, 0xe0, - 0x41, 0x8e, 0x94, 0x5e, 0xf4, 0x62, 0x59, 0xe0, 0x51, 0xff, 0x07, 0x6b, 0xba, 0x7b, 0x36, 0x33, - 0x9b, 0xf9, 0x5a, 0xcd, 0x21, 0xa7, 0xec, 0xf4, 0xbc, 0x8f, 0xdf, 0xfb, 0xbd, 0xee, 0x37, 0xbf, - 0x0e, 0x28, 0x1d, 0x87, 0x75, 0xa9, 0x4d, 0xec, 0x26, 0xd5, 0xe8, 0x5a, 0xf3, 0x0e, 0xb1, 0x0d, - 0xaa, 0x75, 0x2b, 0xda, 0xbd, 0xfb, 0xd4, 0x59, 0x57, 0x3b, 0x0e, 0xf3, 0x18, 0x3e, 0xb2, 0x65, - 0xa3, 0x06, 0x36, 0x6a, 0xb7, 0x52, 0x9a, 0x6a, 0x32, 0xb7, 0xcd, 0xdc, 0x3a, 0xb7, 0xd2, 0xc4, - 0x83, 0x70, 0x29, 0xcd, 0x89, 0x27, 0xad, 0x41, 0x5c, 0x2a, 0x62, 0x69, 0xdd, 0x4a, 0x83, 0x7a, - 0xa4, 0xa2, 0x75, 0x88, 0x61, 0xda, 0xc4, 0x33, 0x99, 0x2d, 0x6d, 0xcb, 0x61, 0xdb, 0xc0, 0xaa, - 0xc9, 0xcc, 0xe0, 0xfd, 0x31, 0x83, 0x31, 0xc3, 0xa2, 0x1a, 0xe9, 0x98, 0x1a, 0xb1, 0x6d, 0xe6, - 0x71, 0xe7, 0x20, 0x53, 0xc1, 0x60, 0x06, 0x13, 0x08, 0xfc, 0x5f, 0x72, 0xf5, 0x64, 0x42, 0x59, - 0x6d, 0xe2, 0xdc, 0xa5, 0x5e, 0x86, 0x11, 0x73, 0x5a, 0xd4, 0x71, 0x33, 0x8c, 0x3a, 0xc4, 0x21, - 0xed, 0xc0, 0x68, 0x3a, 0xc1, 0xc8, 0x5b, 0x13, 0x06, 0xca, 0x23, 0x04, 0xc5, 0x9b, 0x3e, 0x0d, - 0x37, 0xfc, 0xd8, 0x4b, 0x94, 0x5e, 0x25, 0x56, 0x53, 0xa7, 0xf7, 0xee, 0x53, 0xd7, 0xc3, 0x97, - 0x61, 0x82, 0xb8, 0x77, 0xeb, 0x3c, 0x6d, 0x71, 0x78, 0x06, 0xcd, 0xee, 0xab, 0xce, 0xa8, 0xf1, - 0x9c, 0xab, 0x57, 0xdc, 0xbb, 0x3c, 0x84, 0x3e, 0x4e, 0xe4, 0x2f, 0xdf, 0xbd, 0x61, 0xb6, 0xa4, - 0xfb, 0x48, 0xba, 0xfb, 0xa2, 0xd9, 0x92, 0xee, 0x0d, 0xf9, 0x4b, 0xf9, 0x6e, 0x18, 0xa6, 0x62, - 0xa0, 0xb9, 0x1d, 0x66, 0xbb, 0x14, 0xdf, 0x84, 0x42, 0xd3, 0xa1, 0x9c, 0xf1, 0xfa, 0x2a, 0xa5, - 0x75, 0xd6, 0xe1, 0xe4, 0x17, 0xd1, 0xcc, 0xc8, 0xec, 0xbe, 0xea, 0x94, 0x2a, 0xbb, 0xee, 0xf7, - 0x4e, 0x95, 0xbd, 0x53, 0xaf, 0x32, 0xd3, 0x5e, 0xdc, 0xf3, 0xf4, 0x8f, 0xe9, 0x21, 0x1d, 0x07, - 0xce, 0x4b, 0x94, 0xde, 0x10, 0xae, 0xf8, 0x03, 0x38, 0xea, 0x52, 0xcf, 0xb3, 0x68, 0x9b, 0xda, - 0x5e, 0x7d, 0xd5, 0x22, 0x5e, 0x24, 0xf2, 0x70, 0xbe, 0xc8, 0xc5, 0xad, 0x18, 0x4b, 0x16, 0xf1, - 0x42, 0xf1, 0x6f, 0xc3, 0xb1, 0x50, 0x7c, 0xc7, 0x4f, 0x1f, 0x49, 0x30, 0x92, 0x2f, 0xc1, 0xd4, - 0x56, 0x10, 0xdd, 0x8f, 0xb1, 0x95, 0x41, 0xa9, 0x40, 0x81, 0x33, 0x76, 0x8d, 0x7a, 0x82, 0x4d, - 0xd9, 0xc8, 0x29, 0x18, 0xe7, 0x5d, 0xa8, 0x9b, 0xad, 0x22, 0x9a, 0x41, 0xb3, 0x7b, 0xf4, 0xbd, - 0xfc, 0x79, 0xb9, 0xa5, 0xbc, 0x05, 0x87, 0xfb, 0x5c, 0x24, 0xc1, 0x35, 0x18, 0x15, 0x9d, 0x43, - 0xbc, 0x73, 0xc7, 0x93, 0x3a, 0x27, 0xbc, 0x84, 0xad, 0x72, 0x1b, 0x66, 0x22, 0xd1, 0x16, 0xd7, - 0xdf, 0x5c, 0xf3, 0xa8, 0x63, 0x13, 0x6b, 0xf9, 0x8d, 0x00, 0xcc, 0x51, 0x98, 0x10, 0xbb, 0x3d, - 0x40, 0x73, 0x40, 0x1f, 0x17, 0x0b, 0xcb, 0x2d, 0x3c, 0x0d, 0xfb, 0xa8, 0xf4, 0xf0, 0x5f, 0xfb, - 0x9b, 0x6e, 0x42, 0x87, 0x60, 0x69, 0xb9, 0xa5, 0xbc, 0x0f, 0x27, 0x52, 0x32, 0xfc, 0x1f, 0xec, - 0x3f, 0x23, 0x38, 0x1a, 0x84, 0xbe, 0xce, 0xf1, 0xf0, 0xd7, 0x6e, 0x2e, 0xdc, 0xc7, 0x01, 0x04, - 0xc3, 0xde, 0x7a, 0x87, 0x4a, 0xd8, 0x13, 0x7c, 0xe5, 0x9d, 0xf5, 0x0e, 0xc5, 0xa7, 0xe0, 0x20, - 0x59, 0xf5, 0xa8, 0x53, 0xef, 0xb5, 0x61, 0x84, 0xb7, 0x61, 0x3f, 0x5f, 0xbd, 0x21, 0x7a, 0x81, - 0x97, 0x00, 0xb6, 0x86, 0x50, 0xb1, 0xc9, 0xb1, 0x9f, 0x8e, 0x6c, 0x07, 0x31, 0xfd, 0x82, 0x4d, - 0xb1, 0x42, 0x0c, 0x2a, 0xd1, 0xe9, 0x21, 0x4f, 0xe5, 0x09, 0x82, 0x63, 0xf1, 0x95, 0x48, 0x7e, - 0x2e, 0xc2, 0x98, 0x98, 0x25, 0xf2, 0xb8, 0x64, 0x10, 0x24, 0x8d, 0xf1, 0xb5, 0x18, 0x7c, 0x67, - 0x32, 0xf1, 0x89, 0x9c, 0x11, 0x80, 0xbf, 0x23, 0x28, 0xf5, 0xba, 0xf8, 0xc0, 0x96, 0x0c, 0xf4, - 0x98, 0x56, 0x61, 0x94, 0xf9, 0xab, 0x9c, 0xe5, 0x89, 0xc5, 0xe2, 0x2f, 0xdf, 0xcf, 0x17, 0x64, - 0x96, 0x2b, 0xad, 0x96, 0x43, 0x5d, 0xf7, 0x6d, 0xcf, 0x31, 0x6d, 0x43, 0x17, 0x66, 0xbb, 0x8b, - 0xfc, 0xaf, 0x42, 0xdb, 0x28, 0x52, 0xdb, 0x2e, 0xe1, 0xfe, 0xc7, 0x10, 0xf7, 0x57, 0x5c, 0xb7, - 0x7f, 0x97, 0x17, 0x60, 0x94, 0xf8, 0xab, 0x82, 0x7b, 0x5d, 0x3c, 0xec, 0x5e, 0x86, 0x23, 0x15, - 0xec, 0x12, 0x86, 0x1b, 0xf2, 0x93, 0xea, 0xc3, 0xb3, 0xac, 0x28, 0xbd, 0x3b, 0xc5, 0xc1, 0x63, - 0x24, 0x3f, 0x8e, 0xd1, 0x24, 0xbb, 0x84, 0x81, 0x0b, 0x5b, 0x1f, 0x15, 0x31, 0x7f, 0xf2, 0xcc, - 0x50, 0xe5, 0x13, 0x04, 0x47, 0xfa, 0xdd, 0x64, 0x41, 0x55, 0xd8, 0x4b, 0xc4, 0xc9, 0xcf, 0x9c, - 0x09, 0x81, 0x21, 0x5e, 0x80, 0x31, 0x11, 0x5a, 0x4a, 0x97, 0x72, 0x12, 0x09, 0x32, 0x97, 0xb4, - 0x56, 0x9a, 0x11, 0x66, 0xc5, 0xcb, 0x1d, 0xef, 0xdf, 0x37, 0xe1, 0x53, 0x18, 0xca, 0x22, 0xeb, - 0xbd, 0x0c, 0x7b, 0x05, 0x9a, 0xa0, 0x83, 0x27, 0xd3, 0xc1, 0x2f, 0x3a, 0x26, 0x5d, 0xd5, 0x03, - 0x9f, 0x9d, 0x6b, 0x64, 0x01, 0x30, 0x47, 0xb9, 0xc2, 0x45, 0xa5, 0x2c, 0x44, 0xb9, 0x0e, 0x93, - 0x91, 0x55, 0x09, 0x7a, 0x01, 0xc6, 0x84, 0xf8, 0x94, 0x9f, 0xdd, 0x44, 0xc2, 0xa5, 0x9f, 0xb4, - 0x56, 0x1e, 0x22, 0xa9, 0x1a, 0xde, 0x25, 0x96, 0xd9, 0x22, 0x1e, 0xbd, 0xea, 0x6b, 0x33, 0x1a, - 0xdd, 0x39, 0x14, 0x0e, 0x73, 0xc9, 0x46, 0xeb, 0x72, 0x03, 0x39, 0xe2, 0x85, 0xcc, 0x55, 0x49, - 0xe4, 0xc7, 0x35, 0xae, 0xb1, 0x6e, 0x4c, 0x44, 0x7d, 0xb2, 0xb9, 0x7d, 0x51, 0x59, 0x95, 0xf2, - 0x22, 0x1e, 0x8a, 0x2c, 0xb4, 0x00, 0xa3, 0xd4, 0x71, 0x98, 0x13, 0xcc, 0x48, 0xfe, 0x80, 0xcf, - 0x02, 0x36, 0x58, 0xd7, 0xbf, 0x74, 0x74, 0xea, 0x0f, 0x4c, 0xcb, 0xaa, 0x77, 0x88, 0xeb, 0xf2, - 0xbd, 0x37, 0xae, 0x1f, 0x32, 0x58, 0x77, 0xc5, 0x61, 0x9d, 0xf7, 0x4c, 0xcb, 0x5a, 0x21, 0xae, - 0xab, 0x5c, 0x92, 0xed, 0x0f, 0xf2, 0x0c, 0x70, 0x4c, 0x6a, 0x72, 0xfa, 0xf5, 0xbb, 0xa6, 0x81, - 0x53, 0x3e, 0x44, 0x50, 0xee, 0xf3, 0xb2, 0x89, 0x41, 0x97, 0x28, 0xed, 0x6d, 0xed, 0x3a, 0x4c, - 0xb6, 0xf9, 0xa2, 0x2f, 0x4a, 0xdd, 0x3e, 0x7e, 0xb5, 0x74, 0x7e, 0xb7, 0x45, 0xd3, 0x5f, 0x6a, - 0xf7, 0x2f, 0x29, 0x2d, 0x98, 0x4e, 0x84, 0xb0, 0x63, 0xcc, 0x56, 0xbf, 0x98, 0x84, 0x51, 0x9e, - 0x06, 0x7f, 0x8d, 0x60, 0x7f, 0xf8, 0xee, 0x80, 0xcf, 0x27, 0x15, 0x91, 0x74, 0x03, 0x2a, 0x55, - 0x06, 0xf0, 0x10, 0x25, 0x28, 0x73, 0x1f, 0xfd, 0xfa, 0xd7, 0xe7, 0xc3, 0xa7, 0xb0, 0xa2, 0x25, - 0xdc, 0xbd, 0x7c, 0x76, 0xc5, 0x55, 0x0e, 0x7f, 0x89, 0x60, 0x3c, 0x10, 0xb2, 0xf8, 0x5c, 0x6a, - 0xae, 0x3e, 0x49, 0x5f, 0x9a, 0xcf, 0x69, 0x2d, 0x51, 0x9d, 0xe7, 0xa8, 0xe6, 0xf0, 0xac, 0x96, - 0x76, 0xb7, 0xd4, 0x36, 0x82, 0x0f, 0xf8, 0x26, 0x7e, 0x34, 0x0c, 0x85, 0x38, 0x91, 0x8d, 0x5f, - 0xc9, 0x95, 0x39, 0x46, 0xf9, 0x97, 0x2e, 0xfd, 0x07, 0x4f, 0x89, 0xff, 0x53, 0xc4, 0x0b, 0xf8, - 0x18, 0xe1, 0xd7, 0x52, 0x2b, 0x70, 0xe5, 0x4d, 0x5a, 0xdb, 0xe8, 0x1d, 0xa0, 0x4d, 0x6d, 0x23, - 0x74, 0xa5, 0xd8, 0xbc, 0xf5, 0x3a, 0x7e, 0x55, 0x4b, 0xbd, 0x85, 0x47, 0x7c, 0x25, 0x2f, 0xe1, - 0x08, 0xf8, 0x6f, 0x04, 0x87, 0xfa, 0xa4, 0x35, 0xae, 0x65, 0xd5, 0x16, 0x73, 0xa5, 0x28, 0x5d, - 0x18, 0xcc, 0x49, 0x72, 0x61, 0x73, 0x2a, 0xee, 0xe0, 0xca, 0xc0, 0x4c, 0xdc, 0xaa, 0x25, 0x3b, - 0x25, 0xd5, 0xee, 0xe2, 0x6f, 0x11, 0x1c, 0x8c, 0x8a, 0x59, 0x5c, 0xcd, 0xec, 0xe4, 0x36, 0x55, - 0x5f, 0xaa, 0x0d, 0xe4, 0x23, 0x6b, 0xbd, 0xc0, 0x6b, 0x55, 0xf1, 0xb9, 0x8c, 0x5a, 0xf9, 0x45, - 0x40, 0xdb, 0xe0, 0x7f, 0x36, 0x03, 0xc4, 0x21, 0x71, 0x98, 0x8d, 0x78, 0xbb, 0x16, 0xce, 0x46, - 0x1c, 0xa3, 0x3e, 0x73, 0x23, 0xe6, 0xc2, 0x5a, 0xdb, 0xe0, 0x7f, 0x36, 0xf1, 0x63, 0x04, 0xfb, - 0xc3, 0x52, 0x2e, 0x63, 0x56, 0xc5, 0x48, 0xcb, 0x8c, 0x59, 0x15, 0xa7, 0x13, 0x95, 0xd3, 0x1c, - 0xeb, 0x0c, 0x2e, 0xa7, 0x63, 0xc5, 0x4f, 0x10, 0x4c, 0xf4, 0x76, 0x23, 0x9e, 0xcf, 0xb7, 0x6b, - 0x03, 0x5c, 0x6a, 0x5e, 0x73, 0x09, 0xaa, 0xca, 0x41, 0x9d, 0xc3, 0x73, 0xf9, 0x77, 0xaa, 0x3f, - 0xea, 0x0f, 0x44, 0x94, 0x14, 0xce, 0xc3, 0x46, 0x54, 0xdb, 0x95, 0xaa, 0x83, 0xb8, 0x48, 0xb0, - 0x67, 0x38, 0xd8, 0x13, 0x78, 0x3a, 0x1d, 0xac, 0x8b, 0x1f, 0x22, 0x18, 0x13, 0xba, 0x07, 0xcf, - 0xa5, 0xe6, 0x89, 0x48, 0xad, 0xd2, 0xd9, 0x5c, 0xb6, 0x79, 0xdb, 0x29, 0x04, 0x17, 0xfe, 0x09, - 0x41, 0x21, 0x4e, 0xe0, 0x64, 0x8c, 0xf6, 0x14, 0x79, 0x96, 0x31, 0xda, 0xd3, 0xd4, 0x94, 0xb2, - 0xc0, 0x51, 0x9f, 0xc7, 0x6a, 0x12, 0xea, 0xae, 0xf4, 0xd6, 0x22, 0x02, 0x10, 0xff, 0x83, 0xe0, - 0x60, 0x54, 0x03, 0x65, 0x1c, 0xf2, 0x58, 0xad, 0x95, 0x71, 0xc8, 0xe3, 0x45, 0x96, 0xe2, 0x70, - 0xcc, 0x16, 0xae, 0x65, 0x62, 0x8e, 0x19, 0xc2, 0x17, 0x93, 0xdd, 0x62, 0x86, 0x70, 0x10, 0x09, - 0xff, 0x80, 0x00, 0x6f, 0x97, 0x4e, 0x78, 0x21, 0x27, 0xfe, 0x3e, 0x35, 0x56, 0x7a, 0x79, 0x60, - 0xbf, 0xbc, 0x03, 0x2e, 0x54, 0x7b, 0x4f, 0x4e, 0x2e, 0xd2, 0xa7, 0xcf, 0xcb, 0xe8, 0xd9, 0xf3, - 0x32, 0xfa, 0xf3, 0x79, 0x19, 0x7d, 0xf6, 0xa2, 0x3c, 0xf4, 0xec, 0x45, 0x79, 0xe8, 0xb7, 0x17, - 0xe5, 0x21, 0x98, 0x32, 0x59, 0x02, 0x94, 0x15, 0x74, 0x4b, 0x35, 0x4c, 0xef, 0xce, 0xfd, 0x86, - 0xda, 0x64, 0xed, 0x50, 0xba, 0x79, 0x93, 0x85, 0x93, 0xaf, 0xf5, 0xd2, 0x37, 0xc6, 0xf8, 0xbf, - 0xb5, 0x6b, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0xee, 0xee, 0x11, 0x25, 0x3f, 0x18, 0x00, 0x00, + // 1470 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0xbd, 0x6f, 0x14, 0x47, + 0x1b, 0xf7, 0xd8, 0xd8, 0xd8, 0x0f, 0x5f, 0x7a, 0xc7, 0x07, 0x3a, 0x1f, 0x70, 0x36, 0x0b, 0x02, + 0xcb, 0xe0, 0x5d, 0xee, 0x0e, 0xfc, 0xbe, 0x14, 0xbc, 0x09, 0x26, 0x31, 0xb2, 0x14, 0x84, 0xd9, + 0x44, 0x49, 0xe4, 0x22, 0xc7, 0xdc, 0xdd, 0x78, 0x59, 0xb1, 0xb7, 0x73, 0xec, 0x2e, 0x87, 0x2d, + 0xcb, 0x45, 0x3e, 0x1a, 0x52, 0x45, 0x4a, 0x0a, 0x22, 0x14, 0xd2, 0xa4, 0x4f, 0x8a, 0x74, 0x29, + 0x52, 0xa4, 0x08, 0x25, 0x4a, 0x9a, 0xa4, 0x89, 0x22, 0x48, 0x99, 0xfc, 0x0f, 0xd1, 0xce, 0xcc, + 0x9e, 0x77, 0xcf, 0xfb, 0x75, 0x89, 0x0b, 0x57, 0xbe, 0x9d, 0x7d, 0x3e, 0x7e, 0xcf, 0xef, 0x99, + 0x79, 0xf6, 0x37, 0x06, 0xa5, 0xe3, 0xb0, 0x2e, 0xb5, 0x89, 0xdd, 0xa4, 0x1a, 0x5d, 0x6f, 0xde, + 0x25, 0xb6, 0x41, 0xb5, 0x6e, 0x45, 0xbb, 0xff, 0x80, 0x3a, 0x1b, 0x6a, 0xc7, 0x61, 0x1e, 0xc3, + 0xc7, 0xb6, 0x6d, 0xd4, 0xc0, 0x46, 0xed, 0x56, 0x4a, 0x53, 0x4d, 0xe6, 0xb6, 0x99, 0x5b, 0xe7, + 0x56, 0x9a, 0x78, 0x10, 0x2e, 0xa5, 0x39, 0xf1, 0xa4, 0x35, 0x88, 0x4b, 0x45, 0x2c, 0xad, 0x5b, + 0x69, 0x50, 0x8f, 0x54, 0xb4, 0x0e, 0x31, 0x4c, 0x9b, 0x78, 0x26, 0xb3, 0xa5, 0x6d, 0x39, 0x6c, + 0x1b, 0x58, 0x35, 0x99, 0x19, 0xbc, 0x3f, 0x61, 0x30, 0x66, 0x58, 0x54, 0x23, 0x1d, 0x53, 0x23, + 0xb6, 0xcd, 0x3c, 0xee, 0x1c, 0x64, 0x2a, 0x18, 0xcc, 0x60, 0x02, 0x81, 0xff, 0x4b, 0xae, 0x9e, + 0x4e, 0x28, 0xab, 0x4d, 0x9c, 0x7b, 0xd4, 0xcb, 0x30, 0x62, 0x4e, 0x8b, 0x3a, 0x6e, 0x86, 0x51, + 0x87, 0x38, 0xa4, 0x1d, 0x18, 0x4d, 0x27, 0x18, 0x79, 0xeb, 0xc2, 0x40, 0x79, 0x8c, 0xa0, 0x78, + 0xdb, 0xa7, 0xe1, 0x96, 0x1f, 0x7b, 0x89, 0xd2, 0xeb, 0xc4, 0x6a, 0xea, 0xf4, 0xfe, 0x03, 0xea, + 0x7a, 0xf8, 0x2a, 0x4c, 0x10, 0xf7, 0x5e, 0x9d, 0xa7, 0x2d, 0x0e, 0xcf, 0xa0, 0xd9, 0x03, 0xd5, + 0x19, 0x35, 0x9e, 0x73, 0xf5, 0x9a, 0x7b, 0x8f, 0x87, 0xd0, 0xc7, 0x89, 0xfc, 0xe5, 0xbb, 0x37, + 0xcc, 0x96, 0x74, 0x1f, 0x49, 0x77, 0x5f, 0x34, 0x5b, 0xd2, 0xbd, 0x21, 0x7f, 0x29, 0xdf, 0x0c, + 0xc3, 0x54, 0x0c, 0x34, 0xb7, 0xc3, 0x6c, 0x97, 0xe2, 0xdb, 0x50, 0x68, 0x3a, 0x94, 0x33, 0x5e, + 0x5f, 0xa3, 0xb4, 0xce, 0x3a, 0x9c, 0xfc, 0x22, 0x9a, 0x19, 0x99, 0x3d, 0x50, 0x9d, 0x52, 0x65, + 0xd7, 0xfd, 0xde, 0xa9, 0xb2, 0x77, 0xea, 0x75, 0x66, 0xda, 0x8b, 0xfb, 0x9e, 0xfd, 0x36, 0x3d, + 0xa4, 0xe3, 0xc0, 0x79, 0x89, 0xd2, 0x5b, 0xc2, 0x15, 0xbf, 0x07, 0xc7, 0x5d, 0xea, 0x79, 0x16, + 0x6d, 0x53, 0xdb, 0xab, 0xaf, 0x59, 0xc4, 0x8b, 0x44, 0x1e, 0xce, 0x17, 0xb9, 0xb8, 0x1d, 0x63, + 0xc9, 0x22, 0x5e, 0x28, 0xfe, 0x1d, 0x38, 0x11, 0x8a, 0xef, 0xf8, 0xe9, 0x23, 0x09, 0x46, 0xf2, + 0x25, 0x98, 0xda, 0x0e, 0xa2, 0xfb, 0x31, 0xb6, 0x33, 0x28, 0x15, 0x28, 0x70, 0xc6, 0x6e, 0x50, + 0x4f, 0xb0, 0x29, 0x1b, 0x39, 0x05, 0xe3, 0xbc, 0x0b, 0x75, 0xb3, 0x55, 0x44, 0x33, 0x68, 0x76, + 0x9f, 0xbe, 0x9f, 0x3f, 0x2f, 0xb7, 0x94, 0x37, 0xe0, 0x68, 0x9f, 0x8b, 0x24, 0xb8, 0x06, 0xa3, + 0xa2, 0x73, 0x88, 0x77, 0xee, 0x64, 0x52, 0xe7, 0x84, 0x97, 0xb0, 0x55, 0xee, 0xc0, 0x4c, 0x24, + 0xda, 0xe2, 0xc6, 0xeb, 0xeb, 0x1e, 0x75, 0x6c, 0x62, 0x2d, 0xbf, 0x16, 0x80, 0x39, 0x0e, 0x13, + 0x62, 0xb7, 0x07, 0x68, 0x0e, 0xe9, 0xe3, 0x62, 0x61, 0xb9, 0x85, 0xa7, 0xe1, 0x00, 0x95, 0x1e, + 0xfe, 0x6b, 0x7f, 0xd3, 0x4d, 0xe8, 0x10, 0x2c, 0x2d, 0xb7, 0x94, 0x77, 0xe1, 0x54, 0x4a, 0x86, + 0x7f, 0x83, 0xfd, 0x47, 0x04, 0xc7, 0x83, 0xd0, 0x37, 0x39, 0x1e, 0xfe, 0xda, 0xcd, 0x85, 0xfb, + 0x24, 0x80, 0x60, 0xd8, 0xdb, 0xe8, 0x50, 0x09, 0x7b, 0x82, 0xaf, 0xbc, 0xb5, 0xd1, 0xa1, 0xf8, + 0x0c, 0x1c, 0x26, 0x6b, 0x1e, 0x75, 0xea, 0xbd, 0x36, 0x8c, 0xf0, 0x36, 0x1c, 0xe4, 0xab, 0xb7, + 0x44, 0x2f, 0xf0, 0x12, 0xc0, 0xf6, 0x10, 0x2a, 0x36, 0x39, 0xf6, 0xb3, 0x91, 0xed, 0x20, 0xa6, + 0x5f, 0xb0, 0x29, 0x56, 0x88, 0x41, 0x25, 0x3a, 0x3d, 0xe4, 0xa9, 0x3c, 0x45, 0x70, 0x22, 0xbe, + 0x12, 0xc9, 0xcf, 0x65, 0x18, 0x13, 0xb3, 0x44, 0x1e, 0x97, 0x0c, 0x82, 0xa4, 0x31, 0xbe, 0x11, + 0x83, 0xef, 0x5c, 0x26, 0x3e, 0x91, 0x33, 0x02, 0xf0, 0x57, 0x04, 0xa5, 0x5e, 0x17, 0x1f, 0xda, + 0x92, 0x81, 0x1e, 0xd3, 0x2a, 0x8c, 0x32, 0x7f, 0x95, 0xb3, 0x3c, 0xb1, 0x58, 0xfc, 0xe9, 0xdb, + 0xf9, 0x82, 0xcc, 0x72, 0xad, 0xd5, 0x72, 0xa8, 0xeb, 0xbe, 0xe9, 0x39, 0xa6, 0x6d, 0xe8, 0xc2, + 0x6c, 0x6f, 0x91, 0xff, 0x45, 0x68, 0x1b, 0x45, 0x6a, 0xdb, 0x23, 0xdc, 0x7f, 0x1f, 0xe2, 0xfe, + 0x9a, 0xeb, 0xf6, 0xef, 0xf2, 0x02, 0x8c, 0x12, 0x7f, 0x55, 0x70, 0xaf, 0x8b, 0x87, 0xbd, 0xcb, + 0x70, 0xa4, 0x82, 0x3d, 0xc2, 0x70, 0x43, 0x7e, 0x52, 0x7d, 0x78, 0x96, 0x15, 0xa5, 0x77, 0xb7, + 0x38, 0x78, 0x82, 0xe4, 0xc7, 0x31, 0x9a, 0x64, 0x8f, 0x30, 0x70, 0x69, 0xfb, 0xa3, 0x22, 0xe6, + 0x4f, 0x9e, 0x19, 0xaa, 0x7c, 0x84, 0xe0, 0x58, 0xbf, 0x9b, 0x2c, 0xa8, 0x0a, 0xfb, 0x89, 0x38, + 0xf9, 0x99, 0x33, 0x21, 0x30, 0xc4, 0x0b, 0x30, 0x26, 0x42, 0x4b, 0xe9, 0x52, 0x4e, 0x22, 0x41, + 0xe6, 0x92, 0xd6, 0x4a, 0x33, 0xc2, 0xac, 0x78, 0xb9, 0xeb, 0xfd, 0xfb, 0x2a, 0x7c, 0x0a, 0x43, + 0x59, 0x64, 0xbd, 0x57, 0x61, 0xbf, 0x40, 0x13, 0x74, 0xf0, 0x74, 0x3a, 0xf8, 0x45, 0xc7, 0xa4, + 0x6b, 0x7a, 0xe0, 0xb3, 0x7b, 0x8d, 0x2c, 0x00, 0xe6, 0x28, 0x57, 0xb8, 0xa8, 0x94, 0x85, 0x28, + 0x37, 0x61, 0x32, 0xb2, 0x2a, 0x41, 0x2f, 0xc0, 0x98, 0x10, 0x9f, 0xf2, 0xb3, 0x9b, 0x48, 0xb8, + 0xf4, 0x93, 0xd6, 0xca, 0x23, 0x24, 0x55, 0xc3, 0xdb, 0xc4, 0x32, 0x5b, 0xc4, 0xa3, 0xd7, 0x7d, + 0x6d, 0x46, 0xa3, 0x3b, 0x87, 0xc2, 0x51, 0x2e, 0xd9, 0x68, 0x5d, 0x6e, 0x20, 0x47, 0xbc, 0x90, + 0xb9, 0x2a, 0x89, 0xfc, 0xb8, 0xc6, 0x0d, 0xd6, 0x8d, 0x89, 0xa8, 0x4f, 0x36, 0x77, 0x2e, 0x2a, + 0x6b, 0x52, 0x5e, 0xc4, 0x43, 0x91, 0x85, 0x16, 0x60, 0x94, 0x3a, 0x0e, 0x73, 0x82, 0x19, 0xc9, + 0x1f, 0xf0, 0x79, 0xc0, 0x06, 0xeb, 0xfa, 0x97, 0x8e, 0x4e, 0xfd, 0xa1, 0x69, 0x59, 0xf5, 0x0e, + 0x71, 0x5d, 0xbe, 0xf7, 0xc6, 0xf5, 0x23, 0x06, 0xeb, 0xae, 0x38, 0xac, 0xf3, 0x8e, 0x69, 0x59, + 0x2b, 0xc4, 0x75, 0x95, 0x2b, 0xb2, 0xfd, 0x41, 0x9e, 0x01, 0x8e, 0x49, 0x4d, 0x4e, 0xbf, 0x7e, + 0xd7, 0x34, 0x70, 0xca, 0xfb, 0x08, 0xca, 0x7d, 0x5e, 0x36, 0x31, 0xe8, 0x12, 0xa5, 0xbd, 0xad, + 0x5d, 0x87, 0xc9, 0x36, 0x5f, 0xf4, 0x45, 0xa9, 0xdb, 0xc7, 0xaf, 0x96, 0xce, 0xef, 0x8e, 0x68, + 0xfa, 0x7f, 0xda, 0xfd, 0x4b, 0x4a, 0x0b, 0xa6, 0x13, 0x21, 0xec, 0x1a, 0xb3, 0xd5, 0xcf, 0x26, + 0x61, 0x94, 0xa7, 0xc1, 0x5f, 0x22, 0x38, 0x18, 0xbe, 0x3b, 0xe0, 0x8b, 0x49, 0x45, 0x24, 0xdd, + 0x80, 0x4a, 0x95, 0x01, 0x3c, 0x44, 0x09, 0xca, 0xdc, 0x07, 0x3f, 0xff, 0xf1, 0xe9, 0xf0, 0x19, + 0xac, 0x68, 0x09, 0x77, 0x2f, 0x9f, 0x5d, 0x71, 0x95, 0xc3, 0x9f, 0x23, 0x18, 0x0f, 0x84, 0x2c, + 0xbe, 0x90, 0x9a, 0xab, 0x4f, 0xd2, 0x97, 0xe6, 0x73, 0x5a, 0x4b, 0x54, 0x17, 0x39, 0xaa, 0x39, + 0x3c, 0xab, 0xa5, 0xdd, 0x2d, 0xb5, 0xcd, 0xe0, 0x03, 0xbe, 0x85, 0x1f, 0x0f, 0x43, 0x21, 0x4e, + 0x64, 0xe3, 0xff, 0xe5, 0xca, 0x1c, 0xa3, 0xfc, 0x4b, 0x57, 0xfe, 0x81, 0xa7, 0xc4, 0xff, 0x31, + 0xe2, 0x05, 0x7c, 0x88, 0x56, 0x5f, 0xc5, 0xff, 0xd7, 0x52, 0x2f, 0xd1, 0xda, 0x66, 0xef, 0xec, + 0x6c, 0x05, 0x65, 0x85, 0xee, 0x14, 0x5b, 0xf8, 0x95, 0x54, 0x0e, 0xdc, 0xb8, 0x30, 0xd1, 0x00, + 0x7f, 0x22, 0x38, 0xd2, 0x27, 0xad, 0x71, 0x2d, 0xab, 0xb6, 0x98, 0x2b, 0x45, 0xe9, 0xd2, 0x60, + 0x4e, 0x92, 0x0b, 0x9b, 0x53, 0x71, 0x77, 0xb5, 0x86, 0x2b, 0x83, 0x32, 0xe1, 0x26, 0xbb, 0x24, + 0x16, 0x8f, 0xbf, 0x46, 0x70, 0x38, 0x2a, 0x66, 0x71, 0x35, 0xb3, 0x93, 0x3b, 0x54, 0x7d, 0xa9, + 0x36, 0x90, 0x8f, 0xac, 0xf5, 0x12, 0xaf, 0x55, 0xc5, 0x17, 0x32, 0x60, 0xf3, 0x8b, 0x80, 0xb6, + 0xc9, 0xff, 0xf4, 0x10, 0x87, 0xc4, 0x61, 0x36, 0xe2, 0x9d, 0x5a, 0x38, 0x1b, 0x71, 0x8c, 0xfa, + 0xcc, 0x8d, 0x98, 0x0b, 0x6b, 0x6d, 0x93, 0xff, 0xd9, 0xc2, 0x4f, 0x10, 0x1c, 0x0c, 0x4b, 0xb9, + 0x8c, 0x59, 0x15, 0x23, 0x2d, 0x33, 0x66, 0x55, 0x9c, 0x4e, 0x54, 0xce, 0x72, 0xac, 0x33, 0xb8, + 0x9c, 0x8e, 0x15, 0x3f, 0x45, 0x30, 0xd1, 0xdb, 0x8d, 0x78, 0x3e, 0xdf, 0xae, 0x0d, 0x70, 0xa9, + 0x79, 0xcd, 0x25, 0xa8, 0x2a, 0x07, 0x75, 0x01, 0xcf, 0xe5, 0xdf, 0xdc, 0xfe, 0xa8, 0x3f, 0x14, + 0x51, 0x52, 0x38, 0x0f, 0x1b, 0x51, 0x6d, 0x57, 0xaa, 0x0e, 0xe2, 0x22, 0xc1, 0x9e, 0xe3, 0x60, + 0x4f, 0xe1, 0xe9, 0x74, 0xb0, 0x2e, 0x7e, 0x84, 0x60, 0x4c, 0xe8, 0x1e, 0x3c, 0x97, 0x9a, 0x27, + 0x22, 0xb5, 0x4a, 0xe7, 0x73, 0xd9, 0xe6, 0x6d, 0xa7, 0x10, 0x5c, 0xf8, 0x07, 0x04, 0x85, 0x38, + 0x81, 0x93, 0x31, 0xda, 0x53, 0xe4, 0x59, 0xc6, 0x68, 0x4f, 0x53, 0x53, 0xca, 0x02, 0x47, 0x7d, + 0x11, 0xab, 0x49, 0xa8, 0xbb, 0xd2, 0x5b, 0x8b, 0x08, 0x40, 0xfc, 0x17, 0x82, 0xc3, 0x51, 0x0d, + 0x94, 0x71, 0xc8, 0x63, 0xb5, 0x56, 0xc6, 0x21, 0x8f, 0x17, 0x59, 0x8a, 0xc3, 0x31, 0x5b, 0xab, + 0x97, 0x71, 0x6d, 0x80, 0x11, 0x1c, 0x14, 0x92, 0xec, 0xd4, 0x2b, 0x35, 0x66, 0x8f, 0x7f, 0x87, + 0x00, 0xef, 0x94, 0x4e, 0x78, 0x21, 0x27, 0xfe, 0x3e, 0x35, 0x56, 0xfa, 0xef, 0xc0, 0x7e, 0x79, + 0x07, 0x5c, 0xa8, 0x88, 0x9e, 0x9c, 0x5c, 0xa4, 0xcf, 0x5e, 0x94, 0xd1, 0xf3, 0x17, 0x65, 0xf4, + 0xfb, 0x8b, 0x32, 0xfa, 0xe4, 0x65, 0x79, 0xe8, 0xf9, 0xcb, 0xf2, 0xd0, 0x2f, 0x2f, 0xcb, 0x43, + 0x30, 0x65, 0xb2, 0x04, 0x28, 0x2b, 0x68, 0x55, 0x35, 0x4c, 0xef, 0xee, 0x83, 0x86, 0xda, 0x64, + 0xed, 0x50, 0xba, 0x79, 0x93, 0x85, 0x93, 0xaf, 0xf7, 0xd2, 0x37, 0xc6, 0xf8, 0xbf, 0xb5, 0x6b, + 0x7f, 0x07, 0x00, 0x00, 0xff, 0xff, 0xcc, 0x87, 0x82, 0xbd, 0x3f, 0x18, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/exchange/query.pb.gw.go b/x/exchange/query.pb.gw.go index 240e0f5861..d0cc5a8dea 100644 --- a/x/exchange/query.pb.gw.go +++ b/x/exchange/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_OrderFeeCalc_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} @@ -888,12 +890,14 @@ func local_request_Query_ValidateManageFees_0(ctx context.Context, marshaler run // 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_OrderFeeCalc_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 { @@ -901,6 +905,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_OrderFeeCalc_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) @@ -914,6 +919,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_GetOrder_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 { @@ -921,6 +928,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_GetOrder_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) @@ -934,6 +942,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_GetOrderByExternalID_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 { @@ -941,6 +951,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_GetOrderByExternalID_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) @@ -954,6 +965,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_GetOrderByExternalID_1, 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 { @@ -961,6 +974,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_GetOrderByExternalID_1(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) @@ -974,6 +988,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_GetMarketOrders_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 { @@ -981,6 +997,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_GetMarketOrders_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) @@ -994,6 +1011,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_GetMarketOrders_1, 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 { @@ -1001,6 +1020,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_GetMarketOrders_1(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) @@ -1014,6 +1034,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_GetOwnerOrders_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 { @@ -1021,6 +1043,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_GetOwnerOrders_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) @@ -1034,6 +1057,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_GetAssetOrders_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 { @@ -1041,6 +1066,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_GetAssetOrders_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) @@ -1054,6 +1080,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_GetAllOrders_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 { @@ -1061,6 +1089,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_GetAllOrders_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) @@ -1074,6 +1103,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_GetMarket_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 { @@ -1081,6 +1112,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_GetMarket_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) @@ -1094,6 +1126,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_GetAllMarkets_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 { @@ -1101,6 +1135,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_GetAllMarkets_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) @@ -1114,6 +1149,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Params_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 { @@ -1121,6 +1158,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Params_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) @@ -1134,6 +1172,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_ValidateCreateMarket_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 { @@ -1141,6 +1181,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_ValidateCreateMarket_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) @@ -1154,6 +1195,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_ValidateMarket_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 { @@ -1161,6 +1204,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_ValidateMarket_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) @@ -1174,6 +1218,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_ValidateMarket_1, 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 { @@ -1181,6 +1227,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_ValidateMarket_1(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) @@ -1194,6 +1241,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_ValidateManageFees_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 { @@ -1201,6 +1250,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_ValidateManageFees_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/exchange/tx.pb.go b/x/exchange/tx.pb.go index 5cf2b5235d..b775b9a174 100644 --- a/x/exchange/tx.pb.go +++ b/x/exchange/tx.pb.go @@ -10,9 +10,9 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/cosmos-sdk/types/msgservice" - _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" diff --git a/x/hold/client/cli/cli_test.go b/x/hold/client/cli/cli_test.go index b30b9ac4c1..1ced76734f 100644 --- a/x/hold/client/cli/cli_test.go +++ b/x/hold/client/cli/cli_test.go @@ -6,8 +6,8 @@ import ( "testing" "time" + "github.com/cosmos/gogoproto/proto" "github.com/ghodss/yaml" - "github.com/gogo/protobuf/proto" "github.com/spf13/cobra" "github.com/stretchr/testify/suite" diff --git a/x/hold/events.pb.go b/x/hold/events.pb.go index e157687817..8332f341ba 100644 --- a/x/hold/events.pb.go +++ b/x/hold/events.pb.go @@ -6,7 +6,7 @@ package hold import ( fmt "fmt" _ "github.com/cosmos/cosmos-proto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/hold/events_test.go b/x/hold/events_test.go index 8be71a6bfc..d3a404f242 100644 --- a/x/hold/events_test.go +++ b/x/hold/events_test.go @@ -4,7 +4,7 @@ import ( "fmt" "testing" - "github.com/gogo/protobuf/proto" + "github.com/cosmos/gogoproto/proto" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/x/hold/genesis.pb.go b/x/hold/genesis.pb.go index 1c91498162..d0e425d06e 100644 --- a/x/hold/genesis.pb.go +++ b/x/hold/genesis.pb.go @@ -5,8 +5,8 @@ package hold import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/hold/hold.pb.go b/x/hold/hold.pb.go index 629ccb1058..55b5df0b4b 100644 --- a/x/hold/hold.pb.go +++ b/x/hold/hold.pb.go @@ -7,8 +7,8 @@ import ( fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/hold/query.pb.go b/x/hold/query.pb.go index a02abce37f..2b43ff715a 100644 --- a/x/hold/query.pb.go +++ b/x/hold/query.pb.go @@ -9,9 +9,9 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" query "github.com/cosmos/cosmos-sdk/types/query" - _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" diff --git a/x/hold/query.pb.gw.go b/x/hold/query.pb.gw.go index bdfc37d074..7001944e91 100644 --- a/x/hold/query.pb.gw.go +++ b/x/hold/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 func request_Query_GetHolds_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq GetHoldsRequest @@ -124,12 +126,14 @@ func local_request_Query_GetAllHolds_0(ctx context.Context, marshaler runtime.Ma // 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_GetHolds_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_GetHolds_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_GetAllHolds_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_GetAllHolds_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/ibchooks/types/genesis.pb.go b/x/ibchooks/types/genesis.pb.go index 1a5f44c078..44d053ab58 100644 --- a/x/ibchooks/types/genesis.pb.go +++ b/x/ibchooks/types/genesis.pb.go @@ -5,8 +5,8 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/ibchooks/types/params.pb.go b/x/ibchooks/types/params.pb.go index 291e22fff8..f4b5570219 100644 --- a/x/ibchooks/types/params.pb.go +++ b/x/ibchooks/types/params.pb.go @@ -5,8 +5,8 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/ibchooks/types/tx.pb.go b/x/ibchooks/types/tx.pb.go index 5bd05d691d..7d6864a673 100644 --- a/x/ibchooks/types/tx.pb.go +++ b/x/ibchooks/types/tx.pb.go @@ -6,9 +6,9 @@ package types import ( context "context" fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" diff --git a/x/ibcratelimit/event.pb.go b/x/ibcratelimit/event.pb.go index 16f79c7bc4..883296d861 100644 --- a/x/ibcratelimit/event.pb.go +++ b/x/ibcratelimit/event.pb.go @@ -5,7 +5,7 @@ package ibcratelimit import ( fmt "fmt" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/ibcratelimit/genesis.pb.go b/x/ibcratelimit/genesis.pb.go index ac0523b951..afec0c3941 100644 --- a/x/ibcratelimit/genesis.pb.go +++ b/x/ibcratelimit/genesis.pb.go @@ -5,8 +5,8 @@ package ibcratelimit import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/ibcratelimit/keeper/keeper.go b/x/ibcratelimit/keeper/keeper.go index 097fc0a7c5..80991b9b48 100644 --- a/x/ibcratelimit/keeper/keeper.go +++ b/x/ibcratelimit/keeper/keeper.go @@ -1,7 +1,7 @@ package keeper import ( - "github.com/gogo/protobuf/proto" + "github.com/cosmos/gogoproto/proto" "cosmossdk.io/log" storetypes "cosmossdk.io/store/types" diff --git a/x/ibcratelimit/keeper/msg_server_test.go b/x/ibcratelimit/keeper/msg_server_test.go index 9a4769f3dc..02e539162a 100644 --- a/x/ibcratelimit/keeper/msg_server_test.go +++ b/x/ibcratelimit/keeper/msg_server_test.go @@ -4,7 +4,7 @@ import ( "fmt" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/gogo/protobuf/proto" + "github.com/cosmos/gogoproto/proto" "github.com/provenance-io/provenance/x/ibcratelimit" ) diff --git a/x/ibcratelimit/params.pb.go b/x/ibcratelimit/params.pb.go index cb8b1d2208..7acf3075f1 100644 --- a/x/ibcratelimit/params.pb.go +++ b/x/ibcratelimit/params.pb.go @@ -5,8 +5,8 @@ package ibcratelimit import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/ibcratelimit/query.pb.go b/x/ibcratelimit/query.pb.go index 867b242efa..280ad601b2 100644 --- a/x/ibcratelimit/query.pb.go +++ b/x/ibcratelimit/query.pb.go @@ -6,9 +6,9 @@ package ibcratelimit import ( context "context" fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" diff --git a/x/ibcratelimit/query.pb.gw.go b/x/ibcratelimit/query.pb.gw.go index 3c25603511..6fad25e971 100644 --- a/x/ibcratelimit/query.pb.gw.go +++ b/x/ibcratelimit/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 func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq ParamsRequest @@ -52,12 +54,14 @@ func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshal // 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_Params_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 { @@ -65,6 +69,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Params_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/ibcratelimit/tx.pb.go b/x/ibcratelimit/tx.pb.go index dfb43d217d..cd0563f8ec 100644 --- a/x/ibcratelimit/tx.pb.go +++ b/x/ibcratelimit/tx.pb.go @@ -8,9 +8,9 @@ import ( fmt "fmt" _ "github.com/cosmos/cosmos-proto" _ "github.com/cosmos/cosmos-sdk/types/msgservice" - _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" diff --git a/x/marker/client/cli/cli_test.go b/x/marker/client/cli/cli_test.go index 7681794bc3..0b89b0f9d5 100644 --- a/x/marker/client/cli/cli_test.go +++ b/x/marker/client/cli/cli_test.go @@ -10,7 +10,7 @@ import ( "testing" "time" - "github.com/gogo/protobuf/proto" + "github.com/cosmos/gogoproto/proto" "github.com/spf13/cobra" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/x/marker/types/accessgrant.go b/x/marker/types/accessgrant.go index f5bc18819d..74f4fbe2d3 100644 --- a/x/marker/types/accessgrant.go +++ b/x/marker/types/accessgrant.go @@ -4,7 +4,7 @@ import ( "fmt" "strings" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" sdk "github.com/cosmos/cosmos-sdk/types" ) diff --git a/x/marker/types/accessgrant.pb.go b/x/marker/types/accessgrant.pb.go index b604294dac..838470201b 100644 --- a/x/marker/types/accessgrant.pb.go +++ b/x/marker/types/accessgrant.pb.go @@ -6,8 +6,8 @@ package types import ( fmt "fmt" _ "github.com/cosmos/cosmos-proto" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/marker/types/authz.pb.go b/x/marker/types/authz.pb.go index 6ca73ba66c..ba414ff12c 100644 --- a/x/marker/types/authz.pb.go +++ b/x/marker/types/authz.pb.go @@ -8,8 +8,8 @@ import ( _ "github.com/cosmos/cosmos-proto" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/marker/types/codec.go b/x/marker/types/codec.go index 744cb22554..dc343ea640 100644 --- a/x/marker/types/codec.go +++ b/x/marker/types/codec.go @@ -44,7 +44,7 @@ func RegisterInterfaces(registry types.InterfaceRegistry) { registry.RegisterInterface( "provenance.marker.v1.MarkerAccount", - (*authtypes.AccountI)(nil), + (*sdk.AccountI)(nil), &MarkerAccount{}, ) diff --git a/x/marker/types/genesis.pb.go b/x/marker/types/genesis.pb.go index ceb0c27c9f..bba7579831 100644 --- a/x/marker/types/genesis.pb.go +++ b/x/marker/types/genesis.pb.go @@ -5,8 +5,8 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/marker/types/marker.go b/x/marker/types/marker.go index 025b5fa3c9..18218d722b 100644 --- a/x/marker/types/marker.go +++ b/x/marker/types/marker.go @@ -5,7 +5,7 @@ import ( "fmt" "strings" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" sdkmath "cosmossdk.io/math" @@ -16,7 +16,7 @@ import ( var ( // ensure the MarkerAccount correctly extends the following interfaces - _ authtypes.AccountI = (*MarkerAccount)(nil) + _ sdk.AccountI = (*MarkerAccount)(nil) _ authtypes.GenesisAccount = (*MarkerAccount)(nil) _ MarkerAccountI = (*MarkerAccount)(nil) ) @@ -25,7 +25,7 @@ var ( type MarkerAccountI interface { proto.Message - authtypes.AccountI + sdk.AccountI Clone() *MarkerAccount Validate() error diff --git a/x/marker/types/marker.pb.go b/x/marker/types/marker.pb.go index ca98c88e55..e03a2ad876 100644 --- a/x/marker/types/marker.pb.go +++ b/x/marker/types/marker.pb.go @@ -1,12 +1,6 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. // source: provenance/marker/v1/marker.proto -// TODO[1760]: proto: Regenerate this file with updated library references for .Dec and .Int in the protos. -// This file has been manually modified for the v0.50 update. -// The github_com_cosmos_cosmos_sdk_types.Dec and .Int types have moved to the sdkmath library. -// In order to make this code to compile (without needed to update protos and regenerate), this -// file has been manually fixed to use the correct library for those types. - package types import ( @@ -15,8 +9,8 @@ import ( _ "github.com/cosmos/cosmos-proto" types1 "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/x/auth/types" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" @@ -1279,108 +1273,107 @@ func init() { func init() { proto.RegisterFile("provenance/marker/v1/marker.proto", fileDescriptor_f7e2c25c71db7f99) } var fileDescriptor_f7e2c25c71db7f99 = []byte{ - // 1602 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x57, 0xcb, 0x6f, 0x1b, 0x4f, - 0x1d, 0xf7, 0x3a, 0x89, 0x93, 0x8c, 0x13, 0xd7, 0xbf, 0x89, 0x9b, 0xba, 0xfe, 0x15, 0xdb, 0x75, - 0x4b, 0x1b, 0x0a, 0xb5, 0x9b, 0x00, 0x15, 0xca, 0xcd, 0xaf, 0x14, 0x8b, 0xe6, 0xc1, 0xda, 0x29, - 0x6a, 0x85, 0xb4, 0x8c, 0x77, 0x27, 0xce, 0x92, 0xdd, 0x1d, 0x77, 0x67, 0xec, 0xc6, 0x88, 0x0b, - 0x97, 0xaa, 0xca, 0xa9, 0x47, 0x40, 0x8a, 0x54, 0x09, 0x0e, 0x48, 0x5c, 0x39, 0x73, 0xae, 0x38, - 0xf5, 0x88, 0x38, 0x44, 0xa8, 0xbd, 0x70, 0xe0, 0x94, 0xbf, 0x00, 0xcd, 0x63, 0xd7, 0xeb, 0xc6, - 0x6d, 0x0f, 0xa1, 0x27, 0x7b, 0xbe, 0xef, 0xc7, 0xe7, 0xfb, 0x9d, 0x59, 0x70, 0xb3, 0xef, 0x93, - 0x21, 0xf6, 0x90, 0x67, 0xe2, 0x8a, 0x8b, 0xfc, 0x23, 0xec, 0x57, 0x86, 0xeb, 0xea, 0x5f, 0xb9, - 0xef, 0x13, 0x46, 0x60, 0x66, 0x2c, 0x52, 0x56, 0x8c, 0xe1, 0x7a, 0x2e, 0xd3, 0x23, 0x3d, 0x22, - 0x04, 0x2a, 0xfc, 0x9f, 0x94, 0xcd, 0xe5, 0x4d, 0x42, 0x5d, 0x42, 0x2b, 0x68, 0xc0, 0x0e, 0x2b, - 0xc3, 0xf5, 0x2e, 0x66, 0x68, 0x5d, 0x1c, 0x14, 0xff, 0xba, 0xe4, 0x1b, 0x52, 0x51, 0x1e, 0x3e, - 0x52, 0xed, 0x22, 0x8a, 0x43, 0x55, 0x93, 0xd8, 0x9e, 0xe2, 0xdf, 0x99, 0x1a, 0x29, 0x32, 0x4d, - 0x4c, 0x69, 0xcf, 0x47, 0x1e, 0x93, 0x72, 0xa5, 0x3f, 0xc6, 0x41, 0x62, 0x0f, 0xf9, 0xc8, 0xa5, - 0x70, 0x13, 0xa4, 0x5d, 0x74, 0x6c, 0x30, 0xc2, 0x90, 0x63, 0xd0, 0x41, 0xbf, 0xef, 0x8c, 0xb2, - 0x5a, 0x51, 0x5b, 0x9b, 0xad, 0xa5, 0xdf, 0x9e, 0x15, 0x62, 0xff, 0x3a, 0x2b, 0x24, 0x06, 0xb6, - 0xc7, 0x1e, 0xfe, 0x28, 0xab, 0xe9, 0x29, 0x17, 0x1d, 0x77, 0xb8, 0x60, 0x5b, 0xc8, 0xc1, 0xef, - 0x83, 0x6f, 0xb0, 0x87, 0xba, 0x0e, 0x36, 0x7a, 0x64, 0x88, 0x7d, 0xe1, 0x37, 0x1b, 0x2f, 0x6a, - 0x6b, 0x0b, 0x7a, 0x5a, 0x32, 0x1e, 0x85, 0x74, 0xf8, 0x13, 0x90, 0x1d, 0x78, 0x3e, 0xa6, 0xcc, - 0xb7, 0x4d, 0x86, 0x2d, 0xc3, 0xc2, 0x1e, 0x71, 0x0d, 0x1f, 0xf7, 0xf0, 0x71, 0x76, 0xa6, 0xa8, - 0xad, 0x2d, 0xea, 0xab, 0x51, 0x7e, 0x83, 0xb3, 0x75, 0xce, 0x85, 0x26, 0x00, 0x3c, 0x44, 0x15, - 0xdc, 0x2c, 0x97, 0xad, 0x35, 0x54, 0x70, 0x57, 0x65, 0x45, 0xa8, 0x75, 0x54, 0xb6, 0x49, 0xc5, - 0x45, 0xec, 0xb0, 0xdc, 0xf2, 0xd8, 0xf9, 0x59, 0xe1, 0xd6, 0xaf, 0x29, 0xf1, 0x36, 0x4b, 0x63, - 0xc5, 0x52, 0x71, 0x84, 0x5c, 0x67, 0x82, 0xa2, 0x2f, 0xba, 0xe8, 0x58, 0xe6, 0xb2, 0xb9, 0xf0, - 0xfb, 0x37, 0x85, 0xd8, 0x7f, 0xde, 0x14, 0x62, 0xa5, 0xdf, 0x25, 0xc0, 0xf2, 0xb6, 0x28, 0x5e, - 0xd5, 0x34, 0xc9, 0xc0, 0x63, 0xf0, 0x57, 0x60, 0x89, 0x57, 0xdc, 0x40, 0xf2, 0x2c, 0xea, 0x93, - 0xdc, 0x28, 0x96, 0x55, 0x6f, 0x44, 0xef, 0x54, 0x37, 0xca, 0x35, 0x44, 0xb1, 0xd2, 0xab, 0x7d, - 0xfb, 0xee, 0xac, 0xa0, 0x9d, 0x9f, 0x15, 0x56, 0xa4, 0xe7, 0xa8, 0x8d, 0x92, 0x9e, 0xec, 0x8e, - 0x25, 0xe1, 0x43, 0x30, 0xef, 0x22, 0x0f, 0xf5, 0xb0, 0x2f, 0xea, 0xb7, 0x58, 0xbb, 0x71, 0x7e, - 0x56, 0xc8, 0x06, 0x29, 0x08, 0xc6, 0x0f, 0x88, 0x6b, 0x33, 0xec, 0xf6, 0xd9, 0xa8, 0xa4, 0x07, - 0xc2, 0x70, 0x07, 0xa4, 0x64, 0x77, 0x0d, 0x93, 0x78, 0xcc, 0x27, 0x4e, 0x76, 0xa6, 0x38, 0xb3, - 0x96, 0xdc, 0xb8, 0x59, 0x9e, 0x06, 0xc8, 0x72, 0x55, 0xc8, 0x3e, 0xe2, 0x48, 0xa8, 0xcd, 0xf2, - 0x0a, 0xea, 0xcb, 0x52, 0xbd, 0x2e, 0xb5, 0xe1, 0x26, 0x48, 0x50, 0x86, 0xd8, 0x80, 0x8a, 0x32, - 0xa7, 0x36, 0x4a, 0xd3, 0xed, 0xc8, 0xf2, 0xb4, 0x85, 0xa4, 0xae, 0x34, 0x60, 0x06, 0xcc, 0x89, - 0x9e, 0x66, 0xe7, 0x44, 0x37, 0xe5, 0x01, 0x3e, 0x07, 0x09, 0xd5, 0xb8, 0x84, 0x48, 0xec, 0xa9, - 0x6a, 0xdc, 0x9d, 0x9e, 0xcd, 0x0e, 0x07, 0xdd, 0xb2, 0x49, 0x5c, 0x85, 0x71, 0xf5, 0x73, 0x9f, - 0x5a, 0x47, 0x15, 0x36, 0xea, 0x63, 0xaa, 0x3a, 0x79, 0x57, 0x96, 0x21, 0x8a, 0xd0, 0xa0, 0x97, - 0x13, 0x34, 0x5d, 0x39, 0x82, 0x26, 0x48, 0xca, 0x50, 0x0d, 0x6e, 0x26, 0x3b, 0x2f, 0x32, 0x29, - 0x7e, 0x2e, 0x93, 0xce, 0xa8, 0x8f, 0x6b, 0xc5, 0xf3, 0xb3, 0xc2, 0x8d, 0xa0, 0xe4, 0xa1, 0x7a, - 0xb4, 0xec, 0xc0, 0x0d, 0xa5, 0xe1, 0x4d, 0xb0, 0x24, 0xdd, 0x19, 0x07, 0xf6, 0x31, 0xb6, 0xb2, - 0x0b, 0x02, 0xf6, 0x49, 0x49, 0xdb, 0xe2, 0x24, 0x8e, 0x78, 0xe4, 0x38, 0xe4, 0x45, 0x64, 0x3a, - 0xc2, 0x36, 0x2d, 0x0a, 0xf1, 0x55, 0xc1, 0x1f, 0x0f, 0x49, 0xd0, 0x86, 0x0d, 0x70, 0x55, 0x6a, - 0x1e, 0x10, 0xdf, 0xc4, 0x96, 0xc1, 0x7c, 0xe4, 0xd1, 0x03, 0xec, 0x67, 0x81, 0x50, 0x5b, 0x11, - 0xcc, 0x2d, 0xc1, 0xeb, 0x28, 0x16, 0xac, 0x80, 0x15, 0x1f, 0x3f, 0x1f, 0xd8, 0x3e, 0xb6, 0x0c, - 0xc4, 0x98, 0x6f, 0x77, 0x07, 0x0c, 0xd3, 0x6c, 0xb2, 0x38, 0xb3, 0xb6, 0xa8, 0xc3, 0x80, 0x55, - 0x0d, 0x39, 0x9b, 0xb9, 0x57, 0x6f, 0x0a, 0x31, 0x8e, 0xfa, 0x7f, 0xfc, 0xed, 0x7e, 0x6a, 0x02, - 0xf0, 0xad, 0xd2, 0x6b, 0x0d, 0x2c, 0xef, 0x60, 0x56, 0xa5, 0x14, 0xb3, 0x27, 0xc8, 0x19, 0x60, - 0xf8, 0x63, 0x30, 0xd7, 0xf7, 0x6d, 0x13, 0x2b, 0xf0, 0x5f, 0x0f, 0xc0, 0xcf, 0x51, 0x1c, 0x82, - 0xbf, 0x4e, 0x6c, 0x4f, 0x01, 0x4b, 0x4a, 0xc3, 0x55, 0x90, 0x18, 0x12, 0x67, 0xe0, 0xca, 0xbd, - 0x30, 0xab, 0xab, 0x13, 0x7c, 0x00, 0x32, 0x83, 0xbe, 0x85, 0xf8, 0x22, 0xe8, 0x3a, 0xc4, 0x3c, - 0x32, 0x0e, 0xb1, 0xdd, 0x3b, 0x64, 0x62, 0x13, 0xcc, 0xea, 0x50, 0xf1, 0x6a, 0x9c, 0xf5, 0x53, - 0xc1, 0x29, 0xfd, 0x55, 0x03, 0xa9, 0xe6, 0x10, 0x7b, 0x4c, 0x85, 0x6a, 0x59, 0x63, 0xc4, 0x69, - 0x51, 0xc4, 0xad, 0x82, 0x04, 0x72, 0xc5, 0x9c, 0x8a, 0x51, 0xd2, 0xd5, 0x89, 0xd3, 0x15, 0xb6, - 0xe5, 0xba, 0x09, 0x70, 0x9b, 0x1d, 0xcf, 0x9e, 0xd8, 0x2d, 0xe3, 0xe9, 0x2a, 0x4c, 0x02, 0x49, - 0xe2, 0x3a, 0x0a, 0x82, 0x2c, 0x98, 0x47, 0x96, 0xe5, 0x63, 0x4a, 0x25, 0xba, 0xf5, 0xe0, 0x58, - 0xfa, 0x83, 0x06, 0x32, 0x93, 0xd1, 0xca, 0xd9, 0x83, 0x4d, 0x90, 0x90, 0x23, 0xa7, 0x0a, 0x79, - 0x77, 0x3a, 0x2e, 0xa3, 0xba, 0x42, 0x5c, 0x95, 0x55, 0x29, 0x8f, 0x53, 0x8f, 0x47, 0x53, 0xbf, - 0x0d, 0x96, 0x91, 0xe5, 0xda, 0x9e, 0x4d, 0x99, 0x8f, 0x18, 0xf1, 0x55, 0xa6, 0x93, 0xc4, 0xd2, - 0x2e, 0xf8, 0xe6, 0x82, 0xf9, 0x68, 0x2a, 0xda, 0x44, 0x2a, 0xb0, 0x08, 0x92, 0x7d, 0xec, 0xbb, - 0x36, 0xa5, 0x36, 0xf1, 0x68, 0x36, 0x2e, 0x00, 0x15, 0x25, 0x95, 0x7e, 0x0b, 0xae, 0x45, 0x0c, - 0x36, 0xb0, 0x83, 0x19, 0x56, 0x66, 0xbf, 0x0b, 0x52, 0x3e, 0x76, 0xc9, 0x10, 0x1b, 0x93, 0xd6, - 0x97, 0x25, 0xb5, 0xaa, 0x7c, 0x5c, 0x26, 0x9d, 0x9f, 0x83, 0x95, 0x88, 0xf7, 0x2d, 0xdb, 0x43, - 0x8e, 0xfd, 0x1b, 0xfc, 0x09, 0x70, 0x5c, 0x30, 0x19, 0xff, 0xb2, 0xc9, 0xaa, 0xc9, 0xec, 0x21, - 0x62, 0x97, 0x33, 0x39, 0x59, 0xf4, 0x3a, 0x6f, 0xb7, 0xf3, 0x7f, 0x34, 0x28, 0x8b, 0x7e, 0x29, - 0x83, 0x18, 0x5c, 0x89, 0x18, 0xdc, 0xb6, 0xe5, 0xc8, 0xa8, 0x51, 0xd2, 0x26, 0x46, 0xe9, 0x32, - 0xed, 0x9a, 0x74, 0x53, 0x1b, 0xf8, 0xde, 0x57, 0x71, 0xf3, 0x52, 0x9b, 0xe8, 0xe1, 0x2f, 0x6c, - 0x76, 0x68, 0xf9, 0xe8, 0x05, 0xb7, 0xc9, 0x1f, 0x4c, 0x01, 0x0e, 0xe5, 0xe1, 0x32, 0x9e, 0xe0, - 0x77, 0x00, 0x60, 0x24, 0x84, 0xb7, 0x5c, 0x21, 0x8b, 0x8c, 0x28, 0x68, 0xf3, 0xbd, 0x15, 0x0d, - 0x24, 0xdc, 0xd7, 0x5f, 0x21, 0xe9, 0x2f, 0x84, 0xc2, 0xef, 0xac, 0x03, 0x9f, 0xb8, 0xa1, 0x80, - 0x5c, 0x68, 0x49, 0x4e, 0x0b, 0xa2, 0xfd, 0x6f, 0x1c, 0x7c, 0x1b, 0x89, 0xb6, 0x8d, 0x99, 0x78, - 0x88, 0x6d, 0x63, 0x86, 0x2c, 0xc4, 0x10, 0xbc, 0x05, 0x96, 0x5d, 0xf5, 0xdf, 0xe0, 0xab, 0x5f, - 0x05, 0xbf, 0x14, 0x10, 0xf9, 0xf3, 0x07, 0xae, 0x83, 0x4c, 0x28, 0x64, 0x61, 0x6a, 0xfa, 0x76, - 0x9f, 0xd9, 0xc4, 0x53, 0x19, 0xad, 0x04, 0xbc, 0xc6, 0x98, 0x05, 0xbf, 0x07, 0xd2, 0x63, 0x15, - 0x9b, 0xf6, 0x1d, 0x34, 0x52, 0x29, 0x5e, 0x09, 0xc5, 0x25, 0x19, 0x3e, 0x99, 0xb0, 0xce, 0x1f, - 0x91, 0x03, 0xcf, 0x66, 0x3c, 0x5d, 0xfe, 0xf2, 0xb9, 0xfd, 0x99, 0x7d, 0x2a, 0x52, 0xd9, 0xf7, - 0x6c, 0xa6, 0xc3, 0x71, 0x0c, 0x8a, 0x44, 0x2f, 0x96, 0x78, 0x6e, 0x5a, 0x89, 0xa3, 0x05, 0xf0, - 0x90, 0x8b, 0xd5, 0xe2, 0x0f, 0x0b, 0xb0, 0x83, 0x5c, 0x0c, 0xef, 0x82, 0x30, 0x6a, 0x83, 0x8e, - 0xdc, 0x2e, 0x71, 0xc4, 0x2b, 0x64, 0x51, 0x4f, 0x05, 0xe4, 0xb6, 0xa0, 0x96, 0x7e, 0xa9, 0xee, - 0xb4, 0x30, 0x8c, 0x4f, 0x4c, 0x70, 0x0e, 0x2c, 0xe0, 0xe3, 0x3e, 0xf1, 0x70, 0x78, 0xab, 0x85, - 0x67, 0xb1, 0xb9, 0x1d, 0x1b, 0x51, 0x4c, 0xc5, 0xe3, 0x8f, 0x6f, 0x6e, 0x79, 0x2c, 0x51, 0x70, - 0x55, 0x58, 0x6f, 0x63, 0x36, 0x79, 0x99, 0x4f, 0x77, 0x92, 0x09, 0xae, 0x78, 0x85, 0xbc, 0x8f, - 0x6f, 0x70, 0x75, 0x6d, 0xaa, 0x1b, 0x9c, 0x5f, 0xa7, 0x64, 0xe0, 0x9b, 0x58, 0xe1, 0x4c, 0x9d, - 0xee, 0xbd, 0xd4, 0x00, 0x18, 0xbf, 0xaa, 0xe0, 0x1a, 0xb8, 0xb6, 0x5d, 0xd5, 0x7f, 0xd6, 0xd4, - 0x8d, 0xce, 0xd3, 0xbd, 0xa6, 0xb1, 0xbf, 0xd3, 0xde, 0x6b, 0xd6, 0x5b, 0x5b, 0xad, 0x66, 0x23, - 0x1d, 0xcb, 0x25, 0x4f, 0x4e, 0x8b, 0xf3, 0xfb, 0xde, 0x91, 0x47, 0x5e, 0x78, 0x30, 0x0f, 0xd2, - 0x51, 0xc9, 0xfa, 0x6e, 0x6b, 0x27, 0xad, 0xe5, 0x16, 0x4e, 0x4e, 0x8b, 0xb3, 0xfc, 0x5d, 0x01, - 0xcb, 0x60, 0x35, 0xca, 0xd7, 0x9b, 0xed, 0x8e, 0xde, 0xaa, 0x77, 0x9a, 0x8d, 0x74, 0x3c, 0x07, - 0x4f, 0x4e, 0x8b, 0x29, 0x3d, 0xfc, 0x78, 0xe0, 0xf2, 0xf7, 0xfe, 0x1e, 0x07, 0x4b, 0xd1, 0x87, - 0x2a, 0xdc, 0x00, 0xd7, 0x95, 0x81, 0x76, 0xa7, 0xda, 0xd9, 0x6f, 0x7f, 0x14, 0xcc, 0xca, 0xc9, - 0x69, 0xf1, 0x8a, 0x14, 0xdd, 0xf7, 0x2c, 0x7c, 0x60, 0x7b, 0xd8, 0x8a, 0x38, 0x55, 0x3a, 0x7b, - 0xfa, 0xee, 0xde, 0x6e, 0xbb, 0xd9, 0x48, 0x6b, 0xd2, 0xa9, 0x54, 0xd8, 0xf3, 0x49, 0x9f, 0x50, - 0x6c, 0xc1, 0x07, 0x61, 0xba, 0x4a, 0x7e, 0xab, 0xb5, 0x53, 0x7d, 0xdc, 0x7a, 0x26, 0xa2, 0x8c, - 0x78, 0x08, 0xae, 0x29, 0x0b, 0xde, 0x03, 0x99, 0x49, 0x8d, 0x6a, 0xbd, 0xd3, 0x7a, 0xd2, 0x4c, - 0xcf, 0xe4, 0xd2, 0x27, 0xa7, 0xc5, 0x25, 0x29, 0x2e, 0xae, 0x20, 0x7c, 0xd1, 0x7a, 0xbd, 0xba, - 0x53, 0x6f, 0x3e, 0x7e, 0xdc, 0x6c, 0xa4, 0x67, 0xa3, 0xd6, 0xe5, 0xf5, 0xe2, 0x4c, 0x8b, 0xa7, - 0xc1, 0xcb, 0xb6, 0xfb, 0xb4, 0xd9, 0x48, 0xcf, 0x45, 0x35, 0x1a, 0xbc, 0x76, 0x64, 0x84, 0xad, - 0xdc, 0xc2, 0xab, 0x3f, 0xe5, 0x63, 0x7f, 0xf9, 0x73, 0x3e, 0x56, 0xeb, 0xbd, 0x7d, 0x9f, 0xd7, - 0xde, 0xbd, 0xcf, 0x6b, 0xff, 0x7e, 0x9f, 0xd7, 0x5e, 0x7f, 0xc8, 0xc7, 0xde, 0x7d, 0xc8, 0xc7, - 0xfe, 0xf9, 0x21, 0x1f, 0x03, 0xd7, 0x6c, 0x32, 0x75, 0xcc, 0xf6, 0xb4, 0x67, 0x1b, 0x91, 0x77, - 0xfd, 0x58, 0xe4, 0xbe, 0x4d, 0x22, 0xa7, 0xca, 0x71, 0xf0, 0x75, 0x2a, 0xde, 0xf9, 0xdd, 0x84, - 0xf8, 0x2a, 0xfd, 0xe1, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x4f, 0xc1, 0x20, 0xf9, 0x69, 0x0f, - 0x00, 0x00, + // 1590 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x57, 0xcf, 0x6f, 0x1b, 0x4f, + 0x15, 0xf7, 0x3a, 0x89, 0x93, 0x8c, 0x13, 0xd7, 0xdf, 0x89, 0x9b, 0xba, 0xfe, 0x16, 0xdb, 0x75, + 0x0b, 0x0d, 0x85, 0xda, 0x4d, 0x80, 0x0a, 0xe5, 0xe6, 0x5f, 0x69, 0x2d, 0x9a, 0x1f, 0xac, 0x9d, + 0xa2, 0x56, 0x48, 0xdb, 0xf1, 0xee, 0xc4, 0x59, 0xb2, 0xbb, 0x63, 0x76, 0xc6, 0x6e, 0x8c, 0x38, + 0x57, 0x55, 0x4e, 0x3d, 0x02, 0x52, 0xa4, 0x4a, 0x70, 0x40, 0xe2, 0xca, 0x99, 0x73, 0xc5, 0xa9, + 0x47, 0xc4, 0x21, 0x42, 0xed, 0x85, 0x03, 0x07, 0x94, 0xbf, 0x00, 0xcd, 0x8f, 0x5d, 0xaf, 0x1b, + 0xb7, 0x3d, 0x84, 0xde, 0x76, 0xde, 0xfb, 0xbc, 0x37, 0xef, 0xc7, 0xe7, 0xcd, 0xcc, 0x82, 0x9b, + 0x7d, 0x9f, 0x0c, 0xb1, 0x87, 0x3c, 0x13, 0x57, 0x5c, 0xe4, 0x1f, 0x61, 0xbf, 0x32, 0x5c, 0x57, + 0x5f, 0xe5, 0xbe, 0x4f, 0x18, 0x81, 0x99, 0x31, 0xa4, 0xac, 0x14, 0xc3, 0xf5, 0x5c, 0xa6, 0x47, + 0x7a, 0x44, 0x00, 0x2a, 0xfc, 0x4b, 0x62, 0x73, 0x79, 0x93, 0x50, 0x97, 0xd0, 0x0a, 0x1a, 0xb0, + 0xc3, 0xca, 0x70, 0xbd, 0x8b, 0x19, 0x5a, 0x17, 0x0b, 0xa5, 0xbf, 0x2e, 0xf5, 0x86, 0x34, 0x94, + 0x8b, 0x8f, 0x4c, 0xbb, 0x88, 0xe2, 0xd0, 0xd4, 0x24, 0xb6, 0xa7, 0xf4, 0xdf, 0x9b, 0x1a, 0x29, + 0x32, 0x4d, 0x4c, 0x69, 0xcf, 0x47, 0x1e, 0x93, 0xb8, 0xd2, 0x1f, 0xe2, 0x20, 0xb1, 0x87, 0x7c, + 0xe4, 0x52, 0xb8, 0x09, 0xd2, 0x2e, 0x3a, 0x36, 0x18, 0x61, 0xc8, 0x31, 0xe8, 0xa0, 0xdf, 0x77, + 0x46, 0x59, 0xad, 0xa8, 0xad, 0xcd, 0xd6, 0xd2, 0x6f, 0xcf, 0x0a, 0xb1, 0x7f, 0x9e, 0x15, 0x12, + 0x03, 0xdb, 0x63, 0x0f, 0x7e, 0x9c, 0xd5, 0xf4, 0x94, 0x8b, 0x8e, 0x3b, 0x1c, 0xd8, 0x16, 0x38, + 0xf8, 0x03, 0xf0, 0x0d, 0xf6, 0x50, 0xd7, 0xc1, 0x46, 0x8f, 0x0c, 0xb1, 0x2f, 0xf6, 0xcd, 0xc6, + 0x8b, 0xda, 0xda, 0x82, 0x9e, 0x96, 0x8a, 0x87, 0xa1, 0x1c, 0xfe, 0x14, 0x64, 0x07, 0x9e, 0x8f, + 0x29, 0xf3, 0x6d, 0x93, 0x61, 0xcb, 0xb0, 0xb0, 0x47, 0x5c, 0xc3, 0xc7, 0x3d, 0x7c, 0x9c, 0x9d, + 0x29, 0x6a, 0x6b, 0x8b, 0xfa, 0x6a, 0x54, 0xdf, 0xe0, 0x6a, 0x9d, 0x6b, 0xa1, 0x09, 0x00, 0x0f, + 0x51, 0x05, 0x37, 0xcb, 0xb1, 0xb5, 0x86, 0x0a, 0xee, 0xaa, 0xac, 0x08, 0xb5, 0x8e, 0xca, 0x36, + 0xa9, 0xb8, 0x88, 0x1d, 0x96, 0x5b, 0x1e, 0x3b, 0x3f, 0x2b, 0xdc, 0xfa, 0x15, 0x25, 0xde, 0x66, + 0x69, 0x6c, 0x58, 0x2a, 0x8e, 0x90, 0xeb, 0x4c, 0x48, 0xf4, 0x45, 0x17, 0x1d, 0xcb, 0x5c, 0x36, + 0x17, 0x7e, 0xf7, 0xa6, 0x10, 0xfb, 0xf7, 0x9b, 0x42, 0xac, 0xf4, 0xdf, 0x39, 0xb0, 0xbc, 0x2d, + 0x8a, 0x57, 0x35, 0x4d, 0x32, 0xf0, 0x18, 0x7c, 0x0e, 0x96, 0x78, 0xc5, 0x0d, 0x24, 0xd7, 0xa2, + 0x3e, 0xc9, 0x8d, 0x62, 0x59, 0xf5, 0x46, 0xf4, 0x4e, 0x75, 0xa3, 0x5c, 0x43, 0x14, 0x2b, 0xbb, + 0xda, 0xb7, 0xef, 0xce, 0x0a, 0xda, 0xf9, 0x59, 0x61, 0x45, 0xee, 0x1c, 0xf5, 0x51, 0xd2, 0x93, + 0xdd, 0x31, 0x12, 0x3e, 0x00, 0xf3, 0x2e, 0xf2, 0x50, 0x0f, 0xfb, 0xa2, 0x7e, 0x8b, 0xb5, 0x1b, + 0xe7, 0x67, 0x85, 0x6c, 0x90, 0x82, 0x50, 0xfc, 0x90, 0xb8, 0x36, 0xc3, 0x6e, 0x9f, 0x8d, 0x4a, + 0x7a, 0x00, 0x86, 0x3b, 0x20, 0x25, 0xbb, 0x6b, 0x98, 0xc4, 0x63, 0x3e, 0x71, 0xb2, 0x33, 0xc5, + 0x99, 0xb5, 0xe4, 0xc6, 0xcd, 0xf2, 0x34, 0x42, 0x96, 0xab, 0x02, 0xfb, 0x90, 0x33, 0xa1, 0x36, + 0xcb, 0x2b, 0xa8, 0x2f, 0x4b, 0xf3, 0xba, 0xb4, 0x86, 0x9b, 0x20, 0x41, 0x19, 0x62, 0x03, 0x2a, + 0xca, 0x9c, 0xda, 0x28, 0x4d, 0xf7, 0x23, 0xcb, 0xd3, 0x16, 0x48, 0x5d, 0x59, 0xc0, 0x0c, 0x98, + 0x13, 0x3d, 0xcd, 0xce, 0x89, 0x6e, 0xca, 0x05, 0x7c, 0x0e, 0x12, 0xaa, 0x71, 0x09, 0x91, 0xd8, + 0xa3, 0x2f, 0x35, 0xee, 0x8e, 0xcc, 0x3a, 0x4a, 0xc8, 0xa0, 0x75, 0x13, 0x32, 0x5d, 0xf9, 0x85, + 0x26, 0x48, 0xca, 0xc8, 0x0c, 0x36, 0xea, 0xe3, 0xec, 0xbc, 0x08, 0xbc, 0xf8, 0xb9, 0xc0, 0x3b, + 0xa3, 0x3e, 0xae, 0x15, 0xcf, 0xcf, 0x0a, 0x37, 0x82, 0x0a, 0x87, 0xe6, 0xd1, 0x2a, 0x03, 0x37, + 0x44, 0xc3, 0x9b, 0x60, 0x49, 0x6e, 0x67, 0x1c, 0xd8, 0xc7, 0xd8, 0xca, 0x2e, 0x08, 0x96, 0x27, + 0xa5, 0x6c, 0x8b, 0x8b, 0x38, 0xc1, 0x91, 0xe3, 0x90, 0x17, 0x91, 0x61, 0x08, 0xbb, 0xb2, 0x28, + 0xe0, 0xab, 0x42, 0x3f, 0x9e, 0x89, 0xa0, 0xea, 0x1b, 0xe0, 0xaa, 0xb4, 0x3c, 0x20, 0xbe, 0x89, + 0x2d, 0x83, 0xf9, 0xc8, 0xa3, 0x07, 0xd8, 0xcf, 0x02, 0x61, 0xb6, 0x22, 0x94, 0x5b, 0x42, 0xd7, + 0x51, 0x2a, 0x58, 0x01, 0x2b, 0x3e, 0xfe, 0xf5, 0xc0, 0xf6, 0xb1, 0x65, 0x20, 0xc6, 0x7c, 0xbb, + 0x3b, 0x60, 0x98, 0x66, 0x93, 0xc5, 0x99, 0xb5, 0x45, 0x1d, 0x06, 0xaa, 0x6a, 0xa8, 0xd9, 0xcc, + 0xbd, 0x7a, 0x53, 0x88, 0x71, 0x92, 0xff, 0xfd, 0xaf, 0xf7, 0x52, 0x13, 0xfc, 0x6e, 0x95, 0x5e, + 0x6b, 0x60, 0x79, 0x07, 0xb3, 0x2a, 0xa5, 0x98, 0x3d, 0x41, 0xce, 0x00, 0xc3, 0x9f, 0x80, 0xb9, + 0xbe, 0x6f, 0x9b, 0x58, 0x71, 0xfd, 0x7a, 0xc0, 0x75, 0x4e, 0xda, 0x90, 0xeb, 0x75, 0x62, 0x7b, + 0x8a, 0x47, 0x12, 0x0d, 0x57, 0x41, 0x62, 0x48, 0x9c, 0x81, 0x2b, 0x8f, 0x81, 0x59, 0x5d, 0xad, + 0xe0, 0x7d, 0x90, 0x19, 0xf4, 0x2d, 0xc4, 0xe7, 0xbe, 0xeb, 0x10, 0xf3, 0xc8, 0x38, 0xc4, 0x76, + 0xef, 0x90, 0x89, 0xc1, 0x9f, 0xd5, 0xa1, 0xd2, 0xd5, 0xb8, 0xea, 0x91, 0xd0, 0x94, 0xfe, 0xa2, + 0x81, 0x54, 0x73, 0x88, 0x3d, 0xa6, 0x42, 0xb5, 0xac, 0x31, 0xc1, 0xb4, 0x28, 0xc1, 0x56, 0x41, + 0x02, 0xb9, 0x62, 0x2c, 0xc5, 0xe4, 0xe8, 0x6a, 0xc5, 0xe5, 0x8a, 0xca, 0xf2, 0x74, 0x09, 0x68, + 0x9a, 0x1d, 0x8f, 0x9a, 0x38, 0x4a, 0xc6, 0xc3, 0x54, 0x98, 0x24, 0x92, 0xa4, 0x71, 0x94, 0x04, + 0x59, 0x30, 0x8f, 0x2c, 0xcb, 0xc7, 0x94, 0x4a, 0x32, 0xeb, 0xc1, 0xb2, 0xf4, 0x7b, 0x0d, 0x64, + 0x26, 0xa3, 0x95, 0xa3, 0x06, 0x9b, 0x20, 0x21, 0x27, 0x4c, 0x15, 0xf2, 0xce, 0x74, 0x5e, 0x46, + 0x6d, 0x05, 0x5c, 0x95, 0x55, 0x19, 0x8f, 0x53, 0x8f, 0x47, 0x53, 0xbf, 0x0d, 0x96, 0x91, 0xe5, + 0xda, 0x9e, 0x4d, 0x99, 0x8f, 0x18, 0xf1, 0x55, 0xa6, 0x93, 0xc2, 0xd2, 0x2e, 0xf8, 0xe6, 0x82, + 0xfb, 0x68, 0x2a, 0xda, 0x44, 0x2a, 0xb0, 0x08, 0x92, 0x7d, 0xec, 0xbb, 0x36, 0xa5, 0x36, 0xf1, + 0x68, 0x36, 0x2e, 0x08, 0x15, 0x15, 0x95, 0x7e, 0x0b, 0xae, 0x45, 0x1c, 0x36, 0xb0, 0x83, 0x19, + 0x56, 0x6e, 0xbf, 0x0b, 0x52, 0x3e, 0x76, 0xc9, 0x10, 0x1b, 0x93, 0xde, 0x97, 0xa5, 0xb4, 0xaa, + 0xf6, 0xb8, 0x4c, 0x3a, 0x3f, 0x07, 0x2b, 0x91, 0xdd, 0xb7, 0x6c, 0x0f, 0x39, 0xf6, 0x6f, 0xf0, + 0x27, 0xc8, 0x71, 0xc1, 0x65, 0xfc, 0xcb, 0x2e, 0xab, 0x26, 0xb3, 0x87, 0x88, 0x5d, 0xce, 0xe5, + 0x64, 0xd1, 0xeb, 0xbc, 0xdd, 0xce, 0xff, 0xd1, 0xa1, 0x2c, 0xfa, 0xa5, 0x1c, 0x62, 0x70, 0x25, + 0xe2, 0x70, 0xdb, 0x96, 0x23, 0xa3, 0x46, 0x49, 0x9b, 0x18, 0xa5, 0xcb, 0xb4, 0x6b, 0x72, 0x9b, + 0xda, 0xc0, 0xf7, 0xbe, 0xca, 0x36, 0x2f, 0xb5, 0x89, 0x1e, 0xfe, 0xc2, 0x66, 0x87, 0x96, 0x8f, + 0x5e, 0x70, 0x9f, 0xfc, 0x7d, 0x14, 0xf0, 0x50, 0x2e, 0x2e, 0xb3, 0x13, 0xfc, 0x0e, 0x00, 0x8c, + 0x84, 0xf4, 0x96, 0x47, 0xc8, 0x22, 0x23, 0x8a, 0xda, 0xfc, 0xdc, 0x8a, 0x06, 0x12, 0x9e, 0xd7, + 0x5f, 0x21, 0xe9, 0x2f, 0x84, 0xc2, 0xef, 0xac, 0x03, 0x9f, 0xb8, 0x21, 0x40, 0x1e, 0x68, 0x49, + 0x2e, 0x0b, 0xa2, 0xfd, 0x4f, 0x1c, 0x7c, 0x1b, 0x89, 0xb6, 0x8d, 0x99, 0x78, 0x77, 0x6d, 0x63, + 0x86, 0x2c, 0xc4, 0x10, 0xbc, 0x05, 0x96, 0x5d, 0xf5, 0x6d, 0xf0, 0xa3, 0x5f, 0x05, 0xbf, 0x14, + 0x08, 0xf9, 0x6b, 0x07, 0xae, 0x83, 0x4c, 0x08, 0xb2, 0x30, 0x35, 0x7d, 0xbb, 0xcf, 0x6c, 0xe2, + 0xa9, 0x8c, 0x56, 0x02, 0x5d, 0x63, 0xac, 0x82, 0xdf, 0x07, 0xe9, 0xb1, 0x89, 0x4d, 0xfb, 0x0e, + 0x1a, 0xa9, 0x14, 0xaf, 0x84, 0x70, 0x29, 0x86, 0x4f, 0x26, 0xbc, 0xf3, 0x37, 0xe3, 0xc0, 0xb3, + 0x19, 0x4f, 0x97, 0x3f, 0x74, 0x6e, 0x7f, 0xe6, 0x3c, 0x15, 0xa9, 0xec, 0x7b, 0x36, 0xd3, 0xe1, + 0x38, 0x06, 0x25, 0xa2, 0x17, 0x4b, 0x3c, 0x37, 0xad, 0xc4, 0xd1, 0x02, 0x78, 0xc8, 0xc5, 0xea, + 0xe0, 0x0f, 0x0b, 0xb0, 0x83, 0x5c, 0x0c, 0xef, 0x80, 0x30, 0x6a, 0x83, 0x8e, 0xdc, 0x2e, 0x71, + 0xc4, 0x2b, 0x64, 0x51, 0x4f, 0x05, 0xe2, 0xb6, 0x90, 0x96, 0x7e, 0xa9, 0xee, 0xb4, 0x30, 0x8c, + 0x4f, 0x4c, 0x70, 0x0e, 0x2c, 0xe0, 0xe3, 0x3e, 0xf1, 0x70, 0x78, 0xab, 0x85, 0x6b, 0x71, 0x72, + 0x3b, 0x36, 0xa2, 0x98, 0x8a, 0xb7, 0x1e, 0x3f, 0xb9, 0xe5, 0xb2, 0x44, 0xc1, 0x55, 0xe1, 0xbd, + 0x8d, 0xd9, 0xe4, 0x65, 0x3e, 0x7d, 0x93, 0x4c, 0x70, 0xc5, 0x2b, 0xe6, 0x7d, 0x7c, 0x83, 0xab, + 0x6b, 0x53, 0xdd, 0xe0, 0xfc, 0x3a, 0x25, 0x03, 0xdf, 0xc4, 0x8a, 0x67, 0x6a, 0x75, 0xf7, 0xa5, + 0x06, 0xc0, 0xf8, 0x55, 0x05, 0xd7, 0xc0, 0xb5, 0xed, 0xaa, 0xfe, 0xb3, 0xa6, 0x6e, 0x74, 0x9e, + 0xee, 0x35, 0x8d, 0xfd, 0x9d, 0xf6, 0x5e, 0xb3, 0xde, 0xda, 0x6a, 0x35, 0x1b, 0xe9, 0x58, 0x2e, + 0x79, 0x72, 0x5a, 0x9c, 0xdf, 0xf7, 0x8e, 0x3c, 0xf2, 0xc2, 0x83, 0x79, 0x90, 0x8e, 0x22, 0xeb, + 0xbb, 0xad, 0x9d, 0xb4, 0x96, 0x5b, 0x38, 0x39, 0x2d, 0xce, 0xf2, 0x77, 0x05, 0x2c, 0x83, 0xd5, + 0xa8, 0x5e, 0x6f, 0xb6, 0x3b, 0x7a, 0xab, 0xde, 0x69, 0x36, 0xd2, 0xf1, 0x1c, 0x3c, 0x39, 0x2d, + 0xa6, 0xf4, 0xf0, 0x5f, 0x81, 0xe3, 0xef, 0xfe, 0x2d, 0x0e, 0x96, 0xa2, 0xef, 0x52, 0xb8, 0x01, + 0xae, 0x2b, 0x07, 0xed, 0x4e, 0xb5, 0xb3, 0xdf, 0xfe, 0x28, 0x98, 0x95, 0x93, 0xd3, 0xe2, 0x15, + 0x09, 0xdd, 0xf7, 0x2c, 0x7c, 0x60, 0x7b, 0xd8, 0x8a, 0x6c, 0xaa, 0x6c, 0xf6, 0xf4, 0xdd, 0xbd, + 0xdd, 0x76, 0xb3, 0x91, 0xd6, 0xe4, 0xa6, 0xd2, 0x60, 0xcf, 0x27, 0x7d, 0x42, 0xb1, 0x05, 0xef, + 0x87, 0xe9, 0x2a, 0xfc, 0x56, 0x6b, 0xa7, 0xfa, 0xb8, 0xf5, 0x4c, 0x44, 0x19, 0xd9, 0x21, 0xb8, + 0xa6, 0x2c, 0x78, 0x17, 0x64, 0x26, 0x2d, 0xaa, 0xf5, 0x4e, 0xeb, 0x49, 0x33, 0x3d, 0x93, 0x4b, + 0x9f, 0x9c, 0x16, 0x97, 0x24, 0x5c, 0x5c, 0x41, 0xf8, 0xa2, 0xf7, 0x7a, 0x75, 0xa7, 0xde, 0x7c, + 0xfc, 0xb8, 0xd9, 0x48, 0xcf, 0x46, 0xbd, 0xcb, 0xeb, 0xc5, 0x99, 0x16, 0x4f, 0x83, 0x97, 0x6d, + 0xf7, 0x69, 0xb3, 0x91, 0x9e, 0x8b, 0x5a, 0x34, 0x78, 0xed, 0xc8, 0x08, 0x5b, 0xb9, 0x85, 0x57, + 0x7f, 0xcc, 0xc7, 0xfe, 0xfc, 0xa7, 0x7c, 0xac, 0xd6, 0x7b, 0xfb, 0x3e, 0xaf, 0xbd, 0x7b, 0x9f, + 0xd7, 0xfe, 0xf5, 0x3e, 0xaf, 0xbd, 0xfe, 0x90, 0x8f, 0xbd, 0xfb, 0x90, 0x8f, 0xfd, 0xe3, 0x43, + 0x3e, 0x06, 0xae, 0xd9, 0x64, 0xea, 0x98, 0xed, 0x69, 0xcf, 0x36, 0x7a, 0x36, 0x3b, 0x1c, 0x74, + 0xcb, 0x26, 0x71, 0x2b, 0x63, 0xc8, 0x3d, 0x9b, 0x44, 0x56, 0x95, 0xe3, 0xe0, 0x67, 0x94, 0xbf, + 0xab, 0x68, 0x37, 0x21, 0x7e, 0x42, 0x7f, 0xf4, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xbc, 0xd9, + 0x63, 0xdc, 0x58, 0x0f, 0x00, 0x00, } func (m *Params) Marshal() (dAtA []byte, err error) { diff --git a/x/marker/types/msg.go b/x/marker/types/msg.go index 6de25ab502..f106ee368d 100644 --- a/x/marker/types/msg.go +++ b/x/marker/types/msg.go @@ -4,15 +4,15 @@ import ( "errors" "fmt" - "github.com/gogo/protobuf/proto" + "github.com/cosmos/gogoproto/proto" sdkmath "cosmossdk.io/math" + feegranttypes "cosmossdk.io/x/feegrant" codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - feegranttypes "cosmossdk.io/x/feegrant" ibctransfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" ) diff --git a/x/marker/types/proposals.pb.go b/x/marker/types/proposals.pb.go index 521b2e9999..20e3603c54 100644 --- a/x/marker/types/proposals.pb.go +++ b/x/marker/types/proposals.pb.go @@ -9,8 +9,8 @@ import ( types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/cosmos-sdk/x/bank/types" github_com_cosmos_cosmos_sdk_x_bank_types "github.com/cosmos/cosmos-sdk/x/bank/types" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/marker/types/query.pb.go b/x/marker/types/query.pb.go index 80c72eac5b..5b3c182511 100644 --- a/x/marker/types/query.pb.go +++ b/x/marker/types/query.pb.go @@ -12,9 +12,9 @@ import ( types1 "github.com/cosmos/cosmos-sdk/types" query "github.com/cosmos/cosmos-sdk/types/query" types2 "github.com/cosmos/cosmos-sdk/x/bank/types" - _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" diff --git a/x/marker/types/query.pb.gw.go b/x/marker/types/query.pb.gw.go index 0ca619ed92..fcd079fcd2 100644 --- a/x/marker/types/query.pb.gw.go +++ b/x/marker/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 func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryParamsRequest @@ -538,12 +540,14 @@ func local_request_Query_NetAssetValues_0(ctx context.Context, marshaler runtime // 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_Params_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 { @@ -551,6 +555,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Params_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) @@ -564,6 +569,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_AllMarkers_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 { @@ -571,6 +578,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_AllMarkers_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) @@ -584,6 +592,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Marker_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 { @@ -591,6 +601,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Marker_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) @@ -604,6 +615,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Holding_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 { @@ -611,6 +624,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Holding_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) @@ -624,6 +638,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Supply_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 { @@ -631,6 +647,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Supply_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) @@ -644,6 +661,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Escrow_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 { @@ -651,6 +670,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Escrow_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) @@ -664,6 +684,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Access_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 { @@ -671,6 +693,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Access_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) @@ -684,6 +707,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_DenomMetadata_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 { @@ -691,6 +716,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_DenomMetadata_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) @@ -704,6 +730,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_AccountData_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 { @@ -711,6 +739,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_AccountData_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) @@ -724,6 +753,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_NetAssetValues_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 { @@ -731,6 +762,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_NetAssetValues_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/marker/types/si.pb.go b/x/marker/types/si.pb.go index e2da0cf1e1..b83aec75d7 100644 --- a/x/marker/types/si.pb.go +++ b/x/marker/types/si.pb.go @@ -5,8 +5,8 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" math "math" ) diff --git a/x/marker/types/tx.pb.go b/x/marker/types/tx.pb.go index 49ee4989c4..60fe1f3a01 100644 --- a/x/marker/types/tx.pb.go +++ b/x/marker/types/tx.pb.go @@ -13,11 +13,11 @@ import ( _ "github.com/cosmos/cosmos-sdk/types/msgservice" _ "github.com/cosmos/cosmos-sdk/x/bank/types" github_com_cosmos_cosmos_sdk_x_bank_types "github.com/cosmos/cosmos-sdk/x/bank/types" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" _ "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" - github_com_cosmos_ibc_go_v6_modules_apps_transfer_types "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" - _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + github_com_cosmos_ibc_go_v8_modules_apps_transfer_types "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" @@ -1239,7 +1239,7 @@ var xxx_messageInfo_MsgTransferResponse proto.InternalMessageInfo // MsgIbcTransferRequest defines the Msg/IbcTransfer request type for markers. type MsgIbcTransferRequest struct { - Transfer github_com_cosmos_ibc_go_v6_modules_apps_transfer_types.MsgTransfer `protobuf:"bytes,1,opt,name=transfer,proto3,customtype=github.com/cosmos/ibc-go/v8/modules/apps/transfer/types.MsgTransfer" json:"transfer"` + Transfer github_com_cosmos_ibc_go_v8_modules_apps_transfer_types.MsgTransfer `protobuf:"bytes,1,opt,name=transfer,proto3,customtype=github.com/cosmos/ibc-go/v8/modules/apps/transfer/types.MsgTransfer" json:"transfer"` Administrator string `protobuf:"bytes,2,opt,name=administrator,proto3" json:"administrator,omitempty"` } @@ -2226,125 +2226,125 @@ var fileDescriptor_bcb203fb73175ed3 = []byte{ // 1928 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x59, 0xcf, 0x6f, 0x1b, 0x59, 0x1d, 0xef, 0x34, 0x89, 0x1b, 0x7f, 0xdd, 0xa6, 0xcd, 0xab, 0x93, 0x4c, 0xa6, 0xc4, 0x71, 0xdc, - 0x5f, 0xde, 0x65, 0xe3, 0x69, 0xbc, 0x10, 0x76, 0x23, 0x24, 0xe4, 0x24, 0xb4, 0x54, 0xe0, 0x55, - 0xe5, 0x2c, 0x20, 0xb8, 0x58, 0xe3, 0x99, 0x97, 0xe9, 0x28, 0xf6, 0x3c, 0x77, 0xde, 0xb3, 0xdb, - 0xac, 0xb4, 0x17, 0x38, 0xed, 0x09, 0xd4, 0x03, 0x07, 0xb8, 0x70, 0xe6, 0x80, 0x38, 0xac, 0x40, - 0xfc, 0x07, 0xab, 0x3d, 0xad, 0x56, 0x1c, 0x10, 0x87, 0x65, 0xd5, 0x1e, 0x40, 0xfc, 0x07, 0xdc, - 0xd0, 0xbc, 0xf7, 0x66, 0xc6, 0x63, 0xcf, 0x4c, 0x9c, 0xae, 0x55, 0xe0, 0x94, 0xbc, 0xf7, 0xfd, + 0x5f, 0xde, 0x65, 0xe3, 0x69, 0xbc, 0x50, 0xba, 0x11, 0x12, 0x72, 0x12, 0x5a, 0x2a, 0xf0, 0xaa, + 0x72, 0x16, 0x10, 0x5c, 0xac, 0xf1, 0xcc, 0xcb, 0x74, 0x14, 0x7b, 0x9e, 0x3b, 0xef, 0xd9, 0x4d, + 0x56, 0xda, 0x0b, 0x9c, 0xf6, 0x04, 0xea, 0x81, 0x03, 0x5c, 0x38, 0x73, 0x40, 0x1c, 0x56, 0x20, + 0xfe, 0x83, 0xd5, 0x9e, 0x56, 0x2b, 0x0e, 0x88, 0xc3, 0xb2, 0x6a, 0x0f, 0x20, 0xfe, 0x03, 0x6e, + 0x68, 0xde, 0x7b, 0x33, 0xe3, 0xb1, 0x67, 0x26, 0x4e, 0xd7, 0x5a, 0xe0, 0x94, 0xbc, 0xf7, 0xfd, 0xfd, 0xe3, 0xbd, 0xf7, 0xf9, 0x8e, 0x61, 0xa3, 0xef, 0x91, 0x21, 0x76, 0x0d, 0xd7, 0xc4, 0x7a, - 0xcf, 0xf0, 0x4e, 0xb0, 0xa7, 0x0f, 0x77, 0x74, 0xf6, 0xac, 0xd6, 0xf7, 0x08, 0x23, 0xa8, 0x18, - 0x91, 0x6b, 0x82, 0x5c, 0x1b, 0xee, 0x68, 0xeb, 0x36, 0x21, 0x76, 0x17, 0xeb, 0x9c, 0xa7, 0x33, - 0x38, 0xd6, 0x0d, 0xf7, 0x54, 0x08, 0x68, 0xeb, 0x26, 0xa1, 0x3d, 0x42, 0xdb, 0x7c, 0xa5, 0x8b, - 0x85, 0x24, 0x15, 0x6d, 0x62, 0x13, 0xb1, 0xef, 0xff, 0x27, 0x77, 0x4b, 0x82, 0x47, 0xef, 0x18, - 0x14, 0xeb, 0xc3, 0x9d, 0x0e, 0x66, 0xc6, 0x8e, 0x6e, 0x12, 0xc7, 0x9d, 0xa0, 0xbb, 0x27, 0x21, - 0xdd, 0x5f, 0x48, 0xfa, 0x9a, 0xa4, 0xf7, 0xa8, 0xed, 0x7b, 0xde, 0xa3, 0xb6, 0x24, 0xdc, 0x76, - 0x3a, 0xa6, 0x6e, 0xf4, 0xfb, 0x5d, 0xc7, 0x34, 0x98, 0x43, 0x5c, 0xaa, 0x33, 0xcf, 0x70, 0xe9, - 0x71, 0x3c, 0x42, 0x6d, 0x2b, 0x31, 0x01, 0x32, 0x56, 0xc1, 0x72, 0x27, 0x91, 0xc5, 0x30, 0x4d, - 0x4c, 0xa9, 0xed, 0x19, 0x2e, 0x13, 0x7c, 0x95, 0x3f, 0x29, 0xa0, 0x36, 0xa9, 0xfd, 0xc0, 0xdf, - 0x6a, 0x74, 0xbb, 0xe4, 0xa9, 0x2f, 0xd1, 0xc2, 0x4f, 0x06, 0x98, 0x32, 0x54, 0x84, 0x05, 0x0b, - 0xbb, 0xa4, 0xa7, 0x2a, 0x65, 0xa5, 0x9a, 0x6f, 0x89, 0x05, 0xba, 0x05, 0x57, 0x0c, 0xab, 0xe7, - 0xb8, 0x0e, 0x65, 0x9e, 0xc1, 0x88, 0xa7, 0x5e, 0xe4, 0xd4, 0xf8, 0x26, 0x52, 0xe1, 0x12, 0xb7, - 0x83, 0xb1, 0x3a, 0xc7, 0xe9, 0xc1, 0x12, 0x7d, 0x17, 0xf2, 0x46, 0x60, 0x49, 0x9d, 0x2f, 0x2b, - 0xd5, 0x42, 0xbd, 0x58, 0x13, 0xd5, 0xa9, 0x05, 0xd5, 0xa9, 0x35, 0xdc, 0xd3, 0xfd, 0xe5, 0x4f, - 0x3f, 0xde, 0xbe, 0x72, 0x1f, 0xe3, 0xd0, 0xaf, 0x87, 0xad, 0x48, 0xb2, 0x72, 0x03, 0xd6, 0x13, - 0x1c, 0xa7, 0x7d, 0xe2, 0x52, 0x5c, 0xf9, 0x68, 0x01, 0xae, 0x37, 0xa9, 0xdd, 0xb0, 0xac, 0x26, - 0x0f, 0x3e, 0x88, 0xa8, 0x03, 0x39, 0xa3, 0x47, 0x06, 0x2e, 0xe3, 0x21, 0x15, 0xea, 0xeb, 0x35, - 0x59, 0x6e, 0xbf, 0x94, 0x35, 0x59, 0xaa, 0xda, 0x01, 0x71, 0xdc, 0x7d, 0xfd, 0x93, 0x2f, 0x36, - 0x2f, 0xfc, 0xed, 0x8b, 0xcd, 0xbb, 0xb6, 0xc3, 0x1e, 0x0f, 0x3a, 0x35, 0x93, 0xf4, 0x64, 0x6f, - 0xc8, 0x3f, 0xdb, 0xd4, 0x3a, 0xd1, 0xd9, 0x69, 0x1f, 0x53, 0x2e, 0xd0, 0x92, 0x9a, 0xfd, 0xc8, - 0x7b, 0x86, 0x6b, 0xd8, 0xd8, 0x0b, 0x22, 0x97, 0x4b, 0xb4, 0x05, 0x97, 0x8f, 0x3d, 0xd2, 0x6b, - 0x1b, 0x96, 0xe5, 0x61, 0x4a, 0x79, 0xf0, 0xf9, 0x56, 0xc1, 0xdf, 0x6b, 0x88, 0x2d, 0xb4, 0x07, - 0x39, 0xca, 0x0c, 0x36, 0xa0, 0xea, 0x42, 0x59, 0xa9, 0x2e, 0xd5, 0x2b, 0xb5, 0xa4, 0x6e, 0xae, - 0x89, 0xa8, 0x8e, 0x38, 0x67, 0x4b, 0x4a, 0xa0, 0x06, 0x14, 0x04, 0x47, 0xdb, 0xf7, 0x4a, 0xcd, - 0x71, 0x05, 0xe5, 0x2c, 0x05, 0xef, 0x9f, 0xf6, 0x71, 0x0b, 0x7a, 0xe1, 0xff, 0xe8, 0x7b, 0x50, - 0x10, 0x3d, 0xd2, 0xee, 0x3a, 0x94, 0xa9, 0x97, 0xca, 0x73, 0xd5, 0x42, 0x7d, 0x2b, 0x59, 0x45, - 0x83, 0x33, 0xf2, 0x02, 0xec, 0xcf, 0xfb, 0xc9, 0x6a, 0x81, 0x90, 0xfd, 0x81, 0x43, 0x99, 0x1f, - 0x2b, 0x1d, 0xf4, 0xfb, 0xdd, 0xd3, 0xf6, 0xb1, 0xf3, 0x0c, 0x5b, 0xea, 0x62, 0x59, 0xa9, 0x2e, - 0xb6, 0x0a, 0x62, 0xef, 0xbe, 0xbf, 0x85, 0xde, 0x01, 0x95, 0x97, 0xb3, 0x6d, 0x93, 0x21, 0xf6, - 0xb8, 0xfa, 0xb6, 0x49, 0x5c, 0xe6, 0x91, 0xae, 0x9a, 0xe7, 0xec, 0xab, 0x9c, 0xfe, 0x20, 0x24, - 0x1f, 0x08, 0x2a, 0xaa, 0xc3, 0x8a, 0x90, 0x3c, 0x26, 0x9e, 0x89, 0xad, 0x76, 0x70, 0x4a, 0x54, - 0xe0, 0x62, 0xd7, 0x39, 0xf1, 0x3e, 0xa7, 0xbd, 0x2f, 0x49, 0x48, 0x87, 0xeb, 0x1e, 0x7e, 0x32, - 0x70, 0x3c, 0x6c, 0xb5, 0x0d, 0xc6, 0x3c, 0xa7, 0x33, 0x60, 0x98, 0xaa, 0x85, 0xf2, 0x5c, 0x35, - 0xdf, 0x42, 0x01, 0xa9, 0x11, 0x52, 0xd0, 0x0d, 0xc8, 0x0f, 0xa8, 0xd5, 0x36, 0xb1, 0xcb, 0xa8, - 0x7a, 0xb9, 0xac, 0x54, 0xe7, 0x5b, 0x8b, 0x03, 0x6a, 0x1d, 0xf8, 0x6b, 0xb4, 0x0a, 0xb9, 0x21, - 0xe9, 0x0e, 0x7a, 0x58, 0xbd, 0xc2, 0x29, 0x72, 0xb5, 0xb7, 0xfc, 0xb3, 0x7f, 0xfc, 0xe1, 0xcd, - 0x58, 0x95, 0x2b, 0xab, 0x50, 0x8c, 0xb7, 0xa2, 0xec, 0xd1, 0xe7, 0x4a, 0xd0, 0xa3, 0x22, 0x93, - 0xb3, 0x38, 0x75, 0xdf, 0x81, 0x9c, 0xa8, 0x81, 0x3a, 0x77, 0xbe, 0xd2, 0x49, 0xb1, 0xc8, 0xd9, - 0xc0, 0x27, 0xe9, 0xec, 0x87, 0xb0, 0xda, 0xa4, 0xf6, 0x21, 0xee, 0x62, 0x86, 0x67, 0xe7, 0xee, - 0x5d, 0xb8, 0xea, 0xe1, 0x1e, 0x19, 0xfa, 0x25, 0x91, 0x67, 0x42, 0x1c, 0x99, 0x25, 0xb9, 0x2d, - 0x8f, 0x45, 0x65, 0x1d, 0xd6, 0x26, 0xcc, 0x4b, 0xcf, 0x1e, 0x01, 0x6a, 0x52, 0xfb, 0xbe, 0xe3, - 0x1a, 0x5d, 0xe7, 0x83, 0x59, 0x5c, 0x5d, 0x95, 0x15, 0x5e, 0x97, 0x48, 0x63, 0xcc, 0x50, 0xc3, - 0x64, 0xce, 0xd0, 0x60, 0x33, 0x34, 0x14, 0x69, 0x94, 0x86, 0xde, 0x83, 0x6b, 0x4d, 0x6a, 0x1f, - 0xf8, 0x35, 0xeb, 0xce, 0xc2, 0xcc, 0x75, 0x58, 0x1e, 0xd1, 0x17, 0x33, 0x22, 0x32, 0x3a, 0x3b, - 0x23, 0x81, 0x3e, 0x69, 0xe4, 0xd7, 0x0a, 0x2c, 0x35, 0xa9, 0xdd, 0x74, 0x5c, 0xf6, 0x3a, 0x6f, - 0xe0, 0xe9, 0x3c, 0x5e, 0x86, 0xab, 0xa1, 0x6f, 0x71, 0x7f, 0xf7, 0x07, 0x9e, 0xfb, 0xbf, 0xea, - 0xaf, 0xf0, 0x4d, 0xfa, 0xfb, 0x17, 0x85, 0xf7, 0xe4, 0x8f, 0x1d, 0xf6, 0xd8, 0xf2, 0x8c, 0xa7, - 0xb3, 0x38, 0x92, 0x1b, 0x00, 0x8c, 0x8c, 0x9d, 0xc6, 0x3c, 0x23, 0xc1, 0xfb, 0x64, 0x86, 0xe9, - 0x98, 0xe7, 0x17, 0x4c, 0x46, 0x3a, 0xee, 0xf9, 0xe9, 0xf8, 0xdd, 0xdf, 0x37, 0xab, 0x53, 0xa6, - 0x83, 0x06, 0xf9, 0x90, 0xe7, 0x22, 0x8a, 0x4a, 0x46, 0xfb, 0xa5, 0x88, 0x36, 0xb8, 0xd1, 0xff, - 0xab, 0x15, 0x9a, 0x4b, 0xca, 0xdd, 0x14, 0xef, 0x7b, 0x3c, 0xbd, 0x0b, 0x63, 0xe9, 0x95, 0x91, - 0x47, 0x11, 0xca, 0xc8, 0x3f, 0x57, 0x60, 0xa5, 0x49, 0xed, 0x87, 0x1d, 0x73, 0x3c, 0xf8, 0xe7, - 0x0a, 0x2c, 0x86, 0xaf, 0x9f, 0x88, 0xff, 0x8d, 0x9a, 0xd3, 0x31, 0x6b, 0xa3, 0x28, 0xb2, 0x16, - 0x70, 0xf0, 0x97, 0x3f, 0xd2, 0xbf, 0xff, 0x7d, 0x99, 0x8f, 0x83, 0xc9, 0x7c, 0x38, 0x1d, 0x73, - 0xdb, 0x26, 0xfa, 0x70, 0x57, 0xef, 0x11, 0x6b, 0xd0, 0xc5, 0xd4, 0xc7, 0xa5, 0x23, 0x78, 0x54, - 0x24, 0x69, 0xd4, 0xd9, 0xd0, 0x8f, 0x29, 0xfb, 0x59, 0xe5, 0x4f, 0x4a, 0x2c, 0x26, 0x19, 0xee, - 0x9f, 0x15, 0xd0, 0x9a, 0xd4, 0x3e, 0xc2, 0xec, 0xd0, 0xef, 0xdc, 0x26, 0x66, 0x86, 0x65, 0x30, - 0x23, 0x88, 0x79, 0x00, 0x8b, 0x3d, 0xb9, 0x25, 0x43, 0xde, 0x88, 0x4a, 0xee, 0x9e, 0x84, 0x25, - 0x0f, 0xe4, 0xf6, 0xf7, 0x64, 0x98, 0xf5, 0xcc, 0xb2, 0x3f, 0x13, 0x78, 0x5d, 0x06, 0x16, 0xd8, - 0x0c, 0x4d, 0x4d, 0x19, 0xd5, 0x06, 0xdc, 0x48, 0x74, 0x5d, 0x86, 0xf6, 0xe9, 0x3c, 0xdc, 0x14, - 0x0f, 0x6c, 0xf0, 0xbe, 0x04, 0xd7, 0xff, 0xff, 0x19, 0x50, 0x1d, 0x03, 0x9b, 0x0b, 0x5f, 0x1d, - 0x6c, 0xe6, 0x66, 0x07, 0x36, 0x2f, 0x9d, 0x0f, 0x6c, 0x2e, 0xbe, 0x1a, 0xd8, 0xcc, 0x9f, 0x1b, - 0x6c, 0xc2, 0x74, 0x60, 0xb3, 0x90, 0x0a, 0x36, 0x2f, 0x8f, 0x82, 0xcd, 0xca, 0x1d, 0xb8, 0x95, - 0xdd, 0x4b, 0xb2, 0xe9, 0xfe, 0xad, 0x40, 0xd9, 0x6f, 0x4a, 0x9e, 0x8e, 0x87, 0xae, 0xe9, 0x61, - 0x83, 0xe2, 0x47, 0x1e, 0xe9, 0x13, 0x6a, 0x74, 0x5f, 0x67, 0xc7, 0xdd, 0x86, 0x25, 0x66, 0x78, - 0x36, 0x66, 0x61, 0x67, 0xc9, 0x33, 0x24, 0x76, 0x83, 0xde, 0xda, 0x85, 0xbc, 0x31, 0x60, 0x8f, - 0x89, 0xe7, 0xb0, 0x53, 0xd1, 0x9a, 0xfb, 0xea, 0xe7, 0x1f, 0x6f, 0x17, 0xa5, 0x43, 0x92, 0xed, - 0x88, 0x79, 0x8e, 0x6b, 0xb7, 0x22, 0xd6, 0x3d, 0xf4, 0xcf, 0xdf, 0x6e, 0x2a, 0x3e, 0x00, 0x8f, + 0xcf, 0xf0, 0x8e, 0xb1, 0xa7, 0x0f, 0x77, 0x74, 0x76, 0x52, 0xeb, 0x7b, 0x84, 0x11, 0x54, 0x8c, + 0xc8, 0x35, 0x41, 0xae, 0x0d, 0x77, 0xb4, 0x75, 0x9b, 0x10, 0xbb, 0x8b, 0x75, 0xce, 0xd3, 0x19, + 0x1c, 0xe9, 0x86, 0x7b, 0x2a, 0x04, 0xb4, 0x75, 0x93, 0xd0, 0x1e, 0xa1, 0x6d, 0xbe, 0xd2, 0xc5, + 0x42, 0x92, 0x8a, 0x36, 0xb1, 0x89, 0xd8, 0xf7, 0xff, 0x93, 0xbb, 0x25, 0xc1, 0xa3, 0x77, 0x0c, + 0x8a, 0xf5, 0xe1, 0x4e, 0x07, 0x33, 0x63, 0x47, 0x37, 0x89, 0xe3, 0x4e, 0xd0, 0xdd, 0xe3, 0x90, + 0xee, 0x2f, 0x24, 0x7d, 0x4d, 0xd2, 0x7b, 0xd4, 0xf6, 0x3d, 0xef, 0x51, 0x5b, 0x12, 0x6e, 0x3b, + 0x1d, 0x53, 0x37, 0xfa, 0xfd, 0xae, 0x63, 0x1a, 0xcc, 0x21, 0x2e, 0xd5, 0x99, 0x67, 0xb8, 0xf4, + 0x28, 0x1e, 0xa1, 0xb6, 0x95, 0x98, 0x00, 0x19, 0xab, 0x60, 0xb9, 0x93, 0xc8, 0x62, 0x98, 0x26, + 0xa6, 0xd4, 0xf6, 0x0c, 0x97, 0x09, 0xbe, 0xca, 0x9f, 0x14, 0x50, 0x9b, 0xd4, 0x7e, 0xe4, 0x6f, + 0x35, 0xba, 0x5d, 0xf2, 0xdc, 0x97, 0x68, 0xe1, 0x67, 0x03, 0x4c, 0x19, 0x2a, 0xc2, 0x82, 0x85, + 0x5d, 0xd2, 0x53, 0x95, 0xb2, 0x52, 0xcd, 0xb7, 0xc4, 0x02, 0xdd, 0x82, 0x2b, 0x86, 0xd5, 0x73, + 0x5c, 0x87, 0x32, 0xcf, 0x60, 0xc4, 0x53, 0x2f, 0x72, 0x6a, 0x7c, 0x13, 0xa9, 0x70, 0x89, 0xdb, + 0xc1, 0x58, 0x9d, 0xe3, 0xf4, 0x60, 0x89, 0xbe, 0x0b, 0x79, 0x23, 0xb0, 0xa4, 0xce, 0x97, 0x95, + 0x6a, 0xa1, 0x5e, 0xac, 0x89, 0xea, 0xd4, 0x82, 0xea, 0xd4, 0x1a, 0xee, 0xe9, 0xde, 0xf2, 0x27, + 0x1f, 0x6d, 0x5f, 0x79, 0x88, 0x71, 0xe8, 0xd7, 0xe3, 0x56, 0x24, 0x59, 0xb9, 0x01, 0xeb, 0x09, + 0x8e, 0xd3, 0x3e, 0x71, 0x29, 0xae, 0x7c, 0xb8, 0x00, 0xd7, 0x9b, 0xd4, 0x6e, 0x58, 0x56, 0x93, + 0x07, 0x1f, 0x44, 0xd4, 0x81, 0x9c, 0xd1, 0x23, 0x03, 0x97, 0xf1, 0x90, 0x0a, 0xf5, 0xf5, 0x9a, + 0x2c, 0xb7, 0x5f, 0xca, 0x9a, 0x2c, 0x55, 0x6d, 0x9f, 0x38, 0xee, 0x9e, 0xfe, 0xf1, 0xe7, 0x9b, + 0x17, 0xfe, 0xf6, 0xf9, 0xe6, 0x5d, 0xdb, 0x61, 0x4f, 0x07, 0x9d, 0x9a, 0x49, 0x7a, 0xb2, 0x37, + 0xe4, 0x9f, 0x6d, 0x6a, 0x1d, 0xeb, 0xec, 0xb4, 0x8f, 0x29, 0x17, 0x68, 0x49, 0xcd, 0x7e, 0xe4, + 0x3d, 0xc3, 0x35, 0x6c, 0xec, 0x05, 0x91, 0xcb, 0x25, 0xda, 0x82, 0xcb, 0x47, 0x1e, 0xe9, 0xb5, + 0x0d, 0xcb, 0xf2, 0x30, 0xa5, 0x3c, 0xf8, 0x7c, 0xab, 0xe0, 0xef, 0x35, 0xc4, 0x16, 0xda, 0x85, + 0x1c, 0x65, 0x06, 0x1b, 0x50, 0x75, 0xa1, 0xac, 0x54, 0x97, 0xea, 0x95, 0x5a, 0x52, 0x37, 0xd7, + 0x44, 0x54, 0x87, 0x9c, 0xb3, 0x25, 0x25, 0x50, 0x03, 0x0a, 0x82, 0xa3, 0xed, 0x7b, 0xa5, 0xe6, + 0xb8, 0x82, 0x72, 0x96, 0x82, 0xf7, 0x4e, 0xfb, 0xb8, 0x05, 0xbd, 0xf0, 0x7f, 0xf4, 0x3d, 0x28, + 0x88, 0x1e, 0x69, 0x77, 0x1d, 0xca, 0xd4, 0x4b, 0xe5, 0xb9, 0x6a, 0xa1, 0xbe, 0x95, 0xac, 0xa2, + 0xc1, 0x19, 0x79, 0x01, 0xf6, 0xe6, 0xfd, 0x64, 0xb5, 0x40, 0xc8, 0xfe, 0xc0, 0xa1, 0xcc, 0x8f, + 0x95, 0x0e, 0xfa, 0xfd, 0xee, 0x69, 0xfb, 0xc8, 0x39, 0xc1, 0x96, 0xba, 0x58, 0x56, 0xaa, 0x8b, + 0xad, 0x82, 0xd8, 0x7b, 0xe8, 0x6f, 0xa1, 0x07, 0xa0, 0xf2, 0x72, 0xb6, 0x6d, 0x32, 0xc4, 0x1e, + 0x57, 0xdf, 0x36, 0x89, 0xcb, 0x3c, 0xd2, 0x55, 0xf3, 0x9c, 0x7d, 0x95, 0xd3, 0x1f, 0x85, 0xe4, + 0x7d, 0x41, 0x45, 0x75, 0x58, 0x11, 0x92, 0x47, 0xc4, 0x33, 0xb1, 0xd5, 0x0e, 0x4e, 0x89, 0x0a, + 0x5c, 0xec, 0x3a, 0x27, 0x3e, 0xe4, 0xb4, 0xf7, 0x24, 0x09, 0xe9, 0x70, 0xdd, 0xc3, 0xcf, 0x06, + 0x8e, 0x87, 0xad, 0xb6, 0xc1, 0x98, 0xe7, 0x74, 0x06, 0x0c, 0x53, 0xb5, 0x50, 0x9e, 0xab, 0xe6, + 0x5b, 0x28, 0x20, 0x35, 0x42, 0x0a, 0xba, 0x01, 0xf9, 0x01, 0xb5, 0xda, 0x26, 0x76, 0x19, 0x55, + 0x2f, 0x97, 0x95, 0xea, 0x7c, 0x6b, 0x71, 0x40, 0xad, 0x7d, 0x7f, 0x8d, 0x56, 0x21, 0x37, 0x24, + 0xdd, 0x41, 0x0f, 0xab, 0x57, 0x38, 0x45, 0xae, 0x76, 0x97, 0x7f, 0xf6, 0x8f, 0x3f, 0xbc, 0x19, + 0xab, 0x72, 0x65, 0x15, 0x8a, 0xf1, 0x56, 0x94, 0x3d, 0xfa, 0x42, 0x09, 0x7a, 0x54, 0x64, 0x72, + 0x16, 0xa7, 0xee, 0x3b, 0x90, 0x13, 0x35, 0x50, 0xe7, 0xce, 0x57, 0x3a, 0x29, 0x16, 0x39, 0x1b, + 0xf8, 0x24, 0x9d, 0xfd, 0x00, 0x56, 0x9b, 0xd4, 0x3e, 0xc0, 0x5d, 0xcc, 0xf0, 0xec, 0xdc, 0xbd, + 0x0b, 0x57, 0x3d, 0xdc, 0x23, 0x43, 0xbf, 0x24, 0xf2, 0x4c, 0x88, 0x23, 0xb3, 0x24, 0xb7, 0xe5, + 0xb1, 0xa8, 0xac, 0xc3, 0xda, 0x84, 0x79, 0xe9, 0xd9, 0x13, 0x40, 0x4d, 0x6a, 0x3f, 0x74, 0x5c, + 0xa3, 0xeb, 0xbc, 0x3f, 0x8b, 0xab, 0xab, 0xb2, 0xc2, 0xeb, 0x12, 0x69, 0x8c, 0x19, 0x6a, 0x98, + 0xcc, 0x19, 0x1a, 0x6c, 0x86, 0x86, 0x22, 0x8d, 0xd2, 0xd0, 0xbb, 0x70, 0xad, 0x49, 0xed, 0x7d, + 0xbf, 0x66, 0xdd, 0x59, 0x98, 0xb9, 0x0e, 0xcb, 0x23, 0xfa, 0x62, 0x46, 0x44, 0x46, 0x67, 0x67, + 0x24, 0xd0, 0x27, 0x8d, 0xfc, 0x5a, 0x81, 0xa5, 0x26, 0xb5, 0x9b, 0x8e, 0xcb, 0xbe, 0xca, 0x1b, + 0x78, 0x3a, 0x8f, 0x97, 0xe1, 0x6a, 0xe8, 0x5b, 0xdc, 0xdf, 0xbd, 0x81, 0xe7, 0xfe, 0xaf, 0xfa, + 0x2b, 0x7c, 0x93, 0xfe, 0xfe, 0x45, 0xe1, 0x3d, 0xf9, 0x63, 0x87, 0x3d, 0xb5, 0x3c, 0xe3, 0xf9, + 0x2c, 0x8e, 0xe4, 0x06, 0x00, 0x23, 0x63, 0xa7, 0x31, 0xcf, 0x48, 0xf0, 0x3e, 0x99, 0x61, 0x3a, + 0xe6, 0xf9, 0x05, 0x93, 0x91, 0x8e, 0x7b, 0x7e, 0x3a, 0x7e, 0xf7, 0xf7, 0xcd, 0xea, 0x94, 0xe9, + 0xa0, 0x41, 0x3e, 0xe4, 0xb9, 0x88, 0xa2, 0x92, 0xd1, 0x7e, 0x21, 0xa2, 0x0d, 0x6e, 0xf4, 0xff, + 0x6a, 0x85, 0xe6, 0x92, 0x72, 0x37, 0xc5, 0xfb, 0x1e, 0x4f, 0xef, 0xc2, 0x58, 0x7a, 0x65, 0xe4, + 0x51, 0x84, 0x32, 0xf2, 0xcf, 0x14, 0x58, 0x69, 0x52, 0xfb, 0x71, 0xc7, 0x1c, 0x0f, 0xfe, 0x85, + 0x02, 0x8b, 0xe1, 0xeb, 0x27, 0xe2, 0x7f, 0xa3, 0xe6, 0x74, 0xcc, 0xda, 0x28, 0x8a, 0xac, 0x05, + 0x1c, 0xfc, 0xe5, 0x8f, 0xf4, 0xef, 0x7d, 0x5f, 0xe6, 0x63, 0x7f, 0x32, 0x1f, 0x4e, 0xc7, 0xdc, + 0xb6, 0x89, 0x3e, 0x7c, 0xa0, 0xf7, 0x88, 0x35, 0xe8, 0x62, 0xea, 0xe3, 0xd2, 0x11, 0x3c, 0x2a, + 0x92, 0x34, 0xea, 0x6c, 0xe8, 0xc7, 0x94, 0xfd, 0xac, 0xf2, 0x27, 0x25, 0x16, 0x93, 0x0c, 0xf7, + 0xcf, 0x0a, 0x68, 0x4d, 0x6a, 0x1f, 0x62, 0x76, 0xe0, 0x77, 0x6e, 0x13, 0x33, 0xc3, 0x32, 0x98, + 0x11, 0xc4, 0x3c, 0x80, 0xc5, 0x9e, 0xdc, 0x92, 0x21, 0x6f, 0x44, 0x25, 0x77, 0x8f, 0xc3, 0x92, + 0x07, 0x72, 0x7b, 0xbb, 0x32, 0xcc, 0x7a, 0x66, 0xd9, 0x4f, 0x04, 0x5e, 0x97, 0x81, 0x05, 0x36, + 0x43, 0x53, 0x53, 0x46, 0xb5, 0x01, 0x37, 0x12, 0x5d, 0x97, 0xa1, 0x7d, 0x32, 0x0f, 0x37, 0xc5, + 0x03, 0x1b, 0xbc, 0x2f, 0xc1, 0xf5, 0xff, 0x7f, 0x06, 0x54, 0xc7, 0xc0, 0xe6, 0xc2, 0x97, 0x07, + 0x9b, 0xb9, 0xd9, 0x81, 0xcd, 0x4b, 0xe7, 0x03, 0x9b, 0x8b, 0xaf, 0x07, 0x36, 0xf3, 0xe7, 0x06, + 0x9b, 0x30, 0x1d, 0xd8, 0x2c, 0xa4, 0x82, 0xcd, 0xcb, 0xa3, 0x60, 0xb3, 0x72, 0x07, 0x6e, 0x65, + 0xf7, 0x92, 0x6c, 0xba, 0x7f, 0x2b, 0x50, 0xf6, 0x9b, 0x92, 0xa7, 0xe3, 0xb1, 0x6b, 0x7a, 0xd8, + 0xa0, 0xf8, 0x89, 0x47, 0xfa, 0x84, 0x1a, 0xdd, 0xaf, 0xb2, 0xe3, 0x6e, 0xc3, 0x12, 0x33, 0x3c, + 0x1b, 0xb3, 0xb0, 0xb3, 0xe4, 0x19, 0x12, 0xbb, 0x41, 0x6f, 0xdd, 0x87, 0xbc, 0x31, 0x60, 0x4f, + 0x89, 0xe7, 0xb0, 0x53, 0xd1, 0x9a, 0x7b, 0xea, 0x67, 0x1f, 0x6d, 0x17, 0xa5, 0x43, 0x92, 0xed, + 0x90, 0x79, 0x8e, 0x6b, 0xb7, 0x22, 0xd6, 0x5d, 0xf4, 0xcf, 0xdf, 0x6e, 0x2a, 0x3e, 0x00, 0x8f, 0xf6, 0x2a, 0x37, 0x61, 0x2b, 0x23, 0x74, 0x99, 0xa0, 0x5f, 0x5d, 0x84, 0x4a, 0x93, 0xda, 0x3f, 0xec, 0x5b, 0x12, 0xd9, 0xc5, 0xab, 0x93, 0xfd, 0xae, 0x7e, 0x1b, 0x34, 0x81, 0x56, 0xdb, 0x49, - 0x25, 0xbf, 0xc8, 0x4b, 0xae, 0x0a, 0x8e, 0x49, 0xd5, 0x68, 0x17, 0xd6, 0x0c, 0xcb, 0x4a, 0x14, - 0x9d, 0xe3, 0xa2, 0x2b, 0x86, 0x65, 0x25, 0xc8, 0x3d, 0x00, 0x14, 0x34, 0x62, 0x3b, 0x4a, 0xd6, - 0xfc, 0x19, 0xc9, 0x5a, 0x0e, 0x64, 0x1a, 0x61, 0xd2, 0x6e, 0x04, 0x49, 0x4b, 0xd0, 0x57, 0xb9, - 0xcd, 0x6f, 0xab, 0xf4, 0xbc, 0xc8, 0xfc, 0xfd, 0x51, 0x81, 0x52, 0xc8, 0x17, 0x3f, 0x0a, 0xd9, - 0xb9, 0x4b, 0x3d, 0x5b, 0x17, 0xd3, 0xcf, 0xd6, 0x2c, 0xbb, 0x63, 0x0b, 0x36, 0x53, 0xfd, 0x0e, - 0x3e, 0x25, 0x88, 0x2f, 0x24, 0x47, 0x98, 0x35, 0x4c, 0xd3, 0xef, 0xe2, 0xc3, 0x91, 0xa7, 0x28, - 0x39, 0xaa, 0x22, 0x2c, 0x0c, 0x8d, 0xee, 0x00, 0xcb, 0xee, 0x16, 0x0b, 0x74, 0x0f, 0x72, 0xd4, - 0xb1, 0xdd, 0xe0, 0xb6, 0xcd, 0x70, 0x5a, 0xf2, 0xed, 0x5d, 0x0d, 0x3c, 0x96, 0x1b, 0xf2, 0x9b, - 0xc7, 0xb8, 0x2b, 0xd2, 0xd1, 0x7f, 0x29, 0xf0, 0xb5, 0x30, 0x98, 0x23, 0xec, 0x5a, 0x87, 0xd8, - 0x3d, 0xf5, 0xaf, 0xc7, 0x6c, 0x67, 0x77, 0x61, 0x4d, 0xb6, 0xaf, 0x85, 0x5d, 0x27, 0x9a, 0xc4, - 0xc2, 0xde, 0x5d, 0x11, 0xe4, 0x43, 0x4e, 0x6d, 0x04, 0x44, 0x74, 0x0f, 0x8a, 0x7e, 0xe3, 0x4e, - 0x08, 0x89, 0xae, 0x45, 0x86, 0x65, 0x8d, 0x4b, 0xc4, 0x0a, 0x37, 0xff, 0xd5, 0x0a, 0xb7, 0x09, - 0x1b, 0x29, 0xb1, 0xca, 0x6c, 0xfc, 0x5e, 0xe1, 0x0f, 0x71, 0xc3, 0xb2, 0xde, 0xc3, 0xac, 0x41, - 0x29, 0x66, 0x3f, 0xf2, 0xab, 0x30, 0x93, 0xb1, 0xf5, 0x08, 0xae, 0xb9, 0xfe, 0x1d, 0xe6, 0x6b, - 0x6d, 0xf3, 0xe2, 0x06, 0xf3, 0xf6, 0xcd, 0xe4, 0xd7, 0x2b, 0xe6, 0x82, 0x7c, 0xbf, 0x96, 0xdc, - 0x98, 0x5f, 0x95, 0x12, 0xaf, 0x5e, 0x82, 0xbf, 0x22, 0xa0, 0xfa, 0x6f, 0x10, 0xcc, 0x35, 0xa9, - 0x8d, 0xda, 0xb0, 0x18, 0x5c, 0xf7, 0xa8, 0x9a, 0xf2, 0xde, 0x4e, 0xcc, 0xc3, 0xda, 0x1b, 0x53, - 0x70, 0x0a, 0x43, 0xbe, 0x81, 0xe0, 0x1d, 0xc9, 0x30, 0x30, 0x36, 0x07, 0x67, 0x18, 0x18, 0x9f, - 0x6f, 0xd1, 0x4f, 0x20, 0x27, 0x86, 0x51, 0x74, 0x27, 0x55, 0x28, 0x36, 0xfd, 0x6a, 0x77, 0xcf, - 0xe4, 0x8b, 0x54, 0x8b, 0x11, 0x34, 0x43, 0x75, 0x6c, 0xe6, 0xcd, 0x50, 0x1d, 0x9f, 0x65, 0xd1, - 0x11, 0xcc, 0xfb, 0xb3, 0x22, 0xba, 0x95, 0x2a, 0x30, 0x32, 0xe6, 0x6a, 0xb7, 0xcf, 0xe0, 0x8a, - 0x94, 0xfa, 0x03, 0x5d, 0x86, 0xd2, 0x91, 0x59, 0x34, 0x43, 0xe9, 0xe8, 0x54, 0x88, 0x3a, 0x90, - 0x0f, 0x3f, 0xe0, 0xa0, 0x8c, 0xba, 0x8c, 0x7d, 0x78, 0xd2, 0xde, 0x9c, 0x86, 0x55, 0xda, 0x38, - 0x81, 0xcb, 0xa3, 0x5f, 0x63, 0xd0, 0x5b, 0x67, 0xa4, 0x31, 0x6e, 0x69, 0x7b, 0x4a, 0xee, 0xa8, - 0x23, 0x83, 0x61, 0x30, 0xa3, 0x23, 0xc7, 0xa6, 0xe0, 0x8c, 0x8e, 0x1c, 0x9f, 0x2c, 0x65, 0xc6, - 0x04, 0x6a, 0xca, 0xce, 0x58, 0x0c, 0xa5, 0x67, 0x67, 0x2c, 0x0e, 0xc2, 0xfc, 0x20, 0xc2, 0x27, - 0x2c, 0x3d, 0x88, 0xb1, 0x67, 0x33, 0x23, 0x88, 0xf1, 0x87, 0x0a, 0x3d, 0x86, 0xc2, 0xc8, 0x30, - 0x85, 0xbe, 0x9e, 0x2a, 0x39, 0x39, 0x46, 0x6a, 0x6f, 0x4d, 0xc7, 0x2c, 0x2d, 0x3d, 0x85, 0x6b, - 0xe3, 0x03, 0x0e, 0xba, 0x97, 0xaa, 0x21, 0x65, 0x8c, 0xd3, 0x76, 0xce, 0x21, 0x21, 0x0d, 0x3f, - 0x81, 0xa5, 0xf8, 0x07, 0x7f, 0x54, 0x4b, 0x55, 0x92, 0xf8, 0x93, 0x86, 0xa6, 0x4f, 0xcd, 0x2f, - 0x4d, 0x3e, 0x57, 0x60, 0x3d, 0x15, 0x61, 0xa3, 0x77, 0xb3, 0x1a, 0x20, 0x73, 0xc2, 0xd3, 0xf6, - 0x5e, 0x45, 0x54, 0x3a, 0xf5, 0x91, 0x02, 0xab, 0xc9, 0x90, 0x16, 0xed, 0xa6, 0x67, 0x35, 0x0b, - 0xfe, 0x6b, 0xdf, 0x3a, 0xb7, 0x9c, 0xf4, 0xe5, 0x17, 0x0a, 0xa8, 0x69, 0x00, 0x11, 0xbd, 0x93, - 0xaa, 0xf5, 0x0c, 0xac, 0xad, 0xbd, 0xfb, 0x0a, 0x92, 0xd2, 0xa3, 0x9f, 0x2b, 0x50, 0x4c, 0x82, - 0x74, 0xe8, 0x1b, 0x67, 0xe8, 0x4c, 0x44, 0xae, 0xda, 0x37, 0xcf, 0x29, 0x15, 0xf5, 0x6a, 0x1c, - 0xa8, 0x65, 0xf4, 0x6a, 0x22, 0xb8, 0xcc, 0xe8, 0xd5, 0x64, 0x04, 0x88, 0x3e, 0x04, 0x34, 0x89, - 0x88, 0x50, 0xfd, 0x0c, 0xff, 0x13, 0xa0, 0xa2, 0xf6, 0xf6, 0xb9, 0x64, 0xa4, 0xf9, 0x0f, 0x60, - 0x79, 0x02, 0xbe, 0xa0, 0x9d, 0xac, 0x36, 0x4f, 0x84, 0x66, 0x5a, 0xfd, 0x3c, 0x22, 0xc2, 0xf6, - 0xbe, 0xfd, 0xc9, 0x8b, 0x92, 0xf2, 0xd9, 0x8b, 0x92, 0xf2, 0xe5, 0x8b, 0x92, 0xf2, 0xcb, 0x97, - 0xa5, 0x0b, 0x9f, 0xbd, 0x2c, 0x5d, 0xf8, 0xeb, 0xcb, 0xd2, 0x05, 0x58, 0x73, 0x48, 0xa2, 0xbe, - 0x47, 0xca, 0x4f, 0x47, 0xbf, 0x07, 0x45, 0x2c, 0xdb, 0x0e, 0x19, 0x59, 0xe9, 0xcf, 0x82, 0xdf, - 0x4f, 0xf9, 0x3c, 0xdb, 0xc9, 0xf1, 0x9f, 0x28, 0xdf, 0xfe, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xa9, 0xa6, 0x30, 0xde, 0x85, 0x1e, 0x00, 0x00, + 0x25, 0xbf, 0xc8, 0x4b, 0xae, 0x0a, 0x8e, 0x49, 0xd5, 0xe8, 0x3e, 0xac, 0x19, 0x96, 0x95, 0x28, + 0x3a, 0xc7, 0x45, 0x57, 0x0c, 0xcb, 0x4a, 0x90, 0x7b, 0x04, 0x28, 0x68, 0xc4, 0x76, 0x94, 0xac, + 0xf9, 0x33, 0x92, 0xb5, 0x1c, 0xc8, 0x34, 0xc2, 0xa4, 0xdd, 0x08, 0x92, 0x96, 0xa0, 0xaf, 0x72, + 0x9b, 0xdf, 0x56, 0xe9, 0x79, 0x91, 0xf9, 0xfb, 0xa3, 0x02, 0xa5, 0x90, 0x2f, 0x7e, 0x14, 0xb2, + 0x73, 0x97, 0x7a, 0xb6, 0x2e, 0xa6, 0x9f, 0xad, 0x59, 0x76, 0xc7, 0x16, 0x6c, 0xa6, 0xfa, 0x1d, + 0x7c, 0x4a, 0x10, 0x5f, 0x48, 0x0e, 0x31, 0x6b, 0x98, 0xa6, 0xdf, 0xc5, 0x07, 0x23, 0x4f, 0x51, + 0x72, 0x54, 0x45, 0x58, 0x18, 0x1a, 0xdd, 0x01, 0x96, 0xdd, 0x2d, 0x16, 0xe8, 0x1e, 0xe4, 0xa8, + 0x63, 0xbb, 0xc1, 0x6d, 0x9b, 0xe1, 0xb4, 0xe4, 0xdb, 0xbd, 0x1a, 0x78, 0x2c, 0x37, 0xe4, 0x37, + 0x8f, 0x71, 0x57, 0xa4, 0xa3, 0xff, 0x52, 0xe0, 0x6b, 0x61, 0x30, 0x87, 0xd8, 0xb5, 0x0e, 0xb0, + 0x7b, 0xea, 0x5f, 0x8f, 0xd9, 0xce, 0xde, 0x87, 0x35, 0xd9, 0xbe, 0x16, 0x76, 0x9d, 0x68, 0x12, + 0x0b, 0x7b, 0x77, 0x45, 0x90, 0x0f, 0x38, 0xb5, 0x11, 0x10, 0xd1, 0x3d, 0x28, 0xfa, 0x8d, 0x3b, + 0x21, 0x24, 0xba, 0x16, 0x19, 0x96, 0x35, 0x2e, 0x11, 0x2b, 0xdc, 0xfc, 0x97, 0x2b, 0xdc, 0x26, + 0x6c, 0xa4, 0xc4, 0x2a, 0xb3, 0xf1, 0x7b, 0x85, 0x3f, 0xc4, 0x0d, 0xcb, 0x7a, 0x17, 0xb3, 0x06, + 0xa5, 0x98, 0xfd, 0xc8, 0xaf, 0xc2, 0x4c, 0xc6, 0xd6, 0x43, 0xb8, 0xe6, 0xfa, 0x77, 0x98, 0xaf, + 0xb5, 0xcd, 0x8b, 0x1b, 0xcc, 0xdb, 0x37, 0x93, 0x5f, 0xaf, 0x98, 0x0b, 0xf2, 0xfd, 0x5a, 0x72, + 0x63, 0x7e, 0x55, 0x4a, 0xbc, 0x7a, 0x09, 0xfe, 0x8a, 0x80, 0xea, 0xbf, 0x41, 0x30, 0xd7, 0xa4, + 0x36, 0x6a, 0xc3, 0x62, 0x70, 0xdd, 0xa3, 0x6a, 0xca, 0x7b, 0x3b, 0x31, 0x0f, 0x6b, 0x6f, 0x4c, + 0xc1, 0x29, 0x0c, 0xf9, 0x06, 0x82, 0x77, 0x24, 0xc3, 0xc0, 0xd8, 0x1c, 0x9c, 0x61, 0x60, 0x7c, + 0xbe, 0x45, 0x3f, 0x81, 0x9c, 0x18, 0x46, 0xd1, 0x9d, 0x54, 0xa1, 0xd8, 0xf4, 0xab, 0xdd, 0x3d, + 0x93, 0x2f, 0x52, 0x2d, 0x46, 0xd0, 0x0c, 0xd5, 0xb1, 0x99, 0x37, 0x43, 0x75, 0x7c, 0x96, 0x45, + 0x87, 0x30, 0xef, 0xcf, 0x8a, 0xe8, 0x56, 0xaa, 0xc0, 0xc8, 0x98, 0xab, 0xdd, 0x3e, 0x83, 0x2b, + 0x52, 0xea, 0x0f, 0x74, 0x19, 0x4a, 0x47, 0x66, 0xd1, 0x0c, 0xa5, 0xa3, 0x53, 0x21, 0xea, 0x40, + 0x3e, 0xfc, 0x80, 0x83, 0x32, 0xea, 0x32, 0xf6, 0xe1, 0x49, 0x7b, 0x73, 0x1a, 0x56, 0x69, 0xe3, + 0x18, 0x2e, 0x8f, 0x7e, 0x8d, 0x41, 0x6f, 0x9d, 0x91, 0xc6, 0xb8, 0xa5, 0xed, 0x29, 0xb9, 0xa3, + 0x8e, 0x0c, 0x86, 0xc1, 0x8c, 0x8e, 0x1c, 0x9b, 0x82, 0x33, 0x3a, 0x72, 0x7c, 0xb2, 0x94, 0x19, + 0x13, 0xa8, 0x29, 0x3b, 0x63, 0x31, 0x94, 0x9e, 0x9d, 0xb1, 0x38, 0x08, 0xf3, 0x83, 0x08, 0x9f, + 0xb0, 0xf4, 0x20, 0xc6, 0x9e, 0xcd, 0x8c, 0x20, 0xc6, 0x1f, 0x2a, 0xf4, 0x14, 0x0a, 0x23, 0xc3, + 0x14, 0xfa, 0x7a, 0xaa, 0xe4, 0xe4, 0x18, 0xa9, 0xbd, 0x35, 0x1d, 0xb3, 0xb4, 0xf4, 0x1c, 0xae, + 0x8d, 0x0f, 0x38, 0xe8, 0x5e, 0xaa, 0x86, 0x94, 0x31, 0x4e, 0xdb, 0x39, 0x87, 0x84, 0x34, 0xfc, + 0x0c, 0x96, 0xe2, 0x1f, 0xfc, 0x51, 0x2d, 0x55, 0x49, 0xe2, 0x4f, 0x1a, 0x9a, 0x3e, 0x35, 0xbf, + 0x34, 0xf9, 0x42, 0x81, 0xf5, 0x54, 0x84, 0x8d, 0xde, 0xc9, 0x6a, 0x80, 0xcc, 0x09, 0x4f, 0xdb, + 0x7d, 0x1d, 0x51, 0xe9, 0xd4, 0x87, 0x0a, 0xac, 0x26, 0x43, 0x5a, 0x74, 0x3f, 0x3d, 0xab, 0x59, + 0xf0, 0x5f, 0xfb, 0xd6, 0xb9, 0xe5, 0xa4, 0x2f, 0xbf, 0x50, 0x40, 0x4d, 0x03, 0x88, 0xe8, 0x41, + 0xaa, 0xd6, 0x33, 0xb0, 0xb6, 0xf6, 0xce, 0x6b, 0x48, 0x4a, 0x8f, 0x7e, 0xae, 0x40, 0x31, 0x09, + 0xd2, 0xa1, 0x6f, 0x9c, 0xa1, 0x33, 0x11, 0xb9, 0x6a, 0xdf, 0x3c, 0xa7, 0x54, 0xd4, 0xab, 0x71, + 0xa0, 0x96, 0xd1, 0xab, 0x89, 0xe0, 0x32, 0xa3, 0x57, 0x93, 0x11, 0x20, 0xfa, 0x00, 0xd0, 0x24, + 0x22, 0x42, 0xf5, 0x33, 0xfc, 0x4f, 0x80, 0x8a, 0xda, 0xdb, 0xe7, 0x92, 0x91, 0xe6, 0xdf, 0x87, + 0xe5, 0x09, 0xf8, 0x82, 0x76, 0xb2, 0xda, 0x3c, 0x11, 0x9a, 0x69, 0xf5, 0xf3, 0x88, 0x08, 0xdb, + 0x7b, 0xf6, 0xc7, 0x2f, 0x4b, 0xca, 0xa7, 0x2f, 0x4b, 0xca, 0x17, 0x2f, 0x4b, 0xca, 0x2f, 0x5f, + 0x95, 0x2e, 0x7c, 0xfa, 0xaa, 0x74, 0xe1, 0xaf, 0xaf, 0x4a, 0x17, 0x60, 0xcd, 0x21, 0x89, 0xfa, + 0x9e, 0x28, 0x3f, 0x1d, 0xfd, 0x1e, 0x14, 0xb1, 0x6c, 0x3b, 0x64, 0x64, 0xa5, 0x9f, 0x04, 0xbf, + 0x9f, 0xf2, 0x79, 0xb6, 0x93, 0xe3, 0x3f, 0x51, 0xbe, 0xfd, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, + 0x7c, 0xab, 0xe2, 0x00, 0x85, 0x1e, 0x00, 0x00, } func (this *MsgSupplyIncreaseProposalRequest) Equal(that interface{}) bool { diff --git a/x/metadata/client/cli/cli_test.go b/x/metadata/client/cli/cli_test.go index 500f705cdd..3936f8cc48 100644 --- a/x/metadata/client/cli/cli_test.go +++ b/x/metadata/client/cli/cli_test.go @@ -6,7 +6,7 @@ import ( "testing" "time" - "github.com/gogo/protobuf/proto" + "github.com/cosmos/gogoproto/proto" "github.com/google/uuid" "github.com/spf13/cobra" "github.com/stretchr/testify/assert" diff --git a/x/metadata/client/rest/grpc_query_test.go b/x/metadata/client/rest/grpc_query_test.go index 7c9ceabfbc..b1af709aa0 100644 --- a/x/metadata/client/rest/grpc_query_test.go +++ b/x/metadata/client/rest/grpc_query_test.go @@ -5,7 +5,7 @@ import ( "fmt" "testing" - "github.com/gogo/protobuf/proto" + "github.com/cosmos/gogoproto/proto" "github.com/google/uuid" "github.com/stretchr/testify/suite" diff --git a/x/metadata/keeper/keeper.go b/x/metadata/keeper/keeper.go index dee9a832d9..f3eef37e8d 100644 --- a/x/metadata/keeper/keeper.go +++ b/x/metadata/keeper/keeper.go @@ -3,7 +3,7 @@ package keeper import ( "net/url" - "github.com/gogo/protobuf/proto" + "github.com/cosmos/gogoproto/proto" "cosmossdk.io/log" storetypes "cosmossdk.io/store/types" diff --git a/x/metadata/keeper/record.go b/x/metadata/keeper/record.go index 1d6cc96726..1b94d92713 100644 --- a/x/metadata/keeper/record.go +++ b/x/metadata/keeper/record.go @@ -4,7 +4,7 @@ import ( "fmt" "strings" - "github.com/gogo/protobuf/proto" + "github.com/cosmos/gogoproto/proto" storetypes "cosmossdk.io/store/types" diff --git a/x/metadata/keeper/scope.go b/x/metadata/keeper/scope.go index e43fc64723..9f08ca2b9b 100644 --- a/x/metadata/keeper/scope.go +++ b/x/metadata/keeper/scope.go @@ -3,7 +3,7 @@ package keeper import ( "fmt" - "github.com/gogo/protobuf/proto" + "github.com/cosmos/gogoproto/proto" storetypes "cosmossdk.io/store/types" diff --git a/x/metadata/keeper/session.go b/x/metadata/keeper/session.go index 5ebb0c44a1..4e6180b840 100644 --- a/x/metadata/keeper/session.go +++ b/x/metadata/keeper/session.go @@ -4,7 +4,7 @@ import ( "errors" "fmt" - "github.com/gogo/protobuf/proto" + "github.com/cosmos/gogoproto/proto" storetypes "cosmossdk.io/store/types" diff --git a/x/metadata/keeper/specification.go b/x/metadata/keeper/specification.go index 92e294a730..6ffb1be10f 100644 --- a/x/metadata/keeper/specification.go +++ b/x/metadata/keeper/specification.go @@ -3,7 +3,7 @@ package keeper import ( "fmt" - "github.com/gogo/protobuf/proto" + "github.com/cosmos/gogoproto/proto" storetypes "cosmossdk.io/store/types" diff --git a/x/metadata/types/events.pb.go b/x/metadata/types/events.pb.go index 6ea460cd73..4c01f00df6 100644 --- a/x/metadata/types/events.pb.go +++ b/x/metadata/types/events.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/metadata/types/genesis.pb.go b/x/metadata/types/genesis.pb.go index c8d31427b1..d856c19529 100644 --- a/x/metadata/types/genesis.pb.go +++ b/x/metadata/types/genesis.pb.go @@ -5,8 +5,8 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/metadata/types/metadata.pb.go b/x/metadata/types/metadata.pb.go index ec92895213..3d805dff1d 100644 --- a/x/metadata/types/metadata.pb.go +++ b/x/metadata/types/metadata.pb.go @@ -5,8 +5,8 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/metadata/types/objectstore.pb.go b/x/metadata/types/objectstore.pb.go index b7e4f45dc3..5f4d474606 100644 --- a/x/metadata/types/objectstore.pb.go +++ b/x/metadata/types/objectstore.pb.go @@ -5,8 +5,8 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/metadata/types/p8e/p8e.pb.go b/x/metadata/types/p8e/p8e.pb.go index 8bb09400b7..de47bd98e3 100644 --- a/x/metadata/types/p8e/p8e.pb.go +++ b/x/metadata/types/p8e/p8e.pb.go @@ -5,7 +5,7 @@ package p8e import ( fmt "fmt" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/metadata/types/query.pb.go b/x/metadata/types/query.pb.go index accd8543c0..c5ce6c8fdb 100644 --- a/x/metadata/types/query.pb.go +++ b/x/metadata/types/query.pb.go @@ -7,9 +7,9 @@ import ( context "context" fmt "fmt" query "github.com/cosmos/cosmos-sdk/types/query" - _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" @@ -3491,206 +3491,206 @@ func init() { } var fileDescriptor_a68790bc0b96eeb9 = []byte{ - // 3169 bytes of a gzipped FileDescriptorProto + // 3173 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x3c, 0x5b, 0x68, 0x1c, 0xd7, - 0xd9, 0x3e, 0xb3, 0x96, 0x65, 0x7d, 0x92, 0x2c, 0xf9, 0xe8, 0xe2, 0xd5, 0xda, 0xd6, 0x3a, 0x13, - 0x5b, 0x96, 0x65, 0x7b, 0x37, 0x92, 0x7c, 0x49, 0x9c, 0xe4, 0xcf, 0x6f, 0x39, 0xb1, 0xab, 0xda, - 0x89, 0x9d, 0x11, 0x49, 0xa8, 0x20, 0x98, 0xf1, 0xee, 0x58, 0xd9, 0x76, 0x77, 0x67, 0x33, 0xb3, - 0xeb, 0x44, 0x08, 0xd1, 0x36, 0xb4, 0x81, 0xd2, 0x90, 0x26, 0xa4, 0x0d, 0x69, 0x4b, 0x29, 0x34, - 0x84, 0xd2, 0xd0, 0x97, 0x16, 0x42, 0x09, 0x85, 0x3e, 0xa4, 0x14, 0xd2, 0x87, 0xd2, 0x40, 0xfa, - 0xd0, 0xf6, 0x61, 0x29, 0x76, 0x0a, 0x81, 0xbe, 0xb4, 0xdb, 0x60, 0x68, 0xa1, 0x50, 0xf6, 0x5c, - 0x66, 0xcf, 0xcc, 0x9c, 0xd9, 0x9d, 0x19, 0x6b, 0x8d, 0xaa, 0x37, 0xcd, 0xce, 0x77, 0x3b, 0xdf, - 0xfd, 0x7c, 0xe7, 0x8c, 0x40, 0xad, 0x58, 0xe6, 0x0d, 0xa3, 0xac, 0x97, 0x73, 0x46, 0xb6, 0x64, - 0x54, 0xf5, 0xbc, 0x5e, 0xd5, 0xb3, 0x37, 0x66, 0xb3, 0xcf, 0xd7, 0x0c, 0x6b, 0x35, 0x53, 0xb1, - 0xcc, 0xaa, 0x89, 0xc7, 0x5b, 0x30, 0x19, 0x0e, 0x93, 0xb9, 0x31, 0x9b, 0x1a, 0x5d, 0x31, 0x57, - 0x4c, 0x02, 0x92, 0x6d, 0xfe, 0x45, 0xa1, 0x53, 0x33, 0x39, 0xd3, 0x2e, 0x99, 0x76, 0xf6, 0x9a, - 0x6e, 0x1b, 0x94, 0x4c, 0xf6, 0xc6, 0xec, 0x35, 0xa3, 0xaa, 0xcf, 0x66, 0x2b, 0xfa, 0x4a, 0xa1, - 0xac, 0x57, 0x0b, 0x66, 0x99, 0xc1, 0xee, 0x5b, 0x31, 0xcd, 0x95, 0xa2, 0x91, 0xd5, 0x2b, 0x85, - 0xac, 0x5e, 0x2e, 0x9b, 0x55, 0xf2, 0xd2, 0x66, 0x6f, 0x0f, 0x05, 0xc8, 0xe6, 0xc8, 0x40, 0xc1, - 0x82, 0x96, 0x60, 0xe7, 0xcc, 0x8a, 0xc1, 0x85, 0x0a, 0x82, 0xa9, 0x18, 0xb9, 0xc2, 0xf5, 0x42, - 0x4e, 0x14, 0x6a, 0x3a, 0x00, 0xd6, 0xbc, 0xf6, 0x45, 0x23, 0x57, 0xb5, 0xab, 0xa6, 0xc5, 0xa8, - 0xaa, 0x5f, 0x00, 0xfc, 0x64, 0x73, 0x81, 0x57, 0x74, 0x4b, 0x2f, 0xd9, 0x9a, 0xf1, 0x7c, 0xcd, - 0xb0, 0xab, 0xf8, 0x1c, 0x0c, 0x15, 0xca, 0xb9, 0x62, 0x2d, 0x6f, 0x5c, 0xb5, 0xe8, 0x4f, 0xc9, - 0x6b, 0x07, 0xd0, 0xf4, 0xce, 0x85, 0x54, 0xa3, 0x9e, 0x1e, 0x5f, 0xd5, 0x4b, 0xc5, 0x33, 0xaa, - 0x07, 0x40, 0xd5, 0x76, 0xb1, 0x5f, 0x18, 0x11, 0xf5, 0xbb, 0x08, 0x46, 0x5c, 0xb4, 0xed, 0x8a, - 0x59, 0xb6, 0x0d, 0xfc, 0x10, 0xec, 0xa8, 0x90, 0x5f, 0x92, 0xe8, 0x00, 0x9a, 0xee, 0x9f, 0x9b, - 0xcc, 0xc8, 0x8d, 0x93, 0xa1, 0x78, 0x0b, 0xdb, 0x3f, 0xac, 0xa7, 0xb7, 0x69, 0x0c, 0x07, 0x3f, - 0x0a, 0xbd, 0xa2, 0x48, 0xfd, 0x73, 0x33, 0x41, 0xe8, 0xfe, 0x75, 0x69, 0x1c, 0x55, 0xfd, 0x6d, - 0x02, 0x06, 0x96, 0x9a, 0xca, 0xe5, 0x2b, 0xce, 0xc0, 0x4e, 0xa2, 0xec, 0xab, 0x85, 0x3c, 0x11, - 0xab, 0x6f, 0x61, 0xa4, 0x51, 0x4f, 0x0f, 0xd1, 0xa5, 0xf2, 0x37, 0xaa, 0xd6, 0x4b, 0xfe, 0x5c, - 0xcc, 0xe3, 0x33, 0x30, 0x60, 0x1b, 0xb6, 0x5d, 0x30, 0xcb, 0x57, 0xf5, 0x7c, 0xde, 0x4a, 0x2a, - 0x04, 0x67, 0x4f, 0xa3, 0x9e, 0x1e, 0x61, 0x38, 0xc2, 0x5b, 0x55, 0xeb, 0x67, 0x8f, 0x67, 0xf3, - 0x79, 0x0b, 0x9f, 0x86, 0x7e, 0xcb, 0xc8, 0x99, 0x56, 0x9e, 0xa2, 0x26, 0x08, 0xea, 0x78, 0xa3, - 0x9e, 0xc6, 0x14, 0x55, 0x78, 0xa9, 0x6a, 0x40, 0x9f, 0x08, 0xe2, 0x79, 0x18, 0xe6, 0x5a, 0x67, - 0xf4, 0xec, 0x24, 0x10, 0xbb, 0xec, 0x6d, 0xd4, 0xd3, 0x7b, 0xdc, 0x76, 0xe1, 0x10, 0xaa, 0xc6, - 0x6d, 0xb9, 0xc4, 0x7e, 0x71, 0x9b, 0xb7, 0x49, 0xdd, 0x4e, 0xf6, 0x07, 0x9b, 0x97, 0x00, 0x88, - 0xe6, 0x25, 0x3f, 0xe0, 0x05, 0x18, 0x32, 0x5e, 0xa4, 0x30, 0x85, 0xfc, 0xd5, 0x42, 0xf9, 0xba, - 0x99, 0x1c, 0xf0, 0x12, 0xf1, 0x00, 0xa8, 0xda, 0x20, 0xfb, 0x65, 0x31, 0xbf, 0x58, 0xbe, 0x6e, - 0x6e, 0x8c, 0x9f, 0xfd, 0x4e, 0x81, 0x41, 0x66, 0x4b, 0xe6, 0x61, 0x67, 0xa0, 0x87, 0xd8, 0x89, - 0x39, 0xd8, 0xc1, 0x20, 0x0f, 0x21, 0x58, 0xcf, 0x58, 0x7a, 0xa5, 0x62, 0x58, 0x1a, 0x45, 0xc1, - 0x3a, 0xec, 0x74, 0x74, 0xab, 0x1c, 0x48, 0x4c, 0xf7, 0xcf, 0x4d, 0x05, 0xa2, 0x53, 0x38, 0x46, - 0x60, 0x61, 0x7f, 0xa3, 0x9e, 0x9e, 0x70, 0x19, 0xdf, 0x3e, 0x66, 0x96, 0x0a, 0x55, 0xa3, 0x54, - 0xa9, 0xae, 0xaa, 0x9a, 0x43, 0x16, 0x3f, 0xdb, 0x74, 0x61, 0xaa, 0xf6, 0x04, 0xe1, 0x70, 0x28, - 0x88, 0x03, 0xd5, 0x35, 0x67, 0xb0, 0xaf, 0x51, 0x4f, 0x27, 0x45, 0x17, 0x71, 0xd1, 0xe7, 0x34, - 0xf1, 0xff, 0x79, 0x23, 0xa4, 0xfd, 0xfa, 0x7d, 0xb1, 0xf1, 0x7d, 0x85, 0xc5, 0x06, 0xe3, 0x8b, - 0xe7, 0xdd, 0xea, 0xdc, 0xdf, 0x9e, 0x9c, 0xa3, 0xc7, 0x41, 0x1e, 0x36, 0xd4, 0x39, 0x14, 0x82, - 0x7c, 0x6f, 0x5b, 0x64, 0xea, 0x16, 0x0b, 0xc9, 0x46, 0x3d, 0x3d, 0xea, 0x0e, 0x3d, 0xe6, 0x3f, - 0xfd, 0x76, 0x0b, 0x0c, 0xdb, 0x80, 0xe9, 0xeb, 0x66, 0x0a, 0x74, 0xf8, 0x24, 0x08, 0x9f, 0xc3, - 0x6d, 0xf9, 0x2c, 0x55, 0x8c, 0x1c, 0xe3, 0x25, 0x5a, 0xcd, 0x47, 0x4c, 0xd5, 0x86, 0x6c, 0x37, - 0xbc, 0x7a, 0x0b, 0xc1, 0x30, 0xa1, 0x61, 0x9f, 0x2d, 0x16, 0x79, 0xf6, 0xd8, 0x2c, 0xb1, 0x80, - 0xcf, 0x03, 0xb4, 0x2a, 0x54, 0x32, 0x47, 0x54, 0x31, 0x95, 0xa1, 0xe5, 0x2c, 0xd3, 0x2c, 0x67, - 0x19, 0x5a, 0x15, 0x59, 0x39, 0xcb, 0x5c, 0xd1, 0x57, 0x1c, 0x07, 0x10, 0x30, 0xd5, 0x3a, 0x82, - 0xdd, 0xc2, 0x2a, 0x5b, 0x99, 0x9b, 0xa8, 0xa3, 0x99, 0xb9, 0x13, 0xa1, 0x03, 0x8b, 0xe1, 0xe0, - 0x05, 0xaf, 0x5f, 0x4e, 0xb7, 0x45, 0x17, 0xf4, 0xeb, 0xf8, 0x26, 0xbe, 0x20, 0x59, 0xdf, 0xe1, - 0x8e, 0xeb, 0xa3, 0xe2, 0xbb, 0x16, 0x78, 0x3b, 0x01, 0x43, 0x3c, 0x1f, 0xc6, 0xad, 0x01, 0x27, - 0x00, 0x78, 0x96, 0x2f, 0xe4, 0x59, 0x05, 0x18, 0x6b, 0xd4, 0xd3, 0xbb, 0xdd, 0x15, 0xa0, 0x89, - 0xd3, 0xc7, 0x1e, 0x16, 0xf3, 0xf1, 0xb3, 0x7f, 0x0b, 0xb1, 0xac, 0x97, 0x8c, 0xe4, 0xf6, 0x00, - 0xc4, 0xe6, 0x4b, 0x07, 0xf1, 0x09, 0xbd, 0x64, 0xe0, 0x87, 0x61, 0xd0, 0x29, 0x0a, 0x24, 0x8e, - 0x69, 0xcd, 0x10, 0xa2, 0xcc, 0xf5, 0x5a, 0xd5, 0x06, 0x78, 0xc1, 0x20, 0x91, 0xbc, 0xb5, 0xaa, - 0xc5, 0x47, 0x0a, 0x0c, 0xb7, 0x0c, 0xcf, 0x1c, 0xfb, 0xe9, 0x18, 0x05, 0x43, 0xe4, 0x4a, 0x90, - 0xc5, 0x64, 0xcc, 0x92, 0xe0, 0x42, 0xdc, 0x62, 0x72, 0xf7, 0xaa, 0xc5, 0x59, 0x6f, 0x54, 0x1e, - 0xee, 0x20, 0xa1, 0xbf, 0x99, 0xfa, 0x85, 0x02, 0xbb, 0xdc, 0xe2, 0xe3, 0x07, 0xa0, 0x97, 0x2d, - 0x80, 0xa9, 0x34, 0xdd, 0x81, 0xaa, 0xc6, 0xe1, 0x71, 0x01, 0x86, 0x5a, 0x91, 0x23, 0x96, 0x8e, - 0x43, 0x1d, 0x48, 0xb0, 0x84, 0x2e, 0x9a, 0xc5, 0x4d, 0x47, 0xd5, 0x06, 0x6d, 0x11, 0x14, 0x7f, - 0x19, 0xc6, 0x72, 0x66, 0xb9, 0x6a, 0xe9, 0xb9, 0xaa, 0xac, 0x86, 0x04, 0x76, 0x96, 0xe7, 0x18, - 0x92, 0x50, 0x46, 0x0e, 0x34, 0xea, 0xe9, 0x7d, 0x94, 0xab, 0x94, 0xa4, 0xaa, 0xe1, 0x9c, 0x0f, - 0x4b, 0xfd, 0x2b, 0x02, 0xcc, 0xd5, 0xba, 0x95, 0xcb, 0xc9, 0xa7, 0x08, 0x46, 0x5c, 0xeb, 0x64, - 0x71, 0x27, 0xc6, 0x07, 0x8a, 0x19, 0x1f, 0xe1, 0x37, 0x04, 0x7e, 0x4d, 0x77, 0xa1, 0xb0, 0x7c, - 0x9c, 0x80, 0x5d, 0x2c, 0xe9, 0x71, 0x2d, 0x7a, 0x32, 0x3e, 0x0a, 0x9d, 0xf1, 0xc5, 0x82, 0xa4, - 0x44, 0x2e, 0x48, 0x89, 0x90, 0x05, 0x09, 0xc3, 0xf6, 0x56, 0x41, 0xd1, 0xc8, 0xdf, 0x77, 0x5a, - 0x32, 0x64, 0x1b, 0x95, 0xfe, 0x18, 0x1b, 0x95, 0x4d, 0x53, 0x35, 0x7e, 0xaf, 0xc0, 0x90, 0x63, - 0xd5, 0x2e, 0x17, 0x8d, 0xbb, 0xb0, 0x03, 0x79, 0x24, 0x5e, 0x4d, 0x69, 0x55, 0x8d, 0xff, 0xf7, - 0x06, 0xdd, 0x54, 0x7b, 0x02, 0xfe, 0xa2, 0xf1, 0x63, 0x05, 0x06, 0x5d, 0xc4, 0xf1, 0x29, 0xd8, - 0x41, 0xc9, 0x77, 0x9a, 0x0b, 0x50, 0x34, 0x8d, 0x41, 0x63, 0x03, 0x76, 0xb1, 0x08, 0x72, 0xd7, - 0x8b, 0x83, 0xed, 0xf1, 0x59, 0xe2, 0x9e, 0x68, 0xd4, 0xd3, 0x63, 0xae, 0x38, 0x74, 0x1c, 0x69, - 0xc0, 0x12, 0x00, 0xf1, 0x0b, 0x30, 0xc2, 0x00, 0x24, 0xa5, 0x62, 0xba, 0x3d, 0x2f, 0xa1, 0x50, - 0x4c, 0x36, 0xea, 0xe9, 0x94, 0x8b, 0x9f, 0xbb, 0x4c, 0x0c, 0x5b, 0x1e, 0x0c, 0xf5, 0x13, 0x04, - 0xbb, 0x99, 0x16, 0xb7, 0x72, 0x8d, 0xb8, 0x85, 0x00, 0x8b, 0xcb, 0x64, 0x51, 0x26, 0xb8, 0x2a, - 0x8a, 0xe5, 0xaa, 0xe7, 0xbc, 0xae, 0x7a, 0xa4, 0x83, 0xab, 0x76, 0xb5, 0x3c, 0xbc, 0x8f, 0x60, - 0xf8, 0xf2, 0x0b, 0x65, 0xc3, 0xb2, 0x9f, 0x2b, 0x54, 0xb8, 0x0a, 0x93, 0xd0, 0xdb, 0x4c, 0xfe, - 0x86, 0x4d, 0x47, 0x62, 0x7d, 0x1a, 0x7f, 0xdc, 0x5c, 0x16, 0xfa, 0x13, 0x82, 0xdd, 0x82, 0xec, - 0xcc, 0x40, 0xa7, 0x81, 0x6e, 0xca, 0xaf, 0xd6, 0x6a, 0x05, 0x66, 0x24, 0x57, 0x75, 0x13, 0x5e, - 0xaa, 0x1a, 0x90, 0xa7, 0xa7, 0x9a, 0x0f, 0x11, 0xf6, 0x83, 0x5e, 0x85, 0x75, 0xc1, 0x2e, 0xbf, - 0x42, 0x30, 0xf6, 0xb4, 0x5e, 0xac, 0x19, 0xff, 0xab, 0xc6, 0xb9, 0x85, 0x60, 0xdc, 0xbb, 0x80, - 0x3b, 0xb5, 0xd0, 0x05, 0xaf, 0x85, 0x8e, 0x07, 0x59, 0x48, 0xaa, 0xba, 0x2e, 0x98, 0xe9, 0xad, - 0x04, 0x4c, 0x38, 0x13, 0x1c, 0x67, 0xea, 0xdd, 0xd2, 0xe5, 0xb0, 0x6b, 0x1a, 0xde, 0xda, 0xc8, - 0x0b, 0x6d, 0x87, 0x17, 0x42, 0xd5, 0x86, 0x5c, 0x3f, 0x2d, 0xe6, 0xf1, 0x33, 0x30, 0xce, 0xed, - 0xe6, 0x6a, 0xe6, 0xf9, 0xb4, 0xf5, 0x9e, 0x46, 0x3d, 0xbd, 0xdf, 0x6d, 0x5f, 0x37, 0x9c, 0xaa, - 0x8d, 0xb2, 0x17, 0xe2, 0x56, 0xc1, 0xc6, 0x4f, 0xc2, 0xa8, 0x7b, 0xa7, 0xcc, 0xc8, 0xd2, 0xde, - 0x28, 0xdd, 0xa8, 0xa7, 0xf7, 0xca, 0xf6, 0xd3, 0x9c, 0x28, 0x76, 0x6d, 0xaa, 0x29, 0xc9, 0x4d, - 0xd3, 0x22, 0xfd, 0x2d, 0x01, 0x29, 0x99, 0x69, 0x98, 0x13, 0xbe, 0x84, 0x60, 0xa4, 0x35, 0x60, - 0x73, 0xde, 0xb3, 0x5a, 0x3f, 0xdb, 0x71, 0x5c, 0xe7, 0x60, 0xf0, 0x66, 0x47, 0x28, 0xa4, 0x12, - 0xba, 0xaa, 0x86, 0x6d, 0x1f, 0x2a, 0xfe, 0x0a, 0x82, 0x5d, 0x1e, 0x8b, 0xd2, 0x0e, 0xeb, 0x44, - 0x98, 0xad, 0x9e, 0x4f, 0x84, 0x7b, 0x1b, 0xf5, 0x74, 0x5a, 0xb2, 0xe9, 0x73, 0x75, 0x5d, 0x83, - 0x39, 0x97, 0x0b, 0xbc, 0x08, 0x03, 0x2e, 0xd3, 0xd3, 0xfe, 0x6b, 0xae, 0x73, 0xff, 0xe0, 0xe3, - 0x2e, 0x78, 0xa1, 0x48, 0x51, 0xe4, 0xdd, 0x6f, 0x09, 0x9e, 0x72, 0xd1, 0x1b, 0xcd, 0x11, 0x94, - 0xee, 0x6b, 0xdf, 0x6e, 0x22, 0x59, 0x20, 0xf2, 0x56, 0xee, 0x0a, 0x0c, 0xca, 0xac, 0x3c, 0x13, - 0x81, 0xa1, 0x9b, 0x40, 0xc0, 0xac, 0x57, 0xe9, 0xee, 0xac, 0xf7, 0xef, 0x08, 0xf6, 0xfb, 0x45, - 0xdb, 0xd2, 0x5d, 0xd8, 0x07, 0x0a, 0x4c, 0x06, 0x2d, 0x99, 0x45, 0xf2, 0xd7, 0x11, 0x8c, 0x4a, - 0x22, 0x8e, 0xf7, 0x67, 0x31, 0x42, 0x59, 0x48, 0x7c, 0x32, 0xc2, 0xaa, 0x36, 0xe2, 0x8f, 0x65, - 0x1b, 0x5f, 0xf6, 0xfa, 0xf3, 0xc9, 0xf0, 0x9c, 0xbb, 0xdb, 0xe4, 0x7d, 0xa0, 0xc0, 0x3e, 0x69, + 0xd9, 0x3e, 0xb3, 0x96, 0x65, 0x7d, 0x92, 0x2c, 0xf9, 0xe8, 0xe2, 0xd5, 0xda, 0xde, 0x71, 0x26, + 0xb6, 0x2c, 0xcb, 0xf6, 0x6e, 0x24, 0xf9, 0x92, 0x38, 0xc9, 0x9f, 0xdf, 0xeb, 0xc4, 0xae, 0x6a, + 0x27, 0x76, 0x46, 0x24, 0xa1, 0x82, 0x60, 0xc6, 0xbb, 0x63, 0x65, 0xdb, 0xdd, 0x9d, 0xcd, 0xcc, + 0xae, 0x13, 0x21, 0x44, 0xdb, 0xd0, 0x06, 0x4a, 0x43, 0x9a, 0x90, 0x36, 0xa4, 0x2d, 0xa5, 0xd0, + 0x10, 0x4a, 0x43, 0x5f, 0x5a, 0x08, 0x25, 0x14, 0xfa, 0x90, 0x52, 0x48, 0x1f, 0x4a, 0x03, 0xe9, + 0x43, 0xdb, 0x87, 0xa5, 0xd8, 0x29, 0x04, 0xfa, 0xd2, 0x6e, 0x83, 0xa1, 0x85, 0x42, 0xd9, 0x73, + 0x99, 0x3d, 0x73, 0xdb, 0x9d, 0x19, 0x6b, 0x8d, 0xaa, 0x37, 0xcd, 0xce, 0x77, 0x3b, 0xdf, 0xf5, + 0x9c, 0xef, 0x7c, 0x23, 0x50, 0xaa, 0xa6, 0x71, 0x43, 0xaf, 0x68, 0x95, 0xbc, 0x9e, 0x2d, 0xeb, + 0x35, 0xad, 0xa0, 0xd5, 0xb4, 0xec, 0x8d, 0xb9, 0xec, 0xf3, 0x75, 0xdd, 0x5c, 0xcd, 0x54, 0x4d, + 0xa3, 0x66, 0xe0, 0xc9, 0x36, 0x4c, 0x86, 0xc3, 0x64, 0x6e, 0xcc, 0xa5, 0xc6, 0x57, 0x8c, 0x15, + 0x83, 0x80, 0x64, 0x5b, 0x7f, 0x51, 0xe8, 0xd4, 0x6c, 0xde, 0xb0, 0xca, 0x86, 0x95, 0xbd, 0xa6, + 0x59, 0x3a, 0x25, 0x93, 0xbd, 0x31, 0x77, 0x4d, 0xaf, 0x69, 0x73, 0xd9, 0xaa, 0xb6, 0x52, 0xac, + 0x68, 0xb5, 0xa2, 0x51, 0x61, 0xb0, 0xfb, 0x56, 0x0c, 0x63, 0xa5, 0xa4, 0x67, 0xb5, 0x6a, 0x31, + 0xab, 0x55, 0x2a, 0x46, 0x8d, 0xbc, 0xb4, 0xd8, 0xdb, 0x43, 0x01, 0xb2, 0xd9, 0x32, 0x50, 0xb0, + 0xa0, 0x25, 0x58, 0x79, 0xa3, 0xaa, 0x73, 0xa1, 0x82, 0x60, 0xaa, 0x7a, 0xbe, 0x78, 0xbd, 0x98, + 0x17, 0x85, 0x9a, 0x09, 0x80, 0x35, 0xae, 0x7d, 0x51, 0xcf, 0xd7, 0xac, 0x9a, 0x61, 0x32, 0xaa, + 0xca, 0x17, 0x00, 0x3f, 0xd9, 0x5a, 0xe0, 0x15, 0xcd, 0xd4, 0xca, 0x96, 0xaa, 0x3f, 0x5f, 0xd7, + 0xad, 0x1a, 0x3e, 0x07, 0x23, 0xc5, 0x4a, 0xbe, 0x54, 0x2f, 0xe8, 0x57, 0x4d, 0xfa, 0x53, 0xf2, + 0xda, 0x01, 0x34, 0xb3, 0x33, 0x97, 0x6a, 0x36, 0xe4, 0xc9, 0x55, 0xad, 0x5c, 0x3a, 0xa3, 0xb8, + 0x00, 0x14, 0x75, 0x17, 0xfb, 0x85, 0x11, 0x51, 0xbe, 0x8b, 0x60, 0xcc, 0x41, 0xdb, 0xaa, 0x1a, + 0x15, 0x4b, 0xc7, 0x0f, 0xc1, 0x8e, 0x2a, 0xf9, 0x25, 0x89, 0x0e, 0xa0, 0x99, 0xc1, 0xf9, 0x74, + 0xc6, 0xdf, 0x38, 0x19, 0x8a, 0x97, 0xdb, 0xfe, 0x61, 0x43, 0xde, 0xa6, 0x32, 0x1c, 0xfc, 0x28, + 0xf4, 0x8b, 0x22, 0x0d, 0xce, 0xcf, 0x06, 0xa1, 0x7b, 0xd7, 0xa5, 0x72, 0x54, 0xe5, 0xb7, 0x09, + 0x18, 0x5a, 0x6a, 0x29, 0x97, 0xaf, 0x38, 0x03, 0x3b, 0x89, 0xb2, 0xaf, 0x16, 0x0b, 0x44, 0xac, + 0x81, 0xdc, 0x58, 0xb3, 0x21, 0x8f, 0xd0, 0xa5, 0xf2, 0x37, 0x8a, 0xda, 0x4f, 0xfe, 0x5c, 0x2c, + 0xe0, 0x33, 0x30, 0x64, 0xe9, 0x96, 0x55, 0x34, 0x2a, 0x57, 0xb5, 0x42, 0xc1, 0x4c, 0x4a, 0x04, + 0x67, 0x4f, 0xb3, 0x21, 0x8f, 0x31, 0x1c, 0xe1, 0xad, 0xa2, 0x0e, 0xb2, 0xc7, 0xb3, 0x85, 0x82, + 0x89, 0x4f, 0xc3, 0xa0, 0xa9, 0xe7, 0x0d, 0xb3, 0x40, 0x51, 0x13, 0x04, 0x75, 0xb2, 0xd9, 0x90, + 0x31, 0x45, 0x15, 0x5e, 0x2a, 0x2a, 0xd0, 0x27, 0x82, 0x78, 0x1e, 0x46, 0xb9, 0xd6, 0x19, 0x3d, + 0x2b, 0x09, 0xc4, 0x2e, 0x7b, 0x9b, 0x0d, 0x79, 0x8f, 0xd3, 0x2e, 0x1c, 0x42, 0x51, 0xb9, 0x2d, + 0x97, 0xd8, 0x2f, 0x4e, 0xf3, 0xb6, 0xa8, 0x5b, 0xc9, 0xc1, 0x60, 0xf3, 0x12, 0x00, 0xd1, 0xbc, + 0xe4, 0x07, 0x9c, 0x83, 0x11, 0xfd, 0x45, 0x0a, 0x53, 0x2c, 0x5c, 0x2d, 0x56, 0xae, 0x1b, 0xc9, + 0x21, 0x37, 0x11, 0x17, 0x80, 0xa2, 0x0e, 0xb3, 0x5f, 0x16, 0x0b, 0x8b, 0x95, 0xeb, 0xc6, 0xc6, + 0xf8, 0xd9, 0xef, 0x24, 0x18, 0x66, 0xb6, 0x64, 0x1e, 0x76, 0x06, 0xfa, 0x88, 0x9d, 0x98, 0x83, + 0x1d, 0x0c, 0xf2, 0x10, 0x82, 0xf5, 0x8c, 0xa9, 0x55, 0xab, 0xba, 0xa9, 0x52, 0x14, 0xac, 0xc1, + 0x4e, 0x5b, 0xb7, 0xd2, 0x81, 0xc4, 0xcc, 0xe0, 0xfc, 0x74, 0x20, 0x3a, 0x85, 0x63, 0x04, 0x72, + 0xfb, 0x9b, 0x0d, 0x79, 0xca, 0x61, 0x7c, 0xeb, 0x98, 0x51, 0x2e, 0xd6, 0xf4, 0x72, 0xb5, 0xb6, + 0xaa, 0xa8, 0x36, 0x59, 0xfc, 0x6c, 0xcb, 0x85, 0xa9, 0xda, 0x13, 0x84, 0xc3, 0xa1, 0x20, 0x0e, + 0x54, 0xd7, 0x9c, 0xc1, 0xbe, 0x66, 0x43, 0x4e, 0x8a, 0x2e, 0xe2, 0xa0, 0xcf, 0x69, 0xe2, 0xff, + 0x73, 0x47, 0x48, 0xe7, 0xf5, 0x7b, 0x62, 0xe3, 0xfb, 0x12, 0x8b, 0x0d, 0xc6, 0x17, 0x2f, 0x38, + 0xd5, 0xb9, 0xbf, 0x33, 0x39, 0x5b, 0x8f, 0xc3, 0x3c, 0x6c, 0xa8, 0x73, 0x48, 0x04, 0xf9, 0xde, + 0x8e, 0xc8, 0xd4, 0x2d, 0x72, 0xc9, 0x66, 0x43, 0x1e, 0x77, 0x86, 0x1e, 0xf3, 0x9f, 0x41, 0xab, + 0x0d, 0x86, 0x2d, 0xc0, 0xf4, 0x75, 0x2b, 0x05, 0xda, 0x7c, 0x12, 0x84, 0xcf, 0xe1, 0x8e, 0x7c, + 0x96, 0xaa, 0x7a, 0x9e, 0xf1, 0x12, 0xad, 0xe6, 0x21, 0xa6, 0xa8, 0x23, 0x96, 0x13, 0x5e, 0xb9, + 0x85, 0x60, 0x94, 0xd0, 0xb0, 0xce, 0x96, 0x4a, 0x3c, 0x7b, 0x6c, 0x96, 0x58, 0xc0, 0xe7, 0x01, + 0xda, 0x15, 0x2a, 0x99, 0x27, 0xaa, 0x98, 0xce, 0xd0, 0x72, 0x96, 0x69, 0x95, 0xb3, 0x0c, 0xad, + 0x8a, 0xac, 0x9c, 0x65, 0xae, 0x68, 0x2b, 0xb6, 0x03, 0x08, 0x98, 0x4a, 0x03, 0xc1, 0x6e, 0x61, + 0x95, 0xed, 0xcc, 0x4d, 0xd4, 0xd1, 0xca, 0xdc, 0x89, 0xd0, 0x81, 0xc5, 0x70, 0x70, 0xce, 0xed, + 0x97, 0x33, 0x1d, 0xd1, 0x05, 0xfd, 0xda, 0xbe, 0x89, 0x2f, 0xf8, 0xac, 0xef, 0x70, 0xd7, 0xf5, + 0x51, 0xf1, 0x1d, 0x0b, 0xbc, 0x9d, 0x80, 0x11, 0x9e, 0x0f, 0xe3, 0xd6, 0x80, 0x13, 0x00, 0x3c, + 0xcb, 0x17, 0x0b, 0xac, 0x02, 0x4c, 0x34, 0x1b, 0xf2, 0x6e, 0x67, 0x05, 0x68, 0xe1, 0x0c, 0xb0, + 0x87, 0xc5, 0x42, 0xfc, 0xec, 0xdf, 0x46, 0xac, 0x68, 0x65, 0x3d, 0xb9, 0x3d, 0x00, 0xb1, 0xf5, + 0xd2, 0x46, 0x7c, 0x42, 0x2b, 0xeb, 0xf8, 0x61, 0x18, 0xb6, 0x8b, 0x02, 0x89, 0x63, 0x5a, 0x33, + 0x84, 0x28, 0x73, 0xbc, 0x56, 0xd4, 0x21, 0x5e, 0x30, 0x48, 0x24, 0x6f, 0xad, 0x6a, 0xf1, 0x91, + 0x04, 0xa3, 0x6d, 0xc3, 0x33, 0xc7, 0x7e, 0x3a, 0x46, 0xc1, 0x10, 0xb9, 0x12, 0x64, 0x31, 0x19, + 0xb3, 0x24, 0x98, 0x8b, 0x5b, 0x4c, 0xee, 0x5e, 0xb5, 0x38, 0xeb, 0x8e, 0xca, 0xc3, 0x5d, 0x24, + 0xf4, 0x6e, 0xa6, 0x7e, 0x21, 0xc1, 0x2e, 0xa7, 0xf8, 0xf8, 0x01, 0xe8, 0x67, 0x0b, 0x60, 0x2a, + 0x95, 0xbb, 0x50, 0x55, 0x39, 0x3c, 0x2e, 0xc2, 0x48, 0x3b, 0x72, 0xc4, 0xd2, 0x71, 0xa8, 0x0b, + 0x09, 0x96, 0xd0, 0x45, 0xb3, 0x38, 0xe9, 0x28, 0xea, 0xb0, 0x25, 0x82, 0xe2, 0x2f, 0xc3, 0x44, + 0xde, 0xa8, 0xd4, 0x4c, 0x2d, 0x5f, 0xf3, 0xab, 0x21, 0x81, 0x3b, 0xcb, 0x73, 0x0c, 0x49, 0x28, + 0x23, 0x07, 0x9a, 0x0d, 0x79, 0x1f, 0xe5, 0xea, 0x4b, 0x52, 0x51, 0x71, 0xde, 0x83, 0xa5, 0xfc, + 0x15, 0x01, 0xe6, 0x6a, 0xdd, 0xca, 0xe5, 0xe4, 0x53, 0x04, 0x63, 0x8e, 0x75, 0xb2, 0xb8, 0x13, + 0xe3, 0x03, 0xc5, 0x8c, 0x8f, 0xf0, 0x07, 0x02, 0xaf, 0xa6, 0x7b, 0x50, 0x58, 0x3e, 0x4e, 0xc0, + 0x2e, 0x96, 0xf4, 0xb8, 0x16, 0x5d, 0x19, 0x1f, 0x85, 0xce, 0xf8, 0x62, 0x41, 0x92, 0x22, 0x17, + 0xa4, 0x44, 0xc8, 0x82, 0x84, 0x61, 0x7b, 0xbb, 0xa0, 0xa8, 0xe4, 0xef, 0x3b, 0x2d, 0x19, 0x7e, + 0x07, 0x95, 0xc1, 0x18, 0x07, 0x95, 0x4d, 0x53, 0x35, 0x7e, 0x2f, 0xc1, 0x88, 0x6d, 0xd5, 0x1e, + 0x17, 0x8d, 0xbb, 0x70, 0x02, 0x79, 0x24, 0x5e, 0x4d, 0x69, 0x57, 0x8d, 0xff, 0x77, 0x07, 0xdd, + 0x74, 0x67, 0x02, 0xde, 0xa2, 0xf1, 0x63, 0x09, 0x86, 0x1d, 0xc4, 0xf1, 0x29, 0xd8, 0x41, 0xc9, + 0x77, 0xeb, 0x0b, 0x50, 0x34, 0x95, 0x41, 0x63, 0x1d, 0x76, 0xb1, 0x08, 0x72, 0xd6, 0x8b, 0x83, + 0x9d, 0xf1, 0x59, 0xe2, 0x9e, 0x6a, 0x36, 0xe4, 0x09, 0x47, 0x1c, 0xda, 0x8e, 0x34, 0x64, 0x0a, + 0x80, 0xf8, 0x05, 0x18, 0x63, 0x00, 0x3e, 0xa5, 0x62, 0xa6, 0x33, 0x2f, 0xa1, 0x50, 0xa4, 0x9b, + 0x0d, 0x39, 0xe5, 0xe0, 0xe7, 0x2c, 0x13, 0xa3, 0xa6, 0x0b, 0x43, 0xf9, 0x04, 0xc1, 0x6e, 0xa6, + 0xc5, 0xad, 0x5c, 0x23, 0x6e, 0x21, 0xc0, 0xe2, 0x32, 0x59, 0x94, 0x09, 0xae, 0x8a, 0x62, 0xb9, + 0xea, 0x39, 0xb7, 0xab, 0x1e, 0xe9, 0xe2, 0xaa, 0x3d, 0x2d, 0x0f, 0xef, 0x23, 0x18, 0xbd, 0xfc, + 0x42, 0x45, 0x37, 0xad, 0xe7, 0x8a, 0x55, 0xae, 0xc2, 0x24, 0xf4, 0xb7, 0x92, 0xbf, 0x6e, 0xd1, + 0x96, 0xd8, 0x80, 0xca, 0x1f, 0x37, 0x97, 0x85, 0xfe, 0x84, 0x60, 0xb7, 0x20, 0x3b, 0x33, 0xd0, + 0x69, 0xa0, 0x87, 0xf2, 0xab, 0xf5, 0x7a, 0x91, 0x19, 0xc9, 0x51, 0xdd, 0x84, 0x97, 0x8a, 0x0a, + 0xe4, 0xe9, 0xa9, 0xd6, 0x43, 0x84, 0xf3, 0xa0, 0x5b, 0x61, 0x3d, 0xb0, 0xcb, 0xaf, 0x10, 0x4c, + 0x3c, 0xad, 0x95, 0xea, 0xfa, 0xff, 0xaa, 0x71, 0x6e, 0x21, 0x98, 0x74, 0x2f, 0xe0, 0x4e, 0x2d, + 0x74, 0xc1, 0x6d, 0xa1, 0xe3, 0x41, 0x16, 0xf2, 0x55, 0x5d, 0x0f, 0xcc, 0xf4, 0x56, 0x02, 0xa6, + 0xec, 0x0e, 0x8e, 0xdd, 0xf5, 0x6e, 0xeb, 0x72, 0xd4, 0xd1, 0x0d, 0x6f, 0x1f, 0xe4, 0x85, 0x6d, + 0x87, 0x1b, 0x42, 0x51, 0x47, 0x1c, 0x3f, 0x2d, 0x16, 0xf0, 0x33, 0x30, 0xc9, 0xed, 0xe6, 0xd8, + 0xcc, 0xf3, 0x6e, 0xeb, 0x3d, 0xcd, 0x86, 0xbc, 0xdf, 0x69, 0x5f, 0x27, 0x9c, 0xa2, 0x8e, 0xb3, + 0x17, 0xe2, 0x51, 0xc1, 0xc2, 0x4f, 0xc2, 0xb8, 0xf3, 0xa4, 0xcc, 0xc8, 0xd2, 0xbd, 0x91, 0xdc, + 0x6c, 0xc8, 0x7b, 0xfd, 0xce, 0xd3, 0x9c, 0x28, 0x76, 0x1c, 0xaa, 0x29, 0xc9, 0x4d, 0xb3, 0x45, + 0xfa, 0x5b, 0x02, 0x52, 0x7e, 0xa6, 0x61, 0x4e, 0xf8, 0x12, 0x82, 0xb1, 0x76, 0x83, 0xcd, 0x7e, + 0xcf, 0x6a, 0xfd, 0x5c, 0xd7, 0x76, 0x9d, 0x8d, 0xc1, 0x37, 0x3b, 0x42, 0x21, 0xf5, 0xa1, 0xab, + 0xa8, 0xd8, 0xf2, 0xa0, 0xe2, 0xaf, 0x20, 0xd8, 0xe5, 0xb2, 0x28, 0xdd, 0x61, 0x9d, 0x08, 0x73, + 0xd4, 0xf3, 0x88, 0x70, 0x6f, 0xb3, 0x21, 0xcb, 0x3e, 0x87, 0x3e, 0xc7, 0xae, 0x6b, 0x38, 0xef, + 0x70, 0x81, 0x17, 0x61, 0xc8, 0x61, 0x7a, 0xba, 0xff, 0x9a, 0xef, 0xbe, 0x7f, 0xf0, 0x70, 0x17, + 0xbc, 0x50, 0xa4, 0x28, 0xf2, 0x1e, 0x34, 0x05, 0x4f, 0xb9, 0xe8, 0x8e, 0xe6, 0x08, 0x4a, 0xf7, + 0x6c, 0xdf, 0x6e, 0x22, 0xbf, 0x40, 0xe4, 0x5b, 0xb9, 0x2b, 0x30, 0xec, 0x67, 0xe5, 0xd9, 0x08, + 0x0c, 0x9d, 0x04, 0x02, 0x7a, 0xbd, 0x52, 0x6f, 0x7b, 0xbd, 0x7f, 0x47, 0xb0, 0xdf, 0x2b, 0xda, + 0x96, 0xde, 0x85, 0x7d, 0x20, 0x41, 0x3a, 0x68, 0xc9, 0x2c, 0x92, 0xbf, 0x8e, 0x60, 0xdc, 0x27, + 0xe2, 0xf8, 0xfe, 0x2c, 0x46, 0x28, 0x0b, 0x89, 0xcf, 0x8f, 0xb0, 0xa2, 0x8e, 0x79, 0x63, 0xd9, + 0xc2, 0x97, 0xdd, 0xfe, 0x7c, 0x32, 0x3c, 0xe7, 0xde, 0x6e, 0xf2, 0x3e, 0x90, 0x60, 0x9f, 0x6f, 0xe2, 0xd8, 0xe8, 0x42, 0x15, 0x54, 0x4f, 0x60, 0x0b, 0xd4, 0x93, 0x37, 0x13, 0xb0, 0x3f, 0x40, - 0x89, 0xcc, 0x11, 0x5f, 0x45, 0x30, 0xee, 0xca, 0xbb, 0xde, 0x7c, 0x13, 0x2f, 0xab, 0x0b, 0x79, - 0x55, 0x4e, 0x5d, 0xd5, 0xc6, 0x72, 0x32, 0x02, 0xf8, 0x0d, 0x04, 0x63, 0x82, 0x86, 0x85, 0xd0, - 0x88, 0x9f, 0xe5, 0x67, 0x1a, 0xf5, 0xf4, 0x94, 0x2f, 0xcb, 0xb7, 0x48, 0x8b, 0xe9, 0x7e, 0xd4, - 0xf2, 0xd3, 0xb1, 0xf1, 0x13, 0xde, 0x38, 0x89, 0xa6, 0x16, 0x5f, 0xea, 0xff, 0x0c, 0x05, 0x78, - 0x37, 0xcf, 0xfe, 0x4b, 0xf2, 0xec, 0x7f, 0x3c, 0x1a, 0x5b, 0x4f, 0x01, 0x08, 0x9c, 0xd5, 0x2a, - 0x77, 0x69, 0x56, 0xfb, 0x4f, 0x04, 0x07, 0xa4, 0x92, 0x6e, 0xe9, 0x7a, 0xf0, 0x07, 0x05, 0xee, - 0x69, 0xb3, 0x6a, 0x16, 0x89, 0xaf, 0x23, 0xd8, 0x23, 0x8f, 0x15, 0x5e, 0x15, 0xe2, 0x85, 0xa2, - 0xda, 0xa8, 0xa7, 0x27, 0xdb, 0x85, 0xa2, 0xad, 0x6a, 0xe3, 0xd2, 0x58, 0xb4, 0xb1, 0xe6, 0x75, - 0xfb, 0xfb, 0x23, 0x89, 0xd0, 0xdd, 0x0a, 0xf1, 0xb2, 0x02, 0xf3, 0x92, 0xa0, 0xb7, 0xcf, 0x9b, - 0xd6, 0x5d, 0x29, 0x1c, 0x9b, 0x26, 0xcb, 0xff, 0x2b, 0x01, 0x27, 0xa2, 0x29, 0x82, 0xb9, 0xdc, - 0x37, 0x02, 0x73, 0x2d, 0x8a, 0x9d, 0x6b, 0x85, 0xc4, 0x20, 0x25, 0x1d, 0x94, 0x61, 0xaf, 0xc3, - 0x5e, 0xb9, 0x7b, 0x92, 0x4d, 0x35, 0x1b, 0xdd, 0x4f, 0x35, 0xea, 0x69, 0xb5, 0x9d, 0x2f, 0x13, - 0x60, 0x55, 0x9b, 0x90, 0xfa, 0x73, 0x73, 0x43, 0xde, 0x86, 0x8f, 0x70, 0x94, 0xdc, 0x99, 0x0f, - 0x3d, 0x68, 0x90, 0xf3, 0x21, 0xe7, 0x0e, 0x86, 0x37, 0x74, 0x2e, 0x46, 0x50, 0x66, 0x27, 0x1f, - 0x6e, 0x15, 0x92, 0xaf, 0x2a, 0x90, 0x92, 0x10, 0xd8, 0x68, 0x5f, 0xe7, 0xe7, 0x1b, 0x8a, 0x70, - 0xbe, 0xb1, 0x69, 0xfc, 0xff, 0x33, 0x04, 0x7b, 0xa5, 0x3a, 0x60, 0x6e, 0xfe, 0x32, 0x82, 0x51, - 0x99, 0x2f, 0xb2, 0x9a, 0x1a, 0xc7, 0xcb, 0x85, 0xb6, 0x50, 0x46, 0x59, 0xd5, 0x46, 0x24, 0x4e, - 0x8e, 0x2f, 0x79, 0x7d, 0x22, 0x0a, 0x6b, 0x9f, 0xe9, 0x3f, 0x45, 0x52, 0xd3, 0xf3, 0x0e, 0xe2, - 0x49, 0x79, 0x07, 0x71, 0x34, 0x0a, 0x4b, 0x4f, 0xff, 0x10, 0x30, 0xbe, 0x57, 0xba, 0x3e, 0xbe, - 0xff, 0x07, 0x82, 0x49, 0x59, 0x98, 0x6c, 0xe5, 0xae, 0xe1, 0x43, 0x05, 0xd2, 0x81, 0x6b, 0xde, - 0x84, 0x09, 0xfc, 0x8a, 0xd7, 0xb9, 0x4f, 0x45, 0x49, 0x78, 0x5d, 0xed, 0x14, 0xa6, 0x61, 0xf8, - 0x82, 0x51, 0x5d, 0x58, 0x6d, 0x26, 0x66, 0x6e, 0xa6, 0x51, 0xe8, 0x69, 0xe6, 0x70, 0x36, 0xca, - 0xd5, 0xe8, 0x83, 0xfa, 0x5e, 0x0f, 0xec, 0x16, 0x40, 0x99, 0x9a, 0x35, 0xcf, 0x9d, 0xad, 0xf6, - 0xb7, 0xf7, 0x5c, 0xa9, 0x95, 0xa0, 0x89, 0xfb, 0x0b, 0x7e, 0x93, 0x6b, 0xd9, 0x77, 0x42, 0xd9, - 0xe9, 0x7a, 0x47, 0xf8, 0xa3, 0xc9, 0xa7, 0xbd, 0x47, 0x93, 0x1d, 0x8e, 0x01, 0xc3, 0xde, 0x73, - 0x29, 0xf1, 0x21, 0x38, 0xdd, 0x21, 0x6f, 0x27, 0xb4, 0x23, 0x0c, 0xa4, 0x44, 0xdf, 0x12, 0x08, - 0x89, 0xbc, 0xc0, 0x99, 0x52, 0xd8, 0x78, 0xd5, 0x37, 0x68, 0xec, 0x21, 0x1c, 0xa3, 0x6d, 0x82, - 0x62, 0x4d, 0x18, 0x9f, 0xf7, 0x4c, 0x18, 0x77, 0x10, 0xc6, 0x51, 0x72, 0x67, 0xe4, 0xd1, 0xe2, - 0x83, 0xd0, 0x57, 0x36, 0xab, 0x57, 0xaf, 0x9b, 0xb5, 0x72, 0x3e, 0xd9, 0x4b, 0xce, 0x17, 0x84, - 0x44, 0xe9, 0xbc, 0x72, 0x59, 0xbc, 0x6c, 0x56, 0xcf, 0x37, 0x7f, 0x54, 0x9f, 0x85, 0xf1, 0xcb, - 0x4b, 0x97, 0xcc, 0x9c, 0x5e, 0x35, 0xad, 0x2e, 0x5c, 0x43, 0x7f, 0x17, 0xc1, 0x1e, 0x1f, 0x7d, - 0x16, 0x1c, 0x8f, 0x79, 0xae, 0xa2, 0x07, 0x4e, 0x12, 0x3d, 0x04, 0x3c, 0x77, 0xd2, 0x3f, 0xe7, - 0x4d, 0x1f, 0x99, 0x90, 0x74, 0x7c, 0x75, 0xb1, 0x04, 0xc3, 0x0e, 0x88, 0x10, 0xed, 0xe6, 0x0b, - 0x65, 0x83, 0x5d, 0x1c, 0xd1, 0xe8, 0xc3, 0xc6, 0xe8, 0xe6, 0x07, 0x08, 0x76, 0x0b, 0xfc, 0x98, - 0x56, 0x1e, 0x85, 0xde, 0x22, 0xfd, 0xa9, 0xd3, 0xdc, 0xf6, 0x32, 0xf9, 0x9e, 0x60, 0xa9, 0x6a, - 0x5a, 0x06, 0x27, 0xc2, 0x51, 0xa3, 0x1c, 0xef, 0x79, 0x56, 0x2c, 0xdc, 0x2c, 0x43, 0x82, 0x6f, - 0xd8, 0x0b, 0xab, 0x4f, 0x69, 0x8b, 0x5c, 0x2b, 0xc3, 0x90, 0xa8, 0x59, 0x05, 0xa6, 0x93, 0xe6, - 0x9f, 0x9b, 0xab, 0x02, 0xfe, 0x5b, 0xf4, 0x3a, 0x2e, 0x39, 0xd3, 0xef, 0x25, 0xd8, 0xc9, 0x94, - 0xc4, 0x93, 0x72, 0x04, 0x05, 0x33, 0xd7, 0x73, 0x28, 0xc4, 0x71, 0x3e, 0x97, 0x26, 0xbb, 0x50, - 0xb3, 0xbe, 0x85, 0x20, 0x29, 0x32, 0xbb, 0xa3, 0x2f, 0x2d, 0x36, 0xc4, 0xd1, 0xdf, 0x43, 0x30, - 0x21, 0x91, 0xa8, 0x2b, 0x06, 0xf9, 0xbc, 0xd7, 0x20, 0xf7, 0x85, 0x31, 0x88, 0xfc, 0x2e, 0xfe, - 0xdb, 0x08, 0x46, 0x2f, 0x2f, 0x9d, 0x2d, 0x16, 0x39, 0xe0, 0x46, 0xa6, 0xc6, 0x0d, 0x73, 0xf6, - 0xdb, 0x08, 0xc6, 0x3c, 0x52, 0x76, 0x45, 0xb3, 0xe7, 0xbd, 0x9a, 0x3d, 0x16, 0xac, 0x59, 0xbf, - 0xce, 0xba, 0xe0, 0xe8, 0x06, 0xe0, 0xb3, 0xb9, 0x9c, 0x59, 0x2b, 0x57, 0x1f, 0xd5, 0xab, 0x3a, - 0x57, 0xeb, 0x65, 0x18, 0xe4, 0xb2, 0xb4, 0x6e, 0xfc, 0x0d, 0x2c, 0xcc, 0x34, 0x57, 0xf3, 0xe7, - 0x7a, 0x7a, 0xe8, 0x71, 0xf6, 0xf2, 0x2c, 0xbd, 0x47, 0x20, 0xf3, 0xfe, 0x81, 0x92, 0x00, 0xa3, - 0x1e, 0x85, 0x11, 0x17, 0x1b, 0xa6, 0xdc, 0x51, 0xe8, 0xb9, 0xa1, 0x17, 0x6b, 0x06, 0x2f, 0x0c, - 0xe4, 0x61, 0xee, 0x3f, 0x07, 0xa1, 0x87, 0x7c, 0xfa, 0xd4, 0xec, 0xb0, 0x77, 0xd0, 0x3a, 0x83, - 0x23, 0x7c, 0x24, 0x95, 0x3a, 0x1a, 0x0a, 0x96, 0xca, 0xa0, 0x4e, 0xbd, 0xf4, 0xf1, 0x27, 0x6f, - 0x28, 0x07, 0xf0, 0x64, 0x36, 0xe0, 0x93, 0x33, 0x56, 0x22, 0x6f, 0x23, 0xe8, 0xa1, 0x77, 0x03, - 0x43, 0x7d, 0x8d, 0x92, 0x3a, 0xd4, 0x01, 0x8a, 0xb1, 0xff, 0x21, 0x22, 0xfc, 0xdf, 0x42, 0x78, - 0x3a, 0xdb, 0xee, 0x1b, 0xba, 0xec, 0x1a, 0xd7, 0xed, 0xfa, 0xf2, 0x29, 0x7c, 0x22, 0x10, 0x96, - 0x76, 0xa1, 0xd9, 0x35, 0xf1, 0xeb, 0xad, 0x75, 0x4a, 0x62, 0xf9, 0x04, 0x9e, 0x0b, 0xc2, 0xa3, - 0xbd, 0x50, 0x76, 0x4d, 0xb8, 0xc9, 0xc9, 0xb0, 0xf0, 0x2b, 0x08, 0xfa, 0x9c, 0xef, 0x19, 0x70, - 0xe8, 0x4f, 0x1e, 0x52, 0x47, 0x42, 0x40, 0x32, 0x25, 0xcc, 0x10, 0x1d, 0x1c, 0xc4, 0x6a, 0x5b, - 0x15, 0xd8, 0x59, 0xbd, 0x58, 0xc4, 0xaf, 0x24, 0x60, 0xa7, 0x73, 0xbd, 0x32, 0xec, 0x55, 0xef, - 0xd4, 0x74, 0x67, 0x40, 0x26, 0xcb, 0x4f, 0x15, 0x22, 0xcc, 0x3b, 0x0a, 0x3e, 0x16, 0x5a, 0xc9, - 0x4d, 0xa3, 0xcc, 0xe3, 0xd9, 0xb0, 0x06, 0xe4, 0x04, 0xec, 0xe5, 0x47, 0xf0, 0xc3, 0x51, 0x91, - 0xdc, 0x5c, 0xdb, 0xb8, 0x82, 0xdc, 0xa4, 0x14, 0x77, 0xf9, 0x02, 0x7e, 0x2c, 0x34, 0x63, 0x0f, - 0xa1, 0xb2, 0x5e, 0x32, 0x1c, 0x42, 0xf8, 0xdb, 0x08, 0xfa, 0x85, 0x6b, 0xc9, 0x38, 0xc2, 0xdd, - 0xe5, 0xe0, 0x38, 0x95, 0xdc, 0xb4, 0x56, 0x8f, 0x11, 0xb3, 0x4c, 0xe1, 0x83, 0x1d, 0xac, 0x42, - 0xbd, 0xe4, 0xd5, 0xed, 0xd0, 0xcb, 0xbf, 0xdc, 0x08, 0x79, 0xb3, 0x33, 0x75, 0xb8, 0x23, 0x1c, - 0x13, 0xe5, 0x67, 0x09, 0x22, 0xcb, 0xbb, 0x89, 0x60, 0x17, 0x91, 0x29, 0x7f, 0x79, 0x0e, 0xdf, - 0x17, 0x51, 0xe9, 0xf6, 0xf2, 0xfd, 0xf8, 0x54, 0x64, 0x43, 0x11, 0x0b, 0x45, 0x32, 0xb1, 0xcc, - 0xb7, 0x1c, 0x11, 0x1e, 0xc7, 0x17, 0x37, 0x82, 0x10, 0x97, 0x2b, 0x4a, 0xf6, 0x12, 0xc5, 0x78, - 0x08, 0x9f, 0x89, 0x81, 0xc7, 0xb8, 0xe2, 0xd7, 0x10, 0x40, 0xeb, 0x7a, 0x24, 0x0e, 0x7f, 0x85, - 0x32, 0x35, 0x13, 0x06, 0x94, 0x79, 0xc6, 0x51, 0xe2, 0x18, 0x87, 0xf0, 0xbd, 0xed, 0xfd, 0x82, - 0xfa, 0xe8, 0x77, 0x10, 0xf4, 0x39, 0x37, 0xce, 0x70, 0xe8, 0xbb, 0x83, 0xc1, 0x89, 0xd5, 0x77, - 0x71, 0x4e, 0x9d, 0x27, 0xf2, 0x1c, 0xc7, 0x47, 0x83, 0xe4, 0x31, 0x39, 0x4a, 0x76, 0x8d, 0x5d, - 0x0a, 0x5c, 0xc7, 0x3f, 0x41, 0xb0, 0xcb, 0x7d, 0x1d, 0x0e, 0x47, 0xbb, 0x36, 0x97, 0xca, 0x84, - 0x05, 0x67, 0x62, 0xde, 0x4f, 0xc4, 0x6c, 0x13, 0x1e, 0xa4, 0x31, 0x90, 0xc9, 0xfa, 0x3e, 0x02, - 0xec, 0x1f, 0x75, 0xe0, 0xe8, 0x17, 0x83, 0x52, 0x73, 0x51, 0x50, 0x98, 0xdc, 0x0f, 0x11, 0xb9, - 0xdb, 0x39, 0x34, 0xa9, 0x5b, 0x15, 0x23, 0x97, 0x5d, 0xf3, 0xce, 0xf9, 0xd7, 0x71, 0x73, 0x6f, - 0x28, 0xbf, 0xd8, 0x81, 0xe3, 0x5d, 0x04, 0x49, 0x9d, 0x8a, 0x8a, 0xc6, 0xd6, 0x91, 0x21, 0xeb, - 0x98, 0xc6, 0x53, 0x1d, 0xd7, 0x41, 0x3d, 0xf7, 0x37, 0x08, 0xc6, 0xa4, 0xe3, 0x1e, 0x1c, 0xeb, - 0x64, 0x3e, 0x75, 0x32, 0x22, 0x16, 0x13, 0xfb, 0x11, 0x22, 0xf6, 0x03, 0xf8, 0x74, 0x90, 0xd8, - 0x7c, 0xac, 0x14, 0x64, 0x81, 0x5f, 0x23, 0x98, 0x08, 0x3c, 0x3b, 0xc5, 0xb1, 0x8f, 0x5b, 0x53, - 0x0f, 0xc4, 0xc0, 0x64, 0x6b, 0x9a, 0x25, 0x6b, 0x3a, 0x8a, 0x8f, 0x84, 0x59, 0x13, 0xb5, 0xc6, - 0x9b, 0x0a, 0x1c, 0x8b, 0x72, 0x8c, 0x85, 0x37, 0xf2, 0x30, 0x2c, 0x75, 0x69, 0x63, 0x88, 0xb1, - 0xe5, 0x5f, 0x24, 0xcb, 0x7f, 0x0c, 0x9f, 0x8b, 0x69, 0x52, 0x9e, 0x60, 0xc9, 0x50, 0xef, 0x15, - 0x05, 0x46, 0x24, 0x52, 0xe0, 0x18, 0x07, 0x3f, 0xa9, 0xf9, 0x48, 0x38, 0x6c, 0x35, 0xdf, 0xa4, - 0xcd, 0xfd, 0xd7, 0x10, 0x3e, 0xd9, 0xa1, 0x20, 0xc8, 0x57, 0xb3, 0x7c, 0x11, 0x2f, 0xde, 0xb9, - 0x22, 0x78, 0x09, 0xfc, 0x25, 0x82, 0x3d, 0x01, 0xd3, 0x7f, 0x1c, 0xf3, 0xb8, 0x20, 0x75, 0x3a, - 0x32, 0x1e, 0x53, 0x4d, 0x96, 0x68, 0xe6, 0x08, 0x3e, 0xdc, 0x59, 0x31, 0xac, 0xa3, 0x43, 0xd0, - 0xe7, 0x1c, 0x0e, 0x04, 0x57, 0x4b, 0xef, 0x51, 0x43, 0x70, 0xb5, 0xf4, 0x9d, 0x34, 0x74, 0x6e, - 0x31, 0x9b, 0x65, 0x87, 0x16, 0x1f, 0x7b, 0x1d, 0xff, 0x08, 0xc1, 0x90, 0x67, 0x1a, 0x8a, 0x23, - 0x8e, 0x4d, 0x53, 0xd9, 0xd0, 0xf0, 0x61, 0x33, 0x35, 0x1b, 0x35, 0xf0, 0x5d, 0xeb, 0xeb, 0xcd, - 0x1e, 0x83, 0xd3, 0xc2, 0xa1, 0x07, 0x98, 0x6d, 0x7a, 0x0c, 0xef, 0xb0, 0xb5, 0xb3, 0x25, 0xb9, - 0x48, 0x6b, 0xa4, 0x80, 0xaf, 0xe3, 0x77, 0x44, 0xc5, 0xd1, 0x49, 0x1e, 0x8e, 0x38, 0xf2, 0x0b, - 0xa1, 0x38, 0xf7, 0xc8, 0xb2, 0x73, 0x5e, 0xe5, 0x52, 0xd6, 0xac, 0x42, 0x76, 0xad, 0x66, 0x15, - 0xd6, 0xf1, 0xcf, 0xc5, 0xd9, 0x32, 0x1f, 0x70, 0xe1, 0xc8, 0xb3, 0xb0, 0xd4, 0x6c, 0x04, 0x8c, - 0xb0, 0x0d, 0x11, 0x97, 0xd6, 0xdb, 0x80, 0xe3, 0xef, 0x21, 0x18, 0x74, 0xcd, 0x8e, 0x70, 0xa4, - 0x11, 0x53, 0xea, 0x78, 0x48, 0xe8, 0xb0, 0x21, 0xc3, 0x47, 0x5f, 0x24, 0x86, 0xdf, 0x46, 0xd0, - 0x2f, 0xcc, 0x81, 0x82, 0x37, 0x8b, 0xfe, 0x99, 0x54, 0xf0, 0x66, 0x51, 0x32, 0x58, 0x52, 0x1f, - 0x24, 0x62, 0x9d, 0xc4, 0xf3, 0x81, 0x91, 0x4c, 0x91, 0xc8, 0xe3, 0x9a, 0x6b, 0xd6, 0xb5, 0xbe, - 0xf0, 0xa5, 0x0f, 0x6f, 0x4e, 0xa2, 0x8f, 0x6e, 0x4e, 0xa2, 0xbf, 0xdc, 0x9c, 0x44, 0xaf, 0xdd, - 0x9a, 0xdc, 0xf6, 0xd1, 0xad, 0xc9, 0x6d, 0x7f, 0xbc, 0x35, 0xb9, 0x0d, 0x26, 0x0a, 0x66, 0x80, - 0x14, 0x57, 0xd0, 0xf2, 0x89, 0x95, 0x42, 0xf5, 0xb9, 0xda, 0xb5, 0x4c, 0xce, 0x2c, 0x09, 0x5c, - 0x8f, 0x17, 0x4c, 0x51, 0x86, 0x17, 0x5b, 0x52, 0x54, 0x57, 0x2b, 0x86, 0x7d, 0x6d, 0x07, 0xf9, - 0x2f, 0x46, 0xf3, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x52, 0x19, 0x2d, 0x7a, 0x04, 0x4a, 0x00, - 0x00, + 0x89, 0xcc, 0x11, 0x5f, 0x45, 0x30, 0xe9, 0xc8, 0xbb, 0xee, 0x7c, 0x13, 0x2f, 0xab, 0x0b, 0x79, + 0xd5, 0x9f, 0xba, 0xa2, 0x4e, 0xe4, 0xfd, 0x08, 0xe0, 0x37, 0x10, 0x4c, 0x08, 0x1a, 0x16, 0x42, + 0x23, 0x7e, 0x96, 0x9f, 0x6d, 0x36, 0xe4, 0x69, 0x4f, 0x96, 0x6f, 0x93, 0x16, 0xd3, 0xfd, 0xb8, + 0xe9, 0xa5, 0x63, 0xe1, 0x27, 0xdc, 0x71, 0x12, 0x4d, 0x2d, 0x9e, 0xd4, 0xff, 0x19, 0x0a, 0xf0, + 0x6e, 0x9e, 0xfd, 0x97, 0xfc, 0xb3, 0xff, 0xf1, 0x68, 0x6c, 0x5d, 0x05, 0x20, 0xb0, 0x57, 0x2b, + 0xdd, 0xa5, 0x5e, 0xed, 0x3f, 0x11, 0x1c, 0xf0, 0x95, 0x74, 0x4b, 0xd7, 0x83, 0x3f, 0x48, 0x70, + 0x4f, 0x87, 0x55, 0xb3, 0x48, 0x7c, 0x1d, 0xc1, 0x1e, 0xff, 0x58, 0xe1, 0x55, 0x21, 0x5e, 0x28, + 0x2a, 0xcd, 0x86, 0x9c, 0xee, 0x14, 0x8a, 0x96, 0xa2, 0x4e, 0xfa, 0xc6, 0xa2, 0x85, 0x55, 0xb7, + 0xdb, 0xdf, 0x1f, 0x49, 0x84, 0xde, 0x56, 0x88, 0x97, 0x25, 0x58, 0xf0, 0x09, 0x7a, 0xeb, 0xbc, + 0x61, 0xde, 0x95, 0xc2, 0xb1, 0x69, 0xb2, 0xfc, 0xbf, 0x12, 0x70, 0x22, 0x9a, 0x22, 0x98, 0xcb, + 0x7d, 0x23, 0x30, 0xd7, 0xa2, 0xd8, 0xb9, 0x56, 0x48, 0x0c, 0xbe, 0xa4, 0x83, 0x32, 0xec, 0x75, + 0xd8, 0xeb, 0xef, 0x9e, 0xe4, 0x50, 0xcd, 0x5a, 0xf7, 0xd3, 0xcd, 0x86, 0xac, 0x74, 0xf2, 0x65, + 0x02, 0xac, 0xa8, 0x53, 0xbe, 0xfe, 0xdc, 0x3a, 0x90, 0x77, 0xe0, 0x23, 0x5c, 0x25, 0x77, 0xe7, + 0x43, 0x2f, 0x1a, 0xfc, 0xf9, 0x90, 0x7b, 0x07, 0xdd, 0x1d, 0x3a, 0x17, 0x23, 0x28, 0xb3, 0x9b, + 0x0f, 0xb7, 0x0b, 0xc9, 0x57, 0x25, 0x48, 0xf9, 0x10, 0xd8, 0x68, 0x5f, 0xe7, 0xf7, 0x1b, 0x92, + 0x70, 0xbf, 0xb1, 0x69, 0xfc, 0xff, 0x33, 0x04, 0x7b, 0x7d, 0x75, 0xc0, 0xdc, 0xfc, 0x65, 0x04, + 0xe3, 0x7e, 0xbe, 0xc8, 0x6a, 0x6a, 0x1c, 0x2f, 0x17, 0xb6, 0x85, 0x7e, 0x94, 0x15, 0x75, 0xcc, + 0xc7, 0xc9, 0xf1, 0x25, 0xb7, 0x4f, 0x44, 0x61, 0xed, 0x31, 0xfd, 0xa7, 0xc8, 0xd7, 0xf4, 0x7c, + 0x07, 0xf1, 0xa4, 0xff, 0x0e, 0xe2, 0x68, 0x14, 0x96, 0xae, 0xfd, 0x43, 0x40, 0xfb, 0x5e, 0xea, + 0x79, 0xfb, 0xfe, 0x1f, 0x08, 0xd2, 0x7e, 0x61, 0xb2, 0x95, 0x77, 0x0d, 0x1f, 0x4a, 0x20, 0x07, + 0xae, 0x79, 0x13, 0x26, 0xf0, 0x2b, 0x6e, 0xe7, 0x3e, 0x15, 0x25, 0xe1, 0xf5, 0x74, 0xa7, 0x30, + 0x03, 0xa3, 0x17, 0xf4, 0x5a, 0x6e, 0xb5, 0x95, 0x98, 0xb9, 0x99, 0xc6, 0xa1, 0xaf, 0x95, 0xc3, + 0x59, 0x2b, 0x57, 0xa5, 0x0f, 0xca, 0x7b, 0x7d, 0xb0, 0x5b, 0x00, 0x65, 0x6a, 0x56, 0x5d, 0x33, + 0x5b, 0x9d, 0xa7, 0xf7, 0x1c, 0xa9, 0x95, 0xa0, 0x89, 0xe7, 0x0b, 0x3e, 0xc9, 0xb5, 0xec, 0xb9, + 0xa1, 0xec, 0x36, 0xde, 0x11, 0xfe, 0x6a, 0xf2, 0x69, 0xf7, 0xd5, 0x64, 0x97, 0x6b, 0xc0, 0xb0, + 0x73, 0x2e, 0x65, 0xde, 0x04, 0xa7, 0x27, 0xe4, 0xed, 0x84, 0x76, 0x84, 0x86, 0x94, 0xe8, 0x5b, + 0x02, 0x21, 0x91, 0x17, 0xd8, 0x5d, 0x0a, 0x0b, 0xaf, 0x7a, 0x1a, 0x8d, 0x7d, 0x84, 0x63, 0xb4, + 0x43, 0x50, 0xac, 0x0e, 0xe3, 0xf3, 0xae, 0x0e, 0xe3, 0x0e, 0xc2, 0x38, 0x4a, 0xee, 0x8c, 0xdc, + 0x5a, 0x7c, 0x10, 0x06, 0x2a, 0x46, 0xed, 0xea, 0x75, 0xa3, 0x5e, 0x29, 0x24, 0xfb, 0xc9, 0xfd, + 0x82, 0x90, 0x28, 0xed, 0x57, 0x0e, 0x8b, 0x57, 0x8c, 0xda, 0xf9, 0xd6, 0x8f, 0xca, 0xb3, 0x30, + 0x79, 0x79, 0xe9, 0x92, 0x91, 0xd7, 0x6a, 0x86, 0xd9, 0x83, 0x31, 0xf4, 0x77, 0x11, 0xec, 0xf1, + 0xd0, 0x67, 0xc1, 0xf1, 0x98, 0x6b, 0x14, 0x3d, 0xb0, 0x93, 0xe8, 0x22, 0xe0, 0x9a, 0x49, 0xff, + 0x9c, 0x3b, 0x7d, 0x64, 0x42, 0xd2, 0xf1, 0xd4, 0xc5, 0x32, 0x8c, 0xda, 0x20, 0x42, 0xb4, 0x1b, + 0x2f, 0x54, 0x74, 0x36, 0x38, 0xa2, 0xd2, 0x87, 0x8d, 0xd1, 0xcd, 0x0f, 0x10, 0xec, 0x16, 0xf8, + 0x31, 0xad, 0x3c, 0x0a, 0xfd, 0x25, 0xfa, 0x53, 0xb7, 0xbe, 0xed, 0x65, 0xf2, 0x3d, 0xc1, 0x52, + 0xcd, 0x30, 0x75, 0x4e, 0x84, 0xa3, 0x46, 0xb9, 0xde, 0x73, 0xad, 0x58, 0x98, 0x2c, 0x43, 0x82, + 0x6f, 0x58, 0xb9, 0xd5, 0xa7, 0xd4, 0x45, 0xae, 0x95, 0x51, 0x48, 0xd4, 0xcd, 0x22, 0xd3, 0x49, + 0xeb, 0xcf, 0xcd, 0x55, 0x01, 0xff, 0x2d, 0x7a, 0x1d, 0x97, 0x9c, 0xe9, 0xf7, 0x12, 0xec, 0x64, + 0x4a, 0xe2, 0x49, 0x39, 0x82, 0x82, 0x99, 0xeb, 0xd9, 0x14, 0xe2, 0x38, 0x9f, 0x43, 0x93, 0x3d, + 0xa8, 0x59, 0xdf, 0x42, 0x90, 0x14, 0x99, 0xdd, 0xd1, 0x97, 0x16, 0x1b, 0xe2, 0xe8, 0xef, 0x21, + 0x98, 0xf2, 0x91, 0xa8, 0x27, 0x06, 0xf9, 0xbc, 0xdb, 0x20, 0xf7, 0x85, 0x31, 0x88, 0xff, 0x2c, + 0xfe, 0xdb, 0x08, 0xc6, 0x2f, 0x2f, 0x9d, 0x2d, 0x95, 0x38, 0xe0, 0x46, 0xa6, 0xc6, 0x0d, 0x73, + 0xf6, 0xdb, 0x08, 0x26, 0x5c, 0x52, 0xf6, 0x44, 0xb3, 0xe7, 0xdd, 0x9a, 0x3d, 0x16, 0xac, 0x59, + 0xaf, 0xce, 0x7a, 0xe0, 0xe8, 0x3a, 0xe0, 0xb3, 0xf9, 0xbc, 0x51, 0xaf, 0xd4, 0x1e, 0xd5, 0x6a, + 0x1a, 0x57, 0xeb, 0x65, 0x18, 0xe6, 0xb2, 0xb4, 0x27, 0xfe, 0x86, 0x72, 0xb3, 0xad, 0xd5, 0xfc, + 0xb9, 0x21, 0x8f, 0x3c, 0xce, 0x5e, 0x9e, 0xa5, 0x73, 0x04, 0x7e, 0xde, 0x3f, 0x54, 0x16, 0x60, + 0x94, 0xa3, 0x30, 0xe6, 0x60, 0xc3, 0x94, 0x3b, 0x0e, 0x7d, 0x37, 0xb4, 0x52, 0x5d, 0xe7, 0x85, + 0x81, 0x3c, 0xcc, 0xff, 0xe7, 0x20, 0xf4, 0x91, 0x4f, 0x9f, 0x5a, 0x3b, 0xec, 0x1d, 0xb4, 0xce, + 0xe0, 0x08, 0x1f, 0x49, 0xa5, 0x8e, 0x86, 0x82, 0xa5, 0x32, 0x28, 0xd3, 0x2f, 0x7d, 0xfc, 0xc9, + 0x1b, 0xd2, 0x01, 0x9c, 0xce, 0x06, 0x7c, 0x72, 0xc6, 0x4a, 0xe4, 0x6d, 0x04, 0x7d, 0x74, 0x36, + 0x30, 0xd4, 0xd7, 0x28, 0xa9, 0x43, 0x5d, 0xa0, 0x18, 0xfb, 0x1f, 0x22, 0xc2, 0xff, 0x2d, 0xb4, + 0x7c, 0x0a, 0x9f, 0x08, 0x12, 0x81, 0xed, 0x2d, 0xb3, 0x6b, 0xe2, 0x37, 0x59, 0xeb, 0xf4, 0xe3, + 0xba, 0xe5, 0x13, 0x78, 0x3e, 0x08, 0x8f, 0xee, 0x70, 0xb2, 0x6b, 0xc2, 0x7c, 0x26, 0xc3, 0xc2, + 0x33, 0xd9, 0x4e, 0x5f, 0xec, 0x65, 0xd7, 0xb8, 0x25, 0xd7, 0xf1, 0x2b, 0x08, 0x06, 0xec, 0xef, + 0x19, 0x70, 0xe8, 0x4f, 0x1e, 0x52, 0x47, 0x42, 0x40, 0x32, 0x25, 0xcc, 0x12, 0x1d, 0x1c, 0xc4, + 0x4a, 0x47, 0xa1, 0xac, 0xac, 0x56, 0x2a, 0xe1, 0x57, 0x12, 0xb0, 0xd3, 0x1e, 0xaf, 0x0c, 0x3b, + 0xea, 0x9d, 0x9a, 0xe9, 0x0e, 0xc8, 0x64, 0xf9, 0xa9, 0x44, 0x84, 0x79, 0x47, 0x5a, 0x5e, 0xc0, + 0x73, 0x61, 0x95, 0xc4, 0x2d, 0x64, 0x2d, 0x3f, 0x82, 0x1f, 0x8e, 0x8a, 0xd4, 0x36, 0x6b, 0xb1, + 0xb0, 0xde, 0xc9, 0x0d, 0xfc, 0xcd, 0x49, 0x71, 0x97, 0x2f, 0xe0, 0xc7, 0x42, 0x33, 0x76, 0x11, + 0xaa, 0x68, 0x65, 0xdd, 0x26, 0x84, 0x8f, 0x85, 0xf6, 0xc2, 0x96, 0x77, 0x7c, 0x1b, 0xc1, 0xa0, + 0x30, 0x96, 0x8c, 0x23, 0xcc, 0x2e, 0x07, 0xc7, 0xa9, 0xcf, 0xa4, 0xb5, 0x72, 0x8c, 0x98, 0x65, + 0x1a, 0x1f, 0xec, 0x22, 0x1e, 0xf5, 0x92, 0x57, 0xb7, 0x43, 0x3f, 0xff, 0x72, 0x23, 0xe4, 0x64, + 0x67, 0xea, 0x70, 0x57, 0x38, 0x26, 0xca, 0xcf, 0x12, 0x44, 0x96, 0x77, 0x13, 0xcb, 0xf3, 0xf8, + 0xbe, 0x88, 0x4a, 0xb7, 0x96, 0xef, 0xc7, 0xa7, 0x22, 0x1b, 0x8a, 0x58, 0x28, 0x92, 0x89, 0xfd, + 0x8c, 0x65, 0x8b, 0xf0, 0x38, 0xbe, 0xb8, 0x11, 0x84, 0xb8, 0x5c, 0x51, 0x32, 0x97, 0x28, 0xc6, + 0x43, 0xf8, 0x4c, 0x0c, 0x3c, 0xc6, 0x35, 0xd8, 0x4f, 0xfd, 0xc2, 0x04, 0xbf, 0x86, 0x00, 0xda, + 0xe3, 0x91, 0x38, 0xfc, 0x08, 0x65, 0x6a, 0x36, 0x0c, 0x28, 0xf3, 0x8c, 0xa3, 0xc4, 0x31, 0x0e, + 0xe1, 0x7b, 0x3b, 0xcb, 0x46, 0x7d, 0xf4, 0x3b, 0x08, 0x06, 0xec, 0x89, 0x33, 0x1c, 0x7a, 0x76, + 0x30, 0x38, 0xb1, 0x7a, 0x06, 0xe7, 0x94, 0x05, 0x22, 0xcf, 0x71, 0x7c, 0x34, 0x48, 0x1e, 0x83, + 0xa3, 0x64, 0xd7, 0xd8, 0x50, 0xe0, 0x3a, 0xfe, 0x09, 0x82, 0x5d, 0xce, 0x71, 0x38, 0x1c, 0x6d, + 0x6c, 0x2e, 0x95, 0x09, 0x0b, 0xce, 0xc4, 0xbc, 0x9f, 0x88, 0xd9, 0x21, 0x98, 0xc8, 0xc6, 0xc0, + 0x4f, 0xd6, 0xf7, 0x11, 0x60, 0x6f, 0xab, 0x03, 0x47, 0x1f, 0x0c, 0x4a, 0xcd, 0x47, 0x41, 0x61, + 0x72, 0x3f, 0x44, 0xe4, 0xee, 0xe4, 0xfe, 0xa4, 0x6e, 0x55, 0xf5, 0x7c, 0x76, 0xcd, 0xdd, 0xe7, + 0x5f, 0xc7, 0xad, 0xb3, 0xa1, 0xff, 0x60, 0x07, 0x8e, 0x37, 0x08, 0x92, 0x3a, 0x15, 0x15, 0x8d, + 0xad, 0x23, 0x43, 0xd6, 0x31, 0x83, 0xa7, 0xbb, 0xae, 0x83, 0x7a, 0xee, 0x6f, 0x10, 0x4c, 0xf8, + 0xb6, 0x7b, 0x70, 0xac, 0x9b, 0xf9, 0xd4, 0xc9, 0x88, 0x58, 0x4c, 0xec, 0x47, 0x88, 0xd8, 0x0f, + 0xe0, 0xd3, 0x41, 0x62, 0xf3, 0xb6, 0x52, 0x90, 0x05, 0x7e, 0x8d, 0x60, 0x2a, 0xf0, 0xee, 0x14, + 0xc7, 0xbe, 0x6e, 0x4d, 0x3d, 0x10, 0x03, 0x93, 0xad, 0x69, 0x8e, 0xac, 0xe9, 0x28, 0x3e, 0x12, + 0x66, 0x4d, 0xd4, 0x1a, 0x6f, 0x4a, 0x70, 0x2c, 0xca, 0x35, 0x16, 0xde, 0xc8, 0xcb, 0xb0, 0xd4, + 0xa5, 0x8d, 0x21, 0xc6, 0x96, 0x7f, 0x91, 0x2c, 0xff, 0x31, 0x7c, 0x2e, 0xa6, 0x49, 0x79, 0x82, + 0x25, 0x4d, 0xbd, 0x57, 0x24, 0x18, 0xf3, 0x91, 0x02, 0xc7, 0xb8, 0xf8, 0x49, 0x2d, 0x44, 0xc2, + 0x61, 0xab, 0xf9, 0x26, 0xdd, 0xdc, 0x7f, 0x0d, 0x2d, 0x5f, 0xc4, 0x8b, 0x77, 0xbe, 0x22, 0x5e, + 0xf9, 0x4e, 0x76, 0xa9, 0x2e, 0x01, 0xde, 0xfe, 0x4b, 0x04, 0x7b, 0x02, 0xba, 0xff, 0x38, 0xe6, + 0x75, 0x41, 0xea, 0x74, 0x64, 0x3c, 0xa6, 0x9a, 0x2c, 0xd1, 0xcc, 0x11, 0x7c, 0xb8, 0xfb, 0x5a, + 0xd8, 0x8e, 0x0e, 0xc1, 0x80, 0x7d, 0x39, 0x10, 0x5c, 0x2d, 0xdd, 0x57, 0x0d, 0xc1, 0xd5, 0xd2, + 0x73, 0xd3, 0xd0, 0x7d, 0x8b, 0xd9, 0x2a, 0x3b, 0xb4, 0xf8, 0x58, 0xeb, 0xf8, 0x47, 0x08, 0x46, + 0x5c, 0xdd, 0x50, 0x1c, 0xb1, 0x6d, 0x9a, 0xca, 0x86, 0x86, 0x0f, 0x9b, 0xa9, 0x59, 0xab, 0x81, + 0x9f, 0x5a, 0x5f, 0x6f, 0xed, 0x31, 0x38, 0x2d, 0x1c, 0xba, 0x81, 0xd9, 0x61, 0x8f, 0xe1, 0x6e, + 0xb6, 0x76, 0xb7, 0x24, 0x17, 0x69, 0x8d, 0x14, 0xf0, 0x75, 0xfc, 0x8e, 0xa8, 0x38, 0xda, 0xc9, + 0xc3, 0x11, 0x5b, 0x7e, 0x21, 0x14, 0xe7, 0x6c, 0x59, 0x76, 0xcf, 0xab, 0x5c, 0xca, 0xba, 0x59, + 0xcc, 0xae, 0xd5, 0xcd, 0xe2, 0x3a, 0xfe, 0xb9, 0xd8, 0x5b, 0xe6, 0x0d, 0x2e, 0x1c, 0xb9, 0x17, + 0x96, 0x9a, 0x8b, 0x80, 0x11, 0x76, 0x43, 0xc4, 0xa5, 0xf5, 0x9c, 0xd6, 0xbf, 0x87, 0x60, 0xd8, + 0xd1, 0x3b, 0xc2, 0x91, 0x5a, 0x4c, 0xa9, 0xe3, 0x21, 0xa1, 0xc3, 0x86, 0x0c, 0x6f, 0x7d, 0x91, + 0x18, 0x7e, 0x1b, 0xc1, 0xa0, 0xd0, 0x07, 0x0a, 0x3e, 0x2c, 0x7a, 0x7b, 0x52, 0xc1, 0x87, 0x45, + 0x9f, 0xc6, 0x92, 0xf2, 0x20, 0x11, 0xeb, 0x24, 0x5e, 0x08, 0x8c, 0x64, 0x8a, 0x44, 0x1e, 0xd7, + 0x1c, 0xbd, 0xae, 0xf5, 0xdc, 0x97, 0x3e, 0xbc, 0x99, 0x46, 0x1f, 0xdd, 0x4c, 0xa3, 0xbf, 0xdc, + 0x4c, 0xa3, 0xd7, 0x6e, 0xa5, 0xb7, 0x7d, 0x74, 0x2b, 0xbd, 0xed, 0x8f, 0xb7, 0xd2, 0xdb, 0x60, + 0xaa, 0x68, 0x04, 0x48, 0x71, 0x05, 0x2d, 0x9f, 0x58, 0x29, 0xd6, 0x9e, 0xab, 0x5f, 0xcb, 0xe4, + 0x8d, 0xb2, 0xc0, 0xf5, 0x78, 0xd1, 0x10, 0x65, 0x78, 0xb1, 0x2d, 0x45, 0x6d, 0xb5, 0xaa, 0x5b, + 0xd7, 0x76, 0x90, 0xff, 0x62, 0xb4, 0xf0, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x9e, 0x4e, 0x85, + 0x63, 0x04, 0x4a, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/metadata/types/query.pb.gw.go b/x/metadata/types/query.pb.gw.go index 3f9e81b49d..3c30697e8a 100644 --- a/x/metadata/types/query.pb.gw.go +++ b/x/metadata/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_Params_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} @@ -2442,12 +2444,14 @@ func local_request_Query_AccountData_0(ctx context.Context, marshaler runtime.Ma // 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_Params_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 { @@ -2455,6 +2459,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Params_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) @@ -2468,6 +2473,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Scope_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 { @@ -2475,6 +2482,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Scope_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) @@ -2488,6 +2496,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Scope_1, 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 { @@ -2495,6 +2505,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Scope_1(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) @@ -2508,6 +2519,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Scope_2, 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 { @@ -2515,6 +2528,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Scope_2(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) @@ -2528,6 +2542,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_ScopesAll_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 { @@ -2535,6 +2551,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_ScopesAll_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) @@ -2548,6 +2565,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Sessions_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 { @@ -2555,6 +2574,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Sessions_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) @@ -2568,6 +2588,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Sessions_1, 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 { @@ -2575,6 +2597,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Sessions_1(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) @@ -2588,6 +2611,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Sessions_2, 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 { @@ -2595,6 +2620,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Sessions_2(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) @@ -2608,6 +2634,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Sessions_3, 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 { @@ -2615,6 +2643,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Sessions_3(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) @@ -2628,6 +2657,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Sessions_4, 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 { @@ -2635,6 +2666,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Sessions_4(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) @@ -2648,6 +2680,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_SessionsAll_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 { @@ -2655,6 +2689,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_SessionsAll_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) @@ -2668,6 +2703,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Records_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 { @@ -2675,6 +2712,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Records_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) @@ -2688,6 +2726,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Records_1, 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 { @@ -2695,6 +2735,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Records_1(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) @@ -2708,6 +2749,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Records_2, 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 { @@ -2715,6 +2758,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Records_2(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) @@ -2728,6 +2772,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Records_3, 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 { @@ -2735,6 +2781,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Records_3(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) @@ -2748,6 +2795,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Records_4, 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 { @@ -2755,6 +2804,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Records_4(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) @@ -2768,6 +2818,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Records_5, 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 { @@ -2775,6 +2827,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Records_5(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) @@ -2788,6 +2841,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Records_6, 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 { @@ -2795,6 +2850,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Records_6(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) @@ -2808,6 +2864,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_RecordsAll_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 { @@ -2815,6 +2873,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_RecordsAll_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) @@ -2828,6 +2887,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Ownership_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 { @@ -2835,6 +2896,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Ownership_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) @@ -2848,6 +2910,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_ValueOwnership_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 { @@ -2855,6 +2919,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_ValueOwnership_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) @@ -2868,6 +2933,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_ScopeSpecification_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 { @@ -2875,6 +2942,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_ScopeSpecification_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) @@ -2888,6 +2956,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_ScopeSpecificationsAll_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 { @@ -2895,6 +2965,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_ScopeSpecificationsAll_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) @@ -2908,6 +2979,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_ContractSpecification_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 { @@ -2915,6 +2988,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_ContractSpecification_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) @@ -2928,6 +3002,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_ContractSpecificationsAll_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 { @@ -2935,6 +3011,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_ContractSpecificationsAll_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) @@ -2948,6 +3025,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_RecordSpecificationsForContractSpecification_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 { @@ -2955,6 +3034,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_RecordSpecificationsForContractSpecification_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) @@ -2968,6 +3048,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_RecordSpecification_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 { @@ -2975,6 +3057,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_RecordSpecification_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) @@ -2988,6 +3071,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_RecordSpecification_1, 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 { @@ -2995,6 +3080,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_RecordSpecification_1(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) @@ -3008,6 +3094,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_RecordSpecificationsAll_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 { @@ -3015,6 +3103,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_RecordSpecificationsAll_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) @@ -3028,6 +3117,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_GetByAddr_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 { @@ -3035,6 +3126,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_GetByAddr_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) @@ -3048,6 +3140,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_OSLocatorParams_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 { @@ -3055,6 +3149,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_OSLocatorParams_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) @@ -3068,6 +3163,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_OSLocator_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 { @@ -3075,6 +3172,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_OSLocator_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) @@ -3088,6 +3186,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_OSLocatorsByURI_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 { @@ -3095,6 +3195,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_OSLocatorsByURI_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) @@ -3108,6 +3209,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_OSLocatorsByScope_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 { @@ -3115,6 +3218,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_OSLocatorsByScope_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) @@ -3128,6 +3232,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_OSAllLocators_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 { @@ -3135,6 +3241,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_OSAllLocators_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) @@ -3148,6 +3255,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_AccountData_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 { @@ -3155,6 +3264,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_AccountData_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/metadata/types/scope.pb.go b/x/metadata/types/scope.pb.go index fae431e749..40b67fb989 100644 --- a/x/metadata/types/scope.pb.go +++ b/x/metadata/types/scope.pb.go @@ -5,9 +5,9 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" _ "google.golang.org/protobuf/types/descriptorpb" _ "google.golang.org/protobuf/types/known/timestamppb" io "io" @@ -1380,7 +1380,7 @@ func (m *AuditFields) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x22 } - n3, err3 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.UpdatedDate, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.UpdatedDate):]) + n3, err3 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.UpdatedDate, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.UpdatedDate):]) if err3 != nil { return 0, err3 } @@ -1395,7 +1395,7 @@ func (m *AuditFields) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x12 } - n4, err4 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CreatedDate, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CreatedDate):]) + n4, err4 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.CreatedDate, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.CreatedDate):]) if err4 != nil { return 0, err4 } @@ -1635,13 +1635,13 @@ func (m *AuditFields) Size() (n int) { } var l int _ = l - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.CreatedDate) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.CreatedDate) n += 1 + l + sovScope(uint64(l)) l = len(m.CreatedBy) if l > 0 { n += 1 + l + sovScope(uint64(l)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.UpdatedDate) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.UpdatedDate) n += 1 + l + sovScope(uint64(l)) l = len(m.UpdatedBy) if l > 0 { @@ -3057,7 +3057,7 @@ func (m *AuditFields) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.CreatedDate, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.CreatedDate, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -3122,7 +3122,7 @@ func (m *AuditFields) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.UpdatedDate, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.UpdatedDate, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/metadata/types/specification.pb.go b/x/metadata/types/specification.pb.go index 7ef3e1d867..37c04eee8b 100644 --- a/x/metadata/types/specification.pb.go +++ b/x/metadata/types/specification.pb.go @@ -6,8 +6,8 @@ package types import ( fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" @@ -206,6 +206,7 @@ type ContractSpecification struct { // contract // // Types that are valid to be assigned to Source: + // // *ContractSpecification_ResourceId // *ContractSpecification_Hash Source isContractSpecification_Source `protobuf_oneof:"source"` @@ -411,6 +412,7 @@ type InputSpecification struct { // source is either on chain (record_id) or off-chain (hash) // // Types that are valid to be assigned to Source: + // // *InputSpecification_RecordId // *InputSpecification_Hash Source isInputSpecification_Source `protobuf_oneof:"source"` diff --git a/x/metadata/types/tx.pb.go b/x/metadata/types/tx.pb.go index 9dbc45d682..c1966e8e9f 100644 --- a/x/metadata/types/tx.pb.go +++ b/x/metadata/types/tx.pb.go @@ -6,9 +6,9 @@ package types import ( context "context" fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" p8e "github.com/provenance-io/provenance/x/metadata/types/p8e" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" diff --git a/x/msgfees/keeper/keeper.go b/x/msgfees/keeper/keeper.go index 7767603795..669200af24 100644 --- a/x/msgfees/keeper/keeper.go +++ b/x/msgfees/keeper/keeper.go @@ -171,7 +171,7 @@ func (k Keeper) IterateMsgFees(ctx sdk.Context, handle func(msgFees types.MsgFee // DeductFeesDistributions deducts fees from the given account. The fees map contains a key of bech32 addresses to distribute funds to. // If the key in the map is an empty string, those will go to the fee collector. After all the accounts in fees map are paid out, // the remainder of remainingFees will be swept to the fee collector account. -func (k Keeper) DeductFeesDistributions(bankKeeper bankkeeper.Keeper, ctx sdk.Context, acc cosmosauthtypes.AccountI, remainingFees sdk.Coins, fees map[string]sdk.Coins) error { +func (k Keeper) DeductFeesDistributions(bankKeeper bankkeeper.Keeper, ctx sdk.Context, acc sdk.AccountI, remainingFees sdk.Coins, fees map[string]sdk.Coins) error { sentCoins := sdk.NewCoins() for _, key := range sortedKeys(fees) { coins := fees[key] diff --git a/x/msgfees/types/expected_keepers.go b/x/msgfees/types/expected_keepers.go index ac1e55a30c..2af4374b52 100644 --- a/x/msgfees/types/expected_keepers.go +++ b/x/msgfees/types/expected_keepers.go @@ -6,7 +6,6 @@ import ( "cosmossdk.io/x/feegrant" sdk "github.com/cosmos/cosmos-sdk/types" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" ) @@ -22,7 +21,7 @@ type AccountKeeper interface { type MsgFeesKeeper interface { GetMsgFee(ctx sdk.Context, msgType string) (*MsgFee, error) GetFeeCollectorName() string - DeductFeesDistributions(bankKeeper bankkeeper.Keeper, ctx sdk.Context, acc authtypes.AccountI, remainingFees sdk.Coins, fees map[string]sdk.Coins) error + DeductFeesDistributions(bankKeeper bankkeeper.Keeper, ctx sdk.Context, acc sdk.AccountI, remainingFees sdk.Coins, fees map[string]sdk.Coins) error GetFloorGasPrice(ctx sdk.Context) sdk.Coin GetNhashPerUsdMil(ctx sdk.Context) uint64 ConvertDenomToHash(ctx sdk.Context, coin sdk.Coin) (sdk.Coin, error) diff --git a/x/msgfees/types/genesis.pb.go b/x/msgfees/types/genesis.pb.go index cdff92ee2d..e4b1a19875 100644 --- a/x/msgfees/types/genesis.pb.go +++ b/x/msgfees/types/genesis.pb.go @@ -5,8 +5,8 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/msgfees/types/msgfees.pb.go b/x/msgfees/types/msgfees.pb.go index be1260e759..a60eef9ebb 100644 --- a/x/msgfees/types/msgfees.pb.go +++ b/x/msgfees/types/msgfees.pb.go @@ -6,8 +6,8 @@ package types import ( fmt "fmt" types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/msgfees/types/proposals.pb.go b/x/msgfees/types/proposals.pb.go index a28eee4c2f..16a50e816a 100644 --- a/x/msgfees/types/proposals.pb.go +++ b/x/msgfees/types/proposals.pb.go @@ -6,8 +6,8 @@ package types import ( fmt "fmt" types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/msgfees/types/query.pb.go b/x/msgfees/types/query.pb.go index acc290b5ff..894c510d5d 100644 --- a/x/msgfees/types/query.pb.go +++ b/x/msgfees/types/query.pb.go @@ -10,9 +10,9 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" query "github.com/cosmos/cosmos-sdk/types/query" - _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" @@ -396,12 +396,12 @@ var fileDescriptor_73f2d53a5aebf81b = []byte{ 0xc4, 0xfd, 0xd7, 0xdf, 0x6c, 0x10, 0xfa, 0x08, 0xe0, 0xf4, 0xa5, 0x7c, 0xa3, 0xcd, 0xab, 0x6c, 0x7a, 0x56, 0xad, 0xe8, 0x5c, 0x57, 0x9e, 0x92, 0xd9, 0x9a, 0x6c, 0x01, 0x15, 0x07, 0x90, 0x91, 0x30, 0x44, 0x5f, 0x00, 0x9c, 0xbe, 0x14, 0xa6, 0x81, 0x58, 0xfd, 0xf3, 0x3f, 0x10, 0x6b, 0x40, - 0x46, 0xed, 0x07, 0x1a, 0xcb, 0xb1, 0xd7, 0xb3, 0x58, 0xb2, 0xa9, 0x88, 0xaa, 0xad, 0x12, 0x4f, - 0xed, 0xbb, 0x4a, 0x8e, 0xaf, 0x32, 0xf5, 0x08, 0x6c, 0x94, 0x83, 0xd3, 0x73, 0x0b, 0x9c, 0x9d, + 0x46, 0xed, 0x07, 0x1a, 0xcb, 0x79, 0x04, 0x36, 0xec, 0xf5, 0x2c, 0x99, 0x6c, 0x2a, 0xa8, 0x6a, + 0xab, 0xca, 0x53, 0x2b, 0xaf, 0xc2, 0xe3, 0xab, 0x58, 0x95, 0x83, 0xd3, 0x73, 0x0b, 0x9c, 0x9d, 0x5b, 0xe0, 0xd7, 0xb9, 0x05, 0xde, 0x5f, 0x58, 0xb9, 0xb3, 0x0b, 0x2b, 0xf7, 0xfd, 0xc2, 0xca, 0xc1, 0x42, 0xc0, 0xfb, 0x13, 0x1c, 0x80, 0x17, 0xdb, 0x99, 0x88, 0x75, 0x34, 0x9b, 0x01, 0xcf, - 0x7a, 0x37, 0xdb, 0x43, 0xd1, 0x99, 0xab, 0x8c, 0xe8, 0x5f, 0xd7, 0xed, 0x3f, 0x01, 0x00, 0x00, - 0xff, 0xff, 0x5b, 0x00, 0x28, 0xc7, 0x3e, 0x06, 0x00, 0x00, + 0x1a, 0x37, 0xdb, 0x43, 0xd1, 0x99, 0xab, 0x8c, 0xe8, 0x5f, 0xd7, 0xed, 0x3f, 0x01, 0x00, 0x00, + 0xff, 0xff, 0x11, 0xa8, 0x5e, 0xca, 0x3e, 0x06, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/msgfees/types/query.pb.gw.go b/x/msgfees/types/query.pb.gw.go index bba0860ad0..a66158eaff 100644 --- a/x/msgfees/types/query.pb.gw.go +++ b/x/msgfees/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 func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryParamsRequest @@ -122,12 +124,14 @@ func local_request_Query_CalculateTxFees_0(ctx context.Context, marshaler runtim // 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_Params_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 { @@ -135,6 +139,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Params_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) @@ -148,6 +153,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_QueryAllMsgFees_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 +162,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_QueryAllMsgFees_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 +176,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("POST", pattern_Query_CalculateTxFees_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 +185,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_CalculateTxFees_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/msgfees/types/tx.pb.go b/x/msgfees/types/tx.pb.go index b7ce3a2602..9d111c665f 100644 --- a/x/msgfees/types/tx.pb.go +++ b/x/msgfees/types/tx.pb.go @@ -9,9 +9,9 @@ import ( _ "github.com/cosmos/cosmos-proto" types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/cosmos-sdk/types/msgservice" - _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" diff --git a/x/name/client/cli/cli_test.go b/x/name/client/cli/cli_test.go index 7218b639ca..fb086b2d6c 100644 --- a/x/name/client/cli/cli_test.go +++ b/x/name/client/cli/cli_test.go @@ -8,7 +8,7 @@ import ( "testing" "time" - "github.com/gogo/protobuf/proto" + "github.com/cosmos/gogoproto/proto" "github.com/spf13/cobra" "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" diff --git a/x/name/types/genesis.pb.go b/x/name/types/genesis.pb.go index 9f1d2914c9..4ca9a6e5d9 100644 --- a/x/name/types/genesis.pb.go +++ b/x/name/types/genesis.pb.go @@ -5,8 +5,8 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/name/types/name.pb.go b/x/name/types/name.pb.go index 82dab1acf8..18830b2731 100644 --- a/x/name/types/name.pb.go +++ b/x/name/types/name.pb.go @@ -5,8 +5,8 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/name/types/query.pb.go b/x/name/types/query.pb.go index cf9f1a941a..af22774ed7 100644 --- a/x/name/types/query.pb.go +++ b/x/name/types/query.pb.go @@ -7,9 +7,9 @@ import ( context "context" fmt "fmt" query "github.com/cosmos/cosmos-sdk/types/query" - _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" diff --git a/x/name/types/query.pb.gw.go b/x/name/types/query.pb.gw.go index a1f3b558e1..27d4ef046d 100644 --- a/x/name/types/query.pb.gw.go +++ b/x/name/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 func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryParamsRequest @@ -178,12 +180,14 @@ func local_request_Query_ReverseLookup_0(ctx context.Context, marshaler runtime. // 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_Params_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 { @@ -191,6 +195,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Params_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) @@ -204,6 +209,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Resolve_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 { @@ -211,6 +218,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Resolve_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) @@ -224,6 +232,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_ReverseLookup_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 { @@ -231,6 +241,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_ReverseLookup_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/name/types/tx.pb.go b/x/name/types/tx.pb.go index 3ecadf69a4..6de399b3f2 100644 --- a/x/name/types/tx.pb.go +++ b/x/name/types/tx.pb.go @@ -8,9 +8,9 @@ import ( fmt "fmt" _ "github.com/cosmos/cosmos-proto" _ "github.com/cosmos/cosmos-sdk/types/msgservice" - _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" diff --git a/x/oracle/keeper/relay.go b/x/oracle/keeper/relay.go index d965a80411..b12897fcbf 100644 --- a/x/oracle/keeper/relay.go +++ b/x/oracle/keeper/relay.go @@ -7,7 +7,7 @@ import ( cerrs "cosmossdk.io/errors" - // icqtypes "github.com/cosmos/ibc-apps/modules/async-icq/v7/types" // TODO[1760]: async-icq + icqtypes "github.com/cosmos/ibc-apps/modules/async-icq/v8/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" @@ -32,62 +32,58 @@ func (k Keeper) SendQuery( if !found { return 0, cerrs.Wrapf(channeltypes.ErrChannelNotFound, "port ID (%s) channel ID (%s)", sourcePort, sourceChannel) } - _ = sourceChannelEnd // TODO[1760]: async-icq - - // TODO[1760]: async-icq - // destinationPort := sourceChannelEnd.GetCounterparty().GetPortID() - // destinationChannel := sourceChannelEnd.GetCounterparty().GetChannelID() - // - // data, err := icqtypes.SerializeCosmosQuery(reqs) - // if err != nil { - // return 0, cerrs.Wrap(err, "could not serialize reqs into cosmos query") - // } - // icqPacketData := icqtypes.InterchainQueryPacketData{ - // Data: data, - // } - // - // return k.createOutgoingPacket(ctx, sourcePort, sourceChannel, destinationPort, destinationChannel, chanCap, icqPacketData, timeoutTimestamp) - return 0, cerrs.Wrapf(sdkerrors.ErrNotSupported, "not yet updated") + + destinationPort := sourceChannelEnd.GetCounterparty().GetPortID() + destinationChannel := sourceChannelEnd.GetCounterparty().GetChannelID() + + data, err := icqtypes.SerializeCosmosQuery(reqs) + if err != nil { + return 0, cerrs.Wrap(err, "could not serialize reqs into cosmos query") + } + icqPacketData := icqtypes.InterchainQueryPacketData{ + Data: data, + } + + return k.createOutgoingPacket(ctx, sourcePort, sourceChannel, destinationPort, destinationChannel, chanCap, icqPacketData, timeoutTimestamp) } -// TODO[1760]: async-icq -// func (k Keeper) createOutgoingPacket( -// ctx sdk.Context, -// sourcePort, -// sourceChannel, -// destinationPort, -// destinationChannel string, -// chanCap *capabilitytypes.Capability, -// icqPacketData icqtypes.InterchainQueryPacketData, -// timeoutTimestamp uint64, -// ) (uint64, error) { -// if err := icqPacketData.ValidateBasic(); err != nil { -// return 0, cerrs.Wrap(err, "invalid interchain query packet data") -// } -// -// // get the next sequence -// sequence, found := k.channelKeeper.GetNextSequenceSend(ctx, sourcePort, sourceChannel) -// if !found { -// return 0, cerrs.Wrapf(channeltypes.ErrSequenceSendNotFound, "failed to retrieve next sequence send for channel %s on port %s", sourceChannel, sourcePort) -// } -// -// packet := channeltypes.NewPacket( -// icqPacketData.GetBytes(), -// sequence, -// sourcePort, -// sourceChannel, -// destinationPort, -// destinationChannel, -// clienttypes.ZeroHeight(), -// timeoutTimestamp, -// ) -// -// if _, err := k.ics4Wrapper.SendPacket(ctx, chanCap, packet.SourcePort, packet.SourceChannel, packet.TimeoutHeight, packet.TimeoutTimestamp, packet.Data); err != nil { -// return 0, err -// } -// -// return packet.Sequence, nil -// } +func (k Keeper) createOutgoingPacket( + ctx sdk.Context, + sourcePort, + sourceChannel, + destinationPort, + destinationChannel string, + chanCap *capabilitytypes.Capability, + icqPacketData icqtypes.InterchainQueryPacketData, + timeoutTimestamp uint64, +) (uint64, error) { + if err := icqPacketData.ValidateBasic(); err != nil { + return 0, cerrs.Wrap(err, "invalid interchain query packet data") + } + + // get the next sequence + sequence, found := k.channelKeeper.GetNextSequenceSend(ctx, sourcePort, sourceChannel) + if !found { + return 0, cerrs.Wrapf(channeltypes.ErrSequenceSendNotFound, "failed to retrieve next sequence send for channel %s on port %s", sourceChannel, sourcePort) + } + + packet := channeltypes.NewPacket( + icqPacketData.GetBytes(), + sequence, + sourcePort, + sourceChannel, + destinationPort, + destinationChannel, + clienttypes.ZeroHeight(), + timeoutTimestamp, + ) + + if _, err := k.ics4Wrapper.SendPacket(ctx, chanCap, packet.SourcePort, packet.SourceChannel, packet.TimeoutHeight, packet.TimeoutTimestamp, packet.Data); err != nil { + return 0, err + } + + return packet.Sequence, nil +} // OnAcknowledgementPacket reacts to an Acknowledgement packet. func (k Keeper) OnAcknowledgementPacket( @@ -97,37 +93,36 @@ func (k Keeper) OnAcknowledgementPacket( ) error { switch resp := ack.Response.(type) { case *channeltypes.Acknowledgement_Result: - // TODO[1760]: async-icq - // var ackData icqtypes.InterchainQueryPacketAck - // if err := icqtypes.ModuleCdc.UnmarshalJSON(resp.Result, &ackData); err != nil { - // return cerrs.Wrap(err, "failed to unmarshal interchain query packet ack") - // } - // resps, err := icqtypes.DeserializeCosmosResponse(ackData.Data) - // if err != nil { - // return cerrs.Wrap(err, "could not deserialize data to cosmos response") - // } - // - // if len(resps) < 1 { - // return cerrs.Wrap(sdkerrors.ErrInvalidRequest, "no responses in interchain query packet ack") - // } - // - // var r types.QueryOracleResponse - // if err = k.cdc.Unmarshal(resps[0].Value, &r); err != nil { - // return cerrs.Wrapf(err, "failed to unmarshal interchain query response to type %T", resp) - // } - // - // err = ctx.EventManager().EmitTypedEvent(&types.EventOracleQuerySuccess{ - // SequenceId: strconv.FormatUint(modulePacket.Sequence, 10), - // Result: string(resp.Result), - // Channel: modulePacket.DestinationChannel, - // }) - // - // k.Logger(ctx).Info("interchain query ack response", "sequence", modulePacket.Sequence, "response", r) - // - // if err != nil { - // k.Logger(ctx).Error("interchain query ack response was unable to emit event", "sequence", modulePacket.Sequence, "error", err) - // return err - // } + var ackData icqtypes.InterchainQueryPacketAck + if err := icqtypes.ModuleCdc.UnmarshalJSON(resp.Result, &ackData); err != nil { + return cerrs.Wrap(err, "failed to unmarshal interchain query packet ack") + } + resps, err := icqtypes.DeserializeCosmosResponse(ackData.Data) + if err != nil { + return cerrs.Wrap(err, "could not deserialize data to cosmos response") + } + + if len(resps) < 1 { + return cerrs.Wrap(sdkerrors.ErrInvalidRequest, "no responses in interchain query packet ack") + } + + var r types.QueryOracleResponse + if err = k.cdc.Unmarshal(resps[0].Value, &r); err != nil { + return cerrs.Wrapf(err, "failed to unmarshal interchain query response to type %T", resp) + } + + err = ctx.EventManager().EmitTypedEvent(&types.EventOracleQuerySuccess{ + SequenceId: strconv.FormatUint(modulePacket.Sequence, 10), + Result: string(resp.Result), + Channel: modulePacket.DestinationChannel, + }) + + k.Logger(ctx).Info("interchain query ack response", "sequence", modulePacket.Sequence, "response", r) + + if err != nil { + k.Logger(ctx).Error("interchain query ack response was unable to emit event", "sequence", modulePacket.Sequence, "error", err) + return err + } return cerrs.Wrapf(sdkerrors.ErrNotSupported, "not yet updated") case *channeltypes.Acknowledgement_Error: err := ctx.EventManager().EmitTypedEvent(&types.EventOracleQueryError{ diff --git a/x/oracle/keeper/relay_test.go b/x/oracle/keeper/relay_test.go index c80628f7a3..09e45caca9 100644 --- a/x/oracle/keeper/relay_test.go +++ b/x/oracle/keeper/relay_test.go @@ -4,13 +4,13 @@ import ( "fmt" "strconv" - "github.com/gogo/protobuf/proto" + "github.com/cosmos/gogoproto/proto" abci "github.com/cometbft/cometbft/abci/types" cerrs "cosmossdk.io/errors" - // icqtypes "github.com/cosmos/ibc-apps/modules/async-icq/v7/types" // TODO[1760]: async-icq + icqtypes "github.com/cosmos/ibc-apps/modules/async-icq/v8/types" "github.com/cosmos/cosmos-sdk/codec" sdktypes "github.com/cosmos/cosmos-sdk/types" @@ -152,56 +152,48 @@ func (s *KeeperTestSuite) TestOnTimeoutPacket() { } func createICQResponse(cdc codec.Codec, response string) []byte { - // TODO[1760]: async-icq - // oracleResponse := types.QueryOracleResponse{ - // Data: []byte("{}"), - // } - // value, _ := cdc.Marshal(&oracleResponse) - // bytes, _ := icqtypes.SerializeCosmosResponse([]abci.ResponseQuery{{ - // Value: value, - // }}) - // - // icqPacket := icqtypes.InterchainQueryPacketAck{ - // Data: bytes, - // } - // icqBytes, _ := icqtypes.ModuleCdc.MarshalJSON(&icqPacket) - // return icqBytes - return []byte("not yet updated") + oracleResponse := types.QueryOracleResponse{ + Data: []byte("{}"), + } + value, _ := cdc.Marshal(&oracleResponse) + bytes, _ := icqtypes.SerializeCosmosResponse([]abci.ResponseQuery{{ + Value: value, + }}) + + icqPacket := icqtypes.InterchainQueryPacketAck{ + Data: bytes, + } + icqBytes, _ := icqtypes.ModuleCdc.MarshalJSON(&icqPacket) + return icqBytes } func createInvalidICQPacketAck() []byte { - // TODO[1760]: async-icq - // icqPacket := icqtypes.InterchainQueryPacketAck{ - // Data: []byte("abc"), - // } - // icqBytes, _ := icqtypes.ModuleCdc.MarshalJSON(&icqPacket) - // return icqBytes - return []byte("not yet updated") + icqPacket := icqtypes.InterchainQueryPacketAck{ + Data: []byte("abc"), + } + icqBytes, _ := icqtypes.ModuleCdc.MarshalJSON(&icqPacket) + return icqBytes } func createEmptyICQPacketAck() []byte { - // TODO[1760]: async-icq - // bytes, _ := icqtypes.SerializeCosmosResponse([]abci.ResponseQuery{}) - // - // icqPacket := icqtypes.InterchainQueryPacketAck{ - // Data: bytes, - // } - // - // icqBytes, _ := icqtypes.ModuleCdc.MarshalJSON(&icqPacket) - // return icqBytes - return []byte("not yet updated") + bytes, _ := icqtypes.SerializeCosmosResponse([]abci.ResponseQuery{}) + + icqPacket := icqtypes.InterchainQueryPacketAck{ + Data: bytes, + } + + icqBytes, _ := icqtypes.ModuleCdc.MarshalJSON(&icqPacket) + return icqBytes } func createInvalidCosmosResponse() []byte { - // TODO[1760]: async-icq - // bytes, _ := icqtypes.SerializeCosmosResponse([]abci.ResponseQuery{{ - // Value: []byte("baddata"), - // }}) - // - // icqPacket := icqtypes.InterchainQueryPacketAck{ - // Data: bytes, - // } - // icqBytes, _ := icqtypes.ModuleCdc.MarshalJSON(&icqPacket) - // return icqBytes - return []byte("not yet updated") + bytes, _ := icqtypes.SerializeCosmosResponse([]abci.ResponseQuery{{ + Value: []byte("baddata"), + }}) + + icqPacket := icqtypes.InterchainQueryPacketAck{ + Data: bytes, + } + icqBytes, _ := icqtypes.ModuleCdc.MarshalJSON(&icqPacket) + return icqBytes } diff --git a/x/oracle/module/module_ibc.go b/x/oracle/module/module_ibc.go index f20dae0c18..7cab0de1a1 100644 --- a/x/oracle/module/module_ibc.go +++ b/x/oracle/module/module_ibc.go @@ -3,7 +3,7 @@ package oracle import ( cerrs "cosmossdk.io/errors" - // icqtypes "github.com/cosmos/ibc-apps/modules/async-icq/v7/types" // TODO[1760]: async-icq + icqtypes "github.com/cosmos/ibc-apps/modules/async-icq/v8/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" @@ -128,8 +128,7 @@ func (am AppModule) OnRecvPacket( _ channeltypes.Packet, _ sdk.AccAddress, ) ibcexported.Acknowledgement { - // return channeltypes.NewErrorAcknowledgement(cerrs.Wrapf(icqtypes.ErrInvalidChannelFlow, "oracle module can not receive packets")) // TODO[1760]: async-icq - return channeltypes.NewErrorAcknowledgement(cerrs.Wrapf(sdkerrors.ErrNotSupported, "not yet updated")) + return channeltypes.NewErrorAcknowledgement(cerrs.Wrapf(icqtypes.ErrInvalidChannelFlow, "oracle module can not receive packets")) } // OnAcknowledgementPacket implements the IBCModule interface diff --git a/x/oracle/types/codec.go b/x/oracle/types/codec.go index 14841c0fc2..efc2c341d2 100644 --- a/x/oracle/types/codec.go +++ b/x/oracle/types/codec.go @@ -1,7 +1,7 @@ package types import ( - "github.com/gogo/protobuf/proto" + "github.com/cosmos/gogoproto/proto" "github.com/cosmos/cosmos-sdk/codec" cdctypes "github.com/cosmos/cosmos-sdk/codec/types" diff --git a/x/oracle/types/event.pb.go b/x/oracle/types/event.pb.go index 7dd3d9462d..fb80bee934 100644 --- a/x/oracle/types/event.pb.go +++ b/x/oracle/types/event.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/oracle/types/genesis.pb.go b/x/oracle/types/genesis.pb.go index 9cb13dfa61..04d202159d 100644 --- a/x/oracle/types/genesis.pb.go +++ b/x/oracle/types/genesis.pb.go @@ -5,8 +5,8 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/oracle/types/keys.go b/x/oracle/types/keys.go index 9f6161dd2e..0c2a13b89a 100644 --- a/x/oracle/types/keys.go +++ b/x/oracle/types/keys.go @@ -1,6 +1,6 @@ package types -// import icqtypes "github.com/cosmos/ibc-apps/modules/async-icq/v7/types" // TODO[1760]: async-icq +import icqtypes "github.com/cosmos/ibc-apps/modules/async-icq/v8/types" const ( // ModuleName defines the module name @@ -13,7 +13,7 @@ const ( MemStoreKey = "mem_interquery" // Version defines the current version the IBC module supports - Version = "icq-1" // icqtypes.Version // TODO[1760]: async-icq + Version = icqtypes.Version // PortID is the default port id that module binds to PortID = "oracle" diff --git a/x/oracle/types/query.pb.go b/x/oracle/types/query.pb.go index d30296b904..7b893f0fb4 100644 --- a/x/oracle/types/query.pb.go +++ b/x/oracle/types/query.pb.go @@ -8,9 +8,9 @@ import ( fmt "fmt" github_com_CosmWasm_wasmd_x_wasm_types "github.com/CosmWasm/wasmd/x/wasm/types" _ "github.com/cosmos/cosmos-proto" - _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" diff --git a/x/oracle/types/query.pb.gw.go b/x/oracle/types/query.pb.gw.go index 890ce9af78..1bd5a6a939 100644 --- a/x/oracle/types/query.pb.gw.go +++ b/x/oracle/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 func request_Query_OracleAddress_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryOracleAddressRequest @@ -88,12 +90,14 @@ func local_request_Query_Oracle_0(ctx context.Context, marshaler runtime.Marshal // 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_OracleAddress_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 { @@ -101,6 +105,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_OracleAddress_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) @@ -114,6 +119,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Oracle_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 { @@ -121,6 +128,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Oracle_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/oracle/types/tx.pb.go b/x/oracle/types/tx.pb.go index 348db4fe6a..c835944cb1 100644 --- a/x/oracle/types/tx.pb.go +++ b/x/oracle/types/tx.pb.go @@ -8,9 +8,9 @@ import ( fmt "fmt" github_com_CosmWasm_wasmd_x_wasm_types "github.com/CosmWasm/wasmd/x/wasm/types" _ "github.com/cosmos/cosmos-proto" - _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" diff --git a/x/reward/keeper/rules_test.go b/x/reward/keeper/rules_test.go index 77219de5c9..4cc389b26e 100644 --- a/x/reward/keeper/rules_test.go +++ b/x/reward/keeper/rules_test.go @@ -508,7 +508,7 @@ func (s *KeeperTestSuite) createTestValidators(amount int) { validator := teststaking.NewValidator(s.T(), valAddrs[i], PKs[i]) tokens := s.app.StakingKeeper.TokensFromConsensusPower(s.ctx, int64(1+amount-i)) validator, _ = validator.AddTokensFromDel(tokens) - validator = keeper.TestingUpdateValidator(&s.app.StakingKeeper, s.ctx, validator, true) + validator = keeper.TestingUpdateValidator(s.app.StakingKeeper, s.ctx, validator, true) validators = append(validators, validator) // Create the delegations diff --git a/x/reward/types/genesis.pb.go b/x/reward/types/genesis.pb.go index e812243dc4..745d97d365 100644 --- a/x/reward/types/genesis.pb.go +++ b/x/reward/types/genesis.pb.go @@ -5,8 +5,8 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/reward/types/query.pb.go b/x/reward/types/query.pb.go index 2cee3178be..2ff42c21b4 100644 --- a/x/reward/types/query.pb.go +++ b/x/reward/types/query.pb.go @@ -8,9 +8,9 @@ import ( fmt "fmt" types "github.com/cosmos/cosmos-sdk/types" query "github.com/cosmos/cosmos-sdk/types/query" - _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" diff --git a/x/reward/types/query.pb.gw.go b/x/reward/types/query.pb.gw.go index 2ec87b7fae..b4df807957 100644 --- a/x/reward/types/query.pb.gw.go +++ b/x/reward/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 func request_Query_RewardProgramByID_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryRewardProgramByIDRequest @@ -308,12 +310,14 @@ func local_request_Query_RewardDistributionsByAddress_0(ctx context.Context, mar // 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_RewardProgramByID_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 { @@ -321,6 +325,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_RewardProgramByID_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) @@ -334,6 +339,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_RewardPrograms_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 { @@ -341,6 +348,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_RewardPrograms_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) @@ -354,6 +362,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_ClaimPeriodRewardDistributions_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 { @@ -361,6 +371,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_ClaimPeriodRewardDistributions_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) @@ -374,6 +385,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_ClaimPeriodRewardDistributionsByID_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 { @@ -381,6 +394,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_ClaimPeriodRewardDistributionsByID_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) @@ -394,6 +408,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_RewardDistributionsByAddress_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 { @@ -401,6 +417,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_RewardDistributionsByAddress_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/reward/types/reward.pb.go b/x/reward/types/reward.pb.go index 3a3d832dd3..667f4cac2a 100644 --- a/x/reward/types/reward.pb.go +++ b/x/reward/types/reward.pb.go @@ -1,21 +1,16 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. // source: provenance/reward/v1/reward.proto -// TODO[1760]: proto: Regenerate this file with updated library references for .Dec and .Int in the protos. -// This file has been manually modified for the v0.50 update. -// The github_com_cosmos_cosmos_sdk_types.Dec and .Int types have moved to the sdkmath library. -// In order to make this code to compile (without needed to update protos and regenerate), this -// file has been manually fixed to use the correct library for those types. - package types import ( + cosmossdk_io_math "cosmossdk.io/math" fmt "fmt" - sdkmath "cosmossdk.io/math" + _ "github.com/cosmos/cosmos-proto" types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" @@ -529,6 +524,7 @@ type QualifyingAction struct { // type of action to process // // Types that are valid to be assigned to Type: + // // *QualifyingAction_Delegate // *QualifyingAction_Transfer // *QualifyingAction_Vote @@ -683,9 +679,9 @@ type ActionDelegate struct { // Maximum amount that the user must have currently delegated on the validator. MaximumDelegationAmount *types.Coin `protobuf:"bytes,4,opt,name=maximum_delegation_amount,json=maximumDelegationAmount,proto3" json:"maximum_delegation_amount,omitempty"` // Minimum percentile that can be below the validator's power ranking. - MinimumActiveStakePercentile sdkmath.LegacyDec `protobuf:"bytes,5,opt,name=minimum_active_stake_percentile,json=minimumActiveStakePercentile,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"minimum_active_stake_percentile"` + MinimumActiveStakePercentile cosmossdk_io_math.LegacyDec `protobuf:"bytes,5,opt,name=minimum_active_stake_percentile,json=minimumActiveStakePercentile,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"minimum_active_stake_percentile"` // Maximum percentile that can be below the validator's power ranking. - MaximumActiveStakePercentile sdkmath.LegacyDec `protobuf:"bytes,6,opt,name=maximum_active_stake_percentile,json=maximumActiveStakePercentile,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"maximum_active_stake_percentile"` + MaximumActiveStakePercentile cosmossdk_io_math.LegacyDec `protobuf:"bytes,6,opt,name=maximum_active_stake_percentile,json=maximumActiveStakePercentile,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"maximum_active_stake_percentile"` } func (m *ActionDelegate) Reset() { *m = ActionDelegate{} } @@ -960,99 +956,100 @@ func init() { func init() { proto.RegisterFile("provenance/reward/v1/reward.proto", fileDescriptor_0c3894741a216575) } var fileDescriptor_0c3894741a216575 = []byte{ - // 1461 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x57, 0xbd, 0x73, 0xdb, 0xc6, - 0x12, 0x17, 0x24, 0x4a, 0x96, 0x96, 0x22, 0x45, 0x9e, 0x29, 0x0b, 0xd6, 0xf8, 0x91, 0xb2, 0xfc, - 0xc6, 0x4f, 0xef, 0xbd, 0x18, 0x8c, 0x94, 0x8c, 0x8b, 0xa4, 0xc8, 0x90, 0x22, 0x15, 0x33, 0xb1, - 0x65, 0x05, 0xa4, 0xe2, 0x4c, 0x5c, 0x60, 0x8e, 0xc0, 0x91, 0xc6, 0x18, 0xc0, 0xd1, 0xc0, 0x91, - 0xa1, 0xba, 0x94, 0x29, 0x5d, 0x26, 0x9d, 0xff, 0x1c, 0xa7, 0x73, 0x99, 0x49, 0xe1, 0x64, 0xec, - 0x14, 0xa9, 0x5d, 0xa5, 0xcc, 0xdc, 0x07, 0x48, 0x90, 0xa2, 0x6d, 0x29, 0x1f, 0x45, 0x2a, 0xe9, - 0x6e, 0x77, 0x7f, 0xfb, 0x71, 0xbf, 0xdd, 0x05, 0xe1, 0x6a, 0x2f, 0xa4, 0x03, 0x12, 0xe0, 0xc0, - 0x26, 0xe5, 0x90, 0x7c, 0x85, 0x43, 0xa7, 0x3c, 0xd8, 0x55, 0xff, 0x19, 0xbd, 0x90, 0x32, 0x8a, - 0x0a, 0x63, 0x15, 0x43, 0x09, 0x06, 0xbb, 0x9b, 0x85, 0x2e, 0xed, 0x52, 0xa1, 0x50, 0xe6, 0xff, - 0x49, 0xdd, 0xcd, 0x52, 0x97, 0xd2, 0xae, 0x47, 0xca, 0xe2, 0xd4, 0xee, 0x77, 0xca, 0xcc, 0xf5, - 0x49, 0xc4, 0xb0, 0xdf, 0x53, 0x0a, 0x45, 0x9b, 0x46, 0x3e, 0x8d, 0xca, 0x6d, 0x1c, 0x91, 0xf2, - 0x60, 0xb7, 0x4d, 0x18, 0xde, 0x2d, 0xdb, 0xd4, 0x0d, 0xa4, 0x7c, 0xfb, 0x55, 0x1a, 0x32, 0xa6, - 0x70, 0x72, 0x14, 0xd2, 0x6e, 0x88, 0x7d, 0x94, 0x85, 0x79, 0xd7, 0xd1, 0xb5, 0x2d, 0x6d, 0x27, - 0x65, 0xce, 0xbb, 0x0e, 0x2a, 0xc0, 0x22, 0x73, 0x99, 0x47, 0xf4, 0xf9, 0x2d, 0x6d, 0x67, 0xc5, - 0x94, 0x07, 0xb4, 0x05, 0x69, 0x87, 0x44, 0x76, 0xe8, 0xf6, 0x98, 0x4b, 0x03, 0x7d, 0x41, 0xc8, - 0x92, 0x57, 0xe8, 0x26, 0x6c, 0x38, 0x6e, 0xc4, 0x42, 0xb7, 0xdd, 0x67, 0xc4, 0xea, 0x84, 0xd4, - 0xb7, 0xb0, 0xe3, 0x84, 0x24, 0x8a, 0xf4, 0x94, 0xd0, 0x5e, 0x1f, 0x8b, 0x0f, 0x42, 0xea, 0x57, - 0xa4, 0x10, 0x7d, 0x0a, 0x79, 0x46, 0x19, 0xf6, 0x2c, 0x99, 0xbb, 0xd5, 0xa3, 0xd4, 0xd3, 0x17, - 0xb7, 0xb4, 0x9d, 0xf4, 0xde, 0x65, 0x43, 0x66, 0x63, 0xf0, 0x6c, 0x0c, 0x95, 0x8d, 0xb1, 0x4f, - 0xdd, 0xa0, 0x9a, 0x7a, 0xfa, 0xbc, 0x34, 0x67, 0xae, 0x09, 0x4b, 0x95, 0x0f, 0xa5, 0x1e, 0x3a, - 0x86, 0x4b, 0x21, 0xf1, 0xb1, 0x1b, 0xb8, 0x41, 0x57, 0x20, 0x59, 0x6d, 0xec, 0xf1, 0xca, 0xea, - 0x4b, 0x67, 0x43, 0x2c, 0x8c, 0xcc, 0x39, 0x5e, 0x55, 0x1a, 0xa3, 0x03, 0xc8, 0xda, 0x1e, 0x76, - 0x7d, 0xe2, 0x58, 0xd8, 0xa7, 0xfd, 0x80, 0xe9, 0x17, 0xce, 0x06, 0x97, 0x51, 0x66, 0x15, 0x61, - 0x85, 0x4c, 0x58, 0xf7, 0xf1, 0x30, 0xce, 0xb4, 0x7d, 0x32, 0xaa, 0xd0, 0xf2, 0xd9, 0xe0, 0x90, - 0x8f, 0x87, 0x32, 0xdb, 0xea, 0x49, 0x5c, 0xbf, 0x7b, 0xb0, 0xe1, 0xbb, 0x81, 0xeb, 0xf7, 0x7d, - 0x2b, 0xa4, 0x9e, 0x47, 0x07, 0x24, 0x8c, 0x83, 0x5c, 0x39, 0x1b, 0xea, 0xba, 0xb2, 0x37, 0x95, - 0xb9, 0x0a, 0xf6, 0x5d, 0x28, 0x88, 0xe8, 0xad, 0x1e, 0x09, 0x5d, 0xea, 0x58, 0x11, 0xb1, 0x69, - 0xe0, 0x44, 0x3a, 0x08, 0xaa, 0x20, 0x21, 0x3b, 0x12, 0xa2, 0xa6, 0x94, 0x20, 0x13, 0x50, 0x4f, - 0xb2, 0xca, 0x8a, 0x18, 0x0e, 0x99, 0xc5, 0xd9, 0xa9, 0xa7, 0x45, 0x14, 0x9b, 0x86, 0xa4, 0xae, - 0x11, 0x53, 0xd7, 0x68, 0xc5, 0xd4, 0xad, 0x2e, 0xf3, 0x30, 0x1e, 0xff, 0x54, 0xd2, 0xcc, 0x9c, - 0xb2, 0x6f, 0x72, 0x73, 0xae, 0x80, 0x2c, 0xb8, 0x4c, 0x86, 0x3d, 0x62, 0x33, 0xe2, 0x58, 0x31, - 0x38, 0x09, 0x1c, 0x09, 0xbd, 0x7a, 0x0e, 0xe8, 0x4b, 0x31, 0x8c, 0x22, 0x7e, 0x3d, 0x70, 0x84, - 0x83, 0x63, 0x28, 0x4c, 0xe3, 0x5a, 0x3e, 0x1e, 0xea, 0x99, 0x73, 0x60, 0xe7, 0x7b, 0x13, 0x98, - 0x77, 0xf0, 0x10, 0xdd, 0x83, 0xf5, 0x89, 0xea, 0x8d, 0x62, 0xce, 0x9e, 0x03, 0x37, 0x59, 0xe4, - 0x38, 0xde, 0xfb, 0xb0, 0x81, 0x6d, 0xd6, 0xc7, 0xde, 0xe9, 0x72, 0xac, 0x9d, 0x03, 0xba, 0x20, - 0x41, 0xa6, 0x8a, 0x71, 0x0d, 0x32, 0xc9, 0xa8, 0x23, 0x3d, 0x27, 0x1e, 0x7b, 0x35, 0x11, 0x47, - 0x24, 0x88, 0xd1, 0x0f, 0x43, 0x12, 0x30, 0x2b, 0xa9, 0xac, 0xe7, 0x15, 0x31, 0xa4, 0x6c, 0x7f, - 0x6c, 0x82, 0x3e, 0x84, 0x4d, 0xc1, 0xfb, 0x98, 0x9f, 0x93, 0x3e, 0x90, 0xb0, 0xdb, 0xe0, 0xdc, - 0x56, 0x0a, 0xfb, 0x49, 0x77, 0x1f, 0xc1, 0x62, 0xc4, 0x30, 0x23, 0xfa, 0xc5, 0x2d, 0x6d, 0x27, - 0xbb, 0xf7, 0x5f, 0x63, 0xd6, 0xbc, 0x34, 0x26, 0x86, 0x9a, 0xd1, 0xe4, 0x06, 0xa6, 0xb4, 0x43, - 0xff, 0x87, 0x3c, 0x19, 0xf6, 0xdc, 0x10, 0xf3, 0x39, 0x65, 0xd1, 0x4e, 0x27, 0x22, 0x4c, 0x2f, - 0x08, 0xa7, 0xb9, 0xb1, 0xe0, 0xae, 0xb8, 0x47, 0xf7, 0x01, 0x3d, 0xea, 0x63, 0xcf, 0xed, 0x9c, - 0xf0, 0x11, 0x82, 0x6d, 0x2e, 0x8a, 0xf4, 0xf5, 0xad, 0x85, 0x9d, 0xf4, 0xde, 0xf5, 0xd9, 0xae, - 0x3f, 0x1b, 0xe9, 0x57, 0x84, 0xba, 0x6a, 0xab, 0xfc, 0xa3, 0xa9, 0xfb, 0x68, 0xfb, 0x21, 0x2c, - 0x8a, 0xc8, 0xd0, 0x3a, 0xe4, 0x9b, 0xad, 0x4a, 0xab, 0x6e, 0x1d, 0x1f, 0x36, 0x8f, 0xea, 0xfb, - 0x8d, 0x83, 0x46, 0xbd, 0x96, 0x9b, 0x43, 0x79, 0xc8, 0xc8, 0xeb, 0xa3, 0xfa, 0x61, 0xad, 0x71, - 0xf8, 0x71, 0x4e, 0x1b, 0x5f, 0x35, 0x5b, 0x15, 0xb3, 0x55, 0xaf, 0xe5, 0xe6, 0x11, 0x82, 0xac, - 0xbc, 0x3a, 0x68, 0x1c, 0x36, 0x9a, 0xb7, 0xea, 0xb5, 0xdc, 0xc2, 0x58, 0xad, 0xfe, 0xc5, 0x51, - 0xc3, 0xac, 0xd7, 0x72, 0xa9, 0x0f, 0x96, 0xbf, 0x7d, 0x52, 0xd2, 0x7e, 0x7d, 0x52, 0xd2, 0xb6, - 0xbf, 0x5e, 0x80, 0x7f, 0x25, 0x4a, 0x2a, 0x4b, 0x55, 0x8b, 0xa7, 0x31, 0x1f, 0xde, 0xd7, 0x61, - 0x6d, 0x82, 0xad, 0xa3, 0x8d, 0x90, 0x49, 0xbc, 0x7c, 0xc3, 0x41, 0xff, 0x83, 0x7c, 0x3c, 0xa6, - 0x15, 0xf9, 0x5c, 0x47, 0x2c, 0x8a, 0x94, 0xb9, 0x16, 0x26, 0x5f, 0xa0, 0xe1, 0x20, 0x0f, 0xae, - 0x25, 0x07, 0x7b, 0x24, 0xe7, 0x71, 0x87, 0x4e, 0x3e, 0xbf, 0x58, 0x25, 0x67, 0x18, 0x52, 0xc5, - 0xc4, 0xa8, 0x8f, 0xf8, 0x6c, 0x3e, 0xa0, 0x49, 0x9a, 0xa0, 0x2a, 0xac, 0x26, 0xfd, 0x88, 0x9d, - 0x73, 0x06, 0xd8, 0x74, 0x38, 0x46, 0x44, 0x57, 0x61, 0x55, 0x46, 0x1c, 0x3d, 0xc0, 0x21, 0x89, - 0xc4, 0x16, 0x5a, 0x30, 0xd3, 0xe2, 0xae, 0x29, 0xae, 0xd0, 0x3b, 0x80, 0xa6, 0xdb, 0x9a, 0x38, - 0x62, 0xb9, 0x2c, 0x9b, 0xb9, 0xc9, 0x6e, 0x25, 0x4e, 0xe2, 0x09, 0x5e, 0x2d, 0x00, 0x92, 0xc1, - 0x57, 0x6c, 0x9b, 0x8f, 0x57, 0xc9, 0x83, 0x99, 0xf5, 0xd4, 0x66, 0xd7, 0x73, 0xc6, 0x1b, 0xcd, - 0xcf, 0x7a, 0x23, 0x1d, 0x2e, 0xc4, 0x6b, 0x45, 0xae, 0xe9, 0xf8, 0x88, 0x3e, 0x81, 0xac, 0x24, - 0xb4, 0x25, 0x42, 0x20, 0xa1, 0x9e, 0x12, 0xbc, 0xbe, 0x36, 0x9b, 0xd7, 0x92, 0xb5, 0xfb, 0x52, - 0xd5, 0xcc, 0xe0, 0xe4, 0x91, 0x4f, 0x0a, 0x59, 0x25, 0x8b, 0xe0, 0x30, 0x20, 0x8e, 0x28, 0x56, - 0xca, 0x5c, 0x95, 0x97, 0x75, 0x71, 0x87, 0xee, 0x81, 0x9c, 0x1c, 0x7c, 0x1d, 0xb0, 0x7e, 0x24, - 0xea, 0x94, 0xdd, 0x7b, 0xff, 0x4d, 0x1d, 0x9c, 0x2c, 0x8f, 0x21, 0x1e, 0xb8, 0x29, 0x6c, 0xcd, - 0xb4, 0x3d, 0x3e, 0x6c, 0x7f, 0xa7, 0x41, 0x3a, 0x21, 0x44, 0x57, 0x40, 0xdf, 0xbf, 0x5d, 0x69, - 0xdc, 0xe1, 0x5d, 0xd2, 0x3a, 0x6e, 0x4e, 0xb5, 0xd5, 0x69, 0xa9, 0x38, 0x56, 0xaa, 0xb7, 0xeb, - 0x39, 0x0d, 0x6d, 0xc2, 0xa5, 0x09, 0xe9, 0x58, 0x36, 0x8f, 0x74, 0x28, 0x9c, 0x96, 0x89, 0x86, - 0x9b, 0x96, 0xcc, 0xea, 0xbb, 0x5f, 0x34, 0xc8, 0x4d, 0x0f, 0x07, 0x54, 0x85, 0x65, 0x87, 0x78, - 0xa4, 0xcb, 0x27, 0x9a, 0x26, 0x48, 0xfa, 0xef, 0x37, 0x95, 0xbf, 0xa6, 0x74, 0x6f, 0xcd, 0x99, - 0x23, 0x3b, 0x8e, 0xc1, 0x42, 0x1c, 0x44, 0x1d, 0x12, 0x0a, 0x0e, 0xbc, 0x05, 0xa3, 0xa5, 0x74, - 0x39, 0x46, 0x6c, 0x87, 0x6e, 0x42, 0x6a, 0x40, 0x19, 0x51, 0xfd, 0xb7, 0xf5, 0x26, 0xfb, 0xcf, - 0xa9, 0xf0, 0x2f, 0xf4, 0xc7, 0xe9, 0x55, 0x97, 0x20, 0xc5, 0x4e, 0x7a, 0x64, 0xbb, 0x07, 0xf9, - 0xe9, 0x2c, 0xa3, 0xd7, 0xcc, 0x51, 0xed, 0xaf, 0x99, 0xa3, 0xdf, 0xa4, 0x20, 0x3b, 0x59, 0x1e, - 0xf4, 0x1f, 0x58, 0x8b, 0x3f, 0x83, 0xc6, 0xce, 0x38, 0x23, 0xb3, 0xea, 0x3a, 0x0e, 0x8c, 0x2b, - 0xe2, 0xe1, 0x84, 0xe2, 0xbc, 0x52, 0x94, 0xd7, 0xb1, 0xe2, 0x31, 0x5c, 0x8e, 0x11, 0x55, 0xe1, - 0x79, 0xe7, 0xa8, 0x4f, 0xab, 0xb7, 0x4d, 0x2d, 0x33, 0xfe, 0x28, 0xab, 0x8d, 0x4c, 0xd5, 0x67, - 0x15, 0x87, 0x55, 0xfe, 0x4f, 0xc3, 0xa6, 0xde, 0x0e, 0x2b, 0x6d, 0x4f, 0xc1, 0xf6, 0xa1, 0x94, - 0xcc, 0x7f, 0x40, 0x78, 0xcf, 0x3d, 0x24, 0x7c, 0x58, 0xd8, 0x24, 0x60, 0xae, 0x47, 0x44, 0x87, - 0xae, 0x54, 0x0d, 0x5e, 0xd4, 0x1f, 0x9f, 0x97, 0xae, 0x77, 0x5d, 0xf6, 0xa0, 0xdf, 0x36, 0x6c, - 0xea, 0x97, 0xd5, 0x8f, 0x06, 0xf9, 0xe7, 0x46, 0xe4, 0x3c, 0x2c, 0xf3, 0x87, 0x8d, 0x8c, 0x1a, - 0xb1, 0xcd, 0x2b, 0x89, 0xfa, 0x0d, 0x48, 0x93, 0x83, 0x1e, 0x8d, 0x30, 0x85, 0xdb, 0x44, 0x35, - 0x67, 0xb9, 0x5d, 0xfa, 0x83, 0x6e, 0xc7, 0xaf, 0x71, 0xca, 0x6d, 0xa2, 0xc7, 0xbe, 0xd7, 0x62, - 0x2a, 0xc4, 0x2c, 0xff, 0x1b, 0xa8, 0x70, 0xff, 0xcf, 0x50, 0x41, 0xd1, 0xf8, 0x75, 0x84, 0x48, - 0xe4, 0xf2, 0x9b, 0x06, 0x30, 0xee, 0xb8, 0x7f, 0x58, 0x1e, 0x68, 0x17, 0x0a, 0x03, 0xec, 0xb9, - 0x0e, 0x66, 0x34, 0xb4, 0xfc, 0xbe, 0xc7, 0xdc, 0x9e, 0xe7, 0x8a, 0x1d, 0xc3, 0x43, 0xb9, 0x38, - 0x92, 0xdd, 0x19, 0x89, 0x12, 0xa9, 0x77, 0x20, 0x33, 0xb1, 0x6e, 0x50, 0x09, 0xd2, 0x6a, 0x57, - 0x71, 0x4e, 0x88, 0xc4, 0x57, 0x4c, 0x90, 0x57, 0xad, 0x93, 0x9e, 0x58, 0x9d, 0x41, 0xdf, 0x6f, - 0x93, 0xd0, 0xa2, 0x9d, 0xa9, 0xb4, 0xd7, 0xa4, 0xe0, 0x6e, 0x47, 0xe5, 0x9d, 0x98, 0x59, 0xdd, - 0xa7, 0x2f, 0x8a, 0xda, 0xb3, 0x17, 0x45, 0xed, 0xe7, 0x17, 0x45, 0xed, 0xf1, 0xcb, 0xe2, 0xdc, - 0xb3, 0x97, 0xc5, 0xb9, 0x1f, 0x5e, 0x16, 0xe7, 0x60, 0xc3, 0xa5, 0x33, 0xc7, 0xd2, 0x91, 0xf6, - 0xe5, 0x5e, 0x82, 0xb3, 0x63, 0x95, 0x1b, 0x2e, 0x4d, 0x9c, 0xca, 0xc3, 0xf8, 0xf7, 0xbd, 0xe0, - 0x70, 0x7b, 0x49, 0x7c, 0x7d, 0xbf, 0xf7, 0x7b, 0x00, 0x00, 0x00, 0xff, 0xff, 0x96, 0xea, 0xde, - 0xc7, 0x01, 0x10, 0x00, 0x00, + // 1479 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x58, 0x4b, 0x73, 0x1b, 0x45, + 0x10, 0xf6, 0xda, 0xb2, 0x63, 0xb7, 0x2c, 0x59, 0x9a, 0xc8, 0xf1, 0xda, 0x04, 0xc9, 0x71, 0xa8, + 0x60, 0x1e, 0x91, 0xb0, 0xa1, 0x72, 0x80, 0x03, 0x25, 0x59, 0x32, 0x11, 0x24, 0x8e, 0x59, 0xc9, + 0x84, 0x22, 0x87, 0xad, 0xd1, 0xee, 0x48, 0xd9, 0xca, 0xee, 0x8e, 0xb2, 0x3b, 0x12, 0xf2, 0x8d, + 0x5f, 0x40, 0xe5, 0x08, 0xb7, 0xfc, 0x08, 0x7e, 0x44, 0xb8, 0xa5, 0x38, 0x51, 0x1c, 0x02, 0x95, + 0x70, 0xe0, 0x9c, 0x13, 0x47, 0x6a, 0x1e, 0x2b, 0xad, 0x64, 0x25, 0xb1, 0x79, 0x1c, 0xb8, 0x69, + 0xa6, 0xbb, 0xbf, 0x7e, 0xcc, 0xd7, 0xdd, 0x5b, 0x82, 0x4b, 0xdd, 0x80, 0xf6, 0x89, 0x8f, 0x7d, + 0x8b, 0x94, 0x02, 0xf2, 0x35, 0x0e, 0xec, 0x52, 0x7f, 0x47, 0xfd, 0x2a, 0x76, 0x03, 0xca, 0x28, + 0xca, 0x8d, 0x54, 0x8a, 0x4a, 0xd0, 0xdf, 0xd9, 0xc8, 0x75, 0x68, 0x87, 0x0a, 0x85, 0x12, 0xff, + 0x25, 0x75, 0x37, 0x0a, 0x1d, 0x4a, 0x3b, 0x2e, 0x29, 0x89, 0x53, 0xab, 0xd7, 0x2e, 0x31, 0xc7, + 0x23, 0x21, 0xc3, 0x5e, 0x57, 0x29, 0xe4, 0x2d, 0x1a, 0x7a, 0x34, 0x2c, 0xb5, 0x70, 0x48, 0x4a, + 0xfd, 0x9d, 0x16, 0x61, 0x78, 0xa7, 0x64, 0x51, 0xc7, 0x57, 0xf2, 0x75, 0x29, 0x37, 0x25, 0xb2, + 0x3c, 0x48, 0xd1, 0xd6, 0xf3, 0x24, 0xa4, 0x0c, 0xe1, 0xff, 0x30, 0xa0, 0x9d, 0x00, 0x7b, 0x28, + 0x0d, 0xb3, 0x8e, 0xad, 0x6b, 0x9b, 0xda, 0x76, 0xc2, 0x98, 0x75, 0x6c, 0x94, 0x83, 0x79, 0xe6, + 0x30, 0x97, 0xe8, 0xb3, 0x9b, 0xda, 0xf6, 0x92, 0x21, 0x0f, 0x68, 0x13, 0x92, 0x36, 0x09, 0xad, + 0xc0, 0xe9, 0x32, 0x87, 0xfa, 0xfa, 0x9c, 0x90, 0xc5, 0xaf, 0xd0, 0x35, 0x58, 0xb3, 0x9d, 0x90, + 0x05, 0x4e, 0xab, 0xc7, 0x88, 0xd9, 0x0e, 0xa8, 0x67, 0x62, 0xdb, 0x0e, 0x48, 0x18, 0xea, 0x09, + 0xa1, 0xbd, 0x3a, 0x12, 0xef, 0x07, 0xd4, 0x2b, 0x4b, 0x21, 0xfa, 0x0c, 0xb2, 0x8c, 0x32, 0xec, + 0x9a, 0xb2, 0x2c, 0x66, 0x97, 0x52, 0x57, 0x9f, 0xdf, 0xd4, 0xb6, 0x93, 0xbb, 0xeb, 0x45, 0x15, + 0x3b, 0x4f, 0xb4, 0xa8, 0x12, 0x2d, 0xee, 0x51, 0xc7, 0xaf, 0x24, 0x1e, 0x3d, 0x29, 0xcc, 0x18, + 0x2b, 0xc2, 0x52, 0xe5, 0x43, 0xa9, 0x8b, 0x8e, 0xe0, 0x42, 0x40, 0x3c, 0xec, 0xf8, 0x8e, 0xdf, + 0x11, 0x48, 0x66, 0x0b, 0xbb, 0xbc, 0xe8, 0xfa, 0xc2, 0xe9, 0x10, 0x73, 0x43, 0x73, 0x8e, 0x57, + 0x91, 0xc6, 0x68, 0x1f, 0xd2, 0x96, 0x8b, 0x1d, 0x8f, 0xd8, 0x26, 0xf6, 0x68, 0xcf, 0x67, 0xfa, + 0xb9, 0xd3, 0xc1, 0xa5, 0x94, 0x59, 0x59, 0x58, 0x21, 0x03, 0x56, 0x3d, 0x3c, 0x88, 0x32, 0x6d, + 0x1d, 0x0f, 0x2b, 0xb4, 0x78, 0x3a, 0x38, 0xe4, 0xe1, 0x81, 0xcc, 0xb6, 0x72, 0x1c, 0xd5, 0xef, + 0x36, 0xac, 0x79, 0x8e, 0xef, 0x78, 0x3d, 0xcf, 0x0c, 0xa8, 0xeb, 0xd2, 0x3e, 0x09, 0xa2, 0x20, + 0x97, 0x4e, 0x87, 0xba, 0xaa, 0xec, 0x0d, 0x65, 0xae, 0x82, 0x7d, 0x0f, 0x72, 0x22, 0x7a, 0xb3, + 0x4b, 0x02, 0x87, 0xda, 0x66, 0x48, 0x2c, 0xea, 0xdb, 0xa1, 0x0e, 0x82, 0x2a, 0x48, 0xc8, 0x0e, + 0x85, 0xa8, 0x21, 0x25, 0xc8, 0x00, 0xd4, 0x95, 0xac, 0x32, 0x43, 0x86, 0x03, 0x66, 0x72, 0xe2, + 0xea, 0x49, 0x11, 0xc5, 0x46, 0x51, 0xb2, 0xba, 0x18, 0xb1, 0xba, 0xd8, 0x8c, 0x58, 0x5d, 0x59, + 0xe4, 0x61, 0x3c, 0xf8, 0xb5, 0xa0, 0x19, 0x19, 0x65, 0xdf, 0xe0, 0xe6, 0x5c, 0x01, 0x99, 0xb0, + 0x4e, 0x06, 0x5d, 0x62, 0x31, 0x62, 0x9b, 0x11, 0x38, 0xf1, 0x6d, 0x09, 0xbd, 0x7c, 0x06, 0xe8, + 0x0b, 0x11, 0x8c, 0x22, 0x7e, 0xcd, 0xb7, 0x85, 0x83, 0x23, 0xc8, 0x4d, 0xe2, 0x9a, 0x1e, 0x1e, + 0xe8, 0xa9, 0x33, 0x60, 0x67, 0xbb, 0x63, 0x98, 0x37, 0xf1, 0x00, 0xdd, 0x86, 0xd5, 0xb1, 0xea, + 0x0d, 0x63, 0x4e, 0x9f, 0x01, 0x37, 0x5e, 0xe4, 0x28, 0xde, 0x3b, 0xb0, 0x86, 0x2d, 0xd6, 0xc3, + 0xee, 0xc9, 0x72, 0xac, 0x9c, 0x01, 0x3a, 0x27, 0x41, 0x26, 0x8a, 0x71, 0x19, 0x52, 0xf1, 0xa8, + 0x43, 0x3d, 0x23, 0x1e, 0x7b, 0x39, 0x16, 0x47, 0x28, 0x88, 0xd1, 0x0b, 0x02, 0xe2, 0x33, 0x33, + 0xae, 0xac, 0x67, 0x15, 0x31, 0xa4, 0x6c, 0x6f, 0x64, 0x82, 0x3e, 0x82, 0x0d, 0xc1, 0xfb, 0x88, + 0x9f, 0xe3, 0x3e, 0x90, 0xb0, 0x5b, 0xe3, 0xdc, 0x56, 0x0a, 0x7b, 0x71, 0x77, 0x1f, 0xc3, 0x7c, + 0xc8, 0x30, 0x23, 0xfa, 0xf9, 0x4d, 0x6d, 0x3b, 0xbd, 0xfb, 0x56, 0x71, 0xda, 0x28, 0x2d, 0x8e, + 0x0d, 0xb5, 0x62, 0x83, 0x1b, 0x18, 0xd2, 0x0e, 0xbd, 0x03, 0x59, 0x32, 0xe8, 0x3a, 0x01, 0xe6, + 0x73, 0xca, 0xa4, 0xed, 0x76, 0x48, 0x98, 0x9e, 0x13, 0x4e, 0x33, 0x23, 0xc1, 0x2d, 0x71, 0x8f, + 0xee, 0x00, 0xba, 0xdf, 0xc3, 0xae, 0xd3, 0x3e, 0xe6, 0x23, 0x04, 0x5b, 0x5c, 0x14, 0xea, 0xab, + 0x9b, 0x73, 0xdb, 0xc9, 0xdd, 0x2b, 0xd3, 0x5d, 0x7f, 0x3e, 0xd4, 0x2f, 0x0b, 0x75, 0xd5, 0x56, + 0xd9, 0xfb, 0x13, 0xf7, 0xe1, 0xd6, 0x3d, 0x98, 0x17, 0x91, 0xa1, 0x55, 0xc8, 0x36, 0x9a, 0xe5, + 0x66, 0xcd, 0x3c, 0x3a, 0x68, 0x1c, 0xd6, 0xf6, 0xea, 0xfb, 0xf5, 0x5a, 0x35, 0x33, 0x83, 0xb2, + 0x90, 0x92, 0xd7, 0x87, 0xb5, 0x83, 0x6a, 0xfd, 0xe0, 0x93, 0x8c, 0x36, 0xba, 0x6a, 0x34, 0xcb, + 0x46, 0xb3, 0x56, 0xcd, 0xcc, 0x22, 0x04, 0x69, 0x79, 0xb5, 0x5f, 0x3f, 0xa8, 0x37, 0xae, 0xd7, + 0xaa, 0x99, 0xb9, 0x91, 0x5a, 0xed, 0xcb, 0xc3, 0xba, 0x51, 0xab, 0x66, 0x12, 0x1f, 0x2e, 0x7e, + 0xf7, 0xb0, 0xa0, 0xfd, 0xf1, 0xb0, 0xa0, 0x6d, 0x7d, 0x33, 0x07, 0xaf, 0xc7, 0x4a, 0x2a, 0x4b, + 0x55, 0x8d, 0xa6, 0x31, 0x1f, 0xde, 0x57, 0x60, 0x65, 0x8c, 0xad, 0xc3, 0x8d, 0x90, 0x8a, 0xbd, + 0x7c, 0xdd, 0x46, 0x6f, 0x43, 0x36, 0x1a, 0xd3, 0x8a, 0x7c, 0x8e, 0x2d, 0x16, 0x45, 0xc2, 0x58, + 0x09, 0xe2, 0x2f, 0x50, 0xb7, 0x91, 0x0b, 0x97, 0xe3, 0x83, 0x3d, 0x94, 0xf3, 0xb8, 0x4d, 0xc7, + 0x9f, 0x5f, 0xac, 0x92, 0x53, 0x0c, 0xa9, 0x7c, 0x6c, 0xd4, 0x87, 0x7c, 0x36, 0xef, 0xd3, 0x38, + 0x4d, 0x50, 0x05, 0x96, 0xe3, 0x7e, 0xc4, 0xce, 0x39, 0x05, 0x6c, 0x32, 0x18, 0x21, 0xa2, 0x4b, + 0xb0, 0x2c, 0x23, 0x0e, 0xef, 0xe2, 0x80, 0x84, 0x62, 0x0b, 0xcd, 0x19, 0x49, 0x71, 0xd7, 0x10, + 0x57, 0xe8, 0x5d, 0x40, 0x93, 0x6d, 0x4d, 0x6c, 0xb1, 0x5c, 0x16, 0x8d, 0xcc, 0x78, 0xb7, 0x12, + 0x3b, 0xf6, 0x04, 0xcf, 0xe7, 0x00, 0xc9, 0xe0, 0xcb, 0x96, 0xc5, 0xc7, 0xab, 0xe4, 0xc1, 0xd4, + 0x7a, 0x6a, 0xd3, 0xeb, 0x39, 0xe5, 0x8d, 0x66, 0xa7, 0xbd, 0x91, 0x0e, 0xe7, 0xa2, 0xb5, 0x22, + 0xd7, 0x74, 0x74, 0x44, 0x9f, 0x42, 0x5a, 0x12, 0xda, 0x14, 0x21, 0x90, 0x40, 0x4f, 0x08, 0x5e, + 0x5f, 0x9e, 0xce, 0x6b, 0xc9, 0xda, 0x3d, 0xa9, 0x6a, 0xa4, 0x70, 0xfc, 0xc8, 0x27, 0x85, 0xac, + 0x92, 0x49, 0x70, 0xe0, 0x13, 0x5b, 0x14, 0x2b, 0x61, 0x2c, 0xcb, 0xcb, 0x9a, 0xb8, 0x43, 0xb7, + 0x41, 0x4e, 0x0e, 0xbe, 0x0e, 0x58, 0x2f, 0x14, 0x75, 0x4a, 0xef, 0x7e, 0xf0, 0xb2, 0x0e, 0x8e, + 0x97, 0xa7, 0x28, 0x1e, 0xb8, 0x21, 0x6c, 0x8d, 0xa4, 0x35, 0x3a, 0x6c, 0x7d, 0xaf, 0x41, 0x32, + 0x26, 0x44, 0x17, 0x41, 0xdf, 0xbb, 0x51, 0xae, 0xdf, 0xe4, 0x5d, 0xd2, 0x3c, 0x6a, 0x4c, 0xb4, + 0xd5, 0x49, 0xa9, 0x38, 0x96, 0x2b, 0x37, 0x6a, 0x19, 0x0d, 0x6d, 0xc0, 0x85, 0x31, 0xe9, 0x48, + 0x36, 0x8b, 0x74, 0xc8, 0x9d, 0x94, 0x89, 0x86, 0x9b, 0x94, 0x4c, 0xeb, 0xbb, 0xdf, 0x35, 0xc8, + 0x4c, 0x0e, 0x07, 0x54, 0x81, 0x45, 0x9b, 0xb8, 0xa4, 0xc3, 0x27, 0x9a, 0x26, 0x48, 0xfa, 0xc6, + 0xcb, 0xca, 0x5f, 0x55, 0xba, 0xd7, 0x67, 0x8c, 0xa1, 0x1d, 0xc7, 0x60, 0x01, 0xf6, 0xc3, 0x36, + 0x09, 0x04, 0x07, 0x5e, 0x81, 0xd1, 0x54, 0xba, 0x1c, 0x23, 0xb2, 0x43, 0xd7, 0x20, 0xd1, 0xa7, + 0x8c, 0xa8, 0xfe, 0xdb, 0x7c, 0x99, 0xfd, 0x17, 0x54, 0xf8, 0x17, 0xfa, 0xa3, 0xf4, 0x2a, 0x0b, + 0x90, 0x60, 0xc7, 0x5d, 0xb2, 0xd5, 0x85, 0xec, 0x64, 0x96, 0xe1, 0x0b, 0xe6, 0xa8, 0xf6, 0xef, + 0xcc, 0xd1, 0x6f, 0x13, 0x90, 0x1e, 0x2f, 0x0f, 0x7a, 0x13, 0x56, 0xa2, 0xcf, 0xa0, 0x91, 0x33, + 0xce, 0xc8, 0xb4, 0xba, 0x8e, 0x02, 0xe3, 0x8a, 0x78, 0x30, 0xa6, 0x38, 0xab, 0x14, 0xe5, 0x75, + 0xa4, 0x78, 0x04, 0xeb, 0x11, 0xa2, 0x2a, 0x3c, 0xef, 0x1c, 0xf5, 0x69, 0xf5, 0xaa, 0xa9, 0x65, + 0x44, 0x1f, 0x65, 0xd5, 0xa1, 0xa9, 0xfa, 0xac, 0xe2, 0xb0, 0xca, 0xff, 0x49, 0xd8, 0xc4, 0xab, + 0x61, 0xa5, 0xed, 0x09, 0xd8, 0x01, 0x14, 0xe2, 0xf9, 0xf7, 0x09, 0xef, 0xb9, 0x7b, 0x84, 0x0f, + 0x0b, 0x8b, 0xf8, 0xcc, 0x71, 0x89, 0xe8, 0xd0, 0xa5, 0xca, 0x0e, 0x2f, 0xea, 0x2f, 0x4f, 0x0a, + 0xaf, 0x49, 0x1f, 0xa1, 0x7d, 0xaf, 0xe8, 0xd0, 0x92, 0x87, 0xd9, 0xdd, 0xe2, 0x0d, 0xd2, 0xc1, + 0xd6, 0x71, 0x95, 0x58, 0x3f, 0xfd, 0x70, 0x15, 0x54, 0x08, 0x55, 0x62, 0x19, 0x17, 0x63, 0x25, + 0xec, 0x93, 0x06, 0xc7, 0x3d, 0x1c, 0xc2, 0x0a, 0xcf, 0xb1, 0x82, 0x4e, 0xf3, 0xbc, 0xf0, 0xf7, + 0x3d, 0x8f, 0xde, 0xe4, 0x84, 0xe7, 0x58, 0xa7, 0xfd, 0xa8, 0x45, 0x84, 0x88, 0xb8, 0xfe, 0x1f, + 0x10, 0xe2, 0xce, 0x3f, 0x21, 0x84, 0x22, 0xf3, 0x8b, 0x68, 0x11, 0xcb, 0xe5, 0x4f, 0x0d, 0x60, + 0xd4, 0x77, 0xff, 0xb3, 0x3c, 0xd0, 0x0e, 0xe4, 0xfa, 0xd8, 0x75, 0x6c, 0xcc, 0x68, 0x60, 0x7a, + 0x3d, 0x97, 0x39, 0x5d, 0xd7, 0x11, 0x9b, 0x86, 0x87, 0x72, 0x7e, 0x28, 0xbb, 0x39, 0x14, 0xc5, + 0x52, 0x6f, 0x43, 0x6a, 0x6c, 0xe9, 0xa0, 0x02, 0x24, 0xd5, 0xc6, 0xe2, 0x93, 0x46, 0x24, 0xbe, + 0x64, 0x80, 0xbc, 0x6a, 0x1e, 0x77, 0xc5, 0x02, 0xf5, 0x7b, 0x5e, 0x8b, 0x04, 0x26, 0x6d, 0x4f, + 0xa4, 0xbd, 0x22, 0x05, 0xb7, 0xda, 0x2a, 0xef, 0xd8, 0xe4, 0xea, 0x3c, 0x7a, 0x9a, 0xd7, 0x1e, + 0x3f, 0xcd, 0x6b, 0xbf, 0x3d, 0xcd, 0x6b, 0x0f, 0x9e, 0xe5, 0x67, 0x1e, 0x3f, 0xcb, 0xcf, 0xfc, + 0xfc, 0x2c, 0x3f, 0x03, 0x6b, 0x0e, 0x9d, 0x3a, 0x9c, 0x0e, 0xb5, 0xaf, 0x76, 0x3b, 0x0e, 0xbb, + 0xdb, 0x6b, 0x15, 0x2d, 0xea, 0x95, 0x46, 0x2a, 0x57, 0x1d, 0x1a, 0x3b, 0x95, 0x06, 0xd1, 0x1f, + 0x00, 0x3c, 0xde, 0xb0, 0xb5, 0x20, 0xbe, 0xc1, 0xdf, 0xff, 0x2b, 0x00, 0x00, 0xff, 0xff, 0x3b, + 0xe0, 0x83, 0x17, 0x22, 0x10, 0x00, 0x00, } func (this *RewardProgram) Equal(that interface{}) bool { @@ -1529,7 +1526,7 @@ func (m *RewardProgram) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x80 } - n1, err1 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.ActualProgramEndTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.ActualProgramEndTime):]) + n1, err1 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.ActualProgramEndTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.ActualProgramEndTime):]) if err1 != nil { return 0, err1 } @@ -1537,7 +1534,7 @@ func (m *RewardProgram) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintReward(dAtA, i, uint64(n1)) i-- dAtA[i] = 0x7a - n2, err2 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.ClaimPeriodEndTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.ClaimPeriodEndTime):]) + n2, err2 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.ClaimPeriodEndTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.ClaimPeriodEndTime):]) if err2 != nil { return 0, err2 } @@ -1545,7 +1542,7 @@ func (m *RewardProgram) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintReward(dAtA, i, uint64(n2)) i-- dAtA[i] = 0x72 - n3, err3 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.ProgramEndTimeMax, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.ProgramEndTimeMax):]) + n3, err3 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.ProgramEndTimeMax, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.ProgramEndTimeMax):]) if err3 != nil { return 0, err3 } @@ -1553,7 +1550,7 @@ func (m *RewardProgram) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintReward(dAtA, i, uint64(n3)) i-- dAtA[i] = 0x6a - n4, err4 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.ExpectedProgramEndTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.ExpectedProgramEndTime):]) + n4, err4 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.ExpectedProgramEndTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.ExpectedProgramEndTime):]) if err4 != nil { return 0, err4 } @@ -1561,7 +1558,7 @@ func (m *RewardProgram) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintReward(dAtA, i, uint64(n4)) i-- dAtA[i] = 0x62 - n5, err5 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.ProgramStartTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.ProgramStartTime):]) + n5, err5 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.ProgramStartTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.ProgramStartTime):]) if err5 != nil { return 0, err5 } @@ -2165,15 +2162,15 @@ func (m *RewardProgram) Size() (n int) { if m.ClaimPeriodSeconds != 0 { n += 1 + sovReward(uint64(m.ClaimPeriodSeconds)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.ProgramStartTime) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.ProgramStartTime) n += 1 + l + sovReward(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.ExpectedProgramEndTime) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.ExpectedProgramEndTime) n += 1 + l + sovReward(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.ProgramEndTimeMax) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.ProgramEndTimeMax) n += 1 + l + sovReward(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.ClaimPeriodEndTime) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.ClaimPeriodEndTime) n += 1 + l + sovReward(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.ActualProgramEndTime) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.ActualProgramEndTime) n += 1 + l + sovReward(uint64(l)) if m.ClaimPeriods != 0 { n += 2 + sovReward(uint64(m.ClaimPeriods)) @@ -2761,7 +2758,7 @@ func (m *RewardProgram) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.ProgramStartTime, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.ProgramStartTime, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2794,7 +2791,7 @@ func (m *RewardProgram) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.ExpectedProgramEndTime, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.ExpectedProgramEndTime, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2827,7 +2824,7 @@ func (m *RewardProgram) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.ProgramEndTimeMax, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.ProgramEndTimeMax, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2860,7 +2857,7 @@ func (m *RewardProgram) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.ClaimPeriodEndTime, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.ClaimPeriodEndTime, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2893,7 +2890,7 @@ func (m *RewardProgram) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.ActualProgramEndTime, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.ActualProgramEndTime, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/reward/types/tx.pb.go b/x/reward/types/tx.pb.go index 416e39e372..2be7b6b6ed 100644 --- a/x/reward/types/tx.pb.go +++ b/x/reward/types/tx.pb.go @@ -7,10 +7,10 @@ import ( context "context" fmt "fmt" types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" @@ -1184,7 +1184,7 @@ func (m *MsgCreateRewardProgramRequest) MarshalToSizedBuffer(dAtA []byte) (int, i-- dAtA[i] = 0x38 } - n1, err1 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.ProgramStartTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.ProgramStartTime):]) + n1, err1 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.ProgramStartTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.ProgramStartTime):]) if err1 != nil { return 0, err1 } @@ -1599,7 +1599,7 @@ func (m *MsgCreateRewardProgramRequest) Size() (n int) { n += 1 + l + sovTx(uint64(l)) l = m.MaxRewardPerClaimAddress.Size() n += 1 + l + sovTx(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.ProgramStartTime) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.ProgramStartTime) n += 1 + l + sovTx(uint64(l)) if m.ClaimPeriods != 0 { n += 1 + sovTx(uint64(m.ClaimPeriods)) @@ -1983,7 +1983,7 @@ func (m *MsgCreateRewardProgramRequest) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.ProgramStartTime, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.ProgramStartTime, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/reward/types/tx.pb.gw.go b/x/reward/types/tx.pb.gw.go deleted file mode 100644 index 3d40177d0c..0000000000 --- a/x/reward/types/tx.pb.gw.go +++ /dev/null @@ -1,500 +0,0 @@ -// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: provenance/reward/v1/tx.proto - -/* -Package types is a reverse proxy. - -It translates gRPC into RESTful JSON APIs. -*/ -package types - -import ( - "context" - "io" - "net/http" - - "github.com/golang/protobuf/descriptor" - "github.com/golang/protobuf/proto" - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/grpc-ecosystem/grpc-gateway/utilities" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/status" -) - -// Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = descriptor.ForMessage - -var ( - filter_Msg_CreateRewardProgram_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_Msg_CreateRewardProgram_0(ctx context.Context, marshaler runtime.Marshaler, client MsgClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq MsgCreateRewardProgramRequest - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Msg_CreateRewardProgram_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.CreateRewardProgram(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Msg_CreateRewardProgram_0(ctx context.Context, marshaler runtime.Marshaler, server MsgServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq MsgCreateRewardProgramRequest - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Msg_CreateRewardProgram_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.CreateRewardProgram(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_Msg_EndRewardProgram_0 = &utilities.DoubleArray{Encoding: map[string]int{"reward_program_id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} -) - -func request_Msg_EndRewardProgram_0(ctx context.Context, marshaler runtime.Marshaler, client MsgClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq MsgEndRewardProgramRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["reward_program_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "reward_program_id") - } - - protoReq.RewardProgramId, err = runtime.Uint64(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "reward_program_id", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Msg_EndRewardProgram_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.EndRewardProgram(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Msg_EndRewardProgram_0(ctx context.Context, marshaler runtime.Marshaler, server MsgServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq MsgEndRewardProgramRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["reward_program_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "reward_program_id") - } - - protoReq.RewardProgramId, err = runtime.Uint64(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "reward_program_id", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Msg_EndRewardProgram_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.EndRewardProgram(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Msg_ClaimRewards_0(ctx context.Context, marshaler runtime.Marshaler, client MsgClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq MsgClaimRewardsRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["reward_address"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "reward_address") - } - - protoReq.RewardAddress, err = runtime.String(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "reward_address", err) - } - - val, ok = pathParams["reward_program_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "reward_program_id") - } - - protoReq.RewardProgramId, err = runtime.Uint64(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "reward_program_id", err) - } - - msg, err := client.ClaimRewards(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Msg_ClaimRewards_0(ctx context.Context, marshaler runtime.Marshaler, server MsgServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq MsgClaimRewardsRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["reward_address"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "reward_address") - } - - protoReq.RewardAddress, err = runtime.String(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "reward_address", err) - } - - val, ok = pathParams["reward_program_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "reward_program_id") - } - - protoReq.RewardProgramId, err = runtime.Uint64(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "reward_program_id", err) - } - - msg, err := server.ClaimRewards(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Msg_ClaimAllRewards_0(ctx context.Context, marshaler runtime.Marshaler, client MsgClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq MsgClaimAllRewardsRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["reward_address"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "reward_address") - } - - protoReq.RewardAddress, err = runtime.String(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "reward_address", err) - } - - msg, err := client.ClaimAllRewards(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Msg_ClaimAllRewards_0(ctx context.Context, marshaler runtime.Marshaler, server MsgServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq MsgClaimAllRewardsRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["reward_address"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "reward_address") - } - - protoReq.RewardAddress, err = runtime.String(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "reward_address", err) - } - - msg, err := server.ClaimAllRewards(ctx, &protoReq) - return msg, metadata, err - -} - -// RegisterMsgHandlerServer registers the http handlers for service Msg to "mux". -// UnaryRPC :call MsgServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features (such as grpc.SendHeader, etc) to stop working. Consider using RegisterMsgHandlerFromEndpoint instead. -func RegisterMsgHandlerServer(ctx context.Context, mux *runtime.ServeMux, server MsgServer) error { - - mux.Handle("POST", pattern_Msg_CreateRewardProgram_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Msg_CreateRewardProgram_0(rctx, inboundMarshaler, server, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Msg_CreateRewardProgram_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PATCH", pattern_Msg_EndRewardProgram_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Msg_EndRewardProgram_0(rctx, inboundMarshaler, server, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Msg_EndRewardProgram_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PATCH", pattern_Msg_ClaimRewards_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Msg_ClaimRewards_0(rctx, inboundMarshaler, server, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Msg_ClaimRewards_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PATCH", pattern_Msg_ClaimAllRewards_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Msg_ClaimAllRewards_0(rctx, inboundMarshaler, server, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Msg_ClaimAllRewards_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -// RegisterMsgHandlerFromEndpoint is same as RegisterMsgHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterMsgHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.Dial(endpoint, opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - - return RegisterMsgHandler(ctx, mux, conn) -} - -// RegisterMsgHandler registers the http handlers for service Msg to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterMsgHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterMsgHandlerClient(ctx, mux, NewMsgClient(conn)) -} - -// RegisterMsgHandlerClient registers the http handlers for service Msg -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "MsgClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "MsgClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "MsgClient" to call the correct interceptors. -func RegisterMsgHandlerClient(ctx context.Context, mux *runtime.ServeMux, client MsgClient) error { - - mux.Handle("POST", pattern_Msg_CreateRewardProgram_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Msg_CreateRewardProgram_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Msg_CreateRewardProgram_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PATCH", pattern_Msg_EndRewardProgram_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Msg_EndRewardProgram_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Msg_EndRewardProgram_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PATCH", pattern_Msg_ClaimRewards_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Msg_ClaimRewards_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Msg_ClaimRewards_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PATCH", pattern_Msg_ClaimAllRewards_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Msg_ClaimAllRewards_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Msg_ClaimAllRewards_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -var ( - pattern_Msg_CreateRewardProgram_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"provenance", "reward", "v1", "reward_programs"}, "", runtime.AssumeColonVerbOpt(false))) - - pattern_Msg_EndRewardProgram_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"provenance", "reward", "v1", "reward_programs", "reward_program_id"}, "", runtime.AssumeColonVerbOpt(false))) - - pattern_Msg_ClaimRewards_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5, 1, 0, 4, 1, 5, 6}, []string{"provenance", "reward", "v1", "reward_claims", "reward_address", "reward_programs", "reward_program_id"}, "", runtime.AssumeColonVerbOpt(false))) - - pattern_Msg_ClaimAllRewards_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"provenance", "reward", "v1", "reward_claims", "reward_address"}, "", runtime.AssumeColonVerbOpt(false))) -) - -var ( - forward_Msg_CreateRewardProgram_0 = runtime.ForwardResponseMessage - - forward_Msg_EndRewardProgram_0 = runtime.ForwardResponseMessage - - forward_Msg_ClaimRewards_0 = runtime.ForwardResponseMessage - - forward_Msg_ClaimAllRewards_0 = runtime.ForwardResponseMessage -) diff --git a/x/trigger/keeper/keeper.go b/x/trigger/keeper/keeper.go index 53504c587f..7de4ffed3b 100644 --- a/x/trigger/keeper/keeper.go +++ b/x/trigger/keeper/keeper.go @@ -14,13 +14,13 @@ import ( type Keeper struct { storeKey storetypes.StoreKey cdc codec.BinaryCodec - router baseapp.MsgServiceRouter // TODO[1760]: msg-service-router + router baseapp.IMsgServiceRouter } func NewKeeper( cdc codec.BinaryCodec, key storetypes.StoreKey, - router baseapp.MsgServiceRouter, // TODO[1760]: msg-service-router + router baseapp.IMsgServiceRouter, ) Keeper { return Keeper{ storeKey: key, diff --git a/x/trigger/types/event.pb.go b/x/trigger/types/event.pb.go index 1931271b7e..986a6c611d 100644 --- a/x/trigger/types/event.pb.go +++ b/x/trigger/types/event.pb.go @@ -5,7 +5,7 @@ package types import ( fmt "fmt" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/trigger/types/genesis.pb.go b/x/trigger/types/genesis.pb.go index 8e68a7f73a..65a53823a7 100644 --- a/x/trigger/types/genesis.pb.go +++ b/x/trigger/types/genesis.pb.go @@ -5,8 +5,8 @@ package types import ( fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" diff --git a/x/trigger/types/query.pb.go b/x/trigger/types/query.pb.go index f0f5b79a77..df33d4b61e 100644 --- a/x/trigger/types/query.pb.go +++ b/x/trigger/types/query.pb.go @@ -7,9 +7,9 @@ import ( context "context" fmt "fmt" query "github.com/cosmos/cosmos-sdk/types/query" - _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" diff --git a/x/trigger/types/query.pb.gw.go b/x/trigger/types/query.pb.gw.go index cc3c4ba149..a017a92f2a 100644 --- a/x/trigger/types/query.pb.gw.go +++ b/x/trigger/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 func request_Query_TriggerByID_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryTriggerByIDRequest @@ -124,12 +126,14 @@ func local_request_Query_Triggers_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_TriggerByID_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_TriggerByID_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_Triggers_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_Triggers_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/trigger/types/trigger.go b/x/trigger/types/trigger.go index 4d19efb5a0..d7408dc71f 100644 --- a/x/trigger/types/trigger.go +++ b/x/trigger/types/trigger.go @@ -5,7 +5,7 @@ import ( "strings" time "time" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" abci "github.com/cometbft/cometbft/abci/types" diff --git a/x/trigger/types/trigger.pb.go b/x/trigger/types/trigger.pb.go index d907110bb7..c3dfacd204 100644 --- a/x/trigger/types/trigger.pb.go +++ b/x/trigger/types/trigger.pb.go @@ -7,9 +7,9 @@ import ( fmt "fmt" _ "github.com/cosmos/cosmos-proto" types "github.com/cosmos/cosmos-sdk/codec/types" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" @@ -684,7 +684,7 @@ func (m *QueuedTrigger) MarshalToSizedBuffer(dAtA []byte) (int, error) { } i-- dAtA[i] = 0x1a - n3, err3 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) + n3, err3 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.Time):]) if err3 != nil { return 0, err3 } @@ -748,7 +748,7 @@ func (m *BlockTimeEvent) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - n4, err4 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) + n4, err4 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.Time):]) if err4 != nil { return 0, err4 } @@ -886,7 +886,7 @@ func (m *QueuedTrigger) Size() (n int) { if m.BlockHeight != 0 { n += 1 + sovTrigger(uint64(m.BlockHeight)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Time) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.Time) n += 1 + l + sovTrigger(uint64(l)) l = m.Trigger.Size() n += 1 + l + sovTrigger(uint64(l)) @@ -911,7 +911,7 @@ func (m *BlockTimeEvent) Size() (n int) { } var l int _ = l - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Time) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.Time) n += 1 + l + sovTrigger(uint64(l)) return n } @@ -1206,7 +1206,7 @@ func (m *QueuedTrigger) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.Time, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.Time, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -1391,7 +1391,7 @@ func (m *BlockTimeEvent) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.Time, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.Time, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/trigger/types/tx.pb.go b/x/trigger/types/tx.pb.go index c05fddf733..82a7b50db9 100644 --- a/x/trigger/types/tx.pb.go +++ b/x/trigger/types/tx.pb.go @@ -8,9 +8,9 @@ import ( fmt "fmt" _ "github.com/cosmos/cosmos-proto" types "github.com/cosmos/cosmos-sdk/codec/types" - _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" From fa05e85e513a05dce5c6015152296d96657d0e75 Mon Sep 17 00:00:00 2001 From: Daniel Wedul Date: Wed, 27 Mar 2024 17:59:59 -0600 Subject: [PATCH 06/11] Bump the SDK to v0.50.5-pio-1. (#1897) * Bump the SDK to v0.50.5-pio-1. * Add changelog entry. --- CHANGELOG.md | 1 + go.mod | 51 ++++++++++++----------- go.sum | 111 ++++++++++++++++++++++++++++++--------------------- 3 files changed, 94 insertions(+), 69 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 15eaf9f494..5b6c4f64cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -53,6 +53,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ * Updated documentation for each module to work with docusaurus [PR 1763](https://github.com/provenance-io/provenance/pull/1763). * Create a default market in `make run`, `localnet`, `devnet` and the `provenanced testnet` command [#1757](https://github.com/provenance-io/provenance/issues/1757). * Remove unsupported database types [#1760](https://github.com/provenance-io/provenance/issues/1760). +* Bump the SDK to `v0.50.5-pio-1` (from an earlier ephemeral version) [#1897](https://github.com/provenance-io/provenance/pull/1897). ### Dependencies diff --git a/go.mod b/go.mod index 55a1321393..2fd58f75e3 100644 --- a/go.mod +++ b/go.mod @@ -5,18 +5,18 @@ go 1.21 require ( cosmossdk.io/errors v1.0.1 cosmossdk.io/log v1.3.1 - cosmossdk.io/math v1.2.0 + cosmossdk.io/math v1.3.0 cosmossdk.io/simapp v0.0.0-20231107193120-9814f684b9dd cosmossdk.io/store v1.0.2 cosmossdk.io/x/evidence v0.1.0 cosmossdk.io/x/feegrant v0.1.0 - cosmossdk.io/x/tx v0.13.0 + cosmossdk.io/x/tx v0.13.1 cosmossdk.io/x/upgrade v0.1.0 github.com/CosmWasm/wasmd v0.50.0 github.com/CosmWasm/wasmvm v1.5.0 github.com/cometbft/cometbft v0.38.5 github.com/cometbft/cometbft-db v0.9.1 - github.com/cosmos/cosmos-db v1.0.0 + github.com/cosmos/cosmos-db v1.0.2 github.com/cosmos/cosmos-proto v1.0.0-beta.4 github.com/cosmos/cosmos-sdk v0.50.4 github.com/cosmos/go-bip39 v1.0.0 @@ -26,35 +26,34 @@ require ( github.com/cosmos/ibc-go/v8 v8.0.0 // github.com/cosmos/rosetta v0.50.2 // TODO[1760]: rosetta github.com/ghodss/yaml v1.0.0 - github.com/golang/protobuf v1.5.3 - github.com/google/uuid v1.4.0 + github.com/golang/protobuf v1.5.4 + github.com/google/uuid v1.6.0 github.com/gorilla/mux v1.8.1 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/hashicorp/go-metrics v0.5.2 - github.com/otiai10/copy v1.14.0 github.com/rakyll/statik v0.1.7 github.com/rs/zerolog v1.32.0 github.com/spf13/cast v1.6.0 github.com/spf13/cobra v1.8.0 github.com/spf13/pflag v1.0.5 github.com/spf13/viper v1.18.2 - github.com/stretchr/testify v1.8.4 - golang.org/x/exp v0.0.0-20240213143201-ec583247a57a + github.com/stretchr/testify v1.9.0 + golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 golang.org/x/text v0.14.0 - google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f - google.golang.org/grpc v1.60.1 - google.golang.org/protobuf v1.32.0 + google.golang.org/genproto/googleapis/api v0.0.0-20240205150955-31a09d347014 + google.golang.org/grpc v1.62.0 + google.golang.org/protobuf v1.33.0 gopkg.in/yaml.v2 v2.4.0 ) require github.com/regen-network/cosmos-proto v0.3.1 require ( - cloud.google.com/go v0.110.10 // indirect - cloud.google.com/go/compute v1.23.3 // indirect + cloud.google.com/go v0.112.0 // indirect + cloud.google.com/go/compute v1.24.0 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v1.1.5 // indirect - cloud.google.com/go/storage v1.35.1 // indirect + cloud.google.com/go/iam v1.1.6 // indirect + cloud.google.com/go/storage v1.36.0 // indirect cosmossdk.io/api v0.7.3 // indirect cosmossdk.io/client/v2 v2.0.0-beta.1 // indirect cosmossdk.io/collections v0.4.0 // indirect @@ -107,6 +106,8 @@ require ( github.com/go-kit/kit v0.13.0 // indirect github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.6.0 // indirect + github.com/go-logr/logr v1.4.1 // indirect + github.com/go-logr/stdr v1.2.2 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/googleapis v1.4.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect @@ -142,7 +143,7 @@ require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect - github.com/klauspost/compress v1.17.6 // indirect + github.com/klauspost/compress v1.17.7 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.7 // indirect @@ -186,19 +187,23 @@ require ( github.com/zondax/ledger-go v0.14.3 // indirect go.etcd.io/bbolt v1.3.8 // indirect go.opencensus.io v0.24.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0 // indirect + go.opentelemetry.io/otel v1.22.0 // indirect + go.opentelemetry.io/otel/metric v1.22.0 // indirect + go.opentelemetry.io/otel/trace v1.22.0 // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/crypto v0.19.0 // indirect - golang.org/x/net v0.20.0 // indirect + golang.org/x/net v0.21.0 // indirect golang.org/x/oauth2 v0.16.0 // indirect - golang.org/x/sync v0.5.0 // indirect + golang.org/x/sync v0.6.0 // indirect golang.org/x/sys v0.17.0 // indirect golang.org/x/term v0.17.0 // indirect golang.org/x/time v0.5.0 // indirect - golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/api v0.153.0 // indirect + google.golang.org/api v0.162.0 // indirect google.golang.org/appengine v1.6.8 // indirect - google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0 // indirect + google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240221002015-b0ce06bbee7c // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect gotest.tools/v3 v3.5.1 // indirect @@ -214,7 +219,7 @@ replace ( // TODO[1760]: wasm: Put this CosmWasm/wasmd replace back with an updated version (or delete it). // github.com/CosmWasm/wasmd => github.com/provenance-io/wasmd v0.30.0-pio-5 // TODO[1760]: sdk: Put this replace back with an updated version of the sdk from our fork. - github.com/cosmos/cosmos-sdk => github.com/provenance-io/cosmos-sdk v0.50.5-nullpointer0x00-msg-based-fee-support + github.com/cosmos/cosmos-sdk => github.com/provenance-io/cosmos-sdk v0.50.5-pio-1 // TODO[1760]: Update once async-icq creates tag with our changes https://github.com/cosmos/ibc-apps/pull/168 github.com/cosmos/ibc-apps/modules/async-icq/v8 => github.com/provenance-io/ibc-apps/modules/async-icq/v8 v8.0.0-prov-1 diff --git a/go.sum b/go.sum index 0845e08d13..0dfce1ad8a 100644 --- a/go.sum +++ b/go.sum @@ -30,8 +30,8 @@ cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w9 cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= -cloud.google.com/go v0.110.10 h1:LXy9GEO+timppncPIAZoOj3l58LIU9k+kn48AN7IO3Y= -cloud.google.com/go v0.110.10/go.mod h1:v1OoFqYxiBkUrruItNM3eT4lLByNjxmJSV/xDKJNnic= +cloud.google.com/go v0.112.0 h1:tpFCD7hpHFlQ8yPwT3x+QeXqc2T6+n6T+hmABHfDUSM= +cloud.google.com/go v0.112.0/go.mod h1:3jEEVwZ/MHU4djK5t5RHuKOA/GbLddgTdVubX1qnPD4= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= @@ -68,8 +68,8 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute v1.23.3 h1:6sVlXXBmbd7jNX0Ipq0trII3e4n1/MsADLK6a+aiVlk= -cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI= +cloud.google.com/go/compute v1.24.0 h1:phWcR2eWzRJaL/kOiJwfFsPs4BaKq1j6vnpZrc1YlVg= +cloud.google.com/go/compute v1.24.0/go.mod h1:kw1/T+h/+tK2LJK0wiPPx1intgdAM3j/g3hFDlscY40= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= @@ -109,8 +109,8 @@ cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y97 cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= -cloud.google.com/go/iam v1.1.5 h1:1jTsCu4bcsNsE4iiqNT5SHwrDRCfRmIaaaVFhRveTJI= -cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8= +cloud.google.com/go/iam v1.1.6 h1:bEa06k05IO4f4uJonbB5iAgKTPpABy1ayxaIZV/GHVc= +cloud.google.com/go/iam v1.1.6/go.mod h1:O0zxdPeGBoFdWW3HWmBxJsk0pfvNM/p/qa82rWOGTwI= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= @@ -171,8 +171,8 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9 cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= -cloud.google.com/go/storage v1.35.1 h1:B59ahL//eDfx2IIKFBeT5Atm9wnNmj3+8xG/W4WB//w= -cloud.google.com/go/storage v1.35.1/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8= +cloud.google.com/go/storage v1.36.0 h1:P0mOkAcaJxhCTvAkMhxMfrTKiNcub4YmmPBtlhAyTr8= +cloud.google.com/go/storage v1.36.0/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8= cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= @@ -198,8 +198,8 @@ cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= cosmossdk.io/log v1.3.1 h1:UZx8nWIkfbbNEWusZqzAx3ZGvu54TZacWib3EzUYmGI= cosmossdk.io/log v1.3.1/go.mod h1:2/dIomt8mKdk6vl3OWJcPk2be3pGOS8OQaLUM/3/tCM= -cosmossdk.io/math v1.2.0 h1:8gudhTkkD3NxOP2YyyJIYYmt6dQ55ZfJkDOaxXpy7Ig= -cosmossdk.io/math v1.2.0/go.mod h1:l2Gnda87F0su8a/7FEKJfFdJrM0JZRXQaohlgJeyQh0= +cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE= +cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= cosmossdk.io/simapp v0.0.0-20231107193120-9814f684b9dd h1:KwV+LjYFc4N+KwUrPtCfKW6m+zIdCI0kz1Zr+RrDW/Y= cosmossdk.io/simapp v0.0.0-20231107193120-9814f684b9dd/go.mod h1:qnOJ7OPtF1kNzces9lnB3vpeMhQu4uQE9i+h0+vb+RA= cosmossdk.io/store v1.0.2 h1:lSg5BTvJBHUDwswNNyeh4K/CbqiHER73VU4nDNb8uk0= @@ -212,8 +212,8 @@ cosmossdk.io/x/feegrant v0.1.0 h1:c7s3oAq/8/UO0EiN1H5BIjwVntujVTkYs35YPvvrdQk= cosmossdk.io/x/feegrant v0.1.0/go.mod h1:4r+FsViJRpcZif/yhTn+E0E6OFfg4n0Lx+6cCtnZElU= cosmossdk.io/x/nft v0.1.0 h1:VhcsFiEK33ODN27kxKLa0r/CeFd8laBfbDBwYqCyYCM= cosmossdk.io/x/nft v0.1.0/go.mod h1:ec4j4QAO4mJZ+45jeYRnW7awLHby1JZANqe1hNZ4S3g= -cosmossdk.io/x/tx v0.13.0 h1:8lzyOh3zONPpZv2uTcUmsv0WTXy6T1/aCVDCqShmpzU= -cosmossdk.io/x/tx v0.13.0/go.mod h1:CpNQtmoqbXa33/DVxWQNx5Dcnbkv2xGUhL7tYQ5wUsY= +cosmossdk.io/x/tx v0.13.1 h1:Mg+EMp67Pz+NukbJqYxuo8uRp7N/a9uR+oVS9pONtj8= +cosmossdk.io/x/tx v0.13.1/go.mod h1:CBCU6fsRVz23QGFIQBb1DNX2DztJCf3jWyEkHY2nJQ0= cosmossdk.io/x/upgrade v0.1.0 h1:z1ZZG4UL9ICTNbJDYZ6jOnF9GdEK9wyoEFi4BUScHXE= cosmossdk.io/x/upgrade v0.1.0/go.mod h1:/6jjNGbiPCNtmA1N+rBtP601sr0g4ZXuj3yC6ClPCGY= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= @@ -325,6 +325,8 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa h1:jQCWAUqqlij9Pgj2i/PB79y4KOPYVyFYdROxgaCwdTQ= +github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa/go.mod h1:x/1Gn8zydmfq8dk6e9PdstVsDgu9RuyIIJqAaF//0IM= github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= @@ -355,8 +357,8 @@ github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSV github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= -github.com/cosmos/cosmos-db v1.0.0 h1:EVcQZ+qYag7W6uorBKFPvX6gRjw6Uq2hIh4hCWjuQ0E= -github.com/cosmos/cosmos-db v1.0.0/go.mod h1:iBvi1TtqaedwLdcrZVYRSSCb6eSy61NLj4UNmdIgs0U= +github.com/cosmos/cosmos-db v1.0.2 h1:hwMjozuY1OlJs/uh6vddqnk9j7VamLv+0DBlbEXbAKs= +github.com/cosmos/cosmos-db v1.0.2/go.mod h1:Z8IXcFJ9PqKK6BIsVOB3QXtkKoqUOp1vRvPT39kOXEA= github.com/cosmos/cosmos-proto v1.0.0-beta.4 h1:aEL7tU/rLOmxZQ9z4i7mzxcLbSCY48OdY7lIWTLG7oU= github.com/cosmos/cosmos-proto v1.0.0-beta.4/go.mod h1:oeB+FyVzG3XrQJbJng0EnV8Vljfk9XvTIpGILNU/9Co= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= @@ -433,6 +435,8 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.m github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= +github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= @@ -474,6 +478,11 @@ github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= +github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= @@ -535,8 +544,8 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= @@ -595,8 +604,8 @@ github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8 github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= -github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= @@ -730,8 +739,8 @@ github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYs github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= -github.com/klauspost/compress v1.17.6 h1:60eq2E/jlfwQXtvZEeBUYADs+BwKBWURIY+Gj2eRGjI= -github.com/klauspost/compress v1.17.6/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg= +github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -848,10 +857,6 @@ github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnh github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= -github.com/otiai10/copy v1.14.0 h1:dCI/t1iTdYGtkvCuBG2BgR6KZa83PTclw4U5n2wAllU= -github.com/otiai10/copy v1.14.0/go.mod h1:ECfuL02W+/FkTWZWgQqXPWZgW9oeKCSQ5qVfSc4qc4w= -github.com/otiai10/mint v1.5.1 h1:XaPLeE+9vGbuyEHem1JNk3bYc7KKqyI/na0/mLd/Kks= -github.com/otiai10/mint v1.5.1/go.mod h1:MJm72SBthJjz8qhefc4z1PYEieWmy8Bku7CjcAqyUSM= 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= @@ -911,8 +916,8 @@ github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= -github.com/provenance-io/cosmos-sdk v0.50.5-nullpointer0x00-msg-based-fee-support h1:eVD2/kZ4KJN34a+EXZocVmNaROjMVnVE0BAo4rAxRYg= -github.com/provenance-io/cosmos-sdk v0.50.5-nullpointer0x00-msg-based-fee-support/go.mod h1:UbShFs6P8Ly29xxJvkNGaNaL/UGj5a686NRtb1Cqra0= +github.com/provenance-io/cosmos-sdk v0.50.5-pio-1 h1:GvyZAstTVB9//RugyoUqTRez19qbEWrb2dKNIKbKz3U= +github.com/provenance-io/cosmos-sdk v0.50.5-pio-1/go.mod h1:oV/k6GJgXV9QPoM2fsYDPPsyPBgQbdotv532O6Mz1OQ= github.com/provenance-io/ibc-apps/modules/async-icq/v8 v8.0.0-prov-1 h1:p+7pxHB0ukO2aow+M6uW9gHgeQl7YJyYGyMSKHZ5My8= github.com/provenance-io/ibc-apps/modules/async-icq/v8 v8.0.0-prov-1/go.mod h1:tObW9uxibh5Z22CtOaHVeTDotCSMyc/2B4MrYdaViBo= github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= @@ -987,8 +992,9 @@ github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5J github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= 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= @@ -1001,8 +1007,9 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= @@ -1048,6 +1055,18 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0 h1:UNQQKPfTDe1J81ViolILjTKPr9WetKW6uei2hFgJmFs= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0/go.mod h1:r9vWsPS/3AQItv3OSlEJ/E4mbrhUbbw18meOjArPtKQ= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0 h1:sv9kVfal0MK0wBMCOGr+HeJm9v803BkJxGrk2au7j08= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0/go.mod h1:SK2UL73Zy1quvRPonmOmRDiWk1KBV3LyIeeIxcEApWw= +go.opentelemetry.io/otel v1.22.0 h1:xS7Ku+7yTFvDfDraDIJVpw7XPyuHlB9MCiqqX5mcJ6Y= +go.opentelemetry.io/otel v1.22.0/go.mod h1:eoV4iAi3Ea8LkAEI9+GFT44O6T/D0GWAVFyZVCC6pMI= +go.opentelemetry.io/otel/metric v1.22.0 h1:lypMQnGyJYeuYPhOM/bgjbFM6WE44W1/T45er4d8Hhg= +go.opentelemetry.io/otel/metric v1.22.0/go.mod h1:evJGjVpZv0mQ5QBRJoBF64yMuOf4xCWdXjK8pzFvliY= +go.opentelemetry.io/otel/sdk v1.21.0 h1:FTt8qirL1EysG6sTQRZ5TokkU8d0ugCj8htOgThZXQ8= +go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E= +go.opentelemetry.io/otel/trace v1.22.0 h1:Hg6pPujv0XG9QaVbGOBVHunyuLcCC3jN7WEhPx83XD0= +go.opentelemetry.io/otel/trace v1.22.0/go.mod h1:RbbHXVqKES9QhzZq/fE5UnOSILqRt40a21sPw2He1xo= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= @@ -1091,8 +1110,8 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/exp v0.0.0-20240213143201-ec583247a57a h1:HinSgX1tJRX3KsL//Gxynpw5CTOAIPhgL4W8PNiIpVE= -golang.org/x/exp v0.0.0-20240213143201-ec583247a57a/go.mod h1:CxmFvTBINI24O/j8iY7H1xHzx2i4OsyguNBmN/uPtqc= +golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 h1:LfspQV/FYTatPTr/3HzIcmiUFH7PGP+OQ6mgDYo3yuQ= +golang.org/x/exp v0.0.0-20240222234643-814bf88cf225/go.mod h1:CxmFvTBINI24O/j8iY7H1xHzx2i4OsyguNBmN/uPtqc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1184,8 +1203,8 @@ golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo= -golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= +golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4= +golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= 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= @@ -1228,8 +1247,8 @@ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= -golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1484,8 +1503,8 @@ google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.153.0 h1:N1AwGhielyKFaUqH07/ZSIQR3uNPcV7NVw0vj+j4iR4= -google.golang.org/api v0.153.0/go.mod h1:3qNJX5eOmhiWYc67jRA/3GsDw97UFb5ivv7Y2PrriAY= +google.golang.org/api v0.162.0 h1:Vhs54HkaEpkMBdgGdOT2P6F0csGG/vxDS0hWHJzmmps= +google.golang.org/api v0.162.0/go.mod h1:6SulDkfoBIg4NFmCuZ39XeeAgSHCPecfSUuDyYlAHs0= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1602,12 +1621,12 @@ google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqw google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3 h1:1hfbdAfFbkmpg41000wDVqr7jUpK/Yo+LPnIxxGzmkg= -google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3/go.mod h1:5RBcpGRxr25RbDzY5w+dmaqpSEvl8Gwl1x2CICf60ic= -google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f h1:2yNACc1O40tTnrsbk9Cv6oxiW8pxI/pXj0wRtdlYmgY= -google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f/go.mod h1:Uy9bTZJqmfrw2rIBxgGLnamc78euZULUBrLZ9XTITKI= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0 h1:/jFB8jK5R3Sq3i/lmeZO0cATSzFfZaJq1J2Euan3XKU= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0/go.mod h1:FUoWkonphQm3RhTS+kOEhF8h0iDpm4tdXolVCeZ9KKA= +google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9 h1:9+tzLLstTlPTRyJTh+ah5wIMsBW5c4tQwGTN3thOW9Y= +google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9/go.mod h1:mqHbVIp48Muh7Ywss/AD6I5kNVKZMmAa/QEW58Gxp2s= +google.golang.org/genproto/googleapis/api v0.0.0-20240205150955-31a09d347014 h1:x9PwdEgd11LgK+orcck69WVRo7DezSO4VUMPI4xpc8A= +google.golang.org/genproto/googleapis/api v0.0.0-20240205150955-31a09d347014/go.mod h1:rbHMSEDyoYX62nRVLOCc4Qt1HbsdytAYoVwgjiOhF3I= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240221002015-b0ce06bbee7c h1:NUsgEN92SQQqzfA+YtqYNqYmB3DMMYLlIwUZAQFVFbo= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240221002015-b0ce06bbee7c/go.mod h1:H4O17MA/PE9BsGx3w+a+W2VOLLD1Qf7oJneAoU6WktY= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -1649,8 +1668,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.60.1 h1:26+wFr+cNqSGFcOXcabYC0lUVJVRa2Sb2ortSK7VrEU= -google.golang.org/grpc v1.60.1/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM= +google.golang.org/grpc v1.62.0 h1:HQKZ/fa1bXkX1oFOvSjmZEUL8wLSaZTjCcLAlmZRtdk= +google.golang.org/grpc v1.62.0/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -1668,8 +1687,8 @@ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= -google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= 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= From b5f9598480a0788eda0f90c7bf418f9a9719cdab Mon Sep 17 00:00:00 2001 From: Daniel Wedul Date: Tue, 2 Apr 2024 16:42:05 -0600 Subject: [PATCH 07/11] Add a stability warning to make build and create make build-tests. (#1900) * Create the build-tests make target. * Add a github action that just builds the tests. * Add a warning and delay to the build make target. * Tweak the warning to just say this branch instead of specifying one. --- .github/workflows/test.yml | 13 +++++++++++++ Makefile | 13 +++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 50c636db41..b87d5bd3d2 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -109,6 +109,19 @@ jobs: name: "${{ needs.setup-tests.outputs.file-prefix }}-${{ matrix.part }}-coverage" path: ./${{ matrix.part }}profile.out + build-tests: + # TODO[1760]: Delete this build-tests action once the tests reliably pass again. + needs: setup-tests + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-go@v4 + if: needs.setup-tests.outputs.should-run + with: + go-version: ${{ needs.setup-tests.outputs.go-version }} + - name: build tests + run: | + make build-tests # This action performs a code coverage assessment but filters out generated code from proto based types # and grpc services diff --git a/Makefile b/Makefile index 60538d911d..001783950a 100644 --- a/Makefile +++ b/Makefile @@ -132,6 +132,8 @@ install: go.sum CGO_LDFLAGS="$(CGO_LDFLAGS)" CGO_CFLAGS="$(CGO_CFLAGS)" $(GO) install $(BUILD_FLAGS) ./cmd/provenanced build: validate-go-version go.sum + # TODO[1760]: Remove this delay once we're stable again. + @if [ -z "${ACK_50}" ]; then printf '\033[93mWARNING:\033[0m This branch is currently unstable and should not be built for use.\n To bypass this 10 second delay: ACK_50=1 make build\n'; sleep 10; fi mkdir -p $(BUILDDIR) CGO_LDFLAGS="$(CGO_LDFLAGS)" CGO_CFLAGS="$(CGO_CFLAGS)" $(GO) build -o $(BUILDDIR)/ $(BUILD_FLAGS) ./cmd/provenanced @@ -353,18 +355,25 @@ $(CHECK_TEST_TARGETS): run-tests run-tests: go.sum ifneq (,$(shell which tparse 2>/dev/null)) - $(GO) test -mod=readonly -json $(ARGS) -tags='$(TAGS)'$(TEST_PACKAGES) | tparse + $(GO) test -mod=readonly -json $(ARGS) -tags='$(TAGS)' $(TEST_PACKAGES) | tparse else $(GO) test -mod=readonly $(ARGS) -tags='$(TAGS)' $(TEST_PACKAGES) endif +build-tests: go.sum +ifneq (,$(shell which tparse 2>/dev/null)) + $(GO) test -mod=readonly -json $(ARGS) -tags='$(TAGS)' -run='ZYX_NOPE_NOPE_XYZ' $(TEST_PACKAGES) | tparse +else + $(GO) test -mod=readonly $(ARGS) -tags='$(TAGS)' -run='ZYX_NOPE_NOPE_XYZ' $(TEST_PACKAGES) +endif + test-cover: export VERSION=$(VERSION); bash -x contrib/test_cover.sh benchmark: $(GO) test -mod=readonly -bench=. $(PACKAGES_NOSIMULATION) -.PHONY: test test-all test-unit test-race test-cover benchmark run-tests $(TEST_TARGETS) +.PHONY: test test-all test-unit test-race test-cover benchmark run-tests build-tests $(TEST_TARGETS) ############################## # Test Network Targets From d72b3191ebdd17312d01e4f5c7e387a291f1783a Mon Sep 17 00:00:00 2001 From: Carlton Hanna Date: Wed, 3 Apr 2024 14:57:51 -0600 Subject: [PATCH 08/11] TODOs finalize-block, event-history, signing,add cosmos.msg.v1.signer to protos txs (#1873) * add chain-id to setup to prevent assert failure in chain Init() * start updating finalize block tests, fixing signing * add pub key * add address to signing * add address decoders, update test events * check the tx events * fix a few more tests, remove debug file * update git ignore for debug files * minor refactors * add assess custom msg fee custom signer field * add custom signers to rewards proto * add new sdk * add back event history and simulate function context return * use SimulateProv instead of Simulate * gen rewards pb.go with custom signing option * add gov legacy router * update with new cosmos-sdk tag * Update all tests to use finalize block, add latest proposal walk * fix marker protos and add custom signers * update bank send restriction test with finalize block * add custom signers to attribute protos * remove unneeded begin block since we use SimDeliver instead of Deliver, Unmarshal proto unstead of json, change route to module name for successful * remove begin block from ibcratelimit test, fix route check, unmarshal instead of unmarshaljson * remove begin block from marker test, fix route check, unmarshal instead of unmarshaljson * remove begin block from name test, fix route check, unmarshal instead of unmarshaljson * remove begin block from trigger test, fix route check, unmarshal instead of unmarshaljson * remove begin block from reward test, fix route check, unmarshal instead of unmarshaljson * remove begin block from oracle test, fix route check, unmarshal instead of unmarshaljson * update weighted operation tests * remove todos * proto update * finish up SimulateFromSeed event-history todo * fix reward periods for tests * fix reward vote rules for new event structure * move sleep in test * fix simulate from seed * fix assert * remove un need return --- .gitignore | 2 +- app/app.go | 8 +- app/params/proto.go | 20 +- app/sim_bench_test.go | 6 +- app/sim_test.go | 12 +- app/test_helpers.go | 11 +- go.mod | 4 +- go.sum | 8 +- .../handlers/bank_send_restriction_test.go | 24 +- internal/handlers/msg_service_router_test.go | 1196 ++++++++++------- proto/provenance/attribute/v1/tx.proto | 10 + proto/provenance/marker/v1/tx.proto | 28 + proto/provenance/msgfees/v1/tx.proto | 2 + proto/provenance/name/v1/name.proto | 6 +- proto/provenance/name/v1/tx.proto | 4 + proto/provenance/reward/v1/tx.proto | 9 + proto/provenance/trigger/v1/tx.proto | 5 + x/attribute/simulation/operations_test.go | 43 +- x/attribute/types/tx.pb.go | 97 +- x/exchange/params.pb.go | 2 +- x/exchange/query.pb.go | 301 +++-- x/exchange/query.pb.gw.go | 39 + x/ibcratelimit/simulation/operations_test.go | 11 +- x/marker/simulation/operations_test.go | 40 +- x/marker/types/tx.pb.go | 252 ++-- x/metadata/types/query.pb.go | 400 +++--- x/metadata/types/query.pb.gw.go | 3 + x/metadata/types/scope.pb.go | 2 +- x/msgfees/keeper/keeper.go | 4 +- x/msgfees/keeper/query_server.go | 61 +- x/msgfees/types/tx.pb.go | 100 +- x/name/simulation/operations_test.go | 27 +- x/name/types/name.pb.go | 66 +- x/name/types/tx.pb.go | 64 +- x/oracle/simulation/operations_test.go | 21 +- x/reward/keeper/rules.go | 75 +- x/reward/keeper/rules_test.go | 17 +- x/reward/simulation/operations_test.go | 14 +- x/reward/types/action_builder.go | 3 +- x/reward/types/tx.pb.go | 131 +- x/trigger/keeper/event_detector.go | 40 +- x/trigger/keeper/event_detector_test.go | 5 +- x/trigger/keeper/keeper_test.go | 7 +- x/trigger/simulation/operations_test.go | 19 +- x/trigger/types/tx.pb.go | 60 +- 45 files changed, 1750 insertions(+), 1509 deletions(-) diff --git a/.gitignore b/.gitignore index b7b5babd83..125c90cf91 100644 --- a/.gitignore +++ b/.gitignore @@ -21,7 +21,7 @@ vendor/ # VS Code .history/ .vscode/ -__debug_bin +__debug_bin* # Eclipse .project diff --git a/app/app.go b/app/app.go index 556e2d5df0..97be31f7fa 100644 --- a/app/app.go +++ b/app/app.go @@ -505,7 +505,7 @@ func New( app.MsgFeesKeeper = msgfeeskeeper.NewKeeper( appCodec, keys[msgfeestypes.StoreKey], app.GetSubspace(msgfeestypes.ModuleName), authtypes.FeeCollectorName, pioconfig.GetProvenanceConfig().FeeDenom, - app.Simulate, encodingConfig.TxConfig.TxDecoder(), interfaceRegistry, + app.SimulateProv, encodingConfig.TxConfig.TxDecoder(), interfaceRegistry, ) pioMsgFeesRouter := app.MsgServiceRouter().(*piohandlers.PioMsgServiceRouter) @@ -731,6 +731,10 @@ func New( appCodec, runtime.NewKVStoreService(keys[govtypes.StoreKey]), app.AccountKeeper, app.BankKeeper, app.StakingKeeper, app.DistrKeeper, app.BaseApp.MsgServiceRouter(), govtypes.Config{MaxMetadataLen: 10000}, govAuthority, ) + + // Set legacy router for backwards compatibility with gov v1beta1 + govKeeper.SetLegacyRouter(govRouter) + app.GovKeeper = *govKeeper.SetHooks( govtypes.NewMultiGovHooks( // app.SanctionKeeper // TODO[1760]: sanction @@ -1102,7 +1106,7 @@ func New( app.SetEndBlocker(app.EndBlocker) - app.SetAggregateEventsFunc(piohandlers.AggregateEvents) // TODO[1760]: event-history + app.SetAggregateEventsFunc(piohandlers.AggregateEvents) // Add upgrade plans for each release. This must be done before the baseapp seals via LoadLatestVersion() down below. InstallCustomUpgradeHandlers(app) diff --git a/app/params/proto.go b/app/params/proto.go index af70d9429c..8107f1b3bf 100644 --- a/app/params/proto.go +++ b/app/params/proto.go @@ -4,9 +4,14 @@ package params import ( + "cosmossdk.io/x/tx/signing" "github.com/cosmos/cosmos-sdk/codec" + amino "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/codec/address" "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/auth/tx" + "github.com/cosmos/gogoproto/proto" ) // MakeTestEncodingConfig creates an EncodingConfig for a non-amino based test configuration. @@ -14,8 +19,19 @@ import ( // App user shouldn't create new codecs - use the app.AppCodec instead. // [DEPRECATED] func MakeTestEncodingConfig() EncodingConfig { - cdc := codec.NewLegacyAmino() - interfaceRegistry := types.NewInterfaceRegistry() + cdc := amino.NewLegacyAmino() + signingOptions := signing.Options{ + AddressCodec: address.Bech32Codec{ + Bech32Prefix: sdk.GetConfig().GetBech32AccountAddrPrefix(), + }, + ValidatorAddressCodec: address.Bech32Codec{ + Bech32Prefix: sdk.GetConfig().GetBech32ValidatorAddrPrefix(), + }, + } + interfaceRegistry, _ := types.NewInterfaceRegistryWithOptions(types.InterfaceRegistryOptions{ + ProtoFiles: proto.HybridResolver, + SigningOptions: signingOptions, + }) marshaler := codec.NewProtoCodec(interfaceRegistry) return EncodingConfig{ diff --git a/app/sim_bench_test.go b/app/sim_bench_test.go index be6aaacd21..507a1466cd 100644 --- a/app/sim_bench_test.go +++ b/app/sim_bench_test.go @@ -6,7 +6,6 @@ import ( "fmt" "os" "testing" - "time" cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" @@ -41,7 +40,6 @@ func BenchmarkFullAppSimulation(b *testing.B) { app := New(logger, db, nil, true, map[int64]bool{}, b.TempDir(), simcli.FlagPeriodValue, MakeEncodingConfig(), simtestutil.EmptyAppOptions{}, interBlockCacheOpt()) // run randomized simulation - // TODO[1760]: event-history: Add _ return arg back in. _, simParams, simErr := simulation.SimulateFromSeed( b, os.Stdout, @@ -91,9 +89,7 @@ func BenchmarkInvariants(b *testing.B) { app := New(logger, db, nil, true, map[int64]bool{}, b.TempDir(), simcli.FlagPeriodValue, MakeEncodingConfig(), simtestutil.EmptyAppOptions{}, interBlockCacheOpt()) // run randomized simulation - // TODO[1760]: event-history: Add lastBlockTime return arg back in. - lastBlockTime := time.Unix(0, 0) - _, simParams, simErr := simulation.SimulateFromSeed( + _, lastBlockTime, simParams, simErr := simulation.SimulateFromSeedProv( b, os.Stdout, app.BaseApp, diff --git a/app/sim_test.go b/app/sim_test.go index c40ff33d44..ccb4d3f2d0 100644 --- a/app/sim_test.go +++ b/app/sim_test.go @@ -144,7 +144,6 @@ func TestFullAppSimulation(t *testing.T) { fmt.Printf("running provenance full app simulation\n") // run randomized simulation - // TODO[1760]: event-history: Add _ return arg back in. _, simParams, simErr := simulation.SimulateFromSeed( t, os.Stdout, @@ -182,7 +181,6 @@ func TestSimple(t *testing.T) { require.Equal(t, "provenanced", app.Name()) // run randomized simulation - // TODO[1760]: event-history: Add _ return arg back in. _, _, simErr := simulation.SimulateFromSeed( t, os.Stdout, @@ -223,9 +221,7 @@ func TestAppImportExport(t *testing.T) { fmt.Printf("running provenance test import export\n") // Run randomized simulation - // TODO[1760]: event-history: Add lastBlockTime return arg back in. - lastBlockTime := time.Unix(0, 0) - _, simParams, simErr := simulation.SimulateFromSeed( + _, lastBlockTime, simParams, simErr := simulation.SimulateFromSeedProv( t, os.Stdout, app.BaseApp, @@ -340,9 +336,7 @@ func TestAppSimulationAfterImport(t *testing.T) { app := New(logger, db, nil, true, map[int64]bool{}, home, simcli.FlagPeriodValue, MakeEncodingConfig(), simtestutil.EmptyAppOptions{}, fauxMerkleModeOpt) // Run randomized simulation - // TODO[1760]: event-history: Add lastBlockTime return arg back in. - lastBlockTime := time.Unix(0, 0) - stopEarly, simParams, simErr := simulation.SimulateFromSeed( + stopEarly, lastBlockTime, simParams, simErr := simulation.SimulateFromSeedProv( t, os.Stdout, app.BaseApp, @@ -390,7 +384,6 @@ func TestAppSimulationAfterImport(t *testing.T) { require.NoError(t, err, "InitChain") simcli.FlagGenesisTimeValue = lastBlockTime.Unix() - // TODO[1760]: event-history: Add _ return arg back in. _, _, err = simulation.SimulateFromSeed( t, os.Stdout, @@ -460,7 +453,6 @@ func TestAppStateDeterminism(t *testing.T) { config.Seed, i+1, numSeeds, j+1, numTimesToRunPerSeed, ) - // TODO[1760]: event-history: Add _ return arg back in. _, _, err := simulation.SimulateFromSeed( t, os.Stdout, diff --git a/app/test_helpers.go b/app/test_helpers.go index c3d08c85f5..84b40f8d12 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -24,6 +24,7 @@ import ( sdkmath "cosmossdk.io/math" dbm "github.com/cosmos/cosmos-db" + "github.com/cosmos/cosmos-sdk/baseapp" codectypes "github.com/cosmos/cosmos-sdk/codec/types" cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" @@ -76,7 +77,7 @@ type SetupOptions struct { ChainID string } -func setup(t *testing.T, withGenesis bool, invCheckPeriod uint) (*App, GenesisState) { +func setup(t *testing.T, withGenesis bool, invCheckPeriod uint, chainID string) (*App, GenesisState) { db := dbm.NewMemDB() encCdc := MakeEncodingConfig() // set default config if not set by the flow @@ -84,7 +85,7 @@ func setup(t *testing.T, withGenesis bool, invCheckPeriod uint) (*App, GenesisSt pioconfig.SetProvenanceConfig("", 0) } - app := New(loggerMaker(), db, nil, true, map[int64]bool{}, t.TempDir(), invCheckPeriod, encCdc, simtestutil.EmptyAppOptions{}) + app := New(loggerMaker(), db, nil, true, map[int64]bool{}, t.TempDir(), invCheckPeriod, encCdc, simtestutil.EmptyAppOptions{}, baseapp.SetChainID(chainID)) if withGenesis { return app, NewDefaultGenesisState(encCdc.Marshaler) } @@ -274,7 +275,7 @@ func genesisStateWithValSet(t *testing.T, // SetupQuerier initializes a new App without genesis and without calling InitChain. func SetupQuerier(t *testing.T) *App { - app, _ := setup(t, false, 0) + app, _ := setup(t, false, 0, "") return app } @@ -285,7 +286,7 @@ func SetupQuerier(t *testing.T) *App { func SetupWithGenesisValSet(t *testing.T, chainID string, valSet *cmttypes.ValidatorSet, genAccs []authtypes.GenesisAccount, balances ...banktypes.Balance) *App { t.Helper() - app, genesisState := setup(t, true, 5) + app, genesisState := setup(t, true, 5, chainID) genesisState = genesisStateWithValSet(t, app, genesisState, valSet, genAccs, balances...) stateBytes, err := json.MarshalIndent(genesisState, "", " ") @@ -534,7 +535,7 @@ func SetupWithGenesisRewardsProgram(t *testing.T, nextRewardProgramID uint64, ge } } - app, genesisState := setup(t, true, 0) + app, genesisState := setup(t, true, 0, "") genesisState = genesisStateWithValSet(t, app, genesisState, valSet, genAccs, balances...) genesisState = genesisStateWithRewards(t, app, genesisState, nextRewardProgramID, genesisRewards) diff --git a/go.mod b/go.mod index 9a3c083b91..5a4e33b609 100644 --- a/go.mod +++ b/go.mod @@ -20,7 +20,7 @@ require ( github.com/cosmos/cosmos-proto v1.0.0-beta.4 github.com/cosmos/cosmos-sdk v0.50.4 github.com/cosmos/go-bip39 v1.0.0 - github.com/cosmos/gogoproto v1.4.11 + github.com/cosmos/gogoproto v1.4.12 github.com/cosmos/ibc-apps/modules/async-icq/v8 v8.0.0 github.com/cosmos/ibc-go/modules/capability v1.0.0 github.com/cosmos/ibc-go/v8 v8.0.0 @@ -219,7 +219,7 @@ replace ( // TODO[1760]: wasm: Put this CosmWasm/wasmd replace back with an updated version (or delete it). // github.com/CosmWasm/wasmd => github.com/provenance-io/wasmd v0.30.0-pio-5 // TODO[1760]: sdk: Put this replace back with an updated version of the sdk from our fork. - github.com/cosmos/cosmos-sdk => github.com/provenance-io/cosmos-sdk v0.50.5-pio-1 + github.com/cosmos/cosmos-sdk => github.com/provenance-io/cosmos-sdk v0.50.5-pio-2 // TODO[1760]: Update once async-icq creates tag with our changes https://github.com/cosmos/ibc-apps/pull/168 github.com/cosmos/ibc-apps/modules/async-icq/v8 => github.com/provenance-io/ibc-apps/modules/async-icq/v8 v8.0.0-prov-1 diff --git a/go.sum b/go.sum index 8a148d9b2a..eb9f9d594b 100644 --- a/go.sum +++ b/go.sum @@ -366,8 +366,8 @@ github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4x github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ4GUkT+tbFI= github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= -github.com/cosmos/gogoproto v1.4.11 h1:LZcMHrx4FjUgrqQSWeaGC1v/TeuVFqSLa43CC6aWR2g= -github.com/cosmos/gogoproto v1.4.11/go.mod h1:/g39Mh8m17X8Q/GDEs5zYTSNaNnInBSohtaxzQnYq1Y= +github.com/cosmos/gogoproto v1.4.12 h1:vB6Lbe/rtnYGjQuFxkPiPYiCybqFT8QvLipDZP8JpFE= +github.com/cosmos/gogoproto v1.4.12/go.mod h1:LnZob1bXRdUoqMMtwYlcR3wjiElmlC+FkjaZRv1/eLY= github.com/cosmos/iavl v1.0.1 h1:D+mYbcRO2wptYzOM1Hxl9cpmmHU1ZEt9T2Wv5nZTeUw= github.com/cosmos/iavl v1.0.1/go.mod h1:8xIUkgVvwvVrBu81scdPty+/Dx9GqwHnAvXz4cwF7RY= github.com/cosmos/ibc-go/modules/capability v1.0.0 h1:r/l++byFtn7jHYa09zlAdSeevo8ci1mVZNO9+V0xsLE= @@ -916,8 +916,8 @@ github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= -github.com/provenance-io/cosmos-sdk v0.50.5-pio-1 h1:GvyZAstTVB9//RugyoUqTRez19qbEWrb2dKNIKbKz3U= -github.com/provenance-io/cosmos-sdk v0.50.5-pio-1/go.mod h1:oV/k6GJgXV9QPoM2fsYDPPsyPBgQbdotv532O6Mz1OQ= +github.com/provenance-io/cosmos-sdk v0.50.5-pio-2 h1:qK+ZN2jBBFEOZZOpefAMBrU5mWj+znU87Gvxbsl8feA= +github.com/provenance-io/cosmos-sdk v0.50.5-pio-2/go.mod h1:oV/k6GJgXV9QPoM2fsYDPPsyPBgQbdotv532O6Mz1OQ= github.com/provenance-io/ibc-apps/modules/async-icq/v8 v8.0.0-prov-1 h1:p+7pxHB0ukO2aow+M6uW9gHgeQl7YJyYGyMSKHZ5My8= github.com/provenance-io/ibc-apps/modules/async-icq/v8 v8.0.0-prov-1/go.mod h1:tObW9uxibh5Z22CtOaHVeTDotCSMyc/2B4MrYdaViBo= github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= diff --git a/internal/handlers/bank_send_restriction_test.go b/internal/handlers/bank_send_restriction_test.go index b0f0061076..2bc72531f2 100644 --- a/internal/handlers/bank_send_restriction_test.go +++ b/internal/handlers/bank_send_restriction_test.go @@ -3,6 +3,7 @@ package handlers_test import ( "fmt" "testing" + "time" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -177,15 +178,18 @@ func ConstructAndSendTx(tt *testing.T, app piosimapp.App, ctx sdk.Context, acct encCfg := moduletestutil.MakeTestEncodingConfig() fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(NewTestGasLimit()))) acct = app.AccountKeeper.GetAccount(ctx, acct.GetAddress()).(*authtypes.BaseAccount) - txBytes, err := SignTxAndGetBytes(NewTestGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct, ctx.ChainID(), msg) + txBytes, err := SignTxAndGetBytes(ctx, NewTestGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct, ctx.ChainID(), msg) require.NoError(tt, err, "SignTxAndGetBytes") - // TODO[1760]: finalize-block: Uncomment the rest of this func. - _ = txBytes - /* - res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) - require.Equal(tt, expectedCode, res.Code, "res=%+v", res) - if len(expectedError) > 0 { - require.Contains(tt, res.Log, expectedError, "DeliverTx result.Log") - } - */ + res, err := app.FinalizeBlock(&abci.RequestFinalizeBlock{ + Height: ctx.BlockHeight() + 1, + Time: time.Now().UTC(), + Txs: [][]byte{txBytes}, + }, + ) + require.NoError(tt, err, "FinalizeBlock expected no error") + require.Len(tt, res.TxResults, 1, "TxResults expected len not met") + require.Equal(tt, int(expectedCode), int(res.TxResults[0].Code), "res=%+v", res) + if len(expectedError) > 0 { + require.Contains(tt, res.TxResults[0].Log, expectedError, "DeliverTx result.Log") + } } diff --git a/internal/handlers/msg_service_router_test.go b/internal/handlers/msg_service_router_test.go index 41997a70fe..f3a52e5cb7 100644 --- a/internal/handlers/msg_service_router_test.go +++ b/internal/handlers/msg_service_router_test.go @@ -19,13 +19,16 @@ import ( dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/tx" cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" "github.com/cosmos/cosmos-sdk/types/tx/signing" + authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + authztypes "github.com/cosmos/cosmos-sdk/x/authz" "github.com/cosmos/cosmos-sdk/x/bank/testutil" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" govtypesv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" @@ -164,10 +167,21 @@ func jsonArrayJoin(entries ...string) string { func getLastProposal(t *testing.T, ctx sdk.Context, app *piosimapp.App) *govtypesv1.Proposal { var rv *govtypesv1.Proposal - // TODO: proposals: Figure out how to get the most recent proposal. - // Propbably involves app.GovKeeper.Proposals.Walk(...). - require.NotNil(t, rv, "no gov props found") - return nil + var highestProposalID uint64 = 0 + + err := app.GovKeeper.Proposals.Walk(ctx, nil, func(key uint64, value govtypesv1.Proposal) (stop bool, err error) { + if value.Id > highestProposalID { + highestProposalID = value.Id + rv = &value + } + return false, nil + }) + if err != nil { + t.Fatalf("Error walking through proposals: %v", err) + } + + require.NotNil(t, rv, "no gov proposals found") + return rv } func TestRegisterMsgService(t *testing.T) { @@ -248,17 +262,19 @@ func TestFailedTx(tt *testing.T) { stopIfFailed(tt) tt.Run("no msg-based fee", func(t *testing.T) { - // TODO[1760]: finalize-block: Uncomment these lines. - _ = encCfg - /* - msg := banktypes.NewMsgSend(addr1, addr2, sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 2))) - fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(NewTestGasLimit()))) - txBytes, err := SignTxAndGetBytes(NewTestGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) - require.NoError(t, err, "SignTxAndGetBytes") - res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) - t.Logf("Events:\n%s\n", eventsString(res.Events, true)) - assert.Equal(t, 5, int(res.Code), "res=%+v", res) - */ + msg := banktypes.NewMsgSend(addr1, addr2, sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 2))) + fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(NewTestGasLimit()))) + txBytes, err := SignTxAndGetBytes(ctx, NewTestGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) + require.NoError(t, err, "SignTxAndGetBytes") + blockRes, err := app.FinalizeBlock( + &abci.RequestFinalizeBlock{ + Height: ctx.BlockHeight() + 1, + Txs: [][]byte{txBytes}, + }, + ) + assert.NoError(t, err, "FinalizeBlock expected no error") + t.Logf("Events:\n%s\n", eventsString(blockRes.TxResults[0].Events, true)) + assert.Equal(t, uint32(0x5), blockRes.TxResults[0].Code, "code 5 insufficient funds error") // Check both account balances after transaction // the 150000stake should have been deducted from account 1, and the send should have failed. @@ -279,7 +295,7 @@ func TestFailedTx(tt *testing.T) { } expEvents = append(expEvents, CreateSendCoinEvents(addr1.String(), feeModuleAccount.GetAddress().String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 150000)))...) - // assertEventsContains(t, res.Events, expEvents) // TODO[1760]: finalize-block + assertEventsContains(t, blockRes.TxResults[0].Events, expEvents) }) // Give acct1 150000stake back. @@ -292,15 +308,18 @@ func TestFailedTx(tt *testing.T) { msgbasedFee := msgfeestypes.NewMsgFee(sdk.MsgTypeURL(msg), sdk.NewInt64Coin(sdk.DefaultBondDenom, 10), "", 0) require.NoError(t, app.MsgFeesKeeper.SetMsgFee(ctx, msgbasedFee), "setting fee 10stake") acct1 = app.AccountKeeper.GetAccount(ctx, acct1.GetAddress()).(*authtypes.BaseAccount) - // TODO[1760]: finalize-block: Uncomment these lines. - /* - fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(NewTestGasLimit())+10)) - txBytes, err := SignTxAndGetBytes(NewTestGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) - require.NoError(t, err, "SignTxAndGetBytes") - res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) - t.Logf("Events:\n%s\n", eventsString(res.Events, true)) - assert.Equal(t, 5, int(res.Code), "res=%+v", res) - */ + fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(NewTestGasLimit())+10)) + txBytes, err := SignTxAndGetBytes(ctx, NewTestGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) + require.NoError(t, err, "SignTxAndGetBytes") + blockRes, err := app.FinalizeBlock( + &abci.RequestFinalizeBlock{ + Height: ctx.BlockHeight() + 1, + Txs: [][]byte{txBytes}, + }, + ) + assert.NoError(t, err, "FinalizeBlock expected no error") + t.Logf("Events:\n%s\n", eventsString(blockRes.TxResults[0].Events, true)) + assert.Equal(t, uint32(0x5), blockRes.TxResults[0].Code, "code 5 insufficient funds error") // Check both account balances after transaction // the 150000 should have been deducted from account 1, and the send should have failed. @@ -321,7 +340,7 @@ func TestFailedTx(tt *testing.T) { } expEvents = append(expEvents, CreateSendCoinEvents(addr1.String(), feeModuleAccount.GetAddress().String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(NewTestGasLimit()))))...) - // assertEventsContains(t, res.Events, expEvents) // TODO[1760]: finalize-block + assertEventsContains(t, blockRes.TxResults[0].Events, expEvents) }) } @@ -352,18 +371,18 @@ func TestMsgService(tt *testing.T) { // Sending 100hotdog with fees of 150000stake. // account 1 will lose 100hotdog,150000stake // account 2 will gain 100hotdog - - // TODO[1760]: finalize-block: Uncomment these lines. - _ = encCfg - /* - msg := banktypes.NewMsgSend(addr1, addr2, sdk.NewCoins(sdk.NewInt64Coin("hotdog", 100))) - fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 150000)) - txBytes, err := SignTxAndGetBytes(NewTestGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) - require.NoError(t, err, "SignTxAndGetBytes") - res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) - t.Logf("Events:\n%s\n", eventsString(res.Events, true)) - require.Equal(t, abci.CodeTypeOK, res.Code, "res=%+v", res) - */ + msg := banktypes.NewMsgSend(addr1, addr2, sdk.NewCoins(sdk.NewInt64Coin("hotdog", 100))) + fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 150000)) + txBytes, err := SignTxAndGetBytes(ctx, NewTestGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) + require.NoError(t, err, "SignTxAndGetBytes") + blockRes, err := app.FinalizeBlock( + &abci.RequestFinalizeBlock{ + Height: ctx.BlockHeight() + 1, + Txs: [][]byte{txBytes}, + }, + ) + t.Logf("Events:\n%s\n", eventsString(blockRes.TxResults[0].Events, true)) + assert.NoError(t, err, "FinalizeBlock() error") // Check both account balances after transaction addr1AfterBalance := app.BankKeeper.GetAllBalances(ctx, addr1).String() @@ -382,8 +401,7 @@ func TestMsgService(tt *testing.T) { } // fee charge in antehandler expEvents = append(expEvents, CreateSendCoinEvents(addr1.String(), feeModuleAccount.GetAddress().String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(NewTestGasLimit()))))...) - - // assertEventsContains(t, res.Events, expEvents) // TODO[1760]: finalize-block + assertEventsContains(t, blockRes.TxResults[0].Events, expEvents) }) tt.Run("800hotdog fee associated with msg type", func(t *testing.T) { @@ -395,15 +413,17 @@ func TestMsgService(tt *testing.T) { msgbasedFee := msgfeestypes.NewMsgFee(sdk.MsgTypeURL(msg), sdk.NewInt64Coin("hotdog", 800), "", 0) require.NoError(t, app.MsgFeesKeeper.SetMsgFee(ctx, msgbasedFee), "setting fee 800hotdog") acct1 = app.AccountKeeper.GetAccount(ctx, acct1.GetAddress()).(*authtypes.BaseAccount) - // TODO[1760]: finalize-block: Uncomment these lines. - /* - fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(NewTestGasLimit())+100), sdk.NewInt64Coin("hotdog", 800)) - txBytes, err := SignTxAndGetBytes(NewTestGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) - require.NoError(t, err, "SignTxAndGetBytes") - res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) - t.Logf("Events:\n%s\n", eventsString(res.Events, true)) - require.Equal(t, abci.CodeTypeOK, res.Code, "res=%+v", res) - */ + fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(NewTestGasLimit())+100), sdk.NewInt64Coin("hotdog", 800)) + txBytes, err := SignTxAndGetBytes(ctx, NewTestGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) + require.NoError(t, err, "SignTxAndGetBytes") + blockRes, err := app.FinalizeBlock( + &abci.RequestFinalizeBlock{ + Height: ctx.BlockHeight() + 1, + Txs: [][]byte{txBytes}, + }, + ) + t.Logf("Events:\n%s\n", eventsString(blockRes.TxResults[0].Events, true)) + assert.NoError(t, err, "FinalizeBlock() error") addr1AfterBalance := app.BankKeeper.GetAllBalances(ctx, addr1).String() addr2AfterBalance := app.BankKeeper.GetAllBalances(ctx, addr2).String() @@ -431,7 +451,7 @@ func TestMsgService(tt *testing.T) { // swept fee amount expEvents = append(expEvents, CreateSendCoinEvents(addr1.String(), feeModuleAccount.GetAddress().String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 100)))...) - // assertEventsContains(t, res.Events, expEvents) // TODO[1760]: finalize-block + assertEventsContains(t, blockRes.TxResults[0].Events, expEvents) }) tt.Run("10stake fee associated with msg type", func(t *testing.T) { @@ -440,15 +460,17 @@ func TestMsgService(tt *testing.T) { require.NoError(t, app.MsgFeesKeeper.SetMsgFee(ctx, msgbasedFee), "setting fee 10stake") acct1 = app.AccountKeeper.GetAccount(ctx, acct1.GetAddress()).(*authtypes.BaseAccount) - // TODO[1760]: finalize-block: Uncomment these lines. - /* - fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(NewTestGasLimit())+111)) - txBytes, err := SignTxAndGetBytes(NewTestGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) - require.NoError(t, err, "SignTxAndGetBytes") - res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) - t.Logf("Events:\n%s\n", eventsString(res.Events, true)) - require.Equal(t, abci.CodeTypeOK, res.Code, "res=%+v", res) - */ + fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(NewTestGasLimit())+111)) + txBytes, err := SignTxAndGetBytes(ctx, NewTestGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) + require.NoError(t, err, "SignTxAndGetBytes") + blockRes, err := app.FinalizeBlock( + &abci.RequestFinalizeBlock{ + Height: ctx.BlockHeight() + 1, + Txs: [][]byte{txBytes}, + }, + ) + t.Logf("Events:\n%s\n", eventsString(blockRes.TxResults[0].Events, true)) + assert.NoError(t, err, "FinalizeBlock() error") addr1AfterBalance := app.BankKeeper.GetAllBalances(ctx, addr1).String() addr2AfterBalance := app.BankKeeper.GetAllBalances(ctx, addr2).String() @@ -476,7 +498,7 @@ func TestMsgService(tt *testing.T) { // swept fee amount expEvents = append(expEvents, CreateSendCoinEvents(addr1.String(), feeModuleAccount.GetAddress().String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 101)))...) - // assertEventsContains(t, res.Events, expEvents) // TODO[1760]: finalize-block + assertEventsContains(t, blockRes.TxResults[0].Events, expEvents) }) } @@ -509,15 +531,16 @@ func TestMsgServiceMsgFeeWithRecipient(t *testing.T) { msgbasedFee := msgfeestypes.NewMsgFee(sdk.MsgTypeURL(msg), sdk.NewInt64Coin("hotdog", 800), addr2.String(), 7_500) require.NoError(t, app.MsgFeesKeeper.SetMsgFee(ctx, msgbasedFee), "setting fee 800hotdog addr2 75%") - // TODO[1760]: finalize-block: Uncomment these lines. - _ = encCfg - /* - fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(gasAmt)), sdk.NewInt64Coin("hotdog", 800)) - txBytes, err := SignTxAndGetBytes(gasAmt, fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) - require.NoError(t, err, "SignTxAndGetBytes") - res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) - require.Equal(t, abci.CodeTypeOK, res.Code, "res=%+v", res) - */ + fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(gasAmt)), sdk.NewInt64Coin("hotdog", 800)) + txBytes, err := SignTxAndGetBytes(ctx, gasAmt, fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) + require.NoError(t, err, "SignTxAndGetBytes") + blockRes, err := app.FinalizeBlock( + &abci.RequestFinalizeBlock{ + Height: ctx.BlockHeight() + 1, + Txs: [][]byte{txBytes}, + }, + ) + assert.NoError(t, err, "FinalizeBlock() error") // Check both account balances after transaction addr1AfterBalance := app.BankKeeper.GetAllBalances(ctx, addr1).String() @@ -546,7 +569,7 @@ func TestMsgServiceMsgFeeWithRecipient(t *testing.T) { // fee charged for msg based fee expEvents = append(expEvents, CreateSendCoinEvents(addr1.String(), addr2.String(), sdk.NewCoins(sdk.NewInt64Coin("hotdog", 600)))...) - // assertEventsContains(t, res.Events, expEvents) // TODO[1760]: finalize-block + assertEventsContains(t, blockRes.TxResults[0].Events, expEvents) } func TestMsgServiceAuthz(tt *testing.T) { @@ -590,17 +613,19 @@ func TestMsgServiceAuthz(tt *testing.T) { // tx authz send message with correct amount of fees associated gasAmt := NewTestGasLimit() + 20_000 acct2 = app.AccountKeeper.GetAccount(ctx, acct2.GetAddress()).(*authtypes.BaseAccount) - // TODO[1760]: finalize-block: Uncomment these lines. - _ = encCfg - /* - msg := banktypes.NewMsgSend(addr1, addr3, sdk.NewCoins(sdk.NewInt64Coin("hotdog", 100))) - msgExec := authztypes.NewMsgExec(addr2, []sdk.Msg{msg}) - fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(gasAmt)), sdk.NewInt64Coin("hotdog", 800)) - txBytes, err := SignTxAndGetBytes(gasAmt, fees, encCfg, priv2.PubKey(), priv2, *acct2, ctx.ChainID(), &msgExec) - require.NoError(t, err, "SignTxAndGetBytes") - res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) - require.Equal(t, abci.CodeTypeOK, res.Code, "res=%+v", res) - */ + + msg := banktypes.NewMsgSend(addr1, addr3, sdk.NewCoins(sdk.NewInt64Coin("hotdog", 100))) + msgExec := authztypes.NewMsgExec(addr2, []sdk.Msg{msg}) + fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(gasAmt)), sdk.NewInt64Coin("hotdog", 800)) + txBytes, err := SignTxAndGetBytes(ctx, gasAmt, fees, encCfg, priv2.PubKey(), priv2, *acct2, ctx.ChainID(), &msgExec) + require.NoError(t, err, "SignTxAndGetBytes") + blockRes, err := app.FinalizeBlock( + &abci.RequestFinalizeBlock{ + Height: ctx.BlockHeight() + 1, + Txs: [][]byte{txBytes}, + }, + ) + assert.NoError(t, err, "FinalizeBlock() error") // acct1 sent 100hotdog to acct3 with acct2 paying fees 100000stake in gas, 800hotdog msgfees addr1AfterBalance := app.BankKeeper.GetAllBalances(ctx, addr1).String() @@ -627,22 +652,24 @@ func TestMsgServiceAuthz(tt *testing.T) { expEvents = append(expEvents, CreateSendCoinEvents(addr2.String(), feeModuleAccount.GetAddress().String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(gasAmt))))...) // fee charged for msg based fee expEvents = append(expEvents, CreateSendCoinEvents(addr2.String(), feeModuleAccount.GetAddress().String(), sdk.NewCoins(sdk.NewInt64Coin("hotdog", 800)))...) - // assertEventsContains(t, res.Events, expEvents) // TODO[1760]: finalize-block + assertEventsContains(t, blockRes.TxResults[0].Events, expEvents) }) tt.Run("exec two sends", func(t *testing.T) { // send 2 successful authz messages acct2 = app.AccountKeeper.GetAccount(ctx, acct2.GetAddress()).(*authtypes.BaseAccount) - // TODO[1760]: finalize-block: Uncomment these lines. - /* - msg := banktypes.NewMsgSend(addr1, addr3, sdk.NewCoins(sdk.NewInt64Coin("hotdog", 80))) - msgExec := authztypes.NewMsgExec(addr2, []sdk.Msg{msg, msg}) - fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 300000), sdk.NewInt64Coin("hotdog", 1600)) - txBytes, err := SignTxAndGetBytes(NewTestGasLimit()*2, fees, encCfg, priv2.PubKey(), priv2, *acct2, ctx.ChainID(), &msgExec) - require.NoError(t, err, "SignTxAndGetBytes") - res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) - require.Equal(t, abci.CodeTypeOK, res.Code, "res=%+v", res) - */ + msg := banktypes.NewMsgSend(addr1, addr3, sdk.NewCoins(sdk.NewInt64Coin("hotdog", 80))) + msgExec := authztypes.NewMsgExec(addr2, []sdk.Msg{msg, msg}) + fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 300000), sdk.NewInt64Coin("hotdog", 1600)) + txBytes, err := SignTxAndGetBytes(ctx, NewTestGasLimit()*2, fees, encCfg, priv2.PubKey(), priv2, *acct2, ctx.ChainID(), &msgExec) + require.NoError(t, err, "SignTxAndGetBytes") + blockRes, err := app.FinalizeBlock( + &abci.RequestFinalizeBlock{ + Height: ctx.BlockHeight() + 1, + Txs: [][]byte{txBytes}, + }, + ) + assert.NoError(t, err, "FinalizeBlock() error") // acct1 2x sent 100hotdog to acct3 with acct2 paying fees 200000stake in gas, 1600hotdog msgfees addr1AfterBalance := app.BankKeeper.GetAllBalances(ctx, addr1).String() @@ -670,21 +697,24 @@ func TestMsgServiceAuthz(tt *testing.T) { // fee charged for msg based fee expEvents = append(expEvents, CreateSendCoinEvents(addr2.String(), feeModuleAccount.GetAddress().String(), sdk.NewCoins(sdk.NewInt64Coin("hotdog", 1600)))...) - // assertEventsContains(t, res.Events, expEvents) // TODO[1760]: finalize-block + assertEventsContains(t, blockRes.TxResults[0].Events, expEvents) }) tt.Run("not enough fees", func(t *testing.T) { acct2 = app.AccountKeeper.GetAccount(ctx, acct2.GetAddress()).(*authtypes.BaseAccount) - // TODO[1760]: finalize-block: Uncomment these lines. - /* - msg := banktypes.NewMsgSend(addr1, addr3, sdk.NewCoins(sdk.NewInt64Coin("hotdog", 100))) - msgExec := authztypes.NewMsgExec(addr2, []sdk.Msg{msg}) - fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 100000), sdk.NewInt64Coin("hotdog", 799)) - txBytes, err := SignTxAndGetBytes(NewTestGasLimit(), fees, encCfg, priv2.PubKey(), priv2, *acct2, ctx.ChainID(), &msgExec) - require.NoError(t, err, "SignTxAndGetBytes") - res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) - require.Equal(t, 13, int(res.Code), "res=%+v", res) - */ + msg := banktypes.NewMsgSend(addr1, addr3, sdk.NewCoins(sdk.NewInt64Coin("hotdog", 100))) + msgExec := authztypes.NewMsgExec(addr2, []sdk.Msg{msg}) + fees := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 100000), sdk.NewInt64Coin("hotdog", 799)) + txBytes, err := SignTxAndGetBytes(ctx, NewTestGasLimit(), fees, encCfg, priv2.PubKey(), priv2, *acct2, ctx.ChainID(), &msgExec) + require.NoError(t, err, "SignTxAndGetBytes") + blockRes, err := app.FinalizeBlock( + &abci.RequestFinalizeBlock{ + Height: ctx.BlockHeight() + 1, + Txs: [][]byte{txBytes}, + }, + ) + t.Logf("Events:\n%s\n", eventsString(blockRes.TxResults[0].Events, true)) + assert.Equal(t, uint32(0xd), blockRes.TxResults[0].Code, "code 13 insufficient fee") // addr2 pays the base fee, but nothing else is changes. addr1AfterBalance := app.BankKeeper.GetAllBalances(ctx, addr1).String() @@ -724,20 +754,23 @@ func TestMsgServiceAssessMsgFee(tt *testing.T) { assert.Equal(tt, "", addr2beforeBalance, "addr2beforeBalance") stopIfFailed(tt) tt.Run("assess custom msg fee", func(t *testing.T) { - // TODO[1760]: finalize-block: Uncomment these lines. - _ = encCfg - /* - msgFeeCoin := sdk.NewInt64Coin(msgfeestypes.UsdDenom, 7) - msg := msgfeestypes.NewMsgAssessCustomMsgFeeRequest("test", msgFeeCoin, addr2.String(), addr1.String(), "") - fees := sdk.NewCoins( - sdk.NewInt64Coin(sdk.DefaultBondDenom, 150000), - sdk.NewInt64Coin(NHash, 1_190_500_001), - ) - txBytes, err := SignTxAndGetBytes(NewTestGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), &msg) - require.NoError(t, err, "SignTxAndGetBytes") - res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) - require.Equal(t, abci.CodeTypeOK, res.Code, "res=%+v", res) - */ + + msgFeeCoin := sdk.NewInt64Coin(msgfeestypes.UsdDenom, 7) + msg := msgfeestypes.NewMsgAssessCustomMsgFeeRequest("test", msgFeeCoin, addr2.String(), addr1.String(), "") + fees := sdk.NewCoins( + sdk.NewInt64Coin(sdk.DefaultBondDenom, 150000), + sdk.NewInt64Coin(NHash, 1_190_500_001), + ) + txBytes, err := SignTxAndGetBytes(ctx, NewTestGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), &msg) + require.NoError(t, err, "SignTxAndGetBytes") + blockRes, err := app.FinalizeBlock( + &abci.RequestFinalizeBlock{ + Height: ctx.BlockHeight() + 1, + Txs: [][]byte{txBytes}, + }, + ) + t.Logf("Events:\n%s\n", eventsString(blockRes.TxResults[0].Events, true)) + assert.NoError(t, err, "FinalizeBlock() error") addr1AfterBalance := app.BankKeeper.GetAllBalances(ctx, addr1).String() addr2AfterBalance := app.BankKeeper.GetAllBalances(ctx, addr2).String() @@ -777,7 +810,7 @@ func TestMsgServiceAssessMsgFee(tt *testing.T) { // swept amount expEvents = append(expEvents, CreateSendCoinEvents(addr1.String(), feeModuleAccount.GetAddress().String(), sdk.NewCoins(sdk.NewInt64Coin("nhash", 1015500001)))...) - // assertEventsContains(t, res.Events, expEvents) // TODO[1760]: finalize-block + assertEventsContains(t, blockRes.TxResults[0].Events, expEvents) }) } @@ -809,20 +842,22 @@ func TestMsgServiceAssessMsgFeeWithBips(tt *testing.T) { assert.Equal(tt, "", addr2beforeBalance, "addr2beforeBalance") stopIfFailed(tt) tt.Run("assess custom msg fee", func(t *testing.T) { - // TODO[1760]: finalize-block: Uncomment these lines. - _ = encCfg - /* - msgFeeCoin := sdk.NewInt64Coin(msgfeestypes.UsdDenom, 7) - msg := msgfeestypes.NewMsgAssessCustomMsgFeeRequest("test", msgFeeCoin, addr2.String(), addr1.String(), "2500") - fees := sdk.NewCoins( - sdk.NewInt64Coin(sdk.DefaultBondDenom, 150000), - sdk.NewInt64Coin(NHash, 1_190_500_001), - ) - txBytes, err := SignTxAndGetBytes(NewTestGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), &msg) - require.NoError(t, err, "SignTxAndGetBytes") - res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) - require.Equal(t, abci.CodeTypeOK, res.Code, "res=%+v", res) - */ + msgFeeCoin := sdk.NewInt64Coin(msgfeestypes.UsdDenom, 7) + msg := msgfeestypes.NewMsgAssessCustomMsgFeeRequest("test", msgFeeCoin, addr2.String(), addr1.String(), "2500") + fees := sdk.NewCoins( + sdk.NewInt64Coin(sdk.DefaultBondDenom, 150000), + sdk.NewInt64Coin(NHash, 1_190_500_001), + ) + txBytes, err := SignTxAndGetBytes(ctx, NewTestGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), &msg) + require.NoError(t, err, "SignTxAndGetBytes") + blockRes, err := app.FinalizeBlock( + &abci.RequestFinalizeBlock{ + Height: ctx.BlockHeight() + 1, + Txs: [][]byte{txBytes}, + }, + ) + t.Logf("Events:\n%s\n", eventsString(blockRes.TxResults[0].Events, true)) + assert.NoError(t, err, "FinalizeBlock() error") addr1AfterBalance := app.BankKeeper.GetAllBalances(ctx, addr1).String() addr2AfterBalance := app.BankKeeper.GetAllBalances(ctx, addr2).String() @@ -863,7 +898,7 @@ func TestMsgServiceAssessMsgFeeWithBips(tt *testing.T) { // swept amount expEvents = append(expEvents, CreateSendCoinEvents(addr1.String(), feeModuleAccount.GetAddress().String(), sdk.NewCoins(sdk.NewInt64Coin("nhash", 1015500001)))...) - // assertEventsContains(t, res.Events, expEvents) // TODO[1760]: finalize-block + assertEventsContains(t, blockRes.TxResults[0].Events, expEvents) }) } @@ -896,20 +931,23 @@ func TestMsgServiceAssessMsgFeeNoRecipient(tt *testing.T) { assert.Equal(tt, "", addr2beforeBalance, "addr2beforeBalance") stopIfFailed(tt) tt.Run("assess custom msg fee", func(t *testing.T) { - // TODO[1760]: finalize-block: Uncomment these lines. - _ = encCfg - /* - msgFeeCoin := sdk.NewInt64Coin(msgfeestypes.UsdDenom, 7) - msg := msgfeestypes.NewMsgAssessCustomMsgFeeRequest("test", msgFeeCoin, "", addr1.String(), "") - fees := sdk.NewCoins( - sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(NewTestGasLimit())), - sdk.NewInt64Coin(NHash, 1_190_500_001), - ) - txBytes, err := SignTxAndGetBytes(NewTestGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), &msg) - require.NoError(t, err, "SignTxAndGetBytes") - res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) - require.Equal(t, abci.CodeTypeOK, res.Code, "res=%+v", res) - */ + + msgFeeCoin := sdk.NewInt64Coin(msgfeestypes.UsdDenom, 7) + msg := msgfeestypes.NewMsgAssessCustomMsgFeeRequest("test", msgFeeCoin, "", addr1.String(), "") + fees := sdk.NewCoins( + sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(NewTestGasLimit())), + sdk.NewInt64Coin(NHash, 1_190_500_001), + ) + txBytes, err := SignTxAndGetBytes(ctx, NewTestGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), &msg) + require.NoError(t, err, "SignTxAndGetBytes") + blockRes, err := app.FinalizeBlock( + &abci.RequestFinalizeBlock{ + Height: ctx.BlockHeight() + 1, + Txs: [][]byte{txBytes}, + }, + ) + t.Logf("Events:\n%s\n", eventsString(blockRes.TxResults[0].Events, true)) + assert.NoError(t, err, "FinalizeBlock() error") addr1AfterBalance := app.BankKeeper.GetAllBalances(ctx, addr1).String() assert.Equal(t, "1000hotdog,1000stake", addr1AfterBalance, "addr1AfterBalance") @@ -945,14 +983,13 @@ func TestMsgServiceAssessMsgFeeNoRecipient(tt *testing.T) { // swept amount expEvents = append(expEvents, CreateSendCoinEvents(addr1.String(), feeModuleAccount.GetAddress().String(), sdk.NewCoins(sdk.NewInt64Coin("nhash", 1015500001)))...) - // assertEventsContains(t, res.Events, expEvents) // TODO[1760]: finalize-block + assertEventsContains(t, blockRes.TxResults[0].Events, expEvents) }) } func TestRewardsProgramStartError(t *testing.T) { encCfg := moduletestutil.MakeTestEncodingConfig() priv, _, addr := testdata.KeyTestPubAddr() - //_, _, addr2 := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr, priv.PubKey(), 0, 0) acct1Balance := sdk.NewCoins( sdk.NewInt64Coin("hotdog", 1000), sdk.NewInt64Coin("atom", 1000), @@ -993,19 +1030,21 @@ func TestRewardsProgramStartError(t *testing.T) { }, ) - // TODO[1760]: finalize-block: Uncomment these lines. - _, _ = encCfg, rewardProgram - /* - txBytes, err := SignTxAndGetBytes( - NewTestRewardsGasLimit(), - sdk.NewCoins(sdk.NewInt64Coin("atom", 150), sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 1_190_500_000)), - encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), - &rewardProgram, - ) - require.NoError(t, err, "SignTxAndGetBytes") - res := app.DeliverTx(abci.RequestDeliverTx{Tx: txBytes}) - require.True(t, res.IsErr(), "Should return an error: res=%+v", res) - */ + txBytes, err := SignTxAndGetBytes(ctx, + NewTestRewardsGasLimit(), + sdk.NewCoins(sdk.NewInt64Coin("atom", 150), sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 1_190_500_000)), + encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), + &rewardProgram, + ) + require.NoError(t, err, "SignTxAndGetBytes") + blockRes, err := app.FinalizeBlock( + &abci.RequestFinalizeBlock{ + Height: ctx.BlockHeight() + 1, + Txs: [][]byte{txBytes}, + }, + ) + assert.Equal(t, uint32(0x1), blockRes.TxResults[0].Code, "claims period error") + assert.NoError(t, err, "FinalizeBlock") } func TestRewardsProgramStart(t *testing.T) { @@ -1051,19 +1090,23 @@ func TestRewardsProgramStart(t *testing.T) { }, }, ) - // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: 2, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block - txReward, err := SignTx( + + txReward, err := SignTxAndGetBytes( + ctx, NewTestRewardsGasLimit(), sdk.NewCoins(sdk.NewInt64Coin("atom", 150), sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 1_190_500_000)), encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), &rewardProgram, ) - require.NoError(t, err, "SignTx") - _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), txReward) - require.NoError(t, errFromDeliverTx, "SimDeliver") - assert.NotEmpty(t, res.GetEvents(), "res.GetEvents()") - // app.EndBlock(abci.RequestEndBlock{Height: 2}) // TODO[1760]: finalize-block - app.Commit() + require.NoError(t, err, "SignTxAndGetBytes") + + blockRes, err := app.FinalizeBlock(&abci.RequestFinalizeBlock{ + Height: ctx.BlockHeight() + 1, + Time: time.Now().UTC(), + Txs: [][]byte{txReward}, + }, + ) + assert.NoError(t, err, "FinalizeBlock expected no error") expEvents := []abci.Event{ NewEvent(rewardtypes.EventTypeRewardProgramCreated, @@ -1071,7 +1114,7 @@ func TestRewardsProgramStart(t *testing.T) { NewEvent(sdk.EventTypeMessage, NewAttribute(sdk.AttributeKeyAction, sdk.MsgTypeURL(&rewardtypes.MsgCreateRewardProgramRequest{}))), } - assertEventsContains(t, res.Events, expEvents) + assertEventsContains(t, blockRes.TxResults[0].Events, expEvents) } func TestRewardsProgramStartPerformQualifyingActions(t *testing.T) { @@ -1118,18 +1161,22 @@ func TestRewardsProgramStartPerformQualifyingActions(t *testing.T) { }, }, ) - // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: 2, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block - txReward, err := SignTx( + txReward, err := SignTxAndGetBytes( + ctx, NewTestRewardsGasLimit(), sdk.NewCoins(sdk.NewInt64Coin("atom", 150), sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 1_190_500_000)), encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), &rewardProgram, ) - require.NoError(t, err, "SignTx") - _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), txReward) - require.NoError(t, errFromDeliverTx, "SimDeliver") - assert.NotEmpty(t, res.GetEvents(), "res.GetEvents()") - // app.EndBlock(abci.RequestEndBlock{Height: 2}) // TODO[1760]: finalize-block + require.NoError(t, err, "SignTxAndGetBytes") + + _, err = app.FinalizeBlock(&abci.RequestFinalizeBlock{ + Height: ctx.BlockHeight() + 1, + Time: time.Now().UTC(), + Txs: [][]byte{txReward}, + }, + ) + require.NoError(t, err, "FinalizeBlock expected no error") app.Commit() time.Sleep(110 * time.Millisecond) @@ -1138,15 +1185,17 @@ func TestRewardsProgramStartPerformQualifyingActions(t *testing.T) { fees := sdk.NewCoins(sdk.NewInt64Coin("atom", 150)) acct1 = app.AccountKeeper.GetAccount(ctx, acct1.GetAddress()).(*authtypes.BaseAccount) seq := acct1.Sequence - for height := int64(3); height <= int64(100); height++ { - // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: height, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block + for height := int64(2); height <= int64(99); height++ { require.NoError(t, acct1.SetSequence(seq), "[%d]: SetSequence(%d)", height, seq) - tx1, err1 := SignTx(NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) - require.NoError(t, err1, "[%d]: SignTx", height) - _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), tx1) - require.NoError(t, errFromDeliverTx, "[%d]: SimDeliver", height) - assert.NotEmpty(t, res.GetEvents(), "[%d]: res.GetEvents()", height) - // app.EndBlock(abci.RequestEndBlock{Height: height}) // TODO[1760]: finalize-block + tx1, err1 := SignTxAndGetBytes(ctx, NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) + require.NoError(t, err1, "[%d]: SignTxAndGetBytes", height) + _, err := app.FinalizeBlock(&abci.RequestFinalizeBlock{ + Height: height, + Time: time.Now().UTC(), + Txs: [][]byte{tx1}, + }, + ) + require.NoError(t, err, "FinalizeBlock expected no error") app.Commit() seq = seq + 1 } @@ -1213,6 +1262,7 @@ func TestRewardsProgramStartPerformQualifyingActionsRecordedRewardsUnclaimable(t priv, _, addr := testdata.KeyTestPubAddr() _, _, addr2 := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr, priv.PubKey(), 0, 0) + pioconfig.SetProvenanceConfig("nhash", 1) acct1Balance := sdk.NewCoins(sdk.NewInt64Coin("atom", 10000000), sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 1000000_000_000_000)) rewardProgram := rewardtypes.NewRewardProgram( @@ -1260,15 +1310,18 @@ func TestRewardsProgramStartPerformQualifyingActionsRecordedRewardsUnclaimable(t // get past the reward start time ( test that reward program starts up after 50ms) time.Sleep(55 * time.Millisecond) - for height := int64(2); height < int64(22); height++ { - // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: height, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block + for height := int64(1); height < int64(21); height++ { require.NoError(t, acct1.SetSequence(seq), "[%d]: SetSequence(%d)", height, seq) - tx1, err1 := SignTx(NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) - require.NoError(t, err1, "[%d]: SignTx", height) - _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), tx1) - require.NoError(t, errFromDeliverTx, "[%d]: SimDeliver", height) - assert.NotEmpty(t, res.GetEvents(), "[%d]: res.GetEvents()", height) - // app.EndBlock(abci.RequestEndBlock{Height: height}) // TODO[1760]: finalize-block + tx1, err1 := SignTxAndGetBytes(ctx, NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) + require.NoError(t, err1, "[%d]: SignTxAndGetBytes", height) + + _, err := app.FinalizeBlock(&abci.RequestFinalizeBlock{ + Height: height, + Time: time.Now().UTC(), + Txs: [][]byte{tx1}, + }, + ) + require.NoError(t, err, "FinalizeBlock expected no error") app.Commit() seq = seq + 1 } @@ -1349,6 +1402,7 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc priv, _, addr := testdata.KeyTestPubAddr() _, _, addr2 := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr, priv.PubKey(), 0, 0) + pioconfig.SetProvenanceConfig("nhash", 1) acct1Balance := sdk.NewCoins(sdk.NewInt64Coin("atom", 10000000), sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 1000000_000_000_000)) rewardProgram := rewardtypes.NewRewardProgram( @@ -1398,18 +1452,21 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc time.Sleep(150 * time.Millisecond) //go through 5 blocks, but take a long time to cut blocks. - for height := int64(2); height < int64(7); height++ { - // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: height, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block + for height := int64(1); height < int64(6); height++ { require.NoError(t, acct1.SetSequence(seq), "[%d]: SetSequence(%d)", height, seq) - tx1, err1 := SignTx(NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) - require.NoError(t, err1, "[%d]: SignTx", height) - _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), tx1) - require.NoError(t, errFromDeliverTx, "[%d]: SimDeliver", height) - assert.NotEmpty(t, res.GetEvents(), "[%d]: res.GetEvents()", height) + tx1, err1 := SignTxAndGetBytes(ctx, NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) + require.NoError(t, err1, "[%d]: SignTxAndGetBytes", height) + + _, err := app.FinalizeBlock(&abci.RequestFinalizeBlock{ + Height: height, + Time: time.Now().UTC(), + Txs: [][]byte{tx1}, + }, + ) + require.NoError(t, err, "FinalizeBlock expected no error") + app.Commit() // wait for claim period to end (claim period is 1s) time.Sleep(1500 * time.Millisecond) - // app.EndBlock(abci.RequestEndBlock{Height: height}) // TODO[1760]: finalize-block - app.Commit() seq = seq + 1 } @@ -1464,42 +1521,44 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc // get the accoutn balances of acct1 balance := app.BankKeeper.GetAllBalances(ctx, acct1.GetAddress()) // claim rewards for the address - // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: 7, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block - // TODO[1760]: finalize-block: Uncomment these lines. - /* - msgClaim := rewardtypes.NewMsgClaimAllRewardsRequest(acct1.Address) - require.NoError(t, acct1.SetSequence(seq), "SetSequence(%d)", seq) - txClaim, errClaim := SignTxAndGetBytes( - NewTestRewardsGasLimit(), - fees, - encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), - msgClaim, - ) - require.NoError(t, errClaim, "SignTxAndGetBytes") - res := app.DeliverTx(abci.RequestDeliverTx{Tx: txClaim}) - require.Equal(t, true, res.IsOK(), "res=%+v", res) - // unmarshal the TxMsgData - var protoResult sdk.TxMsgData - require.NoError(t, proto.Unmarshal(res.Data, &protoResult), "unmarshalling protoResult") - require.Len(t, protoResult.MsgResponses, 1, "protoResult.MsgResponses") - require.Equal(t, protoResult.MsgResponses[0].GetTypeUrl(), "/provenance.reward.v1.MsgClaimAllRewardsResponse", - "protoResult.MsgResponses[0].GetTypeUrl()") - claimResponse := rewardtypes.MsgClaimAllRewardsResponse{} - require.NoError(t, claimResponse.Unmarshal(protoResult.MsgResponses[0].Value), "unmarshalling claimResponse") - assert.Equal(t, sdk.NewInt64Coin("nhash", 50_000_000_000).String(), claimResponse.TotalRewardClaim[0].String(), - "TotalRewardClaim") - if assert.Len(t, claimResponse.ClaimDetails, 1, "ClaimDetails") { - assert.Equal(t, 1, int(claimResponse.ClaimDetails[0].RewardProgramId), "RewardProgramId") - assert.Equal(t, sdk.NewInt64Coin("nhash", 50_000_000_000).String(), - claimResponse.ClaimDetails[0].TotalRewardClaim.String(), "ClaimDetails TotalRewardClaim") - if assert.Len(t, claimResponse.ClaimDetails[0].ClaimedRewardPeriodDetails, 5, "ClaimedRewardPeriodDetails") { - assert.Equal(t, sdk.NewInt64Coin("nhash", 10_000_000_000).String(), - claimResponse.ClaimDetails[0].ClaimedRewardPeriodDetails[0].ClaimPeriodReward.String(), "ClaimPeriodReward") - } + msgClaim := rewardtypes.NewMsgClaimAllRewardsRequest(acct1.Address) + require.NoError(t, acct1.SetSequence(seq), "SetSequence(%d)", seq) + txClaim, errClaim := SignTxAndGetBytes( + ctx, + NewTestRewardsGasLimit(), + fees, + encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), + msgClaim, + ) + require.NoError(t, errClaim, "SignTxAndGetBytes") + res, err := app.FinalizeBlock(&abci.RequestFinalizeBlock{ + Height: 6, + Time: time.Now().UTC(), + Txs: [][]byte{txClaim}, + }, + ) + require.NoError(t, err, "FinalizeBlock expected no error") + + // unmarshal the TxMsgData + var protoResult sdk.TxMsgData + + require.NoError(t, app.AppCodec().Unmarshal(res.TxResults[0].Data, &protoResult), "unmarshalling protoResult") + require.Len(t, protoResult.MsgResponses, 1, "protoResult.MsgResponses") + require.Equal(t, protoResult.MsgResponses[0].GetTypeUrl(), "/provenance.reward.v1.MsgClaimAllRewardsResponse", + "protoResult.MsgResponses[0].GetTypeUrl()") + claimResponse := rewardtypes.MsgClaimAllRewardsResponse{} + require.NoError(t, claimResponse.Unmarshal(protoResult.MsgResponses[0].Value), "unmarshalling claimResponse") + assert.Equal(t, sdk.NewInt64Coin("nhash", 50_000_000_000).String(), claimResponse.TotalRewardClaim[0].String(), + "TotalRewardClaim") + if assert.Len(t, claimResponse.ClaimDetails, 1, "ClaimDetails") { + assert.Equal(t, 1, int(claimResponse.ClaimDetails[0].RewardProgramId), "RewardProgramId") + assert.Equal(t, sdk.NewInt64Coin("nhash", 50_000_000_000).String(), + claimResponse.ClaimDetails[0].TotalRewardClaim.String(), "ClaimDetails TotalRewardClaim") + if assert.Len(t, claimResponse.ClaimDetails[0].ClaimedRewardPeriodDetails, 5, "ClaimedRewardPeriodDetails") { + assert.Equal(t, sdk.NewInt64Coin("nhash", 10_000_000_000).String(), + claimResponse.ClaimDetails[0].ClaimedRewardPeriodDetails[0].ClaimPeriodReward.String(), "ClaimPeriodReward") } - */ - // app.EndBlock(abci.RequestEndBlock{Height: 7}) // TODO[1760]: finalize-block - app.Commit() + } balanceLater := app.BankKeeper.GetAllBalances(ctx, acct1.GetAddress()) // make sure account balance has the tokens balanceChange := balanceLater.AmountOf(pioconfig.GetProvenanceConfig().FeeDenom).Sub(balance.AmountOf(pioconfig.GetProvenanceConfig().FeeDenom)) @@ -1560,17 +1619,19 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc time.Sleep(150 * time.Millisecond) //go through 5 blocks, but take a long time to cut blocks. - for height := int64(2); height < int64(7); height++ { - // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: height, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block + for height := int64(1); height < int64(6); height++ { require.NoError(t, acct1.SetSequence(seq), "[%d]: SetSequence(%d)", height, seq) - tx1, err1 := SignTx(NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) - require.NoError(t, err1, "[%d]: SignTx", height) - _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), tx1) - require.NoError(t, errFromDeliverTx, "[%d]: SimDeliver", height) - assert.NotEmpty(t, res.GetEvents(), "[%d]: res.GetEvents()", height) + tx1, err1 := SignTxAndGetBytes(ctx, NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) + require.NoError(t, err1, "[%d]: SignTxAndGetBytes", height) + _, err := app.FinalizeBlock(&abci.RequestFinalizeBlock{ + Height: height, + Time: time.Now().UTC(), + Txs: [][]byte{tx1}, + }, + ) + require.NoError(t, err, "FinalizeBlock expected no error") // wait for claim period to end (claim period is 1s) time.Sleep(1500 * time.Millisecond) - // app.EndBlock(abci.RequestEndBlock{Height: height}) // TODO[1760]: finalize-block app.Commit() seq = seq + 1 } @@ -1627,45 +1688,48 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc // get the accoutn balances of acct1 balance := app.BankKeeper.GetAllBalances(ctx, acct1.GetAddress()) // claim rewards for the address - // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: 7, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block - // TODO[1760]: finalize-block: Uncomment these lines. - /* - msgClaim := rewardtypes.NewMsgClaimAllRewardsRequest(acct1.Address) - require.NoError(t, acct1.SetSequence(seq), "SetSequence(%d)", seq) - txClaim, errClaim := SignTxAndGetBytes( - NewTestRewardsGasLimit(), - fees, - encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), - msgClaim, - ) - require.NoError(t, errClaim, "SignTxAndGetBytes") - res := app.DeliverTx(abci.RequestDeliverTx{Tx: txClaim}) - require.Equal(t, true, res.IsOK(), "res=%+v", res) - // unmarshal the TxMsgData - var protoResult sdk.TxMsgData - require.NoError(t, proto.Unmarshal(res.Data, &protoResult), "unmarshalling protoResult") - require.Len(t, protoResult.MsgResponses, 1, "protoResult.MsgResponses") - require.Equal(t, protoResult.MsgResponses[0].GetTypeUrl(), "/provenance.reward.v1.MsgClaimAllRewardsResponse", - "protoResult.MsgResponses[0].GetTypeUrl()") - claimResponse := rewardtypes.MsgClaimAllRewardsResponse{} - require.NoError(t, claimResponse.Unmarshal(protoResult.MsgResponses[0].Value), "unmarshalling claimResponse") - if assert.NotEmpty(t, claimResponse.TotalRewardClaim, "TotalRewardClaim") { - assert.Equal(t, sdk.NewInt64Coin("hotdog", 50_000_000_000).String(), - claimResponse.TotalRewardClaim[0].String(), "TotalRewardClaim") - } - if assert.NotEmpty(t, claimResponse.ClaimDetails, "ClaimDetails") { - assert.Len(t, claimResponse.ClaimDetails, 1, "ClaimDetails") - assert.Equal(t, 1, int(claimResponse.ClaimDetails[0].RewardProgramId), "RewardProgramId") - assert.Equal(t, sdk.NewInt64Coin("hotdog", 50_000_000_000).String(), - claimResponse.ClaimDetails[0].TotalRewardClaim.String(), "ClaimDetails TotalRewardClaim") - if assert.NotEmpty(t, claimResponse.ClaimDetails[0].ClaimedRewardPeriodDetails, "ClaimedRewardPeriodDetails") { - assert.Len(t, claimResponse.ClaimDetails[0].ClaimedRewardPeriodDetails, 5, "ClaimedRewardPeriodDetails") - assert.Equal(t, sdk.NewInt64Coin("hotdog", 10_000_000_000).String(), - claimResponse.ClaimDetails[0].ClaimedRewardPeriodDetails[0].ClaimPeriodReward.String(), "ClaimPeriodReward") - } + msgClaim := rewardtypes.NewMsgClaimAllRewardsRequest(acct1.Address) + require.NoError(t, acct1.SetSequence(seq), "SetSequence(%d)", seq) + txClaim, errClaim := SignTxAndGetBytes( + ctx, + NewTestRewardsGasLimit(), + fees, + encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), + msgClaim, + ) + require.NoError(t, errClaim, "SignTxAndGetBytes") + res, err := app.FinalizeBlock(&abci.RequestFinalizeBlock{ + Height: 6, + Time: time.Now().UTC(), + Txs: [][]byte{txClaim}, + }, + ) + require.NoError(t, err, "FinalizeBlock expected no error") + + // unmarshal the TxMsgData + var protoResult sdk.TxMsgData + require.NoError(t, app.AppCodec().Unmarshal(res.TxResults[0].Data, &protoResult), "unmarshalling protoResult") + require.Len(t, protoResult.MsgResponses, 1, "protoResult.MsgResponses") + require.Equal(t, protoResult.MsgResponses[0].GetTypeUrl(), "/provenance.reward.v1.MsgClaimAllRewardsResponse", + "protoResult.MsgResponses[0].GetTypeUrl()") + claimResponse := rewardtypes.MsgClaimAllRewardsResponse{} + require.NoError(t, claimResponse.Unmarshal(protoResult.MsgResponses[0].Value), "unmarshalling claimResponse") + if assert.NotEmpty(t, claimResponse.TotalRewardClaim, "TotalRewardClaim") { + assert.Equal(t, sdk.NewInt64Coin("hotdog", 50_000_000_000).String(), + claimResponse.TotalRewardClaim[0].String(), "TotalRewardClaim") + } + if assert.NotEmpty(t, claimResponse.ClaimDetails, "ClaimDetails") { + assert.Len(t, claimResponse.ClaimDetails, 1, "ClaimDetails") + assert.Equal(t, 1, int(claimResponse.ClaimDetails[0].RewardProgramId), "RewardProgramId") + assert.Equal(t, sdk.NewInt64Coin("hotdog", 50_000_000_000).String(), + claimResponse.ClaimDetails[0].TotalRewardClaim.String(), "ClaimDetails TotalRewardClaim") + if assert.NotEmpty(t, claimResponse.ClaimDetails[0].ClaimedRewardPeriodDetails, "ClaimedRewardPeriodDetails") { + assert.Len(t, claimResponse.ClaimDetails[0].ClaimedRewardPeriodDetails, 5, "ClaimedRewardPeriodDetails") + assert.Equal(t, sdk.NewInt64Coin("hotdog", 10_000_000_000).String(), + claimResponse.ClaimDetails[0].ClaimedRewardPeriodDetails[0].ClaimPeriodReward.String(), "ClaimPeriodReward") } - */ - // app.EndBlock(abci.RequestEndBlock{Height: 7}) // TODO[1760]: finalize-block + } + app.Commit() balanceLater := app.BankKeeper.GetAllBalances(ctx, acct1.GetAddress()) balanceChange := balanceLater.AmountOf("hotdog").Sub(balance.AmountOf("hotdog")) @@ -1756,18 +1820,22 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc time.Sleep(150 * time.Millisecond) //go through 5 blocks, but take a long time to cut blocks. - for height := int64(2); height < int64(7); height++ { - // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: height, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block + for height := int64(1); height < int64(6); height++ { require.NoError(t, acct1.SetSequence(seq), "[%d]: SetSequence(%d)", height, seq) - tx1, err1 := SignTx(NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) - require.NoError(t, err1, "[%d]: SignTx", height) - _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), tx1) - require.NoError(t, errFromDeliverTx, "[%d]: SimDeliver", height) - assert.NotEmpty(t, res.GetEvents(), "[%d]: res.GetEvents()", height) + tx1, err1 := SignTxAndGetBytes(ctx, NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) + require.NoError(t, err1, "[%d]: SignTxAndGetBytes", height) + + _, err := app.FinalizeBlock(&abci.RequestFinalizeBlock{ + Height: height, + Time: time.Now().UTC(), + Txs: [][]byte{tx1}, + }, + ) + require.NoError(t, err, "FinalizeBlock expected no error") + app.Commit() + // wait for claim period to end (claim period is 1s) time.Sleep(1500 * time.Millisecond) - // app.EndBlock(abci.RequestEndBlock{Height: height}) // TODO[1760]: finalize-block - app.Commit() seq = seq + 1 } @@ -1823,51 +1891,62 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc // get the accoutn balances of acct1 balance := app.BankKeeper.GetAllBalances(ctx, acct1.GetAddress()) // claim rewards for the address - // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: 7, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block - // TODO[1760]: finalize-block: Uncomment these lines. - /* - msgClaim := rewardtypes.NewMsgClaimAllRewardsRequest(acct1.Address) - require.NoError(t, acct1.SetSequence(seq), "SetSequence(%d)", seq) - // needs extra gas - txClaim, errClaim := SignTxAndGetBytes(300000, fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msgClaim) - require.NoError(t, errClaim, "SignTxAndGetBytes") - res := app.DeliverTx(abci.RequestDeliverTx{Tx: txClaim}) - require.Equal(t, true, res.IsOK(), "res=%+v", res) - // unmarshal the TxMsgData - var protoResult sdk.TxMsgData - require.NoError(t, proto.Unmarshal(res.Data, &protoResult), "unmarshalling protoResult") - require.Len(t, protoResult.MsgResponses, 1, "protoResult.MsgResponses") - require.Equal(t, protoResult.MsgResponses[0].GetTypeUrl(), "/provenance.reward.v1.MsgClaimAllRewardsResponse", - "protoResult.MsgResponses[0].GetTypeUrl()") - claimResponse := rewardtypes.MsgClaimAllRewardsResponse{} - require.NoError(t, claimResponse.Unmarshal(protoResult.MsgResponses[0].Value), "unmarshalling claimResponse") + + msgClaim := rewardtypes.NewMsgClaimAllRewardsRequest(acct1.Address) + require.NoError(t, acct1.SetSequence(seq), "SetSequence(%d)", seq) + // needs extra gas + txClaim, errClaim := SignTxAndGetBytes(ctx, 300000, fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msgClaim) + require.NoError(t, errClaim, "SignTxAndGetBytes") + + res, err := app.FinalizeBlock(&abci.RequestFinalizeBlock{ + Height: 6, + Time: time.Now().UTC(), + Txs: [][]byte{txClaim}, + }, + ) + require.NoError(t, err, "FinalizeBlock expected no error") + app.Commit() + + // unmarshal the TxMsgData + var protoResult sdk.TxMsgData + require.NoError(t, app.AppCodec().Unmarshal(res.TxResults[0].Data, &protoResult), "unmarshalling protoResult") + require.Len(t, protoResult.MsgResponses, 1, "protoResult.MsgResponses") + require.Equal(t, protoResult.MsgResponses[0].GetTypeUrl(), "/provenance.reward.v1.MsgClaimAllRewardsResponse", + "protoResult.MsgResponses[0].GetTypeUrl()") + claimResponse := rewardtypes.MsgClaimAllRewardsResponse{} + require.NoError(t, claimResponse.Unmarshal(protoResult.MsgResponses[0].Value), "unmarshalling claimResponse") + assert.Equal(t, sdk.NewInt64Coin("hotdog", 50_000_000_000).String(), + claimResponse.TotalRewardClaim[0].String(), "TotalRewardClaim") + if assert.NotEmpty(t, claimResponse.ClaimDetails, "ClaimDetails") { + assert.Len(t, claimResponse.ClaimDetails, 2) + + assert.Equal(t, 1, int(claimResponse.ClaimDetails[0].RewardProgramId), "[0].RewardProgramId") assert.Equal(t, sdk.NewInt64Coin("hotdog", 50_000_000_000).String(), - claimResponse.TotalRewardClaim[0].String(), "TotalRewardClaim") - if assert.NotEmpty(t, claimResponse.ClaimDetails, "ClaimDetails") { - assert.Len(t, claimResponse.ClaimDetails, 2) - - assert.Equal(t, 1, int(claimResponse.ClaimDetails[0].RewardProgramId), "[0].RewardProgramId") - assert.Equal(t, sdk.NewInt64Coin("hotdog", 50_000_000_000).String(), - claimResponse.ClaimDetails[0].TotalRewardClaim.String(), "[0].TotalRewardClaim") - if assert.NotEmpty(t, claimResponse.ClaimDetails[0].ClaimedRewardPeriodDetails, "[0].ClaimedRewardPeriodDetails") { - assert.Len(t, claimResponse.ClaimDetails[0].ClaimedRewardPeriodDetails, 5, "[0].ClaimedRewardPeriodDetails") - assert.Equal(t, sdk.NewInt64Coin("hotdog", 10_000_000_000).String(), - claimResponse.ClaimDetails[0].ClaimedRewardPeriodDetails[0].ClaimPeriodReward.String(), "[0].[0].ClaimPeriodReward") - } + claimResponse.ClaimDetails[0].TotalRewardClaim.String(), "[0].TotalRewardClaim") + if assert.NotEmpty(t, claimResponse.ClaimDetails[0].ClaimedRewardPeriodDetails, "[0].ClaimedRewardPeriodDetails") { + assert.Len(t, claimResponse.ClaimDetails[0].ClaimedRewardPeriodDetails, 5, "[0].ClaimedRewardPeriodDetails") + assert.Equal(t, sdk.NewInt64Coin("hotdog", 10_000_000_000).String(), + claimResponse.ClaimDetails[0].ClaimedRewardPeriodDetails[0].ClaimPeriodReward.String(), "[0].[0].ClaimPeriodReward") + } - assert.Equal(t, 2, int(claimResponse.ClaimDetails[1].RewardProgramId), "[1].RewardProgramId") - assert.Equal(t, sdk.NewInt64Coin("nhash", 50_000_000_000).String(), - claimResponse.ClaimDetails[1].TotalRewardClaim.String(), "[1].TotalRewardClaim") - if assert.NotEmpty(t, claimResponse.ClaimDetails[1].ClaimedRewardPeriodDetails, "[1].ClaimedRewardPeriodDetails") { - assert.Len(t, claimResponse.ClaimDetails[1].ClaimedRewardPeriodDetails, 5, "[1].ClaimedRewardPeriodDetails") - assert.Equal(t, sdk.NewInt64Coin("nhash", 10_000_000_000).String(), - claimResponse.ClaimDetails[1].ClaimedRewardPeriodDetails[0].ClaimPeriodReward.String(), "[1].[0].ClaimPeriodReward") - } + assert.Equal(t, 2, int(claimResponse.ClaimDetails[1].RewardProgramId), "[1].RewardProgramId") + assert.Equal(t, sdk.NewInt64Coin("nhash", 50_000_000_000).String(), + claimResponse.ClaimDetails[1].TotalRewardClaim.String(), "[1].TotalRewardClaim") + if assert.NotEmpty(t, claimResponse.ClaimDetails[1].ClaimedRewardPeriodDetails, "[1].ClaimedRewardPeriodDetails") { + assert.Len(t, claimResponse.ClaimDetails[1].ClaimedRewardPeriodDetails, 5, "[1].ClaimedRewardPeriodDetails") + assert.Equal(t, sdk.NewInt64Coin("nhash", 10_000_000_000).String(), + claimResponse.ClaimDetails[1].ClaimedRewardPeriodDetails[0].ClaimPeriodReward.String(), "[1].[0].ClaimPeriodReward") } - */ + } - // app.EndBlock(abci.RequestEndBlock{Height: 7}) // TODO[1760]: finalize-block + _, err = app.FinalizeBlock(&abci.RequestFinalizeBlock{ + Height: 7, + Time: time.Now().UTC(), + }, + ) + require.NoError(t, err, "FinalizeBlock expected no error") app.Commit() + balanceLater := app.BankKeeper.GetAllBalances(ctx, acct1.GetAddress()) // make sure account balance has the tokens balanceChangeHotDog := balanceLater.AmountOf("hotdog").Sub(balance.AmountOf("hotdog")) @@ -1884,6 +1963,7 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc priv, _, addr := testdata.KeyTestPubAddr() _, _, addr2 := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr, priv.PubKey(), 0, 0) + pioconfig.SetProvenanceConfig("nhash", 0) acct1Balance := sdk.NewCoins(sdk.NewInt64Coin("atom", 10000000), sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 1000000_000_000_000)) rewardProgram := rewardtypes.NewRewardProgram( @@ -1932,17 +2012,19 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc time.Sleep(150 * time.Millisecond) //go through 5 blocks, but take a long time to cut blocks. - for height := int64(2); height < int64(7); height++ { - // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: height, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block + for height := int64(1); height < int64(6); height++ { require.NoError(t, acct1.SetSequence(seq), "[%d]: SetSequence(%d)", height, seq) - tx1, err1 := SignTx(NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) - require.NoError(t, err1, "[%d]: SignTx", height) - _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), tx1) - require.NoError(t, errFromDeliverTx, "[%d]: SimDeliver", height) - assert.NotEmpty(t, res.GetEvents(), "[%d]: res.GetEvents()", height) - // wait for claim period to end (claim period is 1s) + tx1, err1 := SignTxAndGetBytes(ctx, NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) + require.NoError(t, err1, "[%d]: SignTxAndGetBytes", height) + time.Sleep(1500 * time.Millisecond) - // app.EndBlock(abci.RequestEndBlock{Height: height}) // TODO[1760]: finalize-block + _, err := app.FinalizeBlock(&abci.RequestFinalizeBlock{ + Height: height, + Time: time.Now().UTC(), + Txs: [][]byte{tx1}, + }, + ) + require.NoError(t, err, "FinalizeBlock expected no error") app.Commit() seq = seq + 1 } @@ -1997,22 +2079,23 @@ func TestRewardsProgramStartPerformQualifyingActionsSomePeriodsClaimableModuleAc } // claim rewards for the address - // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: 7, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block - // TODO[1760]: finalize-block: Uncomment these lines. - /* - msgClaim := rewardtypes.NewMsgClaimAllRewardsRequest(acct1.Address) - require.NoError(t, acct1.SetSequence(seq), "SetSequence(%d)", seq) - txClaim, errClaim := SignTxAndGetBytes( - NewTestRewardsGasLimit(), - fees, - encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), - msgClaim, - ) - require.NoError(t, errClaim, "SignTxAndGetBytes") - res := app.DeliverTx(abci.RequestDeliverTx{Tx: txClaim}) - require.Equal(t, true, res.IsErr(), "res=%+v", res) - */ - // app.EndBlock(abci.RequestEndBlock{Height: 7}) // TODO[1760]: finalize-block + msgClaim := rewardtypes.NewMsgClaimAllRewardsRequest(acct1.Address) + require.NoError(t, acct1.SetSequence(seq), "SetSequence(%d)", seq) + txClaim, errClaim := SignTxAndGetBytes(ctx, + NewTestRewardsGasLimit(), + fees, + encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), + msgClaim, + ) + require.NoError(t, errClaim, "SignTxAndGetBytes") + + _, err = app.FinalizeBlock(&abci.RequestFinalizeBlock{ + Height: 6, + Time: time.Now().UTC(), + Txs: [][]byte{txClaim}, + }, + ) + require.NoError(t, err, "FinalizeBlock expected no error") app.Commit() } @@ -2024,6 +2107,7 @@ func TestRewardsProgramStartPerformQualifyingActionsCriteriaNotMet(t *testing.T) priv, _, addr := testdata.KeyTestPubAddr() _, _, addr2 := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr, priv.PubKey(), 0, 0) + pioconfig.SetProvenanceConfig("nhash", 0) acct1Balance := sdk.NewCoins(sdk.NewInt64Coin("atom", 10000000), sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 1000000_000_000_000)) rewardProgram := rewardtypes.NewRewardProgram( @@ -2073,16 +2157,20 @@ func TestRewardsProgramStartPerformQualifyingActionsCriteriaNotMet(t *testing.T) time.Sleep(110 * time.Millisecond) //go through 5 blocks, but take a long time to cut blocks. - for height := int64(2); height < int64(7); height++ { - // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: height, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block + for height := int64(1); height < int64(6); height++ { require.NoError(t, acct1.SetSequence(seq), "[%d]: SetSequence(%d)", height, seq) - tx1, err1 := SignTx(NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) - require.NoError(t, err1, "[%d]: SignTx", height) - _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), tx1) - require.NoError(t, errFromDeliverTx, "[%d]: SimDeliver", height) - assert.NotEmpty(t, res.GetEvents(), "[%d]: res.GetEvents()", height) + tx1, err1 := SignTxAndGetBytes(ctx, NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) + require.NoError(t, err1, "[%d]: SignTxAndGetBytes", height) time.Sleep(1100 * time.Millisecond) - // app.EndBlock(abci.RequestEndBlock{Height: height}) // TODO[1760]: finalize-block + + _, err := app.FinalizeBlock(&abci.RequestFinalizeBlock{ + Height: height, + Time: time.Now().UTC(), + Txs: [][]byte{tx1}, + }, + ) + require.NoError(t, err, "FinalizeBlock expected no error") + app.Commit() seq = seq + 1 } @@ -2111,6 +2199,7 @@ func TestRewardsProgramStartPerformQualifyingActionsTransferAndDelegationsPresen priv, pubKey, addr := testdata.KeyTestPubAddr() _, pubKey2, addr2 := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr, priv.PubKey(), 0, 0) + pioconfig.SetProvenanceConfig("nhash", 0) acct1Balance := sdk.NewCoins(sdk.NewInt64Coin("atom", 10000000), sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 1000000_000_000_000)) rewardProgram := rewardtypes.NewRewardProgram( @@ -2161,16 +2250,18 @@ func TestRewardsProgramStartPerformQualifyingActionsTransferAndDelegationsPresen time.Sleep(150 * time.Millisecond) //go through 5 blocks, but take a time to cut blocks > claim period time interval. - for height := int64(2); height < int64(7); height++ { - // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: height, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block + for height := int64(1); height < int64(6); height++ { require.NoError(t, acct1.SetSequence(seq), "[%d]: SetSequence(%d)", height, seq) - tx1, err1 := SignTx(NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) - require.NoError(t, err1, "[%d]: SignTx", height) - _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), tx1) - require.NoError(t, errFromDeliverTx, "[%d]: SimDeliver", height) - assert.NotEmpty(t, res.GetEvents(), "[%d]: res.GetEvents()", height) + tx1, err1 := SignTxAndGetBytes(ctx, NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) + require.NoError(t, err1, "[%d]: SignTxAndGetBytes", height) time.Sleep(1100 * time.Millisecond) - // app.EndBlock(abci.RequestEndBlock{Height: height}) // TODO[1760]: finalize-block + _, err := app.FinalizeBlock(&abci.RequestFinalizeBlock{ + Height: height, + Time: time.Now().UTC(), + Txs: [][]byte{tx1}, + }, + ) + require.NoError(t, err, "FinalizeBlock expected no error") app.Commit() seq = seq + 1 } @@ -2216,6 +2307,7 @@ func TestRewardsProgramStartPerformQualifyingActionsThreshHoldNotMet(t *testing. priv, pubKey, addr := testdata.KeyTestPubAddr() _, pubKey2, addr2 := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr, priv.PubKey(), 0, 0) + pioconfig.SetProvenanceConfig("nhash", 0) acct1Balance := sdk.NewCoins(sdk.NewInt64Coin("atom", 10000000), sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 1000000_000_000_000)) rewardProgram := rewardtypes.NewRewardProgram( @@ -2265,16 +2357,18 @@ func TestRewardsProgramStartPerformQualifyingActionsThreshHoldNotMet(t *testing. time.Sleep(1 * time.Second) //go through 5 blocks, but take a long time to cut blocks. - for height := int64(2); height < int64(7); height++ { - // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: height, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block + for height := int64(1); height < int64(6); height++ { require.NoError(t, acct1.SetSequence(seq), "[%d]: SetSequence(%d)", height, seq) - tx1, err1 := SignTx(NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) - require.NoError(t, err1, "[%d]: SignTx", height) - _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), tx1) - require.NoError(t, errFromDeliverTx, "[%d]: SimDeliver", height) - assert.NotEmpty(t, res.GetEvents(), "[%d]: res.GetEvents()", height) + tx1, err1 := SignTxAndGetBytes(ctx, NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) + require.NoError(t, err1, "[%d]: SignTxAndGetBytes", height) time.Sleep(1100 * time.Millisecond) - // app.EndBlock(abci.RequestEndBlock{Height: height}) // TODO[1760]: finalize-block + _, err := app.FinalizeBlock(&abci.RequestFinalizeBlock{ + Height: height, + Time: time.Now().UTC(), + Txs: [][]byte{tx1}, + }, + ) + require.NoError(t, err, "FinalizeBlock expected no error") app.Commit() seq = seq + 1 } @@ -2298,8 +2392,8 @@ func TestRewardsProgramStartPerformQualifyingActionsThreshHoldNotMet(t *testing. func TestRewardsProgramStartPerformQualifyingActions_Vote(t *testing.T) { encCfg := moduletestutil.MakeTestEncodingConfig() priv, _, addr := testdata.KeyTestPubAddr() - //_, _, addr2 := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr, priv.PubKey(), 0, 0) + pioconfig.SetProvenanceConfig("nhash", 0) acct1Balance := sdk.NewCoins( sdk.NewInt64Coin(sdk.DefaultBondDenom, 10000000000), sdk.NewInt64Coin("atom", 10000000), @@ -2348,26 +2442,30 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote(t *testing.T) { coinsPos, addr, ) - + require.NoError(t, err, "NewMsgSubmitProposal expected to create msg") fees := sdk.NewCoins(sdk.NewInt64Coin("atom", 150)) acct1 = app.AccountKeeper.GetAccount(ctx, acct1.GetAddress()).(*authtypes.BaseAccount) seq := acct1.Sequence - time.Sleep(200 * time.Millisecond) - // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: 2, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block - txGov, err := SignTx( + txGov, err := SignTxAndGetBytes( + ctx, NewTestRewardsGasLimit(), sdk.NewCoins(sdk.NewInt64Coin("atom", 150), sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 1_190_500_000)), encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg, ) - require.NoError(t, err, "SignTx") - - _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), txGov) - require.NoError(t, errFromDeliverTx, "SimDeliver") - assert.NotEmpty(t, res.GetEvents(), "res.GetEvents()") + require.NoError(t, err, "SignTxAndGetBytes") + time.Sleep(200 * time.Millisecond) - // app.EndBlock(abci.RequestEndBlock{Height: 2}) // TODO[1760]: finalize-block + res, err := app.FinalizeBlock(&abci.RequestFinalizeBlock{ + Height: 1, + Time: time.Now().UTC(), + Txs: [][]byte{txGov}, + }, + ) + require.NoError(t, err, "FinalizeBlock expected no error") + require.Len(t, res.TxResults, 1, "TxResults expected length not met") + require.Equal(t, uint32(0), res.TxResults[0].Code, "TxResults tx unexpected result code "+res.TxResults[0].Log) app.Commit() seq = seq + 1 @@ -2376,15 +2474,19 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote(t *testing.T) { // tx with a fee associated with msg type and account has funds vote1 := govtypesv1beta1.NewMsgVote(addr, proposal.Id, govtypesv1beta1.OptionYes) - for height := int64(3); height < int64(23); height++ { - // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: height, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block + for height := int64(2); height < int64(22); height++ { require.NoError(t, acct1.SetSequence(seq), "[%d]: SetSequence(%d)", height, seq) - tx1, err1 := SignTx(NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), vote1) - require.NoError(t, err1, "[%d]: SignTx", height) - _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), tx1) - require.NoError(t, errFromDeliverTx, "[%d]: SimDeliver", height) - assert.NotEmpty(t, res.GetEvents(), "[%d]: res.GetEvents()", height) - // app.EndBlock(abci.RequestEndBlock{Height: height}) // TODO[1760]: finalize-block + tx1, err1 := SignTxAndGetBytes(ctx, NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), vote1) + require.NoError(t, err1, "[%d]: SignTxAndGetBytes", height) + res, err := app.FinalizeBlock(&abci.RequestFinalizeBlock{ + Height: height, + Time: time.Now().UTC(), + Txs: [][]byte{tx1}, + }, + ) + require.NoError(t, err, "FinalizeBlock expected no error") + require.Len(t, res.TxResults, 1, "TxResults expected length not met") + require.Equal(t, uint32(0), res.TxResults[0].Code, "TxResults tx unexpected result code "+res.TxResults[0].Log) app.Commit() seq = seq + 1 } @@ -2411,6 +2513,7 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_InvalidDelegations(t * priv2, _, addr2 := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr1, priv1.PubKey(), 0, 0) acct2 := authtypes.NewBaseAccount(addr2, priv2.PubKey(), 1, 0) + pioconfig.SetProvenanceConfig("nhash", 0) acctBalance := sdk.NewCoins( sdk.NewInt64Coin(sdk.DefaultBondDenom, 10000000000), sdk.NewInt64Coin("atom", 10000000), @@ -2460,24 +2563,30 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_InvalidDelegations(t * coinsPos, addr1, ) + require.NoError(t, err, "NewMsgSubmitProposal expected to create msg") fees := sdk.NewCoins(sdk.NewInt64Coin("atom", 150)) time.Sleep(200 * time.Millisecond) - // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: 2, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block - txGov, err := SignTx( + txGov, err := SignTxAndGetBytes( + ctx, NewTestRewardsGasLimit(), sdk.NewCoins(sdk.NewInt64Coin("atom", 150), sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 1_190_500_000)), encCfg, priv1.PubKey(), priv1, *acct1, ctx.ChainID(), msg, ) - require.NoError(t, err, "SignTx") + require.NoError(t, err, "SignTxAndGetBytes") - _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), txGov) - require.NoError(t, errFromDeliverTx, "SimDeliver") - assert.NotEmpty(t, res.GetEvents(), "res.GetEvents()") + res, err := app.FinalizeBlock(&abci.RequestFinalizeBlock{ + Height: 1, + Time: time.Now().UTC(), + Txs: [][]byte{txGov}, + }, + ) + require.NoError(t, err, "FinalizeBlock expected no error") + require.Len(t, res.TxResults, 1, "TxResults expected length not met") + require.Equal(t, uint32(0), res.TxResults[0].Code, "TxResults tx unexpected result code "+res.TxResults[0].Log) - // app.EndBlock(abci.RequestEndBlock{Height: 2}) // TODO[1760]: finalize-block app.Commit() proposal := getLastProposal(t, ctx, app) @@ -2487,15 +2596,20 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_InvalidDelegations(t * acct2 = app.AccountKeeper.GetAccount(ctx, acct2.GetAddress()).(*authtypes.BaseAccount) seq := acct2.Sequence - for height := int64(3); height < int64(5); height++ { - // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: height, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block + for height := int64(2); height < int64(4); height++ { require.NoError(t, acct2.SetSequence(seq), "[%d]: SetSequence(%d)", height, seq) - tx1, err1 := SignTx(NewTestRewardsGasLimit(), fees, encCfg, priv2.PubKey(), priv2, *acct2, ctx.ChainID(), vote2) - require.NoError(t, err1, "[%d]: SignTx", height) - _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), tx1) - require.NoError(t, errFromDeliverTx, "[%d]: SimDeliver", height) - assert.NotEmpty(t, res.GetEvents(), "[%d]: res.GetEvents()", height) - // app.EndBlock(abci.RequestEndBlock{Height: height}) // TODO[1760]: finalize-block + tx1, err1 := SignTxAndGetBytes(ctx, NewTestRewardsGasLimit(), fees, encCfg, priv2.PubKey(), priv2, *acct2, ctx.ChainID(), vote2) + require.NoError(t, err1, "[%d]: SignTxAndGetBytes", height) + _, err := app.FinalizeBlock(&abci.RequestFinalizeBlock{ + Height: height, + Time: time.Now().UTC(), + Txs: [][]byte{tx1}, + }, + ) + require.NoError(t, err, "FinalizeBlock expected no error") + require.Len(t, res.TxResults, 1, "TxResults expected length not met") + require.Equal(t, uint32(0), res.TxResults[0].Code, "TxResults tx unexpected result code "+res.TxResults[0].Log) + app.Commit() seq = seq + 1 } @@ -2539,6 +2653,7 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_ValidDelegations(t *te priv, pubKey, addr := testdata.KeyTestPubAddr() _, pubKey2, _ := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr, priv.PubKey(), 0, 0) + pioconfig.SetProvenanceConfig("nhash", 0) acct1Balance := sdk.NewCoins( sdk.NewInt64Coin(sdk.DefaultBondDenom, 10000000000), sdk.NewInt64Coin("atom", 10000000), @@ -2587,26 +2702,32 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_ValidDelegations(t *te coinsPos, addr, ) + require.NoError(t, err, "NewMsgSubmitProposal expected to create msg") fees := sdk.NewCoins(sdk.NewInt64Coin("atom", 150)) acct1 = app.AccountKeeper.GetAccount(ctx, acct1.GetAddress()).(*authtypes.BaseAccount) seq := acct1.Sequence time.Sleep(200 * time.Millisecond) - // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: 2, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block - txGov, err := SignTx( + txGov, err := SignTxAndGetBytes( + ctx, NewTestRewardsGasLimit(), sdk.NewCoins(sdk.NewInt64Coin("atom", 150), sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 1_190_500_000)), encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg, ) - require.NoError(t, err, "SignTx") + require.NoError(t, err, "SignTxAndGetBytes") - _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), txGov) - require.NoError(t, errFromDeliverTx, "SimDeliver") - assert.NotEmpty(t, res.GetEvents(), "res.GetEvents()") + res, err := app.FinalizeBlock(&abci.RequestFinalizeBlock{ + Height: 1, + Time: time.Now().UTC(), + Txs: [][]byte{txGov}, + }, + ) + require.NoError(t, err, "FinalizeBlock expected no error") + require.Len(t, res.TxResults, 1, "TxResults expected length not met") + require.Equal(t, uint32(0), res.TxResults[0].Code, "TxResults tx unexpected result code "+res.TxResults[0].Log) - // app.EndBlock(abci.RequestEndBlock{Height: 2}) // TODO[1760]: finalize-block app.Commit() seq = seq + 1 @@ -2616,15 +2737,20 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_ValidDelegations(t *te vote1 := govtypesv1beta1.NewMsgVote(addr, proposal.Id, govtypesv1beta1.OptionYes) // threshold will be met after 10 actions - for height := int64(3); height < int64(23); height++ { - // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: height, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block + for height := int64(2); height < int64(22); height++ { require.NoError(t, acct1.SetSequence(seq), "[%d]: SetSequence(%d)", height, seq) - tx1, err1 := SignTx(NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), vote1) - require.NoError(t, err1, "[%d]: SignTx", height) - _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), tx1) - require.NoError(t, errFromDeliverTx, "[%d]: SimDeliver", height) - assert.NotEmpty(t, res.GetEvents(), "[%d]: res.GetEvents()", height) - // app.EndBlock(abci.RequestEndBlock{Height: height}) // TODO[1760]: finalize-block + tx1, err1 := SignTxAndGetBytes(ctx, NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), vote1) + require.NoError(t, err1, "[%d]: SignTxAndGetBytes", height) + res, err := app.FinalizeBlock(&abci.RequestFinalizeBlock{ + Height: height, + Time: time.Now().UTC(), + Txs: [][]byte{tx1}, + }, + ) + require.NoError(t, err, "FinalizeBlock expected no error") + require.Len(t, res.TxResults, 1, "TxResults expected length not met") + require.Equal(t, uint32(0), res.TxResults[0].Code, "TxResults tx unexpected result code "+res.TxResults[0].Log) + app.Commit() seq = seq + 1 } @@ -2665,6 +2791,7 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_ValidDelegations_Multi priv, pubKey, addr := testdata.KeyTestPubAddr() _, pubKey2, _ := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr, priv.PubKey(), 0, 0) + pioconfig.SetProvenanceConfig("nhash", 0) acct1Balance := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 10000000000), sdk.NewInt64Coin("atom", 10000000), sdk.NewInt64Coin("nhash", 1000000_000_000_000)) rewardProgram := rewardtypes.NewRewardProgram( @@ -2707,6 +2834,7 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_ValidDelegations_Multi coinsPos, addr, ) + require.NoError(t, err, "NewMsgSubmitProposal expected to create msg") fees := sdk.NewCoins(sdk.NewInt64Coin("atom", 150)) ctx.WithBlockTime(time.Now()) @@ -2715,14 +2843,19 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_ValidDelegations_Multi ctx.WithBlockTime(time.Now()) time.Sleep(200 * time.Millisecond) - // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: 2, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block - txGov, err := SignTx(NewTestRewardsGasLimit(), sdk.NewCoins(sdk.NewInt64Coin("atom", 150), sdk.NewInt64Coin("nhash", 1_190_500_000)), encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) - require.NoError(t, err) + txGov, err := SignTxAndGetBytes(ctx, NewTestRewardsGasLimit(), sdk.NewCoins(sdk.NewInt64Coin("atom", 150), sdk.NewInt64Coin("nhash", 1_190_500_000)), encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg) + require.NoError(t, err, "SignTxAndGetBytes") - _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), txGov) - require.NoError(t, errFromDeliverTx) + res, err := app.FinalizeBlock(&abci.RequestFinalizeBlock{ + Height: 1, + Time: time.Now().UTC(), + Txs: [][]byte{txGov}, + }, + ) + require.NoError(t, err, "FinalizeBlock expected no error") + require.Len(t, res.TxResults, 1, "TxResults expected length not met") + require.Equal(t, uint32(0), res.TxResults[0].Code, "TxResults tx unexpected result code "+res.TxResults[0].Log) - // app.EndBlock(abci.RequestEndBlock{Height: 2}) // TODO[1760]: finalize-block app.Commit() seq = seq + 1 @@ -2734,15 +2867,19 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_ValidDelegations_Multi assert.NotEmpty(t, res.GetEvents(), "should have emitted an event.") // threshold will be met after 10 actions - for height := int64(3); height < int64(23); height++ { - // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: height, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block - require.NoError(t, acct1.SetSequence(seq)) - tx1, err1 := SignTx(NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), vote1) - require.NoError(t, err1) - _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), tx1) - require.NoError(t, errFromDeliverTx) - assert.NotEmpty(t, res.GetEvents(), "should have emitted an event.") - // app.EndBlock(abci.RequestEndBlock{Height: height}) // TODO[1760]: finalize-block + for height := int64(2); height < int64(22); height++ { + require.NoError(t, acct1.SetSequence(seq), "[%d]: SetSequence(%d)", height, seq) + tx1, err1 := SignTxAndGetBytes(ctx, NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), vote1) + require.NoError(t, err1, "[%d]: SignTxAndGetBytes", height) + res, err := app.FinalizeBlock(&abci.RequestFinalizeBlock{ + Height: height, + Time: time.Now().UTC(), + Txs: [][]byte{tx1}, + }, + ) + require.NoError(t, err, "FinalizeBlock expected no error") + require.Len(t, res.TxResults, 1, "TxResults expected length not met") + require.Equal(t, uint32(0), res.TxResults[0].Code, "TxResults tx unexpected result code "+res.TxResults[0].Log) app.Commit() seq = seq + 1 } @@ -2821,6 +2958,7 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_ValidDelegations_Multi coinsPos, addr3, ) + require.NoError(t, err, "NewMsgSubmitProposal expected to create msg") fees := sdk.NewCoins(sdk.NewInt64Coin("atom", 150)) ctx.WithBlockTime(time.Now()) @@ -2829,14 +2967,18 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_ValidDelegations_Multi ctx.WithBlockTime(time.Now()) time.Sleep(200 * time.Millisecond) - // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: 2, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block - txGov, err := SignTx(NewTestRewardsGasLimit(), sdk.NewCoins(sdk.NewInt64Coin("atom", 150), sdk.NewInt64Coin("nhash", 1_190_500_000)), encCfg, priv3.PubKey(), priv3, *acct3, ctx.ChainID(), msg) - require.NoError(t, err) - - _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), txGov) - require.NoError(t, errFromDeliverTx) + txGov, err := SignTxAndGetBytes(ctx, NewTestRewardsGasLimit(), sdk.NewCoins(sdk.NewInt64Coin("atom", 150), sdk.NewInt64Coin("nhash", 1_190_500_000)), encCfg, priv3.PubKey(), priv3, *acct3, ctx.ChainID(), msg) + require.NoError(t, err, "SignTxAndGetBytes") + res, err := app.FinalizeBlock(&abci.RequestFinalizeBlock{ + Height: 1, + Time: time.Now().UTC(), + Txs: [][]byte{txGov}, + }, + ) + require.NoError(t, err, "FinalizeBlock expected no error") + require.Len(t, res.TxResults, 1, "TxResults expected length not met") + require.Equal(t, uint32(0), res.TxResults[0].Code, "TxResults tx unexpected result code "+res.TxResults[0].Log) - // app.EndBlock(abci.RequestEndBlock{Height: 2}) // TODO[1760]: finalize-block app.Commit() seq = seq + 1 @@ -2848,15 +2990,19 @@ func TestRewardsProgramStartPerformQualifyingActions_Vote_ValidDelegations_Multi assert.NotEmpty(t, res.GetEvents(), "should have emitted an event.") // threshold will be met after 10 actions - for height := int64(3); height < int64(23); height++ { - // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: height, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block + for height := int64(2); height < int64(22); height++ { require.NoError(t, acct3.SetSequence(seq)) - tx1, err1 := SignTx(NewTestRewardsGasLimit(), fees, encCfg, priv3.PubKey(), priv3, *acct3, ctx.ChainID(), vote) - require.NoError(t, err1) - _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), tx1) - require.NoError(t, errFromDeliverTx) - assert.NotEmpty(t, res.GetEvents(), "should have emitted an event.") - // app.EndBlock(abci.RequestEndBlock{Height: height}) // TODO[1760]: finalize-block + tx1, err1 := SignTxAndGetBytes(ctx, NewTestRewardsGasLimit(), fees, encCfg, priv3.PubKey(), priv3, *acct3, ctx.ChainID(), vote) + require.NoError(t, err1, "[%d]: SignTxAndGetBytes", height) + res, err := app.FinalizeBlock(&abci.RequestFinalizeBlock{ + Height: height, + Time: time.Now().UTC(), + Txs: [][]byte{tx1}, + }, + ) + require.NoError(t, err, "FinalizeBlock expected no error") + require.Len(t, res.TxResults, 1, "TxResults expected length not met") + require.Equal(t, uint32(0), res.TxResults[0].Code, "TxResults tx unexpected result code "+res.TxResults[0].Log) app.Commit() seq = seq + 1 } @@ -2889,6 +3035,7 @@ func TestRewardsProgramStartPerformQualifyingActions_Delegate_NoQualifyingAction priv, pubKey, addr := testdata.KeyTestPubAddr() _, pubKey2, _ := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr, priv.PubKey(), 0, 0) + pioconfig.SetProvenanceConfig("nhash", 0) acct1Balance := sdk.NewCoins( sdk.NewInt64Coin(sdk.DefaultBondDenom, 10000000000), sdk.NewInt64Coin("atom", 10000000), @@ -2938,26 +3085,32 @@ func TestRewardsProgramStartPerformQualifyingActions_Delegate_NoQualifyingAction coinsPos, addr, ) + require.NoError(t, err, "NewMsgSubmitProposal expected to create msg") fees := sdk.NewCoins(sdk.NewInt64Coin("atom", 150)) acct1 = app.AccountKeeper.GetAccount(ctx, acct1.GetAddress()).(*authtypes.BaseAccount) seq := acct1.Sequence time.Sleep(110 * time.Millisecond) - // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: 2, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block - txGov, err := SignTx( + txGov, err := SignTxAndGetBytes( + ctx, NewTestRewardsGasLimit(), sdk.NewCoins(sdk.NewInt64Coin("atom", 150), sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 1_190_500_000)), encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg, ) - require.NoError(t, err, "SignTx") + require.NoError(t, err, "SignTxAndGetBytes") - _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), txGov) - require.NoError(t, errFromDeliverTx, "SimDeliver") - assert.NotEmpty(t, res.GetEvents(), "res.GetEvents()") + res, err := app.FinalizeBlock(&abci.RequestFinalizeBlock{ + Height: 1, + Time: time.Now().UTC(), + Txs: [][]byte{txGov}, + }, + ) + require.NoError(t, err, "FinalizeBlock expected no error") + require.Len(t, res.TxResults, 1, "TxResults expected length not met") + require.Equal(t, uint32(0), res.TxResults[0].Code, "TxResults tx unexpected result code "+res.TxResults[0].Log) - // app.EndBlock(abci.RequestEndBlock{Height: 2}) // TODO[1760]: finalize-block app.Commit() seq = seq + 1 @@ -2966,15 +3119,19 @@ func TestRewardsProgramStartPerformQualifyingActions_Delegate_NoQualifyingAction // tx with a fee associated with msg type and account has funds vote1 := govtypesv1beta1.NewMsgVote(addr, proposal.Id, govtypesv1beta1.OptionYes) - for height := int64(3); height < int64(15); height++ { - // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: height, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block + for height := int64(2); height < int64(14); height++ { require.NoError(t, acct1.SetSequence(seq), "[%d]: SetSequence(%d)", height, seq) - tx1, err1 := SignTx(NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), vote1) - require.NoError(t, err1, "[%d]: SignTx", height) - _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), tx1) - require.NoError(t, errFromDeliverTx, "[%d]: SimDeliver", height) - assert.NotEmpty(t, res.GetEvents(), "[%d]: res.GetEvents()", height) - // app.EndBlock(abci.RequestEndBlock{Height: height}) // TODO[1760]: finalize-block + tx1, err1 := SignTxAndGetBytes(ctx, NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), vote1) + require.NoError(t, err1, "[%d]: SignTxAndGetBytes", height) + res, err := app.FinalizeBlock(&abci.RequestFinalizeBlock{ + Height: height, + Time: time.Now().UTC(), + Txs: [][]byte{tx1}, + }, + ) + require.NoError(t, err, "FinalizeBlock expected no error") + require.Len(t, res.TxResults, 1, "TxResults expected length not met") + require.Equal(t, uint32(0), res.TxResults[0].Code, "TxResults tx unexpected result code "+res.TxResults[0].Log) app.Commit() seq = seq + 1 } @@ -3011,6 +3168,7 @@ func TestRewardsProgramStartPerformQualifyingActions_Delegate_QualifyingActionsP priv, pubKey, addr := testdata.KeyTestPubAddr() _, pubKey2, _ := testdata.KeyTestPubAddr() acct1 := authtypes.NewBaseAccount(addr, priv.PubKey(), 0, 0) + pioconfig.SetProvenanceConfig("nhash", 0) acct1Balance := sdk.NewCoins( sdk.NewInt64Coin(sdk.DefaultBondDenom, 10000000000), sdk.NewInt64Coin("atom", 10000000), @@ -3065,26 +3223,31 @@ func TestRewardsProgramStartPerformQualifyingActions_Delegate_QualifyingActionsP coinsPos, addr, ) + require.NoError(t, err, "NewMsgSubmitProposal expected to create msg") fees := sdk.NewCoins(sdk.NewInt64Coin("atom", 150)) acct1 = app.AccountKeeper.GetAccount(ctx, acct1.GetAddress()).(*authtypes.BaseAccount) seq := acct1.Sequence time.Sleep(200 * time.Millisecond) - // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: 2, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block - txGov, err := SignTx( + txGov, err := SignTxAndGetBytes(ctx, NewTestRewardsGasLimit(), sdk.NewCoins(sdk.NewInt64Coin("atom", 150), sdk.NewInt64Coin(pioconfig.GetProvenanceConfig().FeeDenom, 1_190_500_000)), encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), msg, ) - require.NoError(t, err, "SignTx") + require.NoError(t, err, "SignTxAndGetBytes") - _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), txGov) - require.NoError(t, errFromDeliverTx, "SimDeliver") - assert.NotEmpty(t, res.GetEvents(), "res.GetEvents()") + res, err := app.FinalizeBlock(&abci.RequestFinalizeBlock{ + Height: 1, + Time: time.Now().UTC(), + Txs: [][]byte{txGov}, + }, + ) + require.NoError(t, err, "FinalizeBlock expected no error") + require.Len(t, res.TxResults, 1, "TxResults expected length not met") + require.Equal(t, uint32(0), res.TxResults[0].Code, "TxResults tx unexpected result code "+res.TxResults[0].Log) - // app.EndBlock(abci.RequestEndBlock{Height: 2}) // TODO[1760]: finalize-block app.Commit() seq = seq + 1 @@ -3094,16 +3257,21 @@ func TestRewardsProgramStartPerformQualifyingActions_Delegate_QualifyingActionsP delAddr, _ := valSet.GetByIndex(0) delegation := stakingtypes.NewMsgDelegate(addr.String(), sdk.ValAddress(delAddr).String(), sdk.NewInt64Coin(sdk.DefaultBondDenom, 1000)) - for height := int64(3); height < int64(23); height++ { - // app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: height, Time: time.Now().UTC()}}) // TODO[1760]: finalize-block + for height := int64(2); height < int64(22); height++ { require.NoError(t, acct1.SetSequence(seq), "[%d]: SetSequence(%d)", height, seq) - tx1, err1 := SignTx(NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), delegation) - require.NoError(t, err1, "[%d]: SignTx", height) - _, res, errFromDeliverTx := app.SimDeliver(encCfg.TxConfig.TxEncoder(), tx1) - require.NoError(t, errFromDeliverTx, "[%d]: SimDeliver", height) - assert.NotEmpty(t, res.GetEvents(), "[%d]: res.GetEvents()", height) + tx1, err1 := SignTxAndGetBytes(ctx, NewTestRewardsGasLimit(), fees, encCfg, priv.PubKey(), priv, *acct1, ctx.ChainID(), delegation) + require.NoError(t, err1, "[%d]: SignTxAndGetBytes", height) + _, err := app.FinalizeBlock(&abci.RequestFinalizeBlock{ + Height: height, + Time: time.Now().UTC(), + Txs: [][]byte{tx1}, + }, + ) + require.NoError(t, err, "FinalizeBlock expected no error") + require.Len(t, res.TxResults, 1, "TxResults expected length not met") + require.Equal(t, uint32(0), res.TxResults[0].Code, "TxResults tx unexpected result code "+res.TxResults[0].Log) time.Sleep(100 * time.Millisecond) - // app.EndBlock(abci.RequestEndBlock{Height: height}) // TODO[1760]: finalize-block + app.Commit() seq = seq + 1 } @@ -3160,6 +3328,7 @@ func createValSet(t *testing.T, pubKeys ...cryptotypes.PubKey) *cmttypes.Validat } func signAndGenTx( + ctx sdk.Context, gaslimit uint64, fees sdk.Coins, encCfg moduletestutil.TestEncodingConfig, @@ -3177,12 +3346,13 @@ func signAndGenTx( return nil, err } + signingMode := signing.SignMode(encCfg.TxConfig.SignModeHandler().DefaultMode()) // First round: we gather all the signer infos. We use the "set empty // signature" hack to do that. sigV2 := signing.SignatureV2{ PubKey: pubKey, Data: &signing.SingleSignatureData{ - // SignMode: encCfg.TxConfig.SignModeHandler().DefaultMode(), // TODO[1760]: signing: same type name diff packages. + SignMode: signingMode, Signature: nil, }, Sequence: acct.Sequence, @@ -3194,28 +3364,29 @@ func signAndGenTx( } // Second round: all signer infos are set, so each signer can sign. - // TODO[1760]: signing: SignWithPrivKey: Uncomment these lines. - /* - signerData := authsigning.SignerData{ - ChainID: chainId, - AccountNumber: acct.AccountNumber, - Sequence: acct.Sequence, - } - sigV2, err = tx.SignWithPrivKey( - encCfg.TxConfig.SignModeHandler().DefaultMode(), signerData, - txBuilder, privKey, encCfg.TxConfig, acct.Sequence) - if err != nil { - return nil, err - } - err = txBuilder.SetSignatures(sigV2) - if err != nil { - return nil, err - } - */ + signerData := authsigning.SignerData{ + Address: sdk.AccAddress(pubKey.Bytes()).String(), + ChainID: chainId, + AccountNumber: acct.AccountNumber, + Sequence: acct.Sequence, + PubKey: pubKey, + } + sigV2, err = tx.SignWithPrivKey( + ctx, signingMode, signerData, + txBuilder, privKey, encCfg.TxConfig, acct.Sequence) + if err != nil { + return nil, err + } + err = txBuilder.SetSignatures(sigV2) + if err != nil { + return nil, err + } + return txBuilder, nil } func SignTxAndGetBytes( + ctx sdk.Context, gaslimit uint64, fees sdk.Coins, encCfg moduletestutil.TestEncodingConfig, @@ -3225,7 +3396,7 @@ func SignTxAndGetBytes( chainId string, msg ...sdk.Msg, ) ([]byte, error) { - txBuilder, err := signAndGenTx(gaslimit, fees, encCfg, pubKey, privKey, acct, chainId, msg) + txBuilder, err := signAndGenTx(ctx, gaslimit, fees, encCfg, pubKey, privKey, acct, chainId, msg) if err != nil { return nil, err } @@ -3238,6 +3409,7 @@ func SignTxAndGetBytes( } func SignTx( + ctx sdk.Context, gaslimit uint64, fees sdk.Coins, encCfg moduletestutil.TestEncodingConfig, @@ -3247,7 +3419,7 @@ func SignTx( chainId string, msg ...sdk.Msg, ) (sdk.Tx, error) { - txBuilder, err := signAndGenTx(gaslimit, fees, encCfg, pubKey, privKey, acct, chainId, msg) + txBuilder, err := signAndGenTx(ctx, gaslimit, fees, encCfg, pubKey, privKey, acct, chainId, msg) if err != nil { return nil, err } diff --git a/proto/provenance/attribute/v1/tx.proto b/proto/provenance/attribute/v1/tx.proto index 0862a3e5c4..08dd4474f5 100644 --- a/proto/provenance/attribute/v1/tx.proto +++ b/proto/provenance/attribute/v1/tx.proto @@ -35,6 +35,8 @@ service Msg { // MsgAddAttributeRequest defines an sdk.Msg type that is used to add a new attribute to an account. // Attributes may only be set in an account by the account that the attribute name resolves to. message MsgAddAttributeRequest { + option (cosmos.msg.v1.signer) = "account"; + option (gogoproto.equal) = false; option (gogoproto.goproto_stringer) = false; option (gogoproto.stringer) = false; @@ -60,6 +62,8 @@ message MsgAddAttributeResponse {} // MsgUpdateAttributeRequest defines an sdk.Msg type that is used to update an existing attribute to an account. // Attributes may only be set in an account by the account that the attribute name resolves to. message MsgUpdateAttributeRequest { + option (cosmos.msg.v1.signer) = "owner"; + option (gogoproto.equal) = false; option (gogoproto.goproto_stringer) = false; option (gogoproto.stringer) = false; @@ -87,6 +91,8 @@ message MsgUpdateAttributeResponse {} // MsgUpdateAttributeExpirationRequest defines an sdk.Msg type that is used to update an existing attribute's expiration // date message MsgUpdateAttributeExpirationRequest { + option (cosmos.msg.v1.signer) = "owner"; + option (gogoproto.equal) = true; option (gogoproto.stringer) = true; option (gogoproto.goproto_stringer) = false; @@ -109,6 +115,8 @@ message MsgUpdateAttributeExpirationResponse {} // MsgDeleteAttributeRequest defines a message to delete an attribute from an account // Attributes may only be removed from an account by the account that the attribute name resolves to. message MsgDeleteAttributeRequest { + option (cosmos.msg.v1.signer) = "owner"; + option (gogoproto.equal) = false; option (gogoproto.goproto_stringer) = false; option (gogoproto.stringer) = false; @@ -128,6 +136,8 @@ message MsgDeleteAttributeResponse {} // MsgDeleteDistinctAttributeRequest defines a message to delete an attribute with matching name, value, and type from // an account. Attributes may only be removed from an account by the account that the attribute name resolves to. message MsgDeleteDistinctAttributeRequest { + option (cosmos.msg.v1.signer) = "owner"; + option (gogoproto.equal) = false; option (gogoproto.goproto_stringer) = false; option (gogoproto.stringer) = false; diff --git a/proto/provenance/marker/v1/tx.proto b/proto/provenance/marker/v1/tx.proto index 826bd49504..7708792f73 100644 --- a/proto/provenance/marker/v1/tx.proto +++ b/proto/provenance/marker/v1/tx.proto @@ -106,6 +106,8 @@ message MsgAddMarkerResponse {} // MsgAddAccessRequest defines the Msg/AddAccess request type message MsgAddAccessRequest { + option (cosmos.msg.v1.signer) = "administrator"; + string denom = 1; string administrator = 2; repeated AccessGrant access = 3 [(gogoproto.nullable) = false]; @@ -116,6 +118,8 @@ message MsgAddAccessResponse {} // MsgDeleteAccessRequest defines the Msg/DeleteAccess request type message MsgDeleteAccessRequest { + option (cosmos.msg.v1.signer) = "administrator"; + string denom = 1; string administrator = 2; string removed_address = 3; @@ -125,6 +129,8 @@ message MsgDeleteAccessResponse {} // MsgFinalizeRequest defines the Msg/Finalize request type message MsgFinalizeRequest { + option (cosmos.msg.v1.signer) = "administrator"; + string denom = 1; string administrator = 2; } @@ -133,6 +139,8 @@ message MsgFinalizeResponse {} // MsgActivateRequest defines the Msg/Activate request type message MsgActivateRequest { + option (cosmos.msg.v1.signer) = "administrator"; + string denom = 1; string administrator = 2; } @@ -141,6 +149,8 @@ message MsgActivateResponse {} // MsgCancelRequest defines the Msg/Cancel request type message MsgCancelRequest { + option (cosmos.msg.v1.signer) = "reward_address"; + string denom = 1; string administrator = 2; } @@ -149,6 +159,8 @@ message MsgCancelResponse {} // MsgDeleteRequest defines the Msg/Delete request type message MsgDeleteRequest { + option (cosmos.msg.v1.signer) = "administrator"; + string denom = 1; string administrator = 2; } @@ -157,6 +169,8 @@ message MsgDeleteResponse {} // MsgMintRequest defines the Msg/Mint request type message MsgMintRequest { + option (cosmos.msg.v1.signer) = "administrator"; + cosmos.base.v1beta1.Coin amount = 1 [(gogoproto.nullable) = false, (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Coin"]; string administrator = 2; @@ -166,6 +180,8 @@ message MsgMintResponse {} // MsgBurnRequest defines the Msg/Burn request type message MsgBurnRequest { + option (cosmos.msg.v1.signer) = "administrator"; + cosmos.base.v1beta1.Coin amount = 1 [(gogoproto.nullable) = false, (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Coin"]; string administrator = 2; @@ -175,6 +191,8 @@ message MsgBurnResponse {} // MsgWithdrawRequest defines the Msg/Withdraw request type message MsgWithdrawRequest { + option (cosmos.msg.v1.signer) = "administrator"; + string denom = 1; string administrator = 2; string to_address = 3; @@ -186,6 +204,8 @@ message MsgWithdrawResponse {} // MsgTransferRequest defines the Msg/Transfer request type message MsgTransferRequest { + option (cosmos.msg.v1.signer) = "administrator"; + cosmos.base.v1beta1.Coin amount = 1 [(gogoproto.nullable) = false, (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Coin"]; string administrator = 3; @@ -198,6 +218,8 @@ message MsgTransferResponse {} // MsgIbcTransferRequest defines the Msg/IbcTransfer request type for markers. message MsgIbcTransferRequest { + option (cosmos.msg.v1.signer) = "administrator"; + ibc.applications.transfer.v1.MsgTransfer transfer = 1 [ (gogoproto.nullable) = false, (gogoproto.customtype) = "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types.MsgTransfer" @@ -210,6 +232,8 @@ message MsgIbcTransferResponse {} // MsgSetDenomMetadataRequest defines the Msg/SetDenomMetadata request type message MsgSetDenomMetadataRequest { + option (cosmos.msg.v1.signer) = "administrator"; + cosmos.bank.v1beta1.Metadata metadata = 1 [(gogoproto.nullable) = false, (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/x/bank/types.Metadata"]; string administrator = 2; @@ -220,6 +244,8 @@ message MsgSetDenomMetadataResponse {} // MsgAddFinalizeActivateMarkerRequest defines the Msg/AddFinalizeActivateMarker request type message MsgAddFinalizeActivateMarkerRequest { + option (cosmos.msg.v1.signer) = "from_address"; + cosmos.base.v1beta1.Coin amount = 1 [(gogoproto.nullable) = false, (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Coin"]; string manager = 3; @@ -328,6 +354,8 @@ message MsgUpdateSendDenyListResponse {} // MsgAddNetAssetValuesRequest defines the Msg/AddNetAssetValues request type message MsgAddNetAssetValuesRequest { + option (cosmos.msg.v1.signer) = "administrator"; + string denom = 1; string administrator = 2; repeated NetAssetValue net_asset_values = 3 [(gogoproto.nullable) = false]; diff --git a/proto/provenance/msgfees/v1/tx.proto b/proto/provenance/msgfees/v1/tx.proto index 860e298f52..4299c37eeb 100644 --- a/proto/provenance/msgfees/v1/tx.proto +++ b/proto/provenance/msgfees/v1/tx.proto @@ -39,6 +39,8 @@ service Msg { // MsgAssessCustomMsgFeeRequest defines an sdk.Msg type message MsgAssessCustomMsgFeeRequest { + option (cosmos.msg.v1.signer) = "from"; + option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; option (gogoproto.goproto_stringer) = true; diff --git a/proto/provenance/name/v1/name.proto b/proto/provenance/name/v1/name.proto index d9503878ff..8e7068b05a 100644 --- a/proto/provenance/name/v1/name.proto +++ b/proto/provenance/name/v1/name.proto @@ -1,6 +1,8 @@ syntax = "proto3"; package provenance.name.v1; +import "cosmos/msg/v1/msg.proto"; +import "cosmos_proto/cosmos.proto"; import "gogoproto/gogo.proto"; option go_package = "github.com/provenance-io/provenance/x/name/types"; @@ -22,12 +24,14 @@ message Params { // NameRecord is a structure used to bind ownership of a name hierarchy to a collection of addresses message NameRecord { + option (cosmos.msg.v1.signer) = "address"; + option (gogoproto.goproto_stringer) = false; // the bound name string name = 1; // the address the name resolved to - string address = 2; + string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"];; // whether owner signature is required to add sub-names bool restricted = 3; } diff --git a/proto/provenance/name/v1/tx.proto b/proto/provenance/name/v1/tx.proto index 12e1d6b348..eb7acbad7c 100644 --- a/proto/provenance/name/v1/tx.proto +++ b/proto/provenance/name/v1/tx.proto @@ -30,6 +30,8 @@ service Msg { // The record may optionally be restricted to prevent additional names from being added under this one without the // owner signing the request. message MsgBindNameRequest { + option (cosmos.msg.v1.signer) = "parent"; + option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; @@ -46,6 +48,8 @@ message MsgBindNameResponse {} // may not have any child names currently bound for this request to be successful. All associated attributes on account // addresses will be deleted. message MsgDeleteNameRequest { + option (cosmos.msg.v1.signer) = "record"; + option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; diff --git a/proto/provenance/reward/v1/tx.proto b/proto/provenance/reward/v1/tx.proto index 7cfb8f9f62..9664c799b4 100644 --- a/proto/provenance/reward/v1/tx.proto +++ b/proto/provenance/reward/v1/tx.proto @@ -5,6 +5,7 @@ import "gogoproto/gogo.proto"; import "google/protobuf/timestamp.proto"; import "cosmos/base/v1beta1/coin.proto"; import "provenance/reward/v1/reward.proto"; +import "cosmos/msg/v1/msg.proto"; option go_package = "github.com/provenance-io/provenance/x/reward/types"; option java_package = "io.provenance.reward.v1"; @@ -29,6 +30,8 @@ service Msg { // MsgCreateRewardProgramRequest is the request type for creating a reward program RPC message MsgCreateRewardProgramRequest { + option (cosmos.msg.v1.signer) = "distribute_from_address"; + option (gogoproto.equal) = true; option (gogoproto.goproto_stringer) = true; @@ -69,6 +72,8 @@ message MsgCreateRewardProgramResponse { // MsgEndRewardProgramRequest is the request type for ending a reward program RPC message MsgEndRewardProgramRequest { + option (cosmos.msg.v1.signer) = "program_owner_address"; + option (gogoproto.equal) = true; option (gogoproto.goproto_stringer) = true; @@ -83,6 +88,8 @@ message MsgEndRewardProgramResponse {} // MsgClaimRewardsRequest is the request type for claiming reward from reward program RPC message MsgClaimRewardsRequest { + option (cosmos.msg.v1.signer) = "reward_address"; + // reward program id to claim rewards. uint64 reward_program_id = 1; // reward address and signer of msg to send claimed rewards to. @@ -98,6 +105,8 @@ message MsgClaimRewardsResponse { // MsgClaimRewardsResponse is the request type for claiming rewards from all reward programs RPC message MsgClaimAllRewardsRequest { + option (cosmos.msg.v1.signer) = "reward_address"; + // reward address and signer of msg to send claimed rewards to. string reward_address = 1; } diff --git a/proto/provenance/trigger/v1/tx.proto b/proto/provenance/trigger/v1/tx.proto index 0fb6402cda..c723829ac0 100644 --- a/proto/provenance/trigger/v1/tx.proto +++ b/proto/provenance/trigger/v1/tx.proto @@ -1,6 +1,7 @@ syntax = "proto3"; package provenance.trigger.v1; +import "cosmos/msg/v1/msg.proto"; import "cosmos_proto/cosmos.proto"; import "gogoproto/gogo.proto"; import "google/protobuf/any.proto"; @@ -19,6 +20,8 @@ service Msg { // MsgCreateTriggerRequest is the request type for creating a trigger RPC message MsgCreateTriggerRequest { + option (cosmos.msg.v1.signer) = "authorities"; + option (gogoproto.equal) = true; option (gogoproto.goproto_stringer) = true; @@ -38,6 +41,8 @@ message MsgCreateTriggerResponse { // MsgDestroyTriggerRequest is the request type for creating a trigger RPC message MsgDestroyTriggerRequest { + option (cosmos.msg.v1.signer) = "authority"; + option (gogoproto.equal) = true; option (gogoproto.goproto_stringer) = true; diff --git a/x/attribute/simulation/operations_test.go b/x/attribute/simulation/operations_test.go index 13269b83d8..cde1180dea 100644 --- a/x/attribute/simulation/operations_test.go +++ b/x/attribute/simulation/operations_test.go @@ -76,11 +76,11 @@ func (s *SimTestSuite) TestWeightedOperations() { opMsgRoute string opMsgName string }{ - {simappparams.DefaultWeightMsgAddAttribute, sdk.MsgTypeURL(&types.MsgAddAttributeRequest{}), sdk.MsgTypeURL(&types.MsgAddAttributeRequest{})}, - {simappparams.DefaultWeightMsgUpdateAttribute, sdk.MsgTypeURL(&types.MsgUpdateAttributeRequest{}), sdk.MsgTypeURL(&types.MsgUpdateAttributeRequest{})}, - {simappparams.DefaultWeightMsgDeleteAttribute, sdk.MsgTypeURL(&types.MsgDeleteAttributeRequest{}), sdk.MsgTypeURL(&types.MsgDeleteAttributeRequest{})}, - {simappparams.DefaultWeightMsgDeleteDistinctAttribute, sdk.MsgTypeURL(&types.MsgDeleteDistinctAttributeRequest{}), sdk.MsgTypeURL(&types.MsgDeleteDistinctAttributeRequest{})}, - {simappparams.DefaultWeightMsgSetAccountData, sdk.MsgTypeURL(&types.MsgSetAccountDataRequest{}), sdk.MsgTypeURL(&types.MsgSetAccountDataRequest{})}, + {weight: simappparams.DefaultWeightMsgAddAttribute, opMsgRoute: types.RouterKey, opMsgName: sdk.MsgTypeURL(&types.MsgAddAttributeRequest{})}, + {weight: simappparams.DefaultWeightMsgUpdateAttribute, opMsgRoute: types.RouterKey, opMsgName: sdk.MsgTypeURL(&types.MsgUpdateAttributeRequest{})}, + {weight: simappparams.DefaultWeightMsgDeleteAttribute, opMsgRoute: types.RouterKey, opMsgName: sdk.MsgTypeURL(&types.MsgDeleteAttributeRequest{})}, + {weight: simappparams.DefaultWeightMsgDeleteDistinctAttribute, opMsgRoute: types.RouterKey, opMsgName: sdk.MsgTypeURL(&types.MsgDeleteDistinctAttributeRequest{})}, + {weight: simappparams.DefaultWeightMsgSetAccountData, opMsgRoute: types.RouterKey, opMsgName: sdk.MsgTypeURL(&types.MsgSetAccountDataRequest{})}, } expNames := make([]string, len(expected)) @@ -119,9 +119,6 @@ func (s *SimTestSuite) TestSimulateMsgAddAttribute() { name := "example.provenance" s.LogIfError(s.app.NameKeeper.SetNameRecord(s.ctx, name, accounts[0].Address, false), "SetNameRecord(%q) error", name) - // begin a new block - // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) // TODO[1760]: finalize-block - // execute operation op := simulation.SimulateMsgAddAttribute(s.app.AttributeKeeper, s.app.AccountKeeper, s.app.BankKeeper, s.app.NameKeeper) operationMsg, futureOperations, err := op(r, s.app.BaseApp, s.ctx, accounts, "") @@ -129,7 +126,7 @@ func (s *SimTestSuite) TestSimulateMsgAddAttribute() { s.LogOperationMsg(operationMsg) var msg types.MsgAddAttributeRequest - s.Require().NoError(types.ModuleCdc.UnmarshalJSON(operationMsg.Msg, &msg), "UnmarshalJSON(operationMsg.Msg)") + s.Require().NoError(types.ModuleCdc.Unmarshal(operationMsg.Msg, &msg), "UnmarshalJSON(operationMsg.Msg)") s.Assert().True(operationMsg.OK, "operationMsg.OK") s.Assert().Equal("cosmos1tnh2q55v8wyygtt9srz5safamzdengsnqeycj3", msg.Account, "msg.Account") @@ -138,7 +135,7 @@ func (s *SimTestSuite) TestSimulateMsgAddAttribute() { s.Assert().Equal(types.AttributeType_Uri, msg.AttributeType, "msg.AttributeType") s.Assert().Equal([]byte("http://www.example.com/"), msg.Value, "msg.Value") s.Assert().Equal(sdk.MsgTypeURL(&msg), operationMsg.Name, "operationMsg.Name") - s.Assert().Equal(sdk.MsgTypeURL(&msg), operationMsg.Route, "operationMsg.Route") + s.Assert().Equal(types.RouterKey, operationMsg.Route, "operationMsg.Route") s.Assert().Len(futureOperations, 0, "futureOperations") } @@ -154,9 +151,6 @@ func (s *SimTestSuite) TestSimulateMsgUpdateAttribute() { attr := types.NewAttribute(name, accounts[1].Address.String(), types.AttributeType_String, []byte("test"), &expireTime) s.LogIfError(s.app.AttributeKeeper.SetAttribute(s.ctx, attr, accounts[0].Address), "SetAttribute(%q) error", name) - // begin a new block - // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash, Time: time.Now()}}) // TODO[1760]: finalize-block - // execute operation op := simulation.SimulateMsgUpdateAttribute(s.app.AttributeKeeper, s.app.AccountKeeper, s.app.BankKeeper, s.app.NameKeeper) operationMsg, futureOperations, err := op(r, s.app.BaseApp, s.ctx, accounts, "") @@ -164,14 +158,14 @@ func (s *SimTestSuite) TestSimulateMsgUpdateAttribute() { s.LogOperationMsg(operationMsg) var msg types.MsgUpdateAttributeRequest - s.Require().NoError(types.ModuleCdc.UnmarshalJSON(operationMsg.Msg, &msg), "UnmarshalJSON(operationMsg.Msg)") + s.Require().NoError(types.ModuleCdc.Unmarshal(operationMsg.Msg, &msg), "UnmarshalJSON(operationMsg.Msg)") s.Assert().True(operationMsg.OK, "operationMsg.OK") s.Assert().Equal(sdk.MsgTypeURL(&msg), operationMsg.Name, "operationMsg.Name") s.Assert().Equal(name, msg.Name, "msg.Name") s.Assert().Equal(accounts[0].Address.String(), msg.Owner, "msg.Owner") s.Assert().Equal(accounts[1].Address.String(), msg.Account, "msg.Account") - s.Assert().Equal(sdk.MsgTypeURL(&msg), operationMsg.Route, "operationMsg.Route") + s.Assert().Equal(types.RouterKey, operationMsg.Route, "operationMsg.Route") s.Assert().Len(futureOperations, 0, "futureOperations") } @@ -186,8 +180,6 @@ func (s *SimTestSuite) TestSimulateMsgDeleteAttribute() { s.LogIfError(s.app.NameKeeper.SetNameRecord(s.ctx, name, accounts[0].Address, false), "SetNameRecord(%q) error", name) attr := types.NewAttribute(name, accounts[1].Address.String(), types.AttributeType_String, []byte("test"), &expireTime) s.LogIfError(s.app.AttributeKeeper.SetAttribute(s.ctx, attr, accounts[0].Address), "SetAttribute(%q) error", name) - // begin a new block - // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash, Time: time.Now()}}) // TODO[1760]: finalize-block // execute operation op := simulation.SimulateMsgDeleteAttribute(s.app.AttributeKeeper, s.app.AccountKeeper, s.app.BankKeeper, s.app.NameKeeper) @@ -196,14 +188,14 @@ func (s *SimTestSuite) TestSimulateMsgDeleteAttribute() { s.LogOperationMsg(operationMsg) var msg types.MsgDeleteAttributeRequest - s.Require().NoError(types.ModuleCdc.UnmarshalJSON(operationMsg.Msg, &msg), "UnmarshalJSON(operationMsg.Msg)") + s.Require().NoError(types.ModuleCdc.Unmarshal(operationMsg.Msg, &msg), "UnmarshalJSON(operationMsg.Msg)") s.Assert().True(operationMsg.OK, "operationMsg.OK") s.Assert().Equal(sdk.MsgTypeURL(&msg), operationMsg.Name, "operationMsg.Name") s.Assert().Equal(name, msg.Name, "msg.Name") s.Assert().Equal(accounts[0].Address.String(), msg.Owner, "msg.Owner") s.Assert().Equal(accounts[1].Address.String(), msg.Account, "msg.Account") - s.Assert().Equal(sdk.MsgTypeURL(&msg), operationMsg.Route, "operationMsg.Route") + s.Assert().Equal(types.RouterKey, operationMsg.Route, "operationMsg.Route") s.Assert().Len(futureOperations, 0, "futureOperations") } @@ -219,9 +211,6 @@ func (s *SimTestSuite) TestSimulateMsgDeleteDistinctAttribute() { attr := types.NewAttribute(name, accounts[1].Address.String(), types.AttributeType_String, []byte("test"), &expireTime) s.LogIfError(s.app.AttributeKeeper.SetAttribute(s.ctx, attr, accounts[0].Address), "SetAttribute(%q) error", name) - // begin a new block - // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash, Time: time.Now()}}) // TODO[1760]: finalize-block - // execute operation op := simulation.SimulateMsgDeleteDistinctAttribute(s.app.AttributeKeeper, s.app.AccountKeeper, s.app.BankKeeper, s.app.NameKeeper) operationMsg, futureOperations, err := op(r, s.app.BaseApp, s.ctx, accounts, "") @@ -229,14 +218,14 @@ func (s *SimTestSuite) TestSimulateMsgDeleteDistinctAttribute() { s.LogOperationMsg(operationMsg) var msg types.MsgDeleteDistinctAttributeRequest - s.Require().NoError(types.ModuleCdc.UnmarshalJSON(operationMsg.Msg, &msg), "UnmarshalJSON(operationMsg.Msg)") + s.Require().NoError(types.ModuleCdc.Unmarshal(operationMsg.Msg, &msg), "UnmarshalJSON(operationMsg.Msg)") s.Assert().True(operationMsg.OK, "operationMsg.OK") s.Assert().Equal(sdk.MsgTypeURL(&msg), operationMsg.Name, "operationMsg.Name") s.Assert().Equal(name, msg.Name, "msg.Name") s.Assert().Equal(accounts[0].Address.String(), msg.Owner, "msg.Owner") s.Assert().Equal(accounts[1].Address.String(), msg.Account, "msg.Account") - s.Assert().Equal(sdk.MsgTypeURL(&msg), operationMsg.Route, "operationMsg.Route") + s.Assert().Equal(types.RouterKey, operationMsg.Route, "operationMsg.Route") s.Assert().Len(futureOperations, 0, "futureOperations") } @@ -246,8 +235,6 @@ func (s *SimTestSuite) TestSimulateMsgSetAccountData() { r := rand.New(src) accounts := s.getTestingAccounts(r, 3) - // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash, Time: time.Now()}}) // TODO[1760]: finalize-block - // execute operation op := simulation.SimulateMsgSetAccountData(s.app.AttributeKeeper, s.app.AccountKeeper, s.app.BankKeeper) operationMsg, futureOperations, err := op(r, s.app.BaseApp, s.ctx, accounts, "") @@ -255,13 +242,13 @@ func (s *SimTestSuite) TestSimulateMsgSetAccountData() { s.LogOperationMsg(operationMsg) var msg types.MsgSetAccountDataRequest - s.Require().NoError(types.ModuleCdc.UnmarshalJSON(operationMsg.Msg, &msg), "UnmarshalJSON(operationMsg.Msg)") + s.Require().NoError(types.ModuleCdc.Unmarshal(operationMsg.Msg, &msg), "UnmarshalJSON(operationMsg.Msg)") s.Assert().True(operationMsg.OK, "operationMsg.OK") s.Assert().Equal(sdk.MsgTypeURL(&msg), operationMsg.Name, "operationMsg.Name") s.Assert().Equal("", msg.Value, "msg.Value") s.Assert().Equal(accounts[1].Address.String(), msg.Account, "msg.Account") - s.Assert().Equal(sdk.MsgTypeURL(&msg), operationMsg.Route, "operationMsg.Route") + s.Assert().Equal(types.RouterKey, operationMsg.Route, "operationMsg.Route") s.Assert().Len(futureOperations, 0, "futureOperations") } diff --git a/x/attribute/types/tx.pb.go b/x/attribute/types/tx.pb.go index a504a1a79b..8633c54bb4 100644 --- a/x/attribute/types/tx.pb.go +++ b/x/attribute/types/tx.pb.go @@ -599,54 +599,55 @@ func init() { func init() { proto.RegisterFile("provenance/attribute/v1/tx.proto", fileDescriptor_5de344c1a12714be) } var fileDescriptor_5de344c1a12714be = []byte{ - // 751 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0xbf, 0x6f, 0xd3, 0x40, - 0x14, 0xce, 0x25, 0x69, 0x0a, 0xd7, 0x34, 0x45, 0x47, 0x4b, 0x5c, 0x83, 0x12, 0x37, 0x94, 0x12, - 0x21, 0x61, 0xd3, 0x54, 0x2c, 0x01, 0x86, 0x56, 0x61, 0x8c, 0x84, 0x42, 0x41, 0xa8, 0x03, 0xd5, - 0x25, 0x3d, 0x8c, 0xa5, 0xd8, 0xe7, 0xe6, 0xce, 0x69, 0xcb, 0x54, 0x31, 0xb1, 0x51, 0x31, 0x95, - 0xad, 0xe2, 0x2f, 0xe0, 0xcf, 0xe8, 0xd8, 0x91, 0xa1, 0x02, 0xd4, 0x0e, 0xf0, 0x1f, 0xb0, 0xa2, - 0xf8, 0x57, 0x9c, 0x1f, 0x36, 0x49, 0xd8, 0xfc, 0xce, 0xef, 0x7d, 0xef, 0xf3, 0xf7, 0xbe, 0x77, - 0x09, 0x94, 0xcc, 0x16, 0x6d, 0x13, 0x03, 0x1b, 0x0d, 0xa2, 0x60, 0xce, 0x5b, 0x5a, 0xdd, 0xe2, - 0x44, 0x69, 0xaf, 0x2a, 0x7c, 0x5f, 0x36, 0x5b, 0x94, 0x53, 0x94, 0xed, 0x66, 0xc8, 0x7e, 0x86, - 0xdc, 0x5e, 0x15, 0xb3, 0x0d, 0xca, 0x74, 0xca, 0x14, 0x9d, 0xa9, 0x9d, 0x02, 0x9d, 0xa9, 0x4e, - 0x85, 0x38, 0xaf, 0x52, 0x95, 0xda, 0x8f, 0x4a, 0xe7, 0xc9, 0x3d, 0xcd, 0xab, 0x94, 0xaa, 0x4d, - 0xa2, 0xd8, 0x51, 0xdd, 0x7a, 0xa3, 0x70, 0x4d, 0x27, 0x8c, 0x63, 0xdd, 0x74, 0x13, 0xee, 0x86, - 0x51, 0xe9, 0x76, 0xb5, 0x13, 0x0b, 0x5f, 0xe2, 0xf0, 0x46, 0x95, 0xa9, 0xeb, 0x3b, 0x3b, 0xeb, - 0xde, 0x9b, 0x1a, 0xd9, 0xb5, 0x08, 0xe3, 0x08, 0xc1, 0xa4, 0x81, 0x75, 0x22, 0x00, 0x09, 0x14, - 0xaf, 0xd6, 0xec, 0x67, 0x34, 0x0f, 0xa7, 0xda, 0xb8, 0x69, 0x11, 0x21, 0x2e, 0x81, 0x62, 0xba, - 0xe6, 0x04, 0xa8, 0x0a, 0x33, 0x3e, 0xee, 0x36, 0x3f, 0x30, 0x89, 0x90, 0x90, 0x40, 0x31, 0x53, - 0x5a, 0x91, 0x43, 0xbe, 0x57, 0xf6, 0x9b, 0x6d, 0x1e, 0x98, 0xa4, 0x36, 0x8b, 0x83, 0x21, 0x12, - 0xe0, 0x34, 0x6e, 0x34, 0xa8, 0x65, 0x70, 0x21, 0x69, 0xf7, 0xf6, 0xc2, 0x4e, 0x7b, 0xba, 0x67, - 0x90, 0x96, 0x30, 0x65, 0x9f, 0x3b, 0x01, 0xaa, 0xc2, 0x39, 0xb2, 0x6f, 0x6a, 0x2d, 0xcc, 0x35, - 0x6a, 0x6c, 0xef, 0x60, 0x4e, 0x84, 0x94, 0x04, 0x8a, 0x33, 0x25, 0x51, 0x76, 0x74, 0x92, 0x3d, - 0x9d, 0xe4, 0x4d, 0x4f, 0xa7, 0x8d, 0x2b, 0xa7, 0xdf, 0xf3, 0xe0, 0xe8, 0x47, 0x1e, 0xd4, 0x32, - 0xdd, 0xe2, 0x0a, 0xe6, 0xa4, 0x7c, 0xed, 0xc3, 0x49, 0x3e, 0x76, 0x7c, 0x92, 0x8f, 0xfd, 0x3e, - 0xc9, 0xc7, 0x0e, 0xcf, 0xa5, 0x58, 0x61, 0x11, 0x66, 0x07, 0x34, 0x62, 0x26, 0x35, 0x18, 0x29, - 0xfc, 0x89, 0xc3, 0xc5, 0x2a, 0x53, 0x5f, 0x98, 0x9d, 0xb6, 0x23, 0x49, 0x78, 0x07, 0x66, 0x68, - 0x4b, 0x53, 0x35, 0x03, 0x37, 0xb7, 0x83, 0x5a, 0xce, 0x7a, 0xa7, 0x2f, 0x6d, 0x4d, 0x97, 0x60, - 0xda, 0xb2, 0x41, 0xdd, 0xa4, 0x84, 0x9d, 0x34, 0xe3, 0x9c, 0x39, 0x29, 0xaf, 0x61, 0xd6, 0x47, - 0xea, 0xd3, 0x3f, 0x39, 0x96, 0xfe, 0x0b, 0x1e, 0x4c, 0xcf, 0x31, 0xda, 0x82, 0x0b, 0x2e, 0x85, - 0x3e, 0xf4, 0xa9, 0xb1, 0xd0, 0xaf, 0x5b, 0xbd, 0xe2, 0xf4, 0xcf, 0x38, 0x15, 0x32, 0xe3, 0xe9, - 0xc0, 0x8c, 0x87, 0x0c, 0xe5, 0x16, 0x14, 0x87, 0x09, 0xef, 0xce, 0xe5, 0x1c, 0xc0, 0xdb, 0x83, - 0xaf, 0x9f, 0xfa, 0x93, 0x9e, 0xc4, 0xe4, 0x03, 0x2e, 0x4b, 0x4c, 0xee, 0xb2, 0x71, 0x4d, 0x5e, - 0x4e, 0xbb, 0x1f, 0x0f, 0x0e, 0xcf, 0x25, 0x50, 0x58, 0x81, 0xcb, 0xd1, 0x5f, 0xe7, 0xca, 0xb0, - 0x6b, 0xbb, 0xb3, 0x42, 0x9a, 0x64, 0x44, 0x77, 0x06, 0x68, 0xc5, 0x43, 0x68, 0x25, 0x46, 0x99, - 0xcb, 0x40, 0x4b, 0x97, 0xd0, 0x47, 0x00, 0x97, 0xfc, 0xd7, 0x15, 0x8d, 0x71, 0xcd, 0x68, 0xf0, - 0xff, 0xb8, 0x7a, 0x02, 0x7c, 0x13, 0x21, 0x7c, 0x93, 0xd1, 0x7c, 0x97, 0x61, 0x21, 0x8a, 0x90, - 0xcb, 0xfb, 0x15, 0x14, 0xaa, 0x4c, 0x7d, 0x4e, 0xf8, 0xba, 0x03, 0x5f, 0xc1, 0x1c, 0x7b, 0x6c, - 0x7d, 0x66, 0x0e, 0xdd, 0x41, 0x66, 0xbd, 0x4a, 0x96, 0xd3, 0xef, 0x7f, 0x7d, 0xbd, 0xe7, 0x45, - 0x85, 0x9b, 0xf6, 0x88, 0xfa, 0x91, 0x9d, 0xb6, 0xa5, 0xcf, 0x29, 0x98, 0xa8, 0x32, 0x15, 0xed, - 0xc2, 0x74, 0xf0, 0xfa, 0x41, 0x4a, 0xe8, 0xee, 0x0d, 0xbf, 0xcc, 0xc5, 0x07, 0xa3, 0x17, 0x38, - 0xad, 0xd1, 0x3b, 0x38, 0xd7, 0xe7, 0x2f, 0x54, 0x8a, 0x02, 0x19, 0x7e, 0x05, 0x8a, 0x6b, 0x63, - 0xd5, 0xb8, 0xbd, 0x8f, 0x01, 0x5c, 0x0c, 0x35, 0x37, 0x7a, 0x3c, 0x06, 0xe4, 0xc0, 0xc6, 0x8b, - 0x4f, 0x26, 0xac, 0xee, 0xca, 0xd2, 0xe7, 0xed, 0x68, 0x59, 0x86, 0xef, 0x5e, 0xb4, 0x2c, 0x21, - 0xcb, 0x83, 0x3e, 0x01, 0x98, 0x0d, 0x31, 0x2a, 0x2a, 0xff, 0x1b, 0x30, 0x6c, 0xdd, 0xc4, 0x47, - 0x13, 0xd5, 0xba, 0xa4, 0xf6, 0x60, 0xa6, 0xd7, 0xbc, 0x68, 0x35, 0x0a, 0x6e, 0xe8, 0x0a, 0x89, - 0xa5, 0x71, 0x4a, 0x9c, 0xc6, 0x1b, 0xfa, 0xe9, 0x45, 0x0e, 0x9c, 0x5d, 0xe4, 0xc0, 0xcf, 0x8b, - 0x1c, 0x38, 0xba, 0xcc, 0xc5, 0xce, 0x2e, 0x73, 0xb1, 0x6f, 0x97, 0xb9, 0x18, 0x14, 0x35, 0x1a, - 0x86, 0xf7, 0x0c, 0x6c, 0x3d, 0x54, 0x35, 0xfe, 0xd6, 0xaa, 0xcb, 0x0d, 0xaa, 0x2b, 0xdd, 0xac, - 0xfb, 0x1a, 0x0d, 0x44, 0xca, 0x7e, 0xe0, 0x6f, 0x53, 0xe7, 0x37, 0x8f, 0xd5, 0x53, 0xf6, 0xf5, - 0xbe, 0xf6, 0x37, 0x00, 0x00, 0xff, 0xff, 0xe4, 0x76, 0x39, 0x40, 0xe6, 0x09, 0x00, 0x00, + // 761 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0x4d, 0x6f, 0xd3, 0x4c, + 0x10, 0xf6, 0xd6, 0x69, 0xfa, 0xbe, 0xdb, 0x34, 0x95, 0x96, 0xb6, 0x71, 0x4d, 0x95, 0xb8, 0xa1, + 0x94, 0x08, 0x09, 0x9b, 0xa6, 0xe2, 0x12, 0xe0, 0xd0, 0x2a, 0x1c, 0x23, 0xa1, 0x50, 0x10, 0xea, + 0x81, 0xca, 0x49, 0x17, 0x63, 0x29, 0xf6, 0xba, 0xd9, 0x75, 0xda, 0xc2, 0xa5, 0x70, 0xe2, 0x58, + 0x71, 0x6a, 0x6f, 0xfd, 0x05, 0x88, 0x9f, 0xd1, 0x63, 0x8f, 0x1c, 0x2a, 0x40, 0xad, 0x04, 0xfc, + 0x0c, 0x14, 0x7f, 0xc5, 0xf9, 0x70, 0x88, 0xc3, 0x6d, 0x67, 0x77, 0xe6, 0x99, 0x67, 0x9f, 0x99, + 0x1d, 0x1b, 0x4a, 0x56, 0x93, 0xb4, 0xb0, 0xa9, 0x9a, 0x75, 0xac, 0xa8, 0x8c, 0x35, 0xf5, 0x9a, + 0xcd, 0xb0, 0xd2, 0x5a, 0x53, 0xd8, 0x81, 0x6c, 0x35, 0x09, 0x23, 0x28, 0xd3, 0xf1, 0x90, 0x03, + 0x0f, 0xb9, 0xb5, 0x26, 0x66, 0xea, 0x84, 0x1a, 0x84, 0x2a, 0x06, 0xd5, 0xda, 0x01, 0x06, 0xd5, + 0xdc, 0x08, 0x71, 0x4e, 0x23, 0x1a, 0x71, 0x96, 0x4a, 0x7b, 0xe5, 0xed, 0xe6, 0x34, 0x42, 0xb4, + 0x06, 0x56, 0x1c, 0xab, 0x66, 0xbf, 0x56, 0x98, 0x6e, 0x60, 0xca, 0x54, 0xc3, 0xf2, 0x1c, 0xee, + 0x44, 0x51, 0xe9, 0x64, 0x75, 0x1c, 0xf3, 0x9f, 0x27, 0xe0, 0x42, 0x85, 0x6a, 0x1b, 0xbb, 0xbb, + 0x1b, 0xfe, 0x49, 0x15, 0xef, 0xd9, 0x98, 0x32, 0x84, 0x60, 0xc2, 0x54, 0x0d, 0x2c, 0x00, 0x09, + 0x14, 0xfe, 0xaf, 0x3a, 0x6b, 0x34, 0x07, 0x27, 0x5b, 0x6a, 0xc3, 0xc6, 0xc2, 0x84, 0x04, 0x0a, + 0xa9, 0xaa, 0x6b, 0xa0, 0x0a, 0x4c, 0x07, 0xb8, 0x3b, 0xec, 0xd0, 0xc2, 0x02, 0x2f, 0x81, 0x42, + 0xba, 0xb8, 0x2a, 0x47, 0xdc, 0x57, 0x0e, 0x92, 0x6d, 0x1d, 0x5a, 0xb8, 0x3a, 0xa3, 0x86, 0x4d, + 0x24, 0xc0, 0x29, 0xb5, 0x5e, 0x27, 0xb6, 0xc9, 0x84, 0x84, 0x93, 0xdb, 0x37, 0xdb, 0xe9, 0xc9, + 0xbe, 0x89, 0x9b, 0xc2, 0xa4, 0xb3, 0xef, 0x1a, 0xa8, 0x02, 0x67, 0xf1, 0x81, 0xa5, 0x37, 0x55, + 0xa6, 0x13, 0x73, 0x67, 0x57, 0x65, 0x58, 0x48, 0x4a, 0xa0, 0x30, 0x5d, 0x14, 0x65, 0x57, 0x27, + 0xd9, 0xd7, 0x49, 0xde, 0xf2, 0x75, 0xda, 0xfc, 0xef, 0xfc, 0x5b, 0x0e, 0x1c, 0x7f, 0xcf, 0x81, + 0x6a, 0xba, 0x13, 0x5c, 0x56, 0x19, 0x2e, 0x2d, 0x7d, 0x3c, 0xcb, 0x71, 0x27, 0x67, 0x39, 0xee, + 0xf7, 0x59, 0x8e, 0x3b, 0xba, 0x94, 0xb8, 0x0f, 0xbf, 0xbe, 0xdc, 0xf5, 0x29, 0xe4, 0x17, 0x61, + 0xa6, 0x4f, 0x2f, 0x6a, 0x11, 0x93, 0xe2, 0xfc, 0x7b, 0x1e, 0x2e, 0x56, 0xa8, 0xf6, 0xdc, 0x6a, + 0x53, 0x18, 0x49, 0xce, 0xdb, 0x30, 0x4d, 0x9a, 0xba, 0xa6, 0x9b, 0x6a, 0x63, 0x27, 0xac, 0xeb, + 0x8c, 0xbf, 0xfb, 0xc2, 0xd1, 0x77, 0x19, 0xa6, 0x6c, 0x07, 0xd4, 0x73, 0xe2, 0x1d, 0xa7, 0x69, + 0x77, 0xcf, 0x75, 0x79, 0x05, 0x33, 0x01, 0x52, 0x4f, 0x2d, 0x12, 0xb1, 0x6a, 0x31, 0xef, 0xc3, + 0x74, 0x6d, 0xa3, 0x6d, 0x38, 0xef, 0x51, 0xe8, 0x41, 0x9f, 0x8c, 0x85, 0x7e, 0xc3, 0xee, 0x16, + 0xa7, 0xb7, 0xde, 0xc9, 0x88, 0x7a, 0x4f, 0x85, 0xea, 0x5d, 0x12, 0x07, 0x15, 0xc8, 0x3d, 0xcb, + 0x2f, 0x41, 0x71, 0x50, 0x09, 0xbc, 0x0a, 0xfd, 0x04, 0xf0, 0x56, 0xff, 0xf1, 0x93, 0xa0, 0xfe, + 0xe3, 0xb4, 0x7e, 0x5f, 0xef, 0xf1, 0xe3, 0xf7, 0x5e, 0xdc, 0xd6, 0x2f, 0x2d, 0x78, 0x32, 0x80, + 0xa3, 0x4b, 0x09, 0x84, 0x64, 0x58, 0x85, 0x2b, 0xc3, 0xef, 0xe9, 0x09, 0xf2, 0xce, 0xe9, 0xd8, + 0x32, 0x6e, 0xe0, 0x11, 0x3b, 0x36, 0x44, 0x70, 0x22, 0x82, 0x20, 0x1f, 0xaf, 0x56, 0x7d, 0xc9, + 0x3d, 0x6a, 0xa7, 0x00, 0x2e, 0x07, 0xc7, 0x65, 0x9d, 0x32, 0xdd, 0xac, 0xb3, 0x7f, 0x18, 0x52, + 0x21, 0xe6, 0x7c, 0x04, 0xf3, 0xc4, 0xa8, 0xcc, 0x57, 0x60, 0x7e, 0x18, 0x35, 0xef, 0x06, 0x2f, + 0xa1, 0x50, 0xa1, 0xda, 0x33, 0xcc, 0x36, 0xdc, 0x44, 0x65, 0x95, 0xa9, 0x3e, 0xef, 0x80, 0xa3, + 0x4b, 0xbc, 0x9f, 0x63, 0xb7, 0xba, 0xa5, 0x54, 0xd7, 0x10, 0xba, 0xe9, 0x94, 0xad, 0x17, 0xd9, + 0x4d, 0x5b, 0x3c, 0x4d, 0x42, 0xbe, 0x42, 0x35, 0xb4, 0x07, 0x53, 0xe1, 0x31, 0x85, 0x94, 0xc8, + 0x37, 0x3a, 0xf8, 0x03, 0x20, 0xde, 0x1f, 0x3d, 0xc0, 0x4d, 0x8d, 0xde, 0xc2, 0xd9, 0x9e, 0x9e, + 0x43, 0xc5, 0x61, 0x20, 0x83, 0x47, 0xa5, 0xb8, 0x1e, 0x2b, 0xc6, 0xcb, 0x7d, 0x02, 0xe0, 0x62, + 0x64, 0xc3, 0xa3, 0x47, 0x31, 0x20, 0xfb, 0xe6, 0x81, 0xf8, 0x78, 0xcc, 0xe8, 0x8e, 0x2c, 0x3d, + 0x5d, 0x3e, 0x5c, 0x96, 0xc1, 0xef, 0x71, 0xb8, 0x2c, 0x11, 0xcf, 0x08, 0x7d, 0x02, 0x30, 0x13, + 0xd1, 0xa8, 0xa8, 0xf4, 0x77, 0xc0, 0xa8, 0x87, 0x27, 0x3e, 0x1c, 0x2b, 0xd6, 0x23, 0xb5, 0x0f, + 0xd3, 0xdd, 0xcd, 0x8b, 0xd6, 0x86, 0xc1, 0x0d, 0x7c, 0x42, 0x62, 0x31, 0x4e, 0x88, 0x9b, 0x78, + 0xd3, 0x38, 0xbf, 0xca, 0x82, 0x8b, 0xab, 0x2c, 0xf8, 0x71, 0x95, 0x05, 0xc7, 0xd7, 0x59, 0xee, + 0xe2, 0x3a, 0xcb, 0x7d, 0xbd, 0xce, 0x72, 0x50, 0xd4, 0x49, 0x14, 0xde, 0x53, 0xb0, 0xfd, 0x40, + 0xd3, 0xd9, 0x1b, 0xbb, 0x26, 0xd7, 0x89, 0xa1, 0x74, 0xbc, 0xee, 0xe9, 0x24, 0x64, 0x29, 0x07, + 0xa1, 0x5f, 0xad, 0xf6, 0xb7, 0x91, 0xd6, 0x92, 0xce, 0xf0, 0x5f, 0xff, 0x13, 0x00, 0x00, 0xff, + 0xff, 0x5e, 0x5a, 0xfb, 0xc3, 0x1a, 0x0a, 0x00, 0x00, } func (this *MsgUpdateAttributeExpirationRequest) Equal(that interface{}) bool { diff --git a/x/exchange/params.pb.go b/x/exchange/params.pb.go index 6b7fa3f39a..a69b62a658 100644 --- a/x/exchange/params.pb.go +++ b/x/exchange/params.pb.go @@ -5,9 +5,9 @@ package exchange import ( fmt "fmt" + types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" - types "github.com/cosmos/cosmos-sdk/types" io "io" math "math" math_bits "math/bits" diff --git a/x/exchange/query.pb.go b/x/exchange/query.pb.go index 69a15d892b..0aa97cd012 100644 --- a/x/exchange/query.pb.go +++ b/x/exchange/query.pb.go @@ -2555,157 +2555,156 @@ func init() { } var fileDescriptor_00949b75b1c10bfe = []byte{ - // 2386 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0x4f, 0x6c, 0xdc, 0x58, - 0x19, 0xaf, 0x93, 0x26, 0x4d, 0xbe, 0xb4, 0xa9, 0xf6, 0x35, 0x2d, 0x93, 0x69, 0x3b, 0x49, 0xdd, - 0x7f, 0x51, 0xda, 0x8c, 0xf3, 0xa7, 0xcd, 0xa6, 0x8b, 0x4a, 0x37, 0xc9, 0x92, 0xa8, 0x12, 0xdb, - 0x66, 0xa7, 0x11, 0x5d, 0x55, 0x82, 0x59, 0xc7, 0xf3, 0x32, 0x35, 0xf1, 0xd8, 0xb3, 0xb6, 0x33, - 0x4d, 0x14, 0xe5, 0xc0, 0x3f, 0xad, 0x96, 0x03, 0x42, 0xe2, 0xb2, 0xa8, 0x62, 0x39, 0x2c, 0x02, - 0x69, 0x2f, 0xcb, 0x01, 0x4e, 0x08, 0xed, 0x81, 0x03, 0xbd, 0x20, 0xad, 0xe0, 0x02, 0x12, 0x02, - 0xd4, 0x72, 0x84, 0x23, 0x57, 0x84, 0xfc, 0xde, 0xe7, 0xb1, 0x3d, 0x63, 0xfb, 0x79, 0xda, 0x89, - 0x94, 0xd3, 0x64, 0x3c, 0xdf, 0x9f, 0xdf, 0xf7, 0x7b, 0xef, 0x7d, 0xef, 0xbd, 0x9f, 0x03, 0x72, - 0xdd, 0xb6, 0x1a, 0xd4, 0x54, 0x4d, 0x8d, 0x2a, 0x74, 0x47, 0x7b, 0xac, 0x9a, 0x55, 0xaa, 0x34, - 0x66, 0x94, 0xf7, 0xb7, 0xa9, 0xbd, 0x5b, 0xac, 0xdb, 0x96, 0x6b, 0x91, 0x33, 0x81, 0x4d, 0xd1, - 0xb7, 0x29, 0x36, 0x66, 0xf2, 0xa3, 0x9a, 0xe5, 0xd4, 0x2c, 0xa7, 0xcc, 0xac, 0x14, 0xfe, 0x85, - 0xbb, 0xe4, 0x27, 0xf9, 0x37, 0x65, 0x43, 0x75, 0x28, 0x8f, 0xa5, 0x34, 0x66, 0x36, 0xa8, 0xab, - 0xce, 0x28, 0x75, 0xb5, 0xaa, 0x9b, 0xaa, 0xab, 0x5b, 0x26, 0xda, 0x16, 0xc2, 0xb6, 0xbe, 0x95, - 0x66, 0xe9, 0xfe, 0xef, 0xe7, 0xaa, 0x96, 0x55, 0x35, 0xa8, 0xa2, 0xd6, 0x75, 0x45, 0x35, 0x4d, - 0xcb, 0x65, 0xce, 0x7e, 0xa6, 0x91, 0xaa, 0x55, 0xb5, 0x38, 0x02, 0xef, 0x2f, 0x7c, 0x3a, 0x91, - 0x50, 0x96, 0x66, 0xd5, 0x6a, 0xba, 0x5b, 0xa3, 0xa6, 0xeb, 0xfb, 0x5f, 0x4c, 0xb0, 0xac, 0xa9, - 0xf6, 0x16, 0x75, 0x05, 0x46, 0x96, 0x5d, 0xa1, 0xb6, 0x28, 0x52, 0x5d, 0xb5, 0xd5, 0x9a, 0x6f, - 0x74, 0x39, 0xd1, 0x68, 0x37, 0x8c, 0x6a, 0x2c, 0xc1, 0xcc, 0xdd, 0xe1, 0x06, 0xf2, 0x47, 0x12, - 0xe4, 0xde, 0xf1, 0x78, 0xbd, 0xef, 0x41, 0x58, 0xa1, 0x74, 0x59, 0x35, 0xb4, 0x12, 0x7d, 0x7f, - 0x9b, 0x3a, 0x2e, 0xb9, 0x0d, 0x83, 0xaa, 0xb3, 0x55, 0x66, 0xe8, 0x72, 0x3d, 0xe3, 0xd2, 0xc4, - 0xd0, 0xec, 0x78, 0x31, 0x7e, 0x10, 0x8b, 0x8b, 0xce, 0x16, 0x0b, 0x51, 0x1a, 0x50, 0xf1, 0x2f, - 0xcf, 0x7d, 0x43, 0xaf, 0xa0, 0x7b, 0x6f, 0xba, 0xfb, 0x92, 0x5e, 0x41, 0xf7, 0x0d, 0xfc, 0x4b, - 0xfe, 0x55, 0x0f, 0x8c, 0xc6, 0x40, 0x73, 0xea, 0x96, 0xe9, 0x50, 0xf2, 0x0e, 0x8c, 0x68, 0x36, - 0x65, 0x43, 0x58, 0xde, 0xa4, 0xb4, 0x6c, 0xd5, 0xd9, 0x68, 0xe6, 0xa4, 0xf1, 0xde, 0x89, 0xa1, - 0xd9, 0xd1, 0x22, 0x4e, 0x23, 0x6f, 0x32, 0x14, 0x71, 0x32, 0x14, 0x97, 0x2d, 0xdd, 0x5c, 0x3a, - 0xfa, 0xec, 0xef, 0x63, 0x47, 0x4a, 0xc4, 0x77, 0x5e, 0xa1, 0xf4, 0x3e, 0x77, 0x25, 0xdf, 0x84, - 0xb3, 0x0e, 0x75, 0x5d, 0x83, 0x7a, 0x0c, 0x96, 0x37, 0x0d, 0xd5, 0x8d, 0x44, 0xee, 0xc9, 0x16, - 0x39, 0x17, 0xc4, 0x58, 0x31, 0x54, 0x37, 0x14, 0xff, 0x3d, 0x38, 0x17, 0x8a, 0x6f, 0x7b, 0xe9, - 0x23, 0x09, 0x7a, 0xb3, 0x25, 0x18, 0x0d, 0x82, 0x94, 0xbc, 0x18, 0x41, 0x06, 0x79, 0x06, 0x46, - 0x18, 0x63, 0xab, 0xd4, 0xe5, 0x6c, 0xe2, 0x40, 0x8e, 0xc2, 0x00, 0x1b, 0x85, 0xb2, 0x5e, 0xc9, - 0x49, 0xe3, 0xd2, 0xc4, 0xd1, 0xd2, 0x31, 0xf6, 0xfd, 0x6e, 0x45, 0xfe, 0x1a, 0x9c, 0x6e, 0x71, - 0x41, 0x82, 0xe7, 0xa0, 0x8f, 0x8f, 0x9c, 0xc4, 0x46, 0xee, 0x7c, 0xd2, 0xc8, 0x71, 0x2f, 0x6e, - 0x2b, 0xbf, 0x07, 0xe3, 0x91, 0x68, 0x4b, 0xbb, 0x5f, 0xdd, 0x71, 0xa9, 0x6d, 0xaa, 0xc6, 0xdd, - 0xb7, 0x7c, 0x30, 0x67, 0x61, 0x90, 0x2f, 0x0a, 0x1f, 0xcd, 0x89, 0xd2, 0x00, 0x7f, 0x70, 0xb7, - 0x42, 0xc6, 0x60, 0x88, 0xa2, 0x87, 0xf7, 0xb3, 0x37, 0xe9, 0x06, 0x4b, 0xe0, 0x3f, 0xba, 0x5b, - 0x91, 0xdf, 0x85, 0x0b, 0x29, 0x19, 0x5e, 0x05, 0xfb, 0x1f, 0x24, 0x38, 0xeb, 0x87, 0x7e, 0x9b, - 0xe1, 0x61, 0x3f, 0x3b, 0x99, 0x70, 0x9f, 0x07, 0xe0, 0x0c, 0xbb, 0xbb, 0x75, 0x8a, 0xb0, 0x07, - 0xd9, 0x93, 0xf5, 0xdd, 0x3a, 0x25, 0x97, 0x60, 0x58, 0xdd, 0x74, 0xa9, 0x5d, 0x6e, 0x0e, 0x43, - 0x2f, 0x1b, 0x86, 0xe3, 0xec, 0xe9, 0x7d, 0x3e, 0x16, 0x64, 0x05, 0x20, 0xe8, 0x6a, 0x39, 0x8d, - 0x61, 0xbf, 0x12, 0x99, 0x0e, 0xbc, 0x9d, 0xfa, 0x93, 0x62, 0x4d, 0xad, 0x52, 0x44, 0x57, 0x0a, - 0x79, 0xca, 0x1f, 0x4b, 0x70, 0x2e, 0xbe, 0x12, 0xe4, 0xe7, 0x26, 0xf4, 0xf3, 0x96, 0x83, 0xcb, - 0x45, 0x40, 0x10, 0x1a, 0x93, 0xd5, 0x18, 0x7c, 0x57, 0x85, 0xf8, 0x78, 0xce, 0x08, 0xc0, 0xbf, - 0x4a, 0x90, 0x6f, 0x8e, 0xe2, 0x13, 0x13, 0x19, 0x68, 0x32, 0x5d, 0x84, 0x3e, 0xcb, 0x7b, 0xca, - 0x58, 0x1e, 0x5c, 0xca, 0xfd, 0xe9, 0xd7, 0x53, 0x23, 0x98, 0x65, 0xb1, 0x52, 0xb1, 0xa9, 0xe3, - 0x3c, 0x70, 0x6d, 0xdd, 0xac, 0x96, 0xb8, 0xd9, 0xe1, 0x22, 0xff, 0xa7, 0xa1, 0x69, 0x14, 0xa9, - 0xed, 0x90, 0x70, 0xff, 0x79, 0x88, 0xfb, 0x45, 0xc7, 0x69, 0x9d, 0xe5, 0x23, 0xd0, 0xa7, 0x7a, - 0x4f, 0x39, 0xf7, 0x25, 0xfe, 0xe5, 0xf0, 0x32, 0x1c, 0xa9, 0xe0, 0x90, 0x30, 0xbc, 0x81, 0x5b, - 0xaa, 0x07, 0xcf, 0x30, 0xa2, 0xf4, 0x76, 0x8b, 0x83, 0xa7, 0x12, 0x6e, 0x8e, 0xd1, 0x24, 0x87, - 0x84, 0x01, 0x23, 0x00, 0xb7, 0xdc, 0x3c, 0x29, 0xf9, 0x14, 0xcc, 0xc2, 0x31, 0x55, 0xd3, 0xac, - 0x6d, 0xd3, 0x15, 0xae, 0x6f, 0xdf, 0x30, 0xda, 0x7b, 0x7b, 0xa2, 0xbd, 0x57, 0xfe, 0x76, 0x68, - 0x46, 0x87, 0xd3, 0x21, 0x19, 0x1a, 0xf4, 0xab, 0x35, 0x4c, 0x27, 0xd8, 0x60, 0xa7, 0xbd, 0x0d, - 0xf6, 0xd3, 0x7f, 0x8c, 0x4d, 0x54, 0x75, 0xf7, 0xf1, 0xf6, 0x46, 0x51, 0xb3, 0x6a, 0x78, 0x1e, - 0xc5, 0x8f, 0x29, 0xa7, 0xb2, 0xa5, 0x78, 0x6b, 0xc0, 0x61, 0x0e, 0x4e, 0x09, 0x43, 0xcb, 0x0f, - 0x83, 0x6d, 0x69, 0x91, 0x63, 0x0e, 0x90, 0x38, 0xaf, 0x50, 0xb9, 0x6c, 0x80, 0x9c, 0x16, 0x18, - 0x6b, 0x5c, 0x81, 0xa1, 0xd0, 0x91, 0x14, 0x0b, 0xbd, 0x94, 0x34, 0xea, 0x7c, 0x4f, 0x58, 0x64, - 0xc8, 0x4b, 0x61, 0x47, 0xf9, 0x03, 0x29, 0xd8, 0xc0, 0xb9, 0x55, 0x4c, 0x19, 0xa9, 0x1b, 0x61, - 0xb7, 0x26, 0xf8, 0x6f, 0xa4, 0x80, 0xd1, 0x18, 0x24, 0x58, 0xf7, 0x6a, 0x5c, 0xdd, 0x97, 0x13, - 0xcf, 0xa8, 0x9c, 0xc0, 0x98, 0xc2, 0xbb, 0x37, 0xf5, 0xab, 0x70, 0x3e, 0xb4, 0x2e, 0x63, 0xd8, - 0xeb, 0x16, 0x41, 0x9f, 0x49, 0x50, 0x48, 0xca, 0x84, 0xec, 0xbc, 0x15, 0xc7, 0x8e, 0x9c, 0xc4, - 0x4e, 0x68, 0xe9, 0x1c, 0x0c, 0x35, 0x37, 0x82, 0xa3, 0x26, 0x1f, 0xd1, 0x2c, 0x13, 0x4a, 0xfe, - 0x9e, 0x04, 0x67, 0x5a, 0xdd, 0xb0, 0x3e, 0x6f, 0x3d, 0xf1, 0x55, 0x93, 0x61, 0x3d, 0xf1, 0xaf, - 0x64, 0x1e, 0xfa, 0x79, 0x68, 0xbc, 0xd0, 0x14, 0xd2, 0x17, 0x49, 0x09, 0xad, 0x65, 0x2d, 0xd2, - 0x6f, 0xf9, 0x8f, 0x5d, 0x1f, 0xd3, 0x9f, 0x87, 0xf7, 0xe6, 0x50, 0x16, 0xac, 0xf7, 0x36, 0x1c, - 0xe3, 0x68, 0xfc, 0xb1, 0xbc, 0x98, 0x0e, 0x7e, 0xc9, 0xd6, 0xe9, 0x66, 0xc9, 0xf7, 0xe9, 0xde, - 0x40, 0x8e, 0x00, 0x61, 0x28, 0xd7, 0xd8, 0x8d, 0x14, 0x0b, 0x91, 0xdf, 0x86, 0x53, 0x91, 0xa7, - 0x08, 0x7a, 0x1e, 0xfa, 0xf9, 0xcd, 0x15, 0x0f, 0xe3, 0x89, 0x84, 0xa3, 0x1f, 0x5a, 0xcb, 0xbf, - 0x93, 0xe0, 0x2a, 0x8b, 0x17, 0xcc, 0xcb, 0x07, 0xc1, 0xcd, 0x2a, 0x7a, 0x51, 0x7d, 0x17, 0x20, - 0xb8, 0x14, 0x61, 0x9e, 0x85, 0x44, 0x6e, 0x9c, 0x6a, 0x6b, 0x43, 0xe1, 0x81, 0x9b, 0x23, 0x12, - 0xc4, 0x22, 0x0b, 0x90, 0xd3, 0x4d, 0xcd, 0xd8, 0xae, 0xd0, 0xf2, 0x86, 0x4d, 0xd5, 0xad, 0x8a, - 0xf5, 0xc4, 0x2c, 0x6f, 0xea, 0xd4, 0xa8, 0x38, 0x6c, 0x02, 0x0d, 0x94, 0xce, 0xe0, 0xef, 0x4b, - 0xfe, 0xcf, 0x2b, 0xec, 0x57, 0xf9, 0xe9, 0x51, 0x98, 0x10, 0xe3, 0x47, 0x92, 0xea, 0x70, 0xc2, - 0x87, 0xe8, 0x5d, 0x09, 0x9d, 0x83, 0xd8, 0xaa, 0x8e, 0xfb, 0x19, 0x56, 0x28, 0x75, 0x88, 0x01, - 0x43, 0xba, 0x59, 0xdf, 0x76, 0xcb, 0xae, 0xe5, 0xaa, 0x86, 0xf8, 0x72, 0xdb, 0x79, 0x3e, 0x60, - 0xf1, 0xd7, 0xbd, 0xf0, 0xc4, 0x85, 0x93, 0x9a, 0x65, 0x36, 0xa8, 0xed, 0xd2, 0x0a, 0x66, 0xec, - 0xed, 0x7e, 0xc6, 0xe1, 0x66, 0x0e, 0x9e, 0x75, 0xdd, 0xcf, 0xea, 0xe8, 0x96, 0x59, 0x36, 0xd5, - 0x86, 0x93, 0x3b, 0x9a, 0xbe, 0x43, 0xdc, 0xc3, 0x13, 0xe5, 0x9a, 0xad, 0x6b, 0x14, 0xef, 0xdb, - 0xc3, 0x41, 0x8c, 0x7b, 0x6a, 0xc3, 0x21, 0xcb, 0x00, 0x2e, 0xbf, 0xb8, 0x9b, 0x6a, 0x23, 0xd7, - 0xc7, 0x26, 0x5b, 0xb6, 0x80, 0xa5, 0x01, 0xd7, 0xbb, 0xad, 0xdf, 0x53, 0x1b, 0xf2, 0x87, 0xfe, - 0x46, 0xfb, 0x75, 0xd5, 0xd0, 0x2b, 0xaa, 0x4b, 0x97, 0x6d, 0xaa, 0xba, 0x34, 0xda, 0x17, 0x29, - 0x9c, 0x66, 0x32, 0x05, 0x2d, 0x63, 0x7b, 0xb4, 0xf9, 0x0f, 0x38, 0xc3, 0x67, 0x52, 0x66, 0xf8, - 0xaa, 0xd5, 0x88, 0x89, 0x58, 0x3a, 0xa5, 0xb5, 0x3f, 0x94, 0x37, 0x71, 0xa7, 0x8d, 0x87, 0x82, - 0x33, 0x74, 0x04, 0xfa, 0xa8, 0x6d, 0x5b, 0xb6, 0x7f, 0x2f, 0x60, 0x5f, 0xc8, 0x35, 0x20, 0x55, - 0xab, 0x51, 0xae, 0xdb, 0x56, 0xbd, 0xfc, 0x44, 0x37, 0x8c, 0x72, 0x5d, 0x75, 0xfc, 0x85, 0x71, - 0xb2, 0x6a, 0x35, 0xd6, 0x6c, 0xab, 0xfe, 0x50, 0x37, 0x8c, 0x35, 0xd5, 0x71, 0xe4, 0x5b, 0xd8, - 0xdc, 0xfc, 0x3c, 0x1d, 0x6c, 0x02, 0x73, 0x78, 0xe2, 0x6f, 0x75, 0x4d, 0x03, 0xe7, 0x9d, 0x0b, - 0x0b, 0x2d, 0x5e, 0xa6, 0xca, 0xa7, 0xbf, 0x9f, 0xb4, 0x0c, 0xa7, 0x6a, 0xec, 0x21, 0x5b, 0x75, - 0x2d, 0xfc, 0x2a, 0xe9, 0xfc, 0xb6, 0x45, 0x2b, 0xbd, 0x56, 0x6b, 0x7d, 0x24, 0x57, 0x60, 0x2c, - 0x11, 0x42, 0xf7, 0x98, 0xdd, 0x0a, 0xb6, 0xc8, 0x35, 0x2e, 0x00, 0xfa, 0x05, 0x4e, 0x43, 0xbf, - 0x63, 0x6d, 0xdb, 0x1a, 0x15, 0xee, 0x90, 0x68, 0x27, 0x56, 0x60, 0xd6, 0xe1, 0x4b, 0x6d, 0xc9, - 0xb0, 0x94, 0x5b, 0x70, 0x0c, 0x05, 0x48, 0xa4, 0x70, 0x2c, 0xb9, 0xd9, 0x73, 0x4f, 0xdf, 0xde, - 0xbb, 0xd4, 0x5d, 0x68, 0x09, 0xeb, 0x3c, 0xd4, 0xdd, 0xc7, 0x0f, 0x18, 0xaa, 0x97, 0x2f, 0xa7, - 0x5b, 0x5b, 0xf3, 0xa7, 0x52, 0x70, 0x10, 0x8f, 0xc3, 0x87, 0x0c, 0x7c, 0x19, 0x06, 0x7c, 0x09, - 0x16, 0x7b, 0xb8, 0x90, 0x82, 0xa6, 0x43, 0xf7, 0x36, 0xe8, 0x24, 0x32, 0xd7, 0x55, 0xbb, 0x4a, - 0xc3, 0x73, 0xc3, 0x65, 0x0f, 0xc4, 0x64, 0x72, 0xbb, 0x03, 0x27, 0xd3, 0xc7, 0x77, 0xa8, 0xc8, - 0xac, 0x44, 0xce, 0x64, 0x3e, 0xdc, 0x6e, 0x1f, 0xfd, 0x3e, 0x09, 0x8b, 0x1a, 0xe1, 0x34, 0x87, - 0x8a, 0x8b, 0x6f, 0x20, 0x17, 0x98, 0xa2, 0xe5, 0x18, 0x76, 0xa7, 0xd3, 0xe5, 0x8f, 0x3b, 0x6c, - 0xb3, 0x09, 0xfc, 0xd7, 0x27, 0xa1, 0x35, 0x3e, 0x92, 0xf0, 0x2d, 0x00, 0x6f, 0xdf, 0xe5, 0x9b, - 0xd8, 0x41, 0x9c, 0x91, 0x06, 0x37, 0x29, 0x6e, 0x7f, 0x7e, 0x2e, 0x55, 0xd3, 0x68, 0xdd, 0x3d, - 0x88, 0xf3, 0x91, 0x97, 0x6b, 0x91, 0x45, 0x9f, 0xfd, 0xc5, 0x45, 0xe8, 0x63, 0x75, 0x93, 0x9f, - 0x49, 0x70, 0x3c, 0xfc, 0xbe, 0x83, 0x4c, 0x27, 0x51, 0x98, 0xf4, 0xd6, 0x26, 0x3f, 0xd3, 0x81, - 0x07, 0xe7, 0x55, 0x9e, 0xfc, 0xce, 0x9f, 0xff, 0xf5, 0xe3, 0x9e, 0x4b, 0x44, 0x56, 0x12, 0xde, - 0x17, 0x79, 0xbb, 0x23, 0x7f, 0x4b, 0x45, 0x7e, 0x22, 0xc1, 0x80, 0x2f, 0xbe, 0x93, 0xeb, 0xa9, - 0xb9, 0x5a, 0x5e, 0x43, 0xe4, 0xa7, 0x32, 0x5a, 0x23, 0xaa, 0x69, 0x86, 0x6a, 0x92, 0x4c, 0x28, - 0x69, 0xaf, 0xcd, 0x94, 0x3d, 0x5f, 0x74, 0xdc, 0x27, 0x1f, 0xf5, 0xc0, 0x48, 0xdc, 0x8b, 0x01, - 0xb2, 0x90, 0x29, 0x73, 0xcc, 0xdb, 0x8a, 0xfc, 0xad, 0x97, 0xf0, 0x44, 0xfc, 0x3f, 0x90, 0x58, - 0x01, 0xdf, 0x95, 0xc8, 0x9d, 0xd4, 0x0a, 0x1c, 0x7c, 0x49, 0xa8, 0xec, 0x35, 0x0f, 0x40, 0xfb, - 0xca, 0x5e, 0x68, 0x13, 0xde, 0x7f, 0xf4, 0x26, 0xf9, 0x8a, 0x92, 0xfa, 0x82, 0x31, 0xe2, 0x8b, - 0xbc, 0x84, 0x23, 0x90, 0x7f, 0x4b, 0x70, 0xb2, 0xe5, 0x75, 0x00, 0x99, 0x13, 0xd5, 0x16, 0xf3, - 0x1a, 0x24, 0x7f, 0xa3, 0x33, 0x27, 0xe4, 0xc2, 0x64, 0x54, 0x3c, 0x26, 0x33, 0x1d, 0x33, 0xf1, - 0x68, 0x2e, 0xd9, 0x29, 0xa9, 0x76, 0x87, 0x7c, 0x26, 0xc1, 0x70, 0x54, 0x80, 0x27, 0xb3, 0xc2, - 0x91, 0x6c, 0x7b, 0x13, 0x91, 0x9f, 0xeb, 0xc8, 0x07, 0x6b, 0xbd, 0xc1, 0x6a, 0x2d, 0x92, 0xeb, - 0x82, 0x5a, 0xd9, 0xcb, 0x0b, 0x65, 0x8f, 0x7d, 0xec, 0xfb, 0x88, 0x43, 0x82, 0xb6, 0x18, 0x71, - 0xbb, 0x7e, 0x2f, 0x46, 0x1c, 0xa3, 0x98, 0x67, 0x46, 0xcc, 0x5e, 0x06, 0x28, 0x7b, 0xec, 0x63, - 0x9f, 0x3c, 0x95, 0xe0, 0x78, 0x58, 0x7e, 0x16, 0xf4, 0xaa, 0x18, 0x39, 0x5c, 0xd0, 0xab, 0xe2, - 0xb4, 0x6d, 0xf9, 0x0a, 0xc3, 0x3a, 0x4e, 0x0a, 0xe9, 0x58, 0xc9, 0xe7, 0x12, 0x9c, 0x88, 0x08, - 0xc2, 0x44, 0x98, 0xac, 0x4d, 0xab, 0xce, 0xcf, 0x76, 0xe2, 0x82, 0x00, 0x57, 0x19, 0xc0, 0xc5, - 0xe4, 0x45, 0x1f, 0x33, 0x6b, 0x03, 0xbd, 0x4d, 0xd9, 0x43, 0xe5, 0x77, 0x9f, 0xfc, 0x51, 0x82, - 0xd3, 0xb1, 0xb2, 0x2f, 0x11, 0x36, 0xa5, 0x44, 0x0d, 0x3a, 0xff, 0xc6, 0xcb, 0xb8, 0x62, 0x65, - 0xb7, 0x59, 0x65, 0xaf, 0x93, 0x9b, 0x8a, 0xf8, 0xdf, 0x22, 0x14, 0x2c, 0x23, 0x54, 0xcf, 0xf7, - 0x79, 0x77, 0x6e, 0x53, 0x73, 0xc5, 0xdd, 0x39, 0x49, 0x8a, 0x16, 0x77, 0xe7, 0x44, 0xe9, 0x58, - 0xde, 0x61, 0xc5, 0xd8, 0x64, 0x3e, 0x4b, 0x31, 0x31, 0x6d, 0x69, 0x21, 0xd9, 0x33, 0x75, 0x80, - 0x59, 0x6f, 0x7a, 0xad, 0x4d, 0xb4, 0x25, 0x37, 0x33, 0x2c, 0x85, 0x18, 0x06, 0xe6, 0x3b, 0x75, - 0xc3, 0xf2, 0xaf, 0xb1, 0xf2, 0x2f, 0x93, 0x8b, 0x19, 0xca, 0x27, 0x1f, 0x4b, 0x30, 0xd8, 0x24, - 0x93, 0x4c, 0x65, 0x23, 0xdd, 0x47, 0x58, 0xcc, 0x6a, 0x8e, 0xc8, 0x66, 0x19, 0xb2, 0xeb, 0x64, - 0x32, 0x3b, 0xbd, 0xde, 0xb1, 0xe9, 0x44, 0x44, 0x33, 0x25, 0x59, 0x3a, 0x4b, 0x54, 0xc5, 0x15, - 0x2f, 0xf6, 0x76, 0x49, 0x56, 0xbe, 0xca, 0xc0, 0x5e, 0x20, 0x63, 0xe9, 0x60, 0x1d, 0xf2, 0xa1, - 0x04, 0xfd, 0x5c, 0xe1, 0x24, 0x93, 0xa9, 0x79, 0x22, 0xa2, 0x6a, 0xfe, 0x5a, 0x26, 0xdb, 0xac, - 0xad, 0x91, 0x4b, 0xab, 0xe4, 0x6f, 0x12, 0x9c, 0x4d, 0x51, 0x25, 0xc9, 0x9d, 0xd4, 0xa4, 0x62, - 0x3d, 0x36, 0xff, 0xe6, 0xcb, 0x07, 0xc0, 0x52, 0xde, 0x60, 0xa5, 0xdc, 0x20, 0xb3, 0xa9, 0x27, - 0xd2, 0x60, 0x8e, 0x96, 0x43, 0x9a, 0xed, 0xef, 0x25, 0x18, 0x89, 0xd3, 0xb2, 0x04, 0x7d, 0x26, - 0x45, 0x89, 0x13, 0xf4, 0x99, 0x34, 0xe1, 0x4c, 0x9e, 0x67, 0x95, 0x4c, 0x93, 0x62, 0x52, 0x25, - 0x0d, 0xf4, 0x56, 0x22, 0x5a, 0x1f, 0xf9, 0x8f, 0x04, 0xc3, 0x51, 0xb9, 0x4b, 0x70, 0x1e, 0x88, - 0x95, 0xd5, 0x04, 0xe7, 0x81, 0x78, 0x3d, 0x4d, 0xb6, 0x19, 0x66, 0x83, 0xcc, 0x09, 0x31, 0xc7, - 0x34, 0xc6, 0x9b, 0xc9, 0x6e, 0x31, 0x8d, 0xd1, 0x8f, 0x44, 0x7e, 0x2b, 0x01, 0x69, 0x57, 0xc9, - 0xc8, 0x7c, 0x46, 0xfc, 0x2d, 0xc2, 0x5b, 0xfe, 0xf5, 0x8e, 0xfd, 0xb2, 0x9e, 0x85, 0x42, 0xb5, - 0x37, 0x95, 0x43, 0xf2, 0x3f, 0x09, 0x20, 0x10, 0x33, 0x88, 0xb0, 0xe7, 0x45, 0x65, 0xba, 0xbc, - 0x92, 0xd9, 0x1e, 0x51, 0xfe, 0x90, 0xdf, 0x2d, 0x3e, 0x90, 0x92, 0x3b, 0x0f, 0x5e, 0xaa, 0x1f, - 0xa5, 0x5c, 0xa0, 0xd0, 0x44, 0xd9, 0xe3, 0x62, 0x59, 0xea, 0xa6, 0xd6, 0x6a, 0xdb, 0x72, 0xbf, - 0x78, 0xc6, 0x0f, 0x2b, 0xed, 0xd2, 0x98, 0xf8, 0xb0, 0x92, 0x28, 0xf7, 0x89, 0x0f, 0x2b, 0xc9, - 0x4a, 0x9c, 0xbc, 0xc0, 0x08, 0x9a, 0x25, 0xd3, 0x82, 0x82, 0x1c, 0x85, 0x17, 0xd4, 0x2c, 0x2c, - 0xae, 0x14, 0x2e, 0x4c, 0x75, 0x56, 0x4a, 0x44, 0x6c, 0xeb, 0xac, 0x94, 0xa8, 0x0e, 0xd6, 0x41, - 0x29, 0x5c, 0xa7, 0x53, 0xf6, 0xf8, 0xe7, 0x3e, 0xf9, 0x04, 0x2f, 0x15, 0x81, 0xa0, 0x44, 0xb2, - 0xec, 0x72, 0x2d, 0x22, 0x57, 0x86, 0x4b, 0x45, 0xbb, 0x62, 0x25, 0x4f, 0x30, 0xd4, 0x32, 0x19, - 0x17, 0xa1, 0x26, 0xbf, 0x94, 0x60, 0x38, 0xaa, 0xf8, 0x08, 0x50, 0xc6, 0xca, 0x4f, 0x02, 0x94, - 0xf1, 0x92, 0x92, 0x7c, 0x9d, 0xa1, 0xbc, 0x42, 0x2e, 0xa5, 0x6e, 0x34, 0x08, 0x75, 0x89, 0x3e, - 0x7b, 0x5e, 0x90, 0xbe, 0x78, 0x5e, 0x90, 0xfe, 0xf9, 0xbc, 0x20, 0xfd, 0xe8, 0x45, 0xe1, 0xc8, - 0x17, 0x2f, 0x0a, 0x47, 0xfe, 0xf2, 0xa2, 0x70, 0x04, 0x46, 0x75, 0x2b, 0x21, 0xfd, 0x9a, 0xf4, - 0xa8, 0x18, 0x12, 0x85, 0x02, 0xa3, 0x29, 0xdd, 0x0a, 0x27, 0xdd, 0x69, 0xa6, 0xdd, 0xe8, 0x67, - 0xff, 0x9c, 0x3b, 0xf7, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x05, 0x86, 0x65, 0x4c, 0x56, 0x2d, - 0x00, 0x00, + // 2379 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0x4d, 0x6c, 0xdc, 0x58, + 0x1d, 0xaf, 0xd3, 0x26, 0x4d, 0xfe, 0x69, 0xb3, 0xda, 0xd7, 0xb4, 0x4c, 0xa6, 0xed, 0x24, 0x75, + 0xbf, 0xa2, 0xb4, 0x19, 0xe7, 0xa3, 0xcd, 0xa6, 0x8b, 0x4a, 0x37, 0xc9, 0x92, 0xa8, 0x12, 0xdb, + 0x66, 0xa7, 0x11, 0x5d, 0x45, 0x82, 0x59, 0xc7, 0xf3, 0x32, 0x35, 0xf1, 0xd8, 0xb3, 0xb6, 0x33, + 0x4d, 0x14, 0xe5, 0xc0, 0x97, 0x56, 0xcb, 0x01, 0x21, 0x71, 0x59, 0x54, 0xb1, 0x1c, 0x16, 0x81, + 0xb4, 0x97, 0xe5, 0x00, 0x27, 0x84, 0xf6, 0xc0, 0x81, 0x5e, 0x90, 0x56, 0x70, 0x01, 0x09, 0x01, + 0x6a, 0x39, 0xc2, 0x91, 0x2b, 0x42, 0x7e, 0xef, 0xef, 0xb1, 0x3d, 0x63, 0xfb, 0x79, 0xb2, 0x13, + 0x29, 0xa7, 0x89, 0xed, 0xff, 0xc7, 0xef, 0xff, 0x7b, 0xdf, 0xbf, 0x17, 0x90, 0xeb, 0xb6, 0xd5, + 0xa0, 0xa6, 0x6a, 0x6a, 0x54, 0xa1, 0x3b, 0xda, 0x13, 0xd5, 0xac, 0x52, 0xa5, 0x31, 0xad, 0xbc, + 0xb7, 0x4d, 0xed, 0xdd, 0x62, 0xdd, 0xb6, 0x5c, 0x8b, 0x9c, 0x0b, 0x6c, 0x8a, 0xbe, 0x4d, 0xb1, + 0x31, 0x9d, 0x1f, 0xd1, 0x2c, 0xa7, 0x66, 0x39, 0x65, 0x66, 0xa5, 0xf0, 0x07, 0xee, 0x92, 0x9f, + 0xe0, 0x4f, 0xca, 0x86, 0xea, 0x50, 0x1e, 0x4b, 0x69, 0x4c, 0x6f, 0x50, 0x57, 0x9d, 0x56, 0xea, + 0x6a, 0x55, 0x37, 0x55, 0x57, 0xb7, 0x4c, 0xb4, 0x2d, 0x84, 0x6d, 0x7d, 0x2b, 0xcd, 0xd2, 0xfd, + 0xef, 0x17, 0xaa, 0x96, 0x55, 0x35, 0xa8, 0xa2, 0xd6, 0x75, 0x45, 0x35, 0x4d, 0xcb, 0x65, 0xce, + 0x7e, 0xa6, 0xe1, 0xaa, 0x55, 0xb5, 0x38, 0x02, 0xef, 0x2f, 0x7c, 0x3b, 0x9e, 0x50, 0x96, 0x66, + 0xd5, 0x6a, 0xba, 0x5b, 0xa3, 0xa6, 0xeb, 0xfb, 0x5f, 0x4e, 0xb0, 0xac, 0xa9, 0xf6, 0x16, 0x75, + 0x05, 0x46, 0x96, 0x5d, 0xa1, 0xb6, 0x28, 0x52, 0x5d, 0xb5, 0xd5, 0x9a, 0x6f, 0x74, 0x35, 0xd1, + 0x68, 0x37, 0x8c, 0x6a, 0x34, 0xc1, 0xcc, 0xdd, 0xe1, 0x06, 0xf2, 0x87, 0x12, 0xe4, 0xde, 0xf6, + 0x78, 0x7d, 0xe8, 0x41, 0x58, 0xa6, 0x74, 0x49, 0x35, 0xb4, 0x12, 0x7d, 0x6f, 0x9b, 0x3a, 0x2e, + 0xb9, 0x0b, 0x03, 0xaa, 0xb3, 0x55, 0x66, 0xe8, 0x72, 0x3d, 0x63, 0xd2, 0xf8, 0xe0, 0xcc, 0x58, + 0x31, 0xbe, 0x11, 0x8b, 0x0b, 0xce, 0x16, 0x0b, 0x51, 0xea, 0x57, 0xf1, 0x2f, 0xcf, 0x7d, 0x43, + 0xaf, 0xa0, 0xfb, 0xf1, 0x74, 0xf7, 0x45, 0xbd, 0x82, 0xee, 0x1b, 0xf8, 0x97, 0xfc, 0xab, 0x1e, + 0x18, 0x89, 0x81, 0xe6, 0xd4, 0x2d, 0xd3, 0xa1, 0xe4, 0x6d, 0x18, 0xd6, 0x6c, 0xca, 0x9a, 0xb0, + 0xbc, 0x49, 0x69, 0xd9, 0xaa, 0xb3, 0xd6, 0xcc, 0x49, 0x63, 0xc7, 0xc7, 0x07, 0x67, 0x46, 0x8a, + 0xd8, 0x8d, 0xbc, 0xce, 0x50, 0xc4, 0xce, 0x50, 0x5c, 0xb2, 0x74, 0x73, 0xf1, 0xc4, 0xf3, 0xbf, + 0x8f, 0x1e, 0x2b, 0x11, 0xdf, 0x79, 0x99, 0xd2, 0x87, 0xdc, 0x95, 0x7c, 0x13, 0xce, 0x3b, 0xd4, + 0x75, 0x0d, 0xea, 0x31, 0x58, 0xde, 0x34, 0x54, 0x37, 0x12, 0xb9, 0x27, 0x5b, 0xe4, 0x5c, 0x10, + 0x63, 0xd9, 0x50, 0xdd, 0x50, 0xfc, 0x77, 0xe1, 0x42, 0x28, 0xbe, 0xed, 0xa5, 0x8f, 0x24, 0x38, + 0x9e, 0x2d, 0xc1, 0x48, 0x10, 0xa4, 0xe4, 0xc5, 0x08, 0x32, 0xc8, 0xd3, 0x30, 0xcc, 0x18, 0x5b, + 0xa1, 0x2e, 0x67, 0x13, 0x1b, 0x72, 0x04, 0xfa, 0x59, 0x2b, 0x94, 0xf5, 0x4a, 0x4e, 0x1a, 0x93, + 0xc6, 0x4f, 0x94, 0x4e, 0xb2, 0xe7, 0xfb, 0x15, 0xf9, 0x6b, 0x70, 0xb6, 0xc5, 0x05, 0x09, 0x9e, + 0x85, 0x5e, 0xde, 0x72, 0x12, 0x6b, 0xb9, 0x8b, 0x49, 0x2d, 0xc7, 0xbd, 0xb8, 0xad, 0xfc, 0x2e, + 0x8c, 0x45, 0xa2, 0x2d, 0xee, 0x7e, 0x75, 0xc7, 0xa5, 0xb6, 0xa9, 0x1a, 0xf7, 0xdf, 0xf4, 0xc1, + 0x9c, 0x87, 0x01, 0x3e, 0x28, 0x7c, 0x34, 0xa7, 0x4b, 0xfd, 0xfc, 0xc5, 0xfd, 0x0a, 0x19, 0x85, + 0x41, 0x8a, 0x1e, 0xde, 0x67, 0xaf, 0xd3, 0x0d, 0x94, 0xc0, 0x7f, 0x75, 0xbf, 0x22, 0xbf, 0x03, + 0x97, 0x52, 0x32, 0x7c, 0x11, 0xec, 0x7f, 0x90, 0xe0, 0xbc, 0x1f, 0xfa, 0x2d, 0x86, 0x87, 0x7d, + 0x76, 0x32, 0xe1, 0xbe, 0x08, 0xc0, 0x19, 0x76, 0x77, 0xeb, 0x14, 0x61, 0x0f, 0xb0, 0x37, 0x6b, + 0xbb, 0x75, 0x4a, 0xae, 0xc0, 0x90, 0xba, 0xe9, 0x52, 0xbb, 0xdc, 0x6c, 0x86, 0xe3, 0xac, 0x19, + 0x4e, 0xb1, 0xb7, 0x0f, 0x79, 0x5b, 0x90, 0x65, 0x80, 0x60, 0x56, 0xcb, 0x69, 0x0c, 0xfb, 0xb5, + 0x48, 0x77, 0xe0, 0xd3, 0xa9, 0xdf, 0x29, 0x56, 0xd5, 0x2a, 0x45, 0x74, 0xa5, 0x90, 0xa7, 0xfc, + 0x91, 0x04, 0x17, 0xe2, 0x2b, 0x41, 0x7e, 0x6e, 0x43, 0x1f, 0x9f, 0x72, 0x70, 0xb8, 0x08, 0x08, + 0x42, 0x63, 0xb2, 0x12, 0x83, 0xef, 0xba, 0x10, 0x1f, 0xcf, 0x19, 0x01, 0xf8, 0x57, 0x09, 0xf2, + 0xcd, 0x56, 0x7c, 0x6a, 0x22, 0x03, 0x4d, 0xa6, 0x8b, 0xd0, 0x6b, 0x79, 0x6f, 0x19, 0xcb, 0x03, + 0x8b, 0xb9, 0x3f, 0xfd, 0x7a, 0x72, 0x18, 0xb3, 0x2c, 0x54, 0x2a, 0x36, 0x75, 0x9c, 0x47, 0xae, + 0xad, 0x9b, 0xd5, 0x12, 0x37, 0x3b, 0x5a, 0xe4, 0xff, 0x34, 0xd4, 0x8d, 0x22, 0xb5, 0x1d, 0x11, + 0xee, 0x3f, 0x0b, 0x71, 0xbf, 0xe0, 0x38, 0xad, 0xbd, 0x7c, 0x18, 0x7a, 0x55, 0xef, 0x2d, 0xe7, + 0xbe, 0xc4, 0x1f, 0x8e, 0x2e, 0xc3, 0x91, 0x0a, 0x8e, 0x08, 0xc3, 0x1b, 0xb8, 0xa4, 0x7a, 0xf0, + 0x0c, 0x23, 0x4a, 0x6f, 0xb7, 0x38, 0x78, 0x26, 0xe1, 0xe2, 0x18, 0x4d, 0x72, 0x44, 0x18, 0x30, + 0x02, 0x70, 0x4b, 0xcd, 0x9d, 0x92, 0x4f, 0xc1, 0x0c, 0x9c, 0x54, 0x35, 0xcd, 0xda, 0x36, 0x5d, + 0xe1, 0xf8, 0xf6, 0x0d, 0xa3, 0x73, 0x6f, 0x4f, 0x74, 0xee, 0x95, 0xbf, 0x1d, 0xea, 0xd1, 0xe1, + 0x74, 0x48, 0x86, 0x06, 0x7d, 0x6a, 0x0d, 0xd3, 0x09, 0x16, 0xd8, 0x29, 0x6f, 0x81, 0xfd, 0xe4, + 0x1f, 0xa3, 0xe3, 0x55, 0xdd, 0x7d, 0xb2, 0xbd, 0x51, 0xd4, 0xac, 0x1a, 0xee, 0x47, 0xf1, 0x67, + 0xd2, 0xa9, 0x6c, 0x29, 0xde, 0x18, 0x70, 0x98, 0x83, 0x53, 0xc2, 0xd0, 0xf2, 0xe3, 0x60, 0x59, + 0x5a, 0xe0, 0x98, 0x03, 0x24, 0xce, 0x17, 0xa8, 0x5c, 0x36, 0x40, 0x4e, 0x0b, 0x8c, 0x35, 0x2e, + 0xc3, 0x60, 0x68, 0x4b, 0x8a, 0x85, 0x5e, 0x49, 0x6a, 0x75, 0xbe, 0x26, 0x2c, 0x30, 0xe4, 0xa5, + 0xb0, 0xa3, 0xfc, 0xbe, 0x14, 0x2c, 0xe0, 0xdc, 0x2a, 0xa6, 0x8c, 0xd4, 0x85, 0xb0, 0x5b, 0x1d, + 0xfc, 0x37, 0x52, 0xc0, 0x68, 0x0c, 0x12, 0xac, 0x7b, 0x25, 0xae, 0xee, 0xab, 0x89, 0x7b, 0x54, + 0x4e, 0x60, 0x4c, 0xe1, 0xdd, 0xeb, 0xfa, 0x55, 0xb8, 0x18, 0x1a, 0x97, 0x31, 0xec, 0x75, 0x8b, + 0xa0, 0x4f, 0x25, 0x28, 0x24, 0x65, 0x42, 0x76, 0xde, 0x8c, 0x63, 0x47, 0x4e, 0x62, 0x27, 0x34, + 0x74, 0x0e, 0x87, 0x9a, 0x5b, 0xc1, 0x56, 0x93, 0xb7, 0x68, 0x96, 0x0e, 0x25, 0x7f, 0x4f, 0x82, + 0x73, 0xad, 0x6e, 0x58, 0x9f, 0x37, 0x9e, 0xf8, 0xa8, 0xc9, 0x30, 0x9e, 0xf8, 0x23, 0x99, 0x83, + 0x3e, 0x1e, 0x1a, 0x0f, 0x34, 0x85, 0xf4, 0x41, 0x52, 0x42, 0x6b, 0x59, 0x8b, 0xcc, 0xb7, 0xfc, + 0x63, 0xd7, 0xdb, 0xf4, 0xe7, 0xe1, 0xb5, 0x39, 0x94, 0x05, 0xeb, 0xbd, 0x0b, 0x27, 0x39, 0x1a, + 0xbf, 0x2d, 0x2f, 0xa7, 0x83, 0x5f, 0xb4, 0x75, 0xba, 0x59, 0xf2, 0x7d, 0xba, 0xd7, 0x90, 0xc3, + 0x40, 0x18, 0xca, 0x55, 0x76, 0x22, 0xc5, 0x42, 0xe4, 0xb7, 0xe0, 0x4c, 0xe4, 0x2d, 0x82, 0x9e, + 0x83, 0x3e, 0x7e, 0x72, 0xc5, 0xcd, 0x78, 0x22, 0xe1, 0xe8, 0x87, 0xd6, 0xf2, 0xef, 0x24, 0xb8, + 0xce, 0xe2, 0x05, 0xfd, 0xf2, 0x51, 0x70, 0xb2, 0x8a, 0x1e, 0x54, 0xdf, 0x01, 0x08, 0x0e, 0x45, + 0x98, 0x67, 0x3e, 0x91, 0x1b, 0xa7, 0xda, 0x3a, 0xa1, 0xf0, 0xc0, 0xcd, 0x16, 0x09, 0x62, 0x91, + 0x79, 0xc8, 0xe9, 0xa6, 0x66, 0x6c, 0x57, 0x68, 0x79, 0xc3, 0xa6, 0xea, 0x56, 0xc5, 0x7a, 0x6a, + 0x96, 0x37, 0x75, 0x6a, 0x54, 0x1c, 0xd6, 0x81, 0xfa, 0x4b, 0xe7, 0xf0, 0xfb, 0xa2, 0xff, 0x79, + 0x99, 0x7d, 0x95, 0x9f, 0x9d, 0x80, 0x71, 0x31, 0x7e, 0x24, 0xa9, 0x0e, 0xa7, 0x7d, 0x88, 0xde, + 0x91, 0xd0, 0x39, 0x8c, 0xa5, 0xea, 0x94, 0x9f, 0x61, 0x99, 0x52, 0x87, 0x18, 0x30, 0xa8, 0x9b, + 0xf5, 0x6d, 0xb7, 0xec, 0x5a, 0xae, 0x6a, 0x88, 0x0f, 0xb7, 0x9d, 0xe7, 0x03, 0x16, 0x7f, 0xcd, + 0x0b, 0x4f, 0x5c, 0x78, 0x45, 0xb3, 0xcc, 0x06, 0xb5, 0x5d, 0x5a, 0xc1, 0x8c, 0xc7, 0xbb, 0x9f, + 0x71, 0xa8, 0x99, 0x83, 0x67, 0x5d, 0xf3, 0xb3, 0x3a, 0xba, 0x65, 0x96, 0x4d, 0xb5, 0xe1, 0xe4, + 0x4e, 0xa4, 0xaf, 0x10, 0x0f, 0x70, 0x47, 0xb9, 0x6a, 0xeb, 0x1a, 0xc5, 0xf3, 0xf6, 0x50, 0x10, + 0xe3, 0x81, 0xda, 0x70, 0xc8, 0x12, 0x80, 0xcb, 0x0f, 0xee, 0xa6, 0xda, 0xc8, 0xf5, 0xb2, 0xce, + 0x96, 0x2d, 0x60, 0xa9, 0xdf, 0xf5, 0x4e, 0xeb, 0x0f, 0xd4, 0x86, 0xfc, 0x81, 0xbf, 0xd0, 0x7e, + 0x5d, 0x35, 0xf4, 0x8a, 0xea, 0xd2, 0x25, 0x9b, 0xaa, 0x2e, 0x8d, 0xce, 0x8b, 0x14, 0xce, 0x32, + 0x99, 0x82, 0x96, 0x71, 0x7a, 0xb4, 0xf9, 0x07, 0xec, 0xe1, 0xd3, 0x29, 0x3d, 0x7c, 0xc5, 0x6a, + 0xc4, 0x44, 0x2c, 0x9d, 0xd1, 0xda, 0x5f, 0xca, 0x9b, 0xb8, 0xd2, 0xc6, 0x43, 0xc1, 0x1e, 0x3a, + 0x0c, 0xbd, 0xd4, 0xb6, 0x2d, 0xdb, 0x3f, 0x17, 0xb0, 0x07, 0x72, 0x03, 0x48, 0xd5, 0x6a, 0x94, + 0xeb, 0xb6, 0x55, 0x2f, 0x3f, 0xd5, 0x0d, 0xa3, 0x5c, 0x57, 0x1d, 0x7f, 0x60, 0xbc, 0x52, 0xb5, + 0x1a, 0xab, 0xb6, 0x55, 0x7f, 0xac, 0x1b, 0xc6, 0xaa, 0xea, 0x38, 0xf2, 0x1d, 0x9c, 0xdc, 0xfc, + 0x3c, 0x1d, 0x2c, 0x02, 0xb3, 0xb8, 0xe3, 0x6f, 0x75, 0x4d, 0x03, 0xe7, 0xed, 0x0b, 0x0b, 0x2d, + 0x5e, 0xa6, 0xca, 0xbb, 0xbf, 0x9f, 0xb4, 0x0c, 0x67, 0x6a, 0xec, 0x25, 0x1b, 0x75, 0x2d, 0xfc, + 0x2a, 0xe9, 0xfc, 0xb6, 0x45, 0x2b, 0xbd, 0x5a, 0x6b, 0x7d, 0x25, 0x57, 0x60, 0x34, 0x11, 0x42, + 0xf7, 0x98, 0xdd, 0x0a, 0x96, 0xc8, 0x55, 0x2e, 0x00, 0xfa, 0x05, 0x4e, 0x41, 0x9f, 0x63, 0x6d, + 0xdb, 0x1a, 0x15, 0xae, 0x90, 0x68, 0x27, 0x56, 0x60, 0xd6, 0xe0, 0x4b, 0x6d, 0xc9, 0xb0, 0x94, + 0x3b, 0x70, 0x12, 0x05, 0x48, 0xa4, 0x70, 0x34, 0x79, 0xb2, 0xe7, 0x9e, 0xbe, 0xbd, 0x77, 0xa8, + 0xbb, 0xd4, 0x12, 0xd6, 0x79, 0xac, 0xbb, 0x4f, 0x1e, 0x31, 0x54, 0x07, 0x2f, 0xa7, 0x5b, 0x4b, + 0xf3, 0x27, 0x52, 0xb0, 0x11, 0x8f, 0xc3, 0x87, 0x0c, 0x7c, 0x19, 0xfa, 0x7d, 0x09, 0x16, 0xe7, + 0x70, 0x21, 0x05, 0x4d, 0x87, 0xee, 0x2d, 0xd0, 0x49, 0x64, 0xae, 0xa9, 0x76, 0x95, 0x86, 0xfb, + 0x86, 0xcb, 0x5e, 0x88, 0xc9, 0xe4, 0x76, 0x87, 0x4e, 0xa6, 0x8f, 0xef, 0x48, 0x91, 0x59, 0x89, + 0xec, 0xc9, 0x7c, 0xb8, 0xdd, 0xde, 0xfa, 0x7d, 0x1c, 0x16, 0x35, 0xc2, 0x69, 0x8e, 0x14, 0x17, + 0xdf, 0x40, 0x2e, 0x30, 0x45, 0xcb, 0x36, 0xec, 0x5e, 0xa7, 0xc3, 0x1f, 0x57, 0xd8, 0xe6, 0x24, + 0xf0, 0x5f, 0x9f, 0x84, 0xd6, 0xf8, 0x48, 0xc2, 0xb7, 0x00, 0xbc, 0x75, 0x97, 0x2f, 0x62, 0x87, + 0xb1, 0x47, 0x1a, 0xd8, 0xa4, 0xb8, 0xfc, 0xf9, 0xb9, 0x54, 0x4d, 0xa3, 0x75, 0xf7, 0x30, 0xf6, + 0x47, 0x5e, 0xae, 0x05, 0x16, 0x7d, 0xe6, 0x17, 0x97, 0xa1, 0x97, 0xd5, 0x4d, 0x7e, 0x26, 0xc1, + 0xa9, 0xf0, 0x7d, 0x07, 0x99, 0x4a, 0xa2, 0x30, 0xe9, 0xd6, 0x26, 0x3f, 0xdd, 0x81, 0x07, 0xe7, + 0x55, 0x9e, 0xf8, 0xce, 0x9f, 0xff, 0xf5, 0xe3, 0x9e, 0x2b, 0x44, 0x56, 0x12, 0xee, 0x8b, 0xbc, + 0xd5, 0x91, 0xdf, 0x52, 0x91, 0x9f, 0x48, 0xd0, 0xef, 0x8b, 0xef, 0xe4, 0x66, 0x6a, 0xae, 0x96, + 0x6b, 0x88, 0xfc, 0x64, 0x46, 0x6b, 0x44, 0x35, 0xc5, 0x50, 0x4d, 0x90, 0x71, 0x25, 0xed, 0xda, + 0x4c, 0xd9, 0xf3, 0x45, 0xc7, 0x7d, 0xf2, 0x61, 0x0f, 0x0c, 0xc7, 0x5d, 0x0c, 0x90, 0xf9, 0x4c, + 0x99, 0x63, 0x6e, 0x2b, 0xf2, 0x77, 0x0e, 0xe0, 0x89, 0xf8, 0x7f, 0x20, 0xb1, 0x02, 0xbe, 0x2b, + 0xad, 0xbf, 0x41, 0xbe, 0xa2, 0xa4, 0xde, 0x0f, 0x2a, 0x7b, 0xcd, 0xbd, 0xcf, 0xbe, 0x5f, 0x56, + 0x68, 0x15, 0xde, 0x27, 0xf7, 0x52, 0x39, 0x70, 0xe2, 0xc2, 0x44, 0x03, 0xfc, 0x5b, 0x82, 0x57, + 0x5a, 0xae, 0x03, 0xc8, 0xac, 0xa8, 0xb6, 0x98, 0x6b, 0x90, 0xfc, 0xad, 0xce, 0x9c, 0x90, 0x0b, + 0x93, 0x51, 0xf1, 0x64, 0x7d, 0x96, 0x4c, 0x77, 0xca, 0x84, 0x93, 0xec, 0x92, 0x58, 0x3c, 0xf9, + 0x54, 0x82, 0xa1, 0xa8, 0x00, 0x4f, 0x66, 0x84, 0x2d, 0xd9, 0x76, 0x13, 0x91, 0x9f, 0xed, 0xc8, + 0x07, 0x6b, 0xbd, 0xc5, 0x6a, 0x2d, 0x92, 0x9b, 0x02, 0xd8, 0xec, 0xf2, 0x42, 0xd9, 0x63, 0x3f, + 0x4d, 0xc4, 0x21, 0x41, 0x5b, 0x8c, 0xb8, 0x5d, 0xbf, 0x17, 0x23, 0x8e, 0x51, 0xcc, 0x33, 0x23, + 0x66, 0x97, 0x01, 0xca, 0x1e, 0xfb, 0xd9, 0x27, 0xcf, 0x24, 0x38, 0x15, 0x96, 0x9f, 0x05, 0x73, + 0x55, 0x8c, 0x1c, 0x2e, 0x98, 0xab, 0xe2, 0xb4, 0x6d, 0xf9, 0x1a, 0xc3, 0x3a, 0x46, 0x0a, 0xe9, + 0x58, 0xc9, 0x67, 0x12, 0x9c, 0x8e, 0x08, 0xc2, 0x44, 0x98, 0xac, 0x4d, 0xab, 0xce, 0xcf, 0x74, + 0xe2, 0x82, 0x00, 0x57, 0x18, 0xc0, 0x85, 0xe4, 0x21, 0x1b, 0xd3, 0xd1, 0x03, 0xbd, 0x4d, 0xd9, + 0x43, 0xe5, 0x77, 0x9f, 0xfc, 0x51, 0x82, 0xb3, 0xb1, 0xb2, 0x2f, 0x11, 0x4e, 0x4a, 0x89, 0x1a, + 0x74, 0xfe, 0xf5, 0x83, 0xb8, 0x62, 0x65, 0x77, 0x59, 0x65, 0xaf, 0x91, 0xdb, 0x8a, 0xf8, 0xdf, + 0x22, 0x14, 0x2c, 0x23, 0x54, 0xcf, 0xf7, 0xf9, 0xec, 0xdc, 0xa6, 0xe6, 0x8a, 0x67, 0xe7, 0x24, + 0x29, 0x5a, 0x3c, 0x3b, 0x27, 0x4a, 0xc7, 0xf2, 0x0e, 0x2b, 0xc6, 0x5e, 0x9f, 0x27, 0x73, 0x07, + 0x6a, 0x28, 0x27, 0xd9, 0x2f, 0x4c, 0x43, 0xfc, 0xdc, 0xf4, 0x6a, 0x9b, 0x68, 0x4b, 0x6e, 0x67, + 0x18, 0x0a, 0x31, 0x0c, 0xcc, 0x75, 0xea, 0x86, 0xe5, 0xdf, 0x60, 0xe5, 0x5f, 0x25, 0x97, 0x33, + 0x14, 0x41, 0x3e, 0x92, 0x60, 0xa0, 0x49, 0x26, 0x99, 0xcc, 0x46, 0xba, 0x8f, 0xb0, 0x98, 0xd5, + 0x1c, 0x91, 0xcd, 0x30, 0x64, 0x37, 0xc9, 0x44, 0xf6, 0x66, 0xf1, 0xb6, 0x4d, 0xa7, 0x23, 0x9a, + 0x29, 0xc9, 0x32, 0xb3, 0x44, 0x55, 0x5c, 0xf1, 0x60, 0x6f, 0x97, 0x64, 0xe5, 0xeb, 0x0c, 0xec, + 0x25, 0x32, 0x9a, 0x0e, 0xd6, 0x21, 0x1f, 0x48, 0xd0, 0xc7, 0x15, 0x4e, 0x32, 0x91, 0x9a, 0x27, + 0x22, 0xaa, 0xe6, 0x6f, 0x64, 0xb2, 0xcd, 0x3a, 0x35, 0x72, 0x69, 0x95, 0xfc, 0x4d, 0x82, 0xf3, + 0x29, 0xaa, 0x24, 0xb9, 0x97, 0x9a, 0x54, 0xac, 0xc7, 0xe6, 0xdf, 0x38, 0x78, 0x00, 0x2c, 0xe5, + 0x75, 0x56, 0xca, 0x2d, 0x32, 0x93, 0xba, 0x23, 0x0d, 0xfa, 0x68, 0x39, 0xa4, 0xd9, 0xfe, 0x5e, + 0x82, 0xe1, 0x38, 0x2d, 0x4b, 0x30, 0xcf, 0xa4, 0x28, 0x71, 0x82, 0x79, 0x26, 0x4d, 0x38, 0x93, + 0xe7, 0x58, 0x25, 0x53, 0xa4, 0x98, 0x54, 0x49, 0x03, 0xbd, 0x95, 0x88, 0xd6, 0x47, 0xfe, 0x23, + 0xc1, 0x50, 0x54, 0xee, 0x12, 0xec, 0x07, 0x62, 0x65, 0x35, 0xc1, 0x7e, 0x20, 0x5e, 0x4f, 0x93, + 0x6d, 0x86, 0xd9, 0x58, 0xbf, 0x4d, 0x66, 0x3b, 0x98, 0x1b, 0xfd, 0x42, 0x92, 0x9d, 0x9a, 0xa5, + 0xc6, 0x0c, 0xe1, 0xdf, 0x4a, 0x40, 0xda, 0x55, 0x32, 0x32, 0x97, 0x11, 0x7f, 0x8b, 0xf0, 0x96, + 0x7f, 0xad, 0x63, 0xbf, 0xac, 0x7b, 0xa1, 0x50, 0x11, 0x4d, 0xe5, 0x90, 0xfc, 0x4f, 0x02, 0x08, + 0xc4, 0x0c, 0x22, 0x9c, 0xf3, 0xa2, 0x32, 0x5d, 0x5e, 0xc9, 0x6c, 0x8f, 0x28, 0x7f, 0xc8, 0xcf, + 0x16, 0xef, 0x4b, 0xeb, 0x29, 0xe7, 0x23, 0x3c, 0x56, 0x2b, 0x7b, 0x5c, 0x0b, 0xdb, 0x4f, 0x5b, + 0xeb, 0x5a, 0x6d, 0x5b, 0x8e, 0x0f, 0xa3, 0x02, 0x3f, 0xf2, 0x9c, 0x6f, 0x56, 0xda, 0xa5, 0x31, + 0xf1, 0x66, 0x25, 0x51, 0xee, 0x13, 0x6f, 0x56, 0x92, 0x95, 0x38, 0x79, 0x9e, 0x11, 0x34, 0x43, + 0xa6, 0x04, 0xc8, 0x1d, 0x85, 0x57, 0xdc, 0xac, 0x3c, 0xae, 0x14, 0x2e, 0x4c, 0x75, 0x56, 0x4a, + 0x44, 0x6c, 0xeb, 0xac, 0x94, 0xa8, 0x0e, 0xd6, 0x41, 0x29, 0x5c, 0xa7, 0x53, 0xf6, 0xf8, 0xef, + 0x3e, 0xf9, 0x18, 0x0f, 0x15, 0x81, 0xa0, 0x44, 0xb2, 0xac, 0x72, 0x2d, 0x22, 0x57, 0x86, 0x43, + 0x45, 0xbb, 0x62, 0x25, 0x8f, 0x33, 0xd4, 0x32, 0x19, 0x13, 0xa1, 0x26, 0xbf, 0x94, 0x60, 0x28, + 0xaa, 0xf8, 0x08, 0x50, 0xc6, 0xca, 0x4f, 0x02, 0x94, 0xf1, 0x92, 0x92, 0x7c, 0x93, 0xa1, 0xbc, + 0x46, 0xae, 0xa4, 0x2e, 0x34, 0x08, 0x75, 0x91, 0x3e, 0x7f, 0x51, 0x90, 0x3e, 0x7f, 0x51, 0x90, + 0xfe, 0xf9, 0xa2, 0x20, 0xfd, 0xe8, 0x65, 0xe1, 0xd8, 0xe7, 0x2f, 0x0b, 0xc7, 0xfe, 0xf2, 0xb2, + 0x70, 0x0c, 0x46, 0x74, 0x2b, 0x21, 0xfd, 0xaa, 0xb4, 0x5e, 0x0c, 0x89, 0x42, 0x81, 0xd1, 0xa4, + 0x6e, 0x85, 0x93, 0xee, 0x34, 0xd3, 0x6e, 0xf4, 0xb1, 0x7f, 0xce, 0x9d, 0xfd, 0x7f, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x57, 0x99, 0x04, 0xa4, 0x56, 0x2d, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/exchange/query.pb.gw.go b/x/exchange/query.pb.gw.go index a84cbc0c2a..e9ad3d083b 100644 --- a/x/exchange/query.pb.gw.go +++ b/x/exchange/query.pb.gw.go @@ -1849,6 +1849,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_GetCommitment_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 { @@ -1856,6 +1858,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_GetCommitment_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) @@ -1869,6 +1872,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_GetAccountCommitments_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 { @@ -1876,6 +1881,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_GetAccountCommitments_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) @@ -1889,6 +1895,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_GetMarketCommitments_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 { @@ -1896,6 +1904,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_GetMarketCommitments_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) @@ -1909,6 +1918,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_GetMarketCommitments_1, 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 { @@ -1916,6 +1927,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_GetMarketCommitments_1(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) @@ -1929,6 +1941,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_GetAllCommitments_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 { @@ -1936,6 +1950,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_GetAllCommitments_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) @@ -2018,6 +2033,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_CommitmentSettlementFeeCalc_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 { @@ -2025,6 +2042,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_CommitmentSettlementFeeCalc_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) @@ -2130,6 +2148,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_GetPayment_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 { @@ -2137,6 +2157,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_GetPayment_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) @@ -2150,6 +2171,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_GetPayment_1, 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 { @@ -2157,6 +2180,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_GetPayment_1(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) @@ -2170,6 +2194,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_GetPayment_2, 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 { @@ -2177,6 +2203,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_GetPayment_2(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) @@ -2190,6 +2217,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_GetPaymentsWithSource_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 { @@ -2197,6 +2226,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_GetPaymentsWithSource_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) @@ -2210,6 +2240,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_GetPaymentsWithTarget_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 { @@ -2217,6 +2249,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_GetPaymentsWithTarget_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) @@ -2230,6 +2263,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_GetAllPayments_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 { @@ -2237,6 +2272,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_GetAllPayments_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) @@ -2250,6 +2286,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_PaymentFeeCalc_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 { @@ -2257,6 +2295,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_PaymentFeeCalc_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/ibcratelimit/simulation/operations_test.go b/x/ibcratelimit/simulation/operations_test.go index ac0d4d8b91..314754ba95 100644 --- a/x/ibcratelimit/simulation/operations_test.go +++ b/x/ibcratelimit/simulation/operations_test.go @@ -16,6 +16,7 @@ import ( simappparams "github.com/provenance-io/provenance/app/params" "github.com/provenance-io/provenance/x/ibcratelimit" "github.com/provenance-io/provenance/x/ibcratelimit/simulation" + "github.com/provenance-io/provenance/x/trigger/types" ) type SimTestSuite struct { @@ -62,9 +63,6 @@ func (s *SimTestSuite) TestWeightedOperations() { r := rand.New(source) accs := s.getTestingAccounts(r, 3) - // begin a new block - // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) // TODO[1760]: finalize-block - expected := []struct { weight int opMsgRoute string @@ -104,9 +102,6 @@ func (s *SimTestSuite) TestSimulateMsgGovUpdateParams() { r := rand.New(source) accounts := s.getTestingAccounts(r, 3) - // begin a new block - // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) // TODO[1760]: finalize-block - // execute operation op := simulation.SimulateMsgGovUpdateParams(*s.app.RateLimitingKeeper, s.app.AccountKeeper, s.app.BankKeeper) operationMsg, futureOperations, err := op(r, s.app.BaseApp, s.ctx, accounts, "") @@ -114,11 +109,11 @@ func (s *SimTestSuite) TestSimulateMsgGovUpdateParams() { s.LogOperationMsg(operationMsg, "good") var msg ibcratelimit.MsgGovUpdateParamsRequest - s.Require().NoError(s.app.AppCodec().UnmarshalJSON(operationMsg.Msg, &msg), "UnmarshalJSON(operationMsg.Msg)") + s.Require().NoError(s.app.AppCodec().Unmarshal(operationMsg.Msg, &msg), "UnmarshalJSON(operationMsg.Msg)") s.Assert().True(operationMsg.OK, "operationMsg.OK") s.Assert().Equal(sdk.MsgTypeURL(&msg), operationMsg.Name, "operationMsg.Name") - s.Assert().Equal(sdk.MsgTypeURL(&msg), operationMsg.Route, "operationMsg.Route") + s.Assert().Equal(types.RouterKey, operationMsg.Route, "operationMsg.Route") s.Assert().Len(futureOperations, 0, "futureOperations") } diff --git a/x/marker/simulation/operations_test.go b/x/marker/simulation/operations_test.go index 2e9718507e..89ef1a4e58 100644 --- a/x/marker/simulation/operations_test.go +++ b/x/marker/simulation/operations_test.go @@ -84,19 +84,19 @@ func (s *SimTestSuite) TestWeightedOperations() { opMsgName string }{ // Possible names: types.TypeAddMarkerRequest, fmt.Sprintf("%T", &types.MsgAddMarkerRequest{}) - {simappparams.DefaultWeightMsgAddMarker, sdk.MsgTypeURL(&types.MsgAddMarkerRequest{}), sdk.MsgTypeURL(&types.MsgAddMarkerRequest{})}, + {weight: simappparams.DefaultWeightMsgAddMarker, opMsgRoute: types.RouterKey, opMsgName: sdk.MsgTypeURL(&types.MsgAddMarkerRequest{})}, // Possible names: "ChangeStatus", // types.TypeActivateRequest, fmt.Sprintf("%T", &types.MsgActivateRequest{}), // types.TypeFinalizeRequest, fmt.Sprintf("%T", &types.MsgFinalizeRequest{}), // types.TypeCancelRequest, fmt.Sprintf("%T", &types.MsgCancelRequest{}), // types.TypeDeleteRequest, fmt.Sprintf("%T", &types.MsgDeleteRequest{}), - {simappparams.DefaultWeightMsgFinalize, sdk.MsgTypeURL(&types.MsgFinalizeRequest{}), sdk.MsgTypeURL(&types.MsgFinalizeRequest{})}, + {weight: simappparams.DefaultWeightMsgFinalize, opMsgRoute: types.RouterKey, opMsgName: sdk.MsgTypeURL(&types.MsgFinalizeRequest{})}, // Possible names: types.TypeAddAccessRequest, fmt.Sprintf("%T", &types.MsgAddAccessRequest{}) - {simappparams.DefaultWeightMsgAddAccess, sdk.MsgTypeURL(&types.MsgAddAccessRequest{}), sdk.MsgTypeURL(&types.MsgAddAccessRequest{})}, - {simappparams.DefaultWeightMsgAddFinalizeActivateMarker, sdk.MsgTypeURL(&types.MsgAddFinalizeActivateMarkerRequest{}), sdk.MsgTypeURL(&types.MsgAddFinalizeActivateMarkerRequest{})}, - {simappparams.DefaultWeightMsgAddMarkerProposal, "gov", sdk.MsgTypeURL(&govtypes.MsgSubmitProposal{})}, - {simappparams.DefaultWeightMsgSetAccountData, sdk.MsgTypeURL(&types.MsgSetAccountDataRequest{}), sdk.MsgTypeURL(&types.MsgSetAccountDataRequest{})}, - {simappparams.DefaultWeightMsgUpdateDenySendList, sdk.MsgTypeURL(&types.MsgUpdateSendDenyListRequest{}), sdk.MsgTypeURL(&types.MsgUpdateSendDenyListRequest{})}, + {weight: simappparams.DefaultWeightMsgAddAccess, opMsgRoute: types.RouterKey, opMsgName: sdk.MsgTypeURL(&types.MsgAddAccessRequest{})}, + {weight: simappparams.DefaultWeightMsgAddFinalizeActivateMarker, opMsgRoute: types.RouterKey, opMsgName: sdk.MsgTypeURL(&types.MsgAddFinalizeActivateMarkerRequest{})}, + {weight: simappparams.DefaultWeightMsgAddMarkerProposal, opMsgRoute: "gov", opMsgName: sdk.MsgTypeURL(&govtypes.MsgSubmitProposal{})}, + {weight: simappparams.DefaultWeightMsgSetAccountData, opMsgRoute: types.RouterKey, opMsgName: sdk.MsgTypeURL(&types.MsgSetAccountDataRequest{})}, + {weight: simappparams.DefaultWeightMsgUpdateDenySendList, opMsgRoute: types.RouterKey, opMsgName: sdk.MsgTypeURL(&types.MsgUpdateSendDenyListRequest{})}, } expNames := make([]string, len(expected)) @@ -131,9 +131,6 @@ func (s *SimTestSuite) TestSimulateMsgAddMarker() { r := rand.New(src) accounts := s.getTestingAccounts(r, 3) - // begin a new block - // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) // TODO[1760]: finalize-block - // execute operation op := simulation.SimulateMsgAddMarker(s.app.MarkerKeeper, s.app.AccountKeeper, s.app.BankKeeper) operationMsg, futureOperations, err := op(r, s.app.BaseApp, s.ctx, accounts, "") @@ -144,7 +141,7 @@ func (s *SimTestSuite) TestSimulateMsgAddMarker() { s.Require().True(operationMsg.OK, operationMsg.String()) s.Require().Equal(sdk.MsgTypeURL(&msg), operationMsg.Name) - s.Require().Equal(sdk.MsgTypeURL(&msg), operationMsg.Route) + s.Require().Equal(types.RouterKey, operationMsg.Route) s.Require().Len(futureOperations, 0) } @@ -156,20 +153,17 @@ func (s *SimTestSuite) TestSimulateMsgAddActivateFinalizeMarker() { r := rand.New(src) accounts := s.getTestingAccounts(r, 3) - // begin a new block - // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) // TODO[1760]: finalize-block - // execute operation op := simulation.SimulateMsgAddFinalizeActivateMarker(s.app.MarkerKeeper, s.app.AccountKeeper, s.app.BankKeeper) operationMsg, futureOperations, err := op(r, s.app.BaseApp, s.ctx, accounts, "") s.Require().NoError(err) var msg types.MsgAddFinalizeActivateMarkerRequest - types.ModuleCdc.UnmarshalJSON(operationMsg.Msg, &msg) + types.ModuleCdc.Unmarshal(operationMsg.Msg, &msg) s.Require().True(operationMsg.OK, operationMsg.String()) s.Require().Equal(sdk.MsgTypeURL(&msg), operationMsg.Name) - s.Require().Equal(sdk.MsgTypeURL(&msg), operationMsg.Route) + s.Require().Equal(types.RouterKey, operationMsg.Route) s.Require().Len(futureOperations, 0) } @@ -384,9 +378,6 @@ func (s *SimTestSuite) TestSimulateMsgSetAccountData() { _, err := markerMsgServer.AddFinalizeActivateMarker(s.ctx, newMarker) s.Require().NoError(err, "AddFinalizeActivateMarker") - // begin a new block - // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) // TODO[1760]: finalize-block - args := s.getWeightedOpsArgs() // execute operation op := simulation.SimulateMsgSetAccountData(s.app.MarkerKeeper, &args) @@ -395,14 +386,14 @@ func (s *SimTestSuite) TestSimulateMsgSetAccountData() { s.LogOperationMsg(operationMsg) var msg types.MsgSetAccountDataRequest - s.Require().NoError(s.app.AppCodec().UnmarshalJSON(operationMsg.Msg, &msg), "UnmarshalJSON(operationMsg.Msg)") + s.Require().NoError(s.app.AppCodec().Unmarshal(operationMsg.Msg, &msg), "UnmarshalJSON(operationMsg.Msg)") s.Assert().True(operationMsg.OK, "operationMsg.OK") s.Assert().Equal(sdk.MsgTypeURL(&msg), operationMsg.Name, "operationMsg.Name") s.Assert().Equal("simcoin", msg.Denom, "msg.Denom") s.Assert().Equal("", msg.Value, "msg.Value") s.Assert().Equal(accounts[1].Address.String(), msg.Signer, "msg.Signer") - s.Assert().Equal(sdk.MsgTypeURL(&msg), operationMsg.Route, "operationMsg.Route") + s.Assert().Equal(types.RouterKey, operationMsg.Route, "operationMsg.Route") s.Assert().Len(futureOperations, 0, "futureOperations") } @@ -436,9 +427,6 @@ func (s *SimTestSuite) TestSimulateMsgUpdateSendDenyList() { _, err := markerMsgServer.AddFinalizeActivateMarker(s.ctx, newMarker) s.Require().NoError(err, "AddFinalizeActivateMarker") - // begin a new block - // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) // TODO[1760]: finalize-block - args := s.getWeightedOpsArgs() // execute operation op := simulation.SimulateMsgUpdateSendDenyList(s.app.MarkerKeeper, &args) @@ -447,14 +435,14 @@ func (s *SimTestSuite) TestSimulateMsgUpdateSendDenyList() { s.LogOperationMsg(operationMsg) var msg types.MsgUpdateSendDenyListRequest - s.Require().NoError(s.app.AppCodec().UnmarshalJSON(operationMsg.Msg, &msg), "UnmarshalJSON(operationMsg.Msg)") + s.Require().NoError(s.app.AppCodec().Unmarshal(operationMsg.Msg, &msg), "UnmarshalJSON(operationMsg.Msg)") s.Assert().True(operationMsg.OK, "operationMsg.OK") s.Assert().Equal(sdk.MsgTypeURL(&msg), operationMsg.Name, "operationMsg.Name") s.Assert().Equal("simcoin", msg.Denom, "msg.Denom") s.Assert().Len(msg.AddDeniedAddresses, 10, "msg.AddDeniedAddresses") s.Assert().Equal(accounts[1].Address.String(), msg.Authority, "msg.Authority") - s.Assert().Equal(sdk.MsgTypeURL(&msg), operationMsg.Route, "operationMsg.Route") + s.Assert().Equal(types.RouterKey, operationMsg.Route, "operationMsg.Route") s.Assert().Len(futureOperations, 0, "futureOperations") } diff --git a/x/marker/types/tx.pb.go b/x/marker/types/tx.pb.go index a6556ee569..37e63a639d 100644 --- a/x/marker/types/tx.pb.go +++ b/x/marker/types/tx.pb.go @@ -13,11 +13,11 @@ import ( _ "github.com/cosmos/cosmos-sdk/types/msgservice" _ "github.com/cosmos/cosmos-sdk/x/bank/types" github_com_cosmos_cosmos_sdk_x_bank_types "github.com/cosmos/cosmos-sdk/x/bank/types" - _ "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" - github_com_cosmos_ibc_go_v8_modules_apps_transfer_types "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + github_com_cosmos_ibc_go_v8_modules_apps_transfer_types "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" @@ -2241,129 +2241,131 @@ func init() { func init() { proto.RegisterFile("provenance/marker/v1/tx.proto", fileDescriptor_bcb203fb73175ed3) } var fileDescriptor_bcb203fb73175ed3 = []byte{ - // 1952 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x59, 0xcb, 0x6f, 0x1b, 0xc7, - 0x19, 0xf7, 0x5a, 0x0f, 0x8b, 0x1f, 0x6d, 0xd9, 0x1a, 0x53, 0xd2, 0x6a, 0x5d, 0x51, 0x14, 0xfd, - 0x62, 0xd2, 0x88, 0x6b, 0x31, 0xad, 0x9a, 0x08, 0x05, 0x0a, 0x52, 0xaa, 0x5d, 0xa3, 0x65, 0x60, - 0x50, 0x69, 0x8b, 0xf6, 0x42, 0x2c, 0x77, 0x47, 0xeb, 0x85, 0xc8, 0x1d, 0x7a, 0x67, 0x48, 0x5b, - 0x01, 0x72, 0x69, 0x4f, 0x39, 0xb5, 0xf0, 0xa1, 0x87, 0xf6, 0xd2, 0x73, 0x0e, 0x45, 0x0f, 0x41, - 0x8b, 0xfe, 0x07, 0x41, 0x4f, 0x41, 0xd0, 0x43, 0xd1, 0x43, 0x1a, 0xd8, 0x87, 0x16, 0xed, 0x5f, - 0xd0, 0x5b, 0xb1, 0x33, 0xb3, 0xbb, 0x5c, 0x72, 0x77, 0x45, 0x39, 0x44, 0xda, 0x9c, 0xa4, 0x99, - 0xef, 0xfd, 0x98, 0x99, 0xdf, 0xb7, 0x84, 0xcd, 0xbe, 0x47, 0x86, 0xd8, 0x35, 0x5c, 0x13, 0xeb, - 0x3d, 0xc3, 0x3b, 0xc1, 0x9e, 0x3e, 0xdc, 0xd5, 0xd9, 0xb3, 0x6a, 0xdf, 0x23, 0x8c, 0xa0, 0x42, - 0x44, 0xae, 0x0a, 0x72, 0x75, 0xb8, 0xab, 0x6d, 0xd8, 0x84, 0xd8, 0x5d, 0xac, 0x73, 0x9e, 0xce, - 0xe0, 0x58, 0x37, 0xdc, 0x53, 0x21, 0xa0, 0x6d, 0x98, 0x84, 0xf6, 0x08, 0x6d, 0xf3, 0x95, 0x2e, - 0x16, 0x92, 0x54, 0xb0, 0x89, 0x4d, 0xc4, 0xbe, 0xff, 0x9f, 0xdc, 0x2d, 0x0a, 0x1e, 0xbd, 0x63, - 0x50, 0xac, 0x0f, 0x77, 0x3b, 0x98, 0x19, 0xbb, 0xba, 0x49, 0x1c, 0x77, 0x82, 0xee, 0x9e, 0x84, - 0x74, 0x7f, 0x21, 0xe9, 0xeb, 0x92, 0xde, 0xa3, 0xb6, 0xef, 0x79, 0x8f, 0xda, 0x92, 0x70, 0xdb, - 0xe9, 0x98, 0xba, 0xd1, 0xef, 0x77, 0x1d, 0xd3, 0x60, 0x0e, 0x71, 0xa9, 0xce, 0x3c, 0xc3, 0xa5, - 0xc7, 0xf1, 0x08, 0xb5, 0xed, 0xc4, 0x04, 0xc8, 0x58, 0x05, 0xcb, 0x9d, 0x44, 0x16, 0xc3, 0x34, - 0x31, 0xa5, 0xb6, 0x67, 0xb8, 0x4c, 0xf0, 0x95, 0xff, 0xa8, 0x80, 0xda, 0xa4, 0xf6, 0x03, 0x7f, - 0xab, 0xde, 0xed, 0x92, 0xa7, 0xbe, 0x44, 0x0b, 0x3f, 0x19, 0x60, 0xca, 0x50, 0x01, 0x16, 0x2c, - 0xec, 0x92, 0x9e, 0xaa, 0x94, 0x94, 0x4a, 0xae, 0x25, 0x16, 0xe8, 0x16, 0x5c, 0x31, 0xac, 0x9e, - 0xe3, 0x3a, 0x94, 0x79, 0x06, 0x23, 0x9e, 0x7a, 0x91, 0x53, 0xe3, 0x9b, 0x48, 0x85, 0x4b, 0xdc, - 0x0e, 0xc6, 0xea, 0x1c, 0xa7, 0x07, 0x4b, 0xf4, 0x5d, 0xc8, 0x19, 0x81, 0x25, 0x75, 0xbe, 0xa4, - 0x54, 0xf2, 0xb5, 0x42, 0x55, 0x54, 0xa7, 0x1a, 0x54, 0xa7, 0x5a, 0x77, 0x4f, 0x1b, 0x2b, 0x7f, - 0xfe, 0x68, 0xe7, 0xca, 0x7d, 0x8c, 0x43, 0xbf, 0x1e, 0xb6, 0x22, 0xc9, 0xf2, 0x0d, 0xd8, 0x48, - 0x70, 0x9c, 0xf6, 0x89, 0x4b, 0x71, 0xf9, 0xc3, 0x05, 0xb8, 0xde, 0xa4, 0x76, 0xdd, 0xb2, 0x9a, - 0x3c, 0xf8, 0x20, 0xa2, 0x0e, 0x2c, 0x1a, 0x3d, 0x32, 0x70, 0x19, 0x0f, 0x29, 0x5f, 0xdb, 0xa8, - 0xca, 0x72, 0xfb, 0xa5, 0xac, 0xca, 0x52, 0x55, 0x0f, 0x88, 0xe3, 0x36, 0xf4, 0x8f, 0x3f, 0xdb, - 0xba, 0xf0, 0xb7, 0xcf, 0xb6, 0xee, 0xda, 0x0e, 0x7b, 0x3c, 0xe8, 0x54, 0x4d, 0xd2, 0x93, 0xbd, - 0x21, 0xff, 0xec, 0x50, 0xeb, 0x44, 0x67, 0xa7, 0x7d, 0x4c, 0xb9, 0x40, 0x4b, 0x6a, 0xf6, 0x23, - 0xef, 0x19, 0xae, 0x61, 0x63, 0x2f, 0x88, 0x5c, 0x2e, 0xd1, 0x36, 0x5c, 0x3e, 0xf6, 0x48, 0xaf, - 0x6d, 0x58, 0x96, 0x87, 0x29, 0xe5, 0xc1, 0xe7, 0x5a, 0x79, 0x7f, 0xaf, 0x2e, 0xb6, 0xd0, 0x3e, - 0x2c, 0x52, 0x66, 0xb0, 0x01, 0x55, 0x17, 0x4a, 0x4a, 0x65, 0xb9, 0x56, 0xae, 0x26, 0x75, 0x73, - 0x55, 0x44, 0x75, 0xc4, 0x39, 0x5b, 0x52, 0x02, 0xd5, 0x21, 0x2f, 0x38, 0xda, 0xbe, 0x57, 0xea, - 0x22, 0x57, 0x50, 0xca, 0x52, 0xf0, 0xee, 0x69, 0x1f, 0xb7, 0xa0, 0x17, 0xfe, 0x8f, 0xbe, 0x07, - 0x79, 0xd1, 0x23, 0xed, 0xae, 0x43, 0x99, 0x7a, 0xa9, 0x34, 0x57, 0xc9, 0xd7, 0xb6, 0x93, 0x55, - 0xd4, 0x39, 0x23, 0x2f, 0x40, 0x63, 0xde, 0x4f, 0x56, 0x0b, 0x84, 0xec, 0x0f, 0x1c, 0xca, 0xfc, - 0x58, 0xe9, 0xa0, 0xdf, 0xef, 0x9e, 0xb6, 0x8f, 0x9d, 0x67, 0xd8, 0x52, 0x97, 0x4a, 0x4a, 0x65, - 0xa9, 0x95, 0x17, 0x7b, 0xf7, 0xfd, 0x2d, 0xf4, 0x16, 0xa8, 0xbc, 0x9c, 0x6d, 0x9b, 0x0c, 0xb1, - 0xc7, 0xd5, 0xb7, 0x4d, 0xe2, 0x32, 0x8f, 0x74, 0xd5, 0x1c, 0x67, 0x5f, 0xe3, 0xf4, 0x07, 0x21, - 0xf9, 0x40, 0x50, 0x51, 0x0d, 0x56, 0x85, 0xe4, 0x31, 0xf1, 0x4c, 0x6c, 0xb5, 0x83, 0x53, 0xa2, - 0x02, 0x17, 0xbb, 0xce, 0x89, 0xf7, 0x39, 0xed, 0x5d, 0x49, 0x42, 0x3a, 0x5c, 0xf7, 0xf0, 0x93, - 0x81, 0xe3, 0x61, 0xab, 0x6d, 0x30, 0xe6, 0x39, 0x9d, 0x01, 0xc3, 0x54, 0xcd, 0x97, 0xe6, 0x2a, - 0xb9, 0x16, 0x0a, 0x48, 0xf5, 0x90, 0x82, 0xb6, 0x20, 0x37, 0xa0, 0x56, 0xdb, 0xc4, 0x2e, 0xa3, - 0xea, 0xe5, 0x92, 0x52, 0x99, 0x6f, 0x5c, 0x54, 0x95, 0xd6, 0xd2, 0x80, 0x5a, 0x07, 0xfe, 0x1e, - 0x5a, 0x83, 0xc5, 0x21, 0xe9, 0x0e, 0x7a, 0x58, 0xbd, 0xe2, 0x53, 0x5b, 0x72, 0x85, 0x6e, 0x08, - 0xc1, 0x9e, 0xd3, 0xed, 0x52, 0x75, 0x99, 0x93, 0x7c, 0xa1, 0xa6, 0xbf, 0xde, 0x5f, 0xf9, 0xd9, - 0x3f, 0x7e, 0xff, 0x7a, 0xac, 0x0d, 0xca, 0x6b, 0x50, 0x88, 0xf7, 0xaa, 0x6c, 0xe2, 0xe7, 0x4a, - 0xd0, 0xc4, 0x22, 0xd5, 0xb3, 0x38, 0x96, 0xdf, 0x81, 0x45, 0x51, 0x24, 0x75, 0xee, 0x7c, 0xb5, - 0x95, 0x62, 0x91, 0xb3, 0x81, 0x4f, 0xd2, 0xd9, 0xf7, 0x61, 0xad, 0x49, 0xed, 0x43, 0xdc, 0xc5, - 0x0c, 0xcf, 0xce, 0xdd, 0xbb, 0x70, 0xd5, 0xc3, 0x3d, 0x32, 0xf4, 0x6b, 0x26, 0x0f, 0x8d, 0x38, - 0x53, 0xcb, 0x72, 0x5b, 0x9e, 0x9b, 0xf2, 0x06, 0xac, 0x4f, 0x98, 0x97, 0x9e, 0x3d, 0x02, 0xd4, - 0xa4, 0xf6, 0x7d, 0xc7, 0x35, 0xba, 0xce, 0x7b, 0xb3, 0xb8, 0xdb, 0xca, 0xab, 0xbc, 0x2e, 0x91, - 0xc6, 0x98, 0xa1, 0xba, 0xc9, 0x9c, 0xa1, 0xc1, 0x66, 0x68, 0x28, 0xd2, 0x28, 0x0d, 0xbd, 0x03, - 0xd7, 0x9a, 0xd4, 0x3e, 0xf0, 0x6b, 0xd6, 0x9d, 0x85, 0x99, 0xeb, 0xb0, 0x32, 0xa2, 0x2f, 0x66, - 0x44, 0x64, 0x74, 0x76, 0x46, 0x02, 0x7d, 0xd2, 0xc8, 0xaf, 0x15, 0x58, 0x6e, 0x52, 0xbb, 0xe9, - 0xb8, 0xec, 0xcb, 0xbc, 0xa2, 0xa7, 0xf3, 0x78, 0x05, 0xae, 0x86, 0xbe, 0xc5, 0xfd, 0x6d, 0x0c, - 0x3c, 0xf7, 0xff, 0xd5, 0x5f, 0xe1, 0x9b, 0xf4, 0xf7, 0x2f, 0x0a, 0xef, 0xc9, 0x1f, 0x3b, 0xec, - 0xb1, 0xe5, 0x19, 0x4f, 0x67, 0x71, 0x24, 0x37, 0x01, 0x18, 0x19, 0x3b, 0x8d, 0x39, 0x46, 0x82, - 0x07, 0xcc, 0x0c, 0xd3, 0x31, 0xcf, 0x2f, 0x98, 0x8c, 0x74, 0xdc, 0xf3, 0xd3, 0xf1, 0xe1, 0xdf, - 0xb7, 0x2a, 0x53, 0xa6, 0x83, 0x06, 0xf9, 0x90, 0xe7, 0x22, 0x8a, 0x4a, 0x46, 0xfb, 0xb9, 0x88, - 0x36, 0xb8, 0xf2, 0xff, 0xa7, 0x15, 0x9a, 0x4b, 0xca, 0xdd, 0x14, 0x00, 0x20, 0x9e, 0xde, 0x85, - 0xb1, 0xf4, 0xca, 0xc8, 0xa3, 0x08, 0x65, 0xe4, 0x9f, 0x2a, 0xb0, 0xda, 0xa4, 0xf6, 0xc3, 0x8e, - 0x39, 0x1e, 0xfc, 0x73, 0x05, 0x96, 0xc2, 0xe7, 0x51, 0xc4, 0xff, 0x5a, 0xd5, 0xe9, 0x98, 0xd5, - 0x51, 0x98, 0x59, 0x0d, 0x38, 0x38, 0x34, 0x88, 0xf4, 0x37, 0xbe, 0x2f, 0xf3, 0x71, 0x30, 0x99, - 0x0f, 0xa7, 0x63, 0xee, 0xd8, 0x44, 0x1f, 0xee, 0xe9, 0x3d, 0x62, 0x0d, 0xba, 0x98, 0xfa, 0xc0, - 0x75, 0x04, 0xb0, 0x8a, 0x24, 0x8d, 0x3a, 0x1b, 0xfa, 0x31, 0x65, 0x3f, 0xab, 0xfc, 0x49, 0x89, - 0xc5, 0x24, 0xc3, 0xfd, 0x93, 0x02, 0x5a, 0x93, 0xda, 0x47, 0x98, 0x1d, 0xfa, 0x9d, 0xdb, 0xc4, - 0xcc, 0xb0, 0x0c, 0x66, 0x04, 0x31, 0x0f, 0x60, 0xa9, 0x27, 0xb7, 0x64, 0xc8, 0x9b, 0x51, 0xc9, - 0xdd, 0x93, 0xb0, 0xe4, 0x81, 0x5c, 0x63, 0x5f, 0x86, 0x59, 0xcb, 0x2c, 0xfb, 0x33, 0x01, 0xe8, - 0x65, 0x60, 0x81, 0xcd, 0xd0, 0xd4, 0x94, 0x51, 0x6d, 0xc2, 0x8d, 0x44, 0xd7, 0x65, 0x68, 0xff, - 0x9e, 0x87, 0x9b, 0xe2, 0x81, 0x0d, 0xde, 0x97, 0xe0, 0xfa, 0xff, 0x8a, 0x21, 0xd9, 0x31, 0x34, - 0xba, 0xf0, 0xc5, 0xd1, 0xe8, 0xe2, 0xec, 0xd0, 0xe8, 0xa5, 0xf3, 0xa1, 0xd1, 0xa5, 0x57, 0x43, - 0xa3, 0xb9, 0x73, 0xa3, 0x51, 0x98, 0x0e, 0x8d, 0xe6, 0x33, 0xd1, 0xe8, 0xe5, 0x74, 0x34, 0x7a, - 0x25, 0x8e, 0x46, 0xcb, 0x77, 0xe0, 0x56, 0x76, 0xb3, 0xc9, 0xae, 0xfc, 0x8f, 0x02, 0x25, 0xbf, - 0x6b, 0x79, 0xbe, 0x1e, 0xba, 0xa6, 0x87, 0x0d, 0x8a, 0x1f, 0x79, 0xa4, 0x4f, 0xa8, 0xd1, 0xfd, - 0x32, 0x5b, 0xf2, 0x36, 0x2c, 0x33, 0xc3, 0xb3, 0x31, 0x0b, 0x5b, 0x4f, 0x1e, 0x32, 0xb1, 0x1b, - 0x34, 0xdf, 0x1e, 0xe4, 0x8c, 0x01, 0x7b, 0x4c, 0x3c, 0x87, 0x9d, 0x8a, 0xde, 0x6d, 0xa8, 0x9f, - 0x7e, 0xb4, 0x53, 0x90, 0x0e, 0x49, 0xb6, 0x23, 0xe6, 0x39, 0xae, 0xdd, 0x8a, 0x58, 0xf7, 0xd1, - 0x3f, 0x7f, 0xbb, 0xa5, 0xf8, 0x08, 0x3d, 0xda, 0x2b, 0xdf, 0x84, 0xed, 0x8c, 0xd0, 0x65, 0x82, - 0x7e, 0x75, 0x11, 0xca, 0x4d, 0x6a, 0xff, 0xb0, 0x6f, 0x49, 0xe8, 0x17, 0x2f, 0x5f, 0xf6, 0xc3, - 0xfb, 0x6d, 0xd0, 0x04, 0x9c, 0x6d, 0x27, 0xf5, 0xc4, 0x45, 0xde, 0x13, 0xaa, 0xe0, 0x98, 0x54, - 0x8d, 0xf6, 0x60, 0xdd, 0xb0, 0xac, 0x44, 0xd1, 0x39, 0x2e, 0xba, 0x6a, 0x58, 0x56, 0x82, 0xdc, - 0x03, 0x40, 0x41, 0xa7, 0xb6, 0xa3, 0x64, 0xcd, 0x9f, 0x91, 0xac, 0x95, 0x40, 0xa6, 0x1e, 0x26, - 0xed, 0x46, 0x90, 0xb4, 0x04, 0x7d, 0xe5, 0xdb, 0xfc, 0x3a, 0x4b, 0xcf, 0x8b, 0xcc, 0xdf, 0x1f, - 0x14, 0x28, 0x86, 0x7c, 0xf1, 0xb3, 0x92, 0x9d, 0xbb, 0xd4, 0xc3, 0x77, 0x31, 0xfd, 0xf0, 0xcd, - 0xb2, 0x3b, 0xb6, 0x61, 0x2b, 0xd5, 0x6f, 0x19, 0xdb, 0x07, 0xe2, 0x1b, 0xcb, 0x11, 0x66, 0x75, - 0xd3, 0xf4, 0xbb, 0xf8, 0x70, 0xe4, 0xad, 0x4a, 0x8e, 0xaa, 0x00, 0x0b, 0x43, 0xa3, 0x3b, 0xc0, - 0xb2, 0xbb, 0xc5, 0x02, 0xdd, 0x83, 0x45, 0xea, 0xd8, 0x6e, 0x70, 0x1d, 0x67, 0x38, 0x2d, 0xf9, - 0xf6, 0xaf, 0x06, 0x1e, 0xcb, 0x0d, 0xf9, 0xd5, 0x64, 0xdc, 0x15, 0xe9, 0xe8, 0xbf, 0x14, 0xf8, - 0x5a, 0x18, 0xcc, 0x11, 0x76, 0xad, 0x43, 0xec, 0x9e, 0xfa, 0xf7, 0x67, 0xb6, 0xb3, 0x7b, 0xb0, - 0x2e, 0xdb, 0xd7, 0xc2, 0xae, 0x13, 0x8d, 0x6a, 0x61, 0xef, 0xae, 0x0a, 0xf2, 0x21, 0xa7, 0xd6, - 0x03, 0x22, 0xba, 0x07, 0x05, 0xbf, 0x71, 0x27, 0x84, 0x44, 0xd7, 0x22, 0xc3, 0xb2, 0xc6, 0x25, - 0x62, 0x85, 0x9b, 0xff, 0x62, 0x85, 0xdb, 0x82, 0xcd, 0x94, 0x58, 0x65, 0x36, 0x7e, 0xa7, 0xf0, - 0x97, 0xba, 0x6e, 0x59, 0xef, 0x60, 0x56, 0xa7, 0x14, 0xb3, 0x1f, 0xf9, 0x55, 0x98, 0xc9, 0x5c, - 0x7b, 0x04, 0xd7, 0x5c, 0xff, 0x0e, 0xf3, 0xb5, 0xb6, 0x79, 0x71, 0x83, 0x81, 0xfc, 0x66, 0xf2, - 0xf3, 0x16, 0x73, 0x41, 0x3e, 0x70, 0xcb, 0x6e, 0xcc, 0xaf, 0x72, 0x91, 0x57, 0x2f, 0xc1, 0x5f, - 0x11, 0x50, 0xed, 0x37, 0x08, 0xe6, 0x9a, 0xd4, 0x46, 0x6d, 0x58, 0x0a, 0xae, 0x7b, 0x54, 0x49, - 0x79, 0x90, 0x27, 0x06, 0x66, 0xed, 0xb5, 0x29, 0x38, 0x85, 0x21, 0xdf, 0x40, 0xf0, 0x8e, 0x64, - 0x18, 0x18, 0x1b, 0x94, 0x33, 0x0c, 0x8c, 0x0f, 0xc0, 0xe8, 0x27, 0xb0, 0x28, 0xa6, 0x55, 0x74, - 0x27, 0x55, 0x28, 0x36, 0x1e, 0x6b, 0x77, 0xcf, 0xe4, 0x8b, 0x54, 0x8b, 0x19, 0x35, 0x43, 0x75, - 0x6c, 0x28, 0xce, 0x50, 0x1d, 0x1f, 0x76, 0xd1, 0x11, 0xcc, 0xfb, 0xc3, 0x24, 0xba, 0x95, 0x2a, - 0x30, 0x32, 0x07, 0x6b, 0xb7, 0xcf, 0xe0, 0x8a, 0x94, 0xfa, 0x13, 0x5f, 0x86, 0xd2, 0x91, 0x61, - 0x35, 0x43, 0xe9, 0xe8, 0xd8, 0x88, 0x3a, 0x90, 0x0b, 0xbf, 0xf0, 0xa0, 0x8c, 0xba, 0x8c, 0x7d, - 0x99, 0xd2, 0x5e, 0x9f, 0x86, 0x55, 0xda, 0x38, 0x81, 0xcb, 0xa3, 0x9f, 0x6b, 0xd0, 0x1b, 0x67, - 0xa4, 0x31, 0x6e, 0x69, 0x67, 0x4a, 0xee, 0xa8, 0x23, 0x83, 0x69, 0x31, 0xa3, 0x23, 0xc7, 0xc6, - 0xe4, 0x8c, 0x8e, 0x1c, 0x1f, 0x3d, 0x65, 0xc6, 0x04, 0x6a, 0xca, 0xce, 0x58, 0x0c, 0xc6, 0x67, - 0x67, 0x2c, 0x0e, 0xc2, 0xfc, 0x20, 0xc2, 0x27, 0x2c, 0x3d, 0x88, 0xb1, 0x67, 0x33, 0x23, 0x88, - 0xf1, 0x87, 0x0a, 0x3d, 0x86, 0xfc, 0xc8, 0xb4, 0x85, 0xbe, 0x9e, 0x2a, 0x39, 0x39, 0x67, 0x6a, - 0x6f, 0x4c, 0xc7, 0x2c, 0x2d, 0x3d, 0x85, 0x6b, 0xe3, 0x13, 0x10, 0xba, 0x97, 0xaa, 0x21, 0x65, - 0xce, 0xd3, 0x76, 0xcf, 0x21, 0x21, 0x0d, 0x3f, 0x81, 0xe5, 0xf8, 0x4f, 0x06, 0xa8, 0x9a, 0xaa, - 0x24, 0xf1, 0x47, 0x11, 0x4d, 0x9f, 0x9a, 0x5f, 0x9a, 0x7c, 0xae, 0xc0, 0x46, 0x2a, 0xc2, 0x46, - 0x6f, 0x67, 0x35, 0x40, 0xe6, 0x08, 0xa8, 0xed, 0xbf, 0x8a, 0xa8, 0x74, 0xea, 0x03, 0x05, 0xd6, - 0x92, 0x21, 0x2d, 0xda, 0x4b, 0xcf, 0x6a, 0x16, 0xfc, 0xd7, 0xbe, 0x75, 0x6e, 0x39, 0xe9, 0xcb, - 0x2f, 0x14, 0x50, 0xd3, 0x00, 0x22, 0x7a, 0x2b, 0x55, 0xeb, 0x19, 0x58, 0x5b, 0x7b, 0xfb, 0x15, - 0x24, 0xa5, 0x47, 0x3f, 0x57, 0xa0, 0x90, 0x04, 0xe9, 0xd0, 0x37, 0xce, 0xd0, 0x99, 0x88, 0x5c, - 0xb5, 0x6f, 0x9e, 0x53, 0x2a, 0xea, 0xd5, 0x38, 0x50, 0xcb, 0xe8, 0xd5, 0x44, 0x70, 0x99, 0xd1, - 0xab, 0xc9, 0x08, 0x10, 0xbd, 0x0f, 0x68, 0x12, 0x11, 0xa1, 0xda, 0x19, 0xfe, 0x27, 0x40, 0x45, - 0xed, 0xcd, 0x73, 0xc9, 0x48, 0xf3, 0xef, 0xc1, 0xca, 0x04, 0x7c, 0x41, 0xbb, 0x59, 0x6d, 0x9e, - 0x08, 0xcd, 0xb4, 0xda, 0x79, 0x44, 0x84, 0xed, 0x86, 0xfd, 0xf1, 0x8b, 0xa2, 0xf2, 0xc9, 0x8b, - 0xa2, 0xf2, 0xf9, 0x8b, 0xa2, 0xf2, 0xcb, 0x97, 0xc5, 0x0b, 0x9f, 0xbc, 0x2c, 0x5e, 0xf8, 0xeb, - 0xcb, 0xe2, 0x05, 0x58, 0x77, 0x48, 0xa2, 0xbe, 0x47, 0xca, 0x4f, 0x47, 0x3f, 0x18, 0x45, 0x2c, - 0x3b, 0x0e, 0x19, 0x59, 0xe9, 0xcf, 0x82, 0x5f, 0x60, 0xf9, 0x3c, 0xdb, 0x59, 0xe4, 0x3f, 0x72, - 0xbe, 0xf9, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x65, 0x86, 0x7a, 0x1f, 0xc7, 0x1e, 0x00, 0x00, + // 1983 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x59, 0x4f, 0x6c, 0x1b, 0x59, + 0x19, 0xef, 0xe4, 0x8f, 0x1b, 0x7f, 0x6e, 0xd3, 0xe6, 0xc5, 0x49, 0x26, 0x53, 0xe2, 0x38, 0xee, + 0x3f, 0xef, 0xb2, 0xf1, 0x34, 0x5e, 0x28, 0xdd, 0x08, 0x09, 0xd9, 0x09, 0x2d, 0x15, 0x18, 0xad, + 0x9c, 0x05, 0x04, 0x17, 0x6b, 0x3c, 0xf3, 0x32, 0x1d, 0xc5, 0x9e, 0x71, 0xe7, 0x3d, 0xbb, 0xcd, + 0x4a, 0x5c, 0xe0, 0xb4, 0x27, 0x60, 0x0f, 0x5c, 0xb8, 0x70, 0xe2, 0xb0, 0x07, 0xc4, 0x61, 0x05, + 0x77, 0x4e, 0x2b, 0x24, 0xa4, 0x15, 0x27, 0xc4, 0x61, 0x41, 0xad, 0x04, 0x2b, 0xce, 0x5c, 0xb8, + 0x20, 0xf4, 0xfe, 0xcc, 0x8c, 0xc7, 0x9e, 0x99, 0x24, 0x6d, 0x76, 0x57, 0x3d, 0x25, 0xef, 0x7d, + 0xff, 0x7f, 0xdf, 0xf7, 0xe6, 0x7d, 0xdf, 0x33, 0x6c, 0x0c, 0x7c, 0x6f, 0x84, 0x5d, 0xc3, 0x35, + 0xb1, 0xde, 0x37, 0xfc, 0x23, 0xec, 0xeb, 0xa3, 0x1d, 0x9d, 0x3e, 0xad, 0x0d, 0x7c, 0x8f, 0x7a, + 0xa8, 0x18, 0x91, 0x6b, 0x82, 0x5c, 0x1b, 0xed, 0x68, 0xeb, 0xb6, 0xe7, 0xd9, 0x3d, 0xac, 0x73, + 0x9e, 0xee, 0xf0, 0x50, 0x37, 0xdc, 0x63, 0x21, 0xa0, 0xad, 0x9b, 0x1e, 0xe9, 0x7b, 0xa4, 0xc3, + 0x57, 0xba, 0x58, 0x48, 0x52, 0xd1, 0xf6, 0x6c, 0x4f, 0xec, 0xb3, 0xff, 0xe4, 0x6e, 0x49, 0xf0, + 0xe8, 0x5d, 0x83, 0x60, 0x7d, 0xb4, 0xd3, 0xc5, 0xd4, 0xd8, 0xd1, 0x4d, 0xcf, 0x71, 0xa7, 0xe8, + 0xee, 0x51, 0x48, 0x67, 0x0b, 0x49, 0x5f, 0x93, 0xf4, 0x3e, 0xb1, 0x99, 0xe7, 0x7d, 0x62, 0x4b, + 0xc2, 0x4d, 0xa7, 0x6b, 0xea, 0xc6, 0x60, 0xd0, 0x73, 0x4c, 0x83, 0x3a, 0x9e, 0x4b, 0x74, 0xea, + 0x1b, 0x2e, 0x39, 0x8c, 0x47, 0xa8, 0x6d, 0x25, 0x02, 0x20, 0x63, 0x15, 0x2c, 0xb7, 0x12, 0x59, + 0x0c, 0xd3, 0xc4, 0x84, 0xd8, 0xbe, 0xe1, 0x52, 0xc1, 0x57, 0xf9, 0x83, 0x02, 0x6a, 0x8b, 0xd8, + 0x0f, 0xd8, 0x56, 0xa3, 0xd7, 0xf3, 0x9e, 0x30, 0x89, 0x36, 0x7e, 0x3c, 0xc4, 0x84, 0xa2, 0x22, + 0xcc, 0x5b, 0xd8, 0xf5, 0xfa, 0xaa, 0x52, 0x56, 0xaa, 0xf9, 0xb6, 0x58, 0xa0, 0x1b, 0x70, 0xd9, + 0xb0, 0xfa, 0x8e, 0xeb, 0x10, 0xea, 0x1b, 0xd4, 0xf3, 0xd5, 0x19, 0x4e, 0x8d, 0x6f, 0x22, 0x15, + 0x2e, 0x72, 0x3b, 0x18, 0xab, 0xb3, 0x9c, 0x1e, 0x2c, 0xd1, 0x37, 0x21, 0x6f, 0x04, 0x96, 0xd4, + 0xb9, 0xb2, 0x52, 0x2d, 0xd4, 0x8b, 0x35, 0x91, 0x9d, 0x5a, 0x90, 0x9d, 0x5a, 0xc3, 0x3d, 0x6e, + 0x2e, 0xfd, 0xe9, 0xc3, 0xed, 0xcb, 0xf7, 0x31, 0x0e, 0xfd, 0x7a, 0xd8, 0x8e, 0x24, 0x2b, 0xd7, + 0x60, 0x3d, 0xc1, 0x71, 0x32, 0xf0, 0x5c, 0x82, 0x2b, 0x1f, 0xcc, 0xc3, 0x72, 0x8b, 0xd8, 0x0d, + 0xcb, 0x6a, 0xf1, 0xe0, 0x83, 0x88, 0xba, 0x90, 0x33, 0xfa, 0xde, 0xd0, 0xa5, 0x3c, 0xa4, 0x42, + 0x7d, 0xbd, 0x26, 0xd3, 0xcd, 0x52, 0x59, 0x93, 0xa9, 0xaa, 0xed, 0x79, 0x8e, 0xdb, 0xd4, 0x3f, + 0xfa, 0x64, 0xf3, 0xc2, 0xdf, 0x3e, 0xd9, 0xbc, 0x6d, 0x3b, 0xf4, 0xd1, 0xb0, 0x5b, 0x33, 0xbd, + 0xbe, 0xac, 0x0d, 0xf9, 0x67, 0x9b, 0x58, 0x47, 0x3a, 0x3d, 0x1e, 0x60, 0xc2, 0x05, 0xda, 0x52, + 0x33, 0x8b, 0xbc, 0x6f, 0xb8, 0x86, 0x8d, 0xfd, 0x20, 0x72, 0xb9, 0x44, 0x5b, 0x70, 0xe9, 0xd0, + 0xf7, 0xfa, 0x1d, 0xc3, 0xb2, 0x7c, 0x4c, 0x08, 0x0f, 0x3e, 0xdf, 0x2e, 0xb0, 0xbd, 0x86, 0xd8, + 0x42, 0xbb, 0x90, 0x23, 0xd4, 0xa0, 0x43, 0xa2, 0xce, 0x97, 0x95, 0xea, 0x62, 0xbd, 0x52, 0x4b, + 0xaa, 0xe6, 0x9a, 0x88, 0xea, 0x80, 0x73, 0xb6, 0xa5, 0x04, 0x6a, 0x40, 0x41, 0x70, 0x74, 0x98, + 0x57, 0x6a, 0x8e, 0x2b, 0x28, 0x67, 0x29, 0x78, 0xe7, 0x78, 0x80, 0xdb, 0xd0, 0x0f, 0xff, 0x47, + 0xdf, 0x82, 0x82, 0xa8, 0x91, 0x4e, 0xcf, 0x21, 0x54, 0xbd, 0x58, 0x9e, 0xad, 0x16, 0xea, 0x5b, + 0xc9, 0x2a, 0x1a, 0x9c, 0x91, 0x27, 0xa0, 0x39, 0xc7, 0xc0, 0x6a, 0x83, 0x90, 0xfd, 0x8e, 0x43, + 0x28, 0x8b, 0x95, 0x0c, 0x07, 0x83, 0xde, 0x71, 0xe7, 0xd0, 0x79, 0x8a, 0x2d, 0x75, 0xa1, 0xac, + 0x54, 0x17, 0xda, 0x05, 0xb1, 0x77, 0x9f, 0x6d, 0xa1, 0x7b, 0xa0, 0xf2, 0x74, 0x76, 0x6c, 0x6f, + 0x84, 0x7d, 0xae, 0xbe, 0x63, 0x7a, 0x2e, 0xf5, 0xbd, 0x9e, 0x9a, 0xe7, 0xec, 0xab, 0x9c, 0xfe, + 0x20, 0x24, 0xef, 0x09, 0x2a, 0xaa, 0xc3, 0x8a, 0x90, 0x3c, 0xf4, 0x7c, 0x13, 0x5b, 0x9d, 0xe0, + 0x94, 0xa8, 0xc0, 0xc5, 0x96, 0x39, 0xf1, 0x3e, 0xa7, 0xbd, 0x23, 0x49, 0x48, 0x87, 0x65, 0x1f, + 0x3f, 0x1e, 0x3a, 0x3e, 0xb6, 0x3a, 0x06, 0xa5, 0xbe, 0xd3, 0x1d, 0x52, 0x4c, 0xd4, 0x42, 0x79, + 0xb6, 0x9a, 0x6f, 0xa3, 0x80, 0xd4, 0x08, 0x29, 0x68, 0x13, 0xf2, 0x43, 0x62, 0x75, 0x4c, 0xec, + 0x52, 0xa2, 0x5e, 0x2a, 0x2b, 0xd5, 0xb9, 0xe6, 0x8c, 0xaa, 0xb4, 0x17, 0x86, 0xc4, 0xda, 0x63, + 0x7b, 0x68, 0x15, 0x72, 0x23, 0xaf, 0x37, 0xec, 0x63, 0xf5, 0x32, 0xa3, 0xb6, 0xe5, 0x0a, 0x5d, + 0x13, 0x82, 0x7d, 0xa7, 0xd7, 0x23, 0xea, 0x22, 0x27, 0x31, 0xa1, 0x16, 0x5b, 0xef, 0x2e, 0xfd, + 0xe4, 0x5f, 0xbf, 0x7b, 0x3d, 0x56, 0x06, 0x95, 0x55, 0x28, 0xc6, 0x6b, 0x55, 0x16, 0xf1, 0x6f, + 0x94, 0xa0, 0x88, 0x05, 0xd4, 0xe7, 0x71, 0x2c, 0xbf, 0x01, 0x39, 0x91, 0x24, 0x75, 0xf6, 0x6c, + 0xb9, 0x95, 0x62, 0xbb, 0x88, 0xf9, 0x1f, 0x57, 0x1a, 0x05, 0x10, 0xf8, 0x29, 0x03, 0xf8, 0x85, + 0x02, 0xab, 0x2d, 0x62, 0xef, 0xe3, 0x1e, 0xa6, 0xf8, 0xfc, 0x62, 0xb8, 0x0d, 0x57, 0x7c, 0xdc, + 0xf7, 0x46, 0x2c, 0x91, 0xf2, 0x24, 0x89, 0x83, 0xb6, 0x28, 0xb7, 0xe5, 0x61, 0x4a, 0xf4, 0x75, + 0x1d, 0xd6, 0xa6, 0x5c, 0x92, 0xee, 0x5a, 0x80, 0x5a, 0xc4, 0xbe, 0xef, 0xb8, 0x46, 0xcf, 0x79, + 0xf7, 0x3c, 0x3e, 0x82, 0x89, 0x0e, 0xac, 0xf0, 0xa4, 0x46, 0x56, 0x62, 0xc6, 0x1b, 0x26, 0x75, + 0x46, 0x06, 0xfd, 0x8c, 0x8d, 0x47, 0x56, 0xa4, 0x71, 0x13, 0xae, 0xb6, 0x88, 0xbd, 0xc7, 0x8a, + 0xa0, 0x77, 0x1e, 0xa6, 0x97, 0x99, 0xe9, 0x45, 0x1f, 0x3f, 0x31, 0xfc, 0x30, 0x47, 0x95, 0x65, + 0x58, 0x1a, 0x33, 0x22, 0x2d, 0x77, 0xb9, 0x65, 0x91, 0x8e, 0xcf, 0x2a, 0x68, 0x61, 0x38, 0xb0, + 0x21, 0x0d, 0xff, 0x56, 0x81, 0xc5, 0x16, 0xb1, 0x5b, 0x8e, 0x4b, 0x3f, 0xcf, 0xcb, 0xe1, 0xc5, + 0xa3, 0x58, 0x82, 0x2b, 0xa1, 0xbf, 0xf1, 0x18, 0x9a, 0x43, 0xdf, 0x7d, 0x95, 0x62, 0x10, 0xfe, + 0xca, 0x18, 0x3e, 0x55, 0x78, 0xe1, 0xff, 0xc0, 0xa1, 0x8f, 0x2c, 0xdf, 0x78, 0x72, 0x1e, 0xdf, + 0x87, 0x0d, 0x00, 0xea, 0x4d, 0x7c, 0x1a, 0xf2, 0xd4, 0x0b, 0xae, 0x58, 0x33, 0x84, 0x68, 0x8e, + 0x7f, 0x02, 0x33, 0x20, 0xba, 0xc3, 0x20, 0xfa, 0xe0, 0xef, 0x9b, 0xd5, 0x53, 0x42, 0x44, 0x02, + 0x8c, 0x32, 0x0e, 0x5f, 0x14, 0xa9, 0x44, 0xe0, 0x3f, 0x02, 0x81, 0xe0, 0xa2, 0xfa, 0x42, 0x33, + 0x39, 0x9b, 0x84, 0xe7, 0x29, 0xda, 0x96, 0x38, 0xe4, 0xf3, 0x13, 0x90, 0x67, 0xa0, 0x11, 0x45, + 0x2d, 0xd1, 0xf8, 0xa7, 0x02, 0x2b, 0x2d, 0x62, 0x3f, 0xec, 0x9a, 0x93, 0x80, 0xbc, 0xaf, 0xc0, + 0x42, 0x78, 0xd1, 0x0b, 0x4c, 0x5e, 0xab, 0x39, 0x5d, 0xb3, 0x36, 0xde, 0x30, 0xd7, 0x02, 0x0e, + 0xde, 0xe4, 0x44, 0xfa, 0x9b, 0xdf, 0x96, 0x18, 0xed, 0x4d, 0x63, 0xe4, 0x74, 0xcd, 0x6d, 0xdb, + 0xd3, 0x47, 0xf7, 0xf4, 0xbe, 0x67, 0x0d, 0x7b, 0x98, 0xb0, 0x16, 0x7c, 0xac, 0xf5, 0x16, 0xc0, + 0x8d, 0x3b, 0x1b, 0xfa, 0xf1, 0x12, 0x67, 0x41, 0xe5, 0x77, 0x63, 0x2c, 0x4e, 0x09, 0xc1, 0x9f, + 0x15, 0xd0, 0x5a, 0xc4, 0x3e, 0xc0, 0x74, 0x9f, 0x55, 0x7d, 0x0b, 0x53, 0xc3, 0x32, 0xa8, 0x11, + 0xe0, 0x30, 0x84, 0x85, 0xbe, 0xdc, 0x92, 0x30, 0x6c, 0x44, 0xa5, 0xe1, 0x1e, 0x85, 0xa5, 0x11, + 0xc8, 0x35, 0x77, 0x65, 0xe8, 0xf5, 0xcc, 0xf2, 0x78, 0x2a, 0xc6, 0x15, 0x19, 0x6c, 0x60, 0x33, + 0x34, 0xf5, 0x12, 0x91, 0x6e, 0xc0, 0xb5, 0xc4, 0x70, 0x64, 0xb8, 0xff, 0x9b, 0x83, 0xeb, 0xa2, + 0x7d, 0x08, 0x2e, 0xc5, 0xe0, 0x7e, 0x7a, 0xc5, 0x7a, 0xf7, 0x89, 0xfe, 0x7b, 0xfe, 0xe5, 0xfb, + 0xef, 0xdc, 0xf9, 0xf5, 0xdf, 0x17, 0xcf, 0xd6, 0x7f, 0x2f, 0xbc, 0x58, 0xff, 0x9d, 0x3f, 0x73, + 0xff, 0x0d, 0xa7, 0xeb, 0xbf, 0x0b, 0x99, 0xfd, 0xf7, 0xa5, 0xf4, 0xfe, 0xfb, 0xf2, 0xc9, 0xfd, + 0xf7, 0x2d, 0xb8, 0x91, 0x5d, 0x7f, 0xb2, 0x50, 0xff, 0xab, 0x40, 0x99, 0x15, 0x32, 0x87, 0xf0, + 0xa1, 0x6b, 0xfa, 0xd8, 0x20, 0xf8, 0x6d, 0xdf, 0x1b, 0x78, 0xc4, 0xe8, 0x7d, 0x9e, 0x55, 0x7a, + 0x13, 0x16, 0xa9, 0xe1, 0xdb, 0x98, 0x86, 0xd5, 0x28, 0xcf, 0xa2, 0xd8, 0x0d, 0xea, 0xf1, 0x2e, + 0xe4, 0x8d, 0x21, 0x7d, 0xe4, 0xf9, 0x0e, 0x3d, 0x16, 0xe5, 0xdc, 0x54, 0xff, 0xf2, 0xe1, 0x76, + 0x51, 0x3a, 0x24, 0xd9, 0x0e, 0xa8, 0xef, 0xb8, 0x76, 0x3b, 0x62, 0xdd, 0x45, 0x9f, 0xfe, 0x7a, + 0x53, 0x61, 0x30, 0x45, 0x7b, 0x95, 0xeb, 0xb0, 0x95, 0x11, 0xba, 0x04, 0xe8, 0x97, 0x33, 0x50, + 0x69, 0x11, 0xfb, 0x7b, 0x03, 0x4b, 0xb6, 0xb0, 0xf1, 0x8c, 0x66, 0xdf, 0xed, 0x5f, 0x07, 0x4d, + 0xb4, 0xef, 0x9d, 0xa4, 0x32, 0x99, 0xe1, 0x65, 0xa2, 0x0a, 0x8e, 0x69, 0xd5, 0xe8, 0x2e, 0xac, + 0x19, 0x96, 0x95, 0x28, 0x3a, 0xcb, 0x45, 0x57, 0x0c, 0xcb, 0x4a, 0x90, 0x7b, 0x00, 0x28, 0x28, + 0xde, 0x4e, 0x04, 0xd6, 0xdc, 0x09, 0x60, 0x2d, 0x05, 0x32, 0x8d, 0x10, 0xb4, 0x6b, 0x01, 0x68, + 0x09, 0xfa, 0x2a, 0x37, 0xf9, 0x17, 0x2e, 0x1d, 0x17, 0x89, 0xdf, 0xef, 0x15, 0x28, 0x85, 0x7c, + 0xf1, 0xe3, 0x93, 0x8d, 0x5d, 0xea, 0x79, 0x9c, 0x49, 0x3f, 0x8f, 0xe7, 0x59, 0x1d, 0x5b, 0xb0, + 0x99, 0xea, 0xb7, 0x8c, 0xed, 0x3d, 0xf1, 0xd0, 0x74, 0x80, 0x69, 0xc3, 0x34, 0x59, 0x15, 0xef, + 0x8f, 0x5d, 0x69, 0xc9, 0x51, 0x15, 0x61, 0x7e, 0x64, 0xf4, 0x86, 0x58, 0x56, 0xb7, 0x58, 0xa0, + 0x3b, 0x90, 0x23, 0x8e, 0xed, 0x06, 0x5f, 0xe8, 0x0c, 0xa7, 0x25, 0xdf, 0xee, 0x95, 0xc0, 0x63, + 0xb9, 0x21, 0x9f, 0x8e, 0x26, 0x5d, 0x91, 0x8e, 0xfe, 0x5b, 0x81, 0x2f, 0x85, 0xc1, 0x1c, 0x60, + 0xd7, 0xda, 0xc7, 0xee, 0x31, 0xfb, 0xa4, 0x66, 0x3b, 0x7b, 0x17, 0xd6, 0x64, 0xf9, 0x5a, 0xd8, + 0x75, 0xa2, 0xd1, 0x34, 0xac, 0xdd, 0x15, 0x41, 0xde, 0xe7, 0xd4, 0x46, 0x40, 0x44, 0x77, 0xa0, + 0xc8, 0x0a, 0x77, 0x4a, 0x48, 0x54, 0x2d, 0x32, 0x2c, 0x6b, 0x52, 0x22, 0x96, 0xb8, 0xb9, 0x97, + 0x4b, 0xdc, 0x26, 0x6c, 0xa4, 0xc4, 0x2a, 0xd1, 0xf8, 0xa3, 0xc2, 0x2f, 0xef, 0x86, 0x65, 0x7d, + 0x17, 0xd3, 0x06, 0x21, 0x98, 0x7e, 0x9f, 0x65, 0xe1, 0x5c, 0xe6, 0xf8, 0x03, 0xb8, 0xea, 0xb2, + 0x6f, 0x18, 0xd3, 0xda, 0xe1, 0xc9, 0x0d, 0x5e, 0x25, 0xae, 0x27, 0xdf, 0x78, 0x31, 0x17, 0xe4, + 0x9d, 0xb7, 0xe8, 0xc6, 0xfc, 0x4a, 0x6c, 0x40, 0x4a, 0x3c, 0xa3, 0x09, 0x31, 0x88, 0x20, 0xeb, + 0xbf, 0x42, 0x30, 0xdb, 0x22, 0x36, 0xea, 0xc0, 0x42, 0x70, 0x05, 0xa0, 0x6a, 0xca, 0xbd, 0x3d, + 0xf5, 0x40, 0xa0, 0xbd, 0x76, 0x0a, 0x4e, 0x61, 0x88, 0x19, 0x08, 0xee, 0x96, 0x0c, 0x03, 0x13, + 0x8f, 0x00, 0x19, 0x06, 0x26, 0x07, 0x79, 0xf4, 0x43, 0xc8, 0x89, 0x01, 0x1b, 0xdd, 0x4a, 0x15, + 0x8a, 0x8d, 0xf9, 0xda, 0xed, 0x13, 0xf9, 0x22, 0xd5, 0x62, 0x84, 0xce, 0x50, 0x1d, 0x9b, 0xe3, + 0x33, 0x54, 0xc7, 0x67, 0x71, 0x74, 0x00, 0x73, 0x6c, 0xae, 0x45, 0x37, 0x52, 0x05, 0xc6, 0xc6, + 0x74, 0xed, 0xe6, 0x09, 0x5c, 0x91, 0x52, 0x36, 0x68, 0x66, 0x28, 0x1d, 0x9b, 0x9b, 0x33, 0x94, + 0x8e, 0x4f, 0xab, 0xa8, 0x0b, 0xf9, 0xf0, 0x99, 0x0b, 0x65, 0xe4, 0x65, 0xe2, 0xc9, 0x4e, 0x7b, + 0xfd, 0x34, 0xac, 0xd2, 0xc6, 0x11, 0x5c, 0x1a, 0x7f, 0x9e, 0x42, 0x6f, 0x9c, 0x00, 0x63, 0xdc, + 0xd2, 0xf6, 0x29, 0xb9, 0xa3, 0x8a, 0x0c, 0x06, 0xd2, 0x8c, 0x8a, 0x9c, 0x98, 0xce, 0x33, 0x2a, + 0x72, 0x72, 0xba, 0x95, 0x88, 0x89, 0x4e, 0x2a, 0x1b, 0xb1, 0x58, 0xb7, 0x9f, 0x8d, 0x58, 0xbc, + 0x31, 0x63, 0x41, 0x84, 0xd7, 0x5a, 0x7a, 0x10, 0x13, 0x57, 0x69, 0x46, 0x10, 0x93, 0x97, 0x17, + 0x7a, 0x04, 0x85, 0xb1, 0x41, 0x0d, 0x7d, 0x39, 0x55, 0x72, 0x7a, 0x6c, 0xd5, 0xde, 0x38, 0x1d, + 0xb3, 0xb4, 0xf4, 0x04, 0xae, 0x4e, 0x0e, 0x4a, 0xe8, 0x4e, 0xaa, 0x86, 0x94, 0x11, 0x51, 0xdb, + 0x39, 0x83, 0x84, 0x34, 0xfc, 0x18, 0x16, 0xe3, 0xbf, 0xa5, 0xa0, 0x5a, 0xaa, 0x92, 0xc4, 0x5f, + 0x8b, 0x34, 0xfd, 0xd4, 0xfc, 0xd2, 0xe4, 0xfb, 0x0a, 0xac, 0xa7, 0x76, 0xdd, 0xe8, 0xad, 0xac, + 0x02, 0xc8, 0x9c, 0x14, 0xb5, 0xdd, 0x17, 0x11, 0x95, 0x4e, 0xbd, 0xa7, 0xc0, 0x6a, 0x72, 0x9b, + 0x8b, 0xee, 0xa6, 0xa3, 0x9a, 0x35, 0x12, 0x68, 0x5f, 0x3b, 0xb3, 0x9c, 0xf4, 0xe5, 0x67, 0x0a, + 0xa8, 0x69, 0x4d, 0x23, 0xba, 0x97, 0xaa, 0xf5, 0x84, 0xfe, 0x5b, 0x7b, 0xeb, 0x05, 0x24, 0xa5, + 0x47, 0x3f, 0x55, 0xa0, 0x98, 0xd4, 0xe6, 0xa1, 0xaf, 0x9c, 0xa0, 0x33, 0xb1, 0x9b, 0xd5, 0xbe, + 0x7a, 0x46, 0xa9, 0xa8, 0x56, 0xe3, 0xcd, 0x5b, 0x46, 0xad, 0x26, 0x36, 0x9c, 0x19, 0xb5, 0x9a, + 0xdc, 0x15, 0xa2, 0x1f, 0x03, 0x9a, 0xee, 0x92, 0x50, 0xfd, 0x04, 0xff, 0x13, 0xda, 0x47, 0xed, + 0xcd, 0x33, 0xc9, 0x48, 0xf3, 0xef, 0xc2, 0xd2, 0x54, 0xfb, 0x82, 0x76, 0xb2, 0xca, 0x3c, 0xb1, + 0x5d, 0xd3, 0xea, 0x67, 0x11, 0x11, 0xb6, 0x9b, 0xf6, 0x47, 0xcf, 0x4a, 0xca, 0xc7, 0xcf, 0x4a, + 0xca, 0x3f, 0x9e, 0x95, 0x94, 0x9f, 0x3f, 0x2f, 0x5d, 0xf8, 0xf8, 0x79, 0xe9, 0xc2, 0x5f, 0x9f, + 0x97, 0x2e, 0xc0, 0x9a, 0xe3, 0x25, 0xea, 0x7b, 0x5b, 0xf9, 0xd1, 0xf8, 0x5b, 0x53, 0xc4, 0xb2, + 0xed, 0x78, 0x63, 0x2b, 0xfd, 0x69, 0xf0, 0xd3, 0x34, 0x9f, 0x71, 0xbb, 0x39, 0xfe, 0xeb, 0xef, + 0x9b, 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff, 0xc8, 0x13, 0xd1, 0x2a, 0xe0, 0x1f, 0x00, 0x00, } func (this *MsgSupplyIncreaseProposalRequest) Equal(that interface{}) bool { diff --git a/x/metadata/types/query.pb.go b/x/metadata/types/query.pb.go index 7fab3ac688..9eaab6c605 100644 --- a/x/metadata/types/query.pb.go +++ b/x/metadata/types/query.pb.go @@ -3585,211 +3585,211 @@ func init() { } var fileDescriptor_a68790bc0b96eeb9 = []byte{ - // 3256 bytes of a gzipped FileDescriptorProto + // 3258 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x1c, 0x5b, 0x6c, 0x1c, 0x57, - 0x35, 0x77, 0x36, 0x8e, 0xe3, 0xe3, 0x67, 0xae, 0x1f, 0x59, 0x6f, 0x12, 0xaf, 0x3b, 0x4d, 0x1c, + 0x35, 0x77, 0x36, 0x8e, 0xe3, 0xe3, 0x67, 0xae, 0x1f, 0x59, 0x6f, 0x12, 0x8f, 0x3b, 0x4d, 0x1c, 0xc7, 0x49, 0x76, 0x6b, 0x3b, 0xaf, 0xa6, 0x2d, 0xc5, 0x4e, 0x9b, 0x60, 0x92, 0x36, 0xe9, 0x58, 0x6d, 0x85, 0xa5, 0xca, 0x9a, 0xec, 0x4e, 0xdc, 0x05, 0xef, 0xce, 0x76, 0x67, 0x36, 0xad, 0x65, 0x59, 0x40, 0x05, 0x95, 0x10, 0x55, 0x69, 0x55, 0xa8, 0x0a, 0x08, 0x21, 0x51, 0x55, 0x88, 0x8a, 0x1f, 0x90, 0x2a, 0x54, 0xa1, 0xf2, 0x51, 0x84, 0x54, 0x3e, 0x10, 0x95, 0xca, 0x07, 0xf0, 0xb1, - 0x42, 0x71, 0x91, 0x2a, 0xf1, 0x03, 0x4b, 0x15, 0x09, 0xbe, 0xd0, 0xde, 0xc7, 0xec, 0x9d, 0x99, - 0x3b, 0xbb, 0x33, 0x1b, 0x6f, 0x64, 0xfc, 0xe7, 0xd9, 0x39, 0xaf, 0x7b, 0x9e, 0xf7, 0x9e, 0x7b, - 0xc6, 0xa0, 0x16, 0x4b, 0xe6, 0x4d, 0xa3, 0xa0, 0x17, 0x32, 0x46, 0x3a, 0x6f, 0xd8, 0x7a, 0x56, - 0xb7, 0xf5, 0xf4, 0xcd, 0xe9, 0xf4, 0x73, 0x65, 0xa3, 0xb4, 0x96, 0x2a, 0x96, 0x4c, 0xdb, 0xc4, - 0x23, 0x75, 0x98, 0x14, 0x87, 0x49, 0xdd, 0x9c, 0x4e, 0x0c, 0xad, 0x98, 0x2b, 0x26, 0x01, 0x49, - 0xd7, 0xfe, 0xa2, 0xd0, 0x89, 0xa9, 0x8c, 0x69, 0xe5, 0x4d, 0x2b, 0x7d, 0x5d, 0xb7, 0x0c, 0x4a, - 0x26, 0x7d, 0x73, 0xfa, 0xba, 0x61, 0xeb, 0xd3, 0xe9, 0xa2, 0xbe, 0x92, 0x2b, 0xe8, 0x76, 0xce, - 0x2c, 0x30, 0xd8, 0x83, 0x2b, 0xa6, 0xb9, 0xb2, 0x6a, 0xa4, 0xf5, 0x62, 0x2e, 0xad, 0x17, 0x0a, - 0xa6, 0x4d, 0x5e, 0x5a, 0xec, 0xed, 0x91, 0x00, 0xd9, 0x1c, 0x19, 0x28, 0x58, 0xd0, 0x12, 0xac, - 0x8c, 0x59, 0x34, 0xb8, 0x50, 0x41, 0x30, 0x45, 0x23, 0x93, 0xbb, 0x91, 0xcb, 0x88, 0x42, 0x4d, - 0x06, 0xc0, 0x9a, 0xd7, 0xbf, 0x6c, 0x64, 0x6c, 0xcb, 0x36, 0x4b, 0x8c, 0xaa, 0xfa, 0x25, 0xc0, - 0x4f, 0xd4, 0x16, 0x78, 0x4d, 0x2f, 0xe9, 0x79, 0x4b, 0x33, 0x9e, 0x2b, 0x1b, 0x96, 0x8d, 0x2f, - 0x40, 0x7f, 0xae, 0x90, 0x59, 0x2d, 0x67, 0x8d, 0xe5, 0x12, 0xfd, 0x29, 0x7e, 0x7d, 0x1c, 0x4d, - 0xee, 0x9d, 0x4f, 0x54, 0x2b, 0xc9, 0x91, 0x35, 0x3d, 0xbf, 0x7a, 0x5e, 0xf5, 0x00, 0xa8, 0x5a, - 0x1f, 0xfb, 0x85, 0x11, 0x51, 0xbf, 0x8f, 0x60, 0xd0, 0x45, 0xdb, 0x2a, 0x9a, 0x05, 0xcb, 0xc0, - 0x0f, 0xc2, 0x9e, 0x22, 0xf9, 0x25, 0x8e, 0xc6, 0xd1, 0x64, 0xf7, 0xcc, 0x58, 0x4a, 0x6e, 0x9c, - 0x14, 0xc5, 0x9b, 0xdf, 0xfd, 0x61, 0x25, 0xb9, 0x4b, 0x63, 0x38, 0xf8, 0x11, 0xe8, 0x14, 0x45, - 0xea, 0x9e, 0x99, 0x0a, 0x42, 0xf7, 0xaf, 0x4b, 0xe3, 0xa8, 0xea, 0xef, 0x63, 0xd0, 0xb3, 0x58, - 0x53, 0x2e, 0x5f, 0x71, 0x0a, 0xf6, 0x12, 0x65, 0x2f, 0xe7, 0xb2, 0x44, 0xac, 0xae, 0xf9, 0xc1, - 0x6a, 0x25, 0xd9, 0x4f, 0x97, 0xca, 0xdf, 0xa8, 0x5a, 0x27, 0xf9, 0x73, 0x21, 0x8b, 0xcf, 0x43, - 0x8f, 0x65, 0x58, 0x56, 0xce, 0x2c, 0x2c, 0xeb, 0xd9, 0x6c, 0x29, 0xae, 0x10, 0x9c, 0xfd, 0xd5, - 0x4a, 0x72, 0x90, 0xe1, 0x08, 0x6f, 0x55, 0xad, 0x9b, 0x3d, 0xce, 0x65, 0xb3, 0x25, 0x7c, 0x16, - 0xba, 0x4b, 0x46, 0xc6, 0x2c, 0x65, 0x29, 0x6a, 0x8c, 0xa0, 0x8e, 0x54, 0x2b, 0x49, 0x4c, 0x51, - 0x85, 0x97, 0xaa, 0x06, 0xf4, 0x89, 0x20, 0x5e, 0x84, 0x01, 0xae, 0x75, 0x46, 0xcf, 0x8a, 0x03, - 0xb1, 0xcb, 0x81, 0x6a, 0x25, 0xb9, 0xdf, 0x6d, 0x17, 0x0e, 0xa1, 0x6a, 0xdc, 0x96, 0x8b, 0xec, - 0x17, 0xb7, 0x79, 0x6b, 0xd4, 0xad, 0x78, 0x77, 0xb0, 0x79, 0x09, 0x80, 0x68, 0x5e, 0xf2, 0x03, - 0x9e, 0x87, 0x7e, 0xe3, 0x05, 0x0a, 0x93, 0xcb, 0x2e, 0xe7, 0x0a, 0x37, 0xcc, 0x78, 0x8f, 0x97, - 0x88, 0x07, 0x40, 0xd5, 0x7a, 0xd9, 0x2f, 0x0b, 0xd9, 0x85, 0xc2, 0x0d, 0x73, 0x6b, 0xfc, 0xec, - 0x0f, 0x0a, 0xf4, 0x32, 0x5b, 0x32, 0x0f, 0x3b, 0x0f, 0x1d, 0xc4, 0x4e, 0xcc, 0xc1, 0x0e, 0x07, - 0x79, 0x08, 0xc1, 0x7a, 0xba, 0xa4, 0x17, 0x8b, 0x46, 0x49, 0xa3, 0x28, 0x58, 0x87, 0xbd, 0x8e, - 0x6e, 0x95, 0xf1, 0xd8, 0x64, 0xf7, 0xcc, 0x44, 0x20, 0x3a, 0x85, 0x63, 0x04, 0xe6, 0x0f, 0x55, - 0x2b, 0xc9, 0x51, 0x97, 0xf1, 0xad, 0x13, 0x66, 0x3e, 0x67, 0x1b, 0xf9, 0xa2, 0xbd, 0xa6, 0x6a, - 0x0e, 0x59, 0xfc, 0x4c, 0xcd, 0x85, 0xa9, 0xda, 0x63, 0x84, 0xc3, 0x91, 0x20, 0x0e, 0x54, 0xd7, - 0x9c, 0xc1, 0xc1, 0x6a, 0x25, 0x19, 0x17, 0x5d, 0xc4, 0x45, 0x9f, 0xd3, 0xc4, 0x9f, 0xf3, 0x46, - 0x48, 0xe3, 0xf5, 0xfb, 0x62, 0xe3, 0x87, 0x0a, 0x8b, 0x0d, 0xc6, 0x17, 0xcf, 0xba, 0xd5, 0x79, - 0xa8, 0x31, 0x39, 0x47, 0x8f, 0xbd, 0x3c, 0x6c, 0xa8, 0x73, 0x28, 0x04, 0xf9, 0xde, 0x86, 0xc8, - 0xd4, 0x2d, 0xe6, 0xe3, 0xd5, 0x4a, 0x72, 0xc8, 0x1d, 0x7a, 0xcc, 0x7f, 0xba, 0xad, 0x3a, 0x18, - 0xb6, 0x00, 0xd3, 0xd7, 0xb5, 0x14, 0xe8, 0xf0, 0x89, 0x11, 0x3e, 0x47, 0x1b, 0xf2, 0x59, 0x2c, - 0x1a, 0x19, 0xc6, 0x4b, 0xb4, 0x9a, 0x8f, 0x98, 0xaa, 0xf5, 0x5b, 0x6e, 0x78, 0x75, 0x13, 0xc1, - 0x00, 0xa1, 0x61, 0xcd, 0xad, 0xae, 0xf2, 0xec, 0xb1, 0x5d, 0x62, 0x01, 0x5f, 0x04, 0xa8, 0x57, - 0xa8, 0x78, 0x86, 0xa8, 0x62, 0x22, 0x45, 0xcb, 0x59, 0xaa, 0x56, 0xce, 0x52, 0xb4, 0x2a, 0xb2, - 0x72, 0x96, 0xba, 0xa6, 0xaf, 0x38, 0x0e, 0x20, 0x60, 0xaa, 0x15, 0x04, 0xfb, 0x84, 0x55, 0xd6, - 0x33, 0x37, 0x51, 0x47, 0x2d, 0x73, 0xc7, 0x42, 0x07, 0x16, 0xc3, 0xc1, 0xf3, 0x5e, 0xbf, 0x9c, - 0x6c, 0x88, 0x2e, 0xe8, 0xd7, 0xf1, 0x4d, 0x7c, 0x49, 0xb2, 0xbe, 0xa3, 0x4d, 0xd7, 0x47, 0xc5, - 0x77, 0x2d, 0xf0, 0x76, 0x0c, 0xfa, 0x79, 0x3e, 0x6c, 0xb5, 0x06, 0x9c, 0x02, 0xe0, 0x59, 0x3e, - 0x97, 0x65, 0x15, 0x60, 0xb8, 0x5a, 0x49, 0xee, 0x73, 0x57, 0x80, 0x1a, 0x4e, 0x17, 0x7b, 0x58, - 0xc8, 0xb6, 0x9e, 0xfd, 0xeb, 0x88, 0x05, 0x3d, 0x6f, 0xc4, 0x77, 0x07, 0x20, 0xd6, 0x5e, 0x3a, - 0x88, 0x8f, 0xeb, 0x79, 0x03, 0x3f, 0x04, 0xbd, 0x4e, 0x51, 0x20, 0x71, 0x4c, 0x6b, 0x86, 0x10, - 0x65, 0xae, 0xd7, 0xaa, 0xd6, 0xc3, 0x0b, 0x06, 0x89, 0xe4, 0x9d, 0x55, 0x2d, 0x3e, 0x52, 0x60, - 0xa0, 0x6e, 0x78, 0xe6, 0xd8, 0x4f, 0xb5, 0x50, 0x30, 0x44, 0xae, 0x04, 0x59, 0x4c, 0xc6, 0x2c, - 0x09, 0xce, 0xb7, 0x5a, 0x4c, 0xee, 0x5e, 0xb5, 0x98, 0xf3, 0x46, 0xe5, 0xd1, 0x26, 0x12, 0xfa, - 0x37, 0x53, 0xbf, 0x52, 0xa0, 0xcf, 0x2d, 0x3e, 0xbe, 0x1f, 0x3a, 0xd9, 0x02, 0x98, 0x4a, 0x93, - 0x4d, 0xa8, 0x6a, 0x1c, 0x1e, 0xe7, 0xa0, 0xbf, 0x1e, 0x39, 0x62, 0xe9, 0x38, 0xd2, 0x84, 0x04, - 0x4b, 0xe8, 0xa2, 0x59, 0xdc, 0x74, 0x54, 0xad, 0xd7, 0x12, 0x41, 0xf1, 0x57, 0x61, 0x38, 0x63, - 0x16, 0xec, 0x92, 0x9e, 0xb1, 0x65, 0x35, 0x24, 0x70, 0x67, 0x79, 0x81, 0x21, 0x09, 0x65, 0x64, - 0xbc, 0x5a, 0x49, 0x1e, 0xa4, 0x5c, 0xa5, 0x24, 0x55, 0x0d, 0x67, 0x7c, 0x58, 0xea, 0xdf, 0x11, - 0x60, 0xae, 0xd6, 0x9d, 0x5c, 0x4e, 0x3e, 0x45, 0x30, 0xe8, 0x5a, 0x27, 0x8b, 0x3b, 0x31, 0x3e, - 0x50, 0x8b, 0xf1, 0x11, 0xfe, 0x40, 0xe0, 0xd7, 0x74, 0x1b, 0x0a, 0xcb, 0xc7, 0x31, 0xe8, 0x63, - 0x49, 0x8f, 0x6b, 0xd1, 0x93, 0xf1, 0x51, 0xe8, 0x8c, 0x2f, 0x16, 0x24, 0x25, 0x72, 0x41, 0x8a, - 0x85, 0x2c, 0x48, 0x18, 0x76, 0xd7, 0x0b, 0x8a, 0x46, 0xfe, 0xbe, 0xd3, 0x92, 0x21, 0x3b, 0xa8, - 0x74, 0xb7, 0x70, 0x50, 0xd9, 0x36, 0x55, 0xe3, 0x8f, 0x0a, 0xf4, 0x3b, 0x56, 0x6d, 0x73, 0xd1, - 0xb8, 0x0b, 0x27, 0x90, 0x87, 0x5b, 0xab, 0x29, 0xf5, 0xaa, 0xf1, 0x79, 0x6f, 0xd0, 0x4d, 0x34, - 0x26, 0xe0, 0x2f, 0x1a, 0x3f, 0x55, 0xa0, 0xd7, 0x45, 0x1c, 0x9f, 0x81, 0x3d, 0x94, 0x7c, 0xb3, - 0xbe, 0x00, 0x45, 0xd3, 0x18, 0x34, 0x36, 0xa0, 0x8f, 0x45, 0x90, 0xbb, 0x5e, 0x1c, 0x6e, 0x8c, - 0xcf, 0x12, 0xf7, 0x68, 0xb5, 0x92, 0x1c, 0x76, 0xc5, 0xa1, 0xe3, 0x48, 0x3d, 0x25, 0x01, 0x10, - 0x3f, 0x0f, 0x83, 0x0c, 0x40, 0x52, 0x2a, 0x26, 0x1b, 0xf3, 0x12, 0x0a, 0xc5, 0x58, 0xb5, 0x92, - 0x4c, 0xb8, 0xf8, 0xb9, 0xcb, 0xc4, 0x40, 0xc9, 0x83, 0xa1, 0x7e, 0x82, 0x60, 0x1f, 0xd3, 0xe2, - 0x4e, 0xae, 0x11, 0x9b, 0x08, 0xb0, 0xb8, 0x4c, 0x16, 0x65, 0x82, 0xab, 0xa2, 0x96, 0x5c, 0xf5, - 0x82, 0xd7, 0x55, 0x8f, 0x35, 0x71, 0xd5, 0xb6, 0x96, 0x87, 0xf7, 0x10, 0x0c, 0x5c, 0x7d, 0xbe, - 0x60, 0x94, 0xac, 0x67, 0x73, 0x45, 0xae, 0xc2, 0x38, 0x74, 0xd6, 0x92, 0xbf, 0x61, 0xd1, 0x96, - 0x58, 0x97, 0xc6, 0x1f, 0xb7, 0x97, 0x85, 0xfe, 0x82, 0x60, 0x9f, 0x20, 0x3b, 0x33, 0xd0, 0x59, - 0xa0, 0x87, 0xf2, 0xe5, 0x72, 0x39, 0xc7, 0x8c, 0xe4, 0xaa, 0x6e, 0xc2, 0x4b, 0x55, 0x03, 0xf2, - 0xf4, 0x64, 0xed, 0x21, 0xc2, 0x79, 0xd0, 0xab, 0xb0, 0x36, 0xd8, 0xe5, 0x37, 0x08, 0x86, 0x9f, - 0xd2, 0x57, 0xcb, 0xc6, 0xff, 0xab, 0x71, 0x36, 0x11, 0x8c, 0x78, 0x17, 0x70, 0xa7, 0x16, 0xba, - 0xe4, 0xb5, 0xd0, 0xc9, 0x20, 0x0b, 0x49, 0x55, 0xd7, 0x06, 0x33, 0xbd, 0x19, 0x83, 0x51, 0xa7, - 0x83, 0xe3, 0x74, 0xbd, 0xeb, 0xba, 0x1c, 0x70, 0x75, 0xc3, 0xeb, 0x07, 0x79, 0x61, 0xdb, 0xe1, - 0x85, 0x50, 0xb5, 0x7e, 0xd7, 0x4f, 0x0b, 0x59, 0xfc, 0x34, 0x8c, 0x70, 0xbb, 0xb9, 0x36, 0xf3, - 0xbc, 0xdb, 0x7a, 0x4f, 0xb5, 0x92, 0x3c, 0xe4, 0xb6, 0xaf, 0x1b, 0x4e, 0xd5, 0x86, 0xd8, 0x0b, - 0xf1, 0xa8, 0x60, 0xe1, 0x27, 0x60, 0xc8, 0x7d, 0x52, 0x66, 0x64, 0xe9, 0xde, 0x28, 0x59, 0xad, - 0x24, 0x0f, 0xc8, 0xce, 0xd3, 0x9c, 0x28, 0x76, 0x1d, 0xaa, 0x29, 0xc9, 0x6d, 0xb3, 0x45, 0xfa, - 0x47, 0x0c, 0x12, 0x32, 0xd3, 0x30, 0x27, 0x7c, 0x11, 0xc1, 0x60, 0xbd, 0xc1, 0xe6, 0xbc, 0x67, - 0xb5, 0x7e, 0xba, 0x69, 0xbb, 0xce, 0xc1, 0xe0, 0x9b, 0x1d, 0xa1, 0x90, 0x4a, 0xe8, 0xaa, 0x1a, - 0xb6, 0x7c, 0xa8, 0xf8, 0x6b, 0x08, 0xfa, 0x3c, 0x16, 0xa5, 0x3b, 0xac, 0x53, 0x61, 0x8e, 0x7a, - 0x3e, 0x11, 0xee, 0xad, 0x56, 0x92, 0x49, 0xc9, 0xa1, 0xcf, 0xb5, 0xeb, 0xea, 0xcd, 0xb8, 0x5c, - 0xe0, 0x05, 0xe8, 0x71, 0x99, 0x9e, 0xee, 0xbf, 0x66, 0x9a, 0xef, 0x1f, 0x7c, 0xdc, 0x05, 0x2f, - 0x14, 0x29, 0x8a, 0xbc, 0xbb, 0x4b, 0x82, 0xa7, 0x5c, 0xf6, 0x46, 0x73, 0x04, 0xa5, 0xfb, 0xb6, - 0x6f, 0xb7, 0x90, 0x2c, 0x10, 0xf9, 0x56, 0xee, 0x1a, 0xf4, 0xca, 0xac, 0x3c, 0x15, 0x81, 0xa1, - 0x9b, 0x40, 0x40, 0xaf, 0x57, 0x69, 0x6f, 0xaf, 0xf7, 0x9f, 0x08, 0x0e, 0xf9, 0x45, 0xdb, 0xd1, - 0xbb, 0xb0, 0x0f, 0x14, 0x18, 0x0b, 0x5a, 0x32, 0x8b, 0xe4, 0x6f, 0x22, 0x18, 0x92, 0x44, 0x1c, - 0xdf, 0x9f, 0xb5, 0x10, 0xca, 0x42, 0xe2, 0x93, 0x11, 0x56, 0xb5, 0x41, 0x7f, 0x2c, 0x5b, 0xf8, - 0xaa, 0xd7, 0x9f, 0x4f, 0x87, 0xe7, 0xdc, 0xde, 0x4d, 0xde, 0x07, 0x0a, 0x1c, 0x94, 0x26, 0x8e, - 0xad, 0x2e, 0x54, 0x41, 0xf5, 0x04, 0x76, 0x40, 0x3d, 0x79, 0x23, 0x06, 0x87, 0x02, 0x94, 0xc8, - 0x1c, 0xf1, 0x15, 0x04, 0x23, 0xae, 0xbc, 0xeb, 0xcd, 0x37, 0xad, 0x65, 0x75, 0x21, 0xaf, 0xca, - 0xa9, 0xab, 0xda, 0x70, 0x46, 0x46, 0x00, 0xbf, 0x8e, 0x60, 0x58, 0xd0, 0xb0, 0x10, 0x1a, 0xad, - 0x67, 0xf9, 0xa9, 0x6a, 0x25, 0x39, 0xe1, 0xcb, 0xf2, 0x75, 0xd2, 0x62, 0xba, 0x1f, 0x2a, 0xf9, - 0xe9, 0x58, 0xf8, 0x71, 0x6f, 0x9c, 0x44, 0x53, 0x8b, 0x2f, 0xf5, 0x7f, 0x86, 0x02, 0xbc, 0x9b, - 0x67, 0xff, 0x45, 0x79, 0xf6, 0x3f, 0x19, 0x8d, 0xad, 0xa7, 0x00, 0x04, 0xf6, 0x6a, 0x95, 0xbb, - 0xd4, 0xab, 0xfd, 0x37, 0x82, 0x71, 0xa9, 0xa4, 0x3b, 0xba, 0x1e, 0xfc, 0x49, 0x81, 0x7b, 0x1a, - 0xac, 0x9a, 0x45, 0xe2, 0x6b, 0x08, 0xf6, 0xcb, 0x63, 0x85, 0x57, 0x85, 0xd6, 0x42, 0x51, 0xad, - 0x56, 0x92, 0x63, 0x8d, 0x42, 0xd1, 0x52, 0xb5, 0x11, 0x69, 0x2c, 0x5a, 0x58, 0xf3, 0xba, 0xfd, - 0xb9, 0x48, 0x22, 0xb4, 0xb7, 0x42, 0xbc, 0xa4, 0xc0, 0xac, 0x24, 0xe8, 0xad, 0x8b, 0x66, 0xe9, - 0xae, 0x14, 0x8e, 0x6d, 0x93, 0xe5, 0xff, 0x13, 0x83, 0x53, 0xd1, 0x14, 0xc1, 0x5c, 0xee, 0x5b, - 0x81, 0xb9, 0x16, 0xb5, 0x9c, 0x6b, 0x85, 0xc4, 0x20, 0x25, 0x1d, 0x94, 0x61, 0x6f, 0xc0, 0x01, - 0xb9, 0x7b, 0x92, 0x43, 0x35, 0x6b, 0xdd, 0x4f, 0x54, 0x2b, 0x49, 0xb5, 0x91, 0x2f, 0x13, 0x60, - 0x55, 0x1b, 0x95, 0xfa, 0x73, 0xed, 0x40, 0xde, 0x80, 0x8f, 0x70, 0x95, 0xdc, 0x9c, 0x0f, 0xbd, - 0x68, 0x90, 0xf3, 0x21, 0xf7, 0x0e, 0x86, 0x37, 0x74, 0x2e, 0x47, 0x50, 0x66, 0x33, 0x1f, 0xae, - 0x17, 0x92, 0xaf, 0x2b, 0x90, 0x90, 0x10, 0xd8, 0x6a, 0x5f, 0xe7, 0xf7, 0x1b, 0x8a, 0x70, 0xbf, - 0xb1, 0x6d, 0xfc, 0xff, 0x33, 0x04, 0x07, 0xa4, 0x3a, 0x60, 0x6e, 0xfe, 0x12, 0x82, 0x21, 0x99, - 0x2f, 0xb2, 0x9a, 0xda, 0x8a, 0x97, 0x0b, 0xdb, 0x42, 0x19, 0x65, 0x55, 0x1b, 0x94, 0x38, 0x39, - 0xbe, 0xe2, 0xf5, 0x89, 0x28, 0xac, 0x7d, 0xa6, 0xff, 0x14, 0x49, 0x4d, 0xcf, 0x77, 0x10, 0x4f, - 0xc8, 0x77, 0x10, 0xc7, 0xa3, 0xb0, 0xf4, 0xec, 0x1f, 0x02, 0xda, 0xf7, 0x4a, 0xdb, 0xdb, 0xf7, - 0xff, 0x42, 0x30, 0x26, 0x0b, 0x93, 0x9d, 0xbc, 0x6b, 0xf8, 0x50, 0x81, 0x64, 0xe0, 0x9a, 0xb7, - 0x61, 0x02, 0xbf, 0xe6, 0x75, 0xee, 0x33, 0x51, 0x12, 0x5e, 0x5b, 0x77, 0x0a, 0x93, 0x30, 0x70, - 0xc9, 0xb0, 0xe7, 0xd7, 0x6a, 0x89, 0x99, 0x9b, 0x69, 0x08, 0x3a, 0x6a, 0x39, 0x9c, 0xb5, 0x72, - 0x35, 0xfa, 0xa0, 0xbe, 0xdb, 0x01, 0xfb, 0x04, 0x50, 0xa6, 0x66, 0xcd, 0x33, 0xb3, 0xd5, 0x78, - 0x7a, 0xcf, 0x95, 0x5a, 0x09, 0x9a, 0x78, 0xbe, 0xe0, 0x93, 0x5c, 0x4b, 0xbe, 0x1b, 0xca, 0x66, - 0xe3, 0x1d, 0xe1, 0xaf, 0x26, 0x9f, 0xf2, 0x5e, 0x4d, 0x36, 0xb9, 0x06, 0x0c, 0x3b, 0xe7, 0x92, - 0xe7, 0x4d, 0x70, 0x7a, 0x42, 0xde, 0x4d, 0x68, 0x47, 0x68, 0x48, 0x89, 0xbe, 0x25, 0x10, 0x12, - 0x79, 0x81, 0xd3, 0xa5, 0xb0, 0xf0, 0x9a, 0xaf, 0xd1, 0xd8, 0x41, 0x38, 0x46, 0x3b, 0x04, 0xb5, - 0xd4, 0x61, 0x7c, 0xce, 0xd3, 0x61, 0xdc, 0x43, 0x18, 0x47, 0xc9, 0x9d, 0x91, 0x5b, 0x8b, 0x0f, - 0x40, 0x57, 0xc1, 0xb4, 0x97, 0x6f, 0x98, 0xe5, 0x42, 0x36, 0xde, 0x49, 0xee, 0x17, 0x84, 0x44, - 0xe9, 0xbc, 0x72, 0x59, 0xbc, 0x60, 0xda, 0x17, 0x6b, 0x3f, 0xaa, 0xcf, 0xc0, 0xc8, 0xd5, 0xc5, - 0x2b, 0x66, 0x46, 0xb7, 0xcd, 0x52, 0x1b, 0xc6, 0xd0, 0xdf, 0x41, 0xb0, 0xdf, 0x47, 0x9f, 0x05, - 0xc7, 0xa3, 0x9e, 0x51, 0xf4, 0xc0, 0x4e, 0xa2, 0x87, 0x80, 0x67, 0x26, 0xfd, 0x0b, 0xde, 0xf4, - 0x91, 0x0a, 0x49, 0xc7, 0x57, 0x17, 0xf3, 0x30, 0xe0, 0x80, 0x08, 0xd1, 0x6e, 0x3e, 0x5f, 0x30, - 0xd8, 0xe0, 0x88, 0x46, 0x1f, 0xb6, 0x46, 0x37, 0x3f, 0x42, 0xb0, 0x4f, 0xe0, 0xc7, 0xb4, 0xf2, - 0x08, 0x74, 0xae, 0xd2, 0x9f, 0x9a, 0xf5, 0x6d, 0xaf, 0x92, 0xef, 0x09, 0x16, 0x6d, 0xb3, 0x64, - 0x70, 0x22, 0x1c, 0x35, 0xca, 0xf5, 0x9e, 0x67, 0xc5, 0xc2, 0x64, 0x19, 0x12, 0x7c, 0xc3, 0x9a, - 0x5f, 0x7b, 0x52, 0x5b, 0xe0, 0x5a, 0x19, 0x80, 0x58, 0xb9, 0x94, 0x63, 0x3a, 0xa9, 0xfd, 0xb9, - 0xbd, 0x2a, 0xe0, 0x7f, 0x45, 0xaf, 0xe3, 0x92, 0x33, 0xfd, 0x5e, 0x81, 0xbd, 0x4c, 0x49, 0x3c, - 0x29, 0x47, 0x50, 0x30, 0x73, 0x3d, 0x87, 0x42, 0x2b, 0xce, 0xe7, 0xd2, 0x64, 0x1b, 0x6a, 0xd6, - 0x77, 0x10, 0xc4, 0x45, 0x66, 0x77, 0xf4, 0xa5, 0xc5, 0x96, 0x38, 0xfa, 0xbb, 0x08, 0x46, 0x25, - 0x12, 0xb5, 0xc5, 0x20, 0x5f, 0xf4, 0x1a, 0xe4, 0xbe, 0x30, 0x06, 0x91, 0xcf, 0xe2, 0xbf, 0x85, - 0x60, 0xe8, 0xea, 0xe2, 0xdc, 0xea, 0x2a, 0x07, 0xdc, 0xca, 0xd4, 0xb8, 0x65, 0xce, 0x7e, 0x1b, - 0xc1, 0xb0, 0x47, 0xca, 0xb6, 0x68, 0xf6, 0xa2, 0x57, 0xb3, 0x27, 0x82, 0x35, 0xeb, 0xd7, 0x59, - 0x1b, 0x1c, 0xdd, 0x00, 0x3c, 0x97, 0xc9, 0x98, 0xe5, 0x82, 0xfd, 0x88, 0x6e, 0xeb, 0x5c, 0xad, - 0x57, 0xa1, 0x97, 0xcb, 0x52, 0x9f, 0xf8, 0xeb, 0x99, 0x9f, 0xaa, 0xad, 0xe6, 0xaf, 0x95, 0x64, - 0xff, 0x63, 0xec, 0xe5, 0x1c, 0x9d, 0x23, 0x90, 0x79, 0x7f, 0x4f, 0x5e, 0x80, 0x51, 0x8f, 0xc3, - 0xa0, 0x8b, 0x0d, 0x53, 0xee, 0x10, 0x74, 0xdc, 0xd4, 0x57, 0xcb, 0x06, 0x2f, 0x0c, 0xe4, 0x41, - 0x9d, 0x86, 0x24, 0xf9, 0xf2, 0x89, 0x38, 0xd4, 0xe3, 0x86, 0x3d, 0x67, 0x59, 0x86, 0x4d, 0xee, - 0xe7, 0x1d, 0xe7, 0xe9, 0x03, 0x85, 0x07, 0x9f, 0xa6, 0xe4, 0xb2, 0xea, 0x1a, 0x8c, 0x07, 0xa3, - 0x30, 0x66, 0x4f, 0xc2, 0x40, 0xc1, 0xb0, 0x97, 0xf5, 0xda, 0xab, 0x65, 0xc2, 0xa9, 0xe9, 0x40, - 0x8e, 0x8b, 0x12, 0x33, 0x66, 0x5f, 0xc1, 0x45, 0x7e, 0xe6, 0xfd, 0x09, 0xe8, 0x20, 0xbc, 0x6b, - 0xe7, 0x81, 0x3d, 0xb4, 0x2a, 0xe2, 0x08, 0x9f, 0x74, 0x25, 0x8e, 0x87, 0x82, 0xa5, 0x8b, 0x50, - 0x27, 0x5e, 0xfc, 0xf8, 0x93, 0xd7, 0x95, 0x71, 0x3c, 0x96, 0x0e, 0xf8, 0x40, 0x8e, 0x15, 0xf4, - 0xdb, 0x08, 0x3a, 0xe8, 0x24, 0x63, 0xa8, 0x6f, 0x67, 0x12, 0x47, 0x9a, 0x40, 0x31, 0xf6, 0x3f, - 0x46, 0x84, 0xff, 0x9b, 0x08, 0x4f, 0xa6, 0x1b, 0x7d, 0xf1, 0x97, 0x5e, 0xe7, 0x9e, 0xb0, 0xb1, - 0x74, 0x06, 0x9f, 0x0a, 0x84, 0xa5, 0x7b, 0xe6, 0xf4, 0xba, 0xf8, 0xad, 0xd9, 0x06, 0x25, 0xb1, - 0x74, 0x0a, 0xcf, 0x04, 0xe1, 0xd1, 0x9d, 0x5b, 0x7a, 0x5d, 0x98, 0x3b, 0x65, 0x58, 0xf8, 0x65, - 0x04, 0x5d, 0xce, 0xd7, 0x17, 0x38, 0xf4, 0x07, 0x1a, 0x89, 0x63, 0x21, 0x20, 0x99, 0x12, 0xa6, - 0x88, 0x0e, 0x0e, 0x63, 0xb5, 0xa1, 0x0a, 0xac, 0xb4, 0xbe, 0xba, 0x8a, 0x5f, 0x8e, 0xc1, 0x5e, - 0x67, 0x18, 0x34, 0xec, 0x60, 0x7a, 0x62, 0xb2, 0x39, 0x20, 0x93, 0xe5, 0xe7, 0x0a, 0x11, 0xe6, - 0x6d, 0x05, 0x9f, 0x08, 0xad, 0xe4, 0x9a, 0x51, 0x66, 0xf1, 0x74, 0x58, 0x03, 0x72, 0x02, 0xd6, - 0xd2, 0xc3, 0xf8, 0xa1, 0xa8, 0x48, 0x6e, 0xae, 0x0d, 0x5c, 0x41, 0x6e, 0x52, 0x8a, 0xbb, 0x74, - 0x09, 0x3f, 0x1a, 0x9a, 0xb1, 0x87, 0x50, 0x41, 0xcf, 0x1b, 0x0e, 0x21, 0xfc, 0x5d, 0x04, 0xdd, - 0xc2, 0x10, 0x35, 0x8e, 0x30, 0x69, 0x1d, 0x1c, 0xa7, 0x92, 0xb9, 0x70, 0xf5, 0x04, 0x31, 0xcb, - 0x04, 0x3e, 0xdc, 0xc4, 0x2a, 0xd4, 0x4b, 0x5e, 0xd9, 0x0d, 0x9d, 0xfc, 0x3b, 0x93, 0x90, 0x73, - 0xa8, 0x89, 0xa3, 0x4d, 0xe1, 0x98, 0x28, 0xbf, 0x88, 0x11, 0x59, 0xde, 0x89, 0x05, 0xbb, 0x88, - 0x4c, 0xf9, 0x4b, 0x33, 0xf8, 0xbe, 0x88, 0x4a, 0xb7, 0x96, 0xce, 0xe1, 0x33, 0x91, 0x0d, 0x45, - 0x2c, 0x14, 0xc9, 0xc4, 0x32, 0xdf, 0x72, 0x44, 0x78, 0x0c, 0x5f, 0xde, 0x0a, 0x42, 0x5c, 0xae, - 0x28, 0xd9, 0x4b, 0x14, 0xe3, 0x41, 0x7c, 0xbe, 0x05, 0x3c, 0xc6, 0x15, 0xbf, 0x8a, 0x00, 0xea, - 0xc3, 0x9c, 0x38, 0xfc, 0xc0, 0x67, 0x62, 0x2a, 0x0c, 0x28, 0xf3, 0x8c, 0xe3, 0xc4, 0x31, 0x8e, - 0xe0, 0x7b, 0x1b, 0xfb, 0x05, 0xf5, 0xd1, 0xef, 0x21, 0xe8, 0x72, 0xe6, 0xe3, 0x70, 0xe8, 0x49, - 0xc7, 0xe0, 0xc4, 0xea, 0x1b, 0xf3, 0x53, 0x67, 0x89, 0x3c, 0x27, 0xf1, 0xf1, 0x20, 0x79, 0x4c, - 0x8e, 0x92, 0x5e, 0x67, 0x23, 0x8c, 0x1b, 0xf8, 0x67, 0x08, 0xfa, 0xdc, 0xc3, 0x7b, 0x38, 0xda, - 0x90, 0x5f, 0x22, 0x15, 0x16, 0x9c, 0x89, 0x79, 0x8e, 0x88, 0xd9, 0x20, 0x3c, 0xc8, 0xe6, 0x42, - 0x26, 0xeb, 0x7b, 0x08, 0xb0, 0xbf, 0x31, 0x83, 0xa3, 0x8f, 0x31, 0x25, 0x66, 0xa2, 0xa0, 0x30, - 0xb9, 0x1f, 0x24, 0x72, 0x37, 0x72, 0x68, 0x52, 0xb7, 0x8a, 0x46, 0x26, 0xbd, 0xee, 0xbd, 0x95, - 0xd8, 0xc0, 0xb5, 0x93, 0xac, 0x7c, 0x0c, 0x05, 0xb7, 0x36, 0xb6, 0x92, 0x38, 0x13, 0x15, 0x8d, - 0xad, 0x23, 0x45, 0xd6, 0x31, 0x89, 0x27, 0x9a, 0xae, 0x83, 0x7a, 0xee, 0xef, 0x10, 0x0c, 0x4b, - 0x9b, 0x53, 0xb8, 0xa5, 0x39, 0x82, 0xc4, 0xe9, 0x88, 0x58, 0x4c, 0xec, 0x87, 0x89, 0xd8, 0xf7, - 0xe3, 0xb3, 0x41, 0x62, 0xf3, 0x26, 0x58, 0x90, 0x05, 0x7e, 0x8b, 0x60, 0x34, 0xf0, 0xa6, 0x17, - 0xb7, 0x7c, 0x39, 0x9c, 0xb8, 0xbf, 0x05, 0x4c, 0xb6, 0xa6, 0x69, 0xb2, 0xa6, 0xe3, 0xf8, 0x58, - 0x98, 0x35, 0x51, 0x6b, 0xbc, 0xa1, 0xc0, 0x89, 0x28, 0x97, 0x6e, 0x78, 0x2b, 0xaf, 0xee, 0x12, - 0x57, 0xb6, 0x86, 0x18, 0x5b, 0xfe, 0x65, 0xb2, 0xfc, 0x47, 0xf1, 0x85, 0x16, 0x4d, 0xca, 0x13, - 0x2c, 0x69, 0x41, 0xbe, 0xac, 0xc0, 0xa0, 0x44, 0x0a, 0xdc, 0xc2, 0x35, 0x55, 0x62, 0x36, 0x12, - 0x0e, 0x5b, 0xcd, 0xb7, 0xe9, 0xe6, 0xfe, 0x1b, 0x08, 0x9f, 0x6e, 0x52, 0x10, 0xe4, 0xab, 0x59, - 0xba, 0x8c, 0x17, 0xee, 0x5c, 0x11, 0xbc, 0x04, 0xfe, 0x1a, 0xc1, 0xfe, 0x80, 0xbb, 0x0a, 0xdc, - 0xe2, 0xe5, 0x46, 0xe2, 0x6c, 0x64, 0x3c, 0xa6, 0x9a, 0x34, 0xd1, 0xcc, 0x31, 0x7c, 0xb4, 0xb9, - 0x62, 0xd8, 0x8e, 0x0e, 0x41, 0x97, 0x73, 0x95, 0x11, 0x5c, 0x2d, 0xbd, 0x17, 0x23, 0xc1, 0xd5, - 0xd2, 0x77, 0x2f, 0xd2, 0x7c, 0x8b, 0x59, 0x2b, 0x3b, 0xb4, 0xf8, 0x58, 0x1b, 0xf8, 0x27, 0x08, - 0xfa, 0x3d, 0xbd, 0x5b, 0x1c, 0xb1, 0xc9, 0x9b, 0x48, 0x87, 0x86, 0x0f, 0x9b, 0xa9, 0x59, 0x63, - 0x84, 0x9f, 0x5a, 0x5f, 0xab, 0xed, 0x31, 0x38, 0x2d, 0x1c, 0xba, 0xdd, 0xda, 0x60, 0x8f, 0xe1, - 0x6d, 0x0d, 0x37, 0xb7, 0x24, 0x17, 0x69, 0x9d, 0x14, 0xf0, 0x0d, 0xfc, 0xb6, 0xa8, 0x38, 0xda, - 0x77, 0xc4, 0x11, 0x1b, 0x94, 0x21, 0x14, 0xe7, 0x6e, 0xb0, 0x36, 0xcf, 0xab, 0x5c, 0xca, 0x72, - 0x29, 0x97, 0x5e, 0x2f, 0x97, 0x72, 0x1b, 0xf8, 0x97, 0x62, 0x27, 0x9c, 0xb7, 0xe3, 0x70, 0xe4, - 0xce, 0x5d, 0x62, 0x3a, 0x02, 0x46, 0xd8, 0x0d, 0x11, 0x97, 0xd6, 0xbb, 0x01, 0xc7, 0x3f, 0x40, - 0xd0, 0xeb, 0xea, 0x74, 0xe1, 0x48, 0x0d, 0xb1, 0xc4, 0xc9, 0x90, 0xd0, 0x61, 0x43, 0x86, 0x37, - 0xea, 0x48, 0x0c, 0xbf, 0x85, 0xa0, 0x5b, 0xe8, 0x5a, 0x05, 0x1f, 0x16, 0xfd, 0x1d, 0xb4, 0xe0, - 0xc3, 0xa2, 0xa4, 0x0d, 0xa6, 0x3e, 0x40, 0xc4, 0x3a, 0x8d, 0x67, 0x03, 0x23, 0x99, 0x22, 0x91, - 0xc7, 0x75, 0x57, 0x67, 0x6e, 0x03, 0xbf, 0x8f, 0x60, 0x50, 0xd2, 0xf6, 0xc2, 0x67, 0x1b, 0xb6, - 0x95, 0x82, 0x7b, 0x6b, 0x89, 0x73, 0xd1, 0x11, 0xc3, 0xee, 0xdf, 0x0b, 0x86, 0x4d, 0xda, 0x6f, - 0xb4, 0xfb, 0x96, 0x5e, 0xcf, 0x65, 0x37, 0xe6, 0xbf, 0xf2, 0xe1, 0xad, 0x31, 0xf4, 0xd1, 0xad, - 0x31, 0xf4, 0xb7, 0x5b, 0x63, 0xe8, 0xd5, 0xcd, 0xb1, 0x5d, 0x1f, 0x6d, 0x8e, 0xed, 0xfa, 0xf3, - 0xe6, 0xd8, 0x2e, 0x18, 0xcd, 0x99, 0x01, 0xa2, 0x5c, 0x43, 0x4b, 0xa7, 0x56, 0x72, 0xf6, 0xb3, - 0xe5, 0xeb, 0xa9, 0x8c, 0x99, 0x17, 0xb8, 0x9d, 0xcc, 0x99, 0x22, 0xef, 0x17, 0xea, 0xdc, 0xed, - 0xb5, 0xa2, 0x61, 0x5d, 0xdf, 0x43, 0xfe, 0x67, 0xd4, 0xec, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, - 0x51, 0x24, 0xd9, 0x67, 0x72, 0x4b, 0x00, 0x00, + 0x42, 0x71, 0x91, 0x2a, 0xf1, 0x03, 0x4b, 0x15, 0x09, 0xbe, 0xd0, 0xde, 0xc7, 0xec, 0x9d, 0xd7, + 0xee, 0xcc, 0xc4, 0x1b, 0x19, 0xff, 0x79, 0x76, 0xce, 0xeb, 0x9e, 0xe7, 0xbd, 0xe7, 0x9e, 0x31, + 0x28, 0xa5, 0xb2, 0x71, 0x53, 0x2f, 0x6a, 0xc5, 0xac, 0x9e, 0x29, 0xe8, 0x96, 0x96, 0xd3, 0x2c, + 0x2d, 0x73, 0x73, 0x3a, 0xf3, 0x5c, 0x45, 0x2f, 0xaf, 0xa5, 0x4b, 0x65, 0xc3, 0x32, 0xf0, 0x48, + 0x03, 0x26, 0xcd, 0x61, 0xd2, 0x37, 0xa7, 0x53, 0x43, 0x2b, 0xc6, 0x8a, 0x41, 0x40, 0x32, 0xf5, + 0xbf, 0x28, 0x74, 0x6a, 0x2a, 0x6b, 0x98, 0x05, 0xc3, 0xcc, 0x5c, 0xd7, 0x4c, 0x9d, 0x92, 0xc9, + 0xdc, 0x9c, 0xbe, 0xae, 0x5b, 0xda, 0x74, 0xa6, 0xa4, 0xad, 0xe4, 0x8b, 0x9a, 0x95, 0x37, 0x8a, + 0x0c, 0xf6, 0xe0, 0x8a, 0x61, 0xac, 0xac, 0xea, 0x19, 0xad, 0x94, 0xcf, 0x68, 0xc5, 0xa2, 0x61, + 0x91, 0x97, 0x26, 0x7b, 0x7b, 0x24, 0x40, 0x36, 0x5b, 0x06, 0x0a, 0x16, 0xb4, 0x04, 0x33, 0x6b, + 0x94, 0x74, 0x2e, 0x54, 0x10, 0x4c, 0x49, 0xcf, 0xe6, 0x6f, 0xe4, 0xb3, 0xa2, 0x50, 0x93, 0x01, + 0xb0, 0xc6, 0xf5, 0x2f, 0xeb, 0x59, 0xcb, 0xb4, 0x8c, 0x32, 0xa3, 0xaa, 0x7c, 0x09, 0xf0, 0x13, + 0xf5, 0x05, 0x5e, 0xd3, 0xca, 0x5a, 0xc1, 0x54, 0xf5, 0xe7, 0x2a, 0xba, 0x69, 0xe1, 0x0b, 0xd0, + 0x9f, 0x2f, 0x66, 0x57, 0x2b, 0x39, 0x7d, 0xb9, 0x4c, 0x7f, 0x4a, 0x5e, 0x1f, 0x47, 0x93, 0x7b, + 0xe7, 0x53, 0xb5, 0xaa, 0x3c, 0xb2, 0xa6, 0x15, 0x56, 0xcf, 0x2b, 0x2e, 0x00, 0x45, 0xed, 0x63, + 0xbf, 0x30, 0x22, 0xca, 0xf7, 0x11, 0x0c, 0x3a, 0x68, 0x9b, 0x25, 0xa3, 0x68, 0xea, 0xf8, 0x41, + 0xd8, 0x53, 0x22, 0xbf, 0x24, 0xd1, 0x38, 0x9a, 0xec, 0x9e, 0x19, 0x4b, 0xfb, 0x1b, 0x27, 0x4d, + 0xf1, 0xe6, 0x77, 0x7f, 0x58, 0x95, 0x77, 0xa9, 0x0c, 0x07, 0x3f, 0x02, 0x9d, 0xa2, 0x48, 0xdd, + 0x33, 0x53, 0x41, 0xe8, 0xde, 0x75, 0xa9, 0x1c, 0x55, 0xf9, 0x7d, 0x02, 0x7a, 0x16, 0xeb, 0xca, + 0xe5, 0x2b, 0x4e, 0xc3, 0x5e, 0xa2, 0xec, 0xe5, 0x7c, 0x8e, 0x88, 0xd5, 0x35, 0x3f, 0x58, 0xab, + 0xca, 0xfd, 0x74, 0xa9, 0xfc, 0x8d, 0xa2, 0x76, 0x92, 0x3f, 0x17, 0x72, 0xf8, 0x3c, 0xf4, 0x98, + 0xba, 0x69, 0xe6, 0x8d, 0xe2, 0xb2, 0x96, 0xcb, 0x95, 0x93, 0x12, 0xc1, 0xd9, 0x5f, 0xab, 0xca, + 0x83, 0x0c, 0x47, 0x78, 0xab, 0xa8, 0xdd, 0xec, 0x71, 0x2e, 0x97, 0x2b, 0xe3, 0xb3, 0xd0, 0x5d, + 0xd6, 0xb3, 0x46, 0x39, 0x47, 0x51, 0x13, 0x04, 0x75, 0xa4, 0x56, 0x95, 0x31, 0x45, 0x15, 0x5e, + 0x2a, 0x2a, 0xd0, 0x27, 0x82, 0x78, 0x11, 0x06, 0xb8, 0xd6, 0x19, 0x3d, 0x33, 0x09, 0xc4, 0x2e, + 0x07, 0x6a, 0x55, 0x79, 0xbf, 0xd3, 0x2e, 0x1c, 0x42, 0x51, 0xb9, 0x2d, 0x17, 0xd9, 0x2f, 0x4e, + 0xf3, 0xd6, 0xa9, 0x9b, 0xc9, 0xee, 0x60, 0xf3, 0x12, 0x00, 0xd1, 0xbc, 0xe4, 0x07, 0x3c, 0x0f, + 0xfd, 0xfa, 0x0b, 0x14, 0x26, 0x9f, 0x5b, 0xce, 0x17, 0x6f, 0x18, 0xc9, 0x1e, 0x37, 0x11, 0x17, + 0x80, 0xa2, 0xf6, 0xb2, 0x5f, 0x16, 0x72, 0x0b, 0xc5, 0x1b, 0xc6, 0xd6, 0xf8, 0xd9, 0x1f, 0x24, + 0xe8, 0x65, 0xb6, 0x64, 0x1e, 0x76, 0x1e, 0x3a, 0x88, 0x9d, 0x98, 0x83, 0x1d, 0x0e, 0xf2, 0x10, + 0x82, 0xf5, 0x74, 0x59, 0x2b, 0x95, 0xf4, 0xb2, 0x4a, 0x51, 0xb0, 0x06, 0x7b, 0x6d, 0xdd, 0x4a, + 0xe3, 0x89, 0xc9, 0xee, 0x99, 0x89, 0x40, 0x74, 0x0a, 0xc7, 0x08, 0xcc, 0x1f, 0xaa, 0x55, 0xe5, + 0x51, 0x87, 0xf1, 0xcd, 0x13, 0x46, 0x21, 0x6f, 0xe9, 0x85, 0x92, 0xb5, 0xa6, 0xa8, 0x36, 0x59, + 0xfc, 0x4c, 0xdd, 0x85, 0xa9, 0xda, 0x13, 0x84, 0xc3, 0x91, 0x20, 0x0e, 0x54, 0xd7, 0x9c, 0xc1, + 0xc1, 0x5a, 0x55, 0x4e, 0x8a, 0x2e, 0xe2, 0xa0, 0xcf, 0x69, 0xe2, 0xcf, 0xb9, 0x23, 0xa4, 0xf9, + 0xfa, 0x3d, 0xb1, 0xf1, 0x43, 0x89, 0xc5, 0x06, 0xe3, 0x8b, 0x67, 0x9d, 0xea, 0x3c, 0xd4, 0x9c, + 0x9c, 0xad, 0xc7, 0x5e, 0x1e, 0x36, 0xd4, 0x39, 0x24, 0x82, 0x7c, 0x6f, 0x53, 0x64, 0xea, 0x16, + 0xf3, 0xc9, 0x5a, 0x55, 0x1e, 0x72, 0x86, 0x1e, 0xf3, 0x9f, 0x6e, 0xb3, 0x01, 0x86, 0x4d, 0xc0, + 0xf4, 0x75, 0x3d, 0x05, 0xda, 0x7c, 0x12, 0x84, 0xcf, 0xd1, 0xa6, 0x7c, 0x16, 0x4b, 0x7a, 0x96, + 0xf1, 0x12, 0xad, 0xe6, 0x21, 0xa6, 0xa8, 0xfd, 0xa6, 0x13, 0x5e, 0xd9, 0x44, 0x30, 0x40, 0x68, + 0x98, 0x73, 0xab, 0xab, 0x3c, 0x7b, 0x6c, 0x97, 0x58, 0xc0, 0x17, 0x01, 0x1a, 0x15, 0x2a, 0x99, + 0x25, 0xaa, 0x98, 0x48, 0xd3, 0x72, 0x96, 0xae, 0x97, 0xb3, 0x34, 0xad, 0x8a, 0xac, 0x9c, 0xa5, + 0xaf, 0x69, 0x2b, 0xb6, 0x03, 0x08, 0x98, 0x4a, 0x15, 0xc1, 0x3e, 0x61, 0x95, 0x8d, 0xcc, 0x4d, + 0xd4, 0x51, 0xcf, 0xdc, 0x89, 0xd0, 0x81, 0xc5, 0x70, 0xf0, 0xbc, 0xdb, 0x2f, 0x27, 0x9b, 0xa2, + 0x0b, 0xfa, 0xb5, 0x7d, 0x13, 0x5f, 0xf2, 0x59, 0xdf, 0xd1, 0x96, 0xeb, 0xa3, 0xe2, 0x3b, 0x16, + 0x78, 0x3b, 0x01, 0xfd, 0x3c, 0x1f, 0xc6, 0xad, 0x01, 0xa7, 0x00, 0x78, 0x96, 0xcf, 0xe7, 0x58, + 0x05, 0x18, 0xae, 0x55, 0xe5, 0x7d, 0xce, 0x0a, 0x50, 0xc7, 0xe9, 0x62, 0x0f, 0x0b, 0xb9, 0xf8, + 0xd9, 0xbf, 0x81, 0x58, 0xd4, 0x0a, 0x7a, 0x72, 0x77, 0x00, 0x62, 0xfd, 0xa5, 0x8d, 0xf8, 0xb8, + 0x56, 0xd0, 0xf1, 0x43, 0xd0, 0x6b, 0x17, 0x05, 0x12, 0xc7, 0xb4, 0x66, 0x08, 0x51, 0xe6, 0x78, + 0xad, 0xa8, 0x3d, 0xbc, 0x60, 0x90, 0x48, 0xde, 0x59, 0xd5, 0xe2, 0x23, 0x09, 0x06, 0x1a, 0x86, + 0x67, 0x8e, 0xfd, 0x54, 0x8c, 0x82, 0x21, 0x72, 0x25, 0xc8, 0x62, 0x32, 0x66, 0x49, 0x70, 0x3e, + 0x6e, 0x31, 0xb9, 0x7b, 0xd5, 0x62, 0xce, 0x1d, 0x95, 0x47, 0x5b, 0x48, 0xe8, 0xdd, 0x4c, 0xfd, + 0x4a, 0x82, 0x3e, 0xa7, 0xf8, 0xf8, 0x7e, 0xe8, 0x64, 0x0b, 0x60, 0x2a, 0x95, 0x5b, 0x50, 0x55, + 0x39, 0x3c, 0xce, 0x43, 0x7f, 0x23, 0x72, 0xc4, 0xd2, 0x71, 0xa4, 0x05, 0x09, 0x96, 0xd0, 0x45, + 0xb3, 0x38, 0xe9, 0x28, 0x6a, 0xaf, 0x29, 0x82, 0xe2, 0xaf, 0xc2, 0x70, 0xd6, 0x28, 0x5a, 0x65, + 0x2d, 0x6b, 0xf9, 0xd5, 0x90, 0xc0, 0x9d, 0xe5, 0x05, 0x86, 0x24, 0x94, 0x91, 0xf1, 0x5a, 0x55, + 0x3e, 0x48, 0xb9, 0xfa, 0x92, 0x54, 0x54, 0x9c, 0xf5, 0x60, 0x29, 0x7f, 0x47, 0x80, 0xb9, 0x5a, + 0x77, 0x72, 0x39, 0xf9, 0x14, 0xc1, 0xa0, 0x63, 0x9d, 0x2c, 0xee, 0xc4, 0xf8, 0x40, 0x31, 0xe3, + 0x23, 0xfc, 0x81, 0xc0, 0xab, 0xe9, 0x36, 0x14, 0x96, 0x8f, 0x13, 0xd0, 0xc7, 0x92, 0x1e, 0xd7, + 0xa2, 0x2b, 0xe3, 0xa3, 0xd0, 0x19, 0x5f, 0x2c, 0x48, 0x52, 0xe4, 0x82, 0x94, 0x08, 0x59, 0x90, + 0x30, 0xec, 0x6e, 0x14, 0x14, 0x95, 0xfc, 0x7d, 0xa7, 0x25, 0xc3, 0xef, 0xa0, 0xd2, 0x1d, 0xe3, + 0xa0, 0xb2, 0x6d, 0xaa, 0xc6, 0x1f, 0x25, 0xe8, 0xb7, 0xad, 0xda, 0xe6, 0xa2, 0x71, 0x17, 0x4e, + 0x20, 0x0f, 0xc7, 0xab, 0x29, 0x8d, 0xaa, 0xf1, 0x79, 0x77, 0xd0, 0x4d, 0x34, 0x27, 0xe0, 0x2d, + 0x1a, 0x3f, 0x95, 0xa0, 0xd7, 0x41, 0x1c, 0x9f, 0x81, 0x3d, 0x94, 0x7c, 0xab, 0xbe, 0x00, 0x45, + 0x53, 0x19, 0x34, 0xd6, 0xa1, 0x8f, 0x45, 0x90, 0xb3, 0x5e, 0x1c, 0x6e, 0x8e, 0xcf, 0x12, 0xf7, + 0x68, 0xad, 0x2a, 0x0f, 0x3b, 0xe2, 0xd0, 0x76, 0xa4, 0x9e, 0xb2, 0x00, 0x88, 0x9f, 0x87, 0x41, + 0x06, 0xe0, 0x53, 0x2a, 0x26, 0x9b, 0xf3, 0x12, 0x0a, 0xc5, 0x58, 0xad, 0x2a, 0xa7, 0x1c, 0xfc, + 0x9c, 0x65, 0x62, 0xa0, 0xec, 0xc2, 0x50, 0x3e, 0x41, 0xb0, 0x8f, 0x69, 0x71, 0x27, 0xd7, 0x88, + 0x4d, 0x04, 0x58, 0x5c, 0x26, 0x8b, 0x32, 0xc1, 0x55, 0x51, 0x2c, 0x57, 0xbd, 0xe0, 0x76, 0xd5, + 0x63, 0x2d, 0x5c, 0xb5, 0xad, 0xe5, 0xe1, 0x3d, 0x04, 0x03, 0x57, 0x9f, 0x2f, 0xea, 0x65, 0xf3, + 0xd9, 0x7c, 0x89, 0xab, 0x30, 0x09, 0x9d, 0xf5, 0xe4, 0xaf, 0x9b, 0xb4, 0x25, 0xd6, 0xa5, 0xf2, + 0xc7, 0xed, 0x65, 0xa1, 0xbf, 0x20, 0xd8, 0x27, 0xc8, 0xce, 0x0c, 0x74, 0x16, 0xe8, 0xa1, 0x7c, + 0xb9, 0x52, 0xc9, 0x33, 0x23, 0x39, 0xaa, 0x9b, 0xf0, 0x52, 0x51, 0x81, 0x3c, 0x3d, 0x59, 0x7f, + 0x88, 0x70, 0x1e, 0x74, 0x2b, 0xac, 0x0d, 0x76, 0xf9, 0x0d, 0x82, 0xe1, 0xa7, 0xb4, 0xd5, 0x8a, + 0xfe, 0xff, 0x6a, 0x9c, 0x4d, 0x04, 0x23, 0xee, 0x05, 0xdc, 0xa9, 0x85, 0x2e, 0xb9, 0x2d, 0x74, + 0x32, 0xc8, 0x42, 0xbe, 0xaa, 0x6b, 0x83, 0x99, 0xde, 0x4c, 0xc0, 0xa8, 0xdd, 0xc1, 0xb1, 0xbb, + 0xde, 0x0d, 0x5d, 0x0e, 0x38, 0xba, 0xe1, 0x8d, 0x83, 0xbc, 0xb0, 0xed, 0x70, 0x43, 0x28, 0x6a, + 0xbf, 0xe3, 0xa7, 0x85, 0x1c, 0x7e, 0x1a, 0x46, 0xb8, 0xdd, 0x1c, 0x9b, 0x79, 0xde, 0x6d, 0xbd, + 0xa7, 0x56, 0x95, 0x0f, 0x39, 0xed, 0xeb, 0x84, 0x53, 0xd4, 0x21, 0xf6, 0x42, 0x3c, 0x2a, 0x98, + 0xf8, 0x09, 0x18, 0x72, 0x9e, 0x94, 0x19, 0x59, 0xba, 0x37, 0x92, 0x6b, 0x55, 0xf9, 0x80, 0xdf, + 0x79, 0x9a, 0x13, 0xc5, 0x8e, 0x43, 0x35, 0x25, 0xb9, 0x6d, 0xb6, 0x48, 0xff, 0x48, 0x40, 0xca, + 0xcf, 0x34, 0xcc, 0x09, 0x5f, 0x44, 0x30, 0xd8, 0x68, 0xb0, 0xd9, 0xef, 0x59, 0xad, 0x9f, 0x6e, + 0xd9, 0xae, 0xb3, 0x31, 0xf8, 0x66, 0x47, 0x28, 0xa4, 0x3e, 0x74, 0x15, 0x15, 0x9b, 0x1e, 0x54, + 0xfc, 0x35, 0x04, 0x7d, 0x2e, 0x8b, 0xd2, 0x1d, 0xd6, 0xa9, 0x30, 0x47, 0x3d, 0x8f, 0x08, 0xf7, + 0xd6, 0xaa, 0xb2, 0xec, 0x73, 0xe8, 0x73, 0xec, 0xba, 0x7a, 0xb3, 0x0e, 0x17, 0x78, 0x01, 0x7a, + 0x1c, 0xa6, 0xa7, 0xfb, 0xaf, 0x99, 0xd6, 0xfb, 0x07, 0x0f, 0x77, 0xc1, 0x0b, 0x45, 0x8a, 0x22, + 0xef, 0xee, 0xb2, 0xe0, 0x29, 0x97, 0xdd, 0xd1, 0x1c, 0x41, 0xe9, 0x9e, 0xed, 0xdb, 0x2d, 0xe4, + 0x17, 0x88, 0x7c, 0x2b, 0x77, 0x0d, 0x7a, 0xfd, 0xac, 0x3c, 0x15, 0x81, 0xa1, 0x93, 0x40, 0x40, + 0xaf, 0x57, 0x6a, 0x6f, 0xaf, 0xf7, 0x9f, 0x08, 0x0e, 0x79, 0x45, 0xdb, 0xd1, 0xbb, 0xb0, 0x0f, + 0x24, 0x18, 0x0b, 0x5a, 0x32, 0x8b, 0xe4, 0x6f, 0x22, 0x18, 0xf2, 0x89, 0x38, 0xbe, 0x3f, 0x8b, + 0x11, 0xca, 0x42, 0xe2, 0xf3, 0x23, 0xac, 0xa8, 0x83, 0xde, 0x58, 0x36, 0xf1, 0x55, 0xb7, 0x3f, + 0x9f, 0x0e, 0xcf, 0xb9, 0xbd, 0x9b, 0xbc, 0x0f, 0x24, 0x38, 0xe8, 0x9b, 0x38, 0xb6, 0xba, 0x50, + 0x05, 0xd5, 0x13, 0xd8, 0x01, 0xf5, 0xe4, 0x8d, 0x04, 0x1c, 0x0a, 0x50, 0x22, 0x73, 0xc4, 0x57, + 0x10, 0x8c, 0x38, 0xf2, 0xae, 0x3b, 0xdf, 0xc4, 0xcb, 0xea, 0x42, 0x5e, 0xf5, 0xa7, 0xae, 0xa8, + 0xc3, 0x59, 0x3f, 0x02, 0xf8, 0x75, 0x04, 0xc3, 0x82, 0x86, 0x85, 0xd0, 0x88, 0x9f, 0xe5, 0xa7, + 0x6a, 0x55, 0x79, 0xc2, 0x93, 0xe5, 0x1b, 0xa4, 0xc5, 0x74, 0x3f, 0x54, 0xf6, 0xd2, 0x31, 0xf1, + 0xe3, 0xee, 0x38, 0x89, 0xa6, 0x16, 0x4f, 0xea, 0xff, 0x0c, 0x05, 0x78, 0x37, 0xcf, 0xfe, 0x8b, + 0xfe, 0xd9, 0xff, 0x64, 0x34, 0xb6, 0xae, 0x02, 0x10, 0xd8, 0xab, 0x95, 0xee, 0x52, 0xaf, 0xf6, + 0xdf, 0x08, 0xc6, 0x7d, 0x25, 0xdd, 0xd1, 0xf5, 0xe0, 0x4f, 0x12, 0xdc, 0xd3, 0x64, 0xd5, 0x2c, + 0x12, 0x5f, 0x43, 0xb0, 0xdf, 0x3f, 0x56, 0x78, 0x55, 0x88, 0x17, 0x8a, 0x4a, 0xad, 0x2a, 0x8f, + 0x35, 0x0b, 0x45, 0x53, 0x51, 0x47, 0x7c, 0x63, 0xd1, 0xc4, 0xaa, 0xdb, 0xed, 0xcf, 0x45, 0x12, + 0xa1, 0xbd, 0x15, 0xe2, 0x25, 0x09, 0x66, 0x7d, 0x82, 0xde, 0xbc, 0x68, 0x94, 0xef, 0x4a, 0xe1, + 0xd8, 0x36, 0x59, 0xfe, 0x3f, 0x09, 0x38, 0x15, 0x4d, 0x11, 0xcc, 0xe5, 0xbe, 0x15, 0x98, 0x6b, + 0x51, 0xec, 0x5c, 0x2b, 0x24, 0x06, 0x5f, 0xd2, 0x41, 0x19, 0xf6, 0x06, 0x1c, 0xf0, 0x77, 0x4f, + 0x72, 0xa8, 0x66, 0xad, 0xfb, 0x89, 0x5a, 0x55, 0x56, 0x9a, 0xf9, 0x32, 0x01, 0x56, 0xd4, 0x51, + 0x5f, 0x7f, 0xae, 0x1f, 0xc8, 0x9b, 0xf0, 0x11, 0xae, 0x92, 0x5b, 0xf3, 0xa1, 0x17, 0x0d, 0xfe, + 0x7c, 0xc8, 0xbd, 0x83, 0xee, 0x0e, 0x9d, 0xcb, 0x11, 0x94, 0xd9, 0xca, 0x87, 0x1b, 0x85, 0xe4, + 0xeb, 0x12, 0xa4, 0x7c, 0x08, 0x6c, 0xb5, 0xaf, 0xf3, 0xfb, 0x0d, 0x49, 0xb8, 0xdf, 0xd8, 0x36, + 0xfe, 0xff, 0x19, 0x82, 0x03, 0xbe, 0x3a, 0x60, 0x6e, 0xfe, 0x12, 0x82, 0x21, 0x3f, 0x5f, 0x64, + 0x35, 0x35, 0x8e, 0x97, 0x0b, 0xdb, 0x42, 0x3f, 0xca, 0x8a, 0x3a, 0xe8, 0xe3, 0xe4, 0xf8, 0x8a, + 0xdb, 0x27, 0xa2, 0xb0, 0xf6, 0x98, 0xfe, 0x53, 0xe4, 0x6b, 0x7a, 0xbe, 0x83, 0x78, 0xc2, 0x7f, + 0x07, 0x71, 0x3c, 0x0a, 0x4b, 0xd7, 0xfe, 0x21, 0xa0, 0x7d, 0x2f, 0xb5, 0xbd, 0x7d, 0xff, 0x2f, + 0x04, 0x63, 0x7e, 0x61, 0xb2, 0x93, 0x77, 0x0d, 0x1f, 0x4a, 0x20, 0x07, 0xae, 0x79, 0x1b, 0x26, + 0xf0, 0x6b, 0x6e, 0xe7, 0x3e, 0x13, 0x25, 0xe1, 0xb5, 0x75, 0xa7, 0x30, 0x09, 0x03, 0x97, 0x74, + 0x6b, 0x7e, 0xad, 0x9e, 0x98, 0xb9, 0x99, 0x86, 0xa0, 0xa3, 0x9e, 0xc3, 0x59, 0x2b, 0x57, 0xa5, + 0x0f, 0xca, 0xbb, 0x1d, 0xb0, 0x4f, 0x00, 0x65, 0x6a, 0x56, 0x5d, 0x33, 0x5b, 0xcd, 0xa7, 0xf7, + 0x1c, 0xa9, 0x95, 0xa0, 0x89, 0xe7, 0x0b, 0x3e, 0xc9, 0xb5, 0xe4, 0xb9, 0xa1, 0x6c, 0x35, 0xde, + 0x11, 0xfe, 0x6a, 0xf2, 0x29, 0xf7, 0xd5, 0x64, 0x8b, 0x6b, 0xc0, 0xb0, 0x73, 0x2e, 0x05, 0xde, + 0x04, 0xa7, 0x27, 0xe4, 0xdd, 0x84, 0x76, 0x84, 0x86, 0x94, 0xe8, 0x5b, 0x02, 0x21, 0x91, 0x17, + 0xd8, 0x5d, 0x0a, 0x13, 0xaf, 0x79, 0x1a, 0x8d, 0x1d, 0x84, 0x63, 0xb4, 0x43, 0x50, 0xac, 0x0e, + 0xe3, 0x73, 0xae, 0x0e, 0xe3, 0x1e, 0xc2, 0x38, 0x4a, 0xee, 0x8c, 0xdc, 0x5a, 0x7c, 0x00, 0xba, + 0x8a, 0x86, 0xb5, 0x7c, 0xc3, 0xa8, 0x14, 0x73, 0xc9, 0x4e, 0x72, 0xbf, 0x20, 0x24, 0x4a, 0xfb, + 0x95, 0xc3, 0xe2, 0x45, 0xc3, 0xba, 0x58, 0xff, 0x51, 0x79, 0x06, 0x46, 0xae, 0x2e, 0x5e, 0x31, + 0xb2, 0x9a, 0x65, 0x94, 0xdb, 0x30, 0x86, 0xfe, 0x0e, 0x82, 0xfd, 0x1e, 0xfa, 0x2c, 0x38, 0x1e, + 0x75, 0x8d, 0xa2, 0x07, 0x76, 0x12, 0x5d, 0x04, 0x5c, 0x33, 0xe9, 0x5f, 0x70, 0xa7, 0x8f, 0x74, + 0x48, 0x3a, 0x9e, 0xba, 0x58, 0x80, 0x01, 0x1b, 0x44, 0x88, 0x76, 0xe3, 0xf9, 0xa2, 0xce, 0x06, + 0x47, 0x54, 0xfa, 0xb0, 0x35, 0xba, 0xf9, 0x11, 0x82, 0x7d, 0x02, 0x3f, 0xa6, 0x95, 0x47, 0xa0, + 0x73, 0x95, 0xfe, 0xd4, 0xaa, 0x6f, 0x7b, 0x95, 0x7c, 0x4f, 0xb0, 0x68, 0x19, 0x65, 0x9d, 0x13, + 0xe1, 0xa8, 0x51, 0xae, 0xf7, 0x5c, 0x2b, 0x16, 0x26, 0xcb, 0x90, 0xe0, 0x1b, 0xe6, 0xfc, 0xda, + 0x93, 0xea, 0x02, 0xd7, 0xca, 0x00, 0x24, 0x2a, 0xe5, 0x3c, 0xd3, 0x49, 0xfd, 0xcf, 0xed, 0x55, + 0x01, 0xff, 0x2b, 0x7a, 0x1d, 0x97, 0x9c, 0xe9, 0xf7, 0x0a, 0xec, 0x65, 0x4a, 0xe2, 0x49, 0x39, + 0x82, 0x82, 0x99, 0xeb, 0xd9, 0x14, 0xe2, 0x38, 0x9f, 0x43, 0x93, 0x6d, 0xa8, 0x59, 0xdf, 0x41, + 0x90, 0x14, 0x99, 0xdd, 0xd1, 0x97, 0x16, 0x5b, 0xe2, 0xe8, 0xef, 0x22, 0x18, 0xf5, 0x91, 0xa8, + 0x2d, 0x06, 0xf9, 0xa2, 0xdb, 0x20, 0xf7, 0x85, 0x31, 0x88, 0xff, 0x2c, 0xfe, 0x5b, 0x08, 0x86, + 0xae, 0x2e, 0xce, 0xad, 0xae, 0x72, 0xc0, 0xad, 0x4c, 0x8d, 0x5b, 0xe6, 0xec, 0xb7, 0x11, 0x0c, + 0xbb, 0xa4, 0x6c, 0x8b, 0x66, 0x2f, 0xba, 0x35, 0x7b, 0x22, 0x58, 0xb3, 0x5e, 0x9d, 0xb5, 0xc1, + 0xd1, 0x75, 0xc0, 0x73, 0xd9, 0xac, 0x51, 0x29, 0x5a, 0x8f, 0x68, 0x96, 0xc6, 0xd5, 0x7a, 0x15, + 0x7a, 0xb9, 0x2c, 0x8d, 0x89, 0xbf, 0x9e, 0xf9, 0xa9, 0xfa, 0x6a, 0xfe, 0x5a, 0x95, 0xfb, 0x1f, + 0x63, 0x2f, 0xe7, 0xe8, 0x1c, 0x81, 0x9f, 0xf7, 0xf7, 0x14, 0x04, 0x18, 0xe5, 0x38, 0x0c, 0x3a, + 0xd8, 0x30, 0xe5, 0x0e, 0x41, 0xc7, 0x4d, 0x6d, 0xb5, 0xa2, 0xf3, 0xc2, 0x40, 0x1e, 0x94, 0x69, + 0x90, 0xc9, 0x97, 0x4f, 0xc4, 0xa1, 0x1e, 0xd7, 0xad, 0x39, 0xd3, 0xd4, 0x2d, 0x72, 0x3f, 0x6f, + 0x3b, 0x4f, 0x1f, 0x48, 0x3c, 0xf8, 0x54, 0x29, 0x9f, 0x53, 0xd6, 0x60, 0x3c, 0x18, 0x85, 0x31, + 0x7b, 0x12, 0x06, 0x8a, 0xba, 0xb5, 0xac, 0xd5, 0x5f, 0x2d, 0x13, 0x4e, 0x2d, 0x07, 0x72, 0x1c, + 0x94, 0x98, 0x31, 0xfb, 0x8a, 0x0e, 0xf2, 0x33, 0xef, 0x4f, 0x40, 0x07, 0xe1, 0x5d, 0x3f, 0x0f, + 0xec, 0xa1, 0x55, 0x11, 0x47, 0xf8, 0xa4, 0x2b, 0x75, 0x3c, 0x14, 0x2c, 0x5d, 0x84, 0x32, 0xf1, + 0xe2, 0xc7, 0x9f, 0xbc, 0x2e, 0x8d, 0xe3, 0xb1, 0x4c, 0xc0, 0x07, 0x72, 0xac, 0xa0, 0xdf, 0x46, + 0xd0, 0x41, 0x27, 0x19, 0x43, 0x7d, 0x3b, 0x93, 0x3a, 0xd2, 0x02, 0x8a, 0xb1, 0xff, 0x31, 0x22, + 0xfc, 0xdf, 0x44, 0x4b, 0x67, 0xf0, 0xa9, 0x20, 0x11, 0xd8, 0x4e, 0x38, 0xb3, 0x2e, 0x7e, 0x41, + 0xb6, 0x41, 0x3f, 0x05, 0x5c, 0x3a, 0x85, 0x67, 0x82, 0xf0, 0xe8, 0x7e, 0x2c, 0xb3, 0x2e, 0x4c, + 0x93, 0x32, 0x2c, 0x3c, 0x99, 0x69, 0xf6, 0x7d, 0x61, 0x66, 0x9d, 0xfb, 0xdd, 0x06, 0x7e, 0x19, + 0x41, 0x97, 0xfd, 0xf5, 0x05, 0x0e, 0xfd, 0x81, 0x46, 0xea, 0x58, 0x08, 0x48, 0xa6, 0x84, 0x29, + 0xa2, 0x83, 0xc3, 0x58, 0x69, 0x2a, 0x94, 0x99, 0xd1, 0x56, 0x57, 0xf1, 0xcb, 0x09, 0xd8, 0x6b, + 0x0f, 0x83, 0x86, 0x1d, 0x4c, 0x4f, 0x4d, 0xb6, 0x06, 0x64, 0xb2, 0xfc, 0x5c, 0x22, 0xc2, 0xbc, + 0x2d, 0x2d, 0xcd, 0xe2, 0xe9, 0xb0, 0x4a, 0xe2, 0x16, 0x32, 0x97, 0x1e, 0xc6, 0x0f, 0x45, 0x45, + 0x6a, 0x98, 0x35, 0x9f, 0xdb, 0x68, 0xe6, 0x06, 0xfe, 0xe6, 0xa4, 0xb8, 0x4b, 0x97, 0xf0, 0xa3, + 0xa1, 0x19, 0xbb, 0x08, 0x15, 0xb5, 0x82, 0x6e, 0x13, 0xc2, 0x27, 0x42, 0x7b, 0x61, 0xdd, 0x3b, + 0xbe, 0x8b, 0xa0, 0x5b, 0x18, 0xa2, 0xc6, 0x11, 0x26, 0xad, 0x83, 0xe3, 0xd4, 0x67, 0x2e, 0x5c, + 0x39, 0x41, 0xcc, 0x32, 0x81, 0x0f, 0xb7, 0x10, 0x8f, 0x7a, 0xc9, 0x2b, 0xbb, 0xa1, 0x93, 0x7f, + 0x67, 0x12, 0x72, 0x0e, 0x35, 0x75, 0xb4, 0x25, 0x1c, 0x13, 0xe5, 0x17, 0x09, 0x22, 0xcb, 0x3b, + 0x89, 0xa5, 0x19, 0x7c, 0x5f, 0x44, 0xa5, 0x9b, 0x4b, 0xe7, 0xf0, 0x99, 0xc8, 0x86, 0x22, 0x16, + 0x8a, 0x64, 0x62, 0x3f, 0x63, 0xd9, 0x22, 0x3c, 0x86, 0x2f, 0x6f, 0x05, 0x21, 0x2e, 0x57, 0x94, + 0xcc, 0x25, 0x8a, 0xf1, 0x20, 0x3e, 0x1f, 0x03, 0x8f, 0x71, 0x0d, 0xf6, 0x53, 0xbf, 0x30, 0xc1, + 0xaf, 0x22, 0x80, 0xc6, 0x30, 0x27, 0x0e, 0x3f, 0xf0, 0x99, 0x9a, 0x0a, 0x03, 0xca, 0x3c, 0xe3, + 0x38, 0x71, 0x8c, 0x23, 0xf8, 0xde, 0xe6, 0xb2, 0x51, 0x1f, 0xfd, 0x1e, 0x82, 0x2e, 0x7b, 0x3e, + 0x0e, 0x87, 0x9e, 0x74, 0x0c, 0x4e, 0xac, 0x9e, 0x31, 0x3f, 0x65, 0x96, 0xc8, 0x73, 0x12, 0x1f, + 0x0f, 0x92, 0xc7, 0xe0, 0x28, 0x99, 0x75, 0x36, 0xc2, 0xb8, 0x81, 0x7f, 0x86, 0xa0, 0xcf, 0x39, + 0xbc, 0x87, 0xa3, 0x0d, 0xf9, 0xa5, 0xd2, 0x61, 0xc1, 0x99, 0x98, 0xe7, 0x88, 0x98, 0x4d, 0x82, + 0x89, 0x6c, 0x2e, 0xfc, 0x64, 0x7d, 0x0f, 0x01, 0xf6, 0x36, 0x66, 0x70, 0xf4, 0x31, 0xa6, 0xd4, + 0x4c, 0x14, 0x14, 0x26, 0xf7, 0x83, 0x44, 0xee, 0x66, 0xee, 0x4f, 0xea, 0x56, 0x49, 0xcf, 0x66, + 0xd6, 0xdd, 0xb7, 0x12, 0x1b, 0xb8, 0x7e, 0x92, 0xf5, 0x1f, 0x43, 0xc1, 0xf1, 0xc6, 0x56, 0x52, + 0x67, 0xa2, 0xa2, 0xb1, 0x75, 0xa4, 0xc9, 0x3a, 0x26, 0xf1, 0x44, 0xcb, 0x75, 0x50, 0xcf, 0xfd, + 0x1d, 0x82, 0x61, 0xdf, 0xe6, 0x14, 0x8e, 0x35, 0x47, 0x90, 0x3a, 0x1d, 0x11, 0x8b, 0x89, 0xfd, + 0x30, 0x11, 0xfb, 0x7e, 0x7c, 0x36, 0x48, 0x6c, 0xde, 0x04, 0x0b, 0xb2, 0xc0, 0x6f, 0x11, 0x8c, + 0x06, 0xde, 0xf4, 0xe2, 0xd8, 0x97, 0xc3, 0xa9, 0xfb, 0x63, 0x60, 0xb2, 0x35, 0x4d, 0x93, 0x35, + 0x1d, 0xc7, 0xc7, 0xc2, 0xac, 0x89, 0x5a, 0xe3, 0x0d, 0x09, 0x4e, 0x44, 0xb9, 0x74, 0xc3, 0x5b, + 0x79, 0x75, 0x97, 0xba, 0xb2, 0x35, 0xc4, 0xd8, 0xf2, 0x2f, 0x93, 0xe5, 0x3f, 0x8a, 0x2f, 0xc4, + 0x34, 0x29, 0x4f, 0xb0, 0xa4, 0x05, 0xf9, 0xb2, 0x04, 0x83, 0x3e, 0x52, 0xe0, 0x18, 0xd7, 0x54, + 0xa9, 0xd9, 0x48, 0x38, 0x6c, 0x35, 0xdf, 0xa6, 0x9b, 0xfb, 0x6f, 0xa0, 0xa5, 0xcb, 0x78, 0xe1, + 0xce, 0x57, 0xc4, 0x2b, 0xdf, 0xe9, 0x16, 0xd5, 0x25, 0xc0, 0xdb, 0x7f, 0x8d, 0x60, 0x7f, 0xc0, + 0x5d, 0x05, 0x8e, 0x79, 0xb9, 0x91, 0x3a, 0x1b, 0x19, 0x8f, 0xa9, 0x26, 0x43, 0x34, 0x73, 0x0c, + 0x1f, 0x6d, 0xbd, 0x16, 0xb6, 0xa3, 0x43, 0xd0, 0x65, 0x5f, 0x65, 0x04, 0x57, 0x4b, 0xf7, 0xc5, + 0x48, 0x70, 0xb5, 0xf4, 0xdc, 0x8b, 0xb4, 0xde, 0x62, 0xd6, 0xcb, 0x0e, 0x2d, 0x3e, 0xe6, 0x06, + 0xfe, 0x09, 0x82, 0x7e, 0x57, 0xef, 0x16, 0x47, 0x6c, 0xf2, 0xa6, 0x32, 0xa1, 0xe1, 0xc3, 0x66, + 0x6a, 0xd6, 0x18, 0xe1, 0xa7, 0xd6, 0xd7, 0xea, 0x7b, 0x0c, 0x4e, 0x0b, 0x87, 0x6e, 0xb7, 0x36, + 0xd9, 0x63, 0xb8, 0x5b, 0xc3, 0xad, 0x2d, 0xc9, 0x45, 0x5a, 0x27, 0x05, 0x7c, 0x03, 0xbf, 0x2d, + 0x2a, 0x8e, 0xf6, 0x1d, 0x71, 0xc4, 0x06, 0x65, 0x08, 0xc5, 0x39, 0x1b, 0xac, 0xad, 0xf3, 0x2a, + 0x97, 0xb2, 0x52, 0xce, 0x67, 0xd6, 0x2b, 0xe5, 0xfc, 0x06, 0xfe, 0xa5, 0xd8, 0x09, 0xe7, 0xed, + 0x38, 0x1c, 0xb9, 0x73, 0x97, 0x9a, 0x8e, 0x80, 0x11, 0x76, 0x43, 0xc4, 0xa5, 0xf5, 0x9c, 0xd6, + 0x7f, 0x80, 0xa0, 0xd7, 0xd1, 0xe9, 0xc2, 0x91, 0x1a, 0x62, 0xa9, 0x93, 0x21, 0xa1, 0xc3, 0x86, + 0x0c, 0x6f, 0xd4, 0x91, 0x18, 0x7e, 0x0b, 0x41, 0xb7, 0xd0, 0xb5, 0x0a, 0x3e, 0x2c, 0x7a, 0x3b, + 0x68, 0xc1, 0x87, 0x45, 0x9f, 0x36, 0x98, 0xf2, 0x00, 0x11, 0xeb, 0x34, 0x9e, 0x0d, 0x8c, 0x64, + 0x8a, 0x44, 0x1e, 0xd7, 0x1d, 0x9d, 0xb9, 0x0d, 0xfc, 0x3e, 0x82, 0x41, 0x9f, 0xb6, 0x17, 0x3e, + 0xdb, 0xb4, 0xad, 0x14, 0xdc, 0x5b, 0x4b, 0x9d, 0x8b, 0x8e, 0x18, 0x76, 0xff, 0x5e, 0xd4, 0x2d, + 0xd2, 0x7e, 0xa3, 0xdd, 0xb7, 0xcc, 0x7a, 0x3e, 0xb7, 0x31, 0xff, 0x95, 0x0f, 0x6f, 0x8d, 0xa1, + 0x8f, 0x6e, 0x8d, 0xa1, 0xbf, 0xdd, 0x1a, 0x43, 0xaf, 0x6e, 0x8e, 0xed, 0xfa, 0x68, 0x73, 0x6c, + 0xd7, 0x9f, 0x37, 0xc7, 0x76, 0xc1, 0x68, 0xde, 0x08, 0x10, 0xe5, 0x1a, 0x5a, 0x3a, 0xb5, 0x92, + 0xb7, 0x9e, 0xad, 0x5c, 0x4f, 0x67, 0x8d, 0x82, 0xc0, 0xed, 0x64, 0xde, 0x10, 0x79, 0xbf, 0xd0, + 0xe0, 0x6e, 0xad, 0x95, 0x74, 0xf3, 0xfa, 0x1e, 0xf2, 0x3f, 0xa3, 0x66, 0xff, 0x17, 0x00, 0x00, + 0xff, 0xff, 0xd7, 0xbb, 0xd4, 0x62, 0x72, 0x4b, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/metadata/types/query.pb.gw.go b/x/metadata/types/query.pb.gw.go index e1404613e9..4c880d4d25 100644 --- a/x/metadata/types/query.pb.gw.go +++ b/x/metadata/types/query.pb.gw.go @@ -3332,6 +3332,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_ScopeNetAssetValues_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 { @@ -3339,6 +3341,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_ScopeNetAssetValues_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/metadata/types/scope.pb.go b/x/metadata/types/scope.pb.go index 4c7f8d5e5a..ab690ab5c7 100644 --- a/x/metadata/types/scope.pb.go +++ b/x/metadata/types/scope.pb.go @@ -5,10 +5,10 @@ package types import ( fmt "fmt" + types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" - types "github.com/cosmos/cosmos-sdk/types" _ "google.golang.org/protobuf/types/descriptorpb" _ "google.golang.org/protobuf/types/known/timestamppb" io "io" diff --git a/x/msgfees/keeper/keeper.go b/x/msgfees/keeper/keeper.go index 8fffbc026b..3a04a640f6 100644 --- a/x/msgfees/keeper/keeper.go +++ b/x/msgfees/keeper/keeper.go @@ -22,9 +22,7 @@ import ( const StoreKey = types.ModuleName -// TODO[1760]: event-history: Put this back once our version of the SDK is back in with the updated baseapp.Simulate func. -// type baseAppSimulateFunc func(txBytes []byte) (sdk.GasInfo, *sdk.Result, sdk.Context, error) -type baseAppSimulateFunc func(txBytes []byte) (sdk.GasInfo, *sdk.Result, error) +type baseAppSimulateFunc func(txBytes []byte) (sdk.GasInfo, *sdk.Result, sdk.Context, error) // Keeper of the Additional fee store type Keeper struct { diff --git a/x/msgfees/keeper/query_server.go b/x/msgfees/keeper/query_server.go index a7464eee99..d7cabed70c 100644 --- a/x/msgfees/keeper/query_server.go +++ b/x/msgfees/keeper/query_server.go @@ -2,15 +2,16 @@ package keeper import ( "context" - "errors" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" "cosmossdk.io/store/prefix" sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/types/query" + "github.com/provenance-io/provenance/internal/antewrapper" "github.com/provenance-io/provenance/x/msgfees/types" ) @@ -52,38 +53,34 @@ func (k Keeper) QueryAllMsgFees(c context.Context, req *types.QueryAllMsgFeesReq } func (k Keeper) CalculateTxFees(goCtx context.Context, request *types.CalculateTxFeesRequest) (*types.CalculateTxFeesResponse, error) { - // TODO[1760]: event-history: Put this back once our version of the SDK is back in with the updated baseapp.Simulate func. - /* - ctx := sdk.UnwrapSDKContext(goCtx) + ctx := sdk.UnwrapSDKContext(goCtx) - gasInfo, _, txCtx, err := k.simulateFunc(request.TxBytes) - if err != nil { - return nil, sdkerrors.ErrInvalidRequest.Wrap(err.Error()) - } + gasInfo, _, txCtx, err := k.simulateFunc(request.TxBytes) + if err != nil { + return nil, sdkerrors.ErrInvalidRequest.Wrap(err.Error()) + } - gasMeter, err := antewrapper.GetFeeGasMeter(txCtx) - if err != nil { - return nil, err - } - // based on Carlton H's comment this is only for testing, has no real value in practical usage. - baseDenom := k.defaultFeeDenom - if request.DefaultBaseDenom != "" { - baseDenom = request.DefaultBaseDenom - } + gasMeter, err := antewrapper.GetFeeGasMeter(txCtx) + if err != nil { + return nil, err + } + // based on Carlton H's comment this is only for testing, has no real value in practical usage. + baseDenom := k.defaultFeeDenom + if request.DefaultBaseDenom != "" { + baseDenom = request.DefaultBaseDenom + } - minGasPrice := k.GetFloorGasPrice(ctx) - gasAdjustment := request.GasAdjustment - if gasAdjustment <= 0 { - gasAdjustment = 1.0 - } - gasUsed := int64(float64(gasInfo.GasUsed) * float64(gasAdjustment)) - totalFees := gasMeter.FeeConsumed().Add(sdk.NewCoin(baseDenom, minGasPrice.Amount.MulRaw(gasUsed))) - - return &types.CalculateTxFeesResponse{ - AdditionalFees: gasMeter.FeeConsumed(), - TotalFees: totalFees, - EstimatedGas: uint64(gasUsed), - }, nil - */ - return nil, errors.New("not yet updated") + minGasPrice := k.GetFloorGasPrice(ctx) + gasAdjustment := request.GasAdjustment + if gasAdjustment <= 0 { + gasAdjustment = 1.0 + } + gasUsed := int64(float64(gasInfo.GasUsed) * float64(gasAdjustment)) + totalFees := gasMeter.FeeConsumed().Add(sdk.NewCoin(baseDenom, minGasPrice.Amount.MulRaw(gasUsed))) + + return &types.CalculateTxFeesResponse{ + AdditionalFees: gasMeter.FeeConsumed(), + TotalFees: totalFees, + EstimatedGas: uint64(gasUsed), + }, nil } diff --git a/x/msgfees/types/tx.pb.go b/x/msgfees/types/tx.pb.go index 9d111c665f..f1df6e9645 100644 --- a/x/msgfees/types/tx.pb.go +++ b/x/msgfees/types/tx.pb.go @@ -654,59 +654,59 @@ func init() { func init() { proto.RegisterFile("provenance/msgfees/v1/tx.proto", fileDescriptor_4c6bb65eaf858b5f) } var fileDescriptor_4c6bb65eaf858b5f = []byte{ - // 824 bytes of a gzipped FileDescriptorProto + // 829 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x56, 0x41, 0x6b, 0x1b, 0x47, - 0x14, 0xd6, 0xc8, 0xaa, 0xc1, 0x53, 0xd7, 0xe0, 0x41, 0x6e, 0x65, 0xd5, 0xdd, 0x55, 0x75, 0x68, + 0x14, 0xd6, 0xc8, 0xaa, 0xc1, 0xd3, 0xd6, 0xe0, 0x41, 0x6e, 0x65, 0xd5, 0xdd, 0x55, 0x75, 0x68, 0x6d, 0x17, 0xed, 0x5a, 0x96, 0xeb, 0x82, 0xa1, 0x05, 0xcb, 0xc5, 0xd0, 0x83, 0x8a, 0x50, 0xeb, 0x4b, 0x2f, 0xcb, 0x4a, 0x3b, 0x5e, 0x0d, 0xd5, 0xce, 0x6c, 0xf7, 0xad, 0x84, 0x05, 0x85, 0x42, - 0xa1, 0x50, 0x28, 0x94, 0x1c, 0x73, 0x09, 0xf1, 0x35, 0x3e, 0xe5, 0x90, 0x1f, 0xe1, 0xa3, 0xc9, - 0x21, 0xe4, 0xe4, 0x38, 0xf6, 0x21, 0xb9, 0xe4, 0x92, 0x5f, 0x10, 0x76, 0x77, 0x22, 0xd9, 0x96, - 0xb4, 0x8a, 0x1c, 0x9f, 0x72, 0xd2, 0x8c, 0xde, 0xf7, 0xde, 0xfb, 0xde, 0xf7, 0xe6, 0xcd, 0x2c, - 0x56, 0x5c, 0x4f, 0x74, 0x28, 0x37, 0x79, 0x83, 0xea, 0x0e, 0xd8, 0xfb, 0x94, 0x82, 0xde, 0x29, - 0xea, 0xfe, 0x81, 0xe6, 0x7a, 0xc2, 0x17, 0x64, 0xa1, 0x6f, 0xd7, 0xa4, 0x5d, 0xeb, 0x14, 0xb3, - 0x69, 0x5b, 0xd8, 0x22, 0x44, 0xe8, 0xc1, 0x2a, 0x02, 0x67, 0x17, 0x1b, 0x02, 0x1c, 0x01, 0x46, - 0x64, 0x88, 0x36, 0xd2, 0xa4, 0x44, 0x3b, 0xbd, 0x6e, 0x02, 0xd5, 0x3b, 0xc5, 0x3a, 0xf5, 0xcd, - 0xa2, 0xde, 0x10, 0x8c, 0x4b, 0xfb, 0x67, 0xd2, 0xee, 0x80, 0x1d, 0xe4, 0x77, 0xc0, 0x8e, 0x0c, - 0xf9, 0xe7, 0x08, 0x2f, 0x55, 0xc0, 0xde, 0x06, 0xa0, 0x00, 0x3b, 0x6d, 0xf0, 0x85, 0x53, 0x01, - 0x7b, 0x97, 0xd2, 0x1a, 0xfd, 0xa3, 0x4d, 0xc1, 0x27, 0x04, 0xa7, 0xb8, 0xe9, 0xd0, 0x0c, 0xca, - 0xa1, 0xe5, 0x99, 0x5a, 0xb8, 0x26, 0xdf, 0xe1, 0x69, 0xd3, 0x11, 0x6d, 0xee, 0x67, 0x92, 0x39, - 0xb4, 0xfc, 0xf1, 0xfa, 0xa2, 0x26, 0xc9, 0x04, 0xe9, 0x35, 0x99, 0x5e, 0xdb, 0x11, 0x8c, 0x97, - 0x53, 0xc7, 0xa7, 0x6a, 0xa2, 0x26, 0xe1, 0x64, 0x09, 0xcf, 0x78, 0xb4, 0xc1, 0x5c, 0x46, 0xb9, - 0x9f, 0x99, 0x0a, 0x23, 0xf6, 0xff, 0x08, 0x52, 0xed, 0x7b, 0xc2, 0xc9, 0xa4, 0xa2, 0x54, 0xc1, - 0x9a, 0x6c, 0xe0, 0x4f, 0x7b, 0x00, 0xa3, 0x6e, 0x02, 0x03, 0xc3, 0x15, 0x8c, 0xfb, 0x90, 0xf9, - 0x28, 0x44, 0xa5, 0x7b, 0xd6, 0x72, 0x60, 0xac, 0x86, 0xb6, 0xad, 0xd9, 0x7f, 0x0f, 0xd5, 0xc4, - 0xdd, 0x43, 0x15, 0xbd, 0x3c, 0x54, 0x13, 0x79, 0x15, 0x7f, 0x31, 0xa2, 0x44, 0x70, 0x05, 0x07, - 0x9a, 0x7f, 0x95, 0xc4, 0x9f, 0x07, 0x08, 0xcb, 0x8a, 0x0c, 0x55, 0x4f, 0xb8, 0x02, 0xcc, 0xd6, - 0x5b, 0x0d, 0x72, 0x78, 0xd6, 0x01, 0xdb, 0xf0, 0xbb, 0x2e, 0x35, 0xda, 0x5e, 0x4b, 0x6a, 0x81, - 0x1d, 0xb0, 0x7f, 0xed, 0xba, 0x74, 0xcf, 0x6b, 0x91, 0xff, 0x10, 0x9e, 0x33, 0x2d, 0x8b, 0xf9, - 0x4c, 0x70, 0xb3, 0x65, 0xec, 0x53, 0x3a, 0x5e, 0x9a, 0x9f, 0x02, 0x69, 0x5e, 0x9f, 0xaa, 0x0b, - 0x5d, 0xd3, 0x69, 0x6d, 0xe5, 0xaf, 0xba, 0xe7, 0x8f, 0x9e, 0xa9, 0xcb, 0x36, 0xf3, 0x9b, 0xed, - 0xba, 0xd6, 0x10, 0x8e, 0xec, 0xb6, 0xfc, 0x29, 0x80, 0xf5, 0xbb, 0x1e, 0xb0, 0x81, 0x30, 0x12, - 0xd4, 0x3e, 0xe9, 0x3b, 0xef, 0x52, 0x3a, 0x46, 0xe6, 0xd1, 0x92, 0xa6, 0x46, 0x4b, 0x4a, 0x36, - 0xf1, 0x8c, 0xd9, 0xf6, 0x9b, 0xc2, 0x63, 0x7e, 0x37, 0xd2, 0xbe, 0x9c, 0x79, 0xfc, 0xa8, 0x90, - 0x96, 0xe5, 0x6d, 0x5b, 0x96, 0x47, 0x01, 0x7e, 0xf1, 0x3d, 0xc6, 0xed, 0x5a, 0x1f, 0xba, 0x45, - 0x82, 0x36, 0xfc, 0xfd, 0xe2, 0xe1, 0x6a, 0xff, 0xbf, 0xbc, 0x12, 0x9d, 0xb9, 0x41, 0xb9, 0x65, - 0x3f, 0x9e, 0x24, 0xb1, 0x52, 0x01, 0x7b, 0xcf, 0xb5, 0x4c, 0x9f, 0xde, 0xb4, 0x25, 0xde, 0xe4, - 0x1d, 0x59, 0x0b, 0x3a, 0xf2, 0x21, 0x0b, 0xff, 0x25, 0x56, 0x47, 0xea, 0x2a, 0xb5, 0xff, 0x1f, - 0x85, 0xda, 0xd7, 0xa8, 0x23, 0x3a, 0x37, 0xd6, 0xfe, 0x0a, 0xe7, 0xe4, 0x6d, 0x70, 0x1e, 0xce, - 0x47, 0x72, 0xbe, 0x8f, 0xf0, 0x57, 0xbd, 0xba, 0x7e, 0x6e, 0x9a, 0xd0, 0xac, 0x52, 0x6f, 0x0f, - 0xac, 0x0a, 0x6b, 0x5d, 0xe7, 0xbe, 0x82, 0xe7, 0x79, 0x00, 0x30, 0x5c, 0xea, 0x19, 0x6d, 0xb0, - 0x0c, 0x87, 0x45, 0x05, 0xa4, 0x6a, 0x73, 0xfc, 0x8a, 0xe7, 0xad, 0x16, 0xb1, 0x82, 0xbf, 0x1e, - 0x4b, 0x50, 0x16, 0x73, 0x84, 0xf0, 0x6a, 0x0f, 0xbb, 0x23, 0x78, 0x87, 0x7a, 0xc0, 0x04, 0xdf, - 0xa5, 0xf4, 0x47, 0xca, 0x85, 0x73, 0xbd, 0xa0, 0x35, 0x9c, 0x6e, 0xf4, 0x40, 0xc1, 0x31, 0x37, - 0xac, 0x00, 0x26, 0x9b, 0x42, 0x1a, 0x03, 0x01, 0x6e, 0xb5, 0xae, 0x02, 0xfe, 0xe6, 0x9d, 0xb8, - 0x46, 0xb5, 0xad, 0x9f, 0x4d, 0xe3, 0xa9, 0x0a, 0xd8, 0xe4, 0x2f, 0x4c, 0x06, 0xaf, 0x63, 0x52, - 0xd2, 0x86, 0xbe, 0x86, 0x5a, 0xdc, 0xfb, 0x94, 0xdd, 0x98, 0xcc, 0x29, 0x22, 0x42, 0xfe, 0xc4, - 0xf3, 0x03, 0xd7, 0x0f, 0x59, 0x8f, 0x09, 0x35, 0xe2, 0x69, 0xc8, 0x96, 0x26, 0xf2, 0x91, 0xd9, - 0xff, 0x41, 0x38, 0x3d, 0x6c, 0x08, 0xc9, 0xb7, 0xa3, 0xa3, 0xc5, 0x5c, 0x86, 0xd9, 0xcd, 0x49, - 0xdd, 0x2e, 0xf1, 0x18, 0x36, 0x58, 0x71, 0x3c, 0x62, 0x2e, 0x86, 0x38, 0x1e, 0x71, 0xf3, 0x4b, - 0xee, 0x21, 0xbc, 0x14, 0x37, 0x1b, 0xe4, 0xfb, 0x71, 0x05, 0xc6, 0x0e, 0x7d, 0xf6, 0x87, 0x9b, - 0xba, 0x4b, 0x7e, 0x0f, 0x10, 0xce, 0x8d, 0x3b, 0xe3, 0x64, 0x7b, 0x5c, 0x92, 0xb1, 0xb3, 0x9c, - 0x2d, 0xbf, 0x4f, 0x88, 0x88, 0x6b, 0x99, 0x1d, 0x9f, 0x2b, 0xe8, 0xe4, 0x5c, 0x41, 0x67, 0xe7, - 0x0a, 0xba, 0x73, 0xa1, 0x24, 0x4e, 0x2e, 0x94, 0xc4, 0xd3, 0x0b, 0x25, 0x81, 0x33, 0x4c, 0x0c, - 0x8f, 0x5f, 0x45, 0xbf, 0x95, 0x2e, 0xbd, 0x78, 0x7d, 0x4c, 0x81, 0x89, 0x4b, 0x3b, 0xfd, 0xa0, - 0xf7, 0x09, 0x1b, 0x3e, 0x81, 0xf5, 0xe9, 0xf0, 0x13, 0xb2, 0xf4, 0x26, 0x00, 0x00, 0xff, 0xff, - 0xf2, 0x44, 0x96, 0x7b, 0xe5, 0x0a, 0x00, 0x00, + 0xa1, 0x10, 0x08, 0x84, 0x1c, 0x73, 0x09, 0xf1, 0x35, 0x3e, 0xe5, 0x90, 0x1f, 0xe1, 0xa3, 0xc9, + 0x21, 0xe4, 0xe4, 0x18, 0xfb, 0x90, 0x10, 0xc8, 0x25, 0xbf, 0x20, 0xec, 0xee, 0x44, 0xb2, 0x2d, + 0x69, 0x15, 0x39, 0x3e, 0xe5, 0xa4, 0x19, 0xbd, 0xef, 0xbd, 0xf7, 0xbd, 0xef, 0xcd, 0x9b, 0x59, + 0xac, 0xb8, 0x9e, 0xe8, 0x50, 0x6e, 0xf2, 0x06, 0xd5, 0x1d, 0xb0, 0xf7, 0x28, 0x05, 0xbd, 0x53, + 0xd4, 0xfd, 0x7d, 0xcd, 0xf5, 0x84, 0x2f, 0xc8, 0x7c, 0xdf, 0xae, 0x49, 0xbb, 0xd6, 0x29, 0x66, + 0xd3, 0xb6, 0xb0, 0x45, 0x88, 0xd0, 0x83, 0x55, 0x04, 0xce, 0x2e, 0x34, 0x04, 0x38, 0x02, 0x8c, + 0xc8, 0x10, 0x6d, 0xa4, 0x49, 0x89, 0x76, 0x7a, 0xdd, 0x04, 0xaa, 0x77, 0x8a, 0x75, 0xea, 0x9b, + 0x45, 0xbd, 0x21, 0x18, 0x97, 0xf6, 0x2f, 0xa5, 0xdd, 0x01, 0x3b, 0xc8, 0xef, 0x80, 0x1d, 0x19, + 0xf2, 0xaf, 0x10, 0x5e, 0xac, 0x80, 0xbd, 0x05, 0x40, 0x01, 0xb6, 0xdb, 0xe0, 0x0b, 0xa7, 0x02, + 0xf6, 0x0e, 0xa5, 0x35, 0xfa, 0x77, 0x9b, 0x82, 0x4f, 0x08, 0x4e, 0x71, 0xd3, 0xa1, 0x19, 0x94, + 0x43, 0x4b, 0x33, 0xb5, 0x70, 0x4d, 0x7e, 0xc4, 0xd3, 0xa6, 0x23, 0xda, 0xdc, 0xcf, 0x24, 0x73, + 0x68, 0xe9, 0xd3, 0xb5, 0x05, 0x4d, 0x92, 0x09, 0xd2, 0x6b, 0x32, 0xbd, 0xb6, 0x2d, 0x18, 0x2f, + 0xa7, 0x8e, 0x4e, 0xd4, 0x44, 0x4d, 0xc2, 0xc9, 0x22, 0x9e, 0xf1, 0x68, 0x83, 0xb9, 0x8c, 0x72, + 0x3f, 0x33, 0x15, 0x46, 0xec, 0xff, 0x11, 0xa4, 0xda, 0xf3, 0x84, 0x93, 0x49, 0x45, 0xa9, 0x82, + 0x35, 0x59, 0xc7, 0x5f, 0xf4, 0x00, 0x46, 0xdd, 0x04, 0x06, 0x86, 0x2b, 0x18, 0xf7, 0x21, 0xf3, + 0x49, 0x88, 0x4a, 0xf7, 0xac, 0xe5, 0xc0, 0x58, 0x0d, 0x6d, 0x9b, 0xf3, 0xb7, 0x0e, 0xd4, 0xc4, + 0xbd, 0x03, 0x15, 0xbd, 0x3c, 0x50, 0x13, 0xff, 0xbd, 0x78, 0xb4, 0x12, 0x06, 0xcb, 0xab, 0xf8, + 0xeb, 0x11, 0xb5, 0x82, 0x2b, 0x38, 0xd0, 0xfc, 0xeb, 0x24, 0xfe, 0x2a, 0x40, 0x58, 0x56, 0x64, + 0xa8, 0x7a, 0xc2, 0x15, 0x60, 0xb6, 0xde, 0x89, 0x91, 0xc3, 0x9f, 0x39, 0x60, 0x1b, 0x7e, 0xd7, + 0xa5, 0x46, 0xdb, 0x6b, 0x49, 0x51, 0xb0, 0x03, 0xf6, 0x1f, 0x5d, 0x97, 0xee, 0x7a, 0x2d, 0x72, + 0x1b, 0xe1, 0x59, 0xd3, 0xb2, 0x98, 0xcf, 0x04, 0x37, 0x5b, 0xc6, 0x1e, 0xa5, 0xe3, 0x35, 0xfa, + 0x35, 0xd0, 0xe8, 0xcd, 0x89, 0x3a, 0xdf, 0x35, 0x9d, 0xd6, 0x66, 0xfe, 0xb2, 0x7b, 0xfe, 0xf0, + 0xb9, 0xba, 0x64, 0x33, 0xbf, 0xd9, 0xae, 0x6b, 0x0d, 0xe1, 0xc8, 0xb6, 0xcb, 0x9f, 0x02, 0x58, + 0x7f, 0xe9, 0x01, 0x1b, 0x08, 0x23, 0x41, 0xed, 0xf3, 0xbe, 0xf3, 0x0e, 0xa5, 0x63, 0xf4, 0x1e, + 0xad, 0x6d, 0x6a, 0xb4, 0xb6, 0x64, 0x03, 0xcf, 0x98, 0x6d, 0xbf, 0x29, 0x3c, 0xe6, 0x77, 0xa3, + 0x26, 0x94, 0x33, 0x4f, 0x1e, 0x17, 0xd2, 0xb2, 0xbc, 0x2d, 0xcb, 0xf2, 0x28, 0xc0, 0xef, 0xbe, + 0xc7, 0xb8, 0x5d, 0xeb, 0x43, 0x37, 0x49, 0xd0, 0x8f, 0xa0, 0x17, 0xfd, 0xff, 0xf2, 0x4a, 0x74, + 0xf8, 0x06, 0xe5, 0x96, 0xfd, 0x78, 0x9a, 0xc4, 0x4a, 0x05, 0xec, 0x5d, 0xd7, 0x32, 0x7d, 0x7a, + 0xdd, 0x96, 0x78, 0x93, 0x77, 0x64, 0x35, 0xe8, 0xc8, 0xc7, 0x2c, 0xfc, 0x37, 0x58, 0x1d, 0xa9, + 0xab, 0xd4, 0xfe, 0x0e, 0x0a, 0xb5, 0xaf, 0x51, 0x47, 0x74, 0xae, 0xad, 0xfd, 0x25, 0xce, 0xc9, + 0x9b, 0xe0, 0x3c, 0x9c, 0x8f, 0xe4, 0xfc, 0x00, 0xe1, 0x6f, 0x7b, 0x75, 0xfd, 0xd6, 0x34, 0xa1, + 0x59, 0xa5, 0xde, 0x2e, 0x58, 0x15, 0xd6, 0xba, 0xca, 0x7d, 0x19, 0xcf, 0xf1, 0x00, 0x60, 0xb8, + 0xd4, 0x33, 0xda, 0x60, 0x19, 0x0e, 0x8b, 0x0a, 0x48, 0xd5, 0x66, 0xf9, 0x25, 0xcf, 0x1b, 0x2d, + 0x62, 0x19, 0x7f, 0x37, 0x96, 0xa0, 0x2c, 0xe6, 0x10, 0xe1, 0x95, 0x1e, 0x76, 0x5b, 0xf0, 0x0e, + 0xf5, 0x80, 0x09, 0xbe, 0x43, 0xe9, 0x2f, 0x94, 0x0b, 0xe7, 0x6a, 0x41, 0xab, 0x38, 0xdd, 0xe8, + 0x81, 0x82, 0x63, 0x6e, 0x58, 0x01, 0x4c, 0x36, 0x85, 0x34, 0x06, 0x02, 0xdc, 0x68, 0x5d, 0x05, + 0xfc, 0xfd, 0x7b, 0x71, 0x8d, 0x6a, 0x5b, 0x3b, 0x9d, 0xc6, 0x53, 0x15, 0xb0, 0xc9, 0xbf, 0x98, + 0x0c, 0x5e, 0xc7, 0xa4, 0xa4, 0x0d, 0x7d, 0x16, 0xb5, 0xb8, 0x87, 0x2a, 0xbb, 0x3e, 0x99, 0x53, + 0x44, 0x84, 0xfc, 0x83, 0xe7, 0x06, 0xae, 0x1f, 0xb2, 0x16, 0x13, 0x6a, 0xc4, 0xd3, 0x90, 0x2d, + 0x4d, 0xe4, 0x23, 0xb3, 0xff, 0x8f, 0x70, 0x7a, 0xd8, 0x10, 0x92, 0x1f, 0x46, 0x47, 0x8b, 0xb9, + 0x0c, 0xb3, 0x1b, 0x93, 0xba, 0x5d, 0xe0, 0x31, 0x6c, 0xb0, 0xe2, 0x78, 0xc4, 0x5c, 0x0c, 0x71, + 0x3c, 0xe2, 0xe6, 0x97, 0xdc, 0x47, 0x78, 0x31, 0x6e, 0x36, 0xc8, 0x4f, 0xe3, 0x0a, 0x8c, 0x1d, + 0xfa, 0xec, 0xcf, 0xd7, 0x75, 0x97, 0xfc, 0x1e, 0x22, 0x9c, 0x1b, 0x77, 0xc6, 0xc9, 0xd6, 0xb8, + 0x24, 0x63, 0x67, 0x39, 0x5b, 0xfe, 0x90, 0x10, 0x11, 0xd7, 0x32, 0x3b, 0x3a, 0x53, 0xd0, 0xf1, + 0x99, 0x82, 0x4e, 0xcf, 0x14, 0x74, 0xf7, 0x5c, 0x49, 0x1c, 0x9f, 0x2b, 0x89, 0x67, 0xe7, 0x4a, + 0x02, 0x67, 0x98, 0x18, 0x1e, 0xbf, 0x8a, 0xfe, 0x2c, 0x5d, 0x78, 0xf1, 0xfa, 0x98, 0x02, 0x13, + 0x17, 0x76, 0xfa, 0x7e, 0xef, 0x5b, 0x36, 0x7c, 0x02, 0xeb, 0xd3, 0xe1, 0xb7, 0x64, 0xe9, 0x6d, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xb4, 0xbb, 0xf3, 0xbe, 0xee, 0x0a, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/name/simulation/operations_test.go b/x/name/simulation/operations_test.go index 096627df5a..2e97795fce 100644 --- a/x/name/simulation/operations_test.go +++ b/x/name/simulation/operations_test.go @@ -74,9 +74,9 @@ func (s *SimTestSuite) TestWeightedOperations() { opMsgRoute string opMsgName string }{ - {simappparams.DefaultWeightMsgBindName, sdk.MsgTypeURL(&types.MsgBindNameRequest{}), sdk.MsgTypeURL(&types.MsgBindNameRequest{})}, - {simappparams.DefaultWeightMsgDeleteName, sdk.MsgTypeURL(&types.MsgDeleteNameRequest{}), sdk.MsgTypeURL(&types.MsgDeleteNameRequest{})}, - {simappparams.DefaultWeightMsgModifyName, sdk.MsgTypeURL(&types.MsgModifyNameRequest{}), sdk.MsgTypeURL(&types.MsgModifyNameRequest{})}, + {weight: simappparams.DefaultWeightMsgBindName, opMsgRoute: types.RouterKey, opMsgName: sdk.MsgTypeURL(&types.MsgBindNameRequest{})}, + {weight: simappparams.DefaultWeightMsgDeleteName, opMsgRoute: types.RouterKey, opMsgName: sdk.MsgTypeURL(&types.MsgDeleteNameRequest{})}, + {weight: simappparams.DefaultWeightMsgModifyName, opMsgRoute: types.RouterKey, opMsgName: sdk.MsgTypeURL(&types.MsgModifyNameRequest{})}, } expNames := make([]string, len(expected)) @@ -116,9 +116,6 @@ func (s *SimTestSuite) TestSimulateMsgBindName() { name := "provenance" s.LogIfError(s.app.NameKeeper.SetNameRecord(s.ctx, name, accounts[0].Address, false), "SetNameRecord(%q)", name) - // begin a new block - // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) // TODO[1760]: finalize-block - // execute operation op := simulation.SimulateMsgBindName(s.app.NameKeeper, s.app.AccountKeeper, s.app.BankKeeper) operationMsg, futureOperations, err := op(r, s.app.BaseApp, s.ctx, accounts, "") @@ -126,13 +123,13 @@ func (s *SimTestSuite) TestSimulateMsgBindName() { s.LogOperationMsg(operationMsg) var msg types.MsgBindNameRequest - s.Require().NoError(types.ModuleCdc.UnmarshalJSON(operationMsg.Msg, &msg), "UnmarshalJSON(operationMsg.Msg)") + s.Require().NoError(types.ModuleCdc.Unmarshal(operationMsg.Msg, &msg), "UnmarshalJSON(operationMsg.Msg)") s.Assert().True(operationMsg.OK, "operationMsg.OK") s.Assert().Equal("cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r", msg.Record.Address, "msg.Record.Address") s.Assert().Equal("cosmos1tnh2q55v8wyygtt9srz5safamzdengsnqeycj3", msg.Parent.Address, "msg.Parent.Address") s.Assert().Equal(sdk.MsgTypeURL(&msg), operationMsg.Name, "operationMsg.Name") - s.Assert().Equal(sdk.MsgTypeURL(&msg), operationMsg.Route, "operationMsg.Route") + s.Assert().Equal(types.RouterKey, operationMsg.Route, "operationMsg.Route") s.Assert().Len(futureOperations, 0, "futureOperations") } @@ -150,9 +147,6 @@ func (s *SimTestSuite) TestSimulateMsgDeleteName() { name := "deleteme.deletemeroot" s.LogIfError(s.app.NameKeeper.SetNameRecord(s.ctx, name, accounts[0].Address, false), "SetNameRecord(%q)", name) - // begin a new block - // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) // TODO[1760]: finalize-block - // execute operation op := simulation.SimulateMsgDeleteName(s.app.NameKeeper, s.app.AccountKeeper, s.app.BankKeeper) operationMsg, futureOperations, err := op(r, s.app.BaseApp, s.ctx, accounts, "") @@ -160,13 +154,13 @@ func (s *SimTestSuite) TestSimulateMsgDeleteName() { s.LogOperationMsg(operationMsg) var msg types.MsgDeleteNameRequest - s.Require().NoError(types.ModuleCdc.UnmarshalJSON(operationMsg.Msg, &msg), "UnmarshalJSON(operationMsg.Msg)") + s.Require().NoError(types.ModuleCdc.Unmarshal(operationMsg.Msg, &msg), "UnmarshalJSON(operationMsg.Msg)") s.Assert().True(operationMsg.OK, "operationMsg.OK") s.Assert().Equal("cosmos1tnh2q55v8wyygtt9srz5safamzdengsnqeycj3", msg.Record.Address, "msg.Record.Address") s.Assert().Equal(name, msg.Record.Name, "msg.Record.Name") s.Assert().Equal(sdk.MsgTypeURL(&msg), operationMsg.Name, "operationMsg.Name") - s.Assert().Equal(sdk.MsgTypeURL(&msg), operationMsg.Route, "operationMsg.Route") + s.Assert().Equal(types.RouterKey, operationMsg.Route, "operationMsg.Route") s.Assert().Len(futureOperations, 0, "futureOperations") } @@ -182,9 +176,6 @@ func (s *SimTestSuite) TestSimulateMsgModifyName() { name := "modifyme" s.LogIfError(s.app.NameKeeper.SetNameRecord(s.ctx, name, accounts[0].Address, false), "SetNameRecord(%q)", name) - // begin a new block - // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) // TODO[1760]: finalize-block - // execute operation op := simulation.SimulateMsgModifyName(s.app.NameKeeper, s.app.AccountKeeper, s.app.BankKeeper) operationMsg, futureOperations, err := op(r, s.app.BaseApp, s.ctx, accounts, "") @@ -192,13 +183,13 @@ func (s *SimTestSuite) TestSimulateMsgModifyName() { s.LogOperationMsg(operationMsg) var msg types.MsgModifyNameRequest - s.Require().NoError(types.ModuleCdc.UnmarshalJSON(operationMsg.Msg, &msg), "UnmarshalJSON(operationMsg.Msg)") + s.Require().NoError(types.ModuleCdc.Unmarshal(operationMsg.Msg, &msg), "UnmarshalJSON(operationMsg.Msg)") s.Assert().True(operationMsg.OK, "operationMsg.OK") s.Assert().Equal("cosmos1tnh2q55v8wyygtt9srz5safamzdengsnqeycj3", msg.Record.Address, "msg.Record.Address") s.Assert().Equal(name, msg.Record.Name, "msg.Record.Name") s.Assert().Equal(sdk.MsgTypeURL(&msg), operationMsg.Name, "operationMsg.Name") - s.Assert().Equal(sdk.MsgTypeURL(&msg), operationMsg.Route, "operationMsg.Route") + s.Assert().Equal(types.RouterKey, operationMsg.Route, "operationMsg.Route") s.Assert().Len(futureOperations, 0, "futureOperations") } diff --git a/x/name/types/name.pb.go b/x/name/types/name.pb.go index 18830b2731..9aac9e5670 100644 --- a/x/name/types/name.pb.go +++ b/x/name/types/name.pb.go @@ -5,6 +5,8 @@ package types import ( fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + _ "github.com/cosmos/cosmos-sdk/types/msgservice" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" @@ -402,36 +404,40 @@ func init() { func init() { proto.RegisterFile("provenance/name/v1/name.proto", fileDescriptor_a314256905bb00ec) } var fileDescriptor_a314256905bb00ec = []byte{ - // 461 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x93, 0x31, 0x6f, 0xd3, 0x40, - 0x14, 0xc7, 0x7d, 0x6d, 0x52, 0x9a, 0x07, 0xa5, 0xd5, 0x29, 0x54, 0x16, 0x12, 0x6e, 0x94, 0x01, - 0x75, 0x80, 0x98, 0x8a, 0x05, 0x31, 0x16, 0xb1, 0x55, 0x28, 0x32, 0xea, 0xc2, 0x80, 0x7b, 0xb1, - 0x9f, 0x5c, 0x4b, 0xf6, 0x9d, 0x75, 0x77, 0x71, 0xc3, 0x37, 0x60, 0x64, 0x64, 0xec, 0xc8, 0x27, - 0x41, 0x8c, 0x1d, 0x19, 0x51, 0xb2, 0xf0, 0x31, 0xd0, 0x3d, 0x37, 0x8d, 0x1b, 0x06, 0x16, 0x3a, - 0xf9, 0xde, 0x7b, 0xff, 0xf7, 0xfe, 0xbf, 0x67, 0xe9, 0xc1, 0x93, 0x4a, 0xab, 0x1a, 0xa5, 0x90, - 0x09, 0x86, 0x52, 0x94, 0x18, 0xd6, 0x47, 0xf4, 0x1d, 0x55, 0x5a, 0x59, 0xc5, 0xf9, 0xaa, 0x3c, - 0xa2, 0x74, 0x7d, 0xf4, 0xb8, 0x9f, 0xa9, 0x4c, 0x51, 0x39, 0x74, 0xaf, 0x46, 0x39, 0xfc, 0xce, - 0x60, 0x6b, 0x2c, 0xb4, 0x28, 0x0d, 0x7f, 0x06, 0xbc, 0x14, 0xb3, 0xd8, 0x60, 0x56, 0xa2, 0xb4, - 0x71, 0x81, 0x32, 0xb3, 0xe7, 0x3e, 0x1b, 0xb0, 0xc3, 0x9d, 0x68, 0xaf, 0x14, 0xb3, 0xf7, 0x4d, - 0xe1, 0x84, 0xf2, 0xa4, 0xce, 0xe5, 0xba, 0x7a, 0xe3, 0x5a, 0x9d, 0xcb, 0xdb, 0xea, 0xa7, 0xb0, - 0xeb, 0x66, 0x3b, 0x96, 0xb8, 0xc0, 0x1a, 0x0b, 0xe3, 0x6f, 0x92, 0x74, 0xa7, 0x14, 0xb3, 0x77, - 0xa2, 0xc4, 0x13, 0x4a, 0xf2, 0x57, 0xe0, 0x8b, 0xa2, 0x50, 0x17, 0xf1, 0x54, 0x6a, 0x34, 0x56, - 0xe7, 0x89, 0xc5, 0x94, 0xda, 0x8c, 0xdf, 0x19, 0xb0, 0xc3, 0xed, 0x68, 0x9f, 0xea, 0xa7, 0xad, - 0xb2, 0x6b, 0x37, 0xc3, 0x33, 0x00, 0xf7, 0x88, 0x30, 0x51, 0x3a, 0xe5, 0x1c, 0x3a, 0xae, 0x89, - 0xe8, 0x7b, 0x11, 0xbd, 0xb9, 0x0f, 0xf7, 0x44, 0x9a, 0x6a, 0x34, 0x86, 0x30, 0x7b, 0xd1, 0x32, - 0xe4, 0x01, 0xc0, 0x6a, 0x1c, 0x81, 0x6d, 0x47, 0xad, 0xcc, 0xeb, 0xce, 0xd7, 0xcb, 0x03, 0x6f, - 0xf8, 0x8d, 0xc1, 0xfe, 0x1b, 0x8d, 0xc2, 0x62, 0xa4, 0x94, 0x75, 0x66, 0x63, 0xad, 0x2a, 0x65, - 0x44, 0xc1, 0xfb, 0xd0, 0xb5, 0xb9, 0x2d, 0x96, 0x7e, 0x4d, 0xc0, 0x07, 0x70, 0x3f, 0x45, 0x93, - 0xe8, 0xbc, 0xb2, 0xb9, 0x92, 0xd7, 0xa6, 0xed, 0xd4, 0x0d, 0xe6, 0x66, 0x0b, 0xb3, 0x0f, 0x5d, - 0x75, 0x21, 0x51, 0xd3, 0xbe, 0xbd, 0xa8, 0x09, 0xd6, 0x10, 0xbb, 0x7f, 0x21, 0x3e, 0xf8, 0x7c, - 0x79, 0xe0, 0x39, 0xcc, 0xdf, 0x0e, 0xf5, 0x23, 0x3c, 0x7c, 0x5b, 0xa3, 0x24, 0xc8, 0x63, 0x35, - 0x95, 0x69, 0x7b, 0x79, 0x76, 0x7b, 0xf9, 0x25, 0xc3, 0x46, 0x8b, 0xe1, 0x1f, 0x3f, 0x64, 0x78, - 0x06, 0x7b, 0x37, 0xf3, 0x4f, 0xe5, 0xe4, 0x0e, 0x1c, 0x62, 0xd8, 0x5d, 0x39, 0x54, 0xa9, 0xb0, - 0xf8, 0x7f, 0x0d, 0x8e, 0x93, 0x1f, 0xf3, 0x80, 0x5d, 0xcd, 0x03, 0xf6, 0x6b, 0x1e, 0xb0, 0x2f, - 0x8b, 0xc0, 0xbb, 0x5a, 0x04, 0xde, 0xcf, 0x45, 0xe0, 0xc1, 0xa3, 0x9c, 0x8e, 0x63, 0xed, 0x7e, - 0xc6, 0xec, 0xc3, 0x8b, 0x2c, 0xb7, 0xe7, 0xd3, 0xc9, 0x28, 0x51, 0x65, 0xb8, 0x12, 0x3c, 0xcf, - 0x55, 0x2b, 0x0a, 0x67, 0xcd, 0x3d, 0xda, 0x4f, 0x15, 0x9a, 0xc9, 0x16, 0x1d, 0xd9, 0xcb, 0x3f, - 0x01, 0x00, 0x00, 0xff, 0xff, 0x6b, 0xaa, 0xb0, 0xf6, 0xaf, 0x03, 0x00, 0x00, + // 518 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x93, 0xbf, 0x6f, 0x13, 0x3f, + 0x18, 0xc6, 0xcf, 0x6d, 0xd3, 0x6f, 0xe3, 0x2f, 0xa5, 0x91, 0x15, 0xca, 0x51, 0x89, 0x4b, 0x94, + 0x01, 0x55, 0x88, 0xe6, 0x28, 0x2c, 0x88, 0x8d, 0x20, 0xb6, 0x0a, 0x45, 0x57, 0x75, 0x61, 0xe0, + 0x70, 0xee, 0x5e, 0x5d, 0x2d, 0x9d, 0xed, 0x93, 0xed, 0xa4, 0x61, 0x65, 0x40, 0x8c, 0x8c, 0x8c, + 0x19, 0x19, 0x19, 0xf8, 0x1b, 0x10, 0x63, 0xc5, 0xc4, 0x88, 0x92, 0x01, 0xfe, 0x0c, 0x74, 0x76, + 0x7e, 0x1c, 0x61, 0x60, 0x81, 0xe9, 0xfc, 0x3e, 0xcf, 0xe3, 0x7b, 0x3f, 0x7e, 0xa5, 0x17, 0xdf, + 0x2c, 0x94, 0x1c, 0x81, 0xa0, 0x22, 0x81, 0x50, 0x50, 0x0e, 0xe1, 0xe8, 0xd8, 0x7e, 0xbb, 0x85, + 0x92, 0x46, 0x12, 0xb2, 0xb2, 0xbb, 0x56, 0x1e, 0x1d, 0x1f, 0x5c, 0x4f, 0xa4, 0xe6, 0x52, 0x87, + 0x5c, 0x67, 0x65, 0x9a, 0xeb, 0xcc, 0x85, 0x0f, 0x6e, 0x38, 0x23, 0xb6, 0x55, 0xe8, 0x8a, 0xb9, + 0xd5, 0xcc, 0x64, 0x26, 0x9d, 0x5e, 0x9e, 0x9c, 0xda, 0xf9, 0x84, 0xf0, 0x76, 0x9f, 0x2a, 0xca, + 0x35, 0xb9, 0x83, 0x09, 0xa7, 0xe3, 0x58, 0x43, 0xc6, 0x41, 0x98, 0x38, 0x07, 0x91, 0x99, 0x73, + 0x1f, 0xb5, 0xd1, 0xe1, 0x6e, 0xd4, 0xe0, 0x74, 0x7c, 0xea, 0x8c, 0x13, 0xab, 0xdb, 0x34, 0x13, + 0xeb, 0xe9, 0x8d, 0x79, 0x9a, 0x89, 0x5f, 0xd3, 0xb7, 0xf0, 0x5e, 0xf9, 0xef, 0x92, 0x3f, 0xce, + 0x61, 0x04, 0xb9, 0xf6, 0x37, 0x6d, 0x74, 0x97, 0xd3, 0xf1, 0x53, 0xca, 0xe1, 0xc4, 0x8a, 0xe4, + 0x01, 0xf6, 0x69, 0x9e, 0xcb, 0x8b, 0x78, 0x28, 0x14, 0x68, 0xa3, 0x58, 0x62, 0x20, 0xb5, 0xd7, + 0xb4, 0xbf, 0xd5, 0x46, 0x87, 0x3b, 0xd1, 0xbe, 0xf5, 0xcf, 0x2a, 0x76, 0x79, 0x5d, 0x77, 0x5e, + 0x23, 0x8c, 0xcb, 0x53, 0x04, 0x89, 0x54, 0x29, 0x21, 0x78, 0xab, 0xbc, 0x65, 0xf1, 0xeb, 0x91, + 0x3d, 0x93, 0x7b, 0xf8, 0x3f, 0x9a, 0xa6, 0x0a, 0xb4, 0xb6, 0x9c, 0xf5, 0x9e, 0xff, 0xe5, 0xe3, + 0x51, 0x73, 0x3e, 0xa4, 0x47, 0xce, 0x39, 0x35, 0x8a, 0x89, 0x2c, 0x5a, 0x04, 0x49, 0x80, 0xf1, + 0xaa, 0x93, 0x65, 0xde, 0x89, 0x2a, 0xca, 0xc3, 0xc6, 0xbb, 0x49, 0xcb, 0x7b, 0xf5, 0xfd, 0xc3, + 0xed, 0xc5, 0x8d, 0xce, 0x7b, 0x84, 0xf7, 0x1f, 0x2b, 0xa0, 0x06, 0x22, 0x29, 0x4d, 0x89, 0xd4, + 0x57, 0xb2, 0x90, 0x9a, 0xe6, 0xa4, 0x89, 0x6b, 0x86, 0x99, 0x7c, 0x41, 0xe5, 0x0a, 0xd2, 0xc6, + 0xff, 0xa7, 0xa0, 0x13, 0xc5, 0x0a, 0xc3, 0xa4, 0x70, 0x68, 0x51, 0x55, 0x5a, 0x3e, 0x66, 0xb3, + 0xf2, 0x98, 0x26, 0xae, 0xc9, 0x0b, 0x01, 0xca, 0x8e, 0xa5, 0x1e, 0xb9, 0x62, 0x0d, 0xb7, 0xf6, + 0x1b, 0xee, 0x95, 0x37, 0x93, 0x96, 0x57, 0x22, 0xff, 0x98, 0xb4, 0xbc, 0xce, 0x73, 0x7c, 0xf5, + 0xc9, 0x08, 0x84, 0x85, 0xec, 0xc9, 0xa1, 0x48, 0x89, 0xbf, 0x1a, 0x91, 0x63, 0x5c, 0x0e, 0x62, + 0xc1, 0xb0, 0x51, 0x61, 0xf8, 0xc3, 0x70, 0x3a, 0x2f, 0x70, 0x63, 0xf9, 0xff, 0x33, 0x31, 0xf8, + 0x07, 0x1d, 0x62, 0xbc, 0xb7, 0xea, 0x50, 0xa4, 0xd4, 0xc0, 0xdf, 0x6d, 0xd0, 0x4b, 0x3e, 0x4f, + 0x03, 0x74, 0x39, 0x0d, 0xd0, 0xb7, 0x69, 0x80, 0xde, 0xce, 0x02, 0xef, 0x72, 0x16, 0x78, 0x5f, + 0x67, 0x81, 0x87, 0xaf, 0x31, 0xbb, 0x43, 0x6b, 0xab, 0xd9, 0x47, 0xcf, 0xee, 0x66, 0xcc, 0x9c, + 0x0f, 0x07, 0xdd, 0x44, 0xf2, 0x70, 0x15, 0x38, 0x62, 0xb2, 0x52, 0x85, 0x63, 0xb7, 0xea, 0xe6, + 0x65, 0x01, 0x7a, 0xb0, 0x6d, 0x77, 0xf1, 0xfe, 0xcf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf0, 0xbe, + 0x0f, 0x18, 0x0a, 0x04, 0x00, 0x00, } func (m *Params) Marshal() (dAtA []byte, err error) { diff --git a/x/name/types/tx.pb.go b/x/name/types/tx.pb.go index 6de399b3f2..9bf52afe9b 100644 --- a/x/name/types/tx.pb.go +++ b/x/name/types/tx.pb.go @@ -388,38 +388,38 @@ func init() { func init() { proto.RegisterFile("provenance/name/v1/tx.proto", fileDescriptor_eacf6cd967218635) } var fileDescriptor_eacf6cd967218635 = []byte{ - // 487 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0x31, 0x6f, 0xd3, 0x40, - 0x14, 0xf6, 0x51, 0x54, 0xb5, 0x87, 0xd4, 0xe1, 0x48, 0x54, 0xd7, 0x15, 0x0e, 0xf2, 0x00, 0x05, - 0x11, 0x9b, 0x16, 0xa9, 0x03, 0x62, 0xc1, 0xb0, 0x1a, 0x21, 0xb3, 0x81, 0x04, 0x72, 0xed, 0xe3, - 0x6a, 0x09, 0xfb, 0x99, 0xbb, 0x4b, 0xd4, 0xac, 0x4c, 0x8c, 0x6c, 0x48, 0x15, 0x43, 0x7f, 0x02, - 0x03, 0x3f, 0xa2, 0x63, 0xc5, 0xc4, 0x84, 0x50, 0x32, 0xc0, 0xcf, 0x40, 0xf6, 0x19, 0x9c, 0xc4, - 0xb6, 0x48, 0x14, 0x36, 0x9f, 0xbf, 0xef, 0x7b, 0xdf, 0x77, 0xef, 0x3d, 0x1d, 0xde, 0xcd, 0x38, - 0x0c, 0x69, 0x1a, 0xa4, 0x21, 0x75, 0xd2, 0x20, 0xa1, 0xce, 0x70, 0xdf, 0x91, 0x27, 0x76, 0xc6, - 0x41, 0x02, 0x21, 0x15, 0x68, 0xe7, 0xa0, 0x3d, 0xdc, 0x37, 0x3a, 0x0c, 0x18, 0x14, 0xb0, 0x93, - 0x7f, 0x29, 0xa6, 0xb1, 0x1d, 0x82, 0x48, 0x40, 0x38, 0x89, 0x60, 0x79, 0x85, 0x44, 0xb0, 0x12, - 0xd8, 0x51, 0xc0, 0x2b, 0xa5, 0x50, 0x87, 0x12, 0xba, 0xd6, 0x60, 0x5d, 0xb8, 0x14, 0xb0, 0x75, - 0x8a, 0x30, 0xf1, 0x04, 0x73, 0xe3, 0x34, 0x7a, 0x12, 0x24, 0xd4, 0xa7, 0x6f, 0x07, 0x54, 0x48, - 0xf2, 0x00, 0xaf, 0x67, 0x01, 0xa7, 0xa9, 0xd4, 0xd1, 0x75, 0xb4, 0x77, 0xe5, 0xc0, 0xb4, 0xeb, - 0x21, 0x6d, 0x25, 0x08, 0x81, 0x47, 0xee, 0xe5, 0xf3, 0xef, 0x3d, 0xcd, 0x2f, 0x35, 0xb9, 0x9a, - 0x17, 0xff, 0xf5, 0x4b, 0xcb, 0xa8, 0x95, 0xe6, 0xfe, 0xc6, 0xfb, 0xb3, 0x9e, 0xf6, 0xeb, 0xac, - 0xa7, 0x59, 0x5d, 0x7c, 0x75, 0x26, 0x9b, 0xc8, 0x20, 0x15, 0xd4, 0x7a, 0x89, 0x3b, 0x9e, 0x60, - 0x8f, 0xe9, 0x1b, 0x2a, 0xe9, 0x5c, 0xe8, 0xd2, 0x16, 0xad, 0x64, 0xbb, 0x8d, 0xbb, 0x73, 0xf5, - 0x4b, 0xe3, 0x53, 0x84, 0x75, 0x4f, 0xb0, 0x47, 0x9c, 0x06, 0x92, 0xfa, 0x00, 0x72, 0xda, 0xfd, - 0x10, 0x6f, 0x06, 0x03, 0x79, 0x0c, 0x3c, 0x96, 0xa3, 0x22, 0xc0, 0xa6, 0xab, 0x7f, 0xfd, 0xd2, - 0xef, 0x94, 0xd3, 0x78, 0x18, 0x45, 0x9c, 0x0a, 0xf1, 0x4c, 0xf2, 0x38, 0x65, 0x7e, 0x45, 0x25, - 0x87, 0xcb, 0x35, 0xeb, 0x6f, 0xde, 0xad, 0x77, 0x3f, 0x3f, 0xdf, 0xae, 0xea, 0x58, 0xbb, 0x78, - 0xa7, 0x21, 0x5b, 0x99, 0xfc, 0x13, 0x2a, 0x7a, 0xe6, 0x41, 0x14, 0xbf, 0x1e, 0xfd, 0x8f, 0xd4, - 0xab, 0x8d, 0x78, 0x3e, 0xbb, 0xea, 0xf8, 0x74, 0x3a, 0x95, 0xfb, 0xe0, 0xe3, 0x1a, 0x5e, 0xf3, - 0x04, 0x23, 0x2f, 0xf0, 0xc6, 0x9f, 0x35, 0x20, 0x37, 0x9a, 0xac, 0xea, 0x3b, 0x6c, 0xdc, 0xfc, - 0x27, 0x4f, 0x99, 0x90, 0x00, 0xe3, 0x6a, 0xd8, 0x64, 0xaf, 0x45, 0x56, 0xdb, 0x37, 0xe3, 0xd6, - 0x02, 0xcc, 0xca, 0xa2, 0xba, 0x5d, 0xab, 0x45, 0x6d, 0x3c, 0xad, 0x16, 0xf5, 0x56, 0x91, 0x04, - 0x6f, 0xcd, 0x0e, 0x9f, 0xdc, 0x69, 0x11, 0x37, 0xee, 0xaf, 0xd1, 0x5f, 0x90, 0xad, 0xec, 0xdc, - 0xf0, 0x7c, 0x6c, 0xa2, 0x8b, 0xb1, 0x89, 0x7e, 0x8c, 0x4d, 0xf4, 0x61, 0x62, 0x6a, 0x17, 0x13, - 0x53, 0xfb, 0x36, 0x31, 0x35, 0xdc, 0x8d, 0xa1, 0xa1, 0xd4, 0x53, 0xf4, 0xfc, 0x2e, 0x8b, 0xe5, - 0xf1, 0xe0, 0xc8, 0x0e, 0x21, 0x71, 0x2a, 0x42, 0x3f, 0x86, 0xa9, 0x93, 0x73, 0xa2, 0x5e, 0x29, - 0x39, 0xca, 0xa8, 0x38, 0x5a, 0x2f, 0x1e, 0xa9, 0x7b, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x16, - 0xba, 0xe0, 0xa5, 0x40, 0x05, 0x00, 0x00, + // 494 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x94, 0x31, 0x6f, 0xd4, 0x30, + 0x14, 0xc7, 0x63, 0x8a, 0x2a, 0x6a, 0xa4, 0x0e, 0xee, 0x9d, 0x7a, 0x4d, 0x45, 0x0e, 0x65, 0x80, + 0x82, 0xb8, 0x84, 0x16, 0xa9, 0x03, 0x62, 0xe1, 0x60, 0x0d, 0x42, 0x61, 0x83, 0x01, 0xa5, 0x89, + 0x71, 0x2d, 0x91, 0xbc, 0x60, 0xfb, 0x4e, 0xbd, 0x95, 0x89, 0x91, 0x0d, 0x09, 0x31, 0x74, 0x61, + 0x67, 0xe0, 0x43, 0x74, 0xac, 0x98, 0x98, 0x10, 0xba, 0x1b, 0xe0, 0x63, 0xa0, 0xc4, 0x86, 0x5c, + 0x2f, 0x89, 0x68, 0xd5, 0x6e, 0xb1, 0xdf, 0xfb, 0xbf, 0xff, 0x2f, 0xef, 0x3d, 0x19, 0x6f, 0xe6, + 0x02, 0xc6, 0x34, 0x8b, 0xb2, 0x98, 0xfa, 0x59, 0x94, 0x52, 0x7f, 0xbc, 0xed, 0xab, 0x03, 0x2f, + 0x17, 0xa0, 0x80, 0x90, 0x2a, 0xe8, 0x15, 0x41, 0x6f, 0xbc, 0x6d, 0x77, 0x18, 0x30, 0x28, 0xc3, + 0x7e, 0xf1, 0xa5, 0x33, 0xed, 0xf5, 0x18, 0x64, 0x0a, 0xd2, 0x4f, 0x25, 0x2b, 0x2a, 0xa4, 0x92, + 0x99, 0xc0, 0x86, 0x0e, 0xbc, 0xd4, 0x0a, 0x7d, 0x30, 0xa1, 0x6b, 0x0d, 0xd6, 0xa5, 0x4b, 0x19, + 0x76, 0x3f, 0x23, 0x4c, 0x02, 0xc9, 0x86, 0x3c, 0x4b, 0x9e, 0x44, 0x29, 0x0d, 0xe9, 0x9b, 0x11, + 0x95, 0x8a, 0x3c, 0xc0, 0xcb, 0x79, 0x24, 0x68, 0xa6, 0x7a, 0xe8, 0x3a, 0xda, 0xba, 0xba, 0xe3, + 0x78, 0x75, 0x48, 0x4f, 0x0b, 0x62, 0x10, 0xc9, 0xf0, 0xf2, 0xd1, 0x8f, 0xbe, 0x15, 0x1a, 0x4d, + 0xa1, 0x16, 0xe5, 0x7d, 0xef, 0xd2, 0x59, 0xd4, 0x5a, 0x73, 0x7f, 0xed, 0xdd, 0x61, 0xdf, 0xfa, + 0x7d, 0xd8, 0xb7, 0xde, 0xfe, 0xfa, 0x72, 0xdb, 0x94, 0x74, 0xbb, 0x78, 0xed, 0x04, 0xa6, 0xcc, + 0x21, 0x93, 0xd4, 0xe5, 0xb8, 0x13, 0x48, 0xf6, 0x98, 0xbe, 0xa6, 0x8a, 0x2e, 0xf0, 0x1b, 0x02, + 0x74, 0x6e, 0x02, 0x7d, 0xe9, 0xae, 0xe3, 0xee, 0x82, 0x95, 0x61, 0xf8, 0x88, 0x70, 0x2f, 0x90, + 0xec, 0x91, 0xa0, 0x91, 0xa2, 0x21, 0x80, 0x9a, 0x07, 0xd9, 0xc5, 0x2b, 0xd1, 0x48, 0xed, 0x83, + 0xe0, 0x6a, 0x52, 0xb2, 0xac, 0x0c, 0x7b, 0xdf, 0xbe, 0x0e, 0x3a, 0x66, 0x46, 0x0f, 0x93, 0x44, + 0x50, 0x29, 0x9f, 0x29, 0xc1, 0x33, 0x16, 0x56, 0xa9, 0x64, 0xf7, 0x6c, 0x2d, 0xfc, 0x87, 0xbe, + 0x5a, 0x20, 0x57, 0x75, 0xdc, 0x4d, 0xbc, 0xd1, 0xc0, 0x66, 0xc8, 0x3f, 0xa1, 0xb2, 0x7d, 0x01, + 0x24, 0xfc, 0xd5, 0xe4, 0x22, 0xa8, 0xcf, 0x37, 0xf8, 0x45, 0x76, 0xdd, 0xf1, 0x79, 0x3a, 0xcd, + 0xbd, 0xf3, 0x61, 0x09, 0x2f, 0x05, 0x92, 0x91, 0x17, 0xf8, 0xca, 0xdf, 0x8d, 0x20, 0x37, 0x9a, + 0xac, 0xea, 0x9b, 0x6d, 0xdf, 0xfc, 0x6f, 0x9e, 0x36, 0x21, 0x11, 0xc6, 0xd5, 0xb0, 0xc9, 0x56, + 0x8b, 0xac, 0xb6, 0x7a, 0xf6, 0xad, 0x53, 0x64, 0x56, 0x16, 0xd5, 0xdf, 0xb5, 0x5a, 0xd4, 0xc6, + 0xd3, 0x6a, 0x51, 0x6f, 0x15, 0x49, 0xf1, 0xea, 0xc9, 0xe1, 0x93, 0x3b, 0x2d, 0xe2, 0xc6, 0xfd, + 0xb5, 0x07, 0xa7, 0xcc, 0xd6, 0x76, 0xc3, 0xf8, 0x68, 0xea, 0xa0, 0xe3, 0xa9, 0x83, 0x7e, 0x4e, + 0x1d, 0xf4, 0x7e, 0xe6, 0x58, 0xc7, 0x33, 0xc7, 0xfa, 0x3e, 0x73, 0x2c, 0xdc, 0xe5, 0xd0, 0x50, + 0xea, 0x29, 0x7a, 0x7e, 0x97, 0x71, 0xb5, 0x3f, 0xda, 0xf3, 0x62, 0x48, 0xfd, 0x2a, 0x61, 0xc0, + 0x61, 0xee, 0xe4, 0x1f, 0xe8, 0xb7, 0x4b, 0x4d, 0x72, 0x2a, 0xf7, 0x96, 0xcb, 0xa7, 0xeb, 0xde, + 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfd, 0x86, 0xaa, 0xee, 0x56, 0x05, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/oracle/simulation/operations_test.go b/x/oracle/simulation/operations_test.go index 6ebd8836bd..f8ee1f7173 100644 --- a/x/oracle/simulation/operations_test.go +++ b/x/oracle/simulation/operations_test.go @@ -62,16 +62,13 @@ func (s *SimTestSuite) TestWeightedOperations() { r := rand.New(source) accs := s.getTestingAccounts(r, 3) - // begin a new block - // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) // TODO[1760]: finalize-block - expected := []struct { weight int opMsgRoute string opMsgName string }{ - {simappparams.DefaultWeightUpdateOracle, sdk.MsgTypeURL(&types.MsgUpdateOracleRequest{}), sdk.MsgTypeURL(&types.MsgUpdateOracleRequest{})}, - {simappparams.DefaultWeightSendOracleQuery, sdk.MsgTypeURL(&types.MsgSendQueryOracleRequest{}), sdk.MsgTypeURL(&types.MsgSendQueryOracleRequest{})}, + {weight: simappparams.DefaultWeightUpdateOracle, opMsgRoute: types.ModuleName, opMsgName: sdk.MsgTypeURL(&types.MsgUpdateOracleRequest{})}, + {weight: simappparams.DefaultWeightSendOracleQuery, opMsgRoute: types.ModuleName, opMsgName: sdk.MsgTypeURL(&types.MsgSendQueryOracleRequest{})}, } expNames := make([]string, len(expected)) @@ -105,9 +102,6 @@ func (s *SimTestSuite) TestSimulateMsgUpdateOracle() { r := rand.New(source) accounts := s.getTestingAccounts(r, 3) - // begin a new block - // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) // TODO[1760]: finalize-block - // execute operation op := simulation.SimulateMsgUpdateOracle(s.app.OracleKeeper, s.app.AccountKeeper, s.app.BankKeeper) operationMsg, futureOperations, err := op(r, s.app.BaseApp, s.ctx, accounts, "") @@ -115,11 +109,11 @@ func (s *SimTestSuite) TestSimulateMsgUpdateOracle() { s.LogOperationMsg(operationMsg, "good") var msg types.MsgUpdateOracleRequest - s.Require().NoError(s.app.AppCodec().UnmarshalJSON(operationMsg.Msg, &msg), "UnmarshalJSON(operationMsg.Msg)") + s.Require().NoError(s.app.AppCodec().Unmarshal(operationMsg.Msg, &msg), "UnmarshalJSON(operationMsg.Msg)") s.Assert().True(operationMsg.OK, "operationMsg.OK") s.Assert().Equal(sdk.MsgTypeURL(&msg), operationMsg.Name, "operationMsg.Name") - s.Assert().Equal(sdk.MsgTypeURL(&msg), operationMsg.Route, "operationMsg.Route") + s.Assert().Equal(types.ModuleName, operationMsg.Route, "operationMsg.Route") s.Assert().Len(futureOperations, 0, "futureOperations") } @@ -129,9 +123,6 @@ func (s *SimTestSuite) TestSimulateMsgSendQueryOracle() { r := rand.New(source) accounts := s.getTestingAccounts(r, 3) - // begin a new block - // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) // TODO[1760]: finalize-block - // execute operation op := simulation.SimulateMsgSendQueryOracle(s.app.OracleKeeper, s.app.AccountKeeper, s.app.BankKeeper, s.app.IBCKeeper.ChannelKeeper) operationMsg, futureOperations, err := op(r, s.app.BaseApp, s.ctx, accounts, "") @@ -139,11 +130,11 @@ func (s *SimTestSuite) TestSimulateMsgSendQueryOracle() { s.LogOperationMsg(operationMsg, "good") var msg types.MsgUpdateOracleRequest - s.Require().NoError(s.app.AppCodec().UnmarshalJSON(operationMsg.Msg, &msg), "UnmarshalJSON(operationMsg.Msg)") + s.Require().NoError(s.app.AppCodec().Unmarshal(operationMsg.Msg, &msg), "UnmarshalJSON(operationMsg.Msg)") s.Assert().True(operationMsg.OK, "operationMsg.OK") s.Assert().Equal(sdk.MsgTypeURL(&msg), operationMsg.Name, "operationMsg.Name") - s.Assert().Equal(sdk.MsgTypeURL(&msg), operationMsg.Route, "operationMsg.Route") + s.Assert().Equal(types.ModuleName, operationMsg.Route, "operationMsg.Route") s.Assert().Len(futureOperations, 0, "futureOperations") } diff --git a/x/reward/keeper/rules.go b/x/reward/keeper/rules.go index 1d18c09e64..5c16732baa 100644 --- a/x/reward/keeper/rules.go +++ b/x/reward/keeper/rules.go @@ -19,8 +19,11 @@ import ( func CacheContextWithHistory(ctx sdk.Context) (cc sdk.Context, writeCache func()) { cms := ctx.MultiStore().CacheMultiStore() cc = ctx.WithMultiStore(cms) - // TODO[1760]: event-history: Put this back once the event history stuff is back in the SDK. - // cc = cc.WithEventManager(sdk.NewEventManagerWithHistory(ctx.EventManager().GetABCIEventHistory())) + abciEventHistory, ok := ctx.EventManager().(sdk.EventManagerWithHistoryI) + if !ok { + panic("event manager does not implement EventManagerWithHistoryI") + } + cc = cc.WithEventManager(sdk.NewEventManagerWithHistory(abciEventHistory.GetABCIEventHistory())) writeCache = func() { ctx.EventManager().EmitEvents(cc.EventManager().Events()) @@ -176,45 +179,47 @@ func (k Keeper) RewardShares(ctx sdk.Context, rewardProgram *types.RewardProgram // IterateABCIEvents Iterates through all the ABCIEvents that match the eventCriteria. // Nil criteria means to iterate over everything. func (k Keeper) IterateABCIEvents(ctx sdk.Context, criteria *types.EventCriteria, action func(string, *map[string][]byte) error) error { - // TODO[1760]: event-history: Put this back once the event history stuff is back in the SDK. - /* - for _, event := range ctx.EventManager().GetABCIEventHistory() { - event := event - - // Event type must match the criteria - // nil criteria is considered to match everything - if criteria != nil && !criteria.MatchesEvent(event.Type) { - continue - } + abciEventHistory, ok := ctx.EventManager().(sdk.EventManagerWithHistoryI) + if !ok { + panic("event manager does not implement EventManagerWithHistoryI") + } - // Convert the attributes into a map - attributes := make(map[string][]byte) - for _, attribute := range event.Attributes { - attributes[string(attribute.Key)] = attribute.Value - } + for _, event := range abciEventHistory.GetABCIEventHistory() { + event := event + + // Event type must match the criteria + // nil criteria is considered to match everything + if criteria != nil && !criteria.MatchesEvent(event.Type) { + continue + } + + // Convert the attributes into a map + attributes := make(map[string][]byte) + for _, attribute := range event.Attributes { + attributes[string(attribute.Key)] = []byte(attribute.Value) + } - valid := true - if criteria != nil { - // Ensure each attribute matches the required criteria - // If a single attribute does not match then we don't continue with the event - eventCriteria := criteria.Events[event.Type] - for key := range eventCriteria.Attributes { - valid = eventCriteria.MatchesAttribute(key, attributes[key]) - if !valid { - break - } + valid := true + if criteria != nil { + // Ensure each attribute matches the required criteria + // If a single attribute does not match then we don't continue with the event + eventCriteria := criteria.Events[event.Type] + for key := range eventCriteria.Attributes { + valid = eventCriteria.MatchesAttribute(key, attributes[key]) + if !valid { + break } } - if !valid { - continue - } + } + if !valid { + continue + } - err := action(event.Type, &attributes) - if err != nil { - return err - } + err := action(event.Type, &attributes) + if err != nil { + return err } - */ + } return nil } diff --git a/x/reward/keeper/rules_test.go b/x/reward/keeper/rules_test.go index 4cc389b26e..a4fa5381af 100644 --- a/x/reward/keeper/rules_test.go +++ b/x/reward/keeper/rules_test.go @@ -48,9 +48,8 @@ func setupEventHistory(s *KeeperTestSuite) { } func SetupEventHistory(s *KeeperTestSuite, events sdk.Events) { - // TODO[1760]: event-history: Put this back once the event history stuff is back in the SDK. - // eventManagerStub := sdk.NewEventManagerWithHistory(events.ToABCIEvents()) - // s.ctx = s.ctx.WithEventManager(eventManagerStub) + eventManagerStub := sdk.NewEventManagerWithHistory(events.ToABCIEvents()) + s.ctx = s.ctx.WithEventManager(eventManagerStub) } // with delegate @@ -1173,12 +1172,12 @@ func SetupEventHistoryWithVotes(s *KeeperTestSuite, sender string) { event2, event3, } - // TODO[1760]: event-history: Put this back once the event history stuff is back in the SDK. - _ = loggedEvents - // newEvents := loggedEvents.ToABCIEvents() - // newEvents = append(newEvents, s.ctx.EventManager().GetABCIEventHistory()...) - // eventManagerStub := sdk.NewEventManagerWithHistory(newEvents) - // s.ctx = s.ctx.WithEventManager(eventManagerStub) + newEvents := loggedEvents.ToABCIEvents() + eventManager, _ := s.ctx.EventManager().(sdk.EventManagerWithHistoryI) + + newEvents = append(newEvents, eventManager.GetABCIEventHistory()...) + eventManagerStub := sdk.NewEventManagerWithHistory(newEvents) + s.ctx = s.ctx.WithEventManager(eventManagerStub) } // transfer diff --git a/x/reward/simulation/operations_test.go b/x/reward/simulation/operations_test.go index dce29d5646..92d6f0f495 100644 --- a/x/reward/simulation/operations_test.go +++ b/x/reward/simulation/operations_test.go @@ -41,16 +41,13 @@ func (s *SimTestSuite) TestWeightedOperations() { r := rand.New(source) accs := s.getTestingAccounts(r, 3) - // begin a new block - // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) // TODO[1760]: finalize-block - expected := []struct { weight int opMsgRoute string opMsgName string }{ - {simappparams.DefaultWeightSubmitCreateRewards, sdk.MsgTypeURL(&types.MsgCreateRewardProgramRequest{}), sdk.MsgTypeURL(&types.MsgCreateRewardProgramRequest{})}, - {simappparams.DefaultWeightSubmitEndRewards, sdk.MsgTypeURL(&types.MsgEndRewardProgramRequest{}), sdk.MsgTypeURL(&types.MsgEndRewardProgramRequest{})}, + {weight: simappparams.DefaultWeightSubmitCreateRewards, opMsgRoute: types.RouterKey, opMsgName: sdk.MsgTypeURL(&types.MsgCreateRewardProgramRequest{})}, + {weight: simappparams.DefaultWeightSubmitEndRewards, opMsgRoute: types.RouterKey, opMsgName: sdk.MsgTypeURL(&types.MsgEndRewardProgramRequest{})}, } for i, w := range weightedOps { @@ -71,20 +68,17 @@ func (s *SimTestSuite) TestSimulateMsgAddRewards() { r := rand.New(source) accounts := s.getTestingAccounts(r, 3) - // begin a new block - // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) // TODO[1760]: finalize-block - // execute operation op := simulation.SimulateMsgCreateRewardsProgram(s.app.RewardKeeper, s.app.AccountKeeper, s.app.BankKeeper) operationMsg, futureOperations, err := op(r, s.app.BaseApp, s.ctx, accounts, "") s.Require().NoError(err) var msg types.MsgCreateRewardProgramRequest - types.ModuleCdc.UnmarshalJSON(operationMsg.Msg, &msg) + types.ModuleCdc.Unmarshal(operationMsg.Msg, &msg) s.Require().True(operationMsg.OK, operationMsg.String()) s.Require().Equal(sdk.MsgTypeURL(&msg), operationMsg.Name) - s.Require().Equal(sdk.MsgTypeURL(&msg), operationMsg.Route) + s.Require().Equal(types.RouterKey, operationMsg.Route) s.Require().Len(futureOperations, 0) } diff --git a/x/reward/types/action_builder.go b/x/reward/types/action_builder.go index e8cf62f9b0..e1c09407ba 100644 --- a/x/reward/types/action_builder.go +++ b/x/reward/types/action_builder.go @@ -258,7 +258,8 @@ func (v *VoteActionBuilder) AddEvent(_ string, attributes *map[string][]byte) er return err } v.Voter = address - } else if action, ok := (*attributes)[sdk.AttributeKeyAction]; ok { + } + if action, ok := (*attributes)[sdk.AttributeKeyAction]; ok { a := string(action) for _, m := range getGovVoteMsgURLs() { if a == m { diff --git a/x/reward/types/tx.pb.go b/x/reward/types/tx.pb.go index 2be7b6b6ed..0e4287a7c7 100644 --- a/x/reward/types/tx.pb.go +++ b/x/reward/types/tx.pb.go @@ -7,6 +7,7 @@ import ( context "context" fmt "fmt" types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/cosmos-sdk/types/msgservice" _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" @@ -653,70 +654,72 @@ func init() { func init() { proto.RegisterFile("provenance/reward/v1/tx.proto", fileDescriptor_6a1c90eb8246d229) } var fileDescriptor_6a1c90eb8246d229 = []byte{ - // 993 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x56, 0x41, 0x6f, 0x1b, 0x45, - 0x14, 0xce, 0xda, 0x4e, 0x69, 0xc7, 0x49, 0x1d, 0x4f, 0x52, 0xb2, 0x59, 0x1a, 0xdb, 0x75, 0x45, - 0x15, 0x55, 0xed, 0x6e, 0xec, 0x22, 0x0e, 0xe1, 0x94, 0xa4, 0x20, 0x55, 0x28, 0x4a, 0x70, 0xb8, - 0x00, 0x87, 0xd5, 0xd8, 0x3b, 0xd9, 0x8e, 0xba, 0xeb, 0xd9, 0xcc, 0x8c, 0x1d, 0x9b, 0x13, 0x27, - 0xae, 0xf4, 0x08, 0xb7, 0xfe, 0x11, 0xae, 0xa8, 0xc7, 0x1e, 0x39, 0x05, 0x94, 0x70, 0x40, 0x5c, - 0x90, 0xf8, 0x05, 0x68, 0x67, 0x66, 0x9d, 0xb5, 0xbd, 0x0e, 0x0e, 0xb7, 0xec, 0x7b, 0xdf, 0x7b, - 0xef, 0x7b, 0xef, 0x7b, 0xf3, 0x62, 0xb0, 0x19, 0x31, 0xda, 0xc7, 0x5d, 0xd4, 0xed, 0x60, 0x87, - 0xe1, 0x33, 0xc4, 0x3c, 0xa7, 0xdf, 0x70, 0xc4, 0xc0, 0x8e, 0x18, 0x15, 0x14, 0xae, 0x5d, 0xb9, - 0x6d, 0xe5, 0xb6, 0xfb, 0x0d, 0x6b, 0xcd, 0xa7, 0x3e, 0x95, 0x00, 0x27, 0xfe, 0x4b, 0x61, 0xad, - 0xaa, 0x4f, 0xa9, 0x1f, 0x60, 0x47, 0x7e, 0xb5, 0x7b, 0x27, 0x8e, 0x20, 0x21, 0xe6, 0x02, 0x85, - 0x91, 0x06, 0x54, 0x3a, 0x94, 0x87, 0x94, 0x3b, 0x6d, 0xc4, 0xb1, 0xd3, 0x6f, 0xb4, 0xb1, 0x40, - 0x0d, 0xa7, 0x43, 0x49, 0x57, 0xfb, 0x1f, 0x64, 0x72, 0xd1, 0x65, 0x25, 0xa4, 0xfe, 0xf7, 0x22, - 0xd8, 0x3c, 0xe0, 0xfe, 0x3e, 0xc3, 0x48, 0xe0, 0x96, 0xf4, 0x1c, 0x31, 0xea, 0x33, 0x14, 0xb6, - 0xf0, 0x69, 0x0f, 0x73, 0x01, 0xd7, 0xc0, 0xa2, 0x20, 0x22, 0xc0, 0xa6, 0x51, 0x33, 0xb6, 0xee, - 0xb4, 0xd4, 0x07, 0xac, 0x81, 0xa2, 0x87, 0x79, 0x87, 0x91, 0x48, 0x10, 0xda, 0x35, 0x73, 0xd2, - 0x97, 0x36, 0xc1, 0x8f, 0xc1, 0xba, 0x47, 0xb8, 0x60, 0xa4, 0xdd, 0x13, 0xd8, 0x3d, 0x61, 0x34, - 0x74, 0x91, 0xe7, 0x31, 0xcc, 0xb9, 0x99, 0x97, 0xe8, 0x7b, 0x57, 0xee, 0xcf, 0x18, 0x0d, 0x77, - 0x95, 0x13, 0x7e, 0x0e, 0xca, 0x82, 0x0a, 0x14, 0xb8, 0x8a, 0xa7, 0x1b, 0x51, 0x1a, 0x98, 0x85, - 0x9a, 0xb1, 0x55, 0x6c, 0x6e, 0xd8, 0xaa, 0x61, 0x3b, 0x6e, 0xd8, 0xd6, 0x0d, 0xdb, 0xfb, 0x94, - 0x74, 0xf7, 0x0a, 0x6f, 0xcf, 0xab, 0x0b, 0xad, 0x92, 0x8c, 0xd4, 0x6d, 0x50, 0x1a, 0x40, 0x17, - 0xdc, 0x0f, 0xd1, 0x60, 0x94, 0x0a, 0x33, 0xb7, 0x13, 0x20, 0x72, 0xc5, 0x64, 0x71, 0xbe, 0xbc, - 0x66, 0x88, 0x06, 0x3a, 0x2b, 0x66, 0xfb, 0x71, 0x86, 0x84, 0xed, 0x4f, 0x06, 0x80, 0x91, 0x1a, - 0x98, 0xcb, 0x05, 0x62, 0xc2, 0x8d, 0x45, 0x32, 0x6f, 0xc9, 0xbc, 0x96, 0xad, 0x14, 0xb4, 0x13, - 0x05, 0xed, 0x2f, 0x13, 0x05, 0xf7, 0x0e, 0xe3, 0xc4, 0x7f, 0x9d, 0x57, 0xef, 0x4f, 0x47, 0x3f, - 0xa1, 0x21, 0x11, 0x38, 0x8c, 0xc4, 0xf0, 0x9f, 0xf3, 0xea, 0xc3, 0x21, 0x0a, 0x83, 0x9d, 0xfa, - 0x75, 0xa8, 0xfa, 0xeb, 0xdf, 0xaa, 0x46, 0x6b, 0x45, 0x43, 0x8e, 0x63, 0x44, 0x5c, 0x07, 0x3e, - 0x04, 0xcb, 0xaa, 0xdb, 0x08, 0x33, 0x42, 0x3d, 0x6e, 0xbe, 0x57, 0x33, 0xb6, 0x0a, 0xad, 0x25, - 0x69, 0x3c, 0x52, 0x36, 0xf8, 0x18, 0x94, 0xd3, 0x20, 0xd7, 0x43, 0x43, 0x6e, 0xde, 0x96, 0xc0, - 0x52, 0x0a, 0xf8, 0x1c, 0x0d, 0x39, 0xfc, 0x04, 0x58, 0x72, 0x9a, 0x34, 0x08, 0x68, 0x7f, 0x34, - 0xcb, 0x24, 0xfb, 0x1d, 0x19, 0xb4, 0x1e, 0x8f, 0x4a, 0x03, 0xf6, 0xd3, 0x85, 0xaa, 0xa0, 0x88, - 0x07, 0x11, 0x61, 0x58, 0x95, 0x00, 0x12, 0x0d, 0x94, 0x49, 0x66, 0xff, 0x06, 0xc0, 0xd3, 0x1e, - 0x0a, 0xc8, 0xc9, 0x90, 0x74, 0x7d, 0x17, 0x75, 0xe2, 0x2d, 0xe2, 0x66, 0xb1, 0x96, 0xdf, 0x2a, - 0x36, 0x1f, 0xd9, 0x59, 0xef, 0xc6, 0xfe, 0x62, 0x84, 0xdf, 0x95, 0x70, 0x2d, 0x57, 0xf9, 0x74, - 0xc2, 0xce, 0x77, 0x6e, 0xff, 0xf8, 0xa6, 0x6a, 0xfc, 0xf9, 0xa6, 0x6a, 0xd4, 0xb7, 0x41, 0x65, - 0xd6, 0xc2, 0xf3, 0x88, 0x76, 0x39, 0x86, 0x77, 0x41, 0x8e, 0x78, 0x72, 0xdd, 0x0b, 0xad, 0x1c, - 0xf1, 0xea, 0xdf, 0x1b, 0xc0, 0x3a, 0xe0, 0xfe, 0xa7, 0x5d, 0x2f, 0xf3, 0x81, 0x3c, 0x06, 0xe5, - 0x64, 0xbf, 0xb4, 0x48, 0xa3, 0xe8, 0x12, 0x4b, 0x07, 0xbc, 0xf0, 0x60, 0x13, 0xdc, 0x4b, 0x40, - 0xf4, 0xac, 0x8b, 0xd9, 0x68, 0x11, 0xd5, 0x03, 0x5a, 0xd5, 0xce, 0xc3, 0xd8, 0xa7, 0x57, 0x2c, - 0x45, 0x7d, 0x13, 0x7c, 0x90, 0xc9, 0x43, 0xf1, 0xae, 0xbf, 0x02, 0xef, 0xc7, 0x9d, 0xc5, 0x43, - 0x57, 0x00, 0xfe, 0x7f, 0x28, 0x7e, 0x08, 0xee, 0x6a, 0xec, 0x38, 0xb7, 0x65, 0x65, 0xd5, 0xac, - 0xea, 0xdf, 0x82, 0xf5, 0xa9, 0x62, 0x7a, 0x7e, 0x5f, 0x25, 0x7b, 0xe7, 0x61, 0x81, 0x48, 0xc0, - 0x65, 0xa5, 0x62, 0xd3, 0xce, 0xd6, 0x70, 0xac, 0x17, 0x99, 0xef, 0xb9, 0x0c, 0xd3, 0x5a, 0xaa, - 0x6d, 0x55, 0x26, 0xbe, 0x53, 0x90, 0x73, 0xd8, 0x03, 0x1b, 0x49, 0xed, 0xdd, 0x20, 0x98, 0xe8, - 0x75, 0x9a, 0xbf, 0x91, 0xc5, 0xff, 0x17, 0x25, 0xea, 0x54, 0x12, 0xdd, 0xc3, 0x01, 0x80, 0x63, - 0x57, 0x48, 0xb2, 0x30, 0x0d, 0xb9, 0x8c, 0xff, 0x79, 0x2e, 0x56, 0x52, 0x67, 0x48, 0x16, 0x80, - 0xc7, 0x93, 0x23, 0xc9, 0xc9, 0x4c, 0x37, 0x1c, 0x49, 0xe6, 0x30, 0x7e, 0x36, 0xc0, 0x86, 0xc4, - 0x60, 0x6f, 0x74, 0xa2, 0xe2, 0x07, 0x2b, 0x41, 0xf0, 0x11, 0x28, 0x8d, 0x3d, 0xef, 0x91, 0xee, - 0xcb, 0xa9, 0xc7, 0xfd, 0xc2, 0x83, 0x0f, 0xc0, 0x92, 0xea, 0x97, 0xbf, 0x44, 0x0c, 0x2b, 0xcd, - 0x0b, 0xad, 0xa2, 0xb4, 0x1d, 0x4b, 0x13, 0x3c, 0x04, 0xab, 0x63, 0xa9, 0x14, 0x5f, 0x79, 0xcc, - 0xe7, 0x98, 0x49, 0x39, 0x55, 0x4f, 0xf1, 0xd4, 0xfc, 0x7f, 0xc8, 0x01, 0x73, 0x56, 0xc3, 0x37, - 0x5a, 0xdc, 0x6c, 0xc9, 0x72, 0xf3, 0xd1, 0x9b, 0x96, 0x8c, 0x81, 0xcd, 0x8e, 0x1a, 0x6b, 0xea, - 0xdf, 0x87, 0xbc, 0x90, 0x5a, 0xc2, 0xbc, 0x94, 0xd0, 0xc9, 0x96, 0x70, 0xa6, 0x22, 0x2d, 0xab, - 0x33, 0xcb, 0xa5, 0x15, 0x6d, 0xfe, 0x91, 0x07, 0xf9, 0x03, 0xee, 0xc3, 0xef, 0x0c, 0xb0, 0x9a, - 0x71, 0xa7, 0xe0, 0xb3, 0xec, 0x92, 0xd7, 0xfe, 0x1b, 0xb7, 0x3e, 0xba, 0x59, 0x90, 0x7e, 0x06, - 0x67, 0x60, 0x65, 0xf2, 0xdc, 0xc0, 0xed, 0x99, 0x99, 0x66, 0x5c, 0x48, 0xab, 0x71, 0x83, 0x08, - 0x5d, 0xf8, 0x15, 0x58, 0x4a, 0xdf, 0x16, 0xf8, 0x64, 0x36, 0xfd, 0xe9, 0x7b, 0x67, 0x3d, 0x9d, - 0x13, 0xad, 0x8b, 0x09, 0x50, 0x9a, 0xb8, 0x03, 0xd0, 0xb9, 0x3e, 0xc3, 0xd4, 0xd9, 0xb1, 0xb6, - 0xe7, 0x0f, 0x50, 0x55, 0xf7, 0xfc, 0xb7, 0x17, 0x15, 0xe3, 0xdd, 0x45, 0xc5, 0xf8, 0xfd, 0xa2, - 0x62, 0xbc, 0xbe, 0xac, 0x2c, 0xbc, 0xbb, 0xac, 0x2c, 0xfc, 0x7a, 0x59, 0x59, 0x00, 0xeb, 0x84, - 0x66, 0x66, 0x3b, 0x32, 0xbe, 0x6e, 0xfa, 0x44, 0xbc, 0xec, 0xb5, 0xed, 0x0e, 0x0d, 0x9d, 0x2b, - 0xc8, 0x53, 0x42, 0x53, 0x5f, 0xce, 0x20, 0xf9, 0xb5, 0x27, 0x86, 0x11, 0xe6, 0xed, 0x5b, 0xf2, - 0xe7, 0xc7, 0xb3, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x65, 0x4a, 0x89, 0xda, 0x9b, 0x0a, 0x00, - 0x00, + // 1026 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x56, 0x4f, 0x6f, 0x1b, 0x45, + 0x14, 0xcf, 0x3a, 0x6e, 0xa0, 0xe3, 0xa4, 0x49, 0x26, 0x29, 0xd9, 0x2c, 0x8d, 0x9d, 0x6e, 0xa1, + 0x8a, 0xa2, 0x76, 0x37, 0x76, 0x11, 0x87, 0x70, 0x4a, 0x52, 0x90, 0x2a, 0x14, 0x25, 0x38, 0x48, + 0x08, 0x38, 0xac, 0xc6, 0xde, 0xc9, 0x76, 0xc4, 0xae, 0x67, 0x33, 0x33, 0x76, 0x6c, 0x4e, 0x15, + 0x57, 0x0e, 0xf4, 0x08, 0xb7, 0x7c, 0x04, 0xbe, 0x00, 0x57, 0xd4, 0x63, 0x8f, 0x9c, 0x02, 0x4a, + 0x90, 0x40, 0x1c, 0xf9, 0x04, 0x68, 0x67, 0x66, 0x9d, 0xb5, 0xbd, 0x0e, 0x4e, 0x6f, 0xf1, 0x7b, + 0xbf, 0xf7, 0x7b, 0x7f, 0xe7, 0x97, 0x05, 0x6b, 0x31, 0xa3, 0x1d, 0xdc, 0x42, 0xad, 0x26, 0x76, + 0x19, 0x3e, 0x45, 0xcc, 0x77, 0x3b, 0x55, 0x57, 0x74, 0x9d, 0x98, 0x51, 0x41, 0xe1, 0xf2, 0x95, + 0xdb, 0x51, 0x6e, 0xa7, 0x53, 0xb5, 0x96, 0x03, 0x1a, 0x50, 0x09, 0x70, 0x93, 0xbf, 0x14, 0xd6, + 0xaa, 0x04, 0x94, 0x06, 0x21, 0x76, 0xe5, 0xaf, 0x46, 0xfb, 0xd8, 0x15, 0x24, 0xc2, 0x5c, 0xa0, + 0x28, 0xd6, 0x80, 0x72, 0x93, 0xf2, 0x88, 0x72, 0xb7, 0x81, 0x38, 0x76, 0x3b, 0xd5, 0x06, 0x16, + 0xa8, 0xea, 0x36, 0x29, 0x69, 0x69, 0xff, 0xfd, 0xdc, 0x5a, 0x74, 0x5a, 0x05, 0x59, 0xd1, 0x14, + 0x11, 0x0f, 0x12, 0x5f, 0xc4, 0x03, 0xe5, 0xb0, 0xbf, 0x9f, 0x01, 0x6b, 0xfb, 0x3c, 0xd8, 0x63, + 0x18, 0x09, 0x5c, 0x97, 0x21, 0x87, 0x8c, 0x06, 0x0c, 0x45, 0x75, 0x7c, 0xd2, 0xc6, 0x5c, 0xc0, + 0x65, 0x70, 0x4b, 0x10, 0x11, 0x62, 0xd3, 0x58, 0x37, 0x36, 0x6e, 0xd7, 0xd5, 0x0f, 0xb8, 0x0e, + 0x4a, 0x3e, 0xe6, 0x4d, 0x46, 0x62, 0x41, 0x68, 0xcb, 0x2c, 0x48, 0x5f, 0xd6, 0x04, 0x3f, 0x04, + 0x2b, 0x3e, 0xe1, 0x82, 0x91, 0x46, 0x5b, 0x60, 0xef, 0x98, 0xd1, 0xc8, 0x43, 0xbe, 0xcf, 0x30, + 0xe7, 0xe6, 0xb4, 0x44, 0xdf, 0xbd, 0x72, 0x7f, 0xc2, 0x68, 0xb4, 0xa3, 0x9c, 0xf0, 0x53, 0xb0, + 0x28, 0xa8, 0x40, 0xa1, 0xa7, 0x1a, 0xf0, 0x62, 0x4a, 0x43, 0xb3, 0xb8, 0x6e, 0x6c, 0x94, 0x6a, + 0xab, 0x8e, 0x6a, 0xc3, 0x49, 0x26, 0xe1, 0xe8, 0x49, 0x38, 0x7b, 0x94, 0xb4, 0x76, 0x8b, 0xaf, + 0xce, 0x2b, 0x53, 0xf5, 0x79, 0x19, 0xa9, 0xdb, 0xa0, 0x34, 0x84, 0x1e, 0xb8, 0x17, 0xa1, 0x6e, + 0x9f, 0x0a, 0x33, 0xaf, 0x19, 0x22, 0x72, 0x55, 0xc9, 0xad, 0xc9, 0x78, 0xcd, 0x08, 0x75, 0x35, + 0x2b, 0x66, 0x7b, 0x09, 0x43, 0x5a, 0xed, 0x4f, 0x06, 0x80, 0xb1, 0x1a, 0x98, 0xc7, 0x05, 0x62, + 0xc2, 0x4b, 0xb6, 0x67, 0xce, 0x48, 0x5e, 0xcb, 0x51, 0xab, 0x75, 0xd2, 0xd5, 0x3a, 0x9f, 0xa7, + 0xab, 0xdd, 0x3d, 0x48, 0x88, 0xff, 0x39, 0xaf, 0xdc, 0x1b, 0x8d, 0x7e, 0x44, 0x23, 0x22, 0x70, + 0x14, 0x8b, 0xde, 0xbf, 0xe7, 0x95, 0x07, 0x3d, 0x14, 0x85, 0xdb, 0xf6, 0x75, 0x28, 0xfb, 0xe5, + 0xef, 0x15, 0xa3, 0xbe, 0xa0, 0x21, 0x47, 0x09, 0x22, 0xc9, 0x03, 0x1f, 0x80, 0x39, 0xd5, 0x6d, + 0x8c, 0x19, 0xa1, 0x3e, 0x37, 0xdf, 0x5a, 0x37, 0x36, 0x8a, 0xf5, 0x59, 0x69, 0x3c, 0x54, 0x36, + 0xb8, 0x09, 0x16, 0xb3, 0x20, 0xcf, 0x47, 0x3d, 0x6e, 0xbe, 0x2d, 0x81, 0xf3, 0x19, 0xe0, 0x53, + 0xd4, 0xe3, 0xf0, 0x23, 0x60, 0xc9, 0x69, 0xd2, 0x30, 0xa4, 0x9d, 0xfe, 0x2c, 0x53, 0xf6, 0xdb, + 0x32, 0x68, 0x25, 0x19, 0x95, 0x06, 0xec, 0x65, 0x13, 0x55, 0x40, 0x09, 0x77, 0x63, 0xc2, 0xb0, + 0x4a, 0x01, 0x24, 0x1a, 0x28, 0x93, 0x64, 0xff, 0x1a, 0xc0, 0x93, 0x36, 0x0a, 0xc9, 0x71, 0x8f, + 0xb4, 0x02, 0x0f, 0x35, 0x93, 0x2b, 0xe2, 0x66, 0x69, 0x7d, 0x7a, 0xa3, 0x54, 0x7b, 0xe8, 0xe4, + 0x3d, 0x28, 0xe7, 0xb3, 0x3e, 0x7e, 0x47, 0xc2, 0xf5, 0xba, 0x16, 0x4f, 0x86, 0xec, 0x7c, 0xfb, + 0xbd, 0x1f, 0xcf, 0x2a, 0xc6, 0xdf, 0x67, 0x15, 0xe3, 0xbb, 0xbf, 0x7e, 0xde, 0x1c, 0x77, 0x98, + 0xf6, 0x16, 0x28, 0x8f, 0x7b, 0x0c, 0x3c, 0xa6, 0x2d, 0x8e, 0xe1, 0x1d, 0x50, 0x20, 0xbe, 0x7c, + 0x0a, 0xc5, 0x7a, 0x81, 0xf8, 0xf6, 0x99, 0x01, 0xac, 0x7d, 0x1e, 0x7c, 0xdc, 0xf2, 0x73, 0x1f, + 0xcf, 0x26, 0x58, 0x4c, 0x6f, 0x4f, 0x2f, 0xb0, 0x1f, 0x3d, 0xcf, 0xb2, 0x01, 0xcf, 0x7c, 0x58, + 0x03, 0x77, 0x53, 0x10, 0x3d, 0x6d, 0x61, 0xd6, 0x3f, 0x52, 0xf5, 0xb8, 0x96, 0xb4, 0xf3, 0x20, + 0xf1, 0xe9, 0xf3, 0xdb, 0xb6, 0xb3, 0x6d, 0xe5, 0x87, 0xdb, 0x6b, 0xe0, 0xdd, 0xdc, 0x0a, 0x55, + 0x47, 0xf6, 0x0b, 0x03, 0xbc, 0x93, 0x34, 0x9d, 0xec, 0x4a, 0x21, 0xf8, 0x9b, 0x54, 0xff, 0x3e, + 0xb8, 0xa3, 0xb1, 0x83, 0x65, 0xcf, 0x29, 0x6b, 0x5a, 0xf0, 0x52, 0x52, 0xe8, 0x10, 0xd2, 0xfe, + 0x16, 0xac, 0x8c, 0x54, 0xa0, 0xe7, 0xfd, 0x65, 0x7a, 0xc3, 0x3e, 0x16, 0x88, 0x84, 0x5c, 0xa6, + 0x2f, 0xd5, 0x9c, 0xfc, 0x7b, 0x18, 0xe8, 0x50, 0xf2, 0x3d, 0x95, 0x61, 0xfa, 0x2e, 0xd4, 0xe5, + 0x2b, 0x13, 0xdf, 0x2e, 0x26, 0x73, 0xb3, 0xbf, 0x00, 0xab, 0x69, 0xee, 0x9d, 0x30, 0x1c, 0x1a, + 0xc0, 0x68, 0x53, 0xc6, 0xc4, 0x4d, 0xfd, 0xaa, 0x2e, 0x63, 0x84, 0x59, 0x37, 0xb6, 0x0f, 0xe0, + 0x80, 0xcc, 0xc9, 0xd2, 0x4c, 0x43, 0x5e, 0xfb, 0xff, 0xea, 0xd1, 0x42, 0x46, 0xe7, 0x64, 0x02, + 0x78, 0x34, 0x3c, 0xa7, 0x82, 0x64, 0xba, 0xe1, 0x9c, 0x72, 0x27, 0xf4, 0x8b, 0x01, 0x56, 0x25, + 0x06, 0xfb, 0x7d, 0x0d, 0x4c, 0x14, 0x41, 0x82, 0xe0, 0x43, 0x30, 0x3f, 0xa0, 0x1f, 0xfd, 0x0b, + 0x99, 0xcb, 0xa8, 0xc7, 0x33, 0x1f, 0xde, 0x07, 0xb3, 0xaa, 0x5f, 0xfe, 0x1c, 0x31, 0xac, 0xae, + 0xa3, 0x58, 0x2f, 0x49, 0xdb, 0x91, 0x34, 0xc1, 0x03, 0xb0, 0x34, 0x40, 0xa5, 0xea, 0x95, 0xff, + 0x2d, 0x26, 0x98, 0xc9, 0x62, 0x26, 0x9f, 0xaa, 0x53, 0xd7, 0xff, 0x43, 0x01, 0x98, 0xe3, 0x1a, + 0xbe, 0xd1, 0x89, 0xe7, 0xaf, 0xac, 0x30, 0x59, 0x79, 0xa3, 0x2b, 0x63, 0x60, 0xad, 0xa9, 0xc6, + 0x9a, 0xf9, 0xff, 0x24, 0x25, 0x58, 0xaf, 0x70, 0x5a, 0xae, 0xd0, 0xcd, 0x5f, 0xe1, 0xd8, 0x8d, + 0xd4, 0xad, 0xe6, 0x38, 0x97, 0xde, 0x68, 0xed, 0xcf, 0x69, 0x30, 0xbd, 0xcf, 0x03, 0xf8, 0xc2, + 0x00, 0x4b, 0x39, 0x62, 0x07, 0x9f, 0xe4, 0xa7, 0xbc, 0xf6, 0x3b, 0xc1, 0xfa, 0xe0, 0x66, 0x41, + 0xfa, 0x19, 0x9c, 0x82, 0x85, 0x61, 0x65, 0x82, 0x5b, 0x63, 0x99, 0xc6, 0xc8, 0xac, 0x55, 0xbd, + 0x41, 0x84, 0x4e, 0xfc, 0x0d, 0x98, 0xcd, 0x0a, 0x0e, 0x7c, 0x34, 0xbe, 0xfc, 0x51, 0x65, 0xb4, + 0x1e, 0x4f, 0x88, 0xd6, 0xc9, 0x04, 0x98, 0x1f, 0xd2, 0x01, 0xe8, 0x5e, 0xcf, 0x30, 0xa2, 0x45, + 0xd6, 0xd6, 0xe4, 0x01, 0x2a, 0xeb, 0x6e, 0xf0, 0xea, 0xa2, 0x6c, 0xbc, 0xbe, 0x28, 0x1b, 0x7f, + 0x5c, 0x94, 0x8d, 0x97, 0x97, 0xe5, 0xa9, 0xd7, 0x97, 0xe5, 0xa9, 0xdf, 0x2e, 0xcb, 0x53, 0x60, + 0x85, 0xd0, 0x5c, 0xb6, 0x43, 0xe3, 0xab, 0x5a, 0x40, 0xc4, 0xf3, 0x76, 0xc3, 0x69, 0xd2, 0xc8, + 0xbd, 0x82, 0x3c, 0x26, 0x34, 0xf3, 0xcb, 0xed, 0xa6, 0xdf, 0x99, 0xa2, 0x17, 0x63, 0xde, 0x98, + 0x91, 0xdf, 0x37, 0x4f, 0xfe, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x37, 0xfb, 0xc1, 0xcf, 0x15, 0x0b, + 0x00, 0x00, } func (this *MsgCreateRewardProgramRequest) Equal(that interface{}) bool { diff --git a/x/trigger/keeper/event_detector.go b/x/trigger/keeper/event_detector.go index f017bdd5cb..9b548436f3 100644 --- a/x/trigger/keeper/event_detector.go +++ b/x/trigger/keeper/event_detector.go @@ -24,26 +24,28 @@ func (k Keeper) DetectBlockEvents(ctx sdk.Context) { // detectTransactionEvents Detects triggers that have been activated by transaction events. func (k Keeper) detectTransactionEvents(ctx sdk.Context) (triggers []types.Trigger) { - // TODO[1760]: event-history: Put this back once the event history stuff is back in the SDK. - /* - detectedTriggers := map[uint64]bool{} - terminator := func(trigger types.Trigger, triggerEvent types.TriggerEventI) bool { - return false - } + detectedTriggers := map[uint64]bool{} + terminator := func(trigger types.Trigger, triggerEvent types.TriggerEventI) bool { + return false + } - for _, event := range ctx.EventManager().GetABCIEventHistory() { - matched := k.getMatchingTriggersUntil(ctx, event.GetType(), func(trigger types.Trigger, triggerEvent types.TriggerEventI) bool { - if _, isDetected := detectedTriggers[trigger.Id]; isDetected { - return false - } - txEvent := triggerEvent.(*types.TransactionEvent) - detected := txEvent.Matches(event) - detectedTriggers[trigger.Id] = detected - return detected - }, terminator) - triggers = append(triggers, matched...) - } - */ + abciEventHistory, ok := ctx.EventManager().(sdk.EventManagerWithHistoryI) + if !ok { + panic("event manager does not implement EventManagerWithHistoryI") + } + + for _, event := range abciEventHistory.GetABCIEventHistory() { + matched := k.getMatchingTriggersUntil(ctx, event.GetType(), func(trigger types.Trigger, triggerEvent types.TriggerEventI) bool { + if _, isDetected := detectedTriggers[trigger.Id]; isDetected { + return false + } + txEvent := triggerEvent.(*types.TransactionEvent) + detected := txEvent.Matches(event) + detectedTriggers[trigger.Id] = detected + return detected + }, terminator) + triggers = append(triggers, matched...) + } return } diff --git a/x/trigger/keeper/event_detector_test.go b/x/trigger/keeper/event_detector_test.go index feb8ccc551..684aaaec1a 100644 --- a/x/trigger/keeper/event_detector_test.go +++ b/x/trigger/keeper/event_detector_test.go @@ -262,8 +262,9 @@ func (s *KeeperTestSuite) TestDetectBlockEvents() { s.ctx.GasMeter().RefundGas(s.ctx.GasMeter().GasConsumed(), "testing") registered = append(registered, trigger) } - // TODO[1760]: event-history: Put this back once the event history stuff is back in the SDK. - // s.ctx = s.ctx.WithEventManager(sdk.NewEventManagerWithHistory(s.ctx.EventManager().GetABCIEventHistory())) + abciEventHistory, ok := s.ctx.EventManager().(sdk.EventManagerWithHistoryI) + s.Require().True(ok, "event manager does not implement EventManagerWithHistoryI") + s.ctx = s.ctx.WithEventManager(sdk.NewEventManagerWithHistory(abciEventHistory.GetABCIEventHistory())) // Action s.app.TriggerKeeper.DetectBlockEvents(s.ctx) diff --git a/x/trigger/keeper/keeper_test.go b/x/trigger/keeper/keeper_test.go index 7a8abeffe2..0b58192224 100644 --- a/x/trigger/keeper/keeper_test.go +++ b/x/trigger/keeper/keeper_test.go @@ -88,10 +88,9 @@ func (s *KeeperTestSuite) SetupEventHistory() { event2, event3, } - // TODO[1760]: event-history: Put this back once the event history stuff is back in the SDK. - _ = loggedEvents - // eventManagerStub := sdk.NewEventManagerWithHistory(loggedEvents.ToABCIEvents()) - // s.ctx = s.ctx.WithEventManager(eventManagerStub) + + eventManagerStub := sdk.NewEventManagerWithHistory(loggedEvents.ToABCIEvents()) + s.ctx = s.ctx.WithEventManager(eventManagerStub) } func (s *KeeperTestSuite) CreateTrigger(id uint64, owner string, event types.TriggerEventI, action sdk.Msg) types.Trigger { diff --git a/x/trigger/simulation/operations_test.go b/x/trigger/simulation/operations_test.go index 4be9de1922..b01f90bc81 100644 --- a/x/trigger/simulation/operations_test.go +++ b/x/trigger/simulation/operations_test.go @@ -65,16 +65,13 @@ func (s *SimTestSuite) TestWeightedOperations() { r := rand.New(source) accs := s.getTestingAccounts(r, 3) - // begin a new block - // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) // TODO[1760]: finalize-block - expected := []struct { weight int opMsgRoute string opMsgName string }{ - {simappparams.DefaultWeightSubmitCreateTrigger, sdk.MsgTypeURL(&types.MsgCreateTriggerRequest{}), sdk.MsgTypeURL(&types.MsgCreateTriggerRequest{})}, - {simappparams.DefaultWeightSubmitDestroyTrigger, sdk.MsgTypeURL(&types.MsgDestroyTriggerRequest{}), sdk.MsgTypeURL(&types.MsgDestroyTriggerRequest{})}, + {weight: simappparams.DefaultWeightSubmitCreateTrigger, opMsgRoute: types.RouterKey, opMsgName: sdk.MsgTypeURL(&types.MsgCreateTriggerRequest{})}, + {weight: simappparams.DefaultWeightSubmitDestroyTrigger, opMsgRoute: types.RouterKey, opMsgName: sdk.MsgTypeURL(&types.MsgDestroyTriggerRequest{})}, } expNames := make([]string, len(expected)) @@ -108,9 +105,6 @@ func (s *SimTestSuite) TestSimulateMsgCreateTrigger() { r := rand.New(source) accounts := s.getTestingAccounts(r, 3) - // begin a new block - // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) // TODO[1760]: finalize-block - // bad operation op := simulation.SimulateMsgCreateTrigger(s.app.TriggerKeeper, s.app.AccountKeeper, s.app.BankKeeper) expBadOp := simtypes.NoOpMsg(sdk.MsgTypeURL(&types.MsgCreateTriggerRequest{}), sdk.MsgTypeURL(&types.MsgCreateTriggerRequest{}), "cannot choose 2 accounts because there are only 1") @@ -127,11 +121,11 @@ func (s *SimTestSuite) TestSimulateMsgCreateTrigger() { s.LogOperationMsg(operationMsg, "good") var msg types.MsgCreateTriggerRequest - s.Require().NoError(s.app.AppCodec().UnmarshalJSON(operationMsg.Msg, &msg), "UnmarshalJSON(operationMsg.Msg)") + s.Require().NoError(s.app.AppCodec().Unmarshal(operationMsg.Msg, &msg), "UnmarshalJSON(operationMsg.Msg)") s.Assert().True(operationMsg.OK, "operationMsg.OK") s.Assert().Equal(sdk.MsgTypeURL(&msg), operationMsg.Name, "operationMsg.Name") - s.Assert().Equal(sdk.MsgTypeURL(&msg), operationMsg.Route, "operationMsg.Route") + s.Assert().Equal(types.RouterKey, operationMsg.Route, "operationMsg.Route") s.Assert().Len(futureOperations, 0, "futureOperations") } @@ -148,9 +142,6 @@ func (s *SimTestSuite) TestSimulateMsgDestroyTrigger() { s.app.TriggerKeeper.SetEventListener(s.ctx, trigger) s.app.TriggerKeeper.SetGasLimit(s.ctx, trigger.GetId(), 1000) - // begin a new block - // s.app.BeginBlock(abci.RequestBeginBlock{Header: cmtproto.Header{Height: s.app.LastBlockHeight() + 1, AppHash: s.app.LastCommitID().Hash}}) // TODO[1760]: finalize-block - // execute operation op := simulation.SimulateMsgDestroyTrigger(s.app.TriggerKeeper, s.app.AccountKeeper, s.app.BankKeeper) operationMsg, futureOperations, err := op(r, s.app.BaseApp, s.ctx, accounts, "") @@ -162,7 +153,7 @@ func (s *SimTestSuite) TestSimulateMsgDestroyTrigger() { s.Assert().True(operationMsg.OK, "operationMsg.OK") s.Assert().Equal(sdk.MsgTypeURL(&msg), operationMsg.Name, "operationMsg.Name") - s.Assert().Equal(sdk.MsgTypeURL(&msg), operationMsg.Route, "operationMsg.Route") + s.Assert().Equal(types.RouterKey, operationMsg.Route, "operationMsg.Route") s.Assert().Equal(1000, int(msg.GetId()), "msg.GetId()") s.Assert().Equal(accounts[0].Address.String(), msg.GetAuthority(), "msg.GetAuthority()") s.Assert().Len(futureOperations, 0, "futureOperations") diff --git a/x/trigger/types/tx.pb.go b/x/trigger/types/tx.pb.go index 82a7b50db9..62b2bef5e3 100644 --- a/x/trigger/types/tx.pb.go +++ b/x/trigger/types/tx.pb.go @@ -8,6 +8,7 @@ import ( fmt "fmt" _ "github.com/cosmos/cosmos-proto" types "github.com/cosmos/cosmos-sdk/codec/types" + _ "github.com/cosmos/cosmos-sdk/types/msgservice" _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" @@ -242,35 +243,36 @@ func init() { func init() { proto.RegisterFile("provenance/trigger/v1/tx.proto", fileDescriptor_4f001c93b8aeec1f) } var fileDescriptor_4f001c93b8aeec1f = []byte{ - // 437 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xcf, 0x6e, 0xd4, 0x30, - 0x10, 0xc6, 0xd7, 0x1b, 0xfe, 0xd5, 0x55, 0x2b, 0x61, 0x2d, 0x22, 0x1b, 0xa4, 0x34, 0xda, 0xd3, - 0x0a, 0x69, 0x6d, 0xda, 0x4a, 0x1c, 0x2a, 0x71, 0xe8, 0x02, 0x07, 0x0e, 0x95, 0x50, 0xe0, 0xc4, - 0x05, 0x65, 0x13, 0xe3, 0x5a, 0x6a, 0x3d, 0xc1, 0x76, 0xa2, 0xe6, 0x2d, 0x38, 0x72, 0xec, 0x43, - 0xf4, 0x21, 0x10, 0x07, 0x54, 0x71, 0xe2, 0x88, 0x76, 0x2f, 0x1c, 0x78, 0x08, 0xd4, 0x38, 0xcb, - 0x6e, 0xdb, 0xb4, 0xda, 0x5b, 0xc6, 0xf3, 0x9b, 0xf9, 0xbe, 0x99, 0xd8, 0x38, 0xcc, 0x35, 0x94, - 0x5c, 0x25, 0x2a, 0xe5, 0xcc, 0x6a, 0x29, 0x04, 0xd7, 0xac, 0xdc, 0x66, 0xf6, 0x84, 0xe6, 0x1a, - 0x2c, 0x90, 0x47, 0x8b, 0x3c, 0x6d, 0xf2, 0xb4, 0xdc, 0x0e, 0xfa, 0x29, 0x98, 0x63, 0x30, 0x1f, - 0x6b, 0x88, 0xb9, 0xc0, 0x55, 0x04, 0x3d, 0x01, 0x02, 0xdc, 0xf9, 0xc5, 0x57, 0x73, 0xda, 0x17, - 0x00, 0xe2, 0x88, 0xb3, 0x3a, 0x9a, 0x14, 0x9f, 0x58, 0xa2, 0x2a, 0x97, 0x1a, 0xfc, 0x40, 0xf8, - 0xf1, 0x81, 0x11, 0x2f, 0x35, 0x4f, 0x2c, 0x7f, 0xef, 0x34, 0x62, 0xfe, 0xb9, 0xe0, 0xc6, 0x92, - 0x3d, 0xbc, 0x9e, 0x14, 0xf6, 0x10, 0xb4, 0xb4, 0x92, 0x1b, 0x1f, 0x45, 0xde, 0x70, 0x6d, 0xec, - 0xff, 0x3c, 0x1b, 0xf5, 0x1a, 0xcd, 0xfd, 0x2c, 0xd3, 0xdc, 0x98, 0x77, 0x56, 0x4b, 0x25, 0xe2, - 0x65, 0x98, 0xbc, 0xc0, 0x77, 0x79, 0xc9, 0x95, 0xf5, 0xbb, 0x11, 0x1a, 0xae, 0xef, 0xf4, 0xa8, - 0xb3, 0x40, 0xe7, 0x16, 0xe8, 0xbe, 0xaa, 0xc6, 0x0f, 0xbf, 0x9f, 0x8d, 0x36, 0x1a, 0xd1, 0xd7, - 0x17, 0xf4, 0x9b, 0xd8, 0x55, 0x11, 0x8a, 0xef, 0x27, 0xa9, 0x95, 0xa0, 0x8c, 0xef, 0x45, 0xde, - 0x4d, 0x0d, 0xe2, 0x39, 0xb4, 0xf7, 0xe0, 0xeb, 0xe9, 0x16, 0xfa, 0x73, 0xba, 0x85, 0x06, 0x4f, - 0xb1, 0x7f, 0x7d, 0x1e, 0x93, 0x83, 0x32, 0x9c, 0x6c, 0xe2, 0xae, 0xcc, 0x7c, 0x14, 0xa1, 0xe1, - 0x9d, 0xb8, 0x2b, 0xb3, 0xc1, 0x51, 0xcd, 0xbe, 0xe2, 0xc6, 0x6a, 0xa8, 0xae, 0x0c, 0x7f, 0x85, - 0x25, 0xcf, 0xf1, 0xda, 0x7c, 0xbe, 0xaa, 0x1e, 0xea, 0xb6, 0x55, 0x2c, 0xd0, 0x25, 0x67, 0x4f, - 0x70, 0xbf, 0x45, 0xcd, 0x59, 0xdb, 0xf9, 0x8b, 0xb0, 0x77, 0x60, 0x04, 0xc9, 0xf1, 0xc6, 0x25, - 0xef, 0x84, 0xd2, 0xd6, 0x4b, 0x40, 0x6f, 0xf8, 0x69, 0x01, 0x5b, 0x99, 0x6f, 0x96, 0x62, 0xf0, - 0xe6, 0x65, 0x4f, 0xe4, 0x96, 0x16, 0xad, 0xbb, 0x0a, 0x9e, 0xad, 0x5e, 0xe0, 0x44, 0xc7, 0xf2, - 0xdb, 0x34, 0x44, 0xe7, 0xd3, 0x10, 0xfd, 0x9e, 0x86, 0xe8, 0xcb, 0x2c, 0xec, 0x9c, 0xcf, 0xc2, - 0xce, 0xaf, 0x59, 0xd8, 0xc1, 0xbe, 0x84, 0xf6, 0x6e, 0x6f, 0xd1, 0x87, 0x5d, 0x21, 0xed, 0x61, - 0x31, 0xa1, 0x29, 0x1c, 0xb3, 0x05, 0x33, 0x92, 0xb0, 0x14, 0xb1, 0x93, 0xff, 0x4f, 0xc9, 0x56, - 0x39, 0x37, 0x93, 0x7b, 0xf5, 0x8d, 0xd9, 0xfd, 0x17, 0x00, 0x00, 0xff, 0xff, 0x02, 0x0c, 0x89, - 0xe1, 0x6d, 0x03, 0x00, 0x00, + // 461 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xbf, 0x6e, 0x13, 0x41, + 0x10, 0xc6, 0xbd, 0x36, 0x7f, 0x94, 0x8d, 0x12, 0x89, 0x95, 0x21, 0x1b, 0x23, 0x5d, 0x2c, 0x57, + 0x56, 0x24, 0xef, 0x92, 0x44, 0xa2, 0xb0, 0x44, 0x11, 0x03, 0x05, 0x45, 0x24, 0x74, 0x50, 0xd1, + 0xa0, 0xb3, 0xbd, 0x6c, 0x56, 0xc2, 0x3b, 0xc7, 0xce, 0xda, 0xca, 0x51, 0xf2, 0x04, 0x94, 0x94, + 0x79, 0x04, 0x8a, 0x3c, 0x04, 0xa2, 0x8a, 0xa8, 0xa8, 0x10, 0xb2, 0x0b, 0x28, 0x78, 0x08, 0xe4, + 0xdb, 0x33, 0x76, 0x82, 0x13, 0xb9, 0xbb, 0xd9, 0xf9, 0xcd, 0x7c, 0xdf, 0xcc, 0xed, 0xd2, 0x28, + 0x75, 0x30, 0x52, 0x36, 0xb1, 0x3d, 0x25, 0xbd, 0x33, 0x5a, 0x2b, 0x27, 0x47, 0x7b, 0xd2, 0x9f, + 0x88, 0xd4, 0x81, 0x07, 0x76, 0x77, 0x9e, 0x17, 0x45, 0x5e, 0x8c, 0xf6, 0x6a, 0x5b, 0x3d, 0xc0, + 0x01, 0xa0, 0x1c, 0xa0, 0x9e, 0xe2, 0x03, 0xd4, 0x81, 0xaf, 0x6d, 0x87, 0xc4, 0xeb, 0x3c, 0x92, + 0x21, 0x28, 0x52, 0x55, 0x0d, 0x1a, 0xc2, 0xf9, 0xf4, 0x6b, 0x56, 0xa0, 0x01, 0xf4, 0x5b, 0x25, + 0xf3, 0xa8, 0x3b, 0x7c, 0x23, 0x13, 0x9b, 0x85, 0x54, 0xe3, 0x07, 0xa1, 0x5b, 0x47, 0xa8, 0x1f, + 0x3b, 0x95, 0x78, 0xf5, 0x32, 0x88, 0xc7, 0xea, 0xdd, 0x50, 0xa1, 0x67, 0x6d, 0xba, 0x9e, 0x0c, + 0xfd, 0x31, 0x38, 0xe3, 0x8d, 0x42, 0x4e, 0xea, 0x95, 0xe6, 0x5a, 0x87, 0x7f, 0x3b, 0x6b, 0x55, + 0x0b, 0xcd, 0xc3, 0x7e, 0xdf, 0x29, 0xc4, 0x17, 0xde, 0x19, 0xab, 0xe3, 0x45, 0x98, 0x3d, 0xa2, + 0x37, 0xd5, 0x48, 0x59, 0xcf, 0xcb, 0x75, 0xd2, 0x5c, 0xdf, 0xaf, 0x8a, 0x60, 0x41, 0xcc, 0x2c, + 0x88, 0x43, 0x9b, 0x75, 0xee, 0x7c, 0x3d, 0x6b, 0x6d, 0x14, 0xa2, 0x4f, 0xa7, 0xf4, 0xb3, 0x38, + 0x54, 0x31, 0x41, 0x6f, 0x27, 0x3d, 0x6f, 0xc0, 0x22, 0xaf, 0xd4, 0x2b, 0x57, 0x35, 0x88, 0x67, + 0x50, 0x9b, 0x7f, 0x3a, 0xdd, 0x21, 0xbf, 0x4f, 0x77, 0xc8, 0x87, 0x5f, 0x9f, 0x77, 0x17, 0x8d, + 0x34, 0x76, 0x29, 0xff, 0x7f, 0x3e, 0x4c, 0xc1, 0xa2, 0x62, 0x9b, 0xb4, 0x6c, 0xfa, 0x9c, 0xd4, + 0x49, 0xf3, 0x46, 0x5c, 0x36, 0xfd, 0xc6, 0xfb, 0x9c, 0x7d, 0xa2, 0xd0, 0x3b, 0xc8, 0x2e, 0x2d, + 0xe3, 0x12, 0xcb, 0x1e, 0xd2, 0xb5, 0x99, 0x4c, 0x96, 0x0f, 0x79, 0xdd, 0x6a, 0xe6, 0x68, 0xfb, + 0xde, 0xa2, 0xd3, 0xf9, 0x79, 0xe3, 0x3e, 0xdd, 0x5e, 0xa2, 0x1d, 0x8c, 0xee, 0xff, 0x21, 0xb4, + 0x72, 0x84, 0x9a, 0xa5, 0x74, 0xe3, 0xc2, 0x24, 0x4c, 0x88, 0xa5, 0x77, 0x47, 0x5c, 0xf1, 0x4b, + 0x6b, 0x72, 0x65, 0xbe, 0x58, 0x11, 0xd2, 0xcd, 0x8b, 0x9e, 0xd8, 0x35, 0x2d, 0x96, 0x6e, 0xae, + 0xf6, 0x60, 0xf5, 0x82, 0x20, 0xda, 0x31, 0x5f, 0xc6, 0x11, 0x39, 0x1f, 0x47, 0xe4, 0xe7, 0x38, + 0x22, 0x1f, 0x27, 0x51, 0xe9, 0x7c, 0x12, 0x95, 0xbe, 0x4f, 0xa2, 0x12, 0xe5, 0x06, 0x96, 0x77, + 0x7b, 0x4e, 0x5e, 0x1d, 0x68, 0xe3, 0x8f, 0x87, 0x5d, 0xd1, 0x83, 0x81, 0x9c, 0x33, 0x2d, 0x03, + 0x0b, 0x91, 0x3c, 0xf9, 0xf7, 0x02, 0x7d, 0x96, 0x2a, 0xec, 0xde, 0xca, 0xef, 0xd3, 0xc1, 0xdf, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x51, 0x3f, 0x32, 0x2a, 0xa4, 0x03, 0x00, 0x00, } func (this *MsgCreateTriggerRequest) Equal(that interface{}) bool { From 96b0ac29545f699ab7c3ef8699e4301054f5985f Mon Sep 17 00:00:00 2001 From: Matt Witkowski Date: Thu, 4 Apr 2024 14:11:23 -0400 Subject: [PATCH 09/11] Updates app.go to use BaseApp.RegisterStreamingServices method (#1887) * Verified streaming service change is identical to what we had before. * Update CHANGELOG. --- CHANGELOG.md | 1 + app/app.go | 67 ++++++++++++++++--------------------- cmd/provenanced/cmd/root.go | 38 +++++++++++++++++++-- 3 files changed, 65 insertions(+), 41 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ce4c63a1cf..9e5be3d5b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,6 +46,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Improvements * Remove unsupported database types [#1760](https://github.com/provenance-io/provenance/issues/1760). +* Updated app.go to use RegisterStreamingServices on BaseApp [#1760](https://github.com/provenance-io/provenance/issues/1760). * Bump the SDK to `v0.50.5-pio-1` (from an earlier ephemeral version) [#1897](https://github.com/provenance-io/provenance/pull/1897). --- diff --git a/app/app.go b/app/app.go index 97be31f7fa..6e3e868ffa 100644 --- a/app/app.go +++ b/app/app.go @@ -22,7 +22,6 @@ import ( "cosmossdk.io/log" sdkmath "cosmossdk.io/math" - // "cosmossdk.io/store/streaming" // TODO[1760]: streaming: See if we can use this directly or if we have needed modifications. storetypes "cosmossdk.io/store/types" "cosmossdk.io/x/evidence" evidencekeeper "cosmossdk.io/x/evidence/keeper" @@ -58,13 +57,16 @@ import ( servertypes "github.com/cosmos/cosmos-sdk/server/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" + sigtypes "github.com/cosmos/cosmos-sdk/types/tx/signing" "github.com/cosmos/cosmos-sdk/version" "github.com/cosmos/cosmos-sdk/x/auth" "github.com/cosmos/cosmos-sdk/x/auth/ante" authcodec "github.com/cosmos/cosmos-sdk/x/auth/codec" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" authsims "github.com/cosmos/cosmos-sdk/x/auth/simulation" + "github.com/cosmos/cosmos-sdk/x/auth/tx" authtx "github.com/cosmos/cosmos-sdk/x/auth/tx" + txmodule "github.com/cosmos/cosmos-sdk/x/auth/tx/config" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "github.com/cosmos/cosmos-sdk/x/auth/vesting" vestingtypes "github.com/cosmos/cosmos-sdk/x/auth/vesting/types" @@ -286,6 +288,7 @@ type App struct { legacyAmino *codec.LegacyAmino appCodec codec.Codec interfaceRegistry types.InterfaceRegistry + txConfig client.TxConfig invCheckPeriod uint @@ -435,7 +438,10 @@ func New( } // Register State listening services. - app.RegisterStreamingServices(appOpts) + if err := app.BaseApp.RegisterStreamingServices(appOpts, app.keys); err != nil { + app.Logger().Error("failed to register streaming plugin", "error", err) + os.Exit(1) + } // Register helpers for state-sync status. statesync.RegisterSyncStatus() @@ -483,6 +489,21 @@ func New( logger, ) + // optional: enable sign mode textual by overwriting the default tx config (after setting the bank keeper) + enabledSignModes := append(tx.DefaultSignModes, sigtypes.SignMode_SIGN_MODE_TEXTUAL) + txConfigOpts := tx.ConfigOptions{ + EnabledSignModes: enabledSignModes, + TextualCoinMetadataQueryFn: txmodule.NewBankKeeperCoinMetadataQueryFn(app.BankKeeper), + } + txConfig, err := tx.NewTxConfigWithOptions( + appCodec, + txConfigOpts, + ) + if err != nil { + panic(err) + } + app.txConfig = txConfig + app.StakingKeeper = stakingkeeper.NewKeeper( appCodec, runtime.NewKVStoreService(keys[stakingtypes.StoreKey]), app.AccountKeeper, app.BankKeeper, govAuthority, authcodec.NewBech32Codec(valAddrPrefix), authcodec.NewBech32Codec(consAddrPrefix), ) @@ -505,7 +526,7 @@ func New( app.MsgFeesKeeper = msgfeeskeeper.NewKeeper( appCodec, keys[msgfeestypes.StoreKey], app.GetSubspace(msgfeestypes.ModuleName), authtypes.FeeCollectorName, pioconfig.GetProvenanceConfig().FeeDenom, - app.SimulateProv, encodingConfig.TxConfig.TxDecoder(), interfaceRegistry, + app.SimulateProv, app.txConfig.TxDecoder(), interfaceRegistry, ) pioMsgFeesRouter := app.MsgServiceRouter().(*piohandlers.PioMsgServiceRouter) @@ -636,7 +657,7 @@ func New( wasmDir := filepath.Join(homePath, "data", "wasm") wasmWrap := WasmWrapper{Wasm: wasmtypes.DefaultWasmConfig()} - err := viper.Unmarshal(&wasmWrap) + err = viper.Unmarshal(&wasmWrap) if err != nil { panic("error while reading wasm config: " + err.Error()) } @@ -774,7 +795,7 @@ func New( // NOTE: Any module instantiated in the module manager that is later modified // must be passed by reference here. app.mm = module.NewManager( - genutil.NewAppModule(app.AccountKeeper, app.StakingKeeper, app.BaseApp, encodingConfig.TxConfig), + genutil.NewAppModule(app.AccountKeeper, app.StakingKeeper, app.BaseApp, app.txConfig), auth.NewAppModule(appCodec, app.AccountKeeper, nil, app.GetSubspace(authtypes.ModuleName)), vesting.NewAppModule(app.AccountKeeper, app.BankKeeper), bank.NewAppModule(appCodec, app.BankKeeper, app.AccountKeeper, app.GetSubspace(banktypes.ModuleName)), @@ -1079,7 +1100,7 @@ func New( antewrapper.HandlerOptions{ AccountKeeper: app.AccountKeeper, BankKeeper: app.BankKeeper, - TxSigningHandlerMap: encodingConfig.TxConfig.SignModeHandler(), + TxSigningHandlerMap: app.txConfig.SignModeHandler(), FeegrantKeeper: app.FeeGrantKeeper, MsgFeesKeeper: app.MsgFeesKeeper, SigGasConsumer: ante.DefaultSigVerificationGasConsumer, @@ -1095,7 +1116,7 @@ func New( BankKeeper: app.BankKeeper, FeegrantKeeper: app.FeeGrantKeeper, MsgFeesKeeper: app.MsgFeesKeeper, - Decoder: encodingConfig.TxConfig.TxDecoder(), + Decoder: app.txConfig.TxDecoder(), }) if err != nil { @@ -1181,7 +1202,7 @@ func (app *App) GetScopedIBCKeeper() capabilitykeeper.ScopedKeeper { // GetTxConfig implements the TestingApp interface (for ibc testing). func (app *App) GetTxConfig() client.TxConfig { - return MakeEncodingConfig().TxConfig + return app.txConfig } // Name returns the name of the App @@ -1354,36 +1375,6 @@ func (app *App) RegisterNodeService(clientCtx client.Context, cfg serverconfig.C nodeservice.RegisterNodeService(clientCtx, app.GRPCQueryRouter(), cfg) } -// RegisterStreamingServices registers types.ABCIListener State Listening services with the App. -func (app *App) RegisterStreamingServices(appOpts servertypes.AppOptions) { - // TODO[1760]: streaming: Ensure that this change is correct. - if err := app.BaseApp.RegisterStreamingServices(appOpts, app.keys); err != nil { - app.Logger().Error("failed to register streaming plugin", "error", err) - os.Exit(1) - } - /* - // register streaming services - streamingCfg := cast.ToStringMap(appOpts.Get(baseapp.StreamingTomlKey)) - for service := range streamingCfg { - pluginKey := fmt.Sprintf("%s.%s.%s", baseapp.StreamingTomlKey, service, baseapp.StreamingABCIPluginTomlKey) - pluginName := strings.TrimSpace(cast.ToString(appOpts.Get(pluginKey))) - if len(pluginName) > 0 { - logLevel := cast.ToString(appOpts.Get(flags.FlagLogLevel)) - plugin, err := streaming.NewStreamingPlugin(pluginName, logLevel) - if err != nil { - app.Logger().Error("failed to load streaming plugin", "error", err) - os.Exit(1) - } - if err := app.BaseApp.RegisterStreamingServices(appOpts, app.keys, plugin); err != nil { - app.Logger().Error("failed to register streaming plugin", "error", err) - os.Exit(1) - } - app.Logger().Info("streaming service registered", "service", service, "plugin", pluginName) - } - } - */ -} - // RegisterSwaggerAPI registers swagger route with API Server func RegisterSwaggerAPI(_ client.Context, rtr *mux.Router) { statikFS, err := fs.New() diff --git a/cmd/provenanced/cmd/root.go b/cmd/provenanced/cmd/root.go index 988ec14075..43a2388a6b 100644 --- a/cmd/provenanced/cmd/root.go +++ b/cmd/provenanced/cmd/root.go @@ -26,6 +26,7 @@ import ( dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" + clientconfig "github.com/cosmos/cosmos-sdk/client/config" "github.com/cosmos/cosmos-sdk/client/debug" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/client/keys" @@ -37,11 +38,15 @@ import ( serverconfig "github.com/cosmos/cosmos-sdk/server/config" servertypes "github.com/cosmos/cosmos-sdk/server/types" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/tx/signing" authcmd "github.com/cosmos/cosmos-sdk/x/auth/client/cli" + "github.com/cosmos/cosmos-sdk/x/auth/tx" + txmodule "github.com/cosmos/cosmos-sdk/x/auth/tx/config" "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" "github.com/cosmos/cosmos-sdk/x/crisis" genutilcli "github.com/cosmos/cosmos-sdk/x/genutil/client/cli" + // rosettacmd "github.com/cosmos/rosetta/cmd" // TODO[1760]: rosetta "github.com/provenance-io/provenance/app" @@ -79,10 +84,37 @@ func NewRootCmd(sealConfig bool) (*cobra.Command, params.EncodingConfig) { cmd.SetOut(cmd.OutOrStdout()) cmd.SetErr(cmd.ErrOrStderr()) - if cmd.Flags().Changed(flags.FlagHome) { - rootDir, _ := cmd.Flags().GetString(flags.FlagHome) - initClientCtx = initClientCtx.WithHomeDir(rootDir) + initClientCtx, err := client.ReadPersistentCommandFlags(initClientCtx, cmd.Flags()) + if err != nil { + return err + } + + // TODO[1760]: client: Check impact that this has on our custom client config. + initClientCtx, err = clientconfig.ReadFromClientConfig(initClientCtx) + if err != nil { + return err + } + + // This needs to go after ReadFromClientConfig, as that function + // sets the RPC client needed for SIGN_MODE_TEXTUAL. This sign mode + // is only available if the client is online. + if !initClientCtx.Offline { + enabledSignModes := append(tx.DefaultSignModes, signing.SignMode_SIGN_MODE_TEXTUAL) + txConfigOpts := tx.ConfigOptions{ + EnabledSignModes: enabledSignModes, + TextualCoinMetadataQueryFn: txmodule.NewGRPCCoinMetadataQueryFn(initClientCtx), + } + txConfig, err := tx.NewTxConfigWithOptions( + initClientCtx.Codec, + txConfigOpts, + ) + if err != nil { + return err + } + + initClientCtx = initClientCtx.WithTxConfig(txConfig) } + if err := client.SetCmdClientContext(cmd, initClientCtx); err != nil { return err } From 9c3cda21d0e820719c7a2ffc1e03303377058a79 Mon Sep 17 00:00:00 2001 From: Matt Witkowski Date: Thu, 4 Apr 2024 15:06:07 -0400 Subject: [PATCH 10/11] Remove module handlers and queriers for v0.50. (#1896) * Update changelog. * Convert send_restrictions_test to not use handler. Start moving tests over to keeper. * migrate msgdeleteaccess test over. * Move more tests over to msg_server tests. * More converted tests. * Finish migrating handler to message server for marker. * Update msgfees to have todos for gov migration. * Remove handler from attribute module. * Migrate tests to msgserver for name module. * Remove handler and migrate tests for metadata. * Remove queriers that are no longer needed. --- CHANGELOG.md | 1 + x/attribute/handler.go | 36 - x/attribute/handler_test.go | 204 ---- x/attribute/keeper/msg_server_test.go | 215 ++++ x/marker/handler.go | 67 +- x/marker/handler_test.go | 524 +------- x/marker/keeper/msg_server_test.go | 691 +++++++++++ x/marker/keeper/querier.go | 177 --- x/marker/keeper/querier_test.go | 156 --- x/marker/keeper/query_server.go | 20 +- x/marker/keeper/send_restrictions_test.go | 10 +- x/metadata/handler.go | 98 -- x/metadata/handler_test.go | 1320 --------------------- x/metadata/keeper/msg_server_test.go | 1300 +++++++++++++++++++- x/metadata/keeper/querier.go | 255 ---- x/msgfees/handler.go | 2 + x/msgfees/keeper/proposal_handler.go | 2 + x/name/handler.go | 25 +- x/name/handler_test.go | 270 ----- x/name/keeper/msg_server_test.go | 190 +++ 20 files changed, 2402 insertions(+), 3161 deletions(-) delete mode 100644 x/attribute/handler.go delete mode 100644 x/attribute/handler_test.go delete mode 100644 x/marker/keeper/querier.go delete mode 100644 x/marker/keeper/querier_test.go delete mode 100644 x/metadata/handler.go delete mode 100644 x/metadata/handler_test.go delete mode 100644 x/metadata/keeper/querier.go delete mode 100644 x/name/handler_test.go diff --git a/CHANGELOG.md b/CHANGELOG.md index 9e5be3d5b5..9c24d2a249 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,6 +46,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Improvements * Remove unsupported database types [#1760](https://github.com/provenance-io/provenance/issues/1760). +* Remove handlers from provenance modules [#1760](https://github.com/provenance-io/provenance/issues/1760). * Updated app.go to use RegisterStreamingServices on BaseApp [#1760](https://github.com/provenance-io/provenance/issues/1760). * Bump the SDK to `v0.50.5-pio-1` (from an earlier ephemeral version) [#1897](https://github.com/provenance-io/provenance/pull/1897). diff --git a/x/attribute/handler.go b/x/attribute/handler.go deleted file mode 100644 index 2351d6df22..0000000000 --- a/x/attribute/handler.go +++ /dev/null @@ -1,36 +0,0 @@ -package attribute - -import ( - sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - - "github.com/provenance-io/provenance/x/attribute/keeper" - "github.com/provenance-io/provenance/x/attribute/types" -) - -// NewHandler returns a handler for attribute messages. -// TODO[1760]: attribute: Delete the attribute NewHandler. -func NewHandler(k keeper.Keeper) func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { - msgServer := keeper.NewMsgServerImpl(k) - - return func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { - ctx = ctx.WithEventManager(sdk.NewEventManager()) - - switch msg := msg.(type) { - case *types.MsgAddAttributeRequest: - res, err := msgServer.AddAttribute(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgUpdateAttributeRequest: - res, err := msgServer.UpdateAttribute(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgDeleteAttributeRequest: - res, err := msgServer.DeleteAttribute(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgDeleteDistinctAttributeRequest: - res, err := msgServer.DeleteDistinctAttribute(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - default: - return nil, sdkerrors.ErrUnknownRequest.Wrapf("unrecognized %s message type: %T", types.ModuleName, msg) - } - } -} diff --git a/x/attribute/handler_test.go b/x/attribute/handler_test.go deleted file mode 100644 index 7474ca01cc..0000000000 --- a/x/attribute/handler_test.go +++ /dev/null @@ -1,204 +0,0 @@ -package attribute_test - -import ( - "fmt" - "testing" - - "github.com/golang/protobuf/proto" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/suite" - - "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" - cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/provenance-io/provenance/app" - "github.com/provenance-io/provenance/x/attribute" - "github.com/provenance-io/provenance/x/attribute/types" - nametypes "github.com/provenance-io/provenance/x/name/types" -) - -// TODO[1760]: attribute: Migrate the attribute handler tests to the keeper. - -type HandlerTestSuite struct { - suite.Suite - - app *app.App - ctx sdk.Context - handler func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) - - pubkey1 cryptotypes.PubKey - user1 string - user1Addr sdk.AccAddress -} - -func (s *HandlerTestSuite) SetupTest() { - s.app = app.Setup(s.T()) - s.ctx = s.app.BaseApp.NewContext(false) - s.handler = attribute.NewHandler(s.app.AttributeKeeper) - - s.pubkey1 = secp256k1.GenPrivKey().PubKey() - s.user1Addr = sdk.AccAddress(s.pubkey1.Address()) - s.user1 = s.user1Addr.String() - - s.app.AccountKeeper.SetAccount(s.ctx, s.app.AccountKeeper.NewAccountWithAddress(s.ctx, s.user1Addr)) - - var nameData nametypes.GenesisState - nameData.Bindings = append(nameData.Bindings, nametypes.NewNameRecord("name", s.user1Addr, false)) - nameData.Bindings = append(nameData.Bindings, nametypes.NewNameRecord("example.name", s.user1Addr, false)) - nameData.Params.AllowUnrestrictedNames = false - nameData.Params.MaxNameLevels = 16 - nameData.Params.MinSegmentLength = 2 - nameData.Params.MaxSegmentLength = 16 - - s.app.NameKeeper.InitGenesis(s.ctx, nameData) - -} - -func TestHandlerTestSuite(t *testing.T) { - suite.Run(t, new(HandlerTestSuite)) -} - -type CommonTest struct { - name string - msg sdk.Msg - signers []string - errorMsg string - expectedEvent proto.Message -} - -func (s *HandlerTestSuite) containsMessage(result *sdk.Result, msg proto.Message) bool { - events := result.GetEvents().ToABCIEvents() - for _, event := range events { - typeEvent, _ := sdk.ParseTypedEvent(event) - if assert.ObjectsAreEqual(msg, typeEvent) { - return true - } - } - return false -} - -func (s *HandlerTestSuite) runTests(cases []CommonTest) { - for _, tc := range cases { - s.T().Run(tc.name, func(t *testing.T) { - response, err := s.handler(s.ctx, tc.msg) - - if len(tc.errorMsg) > 0 { - assert.EqualError(t, err, tc.errorMsg) - } else { - if tc.expectedEvent != nil { - result := s.containsMessage(response, tc.expectedEvent) - s.True(result, fmt.Sprintf("Expected typed event was not found: %v", tc.expectedEvent)) - } - - } - }) - } -} - -func (s *HandlerTestSuite) TestMsgAddAttributeRequest() { - cases := []CommonTest{ - { - "should successfully add new attribute", - types.NewMsgAddAttributeRequest(s.user1, - s.user1Addr, "example.name", types.AttributeType_String, []byte("value")), - []string{s.user1}, - "", - types.NewEventAttributeAdd( - types.Attribute{ - Address: s.user1, - Name: "example.name", - Value: []byte("value"), - AttributeType: types.AttributeType_String, - }, - s.user1), - }, - } - s.runTests(cases) -} - -func (s *HandlerTestSuite) TestMsgUpdateAttributeRequest() { - testAttr := types.Attribute{ - Address: s.user1, - Name: "example.name", - Value: []byte("value"), - AttributeType: types.AttributeType_String, - } - var attrData types.GenesisState - attrData.Attributes = append(attrData.Attributes, testAttr) - attrData.Params.MaxValueLength = 100 - s.app.AttributeKeeper.InitGenesis(s.ctx, &attrData) - - cases := []CommonTest{ - { - "should successfully update attribute", - types.NewMsgUpdateAttributeRequest( - s.user1, - s.user1Addr, "example.name", - []byte("value"), []byte("1"), - types.AttributeType_String, - types.AttributeType_Int), - []string{s.user1}, - "", - types.NewEventAttributeUpdate( - testAttr, - types.Attribute{ - Address: s.user1, - Name: "example.name", - Value: []byte("1"), - AttributeType: types.AttributeType_Int, - }, - s.user1), - }, - } - s.runTests(cases) -} - -func (s *HandlerTestSuite) TestMsgDistinctDeleteAttributeRequest() { - testAttr := types.Attribute{ - Address: s.user1, - Name: "example.name", - Value: []byte("value"), - AttributeType: types.AttributeType_String, - } - var attrData types.GenesisState - attrData.Attributes = append(attrData.Attributes, testAttr) - attrData.Params.MaxValueLength = 100 - s.app.AttributeKeeper.InitGenesis(s.ctx, &attrData) - - cases := []CommonTest{ - { - "should successfully delete attribute with value", - types.NewMsgDeleteDistinctAttributeRequest(s.user1, s.user1Addr, "example.name", []byte("value")), - []string{s.user1}, - "", - types.NewEventDistinctAttributeDelete("example.name", "value", s.user1, s.user1), - }, - } - s.runTests(cases) -} - -func (s *HandlerTestSuite) TestMsgDeleteAttributeRequest() { - testAttr := types.Attribute{ - Address: s.user1, - Name: "example.name", - Value: []byte("value"), - AttributeType: types.AttributeType_String, - } - var attrData types.GenesisState - attrData.Attributes = append(attrData.Attributes, testAttr) - attrData.Params.MaxValueLength = 100 - s.app.AttributeKeeper.InitGenesis(s.ctx, &attrData) - - cases := []CommonTest{ - { - "should successfully add new attribute", - types.NewMsgDeleteAttributeRequest(s.user1, s.user1Addr, "example.name"), - []string{s.user1}, - "", - types.NewEventAttributeDelete("example.name", s.user1, s.user1), - }, - } - s.runTests(cases) -} diff --git a/x/attribute/keeper/msg_server_test.go b/x/attribute/keeper/msg_server_test.go index 6360771091..b24e02982c 100644 --- a/x/attribute/keeper/msg_server_test.go +++ b/x/attribute/keeper/msg_server_test.go @@ -5,6 +5,9 @@ import ( "testing" "time" + abci "github.com/cometbft/cometbft/abci/types" + "github.com/cosmos/gogoproto/proto" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" @@ -16,6 +19,7 @@ import ( simapp "github.com/provenance-io/provenance/app" "github.com/provenance-io/provenance/x/attribute/keeper" "github.com/provenance-io/provenance/x/attribute/types" + nametypes "github.com/provenance-io/provenance/x/name/types" ) type MsgServerTestSuite struct { @@ -48,12 +52,32 @@ func (s *MsgServerTestSuite) SetupTest() { s.owner1 = s.owner1Addr.String() acc := s.app.AccountKeeper.NewAccountWithAddress(s.ctx, s.owner1Addr) s.app.AccountKeeper.SetAccount(s.ctx, acc) + + var nameData nametypes.GenesisState + nameData.Bindings = append(nameData.Bindings, nametypes.NewNameRecord("name", s.owner1Addr, false)) + nameData.Bindings = append(nameData.Bindings, nametypes.NewNameRecord("example.name", s.owner1Addr, false)) + nameData.Params.AllowUnrestrictedNames = false + nameData.Params.MaxNameLevels = 16 + nameData.Params.MinSegmentLength = 2 + nameData.Params.MaxSegmentLength = 16 + + s.app.NameKeeper.InitGenesis(s.ctx, nameData) } func TestMsgServerTestSuite(t *testing.T) { suite.Run(t, new(MsgServerTestSuite)) } +func (s *MsgServerTestSuite) containsMessage(events []abci.Event, msg proto.Message) bool { + for _, event := range events { + typeEvent, _ := sdk.ParseTypedEvent(event) + if assert.ObjectsAreEqual(msg, typeEvent) { + return true + } + } + return false +} + func (s *MsgServerTestSuite) TestUpdateAttributeExpiration() { twoHoursInPast := time.Now().UTC().Add(-2 * time.Hour) twoHoursInFuture := time.Now().UTC().Add(2 * time.Hour) @@ -111,3 +135,194 @@ func (s *MsgServerTestSuite) TestUpdateAttributeExpiration() { }) } } + +func (s *MsgServerTestSuite) TestMsgAddAttributeRequest() { + + testcases := []struct { + name string + msg *types.MsgAddAttributeRequest + signers []string + errorMsg string + expectedEvent proto.Message + }{ + { + name: "should successfully add new attribute", + msg: types.NewMsgAddAttributeRequest(s.owner1, + s.owner1Addr, "example.name", types.AttributeType_String, []byte("value")), + signers: []string{s.owner1}, + expectedEvent: types.NewEventAttributeAdd( + types.Attribute{ + Address: s.owner1, + Name: "example.name", + Value: []byte("value"), + AttributeType: types.AttributeType_String, + }, + s.owner1), + }, + } + + for _, tc := range testcases { + s.Run(tc.name, func() { + s.ctx = s.ctx.WithEventManager(sdk.NewEventManager()) + _, err := s.msgServer.AddAttribute(s.ctx, tc.msg) + + if len(tc.errorMsg) > 0 { + s.Assert().EqualError(err, tc.errorMsg) + } else { + if tc.expectedEvent != nil { + result := s.containsMessage(s.ctx.EventManager().ABCIEvents(), tc.expectedEvent) + s.True(result, fmt.Sprintf("Expected typed event was not found: %v", tc.expectedEvent)) + } + + } + }) + } +} + +func (s *MsgServerTestSuite) TestMsgUpdateAttributeRequest() { + testAttr := types.Attribute{ + Address: s.owner1, + Name: "example.name", + Value: []byte("value"), + AttributeType: types.AttributeType_String, + } + var attrData types.GenesisState + attrData.Attributes = append(attrData.Attributes, testAttr) + attrData.Params.MaxValueLength = 100 + s.app.AttributeKeeper.InitGenesis(s.ctx, &attrData) + + testcases := []struct { + name string + msg *types.MsgUpdateAttributeRequest + signers []string + errorMsg string + expectedEvent proto.Message + }{ + { + name: "should successfully update attribute", + msg: types.NewMsgUpdateAttributeRequest( + s.owner1, + s.owner1Addr, "example.name", + []byte("value"), []byte("1"), + types.AttributeType_String, + types.AttributeType_Int), + signers: []string{s.owner1}, + expectedEvent: types.NewEventAttributeUpdate( + testAttr, + types.Attribute{ + Address: s.owner1, + Name: "example.name", + Value: []byte("1"), + AttributeType: types.AttributeType_Int, + }, + s.owner1), + }, + } + + for _, tc := range testcases { + s.Run(tc.name, func() { + s.ctx = s.ctx.WithEventManager(sdk.NewEventManager()) + _, err := s.msgServer.UpdateAttribute(s.ctx, tc.msg) + + if len(tc.errorMsg) > 0 { + s.Assert().EqualError(err, tc.errorMsg) + } else { + if tc.expectedEvent != nil { + result := s.containsMessage(s.ctx.EventManager().ABCIEvents(), tc.expectedEvent) + s.True(result, fmt.Sprintf("Expected typed event was not found: %v", tc.expectedEvent)) + } + + } + }) + } +} + +func (s *MsgServerTestSuite) TestMsgDistinctDeleteAttributeRequest() { + testAttr := types.Attribute{ + Address: s.owner1, + Name: "example.name", + Value: []byte("value"), + AttributeType: types.AttributeType_String, + } + var attrData types.GenesisState + attrData.Attributes = append(attrData.Attributes, testAttr) + attrData.Params.MaxValueLength = 100 + s.app.AttributeKeeper.InitGenesis(s.ctx, &attrData) + + testcases := []struct { + name string + msg *types.MsgDeleteDistinctAttributeRequest + signers []string + errorMsg string + expectedEvent proto.Message + }{ + { + name: "should successfully delete attribute with value", + msg: types.NewMsgDeleteDistinctAttributeRequest(s.owner1, s.owner1Addr, "example.name", []byte("value")), + signers: []string{s.owner1}, + expectedEvent: types.NewEventDistinctAttributeDelete("example.name", "value", s.owner1, s.owner1), + }, + } + + for _, tc := range testcases { + s.Run(tc.name, func() { + s.ctx = s.ctx.WithEventManager(sdk.NewEventManager()) + _, err := s.msgServer.DeleteDistinctAttribute(s.ctx, tc.msg) + + if len(tc.errorMsg) > 0 { + s.Assert().EqualError(err, tc.errorMsg) + } else { + if tc.expectedEvent != nil { + result := s.containsMessage(s.ctx.EventManager().ABCIEvents(), tc.expectedEvent) + s.True(result, fmt.Sprintf("Expected typed event was not found: %v", tc.expectedEvent)) + } + + } + }) + } +} + +func (s *MsgServerTestSuite) TestMsgDeleteAttributeRequest() { + testAttr := types.Attribute{ + Address: s.owner1, + Name: "example.name", + Value: []byte("value"), + AttributeType: types.AttributeType_String, + } + var attrData types.GenesisState + attrData.Attributes = append(attrData.Attributes, testAttr) + attrData.Params.MaxValueLength = 100 + s.app.AttributeKeeper.InitGenesis(s.ctx, &attrData) + + testcases := []struct { + name string + msg *types.MsgDeleteAttributeRequest + signers []string + errorMsg string + expectedEvent proto.Message + }{ + { + name: "should successfully add new attribute", + msg: types.NewMsgDeleteAttributeRequest(s.owner1, s.owner1Addr, "example.name"), + signers: []string{s.owner1}, + expectedEvent: types.NewEventAttributeDelete("example.name", s.owner1, s.owner1), + }, + } + + for _, tc := range testcases { + s.Run(tc.name, func() { + s.ctx = s.ctx.WithEventManager(sdk.NewEventManager()) + _, err := s.msgServer.DeleteAttribute(s.ctx, tc.msg) + + if len(tc.errorMsg) > 0 { + s.Assert().EqualError(err, tc.errorMsg) + } else { + if tc.expectedEvent != nil { + result := s.containsMessage(s.ctx.EventManager().ABCIEvents(), tc.expectedEvent) + s.True(result, fmt.Sprintf("Expected typed event was not found: %v", tc.expectedEvent)) + } + + } + }) + } +} diff --git a/x/marker/handler.go b/x/marker/handler.go index e4f4a7c673..101b8d31fb 100644 --- a/x/marker/handler.go +++ b/x/marker/handler.go @@ -9,72 +9,7 @@ import ( "github.com/provenance-io/provenance/x/marker/types" ) -// NewHandler returns a handler for marker messages. -// TODO[1760]: marker: Delete the marker NewHandler. -func NewHandler(k keeper.Keeper) func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { - msgServer := keeper.NewMsgServerImpl(k) - - return func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { - ctx = ctx.WithEventManager(sdk.NewEventManager()) - - switch msg := msg.(type) { - case *types.MsgAddMarkerRequest: - res, err := msgServer.AddMarker(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgAddAccessRequest: - res, err := msgServer.AddAccess(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgDeleteAccessRequest: - res, err := msgServer.DeleteAccess(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - - case *types.MsgFinalizeRequest: - res, err := msgServer.Finalize(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgActivateRequest: - res, err := msgServer.Activate(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgCancelRequest: - res, err := msgServer.Cancel(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgDeleteRequest: - res, err := msgServer.Delete(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - - case *types.MsgMintRequest: - res, err := msgServer.Mint(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgBurnRequest: - res, err := msgServer.Burn(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - - case *types.MsgWithdrawRequest: - res, err := msgServer.Withdraw(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgTransferRequest: - res, err := msgServer.Transfer(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgIbcTransferRequest: - res, err := msgServer.IbcTransfer(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - - case *types.MsgSetDenomMetadataRequest: - res, err := msgServer.SetDenomMetadata(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - - case *types.MsgAddFinalizeActivateMarkerRequest: - res, err := msgServer.AddFinalizeActivateMarker(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - - case *types.MsgSetAccountDataRequest: - res, err := msgServer.SetAccountData(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - - default: - return nil, sdkerrors.ErrUnknownRequest.Wrapf("unrecognized %s message type: %T", types.ModuleName, msg) - } - } -} +// TODO[1760]: marker: Migrate the legacy gov proposals. func NewProposalHandler(k keeper.Keeper) govtypesv1beta1.Handler { return func(ctx sdk.Context, content govtypesv1beta1.Content) error { diff --git a/x/marker/handler_test.go b/x/marker/handler_test.go index 8123a94dcb..e5e7b3d527 100644 --- a/x/marker/handler_test.go +++ b/x/marker/handler_test.go @@ -1,41 +1,32 @@ package marker_test import ( - "fmt" "testing" - "github.com/golang/protobuf/proto" - "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" - sdkmath "cosmossdk.io/math" - "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256r1" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" - "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" - banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" govtypesv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" "github.com/provenance-io/provenance/app" - attrtypes "github.com/provenance-io/provenance/x/attribute/types" "github.com/provenance-io/provenance/x/marker" "github.com/provenance-io/provenance/x/marker/keeper" "github.com/provenance-io/provenance/x/marker/types" ) -// TODO[1760]: marker: Migrate the marker handler tests to the keeper. +// TODO[1760]: marker: Migrate the legacy gov proposals. type HandlerTestSuite struct { suite.Suite - app *app.App - ctx sdk.Context - handler func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) + app *app.App + ctx sdk.Context pubkey1 cryptotypes.PubKey user1 string @@ -49,7 +40,6 @@ type HandlerTestSuite struct { func (s *HandlerTestSuite) SetupTest() { s.app = app.Setup(s.T()) s.ctx = s.app.BaseApp.NewContext(false) - s.handler = marker.NewHandler(s.app.MarkerKeeper) s.pubkey1 = secp256k1.GenPrivKey().PubKey() s.user1Addr = sdk.AccAddress(s.pubkey1.Address()) @@ -70,17 +60,6 @@ func TestHandlerTestSuite(t *testing.T) { suite.Run(t, new(HandlerTestSuite)) } -func TestInvalidMsg(t *testing.T) { - k := keeper.Keeper{} - h := marker.NewHandler(k) - - res, err := h(sdk.NewContext(nil, cmtproto.Header{}, false, nil), testdata.NewTestMsg()) - require.Error(t, err) - require.Nil(t, res) - require.Contains(t, err.Error(), "unrecognized marker message type") - require.Contains(t, err.Error(), "testdata.TestMsg") -} - func TestInvalidProposal(t *testing.T) { k := keeper.Keeper{} h := marker.NewProposalHandler(k) @@ -88,500 +67,3 @@ func TestInvalidProposal(t *testing.T) { err := h(sdk.NewContext(nil, cmtproto.Header{}, false, nil), govtypesv1beta1.NewTextProposal("Test", "description")) require.ErrorContains(t, err, "unrecognized marker proposal content type: *v1beta1.TextProposal") } - -func (s *HandlerTestSuite) containsMessage(result *sdk.Result, msg proto.Message) bool { - events := result.GetEvents().ToABCIEvents() - for _, event := range events { - typeEvent, _ := sdk.ParseTypedEvent(event) - if assert.ObjectsAreEqual(msg, typeEvent) { - return true - } - } - return false -} - -// noAccessErr creates an expected error message for an address not having access on a marker. -func (s *HandlerTestSuite) noAccessErr(addr string, role types.Access, denom string) string { - mAddr, err := types.MarkerAddress(denom) - s.Require().NoError(err, "MarkerAddress(%q)", denom) - return fmt.Sprintf("%s does not have %s on %s marker (%s)", addr, role, denom, mAddr) -} - -type CommonTest struct { - name string - msg sdk.Msg - errorMsg string - expectedEvent proto.Message -} - -func (s *HandlerTestSuite) runTests(cases []CommonTest) { - for _, tc := range cases { - s.Run(tc.name, func() { - response, err := s.handler(s.ctx, tc.msg) - if len(tc.errorMsg) > 0 { - s.Require().EqualError(err, tc.errorMsg, "handler(%T) error", tc.msg) - } else { - s.Require().NoError(err, "handler(%T) error", tc.msg) - if tc.expectedEvent != nil { - result := s.containsMessage(response, tc.expectedEvent) - s.Assert().True(result, "Expected typed event was not found in response.\n Expected: %+v\n Response: %+v", tc.expectedEvent, response) - } - } - }) - } -} - -func (s *HandlerTestSuite) TestMsgAddAccessRequest() { - accessMintGrant := types.AccessGrant{ - Address: s.user1, - Permissions: types.AccessListByNames("MINT"), - } - - accessInvalidGrant := types.AccessGrant{ - Address: s.user1, - Permissions: types.AccessListByNames("Invalid"), - } - - cases := []CommonTest{ - { - name: "setup new marker for test", - msg: types.NewMsgAddMarkerRequest("hotdog", sdkmath.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0), - }, - { - name: "should successfully grant access to marker", - msg: types.NewMsgAddAccessRequest("hotdog", s.user1Addr, accessMintGrant), - expectedEvent: types.NewEventMarkerAddAccess(&accessMintGrant, "hotdog", s.user1), - }, - { - name: "should fail to ADD access to marker, validate basic fails", - msg: types.NewMsgAddAccessRequest("hotdog", s.user1Addr, accessInvalidGrant), - errorMsg: "invalid access type: invalid request", - }, - { - - name: "should fail to ADD access to marker, keeper AddAccess failure", - msg: types.NewMsgAddAccessRequest("hotdog", s.user2Addr, accessMintGrant), - errorMsg: fmt.Sprintf("updates to pending marker hotdog can only be made by %s: unauthorized", s.user1), - }, - } - - s.runTests(cases) -} - -func (s *HandlerTestSuite) TestMsgDeleteAccessMarkerRequest() { - hotdogDenom := "hotdog" - accessMintGrant := types.AccessGrant{ - Address: s.user1, - Permissions: types.AccessListByNames("MINT"), - } - - cases := []CommonTest{ - { - name: "setup new marker for test", - msg: types.NewMsgAddMarkerRequest(hotdogDenom, sdkmath.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0), - }, - { - name: "setup grant access to marker", - msg: types.NewMsgAddAccessRequest(hotdogDenom, s.user1Addr, accessMintGrant), - }, - { - name: "should successfully delete grant access to marker", - msg: types.NewDeleteAccessRequest(hotdogDenom, s.user1Addr, s.user1Addr), - expectedEvent: types.NewEventMarkerDeleteAccess(s.user1, hotdogDenom, s.user1), - }, - } - s.runTests(cases) -} - -func (s *HandlerTestSuite) TestMsgActivateMarkerRequest() { - hotdogDenom := "hotdog" - - cases := []CommonTest{ - { - name: "setup new marker for test", - msg: types.NewMsgAddMarkerRequest(hotdogDenom, sdkmath.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0), - }, - { - name: "setup finalize marker", - msg: types.NewMsgFinalizeRequest(hotdogDenom, s.user1Addr), - }, - { - name: "should successfully activate marker", - msg: types.NewMsgActivateRequest(hotdogDenom, s.user1Addr), - expectedEvent: types.NewEventMarkerActivate(hotdogDenom, s.user1), - }, - } - s.runTests(cases) -} - -func (s *HandlerTestSuite) TestMsgCancelMarkerRequest() { - hotdogDenom := "hotdog" - accessDeleteGrant := types.AccessGrant{ - Address: s.user1, - Permissions: types.AccessListByNames("DELETE"), - } - - cases := []CommonTest{ - { - name: "setup new marker for test", - msg: types.NewMsgAddMarkerRequest(hotdogDenom, sdkmath.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0), - }, - { - name: "setup grant delete access to marker", - msg: types.NewMsgAddAccessRequest(hotdogDenom, s.user1Addr, accessDeleteGrant), - }, - { - name: "should successfully cancel marker", - msg: types.NewMsgCancelRequest(hotdogDenom, s.user1Addr), - expectedEvent: types.NewEventMarkerCancel(hotdogDenom, s.user1), - }, - } - s.runTests(cases) -} - -func (s *HandlerTestSuite) TestMsgDeleteMarkerRequest() { - hotdogDenom := "hotdog" - accessDeleteMintGrant := types.AccessGrant{ - Address: s.user1, - Permissions: types.AccessListByNames("DELETE,MINT"), - } - - cases := []CommonTest{ - { - name: "setup new marker for test", - msg: types.NewMsgAddMarkerRequest(hotdogDenom, sdkmath.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0), - }, - { - name: "setup grant delete access to marker", - msg: types.NewMsgAddAccessRequest(hotdogDenom, s.user1Addr, accessDeleteMintGrant), - }, - { - name: "setup cancel marker", - msg: types.NewMsgCancelRequest(hotdogDenom, s.user1Addr), - }, - { - name: "should successfully delete marker", - msg: types.NewMsgDeleteRequest(hotdogDenom, s.user1Addr), - expectedEvent: types.NewEventMarkerDelete(hotdogDenom, s.user1), - }, - } - s.runTests(cases) -} - -func (s *HandlerTestSuite) TestMsgMintMarkerRequest() { - hotdogDenom := "hotdog" - access := types.AccessGrant{ - Address: s.user1, - Permissions: types.AccessListByNames("MINT,BURN"), - } - - cases := []CommonTest{ - { - name: "setup new marker for test", - msg: types.NewMsgAddMarkerRequest(hotdogDenom, sdkmath.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0), - }, - { - name: "setup grant mint access to marker", - msg: types.NewMsgAddAccessRequest(hotdogDenom, s.user1Addr, access), - }, - { - name: "should successfully mint marker", - msg: types.NewMsgMintRequest(s.user1Addr, sdk.NewInt64Coin(hotdogDenom, 100)), - expectedEvent: types.NewEventMarkerMint("100", hotdogDenom, s.user1), - }, - } - s.runTests(cases) -} - -func (s *HandlerTestSuite) TestMsgBurnMarkerRequest() { - hotdogDenom := "hotdog" - access := types.AccessGrant{ - Address: s.user1, - Permissions: types.AccessListByNames("DELETE,MINT,BURN"), - } - - cases := []CommonTest{ - { - name: "setup new marker for test", - msg: types.NewMsgAddMarkerRequest(hotdogDenom, sdkmath.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0), - }, - { - name: "setup grant mint access to marker", - msg: types.NewMsgAddAccessRequest(hotdogDenom, s.user1Addr, access), - }, - { - name: "should successfully burn marker", - msg: types.NewMsgBurnRequest(s.user1Addr, sdk.NewInt64Coin(hotdogDenom, 100)), - expectedEvent: types.NewEventMarkerBurn("100", hotdogDenom, s.user1), - }, - } - s.runTests(cases) -} - -func (s *HandlerTestSuite) TestMsgWithdrawMarkerRequest() { - hotdogDenom := "hotdog" - access := types.AccessGrant{ - Address: s.user1, - Permissions: types.AccessListByNames("DELETE,MINT,WITHDRAW"), - } - - cases := []CommonTest{ - { - name: "setup new marker for test", - msg: types.NewMsgAddMarkerRequest(hotdogDenom, sdkmath.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0), - }, - { - name: "setup grant access to marker", - msg: types.NewMsgAddAccessRequest(hotdogDenom, s.user1Addr, access), - }, - { - name: "setup finalize marker", - msg: types.NewMsgFinalizeRequest(hotdogDenom, s.user1Addr), - }, - { - name: "setup activate marker", - msg: types.NewMsgActivateRequest(hotdogDenom, s.user1Addr), - }, - { - name: "should successfully withdraw marker", - msg: types.NewMsgWithdrawRequest(s.user1Addr, s.user1Addr, hotdogDenom, sdk.NewCoins(sdk.NewInt64Coin(hotdogDenom, 100))), - expectedEvent: types.NewEventMarkerWithdraw("100hotdog", hotdogDenom, s.user1, s.user1), - }, - } - s.runTests(cases) -} - -func (s *HandlerTestSuite) TestMsgTransferMarkerRequest() { - hotdogDenom := "hotdog" - access := types.AccessGrant{ - Address: s.user1, - Permissions: types.AccessListByNames("DELETE,MINT,WITHDRAW,TRANSFER"), - } - - cases := []CommonTest{ - { - name: "setup new marker for test", - msg: types.NewMsgAddMarkerRequest(hotdogDenom, sdkmath.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_RestrictedCoin, true, true, false, []string{}, 0, 0), - }, - { - name: "setup grant access to marker", - msg: types.NewMsgAddAccessRequest(hotdogDenom, s.user1Addr, access), - }, - { - name: "setup finalize marker", - msg: types.NewMsgFinalizeRequest(hotdogDenom, s.user1Addr), - }, - { - name: "setup activate marker", - msg: types.NewMsgActivateRequest(hotdogDenom, s.user1Addr), - }, - { - name: "should successfully mint marker", - msg: types.NewMsgMintRequest(s.user1Addr, sdk.NewInt64Coin(hotdogDenom, 1000)), - }, - { - name: "should successfully transfer marker", - msg: types.NewMsgTransferRequest(s.user1Addr, s.user1Addr, s.user2Addr, sdk.NewInt64Coin(hotdogDenom, 0)), - expectedEvent: types.NewEventMarkerTransfer("0", hotdogDenom, s.user1, s.user2, s.user1), - }, - } - s.runTests(cases) -} - -func (s *HandlerTestSuite) TestMsgSetDenomMetadataRequest() { - hotdogDenom := "hotdog" - hotdogName := "Jason" - hotdogSymbol := "WIFI" - access := types.AccessGrant{ - Address: s.user1, - Permissions: types.AccessListByNames("DELETE,MINT,WITHDRAW,TRANSFER"), - } - - hotdogMetadata := banktypes.Metadata{ - Description: "a description", - DenomUnits: []*banktypes.DenomUnit{ - {Denom: fmt.Sprintf("n%s", hotdogDenom), Exponent: 0, Aliases: []string{fmt.Sprintf("nano%s", hotdogDenom)}}, - {Denom: fmt.Sprintf("u%s", hotdogDenom), Exponent: 3, Aliases: []string{}}, - {Denom: hotdogDenom, Exponent: 9, Aliases: []string{}}, - {Denom: fmt.Sprintf("mega%s", hotdogDenom), Exponent: 15, Aliases: []string{}}, - }, - Base: fmt.Sprintf("n%s", hotdogDenom), - Display: hotdogDenom, - Name: hotdogName, - Symbol: hotdogSymbol, - } - - cases := []CommonTest{ - { - name: "setup new marker for test", - msg: types.NewMsgAddMarkerRequest(fmt.Sprintf("n%s", hotdogDenom), sdkmath.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_RestrictedCoin, true, true, false, []string{}, 0, 0), - }, - { - name: "setup grant access to marker", - msg: types.NewMsgAddAccessRequest(fmt.Sprintf("n%s", hotdogDenom), s.user1Addr, access), - }, - { - name: "should successfully set denom metadata on marker", - msg: types.NewSetDenomMetadataRequest(hotdogMetadata, s.user1Addr), - expectedEvent: types.NewEventMarkerSetDenomMetadata(hotdogMetadata, s.user1), - }, - } - s.runTests(cases) -} - -func (s *HandlerTestSuite) TestMsgAddFinalizeActivateMarkerRequest() { - denom := "hotdog" - rdenom := "restrictedhotdog" - denomWithDashPeriod := fmt.Sprintf("%s-my.marker", denom) - msgWithActiveStatus := types.NewMsgAddFinalizeActivateMarkerRequest(denom, sdkmath.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_Coin, true, true, false, []string{}, []types.AccessGrant{*types.NewAccessGrant(s.user1Addr, []types.Access{types.Access_Mint, types.Access_Admin})}, 0, 0) - msgWithActiveStatusAttr := types.NewMsgAddFinalizeActivateMarkerRequest(rdenom, sdkmath.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_RestrictedCoin, true, true, false, []string{"attributes.one.com", "attributes.two.com"}, []types.AccessGrant{*types.NewAccessGrant(s.user1Addr, []types.Access{types.Access_Mint, types.Access_Admin})}, 0, 0) - - accessGrantWrongStatus := types.NewMsgAddFinalizeActivateMarkerRequest(denom, sdkmath.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_Coin, true, true, false, []string{}, nil, 0, 0) - - cases := []CommonTest{ - { - name: "should successfully ADD,FINALIZE,ACTIVATE new marker", - msg: msgWithActiveStatus, - expectedEvent: types.NewEventMarkerAdd(denom, types.MustGetMarkerAddress(denom).String(), "100", "proposed", s.user1, types.MarkerType_Coin.String()), - }, - { - name: "should successfully ADD,FINALIZE,ACTIVATE new marker with attributes", - msg: msgWithActiveStatusAttr, - expectedEvent: types.NewEventMarkerAdd(rdenom, types.MustGetMarkerAddress(rdenom).String(), "100", "proposed", s.user1, types.MarkerType_RestrictedCoin.String()), - }, - { - name: "should fail to ADD,FINALIZE,ACTIVATE new marker, validate basic failure", - msg: accessGrantWrongStatus, - errorMsg: "since this will activate the marker, must have at least one access list defined: invalid request", - }, - { - name: "should fail to ADD,FINALIZE,ACTIVATE new marker, marker already exists", - msg: types.NewMsgAddMarkerRequest(denom, sdkmath.NewInt(100), s.user1Addr, s.user1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0), - errorMsg: fmt.Sprintf("marker address already exists for %s: invalid request", types.MustGetMarkerAddress(denom)), - }, - { - name: "should successfully add marker with dash and period", - msg: types.NewMsgAddMarkerRequest(denomWithDashPeriod, sdkmath.NewInt(1000), s.user1Addr, s.user1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0), - expectedEvent: types.NewEventMarkerAdd(denomWithDashPeriod, types.MustGetMarkerAddress(denomWithDashPeriod).String(), "1000", "proposed", s.user1, types.MarkerType_Coin.String()), - }, - { - name: "should successfully mint denom", - msg: types.NewMsgMintRequest(s.user1Addr, sdk.NewInt64Coin(denom, 1000)), - expectedEvent: types.NewEventMarkerMint("1000", denom, s.user1), - }, - { - name: "should fail to burn denom, user doesn't have permissions", - msg: types.NewMsgBurnRequest(s.user1Addr, sdk.NewInt64Coin(denom, 50)), - errorMsg: s.noAccessErr(s.user1, types.Access_Burn, denom) + ": invalid request", - }, - } - s.runTests(cases) -} - -func (s *HandlerTestSuite) TestMsgSetAccountDataRequest() { - denomU := "aducoin" - denomR := "adrcoin" - - denomUAddr := types.MustGetMarkerAddress(denomU).String() - denomRAddr := types.MustGetMarkerAddress(denomR).String() - - authority := s.app.MarkerKeeper.GetAuthority() - - s.T().Logf("%s: %s", denomU, denomUAddr) - s.T().Logf("%s: %s", denomR, denomRAddr) - s.T().Logf("authority: %s", authority) - - tests := []CommonTest{ - { - name: "should successfully add/finalize/active unrestricted marker", - msg: types.NewMsgAddFinalizeActivateMarkerRequest( - denomU, sdkmath.NewInt(100), - s.user1Addr, s.user1Addr, // From and Manager. - types.MarkerType_Coin, - true, // Supply fixed - true, // Allow gov - false, // don't allow forced transfer - []string{}, // No required attributes. - []types.AccessGrant{ - {Address: s.user1, Permissions: []types.Access{types.Access_Mint, types.Access_Admin}}, - {Address: s.user2, Permissions: []types.Access{types.Access_Deposit}}, - }, - 0, - 0, - ), - }, - { - name: "should successfully add/finalize/active restricted marker", - msg: types.NewMsgAddFinalizeActivateMarkerRequest( - denomR, sdkmath.NewInt(100), - s.user1Addr, s.user1Addr, // From and Manager. - types.MarkerType_RestrictedCoin, - true, // Supply fixed - true, // Allow gov - false, // don't allow forced transfer - []string{}, // No required attributes. - []types.AccessGrant{ - {Address: s.user1, Permissions: []types.Access{types.Access_Mint, types.Access_Admin}}, - {Address: s.user2, Permissions: []types.Access{types.Access_Deposit}}, - }, - 0, - 0, - ), - }, - { - name: "should successfully set account data on unrestricted marker via gov prop", - msg: &types.MsgSetAccountDataRequest{ - Denom: denomU, - Value: "This is some unrestricted coin data.", - Signer: authority, - }, - expectedEvent: &attrtypes.EventAccountDataUpdated{Account: denomUAddr}, - }, - { - name: "should successfully set account data on unrestricted marker by signer with deposit", - msg: &types.MsgSetAccountDataRequest{ - Denom: denomU, - Value: "This is some different unrestricted coin data.", - Signer: s.user2, - }, - expectedEvent: &attrtypes.EventAccountDataUpdated{Account: denomUAddr}, - }, - { - name: "should fail to set account data on unrestricted marker because signer does not have deposit", - msg: &types.MsgSetAccountDataRequest{ - Denom: denomU, - Value: "This is some unrestricted coin data. This won't get used though.", - Signer: s.user1, - }, - errorMsg: s.noAccessErr(s.user1, types.Access_Deposit, denomU), - }, - { - name: "should successfully set account data on restricted marker via gov prop", - msg: &types.MsgSetAccountDataRequest{ - Denom: denomR, - Value: "This is some restricted coin data.", - Signer: authority, - }, - expectedEvent: &attrtypes.EventAccountDataUpdated{Account: denomRAddr}, - }, - { - name: "should successfully set account data on restricted marker by signer with deposit", - msg: &types.MsgSetAccountDataRequest{ - Denom: denomR, - Value: "This is some different restricted coin data.", - Signer: s.user2, - }, - expectedEvent: &attrtypes.EventAccountDataUpdated{Account: denomRAddr}, - }, - { - name: "should fail to set account data on restricted marker because signer does not have deposit", - msg: &types.MsgSetAccountDataRequest{ - Denom: denomR, - Value: "This is some restricted coin data. This won't get used though.", - Signer: s.user1, - }, - errorMsg: s.noAccessErr(s.user1, types.Access_Deposit, denomR), - }, - } - s.runTests(tests) -} diff --git a/x/marker/keeper/msg_server_test.go b/x/marker/keeper/msg_server_test.go index dcc1279d66..78dde04112 100644 --- a/x/marker/keeper/msg_server_test.go +++ b/x/marker/keeper/msg_server_test.go @@ -17,10 +17,12 @@ import ( cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" "github.com/cosmos/gogoproto/proto" simapp "github.com/provenance-io/provenance/app" + attrtypes "github.com/provenance-io/provenance/x/attribute/types" markerkeeper "github.com/provenance-io/provenance/x/marker/keeper" "github.com/provenance-io/provenance/x/marker/types" ) @@ -39,6 +41,12 @@ type MsgServerTestSuite struct { owner1Addr sdk.AccAddress acct1 sdk.AccountI + privkey2 cryptotypes.PrivKey + pubkey2 cryptotypes.PubKey + owner2 string + owner2Addr sdk.AccAddress + acct2 sdk.AccountI + addresses []sdk.AccAddress } @@ -55,6 +63,13 @@ func (s *MsgServerTestSuite) SetupTest() { s.owner1 = s.owner1Addr.String() acc := s.app.AccountKeeper.NewAccountWithAddress(s.ctx, s.owner1Addr) s.app.AccountKeeper.SetAccount(s.ctx, acc) + + s.privkey2 = secp256k1.GenPrivKey() + s.pubkey2 = s.privkey2.PubKey() + s.owner2Addr = sdk.AccAddress(s.pubkey2.Address()) + s.owner2 = s.owner2Addr.String() + acc = s.app.AccountKeeper.NewAccountWithAddress(s.ctx, s.owner2Addr) + s.app.AccountKeeper.SetAccount(s.ctx, acc) } func TestMsgServerTestSuite(t *testing.T) { suite.Run(t, new(MsgServerTestSuite)) @@ -264,6 +279,13 @@ func (s *MsgServerTestSuite) containsMessage(events []abci.Event, msg proto.Mess return false } +// noAccessErr creates an expected error message for an address not having access on a marker. +func (s *MsgServerTestSuite) noAccessErr(addr string, role types.Access, denom string) string { + mAddr, err := types.MarkerAddress(denom) + s.Require().NoError(err, "MarkerAddress(%q)", denom) + return fmt.Sprintf("%s does not have %s on %s marker (%s)", addr, role, denom, mAddr) +} + func (s *MsgServerTestSuite) TestMsgFinalizeMarkerRequest() { authUser := testUserAddress("test") noNavMarker := types.NewEmptyMarkerAccount( @@ -718,3 +740,672 @@ func (s *MsgServerTestSuite) TestAddNetAssetValue() { }) } } + +func (s *MsgServerTestSuite) TestMsgAddAccessRequest() { + accessMintGrant := types.AccessGrant{ + Address: s.owner1, + Permissions: types.AccessListByNames("MINT"), + } + + accessInvalidGrant := types.AccessGrant{ + Address: s.owner1, + Permissions: types.AccessListByNames("Invalid"), + } + + addMarkerMsg := types.NewMsgAddMarkerRequest("hotdog", sdkmath.NewInt(100), s.owner1Addr, s.owner1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0) + _, err := s.msgServer.AddMarker(s.ctx, addMarkerMsg) + s.Assert().NoError(err, "should successfully add marker") + + testCases := []struct { + name string + msg *types.MsgAddAccessRequest + errorMsg string + expectedEvent proto.Message + }{ + { + name: "should successfully grant access to marker", + msg: types.NewMsgAddAccessRequest("hotdog", s.owner1Addr, accessMintGrant), + expectedEvent: types.NewEventMarkerAddAccess(&accessMintGrant, "hotdog", s.owner1), + }, + { + name: "should fail to ADD access to marker, validate basic fails", + msg: types.NewMsgAddAccessRequest("hotdog", s.owner1Addr, accessInvalidGrant), + errorMsg: "invalid access type: invalid request", + }, + { + + name: "should fail to ADD access to marker, keeper AddAccess failure", + msg: types.NewMsgAddAccessRequest("hotdog", s.owner2Addr, accessMintGrant), + errorMsg: fmt.Sprintf("updates to pending marker hotdog can only be made by %s: unauthorized", s.owner1), + }, + } + + for _, tc := range testCases { + s.Run(tc.name, func() { + s.ctx = s.ctx.WithEventManager(sdk.NewEventManager()) + response, err := s.msgServer.AddAccess(s.ctx, tc.msg) + if len(tc.errorMsg) > 0 { + s.Require().EqualError(err, tc.errorMsg, "handler(%T) error", tc.msg) + } else { + s.Require().NoError(err, "handler(%T) error", tc.msg) + if tc.expectedEvent != nil { + result := s.containsMessage(s.ctx.EventManager().ABCIEvents(), tc.expectedEvent) + s.Assert().True(result, "Expected typed event was not found in response.\n Expected: %+v\n Response: %+v", tc.expectedEvent, response) + } + } + }) + } +} + +func (s *MsgServerTestSuite) TestMsgDeleteAccessMarkerRequest() { + hotdogDenom := "hotdog" + accessMintGrant := types.AccessGrant{ + Address: s.owner1, + Permissions: types.AccessListByNames("MINT"), + } + + addMarkerMsg := types.NewMsgAddMarkerRequest(hotdogDenom, sdkmath.NewInt(100), s.owner1Addr, s.owner1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0) + _, err := s.msgServer.AddMarker(s.ctx, addMarkerMsg) + s.Assert().NoError(err, "should successfully add marker") + + addAccessMsg := types.NewMsgAddAccessRequest(hotdogDenom, s.owner1Addr, accessMintGrant) + _, err = s.msgServer.AddAccess(s.ctx, addAccessMsg) + s.Assert().NoError(err, "should add access to newly added marker") + + testcases := []struct { + name string + msg *types.MsgDeleteAccessRequest + expectedEvent proto.Message + }{ + { + name: "should successfully delete grant access to marker", + msg: types.NewDeleteAccessRequest(hotdogDenom, s.owner1Addr, s.owner1Addr), + expectedEvent: types.NewEventMarkerDeleteAccess(s.owner1, hotdogDenom, s.owner1), + }, + } + + for _, tc := range testcases { + s.Run(tc.name, func() { + s.ctx = s.ctx.WithEventManager(sdk.NewEventManager()) + response, err := s.msgServer.DeleteAccess(s.ctx, tc.msg) + s.Require().NoError(err, "handler(%T) error", tc.msg) + if tc.expectedEvent != nil { + result := s.containsMessage(s.ctx.EventManager().ABCIEvents(), tc.expectedEvent) + s.Assert().True(result, "Expected typed event was not found in response.\n Expected: %+v\n Response: %+v", tc.expectedEvent, response) + } + }) + } +} + +func (s *MsgServerTestSuite) TestMsgActivateMarkerRequest() { + hotdogDenom := "hotdog" + + addMarkerMsg := types.NewMsgAddMarkerRequest(hotdogDenom, sdkmath.NewInt(100), s.owner1Addr, s.owner1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0) + _, err := s.msgServer.AddMarker(s.ctx, addMarkerMsg) + s.Assert().NoError(err, "should successfully add marker") + + finalizeMarkerMsg := types.NewMsgFinalizeRequest(hotdogDenom, s.owner1Addr) + _, err = s.msgServer.Finalize(s.ctx, finalizeMarkerMsg) + s.Assert().NoError(err, "should not throw error when finalizing request") + + testcases := []struct { + name string + msg *types.MsgActivateRequest + expectedEvent proto.Message + }{ + { + name: "should successfully activate marker", + msg: types.NewMsgActivateRequest(hotdogDenom, s.owner1Addr), + expectedEvent: types.NewEventMarkerActivate(hotdogDenom, s.owner1), + }, + } + + for _, tc := range testcases { + s.Run(tc.name, func() { + s.ctx = s.ctx.WithEventManager(sdk.NewEventManager()) + response, err := s.msgServer.Activate(s.ctx, tc.msg) + s.Require().NoError(err, "handler(%T) error", tc.msg) + if tc.expectedEvent != nil { + result := s.containsMessage(s.ctx.EventManager().ABCIEvents(), tc.expectedEvent) + s.Assert().True(result, "Expected typed event was not found in response.\n Expected: %+v\n Response: %+v", tc.expectedEvent, response) + } + }) + } +} + +func (s *MsgServerTestSuite) TestMsgCancelMarkerRequest() { + hotdogDenom := "hotdog" + accessDeleteGrant := types.AccessGrant{ + Address: s.owner1, + Permissions: types.AccessListByNames("DELETE"), + } + + addMarkerMsg := types.NewMsgAddMarkerRequest(hotdogDenom, sdkmath.NewInt(100), s.owner1Addr, s.owner1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0) + _, err := s.msgServer.AddMarker(s.ctx, addMarkerMsg) + s.Assert().NoError(err, "should successfully add marker") + + addAccessMsg := types.NewMsgAddAccessRequest(hotdogDenom, s.owner1Addr, accessDeleteGrant) + _, err = s.msgServer.AddAccess(s.ctx, addAccessMsg) + s.Assert().NoError(err, "should not throw error when adding access to marker") + + testcases := []struct { + name string + msg *types.MsgCancelRequest + expectedEvent proto.Message + }{ + { + name: "should successfully cancel marker", + msg: types.NewMsgCancelRequest(hotdogDenom, s.owner1Addr), + expectedEvent: types.NewEventMarkerCancel(hotdogDenom, s.owner1), + }, + } + + for _, tc := range testcases { + s.Run(tc.name, func() { + s.ctx = s.ctx.WithEventManager(sdk.NewEventManager()) + response, err := s.msgServer.Cancel(s.ctx, tc.msg) + s.Require().NoError(err, "handler(%T) error", tc.msg) + if tc.expectedEvent != nil { + result := s.containsMessage(s.ctx.EventManager().ABCIEvents(), tc.expectedEvent) + s.Assert().True(result, "Expected typed event was not found in response.\n Expected: %+v\n Response: %+v", tc.expectedEvent, response) + } + }) + } +} + +func (s *MsgServerTestSuite) TestMsgDeleteMarkerRequest() { + hotdogDenom := "hotdog" + accessDeleteMintGrant := types.AccessGrant{ + Address: s.owner1, + Permissions: types.AccessListByNames("DELETE,MINT"), + } + + addMarkerMsg := types.NewMsgAddMarkerRequest(hotdogDenom, sdkmath.NewInt(100), s.owner1Addr, s.owner1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0) + _, err := s.msgServer.AddMarker(s.ctx, addMarkerMsg) + s.Assert().NoError(err, "should successfully add marker") + + addAccessMsg := types.NewMsgAddAccessRequest(hotdogDenom, s.owner1Addr, accessDeleteMintGrant) + _, err = s.msgServer.AddAccess(s.ctx, addAccessMsg) + s.Assert().NoError(err, "should not throw error when adding access to marker") + + cancelMsg := types.NewMsgCancelRequest(hotdogDenom, s.owner1Addr) + _, err = s.msgServer.Cancel(s.ctx, cancelMsg) + s.Assert().NoError(err, "should not throw error when canceling marker") + + testcases := []struct { + name string + msg *types.MsgDeleteRequest + expectedEvent proto.Message + }{ + { + name: "should successfully delete marker", + msg: types.NewMsgDeleteRequest(hotdogDenom, s.owner1Addr), + expectedEvent: types.NewEventMarkerDelete(hotdogDenom, s.owner1), + }, + } + + for _, tc := range testcases { + s.Run(tc.name, func() { + s.ctx = s.ctx.WithEventManager(sdk.NewEventManager()) + response, err := s.msgServer.Delete(s.ctx, tc.msg) + s.Require().NoError(err, "handler(%T) error", tc.msg) + if tc.expectedEvent != nil { + result := s.containsMessage(s.ctx.EventManager().ABCIEvents(), tc.expectedEvent) + s.Assert().True(result, "Expected typed event was not found in response.\n Expected: %+v\n Response: %+v", tc.expectedEvent, response) + } + }) + } +} + +func (s *MsgServerTestSuite) TestMsgMintMarkerRequest() { + hotdogDenom := "hotdog" + access := types.AccessGrant{ + Address: s.owner1, + Permissions: types.AccessListByNames("MINT,BURN"), + } + + addMarkerMsg := types.NewMsgAddMarkerRequest(hotdogDenom, sdkmath.NewInt(100), s.owner1Addr, s.owner1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0) + _, err := s.msgServer.AddMarker(s.ctx, addMarkerMsg) + s.Assert().NoError(err, "should successfully add marker") + + addAccessMsg := types.NewMsgAddAccessRequest(hotdogDenom, s.owner1Addr, access) + _, err = s.msgServer.AddAccess(s.ctx, addAccessMsg) + s.Assert().NoError(err, "should not throw error when adding access to marker") + + testcases := []struct { + name string + msg *types.MsgMintRequest + expectedEvent proto.Message + }{ + { + name: "should successfully mint marker", + msg: types.NewMsgMintRequest(s.owner1Addr, sdk.NewInt64Coin(hotdogDenom, 100)), + expectedEvent: types.NewEventMarkerMint("100", hotdogDenom, s.owner1), + }, + } + + for _, tc := range testcases { + s.Run(tc.name, func() { + s.ctx = s.ctx.WithEventManager(sdk.NewEventManager()) + response, err := s.msgServer.Mint(s.ctx, tc.msg) + s.Require().NoError(err, "handler(%T) error", tc.msg) + if tc.expectedEvent != nil { + result := s.containsMessage(s.ctx.EventManager().ABCIEvents(), tc.expectedEvent) + s.Assert().True(result, "Expected typed event was not found in response.\n Expected: %+v\n Response: %+v", tc.expectedEvent, response) + } + }) + } +} + +func (s *MsgServerTestSuite) TestMsgBurnMarkerRequest() { + hotdogDenom := "hotdog" + access := types.AccessGrant{ + Address: s.owner1, + Permissions: types.AccessListByNames("DELETE,MINT,BURN"), + } + + addMarkerMsg := types.NewMsgAddMarkerRequest(hotdogDenom, sdkmath.NewInt(100), s.owner1Addr, s.owner1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0) + _, err := s.msgServer.AddMarker(s.ctx, addMarkerMsg) + s.Assert().NoError(err, "should successfully add marker") + + addAccessMsg := types.NewMsgAddAccessRequest(hotdogDenom, s.owner1Addr, access) + _, err = s.msgServer.AddAccess(s.ctx, addAccessMsg) + s.Assert().NoError(err, "should not throw error when adding access to marker") + + testcases := []struct { + name string + msg *types.MsgBurnRequest + expectedEvent proto.Message + }{ + { + name: "should successfully burn marker", + msg: types.NewMsgBurnRequest(s.owner1Addr, sdk.NewInt64Coin(hotdogDenom, 100)), + expectedEvent: types.NewEventMarkerBurn("100", hotdogDenom, s.owner1), + }, + } + + for _, tc := range testcases { + s.Run(tc.name, func() { + s.ctx = s.ctx.WithEventManager(sdk.NewEventManager()) + response, err := s.msgServer.Burn(s.ctx, tc.msg) + s.Require().NoError(err, "handler(%T) error", tc.msg) + if tc.expectedEvent != nil { + result := s.containsMessage(s.ctx.EventManager().ABCIEvents(), tc.expectedEvent) + s.Assert().True(result, "Expected typed event was not found in response.\n Expected: %+v\n Response: %+v", tc.expectedEvent, response) + } + }) + } +} + +func (s *MsgServerTestSuite) TestMsgWithdrawMarkerRequest() { + hotdogDenom := "hotdog" + access := types.AccessGrant{ + Address: s.owner1, + Permissions: types.AccessListByNames("DELETE,MINT,WITHDRAW"), + } + + addMarkerMsg := types.NewMsgAddMarkerRequest(hotdogDenom, sdkmath.NewInt(100), s.owner1Addr, s.owner1Addr, types.MarkerType_RestrictedCoin, true, true, false, []string{}, 0, 0) + _, err := s.msgServer.AddMarker(s.ctx, addMarkerMsg) + s.Assert().NoError(err, "should successfully add marker") + + addAccessMsg := types.NewMsgAddAccessRequest(hotdogDenom, s.owner1Addr, access) + _, err = s.msgServer.AddAccess(s.ctx, addAccessMsg) + s.Assert().NoError(err, "should not throw error when adding access to marker") + + finalizeMsg := types.NewMsgFinalizeRequest(hotdogDenom, s.owner1Addr) + _, err = s.msgServer.Finalize(s.ctx, finalizeMsg) + s.Assert().NoError(err, "should not throw error when finalizing marker") + + activateMsg := types.NewMsgActivateRequest(hotdogDenom, s.owner1Addr) + _, err = s.msgServer.Activate(s.ctx, activateMsg) + s.Assert().NoError(err, "should not throw error when activating marker message") + + testcases := []struct { + name string + msg *types.MsgWithdrawRequest + expectedEvent proto.Message + }{ + { + name: "should successfully withdraw marker", + msg: types.NewMsgWithdrawRequest(s.owner1Addr, s.owner1Addr, hotdogDenom, sdk.NewCoins(sdk.NewInt64Coin(hotdogDenom, 100))), + expectedEvent: types.NewEventMarkerWithdraw("100hotdog", hotdogDenom, s.owner1, s.owner1), + }, + } + + for _, tc := range testcases { + s.Run(tc.name, func() { + s.ctx = s.ctx.WithEventManager(sdk.NewEventManager()) + response, err := s.msgServer.Withdraw(s.ctx, tc.msg) + s.Require().NoError(err, "handler(%T) error", tc.msg) + if tc.expectedEvent != nil { + result := s.containsMessage(s.ctx.EventManager().ABCIEvents(), tc.expectedEvent) + s.Assert().True(result, "Expected typed event was not found in response.\n Expected: %+v\n Response: %+v", tc.expectedEvent, response) + } + }) + } +} + +func (s *MsgServerTestSuite) TestMsgTransferMarkerRequest() { + hotdogDenom := "hotdog" + access := types.AccessGrant{ + Address: s.owner1, + Permissions: types.AccessListByNames("DELETE,MINT,WITHDRAW,TRANSFER"), + } + + addMarkerMsg := types.NewMsgAddMarkerRequest(hotdogDenom, sdkmath.NewInt(100), s.owner1Addr, s.owner1Addr, types.MarkerType_RestrictedCoin, true, true, false, []string{}, 0, 0) + _, err := s.msgServer.AddMarker(s.ctx, addMarkerMsg) + s.Assert().NoError(err, "should sucessfully add marker") + + addAccessMsg := types.NewMsgAddAccessRequest(hotdogDenom, s.owner1Addr, access) + _, err = s.msgServer.AddAccess(s.ctx, addAccessMsg) + s.Assert().NoError(err, "should not throw error when adding access to marker") + + finalizeMsg := types.NewMsgFinalizeRequest(hotdogDenom, s.owner1Addr) + _, err = s.msgServer.Finalize(s.ctx, finalizeMsg) + s.Assert().NoError(err, "should not throw error when finalizing marker") + + activateMsg := types.NewMsgActivateRequest(hotdogDenom, s.owner1Addr) + _, err = s.msgServer.Activate(s.ctx, activateMsg) + s.Assert().NoError(err, "should not throw error when activating marker message") + + mintMsg := types.NewMsgMintRequest(s.owner1Addr, sdk.NewInt64Coin(hotdogDenom, 1000)) + _, err = s.msgServer.Mint(s.ctx, mintMsg) + s.Assert().NoError(err, "should not throw error when minting marker") + + testcases := []struct { + name string + msg *types.MsgTransferRequest + expectedEvent proto.Message + }{ + { + name: "should successfully transfer marker", + msg: types.NewMsgTransferRequest(s.owner1Addr, s.owner1Addr, s.owner2Addr, sdk.NewInt64Coin(hotdogDenom, 0)), + expectedEvent: types.NewEventMarkerTransfer("0", hotdogDenom, s.owner1, s.owner2, s.owner1), + }, + } + + for _, tc := range testcases { + s.Run(tc.name, func() { + s.ctx = s.ctx.WithEventManager(sdk.NewEventManager()) + response, err := s.msgServer.Transfer(s.ctx, tc.msg) + s.Require().NoError(err, "handler(%T) error", tc.msg) + if tc.expectedEvent != nil { + result := s.containsMessage(s.ctx.EventManager().ABCIEvents(), tc.expectedEvent) + s.Assert().True(result, "Expected typed event was not found in response.\n Expected: %+v\n Response: %+v", tc.expectedEvent, response) + } + }) + } +} + +func (s *MsgServerTestSuite) TestMsgSetDenomMetadataRequest() { + hotdogDenom := "hotdog" + hotdogName := "Jason" + hotdogSymbol := "WIFI" + access := types.AccessGrant{ + Address: s.owner1, + Permissions: types.AccessListByNames("DELETE,MINT,WITHDRAW,TRANSFER"), + } + + hotdogMetadata := banktypes.Metadata{ + Description: "a description", + DenomUnits: []*banktypes.DenomUnit{ + {Denom: fmt.Sprintf("n%s", hotdogDenom), Exponent: 0, Aliases: []string{fmt.Sprintf("nano%s", hotdogDenom)}}, + {Denom: fmt.Sprintf("u%s", hotdogDenom), Exponent: 3, Aliases: []string{}}, + {Denom: hotdogDenom, Exponent: 9, Aliases: []string{}}, + {Denom: fmt.Sprintf("mega%s", hotdogDenom), Exponent: 15, Aliases: []string{}}, + }, + Base: fmt.Sprintf("n%s", hotdogDenom), + Display: hotdogDenom, + Name: hotdogName, + Symbol: hotdogSymbol, + } + + addMarkerMsg := types.NewMsgAddMarkerRequest(fmt.Sprintf("n%s", hotdogDenom), sdkmath.NewInt(100), s.owner1Addr, s.owner1Addr, types.MarkerType_RestrictedCoin, true, true, false, []string{}, 0, 0) + _, err := s.msgServer.AddMarker(s.ctx, addMarkerMsg) + s.Assert().NoError(err, "should successfully add marker") + + addAccessMsg := types.NewMsgAddAccessRequest(fmt.Sprintf("n%s", hotdogDenom), s.owner1Addr, access) + _, err = s.msgServer.AddAccess(s.ctx, addAccessMsg) + s.Assert().NoError(err, "should not throw error when adding access to marker") + + testcases := []struct { + name string + msg *types.MsgSetDenomMetadataRequest + expectedEvent proto.Message + }{ + { + name: "should successfully set denom metadata on marker", + msg: types.NewSetDenomMetadataRequest(hotdogMetadata, s.owner1Addr), + expectedEvent: types.NewEventMarkerSetDenomMetadata(hotdogMetadata, s.owner1), + }, + } + + for _, tc := range testcases { + s.Run(tc.name, func() { + s.ctx = s.ctx.WithEventManager(sdk.NewEventManager()) + response, err := s.msgServer.SetDenomMetadata(s.ctx, tc.msg) + s.Require().NoError(err, "handler(%T) error", tc.msg) + if tc.expectedEvent != nil { + result := s.containsMessage(s.ctx.EventManager().ABCIEvents(), tc.expectedEvent) + s.Assert().True(result, "Expected typed event was not found in response.\n Expected: %+v\n Response: %+v", tc.expectedEvent, response) + } + }) + } +} + +func (s *MsgServerTestSuite) TestMsgAddFinalizeActivateMarkerRequest() { + denom := "hotdog" + rdenom := "restrictedhotdog" + denomWithDashPeriod := fmt.Sprintf("%s-my.marker", denom) + + testcases := []struct { + name string + handler func(sdk.Context) error + expectedEvent proto.Message + errorMsg string + }{ + { + name: "should successfully ADD,FINALIZE,ACTIVATE new marker", + handler: func(ctx sdk.Context) error { + msg := types.NewMsgAddFinalizeActivateMarkerRequest(denom, sdkmath.NewInt(100), s.owner1Addr, s.owner1Addr, types.MarkerType_Coin, true, true, false, []string{}, []types.AccessGrant{*types.NewAccessGrant(s.owner1Addr, []types.Access{types.Access_Mint, types.Access_Admin})}, 0, 0) + _, err := s.msgServer.AddFinalizeActivateMarker(s.ctx, msg) + return err + }, + expectedEvent: types.NewEventMarkerAdd(denom, types.MustGetMarkerAddress(denom).String(), "100", "proposed", s.owner1, types.MarkerType_Coin.String()), + }, + { + name: "should successfully ADD,FINALIZE,ACTIVATE new marker with attributes", + handler: func(ctx sdk.Context) error { + msg := types.NewMsgAddFinalizeActivateMarkerRequest(rdenom, sdkmath.NewInt(100), s.owner1Addr, s.owner1Addr, types.MarkerType_RestrictedCoin, true, true, false, []string{"attributes.one.com", "attributes.two.com"}, []types.AccessGrant{*types.NewAccessGrant(s.owner1Addr, []types.Access{types.Access_Mint, types.Access_Admin})}, 0, 0) + _, err := s.msgServer.AddFinalizeActivateMarker(s.ctx, msg) + return err + }, + expectedEvent: types.NewEventMarkerAdd(rdenom, types.MustGetMarkerAddress(rdenom).String(), "100", "proposed", s.owner1, types.MarkerType_RestrictedCoin.String()), + }, + { + name: "should fail to ADD,FINALIZE,ACTIVATE new marker, validate basic failure", + handler: func(ctx sdk.Context) error { + msg := types.NewMsgAddFinalizeActivateMarkerRequest(denom, sdkmath.NewInt(100), s.owner1Addr, s.owner1Addr, types.MarkerType_Coin, true, true, false, []string{}, nil, 0, 0) + _, err := s.msgServer.AddFinalizeActivateMarker(s.ctx, msg) + return err + }, + errorMsg: "since this will activate the marker, must have at least one access list defined: invalid request", + }, + { + name: "should fail to ADD,FINALIZE,ACTIVATE new marker, marker already exists", + handler: func(ctx sdk.Context) error { + msg := types.NewMsgAddMarkerRequest(denom, sdkmath.NewInt(100), s.owner1Addr, s.owner1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0) + _, err := s.msgServer.AddMarker(s.ctx, msg) + return err + }, + errorMsg: fmt.Sprintf("marker address already exists for %s: invalid request", types.MustGetMarkerAddress(denom)), + }, + { + name: "should successfully add marker with dash and period", + handler: func(ctx sdk.Context) error { + msg := types.NewMsgAddMarkerRequest(denomWithDashPeriod, sdkmath.NewInt(1000), s.owner1Addr, s.owner1Addr, types.MarkerType_Coin, true, true, false, []string{}, 0, 0) + _, err := s.msgServer.AddMarker(s.ctx, msg) + return err + }, + expectedEvent: types.NewEventMarkerAdd(denomWithDashPeriod, types.MustGetMarkerAddress(denomWithDashPeriod).String(), "1000", "proposed", s.owner1, types.MarkerType_Coin.String()), + }, + { + name: "should successfully mint denom", + handler: func(ctx sdk.Context) error { + msg := types.NewMsgMintRequest(s.owner1Addr, sdk.NewInt64Coin(denom, 1000)) + _, err := s.msgServer.Mint(s.ctx, msg) + return err + }, + expectedEvent: types.NewEventMarkerMint("1000", denom, s.owner1), + }, + { + name: "should fail to burn denom, user doesn't have permissions", + handler: func(ctx sdk.Context) error { + msg := types.NewMsgBurnRequest(s.owner1Addr, sdk.NewInt64Coin(denom, 50)) + _, err := s.msgServer.Burn(s.ctx, msg) + return err + }, + errorMsg: s.noAccessErr(s.owner1, types.Access_Burn, denom) + ": invalid request", + }, + } + + for _, tc := range testcases { + s.Run(tc.name, func() { + s.ctx = s.ctx.WithEventManager(sdk.NewEventManager()) + err := tc.handler(s.ctx) + if len(tc.errorMsg) > 0 { + s.Require().EqualError(err, tc.errorMsg, "should have the correct error") + } else { + s.Require().NoError(err, "should have no error") + if tc.expectedEvent != nil { + result := s.containsMessage(s.ctx.EventManager().ABCIEvents(), tc.expectedEvent) + s.Assert().True(result, "Expected typed event was not found in response.\n Expected: %+v\n", tc.expectedEvent) + } + } + }) + } +} + +func (s *MsgServerTestSuite) TestMsgSetAccountDataRequest() { + denomU := "aducoin" + denomR := "adrcoin" + + denomUAddr := types.MustGetMarkerAddress(denomU).String() + denomRAddr := types.MustGetMarkerAddress(denomR).String() + + authority := s.app.MarkerKeeper.GetAuthority() + + msg := types.NewMsgAddFinalizeActivateMarkerRequest( + denomU, sdkmath.NewInt(100), + s.owner1Addr, s.owner1Addr, // From and Manager. + types.MarkerType_Coin, + true, // Supply fixed + true, // Allow gov + false, // don't allow forced transfer + []string{}, // No required attributes. + []types.AccessGrant{ + {Address: s.owner1, Permissions: []types.Access{types.Access_Mint, types.Access_Admin}}, + {Address: s.owner2, Permissions: []types.Access{types.Access_Deposit}}, + }, + 0, + 0, + ) + _, err := s.msgServer.AddFinalizeActivateMarker(s.ctx, msg) + s.Assert().NoError(err, "should successfully add/finalize/active unrestricted marker") + + msg = types.NewMsgAddFinalizeActivateMarkerRequest( + denomR, sdkmath.NewInt(100), + s.owner1Addr, s.owner1Addr, // From and Manager. + types.MarkerType_RestrictedCoin, + true, // Supply fixed + true, // Allow gov + false, // don't allow forced transfer + []string{}, // No required attributes. + []types.AccessGrant{ + {Address: s.owner1, Permissions: []types.Access{types.Access_Mint, types.Access_Admin}}, + {Address: s.owner2, Permissions: []types.Access{types.Access_Deposit}}, + }, + 0, + 0, + ) + _, err = s.msgServer.AddFinalizeActivateMarker(s.ctx, msg) + s.Assert().NoError(err, "should successfully add/finalize/active restricted marker") + + testcases := []struct { + name string + msg *types.MsgSetAccountDataRequest + expectedEvent proto.Message + errorMsg string + }{ + { + name: "should successfully set account data on unrestricted marker via gov prop", + msg: &types.MsgSetAccountDataRequest{ + Denom: denomU, + Value: "This is some unrestricted coin data.", + Signer: authority, + }, + expectedEvent: &attrtypes.EventAccountDataUpdated{Account: denomUAddr}, + }, + { + name: "should successfully set account data on unrestricted marker by signer with deposit", + msg: &types.MsgSetAccountDataRequest{ + Denom: denomU, + Value: "This is some different unrestricted coin data.", + Signer: s.owner2, + }, + expectedEvent: &attrtypes.EventAccountDataUpdated{Account: denomUAddr}, + }, + { + name: "should fail to set account data on unrestricted marker because signer does not have deposit", + msg: &types.MsgSetAccountDataRequest{ + Denom: denomU, + Value: "This is some unrestricted coin data. This won't get used though.", + Signer: s.owner1, + }, + errorMsg: s.noAccessErr(s.owner1, types.Access_Deposit, denomU), + }, + { + name: "should successfully set account data on restricted marker via gov prop", + msg: &types.MsgSetAccountDataRequest{ + Denom: denomR, + Value: "This is some restricted coin data.", + Signer: authority, + }, + expectedEvent: &attrtypes.EventAccountDataUpdated{Account: denomRAddr}, + }, + { + name: "should successfully set account data on restricted marker by signer with deposit", + msg: &types.MsgSetAccountDataRequest{ + Denom: denomR, + Value: "This is some different restricted coin data.", + Signer: s.owner2, + }, + expectedEvent: &attrtypes.EventAccountDataUpdated{Account: denomRAddr}, + }, + { + name: "should fail to set account data on restricted marker because signer does not have deposit", + msg: &types.MsgSetAccountDataRequest{ + Denom: denomR, + Value: "This is some restricted coin data. This won't get used though.", + Signer: s.owner1, + }, + errorMsg: s.noAccessErr(s.owner1, types.Access_Deposit, denomR), + }, + } + + for _, tc := range testcases { + s.Run(tc.name, func() { + s.ctx = s.ctx.WithEventManager(sdk.NewEventManager()) + response, err := s.msgServer.SetAccountData(s.ctx, tc.msg) + if len(tc.errorMsg) > 0 { + s.Require().EqualError(err, tc.errorMsg, "handler(%T) error", tc.msg) + } else { + s.Require().NoError(err, "handler(%T) error", tc.msg) + if tc.expectedEvent != nil { + result := s.containsMessage(s.ctx.EventManager().ABCIEvents(), tc.expectedEvent) + s.Assert().True(result, "Expected typed event was not found in response.\n Expected: %+v\n Response: %+v", tc.expectedEvent, response) + } + } + }) + } +} diff --git a/x/marker/keeper/querier.go b/x/marker/keeper/querier.go deleted file mode 100644 index e2275ce666..0000000000 --- a/x/marker/keeper/querier.go +++ /dev/null @@ -1,177 +0,0 @@ -package keeper - -import ( - "strings" - - abci "github.com/cometbft/cometbft/abci/types" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/codec" - sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - - "github.com/provenance-io/provenance/x/marker/types" -) - -// TODO[1760]: marker: Delete the marker Querier. - -// NewQuerier is the module level router for state queries (using the Legacy Amino Codec) -func NewQuerier(keeper Keeper, legacyQuerierCdc *codec.LegacyAmino) func(ctx sdk.Context, path []string, req abci.RequestQuery) ([]byte, error) { - return func(ctx sdk.Context, path []string, req abci.RequestQuery) ([]byte, error) { - switch path[0] { - case types.QueryMarkers: - return queryMarkers(ctx, path[1:], req, keeper, legacyQuerierCdc) - case types.QueryHolders: - return queryHolders(ctx, path[1:], req, keeper, legacyQuerierCdc) - case types.QueryMarker: - return queryMarker(ctx, path[1:], req, keeper, legacyQuerierCdc) - case types.QueryMarkerAccess: - return queryAccess(ctx, path[1:], req, keeper, legacyQuerierCdc) - case types.QueryMarkerEscrow: - return queryCoins(ctx, path[1:], req, keeper, legacyQuerierCdc) - case types.QueryMarkerSupply: - return querySupply(ctx, path[1:], req, keeper, legacyQuerierCdc) - default: - return nil, sdkerrors.ErrUnknownRequest.Wrapf("unknown %s query endpoint: %s", types.ModuleName, path[0]) - } - } -} - -// query for a single marker by denom or address -func queryMarker(ctx sdk.Context, path []string, _ abci.RequestQuery, keeper Keeper, legacyQuerierCdc *codec.LegacyAmino) ([]byte, error) { - account, err := accountForDenomOrAddress(ctx, keeper, path[0]) - if err != nil { - return nil, err - } - - res, err := codec.MarshalJSONIndent(legacyQuerierCdc, account) - if err != nil { - return nil, sdkerrors.ErrJSONMarshal.Wrap(err.Error()) - } - - return res, nil -} - -// query for access records on an account -func queryAccess(ctx sdk.Context, path []string, _ abci.RequestQuery, keeper Keeper, legacyQuerierCdc *codec.LegacyAmino) ([]byte, error) { - account, err := accountForDenomOrAddress(ctx, keeper, path[0]) - if err != nil { - return nil, err - } - - m := account.(*types.MarkerAccount) - res, err := codec.MarshalJSONIndent(legacyQuerierCdc, m.AccessControl) - if err != nil { - return nil, sdkerrors.ErrJSONMarshal.Wrap(err.Error()) - } - - return res, nil -} - -// query for coins on a marker account -func queryCoins(ctx sdk.Context, path []string, _ abci.RequestQuery, keeper Keeper, legacyQuerierCdc *codec.LegacyAmino) ([]byte, error) { - account, err := accountForDenomOrAddress(ctx, keeper, path[0]) - if err != nil { - return nil, err - } - - m := account.(*types.MarkerAccount) - res, err := codec.MarshalJSONIndent(legacyQuerierCdc, keeper.GetEscrow(ctx, m)) - if err != nil { - return nil, sdkerrors.ErrJSONMarshal.Wrap(err.Error()) - } - - return res, nil -} - -// query for supply of coin on a marker account -func querySupply(ctx sdk.Context, path []string, _ abci.RequestQuery, keeper Keeper, legacyQuerierCdc *codec.LegacyAmino) ([]byte, error) { - account, err := accountForDenomOrAddress(ctx, keeper, path[0]) - if err != nil { - return nil, err - } - - m := account.(*types.MarkerAccount) - res, err := codec.MarshalJSONIndent(legacyQuerierCdc, m.Supply) - if err != nil { - return nil, sdkerrors.ErrJSONMarshal.Wrap(err.Error()) - } - - return res, nil -} - -// query for all marker accounts -func queryMarkers(ctx sdk.Context, _ []string, req abci.RequestQuery, keeper Keeper, legacyQuerierCdc *codec.LegacyAmino) ([]byte, error) { - var params types.QueryMarkersParams - - err := legacyQuerierCdc.UnmarshalJSON(req.Data, ¶ms) - if err != nil { - return nil, sdkerrors.ErrJSONUnmarshal.Wrap(err.Error()) - } - - filteredMarkers := make([]types.MarkerAccount, 0) - keeper.IterateMarkers(ctx, func(record types.MarkerAccountI) bool { - if len(params.Status) < 1 || strings.EqualFold(record.GetStatus().String(), params.Status) { - m := record.(*types.MarkerAccount) - filteredMarkers = append(filteredMarkers, *m) - } - return false - }) - - start, end := client.Paginate(len(filteredMarkers), params.Page, params.Limit, len(filteredMarkers)) - if start < 0 || end < 0 { - filteredMarkers = []types.MarkerAccount{} - } else { - filteredMarkers = filteredMarkers[start:end] - } - - res, err := codec.MarshalJSONIndent(legacyQuerierCdc, filteredMarkers) - if err != nil { - return nil, sdkerrors.ErrJSONMarshal.Wrap(err.Error()) - } - - return res, nil -} - -// query for all accounts holding the given marker coins -func queryHolders(ctx sdk.Context, _ []string, req abci.RequestQuery, keeper Keeper, legacyQuerierCdc *codec.LegacyAmino) ([]byte, error) { - var params types.QueryMarkersParams - - err := legacyQuerierCdc.UnmarshalJSON(req.Data, ¶ms) - if err != nil { - return nil, sdkerrors.ErrJSONUnmarshal.Wrap(err.Error()) - } - - holders := keeper.GetAllMarkerHolders(ctx, params.Denom) - - start, end := client.Paginate(len(holders), params.Page, params.Limit, len(holders)) - if start < 0 || end < 0 { - holders = []types.Balance{} - } else { - holders = holders[start:end] - } - - res, err := codec.MarshalJSONIndent(legacyQuerierCdc, holders) - if err != nil { - return nil, sdkerrors.ErrJSONMarshal.Wrap(err.Error()) - } - - return res, nil -} - -func accountForDenomOrAddress(ctx sdk.Context, keeper Keeper, lookup string) (types.MarkerAccountI, error) { - var addrErr, err error - var addr sdk.AccAddress - var account types.MarkerAccountI - - // try to parse the argument as an address, if this fails try as a denom string. - if addr, addrErr = sdk.AccAddressFromBech32(lookup); addrErr != nil { - account, err = keeper.GetMarkerByDenom(ctx, lookup) - } else { - account, err = keeper.GetMarker(ctx, addr) - } - if err != nil { - return nil, types.ErrMarkerNotFound.Wrap("invalid denom or address") - } - return account, nil -} diff --git a/x/marker/keeper/querier_test.go b/x/marker/keeper/querier_test.go deleted file mode 100644 index fa052a56fc..0000000000 --- a/x/marker/keeper/querier_test.go +++ /dev/null @@ -1,156 +0,0 @@ -package keeper_test - -import ( - "fmt" - "testing" - - "github.com/stretchr/testify/require" - - abci "github.com/cometbft/cometbft/abci/types" - - simapp "github.com/provenance-io/provenance/app" - markerkeeper "github.com/provenance-io/provenance/x/marker/keeper" - markertypes "github.com/provenance-io/provenance/x/marker/types" -) - -func TestNewQuerier(t *testing.T) { - app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false) - cdc := app.LegacyAmino() - user := testUserAddress("test") - - query := abci.RequestQuery{ - Path: "", - Data: []byte{}, - } - - querier := markerkeeper.NewQuerier(app.MarkerKeeper, app.LegacyAmino()) - - // should error for a route pointing to some other query module - bz, err := querier(ctx, []string{"other"}, query) - require.Error(t, err) - require.Nil(t, bz) - - allMarkersParama := markertypes.NewQueryMarkersParams(1, 20, "testcoin", "") - bz, errRes := cdc.MarshalJSON(allMarkersParama) - require.Nil(t, errRes) - - query.Path = fmt.Sprintf("/custom/%s/%s", markertypes.QuerierRoute, markertypes.QueryMarkers) - query.Data = bz - - // get all markers should not return an error even if there are no markers - _, err = querier(ctx, []string{markertypes.QueryMarkers}, query) - require.Nil(t, err) - - // get all holders should not return an error even if there are no of type - _, err = querier(ctx, []string{markertypes.QueryHolders}, query) - require.Nil(t, err) - - // create a marker account - mac := markertypes.NewEmptyMarkerAccount("testcoin", user.String(), []markertypes.AccessGrant{*markertypes.NewAccessGrant(user, - []markertypes.Access{markertypes.Access_Mint})}) - require.NoError(t, app.MarkerKeeper.AddMarkerAccount(ctx, mac)) - - // get all markers should not return an error - _, err = querier(ctx, []string{markertypes.QueryMarkers}, query) - require.Nil(t, err) - - // get all holders should not return an error - _, err = querier(ctx, []string{markertypes.QueryHolders}, query) - require.Nil(t, err) - - // pull marker using denom on QueryMarker endpoint - query.Path = fmt.Sprintf("/custom/%s/%s/%s", markertypes.QuerierRoute, markertypes.QueryMarker, "testcoin") - query.Data = []byte{} - - _, err = querier(ctx, []string{markertypes.QueryMarker, "testcoin"}, query) - require.Nil(t, err) - - // pull marker using addess on QueryMarker endpoint - query.Path = fmt.Sprintf("/custom/%s/%s/%s", markertypes.QuerierRoute, markertypes.QueryMarker, - markertypes.MustGetMarkerAddress("testcoin")) - query.Data = []byte{} - - _, err = querier(ctx, []string{markertypes.QueryMarker, markertypes.MustGetMarkerAddress("testcoin").String()}, - query) - require.Nil(t, err) - - // pull marker using invalid denom on QueryMarker endpoint - query.Path = fmt.Sprintf("/custom/%s/%s/%s", markertypes.QuerierRoute, markertypes.QueryMarker, "other") - query.Data = []byte{} - - _, err = querier(ctx, []string{markertypes.QueryMarker, "other"}, query) - require.Error(t, err) -} - -func TestQuerierAccess(t *testing.T) { - app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false) - user := testUserAddress("test") - // create a marker account - mac := markertypes.NewEmptyMarkerAccount("testcoin", user.String(), []markertypes.AccessGrant{*markertypes.NewAccessGrant(user, - []markertypes.Access{markertypes.Access_Mint})}) - require.NoError(t, app.MarkerKeeper.AddMarkerAccount(ctx, mac)) - - query := abci.RequestQuery{ - Path: "", - Data: []byte{}, - } - - querier := markerkeeper.NewQuerier(app.MarkerKeeper, app.LegacyAmino()) - - // pull marker access list - query.Path = fmt.Sprintf("/custom/%s/%s/%s", markertypes.QuerierRoute, markertypes.QueryMarkerAccess, "testcoin") - query.Data = []byte{} - - _, err := querier(ctx, []string{markertypes.QueryMarkerAccess, "testcoin"}, query) - require.Nil(t, err) -} - -func TestQuerierCoins(t *testing.T) { - app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false) - user := testUserAddress("test") - // create a marker account - mac := markertypes.NewEmptyMarkerAccount("testcoin", user.String(), []markertypes.AccessGrant{*markertypes.NewAccessGrant(user, - []markertypes.Access{markertypes.Access_Mint})}) - require.NoError(t, app.MarkerKeeper.AddMarkerAccount(ctx, mac)) - - query := abci.RequestQuery{ - Path: "", - Data: []byte{}, - } - - querier := markerkeeper.NewQuerier(app.MarkerKeeper, app.LegacyAmino()) - - // pull marker account coins in escrow - query.Path = fmt.Sprintf("/custom/%s/%s/%s", markertypes.QuerierRoute, markertypes.QueryMarkerEscrow, "testcoin") - query.Data = []byte{} - - _, err := querier(ctx, []string{markertypes.QueryMarkerEscrow, "testcoin"}, query) - require.Nil(t, err) -} - -func TestQuerierSupply(t *testing.T) { - app := simapp.Setup(t) - ctx := app.BaseApp.NewContext(false) - user := testUserAddress("test") - // create a marker account - mac := markertypes.NewEmptyMarkerAccount("testcoin", user.String(), []markertypes.AccessGrant{*markertypes.NewAccessGrant(user, - []markertypes.Access{markertypes.Access_Mint})}) - require.NoError(t, app.MarkerKeeper.AddMarkerAccount(ctx, mac)) - - query := abci.RequestQuery{ - Path: "", - Data: []byte{}, - } - - querier := markerkeeper.NewQuerier(app.MarkerKeeper, app.LegacyAmino()) - - // pull marker account total supply - query.Path = fmt.Sprintf("/custom/%s/%s/%s", markertypes.QuerierRoute, markertypes.QueryMarkerSupply, "testcoin") - query.Data = []byte{} - - _, err := querier(ctx, []string{markertypes.QueryMarkerSupply, "testcoin"}, query) - require.Nil(t, err) -} diff --git a/x/marker/keeper/query_server.go b/x/marker/keeper/query_server.go index 5c09a45c7b..07167d35a0 100644 --- a/x/marker/keeper/query_server.go +++ b/x/marker/keeper/query_server.go @@ -6,8 +6,8 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - codectypes "github.com/cosmos/cosmos-sdk/codec/types" "cosmossdk.io/store/prefix" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/query" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" @@ -204,3 +204,21 @@ func (k Keeper) NetAssetValues(c context.Context, req *types.QueryNetAssetValues return &types.QueryNetAssetValuesResponse{NetAssetValues: navs}, nil } + +// accountForDenomOrAddress attempts to first get a marker by account address and then by denom. +func accountForDenomOrAddress(ctx sdk.Context, keeper Keeper, lookup string) (types.MarkerAccountI, error) { + var addrErr, err error + var addr sdk.AccAddress + var account types.MarkerAccountI + + // try to parse the argument as an address, if this fails try as a denom string. + if addr, addrErr = sdk.AccAddressFromBech32(lookup); addrErr != nil { + account, err = keeper.GetMarkerByDenom(ctx, lookup) + } else { + account, err = keeper.GetMarker(ctx, addr) + } + if err != nil { + return nil, types.ErrMarkerNotFound.Wrap("invalid denom or address") + } + return account, nil +} diff --git a/x/marker/keeper/send_restrictions_test.go b/x/marker/keeper/send_restrictions_test.go index a5e572d4ad..9d558c62ca 100644 --- a/x/marker/keeper/send_restrictions_test.go +++ b/x/marker/keeper/send_restrictions_test.go @@ -15,8 +15,8 @@ import ( simapp "github.com/provenance-io/provenance/app" attrTypes "github.com/provenance-io/provenance/x/attribute/types" - "github.com/provenance-io/provenance/x/marker" "github.com/provenance-io/provenance/x/marker/keeper" + markerkeeper "github.com/provenance-io/provenance/x/marker/keeper" "github.com/provenance-io/provenance/x/marker/types" ) @@ -643,6 +643,7 @@ func TestBankSendCoinsUsesSendRestrictionFn(t *testing.T) { app := simapp.Setup(t) ctx := app.BaseApp.NewContext(false) + msgServer := markerkeeper.NewMsgServerImpl(app.MarkerKeeper) app.MarkerKeeper.AddMarkerAccount(ctx, types.NewEmptyMarkerAccount("navcoin", addrNameOwner.String(), []types.AccessGrant{})) app.AccountKeeper.SetAccount(ctx, app.AccountKeeper.NewAccountWithAddress(ctx, addrNameOwner)) err := app.NameKeeper.SetNameRecord(ctx, "kyc.provenance.io", addrNameOwner, false) @@ -670,8 +671,7 @@ func TestBankSendCoinsUsesSendRestrictionFn(t *testing.T) { AllowForcedTransfer: false, RequiredAttributes: []string{"kyc.provenance.io"}, } - markerHandler := marker.NewHandler(app.MarkerKeeper) - _, err = markerHandler(ctx, makeMarkerMsg) + _, err = msgServer.AddFinalizeActivateMarker(ctx, makeMarkerMsg) require.NoError(t, err, "makeMarkerMsg") err = app.MarkerKeeper.WithdrawCoins(ctx, addrHasWithdraw, addrHasAttr, markerDenom, cz(100, markerDenom)) require.NoError(t, err, "WithdrawCoins to addrHasTransfer") @@ -737,6 +737,7 @@ func TestBankInputOutputCoinsUsesSendRestrictionFn(t *testing.T) { app := simapp.Setup(t) ctx := app.BaseApp.NewContext(false) + msgServer := markerkeeper.NewMsgServerImpl(app.MarkerKeeper) app.MarkerKeeper.AddMarkerAccount(ctx, types.NewEmptyMarkerAccount("navcoin", addrManager.String(), []types.AccessGrant{})) app.AccountKeeper.SetAccount(ctx, app.AccountKeeper.NewAccountWithAddress(ctx, addrManager)) err := app.NameKeeper.SetNameRecord(ctx, "rando.io", addrManager, false) @@ -777,8 +778,7 @@ func TestBankInputOutputCoinsUsesSendRestrictionFn(t *testing.T) { AllowForcedTransfer: false, RequiredAttributes: []string{"rando.io"}, } - markerHandler := marker.NewHandler(app.MarkerKeeper) - _, err = markerHandler(ctx, makeMarkerMsg) + _, err = msgServer.AddFinalizeActivateMarker(ctx, makeMarkerMsg) require.NoError(t, err, "MsgAddFinalizeActivateMarkerRequest") err = app.MarkerKeeper.WithdrawCoins(ctx, addrManager, addrManager, markerDenom, cz(100)) require.NoError(t, err, "WithdrawCoins to addrInput") diff --git a/x/metadata/handler.go b/x/metadata/handler.go deleted file mode 100644 index 4fcf1f66ca..0000000000 --- a/x/metadata/handler.go +++ /dev/null @@ -1,98 +0,0 @@ -package metadata - -import ( - sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - - "github.com/provenance-io/provenance/x/metadata/keeper" - "github.com/provenance-io/provenance/x/metadata/types" -) - -// NewHandler returns a handler for metadata messages. -// TODO[1760]: metadata: Delete the metadata NewHandler. -func NewHandler(k keeper.Keeper) func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { - msgServer := keeper.NewMsgServerImpl(k) - - return func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { - ctx = ctx.WithEventManager(sdk.NewEventManager()) - - switch msg := msg.(type) { - case *types.MsgWriteScopeRequest: - res, err := msgServer.WriteScope(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgDeleteScopeRequest: - res, err := msgServer.DeleteScope(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgAddScopeDataAccessRequest: - res, err := msgServer.AddScopeDataAccess(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgDeleteScopeDataAccessRequest: - res, err := msgServer.DeleteScopeDataAccess(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgAddScopeOwnerRequest: - res, err := msgServer.AddScopeOwner(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgDeleteScopeOwnerRequest: - res, err := msgServer.DeleteScopeOwner(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgUpdateValueOwnersRequest: - res, err := msgServer.UpdateValueOwners(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgMigrateValueOwnerRequest: - res, err := msgServer.MigrateValueOwner(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - - case *types.MsgWriteRecordRequest: - res, err := msgServer.WriteRecord(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgDeleteRecordRequest: - res, err := msgServer.DeleteRecord(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgWriteSessionRequest: - res, err := msgServer.WriteSession(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - - case *types.MsgWriteScopeSpecificationRequest: - res, err := msgServer.WriteScopeSpecification(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgDeleteScopeSpecificationRequest: - res, err := msgServer.DeleteScopeSpecification(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgWriteContractSpecificationRequest: - res, err := msgServer.WriteContractSpecification(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgDeleteContractSpecificationRequest: - res, err := msgServer.DeleteContractSpecification(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgAddContractSpecToScopeSpecRequest: - res, err := msgServer.AddContractSpecToScopeSpec(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgDeleteContractSpecFromScopeSpecRequest: - res, err := msgServer.DeleteContractSpecFromScopeSpec(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgWriteRecordSpecificationRequest: - res, err := msgServer.WriteRecordSpecification(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgDeleteRecordSpecificationRequest: - res, err := msgServer.DeleteRecordSpecification(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - - case *types.MsgBindOSLocatorRequest: - res, err := msgServer.BindOSLocator(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgDeleteOSLocatorRequest: - res, err := msgServer.DeleteOSLocator(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgModifyOSLocatorRequest: - res, err := msgServer.ModifyOSLocator(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - - case *types.MsgSetAccountDataRequest: - res, err := msgServer.SetAccountData(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - - default: - return nil, sdkerrors.ErrUnknownRequest.Wrapf("unrecognized %s message type: %T", types.ModuleName, msg) - } - } -} diff --git a/x/metadata/handler_test.go b/x/metadata/handler_test.go deleted file mode 100644 index 3c30ba5b07..0000000000 --- a/x/metadata/handler_test.go +++ /dev/null @@ -1,1320 +0,0 @@ -package metadata_test - -import ( - "encoding/base64" - "fmt" - "strings" - "testing" - - "github.com/google/uuid" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "github.com/stretchr/testify/suite" - - "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" - "github.com/cosmos/cosmos-sdk/crypto/keys/secp256r1" - cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/provenance-io/provenance/app" - "github.com/provenance-io/provenance/x/metadata" - "github.com/provenance-io/provenance/x/metadata/types" -) - -// TODO[1760]: metadata: Migrate the metadata handler tests to the keeper. - -type MetadataHandlerTestSuite struct { - suite.Suite - - app *app.App - ctx sdk.Context - handler func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) - - pubkey1 cryptotypes.PubKey - user1 string - user1Addr sdk.AccAddress - - pubkey2 cryptotypes.PubKey - user2 string - user2Addr sdk.AccAddress -} - -func (s *MetadataHandlerTestSuite) SetupTest() { - s.app = app.Setup(s.T()) - s.ctx = s.app.BaseApp.NewContext(false) - s.handler = metadata.NewHandler(s.app.MetadataKeeper) - - s.pubkey1 = secp256k1.GenPrivKey().PubKey() - s.user1Addr = sdk.AccAddress(s.pubkey1.Address()) - s.user1 = s.user1Addr.String() - user1Acc := s.app.AccountKeeper.NewAccountWithAddress(s.ctx, s.user1Addr) - s.Require().NoError(user1Acc.SetPubKey(s.pubkey1), "SetPubKey user1") - - privKey, _ := secp256r1.GenPrivKey() - s.pubkey2 = privKey.PubKey() - s.user2Addr = sdk.AccAddress(s.pubkey2.Address()) - s.user2 = s.user2Addr.String() - user2Acc := s.app.AccountKeeper.NewAccountWithAddress(s.ctx, s.user2Addr) - s.Require().NoError(user2Acc.SetPubKey(s.pubkey1), "SetPubKey user2") - - s.app.AccountKeeper.SetAccount(s.ctx, user1Acc) - s.app.AccountKeeper.SetAccount(s.ctx, user2Acc) -} - -func TestMetadataHandlerTestSuite(t *testing.T) { - suite.Run(t, new(MetadataHandlerTestSuite)) -} - -func ownerPartyList(addresses ...string) []types.Party { - retval := make([]types.Party, len(addresses)) - for i, addr := range addresses { - retval[i] = types.Party{Address: addr, Role: types.PartyType_PARTY_TYPE_OWNER} - } - return retval -} - -// AssertErrorValue asserts that: -// - If errorString is empty, theError must be nil -// - If errorString is not empty, theError must equal the errorString. -func AssertErrorValue(t *testing.T, theError error, errorString string, msgAndArgs ...interface{}) bool { - t.Helper() - if len(errorString) > 0 { - return assert.EqualError(t, theError, errorString, msgAndArgs...) - } - return assert.NoError(t, theError, msgAndArgs...) -} - -// AssertErrorValue asserts that: -// - If errorString is empty, theError must be nil -// - If errorString is not empty, theError must equal the errorString. -func (s *MetadataHandlerTestSuite) AssertErrorValue(theError error, errorString string, msgAndArgs ...interface{}) bool { - return AssertErrorValue(s.T(), theError, errorString, msgAndArgs...) -} - -// TODO: WriteScope tests -// TODO: DeleteScope tests - -func (s *MetadataHandlerTestSuite) TestAddAndDeleteScopeDataAccess() { - scopeSpecID := types.ScopeSpecMetadataAddress(uuid.New()) - scopeSpec := types.NewScopeSpecification(scopeSpecID, nil, []string{s.user1}, []types.PartyType{types.PartyType_PARTY_TYPE_OWNER}, []types.MetadataAddress{}) - scopeID := types.ScopeMetadataAddress(uuid.New()) - scope := types.NewScope(scopeID, scopeSpecID, ownerPartyList(s.user1), []string{s.user1}, "", false) - dneScopeID := types.ScopeMetadataAddress(uuid.New()) - user3 := sdk.AccAddress(secp256k1.GenPrivKey().PubKey().Address()).String() - - cases := []struct { - name string - msg sdk.Msg - signers []string - errorMsg string - }{ - { - "setup test with new scope specification", - types.NewMsgWriteScopeSpecificationRequest(*scopeSpec, []string{s.user1}), - []string{s.user1}, - "", - }, - { - "setup test with new scope", - types.NewMsgWriteScopeRequest(*scope, []string{s.user1}, 0), - []string{s.user1}, - "", - }, - { - "should fail to ADD address to data access, msg validate basic failure", - types.NewMsgAddScopeDataAccessRequest(scopeID, []string{}, []string{s.user1}), - []string{s.user1}, - "data access list cannot be empty: invalid request", - }, - { - "should fail to ADD address to data access, validate add failure", - types.NewMsgAddScopeDataAccessRequest(dneScopeID, []string{s.user1}, []string{s.user1}), - []string{s.user1}, - fmt.Sprintf("scope not found with id %s: not found", dneScopeID), - }, - { - "should fail to ADD address to data access, validate add failure", - types.NewMsgAddScopeDataAccessRequest(scopeID, []string{s.user1}, []string{s.user1}), - []string{s.user1}, - fmt.Sprintf("address already exists for data access %s: invalid request", s.user1), - }, - { - "should successfully ADD address to data access", - types.NewMsgAddScopeDataAccessRequest(scopeID, []string{s.user2}, []string{s.user1}), - []string{s.user1}, - "", - }, - { - "should fail to DELETE address from data access, msg validate basic failure", - types.NewMsgDeleteScopeDataAccessRequest(scopeID, []string{}, []string{s.user1}), - []string{s.user1}, - "data access list cannot be empty: invalid request", - }, - { - "should fail to DELETE address from data access, validate add failure", - types.NewMsgDeleteScopeDataAccessRequest(dneScopeID, []string{s.user1}, []string{s.user1}), - []string{s.user1}, - fmt.Sprintf("scope not found with id %s: not found", dneScopeID), - }, - { - "should fail to DELETE address from data access, validate add failure", - types.NewMsgDeleteScopeDataAccessRequest(scopeID, []string{user3}, []string{s.user1}), - []string{s.user1}, - fmt.Sprintf("address does not exist in scope data access: %s: invalid request", user3), - }, - { - "should successfully DELETE address from data access", - types.NewMsgDeleteScopeDataAccessRequest(scopeID, []string{s.user2}, []string{s.user1}), - []string{s.user1}, - "", - }, - } - - for _, tc := range cases { - s.T().Run(tc.name, func(t *testing.T) { - _, err := s.handler(s.ctx, tc.msg) - if len(tc.errorMsg) > 0 { - assert.EqualError(t, err, tc.errorMsg) - } else { - assert.NoError(t, err) - } - }) - } - - s.T().Run("data access actually deleted and added", func(t *testing.T) { - addrOriginator := "cosmos1rr4d0eu62pgt4edw38d2ev27798pfhdhm39zct" - addrServicer := "cosmos1a7mmtar5ke5fxk5gn00dlag0zfmdkmhapmugk7" - scopeA := types.Scope{ - ScopeId: types.ScopeMetadataAddress(uuid.New()), - SpecificationId: types.ScopeSpecMetadataAddress(uuid.New()), - DataAccess: []string{addrOriginator, addrServicer}, - ValueOwnerAddress: addrServicer, - Owners: []types.Party{ - { - Address: addrOriginator, - Role: types.PartyType_PARTY_TYPE_ORIGINATOR, - }, - }, - } - - scopeSpecA := types.ScopeSpecification{ - SpecificationId: scopeA.SpecificationId, - Description: &types.Description{ - Name: "com.figure.origination.loan", - Description: "Figure loan origination", - }, - OwnerAddresses: []string{"cosmos1q8n4v4m0hm8v0a7n697nwtpzhfsz3f4d40lnsu"}, - PartiesInvolved: []types.PartyType{types.PartyType_PARTY_TYPE_ORIGINATOR}, - ContractSpecIds: nil, - } - - s.app.MetadataKeeper.SetScope(s.ctx, scopeA) - s.app.MetadataKeeper.SetScopeSpecification(s.ctx, scopeSpecA) - - msgDel := types.NewMsgDeleteScopeDataAccessRequest( - scopeA.ScopeId, - []string{addrServicer}, - []string{addrOriginator}, - ) - - _, errDel := s.handler(s.ctx, msgDel) - require.NoError(t, errDel, "Failed to make DeleteScopeDataAccessRequest call") - - scopeB, foundB := s.app.MetadataKeeper.GetScope(s.ctx, scopeA.ScopeId) - require.Truef(t, foundB, "Scope %s not found after DeleteScopeOwnerRequest call.", scopeA.ScopeId) - - assert.Equal(t, scopeA.ScopeId, scopeB.ScopeId, "del ScopeId") - assert.Equal(t, scopeA.SpecificationId, scopeB.SpecificationId, "del SpecificationId") - assert.Equal(t, scopeA.DataAccess[0:1], scopeB.DataAccess, "del DataAccess") - assert.Equal(t, scopeA.ValueOwnerAddress, scopeB.ValueOwnerAddress, "del ValueOwnerAddress") - assert.Equal(t, scopeA.Owners, scopeB.Owners, "del Owners") - - // Stop test if it's already failed. - if t.Failed() { - t.FailNow() - } - - msgAdd := types.NewMsgAddScopeDataAccessRequest( - scopeA.ScopeId, - []string{addrServicer}, - []string{addrOriginator}, - ) - - _, errAdd := s.handler(s.ctx, msgAdd) - require.NoError(t, errAdd, "Failed to make AddScopeDataAccessRequest call") - - scopeC, foundC := s.app.MetadataKeeper.GetScope(s.ctx, scopeA.ScopeId) - require.Truef(t, foundC, "Scope %s not found after AddScopeOwnerRequest call.", scopeA.ScopeId) - - assert.Equal(t, scopeA.ScopeId, scopeC.ScopeId, "add ScopeId") - assert.Equal(t, scopeA.SpecificationId, scopeC.SpecificationId, "add SpecificationId") - assert.Equal(t, scopeA.DataAccess, scopeC.DataAccess, "add DataAccess") - assert.Equal(t, scopeA.ValueOwnerAddress, scopeC.ValueOwnerAddress, "add ValueOwnerAddress") - assert.Equal(t, scopeA.Owners, scopeC.Owners, "add Owners") - }) -} - -func (s *MetadataHandlerTestSuite) TestAddAndDeleteScopeOwners() { - scopeSpecID := types.ScopeSpecMetadataAddress(uuid.New()) - scopeSpec := types.NewScopeSpecification(scopeSpecID, nil, []string{s.user1}, []types.PartyType{types.PartyType_PARTY_TYPE_OWNER}, []types.MetadataAddress{}) - scopeID := types.ScopeMetadataAddress(uuid.New()) - scope := types.NewScope(scopeID, scopeSpecID, ownerPartyList(s.user1), []string{s.user1}, "", false) - dneScopeID := types.ScopeMetadataAddress(uuid.New()) - user3 := sdk.AccAddress(secp256k1.GenPrivKey().PubKey().Address()).String() - - cases := []struct { - name string - msg sdk.Msg - signers []string - errorMsg string - }{ - { - "setup test with new scope specification", - types.NewMsgWriteScopeSpecificationRequest(*scopeSpec, []string{s.user1}), - []string{s.user1}, - "", - }, - { - "setup test with new scope", - types.NewMsgWriteScopeRequest(*scope, []string{s.user1}, 0), - []string{s.user1}, - "", - }, - { - "should fail to ADD owners, msg validate basic failure", - types.NewMsgAddScopeOwnerRequest(scopeID, []types.Party{}, []string{s.user1}), - []string{s.user1}, - "invalid owners: at least one party is required: invalid request", - }, - { - "should fail to ADD owners, can not find scope", - types.NewMsgAddScopeOwnerRequest(dneScopeID, []types.Party{{Address: s.user1, Role: types.PartyType_PARTY_TYPE_OWNER}}, []string{s.user1}), - []string{s.user1}, - fmt.Sprintf("scope not found with id %s: not found", dneScopeID), - }, - { - "should fail to ADD owners, validate add failure", - types.NewMsgAddScopeOwnerRequest(scopeID, []types.Party{{Address: s.user1, Role: types.PartyType_PARTY_TYPE_OWNER}}, []string{s.user1}), - []string{s.user1}, - fmt.Sprintf("party already exists with address %s and role %s", s.user1, types.PartyType_PARTY_TYPE_OWNER), - }, - { - "should successfully ADD owners", - types.NewMsgAddScopeOwnerRequest(scopeID, []types.Party{{Address: s.user2, Role: types.PartyType_PARTY_TYPE_OWNER}}, []string{s.user1}), - []string{s.user1}, - "", - }, - { - "should fail to DELETE owners, msg validate basic failure", - types.NewMsgDeleteScopeOwnerRequest(scopeID, []string{}, []string{s.user1, s.user2}), - []string{s.user1}, - "at least one owner address is required: invalid request", - }, - { - "should fail to DELETE owners, validate add failure", - types.NewMsgDeleteScopeOwnerRequest(dneScopeID, []string{s.user1}, []string{s.user1, s.user2}), - []string{s.user1}, - fmt.Sprintf("scope not found with id %s: not found", dneScopeID), - }, - { - "should fail to DELETE owners, validate add failure", - types.NewMsgDeleteScopeOwnerRequest(scopeID, []string{user3}, []string{s.user1, s.user2}), - []string{s.user1}, - fmt.Sprintf("address does not exist in scope owners: %s", user3), - }, - { - "should successfully DELETE owners", - types.NewMsgDeleteScopeOwnerRequest(scopeID, []string{s.user2}, []string{s.user1, s.user2}), - []string{s.user1}, - "", - }, - } - - for _, tc := range cases { - s.T().Run(tc.name, func(t *testing.T) { - _, err := s.handler(s.ctx, tc.msg) - if len(tc.errorMsg) > 0 { - assert.EqualError(t, err, tc.errorMsg) - } else { - assert.NoError(t, err) - } - }) - } - - s.T().Run("owner actually deleted and added", func(t *testing.T) { - addrOriginator := "cosmos1rr4d0eu62pgt4edw38d2ev27798pfhdhm39zct" - addrServicer := "cosmos1a7mmtar5ke5fxk5gn00dlag0zfmdkmhapmugk7" - scopeA := types.Scope{ - ScopeId: types.ScopeMetadataAddress(uuid.New()), - SpecificationId: types.ScopeSpecMetadataAddress(uuid.New()), - DataAccess: []string{addrOriginator, addrServicer}, - ValueOwnerAddress: addrServicer, - Owners: []types.Party{ - { - Address: addrOriginator, - Role: types.PartyType_PARTY_TYPE_ORIGINATOR, - }, - { - Address: addrServicer, - Role: types.PartyType_PARTY_TYPE_SERVICER, - }, - }, - } - - scopeSpecA := types.ScopeSpecification{ - SpecificationId: scopeA.SpecificationId, - Description: &types.Description{ - Name: "com.figure.origination.loan", - Description: "Figure loan origination", - }, - OwnerAddresses: []string{"cosmos1q8n4v4m0hm8v0a7n697nwtpzhfsz3f4d40lnsu"}, - PartiesInvolved: []types.PartyType{types.PartyType_PARTY_TYPE_ORIGINATOR}, - ContractSpecIds: nil, - } - - s.app.MetadataKeeper.SetScope(s.ctx, scopeA) - s.app.MetadataKeeper.SetScopeSpecification(s.ctx, scopeSpecA) - - msgDel := types.NewMsgDeleteScopeOwnerRequest( - scopeA.ScopeId, - []string{addrServicer}, - []string{addrOriginator, addrServicer}, - ) - - _, errDel := s.handler(s.ctx, msgDel) - require.NoError(t, errDel, "Failed to make DeleteScopeOwnerRequest call") - - scopeB, foundB := s.app.MetadataKeeper.GetScope(s.ctx, scopeA.ScopeId) - require.Truef(t, foundB, "Scope %s not found after DeleteScopeOwnerRequest call.", scopeA.ScopeId) - - assert.Equal(t, scopeA.ScopeId, scopeB.ScopeId, "del ScopeId") - assert.Equal(t, scopeA.SpecificationId, scopeB.SpecificationId, "del SpecificationId") - assert.Equal(t, scopeA.DataAccess, scopeB.DataAccess, "del DataAccess") - assert.Equal(t, scopeA.ValueOwnerAddress, scopeB.ValueOwnerAddress, "del ValueOwnerAddress") - assert.Equal(t, scopeA.Owners[0:1], scopeB.Owners, "del Owners") - - // Stop test if it's already failed. - if t.Failed() { - t.FailNow() - } - - msgAdd := types.NewMsgAddScopeOwnerRequest( - scopeA.ScopeId, - []types.Party{{Address: addrServicer, Role: types.PartyType_PARTY_TYPE_SERVICER}}, - []string{addrOriginator}, - ) - - _, errAdd := s.handler(s.ctx, msgAdd) - require.NoError(t, errAdd, "Failed to make DeleteScopeOwnerRequest call") - - scopeC, foundC := s.app.MetadataKeeper.GetScope(s.ctx, scopeA.ScopeId) - require.Truef(t, foundC, "Scope %s not found after AddScopeOwnerRequest call.", scopeA.ScopeId) - - assert.Equal(t, scopeA.ScopeId, scopeC.ScopeId, "add ScopeId") - assert.Equal(t, scopeA.SpecificationId, scopeC.SpecificationId, "add SpecificationId") - assert.Equal(t, scopeA.DataAccess, scopeC.DataAccess, "add DataAccess") - assert.Equal(t, scopeA.ValueOwnerAddress, scopeC.ValueOwnerAddress, "add ValueOwnerAddress") - assert.Equal(t, scopeA.Owners, scopeC.Owners, "add Owners") - }) -} - -func (s *MetadataHandlerTestSuite) TestUpdateValueOwners() { - scopeID1 := types.ScopeMetadataAddress(uuid.New()) - scopeID2 := types.ScopeMetadataAddress(uuid.New()) - scopeIDNotFound := types.ScopeMetadataAddress(uuid.New()) - - scopeID3Diff1 := types.ScopeMetadataAddress(uuid.New()) - scopeID3Diff2 := types.ScopeMetadataAddress(uuid.New()) - scopeID3Diff3 := types.ScopeMetadataAddress(uuid.New()) - scopeID3Same1 := types.ScopeMetadataAddress(uuid.New()) - scopeID3Same2 := types.ScopeMetadataAddress(uuid.New()) - scopeID3Same3 := types.ScopeMetadataAddress(uuid.New()) - - owner1 := sdk.AccAddress("owner1______________").String() - owner2 := sdk.AccAddress("owner2______________").String() - owner3Diff1 := sdk.AccAddress("owner3Diff1_________").String() - owner3Diff2 := sdk.AccAddress("owner3Diff2_________").String() - owner3Diff3 := sdk.AccAddress("owner3Diff3_________").String() - owner3Same1 := sdk.AccAddress("owner3Same1_________").String() - owner3Same2 := sdk.AccAddress("owner3Same2_________").String() - owner3Same3 := sdk.AccAddress("owner3Same3_________").String() - - dataAccess1 := sdk.AccAddress("dataAccess1_________").String() - dataAccess2 := sdk.AccAddress("dataAccess2_________").String() - dataAccess3Diff1 := sdk.AccAddress("dataAccess3Diff1____").String() - dataAccess3Diff2 := sdk.AccAddress("dataAccess3Diff2____").String() - dataAccess3Diff3 := sdk.AccAddress("dataAccess3Diff3____").String() - dataAccess3Same1 := sdk.AccAddress("dataAccess3Same1____").String() - dataAccess3Same2 := sdk.AccAddress("dataAccess3Same2____").String() - dataAccess3Same3 := sdk.AccAddress("dataAccess3Same3____").String() - - valueOwner1 := sdk.AccAddress("valueOwner1_________").String() - valueOwner2 := sdk.AccAddress("valueOwner2_________").String() - valueOwner3Diff1 := sdk.AccAddress("valueOwner3Diff1____").String() - valueOwner3Diff2 := sdk.AccAddress("valueOwner3Diff2____").String() - valueOwner3Diff3 := sdk.AccAddress("valueOwner3Diff3____").String() - valueOwner3Same := sdk.AccAddress("valueOwner3Same_____").String() - - scopeSpecID := types.ScopeSpecMetadataAddress(uuid.New()) - ns := func(scopeID types.MetadataAddress, owner, dataAccess, valueOwner string) types.Scope { - return types.Scope{ - ScopeId: scopeID, - SpecificationId: scopeSpecID, - Owners: []types.Party{{Address: owner, Role: types.PartyType_PARTY_TYPE_OWNER}}, - DataAccess: []string{dataAccess}, - ValueOwnerAddress: valueOwner, - } - } - ids := func(scopeIDs ...types.MetadataAddress) []types.MetadataAddress { - return scopeIDs - } - - newValueOwner := sdk.AccAddress("newValueOwner_______").String() - - tests := []struct { - name string - starters []types.Scope - scopeIDs []types.MetadataAddress - signers []string - expErr string - }{ - { - name: "scope 1 of 3 not found", - starters: []types.Scope{ - ns(scopeID1, owner1, dataAccess1, valueOwner1), - ns(scopeID2, owner2, dataAccess2, valueOwner2), - }, - scopeIDs: ids(scopeIDNotFound, scopeID1, scopeID2), - signers: []string{valueOwner1, valueOwner2}, - expErr: "scope not found with id " + scopeIDNotFound.String() + ": not found", - }, - { - name: "scope 2 of 3 not found", - starters: []types.Scope{ - ns(scopeID1, owner1, dataAccess1, valueOwner1), - ns(scopeID2, owner2, dataAccess2, valueOwner2), - }, - scopeIDs: ids(scopeID1, scopeIDNotFound, scopeID2), - signers: []string{valueOwner1, valueOwner2}, - expErr: "scope not found with id " + scopeIDNotFound.String() + ": not found", - }, - { - name: "scope 3 of 3 not found", - starters: []types.Scope{ - ns(scopeID1, owner1, dataAccess1, valueOwner1), - ns(scopeID2, owner2, dataAccess2, valueOwner2), - }, - scopeIDs: ids(scopeID1, scopeID2, scopeIDNotFound), - signers: []string{valueOwner1, valueOwner2}, - expErr: "scope not found with id " + scopeIDNotFound.String() + ": not found", - }, - { - name: "not properly signed", - starters: []types.Scope{ - ns(scopeID1, owner1, dataAccess1, valueOwner1), - ns(scopeID2, owner2, dataAccess2, valueOwner2), - }, - scopeIDs: ids(scopeID1, scopeID2), - signers: []string{valueOwner1}, - expErr: "missing signature from existing value owner " + valueOwner2 + ": invalid request", - }, - { - name: "1 scope without value owner", - starters: []types.Scope{ - ns(scopeID1, owner1, dataAccess1, ""), - }, - scopeIDs: ids(scopeID1), - signers: []string{owner1}, - expErr: "scope " + scopeID1.String() + " does not yet have a value owner: invalid request", - }, - { - name: "1 scope updated", - starters: []types.Scope{ - ns(scopeID1, owner1, dataAccess1, valueOwner1), - }, - scopeIDs: ids(scopeID1), - signers: []string{valueOwner1}, - expErr: "", - }, - { - name: "3 scopes updated all different", - starters: []types.Scope{ - ns(scopeID3Diff1, owner3Diff1, dataAccess3Diff1, valueOwner3Diff1), - ns(scopeID3Diff2, owner3Diff2, dataAccess3Diff2, valueOwner3Diff2), - ns(scopeID3Diff3, owner3Diff3, dataAccess3Diff3, valueOwner3Diff3), - }, - scopeIDs: ids(scopeID3Diff1, scopeID3Diff2, scopeID3Diff3), - signers: []string{valueOwner3Diff1, valueOwner3Diff2, valueOwner3Diff3}, - expErr: "", - }, - { - name: "3 scopes updated all same", - starters: []types.Scope{ - ns(scopeID3Same1, owner3Same1, dataAccess3Same1, valueOwner3Same), - ns(scopeID3Same2, owner3Same2, dataAccess3Same2, valueOwner3Same), - ns(scopeID3Same3, owner3Same3, dataAccess3Same3, valueOwner3Same), - }, - scopeIDs: ids(scopeID3Same1, scopeID3Same2, scopeID3Same3), - signers: []string{valueOwner3Same}, - expErr: "", - }, - } - - for _, tc := range tests { - s.Run(tc.name, func() { - for _, scope := range tc.starters { - s.app.MetadataKeeper.SetScope(s.ctx, scope) - defer s.app.MetadataKeeper.RemoveScope(s.ctx, scope.ScopeId) - } - msg := types.MsgUpdateValueOwnersRequest{ - ScopeIds: tc.scopeIDs, - ValueOwnerAddress: newValueOwner, - Signers: tc.signers, - } - _, err := s.handler(s.ctx, &msg) - if len(tc.expErr) > 0 { - s.Assert().EqualError(err, tc.expErr, "handler(MsgUpdateValueOwnersRequest)") - } else { - s.Require().NoError(err, "handler(MsgUpdateValueOwnersRequest)") - - for i, scopeID := range tc.scopeIDs { - scope, found := s.app.MetadataKeeper.GetScope(s.ctx, scopeID) - if s.Assert().True(found, "[%d]GetScope(%s) found bool", i, scopeID) { - s.Assert().Equal(newValueOwner, scope.ValueOwnerAddress, "[%d] updated scope's value owner", i) - } - } - } - }) - } -} - -func (s *MetadataHandlerTestSuite) TestMigrateValueOwner() { - scopeSpecID := types.ScopeSpecMetadataAddress(uuid.New()) - storeScope := func(valueOwner string, scopeID types.MetadataAddress) { - scope := types.Scope{ - ScopeId: scopeID, - SpecificationId: scopeSpecID, - Owners: []types.Party{{Address: s.user1, Role: types.PartyType_PARTY_TYPE_OWNER}}, - ValueOwnerAddress: valueOwner, - } - s.app.MetadataKeeper.SetScope(s.ctx, scope) - } - addr := func(str string) string { - return sdk.AccAddress(str).String() - } - - addrW1 := addr("addrW1______________") - addrW3 := addr("addrW3______________") - - scopeID1 := types.ScopeMetadataAddress(uuid.New()) - scopeID31 := types.ScopeMetadataAddress(uuid.New()) - scopeID32 := types.ScopeMetadataAddress(uuid.New()) - scopeID33 := types.ScopeMetadataAddress(uuid.New()) - - storeScope(addrW1, scopeID1) - storeScope(addrW3, scopeID31) - storeScope(addrW3, scopeID32) - storeScope(addrW3, scopeID33) - - tests := []struct { - name string - msg *types.MsgMigrateValueOwnerRequest - expErr string - scopeIDs []types.MetadataAddress - }{ - { - name: "err from IterateScopesForValueOwner", - msg: &types.MsgMigrateValueOwnerRequest{ - Existing: "", - Proposed: "doesn't matter", - Signers: []string{"who cares"}, - }, - expErr: "cannot iterate over invalid value owner \"\": empty address string is not allowed: invalid request", - }, - { - name: "no scopes", - msg: &types.MsgMigrateValueOwnerRequest{ - Existing: addr("unknown_value_owner_"), - Proposed: addr("does_not_matter_____"), - Signers: []string{addr("signer______________")}, - }, - expErr: "no scopes found with value owner \"" + addr("unknown_value_owner_") + "\": not found", - }, - { - name: "err from ValidateUpdateValueOwners", - msg: &types.MsgMigrateValueOwnerRequest{ - Existing: addrW1, - Proposed: addr("not_for_public_use__"), - Signers: []string{addr("incorrect_signer____")}, - }, - expErr: "missing signature from existing value owner " + addrW1 + ": invalid request", - }, - { - name: "1 scope updated", - msg: &types.MsgMigrateValueOwnerRequest{ - Existing: addrW1, - Proposed: addr("proposed_value_owner"), - Signers: []string{addrW1}, - }, - scopeIDs: []types.MetadataAddress{scopeID1}, - }, - { - name: "3 scopes updated", - msg: &types.MsgMigrateValueOwnerRequest{ - Existing: addrW3, - Proposed: addr("a_longer_proposed_value_owner___"), - Signers: []string{addrW3}, - }, - scopeIDs: []types.MetadataAddress{scopeID31, scopeID32, scopeID33}, - }, - } - - for _, tc := range tests { - s.Run(tc.name, func() { - _, err := s.handler(s.ctx, tc.msg) - if len(tc.expErr) > 0 { - s.Assert().EqualError(err, tc.expErr, "Metadata hander(%T)", tc.msg) - } else { - if s.Assert().NoError(err, tc.expErr, "Metadata hander(%T)", tc.msg) { - for i, scopeID := range tc.scopeIDs { - scope, found := s.app.MetadataKeeper.GetScope(s.ctx, scopeID) - s.Assert().True(found, "[%d]: GetScope(%q) found boolean", i, scopeID.String()) - actual := scope.ValueOwnerAddress - s.Assert().Equal(tc.msg.Proposed, actual, "[%d] %q value owner after migrate", i, scopeID.String()) - } - } - } - }) - } -} - -func (s *MetadataHandlerTestSuite) TestWriteSession() { - cSpec := types.ContractSpecification{ - SpecificationId: types.ContractSpecMetadataAddress(uuid.New()), - Description: nil, - OwnerAddresses: []string{s.user1}, - PartiesInvolved: []types.PartyType{types.PartyType_PARTY_TYPE_OWNER}, - Source: types.NewContractSpecificationSourceHash("somesource"), - ClassName: "someclass", - } - s.app.MetadataKeeper.SetContractSpecification(s.ctx, cSpec) - sSpec := types.ScopeSpecification{ - SpecificationId: types.ScopeSpecMetadataAddress(uuid.New()), - Description: nil, - OwnerAddresses: []string{s.user1}, - PartiesInvolved: []types.PartyType{types.PartyType_PARTY_TYPE_OWNER}, - ContractSpecIds: []types.MetadataAddress{cSpec.SpecificationId}, - } - s.app.MetadataKeeper.SetScopeSpecification(s.ctx, sSpec) - - scopeUUID := uuid.New() - scope := types.Scope{ - ScopeId: types.ScopeMetadataAddress(scopeUUID), - SpecificationId: sSpec.SpecificationId, - Owners: []types.Party{{ - Address: s.user1, - Role: types.PartyType_PARTY_TYPE_OWNER, - }}, - DataAccess: nil, - ValueOwnerAddress: "", - } - s.app.MetadataKeeper.SetScope(s.ctx, scope) - - someBytes, err := base64.StdEncoding.DecodeString("ChFIRUxMTyBQUk9WRU5BTkNFIQ==") - require.NoError(s.T(), err, "trying to create someBytes") - - cases := []struct { - name string - session types.Session - signers []string - errorMsg string - }{ - { - "valid without context", - types.Session{ - SessionId: types.SessionMetadataAddress(scopeUUID, uuid.New()), - SpecificationId: cSpec.SpecificationId, - Parties: scope.Owners, - Name: "someclass", - Context: nil, - Audit: nil, - }, - []string{s.user1}, - "", - }, - { - "valid with context", - types.Session{ - SessionId: types.SessionMetadataAddress(scopeUUID, uuid.New()), - SpecificationId: cSpec.SpecificationId, - Parties: scope.Owners, - Name: "someclass", - Context: someBytes, - Audit: nil, - }, - []string{s.user1}, - "", - }, - } - - for _, tc := range cases { - s.T().Run(tc.name, func(t *testing.T) { - msg := types.MsgWriteSessionRequest{ - Session: tc.session, - Signers: tc.signers, - SessionIdComponents: nil, - SpecUuid: "", - } - _, err := s.handler(s.ctx, &msg) - if len(tc.errorMsg) > 0 { - assert.EqualError(t, err, tc.errorMsg) - } else { - assert.NoError(t, err) - } - }) - } -} - -func (s *MetadataHandlerTestSuite) TestWriteDeleteRecord() { - cSpecUUID := uuid.New() - cSpec := types.ContractSpecification{ - SpecificationId: types.ContractSpecMetadataAddress(cSpecUUID), - Description: nil, - OwnerAddresses: []string{s.user1}, - PartiesInvolved: []types.PartyType{types.PartyType_PARTY_TYPE_OWNER}, - Source: types.NewContractSpecificationSourceHash("somesource1"), - ClassName: "someclass1", - } - s.app.MetadataKeeper.SetContractSpecification(s.ctx, cSpec) - defer func() { - s.Assert().NoError(s.app.MetadataKeeper.RemoveContractSpecification(s.ctx, cSpec.SpecificationId), "removing contract spec") - }() - - sSpecUUID := uuid.New() - sSpec := types.ScopeSpecification{ - SpecificationId: types.ScopeSpecMetadataAddress(sSpecUUID), - Description: nil, - OwnerAddresses: []string{s.user1}, - PartiesInvolved: []types.PartyType{types.PartyType_PARTY_TYPE_OWNER}, - ContractSpecIds: []types.MetadataAddress{cSpec.SpecificationId}, - } - s.app.MetadataKeeper.SetScopeSpecification(s.ctx, sSpec) - defer func() { - s.Assert().NoError(s.app.MetadataKeeper.RemoveScopeSpecification(s.ctx, sSpec.SpecificationId), "removing scope spec") - }() - - rSpec := types.RecordSpecification{ - SpecificationId: types.RecordSpecMetadataAddress(cSpecUUID, "record"), - Name: "record", - Inputs: []*types.InputSpecification{ - { - Name: "ri1", - TypeName: "string", - Source: types.NewInputSpecificationSourceHash("ri1hash"), - }, - }, - TypeName: "string", - ResultType: types.DefinitionType_DEFINITION_TYPE_RECORD_LIST, - ResponsibleParties: []types.PartyType{types.PartyType_PARTY_TYPE_OWNER}, - } - s.app.MetadataKeeper.SetRecordSpecification(s.ctx, rSpec) - defer func() { - s.Assert().NoError(s.app.MetadataKeeper.RemoveRecordSpecification(s.ctx, rSpec.SpecificationId), "removing record spec 1") - }() - - scopeUUID := uuid.New() - scope := types.Scope{ - ScopeId: types.ScopeMetadataAddress(scopeUUID), - SpecificationId: sSpec.SpecificationId, - Owners: []types.Party{{ - Address: s.user1, - Role: types.PartyType_PARTY_TYPE_OWNER, - }}, - DataAccess: nil, - ValueOwnerAddress: "", - } - s.app.MetadataKeeper.SetScope(s.ctx, scope) - defer s.app.MetadataKeeper.RemoveScope(s.ctx, scope.ScopeId) - - session1UUID := uuid.New() - session1 := types.Session{ - SessionId: types.SessionMetadataAddress(scopeUUID, session1UUID), - SpecificationId: cSpec.SpecificationId, - Parties: ownerPartyList(s.user1), - Name: "someclass1", - } - s.app.MetadataKeeper.SetSession(s.ctx, session1) - defer s.app.MetadataKeeper.RemoveSession(s.ctx, session1.SessionId) - - session2UUID := uuid.New() - session2 := types.Session{ - SessionId: types.SessionMetadataAddress(scopeUUID, session2UUID), - SpecificationId: cSpec.SpecificationId, - Parties: ownerPartyList(s.user1), - Name: "someclass1", - } - s.app.MetadataKeeper.SetSession(s.ctx, session2) - defer s.app.MetadataKeeper.RemoveSession(s.ctx, session2.SessionId) - - record := types.Record{ - Name: rSpec.Name, - SessionId: session1.SessionId, - Process: types.Process{ - ProcessId: &types.Process_Hash{Hash: "rprochash"}, - Name: "rproc", - Method: "rprocmethod", - }, - Inputs: []types.RecordInput{ - { - Name: rSpec.Inputs[0].Name, - Source: &types.RecordInput_Hash{Hash: "rhash"}, - TypeName: rSpec.Inputs[0].TypeName, - Status: types.RecordInputStatus_Proposed, - }, - }, - Outputs: []types.RecordOutput{ - { - Hash: "rout1", - Status: types.ResultStatus_RESULT_STATUS_PASS, - }, - { - Hash: "rout2", - Status: types.ResultStatus_RESULT_STATUS_PASS, - }, - }, - SpecificationId: rSpec.SpecificationId, - } - recordID := types.RecordMetadataAddress(scopeUUID, rSpec.Name) - // Not adding the record here because we're testing that stuff. - - s.T().Run("write invalid record", func(t *testing.T) { - // Make a record with an unknown spec id. Try to write it and expect an error. - badRecord := types.Record{ - Name: rSpec.Name, - SessionId: session1.SessionId, - Process: types.Process{ - ProcessId: &types.Process_Hash{Hash: "badrprochash"}, - Name: "badrproc", - Method: "badrprocmethod", - }, - Inputs: []types.RecordInput{ - { - Name: rSpec.Inputs[0].Name, - Source: &types.RecordInput_Hash{Hash: "badrhash"}, - TypeName: rSpec.Inputs[0].TypeName, - Status: types.RecordInputStatus_Proposed, - }, - }, - Outputs: []types.RecordOutput{ - { - Hash: "badrout1", - Status: types.ResultStatus_RESULT_STATUS_PASS, - }, - { - Hash: "badrout2", - Status: types.ResultStatus_RESULT_STATUS_PASS, - }, - }, - SpecificationId: types.RecordSpecMetadataAddress(uuid.New(), rSpec.Name), - } - msg := types.MsgWriteRecordRequest{ - Record: badRecord, - Signers: []string{s.user1}, - SessionIdComponents: nil, - ContractSpecUuid: "", - Parties: ownerPartyList(s.user1), - } - _, err := s.handler(s.ctx, &msg) - require.Error(t, err, "sending bad MsgWriteRecordRequest") - require.Contains(t, err.Error(), "proposed specification id") - require.Contains(t, err.Error(), "does not match expected") - }) - - s.T().Run("write record to session 1", func(t *testing.T) { - msg := types.MsgWriteRecordRequest{ - Record: record, - Signers: []string{s.user1}, - SessionIdComponents: nil, - ContractSpecUuid: "", - Parties: ownerPartyList(s.user1), - } - _, err := s.handler(s.ctx, &msg) - require.NoError(t, err, "sending MsgWriteRecordRequest") - r, rok := s.app.MetadataKeeper.GetRecord(s.ctx, recordID) - if assert.True(t, rok, "GetRecord bool") { - assert.Equal(t, record, r, "GetRecord record") - } - }) - - s.T().Run("Update record to other session", func(t *testing.T) { - record.SessionId = session2.SessionId - msg := types.MsgWriteRecordRequest{ - Record: record, - Signers: []string{s.user1}, - SessionIdComponents: nil, - ContractSpecUuid: "", - Parties: ownerPartyList(s.user1), - } - _, err := s.handler(s.ctx, &msg) - require.NoError(t, err, "sending MsgWriteRecordRequest") - r, rok := s.app.MetadataKeeper.GetRecord(s.ctx, recordID) - if assert.True(t, rok, "GetRecord bool") { - assert.Equal(t, record, r, "GetRecord record") - } - // Make sure the session was deleted since it's now empty. - _, sok := s.app.MetadataKeeper.GetSession(s.ctx, session1.SessionId) - assert.False(t, sok, "GetSession session 1 bool") - }) - - s.T().Run("delete the record", func(t *testing.T) { - msg := types.MsgDeleteRecordRequest{ - RecordId: recordID, - Signers: []string{s.user1}, - } - _, err := s.handler(s.ctx, &msg) - require.NoError(t, err, "sending MsgDeleteRecordRequest") - _, rok := s.app.MetadataKeeper.GetRecord(s.ctx, recordID) - assert.False(t, rok, "GetRecord bool") - // Make sure the session was deleted since it's now empty. - _, sok := s.app.MetadataKeeper.GetSession(s.ctx, session2.SessionId) - assert.False(t, sok, "GetSession session 2 bool") - }) -} - -// TODO: WriteScopeSpecification tests -// TODO: DeleteScopeSpecification tests -// TODO: WriteContractSpecification tests -// TODO: DeleteContractSpecification tests - -func (s *MetadataHandlerTestSuite) TestAddContractSpecToScopeSpec() { - cSpec := types.ContractSpecification{ - SpecificationId: types.ContractSpecMetadataAddress(uuid.New()), - Description: nil, - OwnerAddresses: []string{s.user1}, - PartiesInvolved: []types.PartyType{types.PartyType_PARTY_TYPE_OWNER}, - Source: types.NewContractSpecificationSourceHash("somesource"), - ClassName: "someclass", - } - s.app.MetadataKeeper.SetContractSpecification(s.ctx, cSpec) - sSpec := types.ScopeSpecification{ - SpecificationId: types.ScopeSpecMetadataAddress(uuid.New()), - Description: nil, - OwnerAddresses: []string{s.user1}, - PartiesInvolved: []types.PartyType{types.PartyType_PARTY_TYPE_OWNER}, - ContractSpecIds: []types.MetadataAddress{cSpec.SpecificationId}, - } - s.app.MetadataKeeper.SetScopeSpecification(s.ctx, sSpec) - - cSpec2 := types.ContractSpecification{ - SpecificationId: types.ContractSpecMetadataAddress(uuid.New()), - Description: nil, - OwnerAddresses: []string{s.user1}, - PartiesInvolved: []types.PartyType{types.PartyType_PARTY_TYPE_OWNER}, - Source: types.NewContractSpecificationSourceHash("somesource"), - ClassName: "someclass", - } - s.app.MetadataKeeper.SetContractSpecification(s.ctx, cSpec2) - - unknownContractSpecId := types.ContractSpecMetadataAddress(uuid.New()) - unknownScopeSpecId := types.ScopeSpecMetadataAddress(uuid.New()) - - cases := []struct { - name string - contractSpecId types.MetadataAddress - scopeSpecId types.MetadataAddress - signers []string - errorMsg string - }{ - { - "fail to add contract spec, cannot find contract spec", - unknownContractSpecId, - sSpec.SpecificationId, - []string{s.user1}, - fmt.Sprintf("contract specification not found with id %s: not found", unknownContractSpecId), - }, - { - "fail to add contract spec, cannot find scope spec", - cSpec2.SpecificationId, - unknownScopeSpecId, - []string{s.user1}, - fmt.Sprintf("scope specification not found with id %s: not found", unknownScopeSpecId), - }, - { - "fail to add contract spec, scope spec already has contract spec", - cSpec.SpecificationId, - sSpec.SpecificationId, - []string{s.user1}, - fmt.Sprintf("scope spec %s already contains contract spec %s: invalid request", sSpec.SpecificationId, cSpec.SpecificationId), - }, - { - "should successfully add contract spec to scope spec", - cSpec2.SpecificationId, - sSpec.SpecificationId, - []string{s.user1}, - "", - }, - } - - for _, tc := range cases { - s.T().Run(tc.name, func(t *testing.T) { - msg := types.MsgAddContractSpecToScopeSpecRequest{ - ContractSpecificationId: tc.contractSpecId, - ScopeSpecificationId: tc.scopeSpecId, - Signers: tc.signers, - } - _, err := s.handler(s.ctx, &msg) - if len(tc.errorMsg) > 0 { - assert.EqualError(t, err, tc.errorMsg) - } else { - assert.NoError(t, err) - } - }) - } -} - -func (s *MetadataHandlerTestSuite) TestDeleteContractSpecFromScopeSpec() { - cSpec := types.ContractSpecification{ - SpecificationId: types.ContractSpecMetadataAddress(uuid.New()), - Description: nil, - OwnerAddresses: []string{s.user1}, - PartiesInvolved: []types.PartyType{types.PartyType_PARTY_TYPE_OWNER}, - Source: types.NewContractSpecificationSourceHash("somesource"), - ClassName: "someclass", - } - s.app.MetadataKeeper.SetContractSpecification(s.ctx, cSpec) - cSpec2 := types.ContractSpecification{ - SpecificationId: types.ContractSpecMetadataAddress(uuid.New()), - Description: nil, - OwnerAddresses: []string{s.user1}, - PartiesInvolved: []types.PartyType{types.PartyType_PARTY_TYPE_OWNER}, - Source: types.NewContractSpecificationSourceHash("somesource"), - ClassName: "someclass", - } - s.app.MetadataKeeper.SetContractSpecification(s.ctx, cSpec2) - cSpecDNE := types.ContractSpecMetadataAddress(uuid.New()) // Does Not Exist. - sSpec := types.ScopeSpecification{ - SpecificationId: types.ScopeSpecMetadataAddress(uuid.New()), - Description: nil, - OwnerAddresses: []string{s.user1}, - PartiesInvolved: []types.PartyType{types.PartyType_PARTY_TYPE_OWNER}, - ContractSpecIds: []types.MetadataAddress{cSpec.SpecificationId, cSpec2.SpecificationId, cSpecDNE}, - } - s.app.MetadataKeeper.SetScopeSpecification(s.ctx, sSpec) - - unknownScopeSpecId := types.ScopeSpecMetadataAddress(uuid.New()) - - cases := []struct { - name string - contractSpecId types.MetadataAddress - scopeSpecId types.MetadataAddress - signers []string - errorMsg string - }{ - { - "cannot find contract spec", - cSpecDNE, - sSpec.SpecificationId, - []string{s.user1}, - "", - }, - { - "fail to delete contract spec from scope spec, cannot find scope spec", - cSpec2.SpecificationId, - unknownScopeSpecId, - []string{s.user1}, - fmt.Sprintf("scope specification not found with id %s: not found", unknownScopeSpecId), - }, - { - "should succeed to add contract spec to scope spec", - cSpec2.SpecificationId, - sSpec.SpecificationId, - []string{s.user1}, - "", - }, - { - "fail to delete contract spec from scope spec, scope spec does not contain contract spec", - cSpec2.SpecificationId, - sSpec.SpecificationId, - []string{s.user1}, - fmt.Sprintf("contract specification %s not found in scope specification %s: not found", cSpec2.SpecificationId, sSpec.SpecificationId), - }, - } - - for _, tc := range cases { - s.T().Run(tc.name, func(t *testing.T) { - msg := types.MsgDeleteContractSpecFromScopeSpecRequest{ - ContractSpecificationId: tc.contractSpecId, - ScopeSpecificationId: tc.scopeSpecId, - Signers: tc.signers, - } - _, err := s.handler(s.ctx, &msg) - if len(tc.errorMsg) > 0 { - assert.EqualError(t, err, tc.errorMsg) - } else { - assert.NoError(t, err) - } - }) - } -} - -// TODO: WriteRecordSpecification tests -// TODO: DeleteRecordSpecification tests - -// TODO: BindOSLocator tests -// TODO: DeleteOSLocator tests -// TODO: ModifyOSLocator tests - -func (s *MetadataHandlerTestSuite) TestSetAccountData() { - scopeSpec := types.ScopeSpecification{ - SpecificationId: types.ScopeSpecMetadataAddress(uuid.New()), - OwnerAddresses: []string{s.user1}, - PartiesInvolved: []types.PartyType{types.PartyType_PARTY_TYPE_OWNER}, - } - s.app.MetadataKeeper.SetScopeSpecification(s.ctx, scopeSpec) - - scope := types.Scope{ - ScopeId: types.ScopeMetadataAddress(uuid.New()), - SpecificationId: scopeSpec.SpecificationId, - Owners: []types.Party{{Address: s.user1, Role: types.PartyType_PARTY_TYPE_OWNER}}, - } - s.app.MetadataKeeper.SetScope(s.ctx, scope) - - tests := []struct { - name string - msg *types.MsgSetAccountDataRequest - exp *types.MsgSetAccountDataResponse - expErr string - }{ - { - name: "incorrect signer", - msg: &types.MsgSetAccountDataRequest{ - MetadataAddr: scope.ScopeId, - Value: "This won't work.", - Signers: []string{s.user2}, - }, - expErr: "missing signature: " + s.user1 + ": invalid request", - }, - { - name: "value too long", - msg: &types.MsgSetAccountDataRequest{ - MetadataAddr: scope.ScopeId, - Value: strings.Repeat("This won't work. ", 1000), - Signers: []string{s.user1}, - }, - expErr: "could not set accountdata for \"" + scope.ScopeId.String() + "\": attribute value length of 17000 exceeds max length 10000: invalid request", - }, - { - name: "all good", - msg: &types.MsgSetAccountDataRequest{ - MetadataAddr: scope.ScopeId, - Value: "This value is a good value for this scope.", - Signers: []string{s.user1}, - }, - exp: &types.MsgSetAccountDataResponse{}, - }, - } - - for _, tc := range tests { - s.Run(tc.name, func() { - var err error - var result *sdk.Result - testFunc := func() { - result, err = s.handler(s.ctx, tc.msg) - } - s.Require().NotPanics(testFunc, "%T hander", tc.msg) - s.AssertErrorValue(err, tc.expErr, "%T handler error", tc.msg) - if tc.exp == nil { - s.Assert().Nil(result, "%T handler result", tc.msg) - } else { - if s.Assert().Len(result.MsgResponses, 1, "%T handler result MsgResponses", tc.msg) { - resp, isResp := result.MsgResponses[0].GetCachedValue().(*types.MsgSetAccountDataResponse) - s.Require().True(isResp, "casting %T handler result.MsgResponses[0].GetCachedValue() to %T", tc.msg, resp) - s.Assert().Equal(tc.exp, resp, "%T handler msg response", tc.msg) - } - } - }) - } -} - -func (s *MetadataHandlerTestSuite) TestIssue412WriteScopeOptionalField() { - ownerAddress := "cosmos1vz99nyd2er8myeugsr4xm5duwhulhp5ae4dvpa" - specIDStr := "scopespec1qjkyp28sldx5r9ueaxqc5adrc5wszy6nsh" - specUUIDStr := "ac40a8f0-fb4d-4197-99e9-818a75a3c51d" - specID, specIDErr := types.MetadataAddressFromBech32(specIDStr) - require.NoError(s.T(), specIDErr, "converting scopeIDStr to a metadata address") - - s.T().Run("Ensure ID and UUID strings match", func(t *testing.T) { - specIDFromID, e1 := types.MetadataAddressFromBech32(specIDStr) - require.NoError(t, e1, "specIDFromIDStr") - specUUIDFromID, e2 := specIDFromID.ScopeSpecUUID() - require.NoError(t, e2, "specUUIDActualStr") - specUUIDStrActual := specUUIDFromID.String() - assert.Equal(t, specUUIDStr, specUUIDStrActual, "UUID strings") - - specIDFFromUUID := types.ScopeSpecMetadataAddress(uuid.MustParse(specUUIDStr)) - specIDStrActual := specIDFFromUUID.String() - assert.Equal(t, specIDStr, specIDStrActual, "ID strings") - - assert.Equal(t, specIDFromID, specIDFFromUUID, "scope spec ids") - }) - - s.T().Run("Setting scope spec with just a spec ID", func(t *testing.T) { - msg := types.MsgWriteScopeSpecificationRequest{ - Specification: types.ScopeSpecification{ - SpecificationId: specID, - Description: &types.Description{ - Name: "io.prov.contracts.examplekotlin.helloWorld", - Description: "A generic scope that allows for a lot of example hello world contracts.", - }, - OwnerAddresses: []string{ownerAddress}, - PartiesInvolved: []types.PartyType{types.PartyType_PARTY_TYPE_OWNER}, - ContractSpecIds: nil, - }, - Signers: []string{ownerAddress}, - SpecUuid: "", - } - res, err := s.handler(s.ctx, &msg) - assert.NoError(t, err) - assert.NotNil(t, 0, res) - }) - - s.T().Run("Setting scope spec with just a UUID", func(t *testing.T) { - msg := types.MsgWriteScopeSpecificationRequest{ - Specification: types.ScopeSpecification{ - SpecificationId: nil, - Description: &types.Description{ - Name: "io.prov.contracts.examplekotlin.helloWorld", - Description: "A generic scope that allows for a lot of example hello world contracts.", - }, - OwnerAddresses: []string{ownerAddress}, - PartiesInvolved: []types.PartyType{types.PartyType_PARTY_TYPE_OWNER}, - ContractSpecIds: nil, - }, - Signers: []string{ownerAddress}, - SpecUuid: specUUIDStr, - } - res, err := s.handler(s.ctx, &msg) - assert.NoError(t, err) - assert.NotNil(t, 0, res) - }) - - s.T().Run("Setting scope spec with matching ID and UUID", func(t *testing.T) { - msg := types.MsgWriteScopeSpecificationRequest{ - Specification: types.ScopeSpecification{ - SpecificationId: specID, - Description: &types.Description{ - Name: "io.prov.contracts.examplekotlin.helloWorld", - Description: "A generic scope that allows for a lot of example hello world contracts.", - }, - OwnerAddresses: []string{ownerAddress}, - PartiesInvolved: []types.PartyType{types.PartyType_PARTY_TYPE_OWNER}, - ContractSpecIds: nil, - }, - Signers: []string{ownerAddress}, - SpecUuid: specUUIDStr, - } - res, err := s.handler(s.ctx, &msg) - assert.NoError(t, err) - assert.NotNil(t, 0, res) - }) -} diff --git a/x/metadata/keeper/msg_server_test.go b/x/metadata/keeper/msg_server_test.go index 0ff5e1e94f..56a5571448 100644 --- a/x/metadata/keeper/msg_server_test.go +++ b/x/metadata/keeper/msg_server_test.go @@ -1,59 +1,1303 @@ package keeper_test import ( + "encoding/base64" "fmt" + "strings" "testing" - "time" + + "github.com/google/uuid" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/stretchr/testify/suite" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" + "github.com/cosmos/cosmos-sdk/crypto/keys/secp256r1" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - "github.com/google/uuid" - - "github.com/stretchr/testify/suite" - simapp "github.com/provenance-io/provenance/app" + "github.com/provenance-io/provenance/app" "github.com/provenance-io/provenance/x/metadata/keeper" - metadatakeeper "github.com/provenance-io/provenance/x/metadata/keeper" "github.com/provenance-io/provenance/x/metadata/types" ) type MsgServerTestSuite struct { suite.Suite - app *simapp.App - ctx sdk.Context - msgServer types.MsgServer - blockStartTime time.Time + app *app.App + ctx sdk.Context + msgServer types.MsgServer - privkey1 cryptotypes.PrivKey - pubkey1 cryptotypes.PubKey - owner1 string - owner1Addr sdk.AccAddress - acct1 authtypes.AccountI + pubkey1 cryptotypes.PubKey + user1 string + user1Addr sdk.AccAddress - addresses []sdk.AccAddress + pubkey2 cryptotypes.PubKey + user2 string + user2Addr sdk.AccAddress } func (s *MsgServerTestSuite) SetupTest() { - - s.blockStartTime = time.Now() - s.app = simapp.Setup(s.T()) + s.app = app.Setup(s.T()) s.ctx = keeper.AddAuthzCacheToContext(s.app.BaseApp.NewContext(false)) - s.msgServer = metadatakeeper.NewMsgServerImpl(s.app.MetadataKeeper) - - s.privkey1 = secp256k1.GenPrivKey() - s.pubkey1 = s.privkey1.PubKey() - s.owner1Addr = sdk.AccAddress(s.pubkey1.Address()) - s.owner1 = s.owner1Addr.String() - acc := s.app.AccountKeeper.NewAccountWithAddress(s.ctx, s.owner1Addr) - s.app.AccountKeeper.SetAccount(s.ctx, acc) + s.msgServer = keeper.NewMsgServerImpl(s.app.MetadataKeeper) + + s.pubkey1 = secp256k1.GenPrivKey().PubKey() + s.user1Addr = sdk.AccAddress(s.pubkey1.Address()) + s.user1 = s.user1Addr.String() + user1Acc := s.app.AccountKeeper.NewAccountWithAddress(s.ctx, s.user1Addr) + s.Require().NoError(user1Acc.SetPubKey(s.pubkey1), "SetPubKey user1") + + privKey, _ := secp256r1.GenPrivKey() + s.pubkey2 = privKey.PubKey() + s.user2Addr = sdk.AccAddress(s.pubkey2.Address()) + s.user2 = s.user2Addr.String() + user2Acc := s.app.AccountKeeper.NewAccountWithAddress(s.ctx, s.user2Addr) + s.Require().NoError(user2Acc.SetPubKey(s.pubkey1), "SetPubKey user2") + + s.app.AccountKeeper.SetAccount(s.ctx, user1Acc) + s.app.AccountKeeper.SetAccount(s.ctx, user2Acc) } + func TestMsgServerTestSuite(t *testing.T) { suite.Run(t, new(MsgServerTestSuite)) } +// AssertErrorValue asserts that: +// - If errorString is empty, theError must be nil +// - If errorString is not empty, theError must equal the errorString. +func (s *MsgServerTestSuite) AssertErrorValue(theError error, errorString string, msgAndArgs ...interface{}) bool { + return AssertErrorValue(s.T(), theError, errorString, msgAndArgs...) +} + +// TODO: WriteScope tests +// TODO: DeleteScope tests + +func (s *MsgServerTestSuite) TestAddAndDeleteScopeDataAccess() { + scopeSpecID := types.ScopeSpecMetadataAddress(uuid.New()) + scopeSpec := types.NewScopeSpecification(scopeSpecID, nil, []string{s.user1}, []types.PartyType{types.PartyType_PARTY_TYPE_OWNER}, []types.MetadataAddress{}) + scopeID := types.ScopeMetadataAddress(uuid.New()) + scope := types.NewScope(scopeID, scopeSpecID, ownerPartyList(s.user1), []string{s.user1}, "", false) + dneScopeID := types.ScopeMetadataAddress(uuid.New()) + user3 := sdk.AccAddress(secp256k1.GenPrivKey().PubKey().Address()).String() + + scopeSpecMsg := types.NewMsgWriteScopeSpecificationRequest(*scopeSpec, []string{s.user1}) + _, err := s.msgServer.WriteScopeSpecification(s.ctx, scopeSpecMsg) + s.Assert().NoError(err, "setup test with new scope specification") + + writeScopeMsg := types.NewMsgWriteScopeRequest(*scope, []string{s.user1}, 0) + _, err = s.msgServer.WriteScope(s.ctx, writeScopeMsg) + s.Assert().NoError(err, "setup test with new scope") + + cases := []struct { + name string + addMsg *types.MsgAddScopeDataAccessRequest + delMsg *types.MsgDeleteScopeDataAccessRequest + signers []string + errorMsg string + }{ + + { + name: "should fail to ADD address to data access, msg validate basic failure", + addMsg: types.NewMsgAddScopeDataAccessRequest(scopeID, []string{}, []string{s.user1}), + signers: []string{s.user1}, + errorMsg: "data access list cannot be empty: invalid request", + }, + { + name: "should fail to ADD address to data access, validate add failure", + addMsg: types.NewMsgAddScopeDataAccessRequest(dneScopeID, []string{s.user1}, []string{s.user1}), + signers: []string{s.user1}, + errorMsg: fmt.Sprintf("scope not found with id %s: not found", dneScopeID), + }, + { + name: "should fail to ADD address to data access, validate add failure", + addMsg: types.NewMsgAddScopeDataAccessRequest(scopeID, []string{s.user1}, []string{s.user1}), + signers: []string{s.user1}, + errorMsg: fmt.Sprintf("address already exists for data access %s: invalid request", s.user1), + }, + { + name: "should successfully ADD address to data access", + addMsg: types.NewMsgAddScopeDataAccessRequest(scopeID, []string{s.user2}, []string{s.user1}), + signers: []string{s.user1}, + }, + { + name: "should fail to DELETE address from data access, msg validate basic failure", + delMsg: types.NewMsgDeleteScopeDataAccessRequest(scopeID, []string{}, []string{s.user1}), + signers: []string{s.user1}, + errorMsg: "data access list cannot be empty: invalid request", + }, + { + name: "should fail to DELETE address from data access, validate add failure", + delMsg: types.NewMsgDeleteScopeDataAccessRequest(dneScopeID, []string{s.user1}, []string{s.user1}), + signers: []string{s.user1}, + errorMsg: fmt.Sprintf("scope not found with id %s: not found", dneScopeID), + }, + { + name: "should fail to DELETE address from data access, validate add failure", + delMsg: types.NewMsgDeleteScopeDataAccessRequest(scopeID, []string{user3}, []string{s.user1}), + signers: []string{s.user1}, + errorMsg: fmt.Sprintf("address does not exist in scope data access: %s: invalid request", user3), + }, + { + name: "should successfully DELETE address from data access", + delMsg: types.NewMsgDeleteScopeDataAccessRequest(scopeID, []string{s.user2}, []string{s.user1}), + signers: []string{s.user1}, + }, + } + + for _, tc := range cases { + s.T().Run(tc.name, func(t *testing.T) { + var err error + if tc.delMsg != nil { + _, err = s.msgServer.DeleteScopeDataAccess(s.ctx, tc.delMsg) + } + if tc.addMsg != nil { + _, err = s.msgServer.AddScopeDataAccess(s.ctx, tc.addMsg) + } + + if len(tc.errorMsg) > 0 { + assert.EqualError(t, err, tc.errorMsg) + } else { + assert.NoError(t, err) + } + }) + } + + s.T().Run("data access actually deleted and added", func(t *testing.T) { + addrOriginator := "cosmos1rr4d0eu62pgt4edw38d2ev27798pfhdhm39zct" + addrServicer := "cosmos1a7mmtar5ke5fxk5gn00dlag0zfmdkmhapmugk7" + scopeA := types.Scope{ + ScopeId: types.ScopeMetadataAddress(uuid.New()), + SpecificationId: types.ScopeSpecMetadataAddress(uuid.New()), + DataAccess: []string{addrOriginator, addrServicer}, + ValueOwnerAddress: addrServicer, + Owners: []types.Party{ + { + Address: addrOriginator, + Role: types.PartyType_PARTY_TYPE_ORIGINATOR, + }, + }, + } + + scopeSpecA := types.ScopeSpecification{ + SpecificationId: scopeA.SpecificationId, + Description: &types.Description{ + Name: "com.figure.origination.loan", + Description: "Figure loan origination", + }, + OwnerAddresses: []string{"cosmos1q8n4v4m0hm8v0a7n697nwtpzhfsz3f4d40lnsu"}, + PartiesInvolved: []types.PartyType{types.PartyType_PARTY_TYPE_ORIGINATOR}, + ContractSpecIds: nil, + } + + s.app.MetadataKeeper.SetScope(s.ctx, scopeA) + s.app.MetadataKeeper.SetScopeSpecification(s.ctx, scopeSpecA) + + msgDel := types.NewMsgDeleteScopeDataAccessRequest( + scopeA.ScopeId, + []string{addrServicer}, + []string{addrOriginator}, + ) + + _, errDel := s.msgServer.DeleteScopeDataAccess(s.ctx, msgDel) + require.NoError(t, errDel, "Failed to make DeleteScopeDataAccessRequest call") + + scopeB, foundB := s.app.MetadataKeeper.GetScope(s.ctx, scopeA.ScopeId) + require.Truef(t, foundB, "Scope %s not found after DeleteScopeOwnerRequest call.", scopeA.ScopeId) + + assert.Equal(t, scopeA.ScopeId, scopeB.ScopeId, "del ScopeId") + assert.Equal(t, scopeA.SpecificationId, scopeB.SpecificationId, "del SpecificationId") + assert.Equal(t, scopeA.DataAccess[0:1], scopeB.DataAccess, "del DataAccess") + assert.Equal(t, scopeA.ValueOwnerAddress, scopeB.ValueOwnerAddress, "del ValueOwnerAddress") + assert.Equal(t, scopeA.Owners, scopeB.Owners, "del Owners") + + // Stop test if it's already failed. + if t.Failed() { + t.FailNow() + } + + msgAdd := types.NewMsgAddScopeDataAccessRequest( + scopeA.ScopeId, + []string{addrServicer}, + []string{addrOriginator}, + ) + + _, errAdd := s.msgServer.AddScopeDataAccess(s.ctx, msgAdd) + require.NoError(t, errAdd, "Failed to make AddScopeDataAccessRequest call") + + scopeC, foundC := s.app.MetadataKeeper.GetScope(s.ctx, scopeA.ScopeId) + require.Truef(t, foundC, "Scope %s not found after AddScopeOwnerRequest call.", scopeA.ScopeId) + + assert.Equal(t, scopeA.ScopeId, scopeC.ScopeId, "add ScopeId") + assert.Equal(t, scopeA.SpecificationId, scopeC.SpecificationId, "add SpecificationId") + assert.Equal(t, scopeA.DataAccess, scopeC.DataAccess, "add DataAccess") + assert.Equal(t, scopeA.ValueOwnerAddress, scopeC.ValueOwnerAddress, "add ValueOwnerAddress") + assert.Equal(t, scopeA.Owners, scopeC.Owners, "add Owners") + }) +} + +func (s *MsgServerTestSuite) TestAddAndDeleteScopeOwners() { + scopeSpecID := types.ScopeSpecMetadataAddress(uuid.New()) + scopeSpec := types.NewScopeSpecification(scopeSpecID, nil, []string{s.user1}, []types.PartyType{types.PartyType_PARTY_TYPE_OWNER}, []types.MetadataAddress{}) + scopeID := types.ScopeMetadataAddress(uuid.New()) + scope := types.NewScope(scopeID, scopeSpecID, ownerPartyList(s.user1), []string{s.user1}, "", false) + dneScopeID := types.ScopeMetadataAddress(uuid.New()) + user3 := sdk.AccAddress(secp256k1.GenPrivKey().PubKey().Address()).String() + + scopeSpecMsg := types.NewMsgWriteScopeSpecificationRequest(*scopeSpec, []string{s.user1}) + _, err := s.msgServer.WriteScopeSpecification(s.ctx, scopeSpecMsg) + s.Assert().NoError(err, "setup test with new scope specification") + + writeScopeMsg := types.NewMsgWriteScopeRequest(*scope, []string{s.user1}, 0) + _, err = s.msgServer.WriteScope(s.ctx, writeScopeMsg) + s.Assert().NoError(err, "setup test with new scope") + + cases := []struct { + name string + addMsg *types.MsgAddScopeOwnerRequest + delMsg *types.MsgDeleteScopeOwnerRequest + signers []string + errorMsg string + }{ + { + name: "should fail to ADD owners, msg validate basic failure", + addMsg: types.NewMsgAddScopeOwnerRequest(scopeID, []types.Party{}, []string{s.user1}), + signers: []string{s.user1}, + errorMsg: "invalid owners: at least one party is required: invalid request", + }, + { + name: "should fail to ADD owners, can not find scope", + addMsg: types.NewMsgAddScopeOwnerRequest(dneScopeID, []types.Party{{Address: s.user1, Role: types.PartyType_PARTY_TYPE_OWNER}}, []string{s.user1}), + signers: []string{s.user1}, + errorMsg: fmt.Sprintf("scope not found with id %s: not found", dneScopeID), + }, + { + name: "should fail to ADD owners, validate add failure", + addMsg: types.NewMsgAddScopeOwnerRequest(scopeID, []types.Party{{Address: s.user1, Role: types.PartyType_PARTY_TYPE_OWNER}}, []string{s.user1}), + signers: []string{s.user1}, + errorMsg: fmt.Sprintf("party already exists with address %s and role %s", s.user1, types.PartyType_PARTY_TYPE_OWNER), + }, + { + name: "should successfully ADD owners", + addMsg: types.NewMsgAddScopeOwnerRequest(scopeID, []types.Party{{Address: s.user2, Role: types.PartyType_PARTY_TYPE_OWNER}}, []string{s.user1}), + signers: []string{s.user1}, + }, + { + name: "should fail to DELETE owners, msg validate basic failure", + delMsg: types.NewMsgDeleteScopeOwnerRequest(scopeID, []string{}, []string{s.user1, s.user2}), + signers: []string{s.user1}, + errorMsg: "at least one owner address is required: invalid request", + }, + { + name: "should fail to DELETE owners, validate add failure", + delMsg: types.NewMsgDeleteScopeOwnerRequest(dneScopeID, []string{s.user1}, []string{s.user1, s.user2}), + signers: []string{s.user1}, + errorMsg: fmt.Sprintf("scope not found with id %s: not found", dneScopeID), + }, + { + name: "should fail to DELETE owners, validate add failure", + delMsg: types.NewMsgDeleteScopeOwnerRequest(scopeID, []string{user3}, []string{s.user1, s.user2}), + signers: []string{s.user1}, + errorMsg: fmt.Sprintf("address does not exist in scope owners: %s", user3), + }, + { + name: "should successfully DELETE owners", + delMsg: types.NewMsgDeleteScopeOwnerRequest(scopeID, []string{s.user2}, []string{s.user1, s.user2}), + signers: []string{s.user1}, + }, + } + + for _, tc := range cases { + s.T().Run(tc.name, func(t *testing.T) { + var err error + if tc.delMsg != nil { + _, err = s.msgServer.DeleteScopeOwner(s.ctx, tc.delMsg) + } + if tc.addMsg != nil { + _, err = s.msgServer.AddScopeOwner(s.ctx, tc.addMsg) + } + if len(tc.errorMsg) > 0 { + assert.EqualError(t, err, tc.errorMsg) + } else { + assert.NoError(t, err) + } + }) + } + + s.T().Run("owner actually deleted and added", func(t *testing.T) { + addrOriginator := "cosmos1rr4d0eu62pgt4edw38d2ev27798pfhdhm39zct" + addrServicer := "cosmos1a7mmtar5ke5fxk5gn00dlag0zfmdkmhapmugk7" + scopeA := types.Scope{ + ScopeId: types.ScopeMetadataAddress(uuid.New()), + SpecificationId: types.ScopeSpecMetadataAddress(uuid.New()), + DataAccess: []string{addrOriginator, addrServicer}, + ValueOwnerAddress: addrServicer, + Owners: []types.Party{ + { + Address: addrOriginator, + Role: types.PartyType_PARTY_TYPE_ORIGINATOR, + }, + { + Address: addrServicer, + Role: types.PartyType_PARTY_TYPE_SERVICER, + }, + }, + } + + scopeSpecA := types.ScopeSpecification{ + SpecificationId: scopeA.SpecificationId, + Description: &types.Description{ + Name: "com.figure.origination.loan", + Description: "Figure loan origination", + }, + OwnerAddresses: []string{"cosmos1q8n4v4m0hm8v0a7n697nwtpzhfsz3f4d40lnsu"}, + PartiesInvolved: []types.PartyType{types.PartyType_PARTY_TYPE_ORIGINATOR}, + ContractSpecIds: nil, + } + + s.app.MetadataKeeper.SetScope(s.ctx, scopeA) + s.app.MetadataKeeper.SetScopeSpecification(s.ctx, scopeSpecA) + + msgDel := types.NewMsgDeleteScopeOwnerRequest( + scopeA.ScopeId, + []string{addrServicer}, + []string{addrOriginator, addrServicer}, + ) + + _, errDel := s.msgServer.DeleteScopeOwner(s.ctx, msgDel) + require.NoError(t, errDel, "Failed to make DeleteScopeOwnerRequest call") + + scopeB, foundB := s.app.MetadataKeeper.GetScope(s.ctx, scopeA.ScopeId) + require.Truef(t, foundB, "Scope %s not found after DeleteScopeOwnerRequest call.", scopeA.ScopeId) + + assert.Equal(t, scopeA.ScopeId, scopeB.ScopeId, "del ScopeId") + assert.Equal(t, scopeA.SpecificationId, scopeB.SpecificationId, "del SpecificationId") + assert.Equal(t, scopeA.DataAccess, scopeB.DataAccess, "del DataAccess") + assert.Equal(t, scopeA.ValueOwnerAddress, scopeB.ValueOwnerAddress, "del ValueOwnerAddress") + assert.Equal(t, scopeA.Owners[0:1], scopeB.Owners, "del Owners") + + // Stop test if it's already failed. + if t.Failed() { + t.FailNow() + } + + msgAdd := types.NewMsgAddScopeOwnerRequest( + scopeA.ScopeId, + []types.Party{{Address: addrServicer, Role: types.PartyType_PARTY_TYPE_SERVICER}}, + []string{addrOriginator}, + ) + + _, errAdd := s.msgServer.AddScopeOwner(s.ctx, msgAdd) + require.NoError(t, errAdd, "Failed to make DeleteScopeOwnerRequest call") + + scopeC, foundC := s.app.MetadataKeeper.GetScope(s.ctx, scopeA.ScopeId) + require.Truef(t, foundC, "Scope %s not found after AddScopeOwnerRequest call.", scopeA.ScopeId) + + assert.Equal(t, scopeA.ScopeId, scopeC.ScopeId, "add ScopeId") + assert.Equal(t, scopeA.SpecificationId, scopeC.SpecificationId, "add SpecificationId") + assert.Equal(t, scopeA.DataAccess, scopeC.DataAccess, "add DataAccess") + assert.Equal(t, scopeA.ValueOwnerAddress, scopeC.ValueOwnerAddress, "add ValueOwnerAddress") + assert.Equal(t, scopeA.Owners, scopeC.Owners, "add Owners") + }) +} + +func (s *MsgServerTestSuite) TestUpdateValueOwners() { + scopeID1 := types.ScopeMetadataAddress(uuid.New()) + scopeID2 := types.ScopeMetadataAddress(uuid.New()) + scopeIDNotFound := types.ScopeMetadataAddress(uuid.New()) + + scopeID3Diff1 := types.ScopeMetadataAddress(uuid.New()) + scopeID3Diff2 := types.ScopeMetadataAddress(uuid.New()) + scopeID3Diff3 := types.ScopeMetadataAddress(uuid.New()) + scopeID3Same1 := types.ScopeMetadataAddress(uuid.New()) + scopeID3Same2 := types.ScopeMetadataAddress(uuid.New()) + scopeID3Same3 := types.ScopeMetadataAddress(uuid.New()) + + owner1 := sdk.AccAddress("owner1______________").String() + owner2 := sdk.AccAddress("owner2______________").String() + owner3Diff1 := sdk.AccAddress("owner3Diff1_________").String() + owner3Diff2 := sdk.AccAddress("owner3Diff2_________").String() + owner3Diff3 := sdk.AccAddress("owner3Diff3_________").String() + owner3Same1 := sdk.AccAddress("owner3Same1_________").String() + owner3Same2 := sdk.AccAddress("owner3Same2_________").String() + owner3Same3 := sdk.AccAddress("owner3Same3_________").String() + + dataAccess1 := sdk.AccAddress("dataAccess1_________").String() + dataAccess2 := sdk.AccAddress("dataAccess2_________").String() + dataAccess3Diff1 := sdk.AccAddress("dataAccess3Diff1____").String() + dataAccess3Diff2 := sdk.AccAddress("dataAccess3Diff2____").String() + dataAccess3Diff3 := sdk.AccAddress("dataAccess3Diff3____").String() + dataAccess3Same1 := sdk.AccAddress("dataAccess3Same1____").String() + dataAccess3Same2 := sdk.AccAddress("dataAccess3Same2____").String() + dataAccess3Same3 := sdk.AccAddress("dataAccess3Same3____").String() + + valueOwner1 := sdk.AccAddress("valueOwner1_________").String() + valueOwner2 := sdk.AccAddress("valueOwner2_________").String() + valueOwner3Diff1 := sdk.AccAddress("valueOwner3Diff1____").String() + valueOwner3Diff2 := sdk.AccAddress("valueOwner3Diff2____").String() + valueOwner3Diff3 := sdk.AccAddress("valueOwner3Diff3____").String() + valueOwner3Same := sdk.AccAddress("valueOwner3Same_____").String() + + scopeSpecID := types.ScopeSpecMetadataAddress(uuid.New()) + ns := func(scopeID types.MetadataAddress, owner, dataAccess, valueOwner string) types.Scope { + return types.Scope{ + ScopeId: scopeID, + SpecificationId: scopeSpecID, + Owners: []types.Party{{Address: owner, Role: types.PartyType_PARTY_TYPE_OWNER}}, + DataAccess: []string{dataAccess}, + ValueOwnerAddress: valueOwner, + } + } + ids := func(scopeIDs ...types.MetadataAddress) []types.MetadataAddress { + return scopeIDs + } + + newValueOwner := sdk.AccAddress("newValueOwner_______").String() + + tests := []struct { + name string + starters []types.Scope + scopeIDs []types.MetadataAddress + signers []string + expErr string + }{ + { + name: "scope 1 of 3 not found", + starters: []types.Scope{ + ns(scopeID1, owner1, dataAccess1, valueOwner1), + ns(scopeID2, owner2, dataAccess2, valueOwner2), + }, + scopeIDs: ids(scopeIDNotFound, scopeID1, scopeID2), + signers: []string{valueOwner1, valueOwner2}, + expErr: "scope not found with id " + scopeIDNotFound.String() + ": not found", + }, + { + name: "scope 2 of 3 not found", + starters: []types.Scope{ + ns(scopeID1, owner1, dataAccess1, valueOwner1), + ns(scopeID2, owner2, dataAccess2, valueOwner2), + }, + scopeIDs: ids(scopeID1, scopeIDNotFound, scopeID2), + signers: []string{valueOwner1, valueOwner2}, + expErr: "scope not found with id " + scopeIDNotFound.String() + ": not found", + }, + { + name: "scope 3 of 3 not found", + starters: []types.Scope{ + ns(scopeID1, owner1, dataAccess1, valueOwner1), + ns(scopeID2, owner2, dataAccess2, valueOwner2), + }, + scopeIDs: ids(scopeID1, scopeID2, scopeIDNotFound), + signers: []string{valueOwner1, valueOwner2}, + expErr: "scope not found with id " + scopeIDNotFound.String() + ": not found", + }, + { + name: "not properly signed", + starters: []types.Scope{ + ns(scopeID1, owner1, dataAccess1, valueOwner1), + ns(scopeID2, owner2, dataAccess2, valueOwner2), + }, + scopeIDs: ids(scopeID1, scopeID2), + signers: []string{valueOwner1}, + expErr: "missing signature from existing value owner " + valueOwner2 + ": invalid request", + }, + { + name: "1 scope without value owner", + starters: []types.Scope{ + ns(scopeID1, owner1, dataAccess1, ""), + }, + scopeIDs: ids(scopeID1), + signers: []string{owner1}, + expErr: "scope " + scopeID1.String() + " does not yet have a value owner: invalid request", + }, + { + name: "1 scope updated", + starters: []types.Scope{ + ns(scopeID1, owner1, dataAccess1, valueOwner1), + }, + scopeIDs: ids(scopeID1), + signers: []string{valueOwner1}, + expErr: "", + }, + { + name: "3 scopes updated all different", + starters: []types.Scope{ + ns(scopeID3Diff1, owner3Diff1, dataAccess3Diff1, valueOwner3Diff1), + ns(scopeID3Diff2, owner3Diff2, dataAccess3Diff2, valueOwner3Diff2), + ns(scopeID3Diff3, owner3Diff3, dataAccess3Diff3, valueOwner3Diff3), + }, + scopeIDs: ids(scopeID3Diff1, scopeID3Diff2, scopeID3Diff3), + signers: []string{valueOwner3Diff1, valueOwner3Diff2, valueOwner3Diff3}, + expErr: "", + }, + { + name: "3 scopes updated all same", + starters: []types.Scope{ + ns(scopeID3Same1, owner3Same1, dataAccess3Same1, valueOwner3Same), + ns(scopeID3Same2, owner3Same2, dataAccess3Same2, valueOwner3Same), + ns(scopeID3Same3, owner3Same3, dataAccess3Same3, valueOwner3Same), + }, + scopeIDs: ids(scopeID3Same1, scopeID3Same2, scopeID3Same3), + signers: []string{valueOwner3Same}, + expErr: "", + }, + } + + for _, tc := range tests { + s.Run(tc.name, func() { + for _, scope := range tc.starters { + s.app.MetadataKeeper.SetScope(s.ctx, scope) + defer s.app.MetadataKeeper.RemoveScope(s.ctx, scope.ScopeId) + } + msg := types.MsgUpdateValueOwnersRequest{ + ScopeIds: tc.scopeIDs, + ValueOwnerAddress: newValueOwner, + Signers: tc.signers, + } + _, err := s.msgServer.UpdateValueOwners(s.ctx, &msg) + if len(tc.expErr) > 0 { + s.Assert().EqualError(err, tc.expErr, "handler(MsgUpdateValueOwnersRequest)") + } else { + s.Require().NoError(err, "handler(MsgUpdateValueOwnersRequest)") + + for i, scopeID := range tc.scopeIDs { + scope, found := s.app.MetadataKeeper.GetScope(s.ctx, scopeID) + if s.Assert().True(found, "[%d]GetScope(%s) found bool", i, scopeID) { + s.Assert().Equal(newValueOwner, scope.ValueOwnerAddress, "[%d] updated scope's value owner", i) + } + } + } + }) + } +} + +func (s *MsgServerTestSuite) TestMigrateValueOwner() { + scopeSpecID := types.ScopeSpecMetadataAddress(uuid.New()) + storeScope := func(valueOwner string, scopeID types.MetadataAddress) { + scope := types.Scope{ + ScopeId: scopeID, + SpecificationId: scopeSpecID, + Owners: []types.Party{{Address: s.user1, Role: types.PartyType_PARTY_TYPE_OWNER}}, + ValueOwnerAddress: valueOwner, + } + s.app.MetadataKeeper.SetScope(s.ctx, scope) + } + addr := func(str string) string { + return sdk.AccAddress(str).String() + } + + addrW1 := addr("addrW1______________") + addrW3 := addr("addrW3______________") + + scopeID1 := types.ScopeMetadataAddress(uuid.New()) + scopeID31 := types.ScopeMetadataAddress(uuid.New()) + scopeID32 := types.ScopeMetadataAddress(uuid.New()) + scopeID33 := types.ScopeMetadataAddress(uuid.New()) + + storeScope(addrW1, scopeID1) + storeScope(addrW3, scopeID31) + storeScope(addrW3, scopeID32) + storeScope(addrW3, scopeID33) + + tests := []struct { + name string + msg *types.MsgMigrateValueOwnerRequest + expErr string + scopeIDs []types.MetadataAddress + }{ + { + name: "err from IterateScopesForValueOwner", + msg: &types.MsgMigrateValueOwnerRequest{ + Existing: "", + Proposed: "doesn't matter", + Signers: []string{"who cares"}, + }, + expErr: "cannot iterate over invalid value owner \"\": empty address string is not allowed: invalid request", + }, + { + name: "no scopes", + msg: &types.MsgMigrateValueOwnerRequest{ + Existing: addr("unknown_value_owner_"), + Proposed: addr("does_not_matter_____"), + Signers: []string{addr("signer______________")}, + }, + expErr: "no scopes found with value owner \"" + addr("unknown_value_owner_") + "\": not found", + }, + { + name: "err from ValidateUpdateValueOwners", + msg: &types.MsgMigrateValueOwnerRequest{ + Existing: addrW1, + Proposed: addr("not_for_public_use__"), + Signers: []string{addr("incorrect_signer____")}, + }, + expErr: "missing signature from existing value owner " + addrW1 + ": invalid request", + }, + { + name: "1 scope updated", + msg: &types.MsgMigrateValueOwnerRequest{ + Existing: addrW1, + Proposed: addr("proposed_value_owner"), + Signers: []string{addrW1}, + }, + scopeIDs: []types.MetadataAddress{scopeID1}, + }, + { + name: "3 scopes updated", + msg: &types.MsgMigrateValueOwnerRequest{ + Existing: addrW3, + Proposed: addr("a_longer_proposed_value_owner___"), + Signers: []string{addrW3}, + }, + scopeIDs: []types.MetadataAddress{scopeID31, scopeID32, scopeID33}, + }, + } + + for _, tc := range tests { + s.Run(tc.name, func() { + _, err := s.msgServer.MigrateValueOwner(s.ctx, tc.msg) + if len(tc.expErr) > 0 { + s.Assert().EqualError(err, tc.expErr, "Metadata hander(%T)", tc.msg) + } else { + if s.Assert().NoError(err, tc.expErr, "Metadata hander(%T)", tc.msg) { + for i, scopeID := range tc.scopeIDs { + scope, found := s.app.MetadataKeeper.GetScope(s.ctx, scopeID) + s.Assert().True(found, "[%d]: GetScope(%q) found boolean", i, scopeID.String()) + actual := scope.ValueOwnerAddress + s.Assert().Equal(tc.msg.Proposed, actual, "[%d] %q value owner after migrate", i, scopeID.String()) + } + } + } + }) + } +} + +func (s *MsgServerTestSuite) TestWriteSession() { + cSpec := types.ContractSpecification{ + SpecificationId: types.ContractSpecMetadataAddress(uuid.New()), + Description: nil, + OwnerAddresses: []string{s.user1}, + PartiesInvolved: []types.PartyType{types.PartyType_PARTY_TYPE_OWNER}, + Source: types.NewContractSpecificationSourceHash("somesource"), + ClassName: "someclass", + } + s.app.MetadataKeeper.SetContractSpecification(s.ctx, cSpec) + sSpec := types.ScopeSpecification{ + SpecificationId: types.ScopeSpecMetadataAddress(uuid.New()), + Description: nil, + OwnerAddresses: []string{s.user1}, + PartiesInvolved: []types.PartyType{types.PartyType_PARTY_TYPE_OWNER}, + ContractSpecIds: []types.MetadataAddress{cSpec.SpecificationId}, + } + s.app.MetadataKeeper.SetScopeSpecification(s.ctx, sSpec) + + scopeUUID := uuid.New() + scope := types.Scope{ + ScopeId: types.ScopeMetadataAddress(scopeUUID), + SpecificationId: sSpec.SpecificationId, + Owners: []types.Party{{ + Address: s.user1, + Role: types.PartyType_PARTY_TYPE_OWNER, + }}, + DataAccess: nil, + ValueOwnerAddress: "", + } + s.app.MetadataKeeper.SetScope(s.ctx, scope) + + someBytes, err := base64.StdEncoding.DecodeString("ChFIRUxMTyBQUk9WRU5BTkNFIQ==") + require.NoError(s.T(), err, "trying to create someBytes") + + cases := []struct { + name string + session types.Session + signers []string + errorMsg string + }{ + { + "valid without context", + types.Session{ + SessionId: types.SessionMetadataAddress(scopeUUID, uuid.New()), + SpecificationId: cSpec.SpecificationId, + Parties: scope.Owners, + Name: "someclass", + Context: nil, + Audit: nil, + }, + []string{s.user1}, + "", + }, + { + "valid with context", + types.Session{ + SessionId: types.SessionMetadataAddress(scopeUUID, uuid.New()), + SpecificationId: cSpec.SpecificationId, + Parties: scope.Owners, + Name: "someclass", + Context: someBytes, + Audit: nil, + }, + []string{s.user1}, + "", + }, + } + + for _, tc := range cases { + s.T().Run(tc.name, func(t *testing.T) { + msg := types.MsgWriteSessionRequest{ + Session: tc.session, + Signers: tc.signers, + SessionIdComponents: nil, + SpecUuid: "", + } + _, err := s.msgServer.WriteSession(s.ctx, &msg) + if len(tc.errorMsg) > 0 { + assert.EqualError(t, err, tc.errorMsg) + } else { + assert.NoError(t, err) + } + }) + } +} + +func (s *MsgServerTestSuite) TestWriteDeleteRecord() { + cSpecUUID := uuid.New() + cSpec := types.ContractSpecification{ + SpecificationId: types.ContractSpecMetadataAddress(cSpecUUID), + Description: nil, + OwnerAddresses: []string{s.user1}, + PartiesInvolved: []types.PartyType{types.PartyType_PARTY_TYPE_OWNER}, + Source: types.NewContractSpecificationSourceHash("somesource1"), + ClassName: "someclass1", + } + s.app.MetadataKeeper.SetContractSpecification(s.ctx, cSpec) + defer func() { + s.Assert().NoError(s.app.MetadataKeeper.RemoveContractSpecification(s.ctx, cSpec.SpecificationId), "removing contract spec") + }() + + sSpecUUID := uuid.New() + sSpec := types.ScopeSpecification{ + SpecificationId: types.ScopeSpecMetadataAddress(sSpecUUID), + Description: nil, + OwnerAddresses: []string{s.user1}, + PartiesInvolved: []types.PartyType{types.PartyType_PARTY_TYPE_OWNER}, + ContractSpecIds: []types.MetadataAddress{cSpec.SpecificationId}, + } + s.app.MetadataKeeper.SetScopeSpecification(s.ctx, sSpec) + defer func() { + s.Assert().NoError(s.app.MetadataKeeper.RemoveScopeSpecification(s.ctx, sSpec.SpecificationId), "removing scope spec") + }() + + rSpec := types.RecordSpecification{ + SpecificationId: types.RecordSpecMetadataAddress(cSpecUUID, "record"), + Name: "record", + Inputs: []*types.InputSpecification{ + { + Name: "ri1", + TypeName: "string", + Source: types.NewInputSpecificationSourceHash("ri1hash"), + }, + }, + TypeName: "string", + ResultType: types.DefinitionType_DEFINITION_TYPE_RECORD_LIST, + ResponsibleParties: []types.PartyType{types.PartyType_PARTY_TYPE_OWNER}, + } + s.app.MetadataKeeper.SetRecordSpecification(s.ctx, rSpec) + defer func() { + s.Assert().NoError(s.app.MetadataKeeper.RemoveRecordSpecification(s.ctx, rSpec.SpecificationId), "removing record spec 1") + }() + + scopeUUID := uuid.New() + scope := types.Scope{ + ScopeId: types.ScopeMetadataAddress(scopeUUID), + SpecificationId: sSpec.SpecificationId, + Owners: []types.Party{{ + Address: s.user1, + Role: types.PartyType_PARTY_TYPE_OWNER, + }}, + DataAccess: nil, + ValueOwnerAddress: "", + } + s.app.MetadataKeeper.SetScope(s.ctx, scope) + defer s.app.MetadataKeeper.RemoveScope(s.ctx, scope.ScopeId) + + session1UUID := uuid.New() + session1 := types.Session{ + SessionId: types.SessionMetadataAddress(scopeUUID, session1UUID), + SpecificationId: cSpec.SpecificationId, + Parties: ownerPartyList(s.user1), + Name: "someclass1", + } + s.app.MetadataKeeper.SetSession(s.ctx, session1) + defer s.app.MetadataKeeper.RemoveSession(s.ctx, session1.SessionId) + + session2UUID := uuid.New() + session2 := types.Session{ + SessionId: types.SessionMetadataAddress(scopeUUID, session2UUID), + SpecificationId: cSpec.SpecificationId, + Parties: ownerPartyList(s.user1), + Name: "someclass1", + } + s.app.MetadataKeeper.SetSession(s.ctx, session2) + defer s.app.MetadataKeeper.RemoveSession(s.ctx, session2.SessionId) + + record := types.Record{ + Name: rSpec.Name, + SessionId: session1.SessionId, + Process: types.Process{ + ProcessId: &types.Process_Hash{Hash: "rprochash"}, + Name: "rproc", + Method: "rprocmethod", + }, + Inputs: []types.RecordInput{ + { + Name: rSpec.Inputs[0].Name, + Source: &types.RecordInput_Hash{Hash: "rhash"}, + TypeName: rSpec.Inputs[0].TypeName, + Status: types.RecordInputStatus_Proposed, + }, + }, + Outputs: []types.RecordOutput{ + { + Hash: "rout1", + Status: types.ResultStatus_RESULT_STATUS_PASS, + }, + { + Hash: "rout2", + Status: types.ResultStatus_RESULT_STATUS_PASS, + }, + }, + SpecificationId: rSpec.SpecificationId, + } + recordID := types.RecordMetadataAddress(scopeUUID, rSpec.Name) + // Not adding the record here because we're testing that stuff. + + s.T().Run("write invalid record", func(t *testing.T) { + // Make a record with an unknown spec id. Try to write it and expect an error. + badRecord := types.Record{ + Name: rSpec.Name, + SessionId: session1.SessionId, + Process: types.Process{ + ProcessId: &types.Process_Hash{Hash: "badrprochash"}, + Name: "badrproc", + Method: "badrprocmethod", + }, + Inputs: []types.RecordInput{ + { + Name: rSpec.Inputs[0].Name, + Source: &types.RecordInput_Hash{Hash: "badrhash"}, + TypeName: rSpec.Inputs[0].TypeName, + Status: types.RecordInputStatus_Proposed, + }, + }, + Outputs: []types.RecordOutput{ + { + Hash: "badrout1", + Status: types.ResultStatus_RESULT_STATUS_PASS, + }, + { + Hash: "badrout2", + Status: types.ResultStatus_RESULT_STATUS_PASS, + }, + }, + SpecificationId: types.RecordSpecMetadataAddress(uuid.New(), rSpec.Name), + } + msg := types.MsgWriteRecordRequest{ + Record: badRecord, + Signers: []string{s.user1}, + SessionIdComponents: nil, + ContractSpecUuid: "", + Parties: ownerPartyList(s.user1), + } + _, err := s.msgServer.WriteRecord(s.ctx, &msg) + require.Error(t, err, "sending bad MsgWriteRecordRequest") + require.Contains(t, err.Error(), "proposed specification id") + require.Contains(t, err.Error(), "does not match expected") + }) + + s.T().Run("write record to session 1", func(t *testing.T) { + msg := types.MsgWriteRecordRequest{ + Record: record, + Signers: []string{s.user1}, + SessionIdComponents: nil, + ContractSpecUuid: "", + Parties: ownerPartyList(s.user1), + } + _, err := s.msgServer.WriteRecord(s.ctx, &msg) + require.NoError(t, err, "sending MsgWriteRecordRequest") + r, rok := s.app.MetadataKeeper.GetRecord(s.ctx, recordID) + if assert.True(t, rok, "GetRecord bool") { + assert.Equal(t, record, r, "GetRecord record") + } + }) + + s.T().Run("Update record to other session", func(t *testing.T) { + record.SessionId = session2.SessionId + msg := types.MsgWriteRecordRequest{ + Record: record, + Signers: []string{s.user1}, + SessionIdComponents: nil, + ContractSpecUuid: "", + Parties: ownerPartyList(s.user1), + } + _, err := s.msgServer.WriteRecord(s.ctx, &msg) + require.NoError(t, err, "sending MsgWriteRecordRequest") + r, rok := s.app.MetadataKeeper.GetRecord(s.ctx, recordID) + if assert.True(t, rok, "GetRecord bool") { + assert.Equal(t, record, r, "GetRecord record") + } + // Make sure the session was deleted since it's now empty. + _, sok := s.app.MetadataKeeper.GetSession(s.ctx, session1.SessionId) + assert.False(t, sok, "GetSession session 1 bool") + }) + + s.T().Run("delete the record", func(t *testing.T) { + msg := types.MsgDeleteRecordRequest{ + RecordId: recordID, + Signers: []string{s.user1}, + } + _, err := s.msgServer.DeleteRecord(s.ctx, &msg) + require.NoError(t, err, "sending MsgDeleteRecordRequest") + _, rok := s.app.MetadataKeeper.GetRecord(s.ctx, recordID) + assert.False(t, rok, "GetRecord bool") + // Make sure the session was deleted since it's now empty. + _, sok := s.app.MetadataKeeper.GetSession(s.ctx, session2.SessionId) + assert.False(t, sok, "GetSession session 2 bool") + }) +} + +// TODO: WriteScopeSpecification tests +// TODO: DeleteScopeSpecification tests +// TODO: WriteContractSpecification tests +// TODO: DeleteContractSpecification tests + +func (s *MsgServerTestSuite) TestAddContractSpecToScopeSpec() { + cSpec := types.ContractSpecification{ + SpecificationId: types.ContractSpecMetadataAddress(uuid.New()), + Description: nil, + OwnerAddresses: []string{s.user1}, + PartiesInvolved: []types.PartyType{types.PartyType_PARTY_TYPE_OWNER}, + Source: types.NewContractSpecificationSourceHash("somesource"), + ClassName: "someclass", + } + s.app.MetadataKeeper.SetContractSpecification(s.ctx, cSpec) + sSpec := types.ScopeSpecification{ + SpecificationId: types.ScopeSpecMetadataAddress(uuid.New()), + Description: nil, + OwnerAddresses: []string{s.user1}, + PartiesInvolved: []types.PartyType{types.PartyType_PARTY_TYPE_OWNER}, + ContractSpecIds: []types.MetadataAddress{cSpec.SpecificationId}, + } + s.app.MetadataKeeper.SetScopeSpecification(s.ctx, sSpec) + + cSpec2 := types.ContractSpecification{ + SpecificationId: types.ContractSpecMetadataAddress(uuid.New()), + Description: nil, + OwnerAddresses: []string{s.user1}, + PartiesInvolved: []types.PartyType{types.PartyType_PARTY_TYPE_OWNER}, + Source: types.NewContractSpecificationSourceHash("somesource"), + ClassName: "someclass", + } + s.app.MetadataKeeper.SetContractSpecification(s.ctx, cSpec2) + + unknownContractSpecId := types.ContractSpecMetadataAddress(uuid.New()) + unknownScopeSpecId := types.ScopeSpecMetadataAddress(uuid.New()) + + cases := []struct { + name string + contractSpecId types.MetadataAddress + scopeSpecId types.MetadataAddress + signers []string + errorMsg string + }{ + { + "fail to add contract spec, cannot find contract spec", + unknownContractSpecId, + sSpec.SpecificationId, + []string{s.user1}, + fmt.Sprintf("contract specification not found with id %s: not found", unknownContractSpecId), + }, + { + "fail to add contract spec, cannot find scope spec", + cSpec2.SpecificationId, + unknownScopeSpecId, + []string{s.user1}, + fmt.Sprintf("scope specification not found with id %s: not found", unknownScopeSpecId), + }, + { + "fail to add contract spec, scope spec already has contract spec", + cSpec.SpecificationId, + sSpec.SpecificationId, + []string{s.user1}, + fmt.Sprintf("scope spec %s already contains contract spec %s: invalid request", sSpec.SpecificationId, cSpec.SpecificationId), + }, + { + "should successfully add contract spec to scope spec", + cSpec2.SpecificationId, + sSpec.SpecificationId, + []string{s.user1}, + "", + }, + } + + for _, tc := range cases { + s.T().Run(tc.name, func(t *testing.T) { + msg := types.MsgAddContractSpecToScopeSpecRequest{ + ContractSpecificationId: tc.contractSpecId, + ScopeSpecificationId: tc.scopeSpecId, + Signers: tc.signers, + } + _, err := s.msgServer.AddContractSpecToScopeSpec(s.ctx, &msg) + if len(tc.errorMsg) > 0 { + assert.EqualError(t, err, tc.errorMsg) + } else { + assert.NoError(t, err) + } + }) + } +} + +func (s *MsgServerTestSuite) TestDeleteContractSpecFromScopeSpec() { + cSpec := types.ContractSpecification{ + SpecificationId: types.ContractSpecMetadataAddress(uuid.New()), + Description: nil, + OwnerAddresses: []string{s.user1}, + PartiesInvolved: []types.PartyType{types.PartyType_PARTY_TYPE_OWNER}, + Source: types.NewContractSpecificationSourceHash("somesource"), + ClassName: "someclass", + } + s.app.MetadataKeeper.SetContractSpecification(s.ctx, cSpec) + cSpec2 := types.ContractSpecification{ + SpecificationId: types.ContractSpecMetadataAddress(uuid.New()), + Description: nil, + OwnerAddresses: []string{s.user1}, + PartiesInvolved: []types.PartyType{types.PartyType_PARTY_TYPE_OWNER}, + Source: types.NewContractSpecificationSourceHash("somesource"), + ClassName: "someclass", + } + s.app.MetadataKeeper.SetContractSpecification(s.ctx, cSpec2) + cSpecDNE := types.ContractSpecMetadataAddress(uuid.New()) // Does Not Exist. + sSpec := types.ScopeSpecification{ + SpecificationId: types.ScopeSpecMetadataAddress(uuid.New()), + Description: nil, + OwnerAddresses: []string{s.user1}, + PartiesInvolved: []types.PartyType{types.PartyType_PARTY_TYPE_OWNER}, + ContractSpecIds: []types.MetadataAddress{cSpec.SpecificationId, cSpec2.SpecificationId, cSpecDNE}, + } + s.app.MetadataKeeper.SetScopeSpecification(s.ctx, sSpec) + + unknownScopeSpecId := types.ScopeSpecMetadataAddress(uuid.New()) + + cases := []struct { + name string + contractSpecId types.MetadataAddress + scopeSpecId types.MetadataAddress + signers []string + errorMsg string + }{ + { + "cannot find contract spec", + cSpecDNE, + sSpec.SpecificationId, + []string{s.user1}, + "", + }, + { + "fail to delete contract spec from scope spec, cannot find scope spec", + cSpec2.SpecificationId, + unknownScopeSpecId, + []string{s.user1}, + fmt.Sprintf("scope specification not found with id %s: not found", unknownScopeSpecId), + }, + { + "should succeed to add contract spec to scope spec", + cSpec2.SpecificationId, + sSpec.SpecificationId, + []string{s.user1}, + "", + }, + { + "fail to delete contract spec from scope spec, scope spec does not contain contract spec", + cSpec2.SpecificationId, + sSpec.SpecificationId, + []string{s.user1}, + fmt.Sprintf("contract specification %s not found in scope specification %s: not found", cSpec2.SpecificationId, sSpec.SpecificationId), + }, + } + + for _, tc := range cases { + s.T().Run(tc.name, func(t *testing.T) { + msg := types.MsgDeleteContractSpecFromScopeSpecRequest{ + ContractSpecificationId: tc.contractSpecId, + ScopeSpecificationId: tc.scopeSpecId, + Signers: tc.signers, + } + _, err := s.msgServer.DeleteContractSpecFromScopeSpec(s.ctx, &msg) + if len(tc.errorMsg) > 0 { + assert.EqualError(t, err, tc.errorMsg) + } else { + assert.NoError(t, err) + } + }) + } +} + +// TODO: WriteRecordSpecification tests +// TODO: DeleteRecordSpecification tests + +// TODO: BindOSLocator tests +// TODO: DeleteOSLocator tests +// TODO: ModifyOSLocator tests + +func (s *MsgServerTestSuite) TestSetAccountData() { + scopeSpec := types.ScopeSpecification{ + SpecificationId: types.ScopeSpecMetadataAddress(uuid.New()), + OwnerAddresses: []string{s.user1}, + PartiesInvolved: []types.PartyType{types.PartyType_PARTY_TYPE_OWNER}, + } + s.app.MetadataKeeper.SetScopeSpecification(s.ctx, scopeSpec) + + scope := types.Scope{ + ScopeId: types.ScopeMetadataAddress(uuid.New()), + SpecificationId: scopeSpec.SpecificationId, + Owners: []types.Party{{Address: s.user1, Role: types.PartyType_PARTY_TYPE_OWNER}}, + } + s.app.MetadataKeeper.SetScope(s.ctx, scope) + + tests := []struct { + name string + msg *types.MsgSetAccountDataRequest + exp *types.MsgSetAccountDataResponse + expErr string + }{ + { + name: "incorrect signer", + msg: &types.MsgSetAccountDataRequest{ + MetadataAddr: scope.ScopeId, + Value: "This won't work.", + Signers: []string{s.user2}, + }, + expErr: "missing signature: " + s.user1 + ": invalid request", + }, + { + name: "value too long", + msg: &types.MsgSetAccountDataRequest{ + MetadataAddr: scope.ScopeId, + Value: strings.Repeat("This won't work. ", 1000), + Signers: []string{s.user1}, + }, + expErr: "could not set accountdata for \"" + scope.ScopeId.String() + "\": attribute value length of 17000 exceeds max length 10000: invalid request", + }, + { + name: "all good", + msg: &types.MsgSetAccountDataRequest{ + MetadataAddr: scope.ScopeId, + Value: "This value is a good value for this scope.", + Signers: []string{s.user1}, + }, + exp: &types.MsgSetAccountDataResponse{}, + }, + } + + for _, tc := range tests { + s.Run(tc.name, func() { + var err error + var result *types.MsgSetAccountDataResponse + testFunc := func() { + result, err = s.msgServer.SetAccountData(s.ctx, tc.msg) + } + s.Require().NotPanics(testFunc, "%T hander", tc.msg) + s.AssertErrorValue(err, tc.expErr, "%T handler error", tc.msg) + if tc.exp == nil { + s.Assert().Nil(result, "%T handler result", tc.msg) + } else { + s.Assert().Equal(tc.exp, result, "%T handler msg response", tc.msg) + } + }) + } +} + +func (s *MsgServerTestSuite) TestIssue412WriteScopeOptionalField() { + ownerAddress := "cosmos1vz99nyd2er8myeugsr4xm5duwhulhp5ae4dvpa" + specIDStr := "scopespec1qjkyp28sldx5r9ueaxqc5adrc5wszy6nsh" + specUUIDStr := "ac40a8f0-fb4d-4197-99e9-818a75a3c51d" + specID, specIDErr := types.MetadataAddressFromBech32(specIDStr) + require.NoError(s.T(), specIDErr, "converting scopeIDStr to a metadata address") + + s.T().Run("Ensure ID and UUID strings match", func(t *testing.T) { + specIDFromID, e1 := types.MetadataAddressFromBech32(specIDStr) + require.NoError(t, e1, "specIDFromIDStr") + specUUIDFromID, e2 := specIDFromID.ScopeSpecUUID() + require.NoError(t, e2, "specUUIDActualStr") + specUUIDStrActual := specUUIDFromID.String() + assert.Equal(t, specUUIDStr, specUUIDStrActual, "UUID strings") + + specIDFFromUUID := types.ScopeSpecMetadataAddress(uuid.MustParse(specUUIDStr)) + specIDStrActual := specIDFFromUUID.String() + assert.Equal(t, specIDStr, specIDStrActual, "ID strings") + + assert.Equal(t, specIDFromID, specIDFFromUUID, "scope spec ids") + }) + + s.T().Run("Setting scope spec with just a spec ID", func(t *testing.T) { + msg := types.MsgWriteScopeSpecificationRequest{ + Specification: types.ScopeSpecification{ + SpecificationId: specID, + Description: &types.Description{ + Name: "io.prov.contracts.examplekotlin.helloWorld", + Description: "A generic scope that allows for a lot of example hello world contracts.", + }, + OwnerAddresses: []string{ownerAddress}, + PartiesInvolved: []types.PartyType{types.PartyType_PARTY_TYPE_OWNER}, + ContractSpecIds: nil, + }, + Signers: []string{ownerAddress}, + SpecUuid: "", + } + res, err := s.msgServer.WriteScopeSpecification(s.ctx, &msg) + assert.NoError(t, err) + assert.NotNil(t, 0, res) + }) + + s.T().Run("Setting scope spec with just a UUID", func(t *testing.T) { + msg := types.MsgWriteScopeSpecificationRequest{ + Specification: types.ScopeSpecification{ + SpecificationId: nil, + Description: &types.Description{ + Name: "io.prov.contracts.examplekotlin.helloWorld", + Description: "A generic scope that allows for a lot of example hello world contracts.", + }, + OwnerAddresses: []string{ownerAddress}, + PartiesInvolved: []types.PartyType{types.PartyType_PARTY_TYPE_OWNER}, + ContractSpecIds: nil, + }, + Signers: []string{ownerAddress}, + SpecUuid: specUUIDStr, + } + res, err := s.msgServer.WriteScopeSpecification(s.ctx, &msg) + assert.NoError(t, err) + assert.NotNil(t, 0, res) + }) + + s.T().Run("Setting scope spec with matching ID and UUID", func(t *testing.T) { + msg := types.MsgWriteScopeSpecificationRequest{ + Specification: types.ScopeSpecification{ + SpecificationId: specID, + Description: &types.Description{ + Name: "io.prov.contracts.examplekotlin.helloWorld", + Description: "A generic scope that allows for a lot of example hello world contracts.", + }, + OwnerAddresses: []string{ownerAddress}, + PartiesInvolved: []types.PartyType{types.PartyType_PARTY_TYPE_OWNER}, + ContractSpecIds: nil, + }, + Signers: []string{ownerAddress}, + SpecUuid: specUUIDStr, + } + res, err := s.msgServer.WriteScopeSpecification(s.ctx, &msg) + assert.NoError(t, err) + assert.NotNil(t, 0, res) + }) +} + func (s *MsgServerTestSuite) TestAddNetAssetValue() { scopeSpecUUIDNF := uuid.New() scopeSpecIDNF := types.ScopeSpecMetadataAddress(scopeSpecUUIDNF) diff --git a/x/metadata/keeper/querier.go b/x/metadata/keeper/querier.go deleted file mode 100644 index f6da41b5a8..0000000000 --- a/x/metadata/keeper/querier.go +++ /dev/null @@ -1,255 +0,0 @@ -package keeper - -import ( - "strings" - - "github.com/google/uuid" - - abci "github.com/cometbft/cometbft/abci/types" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/codec" - sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - - "github.com/provenance-io/provenance/x/metadata/types" -) - -// TODO[1760]: metadata: Delete the metadata Querier. - -// NewQuerier creates a querier for auth REST endpoints -func NewQuerier(k Keeper, legacyQuerierCdc *codec.LegacyAmino) func(ctx sdk.Context, path []string, req abci.RequestQuery) ([]byte, error) { - return func(ctx sdk.Context, path []string, req abci.RequestQuery) ([]byte, error) { - switch path[0] { - case types.QueryScope: - return queryScope(ctx, path, req, k, legacyQuerierCdc) - case types.QueryOwnership: - return queryAddressScopes(ctx, path, req, k, legacyQuerierCdc) - case types.QueryParams: - return queryParams(ctx, k, legacyQuerierCdc) - case types.QueryScopeSpec: - return queryScopeSpecification(ctx, path, k, legacyQuerierCdc) - // TODO: add contract spec stuff - // TODO: add record spec stuff - case types.QueryOSParams: - return queryOSLocatorParams(ctx, k, legacyQuerierCdc) - case types.QueryOSGet: - return queryOSGet(ctx, path, k, legacyQuerierCdc) - case types.QueryOSGetByURI: - return queryOSGetByURI(ctx, path, k, legacyQuerierCdc) - case types.QueryOSGetByScope: - return queryOSGetByScope(ctx, path, k, legacyQuerierCdc) - case types.QueryOSGetAll: - return queryOSGetAll(ctx, k, legacyQuerierCdc) - default: - return nil, sdkerrors.ErrUnknownRequest.Wrap("unknown query endpoint") - } - } -} - -// Query for a scope by UUID. -func queryScope(ctx sdk.Context, path []string, _ abci.RequestQuery, k Keeper, legacyQuerierCdc *codec.LegacyAmino) ([]byte, error) { - scopeUUID, err := uuid.Parse(strings.TrimSpace(path[1])) - if err != nil { - ctx.Logger().Error(err.Error()) - return nil, sdkerrors.ErrInvalidRequest.Wrap(err.Error()) - } - scope, found := k.GetScope(ctx, types.ScopeMetadataAddress(scopeUUID)) - if !found { - return nil, sdkerrors.ErrKeyNotFound.Wrap("scope does not exist") - } - scopeBytes, err := k.cdc.Marshal(&scope) - if err != nil { - return nil, sdkerrors.ErrInvalidRequest.Wrap(err.Error()) - } - res, err := legacyQuerierCdc.MarshalJSON(types.QueryResScope{Scope: scopeBytes}) - if err != nil { - ctx.Logger().Error("unable to marshal scope to JSON", "err", err) - return nil, sdkerrors.ErrJSONMarshal.Wrap(err.Error()) - } - return res, nil -} - -// Query for a scopes associated with an address. -func queryAddressScopes(ctx sdk.Context, path []string, req abci.RequestQuery, k Keeper, legacyQuerierCdc *codec.LegacyAmino) ([]byte, error) { - params := types.QueryMetadataParams{Page: 0, Limit: 100} - address, err := sdk.AccAddressFromBech32(strings.TrimSpace(path[1])) - if err != nil || address.Empty() { - errm := "invalid address to query scopes for" - ctx.Logger().Error(errm) - return nil, sdkerrors.ErrInvalidRequest.Wrap(errm) - } - scopes := make([]string, 0) - err = k.IterateScopesForAddress(ctx, address, func(scopeID types.MetadataAddress) (stop bool) { - scopes = append(scopes, scopeID.String()) - return false - }) - // check for parameters used for paging. - if len(req.Data) > 0 { - err = legacyQuerierCdc.UnmarshalJSON(req.Data, ¶ms) - if err != nil { - return nil, sdkerrors.ErrJSONUnmarshal.Wrap(err.Error()) - } - } - - // TODO: consider a parameter configuration item for the limit here (1000) - - // BOOKMARK -- create a v1 to v0 migration function to re-assemble a scope from groups and records - - start, end := client.Paginate(len(scopes), params.Page, params.Limit, 1000) - if start < 0 || end < 0 { - scopes = []string{} - } else { - scopes = scopes[start:end] - } - if err != nil { - ctx.Logger().Error("unable to get scope IDs for address", "err", err) - return nil, sdkerrors.ErrInvalidRequest.Wrap(err.Error()) - } - res, err := legacyQuerierCdc.MarshalJSON(types.QueryResOwnership{Address: address, ScopeID: scopes}) - if err != nil { - ctx.Logger().Error("unable to marshal scope ids to JSON", "err", err) - return nil, sdkerrors.ErrJSONMarshal.Wrap(err.Error()) - } - return res, nil -} - -func queryParams(ctx sdk.Context, k Keeper, legacyQuerierCdc *codec.LegacyAmino) ([]byte, error) { - params := k.GetParams(ctx) - - res, err := codec.MarshalJSONIndent(legacyQuerierCdc, params) - if err != nil { - return nil, sdkerrors.ErrJSONMarshal.Wrap(err.Error()) - } - - return res, nil -} - -// query for a scope specification by specification id -func queryScopeSpecification(ctx sdk.Context, path []string, k Keeper, legacyQuerierCdc *codec.LegacyAmino) ([]byte, error) { - specificationUUID, err := uuid.Parse(strings.TrimSpace(path[1])) - if err != nil { - ctx.Logger().Error(err.Error()) - return nil, sdkerrors.ErrInvalidRequest.Wrap(err.Error()) - } - scopeSpec, found := k.GetScopeSpecification(ctx, types.ScopeMetadataAddress(specificationUUID)) - if !found { - return nil, sdkerrors.ErrKeyNotFound.Wrapf("scope specification uuid [%s] does not exist", specificationUUID) - } - res, err := legacyQuerierCdc.MarshalJSON(types.NewQueryResScopeSpec(scopeSpec)) - if err != nil { - ctx.Logger().Error("unable to marshal scope spec to JSON", "specificationUUID", specificationUUID, "err", err) - return nil, sdkerrors.ErrJSONMarshal.Wrap(err.Error()) - } - return res, nil -} - -func queryOSLocatorParams(ctx sdk.Context, keeper Keeper, legacyQuerierCdc *codec.LegacyAmino) ([]byte, error) { - params := keeper.GetOSLocatorParams(ctx) - - res, err := codec.MarshalJSONIndent(legacyQuerierCdc, params) - if err != nil { - return nil, sdkerrors.ErrJSONMarshal.Wrap(err.Error()) - } - - return res, nil -} - -func queryOSGet(ctx sdk.Context, path []string, keeper Keeper, legacyQuerierCdc *codec.LegacyAmino) ([]byte, error) { - accAddr, err := sdk.AccAddressFromBech32(path[1]) - if err != nil { - return nil, types.ErrInvalidAddress - } - msgs, _ := keeper.GetOsLocatorRecord(ctx, accAddr) - - bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, msgs) - if err != nil { - return nil, sdkerrors.ErrJSONMarshal.Wrap(err.Error()) - } - - return bz, nil -} - -func queryOSGetByURI(ctx sdk.Context, path []string, keeper Keeper, legacyQuerierCdc *codec.LegacyAmino) ([]byte, error) { - // intentionally leaving out pagination for now for this one, not really anything legacy rest for this :shrug: - var records []types.ObjectStoreLocator - - appendToRecords := func(record types.ObjectStoreLocator) bool { - if record.LocatorUri == path[1] { - records = append(records, record) - // have to get all the uri associated with an address..imo..check - } - return false - } - if err := keeper.IterateOSLocators(ctx, appendToRecords); err != nil { - return nil, err - } - uniqueRecords := uniqueRecords(records) - - bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, &uniqueRecords) - - if err != nil { - return nil, sdkerrors.ErrJSONMarshal.Wrap(err.Error()) - } - - return bz, nil -} - -func queryOSGetAll(ctx sdk.Context, keeper Keeper, legacyQuerierCdc *codec.LegacyAmino) ([]byte, error) { - // intentionally leaving out pagination for now for this one, not really anything legacy rest for this :shrug: - var records []types.ObjectStoreLocator - - appendToRecords := func(record types.ObjectStoreLocator) bool { - records = append(records, record) - // have to get all the uri associated with an address..imo..check - return false - } - if err := keeper.IterateOSLocators(ctx, appendToRecords); err != nil { - return nil, err - } - uniqueRecords := uniqueRecords(records) - - bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, &uniqueRecords) - - if err != nil { - return nil, sdkerrors.ErrJSONMarshal.Wrap(err.Error()) - } - - return bz, nil -} - -func queryOSGetByScope(ctx sdk.Context, path []string, keeper Keeper, legacyQuerierCdc *codec.LegacyAmino) ([]byte, error) { - locators, lErr := keeper.GetOSLocatorByScope(ctx, path[1]) - if lErr != nil { - return nil, sdkerrors.ErrJSONMarshal.Wrap(lErr.Error()) - } - - bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, locators) - if err != nil { - return nil, sdkerrors.ErrJSONMarshal.Wrap(err.Error()) - } - - return bz, nil -} - -func uniqueRecords(records []types.ObjectStoreLocator) []types.ObjectStoreLocator { - if len(records) == 0 { - return records - } - seen := make([]types.ObjectStoreLocator, 0, len(records)) - -slice: - for i, n := range records { - if i == 0 { - records = records[:0] - } - for _, t := range seen { - if n.Owner == t.Owner && n.LocatorUri == t.LocatorUri { - continue slice - } - } - seen = append(seen, n) - records = append(records, n) - } - return records -} diff --git a/x/msgfees/handler.go b/x/msgfees/handler.go index 42a3fc5422..30c008926a 100644 --- a/x/msgfees/handler.go +++ b/x/msgfees/handler.go @@ -10,6 +10,8 @@ import ( "github.com/provenance-io/provenance/x/msgfees/types" ) +// TODO[1760]: marker: Migrate the legacy gov proposals. + func NewProposalHandler(k keeper.Keeper, registry cdctypes.InterfaceRegistry) govtypesv1beta1.Handler { return func(ctx sdk.Context, content govtypesv1beta1.Content) error { switch c := content.(type) { diff --git a/x/msgfees/keeper/proposal_handler.go b/x/msgfees/keeper/proposal_handler.go index 3100a44869..2220fab3b8 100644 --- a/x/msgfees/keeper/proposal_handler.go +++ b/x/msgfees/keeper/proposal_handler.go @@ -10,6 +10,8 @@ import ( "github.com/provenance-io/provenance/x/msgfees/types" ) +// TODO[1760]: marker: Migrate the legacy gov proposals. + // HandleAddMsgFeeProposal handles an Add msg fees governance proposal request func HandleAddMsgFeeProposal(ctx sdk.Context, k Keeper, proposal *types.AddMsgFeeProposal, registry codectypes.InterfaceRegistry) error { if err := proposal.ValidateBasic(); err != nil { diff --git a/x/name/handler.go b/x/name/handler.go index c9d9febdb8..68b53d009a 100644 --- a/x/name/handler.go +++ b/x/name/handler.go @@ -9,30 +9,7 @@ import ( "github.com/provenance-io/provenance/x/name/types" ) -// Returns a handler for name messages. -// TODO[1760]: name: Delete the name NewHandler. -func NewHandler(k keeper.Keeper) func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { - msgServer := keeper.NewMsgServerImpl(k) - - return func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { - ctx = ctx.WithEventManager(sdk.NewEventManager()) - - switch msg := msg.(type) { - case *types.MsgBindNameRequest: - res, err := msgServer.BindName(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgDeleteNameRequest: - res, err := msgServer.DeleteName(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgModifyNameRequest: - res, err := msgServer.ModifyName(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) - default: - return nil, sdkerrors.ErrUnknownRequest.Wrapf("unrecognized %s message type: %T", types.ModuleName, msg) - } - } -} - +// TODO[1760]: marker: Migrate the legacy gov proposals. func NewProposalHandler(k keeper.Keeper) govtypesv1beta1.Handler { return func(ctx sdk.Context, content govtypesv1beta1.Content) error { switch c := content.(type) { diff --git a/x/name/handler_test.go b/x/name/handler_test.go deleted file mode 100644 index cb1ec5dbde..0000000000 --- a/x/name/handler_test.go +++ /dev/null @@ -1,270 +0,0 @@ -package name_test - -import ( - "fmt" - "strings" - "testing" - - "github.com/golang/protobuf/proto" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" - - cerrs "cosmossdk.io/errors" - - "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" - "github.com/cosmos/cosmos-sdk/crypto/keys/secp256r1" - "github.com/cosmos/cosmos-sdk/testutil/testdata" - sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - - simapp "github.com/provenance-io/provenance/app" - "github.com/provenance-io/provenance/x/name" - "github.com/provenance-io/provenance/x/name/keeper" - nametypes "github.com/provenance-io/provenance/x/name/types" -) - -// TODO[1760]: name: Migrate the name handler tests to the keeper. - -func TestInvalidMsg(t *testing.T) { - k := keeper.Keeper{} - h := name.NewHandler(k) - - res, err := h(sdk.NewContext(nil, cmtproto.Header{}, false, nil), testdata.NewTestMsg()) - require.Error(t, err) - require.Nil(t, res) - - _, _, log := cerrs.ABCIInfo(err, false) - require.True(t, strings.Contains(log, "unrecognized name message type")) -} - -func containsMessage(result *sdk.Result, msg proto.Message) bool { - events := result.GetEvents().ToABCIEvents() - for _, event := range events { - typeEvent, _ := sdk.ParseTypedEvent(event) - if assert.ObjectsAreEqual(msg, typeEvent) { - return true - } - } - return false -} - -// create name record -func TestCreateName(t *testing.T) { - priv1 := secp256k1.GenPrivKey() - addr1 := sdk.AccAddress(priv1.PubKey().Address()) - priv2, _ := secp256r1.GenPrivKey() - addr2 := sdk.AccAddress(priv2.PubKey().Address()) - - tests := []struct { - name string - expectedError error - msg *nametypes.MsgBindNameRequest - expectedEvent proto.Message - }{ - { - name: "create name record", - msg: nametypes.NewMsgBindNameRequest(nametypes.NewNameRecord("new", addr2, false), nametypes.NewNameRecord("example.name", addr1, false)), - expectedError: nil, - expectedEvent: nametypes.NewEventNameBound(addr2.String(), "new.example.name", false), - }, - { - name: "create bad name record", - msg: nametypes.NewMsgBindNameRequest(nametypes.NewNameRecord("new", addr2, false), nametypes.NewNameRecord("foo.name", addr1, false)), - expectedError: sdkerrors.ErrInvalidRequest.Wrap(nametypes.ErrNameNotBound.Error()), - }, - } - - acc1 := &authtypes.BaseAccount{ - Address: addr1.String(), - } - acc2 := &authtypes.BaseAccount{ - Address: addr2.String(), - } - accs := authtypes.GenesisAccounts{acc1, acc2} - app := simapp.SetupWithGenesisAccounts(t, "", accs) - ctx := app.BaseApp.NewContext(false) - - var nameData nametypes.GenesisState - nameData.Bindings = append(nameData.Bindings, nametypes.NewNameRecord("name", addr1, false)) - nameData.Bindings = append(nameData.Bindings, nametypes.NewNameRecord("example.name", addr1, false)) - nameData.Params.AllowUnrestrictedNames = false - nameData.Params.MaxNameLevels = 16 - nameData.Params.MinSegmentLength = 2 - nameData.Params.MaxSegmentLength = 16 - - app.NameKeeper.InitGenesis(ctx, nameData) - - handler := name.NewHandler(app.NameKeeper) - - for _, tc := range tests { - t.Run(tc.name, func(t *testing.T) { - response, err := handler(ctx, tc.msg) - if tc.expectedError != nil { - require.EqualError(t, err, tc.expectedError.Error()) - } else { - require.NoError(t, err) - } - if tc.expectedEvent != nil { - result := containsMessage(response, tc.expectedEvent) - require.True(t, result, fmt.Sprintf("Expected typed event was not found: %v", tc.expectedEvent)) - } - }) - } -} - -// delete name record -func TestDeleteName(t *testing.T) { - priv1 := secp256k1.GenPrivKey() - addr1 := sdk.AccAddress(priv1.PubKey().Address()) - - tests := []struct { - name string - expectedError error - msg *nametypes.MsgDeleteNameRequest - expectedEvent proto.Message - }{ - { - name: "delete name record", - msg: nametypes.NewMsgDeleteNameRequest(nametypes.NewNameRecord("example.name", addr1, false)), - expectedError: nil, - expectedEvent: nametypes.NewEventNameUnbound(addr1.String(), "example.name", false), - }, - { - name: "create bad name record", - msg: nametypes.NewMsgDeleteNameRequest(nametypes.NewNameRecord("example.name", addr1, false)), - expectedError: sdkerrors.ErrInvalidRequest.Wrap("name does not exist"), - }, - } - - acc1 := &authtypes.BaseAccount{ - Address: addr1.String(), - } - accs := authtypes.GenesisAccounts{acc1} - app := simapp.SetupWithGenesisAccounts(t, "", accs) - ctx := app.BaseApp.NewContext(false) - - var nameData nametypes.GenesisState - nameData.Bindings = append(nameData.Bindings, nametypes.NewNameRecord("name", addr1, false)) - nameData.Bindings = append(nameData.Bindings, nametypes.NewNameRecord("example.name", addr1, false)) - nameData.Params.AllowUnrestrictedNames = false - nameData.Params.MaxNameLevels = 16 - nameData.Params.MinSegmentLength = 2 - nameData.Params.MaxSegmentLength = 16 - - app.NameKeeper.InitGenesis(ctx, nameData) - - handler := name.NewHandler(app.NameKeeper) - - for _, tc := range tests { - t.Run(tc.name, func(t *testing.T) { - response, err := handler(ctx, tc.msg) - if tc.expectedError != nil { - require.EqualError(t, err, tc.expectedError.Error()) - } else { - require.NoError(t, err) - } - if tc.expectedEvent != nil { - result := containsMessage(response, tc.expectedEvent) - require.True(t, result, fmt.Sprintf("Expected typed event was not found: %v", tc.expectedEvent)) - } - }) - } -} - -func TestModifyName(t *testing.T) { - priv1 := secp256k1.GenPrivKey() - addr1 := sdk.AccAddress(priv1.PubKey().Address()) - - acc1 := &authtypes.BaseAccount{ - Address: addr1.String(), - } - accs := authtypes.GenesisAccounts{acc1} - app := simapp.SetupWithGenesisAccounts(t, "", accs) - ctx := app.BaseApp.NewContext(false) - - var nameData nametypes.GenesisState - nameData.Bindings = append(nameData.Bindings, nametypes.NewNameRecord("name", addr1, false)) - nameData.Bindings = append(nameData.Bindings, nametypes.NewNameRecord("example.name", addr1, false)) - nameData.Params.AllowUnrestrictedNames = false - nameData.Params.MaxNameLevels = 16 - nameData.Params.MinSegmentLength = 2 - nameData.Params.MaxSegmentLength = 16 - app.NameKeeper.InitGenesis(ctx, nameData) - - handler := name.NewHandler(app.NameKeeper) - authority := app.NameKeeper.GetAuthority() - - tests := []struct { - name string - expectedError error - msg *nametypes.MsgModifyNameRequest - expectedEvent proto.Message - }{ - { - name: "modify name record, via gov ", - msg: nametypes.NewMsgModifyNameRequest(authority, "name", addr1, true), - expectedError: nil, - expectedEvent: nametypes.NewEventNameUpdate(addr1.String(), "name", true), - }, - { - name: "modify name record, via owner", - msg: nametypes.NewMsgModifyNameRequest(addr1.String(), "name", addr1, true), - expectedError: nil, - expectedEvent: nametypes.NewEventNameUpdate(addr1.String(), "name", true), - }, - { - name: "modify name record with multi level", - msg: nametypes.NewMsgModifyNameRequest(authority, "example.name", addr1, true), - expectedError: nil, - expectedEvent: nametypes.NewEventNameUpdate(addr1.String(), "example.name", true), - }, - { - name: "modify name - fails with invalid address", - msg: nametypes.NewMsgModifyNameRequest(authority, "name", sdk.AccAddress{}, true), - expectedError: sdkerrors.ErrInvalidRequest.Wrap("empty address string is not allowed"), - expectedEvent: nil, - }, - { - name: "modify name - fails with non existent root record", - msg: nametypes.NewMsgModifyNameRequest(authority, "jackthecat", addr1, true), - expectedError: sdkerrors.ErrInvalidRequest.Wrap(nametypes.ErrNameNotBound.Error()), - expectedEvent: nil, - }, - { - name: "modify name - fails with non existent subdomain record", - msg: nametypes.NewMsgModifyNameRequest(authority, "jackthecat.name", addr1, true), - expectedError: sdkerrors.ErrInvalidRequest.Wrap(nametypes.ErrNameNotBound.Error()), - expectedEvent: nil, - }, - { - name: "modify name - fails with invalid authority", - msg: nametypes.NewMsgModifyNameRequest("jackthecat", "name", addr1, true), - expectedError: sdkerrors.ErrUnauthorized.Wrapf("expected %s or %s got %s", authority, addr1.String(), "jackthecat"), - expectedEvent: nil, - }, - { - name: "modify name - fails with empty authority", - msg: nametypes.NewMsgModifyNameRequest("", "name", addr1, true), - expectedError: sdkerrors.ErrUnauthorized.Wrapf("expected %s or %s got %s", authority, addr1.String(), ""), - expectedEvent: nil, - }, - } - - for _, tc := range tests { - t.Run(tc.name, func(t *testing.T) { - response, err := handler(ctx, tc.msg) - if tc.expectedError != nil { - require.EqualError(t, err, tc.expectedError.Error()) - } else { - require.NoError(t, err) - } - if tc.expectedEvent != nil { - result := containsMessage(response, tc.expectedEvent) - require.True(t, result, fmt.Sprintf("Expected typed event was not found: %v", tc.expectedEvent)) - } - }) - } -} diff --git a/x/name/keeper/msg_server_test.go b/x/name/keeper/msg_server_test.go index 5a5f3a0ef7..bcb098bff8 100644 --- a/x/name/keeper/msg_server_test.go +++ b/x/name/keeper/msg_server_test.go @@ -2,13 +2,18 @@ package keeper_test import ( "encoding/binary" + "fmt" "testing" + abci "github.com/cometbft/cometbft/abci/types" + "github.com/cosmos/gogoproto/proto" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" @@ -31,6 +36,12 @@ type MsgServerTestSuite struct { owner1Addr sdk.AccAddress acct1 sdk.AccountI + privkey2 cryptotypes.PrivKey + pubkey2 cryptotypes.PubKey + owner2 string + owner2Addr sdk.AccAddress + acct2 sdk.AccountI + addresses []sdk.AccAddress } @@ -47,12 +58,39 @@ func (s *MsgServerTestSuite) SetupTest() { s.owner1 = s.owner1Addr.String() acc := s.app.AccountKeeper.NewAccountWithAddress(s.ctx, s.owner1Addr) s.app.AccountKeeper.SetAccount(s.ctx, acc) + + s.privkey2 = secp256k1.GenPrivKey() + s.pubkey2 = s.privkey2.PubKey() + s.owner2Addr = sdk.AccAddress(s.pubkey2.Address()) + s.owner2 = s.owner2Addr.String() + acc2 := s.app.AccountKeeper.NewAccountWithAddress(s.ctx, s.owner2Addr) + s.app.AccountKeeper.SetAccount(s.ctx, acc2) + + var nameData types.GenesisState + nameData.Bindings = append(nameData.Bindings, types.NewNameRecord("name", s.owner1Addr, false)) + nameData.Bindings = append(nameData.Bindings, types.NewNameRecord("example.name", s.owner1Addr, false)) + nameData.Params.AllowUnrestrictedNames = false + nameData.Params.MaxNameLevels = 16 + nameData.Params.MinSegmentLength = 2 + nameData.Params.MaxSegmentLength = 16 + + s.app.NameKeeper.InitGenesis(s.ctx, nameData) } func TestMsgServerTestSuite(t *testing.T) { suite.Run(t, new(MsgServerTestSuite)) } +func (s *MsgServerTestSuite) containsMessage(events []abci.Event, msg proto.Message) bool { + for _, event := range events { + typeEvent, _ := sdk.ParseTypedEvent(event) + if assert.ObjectsAreEqual(msg, typeEvent) { + return true + } + } + return false +} + func (s *MsgServerTestSuite) TestDeleteNameRequest() { name := "jackthecat.io" s.Require().NoError(s.app.NameKeeper.SetNameRecord(s.ctx, name, s.owner1Addr, false)) @@ -142,3 +180,155 @@ func (s *MsgServerTestSuite) TestDeleteNameRemovingAttributeAccounts() { } } + +// create name record +func (s *MsgServerTestSuite) TestCreateName() { + tests := []struct { + name string + expectedError error + msg *types.MsgBindNameRequest + expectedEvent proto.Message + }{ + { + name: "create name record", + msg: types.NewMsgBindNameRequest(types.NewNameRecord("new", s.owner2Addr, false), types.NewNameRecord("example.name", s.owner1Addr, false)), + expectedError: nil, + expectedEvent: types.NewEventNameBound(s.owner2, "new.example.name", false), + }, + { + name: "create bad name record", + msg: types.NewMsgBindNameRequest(types.NewNameRecord("new", s.owner2Addr, false), types.NewNameRecord("foo.name", s.owner1Addr, false)), + expectedError: sdkerrors.ErrInvalidRequest.Wrap(types.ErrNameNotBound.Error()), + }, + } + + for _, tc := range tests { + s.Run(tc.name, func() { + s.ctx = s.ctx.WithEventManager(sdk.NewEventManager()) + _, err := s.msgServer.BindName(s.ctx, tc.msg) + if tc.expectedError != nil { + s.Require().EqualError(err, tc.expectedError.Error()) + } else { + s.Require().NoError(err) + } + if tc.expectedEvent != nil { + result := s.containsMessage(s.ctx.EventManager().ABCIEvents(), tc.expectedEvent) + s.Require().True(result, fmt.Sprintf("Expected typed event was not found: %v", tc.expectedEvent)) + } + }) + } +} + +// delete name record +func (s *MsgServerTestSuite) TestDeleteName() { + tests := []struct { + name string + expectedError error + msg *types.MsgDeleteNameRequest + expectedEvent proto.Message + }{ + { + name: "delete name record", + msg: types.NewMsgDeleteNameRequest(types.NewNameRecord("example.name", s.owner1Addr, false)), + expectedError: nil, + expectedEvent: types.NewEventNameUnbound(s.owner1, "example.name", false), + }, + { + name: "create bad name record", + msg: types.NewMsgDeleteNameRequest(types.NewNameRecord("example.name", s.owner1Addr, false)), + expectedError: sdkerrors.ErrInvalidRequest.Wrap("name does not exist"), + }, + } + + for _, tc := range tests { + s.Run(tc.name, func() { + s.ctx = s.ctx.WithEventManager(sdk.NewEventManager()) + _, err := s.msgServer.DeleteName(s.ctx, tc.msg) + if tc.expectedError != nil { + s.Require().EqualError(err, tc.expectedError.Error()) + } else { + s.Require().NoError(err) + } + if tc.expectedEvent != nil { + result := s.containsMessage(s.ctx.EventManager().ABCIEvents(), tc.expectedEvent) + s.Require().True(result, fmt.Sprintf("Expected typed event was not found: %v", tc.expectedEvent)) + } + }) + } +} + +func (s *MsgServerTestSuite) TestModifyName() { + authority := s.app.NameKeeper.GetAuthority() + + tests := []struct { + name string + expectedError error + msg *types.MsgModifyNameRequest + expectedEvent proto.Message + }{ + { + name: "modify name record, via gov ", + msg: types.NewMsgModifyNameRequest(authority, "name", s.owner1Addr, true), + expectedError: nil, + expectedEvent: types.NewEventNameUpdate(s.owner1, "name", true), + }, + { + name: "modify name record, via owner", + msg: types.NewMsgModifyNameRequest(s.owner1, "name", s.owner1Addr, true), + expectedError: nil, + expectedEvent: types.NewEventNameUpdate(s.owner1, "name", true), + }, + { + name: "modify name record with multi level", + msg: types.NewMsgModifyNameRequest(authority, "example.name", s.owner1Addr, true), + expectedError: nil, + expectedEvent: types.NewEventNameUpdate(s.owner1, "example.name", true), + }, + { + name: "modify name - fails with invalid address", + msg: types.NewMsgModifyNameRequest(authority, "name", sdk.AccAddress{}, true), + expectedError: sdkerrors.ErrInvalidRequest.Wrap("empty address string is not allowed"), + expectedEvent: nil, + }, + { + name: "modify name - fails with non existent root record", + msg: types.NewMsgModifyNameRequest(authority, "jackthecat", s.owner1Addr, true), + expectedError: sdkerrors.ErrInvalidRequest.Wrap(types.ErrNameNotBound.Error()), + expectedEvent: nil, + }, + { + name: "modify name - fails with non existent subdomain record", + msg: types.NewMsgModifyNameRequest(authority, "jackthecat.name", s.owner1Addr, true), + expectedError: sdkerrors.ErrInvalidRequest.Wrap(types.ErrNameNotBound.Error()), + expectedEvent: nil, + }, + { + name: "modify name - fails with invalid authority", + msg: types.NewMsgModifyNameRequest("jackthecat", "name", s.owner1Addr, true), + expectedError: sdkerrors.ErrUnauthorized.Wrapf("expected %s or %s got %s", authority, s.owner1, "jackthecat"), + expectedEvent: nil, + }, + { + name: "modify name - fails with empty authority", + msg: types.NewMsgModifyNameRequest("", "name", s.owner1Addr, true), + expectedError: sdkerrors.ErrUnauthorized.Wrapf("expected %s or %s got %s", authority, s.owner1, ""), + expectedEvent: nil, + }, + } + + for _, tc := range tests { + s.Run(tc.name, func() { + s.ctx = s.ctx.WithEventManager(sdk.NewEventManager()) + _, err := s.msgServer.ModifyName(s.ctx, tc.msg) + if tc.expectedError != nil { + s.Require().EqualError(err, tc.expectedError.Error()) + } else { + s.Require().NoError(err) + } + if tc.expectedEvent != nil { + result := s.containsMessage(s.ctx.EventManager().ABCIEvents(), tc.expectedEvent) + s.Require().True(result, fmt.Sprintf("Expected typed event was not found: %v", tc.expectedEvent)) + } + }) + } +} From f011a8941895e9962a80f19ad26d17be098479c2 Mon Sep 17 00:00:00 2001 From: Matt Witkowski Date: Fri, 5 Apr 2024 12:09:47 -0400 Subject: [PATCH 11/11] Adds IBC and BasicModuleManager (#1879) * Modify changelog. * Add skeleton for ibc upgrade. * Add logic for v7 upgrade. * Add param migration. * Add upgrades for ibcv8 and add logging. Updated umber tests as well * Remove ModuleBasics, and migrate ibc params. * Update changelog to account for ModuleBasics. * Fix typo in changelog. * Add signing options. * Add finalize block to make test pass and help ensure encoder/decoders are working. * Fix remaining test in app_test.go * Remove replace comment for ibc-go dependency. * Remove commented out code. * Update interfaces for modules. --- CHANGELOG.md | 2 + app/app.go | 97 +++++--------------- app/app_test.go | 15 ++- app/encoding.go | 4 - app/genesis.go | 7 -- app/test_helpers.go | 8 +- app/upgrades.go | 75 ++++++++++++++- app/upgrades_test.go | 17 +++- cmd/provenanced/cmd/root.go | 38 +++++--- cmd/provenanced/cmd/testnet_test.go | 13 ++- go.mod | 7 +- testutil/ibc/testchain.go | 2 +- testutil/network.go | 4 +- x/attribute/module.go | 10 +- x/exchange/module/module.go | 9 +- x/hold/module/module.go | 9 +- x/ibchooks/ibc_middleware_test.go | 2 +- x/ibchooks/module.go | 8 +- x/ibcratelimit/module/ibc_middleware_test.go | 2 +- x/ibcratelimit/module/module.go | 9 +- x/marker/module.go | 9 +- x/metadata/module.go | 8 +- x/msgfees/module/module.go | 9 +- x/name/module.go | 9 +- x/oracle/module/module.go | 9 +- x/reward/module/module.go | 10 +- x/trigger/module/module.go | 11 ++- 27 files changed, 242 insertions(+), 161 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c24d2a249..aaa6c6fa51 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,6 +46,8 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Improvements * Remove unsupported database types [#1760](https://github.com/provenance-io/provenance/issues/1760). +* Update ibc and migrate params [#1760](https://github.com/provenance-io/provenance/issues/1760). +* Replace ModuleBasics with BasicModuleManager [#1760](https://github.com/provenance-io/provenance/issues/1760). * Remove handlers from provenance modules [#1760](https://github.com/provenance-io/provenance/issues/1760). * Updated app.go to use RegisterStreamingServices on BaseApp [#1760](https://github.com/provenance-io/provenance/issues/1760). * Bump the SDK to `v0.50.5-pio-1` (from an earlier ephemeral version) [#1897](https://github.com/provenance-io/provenance/pull/1897). diff --git a/app/app.go b/app/app.go index 6e3e868ffa..39e1226c41 100644 --- a/app/app.go +++ b/app/app.go @@ -191,56 +191,6 @@ var ( // DefaultPowerReduction pio specific value for power reduction for TokensFromConsensusPower DefaultPowerReduction = sdkmath.NewIntFromUint64(1_000_000_000) - // ModuleBasics defines the module BasicManager is in charge of setting up basic, - // non-dependant module elements, such as codec registration - // and genesis verification. - ModuleBasics = module.NewBasicManager( - auth.AppModuleBasic{}, - genutil.AppModuleBasic{}, - bank.AppModuleBasic{}, - capability.AppModuleBasic{}, - staking.AppModuleBasic{}, - mint.AppModuleBasic{}, - distr.AppModuleBasic{}, - gov.NewAppModuleBasic(append( - []govclient.ProposalHandler{}, - paramsclient.ProposalHandler, - nameclient.RootNameProposalHandler, - ), - ), - params.AppModuleBasic{}, - crisis.AppModuleBasic{}, - slashing.AppModuleBasic{}, - feegrantmodule.AppModuleBasic{}, - upgrade.AppModuleBasic{}, - evidence.AppModuleBasic{}, - authzmodule.AppModuleBasic{}, - groupmodule.AppModuleBasic{}, - vesting.AppModuleBasic{}, - // quarantinemodule.AppModuleBasic{}, // TODO[1760]: quarantine - // sanctionmodule.AppModuleBasic{}, // TODO[1760]: sanction - consensus.AppModuleBasic{}, - - ibc.AppModuleBasic{}, - ibctransfer.AppModuleBasic{}, - ica.AppModuleBasic{}, - icq.AppModuleBasic{}, - ibchooks.AppModuleBasic{}, - ibcratelimitmodule.AppModuleBasic{}, - - marker.AppModuleBasic{}, - attribute.AppModuleBasic{}, - name.AppModuleBasic{}, - metadata.AppModuleBasic{}, - wasm.AppModuleBasic{}, - msgfeesmodule.AppModuleBasic{}, - rewardmodule.AppModuleBasic{}, - triggermodule.AppModuleBasic{}, - oraclemodule.AppModuleBasic{}, - holdmodule.AppModuleBasic{}, - exchangemodule.AppModuleBasic{}, - ) - // module account permissions maccPerms = map[string][]string{ authtypes.FeeCollectorName: nil, @@ -449,7 +399,7 @@ func New( app.ParamsKeeper = initParamsKeeper(appCodec, legacyAmino, keys[paramstypes.StoreKey], tkeys[paramstypes.TStoreKey]) // set the BaseApp's parameter store - // TODO[1760]: Update upgrade handler + app.ConsensusParamsKeeper = consensusparamkeeper.NewKeeper( appCodec, runtime.NewKVStoreService(keys[consensusparamtypes.StoreKey]), @@ -838,25 +788,24 @@ func New( icaModule, ) - // TODO[1760]: app-module: BasicModuleManager: Make sure that this setup has everything we need (it was just copied from the SDK). // BasicModuleManager defines the module BasicManager is in charge of setting up basic, // non-dependant module elements, such as codec registration and genesis verification. // By default it is composed of all the module from the module manager. // Additionally, app module basics can be overwritten by passing them as argument. - /* - app.BasicModuleManager = module.NewBasicManagerFromManager( - app.mm, - map[string]module.AppModuleBasic{ - genutiltypes.ModuleName: genutil.NewAppModuleBasic(genutiltypes.DefaultMessageValidator), - govtypes.ModuleName: gov.NewAppModuleBasic( - []govclient.ProposalHandler{ - paramsclient.ProposalHandler, - }, + app.BasicModuleManager = module.NewBasicManagerFromManager( + app.mm, + map[string]module.AppModuleBasic{ + genutiltypes.ModuleName: genutil.NewAppModuleBasic(genutiltypes.DefaultMessageValidator), + govtypes.ModuleName: gov.NewAppModuleBasic( + append( + []govclient.ProposalHandler{}, + paramsclient.ProposalHandler, + nameclient.RootNameProposalHandler, ), - }) - app.BasicModuleManager.RegisterLegacyAminoCodec(legacyAmino) - app.BasicModuleManager.RegisterInterfaces(interfaceRegistry) - */ + ), + }) + app.BasicModuleManager.RegisterLegacyAminoCodec(legacyAmino) + app.BasicModuleManager.RegisterInterfaces(interfaceRegistry) // NOTE: upgrade module is required to be prioritized app.mm.SetOrderPreBlockers( @@ -1299,9 +1248,8 @@ func (app *App) InterfaceRegistry() types.InterfaceRegistry { } // DefaultGenesis returns a default genesis from the registered AppModuleBasic's. -func (a *App) DefaultGenesis() map[string]json.RawMessage { - // TODO[1760] This was changed to ModuleBasics, but it will be removed - return ModuleBasics.DefaultGenesis(a.appCodec) +func (app *App) DefaultGenesis() map[string]json.RawMessage { + return app.BasicModuleManager.DefaultGenesis(app.appCodec) } // GetKey returns the KVStoreKey for the provided store key. @@ -1352,7 +1300,7 @@ func (app *App) RegisterAPIRoutes(apiSvr *api.Server, apiConfig serverconfig.API nodeservice.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter) // Register grpc-gateway routes for all modules. - ModuleBasics.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter) + app.BasicModuleManager.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter) // register swagger API from root so that other applications can override easily if apiConfig.Swagger { @@ -1420,11 +1368,12 @@ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino // register the key tables for legacy param subspaces keyTable := ibcclienttypes.ParamKeyTable() keyTable.RegisterParamSet(&ibcconnectiontypes.Params{}) - paramsKeeper.Subspace(ibctransfertypes.ModuleName) // TODO[1760]: params: Migrate ibc-transfer params. - paramsKeeper.Subspace(ibcexported.ModuleName) // TODO[1760]: params: Migrate ibc-host params. - paramsKeeper.Subspace(icahosttypes.SubModuleName) // TODO[1760]: params: Migrate ica-host params. - paramsKeeper.Subspace(icqtypes.ModuleName) // TODO[1760]: params: Migrate icq params. - paramsKeeper.Subspace(ibchookstypes.ModuleName) // TODO[1760]: params: Migrate ibc-hooks params. + paramsKeeper.Subspace(ibcexported.ModuleName).WithKeyTable(keyTable) + paramsKeeper.Subspace(ibctransfertypes.ModuleName).WithKeyTable(ibctransfertypes.ParamKeyTable()) + paramsKeeper.Subspace(icahosttypes.SubModuleName).WithKeyTable(icahosttypes.ParamKeyTable()) + + paramsKeeper.Subspace(icqtypes.ModuleName) // TODO[1760]: params: Migrate icq params. + paramsKeeper.Subspace(ibchookstypes.ModuleName) // TODO[1760]: params: Migrate ibc-hooks params. return paramsKeeper } diff --git a/app/app_test.go b/app/app_test.go index 6a06b08419..3a28e476a5 100644 --- a/app/app_test.go +++ b/app/app_test.go @@ -47,12 +47,17 @@ func TestSimAppExportAndBlockedAddrs(t *testing.T) { ) } + // finalize block so we have CheckTx state set + _, err := app.FinalizeBlock(&abci.RequestFinalizeBlock{ + Height: 1, + }) + require.NoError(t, err) + app.Commit() // Making a new app object with the db, so that initchain hasn't been called app2 := New(log.NewTestLogger(t), opts.DB, nil, true, - map[int64]bool{}, opts.HomePath, 0, opts.EncConfig, simtestutil.EmptyAppOptions{}) - var err error + map[int64]bool{}, opts.HomePath, 0, MakeEncodingConfig(), simtestutil.EmptyAppOptions{}) require.NotPanics(t, func() { _, err = app2.ExportAppStateAndValidators(false, nil, nil) }, "exporting app state at current height") @@ -144,6 +149,12 @@ func TestExportAppStateAndValidators(t *testing.T) { allAccounts := app.AccountKeeper.GetAllAccounts(ctx) logAccounts(t, allAccounts, "allAccounts") + // finalize block so we have CheckTx state set + _, err := app.FinalizeBlock(&abci.RequestFinalizeBlock{ + Height: 1, + }) + require.NoError(t, err) + app.Commit() // Get an export diff --git a/app/encoding.go b/app/encoding.go index 7eaf6c0f5a..68187444f4 100644 --- a/app/encoding.go +++ b/app/encoding.go @@ -2,7 +2,6 @@ package app import ( "github.com/cosmos/cosmos-sdk/std" - "github.com/provenance-io/provenance/app/params" ) @@ -14,8 +13,5 @@ func MakeEncodingConfig() params.EncodingConfig { encodingConfig := params.MakeTestEncodingConfig() std.RegisterLegacyAminoCodec(encodingConfig.Amino) std.RegisterInterfaces(encodingConfig.InterfaceRegistry) - - ModuleBasics.RegisterLegacyAminoCodec(encodingConfig.Amino) - ModuleBasics.RegisterInterfaces(encodingConfig.InterfaceRegistry) return encodingConfig } diff --git a/app/genesis.go b/app/genesis.go index 5bf0c1da80..69e3fb3666 100644 --- a/app/genesis.go +++ b/app/genesis.go @@ -2,8 +2,6 @@ package app import ( "encoding/json" - - "github.com/cosmos/cosmos-sdk/codec" ) // The genesis state of the blockchain is represented here as a map of raw json @@ -14,8 +12,3 @@ import ( // the ModuleBasicManager which populates json from each BasicModule // object provided to it during init. type GenesisState map[string]json.RawMessage - -// NewDefaultGenesisState generates the default state for the application. -func NewDefaultGenesisState(cdc codec.JSONCodec) GenesisState { - return ModuleBasics.DefaultGenesis(cdc) -} diff --git a/app/test_helpers.go b/app/test_helpers.go index 84b40f8d12..e46685e493 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -87,7 +87,7 @@ func setup(t *testing.T, withGenesis bool, invCheckPeriod uint, chainID string) app := New(loggerMaker(), db, nil, true, map[int64]bool{}, t.TempDir(), invCheckPeriod, encCdc, simtestutil.EmptyAppOptions{}, baseapp.SetChainID(chainID)) if withGenesis { - return app, NewDefaultGenesisState(encCdc.Marshaler) + return app, app.DefaultGenesis() } return app, GenesisState{} } @@ -162,7 +162,7 @@ func NewAppWithCustomOptions(t *testing.T, isCheckTx bool, options SetupOptions) } app := New(options.Logger, options.DB, nil, true, options.SkipUpgradeHeights, options.HomePath, options.InvCheckPeriod, options.EncConfig, options.AppOpts) - genesisState := NewDefaultGenesisState(app.appCodec) + genesisState := app.DefaultGenesis() genesisState = genesisStateWithValSet(t, app, genesisState, valSet, []authtypes.GenesisAccount{acc}, balance) if !isCheckTx { @@ -224,7 +224,7 @@ func genesisStateWithValSet(t *testing.T, bondAmt := sdk.DefaultPowerReduction for _, val := range valSet.Validators { - pk, err := cryptocodec.FromTmPubKeyInterface(val.PubKey) + pk, err := cryptocodec.FromCmtPubKeyInterface(val.PubKey) require.NoError(t, err) pkAny, err := codectypes.NewAnyWithValue(pk) require.NoError(t, err) @@ -353,7 +353,7 @@ func GenesisStateWithSingleValidator(t *testing.T, app *App) GenesisState { }, } - genesisState := NewDefaultGenesisState(app.appCodec) + genesisState := app.DefaultGenesis() genesisState = genesisStateWithValSet(t, app, genesisState, valSet, []authtypes.GenesisAccount{acc}, balances...) return genesisState diff --git a/app/upgrades.go b/app/upgrades.go index 0295093106..be81e0c7b0 100644 --- a/app/upgrades.go +++ b/app/upgrades.go @@ -9,15 +9,17 @@ import ( storetypes "cosmossdk.io/store/types" upgradetypes "cosmossdk.io/x/upgrade/types" - icqtypes "github.com/cosmos/ibc-apps/modules/async-icq/v8/types" - transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" - "github.com/cosmos/cosmos-sdk/baseapp" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" crisistypes "github.com/cosmos/cosmos-sdk/x/crisis/types" + paramstypes "github.com/cosmos/cosmos-sdk/x/params/types" + icqtypes "github.com/cosmos/ibc-apps/modules/async-icq/v8/types" + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + "github.com/cosmos/ibc-go/v8/modules/core/exported" + ibctmmigrations "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint/migrations" "github.com/provenance-io/provenance/x/exchange" "github.com/provenance-io/provenance/x/hold" ibchookstypes "github.com/provenance-io/provenance/x/ibchooks/types" @@ -168,11 +170,26 @@ var upgrades = map[string]appUpgrade{ Added: []string{crisistypes.ModuleName}, Handler: func(ctx sdk.Context, app *App, vm module.VersionMap) (module.VersionMap, error) { var err error + + if err := pruneIBCExpiredConsensusStates(ctx, app); err != nil { + return nil, err + } + + err = migrateBaseappParams(ctx, app) + if err != nil { + return nil, err + } + vm, err = runModuleMigrations(ctx, app, vm) if err != nil { return nil, err } + err = updateIBCClients(ctx, app) + if err != nil { + return nil, err + } + removeInactiveValidatorDelegations(ctx, app) return vm, nil @@ -182,11 +199,26 @@ var upgrades = map[string]appUpgrade{ Added: []string{crisistypes.ModuleName}, Handler: func(ctx sdk.Context, app *App, vm module.VersionMap) (module.VersionMap, error) { var err error + + if err := pruneIBCExpiredConsensusStates(ctx, app); err != nil { + return nil, err + } + + err = migrateBaseappParams(ctx, app) + if err != nil { + return nil, err + } + vm, err = runModuleMigrations(ctx, app, vm) if err != nil { return nil, err } + err = updateIBCClients(ctx, app) + if err != nil { + return nil, err + } + removeInactiveValidatorDelegations(ctx, app) return vm, nil @@ -447,6 +479,43 @@ func updateIbcMarkerDenomMetadata(ctx sdk.Context, app *App) { ctx.Logger().Info("Done updating ibc marker denom metadata") } +// pruneIBCExpiredConsensusStates prunes expired consensus states for IBC. +func pruneIBCExpiredConsensusStates(ctx sdk.Context, app *App) error { + ctx.Logger().Info("Pruning expired consensus states for IBC.") + _, err := ibctmmigrations.PruneExpiredConsensusStates(ctx, app.appCodec, app.IBCKeeper.ClientKeeper) + if err != nil { + ctx.Logger().Error(fmt.Sprintf("unable to prune expired consensus states, error: %s.", err)) + return err + } + ctx.Logger().Info("Done pruning expired consensus states for IBC.") + return nil +} + +// updateIBCClients updates the allowed clients for IBC. +// TODO: Remove with the umber handlers. +func updateIBCClients(ctx sdk.Context, app *App) error { + ctx.Logger().Info("Updating IBC AllowedClients.") + params := app.IBCKeeper.ClientKeeper.GetParams(ctx) + params.AllowedClients = append(params.AllowedClients, exported.Localhost) + app.IBCKeeper.ClientKeeper.SetParams(ctx, params) + ctx.Logger().Info("Done updating IBC AllowedClients.") + return nil +} + +// migrateBaseappParams migrates to new ConsensusParamsKeeper +// TODO: Remove with the umber handlers. +func migrateBaseappParams(ctx sdk.Context, app *App) error { + ctx.Logger().Info("Migrating legacy params.") + legacyBaseAppSubspace := app.ParamsKeeper.Subspace(baseapp.Paramspace).WithKeyTable(paramstypes.ConsensusParamsKeyTable()) + err := baseapp.MigrateParams(ctx, legacyBaseAppSubspace, app.ConsensusParamsKeeper.ParamsStore) + if err != nil { + ctx.Logger().Error(fmt.Sprintf("unable to migrate legacy params to ConsensusParamsKeeper, error: %s.", err)) + return err + } + ctx.Logger().Info("Done migrating legacy params.") + return nil +} + // convertNavUnits iterates all the net asset values and updates their units if they are using usd. // TODO: Remove with the tourmaline handlers. func convertNavUnits(ctx sdk.Context, app *App) { diff --git a/app/upgrades_test.go b/app/upgrades_test.go index f9a0e46bc2..b33292fed3 100644 --- a/app/upgrades_test.go +++ b/app/upgrades_test.go @@ -479,6 +479,12 @@ func (s *UpgradeTestSuite) TestTourmaline() { func (s *UpgradeTestSuite) TestUmberRC1() { expInLog := []string{ + "INF Pruning expired consensus states for IBC.", + "INF Done pruning expired consensus states for IBC.", + "INF Migrating legacy params.", + "INF Done migrating legacy params.", + "INF Updating IBC AllowedClients.", + "INF Done updating IBC AllowedClients.", "INF Starting module migrations. This may take a significant amount of time to complete. Do not restart node.", "INF removing all delegations from validators that have been inactive (unbonded) for 21 days", } @@ -487,7 +493,16 @@ func (s *UpgradeTestSuite) TestUmberRC1() { } func (s *UpgradeTestSuite) TestUmber() { - expInLog := []string{} + expInLog := []string{ + "INF Pruning expired consensus states for IBC.", + "INF Done pruning expired consensus states for IBC.", + "INF Migrating legacy params.", + "INF Done migrating legacy params.", + "INF Updating IBC AllowedClients.", + "INF Done updating IBC AllowedClients.", + "INF Starting module migrations. This may take a significant amount of time to complete. Do not restart node.", + "INF removing all delegations from validators that have been inactive (unbonded) for 21 days", + } s.AssertUpgradeHandlerLogs("umber", expInLog, nil) } diff --git a/cmd/provenanced/cmd/root.go b/cmd/provenanced/cmd/root.go index 43a2388a6b..09b7c52b22 100644 --- a/cmd/provenanced/cmd/root.go +++ b/cmd/provenanced/cmd/root.go @@ -37,7 +37,9 @@ import ( "github.com/cosmos/cosmos-sdk/server" serverconfig "github.com/cosmos/cosmos-sdk/server/config" servertypes "github.com/cosmos/cosmos-sdk/server/types" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" "github.com/cosmos/cosmos-sdk/types/tx/signing" authcmd "github.com/cosmos/cosmos-sdk/x/auth/client/cli" "github.com/cosmos/cosmos-sdk/x/auth/tx" @@ -65,7 +67,21 @@ const ( // NewRootCmd creates a new root command for provenanced. It is called once in the main function. // Providing sealConfig = false is only for unit tests that want to run multiple commands. func NewRootCmd(sealConfig bool) (*cobra.Command, params.EncodingConfig) { + // tempDir creates a temporary home directory. + tempDir, err := os.MkdirTemp("", "provenanced") + if err != nil { + panic(fmt.Errorf("failed to create temp dir: %w", err)) + } + os.RemoveAll(tempDir) + encodingConfig := app.MakeEncodingConfig() + tempApp := app.New(log.NewNopLogger(), dbm.NewMemDB(), nil, true, nil, + tempDir, + 0, + encodingConfig, + simtestutil.EmptyAppOptions{}, + ) + initClientCtx := client.Context{}. WithCodec(encodingConfig.Marshaler). WithInterfaceRegistry(encodingConfig.InterfaceRegistry). @@ -137,7 +153,7 @@ func NewRootCmd(sealConfig bool) (*cobra.Command, params.EncodingConfig) { }, } genAutoCompleteCmd(rootCmd) - initRootCmd(rootCmd, encodingConfig) + initRootCmd(rootCmd, encodingConfig, tempApp.BasicModuleManager) overwriteFlagDefaults(rootCmd, map[string]string{ flags.FlagChainID: "", flags.FlagKeyringBackend: "test", @@ -172,12 +188,12 @@ func Execute(rootCmd *cobra.Command) error { return executor.ExecuteContext(ctx) } -func initRootCmd(rootCmd *cobra.Command, encodingConfig params.EncodingConfig) { +func initRootCmd(rootCmd *cobra.Command, encodingConfig params.EncodingConfig, basicManager module.BasicManager) { rootCmd.AddCommand( - InitCmd(app.ModuleBasics), + InitCmd(basicManager), // genutilcli.CollectGenTxsCmd(banktypes.GenesisBalancesIterator{}, app.DefaultNodeHome), // TODO[1760]: genutil // genutilcli.GenTxCmd(app.ModuleBasics, encodingConfig.TxConfig, banktypes.GenesisBalancesIterator{}, app.DefaultNodeHome), // TODO[1760]: genutil - genutilcli.ValidateGenesisCmd(app.ModuleBasics), + genutilcli.ValidateGenesisCmd(basicManager), AddGenesisAccountCmd(app.DefaultNodeHome), AddRootDomainAccountCmd(app.DefaultNodeHome), AddGenesisMarkerCmd(app.DefaultNodeHome), @@ -186,7 +202,7 @@ func initRootCmd(rootCmd *cobra.Command, encodingConfig params.EncodingConfig) { AddGenesisDefaultMarketCmd(app.DefaultNodeHome), AddGenesisCustomMarketCmd(app.DefaultNodeHome), cmtcli.NewCompletionCmd(rootCmd, true), - testnetCmd(app.ModuleBasics, banktypes.GenesisBalancesIterator{}), + testnetCmd(basicManager, banktypes.GenesisBalancesIterator{}), debug.Cmd(), ConfigCmd(), AddMetaAddressCmd(), @@ -202,8 +218,8 @@ func initRootCmd(rootCmd *cobra.Command, encodingConfig params.EncodingConfig) { // add keybase, auxiliary RPC, query, and tx child commands rootCmd.AddCommand( server.StatusCommand(), - queryCommand(), - txCommand(), + queryCommand(basicManager), + txCommand(basicManager), keys.Commands(), ) @@ -257,7 +273,7 @@ func addModuleInitFlags(startCmd *cobra.Command) { crisis.AddModuleInitFlags(startCmd) } -func queryCommand() *cobra.Command { +func queryCommand(basicManager module.BasicManager) *cobra.Command { cmd := &cobra.Command{ Use: "query", Aliases: []string{"q"}, @@ -275,13 +291,13 @@ func queryCommand() *cobra.Command { authcmd.QueryTxCmd(), ) - app.ModuleBasics.AddQueryCommands(cmd) + basicManager.AddQueryCommands(cmd) cmd.PersistentFlags().String(flags.FlagChainID, "", "The network chain ID") return cmd } -func txCommand() *cobra.Command { +func txCommand(basicManager module.BasicManager) *cobra.Command { cmd := &cobra.Command{ Use: "tx", Short: "Transactions subcommands", @@ -303,7 +319,7 @@ func txCommand() *cobra.Command { flags.LineBreak, ) - app.ModuleBasics.AddTxCommands(cmd) + basicManager.AddTxCommands(cmd) cmd.PersistentFlags().String(flags.FlagChainID, "", "The network chain ID") return cmd diff --git a/cmd/provenanced/cmd/testnet_test.go b/cmd/provenanced/cmd/testnet_test.go index 1c7f43368a..bf12ce5e44 100644 --- a/cmd/provenanced/cmd/testnet_test.go +++ b/cmd/provenanced/cmd/testnet_test.go @@ -11,9 +11,11 @@ import ( "cosmossdk.io/log" + dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/server" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" genutiltest "github.com/cosmos/cosmos-sdk/x/genutil/client/testutil" genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" @@ -29,9 +31,16 @@ func Test_TestnetCmd(t *testing.T) { pioconfig.SetProvenanceConfig("", 0) logger := log.NewNopLogger() cfg, err := genutiltest.CreateDefaultCometConfig(home) + tempApp := app.New(log.NewNopLogger(), dbm.NewMemDB(), nil, true, nil, + home, + 0, + encodingConfig, + simtestutil.EmptyAppOptions{}, + ) + require.NoError(t, err) - err = genutiltest.ExecInitCmd(app.ModuleBasics, home, encodingConfig.Marshaler) + err = genutiltest.ExecInitCmd(tempApp.BasicModuleManager, home, encodingConfig.Marshaler) require.NoError(t, err) serverCtx := server.NewContext(viper.New(), cfg, logger) @@ -43,7 +52,7 @@ func Test_TestnetCmd(t *testing.T) { ctx := context.Background() ctx = context.WithValue(ctx, server.ServerContextKey, serverCtx) ctx = context.WithValue(ctx, client.ClientContextKey, &clientCtx) - cmd := testnetCmd(app.ModuleBasics, banktypes.GenesisBalancesIterator{}) + cmd := testnetCmd(tempApp.BasicModuleManager, banktypes.GenesisBalancesIterator{}) cmd.SetArgs([]string{fmt.Sprintf("--%s=test", flags.FlagKeyringBackend), fmt.Sprintf("--output-dir=%s", home)}) err = cmd.ExecuteContext(ctx) require.NoError(t, err) diff --git a/go.mod b/go.mod index 5a4e33b609..b16fd9b0ac 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module github.com/provenance-io/provenance go 1.21 require ( + cosmossdk.io/core v0.11.0 cosmossdk.io/errors v1.0.1 cosmossdk.io/log v1.3.1 cosmossdk.io/math v1.3.0 @@ -32,6 +33,7 @@ require ( github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/hashicorp/go-metrics v0.5.2 github.com/rakyll/statik v0.1.7 + github.com/regen-network/cosmos-proto v0.3.1 // TODO[1760]: Verify that this is still needed github.com/rs/zerolog v1.32.0 github.com/spf13/cast v1.6.0 github.com/spf13/cobra v1.8.0 @@ -46,8 +48,6 @@ require ( gopkg.in/yaml.v2 v2.4.0 ) -require github.com/regen-network/cosmos-proto v0.3.1 - require ( cloud.google.com/go v0.112.0 // indirect cloud.google.com/go/compute v1.24.0 // indirect @@ -57,7 +57,6 @@ require ( cosmossdk.io/api v0.7.3 // indirect cosmossdk.io/client/v2 v2.0.0-beta.1 // indirect cosmossdk.io/collections v0.4.0 // indirect - cosmossdk.io/core v0.11.0 // indirect cosmossdk.io/depinject v1.0.0-alpha.4 // indirect cosmossdk.io/x/circuit v0.1.0 // indirect cosmossdk.io/x/nft v0.1.0 // indirect @@ -224,8 +223,6 @@ replace ( // TODO[1760]: Update once async-icq creates tag with our changes https://github.com/cosmos/ibc-apps/pull/168 github.com/cosmos/ibc-apps/modules/async-icq/v8 => github.com/provenance-io/ibc-apps/modules/async-icq/v8 v8.0.0-prov-1 - // TODO[1760]: ibc: Put this ibc-go replace back with an updated version (or delete it). - // github.com/cosmos/ibc-go/v6 => github.com/provenance-io/ibc-go/v6 v6.2.0-pio-1 // dgrijalva/jwt-go is deprecated and doesn't receive security updates. // TODO: remove it: https://github.com/cosmos/cosmos-sdk/issues/13134 github.com/dgrijalva/jwt-go => github.com/golang-jwt/jwt/v4 v4.4.2 diff --git a/testutil/ibc/testchain.go b/testutil/ibc/testchain.go index 2352ecaba3..85016678ce 100644 --- a/testutil/ibc/testchain.go +++ b/testutil/ibc/testchain.go @@ -28,7 +28,7 @@ type TestChain struct { func SetupTestingApp(t *testing.T) (ibctesting.TestingApp, map[string]json.RawMessage) { provenanceApp := provenanceapp.Setup(t) - return provenanceApp, provenanceapp.NewDefaultGenesisState(provenanceApp.AppCodec()) + return provenanceApp, provenanceApp.DefaultGenesis() } func (chain *TestChain) StoreContractCounterDirect(suite *suite.Suite) uint64 { diff --git a/testutil/network.go b/testutil/network.go index 7d977e5547..64eb72e3c8 100644 --- a/testutil/network.go +++ b/testutil/network.go @@ -41,6 +41,8 @@ func NewAppConstructor(encodingCfg params.EncodingConfig) testnet.AppConstructor // DefaultTestNetworkConfig creates a network configuration for inproc testing func DefaultTestNetworkConfig() testnet.Config { encCfg := provenanceapp.MakeEncodingConfig() + tempApp := NewAppConstructor(encCfg)(nil).(*provenanceapp.App) + return testnet.Config{ Codec: encCfg.Marshaler, TxConfig: encCfg.TxConfig, @@ -48,7 +50,7 @@ func DefaultTestNetworkConfig() testnet.Config { InterfaceRegistry: encCfg.InterfaceRegistry, AccountRetriever: authtypes.AccountRetriever{}, AppConstructor: NewAppConstructor(encCfg), - GenesisState: provenanceapp.ModuleBasics.DefaultGenesis(encCfg.Marshaler), + GenesisState: tempApp.DefaultGenesis(), TimeoutCommit: 2 * time.Second, ChainID: "chain-" + cmtrand.NewRand().Str(6), NumValidators: 4, diff --git a/x/attribute/module.go b/x/attribute/module.go index f1d4bcfdda..d2a5534476 100644 --- a/x/attribute/module.go +++ b/x/attribute/module.go @@ -11,6 +11,7 @@ import ( abci "github.com/cometbft/cometbft/abci/types" + "cosmossdk.io/core/appmodule" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" cdctypes "github.com/cosmos/cosmos-sdk/codec/types" @@ -28,10 +29,11 @@ import ( ) var ( - _ module.AppModule = AppModule{} - _ module.AppModuleBasic = AppModuleBasic{} - _ module.AppModuleSimulation = AppModule{} - // TODO[1760]: app-module: Add more assertions for the new types and clean up stuff no longer needed. + _ module.AppModuleBasic = (*AppModule)(nil) + _ module.AppModuleSimulation = (*AppModule)(nil) + + _ appmodule.AppModule = (*AppModule)(nil) + _ appmodule.HasBeginBlocker = (*AppModule)(nil) ) // AppModuleBasic contains non-dependent elements for the attribute module. diff --git a/x/exchange/module/module.go b/x/exchange/module/module.go index a1f399d199..99f4d7d5f8 100644 --- a/x/exchange/module/module.go +++ b/x/exchange/module/module.go @@ -6,6 +6,7 @@ import ( "fmt" "math/rand" + "cosmossdk.io/core/appmodule" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" @@ -25,10 +26,10 @@ import ( ) var ( - _ module.AppModuleBasic = AppModuleBasic{} - _ module.AppModule = AppModule{} - _ module.AppModuleSimulation = AppModule{} - // TODO[1760]: app-module: Add more assertions for the new types and clean up stuff no longer needed. + _ module.AppModuleBasic = (*AppModule)(nil) + _ module.AppModuleSimulation = (*AppModule)(nil) + + _ appmodule.AppModule = (*AppModule)(nil) ) type AppModuleBasic struct { diff --git a/x/hold/module/module.go b/x/hold/module/module.go index 404e7dcc47..40f1d8ba69 100644 --- a/x/hold/module/module.go +++ b/x/hold/module/module.go @@ -6,6 +6,7 @@ import ( "fmt" "math/rand" + "cosmossdk.io/core/appmodule" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" @@ -25,10 +26,10 @@ import ( ) var ( - _ module.AppModule = AppModule{} - _ module.AppModuleBasic = AppModuleBasic{} - _ module.AppModuleSimulation = AppModule{} - // TODO[1760]: app-module: Add more assertions for the new types and clean up stuff no longer needed. + _ module.AppModuleBasic = (*AppModule)(nil) + _ module.AppModuleSimulation = (*AppModule)(nil) + + _ appmodule.AppModule = (*AppModule)(nil) ) type AppModule struct { diff --git a/x/ibchooks/ibc_middleware_test.go b/x/ibchooks/ibc_middleware_test.go index 55269db451..119fb8c589 100644 --- a/x/ibchooks/ibc_middleware_test.go +++ b/x/ibchooks/ibc_middleware_test.go @@ -82,7 +82,7 @@ func SetupSimApp() (ibctesting.TestingApp, map[string]json.RawMessage) { db := dbm.NewMemDB() encCdc := app.MakeEncodingConfig() provenanceApp := app.New(log.NewNopLogger(), db, nil, true, map[int64]bool{}, app.DefaultNodeHome, 5, encCdc, simtestutil.EmptyAppOptions{}) - genesis := app.NewDefaultGenesisState(encCdc.Marshaler) + genesis := provenanceApp.DefaultGenesis() return provenanceApp, genesis } diff --git a/x/ibchooks/module.go b/x/ibchooks/module.go index 936bd5650a..a7f40b527b 100644 --- a/x/ibchooks/module.go +++ b/x/ibchooks/module.go @@ -5,6 +5,7 @@ import ( "fmt" "math/rand" + "cosmossdk.io/core/appmodule" "github.com/gorilla/mux" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" @@ -26,9 +27,10 @@ import ( ) var ( - _ module.AppModule = AppModule{} - _ module.AppModuleBasic = AppModuleBasic{} - // TODO[1760]: app-module: Add more assertions for the new types and clean up stuff no longer needed. + _ module.AppModuleBasic = (*AppModule)(nil) + _ module.AppModuleSimulation = (*AppModule)(nil) + + _ appmodule.AppModule = (*AppModule)(nil) ) // AppModuleBasic defines the basic application module used by the ibchooks module. diff --git a/x/ibcratelimit/module/ibc_middleware_test.go b/x/ibcratelimit/module/ibc_middleware_test.go index ff4dcb44eb..61a0c12385 100644 --- a/x/ibcratelimit/module/ibc_middleware_test.go +++ b/x/ibcratelimit/module/ibc_middleware_test.go @@ -54,7 +54,7 @@ func SetupSimApp() (ibctesting.TestingApp, map[string]json.RawMessage) { db := dbm.NewMemDB() encCdc := app.MakeEncodingConfig() provenanceApp := app.New(log.NewNopLogger(), db, nil, true, map[int64]bool{}, app.DefaultNodeHome, 5, encCdc, simtestutil.EmptyAppOptions{}) - genesis := app.NewDefaultGenesisState(encCdc.Marshaler) + genesis := provenanceApp.DefaultGenesis() return provenanceApp, genesis } diff --git a/x/ibcratelimit/module/module.go b/x/ibcratelimit/module/module.go index ecdad2a450..01e51d9f42 100644 --- a/x/ibcratelimit/module/module.go +++ b/x/ibcratelimit/module/module.go @@ -6,6 +6,7 @@ import ( "fmt" "math/rand" + "cosmossdk.io/core/appmodule" "github.com/gorilla/mux" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" @@ -28,10 +29,10 @@ import ( ) var ( - _ module.AppModule = AppModule{} - _ module.AppModuleBasic = AppModuleBasic{} - _ module.AppModuleSimulation = AppModule{} - // TODO[1760]: app-module: Add more assertions for the new types and clean up stuff no longer needed. + _ module.AppModuleBasic = (*AppModule)(nil) + _ module.AppModuleSimulation = (*AppModule)(nil) + + _ appmodule.AppModule = (*AppModule)(nil) ) // AppModuleBasic defines the basic application module used by the ibcratelimit module. diff --git a/x/marker/module.go b/x/marker/module.go index 730b3f1328..e36cd4be88 100644 --- a/x/marker/module.go +++ b/x/marker/module.go @@ -11,6 +11,7 @@ import ( abci "github.com/cometbft/cometbft/abci/types" + "cosmossdk.io/core/appmodule" feegrantkeeper "cosmossdk.io/x/feegrant/keeper" "github.com/cosmos/cosmos-sdk/client" @@ -31,9 +32,11 @@ import ( // type check to ensure the interface is properly implemented var ( - _ module.AppModule = AppModule{} - _ module.AppModuleBasic = AppModuleBasic{} - // TODO[1760]: app-module: Add more assertions for the new types and clean up stuff no longer needed. + _ module.AppModuleBasic = (*AppModule)(nil) + _ module.AppModuleSimulation = (*AppModule)(nil) + + _ appmodule.AppModule = (*AppModule)(nil) + _ appmodule.HasBeginBlocker = (*AppModule)(nil) ) // AppModuleBasic contains non-dependent elements for the marker module. diff --git a/x/metadata/module.go b/x/metadata/module.go index f83e94887d..a67d1b40eb 100644 --- a/x/metadata/module.go +++ b/x/metadata/module.go @@ -6,6 +6,7 @@ import ( "fmt" "math/rand" + "cosmossdk.io/core/appmodule" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" @@ -36,9 +37,10 @@ const StoreKey = types.StoreKey // type check to ensure the interface is properly implemented var ( - _ module.AppModule = AppModule{} - _ module.AppModuleBasic = AppModuleBasic{} - // TODO[1760]: app-module: Add more assertions for the new types and clean up stuff no longer needed. + _ module.AppModuleBasic = (*AppModule)(nil) + _ module.AppModuleSimulation = (*AppModule)(nil) + + _ appmodule.AppModule = (*AppModule)(nil) ) // AppModuleBasic contains non-dependent elements for the metadata module. diff --git a/x/msgfees/module/module.go b/x/msgfees/module/module.go index de827fdf2b..8b680268eb 100644 --- a/x/msgfees/module/module.go +++ b/x/msgfees/module/module.go @@ -10,6 +10,7 @@ import ( abci "github.com/cometbft/cometbft/abci/types" + "cosmossdk.io/core/appmodule" cerrs "cosmossdk.io/errors" sdkclient "github.com/cosmos/cosmos-sdk/client" @@ -26,10 +27,10 @@ import ( ) var ( - _ module.AppModule = AppModule{} - _ module.AppModuleBasic = AppModuleBasic{} - _ module.AppModuleSimulation = AppModule{} - // TODO[1760]: app-module: Add more assertions for the new types and clean up stuff no longer needed. + _ module.AppModuleBasic = (*AppModule)(nil) + _ module.AppModuleSimulation = (*AppModule)(nil) + + _ appmodule.AppModule = (*AppModule)(nil) ) // AppModuleBasic defines the basic application module used by the msgfee module. diff --git a/x/name/module.go b/x/name/module.go index dec09cd7a8..ea37c1656b 100644 --- a/x/name/module.go +++ b/x/name/module.go @@ -6,6 +6,7 @@ import ( "fmt" "math/rand" + "cosmossdk.io/core/appmodule" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" @@ -28,10 +29,10 @@ import ( // type check to ensure the interface is properly implemented var ( - _ module.AppModule = AppModule{} - _ module.AppModuleBasic = AppModuleBasic{} - _ module.AppModuleSimulation = AppModule{} - // TODO[1760]: app-module: Add more assertions for the new types and clean up stuff no longer needed. + _ module.AppModuleBasic = (*AppModule)(nil) + _ module.AppModuleSimulation = (*AppModule)(nil) + + _ appmodule.AppModule = (*AppModule)(nil) ) // AppModuleBasic contains non-dependent elements for the name module. diff --git a/x/oracle/module/module.go b/x/oracle/module/module.go index 2a823db534..5b7b3e9543 100644 --- a/x/oracle/module/module.go +++ b/x/oracle/module/module.go @@ -11,6 +11,7 @@ import ( abci "github.com/cometbft/cometbft/abci/types" + "cosmossdk.io/core/appmodule" cerrs "cosmossdk.io/errors" sdkclient "github.com/cosmos/cosmos-sdk/client" @@ -30,10 +31,10 @@ import ( ) var ( - _ module.AppModule = AppModule{} - _ module.AppModuleBasic = AppModuleBasic{} - _ module.AppModuleSimulation = AppModule{} - // TODO[1760]: app-module: Add more assertions for the new types and clean up stuff no longer needed. + _ module.AppModuleBasic = (*AppModule)(nil) + _ module.AppModuleSimulation = (*AppModule)(nil) + + _ appmodule.AppModule = (*AppModule)(nil) ) // AppModuleBasic defines the basic application module used by the oracle module. diff --git a/x/reward/module/module.go b/x/reward/module/module.go index a427f916f6..1fb2730042 100644 --- a/x/reward/module/module.go +++ b/x/reward/module/module.go @@ -11,6 +11,7 @@ import ( abci "github.com/cometbft/cometbft/abci/types" + "cosmossdk.io/core/appmodule" cerrs "cosmossdk.io/errors" sdkclient "github.com/cosmos/cosmos-sdk/client" @@ -30,9 +31,12 @@ import ( ) var ( - _ module.AppModule = AppModule{} - _ module.AppModuleBasic = AppModuleBasic{} - // TODO[1760]: app-module: Add more assertions for the new types and clean up stuff no longer needed. + _ module.AppModuleBasic = (*AppModule)(nil) + _ module.AppModuleSimulation = (*AppModule)(nil) + + _ appmodule.AppModule = (*AppModule)(nil) + _ appmodule.HasBeginBlocker = (*AppModule)(nil) + _ appmodule.HasEndBlocker = (*AppModule)(nil) ) // AppModuleBasic defines the basic application module used by the reward module. diff --git a/x/trigger/module/module.go b/x/trigger/module/module.go index 977a574237..fdd8401471 100644 --- a/x/trigger/module/module.go +++ b/x/trigger/module/module.go @@ -11,6 +11,7 @@ import ( abci "github.com/cometbft/cometbft/abci/types" + "cosmossdk.io/core/appmodule" cerrs "cosmossdk.io/errors" sdkclient "github.com/cosmos/cosmos-sdk/client" @@ -30,10 +31,12 @@ import ( ) var ( - _ module.AppModule = AppModule{} - _ module.AppModuleBasic = AppModuleBasic{} - _ module.AppModuleSimulation = AppModule{} - // TODO[1760]: app-module: Add more assertions for the new types and clean up stuff no longer needed. + _ module.AppModuleBasic = (*AppModule)(nil) + _ module.AppModuleSimulation = (*AppModule)(nil) + + _ appmodule.AppModule = (*AppModule)(nil) + _ appmodule.HasBeginBlocker = (*AppModule)(nil) + _ appmodule.HasEndBlocker = (*AppModule)(nil) ) // AppModuleBasic defines the basic application module used by the trigger module.